diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 00d177849ba9..f872311e5612 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -6,11 +6,11 @@ ########### # Catch all -/sdk/ @mayurid +/sdk/ @mayurid @lmazuel # Core /sdk/core/ @lmazuel @xiangyan99 @johanste -/sdk/core/azure-core/ @xiangyan99 @bryevdv +/sdk/core/azure-core/ @xiangyan99 @bryevdv @lmazuel # Service team /sdk/identity/ @chlowell @schaabs @@ -37,7 +37,7 @@ /sql/sql/ @jaredmoo /sdk/servicebus/ @annatisch @yunhaoling @YijunXieMS @KieranBrantnerMagee /sdk/synapse/ @aim-for-better @idear1203 -/sdk/textanalytics/ @kristapratico +/sdk/textanalytics/ @kristapratico @iscai-msft # Management Plane /**/*mgmt*/ @zikalino diff --git a/README.md b/README.md index 4e1cc3d7303c..02ceb87cbea6 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,10 @@ Libraries which enable you to provision specific resources. They are responsible * File an issue via [Github Issues](../../issues) * Check [previous questions](https://stackoverflow.com/questions/tagged/azure+python) or ask new ones on StackOverflow using `azure` and `python` tags. +### Community + +* Chat with other community members [![Join the chat at https://gitter.im/azure/azure-sdk-for-python](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/azure/azure-sdk-for-python?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + ### Reporting security issues and security bugs Security issues and bugs should be reported privately, via email, to the Microsoft Security Response Center (MSRC) . You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Further information, including the MSRC PGP key, can be found in the [Security TechCenter](https://www.microsoft.com/msrc/faqs-report-an-issue). diff --git a/common/smoketest/event_hubs_async.py b/common/smoketest/event_hubs_async.py index e0454381e2ee..c5a1520f8c9e 100644 --- a/common/smoketest/event_hubs_async.py +++ b/common/smoketest/event_hubs_async.py @@ -54,7 +54,6 @@ async def send_and_receive_events(self, partition_id): # on_event will close the consumer_client which resumes execution on_event=self.on_event, on_error=self.on_error, - timeout=RECEIVE_TIMEOUT, starting_position=STARTING_POSITION ) diff --git a/common/smoketest/key_vault_certificates.py b/common/smoketest/key_vault_certificates.py index f4229eb2f91e..0ec80aeb7fc5 100644 --- a/common/smoketest/key_vault_certificates.py +++ b/common/smoketest/key_vault_certificates.py @@ -14,7 +14,8 @@ def __init__(self): # * AZURE_CLIENT_ID # * AZURE_CLIENT_SECRET # * AZURE_TENANT_ID - credential = DefaultAzureCredential() + authority_host = os.environ.get('AZURE_AUTHORITY_HOST') or KnownAuthorities.AZURE_PUBLIC_CLOUD + credential = DefaultAzureCredential(authority=authority_host) self.certificate_client = CertificateClient( vault_url=os.environ["AZURE_PROJECT_URL"], credential=credential ) diff --git a/common/smoketest/key_vault_certificates_async.py b/common/smoketest/key_vault_certificates_async.py index 00df0d5f33bf..77e7bc78cd67 100644 --- a/common/smoketest/key_vault_certificates_async.py +++ b/common/smoketest/key_vault_certificates_async.py @@ -14,7 +14,8 @@ def __init__(self): # * AZURE_CLIENT_ID # * AZURE_CLIENT_SECRET # * AZURE_TENANT_ID - credential = DefaultAzureCredential() + authority_host = os.environ.get('AZURE_AUTHORITY_HOST') or KnownAuthorities.AZURE_PUBLIC_CLOUD + credential = DefaultAzureCredential(authority=authority_host) self.certificate_client = CertificateClient( vault_url=os.environ["AZURE_PROJECT_URL"], credential=credential ) diff --git a/common/smoketest/key_vault_keys.py b/common/smoketest/key_vault_keys.py index e5aa80a81c5d..aaf9891e0d3a 100644 --- a/common/smoketest/key_vault_keys.py +++ b/common/smoketest/key_vault_keys.py @@ -14,7 +14,8 @@ def __init__(self): # * AZURE_CLIENT_ID # * AZURE_CLIENT_SECRET # * AZURE_TENANT_ID - credential = DefaultAzureCredential() + authority_host = os.environ.get('AZURE_AUTHORITY_HOST') or KnownAuthorities.AZURE_PUBLIC_CLOUD + credential = DefaultAzureCredential(authority=authority_host) self.key_client = KeyClient( vault_url=os.environ["AZURE_PROJECT_URL"], credential=credential ) diff --git a/common/smoketest/key_vault_keys_async.py b/common/smoketest/key_vault_keys_async.py index f9ba61e9778e..18616c0cd19a 100644 --- a/common/smoketest/key_vault_keys_async.py +++ b/common/smoketest/key_vault_keys_async.py @@ -14,7 +14,8 @@ def __init__(self): # * AZURE_CLIENT_ID # * AZURE_CLIENT_SECRET # * AZURE_TENANT_ID - credential = DefaultAzureCredential() + authority_host = os.environ.get('AZURE_AUTHORITY_HOST') or KnownAuthorities.AZURE_PUBLIC_CLOUD + credential = DefaultAzureCredential(authority=authority_host) self.key_client = KeyClient( vault_url=os.environ["AZURE_PROJECT_URL"], credential=credential ) diff --git a/common/smoketest/key_vault_secrets.py b/common/smoketest/key_vault_secrets.py index a744f1807e72..4363bbf7297d 100644 --- a/common/smoketest/key_vault_secrets.py +++ b/common/smoketest/key_vault_secrets.py @@ -14,7 +14,8 @@ def __init__(self): # * AZURE_CLIENT_ID # * AZURE_CLIENT_SECRET # * AZURE_TENANT_ID - credential = DefaultAzureCredential() + authority_host = os.environ.get('AZURE_AUTHORITY_HOST') or KnownAuthorities.AZURE_PUBLIC_CLOUD + credential = DefaultAzureCredential(authority=authority_host) self.secret_client = SecretClient( vault_url=os.environ["AZURE_PROJECT_URL"], credential=credential ) diff --git a/common/smoketest/key_vault_secrets_async.py b/common/smoketest/key_vault_secrets_async.py index 8ce42ab5d1d0..04464c4b2969 100644 --- a/common/smoketest/key_vault_secrets_async.py +++ b/common/smoketest/key_vault_secrets_async.py @@ -14,7 +14,8 @@ def __init__(self): # * AZURE_CLIENT_ID # * AZURE_CLIENT_SECRET # * AZURE_TENANT_ID - credential = DefaultAzureCredential() + authority_host = os.environ.get('AZURE_AUTHORITY_HOST') or KnownAuthorities.AZURE_PUBLIC_CLOUD + credential = DefaultAzureCredential(authority=authority_host) self.secret_client = SecretClient( vault_url=os.environ["AZURE_PROJECT_URL"], credential=credential ) diff --git a/common/smoketest/smoke_test_async.py b/common/smoketest/smoke_test_async.py index 674f313444f7..21eb8f907b32 100644 --- a/common/smoketest/smoke_test_async.py +++ b/common/smoketest/smoke_test_async.py @@ -10,7 +10,7 @@ from storage_blob_async import StorageBlobAsync -def execute_async_smoke_tests: +def execute_async_smoke_tests(): print("") print("==========================================") print(" AZURE TRACK 2 SDKs SMOKE TEST ASYNC") diff --git a/doc/dev/mgmt/cheatsheet.md b/doc/dev/mgmt/cheatsheet.md index de67b82dfb1b..97724529e997 100644 --- a/doc/dev/mgmt/cheatsheet.md +++ b/doc/dev/mgmt/cheatsheet.md @@ -20,7 +20,11 @@ For all packages:
`python ./scripts/dev_setup.py` For a specific package:
-`python ./scripts/dev_setup.py -p azure-mgmt-servicename` + +```shell +export PACKAGE=azure-mgmt-servicename +python ./scripts/dev_setup.py -p $PACKAGE +``` ## Generate tags for multi-api Swagger Readme @@ -28,7 +32,9 @@ For a specific package:
## Generate a package -`python -m packaging_tools.generate_sdk -v -m restapi_path/readme.md` +```shell +python -m packaging_tools.generate_sdk -v -m restapi_path/readme.md +``` Regenerate multi-api client:
`python ./scripts/multiapi_init_gen.py azure-mgmt-myservice` @@ -60,11 +66,16 @@ Available options: ## ChangeLog -Generate code report for last version on PyPI:
`python -m packaging_tools.code_report --last-pypi azure-mgmt-myservice` - -Generate code report for version installed in current venv:
`python -m packaging_tools.code_report azure-mgmt-myservice` +Changelog is generated by performing following steps: +- generate code report for last version on PyPI: +- generate code report for version installed in current venv +- generate a markdown changelog -Generate a markdown changelog:
`python -m packaging_tools.change_log ./old_version_report.json ./new_version_report.json` +```shell +python -m packaging_tools.code_report --last-pypi $PACKAGE --output=$HOME/old.json +python -m packaging_tools.code_report $PACKAGE --output=$HOME/new.json +python -m packaging_tools.change_log $HOME/old.json $HOME/new.json +``` ## Tests diff --git a/doc/sphinx/_static/js/get_options.js b/doc/sphinx/_static/js/get_options.js index 7a48b68889fd..13badce8b7ca 100644 --- a/doc/sphinx/_static/js/get_options.js +++ b/doc/sphinx/_static/js/get_options.js @@ -45,21 +45,11 @@ function hideSelectors(selectors){ function populateOptions(optionSelector, otherSelectors){ if(currentPackage()){ - var versionRequestUrl = "https://azuresdkdocs.blob.core.windows.net/$web?restype=container&comp=list&prefix=" + SELECTED_LANGUAGE + "/" + currentPackage() + "/versions/" + var versionRequestUrl = "https://azuresdkdocs.blob.core.windows.net/$web/" + SELECTED_LANGUAGE + "/" + currentPackage() + "/versioning/versions" httpGetAsync(versionRequestUrl, function(responseText){ if(responseText){ - data_stored = responseText - - parser = new DOMParser(); - xmlDoc = parser.parseFromString(responseText,"text/xml"); - - nameElements = Array.from(xmlDoc.getElementsByTagName('Name')) - options = [] - - for (var i in nameElements){ - options.push(nameElements[i].textContent.split('/')[3]) - } + options = responseText.match(/[^\r\n]+/g) populateVersionDropDown(optionSelector, options) showSelectors(otherSelectors) @@ -93,19 +83,11 @@ function getPackageUrl(language, package, version){ function populateIndexList(selector, packageName) { - url = "https://azuresdkdocs.blob.core.windows.net/$web?restype=container&comp=list&prefix=" + SELECTED_LANGUAGE + "/" + packageName + "/versions/" + url = "https://azuresdkdocs.blob.core.windows.net/$web/" + SELECTED_LANGUAGE + "/" + packageName + "/versioning/versions" httpGetAsync(url, function (responseText){ if(responseText){ - parser = new DOMParser(); - xmlDoc = parser.parseFromString(responseText,"text/xml"); - - nameElements = Array.from(xmlDoc.getElementsByTagName('Name')) - options = [] - - for (var i in nameElements){ - options.push(nameElements[i].textContent.split('/')[3]) - } + options = responseText.match(/[^\r\n]+/g) for (var i in options){ $(selector).append('
  • ' + options[i] + '
  • ') diff --git a/doc/sphinx/conf.py b/doc/sphinx/conf.py index e479dd9b0760..346db4d9a265 100644 --- a/doc/sphinx/conf.py +++ b/doc/sphinx/conf.py @@ -59,7 +59,7 @@ intersphinx_mapping = { # Dependencies - 'python': ('https://docs.python.org/3.8', None), + 'python': ('https://docs.python.org/3.8', ('/usr/share/doc/python3-doc/html/objects.inv', None)), 'msrestazure': ('http://msrestazure.readthedocs.io/en/latest/', None), 'msrest': ('http://msrest.readthedocs.io/en/latest/', None), 'requests': ('https://requests.kennethreitz.org/en/master/', None), diff --git a/doc/sphinx/package_service_mapping.json b/doc/sphinx/package_service_mapping.json index 4b9fb2ef6493..3208462c2448 100644 --- a/doc/sphinx/package_service_mapping.json +++ b/doc/sphinx/package_service_mapping.json @@ -861,6 +861,11 @@ "service_name": "Cosmos", "manually_generated": true }, + "azure-search-documents": { + "category": "Client", + "service_name": "Search", + "manually_generated": true + }, "azure-keyvault-keys": { "category": "Client", "service_name": "Keyvault", diff --git a/eng/.docsettings.yml b/eng/.docsettings.yml index b2caf85d9cc1..26cda64e1427 100644 --- a/eng/.docsettings.yml +++ b/eng/.docsettings.yml @@ -105,6 +105,7 @@ known_content_issues: - ['sdk/core/azure-mgmt-nspkg/README.rst', 'nspkg and common'] - ['sdk/core/azure-nspkg/README.rst', 'nspkg and common'] - ['sdk/keyvault/azure-keyvault-nspkg/README.md', 'nspkg and common'] + - ['sdk/search/azure-search-nspkg/README.md', 'nspkg and common'] - ['sdk/storage/azure-storage-blob/samples/README.md', 'nspkg and common'] - ['sdk/storage/azure-storage-file-datalake/samples/README.md', 'nspkg and common'] - ['sdk/storage/azure-storage-file-share/samples/README.md', 'nspkg and common'] diff --git a/eng/common/Extract-ReleaseNotes.ps1 b/eng/common/Extract-ReleaseNotes.ps1 index 7d6271014d49..6fff6a11dafc 100644 --- a/eng/common/Extract-ReleaseNotes.ps1 +++ b/eng/common/Extract-ReleaseNotes.ps1 @@ -56,16 +56,7 @@ else if ($releaseNotes.ContainsKey($VersionString)) { $releaseNotesForVersion = $releaseNotes[$VersionString].ReleaseContent - $releaseNotesArray = $releaseNotesForVersion.Split([Environment]::NewLine) - $processedNotes = New-Object System.Collections.ArrayList - foreach ($line in $releaseNotesArray) - { - $lineIsTitle = $line.Startswith('#') -And ($line -match $RELEASE_TITLE_REGEX) - if (-Not $lineIsTitle) - { - $processedNotes.Add($line) > $null - } - } + $processedNotes = $releaseNotesForVersion -Split [Environment]::NewLine | where { $_ -notmatch $RELEASE_TITLE_REGEX } return $processedNotes -Join [Environment]::NewLine } Write-Error "Release Notes for the Specified version ${VersionString} was not found" diff --git a/eng/common/TestResources/New-TestResources.cmd b/eng/common/TestResources/New-TestResources.cmd new file mode 100644 index 000000000000..94b0c1f2db1a --- /dev/null +++ b/eng/common/TestResources/New-TestResources.cmd @@ -0,0 +1,17 @@ +@echo off + +REM Copyright (c) Microsoft Corporation. All rights reserved. +REM Licensed under the MIT License. + +setlocal + +for /f "usebackq delims=" %%i in (`where pwsh 2^>nul`) do ( + set _cmd=%%i +) + +if "%_cmd%"=="" ( + echo Error: PowerShell not found. Please visit https://github.com/powershell/powershell for install instructions. + exit /b 2 +) + +call "%_cmd%" -NoLogo -NoProfile -File "%~dpn0.ps1" %* diff --git a/eng/common/TestResources/New-TestResources.ps1 b/eng/common/TestResources/New-TestResources.ps1 new file mode 100644 index 000000000000..19b38c42e21a --- /dev/null +++ b/eng/common/TestResources/New-TestResources.ps1 @@ -0,0 +1,461 @@ +#!/usr/bin/env pwsh + +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +#Requires -Version 6.0 +#Requires -PSEdition Core +#Requires -Modules @{ModuleName='Az.Accounts'; ModuleVersion='1.6.4'} +#Requires -Modules @{ModuleName='Az.Resources'; ModuleVersion='1.8.0'} + +[CmdletBinding(DefaultParameterSetName = 'Default', SupportsShouldProcess = $true, ConfirmImpact = 'Medium')] +param ( + # Limit $BaseName to enough characters to be under limit plus prefixes, and https://docs.microsoft.com/azure/architecture/best-practices/resource-naming. + [Parameter(Mandatory = $true, Position = 0)] + [ValidatePattern('^[-a-zA-Z0-9\.\(\)_]{0,80}(?<=[a-zA-Z0-9\(\)])$')] + [string] $BaseName, + + [Parameter(Mandatory = $true)] + [string] $ServiceDirectory, + + [Parameter(Mandatory = $true)] + [ValidatePattern('^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$')] + [string] $TestApplicationId, + + [Parameter()] + [string] $TestApplicationSecret, + + [Parameter()] + [ValidatePattern('^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$')] + [string] $TestApplicationOid, + + [Parameter(ParameterSetName = 'Provisioner', Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] $TenantId, + + [Parameter(ParameterSetName = 'Provisioner', Mandatory = $true)] + [ValidatePattern('^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$')] + [string] $ProvisionerApplicationId, + + [Parameter(ParameterSetName = 'Provisioner', Mandatory = $true)] + [string] $ProvisionerApplicationSecret, + + [Parameter()] + [ValidateRange(0, [int]::MaxValue)] + [int] $DeleteAfterHours, + + [Parameter()] + [ValidateNotNullOrEmpty()] + [string] $Location = 'westus2', + + [Parameter()] + [ValidateNotNullOrEmpty()] + [string] $Environment = 'AzureCloud', + + [Parameter()] + [ValidateNotNullOrEmpty()] + [hashtable] $AdditionalParameters, + + [Parameter()] + [switch] $CI = ($null -ne $env:SYSTEM_TEAMPROJECTID), + + [Parameter()] + [switch] $Force +) + +# By default stop for any error. +if (!$PSBoundParameters.ContainsKey('ErrorAction')) { + $ErrorActionPreference = 'Stop' +} + +function Log($Message) { + Write-Host ('{0} - {1}' -f [DateTime]::Now.ToLongTimeString(), $Message) +} + +function Retry([scriptblock] $Action, [int] $Attempts = 5) { + $attempt = 0 + $sleep = 5 + + while ($attempt -lt $Attempts) { + try { + $attempt++ + return $Action.Invoke() + } catch { + if ($attempt -lt $Attempts) { + $sleep *= 2 + + Write-Warning "Attempt $attempt failed: $_. Trying again in $sleep seconds..." + Start-Sleep -Seconds $sleep + } else { + Write-Error -ErrorRecord $_ + } + } + } +} + +# Support actions to invoke on exit. +$exitActions = @({ + if ($exitActions.Count -gt 1) { + Write-Verbose 'Running registered exit actions' + } +}) + +trap { + # Like using try..finally in PowerShell, but without keeping track of more braces or tabbing content. + $exitActions.Invoke() +} + +# Enumerate test resources to deploy. Fail if none found. +$root = [System.IO.Path]::Combine("$PSScriptRoot/../sdk", $ServiceDirectory) | Resolve-Path +$templateFileName = 'test-resources.json' +$templateFiles = @() + +Write-Verbose "Checking for '$templateFileName' files under '$root'" +Get-ChildItem -Path $root -Filter $templateFileName -Recurse | ForEach-Object { + $templateFile = $_.FullName + + Write-Verbose "Found template '$templateFile'" + $templateFiles += $templateFile +} + +if (!$templateFiles) { + Write-Warning -Message "No template files found under '$root'" + exit +} + +# Log in if requested; otherwise, the user is expected to already be authenticated via Connect-AzAccount. +if ($ProvisionerApplicationId) { + $null = Disable-AzContextAutosave -Scope Process + + Log "Logging into service principal '$ProvisionerApplicationId'" + $provisionerSecret = ConvertTo-SecureString -String $ProvisionerApplicationSecret -AsPlainText -Force + $provisionerCredential = [System.Management.Automation.PSCredential]::new($ProvisionerApplicationId, $provisionerSecret) + + $provisionerAccount = Retry { + Connect-AzAccount -Tenant $TenantId -Credential $provisionerCredential -ServicePrincipal -Environment $Environment + } + + $exitActions += { + Write-Verbose "Logging out of service principal '$($provisionerAccount.Context.Account)'" + $null = Disconnect-AzAccount -AzureContext $provisionerAccount.Context + } +} + +# Get test application OID from ID if not already provided. +if ($TestApplicationId -and !$TestApplicationOid) { + $testServicePrincipal = Retry { + Get-AzADServicePrincipal -ApplicationId $TestApplicationId + } + + if ($testServicePrincipal -and $testServicePrincipal.Id) { + $script:TestApplicationOid = $testServicePrincipal.Id + } +} + +# Format the resource group name based on resource group naming recommendations and limitations. +$resourceGroupName = if ($CI) { + $BaseName = 't' + (New-Guid).ToString('n').Substring(0, 16) + Write-Verbose "Generated base name '$BaseName' for CI build" + + # If the ServiceDirectory is an absolute path use the last directory name + # (e.g. D:\foo\bar\ -> bar) + $serviceName = if (Split-Path -IsAbsolute $ServiceDirectory) { + Split-Path -Leaf $ServiceDirectory + } else { + $ServiceDirectory + } + + "rg-{0}-$BaseName" -f ($serviceName -replace '[\\\/:]', '-').Substring(0, [Math]::Min($serviceName.Length, 90 - $BaseName.Length - 4)).Trim('-') +} else { + "rg-$BaseName" +} + +# Tag the resource group to be deleted after a certain number of hours if specified. +$tags = @{ + Creator = if ($env:USER) { $env:USER } else { "${env:USERNAME}" } + ServiceDirectory = $ServiceDirectory +} + +if ($PSBoundParameters.ContainsKey('DeleteAfterHours')) { + $deleteAfter = [DateTime]::UtcNow.AddHours($DeleteAfterHours) + $tags.Add('DeleteAfter', $deleteAfter.ToString('o')) +} + +if ($CI) { + # Add tags for the current CI job. + $tags += @{ + BuildId = "${env:BUILD_BUILDID}" + BuildJob = "${env:AGENT_JOBNAME}" + BuildNumber = "${env:BUILD_BUILDNUMBER}" + BuildReason = "${env:BUILD_REASON}" + } + + # Set the resource group name variable. + Write-Host "Setting variable 'AZURE_RESOURCEGROUP_NAME': $resourceGroupName" + Write-Host "##vso[task.setvariable variable=AZURE_RESOURCEGROUP_NAME;]$resourceGroupName" +} + +Log "Creating resource group '$resourceGroupName' in location '$Location'" +$resourceGroup = Retry { + New-AzResourceGroup -Name "$resourceGroupName" -Location $Location -Tag $tags -Force:$Force +} + +if ($resourceGroup.ProvisioningState -eq 'Succeeded') { + # New-AzResourceGroup would've written an error and stopped the pipeline by default anyway. + Write-Verbose "Successfully created resource group '$($resourceGroup.ResourceGroupName)'" +} + +# Populate the template parameters and merge any additional specified. +$templateParameters = @{ + baseName = $BaseName + testApplicationId = $TestApplicationId + testApplicationOid = "$TestApplicationOid" +} + +if ($TenantId) { + $templateParameters.Add('tenantId', $TenantId) +} +if ($TestApplicationSecret) { + $templateParameters.Add('testApplicationSecret', $TestApplicationSecret) +} +if ($AdditionalParameters) { + $templateParameters += $AdditionalParameters +} + +# Try to detect the shell based on the parent process name (e.g. launch via shebang). +$shell, $shellExportFormat = if (($parentProcessName = (Get-Process -Id $PID).Parent.ProcessName) -and $parentProcessName -eq 'cmd') { + 'cmd', 'set {0}={1}' +} elseif (@('bash', 'csh', 'tcsh', 'zsh') -contains $parentProcessName) { + 'shell', 'export {0}={1}' +} else { + 'PowerShell', '$env:{0} = ''{1}''' +} + +foreach ($templateFile in $templateFiles) { + # Deployment fails if we pass in more parameters than are defined. + Write-Verbose "Removing unnecessary parameters from template '$templateFile'" + $templateJson = Get-Content -LiteralPath $templateFile | ConvertFrom-Json + $templateParameterNames = $templateJson.parameters.PSObject.Properties.Name + + $templateFileParameters = $templateParameters.Clone() + foreach ($key in $templateParameters.Keys) { + if ($templateParameterNames -notcontains $key) { + Write-Verbose "Removing unnecessary parameter '$key'" + $templateFileParameters.Remove($key) + } + } + + $preDeploymentScript = $templateFile | Split-Path | Join-Path -ChildPath 'test-resources-pre.ps1' + if (Test-Path $preDeploymentScript) { + Log "Invoking pre-deployment script '$preDeploymentScript'" + &$preDeploymentScript -ResourceGroupName $resourceGroupName @PSBoundParameters + } + + Log "Deploying template '$templateFile' to resource group '$($resourceGroup.ResourceGroupName)'" + $deployment = Retry { + New-AzResourceGroupDeployment -Name $BaseName -ResourceGroupName $resourceGroup.ResourceGroupName -TemplateFile $templateFile -TemplateParameterObject $templateFileParameters -Location $Location + } + + if ($deployment.ProvisioningState -eq 'Succeeded') { + # New-AzResourceGroupDeployment would've written an error and stopped the pipeline by default anyway. + Write-Verbose "Successfully deployed template '$templateFile' to resource group '$($resourceGroup.ResourceGroupName)'" + } + + if ($deployment.Outputs.Count -and !$CI) { + # Write an extra new line to isolate the environment variables for easy reading. + Log "Persist the following environment variables based on your detected shell ($shell):`n" + } + + $deploymentOutputs = @{} + foreach ($key in $deployment.Outputs.Keys) { + $variable = $deployment.Outputs[$key] + + # Work around bug that makes the first few characters of environment variables be lowercase. + $key = $key.ToUpperInvariant() + + if ($variable.Type -eq 'String' -or $variable.Type -eq 'SecureString') { + $deploymentOutputs[$key] = $variable.Value + + if ($CI) { + # Treat all ARM template output variables as secrets since "SecureString" variables do not set values. + # In order to mask secrets but set environment variables for any given ARM template, we set variables twice as shown below. + Write-Host "Setting variable '$key': ***" + Write-Host "##vso[task.setvariable variable=_$key;issecret=true;]$($variable.Value)" + Write-Host "##vso[task.setvariable variable=$key;]$($variable.Value)" + } else { + Write-Host ($shellExportFormat -f $key, $variable.Value) + } + } + } + + if ($key) { + # Isolate the environment variables for easy reading. + Write-Host "`n" + $key = $null + } + + $postDeploymentScript = $templateFile | Split-Path | Join-Path -ChildPath 'test-resources-post.ps1' + if (Test-Path $postDeploymentScript) { + Log "Invoking post-deployment script '$postDeploymentScript'" + &$postDeploymentScript -ResourceGroupName $resourceGroupName -DeploymentOutputs $deploymentOutputs @PSBoundParameters + } +} + +$exitActions.Invoke() + +<# +.SYNOPSIS +Deploys live test resources defined for a service directory to Azure. + +.DESCRIPTION +Deploys live test resouces specified in test-resources.json files to a resource +group. + +This script searches the directory specified in $ServiceDirectory recursively +for files named test-resources.json. All found test-resources.json files will be +deployed to the test resource group. + +If no test-resources.json files are located the script exits without making +changes to the Azure environment. + +A service principal must first be created before this script is run and passed +to $TestApplicationId and $TestApplicationSecret. Test resources will grant this +service principal access. + +This script uses credentials already specified in Connect-AzAccount or those +specified in $ProvisionerApplicationId and $ProvisionerApplicationSecret. + +.PARAMETER BaseName +A name to use in the resource group and passed to the ARM template as 'baseName'. +Limit $BaseName to enough characters to be under limit plus prefixes specified in +the ARM template. See also https://docs.microsoft.com/azure/architecture/best-practices/resource-naming + +Note: The value specified for this parameter will be overriden and generated +by New-TestResources.ps1 if $CI is specified. + +.PARAMETER ServiceDirectory +A directory under 'sdk' in the repository root - optionally with subdirectories +specified - in which to discover ARM templates named 'test-resources.json'. +This can also be an absolute path or specify parent directories. + +.PARAMETER TestApplicationId +The AAD Application ID to authenticate the test runner against deployed +resources. Passed to the ARM template as 'testApplicationId'. + +This application is used by the test runner to execute tests against the +live test resources. + +.PARAMETER TestApplicationSecret +Optional service principal secret (password) to authenticate the test runner +against deployed resources. Passed to the ARM template as +'testApplicationSecret'. + +This application is used by the test runner to execute tests against the +live test resources. + +.PARAMETER TestApplicationOid +Service Principal Object ID of the AAD Test application. This is used to assign +permissions to the AAD application so it can access tested features on the live +test resources (e.g. Role Assignments on resources). It is passed as to the ARM +template as 'testApplicationOid' + +For more information on the relationship between AAD Applications and Service +Principals see: https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principals + +.PARAMETER TenantId +The tenant ID of a service principal when a provisioner is specified. The same +Tenant ID is used for Test Application and Provisioner Application. This value +is passed to the ARM template as 'tenantId'. + +.PARAMETER ProvisionerApplicationId +The AAD Application ID used to provision test resources when a provisioner is +specified. + +If none is specified New-TestResources.ps1 uses the TestApplicationId. + +This value is not passed to the ARM template. + +.PARAMETER ProvisionerApplicationSecret +A service principal secret (password) used to provision test resources when a +provisioner is specified. + +If none is specified New-TestResources.ps1 uses the TestApplicationSecret. + +This value is not passed to the ARM template. + +.PARAMETER DeleteAfterHours +Optional. Positive integer number of hours from the current time to set the +'DeleteAfter' tag on the created resource group. The computed value is a +timestamp of the form "2020-03-04T09:07:04.3083910Z". + +If this value is not specified no 'DeleteAfter' tag will be assigned to the +created resource group. + +An optional cleanup process can delete resource groups whose "DeleteAfter" +timestamp is less than the current time. + +This isused for CI automation. + +.PARAMETER Location +Optional location where resources should be created. By default this is +'westus2'. + +.PARAMETER AdditionalParameters +Optional key-value pairs of parameters to pass to the ARM template(s). + +.PARAMETER Environment +Name of the cloud environment. The default is the Azure Public Cloud +('PublicCloud') + +.PARAMETER CI +Indicates the script is run as part of a Continuous Integration / Continuous +Deployment (CI/CD) build (only Azure Pipelines is currently supported). + +.PARAMETER Force +Force creation of resources instead of being prompted. + +.EXAMPLE +$subscriptionId = "REPLACE_WITH_SUBSCRIPTION_ID" +Connect-AzAccount -Subscription $subscriptionId +$testAadApp = New-AzADServicePrincipal -Role Owner -DisplayName 'azure-sdk-live-test-app' +.\eng\common\LiveTestResources\New-TestResources.ps1 ` + -BaseName 'myalias' ` + -ServiceDirectory 'keyvault' ` + -TestApplicationId $testAadApp.ApplicationId.ToString() ` + -TestApplicationSecret (ConvertFrom-SecureString $testAadApp.Secret -AsPlainText) + +Run this in a desktop environment to create new AAD apps and Service Principals +that can be used to provision resources and run live tests. + +Requires PowerShell 7 to use ConvertFrom-SecureString -AsPlainText or convert +the SecureString to plaintext by another means. + +.EXAMPLE +eng/New-TestResources.ps1 ` + -BaseName 'Generated' ` + -ServiceDirectory '$(ServiceDirectory)' ` + -TenantId '$(TenantId)' ` + -ProvisionerApplicationId '$(ProvisionerId)' ` + -ProvisionerApplicationSecret '$(ProvisionerSecret)' ` + -TestApplicationId '$(TestAppId)' ` + -TestApplicationSecret '$(TestAppSecret)' ` + -DeleteAfterHours 24 ` + -CI ` + -Force ` + -Verbose + +Run this in an Azure DevOps CI (with approrpiate variables configured) before +executing live tests. The script will output variables as secrets (to enable +log redaction). + +.OUTPUTS +Entries from the ARM templates' "output" section in environment variable syntax +(e.g. $env:RESOURCE_NAME='<< resource name >>') that can be used for running +live tests. + +If run in -CI mode the environment variables will be output in syntax that Azure +DevOps can consume. + +.LINK +Remove-TestResources.ps1 +#> diff --git a/eng/common/TestResources/New-TestResources.ps1.md b/eng/common/TestResources/New-TestResources.ps1.md new file mode 100644 index 000000000000..4c978512519b --- /dev/null +++ b/eng/common/TestResources/New-TestResources.ps1.md @@ -0,0 +1,410 @@ +--- +external help file: -help.xml +Module Name: +online version: +schema: 2.0.0 +--- + +# New-TestResources.ps1 + +## SYNOPSIS +Deploys live test resources defined for a service directory to Azure. + +## SYNTAX + +### Default (Default) +``` +New-TestResources.ps1 [-BaseName] -ServiceDirectory -TestApplicationId + [-TestApplicationSecret ] [-TestApplicationOid ] [-DeleteAfterHours ] + [-Location ] [-Environment ] [-AdditionalParameters ] [-CI] [-Force] [-WhatIf] + [-Confirm] [] +``` + +### Provisioner +``` +New-TestResources.ps1 [-BaseName] -ServiceDirectory -TestApplicationId + [-TestApplicationSecret ] [-TestApplicationOid ] -TenantId + -ProvisionerApplicationId -ProvisionerApplicationSecret [-DeleteAfterHours ] + [-Location ] [-Environment ] [-AdditionalParameters ] [-CI] [-Force] [-WhatIf] + [-Confirm] [] +``` + +## DESCRIPTION +Deploys live test resouces specified in test-resources.json files to a resource +group. + +This script searches the directory specified in $ServiceDirectory recursively +for files named test-resources.json. +All found test-resources.json files will be +deployed to the test resource group. + +If no test-resources.json files are located the script exits without making +changes to the Azure environment. + +A service principal must first be created before this script is run and passed +to $TestApplicationId and $TestApplicationSecret. +Test resources will grant this +service principal access. + +This script uses credentials already specified in Connect-AzAccount or those +specified in $ProvisionerApplicationId and $ProvisionerApplicationSecret. + +## EXAMPLES + +### EXAMPLE 1 +``` +$subscriptionId = "REPLACE_WITH_SUBSCRIPTION_ID" +Connect-AzAccount -Subscription $subscriptionId +$testAadApp = New-AzADServicePrincipal -Role Owner -DisplayName 'azure-sdk-live-test-app' +.\eng\common\LiveTestResources\New-TestResources.ps1 ` + -BaseName 'myalias' ` + -ServiceDirectory 'keyvault' ` + -TestApplicationId $testAadApp.ApplicationId.ToString() ` + -TestApplicationSecret (ConvertFrom-SecureString $testAadApp.Secret -AsPlainText) +``` + +Run this in a desktop environment to create new AAD apps and Service Principals +that can be used to provision resources and run live tests. + +Requires PowerShell 7 to use ConvertFrom-SecureString -AsPlainText or convert +the SecureString to plaintext by another means. + +### EXAMPLE 2 +``` +eng/New-TestResources.ps1 ` + -BaseName 'Generated' ` + -ServiceDirectory '$(ServiceDirectory)' ` + -TenantId '$(TenantId)' ` + -ProvisionerApplicationId '$(ProvisionerId)' ` + -ProvisionerApplicationSecret '$(ProvisionerSecret)' ` + -TestApplicationId '$(TestAppId)' ` + -TestApplicationSecret '$(TestAppSecret)' ` + -DeleteAfterHours 24 ` + -CI ` + -Force ` + -Verbose +``` + +Run this in an Azure DevOps CI (with approrpiate variables configured) before +executing live tests. +The script will output variables as secrets (to enable +log redaction). + +## PARAMETERS + +### -BaseName +A name to use in the resource group and passed to the ARM template as 'baseName'. +Limit $BaseName to enough characters to be under limit plus prefixes specified in +the ARM template. +See also https://docs.microsoft.com/azure/architecture/best-practices/resource-naming + +Note: The value specified for this parameter will be overriden and generated +by New-TestResources.ps1 if $CI is specified. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: True +Position: 1 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ServiceDirectory +A directory under 'sdk' in the repository root - optionally with subdirectories +specified - in which to discover ARM templates named 'test-resources.json'. +This can also be an absolute path or specify parent directories. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -TestApplicationId +The AAD Application ID to authenticate the test runner against deployed +resources. +Passed to the ARM template as 'testApplicationId'. + +This application is used by the test runner to execute tests against the +live test resources. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -TestApplicationSecret +Optional service principal secret (password) to authenticate the test runner +against deployed resources. +Passed to the ARM template as +'testApplicationSecret'. + +This application is used by the test runner to execute tests against the +live test resources. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -TestApplicationOid +Service Principal Object ID of the AAD Test application. +This is used to assign +permissions to the AAD application so it can access tested features on the live +test resources (e.g. +Role Assignments on resources). +It is passed as to the ARM +template as 'testApplicationOid' + +For more information on the relationship between AAD Applications and Service +Principals see: https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principals + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -TenantId +The tenant ID of a service principal when a provisioner is specified. +The same +Tenant ID is used for Test Application and Provisioner Application. +This value +is passed to the ARM template as 'tenantId'. + +```yaml +Type: String +Parameter Sets: Provisioner +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ProvisionerApplicationId +The AAD Application ID used to provision test resources when a provisioner is +specified. + +If none is specified New-TestResources.ps1 uses the TestApplicationId. + +This value is not passed to the ARM template. + +```yaml +Type: String +Parameter Sets: Provisioner +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ProvisionerApplicationSecret +A service principal secret (password) used to provision test resources when a +provisioner is specified. + +If none is specified New-TestResources.ps1 uses the TestApplicationSecret. + +This value is not passed to the ARM template. + +```yaml +Type: String +Parameter Sets: Provisioner +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -DeleteAfterHours +Optional. +Positive integer number of hours from the current time to set the +'DeleteAfter' tag on the created resource group. +The computed value is a +timestamp of the form "2020-03-04T09:07:04.3083910Z". + +If this value is not specified no 'DeleteAfter' tag will be assigned to the +created resource group. + +An optional cleanup process can delete resource groups whose "DeleteAfter" +timestamp is less than the current time. + +This isused for CI automation. + +```yaml +Type: Int32 +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: 0 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Location +Optional location where resources should be created. +By default this is +'westus2'. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: Westus2 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Environment +Name of the cloud environment. +The default is the Azure Public Cloud +('PublicCloud') + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: AzureCloud +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -AdditionalParameters +Optional key-value pairs of parameters to pass to the ARM template(s). + +```yaml +Type: Hashtable +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -CI +Indicates the script is run as part of a Continuous Integration / Continuous +Deployment (CI/CD) build (only Azure Pipelines is currently supported). + +```yaml +Type: SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: ($null -ne $env:SYSTEM_TEAMPROJECTID) +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Force +Force creation of resources instead of being prompted. + +```yaml +Type: SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: False +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -WhatIf +Shows what would happen if the cmdlet runs. +The cmdlet is not run. + +```yaml +Type: SwitchParameter +Parameter Sets: (All) +Aliases: wi + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Confirm +Prompts you for confirmation before running the cmdlet. + +```yaml +Type: SwitchParameter +Parameter Sets: (All) +Aliases: cf + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## OUTPUTS + +### Entries from the ARM templates' "output" section in environment variable syntax +### (e.g. $env:RESOURCE_NAME='<< resource name >>') that can be used for running +### live tests. +### If run in -CI mode the environment variables will be output in syntax that Azure +### DevOps can consume. +## NOTES + +## RELATED LINKS + +[Remove-TestResources.ps1](./New-TestResources.ps1.md) + diff --git a/eng/common/TestResources/README.md b/eng/common/TestResources/README.md new file mode 100644 index 000000000000..8eb911419d8d --- /dev/null +++ b/eng/common/TestResources/README.md @@ -0,0 +1,29 @@ +# Live Test Resource Management + +Live test runs require pre-existing resources in Azure. This set of PowerShell +commands automates creation and teardown of live test resources for Desktop and +CI scenarios. + +* [New-TestResources.ps1](./New-TestResources.ps1.md) - Create new test resources +for the given service. +* [Remove-TestResources.ps1](./New-TestResources.ps1.md) - Deletes resources + +## On the Desktop + +Run `New-TestResources.ps1` on your desktop to create live test resources for a +given service (e.g. Storage, Key Vault, etc.). The command will output +environment variables that need to be set when running the live tests. + +See examples for how to create the needed Service Principals and execute live +tests. + +## In CI + +The `New-TestResources.ps1` script is invoked on each test job to create an +isolated environment for live tests. Test resource isolation makes it easier to +parallelize test runs. + +## Other + +PowerShell markdown documentation created with +[PlatyPS](https://github.com/PowerShell/platyPS) \ No newline at end of file diff --git a/eng/common/TestResources/Remove-TestResources.cmd b/eng/common/TestResources/Remove-TestResources.cmd new file mode 100644 index 000000000000..94b0c1f2db1a --- /dev/null +++ b/eng/common/TestResources/Remove-TestResources.cmd @@ -0,0 +1,17 @@ +@echo off + +REM Copyright (c) Microsoft Corporation. All rights reserved. +REM Licensed under the MIT License. + +setlocal + +for /f "usebackq delims=" %%i in (`where pwsh 2^>nul`) do ( + set _cmd=%%i +) + +if "%_cmd%"=="" ( + echo Error: PowerShell not found. Please visit https://github.com/powershell/powershell for install instructions. + exit /b 2 +) + +call "%_cmd%" -NoLogo -NoProfile -File "%~dpn0.ps1" %* diff --git a/eng/common/TestResources/Remove-TestResources.ps1 b/eng/common/TestResources/Remove-TestResources.ps1 new file mode 100644 index 000000000000..494fe1c873d1 --- /dev/null +++ b/eng/common/TestResources/Remove-TestResources.ps1 @@ -0,0 +1,173 @@ +#!/usr/bin/env pwsh + +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +#Requires -Version 6.0 +#Requires -PSEdition Core +#Requires -Modules @{ModuleName='Az.Accounts'; ModuleVersion='1.6.4'} +#Requires -Modules @{ModuleName='Az.Resources'; ModuleVersion='1.8.0'} + +[CmdletBinding(DefaultParameterSetName = 'Default', SupportsShouldProcess = $true, ConfirmImpact = 'Medium')] +param ( + # Limit $BaseName to enough characters to be under limit plus prefixes, and https://docs.microsoft.com/azure/architecture/best-practices/resource-naming. + [Parameter(ParameterSetName = 'Default', Mandatory = $true, Position = 0)] + [Parameter(ParameterSetName = 'Default+Provisioner', Mandatory = $true, Position = 0)] + [ValidatePattern('^[-a-zA-Z0-9\.\(\)_]{0,80}(?<=[a-zA-Z0-9\(\)])$')] + [string] $BaseName, + + [Parameter(ParameterSetName = 'ResourceGroup', Mandatory = $true)] + [Parameter(ParameterSetName = 'ResourceGroup+Provisioner', Mandatory = $true)] + [string] $ResourceGroupName, + + [Parameter(ParameterSetName = 'Default+Provisioner', Mandatory = $true)] + [Parameter(ParameterSetName = 'ResourceGroup+Provisioner', Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] $TenantId, + + [Parameter(ParameterSetName = 'Default+Provisioner', Mandatory = $true)] + [Parameter(ParameterSetName = 'ResourceGroup+Provisioner', Mandatory = $true)] + [ValidatePattern('^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$')] + [string] $ProvisionerApplicationId, + + [Parameter(ParameterSetName = 'Default+Provisioner', Mandatory = $true)] + [Parameter(ParameterSetName = 'ResourceGroup+Provisioner', Mandatory = $true)] + [string] $ProvisionerApplicationSecret, + + [Parameter()] + [ValidateNotNullOrEmpty()] + [string] $Environment = 'AzureCloud', + + [Parameter()] + [switch] $Force +) + +# By default stop for any error. +if (!$PSBoundParameters.ContainsKey('ErrorAction')) { + $ErrorActionPreference = 'Stop' +} + +function Log($Message) { + Write-Host ('{0} - {1}' -f [DateTime]::Now.ToLongTimeString(), $Message) +} + +function Retry([scriptblock] $Action, [int] $Attempts = 5) { + $attempt = 0 + $sleep = 5 + + while ($attempt -lt $Attempts) { + try { + $attempt++ + return $Action.Invoke() + } catch { + if ($attempt -lt $Attempts) { + $sleep *= 2 + + Write-Warning "Attempt $attempt failed: $_. Trying again in $sleep seconds..." + Start-Sleep -Seconds $sleep + } else { + Write-Error -ErrorRecord $_ + } + } + } +} + +# Support actions to invoke on exit. +$exitActions = @({ + if ($exitActions.Count -gt 1) { + Write-Verbose 'Running registered exit actions.' + } +}) + +trap { + # Like using try..finally in PowerShell, but without keeping track of more braces or tabbing content. + $exitActions.Invoke() +} + +if ($ProvisionerApplicationId) { + $null = Disable-AzContextAutosave -Scope Process + + Log "Logging into service principal '$ProvisionerApplicationId'" + $provisionerSecret = ConvertTo-SecureString -String $ProvisionerApplicationSecret -AsPlainText -Force + $provisionerCredential = [System.Management.Automation.PSCredential]::new($ProvisionerApplicationId, $provisionerSecret) + $provisionerAccount = Retry { + Connect-AzAccount -Tenant $TenantId -Credential $provisionerCredential -ServicePrincipal -Environment $Environment + } + + $exitActions += { + Write-Verbose "Logging out of service principal '$($provisionerAccount.Context.Account)'" + $null = Disconnect-AzAccount -AzureContext $provisionerAccount.Context + } +} + +if (!$ResourceGroupName) { + # Format the resource group name like in New-TestResources.ps1. + $ResourceGroupName = "rg-$BaseName" +} + +Log "Deleting resource group '$ResourceGroupName'" +if (Retry { Remove-AzResourceGroup -Name "$ResourceGroupName" -Force:$Force }) { + Write-Verbose "Successfully deleted resource group '$ResourceGroupName'" +} + +$exitActions.Invoke() + +<# +.SYNOPSIS +Deletes the resource group deployed for a service directory from Azure. + +.DESCRIPTION +Removes a resource group and all its resources previously deployed using +New-TestResources.ps1. + +If you are not currently logged into an account in the Az PowerShell module, +you will be asked to log in with Connect-AzAccount. Alternatively, you (or a +build pipeline) can pass $ProvisionerApplicationId and +$ProvisionerApplicationSecret to authenticate a service principal with access to +create resources. + +.PARAMETER BaseName +A name to use in the resource group and passed to the ARM template as 'baseName'. +This will delete the resource group named 'rg-' + +.PARAMETER ResourceGroupName +The name of the resource group to delete. + +.PARAMETER TenantId +The tenant ID of a service principal when a provisioner is specified. + +.PARAMETER ProvisionerApplicationId +A service principal ID to provision test resources when a provisioner is specified. + +.PARAMETER ProvisionerApplicationSecret +A service principal secret (password) to provision test resources when a provisioner is specified. + +.PARAMETER Environment +Name of the cloud environment. The default is the Azure Public Cloud +('PublicCloud') + +.PARAMETER Force +Force removal of resource group without asking for user confirmation + +.EXAMPLE +./Remove-TestResources.ps1 -BaseName uuid123 -Force + +Use the currently logged-in account to delete the resource group by the name of +'rg-uuid123' + +.EXAMPLE +eng/Remove-TestResources.ps1 ` + -ResourceGroupName "${env:AZURE_RESOURCEGROUP_NAME}" ` + -TenantId '$(TenantId)' ` + -ProvisionerApplicationId '$(AppId)' ` + -ProvisionerApplicationSecret '$(AppSecret)' ` + -Force ` + -Verbose ` + +When run in the context of an Azure DevOps pipeline, this script removes the +resource group whose name is stored in the environment variable +AZURE_RESOURCEGROUP_NAME. + +.LINK +New-TestResources.ps1 +#> diff --git a/eng/common/TestResources/Remove-TestResources.ps1.md b/eng/common/TestResources/Remove-TestResources.ps1.md new file mode 100644 index 000000000000..03803d8e591c --- /dev/null +++ b/eng/common/TestResources/Remove-TestResources.ps1.md @@ -0,0 +1,224 @@ +--- +external help file: -help.xml +Module Name: +online version: +schema: 2.0.0 +--- + +# Remove-TestResources.ps1 + +## SYNOPSIS +Deletes the resource group deployed for a service directory from Azure. + +## SYNTAX + +### Default (Default) +``` +Remove-TestResources.ps1 [-BaseName] [-Environment ] [-Force] [-WhatIf] [-Confirm] + [] +``` + +### Default+Provisioner +``` +Remove-TestResources.ps1 [-BaseName] -TenantId -ProvisionerApplicationId + -ProvisionerApplicationSecret [-Environment ] [-Force] [-WhatIf] [-Confirm] + [] +``` + +### ResourceGroup+Provisioner +``` +Remove-TestResources.ps1 -ResourceGroupName -TenantId -ProvisionerApplicationId + -ProvisionerApplicationSecret [-Environment ] [-Force] [-WhatIf] [-Confirm] + [] +``` + +### ResourceGroup +``` +Remove-TestResources.ps1 -ResourceGroupName [-Environment ] [-Force] [-WhatIf] [-Confirm] + [] +``` + +## DESCRIPTION +Removes a resource group and all its resources previously deployed using +New-TestResources.ps1. + +If you are not currently logged into an account in the Az PowerShell module, +you will be asked to log in with Connect-AzAccount. +Alternatively, you (or a +build pipeline) can pass $ProvisionerApplicationId and +$ProvisionerApplicationSecret to authenticate a service principal with access to +create resources. + +## EXAMPLES + +### EXAMPLE 1 +``` +./Remove-TestResources.ps1 -BaseName uuid123 -Force +``` + +Use the currently logged-in account to delete the resource group by the name of +'rg-uuid123' + +### EXAMPLE 2 +``` +eng/Remove-TestResources.ps1 ` + -ResourceGroupName "${env:AZURE_RESOURCEGROUP_NAME}" ` + -TenantId '$(TenantId)' ` + -ProvisionerApplicationId '$(AppId)' ` + -ProvisionerApplicationSecret '$(AppSecret)' ` + -Force ` + -Verbose ` +``` + +When run in the context of an Azure DevOps pipeline, this script removes the +resource group whose name is stored in the environment variable +AZURE_RESOURCEGROUP_NAME. + +## PARAMETERS + +### -BaseName +A name to use in the resource group and passed to the ARM template as 'baseName'. +This will delete the resource group named 'rg-\' + +```yaml +Type: String +Parameter Sets: Default, Default+Provisioner +Aliases: + +Required: True +Position: 1 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ResourceGroupName +The name of the resource group to delete. + +```yaml +Type: String +Parameter Sets: ResourceGroup+Provisioner, ResourceGroup +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -TenantId +The tenant ID of a service principal when a provisioner is specified. + +```yaml +Type: String +Parameter Sets: Default+Provisioner, ResourceGroup+Provisioner +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ProvisionerApplicationId +A service principal ID to provision test resources when a provisioner is specified. + +```yaml +Type: String +Parameter Sets: Default+Provisioner, ResourceGroup+Provisioner +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ProvisionerApplicationSecret +A service principal secret (password) to provision test resources when a provisioner is specified. + +```yaml +Type: String +Parameter Sets: Default+Provisioner, ResourceGroup+Provisioner +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Environment +Name of the cloud environment. +The default is the Azure Public Cloud +('PublicCloud') + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: AzureCloud +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Force +Force removal of resource group without asking for user confirmation + +```yaml +Type: SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: False +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -WhatIf +Shows what would happen if the cmdlet runs. +The cmdlet is not run. + +```yaml +Type: SwitchParameter +Parameter Sets: (All) +Aliases: wi + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Confirm +Prompts you for confirmation before running the cmdlet. + +```yaml +Type: SwitchParameter +Parameter Sets: (All) +Aliases: cf + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## RELATED LINKS + +[New-TestResources.ps1](./New-TestResources.ps1.md) + diff --git a/eng/common/TestResources/deploy-test-resources.yml b/eng/common/TestResources/deploy-test-resources.yml new file mode 100644 index 000000000000..5844d2d39b06 --- /dev/null +++ b/eng/common/TestResources/deploy-test-resources.yml @@ -0,0 +1,41 @@ +parameters: + ServiceDirectory: not-specified + TenantId: not-specified + TestApplicationId: not-specified + TestApplicationSecret: not-specified + TestApplicationObjectId: not-specified + ProvisionerApplicationId: not-specified + ProvisionerApplicationSecret: not-specified + AdditionalParameters: '' + Location: 'westus2' + Environment: 'AzureCloud' + DeleteAfterHours: 24 + Condition: succeeded() + +steps: + # New-TestResources command requires Az module + - pwsh: Install-Module -Name Az -Scope CurrentUser -AllowClobber -Force -Verbose + displayName: Install Azure PowerShell module + condition: ${{ parameters.Condition }} + + # Command sets an environment variable in the pipeline's context: + # AZURE_RESOURCEGROUP_NAME + - pwsh: > + eng/common/TestResources/New-TestResources.ps1 + -BaseName 'Generated' + -ServiceDirectory '${{ parameters.ServiceDirectory }}' + -TenantId '${{ parameters.TenantId }}' + -TestApplicationId '${{ parameters.TestApplicationId }}' + -TestApplicationSecret '${{ parameters.TestApplicationSecret }}' + -TestApplicationOid '${{ parameters.TestApplicationObjectId }}' + -ProvisionerApplicationId '${{ parameters.ProvisionerApplicationId }}' + -ProvisionerApplicationSecret '${{ parameters.ProvisionerApplicationSecret }}' + -AdditionalParameters ${{ parameters.AdditionalParameters }} + -DeleteAfterHours ${{ parameters.DeleteAfterHours }} + -Location '${{ parameters.Location }}' + -Environment '${{ parameters.Environment }}' + -CI + -Force + -Verbose + displayName: Deploy test resources + condition: ${{ parameters.Condition }} \ No newline at end of file diff --git a/eng/common/TestResources/remove-test-resources.yml b/eng/common/TestResources/remove-test-resources.yml new file mode 100644 index 000000000000..90fe597e0fa1 --- /dev/null +++ b/eng/common/TestResources/remove-test-resources.yml @@ -0,0 +1,22 @@ +# Assumes steps in deploy-test-resources.yml was run previously. Requires +# environment variable: AZURE_RESOURCEGROUP_NAME and Az PowerShell module +parameters: + TenantId: not-specified + ProvisionerApplicationId: not-specified + ProvisionerApplicationSecret: not-specified + Environment: 'AzureCloud' + Condition: true + +steps: + - pwsh: > + eng/common/TestResources/Remove-TestResources.ps1 + -ResourceGroupName "${env:AZURE_RESOURCEGROUP_NAME}" + -TenantId '${{ parameters.TenantId }}' + -ProvisionerApplicationId '${{ parameters.ProvisionerApplicationId }}' + -ProvisionerApplicationSecret '${{ parameters.ProvisionerApplicationSecret }}' + -Environment '${{ parameters.Environment }}' + -Force + -Verbose + displayName: Remove test resources + condition: and(ne(variables['AZURE_RESOURCEGROUP_NAME'], ''), ${{ parameters.Condition }}) + continueOnError: true diff --git a/eng/common/scripts/create-tags-and-git-release.ps1 b/eng/common/scripts/create-tags-and-git-release.ps1 new file mode 100644 index 000000000000..99d2c6dc4344 --- /dev/null +++ b/eng/common/scripts/create-tags-and-git-release.ps1 @@ -0,0 +1,481 @@ +# ASSUMPTIONS +# * that `npm` cli is present for querying available npm packages +# * that an environment variable $env:GH_TOKEN is populated with the appropriate PAT to allow pushing of github releases + +param ( + # used by VerifyPackages + $artifactLocation, # the root of the artifact folder. DevOps $(System.ArtifactsDirectory) + $workingDirectory, # directory that package artifacts will be extracted into for examination (if necessary) + $packageRepository, # used to indicate destination against which we will check the existing version. + # valid options: PyPI, Nuget, NPM, Maven, C + # used by CreateTags + $releaseSha, # the SHA for the artifacts. DevOps: $(Release.Artifacts..SourceVersion) or $(Build.SourceVersion) + + # used by Git Release + $repoOwner = "", # the owning organization of the repository. EG "Azure" + $repoName = "", # the name of the repository. EG "azure-sdk-for-java" + $repoId = "$repoOwner/$repoName", # full repo id. EG azure/azure-sdk-for-net DevOps: $(Build.Repository.Id), + [switch]$forceCreate = $false +) + +$VERSION_REGEX = "(?\d+)(\.(?\d+))?(\.(?\d+))?((?
    [^0-9][^\s]+))?"
    +$SDIST_PACKAGE_REGEX = "^(?.*)\-(?$VERSION_REGEX$)"
    +
    +# Posts a github release for each item of the pkgList variable. SilentlyContinue
    +function CreateReleases($pkgList, $releaseApiUrl, $releaseSha) {
    +  foreach ($pkgInfo in $pkgList) {
    +    Write-Host "Creating release $($pkgInfo.Tag)"
    +
    +    $releaseNotes = ""
    +    if ($pkgInfo.ReleaseNotes[$pkgInfo.PackageVersion].ReleaseContent -ne $null) {
    +      $releaseNotes = $pkgInfo.ReleaseNotes[$pkgInfo.PackageVersion].ReleaseContent
    +    }
    +
    +    $isPrerelease = $False
    +    if ($pkgInfo.PackageVersion -match $VERSION_REGEX) {
    +      $preReleaseLabel = $matches["pre"]
    +      $isPrerelease = ![string]::IsNullOrEmpty($preReleaseLabel)
    +    }
    +
    +    $url = $releaseApiUrl
    +    $body = ConvertTo-Json @{
    +      tag_name         = $pkgInfo.Tag
    +      target_commitish = $releaseSha
    +      name             = $pkgInfo.Tag
    +      draft            = $False
    +      prerelease       = $isPrerelease
    +      body             = $releaseNotes
    +    }
    +
    +    $headers = @{
    +      "Content-Type"  = "application/json"
    +      "Authorization" = "token $($env:GH_TOKEN)"
    +    }
    +
    +    FireAPIRequest -url $url -body $body -headers $headers -method "Post"
    +  }
    +}
    +
    +function FireAPIRequest($url, $method, $body = $null, $headers = $null) {
    +  $attempts = 1
    +
    +  while ($attempts -le 3) {
    +    try {
    +      return Invoke-RestMethod -Method $method -Uri $url -Body $body -Headers $headers
    +    }
    +    catch {
    +      $response = $_.Exception.Response
    +
    +      $statusCode = $response.StatusCode.value__
    +      $statusDescription = $response.StatusDescription
    +
    +      if ($statusCode) {
    +        Write-Host "API request attempt number $attempts to $url failed with statuscode $statusCode"
    +        Write-Host $statusDescription
    +
    +        Write-Host "Rate Limit Details:"
    +        Write-Host "Total: $($response.Headers.GetValues("X-RateLimit-Limit"))"
    +        Write-Host "Remaining: $($response.Headers.GetValues("X-RateLimit-Remaining"))"
    +        Write-Host "Reset Epoch: $($response.Headers.GetValues("X-RateLimit-Reset"))"
    +      }
    +      else {
    +        Write-Host "API request attempt number $attempts to $url failed with no statuscode present, exception follows:"
    +        Write-Host $_.Exception.Response
    +        Write-Host $_.Exception
    +      }
    +
    +      if ($attempts -ge 3) {
    +        Write-Host "Abandoning Request $url after 3 attempts."
    +        exit(1)
    +      }
    +
    +      Start-Sleep -s 10
    +    }
    +
    +    $attempts += 1
    +  }
    +}
    +
    +# Parse out package publishing information given a maven POM file
    +function ParseMavenPackage($pkg, $workingDirectory) {
    +  [xml]$contentXML = Get-Content $pkg
    +
    +  $pkgId = $contentXML.project.artifactId
    +  $pkgVersion = $contentXML.project.version
    +  $groupId = if ($contentXML.project.groupId -eq $null) { $contentXML.project.parent.groupId } else { $contentXML.project.groupId }
    +
    +  # if it's a snapshot. return $null (as we don't want to create tags for this, but we also don't want to fail)
    +  if ($pkgVersion.Contains("SNAPSHOT")) {
    +    return $null
    +  }
    +
    +  $releaseNotes = &"${PSScriptRoot}/../Extract-ReleaseNotes.ps1" -ChangeLogLocation @(Get-ChildItem -Path $pkg.DirectoryName -Recurse -Include "$($pkg.Basename)-changelog.md")[0]
    +
    +  return New-Object PSObject -Property @{
    +    PackageId      = $pkgId
    +    PackageVersion = $pkgVersion
    +    Deployable     = $forceCreate -or !(IsMavenPackageVersionPublished -pkgId $pkgId -pkgVersion $pkgVersion -groupId $groupId.Replace(".", "/"))
    +    ReleaseNotes   = $releaseNotes
    +  }
    +}
    +
    +# Returns the maven (really sonatype) publish status of a package id and version.
    +function IsMavenPackageVersionPublished($pkgId, $pkgVersion, $groupId) {
    +  try {
    +
    +    $uri = "https://oss.sonatype.org/content/repositories/releases/$groupId/$pkgId/$pkgVersion/$pkgId-$pkgVersion.pom"
    +    $pomContent = Invoke-RestMethod -Method "GET" -Uri $uri
    +
    +    if ($pomContent -ne $null -or $pomContent.Length -eq 0) {
    +      return $true
    +    }
    +    else {
    +      return $false
    +    }
    +  }
    +  catch {
    +    $statusCode = $_.Exception.Response.StatusCode.value__
    +    $statusDescription = $_.Exception.Response.StatusDescription
    +
    +    # if this is 404ing, then this pkg has never been published before
    +    if ($statusCode -eq 404) {
    +      return $false
    +    }
    +
    +    Write-Host "VersionCheck to maven for packageId $pkgId failed with statuscode $statusCode"
    +    Write-Host $statusDescription
    +    exit(1)
    +  }
    +}
    +
    +# make certain to always take the package json closest to the top
    +function ResolvePkgJson($workFolder) {
    +  $pathsWithComplexity = @()
    +  foreach ($file in (Get-ChildItem -Path $workFolder -Recurse -Include "package.json")) {
    +    $complexity = ($file.FullName -Split { $_ -eq "/" -or $_ -eq "\" }).Length
    +    $pathsWithComplexity += New-Object PSObject -Property @{
    +      Path       = $file
    +      Complexity = $complexity
    +    }
    +  }
    +
    +  return ($pathsWithComplexity | Sort-Object -Property Complexity)[0].Path
    +}
    +
    +# Parse out package publishing information given a .tgz npm artifact
    +function ParseNPMPackage($pkg, $workingDirectory) {
    +  $workFolder = "$workingDirectory$($pkg.Basename)"
    +  $origFolder = Get-Location
    +  mkdir $workFolder
    +  cd $workFolder
    +
    +  tar -xzf $pkg
    +
    +  $packageJSON = ResolvePkgJson -workFolder $workFolder | Get-Content | ConvertFrom-Json
    +  $releaseNotes = &"${PSScriptRoot}/../Extract-ReleaseNotes.ps1" -ChangeLogLocation @(Get-ChildItem -Path $workFolder -Recurse -Include "CHANGELOG.md")[0]
    +
    +  cd $origFolder
    +  Remove-Item $workFolder -Force  -Recurse -ErrorAction SilentlyContinue
    +
    +  $pkgId = $packageJSON.name
    +  $pkgVersion = $packageJSON.version
    +
    +  $resultObj = New-Object PSObject -Property @{
    +    PackageId      = $pkgId
    +    PackageVersion = $pkgVersion
    +    Deployable     = $forceCreate -or !(IsNPMPackageVersionPublished -pkgId $pkgId -pkgVersion $pkgVersion)
    +    ReleaseNotes   = $releaseNotes
    +  }
    +
    +  return $resultObj
    +}
    +
    +# Returns the npm publish status of a package id and version.
    +function IsNPMPackageVersionPublished($pkgId, $pkgVersion) {
    +  $npmVersions = (npm show $pkgId versions)
    +
    +  if ($LastExitCode -ne 0) {
    +    npm ping
    +
    +    if ($LastExitCode -eq 0) {
    +      return $False
    +    }
    +
    +    Write-Host "Could not find a deployed version of $pkgId, and NPM connectivity check failed."
    +    exit(1)
    +  }
    +
    +  $npmVersionList = $npmVersions.split(",") | % { return $_.replace("[", "").replace("]", "").Trim() }
    +  return $npmVersionList.Contains($pkgVersion)
    +}
    +
    +# Parse out package publishing information given a nupkg ZIP format.
    +function ParseNugetPackage($pkg, $workingDirectory) {
    +  $workFolder = "$workingDirectory$($pkg.Basename)"
    +  $origFolder = Get-Location
    +  $zipFileLocation = "$workFolder/$($pkg.Basename).zip"
    +  mkdir $workFolder
    +
    +  Copy-Item -Path $pkg -Destination $zipFileLocation
    +  Expand-Archive -Path $zipFileLocation -DestinationPath $workFolder
    +  [xml] $packageXML = Get-ChildItem -Path "$workFolder/*.nuspec" | Get-Content
    +  $releaseNotes = &"${PSScriptRoot}/../Extract-ReleaseNotes.ps1" -ChangeLogLocation @(Get-ChildItem -Path $workFolder -Recurse -Include "CHANGELOG.md")[0]
    +
    +  Remove-Item $workFolder -Force  -Recurse -ErrorAction SilentlyContinue
    +  $pkgId = $packageXML.package.metadata.id
    +  $pkgVersion = $packageXML.package.metadata.version
    +
    +  return New-Object PSObject -Property @{
    +    PackageId      = $pkgId
    +    PackageVersion = $pkgVersion
    +    Deployable     = $forceCreate -or !(IsNugetPackageVersionPublished -pkgId $pkgId -pkgVersion $pkgVersion)
    +    ReleaseNotes   = $releaseNotes
    +  }
    +}
    +
    +# Returns the nuget publish status of a package id and version.
    +function IsNugetPackageVersionPublished($pkgId, $pkgVersion) {
    +
    +  $nugetUri = "https://api.nuget.org/v3-flatcontainer/$($pkgId.ToLowerInvariant())/index.json"
    +
    +  try {
    +    $nugetVersions = Invoke-RestMethod -Method "GET" -Uri $nugetUri
    +
    +    return $nugetVersions.versions.Contains($pkgVersion)
    +  }
    +  catch {
    +    $statusCode = $_.Exception.Response.StatusCode.value__
    +    $statusDescription = $_.Exception.Response.StatusDescription
    +
    +    # if this is 404ing, then this pkg has never been published before
    +    if ($statusCode -eq 404) {
    +      return $False
    +    }
    +
    +    Write-Host "Nuget Invocation failed:"
    +    Write-Host "StatusCode:" $statusCode
    +    Write-Host "StatusDescription:" $statusDescription
    +    exit(1)
    +  }
    +
    +}
    +
    +# Parse out package publishing information given a python sdist of ZIP format.
    +function ParsePyPIPackage($pkg, $workingDirectory) {
    +  $pkg.Basename -match $SDIST_PACKAGE_REGEX | Out-Null
    +
    +  $pkgId = $matches["package"]
    +  $pkgVersion = $matches["versionstring"]
    +
    +  $workFolder = "$workingDirectory$($pkg.Basename)"
    +  $origFolder = Get-Location
    +  mkdir $workFolder
    +
    +  Expand-Archive -Path $pkg -DestinationPath $workFolder
    +  $releaseNotes = &"${PSScriptRoot}/../Extract-ReleaseNotes.ps1" -ChangeLogLocation @(Get-ChildItem -Path $workFolder -Recurse -Include "CHANGELOG.md")[0]
    +  Remove-Item $workFolder -Force  -Recurse -ErrorAction SilentlyContinue
    +
    +  return New-Object PSObject -Property @{
    +    PackageId      = $pkgId
    +    PackageVersion = $pkgVersion
    +    Deployable     = $forceCreate -or !(IsPythonPackageVersionPublished -pkgId $pkgId -pkgVersion $pkgVersion)
    +    ReleaseNotes   = $releaseNotes
    +  }
    +}
    +
    +function ParseCArtifact($pkg, $workingDirectory) {
    +  $packageInfo = Get-Content -Raw -Path $pkg | ConvertFrom-JSON
    +  $packageArtifactLocation = (Get-ItemProperty $pkg).Directory.FullName
    +
    +  $releaseNotes = ExtractReleaseNotes -changeLogLocation @(Get-ChildItem -Path $packageArtifactLocation -Recurse -Include "CHANGELOG.md")[0]
    +
    +  return New-Object PSObject -Property @{
    +    PackageId      = $packageInfo.name
    +    PackageVersion = $packageInfo.version
    +    # Artifact info is always considered deployable for C becasue it is not
    +    # deployed anywhere. Dealing with duplicate tags happens downstream in
    +    # CheckArtifactShaAgainstTagsList
    +    Deployable     = $true
    +    ReleaseNotes   = $releaseNotes
    +  }
    +}
    +
    +# Returns the pypi publish status of a package id and version.
    +function IsPythonPackageVersionPublished($pkgId, $pkgVersion) {
    +  try {
    +    $existingVersion = (Invoke-RestMethod -Method "Get" -Uri "https://pypi.org/pypi/$pkgId/$pkgVersion/json").info.version
    +
    +    # if existingVersion exists, then it's already been published
    +    return $True
    +  }
    +  catch {
    +    $statusCode = $_.Exception.Response.StatusCode.value__
    +    $statusDescription = $_.Exception.Response.StatusDescription
    +
    +    # if this is 404ing, then this pkg has never been published before
    +    if ($statusCode -eq 404) {
    +      return $False
    +    }
    +
    +    Write-Host "PyPI Invocation failed:"
    +    Write-Host "StatusCode:" $statusCode
    +    Write-Host "StatusDescription:" $statusDescription
    +    exit(1)
    +  }
    +}
    +
    +# Retrieves the list of all tags that exist on the target repository
    +function GetExistingTags($apiUrl) {
    +  try {
    +    return (Invoke-RestMethod -Method "GET" -Uri "$apiUrl/git/refs/tags"  ) | % { $_.ref.Replace("refs/tags/", "") }
    +  }
    +  catch {
    +    $statusCode = $_.Exception.Response.StatusCode.value__
    +    $statusDescription = $_.Exception.Response.StatusDescription
    +
    +    Write-Host "Failed to retrieve tags from repository."
    +    Write-Host "StatusCode:" $statusCode
    +    Write-Host "StatusDescription:" $statusDescription
    +
    +    # Return an empty list if there are no tags in the repo
    +    if ($statusCode -eq 404) {
    +      return @()
    +    }
    +
    +    exit(1)
    +  }
    +}
    +
    +# Walk across all build artifacts, check them against the appropriate repository, return a list of tags/releases
    +function VerifyPackages($pkgRepository, $artifactLocation, $workingDirectory, $apiUrl, $releaseSha) {
    +  $pkgList = [array]@()
    +  $ParsePkgInfoFn = ""
    +  $packagePattern = ""
    +
    +  switch ($pkgRepository) {
    +    "Maven" {
    +      $ParsePkgInfoFn = "ParseMavenPackage"
    +      $packagePattern = "*.pom"
    +      break
    +    }
    +    "Nuget" {
    +      $ParsePkgInfoFn = "ParseNugetPackage"
    +      $packagePattern = "*.nupkg"
    +      break
    +    }
    +    "NPM" {
    +      $ParsePkgInfoFn = "ParseNPMPackage"
    +      $packagePattern = "*.tgz"
    +      break
    +    }
    +    "PyPI" {
    +      $ParsePkgInfoFn = "ParsePyPIPackage"
    +      $packagePattern = "*.zip"
    +      break
    +    }
    +    "C" {
    +      $ParsePkgInfoFn = "ParseCArtifact"
    +      $packagePattern = "*.json"
    +    }
    +    default {
    +      Write-Host "Unrecognized Language: $language"
    +      exit(1)
    +    }
    +  }
    +
    +  $pkgs = (Get-ChildItem -Path $artifactLocation -Include $packagePattern -Recurse -File)
    +
    +  Write-Host $pkgs
    +
    +  foreach ($pkg in $pkgs) {
    +    try {
    +      $parsedPackage = &$ParsePkgInfoFn -pkg $pkg -workingDirectory $workingDirectory
    +
    +      if ($parsedPackage -eq $null) {
    +        continue
    +      }
    +
    +      if ($parsedPackage.Deployable -ne $True) {
    +        Write-Host "Package $($parsedPackage.PackageId) is marked with version $($parsedPackage.PackageVersion), the version $($parsedPackage.PackageVersion) has already been deployed to the target repository."
    +        Write-Host "Maybe a pkg version wasn't updated properly?"
    +        exit(1)
    +      }
    +
    +      $pkgList += New-Object PSObject -Property @{
    +        PackageId      = $parsedPackage.PackageId
    +        PackageVersion = $parsedPackage.PackageVersion
    +        Tag            = ($parsedPackage.PackageId + "_" + $parsedPackage.PackageVersion)
    +        ReleaseNotes   = $parsedPackage.ReleaseNotes
    +      }
    +    }
    +    catch {
    +      Write-Host $_.Exception.Message
    +      exit(1)
    +    }
    +  }
    +
    +  $results = ([array]$pkgList | Sort-Object -Property Tag -uniq)
    +
    +  $existingTags = GetExistingTags($apiUrl)
    +  $intersect = $results | % { $_.Tag } | ? { $existingTags -contains $_ }
    +
    +  if ($intersect.Length -gt 0) {
    +    CheckArtifactShaAgainstTagsList -priorExistingTagList $intersect -releaseSha $releaseSha -apiUrl $apiUrl
    +
    +    # all the tags are clean. remove them from the list of releases we will publish.
    +    $results = $results | ? { -not ($intersect -contains $_.Tag ) }
    +  }
    +
    +  return $results
    +}
    +
    +# given a set of tags that we want to release, we need to ensure that if they already DO exist.
    +# if they DO exist, quietly exit if the commit sha of the artifact matches that of the tag
    +# if the commit sha does not match, exit with error and report both problem shas
    +function CheckArtifactShaAgainstTagsList($priorExistingTagList, $releaseSha, $apiUrl) {
    +  $headers = @{
    +    "Content-Type"  = "application/json"
    +    "Authorization" = "token $($env:GH_TOKEN)"
    +  }
    +
    +  $unmatchedTags = @()
    +
    +  foreach ($tag in $priorExistingTagList) {
    +    $tagSha = (FireAPIRequest -Method "Get" -Url "$apiUrl/git/refs/tags/$tag" -Headers $headers)."object".sha
    +
    +    if ($tagSha -eq $releaseSha) {
    +      Write-Host "This package has already been released. The existing tag commit SHA $releaseSha matches the artifact SHA being processed. Skipping release step for this tag."
    +    }
    +    else {
    +      Write-Host "The artifact SHA $releaseSha does not match that of the currently existing tag."
    +      Write-Host "Tag with issues is $tag with commit SHA $tagSha"
    +
    +      $unmatchedTags += $tag
    +    }
    +  }
    +
    +  if ($unmatchedTags.Length -gt 0) {
    +    Write-Host "Tags already existing with different SHA versions. Exiting."
    +    exit(1)
    +  }
    +}
    +
    +$apiUrl = "https://api.github.com/repos/$repoId"
    +Write-Host "Using API URL $apiUrl"
    +
    +# VERIFY PACKAGES
    +$pkgList = VerifyPackages -pkgRepository $packageRepository -artifactLocation $artifactLocation -workingDirectory $workingDirectory -apiUrl $apiUrl -releaseSha $releaseSha
    +
    +if ($pkgList) {
    +  Write-Host "Given the visible artifacts, github releases will be created for the following:"
    +
    +  foreach ($packageInfo in $pkgList) {
    +    Write-Host $packageInfo.Tag
    +  }
    +
    +  # CREATE TAGS and RELEASES
    +  CreateReleases -pkgList $pkgList -releaseApiUrl $apiUrl/releases -releaseSha $releaseSha
    +}
    +else {
    +  Write-Host "After processing, no packages required release."
    +}
    diff --git a/eng/pipelines/smoke-test.yml b/eng/pipelines/smoke-test.yml
    index 3aed2fe61dcc..7132490a5692 100644
    --- a/eng/pipelines/smoke-test.yml
    +++ b/eng/pipelines/smoke-test.yml
    @@ -5,28 +5,43 @@ jobs:
       - job:
         strategy:
           matrix:
    -        Python_27_Linux:
    +        Python_27_Linux (Public):
               PythonVersion: '2.7'
               InstallAsyncRequirements: false
               OSVmImage: ubuntu-18.04
    -        Python_37_Linux:
    +          CloudType: public
    +        Python_37_Linux (Public):
               PythonVersion: '3.7'
               OSVmImage: ubuntu-18.04
    -        Python_38_Linux:
    +          CloudType: public
    +        Python_38_Linux (Public):
               PythonVersion: '3.8'
               OSVmImage: ubuntu-18.04
    -        Python_37_Windows:
    +          CloudType: public
    +        Python_37_Windows (Public):
               PythonVersion: '3.7'
               OSVmImage: windows-2019
    -        Python_38_Windows:
    +          CloudType: public
    +        Python_38_Windows (Public):
               PythonVersion: '3.8'
               OSVmImage: windows-2019
    -        Python_37_Mac:
    +          CloudType: public
    +        Python_37_Mac (Public):
               PythonVersion: '3.7'
               OSVmImage: macOS-10.15
    -        Python_38_Mac:
    +          CloudType: public
    +        Python_38_Mac (Public):
               PythonVersion: '3.8'
               OSVmImage: macOS-10.15
    +          CloudType: public
    +        Python_38_Linux (Gov):
    +          PythonVersion: '3.8'
    +          OSVmImage: ubuntu-18.04
    +          CloudType: gov
    +        Python_37_Windows (Gov):
    +          PythonVersion: '3.7'
    +          OSVmImage: windows-2019
    +          CloudType: gov
     
         pool:
           vmImage: $(OSVmImage)
    @@ -46,17 +61,53 @@ jobs:
           - script: pip install -r ./common/smoketest/requirements.txt
             displayName: "Install requirements.txt"
     
    +      - script: pip install -r ./common/smoketest/requirements_async.txt
    +        displayName: "Install requirements_async.txt"
    +        condition: and(succeeded(), eq(variables['InstallAsyncRequirements'], 'true'))
    +
           - script: python ./eng/tox/install_dev_build_dependency.py -r ./common/smoketest/requirements.txt
             displayName: "Install dev dependencies from feed"
     
    +      # Set secret environment variables for different clouds
    +      - pwsh: |
    +          $variables = @{
    +            AZURE_CLIENT_ID='$(aad-azure-sdk-test-client-id)'
    +            AZURE_CLIENT_SECRET='$(aad-azure-sdk-test-client-secret)'
    +            AZURE_TENANT_ID='$(aad-azure-sdk-test-tenant-id)'
    +            AZURE_AUTHORITY_HOST='$(aad-azure-sdk-test-authority-host)'
    +            AZURE_PROJECT_URL='$(smoke-tests-key-vault-project-url)'
    +            EVENT_HUBS_CONNECTION_STRING='$(smoke-tests-event-hubs-connection-string)'
    +            COSMOS_ENDPOINT='$(smoke-tests-cosmos-endpoint)'
    +            COSMOS_KEY='$(smoke-tests-cosmos-key)'
    +            STORAGE_CONNECTION_STRING='$(smoke-tests-storage-connection-string)'
    +          };
    +          foreach ($key in $variables.Keys) {
    +            Write-Host "Setting variable '$key'"
    +            Write-Host "##vso[task.setvariable variable=_$key;issecret=true;]$($variables[$key])"
    +            Write-Host "##vso[task.setvariable variable=$key;]$($variables[$key])"
    +          }
    +        displayName: Set secrets for public cloud
    +        condition: and(succeeded(), eq(variables['CloudType'], 'public'))
    +
    +      - pwsh: |
    +          $variables = @{
    +            AZURE_CLIENT_ID='$(aad-azure-sdk-test-client-id-gov)'
    +            AZURE_CLIENT_SECRET='$(aad-azure-sdk-test-client-secret-gov)'
    +            AZURE_TENANT_ID='$(aad-azure-sdk-test-tenant-id-gov)'
    +            AZURE_AUTHORITY_HOST='$(aad-azure-sdk-test-authority-host-gov)'
    +            AZURE_PROJECT_URL='$(smoke-tests-key-vault-project-url-gov)'
    +            EVENT_HUBS_CONNECTION_STRING='$(smoke-tests-event-hubs-connection-string-gov)'
    +            COSMOS_ENDPOINT='$(smoke-tests-cosmos-endpoint-gov)'
    +            COSMOS_KEY='$(smoke-tests-cosmos-key-gov)'
    +            STORAGE_CONNECTION_STRING='$(smoke-tests-storage-connection-string-gov)'
    +          };
    +          foreach ($key in $variables.Keys) {
    +            Write-Host "Setting variable '$key'"
    +            Write-Host "##vso[task.setvariable variable=_$key;issecret=true;]$($variables[$key])"
    +            Write-Host "##vso[task.setvariable variable=$key;]$($variables[$key])"
    +          }
    +        displayName: Set secrets for public cloud
    +        condition: and(succeeded(), eq(variables['CloudType'], 'gov'))
    +
           - script: python ./common/smoketest/program.py
             displayName: "Run Smoke Test"
    -        env:
    -          AZURE_CLIENT_ID: $(aad-azure-sdk-test-client-id)
    -          AZURE_CLIENT_SECRET: $(aad-azure-sdk-test-client-secret)
    -          AZURE_TENANT_ID: $(aad-azure-sdk-test-tenant-id)
    -          AZURE_PROJECT_URL: $(smoke-tests-key-vault-project-url)
    -          EVENT_HUBS_CONNECTION_STRING: $(smoke-tests-event-hubs-connection-string)
    -          COSMOS_ENDPOINT: $(smoke-tests-cosmos-endpoint)
    -          COSMOS_KEY: $(smoke-tests-cosmos-key)
    -          STORAGE_CONNECTION_STRING: $(smoke-tests-storage-connection-string)
    diff --git a/eng/pipelines/templates/jobs/archetype-sdk-client.yml b/eng/pipelines/templates/jobs/archetype-sdk-client.yml
    index f9c56c17f8d3..218332b34e02 100644
    --- a/eng/pipelines/templates/jobs/archetype-sdk-client.yml
    +++ b/eng/pipelines/templates/jobs/archetype-sdk-client.yml
    @@ -114,11 +114,11 @@ jobs:
         - pwsh: |
             $toxenvvar = "whl,sdist"
             if (('$(Build.Reason)' -eq 'Schedule') -and ('$(System.TeamProject)' -eq 'internal')) {
    -          $toxenvvar = "whl,sdist,depends"
    +          $toxenvvar = "whl,sdist,depends,latestdependency,minimumdependency"
             }
     
    -        if ('$(Run.ImportTest)' -eq 'true') {
    -          $toxenvvar = "whl,sdist,depends"
    +        if ('$(Run.DependencyTest)' -eq 'true') {
    +          $toxenvvar = "whl,sdist,depends,latestdependency,minimumdependency"
             }
             echo "##vso[task.setvariable variable=toxenv]$toxenvvar"
           displayName: "Set Tox Environment"
    diff --git a/eng/pipelines/templates/jobs/archetype-sdk-tests.yml b/eng/pipelines/templates/jobs/archetype-sdk-tests.yml
    index e4b43690f49e..1a1b773aef91 100644
    --- a/eng/pipelines/templates/jobs/archetype-sdk-tests.yml
    +++ b/eng/pipelines/templates/jobs/archetype-sdk-tests.yml
    @@ -11,6 +11,7 @@ parameters:
       BuildDocs: true
       JobName: Test
       AllocateResourceGroup: 'true'
    +  TestTimeoutInMinutes: 120
       Matrix:
         Linux_Python35:
           OSName: 'Linux'
    @@ -39,7 +40,7 @@ jobs:
           skipComponentGovernanceDetection: true
           CoverageArg: --disablecov
     
    -    timeoutInMinutes: 120
    +    timeoutInMinutes: ${{ parameters.TestTimeoutInMinutes }}
         strategy:
           maxParallel: ${{ parameters.MaxParallel }}
           matrix: ${{ parameters.Matrix }}
    diff --git a/eng/pipelines/templates/steps/run_pylint.yml b/eng/pipelines/templates/steps/run_pylint.yml
    index 2f4732a0968b..631f0b149d7c 100644
    --- a/eng/pipelines/templates/steps/run_pylint.yml
    +++ b/eng/pipelines/templates/steps/run_pylint.yml
    @@ -24,4 +24,5 @@ steps:
             --service="${{ parameters.ServiceDirectory }}" 
             --toxenv="lint"
             --disablecov
    +        --omit-management
         env: ${{ parameters.EnvVars }}
    \ No newline at end of file
    diff --git a/eng/tox/install_depend_packages.py b/eng/tox/install_depend_packages.py
    index 079969c74aff..f0add7f9659c 100644
    --- a/eng/tox/install_depend_packages.py
    +++ b/eng/tox/install_depend_packages.py
    @@ -12,7 +12,7 @@
     from subprocess import check_call
     import logging
     from packaging.specifiers import SpecifierSet
    -from pkg_resources import Requirement
    +from pkg_resources import Requirement, parse_version
     from pypi_tools.pypi import PyPIClient
     
     setup_parser_path = os.path.abspath(
    @@ -25,6 +25,12 @@
     NEW_DEV_REQ_FILE = "new_dev_requirements.txt"
     PKGS_TXT_FILE = "packages.txt"
     
    +logging.getLogger().setLevel(logging.INFO)
    +
    +MINIMUM_VERSION_SUPPORTED_OVERRIDE = {
    +    'azure-common': '1.1.10',
    +}
    +
     def install_dependent_packages(setup_py_file_path, dependency_type, temp_dir):
         # This method identifies latest/ minimal version of dependent packages and installs them from pyPI
         # dependency type must either be latest or minimum
    @@ -79,6 +85,8 @@ def process_requirement(req, dependency_type):
         versions = [str(v) for v in client.get_ordered_versions(pkg_name)]
         logging.info("Versions available on PyPI for %s: %s", pkg_name, versions)
     
    +    if pkg_name in MINIMUM_VERSION_SUPPORTED_OVERRIDE:
    +        versions = [v for v in versions if parse_version(v) >= parse_version(MINIMUM_VERSION_SUPPORTED_OVERRIDE[pkg_name])]
         # Search from lowest to latest in case of finding minimum dependency
         # Search from latest to lowest in case of finding latest required version
         # reverse the list to get latest version first
    @@ -105,11 +113,18 @@ def filter_dev_requirements(setup_py_path, released_packages, temp_dir):
         # filter out any package available on PyPI (released_packages)
         # include packages without relative reference and packages not available on PyPI
         released_packages = [p.split('==')[0] for p in released_packages]
    +    # find prebuilt whl paths in dev requiremente
    +    prebuilt_dev_reqs = [os.path.basename(req.replace('\n', '')) for req  in requirements if os.path.sep in req]
    +    # filter any req if wheel is for a released package
    +    req_to_exclude = [req for req in prebuilt_dev_reqs if req.split('-')[0].replace('_', '-') in released_packages]
    +    req_to_exclude.extend(released_packages)
    +
         filtered_req = [
             req
             for req in requirements
    -        if "/" not in req or req.replace('\n', '').split("/")[-1] not in released_packages
    +        if os.path.basename(req.replace('\n', '')) not in req_to_exclude
         ]
    +
         logging.info("Filtered dev requirements: %s", filtered_req)
     
         new_dev_req_path = ""
    @@ -125,6 +140,8 @@ def filter_dev_requirements(setup_py_path, released_packages, temp_dir):
     def install_packages(packages, req_file):
         # install list of given packages from PyPI
         commands = [
    +        sys.executable,
    +        "-m",
             "pip",
             "install",
         ]
    diff --git a/eng/tox/mypy_hard_failure_packages.py b/eng/tox/mypy_hard_failure_packages.py
    index c385cc3e314b..a78a183d523d 100644
    --- a/eng/tox/mypy_hard_failure_packages.py
    +++ b/eng/tox/mypy_hard_failure_packages.py
    @@ -8,7 +8,5 @@
     MYPY_HARD_FAILURE_OPTED = [
       "azure-core",
       "azure-eventhub",
    -  "azure-eventhub-checkpointstoreblob",
    -  "azure-eventhub-checkpointstoreblob-aio",
       "azure-ai-textanalytics"
     ]
    diff --git a/eng/tox/run_pylint.py b/eng/tox/run_pylint.py
    index 4bc4278e8ee9..ee648007f319 100644
    --- a/eng/tox/run_pylint.py
    +++ b/eng/tox/run_pylint.py
    @@ -39,7 +39,7 @@
     
         package_name = os.path.basename(os.path.abspath(args.target_package))
     
    -    if package_name not in PYLINT_ACCEPTABLE_FAILURES and "mgmt" not in package_name:
    +    if package_name not in PYLINT_ACCEPTABLE_FAILURES:
             try:
                 check_call(
                     [
    diff --git a/eng/tox/tox.ini b/eng/tox/tox.ini
    index 812a3a8367e2..ea1e1a9b8b29 100644
    --- a/eng/tox/tox.ini
    +++ b/eng/tox/tox.ini
    @@ -190,10 +190,10 @@ commands =
     [deptestcommands]
     commands =
         {envbindir}/python {toxinidir}/../../../eng/tox/install_depend_packages.py -t {toxinidir} -d {env:DEPENDENCY_TYPE:} -w {envtmpdir}
    -    {envbindir}/python {toxinidir}/../../../eng/tox/create_package_and_install.py -d {envtmpdir} -p {toxinidir}
    +    {envbindir}/python {toxinidir}/../../../eng/tox/create_package_and_install.py -d {envtmpdir} -p {toxinidir} -w {envtmpdir}
         {envbindir}/python -m pip freeze
         {envbindir}/python {toxinidir}/../../../eng/tox/verify_installed_packages.py --packages-file {envtmpdir}/packages.txt
    -    pytest {[testenv]default_pytest_params} {posargs} {toxinidir}
    +    pytest {[testenv]default_pytest_params} {posargs} --no-cov {toxinidir}
     
     
     [testenv:latestdependency]
    diff --git a/eng/versioning/version_shared.py b/eng/versioning/version_shared.py
    index a9f614badd9a..d5d6011f74ce 100644
    --- a/eng/versioning/version_shared.py
    +++ b/eng/versioning/version_shared.py
    @@ -23,6 +23,9 @@
     from common_tasks import process_glob_string, run_check_call
     
     VERSION_PY = "_version.py"
    +# Auto generated code has version maintained in version.py. 
    +# We need to handle this old file name until generated code creates _version.py for all packages
    +OLD_VERSION_PY = "version.py"
     VERSION_REGEX = r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]'
     VERSION_STRING = 'VERSION = "%s"'
     
    @@ -80,6 +83,8 @@ def get_version_py(setup_py_location):
         for root, _, files in os.walk(azure_root_path):
             if(VERSION_PY in files):
                 return path.join(root, VERSION_PY)
    +        elif (OLD_VERSION_PY in files):
    +            return path.join(root, OLD_VERSION_PY)
     
     def set_version_py(setup_py_location, new_version):
         version_py_location = get_version_py(setup_py_location)
    diff --git a/scripts/devops_tasks/common_tasks.py b/scripts/devops_tasks/common_tasks.py
    index bf0e7b255cc4..dc1380a1177b 100644
    --- a/scripts/devops_tasks/common_tasks.py
    +++ b/scripts/devops_tasks/common_tasks.py
    @@ -52,6 +52,10 @@
         "azure-common",
     ]
     
    +MANAGEMENT_PACKAGES_FILTER_EXCLUSIONS = [
    +    "azure-mgmt-core",
    +]
    +
     omit_regression = (
         lambda x: "nspkg" not in x
         and "mgmt" not in x
    @@ -62,12 +66,14 @@
     omit_docs = lambda x: "nspkg" not in x and os.path.basename(x) not in META_PACKAGES
     omit_build = lambda x: x # Dummy lambda to match omit type
     lambda_filter_azure_pkg = lambda x: x.startswith("azure") and "-nspkg" not in x
    +omit_mgmt = lambda x: "mgmt" not in x or os.path.basename(x) in MANAGEMENT_PACKAGES_FILTER_EXCLUSIONS
     
     # dict of filter type and filter function
     omit_funct_dict = {
         "Build": omit_build,
         "Docs": omit_docs,
         "Regression": omit_regression,
    +    "Omit_management": omit_mgmt,
     }
     
     def log_file(file_location, is_error=False):
    @@ -219,36 +225,35 @@ def process_glob_string(
         # if we have individually queued this specific package, it's obvious that we want to build it specifically
         # in this case, do not honor the omission list
         if len(collected_directories) == 1:
    -        return filter_for_compatibility(collected_directories)
    +        pkg_set_ci_filtered = filter_for_compatibility(collected_directories)
         # however, if there are multiple packages being built, we should honor the omission list and NOT build the omitted
         # packages
         else:
    -        allowed_package_set = remove_omitted_packages(collected_directories, filter_type)
    -        logging.info(
    -            "Target packages after filtering by omission list: {}".format(
    -                allowed_package_set
    -            )
    -        )
    -
    +        allowed_package_set = remove_omitted_packages(collected_directories)
             pkg_set_ci_filtered = filter_for_compatibility(allowed_package_set)
    -        logging.info(
    -            "Package(s) omitted by CI filter: {}".format(
    -                list(set(allowed_package_set) - set(pkg_set_ci_filtered))
    -            )
    -        )
    -
    -        return sorted(pkg_set_ci_filtered)
     
    +    # Apply filter based on filter type. for e.g. Docs, Regression, Management
    +    pkg_set_ci_filtered = list(filter(omit_funct_dict.get(filter_type, omit_build), pkg_set_ci_filtered))
    +    logging.info(
    +        "Target packages after filtering by CI: {}".format(
    +            pkg_set_ci_filtered
    +        )
    +    )
    +    logging.info(
    +        "Package(s) omitted by CI filter: {}".format(
    +            list(set(collected_directories) - set(pkg_set_ci_filtered))
    +        )
    +    )
    +    return sorted(pkg_set_ci_filtered)
     
    -def remove_omitted_packages(collected_directories, filter_type="Build"):
     
    +def remove_omitted_packages(collected_directories):
         packages = [
             package_dir
             for package_dir in collected_directories
             if os.path.basename(package_dir) not in OMITTED_CI_PACKAGES
         ]
     
    -    packages = list(filter(omit_funct_dict.get(filter_type, omit_build), packages))
         return packages
     
     
    @@ -381,7 +386,11 @@ def filter_dev_requirements(pkg_root_path, packages_to_exclude, dest_dir):
     def is_required_version_on_pypi(package_name, spec):
         from pypi_tools.pypi import PyPIClient
         client = PyPIClient()
    -    versions = [str(v) for v in client.get_ordered_versions(package_name) if str(v) in spec]
    +    versions = []
    +    try:
    +        versions = [str(v) for v in client.get_ordered_versions(package_name) if str(v) in spec]
    +    except:
    +        logging.error("Package {} is not found on PyPI", package_name)
         return versions
     
     def find_packages_missing_on_pypi(path):
    diff --git a/scripts/devops_tasks/find_change_log.ps1 b/scripts/devops_tasks/find_change_log.ps1
    index f83961b1c06b..f3eaa4f1767b 100644
    --- a/scripts/devops_tasks/find_change_log.ps1
    +++ b/scripts/devops_tasks/find_change_log.ps1
    @@ -53,13 +53,14 @@ function ExtractReleaseNotes($changeLogLocation)
     
     function VerifyPackages($rootDirectory)
     { 
    -   #This function verifies version in history.md for a given package
    +   #This function verifies version in CHANGELOG.md for a given package
        try
        {
    -      $historyFiles = Get-ChildItem -Path $rootDirectory -Recurse -Include "history.md"
    +      $historyFiles = Get-ChildItem -Path $rootDirectory -Recurse -Include "CHANGELOG.md"
           if ($historyFiles -eq $null)
           { 
    -         exit(0)
    +         Write-Host "Change log file is missing for package"
    +         exit(1)
           }
     
           #Find current version of package from _version.py and package name from setup.py
    @@ -68,7 +69,7 @@ function VerifyPackages($rootDirectory)
           $releaseNotes = ExtractReleaseNotes -changeLogLocation $changeFile
           if ($releaseNotes.Count -gt 0)
           {
    -         #Log package if it doesn't have current version in history.md
    +         #Log package if it doesn't have current version in change log
              if ( $releaseNotes.Contains($version))
              {
                 $content = $releaseNotes[$version]
    diff --git a/scripts/devops_tasks/git_helper.py b/scripts/devops_tasks/git_helper.py
    index d696d9203304..189872ac3cbb 100644
    --- a/scripts/devops_tasks/git_helper.py
    +++ b/scripts/devops_tasks/git_helper.py
    @@ -30,15 +30,20 @@ def get_release_tag(dep_pkg_name, isLatest):
         from pypi_tools.pypi import PyPIClient
     
         client = PyPIClient()
    -    versions = [str(v) for v in client.get_ordered_versions(dep_pkg_name)]
    -    logging.info("Versions for {0} is: {1}".format(dep_pkg_name, versions))
    +    versions = []
    +    try:
    +        versions = [str(v) for v in client.get_ordered_versions(dep_pkg_name)]
    +        logging.info("Versions available on PyPI for {0} are: {1}".format(dep_pkg_name, versions))
    +    except:
    +        logging.error("Package {} is not available on PyPI".format(dep_pkg_name))
    +        return None
     
         # filter excluded versions
         if dep_pkg_name in EXCLUDED_PACKAGE_VERSIONS:
             versions = [v for v in versions if  v not in EXCLUDED_PACKAGE_VERSIONS[dep_pkg_name]]
             logging.info("Filtered versions for {0} is: {1}".format(dep_pkg_name, versions))
     
    -    if len(versions) == 0:
    +    if not versions:
             logging.info(
                 "Released version info for package {} is not available".format(dep_pkg_name)
             )
    diff --git a/scripts/devops_tasks/setup_execute_tests.py b/scripts/devops_tasks/setup_execute_tests.py
    index 706c75ac8349..e928f33fdd6b 100644
    --- a/scripts/devops_tasks/setup_execute_tests.py
    +++ b/scripts/devops_tasks/setup_execute_tests.py
    @@ -275,6 +275,14 @@ def execute_global_install_and_test(
             help="Comma or space-separated list of packages that should be installed prior to dev_requirements. If local path, should be absolute.",
         )
     
    +    parser.add_argument(
    +        "--omit-management",
    +        dest="omit_management",
    +        default=False,
    +        action="store_true",
    +        help="Flag that indicates to omit any management packages except any management packages that should not be filtered. for e.g azure-mgmt-core",
    +    )
    +
         args = parser.parse_args()
     
         # We need to support both CI builds of everything and individual service
    @@ -285,7 +293,10 @@ def execute_global_install_and_test(
         else:
             target_dir = root_dir
     
    -    targeted_packages = process_glob_string(args.glob_string, target_dir)
    +    if args.omit_management:
    +        targeted_packages = process_glob_string(args.glob_string, target_dir, "", "Omit_management")
    +    else:
    +        targeted_packages = process_glob_string(args.glob_string, target_dir)
         extended_pytest_args = []
     
         if len(targeted_packages) == 0:
    diff --git a/scripts/devops_tasks/verify_change_log.py b/scripts/devops_tasks/verify_change_log.py
    index 4743d7aac81f..687d549dd3ae 100644
    --- a/scripts/devops_tasks/verify_change_log.py
    +++ b/scripts/devops_tasks/verify_change_log.py
    @@ -24,7 +24,7 @@
     
     
     def find_change_log(targeted_package, version):
    -    # Execute powershell script to find a matching version in history.md
    +    # Execute powershell script to find a matching version in change log
         command_array = ["pwsh"]
         command_array.append("-File {}".format(psscript))
         command_array.append("-workingDir {}".format(targeted_package))
    @@ -74,7 +74,7 @@ def verify_packages(targeted_packages):
     
     if __name__ == "__main__":
         parser = argparse.ArgumentParser(
    -        description="Verifies latest version is updated in history.md file, Called from DevOps YAML Pipeline"
    +        description="Verifies latest version is updated in change log, Called from DevOps YAML Pipeline"
         )
     
         parser.add_argument(
    @@ -113,12 +113,15 @@ def verify_packages(targeted_packages):
         else:
             target_dir = root_dir
     
    +    # Skip nspkg and metapackage from version check.
    +    # Change log file may be missing for these two types
    +    # process glob helper methods filter nspkg and metapackages with filter type "Docs"
         targeted_packages = process_glob_string(
    -        args.glob_string, target_dir, args.package_filter_string
    +        args.glob_string, target_dir, args.package_filter_string, "Docs"
         )
         change_missing = verify_packages(targeted_packages)
         if len(change_missing) > 0:
    -        logging.error("Below packages do not have change log in history.md")
    +        logging.error("Below packages do not have change log")
             logging.error("***************************************************")
             for pkg_name in change_missing.keys():
                 logging.error("{0} - {1}".format(pkg_name, change_missing[pkg_name]))
    diff --git a/scripts/pylint_custom_plugin/pylint_guidelines_checker.py b/scripts/pylint_custom_plugin/pylint_guidelines_checker.py
    index b28534122bbe..24e7b75064e5 100644
    --- a/scripts/pylint_custom_plugin/pylint_guidelines_checker.py
    +++ b/scripts/pylint_custom_plugin/pylint_guidelines_checker.py
    @@ -53,7 +53,7 @@ class ClientConstructorTakesCorrectParameters(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientConstructorTakesCorrectParameters, self).__init__(linter)
    @@ -162,7 +162,7 @@ class ClientHasApprovedMethodNamePrefix(BaseChecker):
             ),
         )
     
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientHasApprovedMethodNamePrefix, self).__init__(linter)
    @@ -222,7 +222,7 @@ class ClientMethodsUseKwargsWithMultipleParameters(BaseChecker):
             ),
         )
     
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientMethodsUseKwargsWithMultipleParameters, self).__init__(linter)
    @@ -276,7 +276,7 @@ class ClientMethodsHaveTypeAnnotations(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientMethodsHaveTypeAnnotations, self).__init__(linter)
    @@ -356,7 +356,7 @@ class ClientMethodsHaveTracingDecorators(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientMethodsHaveTracingDecorators, self).__init__(linter)
    @@ -428,7 +428,7 @@ class ClientsDoNotUseStaticMethods(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientsDoNotUseStaticMethods, self).__init__(linter)
    @@ -526,7 +526,7 @@ class ClientUsesCorrectNamingConventions(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientUsesCorrectNamingConventions, self).__init__(linter)
    @@ -596,7 +596,7 @@ class ClientMethodsHaveKwargsParameter(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientMethodsHaveKwargsParameter, self).__init__(linter)
    @@ -652,7 +652,7 @@ class ClientMethodNamesDoNotUseDoubleUnderscorePrefix(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
         acceptable_names = ["__init__", "__enter__", "__exit__", "__aenter__", "__aexit__", "__repr__"]
     
         def __init__(self, linter=None):
    @@ -703,7 +703,7 @@ class ClientDocstringUsesLiteralIncludeForCodeExample(BaseChecker):
             ),
         )
     
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientDocstringUsesLiteralIncludeForCodeExample, self).__init__(linter)
    @@ -771,7 +771,7 @@ class AsyncClientCorrectNaming(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(AsyncClientCorrectNaming, self).__init__(linter)
    @@ -820,7 +820,7 @@ class SpecifyParameterNamesInCall(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(SpecifyParameterNamesInCall, self).__init__(linter)
    @@ -871,7 +871,7 @@ class ClientListMethodsUseCorePaging(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientListMethodsUseCorePaging, self).__init__(linter)
    @@ -926,7 +926,7 @@ class ClientLROMethodsUseCorePolling(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientLROMethodsUseCorePolling, self).__init__(linter)
    @@ -981,7 +981,7 @@ class ClientLROMethodsUseCorrectNaming(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientLROMethodsUseCorrectNaming, self).__init__(linter)
    @@ -1039,7 +1039,7 @@ class ClientConstructorDoesNotHaveConnectionStringParam(BaseChecker):
                 },
             ),
         )
    -    ignore_clients = ["PipelineClient", "AsyncPipelineClient"]
    +    ignore_clients = ["PipelineClient", "AsyncPipelineClient", "ARMPipelineClient", "AsyncARMPipelineClient"]
     
         def __init__(self, linter=None):
             super(ClientConstructorDoesNotHaveConnectionStringParam, self).__init__(linter)
    diff --git a/sdk/advisor/azure-mgmt-advisor/CHANGELOG.md b/sdk/advisor/azure-mgmt-advisor/CHANGELOG.md
    index 5ef58760e8c5..a689427e6fdc 100644
    --- a/sdk/advisor/azure-mgmt-advisor/CHANGELOG.md
    +++ b/sdk/advisor/azure-mgmt-advisor/CHANGELOG.md
    @@ -1,5 +1,15 @@
     # Release History
     
    +## 4.0.0 (2020-03-14)
    +
    +**Features**
    +
    +- Model ResourceRecommendationBase has a new parameter resource_metadata
    +
    +**Breaking changes**
    +
    +- Model ConfigData has a new signature
    +
     ## 3.0.0 (2019-10-24)
     
     **Features**
    diff --git a/sdk/advisor/azure-mgmt-advisor/README.md b/sdk/advisor/azure-mgmt-advisor/README.md
    index a33f676add3e..d6a81c340c57 100644
    --- a/sdk/advisor/azure-mgmt-advisor/README.md
    +++ b/sdk/advisor/azure-mgmt-advisor/README.md
    @@ -1,29 +1,21 @@
    -## Microsoft Azure SDK for Python
    +# Microsoft Azure SDK for Python
     
     This is the Microsoft Azure Advisor Client Library.
    +This package has been tested with Python 2.7, 3.5, 3.6, 3.7 and 3.8.
    +For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/)
     
    -Azure Resource Manager (ARM) is the next generation of management APIs
    -that replace the old Azure Service Management (ASM).
     
    -This package has been tested with Python 2.7, 3.5, 3.6 and 3.7.
    +# Usage
     
    -For the older Azure Service Management (ASM) libraries, see
    -[azure-servicemanagement-legacy](https://pypi.python.org/pypi/azure-servicemanagement-legacy)
    -library.
    -
    -For a more complete set of Azure libraries, see the
    -[azure](https://pypi.python.org/pypi/azure) bundle package.
    -
    -## Usage
    -
    -For code examples, see
    -[Advisor](https://docs.microsoft.com/python/api/overview/azure/advisor)
    +For code examples, see [Advisor](https://docs.microsoft.com/python/api/overview/azure/advisor)
     on docs.microsoft.com.
     
    -## Provide Feedback
     
    -If you encounter any bugs or have suggestions, please file an issue in
    -the [Issues](https://github.com/Azure/azure-sdk-for-python/issues)
    +# Provide Feedback
    +
    +If you encounter any bugs or have suggestions, please file an issue in the
    +[Issues](https://github.com/Azure/azure-sdk-for-python/issues)
     section of the project.
     
    -![image](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-advisor%2FREADME.png)
    +
    +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-advisor%2FREADME.png)
    diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_advisor_management_client.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_advisor_management_client.py
    index ad34fa86ea9e..bb051ab728c8 100644
    --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_advisor_management_client.py
    +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_advisor_management_client.py
    @@ -53,7 +53,7 @@ def __init__(
             super(AdvisorManagementClient, self).__init__(self.config.credentials, self.config)
     
             client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    -        self.api_version = '2017-04-19'
    +        self.api_version = '2020-01-01'
             self._serialize = Serializer(client_models)
             self._deserialize = Deserializer(client_models)
     
    diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/__init__.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/__init__.py
    index d12d43fe96aa..ade1d759ec89 100644
    --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/__init__.py
    +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/__init__.py
    @@ -10,26 +10,30 @@
     # --------------------------------------------------------------------------
     
     try:
    +    from ._models_py3 import ArmErrorResponse, ArmErrorResponseException
         from ._models_py3 import ARMErrorResponseBody
         from ._models_py3 import ConfigData
    -    from ._models_py3 import ConfigDataProperties
    +    from ._models_py3 import DigestConfig
         from ._models_py3 import MetadataEntity
         from ._models_py3 import MetadataSupportedValueDetail
         from ._models_py3 import OperationDisplayInfo
         from ._models_py3 import OperationEntity
         from ._models_py3 import Resource
    +    from ._models_py3 import ResourceMetadata
         from ._models_py3 import ResourceRecommendationBase
         from ._models_py3 import ShortDescription
         from ._models_py3 import SuppressionContract
     except (SyntaxError, ImportError):
    +    from ._models import ArmErrorResponse, ArmErrorResponseException
         from ._models import ARMErrorResponseBody
         from ._models import ConfigData
    -    from ._models import ConfigDataProperties
    +    from ._models import DigestConfig
         from ._models import MetadataEntity
         from ._models import MetadataSupportedValueDetail
         from ._models import OperationDisplayInfo
         from ._models import OperationEntity
         from ._models import Resource
    +    from ._models import ResourceMetadata
         from ._models import ResourceRecommendationBase
         from ._models import ShortDescription
         from ._models import SuppressionContract
    @@ -40,20 +44,24 @@
     from ._paged_models import SuppressionContractPaged
     from ._advisor_management_client_enums import (
         Scenario,
    +    CpuThreshold,
         Category,
    +    DigestConfigState,
         Impact,
         Risk,
     )
     
     __all__ = [
    +    'ArmErrorResponse', 'ArmErrorResponseException',
         'ARMErrorResponseBody',
         'ConfigData',
    -    'ConfigDataProperties',
    +    'DigestConfig',
         'MetadataEntity',
         'MetadataSupportedValueDetail',
         'OperationDisplayInfo',
         'OperationEntity',
         'Resource',
    +    'ResourceMetadata',
         'ResourceRecommendationBase',
         'ShortDescription',
         'SuppressionContract',
    @@ -63,7 +71,9 @@
         'OperationEntityPaged',
         'SuppressionContractPaged',
         'Scenario',
    +    'CpuThreshold',
         'Category',
    +    'DigestConfigState',
         'Impact',
         'Risk',
     ]
    diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_advisor_management_client_enums.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_advisor_management_client_enums.py
    index d925fb682389..40a05786162e 100644
    --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_advisor_management_client_enums.py
    +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_advisor_management_client_enums.py
    @@ -17,6 +17,14 @@ class Scenario(str, Enum):
         alerts = "Alerts"
     
     
    +class CpuThreshold(str, Enum):
    +
    +    five = "5"
    +    one_zero = "10"
    +    one_five = "15"
    +    two_zero = "20"
    +
    +
     class Category(str, Enum):
     
         high_availability = "HighAvailability"
    @@ -26,6 +34,12 @@ class Category(str, Enum):
         operational_excellence = "OperationalExcellence"
     
     
    +class DigestConfigState(str, Enum):
    +
    +    active = "Active"
    +    disabled = "Disabled"
    +
    +
     class Impact(str, Enum):
     
         high = "High"
    diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_models.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_models.py
    index c1a8ad5fb1f4..f9a772563e1f 100644
    --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_models.py
    +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_models.py
    @@ -10,6 +10,35 @@
     # --------------------------------------------------------------------------
     
     from msrest.serialization import Model
    +from msrest.exceptions import HttpOperationError
    +
    +
    +class ArmErrorResponse(Model):
    +    """ArmErrorResponse.
    +
    +    :param error:
    +    :type error: ~azure.mgmt.advisor.models.ARMErrorResponseBody
    +    """
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'ARMErrorResponseBody'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ArmErrorResponse, self).__init__(**kwargs)
    +        self.error = kwargs.get('error', None)
    +
    +
    +class ArmErrorResponseException(HttpOperationError):
    +    """Server responsed with exception of type: 'ArmErrorResponse'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, deserialize, response, *args):
    +
    +        super(ArmErrorResponseException, self).__init__(deserialize, response, 'ArmErrorResponse', *args)
     
     
     class ARMErrorResponseBody(Model):
    @@ -42,60 +71,124 @@ class CloudError(Model):
         }
     
     
    -class ConfigData(Model):
    -    """The Advisor configuration data structure.
    +class Resource(Model):
    +    """An Azure resource.
     
    -    :param id: The resource Id of the configuration resource.
    -    :type id: str
    -    :param type: The type of the configuration resource.
    -    :type type: str
    -    :param name: The name of the configuration resource.
    -    :type name: str
    -    :param properties: The list of property name/value pairs.
    -    :type properties: ~azure.mgmt.advisor.models.ConfigDataProperties
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The resource ID.
    +    :vartype id: str
    +    :ivar name: The name of the resource.
    +    :vartype name: str
    +    :ivar type: The type of the resource.
    +    :vartype type: str
         """
     
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
         _attribute_map = {
             'id': {'key': 'id', 'type': 'str'},
    -        'type': {'key': 'type', 'type': 'str'},
             'name': {'key': 'name', 'type': 'str'},
    -        'properties': {'key': 'properties', 'type': 'ConfigDataProperties'},
    +        'type': {'key': 'type', 'type': 'str'},
         }
     
         def __init__(self, **kwargs):
    -        super(ConfigData, self).__init__(**kwargs)
    -        self.id = kwargs.get('id', None)
    -        self.type = kwargs.get('type', None)
    -        self.name = kwargs.get('name', None)
    -        self.properties = kwargs.get('properties', None)
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +
     
    +class ConfigData(Resource):
    +    """The Advisor configuration data structure.
     
    -class ConfigDataProperties(Model):
    -    """The list of property name/value pairs.
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
     
    -    :param additional_properties: Unmatched properties from the message are
    -     deserialized this collection
    -    :type additional_properties: dict[str, object]
    +    :ivar id: The resource ID.
    +    :vartype id: str
    +    :ivar name: The name of the resource.
    +    :vartype name: str
    +    :ivar type: The type of the resource.
    +    :vartype type: str
         :param exclude: Exclude the resource from Advisor evaluations. Valid
          values: False (default) or True.
         :type exclude: bool
         :param low_cpu_threshold: Minimum percentage threshold for Advisor low CPU
          utilization evaluation. Valid only for subscriptions. Valid values: 5
    -     (default), 10, 15 or 20.
    -    :type low_cpu_threshold: str
    +     (default), 10, 15 or 20. Possible values include: '5', '10', '15', '20'
    +    :type low_cpu_threshold: str or ~azure.mgmt.advisor.models.CpuThreshold
    +    :param digests: Advisor digest configuration. Valid only for subscriptions
    +    :type digests: list[~azure.mgmt.advisor.models.DigestConfig]
         """
     
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
         _attribute_map = {
    -        'additional_properties': {'key': '', 'type': '{object}'},
    -        'exclude': {'key': 'exclude', 'type': 'bool'},
    -        'low_cpu_threshold': {'key': 'low_cpu_threshold', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'exclude': {'key': 'properties.exclude', 'type': 'bool'},
    +        'low_cpu_threshold': {'key': 'properties.lowCpuThreshold', 'type': 'str'},
    +        'digests': {'key': 'properties.digests', 'type': '[DigestConfig]'},
         }
     
         def __init__(self, **kwargs):
    -        super(ConfigDataProperties, self).__init__(**kwargs)
    -        self.additional_properties = kwargs.get('additional_properties', None)
    +        super(ConfigData, self).__init__(**kwargs)
             self.exclude = kwargs.get('exclude', None)
             self.low_cpu_threshold = kwargs.get('low_cpu_threshold', None)
    +        self.digests = kwargs.get('digests', None)
    +
    +
    +class DigestConfig(Model):
    +    """Advisor Digest configuration entity.
    +
    +    :param name: Name of digest configuration. Value is case-insensitive and
    +     must be unique within a subscription.
    +    :type name: str
    +    :param action_group_resource_id: Action group resource id used by digest.
    +    :type action_group_resource_id: str
    +    :param frequency: Frequency that digest will be triggered, in days. Value
    +     must be between 7 and 30 days inclusive.
    +    :type frequency: int
    +    :param categories: Categories to send digest for. If categories are not
    +     provided, then digest will be sent for all categories.
    +    :type categories: list[str or ~azure.mgmt.advisor.models.Category]
    +    :param language: Language for digest content body. Value must be ISO 639-1
    +     code for one of Azure portal supported languages. Otherwise, it will be
    +     converted into one. Default value is English (en).
    +    :type language: str
    +    :param state: State of digest configuration. Possible values include:
    +     'Active', 'Disabled'
    +    :type state: str or ~azure.mgmt.advisor.models.DigestConfigState
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'action_group_resource_id': {'key': 'actionGroupResourceId', 'type': 'str'},
    +        'frequency': {'key': 'frequency', 'type': 'int'},
    +        'categories': {'key': 'categories', 'type': '[str]'},
    +        'language': {'key': 'language', 'type': 'str'},
    +        'state': {'key': 'state', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DigestConfig, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.action_group_resource_id = kwargs.get('action_group_resource_id', None)
    +        self.frequency = kwargs.get('frequency', None)
    +        self.categories = kwargs.get('categories', None)
    +        self.language = kwargs.get('language', None)
    +        self.state = kwargs.get('state', None)
     
     
     class MetadataEntity(Model):
    @@ -210,37 +303,24 @@ def __init__(self, **kwargs):
             self.display = kwargs.get('display', None)
     
     
    -class Resource(Model):
    -    """An Azure resource.
    +class ResourceMetadata(Model):
    +    """Recommendation resource metadata.
     
    -    Variables are only populated by the server, and will be ignored when
    -    sending a request.
    -
    -    :ivar id: The resource ID.
    -    :vartype id: str
    -    :ivar name: The name of the resource.
    -    :vartype name: str
    -    :ivar type: The type of the resource.
    -    :vartype type: str
    +    :param resource_id: Azure resource Id of the assessed resource
    +    :type resource_id: str
    +    :param source: Source from which recommendation is generated
    +    :type source: str
         """
     
    -    _validation = {
    -        'id': {'readonly': True},
    -        'name': {'readonly': True},
    -        'type': {'readonly': True},
    -    }
    -
         _attribute_map = {
    -        'id': {'key': 'id', 'type': 'str'},
    -        'name': {'key': 'name', 'type': 'str'},
    -        'type': {'key': 'type', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
         }
     
         def __init__(self, **kwargs):
    -        super(Resource, self).__init__(**kwargs)
    -        self.id = None
    -        self.name = None
    -        self.type = None
    +        super(ResourceMetadata, self).__init__(**kwargs)
    +        self.resource_id = kwargs.get('resource_id', None)
    +        self.source = kwargs.get('source', None)
     
     
     class ResourceRecommendationBase(Resource):
    @@ -283,6 +363,8 @@ class ResourceRecommendationBase(Resource):
         :type suppression_ids: list[str]
         :param extended_properties: Extended properties
         :type extended_properties: dict[str, str]
    +    :param resource_metadata: Metadata of resource that was assessed
    +    :type resource_metadata: ~azure.mgmt.advisor.models.ResourceMetadata
         """
     
         _validation = {
    @@ -306,6 +388,7 @@ class ResourceRecommendationBase(Resource):
             'short_description': {'key': 'properties.shortDescription', 'type': 'ShortDescription'},
             'suppression_ids': {'key': 'properties.suppressionIds', 'type': '[str]'},
             'extended_properties': {'key': 'properties.extendedProperties', 'type': '{str}'},
    +        'resource_metadata': {'key': 'properties.resourceMetadata', 'type': 'ResourceMetadata'},
         }
     
         def __init__(self, **kwargs):
    @@ -321,6 +404,7 @@ def __init__(self, **kwargs):
             self.short_description = kwargs.get('short_description', None)
             self.suppression_ids = kwargs.get('suppression_ids', None)
             self.extended_properties = kwargs.get('extended_properties', None)
    +        self.resource_metadata = kwargs.get('resource_metadata', None)
     
     
     class ShortDescription(Model):
    diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_models_py3.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_models_py3.py
    index 59b4752e6036..f9115380f584 100644
    --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_models_py3.py
    +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_models_py3.py
    @@ -10,6 +10,35 @@
     # --------------------------------------------------------------------------
     
     from msrest.serialization import Model
    +from msrest.exceptions import HttpOperationError
    +
    +
    +class ArmErrorResponse(Model):
    +    """ArmErrorResponse.
    +
    +    :param error:
    +    :type error: ~azure.mgmt.advisor.models.ARMErrorResponseBody
    +    """
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'ARMErrorResponseBody'},
    +    }
    +
    +    def __init__(self, *, error=None, **kwargs) -> None:
    +        super(ArmErrorResponse, self).__init__(**kwargs)
    +        self.error = error
    +
    +
    +class ArmErrorResponseException(HttpOperationError):
    +    """Server responsed with exception of type: 'ArmErrorResponse'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, deserialize, response, *args):
    +
    +        super(ArmErrorResponseException, self).__init__(deserialize, response, 'ArmErrorResponse', *args)
     
     
     class ARMErrorResponseBody(Model):
    @@ -42,60 +71,124 @@ class CloudError(Model):
         }
     
     
    -class ConfigData(Model):
    -    """The Advisor configuration data structure.
    +class Resource(Model):
    +    """An Azure resource.
     
    -    :param id: The resource Id of the configuration resource.
    -    :type id: str
    -    :param type: The type of the configuration resource.
    -    :type type: str
    -    :param name: The name of the configuration resource.
    -    :type name: str
    -    :param properties: The list of property name/value pairs.
    -    :type properties: ~azure.mgmt.advisor.models.ConfigDataProperties
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The resource ID.
    +    :vartype id: str
    +    :ivar name: The name of the resource.
    +    :vartype name: str
    +    :ivar type: The type of the resource.
    +    :vartype type: str
         """
     
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
         _attribute_map = {
             'id': {'key': 'id', 'type': 'str'},
    -        'type': {'key': 'type', 'type': 'str'},
             'name': {'key': 'name', 'type': 'str'},
    -        'properties': {'key': 'properties', 'type': 'ConfigDataProperties'},
    +        'type': {'key': 'type', 'type': 'str'},
         }
     
    -    def __init__(self, *, id: str=None, type: str=None, name: str=None, properties=None, **kwargs) -> None:
    -        super(ConfigData, self).__init__(**kwargs)
    -        self.id = id
    -        self.type = type
    -        self.name = name
    -        self.properties = properties
    +    def __init__(self, **kwargs) -> None:
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +
     
    +class ConfigData(Resource):
    +    """The Advisor configuration data structure.
     
    -class ConfigDataProperties(Model):
    -    """The list of property name/value pairs.
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
     
    -    :param additional_properties: Unmatched properties from the message are
    -     deserialized this collection
    -    :type additional_properties: dict[str, object]
    +    :ivar id: The resource ID.
    +    :vartype id: str
    +    :ivar name: The name of the resource.
    +    :vartype name: str
    +    :ivar type: The type of the resource.
    +    :vartype type: str
         :param exclude: Exclude the resource from Advisor evaluations. Valid
          values: False (default) or True.
         :type exclude: bool
         :param low_cpu_threshold: Minimum percentage threshold for Advisor low CPU
          utilization evaluation. Valid only for subscriptions. Valid values: 5
    -     (default), 10, 15 or 20.
    -    :type low_cpu_threshold: str
    +     (default), 10, 15 or 20. Possible values include: '5', '10', '15', '20'
    +    :type low_cpu_threshold: str or ~azure.mgmt.advisor.models.CpuThreshold
    +    :param digests: Advisor digest configuration. Valid only for subscriptions
    +    :type digests: list[~azure.mgmt.advisor.models.DigestConfig]
         """
     
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
         _attribute_map = {
    -        'additional_properties': {'key': '', 'type': '{object}'},
    -        'exclude': {'key': 'exclude', 'type': 'bool'},
    -        'low_cpu_threshold': {'key': 'low_cpu_threshold', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'exclude': {'key': 'properties.exclude', 'type': 'bool'},
    +        'low_cpu_threshold': {'key': 'properties.lowCpuThreshold', 'type': 'str'},
    +        'digests': {'key': 'properties.digests', 'type': '[DigestConfig]'},
         }
     
    -    def __init__(self, *, additional_properties=None, exclude: bool=None, low_cpu_threshold: str=None, **kwargs) -> None:
    -        super(ConfigDataProperties, self).__init__(**kwargs)
    -        self.additional_properties = additional_properties
    +    def __init__(self, *, exclude: bool=None, low_cpu_threshold=None, digests=None, **kwargs) -> None:
    +        super(ConfigData, self).__init__(**kwargs)
             self.exclude = exclude
             self.low_cpu_threshold = low_cpu_threshold
    +        self.digests = digests
    +
    +
    +class DigestConfig(Model):
    +    """Advisor Digest configuration entity.
    +
    +    :param name: Name of digest configuration. Value is case-insensitive and
    +     must be unique within a subscription.
    +    :type name: str
    +    :param action_group_resource_id: Action group resource id used by digest.
    +    :type action_group_resource_id: str
    +    :param frequency: Frequency that digest will be triggered, in days. Value
    +     must be between 7 and 30 days inclusive.
    +    :type frequency: int
    +    :param categories: Categories to send digest for. If categories are not
    +     provided, then digest will be sent for all categories.
    +    :type categories: list[str or ~azure.mgmt.advisor.models.Category]
    +    :param language: Language for digest content body. Value must be ISO 639-1
    +     code for one of Azure portal supported languages. Otherwise, it will be
    +     converted into one. Default value is English (en).
    +    :type language: str
    +    :param state: State of digest configuration. Possible values include:
    +     'Active', 'Disabled'
    +    :type state: str or ~azure.mgmt.advisor.models.DigestConfigState
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'action_group_resource_id': {'key': 'actionGroupResourceId', 'type': 'str'},
    +        'frequency': {'key': 'frequency', 'type': 'int'},
    +        'categories': {'key': 'categories', 'type': '[str]'},
    +        'language': {'key': 'language', 'type': 'str'},
    +        'state': {'key': 'state', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, name: str=None, action_group_resource_id: str=None, frequency: int=None, categories=None, language: str=None, state=None, **kwargs) -> None:
    +        super(DigestConfig, self).__init__(**kwargs)
    +        self.name = name
    +        self.action_group_resource_id = action_group_resource_id
    +        self.frequency = frequency
    +        self.categories = categories
    +        self.language = language
    +        self.state = state
     
     
     class MetadataEntity(Model):
    @@ -210,37 +303,24 @@ def __init__(self, *, name: str=None, display=None, **kwargs) -> None:
             self.display = display
     
     
    -class Resource(Model):
    -    """An Azure resource.
    +class ResourceMetadata(Model):
    +    """Recommendation resource metadata.
     
    -    Variables are only populated by the server, and will be ignored when
    -    sending a request.
    -
    -    :ivar id: The resource ID.
    -    :vartype id: str
    -    :ivar name: The name of the resource.
    -    :vartype name: str
    -    :ivar type: The type of the resource.
    -    :vartype type: str
    +    :param resource_id: Azure resource Id of the assessed resource
    +    :type resource_id: str
    +    :param source: Source from which recommendation is generated
    +    :type source: str
         """
     
    -    _validation = {
    -        'id': {'readonly': True},
    -        'name': {'readonly': True},
    -        'type': {'readonly': True},
    -    }
    -
         _attribute_map = {
    -        'id': {'key': 'id', 'type': 'str'},
    -        'name': {'key': 'name', 'type': 'str'},
    -        'type': {'key': 'type', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
         }
     
    -    def __init__(self, **kwargs) -> None:
    -        super(Resource, self).__init__(**kwargs)
    -        self.id = None
    -        self.name = None
    -        self.type = None
    +    def __init__(self, *, resource_id: str=None, source: str=None, **kwargs) -> None:
    +        super(ResourceMetadata, self).__init__(**kwargs)
    +        self.resource_id = resource_id
    +        self.source = source
     
     
     class ResourceRecommendationBase(Resource):
    @@ -283,6 +363,8 @@ class ResourceRecommendationBase(Resource):
         :type suppression_ids: list[str]
         :param extended_properties: Extended properties
         :type extended_properties: dict[str, str]
    +    :param resource_metadata: Metadata of resource that was assessed
    +    :type resource_metadata: ~azure.mgmt.advisor.models.ResourceMetadata
         """
     
         _validation = {
    @@ -306,9 +388,10 @@ class ResourceRecommendationBase(Resource):
             'short_description': {'key': 'properties.shortDescription', 'type': 'ShortDescription'},
             'suppression_ids': {'key': 'properties.suppressionIds', 'type': '[str]'},
             'extended_properties': {'key': 'properties.extendedProperties', 'type': '{str}'},
    +        'resource_metadata': {'key': 'properties.resourceMetadata', 'type': 'ResourceMetadata'},
         }
     
    -    def __init__(self, *, category=None, impact=None, impacted_field: str=None, impacted_value: str=None, last_updated=None, metadata=None, recommendation_type_id: str=None, risk=None, short_description=None, suppression_ids=None, extended_properties=None, **kwargs) -> None:
    +    def __init__(self, *, category=None, impact=None, impacted_field: str=None, impacted_value: str=None, last_updated=None, metadata=None, recommendation_type_id: str=None, risk=None, short_description=None, suppression_ids=None, extended_properties=None, resource_metadata=None, **kwargs) -> None:
             super(ResourceRecommendationBase, self).__init__(**kwargs)
             self.category = category
             self.impact = impact
    @@ -321,6 +404,7 @@ def __init__(self, *, category=None, impact=None, impacted_field: str=None, impa
             self.short_description = short_description
             self.suppression_ids = suppression_ids
             self.extended_properties = extended_properties
    +        self.resource_metadata = resource_metadata
     
     
     class ShortDescription(Model):
    diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_configurations_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_configurations_operations.py
    index 128d558b5a7c..2c54c5cd7765 100644
    --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_configurations_operations.py
    +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_configurations_operations.py
    @@ -11,7 +11,6 @@
     
     import uuid
     from msrest.pipeline import ClientRawResponse
    -from msrestazure.azure_exceptions import CloudError
     
     from .. import models
     
    @@ -25,7 +24,8 @@ class ConfigurationsOperations(object):
         :param config: Configuration of service client.
         :param serializer: An object model serializer.
         :param deserializer: An object model deserializer.
    -    :ivar api_version: The version of the API to be used with the client request. Constant value: "2017-04-19".
    +    :ivar api_version: The version of the API to be used with the client request. Constant value: "2020-01-01".
    +    :ivar configuration_name: Advisor configuration name. Value must be 'default'. Constant value: "default".
         """
     
         models = models
    @@ -35,7 +35,8 @@ def __init__(self, client, config, serializer, deserializer):
             self._client = client
             self._serialize = serializer
             self._deserialize = deserializer
    -        self.api_version = "2017-04-19"
    +        self.api_version = "2020-01-01"
    +        self.configuration_name = "default"
     
             self.config = config
     
    @@ -54,7 +55,8 @@ def list_by_subscription(
             :return: An iterator like instance of ConfigData
             :rtype:
              ~azure.mgmt.advisor.models.ConfigDataPaged[~azure.mgmt.advisor.models.ConfigData]
    -        :raises: :class:`CloudError`
    +        :raises:
    +         :class:`ArmErrorResponseException`
             """
             def prepare_request(next_link=None):
                 if not next_link:
    @@ -93,9 +95,7 @@ def internal_paging(next_link=None):
                 response = self._client.send(request, stream=False, **operation_config)
     
                 if response.status_code not in [200]:
    -                exp = CloudError(response)
    -                exp.request_id = response.headers.get('x-ms-request-id')
    -                raise exp
    +                raise models.ArmErrorResponseException(self._deserialize, response)
     
                 return response
     
    @@ -123,15 +123,17 @@ def create_in_subscription(
              deserialized response
             :param operation_config: :ref:`Operation configuration
              overrides`.
    -        :return: ARMErrorResponseBody or ClientRawResponse if raw=true
    -        :rtype: ~azure.mgmt.advisor.models.ARMErrorResponseBody or
    +        :return: ConfigData or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.advisor.models.ConfigData or
              ~msrest.pipeline.ClientRawResponse
    -        :raises: :class:`CloudError`
    +        :raises:
    +         :class:`ArmErrorResponseException`
             """
             # Construct URL
             url = self.create_in_subscription.metadata['url']
             path_format_arguments = {
    -            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'configurationName': self._serialize.url("self.configuration_name", self.configuration_name, 'str')
             }
             url = self._client.format_url(url, **path_format_arguments)
     
    @@ -157,21 +159,19 @@ def create_in_subscription(
             request = self._client.put(url, query_parameters, header_parameters, body_content)
             response = self._client.send(request, stream=False, **operation_config)
     
    -        if response.status_code not in [204, 400]:
    -            exp = CloudError(response)
    -            exp.request_id = response.headers.get('x-ms-request-id')
    -            raise exp
    +        if response.status_code not in [200]:
    +            raise models.ArmErrorResponseException(self._deserialize, response)
     
             deserialized = None
    -        if response.status_code == 400:
    -            deserialized = self._deserialize('ARMErrorResponseBody', response)
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ConfigData', response)
     
             if raw:
                 client_raw_response = ClientRawResponse(deserialized, response)
                 return client_raw_response
     
             return deserialized
    -    create_in_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/configurations'}
    +    create_in_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/configurations/{configurationName}'}
     
         def list_by_resource_group(
                 self, resource_group, custom_headers=None, raw=False, **operation_config):
    @@ -187,7 +187,8 @@ def list_by_resource_group(
             :return: An iterator like instance of ConfigData
             :rtype:
              ~azure.mgmt.advisor.models.ConfigDataPaged[~azure.mgmt.advisor.models.ConfigData]
    -        :raises: :class:`CloudError`
    +        :raises:
    +         :class:`ArmErrorResponseException`
             """
             def prepare_request(next_link=None):
                 if not next_link:
    @@ -227,9 +228,7 @@ def internal_paging(next_link=None):
                 response = self._client.send(request, stream=False, **operation_config)
     
                 if response.status_code not in [200]:
    -                exp = CloudError(response)
    -                exp.request_id = response.headers.get('x-ms-request-id')
    -                raise exp
    +                raise models.ArmErrorResponseException(self._deserialize, response)
     
                 return response
     
    @@ -256,15 +255,17 @@ def create_in_resource_group(
              deserialized response
             :param operation_config: :ref:`Operation configuration
              overrides`.
    -        :return: ARMErrorResponseBody or ClientRawResponse if raw=true
    -        :rtype: ~azure.mgmt.advisor.models.ARMErrorResponseBody or
    +        :return: ConfigData or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.advisor.models.ConfigData or
              ~msrest.pipeline.ClientRawResponse
    -        :raises: :class:`CloudError`
    +        :raises:
    +         :class:`ArmErrorResponseException`
             """
             # Construct URL
             url = self.create_in_resource_group.metadata['url']
             path_format_arguments = {
                 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'configurationName': self._serialize.url("self.configuration_name", self.configuration_name, 'str'),
                 'resourceGroup': self._serialize.url("resource_group", resource_group, 'str')
             }
             url = self._client.format_url(url, **path_format_arguments)
    @@ -291,18 +292,16 @@ def create_in_resource_group(
             request = self._client.put(url, query_parameters, header_parameters, body_content)
             response = self._client.send(request, stream=False, **operation_config)
     
    -        if response.status_code not in [204, 400]:
    -            exp = CloudError(response)
    -            exp.request_id = response.headers.get('x-ms-request-id')
    -            raise exp
    +        if response.status_code not in [200]:
    +            raise models.ArmErrorResponseException(self._deserialize, response)
     
             deserialized = None
    -        if response.status_code == 400:
    -            deserialized = self._deserialize('ARMErrorResponseBody', response)
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ConfigData', response)
     
             if raw:
                 client_raw_response = ClientRawResponse(deserialized, response)
                 return client_raw_response
     
             return deserialized
    -    create_in_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Advisor/configurations'}
    +    create_in_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Advisor/configurations/{configurationName}'}
    diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_operations.py
    index cb591080f43f..29154f117dba 100644
    --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_operations.py
    +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_operations.py
    @@ -25,7 +25,7 @@ class Operations(object):
         :param config: Configuration of service client.
         :param serializer: An object model serializer.
         :param deserializer: An object model deserializer.
    -    :ivar api_version: The version of the API to be used with the client request. Constant value: "2017-04-19".
    +    :ivar api_version: The version of the API to be used with the client request. Constant value: "2020-01-01".
         """
     
         models = models
    @@ -35,7 +35,7 @@ def __init__(self, client, config, serializer, deserializer):
             self._client = client
             self._serialize = serializer
             self._deserialize = deserializer
    -        self.api_version = "2017-04-19"
    +        self.api_version = "2020-01-01"
     
             self.config = config
     
    diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendation_metadata_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendation_metadata_operations.py
    index cbc259216fdc..4697a37af304 100644
    --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendation_metadata_operations.py
    +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendation_metadata_operations.py
    @@ -25,7 +25,7 @@ class RecommendationMetadataOperations(object):
         :param config: Configuration of service client.
         :param serializer: An object model serializer.
         :param deserializer: An object model deserializer.
    -    :ivar api_version: The version of the API to be used with the client request. Constant value: "2017-04-19".
    +    :ivar api_version: The version of the API to be used with the client request. Constant value: "2020-01-01".
         """
     
         models = models
    @@ -35,7 +35,7 @@ def __init__(self, client, config, serializer, deserializer):
             self._client = client
             self._serialize = serializer
             self._deserialize = deserializer
    -        self.api_version = "2017-04-19"
    +        self.api_version = "2020-01-01"
     
             self.config = config
     
    diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendations_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendations_operations.py
    index 5f3bf5c6c6d6..600cd2c43ff7 100644
    --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendations_operations.py
    +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendations_operations.py
    @@ -25,7 +25,7 @@ class RecommendationsOperations(object):
         :param config: Configuration of service client.
         :param serializer: An object model serializer.
         :param deserializer: An object model deserializer.
    -    :ivar api_version: The version of the API to be used with the client request. Constant value: "2017-04-19".
    +    :ivar api_version: The version of the API to be used with the client request. Constant value: "2020-01-01".
         """
     
         models = models
    @@ -35,7 +35,7 @@ def __init__(self, client, config, serializer, deserializer):
             self._client = client
             self._serialize = serializer
             self._deserialize = deserializer
    -        self.api_version = "2017-04-19"
    +        self.api_version = "2020-01-01"
     
             self.config = config
     
    diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_suppressions_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_suppressions_operations.py
    index 6e2b52a75025..e8ee6264d4d6 100644
    --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_suppressions_operations.py
    +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_suppressions_operations.py
    @@ -25,7 +25,7 @@ class SuppressionsOperations(object):
         :param config: Configuration of service client.
         :param serializer: An object model serializer.
         :param deserializer: An object model deserializer.
    -    :ivar api_version: The version of the API to be used with the client request. Constant value: "2017-04-19".
    +    :ivar api_version: The version of the API to be used with the client request. Constant value: "2020-01-01".
         """
     
         models = models
    @@ -35,7 +35,7 @@ def __init__(self, client, config, serializer, deserializer):
             self._client = client
             self._serialize = serializer
             self._deserialize = deserializer
    -        self.api_version = "2017-04-19"
    +        self.api_version = "2020-01-01"
     
             self.config = config
     
    diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/version.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/version.py
    index 69dfaa9ef877..828282207f04 100644
    --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/version.py
    +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/version.py
    @@ -9,4 +9,4 @@
     # regenerated.
     # --------------------------------------------------------------------------
     
    -VERSION = "3.0.0"
    +VERSION = "4.0.0"
    diff --git a/sdk/advisor/azure-mgmt-advisor/setup.py b/sdk/advisor/azure-mgmt-advisor/setup.py
    index 19694ed91f2e..d89cc9aaa971 100644
    --- a/sdk/advisor/azure-mgmt-advisor/setup.py
    +++ b/sdk/advisor/azure-mgmt-advisor/setup.py
    @@ -67,6 +67,7 @@
             'Programming Language :: Python :: 3.5',
             'Programming Language :: Python :: 3.6',
             'Programming Language :: Python :: 3.7',
    +        'Programming Language :: Python :: 3.8',
             'License :: OSI Approved :: MIT License',
         ],
         zip_safe=False,
    diff --git a/sdk/automation/azure-mgmt-automation/tests/recordings/test_cli_mgmt_automation.test_automation.yaml b/sdk/automation/azure-mgmt-automation/tests/recordings/test_cli_mgmt_automation.test_automation.yaml
    new file mode 100644
    index 000000000000..609d33e2fc44
    --- /dev/null
    +++ b/sdk/automation/azure-mgmt-automation/tests/recordings/test_cli_mgmt_automation.test_automation.yaml
    @@ -0,0 +1,2464 @@
    +interactions:
    +- request:
    +    body: '{"properties": {"sku": {"name": "Free"}}, "name": "myAutomationAccount9",
    +      "location": "East US 2"}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '98'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"name":"myAutomationAccount9","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9","type":"Microsoft.Automation/AutomationAccounts","location":"East
    +        US 2","tags":{},"etag":null,"properties":{"sku":{"name":"Basic","family":null,"capacity":null},"state":"Ok","RegistrationUrl":"https://eus2-agentservice-prod-1.azure-automation.net/accounts/40a01d37-3e3a-42c5-9a46-5307a55ea829","creationTime":"2020-02-17T11:28:19.527+00:00","lastModifiedBy":null,"lastModifiedTime":"2020-02-17T11:28:19.527+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '640'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:28:20 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9?api-version=2015-10-31
    +      ocp-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9?api-version=2015-10-31
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9?api-version=2015-10-31
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1183'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: '{"properties": {"logVerbose": false, "logProgress": false, "runbookType":
    +      "PowerShellWorkflow", "draft": {}, "description": "Description of the Runbook"},
    +      "name": "runbook_draft", "location": "East US 2", "tags": {"tag01": "value01",
    +      "tag02": "value02"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '254'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/runbook_draft?api-version=2018-06-30
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/runbook_draft","name":"runbook_draft","type":"Microsoft.Automation/AutomationAccounts/Runbooks","location":"East
    +        US 2","tags":{"tag01":"value01","tag02":"value02"},"etag":"\"637175357066930000\"","properties":{"description":"Description
    +        of the Runbook","logVerbose":false,"logProgress":false,"logActivityTrace":0,"runbookType":"PowerShellWorkflow","parameters":{},"state":"New","jobCount":0,"provisioningState":"Succeeded","serviceManagementTags":null,"outputTypes":[],"creationTime":"2020-02-17T11:28:26.693+00:00","lastModifiedBy":null,"lastModifiedTime":"2020-02-17T11:28:26.693+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '793'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:28:27 GMT
    +      etag:
    +      - '"637175357066930000"'
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/runbook_draft?api-version=2018-06-30
    +      ocp-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/runbook_draft?api-version=2018-06-30
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/runbook_draft?api-version=2018-06-30
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1185'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: '{"properties": {"contentLink": {"uri": "https://teststorage.blob.core.windows.net/dsccomposite/OmsCompositeResources.zip",
    +      "contentHash": {"algorithm": "sha265", "value": "07E108A962B81DD9C9BAA89BB47C0F6EE52B29E83758B07795E408D258B2B87A"},
    +      "version": "1.0.0.0"}}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '263'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/modules/module1?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/modules/module1","name":"module1","type":"Microsoft.Automation/AutomationAccounts/Modules","location":"East
    +        US 2","tags":{},"etag":null,"properties":{"isGlobal":false,"version":null,"sizeInBytes":0,"activityCount":0,"creationTime":"2020-02-17T11:28:35.177+00:00","lastModifiedTime":"2020-02-17T11:28:35.237+00:00","error":{"code":null,"message":null},"provisioningState":"Creating","isComposite":false}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '597'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:28:34 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/modules/module1?api-version=2015-10-31
    +      ocp-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/modules/module1?api-version=2015-10-31
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/modules/module1?api-version=2015-10-31
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1182'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: '{"properties": {"logVerbose": false, "logProgress": true, "runbookType":
    +      "PowerShellWorkflow", "publishContentLink": {"uri": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/0.0.0.3/101-automation-runbook-getvms/Runbooks/Get-AzureVMTutorial.ps1",
    +      "contentHash": {"algorithm": "SHA256", "value": "4fab357cab33adbe9af72ae4b1203e601e30e44de271616e376c08218fd10d1c"}},
    +      "description": "Description of the Runbook", "logActivityTrace": 1}, "name":
    +      "Get-AzureVMTutorial", "location": "East US 2", "tags": {"tag01": "value01",
    +      "tag02": "value02"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '558'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/Get-AzureVMTutorial?api-version=2018-06-30
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/Get-AzureVMTutorial","name":"Get-AzureVMTutorial","type":"Microsoft.Automation/AutomationAccounts/Runbooks","location":"East
    +        US 2","tags":{"tag01":"value01","tag02":"value02"},"etag":"\"637175357392330000\"","properties":{"description":"Description
    +        of the Runbook","logVerbose":false,"logProgress":true,"logActivityTrace":1,"runbookType":"PowerShellWorkflow","parameters":{},"state":"Published","jobCount":0,"provisioningState":"Succeeded","serviceManagementTags":null,"outputTypes":[],"creationTime":"2020-02-17T11:28:59.23+00:00","lastModifiedBy":null,"lastModifiedTime":"2020-02-17T11:28:59.233+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '809'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:29:00 GMT
    +      etag:
    +      - '"637175357392330000"'
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/Get-AzureVMTutorial?api-version=2018-06-30
    +      ocp-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/Get-AzureVMTutorial?api-version=2018-06-30
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/Get-AzureVMTutorial?api-version=2018-06-30
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1181'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: '{"properties": {"runbook": {"name": "Get-AzureVMTutorial"}, "parameters":
    +      {"key01": "value01", "key02": "value02"}, "runOn": ""}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '129'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/jobs/job1?api-version=2017-05-15-preview
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/jobs/job1","name":"job1","type":"Microsoft.Automation/AutomationAccounts/Jobs","properties":{"jobId":"eadec20d-d434-4bd7-a0aa-bbc1dc204984","creationTime":"2020-02-17T11:29:04.827+00:00","provisioningState":"Processing","status":"New","statusDetails":"None","startedBy":null,"startTime":null,"endTime":null,"lastModifiedTime":"2020-02-17T11:29:04.827+00:00","lastStatusModifiedTime":"2020-02-17T11:29:04.827+00:00","exception":null,"parameters":{"key01":"value01","key02":"value02"},"runOn":"","runbook":{"name":"Get-AzureVMTutorial"}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '730'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:29:04 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/jobs/job1?api-version=2017-05-15-preview
    +      ocp-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/jobs/job1?api-version=2017-05-15-preview
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/jobs/job1?api-version=2017-05-15-preview
    +      x-ms-ratelimit-remaining-subscription-resource-requests:
    +      - '1999'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: '{"name": "TestWebhook", "properties": {"isEnabled": true, "uri": "https://s1events.azure-automation.net/webhooks?token=7u3KfQvM1vUPWaDMFRv2%2fAA4Jqx8QwS8aBuyO6Xsdcw%3d",
    +      "expiryTime": "2020-03-29T22:18:13.700287Z", "runbook": {"name": "Get-AzureVMTutorial"}}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '259'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/webhooks/webhook1?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/webhooks/webhook1","name":"webhook1","type":"Microsoft.Automation/AutomationAccounts/Webhooks","properties":{"isEnabled":true,"expiryTime":"2020-03-29T22:18:13.700287+00:00","runbook":{"name":"Get-AzureVMTutorial"},"lastInvokedTime":null,"runOn":null,"parameters":null,"uri":"","creationTime":"2020-02-17T11:29:07.7726796+00:00","lastModifiedBy":"","lastModifiedTime":"2020-02-17T11:29:07.7726796+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '599'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:29:07 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/webhooks/webhook1?api-version=2015-10-31
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1184'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: '{"name": "mySchedule", "properties": {"description": "my description of
    +      schedule goes here", "startTime": "2020-03-27T17:28:57.249481Z", "expiryTime":
    +      "2020-04-01T17:28:57.249481Z", "interval": "1", "frequency": "Hour"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '220'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/schedules/mySchedule?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"name":"mySchedule","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/schedules/mySchedule","type":"Microsoft.Automation/AutomationAccounts/Schedules","properties":{"description":"my
    +        description of schedule goes here","startTime":"2020-03-27T17:28:00+00:00","startTimeOffsetMinutes":0.0,"expiryTime":"2020-04-01T17:28:00+00:00","expiryTimeOffsetMinutes":0.0,"isEnabled":true,"nextRun":"2020-03-27T17:28:00+00:00","nextRunOffsetMinutes":0.0,"interval":1,"frequency":"Hour","creationTime":"2020-02-17T11:29:20.4+00:00","lastModifiedTime":"2020-02-17T11:29:20.4+00:00","timeZone":"UTC","advancedSchedule":null}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '752'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:29:19 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/schedules/mySchedule?api-version=2015-10-31
    +      ocp-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/schedules/mySchedule?api-version=2015-10-31
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/schedules/mySchedule?api-version=2015-10-31
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1182'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: '{"name": "sampleVariable", "properties": {"value": "\"ComputerName.domain.com\"",
    +      "description": "my description", "isEncrypted": false}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '137'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/variables/sampleVariable?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/variables/sampleVariable","name":"sampleVariable","type":"Microsoft.Automation/AutomationAccounts/Variables","properties":{"creationTime":"2020-02-17T11:29:22.267+00:00","lastModifiedTime":"2020-02-17T11:29:22.267+00:00","isEncrypted":false,"value":"\"ComputerName.domain.com\"","description":"my
    +        description"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '505'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:29:21 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/variables/sampleVariable?api-version=2015-10-31
    +      ocp-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/variables/sampleVariable?api-version=2015-10-31
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/variables/sampleVariable?api-version=2015-10-31
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1188'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: '{"name": "myCredential", "properties": {"userName": "mylingaiah", "password":
    +      "myPassw0rd", "description": "my description goes here"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '135'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/credentials/myCredential?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/credentials/myCredential","name":"myCredential","type":"Microsoft.Automation/AutomationAccounts/Credentials","properties":{"userName":"mylingaiah","description":"my
    +        description goes here","creationTime":"2020-02-17T11:29:23.08+00:00","lastModifiedTime":"2020-02-17T11:29:23.08+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '479'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:29:22 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/credentials/myCredential?api-version=2015-10-31
    +      ocp-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/credentials/myCredential?api-version=2015-10-31
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/credentials/myCredential?api-version=2015-10-31
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1181'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/softwareUpdateConfigurationMachineRuns?api-version=2017-05-15-preview
    +  response:
    +    body:
    +      string: '{"value":[]}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '12'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:29:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/softwareUpdateConfigurationRuns?api-version=2017-05-15-preview
    +  response:
    +    body:
    +      string: '{"value":[]}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '12'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:29:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - text/powershell
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/Get-AzureVMTutorial/content?api-version=2018-06-30
    +  response:
    +    body:
    +      string: "<#\n    .DESCRIPTION\n        An example runbook which prints out the\
    +        \ first 10 Azure VMs in your subscription (ordered alphabetically).\n    \
    +        \    For more information about how this runbook authenticates to your Azure\
    +        \ subscription, see our documentation here: http://aka.ms/fxu3mn\n\n    .NOTES\n\
    +        \        AUTHOR: Azure Automation Team\n        LASTEDIT: Mar 27, 2015\n#>\n\
    +        workflow Get-AzureVMTutorial\n{\n    #The name of the Automation Credential\
    +        \ Asset this runbook will use to authenticate to Azure.\n    $CredentialAssetName\
    +        \ = 'DefaultAzureCredential'\n\n    #Get the credential with the above name\
    +        \ from the Automation Asset store\n    $Cred = Get-AutomationPSCredential\
    +        \ -Name $CredentialAssetName\n    if(!$Cred) {\n        Throw \"Could not\
    +        \ find an Automation Credential Asset named '${CredentialAssetName}'. Make\
    +        \ sure you have created one in this Automation Account.\"\n    }\n\n    #Connect\
    +        \ to your Azure Account\n    $Account = Add-AzureAccount -Credential $Cred\n\
    +        \    if(!$Account) {\n        Throw \"Could not authenticate to Azure using\
    +        \ the credential asset '${CredentialAssetName}'. Make sure the user name and\
    +        \ password are correct.\"\n    }\n\n    #TODO (optional): pick the right subscription\
    +        \ to use. Without this line, the default subscription for your Azure Account\
    +        \ will be used.\n    #Select-AzureSubscription -SubscriptionName \"TODO: your\
    +        \ Azure subscription name here\"\n    \n    #Get all the VMs you have in your\
    +        \ Azure subscription\n    $VMs = Get-AzureVM\n\n    #Print out up to 10 of\
    +        \ those VMs\n    if(!$VMs) {\n        Write-Output \"No VMs were found in\
    +        \ your subscription.\"\n    } else {\n        Write-Output $VMs[0..9]\n  \
    +        \  }\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1607'
    +      content-type:
    +      - text/powershell
    +      date:
    +      - Mon, 17 Feb 2020 11:29:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding,Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/jobs/job1/runbookContent?api-version=2017-05-15-preview
    +  response:
    +    body:
    +      string: "<#\n    .DESCRIPTION\n        An example runbook which prints out the\
    +        \ first 10 Azure VMs in your subscription (ordered alphabetically).\n    \
    +        \    For more information about how this runbook authenticates to your Azure\
    +        \ subscription, see our documentation here: http://aka.ms/fxu3mn\n\n    .NOTES\n\
    +        \        AUTHOR: Azure Automation Team\n        LASTEDIT: Mar 27, 2015\n#>\n\
    +        workflow Get-AzureVMTutorial\n{\n    #The name of the Automation Credential\
    +        \ Asset this runbook will use to authenticate to Azure.\n    $CredentialAssetName\
    +        \ = 'DefaultAzureCredential'\n\n    #Get the credential with the above name\
    +        \ from the Automation Asset store\n    $Cred = Get-AutomationPSCredential\
    +        \ -Name $CredentialAssetName\n    if(!$Cred) {\n        Throw \"Could not\
    +        \ find an Automation Credential Asset named '${CredentialAssetName}'. Make\
    +        \ sure you have created one in this Automation Account.\"\n    }\n\n    #Connect\
    +        \ to your Azure Account\n    $Account = Add-AzureAccount -Credential $Cred\n\
    +        \    if(!$Account) {\n        Throw \"Could not authenticate to Azure using\
    +        \ the credential asset '${CredentialAssetName}'. Make sure the user name and\
    +        \ password are correct.\"\n    }\n\n    #TODO (optional): pick the right subscription\
    +        \ to use. Without this line, the default subscription for your Azure Account\
    +        \ will be used.\n    #Select-AzureSubscription -SubscriptionName \"TODO: your\
    +        \ Azure subscription name here\"\n    \n    #Get all the VMs you have in your\
    +        \ Azure subscription\n    $VMs = Get-AzureVM\n\n    #Print out up to 10 of\
    +        \ those VMs\n    if(!$VMs) {\n        Write-Output \"No VMs were found in\
    +        \ your subscription.\"\n    } else {\n        Write-Output $VMs[0..9]\n  \
    +        \  }\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1607'
    +      content-type:
    +      - text/powershell
    +      date:
    +      - Mon, 17 Feb 2020 11:29:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding,Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/runbook_draft/draft?api-version=2018-06-30
    +  response:
    +    body:
    +      string: '{"creationTime":"2020-02-17T11:28:26.697+00:00","lastModifiedTime":"2020-02-17T11:28:26.697+00:00","inEdit":true,"parameters":{},"outputTypes":[]}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '146'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:29:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/credentials/myCredential?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/credentials/myCredential","name":"myCredential","type":"Microsoft.Automation/AutomationAccounts/Credentials","properties":{"userName":"mylingaiah","description":"my
    +        description goes here","creationTime":"2020-02-17T11:29:23.08+00:00","lastModifiedTime":"2020-02-17T11:29:23.08+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '479'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:29:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/softwareUpdateConfigurationRuns?api-version=2017-05-15-preview
    +  response:
    +    body:
    +      string: '{"value":[]}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '12'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:29:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/softwareUpdateConfigurationRuns?api-version=2017-05-15-preview
    +  response:
    +    body:
    +      string: '{"value":[]}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '12'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:29:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/variables/sampleVariable?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/variables/sampleVariable","name":"sampleVariable","type":"Microsoft.Automation/AutomationAccounts/Variables","properties":{"creationTime":"2020-02-17T11:29:22.267+00:00","lastModifiedTime":"2020-02-17T11:29:22.267+00:00","isEncrypted":false,"value":"\"ComputerName.domain.com\"","description":"my
    +        description"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '505'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:30:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/schedules/mySchedule?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/schedules/mySchedule","name":"mySchedule","type":"Microsoft.Automation/AutomationAccounts/Schedules","properties":{"description":"my
    +        description of schedule goes here","startTime":"2020-03-27T17:28:00+00:00","startTimeOffsetMinutes":0.0,"expiryTime":"2020-04-01T17:28:00+00:00","expiryTimeOffsetMinutes":0.0,"isEnabled":true,"nextRun":"2020-03-27T17:28:00+00:00","nextRunOffsetMinutes":0.0,"interval":1,"frequency":"Hour","creationTime":"2020-02-17T11:29:20.4+00:00","lastModifiedTime":"2020-02-17T11:29:20.4+00:00","timeZone":"UTC","advancedSchedule":null}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '752'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:30:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/Get-AzureVMTutorial?api-version=2018-06-30
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/Get-AzureVMTutorial","name":"Get-AzureVMTutorial","type":"Microsoft.Automation/AutomationAccounts/Runbooks","location":"East
    +        US 2","tags":{"tag01":"value01","tag02":"value02"},"etag":"\"637175357392330000\"","properties":{"description":"Description
    +        of the Runbook","logVerbose":false,"logProgress":true,"logActivityTrace":1,"runbookType":"PowerShellWorkflow","parameters":{},"state":"Published","jobCount":0,"provisioningState":"Succeeded","serviceManagementTags":null,"outputTypes":[],"creationTime":"2020-02-17T11:28:59.23+00:00","lastModifiedBy":null,"lastModifiedTime":"2020-02-17T11:28:59.233+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '809'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:30:26 GMT
    +      etag:
    +      - '"637175357392330000"'
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/webhooks/webhook1?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/webhooks/webhook1","name":"webhook1","type":"Microsoft.Automation/AutomationAccounts/Webhooks","properties":{"isEnabled":true,"expiryTime":"2020-03-29T22:18:13.700287+00:00","runbook":{"name":"Get-AzureVMTutorial"},"lastInvokedTime":null,"runOn":null,"parameters":null,"uri":"","creationTime":"2020-02-17T11:29:07.7726796+00:00","lastModifiedBy":"","lastModifiedTime":"2020-02-17T11:29:07.7726796+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '599'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:30:28 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - text/plain
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/jobs/job1/output?api-version=2017-05-15-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      content-type:
    +      - text/plain
    +      date:
    +      - Mon, 17 Feb 2020 11:30:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/modules/module1?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"name":"module1","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/modules/module1","type":"Microsoft.Automation/AutomationAccounts/Modules","location":"East
    +        US 2","tags":{},"etag":null,"properties":{"isGlobal":false,"version":null,"sizeInBytes":0,"activityCount":0,"creationTime":"2020-02-17T11:28:35.177+00:00","lastModifiedTime":"2020-02-17T11:29:41.78+00:00","error":{"code":null,"message":"Orchestrator.Shared.AsyncModuleImport.ModuleImportException:
    +        No content was read from the supplied ContentLink. [ContentLink.Uri=https://teststorage.blob.core.windows.net/dsccomposite/OmsCompositeResources.zip]\r\n   at
    +        Orchestrator.Activities.GetModuleContentActivity.ExecuteInternal(CodeActivityContext
    +        context, String contentUri, String contentHashAlgorithm, String contentHashValue,
    +        String contentVersion, String moduleName, ModuleLanguage moduleLanguage)\r\n   at
    +        Orchestrator.Activities.GetModuleContentActivity.Execute(CodeActivityContext
    +        context)\r\n   at System.Activities.CodeActivity.InternalExecute(ActivityInstance
    +        instance, ActivityExecutor executor, BookmarkManager bookmarkManager)\r\n   at
    +        System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor
    +        executor, BookmarkManager bookmarkManager, Location resultLocation)"},"provisioningState":"Failed","isComposite":false}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1462'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:30:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/jobs/job1?api-version=2017-05-15-preview
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/jobs/job1","name":"job1","type":"Microsoft.Automation/AutomationAccounts/Jobs","properties":{"jobId":"eadec20d-d434-4bd7-a0aa-bbc1dc204984","creationTime":"2020-02-17T11:29:04.8349005+00:00","provisioningState":"Suspended","status":"Suspended","statusDetails":"None","startedBy":"{scrubbed}","startTime":"2020-02-17T11:29:30.9401+00:00","endTime":null,"lastModifiedTime":"2020-02-17T11:29:31.4713781+00:00","lastStatusModifiedTime":"2020-02-17T11:29:31.4713781+00:00","exception":"Could
    +        not find an Automation Credential Asset named ''DefaultAzureCredential''.
    +        Make sure you have created one in this Automation Account.","parameters":{"key01":"value01","key02":"value02"},"runOn":"","runbook":{"name":"Get-AzureVMTutorial"}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '917'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:30:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-resource-requests:
    +      - '599'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/linkedWorkspace?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":null}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '11'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:30:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"name":"myAutomationAccount9","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9","type":"Microsoft.Automation/AutomationAccounts","location":"East
    +        US 2","tags":{},"etag":null,"properties":{"sku":{"name":"Basic","family":null,"capacity":null},"state":"Ok","RegistrationUrl":"https://eus2-agentservice-prod-1.azure-automation.net/accounts/40a01d37-3e3a-42c5-9a46-5307a55ea829","creationTime":"2020-02-17T11:28:19.527+00:00","lastModifiedBy":null,"lastModifiedTime":"2020-02-17T11:28:19.527+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '640'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:30:48 GMT
    +      expires:
    +      - '-1'
    +      ocp-automation-accountid:
    +      - 40a01d37-3e3a-42c5-9a46-5307a55ea829
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"properties": {"contentLink": {"uri": "https://teststorage.blob.core.windows.net/mycontainer/MyModule.zip",
    +      "contentHash": {"algorithm": "sha265", "value": "07E108A962B81DD9C9BAA89BB47C0F6EE52B29E83758B07795E408D258B2B87A"},
    +      "version": "1.0.0.0"}}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '249'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/modules/module1?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"name":"module1","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/modules/module1","type":"Microsoft.Automation/AutomationAccounts/Modules","location":"East
    +        US 2","tags":{},"etag":null,"properties":{"isGlobal":false,"version":null,"sizeInBytes":0,"activityCount":0,"creationTime":"2020-02-17T11:28:35.177+00:00","lastModifiedTime":"2020-02-17T11:29:41.78+00:00","error":{"code":null,"message":null},"provisioningState":"Creating","isComposite":false}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '596'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:30:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1199'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/runbook_draft/publish?api-version=2018-06-30
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Mon, 17 Feb 2020 11:30:57 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/runbook_draft/publish/operationResults/55cba213-ab15-475a-b3fe-2ea4cfbbb1fe?api-version=2018-06-30
    +      ocp-automation-operationresultid:
    +      - 55cba213-ab15-475a-b3fe-2ea4cfbbb1fe
    +      - 55cba213-ab15-475a-b3fe-2ea4cfbbb1fe
    +      ocp-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/runbook_draft/publish/operationResults/55cba213-ab15-475a-b3fe-2ea4cfbbb1fe?api-version=2018-06-30
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-location:
    +      - https://management.azure.com/subscriptions/92f95d8f-3c67-4124-91c7-8cf07cdbf241/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/runbook_draft/publish/operationResults/55cba213-ab15-475a-b3fe-2ea4cfbbb1fe?api-version=2018-06-30
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1197'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/runbook_draft/publish/operationResults/55cba213-ab15-475a-b3fe-2ea4cfbbb1fe?api-version=2018-06-30
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      content-type:
    +      - text/plain; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:31:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"name": "myCredential", "properties": {"userName": "mylingaiah", "password":
    +      "myPassw0rd3", "description": "my description goes here"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '136'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/credentials/myCredential?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/credentials/myCredential","name":"myCredential","type":"Microsoft.Automation/AutomationAccounts/Credentials","properties":{"userName":"mylingaiah","description":"my
    +        description goes here","creationTime":"2020-02-17T11:29:23.08+00:00","lastModifiedTime":"2020-02-17T11:29:23.08+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '479'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:31:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1180'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"name": "sampleVariable", "properties": {"value": "\"ComputerName3.domain.com\""}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '83'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/variables/sampleVariable?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/variables/sampleVariable","name":"sampleVariable","type":"Microsoft.Automation/AutomationAccounts/Variables","properties":{"creationTime":"2020-02-17T11:29:22.267+00:00","lastModifiedTime":"2020-02-17T11:31:46.793+00:00","isEncrypted":false,"value":"\"ComputerName3.domain.com\"","description":"my
    +        description"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '506'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:31:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1187'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"name": "mySchedule", "properties": {"description": "my updated description
    +      of schedule goes here", "isEnabled": false}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '121'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/schedules/mySchedule?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/schedules/mySchedule","name":"mySchedule","type":"Microsoft.Automation/AutomationAccounts/Schedules","properties":{"description":"my
    +        updated description of schedule goes here","startTime":"2020-03-27T17:28:00+00:00","startTimeOffsetMinutes":0.0,"expiryTime":"2020-04-01T17:28:00+00:00","expiryTimeOffsetMinutes":0.0,"isEnabled":false,"nextRun":"2020-03-27T17:28:00+00:00","nextRunOffsetMinutes":0.0,"interval":1,"frequency":"Hour","creationTime":"2020-02-17T11:29:20.4+00:00","lastModifiedTime":"2020-02-17T11:29:20.4+00:00","timeZone":"UTC","advancedSchedule":null}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '761'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:31:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1198'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"properties": {"description": "Updated Description of the Runbook", "logVerbose":
    +      false, "logProgress": true, "logActivityTrace": 1}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '134'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/Get-AzureVMTutorial?api-version=2018-06-30
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/Get-AzureVMTutorial","name":"Get-AzureVMTutorial","type":"Microsoft.Automation/AutomationAccounts/Runbooks","location":"East
    +        US 2","tags":{"tag01":"value01","tag02":"value02"},"etag":"\"637175359114630000\"","properties":{"description":"Updated
    +        Description of the Runbook","logVerbose":false,"logProgress":true,"logActivityTrace":1,"runbookType":"PowerShellWorkflow","parameters":{},"state":"Published","jobCount":0,"provisioningState":"Succeeded","serviceManagementTags":null,"outputTypes":[],"creationTime":"2020-02-17T11:28:59.23+00:00","lastModifiedBy":"{scrubbed}","lastModifiedTime":"2020-02-17T11:31:51.463+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '825'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:31:50 GMT
    +      etag:
    +      - '"637175359114630000"'
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1183'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/jobs/job1/suspend?api-version=2017-05-15-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Mon, 17 Feb 2020 11:31:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1196'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"name": "webhook1", "properties": {"isEnabled": false, "description":
    +      "updated webhook"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '90'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/webhooks/webhook1?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/webhooks/webhook1","name":"webhook1","type":"Microsoft.Automation/AutomationAccounts/Webhooks","properties":{"isEnabled":false,"expiryTime":"2020-03-29T22:18:13.700287+00:00","runbook":{"name":"Get-AzureVMTutorial"},"lastInvokedTime":null,"runOn":null,"parameters":null,"uri":"","creationTime":"2020-02-17T11:29:07.7726796+00:00","lastModifiedBy":"","lastModifiedTime":"2020-02-17T11:32:10.1273403+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '600'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:32:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1186'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"properties": {"contentLink": {"uri": "https://teststorage.blob.core.windows.net/mycontainer/MyModule.zip",
    +      "contentHash": {"algorithm": "sha265", "value": "07E108A962B81DD9C9BAA89BB47C0F6EE52B29E83758B07795E408D258B2B87A"},
    +      "version": "1.0.0.0"}}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '249'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/modules/module1?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/modules/module1","name":"module1","type":"Microsoft.Automation/AutomationAccounts/Modules","location":"East
    +        US 2","tags":{},"etag":null,"properties":{"isGlobal":false,"version":null,"sizeInBytes":0,"activityCount":0,"creationTime":"2020-02-17T11:28:35.177+00:00","lastModifiedTime":"2020-02-17T11:30:49.72+00:00","error":{"code":null,"message":null},"provisioningState":"Creating","isComposite":false}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '596'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:32:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1179'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/jobs/job1/stop?api-version=2017-05-15-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Mon, 17 Feb 2020 11:32:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1197'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/listKeys?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"keys":[{"KeyName":"Primary","Permissions":"Full","Value":"Tiq26MNsfMWNrDEmvhUp+HnN9gybeRS2OG+gbDGImZRMaUQa/2D43ql6/8KLRmmhP9lXN7U5JZAeSXR9gHbCsg=="},{"KeyName":"Secondary","Permissions":"Full","Value":"np7E0HbQfZ7/DfVZ2B5f5Vvjn38M5GNKCT9td1WQxCGelvQOdeMwqgGhsADkj3w/ud7VuuftE9SLk8Bc/jc0HQ=="}]}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '296'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:32:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1196'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"properties": {"sku": {"name": "Free"}}, "name": "myAutomationAccount9",
    +      "location": "East US 2"}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '98'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9?api-version=2015-10-31
    +  response:
    +    body:
    +      string: '{"name":"myAutomationAccount9","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9","type":"Microsoft.Automation/AutomationAccounts","location":"East
    +        US 2","tags":{},"etag":null,"properties":{"sku":{"name":"Basic","family":null,"capacity":null},"state":"Ok","RegistrationUrl":"https://eus2-agentservice-prod-1.azure-automation.net/accounts/40a01d37-3e3a-42c5-9a46-5307a55ea829","creationTime":"2020-02-17T11:28:19.527+00:00","lastModifiedBy":null,"lastModifiedTime":"2020-02-17T11:32:30.61+00:00"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '639'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Mon, 17 Feb 2020 11:32:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1185'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/credentials/myCredential?api-version=2015-10-31
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Mon, 17 Feb 2020 11:32:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14998'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/variables/sampleVariable?api-version=2015-10-31
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Mon, 17 Feb 2020 11:32:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14998'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/schedules/mySchedule?api-version=2015-10-31
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Mon, 17 Feb 2020 11:32:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14998'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/webhooks/webhook1?api-version=2015-10-31
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Mon, 17 Feb 2020 11:32:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14997'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/runbooks/Get-AzureVMTutorial?api-version=2018-06-30
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Mon, 17 Feb 2020 11:32:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14997'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9/modules/module1?api-version=2015-10-31
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Mon, 17 Feb 2020 11:32:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14999'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-automation/0.1.1 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_automation_test_automation53db109a/providers/Microsoft.Automation/automationAccounts/myAutomationAccount9?api-version=2015-10-31
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Mon, 17 Feb 2020 11:34:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14998'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +version: 1
    diff --git a/sdk/automation/azure-mgmt-automation/tests/test_cli_mgmt_automation.py b/sdk/automation/azure-mgmt-automation/tests/test_cli_mgmt_automation.py
    new file mode 100644
    index 000000000000..dcf32cacd245
    --- /dev/null
    +++ b/sdk/automation/azure-mgmt-automation/tests/test_cli_mgmt_automation.py
    @@ -0,0 +1,1027 @@
    +# coding: utf-8
    +
    +#-------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#--------------------------------------------------------------------------
    +
    +
    +# TEST SCENARIO COVERAGE
    +# ----------------------
    +# Methods Total   : 147
    +# Methods Covered : 146
    +# Examples Total  : 167
    +# Examples Tested : 166
    +# Coverage %      : 98.72499898162857
    +# ----------------------
    +
    +# current coverage: 85
    +
    +import unittest
    +
    +import azure.mgmt.automation
    +from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer
    +
    +AZURE_LOCATION = 'eastus'
    +
    +class MgmtAutomationClientTest(AzureMgmtTestCase):
    +
    +    def setUp(self):
    +        super(MgmtAutomationClientTest, self).setUp()
    +        self.mgmt_client = self.create_mgmt_client(
    +            azure.mgmt.automation.AutomationClient
    +        )
    +    
    +    @ResourceGroupPreparer(location=AZURE_LOCATION)
    +    def test_automation(self, resource_group):
    +
    +        SERVICE_NAME = "myapimrndxyz"
    +        AUTOMATION_ACCOUNT_NAME = 'myAutomationAccount9'
    +        JOB_NAME = "job1"
    +        MODULE_NAME = "module1"
    +        WEBHOOK_NAME = "webhook1"
    +        WATCHER_NAME = "MyTestWatcher"
    +        SCHEDULE_NAME = "mySchedule"
    +
    +        # Create or update automation account[put]
    +        BODY = {
    +          "sku": {
    +            "name": "Free"
    +          },
    +          "name": "myAutomationAccount9",
    +          "location": "East US 2"
    +        }
    +        result = self.mgmt_client.automation_account.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, BODY)
    +
    +        RUNBOOK_DRAFT_NAME =  "runbook_draft"
    +        # Create runbook as draft[put]
    +        BODY = {
    +          "log_verbose": False,
    +          "log_progress": False,
    +          "runbook_type": "PowerShellWorkflow",
    +          "draft": {},
    +          "description": "Description of the Runbook",
    +          "name": RUNBOOK_DRAFT_NAME,
    +          "location": "East US 2",
    +          "tags": {
    +            "tag01": "value01",
    +            "tag02": "value02",
    +          }
    +        }
    +        result = self.mgmt_client.runbook.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_DRAFT_NAME, BODY)
    +
    +        # Create or update a module[put]
    +        BODY = {
    +          "content_link": {
    +            "uri": "https://teststorage.blob.core.windows.net/dsccomposite/OmsCompositeResources.zip",
    +            "content_hash": {
    +              "algorithm": "sha265",
    +              "value": "07E108A962B81DD9C9BAA89BB47C0F6EE52B29E83758B07795E408D258B2B87A"
    +            },
    +            "version": "1.0.0.0"
    +          }
    +        }
    +        result = self.mgmt_client.module.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, MODULE_NAME, BODY)
    +
    +        RUNBOOK_NAME =  "Get-AzureVMTutorial"
    +        # Create or update runbook and publish it[put]
    +        BODY = {
    +          "log_verbose": False,
    +          "log_progress": True,
    +          "runbook_type": "PowerShellWorkflow",
    +          "publish_content_link": {
    +            "uri": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/0.0.0.3/101-automation-runbook-getvms/Runbooks/Get-AzureVMTutorial.ps1",
    +            "content_hash": {
    +              "algorithm": "SHA256",
    +              "value": "4fab357cab33adbe9af72ae4b1203e601e30e44de271616e376c08218fd10d1c"
    +            },
    +          },
    +          "description": "Description of the Runbook",
    +          "log_activity_trace": "1",
    +          "name": RUNBOOK_NAME,
    +          "location": "East US 2",
    +          "tags": {
    +            "tag01": "value01",
    +            "tag02": "value02"
    +          }
    +        }
    +        result = self.mgmt_client.runbook.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME, BODY)
    +
    +        # Create job[put]
    +        BODY = {
    +          "runbook": {
    +            "name": RUNBOOK_NAME
    +          },
    +          "parameters": {
    +            "key01": "value01",
    +            "key02": "value02"
    +          },
    +          "run_on": ""
    +        }
    +        result = self.mgmt_client.job.create(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_NAME, BODY)
    +
    +        # Create or update webhook[put]
    +        BODY = {
    +          "name": "TestWebhook",
    +          "is_enabled": True,
    +          "uri": "https://s1events.azure-automation.net/webhooks?token=7u3KfQvM1vUPWaDMFRv2%2fAA4Jqx8QwS8aBuyO6Xsdcw%3d",
    +          "expiry_time": "2020-03-29T22:18:13.7002872Z",
    +          "runbook": {
    +            "name": RUNBOOK_NAME
    +          }
    +        }
    +        result = self.mgmt_client.webhook.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, WEBHOOK_NAME, BODY)
    +
    +        """ TODO: response 500 error
    +        # Create or update watcher[put]
    +        BODY = {
    +          "name": "MyTestWatcher",
    +          "type": None,
    +          "location": None,
    +          "tags": {},
    +          "etag": None,
    +          "execution_frequency_in_seconds": "60",
    +          "script_name": RUNBOOK_NAME,
    +          "description": "This is a test watcher.",
    +          "script_run_on": "MyTestHybridWorkerGroup",
    +          "scriptParameters": None,
    +          "creation_time": "2020-03-01T11:22:47.7333333+00:00",
    +          "lastModifiedBy": None,
    +          "last_modified_time": "2020-03-01T11:22:47.7333333+00:00"
    +        }
    +        result = self.mgmt_client.watcher.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, WATCHER_NAME, BODY)
    +        """
    +
    +        # Create or update a schedule[put]
    +        BODY = {
    +          "name": "mySchedule",
    +          "description": "my description of schedule goes here",
    +          "start_time": "2020-03-27T17:28:57.2494819Z",
    +          "expiry_time": "2020-04-01T17:28:57.2494819Z",
    +          "interval": "1",
    +          "frequency": "Hour"
    +        }
    +        result = self.mgmt_client.schedule.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, SCHEDULE_NAME, BODY)
    +
    +        VARIABLE_NAME = "sampleVariable"
    +        # Create or update a variable[put]
    +        BODY = {
    +          "name": "sampleVariable",
    +          "value": "\"ComputerName.domain.com\"",
    +          "description": "my description",
    +          "is_encrypted": False
    +        }
    +        result = self.mgmt_client.variable.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, VARIABLE_NAME, BODY)
    +
    +        CREDENTIAL_NAME = "myCredential"
    +        # Create a credential[put]
    +        BODY = {
    +          "name": "myCredential",
    +          "user_name": "mylingaiah",
    +          "password": "myPassw0rd",
    +          "description": "my description goes here"
    +        }
    +        result = self.mgmt_client.credential.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, CREDENTIAL_NAME, BODY)
    +
    +        """
    +        CERTIFICATE_NAME = "testCert"
    +        # Create or update a certificate[put]
    +        BODY = {
    +          "name": "testCert",
    +          "base64value": "base 64 value of cert",
    +          "description": "Sample Cert",
    +          "thumbprint": "thumbprint of cert",
    +          "is_exportable": False
    +        }
    +        result = self.mgmt_client.certificate.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, CERTIFICATE_NAME, BODY)
    +
    +        CONNECTION_NAME = "mysConnection"
    +        # Create or update connection[put]
    +        BODY = {
    +          "name": "mysConnection",
    +          "description": "my description goes here",
    +          "connection_type": {
    +            "name": "Azure"
    +          },
    +          "field_definition_values": {
    +            "automation_certificate_name": CERTIFICATE_NAME,
    +            "subscription_id": "subid"
    +          }
    +        }
    +        result = self.mgmt_client.connection.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, CONNECTION_NAME, BODY)
    +
    +        JOB_SCHEDULE_NAME = "ScheduleNameGoesHere332204b5-debe-4348-a5c7-6357457189f2"
    +        # Create a job schedule[put]
    +        BODY = {
    +          "schedule": {
    +            "name": "ScheduleNameGoesHere332204b5-debe-4348-a5c7-6357457189f2"
    +          },
    +          "runbook": {
    +            "name": RUNBOOK_NAME
    +          },
    +          "parameters": {
    +            "jobscheduletag01": "jobschedulevalue01",
    +            "jobscheduletag02": "jobschedulevalue02"
    +          }
    +        }
    +        result = self.mgmt_client.job_schedule.create(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_SCHEDULE_NAME, BODY)
    +
    +        CONFIGURATION_NAME = "SetupServer"
    +        # Create or Update Configuration[put]
    +        BODY = {
    +          "source": {
    +            "hash": {
    +              "algorithm": "sha256",
    +              "value": "A9E5DB56BA21513F61E0B3868816FDC6D4DF5131F5617D7FF0D769674BD5072F"
    +            },
    +            "type": "embeddedContent",
    +            "value": "Configuration SetupServer {\r\n    Node localhost {\r\n                               WindowsFeature IIS {\r\n                               Name = \"Web-Server\";\r\n            Ensure = \"Present\"\r\n        }\r\n    }\r\n}"
    +          },
    +          "description": "sample configuration"
    +          "name": "SetupServer",
    +          "location": "East US 2"
    +        }
    +        result = self.mgmt_client.dsc_configuration.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, CONFIGURATION_NAME, BODY)
    +
    +        SOURCE_CONTROL_NAME = "sourceControl"
    +        # Create or update a source control[put]
    +        BODY = {
    +          "repo_url": "https://sampleUser.visualstudio.com/myProject/_git/myRepository",
    +          "branch": "master",
    +          "folder_path": "/folderOne/folderTwo",
    +          "auto_sync": True,
    +          "publish_runbook": True,
    +          "source_type": "VsoGit",
    +          "security_token": {
    +            "access_token": "3a326f7a0dcd343ea58fee21f2fd5fb4c1234567",
    +            "token_type": "PersonalAccessToken"
    +          },
    +          "description": "my description"
    +        }
    +        result = self.mgmt_client.source_control.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOURCE_CONTROL_NAME, BODY)
    +
    +        PYTHON2PACKAGE_NAME = "pythonPackage"
    +        # Create or update a python 2 package[put]
    +        BODY = {
    +          "content_link": {
    +            "uri": "https://teststorage.blob.core.windows.net/dsccomposite/OmsCompositeResources.zip",
    +            "content_hash": {
    +              "algorithm": "sha265",
    +              "value": "07E108A962B81DD9C9BAA89BB47C0F6EE52B29E83758B07795E408D258B2B87A"
    +            },
    +            "version": "1.0.0.0"
    +          }
    +        }
    +        result = self.mgmt_client.python2package.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, PYTHON2PACKAGE_NAME, BODY)
    +
    +        COMPILATIONJOB_NAME = "compilationJob"
    +        # Create or update a DSC Compilation job[put]
    +        BODY = {
    +          "configuration": {
    +            "name": "SetupServer"
    +          }
    +        }
    +        result = self.mgmt_client.dsc_compilation_job.create(resource_group.name, AUTOMATION_ACCOUNT_NAME, COMPILATIONJOB_NAME, BODY)
    +        result = result.result()
    +
    +        CONNECTION_TYPE_NAME = "myCT"
    +        # Create or update connection type[put]
    +        BODY = {
    +          "name": "myCT",
    +          "is_global": False,
    +          "field_definitions": {
    +            "my_string_field": {
    +              "is_encrypted": False,
    +              "is_optional": False,
    +              "type": "string"
    +            },
    +            "my_bool_field": {
    +              "is_encrypted": False,
    +              "is_optional": False,
    +              "type": "bool"
    +            },
    +            "my_string_field_encrypted": {
    +              "is_encrypted": True,
    +              "is_optional": False,
    +              "type": "string"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.connection_type.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, CONNECTION_TYPE_NAME, BODY)
    +
    +        NODE_CONFIGURATION_NAME = "configName.nodeConfigName"
    +        # Create node configuration[put]
    +        BODY = {
    +          "name": "configName.nodeConfigName",
    +          "source": {
    +            "hash": {
    +              "algorithm": "sha256",
    +              "value": "6DE256A57F01BFA29B88696D5E77A383D6E61484C7686E8DB955FA10ACE9FFE5"
    +            },
    +            "type": "embeddedContent",
    +            "value": "\r\ninstance of MSFT_RoleResource as $MSFT_RoleResource1ref\r\n{\r\nResourceID = \"[WindowsFeature]IIS\";\r\n Ensure = \"Present\";\r\n SourceInfo = \"::3::32::WindowsFeature\";\r\n Name = \"Web-Server\";\r\n ModuleName = \"PsDesiredStateConfiguration\";\r\n\r\nModuleVersion = \"1.0\";\r\r\n ConfigurationName = \"configName\";\r\r\n};\r\ninstance of OMI_ConfigurationDocument\r\n\r\r\n                    {\r\n Version=\"2.0.0\";\r\n \r\r\n                        MinimumCompatibleVersion = \"1.0.0\";\r\n \r\r\n                        CompatibleVersionAdditionalProperties= {\"Omi_BaseResource:ConfigurationName\"};\r\n \r\r\n                        Author=\"weijiel\";\r\n \r\r\n                        GenerationDate=\"03/30/2017 13:40:25\";\r\n \r\r\n                        GenerationHost=\"TEST-BACKEND\";\r\n \r\r\n                        Name=\"configName\";\r\n\r\r\n                    };\r\n",
    +            "version": "1.0"
    +          },
    +          "increment_node_configuration_build": True,
    +          "configuration": {
    +            "name": "configName"
    +          }
    +        }
    +        result = self.mgmt_client.dsc_node_configuration.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, NODE_CONFIGURATION_NAME, BODY)
    +        result = result.result()
    +
    +        DRAFT_NAME = "Get-AzureVMTutorial"
    +        # Create or update runbook draft[put]
    +        result = self.mgmt_client.runbook_draft.replace_content(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME, DRAFT_NAME)
    +        result = result.result()
    +
    +        # Create test job[put]
    +        BODY = {
    +          "key01": "value01",
    +          "key02": "value02"
    +          "run_on": ""
    +        }
    +        result = self.mgmt_client.test_job.create(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME, DRAFT_NAME, BODY)
    +
    +        
    +        SOFTWARE_UPDATE_CONFIGURATION_NAME = "softconfig"
    +        # Create software update configuration[put]
    +        BODY = {
    +          "update_configuration": {
    +            "operating_system": "Windows",
    +            "duration": "PT2H0M",
    +            "windows": {
    +              "excluded_kb_numbers": [
    +                "168934",
    +                "168973"
    +              ],
    +              "included_update_classifications": "Critical",
    +              "reboot_setting": "IfRequired"
    +            },
    +            "azure_virtual_machines": [
    +              "/subscriptions/5ae68d89-69a4-454f-b5ce-e443cc4e0067/resourceGroups/myresources/providers/Microsoft.Compute/virtualMachines/vm-01",
    +              "/subscriptions/5ae68d89-69a4-454f-b5ce-e443cc4e0067/resourceGroups/myresources/providers/Microsoft.Compute/virtualMachines/vm-02",
    +              "/subscriptions/5ae68d89-69a4-454f-b5ce-e443cc4e0067/resourceGroups/myresources/providers/Microsoft.Compute/virtualMachines/vm-03"
    +            ],
    +            "non_azure_computer_names": [
    +              "box1.contoso.com",
    +              "box2.contoso.com"
    +            ],
    +            "targets": {
    +              "azure_queries": [
    +                {
    +                  "scope": [
    +                    "/subscriptions/5ae68d89-69a4-454f-b5ce-e443cc4e0067/resourceGroups/myresources",
    +                    "/subscriptions/5ae68d89-69a4-454f-b5ce-e443cc4e0067"
    +                  ],
    +                  "tag_settings": {
    +                    "tags": [
    +                      {
    +                        "tag1": [
    +                          "tag1Value1",
    +                          "tag1Value2",
    +                          "tag1Value3"
    +                        ]
    +                      },
    +                      {
    +                        "tag2": [
    +                          "tag2Value1",
    +                          "tag2Value2",
    +                          "tag2Value3"
    +                        ]
    +                      }
    +                    ],
    +                    "filter_operator": "All"
    +                  },
    +                  "locations": [
    +                    "Japan East",
    +                    "UK South"
    +                  ]
    +                }
    +              ],
    +              "non_azure_queries": [
    +                {
    +                  "function_alias": "SavedSearch1",
    +                  "workspace_id": "WorkspaceId1"
    +                },
    +                {
    +                  "function_alias": "SavedSearch2",
    +                  "workspace_id": "WorkspaceId2"
    +                }
    +              ]
    +            }
    +          },
    +          "schedule_info": {
    +            "frequency": "Hour",
    +            "start_time": "2017-10-19T12:22:57+00:00",
    +            "time_zone": "America/Los_Angeles",
    +            "interval": "1",
    +            "expiry_time": "2018-11-09T11:22:57+00:00",
    +            "advanced_schedule": {
    +              "week_days": [
    +                "Monday",
    +                "Thursday"
    +              ]
    +            }
    +          },
    +          "tasks": {
    +            "pre_task": {
    +              "source": "HelloWorld",
    +              "parameters": {
    +                "computername": "Computer1"
    +              }
    +            },
    +            "post_task": {
    +              "source": "GetCache"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.software_update_configurations.create(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOFTWARE_UPDATE_CONFIGURATION_NAME, BODY)
    +
    +        SOURCE_CONTROL_SYNC_JOB_NAME = "sourceControlJobName"
    +        # Create or update a source control sync job[put]
    +        BODY = {
    +          "commit_id": "9de0980bfb45026a3d97a1b0522d98a9f604226e"
    +        }
    +        result = self.mgmt_client.source_control_sync_job.create(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOURCE_CONTROL_NAME, SOURCE_CONTROL_SYNC_JOB_NAME, BODY)
    +
    +        # # Get a sync job stream identified by sync job stream id.[get]
    +        # result = self.mgmt_client.source_control_sync_job_streams.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOURCE_CONTROL_NAME, SOURCE_CONTROL_SYNC_JOB_NAME, STREAM_NAME)
    +
    +        # Get a list of sync job streams identified by sync job id[get]
    +        result = self.mgmt_client.source_control_sync_job_streams.list_by_sync_job(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOURCE_CONTROL_NAME, SOURCE_CONTROL_SYNC_JOB_NAME)
    +
    +        # Get a source control sync job by job id[get]
    +        result = self.mgmt_client.source_control_sync_job.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOURCE_CONTROL_NAME, SOURCE_CONTROL_SYNC_JOB_NAME)
    +
    +        # # Get software update configuration machine run[get]
    +        # result = self.mgmt_client.software_update_configuration_machine_runs.get_by_id(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOFTWARE_UPDATE_CONFIGURATION_MACHINE_RUN_NAME)
    +
    +        # # Get test job stream[get]
    +        # result = self.mgmt_client.test_job_streams.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME, DRAFT_NAME, STREAM_NAME)
    +
    +        # # Get software update configuration runs by Id[get]
    +        # result = self.mgmt_client.software_update_configuration_runs.get_by_id(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOFTWARE_UPDATE_CONFIGURATION_RUN_NAME)
    +
    +        # # Get a list of fields of a given type[get]
    +        # result = self.mgmt_client.object_data_types.list_fields_by_module_and_type(resource_group.name, AUTOMATION_ACCOUNT_NAME, MODULE_NAME, OBJECT_DATA_TYPE_NAME)
    +
    +        # Get software update configuration by name[get]
    +        result = self.mgmt_client.software_update_configurations.get_by_name(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOFTWARE_UPDATE_CONFIGURATION_NAME)
    +
    +        # # Get a DSC Compilation job stream by job stream id[get]
    +        # result = self.mgmt_client.dsc_compilation_job.get_stream(resource_group.name, AUTOMATION_ACCOUNT_NAME, COMPILATIONJOB_NAME, STREAM_NAME)
    +
    +        # # Get a hybrid worker group[get]
    +        # result = self.mgmt_client.hybrid_runbook_worker_group.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, HYBRID_RUNBOOK_WORKER_GROUP_NAME)
    +
    +        # Get a list of source control sync jobs[get]
    +        result = self.mgmt_client.source_control_sync_job.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOURCE_CONTROL_NAME)
    +        """
    +
    +        # List job streams by job name[get]
    +        result = self.mgmt_client.job_stream.list_by_job(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_NAME)
    +
    +        """
    +        # # Get Activity in a module[get]
    +        # result = self.mgmt_client.activity.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, MODULE_NAME, ACTIVITY_NAME)
    +
    +        # # Get content of node[get]
    +        # result = self.mgmt_client.node_reports.get_content(resource_group.name, AUTOMATION_ACCOUNT_NAME, NODE_NAME, REPORT_NAME)
    +
    +        # # Get a list of fields of a given type[get]
    +        # result = self.mgmt_client.object_data_types.list_fields_by_module_and_type(resource_group.name, AUTOMATION_ACCOUNT_NAME, MODULE_NAME, OBJECT_DATA_TYPE_NAME)
    +
    +        # # Get a list of fields of a given type across all accessible modules[get]
    +        # result = self.mgmt_client.object_data_types.list_fields_by_type(resource_group.name, AUTOMATION_ACCOUNT_NAME, OBJECT_DATA_TYPE_NAME)
    +
    +        # Get runbook draft content[get]
    +        result = self.mgmt_client.runbook_draft.get_content(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME, DRAFT_NAME)
    +
    +        # # Get test job[get]
    +        # result = self.mgmt_client.test_job.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME, DRAFT_NAME)
    +
    +        # List DSC Compilation job streams[get]
    +        result = self.mgmt_client.dsc_compilation_job_stream.list_by_job(resource_group.name, AUTOMATION_ACCOUNT_NAME, COMPILATIONJOB_NAME)
    +
    +        # Get a DSC node configuration[get]
    +        result = self.mgmt_client.dsc_node_configuration.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, NODE_CONFIGURATION_NAME)
    +
    +        # Get DSC Configuration content[get]
    +        result = self.mgmt_client.dsc_configuration.get_content(resource_group.name, AUTOMATION_ACCOUNT_NAME, CONFIGURATION_NAME)
    +
    +        # # Get job stream[get]
    +        # result = self.mgmt_client.job_stream.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_NAME, STREAM_NAME)
    +
    +        # Get connection type[get]
    +        result = self.mgmt_client.connection_type.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, CONNECTION_TYPE_NAME)
    +
    +        # Get a DSC Compilation job[get]
    +        result = self.mgmt_client.dsc_compilation_job.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, COMPILATIONJOB_NAME)
    +
    +        # Get a python 2 package[get]
    +        result = self.mgmt_client.python2package.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, PYTHON2PACKAGE_NAME)
    +
    +        # Get a source control[get]
    +        result = self.mgmt_client.source_control.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOURCE_CONTROL_NAME)
    +
    +        # Get a DSC Configuration[get]
    +        result = self.mgmt_client.dsc_configuration.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, CONFIGURATION_NAME)
    +        """
    +
    +        # List software update configuration machine runs for a specific software update configuration run[get]
    +        result = self.mgmt_client.software_update_configuration_machine_runs.list(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List software update configuration machine runs[get]
    +        result = self.mgmt_client.software_update_configuration_runs.list(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List activities by a module[get]
    +        result = self.mgmt_client.activity.list_by_module(resource_group.name, AUTOMATION_ACCOUNT_NAME, MODULE_NAME)
    +
    +        """
    +        # Get a job schedule[get]
    +        result = self.mgmt_client.job_schedule.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_SCHEDULE_NAME)
    +        """
    +
    +        # Get runbook content[get]
    +        result = self.mgmt_client.runbook.get_content(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME)
    +
    +        """
    +        # Get a certificate[get]
    +        result = self.mgmt_client.certificate.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, CERTIFICATE_NAME)
    +        """
    +
    +        # Get Job Runbook Content[get]
    +        result = self.mgmt_client.job.get_runbook_content(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_NAME)
    +
    +        # Get runbook draft[get]
    +        result = self.mgmt_client.runbook_draft.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_DRAFT_NAME)
    +
    +        """
    +        # Get a connection[get]
    +        result = self.mgmt_client.connection.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, CONNECTION_NAME)
    +        """
    +
    +        # Get a credential[get]
    +        result = self.mgmt_client.credential.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, CREDENTIAL_NAME)
    +
    +        """
    +        # # Get node's status counts[get]
    +        # result = self.mgmt_client.node_count_information.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, NODECOUNT_NAME)
    +
    +        # # Get node's node configuration counts[get]
    +        # result = self.mgmt_client.node_count_information.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, NODECOUNT_NAME)
    +        """
    +
    +        # List software update configuration machine run with status equal to 'Failed'[get]
    +        result = self.mgmt_client.software_update_configuration_runs.list(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List software update configuration machine runs[get]
    +        result = self.mgmt_client.software_update_configuration_runs.list(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # # List DSC reports by node id.[get]
    +        # result = self.mgmt_client.node_reports.list_by_node(resource_group.name, AUTOMATION_ACCOUNT_NAME, NODE_NAME)
    +
    +        # Get a variable[get]
    +        result = self.mgmt_client.variable.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, VARIABLE_NAME)
    +
    +        # Get a schedule[get]
    +        result = self.mgmt_client.schedule.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, SCHEDULE_NAME)
    +
    +        """
    +        # Get the agent registration information[get]
    +        result = self.mgmt_client.agent_registration_information.get(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List software update configurations Targeting a specific azure virtual machine[get]
    +        result = self.mgmt_client.software_update_configurations.list(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List software update configurations[get]
    +        result = self.mgmt_client.software_update_configurations.list(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +        """
    +
    +        # Get runbook[get]
    +        result = self.mgmt_client.runbook.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME)
    +
    +        # List job streams by job name[get]
    +        result = self.mgmt_client.job_stream.list_by_job(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_NAME)
    +
    +        """
    +        # Get watcher[get]
    +        result = self.mgmt_client.watcher.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, WATCHER_NAME)
    +        """
    +
    +        # Get webhook[get]
    +        result = self.mgmt_client.webhook.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, WEBHOOK_NAME)
    +
    +        # Get Job Output[get]
    +        result = self.mgmt_client.job.get_output(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_NAME)
    +
    +        """
    +        # List hybrid worker groups by Automation Account[get]
    +        result = self.mgmt_client.hybrid_runbook_worker_group.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +        """
    +
    +        # Get a module[get]
    +        result = self.mgmt_client.module.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, MODULE_NAME)
    +
    +        """
    +        # # Get a node[get]
    +        # result = self.mgmt_client.dsc_node.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, NODE_NAME)
    +        """
    +
    +        # Get job[get]
    +        result = self.mgmt_client.job.get(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_NAME)
    +
    +        # List Paged DSC node configurations by Automation Account with name filter[get]
    +        result = self.mgmt_client.dsc_node_configuration.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List DSC node configurations by Automation Account[get]
    +        result = self.mgmt_client.dsc_node_configuration.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List Paged DSC node configurations by Automation Account with no filter[get]
    +        result = self.mgmt_client.dsc_node_configuration.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # TODO: AttributeError: 'AutomationClient' object has no attribute 'python2package'
    +        # # List python 2 packages by automation account[get]
    +        # result = self.mgmt_client.python2package.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # Get connection types, first 100[get]
    +        result = self.mgmt_client.connection_type.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List DSC Compilation job in Automation Account[get]
    +        result = self.mgmt_client.dsc_compilation_job.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # Get connection types, next 100[get]
    +        result = self.mgmt_client.connection_type.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # Get the linked workspace of an automation account[get]
    +        result = self.mgmt_client.linked_workspace.get(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # Get DSC Configuration[get]
    +        result = self.mgmt_client.dsc_configuration.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List Paged DSC Configurations with name filter[get]
    +        result = self.mgmt_client.dsc_configuration.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List sourceControls[get]
    +        result = self.mgmt_client.source_control.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List Paged DSC Configurations with no filter[get]
    +        result = self.mgmt_client.dsc_configuration.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List certificates[get]
    +        result = self.mgmt_client.certificate.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List all job schedules by automation account[get]
    +        result = self.mgmt_client.job_schedule.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List credentials by automation account, next 100[get]
    +        result = self.mgmt_client.credential.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List credentials by automation account, first 100[get]
    +        result = self.mgmt_client.credential.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List connections by automation account, next 100[get]
    +        result = self.mgmt_client.connection.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List connections by automation account, first 100[get]
    +        result = self.mgmt_client.connection.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # Get statistics of an automation account[get]
    +        result = self.mgmt_client.statistics.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List variables, First 100[get]
    +        result = self.mgmt_client.variable.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List variables, Next 100[get]
    +        result = self.mgmt_client.variable.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List schedules by automation account, first 100[get]
    +        result = self.mgmt_client.schedule.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List schedules by automation account, next 100[get]
    +        result = self.mgmt_client.schedule.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List watchers by Automation Account[get]
    +        result = self.mgmt_client.watcher.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List runbooks by automation account[get]
    +        result = self.mgmt_client.runbook.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List webhooks by Automation Account[get]
    +        result = self.mgmt_client.webhook.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List modules by automation account[get]
    +        result = self.mgmt_client.module.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # Get usages of an automation account[get]
    +        result = self.mgmt_client.usages.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List Paged DSC nodes by Automation Account with version filter[get]
    +        result = self.mgmt_client.dsc_node.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List Paged DSC nodes by Automation Account with name filter[get]
    +        result = self.mgmt_client.dsc_node.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List Paged DSC nodes by Automation Account with no filters[get]
    +        result = self.mgmt_client.dsc_node.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List DSC nodes by Automation Account[get]
    +        result = self.mgmt_client.dsc_node.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List Paged DSC nodes by Automation Account with node status filter[get]
    +        result = self.mgmt_client.dsc_node.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List Paged DSC nodes by Automation Account with Node Configuration Custom filter[get]
    +        result = self.mgmt_client.dsc_node.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List Paged DSC nodes by Automation Account where Node Configurations are not assigned filter[get]
    +        result = self.mgmt_client.dsc_node.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List Paged DSC nodes with filters separated by 'and'[get]
    +        result = self.mgmt_client.dsc_node.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List jobs by automation account[get]
    +        result = self.mgmt_client.job.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # Get automation account[get]
    +        result = self.mgmt_client.automation_account.get(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # List automation accounts by resource group[get]
    +        result = self.mgmt_client.automation_account.list_by_resource_group(resource_group.name)
    +
    +        # List automation accounts by resource group[get]
    +        result = self.mgmt_client.automation_account.list_by_resource_group(resource_group.name)
    +
    +        """
    +        # # Regenerate registration key[post]
    +        # BODY = {
    +        #   "key_name": "primary"
    +        # }
    +        # result = self.mgmt_client.agent_registration_information.regenerate_key(resource_group.name, AUTOMATION_ACCOUNT_NAME, AGENT_REGISTRATION_INFORMATION_NAME, BODY)
    +
    +        # # Update hybrid worker group[patch]
    +        # BODY = {
    +        #   "credential": {
    +        #     "name": "myRunAsCredentialName"
    +        #   }
    +        # }
    +        # result = self.mgmt_client.hybrid_runbook_worker_group.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, HYBRID_RUNBOOK_WORKER_GROUP_NAME, BODY)
    +
    +        # Suspend test job[post]
    +        result = self.mgmt_client.test_job.suspend(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME, DRAFT_NAME)
    +
    +        # Resume test job[post]
    +        result = self.mgmt_client.test_job.resume(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME, DRAFT_NAME)
    +
    +        # Stop test job[post]
    +        result = self.mgmt_client.test_job.stop(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME, DRAFT_NAME)
    +
    +        # Undo draft edit to last known published state[post]
    +        result = self.mgmt_client.runbook_draft.undo_edit(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME, DRAFT_NAME)
    +        """
    +
    +        # Update a module[patch]
    +        BODY = {
    +          "content_link": {
    +            "uri": "https://teststorage.blob.core.windows.net/mycontainer/MyModule.zip",
    +            "content_hash": {
    +              "algorithm": "sha265",
    +              "value": "07E108A962B81DD9C9BAA89BB47C0F6EE52B29E83758B07795E408D258B2B87A"
    +            },
    +            "version": "1.0.0.0"
    +          }
    +        }
    +        result = self.mgmt_client.module.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, MODULE_NAME, BODY)
    +
    +        """
    +        # Update a source control[patch]
    +        BODY = {
    +          "branch": "master",
    +          "folder_path": "/folderOne/folderTwo",
    +          "auto_sync": True,
    +          "publish_runbook": True,
    +          "security_token": {
    +            "access_token": "3a326f7a0dcd343ea58fee21f2fd5fb4c1234567",
    +            "token_type": "PersonalAccessToken"
    +          },
    +          "description": "my description"
    +        }
    +        result = self.mgmt_client.source_control.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOURCE_CONTROL_NAME, BODY)
    +
    +        # Create or Update Configuration[put]
    +        BODY = {
    +          "source": {
    +            "hash": {
    +              "algorithm": "sha256",
    +              "value": "A9E5DB56BA21513F61E0B3868816FDC6D4DF5131F5617D7FF0D769674BD5072F"
    +            },
    +            "type": "embeddedContent",
    +            "value": "Configuration SetupServer {\r\n    Node localhost {\r\n                               WindowsFeature IIS {\r\n                               Name = \"Web-Server\";\r\n            Ensure = \"Present\"\r\n        }\r\n    }\r\n}"
    +          },
    +          "description": "sample configuration",
    +          "name": "SetupServer",
    +          "location": "East US 2"
    +        }
    +        result = self.mgmt_client.dsc_configuration.create_or_update(resource_group.name, AUTOMATION_ACCOUNT_NAME, CONFIGURATION_NAME, BODY)
    +
    +        # Update a certificate[patch]
    +        BODY = {
    +          "name": "testCert",
    +          "properties": {
    +            "description": "sample certificate. Description updated"
    +          }
    +        }
    +        result = self.mgmt_client.certificate.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, CERTIFICATE_NAME, BODY)
    +        """
    +
    +        # Publish runbook draft[post]
    +        result = self.mgmt_client.runbook.publish(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_DRAFT_NAME)
    +        result = result.result()
    +
    +        # Update a credential[patch]
    +        BODY = {
    +          "name": "myCredential",
    +          "user_name": "mylingaiah",
    +          "password": "myPassw0rd3",
    +          "description": "my description goes here"
    +        }
    +        result = self.mgmt_client.credential.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, CREDENTIAL_NAME, BODY)
    +
    +        """
    +        # Update a connection[patch]
    +        BODY = {
    +          "name": "myConnection",
    +          "description": "my description goes here",
    +          "field_definition_values": {
    +            "automation_certificate_name": "myCertificateName",
    +            "subscription_id": "b5e4748c-f69a-467c-8749-e2f9c8cd3009"
    +          }
    +        }
    +        result = self.mgmt_client.connection.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, CONNECTION_NAME, BODY)
    +
    +        # Start Watcher[post]
    +        result = self.mgmt_client.watcher.start(resource_group.name, AUTOMATION_ACCOUNT_NAME, WATCHER_NAME)
    +
    +        # Start Watcher[post]
    +        result = self.mgmt_client.watcher.start(resource_group.name, AUTOMATION_ACCOUNT_NAME, WATCHER_NAME)
    +        """
    +
    +        # Update a variable[patch]
    +        BODY = {
    +          "name": "sampleVariable",
    +          "properties": {
    +            "value": "\"ComputerName3.domain.com\""
    +          }
    +        }
    +        result = self.mgmt_client.variable.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, VARIABLE_NAME, BODY)
    +
    +        # Update a schedule[patch]
    +        BODY = {
    +          "name": "mySchedule",
    +          "description": "my updated description of schedule goes here",
    +          "is_enabled": False
    +        }
    +        result = self.mgmt_client.schedule.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, SCHEDULE_NAME, BODY)
    +
    +        # Update runbook[patch]
    +        BODY = {
    +          "description": "Updated Description of the Runbook",
    +          "log_verbose": False,
    +          "log_progress": True,
    +          "log_activity_trace": "1"
    +        }
    +        result = self.mgmt_client.runbook.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME, BODY)
    +
    +        """
    +        # Update watcher[patch]
    +        BODY = {
    +          "name": "MyTestWatcher",
    +          "execution_frequency_in_seconds": "600"
    +        }
    +        result = self.mgmt_client.watcher.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, WATCHER_NAME, BODY)
    +        """
    +
    +        # Suspend job[post]
    +        result = self.mgmt_client.job.suspend(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_NAME)
    +
    +        # Update webhook[patch]
    +        BODY = {
    +          "name": WEBHOOK_NAME,
    +          "is_enabled": False,
    +          "description": "updated webhook"
    +        }
    +        result = self.mgmt_client.webhook.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, WEBHOOK_NAME, BODY)
    +
    +        """
    +        # Generate webhook uri[post]
    +        result = self.mgmt_client.webhook.generate_uri(resource_group.name, AUTOMATION_ACCOUNT_NAME, WEBHOOK_NAME)
    +
    +        # Resume job[post]
    +        result = self.mgmt_client.job.resume(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_NAME)
    +        """
    +
    +        # Update a module[patch]
    +        BODY = {
    +          "content_link": {
    +            "uri": "https://teststorage.blob.core.windows.net/mycontainer/MyModule.zip",
    +            "content_hash": {
    +              "algorithm": "sha265",
    +              "value": "07E108A962B81DD9C9BAA89BB47C0F6EE52B29E83758B07795E408D258B2B87A"
    +            },
    +            "version": "1.0.0.0"
    +          }
    +        }
    +        result = self.mgmt_client.module.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, MODULE_NAME, BODY)
    +
    +        # Stop job[post]
    +        result = self.mgmt_client.job.stop(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_NAME)
    +
    +        """
    +        # Update a node[patch]
    +        BODY = {
    +          "node_id": "nodeId",
    +          "node_configuration": {
    +            "name": "SetupServer.localhost"
    +          }
    +        }
    +        result = self.mgmt_client.dsc_node.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, NODE_NAME, BODY)
    +        """
    +
    +        # Get lists of an automation account[post]
    +        result = self.mgmt_client.keys.list_by_automation_account(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +        # Update an automation account[patch]
    +        BODY = {
    +          "sku": {
    +            "name": "Free"
    +          },
    +          "name": "myAutomationAccount9",
    +          "location": "East US 2"
    +        }
    +        result = self.mgmt_client.automation_account.update(resource_group.name, AUTOMATION_ACCOUNT_NAME, BODY)
    +
    +        """
    +        # # Delete software update configuration[delete]
    +        # result = self.mgmt_client.software_update_configurations.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOFTWARE_UPDATE_CONFIGURATION_NAME)
    +
    +        # # Delete a hybrid worker group[delete]
    +        # result = self.mgmt_client.hybrid_runbook_worker_group.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, HYBRID_RUNBOOK_WORKER_GROUP_NAME)
    +
    +        # # Delete a DSC node configuration[delete]
    +        # result = self.mgmt_client.dsc_node_configuration.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, NODE_CONFIGURATION_NAME)
    +
    +        # Delete an existing connection type[delete]
    +        result = self.mgmt_client.connection_type.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, CONNECTION_TYPE_NAME)
    +
    +        # Delete a python 2 package[delete]
    +        result = self.mgmt_client.python2package.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, PYTHON2PACKAGE_NAME)
    +
    +        # Delete a source control[delete]
    +        result = self.mgmt_client.source_control.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, SOURCE_CONTROL_NAME)
    +
    +        # Delete DSC Configuration[delete]
    +        result = self.mgmt_client.dsc_configuration.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, CONFIGURATION_NAME)
    +
    +        # Delete a job schedule[delete]
    +        result = self.mgmt_client.job_schedule.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, JOB_SCHEDULE_NAME)
    +
    +        # Delete an existing connection[delete]
    +        result = self.mgmt_client.connection.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, CONNECTION_NAME)
    +
    +        # Delete a certificate[delete]
    +        result = self.mgmt_client.certificate.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, CERTIFICATE_NAME)
    +        """
    +
    +        # Delete a credential[delete]
    +        result = self.mgmt_client.credential.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, CREDENTIAL_NAME)
    +
    +        # Delete a variable[delete]
    +        result = self.mgmt_client.variable.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, VARIABLE_NAME)
    +
    +        # Delete schedule[delete]
    +        result = self.mgmt_client.schedule.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, SCHEDULE_NAME)
    +
    +        # Delete webhook[delete]
    +        result = self.mgmt_client.webhook.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, WEBHOOK_NAME)
    +
    +        # Delete a runbook[delete]
    +        result = self.mgmt_client.runbook.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, RUNBOOK_NAME)
    +
    +        # # Delete watcher[delete]
    +        # result = self.mgmt_client.watcher.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, WATCHER_NAME)
    +
    +        # Delete a module[delete]
    +        result = self.mgmt_client.module.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, MODULE_NAME)
    +
    +        # # Delete a DSC Node[delete]
    +        # result = self.mgmt_client.dsc_node.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME, NODE_NAME)
    +
    +        # Delete automation account[delete]
    +        result = self.mgmt_client.automation_account.delete(resource_group.name, AUTOMATION_ACCOUNT_NAME)
    +
    +
    +#------------------------------------------------------------------------------
    +if __name__ == '__main__':
    +    unittest.main()
    diff --git a/sdk/batch/azure-mgmt-batch/README.md b/sdk/batch/azure-mgmt-batch/README.md
    index a6085ef9a6a9..e895f55e3899 100644
    --- a/sdk/batch/azure-mgmt-batch/README.md
    +++ b/sdk/batch/azure-mgmt-batch/README.md
    @@ -26,4 +26,4 @@ If you encounter any bugs or have suggestions, please file an issue in
     the [Issues](https://github.com/Azure/azure-sdk-for-python/issues)
     section of the project.
     
    -![image](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-batch%2FREADME.png)
    +![image](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-batch%2FREADME.png)
    \ No newline at end of file
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/CHANGELOG.md b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/CHANGELOG.md
    index 40d642acd031..1d14ea04c7a3 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/CHANGELOG.md
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/CHANGELOG.md
    @@ -1,5 +1,15 @@
     # Release History
     
    +## 0.2.0 (2020-03-17)
    +
    +**Features**
    +
    +- New client `QnAMakerRuntimeClient` in `azure.cognitiveservices.knowledge.qnamaker.runtime`
    +
    +**Breaking changes**
    +
    +- The `QnAMakerClient` client moved from namespace `azure.cognitiveservices.knowledge.qnamaker` to `azure.cognitiveservices.knowledge.qnamaker.authoring`
    +
     ## 0.1.0 (2018-12-21)
     
     * Initial Release
    \ No newline at end of file
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/README.md b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/README.md
    index 4798bb586f2b..e35ac41271bf 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/README.md
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/README.md
    @@ -1,22 +1,21 @@
    -## Microsoft Azure SDK for Python
    +# Microsoft Azure SDK for Python
     
     This is the Microsoft Azure QnA Maker Client Library.
    +This package has been tested with Python 2.7, 3.5, 3.6, 3.7 and 3.8.
    +For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/)
     
    -This package has been tested with Python 2.7, 3.4, 3.5, 3.6 and 3.7.
     
    -For a more complete set of Azure libraries, see the
    -[azure](https://pypi.python.org/pypi/azure) bundle package.
    +# Usage
     
    -## Usage
    -
    -For code examples, see [QnA
    -Maker](https://docs.microsoft.com/python/api/overview/azure/cognitive-services)
    +For code examples, see [QnA Maker](https://docs.microsoft.com/python/api/overview/azure/cognitive-services)
     on docs.microsoft.com.
     
    -## Provide Feedback
     
    -If you encounter any bugs or have suggestions, please file an issue in
    -the [Issues](https://github.com/Azure/azure-sdk-for-python/issues)
    +# Provide Feedback
    +
    +If you encounter any bugs or have suggestions, please file an issue in the
    +[Issues](https://github.com/Azure/azure-sdk-for-python/issues)
     section of the project.
     
    -![image](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-cognitiveservices-knowledge-qnamaker%2FREADME.png)
    +
    +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-cognitiveservices-knowledge-qnamaker%2FREADME.png)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/__init__.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/__init__.py
    index 1b5232d238e3..2db0affab3be 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/__init__.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/__init__.py
    @@ -8,11 +8,7 @@
     # Changes may cause incorrect behavior and will be lost if the code is
     # regenerated.
     # --------------------------------------------------------------------------
    -
    -from .qn_amaker_client import QnAMakerClient
     from .version import VERSION
     
    -__all__ = ['QnAMakerClient']
     
     __version__ = VERSION
    -
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/__init__.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/__init__.py
    new file mode 100644
    index 000000000000..1b5232d238e3
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/__init__.py
    @@ -0,0 +1,18 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .qn_amaker_client import QnAMakerClient
    +from .version import VERSION
    +
    +__all__ = ['QnAMakerClient']
    +
    +__version__ = VERSION
    +
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/__init__.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/__init__.py
    similarity index 77%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/__init__.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/__init__.py
    index b204c1cef2bf..2b0cd8aa1e1f 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/__init__.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/__init__.py
    @@ -16,18 +16,24 @@
         from .update_kb_operation_dto_py3 import UpdateKbOperationDTO
         from .update_qna_dto_questions_py3 import UpdateQnaDTOQuestions
         from .update_qna_dto_metadata_py3 import UpdateQnaDTOMetadata
    +    from .update_qna_dto_context_py3 import UpdateQnaDTOContext
         from .update_qna_dto_py3 import UpdateQnaDTO
         from .update_kb_contents_dto_py3 import UpdateKbContentsDTO
         from .update_questions_dto_py3 import UpdateQuestionsDTO
         from .metadata_dto_py3 import MetadataDTO
         from .update_metadata_dto_py3 import UpdateMetadataDTO
    +    from .prompt_dto_qna_py3 import PromptDTOQna
    +    from .prompt_dto_py3 import PromptDTO
    +    from .update_context_dto_py3 import UpdateContextDTO
         from .delete_kb_contents_dto_py3 import DeleteKbContentsDTO
    +    from .qn_adto_context_py3 import QnADTOContext
         from .qn_adto_py3 import QnADTO
         from .file_dto_py3 import FileDTO
         from .create_kb_input_dto_py3 import CreateKbInputDTO
         from .qn_adocuments_dto_py3 import QnADocumentsDTO
         from .create_kb_dto_py3 import CreateKbDTO
         from .replace_kb_dto_py3 import ReplaceKbDTO
    +    from .context_dto_py3 import ContextDTO
         from .error_response_error_py3 import ErrorResponseError
         from .error_response_py3 import ErrorResponse, ErrorResponseException
         from .inner_error_model_py3 import InnerErrorModel
    @@ -35,6 +41,9 @@
         from .operation_py3 import Operation
         from .knowledgebase_dto_py3 import KnowledgebaseDTO
         from .knowledgebases_dto_py3 import KnowledgebasesDTO
    +    from .endpoint_settings_dto_active_learning_py3 import EndpointSettingsDTOActiveLearning
    +    from .endpoint_settings_dto_py3 import EndpointSettingsDTO
    +    from .active_learning_settings_dto_py3 import ActiveLearningSettingsDTO
         from .alterations_dto_py3 import AlterationsDTO
         from .word_alterations_dto_py3 import WordAlterationsDTO
         from .endpoint_keys_dto_py3 import EndpointKeysDTO
    @@ -45,18 +54,24 @@
         from .update_kb_operation_dto import UpdateKbOperationDTO
         from .update_qna_dto_questions import UpdateQnaDTOQuestions
         from .update_qna_dto_metadata import UpdateQnaDTOMetadata
    +    from .update_qna_dto_context import UpdateQnaDTOContext
         from .update_qna_dto import UpdateQnaDTO
         from .update_kb_contents_dto import UpdateKbContentsDTO
         from .update_questions_dto import UpdateQuestionsDTO
         from .metadata_dto import MetadataDTO
         from .update_metadata_dto import UpdateMetadataDTO
    +    from .prompt_dto_qna import PromptDTOQna
    +    from .prompt_dto import PromptDTO
    +    from .update_context_dto import UpdateContextDTO
         from .delete_kb_contents_dto import DeleteKbContentsDTO
    +    from .qn_adto_context import QnADTOContext
         from .qn_adto import QnADTO
         from .file_dto import FileDTO
         from .create_kb_input_dto import CreateKbInputDTO
         from .qn_adocuments_dto import QnADocumentsDTO
         from .create_kb_dto import CreateKbDTO
         from .replace_kb_dto import ReplaceKbDTO
    +    from .context_dto import ContextDTO
         from .error_response_error import ErrorResponseError
         from .error_response import ErrorResponse, ErrorResponseException
         from .inner_error_model import InnerErrorModel
    @@ -64,11 +79,13 @@
         from .operation import Operation
         from .knowledgebase_dto import KnowledgebaseDTO
         from .knowledgebases_dto import KnowledgebasesDTO
    +    from .endpoint_settings_dto_active_learning import EndpointSettingsDTOActiveLearning
    +    from .endpoint_settings_dto import EndpointSettingsDTO
    +    from .active_learning_settings_dto import ActiveLearningSettingsDTO
         from .alterations_dto import AlterationsDTO
         from .word_alterations_dto import WordAlterationsDTO
         from .endpoint_keys_dto import EndpointKeysDTO
     from .qn_amaker_client_enums import (
    -    KnowledgebaseEnvironmentType,
         ErrorCodeType,
         OperationStateType,
         EnvironmentType,
    @@ -81,18 +98,24 @@
         'UpdateKbOperationDTO',
         'UpdateQnaDTOQuestions',
         'UpdateQnaDTOMetadata',
    +    'UpdateQnaDTOContext',
         'UpdateQnaDTO',
         'UpdateKbContentsDTO',
         'UpdateQuestionsDTO',
         'MetadataDTO',
         'UpdateMetadataDTO',
    +    'PromptDTOQna',
    +    'PromptDTO',
    +    'UpdateContextDTO',
         'DeleteKbContentsDTO',
    +    'QnADTOContext',
         'QnADTO',
         'FileDTO',
         'CreateKbInputDTO',
         'QnADocumentsDTO',
         'CreateKbDTO',
         'ReplaceKbDTO',
    +    'ContextDTO',
         'ErrorResponseError',
         'ErrorResponse', 'ErrorResponseException',
         'InnerErrorModel',
    @@ -100,10 +123,12 @@
         'Operation',
         'KnowledgebaseDTO',
         'KnowledgebasesDTO',
    +    'EndpointSettingsDTOActiveLearning',
    +    'EndpointSettingsDTO',
    +    'ActiveLearningSettingsDTO',
         'AlterationsDTO',
         'WordAlterationsDTO',
         'EndpointKeysDTO',
    -    'KnowledgebaseEnvironmentType',
         'ErrorCodeType',
         'OperationStateType',
         'EnvironmentType',
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/active_learning_settings_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/active_learning_settings_dto.py
    new file mode 100644
    index 000000000000..8290efe090a0
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/active_learning_settings_dto.py
    @@ -0,0 +1,28 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class ActiveLearningSettingsDTO(Model):
    +    """Active Learning settings of the endpoint.
    +
    +    :param enable: True/False string providing Active Learning
    +    :type enable: str
    +    """
    +
    +    _attribute_map = {
    +        'enable': {'key': 'enable', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ActiveLearningSettingsDTO, self).__init__(**kwargs)
    +        self.enable = kwargs.get('enable', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/active_learning_settings_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/active_learning_settings_dto_py3.py
    new file mode 100644
    index 000000000000..ab33348de262
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/active_learning_settings_dto_py3.py
    @@ -0,0 +1,28 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class ActiveLearningSettingsDTO(Model):
    +    """Active Learning settings of the endpoint.
    +
    +    :param enable: True/False string providing Active Learning
    +    :type enable: str
    +    """
    +
    +    _attribute_map = {
    +        'enable': {'key': 'enable', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enable: str=None, **kwargs) -> None:
    +        super(ActiveLearningSettingsDTO, self).__init__(**kwargs)
    +        self.enable = enable
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/alterations_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/alterations_dto.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/alterations_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/alterations_dto.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/alterations_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/alterations_dto_py3.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/alterations_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/alterations_dto_py3.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/context_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/context_dto.py
    new file mode 100644
    index 000000000000..5cacb84f39a0
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/context_dto.py
    @@ -0,0 +1,41 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class ContextDTO(Model):
    +    """Context associated with Qna.
    +
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    :param prompts: List of prompts associated with the answer.
    +    :type prompts:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.PromptDTO]
    +    """
    +
    +    _validation = {
    +        'prompts': {'max_items': 20},
    +    }
    +
    +    _attribute_map = {
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +        'prompts': {'key': 'prompts', 'type': '[PromptDTO]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ContextDTO, self).__init__(**kwargs)
    +        self.is_context_only = kwargs.get('is_context_only', None)
    +        self.prompts = kwargs.get('prompts', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/context_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/context_dto_py3.py
    new file mode 100644
    index 000000000000..78c451d0da9e
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/context_dto_py3.py
    @@ -0,0 +1,41 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class ContextDTO(Model):
    +    """Context associated with Qna.
    +
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    :param prompts: List of prompts associated with the answer.
    +    :type prompts:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.PromptDTO]
    +    """
    +
    +    _validation = {
    +        'prompts': {'max_items': 20},
    +    }
    +
    +    _attribute_map = {
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +        'prompts': {'key': 'prompts', 'type': '[PromptDTO]'},
    +    }
    +
    +    def __init__(self, *, is_context_only: bool=None, prompts=None, **kwargs) -> None:
    +        super(ContextDTO, self).__init__(**kwargs)
    +        self.is_context_only = is_context_only
    +        self.prompts = prompts
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/create_kb_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/create_kb_dto.py
    similarity index 54%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/create_kb_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/create_kb_dto.py
    index 0d0d47084fec..2ecfd2e3a615 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/create_kb_dto.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/create_kb_dto.py
    @@ -22,16 +22,29 @@ class CreateKbDTO(Model):
         :param qna_list: List of Q-A (QnADTO) to be added to the knowledgebase.
          Q-A Ids are assigned by the service and should be omitted.
         :type qna_list:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.QnADTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTO]
         :param urls: List of URLs to be used for extracting Q-A.
         :type urls: list[str]
         :param files: List of files from which to Extract Q-A.
         :type files:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.FileDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.FileDTO]
    +    :param enable_hierarchical_extraction: Enable hierarchical extraction of
    +     Q-A from files and urls. Value to be considered False if this field is not
    +     present.
    +    :type enable_hierarchical_extraction: bool
    +    :param default_answer_used_for_extraction: Text string to be used as the
    +     answer in any Q-A which has no extracted answer from the document but has
    +     a hierarchy. Required when EnableHierarchicalExtraction field is set to
    +     True.
    +    :type default_answer_used_for_extraction: str
    +    :param language: Language of the knowledgebase.
    +    :type language: str
         """
     
         _validation = {
             'name': {'required': True, 'max_length': 100, 'min_length': 1},
    +        'default_answer_used_for_extraction': {'max_length': 300, 'min_length': 1},
    +        'language': {'max_length': 100, 'min_length': 1},
         }
     
         _attribute_map = {
    @@ -39,6 +52,9 @@ class CreateKbDTO(Model):
             'qna_list': {'key': 'qnaList', 'type': '[QnADTO]'},
             'urls': {'key': 'urls', 'type': '[str]'},
             'files': {'key': 'files', 'type': '[FileDTO]'},
    +        'enable_hierarchical_extraction': {'key': 'enableHierarchicalExtraction', 'type': 'bool'},
    +        'default_answer_used_for_extraction': {'key': 'defaultAnswerUsedForExtraction', 'type': 'str'},
    +        'language': {'key': 'language', 'type': 'str'},
         }
     
         def __init__(self, **kwargs):
    @@ -47,3 +63,6 @@ def __init__(self, **kwargs):
             self.qna_list = kwargs.get('qna_list', None)
             self.urls = kwargs.get('urls', None)
             self.files = kwargs.get('files', None)
    +        self.enable_hierarchical_extraction = kwargs.get('enable_hierarchical_extraction', None)
    +        self.default_answer_used_for_extraction = kwargs.get('default_answer_used_for_extraction', None)
    +        self.language = kwargs.get('language', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/create_kb_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/create_kb_dto_py3.py
    similarity index 52%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/create_kb_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/create_kb_dto_py3.py
    index 21bdf5214ec3..f65481aa84af 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/create_kb_dto_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/create_kb_dto_py3.py
    @@ -22,16 +22,29 @@ class CreateKbDTO(Model):
         :param qna_list: List of Q-A (QnADTO) to be added to the knowledgebase.
          Q-A Ids are assigned by the service and should be omitted.
         :type qna_list:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.QnADTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTO]
         :param urls: List of URLs to be used for extracting Q-A.
         :type urls: list[str]
         :param files: List of files from which to Extract Q-A.
         :type files:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.FileDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.FileDTO]
    +    :param enable_hierarchical_extraction: Enable hierarchical extraction of
    +     Q-A from files and urls. Value to be considered False if this field is not
    +     present.
    +    :type enable_hierarchical_extraction: bool
    +    :param default_answer_used_for_extraction: Text string to be used as the
    +     answer in any Q-A which has no extracted answer from the document but has
    +     a hierarchy. Required when EnableHierarchicalExtraction field is set to
    +     True.
    +    :type default_answer_used_for_extraction: str
    +    :param language: Language of the knowledgebase.
    +    :type language: str
         """
     
         _validation = {
             'name': {'required': True, 'max_length': 100, 'min_length': 1},
    +        'default_answer_used_for_extraction': {'max_length': 300, 'min_length': 1},
    +        'language': {'max_length': 100, 'min_length': 1},
         }
     
         _attribute_map = {
    @@ -39,11 +52,17 @@ class CreateKbDTO(Model):
             'qna_list': {'key': 'qnaList', 'type': '[QnADTO]'},
             'urls': {'key': 'urls', 'type': '[str]'},
             'files': {'key': 'files', 'type': '[FileDTO]'},
    +        'enable_hierarchical_extraction': {'key': 'enableHierarchicalExtraction', 'type': 'bool'},
    +        'default_answer_used_for_extraction': {'key': 'defaultAnswerUsedForExtraction', 'type': 'str'},
    +        'language': {'key': 'language', 'type': 'str'},
         }
     
    -    def __init__(self, *, name: str, qna_list=None, urls=None, files=None, **kwargs) -> None:
    +    def __init__(self, *, name: str, qna_list=None, urls=None, files=None, enable_hierarchical_extraction: bool=None, default_answer_used_for_extraction: str=None, language: str=None, **kwargs) -> None:
             super(CreateKbDTO, self).__init__(**kwargs)
             self.name = name
             self.qna_list = qna_list
             self.urls = urls
             self.files = files
    +        self.enable_hierarchical_extraction = enable_hierarchical_extraction
    +        self.default_answer_used_for_extraction = default_answer_used_for_extraction
    +        self.language = language
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/create_kb_input_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/create_kb_input_dto.py
    similarity index 89%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/create_kb_input_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/create_kb_input_dto.py
    index 78bfdf66c66c..b67e9972485a 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/create_kb_input_dto.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/create_kb_input_dto.py
    @@ -18,12 +18,12 @@ class CreateKbInputDTO(Model):
         :param qna_list: List of QNA to be added to the index. Ids are generated
          by the service and should be omitted.
         :type qna_list:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.QnADTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTO]
         :param urls: List of URLs to be added to knowledgebase.
         :type urls: list[str]
         :param files: List of files to be added to knowledgebase.
         :type files:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.FileDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.FileDTO]
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/create_kb_input_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/create_kb_input_dto_py3.py
    similarity index 89%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/create_kb_input_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/create_kb_input_dto_py3.py
    index f052f3ba0b3b..9cc2b68094be 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/create_kb_input_dto_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/create_kb_input_dto_py3.py
    @@ -18,12 +18,12 @@ class CreateKbInputDTO(Model):
         :param qna_list: List of QNA to be added to the index. Ids are generated
          by the service and should be omitted.
         :type qna_list:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.QnADTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTO]
         :param urls: List of URLs to be added to knowledgebase.
         :type urls: list[str]
         :param files: List of files to be added to knowledgebase.
         :type files:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.FileDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.FileDTO]
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/delete_kb_contents_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/delete_kb_contents_dto.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/delete_kb_contents_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/delete_kb_contents_dto.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/delete_kb_contents_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/delete_kb_contents_dto_py3.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/delete_kb_contents_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/delete_kb_contents_dto_py3.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/endpoint_keys_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_keys_dto.py
    similarity index 90%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/endpoint_keys_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_keys_dto.py
    index 1e66bd634abe..ecb62afcf79d 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/endpoint_keys_dto.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_keys_dto.py
    @@ -23,6 +23,8 @@ class EndpointKeysDTO(Model):
         :type installed_version: str
         :param last_stable_version: Latest version of runtime.
         :type last_stable_version: str
    +    :param language: Language setting of runtime.
    +    :type language: str
         """
     
         _attribute_map = {
    @@ -30,6 +32,7 @@ class EndpointKeysDTO(Model):
             'secondary_endpoint_key': {'key': 'secondaryEndpointKey', 'type': 'str'},
             'installed_version': {'key': 'installedVersion', 'type': 'str'},
             'last_stable_version': {'key': 'lastStableVersion', 'type': 'str'},
    +        'language': {'key': 'language', 'type': 'str'},
         }
     
         def __init__(self, **kwargs):
    @@ -38,3 +41,4 @@ def __init__(self, **kwargs):
             self.secondary_endpoint_key = kwargs.get('secondary_endpoint_key', None)
             self.installed_version = kwargs.get('installed_version', None)
             self.last_stable_version = kwargs.get('last_stable_version', None)
    +        self.language = kwargs.get('language', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/endpoint_keys_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_keys_dto_py3.py
    similarity index 88%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/endpoint_keys_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_keys_dto_py3.py
    index 97422112005d..30c6c1878e1a 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/endpoint_keys_dto_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_keys_dto_py3.py
    @@ -23,6 +23,8 @@ class EndpointKeysDTO(Model):
         :type installed_version: str
         :param last_stable_version: Latest version of runtime.
         :type last_stable_version: str
    +    :param language: Language setting of runtime.
    +    :type language: str
         """
     
         _attribute_map = {
    @@ -30,11 +32,13 @@ class EndpointKeysDTO(Model):
             'secondary_endpoint_key': {'key': 'secondaryEndpointKey', 'type': 'str'},
             'installed_version': {'key': 'installedVersion', 'type': 'str'},
             'last_stable_version': {'key': 'lastStableVersion', 'type': 'str'},
    +        'language': {'key': 'language', 'type': 'str'},
         }
     
    -    def __init__(self, *, primary_endpoint_key: str=None, secondary_endpoint_key: str=None, installed_version: str=None, last_stable_version: str=None, **kwargs) -> None:
    +    def __init__(self, *, primary_endpoint_key: str=None, secondary_endpoint_key: str=None, installed_version: str=None, last_stable_version: str=None, language: str=None, **kwargs) -> None:
             super(EndpointKeysDTO, self).__init__(**kwargs)
             self.primary_endpoint_key = primary_endpoint_key
             self.secondary_endpoint_key = secondary_endpoint_key
             self.installed_version = installed_version
             self.last_stable_version = last_stable_version
    +        self.language = language
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_settings_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_settings_dto.py
    new file mode 100644
    index 000000000000..8f0074782f2a
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_settings_dto.py
    @@ -0,0 +1,29 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class EndpointSettingsDTO(Model):
    +    """Endpoint settings.
    +
    +    :param active_learning: Active Learning settings of the endpoint.
    +    :type active_learning:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.EndpointSettingsDTOActiveLearning
    +    """
    +
    +    _attribute_map = {
    +        'active_learning': {'key': 'activeLearning', 'type': 'EndpointSettingsDTOActiveLearning'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EndpointSettingsDTO, self).__init__(**kwargs)
    +        self.active_learning = kwargs.get('active_learning', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_settings_dto_active_learning.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_settings_dto_active_learning.py
    new file mode 100644
    index 000000000000..1dea50ca111d
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_settings_dto_active_learning.py
    @@ -0,0 +1,27 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .active_learning_settings_dto import ActiveLearningSettingsDTO
    +
    +
    +class EndpointSettingsDTOActiveLearning(ActiveLearningSettingsDTO):
    +    """Active Learning settings of the endpoint.
    +
    +    :param enable: True/False string providing Active Learning
    +    :type enable: str
    +    """
    +
    +    _attribute_map = {
    +        'enable': {'key': 'enable', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EndpointSettingsDTOActiveLearning, self).__init__(**kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_settings_dto_active_learning_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_settings_dto_active_learning_py3.py
    new file mode 100644
    index 000000000000..b7f3f0279eeb
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_settings_dto_active_learning_py3.py
    @@ -0,0 +1,27 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .active_learning_settings_dto_py3 import ActiveLearningSettingsDTO
    +
    +
    +class EndpointSettingsDTOActiveLearning(ActiveLearningSettingsDTO):
    +    """Active Learning settings of the endpoint.
    +
    +    :param enable: True/False string providing Active Learning
    +    :type enable: str
    +    """
    +
    +    _attribute_map = {
    +        'enable': {'key': 'enable', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enable: str=None, **kwargs) -> None:
    +        super(EndpointSettingsDTOActiveLearning, self).__init__(enable=enable, **kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_settings_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_settings_dto_py3.py
    new file mode 100644
    index 000000000000..cd59276214d9
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/endpoint_settings_dto_py3.py
    @@ -0,0 +1,29 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class EndpointSettingsDTO(Model):
    +    """Endpoint settings.
    +
    +    :param active_learning: Active Learning settings of the endpoint.
    +    :type active_learning:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.EndpointSettingsDTOActiveLearning
    +    """
    +
    +    _attribute_map = {
    +        'active_learning': {'key': 'activeLearning', 'type': 'EndpointSettingsDTOActiveLearning'},
    +    }
    +
    +    def __init__(self, *, active_learning=None, **kwargs) -> None:
    +        super(EndpointSettingsDTO, self).__init__(**kwargs)
    +        self.active_learning = active_learning
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error.py
    new file mode 100644
    index 000000000000..f6cc50f3a277
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error.py
    @@ -0,0 +1,61 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class Error(Model):
    +    """The error object. As per Microsoft One API guidelines -
    +    https://github.com/Microsoft/api-guidelines/blob/vNext/Guidelines.md#7102-error-condition-responses.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param code: Required. One of a server-defined set of error codes.
    +     Possible values include: 'BadArgument', 'Forbidden', 'NotFound',
    +     'KbNotFound', 'Unauthorized', 'Unspecified', 'EndpointKeysError',
    +     'QuotaExceeded', 'QnaRuntimeError', 'SKULimitExceeded',
    +     'OperationNotFound', 'ServiceError', 'ValidationFailure',
    +     'ExtractionFailure'
    +    :type code: str or
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.ErrorCodeType
    +    :param message: A human-readable representation of the error.
    +    :type message: str
    +    :param target: The target of the error.
    +    :type target: str
    +    :param details: An array of details about specific errors that led to this
    +     reported error.
    +    :type details:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.Error]
    +    :param inner_error: An object containing more specific information than
    +     the current object about the error.
    +    :type inner_error:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.InnerErrorModel
    +    """
    +
    +    _validation = {
    +        'code': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'target': {'key': 'target', 'type': 'str'},
    +        'details': {'key': 'details', 'type': '[Error]'},
    +        'inner_error': {'key': 'innerError', 'type': 'InnerErrorModel'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Error, self).__init__(**kwargs)
    +        self.code = kwargs.get('code', None)
    +        self.message = kwargs.get('message', None)
    +        self.target = kwargs.get('target', None)
    +        self.details = kwargs.get('details', None)
    +        self.inner_error = kwargs.get('inner_error', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_py3.py
    new file mode 100644
    index 000000000000..342925344e20
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_py3.py
    @@ -0,0 +1,61 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class Error(Model):
    +    """The error object. As per Microsoft One API guidelines -
    +    https://github.com/Microsoft/api-guidelines/blob/vNext/Guidelines.md#7102-error-condition-responses.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param code: Required. One of a server-defined set of error codes.
    +     Possible values include: 'BadArgument', 'Forbidden', 'NotFound',
    +     'KbNotFound', 'Unauthorized', 'Unspecified', 'EndpointKeysError',
    +     'QuotaExceeded', 'QnaRuntimeError', 'SKULimitExceeded',
    +     'OperationNotFound', 'ServiceError', 'ValidationFailure',
    +     'ExtractionFailure'
    +    :type code: str or
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.ErrorCodeType
    +    :param message: A human-readable representation of the error.
    +    :type message: str
    +    :param target: The target of the error.
    +    :type target: str
    +    :param details: An array of details about specific errors that led to this
    +     reported error.
    +    :type details:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.Error]
    +    :param inner_error: An object containing more specific information than
    +     the current object about the error.
    +    :type inner_error:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.InnerErrorModel
    +    """
    +
    +    _validation = {
    +        'code': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'target': {'key': 'target', 'type': 'str'},
    +        'details': {'key': 'details', 'type': '[Error]'},
    +        'inner_error': {'key': 'innerError', 'type': 'InnerErrorModel'},
    +    }
    +
    +    def __init__(self, *, code, message: str=None, target: str=None, details=None, inner_error=None, **kwargs) -> None:
    +        super(Error, self).__init__(**kwargs)
    +        self.code = code
    +        self.message = message
    +        self.target = target
    +        self.details = details
    +        self.inner_error = inner_error
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_response.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_response.py
    new file mode 100644
    index 000000000000..c14d1afc0f4f
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_response.py
    @@ -0,0 +1,43 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from msrest.exceptions import HttpOperationError
    +
    +
    +class ErrorResponse(Model):
    +    """Error response. As per Microsoft One API guidelines -
    +    https://github.com/Microsoft/api-guidelines/blob/vNext/Guidelines.md#7102-error-condition-responses.
    +
    +    :param error: The error object.
    +    :type error:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.ErrorResponseError
    +    """
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'ErrorResponseError'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ErrorResponse, self).__init__(**kwargs)
    +        self.error = kwargs.get('error', None)
    +
    +
    +class ErrorResponseException(HttpOperationError):
    +    """Server responsed with exception of type: 'ErrorResponse'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, deserialize, response, *args):
    +
    +        super(ErrorResponseException, self).__init__(deserialize, response, 'ErrorResponse', *args)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_response_error.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_response_error.py
    new file mode 100644
    index 000000000000..f9cb75c59956
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_response_error.py
    @@ -0,0 +1,55 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .error import Error
    +
    +
    +class ErrorResponseError(Error):
    +    """The error object.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param code: Required. One of a server-defined set of error codes.
    +     Possible values include: 'BadArgument', 'Forbidden', 'NotFound',
    +     'KbNotFound', 'Unauthorized', 'Unspecified', 'EndpointKeysError',
    +     'QuotaExceeded', 'QnaRuntimeError', 'SKULimitExceeded',
    +     'OperationNotFound', 'ServiceError', 'ValidationFailure',
    +     'ExtractionFailure'
    +    :type code: str or
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.ErrorCodeType
    +    :param message: A human-readable representation of the error.
    +    :type message: str
    +    :param target: The target of the error.
    +    :type target: str
    +    :param details: An array of details about specific errors that led to this
    +     reported error.
    +    :type details:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.Error]
    +    :param inner_error: An object containing more specific information than
    +     the current object about the error.
    +    :type inner_error:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.InnerErrorModel
    +    """
    +
    +    _validation = {
    +        'code': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'target': {'key': 'target', 'type': 'str'},
    +        'details': {'key': 'details', 'type': '[Error]'},
    +        'inner_error': {'key': 'innerError', 'type': 'InnerErrorModel'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ErrorResponseError, self).__init__(**kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_response_error_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_response_error_py3.py
    new file mode 100644
    index 000000000000..fb2fe99a622d
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_response_error_py3.py
    @@ -0,0 +1,55 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .error_py3 import Error
    +
    +
    +class ErrorResponseError(Error):
    +    """The error object.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param code: Required. One of a server-defined set of error codes.
    +     Possible values include: 'BadArgument', 'Forbidden', 'NotFound',
    +     'KbNotFound', 'Unauthorized', 'Unspecified', 'EndpointKeysError',
    +     'QuotaExceeded', 'QnaRuntimeError', 'SKULimitExceeded',
    +     'OperationNotFound', 'ServiceError', 'ValidationFailure',
    +     'ExtractionFailure'
    +    :type code: str or
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.ErrorCodeType
    +    :param message: A human-readable representation of the error.
    +    :type message: str
    +    :param target: The target of the error.
    +    :type target: str
    +    :param details: An array of details about specific errors that led to this
    +     reported error.
    +    :type details:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.Error]
    +    :param inner_error: An object containing more specific information than
    +     the current object about the error.
    +    :type inner_error:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.InnerErrorModel
    +    """
    +
    +    _validation = {
    +        'code': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'target': {'key': 'target', 'type': 'str'},
    +        'details': {'key': 'details', 'type': '[Error]'},
    +        'inner_error': {'key': 'innerError', 'type': 'InnerErrorModel'},
    +    }
    +
    +    def __init__(self, *, code, message: str=None, target: str=None, details=None, inner_error=None, **kwargs) -> None:
    +        super(ErrorResponseError, self).__init__(code=code, message=message, target=target, details=details, inner_error=inner_error, **kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_response_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_response_py3.py
    new file mode 100644
    index 000000000000..489c0bd116cb
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/error_response_py3.py
    @@ -0,0 +1,43 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from msrest.exceptions import HttpOperationError
    +
    +
    +class ErrorResponse(Model):
    +    """Error response. As per Microsoft One API guidelines -
    +    https://github.com/Microsoft/api-guidelines/blob/vNext/Guidelines.md#7102-error-condition-responses.
    +
    +    :param error: The error object.
    +    :type error:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.ErrorResponseError
    +    """
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'ErrorResponseError'},
    +    }
    +
    +    def __init__(self, *, error=None, **kwargs) -> None:
    +        super(ErrorResponse, self).__init__(**kwargs)
    +        self.error = error
    +
    +
    +class ErrorResponseException(HttpOperationError):
    +    """Server responsed with exception of type: 'ErrorResponse'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, deserialize, response, *args):
    +
    +        super(ErrorResponseException, self).__init__(deserialize, response, 'ErrorResponse', *args)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/file_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/file_dto.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/file_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/file_dto.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/file_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/file_dto_py3.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/file_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/file_dto_py3.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/inner_error_model.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/inner_error_model.py
    new file mode 100644
    index 000000000000..41860a511576
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/inner_error_model.py
    @@ -0,0 +1,37 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class InnerErrorModel(Model):
    +    """An object containing more specific information about the error. As per
    +    Microsoft One API guidelines -
    +    https://github.com/Microsoft/api-guidelines/blob/vNext/Guidelines.md#7102-error-condition-responses.
    +
    +    :param code: A more specific error code than was provided by the
    +     containing error.
    +    :type code: str
    +    :param inner_error: An object containing more specific information than
    +     the current object about the error.
    +    :type inner_error:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.InnerErrorModel
    +    """
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'inner_error': {'key': 'innerError', 'type': 'InnerErrorModel'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(InnerErrorModel, self).__init__(**kwargs)
    +        self.code = kwargs.get('code', None)
    +        self.inner_error = kwargs.get('inner_error', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/inner_error_model_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/inner_error_model_py3.py
    new file mode 100644
    index 000000000000..f61fe5b7ca27
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/inner_error_model_py3.py
    @@ -0,0 +1,37 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class InnerErrorModel(Model):
    +    """An object containing more specific information about the error. As per
    +    Microsoft One API guidelines -
    +    https://github.com/Microsoft/api-guidelines/blob/vNext/Guidelines.md#7102-error-condition-responses.
    +
    +    :param code: A more specific error code than was provided by the
    +     containing error.
    +    :type code: str
    +    :param inner_error: An object containing more specific information than
    +     the current object about the error.
    +    :type inner_error:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.InnerErrorModel
    +    """
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'inner_error': {'key': 'innerError', 'type': 'InnerErrorModel'},
    +    }
    +
    +    def __init__(self, *, code: str=None, inner_error=None, **kwargs) -> None:
    +        super(InnerErrorModel, self).__init__(**kwargs)
    +        self.code = code
    +        self.inner_error = inner_error
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/knowledgebase_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/knowledgebase_dto.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/knowledgebase_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/knowledgebase_dto.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/knowledgebase_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/knowledgebase_dto_py3.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/knowledgebase_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/knowledgebase_dto_py3.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/knowledgebases_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/knowledgebases_dto.py
    similarity index 91%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/knowledgebases_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/knowledgebases_dto.py
    index 3fc0f26af401..bc8a8fab0514 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/knowledgebases_dto.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/knowledgebases_dto.py
    @@ -17,7 +17,7 @@ class KnowledgebasesDTO(Model):
     
         :param knowledgebases: Collection of knowledgebase records.
         :type knowledgebases:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.KnowledgebaseDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.KnowledgebaseDTO]
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/knowledgebases_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/knowledgebases_dto_py3.py
    similarity index 91%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/knowledgebases_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/knowledgebases_dto_py3.py
    index 600df122f63e..52ff3e4c7f33 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/knowledgebases_dto_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/knowledgebases_dto_py3.py
    @@ -17,7 +17,7 @@ class KnowledgebasesDTO(Model):
     
         :param knowledgebases: Collection of knowledgebase records.
         :type knowledgebases:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.KnowledgebaseDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.KnowledgebaseDTO]
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/metadata_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/metadata_dto.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/metadata_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/metadata_dto.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/metadata_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/metadata_dto_py3.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/metadata_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/metadata_dto_py3.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/operation.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/operation.py
    similarity index 93%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/operation.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/operation.py
    index 2c86977bbe02..334bdf8ecb9c 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/operation.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/operation.py
    @@ -18,7 +18,7 @@ class Operation(Model):
         :param operation_state: Operation state. Possible values include:
          'Failed', 'NotStarted', 'Running', 'Succeeded'
         :type operation_state: str or
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.OperationStateType
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.OperationStateType
         :param created_timestamp: Timestamp when the operation was created.
         :type created_timestamp: str
         :param last_action_timestamp: Timestamp when the current state was
    @@ -33,7 +33,7 @@ class Operation(Model):
         :type operation_id: str
         :param error_response: Error details in case of failures.
         :type error_response:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.ErrorResponse
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.ErrorResponse
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/operation_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/operation_py3.py
    similarity index 93%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/operation_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/operation_py3.py
    index 2190cc96a8c9..927e5756a598 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/operation_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/operation_py3.py
    @@ -18,7 +18,7 @@ class Operation(Model):
         :param operation_state: Operation state. Possible values include:
          'Failed', 'NotStarted', 'Running', 'Succeeded'
         :type operation_state: str or
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.OperationStateType
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.OperationStateType
         :param created_timestamp: Timestamp when the operation was created.
         :type created_timestamp: str
         :param last_action_timestamp: Timestamp when the current state was
    @@ -33,7 +33,7 @@ class Operation(Model):
         :type operation_id: str
         :param error_response: Error details in case of failures.
         :type error_response:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.ErrorResponse
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.ErrorResponse
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/prompt_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/prompt_dto.py
    new file mode 100644
    index 000000000000..d185f305d78c
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/prompt_dto.py
    @@ -0,0 +1,49 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class PromptDTO(Model):
    +    """Prompt for an answer.
    +
    +    :param display_order: Index of the prompt - used in ordering of the
    +     prompts
    +    :type display_order: int
    +    :param qna_id: Qna id corresponding to the prompt - if QnaId is present,
    +     QnADTO object is ignored.
    +    :type qna_id: int
    +    :param qna: QnADTO - Either QnaId or QnADTO needs to be present in a
    +     PromptDTO object
    +    :type qna:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.PromptDTOQna
    +    :param display_text: Text displayed to represent a follow up question
    +     prompt
    +    :type display_text: str
    +    """
    +
    +    _validation = {
    +        'display_text': {'max_length': 200},
    +    }
    +
    +    _attribute_map = {
    +        'display_order': {'key': 'displayOrder', 'type': 'int'},
    +        'qna_id': {'key': 'qnaId', 'type': 'int'},
    +        'qna': {'key': 'qna', 'type': 'PromptDTOQna'},
    +        'display_text': {'key': 'displayText', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PromptDTO, self).__init__(**kwargs)
    +        self.display_order = kwargs.get('display_order', None)
    +        self.qna_id = kwargs.get('qna_id', None)
    +        self.qna = kwargs.get('qna', None)
    +        self.display_text = kwargs.get('display_text', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/prompt_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/prompt_dto_py3.py
    new file mode 100644
    index 000000000000..f107ef480943
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/prompt_dto_py3.py
    @@ -0,0 +1,49 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class PromptDTO(Model):
    +    """Prompt for an answer.
    +
    +    :param display_order: Index of the prompt - used in ordering of the
    +     prompts
    +    :type display_order: int
    +    :param qna_id: Qna id corresponding to the prompt - if QnaId is present,
    +     QnADTO object is ignored.
    +    :type qna_id: int
    +    :param qna: QnADTO - Either QnaId or QnADTO needs to be present in a
    +     PromptDTO object
    +    :type qna:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.PromptDTOQna
    +    :param display_text: Text displayed to represent a follow up question
    +     prompt
    +    :type display_text: str
    +    """
    +
    +    _validation = {
    +        'display_text': {'max_length': 200},
    +    }
    +
    +    _attribute_map = {
    +        'display_order': {'key': 'displayOrder', 'type': 'int'},
    +        'qna_id': {'key': 'qnaId', 'type': 'int'},
    +        'qna': {'key': 'qna', 'type': 'PromptDTOQna'},
    +        'display_text': {'key': 'displayText', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, display_order: int=None, qna_id: int=None, qna=None, display_text: str=None, **kwargs) -> None:
    +        super(PromptDTO, self).__init__(**kwargs)
    +        self.display_order = display_order
    +        self.qna_id = qna_id
    +        self.qna = qna
    +        self.display_text = display_text
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/prompt_dto_qna.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/prompt_dto_qna.py
    new file mode 100644
    index 000000000000..8b22ae98ce75
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/prompt_dto_qna.py
    @@ -0,0 +1,53 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .qn_adto import QnADTO
    +
    +
    +class PromptDTOQna(QnADTO):
    +    """QnADTO - Either QnaId or QnADTO needs to be present in a PromptDTO object.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param id: Unique id for the Q-A.
    +    :type id: int
    +    :param answer: Required. Answer text
    +    :type answer: str
    +    :param source: Source from which Q-A was indexed. eg.
    +     https://docs.microsoft.com/en-us/azure/cognitive-services/QnAMaker/FAQs
    +    :type source: str
    +    :param questions: Required. List of questions associated with the answer.
    +    :type questions: list[str]
    +    :param metadata: List of metadata associated with the answer.
    +    :type metadata:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.MetadataDTO]
    +    :param context: Context of a QnA
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTOContext
    +    """
    +
    +    _validation = {
    +        'answer': {'required': True, 'max_length': 25000, 'min_length': 1},
    +        'source': {'max_length': 300},
    +        'questions': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'int'},
    +        'answer': {'key': 'answer', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'questions': {'key': 'questions', 'type': '[str]'},
    +        'metadata': {'key': 'metadata', 'type': '[MetadataDTO]'},
    +        'context': {'key': 'context', 'type': 'QnADTOContext'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PromptDTOQna, self).__init__(**kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/prompt_dto_qna_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/prompt_dto_qna_py3.py
    new file mode 100644
    index 000000000000..7fa7775eb623
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/prompt_dto_qna_py3.py
    @@ -0,0 +1,53 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .qn_adto_py3 import QnADTO
    +
    +
    +class PromptDTOQna(QnADTO):
    +    """QnADTO - Either QnaId or QnADTO needs to be present in a PromptDTO object.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param id: Unique id for the Q-A.
    +    :type id: int
    +    :param answer: Required. Answer text
    +    :type answer: str
    +    :param source: Source from which Q-A was indexed. eg.
    +     https://docs.microsoft.com/en-us/azure/cognitive-services/QnAMaker/FAQs
    +    :type source: str
    +    :param questions: Required. List of questions associated with the answer.
    +    :type questions: list[str]
    +    :param metadata: List of metadata associated with the answer.
    +    :type metadata:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.MetadataDTO]
    +    :param context: Context of a QnA
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTOContext
    +    """
    +
    +    _validation = {
    +        'answer': {'required': True, 'max_length': 25000, 'min_length': 1},
    +        'source': {'max_length': 300},
    +        'questions': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'int'},
    +        'answer': {'key': 'answer', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'questions': {'key': 'questions', 'type': '[str]'},
    +        'metadata': {'key': 'metadata', 'type': '[MetadataDTO]'},
    +        'context': {'key': 'context', 'type': 'QnADTOContext'},
    +    }
    +
    +    def __init__(self, *, answer: str, questions, id: int=None, source: str=None, metadata=None, context=None, **kwargs) -> None:
    +        super(PromptDTOQna, self).__init__(id=id, answer=answer, source=source, questions=questions, metadata=metadata, context=context, **kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_adocuments_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adocuments_dto.py
    similarity index 91%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_adocuments_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adocuments_dto.py
    index a8a77b520f14..73f1ad7c92fc 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_adocuments_dto.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adocuments_dto.py
    @@ -17,7 +17,7 @@ class QnADocumentsDTO(Model):
     
         :param qna_documents: List of answers.
         :type qna_documents:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.QnADTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTO]
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_adocuments_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adocuments_dto_py3.py
    similarity index 92%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_adocuments_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adocuments_dto_py3.py
    index 45b0ba89a64e..35577d108936 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_adocuments_dto_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adocuments_dto_py3.py
    @@ -17,7 +17,7 @@ class QnADocumentsDTO(Model):
     
         :param qna_documents: List of answers.
         :type qna_documents:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.QnADTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTO]
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adto.py
    new file mode 100644
    index 000000000000..d248792c62db
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adto.py
    @@ -0,0 +1,59 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class QnADTO(Model):
    +    """Q-A object.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param id: Unique id for the Q-A.
    +    :type id: int
    +    :param answer: Required. Answer text
    +    :type answer: str
    +    :param source: Source from which Q-A was indexed. eg.
    +     https://docs.microsoft.com/en-us/azure/cognitive-services/QnAMaker/FAQs
    +    :type source: str
    +    :param questions: Required. List of questions associated with the answer.
    +    :type questions: list[str]
    +    :param metadata: List of metadata associated with the answer.
    +    :type metadata:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.MetadataDTO]
    +    :param context: Context of a QnA
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTOContext
    +    """
    +
    +    _validation = {
    +        'answer': {'required': True, 'max_length': 25000, 'min_length': 1},
    +        'source': {'max_length': 300},
    +        'questions': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'int'},
    +        'answer': {'key': 'answer', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'questions': {'key': 'questions', 'type': '[str]'},
    +        'metadata': {'key': 'metadata', 'type': '[MetadataDTO]'},
    +        'context': {'key': 'context', 'type': 'QnADTOContext'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(QnADTO, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.answer = kwargs.get('answer', None)
    +        self.source = kwargs.get('source', None)
    +        self.questions = kwargs.get('questions', None)
    +        self.metadata = kwargs.get('metadata', None)
    +        self.context = kwargs.get('context', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adto_context.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adto_context.py
    new file mode 100644
    index 000000000000..18c258ade783
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adto_context.py
    @@ -0,0 +1,39 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .context_dto import ContextDTO
    +
    +
    +class QnADTOContext(ContextDTO):
    +    """Context of a QnA.
    +
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    :param prompts: List of prompts associated with the answer.
    +    :type prompts:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.PromptDTO]
    +    """
    +
    +    _validation = {
    +        'prompts': {'max_items': 20},
    +    }
    +
    +    _attribute_map = {
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +        'prompts': {'key': 'prompts', 'type': '[PromptDTO]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(QnADTOContext, self).__init__(**kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adto_context_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adto_context_py3.py
    new file mode 100644
    index 000000000000..16d76fcd39db
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adto_context_py3.py
    @@ -0,0 +1,39 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .context_dto_py3 import ContextDTO
    +
    +
    +class QnADTOContext(ContextDTO):
    +    """Context of a QnA.
    +
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    :param prompts: List of prompts associated with the answer.
    +    :type prompts:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.PromptDTO]
    +    """
    +
    +    _validation = {
    +        'prompts': {'max_items': 20},
    +    }
    +
    +    _attribute_map = {
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +        'prompts': {'key': 'prompts', 'type': '[PromptDTO]'},
    +    }
    +
    +    def __init__(self, *, is_context_only: bool=None, prompts=None, **kwargs) -> None:
    +        super(QnADTOContext, self).__init__(is_context_only=is_context_only, prompts=prompts, **kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adto_py3.py
    new file mode 100644
    index 000000000000..98c0ed36c5e7
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_adto_py3.py
    @@ -0,0 +1,59 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class QnADTO(Model):
    +    """Q-A object.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param id: Unique id for the Q-A.
    +    :type id: int
    +    :param answer: Required. Answer text
    +    :type answer: str
    +    :param source: Source from which Q-A was indexed. eg.
    +     https://docs.microsoft.com/en-us/azure/cognitive-services/QnAMaker/FAQs
    +    :type source: str
    +    :param questions: Required. List of questions associated with the answer.
    +    :type questions: list[str]
    +    :param metadata: List of metadata associated with the answer.
    +    :type metadata:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.MetadataDTO]
    +    :param context: Context of a QnA
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTOContext
    +    """
    +
    +    _validation = {
    +        'answer': {'required': True, 'max_length': 25000, 'min_length': 1},
    +        'source': {'max_length': 300},
    +        'questions': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'int'},
    +        'answer': {'key': 'answer', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'questions': {'key': 'questions', 'type': '[str]'},
    +        'metadata': {'key': 'metadata', 'type': '[MetadataDTO]'},
    +        'context': {'key': 'context', 'type': 'QnADTOContext'},
    +    }
    +
    +    def __init__(self, *, answer: str, questions, id: int=None, source: str=None, metadata=None, context=None, **kwargs) -> None:
    +        super(QnADTO, self).__init__(**kwargs)
    +        self.id = id
    +        self.answer = answer
    +        self.source = source
    +        self.questions = questions
    +        self.metadata = metadata
    +        self.context = context
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_amaker_client_enums.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_amaker_client_enums.py
    similarity index 93%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_amaker_client_enums.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_amaker_client_enums.py
    index d7ed140da72c..3d9f996b78b7 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_amaker_client_enums.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/qn_amaker_client_enums.py
    @@ -12,12 +12,6 @@
     from enum import Enum
     
     
    -class KnowledgebaseEnvironmentType(str, Enum):
    -
    -    prod = "Prod"
    -    test = "Test"
    -
    -
     class ErrorCodeType(str, Enum):
     
         bad_argument = "BadArgument"
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/replace_kb_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/replace_kb_dto.py
    similarity index 93%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/replace_kb_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/replace_kb_dto.py
    index 7b8314981fc0..dd1bc3932df7 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/replace_kb_dto.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/replace_kb_dto.py
    @@ -20,7 +20,7 @@ class ReplaceKbDTO(Model):
         :param qn_alist: Required. List of Q-A (QnADTO) to be added to the
          knowledgebase. Q-A Ids are assigned by the service and should be omitted.
         :type qn_alist:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.QnADTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTO]
         """
     
         _validation = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/replace_kb_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/replace_kb_dto_py3.py
    similarity index 93%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/replace_kb_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/replace_kb_dto_py3.py
    index 722ddc597b5c..bce1679cef4c 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/replace_kb_dto_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/replace_kb_dto_py3.py
    @@ -20,7 +20,7 @@ class ReplaceKbDTO(Model):
         :param qn_alist: Required. List of Q-A (QnADTO) to be added to the
          knowledgebase. Q-A Ids are assigned by the service and should be omitted.
         :type qn_alist:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.QnADTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTO]
         """
     
         _validation = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_context_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_context_dto.py
    new file mode 100644
    index 000000000000..bf80f3e0767c
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_context_dto.py
    @@ -0,0 +1,42 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class UpdateContextDTO(Model):
    +    """Update Body schema to represent context to be updated.
    +
    +    :param prompts_to_delete: List of prompts associated with qna to be
    +     deleted
    +    :type prompts_to_delete: list[int]
    +    :param prompts_to_add: List of prompts to be added to the qna.
    +    :type prompts_to_add:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.PromptDTO]
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    """
    +
    +    _attribute_map = {
    +        'prompts_to_delete': {'key': 'promptsToDelete', 'type': '[int]'},
    +        'prompts_to_add': {'key': 'promptsToAdd', 'type': '[PromptDTO]'},
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(UpdateContextDTO, self).__init__(**kwargs)
    +        self.prompts_to_delete = kwargs.get('prompts_to_delete', None)
    +        self.prompts_to_add = kwargs.get('prompts_to_add', None)
    +        self.is_context_only = kwargs.get('is_context_only', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_context_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_context_dto_py3.py
    new file mode 100644
    index 000000000000..cd0946e75c84
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_context_dto_py3.py
    @@ -0,0 +1,42 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class UpdateContextDTO(Model):
    +    """Update Body schema to represent context to be updated.
    +
    +    :param prompts_to_delete: List of prompts associated with qna to be
    +     deleted
    +    :type prompts_to_delete: list[int]
    +    :param prompts_to_add: List of prompts to be added to the qna.
    +    :type prompts_to_add:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.PromptDTO]
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    """
    +
    +    _attribute_map = {
    +        'prompts_to_delete': {'key': 'promptsToDelete', 'type': '[int]'},
    +        'prompts_to_add': {'key': 'promptsToAdd', 'type': '[PromptDTO]'},
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, prompts_to_delete=None, prompts_to_add=None, is_context_only: bool=None, **kwargs) -> None:
    +        super(UpdateContextDTO, self).__init__(**kwargs)
    +        self.prompts_to_delete = prompts_to_delete
    +        self.prompts_to_add = prompts_to_add
    +        self.is_context_only = is_context_only
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_contents_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_contents_dto.py
    similarity index 94%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_contents_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_contents_dto.py
    index b0fdfdc33775..0086a6f15a1c 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_contents_dto.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_contents_dto.py
    @@ -20,7 +20,7 @@ class UpdateKbContentsDTO(Model):
         :param qna_list: List of Q-A (UpdateQnaDTO) to be added to the
          knowledgebase.
         :type qna_list:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.UpdateQnaDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateQnaDTO]
         :param urls: List of existing URLs to be refreshed. The content will be
          extracted again and re-indexed.
         :type urls: list[str]
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_contents_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_contents_dto_py3.py
    similarity index 94%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_contents_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_contents_dto_py3.py
    index 1981c3af3824..d1c60f4977ba 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_contents_dto_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_contents_dto_py3.py
    @@ -20,7 +20,7 @@ class UpdateKbContentsDTO(Model):
         :param qna_list: List of Q-A (UpdateQnaDTO) to be added to the
          knowledgebase.
         :type qna_list:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.UpdateQnaDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateQnaDTO]
         :param urls: List of existing URLs to be refreshed. The content will be
          extracted again and re-indexed.
         :type urls: list[str]
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto.py
    similarity index 50%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto.py
    index 747b085ed336..8c5a98f88b99 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto.py
    @@ -17,19 +17,34 @@ class UpdateKbOperationDTO(Model):
     
         :param add: An instance of CreateKbInputDTO for add operation
         :type add:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.UpdateKbOperationDTOAdd
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateKbOperationDTOAdd
         :param delete: An instance of DeleteKbContentsDTO for delete Operation
         :type delete:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.UpdateKbOperationDTODelete
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateKbOperationDTODelete
         :param update: An instance of UpdateKbContentsDTO for Update Operation
         :type update:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.UpdateKbOperationDTOUpdate
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateKbOperationDTOUpdate
    +    :param enable_hierarchical_extraction: Enable hierarchical extraction of
    +     Q-A from files and urls. The value set during KB creation will be used if
    +     this field is not present.
    +    :type enable_hierarchical_extraction: bool
    +    :param default_answer_used_for_extraction: Text string to be used as the
    +     answer in any Q-A which has no extracted answer from the document but has
    +     a hierarchy. Required when EnableHierarchicalExtraction field is set to
    +     True.
    +    :type default_answer_used_for_extraction: str
         """
     
    +    _validation = {
    +        'default_answer_used_for_extraction': {'max_length': 300, 'min_length': 1},
    +    }
    +
         _attribute_map = {
             'add': {'key': 'add', 'type': 'UpdateKbOperationDTOAdd'},
             'delete': {'key': 'delete', 'type': 'UpdateKbOperationDTODelete'},
             'update': {'key': 'update', 'type': 'UpdateKbOperationDTOUpdate'},
    +        'enable_hierarchical_extraction': {'key': 'enableHierarchicalExtraction', 'type': 'bool'},
    +        'default_answer_used_for_extraction': {'key': 'defaultAnswerUsedForExtraction', 'type': 'str'},
         }
     
         def __init__(self, **kwargs):
    @@ -37,3 +52,5 @@ def __init__(self, **kwargs):
             self.add = kwargs.get('add', None)
             self.delete = kwargs.get('delete', None)
             self.update = kwargs.get('update', None)
    +        self.enable_hierarchical_extraction = kwargs.get('enable_hierarchical_extraction', None)
    +        self.default_answer_used_for_extraction = kwargs.get('default_answer_used_for_extraction', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_add.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_add.py
    similarity index 88%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_add.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_add.py
    index ac8ec6f8c794..1dbe0ac290cc 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_add.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_add.py
    @@ -18,12 +18,12 @@ class UpdateKbOperationDTOAdd(CreateKbInputDTO):
         :param qna_list: List of QNA to be added to the index. Ids are generated
          by the service and should be omitted.
         :type qna_list:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.QnADTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTO]
         :param urls: List of URLs to be added to knowledgebase.
         :type urls: list[str]
         :param files: List of files to be added to knowledgebase.
         :type files:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.FileDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.FileDTO]
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_add_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_add_py3.py
    similarity index 89%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_add_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_add_py3.py
    index b9c135e727ba..cca01b6df666 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_add_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_add_py3.py
    @@ -18,12 +18,12 @@ class UpdateKbOperationDTOAdd(CreateKbInputDTO):
         :param qna_list: List of QNA to be added to the index. Ids are generated
          by the service and should be omitted.
         :type qna_list:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.QnADTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTO]
         :param urls: List of URLs to be added to knowledgebase.
         :type urls: list[str]
         :param files: List of files to be added to knowledgebase.
         :type files:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.FileDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.FileDTO]
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_delete.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_delete.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_delete.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_delete.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_delete_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_delete_py3.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_delete_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_delete_py3.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_py3.py
    new file mode 100644
    index 000000000000..074e8a005b7e
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_py3.py
    @@ -0,0 +1,56 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class UpdateKbOperationDTO(Model):
    +    """Contains list of QnAs to be updated.
    +
    +    :param add: An instance of CreateKbInputDTO for add operation
    +    :type add:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateKbOperationDTOAdd
    +    :param delete: An instance of DeleteKbContentsDTO for delete Operation
    +    :type delete:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateKbOperationDTODelete
    +    :param update: An instance of UpdateKbContentsDTO for Update Operation
    +    :type update:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateKbOperationDTOUpdate
    +    :param enable_hierarchical_extraction: Enable hierarchical extraction of
    +     Q-A from files and urls. The value set during KB creation will be used if
    +     this field is not present.
    +    :type enable_hierarchical_extraction: bool
    +    :param default_answer_used_for_extraction: Text string to be used as the
    +     answer in any Q-A which has no extracted answer from the document but has
    +     a hierarchy. Required when EnableHierarchicalExtraction field is set to
    +     True.
    +    :type default_answer_used_for_extraction: str
    +    """
    +
    +    _validation = {
    +        'default_answer_used_for_extraction': {'max_length': 300, 'min_length': 1},
    +    }
    +
    +    _attribute_map = {
    +        'add': {'key': 'add', 'type': 'UpdateKbOperationDTOAdd'},
    +        'delete': {'key': 'delete', 'type': 'UpdateKbOperationDTODelete'},
    +        'update': {'key': 'update', 'type': 'UpdateKbOperationDTOUpdate'},
    +        'enable_hierarchical_extraction': {'key': 'enableHierarchicalExtraction', 'type': 'bool'},
    +        'default_answer_used_for_extraction': {'key': 'defaultAnswerUsedForExtraction', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, add=None, delete=None, update=None, enable_hierarchical_extraction: bool=None, default_answer_used_for_extraction: str=None, **kwargs) -> None:
    +        super(UpdateKbOperationDTO, self).__init__(**kwargs)
    +        self.add = add
    +        self.delete = delete
    +        self.update = update
    +        self.enable_hierarchical_extraction = enable_hierarchical_extraction
    +        self.default_answer_used_for_extraction = default_answer_used_for_extraction
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_update.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_update.py
    similarity index 93%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_update.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_update.py
    index 8a80527b451a..95441d5bb77f 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_update.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_update.py
    @@ -20,7 +20,7 @@ class UpdateKbOperationDTOUpdate(UpdateKbContentsDTO):
         :param qna_list: List of Q-A (UpdateQnaDTO) to be added to the
          knowledgebase.
         :type qna_list:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.UpdateQnaDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateQnaDTO]
         :param urls: List of existing URLs to be refreshed. The content will be
          extracted again and re-indexed.
         :type urls: list[str]
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_update_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_update_py3.py
    similarity index 94%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_update_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_update_py3.py
    index ccb2faf4b8f9..cab934082291 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_update_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_kb_operation_dto_update_py3.py
    @@ -20,7 +20,7 @@ class UpdateKbOperationDTOUpdate(UpdateKbContentsDTO):
         :param qna_list: List of Q-A (UpdateQnaDTO) to be added to the
          knowledgebase.
         :type qna_list:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.UpdateQnaDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateQnaDTO]
         :param urls: List of existing URLs to be refreshed. The content will be
          extracted again and re-indexed.
         :type urls: list[str]
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_metadata_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_metadata_dto.py
    similarity index 87%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_metadata_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_metadata_dto.py
    index de526f59d55f..7d6e8d72d942 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_metadata_dto.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_metadata_dto.py
    @@ -17,10 +17,10 @@ class UpdateMetadataDTO(Model):
     
         :param delete: List of Metadata associated with answer to be deleted
         :type delete:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.MetadataDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.MetadataDTO]
         :param add: List of metadata associated with answer to be added
         :type add:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.MetadataDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.MetadataDTO]
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_metadata_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_metadata_dto_py3.py
    similarity index 87%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_metadata_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_metadata_dto_py3.py
    index 50327dff6578..79792cc38bf8 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_metadata_dto_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_metadata_dto_py3.py
    @@ -17,10 +17,10 @@ class UpdateMetadataDTO(Model):
     
         :param delete: List of Metadata associated with answer to be deleted
         :type delete:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.MetadataDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.MetadataDTO]
         :param add: List of metadata associated with answer to be added
         :type add:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.MetadataDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.MetadataDTO]
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto.py
    similarity index 79%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto.py
    index 186d111365ae..10baaaebc713 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto.py
    @@ -24,10 +24,13 @@ class UpdateQnaDTO(Model):
         :type source: str
         :param questions: List of questions associated with the answer.
         :type questions:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.UpdateQnaDTOQuestions
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateQnaDTOQuestions
         :param metadata: List of metadata associated with the answer to be updated
         :type metadata:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.UpdateQnaDTOMetadata
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateQnaDTOMetadata
    +    :param context: Context associated with Qna to be updated.
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateQnaDTOContext
         """
     
         _validation = {
    @@ -41,6 +44,7 @@ class UpdateQnaDTO(Model):
             'source': {'key': 'source', 'type': 'str'},
             'questions': {'key': 'questions', 'type': 'UpdateQnaDTOQuestions'},
             'metadata': {'key': 'metadata', 'type': 'UpdateQnaDTOMetadata'},
    +        'context': {'key': 'context', 'type': 'UpdateQnaDTOContext'},
         }
     
         def __init__(self, **kwargs):
    @@ -50,3 +54,4 @@ def __init__(self, **kwargs):
             self.source = kwargs.get('source', None)
             self.questions = kwargs.get('questions', None)
             self.metadata = kwargs.get('metadata', None)
    +        self.context = kwargs.get('context', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_context.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_context.py
    new file mode 100644
    index 000000000000..b74e05d28668
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_context.py
    @@ -0,0 +1,39 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .update_context_dto import UpdateContextDTO
    +
    +
    +class UpdateQnaDTOContext(UpdateContextDTO):
    +    """Context associated with Qna to be updated.
    +
    +    :param prompts_to_delete: List of prompts associated with qna to be
    +     deleted
    +    :type prompts_to_delete: list[int]
    +    :param prompts_to_add: List of prompts to be added to the qna.
    +    :type prompts_to_add:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.PromptDTO]
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    """
    +
    +    _attribute_map = {
    +        'prompts_to_delete': {'key': 'promptsToDelete', 'type': '[int]'},
    +        'prompts_to_add': {'key': 'promptsToAdd', 'type': '[PromptDTO]'},
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(UpdateQnaDTOContext, self).__init__(**kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_context_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_context_py3.py
    new file mode 100644
    index 000000000000..3bc0e057f78f
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_context_py3.py
    @@ -0,0 +1,39 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .update_context_dto_py3 import UpdateContextDTO
    +
    +
    +class UpdateQnaDTOContext(UpdateContextDTO):
    +    """Context associated with Qna to be updated.
    +
    +    :param prompts_to_delete: List of prompts associated with qna to be
    +     deleted
    +    :type prompts_to_delete: list[int]
    +    :param prompts_to_add: List of prompts to be added to the qna.
    +    :type prompts_to_add:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.PromptDTO]
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    """
    +
    +    _attribute_map = {
    +        'prompts_to_delete': {'key': 'promptsToDelete', 'type': '[int]'},
    +        'prompts_to_add': {'key': 'promptsToAdd', 'type': '[PromptDTO]'},
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, prompts_to_delete=None, prompts_to_add=None, is_context_only: bool=None, **kwargs) -> None:
    +        super(UpdateQnaDTOContext, self).__init__(prompts_to_delete=prompts_to_delete, prompts_to_add=prompts_to_add, is_context_only=is_context_only, **kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_metadata.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_metadata.py
    similarity index 86%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_metadata.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_metadata.py
    index ae18bff232e4..681d67dabc85 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_metadata.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_metadata.py
    @@ -17,10 +17,10 @@ class UpdateQnaDTOMetadata(UpdateMetadataDTO):
     
         :param delete: List of Metadata associated with answer to be deleted
         :type delete:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.MetadataDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.MetadataDTO]
         :param add: List of metadata associated with answer to be added
         :type add:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.MetadataDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.MetadataDTO]
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_metadata_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_metadata_py3.py
    similarity index 87%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_metadata_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_metadata_py3.py
    index 64d8384af6e4..331f518018f3 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_metadata_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_metadata_py3.py
    @@ -17,10 +17,10 @@ class UpdateQnaDTOMetadata(UpdateMetadataDTO):
     
         :param delete: List of Metadata associated with answer to be deleted
         :type delete:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.MetadataDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.MetadataDTO]
         :param add: List of metadata associated with answer to be added
         :type add:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.MetadataDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.MetadataDTO]
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_py3.py
    similarity index 77%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_py3.py
    index 6ccad503fd2c..e980c2545661 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_py3.py
    @@ -24,10 +24,13 @@ class UpdateQnaDTO(Model):
         :type source: str
         :param questions: List of questions associated with the answer.
         :type questions:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.UpdateQnaDTOQuestions
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateQnaDTOQuestions
         :param metadata: List of metadata associated with the answer to be updated
         :type metadata:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.UpdateQnaDTOMetadata
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateQnaDTOMetadata
    +    :param context: Context associated with Qna to be updated.
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateQnaDTOContext
         """
     
         _validation = {
    @@ -41,12 +44,14 @@ class UpdateQnaDTO(Model):
             'source': {'key': 'source', 'type': 'str'},
             'questions': {'key': 'questions', 'type': 'UpdateQnaDTOQuestions'},
             'metadata': {'key': 'metadata', 'type': 'UpdateQnaDTOMetadata'},
    +        'context': {'key': 'context', 'type': 'UpdateQnaDTOContext'},
         }
     
    -    def __init__(self, *, id: int=None, answer: str=None, source: str=None, questions=None, metadata=None, **kwargs) -> None:
    +    def __init__(self, *, id: int=None, answer: str=None, source: str=None, questions=None, metadata=None, context=None, **kwargs) -> None:
             super(UpdateQnaDTO, self).__init__(**kwargs)
             self.id = id
             self.answer = answer
             self.source = source
             self.questions = questions
             self.metadata = metadata
    +        self.context = context
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_questions.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_questions.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_questions.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_questions.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_questions_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_questions_py3.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_qna_dto_questions_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_qna_dto_questions_py3.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_questions_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_questions_dto.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_questions_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_questions_dto.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_questions_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_questions_dto_py3.py
    similarity index 100%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_questions_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/update_questions_dto_py3.py
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/word_alterations_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/word_alterations_dto.py
    similarity index 92%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/word_alterations_dto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/word_alterations_dto.py
    index cf28a19ff53f..b7e4ffbcec0b 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/word_alterations_dto.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/word_alterations_dto.py
    @@ -19,7 +19,7 @@ class WordAlterationsDTO(Model):
     
         :param word_alterations: Required. Collection of word alterations.
         :type word_alterations:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.AlterationsDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.AlterationsDTO]
         """
     
         _validation = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/word_alterations_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/word_alterations_dto_py3.py
    similarity index 92%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/word_alterations_dto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/word_alterations_dto_py3.py
    index 579706cdbbdf..5183b48255a2 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/word_alterations_dto_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/models/word_alterations_dto_py3.py
    @@ -19,7 +19,7 @@ class WordAlterationsDTO(Model):
     
         :param word_alterations: Required. Collection of word alterations.
         :type word_alterations:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.AlterationsDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.AlterationsDTO]
         """
     
         _validation = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/__init__.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/__init__.py
    similarity index 88%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/__init__.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/__init__.py
    index 4302a4938a28..e89d051424b1 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/__init__.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/__init__.py
    @@ -9,12 +9,14 @@
     # regenerated.
     # --------------------------------------------------------------------------
     
    +from .endpoint_settings_operations import EndpointSettingsOperations
     from .endpoint_keys_operations import EndpointKeysOperations
     from .alterations_operations import AlterationsOperations
     from .knowledgebase_operations import KnowledgebaseOperations
     from .operations import Operations
     
     __all__ = [
    +    'EndpointSettingsOperations',
         'EndpointKeysOperations',
         'AlterationsOperations',
         'KnowledgebaseOperations',
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/alterations_operations.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/alterations_operations.py
    similarity index 94%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/alterations_operations.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/alterations_operations.py
    index 66b7a53e27c2..2f292128400f 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/alterations_operations.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/alterations_operations.py
    @@ -44,10 +44,10 @@ def get(
              overrides`.
             :return: WordAlterationsDTO or ClientRawResponse if raw=true
             :rtype:
    -         ~azure.cognitiveservices.knowledge.qnamaker.models.WordAlterationsDTO
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.WordAlterationsDTO
              or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             # Construct URL
             url = self.get.metadata['url']
    @@ -90,7 +90,7 @@ def replace(
     
             :param word_alterations: Collection of word alterations.
             :type word_alterations:
    -         list[~azure.cognitiveservices.knowledge.qnamaker.models.AlterationsDTO]
    +         list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.AlterationsDTO]
             :param dict custom_headers: headers that will be added to the request
             :param bool raw: returns the direct response alongside the
              deserialized response
    @@ -99,7 +99,7 @@ def replace(
             :return: None or ClientRawResponse if raw=true
             :rtype: None or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             word_alterations1 = models.WordAlterationsDTO(word_alterations=word_alterations)
     
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/endpoint_keys_operations.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/endpoint_keys_operations.py
    similarity index 92%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/endpoint_keys_operations.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/endpoint_keys_operations.py
    index 0112cd1b9cd2..9dc374b95219 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/endpoint_keys_operations.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/endpoint_keys_operations.py
    @@ -44,10 +44,10 @@ def get_keys(
              overrides`.
             :return: EndpointKeysDTO or ClientRawResponse if raw=true
             :rtype:
    -         ~azure.cognitiveservices.knowledge.qnamaker.models.EndpointKeysDTO or
    -         ~msrest.pipeline.ClientRawResponse
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.EndpointKeysDTO
    +         or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             # Construct URL
             url = self.get_keys.metadata['url']
    @@ -97,10 +97,10 @@ def refresh_keys(
              overrides`.
             :return: EndpointKeysDTO or ClientRawResponse if raw=true
             :rtype:
    -         ~azure.cognitiveservices.knowledge.qnamaker.models.EndpointKeysDTO or
    -         ~msrest.pipeline.ClientRawResponse
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.EndpointKeysDTO
    +         or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             # Construct URL
             url = self.refresh_keys.metadata['url']
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/endpoint_settings_operations.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/endpoint_settings_operations.py
    new file mode 100644
    index 000000000000..823ca9d95ad9
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/endpoint_settings_operations.py
    @@ -0,0 +1,143 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.pipeline import ClientRawResponse
    +
    +from .. import models
    +
    +
    +class EndpointSettingsOperations(object):
    +    """EndpointSettingsOperations operations.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self.config = config
    +
    +    def get_settings(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """Gets endpoint settings for an endpoint.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EndpointSettingsDTO or ClientRawResponse if raw=true
    +        :rtype:
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.EndpointSettingsDTO
    +         or ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        # Construct URL
    +        url = self.get_settings.metadata['url']
    +        path_format_arguments = {
    +            'Endpoint': self._serialize.url("self.config.endpoint", self.config.endpoint, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorResponseException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EndpointSettingsDTO', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_settings.metadata = {'url': '/endpointSettings'}
    +
    +    def update_settings(
    +            self, active_learning=None, custom_headers=None, raw=False, **operation_config):
    +        """Updates endpoint settings for an endpoint.
    +
    +        :param active_learning: Active Learning settings of the endpoint.
    +        :type active_learning:
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.EndpointSettingsDTOActiveLearning
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: str or ClientRawResponse if raw=true
    +        :rtype: str or ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        endpoint_settings_payload = models.EndpointSettingsDTO(active_learning=active_learning)
    +
    +        # Construct URL
    +        url = self.update_settings.metadata['url']
    +        path_format_arguments = {
    +            'Endpoint': self._serialize.url("self.config.endpoint", self.config.endpoint, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +
    +        # Construct body
    +        body_content = self._serialize.body(endpoint_settings_payload, 'EndpointSettingsDTO')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorResponseException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('str', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    update_settings.metadata = {'url': '/endpointSettings'}
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/knowledgebase_operations.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/knowledgebase_operations.py
    similarity index 92%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/knowledgebase_operations.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/knowledgebase_operations.py
    index 50b3ee460c40..de6afacab71f 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/knowledgebase_operations.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/knowledgebase_operations.py
    @@ -44,10 +44,10 @@ def list_all(
              overrides`.
             :return: KnowledgebasesDTO or ClientRawResponse if raw=true
             :rtype:
    -         ~azure.cognitiveservices.knowledge.qnamaker.models.KnowledgebasesDTO
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.KnowledgebasesDTO
              or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             # Construct URL
             url = self.list_all.metadata['url']
    @@ -97,10 +97,10 @@ def get_details(
              overrides`.
             :return: KnowledgebaseDTO or ClientRawResponse if raw=true
             :rtype:
    -         ~azure.cognitiveservices.knowledge.qnamaker.models.KnowledgebaseDTO or
    -         ~msrest.pipeline.ClientRawResponse
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.KnowledgebaseDTO
    +         or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             # Construct URL
             url = self.get_details.metadata['url']
    @@ -152,7 +152,7 @@ def delete(
             :return: None or ClientRawResponse if raw=true
             :rtype: None or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             # Construct URL
             url = self.delete.metadata['url']
    @@ -197,7 +197,7 @@ def publish(
             :return: None or ClientRawResponse if raw=true
             :rtype: None or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             # Construct URL
             url = self.publish.metadata['url']
    @@ -237,7 +237,7 @@ def replace(
              knowledgebase. Q-A Ids are assigned by the service and should be
              omitted.
             :type qn_alist:
    -         list[~azure.cognitiveservices.knowledge.qnamaker.models.QnADTO]
    +         list[~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADTO]
             :param dict custom_headers: headers that will be added to the request
             :param bool raw: returns the direct response alongside the
              deserialized response
    @@ -246,7 +246,7 @@ def replace(
             :return: None or ClientRawResponse if raw=true
             :rtype: None or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             replace_kb = models.ReplaceKbDTO(qn_alist=qn_alist)
     
    @@ -290,17 +290,18 @@ def update(
             :type kb_id: str
             :param update_kb: Post body of the request.
             :type update_kb:
    -         ~azure.cognitiveservices.knowledge.qnamaker.models.UpdateKbOperationDTO
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.UpdateKbOperationDTO
             :param dict custom_headers: headers that will be added to the request
             :param bool raw: returns the direct response alongside the
              deserialized response
             :param operation_config: :ref:`Operation configuration
              overrides`.
             :return: Operation or ClientRawResponse if raw=true
    -        :rtype: ~azure.cognitiveservices.knowledge.qnamaker.models.Operation
    +        :rtype:
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.Operation
              or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             # Construct URL
             url = self.update.metadata['url']
    @@ -353,17 +354,18 @@ def create(
     
             :param create_kb_payload: Post body of the request.
             :type create_kb_payload:
    -         ~azure.cognitiveservices.knowledge.qnamaker.models.CreateKbDTO
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.CreateKbDTO
             :param dict custom_headers: headers that will be added to the request
             :param bool raw: returns the direct response alongside the
              deserialized response
             :param operation_config: :ref:`Operation configuration
              overrides`.
             :return: Operation or ClientRawResponse if raw=true
    -        :rtype: ~azure.cognitiveservices.knowledge.qnamaker.models.Operation
    +        :rtype:
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.Operation
              or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             # Construct URL
             url = self.create.metadata['url']
    @@ -413,7 +415,7 @@ def download(
             :param environment: Specifies whether environment is Test or Prod.
              Possible values include: 'Prod', 'Test'
             :type environment: str or
    -         ~azure.cognitiveservices.knowledge.qnamaker.models.EnvironmentType
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.EnvironmentType
             :param dict custom_headers: headers that will be added to the request
             :param bool raw: returns the direct response alongside the
              deserialized response
    @@ -421,10 +423,10 @@ def download(
              overrides`.
             :return: QnADocumentsDTO or ClientRawResponse if raw=true
             :rtype:
    -         ~azure.cognitiveservices.knowledge.qnamaker.models.QnADocumentsDTO or
    -         ~msrest.pipeline.ClientRawResponse
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.QnADocumentsDTO
    +         or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             # Construct URL
             url = self.download.metadata['url']
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/operations.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/operations.py
    similarity index 95%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/operations.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/operations.py
    index 7fc2c8c360dc..b4973f126822 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/operations/operations.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/operations/operations.py
    @@ -45,10 +45,11 @@ def get_details(
             :param operation_config: :ref:`Operation configuration
              overrides`.
             :return: Operation or ClientRawResponse if raw=true
    -        :rtype: ~azure.cognitiveservices.knowledge.qnamaker.models.Operation
    +        :rtype:
    +         ~azure.cognitiveservices.knowledge.qnamaker.authoring.models.Operation
              or ~msrest.pipeline.ClientRawResponse
             :raises:
    -         :class:`ErrorResponseException`
    +         :class:`ErrorResponseException`
             """
             # Construct URL
             url = self.get_details.metadata['url']
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/qn_amaker_client.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/qn_amaker_client.py
    similarity index 86%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/qn_amaker_client.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/qn_amaker_client.py
    index aef5f6b21336..fe0afce73bd7 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/qn_amaker_client.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/qn_amaker_client.py
    @@ -12,6 +12,7 @@
     from msrest.service_client import SDKClient
     from msrest import Configuration, Serializer, Deserializer
     from .version import VERSION
    +from .operations.endpoint_settings_operations import EndpointSettingsOperations
     from .operations.endpoint_keys_operations import EndpointKeysOperations
     from .operations.alterations_operations import AlterationsOperations
     from .operations.knowledgebase_operations import KnowledgebaseOperations
    @@ -55,14 +56,16 @@ class QnAMakerClient(SDKClient):
         :ivar config: Configuration for client.
         :vartype config: QnAMakerClientConfiguration
     
    +    :ivar endpoint_settings: EndpointSettings operations
    +    :vartype endpoint_settings: azure.cognitiveservices.knowledge.qnamaker.authoring.operations.EndpointSettingsOperations
         :ivar endpoint_keys: EndpointKeys operations
    -    :vartype endpoint_keys: azure.cognitiveservices.knowledge.qnamaker.operations.EndpointKeysOperations
    +    :vartype endpoint_keys: azure.cognitiveservices.knowledge.qnamaker.authoring.operations.EndpointKeysOperations
         :ivar alterations: Alterations operations
    -    :vartype alterations: azure.cognitiveservices.knowledge.qnamaker.operations.AlterationsOperations
    +    :vartype alterations: azure.cognitiveservices.knowledge.qnamaker.authoring.operations.AlterationsOperations
         :ivar knowledgebase: Knowledgebase operations
    -    :vartype knowledgebase: azure.cognitiveservices.knowledge.qnamaker.operations.KnowledgebaseOperations
    +    :vartype knowledgebase: azure.cognitiveservices.knowledge.qnamaker.authoring.operations.KnowledgebaseOperations
         :ivar operations: Operations operations
    -    :vartype operations: azure.cognitiveservices.knowledge.qnamaker.operations.Operations
    +    :vartype operations: azure.cognitiveservices.knowledge.qnamaker.authoring.operations.Operations
     
         :param endpoint: Supported Cognitive Services endpoints (protocol and
          hostname, for example: https://westus.api.cognitive.microsoft.com).
    @@ -83,6 +86,8 @@ def __init__(
             self._serialize = Serializer(client_models)
             self._deserialize = Deserializer(client_models)
     
    +        self.endpoint_settings = EndpointSettingsOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
             self.endpoint_keys = EndpointKeysOperations(
                 self._client, self.config, self._serialize, self._deserialize)
             self.alterations = AlterationsOperations(
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/version.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/version.py
    new file mode 100644
    index 000000000000..3faab2cb0b4a
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/authoring/version.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "4.0"
    +
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_py3.py
    deleted file mode 100644
    index a183b668114b..000000000000
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/update_kb_operation_dto_py3.py
    +++ /dev/null
    @@ -1,39 +0,0 @@
    -# coding=utf-8
    -# --------------------------------------------------------------------------
    -# Copyright (c) Microsoft Corporation. All rights reserved.
    -# Licensed under the MIT License. See License.txt in the project root for
    -# license information.
    -#
    -# Code generated by Microsoft (R) AutoRest Code Generator.
    -# Changes may cause incorrect behavior and will be lost if the code is
    -# regenerated.
    -# --------------------------------------------------------------------------
    -
    -from msrest.serialization import Model
    -
    -
    -class UpdateKbOperationDTO(Model):
    -    """Contains list of QnAs to be updated.
    -
    -    :param add: An instance of CreateKbInputDTO for add operation
    -    :type add:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.UpdateKbOperationDTOAdd
    -    :param delete: An instance of DeleteKbContentsDTO for delete Operation
    -    :type delete:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.UpdateKbOperationDTODelete
    -    :param update: An instance of UpdateKbContentsDTO for Update Operation
    -    :type update:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.UpdateKbOperationDTOUpdate
    -    """
    -
    -    _attribute_map = {
    -        'add': {'key': 'add', 'type': 'UpdateKbOperationDTOAdd'},
    -        'delete': {'key': 'delete', 'type': 'UpdateKbOperationDTODelete'},
    -        'update': {'key': 'update', 'type': 'UpdateKbOperationDTOUpdate'},
    -    }
    -
    -    def __init__(self, *, add=None, delete=None, update=None, **kwargs) -> None:
    -        super(UpdateKbOperationDTO, self).__init__(**kwargs)
    -        self.add = add
    -        self.delete = delete
    -        self.update = update
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/__init__.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/__init__.py
    new file mode 100644
    index 000000000000..d7ead4eb95b0
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/__init__.py
    @@ -0,0 +1,18 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .qn_amaker_runtime_client import QnAMakerRuntimeClient
    +from .version import VERSION
    +
    +__all__ = ['QnAMakerRuntimeClient']
    +
    +__version__ = VERSION
    +
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/__init__.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/__init__.py
    new file mode 100644
    index 000000000000..eabcdb80fb07
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/__init__.py
    @@ -0,0 +1,74 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +try:
    +    from .metadata_dto_py3 import MetadataDTO
    +    from .qn_adto_context_py3 import QnADTOContext
    +    from .qn_adto_py3 import QnADTO
    +    from .prompt_dto_qna_py3 import PromptDTOQna
    +    from .prompt_dto_py3 import PromptDTO
    +    from .context_dto_py3 import ContextDTO
    +    from .error_response_error_py3 import ErrorResponseError
    +    from .error_response_py3 import ErrorResponse, ErrorResponseException
    +    from .inner_error_model_py3 import InnerErrorModel
    +    from .error_py3 import Error
    +    from .query_dto_context_py3 import QueryDTOContext
    +    from .query_dto_py3 import QueryDTO
    +    from .query_context_dto_py3 import QueryContextDTO
    +    from .qn_asearch_result_context_py3 import QnASearchResultContext
    +    from .qn_asearch_result_py3 import QnASearchResult
    +    from .qn_asearch_result_list_py3 import QnASearchResultList
    +    from .feedback_record_dto_py3 import FeedbackRecordDTO
    +    from .feedback_records_dto_py3 import FeedbackRecordsDTO
    +except (SyntaxError, ImportError):
    +    from .metadata_dto import MetadataDTO
    +    from .qn_adto_context import QnADTOContext
    +    from .qn_adto import QnADTO
    +    from .prompt_dto_qna import PromptDTOQna
    +    from .prompt_dto import PromptDTO
    +    from .context_dto import ContextDTO
    +    from .error_response_error import ErrorResponseError
    +    from .error_response import ErrorResponse, ErrorResponseException
    +    from .inner_error_model import InnerErrorModel
    +    from .error import Error
    +    from .query_dto_context import QueryDTOContext
    +    from .query_dto import QueryDTO
    +    from .query_context_dto import QueryContextDTO
    +    from .qn_asearch_result_context import QnASearchResultContext
    +    from .qn_asearch_result import QnASearchResult
    +    from .qn_asearch_result_list import QnASearchResultList
    +    from .feedback_record_dto import FeedbackRecordDTO
    +    from .feedback_records_dto import FeedbackRecordsDTO
    +from .qn_amaker_runtime_client_enums import (
    +    ErrorCodeType,
    +)
    +
    +__all__ = [
    +    'MetadataDTO',
    +    'QnADTOContext',
    +    'QnADTO',
    +    'PromptDTOQna',
    +    'PromptDTO',
    +    'ContextDTO',
    +    'ErrorResponseError',
    +    'ErrorResponse', 'ErrorResponseException',
    +    'InnerErrorModel',
    +    'Error',
    +    'QueryDTOContext',
    +    'QueryDTO',
    +    'QueryContextDTO',
    +    'QnASearchResultContext',
    +    'QnASearchResult',
    +    'QnASearchResultList',
    +    'FeedbackRecordDTO',
    +    'FeedbackRecordsDTO',
    +    'ErrorCodeType',
    +]
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/context_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/context_dto.py
    new file mode 100644
    index 000000000000..ec7fafc1a182
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/context_dto.py
    @@ -0,0 +1,41 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class ContextDTO(Model):
    +    """Context associated with Qna.
    +
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    :param prompts: List of prompts associated with the answer.
    +    :type prompts:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.PromptDTO]
    +    """
    +
    +    _validation = {
    +        'prompts': {'max_items': 20},
    +    }
    +
    +    _attribute_map = {
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +        'prompts': {'key': 'prompts', 'type': '[PromptDTO]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ContextDTO, self).__init__(**kwargs)
    +        self.is_context_only = kwargs.get('is_context_only', None)
    +        self.prompts = kwargs.get('prompts', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/context_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/context_dto_py3.py
    new file mode 100644
    index 000000000000..2dea33bb9088
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/context_dto_py3.py
    @@ -0,0 +1,41 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class ContextDTO(Model):
    +    """Context associated with Qna.
    +
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    :param prompts: List of prompts associated with the answer.
    +    :type prompts:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.PromptDTO]
    +    """
    +
    +    _validation = {
    +        'prompts': {'max_items': 20},
    +    }
    +
    +    _attribute_map = {
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +        'prompts': {'key': 'prompts', 'type': '[PromptDTO]'},
    +    }
    +
    +    def __init__(self, *, is_context_only: bool=None, prompts=None, **kwargs) -> None:
    +        super(ContextDTO, self).__init__(**kwargs)
    +        self.is_context_only = is_context_only
    +        self.prompts = prompts
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error.py
    similarity index 90%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error.py
    index d54de8f71851..34b0fec20c98 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error.py
    @@ -25,7 +25,7 @@ class Error(Model):
          'OperationNotFound', 'ServiceError', 'ValidationFailure',
          'ExtractionFailure'
         :type code: str or
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.ErrorCodeType
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.ErrorCodeType
         :param message: A human-readable representation of the error.
         :type message: str
         :param target: The target of the error.
    @@ -33,11 +33,11 @@ class Error(Model):
         :param details: An array of details about specific errors that led to this
          reported error.
         :type details:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.Error]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.Error]
         :param inner_error: An object containing more specific information than
          the current object about the error.
         :type inner_error:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.InnerErrorModel
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.InnerErrorModel
         """
     
         _validation = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_py3.py
    similarity index 90%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_py3.py
    index 81e33305a662..c8924c169865 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_py3.py
    @@ -25,7 +25,7 @@ class Error(Model):
          'OperationNotFound', 'ServiceError', 'ValidationFailure',
          'ExtractionFailure'
         :type code: str or
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.ErrorCodeType
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.ErrorCodeType
         :param message: A human-readable representation of the error.
         :type message: str
         :param target: The target of the error.
    @@ -33,11 +33,11 @@ class Error(Model):
         :param details: An array of details about specific errors that led to this
          reported error.
         :type details:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.Error]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.Error]
         :param inner_error: An object containing more specific information than
          the current object about the error.
         :type inner_error:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.InnerErrorModel
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.InnerErrorModel
         """
     
         _validation = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_response.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_response.py
    similarity index 94%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_response.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_response.py
    index c74df96d50e3..528a75681f84 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_response.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_response.py
    @@ -19,7 +19,7 @@ class ErrorResponse(Model):
     
         :param error: The error object.
         :type error:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.ErrorResponseError
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.ErrorResponseError
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_response_error.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_response_error.py
    similarity index 89%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_response_error.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_response_error.py
    index 880ecffb2ed3..3a5da8c5163a 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_response_error.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_response_error.py
    @@ -24,7 +24,7 @@ class ErrorResponseError(Error):
          'OperationNotFound', 'ServiceError', 'ValidationFailure',
          'ExtractionFailure'
         :type code: str or
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.ErrorCodeType
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.ErrorCodeType
         :param message: A human-readable representation of the error.
         :type message: str
         :param target: The target of the error.
    @@ -32,11 +32,11 @@ class ErrorResponseError(Error):
         :param details: An array of details about specific errors that led to this
          reported error.
         :type details:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.Error]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.Error]
         :param inner_error: An object containing more specific information than
          the current object about the error.
         :type inner_error:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.InnerErrorModel
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.InnerErrorModel
         """
     
         _validation = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_response_error_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_response_error_py3.py
    similarity index 89%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_response_error_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_response_error_py3.py
    index d873ed36878a..3a2560b88e62 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_response_error_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_response_error_py3.py
    @@ -24,7 +24,7 @@ class ErrorResponseError(Error):
          'OperationNotFound', 'ServiceError', 'ValidationFailure',
          'ExtractionFailure'
         :type code: str or
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.ErrorCodeType
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.ErrorCodeType
         :param message: A human-readable representation of the error.
         :type message: str
         :param target: The target of the error.
    @@ -32,11 +32,11 @@ class ErrorResponseError(Error):
         :param details: An array of details about specific errors that led to this
          reported error.
         :type details:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.Error]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.Error]
         :param inner_error: An object containing more specific information than
          the current object about the error.
         :type inner_error:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.InnerErrorModel
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.InnerErrorModel
         """
     
         _validation = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_response_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_response_py3.py
    similarity index 94%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_response_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_response_py3.py
    index c152b5a58f70..8f890e423869 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/error_response_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/error_response_py3.py
    @@ -19,7 +19,7 @@ class ErrorResponse(Model):
     
         :param error: The error object.
         :type error:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.ErrorResponseError
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.ErrorResponseError
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/feedback_record_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/feedback_record_dto.py
    new file mode 100644
    index 000000000000..ed2a7142a20b
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/feedback_record_dto.py
    @@ -0,0 +1,41 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class FeedbackRecordDTO(Model):
    +    """Active learning feedback record.
    +
    +    :param user_id: Unique identifier for the user.
    +    :type user_id: str
    +    :param user_question: The suggested question being provided as feedback.
    +    :type user_question: str
    +    :param qna_id: The qnaId for which the suggested question is provided as
    +     feedback.
    +    :type qna_id: int
    +    """
    +
    +    _validation = {
    +        'user_question': {'max_length': 1000},
    +    }
    +
    +    _attribute_map = {
    +        'user_id': {'key': 'userId', 'type': 'str'},
    +        'user_question': {'key': 'userQuestion', 'type': 'str'},
    +        'qna_id': {'key': 'qnaId', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(FeedbackRecordDTO, self).__init__(**kwargs)
    +        self.user_id = kwargs.get('user_id', None)
    +        self.user_question = kwargs.get('user_question', None)
    +        self.qna_id = kwargs.get('qna_id', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/feedback_record_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/feedback_record_dto_py3.py
    new file mode 100644
    index 000000000000..7b06ed84a63f
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/feedback_record_dto_py3.py
    @@ -0,0 +1,41 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class FeedbackRecordDTO(Model):
    +    """Active learning feedback record.
    +
    +    :param user_id: Unique identifier for the user.
    +    :type user_id: str
    +    :param user_question: The suggested question being provided as feedback.
    +    :type user_question: str
    +    :param qna_id: The qnaId for which the suggested question is provided as
    +     feedback.
    +    :type qna_id: int
    +    """
    +
    +    _validation = {
    +        'user_question': {'max_length': 1000},
    +    }
    +
    +    _attribute_map = {
    +        'user_id': {'key': 'userId', 'type': 'str'},
    +        'user_question': {'key': 'userQuestion', 'type': 'str'},
    +        'qna_id': {'key': 'qnaId', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, user_id: str=None, user_question: str=None, qna_id: int=None, **kwargs) -> None:
    +        super(FeedbackRecordDTO, self).__init__(**kwargs)
    +        self.user_id = user_id
    +        self.user_question = user_question
    +        self.qna_id = qna_id
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/feedback_records_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/feedback_records_dto.py
    new file mode 100644
    index 000000000000..62fd82c1bc4b
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/feedback_records_dto.py
    @@ -0,0 +1,29 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class FeedbackRecordsDTO(Model):
    +    """Active learning feedback records.
    +
    +    :param feedback_records: List of feedback records.
    +    :type feedback_records:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.FeedbackRecordDTO]
    +    """
    +
    +    _attribute_map = {
    +        'feedback_records': {'key': 'feedbackRecords', 'type': '[FeedbackRecordDTO]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(FeedbackRecordsDTO, self).__init__(**kwargs)
    +        self.feedback_records = kwargs.get('feedback_records', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/feedback_records_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/feedback_records_dto_py3.py
    new file mode 100644
    index 000000000000..0c1ab0a961ad
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/feedback_records_dto_py3.py
    @@ -0,0 +1,29 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class FeedbackRecordsDTO(Model):
    +    """Active learning feedback records.
    +
    +    :param feedback_records: List of feedback records.
    +    :type feedback_records:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.FeedbackRecordDTO]
    +    """
    +
    +    _attribute_map = {
    +        'feedback_records': {'key': 'feedbackRecords', 'type': '[FeedbackRecordDTO]'},
    +    }
    +
    +    def __init__(self, *, feedback_records=None, **kwargs) -> None:
    +        super(FeedbackRecordsDTO, self).__init__(**kwargs)
    +        self.feedback_records = feedback_records
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/inner_error_model.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/inner_error_model.py
    similarity index 94%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/inner_error_model.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/inner_error_model.py
    index 1d269d275710..ba0c00c463ac 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/inner_error_model.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/inner_error_model.py
    @@ -23,7 +23,7 @@ class InnerErrorModel(Model):
         :param inner_error: An object containing more specific information than
          the current object about the error.
         :type inner_error:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.InnerErrorModel
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.InnerErrorModel
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/inner_error_model_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/inner_error_model_py3.py
    similarity index 94%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/inner_error_model_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/inner_error_model_py3.py
    index cfcb2930b969..4b3fbbcf4db4 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/inner_error_model_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/inner_error_model_py3.py
    @@ -23,7 +23,7 @@ class InnerErrorModel(Model):
         :param inner_error: An object containing more specific information than
          the current object about the error.
         :type inner_error:
    -     ~azure.cognitiveservices.knowledge.qnamaker.models.InnerErrorModel
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.InnerErrorModel
         """
     
         _attribute_map = {
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/metadata_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/metadata_dto.py
    new file mode 100644
    index 000000000000..ad81d7a694a1
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/metadata_dto.py
    @@ -0,0 +1,39 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class MetadataDTO(Model):
    +    """Name - value pair of metadata.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. Metadata name.
    +    :type name: str
    +    :param value: Required. Metadata value.
    +    :type value: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True, 'max_length': 100, 'min_length': 1},
    +        'value': {'required': True, 'max_length': 500, 'min_length': 1},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(MetadataDTO, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.value = kwargs.get('value', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/metadata_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/metadata_dto_py3.py
    new file mode 100644
    index 000000000000..da4c1d010f8c
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/metadata_dto_py3.py
    @@ -0,0 +1,39 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class MetadataDTO(Model):
    +    """Name - value pair of metadata.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. Metadata name.
    +    :type name: str
    +    :param value: Required. Metadata value.
    +    :type value: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True, 'max_length': 100, 'min_length': 1},
    +        'value': {'required': True, 'max_length': 500, 'min_length': 1},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, name: str, value: str, **kwargs) -> None:
    +        super(MetadataDTO, self).__init__(**kwargs)
    +        self.name = name
    +        self.value = value
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/prompt_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/prompt_dto.py
    new file mode 100644
    index 000000000000..4bdd3b6905c7
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/prompt_dto.py
    @@ -0,0 +1,49 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class PromptDTO(Model):
    +    """Prompt for an answer.
    +
    +    :param display_order: Index of the prompt - used in ordering of the
    +     prompts
    +    :type display_order: int
    +    :param qna_id: Qna id corresponding to the prompt - if QnaId is present,
    +     QnADTO object is ignored.
    +    :type qna_id: int
    +    :param qna: QnADTO - Either QnaId or QnADTO needs to be present in a
    +     PromptDTO object
    +    :type qna:
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.PromptDTOQna
    +    :param display_text: Text displayed to represent a follow up question
    +     prompt
    +    :type display_text: str
    +    """
    +
    +    _validation = {
    +        'display_text': {'max_length': 200},
    +    }
    +
    +    _attribute_map = {
    +        'display_order': {'key': 'displayOrder', 'type': 'int'},
    +        'qna_id': {'key': 'qnaId', 'type': 'int'},
    +        'qna': {'key': 'qna', 'type': 'PromptDTOQna'},
    +        'display_text': {'key': 'displayText', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PromptDTO, self).__init__(**kwargs)
    +        self.display_order = kwargs.get('display_order', None)
    +        self.qna_id = kwargs.get('qna_id', None)
    +        self.qna = kwargs.get('qna', None)
    +        self.display_text = kwargs.get('display_text', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/prompt_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/prompt_dto_py3.py
    new file mode 100644
    index 000000000000..b6be48cd9d72
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/prompt_dto_py3.py
    @@ -0,0 +1,49 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class PromptDTO(Model):
    +    """Prompt for an answer.
    +
    +    :param display_order: Index of the prompt - used in ordering of the
    +     prompts
    +    :type display_order: int
    +    :param qna_id: Qna id corresponding to the prompt - if QnaId is present,
    +     QnADTO object is ignored.
    +    :type qna_id: int
    +    :param qna: QnADTO - Either QnaId or QnADTO needs to be present in a
    +     PromptDTO object
    +    :type qna:
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.PromptDTOQna
    +    :param display_text: Text displayed to represent a follow up question
    +     prompt
    +    :type display_text: str
    +    """
    +
    +    _validation = {
    +        'display_text': {'max_length': 200},
    +    }
    +
    +    _attribute_map = {
    +        'display_order': {'key': 'displayOrder', 'type': 'int'},
    +        'qna_id': {'key': 'qnaId', 'type': 'int'},
    +        'qna': {'key': 'qna', 'type': 'PromptDTOQna'},
    +        'display_text': {'key': 'displayText', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, display_order: int=None, qna_id: int=None, qna=None, display_text: str=None, **kwargs) -> None:
    +        super(PromptDTO, self).__init__(**kwargs)
    +        self.display_order = display_order
    +        self.qna_id = qna_id
    +        self.qna = qna
    +        self.display_text = display_text
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/prompt_dto_qna.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/prompt_dto_qna.py
    new file mode 100644
    index 000000000000..7ada0fe375a0
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/prompt_dto_qna.py
    @@ -0,0 +1,53 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .qn_adto import QnADTO
    +
    +
    +class PromptDTOQna(QnADTO):
    +    """QnADTO - Either QnaId or QnADTO needs to be present in a PromptDTO object.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param id: Unique id for the Q-A.
    +    :type id: int
    +    :param answer: Required. Answer text
    +    :type answer: str
    +    :param source: Source from which Q-A was indexed. eg.
    +     https://docs.microsoft.com/en-us/azure/cognitive-services/QnAMaker/FAQs
    +    :type source: str
    +    :param questions: Required. List of questions associated with the answer.
    +    :type questions: list[str]
    +    :param metadata: List of metadata associated with the answer.
    +    :type metadata:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.MetadataDTO]
    +    :param context: Context of a QnA
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.QnADTOContext
    +    """
    +
    +    _validation = {
    +        'answer': {'required': True, 'max_length': 25000, 'min_length': 1},
    +        'source': {'max_length': 300},
    +        'questions': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'int'},
    +        'answer': {'key': 'answer', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'questions': {'key': 'questions', 'type': '[str]'},
    +        'metadata': {'key': 'metadata', 'type': '[MetadataDTO]'},
    +        'context': {'key': 'context', 'type': 'QnADTOContext'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PromptDTOQna, self).__init__(**kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/prompt_dto_qna_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/prompt_dto_qna_py3.py
    new file mode 100644
    index 000000000000..618fa7260f8c
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/prompt_dto_qna_py3.py
    @@ -0,0 +1,53 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .qn_adto_py3 import QnADTO
    +
    +
    +class PromptDTOQna(QnADTO):
    +    """QnADTO - Either QnaId or QnADTO needs to be present in a PromptDTO object.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param id: Unique id for the Q-A.
    +    :type id: int
    +    :param answer: Required. Answer text
    +    :type answer: str
    +    :param source: Source from which Q-A was indexed. eg.
    +     https://docs.microsoft.com/en-us/azure/cognitive-services/QnAMaker/FAQs
    +    :type source: str
    +    :param questions: Required. List of questions associated with the answer.
    +    :type questions: list[str]
    +    :param metadata: List of metadata associated with the answer.
    +    :type metadata:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.MetadataDTO]
    +    :param context: Context of a QnA
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.QnADTOContext
    +    """
    +
    +    _validation = {
    +        'answer': {'required': True, 'max_length': 25000, 'min_length': 1},
    +        'source': {'max_length': 300},
    +        'questions': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'int'},
    +        'answer': {'key': 'answer', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'questions': {'key': 'questions', 'type': '[str]'},
    +        'metadata': {'key': 'metadata', 'type': '[MetadataDTO]'},
    +        'context': {'key': 'context', 'type': 'QnADTOContext'},
    +    }
    +
    +    def __init__(self, *, answer: str, questions, id: int=None, source: str=None, metadata=None, context=None, **kwargs) -> None:
    +        super(PromptDTOQna, self).__init__(id=id, answer=answer, source=source, questions=questions, metadata=metadata, context=context, **kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_adto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_adto.py
    similarity index 85%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_adto.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_adto.py
    index 41436a02cd6d..9854cb76eed5 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_adto.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_adto.py
    @@ -28,7 +28,10 @@ class QnADTO(Model):
         :type questions: list[str]
         :param metadata: List of metadata associated with the answer.
         :type metadata:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.MetadataDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.MetadataDTO]
    +    :param context: Context of a QnA
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.QnADTOContext
         """
     
         _validation = {
    @@ -43,6 +46,7 @@ class QnADTO(Model):
             'source': {'key': 'source', 'type': 'str'},
             'questions': {'key': 'questions', 'type': '[str]'},
             'metadata': {'key': 'metadata', 'type': '[MetadataDTO]'},
    +        'context': {'key': 'context', 'type': 'QnADTOContext'},
         }
     
         def __init__(self, **kwargs):
    @@ -52,3 +56,4 @@ def __init__(self, **kwargs):
             self.source = kwargs.get('source', None)
             self.questions = kwargs.get('questions', None)
             self.metadata = kwargs.get('metadata', None)
    +        self.context = kwargs.get('context', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_adto_context.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_adto_context.py
    new file mode 100644
    index 000000000000..13056894f3aa
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_adto_context.py
    @@ -0,0 +1,39 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .context_dto import ContextDTO
    +
    +
    +class QnADTOContext(ContextDTO):
    +    """Context of a QnA.
    +
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    :param prompts: List of prompts associated with the answer.
    +    :type prompts:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.PromptDTO]
    +    """
    +
    +    _validation = {
    +        'prompts': {'max_items': 20},
    +    }
    +
    +    _attribute_map = {
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +        'prompts': {'key': 'prompts', 'type': '[PromptDTO]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(QnADTOContext, self).__init__(**kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_adto_context_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_adto_context_py3.py
    new file mode 100644
    index 000000000000..9b7fa5d4e33f
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_adto_context_py3.py
    @@ -0,0 +1,39 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .context_dto_py3 import ContextDTO
    +
    +
    +class QnADTOContext(ContextDTO):
    +    """Context of a QnA.
    +
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    :param prompts: List of prompts associated with the answer.
    +    :type prompts:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.PromptDTO]
    +    """
    +
    +    _validation = {
    +        'prompts': {'max_items': 20},
    +    }
    +
    +    _attribute_map = {
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +        'prompts': {'key': 'prompts', 'type': '[PromptDTO]'},
    +    }
    +
    +    def __init__(self, *, is_context_only: bool=None, prompts=None, **kwargs) -> None:
    +        super(QnADTOContext, self).__init__(is_context_only=is_context_only, prompts=prompts, **kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_adto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_adto_py3.py
    similarity index 83%
    rename from sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_adto_py3.py
    rename to sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_adto_py3.py
    index b3e56678a49b..f0967bab95fe 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/models/qn_adto_py3.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_adto_py3.py
    @@ -28,7 +28,10 @@ class QnADTO(Model):
         :type questions: list[str]
         :param metadata: List of metadata associated with the answer.
         :type metadata:
    -     list[~azure.cognitiveservices.knowledge.qnamaker.models.MetadataDTO]
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.MetadataDTO]
    +    :param context: Context of a QnA
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.QnADTOContext
         """
     
         _validation = {
    @@ -43,12 +46,14 @@ class QnADTO(Model):
             'source': {'key': 'source', 'type': 'str'},
             'questions': {'key': 'questions', 'type': '[str]'},
             'metadata': {'key': 'metadata', 'type': '[MetadataDTO]'},
    +        'context': {'key': 'context', 'type': 'QnADTOContext'},
         }
     
    -    def __init__(self, *, answer: str, questions, id: int=None, source: str=None, metadata=None, **kwargs) -> None:
    +    def __init__(self, *, answer: str, questions, id: int=None, source: str=None, metadata=None, context=None, **kwargs) -> None:
             super(QnADTO, self).__init__(**kwargs)
             self.id = id
             self.answer = answer
             self.source = source
             self.questions = questions
             self.metadata = metadata
    +        self.context = context
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_amaker_runtime_client_enums.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_amaker_runtime_client_enums.py
    new file mode 100644
    index 000000000000..c523cb290231
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_amaker_runtime_client_enums.py
    @@ -0,0 +1,30 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from enum import Enum
    +
    +
    +class ErrorCodeType(str, Enum):
    +
    +    bad_argument = "BadArgument"
    +    forbidden = "Forbidden"
    +    not_found = "NotFound"
    +    kb_not_found = "KbNotFound"
    +    unauthorized = "Unauthorized"
    +    unspecified = "Unspecified"
    +    endpoint_keys_error = "EndpointKeysError"
    +    quota_exceeded = "QuotaExceeded"
    +    qna_runtime_error = "QnaRuntimeError"
    +    sku_limit_exceeded = "SKULimitExceeded"
    +    operation_not_found = "OperationNotFound"
    +    service_error = "ServiceError"
    +    validation_failure = "ValidationFailure"
    +    extraction_failure = "ExtractionFailure"
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result.py
    new file mode 100644
    index 000000000000..7964315961b6
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result.py
    @@ -0,0 +1,54 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class QnASearchResult(Model):
    +    """Represents Search Result.
    +
    +    :param questions: List of questions.
    +    :type questions: list[str]
    +    :param answer: Answer.
    +    :type answer: str
    +    :param score: Search result score.
    +    :type score: float
    +    :param id: Id of the QnA result.
    +    :type id: int
    +    :param source: Source of QnA result.
    +    :type source: str
    +    :param metadata: List of metadata.
    +    :type metadata:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.MetadataDTO]
    +    :param context: Context object of the QnA
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.QnASearchResultContext
    +    """
    +
    +    _attribute_map = {
    +        'questions': {'key': 'questions', 'type': '[str]'},
    +        'answer': {'key': 'answer', 'type': 'str'},
    +        'score': {'key': 'score', 'type': 'float'},
    +        'id': {'key': 'id', 'type': 'int'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'metadata': {'key': 'metadata', 'type': '[MetadataDTO]'},
    +        'context': {'key': 'context', 'type': 'QnASearchResultContext'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(QnASearchResult, self).__init__(**kwargs)
    +        self.questions = kwargs.get('questions', None)
    +        self.answer = kwargs.get('answer', None)
    +        self.score = kwargs.get('score', None)
    +        self.id = kwargs.get('id', None)
    +        self.source = kwargs.get('source', None)
    +        self.metadata = kwargs.get('metadata', None)
    +        self.context = kwargs.get('context', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_context.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_context.py
    new file mode 100644
    index 000000000000..4a58dc097040
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_context.py
    @@ -0,0 +1,39 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .context_dto import ContextDTO
    +
    +
    +class QnASearchResultContext(ContextDTO):
    +    """Context object of the QnA.
    +
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    :param prompts: List of prompts associated with the answer.
    +    :type prompts:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.PromptDTO]
    +    """
    +
    +    _validation = {
    +        'prompts': {'max_items': 20},
    +    }
    +
    +    _attribute_map = {
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +        'prompts': {'key': 'prompts', 'type': '[PromptDTO]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(QnASearchResultContext, self).__init__(**kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_context_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_context_py3.py
    new file mode 100644
    index 000000000000..635660459e0e
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_context_py3.py
    @@ -0,0 +1,39 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .context_dto_py3 import ContextDTO
    +
    +
    +class QnASearchResultContext(ContextDTO):
    +    """Context object of the QnA.
    +
    +    :param is_context_only: To mark if a prompt is relevant only with a
    +     previous question or not.
    +     true - Do not include this QnA as search result for queries without
    +     context
    +     false - ignores context and includes this QnA in search result
    +    :type is_context_only: bool
    +    :param prompts: List of prompts associated with the answer.
    +    :type prompts:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.PromptDTO]
    +    """
    +
    +    _validation = {
    +        'prompts': {'max_items': 20},
    +    }
    +
    +    _attribute_map = {
    +        'is_context_only': {'key': 'isContextOnly', 'type': 'bool'},
    +        'prompts': {'key': 'prompts', 'type': '[PromptDTO]'},
    +    }
    +
    +    def __init__(self, *, is_context_only: bool=None, prompts=None, **kwargs) -> None:
    +        super(QnASearchResultContext, self).__init__(is_context_only=is_context_only, prompts=prompts, **kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_list.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_list.py
    new file mode 100644
    index 000000000000..202d3fd5dbaf
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_list.py
    @@ -0,0 +1,29 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class QnASearchResultList(Model):
    +    """Represents List of Question Answers.
    +
    +    :param answers: Represents Search Result list.
    +    :type answers:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.QnASearchResult]
    +    """
    +
    +    _attribute_map = {
    +        'answers': {'key': 'answers', 'type': '[QnASearchResult]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(QnASearchResultList, self).__init__(**kwargs)
    +        self.answers = kwargs.get('answers', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_list_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_list_py3.py
    new file mode 100644
    index 000000000000..ef0a20b5b495
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_list_py3.py
    @@ -0,0 +1,29 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class QnASearchResultList(Model):
    +    """Represents List of Question Answers.
    +
    +    :param answers: Represents Search Result list.
    +    :type answers:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.QnASearchResult]
    +    """
    +
    +    _attribute_map = {
    +        'answers': {'key': 'answers', 'type': '[QnASearchResult]'},
    +    }
    +
    +    def __init__(self, *, answers=None, **kwargs) -> None:
    +        super(QnASearchResultList, self).__init__(**kwargs)
    +        self.answers = answers
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_py3.py
    new file mode 100644
    index 000000000000..e342f66d11a8
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/qn_asearch_result_py3.py
    @@ -0,0 +1,54 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class QnASearchResult(Model):
    +    """Represents Search Result.
    +
    +    :param questions: List of questions.
    +    :type questions: list[str]
    +    :param answer: Answer.
    +    :type answer: str
    +    :param score: Search result score.
    +    :type score: float
    +    :param id: Id of the QnA result.
    +    :type id: int
    +    :param source: Source of QnA result.
    +    :type source: str
    +    :param metadata: List of metadata.
    +    :type metadata:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.MetadataDTO]
    +    :param context: Context object of the QnA
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.QnASearchResultContext
    +    """
    +
    +    _attribute_map = {
    +        'questions': {'key': 'questions', 'type': '[str]'},
    +        'answer': {'key': 'answer', 'type': 'str'},
    +        'score': {'key': 'score', 'type': 'float'},
    +        'id': {'key': 'id', 'type': 'int'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'metadata': {'key': 'metadata', 'type': '[MetadataDTO]'},
    +        'context': {'key': 'context', 'type': 'QnASearchResultContext'},
    +    }
    +
    +    def __init__(self, *, questions=None, answer: str=None, score: float=None, id: int=None, source: str=None, metadata=None, context=None, **kwargs) -> None:
    +        super(QnASearchResult, self).__init__(**kwargs)
    +        self.questions = questions
    +        self.answer = answer
    +        self.score = score
    +        self.id = id
    +        self.source = source
    +        self.metadata = metadata
    +        self.context = context
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_context_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_context_dto.py
    new file mode 100644
    index 000000000000..5a96679211d0
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_context_dto.py
    @@ -0,0 +1,32 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class QueryContextDTO(Model):
    +    """Context object with previous QnA's information.
    +
    +    :param previous_qna_id: Previous QnA Id - qnaId of the top result.
    +    :type previous_qna_id: str
    +    :param previous_user_query: Previous user query.
    +    :type previous_user_query: str
    +    """
    +
    +    _attribute_map = {
    +        'previous_qna_id': {'key': 'previousQnaId', 'type': 'str'},
    +        'previous_user_query': {'key': 'previousUserQuery', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(QueryContextDTO, self).__init__(**kwargs)
    +        self.previous_qna_id = kwargs.get('previous_qna_id', None)
    +        self.previous_user_query = kwargs.get('previous_user_query', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_context_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_context_dto_py3.py
    new file mode 100644
    index 000000000000..fe3b7c9b258b
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_context_dto_py3.py
    @@ -0,0 +1,32 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class QueryContextDTO(Model):
    +    """Context object with previous QnA's information.
    +
    +    :param previous_qna_id: Previous QnA Id - qnaId of the top result.
    +    :type previous_qna_id: str
    +    :param previous_user_query: Previous user query.
    +    :type previous_user_query: str
    +    """
    +
    +    _attribute_map = {
    +        'previous_qna_id': {'key': 'previousQnaId', 'type': 'str'},
    +        'previous_user_query': {'key': 'previousUserQuery', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, previous_qna_id: str=None, previous_user_query: str=None, **kwargs) -> None:
    +        super(QueryContextDTO, self).__init__(**kwargs)
    +        self.previous_qna_id = previous_qna_id
    +        self.previous_user_query = previous_user_query
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_dto.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_dto.py
    new file mode 100644
    index 000000000000..1cc5c118e0af
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_dto.py
    @@ -0,0 +1,64 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class QueryDTO(Model):
    +    """POST body schema to query the knowledgebase.
    +
    +    :param qna_id: Exact qnaId to fetch from the knowledgebase, this field
    +     takes priority over question.
    +    :type qna_id: str
    +    :param question: User question to query against the knowledge base.
    +    :type question: str
    +    :param top: Max number of answers to be returned for the question.
    +    :type top: int
    +    :param user_id: Unique identifier for the user.
    +    :type user_id: str
    +    :param is_test: Query against the test index.
    +    :type is_test: bool
    +    :param score_threshold: Threshold for answers returned based on score.
    +    :type score_threshold: float
    +    :param context: Context object with previous QnA's information.
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.QueryDTOContext
    +    :param ranker_type: Optional field. Set to 'QuestionOnly' for using a
    +     question only Ranker.
    +    :type ranker_type: str
    +    :param strict_filters: Find only answers that contain these metadata.
    +    :type strict_filters:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.MetadataDTO]
    +    """
    +
    +    _attribute_map = {
    +        'qna_id': {'key': 'qnaId', 'type': 'str'},
    +        'question': {'key': 'question', 'type': 'str'},
    +        'top': {'key': 'top', 'type': 'int'},
    +        'user_id': {'key': 'userId', 'type': 'str'},
    +        'is_test': {'key': 'isTest', 'type': 'bool'},
    +        'score_threshold': {'key': 'scoreThreshold', 'type': 'float'},
    +        'context': {'key': 'context', 'type': 'QueryDTOContext'},
    +        'ranker_type': {'key': 'rankerType', 'type': 'str'},
    +        'strict_filters': {'key': 'strictFilters', 'type': '[MetadataDTO]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(QueryDTO, self).__init__(**kwargs)
    +        self.qna_id = kwargs.get('qna_id', None)
    +        self.question = kwargs.get('question', None)
    +        self.top = kwargs.get('top', None)
    +        self.user_id = kwargs.get('user_id', None)
    +        self.is_test = kwargs.get('is_test', None)
    +        self.score_threshold = kwargs.get('score_threshold', None)
    +        self.context = kwargs.get('context', None)
    +        self.ranker_type = kwargs.get('ranker_type', None)
    +        self.strict_filters = kwargs.get('strict_filters', None)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_dto_context.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_dto_context.py
    new file mode 100644
    index 000000000000..3886ef6aab75
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_dto_context.py
    @@ -0,0 +1,30 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .query_context_dto import QueryContextDTO
    +
    +
    +class QueryDTOContext(QueryContextDTO):
    +    """Context object with previous QnA's information.
    +
    +    :param previous_qna_id: Previous QnA Id - qnaId of the top result.
    +    :type previous_qna_id: str
    +    :param previous_user_query: Previous user query.
    +    :type previous_user_query: str
    +    """
    +
    +    _attribute_map = {
    +        'previous_qna_id': {'key': 'previousQnaId', 'type': 'str'},
    +        'previous_user_query': {'key': 'previousUserQuery', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(QueryDTOContext, self).__init__(**kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_dto_context_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_dto_context_py3.py
    new file mode 100644
    index 000000000000..82ce5244d40d
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_dto_context_py3.py
    @@ -0,0 +1,30 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .query_context_dto_py3 import QueryContextDTO
    +
    +
    +class QueryDTOContext(QueryContextDTO):
    +    """Context object with previous QnA's information.
    +
    +    :param previous_qna_id: Previous QnA Id - qnaId of the top result.
    +    :type previous_qna_id: str
    +    :param previous_user_query: Previous user query.
    +    :type previous_user_query: str
    +    """
    +
    +    _attribute_map = {
    +        'previous_qna_id': {'key': 'previousQnaId', 'type': 'str'},
    +        'previous_user_query': {'key': 'previousUserQuery', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, previous_qna_id: str=None, previous_user_query: str=None, **kwargs) -> None:
    +        super(QueryDTOContext, self).__init__(previous_qna_id=previous_qna_id, previous_user_query=previous_user_query, **kwargs)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_dto_py3.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_dto_py3.py
    new file mode 100644
    index 000000000000..51134861cc4a
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/models/query_dto_py3.py
    @@ -0,0 +1,64 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +
    +
    +class QueryDTO(Model):
    +    """POST body schema to query the knowledgebase.
    +
    +    :param qna_id: Exact qnaId to fetch from the knowledgebase, this field
    +     takes priority over question.
    +    :type qna_id: str
    +    :param question: User question to query against the knowledge base.
    +    :type question: str
    +    :param top: Max number of answers to be returned for the question.
    +    :type top: int
    +    :param user_id: Unique identifier for the user.
    +    :type user_id: str
    +    :param is_test: Query against the test index.
    +    :type is_test: bool
    +    :param score_threshold: Threshold for answers returned based on score.
    +    :type score_threshold: float
    +    :param context: Context object with previous QnA's information.
    +    :type context:
    +     ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.QueryDTOContext
    +    :param ranker_type: Optional field. Set to 'QuestionOnly' for using a
    +     question only Ranker.
    +    :type ranker_type: str
    +    :param strict_filters: Find only answers that contain these metadata.
    +    :type strict_filters:
    +     list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.MetadataDTO]
    +    """
    +
    +    _attribute_map = {
    +        'qna_id': {'key': 'qnaId', 'type': 'str'},
    +        'question': {'key': 'question', 'type': 'str'},
    +        'top': {'key': 'top', 'type': 'int'},
    +        'user_id': {'key': 'userId', 'type': 'str'},
    +        'is_test': {'key': 'isTest', 'type': 'bool'},
    +        'score_threshold': {'key': 'scoreThreshold', 'type': 'float'},
    +        'context': {'key': 'context', 'type': 'QueryDTOContext'},
    +        'ranker_type': {'key': 'rankerType', 'type': 'str'},
    +        'strict_filters': {'key': 'strictFilters', 'type': '[MetadataDTO]'},
    +    }
    +
    +    def __init__(self, *, qna_id: str=None, question: str=None, top: int=None, user_id: str=None, is_test: bool=None, score_threshold: float=None, context=None, ranker_type: str=None, strict_filters=None, **kwargs) -> None:
    +        super(QueryDTO, self).__init__(**kwargs)
    +        self.qna_id = qna_id
    +        self.question = question
    +        self.top = top
    +        self.user_id = user_id
    +        self.is_test = is_test
    +        self.score_threshold = score_threshold
    +        self.context = context
    +        self.ranker_type = ranker_type
    +        self.strict_filters = strict_filters
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/operations/__init__.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/operations/__init__.py
    new file mode 100644
    index 000000000000..cf82a2663407
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/operations/__init__.py
    @@ -0,0 +1,16 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from .runtime_operations import RuntimeOperations
    +
    +__all__ = [
    +    'RuntimeOperations',
    +]
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/operations/runtime_operations.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/operations/runtime_operations.py
    new file mode 100644
    index 000000000000..4e2e85a3ac87
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/operations/runtime_operations.py
    @@ -0,0 +1,148 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.pipeline import ClientRawResponse
    +
    +from .. import models
    +
    +
    +class RuntimeOperations(object):
    +    """RuntimeOperations operations.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self.config = config
    +
    +    def generate_answer(
    +            self, kb_id, generate_answer_payload, custom_headers=None, raw=False, **operation_config):
    +        """GenerateAnswer call to query the knowledgebase.
    +
    +        :param kb_id: Knowledgebase id.
    +        :type kb_id: str
    +        :param generate_answer_payload: Post body of the request.
    +        :type generate_answer_payload:
    +         ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.QueryDTO
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: QnASearchResultList or ClientRawResponse if raw=true
    +        :rtype:
    +         ~azure.cognitiveservices.knowledge.qnamaker.runtime.models.QnASearchResultList
    +         or ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        # Construct URL
    +        url = self.generate_answer.metadata['url']
    +        path_format_arguments = {
    +            'RuntimeEndpoint': self._serialize.url("self.config.runtime_endpoint", self.config.runtime_endpoint, 'str', skip_quote=True),
    +            'kbId': self._serialize.url("kb_id", kb_id, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +
    +        # Construct body
    +        body_content = self._serialize.body(generate_answer_payload, 'QueryDTO')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorResponseException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('QnASearchResultList', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    generate_answer.metadata = {'url': '/knowledgebases/{kbId}/generateAnswer'}
    +
    +    def train(
    +            self, kb_id, feedback_records=None, custom_headers=None, raw=False, **operation_config):
    +        """Train call to add suggestions to the knowledgebase.
    +
    +        :param kb_id: Knowledgebase id.
    +        :type kb_id: str
    +        :param feedback_records: List of feedback records.
    +        :type feedback_records:
    +         list[~azure.cognitiveservices.knowledge.qnamaker.runtime.models.FeedbackRecordDTO]
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: None or ClientRawResponse if raw=true
    +        :rtype: None or ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        train_payload = models.FeedbackRecordsDTO(feedback_records=feedback_records)
    +
    +        # Construct URL
    +        url = self.train.metadata['url']
    +        path_format_arguments = {
    +            'RuntimeEndpoint': self._serialize.url("self.config.runtime_endpoint", self.config.runtime_endpoint, 'str', skip_quote=True),
    +            'kbId': self._serialize.url("kb_id", kb_id, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +
    +        # Construct body
    +        body_content = self._serialize.body(train_payload, 'FeedbackRecordsDTO')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [204]:
    +            raise models.ErrorResponseException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +    train.metadata = {'url': '/knowledgebases/{kbId}/train'}
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/qn_amaker_runtime_client.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/qn_amaker_runtime_client.py
    new file mode 100644
    index 000000000000..81acd86f0d79
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/qn_amaker_runtime_client.py
    @@ -0,0 +1,78 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.service_client import SDKClient
    +from msrest import Configuration, Serializer, Deserializer
    +from .version import VERSION
    +from .operations.runtime_operations import RuntimeOperations
    +from . import models
    +
    +
    +class QnAMakerRuntimeClientConfiguration(Configuration):
    +    """Configuration for QnAMakerRuntimeClient
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param runtime_endpoint: QnA Maker App Service endpoint (for example:
    +     https://{qnaservice-hostname}.azurewebsites.net).
    +    :type runtime_endpoint: str
    +    :param credentials: Subscription credentials which uniquely identify
    +     client subscription.
    +    :type credentials: None
    +    """
    +
    +    def __init__(
    +            self, runtime_endpoint, credentials):
    +
    +        if runtime_endpoint is None:
    +            raise ValueError("Parameter 'runtime_endpoint' must not be None.")
    +        if credentials is None:
    +            raise ValueError("Parameter 'credentials' must not be None.")
    +        base_url = '{RuntimeEndpoint}/qnamaker'
    +
    +        super(QnAMakerRuntimeClientConfiguration, self).__init__(base_url)
    +
    +        self.add_user_agent('azure-cognitiveservices-knowledge-qnamaker/{}'.format(VERSION))
    +
    +        self.runtime_endpoint = runtime_endpoint
    +        self.credentials = credentials
    +
    +
    +class QnAMakerRuntimeClient(SDKClient):
    +    """An API for QnAMaker runtime
    +
    +    :ivar config: Configuration for client.
    +    :vartype config: QnAMakerRuntimeClientConfiguration
    +
    +    :ivar runtime: Runtime operations
    +    :vartype runtime: azure.cognitiveservices.knowledge.qnamaker.runtime.operations.RuntimeOperations
    +
    +    :param runtime_endpoint: QnA Maker App Service endpoint (for example:
    +     https://{qnaservice-hostname}.azurewebsites.net).
    +    :type runtime_endpoint: str
    +    :param credentials: Subscription credentials which uniquely identify
    +     client subscription.
    +    :type credentials: None
    +    """
    +
    +    def __init__(
    +            self, runtime_endpoint, credentials):
    +
    +        self.config = QnAMakerRuntimeClientConfiguration(runtime_endpoint, credentials)
    +        super(QnAMakerRuntimeClient, self).__init__(self.config.credentials, self.config)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '4.0'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +        self.runtime = RuntimeOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/version.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/version.py
    new file mode 100644
    index 000000000000..3faab2cb0b4a
    --- /dev/null
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/runtime/version.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "4.0"
    +
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/version.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/version.py
    index e0ec669828cb..c995f7836cef 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/version.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/azure/cognitiveservices/knowledge/qnamaker/version.py
    @@ -9,5 +9,4 @@
     # regenerated.
     # --------------------------------------------------------------------------
     
    -VERSION = "0.1.0"
    -
    +VERSION = "0.2.0"
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/setup.py b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/setup.py
    index b7127d1b7f19..93a4cededdd6 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/setup.py
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-knowledge-qnamaker/setup.py
    @@ -64,10 +64,10 @@
             'Programming Language :: Python :: 2',
             'Programming Language :: Python :: 2.7',
             'Programming Language :: Python :: 3',
    -        'Programming Language :: Python :: 3.4',
             'Programming Language :: Python :: 3.5',
             'Programming Language :: Python :: 3.6',
             'Programming Language :: Python :: 3.7',
    +        'Programming Language :: Python :: 3.8',
             'License :: OSI Approved :: MIT License',
         ],
         zip_safe=False,
    diff --git a/sdk/cognitiveservices/azure-cognitiveservices-vision-computervision/README.md b/sdk/cognitiveservices/azure-cognitiveservices-vision-computervision/README.md
    index b155aaec9693..0956f6eb55b0 100644
    --- a/sdk/cognitiveservices/azure-cognitiveservices-vision-computervision/README.md
    +++ b/sdk/cognitiveservices/azure-cognitiveservices-vision-computervision/README.md
    @@ -1,23 +1,331 @@
    -## Microsoft Azure SDK for Python
    +# Azure Cognitive Services Computer Vision SDK for Python
     
    -This is the Microsoft Azure Cognitive Services Computer Vision Client
    -Library.
    +The Computer Vision service provides developers with access to advanced algorithms for processing images and returning information. Computer Vision algorithms analyze the content of an image in different ways, depending on the visual features you're interested in.
     
    -This package has been tested with Python 2.7, 3.5, 3.6 and 3.7.
    +You can use Computer Vision in your application to:
     
    -For a more complete set of Azure libraries, see the
    -[azure](https://pypi.python.org/pypi/azure) bundle package.
    +- Analyze images for insight
    +- Extract text from images
    +- Generate thumbnails
    +
    +Looking for more documentation?
    +
    +* [SDK reference documentation](https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision)
    +* [Cognitive Services Computer Vision documentation](https://docs.microsoft.com/azure/cognitive-services/computer-vision/)
    +
    +## Prerequisites
    +
    +* Azure subscription - [Create a free account][azure_sub]
    +* Azure [Computer Vision resource][computervision_resource]
    +* [Python 3.6+][python]
    +
    +If you need a Computer Vision API account, you can create one with this [Azure CLI][azure_cli] command:
    +
    +```Bash
    +RES_REGION=westeurope
    +RES_GROUP=
    +ACCT_NAME=
    +
    +az cognitiveservices account create \
    +    --resource-group $RES_GROUP \
    +    --name $ACCT_NAME \
    +    --location $RES_REGION \
    +    --kind ComputerVision \
    +    --sku S1 \
    +    --yes
    +```
    +
    +## Installation
    +
    +Install the Azure Cognitive Services Computer Vision SDK with [pip][pip], optionally within a [virtual environment][venv].
    +
    +### Configure a virtual environment (optional)
    +
    +Although not required, you can keep your base system and Azure SDK environments isolated from one another if you use a [virtual environment][virtualenv]. Execute the following commands to configure and then enter a virtual environment with [venv][venv], such as `cogsrv-vision-env`:
    +
    +```Bash
    +python3 -m venv cogsrv-vision-env
    +source cogsrv-vision-env/bin/activate
    +```
    +
    +### Install the SDK
    +
    +Install the Azure Cognitive Services Computer Vision SDK for Python [package][pypi_computervision] with [pip][pip]:
    +
    +```Bash
    +pip install azure-cognitiveservices-vision-computervision
    +```
    +
    +## Authentication
    +
    +Once you create your Computer Vision resource, you need its **region**, and one of its **account keys** to instantiate the client object.
    +
    +Use these values when you create the instance of the [ComputerVisionClient][ref_computervisionclient] client object.
    +
    +### Get credentials
    +
    +Use the [Azure CLI][cloud_shell] snippet below to populate two environment variables with the Computer Vision account **region** and one of its **keys** (you can also find these values in the [Azure portal][azure_portal]). The snippet is formatted for the Bash shell.
    +
    +```Bash
    +RES_GROUP=
    +ACCT_NAME=
    +
    +export ACCOUNT_REGION=$(az cognitiveservices account show \
    +    --resource-group $RES_GROUP \
    +    --name $ACCT_NAME \
    +    --query location \
    +    --output tsv)
    +
    +export ACCOUNT_KEY=$(az cognitiveservices account keys list \
    +    --resource-group $RES_GROUP \
    +    --name $ACCT_NAME \
    +    --query key1 \
    +    --output tsv)
    +```
    +
    +### Create client
    +
    +Once you've populated the `ACCOUNT_REGION` and `ACCOUNT_KEY` environment variables, you can create the [ComputerVisionClient][ref_computervisionclient] client object.
    +
    +```Python
    +from azure.cognitiveservices.vision.computervision import ComputerVisionClient
    +from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes
    +from msrest.authentication import CognitiveServicesCredentials
    +
    +import os
    +region = os.environ['ACCOUNT_REGION']
    +key = os.environ['ACCOUNT_KEY']
    +
    +credentials = CognitiveServicesCredentials(key)
    +client = ComputerVisionClient(
    +    endpoint="https://" + region + ".api.cognitive.microsoft.com/",
    +    credentials=credentials
    +)
    +```
     
     ## Usage
     
    -For code examples, see [Cognitive Services Computer
    -Vision](https://docs.microsoft.com/python/api/overview/azure/cognitive-services)
    -on docs.microsoft.com.
    +Once you've initialized a [ComputerVisionClient][ref_computervisionclient] client object, you can:
    +
    +* Analyze an image: You can analyze an image for certain features such as faces, colors, tags.
    +* Generate thumbnails: Create a custom JPEG image to use as a thumbnail of the original image.
    +* Get description of an image: Get a description of the image based on its subject domain.
    +
    +For more information about this service, see [What is Computer Vision?][computervision_docs].
    +
    +## Examples
    +
    +The following sections provide several code snippets covering some of the most common Computer Vision tasks, including:
    +
    +* [Analyze an image](#analyze-an-image)
    +* [Get subject domain list](#get-subject-domain-list)
    +* [Analyze an image by domain](#analyze-an-image-by-domain)
    +* [Get text description of an image](#get-text-description-of-an-image)
    +* [Get handwritten text from image](#get-text-from-image)
    +* [Generate thumbnail](#generate-thumbnail)
    +
    +### Analyze an image
    +
    +You can analyze an image for certain features with [`analyze_image`][ref_computervisionclient_analyze_image]. Use the [`visual_features`][ref_computervision_model_visualfeatures] property to set the types of analysis to perform on the image. Common values are `VisualFeatureTypes.tags` and `VisualFeatureTypes.description`.
    +
    +```Python
    +url = "https://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Broadway_and_Times_Square_by_night.jpg/450px-Broadway_and_Times_Square_by_night.jpg"
    +
    +image_analysis = client.analyze_image(url,visual_features=[VisualFeatureTypes.tags])
    +
    +for tag in image_analysis.tags:
    +    print(tag)
    +```
    +
    +### Get subject domain list
    +
    +Review the subject domains used to analyze your image with [`list_models`][ref_computervisionclient_list_models]. These domain names are used when [analyzing an image by domain](#analyze-an-image-by-domain). An example of a domain is `landmarks`.
    +
    +```Python
    +models = client.list_models()
    +
    +for x in models.models_property:
    +    print(x)
    +```
    +
    +### Analyze an image by domain
    +
    +You can analyze an image by subject domain with [`analyze_image_by_domain`][ref_computervisionclient_analyze_image_by_domain]. Get the [list of supported subject domains](#get-subject-domain-list) in order to use the correct domain name.
    +
    +```Python
    +domain = "landmarks"
    +url = "https://images.pexels.com/photos/338515/pexels-photo-338515.jpeg"
    +language = "en"
    +
    +analysis = client.analyze_image_by_domain(domain, url, language)
    +
    +for landmark in analysis.result["landmarks"]:
    +    print(landmark["name"])
    +    print(landmark["confidence"])
    +```
    +
    +### Get text description of an image
    +
    +You can get a language-based text description of an image with [`describe_image`][ref_computervisionclient_describe_image]. Request several descriptions with the `max_description` property if you are doing text analysis for keywords associated with the image. Examples of a text description for the following image include `a train crossing a bridge over a body of water`, `a large bridge over a body of water`, and `a train crossing a bridge over a large body of water`.
    +
    +```Python
    +domain = "landmarks"
    +url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
    +language = "en"
    +max_descriptions = 3
    +
    +analysis = client.describe_image(url, max_descriptions, language)
    +
    +for caption in analysis.captions:
    +    print(caption.text)
    +    print(caption.confidence)
    +```
    +
    +### Get text from image
    +
    +You can get any handwritten or printed text from an image. This requires two calls to the SDK: [`recognize_text`][ref_computervisionclient_recognize_text] and [`get_text_operation_result`][ref_computervisionclient_get_text_operation_result]. The call to recognize_text is asynchronous. In the results of the get_text_operation_result call, you need to check if the first call completed with [`TextOperationStatusCodes`][ref_computervision_model_textoperationstatuscodes] before extracting the text data. The results include the text as well as the bounding box coordinates for the text.
    +
    +```Python
    +# import models
    +from azure.cognitiveservices.vision.computervision.models import TextRecognitionMode
    +from azure.cognitiveservices.vision.computervision.models import TextOperationStatusCodes
    +
    +url = "https://github.com/Azure-Samples/cognitive-services-python-sdk-samples/raw/master/samples/vision/images/make_things_happen.jpg"
    +mode = TextRecognitionMode.printed
    +raw = True
    +custom_headers = None
    +numberOfCharsInOperationId = 36
    +
    +# SDK call
    +rawHttpResponse = client.recognize_text(url, mode, custom_headers,  raw)
    +
    +# Get ID from returned headers
    +operationLocation = rawHttpResponse.headers["Operation-Location"]
    +idLocation = len(operationLocation) - numberOfCharsInOperationId
    +operationId = operationLocation[idLocation:]
    +
    +# SDK call
    +result = client.get_text_operation_result(operationId)
    +
    +# Get data
    +if result.status == TextOperationStatusCodes.succeeded:
    +
    +    for line in result.recognition_result.lines:
    +        print(line.text)
    +        print(line.bounding_box)
    +```
    +
    +### Generate thumbnail
    +
    +You can generate a thumbnail (JPG) of an image with [`generate_thumbnail`][ref_computervisionclient_generate_thumbnail]. The thumbnail does not need to be in the same proportions as the original image.
    +
    +This example uses the [Pillow][pypi_pillow] package to save the new thumbnail image locally.
    +
    +```Python
    +from PIL import Image
    +import io
    +
    +width = 50
    +height = 50
    +url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
    +
    +thumbnail = client.generate_thumbnail(width, height, url)
    +
    +for x in thumbnail:
    +    image = Image.open(io.BytesIO(x))
    +
    +image.save('thumbnail.jpg')
    +```
    +
    +## Troubleshooting
    +
    +### General
    +
    +When you interact with the [ComputerVisionClient][ref_computervisionclient] client object using the Python SDK, the [`ComputerVisionErrorException`][ref_computervision_computervisionerrorexception] class is used to return errors. Errors returned by the service correspond to the same HTTP status codes returned for REST API requests.
    +
    +For example, if you try to analyze an image with an invalid key, a `401` error is returned. In the following snippet, the [error][ref_httpfailure] is handled gracefully by catching the exception and displaying additional information about the error.
    +
    +```Python
    +
    +domain = "landmarks"
    +url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
    +language = "en"
    +max_descriptions = 3
    +
    +try:
    +    analysis = client.describe_image(url, max_descriptions, language)
    +
    +    for caption in analysis.captions:
    +        print(caption.text)
    +        print(caption.confidence)
    +except HTTPFailure as e:
    +    if e.status_code == 401:
    +        print("Error unauthorized. Make sure your key and region are correct.")
    +    else:
    +        raise
    +```
    +
    +### Handle transient errors with retries
    +
    +While working with the [ComputerVisionClient][ref_computervisionclient] client, you might encounter transient failures caused by [rate limits][computervision_request_units] enforced by the service, or other transient problems like network outages. For information about handling these types of failures, see [Retry pattern][azure_pattern_retry] in the Cloud Design Patterns guide, and the related [Circuit Breaker pattern][azure_pattern_circuit_breaker].
    +
    +## Next steps
    +
    +### More sample code
    +
    +Several Computer Vision Python SDK samples are available to you in the SDK's GitHub repository. These samples provide example code for additional scenarios commonly encountered while working with Computer Vision:
    +
    +* [recognize_text][recognize-text]
    +
    +### Additional documentation
    +
    +For more extensive documentation on the Computer Vision service, see the [Azure Computer Vision documentation][computervision_docs] on docs.microsoft.com.
    +
    +
    +[pip]: https://pypi.org/project/pip/
    +[python]: https://www.python.org/downloads/
    +
    +[azure_cli]: https://docs.microsoft.com/cli/azure
    +[azure_pattern_circuit_breaker]: https://docs.microsoft.com/azure/architecture/patterns/circuit-breaker
    +[azure_pattern_retry]: https://docs.microsoft.com/azure/architecture/patterns/retry
    +[azure_portal]: https://portal.azure.com
    +[azure_sub]: https://azure.microsoft.com/free/
    +
    +[cloud_shell]: https://docs.microsoft.com/azure/cloud-shell/overview
    +
    +[venv]: https://docs.python.org/3/library/venv.html
    +[virtualenv]: https://virtualenv.pypa.io
    +
    +[source_code]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/cognitiveservices/azure-cognitiveservices-vision-computervision
    +
    +[pypi_computervision]:https://pypi.org/project/azure-cognitiveservices-vision-computervision/
    +[pypi_pillow]:https://pypi.org/project/Pillow/
    +
    +[ref_computervision_sdk]: https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision?view=azure-python
    +[ref_computervision_computervisionerrorexception]:https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision.models.computervisionerrorexception?view=azure-python
    +[ref_httpfailure]: https://docs.microsoft.com/python/api/msrest/msrest.exceptions.httpoperationerror?view=azure-python
    +
    +
    +[computervision_resource]: https://docs.microsoft.com/azure/cognitive-services/computer-vision/vision-api-how-to-topics/howtosubscribe
    +
    +[computervision_docs]: https://docs.microsoft.com/azure/cognitive-services/computer-vision/home
    +
    +[ref_computervisionclient]: https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision.computervisionclient?view=azure-python
    +
    +
    +[ref_computervisionclient_analyze_image]: https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision.computervisionclient?view=azure-python#analyze-image-url--visual-features-none--details-none--language--en---custom-headers-none--raw-false----operation-config-
    +[ref_computervisionclient_list_models]:https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision.computervisionclient?view=azure-python#list-models-custom-headers-none--raw-false----operation-config-
    +[ref_computervisionclient_analyze_image_by_domain]:https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision.computervisionclient?view=azure-python#analyze-image-by-domain-model--url--language--en---custom-headers-none--raw-false----operation-config-
    +[ref_computervisionclient_describe_image]:https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision.computervisionclient?view=azure-python#describe-image-url--max-candidates--1---language--en---custom-headers-none--raw-false----operation-config-
    +[ref_computervisionclient_recognize_text]:https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision.computervisionclient?view=azure-python#recognize-text-url--mode--custom-headers-none--raw-false----operation-config-
    +[ref_computervisionclient_get_text_operation_result]:https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision.computervisionclient?view=azure-python#get-text-operation-result-operation-id--custom-headers-none--raw-false----operation-config-
    +[ref_computervisionclient_generate_thumbnail]:https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision.computervisionclient?view=azure-python#generate-thumbnail-width--height--url--smart-cropping-false--custom-headers-none--raw-false--callback-none----operation-config-
    +
    +
    +[ref_computervision_model_visualfeatures]:https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision.models.visualfeaturetypes?view=azure-python
     
    -## Provide Feedback
    +[ref_computervision_model_textoperationstatuscodes]:https://docs.microsoft.com/python/api/azure-cognitiveservices-vision-computervision/azure.cognitiveservices.vision.computervision.models.textoperationstatuscodes?view=azure-python
     
    -If you encounter any bugs or have suggestions, please file an issue in
    -the [Issues](https://github.com/Azure/azure-sdk-for-python/issues)
    -section of the project.
    +[computervision_request_units]:https://azure.microsoft.com/pricing/details/cognitive-services/computer-vision/
     
    -![image](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-cognitiveservices-vision-computervision%2FREADME.png)
    +[recognize-text]:https://github.com/Azure-Samples/cognitive-services-python-sdk-samples/blob/master/samples/vision/computer_vision_samples.py
    \ No newline at end of file
    diff --git a/sdk/compute/azure-mgmt-compute/CHANGELOG.md b/sdk/compute/azure-mgmt-compute/CHANGELOG.md
    index dcbbee154781..699eee7aba49 100644
    --- a/sdk/compute/azure-mgmt-compute/CHANGELOG.md
    +++ b/sdk/compute/azure-mgmt-compute/CHANGELOG.md
    @@ -1,5 +1,15 @@
     # Release History
     
    +## 11.1.0 (2020-03-09)
    +
    +**Features**
    +
    +- Operation VirtualMachineImagesOperations.list has a new parameter $expand
    +
    +**Bugfixes**
    +
    +- remove not-working $filter in Operation VirtualMachineImagesOperations.list
    +
     ## 11.0.0 (2020-02-27)
     
     **Features**
    diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2015_06_15/operations/_virtual_machine_images_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2015_06_15/operations/_virtual_machine_images_operations.py
    index 0da5efc30e1e..b279548d86cb 100644
    --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2015_06_15/operations/_virtual_machine_images_operations.py
    +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2015_06_15/operations/_virtual_machine_images_operations.py
    @@ -110,7 +110,7 @@ def get(
         get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}'}
     
         def list(
    -            self, location, publisher_name, offer, skus, filter=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
    +            self, location, publisher_name, offer, skus, expand=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
             """Gets a list of all virtual machine image versions for the specified
             location, publisher, offer, and SKU.
     
    @@ -122,8 +122,8 @@ def list(
             :type offer: str
             :param skus: A valid image SKU.
             :type skus: str
    -        :param filter: The filter to apply on the operation.
    -        :type filter: str
    +        :param expand: The expand expression to apply on the operation.
    +        :type expand: str
             :param top:
             :type top: int
             :param orderby:
    @@ -152,8 +152,8 @@ def list(
     
             # Construct parameters
             query_parameters = {}
    -        if filter is not None:
    -            query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +        if expand is not None:
    +            query_parameters['$expand'] = self._serialize.query("expand", expand, 'str')
             if top is not None:
                 query_parameters['$top'] = self._serialize.query("top", top, 'int')
             if orderby is not None:
    diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/operations/_virtual_machine_images_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/operations/_virtual_machine_images_operations.py
    index de506c154650..0ed06f5e9e19 100644
    --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/operations/_virtual_machine_images_operations.py
    +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/operations/_virtual_machine_images_operations.py
    @@ -110,7 +110,7 @@ def get(
         get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}'}
     
         def list(
    -            self, location, publisher_name, offer, skus, filter=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
    +            self, location, publisher_name, offer, skus, expand=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
             """Gets a list of all virtual machine image versions for the specified
             location, publisher, offer, and SKU.
     
    @@ -122,8 +122,8 @@ def list(
             :type offer: str
             :param skus: A valid image SKU.
             :type skus: str
    -        :param filter: The filter to apply on the operation.
    -        :type filter: str
    +        :param expand: The expand expression to apply on the operation.
    +        :type expand: str
             :param top:
             :type top: int
             :param orderby:
    @@ -152,8 +152,8 @@ def list(
     
             # Construct parameters
             query_parameters = {}
    -        if filter is not None:
    -            query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +        if expand is not None:
    +            query_parameters['$expand'] = self._serialize.query("expand", expand, 'str')
             if top is not None:
                 query_parameters['$top'] = self._serialize.query("top", top, 'int')
             if orderby is not None:
    diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_04_30_preview/operations/_virtual_machine_images_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_04_30_preview/operations/_virtual_machine_images_operations.py
    index c0652a323c5d..a2825293e114 100644
    --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_04_30_preview/operations/_virtual_machine_images_operations.py
    +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_04_30_preview/operations/_virtual_machine_images_operations.py
    @@ -111,7 +111,7 @@ def get(
         get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}'}
     
         def list(
    -            self, location, publisher_name, offer, skus, filter=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
    +            self, location, publisher_name, offer, skus, expand=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
             """Gets a list of all virtual machine image versions for the specified
             location, publisher, offer, and SKU.
     
    @@ -123,8 +123,8 @@ def list(
             :type offer: str
             :param skus: A valid image SKU.
             :type skus: str
    -        :param filter: The filter to apply on the operation.
    -        :type filter: str
    +        :param expand: The expand expression to apply on the operation.
    +        :type expand: str
             :param top:
             :type top: int
             :param orderby:
    @@ -153,8 +153,8 @@ def list(
     
             # Construct parameters
             query_parameters = {}
    -        if filter is not None:
    -            query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +        if expand is not None:
    +            query_parameters['$expand'] = self._serialize.query("expand", expand, 'str')
             if top is not None:
                 query_parameters['$top'] = self._serialize.query("top", top, 'int')
             if orderby is not None:
    diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/operations/_virtual_machine_images_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/operations/_virtual_machine_images_operations.py
    index e6a3b7fb53ca..349f328131da 100644
    --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/operations/_virtual_machine_images_operations.py
    +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/operations/_virtual_machine_images_operations.py
    @@ -110,7 +110,7 @@ def get(
         get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}'}
     
         def list(
    -            self, location, publisher_name, offer, skus, filter=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
    +            self, location, publisher_name, offer, skus, expand=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
             """Gets a list of all virtual machine image versions for the specified
             location, publisher, offer, and SKU.
     
    @@ -122,8 +122,8 @@ def list(
             :type offer: str
             :param skus: A valid image SKU.
             :type skus: str
    -        :param filter: The filter to apply on the operation.
    -        :type filter: str
    +        :param expand: The expand expression to apply on the operation.
    +        :type expand: str
             :param top:
             :type top: int
             :param orderby:
    @@ -152,8 +152,8 @@ def list(
     
             # Construct parameters
             query_parameters = {}
    -        if filter is not None:
    -            query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +        if expand is not None:
    +            query_parameters['$expand'] = self._serialize.query("expand", expand, 'str')
             if top is not None:
                 query_parameters['$top'] = self._serialize.query("top", top, 'int')
             if orderby is not None:
    diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/operations/_virtual_machine_images_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/operations/_virtual_machine_images_operations.py
    index 88a74a51a7b6..afbc65cc5797 100644
    --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/operations/_virtual_machine_images_operations.py
    +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/operations/_virtual_machine_images_operations.py
    @@ -110,7 +110,7 @@ def get(
         get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}'}
     
         def list(
    -            self, location, publisher_name, offer, skus, filter=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
    +            self, location, publisher_name, offer, skus, expand=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
             """Gets a list of all virtual machine image versions for the specified
             location, publisher, offer, and SKU.
     
    @@ -122,8 +122,8 @@ def list(
             :type offer: str
             :param skus: A valid image SKU.
             :type skus: str
    -        :param filter: The filter to apply on the operation.
    -        :type filter: str
    +        :param expand: The expand expression to apply on the operation.
    +        :type expand: str
             :param top:
             :type top: int
             :param orderby:
    @@ -152,8 +152,8 @@ def list(
     
             # Construct parameters
             query_parameters = {}
    -        if filter is not None:
    -            query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +        if expand is not None:
    +            query_parameters['$expand'] = self._serialize.query("expand", expand, 'str')
             if top is not None:
                 query_parameters['$top'] = self._serialize.query("top", top, 'int')
             if orderby is not None:
    diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2018_04_01/operations/_virtual_machine_images_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2018_04_01/operations/_virtual_machine_images_operations.py
    index 901b84febc70..778b93b6186b 100644
    --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2018_04_01/operations/_virtual_machine_images_operations.py
    +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2018_04_01/operations/_virtual_machine_images_operations.py
    @@ -110,7 +110,7 @@ def get(
         get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}'}
     
         def list(
    -            self, location, publisher_name, offer, skus, filter=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
    +            self, location, publisher_name, offer, skus, expand=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
             """Gets a list of all virtual machine image versions for the specified
             location, publisher, offer, and SKU.
     
    @@ -122,8 +122,8 @@ def list(
             :type offer: str
             :param skus: A valid image SKU.
             :type skus: str
    -        :param filter: The filter to apply on the operation.
    -        :type filter: str
    +        :param expand: The expand expression to apply on the operation.
    +        :type expand: str
             :param top:
             :type top: int
             :param orderby:
    @@ -152,8 +152,8 @@ def list(
     
             # Construct parameters
             query_parameters = {}
    -        if filter is not None:
    -            query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +        if expand is not None:
    +            query_parameters['$expand'] = self._serialize.query("expand", expand, 'str')
             if top is not None:
                 query_parameters['$top'] = self._serialize.query("top", top, 'int')
             if orderby is not None:
    diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2018_06_01/operations/_virtual_machine_images_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2018_06_01/operations/_virtual_machine_images_operations.py
    index e41bcec0b625..3b3eba787f20 100644
    --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2018_06_01/operations/_virtual_machine_images_operations.py
    +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2018_06_01/operations/_virtual_machine_images_operations.py
    @@ -110,7 +110,7 @@ def get(
         get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}'}
     
         def list(
    -            self, location, publisher_name, offer, skus, filter=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
    +            self, location, publisher_name, offer, skus, expand=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
             """Gets a list of all virtual machine image versions for the specified
             location, publisher, offer, and SKU.
     
    @@ -122,8 +122,8 @@ def list(
             :type offer: str
             :param skus: A valid image SKU.
             :type skus: str
    -        :param filter: The filter to apply on the operation.
    -        :type filter: str
    +        :param expand: The expand expression to apply on the operation.
    +        :type expand: str
             :param top:
             :type top: int
             :param orderby:
    @@ -152,8 +152,8 @@ def list(
     
             # Construct parameters
             query_parameters = {}
    -        if filter is not None:
    -            query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +        if expand is not None:
    +            query_parameters['$expand'] = self._serialize.query("expand", expand, 'str')
             if top is not None:
                 query_parameters['$top'] = self._serialize.query("top", top, 'int')
             if orderby is not None:
    diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2018_10_01/operations/_virtual_machine_images_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2018_10_01/operations/_virtual_machine_images_operations.py
    index 299c8d324e16..f72f33703892 100644
    --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2018_10_01/operations/_virtual_machine_images_operations.py
    +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2018_10_01/operations/_virtual_machine_images_operations.py
    @@ -110,7 +110,7 @@ def get(
         get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}'}
     
         def list(
    -            self, location, publisher_name, offer, skus, filter=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
    +            self, location, publisher_name, offer, skus, expand=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
             """Gets a list of all virtual machine image versions for the specified
             location, publisher, offer, and SKU.
     
    @@ -122,8 +122,8 @@ def list(
             :type offer: str
             :param skus: A valid image SKU.
             :type skus: str
    -        :param filter: The filter to apply on the operation.
    -        :type filter: str
    +        :param expand: The expand expression to apply on the operation.
    +        :type expand: str
             :param top:
             :type top: int
             :param orderby:
    @@ -152,8 +152,8 @@ def list(
     
             # Construct parameters
             query_parameters = {}
    -        if filter is not None:
    -            query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +        if expand is not None:
    +            query_parameters['$expand'] = self._serialize.query("expand", expand, 'str')
             if top is not None:
                 query_parameters['$top'] = self._serialize.query("top", top, 'int')
             if orderby is not None:
    diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_03_01/operations/_virtual_machine_images_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_03_01/operations/_virtual_machine_images_operations.py
    index ee9133a1af9a..922a625dda17 100644
    --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_03_01/operations/_virtual_machine_images_operations.py
    +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_03_01/operations/_virtual_machine_images_operations.py
    @@ -110,7 +110,7 @@ def get(
         get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}'}
     
         def list(
    -            self, location, publisher_name, offer, skus, filter=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
    +            self, location, publisher_name, offer, skus, expand=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
             """Gets a list of all virtual machine image versions for the specified
             location, publisher, offer, and SKU.
     
    @@ -122,8 +122,8 @@ def list(
             :type offer: str
             :param skus: A valid image SKU.
             :type skus: str
    -        :param filter: The filter to apply on the operation.
    -        :type filter: str
    +        :param expand: The expand expression to apply on the operation.
    +        :type expand: str
             :param top:
             :type top: int
             :param orderby:
    @@ -152,8 +152,8 @@ def list(
     
             # Construct parameters
             query_parameters = {}
    -        if filter is not None:
    -            query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +        if expand is not None:
    +            query_parameters['$expand'] = self._serialize.query("expand", expand, 'str')
             if top is not None:
                 query_parameters['$top'] = self._serialize.query("top", top, 'int')
             if orderby is not None:
    diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/operations/_virtual_machine_images_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/operations/_virtual_machine_images_operations.py
    index 18f7b5a0e5ad..2439aad3a409 100644
    --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/operations/_virtual_machine_images_operations.py
    +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/operations/_virtual_machine_images_operations.py
    @@ -110,7 +110,7 @@ def get(
         get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}'}
     
         def list(
    -            self, location, publisher_name, offer, skus, filter=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
    +            self, location, publisher_name, offer, skus, expand=None, top=None, orderby=None, custom_headers=None, raw=False, **operation_config):
             """Gets a list of all virtual machine image versions for the specified
             location, publisher, offer, and SKU.
     
    @@ -122,8 +122,8 @@ def list(
             :type offer: str
             :param skus: A valid image SKU.
             :type skus: str
    -        :param filter: The filter to apply on the operation.
    -        :type filter: str
    +        :param expand: The expand expression to apply on the operation.
    +        :type expand: str
             :param top:
             :type top: int
             :param orderby:
    @@ -152,8 +152,8 @@ def list(
     
             # Construct parameters
             query_parameters = {}
    -        if filter is not None:
    -            query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +        if expand is not None:
    +            query_parameters['$expand'] = self._serialize.query("expand", expand, 'str')
             if top is not None:
                 query_parameters['$top'] = self._serialize.query("top", top, 'int')
             if orderby is not None:
    diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/version.py
    index 51807851aa5a..fb2d4315df5a 100644
    --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/version.py
    +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/version.py
    @@ -5,4 +5,4 @@
     # license information.
     # --------------------------------------------------------------------------
     
    -VERSION = "11.0.0"
    +VERSION = "11.1.0"
    diff --git a/sdk/compute/azure-mgmt-compute/tests/recordings/test_cli_mgmt_compute.test_compute.yaml b/sdk/compute/azure-mgmt-compute/tests/recordings/test_cli_mgmt_compute.test_compute.yaml
    new file mode 100644
    index 000000000000..fcbe217ee19f
    --- /dev/null
    +++ b/sdk/compute/azure-mgmt-compute/tests/recordings/test_cli_mgmt_compute.test_compute.yaml
    @@ -0,0 +1,19223 @@
    +interactions:
    +- request:
    +    body: '{"location": "eastus", "properties": {"addressSpace": {"addressPrefixes":
    +      ["10.0.0.0/16"]}}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '92'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-network/9.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"networknamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz\"\
    +        ,\r\n  \"etag\": \"W/\\\"fb2a06fc-e69c-42ac-bfcd-365a58efbb41\\\"\",\r\n \
    +        \ \"type\": \"Microsoft.Network/virtualNetworks\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"properties\": {\r\n    \"provisioningState\": \"Updating\",\r\n \
    +        \   \"resourceGuid\": \"ac1288fe-f0a6-4a5d-ba04-95c3d62a5d4f\",\r\n    \"\
    +        addressSpace\": {\r\n      \"addressPrefixes\": [\r\n        \"10.0.0.0/16\"\
    +        \r\n      ]\r\n    },\r\n    \"subnets\": [],\r\n    \"virtualNetworkPeerings\"\
    +        : [],\r\n    \"enableDdosProtection\": false,\r\n    \"enableVmProtection\"\
    +        : false\r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/83072b01-d759-4748-8a12-7b1ffc1b2ef7?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '682'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:22:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-arm-service-request-id:
    +      - a5d014b0-27eb-4abc-b908-9d8e0604b0b9
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1199'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-network/9.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/83072b01-d759-4748-8a12-7b1ffc1b2ef7?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"status\": \"Succeeded\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '29'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:22:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-arm-service-request-id:
    +      - f0b0e381-d42b-4813-bb02-a24be401c1fc
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-network/9.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"networknamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz\"\
    +        ,\r\n  \"etag\": \"W/\\\"d2e79385-fe26-4590-a356-51c7208f63bc\\\"\",\r\n \
    +        \ \"type\": \"Microsoft.Network/virtualNetworks\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"properties\": {\r\n    \"provisioningState\": \"Succeeded\",\r\n\
    +        \    \"resourceGuid\": \"ac1288fe-f0a6-4a5d-ba04-95c3d62a5d4f\",\r\n    \"\
    +        addressSpace\": {\r\n      \"addressPrefixes\": [\r\n        \"10.0.0.0/16\"\
    +        \r\n      ]\r\n    },\r\n    \"subnets\": [],\r\n    \"virtualNetworkPeerings\"\
    +        : [],\r\n    \"enableDdosProtection\": false,\r\n    \"enableVmProtection\"\
    +        : false\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '683'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:22:48 GMT
    +      etag:
    +      - W/"d2e79385-fe26-4590-a356-51c7208f63bc"
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-arm-service-request-id:
    +      - c5de5915-2ff9-4317-99de-8e0c41d9a9f2
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"properties": {"addressPrefix": "10.0.0.0/24"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '48'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-network/9.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"subnetxyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz\"\
    +        ,\r\n  \"etag\": \"W/\\\"3424aeef-23ce-46a4-a893-dd9c1e90989f\\\"\",\r\n \
    +        \ \"properties\": {\r\n    \"provisioningState\": \"Updating\",\r\n    \"\
    +        addressPrefix\": \"10.0.0.0/24\",\r\n    \"delegations\": [],\r\n    \"privateEndpointNetworkPolicies\"\
    +        : \"Enabled\",\r\n    \"privateLinkServiceNetworkPolicies\": \"Enabled\"\r\
    +        \n  },\r\n  \"type\": \"Microsoft.Network/virtualNetworks/subnets\"\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/0ec39d5c-ff5b-428f-8f6e-7f3a0b20b5af?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '565'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:22:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-arm-service-request-id:
    +      - 1a9dcd8e-c61b-4042-a934-c18aeeba7682
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1198'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-network/9.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/0ec39d5c-ff5b-428f-8f6e-7f3a0b20b5af?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"status\": \"Succeeded\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '29'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:22:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-arm-service-request-id:
    +      - 2ff1d95a-bbf5-4364-9955-e5fb37f2ff3d
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-network/9.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"subnetxyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz\"\
    +        ,\r\n  \"etag\": \"W/\\\"4688a146-4658-4f74-b252-6ab9efa5d2ab\\\"\",\r\n \
    +        \ \"properties\": {\r\n    \"provisioningState\": \"Succeeded\",\r\n    \"\
    +        addressPrefix\": \"10.0.0.0/24\",\r\n    \"networkSecurityGroup\": {\r\n \
    +        \     \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cleanupservice/providers/Microsoft.Network/networkSecurityGroups/rg-cleanupservice-nsg2\"\
    +        \r\n    },\r\n    \"delegations\": [],\r\n    \"privateEndpointNetworkPolicies\"\
    +        : \"Enabled\",\r\n    \"privateLinkServiceNetworkPolicies\": \"Enabled\"\r\
    +        \n  },\r\n  \"type\": \"Microsoft.Network/virtualNetworks/subnets\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '775'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:22:56 GMT
    +      etag:
    +      - W/"4688a146-4658-4f74-b252-6ab9efa5d2ab"
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-arm-service-request-id:
    +      - 224939c5-481b-4384-91c6-a9bb9fd8778b
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: 'b''{"location": "eastus", "properties": {"ipConfigurations": [{"properties":
    +      {"subnet": {"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz"}},
    +      "name": "MyIpConfig"}]}}'''
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '308'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-network/9.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"interface_name\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name\"\
    +        ,\r\n  \"etag\": \"W/\\\"6868c282-ff83-4bdb-b249-2115c6f61d69\\\"\",\r\n \
    +        \ \"location\": \"eastus\",\r\n  \"properties\": {\r\n    \"provisioningState\"\
    +        : \"Succeeded\",\r\n    \"resourceGuid\": \"e03ed66d-d7fa-483f-82aa-7edcdbabdac6\"\
    +        ,\r\n    \"ipConfigurations\": [\r\n      {\r\n        \"name\": \"MyIpConfig\"\
    +        ,\r\n        \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name/ipConfigurations/MyIpConfig\"\
    +        ,\r\n        \"etag\": \"W/\\\"6868c282-ff83-4bdb-b249-2115c6f61d69\\\"\"\
    +        ,\r\n        \"type\": \"Microsoft.Network/networkInterfaces/ipConfigurations\"\
    +        ,\r\n        \"properties\": {\r\n          \"provisioningState\": \"Succeeded\"\
    +        ,\r\n          \"privateIPAddress\": \"10.0.0.4\",\r\n          \"privateIPAllocationMethod\"\
    +        : \"Dynamic\",\r\n          \"subnet\": {\r\n            \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz\"\
    +        \r\n          },\r\n          \"primary\": true,\r\n          \"privateIPAddressVersion\"\
    +        : \"IPv4\"\r\n        }\r\n      }\r\n    ],\r\n    \"dnsSettings\": {\r\n\
    +        \      \"dnsServers\": [],\r\n      \"appliedDnsServers\": [],\r\n      \"\
    +        internalDomainNameSuffix\": \"50ebflfg4bouvoqesxb3mks3jh.bx.internal.cloudapp.net\"\
    +        \r\n    },\r\n    \"enableAcceleratedNetworking\": false,\r\n    \"enableIPForwarding\"\
    +        : false,\r\n    \"hostedWorkloads\": [],\r\n    \"tapConfigurations\": []\r\
    +        \n  },\r\n  \"type\": \"Microsoft.Network/networkInterfaces\"\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/d6f55241-ffa0-4b7e-adee-66dcb34564b2?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1712'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:23:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-arm-service-request-id:
    +      - 1f16b2c1-dc4b-4a27-a737-cca7d4d26777
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1197'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-network/9.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/d6f55241-ffa0-4b7e-adee-66dcb34564b2?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"status\": \"Succeeded\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '29'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:24:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-arm-service-request-id:
    +      - 2d4df7f9-57af-47f1-9c19-fd9f04eaeb1b
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-network/9.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"interface_name\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name\"\
    +        ,\r\n  \"etag\": \"W/\\\"6868c282-ff83-4bdb-b249-2115c6f61d69\\\"\",\r\n \
    +        \ \"location\": \"eastus\",\r\n  \"properties\": {\r\n    \"provisioningState\"\
    +        : \"Succeeded\",\r\n    \"resourceGuid\": \"e03ed66d-d7fa-483f-82aa-7edcdbabdac6\"\
    +        ,\r\n    \"ipConfigurations\": [\r\n      {\r\n        \"name\": \"MyIpConfig\"\
    +        ,\r\n        \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name/ipConfigurations/MyIpConfig\"\
    +        ,\r\n        \"etag\": \"W/\\\"6868c282-ff83-4bdb-b249-2115c6f61d69\\\"\"\
    +        ,\r\n        \"type\": \"Microsoft.Network/networkInterfaces/ipConfigurations\"\
    +        ,\r\n        \"properties\": {\r\n          \"provisioningState\": \"Succeeded\"\
    +        ,\r\n          \"privateIPAddress\": \"10.0.0.4\",\r\n          \"privateIPAllocationMethod\"\
    +        : \"Dynamic\",\r\n          \"subnet\": {\r\n            \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz\"\
    +        \r\n          },\r\n          \"primary\": true,\r\n          \"privateIPAddressVersion\"\
    +        : \"IPv4\"\r\n        }\r\n      }\r\n    ],\r\n    \"dnsSettings\": {\r\n\
    +        \      \"dnsServers\": [],\r\n      \"appliedDnsServers\": [],\r\n      \"\
    +        internalDomainNameSuffix\": \"50ebflfg4bouvoqesxb3mks3jh.bx.internal.cloudapp.net\"\
    +        \r\n    },\r\n    \"enableAcceleratedNetworking\": false,\r\n    \"enableIPForwarding\"\
    +        : false,\r\n    \"hostedWorkloads\": [],\r\n    \"tapConfigurations\": []\r\
    +        \n  },\r\n  \"type\": \"Microsoft.Network/networkInterfaces\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1712'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:24:31 GMT
    +      etag:
    +      - W/"6868c282-ff83-4bdb-b249-2115c6f61d69"
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-arm-service-request-id:
    +      - 65d8e006-a804-47ad-b31f-876235cb4937
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"location": "eastus", "properties": {"creationData": {"createOption":
    +      "Empty"}, "diskSizeGB": 200}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '100'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"diskname\",\r\n  \"location\": \"eastus\",\r\n \
    +        \ \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\":\
    +        \ \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"provisioningState\"\
    +        : \"Updating\",\r\n    \"isArmResource\": true\r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/c5dcfad0-2ad0-4395-9f0c-3ecadd23b3a7?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '227'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:24:38 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/c5dcfad0-2ad0-4395-9f0c-3ecadd23b3a7?monitor=true&api-version=2019-11-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/CreateUpdateDisks3Min;999,Microsoft.Compute/CreateUpdateDisks30Min;7999
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1199'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/c5dcfad0-2ad0-4395-9f0c-3ecadd23b3a7?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:24:38.9758989+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:24:39.1009358+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"properties\": {\r\n    \"output\": {\r\n  \"name\": \"diskname\"\
    +        ,\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"diskIOPSReadWrite\"\
    +        : 500,\r\n    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\": {\r\n    \
    +        \  \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"timeCreated\"\
    +        : \"2020-03-12T07:24:38.9758989+00:00\",\r\n    \"provisioningState\": \"\
    +        Succeeded\",\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\"\
    +        : 214748364800,\r\n    \"uniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\
    +        \r\n  }\r\n}\r\n  },\r\n  \"name\": \"c5dcfad0-2ad0-4395-9f0c-3ecadd23b3a7\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1020'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:24:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49999,Microsoft.Compute/GetOperation30Min;399999
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"diskname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"diskIOPSReadWrite\"\
    +        : 500,\r\n    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\": {\r\n    \
    +        \  \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"timeCreated\"\
    +        : \"2020-03-12T07:24:38.9758989+00:00\",\r\n    \"provisioningState\": \"\
    +        Succeeded\",\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\"\
    +        : 214748364800,\r\n    \"uniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '795'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:24:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;4999,Microsoft.Compute/LowCostGet30Min;39999
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: 'b''{"location": "eastus", "properties": {"creationData": {"createOption":
    +      "Copy", "sourceResourceId": "subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname"}}}'''
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '255'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname4?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"diskname4\",\r\n  \"location\": \"eastus\",\r\n\
    +        \  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Copy\",\r\n      \"sourceResourceId\": \"subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n      \"sourceUniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\r\n\
    +        \    },\r\n    \"provisioningState\": \"Updating\",\r\n    \"isArmResource\"\
    +        : true\r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/a7210da0-a29c-4494-9ebf-287575533888?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '450'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:24:46 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/a7210da0-a29c-4494-9ebf-287575533888?monitor=true&api-version=2019-11-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/CreateUpdateDisks3Min;998,Microsoft.Compute/CreateUpdateDisks30Min;7998
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1198'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/a7210da0-a29c-4494-9ebf-287575533888?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:24:45.9759152+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:24:47.288413+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"properties\": {\r\n    \"output\": {\r\n  \"name\": \"diskname4\"\
    +        ,\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname4\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Copy\",\r\n      \"sourceResourceId\": \"subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n      \"sourceUniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\r\n\
    +        \    },\r\n    \"diskSizeGB\": 200,\r\n    \"diskIOPSReadWrite\": 500,\r\n\
    +        \    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\": {\r\n      \"type\"\
    +        : \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"timeCreated\": \"\
    +        2020-03-12T07:24:45.9915426+00:00\",\r\n    \"provisioningState\": \"Succeeded\"\
    +        ,\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\": 214748364800,\r\
    +        \n    \"uniqueId\": \"13cee198-332b-40f9-9649-c8c0e8367c94\"\r\n  }\r\n}\r\
    +        \n  },\r\n  \"name\": \"a7210da0-a29c-4494-9ebf-287575533888\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1267'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:24:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49997,Microsoft.Compute/GetOperation30Min;399997
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname4?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"diskname4\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname4\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Copy\",\r\n      \"sourceResourceId\": \"subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n      \"sourceUniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\r\n\
    +        \    },\r\n    \"diskSizeGB\": 200,\r\n    \"diskIOPSReadWrite\": 500,\r\n\
    +        \    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\": {\r\n      \"type\"\
    +        : \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"timeCreated\": \"\
    +        2020-03-12T07:24:45.9915426+00:00\",\r\n    \"provisioningState\": \"Succeeded\"\
    +        ,\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\": 214748364800,\r\
    +        \n    \"uniqueId\": \"13cee198-332b-40f9-9649-c8c0e8367c94\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1043'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:24:52 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;4996,Microsoft.Compute/LowCostGet30Min;39996
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"location": "eastus", "properties": {"creationData": {"createOption":
    +      "Upload", "uploadSizeBytes": 10737418752}}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '114'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname5?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"diskname5\",\r\n  \"location\": \"eastus\",\r\n\
    +        \  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Upload\",\r\n      \"uploadSizeBytes\": 10737418752\r\n    },\r\n    \"\
    +        provisioningState\": \"Updating\",\r\n    \"isArmResource\": true\r\n  }\r\
    +        \n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/5633f84e-ab47-4459-bde8-a07d835770af?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '244'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:24:58 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/5633f84e-ab47-4459-bde8-a07d835770af?monitor=true&api-version=2019-11-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/CreateUpdateDisks3Min;997,Microsoft.Compute/CreateUpdateDisks30Min;7997
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1197'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/5633f84e-ab47-4459-bde8-a07d835770af?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:24:58.1321836+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:24:58.2415492+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"properties\": {\r\n    \"output\": {\r\n  \"name\": \"diskname5\"\
    +        ,\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname5\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Upload\",\r\n      \"uploadSizeBytes\": 10737418752\r\n    },\r\n    \"\
    +        diskIOPSReadWrite\": 500,\r\n    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\"\
    +        : {\r\n      \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n \
    +        \   \"timeCreated\": \"2020-03-12T07:24:58.1321836+00:00\",\r\n    \"provisioningState\"\
    +        : \"Succeeded\",\r\n    \"diskState\": \"ReadyToUpload\",\r\n    \"uniqueId\"\
    +        : \"676f24f9-cfb2-4ac8-91e6-092f9c4fbb1f\"\r\n  }\r\n}\r\n  },\r\n  \"name\"\
    +        : \"5633f84e-ab47-4459-bde8-a07d835770af\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1005'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:25:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49995,Microsoft.Compute/GetOperation30Min;399995
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname5?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"diskname5\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname5\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Upload\",\r\n      \"uploadSizeBytes\": 10737418752\r\n    },\r\n    \"\
    +        diskIOPSReadWrite\": 500,\r\n    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\"\
    +        : {\r\n      \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n \
    +        \   \"timeCreated\": \"2020-03-12T07:24:58.1321836+00:00\",\r\n    \"provisioningState\"\
    +        : \"Succeeded\",\r\n    \"diskState\": \"ReadyToUpload\",\r\n    \"uniqueId\"\
    +        : \"676f24f9-cfb2-4ac8-91e6-092f9c4fbb1f\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '780'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:25:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;4993,Microsoft.Compute/LowCostGet30Min;39993
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: 'b''{"location": "eastus", "properties": {"creationData": {"createOption":
    +      "Copy", "sourceUri": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname"}}}'''
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '249'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"location\": \"eastus\",\r\n  \"properties\": {\r\n    \"creationData\"\
    +        : {\r\n      \"createOption\": \"Copy\",\r\n      \"sourceUri\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n      \"sourceUniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\r\n\
    +        \    },\r\n    \"provisioningState\": \"Updating\",\r\n    \"isArmResource\"\
    +        : true\r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/0631fe93-4acf-4bc6-a9bc-16f0ec86b2c0?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '420'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:25:05 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/0631fe93-4acf-4bc6-a9bc-16f0ec86b2c0?monitor=true&api-version=2019-11-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/HighCostSnapshotCreateHydrate3Min;239,Microsoft.Compute/HighCostSnapshotCreateHydrate30Min;1919
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1196'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/0631fe93-4acf-4bc6-a9bc-16f0ec86b2c0?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:25:05.3041278+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:25:05.7259117+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"properties\": {\r\n    \"output\": {\r\n  \"name\": \"snapshotname\"\
    +        ,\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/snapshots\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Copy\",\r\n      \"sourceResourceId\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n      \"sourceUniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\r\n\
    +        \    },\r\n    \"diskSizeGB\": 200,\r\n    \"encryption\": {\r\n      \"type\"\
    +        : \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"incremental\": false,\r\
    +        \n    \"timeCreated\": \"2020-03-12T07:25:05.3196823+00:00\",\r\n    \"provisioningState\"\
    +        : \"Succeeded\",\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\"\
    +        : 214748364800,\r\n    \"uniqueId\": \"8d10ba69-75e0-48e4-b72e-32992e4b1b84\"\
    +        \r\n  }\r\n}\r\n  },\r\n  \"name\": \"0631fe93-4acf-4bc6-a9bc-16f0ec86b2c0\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1249'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:25:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49993,Microsoft.Compute/GetOperation30Min;399993
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"snapshotname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/snapshots\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Copy\",\r\n      \"sourceResourceId\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n      \"sourceUniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\r\n\
    +        \    },\r\n    \"diskSizeGB\": 200,\r\n    \"encryption\": {\r\n      \"type\"\
    +        : \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"incremental\": false,\r\
    +        \n    \"timeCreated\": \"2020-03-12T07:25:05.3196823+00:00\",\r\n    \"provisioningState\"\
    +        : \"Succeeded\",\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\"\
    +        : 214748364800,\r\n    \"uniqueId\": \"8d10ba69-75e0-48e4-b72e-32992e4b1b84\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1024'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:25:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;4991,Microsoft.Compute/LowCostGet30Min;39991
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: 'b''{"location": "eastus", "properties": {"storageProfile": {"osDisk": {"snapshot":
    +      {"id": "subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname"},
    +      "osType": "Linux", "osState": "Generalized"}, "zoneResilient": false}, "hyperVGeneration":
    +      "V1"}}'''
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '348'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/images/imagename?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"imagename\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/images/imagename\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/images\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"properties\": {\r\n    \"storageProfile\": {\r\n      \"osDisk\"\
    +        : {\r\n        \"osType\": \"Linux\",\r\n        \"osState\": \"Generalized\"\
    +        ,\r\n        \"snapshot\": {\r\n          \"id\": \"subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        \r\n        },\r\n        \"caching\": \"None\",\r\n        \"storageAccountType\"\
    +        : \"Standard_LRS\"\r\n      },\r\n      \"dataDisks\": [],\r\n      \"zoneResilient\"\
    +        : false\r\n    },\r\n    \"provisioningState\": \"Creating\",\r\n    \"hyperVGeneration\"\
    +        : \"V1\"\r\n  }\r\n}"
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/cb695a14-2a61-42db-9a37-084075d757ab?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '818'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:25:24 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/CreateImages3Min;39,Microsoft.Compute/CreateImages30Min;199
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1195'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/cb695a14-2a61-42db-9a37-084075d757ab?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:25:24.1367784+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:25:29.2774358+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"cb695a14-2a61-42db-9a37-084075d757ab\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:26:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14998,Microsoft.Compute/GetOperation30Min;29998
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/images/imagename?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"imagename\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/images/imagename\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/images\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"properties\": {\r\n    \"storageProfile\": {\r\n      \"osDisk\"\
    +        : {\r\n        \"osType\": \"Linux\",\r\n        \"osState\": \"Generalized\"\
    +        ,\r\n        \"diskSizeGB\": 200,\r\n        \"snapshot\": {\r\n         \
    +        \ \"id\": \"subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        \r\n        },\r\n        \"caching\": \"None\",\r\n        \"storageAccountType\"\
    +        : \"Standard_LRS\"\r\n      },\r\n      \"dataDisks\": [],\r\n      \"zoneResilient\"\
    +        : false\r\n    },\r\n    \"provisioningState\": \"Succeeded\",\r\n    \"hyperVGeneration\"\
    +        : \"V1\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '847'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:26:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetImages3Min;358,Microsoft.Compute/GetImages30Min;1798
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"location": "eastus", "properties": {"description": "This is the gallery
    +      description."}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '89'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"galleryname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"properties\": {\r\n    \"description\": \"This is the gallery description.\"\
    +        ,\r\n    \"identifier\": {\r\n      \"uniqueName\": \"00000000-0000-0000-0000-000000000000-GALLERYNAME\"\
    +        \r\n    },\r\n    \"provisioningState\": \"Creating\"\r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/1f3d67cb-51bb-404e-9bff-be038e89897b?api-version=2019-12-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '487'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:26:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/CreateUpdateGallery3Min;49,Microsoft.Compute/CreateUpdateGallery30Min;299
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1194'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/1f3d67cb-51bb-404e-9bff-be038e89897b?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:26:08.2872309+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:26:08.5215663+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"1f3d67cb-51bb-404e-9bff-be038e89897b\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:26:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"galleryname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"properties\": {\r\n    \"description\": \"This is the gallery description.\"\
    +        ,\r\n    \"identifier\": {\r\n      \"uniqueName\": \"00000000-0000-0000-0000-000000000000-GALLERYNAME\"\
    +        \r\n    },\r\n    \"provisioningState\": \"Succeeded\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '488'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:26:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetGallery3Min;297,Microsoft.Compute/GetGallery30Min;1997
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"location": "eastus", "tags": {"department": "finance"}, "properties":
    +      {"platformFaultDomainCount": 3}, "zones": ["1"]}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '120'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"hostgroupnamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz\"\
    +        ,\r\n  \"location\": \"eastus\",\r\n  \"tags\": {\r\n    \"department\": \"\
    +        finance\"\r\n  },\r\n  \"zones\": [\r\n    \"1\"\r\n  ],\r\n  \"properties\"\
    +        : {\r\n    \"platformFaultDomainCount\": 3\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '374'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:26:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutDeleteDedicatedHost3Min;119,Microsoft.Compute/PutDeleteDedicatedHost30Min;599
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1193'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: 'b''{"location": "eastus", "properties": {"hardwareProfile": {"vmSize":
    +      "Standard_D2_v2"}, "storageProfile": {"imageReference": {"publisher": "MicrosoftWindowsServer",
    +      "offer": "WindowsServer", "sku": "2016-Datacenter", "version": "latest"}, "osDisk":
    +      {"name": "myVMosdisk", "caching": "ReadWrite", "createOption": "FromImage",
    +      "managedDisk": {"storageAccountType": "Standard_LRS"}}, "dataDisks": [{"lun":
    +      0, "createOption": "Empty", "diskSizeGB": 1023}, {"lun": 1, "createOption":
    +      "Empty", "diskSizeGB": 1023}]}, "osProfile": {"computerName": "myVM", "adminUsername":
    +      "testuser", "adminPassword": "Aa1!zyx_", "windowsConfiguration": {"enableAutomaticUpdates":
    +      true}}, "networkProfile": {"networkInterfaces": [{"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name",
    +      "properties": {"primary": true}}]}}}'''
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '923'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"vmnamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachines\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"vmId\": \"1b0aa70d-95b1-4e60-915a-cd42973c05d3\"\
    +        ,\r\n    \"hardwareProfile\": {\r\n      \"vmSize\": \"Standard_D2_v2\"\r\n\
    +        \    },\r\n    \"storageProfile\": {\r\n      \"imageReference\": {\r\n  \
    +        \      \"publisher\": \"MicrosoftWindowsServer\",\r\n        \"offer\": \"\
    +        WindowsServer\",\r\n        \"sku\": \"2016-Datacenter\",\r\n        \"version\"\
    +        : \"latest\",\r\n        \"exactVersion\": \"14393.3504.2002070914\"\r\n \
    +        \     },\r\n      \"osDisk\": {\r\n        \"osType\": \"Windows\",\r\n  \
    +        \      \"name\": \"myVMosdisk\",\r\n        \"createOption\": \"FromImage\"\
    +        ,\r\n        \"caching\": \"ReadWrite\",\r\n        \"managedDisk\": {\r\n\
    +        \          \"storageAccountType\": \"Standard_LRS\"\r\n        },\r\n    \
    +        \    \"diskSizeGB\": 127\r\n      },\r\n      \"dataDisks\": [\r\n       \
    +        \ {\r\n          \"lun\": 0,\r\n          \"createOption\": \"Empty\",\r\n\
    +        \          \"caching\": \"None\",\r\n          \"managedDisk\": {\r\n    \
    +        \        \"storageAccountType\": \"Standard_LRS\"\r\n          },\r\n    \
    +        \      \"diskSizeGB\": 1023,\r\n          \"toBeDetached\": false\r\n    \
    +        \    },\r\n        {\r\n          \"lun\": 1,\r\n          \"createOption\"\
    +        : \"Empty\",\r\n          \"caching\": \"None\",\r\n          \"managedDisk\"\
    +        : {\r\n            \"storageAccountType\": \"Standard_LRS\"\r\n          },\r\
    +        \n          \"diskSizeGB\": 1023,\r\n          \"toBeDetached\": false\r\n\
    +        \        }\r\n      ]\r\n    },\r\n    \"osProfile\": {\r\n      \"computerName\"\
    +        : \"myVM\",\r\n      \"adminUsername\": \"testuser\",\r\n      \"windowsConfiguration\"\
    +        : {\r\n        \"provisionVMAgent\": true,\r\n        \"enableAutomaticUpdates\"\
    +        : true\r\n      },\r\n      \"secrets\": [],\r\n      \"allowExtensionOperations\"\
    +        : true,\r\n      \"requireGuestProvisionSignal\": true\r\n    },\r\n    \"\
    +        networkProfile\": {\"networkInterfaces\":[{\"id\":\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name\"\
    +        ,\"properties\":{\"primary\":true}}]},\r\n    \"provisioningState\": \"Creating\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/4b1d907f-5982-49e1-8976-a346f48518f3?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2139'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:26:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutVM3Min;239,Microsoft.Compute/PutVM30Min;1199
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1192'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/4b1d907f-5982-49e1-8976-a346f48518f3?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:26:49.9810535+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"4b1d907f-5982-49e1-8976-a346f48518f3\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:27:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14997,Microsoft.Compute/GetOperation30Min;29997
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/4b1d907f-5982-49e1-8976-a346f48518f3?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:26:49.9810535+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:27:59.1532872+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"4b1d907f-5982-49e1-8976-a346f48518f3\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:28:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14995,Microsoft.Compute/GetOperation30Min;29995
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"vmnamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachines\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"vmId\": \"1b0aa70d-95b1-4e60-915a-cd42973c05d3\"\
    +        ,\r\n    \"hardwareProfile\": {\r\n      \"vmSize\": \"Standard_D2_v2\"\r\n\
    +        \    },\r\n    \"storageProfile\": {\r\n      \"imageReference\": {\r\n  \
    +        \      \"publisher\": \"MicrosoftWindowsServer\",\r\n        \"offer\": \"\
    +        WindowsServer\",\r\n        \"sku\": \"2016-Datacenter\",\r\n        \"version\"\
    +        : \"latest\",\r\n        \"exactVersion\": \"14393.3504.2002070914\"\r\n \
    +        \     },\r\n      \"osDisk\": {\r\n        \"osType\": \"Windows\",\r\n  \
    +        \      \"name\": \"myVMosdisk\",\r\n        \"createOption\": \"FromImage\"\
    +        ,\r\n        \"caching\": \"ReadWrite\",\r\n        \"managedDisk\": {\r\n\
    +        \          \"storageAccountType\": \"Standard_LRS\",\r\n          \"id\":\
    +        \ \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/disks/myVMosdisk\"\
    +        \r\n        },\r\n        \"diskSizeGB\": 127\r\n      },\r\n      \"dataDisks\"\
    +        : [\r\n        {\r\n          \"lun\": 0,\r\n          \"name\": \"vmnamexyz_disk2_8a611e9e97d6459b81fc7fb72dca7039\"\
    +        ,\r\n          \"createOption\": \"Empty\",\r\n          \"caching\": \"None\"\
    +        ,\r\n          \"managedDisk\": {\r\n            \"storageAccountType\": \"\
    +        Standard_LRS\",\r\n            \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/disks/vmnamexyz_disk2_8a611e9e97d6459b81fc7fb72dca7039\"\
    +        \r\n          },\r\n          \"diskSizeGB\": 1023,\r\n          \"toBeDetached\"\
    +        : false\r\n        },\r\n        {\r\n          \"lun\": 1,\r\n          \"\
    +        name\": \"vmnamexyz_disk3_8332cea32dc04f088ad4afac8d2e6e37\",\r\n        \
    +        \  \"createOption\": \"Empty\",\r\n          \"caching\": \"None\",\r\n  \
    +        \        \"managedDisk\": {\r\n            \"storageAccountType\": \"Standard_LRS\"\
    +        ,\r\n            \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/disks/vmnamexyz_disk3_8332cea32dc04f088ad4afac8d2e6e37\"\
    +        \r\n          },\r\n          \"diskSizeGB\": 1023,\r\n          \"toBeDetached\"\
    +        : false\r\n        }\r\n      ]\r\n    },\r\n    \"osProfile\": {\r\n    \
    +        \  \"computerName\": \"myVM\",\r\n      \"adminUsername\": \"testuser\",\r\
    +        \n      \"windowsConfiguration\": {\r\n        \"provisionVMAgent\": true,\r\
    +        \n        \"enableAutomaticUpdates\": true\r\n      },\r\n      \"secrets\"\
    +        : [],\r\n      \"allowExtensionOperations\": true,\r\n      \"requireGuestProvisionSignal\"\
    +        : true\r\n    },\r\n    \"networkProfile\": {\"networkInterfaces\":[{\"id\"\
    +        :\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name\"\
    +        ,\"properties\":{\"primary\":true}}]},\r\n    \"provisioningState\": \"Succeeded\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2887'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:28:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;3998,Microsoft.Compute/LowCostGet30Min;31998
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"location": "eastus", "properties": {"platformUpdateDomainCount": 20,
    +      "platformFaultDomainCount": 2}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '102'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/availabilitySets/availabilitysetnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"availabilitysetnamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/availabilitySets/availabilitysetnamexyz\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/availabilitySets\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"platformUpdateDomainCount\"\
    +        : 20,\r\n    \"platformFaultDomainCount\": 2\r\n  },\r\n  \"sku\": {\r\n \
    +        \   \"name\": \"Classic\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '443'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:28:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutVM3Min;238,Microsoft.Compute/PutVM30Min;1198
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1191'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"location": "eastus", "properties": {"osType": "Windows", "osState": "Generalized",
    +      "hyperVGeneration": "V1", "identifier": {"publisher": "myPublisherName", "offer":
    +      "myOfferName", "sku": "mySkuName"}}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '203'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"imagename\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/images\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"hyperVGeneration\": \"V1\",\r\
    +        \n    \"osType\": \"Windows\",\r\n    \"osState\": \"Generalized\",\r\n  \
    +        \  \"identifier\": {\r\n      \"publisher\": \"myPublisherName\",\r\n    \
    +        \  \"offer\": \"myOfferName\",\r\n      \"sku\": \"mySkuName\"\r\n    },\r\
    +        \n    \"provisioningState\": \"Creating\"\r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/ae964217-c798-4f3a-b5b3-f62dcb9bd5bd?api-version=2019-12-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '565'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:28:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1190'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/ae964217-c798-4f3a-b5b3-f62dcb9bd5bd?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:28:22.7395703+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:28:22.9426905+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"ae964217-c798-4f3a-b5b3-f62dcb9bd5bd\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:29:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"imagename\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/images\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"hyperVGeneration\": \"V1\",\r\
    +        \n    \"osType\": \"Windows\",\r\n    \"osState\": \"Generalized\",\r\n  \
    +        \  \"identifier\": {\r\n      \"publisher\": \"myPublisherName\",\r\n    \
    +        \  \"offer\": \"myOfferName\",\r\n      \"sku\": \"mySkuName\"\r\n    },\r\
    +        \n    \"provisioningState\": \"Succeeded\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '566'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:29:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"location": "eastus", "tags": {"department": "HR"}, "properties": {"platformFaultDomain":
    +      1}, "sku": {"name": "DSv3-Type1"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '125'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz/hosts/hostname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"hostname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz/hosts/hostname\"\
    +        ,\r\n  \"location\": \"eastus\",\r\n  \"tags\": {\r\n    \"department\": \"\
    +        HR\"\r\n  },\r\n  \"sku\": {\r\n    \"name\": \"DSv3-Type1\"\r\n  },\r\n \
    +        \ \"properties\": {\r\n    \"platformFaultDomain\": 1,\r\n    \"autoReplaceOnFailure\"\
    +        : true,\r\n    \"hostId\": \"088ab045-ff9e-49af-8746-f11342a580dc\",\r\n \
    +        \   \"provisioningState\": \"Creating\"\r\n  }\r\n}"
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/032a3ca3-8188-4b02-a2f0-d55ed2aaaa94?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '514'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:29:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutDeleteDedicatedHost3Min;118,Microsoft.Compute/PutDeleteDedicatedHost30Min;598
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1189'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/032a3ca3-8188-4b02-a2f0-d55ed2aaaa94?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:29:10.1848683+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:29:10.3879775+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"032a3ca3-8188-4b02-a2f0-d55ed2aaaa94\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:30:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14996,Microsoft.Compute/GetOperation30Min;29993
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz/hosts/hostname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"hostname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz/hosts/hostname\"\
    +        ,\r\n  \"location\": \"eastus\",\r\n  \"tags\": {\r\n    \"department\": \"\
    +        HR\"\r\n  },\r\n  \"sku\": {\r\n    \"name\": \"DSv3-Type1\"\r\n  },\r\n \
    +        \ \"properties\": {\r\n    \"platformFaultDomain\": 1,\r\n    \"autoReplaceOnFailure\"\
    +        : true,\r\n    \"hostId\": \"088ab045-ff9e-49af-8746-f11342a580dc\",\r\n \
    +        \   \"virtualMachines\": [],\r\n    \"provisioningTime\": \"2020-03-12T07:29:10.3410931+00:00\"\
    +        ,\r\n    \"provisioningState\": \"Succeeded\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '605'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:30:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetDedicatedHost3Min;248,Microsoft.Compute/GetDedicatedHost30Min;998
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: 'b''{"location": "eastus", "sku": {"name": "Standard_D1_v2", "tier": "Standard",
    +      "capacity": 2}, "properties": {"upgradePolicy": {"mode": "Manual"}, "virtualMachineProfile":
    +      {"osProfile": {"computerNamePrefix": "testPC", "adminUsername": "testuser",
    +      "adminPassword": "Aa!1()-xyz"}, "storageProfile": {"imageReference": {"publisher":
    +      "Canonical", "offer": "UbuntuServer", "sku": "18.04-LTS", "version": "latest"},
    +      "osDisk": {"caching": "ReadWrite", "createOption": "FromImage", "diskSizeGB":
    +      512, "managedDisk": {"storageAccountType": "Standard_LRS"}}}, "networkProfile":
    +      {"networkInterfaceConfigurations": [{"name": "testPC", "properties": {"primary":
    +      true, "ipConfigurations": [{"name": "testPC", "properties": {"subnet": {"id":
    +      "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz"}}}]}}]}},
    +      "overprovision": true}}'''
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '948'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"virtualmachinescalesetname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachineScaleSets\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"sku\": {\r\n    \"name\": \"Standard_D1_v2\",\r\n   \
    +        \ \"tier\": \"Standard\",\r\n    \"capacity\": 2\r\n  },\r\n  \"properties\"\
    +        : {\r\n    \"singlePlacementGroup\": true,\r\n    \"upgradePolicy\": {\r\n\
    +        \      \"mode\": \"Manual\"\r\n    },\r\n    \"virtualMachineProfile\": {\r\
    +        \n      \"osProfile\": {\r\n        \"computerNamePrefix\": \"testPC\",\r\n\
    +        \        \"adminUsername\": \"testuser\",\r\n        \"linuxConfiguration\"\
    +        : {\r\n          \"disablePasswordAuthentication\": false,\r\n          \"\
    +        provisionVMAgent\": true\r\n        },\r\n        \"secrets\": [],\r\n   \
    +        \     \"allowExtensionOperations\": true,\r\n        \"requireGuestProvisionSignal\"\
    +        : true\r\n      },\r\n      \"storageProfile\": {\r\n        \"osDisk\": {\r\
    +        \n          \"createOption\": \"FromImage\",\r\n          \"caching\": \"\
    +        ReadWrite\",\r\n          \"managedDisk\": {\r\n            \"storageAccountType\"\
    +        : \"Standard_LRS\"\r\n          },\r\n          \"diskSizeGB\": 512\r\n  \
    +        \      },\r\n        \"imageReference\": {\r\n          \"publisher\": \"\
    +        Canonical\",\r\n          \"offer\": \"UbuntuServer\",\r\n          \"sku\"\
    +        : \"18.04-LTS\",\r\n          \"version\": \"latest\"\r\n        }\r\n   \
    +        \   },\r\n      \"networkProfile\": {\"networkInterfaceConfigurations\":[{\"\
    +        name\":\"testPC\",\"properties\":{\"primary\":true,\"enableAcceleratedNetworking\"\
    +        :false,\"dnsSettings\":{\"dnsServers\":[]},\"enableIPForwarding\":false,\"\
    +        ipConfigurations\":[{\"name\":\"testPC\",\"properties\":{\"subnet\":{\"id\"\
    +        :\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz\"\
    +        },\"privateIPAddressVersion\":\"IPv4\"}}]}}]}\r\n    },\r\n    \"provisioningState\"\
    +        : \"Creating\",\r\n    \"overprovision\": true,\r\n    \"doNotRunExtensionsOnOverprovisionedVMs\"\
    +        : false,\r\n    \"uniqueId\": \"052fe2f1-c75d-482f-9b18-bad155cba912\"\r\n\
    +        \  }\r\n}"
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/26db6531-d30b-4f6a-8b48-e11f31992eb2?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2044'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:30:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/CreateVMScaleSet3Min;59,Microsoft.Compute/CreateVMScaleSet30Min;299,Microsoft.Compute/VMScaleSetBatchedVMRequests5Min;1196,Microsoft.Compute/VmssQueuedVMOperations;4796
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1188'
    +      x-ms-request-charge:
    +      - '4'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/26db6531-d30b-4f6a-8b48-e11f31992eb2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:30:10.1695104+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"26db6531-d30b-4f6a-8b48-e11f31992eb2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:30:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14995,Microsoft.Compute/GetOperation30Min;29992
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/26db6531-d30b-4f6a-8b48-e11f31992eb2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:30:10.1695104+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"26db6531-d30b-4f6a-8b48-e11f31992eb2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:31:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14996,Microsoft.Compute/GetOperation30Min;29991
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/26db6531-d30b-4f6a-8b48-e11f31992eb2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:30:10.1695104+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:31:39.4195726+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"26db6531-d30b-4f6a-8b48-e11f31992eb2\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:31:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14994,Microsoft.Compute/GetOperation30Min;29989
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"virtualmachinescalesetname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachineScaleSets\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"sku\": {\r\n    \"name\": \"Standard_D1_v2\",\r\n   \
    +        \ \"tier\": \"Standard\",\r\n    \"capacity\": 2\r\n  },\r\n  \"properties\"\
    +        : {\r\n    \"singlePlacementGroup\": true,\r\n    \"upgradePolicy\": {\r\n\
    +        \      \"mode\": \"Manual\"\r\n    },\r\n    \"virtualMachineProfile\": {\r\
    +        \n      \"osProfile\": {\r\n        \"computerNamePrefix\": \"testPC\",\r\n\
    +        \        \"adminUsername\": \"testuser\",\r\n        \"linuxConfiguration\"\
    +        : {\r\n          \"disablePasswordAuthentication\": false,\r\n          \"\
    +        provisionVMAgent\": true\r\n        },\r\n        \"secrets\": [],\r\n   \
    +        \     \"allowExtensionOperations\": true,\r\n        \"requireGuestProvisionSignal\"\
    +        : true\r\n      },\r\n      \"storageProfile\": {\r\n        \"osDisk\": {\r\
    +        \n          \"createOption\": \"FromImage\",\r\n          \"caching\": \"\
    +        ReadWrite\",\r\n          \"managedDisk\": {\r\n            \"storageAccountType\"\
    +        : \"Standard_LRS\"\r\n          },\r\n          \"diskSizeGB\": 512\r\n  \
    +        \      },\r\n        \"imageReference\": {\r\n          \"publisher\": \"\
    +        Canonical\",\r\n          \"offer\": \"UbuntuServer\",\r\n          \"sku\"\
    +        : \"18.04-LTS\",\r\n          \"version\": \"latest\"\r\n        }\r\n   \
    +        \   },\r\n      \"networkProfile\": {\"networkInterfaceConfigurations\":[{\"\
    +        name\":\"testPC\",\"properties\":{\"primary\":true,\"enableAcceleratedNetworking\"\
    +        :false,\"dnsSettings\":{\"dnsServers\":[]},\"enableIPForwarding\":false,\"\
    +        ipConfigurations\":[{\"name\":\"testPC\",\"properties\":{\"subnet\":{\"id\"\
    +        :\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz\"\
    +        },\"privateIPAddressVersion\":\"IPv4\"}}]}}]}\r\n    },\r\n    \"provisioningState\"\
    +        : \"Succeeded\",\r\n    \"overprovision\": true,\r\n    \"doNotRunExtensionsOnOverprovisionedVMs\"\
    +        : false,\r\n    \"uniqueId\": \"052fe2f1-c75d-482f-9b18-bad155cba912\"\r\n\
    +        \  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2045'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:31:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetVMScaleSet3Min;398,Microsoft.Compute/GetVMScaleSet30Min;2598
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"location": "eastus", "properties": {"proximityPlacementGroupType": "Standard"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '81'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/proximityPlacementGroups/proximityplacementgroupname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"proximityplacementgroupname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/proximityPlacementGroups/proximityplacementgroupname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/proximityPlacementGroups\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"proximityPlacementGroupType\"\
    +        : \"Standard\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '402'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:32:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutDeletePPG3Min;99,Microsoft.Compute/PutDeletePPG30Min;499
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1187'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: '{"location": "eastus", "properties": {"description": "This is the gallery
    +      application description.", "eula": "This is the gallery application EULA.",
    +      "supportedOSType": "Windows"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '180'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/applications/applicationname?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"applicationname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/applications/applicationname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/applications\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"supportedOSType\": \"Windows\"\
    +        ,\r\n    \"description\": \"This is the gallery application description.\"\
    +        ,\r\n    \"eula\": \"This is the gallery application EULA.\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '495'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:32:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1186'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/applications/applicationname?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"applicationname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/applications/applicationname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/applications\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"supportedOSType\": \"Windows\"\
    +        ,\r\n    \"description\": \"This is the gallery application description.\"\
    +        ,\r\n    \"eula\": \"This is the gallery application EULA.\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '495'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:32:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: 'b''{"location": "eastus", "properties": {"publishingProfile": {"targetRegions":
    +      [{"name": "East US", "regionalReplicaCount": 2, "storageAccountType": "Standard_ZRS"}]},
    +      "storageProfile": {"osDiskImage": {"hostCaching": "ReadOnly", "source": {"id":
    +      "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname"}}}}}'''
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '412'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename/versions/1.0.0?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"1.0.0\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename/versions/1.0.0\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/images/versions\",\r\n  \"\
    +        location\": \"eastus\",\r\n  \"properties\": {\r\n    \"publishingProfile\"\
    +        : {\r\n      \"targetRegions\": [\r\n        {\r\n          \"name\": \"East\
    +        \ US\",\r\n          \"regionalReplicaCount\": 2,\r\n          \"storageAccountType\"\
    +        : \"Standard_ZRS\"\r\n        }\r\n      ],\r\n      \"replicaCount\": 1,\r\
    +        \n      \"excludeFromLatest\": false,\r\n      \"publishedDate\": \"2020-03-12T07:32:36.8631028+00:00\"\
    +        ,\r\n      \"storageAccountType\": \"Standard_LRS\"\r\n    },\r\n    \"storageProfile\"\
    +        : {\r\n      \"osDiskImage\": {\r\n        \"hostCaching\": \"ReadOnly\",\r\
    +        \n        \"source\": {\r\n          \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        \r\n        }\r\n      }\r\n    },\r\n    \"provisioningState\": \"Creating\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1062'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:32:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/CreateUpdateGalleryImageVersion3Min;149,Microsoft.Compute/CreateUpdateGalleryImageVersion30Min;749
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1185'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:33:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:33:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:34:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:34:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:35:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:35:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:36:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:36:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:37:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:37:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:38:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:38:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:39:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:39:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:40:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:40:52 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:41:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/3f61309e-74c5-40db-8ace-f33b7cb14a30?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:32:36.8474766+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:41:52.1279407+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"3f61309e-74c5-40db-8ace-f33b7cb14a30\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:41:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename/versions/1.0.0?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"1.0.0\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename/versions/1.0.0\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/images/versions\",\r\n  \"\
    +        location\": \"eastus\",\r\n  \"properties\": {\r\n    \"publishingProfile\"\
    +        : {\r\n      \"targetRegions\": [\r\n        {\r\n          \"name\": \"East\
    +        \ US\",\r\n          \"regionalReplicaCount\": 2,\r\n          \"storageAccountType\"\
    +        : \"Standard_ZRS\"\r\n        }\r\n      ],\r\n      \"replicaCount\": 1,\r\
    +        \n      \"excludeFromLatest\": false,\r\n      \"publishedDate\": \"2020-03-12T07:32:36.8631028+00:00\"\
    +        ,\r\n      \"storageAccountType\": \"Standard_LRS\"\r\n    },\r\n    \"storageProfile\"\
    +        : {\r\n      \"osDiskImage\": {\r\n        \"sizeInGB\": 200,\r\n        \"\
    +        hostCaching\": \"ReadOnly\",\r\n        \"source\": {\r\n          \"id\"\
    +        : \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        \r\n        }\r\n      }\r\n    },\r\n    \"provisioningState\": \"Succeeded\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1089'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:41:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetGalleryImageVersion3Min;1999,Microsoft.Compute/GetGalleryImageVersion30Min;9997
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"location": "eastus", "properties": {"publisher": "Microsoft.Azure.NetworkWatcher",
    +      "type": "NetworkWatcherAgentWindows", "typeHandlerVersion": "1.4", "autoUpgradeMinorVersion":
    +      true}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '185'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"virtualmachineextensionname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachines/extensions\",\r\n  \"\
    +        location\": \"eastus\",\r\n  \"properties\": {\r\n    \"autoUpgradeMinorVersion\"\
    +        : true,\r\n    \"provisioningState\": \"Creating\",\r\n    \"publisher\":\
    +        \ \"Microsoft.Azure.NetworkWatcher\",\r\n    \"type\": \"NetworkWatcherAgentWindows\"\
    +        ,\r\n    \"typeHandlerVersion\": \"1.4\"\r\n  }\r\n}"
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/4c3eb603-f38f-4554-8b0c-764dcdd7af12?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '573'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/UpdateVM3Min;239,Microsoft.Compute/UpdateVM30Min;1198
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1199'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: '{"properties": {"publisher": "Microsoft.Azure.NetworkWatcher", "type":
    +      "NetworkWatcherAgentWindows", "typeHandlerVersion": "1.4", "autoUpgradeMinorVersion":
    +      true}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '163'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PUT
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/extensions/vmssextensionname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"vmssextensionname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/extensions/vmssextensionname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachineScaleSets/extensions\"\
    +        ,\r\n  \"properties\": {\r\n    \"provisioningState\": \"Succeeded\",\r\n\
    +        \    \"autoUpgradeMinorVersion\": true,\r\n    \"publisher\": \"Microsoft.Azure.NetworkWatcher\"\
    +        ,\r\n    \"type\": \"NetworkWatcherAgentWindows\",\r\n    \"typeHandlerVersion\"\
    +        : \"1.4\"\r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/9e0210d8-b7fd-48f8-a96d-19f84c69f035?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '562'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/VMScaleSetActions3Min;239,Microsoft.Compute/VMScaleSetActions30Min;1199,Microsoft.Compute/VmssQueuedVMOperations;4800
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1198'
    +      x-ms-request-charge:
    +      - '0'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename/versions/1.0.0?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"1.0.0\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename/versions/1.0.0\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/images/versions\",\r\n  \"\
    +        location\": \"eastus\",\r\n  \"properties\": {\r\n    \"publishingProfile\"\
    +        : {\r\n      \"targetRegions\": [\r\n        {\r\n          \"name\": \"East\
    +        \ US\",\r\n          \"regionalReplicaCount\": 2,\r\n          \"storageAccountType\"\
    +        : \"Standard_ZRS\"\r\n        }\r\n      ],\r\n      \"replicaCount\": 1,\r\
    +        \n      \"excludeFromLatest\": false,\r\n      \"publishedDate\": \"2020-03-12T07:32:36.8631028+00:00\"\
    +        ,\r\n      \"storageAccountType\": \"Standard_LRS\"\r\n    },\r\n    \"storageProfile\"\
    +        : {\r\n      \"osDiskImage\": {\r\n        \"sizeInGB\": 200,\r\n        \"\
    +        hostCaching\": \"ReadOnly\",\r\n        \"source\": {\r\n          \"id\"\
    +        : \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        \r\n        }\r\n      }\r\n    },\r\n    \"provisioningState\": \"Succeeded\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1089'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetGalleryImageVersion3Min;1997,Microsoft.Compute/GetGalleryImageVersion30Min;9995
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/applications/applicationname?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"applicationname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/applications/applicationname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/applications\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"supportedOSType\": \"Windows\"\
    +        ,\r\n    \"description\": \"This is the gallery application description.\"\
    +        ,\r\n    \"eula\": \"This is the gallery application EULA.\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '495'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/proximityPlacementGroups/proximityplacementgroupname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"proximityplacementgroupname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/proximityPlacementGroups/proximityplacementgroupname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/proximityPlacementGroups\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"proximityPlacementGroupType\"\
    +        : \"Standard\",\r\n    \"virtualMachines\": [],\r\n    \"virtualMachineScaleSets\"\
    +        : [],\r\n    \"availabilitySets\": []\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '495'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/HighCostGet3Min;138,Microsoft.Compute/HighCostGet30Min;698
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/instanceView?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"computerName\": \"myVM\",\r\n  \"osName\": \"Windows Server\
    +        \ 2016 Datacenter\",\r\n  \"osVersion\": \"Microsoft Windows NT 10.0.14393.0\"\
    +        ,\r\n  \"vmAgent\": {\r\n    \"vmAgentVersion\": \"2.7.41491.963\",\r\n  \
    +        \  \"statuses\": [\r\n      {\r\n        \"code\": \"ProvisioningState/succeeded\"\
    +        ,\r\n        \"level\": \"Info\",\r\n        \"displayStatus\": \"Ready\"\
    +        ,\r\n        \"message\": \"GuestAgent is running and accepting new configurations.\"\
    +        ,\r\n        \"time\": \"2020-03-12T07:42:05+00:00\"\r\n      }\r\n    ],\r\
    +        \n    \"extensionHandlers\": [\r\n      {\r\n        \"type\": \"Microsoft.Azure.Geneva.GenevaMonitoring\"\
    +        ,\r\n        \"typeHandlerVersion\": \"2.16.0.1\",\r\n        \"status\":\
    +        \ {\r\n          \"code\": \"ProvisioningState/succeeded\",\r\n          \"\
    +        level\": \"Info\",\r\n          \"displayStatus\": \"Ready\",\r\n        \
    +        \  \"message\": \"ExtensionOperation:enable. Status:Success\"\r\n        }\r\
    +        \n      }\r\n    ]\r\n  },\r\n  \"disks\": [\r\n    {\r\n      \"name\": \"\
    +        myVMosdisk\",\r\n      \"statuses\": [\r\n        {\r\n          \"code\"\
    +        : \"ProvisioningState/succeeded\",\r\n          \"level\": \"Info\",\r\n \
    +        \         \"displayStatus\": \"Provisioning succeeded\",\r\n          \"time\"\
    +        : \"2020-03-12T07:26:52.0436758+00:00\"\r\n        }\r\n      ]\r\n    },\r\
    +        \n    {\r\n      \"name\": \"vmnamexyz_disk2_8a611e9e97d6459b81fc7fb72dca7039\"\
    +        ,\r\n      \"statuses\": [\r\n        {\r\n          \"code\": \"ProvisioningState/succeeded\"\
    +        ,\r\n          \"level\": \"Info\",\r\n          \"displayStatus\": \"Provisioning\
    +        \ succeeded\",\r\n          \"time\": \"2020-03-12T07:26:52.0436758+00:00\"\
    +        \r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"name\": \"vmnamexyz_disk3_8332cea32dc04f088ad4afac8d2e6e37\"\
    +        ,\r\n      \"statuses\": [\r\n        {\r\n          \"code\": \"ProvisioningState/succeeded\"\
    +        ,\r\n          \"level\": \"Info\",\r\n          \"displayStatus\": \"Provisioning\
    +        \ succeeded\",\r\n          \"time\": \"2020-03-12T07:26:52.0436758+00:00\"\
    +        \r\n        }\r\n      ]\r\n    }\r\n  ],\r\n  \"extensions\": [\r\n    {\r\
    +        \n      \"name\": \"Microsoft.Azure.Geneva.GenevaMonitoring\",\r\n      \"\
    +        type\": \"Microsoft.Azure.Geneva.GenevaMonitoring\",\r\n      \"typeHandlerVersion\"\
    +        : \"2.16.0.1\",\r\n      \"statuses\": [\r\n        {\r\n          \"code\"\
    +        : \"ProvisioningState/succeeded\",\r\n          \"level\": \"Info\",\r\n \
    +        \         \"displayStatus\": \"Provisioning succeeded\",\r\n          \"message\"\
    +        : \"ExtensionOperation:enable. Status:Success\",\r\n          \"time\": \"\
    +        2020-03-12T07:41:55+00:00\"\r\n        }\r\n      ]\r\n    },\r\n    {\r\n\
    +        \      \"name\": \"virtualmachineextensionname\"\r\n    }\r\n  ],\r\n  \"\
    +        hyperVGeneration\": \"V1\",\r\n  \"statuses\": [\r\n    {\r\n      \"code\"\
    +        : \"ProvisioningState/updating\",\r\n      \"level\": \"Info\",\r\n      \"\
    +        displayStatus\": \"Updating\"\r\n    },\r\n    {\r\n      \"code\": \"PowerState/running\"\
    +        ,\r\n      \"level\": \"Info\",\r\n      \"displayStatus\": \"VM running\"\
    +        \r\n    }\r\n  ]\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2620'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;3998,Microsoft.Compute/LowCostGet30Min;31990
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/publishers/MicrosoftWindowsServer/artifacttypes/vmimage/offers/WindowsServer/skus/2019-Datacenter/versions/2019.0.20190115?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"properties\": {\r\n    \"hyperVGeneration\": \"V1\",\r\n \
    +        \   \"replicaType\": \"Unmanaged\",\r\n    \"disallowed\": {\r\n      \"vmDiskType\"\
    +        : \"None\"\r\n    },\r\n    \"automaticOSUpgradeProperties\": {\r\n      \"\
    +        automaticOSUpgradeSupported\": true\r\n    },\r\n    \"osDiskImage\": {\r\n\
    +        \      \"operatingSystem\": \"Windows\",\r\n      \"sizeInGb\": 128,\r\n \
    +        \     \"sizeInBytes\": 136367309312\r\n    },\r\n    \"dataDiskImages\": []\r\
    +        \n  },\r\n  \"location\": \"eastus\",\r\n  \"name\": \"2019.0.20190115\",\r\
    +        \n  \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/2019.0.20190115\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '678'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/publishers/Microsoft.Compute/artifacttypes/vmextension/types/VMAccessAgent/versions/1.0.2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"properties\": {\r\n    \"operatingSystem\": \"Windows\",\r\
    +        \n    \"computeRole\": \"IaaS\",\r\n    \"vmScaleSetEnabled\": false,\r\n\
    +        \    \"supportsMultipleExtensions\": false,\r\n    \"rollbackSupported\":\
    +        \ false,\r\n    \"isJsonExtension\": false\r\n  },\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"name\": \"1.0.2\",\r\n  \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/1.0.2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '473'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz/hosts/hostname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"hostname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz/hosts/hostname\"\
    +        ,\r\n  \"location\": \"eastus\",\r\n  \"tags\": {\r\n    \"department\": \"\
    +        HR\"\r\n  },\r\n  \"sku\": {\r\n    \"name\": \"DSv3-Type1\"\r\n  },\r\n \
    +        \ \"properties\": {\r\n    \"platformFaultDomain\": 1,\r\n    \"autoReplaceOnFailure\"\
    +        : true,\r\n    \"hostId\": \"088ab045-ff9e-49af-8746-f11342a580dc\",\r\n \
    +        \   \"virtualMachines\": [],\r\n    \"provisioningTime\": \"2020-03-12T07:29:10.3410931+00:00\"\
    +        ,\r\n    \"provisioningState\": \"Succeeded\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '605'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetDedicatedHost3Min;249,Microsoft.Compute/GetDedicatedHost30Min;994
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"imagename\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/images\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"hyperVGeneration\": \"V1\",\r\
    +        \n    \"osType\": \"Windows\",\r\n    \"osState\": \"Generalized\",\r\n  \
    +        \  \"identifier\": {\r\n      \"publisher\": \"myPublisherName\",\r\n    \
    +        \  \"offer\": \"myOfferName\",\r\n      \"sku\": \"mySkuName\"\r\n    },\r\
    +        \n    \"provisioningState\": \"Succeeded\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '566'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"vmnamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachines\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"vmId\": \"1b0aa70d-95b1-4e60-915a-cd42973c05d3\"\
    +        ,\r\n    \"hardwareProfile\": {\r\n      \"vmSize\": \"Standard_D2_v2\"\r\n\
    +        \    },\r\n    \"storageProfile\": {\r\n      \"imageReference\": {\r\n  \
    +        \      \"publisher\": \"MicrosoftWindowsServer\",\r\n        \"offer\": \"\
    +        WindowsServer\",\r\n        \"sku\": \"2016-Datacenter\",\r\n        \"version\"\
    +        : \"latest\",\r\n        \"exactVersion\": \"14393.3504.2002070914\"\r\n \
    +        \     },\r\n      \"osDisk\": {\r\n        \"osType\": \"Windows\",\r\n  \
    +        \      \"name\": \"myVMosdisk\",\r\n        \"createOption\": \"FromImage\"\
    +        ,\r\n        \"caching\": \"ReadWrite\",\r\n        \"managedDisk\": {\r\n\
    +        \          \"storageAccountType\": \"Standard_LRS\",\r\n          \"id\":\
    +        \ \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/disks/myVMosdisk\"\
    +        \r\n        },\r\n        \"diskSizeGB\": 127\r\n      },\r\n      \"dataDisks\"\
    +        : [\r\n        {\r\n          \"lun\": 0,\r\n          \"name\": \"vmnamexyz_disk2_8a611e9e97d6459b81fc7fb72dca7039\"\
    +        ,\r\n          \"createOption\": \"Empty\",\r\n          \"caching\": \"None\"\
    +        ,\r\n          \"managedDisk\": {\r\n            \"storageAccountType\": \"\
    +        Standard_LRS\",\r\n            \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/disks/vmnamexyz_disk2_8a611e9e97d6459b81fc7fb72dca7039\"\
    +        \r\n          },\r\n          \"diskSizeGB\": 1023,\r\n          \"toBeDetached\"\
    +        : false\r\n        },\r\n        {\r\n          \"lun\": 1,\r\n          \"\
    +        name\": \"vmnamexyz_disk3_8332cea32dc04f088ad4afac8d2e6e37\",\r\n        \
    +        \  \"createOption\": \"Empty\",\r\n          \"caching\": \"None\",\r\n  \
    +        \        \"managedDisk\": {\r\n            \"storageAccountType\": \"Standard_LRS\"\
    +        ,\r\n            \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/disks/vmnamexyz_disk3_8332cea32dc04f088ad4afac8d2e6e37\"\
    +        \r\n          },\r\n          \"diskSizeGB\": 1023,\r\n          \"toBeDetached\"\
    +        : false\r\n        }\r\n      ]\r\n    },\r\n    \"osProfile\": {\r\n    \
    +        \  \"computerName\": \"myVM\",\r\n      \"adminUsername\": \"testuser\",\r\
    +        \n      \"windowsConfiguration\": {\r\n        \"provisionVMAgent\": true,\r\
    +        \n        \"enableAutomaticUpdates\": true\r\n      },\r\n      \"secrets\"\
    +        : [],\r\n      \"allowExtensionOperations\": true,\r\n      \"requireGuestProvisionSignal\"\
    +        : true\r\n    },\r\n    \"networkProfile\": {\"networkInterfaces\":[{\"id\"\
    +        :\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name\"\
    +        ,\"properties\":{\"primary\":true}}]},\r\n    \"provisioningState\": \"Updating\"\
    +        \r\n  },\r\n  \"resources\": [\r\n    {\r\n      \"name\": \"Microsoft.Azure.Geneva.GenevaMonitoring\"\
    +        ,\r\n      \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/Microsoft.Azure.Geneva.GenevaMonitoring\"\
    +        ,\r\n      \"type\": \"Microsoft.Compute/virtualMachines/extensions\",\r\n\
    +        \      \"location\": \"eastus\",\r\n      \"properties\": {\r\n        \"\
    +        autoUpgradeMinorVersion\": true,\r\n        \"provisioningState\": \"Updating\"\
    +        ,\r\n        \"enableAutomaticUpgrade\": true,\r\n        \"publisher\": \"\
    +        Microsoft.Azure.Geneva\",\r\n        \"type\": \"GenevaMonitoring\",\r\n \
    +        \       \"typeHandlerVersion\": \"2.0\",\r\n        \"settings\": {}\r\n \
    +        \     }\r\n    },\r\n    {\r\n      \"name\": \"virtualmachineextensionname\"\
    +        ,\r\n      \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname\"\
    +        ,\r\n      \"type\": \"Microsoft.Compute/virtualMachines/extensions\",\r\n\
    +        \      \"location\": \"eastus\",\r\n      \"properties\": {\r\n        \"\
    +        autoUpgradeMinorVersion\": true,\r\n        \"provisioningState\": \"Creating\"\
    +        ,\r\n        \"publisher\": \"Microsoft.Azure.NetworkWatcher\",\r\n      \
    +        \  \"type\": \"NetworkWatcherAgentWindows\",\r\n        \"typeHandlerVersion\"\
    +        : \"1.4\"\r\n      }\r\n    }\r\n  ]\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '4237'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;3997,Microsoft.Compute/LowCostGet30Min;31989
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"virtualmachinescalesetname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachineScaleSets\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"sku\": {\r\n    \"name\": \"Standard_D1_v2\",\r\n   \
    +        \ \"tier\": \"Standard\",\r\n    \"capacity\": 2\r\n  },\r\n  \"properties\"\
    +        : {\r\n    \"singlePlacementGroup\": true,\r\n    \"upgradePolicy\": {\r\n\
    +        \      \"mode\": \"Manual\"\r\n    },\r\n    \"virtualMachineProfile\": {\r\
    +        \n      \"osProfile\": {\r\n        \"computerNamePrefix\": \"testPC\",\r\n\
    +        \        \"adminUsername\": \"testuser\",\r\n        \"linuxConfiguration\"\
    +        : {\r\n          \"disablePasswordAuthentication\": false,\r\n          \"\
    +        provisionVMAgent\": true\r\n        },\r\n        \"secrets\": [],\r\n   \
    +        \     \"allowExtensionOperations\": true,\r\n        \"requireGuestProvisionSignal\"\
    +        : true\r\n      },\r\n      \"storageProfile\": {\r\n        \"osDisk\": {\r\
    +        \n          \"createOption\": \"FromImage\",\r\n          \"caching\": \"\
    +        ReadWrite\",\r\n          \"managedDisk\": {\r\n            \"storageAccountType\"\
    +        : \"Standard_LRS\"\r\n          },\r\n          \"diskSizeGB\": 512\r\n  \
    +        \      },\r\n        \"imageReference\": {\r\n          \"publisher\": \"\
    +        Canonical\",\r\n          \"offer\": \"UbuntuServer\",\r\n          \"sku\"\
    +        : \"18.04-LTS\",\r\n          \"version\": \"latest\"\r\n        }\r\n   \
    +        \   },\r\n      \"networkProfile\": {\"networkInterfaceConfigurations\":[{\"\
    +        name\":\"testPC\",\"properties\":{\"primary\":true,\"enableAcceleratedNetworking\"\
    +        :false,\"dnsSettings\":{\"dnsServers\":[]},\"enableIPForwarding\":false,\"\
    +        ipConfigurations\":[{\"name\":\"testPC\",\"properties\":{\"subnet\":{\"id\"\
    +        :\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz\"\
    +        },\"privateIPAddressVersion\":\"IPv4\"}}]}}]},\r\n      \"extensionProfile\"\
    +        : {\r\n        \"extensions\": [\r\n          {\r\n            \"name\": \"\
    +        vmssextensionname\",\r\n            \"properties\": {\r\n              \"\
    +        autoUpgradeMinorVersion\": true,\r\n              \"publisher\": \"Microsoft.Azure.NetworkWatcher\"\
    +        ,\r\n              \"type\": \"NetworkWatcherAgentWindows\",\r\n         \
    +        \     \"typeHandlerVersion\": \"1.4\"\r\n            }\r\n          }\r\n\
    +        \        ]\r\n      }\r\n    },\r\n    \"provisioningState\": \"Succeeded\"\
    +        ,\r\n    \"overprovision\": true,\r\n    \"doNotRunExtensionsOnOverprovisionedVMs\"\
    +        : false,\r\n    \"uniqueId\": \"052fe2f1-c75d-482f-9b18-bad155cba912\"\r\n\
    +        \  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2438'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetVMScaleSet3Min;397,Microsoft.Compute/GetVMScaleSet30Min;2594
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/instanceView?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"virtualMachine\": {\r\n    \"statusesSummary\": [\r\n    \
    +        \  {\r\n        \"code\": \"ProvisioningState/succeeded\",\r\n        \"count\"\
    +        : 2\r\n      }\r\n    ]\r\n  },\r\n  \"extensions\": [\r\n    {\r\n      \"\
    +        name\": \"vmssextensionname\",\r\n      \"statusesSummary\": [\r\n       \
    +        \ {\r\n          \"code\": \"ProvisioningState/creating\",\r\n          \"\
    +        count\": 2\r\n        }\r\n      ]\r\n    }\r\n  ],\r\n  \"statuses\": [\r\
    +        \n    {\r\n      \"code\": \"ProvisioningState/succeeded\",\r\n      \"level\"\
    +        : \"Info\",\r\n      \"displayStatus\": \"Provisioning succeeded\",\r\n  \
    +        \    \"time\": \"2020-03-12T07:42:09.7807319+00:00\"\r\n    }\r\n  ]\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '564'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/HighCostGetVMScaleSet3Min;179,Microsoft.Compute/HighCostGetVMScaleSet30Min;898
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"virtualmachineextensionname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachines/extensions\",\r\n  \"\
    +        location\": \"eastus\",\r\n  \"properties\": {\r\n    \"autoUpgradeMinorVersion\"\
    +        : true,\r\n    \"provisioningState\": \"Creating\",\r\n    \"publisher\":\
    +        \ \"Microsoft.Azure.NetworkWatcher\",\r\n    \"type\": \"NetworkWatcherAgentWindows\"\
    +        ,\r\n    \"typeHandlerVersion\": \"1.4\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '573'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;3996,Microsoft.Compute/LowCostGet30Min;31988
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/extensions/vmssextensionname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"vmssextensionname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/extensions/vmssextensionname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachineScaleSets/extensions\"\
    +        ,\r\n  \"properties\": {\r\n    \"provisioningState\": \"Creating\",\r\n \
    +        \   \"autoUpgradeMinorVersion\": true,\r\n    \"publisher\": \"Microsoft.Azure.NetworkWatcher\"\
    +        ,\r\n    \"type\": \"NetworkWatcherAgentWindows\",\r\n    \"typeHandlerVersion\"\
    +        : \"1.4\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '561'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;3995,Microsoft.Compute/LowCostGet30Min;31987
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"value\": [\r\n    {\r\n      \"name\": \"Microsoft.Azure.Geneva.GenevaMonitoring\"\
    +        ,\r\n      \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/Microsoft.Azure.Geneva.GenevaMonitoring\"\
    +        ,\r\n      \"type\": \"Microsoft.Compute/virtualMachines/extensions\",\r\n\
    +        \      \"location\": \"eastus\",\r\n      \"properties\": {\r\n        \"\
    +        autoUpgradeMinorVersion\": true,\r\n        \"provisioningState\": \"Updating\"\
    +        ,\r\n        \"enableAutomaticUpgrade\": true,\r\n        \"publisher\": \"\
    +        Microsoft.Azure.Geneva\",\r\n        \"type\": \"GenevaMonitoring\",\r\n \
    +        \       \"typeHandlerVersion\": \"2.0\",\r\n        \"settings\": {}\r\n \
    +        \     }\r\n    },\r\n    {\r\n      \"name\": \"virtualmachineextensionname\"\
    +        ,\r\n      \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname\"\
    +        ,\r\n      \"type\": \"Microsoft.Compute/virtualMachines/extensions\",\r\n\
    +        \      \"location\": \"eastus\",\r\n      \"properties\": {\r\n        \"\
    +        autoUpgradeMinorVersion\": true,\r\n        \"provisioningState\": \"Creating\"\
    +        ,\r\n        \"publisher\": \"Microsoft.Azure.NetworkWatcher\",\r\n      \
    +        \  \"type\": \"NetworkWatcherAgentWindows\",\r\n        \"typeHandlerVersion\"\
    +        : \"1.4\"\r\n      }\r\n    }\r\n  ]\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1350'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;3994,Microsoft.Compute/LowCostGet30Min;31986
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/publishers/MicrosoftWindowsServer/artifacttypes/vmimage/offers/WindowsServer/skus/2019-Datacenter/versions?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "[\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"17763.1039.2002091844\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/17763.1039.2002091844\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"17763.557.1907191810\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/17763.557.1907191810\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"17763.557.20190604\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/17763.557.20190604\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"17763.615.1907121548\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/17763.615.1907121548\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"17763.678.1908092216\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/17763.678.1908092216\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"17763.737.1909062324\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/17763.737.1909062324\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"17763.805.1910061628\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/17763.805.1910061628\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"17763.864.1911120152\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/17763.864.1911120152\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"17763.914.1912042330\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/17763.914.1912042330\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"17763.973.2001110547\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/17763.973.2001110547\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2019.0.20181107\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/2019.0.20181107\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2019.0.20181122\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/2019.0.20181122\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2019.0.20181218\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/2019.0.20181218\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2019.0.20190115\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/2019.0.20190115\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2019.0.20190214\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/2019.0.20190214\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2019.0.20190314\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/2019.0.20190314\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2019.0.20190410\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/2019.0.20190410\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2019.0.20190603\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter/Versions/2019.0.20190603\"\
    +        \r\n  }\r\n]"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '5555'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/publishers/MicrosoftWindowsServer/artifacttypes/vmimage/offers?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "[\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"19h1gen2servertest\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/19h1gen2servertest\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"servertesting\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/servertesting\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windows-10-1607-vhd-server-prod-stage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windows-10-1607-vhd-server-prod-stage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windows-10-1607-vhd-sf-server-prod-stage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windows-10-1607-vhd-sf-server-prod-stage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windows-10-1803-vhd-server-prod-stage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windows-10-1803-vhd-server-prod-stage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windows-10-1809-vhd-server-prod-stage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windows-10-1809-vhd-server-prod-stage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windows-10-1809-vhd-sf-server-prod-stage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windows-10-1809-vhd-sf-server-prod-stage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windows-10-1903-vhd-server-prod-stage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windows-10-1903-vhd-server-prod-stage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windows-10-1909-vhd-server-prod-stage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windows-10-1909-vhd-server-prod-stage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windows-7-0-sp1-vhd-server-prod-stage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windows-7-0-sp1-vhd-server-prod-stage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windows-8-0-vhd-server-prod-stage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windows-8-0-vhd-server-prod-stage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windows-8-1-vhd-server-prod-stage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windows-8-1-vhd-server-prod-stage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Windows-HUB\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/Windows-HUB\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windows-server-2012-vhd-server-prod-stage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windows-server-2012-vhd-server-prod-stage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"WindowsServer\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windowsserver-gen2-testing\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windowsserver-gen2-testing\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windowsserver-gen2preview\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windowsserver-gen2preview\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"windowsserverdotnet\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/windowsserverdotnet\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"WindowsServerSemiAnnual\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServerSemiAnnual\"\
    +        \r\n  }\r\n]"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '5468'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/publishers?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "[\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"128technology\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/128technology\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"1e\",\r\
    +        \n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/1e\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2021ai\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/2021ai\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"3cx-pbx\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/3cx-pbx\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"4psa\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/4psa\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"5nine-software-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/5nine-software-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"7isolutions\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/7isolutions\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"a10networks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/a10networks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"abiquo\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/abiquo\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"accedian\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/accedian\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"accelario1579101623356\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/accelario1579101623356\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"accellion\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/accellion\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"accessdata-group\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/accessdata-group\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"accops\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/accops\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Acronis\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Acronis\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Acronis.Backup\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Acronis.Backup\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"actian-corp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/actian-corp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"actian_matrix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/actian_matrix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"actifio\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/actifio\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"activeeon\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/activeeon\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"activeops\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/activeops\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"adastracorporation-4028356\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/adastracorporation-4028356\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"adgs\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/adgs\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"advantech\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/advantech\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"advantech-webaccess\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/advantech-webaccess\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"advantys\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/advantys\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"aelf\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/aelf\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"aerospike\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/aerospike\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"affinio\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/affinio\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"aggregion-ltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/aggregion-ltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"airalabrus\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/airalabrus\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"aiscaler-cache-control-ddos-and-url-rewriting-\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/aiscaler-cache-control-ddos-and-url-rewriting-\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"akamai-technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/akamai-technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"akumina\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/akumina\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"akumo-software\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/akumo-software\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"alachisoft\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/alachisoft\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"alertlogic\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/alertlogic\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"AlertLogic.Extension\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/AlertLogic.Extension\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"alicetrix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/alicetrix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"alienvault\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/alienvault\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"alldigital-brevity\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/alldigital-brevity\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"altair-engineering-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/altair-engineering-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"altamira-corporation\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/altamira-corporation\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"alteryx\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/alteryx\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"altova\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/altova\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"antmedia\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/antmedia\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"aod\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/aod\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"apigee\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/apigee\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"appcara\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/appcara\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"appcelerator\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/appcelerator\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"appex-networks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/appex-networks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"appistry\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/appistry\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"appiyo_technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/appiyo_technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"appmint_inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/appmint_inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"apps-4-rent\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/apps-4-rent\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"appscale-marketplace\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/appscale-marketplace\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"aquaforest\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/aquaforest\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"arabesque-group\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/arabesque-group\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"arangodb\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/arangodb\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"aras\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/aras\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"arcblock\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/arcblock\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"arcesb\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/arcesb\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"arcserveusallc-marketing\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/arcserveusallc-marketing\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"arista-networks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/arista-networks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ariwontollc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ariwontollc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"array_networks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/array_networks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"artificial-intelligence-techniques-sl\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/artificial-intelligence-techniques-sl\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"arubanetworks-4922182\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/arubanetworks-4922182\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"asigra\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/asigra\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"astadia-1148316\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/astadia-1148316\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"asyscosoftwarebv\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/asyscosoftwarebv\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ataccama\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ataccama\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"atlgaming\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/atlgaming\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"atmosera\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/atmosera\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"atomicorp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/atomicorp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"attunity_cloudbeam\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/attunity_cloudbeam\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"audiocodes\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/audiocodes\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"auraportal\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/auraportal\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"auriq-systems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/auriq-systems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"automationanywhere\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/automationanywhere\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"avanseus\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/avanseus\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"avepoint\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/avepoint\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"aveva1\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/aveva1\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"avi-networks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/avi-networks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"aviatrix-systems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/aviatrix-systems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"awingu\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/awingu\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"axsguardablenv\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/axsguardablenv\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"axway\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/axway\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"axxana\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/axxana\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"azul\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/azul\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"azurecyclecloud\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/azurecyclecloud\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"AzureDatabricks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/AzureDatabricks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"azureopenshift\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/azureopenshift\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"AzureRT.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/AzureRT.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"azuretesting\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/azuretesting\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"azuretesting2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/azuretesting2\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"azuretesting3\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/azuretesting3\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"AzureTools1type\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/AzureTools1type\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"baas-techbureau\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/baas-techbureau\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"baffle-io\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/baffle-io\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"balabit\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/balabit\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"barracudanetworks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/barracudanetworks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"basho\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/basho\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"batch\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/batch\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bayware\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bayware\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bdy\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bdy\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bellsoft1582871421940\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bellsoft1582871421940\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"betsol\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/betsol\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"beyondtrust\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/beyondtrust\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bi-builders-as\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bi-builders-as\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Bitnami\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Bitnami\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bizagi\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bizagi\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"biztalk360\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/biztalk360\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"black-duck-software\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/black-duck-software\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"blackbird\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/blackbird\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"blk-technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/blk-technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"blockapps\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/blockapps\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"blockchain-foundry\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/blockchain-foundry\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"blockstack\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/blockstack\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bloombase\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bloombase\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bluecat\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bluecat\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"blueprismlimited-4827145\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/blueprismlimited-4827145\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bluetalon\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bluetalon\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bmc.ctm\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bmc.ctm\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bmcctm.test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bmcctm.test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"boardpacpvtltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/boardpacpvtltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bocada\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bocada\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"botanalytics\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/botanalytics\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bravura-software-llc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bravura-software-llc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bright-computing\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bright-computing\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"brightcomputing\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/brightcomputing\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"brocade_communications\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/brocade_communications\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bssw\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bssw\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"bt-americas-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/bt-americas-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"buddhalabs\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/buddhalabs\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Canonical\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"canonical-test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/canonical-test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"carto\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/carto\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cask\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cask\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"catechnologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/catechnologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cautelalabs\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cautelalabs\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cavirin\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cavirin\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cayosoftinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cayosoftinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cds\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cds\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"celum-gmbh\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/celum-gmbh\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"center-for-internet-security-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/center-for-internet-security-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"centeritysystems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/centeritysystems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"certivox\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/certivox\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cfd-direct\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cfd-direct\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"chain\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/chain\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"checkpoint\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/checkpoint\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"chef-software\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/chef-software\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Chef.Bootstrap.WindowsAzure\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Chef.Bootstrap.WindowsAzure\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cinchy\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cinchy\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cinegy-gmbh\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cinegy-gmbh\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"circleci\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/circleci\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cires21\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cires21\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cirruswaveinc1579234787943\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cirruswaveinc1579234787943\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cisco\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cisco\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"citrix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/citrix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Citrix.ADC\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Citrix.ADC\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"clear-linux-project\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/clear-linux-project\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"clone-systems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/clone-systems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"clouber\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/clouber\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloud-cruiser\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloud-cruiser\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloud-infrastructure-services\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloud-infrastructure-services\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudbees\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudbees\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudbees-enterprise-jenkins\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudbees-enterprise-jenkins\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudbolt-software\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudbolt-software\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudboost\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudboost\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudcover\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudcover\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudenablers-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudenablers-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudera\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudera\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudflare\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudflare\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudhouse\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudhouse\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudlanes\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudlanes\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudlink\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudlink\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"CloudLinkEMC.SecureVM\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/CloudLinkEMC.SecureVM\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudplan-gmbh\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudplan-gmbh\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudsecurity\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudsecurity\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudsoft\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudsoft\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cloudwhizsolutions\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cloudwhizsolutions\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"clustrix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/clustrix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cncf-upstream\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cncf-upstream\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"codelathe\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/codelathe\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"codenvy\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/codenvy\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cognitive-scale\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cognitive-scale\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cognizant\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cognizant\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cognosys\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cognosys\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cohesity\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cohesity\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cohesive\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cohesive\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"collabcloudlimited\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/collabcloudlimited\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"commvault\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/commvault\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"compellon\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/compellon\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"composable\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/composable\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"comunity\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/comunity\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Confer\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Confer\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"confluentinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/confluentinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"conflux\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/conflux\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"connecting-software\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/connecting-software\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"consensys\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/consensys\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"containeraider\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/containeraider\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"contiamogmbh\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/contiamogmbh\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"controlcase\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/controlcase\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"convertigo\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/convertigo\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"corda\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/corda\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"corent-technology-pvt\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/corent-technology-pvt\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"CoreOS\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/CoreOS\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"couchbase\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/couchbase\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"credativ\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/credativ\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cryptzone\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cryptzone\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ctm.bmc.com\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ctm.bmc.com\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cybernetica-as\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cybernetica-as\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"cyxtera\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/cyxtera\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"d4t4_solutions-1164305\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/d4t4_solutions-1164305\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"danielsol.AzureTools1\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/danielsol.AzureTools1\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"danielsol.AzureTools1pns500\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/danielsol.AzureTools1pns500\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Dans.Windows.App\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Dans.Windows.App\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Dans3.Windows.App\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Dans3.Windows.App\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dataart\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dataart\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"databricks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/databricks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"datacore\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/datacore\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Datadog.Agent\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Datadog.Agent\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dataiku\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dataiku\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"datalayer\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/datalayer\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"datanova\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/datanova\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"datapredsa\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/datapredsa\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dataroadtechnologiesllc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dataroadtechnologiesllc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"datastax\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/datastax\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"datasunrise\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/datasunrise\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"datavirtualitygmbh\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/datavirtualitygmbh\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ddn-whamcloud-5345716\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ddn-whamcloud-5345716\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Debian\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Debian\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dece-4446019\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dece-4446019\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"decisosalesbv\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/decisosalesbv\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dellemc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dellemc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dell_software\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dell_software\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"delphix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/delphix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"denodo\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/denodo\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"derdack\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/derdack\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"devfactory\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/devfactory\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"device42inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/device42inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"devopsgroup-uk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/devopsgroup-uk\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dgsecure\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dgsecure\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dhi\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dhi\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"diagramics\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/diagramics\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"diehl-metering\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/diehl-metering\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"digisitesystems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/digisitesystems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"digitaldefenseinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/digitaldefenseinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"digitaloffice\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/digitaloffice\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"digitamizeinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/digitamizeinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"diladele\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/diladele\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dimensionalmechanics-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dimensionalmechanics-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"diqa\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/diqa\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"diyotta\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/diyotta\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"djiindustrialincus\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/djiindustrialincus\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"docker\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/docker\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dome9\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dome9\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dorabot\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dorabot\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dremiocorporation\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dremiocorporation\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"drizti\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/drizti\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"drone\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/drone\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dsi\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dsi\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dundas\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dundas\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dyadic_security\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dyadic_security\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dynatrace\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dynatrace\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"dynatrace.ruxit\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/dynatrace.ruxit\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"eastwind-networks-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/eastwind-networks-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ecessa\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ecessa\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"edevtech\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/edevtech\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"edgenetworks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/edgenetworks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"education4sight\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/education4sight\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"egnyte\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/egnyte\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"elasticbox\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/elasticbox\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"elecard\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/elecard\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"electric-cloud\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/electric-cloud\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"elevateiot\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/elevateiot\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"eleven01\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/eleven01\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"elfiqnetworks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/elfiqnetworks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"emercoin\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/emercoin\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"enforongo\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/enforongo\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"enterprise-ethereum-alliance\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/enterprise-ethereum-alliance\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"enterprisedb-corp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/enterprisedb-corp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"enterpriseworx-it\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/enterpriseworx-it\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"eproe\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/eproe\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"equalum\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/equalum\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"equilibrium\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/equilibrium\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"esdenera\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/esdenera\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ESET\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ESET\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"esetresearch1579795941720\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/esetresearch1579795941720\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"esri\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/esri\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"esyon\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/esyon\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ethereum\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ethereum\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"eventtracker\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/eventtracker\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"evostream-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/evostream-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"exact\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/exact\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"exasol\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/exasol\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"exivity\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/exivity\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"exonar\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/exonar\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"f5-networks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/f5-networks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"falconstorsoftware\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/falconstorsoftware\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"fatpipe-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/fatpipe-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"fidesys\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/fidesys\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"filecatalyst\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/filecatalyst\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"filemagellc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/filemagellc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"fiorano\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/fiorano\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"fireeye\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/fireeye\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"firehost\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/firehost\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"flashgrid-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/flashgrid-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"flexbby\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/flexbby\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"flexbby-5255860\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/flexbby-5255860\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"flexify-io\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/flexify-io\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"flexxibleit\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/flexxibleit\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"flowmon\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/flowmon\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"flynet\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/flynet\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"foghorn-systems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/foghorn-systems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"forcepoint-llc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/forcepoint-llc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"forescout\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/forescout\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"formpipesoftwareab\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/formpipesoftwareab\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"forscene\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/forscene\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"fortinet\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/fortinet\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"fortycloud\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/fortycloud\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"fotopiatechnologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/fotopiatechnologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"fujitsu_fast\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/fujitsu_fast\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"fw\",\r\
    +        \n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/fw\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"gapteq\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/gapteq\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"gatlingcorp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/gatlingcorp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"gbs\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/gbs\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"gemalto-safenet\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/gemalto-safenet\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Gemalto.SafeNet.ProtectV\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Gemalto.SafeNet.ProtectV\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"genymobile\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/genymobile\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"gigamon-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/gigamon-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"GitHub\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/GitHub\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"gitlab\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/gitlab\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"globalscape\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/globalscape\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"gluwareinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/gluwareinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"graphistry\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/graphistry\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"graphitegtc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/graphitegtc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"great-software-laboratory-private-limited\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/great-software-laboratory-private-limited\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"greensql\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/greensql\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"greycorbelsolutions\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/greycorbelsolutions\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"gridgain\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/gridgain\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"guardicore\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/guardicore\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"h2o-ai\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/h2o-ai\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hackershub\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hackershub\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"haivision\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/haivision\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hanu\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hanu\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"haproxy-technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/haproxy-technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"harpaitalia\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/harpaitalia\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hashhub\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hashhub\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hcl-technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hcl-technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"heimdall-data\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/heimdall-data\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"help-systems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/help-systems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"helpyio\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/helpyio\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"heretechnologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/heretechnologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hewlett-packard\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hewlett-packard\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hillstone-networks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hillstone-networks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hitachi-solutions\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hitachi-solutions\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hortonworks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hortonworks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hpe\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hpe\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"HPE.Security.ApplicationDefender\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/HPE.Security.ApplicationDefender\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"huawei\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/huawei\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hubstor-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hubstor-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hush-hush\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hush-hush\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hvr\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hvr\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hyperglance\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hyperglance\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hypergrid\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hypergrid\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hystaxinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hystaxinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"hytrust\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/hytrust\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"i-exceed-technology\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/i-exceed-technology\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"iaansys\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/iaansys\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ibm\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ibm\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"iboss\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/iboss\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"icubeconsultancyservicesinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/icubeconsultancyservicesinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"iguazio-5069960\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/iguazio-5069960\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ikan\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ikan\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"image-technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/image-technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"imaginecommunications\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/imaginecommunications\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"imperva\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/imperva\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"incorta\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/incorta\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"incredibuild\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/incredibuild\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"industry-weapon\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/industry-weapon\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"influxdata\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/influxdata\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"infoblox\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/infoblox\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"infogix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/infogix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"infolibrarian\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/infolibrarian\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"informatica\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/informatica\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"informationbuilders\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/informationbuilders\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"infront-consulting-group-ltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/infront-consulting-group-ltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"infscapeughaftungsbeschrnkt\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/infscapeughaftungsbeschrnkt\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ingrammicro\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ingrammicro\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"intel-bigdl\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/intel-bigdl\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"intel-fpga\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/intel-fpga\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"intellicus-technologies-pvt-ltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/intellicus-technologies-pvt-ltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"intelligent-plant-ltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/intelligent-plant-ltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"intersystems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/intersystems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"intigua\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/intigua\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"iofabric\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/iofabric\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ipswitch\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ipswitch\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"iqsol\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/iqsol\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"iquest\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/iquest\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"irion\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/irion\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ishlangu-load-balancer-adc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ishlangu-load-balancer-adc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"issp-corporation\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/issp-corporation\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"isvtestukbigcat\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/isvtestukbigcat\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"isvtestuklegacy\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/isvtestuklegacy\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"itelios\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/itelios\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"izenda\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/izenda\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"jamcracker\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/jamcracker\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"javlinltd1579185328273\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/javlinltd1579185328273\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"jedox\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/jedox\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"jelastic\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/jelastic\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"jetnexus\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/jetnexus\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"jetware-srl\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/jetware-srl\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"jfrog\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/jfrog\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"jm-technology-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/jm-technology-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"jogetinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/jogetinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"juniper-networks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/juniper-networks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"justanalytics\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/justanalytics\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kaazing\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kaazing\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kadenallc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kadenallc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kali-linux\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kali-linux\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kalkitech\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kalkitech\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Kaspersky.Lab\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Kaspersky.Lab\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"KasperskyLab.SecurityAgent\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/KasperskyLab.SecurityAgent\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kaspersky_lab\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kaspersky_lab\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kazendi\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kazendi\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kelverion\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kelverion\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kemptech\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kemptech\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kepion\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kepion\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kinetica\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kinetica\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kinvolk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kinvolk\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"knime\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/knime\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kobalt\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kobalt\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"konsys-ltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/konsys-ltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"kryonsystems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/kryonsystems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"krypc-technologies-pvt-ltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/krypc-technologies-pvt-ltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"lancom-systems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/lancom-systems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"lansa\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/lansa\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"lastline\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/lastline\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"leap-orbit\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/leap-orbit\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"leostream-corporation\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/leostream-corporation\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"lepide-software\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/lepide-software\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"libraesva\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/libraesva\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"liebsoft\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/liebsoft\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"liquid-files\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/liquid-files\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"liquidware\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/liquidware\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"literatu\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/literatu\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"litespeed_technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/litespeed_technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"litionenergiegmbh1580128829115\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/litionenergiegmbh1580128829115\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"loadbalancer\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/loadbalancer\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"logsign\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/logsign\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"logtrust\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/logtrust\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"looker\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/looker\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"lti-lt-infotech\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/lti-lt-infotech\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"luminate-security\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/luminate-security\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"machinesense\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/machinesense\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"maidenhead-bridge\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/maidenhead-bridge\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"manageengine\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/manageengine\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mapd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mapd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mapr-technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mapr-technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"marketplace-rdfe-caps\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/marketplace-rdfe-caps\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"marklogic\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/marklogic\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"massiveanalytic-\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/massiveanalytic-\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mathworks-deployment\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mathworks-deployment\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mathworks-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mathworks-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"matillion\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/matillion\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mavinglobal\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mavinglobal\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"McAfee.EndpointSecurity\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/McAfee.EndpointSecurity\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"McAfee.EndpointSecurity.test3\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/McAfee.EndpointSecurity.test3\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"meanio\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/meanio\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"media3-technologies-llc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/media3-technologies-llc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mendix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mendix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"messagesolution\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/messagesolution\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mettainnovations-4900054\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mettainnovations-4900054\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mfe_azure\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mfe_azure\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mfiles\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mfiles\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mico\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mico\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"micro-focus\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/micro-focus\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microlinkpcukltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microlinkpcukltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microolap\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microolap\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microsoft-ads\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microsoft-ads\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microsoft-aks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microsoft-aks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microsoft-avere\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microsoft-avere\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microsoft-azure-batch\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microsoft-azure-batch\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microsoft-azure-compute\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microsoft-azure-compute\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microsoft-crypto\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microsoft-crypto\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microsoft-dsvm\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microsoft-dsvm\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microsoft-hyperv\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microsoft-hyperv\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AKS\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AKS\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.ActiveDirectory\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.ActiveDirectory\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.ActiveDirectory.LinuxSSH\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.ActiveDirectory.LinuxSSH\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Applications\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Applications\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Backup.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Backup.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Backup.Test.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Backup.Test.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Compute.Security\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Compute.Security\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Diagnostics\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Diagnostics\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Diagnostics.Build.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Diagnostics.Build.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Diagnostics.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Diagnostics.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Diagnostics.Hotfix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Diagnostics.Hotfix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test012be407-61ea-4e45-a2c3-71a45999ca21-20191228083800\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test012be407-61ea-4e45-a2c3-71a45999ca21-20191228083800\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test01971384-3044-413b-8b1c-33b5d461bf23-20200107051823\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test01971384-3044-413b-8b1c-33b5d461bf23-20200107051823\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test0225ec7d-b36c-4ac8-82f0-aa4fafaf10a9-20200111051346\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test0225ec7d-b36c-4ac8-82f0-aa4fafaf10a9-20200111051346\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test025e16a1-328d-45a2-b7e3-71f7e4cde046-20191229064028\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test025e16a1-328d-45a2-b7e3-71f7e4cde046-20191229064028\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test02d1f941-5607-4757-8df7-fd8c5631ab45-20200103083810\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test02d1f941-5607-4757-8df7-fd8c5631ab45-20200103083810\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test039abd7f-360c-42a1-ad5d-77527c519286-20191002233412\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test039abd7f-360c-42a1-ad5d-77527c519286-20191002233412\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test04a0f157-c6fb-4595-b6ca-6c82a2338063-20200108101451\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test04a0f157-c6fb-4595-b6ca-6c82a2338063-20200108101451\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test0737f33e-63e0-4ba9-b04b-b93a1de4e997-20200106083639\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test0737f33e-63e0-4ba9-b04b-b93a1de4e997-20200106083639\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test0a44d7be-63fa-418d-a7b6-89a44dd21894-20200107052935\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test0a44d7be-63fa-418d-a7b6-89a44dd21894-20200107052935\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test0d01b487-7f79-4d87-b330-5c025068db45-20191004190331\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test0d01b487-7f79-4d87-b330-5c025068db45-20191004190331\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test0d643748-e6fe-41ad-b4d3-89a289a0cee0-20191003055620\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test0d643748-e6fe-41ad-b4d3-89a289a0cee0-20191003055620\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test0df83c51-5bb9-43f8-8ae9-bc896ea64f78-20200110220221\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test0df83c51-5bb9-43f8-8ae9-bc896ea64f78-20200110220221\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test0f02c246-7e65-4010-9367-ca4530c3897e-20191004190223\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test0f02c246-7e65-4010-9367-ca4530c3897e-20191004190223\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test157494ec-e788-43b0-8d26-a17e39ee07cc-20191002011945\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test157494ec-e788-43b0-8d26-a17e39ee07cc-20191002011945\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test1661d154-b623-4507-8a56-3a89812c456c-20200111083940\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test1661d154-b623-4507-8a56-3a89812c456c-20200111083940\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test17bbd860-f21d-40ab-9026-16e05f2907f0-20200106083451\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test17bbd860-f21d-40ab-9026-16e05f2907f0-20200106083451\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test194e2333-13cd-43e3-b0a4-c8cdcf1a3600-20200110211106\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test194e2333-13cd-43e3-b0a4-c8cdcf1a3600-20200110211106\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test1bc26b19-b8d8-41f9-a26d-818f277bdf93-20200101113139\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test1bc26b19-b8d8-41f9-a26d-818f277bdf93-20200101113139\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test1c840053-9213-4f2a-8f2e-9bf2297908bd-20200108101424\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test1c840053-9213-4f2a-8f2e-9bf2297908bd-20200108101424\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test1d7bba72-69f1-43cd-a38c-41ce0b5f4bae-20200109050041\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test1d7bba72-69f1-43cd-a38c-41ce0b5f4bae-20200109050041\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test1f7a8078-50e7-4a3a-91eb-d178fd4c403b-20191002233353\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test1f7a8078-50e7-4a3a-91eb-d178fd4c403b-20191002233353\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test1fef1fdc-57ba-46a8-a879-475ba7d45a7a-20200106083509\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test1fef1fdc-57ba-46a8-a879-475ba7d45a7a-20200106083509\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test21332f15-f78d-4d31-afac-79b9dc989432-20191231175840\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test21332f15-f78d-4d31-afac-79b9dc989432-20191231175840\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test22f10717-6939-4003-a9ce-38effd8b77d6-20191007191355\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test22f10717-6939-4003-a9ce-38effd8b77d6-20191007191355\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test2334e6e3-bb72-4241-a36f-c2429d69bc0b-20200106050834\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test2334e6e3-bb72-4241-a36f-c2429d69bc0b-20200106050834\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test24fa9eb5-1c59-4425-b61c-30fd638c2a45-20191003203802\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test24fa9eb5-1c59-4425-b61c-30fd638c2a45-20191003203802\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test2521a545-ed61-4a15-bed1-aba7ce1d81ee-20200106050804\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test2521a545-ed61-4a15-bed1-aba7ce1d81ee-20200106050804\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test25c6fe61-1282-43c2-867b-b5039219989c-20200105081851\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test25c6fe61-1282-43c2-867b-b5039219989c-20200105081851\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test27515c8c-6773-4f92-afb0-35691cc6e3b6-20200103083821\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test27515c8c-6773-4f92-afb0-35691cc6e3b6-20200103083821\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test28012680-48e7-4903-877f-2f29464e63d5-20191229033424\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test28012680-48e7-4903-877f-2f29464e63d5-20191229033424\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test29a7a529-d293-4728-9d7f-257ed996e64f-20200108081759\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test29a7a529-d293-4728-9d7f-257ed996e64f-20200108081759\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test2a5f2d2c-b8e3-46c2-850d-a1641c024fe7-20200107084228\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test2a5f2d2c-b8e3-46c2-850d-a1641c024fe7-20200107084228\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test2ce856af-ab17-48f2-ba3e-bcd9af091061-20200110013246\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test2ce856af-ab17-48f2-ba3e-bcd9af091061-20200110013246\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test2e012e83-6361-4365-963f-6ced8a08e91c-20200110211254\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test2e012e83-6361-4365-963f-6ced8a08e91c-20200110211254\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test2ecf67b2-fb63-4461-b6a6-7026c4fb1168-20191002214026\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test2ecf67b2-fb63-4461-b6a6-7026c4fb1168-20191002214026\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test2ede6564-c7cc-44cb-a1a8-902505c9829d-20191003020742\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test2ede6564-c7cc-44cb-a1a8-902505c9829d-20191003020742\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test2f4ebc17-e27e-48d9-9cc3-ff933c21884e-20200106092410\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test2f4ebc17-e27e-48d9-9cc3-ff933c21884e-20200106092410\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test349ee02c-af9b-4663-a963-823b40eefed8-20200108083612\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test349ee02c-af9b-4663-a963-823b40eefed8-20200108083612\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test34cf6b13-b78e-478b-b596-8b661629371d-20191007195455\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test34cf6b13-b78e-478b-b596-8b661629371d-20191007195455\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test36cc5b60-2b23-4a04-bf95-f7865e1141cf-20200110085718\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test36cc5b60-2b23-4a04-bf95-f7865e1141cf-20200110085718\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test3712fca9-5cdd-4609-be69-b02aedc5c55c-20200107084115\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test3712fca9-5cdd-4609-be69-b02aedc5c55c-20200107084115\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test3772d042-92e2-4bcb-99b7-8a6a119cc088-20191231182808\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test3772d042-92e2-4bcb-99b7-8a6a119cc088-20191231182808\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test37a6dd64-d44d-465e-85bc-3bc38be90350-20200104083535\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test37a6dd64-d44d-465e-85bc-3bc38be90350-20200104083535\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test381074d5-7156-472b-801a-b35f8fef4cc6-20200105050612\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test381074d5-7156-472b-801a-b35f8fef4cc6-20200105050612\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test3877a44d-4c48-40db-80eb-227272d5acd6-20200110103540\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test3877a44d-4c48-40db-80eb-227272d5acd6-20200110103540\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test38ecd28e-7018-4672-840c-3044a5e7a6b5-20200111084208\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test38ecd28e-7018-4672-840c-3044a5e7a6b5-20200111084208\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test395a0b49-442a-450c-8a1f-65b0aa3bcf47-20200105083839\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test395a0b49-442a-450c-8a1f-65b0aa3bcf47-20200105083839\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test3971b300-edff-44a8-b61b-7f9b7460a8d6-20191003002234\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test3971b300-edff-44a8-b61b-7f9b7460a8d6-20191003002234\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test3adeec20-7458-4b3d-af26-0b6bc2aae3eb-20200103083751\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test3adeec20-7458-4b3d-af26-0b6bc2aae3eb-20200103083751\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test3b20dd96-f3e4-4798-998d-8c433c2449a7-20200108083635\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test3b20dd96-f3e4-4798-998d-8c433c2449a7-20200108083635\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test3ce2fd4a-8b5a-4c7e-b08d-3e48fc0f45e7-20200104083825\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test3ce2fd4a-8b5a-4c7e-b08d-3e48fc0f45e7-20200104083825\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test3d499ca7-cc8d-41cc-a6dc-ffb1a4ac4942-20200107053004\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test3d499ca7-cc8d-41cc-a6dc-ffb1a4ac4942-20200107053004\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test3db7240e-5e42-4d6d-b024-cc9fce3c828b-20200105083520\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test3db7240e-5e42-4d6d-b024-cc9fce3c828b-20200105083520\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test3f6b7341-635f-48d5-a36d-be5dfe3002c4-20200105050937\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test3f6b7341-635f-48d5-a36d-be5dfe3002c4-20200105050937\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test3fc26934-ede2-4482-ad5e-f66f6135d4a6-20191228055558\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test3fc26934-ede2-4482-ad5e-f66f6135d4a6-20191228055558\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test406d077c-6017-4062-bc96-f809147a2331-20200106050748\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test406d077c-6017-4062-bc96-f809147a2331-20200106050748\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test4302336c-e039-4e70-bcb6-9275f6089e4a-20200108144821\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test4302336c-e039-4e70-bcb6-9275f6089e4a-20200108144821\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test453a087e-8435-46db-970a-4ee633cc4c4a-20200102083458\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test453a087e-8435-46db-970a-4ee633cc4c4a-20200102083458\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test46b73afa-2259-4aff-81e1-a58bf24b59aa-20191229033459\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test46b73afa-2259-4aff-81e1-a58bf24b59aa-20191229033459\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test4a3399ee-82ea-46aa-9e3a-5434b588e3b6-20191228013518\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test4a3399ee-82ea-46aa-9e3a-5434b588e3b6-20191228013518\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test4eb7a185-527b-4b9f-93a8-7f1cec9d062e-20191231151207\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test4eb7a185-527b-4b9f-93a8-7f1cec9d062e-20191231151207\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test520a0915-f9f0-4da4-9fa1-1b74fc1470aa-20200102083505\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test520a0915-f9f0-4da4-9fa1-1b74fc1470aa-20200102083505\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test5397960f-023b-4979-9a8b-800d049045a4-20191007195417\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test5397960f-023b-4979-9a8b-800d049045a4-20191007195417\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test55a36387-8a3f-4159-9884-29b97539a253-20200109080443\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test55a36387-8a3f-4159-9884-29b97539a253-20200109080443\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test5645f186-4ee5-4209-af37-423660e3318c-20191231175947\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test5645f186-4ee5-4209-af37-423660e3318c-20191231175947\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test58b4461d-4d2d-4395-b6d2-ab83d4d8c62f-20200111001002\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test58b4461d-4d2d-4395-b6d2-ab83d4d8c62f-20200111001002\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test5b0bf447-d98d-429d-8334-c032d197c743-20191003203846\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test5b0bf447-d98d-429d-8334-c032d197c743-20191003203846\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test5bc90367-1ea2-400b-a40c-321081bae3f3-20200108145035\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test5bc90367-1ea2-400b-a40c-321081bae3f3-20200108145035\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test5bd0562f-e939-456f-a6ee-c848d1aba616-20200101151641\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test5bd0562f-e939-456f-a6ee-c848d1aba616-20200101151641\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test5e4efe90-916c-4c96-802c-1508a5b6da78-20191231151150\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test5e4efe90-916c-4c96-802c-1508a5b6da78-20191231151150\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test5f8f0c10-cc3c-45ec-a068-fb1c7edfa0d9-20200101145958\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test5f8f0c10-cc3c-45ec-a068-fb1c7edfa0d9-20200101145958\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test60a000b7-286c-4b2b-9137-bbc088736419-20200108144920\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test60a000b7-286c-4b2b-9137-bbc088736419-20200108144920\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test6192a01b-ba47-4d08-904a-71647a49a112-20191008041625\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test6192a01b-ba47-4d08-904a-71647a49a112-20191008041625\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test62835538-89c6-4f66-9034-f7a4b176c615-20191007234245\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test62835538-89c6-4f66-9034-f7a4b176c615-20191007234245\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test651e4ad2-ee4a-462e-a506-b56b1969f5d0-20200110230749\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test651e4ad2-ee4a-462e-a506-b56b1969f5d0-20200110230749\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test691d94e5-c40c-4568-94b0-09b08aea42b1-20200106050808\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test691d94e5-c40c-4568-94b0-09b08aea42b1-20200106050808\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test6aa3643c-011a-4180-877f-cad955a8e664-20191007234642\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test6aa3643c-011a-4180-877f-cad955a8e664-20191007234642\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test6cfb469b-8478-468f-9bb5-691affd32abb-20200107083803\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test6cfb469b-8478-468f-9bb5-691affd32abb-20200107083803\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test6d36b6b2-7956-4e62-91c1-c33792fd4bb1-20200110123203\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test6d36b6b2-7956-4e62-91c1-c33792fd4bb1-20200110123203\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test6e28168e-a9c8-4c0a-8b40-60c2a1502d43-20200108052802\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test6e28168e-a9c8-4c0a-8b40-60c2a1502d43-20200108052802\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test6eb763ac-7fbe-4e44-bee7-aad035ee2a7d-20200110084429\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test6eb763ac-7fbe-4e44-bee7-aad035ee2a7d-20200110084429\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test6efec253-f625-46f0-9d74-324f69e963d8-20200107070514\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test6efec253-f625-46f0-9d74-324f69e963d8-20200107070514\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test70fa7e4c-3122-4ff7-aec6-fe75ab660a01-20200108105900\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test70fa7e4c-3122-4ff7-aec6-fe75ab660a01-20200108105900\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test710a5fbf-06c7-46ac-b96d-a29d2586422f-20200108083639\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test710a5fbf-06c7-46ac-b96d-a29d2586422f-20200108083639\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test71d72489-67c6-45e2-b1e6-a19546efc823-20200105112903\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test71d72489-67c6-45e2-b1e6-a19546efc823-20200105112903\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test721fccf1-2b3e-44b6-908f-51b910e88b09-20200111104931\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test721fccf1-2b3e-44b6-908f-51b910e88b09-20200111104931\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test742d0189-9e41-4f1b-8ad3-31c05d34903b-20200111103247\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test742d0189-9e41-4f1b-8ad3-31c05d34903b-20200111103247\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test7836a97c-f56e-48d0-8b5d-61e79aeb3226-20200111071656\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test7836a97c-f56e-48d0-8b5d-61e79aeb3226-20200111071656\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test78666b2e-25c8-4a48-931a-3131a0317d73-20191002194352\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test78666b2e-25c8-4a48-931a-3131a0317d73-20191002194352\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test79f13508-fcbd-47b9-988f-1c21ef5e7f2e-20191002015429\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test79f13508-fcbd-47b9-988f-1c21ef5e7f2e-20191002015429\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test79fb90ce-4691-4212-99a7-6e4069bd5984-20191007234256\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test79fb90ce-4691-4212-99a7-6e4069bd5984-20191007234256\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test7a8cf687-6a21-4181-ba98-902fee717bd3-20200104103216\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test7a8cf687-6a21-4181-ba98-902fee717bd3-20200104103216\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test7aabf813-6644-483a-b9e0-ba6f8973ba1f-20191002232822\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test7aabf813-6644-483a-b9e0-ba6f8973ba1f-20191002232822\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test7c96c10a-0c8f-4ab0-83fd-1ad66a362e33-20191229033458\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test7c96c10a-0c8f-4ab0-83fd-1ad66a362e33-20191229033458\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test7e79b6ff-2559-44fe-b3ba-afaa68d63636-20200108112116\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test7e79b6ff-2559-44fe-b3ba-afaa68d63636-20200108112116\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test7ea372f7-ea7e-4b9e-bbad-4f35c1567aa2-20200108052736\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test7ea372f7-ea7e-4b9e-bbad-4f35c1567aa2-20200108052736\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test7fac3d04-98a5-4fc4-904e-9ea3b86eadc2-20200106050751\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test7fac3d04-98a5-4fc4-904e-9ea3b86eadc2-20200106050751\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test7fe20dd6-9ed9-4126-bb1d-031c01ac4550-20200101114504\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test7fe20dd6-9ed9-4126-bb1d-031c01ac4550-20200101114504\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test7ff974d9-c841-4249-b05b-bbf663cb4605-20200106084104\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test7ff974d9-c841-4249-b05b-bbf663cb4605-20200106084104\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test815bd4d5-fc24-4a47-be20-063c4809902c-20200109050508\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test815bd4d5-fc24-4a47-be20-063c4809902c-20200109050508\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test817654d0-2109-4d95-9284-8c8a9d960d08-20200108053758\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test817654d0-2109-4d95-9284-8c8a9d960d08-20200108053758\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test821ca3b6-dd05-4e80-b3d8-74ba03b2609b-20191231151151\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test821ca3b6-dd05-4e80-b3d8-74ba03b2609b-20191231151151\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test8285dc3e-637d-4d46-9695-adc39cbe7d2f-20200108144457\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test8285dc3e-637d-4d46-9695-adc39cbe7d2f-20200108144457\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test828aae03-9239-4938-a303-c23c42311878-20200102083419\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test828aae03-9239-4938-a303-c23c42311878-20200102083419\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test84afd814-5098-49ab-af99-e50350b5898b-20200110211134\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test84afd814-5098-49ab-af99-e50350b5898b-20200110211134\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test85b08563-b15f-4202-a0bc-f2bc2df2c71a-20200107053335\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test85b08563-b15f-4202-a0bc-f2bc2df2c71a-20200107053335\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test88aac268-c087-4481-b78e-99b920784a33-20200101084853\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test88aac268-c087-4481-b78e-99b920784a33-20200101084853\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test88dbd442-a8cc-4874-81a0-d3192c61df62-20191001224544\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test88dbd442-a8cc-4874-81a0-d3192c61df62-20191001224544\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test894dfb75-a00f-4f0c-894c-cae1c9846ad3-20200105051803\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test894dfb75-a00f-4f0c-894c-cae1c9846ad3-20200105051803\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test8d09bf4d-ee63-4ab1-a986-a4b802418403-20200111051447\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test8d09bf4d-ee63-4ab1-a986-a4b802418403-20200111051447\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test8d4d652b-4f05-4e99-93dd-78b9a36b5c78-20191003203755\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test8d4d652b-4f05-4e99-93dd-78b9a36b5c78-20191003203755\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test8de64739-43d8-4f84-af65-fdb3d0885288-20200108053543\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test8de64739-43d8-4f84-af65-fdb3d0885288-20200108053543\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test8e324c65-a51d-4eeb-9ec8-d5f8662dc041-20191228165107\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test8e324c65-a51d-4eeb-9ec8-d5f8662dc041-20191228165107\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test8e564580-8e53-4300-85f1-bf7f31dd37ff-20200107013348\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test8e564580-8e53-4300-85f1-bf7f31dd37ff-20200107013348\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test8f458ca7-8898-4d58-b93d-bfb0c3da028c-20200109050310\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test8f458ca7-8898-4d58-b93d-bfb0c3da028c-20200109050310\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test901cd6ca-5565-4552-a3de-d204d01935c0-20200108083706\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test901cd6ca-5565-4552-a3de-d204d01935c0-20200108083706\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test907b39e5-4008-4b55-93a0-18e9697b9cf3-20200108053817\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test907b39e5-4008-4b55-93a0-18e9697b9cf3-20200108053817\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test90c2be7c-d7ec-4abf-9fad-fef90fc3ef4d-20191004022234\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test90c2be7c-d7ec-4abf-9fad-fef90fc3ef4d-20191004022234\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test922db678-6ee8-43d5-86ff-6a86e132d332-20200107085231\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test922db678-6ee8-43d5-86ff-6a86e132d332-20200107085231\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test93b88aec-5277-4b1b-910c-7008e972ce91-20200107013304\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test93b88aec-5277-4b1b-910c-7008e972ce91-20200107013304\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test95a9104b-6cba-42d8-82ff-cc37e5ac44db-20200108081723\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test95a9104b-6cba-42d8-82ff-cc37e5ac44db-20200108081723\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test96da1605-19e0-46eb-9ce0-53e840f5e2cb-20200101111729\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test96da1605-19e0-46eb-9ce0-53e840f5e2cb-20200101111729\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test996066b2-7d29-400f-929b-e343a21046f7-20191231151212\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test996066b2-7d29-400f-929b-e343a21046f7-20191231151212\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test99663fff-ed21-4a91-9687-1a6da2abb033-20200106084508\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test99663fff-ed21-4a91-9687-1a6da2abb033-20200106084508\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Test9eb5efa5-c3c1-4c13-80a6-11f5eba67372-20200108144852\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Test9eb5efa5-c3c1-4c13-80a6-11f5eba67372-20200108144852\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testa3791896-b1fc-491e-ba0d-aefcd8d9e52a-20200105083503\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testa3791896-b1fc-491e-ba0d-aefcd8d9e52a-20200105083503\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testa37ff709-a078-45a0-8187-41733df8e101-20200109050003\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testa37ff709-a078-45a0-8187-41733df8e101-20200109050003\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testa4c5fe4e-936e-4be1-a612-a331aff54a8c-20200111105055\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testa4c5fe4e-936e-4be1-a612-a331aff54a8c-20200111105055\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testa59bce1d-e32c-423d-a86e-945d4aeb98b4-20200107051821\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testa59bce1d-e32c-423d-a86e-945d4aeb98b4-20200107051821\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testa604c059-8279-4f4d-a354-eec27222a06c-20200111051514\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testa604c059-8279-4f4d-a354-eec27222a06c-20200111051514\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testa71fefb1-0d9c-4fb3-8d3d-5dcd12d72b77-20200103103221\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testa71fefb1-0d9c-4fb3-8d3d-5dcd12d72b77-20200103103221\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testa748013d-c5a6-44f9-88eb-43167207c742-20200111051402\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testa748013d-c5a6-44f9-88eb-43167207c742-20200111051402\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testaab67022-4f2b-420d-a06a-2c4045110cdf-20191229033144\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testaab67022-4f2b-420d-a06a-2c4045110cdf-20191229033144\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testacab9541-280f-4491-9f49-ac57653f0a07-20200105083839\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testacab9541-280f-4491-9f49-ac57653f0a07-20200105083839\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testad298437-0349-4cc7-88a9-d8aabcba9df1-20191002233431\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testad298437-0349-4cc7-88a9-d8aabcba9df1-20191002233431\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testadd68286-f9e0-4ab1-a526-d8f3cf0f054e-20200105084128\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testadd68286-f9e0-4ab1-a526-d8f3cf0f054e-20200105084128\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testade4c52b-18f5-4b67-8e93-945358ce4f7d-20191007234259\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testade4c52b-18f5-4b67-8e93-945358ce4f7d-20191007234259\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testae421c1d-0211-4ef2-b372-564ce8ad484a-20200110104035\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testae421c1d-0211-4ef2-b372-564ce8ad484a-20200110104035\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testafbbd8bf-aec5-48bf-8fea-73fa15ccc315-20191001224727\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testafbbd8bf-aec5-48bf-8fea-73fa15ccc315-20191001224727\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testb15148bf-78d2-42d4-ad08-b3ad8fb4b122-20200101084759\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testb15148bf-78d2-42d4-ad08-b3ad8fb4b122-20200101084759\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testb4237708-3688-40ea-85a2-275c05f4d100-20191228083519\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testb4237708-3688-40ea-85a2-275c05f4d100-20191228083519\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testb799a18f-be45-4c5c-8438-163ac2e1f1e7-20191004190529\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testb799a18f-be45-4c5c-8438-163ac2e1f1e7-20191004190529\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testb7cee88a-e5ac-4af4-99c8-7247020b00c3-20200105051201\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testb7cee88a-e5ac-4af4-99c8-7247020b00c3-20200105051201\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testb7df0d9a-27c0-4ca5-b692-08dd90387b98-20200111083443\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testb7df0d9a-27c0-4ca5-b692-08dd90387b98-20200111083443\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testbbf6bf32-4bd0-4381-b8f7-2658f585df4d-20191003203846\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testbbf6bf32-4bd0-4381-b8f7-2658f585df4d-20191003203846\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testbeea1376-166a-4b1a-8923-c907cc9737d9-20200107013336\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testbeea1376-166a-4b1a-8923-c907cc9737d9-20200107013336\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testbf9154e9-6166-48c2-86fe-1f331be606d7-20200107051823\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testbf9154e9-6166-48c2-86fe-1f331be606d7-20200107051823\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testc0d7c3c5-23b8-489c-a5e0-ae87c681b696-20200101083539\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testc0d7c3c5-23b8-489c-a5e0-ae87c681b696-20200101083539\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testc193f31a-5186-4e93-84f6-0e4ab87b73c1-20200107052937\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testc193f31a-5186-4e93-84f6-0e4ab87b73c1-20200107052937\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testc1c7e8dc-fa8c-47d9-8305-de6d1451b939-20200101085248\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testc1c7e8dc-fa8c-47d9-8305-de6d1451b939-20200101085248\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testc1d0c917-e2ae-430c-a2ca-383fb0fda046-20191007235839\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testc1d0c917-e2ae-430c-a2ca-383fb0fda046-20191007235839\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testc23a3fbb-6e95-4c0d-94fc-c8ab14dddf1c-20191231151117\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testc23a3fbb-6e95-4c0d-94fc-c8ab14dddf1c-20191231151117\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testc2697630-6247-411a-94b3-c2974ad8cbee-20191007195417\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testc2697630-6247-411a-94b3-c2974ad8cbee-20191007195417\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testc466b80f-670f-4383-89b8-44e0d509fa20-20191002000516\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testc466b80f-670f-4383-89b8-44e0d509fa20-20191002000516\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testc5c8d9bd-75fa-4db3-9f34-5d7b7098584c-20191003203851\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testc5c8d9bd-75fa-4db3-9f34-5d7b7098584c-20191003203851\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testc8b6d14b-a5db-48e0-bfad-a2818d432bea-20200104083443\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testc8b6d14b-a5db-48e0-bfad-a2818d432bea-20200104083443\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testc933efa8-c553-4b93-884f-b7221d9ca789-20191228083750\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testc933efa8-c553-4b93-884f-b7221d9ca789-20191228083750\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testcbe8ab80-46ef-49b1-a7bb-4e3d6e50e49f-20200104050811\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testcbe8ab80-46ef-49b1-a7bb-4e3d6e50e49f-20200104050811\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testccc0b5e6-9b0d-451a-8ac4-6f4af293b913-20200106092645\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testccc0b5e6-9b0d-451a-8ac4-6f4af293b913-20200106092645\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testcec64786-04b1-487c-80ec-050da646fb1c-20191005123412\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testcec64786-04b1-487c-80ec-050da646fb1c-20191005123412\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testd104a52f-eba2-401d-8e7f-a841c90f7712-20191228083553\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testd104a52f-eba2-401d-8e7f-a841c90f7712-20191228083553\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testd724cea4-0d3c-4539-b2ff-be08fb23a67e-20200107083714\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testd724cea4-0d3c-4539-b2ff-be08fb23a67e-20200107083714\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testd8e60bac-27ff-4fba-90b8-732c9c5ff91c-20191228083751\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testd8e60bac-27ff-4fba-90b8-732c9c5ff91c-20191228083751\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testd99db4a5-7683-4584-89ad-fefd711de284-20191004190210\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testd99db4a5-7683-4584-89ad-fefd711de284-20191004190210\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testd9b4309a-67bc-4cd8-ac47-094cb20ca6aa-20200101090202\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testd9b4309a-67bc-4cd8-ac47-094cb20ca6aa-20200101090202\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testda3320e0-28f2-4146-a002-e06296362711-20191004190115\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testda3320e0-28f2-4146-a002-e06296362711-20191004190115\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testda714121-3240-4253-90c3-48c43f115c90-20200102083419\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testda714121-3240-4253-90c3-48c43f115c90-20200102083419\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testdb357558-60b4-4ee3-9ec3-ba22c5d827fb-20191004020617\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testdb357558-60b4-4ee3-9ec3-ba22c5d827fb-20191004020617\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testdc7230e9-df6d-4edd-a57c-ef7e0432c463-20191002011345\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testdc7230e9-df6d-4edd-a57c-ef7e0432c463-20191002011345\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testdccb59de-436f-4935-bed6-2e677dcaf36a-20200109111802\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testdccb59de-436f-4935-bed6-2e677dcaf36a-20200109111802\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testde985b23-9333-4f6e-a5e8-82025a38b2af-20200102083510\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testde985b23-9333-4f6e-a5e8-82025a38b2af-20200102083510\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Teste271da3e-cbcb-4ee7-8770-f297f414451f-20191003015540\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Teste271da3e-cbcb-4ee7-8770-f297f414451f-20191003015540\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Teste4070edd-aec0-455d-8a79-aecdb7170b6d-20191007234642\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Teste4070edd-aec0-455d-8a79-aecdb7170b6d-20191007234642\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Teste42f351a-4da0-4f0d-93e9-ef1d98e06659-20200108083633\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Teste42f351a-4da0-4f0d-93e9-ef1d98e06659-20200108083633\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Teste66ca23c-f4bf-4eb3-8418-139364d19e7d-20200107062643\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Teste66ca23c-f4bf-4eb3-8418-139364d19e7d-20200107062643\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Teste78b1ab2-1380-48ab-9923-0276cdb7198b-20191001224742\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Teste78b1ab2-1380-48ab-9923-0276cdb7198b-20191001224742\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Teste8607e14-b4f8-472a-bd5b-893b8d9612e6-20200112045941\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Teste8607e14-b4f8-472a-bd5b-893b8d9612e6-20200112045941\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Teste980b80e-3add-42c0-bc98-a84020b2d128-20200108101640\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Teste980b80e-3add-42c0-bc98-a84020b2d128-20200108101640\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Tested79dba9-2d38-4ea9-a01c-56e94b30ca7a-20191007195447\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Tested79dba9-2d38-4ea9-a01c-56e94b30ca7a-20191007195447\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testee9dcf5f-f7c4-4192-a8f4-28e9bc7d0f7c-20191001225005\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testee9dcf5f-f7c4-4192-a8f4-28e9bc7d0f7c-20191001225005\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testefbb340a-b68b-4200-872b-d05e7d29f92d-20191007195432\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testefbb340a-b68b-4200-872b-d05e7d29f92d-20191007195432\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testf1fc0559-6740-48dd-9501-2b933c731d52-20200103083458\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testf1fc0559-6740-48dd-9501-2b933c731d52-20200103083458\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testf41dfc97-bb51-4fba-86ca-a6f2695c415a-20200107050834\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testf41dfc97-bb51-4fba-86ca-a6f2695c415a-20200107050834\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testf5784447-83ed-4c00-8764-ea0f932aafa2-20200106085748\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testf5784447-83ed-4c00-8764-ea0f932aafa2-20200106085748\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testf6128ef6-c13c-420e-8088-0710888ce88b-20200109050003\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testf6128ef6-c13c-420e-8088-0710888ce88b-20200109050003\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testf863ab2c-ada9-4646-84c7-1f83a82375d7-20191229033226\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testf863ab2c-ada9-4646-84c7-1f83a82375d7-20191229033226\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testfac552a7-418f-4baa-8f51-d199ceff5c68-20200103050817\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testfac552a7-418f-4baa-8f51-d199ceff5c68-20200103050817\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testfb7be054-5c15-494f-822c-b64f9a36e2f3-20200105051753\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testfb7be054-5c15-494f-822c-b64f9a36e2f3-20200105051753\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testfbcde44d-56a5-46fe-b012-c009b46bbbc3-20200106083514\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testfbcde44d-56a5-46fe-b012-c009b46bbbc3-20200106083514\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Extensions.Testfc5c7585-6c9a-4aa4-a7c4-1223a94e00c7-20200104083552\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Extensions.Testfc5c7585-6c9a-4aa4-a7c4-1223a94e00c7-20200104083552\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.FileServer.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.FileServer.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Geneva\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Geneva\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.KeyVault\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.KeyVault\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.KeyVault.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.KeyVault.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Monitor\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Monitor\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Monitor.WorkloadInsights.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Monitor.WorkloadInsights.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Monitoring.DependencyAgent\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Monitoring.DependencyAgent\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Monitoring.DependencyAgent.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Monitoring.DependencyAgent.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Networking.SDN\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Networking.SDN\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.NetworkWatcher\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.NetworkWatcher\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.OpenSSH\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.OpenSSH\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Performance.Diagnostics\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Performance.Diagnostics\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.RecoveryServices\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.RecoveryServices\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.RecoveryServices.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.RecoveryServices.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.RecoveryServices.SiteRecovery\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.RecoveryServices.SiteRecovery\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.RecoveryServices.SiteRecovery2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.RecoveryServices.SiteRecovery2\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.RecoveryServices.WorkloadBackup\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.RecoveryServices.WorkloadBackup\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.RecoveryServices.WorkloadBackup.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.RecoveryServices.WorkloadBackup.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Security\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Security\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Security.AntimalwareSignature\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Security.AntimalwareSignature\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Security.AntimalwareSignature.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Security.AntimalwareSignature.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Security.Dsms\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Security.Dsms\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Security.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Security.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Security.Monitoring\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Security.Monitoring\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Security.Monitoring.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Security.Monitoring.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Security.Monitoring.Testing\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Security.Monitoring.Testing\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Security.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Security.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.ServiceFabric.MC.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.ServiceFabric.MC.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.SiteRecovery.Stage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.SiteRecovery.Stage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.SiteRecovery.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.SiteRecovery.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.SiteRecovery2.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.SiteRecovery2.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.Test.Identity\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.Test.Identity\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.WindowsFabric.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.WindowsFabric.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.WorkloadInsights.Linux.Test1\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.WorkloadInsights.Linux.Test1\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.WorkloadInsights.Linux.Test2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.WorkloadInsights.Linux.Test2\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.WorkloadInsights.Linux.Test3\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.WorkloadInsights.Linux.Test3\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.WorkloadInsights.Linux.Test4\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.WorkloadInsights.Linux.Test4\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Azure.WorkloadInsights.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Azure.WorkloadInsights.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AzureCAT.AzureEnhancedMonitoring\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AzureCAT.AzureEnhancedMonitoring\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AzureCAT.AzureEnhancedMonitoringTest\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AzureCAT.AzureEnhancedMonitoringTest\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AzureMonitor.WorkloadInsights\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AzureMonitor.WorkloadInsights\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AzureMonitor.WorkloadInsights.Canary\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AzureMonitor.WorkloadInsights.Canary\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AzureMonitor.WorkloadInsights.Corp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AzureMonitor.WorkloadInsights.Corp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AzureMonitor.WorkloadInsights.Linux.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AzureMonitor.WorkloadInsights.Linux.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AzureMonitor.WorkloadInsights.LinuxTest\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AzureMonitor.WorkloadInsights.LinuxTest\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AzureMonitor.WorkloadInsights.Meya0206\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AzureMonitor.WorkloadInsights.Meya0206\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AzureMonitor.WorkloadInsights.MeyaCorp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AzureMonitor.WorkloadInsights.MeyaCorp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AzureMonitor.WorkloadInsights.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AzureMonitor.WorkloadInsights.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AzureMonitor.WorkloadInsights.Testing\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AzureMonitor.WorkloadInsights.Testing\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.AzureSecurity.JITAccess\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.AzureSecurity.JITAccess\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.CloudBackup.Workload.Extension\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.CloudBackup.Workload.Extension\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.CloudBackup.Workload.Extension.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.CloudBackup.Workload.Extension.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Compute\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.CPlat.Core\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.CPlat.Core\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.CPlat.Core.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.CPlat.Core.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.EnterpriseCloud.Monitoring\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.EnterpriseCloud.Monitoring\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.EnterpriseCloud.Monitoring.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.EnterpriseCloud.Monitoring.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.EnterpriseCloud.Monitoring.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.EnterpriseCloud.Monitoring.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Golive.Extensions\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Golive.Extensions\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.GuestConfig.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.GuestConfig.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.GuestConfiguration\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.GuestConfiguration\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.GuestConfiguration.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.GuestConfiguration.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.HpcCompute\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.HpcCompute\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.HpcCompute.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.HpcCompute.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.HpcPack\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.HpcPack\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.ManagedIdentity\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.ManagedIdentity\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.ManagedServices\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.ManagedServices\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.OSTCExtensions\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.OSTCExtensions\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.OSTCExtensions.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.OSTCExtensions.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.OSTCExtensions.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.OSTCExtensions.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.OSTCExtensions.Testing\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.OSTCExtensions.Testing\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Powershell\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Powershell\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Powershell.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Powershell.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Powershell.Test01\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Powershell.Test01\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.SoftwareUpdateManagement.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.SoftwareUpdateManagement.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.SqlServer.Managability.IaaS.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.SqlServer.Managability.IaaS.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.SqlServer.Management\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.SqlServer.Management\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.SystemCenter\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.SystemCenter\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.TestSqlServer.Edp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.TestSqlServer.Edp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.VisualStudio.Azure.ETWTraceListenerService\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.VisualStudio.Azure.ETWTraceListenerService\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.VisualStudio.Azure.RemoteDebug\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.VisualStudio.Azure.RemoteDebug\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.VisualStudio.Azure.RemoteDebug.Json\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.VisualStudio.Azure.RemoteDebug.Json\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.VisualStudio.ServiceProfiler\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.VisualStudio.ServiceProfiler\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.VisualStudio.Services\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.VisualStudio.Services\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.VisualStudio.WindowsAzure.DevTest\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.VisualStudio.WindowsAzure.DevTest\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.VisualStudio.WindowsAzure.DevTest.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.VisualStudio.WindowsAzure.DevTest.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.VisualStudio.WindowsAzure.RemoteDebug\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.VisualStudio.WindowsAzure.RemoteDebug\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Windows.Azure.Extensions\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Windows.Azure.Extensions\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Windows.AzureRemoteApp.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Windows.AzureRemoteApp.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.Windows.RemoteDesktop\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Windows.RemoteDesktop\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.WindowsAdminCenter\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.WindowsAdminCenter\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.WindowsAdminCenter.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.WindowsAdminCenter.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.WindowsAzure.Compute\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.WindowsAzure.Compute\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Microsoft.WindowsAzure.Compute.test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.WindowsAzure.Compute.test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftAzureSiteRecovery\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftAzureSiteRecovery\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftBizTalkServer\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftBizTalkServer\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftDynamicsAX\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftDynamicsAX\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftDynamicsGP\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftDynamicsGP\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftHybridCloudStorage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftHybridCloudStorage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftOSTC\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftOSTC\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftRServer\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftRServer\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftSharePoint\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftSharePoint\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftSQLServer\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftSQLServer\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftTestLinuxPPS\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftTestLinuxPPS\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftVisualStudio\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftVisualStudio\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftWindowsDesktop\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsDesktop\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftWindowsServer\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"MicrosoftWindowsServerHPCPack\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServerHPCPack\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microsoft_iot_edge\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microsoft_iot_edge\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microsoft_javaeeonazure_test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microsoft_javaeeonazure_test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"microstrategy\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/microstrategy\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"midasolutions\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/midasolutions\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"midfin\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/midfin\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"midvision\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/midvision\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mindcti\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mindcti\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"miraclelinux\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/miraclelinux\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"miracl_linux\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/miracl_linux\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"miri-infotech-pvt-ltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/miri-infotech-pvt-ltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mobilab\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mobilab\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"modern-systems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/modern-systems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"monitorcomputersystemsltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/monitorcomputersystemsltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"moogsoft\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/moogsoft\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"moviemasher\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/moviemasher\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mriisoftllc1579457820427\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mriisoftllc1579457820427\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"msopentech\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/msopentech\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mtnfog\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mtnfog\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"multisoft-ab\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/multisoft-ab\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mvp-systems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mvp-systems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mwg_azure\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mwg_azure\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"mxhero\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/mxhero\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"my-com\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/my-com\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"narrativescience\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/narrativescience\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"nasuni\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/nasuni\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ncbi\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ncbi\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ndl\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ndl\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"nebbiolo-technologies-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/nebbiolo-technologies-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"nec-technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/nec-technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"neo4j\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/neo4j\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"neowaybusinesssolutions-4956350\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/neowaybusinesssolutions-4956350\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"netapp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/netapp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"netatwork\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/netatwork\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"netfoundryinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/netfoundryinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"netgate\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/netgate\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"netikus-net-ltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/netikus-net-ltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"netiq\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/netiq\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"netka\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/netka\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"netscout\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/netscout\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"netspi\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/netspi\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"netsweeper\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/netsweeper\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"networksexchangetechnologyltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/networksexchangetechnologyltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"netwrix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/netwrix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"netx\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/netx\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"neusoft-neteye\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/neusoft-neteye\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"nextronic-5290868\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/nextronic-5290868\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"nginxinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/nginxinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"nicepeopleatwork\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/nicepeopleatwork\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"niolabs-5229713\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/niolabs-5229713\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"nodejsapi\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/nodejsapi\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"norcominformationtechnologygmbhcokgaa\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/norcominformationtechnologygmbhcokgaa\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"norsync\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/norsync\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"northbridge-secure\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/northbridge-secure\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"nri\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/nri\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ntt-data-intellilink-corporation\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ntt-data-intellilink-corporation\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"nttdata\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/nttdata\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"nuco-networks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/nuco-networks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"numbersbelieve\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/numbersbelieve\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"numtrallcpublisher\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/numtrallcpublisher\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"nuxeo\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/nuxeo\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"nvidia\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/nvidia\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"o2mc-real-time-data-platform\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/o2mc-real-time-data-platform\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"objectivity-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/objectivity-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"oceanblue-cloud\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/oceanblue-cloud\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"OctopusDeploy.Tentacle\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/OctopusDeploy.Tentacle\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"odysseyconsultantsltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/odysseyconsultantsltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"officeatwork-ag\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/officeatwork-ag\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"omega-software\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/omega-software\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"onapsis\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/onapsis\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"oncore_cloud_services-4944214\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/oncore_cloud_services-4944214\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"onexgroup\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/onexgroup\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"onspecta\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/onspecta\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ontology\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ontology\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"onyx-point-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/onyx-point-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"op5\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/op5\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"open-connect-systems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/open-connect-systems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"opencell\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/opencell\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"OpenLogic\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/OpenLogic\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"openshotstudiosllc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/openshotstudiosllc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"opentext\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/opentext\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"openvpn\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/openvpn\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"opslogix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/opslogix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"option3\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/option3\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Oracle\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Oracle\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"oraylis\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/oraylis\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"oraylisbi\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/oraylisbi\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"orbs-network\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/orbs-network\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"oriana\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/oriana\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"orientdb\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/orientdb\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"oroinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/oroinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"osirium-ltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/osirium-ltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"osisoft\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/osisoft\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"osnexus\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/osnexus\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"outsystems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/outsystems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"pacteratechnologiesinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/pacteratechnologiesinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"paloaltonetworks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/paloaltonetworks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"panorama-necto\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/panorama-necto\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"panzura-file-system\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/panzura-file-system\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"parallels\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/parallels\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"parasoft\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/parasoft\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"pasifikciptamandiri\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/pasifikciptamandiri\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"passlogy\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/passlogy\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"paxata\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/paxata\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"peer-software-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/peer-software-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"penta-security-systems-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/penta-security-systems-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"percona\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/percona\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"pivotal\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/pivotal\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"plesk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/plesk\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"pnop\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/pnop\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"portalarchitects\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/portalarchitects\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"portsysinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/portsysinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"postgres-pro\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/postgres-pro\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"prestashop\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/prestashop\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"prestige_informatique-1090178\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/prestige_informatique-1090178\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"prime-strategy\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/prime-strategy\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"primekey\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/primekey\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"primestrategynewyorkinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/primestrategynewyorkinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"pro-vision\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/pro-vision\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"process-one\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/process-one\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"processgold\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/processgold\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"profecia\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/profecia\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Profiler.AgentOrchestrationRefactor.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Profiler.AgentOrchestrationRefactor.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Profiler.Master.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Profiler.Master.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"profisee\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/profisee\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"protiviti\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/protiviti\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ptc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ptc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ptsecurity\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ptsecurity\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"pulse-secure\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/pulse-secure\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"puppet\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/puppet\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"PuppetLabs\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/PuppetLabs\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"PuppetLabs.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/PuppetLabs.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"purestorageinc1578960262525\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/purestorageinc1578960262525\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"pydio\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/pydio\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"pyramidanalytics\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/pyramidanalytics\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"qlik\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/qlik\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"qore-technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/qore-technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"qs-solutions\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/qs-solutions\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Qualys\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Qualys\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Qualys.LinuxAgent.GrayLabel\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Qualys.LinuxAgent.GrayLabel\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Qualys.WindowsAgent.GrayLabel\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Qualys.WindowsAgent.GrayLabel\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"qualysguard\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/qualysguard\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"quasardb\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/quasardb\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"qubole-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/qubole-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"quest\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/quest\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"racknap\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/racknap\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"radiant-logic\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/radiant-logic\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"radware\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/radware\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"raincode\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/raincode\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"rancher\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/rancher\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"rapid7\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/rapid7\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Rapid7.InsightPlatform\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Rapid7.InsightPlatform\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"rapidminer\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/rapidminer\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"realm\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/realm\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"reblaze\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/reblaze\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"RedHat\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/RedHat\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"redpoint-global\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/redpoint-global\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"refinitiv\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/refinitiv\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"refinitiv-4807503\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/refinitiv-4807503\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"relevance-lab\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/relevance-lab\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"remotelearner\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/remotelearner\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"res\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/res\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"resco\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/resco\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"responder-corp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/responder-corp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"revolution-analytics\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/revolution-analytics\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ribboncommunications\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ribboncommunications\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"RightScaleLinux\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/RightScaleLinux\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"RightScaleWindowsServer\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/RightScaleWindowsServer\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ringsoftwareresearchanddevelopmentinc1578946072257\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ringsoftwareresearchanddevelopmentinc1578946072257\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"riverbed\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/riverbed\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"RiverbedTechnology\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/RiverbedTechnology\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"rocketml\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/rocketml\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"rocketsoftware\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/rocketsoftware\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"rohdeschwarzcybersecuritygmbh\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/rohdeschwarzcybersecuritygmbh\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"rohdeschwarzcybersecuritysas\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/rohdeschwarzcybersecuritysas\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"roktech\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/roktech\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"rsa-security-llc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/rsa-security-llc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"rsk-labs\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/rsk-labs\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"rstudio-5237862\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/rstudio-5237862\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"rtts\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/rtts\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"rubrik-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/rubrik-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"s2ix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/s2ix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"saama\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/saama\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"saasame-limited\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/saasame-limited\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"safeticatechnologiessro\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/safeticatechnologiessro\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"saltstack\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/saltstack\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"samsungsds-cello\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/samsungsds-cello\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sap\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sap\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"scaidata\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/scaidata\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"scalearc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/scalearc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"scalegrid\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/scalegrid\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"scality\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/scality\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"schrockeninc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/schrockeninc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sci\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sci\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"scientiamobile\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/scientiamobile\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"secureworks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/secureworks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"securosis\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/securosis\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"semarchy\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/semarchy\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"semperis\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/semperis\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"SentinelOne.LinuxExtension\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/SentinelOne.LinuxExtension\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"SentinelOne.WindowsExtension\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/SentinelOne.WindowsExtension\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sentriumsl\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sentriumsl\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sentryone\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sentryone\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"seppmailag\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/seppmailag\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"service-control-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/service-control-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"shadow-soft\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/shadow-soft\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"shareshiftneeraj.test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/shareshiftneeraj.test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sightapps\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sightapps\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"signal-sciences\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/signal-sciences\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"silver-peak-systems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/silver-peak-systems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"simmachinesinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/simmachinesinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"simplifierag\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/simplifierag\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"simpligov\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/simpligov\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sinefa\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sinefa\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sios_datakeeper\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sios_datakeeper\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"siportalinc1581539156321\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/siportalinc1581539156321\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sisenseltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sisenseltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Site24x7\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Site24x7\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sktelecom\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sktelecom\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"skyarc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/skyarc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"skylarkcloud\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/skylarkcloud\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"smartbearsoftware\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/smartbearsoftware\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"smartmessage-autoflow\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/smartmessage-autoflow\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"snaplogic\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/snaplogic\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"snapt-adc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/snapt-adc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"snips\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/snips\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"soasta\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/soasta\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"softnas\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/softnas\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"soha\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/soha\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"solanolabs\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/solanolabs\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"solar-security\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/solar-security\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"solarwinds\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/solarwinds\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sonicwall-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sonicwall-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sophos\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sophos\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"south-river-technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/south-river-technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"spacecurve\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/spacecurve\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"spagobi\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/spagobi\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sparklinglogic\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sparklinglogic\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"spektra\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/spektra\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sphere3d\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sphere3d\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"splunk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/splunk\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sqlstream\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sqlstream\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"squaredup\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/squaredup\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"src-solution\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/src-solution\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"stackato-platform-as-a-service\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/stackato-platform-as-a-service\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Stackify.LinuxAgent.Extension\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Stackify.LinuxAgent.Extension\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"stackstorm\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/stackstorm\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"startekfingerprintmatch\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/startekfingerprintmatch\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"starwind\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/starwind\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"StatusMonitor2.Diagnostics.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/StatusMonitor2.Diagnostics.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"StatusReport.Diagnostics.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/StatusReport.Diagnostics.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"stealthbits\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/stealthbits\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"steelhive\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/steelhive\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"stonefly\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/stonefly\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"stormshield\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/stormshield\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"storreduce\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/storreduce\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"stratumn\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/stratumn\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"streamsets\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/streamsets\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"striim\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/striim\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"su\",\r\
    +        \n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/su\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sumologic\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sumologic\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"sunatogmbh\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/sunatogmbh\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"SUSE\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/SUSE\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"swoopanalytics\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/swoopanalytics\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Symantec\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Symantec\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Symantec.CloudWorkloadProtection\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Symantec.CloudWorkloadProtection\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Symantec.CloudWorkloadProtection.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Symantec.CloudWorkloadProtection.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Symantec.CloudWorkloadProtection.TestOnStage\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Symantec.CloudWorkloadProtection.TestOnStage\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Symantec.QA\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Symantec.QA\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Symantec.staging\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Symantec.staging\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Symantec.test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Symantec.test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Symantec.test.ru4mp1.latest\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Symantec.test.ru4mp1.latest\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"symanteccorporation\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/symanteccorporation\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"symantectest1\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/symantectest1\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"synack-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/synack-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"syncfusion\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/syncfusion\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"syncfusionbigdataplatfor\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/syncfusionbigdataplatfor\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"synechron-technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/synechron-technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"synnexcorp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/synnexcorp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tableau\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tableau\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tactic\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tactic\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"talari-networks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/talari-networks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"talena-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/talena-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"talend\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/talend\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"talon\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/talon\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tamrinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tamrinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"targit\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/targit\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tata_communications\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tata_communications\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tavanttechnologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tavanttechnologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tavendo\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tavendo\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"te-systems\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/te-systems\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"techdivision\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/techdivision\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"techlatest\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/techlatest\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tecknolab\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tecknolab\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"telepat\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/telepat\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"teloscorporation\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/teloscorporation\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tempered-networks-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tempered-networks-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tenable\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tenable\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"teradata\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/teradata\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Teradici\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Teradici\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"teramindinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/teramindinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Test.Gemalto.SafeNet.ProtectV\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Test.Gemalto.SafeNet.ProtectV\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Test.Gemalto.SafeNet.ProtectV.Azure\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Test.Gemalto.SafeNet.ProtectV.Azure\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Test.HP.AppDefender\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Test.HP.AppDefender\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Test.Microsoft.VisualStudio.Services\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Test.Microsoft.VisualStudio.Services\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Test.NJHP.AppDefender\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Test.NJHP.AppDefender\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Test.TrendMicro.DeepSecurity\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Test.TrendMicro.DeepSecurity\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Test1.NJHP.AppDefender\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Test1.NJHP.AppDefender\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Test3.Microsoft.VisualStudio.Services\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Test3.Microsoft.VisualStudio.Services\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"testpro\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/testpro\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"test_test_pmc2pc1\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/test_test_pmc2pc1\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"thales-vormetric\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/thales-vormetric\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"thefreebsdfoundation\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/thefreebsdfoundation\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"things-board\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/things-board\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"thinprintgmbh\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/thinprintgmbh\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"thorntechnologiesllc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/thorntechnologiesllc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"thoughtspot-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/thoughtspot-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tibco-software\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tibco-software\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tidal-migrations\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tidal-migrations\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tidalmediainc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tidalmediainc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tig\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tig\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tiger-technology\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tiger-technology\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tigergraph\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tigergraph\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"timextender\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/timextender\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tmaxsoft\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tmaxsoft\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"topicus\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/topicus\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"torusware\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/torusware\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"totemo\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/totemo\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"townsend-security\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/townsend-security\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"transvault\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/transvault\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"trendmicro\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/trendmicro\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"TrendMicro.DeepSecurity\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/TrendMicro.DeepSecurity\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"TrendMicro.DeepSecurity.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/TrendMicro.DeepSecurity.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"TrendMicro.PortalProtect\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/TrendMicro.PortalProtect\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tresorit\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tresorit\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"trifacta\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/trifacta\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tripwire-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tripwire-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"truestack\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/truestack\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tsa-public-service\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tsa-public-service\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"tunnelbiz\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/tunnelbiz\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"twistlock\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/twistlock\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"typesafe\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/typesafe\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ubeeko\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ubeeko\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ubercloud\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ubercloud\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"ulex\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/ulex\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"unifi-software\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/unifi-software\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"uniprint-net\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/uniprint-net\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"unitrends\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/unitrends\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"unnisoft\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/unnisoft\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"unravel-data\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/unravel-data\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"unscramblsingaporepteltd-4999260\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/unscramblsingaporepteltd-4999260\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"untangle\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/untangle\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"usp\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/usp\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"valtix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/valtix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"varnish\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/varnish\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vaultive-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vaultive-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vbot\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vbot\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vectraaiinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vectraaiinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"veeam\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/veeam\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"velocitydb-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/velocitydb-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"velocloud\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/velocloud\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vemn\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vemn\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"veritas\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/veritas\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"versanetworks\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/versanetworks\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"versasec\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/versasec\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vidispine\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vidispine\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vidizmo\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vidizmo\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vigyanlabs-innovations-pvt-ltd\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vigyanlabs-innovations-pvt-ltd\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"viptela\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/viptela\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vircom\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vircom\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"visualsoft-center\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/visualsoft-center\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vizixiotplatformretail001\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vizixiotplatformretail001\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vmturbo\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vmturbo\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vnomicinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vnomicinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"volterraedgeservices\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/volterraedgeservices\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"Vormetric\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Vormetric\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vte\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vte\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vu-llc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vu-llc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"vyulabsinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/vyulabsinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"WAD2AI.Diagnostics.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/WAD2AI.Diagnostics.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"WAD2EventHub.Diagnostics.Test\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/WAD2EventHub.Diagnostics.Test\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"wallarm\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/wallarm\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"wallix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/wallix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"wanos\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/wanos\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"wanpath-dba-myworkdrive\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/wanpath-dba-myworkdrive\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"wardy-it-solutions\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/wardy-it-solutions\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"warewolf-esb\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/warewolf-esb\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"watchguard-technologies\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/watchguard-technologies\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"webaloinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/webaloinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"websense-apmailpe\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/websense-apmailpe\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"websoft9inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/websoft9inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"wedoitllc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/wedoitllc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"westernoceansoftwaresprivatelimited\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/westernoceansoftwaresprivatelimited\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"wherescapesoftware\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/wherescapesoftware\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"winmagic_securedoc_cloudvm\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/winmagic_securedoc_cloudvm\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"wmspanel\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/wmspanel\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"workshare-technology\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/workshare-technology\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"world-programming\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/world-programming\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"worxogo\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/worxogo\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"wowza\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/wowza\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"xcontentptyltd-1329748\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/xcontentptyltd-1329748\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"xendata-inc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/xendata-inc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"xfinityinc\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/xfinityinc\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"xtremedata\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/xtremedata\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"xyzrd-group-ou\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/xyzrd-group-ou\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"yellowfin\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/yellowfin\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"yokogawarentalleasecorporation\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/yokogawarentalleasecorporation\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"your-shop-online\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/your-shop-online\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"z1\",\r\
    +        \n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/z1\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"z4it-aps\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/z4it-aps\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"zabbix\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/zabbix\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"zend\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/zend\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"zerodown_software\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/zerodown_software\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"zerto\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/zerto\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"zettalane_systems-5254599\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/zettalane_systems-5254599\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"zevenet\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/zevenet\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"zoomdata\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/zoomdata\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"zscaler\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/zscaler\"\
    +        \r\n  }\r\n]"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '276798'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/9e0210d8-b7fd-48f8-a96d-19f84c69f035?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:09.6401471+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:42:09.7963845+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"9e0210d8-b7fd-48f8-a96d-19f84c69f035\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14999,Microsoft.Compute/GetOperation30Min;29986
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/publishers/MicrosoftWindowsServer/artifacttypes/vmimage/offers/WindowsServer/skus?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "[\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2008-R2-SP1\",\r\n    \"\
    +        id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2008-R2-SP1\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2008-R2-SP1-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2008-R2-SP1-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2008-R2-SP1-zhcn\",\r\n\
    +        \    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2008-R2-SP1-zhcn\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2012-Datacenter\",\r\n\
    +        \    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2012-Datacenter\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2012-datacenter-gensecond\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2012-datacenter-gensecond\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2012-Datacenter-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2012-Datacenter-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2012-datacenter-smalldisk-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2012-datacenter-smalldisk-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2012-Datacenter-zhcn\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2012-Datacenter-zhcn\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2012-datacenter-zhcn-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2012-datacenter-zhcn-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": true\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2012-R2-Datacenter\",\r\
    +        \n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2012-R2-Datacenter\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2012-r2-datacenter-gensecond\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2012-r2-datacenter-gensecond\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2012-R2-Datacenter-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2012-R2-Datacenter-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2012-r2-datacenter-smalldisk-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2012-r2-datacenter-smalldisk-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2012-R2-Datacenter-zhcn\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2012-R2-Datacenter-zhcn\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2012-r2-datacenter-zhcn-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2012-r2-datacenter-zhcn-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": true\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-Datacenter\",\r\n\
    +        \    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-Datacenter\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-datacenter-gensecond\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-datacenter-gensecond\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-datacenter-gs\",\r\
    +        \n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-datacenter-gs\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-Datacenter-Server-Core\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-Datacenter-Server-Core\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-datacenter-server-core-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-datacenter-server-core-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-Datacenter-Server-Core-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-Datacenter-Server-Core-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-datacenter-server-core-smalldisk-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-datacenter-server-core-smalldisk-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": true\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-Datacenter-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-Datacenter-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-datacenter-smalldisk-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-datacenter-smalldisk-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": true\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-Datacenter-with-Containers\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-Datacenter-with-Containers\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-datacenter-with-containers-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-datacenter-with-containers-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-Datacenter-with-RDSH\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-Datacenter-with-RDSH\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-Datacenter-zhcn\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-Datacenter-zhcn\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2016-datacenter-zhcn-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-datacenter-zhcn-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": true\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-Datacenter\",\r\n\
    +        \    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-Datacenter-Core\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter-Core\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-datacenter-core-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-datacenter-core-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-Datacenter-Core-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter-Core-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-datacenter-core-smalldisk-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-datacenter-core-smalldisk-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-Datacenter-Core-with-Containers\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter-Core-with-Containers\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-datacenter-core-with-containers-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-datacenter-core-with-containers-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-Datacenter-Core-with-Containers-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter-Core-with-Containers-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-datacenter-core-with-containers-smalldisk-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-datacenter-core-with-containers-smalldisk-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-datacenter-gensecond\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-datacenter-gensecond\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-datacenter-gs\",\r\
    +        \n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-datacenter-gs\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": true\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-Datacenter-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-datacenter-smalldisk-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-datacenter-smalldisk-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": true\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-Datacenter-with-Containers\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter-with-Containers\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-datacenter-with-containers-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-datacenter-with-containers-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-Datacenter-with-Containers-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter-with-Containers-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-datacenter-with-containers-smalldisk-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-datacenter-with-containers-smalldisk-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-Datacenter-zhcn\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-Datacenter-zhcn\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"2019-datacenter-zhcn-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2019-datacenter-zhcn-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"Datacenter-Core-1803-with-Containers-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/Datacenter-Core-1803-with-Containers-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"datacenter-core-1803-with-containers-smalldisk-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/datacenter-core-1803-with-containers-smalldisk-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"Datacenter-Core-1809-with-Containers-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/Datacenter-Core-1809-with-Containers-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"datacenter-core-1809-with-containers-smalldisk-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/datacenter-core-1809-with-containers-smalldisk-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"Datacenter-Core-1903-with-Containers-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/Datacenter-Core-1903-with-Containers-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"datacenter-core-1903-with-containers-smalldisk-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/datacenter-core-1903-with-containers-smalldisk-g2\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"datacenter-core-1909-with-containers-smalldisk\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/datacenter-core-1909-with-containers-smalldisk\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"datacenter-core-1909-with-containers-smalldisk-g1\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/datacenter-core-1909-with-containers-smalldisk-g1\"\
    +        \r\n  },\r\n  {\r\n    \"properties\": {\r\n      \"automaticOSUpgradeProperties\"\
    +        : {\r\n        \"automaticOSUpgradeSupported\": false\r\n      }\r\n    },\r\
    +        \n    \"location\": \"eastus\",\r\n    \"name\": \"datacenter-core-1909-with-containers-smalldisk-g2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/datacenter-core-1909-with-containers-smalldisk-g2\"\
    +        \r\n  }\r\n]"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '24707'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/extensions/vmssextensionname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"vmssextensionname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/extensions/vmssextensionname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachineScaleSets/extensions\"\
    +        ,\r\n  \"properties\": {\r\n    \"provisioningState\": \"Creating\",\r\n \
    +        \   \"autoUpgradeMinorVersion\": true,\r\n    \"publisher\": \"Microsoft.Azure.NetworkWatcher\"\
    +        ,\r\n    \"type\": \"NetworkWatcherAgentWindows\",\r\n    \"typeHandlerVersion\"\
    +        : \"1.4\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '561'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;3993,Microsoft.Compute/LowCostGet30Min;31985
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/publishers/Microsoft.Compute/artifacttypes/vmextension/types?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "[\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"BGInfo\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/BGInfo\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"CustomScriptExtension\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/CustomScriptExtension\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"JsonADDomainExtension\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/JsonADDomainExtension\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"VMAccessAgent\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent\"\
    +        \r\n  }\r\n]"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1033'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/publishers/Microsoft.Compute/artifacttypes/vmextension/types/VMAccessAgent/versions?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "[\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"1.0\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/1.0\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"1.0.2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/1.0.2\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"1.0.3\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/1.0.3\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2.0\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/2.0\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2.0.1\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/2.0.1\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2.0.2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/2.0.2\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2.3\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/2.3\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2.4\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/2.4\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2.4.1\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/2.4.1\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2.4.2\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/2.4.2\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2.4.3\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/2.4.3\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2.4.4\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/2.4.4\"\
    +        \r\n  },\r\n  {\r\n    \"location\": \"eastus\",\r\n    \"name\": \"2.4.5\"\
    +        ,\r\n    \"id\": \"/Subscriptions/00000000-0000-0000-0000-000000000000/Providers/Microsoft.Compute/Locations/eastus/Publishers/Microsoft.Compute/ArtifactTypes/VMExtension/Types/VMAccessAgent/Versions/2.4.5\"\
    +        \r\n  }\r\n]"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '3367'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"hostgroupnamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz\"\
    +        ,\r\n  \"location\": \"eastus\",\r\n  \"tags\": {\r\n    \"department\": \"\
    +        finance\"\r\n  },\r\n  \"zones\": [\r\n    \"1\"\r\n  ],\r\n  \"properties\"\
    +        : {\r\n    \"platformFaultDomainCount\": 3,\r\n    \"hosts\": [\r\n      {\r\
    +        \n        \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/hostGroups/HOSTGROUPNAMEXYZ/hosts/HOSTNAME\"\
    +        \r\n      }\r\n    ]\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '614'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetDedicatedHost30Min;993
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"snapshotname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/snapshots\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Copy\",\r\n      \"sourceResourceId\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n      \"sourceUniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\r\n\
    +        \    },\r\n    \"diskSizeGB\": 200,\r\n    \"encryption\": {\r\n      \"type\"\
    +        : \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"incremental\": false,\r\
    +        \n    \"timeCreated\": \"2020-03-12T07:25:05.3196823+00:00\",\r\n    \"provisioningState\"\
    +        : \"Succeeded\",\r\n    \"diskState\": \"ActiveSAS\",\r\n    \"diskSizeBytes\"\
    +        : 214748364800,\r\n    \"uniqueId\": \"8d10ba69-75e0-48e4-b72e-32992e4b1b84\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1023'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;4999,Microsoft.Compute/LowCostGet30Min;39960
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"galleryname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"properties\": {\r\n    \"description\": \"This is the gallery description.\"\
    +        ,\r\n    \"identifier\": {\r\n      \"uniqueName\": \"00000000-0000-0000-0000-000000000000-GALLERYNAME\"\
    +        \r\n    },\r\n    \"provisioningState\": \"Succeeded\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '488'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetGallery3Min;299,Microsoft.Compute/GetGallery30Min;1990
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/runCommands/RunPowerShellScript?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"script\": [\r\n    \"param(\",\r\n    \"    [string]$arg1,\"\
    +        ,\r\n    \"    [string]$arg2\",\r\n    \")\",\r\n    \"Write-Host This is\
    +        \ a sample script with parameters $arg1 $arg2\"\r\n  ],\r\n  \"parameters\"\
    +        : [\r\n    {\r\n      \"name\": \"arg1\",\r\n      \"type\": \"string\",\r\
    +        \n      \"required\": false\r\n    },\r\n    {\r\n      \"name\": \"arg2\"\
    +        ,\r\n      \"type\": \"string\",\r\n      \"required\": false\r\n    }\r\n\
    +        \  ],\r\n  \"$schema\": \"http://schema.management.azure.com/schemas/2016-11-17/runcommands.json\"\
    +        ,\r\n  \"id\": \"RunPowerShellScript\",\r\n  \"osType\": \"Windows\",\r\n\
    +        \  \"label\": \"Executes a PowerShell script\",\r\n  \"description\": \"Custom\
    +        \ multiline PowerShell script should be defined in script property. Optional\
    +        \ parameters can be set in parameters property.\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '709'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetSubscriptionInfo3Min;419
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/images/imagename?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"imagename\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/images/imagename\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/images\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"properties\": {\r\n    \"storageProfile\": {\r\n      \"osDisk\"\
    +        : {\r\n        \"osType\": \"Linux\",\r\n        \"osState\": \"Generalized\"\
    +        ,\r\n        \"diskSizeGB\": 200,\r\n        \"snapshot\": {\r\n         \
    +        \ \"id\": \"subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        \r\n        },\r\n        \"caching\": \"None\",\r\n        \"storageAccountType\"\
    +        : \"Standard_LRS\"\r\n      },\r\n      \"dataDisks\": [],\r\n      \"zoneResilient\"\
    +        : false\r\n    },\r\n    \"provisioningState\": \"Succeeded\",\r\n    \"hyperVGeneration\"\
    +        : \"V1\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '847'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetImages3Min;359,Microsoft.Compute/GetImages30Min;1795
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"diskname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"diskIOPSReadWrite\"\
    +        : 500,\r\n    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\": {\r\n    \
    +        \  \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"timeCreated\"\
    +        : \"2020-03-12T07:24:38.9758989+00:00\",\r\n    \"provisioningState\": \"\
    +        Succeeded\",\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\"\
    +        : 214748364800,\r\n    \"uniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '795'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;4998,Microsoft.Compute/LowCostGet30Min;39959
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/availabilitySets/availabilitysetnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"availabilitysetnamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/availabilitySets/availabilitysetnamexyz\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/availabilitySets\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"platformUpdateDomainCount\"\
    +        : 20,\r\n    \"platformFaultDomainCount\": 2,\r\n    \"virtualMachines\":\
    +        \ []\r\n  },\r\n  \"sku\": {\r\n    \"name\": \"Classic\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '471'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;3992,Microsoft.Compute/LowCostGet30Min;31984
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"tags": {"department": "finance"}, "properties": {"platformFaultDomainCount":
    +      3}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '82'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"hostgroupnamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz\"\
    +        ,\r\n  \"location\": \"eastus\",\r\n  \"tags\": {\r\n    \"department\": \"\
    +        finance\"\r\n  },\r\n  \"zones\": [\r\n    \"1\"\r\n  ],\r\n  \"properties\"\
    +        : {\r\n    \"platformFaultDomainCount\": 3\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '374'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutDeleteDedicatedHost3Min;119,Microsoft.Compute/PutDeleteDedicatedHost30Min;597
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1197'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '2'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"location\": \"eastus\",\r\n  \"sku\": {\r\n    \"name\": \"\
    +        Standard_LRS\",\r\n    \"tier\": \"Standard\"\r\n  },\r\n  \"properties\"\
    +        : {\r\n    \"creationData\": {\r\n      \"createOption\": \"Copy\",\r\n  \
    +        \    \"sourceResourceId\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n      \"sourceUniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\r\n\
    +        \    },\r\n    \"diskSizeGB\": 200,\r\n    \"provisioningState\": \"Updating\"\
    +        ,\r\n    \"isArmResource\": true,\r\n    \"faultDomain\": 0\r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/75deb942-04d2-4d00-af0a-5e9fe7d58368?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '545'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:31 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/75deb942-04d2-4d00-af0a-5e9fe7d58368?monitor=true&api-version=2019-11-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/CreateUpdateDisks3Min;999,Microsoft.Compute/CreateUpdateDisks30Min;7994
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1196'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/75deb942-04d2-4d00-af0a-5e9fe7d58368?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:31.0796808+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:42:31.2515561+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"properties\": {\r\n    \"output\": {\r\n  \"name\": \"snapshotname\"\
    +        ,\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/snapshots\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Copy\",\r\n      \"sourceResourceId\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n      \"sourceUniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\r\n\
    +        \    },\r\n    \"diskSizeGB\": 200,\r\n    \"encryption\": {\r\n      \"type\"\
    +        : \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"incremental\": false,\r\
    +        \n    \"timeCreated\": \"2020-03-12T07:25:05.3196823+00:00\",\r\n    \"provisioningState\"\
    +        : \"Succeeded\",\r\n    \"diskState\": \"ActiveSAS\",\r\n    \"diskSizeBytes\"\
    +        : 214748364800,\r\n    \"uniqueId\": \"8d10ba69-75e0-48e4-b72e-32992e4b1b84\"\
    +        \r\n  }\r\n}\r\n  },\r\n  \"name\": \"75deb942-04d2-4d00-af0a-5e9fe7d58368\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1248'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49995,Microsoft.Compute/GetOperation30Min;399967
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"snapshotname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/snapshots\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Copy\",\r\n      \"sourceResourceId\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n      \"sourceUniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\r\n\
    +        \    },\r\n    \"diskSizeGB\": 200,\r\n    \"encryption\": {\r\n      \"type\"\
    +        : \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"incremental\": false,\r\
    +        \n    \"timeCreated\": \"2020-03-12T07:25:05.3196823+00:00\",\r\n    \"provisioningState\"\
    +        : \"Succeeded\",\r\n    \"diskState\": \"ActiveSAS\",\r\n    \"diskSizeBytes\"\
    +        : 214748364800,\r\n    \"uniqueId\": \"8d10ba69-75e0-48e4-b72e-32992e4b1b84\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1023'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;4997,Microsoft.Compute/LowCostGet30Min;39958
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/extensionRollingUpgrade?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 07:42:36 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/VMScaleSetActions3Min;238,Microsoft.Compute/VMScaleSetActions30Min;1198,Microsoft.Compute/VmssQueuedVMOperations;4800
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1199'
    +      x-ms-request-charge:
    +      - '0'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/4c3eb603-f38f-4554-8b0c-764dcdd7af12?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:06.921346+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"4c3eb603-f38f-4554-8b0c-764dcdd7af12\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '133'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:42:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14998,Microsoft.Compute/GetOperation30Min;29985
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:43:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14996,Microsoft.Compute/GetOperation30Min;29983
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/4c3eb603-f38f-4554-8b0c-764dcdd7af12?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:06.921346+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"4c3eb603-f38f-4554-8b0c-764dcdd7af12\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '133'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:43:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14994,Microsoft.Compute/GetOperation30Min;29981
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:43:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14992,Microsoft.Compute/GetOperation30Min;29979
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/4c3eb603-f38f-4554-8b0c-764dcdd7af12?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:06.921346+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"4c3eb603-f38f-4554-8b0c-764dcdd7af12\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '133'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:43:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14990,Microsoft.Compute/GetOperation30Min;29977
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:44:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14987,Microsoft.Compute/GetOperation30Min;29974
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/4c3eb603-f38f-4554-8b0c-764dcdd7af12?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:06.921346+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T07:43:45.3124614+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"4c3eb603-f38f-4554-8b0c-764dcdd7af12\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '183'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:44:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29973
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"virtualmachineextensionname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachines/extensions\",\r\n  \"\
    +        location\": \"eastus\",\r\n  \"properties\": {\r\n    \"autoUpgradeMinorVersion\"\
    +        : true,\r\n    \"provisioningState\": \"Succeeded\",\r\n    \"publisher\"\
    +        : \"Microsoft.Azure.NetworkWatcher\",\r\n    \"type\": \"NetworkWatcherAgentWindows\"\
    +        ,\r\n    \"typeHandlerVersion\": \"1.4\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '574'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:44:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;3989,Microsoft.Compute/LowCostGet30Min;31980
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:44:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29970
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:45:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14981,Microsoft.Compute/GetOperation30Min;29967
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:45:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14980,Microsoft.Compute/GetOperation30Min;29964
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:46:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14981,Microsoft.Compute/GetOperation30Min;29961
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:46:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29958
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:47:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29955
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:47:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29953
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:48:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29950
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:48:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29947
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:49:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29944
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:49:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29941
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:50:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29938
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:50:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29935
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:51:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29932
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:51:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29929
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:42:36.6559169+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:52:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29927
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:52:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29924
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:53:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29921
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:53:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29918
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:54:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29915
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:54:52 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29912
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:55:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29915
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:55:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29913
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:56:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29910
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:56:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29907
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:57:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29904
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:57:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29901
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:58:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29898
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:58:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29895
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:59:28 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29892
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 07:59:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29894
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:00:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29891
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:01:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29889
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:01:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29886
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:02:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29883
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:02:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29880
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:03:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29877
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:03:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29874
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:04:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29871
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:04:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29868
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:05:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29867
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:05:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29865
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:06:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29862
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:06:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29859
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:07:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29856
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:07:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29853
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:08:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29850
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:08:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29847
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:09:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29844
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:09:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29841
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:10:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29857
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:10:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29854
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:11:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29851
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:11:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29848
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:12:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29845
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:12:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29842
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:13:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29839
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:13:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29836
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:14:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29833
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:14:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29830
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:15:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29856
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:15:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29854
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:16:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29851
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:16:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29848
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:17:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29845
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:17:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29842
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:18:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29839
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:18:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29837
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:19:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29834
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:19:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29831
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:20:28 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29856
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:20:58 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29853
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:21:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29850
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:21:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29847
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:22:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29844
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:23:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29841
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:23:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29838
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:24:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29836
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:24:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29833
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:25:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29858
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:25:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29855
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:26:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29852
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:26:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29849
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:27:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29846
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:27:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29844
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:28:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29841
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:28:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29838
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:29:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29835
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:29:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29832
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:30:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29857
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:30:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29854
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:31:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29851
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:31:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29848
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T07:52:36.8917253+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:32:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29845
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d8c084ef-1ced-4eb8-8738-80177a9493d2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:32:37.2742377+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:32:37.2898802+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"d8c084ef-1ced-4eb8-8738-80177a9493d2\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:32:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29842
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"properties": {"diskSizeGB": 200}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '35'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"diskname\",\r\n  \"location\": \"eastus\",\r\n \
    +        \ \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"provisioningState\"\
    +        : \"Updating\",\r\n    \"isArmResource\": true,\r\n    \"faultDomain\": 0\r\
    +        \n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/24dc8802-0d5c-41da-8e7b-15b418cb8db5?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '321'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:32:46 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/24dc8802-0d5c-41da-8e7b-15b418cb8db5?monitor=true&api-version=2019-11-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/CreateUpdateDisks3Min;999,Microsoft.Compute/CreateUpdateDisks30Min;7999
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1195'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/24dc8802-0d5c-41da-8e7b-15b418cb8db5?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:32:46.9580799+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:32:47.114355+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"properties\": {\r\n    \"output\": {\r\n  \"name\": \"diskname\"\
    +        ,\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"diskIOPSReadWrite\"\
    +        : 500,\r\n    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\": {\r\n    \
    +        \  \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"timeCreated\"\
    +        : \"2020-03-12T07:24:38.9758989+00:00\",\r\n    \"provisioningState\": \"\
    +        Succeeded\",\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\"\
    +        : 214748364800,\r\n    \"uniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\
    +        \r\n  }\r\n}\r\n  },\r\n  \"name\": \"24dc8802-0d5c-41da-8e7b-15b418cb8db5\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1019'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:32:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49999,Microsoft.Compute/GetOperation30Min;399999
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"diskname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\
    +        \r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\"\
    +        : \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"diskIOPSReadWrite\"\
    +        : 500,\r\n    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\": {\r\n    \
    +        \  \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"timeCreated\"\
    +        : \"2020-03-12T07:24:38.9758989+00:00\",\r\n    \"provisioningState\": \"\
    +        Succeeded\",\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\"\
    +        : 214748364800,\r\n    \"uniqueId\": \"67cd251e-2f14-408e-b507-d58363a664d0\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '795'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:32:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;4999,Microsoft.Compute/LowCostGet30Min;39998
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"access": "Read", "durationInSeconds": 1800}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '45'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname/beginGetAccess?api-version=2019-11-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/81adf443-5eb6-43c4-8be0-5c764c434ecf?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:32:51 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/81adf443-5eb6-43c4-8be0-5c764c434ecf?monitor=true&api-version=2019-11-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/HighCostDiskHydrate3Min;999,Microsoft.Compute/HighCostDiskHydrate30Min;7999
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1198'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/81adf443-5eb6-43c4-8be0-5c764c434ecf?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:32:52.5206055+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:32:52.77061+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"properties\": {\r\n    \"output\": {\r\n  \"accessSAS\": \"https://md-gnr50pvkhgft.blob.core.windows.net/grzbd300kgrl/abcd?sv=2017-04-17&sr=b&si=3fe428ab-f4ca-4e18-b34e-56e337ad5cb6&sig=%2BHRtN72FSWkO50NGEm0Fo2J%2BLp7oIOUVYEMEDNMnjAU%3D\"\
    +        \r\n}\r\n  },\r\n  \"name\": \"81adf443-5eb6-43c4-8be0-5c764c434ecf\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '423'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:33:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49997,Microsoft.Compute/GetOperation30Min;399997
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/81adf443-5eb6-43c4-8be0-5c764c434ecf?monitor=true&api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"accessSAS\": \"https://md-gnr50pvkhgft.blob.core.windows.net/grzbd300kgrl/abcd?sv=2017-04-17&sr=b&si=3fe428ab-f4ca-4e18-b34e-56e337ad5cb6&sig=%2BHRtN72FSWkO50NGEm0Fo2J%2BLp7oIOUVYEMEDNMnjAU%3D\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '200'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:33:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49996,Microsoft.Compute/GetOperation30Min;399996
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"access": "Read", "durationInSeconds": 1800}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '45'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname/beginGetAccess?api-version=2019-11-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/0a3f9f39-7bd4-4a4c-b17a-e6e08b8fbddd?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:33:24 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/0a3f9f39-7bd4-4a4c-b17a-e6e08b8fbddd?monitor=true&api-version=2019-11-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/HighCostSnapshotCreateHydrate3Min;239,Microsoft.Compute/HighCostSnapshotCreateHydrate30Min;1919
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1197'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/0a3f9f39-7bd4-4a4c-b17a-e6e08b8fbddd?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:33:24.3018678+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:33:24.4737159+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"properties\": {\r\n    \"output\": {\r\n  \"accessSAS\": \"https://md-gnr50pvkhgft.blob.core.windows.net/lppp4jcnscmw/abcd?sv=2017-04-17&sr=b&si=993ae6cd-83d5-4f5c-a686-55365655edd9&sig=mi3L%2BQSjskzFleYpZ4W%2Ba%2BslPFQIPtxiKlqWig69osQ%3D\"\
    +        \r\n}\r\n  },\r\n  \"name\": \"0a3f9f39-7bd4-4a4c-b17a-e6e08b8fbddd\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '427'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:33:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49994,Microsoft.Compute/GetOperation30Min;399994
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/0a3f9f39-7bd4-4a4c-b17a-e6e08b8fbddd?monitor=true&api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"accessSAS\": \"https://md-gnr50pvkhgft.blob.core.windows.net/lppp4jcnscmw/abcd?sv=2017-04-17&sr=b&si=993ae6cd-83d5-4f5c-a686-55365655edd9&sig=mi3L%2BQSjskzFleYpZ4W%2Ba%2BslPFQIPtxiKlqWig69osQ%3D\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '202'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:33:58 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49993,Microsoft.Compute/GetOperation30Min;399993
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"properties": {"platformUpdateDomainCount": 20, "platformFaultDomainCount":
    +      2}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '80'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/availabilitySets/availabilitysetnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"availabilitysetnamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/availabilitySets/availabilitysetnamexyz\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/availabilitySets\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"platformUpdateDomainCount\"\
    +        : 20,\r\n    \"platformFaultDomainCount\": 2\r\n  },\r\n  \"sku\": {\r\n \
    +        \   \"name\": \"Classic\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '443'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:34:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutVM3Min;239,Microsoft.Compute/PutVM30Min;1199
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1194'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"tags": {"department": "HR"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '30'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz/hosts/hostname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"hostname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz/hosts/hostname\"\
    +        ,\r\n  \"location\": \"eastus\",\r\n  \"tags\": {\r\n    \"department\": \"\
    +        HR\"\r\n  },\r\n  \"sku\": {\r\n    \"name\": \"DSv3-Type1\"\r\n  },\r\n \
    +        \ \"properties\": {\r\n    \"platformFaultDomain\": 1,\r\n    \"autoReplaceOnFailure\"\
    +        : true,\r\n    \"hostId\": \"088ab045-ff9e-49af-8746-f11342a580dc\",\r\n \
    +        \   \"provisioningTime\": \"2020-03-12T07:29:10.3410931+00:00\",\r\n    \"\
    +        provisioningState\": \"Updating\"\r\n  }\r\n}"
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/2e0f675d-f55f-4e82-83b9-81fbe299df9c?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '576'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:34:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutDeleteDedicatedHost3Min;119,Microsoft.Compute/PutDeleteDedicatedHost30Min;599
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1193'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: 'b''{"properties": {"publishingProfile": {"targetRegions": [{"name": "East
    +      US", "regionalReplicaCount": 2, "storageAccountType": "Standard_ZRS"}]}, "storageProfile":
    +      {"osDiskImage": {"hostCaching": "ReadOnly", "source": {"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname"}}}}}'''
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '390'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename/versions/1.0.0?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"1.0.0\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename/versions/1.0.0\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/images/versions\",\r\n  \"\
    +        location\": \"eastus\",\r\n  \"properties\": {\r\n    \"publishingProfile\"\
    +        : {\r\n      \"targetRegions\": [\r\n        {\r\n          \"name\": \"East\
    +        \ US\",\r\n          \"regionalReplicaCount\": 2,\r\n          \"storageAccountType\"\
    +        : \"Standard_ZRS\"\r\n        }\r\n      ],\r\n      \"replicaCount\": 1,\r\
    +        \n      \"excludeFromLatest\": false,\r\n      \"publishedDate\": \"2020-03-12T07:32:36.8631028+00:00\"\
    +        ,\r\n      \"storageAccountType\": \"Standard_LRS\"\r\n    },\r\n    \"storageProfile\"\
    +        : {\r\n      \"osDiskImage\": {\r\n        \"sizeInGB\": 200,\r\n        \"\
    +        hostCaching\": \"ReadOnly\",\r\n        \"source\": {\r\n          \"id\"\
    +        : \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        \r\n        }\r\n      }\r\n    },\r\n    \"provisioningState\": \"Updating\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/02a6fbb2-a638-4d27-9c92-05bb798ec055?api-version=2019-12-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1088'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:34:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1192'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/2e0f675d-f55f-4e82-83b9-81fbe299df9c?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:34:02.9152937+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:34:02.9309453+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"2e0f675d-f55f-4e82-83b9-81fbe299df9c\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:34:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14993,Microsoft.Compute/GetOperation30Min;29840
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz/hosts/hostname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"hostname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz/hosts/hostname\"\
    +        ,\r\n  \"location\": \"eastus\",\r\n  \"tags\": {\r\n    \"department\": \"\
    +        HR\"\r\n  },\r\n  \"sku\": {\r\n    \"name\": \"DSv3-Type1\"\r\n  },\r\n \
    +        \ \"properties\": {\r\n    \"platformFaultDomain\": 1,\r\n    \"autoReplaceOnFailure\"\
    +        : true,\r\n    \"hostId\": \"088ab045-ff9e-49af-8746-f11342a580dc\",\r\n \
    +        \   \"virtualMachines\": [],\r\n    \"provisioningTime\": \"2020-03-12T07:29:10.3410931+00:00\"\
    +        ,\r\n    \"provisioningState\": \"Succeeded\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '605'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:34:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetDedicatedHost3Min;248,Microsoft.Compute/GetDedicatedHost30Min;998
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/02a6fbb2-a638-4d27-9c92-05bb798ec055?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:34:07.025571+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"02a6fbb2-a638-4d27-9c92-05bb798ec055\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '133'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:34:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/02a6fbb2-a638-4d27-9c92-05bb798ec055?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:34:07.025571+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"02a6fbb2-a638-4d27-9c92-05bb798ec055\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '133'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:35:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/02a6fbb2-a638-4d27-9c92-05bb798ec055?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:34:07.025571+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:35:37.1344212+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"02a6fbb2-a638-4d27-9c92-05bb798ec055\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '183'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:35:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename/versions/1.0.0?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"1.0.0\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename/versions/1.0.0\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/images/versions\",\r\n  \"\
    +        location\": \"eastus\",\r\n  \"properties\": {\r\n    \"publishingProfile\"\
    +        : {\r\n      \"targetRegions\": [\r\n        {\r\n          \"name\": \"East\
    +        \ US\",\r\n          \"regionalReplicaCount\": 2,\r\n          \"storageAccountType\"\
    +        : \"Standard_ZRS\"\r\n        }\r\n      ],\r\n      \"replicaCount\": 1,\r\
    +        \n      \"excludeFromLatest\": false,\r\n      \"publishedDate\": \"2020-03-12T07:32:36.8631028+00:00\"\
    +        ,\r\n      \"storageAccountType\": \"Standard_LRS\"\r\n    },\r\n    \"storageProfile\"\
    +        : {\r\n      \"osDiskImage\": {\r\n        \"sizeInGB\": 200,\r\n        \"\
    +        hostCaching\": \"ReadOnly\",\r\n        \"source\": {\r\n          \"id\"\
    +        : \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        \r\n        }\r\n      }\r\n    },\r\n    \"provisioningState\": \"Succeeded\"\
    +        \r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1089'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:35:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetGalleryImageVersion3Min;1997,Microsoft.Compute/GetGalleryImageVersion30Min;9997
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"sku": {"name": "Standard_D1_v2", "tier": "Standard", "capacity": 2},
    +      "properties": {"upgradePolicy": {"mode": "Manual"}}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '123'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"virtualmachinescalesetname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachineScaleSets\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"sku\": {\r\n    \"name\": \"Standard_D1_v2\",\r\n   \
    +        \ \"tier\": \"Standard\",\r\n    \"capacity\": 2\r\n  },\r\n  \"properties\"\
    +        : {\r\n    \"singlePlacementGroup\": true,\r\n    \"upgradePolicy\": {\r\n\
    +        \      \"mode\": \"Manual\"\r\n    },\r\n    \"virtualMachineProfile\": {\r\
    +        \n      \"osProfile\": {\r\n        \"computerNamePrefix\": \"testPC\",\r\n\
    +        \        \"adminUsername\": \"testuser\",\r\n        \"linuxConfiguration\"\
    +        : {\r\n          \"disablePasswordAuthentication\": false,\r\n          \"\
    +        provisionVMAgent\": true\r\n        },\r\n        \"secrets\": [],\r\n   \
    +        \     \"allowExtensionOperations\": true,\r\n        \"requireGuestProvisionSignal\"\
    +        : true\r\n      },\r\n      \"storageProfile\": {\r\n        \"osDisk\": {\r\
    +        \n          \"createOption\": \"FromImage\",\r\n          \"caching\": \"\
    +        ReadWrite\",\r\n          \"managedDisk\": {\r\n            \"storageAccountType\"\
    +        : \"Standard_LRS\"\r\n          },\r\n          \"diskSizeGB\": 512\r\n  \
    +        \      },\r\n        \"imageReference\": {\r\n          \"publisher\": \"\
    +        Canonical\",\r\n          \"offer\": \"UbuntuServer\",\r\n          \"sku\"\
    +        : \"18.04-LTS\",\r\n          \"version\": \"latest\"\r\n        }\r\n   \
    +        \   },\r\n      \"networkProfile\": {\"networkInterfaceConfigurations\":[{\"\
    +        name\":\"testPC\",\"properties\":{\"primary\":true,\"enableAcceleratedNetworking\"\
    +        :false,\"dnsSettings\":{\"dnsServers\":[]},\"enableIPForwarding\":false,\"\
    +        ipConfigurations\":[{\"name\":\"testPC\",\"properties\":{\"subnet\":{\"id\"\
    +        :\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz\"\
    +        },\"privateIPAddressVersion\":\"IPv4\"}}]}}]},\r\n      \"extensionProfile\"\
    +        : {\r\n        \"extensions\": [\r\n          {\r\n            \"name\": \"\
    +        vmssextensionname\",\r\n            \"properties\": {\r\n              \"\
    +        autoUpgradeMinorVersion\": true,\r\n              \"publisher\": \"Microsoft.Azure.NetworkWatcher\"\
    +        ,\r\n              \"type\": \"NetworkWatcherAgentWindows\",\r\n         \
    +        \     \"typeHandlerVersion\": \"1.4\"\r\n            }\r\n          }\r\n\
    +        \        ]\r\n      }\r\n    },\r\n    \"provisioningState\": \"Updating\"\
    +        ,\r\n    \"overprovision\": true,\r\n    \"doNotRunExtensionsOnOverprovisionedVMs\"\
    +        : false,\r\n    \"uniqueId\": \"052fe2f1-c75d-482f-9b18-bad155cba912\"\r\n\
    +        \  }\r\n}"
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/1ecae5dc-6adf-454b-80e3-b2f6b93487a2?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2437'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:35:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/VMScaleSetActions3Min;239,Microsoft.Compute/VMScaleSetActions30Min;1199,Microsoft.Compute/VmssQueuedVMOperations;4800
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1195'
    +      x-ms-request-charge:
    +      - '0'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/1ecae5dc-6adf-454b-80e3-b2f6b93487a2?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:35:51.1656076+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:35:51.2906097+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"1ecae5dc-6adf-454b-80e3-b2f6b93487a2\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:36:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14996,Microsoft.Compute/GetOperation30Min;29867
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"virtualmachinescalesetname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachineScaleSets\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"sku\": {\r\n    \"name\": \"Standard_D1_v2\",\r\n   \
    +        \ \"tier\": \"Standard\",\r\n    \"capacity\": 2\r\n  },\r\n  \"properties\"\
    +        : {\r\n    \"singlePlacementGroup\": true,\r\n    \"upgradePolicy\": {\r\n\
    +        \      \"mode\": \"Manual\"\r\n    },\r\n    \"virtualMachineProfile\": {\r\
    +        \n      \"osProfile\": {\r\n        \"computerNamePrefix\": \"testPC\",\r\n\
    +        \        \"adminUsername\": \"testuser\",\r\n        \"linuxConfiguration\"\
    +        : {\r\n          \"disablePasswordAuthentication\": false,\r\n          \"\
    +        provisionVMAgent\": true\r\n        },\r\n        \"secrets\": [],\r\n   \
    +        \     \"allowExtensionOperations\": true,\r\n        \"requireGuestProvisionSignal\"\
    +        : true\r\n      },\r\n      \"storageProfile\": {\r\n        \"osDisk\": {\r\
    +        \n          \"createOption\": \"FromImage\",\r\n          \"caching\": \"\
    +        ReadWrite\",\r\n          \"managedDisk\": {\r\n            \"storageAccountType\"\
    +        : \"Standard_LRS\"\r\n          },\r\n          \"diskSizeGB\": 512\r\n  \
    +        \      },\r\n        \"imageReference\": {\r\n          \"publisher\": \"\
    +        Canonical\",\r\n          \"offer\": \"UbuntuServer\",\r\n          \"sku\"\
    +        : \"18.04-LTS\",\r\n          \"version\": \"latest\"\r\n        }\r\n   \
    +        \   },\r\n      \"networkProfile\": {\"networkInterfaceConfigurations\":[{\"\
    +        name\":\"testPC\",\"properties\":{\"primary\":true,\"enableAcceleratedNetworking\"\
    +        :false,\"dnsSettings\":{\"dnsServers\":[]},\"enableIPForwarding\":false,\"\
    +        ipConfigurations\":[{\"name\":\"testPC\",\"properties\":{\"subnet\":{\"id\"\
    +        :\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/virtualNetworks/networknamexyz/subnets/subnetxyz\"\
    +        },\"privateIPAddressVersion\":\"IPv4\"}}]}}]},\r\n      \"extensionProfile\"\
    +        : {\r\n        \"extensions\": [\r\n          {\r\n            \"name\": \"\
    +        vmssextensionname\",\r\n            \"properties\": {\r\n              \"\
    +        autoUpgradeMinorVersion\": true,\r\n              \"publisher\": \"Microsoft.Azure.NetworkWatcher\"\
    +        ,\r\n              \"type\": \"NetworkWatcherAgentWindows\",\r\n         \
    +        \     \"typeHandlerVersion\": \"1.4\"\r\n            }\r\n          }\r\n\
    +        \        ]\r\n      }\r\n    },\r\n    \"provisioningState\": \"Succeeded\"\
    +        ,\r\n    \"overprovision\": true,\r\n    \"doNotRunExtensionsOnOverprovisionedVMs\"\
    +        : false,\r\n    \"uniqueId\": \"052fe2f1-c75d-482f-9b18-bad155cba912\"\r\n\
    +        \  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2438'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:36:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetVMScaleSet3Min;397,Microsoft.Compute/GetVMScaleSet30Min;2597
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"tags": {"tag1": "tag1"}, "properties": {"description": "This is the gallery
    +      application description.", "eula": "This is the gallery application EULA.",
    +      "supportedOSType": "Windows"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '184'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/applications/applicationname?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"applicationname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/applications/applicationname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/applications\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"tags\": {\r\n    \"tag1\": \"tag1\"\r\n  },\r\n  \"properties\"\
    +        : {\r\n    \"supportedOSType\": \"Windows\",\r\n    \"description\": \"This\
    +        \ is the gallery application description.\",\r\n    \"eula\": \"This is the\
    +        \ gallery application EULA.\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '534'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:36:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1194'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"tags": {"location": "eastus", "proximity_placement_group_type": "Standard"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '78'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/proximityPlacementGroups/proximityplacementgroupname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"proximityplacementgroupname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/proximityPlacementGroups/proximityplacementgroupname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/proximityPlacementGroups\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"tags\": {\r\n    \"location\": \"eastus\",\r\n    \"\
    +        proximity_placement_group_type\": \"Standard\"\r\n  },\r\n  \"properties\"\
    +        : {\r\n    \"proximityPlacementGroupType\": \"Standard\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '498'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:36:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutDeletePPG3Min;99,Microsoft.Compute/PutDeletePPG30Min;499
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1193'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/restart?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/fc68ac4e-4736-462f-9684-a25813cceebb?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:36:11 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/fc68ac4e-4736-462f-9684-a25813cceebb?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/VMScaleSetActions3Min;238,Microsoft.Compute/VMScaleSetActions30Min;1198,Microsoft.Compute/VMScaleSetBatchedVMRequests5Min;1198,Microsoft.Compute/VmssQueuedVMOperations;4798
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1196'
    +      x-ms-request-charge:
    +      - '2'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/fc68ac4e-4736-462f-9684-a25813cceebb?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:36:12.4470655+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:36:33.0879132+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"fc68ac4e-4736-462f-9684-a25813cceebb\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:36:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14994,Microsoft.Compute/GetOperation30Min;29865
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/poweroff?skipShutdown=false&api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/af5f4057-8083-40ab-9eb6-14f41023ab3a?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:36:44 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/af5f4057-8083-40ab-9eb6-14f41023ab3a?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/DeleteVMScaleSet3Min;79,Microsoft.Compute/DeleteVMScaleSet30Min;399,Microsoft.Compute/VMScaleSetBatchedVMRequests5Min;1196,Microsoft.Compute/VmssQueuedVMOperations;4798
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1195'
    +      x-ms-request-charge:
    +      - '2'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/af5f4057-8083-40ab-9eb6-14f41023ab3a?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:36:44.8848324+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:37:00.1974032+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"af5f4057-8083-40ab-9eb6-14f41023ab3a\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:37:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14992,Microsoft.Compute/GetOperation30Min;29862
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/start?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/24e2dabb-5e64-4716-8f43-5a9917609606?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:37:26 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/24e2dabb-5e64-4716-8f43-5a9917609606?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/VMScaleSetActions3Min;237,Microsoft.Compute/VMScaleSetActions30Min;1197,Microsoft.Compute/VMScaleSetBatchedVMRequests5Min;1194,Microsoft.Compute/VmssQueuedVMOperations;4798
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1194'
    +      x-ms-request-charge:
    +      - '2'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/24e2dabb-5e64-4716-8f43-5a9917609606?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:37:26.7756763+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:37:32.3694684+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"24e2dabb-5e64-4716-8f43-5a9917609606\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:37:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14991,Microsoft.Compute/GetOperation30Min;29860
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"properties": {"autoUpgradeMinorVersion": true}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '49'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/extensions/vmssextensionname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"vmssextensionname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/extensions/vmssextensionname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachineScaleSets/extensions\"\
    +        ,\r\n  \"properties\": {\r\n    \"provisioningState\": \"Succeeded\",\r\n\
    +        \    \"autoUpgradeMinorVersion\": true\r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/f47cfce5-6b38-4c73-a273-690640800c48?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '433'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:37:58 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/VMScaleSetActions3Min;236,Microsoft.Compute/VMScaleSetActions30Min;1196,Microsoft.Compute/VmssQueuedVMOperations;4800
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1192'
    +      x-ms-request-charge:
    +      - '0'
    +    status:
    +      code: 201
    +      message: Created
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/extensions/vmssextensionname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/74610595-a4d2-4943-939f-edc024cf7316?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:37:59 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/74610595-a4d2-4943-939f-edc024cf7316?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/VMScaleSetActions3Min;235,Microsoft.Compute/VMScaleSetActions30Min;1195,Microsoft.Compute/VmssQueuedVMOperations;4800
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14999'
    +      x-ms-request-charge:
    +      - '0'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/f47cfce5-6b38-4c73-a273-690640800c48?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:37:58.7758426+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:37:58.9633195+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"f47cfce5-6b38-4c73-a273-690640800c48\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:38:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14990,Microsoft.Compute/GetOperation30Min;29859
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/74610595-a4d2-4943-939f-edc024cf7316?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:37:59.7914506+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:37:59.900826+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"74610595-a4d2-4943-939f-edc024cf7316\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '183'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:38:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14989,Microsoft.Compute/GetOperation30Min;29858
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/extensions/vmssextensionname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"error\": {\r\n    \"code\": \"NotFound\",\r\n    \"message\"\
    +        : \"The entity was not found in this Azure location.\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '115'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:38:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;3999,Microsoft.Compute/LowCostGet30Min;31999
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/poweroff?skipShutdown=false&api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/386039b1-fd8c-4962-afe4-3e0a19cd3d03?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:38:10 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/386039b1-fd8c-4962-afe4-3e0a19cd3d03?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/DeleteVMScaleSet3Min;78,Microsoft.Compute/DeleteVMScaleSet30Min;398,Microsoft.Compute/VMScaleSetBatchedVMRequests5Min;1192,Microsoft.Compute/VmssQueuedVMOperations;4798
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1193'
    +      x-ms-request-charge:
    +      - '2'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/386039b1-fd8c-4962-afe4-3e0a19cd3d03?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:38:11.0883945+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:38:25.275919+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"386039b1-fd8c-4962-afe4-3e0a19cd3d03\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '183'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:38:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14987,Microsoft.Compute/GetOperation30Min;29855
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"commandId": "RunPowerShellScript"}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '36'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/runCommand?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/0a75cf9e-3b5d-44f0-9de5-c52b853aa621?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:38:42 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/0a75cf9e-3b5d-44f0-9de5-c52b853aa621?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/UpdateVM3Min;239,Microsoft.Compute/UpdateVM30Min;1199
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1192'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/0a75cf9e-3b5d-44f0-9de5-c52b853aa621?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:38:42.5729071+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"0a75cf9e-3b5d-44f0-9de5-c52b853aa621\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:39:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29852
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/0a75cf9e-3b5d-44f0-9de5-c52b853aa621?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:38:42.5729071+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:39:45.7448286+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"properties\": {\r\n    \"output\": {\r\n  \"value\": [\r\n    {\r\
    +        \n      \"code\": \"ComponentStatus/StdOut/succeeded\",\r\n      \"level\"\
    +        : \"Info\",\r\n      \"displayStatus\": \"Provisioning succeeded\",\r\n  \
    +        \    \"message\": \"This is a sample script with parameters  \"\r\n    },\r\
    +        \n    {\r\n      \"code\": \"ComponentStatus/StdErr/succeeded\",\r\n     \
    +        \ \"level\": \"Info\",\r\n      \"displayStatus\": \"Provisioning succeeded\"\
    +        ,\r\n      \"message\": \"\"\r\n    }\r\n  ]\r\n}\r\n  },\r\n  \"name\": \"\
    +        0a75cf9e-3b5d-44f0-9de5-c52b853aa621\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '610'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:39:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29850
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/0a75cf9e-3b5d-44f0-9de5-c52b853aa621?monitor=true&api-version=2019-07-01
    +  response:
    +    body:
    +      string: '{"value":[{"code":"ComponentStatus/StdOut/succeeded","level":"Info","displayStatus":"Provisioning
    +        succeeded","message":"This is a sample script with parameters  "},{"code":"ComponentStatus/StdErr/succeeded","level":"Info","displayStatus":"Provisioning
    +        succeeded","message":""}]}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '278'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:39:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29849
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/restart?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/ec57dd50-a1c9-4ca4-880c-041a0061367b?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:39:46 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/ec57dd50-a1c9-4ca4-880c-041a0061367b?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/UpdateVM3Min;238,Microsoft.Compute/UpdateVM30Min;1198
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1191'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/ec57dd50-a1c9-4ca4-880c-041a0061367b?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:39:47.6667249+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:40:09.2603674+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"ec57dd50-a1c9-4ca4-880c-041a0061367b\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:40:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14984,Microsoft.Compute/GetOperation30Min;29874
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/powerOff?skipShutdown=false&api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/458c6148-4eaa-4a41-8fdd-71869e21742c?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:40:22 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/458c6148-4eaa-4a41-8fdd-71869e21742c?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/UpdateVM3Min;237,Microsoft.Compute/UpdateVM30Min;1197
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1190'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/458c6148-4eaa-4a41-8fdd-71869e21742c?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:40:22.3073203+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:40:36.8073239+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"458c6148-4eaa-4a41-8fdd-71869e21742c\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:40:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14983,Microsoft.Compute/GetOperation30Min;29871
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/start?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/4819838b-1b9c-4d89-8268-5d707745c7a4?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:40:53 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/4819838b-1b9c-4d89-8268-5d707745c7a4?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/UpdateVM3Min;236,Microsoft.Compute/UpdateVM30Min;1196
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1189'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/4819838b-1b9c-4d89-8268-5d707745c7a4?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:40:54.0416889+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:40:59.1510997+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"4819838b-1b9c-4d89-8268-5d707745c7a4\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:41:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29870
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"properties": {"autoUpgradeMinorVersion": true}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '49'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"virtualmachineextensionname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachines/extensions\",\r\n  \"\
    +        location\": \"eastus\",\r\n  \"properties\": {\r\n    \"autoUpgradeMinorVersion\"\
    +        : true,\r\n    \"provisioningState\": \"Updating\",\r\n    \"publisher\":\
    +        \ \"Microsoft.Azure.NetworkWatcher\",\r\n    \"type\": \"NetworkWatcherAgentWindows\"\
    +        ,\r\n    \"typeHandlerVersion\": \"1.4\"\r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/fe145ed5-3a31-438f-890e-5775c674d5fd?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '573'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:41:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/UpdateVM3Min;235,Microsoft.Compute/UpdateVM30Min;1195
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1191'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d11f6eba-c95a-4f76-8686-a3cd81698c7d?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:41:07 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d11f6eba-c95a-4f76-8686-a3cd81698c7d?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/UpdateVM3Min;234,Microsoft.Compute/UpdateVM30Min;1194
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14998'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/fe145ed5-3a31-438f-890e-5775c674d5fd?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:41:06.6041838+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:41:06.7291822+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"fe145ed5-3a31-438f-890e-5775c674d5fd\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:41:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29868
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"virtualmachineextensionname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/virtualmachineextensionname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachines/extensions\",\r\n  \"\
    +        location\": \"eastus\",\r\n  \"properties\": {\r\n    \"autoUpgradeMinorVersion\"\
    +        : true,\r\n    \"provisioningState\": \"Deleting\",\r\n    \"publisher\":\
    +        \ \"Microsoft.Azure.NetworkWatcher\",\r\n    \"type\": \"NetworkWatcherAgentWindows\"\
    +        ,\r\n    \"typeHandlerVersion\": \"1.4\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '573'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:41:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;3999,Microsoft.Compute/LowCostGet30Min;31998
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d11f6eba-c95a-4f76-8686-a3cd81698c7d?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:41:07.5885708+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"d11f6eba-c95a-4f76-8686-a3cd81698c7d\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:42:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29866
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/d11f6eba-c95a-4f76-8686-a3cd81698c7d?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:41:07.5885708+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:42:43.854208+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"d11f6eba-c95a-4f76-8686-a3cd81698c7d\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '183'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:42:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14989,Microsoft.Compute/GetOperation30Min;29865
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/powerOff?skipShutdown=false&api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/fc0249ce-39da-4cc0-b2d0-526c9f0a1d1f?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:42:45 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/fc0249ce-39da-4cc0-b2d0-526c9f0a1d1f?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/UpdateVM3Min;235,Microsoft.Compute/UpdateVM30Min;1193
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1188'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/fc0249ce-39da-4cc0-b2d0-526c9f0a1d1f?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:42:45.6198569+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:42:58.4949863+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"fc0249ce-39da-4cc0-b2d0-526c9f0a1d1f\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:43:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14989,Microsoft.Compute/GetOperation30Min;29862
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"properties": {"osType": "Windows", "osState": "Generalized", "hyperVGeneration":
    +      "V1", "identifier": {"publisher": "myPublisherName", "offer": "myOfferName",
    +      "sku": "mySkuName"}}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '181'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"imagename\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/images\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"hyperVGeneration\": \"V1\",\r\
    +        \n    \"osType\": \"Windows\",\r\n    \"osState\": \"Generalized\",\r\n  \
    +        \  \"identifier\": {\r\n      \"publisher\": \"myPublisherName\",\r\n    \
    +        \  \"offer\": \"myOfferName\",\r\n      \"sku\": \"mySkuName\"\r\n    },\r\
    +        \n    \"provisioningState\": \"Updating\"\r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/7e52252f-cc21-46ba-9df3-782749e81990?api-version=2019-12-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '565'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:43:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1190'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/7e52252f-cc21-46ba-9df3-782749e81990?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:43:17.5230366+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:43:17.5542731+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"7e52252f-cc21-46ba-9df3-782749e81990\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:43:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"imagename\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries/images\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"hyperVGeneration\": \"V1\",\r\
    +        \n    \"osType\": \"Windows\",\r\n    \"osState\": \"Generalized\",\r\n  \
    +        \  \"identifier\": {\r\n      \"publisher\": \"myPublisherName\",\r\n    \
    +        \  \"offer\": \"myOfferName\",\r\n      \"sku\": \"mySkuName\"\r\n    },\r\
    +        \n    \"provisioningState\": \"Succeeded\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '566'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:43:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname/endGetAccess?api-version=2019-11-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/72212ab8-a6dc-4e41-821a-039e36312e4c?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:43:50 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/72212ab8-a6dc-4e41-821a-039e36312e4c?monitor=true&api-version=2019-11-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/HighCostDiskHydrate3Min;999,Microsoft.Compute/HighCostDiskHydrate30Min;7998
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1187'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/72212ab8-a6dc-4e41-821a-039e36312e4c?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:43:50.8369027+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:43:51.0556223+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"72212ab8-a6dc-4e41-821a-039e36312e4c\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:44:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49998,Microsoft.Compute/GetOperation30Min;399991
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/72212ab8-a6dc-4e41-821a-039e36312e4c?monitor=true&api-version=2019-11-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:44:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49997,Microsoft.Compute/GetOperation30Min;399990
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/redeploy?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/0f82f644-4a0d-4eae-a0bf-fd8c469e30fc?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:44:22 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/0f82f644-4a0d-4eae-a0bf-fd8c469e30fc?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/VMScaleSetActions3Min;239,Microsoft.Compute/VMScaleSetActions30Min;1194,Microsoft.Compute/VMScaleSetBatchedVMRequests5Min;1198,Microsoft.Compute/VmssQueuedVMOperations;4798
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1186'
    +      x-ms-request-charge:
    +      - '2'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/0f82f644-4a0d-4eae-a0bf-fd8c469e30fc?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:44:22.6667306+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"0f82f644-4a0d-4eae-a0bf-fd8c469e30fc\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:44:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14993,Microsoft.Compute/GetOperation30Min;29860
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/0f82f644-4a0d-4eae-a0bf-fd8c469e30fc?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:44:22.6667306+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:44:55.0417395+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"0f82f644-4a0d-4eae-a0bf-fd8c469e30fc\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:45:24 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14992,Microsoft.Compute/GetOperation30Min;29886
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/reapply?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/974a8732-371f-4bc1-be72-40493f049028?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:45:25 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/974a8732-371f-4bc1-be72-40493f049028?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/UpdateVM3Min;238,Microsoft.Compute/UpdateVM30Min;1192
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1185'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/974a8732-371f-4bc1-be72-40493f049028?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:45:25.1823555+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:45:25.2604799+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"974a8732-371f-4bc1-be72-40493f049028\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:45:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14992,Microsoft.Compute/GetOperation30Min;29884
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/redeploy?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/529016a2-5abb-46c2-8b35-cbf351733c50?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:45:56 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/529016a2-5abb-46c2-8b35-cbf351733c50?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/UpdateVM3Min;238,Microsoft.Compute/UpdateVM30Min;1191
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1184'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/529016a2-5abb-46c2-8b35-cbf351733c50?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:45:57.0730228+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"529016a2-5abb-46c2-8b35-cbf351733c50\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:46:28 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14992,Microsoft.Compute/GetOperation30Min;29882
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/529016a2-5abb-46c2-8b35-cbf351733c50?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:45:57.0730228+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:46:32.4325675+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"529016a2-5abb-46c2-8b35-cbf351733c50\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:46:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14989,Microsoft.Compute/GetOperation30Min;29879
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: 'b''{"properties": {"networkProfile": {"networkInterfaces": [{"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name",
    +      "properties": {"primary": true}}]}}}'''
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '274'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"vmnamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachines\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"vmId\": \"1b0aa70d-95b1-4e60-915a-cd42973c05d3\"\
    +        ,\r\n    \"hardwareProfile\": {\r\n      \"vmSize\": \"Standard_D2_v2\"\r\n\
    +        \    },\r\n    \"storageProfile\": {\r\n      \"imageReference\": {\r\n  \
    +        \      \"publisher\": \"MicrosoftWindowsServer\",\r\n        \"offer\": \"\
    +        WindowsServer\",\r\n        \"sku\": \"2016-Datacenter\",\r\n        \"version\"\
    +        : \"latest\",\r\n        \"exactVersion\": \"14393.3504.2002070914\"\r\n \
    +        \     },\r\n      \"osDisk\": {\r\n        \"osType\": \"Windows\",\r\n  \
    +        \      \"name\": \"myVMosdisk\",\r\n        \"createOption\": \"FromImage\"\
    +        ,\r\n        \"caching\": \"ReadWrite\",\r\n        \"managedDisk\": {\r\n\
    +        \          \"storageAccountType\": \"Standard_LRS\",\r\n          \"id\":\
    +        \ \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/disks/myVMosdisk\"\
    +        \r\n        },\r\n        \"diskSizeGB\": 127\r\n      },\r\n      \"dataDisks\"\
    +        : [\r\n        {\r\n          \"lun\": 0,\r\n          \"name\": \"vmnamexyz_disk2_8a611e9e97d6459b81fc7fb72dca7039\"\
    +        ,\r\n          \"createOption\": \"Empty\",\r\n          \"caching\": \"None\"\
    +        ,\r\n          \"managedDisk\": {\r\n            \"storageAccountType\": \"\
    +        Standard_LRS\",\r\n            \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/disks/vmnamexyz_disk2_8a611e9e97d6459b81fc7fb72dca7039\"\
    +        \r\n          },\r\n          \"diskSizeGB\": 1023,\r\n          \"toBeDetached\"\
    +        : false\r\n        },\r\n        {\r\n          \"lun\": 1,\r\n          \"\
    +        name\": \"vmnamexyz_disk3_8332cea32dc04f088ad4afac8d2e6e37\",\r\n        \
    +        \  \"createOption\": \"Empty\",\r\n          \"caching\": \"None\",\r\n  \
    +        \        \"managedDisk\": {\r\n            \"storageAccountType\": \"Standard_LRS\"\
    +        ,\r\n            \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/disks/vmnamexyz_disk3_8332cea32dc04f088ad4afac8d2e6e37\"\
    +        \r\n          },\r\n          \"diskSizeGB\": 1023,\r\n          \"toBeDetached\"\
    +        : false\r\n        }\r\n      ]\r\n    },\r\n    \"osProfile\": {\r\n    \
    +        \  \"computerName\": \"myVM\",\r\n      \"adminUsername\": \"testuser\",\r\
    +        \n      \"windowsConfiguration\": {\r\n        \"provisionVMAgent\": true,\r\
    +        \n        \"enableAutomaticUpdates\": true\r\n      },\r\n      \"secrets\"\
    +        : [],\r\n      \"allowExtensionOperations\": true,\r\n      \"requireGuestProvisionSignal\"\
    +        : true\r\n    },\r\n    \"networkProfile\": {\"networkInterfaces\":[{\"id\"\
    +        :\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name\"\
    +        ,\"properties\":{\"primary\":true}}]},\r\n    \"provisioningState\": \"Updating\"\
    +        \r\n  },\r\n  \"resources\": [\r\n    {\r\n      \"name\": \"Microsoft.Azure.Geneva.GenevaMonitoring\"\
    +        ,\r\n      \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/Microsoft.Azure.Geneva.GenevaMonitoring\"\
    +        ,\r\n      \"type\": \"Microsoft.Compute/virtualMachines/extensions\",\r\n\
    +        \      \"location\": \"eastus\",\r\n      \"properties\": {\r\n        \"\
    +        autoUpgradeMinorVersion\": true,\r\n        \"provisioningState\": \"Succeeded\"\
    +        ,\r\n        \"enableAutomaticUpgrade\": true,\r\n        \"publisher\": \"\
    +        Microsoft.Azure.Geneva\",\r\n        \"type\": \"GenevaMonitoring\",\r\n \
    +        \       \"typeHandlerVersion\": \"2.0\",\r\n        \"settings\": {}\r\n \
    +        \     }\r\n    }\r\n  ]\r\n}"
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/bdf2550a-4654-4545-a7cc-4f563e52c556?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '3610'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:47:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutVM3Min;239,Microsoft.Compute/PutVM30Min;1198
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1189'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/bdf2550a-4654-4545-a7cc-4f563e52c556?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:47:01.7608211+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:47:01.8701908+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"bdf2550a-4654-4545-a7cc-4f563e52c556\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:47:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14990,Microsoft.Compute/GetOperation30Min;29877
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"vmnamexyz\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/virtualMachines\",\r\n  \"location\"\
    +        : \"eastus\",\r\n  \"properties\": {\r\n    \"vmId\": \"1b0aa70d-95b1-4e60-915a-cd42973c05d3\"\
    +        ,\r\n    \"hardwareProfile\": {\r\n      \"vmSize\": \"Standard_D2_v2\"\r\n\
    +        \    },\r\n    \"storageProfile\": {\r\n      \"imageReference\": {\r\n  \
    +        \      \"publisher\": \"MicrosoftWindowsServer\",\r\n        \"offer\": \"\
    +        WindowsServer\",\r\n        \"sku\": \"2016-Datacenter\",\r\n        \"version\"\
    +        : \"latest\",\r\n        \"exactVersion\": \"14393.3504.2002070914\"\r\n \
    +        \     },\r\n      \"osDisk\": {\r\n        \"osType\": \"Windows\",\r\n  \
    +        \      \"name\": \"myVMosdisk\",\r\n        \"createOption\": \"FromImage\"\
    +        ,\r\n        \"caching\": \"ReadWrite\",\r\n        \"managedDisk\": {\r\n\
    +        \          \"storageAccountType\": \"Standard_LRS\",\r\n          \"id\":\
    +        \ \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/disks/myVMosdisk\"\
    +        \r\n        },\r\n        \"diskSizeGB\": 127\r\n      },\r\n      \"dataDisks\"\
    +        : [\r\n        {\r\n          \"lun\": 0,\r\n          \"name\": \"vmnamexyz_disk2_8a611e9e97d6459b81fc7fb72dca7039\"\
    +        ,\r\n          \"createOption\": \"Empty\",\r\n          \"caching\": \"None\"\
    +        ,\r\n          \"managedDisk\": {\r\n            \"storageAccountType\": \"\
    +        Standard_LRS\",\r\n            \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/disks/vmnamexyz_disk2_8a611e9e97d6459b81fc7fb72dca7039\"\
    +        \r\n          },\r\n          \"diskSizeGB\": 1023,\r\n          \"toBeDetached\"\
    +        : false\r\n        },\r\n        {\r\n          \"lun\": 1,\r\n          \"\
    +        name\": \"vmnamexyz_disk3_8332cea32dc04f088ad4afac8d2e6e37\",\r\n        \
    +        \  \"createOption\": \"Empty\",\r\n          \"caching\": \"None\",\r\n  \
    +        \        \"managedDisk\": {\r\n            \"storageAccountType\": \"Standard_LRS\"\
    +        ,\r\n            \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TEST_CLI_MGMT_COMPUTE_TEST_COMPUTEF5F00E12/providers/Microsoft.Compute/disks/vmnamexyz_disk3_8332cea32dc04f088ad4afac8d2e6e37\"\
    +        \r\n          },\r\n          \"diskSizeGB\": 1023,\r\n          \"toBeDetached\"\
    +        : false\r\n        }\r\n      ]\r\n    },\r\n    \"osProfile\": {\r\n    \
    +        \  \"computerName\": \"myVM\",\r\n      \"adminUsername\": \"testuser\",\r\
    +        \n      \"windowsConfiguration\": {\r\n        \"provisionVMAgent\": true,\r\
    +        \n        \"enableAutomaticUpdates\": true\r\n      },\r\n      \"secrets\"\
    +        : [],\r\n      \"allowExtensionOperations\": true,\r\n      \"requireGuestProvisionSignal\"\
    +        : true\r\n    },\r\n    \"networkProfile\": {\"networkInterfaces\":[{\"id\"\
    +        :\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Network/networkInterfaces/interface_name\"\
    +        ,\"properties\":{\"primary\":true}}]},\r\n    \"provisioningState\": \"Succeeded\"\
    +        \r\n  },\r\n  \"resources\": [\r\n    {\r\n      \"name\": \"Microsoft.Azure.Geneva.GenevaMonitoring\"\
    +        ,\r\n      \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/extensions/Microsoft.Azure.Geneva.GenevaMonitoring\"\
    +        ,\r\n      \"type\": \"Microsoft.Compute/virtualMachines/extensions\",\r\n\
    +        \      \"location\": \"eastus\",\r\n      \"properties\": {\r\n        \"\
    +        autoUpgradeMinorVersion\": true,\r\n        \"provisioningState\": \"Succeeded\"\
    +        ,\r\n        \"enableAutomaticUpgrade\": true,\r\n        \"publisher\": \"\
    +        Microsoft.Azure.Geneva\",\r\n        \"type\": \"GenevaMonitoring\",\r\n \
    +        \       \"typeHandlerVersion\": \"2.0\",\r\n        \"settings\": {}\r\n \
    +        \     }\r\n    }\r\n  ]\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '3611'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:47:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/LowCostGet3Min;3996,Microsoft.Compute/LowCostGet30Min;31993
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/generalize?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:47:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/UpdateVM3Min;237,Microsoft.Compute/UpdateVM30Min;1190
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1183'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"properties": {"description": "This is the gallery description."}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '67'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"galleryname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"properties\": {\r\n    \"description\": \"This is the gallery description.\"\
    +        ,\r\n    \"identifier\": {\r\n      \"uniqueName\": \"00000000-0000-0000-0000-000000000000-GALLERYNAME\"\
    +        \r\n    },\r\n    \"provisioningState\": \"Succeeded\"\r\n  }\r\n}"
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/ae9d6a49-0c70-4bc0-add3-6bc24042522b?api-version=2019-12-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '488'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:47:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1188'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/ae9d6a49-0c70-4bc0-add3-6bc24042522b?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:47:38.9098407+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:47:38.9566984+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"ae9d6a49-0c70-4bc0-add3-6bc24042522b\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:48:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"galleryname\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/galleries\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"properties\": {\r\n    \"description\": \"This is the gallery description.\"\
    +        ,\r\n    \"identifier\": {\r\n      \"uniqueName\": \"00000000-0000-0000-0000-000000000000-GALLERYNAME\"\
    +        \r\n    },\r\n    \"provisioningState\": \"Succeeded\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '488'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:48:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetGallery3Min;297,Microsoft.Compute/GetGallery30Min;1997
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"tags": {"department": "HR"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '30'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/images/imagename?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"imagename\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/images/imagename\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/images\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"tags\": {\r\n    \"department\": \"HR\"\r\n  },\r\n  \"properties\"\
    +        : {\r\n    \"storageProfile\": {\r\n      \"osDisk\": {\r\n        \"osType\"\
    +        : \"Linux\",\r\n        \"osState\": \"Generalized\",\r\n        \"diskSizeGB\"\
    +        : 200,\r\n        \"snapshot\": {\r\n          \"id\": \"subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        \r\n        },\r\n        \"caching\": \"None\",\r\n        \"storageAccountType\"\
    +        : \"Standard_LRS\"\r\n      },\r\n      \"dataDisks\": [],\r\n      \"zoneResilient\"\
    +        : false\r\n    },\r\n    \"provisioningState\": \"Updating\",\r\n    \"hyperVGeneration\"\
    +        : \"V1\"\r\n  }\r\n}"
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/f626604a-fe34-4bfc-9b5e-d65370030b85?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '889'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:48:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/CreateImages3Min;39,Microsoft.Compute/CreateImages30Min;199
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1187'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/f626604a-fe34-4bfc-9b5e-d65370030b85?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:48:21.1049838+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:48:26.2143705+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"f626604a-fe34-4bfc-9b5e-d65370030b85\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:48:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14991,Microsoft.Compute/GetOperation30Min;29875
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/images/imagename?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"name\": \"imagename\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/images/imagename\"\
    +        ,\r\n  \"type\": \"Microsoft.Compute/images\",\r\n  \"location\": \"eastus\"\
    +        ,\r\n  \"tags\": {\r\n    \"department\": \"HR\"\r\n  },\r\n  \"properties\"\
    +        : {\r\n    \"storageProfile\": {\r\n      \"osDisk\": {\r\n        \"osType\"\
    +        : \"Linux\",\r\n        \"osState\": \"Generalized\",\r\n        \"diskSizeGB\"\
    +        : 200,\r\n        \"snapshot\": {\r\n          \"id\": \"subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname\"\
    +        \r\n        },\r\n        \"caching\": \"None\",\r\n        \"storageAccountType\"\
    +        : \"Standard_LRS\"\r\n      },\r\n      \"dataDisks\": [],\r\n      \"zoneResilient\"\
    +        : false\r\n    },\r\n    \"provisioningState\": \"Succeeded\",\r\n    \"hyperVGeneration\"\
    +        : \"V1\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '890'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:48:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetImages3Min;358,Microsoft.Compute/GetImages30Min;1798
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz/deallocate?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/22bdf902-3921-4e27-af5e-0eebffa5b9f0?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:48:57 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/22bdf902-3921-4e27-af5e-0eebffa5b9f0?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/DeleteVM3Min;239,Microsoft.Compute/DeleteVM30Min;1199
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1182'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/22bdf902-3921-4e27-af5e-0eebffa5b9f0?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:48:57.7457496+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"22bdf902-3921-4e27-af5e-0eebffa5b9f0\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:49:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14992,Microsoft.Compute/GetOperation30Min;29873
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/22bdf902-3921-4e27-af5e-0eebffa5b9f0?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:48:57.7457496+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"22bdf902-3921-4e27-af5e-0eebffa5b9f0\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:49:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14993,Microsoft.Compute/GetOperation30Min;29872
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/22bdf902-3921-4e27-af5e-0eebffa5b9f0?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:48:57.7457496+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:49:48.6522537+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"22bdf902-3921-4e27-af5e-0eebffa5b9f0\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:50:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14991,Microsoft.Compute/GetOperation30Min;29897
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname/deallocate?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/2d908c03-0f16-428a-8d86-0e7920011454?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:50:12 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/2d908c03-0f16-428a-8d86-0e7920011454?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/DeleteVMScaleSet3Min;79,Microsoft.Compute/DeleteVMScaleSet30Min;397,Microsoft.Compute/VMScaleSetBatchedVMRequests5Min;1198,Microsoft.Compute/VmssQueuedVMOperations;4798
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1182'
    +      x-ms-request-charge:
    +      - '2'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/2d908c03-0f16-428a-8d86-0e7920011454?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:50:13.1836181+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"2d908c03-0f16-428a-8d86-0e7920011454\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:50:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14990,Microsoft.Compute/GetOperation30Min;29895
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/2d908c03-0f16-428a-8d86-0e7920011454?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:50:13.1836181+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:50:54.4494706+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"2d908c03-0f16-428a-8d86-0e7920011454\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:51:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14987,Microsoft.Compute/GetOperation30Min;29892
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachineScaleSets/virtualmachinescalesetname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/c8b807d5-c26e-4599-9d88-c4ed4463c1fe?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:51:14 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/c8b807d5-c26e-4599-9d88-c4ed4463c1fe?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/DeleteVMScaleSet3Min;78,Microsoft.Compute/DeleteVMScaleSet30Min;396,Microsoft.Compute/VMScaleSetBatchedVMRequests5Min;1196,Microsoft.Compute/VmssQueuedVMOperations;4798
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14997'
    +      x-ms-request-charge:
    +      - '2'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/c8b807d5-c26e-4599-9d88-c4ed4463c1fe?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:51:14.9339215+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"c8b807d5-c26e-4599-9d88-c4ed4463c1fe\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:51:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29891
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/c8b807d5-c26e-4599-9d88-c4ed4463c1fe?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:51:14.9339215+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:51:25.9807979+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"c8b807d5-c26e-4599-9d88-c4ed4463c1fe\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:51:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14986,Microsoft.Compute/GetOperation30Min;29889
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/virtualMachines/vmnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/05e04768-e4d9-4471-9372-fdba3278386b?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:51:36 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/05e04768-e4d9-4471-9372-fdba3278386b?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/DeleteVM3Min;239,Microsoft.Compute/DeleteVM30Min;1198
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14996'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/05e04768-e4d9-4471-9372-fdba3278386b?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:51:37.0433261+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:51:47.465322+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"05e04768-e4d9-4471-9372-fdba3278386b\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '183'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:51:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14985,Microsoft.Compute/GetOperation30Min;29888
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename/versions/1.0.0?api-version=2019-12-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/51cdaab6-af46-42c9-b1c8-eaa0b862ff7c?api-version=2019-12-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:51:52 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/51cdaab6-af46-42c9-b1c8-eaa0b862ff7c?monitor=true&api-version=2019-12-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/DeleteGalleryImageVersion3Min;149,Microsoft.Compute/DeleteGalleryImageVersion30Min;999
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14995'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/51cdaab6-af46-42c9-b1c8-eaa0b862ff7c?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:51:52.1910674+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"51cdaab6-af46-42c9-b1c8-eaa0b862ff7c\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:52:24 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/51cdaab6-af46-42c9-b1c8-eaa0b862ff7c?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:51:52.1910674+00:00\",\r\n  \"\
    +        status\": \"InProgress\",\r\n  \"name\": \"51cdaab6-af46-42c9-b1c8-eaa0b862ff7c\"\
    +        \r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '134'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:52:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/51cdaab6-af46-42c9-b1c8-eaa0b862ff7c?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:51:52.1910674+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:53:22.393928+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"51cdaab6-af46-42c9-b1c8-eaa0b862ff7c\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '183'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:53:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/applications/applicationname?api-version=2019-12-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:53:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14994'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname/endGetAccess?api-version=2019-11-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/c249d579-5d17-44b8-b338-1b9fa996ea0c?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:53:27 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/c249d579-5d17-44b8-b338-1b9fa996ea0c?monitor=true&api-version=2019-11-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/HighCostSnapshotCreateHydrate3Min;239,Microsoft.Compute/HighCostSnapshotCreateHydrate30Min;1918
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1181'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/c249d579-5d17-44b8-b338-1b9fa996ea0c?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:53:27.9804027+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:53:28.1210381+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"c249d579-5d17-44b8-b338-1b9fa996ea0c\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:54:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49996,Microsoft.Compute/GetOperation30Min;399984
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/c249d579-5d17-44b8-b338-1b9fa996ea0c?monitor=true&api-version=2019-11-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:54:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49995,Microsoft.Compute/GetOperation30Min;399983
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/snapshots/snapshotname?api-version=2019-11-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/7cbd2c5b-b739-4d83-b31b-3958202d1f89?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:54:09 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/7cbd2c5b-b739-4d83-b31b-3958202d1f89?monitor=true&api-version=2019-11-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/DeleteDisks3Min;996,Microsoft.Compute/DeleteDisks30Min;7996
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14993'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/7cbd2c5b-b739-4d83-b31b-3958202d1f89?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:54:10.3876094+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:54:10.5907197+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"7cbd2c5b-b739-4d83-b31b-3958202d1f89\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:54:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49993,Microsoft.Compute/GetOperation30Min;399981
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/proximityPlacementGroups/proximityplacementgroupname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:54:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutDeletePPG3Min;99,Microsoft.Compute/PutDeletePPG30Min;498
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14992'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz/hosts/hostname?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/c1d65864-7b32-4a38-b0cd-f3b9383d31e0?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:54:46 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/c1d65864-7b32-4a38-b0cd-f3b9383d31e0?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutDeleteDedicatedHost3Min;119,Microsoft.Compute/PutDeleteDedicatedHost30Min;598
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14991'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/c1d65864-7b32-4a38-b0cd-f3b9383d31e0?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:54:47.1224551+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:54:47.1849511+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"c1d65864-7b32-4a38-b0cd-f3b9383d31e0\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:55:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14998,Microsoft.Compute/GetOperation30Min;29913
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/hostGroups/hostgroupnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:55:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/PutDeleteDedicatedHost3Min;118,Microsoft.Compute/PutDeleteDedicatedHost30Min;597
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14990'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname/images/imagename?api-version=2019-12-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/be867d90-c4b5-4ae8-8198-e431b762cbc8?api-version=2019-12-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:55:31 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/be867d90-c4b5-4ae8-8198-e431b762cbc8?monitor=true&api-version=2019-12-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14989'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/be867d90-c4b5-4ae8-8198-e431b762cbc8?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:55:32.0964428+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:55:32.3463978+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"be867d90-c4b5-4ae8-8198-e431b762cbc8\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:56:58 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/images/imagename?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncnotification:
    +      - Enabled
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/f61e32e7-20f0-4308-a336-64ae78ea7db9?api-version=2019-07-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:56:59 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/f61e32e7-20f0-4308-a336-64ae78ea7db9?monitor=true&api-version=2019-07-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/DeleteImages3Min;119,Microsoft.Compute/DeleteImages30Min;599
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14988'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/operations/f61e32e7-20f0-4308-a336-64ae78ea7db9?api-version=2019-07-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:56:59.6378355+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:57:04.7316645+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"f61e32e7-20f0-4308-a336-64ae78ea7db9\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:57:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;14997,Microsoft.Compute/GetOperation30Min;29911
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/disks/diskname?api-version=2019-11-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/93cc3f24-1cc5-4c32-9fba-4835e2e1aafb?api-version=2019-11-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:57:35 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/93cc3f24-1cc5-4c32-9fba-4835e2e1aafb?monitor=true&api-version=2019-11-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/DeleteDisks3Min;999,Microsoft.Compute/DeleteDisks30Min;7995
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14987'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/93cc3f24-1cc5-4c32-9fba-4835e2e1aafb?api-version=2019-11-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:57:35.6856806+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:57:35.8263237+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"93cc3f24-1cc5-4c32-9fba-4835e2e1aafb\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:58:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/GetOperation3Min;49996,Microsoft.Compute/GetOperation30Min;399977
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/availabilitySets/availabilitysetnamexyz?api-version=2019-07-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:58:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/DeleteVM3Min;239,Microsoft.Compute/DeleteVM30Min;1197
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14986'
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_compute_test_computef5f00e12/providers/Microsoft.Compute/galleries/galleryname?api-version=2019-12-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/541b6796-0673-4c0a-a139-552e407ed638?api-version=2019-12-01
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 12 Mar 2020 08:58:11 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/541b6796-0673-4c0a-a139-552e407ed638?monitor=true&api-version=2019-12-01
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-resource:
    +      - Microsoft.Compute/DeleteGallery3Min;49,Microsoft.Compute/DeleteGallery30Min;299
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14985'
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-compute/11.0.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/capsOperations/541b6796-0673-4c0a-a139-552e407ed638?api-version=2019-12-01
    +  response:
    +    body:
    +      string: "{\r\n  \"startTime\": \"2020-03-12T08:58:12.2359351+00:00\",\r\n  \"\
    +        endTime\": \"2020-03-12T08:58:12.4703314+00:00\",\r\n  \"status\": \"Succeeded\"\
    +        ,\r\n  \"name\": \"541b6796-0673-4c0a-a139-552e407ed638\"\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '184'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 12 Mar 2020 08:59:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-HTTPAPI/2.0
    +      - Microsoft-HTTPAPI/2.0
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +    status:
    +      code: 200
    +      message: OK
    +version: 1
    diff --git a/sdk/compute/azure-mgmt-compute/tests/test_cli_mgmt_compute.py b/sdk/compute/azure-mgmt-compute/tests/test_cli_mgmt_compute.py
    new file mode 100644
    index 000000000000..87031b00616b
    --- /dev/null
    +++ b/sdk/compute/azure-mgmt-compute/tests/test_cli_mgmt_compute.py
    @@ -0,0 +1,3332 @@
    +# coding: utf-8
    +
    +#-------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#--------------------------------------------------------------------------
    +
    +
    +# TEST SCENARIO COVERAGE
    +# ----------------------
    +# Methods Total   : 174
    +# Methods Covered : 84
    +# Examples Total  : 132
    +# Examples Tested : 132
    +# Coverage %      : 48.275862068965516
    +# ----------------------
    +
    +# covered ops:
    +#   snapshots: 8/8
    +#   disks: 8/8
    +#   disk_encryption: 2/6
    +#   galleries: 6/6
    +#   gallery_applications: 5/5
    +#   gallery_application_versions: 0/5
    +#   gallery_images: 5/5
    +#   gallery_image_versions: 5/5
    +#   images: 6/6
    +#   dedicated_hosts: 5/5
    +#   dedicated_host_groups: 6/6
    +#   virtual_machines: 17/21
    +#   virtual_machine_size: 1/1
    +#   virtual_machine_run_commands: 2/2
    +#   virtual_machine_images: 5/5
    +#   virtual_machine_extensions: 5/5
    +#   virtual_machine_extension_images: 3/3
    +#   virtual_machine_scale_sets: 13/21
    +#   virtual_machine_scale_set_vms: 1/14
    +#   virtual_machine_scale_set_vm_extensions: 0/5
    +#   virtual_machine_scale_set_rolling_upgrades: 2/4
    +#   virtual_machine_scale_set_extensions: 5/5
    +#   usage: 1/1
    +#   availability_sets: 7/7
    +#   log_analytics: 0/2
    +#   operations: 1/1
    +#   proximity_placement_groups: 6/6
    +#   resource_skus: 1/1
    +
    +
    +# import json
    +# import urllib3
    +import unittest
    +
    +import azure.mgmt.compute
    +import azure.mgmt.network
    +# import azure.mgmt.keyvault
    +# from azure.keyvault.keys import KeyClient
    +from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer
    +
    +AZURE_LOCATION = 'eastus'
    +
    +class MgmtComputeTest(AzureMgmtTestCase):
    +
    +    def setUp(self):
    +        super(MgmtComputeTest, self).setUp()
    +        self.mgmt_client = self.create_mgmt_client(
    +            azure.mgmt.compute.ComputeManagementClient
    +        )
    +        # self.keyvault_client = self.create_mgmt_client(
    +        #     azure.mgmt.keyvault.KeyVaultManagementClient
    +        # )
    +        self.network_client = self.create_mgmt_client(
    +            azure.mgmt.network.NetworkManagementClient
    +        )
    +
    +    def create_virtual_network(self, group_name, location, network_name, subnet_name):
    +      
    +      azure_operation_poller = self.network_client.virtual_networks.create_or_update(
    +          group_name,
    +          network_name,
    +          {
    +              'location': location,
    +              'address_space': {
    +                  'address_prefixes': ['10.0.0.0/16']
    +              }
    +          },
    +      )
    +      result_create = azure_operation_poller.result()
    +
    +      async_subnet_creation = self.network_client.subnets.create_or_update(
    +          group_name,
    +          network_name,
    +          subnet_name,
    +          {'address_prefix': '10.0.0.0/24'}
    +      )
    +      subnet_info = async_subnet_creation.result()
    +      
    +      return subnet_info
    +
    +    def create_network_interface(self, group_name, location, nic_name, subnet):
    +
    +        async_nic_creation = self.network_client.network_interfaces.create_or_update(
    +            group_name,
    +            nic_name,
    +            {
    +                'location': location,
    +                'ip_configurations': [{
    +                    'name': 'MyIpConfig',
    +                    'subnet': {
    +                        'id': subnet.id
    +                    }
    +                }]
    +            }
    +        )
    +        nic_info = async_nic_creation.result()
    +
    +        return nic_info.id
    +
    +    # def create_key(self, group_name, location, key_vault, tenant_id):
    +    #     result = self.keyvault_client.vaults.create_or_update(
    +    #         group_name,
    +    #         key_vault,
    +    #         {
    +    #             'location': location,
    +    #             'properties': {
    +    #                 'sku': {
    +    #                     'name': 'standard'
    +    #                 },
    +    #                 # Fake random GUID
    +    #                 'tenant_id': tenant_id,
    +    #                 'access_policies': [],
    +    #                 # 'create_mode': 'recover',
    +    #                 'enabled_for_disk_encryption': True,
    +    #             },
    +    #         }
    +    #     ).result()
    +    #     vault_url = result.properties.vault_uri
    +    #     vault_id = result.id
    +
    +    #     credentials = self.settings.get_credentials()
    +    #     key_client = KeyClient(vault_url, credentials)
    +
    +    #     # [START create_key]
    +    #     from dateutil import parser as date_parse
    +    #     expires_on = date_parse.parse("2050-02-02T08:00:00.000Z")
    +
    +    #     key = key_client.create_key(
    +    #       "testkey",
    +    #       "RSA",
    +    #       size=2048,
    +    #       key_ops=["encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey"],
    +    #       expires_on=expires_on
    +    #     )
    +    #     return (vault_id, vault_url, key.name)
    +
    +
    +    @ResourceGroupPreparer(location=AZURE_LOCATION)
    +    def test_compute(self, resource_group):
    +
    +        NETWORK_NAME = "networknamexyz"
    +        SUBNET_NAME = "subnetxyz"
    +        INTERFACE_NAME = "interface_name"
    +        KEY_VAULT = "keyvaultxxyyzz"
    +        KEY_NAME = "keynamexxyyzz"
    +
    +        SERVICE_NAME = "myapimrndxyz"
    +        SUBSCRIPTION_ID = self.settings.SUBSCRIPTION_ID
    +        TENANT_ID = self.settings.TENANT_ID
    +        RESOURCE_GROUP = resource_group.name
    +        STORAGE_ACCOUNT = None
    +        DISK_NAME = "diskname"
    +        GALLERY_NAME = "galleryname"
    +        APPLICATION_NAME = "applicationname"
    +        VERSION_NAME = "1.0.0"
    +        IMAGE_NAME = "imagename"
    +        HOST_NAME = "hostname"
    +        HOST_GROUP_NAME = "hostgroupnamexyz"
    +        DISK_ENCRYPTION_SET_NAME = "diskencryptionsetname"
    +        SNAPSHOT_NAME = "snapshotname"
    +        VIRTUAL_MACHINE_NAME = "vmnamexyz"
    +        AVAILABILITY_SET_NAME = "availabilitysetnamexyz"
    +        PROXIMITY_PLACEMENT_GROUP_NAME = "proximityplacementgroupname"
    +        VIRTUAL_MACHINE_SCALE_SET_NAME = "virtualmachinescalesetname"
    +        VIRTUAL_MACHINE_EXTENSION_NAME = "virtualmachineextensionname"
    +        VMSS_EXTENSION_NAME = "vmssextensionname"
    +        INSTANCE_ID = "1"
    +        INSTANCE_IDS = ["1"]
    +        LOG_ANALYTIC_NAME = "loganalytic"
    +
    +
    +        SUBNET = self.create_virtual_network(RESOURCE_GROUP, AZURE_LOCATION, NETWORK_NAME, SUBNET_NAME)
    +        NIC_ID = self.create_network_interface(RESOURCE_GROUP, AZURE_LOCATION, INTERFACE_NAME, SUBNET)
    +        # VAULT_ID, VAULT_URL, KEY_NAME = self.create_key(RESOURCE_GROUP, AZURE_LOCATION, KEY_VAULT, TENANT_ID)
    +
    +        # Create an empty managed disk.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "creation_data": {
    +            "create_option": "Empty"
    +          },
    +          "disk_size_gb": "200"
    +        }
    +        result = self.mgmt_client.disks.create_or_update(resource_group.name, DISK_NAME, BODY)
    +        result = result.result()
    +
    +        # TODO: NEED STORAGE
    +        # # Create a managed disk by importing an unmanaged blob from a different subscription.[put]
    +        # DISK_NAME_2 = DISK_NAME + "2"
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "properties": {
    +        #     "creation_data": {
    +        #       "create_option": "Import",
    +        #       "storage_account_id": "subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/" + STORAGE_ACCOUNT,
    +        #       "source_uri": "https://mystorageaccount.blob.core.windows.net/osimages/osimage.vhd"
    +        #     }
    +        #   }
    +        # }
    +        # result = self.mgmt_client.disks.create_or_update(resource_group.name, DISK_NAME_2, BODY)
    +        # result = result.result()
    +
    +        # TODO: NEED SNAPSHOT
    +        # # Create a managed disk by copying a snapshot.[put]
    +        # DISK_NAME_3 = DISK_NAME + "3"
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "properties": {
    +        #     "creation_data": {
    +        #       "create_option": "Copy",
    +        #       "source_resource_id": "subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/myResourceGroup/providers/Microsoft.Compute/snapshots/" + SNAP_SHOT
    +        #     }
    +        #   }
    +        # }
    +        # result = self.mgmt_client.disks.create_or_update(resource_group.name, DISK_NAME_3, BODY)
    +        # result = result.result()
    +
    +        # TODO: UNUSE NOW
    +        # # Create a managed disk by importing an unmanaged blob from the same subscription.[put]
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "properties": {
    +        #     "creation_data": {
    +        #       "create_option": "Import",
    +        #       "source_uri": "https://mystorageaccount.blob.core.windows.net/osimages/osimage.vhd"
    +        #     }
    +        #   }
    +        # }
    +        # result = self.mgmt_client.disks.create_or_update(resource_group.name, DISK_NAME, BODY)
    +        # result = result.result()
    +
    +        # Create a managed disk from an existing managed disk in the same or different subscription.[put]
    +        DISK_NAME_4 = DISK_NAME + "4"
    +        BODY = {
    +          "location": "eastus",
    +          "creation_data": {
    +            "create_option": "Copy",
    +            "source_resource_id": "subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/disks/" + DISK_NAME
    +          }
    +        }
    +        result = self.mgmt_client.disks.create_or_update(resource_group.name, DISK_NAME_4, BODY)
    +        result = result.result()
    +
    +        # TODO: NEED A IMAGE
    +        # # Create a managed disk from a platform image.[put]
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "properties": {
    +        #     "os_type": "Windows",
    +        #     "creation_data": {
    +        #       "create_option": "FromImage",
    +        #       "image_reference": {
    +        #         "id": "/Subscriptions/{subscriptionId}/Providers/Microsoft.Compute/Locations/uswest/Publishers/Microsoft/ArtifactTypes/VMImage/Offers/{offer}"
    +        #       }
    +        #     }
    +        #   }
    +        # }
    +        # result = self.mgmt_client.disks.create_or_update(resource_group.name, DISK_NAME, BODY)
    +        # result = result.result()
    +
    +        # Create a managed upload disk.[put]
    +        DISK_NAME_5 = DISK_NAME + '5'
    +        BODY = {
    +          "location": "eastus",
    +          "creation_data": {
    +            "create_option": "Upload",
    +            "upload_size_bytes": "10737418752"
    +          }
    +        }
    +        result = self.mgmt_client.disks.create_or_update(resource_group.name, DISK_NAME_5, BODY)
    +        result = result.result()
    +
    +        # TODO: New example not in swagger. (doing)
    +        # Create a snapshot by copying a disk.
    +        BODY = {
    +          "location": "eastus",
    +          "creation_data": {
    +            "create_option": "Copy",
    +            "source_uri": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/disks/" + DISK_NAME
    +          }
    +        }
    +        result = self.mgmt_client.snapshots.create_or_update(resource_group.name, SNAPSHOT_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a virtual machine image from a snapshot.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "storage_profile": {
    +            "os_disk": {
    +              "os_type": "Linux",
    +              "snapshot": {
    +                "id": "subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/snapshots/" + SNAPSHOT_NAME
    +              },
    +              "os_state": "Generalized"
    +            },
    +            "zone_resilient": False
    +          },
    +          "hyper_vgeneration": "V1"  # TODO: required
    +        }
    +        result = self.mgmt_client.images.create_or_update(resource_group.name, IMAGE_NAME, BODY)
    +        result = result.result()
    +
    +        """
    +        # Create a virtual machine image from a managed disk with DiskEncryptionSet resource.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "storage_profile": {
    +              "os_disk": {
    +                "os_type": "Linux",
    +                "managed_disk": {
    +                  "id": "subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myManagedDisk"
    +                },
    +                "disk_encryption_set": {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSets/" + DISK_ENCRYPTION_SET_NAME + ""
    +                },
    +                "os_state": "Generalized"
    +              }
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.images.create_or_update(resource_group.name, IMAGE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a virtual machine image from an existing virtual machine.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "source_virtual_machine": {
    +              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/virtualMachines/" + VIRTUAL_MACHINE_NAME + ""
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.images.create_or_update(resource_group.name, IMAGE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a virtual machine image that includes a data disk from a blob.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "storage_profile": {
    +              "os_disk": {
    +                "os_type": "Linux",
    +                "blob_uri": "https://mystorageaccount.blob.core.windows.net/osimages/osimage.vhd",
    +                "os_state": "Generalized"
    +              },
    +              "data_disks": [
    +                {
    +                  "lun": "1",
    +                  "blob_uri": "https://mystorageaccount.blob.core.windows.net/dataimages/dataimage.vhd"
    +                }
    +              ],
    +              "zone_resilient": False
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.images.create_or_update(resource_group.name, IMAGE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a virtual machine image that includes a data disk from a snapshot.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "storage_profile": {
    +              "os_disk": {
    +                "os_type": "Linux",
    +                "snapshot": {
    +                  "id": "subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/snapshots/mySnapshot"
    +                },
    +                "os_state": "Generalized"
    +              },
    +              "data_disks": [
    +                {
    +                  "lun": "1",
    +                  "snapshot": {
    +                    "id": "subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/snapshots/mySnapshot2"
    +                  }
    +                }
    +              ],
    +              "zone_resilient": True
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.images.create_or_update(resource_group.name, IMAGE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a virtual machine image that includes a data disk from a managed disk.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "storage_profile": {
    +              "os_disk": {
    +                "os_type": "Linux",
    +                "managed_disk": {
    +                  "id": "subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myManagedDisk"
    +                },
    +                "os_state": "Generalized"
    +              },
    +              "data_disks": [
    +                {
    +                  "lun": "1",
    +                  "managed_disk": {
    +                    "id": "subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myManagedDisk2"
    +                  }
    +                }
    +              ],
    +              "zone_resilient": False
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.images.create_or_update(resource_group.name, IMAGE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a virtual machine image from a blob with DiskEncryptionSet resource.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "storage_profile": {
    +              "os_disk": {
    +                "os_type": "Linux",
    +                "blob_uri": "https://mystorageaccount.blob.core.windows.net/osimages/osimage.vhd",
    +                "disk_encryption_set": {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSets/" + DISK_ENCRYPTION_SET_NAME + ""
    +                },
    +                "os_state": "Generalized"
    +              }
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.images.create_or_update(resource_group.name, IMAGE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a virtual machine image from a managed disk.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "storage_profile": {
    +              "os_disk": {
    +                "os_type": "Linux",
    +                "managed_disk": {
    +                  "id": "subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myManagedDisk"
    +                },
    +                "os_state": "Generalized"
    +              },
    +              "zone_resilient": True
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.images.create_or_update(resource_group.name, IMAGE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a virtual machine image from a snapshot with DiskEncryptionSet resource.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "storage_profile": {
    +              "os_disk": {
    +                "os_type": "Linux",
    +                "snapshot": {
    +                  "id": "subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/snapshots/mySnapshot"
    +                },
    +                "disk_encryption_set": {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSets/" + DISK_ENCRYPTION_SET_NAME + ""
    +                },
    +                "os_state": "Generalized"
    +              }
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.images.create_or_update(resource_group.name, IMAGE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a virtual machine image from a blob.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "storage_profile": {
    +              "os_disk": {
    +                "os_type": "Linux",
    +                "blob_uri": "https://mystorageaccount.blob.core.windows.net/osimages/osimage.vhd",
    +                "os_state": "Generalized"
    +              },
    +              "zone_resilient": True
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.images.create_or_update(resource_group.name, IMAGE_NAME, BODY)
    +        result = result.result()
    +        """
    +
    +        # Create or update a simple gallery.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "description": "This is the gallery description."
    +        }
    +        result = self.mgmt_client.galleries.create_or_update(resource_group.name, GALLERY_NAME, BODY)
    +        result = result.result()
    +
    +        # TODO: NNED BLOB
    +        # # Create a snapshot by importing an unmanaged blob from the same subscription.[put]
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "properties": {
    +        #     "creation_data": {
    +        #       "create_option": "Import",
    +        #       "source_uri": "https://mystorageaccount.blob.core.windows.net/osimages/osimage.vhd"
    +        #     }
    +        #   }
    +        # }
    +        # result = self.mgmt_client.snapshots.create_or_update(resource_group.name, SNAPSHOT_NAME, BODY)
    +        # result = result.result()
    +
    +        # TODO: TWO SUBCRIPTION
    +        # # Create a snapshot by importing an unmanaged blob from a different subscription.[put]
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "properties": {
    +        #     "creation_data": {
    +        #       "create_option": "Import",
    +        #       "storage_account_id": "subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myStorageAccount",
    +        #       "source_uri": "https://mystorageaccount.blob.core.windows.net/osimages/osimage.vhd"
    +        #     }
    +        #   }
    +        # }
    +        # result = self.mgmt_client.snapshots.create_or_update(resource_group.name, SNAPSHOT_NAME, BODY)
    +        # result = result.result()
    +
    +        # TODO: NEED ANOTHER SNAPSHOT
    +        # # Create a snapshot from an existing snapshot in the same or a different subscription.[put]
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "properties": {
    +        #     "creation_data": {
    +        #       "create_option": "Copy",
    +        #       "source_resource_id": "subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/snapshots/mySnapshot1"
    +        #     }
    +        #   }
    +        # }
    +        # result = self.mgmt_client.snapshots.create_or_update(resource_group.name, SNAPSHOT_NAME, BODY)
    +        # result = result.result()
    +
    +        # Create or update a dedicated host group.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "tags": {
    +            "department": "finance"
    +          },
    +          "zones": [
    +            "1"
    +          ],
    +          "platform_fault_domain_count": "3"
    +        }
    +        result = self.mgmt_client.dedicated_host_groups.create_or_update(resource_group.name, HOST_GROUP_NAME, BODY)
    +
    +        """
    +        # Create a platform-image vm with unmanaged os and data disks.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "hardware_profile": {
    +              "vm_size": "Standard_D2_v2"
    +            },
    +            "storage_profile": {
    +              "image_reference": {
    +                "sku": "2016-Datacenter",
    +                "publisher": "MicrosoftWindowsServer",
    +                "version": "latest",
    +                "offer": "WindowsServer"
    +              },
    +              "os_disk": {
    +                "caching": "ReadWrite",
    +                "vhd": {
    +                  "uri": "http://{existing-storage-account-name}.blob.core.windows.net/{existing-container-name}/myDisk.vhd"
    +                },
    +                "create_option": "FromImage",
    +                "name": "myVMosdisk"
    +              },
    +              "data_disks": [
    +                {
    +                  "disk_size_gb": "1023",
    +                  "create_option": "Empty",
    +                  "lun": "0",
    +                  "vhd": {
    +                    "uri": "http://{existing-storage-account-name}.blob.core.windows.net/{existing-container-name}/myDisk0.vhd"
    +                  }
    +                },
    +                {
    +                  "disk_size_gb": "1023",
    +                  "create_option": "Empty",
    +                  "lun": "1",
    +                  "vhd": {
    +                    "uri": "http://{existing-storage-account-name}.blob.core.windows.net/{existing-container-name}/myDisk1.vhd"
    +                  }
    +                }
    +              ]
    +            },
    +            "os_profile": {
    +              "admin_username": "{your-username}",
    +              "computer_name": "myVM",
    +              "admin_password": "{your-password}"
    +            },
    +            "network_profile": {
    +              "network_interfaces": [
    +                {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NETWORK_INTERFACE_NAME + "",
    +                  "properties": {
    +                    "primary": True
    +                  }
    +                }
    +              ]
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +        """
    +
    +        """
    +        # Create a vm from a custom image.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "hardware_profile": {
    +            "vm_size": "Standard_D1_v2"
    +          },
    +          "storage_profile": {
    +            "image_reference": {
    +              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/images/" + IMAGE_NAME + ""
    +            },
    +            "os_disk": {
    +              "caching": "ReadWrite",
    +              "managed_disk": {
    +                "storage_account_type": "Standard_LRS"
    +              },
    +              "name": "myVMosdisk",
    +              "create_option": "FromImage"
    +            }
    +          },
    +          "os_profile": {
    +            "admin_username": "testuser",
    +            "computer_name": "myVM",
    +            "admin_password": "Aa!1()_="
    +          },
    +          "network_profile": {
    +            "network_interfaces": [
    +              {
    +                # "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NETWORK_INTERFACE_NAME + "",
    +                "id": NIC_ID,
    +                "properties": {
    +                  "primary": True
    +                }
    +              }
    +            ]
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +        """
    +
    +        # Create a vm with empty data disks.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "hardware_profile": {
    +            "vm_size": "Standard_D2_v2"
    +          },
    +          "storage_profile": {
    +            "image_reference": {
    +              "sku": "2016-Datacenter",
    +              "publisher": "MicrosoftWindowsServer",
    +              "version": "latest",
    +              "offer": "WindowsServer"
    +            },
    +            "os_disk": {
    +              "caching": "ReadWrite",
    +              "managed_disk": {
    +                "storage_account_type": "Standard_LRS"
    +              },
    +              "name": "myVMosdisk",
    +              "create_option": "FromImage"
    +            },
    +            "data_disks": [
    +              {
    +                "disk_size_gb": "1023",
    +                "create_option": "Empty",
    +                "lun": "0"
    +              },
    +              {
    +                "disk_size_gb": "1023",
    +                "create_option": "Empty",
    +                "lun": "1"
    +              }
    +            ]
    +          },
    +          "os_profile": {
    +            "admin_username": "testuser",
    +            "computer_name": "myVM",
    +            "admin_password": "Aa1!zyx_",
    +            "windows_configuration": {
    +              "enable_automatic_updates": True  # need automatic update for reimage
    +            }
    +          },
    +          "network_profile": {
    +            "network_interfaces": [
    +              {
    +                # "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NIC_ID + "",
    +                "id": NIC_ID,
    +                "properties": {
    +                  "primary": True
    +                }
    +              }
    +            ]
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +
    +        """
    +        # Create a custom-image vm from an unmanaged generalized os image.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "hardware_profile": {
    +              "vm_size": "Standard_D1_v2"
    +            },
    +            "storage_profile": {
    +              "os_disk": {
    +                "name": "myVMosdisk",
    +                "image": {
    +                  "uri": "http://{existing-storage-account-name}.blob.core.windows.net/{existing-container-name}/{existing-generalized-os-image-blob-name}.vhd"
    +                },
    +                "os_type": "Windows",
    +                "create_option": "FromImage",
    +                "caching": "ReadWrite",
    +                "vhd": {
    +                  "uri": "http://{existing-storage-account-name}.blob.core.windows.net/{existing-container-name}/myDisk.vhd"
    +                }
    +              }
    +            },
    +            "os_profile": {
    +              "admin_username": "{your-username}",
    +              "computer_name": "myVM",
    +              "admin_password": "{your-password}"
    +            },
    +            "network_profile": {
    +              "network_interfaces": [
    +                {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NETWORK_INTERFACE_NAME + "",
    +                  "properties": {
    +                    "primary": True
    +                  }
    +                }
    +              ]
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a vm in an availability set.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "hardware_profile": {
    +              "vm_size": "Standard_D1_v2"
    +            },
    +            "storage_profile": {
    +              "image_reference": {
    +                "sku": "2016-Datacenter",
    +                "publisher": "MicrosoftWindowsServer",
    +                "version": "latest",
    +                "offer": "WindowsServer"
    +              },
    +              "os_disk": {
    +                "caching": "ReadWrite",
    +                "managed_disk": {
    +                  "storage_account_type": "Standard_LRS"
    +                },
    +                "name": "myVMosdisk",
    +                "create_option": "FromImage"
    +              }
    +            },
    +            "network_profile": {
    +              "network_interfaces": [
    +                {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NETWORK_INTERFACE_NAME + "",
    +                  "properties": {
    +                    "primary": True
    +                  }
    +                }
    +              ]
    +            },
    +            "os_profile": {
    +              "admin_username": "{your-username}",
    +              "computer_name": "myVM",
    +              "admin_password": "{your-password}"
    +            },
    +            "availability_set": {
    +              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/availabilitySets/" + AVAILABILITY_SET_NAME + ""
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a vm with premium storage.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "hardware_profile": {
    +              "vm_size": "Standard_D1_v2"
    +            },
    +            "storage_profile": {
    +              "image_reference": {
    +                "sku": "2016-Datacenter",
    +                "publisher": "MicrosoftWindowsServer",
    +                "version": "latest",
    +                "offer": "WindowsServer"
    +              },
    +              "os_disk": {
    +                "caching": "ReadWrite",
    +                "managed_disk": {
    +                  "storage_account_type": "Premium_LRS"
    +                },
    +                "name": "myVMosdisk",
    +                "create_option": "FromImage"
    +              }
    +            },
    +            "os_profile": {
    +              "admin_username": "{your-username}",
    +              "computer_name": "myVM",
    +              "admin_password": "{your-password}"
    +            },
    +            "network_profile": {
    +              "network_interfaces": [
    +                {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NETWORK_INTERFACE_NAME + "",
    +                  "properties": {
    +                    "primary": True
    +                  }
    +                }
    +              ]
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a vm with ssh authentication.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "hardware_profile": {
    +              "vm_size": "Standard_D1_v2"
    +            },
    +            "storage_profile": {
    +              "image_reference": {
    +                "sku": "{image_sku}",
    +                "publisher": "{image_publisher}",
    +                "version": "latest",
    +                "offer": "{image_offer}"
    +              },
    +              "os_disk": {
    +                "caching": "ReadWrite",
    +                "managed_disk": {
    +                  "storage_account_type": "Standard_LRS"
    +                },
    +                "name": "myVMosdisk",
    +                "create_option": "FromImage"
    +              }
    +            },
    +            "os_profile": {
    +              "admin_username": "{your-username}",
    +              "computer_name": "myVM",
    +              "linux_configuration": {
    +                "ssh": {
    +                  "public_keys": [
    +                    {
    +                      "path": "/home/{your-username}/.ssh/authorized_keys",
    +                      "key_data": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCeClRAk2ipUs/l5voIsDC5q9RI+YSRd1Bvd/O+axgY4WiBzG+4FwJWZm/mLLe5DoOdHQwmU2FrKXZSW4w2sYE70KeWnrFViCOX5MTVvJgPE8ClugNl8RWth/tU849DvM9sT7vFgfVSHcAS2yDRyDlueii+8nF2ym8XWAPltFVCyLHRsyBp5YPqK8JFYIa1eybKsY3hEAxRCA+/7bq8et+Gj3coOsuRmrehav7rE6N12Pb80I6ofa6SM5XNYq4Xk0iYNx7R3kdz0Jj9XgZYWjAHjJmT0gTRoOnt6upOuxK7xI/ykWrllgpXrCPu3Ymz+c+ujaqcxDopnAl2lmf69/J1"
    +                    }
    +                  ]
    +                },
    +                "disable_password_authentication": True
    +              }
    +            },
    +            "network_profile": {
    +              "network_interfaces": [
    +                {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NETWORK_INTERFACE_NAME + "",
    +                  "properties": {
    +                    "primary": True
    +                  }
    +                }
    +              ]
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a vm with password authentication.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "hardware_profile": {
    +              "vm_size": "Standard_D1_v2"
    +            },
    +            "storage_profile": {
    +              "image_reference": {
    +                "sku": "2016-Datacenter",
    +                "publisher": "MicrosoftWindowsServer",
    +                "version": "latest",
    +                "offer": "WindowsServer"
    +              },
    +              "os_disk": {
    +                "caching": "ReadWrite",
    +                "managed_disk": {
    +                  "storage_account_type": "Standard_LRS"
    +                },
    +                "name": "myVMosdisk",
    +                "create_option": "FromImage"
    +              }
    +            },
    +            "os_profile": {
    +              "admin_username": "{your-username}",
    +              "computer_name": "myVM",
    +              "admin_password": "{your-password}"
    +            },
    +            "network_profile": {
    +              "network_interfaces": [
    +                {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NETWORK_INTERFACE_NAME + "",
    +                  "properties": {
    +                    "primary": True
    +                  }
    +                }
    +              ]
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a vm with ephemeral os disk.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "plan": {
    +            "publisher": "microsoft-ads",
    +            "product": "windows-data-science-vm",
    +            "name": "windows2016"
    +          },
    +          "properties": {
    +            "hardware_profile": {
    +              "vm_size": "Standard_DS1_v2"
    +            },
    +            "storage_profile": {
    +              "image_reference": {
    +                "sku": "windows2016",
    +                "publisher": "microsoft-ads",
    +                "version": "latest",
    +                "offer": "windows-data-science-vm"
    +              },
    +              "os_disk": {
    +                "caching": "ReadOnly",
    +                "diff_disk_settings": {
    +                  "option": "Local"
    +                },
    +                "managed_disk": {
    +                  "storage_account_type": "Standard_LRS"
    +                },
    +                "create_option": "FromImage",
    +                "name": "myVMosdisk"
    +              }
    +            },
    +            "os_profile": {
    +              "admin_username": "{your-username}",
    +              "computer_name": "myVM",
    +              "admin_password": "{your-password}"
    +            },
    +            "network_profile": {
    +              "network_interfaces": [
    +                {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NETWORK_INTERFACE_NAME + "",
    +                  "properties": {
    +                    "primary": True
    +                  }
    +                }
    +              ]
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a vm with DiskEncryptionSet resource id in the os disk and data disk.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "hardware_profile": {
    +              "vm_size": "Standard_D1_v2"
    +            },
    +            "storage_profile": {
    +              "image_reference": {
    +                "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/images/" + IMAGE_NAME + ""
    +              },
    +              "os_disk": {
    +                "caching": "ReadWrite",
    +                "managed_disk": {
    +                  "storage_account_type": "Standard_LRS",
    +                  "disk_encryption_set": {
    +                    "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSets/" + DISK_ENCRYPTION_SET_NAME + ""
    +                  }
    +                },
    +                "name": "myVMosdisk",
    +                "create_option": "FromImage"
    +              },
    +              "data_disks": [
    +                {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS",
    +                    "disk_encryption_set": {
    +                      "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSets/" + DISK_ENCRYPTION_SET_NAME + ""
    +                    }
    +                  },
    +                  "disk_size_gb": "1023",
    +                  "create_option": "Empty",
    +                  "lun": "0"
    +                },
    +                {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/disks/" + DISK_NAME + "",
    +                    "storage_account_type": "Standard_LRS",
    +                    "disk_encryption_set": {
    +                      "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSets/" + DISK_ENCRYPTION_SET_NAME + ""
    +                    }
    +                  },
    +                  "disk_size_gb": "1023",
    +                  "create_option": "Attach",
    +                  "lun": "1"
    +                }
    +              ]
    +            },
    +            "os_profile": {
    +              "admin_username": "{your-username}",
    +              "computer_name": "myVM",
    +              "admin_password": "{your-password}"
    +            },
    +            "network_profile": {
    +              "network_interfaces": [
    +                {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NETWORK_INTERFACE_NAME + "",
    +                  "properties": {
    +                    "primary": True
    +                  }
    +                }
    +              ]
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a vm with a marketplace image plan.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "plan": {
    +            "publisher": "microsoft-ads",
    +            "product": "windows-data-science-vm",
    +            "name": "windows2016"
    +          },
    +          "properties": {
    +            "hardware_profile": {
    +              "vm_size": "Standard_D1_v2"
    +            },
    +            "storage_profile": {
    +              "image_reference": {
    +                "sku": "windows2016",
    +                "publisher": "microsoft-ads",
    +                "version": "latest",
    +                "offer": "windows-data-science-vm"
    +              },
    +              "os_disk": {
    +                "caching": "ReadWrite",
    +                "managed_disk": {
    +                  "storage_account_type": "Standard_LRS"
    +                },
    +                "name": "myVMosdisk",
    +                "create_option": "FromImage"
    +              }
    +            },
    +            "os_profile": {
    +              "admin_username": "{your-username}",
    +              "computer_name": "myVM",
    +              "admin_password": "{your-password}"
    +            },
    +            "network_profile": {
    +              "network_interfaces": [
    +                {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NETWORK_INTERFACE_NAME + "",
    +                  "properties": {
    +                    "primary": True
    +                  }
    +                }
    +              ]
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a vm with boot diagnostics.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "properties": {
    +            "hardware_profile": {
    +              "vm_size": "Standard_D1_v2"
    +            },
    +            "storage_profile": {
    +              "image_reference": {
    +                "sku": "2016-Datacenter",
    +                "publisher": "MicrosoftWindowsServer",
    +                "version": "latest",
    +                "offer": "WindowsServer"
    +              },
    +              "os_disk": {
    +                "caching": "ReadWrite",
    +                "managed_disk": {
    +                  "storage_account_type": "Standard_LRS"
    +                },
    +                "name": "myVMosdisk",
    +                "create_option": "FromImage"
    +              }
    +            },
    +            "network_profile": {
    +              "network_interfaces": [
    +                {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NETWORK_INTERFACE_NAME + "",
    +                  "properties": {
    +                    "primary": True
    +                  }
    +                }
    +              ]
    +            },
    +            "os_profile": {
    +              "admin_username": "{your-username}",
    +              "computer_name": "myVM",
    +              "admin_password": "{your-password}"
    +            },
    +            "diagnostics_profile": {
    +              "boot_diagnostics": {
    +                "storage_uri": "http://{existing-storage-account-name}.blob.core.windows.net",
    +                "enabled": True
    +              }
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +        """
    +
    +        # Create an availability set.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "platform_fault_domain_count": "2",
    +          "platform_update_domain_count": "20"
    +        }
    +        result = self.mgmt_client.availability_sets.create_or_update(resource_group.name, AVAILABILITY_SET_NAME, BODY)
    +
    +        # TODO: NEED KEY VAULT
    +        # Create a disk encryption set.[put]
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "identity": {
    +        #     "type": "SystemAssigned"
    +        #   },
    +        #   "active_key": {
    +        #     "source_vault": {
    +        #       # "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.KeyVault/vaults/" + VAULT_NAME + ""
    +        #       "id": VAULT_ID
    +        #     },
    +        #     # "key_url": "https://myvmvault.vault-int.azure-int.net/keys/{key}"
    +        #     "key_url": VAULT_URI + "/keys/" + KEY_NAME
    +        #   }
    +        # }
    +        # result = self.mgmt_client.disk_encryption_sets.create_or_update(resource_group.name, DISK_ENCRYPTION_SET_NAME, BODY)
    +        # result = result.result()
    +
    +        # Create or update a simple gallery image.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "os_type": "Windows",
    +          "os_state": "Generalized",
    +          "hyper_vgeneration": "V1",
    +          "identifier": {
    +            "publisher": "myPublisherName",
    +            "offer": "myOfferName",
    +            "sku": "mySkuName"
    +          }
    +        }
    +        result = self.mgmt_client.gallery_images.create_or_update(resource_group.name, GALLERY_NAME, IMAGE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create or update a dedicated host .[put]
    +        BODY = {
    +          "location": "eastus",
    +          "tags": {
    +            "department": "HR"
    +          },
    +          "platform_fault_domain": "1",
    +          "sku": {
    +            "name": "DSv3-Type1"
    +          }
    +        }
    +        result = self.mgmt_client.dedicated_hosts.create_or_update(resource_group.name, HOST_GROUP_NAME, HOST_NAME, BODY)
    +        result = result.result()
    +
    +        """
    +        # Create/Update Container Service[put]
    +        BODY = {
    +          "location": "location1"
    +        }
    +        result = self.mgmt_client.container_services.create_or_update(resource_group.name, CONTAINER_SERVICE_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a scale set with virtual machines in different zones.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "2",
    +            "name": "Standard_A1_v2"
    +          },
    +          "location": "centralus",
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "sku": "2016-Datacenter",
    +                  "publisher": "MicrosoftWindowsServer",
    +                  "version": "latest",
    +                  "offer": "WindowsServer"
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS"
    +                  },
    +                  "create_option": "FromImage",
    +                  "disk_size_gb": "512"
    +                },
    +                "data_disks": [
    +                  {
    +                    "disk_size_gb": "1023",
    +                    "create_option": "Empty",
    +                    "lun": "0"
    +                  },
    +                  {
    +                    "disk_size_gb": "1023",
    +                    "create_option": "Empty",
    +                    "lun": "1"
    +                  }
    +                ]
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Automatic"
    +            }
    +          },
    +          "zones": [
    +            "1",
    +            "3"
    +          ]
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a custom-image scale set from an unmanaged generalized os image.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_D1_v2"
    +          },
    +          "location": "eastus",
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "image": {
    +                    "uri": "http://{existing-storage-account-name}.blob.core.windows.net/{existing-container-name}/{existing-generalized-os-image-blob-name}.vhd"
    +                  },
    +                  "create_option": "FromImage",
    +                  "name": "osDisk"
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a scale set with ephemeral os disks.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_DS1_v2"
    +          },
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "sku": "windows2016",
    +                  "publisher": "microsoft-ads",
    +                  "version": "latest",
    +                  "offer": "windows-data-science-vm"
    +                },
    +                "os_disk": {
    +                  "caching": "ReadOnly",
    +                  "diff_disk_settings": {
    +                    "option": "Local"
    +                  },
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS"
    +                  },
    +                  "create_option": "FromImage"
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          },
    +          "plan": {
    +            "publisher": "microsoft-ads",
    +            "product": "windows-data-science-vm",
    +            "name": "windows2016"
    +          },
    +          "location": "eastus"
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a scale set with ssh authentication.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_D1_v2"
    +          },
    +          "location": "eastus",
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "sku": "2016-Datacenter",
    +                  "publisher": "MicrosoftWindowsServer",
    +                  "version": "latest",
    +                  "offer": "WindowsServer"
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS"
    +                  },
    +                  "create_option": "FromImage"
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "linux_configuration": {
    +                  "ssh": {
    +                    "public_keys": [
    +                      {
    +                        "path": "/home/{your-username}/.ssh/authorized_keys",
    +                        "key_data": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCeClRAk2ipUs/l5voIsDC5q9RI+YSRd1Bvd/O+axgY4WiBzG+4FwJWZm/mLLe5DoOdHQwmU2FrKXZSW4w2sYE70KeWnrFViCOX5MTVvJgPE8ClugNl8RWth/tU849DvM9sT7vFgfVSHcAS2yDRyDlueii+8nF2ym8XWAPltFVCyLHRsyBp5YPqK8JFYIa1eybKsY3hEAxRCA+/7bq8et+Gj3coOsuRmrehav7rE6N12Pb80I6ofa6SM5XNYq4Xk0iYNx7R3kdz0Jj9XgZYWjAHjJmT0gTRoOnt6upOuxK7xI/ykWrllgpXrCPu3Ymz+c+ujaqcxDopnAl2lmf69/J1"
    +                      }
    +                    ]
    +                  },
    +                  "disable_password_authentication": True
    +                }
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a scale set with premium storage.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_D1_v2"
    +          },
    +          "location": "eastus",
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "sku": "2016-Datacenter",
    +                  "publisher": "MicrosoftWindowsServer",
    +                  "version": "latest",
    +                  "offer": "WindowsServer"
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Premium_LRS"
    +                  },
    +                  "create_option": "FromImage"
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +        """
    +
    +        # Create a scale set with empty data disks on each vm.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "2",
    +            "name": "Standard_D1_v2"
    +          },
    +          "location": "eastus",
    +          "overprovision": True,
    +          "virtual_machine_profile": {
    +            "storage_profile": {
    +              # "image_reference": {
    +              #   "sku": "2016-Datacenter",
    +              #   "publisher": "MicrosoftWindowsServer",
    +              #   "version": "latest",
    +              #   "offer": "WindowsServer"
    +              # },
    +              "image_reference": {
    +                  "offer": "UbuntuServer",
    +                  "publisher": "Canonical",
    +                  "sku": "18.04-LTS",
    +                  # "urn": "Canonical:UbuntuServer:18.04-LTS:latest",
    +                  # "urnAlias": "UbuntuLTS",
    +                  "version": "latest"
    +              },
    +              "os_disk": {
    +                "caching": "ReadWrite",
    +                "managed_disk": {
    +                  "storage_account_type": "Standard_LRS"
    +                },
    +                "create_option": "FromImage",
    +                "disk_size_gb": "512"
    +              },
    +              # "data_disks": [
    +              #   {
    +              #     "disk_size_gb": "1023",
    +              #     "create_option": "Empty",
    +              #     "lun": "0"
    +              #   },
    +              #   {
    +              #     "disk_size_gb": "1023",
    +              #     "create_option": "Empty",
    +              #     "lun": "1"
    +              #   }
    +              # ]
    +            },
    +            "os_profile": {
    +              "computer_name_prefix": "testPC",
    +              "admin_username": "testuser",
    +              "admin_password": "Aa!1()-xyz"
    +            },
    +            "network_profile": {
    +              "network_interface_configurations": [
    +                {
    +                  "name": "testPC",
    +                  "primary": True,
    +                  "enable_ipforwarding": True,
    +                  "ip_configurations": [
    +                    {
    +                      "name": "testPC",
    +                      "properties": {
    +                        "subnet": {
    +                          "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                        }
    +                      }
    +                    }
    +                  ]
    +                }
    +              ]
    +            }
    +          },
    +          "upgrade_policy": {
    +            "mode": "Manual"
    +          },
    +          "upgrade_mode": "Manual"
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        """
    +        # Create a scale set with an azure load balancer.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_D1_v2"
    +          },
    +          "location": "eastus",
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "sku": "2016-Datacenter",
    +                  "publisher": "MicrosoftWindowsServer",
    +                  "version": "latest",
    +                  "offer": "WindowsServer"
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS"
    +                  },
    +                  "create_option": "FromImage"
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            },
    +                            "public_ip_address_configuration": {
    +                              "name": "{vmss-name}",
    +                              "properties": {
    +                                "public_ip_address_version": "IPv4"
    +                              }
    +                            },
    +                            "load_balancer_inbound_nat_pools": [
    +                              {
    +                                "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/loadBalancers/" + LOAD_BALANCER_NAME + "/inboundNatPools/" + INBOUND_NAT_POOL_NAME + ""
    +                              }
    +                            ],
    +                            "load_balancer_backend_address_pools": [
    +                              {
    +                                "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/loadBalancers/" + LOAD_BALANCER_NAME + "/backendAddressPools/" + BACKEND_ADDRESS_POOL_NAME + ""
    +                              }
    +                            ]
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a scale set with boot diagnostics.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_D1_v2"
    +          },
    +          "location": "eastus",
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "sku": "2016-Datacenter",
    +                  "publisher": "MicrosoftWindowsServer",
    +                  "version": "latest",
    +                  "offer": "WindowsServer"
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS"
    +                  },
    +                  "create_option": "FromImage"
    +                }
    +              },
    +              "diagnostics_profile": {
    +                "boot_diagnostics": {
    +                  "storage_uri": "http://{existing-storage-account-name}.blob.core.windows.net",
    +                  "enabled": True
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a scale set with terminate scheduled events enabled.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_D1_v2"
    +          },
    +          "location": "eastus",
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "sku": "2016-Datacenter",
    +                  "publisher": "MicrosoftWindowsServer",
    +                  "version": "latest",
    +                  "offer": "WindowsServer"
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS"
    +                  },
    +                  "create_option": "FromImage"
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              },
    +              "scheduled_events_profile": {
    +                "terminate_notification_profile": {
    +                  "enable": True,
    +                  "not_before_timeout": "PT5M"
    +                }
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a scale set with automatic repairs enabled[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_D1_v2"
    +          },
    +          "location": "eastus",
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "sku": "2016-Datacenter",
    +                  "publisher": "MicrosoftWindowsServer",
    +                  "version": "latest",
    +                  "offer": "WindowsServer"
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS"
    +                  },
    +                  "create_option": "FromImage"
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            },
    +            "automatic_repairs_policy": {
    +              "enabled": True,
    +              "grace_period": "PT30M"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a scale set with a marketplace image plan.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_D1_v2"
    +          },
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "sku": "windows2016",
    +                  "publisher": "microsoft-ads",
    +                  "version": "latest",
    +                  "offer": "windows-data-science-vm"
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS"
    +                  },
    +                  "create_option": "FromImage"
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          },
    +          "plan": {
    +            "publisher": "microsoft-ads",
    +            "product": "windows-data-science-vm",
    +            "name": "windows2016"
    +          },
    +          "location": "eastus"
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a scale set from a custom image.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_D1_v2"
    +          },
    +          "location": "eastus",
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/images/" + IMAGE_NAME + ""
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS"
    +                  },
    +                  "create_option": "FromImage"
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a scale set with DiskEncryptionSet resource in os disk and data disk.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_DS1_v2"
    +          },
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/images/" + IMAGE_NAME + ""
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS",
    +                    "disk_encryption_set": {
    +                      "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSets/" + DISK_ENCRYPTION_SET_NAME + ""
    +                    }
    +                  },
    +                  "create_option": "FromImage"
    +                },
    +                "data_disks": [
    +                  {
    +                    "caching": "ReadWrite",
    +                    "managed_disk": {
    +                      "storage_account_type": "Standard_LRS",
    +                      "disk_encryption_set": {
    +                        "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSets/" + DISK_ENCRYPTION_SET_NAME + ""
    +                      }
    +                    },
    +                    "disk_size_gb": "1023",
    +                    "create_option": "Empty",
    +                    "lun": "0"
    +                  }
    +                ]
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          },
    +          "location": "eastus"
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a platform-image scale set with unmanaged os disks.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_D1_v2"
    +          },
    +          "location": "eastus",
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "sku": "2016-Datacenter",
    +                  "publisher": "MicrosoftWindowsServer",
    +                  "version": "latest",
    +                  "offer": "WindowsServer"
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "create_option": "FromImage",
    +                  "name": "osDisk",
    +                  "vhd_containers": [
    +                    "http://{existing-storage-account-name-0}.blob.core.windows.net/vhdContainer",
    +                    "http://{existing-storage-account-name-1}.blob.core.windows.net/vhdContainer",
    +                    "http://{existing-storage-account-name-2}.blob.core.windows.net/vhdContainer",
    +                    "http://{existing-storage-account-name-3}.blob.core.windows.net/vhdContainer",
    +                    "http://{existing-storage-account-name-4}.blob.core.windows.net/vhdContainer"
    +                  ]
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a scale set with password authentication.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_D1_v2"
    +          },
    +          "location": "eastus",
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "sku": "2016-Datacenter",
    +                  "publisher": "MicrosoftWindowsServer",
    +                  "version": "latest",
    +                  "offer": "WindowsServer"
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS"
    +                  },
    +                  "create_option": "FromImage"
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Create a scale set with an azure application gateway.[put]
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "3",
    +            "name": "Standard_D1_v2"
    +          },
    +          "location": "eastus",
    +          "properties": {
    +            "overprovision": True,
    +            "virtual_machine_profile": {
    +              "storage_profile": {
    +                "image_reference": {
    +                  "sku": "2016-Datacenter",
    +                  "publisher": "MicrosoftWindowsServer",
    +                  "version": "latest",
    +                  "offer": "WindowsServer"
    +                },
    +                "os_disk": {
    +                  "caching": "ReadWrite",
    +                  "managed_disk": {
    +                    "storage_account_type": "Standard_LRS"
    +                  },
    +                  "create_option": "FromImage"
    +                }
    +              },
    +              "os_profile": {
    +                "computer_name_prefix": "{vmss-name}",
    +                "admin_username": "{your-username}",
    +                "admin_password": "{your-password}"
    +              },
    +              "network_profile": {
    +                "network_interface_configurations": [
    +                  {
    +                    "name": "{vmss-name}",
    +                    "properties": {
    +                      "primary": True,
    +                      "enable_ipforwarding": True,
    +                      "ip_configurations": [
    +                        {
    +                          "name": "{vmss-name}",
    +                          "properties": {
    +                            "application_gateway_backend_address_pools": [
    +                              {
    +                                "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/applicationGateways/" + APPLICATION_GATEWAY_NAME + "/backendAddressPools/" + BACKEND_ADDRESS_POOL_NAME + ""
    +                              }
    +                            ],
    +                            "subnet": {
    +                              "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + ""
    +                            }
    +                          }
    +                        }
    +                      ]
    +                    }
    +                  }
    +                ]
    +              }
    +            },
    +            "upgrade_policy": {
    +              "mode": "Manual"
    +            }
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +        """
    +
    +        # Create or Update a proximity placement group.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "proximity_placement_group_type": "Standard"
    +        }
    +        result = self.mgmt_client.proximity_placement_groups.create_or_update(resource_group.name, PROXIMITY_PLACEMENT_GROUP_NAME, BODY)
    +
    +        # Create or update a simple gallery Application.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "description": "This is the gallery application description.",
    +          "eula": "This is the gallery application EULA.",
    +          # "privacy_statement_uri": "myPrivacyStatementUri}",
    +          # "release_note_uri": "myReleaseNoteUri",
    +          "supported_os_type": "Windows"
    +        }
    +        result = self.mgmt_client.gallery_applications.create_or_update(resource_group.name, GALLERY_NAME, APPLICATION_NAME, BODY)
    +        result = result.result()
    +
    +        # Create or update a simple Gallery Image Version using snapshots as a source.[put]
    +        BODY = {
    +          "location": "eastus",
    +          "publishing_profile": {
    +            "target_regions": [
    +              # {
    +              #   "name": "eastus",
    +              #   "regional_replica_count": "1",
    +              #   "encryption": {
    +              #     "os_disk_image": {
    +              #       "disk_encryption_set_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSet/" + DISK_ENCRYPTION_SET_NAME + ""
    +              #     },
    +              #     "data_disk_images": [
    +              #       {
    +              #         "disk_encryption_set_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSet/" + DISK_ENCRYPTION_SET_NAME + "",
    +              #         "lun": "1"
    +              #       }
    +              #     ]
    +              #   }
    +              # },
    +              {
    +                "name": "East US",
    +                "regional_replica_count": "2",
    +                "storage_account_type": "Standard_ZRS"
    +              }
    +            ]
    +          },
    +          "storage_profile": {
    +            "os_disk_image": {
    +              "source": {
    +                "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/snapshots/" + SNAPSHOT_NAME + ""
    +              },
    +              "host_caching": "ReadOnly"
    +            },
    +            # "data_disk_images": [
    +            #   {
    +            #     "source": {
    +            #       "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/snapshots/" + SNAPSHOT_NAME + ""
    +            #     },
    +            #     "lun": "1",
    +            #     "host_caching": "None"
    +            #   }
    +            # ]
    +          }
    +        }
    +        result = self.mgmt_client.gallery_image_versions.create_or_update(resource_group.name, GALLERY_NAME, IMAGE_NAME, VERSION_NAME, BODY)
    +        result = result.result()
    +
    +        # Create virtual machine extension (TODO: need swagger file)
    +        BODY = {
    +          "location": "eastus",
    +          "auto_upgrade_minor_version": True,
    +          "publisher": "Microsoft.Azure.NetworkWatcher",
    +          "virtual_machine_extension_type": "NetworkWatcherAgentWindows",
    +          "type_handler_version": "1.4",
    +        }
    +        result = self.mgmt_client.virtual_machine_extensions.create_or_update(resource_group.name, VIRTUAL_MACHINE_NAME, VIRTUAL_MACHINE_EXTENSION_NAME, BODY)
    +
    +        # Create virtual machine sacle set extension (TODO: need swagger file)
    +        BODY = {
    +          "location": "eastus",
    +          "auto_upgrade_minor_version": True,
    +          "publisher": "Microsoft.Azure.NetworkWatcher",
    +          "type1": "NetworkWatcherAgentWindows",
    +          "type_handler_version": "1.4",
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_set_extensions.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, VMSS_EXTENSION_NAME, BODY)
    +
    +        # TODO: need image
    +        # # Create or update a simple Gallery Image Version (Managed Image as source).[put]
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "publishing_profile": {
    +        #     "target_regions": [
    +        #       # {
    +        #       #   "name": "eastus",
    +        #       #   "regional_replica_count": "1",
    +        #       #   "encryption": {
    +        #       #     "os_disk_image": {
    +        #       #       "disk_encryption_set_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSet/" + DISK_ENCRYPTION_SET_NAME + ""
    +        #       #     },
    +        #       #     "data_disk_images": [
    +        #       #       {
    +        #       #         "lun": "0",
    +        #       #         "disk_encryption_set_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSet/" + DISK_ENCRYPTION_SET_NAME + ""
    +        #       #       },
    +        #       #       {
    +        #       #         "lun": "1",
    +        #       #         "disk_encryption_set_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/diskEncryptionSet/" + DISK_ENCRYPTION_SET_NAME + ""
    +        #       #       }
    +        #       #     ]
    +        #       #   }
    +        #       # },
    +        #       {
    +        #         "name": "East US",
    +        #         "regional_replica_count": "2",
    +        #         "storage_account_type": "Standard_ZRS"
    +        #       }
    +        #     ]
    +        #   },
    +        #   "storage_profile": {
    +        #     "source": {
    +        #       "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/images/" + IMAGE_NAME + ""
    +        #     }
    +        #   }
    +        # }
    +        # result = self.mgmt_client.gallery_image_versions.create_or_update(resource_group.name, GALLERY_NAME, IMAGE_NAME, VERSION_NAME, BODY)
    +        # result = result.result()
    +
    +        # TODO: NEED STORAGE ACCOUNT
    +        # # Create or update a simple gallery Application Version.[put]
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "publishing_profile": {
    +        #     "source": {
    +        #       "file_name": "package.zip",
    +        #       "media_link": "https://mystorageaccount.blob.core.windows.net/mycontainer/package.zip?{sasKey}"
    +        #     },
    +        #     "target_regions": [
    +        #       {
    +        #         "name": "eastus",
    +        #         "regional_replica_count": "1",
    +        #         "storage_account_type": "Standard_LRS"
    +        #       }
    +        #     ],
    +        #     "replica_count": "1",
    +        #     "end_of_life_date": "2019-07-01T07:00:00Z",
    +        #     "storage_account_type": "Standard_LRS"
    +        #   }
    +        # }
    +        # result = self.mgmt_client.gallery_application_versions.create_or_update(resource_group.name, GALLERY_NAME, APPLICATION_NAME, VERSION_NAME, BODY)
    +        # result = result.result()
    +
    +        # # TODO:need finish
    +        # # Create VirtualMachineScaleSet VM extension.[put]
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "properties": {
    +        #     "auto_upgrade_minor_version": True,
    +        #     "publisher": "extPublisher",
    +        #     "type": "extType",
    +        #     "type_handler_version": "1.2",
    +        #     "settings": {
    +        #       "user_name": "xyz@microsoft.com"
    +        #     }
    +        #   }
    +        # }
    +        # result = self.mgmt_client.virtual_machine_scale_set_vmextensions.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, VIRTUAL_MACHINE_NAME, EXTENSION_NAME, BODY)
    +        # result = result.result()
    +
    +        # # TODO:need finish
    +        # # Get VirtualMachineScaleSet VM extension.[get]
    +        # result = self.mgmt_client.virtual_machine_scale_set_vmextensions.get(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, VIRTUAL_MACHINE_NAME, EXTENSION_NAME)
    +
    +        # # TODO:need finish
    +        # # List extensions in Vmss instance.[get]
    +        # result = self.mgmt_client.virtual_machine_scale_set_vmextensions.list(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, VIRTUAL_MACHINE_NAME)
    +
    +        # # TODO:need finish
    +        # # Get a gallery Application Version with replication status.[get]
    +        # result = self.mgmt_client.gallery_application_versions.get(resource_group.name, GALLERY_NAME, APPLICATION_NAME, VERSION_NAME)
    +
    +        # # TODO:need finish
    +        # # Get a gallery Application Version.[get]
    +        # result = self.mgmt_client.gallery_application_versions.get(resource_group.name, GALLERY_NAME, APPLICATION_NAME, VERSION_NAME)
    +
    +        # # Get a gallery Image Version with snapshots as a source.[get]
    +        # result = self.mgmt_client.gallery_image_versions.get(resource_group.name, GALLERY_NAME, IMAGE_NAME, VERSION_NAME)
    +
    +        # # Get a gallery Image Version with replication status.[get]
    +        # result = self.mgmt_client.gallery_image_versions.get(resource_group.name, GALLERY_NAME, IMAGE_NAME, VERSION_NAME)
    +
    +        # Get a gallery Image Version.[get]
    +        result = self.mgmt_client.gallery_image_versions.get(resource_group.name, GALLERY_NAME, IMAGE_NAME, VERSION_NAME)
    +
    +        # TODO:need finish
    +        # # List gallery Application Versions in a gallery Application Definition.[get]
    +        # result = self.mgmt_client.gallery_application_versions.list_by_gallery_application(resource_group.name, GALLERY_NAME, APPLICATION_NAME)
    +
    +        # Get a gallery Application.[get]
    +        result = self.mgmt_client.gallery_applications.get(resource_group.name, GALLERY_NAME, APPLICATION_NAME)
    +
    +        # Get a proximity placement group.[get]
    +        result = self.mgmt_client.proximity_placement_groups.get(resource_group.name, PROXIMITY_PLACEMENT_GROUP_NAME)
    +
    +        # List gallery Image Versions in a gallery Image Definition.[get]
    +        result = self.mgmt_client.gallery_image_versions.list_by_gallery_image(resource_group.name, GALLERY_NAME, IMAGE_NAME)
    +
    +        # Get Virtual Machine Instance View.[get]
    +        result = self.mgmt_client.virtual_machines.instance_view(resource_group.name, VIRTUAL_MACHINE_NAME)
    +
    +        # Get Virtual Machine Image (TODO: need swagger file)
    +        PUBLISHER_NAME = "MicrosoftWindowsServer"
    +        OFFER = "WindowsServer"
    +        SKUS = "2019-Datacenter"
    +        VERSION = "2019.0.20190115" 
    +        result = self.mgmt_client.virtual_machine_images.get(AZURE_LOCATION, PUBLISHER_NAME, OFFER, SKUS, VERSION)
    +
    +        # Get Virtual Machine Extension Image (TODO: neet swagger file)
    +        EXTENSION_PUBLISHER_NAME = "Microsoft.Compute"
    +        EXTENSION_IMAGE_TYPE = "VMAccessAgent"
    +        EXTENSION_IMAGE_VERSION = "1.0.2"
    +        result = self.mgmt_client.virtual_machine_extension_images.get(AZURE_LOCATION, EXTENSION_PUBLISHER_NAME, EXTENSION_IMAGE_TYPE, EXTENSION_IMAGE_VERSION)
    +
    +        # TODO: dont belong here
    +        # Get Container Service[get]
    +        # result = self.mgmt_client.container_services.get(resource_group.name, CONTAINER_SERVICE_NAME)
    +
    +        # Get a dedicated host.[get]
    +        result = self.mgmt_client.dedicated_hosts.get(resource_group.name, HOST_GROUP_NAME, HOST_NAME)
    +
    +        # Get a gallery image.[get]
    +        result = self.mgmt_client.gallery_images.get(resource_group.name, GALLERY_NAME, IMAGE_NAME)
    +
    +        # Lists all available virtual machine sizes to which the specified virtual machine can be resized[get]
    +        result = self.mgmt_client.virtual_machines.list_available_sizes(resource_group.name, VIRTUAL_MACHINE_NAME)
    +
    +        # # Get information about a disk encryption set.[get]
    +        # result = self.mgmt_client.disk_encryption_sets.get(resource_group.name, DISK_ENCRYPTION_SET_NAME)
    +
    +        # Get a Virtual Machine.[get]
    +        result = self.mgmt_client.virtual_machines.get(resource_group.name, VIRTUAL_MACHINE_NAME)
    +
    +        # Get a virtual machine scale sets (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_sets.get(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +
    +        # Get virtual machine scale set os upgrade history (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_sets.get_os_upgrade_history(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +
    +        # Get instance view of virtual machine scale set (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_sets.get_instance_view(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +
    +        # Get virtual machine extension (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_extensions.get(resource_group.name, VIRTUAL_MACHINE_NAME, VIRTUAL_MACHINE_EXTENSION_NAME)
    +
    +        # Get virtual machine scale set extension (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_set_extensions.get(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, VMSS_EXTENSION_NAME)
    +        
    +        # Get VMSS vm extension (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_vm_extensions.get(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID, VIRTUAL_MACHINE_EXTENSION_NAME)
    +
    +        # List VMSS vm extensions (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_vm_extensions.list(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID)
    +
    +        # TODO: it has a bug that doesn't send request and always returns [].
    +        # List vitual machine scale set vms (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_set_vms.list(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        # INSTANCE_ID_1 = result.current_page[0].instance_id
    +        # INSTANCE_ID_2 = result.current_page[1].instance_id
    +        # INSTANCE_ID = INSTANCE_ID_1
    +
    +        # Get virtual machine scale set vm instance view (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.get_instance_view(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID)
    +
    +        # Get virtual machine scale set vm (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.get(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID)
    +        # INSTANCE_VM_1 = result
    +
    +        # Create VMSS vm extension (TODO: need swagger file)
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "auto_upgrade_minor_version": True,
    +        #   "publisher": "Microsoft.Azure.NetworkWatcher",
    +        #   "virtual_machine_extension_type": "NetworkWatcherAgentWindows",
    +        #   "type_handler_version": "1.4",
    +        # }
    +        # result = self.mgmt_client.virtual_machine_scale_set_vm_extensions.create_or_update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID, VIRTUAL_MACHINE_EXTENSION_NAME, BODY)
    +        # result = result.result()
    +
    +        # Llist virtual machine extensions (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_extensions.list(resource_group.name, VIRTUAL_MACHINE_NAME)
    +
    +        # List virtual machine scale set extension (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_set_extensions.list(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +
    +        # List Virtual Machine images (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_images.list(AZURE_LOCATION, PUBLISHER_NAME, OFFER, SKUS)
    +
    +        # List Virtual Machine image offers (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_images.list_offers(AZURE_LOCATION, PUBLISHER_NAME)
    +
    +        # List Virtual Machine image publishers (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_images.list_publishers(AZURE_LOCATION)
    +
    +        # List Virtual Machine image skus (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_images.list_skus(AZURE_LOCATION, PUBLISHER_NAME, OFFER)
    +
    +        # List Virtual Machine extension image types (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_extension_images.list_types(AZURE_LOCATION, EXTENSION_PUBLISHER_NAME)
    +
    +        # # List Virtual Machine extension image versions (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_extension_images.list_versions(AZURE_LOCATION, EXTENSION_PUBLISHER_NAME, EXTENSION_IMAGE_TYPE)
    +
    +        # List gallery Applications in a gallery.[get]
    +        result = self.mgmt_client.gallery_applications.list_by_gallery(resource_group.name, GALLERY_NAME)
    +
    +        # List gallery images in a gallery.[get]
    +        result = self.mgmt_client.gallery_images.list_by_gallery(resource_group.name, GALLERY_NAME)
    +
    +        # Get a dedicated host group.[get]
    +        result = self.mgmt_client.dedicated_host_groups.get(resource_group.name, HOST_GROUP_NAME)
    +
    +        # Get information about a snapshot.[get]
    +        result = self.mgmt_client.snapshots.get(resource_group.name, SNAPSHOT_NAME)
    +
    +        # Get a gallery.[get]
    +        result = self.mgmt_client.galleries.get(resource_group.name, GALLERY_NAME)
    +
    +        # VirtualMachineRunCommandGet[get]
    +        RUN_COMMAND_NAME = "RunPowerShellScript"
    +        result = self.mgmt_client.virtual_machine_run_commands.get(AZURE_LOCATION, RUN_COMMAND_NAME)
    +
    +        # TODO: dont belong here
    +        # # List Container Services by Resource Group[get]
    +        # result = self.mgmt_client.container_services.list_by_resource_group(resource_group.name)
    +
    +        # List proximity placement groups in a resource group.[get]
    +        result = self.mgmt_client.proximity_placement_groups.list_by_resource_group(resource_group.name)
    +
    +        # Get information about a virtual machine image.[get]
    +        result = self.mgmt_client.images.get(resource_group.name, IMAGE_NAME)
    +
    +        # Get information about a managed disk.[get]
    +        result = self.mgmt_client.disks.get(resource_group.name, DISK_NAME)
    +
    +        # Get availability set (TODO: need swagger file)
    +        result = self.mgmt_client.availability_sets.get(resource_group.name, AVAILABILITY_SET_NAME)
    +
    +        # TODO: The entity was not found in this Azure location.
    +        # Get virtual machine scale set latest rolling upgrade (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_rolling_upgrades.get_latest(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +
    +        # List all disk encryption sets in a resource group.[get]
    +        result = self.mgmt_client.disk_encryption_sets.list_by_resource_group(resource_group.name)
    +
    +        # List virtual machine scale sets in a resource group (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_sets.list(resource_group.name)
    +
    +        # List all virtual machine scale sets (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_sets.list_all()
    +
    +        # List virtual machine scale sets skus (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_sets.list_skus(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +
    +        # List the virtual machines (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machines.list(resource_group.name)
    +
    +        # List all virtual machines (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machines.list_all()
    +
    +        # Lists all the virtual machines under the specified subscription for the specified location.[get]
    +        result = self.mgmt_client.virtual_machines.list_by_location(AZURE_LOCATION)
    +
    +        # List virtual machine sizes (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_sizes.list(AZURE_LOCATION)
    +
    +        # List dedicated host groups in a resource group (TODO: need swagger file)
    +        result = self.mgmt_client.dedicated_host_groups.list_by_resource_group(resource_group.name)
    +
    +        # List galleries in a resource group.[get]
    +        result = self.mgmt_client.galleries.list_by_resource_group(resource_group.name)
    +
    +        # List all snapshots in a resource group.[get]
    +        result = self.mgmt_client.snapshots.list_by_resource_group(resource_group.name)
    +
    +        # List all virtual machine images in a resource group.[get]
    +        result = self.mgmt_client.images.list_by_resource_group(resource_group.name)
    +
    +        # List all managed disks in a resource group.[get]
    +        result = self.mgmt_client.disks.list_by_resource_group(resource_group.name)
    +
    +        # List dedicated hosts in host group (TODO: need swagger file)
    +        result = self.mgmt_client.dedicated_hosts.list_by_host_group(resource_group.name, HOST_GROUP_NAME)
    +
    +        # VirtualMachineRunCommandList[get]
    +        result = self.mgmt_client.virtual_machine_run_commands.list(AZURE_LOCATION)
    +
    +        # TODO: dont belong here
    +        # # List Container Services[get]
    +        # result = self.mgmt_client.container_services.list()
    +
    +        # List proximity placement groups in a subscription. [get]
    +        result = self.mgmt_client.proximity_placement_groups.list_by_subscription()
    +
    +        # List all disk encryption sets in a subscription.[get]
    +        result = self.mgmt_client.disk_encryption_sets.list()
    +
    +        # List dedicated host groups in a subscription (TODO: need swagger file)
    +        result = self.mgmt_client.dedicated_host_groups.list_by_subscription()
    +
    +        # List availability sets in a subscription.[get]
    +        result = self.mgmt_client.availability_sets.list_by_subscription()
    +
    +        # List availability sets (TODO: need swagger file)
    +        result = self.mgmt_client.availability_sets.list(resource_group.name)
    +
    +        # List availability sets available sizes (TODO: need swagger file)
    +        result = self.mgmt_client.availability_sets.list_available_sizes(resource_group.name, AVAILABILITY_SET_NAME)
    +
    +        # List galleries in a subscription.[get]
    +        result = self.mgmt_client.galleries.list()
    +
    +        # List all snapshots in a subscription.[get]
    +        result = self.mgmt_client.snapshots.list()
    +
    +        # List all virtual machine images in a subscription.[get]
    +        result = self.mgmt_client.images.list()
    +
    +        # List all managed disks in a subscription.[get]
    +        result = self.mgmt_client.disks.list()
    +
    +        # List usage (TODO: need swagger file)
    +        result = self.mgmt_client.usage.list(AZURE_LOCATION)
    +
    +        # List operations (TODO: need swagger file)
    +        result = self.mgmt_client.operations.list()
    +
    +        # Lists all available Resource SKUs[get]
    +        result = self.mgmt_client.resource_skus.list()
    +
    +        # # Lists all available Resource SKUs for the specified region[get]
    +        # result = self.mgmt_client.resource_skus.list()
    +
    +        # Update a dedicated host group.[put]
    +        BODY = {
    +          "tags": {
    +            "department": "finance"
    +          },
    +          "platform_fault_domain_count": "3"
    +        }
    +        result = self.mgmt_client.dedicated_host_groups.update(resource_group.name, HOST_GROUP_NAME, BODY)
    +
    +        # Update a snapshot by
    +        BODY = {
    +          "creation_data": {
    +            "create_option": "Copy",
    +            "source_uri": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/disks/" + DISK_NAME
    +          }
    +        }
    +        result = self.mgmt_client.snapshots.update(resource_group.name, SNAPSHOT_NAME, BODY)
    +        result = result.result()
    +
    +        # TODO: dont finish
    +        # # Update VirtualMachineScaleSet VM extension.[patch]
    +        # BODY = {
    +        #   "properties": {
    +        #     "auto_upgrade_minor_version": True,
    +        #     "publisher": "extPublisher",
    +        #     "type": "extType",
    +        #     "type_handler_version": "1.2",
    +        #     "settings": {
    +        #       "user_name": "xyz@microsoft.com"
    +        #     }
    +        #   }
    +        # }
    +        # result = self.mgmt_client.virtual_machine_scale_set_vmextensions.update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, VIRTUAL_MACHINE_NAME, EXTENSION_NAME, BODY)
    +        # result = result.result()
    +
    +        # TODO: dont finish
    +        # Update a simple gallery Application Version.[patch]
    +        # BODY = {
    +        #   "properties": {
    +        #     "publishing_profile": {
    +        #       "source": {
    +        #         "file_name": "package.zip",
    +        #         "media_link": "https://mystorageaccount.blob.core.windows.net/mycontainer/package.zip?{sasKey}"
    +        #       },
    +        #       "target_regions": [
    +        #         {
    +        #           "name": "eastus",
    +        #           "regional_replica_count": "1",
    +        #           "storage_account_type": "Standard_LRS"
    +        #         }
    +        #       ],
    +        #       "replica_count": "1",
    +        #       "end_of_life_date": "2019-07-01T07:00:00Z",
    +        #       "storage_account_type": "Standard_LRS"
    +        #     }
    +        #   }
    +        # }
    +        # result = self.mgmt_client.gallery_application_versions.update(resource_group.name, GALLERY_NAME, APPLICATION_NAME, VERSION_NAME, BODY)
    +        # result = result.result()
    +
    +        # Start an extension rolling upgrade.[post]
    +        result = self.mgmt_client.virtual_machine_scale_set_rolling_upgrades.start_extension_upgrade(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        result = result.result()
    +
    +        # TODO:msrestazure.azure_exceptions.CloudError: Azure Error: MaxUnhealthyInstancePercentExceededInRollingUpgrade
    +        # Message: Rolling Upgrade failed after exceeding the MaxUnhealthyInstancePercent value defined in the RollingUpgradePolicy. 100% of instances are in an unhealthy state after being upgraded - more than the threshold of 20% configured in the RollingUpgradePolicy. The most impactful error is:  Instance found to be unhealthy or unreachable. For details on rolling upgrades, use http://aka.ms/AzureVMSSRollingUpgrade
    +        # Start vmss os upgrade (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_rolling_upgrades.start_os_upgrade(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        # result = result.result()
    +
    +        # Cancel vmss upgrade (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_rolling_upgrades.cancel(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        # result = result.result()
    +
    +        # Update disk.[patch] (TODO: need swagger file.)(doing)
    +        BODY = {
    +          "disk_size_gb": "200"
    +        }
    +        result = self.mgmt_client.disks.update(resource_group.name, DISK_NAME, BODY)
    +        result = result.result()
    +
    +        # Grant acess disk (TODO: need swagger file)
    +        ACCESS = "Read"
    +        DURATION_IN_SECONDS = 1800
    +        result = self.mgmt_client.disks.grant_access(resource_group.name, DISK_NAME, ACCESS, DURATION_IN_SECONDS)
    +        result = result.result()
    +        # SAS_URI = result.access_sas
    +
    +        # Grant acess snapshot (TODO: need swagger file)
    +        ACCESS = "Read"
    +        DURATION_IN_SECONDS = 1800
    +        result = self.mgmt_client.snapshots.grant_access(resource_group.name, SNAPSHOT_NAME, ACCESS, DURATION_IN_SECONDS)
    +        result = result.result()
    +
    +        # Update availability sets (TODO: need swagger file)
    +        BODY = {
    +          "platform_fault_domain_count": "2",
    +          "platform_update_domain_count": "20"
    +        }
    +        result = self.mgmt_client.availability_sets.update(resource_group.name, AVAILABILITY_SET_NAME, BODY)
    +
    +        # Update a dedicated host (TODO: need swagger file )
    +        BODY = {
    +          "tags": {
    +            "department": "HR"
    +          },
    +        }
    +        result = self.mgmt_client.dedicated_hosts.update(resource_group.name, HOST_GROUP_NAME, HOST_NAME, BODY)
    +
    +        # Update a simple Gallery Image Version (Managed Image as source).[patch]
    +        BODY = {
    +          "publishing_profile": {
    +            "target_regions": [
    +              # {
    +              #   "name": "eastus",
    +              #   "regional_replica_count": "1"
    +              # },
    +              {
    +                "name": "East US",
    +                "regional_replica_count": "2",
    +                "storage_account_type": "Standard_ZRS"
    +              }
    +            ]
    +          },
    +          "storage_profile": {
    +            "os_disk_image": {
    +              "source": {
    +                "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/snapshots/" + SNAPSHOT_NAME + ""
    +              },
    +              "host_caching": "ReadOnly"
    +            },
    +            # TODO: NEED A IMAGE
    +            # "source": {
    +            #   "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/images/" + IMAGE_NAME + ""
    +            # }
    +          }
    +        }
    +        result = self.mgmt_client.gallery_image_versions.update(resource_group.name, GALLERY_NAME, IMAGE_NAME, VERSION_NAME, BODY)
    +        result = result.result()
    +
    +        # Update a virtual machine scale set vm (TODO: need a swagger file)
    +        # BODY = {
    +        #   "location": "eastus",
    +        #   "tags": {
    +        #     "department": "HR"
    +        #   }
    +        # }
    +        # BODY = INSTANCE_VM_1
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID, INSTANCE_VM_1)
    +        # result = result.result()
    +
    +        # Update a virtual machine scale set (TODO: need a swagger file)
    +        BODY = {
    +          "sku": {
    +            "tier": "Standard",
    +            "capacity": "2",
    +            "name": "Standard_D1_v2"
    +          },
    +          "upgrade_policy": {
    +            "mode": "Manual"
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_sets.update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, BODY)
    +        result = result.result()
    +
    +        # Update instances of machine scale set (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_sets.update_instances(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_IDS)
    +        # result = result.result()
    +
    +        # Update a simple gallery Application.[patch]
    +        BODY = {
    +          "description": "This is the gallery application description.",
    +          "eula": "This is the gallery application EULA.",
    +          # "privacy_statement_uri": "myPrivacyStatementUri}",
    +          # "release_note_uri": "myReleaseNoteUri",
    +          "supported_os_type": "Windows",
    +          "tags": {
    +            "tag1": "tag1"
    +          }
    +
    +        }
    +        result = self.mgmt_client.gallery_applications.update(resource_group.name, GALLERY_NAME, APPLICATION_NAME, BODY)
    +        result = result.result()
    +
    +        # Update a proximity placement group.[get]
    +        BODY = {
    +          "location": "eastus",
    +          "proximity_placement_group_type": "Standard"
    +        }
    +        result = self.mgmt_client.proximity_placement_groups.update(resource_group.name, PROXIMITY_PLACEMENT_GROUP_NAME, BODY)
    +
    +        # Export logs which contain all Api requests made to Compute Resource Provider within the given time period broken down by intervals.[post]
    +        # BODY = {
    +        #   "interval_length": "FiveMins",
    +        #   # "blob_container_sas_uri": "https://somesasuri",
    +        #   "blob_container_sas_uri": SAS_URI,
    +        #   "from_time": "2018-01-21T01:54:06.862601Z",
    +        #   "to_time": "2018-01-23T01:54:06.862601Z",
    +        #   "group_by_resource_name": True
    +        # }
    +        # result = self.mgmt_client.log_analytics.export_request_rate_by_interval(AZURE_LOCATION, LOG_ANALYTIC_NAME, BODY)
    +        # result = result.result()
    +
    +        # VirtualMachineScaleSet vm restart (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.restart(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID)
    +        # result = result.result()
    +
    +        # VirtualMachineScaleSet vm power off (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.power_off(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID)
    +        # result = result.result()
    +
    +        # VirtualMachineScaleSet vm start (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.start(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID)
    +        # result = result.result()
    +
    +        # VirtualMachineScaleSet restart (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_sets.restart(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        result = result.result()
    +
    +        # VirtualMachineScaleSet power off (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_sets.power_off(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        result = result.result()
    +
    +        # VirtualMachineScaleSet start (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_sets.start(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        result = result.result()
    +
    +        # Update VMSS vm extension (TODO: need swagger file)
    +        # BODY = {
    +        #   "auto_upgrade_minor_version": True,
    +        #   "publisher": "Microsoft.Azure.NetworkWatcher",
    +        #   "virtual_machine_extension_type": "NetworkWatcherAgentWindows",
    +        #   "type_handler_version": "1.4",
    +        # }
    +        # result = self.mgmt_client.virtual_machine_scale_set_vm_extensions.update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID, VIRTUAL_MACHINE_EXTENSION_NAME, BODY)
    +
    +        # Delete VMSS vm exnteison (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_vm_extensions.delete(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID, VIRTUAL_MACHINE_EXTENSION_NAME)
    +
    +        # VMSSVMRunCommand[post]
    +        # BODY = {
    +        #   "command_id": "RunPowerShellScript"
    +        # }
    +        # INSTANCE_ID = INSTANCE_ID_2
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.run_command(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID, BODY)
    +        # result = result.result()
    +
    +        # Delete instances of virtual machine scale sets (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_sets.delete_instances(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_IDS)
    +        # result = result.result()
    +
    +        # Update virtual machine sacle set extension (TODO: need swagger file)
    +        BODY = {
    +          "auto_upgrade_minor_version": True,
    +        }
    +        result = self.mgmt_client.virtual_machine_scale_set_extensions.update(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, VMSS_EXTENSION_NAME, BODY)
    +
    +        # Delete virtua machine scale set extension (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_set_extensions.delete(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, VMSS_EXTENSION_NAME)
    +        result = result.result()
    +
    +        # VirtualMachineScaleSet stop againe.
    +        result = self.mgmt_client.virtual_machine_scale_sets.power_off(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        result = result.result()
    +
    +
    +        # VirtualMachineRunCommand[post]
    +        BODY = {
    +          "command_id": "RunPowerShellScript"
    +        }
    +        result = self.mgmt_client.virtual_machines.run_command(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +
    +        # VirtualMachine restart (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machines.restart(resource_group.name, VIRTUAL_MACHINE_NAME)
    +        result = result.result()
    +
    +        # VirtualMachine power off (TODO:need swagger file)
    +        result = self.mgmt_client.virtual_machines.power_off(resource_group.name, VIRTUAL_MACHINE_NAME)
    +        result = result.result()
    +
    +        # VirtualMachine start (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machines.start(resource_group.name, VIRTUAL_MACHINE_NAME)
    +        result = result.result()
    +
    +        # Update virtual machine extension (TODO: need swagger file)
    +        BODY = {
    +          "auto_upgrade_minor_version": True,
    +          "instance_view": {
    +            "name": VIRTUAL_MACHINE_EXTENSION_NAME,
    +            "type": "CustomScriptExtension"
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machine_extensions.update(resource_group.name, VIRTUAL_MACHINE_NAME, VIRTUAL_MACHINE_EXTENSION_NAME, BODY)
    +        
    +        # This operation need VM running.
    +        # Delete virtual machine extension (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_extensions.delete(resource_group.name, VIRTUAL_MACHINE_NAME,VIRTUAL_MACHINE_EXTENSION_NAME)
    +        result = result.result()
    +
    +        # VirtualMachine power off again.
    +        result = self.mgmt_client.virtual_machines.power_off(resource_group.name, VIRTUAL_MACHINE_NAME)
    +        result = result.result()
    +
    +        # Update a simple gallery image.[patch]
    +        BODY = {
    +          "os_type": "Windows",
    +          "os_state": "Generalized",
    +          "hyper_vgeneration": "V1",
    +          "identifier": {
    +            "publisher": "myPublisherName",
    +            "offer": "myOfferName",
    +            "sku": "mySkuName"
    +          }
    +        }
    +        result = self.mgmt_client.gallery_images.update(resource_group.name, GALLERY_NAME, IMAGE_NAME, BODY)
    +        result = result.result()
    +
    +        # Export logs which contain all throttled Api requests made to Compute Resource Provider within the given time period.[post]
    +        # BODY = {
    +        #   # "blob_container_sas_uri": "https://somesasuri",
    +        #   "blob_container_sas_uri": SAS_URI,
    +        #   "from_time": "2018-01-21T01:54:06.862601Z",
    +        #   "to_time": "2018-01-23T01:54:06.862601Z",
    +        #   "group_by_operation_name": True,
    +        #   "group_by_resource_name": False
    +        # }
    +        # result = self.mgmt_client.log_analytics.export_throttled_requests(LOCATION_NAME, LOG_ANALYTIC_NAME, BODY)
    +        # result = result.result()
    +
    +        # Revoke access disk (TODO: need swagger file)
    +        result = self.mgmt_client.disks.revoke_access(resource_group.name, DISK_NAME)
    +        result = result.result()
    +
    +        # Redeploy virtual machine scale set vm (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.redeploy(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID)
    +        # result = result.result()
    +
    +        # Redeploy virtual machine scale set (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_sets.redeploy(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        result = result.result()
    +
    +        # Reapply the state of a virtual machine.[post]
    +        result = self.mgmt_client.virtual_machines.reapply(resource_group.name, VIRTUAL_MACHINE_NAME)
    +        result = result.result()
    +
    +        # Redeploy the virtual machine. (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machines.redeploy(resource_group.name, VIRTUAL_MACHINE_NAME)
    +        result = result.result()
    +
    +        # Perform maintenance virtual machine scale set vms (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.perform_maintenance(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID)
    +        # result = result.result()
    +
    +        # TODO: Operation 'performMaintenance' is not allowed on VM 'virtualmachinescalesetname_2' since the Subscription of this VM is not eligible.
    +        # Perform maintenance virtual machine scale set (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_sets.perform_maintenance(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        # result = result.result()
    +
    +        # Reimage a virtual machine scale set vm (TODO: need swagger file)
    +        # BODY = {
    +        #   "temp_disk": True
    +        # }
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.reimage(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID)
    +        # result = result.result()
    +
    +        # Reimage all virtual machine scale sets vm (TODO: need swagger file)
    +        # BODY = {
    +        #   "temp_disk": True
    +        # }
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.reimage_all(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID)
    +        # result = result.result()
    +
    +        # Reimage a virtual machine scale set (TODO: need swagger file)
    +        # BODY = {
    +        #   "temp_disk": True
    +        # }
    +        # result = self.mgmt_client.virtual_machine_scale_sets.reimage(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        # result = result.result()
    +
    +        # Reimage all virtual machine scale sets (TODO: need swagger file)
    +        # BODY = {
    +        #   "temp_disk": True
    +        # }
    +        # result = self.mgmt_client.virtual_machine_scale_sets.reimage_all(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        # result = result.result()
    +
    +        # Force recovery service fabric platform update domain walk (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_sets.force_recovery_service_fabric_platform_update_domain_walk(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +
    +        # Convert to single placement virtual machine scale sets (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_sets.convert_to_single_placement_group(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +
    +        # # Perform maintenance the virtual machine (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machines.perform_maintenance(resource_group.name, VIRTUAL_MACHINE_NAME)
    +        # result = result.result()
    +
    +        # # VirtualMachine convert to managed disks (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machines.convert_to_managed_disks(resource_group.name, VIRTUAL_MACHINE_NAME)
    +        # result = result.result()
    +
    +        # TODO: Message: The Reimage and OSUpgrade Virtual Machine actions require that the virtual machine has Automatic OS Upgrades enabled.
    +        # Reimage a Virtual Machine.[post]
    +        # BODY = {
    +        #   "temp_disk": True
    +        # }
    +        # result = self.mgmt_client.virtual_machines.reimage(resource_group.name, VIRTUAL_MACHINE_NAME)
    +        # result = result.result()
    +
    +        # TODO: NEED KEYVAULT
    +        # Update a disk encryption set.[patch]
    +        # BODY = {
    +        #   # "properties": {
    +        #   #   "active_key": {
    +        #   #     "source_vault": {
    +        #   #       "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.KeyVault/vaults/" + VAULT_NAME + ""
    +        #   #     },
    +        #   #     "key_url": "https://myvmvault.vault-int.azure-int.net/keys/{key}"
    +        #   #   }
    +        #   # },
    +        #   "tags": {
    +        #     "department": "Development",
    +        #     "project": "Encryption"
    +        #   }
    +        # }
    +        # result = self.mgmt_client.disk_encryption_sets.update(resource_group.name, DISK_ENCRYPTION_SET_NAME, BODY)
    +        # result = result.result()
    +
    +        # Update a VM by detaching data disk[patch]
    +        BODY = {
    +          "network_profile": {
    +            "network_interfaces": [
    +              {
    +                # "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/networkInterfaces/" + NETWORK_INTERFACE_NAME + "",
    +                "id": NIC_ID,
    +                "properties": {
    +                  "primary": True
    +                }
    +              }
    +            ]
    +          }
    +        }
    +        result = self.mgmt_client.virtual_machines.update(resource_group.name, VIRTUAL_MACHINE_NAME, BODY)
    +        result = result.result()
    +
    +        # Generalize a Virtual Machine.[post]
    +        result = self.mgmt_client.virtual_machines.generalize(resource_group.name, VIRTUAL_MACHINE_NAME)
    +
    +        # Update a simple gallery.[patch]
    +        BODY = {
    +          "description": "This is the gallery description."
    +        }
    +        result = self.mgmt_client.galleries.update(resource_group.name, GALLERY_NAME, BODY)
    +        result = result.result()
    +
    +        # Updates tags of an Image.[patch]
    +        BODY = {
    +          # "properties": {
    +          #   "source_virtual_machine": {
    +          #     "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Compute/virtualMachines/" + VIRTUAL_MACHINE_NAME + ""
    +          #   },
    +          #   "hyper_vgeneration": "V1"
    +          # },
    +          "tags": {
    +            "department": "HR"
    +          }
    +        }
    +        result = self.mgmt_client.images.update(resource_group.name, IMAGE_NAME, BODY)
    +        result = result.result()
    +
    +        # Deallocate virtual machine (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machines.deallocate(resource_group.name, VIRTUAL_MACHINE_NAME)
    +        result = result.result()
    +
    +        # Deallocate virtual machine scale set vm (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.deallocate(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID)
    +
    +        # Deallocate virtual machine scale set (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_sets.deallocate(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        result = result.result()
    +
    +        # TODO: need finish
    +        # # Delete VirtualMachineScaleSet VM extension.[delete]
    +        # result = self.mgmt_client.virtual_machine_scale_set_vmextensions.delete(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, VIRTUAL_MACHINE_NAME, EXTENSION_NAME)
    +        # result = result.result()
    +
    +        # TODO: need finish
    +        # # Delete a gallery Application Version.[delete]
    +        # result = self.mgmt_client.gallery_application_versions.delete(resource_group.name, GALLERY_NAME, APPLICATION_NAME, VERSION_NAME)
    +        # result = result.result()
    +
    +        # Delete virtual machine set vm (TODO: need swagger file)
    +        # result = self.mgmt_client.virtual_machine_scale_set_vms.delete(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME, INSTANCE_ID)
    +
    +        # Delete virtual machine set (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machine_scale_sets.delete(resource_group.name, VIRTUAL_MACHINE_SCALE_SET_NAME)
    +        result = result.result()
    +
    +        # Delete virtual machine (TODO: need swagger file)
    +        result = self.mgmt_client.virtual_machines.delete(resource_group.name, VIRTUAL_MACHINE_NAME)
    +        result = result.result()
    +
    +        # Delete a gallery Image Version.[delete]
    +        result = self.mgmt_client.gallery_image_versions.delete(resource_group.name, GALLERY_NAME, IMAGE_NAME, VERSION_NAME)
    +        result = result.result()
    +
    +        # Delete a gallery Application.[delete]
    +        result = self.mgmt_client.gallery_applications.delete(resource_group.name, GALLERY_NAME, APPLICATION_NAME)
    +        result = result.result()
    +
    +        # Revoke access snapshot (TODO: need swagger file)
    +        result = self.mgmt_client.snapshots.revoke_access(resource_group.name, SNAPSHOT_NAME)
    +        result = result.result()
    +
    +        # Delete snapshot (TODO: need swagger file)
    +        result = self.mgmt_client.snapshots.delete(resource_group.name, SNAPSHOT_NAME)
    +        result = result.result()
    +
    +        # Delete a proximity placement group.[delete]
    +        result = self.mgmt_client.proximity_placement_groups.delete(resource_group.name, PROXIMITY_PLACEMENT_GROUP_NAME)
    +
    +        # Delete a dedicated host (TODO: need swagger file)
    +        result = self.mgmt_client.dedicated_hosts.delete(resource_group.name, HOST_GROUP_NAME, HOST_NAME)
    +        result = result.result()
    +
    +        # Delete a dedicated host group (TODO: need swagger file)
    +        result = self.mgmt_client.dedicated_host_groups.delete(resource_group.name, HOST_GROUP_NAME)
    +
    +        # TODO: Dont belong here
    +        # Delete Container Service[delete]
    +        # result = self.mgmt_client.container_services.delete(resource_group.name, CONTAINER_SERVICE_NAME)
    +        # result = result.result()
    +
    +        # Delete a gallery image.[delete]
    +        result = self.mgmt_client.gallery_images.delete(resource_group.name, GALLERY_NAME, IMAGE_NAME)
    +        result = result.result()
    +
    +        # TODO: NEED ENCRYPTION SET
    +        # # Delete a disk encryption set.[delete]
    +        # result = self.mgmt_client.disk_encryption_sets.delete(resource_group.name, DISK_ENCRYPTION_SET_NAME)
    +        # result = result.result()
    +
    +        # Delete a image.  (TODO: need a swagger file)
    +        result = self.mgmt_client.images.delete(resource_group.name, IMAGE_NAME)
    +        result = result.result()
    +
    +        # Delete disk (TODO: need swagger file)
    +        result = self.mgmt_client.disks.delete(resource_group.name, DISK_NAME)
    +        result = result.result()
    +
    +        # Delete availability sets (TODO: need a swagger file)
    +        resout = self.mgmt_client.availability_sets.delete(resource_group.name, AVAILABILITY_SET_NAME)
    +
    +        # Delete a gallery.[delete]
    +        result = self.mgmt_client.galleries.delete(resource_group.name, GALLERY_NAME)
    +        result = result.result()
    +
    +
    +#------------------------------------------------------------------------------
    +if __name__ == '__main__':
    +    unittest.main()
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/CHANGELOG.md b/sdk/containerregistry/azure-mgmt-containerregistry/CHANGELOG.md
    index c547bcadbb38..44b911a7c5e2 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/CHANGELOG.md
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/CHANGELOG.md
    @@ -1,5 +1,21 @@
     # Release History
     
    +## 3.0.0rc10 (2020-03-11)
    +
    +**Features**
    +
    +- Model FileTaskRunRequest has a new parameter agent_pool_name
    +- Model RunRequest has a new parameter agent_pool_name
    +- Model RunFilter has a new parameter agent_pool_name
    +- Model DockerBuildRequest has a new parameter agent_pool_name
    +- Model TaskRunRequest has a new parameter agent_pool_name
    +- Model EncodedTaskRunRequest has a new parameter agent_pool_name
    +- Model TaskUpdateParameters has a new parameter agent_pool_name
    +- Model Run has a new parameter agent_pool_name
    +- Model Task has a new parameter agent_pool_name
    +- Added operation TaskRunsOperations.get_details
    +- Added operation group AgentPoolsOperations
    +
     ## 3.0.0rc9 (2020-03-02)
     
     **Features**
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/README.md b/sdk/containerregistry/azure-mgmt-containerregistry/README.md
    index 24d5173ffed2..059fa6c10b93 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/README.md
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/README.md
    @@ -2,7 +2,7 @@
     
     This is the Microsoft Azure Container Registry Client Library.
     This package has been tested with Python 2.7, 3.5, 3.6, 3.7 and 3.8.
    -For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/sdk)
    +For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/)
     
     
     # Usage
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/_container_registry_management_client.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/_container_registry_management_client.py
    index b74b097eb912..550d84bfb6c9 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/_container_registry_management_client.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/_container_registry_management_client.py
    @@ -114,6 +114,22 @@ def models(cls, api_version=DEFAULT_API_VERSION):
                 return models
             raise NotImplementedError("APIVersion {} is not available".format(api_version))
     
    +    @property
    +    def agent_pools(self):
    +        """Instance depends on the API version:
    +
    +           * 2019-06-01-preview: :class:`AgentPoolsOperations`
    +           * 2019-12-01-preview: :class:`AgentPoolsOperations`
    +        """
    +        api_version = self._get_api_version('agent_pools')
    +        if api_version == '2019-06-01-preview':
    +            from .v2019_06_01_preview.operations import AgentPoolsOperations as OperationClass
    +        elif api_version == '2019-12-01-preview':
    +            from .v2019_12_01_preview.operations import AgentPoolsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
         @property
         def build_steps(self):
             """Instance depends on the API version:
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/_container_registry_management_client.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/_container_registry_management_client.py
    index 83f4fb5b4cc1..e87b7289880a 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/_container_registry_management_client.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/_container_registry_management_client.py
    @@ -17,6 +17,7 @@
     from .operations import Operations
     from .operations import ReplicationsOperations
     from .operations import WebhooksOperations
    +from .operations import AgentPoolsOperations
     from .operations import RunsOperations
     from .operations import TaskRunsOperations
     from .operations import TasksOperations
    @@ -39,6 +40,8 @@ class ContainerRegistryManagementClient(SDKClient):
         :vartype replications: azure.mgmt.containerregistry.v2019_06_01_preview.operations.ReplicationsOperations
         :ivar webhooks: Webhooks operations
         :vartype webhooks: azure.mgmt.containerregistry.v2019_06_01_preview.operations.WebhooksOperations
    +    :ivar agent_pools: AgentPools operations
    +    :vartype agent_pools: azure.mgmt.containerregistry.v2019_06_01_preview.operations.AgentPoolsOperations
         :ivar runs: Runs operations
         :vartype runs: azure.mgmt.containerregistry.v2019_06_01_preview.operations.RunsOperations
         :ivar task_runs: TaskRuns operations
    @@ -76,6 +79,8 @@ def __init__(
                 self._client, self.config, self._serialize, self._deserialize)
             self.webhooks = WebhooksOperations(
                 self._client, self.config, self._serialize, self._deserialize)
    +        self.agent_pools = AgentPoolsOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
             self.runs = RunsOperations(
                 self._client, self.config, self._serialize, self._deserialize)
             self.task_runs = TaskRunsOperations(
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/__init__.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/__init__.py
    index 057f2076e513..9cd6d5e6ec38 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/__init__.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/__init__.py
    @@ -12,6 +12,9 @@
     try:
         from ._models_py3 import ActiveDirectoryObject
         from ._models_py3 import Actor
    +    from ._models_py3 import AgentPool
    +    from ._models_py3 import AgentPoolQueueStatus
    +    from ._models_py3 import AgentPoolUpdateParameters
         from ._models_py3 import AgentProperties
         from ._models_py3 import Argument
         from ._models_py3 import AuthInfo
    @@ -119,6 +122,9 @@
     except (SyntaxError, ImportError):
         from ._models import ActiveDirectoryObject
         from ._models import Actor
    +    from ._models import AgentPool
    +    from ._models import AgentPoolQueueStatus
    +    from ._models import AgentPoolUpdateParameters
         from ._models import AgentProperties
         from ._models import Argument
         from ._models import AuthInfo
    @@ -223,6 +229,7 @@
         from ._models import Webhook
         from ._models import WebhookCreateParameters
         from ._models import WebhookUpdateParameters
    +from ._paged_models import AgentPoolPaged
     from ._paged_models import EventPaged
     from ._paged_models import OperationDefinitionPaged
     from ._paged_models import RegistryPaged
    @@ -246,9 +253,9 @@
         RegistryUsageUnit,
         WebhookStatus,
         WebhookAction,
    +    OS,
         RunStatus,
         RunType,
    -    OS,
         Architecture,
         Variant,
         ResourceIdentityType,
    @@ -270,6 +277,9 @@
     __all__ = [
         'ActiveDirectoryObject',
         'Actor',
    +    'AgentPool',
    +    'AgentPoolQueueStatus',
    +    'AgentPoolUpdateParameters',
         'AgentProperties',
         'Argument',
         'AuthInfo',
    @@ -379,6 +389,7 @@
         'ReplicationPaged',
         'WebhookPaged',
         'EventPaged',
    +    'AgentPoolPaged',
         'RunPaged',
         'TaskRunPaged',
         'TaskPaged',
    @@ -396,9 +407,9 @@
         'RegistryUsageUnit',
         'WebhookStatus',
         'WebhookAction',
    +    'OS',
         'RunStatus',
         'RunType',
    -    'OS',
         'Architecture',
         'Variant',
         'ResourceIdentityType',
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_container_registry_management_client_enums.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_container_registry_management_client_enums.py
    index 4c2a8c859503..63e6bb6d8314 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_container_registry_management_client_enums.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_container_registry_management_client_enums.py
    @@ -93,6 +93,12 @@ class WebhookAction(str, Enum):
         chart_delete = "chart_delete"
     
     
    +class OS(str, Enum):
    +
    +    windows = "Windows"
    +    linux = "Linux"
    +
    +
     class RunStatus(str, Enum):
     
         queued = "Queued"
    @@ -113,12 +119,6 @@ class RunType(str, Enum):
         auto_run = "AutoRun"
     
     
    -class OS(str, Enum):
    -
    -    windows = "Windows"
    -    linux = "Linux"
    -
    -
     class Architecture(str, Enum):
     
         amd64 = "amd64"
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_models.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_models.py
    index 06449a7a1acb..314321af4eb3 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_models.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_models.py
    @@ -56,6 +56,155 @@ def __init__(self, **kwargs):
             self.name = kwargs.get('name', None)
     
     
    +class Resource(Model):
    +    """An Azure resource.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource ID.
    +    :vartype id: str
    +    :ivar name: The name of the resource.
    +    :vartype name: str
    +    :ivar type: The type of the resource.
    +    :vartype type: str
    +    :param location: Required. The location of the resource. This cannot be
    +     changed after the resource is created.
    +    :type location: str
    +    :param tags: The tags of the resource.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.location = kwargs.get('location', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class AgentPool(Resource):
    +    """The agentpool that has the ARM resource and properties.
    +    The agentpool will have all information to create an agent pool.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource ID.
    +    :vartype id: str
    +    :ivar name: The name of the resource.
    +    :vartype name: str
    +    :ivar type: The type of the resource.
    +    :vartype type: str
    +    :param location: Required. The location of the resource. This cannot be
    +     changed after the resource is created.
    +    :type location: str
    +    :param tags: The tags of the resource.
    +    :type tags: dict[str, str]
    +    :param count: The count of agent machine
    +    :type count: int
    +    :param tier: The Tier of agent machine
    +    :type tier: str
    +    :param os: The OS of agent machine. Possible values include: 'Windows',
    +     'Linux'
    +    :type os: str or
    +     ~azure.mgmt.containerregistry.v2019_06_01_preview.models.OS
    +    :param virtual_network_subnet_resource_id: The Virtual Network Subnet
    +     Resource Id of the agent machine
    +    :type virtual_network_subnet_resource_id: str
    +    :ivar provisioning_state: The provisioning state of this agent pool.
    +     Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Failed', 'Canceled'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.containerregistry.v2019_06_01_preview.models.ProvisioningState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'count': {'key': 'properties.count', 'type': 'int'},
    +        'tier': {'key': 'properties.tier', 'type': 'str'},
    +        'os': {'key': 'properties.os', 'type': 'str'},
    +        'virtual_network_subnet_resource_id': {'key': 'properties.virtualNetworkSubnetResourceId', 'type': 'str'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AgentPool, self).__init__(**kwargs)
    +        self.count = kwargs.get('count', None)
    +        self.tier = kwargs.get('tier', None)
    +        self.os = kwargs.get('os', None)
    +        self.virtual_network_subnet_resource_id = kwargs.get('virtual_network_subnet_resource_id', None)
    +        self.provisioning_state = None
    +
    +
    +class AgentPoolQueueStatus(Model):
    +    """The QueueStatus of Agent Pool.
    +
    +    :param count: The number of pending runs in the queue
    +    :type count: int
    +    """
    +
    +    _attribute_map = {
    +        'count': {'key': 'count', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AgentPoolQueueStatus, self).__init__(**kwargs)
    +        self.count = kwargs.get('count', None)
    +
    +
    +class AgentPoolUpdateParameters(Model):
    +    """The parameters for updating an agent pool.
    +
    +    :param count: The count of agent machine
    +    :type count: int
    +    :param tags: The ARM resource tags.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'count': {'key': 'properties.count', 'type': 'int'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AgentPoolUpdateParameters, self).__init__(**kwargs)
    +        self.count = kwargs.get('count', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
     class AgentProperties(Model):
         """The properties that determine the run agent configuration.
     
    @@ -420,6 +569,8 @@ class RunRequest(Model):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         """
    @@ -430,6 +581,7 @@ class RunRequest(Model):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
         }
     
    @@ -440,6 +592,7 @@ class RunRequest(Model):
         def __init__(self, **kwargs):
             super(RunRequest, self).__init__(**kwargs)
             self.is_archive_enabled = kwargs.get('is_archive_enabled', False)
    +        self.agent_pool_name = kwargs.get('agent_pool_name', None)
             self.type = None
     
     
    @@ -451,6 +604,8 @@ class DockerBuildRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param image_names: The fully qualified image names including the
    @@ -500,6 +655,7 @@ class DockerBuildRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'image_names': {'key': 'imageNames', 'type': '[str]'},
             'is_push_enabled': {'key': 'isPushEnabled', 'type': 'bool'},
    @@ -755,6 +911,8 @@ class EncodedTaskRunRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param encoded_task_content: Required. Base64 encoded value of the
    @@ -796,6 +954,7 @@ class EncodedTaskRunRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'encoded_task_content': {'key': 'encodedTaskContent', 'type': 'str'},
             'encoded_values_content': {'key': 'encodedValuesContent', 'type': 'str'},
    @@ -1139,6 +1298,8 @@ class FileTaskRunRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param task_file_path: Required. The template/definition file path
    @@ -1180,6 +1341,7 @@ class FileTaskRunRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'task_file_path': {'key': 'taskFilePath', 'type': 'str'},
             'values_file_path': {'key': 'valuesFilePath', 'type': 'str'},
    @@ -1946,51 +2108,6 @@ def __init__(self, **kwargs):
             self.name = kwargs.get('name', None)
     
     
    -class Resource(Model):
    -    """An Azure resource.
    -
    -    Variables are only populated by the server, and will be ignored when
    -    sending a request.
    -
    -    All required parameters must be populated in order to send to Azure.
    -
    -    :ivar id: The resource ID.
    -    :vartype id: str
    -    :ivar name: The name of the resource.
    -    :vartype name: str
    -    :ivar type: The type of the resource.
    -    :vartype type: str
    -    :param location: Required. The location of the resource. This cannot be
    -     changed after the resource is created.
    -    :type location: str
    -    :param tags: The tags of the resource.
    -    :type tags: dict[str, str]
    -    """
    -
    -    _validation = {
    -        'id': {'readonly': True},
    -        'name': {'readonly': True},
    -        'type': {'readonly': True},
    -        'location': {'required': True},
    -    }
    -
    -    _attribute_map = {
    -        'id': {'key': 'id', 'type': 'str'},
    -        'name': {'key': 'name', 'type': 'str'},
    -        'type': {'key': 'type', 'type': 'str'},
    -        'location': {'key': 'location', 'type': 'str'},
    -        'tags': {'key': 'tags', 'type': '{str}'},
    -    }
    -
    -    def __init__(self, **kwargs):
    -        super(Resource, self).__init__(**kwargs)
    -        self.id = None
    -        self.name = None
    -        self.type = None
    -        self.location = kwargs.get('location', None)
    -        self.tags = kwargs.get('tags', None)
    -
    -
     class Registry(Resource):
         """An object that represents a container registry.
     
    @@ -2435,6 +2552,8 @@ class Run(ProxyResource):
          'QuickRun', 'AutoBuild', 'AutoRun'
         :type run_type: str or
          ~azure.mgmt.containerregistry.v2019_06_01_preview.models.RunType
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param create_time: The time the run was scheduled.
         :type create_time: datetime
         :param start_time: The time the run started.
    @@ -2500,6 +2619,7 @@ class Run(ProxyResource):
             'status': {'key': 'properties.status', 'type': 'str'},
             'last_updated_time': {'key': 'properties.lastUpdatedTime', 'type': 'iso-8601'},
             'run_type': {'key': 'properties.runType', 'type': 'str'},
    +        'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'},
             'create_time': {'key': 'properties.createTime', 'type': 'iso-8601'},
             'start_time': {'key': 'properties.startTime', 'type': 'iso-8601'},
             'finish_time': {'key': 'properties.finishTime', 'type': 'iso-8601'},
    @@ -2524,6 +2644,7 @@ def __init__(self, **kwargs):
             self.status = kwargs.get('status', None)
             self.last_updated_time = kwargs.get('last_updated_time', None)
             self.run_type = kwargs.get('run_type', None)
    +        self.agent_pool_name = kwargs.get('agent_pool_name', None)
             self.create_time = kwargs.get('create_time', None)
             self.start_time = kwargs.get('start_time', None)
             self.finish_time = kwargs.get('finish_time', None)
    @@ -2569,6 +2690,9 @@ class RunFilter(Model):
         :type is_archive_enabled: bool
         :param task_name: The name of the task that the run corresponds to.
         :type task_name: str
    +    :param agent_pool_name: The name of the agent pool that the run
    +     corresponds to.
    +    :type agent_pool_name: str
         """
     
         _attribute_map = {
    @@ -2580,6 +2704,7 @@ class RunFilter(Model):
             'output_image_manifests': {'key': 'outputImageManifests', 'type': 'str'},
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
             'task_name': {'key': 'taskName', 'type': 'str'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
         }
     
         def __init__(self, **kwargs):
    @@ -2592,6 +2717,7 @@ def __init__(self, **kwargs):
             self.output_image_manifests = kwargs.get('output_image_manifests', None)
             self.is_archive_enabled = kwargs.get('is_archive_enabled', None)
             self.task_name = kwargs.get('task_name', None)
    +        self.agent_pool_name = kwargs.get('agent_pool_name', None)
     
     
     class RunGetLogResult(Model):
    @@ -3217,6 +3343,8 @@ class Task(Resource):
         :param agent_configuration: The machine configuration of the run agent.
         :type agent_configuration:
          ~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentProperties
    +    :param agent_pool_name: The dedicated agent pool for the task.
    +    :type agent_pool_name: str
         :param timeout: Run timeout in seconds. Default value: 3600 .
         :type timeout: int
         :param step: Required. The properties of a task step.
    @@ -3255,6 +3383,7 @@ class Task(Resource):
             'status': {'key': 'properties.status', 'type': 'str'},
             'platform': {'key': 'properties.platform', 'type': 'PlatformProperties'},
             'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'},
    +        'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'},
             'timeout': {'key': 'properties.timeout', 'type': 'int'},
             'step': {'key': 'properties.step', 'type': 'TaskStepProperties'},
             'trigger': {'key': 'properties.trigger', 'type': 'TriggerProperties'},
    @@ -3269,6 +3398,7 @@ def __init__(self, **kwargs):
             self.status = kwargs.get('status', None)
             self.platform = kwargs.get('platform', None)
             self.agent_configuration = kwargs.get('agent_configuration', None)
    +        self.agent_pool_name = kwargs.get('agent_pool_name', None)
             self.timeout = kwargs.get('timeout', 3600)
             self.step = kwargs.get('step', None)
             self.trigger = kwargs.get('trigger', None)
    @@ -3353,6 +3483,8 @@ class TaskRunRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param task_id: Required. The resource ID of task against which run has to
    @@ -3371,6 +3503,7 @@ class TaskRunRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'task_id': {'key': 'taskId', 'type': 'str'},
             'override_task_step_properties': {'key': 'overrideTaskStepProperties', 'type': 'OverrideTaskStepProperties'},
    @@ -3431,6 +3564,8 @@ class TaskUpdateParameters(Model):
         :param agent_configuration: The machine configuration of the run agent.
         :type agent_configuration:
          ~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentProperties
    +    :param agent_pool_name: The dedicated agent pool for the task.
    +    :type agent_pool_name: str
         :param timeout: Run timeout in seconds.
         :type timeout: int
         :param step: The properties for updating a task step.
    @@ -3452,6 +3587,7 @@ class TaskUpdateParameters(Model):
             'status': {'key': 'properties.status', 'type': 'str'},
             'platform': {'key': 'properties.platform', 'type': 'PlatformUpdateParameters'},
             'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'},
    +        'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'},
             'timeout': {'key': 'properties.timeout', 'type': 'int'},
             'step': {'key': 'properties.step', 'type': 'TaskStepUpdateParameters'},
             'trigger': {'key': 'properties.trigger', 'type': 'TriggerUpdateParameters'},
    @@ -3465,6 +3601,7 @@ def __init__(self, **kwargs):
             self.status = kwargs.get('status', None)
             self.platform = kwargs.get('platform', None)
             self.agent_configuration = kwargs.get('agent_configuration', None)
    +        self.agent_pool_name = kwargs.get('agent_pool_name', None)
             self.timeout = kwargs.get('timeout', None)
             self.step = kwargs.get('step', None)
             self.trigger = kwargs.get('trigger', None)
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_models_py3.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_models_py3.py
    index 260f2a3bd805..db49ad0e8972 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_models_py3.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_models_py3.py
    @@ -56,6 +56,155 @@ def __init__(self, *, name: str=None, **kwargs) -> None:
             self.name = name
     
     
    +class Resource(Model):
    +    """An Azure resource.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource ID.
    +    :vartype id: str
    +    :ivar name: The name of the resource.
    +    :vartype name: str
    +    :ivar type: The type of the resource.
    +    :vartype type: str
    +    :param location: Required. The location of the resource. This cannot be
    +     changed after the resource is created.
    +    :type location: str
    +    :param tags: The tags of the resource.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, location: str, tags=None, **kwargs) -> None:
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.location = location
    +        self.tags = tags
    +
    +
    +class AgentPool(Resource):
    +    """The agentpool that has the ARM resource and properties.
    +    The agentpool will have all information to create an agent pool.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource ID.
    +    :vartype id: str
    +    :ivar name: The name of the resource.
    +    :vartype name: str
    +    :ivar type: The type of the resource.
    +    :vartype type: str
    +    :param location: Required. The location of the resource. This cannot be
    +     changed after the resource is created.
    +    :type location: str
    +    :param tags: The tags of the resource.
    +    :type tags: dict[str, str]
    +    :param count: The count of agent machine
    +    :type count: int
    +    :param tier: The Tier of agent machine
    +    :type tier: str
    +    :param os: The OS of agent machine. Possible values include: 'Windows',
    +     'Linux'
    +    :type os: str or
    +     ~azure.mgmt.containerregistry.v2019_06_01_preview.models.OS
    +    :param virtual_network_subnet_resource_id: The Virtual Network Subnet
    +     Resource Id of the agent machine
    +    :type virtual_network_subnet_resource_id: str
    +    :ivar provisioning_state: The provisioning state of this agent pool.
    +     Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Failed', 'Canceled'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.containerregistry.v2019_06_01_preview.models.ProvisioningState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'count': {'key': 'properties.count', 'type': 'int'},
    +        'tier': {'key': 'properties.tier', 'type': 'str'},
    +        'os': {'key': 'properties.os', 'type': 'str'},
    +        'virtual_network_subnet_resource_id': {'key': 'properties.virtualNetworkSubnetResourceId', 'type': 'str'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, location: str, tags=None, count: int=None, tier: str=None, os=None, virtual_network_subnet_resource_id: str=None, **kwargs) -> None:
    +        super(AgentPool, self).__init__(location=location, tags=tags, **kwargs)
    +        self.count = count
    +        self.tier = tier
    +        self.os = os
    +        self.virtual_network_subnet_resource_id = virtual_network_subnet_resource_id
    +        self.provisioning_state = None
    +
    +
    +class AgentPoolQueueStatus(Model):
    +    """The QueueStatus of Agent Pool.
    +
    +    :param count: The number of pending runs in the queue
    +    :type count: int
    +    """
    +
    +    _attribute_map = {
    +        'count': {'key': 'count', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, count: int=None, **kwargs) -> None:
    +        super(AgentPoolQueueStatus, self).__init__(**kwargs)
    +        self.count = count
    +
    +
    +class AgentPoolUpdateParameters(Model):
    +    """The parameters for updating an agent pool.
    +
    +    :param count: The count of agent machine
    +    :type count: int
    +    :param tags: The ARM resource tags.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'count': {'key': 'properties.count', 'type': 'int'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, count: int=None, tags=None, **kwargs) -> None:
    +        super(AgentPoolUpdateParameters, self).__init__(**kwargs)
    +        self.count = count
    +        self.tags = tags
    +
    +
     class AgentProperties(Model):
         """The properties that determine the run agent configuration.
     
    @@ -420,6 +569,8 @@ class RunRequest(Model):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         """
    @@ -430,6 +581,7 @@ class RunRequest(Model):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
         }
     
    @@ -437,9 +589,10 @@ class RunRequest(Model):
             'type': {'DockerBuildRequest': 'DockerBuildRequest', 'FileTaskRunRequest': 'FileTaskRunRequest', 'TaskRunRequest': 'TaskRunRequest', 'EncodedTaskRunRequest': 'EncodedTaskRunRequest'}
         }
     
    -    def __init__(self, *, is_archive_enabled: bool=False, **kwargs) -> None:
    +    def __init__(self, *, is_archive_enabled: bool=False, agent_pool_name: str=None, **kwargs) -> None:
             super(RunRequest, self).__init__(**kwargs)
             self.is_archive_enabled = is_archive_enabled
    +        self.agent_pool_name = agent_pool_name
             self.type = None
     
     
    @@ -451,6 +604,8 @@ class DockerBuildRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param image_names: The fully qualified image names including the
    @@ -500,6 +655,7 @@ class DockerBuildRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'image_names': {'key': 'imageNames', 'type': '[str]'},
             'is_push_enabled': {'key': 'isPushEnabled', 'type': 'bool'},
    @@ -514,8 +670,8 @@ class DockerBuildRequest(RunRequest):
             'credentials': {'key': 'credentials', 'type': 'Credentials'},
         }
     
    -    def __init__(self, *, docker_file_path: str, platform, is_archive_enabled: bool=False, image_names=None, is_push_enabled: bool=True, no_cache: bool=False, target: str=None, arguments=None, timeout: int=3600, agent_configuration=None, source_location: str=None, credentials=None, **kwargs) -> None:
    -        super(DockerBuildRequest, self).__init__(is_archive_enabled=is_archive_enabled, **kwargs)
    +    def __init__(self, *, docker_file_path: str, platform, is_archive_enabled: bool=False, agent_pool_name: str=None, image_names=None, is_push_enabled: bool=True, no_cache: bool=False, target: str=None, arguments=None, timeout: int=3600, agent_configuration=None, source_location: str=None, credentials=None, **kwargs) -> None:
    +        super(DockerBuildRequest, self).__init__(is_archive_enabled=is_archive_enabled, agent_pool_name=agent_pool_name, **kwargs)
             self.image_names = image_names
             self.is_push_enabled = is_push_enabled
             self.no_cache = no_cache
    @@ -755,6 +911,8 @@ class EncodedTaskRunRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param encoded_task_content: Required. Base64 encoded value of the
    @@ -796,6 +954,7 @@ class EncodedTaskRunRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'encoded_task_content': {'key': 'encodedTaskContent', 'type': 'str'},
             'encoded_values_content': {'key': 'encodedValuesContent', 'type': 'str'},
    @@ -807,8 +966,8 @@ class EncodedTaskRunRequest(RunRequest):
             'credentials': {'key': 'credentials', 'type': 'Credentials'},
         }
     
    -    def __init__(self, *, encoded_task_content: str, platform, is_archive_enabled: bool=False, encoded_values_content: str=None, values=None, timeout: int=3600, agent_configuration=None, source_location: str=None, credentials=None, **kwargs) -> None:
    -        super(EncodedTaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, **kwargs)
    +    def __init__(self, *, encoded_task_content: str, platform, is_archive_enabled: bool=False, agent_pool_name: str=None, encoded_values_content: str=None, values=None, timeout: int=3600, agent_configuration=None, source_location: str=None, credentials=None, **kwargs) -> None:
    +        super(EncodedTaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, agent_pool_name=agent_pool_name, **kwargs)
             self.encoded_task_content = encoded_task_content
             self.encoded_values_content = encoded_values_content
             self.values = values
    @@ -1139,6 +1298,8 @@ class FileTaskRunRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param task_file_path: Required. The template/definition file path
    @@ -1180,6 +1341,7 @@ class FileTaskRunRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'task_file_path': {'key': 'taskFilePath', 'type': 'str'},
             'values_file_path': {'key': 'valuesFilePath', 'type': 'str'},
    @@ -1191,8 +1353,8 @@ class FileTaskRunRequest(RunRequest):
             'credentials': {'key': 'credentials', 'type': 'Credentials'},
         }
     
    -    def __init__(self, *, task_file_path: str, platform, is_archive_enabled: bool=False, values_file_path: str=None, values=None, timeout: int=3600, agent_configuration=None, source_location: str=None, credentials=None, **kwargs) -> None:
    -        super(FileTaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, **kwargs)
    +    def __init__(self, *, task_file_path: str, platform, is_archive_enabled: bool=False, agent_pool_name: str=None, values_file_path: str=None, values=None, timeout: int=3600, agent_configuration=None, source_location: str=None, credentials=None, **kwargs) -> None:
    +        super(FileTaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, agent_pool_name=agent_pool_name, **kwargs)
             self.task_file_path = task_file_path
             self.values_file_path = values_file_path
             self.values = values
    @@ -1946,51 +2108,6 @@ def __init__(self, *, name, **kwargs) -> None:
             self.name = name
     
     
    -class Resource(Model):
    -    """An Azure resource.
    -
    -    Variables are only populated by the server, and will be ignored when
    -    sending a request.
    -
    -    All required parameters must be populated in order to send to Azure.
    -
    -    :ivar id: The resource ID.
    -    :vartype id: str
    -    :ivar name: The name of the resource.
    -    :vartype name: str
    -    :ivar type: The type of the resource.
    -    :vartype type: str
    -    :param location: Required. The location of the resource. This cannot be
    -     changed after the resource is created.
    -    :type location: str
    -    :param tags: The tags of the resource.
    -    :type tags: dict[str, str]
    -    """
    -
    -    _validation = {
    -        'id': {'readonly': True},
    -        'name': {'readonly': True},
    -        'type': {'readonly': True},
    -        'location': {'required': True},
    -    }
    -
    -    _attribute_map = {
    -        'id': {'key': 'id', 'type': 'str'},
    -        'name': {'key': 'name', 'type': 'str'},
    -        'type': {'key': 'type', 'type': 'str'},
    -        'location': {'key': 'location', 'type': 'str'},
    -        'tags': {'key': 'tags', 'type': '{str}'},
    -    }
    -
    -    def __init__(self, *, location: str, tags=None, **kwargs) -> None:
    -        super(Resource, self).__init__(**kwargs)
    -        self.id = None
    -        self.name = None
    -        self.type = None
    -        self.location = location
    -        self.tags = tags
    -
    -
     class Registry(Resource):
         """An object that represents a container registry.
     
    @@ -2435,6 +2552,8 @@ class Run(ProxyResource):
          'QuickRun', 'AutoBuild', 'AutoRun'
         :type run_type: str or
          ~azure.mgmt.containerregistry.v2019_06_01_preview.models.RunType
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param create_time: The time the run was scheduled.
         :type create_time: datetime
         :param start_time: The time the run started.
    @@ -2500,6 +2619,7 @@ class Run(ProxyResource):
             'status': {'key': 'properties.status', 'type': 'str'},
             'last_updated_time': {'key': 'properties.lastUpdatedTime', 'type': 'iso-8601'},
             'run_type': {'key': 'properties.runType', 'type': 'str'},
    +        'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'},
             'create_time': {'key': 'properties.createTime', 'type': 'iso-8601'},
             'start_time': {'key': 'properties.startTime', 'type': 'iso-8601'},
             'finish_time': {'key': 'properties.finishTime', 'type': 'iso-8601'},
    @@ -2518,12 +2638,13 @@ class Run(ProxyResource):
             'is_archive_enabled': {'key': 'properties.isArchiveEnabled', 'type': 'bool'},
         }
     
    -    def __init__(self, *, run_id: str=None, status=None, last_updated_time=None, run_type=None, create_time=None, start_time=None, finish_time=None, output_images=None, task: str=None, image_update_trigger=None, source_trigger=None, timer_trigger=None, platform=None, agent_configuration=None, source_registry_auth: str=None, custom_registries=None, update_trigger_token: str=None, provisioning_state=None, is_archive_enabled: bool=False, **kwargs) -> None:
    +    def __init__(self, *, run_id: str=None, status=None, last_updated_time=None, run_type=None, agent_pool_name: str=None, create_time=None, start_time=None, finish_time=None, output_images=None, task: str=None, image_update_trigger=None, source_trigger=None, timer_trigger=None, platform=None, agent_configuration=None, source_registry_auth: str=None, custom_registries=None, update_trigger_token: str=None, provisioning_state=None, is_archive_enabled: bool=False, **kwargs) -> None:
             super(Run, self).__init__(**kwargs)
             self.run_id = run_id
             self.status = status
             self.last_updated_time = last_updated_time
             self.run_type = run_type
    +        self.agent_pool_name = agent_pool_name
             self.create_time = create_time
             self.start_time = start_time
             self.finish_time = finish_time
    @@ -2569,6 +2690,9 @@ class RunFilter(Model):
         :type is_archive_enabled: bool
         :param task_name: The name of the task that the run corresponds to.
         :type task_name: str
    +    :param agent_pool_name: The name of the agent pool that the run
    +     corresponds to.
    +    :type agent_pool_name: str
         """
     
         _attribute_map = {
    @@ -2580,9 +2704,10 @@ class RunFilter(Model):
             'output_image_manifests': {'key': 'outputImageManifests', 'type': 'str'},
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
             'task_name': {'key': 'taskName', 'type': 'str'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
         }
     
    -    def __init__(self, *, run_id: str=None, run_type=None, status=None, create_time=None, finish_time=None, output_image_manifests: str=None, is_archive_enabled: bool=None, task_name: str=None, **kwargs) -> None:
    +    def __init__(self, *, run_id: str=None, run_type=None, status=None, create_time=None, finish_time=None, output_image_manifests: str=None, is_archive_enabled: bool=None, task_name: str=None, agent_pool_name: str=None, **kwargs) -> None:
             super(RunFilter, self).__init__(**kwargs)
             self.run_id = run_id
             self.run_type = run_type
    @@ -2592,6 +2717,7 @@ def __init__(self, *, run_id: str=None, run_type=None, status=None, create_time=
             self.output_image_manifests = output_image_manifests
             self.is_archive_enabled = is_archive_enabled
             self.task_name = task_name
    +        self.agent_pool_name = agent_pool_name
     
     
     class RunGetLogResult(Model):
    @@ -3217,6 +3343,8 @@ class Task(Resource):
         :param agent_configuration: The machine configuration of the run agent.
         :type agent_configuration:
          ~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentProperties
    +    :param agent_pool_name: The dedicated agent pool for the task.
    +    :type agent_pool_name: str
         :param timeout: Run timeout in seconds. Default value: 3600 .
         :type timeout: int
         :param step: Required. The properties of a task step.
    @@ -3255,13 +3383,14 @@ class Task(Resource):
             'status': {'key': 'properties.status', 'type': 'str'},
             'platform': {'key': 'properties.platform', 'type': 'PlatformProperties'},
             'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'},
    +        'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'},
             'timeout': {'key': 'properties.timeout', 'type': 'int'},
             'step': {'key': 'properties.step', 'type': 'TaskStepProperties'},
             'trigger': {'key': 'properties.trigger', 'type': 'TriggerProperties'},
             'credentials': {'key': 'properties.credentials', 'type': 'Credentials'},
         }
     
    -    def __init__(self, *, location: str, platform, step, tags=None, identity=None, status=None, agent_configuration=None, timeout: int=3600, trigger=None, credentials=None, **kwargs) -> None:
    +    def __init__(self, *, location: str, platform, step, tags=None, identity=None, status=None, agent_configuration=None, agent_pool_name: str=None, timeout: int=3600, trigger=None, credentials=None, **kwargs) -> None:
             super(Task, self).__init__(location=location, tags=tags, **kwargs)
             self.identity = identity
             self.provisioning_state = None
    @@ -3269,6 +3398,7 @@ def __init__(self, *, location: str, platform, step, tags=None, identity=None, s
             self.status = status
             self.platform = platform
             self.agent_configuration = agent_configuration
    +        self.agent_pool_name = agent_pool_name
             self.timeout = timeout
             self.step = step
             self.trigger = trigger
    @@ -3353,6 +3483,8 @@ class TaskRunRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param task_id: Required. The resource ID of task against which run has to
    @@ -3371,13 +3503,14 @@ class TaskRunRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'task_id': {'key': 'taskId', 'type': 'str'},
             'override_task_step_properties': {'key': 'overrideTaskStepProperties', 'type': 'OverrideTaskStepProperties'},
         }
     
    -    def __init__(self, *, task_id: str, is_archive_enabled: bool=False, override_task_step_properties=None, **kwargs) -> None:
    -        super(TaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, **kwargs)
    +    def __init__(self, *, task_id: str, is_archive_enabled: bool=False, agent_pool_name: str=None, override_task_step_properties=None, **kwargs) -> None:
    +        super(TaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, agent_pool_name=agent_pool_name, **kwargs)
             self.task_id = task_id
             self.override_task_step_properties = override_task_step_properties
             self.type = 'TaskRunRequest'
    @@ -3431,6 +3564,8 @@ class TaskUpdateParameters(Model):
         :param agent_configuration: The machine configuration of the run agent.
         :type agent_configuration:
          ~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentProperties
    +    :param agent_pool_name: The dedicated agent pool for the task.
    +    :type agent_pool_name: str
         :param timeout: Run timeout in seconds.
         :type timeout: int
         :param step: The properties for updating a task step.
    @@ -3452,6 +3587,7 @@ class TaskUpdateParameters(Model):
             'status': {'key': 'properties.status', 'type': 'str'},
             'platform': {'key': 'properties.platform', 'type': 'PlatformUpdateParameters'},
             'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'},
    +        'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'},
             'timeout': {'key': 'properties.timeout', 'type': 'int'},
             'step': {'key': 'properties.step', 'type': 'TaskStepUpdateParameters'},
             'trigger': {'key': 'properties.trigger', 'type': 'TriggerUpdateParameters'},
    @@ -3459,12 +3595,13 @@ class TaskUpdateParameters(Model):
             'tags': {'key': 'tags', 'type': '{str}'},
         }
     
    -    def __init__(self, *, identity=None, status=None, platform=None, agent_configuration=None, timeout: int=None, step=None, trigger=None, credentials=None, tags=None, **kwargs) -> None:
    +    def __init__(self, *, identity=None, status=None, platform=None, agent_configuration=None, agent_pool_name: str=None, timeout: int=None, step=None, trigger=None, credentials=None, tags=None, **kwargs) -> None:
             super(TaskUpdateParameters, self).__init__(**kwargs)
             self.identity = identity
             self.status = status
             self.platform = platform
             self.agent_configuration = agent_configuration
    +        self.agent_pool_name = agent_pool_name
             self.timeout = timeout
             self.step = step
             self.trigger = trigger
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_paged_models.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_paged_models.py
    index 62da7b150809..322635ae0824 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_paged_models.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/models/_paged_models.py
    @@ -77,6 +77,19 @@ class EventPaged(Paged):
         def __init__(self, *args, **kwargs):
     
             super(EventPaged, self).__init__(*args, **kwargs)
    +class AgentPoolPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`AgentPool ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[AgentPool]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(AgentPoolPaged, self).__init__(*args, **kwargs)
     class RunPaged(Paged):
         """
         A paging container for iterating over a list of :class:`Run ` object
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/operations/__init__.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/operations/__init__.py
    index fe07fc43b190..ee3c5c8427b6 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/operations/__init__.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/operations/__init__.py
    @@ -13,6 +13,7 @@
     from ._operations import Operations
     from ._replications_operations import ReplicationsOperations
     from ._webhooks_operations import WebhooksOperations
    +from ._agent_pools_operations import AgentPoolsOperations
     from ._runs_operations import RunsOperations
     from ._task_runs_operations import TaskRunsOperations
     from ._tasks_operations import TasksOperations
    @@ -24,6 +25,7 @@
         'Operations',
         'ReplicationsOperations',
         'WebhooksOperations',
    +    'AgentPoolsOperations',
         'RunsOperations',
         'TaskRunsOperations',
         'TasksOperations',
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/operations/_agent_pools_operations.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/operations/_agent_pools_operations.py
    new file mode 100644
    index 000000000000..6e8c584d2310
    --- /dev/null
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/operations/_agent_pools_operations.py
    @@ -0,0 +1,546 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class AgentPoolsOperations(object):
    +    """AgentPoolsOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The client API version. Constant value: "2019-06-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2019-06-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, registry_name, agent_pool_name, custom_headers=None, raw=False, **operation_config):
    +        """Gets the detailed information for a given agent pool.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param agent_pool_name: The name of the agent pool.
    +        :type agent_pool_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: AgentPool or ClientRawResponse if raw=true
    +        :rtype:
    +         ~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentPool or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +            'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'),
    +            'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorSchemaException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('AgentPool', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'}
    +
    +
    +    def _create_initial(
    +            self, resource_group_name, registry_name, agent_pool_name, agent_pool, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +            'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'),
    +            'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(agent_pool, 'AgentPool')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            raise models.ErrorSchemaException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('AgentPool', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('AgentPool', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def create(
    +            self, resource_group_name, registry_name, agent_pool_name, agent_pool, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Creates an agent pool for a container registry with the specified
    +        parameters.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param agent_pool_name: The name of the agent pool.
    +        :type agent_pool_name: str
    +        :param agent_pool: The parameters of an agent pool that needs to
    +         scheduled.
    +        :type agent_pool:
    +         ~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentPool
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns AgentPool or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentPool]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentPool]]
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        raw_result = self._create_initial(
    +            resource_group_name=resource_group_name,
    +            registry_name=registry_name,
    +            agent_pool_name=agent_pool_name,
    +            agent_pool=agent_pool,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('AgentPool', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'}
    +
    +
    +    def _delete_initial(
    +            self, resource_group_name, registry_name, agent_pool_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +            'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'),
    +            'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202, 204]:
    +            raise models.ErrorSchemaException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +
    +    def delete(
    +            self, resource_group_name, registry_name, agent_pool_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Deletes a specified agent pool resource.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param agent_pool_name: The name of the agent pool.
    +        :type agent_pool_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns None or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        raw_result = self._delete_initial(
    +            resource_group_name=resource_group_name,
    +            registry_name=registry_name,
    +            agent_pool_name=agent_pool_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            if raw:
    +                client_raw_response = ClientRawResponse(None, response)
    +                return client_raw_response
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'}
    +
    +
    +    def _update_initial(
    +            self, resource_group_name, registry_name, agent_pool_name, count=None, tags=None, custom_headers=None, raw=False, **operation_config):
    +        update_parameters = models.AgentPoolUpdateParameters(count=count, tags=tags)
    +
    +        # Construct URL
    +        url = self.update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +            'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'),
    +            'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(update_parameters, 'AgentPoolUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            raise models.ErrorSchemaException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('AgentPool', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('AgentPool', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def update(
    +            self, resource_group_name, registry_name, agent_pool_name, count=None, tags=None, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Updates an agent pool with the specified parameters.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param agent_pool_name: The name of the agent pool.
    +        :type agent_pool_name: str
    +        :param count: The count of agent machine
    +        :type count: int
    +        :param tags: The ARM resource tags.
    +        :type tags: dict[str, str]
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns AgentPool or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentPool]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentPool]]
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        raw_result = self._update_initial(
    +            resource_group_name=resource_group_name,
    +            registry_name=registry_name,
    +            agent_pool_name=agent_pool_name,
    +            count=count,
    +            tags=tags,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('AgentPool', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'}
    +
    +    def list(
    +            self, resource_group_name, registry_name, custom_headers=None, raw=False, **operation_config):
    +        """Lists all the agent pools for a specified container registry.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of AgentPool
    +        :rtype:
    +         ~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentPoolPaged[~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentPool]
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +                    'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorSchemaException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.AgentPoolPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools'}
    +
    +    def get_queue_status(
    +            self, resource_group_name, registry_name, agent_pool_name, custom_headers=None, raw=False, **operation_config):
    +        """Gets the count of queued runs for a given agent pool.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param agent_pool_name: The name of the agent pool.
    +        :type agent_pool_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: AgentPoolQueueStatus or ClientRawResponse if raw=true
    +        :rtype:
    +         ~azure.mgmt.containerregistry.v2019_06_01_preview.models.AgentPoolQueueStatus
    +         or ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        # Construct URL
    +        url = self.get_queue_status.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +            'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'),
    +            'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorSchemaException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('AgentPoolQueueStatus', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_queue_status.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}/listQueueStatus'}
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/operations/_task_runs_operations.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/operations/_task_runs_operations.py
    index cada44ad3e40..eed099741e3c 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/operations/_task_runs_operations.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_06_01_preview/operations/_task_runs_operations.py
    @@ -403,6 +403,72 @@ def get_long_running_output(response):
             return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
         update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'}
     
    +    def get_details(
    +            self, resource_group_name, registry_name, task_run_name, custom_headers=None, raw=False, **operation_config):
    +        """Gets the detailed information for a given task run that includes all
    +        secrets.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param task_run_name: The run request name.
    +        :type task_run_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: TaskRun or ClientRawResponse if raw=true
    +        :rtype:
    +         ~azure.mgmt.containerregistry.v2019_06_01_preview.models.TaskRun or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        # Construct URL
    +        url = self.get_details.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +            'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'),
    +            'taskRunName': self._serialize.url("task_run_name", task_run_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorSchemaException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('TaskRun', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_details.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}/listDetails'}
    +
         def list(
                 self, resource_group_name, registry_name, custom_headers=None, raw=False, **operation_config):
             """Lists all the task runs for a specified container registry.
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/_container_registry_management_client.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/_container_registry_management_client.py
    index 24c6279b6d2f..62accd4b246d 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/_container_registry_management_client.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/_container_registry_management_client.py
    @@ -18,6 +18,7 @@
     from .operations import PrivateEndpointConnectionsOperations
     from .operations import ReplicationsOperations
     from .operations import WebhooksOperations
    +from .operations import AgentPoolsOperations
     from .operations import RunsOperations
     from .operations import TaskRunsOperations
     from .operations import TasksOperations
    @@ -42,6 +43,8 @@ class ContainerRegistryManagementClient(SDKClient):
         :vartype replications: azure.mgmt.containerregistry.v2019_12_01_preview.operations.ReplicationsOperations
         :ivar webhooks: Webhooks operations
         :vartype webhooks: azure.mgmt.containerregistry.v2019_12_01_preview.operations.WebhooksOperations
    +    :ivar agent_pools: AgentPools operations
    +    :vartype agent_pools: azure.mgmt.containerregistry.v2019_12_01_preview.operations.AgentPoolsOperations
         :ivar runs: Runs operations
         :vartype runs: azure.mgmt.containerregistry.v2019_12_01_preview.operations.RunsOperations
         :ivar task_runs: TaskRuns operations
    @@ -81,6 +84,8 @@ def __init__(
                 self._client, self.config, self._serialize, self._deserialize)
             self.webhooks = WebhooksOperations(
                 self._client, self.config, self._serialize, self._deserialize)
    +        self.agent_pools = AgentPoolsOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
             self.runs = RunsOperations(
                 self._client, self.config, self._serialize, self._deserialize)
             self.task_runs = TaskRunsOperations(
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/__init__.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/__init__.py
    index 704e5ad09424..e4c3cc73b757 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/__init__.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/__init__.py
    @@ -12,6 +12,9 @@
     try:
         from ._models_py3 import ActiveDirectoryObject
         from ._models_py3 import Actor
    +    from ._models_py3 import AgentPool
    +    from ._models_py3 import AgentPoolQueueStatus
    +    from ._models_py3 import AgentPoolUpdateParameters
         from ._models_py3 import AgentProperties
         from ._models_py3 import Argument
         from ._models_py3 import AuthInfo
    @@ -125,6 +128,9 @@
     except (SyntaxError, ImportError):
         from ._models import ActiveDirectoryObject
         from ._models import Actor
    +    from ._models import AgentPool
    +    from ._models import AgentPoolQueueStatus
    +    from ._models import AgentPoolUpdateParameters
         from ._models import AgentProperties
         from ._models import Argument
         from ._models import AuthInfo
    @@ -235,6 +241,7 @@
         from ._models import Webhook
         from ._models import WebhookCreateParameters
         from ._models import WebhookUpdateParameters
    +from ._paged_models import AgentPoolPaged
     from ._paged_models import EventPaged
     from ._paged_models import OperationDefinitionPaged
     from ._paged_models import PrivateEndpointConnectionPaged
    @@ -264,9 +271,9 @@
         RegistryUsageUnit,
         WebhookStatus,
         WebhookAction,
    +    OS,
         RunStatus,
         RunType,
    -    OS,
         Architecture,
         Variant,
         TaskStatus,
    @@ -287,6 +294,9 @@
     __all__ = [
         'ActiveDirectoryObject',
         'Actor',
    +    'AgentPool',
    +    'AgentPoolQueueStatus',
    +    'AgentPoolUpdateParameters',
         'AgentProperties',
         'Argument',
         'AuthInfo',
    @@ -404,6 +414,7 @@
         'ReplicationPaged',
         'WebhookPaged',
         'EventPaged',
    +    'AgentPoolPaged',
         'RunPaged',
         'TaskRunPaged',
         'TaskPaged',
    @@ -425,9 +436,9 @@
         'RegistryUsageUnit',
         'WebhookStatus',
         'WebhookAction',
    +    'OS',
         'RunStatus',
         'RunType',
    -    'OS',
         'Architecture',
         'Variant',
         'TaskStatus',
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_container_registry_management_client_enums.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_container_registry_management_client_enums.py
    index 9e398ed88a22..7ed9fe6b6dce 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_container_registry_management_client_enums.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_container_registry_management_client_enums.py
    @@ -121,6 +121,12 @@ class WebhookAction(str, Enum):
         chart_delete = "chart_delete"
     
     
    +class OS(str, Enum):
    +
    +    windows = "Windows"
    +    linux = "Linux"
    +
    +
     class RunStatus(str, Enum):
     
         queued = "Queued"
    @@ -141,12 +147,6 @@ class RunType(str, Enum):
         auto_run = "AutoRun"
     
     
    -class OS(str, Enum):
    -
    -    windows = "Windows"
    -    linux = "Linux"
    -
    -
     class Architecture(str, Enum):
     
         amd64 = "amd64"
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_models.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_models.py
    index d40b9cba05e4..24c1bbfcd86f 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_models.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_models.py
    @@ -56,6 +56,155 @@ def __init__(self, **kwargs):
             self.name = kwargs.get('name', None)
     
     
    +class Resource(Model):
    +    """An Azure resource.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource ID.
    +    :vartype id: str
    +    :ivar name: The name of the resource.
    +    :vartype name: str
    +    :ivar type: The type of the resource.
    +    :vartype type: str
    +    :param location: Required. The location of the resource. This cannot be
    +     changed after the resource is created.
    +    :type location: str
    +    :param tags: The tags of the resource.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.location = kwargs.get('location', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class AgentPool(Resource):
    +    """The agentpool that has the ARM resource and properties.
    +    The agentpool will have all information to create an agent pool.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource ID.
    +    :vartype id: str
    +    :ivar name: The name of the resource.
    +    :vartype name: str
    +    :ivar type: The type of the resource.
    +    :vartype type: str
    +    :param location: Required. The location of the resource. This cannot be
    +     changed after the resource is created.
    +    :type location: str
    +    :param tags: The tags of the resource.
    +    :type tags: dict[str, str]
    +    :param count: The count of agent machine
    +    :type count: int
    +    :param tier: The Tier of agent machine
    +    :type tier: str
    +    :param os: The OS of agent machine. Possible values include: 'Windows',
    +     'Linux'
    +    :type os: str or
    +     ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OS
    +    :param virtual_network_subnet_resource_id: The Virtual Network Subnet
    +     Resource Id of the agent machine
    +    :type virtual_network_subnet_resource_id: str
    +    :ivar provisioning_state: The provisioning state of this agent pool.
    +     Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Failed', 'Canceled'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'count': {'key': 'properties.count', 'type': 'int'},
    +        'tier': {'key': 'properties.tier', 'type': 'str'},
    +        'os': {'key': 'properties.os', 'type': 'str'},
    +        'virtual_network_subnet_resource_id': {'key': 'properties.virtualNetworkSubnetResourceId', 'type': 'str'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AgentPool, self).__init__(**kwargs)
    +        self.count = kwargs.get('count', None)
    +        self.tier = kwargs.get('tier', None)
    +        self.os = kwargs.get('os', None)
    +        self.virtual_network_subnet_resource_id = kwargs.get('virtual_network_subnet_resource_id', None)
    +        self.provisioning_state = None
    +
    +
    +class AgentPoolQueueStatus(Model):
    +    """The QueueStatus of Agent Pool.
    +
    +    :param count: The number of pending runs in the queue
    +    :type count: int
    +    """
    +
    +    _attribute_map = {
    +        'count': {'key': 'count', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AgentPoolQueueStatus, self).__init__(**kwargs)
    +        self.count = kwargs.get('count', None)
    +
    +
    +class AgentPoolUpdateParameters(Model):
    +    """The parameters for updating an agent pool.
    +
    +    :param count: The count of agent machine
    +    :type count: int
    +    :param tags: The ARM resource tags.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'count': {'key': 'properties.count', 'type': 'int'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AgentPoolUpdateParameters, self).__init__(**kwargs)
    +        self.count = kwargs.get('count', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
     class AgentProperties(Model):
         """The properties that determine the run agent configuration.
     
    @@ -420,6 +569,8 @@ class RunRequest(Model):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         """
    @@ -430,6 +581,7 @@ class RunRequest(Model):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
         }
     
    @@ -440,6 +592,7 @@ class RunRequest(Model):
         def __init__(self, **kwargs):
             super(RunRequest, self).__init__(**kwargs)
             self.is_archive_enabled = kwargs.get('is_archive_enabled', False)
    +        self.agent_pool_name = kwargs.get('agent_pool_name', None)
             self.type = None
     
     
    @@ -451,6 +604,8 @@ class DockerBuildRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param image_names: The fully qualified image names including the
    @@ -500,6 +655,7 @@ class DockerBuildRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'image_names': {'key': 'imageNames', 'type': '[str]'},
             'is_push_enabled': {'key': 'isPushEnabled', 'type': 'bool'},
    @@ -755,6 +911,8 @@ class EncodedTaskRunRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param encoded_task_content: Required. Base64 encoded value of the
    @@ -796,6 +954,7 @@ class EncodedTaskRunRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'encoded_task_content': {'key': 'encodedTaskContent', 'type': 'str'},
             'encoded_values_content': {'key': 'encodedValuesContent', 'type': 'str'},
    @@ -1162,6 +1321,8 @@ class FileTaskRunRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param task_file_path: Required. The template/definition file path
    @@ -1203,6 +1364,7 @@ class FileTaskRunRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'task_file_path': {'key': 'taskFilePath', 'type': 'str'},
             'values_file_path': {'key': 'valuesFilePath', 'type': 'str'},
    @@ -2144,51 +2306,6 @@ def __init__(self, **kwargs):
             self.name = kwargs.get('name', None)
     
     
    -class Resource(Model):
    -    """An Azure resource.
    -
    -    Variables are only populated by the server, and will be ignored when
    -    sending a request.
    -
    -    All required parameters must be populated in order to send to Azure.
    -
    -    :ivar id: The resource ID.
    -    :vartype id: str
    -    :ivar name: The name of the resource.
    -    :vartype name: str
    -    :ivar type: The type of the resource.
    -    :vartype type: str
    -    :param location: Required. The location of the resource. This cannot be
    -     changed after the resource is created.
    -    :type location: str
    -    :param tags: The tags of the resource.
    -    :type tags: dict[str, str]
    -    """
    -
    -    _validation = {
    -        'id': {'readonly': True},
    -        'name': {'readonly': True},
    -        'type': {'readonly': True},
    -        'location': {'required': True},
    -    }
    -
    -    _attribute_map = {
    -        'id': {'key': 'id', 'type': 'str'},
    -        'name': {'key': 'name', 'type': 'str'},
    -        'type': {'key': 'type', 'type': 'str'},
    -        'location': {'key': 'location', 'type': 'str'},
    -        'tags': {'key': 'tags', 'type': '{str}'},
    -    }
    -
    -    def __init__(self, **kwargs):
    -        super(Resource, self).__init__(**kwargs)
    -        self.id = None
    -        self.name = None
    -        self.type = None
    -        self.location = kwargs.get('location', None)
    -        self.tags = kwargs.get('tags', None)
    -
    -
     class Registry(Resource):
         """An object that represents a container registry.
     
    @@ -2676,6 +2793,8 @@ class Run(ProxyResource):
          'QuickRun', 'AutoBuild', 'AutoRun'
         :type run_type: str or
          ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunType
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param create_time: The time the run was scheduled.
         :type create_time: datetime
         :param start_time: The time the run started.
    @@ -2741,6 +2860,7 @@ class Run(ProxyResource):
             'status': {'key': 'properties.status', 'type': 'str'},
             'last_updated_time': {'key': 'properties.lastUpdatedTime', 'type': 'iso-8601'},
             'run_type': {'key': 'properties.runType', 'type': 'str'},
    +        'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'},
             'create_time': {'key': 'properties.createTime', 'type': 'iso-8601'},
             'start_time': {'key': 'properties.startTime', 'type': 'iso-8601'},
             'finish_time': {'key': 'properties.finishTime', 'type': 'iso-8601'},
    @@ -2765,6 +2885,7 @@ def __init__(self, **kwargs):
             self.status = kwargs.get('status', None)
             self.last_updated_time = kwargs.get('last_updated_time', None)
             self.run_type = kwargs.get('run_type', None)
    +        self.agent_pool_name = kwargs.get('agent_pool_name', None)
             self.create_time = kwargs.get('create_time', None)
             self.start_time = kwargs.get('start_time', None)
             self.finish_time = kwargs.get('finish_time', None)
    @@ -2810,6 +2931,9 @@ class RunFilter(Model):
         :type is_archive_enabled: bool
         :param task_name: The name of the task that the run corresponds to.
         :type task_name: str
    +    :param agent_pool_name: The name of the agent pool that the run
    +     corresponds to.
    +    :type agent_pool_name: str
         """
     
         _attribute_map = {
    @@ -2821,6 +2945,7 @@ class RunFilter(Model):
             'output_image_manifests': {'key': 'outputImageManifests', 'type': 'str'},
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
             'task_name': {'key': 'taskName', 'type': 'str'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
         }
     
         def __init__(self, **kwargs):
    @@ -2833,6 +2958,7 @@ def __init__(self, **kwargs):
             self.output_image_manifests = kwargs.get('output_image_manifests', None)
             self.is_archive_enabled = kwargs.get('is_archive_enabled', None)
             self.task_name = kwargs.get('task_name', None)
    +        self.agent_pool_name = kwargs.get('agent_pool_name', None)
     
     
     class RunGetLogResult(Model):
    @@ -3458,6 +3584,8 @@ class Task(Resource):
         :param agent_configuration: The machine configuration of the run agent.
         :type agent_configuration:
          ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties
    +    :param agent_pool_name: The dedicated agent pool for the task.
    +    :type agent_pool_name: str
         :param timeout: Run timeout in seconds. Default value: 3600 .
         :type timeout: int
         :param step: Required. The properties of a task step.
    @@ -3496,6 +3624,7 @@ class Task(Resource):
             'status': {'key': 'properties.status', 'type': 'str'},
             'platform': {'key': 'properties.platform', 'type': 'PlatformProperties'},
             'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'},
    +        'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'},
             'timeout': {'key': 'properties.timeout', 'type': 'int'},
             'step': {'key': 'properties.step', 'type': 'TaskStepProperties'},
             'trigger': {'key': 'properties.trigger', 'type': 'TriggerProperties'},
    @@ -3510,6 +3639,7 @@ def __init__(self, **kwargs):
             self.status = kwargs.get('status', None)
             self.platform = kwargs.get('platform', None)
             self.agent_configuration = kwargs.get('agent_configuration', None)
    +        self.agent_pool_name = kwargs.get('agent_pool_name', None)
             self.timeout = kwargs.get('timeout', 3600)
             self.step = kwargs.get('step', None)
             self.trigger = kwargs.get('trigger', None)
    @@ -3594,6 +3724,8 @@ class TaskRunRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param task_id: Required. The resource ID of task against which run has to
    @@ -3612,6 +3744,7 @@ class TaskRunRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'task_id': {'key': 'taskId', 'type': 'str'},
             'override_task_step_properties': {'key': 'overrideTaskStepProperties', 'type': 'OverrideTaskStepProperties'},
    @@ -3672,6 +3805,8 @@ class TaskUpdateParameters(Model):
         :param agent_configuration: The machine configuration of the run agent.
         :type agent_configuration:
          ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties
    +    :param agent_pool_name: The dedicated agent pool for the task.
    +    :type agent_pool_name: str
         :param timeout: Run timeout in seconds.
         :type timeout: int
         :param step: The properties for updating a task step.
    @@ -3693,6 +3828,7 @@ class TaskUpdateParameters(Model):
             'status': {'key': 'properties.status', 'type': 'str'},
             'platform': {'key': 'properties.platform', 'type': 'PlatformUpdateParameters'},
             'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'},
    +        'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'},
             'timeout': {'key': 'properties.timeout', 'type': 'int'},
             'step': {'key': 'properties.step', 'type': 'TaskStepUpdateParameters'},
             'trigger': {'key': 'properties.trigger', 'type': 'TriggerUpdateParameters'},
    @@ -3706,6 +3842,7 @@ def __init__(self, **kwargs):
             self.status = kwargs.get('status', None)
             self.platform = kwargs.get('platform', None)
             self.agent_configuration = kwargs.get('agent_configuration', None)
    +        self.agent_pool_name = kwargs.get('agent_pool_name', None)
             self.timeout = kwargs.get('timeout', None)
             self.step = kwargs.get('step', None)
             self.trigger = kwargs.get('trigger', None)
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_models_py3.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_models_py3.py
    index a8bf60ba83a3..922b5fbf99f0 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_models_py3.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_models_py3.py
    @@ -56,6 +56,155 @@ def __init__(self, *, name: str=None, **kwargs) -> None:
             self.name = name
     
     
    +class Resource(Model):
    +    """An Azure resource.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource ID.
    +    :vartype id: str
    +    :ivar name: The name of the resource.
    +    :vartype name: str
    +    :ivar type: The type of the resource.
    +    :vartype type: str
    +    :param location: Required. The location of the resource. This cannot be
    +     changed after the resource is created.
    +    :type location: str
    +    :param tags: The tags of the resource.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, location: str, tags=None, **kwargs) -> None:
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.location = location
    +        self.tags = tags
    +
    +
    +class AgentPool(Resource):
    +    """The agentpool that has the ARM resource and properties.
    +    The agentpool will have all information to create an agent pool.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource ID.
    +    :vartype id: str
    +    :ivar name: The name of the resource.
    +    :vartype name: str
    +    :ivar type: The type of the resource.
    +    :vartype type: str
    +    :param location: Required. The location of the resource. This cannot be
    +     changed after the resource is created.
    +    :type location: str
    +    :param tags: The tags of the resource.
    +    :type tags: dict[str, str]
    +    :param count: The count of agent machine
    +    :type count: int
    +    :param tier: The Tier of agent machine
    +    :type tier: str
    +    :param os: The OS of agent machine. Possible values include: 'Windows',
    +     'Linux'
    +    :type os: str or
    +     ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OS
    +    :param virtual_network_subnet_resource_id: The Virtual Network Subnet
    +     Resource Id of the agent machine
    +    :type virtual_network_subnet_resource_id: str
    +    :ivar provisioning_state: The provisioning state of this agent pool.
    +     Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Failed', 'Canceled'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'count': {'key': 'properties.count', 'type': 'int'},
    +        'tier': {'key': 'properties.tier', 'type': 'str'},
    +        'os': {'key': 'properties.os', 'type': 'str'},
    +        'virtual_network_subnet_resource_id': {'key': 'properties.virtualNetworkSubnetResourceId', 'type': 'str'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, location: str, tags=None, count: int=None, tier: str=None, os=None, virtual_network_subnet_resource_id: str=None, **kwargs) -> None:
    +        super(AgentPool, self).__init__(location=location, tags=tags, **kwargs)
    +        self.count = count
    +        self.tier = tier
    +        self.os = os
    +        self.virtual_network_subnet_resource_id = virtual_network_subnet_resource_id
    +        self.provisioning_state = None
    +
    +
    +class AgentPoolQueueStatus(Model):
    +    """The QueueStatus of Agent Pool.
    +
    +    :param count: The number of pending runs in the queue
    +    :type count: int
    +    """
    +
    +    _attribute_map = {
    +        'count': {'key': 'count', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, count: int=None, **kwargs) -> None:
    +        super(AgentPoolQueueStatus, self).__init__(**kwargs)
    +        self.count = count
    +
    +
    +class AgentPoolUpdateParameters(Model):
    +    """The parameters for updating an agent pool.
    +
    +    :param count: The count of agent machine
    +    :type count: int
    +    :param tags: The ARM resource tags.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'count': {'key': 'properties.count', 'type': 'int'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, count: int=None, tags=None, **kwargs) -> None:
    +        super(AgentPoolUpdateParameters, self).__init__(**kwargs)
    +        self.count = count
    +        self.tags = tags
    +
    +
     class AgentProperties(Model):
         """The properties that determine the run agent configuration.
     
    @@ -420,6 +569,8 @@ class RunRequest(Model):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         """
    @@ -430,6 +581,7 @@ class RunRequest(Model):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
         }
     
    @@ -437,9 +589,10 @@ class RunRequest(Model):
             'type': {'DockerBuildRequest': 'DockerBuildRequest', 'FileTaskRunRequest': 'FileTaskRunRequest', 'TaskRunRequest': 'TaskRunRequest', 'EncodedTaskRunRequest': 'EncodedTaskRunRequest'}
         }
     
    -    def __init__(self, *, is_archive_enabled: bool=False, **kwargs) -> None:
    +    def __init__(self, *, is_archive_enabled: bool=False, agent_pool_name: str=None, **kwargs) -> None:
             super(RunRequest, self).__init__(**kwargs)
             self.is_archive_enabled = is_archive_enabled
    +        self.agent_pool_name = agent_pool_name
             self.type = None
     
     
    @@ -451,6 +604,8 @@ class DockerBuildRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param image_names: The fully qualified image names including the
    @@ -500,6 +655,7 @@ class DockerBuildRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'image_names': {'key': 'imageNames', 'type': '[str]'},
             'is_push_enabled': {'key': 'isPushEnabled', 'type': 'bool'},
    @@ -514,8 +670,8 @@ class DockerBuildRequest(RunRequest):
             'credentials': {'key': 'credentials', 'type': 'Credentials'},
         }
     
    -    def __init__(self, *, docker_file_path: str, platform, is_archive_enabled: bool=False, image_names=None, is_push_enabled: bool=True, no_cache: bool=False, target: str=None, arguments=None, timeout: int=3600, agent_configuration=None, source_location: str=None, credentials=None, **kwargs) -> None:
    -        super(DockerBuildRequest, self).__init__(is_archive_enabled=is_archive_enabled, **kwargs)
    +    def __init__(self, *, docker_file_path: str, platform, is_archive_enabled: bool=False, agent_pool_name: str=None, image_names=None, is_push_enabled: bool=True, no_cache: bool=False, target: str=None, arguments=None, timeout: int=3600, agent_configuration=None, source_location: str=None, credentials=None, **kwargs) -> None:
    +        super(DockerBuildRequest, self).__init__(is_archive_enabled=is_archive_enabled, agent_pool_name=agent_pool_name, **kwargs)
             self.image_names = image_names
             self.is_push_enabled = is_push_enabled
             self.no_cache = no_cache
    @@ -755,6 +911,8 @@ class EncodedTaskRunRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param encoded_task_content: Required. Base64 encoded value of the
    @@ -796,6 +954,7 @@ class EncodedTaskRunRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'encoded_task_content': {'key': 'encodedTaskContent', 'type': 'str'},
             'encoded_values_content': {'key': 'encodedValuesContent', 'type': 'str'},
    @@ -807,8 +966,8 @@ class EncodedTaskRunRequest(RunRequest):
             'credentials': {'key': 'credentials', 'type': 'Credentials'},
         }
     
    -    def __init__(self, *, encoded_task_content: str, platform, is_archive_enabled: bool=False, encoded_values_content: str=None, values=None, timeout: int=3600, agent_configuration=None, source_location: str=None, credentials=None, **kwargs) -> None:
    -        super(EncodedTaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, **kwargs)
    +    def __init__(self, *, encoded_task_content: str, platform, is_archive_enabled: bool=False, agent_pool_name: str=None, encoded_values_content: str=None, values=None, timeout: int=3600, agent_configuration=None, source_location: str=None, credentials=None, **kwargs) -> None:
    +        super(EncodedTaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, agent_pool_name=agent_pool_name, **kwargs)
             self.encoded_task_content = encoded_task_content
             self.encoded_values_content = encoded_values_content
             self.values = values
    @@ -1162,6 +1321,8 @@ class FileTaskRunRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param task_file_path: Required. The template/definition file path
    @@ -1203,6 +1364,7 @@ class FileTaskRunRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'task_file_path': {'key': 'taskFilePath', 'type': 'str'},
             'values_file_path': {'key': 'valuesFilePath', 'type': 'str'},
    @@ -1214,8 +1376,8 @@ class FileTaskRunRequest(RunRequest):
             'credentials': {'key': 'credentials', 'type': 'Credentials'},
         }
     
    -    def __init__(self, *, task_file_path: str, platform, is_archive_enabled: bool=False, values_file_path: str=None, values=None, timeout: int=3600, agent_configuration=None, source_location: str=None, credentials=None, **kwargs) -> None:
    -        super(FileTaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, **kwargs)
    +    def __init__(self, *, task_file_path: str, platform, is_archive_enabled: bool=False, agent_pool_name: str=None, values_file_path: str=None, values=None, timeout: int=3600, agent_configuration=None, source_location: str=None, credentials=None, **kwargs) -> None:
    +        super(FileTaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, agent_pool_name=agent_pool_name, **kwargs)
             self.task_file_path = task_file_path
             self.values_file_path = values_file_path
             self.values = values
    @@ -2144,51 +2306,6 @@ def __init__(self, *, name, **kwargs) -> None:
             self.name = name
     
     
    -class Resource(Model):
    -    """An Azure resource.
    -
    -    Variables are only populated by the server, and will be ignored when
    -    sending a request.
    -
    -    All required parameters must be populated in order to send to Azure.
    -
    -    :ivar id: The resource ID.
    -    :vartype id: str
    -    :ivar name: The name of the resource.
    -    :vartype name: str
    -    :ivar type: The type of the resource.
    -    :vartype type: str
    -    :param location: Required. The location of the resource. This cannot be
    -     changed after the resource is created.
    -    :type location: str
    -    :param tags: The tags of the resource.
    -    :type tags: dict[str, str]
    -    """
    -
    -    _validation = {
    -        'id': {'readonly': True},
    -        'name': {'readonly': True},
    -        'type': {'readonly': True},
    -        'location': {'required': True},
    -    }
    -
    -    _attribute_map = {
    -        'id': {'key': 'id', 'type': 'str'},
    -        'name': {'key': 'name', 'type': 'str'},
    -        'type': {'key': 'type', 'type': 'str'},
    -        'location': {'key': 'location', 'type': 'str'},
    -        'tags': {'key': 'tags', 'type': '{str}'},
    -    }
    -
    -    def __init__(self, *, location: str, tags=None, **kwargs) -> None:
    -        super(Resource, self).__init__(**kwargs)
    -        self.id = None
    -        self.name = None
    -        self.type = None
    -        self.location = location
    -        self.tags = tags
    -
    -
     class Registry(Resource):
         """An object that represents a container registry.
     
    @@ -2676,6 +2793,8 @@ class Run(ProxyResource):
          'QuickRun', 'AutoBuild', 'AutoRun'
         :type run_type: str or
          ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunType
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param create_time: The time the run was scheduled.
         :type create_time: datetime
         :param start_time: The time the run started.
    @@ -2741,6 +2860,7 @@ class Run(ProxyResource):
             'status': {'key': 'properties.status', 'type': 'str'},
             'last_updated_time': {'key': 'properties.lastUpdatedTime', 'type': 'iso-8601'},
             'run_type': {'key': 'properties.runType', 'type': 'str'},
    +        'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'},
             'create_time': {'key': 'properties.createTime', 'type': 'iso-8601'},
             'start_time': {'key': 'properties.startTime', 'type': 'iso-8601'},
             'finish_time': {'key': 'properties.finishTime', 'type': 'iso-8601'},
    @@ -2759,12 +2879,13 @@ class Run(ProxyResource):
             'is_archive_enabled': {'key': 'properties.isArchiveEnabled', 'type': 'bool'},
         }
     
    -    def __init__(self, *, run_id: str=None, status=None, last_updated_time=None, run_type=None, create_time=None, start_time=None, finish_time=None, output_images=None, task: str=None, image_update_trigger=None, source_trigger=None, timer_trigger=None, platform=None, agent_configuration=None, source_registry_auth: str=None, custom_registries=None, update_trigger_token: str=None, provisioning_state=None, is_archive_enabled: bool=False, **kwargs) -> None:
    +    def __init__(self, *, run_id: str=None, status=None, last_updated_time=None, run_type=None, agent_pool_name: str=None, create_time=None, start_time=None, finish_time=None, output_images=None, task: str=None, image_update_trigger=None, source_trigger=None, timer_trigger=None, platform=None, agent_configuration=None, source_registry_auth: str=None, custom_registries=None, update_trigger_token: str=None, provisioning_state=None, is_archive_enabled: bool=False, **kwargs) -> None:
             super(Run, self).__init__(**kwargs)
             self.run_id = run_id
             self.status = status
             self.last_updated_time = last_updated_time
             self.run_type = run_type
    +        self.agent_pool_name = agent_pool_name
             self.create_time = create_time
             self.start_time = start_time
             self.finish_time = finish_time
    @@ -2810,6 +2931,9 @@ class RunFilter(Model):
         :type is_archive_enabled: bool
         :param task_name: The name of the task that the run corresponds to.
         :type task_name: str
    +    :param agent_pool_name: The name of the agent pool that the run
    +     corresponds to.
    +    :type agent_pool_name: str
         """
     
         _attribute_map = {
    @@ -2821,9 +2945,10 @@ class RunFilter(Model):
             'output_image_manifests': {'key': 'outputImageManifests', 'type': 'str'},
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
             'task_name': {'key': 'taskName', 'type': 'str'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
         }
     
    -    def __init__(self, *, run_id: str=None, run_type=None, status=None, create_time=None, finish_time=None, output_image_manifests: str=None, is_archive_enabled: bool=None, task_name: str=None, **kwargs) -> None:
    +    def __init__(self, *, run_id: str=None, run_type=None, status=None, create_time=None, finish_time=None, output_image_manifests: str=None, is_archive_enabled: bool=None, task_name: str=None, agent_pool_name: str=None, **kwargs) -> None:
             super(RunFilter, self).__init__(**kwargs)
             self.run_id = run_id
             self.run_type = run_type
    @@ -2833,6 +2958,7 @@ def __init__(self, *, run_id: str=None, run_type=None, status=None, create_time=
             self.output_image_manifests = output_image_manifests
             self.is_archive_enabled = is_archive_enabled
             self.task_name = task_name
    +        self.agent_pool_name = agent_pool_name
     
     
     class RunGetLogResult(Model):
    @@ -3458,6 +3584,8 @@ class Task(Resource):
         :param agent_configuration: The machine configuration of the run agent.
         :type agent_configuration:
          ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties
    +    :param agent_pool_name: The dedicated agent pool for the task.
    +    :type agent_pool_name: str
         :param timeout: Run timeout in seconds. Default value: 3600 .
         :type timeout: int
         :param step: Required. The properties of a task step.
    @@ -3496,13 +3624,14 @@ class Task(Resource):
             'status': {'key': 'properties.status', 'type': 'str'},
             'platform': {'key': 'properties.platform', 'type': 'PlatformProperties'},
             'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'},
    +        'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'},
             'timeout': {'key': 'properties.timeout', 'type': 'int'},
             'step': {'key': 'properties.step', 'type': 'TaskStepProperties'},
             'trigger': {'key': 'properties.trigger', 'type': 'TriggerProperties'},
             'credentials': {'key': 'properties.credentials', 'type': 'Credentials'},
         }
     
    -    def __init__(self, *, location: str, platform, step, tags=None, identity=None, status=None, agent_configuration=None, timeout: int=3600, trigger=None, credentials=None, **kwargs) -> None:
    +    def __init__(self, *, location: str, platform, step, tags=None, identity=None, status=None, agent_configuration=None, agent_pool_name: str=None, timeout: int=3600, trigger=None, credentials=None, **kwargs) -> None:
             super(Task, self).__init__(location=location, tags=tags, **kwargs)
             self.identity = identity
             self.provisioning_state = None
    @@ -3510,6 +3639,7 @@ def __init__(self, *, location: str, platform, step, tags=None, identity=None, s
             self.status = status
             self.platform = platform
             self.agent_configuration = agent_configuration
    +        self.agent_pool_name = agent_pool_name
             self.timeout = timeout
             self.step = step
             self.trigger = trigger
    @@ -3594,6 +3724,8 @@ class TaskRunRequest(RunRequest):
         :param is_archive_enabled: The value that indicates whether archiving is
          enabled for the run or not. Default value: False .
         :type is_archive_enabled: bool
    +    :param agent_pool_name: The dedicated agent pool for the run.
    +    :type agent_pool_name: str
         :param type: Required. Constant filled by server.
         :type type: str
         :param task_id: Required. The resource ID of task against which run has to
    @@ -3612,13 +3744,14 @@ class TaskRunRequest(RunRequest):
     
         _attribute_map = {
             'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'},
    +        'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'},
             'type': {'key': 'type', 'type': 'str'},
             'task_id': {'key': 'taskId', 'type': 'str'},
             'override_task_step_properties': {'key': 'overrideTaskStepProperties', 'type': 'OverrideTaskStepProperties'},
         }
     
    -    def __init__(self, *, task_id: str, is_archive_enabled: bool=False, override_task_step_properties=None, **kwargs) -> None:
    -        super(TaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, **kwargs)
    +    def __init__(self, *, task_id: str, is_archive_enabled: bool=False, agent_pool_name: str=None, override_task_step_properties=None, **kwargs) -> None:
    +        super(TaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, agent_pool_name=agent_pool_name, **kwargs)
             self.task_id = task_id
             self.override_task_step_properties = override_task_step_properties
             self.type = 'TaskRunRequest'
    @@ -3672,6 +3805,8 @@ class TaskUpdateParameters(Model):
         :param agent_configuration: The machine configuration of the run agent.
         :type agent_configuration:
          ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties
    +    :param agent_pool_name: The dedicated agent pool for the task.
    +    :type agent_pool_name: str
         :param timeout: Run timeout in seconds.
         :type timeout: int
         :param step: The properties for updating a task step.
    @@ -3693,6 +3828,7 @@ class TaskUpdateParameters(Model):
             'status': {'key': 'properties.status', 'type': 'str'},
             'platform': {'key': 'properties.platform', 'type': 'PlatformUpdateParameters'},
             'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'},
    +        'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'},
             'timeout': {'key': 'properties.timeout', 'type': 'int'},
             'step': {'key': 'properties.step', 'type': 'TaskStepUpdateParameters'},
             'trigger': {'key': 'properties.trigger', 'type': 'TriggerUpdateParameters'},
    @@ -3700,12 +3836,13 @@ class TaskUpdateParameters(Model):
             'tags': {'key': 'tags', 'type': '{str}'},
         }
     
    -    def __init__(self, *, identity=None, status=None, platform=None, agent_configuration=None, timeout: int=None, step=None, trigger=None, credentials=None, tags=None, **kwargs) -> None:
    +    def __init__(self, *, identity=None, status=None, platform=None, agent_configuration=None, agent_pool_name: str=None, timeout: int=None, step=None, trigger=None, credentials=None, tags=None, **kwargs) -> None:
             super(TaskUpdateParameters, self).__init__(**kwargs)
             self.identity = identity
             self.status = status
             self.platform = platform
             self.agent_configuration = agent_configuration
    +        self.agent_pool_name = agent_pool_name
             self.timeout = timeout
             self.step = step
             self.trigger = trigger
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_paged_models.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_paged_models.py
    index 080653ac8482..b609eb2d2589 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_paged_models.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/models/_paged_models.py
    @@ -103,6 +103,19 @@ class EventPaged(Paged):
         def __init__(self, *args, **kwargs):
     
             super(EventPaged, self).__init__(*args, **kwargs)
    +class AgentPoolPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`AgentPool ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[AgentPool]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(AgentPoolPaged, self).__init__(*args, **kwargs)
     class RunPaged(Paged):
         """
         A paging container for iterating over a list of :class:`Run ` object
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/operations/__init__.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/operations/__init__.py
    index c94c913b02c5..b76a26cfdcf9 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/operations/__init__.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/operations/__init__.py
    @@ -14,6 +14,7 @@
     from ._private_endpoint_connections_operations import PrivateEndpointConnectionsOperations
     from ._replications_operations import ReplicationsOperations
     from ._webhooks_operations import WebhooksOperations
    +from ._agent_pools_operations import AgentPoolsOperations
     from ._runs_operations import RunsOperations
     from ._task_runs_operations import TaskRunsOperations
     from ._tasks_operations import TasksOperations
    @@ -26,6 +27,7 @@
         'PrivateEndpointConnectionsOperations',
         'ReplicationsOperations',
         'WebhooksOperations',
    +    'AgentPoolsOperations',
         'RunsOperations',
         'TaskRunsOperations',
         'TasksOperations',
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/operations/_agent_pools_operations.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/operations/_agent_pools_operations.py
    new file mode 100644
    index 000000000000..898a7a92df9e
    --- /dev/null
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/operations/_agent_pools_operations.py
    @@ -0,0 +1,546 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class AgentPoolsOperations(object):
    +    """AgentPoolsOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The client API version. Constant value: "2019-06-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2019-06-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, registry_name, agent_pool_name, custom_headers=None, raw=False, **operation_config):
    +        """Gets the detailed information for a given agent pool.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param agent_pool_name: The name of the agent pool.
    +        :type agent_pool_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: AgentPool or ClientRawResponse if raw=true
    +        :rtype:
    +         ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +            'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'),
    +            'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorSchemaException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('AgentPool', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'}
    +
    +
    +    def _create_initial(
    +            self, resource_group_name, registry_name, agent_pool_name, agent_pool, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +            'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'),
    +            'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(agent_pool, 'AgentPool')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            raise models.ErrorSchemaException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('AgentPool', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('AgentPool', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def create(
    +            self, resource_group_name, registry_name, agent_pool_name, agent_pool, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Creates an agent pool for a container registry with the specified
    +        parameters.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param agent_pool_name: The name of the agent pool.
    +        :type agent_pool_name: str
    +        :param agent_pool: The parameters of an agent pool that needs to
    +         scheduled.
    +        :type agent_pool:
    +         ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns AgentPool or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool]]
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        raw_result = self._create_initial(
    +            resource_group_name=resource_group_name,
    +            registry_name=registry_name,
    +            agent_pool_name=agent_pool_name,
    +            agent_pool=agent_pool,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('AgentPool', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'}
    +
    +
    +    def _delete_initial(
    +            self, resource_group_name, registry_name, agent_pool_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +            'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'),
    +            'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202, 204]:
    +            raise models.ErrorSchemaException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +
    +    def delete(
    +            self, resource_group_name, registry_name, agent_pool_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Deletes a specified agent pool resource.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param agent_pool_name: The name of the agent pool.
    +        :type agent_pool_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns None or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        raw_result = self._delete_initial(
    +            resource_group_name=resource_group_name,
    +            registry_name=registry_name,
    +            agent_pool_name=agent_pool_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            if raw:
    +                client_raw_response = ClientRawResponse(None, response)
    +                return client_raw_response
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'}
    +
    +
    +    def _update_initial(
    +            self, resource_group_name, registry_name, agent_pool_name, count=None, tags=None, custom_headers=None, raw=False, **operation_config):
    +        update_parameters = models.AgentPoolUpdateParameters(count=count, tags=tags)
    +
    +        # Construct URL
    +        url = self.update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +            'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'),
    +            'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(update_parameters, 'AgentPoolUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            raise models.ErrorSchemaException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('AgentPool', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('AgentPool', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def update(
    +            self, resource_group_name, registry_name, agent_pool_name, count=None, tags=None, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Updates an agent pool with the specified parameters.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param agent_pool_name: The name of the agent pool.
    +        :type agent_pool_name: str
    +        :param count: The count of agent machine
    +        :type count: int
    +        :param tags: The ARM resource tags.
    +        :type tags: dict[str, str]
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns AgentPool or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool]]
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        raw_result = self._update_initial(
    +            resource_group_name=resource_group_name,
    +            registry_name=registry_name,
    +            agent_pool_name=agent_pool_name,
    +            count=count,
    +            tags=tags,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('AgentPool', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'}
    +
    +    def list(
    +            self, resource_group_name, registry_name, custom_headers=None, raw=False, **operation_config):
    +        """Lists all the agent pools for a specified container registry.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of AgentPool
    +        :rtype:
    +         ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPoolPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool]
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +                    'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorSchemaException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.AgentPoolPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools'}
    +
    +    def get_queue_status(
    +            self, resource_group_name, registry_name, agent_pool_name, custom_headers=None, raw=False, **operation_config):
    +        """Gets the count of queued runs for a given agent pool.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param agent_pool_name: The name of the agent pool.
    +        :type agent_pool_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: AgentPoolQueueStatus or ClientRawResponse if raw=true
    +        :rtype:
    +         ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPoolQueueStatus
    +         or ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        # Construct URL
    +        url = self.get_queue_status.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +            'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'),
    +            'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorSchemaException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('AgentPoolQueueStatus', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_queue_status.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}/listQueueStatus'}
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/operations/_task_runs_operations.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/operations/_task_runs_operations.py
    index eec0d4cad537..9bae3e999f35 100644
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/operations/_task_runs_operations.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/v2019_12_01_preview/operations/_task_runs_operations.py
    @@ -403,6 +403,72 @@ def get_long_running_output(response):
             return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
         update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'}
     
    +    def get_details(
    +            self, resource_group_name, registry_name, task_run_name, custom_headers=None, raw=False, **operation_config):
    +        """Gets the detailed information for a given task run that includes all
    +        secrets.
    +
    +        :param resource_group_name: The name of the resource group to which
    +         the container registry belongs.
    +        :type resource_group_name: str
    +        :param registry_name: The name of the container registry.
    +        :type registry_name: str
    +        :param task_run_name: The run request name.
    +        :type task_run_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: TaskRun or ClientRawResponse if raw=true
    +        :rtype:
    +         ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorSchemaException`
    +        """
    +        # Construct URL
    +        url = self.get_details.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1),
    +            'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'),
    +            'taskRunName': self._serialize.url("task_run_name", task_run_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorSchemaException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('TaskRun', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_details.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}/listDetails'}
    +
         def list(
                 self, resource_group_name, registry_name, custom_headers=None, raw=False, **operation_config):
             """Lists all the task runs for a specified container registry.
    diff --git a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/version.py b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/version.py
    index 4d098dcd1661..d9c43d6c5c3b 100755
    --- a/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/version.py
    +++ b/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/version.py
    @@ -9,4 +9,4 @@
     # regenerated.
     # --------------------------------------------------------------------------
     
    -VERSION = "3.0.0rc9"
    +VERSION = "3.0.0rc10"
    diff --git a/sdk/core/azure-common/CHANGELOG.md b/sdk/core/azure-common/CHANGELOG.md
    index 68e2512e5026..0cb3c9250f13 100644
    --- a/sdk/core/azure-common/CHANGELOG.md
    +++ b/sdk/core/azure-common/CHANGELOG.md
    @@ -1,6 +1,9 @@
     # Release History
     
    -## 1.1.25 (2020-03-02)
    +## 1.1.26 (Unreleased)
    +
    +
    +## 1.1.25 (2020-03-09)
     
     - get_client_from_cli_profile no longer requires "azure-core" if not necessary
     
    diff --git a/sdk/core/azure-common/azure/common/_version.py b/sdk/core/azure-common/azure/common/_version.py
    index 7220ae0066fd..0e11432cff59 100644
    --- a/sdk/core/azure-common/azure/common/_version.py
    +++ b/sdk/core/azure-common/azure/common/_version.py
    @@ -4,4 +4,4 @@
     # license information.
     #--------------------------------------------------------------------------
     
    -VERSION = "1.1.25"
    +VERSION = "1.1.26"
    diff --git a/sdk/core/azure-common/setup.py b/sdk/core/azure-common/setup.py
    index a5256e1ca455..d8ceb9a83951 100644
    --- a/sdk/core/azure-common/setup.py
    +++ b/sdk/core/azure-common/setup.py
    @@ -57,7 +57,7 @@
         author_email='azpysdkhelp@microsoft.com',
         url='https://github.com/Azure/azure-sdk-for-python',
         classifiers=[
    -        'Development Status :: 5 - Production/Stable',
    +        "Development Status :: 5 - Production/Stable",
             'Programming Language :: Python',
             'Programming Language :: Python :: 2',
             'Programming Language :: Python :: 2.7',
    diff --git a/sdk/core/azure-core-tracing-opentelemetry/CHANGELOG.md b/sdk/core/azure-core-tracing-opentelemetry/CHANGELOG.md
    index bc9e9eef7de0..61eb78bec63d 100644
    --- a/sdk/core/azure-core-tracing-opentelemetry/CHANGELOG.md
    +++ b/sdk/core/azure-core-tracing-opentelemetry/CHANGELOG.md
    @@ -3,14 +3,17 @@
     
     -------------------
     
    -## 1.0.0b2 Unreleased
    +## 1.0.0b3 (Unreleased)
    +
    +
    +## 1.0.0b2 (2020-03-09)
     
     ### Features
     
    -- Pinned opentelemetry-api to version 0.3a0
    +- Pinned opentelemetry-api to version 0.4a0
     
    -## 1.0.0b1 Unreleased
    +## 1.0.0b1
     
     ### Features
     
    -- Opentelemetry implementation of azure-core tracing protocol
    \ No newline at end of file
    +- Opentelemetry implementation of azure-core tracing protocol
    diff --git a/sdk/core/azure-core-tracing-opentelemetry/README.md b/sdk/core/azure-core-tracing-opentelemetry/README.md
    index f3370a9a8506..65e352643fbd 100644
    --- a/sdk/core/azure-core-tracing-opentelemetry/README.md
    +++ b/sdk/core/azure-core-tracing-opentelemetry/README.md
    @@ -39,7 +39,7 @@ from azure.core.tracing.ext.opentelemetry_span import OpenTelemetrySpan
     settings.tracing_implementation = OpenTelemetrySpan
     
     # Example of Azure Monitor exporter, but you can use anything OpenTelemetry supports
    -from opentelemetry.ext.azure_monitor import AzureMonitorSpanExporter
    +from azure_monitor import AzureMonitorSpanExporter
     exporter = AzureMonitorSpanExporter(
         instrumentation_key="uuid of the instrumentation key (see your Azure Monitor account)"
     )
    @@ -47,16 +47,16 @@ exporter = AzureMonitorSpanExporter(
     # Regular open telemetry usage from here, see https://github.com/open-telemetry/opentelemetry-python
     # for details
     from opentelemetry import trace
    -from opentelemetry.sdk.trace import Tracer
    +from opentelemetry.sdk.trace import TracerSource
     from opentelemetry.sdk.trace.export import ConsoleSpanExporter
     from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor
     
     # Simple console exporter
     exporter = ConsoleSpanExporter()
     
    -trace.set_preferred_tracer_implementation(lambda T: Tracer())
    -tracer = trace.tracer()
    -tracer.add_span_processor(
    +trace.set_preferred_tracer_source_implementation(lambda T: TracerSource())
    +tracer = trace.get_tracer(__name__)
    +trace.tracer_source().add_span_processor(
         SimpleExportSpanProcessor(exporter)
     )
     
    @@ -69,12 +69,12 @@ with tracer.start_as_current_span(name="MyApplication"):
         client.create_container('mycontainer')  # Call will be traced
     ```
     
    -Azure Exporter can be found in the package `opentelemetry-azure-monitor-exporter`
    +Azure Exporter can be found in the [package](https://github.com/microsoft/opentelemetry-exporters-python) `opentelemetry-azure-monitor-exporter`
     
     
     ## Troubleshooting
     
    -This client raises exceptions defined in [Azure Core](https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/core/azure-core/docs/exceptions.md).
    +This client raises exceptions defined in [Azure Core](https://docs.microsoft.com/en-us/python/api/azure-core/azure.core.exceptions?view=azure-python).
     
     
     ## Next steps
    diff --git a/sdk/core/azure-core-tracing-opentelemetry/azure/core/tracing/ext/opentelemetry_span/__init__.py b/sdk/core/azure-core-tracing-opentelemetry/azure/core/tracing/ext/opentelemetry_span/__init__.py
    index 851c33b3f62d..06cb53fb20df 100644
    --- a/sdk/core/azure-core-tracing-opentelemetry/azure/core/tracing/ext/opentelemetry_span/__init__.py
    +++ b/sdk/core/azure-core-tracing-opentelemetry/azure/core/tracing/ext/opentelemetry_span/__init__.py
    @@ -4,8 +4,9 @@
     # ------------------------------------
     """Implements azure.core.tracing.AbstractSpan to wrap OpenTelemetry spans."""
     
    -from opentelemetry.trace import Span, Link, Tracer, SpanKind as OpenTelemetrySpanKind, tracer
    -from opentelemetry.context import Context
    +from opentelemetry import trace
    +from opentelemetry.trace import Span, Link, Tracer, SpanKind as OpenTelemetrySpanKind
    +from opentelemetry.context import with_current_context
     from opentelemetry.propagators import extract, inject
     
     from azure.core.tracing import SpanKind, HttpSpanMixin  # pylint: disable=no-name-in-module
    @@ -208,7 +209,7 @@ def get_current_tracer(cls):
             """
             Get the current tracer from the execution context. Return None otherwise.
             """
    -        return tracer()
    +        return trace.get_tracer(__name__, __version__)
     
         @classmethod
         def change_context(cls, span):
    @@ -244,4 +245,4 @@ def with_current_context(cls, func):
             :param func: The function that will be run in the new context
             :return: The target the pass in instead of the function
             """
    -        return Context.with_current_context(func)
    +        return with_current_context(func)
    diff --git a/sdk/core/azure-core-tracing-opentelemetry/azure/core/tracing/ext/opentelemetry_span/_version.py b/sdk/core/azure-core-tracing-opentelemetry/azure/core/tracing/ext/opentelemetry_span/_version.py
    index e1816f2340d7..a0bccaf9e9aa 100644
    --- a/sdk/core/azure-core-tracing-opentelemetry/azure/core/tracing/ext/opentelemetry_span/_version.py
    +++ b/sdk/core/azure-core-tracing-opentelemetry/azure/core/tracing/ext/opentelemetry_span/_version.py
    @@ -3,4 +3,4 @@
     # Licensed under the MIT License.
     # ------------------------------------
     
    -VERSION = "1.0.0b2"
    +VERSION = "1.0.0b3"
    diff --git a/sdk/core/azure-core-tracing-opentelemetry/dev_requirements.txt b/sdk/core/azure-core-tracing-opentelemetry/dev_requirements.txt
    index bca770257cbc..b74853fe7e77 100644
    --- a/sdk/core/azure-core-tracing-opentelemetry/dev_requirements.txt
    +++ b/sdk/core/azure-core-tracing-opentelemetry/dev_requirements.txt
    @@ -1,3 +1,3 @@
     -e ../../../tools/azure-sdk-tools
     ../azure-core
    -opentelemetry-sdk==0.3a0
    \ No newline at end of file
    +opentelemetry-sdk==0.4a0
    \ No newline at end of file
    diff --git a/sdk/core/azure-core-tracing-opentelemetry/setup.py b/sdk/core/azure-core-tracing-opentelemetry/setup.py
    index bd9c9b0df5c5..999815cb2a68 100644
    --- a/sdk/core/azure-core-tracing-opentelemetry/setup.py
    +++ b/sdk/core/azure-core-tracing-opentelemetry/setup.py
    @@ -41,7 +41,7 @@
         author_email='azpysdkhelp@microsoft.com',
         url='https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/core/azure-core-tracing-opentelemetry',
         classifiers=[
    -        'Development Status :: 4 - Beta',
    +        "Development Status :: 4 - Beta",
             'Programming Language :: Python',
             'Programming Language :: Python :: 2',
             'Programming Language :: Python :: 2.7',
    @@ -58,7 +58,7 @@
         ],
         python_requires=">=3.5.0",
         install_requires=[
    -        'opentelemetry-api==0.3a0',
    +        'opentelemetry-api==0.4a0',
             'azure-core<2.0.0,>=1.0.0',
         ],
         extras_require={
    diff --git a/sdk/core/azure-core-tracing-opentelemetry/tests/conftest.py b/sdk/core/azure-core-tracing-opentelemetry/tests/conftest.py
    index a834f86a40f6..fd281420e170 100644
    --- a/sdk/core/azure-core-tracing-opentelemetry/tests/conftest.py
    +++ b/sdk/core/azure-core-tracing-opentelemetry/tests/conftest.py
    @@ -3,12 +3,12 @@
     # Licensed under the MIT License.
     # ------------------------------------
     from opentelemetry import trace
    -from opentelemetry.sdk.trace import Tracer
    +from opentelemetry.sdk.trace import TracerSource
     
     import pytest
     
     
     @pytest.fixture(scope="session")
     def tracer():
    -    trace.set_preferred_tracer_implementation(lambda T: Tracer())
    -    return trace.tracer()
    +    trace.set_preferred_tracer_source_implementation(lambda T: TracerSource())
    +    return trace.get_tracer(__name__)
    diff --git a/sdk/core/azure-core-tracing-opentelemetry/tests/test_tracing_implementations.py b/sdk/core/azure-core-tracing-opentelemetry/tests/test_tracing_implementations.py
    index b7a1297aec34..3c1b9042d796 100644
    --- a/sdk/core/azure-core-tracing-opentelemetry/tests/test_tracing_implementations.py
    +++ b/sdk/core/azure-core-tracing-opentelemetry/tests/test_tracing_implementations.py
    @@ -43,7 +43,7 @@ def test_no_span_passed_in_with_no_environ(self, tracer):
     
         def test_span(self, tracer):
             with tracer.start_as_current_span("Root") as parent:
    -            assert OpenTelemetrySpan.get_current_tracer() is tracer
    +            assert OpenTelemetrySpan.get_current_tracer().source is tracer.source
                 with OpenTelemetrySpan() as wrapped_span:
                     assert wrapped_span.span_instance is tracer.get_current_span()
     
    diff --git a/sdk/core/azure-core/CHANGELOG.md b/sdk/core/azure-core/CHANGELOG.md
    index 3de8739db668..c6b631c52744 100644
    --- a/sdk/core/azure-core/CHANGELOG.md
    +++ b/sdk/core/azure-core/CHANGELOG.md
    @@ -1,11 +1,15 @@
     
     # Release History
     
    -## 1.3.0 (Unreleased)
    +## 1.3.1 (Unreleased)
    +
    +
    +## 1.3.0 (2020-03-09)
     
     ### Bug fixes
     
     - Appended RequestIdPolicy to the default pipeline  #9841
    +- Rewind the body position in async_retry   #10117
     
     ### Features
     
    diff --git a/sdk/core/azure-core/azure/core/_version.py b/sdk/core/azure-core/azure/core/_version.py
    index 5c7c2c72b8c6..a1bc464f82bb 100644
    --- a/sdk/core/azure-core/azure/core/_version.py
    +++ b/sdk/core/azure-core/azure/core/_version.py
    @@ -9,4 +9,4 @@
     # regenerated.
     # --------------------------------------------------------------------------
     
    -VERSION = "1.2.3"
    +VERSION = "1.3.1"
    diff --git a/sdk/core/azure-core/azure/core/pipeline/policies/_retry_async.py b/sdk/core/azure-core/azure/core/pipeline/policies/_retry_async.py
    index 9567315b34a6..8b95b11a2f0c 100644
    --- a/sdk/core/azure-core/azure/core/pipeline/policies/_retry_async.py
    +++ b/sdk/core/azure-core/azure/core/pipeline/policies/_retry_async.py
    @@ -136,6 +136,7 @@ async def send(self, request):
             retry_active = True
             response = None
             retry_settings = self.configure_retries(request.context.options)
    +        self._configure_positions(request, retry_settings)
     
             absolute_timeout = retry_settings['timeout']
             is_response_error = True
    diff --git a/sdk/core/azure-core/azure/core/tracing/__init__.py b/sdk/core/azure-core/azure/core/tracing/__init__.py
    index 098fceb8802d..d084cc579320 100644
    --- a/sdk/core/azure-core/azure/core/tracing/__init__.py
    +++ b/sdk/core/azure-core/azure/core/tracing/__init__.py
    @@ -2,7 +2,7 @@
     # Copyright (c) Microsoft Corporation.
     # Licensed under the MIT License.
     # ------------------------------------
    -from ._abstract_span import AbstractSpan, SpanKind, HttpSpanMixin
    +from azure.core.tracing._abstract_span import AbstractSpan, SpanKind, HttpSpanMixin
     
     __all__ = [
         "AbstractSpan", "SpanKind", "HttpSpanMixin"
    diff --git a/sdk/core/azure-core/azure/core/tracing/decorator.py b/sdk/core/azure-core/azure/core/tracing/decorator.py
    index 686dd9d7b762..7330af62ee31 100644
    --- a/sdk/core/azure-core/azure/core/tracing/decorator.py
    +++ b/sdk/core/azure-core/azure/core/tracing/decorator.py
    @@ -27,6 +27,8 @@
     
     import functools
     
    +from typing import overload
    +
     from .common import change_context, get_function_and_class_name
     from ..settings import settings
     
    @@ -36,11 +38,27 @@
         TYPE_CHECKING = False
     
     if TYPE_CHECKING:
    -    from typing import Callable, Dict, Optional, Any, cast
    +    from typing import Callable, Dict, Optional, Any, TypeVar
    +
    +    T = TypeVar("T")
    +
    +
    +@overload
    +def distributed_trace(__func):
    +    # type: (Callable[..., T]) -> Callable[..., T]
    +    pass
     
     
    -def distributed_trace(_func=None, name_of_span=None, **kwargs):
    -    # type: (Callable, Optional[str], Optional[Dict[str, Any]]) -> Callable
    +@overload
    +def distributed_trace(**kwargs):  # pylint:disable=function-redefined,unused-argument
    +    # type: (**Any) -> Callable[[Callable[..., T]], Callable[..., T]]
    +    pass
    +
    +
    +def distributed_trace(  # pylint:disable=function-redefined
    +    __func=None,  # type: Callable[..., T]
    +    **kwargs  # type: Any
    +):
         """Decorator to apply to function to get traced automatically.
     
         Span will use the func name or "name_of_span".
    @@ -48,37 +66,33 @@ def distributed_trace(_func=None, name_of_span=None, **kwargs):
         :param callable func: A function to decorate
         :param str name_of_span: The span name to replace func name if necessary
         """
    -    tracing_attributes = kwargs.get('tracing_attributes')
    -    # https://github.com/python/mypy/issues/2608
    -    if _func is None:
    -        return functools.partial(
    -            distributed_trace,
    -            name_of_span=name_of_span,
    -            tracing_attributes=tracing_attributes,
    -        )
    -    func = _func  # mypy is happy now
    -
    -    not_none_tracing_attributes = tracing_attributes if tracing_attributes else {}
    -
    -    @functools.wraps(func)
    -    def wrapper_use_tracer(*args, **kwargs):
    -        # type: (Any, Any) -> Any
    -        merge_span = kwargs.pop("merge_span", False)
    -        passed_in_parent = kwargs.pop("parent_span", None)
    -
    -        span_impl_type = settings.tracing_implementation()
    -        if span_impl_type is None:
    -            return func(*args, **kwargs)
    -
    -        # Merge span is parameter is set, but only if no explicit parent are passed
    -        if merge_span and not passed_in_parent:
    -            return func(*args, **kwargs)
    -
    -        with change_context(passed_in_parent):
    -            name = name_of_span or get_function_and_class_name(func, *args)
    -            with span_impl_type(name=name) as span:
    -                for key, value in not_none_tracing_attributes.items():
    -                    span.add_attribute(key, value)
    +    name_of_span = kwargs.pop("name_of_span", None)
    +    tracing_attributes = kwargs.pop("tracing_attributes", {})
    +
    +    def decorator(func):
    +        # type: (Callable[..., T]) -> Callable[..., T]
    +
    +        @functools.wraps(func)
    +        def wrapper_use_tracer(*args, **kwargs):
    +            # type: (*Any, **Any) -> T
    +            merge_span = kwargs.pop("merge_span", False)
    +            passed_in_parent = kwargs.pop("parent_span", None)
    +
    +            span_impl_type = settings.tracing_implementation()
    +            if span_impl_type is None:
    +                return func(*args, **kwargs)
    +
    +            # Merge span is parameter is set, but only if no explicit parent are passed
    +            if merge_span and not passed_in_parent:
                     return func(*args, **kwargs)
     
    -    return wrapper_use_tracer
    +            with change_context(passed_in_parent):
    +                name = name_of_span or get_function_and_class_name(func, *args)
    +                with span_impl_type(name=name) as span:
    +                    for key, value in tracing_attributes.items():
    +                        span.add_attribute(key, value)
    +                    return func(*args, **kwargs)
    +
    +        return wrapper_use_tracer
    +
    +    return decorator if __func is None else decorator(__func)
    diff --git a/sdk/core/azure-core/azure/core/tracing/decorator_async.py b/sdk/core/azure-core/azure/core/tracing/decorator_async.py
    index 8a2a0ad6efce..de051987274b 100644
    --- a/sdk/core/azure-core/azure/core/tracing/decorator_async.py
    +++ b/sdk/core/azure-core/azure/core/tracing/decorator_async.py
    @@ -27,57 +27,64 @@
     
     import functools
     
    +from typing import Awaitable, Callable, Dict, Optional, Any, TypeVar, overload
    +
     from .common import change_context, get_function_and_class_name
     from ..settings import settings
     
    -try:
    -    from typing import TYPE_CHECKING
    -except ImportError:
    -    TYPE_CHECKING = False
     
    -if TYPE_CHECKING:
    -    from typing import Callable, Dict, Optional, Any
    +T = TypeVar("T")
    +
    +
    +@overload
    +def distributed_trace_async(
    +    __func: Callable[..., Awaitable[T]]
    +) -> Callable[..., Awaitable[T]]:
    +    pass
     
     
    -def distributed_trace_async(_func=None, name_of_span=None, *, tracing_attributes=None):
    -    # type: (Callable, Optional[str], Optional[Dict[str, Any]]) -> Callable
    -    """Decorator to apply to async function to get traced automatically.
    +@overload
    +def distributed_trace_async(  # pylint:disable=function-redefined
    +    **kwargs: Any  # pylint:disable=unused-argument
    +) -> Callable[[Callable[..., Awaitable[T]]], Callable[..., Awaitable[T]]]:
    +    pass
    +
    +
    +def distributed_trace_async(  # pylint:disable=function-redefined
    +    __func: Callable[..., Awaitable[T]] = None, **kwargs: Any
    +):
    +    """Decorator to apply to function to get traced automatically.
     
         Span will use the func name or "name_of_span".
     
         :param callable func: A function to decorate
         :param str name_of_span: The span name to replace func name if necessary
         """
    -    # https://github.com/python/mypy/issues/2608
    -    if _func is None:
    -        return functools.partial(
    -            distributed_trace_async,
    -            name_of_span=name_of_span,
    -            tracing_attributes=tracing_attributes,
    -        )
    -    func = _func  # mypy is happy now
    -
    -    not_none_tracing_attributes = tracing_attributes if tracing_attributes else {}
    -
    -    @functools.wraps(func)
    -    async def wrapper_use_tracer(*args, **kwargs):
    -        # type: (Any, Any) -> Any
    -        merge_span = kwargs.pop("merge_span", False)
    -        passed_in_parent = kwargs.pop("parent_span", None)
    -
    -        span_impl_type = settings.tracing_implementation()
    -        if span_impl_type is None:
    -            return await func(*args, **kwargs)
    -
    -        # Merge span is parameter is set, but only if no explicit parent are passed
    -        if merge_span and not passed_in_parent:
    -            return await func(*args, **kwargs)
    -
    -        with change_context(passed_in_parent):
    -            name = name_of_span or get_function_and_class_name(func, *args)
    -            with span_impl_type(name=name) as span:
    -                for key, value in not_none_tracing_attributes.items():
    -                    span.add_attribute(key, value)
    +    name_of_span = kwargs.pop("name_of_span", None)
    +    tracing_attributes = kwargs.pop("tracing_attributes", {})
    +
    +    def decorator(func: Callable[..., Awaitable[T]]) -> Callable[..., Awaitable[T]]:
    +        @functools.wraps(func)
    +        async def wrapper_use_tracer(*args, **kwargs):
    +            # type: (*Any, **Any) -> T
    +            merge_span = kwargs.pop("merge_span", False)
    +            passed_in_parent = kwargs.pop("parent_span", None)
    +
    +            span_impl_type = settings.tracing_implementation()
    +            if span_impl_type is None:
    +                return await func(*args, **kwargs)
    +
    +            # Merge span is parameter is set, but only if no explicit parent are passed
    +            if merge_span and not passed_in_parent:
                     return await func(*args, **kwargs)
     
    -    return wrapper_use_tracer
    +            with change_context(passed_in_parent):
    +                name = name_of_span or get_function_and_class_name(func, *args)
    +                with span_impl_type(name=name) as span:
    +                    for key, value in tracing_attributes.items():
    +                        span.add_attribute(key, value)
    +                    return await func(*args, **kwargs)
    +
    +        return wrapper_use_tracer
    +
    +    return decorator if __func is None else decorator(__func)
    diff --git a/sdk/core/azure-core/setup.py b/sdk/core/azure-core/setup.py
    index f684aeb34dd6..7792492ec06b 100644
    --- a/sdk/core/azure-core/setup.py
    +++ b/sdk/core/azure-core/setup.py
    @@ -45,7 +45,7 @@
         author_email='azpysdkhelp@microsoft.com',
         url='https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/core/azure-core',
         classifiers=[
    -        'Development Status :: 5 - Production/Stable',
    +        "Development Status :: 5 - Production/Stable",
             'Programming Language :: Python',
             'Programming Language :: Python :: 2',
             'Programming Language :: Python :: 2.7',
    diff --git a/sdk/core/azure-core/tests/azure_core_asynctests/test_retry_policy.py b/sdk/core/azure-core/tests/azure_core_asynctests/test_retry_policy.py
    new file mode 100644
    index 000000000000..94e00532d2e8
    --- /dev/null
    +++ b/sdk/core/azure-core/tests/azure_core_asynctests/test_retry_policy.py
    @@ -0,0 +1,197 @@
    +# ------------------------------------
    +# Copyright (c) Microsoft Corporation.
    +# Licensed under the MIT License.
    +# ------------------------------------
    +"""Tests for the retry policy."""
    +try:
    +    from io import BytesIO
    +except ImportError:
    +    from cStringIO import StringIO as BytesIO
    +import sys
    +import mock
    +import pytest
    +from azure.core.exceptions import AzureError, ServiceResponseError, ServiceResponseTimeoutError
    +from azure.core.pipeline.policies import (
    +    AsyncRetryPolicy,
    +    RetryMode,
    +)
    +from azure.core.pipeline import AsyncPipeline, PipelineResponse
    +from azure.core.pipeline.transport import (
    +    HttpRequest,
    +    HttpResponse,
    +    AsyncHttpTransport,
    +)
    +import tempfile
    +import os
    +import time
    +import asyncio
    +
    +def test_retry_code_class_variables():
    +    retry_policy = AsyncRetryPolicy()
    +    assert retry_policy._RETRY_CODES is not None
    +    assert 408 in retry_policy._RETRY_CODES
    +    assert 429 in retry_policy._RETRY_CODES
    +    assert 501 not in retry_policy._RETRY_CODES
    +
    +def test_retry_types():
    +    history = ["1", "2", "3"]
    +    settings = {
    +        'history': history,
    +        'backoff': 1,
    +        'max_backoff': 10
    +    }
    +    retry_policy = AsyncRetryPolicy()
    +    backoff_time = retry_policy.get_backoff_time(settings)
    +    assert backoff_time == 4
    +
    +    retry_policy = AsyncRetryPolicy(retry_mode=RetryMode.Fixed)
    +    backoff_time = retry_policy.get_backoff_time(settings)
    +    assert backoff_time == 1
    +
    +    retry_policy = AsyncRetryPolicy(retry_mode=RetryMode.Exponential)
    +    backoff_time = retry_policy.get_backoff_time(settings)
    +    assert backoff_time == 4
    +
    +@pytest.mark.parametrize("retry_after_input", [('0'), ('800'), ('1000'), ('1200')])
    +def test_retry_after(retry_after_input):
    +    retry_policy = AsyncRetryPolicy()
    +    request = HttpRequest("GET", "https://bing.com")
    +    response = HttpResponse(request, None)
    +    response.headers["retry-after-ms"] = retry_after_input
    +    pipeline_response = PipelineResponse(request, response, None)
    +    retry_after = retry_policy.get_retry_after(pipeline_response)
    +    seconds = float(retry_after_input)
    +    assert retry_after == seconds/1000.0
    +    response.headers.pop("retry-after-ms")
    +    response.headers["Retry-After"] = retry_after_input
    +    retry_after = retry_policy.get_retry_after(pipeline_response)
    +    assert retry_after == float(retry_after_input)
    +    response.headers["retry-after-ms"] = 500
    +    retry_after = retry_policy.get_retry_after(pipeline_response)
    +    assert retry_after == float(retry_after_input)
    +
    +@pytest.mark.asyncio
    +async def test_retry_on_429():
    +    class MockTransport(AsyncHttpTransport):
    +        def __init__(self):
    +            self._count = 0
    +        async def __aexit__(self, exc_type, exc_val, exc_tb):
    +            pass
    +        async def close(self):
    +            pass
    +        async def open(self):
    +            pass
    +
    +        async def send(self, request, **kwargs):  # type: (PipelineRequest, Any) -> PipelineResponse
    +            self._count += 1
    +            response = HttpResponse(request, None)
    +            response.status_code = 429
    +            return response
    +
    +    http_request = HttpRequest('GET', 'http://127.0.0.1/')
    +    http_retry = AsyncRetryPolicy(retry_total = 1)
    +    transport = MockTransport()
    +    pipeline = AsyncPipeline(transport, [http_retry])
    +    await pipeline.run(http_request)
    +    assert transport._count == 2
    +
    +@pytest.mark.asyncio
    +async def test_retry_seekable_stream():
    +    class MockTransport(AsyncHttpTransport):
    +        def __init__(self):
    +            self._first = True
    +        async def __aexit__(self, exc_type, exc_val, exc_tb):
    +            pass
    +        async def close(self):
    +            pass
    +        async def open(self):
    +            pass
    +
    +        async def send(self, request, **kwargs):  # type: (PipelineRequest, Any) -> PipelineResponse
    +            if self._first:
    +                self._first = False
    +                request.body.seek(0,2)
    +                raise AzureError('fail on first')
    +            position = request.body.tell()
    +            assert position == 0
    +            return HttpResponse(request, None)
    +
    +    data = BytesIO(b"Lots of dataaaa")
    +    http_request = HttpRequest('GET', 'http://127.0.0.1/')
    +    http_request.set_streamed_data_body(data)
    +    http_retry = AsyncRetryPolicy(retry_total = 1)
    +    pipeline = AsyncPipeline(MockTransport(), [http_retry])
    +    await pipeline.run(http_request)
    +
    +@pytest.mark.asyncio
    +async def test_retry_seekable_file():
    +    class MockTransport(AsyncHttpTransport):
    +        def __init__(self):
    +            self._first = True
    +        async def __aexit__(self, exc_type, exc_val, exc_tb):
    +            pass
    +        async def close(self):
    +            pass
    +        async def open(self):
    +            pass
    +
    +        async def send(self, request, **kwargs):  # type: (PipelineRequest, Any) -> PipelineResponse
    +            if self._first:
    +                self._first = False
    +                for value in request.files.values():
    +                    name, body = value[0], value[1]
    +                    if name and body and hasattr(body, 'read'):
    +                        body.seek(0,2)
    +                        raise AzureError('fail on first')
    +            for value in request.files.values():
    +                name, body = value[0], value[1]
    +                if name and body and hasattr(body, 'read'):
    +                    position = body.tell()
    +                    assert not position
    +                    return HttpResponse(request, None)
    +
    +    file = tempfile.NamedTemporaryFile(delete=False)
    +    file.write(b'Lots of dataaaa')
    +    file.close()
    +    http_request = HttpRequest('GET', 'http://127.0.0.1/')
    +    headers = {'Content-Type': "multipart/form-data"}
    +    http_request.headers = headers
    +    with open(file.name, 'rb') as f:
    +        form_data_content = {
    +            'fileContent': f,
    +            'fileName': f.name,
    +        }
    +        http_request.set_formdata_body(form_data_content)
    +        http_retry = AsyncRetryPolicy(retry_total=1)
    +        pipeline = AsyncPipeline(MockTransport(), [http_retry])
    +        await pipeline.run(http_request)
    +    os.unlink(f.name)
    +
    +@pytest.mark.asyncio
    +async def test_retry_timeout():
    +    class MockTransport(AsyncHttpTransport):
    +        def __init__(self):
    +            self.count = 0
    +
    +        async def __aexit__(self, exc_type, exc_val, exc_tb):
    +            pass
    +        async def close(self):
    +            pass
    +        async def open(self):
    +            pass
    +
    +        async def send(self, request, **kwargs):  # type: (PipelineRequest, Any) -> PipelineResponse
    +            self.count += 1
    +            if self.count > 2:
    +                assert self.count <= 2
    +            time.sleep(0.5)
    +            raise ServiceResponseError('timeout')
    +
    +    http_request = HttpRequest('GET', 'http://127.0.0.1/')
    +    headers = {'Content-Type': "multipart/form-data"}
    +    http_request.headers = headers
    +    http_retry = AsyncRetryPolicy(retry_total=10, timeout=1)
    +    pipeline = AsyncPipeline(MockTransport(), [http_retry])
    +    with pytest.raises(ServiceResponseTimeoutError):
    +        await pipeline.run(http_request)
    +
    diff --git a/sdk/core/azure-mgmt-core/CHANGELOG.md b/sdk/core/azure-mgmt-core/CHANGELOG.md
    new file mode 100644
    index 000000000000..d4d09a1d7f11
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/CHANGELOG.md
    @@ -0,0 +1,6 @@
    +
    +# Release History
    +
    +## 1.0.0b1 (2020-03-10)
    +
    +- Preview 1 release
    diff --git a/sdk/core/azure-mgmt-core/LICENSE.md b/sdk/core/azure-mgmt-core/LICENSE.md
    new file mode 100644
    index 000000000000..ad1ad2347cb8
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/LICENSE.md
    @@ -0,0 +1,21 @@
    +MIT License
    +
    +Copyright (c) 2016 Microsoft Azure
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    diff --git a/sdk/core/azure-mgmt-core/MANIFEST.in b/sdk/core/azure-mgmt-core/MANIFEST.in
    new file mode 100644
    index 000000000000..5f6a437af876
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/MANIFEST.in
    @@ -0,0 +1,8 @@
    +recursive-include tests *.py
    +include *.md
    +include azure/__init__.py
    +include azure/mgmt/__init__.py
    +recursive-include samples *.py *.md
    +recursive-include doc *.rst
    +include azure/mgmt/core/py.typed
    +
    diff --git a/sdk/core/azure-mgmt-core/README.md b/sdk/core/azure-mgmt-core/README.md
    new file mode 100644
    index 000000000000..bbcb6d5993bd
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/README.md
    @@ -0,0 +1,30 @@
    +
    +# Azure Management Core Library
    +
    +Azure management core library defines extensions to Azure Core that are specific to ARM (Azure Resource Management) needed when you use client libraries.
    +
    +As an end user, you don't need to manually install azure-mgmt-core because it will be installed automatically when you install other SDKs.
    +
    +[Source code]() | [Package (Pypi)][package] | [API reference documentation]()
    +
    +
    +## Contributing
    +This project welcomes contributions and suggestions. Most contributions require
    +you to agree to a Contributor License Agreement (CLA) declaring that you have
    +the right to, and actually do, grant us the rights to use your contribution.
    +For details, visit [https://cla.microsoft.com](https://cla.microsoft.com).
    +
    +When you submit a pull request, a CLA-bot will automatically determine whether
    +you need to provide a CLA and decorate the PR appropriately (e.g., label,
    +comment). Simply follow the instructions provided by the bot. You will only
    +need to do this once across all repos using our CLA.
    +
    +This project has adopted the
    +[Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
    +For more information, see the
    +[Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
    +or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any
    +additional questions or comments.
    +
    +
    +[package]: https://pypi.org/project/azure-mgmt-core/
    \ No newline at end of file
    diff --git a/sdk/core/azure-mgmt-core/azure/__init__.py b/sdk/core/azure-mgmt-core/azure/__init__.py
    new file mode 100644
    index 000000000000..0d1f7edf5dc6
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/__init__.py
    @@ -0,0 +1 @@
    +__path__ = __import__('pkgutil').extend_path(__path__, __name__)  # type: ignore
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/__init__.py b/sdk/core/azure-mgmt-core/azure/mgmt/__init__.py
    new file mode 100644
    index 000000000000..0d1f7edf5dc6
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/__init__.py
    @@ -0,0 +1 @@
    +__path__ = __import__('pkgutil').extend_path(__path__, __name__)  # type: ignore
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/core/__init__.py b/sdk/core/azure-mgmt-core/azure/mgmt/core/__init__.py
    new file mode 100644
    index 000000000000..a4ad20efe6e9
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/core/__init__.py
    @@ -0,0 +1,41 @@
    +# --------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to
    +# deal in the Software without restriction, including without limitation the
    +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    +# sell copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    +# IN THE SOFTWARE.
    +#
    +# --------------------------------------------------------------------------
    +
    +
    +from ._version import VERSION
    +from ._pipeline_client import ARMPipelineClient
    +
    +__all__ = ["ARMPipelineClient"]
    +__version__ = VERSION
    +
    +try:
    +    from ._async_pipeline_client import (  # pylint: disable=unused-import
    +        AsyncARMPipelineClient,
    +    )
    +
    +    __all__.extend(["AsyncARMPipelineClient"])
    +except (ImportError, SyntaxError):  # Python <= 3.5
    +    pass
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/core/_async_pipeline_client.py b/sdk/core/azure-mgmt-core/azure/mgmt/core/_async_pipeline_client.py
    new file mode 100644
    index 000000000000..4fb083797be7
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/core/_async_pipeline_client.py
    @@ -0,0 +1,70 @@
    +# --------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to
    +# deal in the Software without restriction, including without limitation the
    +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    +# sell copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    +# IN THE SOFTWARE.
    +#
    +# --------------------------------------------------------------------------
    +from azure.core import AsyncPipelineClient
    +from azure.core.pipeline.policies import (
    +    ContentDecodePolicy,
    +    DistributedTracingPolicy,
    +    HttpLoggingPolicy,
    +    RequestIdPolicy,
    +)
    +from .policies import AsyncARMAutoResourceProviderRegistrationPolicy
    +
    +
    +class AsyncARMPipelineClient(AsyncPipelineClient):
    +    """A pipeline client designed for ARM explicitly.
    +
    +    :param str base_url: URL for the request.
    +    :keyword AsyncPipeline pipeline: If omitted, a Pipeline object is created and returned.
    +    :keyword list[HTTPPolicy] policies: If omitted, the standard policies of the configuration object is used.
    +    :keyword HttpTransport transport: If omitted, RequestsTransport is used for synchronous transport.
    +    """
    +
    +    def __init__(self, base_url, **kwargs):
    +        if "policies" not in kwargs:
    +            if "config" not in kwargs:
    +                raise ValueError(
    +                    "Current implementation requires to pass 'config' if you don't pass 'policies'"
    +                )
    +            kwargs["policies"] = self._default_policies(**kwargs)
    +        super(AsyncARMPipelineClient, self).__init__(base_url, **kwargs)
    +
    +    @staticmethod
    +    def _default_policies(config, **kwargs):
    +        return [
    +            RequestIdPolicy(**kwargs),
    +            AsyncARMAutoResourceProviderRegistrationPolicy(),
    +            config.headers_policy,
    +            config.user_agent_policy,
    +            config.proxy_policy,
    +            ContentDecodePolicy(**kwargs),
    +            config.redirect_policy,
    +            config.retry_policy,
    +            config.authentication_policy,
    +            config.custom_hook_policy,
    +            config.logging_policy,
    +            DistributedTracingPolicy(**kwargs),
    +            HttpLoggingPolicy(**kwargs),
    +        ]
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/core/_pipeline_client.py b/sdk/core/azure-mgmt-core/azure/mgmt/core/_pipeline_client.py
    new file mode 100644
    index 000000000000..79ec52538973
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/core/_pipeline_client.py
    @@ -0,0 +1,70 @@
    +# --------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to
    +# deal in the Software without restriction, including without limitation the
    +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    +# sell copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    +# IN THE SOFTWARE.
    +#
    +# --------------------------------------------------------------------------
    +from azure.core import PipelineClient
    +from azure.core.pipeline.policies import (
    +    ContentDecodePolicy,
    +    DistributedTracingPolicy,
    +    HttpLoggingPolicy,
    +    RequestIdPolicy,
    +)
    +from .policies import ARMAutoResourceProviderRegistrationPolicy
    +
    +
    +class ARMPipelineClient(PipelineClient):
    +    """A pipeline client designed for ARM explicitly.
    +
    +    :param str base_url: URL for the request.
    +    :keyword Pipeline pipeline: If omitted, a Pipeline object is created and returned.
    +    :keyword list[HTTPPolicy] policies: If omitted, the standard policies of the configuration object is used.
    +    :keyword HttpTransport transport: If omitted, RequestsTransport is used for synchronous transport.
    +    """
    +
    +    def __init__(self, base_url, **kwargs):
    +        if "policies" not in kwargs:
    +            if "config" not in kwargs:
    +                raise ValueError(
    +                    "Current implementation requires to pass 'config' if you don't pass 'policies'"
    +                )
    +            kwargs["policies"] = self._default_policies(**kwargs)
    +        super(ARMPipelineClient, self).__init__(base_url, **kwargs)
    +
    +    @staticmethod
    +    def _default_policies(config, **kwargs):
    +        return [
    +            RequestIdPolicy(**kwargs),
    +            ARMAutoResourceProviderRegistrationPolicy(),
    +            config.headers_policy,
    +            config.user_agent_policy,
    +            config.proxy_policy,
    +            ContentDecodePolicy(**kwargs),
    +            config.redirect_policy,
    +            config.retry_policy,
    +            config.authentication_policy,
    +            config.custom_hook_policy,
    +            config.logging_policy,
    +            DistributedTracingPolicy(**kwargs),
    +            HttpLoggingPolicy(**kwargs),
    +        ]
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/core/_version.py b/sdk/core/azure-mgmt-core/azure/mgmt/core/_version.py
    new file mode 100644
    index 000000000000..e0e6f985e658
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/core/_version.py
    @@ -0,0 +1,12 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "1.0.0b1"
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/core/exceptions.py b/sdk/core/azure-mgmt-core/azure/mgmt/core/exceptions.py
    new file mode 100644
    index 000000000000..d189d018e8da
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/core/exceptions.py
    @@ -0,0 +1,81 @@
    +# --------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to
    +# deal in the Software without restriction, including without limitation the
    +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    +# sell copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    +# IN THE SOFTWARE.
    +#
    +# --------------------------------------------------------------------------
    +
    +import json
    +import logging
    +
    +
    +from azure.core.exceptions import ODataV4Format
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +class TypedErrorInfo:
    +    """Additional info class defined in ARM specification.
    +
    +    https://github.com/Azure/azure-resource-manager-rpc/blob/master/v1.0/common-api-details.md#error-response-content
    +    """
    +
    +    def __init__(self, type, info):  # pylint: disable=redefined-builtin
    +        self.type = type
    +        self.info = info
    +
    +    def __str__(self):
    +        """Cloud error message."""
    +        error_str = "Type: {}".format(self.type)
    +        error_str += "\nInfo: {}".format(json.dumps(self.info, indent=4))
    +        return error_str
    +
    +
    +class ARMErrorFormat(ODataV4Format):
    +    """Describe error format from ARM, used at the base or inside "details" node.
    +
    +    This format is compatible with ODataV4 format.
    +    https://github.com/Azure/azure-resource-manager-rpc/blob/master/v1.0/common-api-details.md#error-response-content
    +    """
    +
    +    def __init__(self, json_object):
    +        # Parse the ODatav4 part
    +        super(ARMErrorFormat, self).__init__(json_object)
    +        if "error" in json_object:
    +            json_object = json_object["error"]
    +
    +        # ARM specific annotations
    +        self.additional_info = [
    +            TypedErrorInfo(additional_info["type"], additional_info["info"])
    +            for additional_info in json_object.get("additionalInfo", [])
    +        ]
    +
    +    def __str__(self):
    +        error_str = super(ARMErrorFormat, self).__str__()
    +
    +        if self.additional_info:
    +            error_str += "\nAdditional Information:"
    +            for error_info in self.additional_info:
    +                error_str += str(error_info)
    +
    +        return error_str
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/core/policies/__init__.py b/sdk/core/azure-mgmt-core/azure/mgmt/core/policies/__init__.py
    new file mode 100644
    index 000000000000..cc1d59e2df0c
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/core/policies/__init__.py
    @@ -0,0 +1,38 @@
    +# --------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to
    +# deal in the Software without restriction, including without limitation the
    +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    +# sell copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    +# IN THE SOFTWARE.
    +#
    +# --------------------------------------------------------------------------
    +
    +from ._base import ARMAutoResourceProviderRegistrationPolicy
    +
    +__all__ = ["ARMAutoResourceProviderRegistrationPolicy"]
    +
    +try:
    +    from ._base_async import (  # pylint: disable=unused-import
    +        AsyncARMAutoResourceProviderRegistrationPolicy,
    +    )
    +
    +    __all__.extend(["AsyncARMAutoResourceProviderRegistrationPolicy"])
    +except (ImportError, SyntaxError):
    +    pass  # Async not supported
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/core/policies/_base.py b/sdk/core/azure-mgmt-core/azure/mgmt/core/policies/_base.py
    new file mode 100644
    index 000000000000..dd19692432b7
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/core/policies/_base.py
    @@ -0,0 +1,119 @@
    +# --------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to
    +# deal in the Software without restriction, including without limitation the
    +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    +# sell copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    +# IN THE SOFTWARE.
    +#
    +# --------------------------------------------------------------------------
    +import json
    +import logging
    +import re
    +import time
    +import uuid
    +
    +from azure.core.pipeline import PipelineContext, PipelineRequest
    +from azure.core.pipeline.policies import HTTPPolicy
    +from azure.core.pipeline.transport import HttpRequest
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +class ARMAutoResourceProviderRegistrationPolicy(HTTPPolicy):
    +    """Auto register an ARM resource provider if not done yet.
    +    """
    +
    +    def send(self, request):
    +        # type: (PipelineRequest[HTTPRequestType], Any) -> PipelineResponse[HTTPRequestType, HTTPResponseType]
    +        http_request = request.http_request
    +        response = self.next.send(request)
    +        if response.http_response.status_code == 409:
    +            rp_name = self._check_rp_not_registered_err(response)
    +            if rp_name:
    +                url_prefix = self._extract_subscription_url(http_request.url)
    +                if not self._register_rp(request, url_prefix, rp_name):
    +                    return response
    +                # Change the 'x-ms-client-request-id' otherwise the Azure endpoint
    +                # just returns the same 409 payload without looking at the actual query
    +                if "x-ms-client-request-id" in http_request.headers:
    +                    http_request.headers["x-ms-client-request-id"] = str(uuid.uuid4())
    +                response = self.next.send(request)
    +        return response
    +
    +    @staticmethod
    +    def _check_rp_not_registered_err(response):
    +        try:
    +            response = json.loads(response.http_response.text())
    +            if response["error"]["code"] == "MissingSubscriptionRegistration":
    +                match = re.match(r".*'(.*)'", response["error"]["message"])
    +                return match.group(1)
    +        except Exception:  # pylint: disable=broad-except
    +            pass
    +        return None
    +
    +    @staticmethod
    +    def _extract_subscription_url(url):
    +        """Extract the first part of the URL, just after subscription:
    +        https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/
    +        """
    +        match = re.match(r".*/subscriptions/[a-f0-9-]+/", url, re.IGNORECASE)
    +        if not match:
    +            raise ValueError("Unable to extract subscription ID from URL")
    +        return match.group(0)
    +
    +    @staticmethod
    +    def _build_next_request(initial_request, method, url):
    +        request = HttpRequest(method, url)
    +        context = PipelineContext(
    +            initial_request.context.transport, **initial_request.context.options
    +        )
    +        return PipelineRequest(request, context)
    +
    +    def _register_rp(self, initial_request, url_prefix, rp_name):
    +        """Synchronously register the RP is paremeter.
    +
    +        Return False if we have a reason to believe this didn't work
    +        """
    +        post_url = "{}providers/{}/register?api-version=2016-02-01".format(
    +            url_prefix, rp_name
    +        )
    +        get_url = "{}providers/{}?api-version=2016-02-01".format(url_prefix, rp_name)
    +        _LOGGER.warning(
    +            "Resource provider '%s' used by this operation is not "
    +            "registered. We are registering for you.",
    +            rp_name,
    +        )
    +        post_response = self.next.send(
    +            self._build_next_request(initial_request, "POST", post_url)
    +        )
    +        if post_response.http_response.status_code != 200:
    +            _LOGGER.warning("Registration failed. Please register manually.")
    +            return False
    +
    +        while True:
    +            time.sleep(10)
    +            get_response = self.next.send(
    +                self._build_next_request(initial_request, "GET", get_url)
    +            )
    +            rp_info = json.loads(get_response.http_response.text())
    +            if rp_info["registrationState"] == "Registered":
    +                _LOGGER.warning("Registration succeeded.")
    +                return True
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/core/policies/_base_async.py b/sdk/core/azure-mgmt-core/azure/mgmt/core/policies/_base_async.py
    new file mode 100644
    index 000000000000..90de3ea028d5
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/core/policies/_base_async.py
    @@ -0,0 +1,93 @@
    +# --------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to
    +# deal in the Software without restriction, including without limitation the
    +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    +# sell copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    +# IN THE SOFTWARE.
    +#
    +# --------------------------------------------------------------------------
    +import asyncio
    +import json
    +import logging
    +import uuid
    +
    +from azure.core.pipeline import PipelineRequest
    +from azure.core.pipeline.policies import AsyncHTTPPolicy
    +
    +from . import ARMAutoResourceProviderRegistrationPolicy
    +
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +class AsyncARMAutoResourceProviderRegistrationPolicy(
    +    ARMAutoResourceProviderRegistrationPolicy, AsyncHTTPPolicy
    +):
    +    """Auto register an ARM resource provider if not done yet.
    +    """
    +
    +    async def send(self, request: PipelineRequest):
    +        http_request = request.http_request
    +        response = await self.next.send(request)
    +        if response.http_response.status_code == 409:
    +            rp_name = self._check_rp_not_registered_err(response)
    +            if rp_name:
    +                url_prefix = self._extract_subscription_url(http_request.url)
    +                register_rp_status = await self._async_register_rp(
    +                    request, url_prefix, rp_name
    +                )
    +                if not register_rp_status:
    +                    return response
    +                # Change the 'x-ms-client-request-id' otherwise the Azure endpoint
    +                # just returns the same 409 payload without looking at the actual query
    +                if "x-ms-client-request-id" in http_request.headers:
    +                    http_request.headers["x-ms-client-request-id"] = str(uuid.uuid4())
    +                response = await self.next.send(request)
    +        return response
    +
    +    async def _async_register_rp(self, initial_request, url_prefix, rp_name):
    +        """Synchronously register the RP is paremeter.
    +
    +        Return False if we have a reason to believe this didn't work
    +        """
    +        post_url = "{}providers/{}/register?api-version=2016-02-01".format(
    +            url_prefix, rp_name
    +        )
    +        get_url = "{}providers/{}?api-version=2016-02-01".format(url_prefix, rp_name)
    +        _LOGGER.warning(
    +            "Resource provider '%s' used by this operation is not "
    +            "registered. We are registering for you.",
    +            rp_name,
    +        )
    +        post_response = await self.next.send(
    +            self._build_next_request(initial_request, "POST", post_url)
    +        )
    +        if post_response.http_response.status_code != 200:
    +            _LOGGER.warning("Registration failed. Please register manually.")
    +            return False
    +
    +        while True:
    +            asyncio.sleep(10)
    +            get_response = await self.next.send(
    +                self._build_next_request(initial_request, "GET", get_url)
    +            )
    +            rp_info = json.loads(get_response.http_response.text())
    +            if rp_info["registrationState"] == "Registered":
    +                _LOGGER.warning("Registration succeeded.")
    +                return True
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/core/polling/__init__.py b/sdk/core/azure-mgmt-core/azure/mgmt/core/polling/__init__.py
    new file mode 100644
    index 000000000000..c36aaed14908
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/core/polling/__init__.py
    @@ -0,0 +1,25 @@
    +# --------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to
    +# deal in the Software without restriction, including without limitation the
    +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    +# sell copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    +# IN THE SOFTWARE.
    +#
    +# --------------------------------------------------------------------------
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/core/polling/arm_polling.py b/sdk/core/azure-mgmt-core/azure/mgmt/core/polling/arm_polling.py
    new file mode 100644
    index 000000000000..ee58cfcadd38
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/core/polling/arm_polling.py
    @@ -0,0 +1,528 @@
    +# --------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to
    +# deal in the Software without restriction, including without limitation the
    +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    +# sell copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    +# IN THE SOFTWARE.
    +#
    +# --------------------------------------------------------------------------
    +import json
    +
    +try:
    +    from urlparse import urlparse
    +except ImportError:
    +    from urllib.parse import urlparse
    +
    +from azure.core.exceptions import DecodeError, HttpResponseError
    +from azure.core.polling import PollingMethod
    +
    +
    +FINISHED = frozenset(["succeeded", "canceled", "failed"])
    +FAILED = frozenset(["canceled", "failed"])
    +SUCCEEDED = frozenset(["succeeded"])
    +
    +_AZURE_ASYNC_OPERATION_FINAL_STATE = "azure-async-operation"
    +_LOCATION_FINAL_STATE = "location"
    +
    +
    +def finished(status):
    +    if hasattr(status, "value"):
    +        status = status.value
    +    return str(status).lower() in FINISHED
    +
    +
    +def failed(status):
    +    if hasattr(status, "value"):
    +        status = status.value
    +    return str(status).lower() in FAILED
    +
    +
    +def succeeded(status):
    +    if hasattr(status, "value"):
    +        status = status.value
    +    return str(status).lower() in SUCCEEDED
    +
    +
    +class BadStatus(Exception):
    +    pass
    +
    +
    +class BadResponse(Exception):
    +    pass
    +
    +
    +class OperationFailed(Exception):
    +    pass
    +
    +
    +def _validate(url):
    +    """Validate a url.
    +
    +    :param str url: Polling URL extracted from response header.
    +    :raises: ValueError if URL has no scheme or host.
    +    """
    +    if url is None:
    +        return
    +    parsed = urlparse(url)
    +    if not parsed.scheme or not parsed.netloc:
    +        raise ValueError("Invalid URL header")
    +
    +
    +def get_header_url(response, header_name):
    +    # type: (azure.core.pipeline.transport.HttpResponse, str) -> Optional[str]
    +    """Get a URL from a header requests.
    +
    +    :param requests.Response response: REST call response.
    +    :param str header_name: Header name.
    +    :returns: URL if not None AND valid, None otherwise
    +    """
    +    url = response.headers.get(header_name)
    +    try:
    +        _validate(url)
    +    except ValueError:
    +        return None
    +    else:
    +        return url
    +
    +
    +class LongRunningOperation(object):
    +    """LongRunningOperation
    +    Provides default logic for interpreting operation responses
    +    and status updates.
    +
    +    :param azure.core.pipeline.PipelineResponse response: The initial pipeline response.
    +    :param callable deserialization_callback: The deserialization callaback.
    +    :param dict lro_options: LRO options.
    +    :param kwargs: Unused for now
    +    """
    +
    +    def __init__(
    +        self, pipeline_response, deserialization_callback, lro_options=None, **kwargs  # pylint: disable=unused-argument
    +    ):
    +        self.method = pipeline_response.http_response.request.method
    +        self.initial_response = pipeline_response
    +        self.status = ""
    +        self.resource = None
    +        self.deserialization_callback = deserialization_callback
    +        self.async_url = None
    +        self.location_url = None
    +        if lro_options is None:
    +            lro_options = {"final-state-via": _AZURE_ASYNC_OPERATION_FINAL_STATE}
    +        self.lro_options = lro_options
    +
    +    def _raise_if_bad_http_status_and_method(self, response):
    +        # type: (azure.core.pipeline.transport.HttpResponse) -> None
    +        """Check response status code is valid.
    +
    +        Must be 200, 201, 202, or 204.
    +
    +        :raises: BadStatus if invalid status.
    +        """
    +        code = response.status_code
    +        if code in {200, 201, 202, 204}:
    +            return
    +        raise BadStatus(
    +            "Invalid return status {!r} for {!r} operation".format(code, self.method)
    +        )
    +
    +    @staticmethod
    +    def _is_empty(response):
    +        # type: (azure.core.pipeline.transport.HttpResponse) -> None
    +        """Check if response body contains meaningful content.
    +
    +        :rtype: bool
    +        :raises: DecodeError if response body contains invalid json data.
    +        """
    +        # Assume ClientResponse has "body", and otherwise it's a requests.Response
    +        content = response.text() if hasattr(response, "body") else response.text
    +        if not content:
    +            return True
    +        try:
    +            return not json.loads(content)
    +        except ValueError:
    +            raise DecodeError("Error occurred in deserializing the response body.")
    +
    +    @staticmethod
    +    def _as_json(response):
    +        # type: (azure.core.pipeline.transport.HttpResponse) -> None
    +        """Assuming this is not empty, return the content as JSON.
    +
    +        Result/exceptions is not determined if you call this method without testing _is_empty.
    +
    +        :raises: DecodeError if response body contains invalid json data.
    +        """
    +        # Assume ClientResponse has "body", and otherwise it's a requests.Response
    +        content = response.text() if hasattr(response, "body") else response.text
    +        try:
    +            return json.loads(content)
    +        except ValueError:
    +            raise DecodeError("Error occurred in deserializing the response body.")
    +
    +    def _deserialize(self, pipeline_response):
    +        # type: (azure.core.pipeline.PipelineResponse) -> None
    +        """Attempt to deserialize resource from response.
    +
    +        :param azure.core.pipeline.PipelineResponse response: latest REST call response.
    +        """
    +        return self.deserialization_callback(pipeline_response)
    +
    +    def _get_async_status(self, response):
    +        # type: (azure.core.pipeline.transport.HttpResponse) -> None
    +        """Attempt to find status info in response body.
    +
    +        :param azure.core.pipeline.transport.HttpResponse response: latest REST call response.
    +        :rtype: str
    +        :returns: Status if found, else 'None'.
    +        """
    +        if self._is_empty(response):
    +            return None
    +        body = self._as_json(response)
    +        return body.get("status")
    +
    +    def _get_provisioning_state(self, response):
    +        # type: (azure.core.pipeline.transport.HttpResponse) -> None
    +        """
    +        Attempt to get provisioning state from resource.
    +        :param azure.core.pipeline.transport.HttpResponse response: latest REST call response.
    +        :returns: Status if found, else 'None'.
    +        """
    +        if self._is_empty(response):
    +            return None
    +        body = self._as_json(response)
    +        return body.get("properties", {}).get("provisioningState")
    +
    +    def should_do_final_get(self):
    +        """Check whether the polling should end doing a final GET.
    +
    +        :rtype: bool
    +        """
    +        return (
    +            (self.async_url or not self.resource) and self.method in {"PUT", "PATCH"}
    +        ) or (
    +            self.lro_options["final-state-via"] == _LOCATION_FINAL_STATE
    +            and self.location_url
    +            and self.async_url
    +            and self.method == "POST"
    +        )
    +
    +    def set_initial_status(self, pipeline_response):
    +        # type: (azure.core.pipeline.PipelineResponse) -> None
    +        """Process first response after initiating long running
    +        operation and set self.status attribute.
    +
    +        :param azure.core.pipeline.PipelineResponse response: initial REST call response.
    +        """
    +        response = pipeline_response.http_response
    +        self._raise_if_bad_http_status_and_method(response)
    +
    +        if self._is_empty(response):
    +            self.resource = None
    +        else:
    +            try:
    +                self.resource = self._deserialize(pipeline_response)
    +            except Exception:  # pylint: disable=broad-except
    +                self.resource = None
    +
    +        self.set_async_url_if_present(response)
    +
    +        if response.status_code in {200, 201, 202, 204}:
    +            if self.async_url or self.location_url or response.status_code == 202:
    +                self.status = "InProgress"
    +            elif response.status_code == 201:
    +                status = self._get_provisioning_state(response)
    +                self.status = status or "InProgress"
    +            elif response.status_code == 200:
    +                status = self._get_provisioning_state(response)
    +                self.status = status or "Succeeded"
    +            elif response.status_code == 204:
    +                self.status = "Succeeded"
    +                self.resource = None
    +            else:
    +                raise OperationFailed("Invalid status found")
    +            return
    +        raise OperationFailed("Operation failed or canceled")
    +
    +    def get_status_from_location(self, pipeline_response):
    +        # type: (azure.core.pipeline.PipelineResponse) -> None
    +        """Process the latest status update retrieved from a 'location'
    +        header.
    +
    +        :param azure.core.pipeline.PipelineResponse response: latest REST call response.
    +        :raises: BadResponse if response has no body and not status 202.
    +        """
    +        response = pipeline_response.http_response
    +        self._raise_if_bad_http_status_and_method(response)
    +        code = response.status_code
    +        if code == 202:
    +            self.status = "InProgress"
    +        else:
    +            self.status = "Succeeded"
    +            if self._is_empty(response):
    +                self.resource = None
    +            else:
    +                self.resource = self._deserialize(pipeline_response)
    +
    +    def get_status_from_resource(self, pipeline_response):
    +        # type: (azure.core.pipeline.PipelineResponse) -> None
    +        """Process the latest status update retrieved from the same URL as
    +        the previous request.
    +
    +        :param azure.core.pipeline.PipelineResponse response: latest REST call response.
    +        :raises: BadResponse if status not 200 or 204.
    +        """
    +        response = pipeline_response.http_response
    +        self._raise_if_bad_http_status_and_method(response)
    +        if self._is_empty(response):
    +            raise BadResponse(
    +                "The response from long running operation " "does not contain a body."
    +            )
    +
    +        status = self._get_provisioning_state(response)
    +        self.status = status or "Succeeded"
    +
    +        self.parse_resource(pipeline_response)
    +
    +    def parse_resource(self, pipeline_response):
    +        # type: (azure.core.pipeline.PipelineResponse) -> None
    +        """Assuming this response is a resource, use the deserialization callback to parse it.
    +        If body is empty, assuming no resource to return.
    +        """
    +        response = pipeline_response.http_response
    +        self._raise_if_bad_http_status_and_method(response)
    +        if not self._is_empty(response):
    +            self.resource = self._deserialize(pipeline_response)
    +        else:
    +            self.resource = None
    +
    +    def get_status_from_async(self, pipeline_response):
    +        # type: (azure.core.pipeline.PipelineResponse) -> None
    +        """Process the latest status update retrieved from a
    +        'azure-asyncoperation' header.
    +
    +        :param azure.core.pipeline.PipelineResponse response: latest REST call response.
    +        :raises: BadResponse if response has no body, or body does not
    +         contain status.
    +        """
    +        response = pipeline_response.http_response
    +        self._raise_if_bad_http_status_and_method(response)
    +        if self._is_empty(response):
    +            raise BadResponse(
    +                "The response from long running operation " "does not contain a body."
    +            )
    +
    +        self.status = self._get_async_status(response)
    +        if not self.status:
    +            raise BadResponse("No status found in body")
    +
    +        # Status can contains information, see ARM spec:
    +        # https://github.com/Azure/azure-resource-manager-rpc/blob/master/v1.0/Addendum.md#operation-resource-format
    +        # "properties": {
    +        # /\* The resource provider can choose the values here, but it should only be
    +        #   returned on a successful operation (status being "Succeeded"). \*/
    +        # },
    +        # So try to parse it
    +        try:
    +            self.resource = self._deserialize(pipeline_response)
    +        except Exception:  # pylint: disable=broad-except
    +            self.resource = None
    +
    +    def set_async_url_if_present(self, response):
    +        # type: (azure.core.pipeline.transport.HttpResponse) -> None
    +        async_url = get_header_url(response, "azure-asyncoperation")
    +        if async_url:
    +            self.async_url = async_url
    +        location_url = get_header_url(response, "location")
    +        if location_url:
    +            self.location_url = location_url
    +
    +    def get_status_link(self):
    +        if self.async_url:
    +            return self.async_url
    +        if self.location_url:
    +            return self.location_url
    +        if self.method == "PUT":
    +            return self.initial_response.request.url
    +        raise BadResponse("Unable to find a valid status link for polling")
    +
    +
    +class ARMPolling(PollingMethod):
    +    def __init__(self, timeout=30, lro_options=None, **operation_config):
    +        self._client = None
    +        self._transport = None
    +        self._timeout = timeout
    +        self._operation = None  # Will hold an instance of LongRunningOperation
    +        self._pipeline_response = None  # Will hold latest received response
    +        self._operation_config = operation_config
    +        self._lro_options = lro_options
    +
    +    def status(self):
    +        """Return the current status as a string.
    +        :rtype: str
    +        """
    +        if not self._operation:
    +            raise ValueError(
    +                "set_initial_status was never called. Did you give this instance to a poller?"
    +            )
    +        return self._operation.status
    +
    +    def finished(self):
    +        """Is this polling finished?
    +        :rtype: bool
    +        """
    +        return finished(self.status())
    +
    +    def resource(self):
    +        """Return the built resource.
    +        """
    +        return self._operation.resource
    +
    +    def initialize(self, client, initial_response, deserialization_callback):
    +        """Set the initial status of this LRO.
    +
    +        :param initial_response: The initial response of the poller
    +        :raises: HttpResponseError if initial status is incorrect LRO state
    +        """
    +        self._client = client
    +        self._transport = self._client._pipeline._transport  # pylint: disable=protected-access
    +        self._pipeline_response = initial_response
    +        self._operation = LongRunningOperation(
    +            initial_response, deserialization_callback, self._lro_options
    +        )
    +        try:
    +            self._operation.set_initial_status(initial_response)
    +        except BadStatus as err:
    +            self._operation.status = "Failed"
    +            raise HttpResponseError(response=initial_response.http_response, error=err)
    +        except BadResponse as err:
    +            self._operation.status = "Failed"
    +            raise HttpResponseError(
    +                response=initial_response.http_response, message=str(err), error=err
    +            )
    +        except OperationFailed as err:
    +            raise HttpResponseError(response=initial_response.http_response, error=err)
    +
    +    def run(self):
    +        try:
    +            self._poll()
    +        except BadStatus as err:
    +            self._operation.status = "Failed"
    +            raise HttpResponseError(
    +                response=self._pipeline_response.http_response, error=err
    +            )
    +
    +        except BadResponse as err:
    +            self._operation.status = "Failed"
    +            raise HttpResponseError(
    +                response=self._pipeline_response.http_response,
    +                message=str(err),
    +                error=err,
    +            )
    +
    +        except OperationFailed as err:
    +            raise HttpResponseError(
    +                response=self._pipeline_response.http_response, error=err
    +            )
    +
    +    def _poll(self):
    +        """Poll status of operation so long as operation is incomplete and
    +        we have an endpoint to query.
    +
    +        :param callable update_cmd: The function to call to retrieve the
    +         latest status of the long running operation.
    +        :raises: OperationFailed if operation status 'Failed' or 'Canceled'.
    +        :raises: BadStatus if response status invalid.
    +        :raises: BadResponse if response invalid.
    +        """
    +
    +        while not self.finished():
    +            self._delay()
    +            self.update_status()
    +
    +        if failed(self._operation.status):
    +            raise OperationFailed("Operation failed or canceled")
    +
    +        if self._operation.should_do_final_get():
    +            if self._operation.method == "POST" and self._operation.location_url:
    +                final_get_url = self._operation.location_url
    +            else:
    +                final_get_url = (
    +                    self._operation.initial_response.http_response.request.url
    +                )
    +            self._pipeline_response = self.request_status(final_get_url)
    +            self._operation.parse_resource(self._pipeline_response)
    +
    +    def _sleep(self, delay):
    +        self._transport.sleep(delay)
    +
    +    def _delay(self):
    +        """Check for a 'retry-after' header to set timeout,
    +        otherwise use configured timeout.
    +        """
    +        if self._pipeline_response is None:
    +            return
    +        response = self._pipeline_response.http_response
    +        if response.headers.get("retry-after"):
    +            self._sleep(int(response.headers["retry-after"]))
    +        else:
    +            self._sleep(self._timeout)
    +
    +    def update_status(self):
    +        """Update the current status of the LRO.
    +        """
    +        if self._operation.async_url:
    +            self._pipeline_response = self.request_status(self._operation.async_url)
    +            self._operation.set_async_url_if_present(
    +                self._pipeline_response.http_response
    +            )
    +            self._operation.get_status_from_async(self._pipeline_response)
    +        elif self._operation.location_url:
    +            self._pipeline_response = self.request_status(self._operation.location_url)
    +            self._operation.set_async_url_if_present(
    +                self._pipeline_response.http_response
    +            )
    +            self._operation.get_status_from_location(self._pipeline_response)
    +        elif self._operation.method == "PUT":
    +            initial_url = self._operation.initial_response.http_response.request.url
    +            self._pipeline_response = self.request_status(initial_url)
    +            self._operation.set_async_url_if_present(
    +                self._pipeline_response.http_response
    +            )
    +            self._operation.get_status_from_resource(self._pipeline_response)
    +        else:
    +            raise BadResponse("Unable to find status link for polling.")
    +
    +    def request_status(self, status_link):
    +        """Do a simple GET to this status link.
    +
    +        This method re-inject 'x-ms-client-request-id'.
    +
    +        :rtype: azure.core.pipeline.PipelineResponse
    +        """
    +        request = self._client.get(status_link)
    +        # ARM requires to re-inject 'x-ms-client-request-id' while polling
    +        if "request_id" not in self._operation_config:
    +            self._operation_config[
    +                "request_id"
    +            ] = self._operation.initial_response.http_response.request.headers[
    +                "x-ms-client-request-id"
    +            ]
    +        return self._client._pipeline.run(  # pylint: disable=protected-access
    +            request, stream=False, **self._operation_config
    +        )
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/core/polling/async_arm_polling.py b/sdk/core/azure-mgmt-core/azure/mgmt/core/polling/async_arm_polling.py
    new file mode 100644
    index 000000000000..d4a99263a5b7
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/core/polling/async_arm_polling.py
    @@ -0,0 +1,147 @@
    +# --------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to
    +# deal in the Software without restriction, including without limitation the
    +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    +# sell copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    +# IN THE SOFTWARE.
    +#
    +# --------------------------------------------------------------------------
    +from azure.core.exceptions import HttpResponseError
    +from .arm_polling import failed, BadStatus, BadResponse, OperationFailed, ARMPolling
    +
    +__all__ = ["AsyncARMPolling"]
    +
    +
    +class AsyncARMPolling(ARMPolling):
    +    """A subclass or ARMPolling that redefine "run" as async.
    +    """
    +
    +    async def run(self):
    +        try:
    +            await self._poll()
    +        except BadStatus as err:
    +            self._operation.status = "Failed"
    +            raise HttpResponseError(
    +                response=self._pipeline_response.http_response, error=err
    +            )
    +
    +        except BadResponse as err:
    +            self._operation.status = "Failed"
    +            raise HttpResponseError(
    +                response=self._pipeline_response.http_response,
    +                message=str(err),
    +                error=err,
    +            )
    +
    +        except OperationFailed as err:
    +            raise HttpResponseError(
    +                response=self._pipeline_response.http_response, error=err
    +            )
    +
    +    async def _poll(self):
    +        """Poll status of operation so long as operation is incomplete and
    +        we have an endpoint to query.
    +
    +        :param callable update_cmd: The function to call to retrieve the
    +         latest status of the long running operation.
    +        :raises: OperationFailed if operation status 'Failed' or 'Canceled'.
    +        :raises: BadStatus if response status invalid.
    +        :raises: BadResponse if response invalid.
    +        """
    +
    +        while not self.finished():
    +            await self._delay()
    +            await self.update_status()
    +
    +        if failed(self._operation.status):
    +            raise OperationFailed("Operation failed or canceled")
    +
    +        if self._operation.should_do_final_get():
    +            if self._operation.method == "POST" and self._operation.location_url:
    +                final_get_url = self._operation.location_url
    +            else:
    +                final_get_url = (
    +                    self._operation.initial_response.http_response.request.url
    +                )
    +            self._pipeline_response = await self.request_status(final_get_url)
    +            self._operation.parse_resource(self._pipeline_response)
    +
    +    async def _sleep(self, delay):
    +        await self._transport.sleep(delay)
    +
    +    async def _delay(self):
    +        """Check for a 'retry-after' header to set timeout,
    +        otherwise use configured timeout.
    +        """
    +        if self._pipeline_response is None:
    +            return
    +        response = self._pipeline_response.http_response
    +        if response.headers.get("retry-after"):
    +            await self._sleep(int(response.headers["retry-after"]))
    +        else:
    +            await self._sleep(self._timeout)
    +
    +    async def update_status(self):
    +        """Update the current status of the LRO.
    +        """
    +        if self._operation.async_url:
    +            self._pipeline_response = await self.request_status(
    +                self._operation.async_url
    +            )
    +            self._operation.set_async_url_if_present(
    +                self._pipeline_response.http_response
    +            )
    +            self._operation.get_status_from_async(self._pipeline_response)
    +        elif self._operation.location_url:
    +            self._pipeline_response = await self.request_status(
    +                self._operation.location_url
    +            )
    +            self._operation.set_async_url_if_present(
    +                self._pipeline_response.http_response
    +            )
    +            self._operation.get_status_from_location(self._pipeline_response)
    +        elif self._operation.method == "PUT":
    +            initial_url = self._operation.initial_response.http_response.request.url
    +            self._pipeline_response = await self.request_status(initial_url)
    +            self._operation.set_async_url_if_present(
    +                self._pipeline_response.http_response
    +            )
    +            self._operation.get_status_from_resource(self._pipeline_response)
    +        else:
    +            raise BadResponse("Unable to find status link for polling.")
    +
    +    async def request_status(self, status_link):
    +        """Do a simple GET to this status link.
    +
    +        This method re-inject 'x-ms-client-request-id'.
    +
    +        :rtype: azure.core.pipeline.PipelineResponse
    +        """
    +        request = self._client.get(status_link)
    +        # ARM requires to re-inject 'x-ms-client-request-id' while polling
    +        if "request_id" not in self._operation_config:
    +            self._operation_config[
    +                "request_id"
    +            ] = self._operation.initial_response.http_response.request.headers[
    +                "x-ms-client-request-id"
    +            ]
    +        return await self._client._pipeline.run(  # pylint: disable=protected-access
    +            request, stream=False, **self._operation_config
    +        )
    diff --git a/sdk/cosmos/azure-cosmos/requirements.txt b/sdk/core/azure-mgmt-core/azure/mgmt/core/py.typed
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/requirements.txt
    rename to sdk/core/azure-mgmt-core/azure/mgmt/core/py.typed
    diff --git a/sdk/core/azure-mgmt-core/azure/mgmt/core/tools.py b/sdk/core/azure-mgmt-core/azure/mgmt/core/tools.py
    new file mode 100644
    index 000000000000..18502db70977
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/azure/mgmt/core/tools.py
    @@ -0,0 +1,232 @@
    +# --------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to
    +# deal in the Software without restriction, including without limitation the
    +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    +# sell copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    +# IN THE SOFTWARE.
    +#
    +# --------------------------------------------------------------------------
    +
    +import re
    +import logging
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +_ARMID_RE = re.compile(
    +    "(?i)/subscriptions/(?P[^/]*)(/resourceGroups/(?P[^/]*))?"
    +    "(/providers/(?P[^/]*)/(?P[^/]*)/(?P[^/]*)(?P.*))?"
    +)
    +
    +_CHILDREN_RE = re.compile(
    +    "(?i)(/providers/(?P[^/]*))?/"
    +    "(?P[^/]*)/(?P[^/]*)"
    +)
    +
    +_ARMNAME_RE = re.compile("^[^<>%&:\\?/]{1,260}$")
    +
    +
    +__all__ = [
    +    "parse_resource_id",
    +    "resource_id",
    +    "is_valid_resource_id",
    +    "is_valid_resource_name",
    +]
    +
    +
    +def parse_resource_id(rid):
    +    """Parses a resource_id into its various parts.
    +
    +    Returns a dictionary with a single key-value pair, 'name': rid, if invalid resource id.
    +
    +    :param rid: The resource id being parsed
    +    :type rid: str
    +    :returns: A dictionary with with following key/value pairs (if found):
    +
    +        - subscription:            Subscription id
    +        - resource_group:          Name of resource group
    +        - namespace:               Namespace for the resource provider (i.e. Microsoft.Compute)
    +        - type:                    Type of the root resource (i.e. virtualMachines)
    +        - name:                    Name of the root resource
    +        - child_namespace_{level}: Namespace for the child resoure of that level
    +        - child_type_{level}:      Type of the child resource of that level
    +        - child_name_{level}:      Name of the child resource of that level
    +        - last_child_num:          Level of the last child
    +        - resource_parent:         Computed parent in the following pattern: providers/{namespace}\
    +        /{parent}/{type}/{name}
    +        - resource_namespace:      Same as namespace. Note that this may be different than the \
    +        target resource's namespace.
    +        - resource_type:           Type of the target resource (not the parent)
    +        - resource_name:           Name of the target resource (not the parent)
    +
    +    :rtype: dict[str,str]
    +    """
    +    if not rid:
    +        return {}
    +    match = _ARMID_RE.match(rid)
    +    if match:
    +        result = match.groupdict()
    +        children = _CHILDREN_RE.finditer(result["children"] or "")
    +        count = None
    +        for count, child in enumerate(children):
    +            result.update(
    +                {
    +                    key + "_%d" % (count + 1): group
    +                    for key, group in child.groupdict().items()
    +                }
    +            )
    +        result["last_child_num"] = count + 1 if isinstance(count, int) else None
    +        result = _populate_alternate_kwargs(result)
    +    else:
    +        result = dict(name=rid)
    +    return {key: value for key, value in result.items() if value is not None}
    +
    +
    +def _populate_alternate_kwargs(kwargs):
    +    """ Translates the parsed arguments into a format used by generic ARM commands
    +    such as the resource and lock commands.
    +    """
    +
    +    resource_namespace = kwargs["namespace"]
    +    resource_type = (
    +        kwargs.get("child_type_{}".format(kwargs["last_child_num"])) or kwargs["type"]
    +    )
    +    resource_name = (
    +        kwargs.get("child_name_{}".format(kwargs["last_child_num"])) or kwargs["name"]
    +    )
    +
    +    _get_parents_from_parts(kwargs)
    +    kwargs["resource_namespace"] = resource_namespace
    +    kwargs["resource_type"] = resource_type
    +    kwargs["resource_name"] = resource_name
    +    return kwargs
    +
    +
    +def _get_parents_from_parts(kwargs):
    +    """ Get the parents given all the children parameters.
    +    """
    +    parent_builder = []
    +    if kwargs["last_child_num"] is not None:
    +        parent_builder.append("{type}/{name}/".format(**kwargs))
    +        for index in range(1, kwargs["last_child_num"]):
    +            child_namespace = kwargs.get("child_namespace_{}".format(index))
    +            if child_namespace is not None:
    +                parent_builder.append("providers/{}/".format(child_namespace))
    +            kwargs["child_parent_{}".format(index)] = "".join(parent_builder)
    +            parent_builder.append(
    +                "{{child_type_{0}}}/{{child_name_{0}}}/".format(index).format(**kwargs)
    +            )
    +        child_namespace = kwargs.get(
    +            "child_namespace_{}".format(kwargs["last_child_num"])
    +        )
    +        if child_namespace is not None:
    +            parent_builder.append("providers/{}/".format(child_namespace))
    +        kwargs["child_parent_{}".format(kwargs["last_child_num"])] = "".join(
    +            parent_builder
    +        )
    +    kwargs["resource_parent"] = "".join(parent_builder) if kwargs["name"] else None
    +    return kwargs
    +
    +
    +def resource_id(**kwargs):
    +    """Create a valid resource id string from the given parts.
    +
    +    This method builds the resource id from the left until the next required id parameter
    +    to be appended is not found. It then returns the built up id.
    +
    +    :param dict kwargs: The keyword arguments that will make up the id.
    +
    +        The method accepts the following keyword arguments:
    +            - subscription (required): Subscription id
    +            - resource_group:          Name of resource group
    +            - namespace:               Namespace for the resource provider (i.e. Microsoft.Compute)
    +            - type:                    Type of the resource (i.e. virtualMachines)
    +            - name:                    Name of the resource (or parent if child_name is also \
    +            specified)
    +            - child_namespace_{level}: Namespace for the child resoure of that level (optional)
    +            - child_type_{level}:      Type of the child resource of that level
    +            - child_name_{level}:      Name of the child resource of that level
    +
    +    :returns: A resource id built from the given arguments.
    +    :rtype: str
    +    """
    +    kwargs = {k: v for k, v in kwargs.items() if v is not None}
    +    rid_builder = ["/subscriptions/{subscription}".format(**kwargs)]
    +    try:
    +        try:
    +            rid_builder.append("resourceGroups/{resource_group}".format(**kwargs))
    +        except KeyError:
    +            pass
    +        rid_builder.append("providers/{namespace}".format(**kwargs))
    +        rid_builder.append("{type}/{name}".format(**kwargs))
    +        count = 1
    +        while True:
    +            try:
    +                rid_builder.append(
    +                    "providers/{{child_namespace_{}}}".format(count).format(**kwargs)
    +                )
    +            except KeyError:
    +                pass
    +            rid_builder.append(
    +                "{{child_type_{0}}}/{{child_name_{0}}}".format(count).format(**kwargs)
    +            )
    +            count += 1
    +    except KeyError:
    +        pass
    +    return "/".join(rid_builder)
    +
    +
    +def is_valid_resource_id(rid, exception_type=None):
    +    """Validates the given resource id.
    +
    +    :param rid: The resource id being validated.
    +    :type rid: str
    +    :param exception_type: Raises this Exception if invalid.
    +    :type exception_type: :class:`Exception`
    +    :returns: A boolean describing whether the id is valid.
    +    :rtype: bool
    +    """
    +    is_valid = False
    +    try:
    +        is_valid = rid and resource_id(**parse_resource_id(rid)).lower() == rid.lower()
    +    except KeyError:
    +        pass
    +    if not is_valid and exception_type:
    +        raise exception_type()
    +    return is_valid
    +
    +
    +def is_valid_resource_name(rname, exception_type=None):
    +    """Validates the given resource name to ARM guidelines, individual services may be more restrictive.
    +
    +    :param rname: The resource name being validated.
    +    :type rname: str
    +    :param exception_type: Raises this Exception if invalid.
    +    :type exception_type: :class:`Exception`
    +    :returns: A boolean describing whether the name is valid.
    +    :rtype: bool
    +    """
    +
    +    match = _ARMNAME_RE.match(rname)
    +
    +    if match:
    +        return True
    +    if exception_type:
    +        raise exception_type()
    +    return False
    diff --git a/sdk/core/azure-mgmt-core/dev_requirements.txt b/sdk/core/azure-mgmt-core/dev_requirements.txt
    new file mode 100644
    index 000000000000..95f45c5f68c1
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/dev_requirements.txt
    @@ -0,0 +1,11 @@
    +msrest
    +trio; python_version >= '3.5'
    +aiohttp>=3.0; python_version >= '3.5'
    +aiodns>=2.0; python_version >= '3.5'
    +typing_extensions>=3.7.2
    +-e ../azure-core
    +mock;python_version<="2.7"
    +httpretty
    +pytest
    +pytest-cov
    +pytest-asyncio;python_full_version>="3.5.2"
    diff --git a/sdk/core/azure-mgmt-core/sdk_packaging.toml b/sdk/core/azure-mgmt-core/sdk_packaging.toml
    new file mode 100644
    index 000000000000..e7687fdae93b
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/sdk_packaging.toml
    @@ -0,0 +1,2 @@
    +[packaging]
    +auto_update = false
    \ No newline at end of file
    diff --git a/sdk/core/azure-mgmt-core/setup.cfg b/sdk/core/azure-mgmt-core/setup.cfg
    new file mode 100644
    index 000000000000..3480374bc2f2
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/setup.cfg
    @@ -0,0 +1,2 @@
    +[bdist_wheel]
    +universal=1
    \ No newline at end of file
    diff --git a/sdk/core/azure-mgmt-core/setup.py b/sdk/core/azure-mgmt-core/setup.py
    new file mode 100644
    index 000000000000..edd16b4610c1
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/setup.py
    @@ -0,0 +1,76 @@
    +#!/usr/bin/env python
    +
    +#-------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#--------------------------------------------------------------------------
    +
    +import re
    +import os.path
    +from io import open
    +from setuptools import find_packages, setup  # type: ignore
    +
    +# Change the PACKAGE_NAME only to change folder and different name
    +PACKAGE_NAME = "azure-mgmt-core"
    +PACKAGE_PPRINT_NAME = "Management Core"
    +
    +# a-b-c => a/b/c
    +package_folder_path = PACKAGE_NAME.replace('-', '/')
    +# a-b-c => a.b.c
    +namespace_name = PACKAGE_NAME.replace('-', '.')
    +
    +# Version extraction inspired from 'requests'
    +with open(os.path.join(package_folder_path, '_version.py'), 'r') as fd:
    +    version = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]',  # type: ignore
    +                        fd.read(), re.MULTILINE).group(1)
    +
    +if not version:
    +    raise RuntimeError('Cannot find version information')
    +
    +with open('README.md', encoding='utf-8') as f:
    +    readme = f.read()
    +with open('CHANGELOG.md', encoding='utf-8') as f:
    +    changelog = f.read()
    +
    +setup(
    +    name=PACKAGE_NAME,
    +    version=version,
    +    include_package_data=True,
    +    description='Microsoft Azure {} Library for Python'.format(PACKAGE_PPRINT_NAME),
    +    long_description=readme + '\n\n' + changelog,
    +    long_description_content_type='text/markdown',
    +    license='MIT License',
    +    author='Microsoft Corporation',
    +    author_email='azpysdkhelp@microsoft.com',
    +    url='https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/core/azure-mgmt-core',
    +    classifiers=[
    +        'Development Status :: 4 - Beta',
    +        'Programming Language :: Python',
    +        'Programming Language :: Python :: 2',
    +        'Programming Language :: Python :: 2.7',
    +        'Programming Language :: Python :: 3',
    +        'Programming Language :: Python :: 3.5',
    +        'Programming Language :: Python :: 3.6',
    +        'Programming Language :: Python :: 3.7',
    +        'Programming Language :: Python :: 3.8',
    +        'License :: OSI Approved :: MIT License',
    +    ],
    +    zip_safe=False,
    +    packages=find_packages(exclude=[
    +        'tests',
    +        # Exclude packages that will be covered by PEP420 or nspkg
    +        'azure',
    +        'azure.mgmt',
    +    ]),
    +    package_data={
    +        'pytyped': ['py.typed'],
    +    },
    +    install_requires=[
    +        "azure-core<2.0.0,>=1.3.0",
    +    ],
    +    extras_require={
    +        ":python_version<'3.0'": ['azure-mgmt-nspkg'],
    +        ":python_version<'3.5'": ['typing'],
    +    }
    +)
    diff --git a/sdk/core/azure-mgmt-core/tests/.gitignore b/sdk/core/azure-mgmt-core/tests/.gitignore
    new file mode 100644
    index 000000000000..c7c52a9d66bd
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/tests/.gitignore
    @@ -0,0 +1 @@
    +credentials.json
    \ No newline at end of file
    diff --git a/sdk/core/azure-mgmt-core/tests/asynctests/test_async_arm_polling.py b/sdk/core/azure-mgmt-core/tests/asynctests/test_async_arm_polling.py
    new file mode 100644
    index 000000000000..b4d377d65820
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/tests/asynctests/test_async_arm_polling.py
    @@ -0,0 +1,596 @@
    +#--------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to deal
    +# in the Software without restriction, including without limitation the rights
    +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +# copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +# THE SOFTWARE.
    +#
    +#--------------------------------------------------------------------------
    +
    +import json
    +import re
    +import types
    +import unittest
    +try:
    +    from unittest import mock
    +except ImportError:
    +    import mock
    +
    +import pytest
    +
    +from requests import Request, Response
    +
    +from msrest import Deserializer
    +
    +from azure.core.polling import async_poller
    +from azure.core.exceptions import DecodeError, HttpResponseError
    +from azure.core import AsyncPipelineClient
    +from azure.core.pipeline import PipelineResponse, AsyncPipeline
    +from azure.core.pipeline.transport import AsyncioRequestsTransportResponse, AsyncHttpTransport
    +
    +from azure.mgmt.core.polling.async_arm_polling import (
    +    AsyncARMPolling,
    +)
    +from azure.mgmt.core.polling.arm_polling import (
    +    LongRunningOperation,
    +    BadStatus
    +)
    +
    +class SimpleResource:
    +    """An implementation of Python 3 SimpleNamespace.
    +    Used to deserialize resource objects from response bodies where
    +    no particular object type has been specified.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.__dict__.update(kwargs)
    +
    +    def __repr__(self):
    +        keys = sorted(self.__dict__)
    +        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
    +        return "{}({})".format(type(self).__name__, ", ".join(items))
    +
    +    def __eq__(self, other):
    +        return self.__dict__ == other.__dict__
    +
    +class BadEndpointError(Exception):
    +    pass
    +
    +TEST_NAME = 'foo'
    +RESPONSE_BODY = {'properties':{'provisioningState': 'InProgress'}}
    +ASYNC_BODY = json.dumps({ 'status': 'Succeeded' })
    +ASYNC_URL = 'http://dummyurlFromAzureAsyncOPHeader_Return200'
    +LOCATION_BODY = json.dumps({ 'name': TEST_NAME })
    +LOCATION_URL = 'http://dummyurlurlFromLocationHeader_Return200'
    +RESOURCE_BODY = json.dumps({ 'name': TEST_NAME })
    +RESOURCE_URL = 'http://subscriptions/sub1/resourcegroups/g1/resourcetype1/resource1'
    +ERROR = 'http://dummyurl_ReturnError'
    +POLLING_STATUS = 200
    +
    +CLIENT = AsyncPipelineClient("http://example.org")
    +async def mock_run(client_self, request, **kwargs):
    +    return TestArmPolling.mock_update(request.url)
    +CLIENT._pipeline.run = types.MethodType(mock_run, CLIENT)
    +
    +
    +@pytest.fixture
    +def async_pipeline_client_builder():
    +    """Build a client that use the "send" callback as final transport layer
    +
    +    send will receive "request" and kwargs as any transport layer
    +    """
    +    def create_client(send_cb):
    +        class TestHttpTransport(AsyncHttpTransport):
    +            async def open(self): pass
    +            async def close(self): pass
    +            async def __aexit__(self, *args, **kwargs): pass
    +
    +            async def send(self, request, **kwargs):
    +                return await send_cb(request, **kwargs)
    +
    +        return AsyncPipelineClient(
    +            'http://example.org/',
    +            pipeline=AsyncPipeline(
    +                transport=TestHttpTransport()
    +            )
    +        )
    +    return create_client
    +
    +
    +@pytest.mark.asyncio
    +async def test_post(async_pipeline_client_builder):
    +
    +        # Test POST LRO with both Location and Azure-AsyncOperation
    +
    +        # The initial response contains both Location and Azure-AsyncOperation, a 202 and no Body
    +        initial_response = TestArmPolling.mock_send(
    +            'POST',
    +            202,
    +            {
    +                'location': 'http://example.org/location',
    +                'azure-asyncoperation': 'http://example.org/async_monitor',
    +            },
    +            ''
    +        )
    +
    +        async def send(request, **kwargs):
    +            assert request.method == 'GET'
    +
    +            if request.url == 'http://example.org/location':
    +                return TestArmPolling.mock_send(
    +                    'GET',
    +                    200,
    +                    body={'location_result': True}
    +                ).http_response
    +            elif request.url == 'http://example.org/async_monitor':
    +                return TestArmPolling.mock_send(
    +                    'GET',
    +                    200,
    +                    body={'status': 'Succeeded'}
    +                ).http_response
    +            else:
    +                pytest.fail("No other query allowed")
    +
    +        client = async_pipeline_client_builder(send)
    +
    +        def deserialization_cb(pipeline_response):
    +            return json.loads(pipeline_response.http_response.text())
    +
    +        # Test 1, LRO options with Location final state
    +        poll = async_poller(
    +            client,
    +            initial_response,
    +            deserialization_cb,
    +            AsyncARMPolling(0, lro_options={"final-state-via": "location"}))
    +        result = await poll
    +        assert result['location_result'] == True
    +
    +        # Test 2, LRO options with Azure-AsyncOperation final state
    +        poll = async_poller(
    +            client,
    +            initial_response,
    +            deserialization_cb,
    +            AsyncARMPolling(0, lro_options={"final-state-via": "azure-async-operation"}))
    +        result = await poll
    +        assert result['status'] == 'Succeeded'
    +
    +        # Test 3, backward compat (no options, means "azure-async-operation")
    +        poll = async_poller(
    +            client,
    +            initial_response,
    +            deserialization_cb,
    +            AsyncARMPolling(0))
    +        result = await poll
    +        assert result['status'] == 'Succeeded'
    +
    +        # Test 4, location has no body
    +
    +        async def send(request, **kwargs):
    +            assert request.method == 'GET'
    +
    +            if request.url == 'http://example.org/location':
    +                return TestArmPolling.mock_send(
    +                    'GET',
    +                    200,
    +                    body=""
    +                ).http_response
    +            elif request.url == 'http://example.org/async_monitor':
    +                return TestArmPolling.mock_send(
    +                    'GET',
    +                    200,
    +                    body={'status': 'Succeeded'}
    +                ).http_response
    +            else:
    +                pytest.fail("No other query allowed")
    +
    +        client = async_pipeline_client_builder(send)
    +
    +        poll = async_poller(
    +            client,
    +            initial_response,
    +            deserialization_cb,
    +            AsyncARMPolling(0, lro_options={"final-state-via": "location"}))
    +        result = await poll
    +        assert result is None
    +
    +
    +class TestArmPolling(object):
    +
    +    convert = re.compile('([a-z0-9])([A-Z])')
    +
    +    @staticmethod
    +    def mock_send(method, status, headers=None, body=None):
    +        if headers is None:
    +            headers = {}
    +        response = mock.create_autospec(Response)
    +        response.request = mock.create_autospec(Request)
    +        response.request.method = method
    +        response.request.url = RESOURCE_URL
    +        response.request.headers = {
    +            'x-ms-client-request-id': '67f4dd4e-6262-45e1-8bed-5c45cf23b6d9'
    +        }
    +        response.status_code = status
    +        response.headers = headers
    +        response.headers.update({"content-type": "application/json; charset=utf8"})
    +        response.reason = "OK"
    +        content = body if body is not None else RESPONSE_BODY
    +        response.text = json.dumps(content)
    +        response.json = lambda: json.loads(response.text)
    +
    +        request = CLIENT._request(
    +            response.request.method,
    +            response.request.url,
    +            None,  # params
    +            response.request.headers,
    +            content,
    +            None,  # form_content
    +            None  # stream_content
    +        )
    +
    +        return PipelineResponse(
    +            request,
    +            AsyncioRequestsTransportResponse(
    +                request,
    +                response,
    +            ),
    +            None  # context
    +        )
    +
    +    @staticmethod
    +    def mock_update(url, headers=None):
    +        response = mock.create_autospec(Response)
    +        response.request = mock.create_autospec(Request)
    +        response.request.method = 'GET'
    +        response.headers = headers or {}
    +        response.headers.update({"content-type": "application/json; charset=utf8"})
    +        response.reason = "OK"
    +
    +        if url == ASYNC_URL:
    +            response.request.url = url
    +            response.status_code = POLLING_STATUS
    +            response.text = ASYNC_BODY
    +            response.randomFieldFromPollAsyncOpHeader = None
    +
    +        elif url == LOCATION_URL:
    +            response.request.url = url
    +            response.status_code = POLLING_STATUS
    +            response.text = LOCATION_BODY
    +            response.randomFieldFromPollLocationHeader = None
    +
    +        elif url == ERROR:
    +            raise BadEndpointError("boom")
    +
    +        elif url == RESOURCE_URL:
    +            response.request.url = url
    +            response.status_code = POLLING_STATUS
    +            response.text = RESOURCE_BODY
    +
    +        else:
    +            raise Exception('URL does not match')
    +        response.json = lambda: json.loads(response.text)
    +
    +        request = CLIENT._request(
    +            response.request.method,
    +            response.request.url,
    +            None,  # params
    +            {}, # request has no headers
    +            None, # Request has no body
    +            None,  # form_content
    +            None  # stream_content
    +        )
    +
    +        return PipelineResponse(
    +            request,
    +            AsyncioRequestsTransportResponse(
    +                request,
    +                response,
    +            ),
    +            None  # context
    +        )
    +
    +    @staticmethod
    +    def mock_outputs(pipeline_response):
    +        response = pipeline_response.http_response
    +        body = json.loads(response.text())
    +        body = {TestArmPolling.convert.sub(r'\1_\2', k).lower(): v
    +                for k, v in body.items()}
    +        properties = body.setdefault('properties', {})
    +        if 'name' in body:
    +            properties['name'] = body['name']
    +        if properties:
    +            properties = {TestArmPolling.convert.sub(r'\1_\2', k).lower(): v
    +                          for k, v in properties.items()}
    +            del body['properties']
    +            body.update(properties)
    +            resource = SimpleResource(**body)
    +        else:
    +            raise DecodeError("Impossible to deserialize")
    +            resource = SimpleResource(**body)
    +        return resource
    +
    +@pytest.mark.asyncio
    +async def test_long_running_put():
    +    #TODO: Test custom header field
    +
    +    # Test throw on non LRO related status code
    +    response = TestArmPolling.mock_send('PUT', 1000, {})
    +    op = LongRunningOperation(response, lambda x:None)
    +    with pytest.raises(BadStatus):
    +        op.set_initial_status(response)
    +    with pytest.raises(HttpResponseError):
    +        await async_poller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            AsyncARMPolling(0))
    +
    +    # Test with no polling necessary
    +    response_body = {
    +        'properties':{'provisioningState': 'Succeeded'},
    +        'name': TEST_NAME
    +    }
    +    response = TestArmPolling.mock_send(
    +        'PUT', 201,
    +        {}, response_body
    +    )
    +    def no_update_allowed(url, headers=None):
    +        raise ValueError("Should not try to update")
    +    polling_method = AsyncARMPolling(0)
    +    poll = await async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        polling_method
    +    )
    +    assert poll.name == TEST_NAME
    +    assert not hasattr(polling_method._pipeline_response, 'randomFieldFromPollAsyncOpHeader')
    +
    +    # Test polling from azure-asyncoperation header
    +    response = TestArmPolling.mock_send(
    +        'PUT', 201,
    +        {'azure-asyncoperation': ASYNC_URL})
    +    polling_method = AsyncARMPolling(0)
    +    poll = await async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        polling_method)
    +    assert poll.name == TEST_NAME
    +    assert not hasattr(polling_method._pipeline_response, 'randomFieldFromPollAsyncOpHeader')
    +
    +    # Test polling location header
    +    response = TestArmPolling.mock_send(
    +        'PUT', 201,
    +        {'location': LOCATION_URL})
    +    polling_method = AsyncARMPolling(0)
    +    poll = await async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        polling_method)
    +    assert poll.name == TEST_NAME
    +    assert polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollLocationHeader is None
    +
    +    # Test polling initial payload invalid (SQLDb)
    +    response_body = {}  # Empty will raise
    +    response = TestArmPolling.mock_send(
    +        'PUT', 201,
    +        {'location': LOCATION_URL}, response_body)
    +    polling_method = AsyncARMPolling(0)
    +    poll = await async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        polling_method)
    +    assert poll.name == TEST_NAME
    +    assert polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollLocationHeader is None
    +
    +    # Test fail to poll from azure-asyncoperation header
    +    response = TestArmPolling.mock_send(
    +        'PUT', 201,
    +        {'azure-asyncoperation': ERROR})
    +    with pytest.raises(BadEndpointError):
    +        poll = await async_poller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            AsyncARMPolling(0))
    +
    +    # Test fail to poll from location header
    +    response = TestArmPolling.mock_send(
    +        'PUT', 201,
    +        {'location': ERROR})
    +    with pytest.raises(BadEndpointError):
    +        poll = await async_poller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            AsyncARMPolling(0))
    +
    +@pytest.mark.asyncio
    +async def test_long_running_patch():
    +
    +    # Test polling from location header
    +    response = TestArmPolling.mock_send(
    +        'PATCH', 202,
    +        {'location': LOCATION_URL},
    +        body={'properties':{'provisioningState': 'Succeeded'}})
    +    polling_method = AsyncARMPolling(0)
    +    poll = await async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        polling_method)
    +    assert poll.name == TEST_NAME
    +    assert polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollLocationHeader is None
    +
    +    # Test polling from azure-asyncoperation header
    +    response = TestArmPolling.mock_send(
    +        'PATCH', 202,
    +        {'azure-asyncoperation': ASYNC_URL},
    +        body={'properties':{'provisioningState': 'Succeeded'}})
    +    polling_method = AsyncARMPolling(0)
    +    poll = await async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        polling_method)
    +    assert poll.name == TEST_NAME
    +    assert not hasattr(polling_method._pipeline_response, 'randomFieldFromPollAsyncOpHeader')
    +
    +    # Test polling from location header
    +    response = TestArmPolling.mock_send(
    +        'PATCH', 200,
    +        {'location': LOCATION_URL},
    +        body={'properties':{'provisioningState': 'Succeeded'}})
    +    polling_method = AsyncARMPolling(0)
    +    poll = await async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        polling_method)
    +    assert poll.name == TEST_NAME
    +    assert polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollLocationHeader is None
    +
    +    # Test polling from azure-asyncoperation header
    +    response = TestArmPolling.mock_send(
    +        'PATCH', 200,
    +        {'azure-asyncoperation': ASYNC_URL},
    +        body={'properties':{'provisioningState': 'Succeeded'}})
    +    polling_method = AsyncARMPolling(0)
    +    poll = await async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        polling_method)
    +    assert poll.name == TEST_NAME
    +    assert not hasattr(polling_method._pipeline_response, 'randomFieldFromPollAsyncOpHeader')
    +
    +    # Test fail to poll from azure-asyncoperation header
    +    response = TestArmPolling.mock_send(
    +        'PATCH', 202,
    +        {'azure-asyncoperation': ERROR})
    +    with pytest.raises(BadEndpointError):
    +        poll = await async_poller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            AsyncARMPolling(0))
    +
    +    # Test fail to poll from location header
    +    response = TestArmPolling.mock_send(
    +        'PATCH', 202,
    +        {'location': ERROR})
    +    with pytest.raises(BadEndpointError):
    +        poll = await async_poller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            AsyncARMPolling(0))
    +
    +@pytest.mark.asyncio
    +async def test_long_running_delete():
    +    # Test polling from azure-asyncoperation header
    +    response = TestArmPolling.mock_send(
    +        'DELETE', 202,
    +        {'azure-asyncoperation': ASYNC_URL},
    +        body=""
    +    )
    +    polling_method = AsyncARMPolling(0)
    +    poll = await async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        polling_method)
    +    assert poll is None
    +    assert polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollAsyncOpHeader is None
    +
    +@pytest.mark.asyncio
    +async def test_long_running_post():
    +
    +    # Test polling from azure-asyncoperation header
    +    response = TestArmPolling.mock_send(
    +        'POST', 201,
    +        {'azure-asyncoperation': ASYNC_URL},
    +        body={'properties':{'provisioningState': 'Succeeded'}})
    +    polling_method = AsyncARMPolling(0)
    +    poll = await async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        polling_method)
    +    #self.assertIsNone(poll)
    +    assert polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollAsyncOpHeader is None
    +
    +    # Test polling from azure-asyncoperation header
    +    response = TestArmPolling.mock_send(
    +        'POST', 202,
    +        {'azure-asyncoperation': ASYNC_URL},
    +        body={'properties':{'provisioningState': 'Succeeded'}})
    +    polling_method = AsyncARMPolling(0)
    +    poll = await async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        polling_method)
    +    #self.assertIsNone(poll)
    +    assert polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollAsyncOpHeader is None
    +
    +    # Test polling from location header
    +    response = TestArmPolling.mock_send(
    +        'POST', 202,
    +        {'location': LOCATION_URL},
    +        body={'properties':{'provisioningState': 'Succeeded'}})
    +    polling_method = AsyncARMPolling(0)
    +    poll = await async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        polling_method)
    +    assert poll.name == TEST_NAME
    +    assert polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollLocationHeader is None
    +
    +    # Test fail to poll from azure-asyncoperation header
    +    response = TestArmPolling.mock_send(
    +        'POST', 202,
    +        {'azure-asyncoperation': ERROR})
    +    with pytest.raises(BadEndpointError):
    +        await async_poller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            AsyncARMPolling(0))
    +
    +    # Test fail to poll from location header
    +    response = TestArmPolling.mock_send(
    +        'POST', 202,
    +        {'location': ERROR})
    +    with pytest.raises(BadEndpointError):
    +        await async_poller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            AsyncARMPolling(0))
    +
    +@pytest.mark.asyncio
    +async def test_long_running_negative():
    +    global LOCATION_BODY
    +    global POLLING_STATUS
    +
    +    # Test LRO PUT throws for invalid json
    +    LOCATION_BODY = '{'
    +    response = TestArmPolling.mock_send(
    +        'POST', 202,
    +        {'location': LOCATION_URL})
    +    poll = async_poller(
    +        CLIENT,
    +        response,
    +        TestArmPolling.mock_outputs,
    +        AsyncARMPolling(0)
    +    )
    +    with pytest.raises(DecodeError):
    +        await poll
    +
    +    LOCATION_BODY = '{\'"}'
    +    response = TestArmPolling.mock_send(
    +        'POST', 202,
    +        {'location': LOCATION_URL})
    +    poll = async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        AsyncARMPolling(0))
    +    with pytest.raises(DecodeError):
    +        await poll
    +
    +    LOCATION_BODY = '{'
    +    POLLING_STATUS = 203
    +    response = TestArmPolling.mock_send(
    +        'POST', 202,
    +        {'location': LOCATION_URL})
    +    poll = async_poller(CLIENT, response,
    +        TestArmPolling.mock_outputs,
    +        AsyncARMPolling(0))
    +    with pytest.raises(HttpResponseError): # TODO: Node.js raises on deserialization
    +        await poll
    +
    +    LOCATION_BODY = json.dumps({ 'name': TEST_NAME })
    +    POLLING_STATUS = 200
    +
    diff --git a/sdk/core/azure-mgmt-core/tests/conftest.py b/sdk/core/azure-mgmt-core/tests/conftest.py
    new file mode 100644
    index 000000000000..ccd24fdae88c
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/tests/conftest.py
    @@ -0,0 +1,63 @@
    +#--------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to deal
    +# in the Software without restriction, including without limitation the rights
    +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +# copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +# THE SOFTWARE.
    +#
    +#--------------------------------------------------------------------------
    +import json
    +import os.path
    +import sys
    +
    +import pytest
    +
    +CWD = os.path.dirname(__file__)
    +
    +# Ignore collection of async tests for Python 2
    +collect_ignore = []
    +if sys.version_info < (3, 5):
    +    collect_ignore.append("asynctests")
    +
    +
    +def pytest_addoption(parser):
    +    parser.addoption("--runslow", action="store_true",
    +                     default=False, help="run slow tests")
    +
    +def pytest_collection_modifyitems(config, items):
    +    if config.getoption("--runslow"):
    +        # --runslow given in cli: do not skip slow tests
    +        return
    +    skip_slow = pytest.mark.skip(reason="need --runslow option to run")
    +    for item in items:
    +        if "slow" in item.keywords:
    +            item.add_marker(skip_slow)
    +
    +
    +@pytest.fixture
    +def user_password():
    +    filepath = os.path.join(CWD, "credentials.json")
    +    if os.path.exists(filepath):
    +        with open(filepath, "r") as fd:
    +            userpass = json.load(fd)["userpass"]
    +            return userpass["user"], userpass["password"]
    +    raise ValueError("Create a {} file with a 'userpass' key and two keys 'user' and 'password'".format(
    +        filepath
    +    ))
    diff --git a/sdk/core/azure-mgmt-core/tests/test_arm_polling.py b/sdk/core/azure-mgmt-core/tests/test_arm_polling.py
    new file mode 100644
    index 000000000000..13738a54e0d0
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/tests/test_arm_polling.py
    @@ -0,0 +1,582 @@
    +#--------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to deal
    +# in the Software without restriction, including without limitation the rights
    +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +# copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +# THE SOFTWARE.
    +#
    +#--------------------------------------------------------------------------
    +
    +import json
    +import re
    +import types
    +import unittest
    +try:
    +    from unittest import mock
    +except ImportError:
    +    import mock
    +
    +import httpretty
    +import pytest
    +
    +from requests import Request, Response
    +
    +from msrest import Deserializer
    +
    +from azure.core.polling import LROPoller
    +from azure.core.exceptions import DecodeError, HttpResponseError
    +from azure.core import PipelineClient
    +from azure.core.pipeline import PipelineResponse, Pipeline
    +from azure.core.pipeline.transport import RequestsTransportResponse, HttpTransport
    +
    +from azure.mgmt.core.polling.arm_polling import (
    +    LongRunningOperation,
    +    ARMPolling,
    +    BadStatus
    +)
    +
    +class SimpleResource:
    +    """An implementation of Python 3 SimpleNamespace.
    +    Used to deserialize resource objects from response bodies where
    +    no particular object type has been specified.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.__dict__.update(kwargs)
    +
    +    def __repr__(self):
    +        keys = sorted(self.__dict__)
    +        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
    +        return "{}({})".format(type(self).__name__, ", ".join(items))
    +
    +    def __eq__(self, other):
    +        return self.__dict__ == other.__dict__
    +
    +class BadEndpointError(Exception):
    +    pass
    +
    +TEST_NAME = 'foo'
    +RESPONSE_BODY = {'properties':{'provisioningState': 'InProgress'}}
    +ASYNC_BODY = json.dumps({ 'status': 'Succeeded' })
    +ASYNC_URL = 'http://dummyurlFromAzureAsyncOPHeader_Return200'
    +LOCATION_BODY = json.dumps({ 'name': TEST_NAME })
    +LOCATION_URL = 'http://dummyurlurlFromLocationHeader_Return200'
    +RESOURCE_BODY = json.dumps({ 'name': TEST_NAME })
    +RESOURCE_URL = 'http://subscriptions/sub1/resourcegroups/g1/resourcetype1/resource1'
    +ERROR = 'http://dummyurl_ReturnError'
    +POLLING_STATUS = 200
    +
    +CLIENT = PipelineClient("http://example.org")
    +def mock_run(client_self, request, **kwargs):
    +    return TestArmPolling.mock_update(request.url, request.headers)
    +CLIENT._pipeline.run = types.MethodType(mock_run, CLIENT)
    +
    +
    +@pytest.fixture
    +def pipeline_client_builder():
    +    """Build a client that use the "send" callback as final transport layer
    +
    +    send will receive "request" and kwargs as any transport layer
    +    """
    +    def create_client(send_cb):
    +        class TestHttpTransport(HttpTransport):
    +            def open(self): pass
    +            def close(self): pass
    +            def __exit__(self, *args, **kwargs): pass
    +
    +            def send(self, request, **kwargs):
    +                return send_cb(request, **kwargs)
    +
    +        return PipelineClient(
    +            'http://example.org/',
    +            pipeline=Pipeline(
    +                transport=TestHttpTransport()
    +            )
    +        )
    +    return create_client
    +
    +
    +def test_post(pipeline_client_builder):
    +
    +        # Test POST LRO with both Location and Azure-AsyncOperation
    +
    +        # The initial response contains both Location and Azure-AsyncOperation, a 202 and no Body
    +        initial_response = TestArmPolling.mock_send(
    +            'POST',
    +            202,
    +            {
    +                'location': 'http://example.org/location',
    +                'azure-asyncoperation': 'http://example.org/async_monitor',
    +            },
    +            ''
    +        )
    +
    +        def send(request, **kwargs):
    +            assert request.method == 'GET'
    +
    +            if request.url == 'http://example.org/location':
    +                return TestArmPolling.mock_send(
    +                    'GET',
    +                    200,
    +                    body={'location_result': True}
    +                ).http_response
    +            elif request.url == 'http://example.org/async_monitor':
    +                return TestArmPolling.mock_send(
    +                    'GET',
    +                    200,
    +                    body={'status': 'Succeeded'}
    +                ).http_response
    +            else:
    +                pytest.fail("No other query allowed")
    +
    +        client = pipeline_client_builder(send)
    +
    +        def deserialization_cb(pipeline_response):
    +            return json.loads(pipeline_response.http_response.text())
    +
    +        # Test 1, LRO options with Location final state
    +        poll = LROPoller(
    +            client,
    +            initial_response,
    +            deserialization_cb,
    +            ARMPolling(0, lro_options={"final-state-via": "location"}))
    +        result = poll.result()
    +        assert result['location_result'] == True
    +
    +        # Test 2, LRO options with Azure-AsyncOperation final state
    +        poll = LROPoller(
    +            client,
    +            initial_response,
    +            deserialization_cb,
    +            ARMPolling(0, lro_options={"final-state-via": "azure-async-operation"}))
    +        result = poll.result()
    +        assert result['status'] == 'Succeeded'
    +
    +        # Test 3, backward compat (no options, means "azure-async-operation")
    +        poll = LROPoller(
    +            client,
    +            initial_response,
    +            deserialization_cb,
    +            ARMPolling(0))
    +        result = poll.result()
    +        assert result['status'] == 'Succeeded'
    +
    +        # Test 4, location has no body
    +
    +        def send(request, **kwargs):
    +            assert request.method == 'GET'
    +
    +            if request.url == 'http://example.org/location':
    +                return TestArmPolling.mock_send(
    +                    'GET',
    +                    200,
    +                    body=""
    +                ).http_response
    +            elif request.url == 'http://example.org/async_monitor':
    +                return TestArmPolling.mock_send(
    +                    'GET',
    +                    200,
    +                    body={'status': 'Succeeded'}
    +                ).http_response
    +            else:
    +                pytest.fail("No other query allowed")
    +
    +        client = pipeline_client_builder(send)
    +
    +        poll = LROPoller(
    +            client,
    +            initial_response,
    +            deserialization_cb,
    +            ARMPolling(0, lro_options={"final-state-via": "location"}))
    +        result = poll.result()
    +        assert result is None
    +
    +
    +class TestArmPolling(object):
    +
    +    convert = re.compile('([a-z0-9])([A-Z])')
    +
    +    @staticmethod
    +    def mock_send(method, status, headers=None, body=None):
    +        if headers is None:
    +            headers = {}
    +        response = mock.create_autospec(Response)
    +        response.request = mock.create_autospec(Request)
    +        response.request.method = method
    +        response.request.url = RESOURCE_URL
    +        response.request.headers = {
    +            'x-ms-client-request-id': '67f4dd4e-6262-45e1-8bed-5c45cf23b6d9'
    +        }
    +        response.status_code = status
    +        response.headers = headers
    +        response.headers.update({"content-type": "application/json; charset=utf8"})
    +        response.reason = "OK"
    +        content = body if body is not None else RESPONSE_BODY
    +        response.text = json.dumps(content)
    +        response.json = lambda: json.loads(response.text)
    +
    +        request = CLIENT._request(
    +            response.request.method,
    +            response.request.url,
    +            None,  # params
    +            response.request.headers,
    +            content,
    +            None,  # form_content
    +            None  # stream_content
    +        )
    +
    +        return PipelineResponse(
    +            request,
    +            RequestsTransportResponse(
    +                request,
    +                response,
    +            ),
    +            None  # context
    +        )
    +
    +
    +    @staticmethod
    +    def mock_update(url, headers=None):
    +        response = mock.create_autospec(Response)
    +        response.request = mock.create_autospec(Request)
    +        response.request.method = 'GET'
    +        response.headers = headers or {}
    +        response.headers.update({"content-type": "application/json; charset=utf8"})
    +        response.reason = "OK"
    +
    +        if url == ASYNC_URL:
    +            response.request.url = url
    +            response.status_code = POLLING_STATUS
    +            response.text = ASYNC_BODY
    +            response.randomFieldFromPollAsyncOpHeader = None
    +
    +        elif url == LOCATION_URL:
    +            response.request.url = url
    +            response.status_code = POLLING_STATUS
    +            response.text = LOCATION_BODY
    +            response.randomFieldFromPollLocationHeader = None
    +
    +        elif url == ERROR:
    +            raise BadEndpointError("boom")
    +
    +        elif url == RESOURCE_URL:
    +            response.request.url = url
    +            response.status_code = POLLING_STATUS
    +            response.text = RESOURCE_BODY
    +
    +        else:
    +            raise Exception('URL does not match')
    +        response.json = lambda: json.loads(response.text)
    +
    +        request = CLIENT._request(
    +            response.request.method,
    +            response.request.url,
    +            None,  # params
    +            {}, # request has no headers
    +            None, # Request has no body
    +            None,  # form_content
    +            None  # stream_content
    +        )
    +
    +        return PipelineResponse(
    +            request,
    +            RequestsTransportResponse(
    +                request,
    +                response,
    +            ),
    +            None  # context
    +        )
    +
    +    @staticmethod
    +    def mock_outputs(pipeline_response):
    +        response = pipeline_response.http_response
    +        body = json.loads(response.text())
    +        body = {TestArmPolling.convert.sub(r'\1_\2', k).lower(): v
    +                for k, v in body.items()}
    +        properties = body.setdefault('properties', {})
    +        if 'name' in body:
    +            properties['name'] = body['name']
    +        if properties:
    +            properties = {TestArmPolling.convert.sub(r'\1_\2', k).lower(): v
    +                          for k, v in properties.items()}
    +            del body['properties']
    +            body.update(properties)
    +            resource = SimpleResource(**body)
    +        else:
    +            raise DecodeError("Impossible to deserialize")
    +            resource = SimpleResource(**body)
    +        return resource
    +
    +    def test_long_running_put(self):
    +        #TODO: Test custom header field
    +
    +        # Test throw on non LRO related status code
    +        response = TestArmPolling.mock_send('PUT', 1000, {})
    +        op = LongRunningOperation(response, lambda x:None)
    +        with pytest.raises(BadStatus):
    +            op.set_initial_status(response)
    +        with pytest.raises(HttpResponseError):
    +            LROPoller(CLIENT, response,
    +                TestArmPolling.mock_outputs,
    +                ARMPolling(0)).result()
    +
    +        # Test with no polling necessary
    +        response_body = {
    +            'properties':{'provisioningState': 'Succeeded'},
    +            'name': TEST_NAME
    +        }
    +        response = TestArmPolling.mock_send(
    +            'PUT', 201,
    +            {}, response_body
    +        )
    +        def no_update_allowed(url, headers=None):
    +            raise ValueError("Should not try to update")
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0)
    +        )
    +        assert poll.result().name == TEST_NAME
    +        assert not hasattr(poll._polling_method._pipeline_response, 'randomFieldFromPollAsyncOpHeader')
    +
    +        # Test polling from azure-asyncoperation header
    +        response = TestArmPolling.mock_send(
    +            'PUT', 201,
    +            {'azure-asyncoperation': ASYNC_URL})
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        assert poll.result().name == TEST_NAME
    +        assert not hasattr(poll._polling_method._pipeline_response, 'randomFieldFromPollAsyncOpHeader')
    +
    +        # Test polling location header
    +        response = TestArmPolling.mock_send(
    +            'PUT', 201,
    +            {'location': LOCATION_URL})
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        assert poll.result().name == TEST_NAME
    +        assert poll._polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollLocationHeader is None
    +
    +        # Test polling initial payload invalid (SQLDb)
    +        response_body = {}  # Empty will raise
    +        response = TestArmPolling.mock_send(
    +            'PUT', 201,
    +            {'location': LOCATION_URL}, response_body)
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        assert poll.result().name == TEST_NAME
    +        assert poll._polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollLocationHeader is None
    +
    +        # Test fail to poll from azure-asyncoperation header
    +        response = TestArmPolling.mock_send(
    +            'PUT', 201,
    +            {'azure-asyncoperation': ERROR})
    +        with pytest.raises(BadEndpointError):
    +            poll = LROPoller(CLIENT, response,
    +                TestArmPolling.mock_outputs,
    +                ARMPolling(0)).result()
    +
    +        # Test fail to poll from location header
    +        response = TestArmPolling.mock_send(
    +            'PUT', 201,
    +            {'location': ERROR})
    +        with pytest.raises(BadEndpointError):
    +            poll = LROPoller(CLIENT, response,
    +                TestArmPolling.mock_outputs,
    +                ARMPolling(0)).result()
    +
    +    def test_long_running_patch(self):
    +
    +        # Test polling from location header
    +        response = TestArmPolling.mock_send(
    +            'PATCH', 202,
    +            {'location': LOCATION_URL},
    +            body={'properties':{'provisioningState': 'Succeeded'}})
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        assert poll.result().name == TEST_NAME
    +        assert poll._polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollLocationHeader is None
    +
    +        # Test polling from azure-asyncoperation header
    +        response = TestArmPolling.mock_send(
    +            'PATCH', 202,
    +            {'azure-asyncoperation': ASYNC_URL},
    +            body={'properties':{'provisioningState': 'Succeeded'}})
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        assert poll.result().name == TEST_NAME
    +        assert not hasattr(poll._polling_method._pipeline_response, 'randomFieldFromPollAsyncOpHeader')
    +
    +        # Test polling from location header
    +        response = TestArmPolling.mock_send(
    +            'PATCH', 200,
    +            {'location': LOCATION_URL},
    +            body={'properties':{'provisioningState': 'Succeeded'}})
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        assert poll.result().name == TEST_NAME
    +        assert poll._polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollLocationHeader is None
    +
    +        # Test polling from azure-asyncoperation header
    +        response = TestArmPolling.mock_send(
    +            'PATCH', 200,
    +            {'azure-asyncoperation': ASYNC_URL},
    +            body={'properties':{'provisioningState': 'Succeeded'}})
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        assert poll.result().name == TEST_NAME
    +        assert not hasattr(poll._polling_method._pipeline_response, 'randomFieldFromPollAsyncOpHeader')
    +
    +        # Test fail to poll from azure-asyncoperation header
    +        response = TestArmPolling.mock_send(
    +            'PATCH', 202,
    +            {'azure-asyncoperation': ERROR})
    +        with pytest.raises(BadEndpointError):
    +            poll = LROPoller(CLIENT, response,
    +                TestArmPolling.mock_outputs,
    +                ARMPolling(0)).result()
    +
    +        # Test fail to poll from location header
    +        response = TestArmPolling.mock_send(
    +            'PATCH', 202,
    +            {'location': ERROR})
    +        with pytest.raises(BadEndpointError):
    +            poll = LROPoller(CLIENT, response,
    +                TestArmPolling.mock_outputs,
    +                ARMPolling(0)).result()
    +
    +    def test_long_running_delete(self):
    +        # Test polling from azure-asyncoperation header
    +        response = TestArmPolling.mock_send(
    +            'DELETE', 202,
    +            {'azure-asyncoperation': ASYNC_URL},
    +            body=""
    +        )
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        poll.wait()
    +        assert poll.result() is None
    +        assert poll._polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollAsyncOpHeader is None
    +
    +    def test_long_running_post_legacy(self):
    +        # Former oooooold tests to refactor one day to something more readble
    +
    +        # Test polling from azure-asyncoperation header
    +        response = TestArmPolling.mock_send(
    +            'POST', 201,
    +            {'azure-asyncoperation': ASYNC_URL},
    +            body={'properties':{'provisioningState': 'Succeeded'}})
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        poll.wait()
    +        #self.assertIsNone(poll.result())
    +        assert poll._polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollAsyncOpHeader is None
    +
    +        # Test polling from azure-asyncoperation header
    +        response = TestArmPolling.mock_send(
    +            'POST', 202,
    +            {'azure-asyncoperation': ASYNC_URL},
    +            body={'properties':{'provisioningState': 'Succeeded'}})
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        poll.wait()
    +        #self.assertIsNone(poll.result())
    +        assert poll._polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollAsyncOpHeader is None
    +
    +        # Test polling from location header
    +        response = TestArmPolling.mock_send(
    +            'POST', 202,
    +            {'location': LOCATION_URL},
    +            body={'properties':{'provisioningState': 'Succeeded'}})
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        assert poll.result().name == TEST_NAME
    +        assert poll._polling_method._pipeline_response.http_response.internal_response.randomFieldFromPollLocationHeader is None
    +
    +        # Test fail to poll from azure-asyncoperation header
    +        response = TestArmPolling.mock_send(
    +            'POST', 202,
    +            {'azure-asyncoperation': ERROR})
    +        with pytest.raises(BadEndpointError):
    +            poll = LROPoller(CLIENT, response,
    +                TestArmPolling.mock_outputs,
    +                ARMPolling(0)).result()
    +
    +        # Test fail to poll from location header
    +        response = TestArmPolling.mock_send(
    +            'POST', 202,
    +            {'location': ERROR})
    +        with pytest.raises(BadEndpointError):
    +            poll = LROPoller(CLIENT, response,
    +                TestArmPolling.mock_outputs,
    +                ARMPolling(0)).result()
    +
    +    def test_long_running_negative(self):
    +        global LOCATION_BODY
    +        global POLLING_STATUS
    +
    +        # Test LRO PUT throws for invalid json
    +        LOCATION_BODY = '{'
    +        response = TestArmPolling.mock_send(
    +            'POST', 202,
    +            {'location': LOCATION_URL})
    +        poll = LROPoller(
    +            CLIENT,
    +            response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0)
    +        )
    +        with pytest.raises(DecodeError):
    +            poll.wait()
    +
    +        LOCATION_BODY = '{\'"}'
    +        response = TestArmPolling.mock_send(
    +            'POST', 202,
    +            {'location': LOCATION_URL})
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        with pytest.raises(DecodeError):
    +            poll.wait()
    +
    +        LOCATION_BODY = '{'
    +        POLLING_STATUS = 203
    +        response = TestArmPolling.mock_send(
    +            'POST', 202,
    +            {'location': LOCATION_URL})
    +        poll = LROPoller(CLIENT, response,
    +            TestArmPolling.mock_outputs,
    +            ARMPolling(0))
    +        with pytest.raises(HttpResponseError): # TODO: Node.js raises on deserialization
    +            poll.wait()
    +
    +        LOCATION_BODY = json.dumps({ 'name': TEST_NAME })
    +        POLLING_STATUS = 200
    +
    diff --git a/sdk/core/azure-mgmt-core/tests/test_mgmt_exceptions.py b/sdk/core/azure-mgmt-core/tests/test_mgmt_exceptions.py
    new file mode 100644
    index 000000000000..8e1e40a1c3c8
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/tests/test_mgmt_exceptions.py
    @@ -0,0 +1,163 @@
    +#--------------------------------------------------------------------------
    +#
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to deal
    +# in the Software without restriction, including without limitation the rights
    +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +# copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +# THE SOFTWARE.
    +#
    +#--------------------------------------------------------------------------
    +import functools
    +import json
    +
    +from azure.core.pipeline.transport._base import _HttpResponseBase
    +
    +from azure.core.exceptions import HttpResponseError
    +from azure.mgmt.core.exceptions import ARMErrorFormat, TypedErrorInfo
    +
    +
    +ARMError = functools.partial(HttpResponseError, error_format=ARMErrorFormat)
    +
    +def _build_response(json_body):
    +    class MockResponse(_HttpResponseBase):
    +        def __init__(self):
    +            super(MockResponse, self).__init__(
    +                request=None,
    +                internal_response = None,
    +            )
    +            self.status_code = 400
    +            self.reason = "Bad Request"
    +            self.content_type = "application/json"
    +            self._body = json_body
    +
    +        def body(self):
    +            return self._body
    +
    +    return MockResponse()
    +
    +
    +def test_arm_exception():
    +
    +    message = {
    +        "error": {
    +            "code": "BadArgument",
    +            "message": "The provided database 'foo' has an invalid username.",
    +            "target": "query",
    +            "details": [
    +                {
    +                    "code": "301",
    +                    "target": "$search",
    +                    "message": "$search query option not supported",
    +                }
    +            ],
    +            "innererror": {
    +                "customKey": "customValue"
    +            },
    +            "additionalInfo": [
    +                {
    +                    "type": "SomeErrorType",
    +                    "info": {
    +                        "customKey": "customValue"
    +                    }
    +                }
    +            ]
    +        }
    +    }
    +    cloud_exp = ARMError(response=_build_response(json.dumps(message).encode("utf-8")))
    +    assert cloud_exp.error.target ==  'query'
    +    assert cloud_exp.error.details[0].target ==  '$search'
    +    assert cloud_exp.error.innererror['customKey'] ==  'customValue'
    +    assert cloud_exp.error.additional_info[0].type ==  'SomeErrorType'
    +    assert cloud_exp.error.additional_info[0].info['customKey'] ==  'customValue'
    +    assert 'customValue' in  str(cloud_exp)
    +
    +    message = {
    +        "error": {
    +            "code": "BadArgument",
    +            "message": "The provided database 'foo' has an invalid username.",
    +            "target": "query",
    +            "details": [
    +                {
    +                    "code": "301",
    +                    "target": "$search",
    +                    "message": "$search query option not supported",
    +                    "additionalInfo": [
    +                        {
    +                            "type": "PolicyViolation",
    +                            "info": {
    +                                "policyDefinitionDisplayName": "Allowed locations",
    +                                "policyAssignmentParameters": {
    +                                    "listOfAllowedLocations": {
    +                                        "value": [
    +                                            "westus"
    +                                        ]
    +                                    }
    +                                }
    +                            }
    +                        }
    +                    ]
    +                }
    +            ],
    +            "additionalInfo": [
    +                {
    +                    "type": "SomeErrorType",
    +                    "info": {
    +                        "customKey": "customValue"
    +                    }
    +                }
    +            ]
    +        }
    +    }
    +    cloud_exp = ARMError(response=_build_response(json.dumps(message).encode("utf-8")))
    +    assert cloud_exp.error.target ==  'query'
    +    assert cloud_exp.error.details[0].target ==  '$search'
    +    assert cloud_exp.error.additional_info[0].type ==  'SomeErrorType'
    +    assert cloud_exp.error.additional_info[0].info['customKey'] ==  'customValue'
    +    assert cloud_exp.error.details[0].additional_info[0].type ==  'PolicyViolation'
    +    assert cloud_exp.error.details[0].additional_info[0].info['policyDefinitionDisplayName'] ==  'Allowed locations'
    +    assert cloud_exp.error.details[0].additional_info[0].info['policyAssignmentParameters']['listOfAllowedLocations']['value'][0] ==  'westus'
    +    assert 'customValue' in  str(cloud_exp)
    +
    +
    +    error = ARMError(response=_build_response(b"{{"))
    +    assert "Bad Request" in error.message
    +
    +    error = ARMError(response=_build_response(b'{"error":{"code":"Conflict","message":"The maximum number of Free ServerFarms allowed in a Subscription is 10.","target":null,"details":[{"message":"The maximum number of Free ServerFarms allowed in a Subscription is 10."},{"code":"Conflict"},{"errorentity":{"code":"Conflict","message":"The maximum number of Free ServerFarms allowed in a Subscription is 10.","extendedCode":"59301","messageTemplate":"The maximum number of {0} ServerFarms allowed in a Subscription is {1}.","parameters":["Free","10"],"innerErrors":null}}],"innererror":null}}'))
    +    assert error.error.code ==  "Conflict"
    +
    +    message = json.dumps({
    +        "error": {
    +            "code": "BadArgument",
    +            "message": "The provided database 'foo' has an invalid username.",
    +            "target": "query",
    +            "details": [
    +                {
    +                    "code": "301",
    +                    "target": "$search",
    +                    "message": "$search query option not supported",
    +                }
    +            ]
    +        }}).encode('utf-8')
    +    error = ARMError(response=_build_response(message))
    +    assert error.error.code ==  "BadArgument"
    +
    +    # See https://github.com/Azure/msrestazure-for-python/issues/54
    +    response_text = b'"{\\"error\\": {\\"code\\": \\"ResourceGroupNotFound\\", \\"message\\": \\"Resource group \'res_grp\' could not be found.\\"}}"'
    +    error = ARMError(response=_build_response(response_text))
    +    # Do not raise is plenty enough, that's a major server issue....
    diff --git a/sdk/core/azure-mgmt-core/tests/test_policies.py b/sdk/core/azure-mgmt-core/tests/test_policies.py
    new file mode 100644
    index 000000000000..f7f3b7ffd730
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/tests/test_policies.py
    @@ -0,0 +1,164 @@
    +#--------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to deal
    +# in the Software without restriction, including without limitation the rights
    +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +# copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +# THE SOFTWARE.
    +#
    +#--------------------------------------------------------------------------
    +
    +import json
    +import time
    +try:
    +    from unittest import mock
    +except ImportError:
    +    import mock
    +
    +import pytest
    +
    +import requests
    +import httpretty
    +
    +from azure.core.pipeline import Pipeline
    +from azure.core.pipeline.transport import (
    +    HttpRequest,
    +    RequestsTransport,
    +)
    +
    +from azure.mgmt.core.policies import ARMAutoResourceProviderRegistrationPolicy
    +
    +@pytest.fixture
    +def sleepless(monkeypatch):
    +    def sleep(_):
    +        pass
    +    monkeypatch.setattr(time, 'sleep', sleep)
    +
    +
    +@httpretty.activate
    +@pytest.mark.usefixtures("sleepless")
    +def test_register_rp_policy():
    +    """Protocol:
    +    - We call the provider and get a 409 provider error
    +    - Now we POST register provider and get "Registering"
    +    - Now we GET register provider and get "Registered"
    +    - We call again the first endpoint and this time this succeed
    +    """
    +
    +    provider_url = ("https://management.azure.com/"
    +                    "subscriptions/12345678-9abc-def0-0000-000000000000/"
    +                    "resourceGroups/clitest.rg000001/"
    +                    "providers/Microsoft.Sql/servers/ygserver123?api-version=2014-04-01")
    +
    +    provider_error = ('{"error":{"code":"MissingSubscriptionRegistration", '
    +                        '"message":"The subscription registration is in \'Unregistered\' state. '
    +                        'The subscription must be registered to use namespace \'Microsoft.Sql\'. '
    +                        'See https://aka.ms/rps-not-found for how to register subscriptions."}}')
    +
    +    provider_success = '{"success": true}'
    +
    +    httpretty.register_uri(httpretty.PUT,
    +                            provider_url,
    +                            responses=[
    +                                httpretty.Response(body=provider_error, status=409),
    +                                httpretty.Response(body=provider_success),
    +                            ],
    +                            content_type="application/json")
    +
    +    register_post_url = ("https://management.azure.com/"
    +                            "subscriptions/12345678-9abc-def0-0000-000000000000/"
    +                            "providers/Microsoft.Sql/register?api-version=2016-02-01")
    +
    +    register_post_result = {
    +        "registrationState":"Registering"
    +    }
    +
    +    register_get_url = ("https://management.azure.com/"
    +                        "subscriptions/12345678-9abc-def0-0000-000000000000/"
    +                        "providers/Microsoft.Sql?api-version=2016-02-01")
    +
    +    register_get_result = {
    +        "registrationState":"Registered"
    +    }
    +
    +    httpretty.register_uri(httpretty.POST,
    +                            register_post_url,
    +                            body=json.dumps(register_post_result),
    +                            content_type="application/json")
    +
    +    httpretty.register_uri(httpretty.GET,
    +                            register_get_url,
    +                            body=json.dumps(register_get_result),
    +                            content_type="application/json")
    +
    +    request = HttpRequest("PUT", provider_url)
    +    policies = [
    +        ARMAutoResourceProviderRegistrationPolicy(),
    +    ]
    +    with Pipeline(RequestsTransport(), policies=policies) as pipeline:
    +        response = pipeline.run(request)
    +
    +    assert json.loads(response.http_response.text())['success']
    +
    +
    +@httpretty.activate
    +@pytest.mark.usefixtures("sleepless")
    +def test_register_failed_policy():
    +    """Protocol:
    +    - We call the provider and get a 409 provider error
    +    - Now we POST register provider and get "Registering"
    +    - This POST failed
    +    """
    +
    +    provider_url = ("https://management.azure.com/"
    +                    "subscriptions/12345678-9abc-def0-0000-000000000000/"
    +                    "resourceGroups/clitest.rg000001/"
    +                    "providers/Microsoft.Sql/servers/ygserver123?api-version=2014-04-01")
    +
    +    provider_error = ('{"error":{"code":"MissingSubscriptionRegistration", '
    +                        '"message":"The subscription registration is in \'Unregistered\' state. '
    +                        'The subscription must be registered to use namespace \'Microsoft.Sql\'. '
    +                        'See https://aka.ms/rps-not-found for how to register subscriptions."}}')
    +
    +    provider_success = '{"success": true}'
    +
    +    httpretty.register_uri(httpretty.PUT,
    +                            provider_url,
    +                            responses=[
    +                                httpretty.Response(body=provider_error, status=409),
    +                                httpretty.Response(body=provider_success),
    +                            ],
    +                            content_type="application/json")
    +
    +    register_post_url = ("https://management.azure.com/"
    +                            "subscriptions/12345678-9abc-def0-0000-000000000000/"
    +                            "providers/Microsoft.Sql/register?api-version=2016-02-01")
    +
    +    httpretty.register_uri(httpretty.POST,
    +                            register_post_url,
    +                            status=409,
    +                            content_type="application/json")
    +
    +    request = HttpRequest("PUT", provider_url)
    +    policies = [
    +        ARMAutoResourceProviderRegistrationPolicy(),
    +    ]
    +    with Pipeline(RequestsTransport(), policies=policies) as pipeline:
    +        response = pipeline.run(request)
    +
    +    assert response.http_response.status_code == 409
    diff --git a/sdk/core/azure-mgmt-core/tests/test_tools.py b/sdk/core/azure-mgmt-core/tests/test_tools.py
    new file mode 100644
    index 000000000000..871b78bd754f
    --- /dev/null
    +++ b/sdk/core/azure-mgmt-core/tests/test_tools.py
    @@ -0,0 +1,374 @@
    +#--------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +#
    +# The MIT License (MIT)
    +#
    +# Permission is hereby granted, free of charge, to any person obtaining a copy
    +# of this software and associated documentation files (the ""Software""), to deal
    +# in the Software without restriction, including without limitation the rights
    +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +# copies of the Software, and to permit persons to whom the Software is
    +# furnished to do so, subject to the following conditions:
    +#
    +# The above copyright notice and this permission notice shall be included in
    +# all copies or substantial portions of the Software.
    +#
    +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +# THE SOFTWARE.
    +#
    +#--------------------------------------------------------------------------
    +
    +import unittest
    +
    +from azure.mgmt.core.tools import parse_resource_id, is_valid_resource_id, resource_id, is_valid_resource_name
    +
    +class TestTools(unittest.TestCase):
    +
    +    def test_resource_parse(self):
    +        """
    +        Tests resource id parsing, reforming, and validation.
    +        """
    +        tests = [
    +            {
    +                'resource_id': '/subscriptions/fakesub/resourcegroups/testgroup/providers'
    +                               '/Microsoft.Storage/storageAccounts/foo/providers'
    +                               '/Microsoft.Authorization/locks/bar',
    +                'expected': {
    +                    'name': 'foo',
    +                    'type': 'storageAccounts',
    +                    'namespace': 'Microsoft.Storage',
    +                    'child_name_1': 'bar',
    +                    'child_namespace_1': 'Microsoft.Authorization',
    +                    'child_type_1': 'locks',
    +                    'child_parent_1': 'storageAccounts/foo/providers/Microsoft.Authorization/',
    +                    'resource_group': 'testgroup',
    +                    'subscription': 'fakesub',
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/fakesub/resourcegroups/testgroup/providers'
    +                               '/Microsoft.Storage/storageAccounts/foo'
    +                               '/locks/bar',
    +                'expected': {
    +                    'name': 'foo',
    +                    'type': 'storageAccounts',
    +                    'namespace': 'Microsoft.Storage',
    +                    'child_name_1': 'bar',
    +                    'child_type_1': 'locks',
    +                    'child_parent_1': 'storageAccounts/foo/',
    +                    'resource_group': 'testgroup',
    +                    'subscription': 'fakesub',
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/fakesub/resourcegroups/testgroup/providers'
    +                               '/Microsoft.Storage/storageAccounts/foo/providers'
    +                               '/Microsoft.Authorization/locks/bar/providers/Microsoft.Network/'
    +                               'nets/gc',
    +                'expected': {
    +                    'name': 'foo',
    +                    'type': 'storageAccounts',
    +                    'namespace': 'Microsoft.Storage',
    +                    'child_name_1': 'bar',
    +                    'child_namespace_1': 'Microsoft.Authorization',
    +                    'child_type_1': 'locks',
    +                    'child_parent_1': 'storageAccounts/foo/providers/Microsoft.Authorization/',
    +                    'child_name_2': 'gc',
    +                    'child_namespace_2': 'Microsoft.Network',
    +                    'child_type_2': 'nets',
    +                    'child_parent_2': 'storageAccounts/foo/providers/Microsoft.Authorization/'
    +                                      'locks/bar/providers/Microsoft.Network/',
    +                    'resource_group': 'testgroup',
    +                    'subscription': 'fakesub',
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/fakesub/resourcegroups/testgroup/providers'
    +                               '/Microsoft.Storage/storageAccounts/foo'
    +                               '/locks/bar/nets/gc',
    +                'expected': {
    +                    'name': 'foo',
    +                    'type': 'storageAccounts',
    +                    'namespace': 'Microsoft.Storage',
    +                    'child_name_1': 'bar',
    +                    'child_type_1': 'locks',
    +                    'child_parent_1': 'storageAccounts/foo/',
    +                    'child_name_2': 'gc',
    +                    'child_type_2': 'nets',
    +                    'child_parent_2': 'storageAccounts/foo/locks/bar/',
    +                    'resource_group': 'testgroup',
    +                    'subscription': 'fakesub',
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/mySub/resourceGroups/myRg/providers/'
    +                               'Microsoft.Provider1/resourceType1/name1',
    +                'expected': {
    +                    'subscription': 'mySub',
    +                    'resource_group': 'myRg',
    +                    'namespace': 'Microsoft.Provider1',
    +                    'type': 'resourceType1',
    +                    'name': 'name1',
    +                    'resource_parent': '',
    +                    'resource_namespace': 'Microsoft.Provider1',
    +                    'resource_type': 'resourceType1',
    +                    'resource_name': 'name1'
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/mySub/resourceGroups/myRg/providers/'
    +                               'Microsoft.Provider1/resourceType1/name1/resourceType2/name2',
    +                'expected': {
    +                    'subscription': 'mySub',
    +                    'resource_group': 'myRg',
    +                    'namespace': 'Microsoft.Provider1',
    +                    'type': 'resourceType1',
    +                    'name': 'name1',
    +                    'child_namespace_1': None,
    +                    'child_type_1': 'resourceType2',
    +                    'child_name_1': 'name2',
    +                    'child_parent_1': 'resourceType1/name1/',
    +                    'resource_parent': 'resourceType1/name1/',
    +                    'resource_namespace': 'Microsoft.Provider1',
    +                    'resource_type': 'resourceType2',
    +                    'resource_name': 'name2'
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/00000/resourceGroups/myRg/providers/'
    +                               'Microsoft.RecoveryServices/vaults/vault_name/backupFabrics/'
    +                               'fabric_name/protectionContainers/container_name/'
    +                               'protectedItems/item_name/recoveryPoint/recovery_point_guid',
    +                'expected': {
    +                    'subscription': '00000',
    +                    'resource_group': 'myRg',
    +                    'namespace': 'Microsoft.RecoveryServices',
    +                    'type': 'vaults',
    +                    'name': 'vault_name',
    +                    'child_type_1': 'backupFabrics',
    +                    'child_name_1': 'fabric_name',
    +                    'child_parent_1': 'vaults/vault_name/',
    +                    'child_type_2': 'protectionContainers',
    +                    'child_name_2': 'container_name',
    +                    'child_parent_2': 'vaults/vault_name/backupFabrics/fabric_name/',
    +                    'child_type_3': 'protectedItems',
    +                    'child_name_3': 'item_name',
    +                    'child_parent_3': 'vaults/vault_name/backupFabrics/fabric_name/'
    +                                      'protectionContainers/container_name/',
    +                    'child_type_4': 'recoveryPoint',
    +                    'child_name_4': 'recovery_point_guid',
    +                    'child_parent_4': 'vaults/vault_name/backupFabrics/fabric_name/'
    +                                      'protectionContainers/container_name/protectedItems/'
    +                                      'item_name/',
    +                    'resource_parent': 'vaults/vault_name/backupFabrics/fabric_name/'
    +                                       'protectionContainers/container_name/protectedItems/'
    +                                       'item_name/',
    +                    'resource_namespace': 'Microsoft.RecoveryServices',
    +                    'resource_type': 'recoveryPoint',
    +                    'resource_name': 'recovery_point_guid'
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/mySub/resourceGroups/myRg/providers/'
    +                               'Microsoft.Provider1/resourceType1/name1/resourceType2/name2/'
    +                               'providers/Microsoft.Provider3/resourceType3/name3',
    +                'expected': {
    +                    'subscription': 'mySub',
    +                    'resource_group': 'myRg',
    +                    'namespace': 'Microsoft.Provider1',
    +                    'type': 'resourceType1',
    +                    'name': 'name1',
    +                    'child_namespace_1': None,
    +                    'child_type_1': 'resourceType2',
    +                    'child_name_1': 'name2',
    +                    'child_parent_1' : 'resourceType1/name1/',
    +                    'child_namespace_2': 'Microsoft.Provider3',
    +                    'child_type_2': 'resourceType3',
    +                    'child_name_2': 'name3',
    +                    'child_parent_2': 'resourceType1/name1/resourceType2/name2/'
    +                                      'providers/Microsoft.Provider3/',
    +                    'resource_parent': 'resourceType1/name1/resourceType2/name2/'
    +                                       'providers/Microsoft.Provider3/',
    +                    'resource_namespace': 'Microsoft.Provider1',
    +                    'resource_type': 'resourceType3',
    +                    'resource_name': 'name3'
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/fakesub/providers/Microsoft.Authorization'
    +                               '/locks/foo',
    +                'expected': {
    +                    'name': 'foo',
    +                    'type': 'locks',
    +                    'namespace': 'Microsoft.Authorization',
    +                    'subscription': 'fakesub',
    +                }
    +            },
    +            {
    +                'resource_id': '/Subscriptions/fakesub/providers/Microsoft.Authorization'
    +                               '/locks/foo',
    +                'expected': {
    +                    'name': 'foo',
    +                    'type': 'locks',
    +                    'namespace': 'Microsoft.Authorization',
    +                    'subscription': 'fakesub',
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/mySub/resourceGroups/myRg',
    +                'expected': {
    +                    'subscription': 'mySub',
    +                    'resource_group': 'myRg'
    +                }
    +            }
    +        ]
    +        for test in tests:
    +            self.assertTrue(is_valid_resource_id(test['resource_id']))
    +            kwargs = parse_resource_id(test['resource_id'])
    +            for key in test['expected']:
    +                try:
    +                    self.assertEqual(kwargs[key], test['expected'][key])
    +                except KeyError:
    +                    self.assertTrue(key not in kwargs and test['expected'][key] is None)
    +
    +        invalid_ids = [
    +            '/subscriptions/fakesub/resourceGroups/myRg/type1/name1',
    +            '/subscriptions/fakesub/resourceGroups/myRg/providers/Microsoft.Provider/foo',
    +            '/subscriptions/fakesub/resourceGroups/myRg/providers/namespace/type/name/type1'
    +        ]
    +        for invalid_id in invalid_ids:
    +            self.assertFalse(is_valid_resource_id(invalid_id))
    +
    +        tests = [
    +            {
    +                'resource_id': '/subscriptions/fakesub/resourcegroups/testgroup/providers'
    +                               '/Microsoft.Storage/storageAccounts/foo/providers'
    +                               '/Microsoft.Authorization/locks/bar',
    +                'id_args': {
    +                    'name': 'foo',
    +                    'type': 'storageAccounts',
    +                    'namespace': 'Microsoft.Storage',
    +                    'child_name_1': 'bar',
    +                    'child_namespace_1': 'Microsoft.Authorization',
    +                    'child_type_1': 'locks',
    +                    'resource_group': 'testgroup',
    +                    'subscription': 'fakesub',
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/fakesub/resourcegroups/testgroup/providers'
    +                               '/Microsoft.Storage/storageAccounts/foo'
    +                               '/locks/bar',
    +                'id_args': {
    +                    'name': 'foo',
    +                    'type': 'storageAccounts',
    +                    'namespace': 'Microsoft.Storage',
    +                    'child_name_1': 'bar',
    +                    'child_type_1': 'locks',
    +                    'resource_group': 'testgroup',
    +                    'subscription': 'fakesub',
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/mySub/resourceGroups/myRg/providers/'
    +                               'Microsoft.Provider1/resourceType1/name1/resourceType2/name2/'
    +                               'providers/Microsoft.Provider3/resourceType3/name3',
    +                'id_args': {
    +                    'subscription': 'mySub',
    +                    'resource_group': 'myRg',
    +                    'namespace': 'Microsoft.Provider1',
    +                    'type': 'resourceType1',
    +                    'name': 'name1',
    +                    'child_type_1': 'resourceType2',
    +                    'child_name_1': 'name2',
    +                    'child_namespace_2': 'Microsoft.Provider3',
    +                    'child_type_2': 'resourceType3',
    +                    'child_name_2': 'name3'
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/mySub/resourceGroups/myRg/'
    +                               'providers/Microsoft.Provider1',
    +                'id_args': {
    +                    'subscription': 'mySub',
    +                    'resource_group': 'myRg',
    +                    'namespace': 'Microsoft.Provider1'
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/mySub/resourceGroups/myRg',
    +                'id_args': {
    +                    'subscription': 'mySub',
    +                    'resource_group': 'myRg'
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/mySub/resourceGroups/myRg/'
    +                               'providers/Microsoft.Provider1/resourceType1/name1/resourceType2/'
    +                               'name2/providers/Microsoft.Provider3',
    +                'id_args': {
    +                    'subscription': 'mySub',
    +                    'resource_group': 'myRg',
    +                    'namespace': 'Microsoft.Provider1',
    +                    'type': 'resourceType1',
    +                    'name': 'name1',
    +                    'child_type_1': 'resourceType2',
    +                    'child_name_1': 'name2',
    +                    'child_namespace_2': 'Microsoft.Provider3'
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/mySub/resourceGroups/myRg/'
    +                               'providers/Microsoft.Provider1/resourceType1/name1',
    +                'id_args': {
    +                    'subscription': 'mySub',
    +                    'resource_group': 'myRg',
    +                    'namespace': 'Microsoft.Provider1',
    +                    'type': 'resourceType1',
    +                    'name': 'name1',
    +                    'child_type_1': None,
    +                    'child_name_1': 'name2',
    +                    'child_namespace_2': 'Microsoft.Provider3'
    +                }
    +            },
    +            {
    +                'resource_id': '/subscriptions/mySub/resourceGroups/myRg',
    +                'id_args': {
    +                    'subscription': 'mySub',
    +                    'resource_group': 'myRg'
    +                }
    +            }
    +        ]
    +        for test in tests:
    +            rsrc_id = resource_id(**test['id_args'])
    +            self.assertEqual(rsrc_id.lower(), test['resource_id'].lower())
    +
    +    def test_is_resource_name(self):
    +        invalid_names = [
    +            '',
    +            'knights/ni',
    +            'spam&eggs',
    +            'i<3you',
    +            'a' * 261,
    +        ]
    +
    +        for test in invalid_names:
    +            assert not is_valid_resource_name(test)
    +
    +        valid_names = [
    +            'abc-123',
    +            ' ',  # no one said it had to be a good resource name.
    +            'a' * 260,
    +        ]
    +
    +        for test in valid_names:
    +            assert is_valid_resource_name(test)
    +
    +
    +if __name__ == "__main__":
    +    unittest.main()
    diff --git a/sdk/core/ci.yml b/sdk/core/ci.yml
    index 7abb446a33c6..7659e7f57e64 100644
    --- a/sdk/core/ci.yml
    +++ b/sdk/core/ci.yml
    @@ -45,6 +45,8 @@ stages:
         Artifacts:
         - name: azure_core
           safeName: azurecore
    +    - name: azure_mgmt_core
    +      safeName: azuremgmtcore
         - name: azure_core_tracing_opencensus
           safeName: azurecorecoretracingopencensus
         - name: azure_core_tracing_opentelemetry
    diff --git a/sdk/cosmos/azure-cosmos/.gitignore b/sdk/cosmos/azure-cosmos/.gitignore
    deleted file mode 100644
    index 90aee504643b..000000000000
    --- a/sdk/cosmos/azure-cosmos/.gitignore
    +++ /dev/null
    @@ -1,231 +0,0 @@
    -RunTest.cmd
    -
    -#################
    -## Eclipse
    -#################
    -
    -*.pydevproject
    -.project
    -.metadata
    -bin/
    -tmp/
    -*.tmp
    -*.bak
    -*.swp
    -*~.nib
    -local.properties
    -.classpath
    -.settings/
    -.loadpath
    -
    -# External tool builders
    -.externalToolBuilders/
    -
    -# Locally stored "Eclipse launch configurations"
    -*.launch
    -
    -# CDT-specific
    -.cproject
    -
    -# PDT-specific
    -.buildpath
    -
    -
    -#################
    -## Visual Studio
    -#################
    -
    -## Ignore Visual Studio temporary files, build results, and
    -## files generated by popular Visual Studio add-ons.
    -
    -# User-specific files
    -*.suo
    -*.user
    -*.sln.docstates
    -
    -# Build results
    -
    -[Dd]ebug/
    -[Rr]elease/
    -x64/
    -build/
    -[Bb]in/
    -[Oo]bj/
    -
    -# MSTest test Results
    -[Tt]est[Rr]esult*/
    -[Bb]uild[Ll]og.*
    -
    -*_i.c
    -*_p.c
    -*.ilk
    -*.meta
    -*.obj
    -*.pch
    -*.pdb
    -*.pgc
    -*.pgd
    -*.rsp
    -*.sbr
    -*.tlb
    -*.tli
    -*.tlh
    -*.tmp
    -*.tmp_proj
    -*.log
    -*.vspscc
    -*.vssscc
    -.builds
    -*.pidb
    -*.log
    -*.scc
    -
    -# Visual C++ cache files
    -ipch/
    -*.aps
    -*.ncb
    -*.opensdf
    -*.sdf
    -*.cachefile
    -
    -# Visual Studio profiler
    -*.psess
    -*.vsp
    -*.vspx
    -
    -# Guidance Automation Toolkit
    -*.gpState
    -
    -# ReSharper is a .NET coding add-in
    -_ReSharper*/
    -*.[Rr]e[Ss]harper
    -
    -# TeamCity is a build add-in
    -_TeamCity*
    -
    -# DotCover is a Code Coverage Tool
    -*.dotCover
    -
    -# NCrunch
    -*.ncrunch*
    -.*crunch*.local.xml
    -
    -# Installshield output folder
    -[Ee]xpress/
    -
    -# DocProject is a documentation generator add-in
    -DocProject/buildhelp/
    -DocProject/Help/*.HxT
    -DocProject/Help/*.HxC
    -DocProject/Help/*.hhc
    -DocProject/Help/*.hhk
    -DocProject/Help/*.hhp
    -DocProject/Help/Html2
    -DocProject/Help/html
    -
    -# Click-Once directory
    -publish/
    -
    -# Publish Web Output
    -*.Publish.xml
    -*.pubxml
    -
    -# NuGet Packages Directory
    -## TODO: If you have NuGet Package Restore enabled, uncomment the next line
    -#packages/
    -
    -# Windows Azure Build Output
    -csx
    -*.build.csdef
    -
    -# Windows Store app package directory
    -AppPackages/
    -
    -# Others
    -sql/
    -*.Cache
    -ClientBin/
    -[Ss]tyle[Cc]op.*
    -~$*
    -*~
    -*.dbmdl
    -*.[Pp]ublish.xml
    -*.pfx
    -*.publishsettings
    -
    -# RIA/Silverlight projects
    -Generated_Code/
    -
    -# Backup & report files from converting an old project file to a newer
    -# Visual Studio version. Backup files are not needed, because we have git ;-)
    -_UpgradeReport_Files/
    -Backup*/
    -UpgradeLog*.XML
    -UpgradeLog*.htm
    -
    -# SQL Server files
    -App_Data/*.mdf
    -App_Data/*.ldf
    -
    -#############
    -## Windows detritus
    -#############
    -
    -# Windows image file caches
    -Thumbs.db
    -ehthumbs.db
    -
    -# Folder config file
    -Desktop.ini
    -
    -# Recycle Bin used on file shares
    -$RECYCLE.BIN/
    -
    -# Mac crap
    -.DS_Store
    -
    -
    -#############
    -## Python
    -#############
    -
    -*.py[cod]
    -
    -# Packages
    -*.egg
    -*.egg-info
    -dist/
    -build/
    -eggs/
    -parts/
    -var/
    -sdist/
    -develop-eggs/
    -.installed.cfg
    -
    -## ignore pypi credential config file
    -config.pypirc
    -
    -##ignore python & c# vs project files
    -*.csproj
    -
    -##ignore test runner
    -RunTest.cmd
    -
    -# Installer logs
    -pip-log.txt
    -
    -# Unit test / coverage reports
    -.coverage
    -.tox
    -
    -#Translations
    -*.mo
    -
    -#Mr Developer
    -.mr.developer.cfg
    -
    -# Idea IDE
    -.idea/*
    -
    -.vscode/*
    \ No newline at end of file
    diff --git a/sdk/cosmos/azure-cosmos/CHANGELOG.md b/sdk/cosmos/azure-cosmos/CHANGELOG.md
    index bbf84b9678aa..7b5f48d50fd3 100644
    --- a/sdk/cosmos/azure-cosmos/CHANGELOG.md
    +++ b/sdk/cosmos/azure-cosmos/CHANGELOG.md
    @@ -1,5 +1,10 @@
     # Release History
     
    +## 4.0.0 (unreleased)
    +
    +- Added HttpLoggingPolicy to pipeline to enable passing in a custom logger for request and response headers.
    +
    +
     ## 4.0.0b6
     
     - Fixed bug in synchronized_request for media APIs.
    diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/_cosmos_client_connection.py b/sdk/cosmos/azure-cosmos/azure/cosmos/_cosmos_client_connection.py
    index 8628ffc8d169..b47ae6b022d4 100644
    --- a/sdk/cosmos/azure-cosmos/azure/cosmos/_cosmos_client_connection.py
    +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/_cosmos_client_connection.py
    @@ -37,6 +37,7 @@
         NetworkTraceLoggingPolicy,
         CustomHookPolicy,
         DistributedTracingPolicy,
    +    HttpLoggingPolicy,
         ProxyPolicy)
     
     from . import _base as base
    @@ -184,8 +185,9 @@ def __init__(
                 ContentDecodePolicy(),
                 retry_policy,
                 CustomHookPolicy(**kwargs),
    -            DistributedTracingPolicy(),
                 NetworkTraceLoggingPolicy(**kwargs),
    +            DistributedTracingPolicy(**kwargs),
    +            HttpLoggingPolicy(**kwargs),
                 ]
     
             transport = kwargs.pop("transport", None)
    diff --git a/sdk/cosmos/azure-cosmos/python.pyproj b/sdk/cosmos/azure-cosmos/python.pyproj
    deleted file mode 100644
    index 2de411868be1..000000000000
    --- a/sdk/cosmos/azure-cosmos/python.pyproj
    +++ /dev/null
    @@ -1,111 +0,0 @@
    -
    -
    -  
    -    Debug
    -    2.0
    -    {ea429a23-2afb-4bf7-a345-28e2bd129564}
    -    .
    -    .
    -    .
    -    .
    -    2.7
    -    10.0
    -    $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
    -    False
    -    {9a7a9026-48c1-4688-9d5d-e5699d47d074}
    -  
    -  
    -  
    -  
    -    $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Python Tools\Microsoft.PythonTools.targets
    -  
    -  
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -  
    -  
    -    
    -    
    -    
    -    
    -    
    -    
    -  
    -  
    -    
    -  
    -  
    -  
    -
    \ No newline at end of file
    diff --git a/sdk/cosmos/azure-cosmos/python.sln b/sdk/cosmos/azure-cosmos/python.sln
    deleted file mode 100644
    index 559ff4d083b9..000000000000
    --- a/sdk/cosmos/azure-cosmos/python.sln
    +++ /dev/null
    @@ -1,20 +0,0 @@
    -
    -Microsoft Visual Studio Solution File, Format Version 12.00
    -# Visual Studio 14
    -VisualStudioVersion = 14.0.25420.1
    -MinimumVisualStudioVersion = 10.0.40219.1
    -Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "python", "python.pyproj", "{EA429A23-2AFB-4BF7-A345-28E2BD129564}"
    -EndProject
    -Global
    -	GlobalSection(SolutionConfigurationPlatforms) = preSolution
    -		Debug|Any CPU = Debug|Any CPU
    -		Release|Any CPU = Release|Any CPU
    -	EndGlobalSection
    -	GlobalSection(ProjectConfigurationPlatforms) = postSolution
    -		{EA429A23-2AFB-4BF7-A345-28E2BD129564}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    -		{EA429A23-2AFB-4BF7-A345-28E2BD129564}.Release|Any CPU.ActiveCfg = Release|Any CPU
    -	EndGlobalSection
    -	GlobalSection(SolutionProperties) = preSolution
    -		HideSolutionNode = FALSE
    -	EndGlobalSection
    -EndGlobal
    diff --git a/sdk/cosmos/azure-cosmos/python_vs2017.pyproj b/sdk/cosmos/azure-cosmos/python_vs2017.pyproj
    deleted file mode 100644
    index 0088007f979f..000000000000
    --- a/sdk/cosmos/azure-cosmos/python_vs2017.pyproj
    +++ /dev/null
    @@ -1,95 +0,0 @@
    -
    -
    -  
    -    Debug
    -    2.0
    -    {ea429a23-2afb-4bf7-a345-28e2bd129564}
    -    .
    -    .
    -    .
    -    .
    -    10.0
    -    $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
    -    False
    -    Global|PythonCore|2.7
    -  
    -  
    -  
    -  
    -  
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -    
    -  
    -  
    -    
    -    
    -    
    -    
    -    
    -  
    -  
    -    
    -    
    -  
    -  
    -
    \ No newline at end of file
    diff --git a/sdk/cosmos/azure-cosmos/python_vs2017.sln b/sdk/cosmos/azure-cosmos/python_vs2017.sln
    deleted file mode 100644
    index efc0c061e718..000000000000
    --- a/sdk/cosmos/azure-cosmos/python_vs2017.sln
    +++ /dev/null
    @@ -1,23 +0,0 @@
    -
    -Microsoft Visual Studio Solution File, Format Version 12.00
    -# Visual Studio 15
    -VisualStudioVersion = 15.0.26730.16
    -MinimumVisualStudioVersion = 10.0.40219.1
    -Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "python_vs2017", "python_vs2017.pyproj", "{EA429A23-2AFB-4BF7-A345-28E2BD129564}"
    -EndProject
    -Global
    -	GlobalSection(SolutionConfigurationPlatforms) = preSolution
    -		Debug|Any CPU = Debug|Any CPU
    -		Release|Any CPU = Release|Any CPU
    -	EndGlobalSection
    -	GlobalSection(ProjectConfigurationPlatforms) = postSolution
    -		{EA429A23-2AFB-4BF7-A345-28E2BD129564}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    -		{EA429A23-2AFB-4BF7-A345-28E2BD129564}.Release|Any CPU.ActiveCfg = Release|Any CPU
    -	EndGlobalSection
    -	GlobalSection(SolutionProperties) = preSolution
    -		HideSolutionNode = FALSE
    -	EndGlobalSection
    -	GlobalSection(ExtensibilityGlobals) = postSolution
    -		SolutionGuid = {2A4705EC-6E91-4A5D-AB76-AA23575FA444}
    -	EndGlobalSection
    -EndGlobal
    diff --git a/sdk/cosmos/azure-cosmos/test-requirements.txt b/sdk/cosmos/azure-cosmos/test-requirements.txt
    deleted file mode 100644
    index f2578c6a0706..000000000000
    --- a/sdk/cosmos/azure-cosmos/test-requirements.txt
    +++ /dev/null
    @@ -1,2 +0,0 @@
    --r requirements.txt
    -pytest
    \ No newline at end of file
    diff --git a/sdk/cosmos/azure-cosmos/test/routing/collection_routing_map_test.py b/sdk/cosmos/azure-cosmos/test/routing/test_collection_routing_map.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/routing/collection_routing_map_test.py
    rename to sdk/cosmos/azure-cosmos/test/routing/test_collection_routing_map.py
    diff --git a/sdk/cosmos/azure-cosmos/test/routing/routing_map_provider_tests.py b/sdk/cosmos/azure-cosmos/test/routing/test_routing_map_provider.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/routing/routing_map_provider_tests.py
    rename to sdk/cosmos/azure-cosmos/test/routing/test_routing_map_provider.py
    diff --git a/sdk/cosmos/azure-cosmos/test/aggregate_tests.py b/sdk/cosmos/azure-cosmos/test/test_aggregate.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/aggregate_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_aggregate.py
    diff --git a/sdk/cosmos/azure-cosmos/test/base_unit_tests.py b/sdk/cosmos/azure-cosmos/test/test_base_unit.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/base_unit_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_base_unit.py
    diff --git a/sdk/cosmos/azure-cosmos/test/crud_tests.py b/sdk/cosmos/azure-cosmos/test/test_crud.py
    similarity index 99%
    rename from sdk/cosmos/azure-cosmos/test/crud_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_crud.py
    index ebab8b3c9821..d9a650a9dfbf 100644
    --- a/sdk/cosmos/azure-cosmos/test/crud_tests.py
    +++ b/sdk/cosmos/azure-cosmos/test/test_crud.py
    @@ -159,11 +159,11 @@ def test_database_crud(self):
     
             database_proxy = self.client.create_database_if_not_exists(id=database_id, offer_throughput=10000)
             self.assertEqual(database_id, database_proxy.id)
    -        self.assertEquals(10000, database_proxy.read_offer().offer_throughput)
    +        self.assertEqual(10000, database_proxy.read_offer().offer_throughput)
     
             database_proxy = self.client.create_database_if_not_exists(id=database_id, offer_throughput=9000)
             self.assertEqual(database_id, database_proxy.id)
    -        self.assertEquals(10000, database_proxy.read_offer().offer_throughput)
    +        self.assertEqual(10000, database_proxy.read_offer().offer_throughput)
     
             self.client.delete_database(database_id)
     
    @@ -1926,6 +1926,7 @@ def test_create_indexing_policy_with_composite_and_spatial_indexes(self):
                 ]
             }
     
    +        custom_logger = logging.getLogger("CustomLogger")
             created_container = db.create_container(
                 id='composite_index_spatial_index' + str(uuid.uuid4()),
                 indexing_policy=indexing_policy,
    @@ -1933,9 +1934,10 @@ def test_create_indexing_policy_with_composite_and_spatial_indexes(self):
                 headers={"Foo":"bar"},
                 user_agent="blah",
                 user_agent_overwrite=True,
    -            logging_enable=True
    +            logging_enable=True,
    +            logger=custom_logger,
             )
    -        created_properties = created_container.read()
    +        created_properties = created_container.read(logger=custom_logger)
             read_indexing_policy = created_properties['indexingPolicy']
     
             if 'localhost' in self.host or '127.0.0.1' in self.host:  # TODO: Differing result between live and emulator
    diff --git a/sdk/cosmos/azure-cosmos/test/diagnostics_unit_tests.py b/sdk/cosmos/azure-cosmos/test/test_diagnostics.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/diagnostics_unit_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_diagnostics.py
    diff --git a/sdk/cosmos/azure-cosmos/test/encoding_tests.py b/sdk/cosmos/azure-cosmos/test/test_encoding.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/encoding_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_encoding.py
    diff --git a/sdk/cosmos/azure-cosmos/test/env_test.py b/sdk/cosmos/azure-cosmos/test/test_env.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/env_test.py
    rename to sdk/cosmos/azure-cosmos/test/test_env.py
    diff --git a/sdk/cosmos/azure-cosmos/test/globaldb_tests.py b/sdk/cosmos/azure-cosmos/test/test_globaldb.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/globaldb_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_globaldb.py
    diff --git a/sdk/cosmos/azure-cosmos/test/globaldb_mock_tests.py b/sdk/cosmos/azure-cosmos/test/test_globaldb_mock.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/globaldb_mock_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_globaldb_mock.py
    diff --git a/sdk/cosmos/azure-cosmos/test/location_cache_tests.py b/sdk/cosmos/azure-cosmos/test/test_location_cache.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/location_cache_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_location_cache.py
    diff --git a/sdk/cosmos/azure-cosmos/test/media_tests.py b/sdk/cosmos/azure-cosmos/test/test_media.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/media_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_media.py
    diff --git a/sdk/cosmos/azure-cosmos/test/multiOrderbyTests.py b/sdk/cosmos/azure-cosmos/test/test_multi_orderby.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/multiOrderbyTests.py
    rename to sdk/cosmos/azure-cosmos/test/test_multi_orderby.py
    diff --git a/sdk/cosmos/azure-cosmos/test/multimaster_tests.py b/sdk/cosmos/azure-cosmos/test/test_multimaster.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/multimaster_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_multimaster.py
    diff --git a/sdk/cosmos/azure-cosmos/test/orderby_tests.py b/sdk/cosmos/azure-cosmos/test/test_orderby.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/orderby_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_orderby.py
    diff --git a/sdk/cosmos/azure-cosmos/test/partition_key_tests.py b/sdk/cosmos/azure-cosmos/test/test_partition_key.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/partition_key_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_partition_key.py
    diff --git a/sdk/cosmos/azure-cosmos/test/proxy_tests.py b/sdk/cosmos/azure-cosmos/test/test_proxy.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/proxy_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_proxy.py
    diff --git a/sdk/cosmos/azure-cosmos/test/query_tests.py b/sdk/cosmos/azure-cosmos/test/test_query.py
    similarity index 96%
    rename from sdk/cosmos/azure-cosmos/test/query_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_query.py
    index f8b16ed50c43..e9e066c8df50 100644
    --- a/sdk/cosmos/azure-cosmos/test/query_tests.py
    +++ b/sdk/cosmos/azure-cosmos/test/test_query.py
    @@ -251,19 +251,19 @@ def _validate_query_plan(self, query, container_link, top, order_by, aggregate,
             query_plan_dict = self.client.client_connection._GetQueryPlanThroughGateway(query, container_link)
             query_execution_info = _PartitionedQueryExecutionInfo(query_plan_dict)
             self.assertTrue(query_execution_info.has_rewritten_query())
    -        self.assertEquals(query_execution_info.has_distinct_type(), distinct != "None")
    -        self.assertEquals(query_execution_info.get_distinct_type(), distinct)
    -        self.assertEquals(query_execution_info.has_top(), top is not None)
    -        self.assertEquals(query_execution_info.get_top(), top)
    -        self.assertEquals(query_execution_info.has_order_by(), len(order_by) > 0)
    +        self.assertEqual(query_execution_info.has_distinct_type(), distinct != "None")
    +        self.assertEqual(query_execution_info.get_distinct_type(), distinct)
    +        self.assertEqual(query_execution_info.has_top(), top is not None)
    +        self.assertEqual(query_execution_info.get_top(), top)
    +        self.assertEqual(query_execution_info.has_order_by(), len(order_by) > 0)
             self.assertListEqual(query_execution_info.get_order_by(), order_by)
    -        self.assertEquals(query_execution_info.has_aggregates(), len(aggregate) > 0)
    +        self.assertEqual(query_execution_info.has_aggregates(), len(aggregate) > 0)
             self.assertListEqual(query_execution_info.get_aggregates(), aggregate)
    -        self.assertEquals(query_execution_info.has_select_value(), select_value)
    -        self.assertEquals(query_execution_info.has_offset(), offset is not None)
    -        self.assertEquals(query_execution_info.get_offset(), offset)
    -        self.assertEquals(query_execution_info.has_limit(), limit is not None)
    -        self.assertEquals(query_execution_info.get_limit(), limit)
    +        self.assertEqual(query_execution_info.has_select_value(), select_value)
    +        self.assertEqual(query_execution_info.has_offset(), offset is not None)
    +        self.assertEqual(query_execution_info.get_offset(), offset)
    +        self.assertEqual(query_execution_info.has_limit(), limit is not None)
    +        self.assertEqual(query_execution_info.get_limit(), limit)
     
         def test_unsupported_queries(self):
             created_collection = self.config.create_multi_partition_collection_with_custom_pk_if_not_exist(self.client)
    @@ -432,7 +432,7 @@ def _validate_distinct(self, created_collection, query, results, is_select, fiel
             )
             query_results = list(query_iterable)
     
    -        self.assertEquals(len(results), len(query_results))
    +        self.assertEqual(len(results), len(query_results))
             query_results_strings = []
             result_strings = []
             for i in range(len(results)):
    @@ -531,7 +531,7 @@ def _validate_distinct_on_different_types_and_field_orders(self, collection, que
                 elif isinstance(results[i], list):
                     self.assertListEqual(results[i], expected_results[i])
                 else:
    -                self.assertEquals(results[i], expected_results[i])
    +                self.assertEqual(results[i], expected_results[i])
             self.count = 0
     
         def _MockNextFunction(self):
    diff --git a/sdk/cosmos/azure-cosmos/test/query_execution_context_tests.py b/sdk/cosmos/azure-cosmos/test/test_query_execution_context.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/query_execution_context_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_query_execution_context.py
    diff --git a/sdk/cosmos/azure-cosmos/test/retry_policy_tests.py b/sdk/cosmos/azure-cosmos/test/test_retry_policy.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/retry_policy_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_retry_policy.py
    diff --git a/sdk/cosmos/azure-cosmos/test/routing_map_tests.py b/sdk/cosmos/azure-cosmos/test/test_routing_map.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/routing_map_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_routing_map.py
    diff --git a/sdk/cosmos/azure-cosmos/test/session_tests.py b/sdk/cosmos/azure-cosmos/test/test_session.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/session_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_session.py
    diff --git a/sdk/cosmos/azure-cosmos/test/session_container_tests.py b/sdk/cosmos/azure-cosmos/test/test_session_container.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/session_container_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_session_container.py
    diff --git a/sdk/cosmos/azure-cosmos/test/session_token_unit_tests.py b/sdk/cosmos/azure-cosmos/test/test_session_token_unit.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/session_token_unit_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_session_token_unit.py
    diff --git a/sdk/cosmos/azure-cosmos/test/streaming_failover_test.py b/sdk/cosmos/azure-cosmos/test/test_streaming_failover.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/streaming_failover_test.py
    rename to sdk/cosmos/azure-cosmos/test/test_streaming_failover.py
    diff --git a/sdk/cosmos/azure-cosmos/test/ttl_tests.py b/sdk/cosmos/azure-cosmos/test/test_ttl.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/ttl_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_ttl.py
    diff --git a/sdk/cosmos/azure-cosmos/test/utils_tests.py b/sdk/cosmos/azure-cosmos/test/test_utils.py
    similarity index 100%
    rename from sdk/cosmos/azure-cosmos/test/utils_tests.py
    rename to sdk/cosmos/azure-cosmos/test/test_utils.py
    diff --git a/sdk/cosmos/azure-cosmos/tox.ini b/sdk/cosmos/azure-cosmos/tox.ini
    index f914d00bf91c..4de20e13f2b5 100644
    --- a/sdk/cosmos/azure-cosmos/tox.ini
    +++ b/sdk/cosmos/azure-cosmos/tox.ini
    @@ -7,7 +7,7 @@
     envlist = py27, py34
     
     [base]
    -deps = -rtest-requirements.txt
    +deps = pytest, -rdev_requirements.txt
     
     [pytest]
     python_files=test/**.py
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/CHANGELOG.md b/sdk/customproviders/azure-mgmt-customproviders/CHANGELOG.md
    new file mode 100644
    index 000000000000..8550072107cd
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/CHANGELOG.md
    @@ -0,0 +1,5 @@
    +# Release History
    +
    +## 0.1.0 (2020-03-08)
    +
    +* Initial Release
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/MANIFEST.in b/sdk/customproviders/azure-mgmt-customproviders/MANIFEST.in
    new file mode 100644
    index 000000000000..a3cb07df8765
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/MANIFEST.in
    @@ -0,0 +1,5 @@
    +recursive-include tests *.py *.yaml
    +include *.md
    +include azure/__init__.py
    +include azure/mgmt/__init__.py
    +
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/README.md b/sdk/customproviders/azure-mgmt-customproviders/README.md
    new file mode 100644
    index 000000000000..93410f61ef1a
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/README.md
    @@ -0,0 +1,21 @@
    +# Microsoft Azure SDK for Python
    +
    +This is the Microsoft Azure CustomProviders Management Client Library.
    +This package has been tested with Python 2.7, 3.5, 3.6, 3.7 and 3.8.
    +For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/sdk)
    +
    +
    +# Usage
    +
    +For code examples, see [CustomProviders Management](https://docs.microsoft.com/python/api/overview/azure/customproviders)
    +on docs.microsoft.com.
    +
    +
    +# Provide Feedback
    +
    +If you encounter any bugs or have suggestions, please file an issue in the
    +[Issues](https://github.com/Azure/azure-sdk-for-python/issues)
    +section of the project.
    +
    +
    +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-customproviders%2FREADME.png)
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/__init__.py b/sdk/customproviders/azure-mgmt-customproviders/azure/__init__.py
    new file mode 100644
    index 000000000000..0260537a02bb
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/__init__.py
    @@ -0,0 +1 @@
    +__path__ = __import__('pkgutil').extend_path(__path__, __name__)
    \ No newline at end of file
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/__init__.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/__init__.py
    new file mode 100644
    index 000000000000..0260537a02bb
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/__init__.py
    @@ -0,0 +1 @@
    +__path__ = __import__('pkgutil').extend_path(__path__, __name__)
    \ No newline at end of file
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/__init__.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/__init__.py
    new file mode 100644
    index 000000000000..6fa80a79fc84
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/__init__.py
    @@ -0,0 +1,19 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._configuration import CustomProvidersClientConfiguration
    +from ._custom_providers_client import CustomProvidersClient
    +__all__ = ['CustomProvidersClient', 'CustomProvidersClientConfiguration']
    +
    +from .version import VERSION
    +
    +__version__ = VERSION
    +
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/_configuration.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/_configuration.py
    new file mode 100644
    index 000000000000..b7b2545c2f00
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/_configuration.py
    @@ -0,0 +1,49 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +from msrestazure import AzureConfiguration
    +
    +from .version import VERSION
    +
    +
    +class CustomProvidersClientConfiguration(AzureConfiguration):
    +    """Configuration for CustomProvidersClient
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    :param subscription_id: The Azure subscription ID. This is a
    +     GUID-formatted string (e.g. 00000000-0000-0000-0000-000000000000)
    +    :type subscription_id: str
    +    :param str base_url: Service URL
    +    """
    +
    +    def __init__(
    +            self, credentials, subscription_id, base_url=None):
    +
    +        if credentials is None:
    +            raise ValueError("Parameter 'credentials' must not be None.")
    +        if subscription_id is None:
    +            raise ValueError("Parameter 'subscription_id' must not be None.")
    +        if not base_url:
    +            base_url = 'https://management.azure.com'
    +
    +        super(CustomProvidersClientConfiguration, self).__init__(base_url)
    +
    +        # Starting Autorest.Python 4.0.64, make connection pool activated by default
    +        self.keep_alive = True
    +
    +        self.add_user_agent('azure-mgmt-customproviders/{}'.format(VERSION))
    +        self.add_user_agent('Azure-SDK-For-Python')
    +
    +        self.credentials = credentials
    +        self.subscription_id = subscription_id
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/_custom_providers_client.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/_custom_providers_client.py
    new file mode 100644
    index 000000000000..099a8d5e31bb
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/_custom_providers_client.py
    @@ -0,0 +1,60 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.service_client import SDKClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration import CustomProvidersClientConfiguration
    +from .operations import Operations
    +from .operations import CustomResourceProviderOperations
    +from .operations import AssociationsOperations
    +from . import models
    +
    +
    +class CustomProvidersClient(SDKClient):
    +    """Allows extension of ARM control plane with custom resource providers.
    +
    +    :ivar config: Configuration for client.
    +    :vartype config: CustomProvidersClientConfiguration
    +
    +    :ivar operations: Operations operations
    +    :vartype operations: azure.mgmt.customproviders.operations.Operations
    +    :ivar custom_resource_provider: CustomResourceProvider operations
    +    :vartype custom_resource_provider: azure.mgmt.customproviders.operations.CustomResourceProviderOperations
    +    :ivar associations: Associations operations
    +    :vartype associations: azure.mgmt.customproviders.operations.AssociationsOperations
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    :param subscription_id: The Azure subscription ID. This is a
    +     GUID-formatted string (e.g. 00000000-0000-0000-0000-000000000000)
    +    :type subscription_id: str
    +    :param str base_url: Service URL
    +    """
    +
    +    def __init__(
    +            self, credentials, subscription_id, base_url=None):
    +
    +        self.config = CustomProvidersClientConfiguration(credentials, subscription_id, base_url)
    +        super(CustomProvidersClient, self).__init__(self.config.credentials, self.config)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '2018-09-01-preview'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +        self.operations = Operations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.custom_resource_provider = CustomResourceProviderOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.associations = AssociationsOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/__init__.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/__init__.py
    new file mode 100644
    index 000000000000..52df0f549443
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/__init__.py
    @@ -0,0 +1,68 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +try:
    +    from ._models_py3 import Association
    +    from ._models_py3 import CustomRPActionRouteDefinition
    +    from ._models_py3 import CustomRPManifest
    +    from ._models_py3 import CustomRPResourceTypeRouteDefinition
    +    from ._models_py3 import CustomRPRouteDefinition
    +    from ._models_py3 import CustomRPValidations
    +    from ._models_py3 import ErrorDefinition
    +    from ._models_py3 import ErrorResponse, ErrorResponseException
    +    from ._models_py3 import Resource
    +    from ._models_py3 import ResourceProviderOperation
    +    from ._models_py3 import ResourceProviderOperationDisplay
    +    from ._models_py3 import ResourceProvidersUpdate
    +except (SyntaxError, ImportError):
    +    from ._models import Association
    +    from ._models import CustomRPActionRouteDefinition
    +    from ._models import CustomRPManifest
    +    from ._models import CustomRPResourceTypeRouteDefinition
    +    from ._models import CustomRPRouteDefinition
    +    from ._models import CustomRPValidations
    +    from ._models import ErrorDefinition
    +    from ._models import ErrorResponse, ErrorResponseException
    +    from ._models import Resource
    +    from ._models import ResourceProviderOperation
    +    from ._models import ResourceProviderOperationDisplay
    +    from ._models import ResourceProvidersUpdate
    +from ._paged_models import AssociationPaged
    +from ._paged_models import CustomRPManifestPaged
    +from ._paged_models import ResourceProviderOperationPaged
    +from ._custom_providers_client_enums import (
    +    ActionRouting,
    +    ResourceTypeRouting,
    +    ValidationType,
    +    ProvisioningState,
    +)
    +
    +__all__ = [
    +    'Association',
    +    'CustomRPActionRouteDefinition',
    +    'CustomRPManifest',
    +    'CustomRPResourceTypeRouteDefinition',
    +    'CustomRPRouteDefinition',
    +    'CustomRPValidations',
    +    'ErrorDefinition',
    +    'ErrorResponse', 'ErrorResponseException',
    +    'Resource',
    +    'ResourceProviderOperation',
    +    'ResourceProviderOperationDisplay',
    +    'ResourceProvidersUpdate',
    +    'ResourceProviderOperationPaged',
    +    'CustomRPManifestPaged',
    +    'AssociationPaged',
    +    'ActionRouting',
    +    'ResourceTypeRouting',
    +    'ValidationType',
    +    'ProvisioningState',
    +]
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/_custom_providers_client_enums.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/_custom_providers_client_enums.py
    new file mode 100644
    index 000000000000..66c28c30a9a9
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/_custom_providers_client_enums.py
    @@ -0,0 +1,37 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from enum import Enum
    +
    +
    +class ActionRouting(str, Enum):
    +
    +    proxy = "Proxy"
    +
    +
    +class ResourceTypeRouting(str, Enum):
    +
    +    proxy = "Proxy"
    +    proxy_cache = "Proxy,Cache"
    +
    +
    +class ValidationType(str, Enum):
    +
    +    swagger = "Swagger"
    +
    +
    +class ProvisioningState(str, Enum):
    +
    +    accepted = "Accepted"
    +    deleting = "Deleting"
    +    running = "Running"
    +    succeeded = "Succeeded"
    +    failed = "Failed"
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/_models.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/_models.py
    new file mode 100644
    index 000000000000..4f296d9d2ad6
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/_models.py
    @@ -0,0 +1,440 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from msrest.exceptions import HttpOperationError
    +
    +
    +class Association(Model):
    +    """The resource definition of this association.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The association id.
    +    :vartype id: str
    +    :ivar name: The association name.
    +    :vartype name: str
    +    :ivar type: The association type.
    +    :vartype type: str
    +    :param target_resource_id: The REST resource instance of the target
    +     resource for this association.
    +    :type target_resource_id: str
    +    :ivar provisioning_state: The provisioning state of the association.
    +     Possible values include: 'Accepted', 'Deleting', 'Running', 'Succeeded',
    +     'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.customproviders.models.ProvisioningState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'target_resource_id': {'key': 'properties.targetResourceId', 'type': 'str'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Association, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.target_resource_id = kwargs.get('target_resource_id', None)
    +        self.provisioning_state = None
    +
    +
    +class CloudError(Model):
    +    """CloudError.
    +    """
    +
    +    _attribute_map = {
    +    }
    +
    +
    +class CustomRPRouteDefinition(Model):
    +    """A route definition that defines an action or resource that can be
    +    interacted with through the custom resource provider.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the route definition. This becomes the
    +     name for the ARM extension (e.g.
    +     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/{name}')
    +    :type name: str
    +    :param endpoint: Required. The route definition endpoint URI that the
    +     custom resource provider will proxy requests to. This can be in the form
    +     of a flat URI (e.g. 'https://testendpoint/') or can specify to route via a
    +     path (e.g. 'https://testendpoint/{requestPath}')
    +    :type endpoint: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'endpoint': {'required': True, 'pattern': r'^https://.+'},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'endpoint': {'key': 'endpoint', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CustomRPRouteDefinition, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.endpoint = kwargs.get('endpoint', None)
    +
    +
    +class CustomRPActionRouteDefinition(CustomRPRouteDefinition):
    +    """The route definition for an action implemented by the custom resource
    +    provider.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the route definition. This becomes the
    +     name for the ARM extension (e.g.
    +     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/{name}')
    +    :type name: str
    +    :param endpoint: Required. The route definition endpoint URI that the
    +     custom resource provider will proxy requests to. This can be in the form
    +     of a flat URI (e.g. 'https://testendpoint/') or can specify to route via a
    +     path (e.g. 'https://testendpoint/{requestPath}')
    +    :type endpoint: str
    +    :param routing_type: The routing types that are supported for action
    +     requests. Possible values include: 'Proxy'
    +    :type routing_type: str or
    +     ~azure.mgmt.customproviders.models.ActionRouting
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'endpoint': {'required': True, 'pattern': r'^https://.+'},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'endpoint': {'key': 'endpoint', 'type': 'str'},
    +        'routing_type': {'key': 'routingType', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CustomRPActionRouteDefinition, self).__init__(**kwargs)
    +        self.routing_type = kwargs.get('routing_type', None)
    +
    +
    +class Resource(Model):
    +    """The resource definition.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: Resource Id
    +    :vartype id: str
    +    :ivar name: Resource name
    +    :vartype name: str
    +    :ivar type: Resource type
    +    :vartype type: str
    +    :param location: Required. Resource location
    +    :type location: str
    +    :param tags: Resource tags
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.location = kwargs.get('location', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CustomRPManifest(Resource):
    +    """A manifest file that defines the custom resource provider resources.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: Resource Id
    +    :vartype id: str
    +    :ivar name: Resource name
    +    :vartype name: str
    +    :ivar type: Resource type
    +    :vartype type: str
    +    :param location: Required. Resource location
    +    :type location: str
    +    :param tags: Resource tags
    +    :type tags: dict[str, str]
    +    :param actions: A list of actions that the custom resource provider
    +     implements.
    +    :type actions:
    +     list[~azure.mgmt.customproviders.models.CustomRPActionRouteDefinition]
    +    :param resource_types: A list of resource types that the custom resource
    +     provider implements.
    +    :type resource_types:
    +     list[~azure.mgmt.customproviders.models.CustomRPResourceTypeRouteDefinition]
    +    :param validations: A list of validations to run on the custom resource
    +     provider's requests.
    +    :type validations:
    +     list[~azure.mgmt.customproviders.models.CustomRPValidations]
    +    :ivar provisioning_state: The provisioning state of the resource provider.
    +     Possible values include: 'Accepted', 'Deleting', 'Running', 'Succeeded',
    +     'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.customproviders.models.ProvisioningState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'actions': {'key': 'properties.actions', 'type': '[CustomRPActionRouteDefinition]'},
    +        'resource_types': {'key': 'properties.resourceTypes', 'type': '[CustomRPResourceTypeRouteDefinition]'},
    +        'validations': {'key': 'properties.validations', 'type': '[CustomRPValidations]'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CustomRPManifest, self).__init__(**kwargs)
    +        self.actions = kwargs.get('actions', None)
    +        self.resource_types = kwargs.get('resource_types', None)
    +        self.validations = kwargs.get('validations', None)
    +        self.provisioning_state = None
    +
    +
    +class CustomRPResourceTypeRouteDefinition(CustomRPRouteDefinition):
    +    """The route definition for a resource implemented by the custom resource
    +    provider.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the route definition. This becomes the
    +     name for the ARM extension (e.g.
    +     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/{name}')
    +    :type name: str
    +    :param endpoint: Required. The route definition endpoint URI that the
    +     custom resource provider will proxy requests to. This can be in the form
    +     of a flat URI (e.g. 'https://testendpoint/') or can specify to route via a
    +     path (e.g. 'https://testendpoint/{requestPath}')
    +    :type endpoint: str
    +    :param routing_type: The routing types that are supported for resource
    +     requests. Possible values include: 'Proxy', 'Proxy,Cache'
    +    :type routing_type: str or
    +     ~azure.mgmt.customproviders.models.ResourceTypeRouting
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'endpoint': {'required': True, 'pattern': r'^https://.+'},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'endpoint': {'key': 'endpoint', 'type': 'str'},
    +        'routing_type': {'key': 'routingType', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CustomRPResourceTypeRouteDefinition, self).__init__(**kwargs)
    +        self.routing_type = kwargs.get('routing_type', None)
    +
    +
    +class CustomRPValidations(Model):
    +    """A validation to apply on custom resource provider requests.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param validation_type: The type of validation to run against a matching
    +     request. Possible values include: 'Swagger'
    +    :type validation_type: str or
    +     ~azure.mgmt.customproviders.models.ValidationType
    +    :param specification: Required. A link to the validation specification.
    +     The specification must be hosted on raw.githubusercontent.com.
    +    :type specification: str
    +    """
    +
    +    _validation = {
    +        'specification': {'required': True, 'pattern': r'^https://raw.githubusercontent.com/.+'},
    +    }
    +
    +    _attribute_map = {
    +        'validation_type': {'key': 'validationType', 'type': 'str'},
    +        'specification': {'key': 'specification', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CustomRPValidations, self).__init__(**kwargs)
    +        self.validation_type = kwargs.get('validation_type', None)
    +        self.specification = kwargs.get('specification', None)
    +
    +
    +class ErrorDefinition(Model):
    +    """Error definition.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: Service specific error code which serves as the substatus for
    +     the HTTP error code.
    +    :vartype code: str
    +    :ivar message: Description of the error.
    +    :vartype message: str
    +    :ivar details: Internal error details.
    +    :vartype details: list[~azure.mgmt.customproviders.models.ErrorDefinition]
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'details': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'details': {'key': 'details', 'type': '[ErrorDefinition]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ErrorDefinition, self).__init__(**kwargs)
    +        self.code = None
    +        self.message = None
    +        self.details = None
    +
    +
    +class ErrorResponse(Model):
    +    """Error response.
    +
    +    :param error: The error details.
    +    :type error: ~azure.mgmt.customproviders.models.ErrorDefinition
    +    """
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'ErrorDefinition'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ErrorResponse, self).__init__(**kwargs)
    +        self.error = kwargs.get('error', None)
    +
    +
    +class ErrorResponseException(HttpOperationError):
    +    """Server responsed with exception of type: 'ErrorResponse'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, deserialize, response, *args):
    +
    +        super(ErrorResponseException, self).__init__(deserialize, response, 'ErrorResponse', *args)
    +
    +
    +class ResourceProviderOperation(Model):
    +    """Supported operations of this resource provider.
    +
    +    :param name: Operation name, in format of
    +     {provider}/{resource}/{operation}
    +    :type name: str
    +    :param display: Display metadata associated with the operation.
    +    :type display:
    +     ~azure.mgmt.customproviders.models.ResourceProviderOperationDisplay
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'display': {'key': 'display', 'type': 'ResourceProviderOperationDisplay'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ResourceProviderOperation, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.display = kwargs.get('display', None)
    +
    +
    +class ResourceProviderOperationDisplay(Model):
    +    """Display metadata associated with the operation.
    +
    +    :param provider: Resource provider: Microsoft Custom Providers.
    +    :type provider: str
    +    :param resource: Resource on which the operation is performed.
    +    :type resource: str
    +    :param operation: Type of operation: get, read, delete, etc.
    +    :type operation: str
    +    :param description: Description of this operation.
    +    :type description: str
    +    """
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'resource': {'key': 'resource', 'type': 'str'},
    +        'operation': {'key': 'operation', 'type': 'str'},
    +        'description': {'key': 'description', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ResourceProviderOperationDisplay, self).__init__(**kwargs)
    +        self.provider = kwargs.get('provider', None)
    +        self.resource = kwargs.get('resource', None)
    +        self.operation = kwargs.get('operation', None)
    +        self.description = kwargs.get('description', None)
    +
    +
    +class ResourceProvidersUpdate(Model):
    +    """custom resource provider update information.
    +
    +    :param tags: Resource tags
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ResourceProvidersUpdate, self).__init__(**kwargs)
    +        self.tags = kwargs.get('tags', None)
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/_models_py3.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/_models_py3.py
    new file mode 100644
    index 000000000000..08049a74bcc8
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/_models_py3.py
    @@ -0,0 +1,440 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from msrest.exceptions import HttpOperationError
    +
    +
    +class Association(Model):
    +    """The resource definition of this association.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The association id.
    +    :vartype id: str
    +    :ivar name: The association name.
    +    :vartype name: str
    +    :ivar type: The association type.
    +    :vartype type: str
    +    :param target_resource_id: The REST resource instance of the target
    +     resource for this association.
    +    :type target_resource_id: str
    +    :ivar provisioning_state: The provisioning state of the association.
    +     Possible values include: 'Accepted', 'Deleting', 'Running', 'Succeeded',
    +     'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.customproviders.models.ProvisioningState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'target_resource_id': {'key': 'properties.targetResourceId', 'type': 'str'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, target_resource_id: str=None, **kwargs) -> None:
    +        super(Association, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.target_resource_id = target_resource_id
    +        self.provisioning_state = None
    +
    +
    +class CloudError(Model):
    +    """CloudError.
    +    """
    +
    +    _attribute_map = {
    +    }
    +
    +
    +class CustomRPRouteDefinition(Model):
    +    """A route definition that defines an action or resource that can be
    +    interacted with through the custom resource provider.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the route definition. This becomes the
    +     name for the ARM extension (e.g.
    +     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/{name}')
    +    :type name: str
    +    :param endpoint: Required. The route definition endpoint URI that the
    +     custom resource provider will proxy requests to. This can be in the form
    +     of a flat URI (e.g. 'https://testendpoint/') or can specify to route via a
    +     path (e.g. 'https://testendpoint/{requestPath}')
    +    :type endpoint: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'endpoint': {'required': True, 'pattern': r'^https://.+'},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'endpoint': {'key': 'endpoint', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, name: str, endpoint: str, **kwargs) -> None:
    +        super(CustomRPRouteDefinition, self).__init__(**kwargs)
    +        self.name = name
    +        self.endpoint = endpoint
    +
    +
    +class CustomRPActionRouteDefinition(CustomRPRouteDefinition):
    +    """The route definition for an action implemented by the custom resource
    +    provider.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the route definition. This becomes the
    +     name for the ARM extension (e.g.
    +     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/{name}')
    +    :type name: str
    +    :param endpoint: Required. The route definition endpoint URI that the
    +     custom resource provider will proxy requests to. This can be in the form
    +     of a flat URI (e.g. 'https://testendpoint/') or can specify to route via a
    +     path (e.g. 'https://testendpoint/{requestPath}')
    +    :type endpoint: str
    +    :param routing_type: The routing types that are supported for action
    +     requests. Possible values include: 'Proxy'
    +    :type routing_type: str or
    +     ~azure.mgmt.customproviders.models.ActionRouting
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'endpoint': {'required': True, 'pattern': r'^https://.+'},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'endpoint': {'key': 'endpoint', 'type': 'str'},
    +        'routing_type': {'key': 'routingType', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, name: str, endpoint: str, routing_type=None, **kwargs) -> None:
    +        super(CustomRPActionRouteDefinition, self).__init__(name=name, endpoint=endpoint, **kwargs)
    +        self.routing_type = routing_type
    +
    +
    +class Resource(Model):
    +    """The resource definition.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: Resource Id
    +    :vartype id: str
    +    :ivar name: Resource name
    +    :vartype name: str
    +    :ivar type: Resource type
    +    :vartype type: str
    +    :param location: Required. Resource location
    +    :type location: str
    +    :param tags: Resource tags
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, location: str, tags=None, **kwargs) -> None:
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.location = location
    +        self.tags = tags
    +
    +
    +class CustomRPManifest(Resource):
    +    """A manifest file that defines the custom resource provider resources.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: Resource Id
    +    :vartype id: str
    +    :ivar name: Resource name
    +    :vartype name: str
    +    :ivar type: Resource type
    +    :vartype type: str
    +    :param location: Required. Resource location
    +    :type location: str
    +    :param tags: Resource tags
    +    :type tags: dict[str, str]
    +    :param actions: A list of actions that the custom resource provider
    +     implements.
    +    :type actions:
    +     list[~azure.mgmt.customproviders.models.CustomRPActionRouteDefinition]
    +    :param resource_types: A list of resource types that the custom resource
    +     provider implements.
    +    :type resource_types:
    +     list[~azure.mgmt.customproviders.models.CustomRPResourceTypeRouteDefinition]
    +    :param validations: A list of validations to run on the custom resource
    +     provider's requests.
    +    :type validations:
    +     list[~azure.mgmt.customproviders.models.CustomRPValidations]
    +    :ivar provisioning_state: The provisioning state of the resource provider.
    +     Possible values include: 'Accepted', 'Deleting', 'Running', 'Succeeded',
    +     'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.customproviders.models.ProvisioningState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'actions': {'key': 'properties.actions', 'type': '[CustomRPActionRouteDefinition]'},
    +        'resource_types': {'key': 'properties.resourceTypes', 'type': '[CustomRPResourceTypeRouteDefinition]'},
    +        'validations': {'key': 'properties.validations', 'type': '[CustomRPValidations]'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, location: str, tags=None, actions=None, resource_types=None, validations=None, **kwargs) -> None:
    +        super(CustomRPManifest, self).__init__(location=location, tags=tags, **kwargs)
    +        self.actions = actions
    +        self.resource_types = resource_types
    +        self.validations = validations
    +        self.provisioning_state = None
    +
    +
    +class CustomRPResourceTypeRouteDefinition(CustomRPRouteDefinition):
    +    """The route definition for a resource implemented by the custom resource
    +    provider.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the route definition. This becomes the
    +     name for the ARM extension (e.g.
    +     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/{name}')
    +    :type name: str
    +    :param endpoint: Required. The route definition endpoint URI that the
    +     custom resource provider will proxy requests to. This can be in the form
    +     of a flat URI (e.g. 'https://testendpoint/') or can specify to route via a
    +     path (e.g. 'https://testendpoint/{requestPath}')
    +    :type endpoint: str
    +    :param routing_type: The routing types that are supported for resource
    +     requests. Possible values include: 'Proxy', 'Proxy,Cache'
    +    :type routing_type: str or
    +     ~azure.mgmt.customproviders.models.ResourceTypeRouting
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'endpoint': {'required': True, 'pattern': r'^https://.+'},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'endpoint': {'key': 'endpoint', 'type': 'str'},
    +        'routing_type': {'key': 'routingType', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, name: str, endpoint: str, routing_type=None, **kwargs) -> None:
    +        super(CustomRPResourceTypeRouteDefinition, self).__init__(name=name, endpoint=endpoint, **kwargs)
    +        self.routing_type = routing_type
    +
    +
    +class CustomRPValidations(Model):
    +    """A validation to apply on custom resource provider requests.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param validation_type: The type of validation to run against a matching
    +     request. Possible values include: 'Swagger'
    +    :type validation_type: str or
    +     ~azure.mgmt.customproviders.models.ValidationType
    +    :param specification: Required. A link to the validation specification.
    +     The specification must be hosted on raw.githubusercontent.com.
    +    :type specification: str
    +    """
    +
    +    _validation = {
    +        'specification': {'required': True, 'pattern': r'^https://raw.githubusercontent.com/.+'},
    +    }
    +
    +    _attribute_map = {
    +        'validation_type': {'key': 'validationType', 'type': 'str'},
    +        'specification': {'key': 'specification', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, specification: str, validation_type=None, **kwargs) -> None:
    +        super(CustomRPValidations, self).__init__(**kwargs)
    +        self.validation_type = validation_type
    +        self.specification = specification
    +
    +
    +class ErrorDefinition(Model):
    +    """Error definition.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: Service specific error code which serves as the substatus for
    +     the HTTP error code.
    +    :vartype code: str
    +    :ivar message: Description of the error.
    +    :vartype message: str
    +    :ivar details: Internal error details.
    +    :vartype details: list[~azure.mgmt.customproviders.models.ErrorDefinition]
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'details': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'details': {'key': 'details', 'type': '[ErrorDefinition]'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(ErrorDefinition, self).__init__(**kwargs)
    +        self.code = None
    +        self.message = None
    +        self.details = None
    +
    +
    +class ErrorResponse(Model):
    +    """Error response.
    +
    +    :param error: The error details.
    +    :type error: ~azure.mgmt.customproviders.models.ErrorDefinition
    +    """
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'ErrorDefinition'},
    +    }
    +
    +    def __init__(self, *, error=None, **kwargs) -> None:
    +        super(ErrorResponse, self).__init__(**kwargs)
    +        self.error = error
    +
    +
    +class ErrorResponseException(HttpOperationError):
    +    """Server responsed with exception of type: 'ErrorResponse'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, deserialize, response, *args):
    +
    +        super(ErrorResponseException, self).__init__(deserialize, response, 'ErrorResponse', *args)
    +
    +
    +class ResourceProviderOperation(Model):
    +    """Supported operations of this resource provider.
    +
    +    :param name: Operation name, in format of
    +     {provider}/{resource}/{operation}
    +    :type name: str
    +    :param display: Display metadata associated with the operation.
    +    :type display:
    +     ~azure.mgmt.customproviders.models.ResourceProviderOperationDisplay
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'display': {'key': 'display', 'type': 'ResourceProviderOperationDisplay'},
    +    }
    +
    +    def __init__(self, *, name: str=None, display=None, **kwargs) -> None:
    +        super(ResourceProviderOperation, self).__init__(**kwargs)
    +        self.name = name
    +        self.display = display
    +
    +
    +class ResourceProviderOperationDisplay(Model):
    +    """Display metadata associated with the operation.
    +
    +    :param provider: Resource provider: Microsoft Custom Providers.
    +    :type provider: str
    +    :param resource: Resource on which the operation is performed.
    +    :type resource: str
    +    :param operation: Type of operation: get, read, delete, etc.
    +    :type operation: str
    +    :param description: Description of this operation.
    +    :type description: str
    +    """
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'resource': {'key': 'resource', 'type': 'str'},
    +        'operation': {'key': 'operation', 'type': 'str'},
    +        'description': {'key': 'description', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, provider: str=None, resource: str=None, operation: str=None, description: str=None, **kwargs) -> None:
    +        super(ResourceProviderOperationDisplay, self).__init__(**kwargs)
    +        self.provider = provider
    +        self.resource = resource
    +        self.operation = operation
    +        self.description = description
    +
    +
    +class ResourceProvidersUpdate(Model):
    +    """custom resource provider update information.
    +
    +    :param tags: Resource tags
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, tags=None, **kwargs) -> None:
    +        super(ResourceProvidersUpdate, self).__init__(**kwargs)
    +        self.tags = tags
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/_paged_models.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/_paged_models.py
    new file mode 100644
    index 000000000000..7928b4d67e2c
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/models/_paged_models.py
    @@ -0,0 +1,53 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.paging import Paged
    +
    +
    +class ResourceProviderOperationPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`ResourceProviderOperation ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[ResourceProviderOperation]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(ResourceProviderOperationPaged, self).__init__(*args, **kwargs)
    +class CustomRPManifestPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`CustomRPManifest ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[CustomRPManifest]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(CustomRPManifestPaged, self).__init__(*args, **kwargs)
    +class AssociationPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`Association ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[Association]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(AssociationPaged, self).__init__(*args, **kwargs)
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/operations/__init__.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/operations/__init__.py
    new file mode 100644
    index 000000000000..fa463a41f90d
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/operations/__init__.py
    @@ -0,0 +1,20 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._operations import Operations
    +from ._custom_resource_provider_operations import CustomResourceProviderOperations
    +from ._associations_operations import AssociationsOperations
    +
    +__all__ = [
    +    'Operations',
    +    'CustomResourceProviderOperations',
    +    'AssociationsOperations',
    +]
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/operations/_associations_operations.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/operations/_associations_operations.py
    new file mode 100644
    index 000000000000..072810c650d6
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/operations/_associations_operations.py
    @@ -0,0 +1,350 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class AssociationsOperations(object):
    +    """AssociationsOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The API version to be used with the HTTP request. Constant value: "2018-09-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2018-09-01-preview"
    +
    +        self.config = config
    +
    +
    +    def _create_or_update_initial(
    +            self, scope, association_name, target_resource_id=None, custom_headers=None, raw=False, **operation_config):
    +        association = models.Association(target_resource_id=target_resource_id)
    +
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'scope': self._serialize.url("scope", scope, 'str', skip_quote=True),
    +            'associationName': self._serialize.url("association_name", association_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(association, 'Association')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            raise models.ErrorResponseException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Association', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('Association', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def create_or_update(
    +            self, scope, association_name, target_resource_id=None, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Create or update an association.
    +
    +        :param scope: The scope of the association. The scope can be any valid
    +         REST resource instance. For example, use
    +         '/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Compute/virtualMachines/{vm-name}'
    +         for a virtual machine resource.
    +        :type scope: str
    +        :param association_name: The name of the association.
    +        :type association_name: str
    +        :param target_resource_id: The REST resource instance of the target
    +         resource for this association.
    +        :type target_resource_id: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns Association or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.customproviders.models.Association]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.customproviders.models.Association]]
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        raw_result = self._create_or_update_initial(
    +            scope=scope,
    +            association_name=association_name,
    +            target_resource_id=target_resource_id,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('Association', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    create_or_update.metadata = {'url': '/{scope}/providers/Microsoft.CustomProviders/associations/{associationName}'}
    +
    +
    +    def _delete_initial(
    +            self, scope, association_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'scope': self._serialize.url("scope", scope, 'str', skip_quote=True),
    +            'associationName': self._serialize.url("association_name", association_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202, 204]:
    +            raise models.ErrorResponseException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +
    +    def delete(
    +            self, scope, association_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Delete an association.
    +
    +        :param scope: The scope of the association.
    +        :type scope: str
    +        :param association_name: The name of the association.
    +        :type association_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns None or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        raw_result = self._delete_initial(
    +            scope=scope,
    +            association_name=association_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            if raw:
    +                client_raw_response = ClientRawResponse(None, response)
    +                return client_raw_response
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    delete.metadata = {'url': '/{scope}/providers/Microsoft.CustomProviders/associations/{associationName}'}
    +
    +    def get(
    +            self, scope, association_name, custom_headers=None, raw=False, **operation_config):
    +        """Get an association.
    +
    +        :param scope: The scope of the association.
    +        :type scope: str
    +        :param association_name: The name of the association.
    +        :type association_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: Association or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.customproviders.models.Association or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'scope': self._serialize.url("scope", scope, 'str', skip_quote=True),
    +            'associationName': self._serialize.url("association_name", association_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorResponseException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Association', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/{scope}/providers/Microsoft.CustomProviders/associations/{associationName}'}
    +
    +    def list_all(
    +            self, scope, custom_headers=None, raw=False, **operation_config):
    +        """Gets all association for the given scope.
    +
    +        :param scope: The scope of the association.
    +        :type scope: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of Association
    +        :rtype:
    +         ~azure.mgmt.customproviders.models.AssociationPaged[~azure.mgmt.customproviders.models.Association]
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_all.metadata['url']
    +                path_format_arguments = {
    +                    'scope': self._serialize.url("scope", scope, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorResponseException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.AssociationPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_all.metadata = {'url': '/{scope}/providers/Microsoft.CustomProviders/associations'}
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/operations/_custom_resource_provider_operations.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/operations/_custom_resource_provider_operations.py
    new file mode 100644
    index 000000000000..5eeee033cc1d
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/operations/_custom_resource_provider_operations.py
    @@ -0,0 +1,484 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class CustomResourceProviderOperations(object):
    +    """CustomResourceProviderOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The API version to be used with the HTTP request. Constant value: "2018-09-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2018-09-01-preview"
    +
    +        self.config = config
    +
    +
    +    def _create_or_update_initial(
    +            self, resource_group_name, resource_provider_name, resource_provider, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceProviderName': self._serialize.url("resource_provider_name", resource_provider_name, 'str', max_length=64, min_length=3)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(resource_provider, 'CustomRPManifest')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            raise models.ErrorResponseException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CustomRPManifest', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('CustomRPManifest', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def create_or_update(
    +            self, resource_group_name, resource_provider_name, resource_provider, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Creates or updates the custom resource provider.
    +
    +        :param resource_group_name: The name of the resource group.
    +        :type resource_group_name: str
    +        :param resource_provider_name: The name of the resource provider.
    +        :type resource_provider_name: str
    +        :param resource_provider: The parameters required to create or update
    +         a custom resource provider definition.
    +        :type resource_provider:
    +         ~azure.mgmt.customproviders.models.CustomRPManifest
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns CustomRPManifest or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.customproviders.models.CustomRPManifest]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.customproviders.models.CustomRPManifest]]
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        raw_result = self._create_or_update_initial(
    +            resource_group_name=resource_group_name,
    +            resource_provider_name=resource_provider_name,
    +            resource_provider=resource_provider,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('CustomRPManifest', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}'}
    +
    +
    +    def _delete_initial(
    +            self, resource_group_name, resource_provider_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceProviderName': self._serialize.url("resource_provider_name", resource_provider_name, 'str', max_length=64, min_length=3)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202, 204]:
    +            raise models.ErrorResponseException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +
    +    def delete(
    +            self, resource_group_name, resource_provider_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Deletes the custom resource provider.
    +
    +        :param resource_group_name: The name of the resource group.
    +        :type resource_group_name: str
    +        :param resource_provider_name: The name of the resource provider.
    +        :type resource_provider_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns None or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        raw_result = self._delete_initial(
    +            resource_group_name=resource_group_name,
    +            resource_provider_name=resource_provider_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            if raw:
    +                client_raw_response = ClientRawResponse(None, response)
    +                return client_raw_response
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}'}
    +
    +    def get(
    +            self, resource_group_name, resource_provider_name, custom_headers=None, raw=False, **operation_config):
    +        """Gets the custom resource provider manifest.
    +
    +        :param resource_group_name: The name of the resource group.
    +        :type resource_group_name: str
    +        :param resource_provider_name: The name of the resource provider.
    +        :type resource_provider_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CustomRPManifest or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.customproviders.models.CustomRPManifest or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceProviderName': self._serialize.url("resource_provider_name", resource_provider_name, 'str', max_length=64, min_length=3)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorResponseException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CustomRPManifest', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}'}
    +
    +    def update(
    +            self, resource_group_name, resource_provider_name, tags=None, custom_headers=None, raw=False, **operation_config):
    +        """Updates an existing custom resource provider. The only value that can
    +        be updated via PATCH currently is the tags.
    +
    +        :param resource_group_name: The name of the resource group.
    +        :type resource_group_name: str
    +        :param resource_provider_name: The name of the resource provider.
    +        :type resource_provider_name: str
    +        :param tags: Resource tags
    +        :type tags: dict[str, str]
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CustomRPManifest or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.customproviders.models.CustomRPManifest or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        patchable_resource = models.ResourceProvidersUpdate(tags=tags)
    +
    +        # Construct URL
    +        url = self.update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceProviderName': self._serialize.url("resource_provider_name", resource_provider_name, 'str', max_length=64, min_length=3)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(patchable_resource, 'ResourceProvidersUpdate')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorResponseException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CustomRPManifest', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}'}
    +
    +    def list_by_resource_group(
    +            self, resource_group_name, custom_headers=None, raw=False, **operation_config):
    +        """Gets all the custom resource providers within a resource group.
    +
    +        :param resource_group_name: The name of the resource group.
    +        :type resource_group_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of CustomRPManifest
    +        :rtype:
    +         ~azure.mgmt.customproviders.models.CustomRPManifestPaged[~azure.mgmt.customproviders.models.CustomRPManifest]
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_resource_group.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorResponseException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.CustomRPManifestPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders'}
    +
    +    def list_by_subscription(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """Gets all the custom resource providers within a subscription.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of CustomRPManifest
    +        :rtype:
    +         ~azure.mgmt.customproviders.models.CustomRPManifestPaged[~azure.mgmt.customproviders.models.CustomRPManifest]
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_subscription.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorResponseException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.CustomRPManifestPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.CustomProviders/resourceProviders'}
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/operations/_operations.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/operations/_operations.py
    new file mode 100644
    index 000000000000..3e58a7db5974
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/operations/_operations.py
    @@ -0,0 +1,100 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +
    +from .. import models
    +
    +
    +class Operations(object):
    +    """Operations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The API version to be used with the HTTP request. Constant value: "2018-09-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2018-09-01-preview"
    +
    +        self.config = config
    +
    +    def list(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """The list of operations provided by Microsoft CustomProviders.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of ResourceProviderOperation
    +        :rtype:
    +         ~azure.mgmt.customproviders.models.ResourceProviderOperationPaged[~azure.mgmt.customproviders.models.ResourceProviderOperation]
    +        :raises:
    +         :class:`ErrorResponseException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list.metadata['url']
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorResponseException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.ResourceProviderOperationPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list.metadata = {'url': '/providers/Microsoft.CustomProviders/operations'}
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/version.py b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/version.py
    new file mode 100644
    index 000000000000..e0ec669828cb
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/azure/mgmt/customproviders/version.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "0.1.0"
    +
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/sdk_packaging.toml b/sdk/customproviders/azure-mgmt-customproviders/sdk_packaging.toml
    new file mode 100644
    index 000000000000..df86d19a7854
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/sdk_packaging.toml
    @@ -0,0 +1,5 @@
    +[packaging]
    +package_name = "azure-mgmt-customproviders"
    +package_pprint_name = "CustomProviders Management"
    +package_doc_id = "customproviders"
    +is_stable = false
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/setup.cfg b/sdk/customproviders/azure-mgmt-customproviders/setup.cfg
    new file mode 100644
    index 000000000000..3c6e79cf31da
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/setup.cfg
    @@ -0,0 +1,2 @@
    +[bdist_wheel]
    +universal=1
    diff --git a/sdk/customproviders/azure-mgmt-customproviders/setup.py b/sdk/customproviders/azure-mgmt-customproviders/setup.py
    new file mode 100644
    index 000000000000..7217d3b54642
    --- /dev/null
    +++ b/sdk/customproviders/azure-mgmt-customproviders/setup.py
    @@ -0,0 +1,88 @@
    +#!/usr/bin/env python
    +
    +#-------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#--------------------------------------------------------------------------
    +
    +import re
    +import os.path
    +from io import open
    +from setuptools import find_packages, setup
    +
    +# Change the PACKAGE_NAME only to change folder and different name
    +PACKAGE_NAME = "azure-mgmt-customproviders"
    +PACKAGE_PPRINT_NAME = "CustomProviders Management"
    +
    +# a-b-c => a/b/c
    +package_folder_path = PACKAGE_NAME.replace('-', '/')
    +# a-b-c => a.b.c
    +namespace_name = PACKAGE_NAME.replace('-', '.')
    +
    +# azure v0.x is not compatible with this package
    +# azure v0.x used to have a __version__ attribute (newer versions don't)
    +try:
    +    import azure
    +    try:
    +        ver = azure.__version__
    +        raise Exception(
    +            'This package is incompatible with azure=={}. '.format(ver) +
    +            'Uninstall it with "pip uninstall azure".'
    +        )
    +    except AttributeError:
    +        pass
    +except ImportError:
    +    pass
    +
    +# Version extraction inspired from 'requests'
    +with open(os.path.join(package_folder_path, 'version.py'), 'r') as fd:
    +    version = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]',
    +                        fd.read(), re.MULTILINE).group(1)
    +
    +if not version:
    +    raise RuntimeError('Cannot find version information')
    +
    +with open('README.md', encoding='utf-8') as f:
    +    readme = f.read()
    +with open('CHANGELOG.md', encoding='utf-8') as f:
    +    changelog = f.read()
    +
    +setup(
    +    name=PACKAGE_NAME,
    +    version=version,
    +    description='Microsoft Azure {} Client Library for Python'.format(PACKAGE_PPRINT_NAME),
    +    long_description=readme + '\n\n' + changelog,
    +    long_description_content_type='text/markdown',
    +    license='MIT License',
    +    author='Microsoft Corporation',
    +    author_email='azpysdkhelp@microsoft.com',
    +    url='https://github.com/Azure/azure-sdk-for-python',
    +    classifiers=[
    +        'Development Status :: 4 - Beta',
    +        'Programming Language :: Python',
    +        'Programming Language :: Python :: 2',
    +        'Programming Language :: Python :: 2.7',
    +        'Programming Language :: Python :: 3',
    +        'Programming Language :: Python :: 3.5',
    +        'Programming Language :: Python :: 3.6',
    +        'Programming Language :: Python :: 3.7',
    +        'Programming Language :: Python :: 3.8',
    +        'License :: OSI Approved :: MIT License',
    +    ],
    +    zip_safe=False,
    +    packages=find_packages(exclude=[
    +        'tests',
    +        # Exclude packages that will be covered by PEP420 or nspkg
    +        'azure',
    +        'azure.mgmt',
    +    ]),
    +    install_requires=[
    +        'msrest>=0.5.0',
    +        'msrestazure>=0.4.32,<2.0.0',
    +        'azure-common~=1.1',
    +    ],
    +    extras_require={
    +        ":python_version<'3.0'": ['azure-mgmt-nspkg'],
    +    }
    +)
    diff --git a/sdk/customproviders/ci.yml b/sdk/customproviders/ci.yml
    new file mode 100644
    index 000000000000..2a44c5910086
    --- /dev/null
    +++ b/sdk/customproviders/ci.yml
    @@ -0,0 +1,44 @@
    +# DO NOT EDIT THIS FILE
    +# This file is generated automatically and any changes will be lost.
    +
    +resources:
    +  repositories:
    +    - repository: azure-sdk-tools
    +      type: github
    +      name: Azure/azure-sdk-tools
    +      endpoint: azure
    +    - repository: azure-sdk-build-tools
    +      type: git
    +      name: internal/azure-sdk-build-tools
    +
    +trigger:
    +  branches:
    +    include:
    +    - master
    +    - hotfix/*
    +    - release/*
    +    - restapi*
    +  paths:
    +    include:
    +    - sdk/customproviders/
    +
    +pr:
    +  branches:
    +    include:
    +    - master
    +    - feature/*
    +    - hotfix/*
    +    - release/*
    +    - restapi*
    +  paths:
    +    include:
    +    - sdk/customproviders/
    +
    +
    +stages:
    +- template: ../../eng/pipelines/templates/stages/archetype-sdk-client.yml
    +  parameters:
    +    ServiceDirectory: customproviders
    +    Artifacts:
    +    - name: azure_mgmt_customproviders
    +      safeName: azuremgmtcustomproviders
    diff --git a/sdk/customproviders/dev_requirements.txt b/sdk/customproviders/dev_requirements.txt
    new file mode 100644
    index 000000000000..6ccb7f031ddd
    --- /dev/null
    +++ b/sdk/customproviders/dev_requirements.txt
    @@ -0,0 +1 @@
    +-e ../../../tools/azure-sdk-tools
    diff --git a/sdk/databox/azure-mgmt-databox/tests/recordings/test_cli_mgmt_databox.test_databox.yaml b/sdk/databox/azure-mgmt-databox/tests/recordings/test_cli_mgmt_databox.test_databox.yaml
    index 331c55ed1e18..dbb45e02fb18 100644
    --- a/sdk/databox/azure-mgmt-databox/tests/recordings/test_cli_mgmt_databox.test_databox.yaml
    +++ b/sdk/databox/azure-mgmt-databox/tests/recordings/test_cli_mgmt_databox.test_databox.yaml
    @@ -21,11 +21,11 @@ interactions:
           - application/json; charset=utf-8
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
           accept-language:
           - en-US
         method: PUT
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2019-09-01
       response:
         body:
           string: ''
    @@ -35,11 +35,11 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:14:09 GMT
    +      - Thu, 13 Feb 2020 06:44:28 GMT
           expires:
           - '-1'
           location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e?api-version=2018-01-01
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af?api-version=2018-01-01
           pragma:
           - no-cache
           strict-transport-security:
    @@ -47,7 +47,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-ratelimit-remaining-subscription-writes:
    -      - '1194'
    +      - '1196'
           x-powered-by:
           - ASP.NET
         status:
    @@ -64,9 +64,9 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af?api-version=2018-01-01
       response:
         body:
           string: ''
    @@ -76,7 +76,7 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:14:22 GMT
    +      - Thu, 13 Feb 2020 06:44:40 GMT
           expires:
           - '-1'
           location:
    @@ -103,7 +103,7 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
         uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2018-01-01
       response:
    @@ -111,7 +111,7 @@ interactions:
           string: "{\r\n  \"properties\": {\r\n    \"isCancellable\": true,\r\n    \"\
             isDeletable\": false,\r\n    \"isShippingAddressEditable\": true,\r\n    \"\
             isPrepareToShipEnabled\": false,\r\n    \"status\": \"DeviceOrdered\",\r\n\
    -        \    \"startTime\": \"2020-02-09T05:14:10.4071426+00:00\",\r\n    \"deliveryType\"\
    +        \    \"startTime\": \"2020-02-13T06:44:28.00637+00:00\",\r\n    \"deliveryType\"\
             : \"NonScheduled\",\r\n    \"deliveryInfo\": {\r\n      \"scheduledDateTime\"\
             : \"0001-01-01T00:00:00+00:00\"\r\n    },\r\n    \"isCancellableWithoutFee\"\
             : true\r\n  },\r\n  \"location\": \"westus\",\r\n  \"tags\": {},\r\n  \"sku\"\
    @@ -122,11 +122,11 @@ interactions:
           cache-control:
           - no-cache
           content-length:
    -      - '712'
    +      - '710'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sun, 09 Feb 2020 05:14:32 GMT
    +      - Thu, 13 Feb 2020 06:44:50 GMT
           expires:
           - '-1'
           pragma:
    @@ -155,17 +155,17 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
           accept-language:
           - en-US
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2019-09-01
       response:
         body:
           string: "{\r\n  \"properties\": {\r\n    \"isCancellable\": true,\r\n    \"\
             isDeletable\": false,\r\n    \"isShippingAddressEditable\": true,\r\n    \"\
             isPrepareToShipEnabled\": false,\r\n    \"status\": \"DeviceOrdered\",\r\n\
    -        \    \"startTime\": \"2020-02-09T05:14:10.4071426+00:00\",\r\n    \"deliveryType\"\
    +        \    \"startTime\": \"2020-02-13T06:44:28.00637+00:00\",\r\n    \"deliveryType\"\
             : \"NonScheduled\",\r\n    \"deliveryInfo\": {\r\n      \"scheduledDateTime\"\
             : \"0001-01-01T00:00:00+00:00\"\r\n    },\r\n    \"isCancellableWithoutFee\"\
             : true\r\n  },\r\n  \"location\": \"westus\",\r\n  \"tags\": {},\r\n  \"sku\"\
    @@ -176,11 +176,11 @@ interactions:
           cache-control:
           - no-cache
           content-length:
    -      - '712'
    +      - '710'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sun, 09 Feb 2020 05:14:32 GMT
    +      - Thu, 13 Feb 2020 06:44:50 GMT
           expires:
           - '-1'
           pragma:
    @@ -209,17 +209,17 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
           accept-language:
           - en-US
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2019-09-01
       response:
         body:
           string: "{\r\n  \"properties\": {\r\n    \"isCancellable\": true,\r\n    \"\
             isDeletable\": false,\r\n    \"isShippingAddressEditable\": true,\r\n    \"\
             isPrepareToShipEnabled\": false,\r\n    \"status\": \"DeviceOrdered\",\r\n\
    -        \    \"startTime\": \"2020-02-09T05:14:10.4071426+00:00\",\r\n    \"deliveryType\"\
    +        \    \"startTime\": \"2020-02-13T06:44:28.00637+00:00\",\r\n    \"deliveryType\"\
             : \"NonScheduled\",\r\n    \"deliveryInfo\": {\r\n      \"scheduledDateTime\"\
             : \"0001-01-01T00:00:00+00:00\"\r\n    },\r\n    \"isCancellableWithoutFee\"\
             : true\r\n  },\r\n  \"location\": \"westus\",\r\n  \"tags\": {},\r\n  \"sku\"\
    @@ -230,11 +230,11 @@ interactions:
           cache-control:
           - no-cache
           content-length:
    -      - '712'
    +      - '710'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sun, 09 Feb 2020 05:14:33 GMT
    +      - Thu, 13 Feb 2020 06:44:50 GMT
           expires:
           - '-1'
           pragma:
    @@ -263,17 +263,17 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
           accept-language:
           - en-US
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2019-09-01
       response:
         body:
           string: "{\r\n  \"properties\": {\r\n    \"isCancellable\": true,\r\n    \"\
             isDeletable\": false,\r\n    \"isShippingAddressEditable\": true,\r\n    \"\
             isPrepareToShipEnabled\": false,\r\n    \"status\": \"DeviceOrdered\",\r\n\
    -        \    \"startTime\": \"2020-02-09T05:14:10.4071426+00:00\",\r\n    \"deliveryType\"\
    +        \    \"startTime\": \"2020-02-13T06:44:28.00637+00:00\",\r\n    \"deliveryType\"\
             : \"NonScheduled\",\r\n    \"deliveryInfo\": {\r\n      \"scheduledDateTime\"\
             : \"0001-01-01T00:00:00+00:00\"\r\n    },\r\n    \"isCancellableWithoutFee\"\
             : true\r\n  },\r\n  \"location\": \"westus\",\r\n  \"tags\": {},\r\n  \"sku\"\
    @@ -284,11 +284,11 @@ interactions:
           cache-control:
           - no-cache
           content-length:
    -      - '712'
    +      - '710'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sun, 09 Feb 2020 05:14:33 GMT
    +      - Thu, 13 Feb 2020 06:44:51 GMT
           expires:
           - '-1'
           pragma:
    @@ -317,17 +317,17 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
           accept-language:
           - en-US
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2019-09-01
       response:
         body:
           string: "{\r\n  \"properties\": {\r\n    \"isCancellable\": true,\r\n    \"\
             isDeletable\": false,\r\n    \"isShippingAddressEditable\": true,\r\n    \"\
             isPrepareToShipEnabled\": false,\r\n    \"status\": \"DeviceOrdered\",\r\n\
    -        \    \"startTime\": \"2020-02-09T05:14:10.4071426+00:00\",\r\n    \"deliveryType\"\
    +        \    \"startTime\": \"2020-02-13T06:44:28.00637+00:00\",\r\n    \"deliveryType\"\
             : \"NonScheduled\",\r\n    \"deliveryInfo\": {\r\n      \"scheduledDateTime\"\
             : \"0001-01-01T00:00:00+00:00\"\r\n    },\r\n    \"isCancellableWithoutFee\"\
             : true\r\n  },\r\n  \"location\": \"westus\",\r\n  \"tags\": {},\r\n  \"sku\"\
    @@ -338,11 +338,11 @@ interactions:
           cache-control:
           - no-cache
           content-length:
    -      - '712'
    +      - '710'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sun, 09 Feb 2020 05:14:34 GMT
    +      - Thu, 13 Feb 2020 06:44:51 GMT
           expires:
           - '-1'
           pragma:
    @@ -371,17 +371,17 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
           accept-language:
           - en-US
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2019-09-01
       response:
         body:
           string: "{\r\n  \"properties\": {\r\n    \"isCancellable\": true,\r\n    \"\
             isDeletable\": false,\r\n    \"isShippingAddressEditable\": true,\r\n    \"\
             isPrepareToShipEnabled\": false,\r\n    \"status\": \"DeviceOrdered\",\r\n\
    -        \    \"startTime\": \"2020-02-09T05:14:10.4071426+00:00\",\r\n    \"deliveryType\"\
    +        \    \"startTime\": \"2020-02-13T06:44:28.00637+00:00\",\r\n    \"deliveryType\"\
             : \"NonScheduled\",\r\n    \"deliveryInfo\": {\r\n      \"scheduledDateTime\"\
             : \"0001-01-01T00:00:00+00:00\"\r\n    },\r\n    \"isCancellableWithoutFee\"\
             : true\r\n  },\r\n  \"location\": \"westus\",\r\n  \"tags\": {},\r\n  \"sku\"\
    @@ -392,11 +392,11 @@ interactions:
           cache-control:
           - no-cache
           content-length:
    -      - '712'
    +      - '710'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sun, 09 Feb 2020 05:14:35 GMT
    +      - Thu, 13 Feb 2020 06:44:51 GMT
           expires:
           - '-1'
           pragma:
    @@ -425,17 +425,17 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
           accept-language:
           - en-US
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2019-09-01
       response:
         body:
           string: "{\r\n  \"properties\": {\r\n    \"isCancellable\": true,\r\n    \"\
             isDeletable\": false,\r\n    \"isShippingAddressEditable\": true,\r\n    \"\
             isPrepareToShipEnabled\": false,\r\n    \"status\": \"DeviceOrdered\",\r\n\
    -        \    \"startTime\": \"2020-02-09T05:14:10.4071426+00:00\",\r\n    \"deliveryType\"\
    +        \    \"startTime\": \"2020-02-13T06:44:28.00637+00:00\",\r\n    \"deliveryType\"\
             : \"NonScheduled\",\r\n    \"deliveryInfo\": {\r\n      \"scheduledDateTime\"\
             : \"0001-01-01T00:00:00+00:00\"\r\n    },\r\n    \"isCancellableWithoutFee\"\
             : true\r\n  },\r\n  \"location\": \"westus\",\r\n  \"tags\": {},\r\n  \"sku\"\
    @@ -446,11 +446,11 @@ interactions:
           cache-control:
           - no-cache
           content-length:
    -      - '712'
    +      - '710'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sun, 09 Feb 2020 05:14:35 GMT
    +      - Thu, 13 Feb 2020 06:44:51 GMT
           expires:
           - '-1'
           pragma:
    @@ -468,9 +468,81 @@ interactions:
         status:
           code: 200
           message: OK
    +- request:
    +    body: 'b''b\''{"individualRequestDetails": [{"validationType": "ValidateDataDestinationDetails",
    +      "destinationAccountDetails": [{"dataDestinationType": "StorageAccount", "storageAccountId":
    +      "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.Storage/storageAccounts/databoxaccountabc"}],
    +      "location": "westus"}, {"validationType": "ValidateAddress", "shippingAddress":
    +      {"streetAddress1": "16 TOWNSEND ST", "streetAddress2": "Unit 1", "city": "San
    +      Francisco", "stateOrProvince": "CA", "country": "US", "postalCode": "94107",
    +      "companyName": "Microsoft", "addressType": "Commercial"}, "deviceType": "DataBox"}],
    +      "validationCategory": "JobCreationValidation"}\'''''
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '718'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/locations/westus/validateInputs?api-version=2019-09-01
    +  response:
    +    body:
    +      string: "{\r\n  \"properties\": {\r\n    \"status\": \"AllValidToProceed\",\r\
    +        \n    \"individualResponseDetails\": [\r\n      {\r\n        \"status\": \"\
    +        Valid\",\r\n        \"validationType\": \"ValidateDataDestinationDetails\"\
    +        ,\r\n        \"error\": {}\r\n      },\r\n      {\r\n        \"validationStatus\"\
    +        : \"Valid\",\r\n        \"alternateAddresses\": [\r\n          {\r\n     \
    +        \       \"streetAddress1\": \"16 TOWNSEND ST\",\r\n            \"streetAddress2\"\
    +        : \"Unit 1\",\r\n            \"streetAddress3\": \"\",\r\n            \"city\"\
    +        : \"SAN FRANCISCO\",\r\n            \"stateOrProvince\": \"CA\",\r\n     \
    +        \       \"country\": \"US\",\r\n            \"postalCode\": \"94107\",\r\n\
    +        \            \"addressType\": \"None\"\r\n          }\r\n        ],\r\n  \
    +        \      \"validationType\": \"ValidateAddress\",\r\n        \"error\": {}\r\
    +        \n      }\r\n    ]\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '732'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 13 Feb 2020 06:44:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1197'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"properties": {"details": {"contactDetails": {"contactName": "Update Job",
    -      "phone": "1234567890", "phoneExtension": "1234", "emailList": ["testing@microsoft.com"]}}}}'
    +      "phone": "1234567890", "phoneExtension": "1234", "emailList": ["testing@microsoft.com"]},
    +      "shippingAddress": {"streetAddress1": "16 TOWNSEND ST", "streetAddress2": "Unit
    +      1", "city": "San Francisco", "stateOrProvince": "CA", "country": "US", "postalCode":
    +      "94107", "companyName": "Microsoft", "addressType": "Commercial"}}}}'
         headers:
           Accept:
           - application/json
    @@ -479,16 +551,16 @@ interactions:
           Connection:
           - keep-alive
           Content-Length:
    -      - '167'
    +      - '399'
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
           accept-language:
           - en-US
         method: PATCH
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2019-09-01
       response:
         body:
           string: ''
    @@ -498,11 +570,11 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:14:36 GMT
    +      - Thu, 13 Feb 2020 06:44:55 GMT
           expires:
           - '-1'
           location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/75f090f5-68c1-436c-869c-1a09ab8caf9b?api-version=2018-01-01
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/388ab663-e36f-430b-87ca-cb610979691d?api-version=2018-01-01
           pragma:
           - no-cache
           strict-transport-security:
    @@ -510,7 +582,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-ratelimit-remaining-subscription-writes:
    -      - '1193'
    +      - '1195'
           x-powered-by:
           - ASP.NET
         status:
    @@ -527,9 +599,9 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/75f090f5-68c1-436c-869c-1a09ab8caf9b?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/388ab663-e36f-430b-87ca-cb610979691d?api-version=2018-01-01
       response:
         body:
           string: ''
    @@ -539,7 +611,7 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:14:47 GMT
    +      - Thu, 13 Feb 2020 06:45:27 GMT
           expires:
           - '-1'
           location:
    @@ -566,7 +638,7 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
         uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2018-01-01
       response:
    @@ -574,7 +646,7 @@ interactions:
           string: "{\r\n  \"properties\": {\r\n    \"isCancellable\": true,\r\n    \"\
             isDeletable\": false,\r\n    \"isShippingAddressEditable\": true,\r\n    \"\
             isPrepareToShipEnabled\": false,\r\n    \"status\": \"DeviceOrdered\",\r\n\
    -        \    \"startTime\": \"2020-02-09T05:14:10.4071426+00:00\",\r\n    \"deliveryType\"\
    +        \    \"startTime\": \"2020-02-13T06:44:28.00637+00:00\",\r\n    \"deliveryType\"\
             : \"NonScheduled\",\r\n    \"deliveryInfo\": {\r\n      \"scheduledDateTime\"\
             : \"0001-01-01T00:00:00+00:00\"\r\n    },\r\n    \"isCancellableWithoutFee\"\
             : true\r\n  },\r\n  \"location\": \"westus\",\r\n  \"tags\": {},\r\n  \"sku\"\
    @@ -585,11 +657,11 @@ interactions:
           cache-control:
           - no-cache
           content-length:
    -      - '712'
    +      - '710'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sun, 09 Feb 2020 05:14:57 GMT
    +      - Thu, 13 Feb 2020 06:45:37 GMT
           expires:
           - '-1'
           pragma:
    @@ -607,6 +679,186 @@ interactions:
         status:
           code: 200
           message: OK
    +- request:
    +    body: '{}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '2'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/regionConfiguration?api-version=2019-09-01
    +  response:
    +    body:
    +      string: '{}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 13 Feb 2020 06:45:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1196'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"validationType": "ValidateAddress", "shippingAddress": {"streetAddress1":
    +      "16 TOWNSEND ST", "streetAddress2": "Unit 1", "city": "San Francisco", "stateOrProvince":
    +      "CA", "country": "US", "postalCode": "94107", "companyName": "Microsoft", "addressType":
    +      "Commercial"}, "deviceType": "DataBox"}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '294'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/validateAddress?api-version=2019-09-01
    +  response:
    +    body:
    +      string: "{\r\n  \"properties\": {\r\n    \"validationStatus\": \"Valid\",\r\n\
    +        \    \"alternateAddresses\": [\r\n      {\r\n        \"streetAddress1\": \"\
    +        16 TOWNSEND ST\",\r\n        \"streetAddress2\": \"Unit 1\",\r\n        \"\
    +        streetAddress3\": \"\",\r\n        \"city\": \"SAN FRANCISCO\",\r\n      \
    +        \  \"stateOrProvince\": \"CA\",\r\n        \"country\": \"US\",\r\n      \
    +        \  \"postalCode\": \"94107\",\r\n        \"addressType\": \"None\"\r\n   \
    +        \   }\r\n    ],\r\n    \"validationType\": \"ValidateAddress\"\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '428'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 13 Feb 2020 06:45:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1195'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: 'b''b\''{"individualRequestDetails": [{"validationType": "ValidateDataDestinationDetails",
    +      "destinationAccountDetails": [{"dataDestinationType": "StorageAccount", "storageAccountId":
    +      "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.Storage/storageAccounts/databoxaccountabc"}],
    +      "location": "westus"}, {"validationType": "ValidateAddress", "shippingAddress":
    +      {"streetAddress1": "16 TOWNSEND ST", "streetAddress2": "Unit 1", "city": "San
    +      Francisco", "stateOrProvince": "CA", "country": "US", "postalCode": "94107",
    +      "companyName": "Microsoft", "addressType": "Commercial"}, "deviceType": "DataBox"}],
    +      "validationCategory": "JobCreationValidation"}\'''''
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '718'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/validateInputs?api-version=2019-09-01
    +  response:
    +    body:
    +      string: "{\r\n  \"properties\": {\r\n    \"status\": \"AllValidToProceed\",\r\
    +        \n    \"individualResponseDetails\": [\r\n      {\r\n        \"status\": \"\
    +        Valid\",\r\n        \"validationType\": \"ValidateDataDestinationDetails\"\
    +        ,\r\n        \"error\": {}\r\n      },\r\n      {\r\n        \"validationStatus\"\
    +        : \"Valid\",\r\n        \"alternateAddresses\": [\r\n          {\r\n     \
    +        \       \"streetAddress1\": \"16 TOWNSEND ST\",\r\n            \"streetAddress2\"\
    +        : \"Unit 1\",\r\n            \"streetAddress3\": \"\",\r\n            \"city\"\
    +        : \"SAN FRANCISCO\",\r\n            \"stateOrProvince\": \"CA\",\r\n     \
    +        \       \"country\": \"US\",\r\n            \"postalCode\": \"94107\",\r\n\
    +        \            \"addressType\": \"None\"\r\n          }\r\n        ],\r\n  \
    +        \      \"validationType\": \"ValidateAddress\",\r\n        \"error\": {}\r\
    +        \n      }\r\n    ]\r\n  }\r\n}"
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '732'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 13 Feb 2020 06:45:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      transfer-encoding:
    +      - chunked
    +      vary:
    +      - Accept-Encoding
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1194'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"reason": "{''reason'': ''CancelTest''}"}'
         headers:
    @@ -622,11 +874,59 @@ interactions:
           - application/json; charset=utf-8
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
           accept-language:
           - en-US
         method: POST
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob/cancel?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob/cancel?api-version=2019-09-01
    +  response:
    +    body:
    +      string: '{"error":{"code":"GatewayTimeout","message":"The gateway did not receive
    +        a response from ''Microsoft.DataBox'' within the specified time period."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      connection:
    +      - close
    +      content-length:
    +      - '145'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 13 Feb 2020 06:46:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-failure-cause:
    +      - service
    +    status:
    +      code: 504
    +      message: Gateway Timeout
    +- request:
    +    body: '{"reason": "{''reason'': ''CancelTest''}"}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '38'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob/cancel?api-version=2019-09-01
       response:
         body:
           string: ''
    @@ -634,7 +934,7 @@ interactions:
           cache-control:
           - no-cache
           date:
    -      - Sun, 09 Feb 2020 05:15:00 GMT
    +      - Thu, 13 Feb 2020 06:46:02 GMT
           expires:
           - '-1'
           pragma:
    @@ -663,11 +963,11 @@ interactions:
           - '0'
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
           accept-language:
           - en-US
         method: DELETE
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_databox_test_databoxf3720dde/providers/Microsoft.DataBox/jobs/testjob?api-version=2019-09-01
       response:
         body:
           string: ''
    @@ -677,11 +977,11 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:15:01 GMT
    +      - Thu, 13 Feb 2020 06:46:03 GMT
           expires:
           - '-1'
           location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
           pragma:
           - no-cache
           strict-transport-security:
    @@ -689,7 +989,241 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-ratelimit-remaining-subscription-deletes:
    -      - '14993'
    +      - '14998'
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 13 Feb 2020 06:46:14 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
    +      pragma:
    +      - no-cache
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 13 Feb 2020 06:46:24 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
    +      pragma:
    +      - no-cache
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 13 Feb 2020 06:46:35 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
    +      pragma:
    +      - no-cache
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 13 Feb 2020 06:46:46 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
    +      pragma:
    +      - no-cache
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 13 Feb 2020 06:46:56 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
    +      pragma:
    +      - no-cache
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
    +    method: GET
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '0'
    +      date:
    +      - Thu, 13 Feb 2020 06:47:06 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
    +      pragma:
    +      - no-cache
    +      strict-transport-security:
    +      - max-age=31536000; includeSubDomains
    +      x-content-type-options:
    +      - nosniff
           x-powered-by:
           - ASP.NET
         status:
    @@ -706,9 +1240,9 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
       response:
         body:
           string: ''
    @@ -718,11 +1252,11 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:15:12 GMT
    +      - Thu, 13 Feb 2020 06:47:16 GMT
           expires:
           - '-1'
           location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
           pragma:
           - no-cache
           strict-transport-security:
    @@ -745,9 +1279,9 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
       response:
         body:
           string: ''
    @@ -757,11 +1291,11 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:15:23 GMT
    +      - Thu, 13 Feb 2020 06:47:27 GMT
           expires:
           - '-1'
           location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
           pragma:
           - no-cache
           strict-transport-security:
    @@ -784,9 +1318,9 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
       response:
         body:
           string: ''
    @@ -796,11 +1330,11 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:15:33 GMT
    +      - Thu, 13 Feb 2020 06:47:38 GMT
           expires:
           - '-1'
           location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
           pragma:
           - no-cache
           strict-transport-security:
    @@ -823,9 +1357,9 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
       response:
         body:
           string: ''
    @@ -835,11 +1369,11 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:15:43 GMT
    +      - Thu, 13 Feb 2020 06:47:48 GMT
           expires:
           - '-1'
           location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
           pragma:
           - no-cache
           strict-transport-security:
    @@ -862,9 +1396,9 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
       response:
         body:
           string: ''
    @@ -874,11 +1408,11 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:15:54 GMT
    +      - Thu, 13 Feb 2020 06:47:58 GMT
           expires:
           - '-1'
           location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
           pragma:
           - no-cache
           strict-transport-security:
    @@ -901,9 +1435,9 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
       response:
         body:
           string: ''
    @@ -913,11 +1447,11 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:16:04 GMT
    +      - Thu, 13 Feb 2020 06:48:08 GMT
           expires:
           - '-1'
           location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
           pragma:
           - no-cache
           strict-transport-security:
    @@ -940,9 +1474,9 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
       response:
         body:
           string: ''
    @@ -952,11 +1486,11 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:16:14 GMT
    +      - Thu, 13 Feb 2020 06:48:20 GMT
           expires:
           - '-1'
           location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
           pragma:
           - no-cache
           strict-transport-security:
    @@ -979,9 +1513,9 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
       response:
         body:
           string: ''
    @@ -991,11 +1525,11 @@ interactions:
           content-length:
           - '0'
           date:
    -      - Sun, 09 Feb 2020 05:16:25 GMT
    +      - Thu, 13 Feb 2020 06:48:30 GMT
           expires:
           - '-1'
           location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
           pragma:
           - no-cache
           strict-transport-security:
    @@ -1018,9 +1552,9 @@ interactions:
           - keep-alive
           User-Agent:
           - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    -        msrest_azure/0.6.2 azure-mgmt-databox/0.1.0 Azure-SDK-For-Python
    +        msrest_azure/0.6.2 azure-mgmt-databox/0.2.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/9355c7ad-987b-4312-b8ef-812c6257a57e-deleteorder?api-version=2018-01-01
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DataBox/locations/westus/operationResults/f9e1be3c-5196-440b-a2db-9722a34b20af-deleteorder?api-version=2018-01-01
       response:
         body:
           string: ''
    @@ -1028,7 +1562,7 @@ interactions:
           cache-control:
           - no-cache
           date:
    -      - Sun, 09 Feb 2020 05:16:36 GMT
    +      - Thu, 13 Feb 2020 06:48:41 GMT
           expires:
           - '-1'
           pragma:
    diff --git a/sdk/databox/azure-mgmt-databox/tests/test_cli_mgmt_databox.py b/sdk/databox/azure-mgmt-databox/tests/test_cli_mgmt_databox.py
    index 12c41b6c118a..3f116518d0b2 100644
    --- a/sdk/databox/azure-mgmt-databox/tests/test_cli_mgmt_databox.py
    +++ b/sdk/databox/azure-mgmt-databox/tests/test_cli_mgmt_databox.py
    @@ -12,10 +12,12 @@
     # Methods Total   : 16
     # Methods Covered : 16
     # Examples Total  : 21
    -# Examples Tested : 17
    -# Coverage %      : 80.95238095238095
    +# Examples Tested : 21
    +# Coverage %      : 100
     # ----------------------
     
    +# current method cover: 15/16
    +
     import os
     import unittest
     
    @@ -31,14 +33,10 @@ def setUp(self):
             self.mgmt_client = self.create_mgmt_client(
                 azure.mgmt.databox.DataBoxManagementClient
             )
    -        self.storage_client = self.create_mgmt_client(
    -            azure.mgmt.storage.StorageManagementClient
    -        )
         
         @ResourceGroupPreparer(location=AZURE_LOCATION)
         def test_databox(self, resource_group):
     
    -        SERVICE_NAME = "myapimrndxyz"
             SUBSCRIPTION_ID = None
             if self.is_live:
                 SUBSCRIPTION_ID = os.environ.get("AZURE_SUBSCRIPTION_ID", None)
    @@ -47,6 +45,7 @@ def test_databox(self, resource_group):
             RESOURCE_GROUP = resource_group.name
             STORAGE_ACCOUNT_NAME = 'databoxaccountabc'
             JOB_NAME = 'testjob'
    +        LOCATION_NAME = "westus"
     
             # JobsCreate[put]
             BODY = {
    @@ -85,6 +84,9 @@ def test_databox(self, resource_group):
             result = self.mgmt_client.jobs.create(resource_group.name, JOB_NAME, BODY)
             result = result.result()
     
    +        # JobsGet5[get]
    +        result = self.mgmt_client.jobs.get(resource_group.name, JOB_NAME)
    +
             # JobsGet4[get]
             result = self.mgmt_client.jobs.get(resource_group.name, JOB_NAME)
     
    @@ -100,9 +102,6 @@ def test_databox(self, resource_group):
             # JobsGet[get]
             result = self.mgmt_client.jobs.get(resource_group.name, JOB_NAME)
     
    -        # JobsGet5[get]
    -        result = self.mgmt_client.jobs.get(resource_group.name, JOB_NAME)
    -
             # JobsListByResourceGroup[get]
             result = self.mgmt_client.jobs.list_by_resource_group(resource_group.name)
     
    @@ -112,55 +111,97 @@ def test_databox(self, resource_group):
             # OperationsGet[get]
             result = self.mgmt_client.operations.list()
     
    +        # ServiceValidateInputsByResourceGroup[post]
    +        BODY = {
    +          "validation_category": "JobCreationValidation",
    +          "individual_request_details": [
    +            {
    +              "validation_type": "ValidateDataDestinationDetails",
    +              "location": "westus",
    +              "destination_account_details": [
    +                {
    +                  "storage_account_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Storage/storageAccounts/" + STORAGE_ACCOUNT_NAME + "",
    +                  "data_destination_type": "StorageAccount"
    +                }
    +              ]
    +            },
    +            {
    +              "validation_type": "ValidateAddress",
    +              "shipping_address": {
    +                "street_address1": "16 TOWNSEND ST",
    +                "street_address2": "Unit 1",
    +                "city": "San Francisco",
    +                "state_or_province": "CA",
    +                "country": "US",
    +                "postal_code": "94107",
    +                "company_name": "Microsoft",
    +                "address_type": "Commercial"
    +              },
    +              "device_type": "DataBox"
    +            }
    +          ]
    +        }
    +        result = self.mgmt_client.service.validate_inputs_by_resource_group(resource_group.name, LOCATION_NAME, BODY)
    +
    +        # AvailableSkusByResourceGroup[post]
    +        BODY = {
    +          "country": "US",
    +          "location": "westus",
    +          "transfer_type": "ImportToAzure"
    +        }
    +        result = self.mgmt_client.service.list_available_skus_by_resource_group(resource_group.name, LOCATION_NAME, BODY)
    +
             """
             # BookShipmentPickupPost[post]
    +        now = dt.datetime.now()
             BODY = {
    -          "start_time": "2019-09-20T18:30:00Z",
    -          "end_time": "2019-09-22T18:30:00Z",
    +          # For new test, change the start time as current date
    +          # and end time as start_time + 2 days
    +          "start_time": now,
    +          "end_time": now + dt.timedelta(days=2),
               "shipment_location": "Front desk"
             }
    -        result = self.mgmt_client.jobs.book_shipment_pick_up(resource_group.name, JOB_NAME, BODY, polling=False)
    +        self.mgmt_client.jobs.book_shipment_pick_up(resource_group.name, JOB_NAME, BODY)
    +        """
     
             # JobsListCredentials[post]
    -        result = self.mgmt_client.jobs.list_credentials(resource_group.name, JOB_NAME, polling=False)
    -        """
    +        result = self.mgmt_client.jobs.list_credentials(resource_group.name, JOB_NAME)
     
             # JobsPatch[patch]
             BODY = {
    -          "properties": {
    -            "details": {
    -              "contact_details": {
    -                "contact_name": "Update Job",
    -                "phone": "1234567890",
    -                "phone_extension": "1234",
    -                "email_list": [
    -                  "testing@microsoft.com"
    -                ]
    -              },
    -              # TODO: raise SsemUserErrorShippingAddressIsNotEditable
    -              # "shipping_address": {
    -              #   "street_address1": "16 TOWNSEND ST",
    -              #   "street_address2": "Unit 1",
    -              #   "city": "San Francisco",
    -              #   "state_or_province": "CA",
    -              #   "country": "US",
    -              #   "postal_code": "94107",
    -              #   "company_name": "Microsoft",
    -              #   "address_type": "Commercial"
    -              # }
    +          "details": {
    +            "contact_details": {
    +              "contact_name": "Update Job",
    +              "phone": "1234567890",
    +              "phone_extension": "1234",
    +              "email_list": [
    +                "testing@microsoft.com"
    +              ]
    +            },
    +            "shipping_address": {
    +              "street_address1": "16 TOWNSEND ST",
    +              "street_address2": "Unit 1",
    +              "city": "San Francisco",
    +              "state_or_province": "CA",
    +              "country": "US",
    +              "postal_code": "94107",
    +              "company_name": "Microsoft",
    +              "address_type": "Commercial"
                 }
               }
             }
             result = self.mgmt_client.jobs.update(resource_group.name, JOB_NAME, BODY)
             result = result.result()
     
    -        # JobsCancelPost[post]
    -        BODY = {
    -          "reason": "CancelTest"
    -        }
    -        result = self.mgmt_client.jobs.cancel(resource_group.name, JOB_NAME, BODY)
    +        # ServiceRegionConfiguration[post]
    +        # TODO: SKUs are not available in live test
    +        # BODY = {
    +        #   "storage_location": "westus",
    +        #   "sku_name": "DataBox"
    +        # }
    +        BODY = None 
    +        result = self.mgmt_client.service.region_configuration(LOCATION_NAME, BODY)
     
    -        """
             # ValidateAddressPost[post]
             BODY = {
               "validation_type": "ValidateAddress",
    @@ -176,7 +217,39 @@ def test_databox(self, resource_group):
               },
               "device_type": "DataBox"
             }
    -        result = self.mgmt_client.service.validate_address_method(LOCATION_NAME, BODY, polling=False)
    +        result = self.mgmt_client.service.validate_address_method(LOCATION_NAME, BODY)
    +
    +        # ServiceValidateInputs[post]
    +        BODY = {
    +          "validation_category": "JobCreationValidation",
    +          "individual_request_details": [
    +            {
    +              "validation_type": "ValidateDataDestinationDetails",
    +              "location": "westus",
    +              "destination_account_details": [
    +                {
    +                  "storage_account_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Storage/storageAccounts/" + STORAGE_ACCOUNT_NAME + "",
    +                  "data_destination_type": "StorageAccount"
    +                }
    +              ]
    +            },
    +            {
    +              "validation_type": "ValidateAddress",
    +              "shipping_address": {
    +                "street_address1": "16 TOWNSEND ST",
    +                "street_address2": "Unit 1",
    +                "city": "San Francisco",
    +                "state_or_province": "CA",
    +                "country": "US",
    +                "postal_code": "94107",
    +                "company_name": "Microsoft",
    +                "address_type": "Commercial"
    +              },
    +              "device_type": "DataBox"
    +            }
    +          ]
    +        }
    +        result = self.mgmt_client.service.validate_inputs(LOCATION_NAME, BODY)
     
             # AvailableSkusPost[post]
             BODY = {
    @@ -184,8 +257,13 @@ def test_databox(self, resource_group):
               "location": "westus",
               "transfer_type": "ImportToAzure"
             }
    -        result = self.mgmt_client.service.list_available_skus(LOCATION_NAME, BODY, polling=False)
    -        """
    +        result = self.mgmt_client.service.list_available_skus(LOCATION_NAME, BODY)
    +
    +        # JobsCancelPost[post]
    +        BODY = {
    +          "reason": "CancelTest"
    +        }
    +        result = self.mgmt_client.jobs.cancel(resource_group.name, JOB_NAME, BODY)
     
             # JobsDelete[delete]
             result = self.mgmt_client.jobs.delete(resource_group.name, JOB_NAME)
    diff --git a/sdk/datafactory/azure-mgmt-datafactory/CHANGELOG.md b/sdk/datafactory/azure-mgmt-datafactory/CHANGELOG.md
    index b1d165818323..bb6ef2c00ad3 100644
    --- a/sdk/datafactory/azure-mgmt-datafactory/CHANGELOG.md
    +++ b/sdk/datafactory/azure-mgmt-datafactory/CHANGELOG.md
    @@ -1,5 +1,118 @@
     # Release History
     
    +## 0.10.0 (2020-03-10)
    +
    +**Features**
    +
    +- Model SqlSource has a new parameter isolation_level
    +- Model SqlSource has a new parameter additional_columns
    +- Model SapHanaSource has a new parameter additional_columns
    +- Model SalesforceMarketingCloudSource has a new parameter additional_columns
    +- Model Db2Source has a new parameter additional_columns
    +- Model DynamicsAXSource has a new parameter additional_columns
    +- Model MicrosoftAccessSource has a new parameter additional_columns
    +- Model AzureMySqlSource has a new parameter additional_columns
    +- Model CouchbaseSource has a new parameter additional_columns
    +- Model CassandraSource has a new parameter additional_columns
    +- Model NetezzaSource has a new parameter additional_columns
    +- Model CopyActivity has a new parameter validate_data_consistency
    +- Model CopyActivity has a new parameter log_storage_settings
    +- Model CopyActivity has a new parameter skip_error_file
    +- Model JsonSource has a new parameter additional_columns
    +- Model AmazonRedshiftSource has a new parameter additional_columns
    +- Model SapEccSource has a new parameter additional_columns
    +- Model TabularSource has a new parameter additional_columns
    +- Model AvroSource has a new parameter additional_columns
    +- Model DocumentDbCollectionSource has a new parameter additional_columns
    +- Model SalesforceLinkedService has a new parameter api_version
    +- Model SybaseSource has a new parameter additional_columns
    +- Model AzureFileStorageReadSettings has a new parameter file_list_path
    +- Model SapBwSource has a new parameter additional_columns
    +- Model MariaDBSource has a new parameter additional_columns
    +- Model CosmosDbMongoDbApiSource has a new parameter additional_columns
    +- Model SqlDWSource has a new parameter additional_columns
    +- Model ConcurSource has a new parameter additional_columns
    +- Model MongoDbSource has a new parameter additional_columns
    +- Model AzureSqlSource has a new parameter additional_columns
    +- Model DynamicsCrmSource has a new parameter additional_columns
    +- Model JiraSource has a new parameter additional_columns
    +- Model SftpReadSettings has a new parameter file_list_path
    +- Model HiveSource has a new parameter additional_columns
    +- Model OdbcSource has a new parameter additional_columns
    +- Model SalesforceServiceCloudLinkedService has a new parameter api_version
    +- Model AzureBlobStorageReadSettings has a new parameter file_list_path
    +- Model AzureTableSource has a new parameter additional_columns
    +- Model PaypalSource has a new parameter additional_columns
    +- Model RelationalSource has a new parameter additional_columns
    +- Model HBaseSource has a new parameter additional_columns
    +- Model GoogleCloudStorageReadSettings has a new parameter file_list_path
    +- Model HubspotSource has a new parameter additional_columns
    +- Model ResponsysSource has a new parameter additional_columns
    +- Model CommonDataServiceForAppsSource has a new parameter additional_columns
    +- Model WebSource has a new parameter additional_columns
    +- Model Db2LinkedService has a new parameter connection_string
    +- Model QuickBooksSource has a new parameter additional_columns
    +- Model FtpReadSettings has a new parameter file_list_path
    +- Model AzureBlobFSReadSettings has a new parameter file_list_path
    +- Model SparkSource has a new parameter additional_columns
    +- Model MagentoSource has a new parameter additional_columns
    +- Model DrillSource has a new parameter additional_columns
    +- Model AzureMariaDBSource has a new parameter additional_columns
    +- Model FileServerReadSettings has a new parameter file_list_path
    +- Model TeradataSource has a new parameter additional_columns
    +- Model MarketoSource has a new parameter additional_columns
    +- Model CosmosDbSqlApiSource has a new parameter additional_columns
    +- Model AzureDataLakeStoreReadSettings has a new parameter file_list_path
    +- Model OracleSource has a new parameter additional_columns
    +- Model VerticaSource has a new parameter additional_columns
    +- Model PhoenixSource has a new parameter additional_columns
    +- Model ParquetSource has a new parameter additional_columns
    +- Model GoogleAdWordsSource has a new parameter additional_columns
    +- Model SapTableSource has a new parameter additional_columns
    +- Model FileSystemSource has a new parameter additional_columns
    +- Model AzureDataLakeStoreWriteSettings has a new parameter expiry_date_time
    +- Model PrestoSource has a new parameter additional_columns
    +- Model MongoDbV2Source has a new parameter additional_columns
    +- Model AzurePostgreSqlSource has a new parameter additional_columns
    +- Model PostgreSqlSource has a new parameter additional_columns
    +- Model SquareSource has a new parameter additional_columns
    +- Model DelimitedTextSource has a new parameter additional_columns
    +- Model SftpWriteSettings has a new parameter use_temp_file_rename
    +- Model ZohoSource has a new parameter additional_columns
    +- Model OracleServiceCloudSource has a new parameter additional_columns
    +- Model HdfsReadSettings has a new parameter file_list_path
    +- Model DynamicsSource has a new parameter additional_columns
    +- Model GoogleBigQuerySource has a new parameter additional_columns
    +- Model ShopifySource has a new parameter additional_columns
    +- Model OrcSource has a new parameter additional_columns
    +- Model AmazonS3ReadSettings has a new parameter file_list_path
    +- Model EloquaSource has a new parameter additional_columns
    +- Model ServiceNowSource has a new parameter additional_columns
    +- Model SalesforceSource has a new parameter additional_columns
    +- Model ImpalaSource has a new parameter additional_columns
    +- Model RestSource has a new parameter additional_columns
    +- Model SqlMISource has a new parameter additional_columns
    +- Model SapCloudForCustomerSource has a new parameter additional_columns
    +- Model GreenplumSource has a new parameter additional_columns
    +- Model SqlServerSource has a new parameter additional_columns
    +- Model AzureDataExplorerSource has a new parameter additional_columns
    +- Model SalesforceServiceCloudSource has a new parameter additional_columns
    +- Model AmazonMWSSource has a new parameter additional_columns
    +- Model ODataSource has a new parameter additional_columns
    +- Model SapOpenHubSource has a new parameter additional_columns
    +- Model InformixSource has a new parameter additional_columns
    +- Model MySqlSource has a new parameter additional_columns
    +- Model XeroSource has a new parameter additional_columns
    +- Added operation TriggersOperations.query_by_factory
    +
    +**Breaking changes**
    +
    +- Parameter parent_trigger of model RerunTumblingWindowTrigger is now required
    +- Operation PipelinesOperations.create_run has a new signature
    +- Model RerunTumblingWindowTrigger no longer has parameter max_concurrency
    +- Model RerunTumblingWindowTrigger has a new required parameter rerun_concurrency
    +- Removed operation group RerunTriggersOperations
    +
     ## 0.9.0 (2020-02-07)
     
     **Features**
    diff --git a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/_data_factory_management_client.py b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/_data_factory_management_client.py
    index ec8185523fbd..78ff241e7898 100644
    --- a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/_data_factory_management_client.py
    +++ b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/_data_factory_management_client.py
    @@ -26,7 +26,6 @@
     from .operations import ActivityRunsOperations
     from .operations import TriggersOperations
     from .operations import TriggerRunsOperations
    -from .operations import RerunTriggersOperations
     from .operations import DataFlowsOperations
     from .operations import DataFlowDebugSessionOperations
     from . import models
    @@ -64,8 +63,6 @@ class DataFactoryManagementClient(SDKClient):
         :vartype triggers: azure.mgmt.datafactory.operations.TriggersOperations
         :ivar trigger_runs: TriggerRuns operations
         :vartype trigger_runs: azure.mgmt.datafactory.operations.TriggerRunsOperations
    -    :ivar rerun_triggers: RerunTriggers operations
    -    :vartype rerun_triggers: azure.mgmt.datafactory.operations.RerunTriggersOperations
         :ivar data_flows: DataFlows operations
         :vartype data_flows: azure.mgmt.datafactory.operations.DataFlowsOperations
         :ivar data_flow_debug_session: DataFlowDebugSession operations
    @@ -116,8 +113,6 @@ def __init__(
                 self._client, self.config, self._serialize, self._deserialize)
             self.trigger_runs = TriggerRunsOperations(
                 self._client, self.config, self._serialize, self._deserialize)
    -        self.rerun_triggers = RerunTriggersOperations(
    -            self._client, self.config, self._serialize, self._deserialize)
             self.data_flows = DataFlowsOperations(
                 self._client, self.config, self._serialize, self._deserialize)
             self.data_flow_debug_session = DataFlowDebugSessionOperations(
    diff --git a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/__init__.py b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/__init__.py
    index 4e9756b6aad1..3ca7ea25399a 100644
    --- a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/__init__.py
    +++ b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/__init__.py
    @@ -17,6 +17,7 @@
         from ._models_py3 import ActivityRun
         from ._models_py3 import ActivityRunsQueryResponse
         from ._models_py3 import AddDataFlowToDebugSessionResponse
    +    from ._models_py3 import AdditionalColumns
         from ._models_py3 import AmazonMWSLinkedService
         from ._models_py3 import AmazonMWSObjectDataset
         from ._models_py3 import AmazonMWSSource
    @@ -426,9 +427,7 @@
         from ._models_py3 import RedshiftUnloadSettings
         from ._models_py3 import RelationalSource
         from ._models_py3 import RelationalTableDataset
    -    from ._models_py3 import RerunTriggerResource
         from ._models_py3 import RerunTumblingWindowTrigger
    -    from ._models_py3 import RerunTumblingWindowTriggerActionParameters
         from ._models_py3 import Resource
         from ._models_py3 import ResponsysLinkedService
         from ._models_py3 import ResponsysObjectDataset
    @@ -492,6 +491,7 @@
         from ._models_py3 import ShopifyLinkedService
         from ._models_py3 import ShopifyObjectDataset
         from ._models_py3 import ShopifySource
    +    from ._models_py3 import SkipErrorFile
         from ._models_py3 import SparkLinkedService
         from ._models_py3 import SparkObjectDataset
         from ._models_py3 import SparkSource
    @@ -546,7 +546,9 @@
         from ._models_py3 import Transformation
         from ._models_py3 import Trigger
         from ._models_py3 import TriggerDependencyReference
    +    from ._models_py3 import TriggerFilterParameters
         from ._models_py3 import TriggerPipelineReference
    +    from ._models_py3 import TriggerQueryResponse
         from ._models_py3 import TriggerReference
         from ._models_py3 import TriggerResource
         from ._models_py3 import TriggerRun
    @@ -589,6 +591,7 @@
         from ._models import ActivityRun
         from ._models import ActivityRunsQueryResponse
         from ._models import AddDataFlowToDebugSessionResponse
    +    from ._models import AdditionalColumns
         from ._models import AmazonMWSLinkedService
         from ._models import AmazonMWSObjectDataset
         from ._models import AmazonMWSSource
    @@ -998,9 +1001,7 @@
         from ._models import RedshiftUnloadSettings
         from ._models import RelationalSource
         from ._models import RelationalTableDataset
    -    from ._models import RerunTriggerResource
         from ._models import RerunTumblingWindowTrigger
    -    from ._models import RerunTumblingWindowTriggerActionParameters
         from ._models import Resource
         from ._models import ResponsysLinkedService
         from ._models import ResponsysObjectDataset
    @@ -1064,6 +1065,7 @@
         from ._models import ShopifyLinkedService
         from ._models import ShopifyObjectDataset
         from ._models import ShopifySource
    +    from ._models import SkipErrorFile
         from ._models import SparkLinkedService
         from ._models import SparkObjectDataset
         from ._models import SparkSource
    @@ -1118,7 +1120,9 @@
         from ._models import Transformation
         from ._models import Trigger
         from ._models import TriggerDependencyReference
    +    from ._models import TriggerFilterParameters
         from ._models import TriggerPipelineReference
    +    from ._models import TriggerQueryResponse
         from ._models import TriggerReference
         from ._models import TriggerResource
         from ._models import TriggerRun
    @@ -1161,7 +1165,6 @@
     from ._paged_models import LinkedServiceResourcePaged
     from ._paged_models import OperationPaged
     from ._paged_models import PipelineResourcePaged
    -from ._paged_models import RerunTriggerResourcePaged
     from ._paged_models import TriggerResourcePaged
     from ._data_factory_management_client_enums import (
         IntegrationRuntimeState,
    @@ -1177,11 +1180,6 @@
         RunQueryOrder,
         TriggerRunStatus,
         DataFlowDebugCommandType,
    -    TumblingWindowFrequency,
    -    BlobEventTypes,
    -    DayOfWeek,
    -    DaysOfWeek,
    -    RecurrenceFrequency,
         GoogleAdWordsAuthenticationType,
         SparkServerType,
         SparkThriftTransportProtocol,
    @@ -1210,6 +1208,11 @@
         DynamicsAuthenticationType,
         OrcCompressionCodec,
         AvroCompressionCodec,
    +    TumblingWindowFrequency,
    +    BlobEventTypes,
    +    DayOfWeek,
    +    DaysOfWeek,
    +    RecurrenceFrequency,
         DataFlowComputeType,
         AzureFunctionActivityMethod,
         WebActivityMethod,
    @@ -1250,6 +1253,7 @@
         'ActivityRun',
         'ActivityRunsQueryResponse',
         'AddDataFlowToDebugSessionResponse',
    +    'AdditionalColumns',
         'AmazonMWSLinkedService',
         'AmazonMWSObjectDataset',
         'AmazonMWSSource',
    @@ -1659,9 +1663,7 @@
         'RedshiftUnloadSettings',
         'RelationalSource',
         'RelationalTableDataset',
    -    'RerunTriggerResource',
         'RerunTumblingWindowTrigger',
    -    'RerunTumblingWindowTriggerActionParameters',
         'Resource',
         'ResponsysLinkedService',
         'ResponsysObjectDataset',
    @@ -1725,6 +1727,7 @@
         'ShopifyLinkedService',
         'ShopifyObjectDataset',
         'ShopifySource',
    +    'SkipErrorFile',
         'SparkLinkedService',
         'SparkObjectDataset',
         'SparkSource',
    @@ -1779,7 +1782,9 @@
         'Transformation',
         'Trigger',
         'TriggerDependencyReference',
    +    'TriggerFilterParameters',
         'TriggerPipelineReference',
    +    'TriggerQueryResponse',
         'TriggerReference',
         'TriggerResource',
         'TriggerRun',
    @@ -1821,7 +1826,6 @@
         'DatasetResourcePaged',
         'PipelineResourcePaged',
         'TriggerResourcePaged',
    -    'RerunTriggerResourcePaged',
         'DataFlowResourcePaged',
         'DataFlowDebugSessionInfoPaged',
         'IntegrationRuntimeState',
    @@ -1837,11 +1841,6 @@
         'RunQueryOrder',
         'TriggerRunStatus',
         'DataFlowDebugCommandType',
    -    'TumblingWindowFrequency',
    -    'BlobEventTypes',
    -    'DayOfWeek',
    -    'DaysOfWeek',
    -    'RecurrenceFrequency',
         'GoogleAdWordsAuthenticationType',
         'SparkServerType',
         'SparkThriftTransportProtocol',
    @@ -1870,6 +1869,11 @@
         'DynamicsAuthenticationType',
         'OrcCompressionCodec',
         'AvroCompressionCodec',
    +    'TumblingWindowFrequency',
    +    'BlobEventTypes',
    +    'DayOfWeek',
    +    'DaysOfWeek',
    +    'RecurrenceFrequency',
         'DataFlowComputeType',
         'AzureFunctionActivityMethod',
         'WebActivityMethod',
    diff --git a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_data_factory_management_client_enums.py b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_data_factory_management_client_enums.py
    index 95741bbf0fa1..e30a4c509021 100644
    --- a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_data_factory_management_client_enums.py
    +++ b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_data_factory_management_client_enums.py
    @@ -131,51 +131,6 @@ class DataFlowDebugCommandType(str, Enum):
         execute_expression_query = "executeExpressionQuery"
     
     
    -class TumblingWindowFrequency(str, Enum):
    -
    -    minute = "Minute"
    -    hour = "Hour"
    -
    -
    -class BlobEventTypes(str, Enum):
    -
    -    microsoft_storage_blob_created = "Microsoft.Storage.BlobCreated"
    -    microsoft_storage_blob_deleted = "Microsoft.Storage.BlobDeleted"
    -
    -
    -class DayOfWeek(str, Enum):
    -
    -    sunday = "Sunday"
    -    monday = "Monday"
    -    tuesday = "Tuesday"
    -    wednesday = "Wednesday"
    -    thursday = "Thursday"
    -    friday = "Friday"
    -    saturday = "Saturday"
    -
    -
    -class DaysOfWeek(str, Enum):
    -
    -    sunday = "Sunday"
    -    monday = "Monday"
    -    tuesday = "Tuesday"
    -    wednesday = "Wednesday"
    -    thursday = "Thursday"
    -    friday = "Friday"
    -    saturday = "Saturday"
    -
    -
    -class RecurrenceFrequency(str, Enum):
    -
    -    not_specified = "NotSpecified"
    -    minute = "Minute"
    -    hour = "Hour"
    -    day = "Day"
    -    week = "Week"
    -    month = "Month"
    -    year = "Year"
    -
    -
     class GoogleAdWordsAuthenticationType(str, Enum):
     
         service_authentication = "ServiceAuthentication"
    @@ -366,6 +321,51 @@ class AvroCompressionCodec(str, Enum):
         bzip2 = "bzip2"
     
     
    +class TumblingWindowFrequency(str, Enum):
    +
    +    minute = "Minute"
    +    hour = "Hour"
    +
    +
    +class BlobEventTypes(str, Enum):
    +
    +    microsoft_storage_blob_created = "Microsoft.Storage.BlobCreated"
    +    microsoft_storage_blob_deleted = "Microsoft.Storage.BlobDeleted"
    +
    +
    +class DayOfWeek(str, Enum):
    +
    +    sunday = "Sunday"
    +    monday = "Monday"
    +    tuesday = "Tuesday"
    +    wednesday = "Wednesday"
    +    thursday = "Thursday"
    +    friday = "Friday"
    +    saturday = "Saturday"
    +
    +
    +class DaysOfWeek(str, Enum):
    +
    +    sunday = "Sunday"
    +    monday = "Monday"
    +    tuesday = "Tuesday"
    +    wednesday = "Wednesday"
    +    thursday = "Thursday"
    +    friday = "Friday"
    +    saturday = "Saturday"
    +
    +
    +class RecurrenceFrequency(str, Enum):
    +
    +    not_specified = "NotSpecified"
    +    minute = "Minute"
    +    hour = "Hour"
    +    day = "Day"
    +    week = "Week"
    +    month = "Month"
    +    year = "Year"
    +
    +
     class DataFlowComputeType(str, Enum):
     
         general = "General"
    diff --git a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_models.py b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_models.py
    index 853ec8158be8..7b71e5868005 100644
    --- a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_models.py
    +++ b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_models.py
    @@ -302,6 +302,28 @@ def __init__(self, **kwargs):
             self.job_version = kwargs.get('job_version', None)
     
     
    +class AdditionalColumns(Model):
    +    """Specify the column name and value of additional columns.
    +
    +    :param name: Additional column name. Type: string (or Expression with
    +     resultType string).
    +    :type name: object
    +    :param value: Additional column value. Type: string (or Expression with
    +     resultType string).
    +    :type value: object
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'object'},
    +        'value': {'key': 'value', 'type': 'object'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AdditionalColumns, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.value = kwargs.get('value', None)
    +
    +
     class LinkedService(Model):
         """The Azure Data Factory nested object which contains the information and
         credential which can be used to connect with related store or compute
    @@ -748,6 +770,11 @@ class TabularSource(CopySource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -761,6 +788,7 @@ class TabularSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         _subtype_map = {
    @@ -770,6 +798,7 @@ class TabularSource(CopySource):
         def __init__(self, **kwargs):
             super(TabularSource, self).__init__(**kwargs)
             self.query_timeout = kwargs.get('query_timeout', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'TabularSource'
     
     
    @@ -798,6 +827,11 @@ class AmazonMWSSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -814,6 +848,7 @@ class AmazonMWSSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -922,6 +957,11 @@ class AmazonRedshiftSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -944,6 +984,7 @@ class AmazonRedshiftSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
             'redshift_unload_settings': {'key': 'redshiftUnloadSettings', 'type': 'RedshiftUnloadSettings'},
         }
    @@ -1347,6 +1388,10 @@ class AmazonS3ReadSettings(StoreReadSettings):
         :param prefix: The prefix filter for the S3 object name. Type: string (or
          Expression with resultType string).
         :type prefix: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -1370,6 +1415,7 @@ class AmazonS3ReadSettings(StoreReadSettings):
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
             'prefix': {'key': 'prefix', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
    @@ -1381,6 +1427,7 @@ def __init__(self, **kwargs):
             self.wildcard_folder_path = kwargs.get('wildcard_folder_path', None)
             self.wildcard_file_name = kwargs.get('wildcard_file_name', None)
             self.prefix = kwargs.get('prefix', None)
    +        self.file_list_path = kwargs.get('file_list_path', None)
             self.enable_partition_discovery = kwargs.get('enable_partition_discovery', None)
             self.modified_datetime_start = kwargs.get('modified_datetime_start', None)
             self.modified_datetime_end = kwargs.get('modified_datetime_end', None)
    @@ -1784,6 +1831,11 @@ class AvroSource(CopySource):
         :type type: str
         :param store_settings: Avro store settings.
         :type store_settings: ~azure.mgmt.datafactory.models.StoreReadSettings
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -1797,11 +1849,13 @@ class AvroSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'store_settings': {'key': 'storeSettings', 'type': 'StoreReadSettings'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(AvroSource, self).__init__(**kwargs)
             self.store_settings = kwargs.get('store_settings', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'AvroSource'
     
     
    @@ -2249,6 +2303,10 @@ class AzureBlobFSReadSettings(StoreReadSettings):
         :param wildcard_file_name: Azure blobFS wildcardFileName. Type: string (or
          Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -2271,6 +2329,7 @@ class AzureBlobFSReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
    @@ -2281,6 +2340,7 @@ def __init__(self, **kwargs):
             self.recursive = kwargs.get('recursive', None)
             self.wildcard_folder_path = kwargs.get('wildcard_folder_path', None)
             self.wildcard_file_name = kwargs.get('wildcard_file_name', None)
    +        self.file_list_path = kwargs.get('file_list_path', None)
             self.enable_partition_discovery = kwargs.get('enable_partition_discovery', None)
             self.modified_datetime_start = kwargs.get('modified_datetime_start', None)
             self.modified_datetime_end = kwargs.get('modified_datetime_end', None)
    @@ -2638,6 +2698,10 @@ class AzureBlobStorageReadSettings(StoreReadSettings):
         :param prefix: The prefix filter for the Azure Blob name. Type: string (or
          Expression with resultType string).
         :type prefix: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -2661,6 +2725,7 @@ class AzureBlobStorageReadSettings(StoreReadSettings):
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
             'prefix': {'key': 'prefix', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
    @@ -2672,6 +2737,7 @@ def __init__(self, **kwargs):
             self.wildcard_folder_path = kwargs.get('wildcard_folder_path', None)
             self.wildcard_file_name = kwargs.get('wildcard_file_name', None)
             self.prefix = kwargs.get('prefix', None)
    +        self.file_list_path = kwargs.get('file_list_path', None)
             self.enable_partition_discovery = kwargs.get('enable_partition_discovery', None)
             self.modified_datetime_start = kwargs.get('modified_datetime_start', None)
             self.modified_datetime_end = kwargs.get('modified_datetime_end', None)
    @@ -3142,6 +3208,11 @@ class AzureDataExplorerSource(CopySource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9]))..
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -3158,6 +3229,7 @@ class AzureDataExplorerSource(CopySource):
             'query': {'key': 'query', 'type': 'object'},
             'no_truncation': {'key': 'noTruncation', 'type': 'object'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
    @@ -3165,6 +3237,7 @@ def __init__(self, **kwargs):
             self.query = kwargs.get('query', None)
             self.no_truncation = kwargs.get('no_truncation', None)
             self.query_timeout = kwargs.get('query_timeout', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'AzureDataExplorerSource'
     
     
    @@ -3533,6 +3606,10 @@ class AzureDataLakeStoreReadSettings(StoreReadSettings):
         :param wildcard_file_name: ADLS wildcardFileName. Type: string (or
          Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -3555,6 +3632,7 @@ class AzureDataLakeStoreReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
    @@ -3565,6 +3643,7 @@ def __init__(self, **kwargs):
             self.recursive = kwargs.get('recursive', None)
             self.wildcard_folder_path = kwargs.get('wildcard_folder_path', None)
             self.wildcard_file_name = kwargs.get('wildcard_file_name', None)
    +        self.file_list_path = kwargs.get('file_list_path', None)
             self.enable_partition_discovery = kwargs.get('enable_partition_discovery', None)
             self.modified_datetime_start = kwargs.get('modified_datetime_start', None)
             self.modified_datetime_end = kwargs.get('modified_datetime_end', None)
    @@ -3690,6 +3769,11 @@ class AzureDataLakeStoreWriteSettings(StoreWriteSettings):
         :type copy_behavior: object
         :param type: Required. Constant filled by server.
         :type type: str
    +    :param expiry_date_time: Specifies the expiry time of the written files.
    +     The time is applied to the UTC time zone in the format of
    +     "2018-12-01T05:00:00Z". Default value is NULL. Type: integer (or
    +     Expression with resultType integer).
    +    :type expiry_date_time: object
         """
     
         _validation = {
    @@ -3701,10 +3785,12 @@ class AzureDataLakeStoreWriteSettings(StoreWriteSettings):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'copy_behavior': {'key': 'copyBehavior', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
    +        'expiry_date_time': {'key': 'expiryDateTime', 'type': 'object'},
         }
     
         def __init__(self, **kwargs):
             super(AzureDataLakeStoreWriteSettings, self).__init__(**kwargs)
    +        self.expiry_date_time = kwargs.get('expiry_date_time', None)
             self.type = 'AzureDataLakeStoreWriteSettings'
     
     
    @@ -3828,6 +3914,10 @@ class AzureFileStorageReadSettings(StoreReadSettings):
         :param wildcard_file_name: Azure File Storage wildcardFileName. Type:
          string (or Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -3850,6 +3940,7 @@ class AzureFileStorageReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
    @@ -3860,6 +3951,7 @@ def __init__(self, **kwargs):
             self.recursive = kwargs.get('recursive', None)
             self.wildcard_folder_path = kwargs.get('wildcard_folder_path', None)
             self.wildcard_file_name = kwargs.get('wildcard_file_name', None)
    +        self.file_list_path = kwargs.get('file_list_path', None)
             self.enable_partition_discovery = kwargs.get('enable_partition_discovery', None)
             self.modified_datetime_start = kwargs.get('modified_datetime_start', None)
             self.modified_datetime_end = kwargs.get('modified_datetime_end', None)
    @@ -4194,6 +4286,11 @@ class AzureMariaDBSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -4210,6 +4307,7 @@ class AzureMariaDBSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -4834,6 +4932,11 @@ class AzureMySqlSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -4850,6 +4953,7 @@ class AzureMySqlSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -5061,6 +5165,11 @@ class AzurePostgreSqlSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -5077,6 +5186,7 @@ class AzurePostgreSqlSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -5852,6 +5962,11 @@ class AzureSqlSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param sql_reader_query: SQL reader query. Type: string (or Expression
          with resultType string).
         :type sql_reader_query: object
    @@ -5878,6 +5993,7 @@ class AzureSqlSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'sql_reader_query': {'key': 'sqlReaderQuery', 'type': 'object'},
             'sql_reader_stored_procedure_name': {'key': 'sqlReaderStoredProcedureName', 'type': 'object'},
             'stored_procedure_parameters': {'key': 'storedProcedureParameters', 'type': '{StoredProcedureParameter}'},
    @@ -6189,6 +6305,11 @@ class AzureTableSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param azure_table_source_query: Azure Table source query. Type: string
          (or Expression with resultType string).
         :type azure_table_source_query: object
    @@ -6209,6 +6330,7 @@ class AzureTableSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'azure_table_source_query': {'key': 'azureTableSourceQuery', 'type': 'object'},
             'azure_table_source_ignore_table_not_found': {'key': 'azureTableSourceIgnoreTableNotFound', 'type': 'object'},
         }
    @@ -6458,7 +6580,7 @@ class Trigger(Model):
         pipeline run.
     
         You probably want to use the sub-classes and not this class directly. Known
    -    sub-classes are: RerunTumblingWindowTrigger, ChainingTrigger,
    +    sub-classes are: ChainingTrigger, RerunTumblingWindowTrigger,
         TumblingWindowTrigger, MultiplePipelineTrigger
     
         Variables are only populated by the server, and will be ignored when
    @@ -6497,7 +6619,7 @@ class Trigger(Model):
         }
     
         _subtype_map = {
    -        'type': {'RerunTumblingWindowTrigger': 'RerunTumblingWindowTrigger', 'ChainingTrigger': 'ChainingTrigger', 'TumblingWindowTrigger': 'TumblingWindowTrigger', 'MultiplePipelineTrigger': 'MultiplePipelineTrigger'}
    +        'type': {'ChainingTrigger': 'ChainingTrigger', 'RerunTumblingWindowTrigger': 'RerunTumblingWindowTrigger', 'TumblingWindowTrigger': 'TumblingWindowTrigger', 'MultiplePipelineTrigger': 'MultiplePipelineTrigger'}
         }
     
         def __init__(self, **kwargs):
    @@ -6930,6 +7052,11 @@ class CassandraSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Should be a SQL-92 query expression or
          Cassandra Query Language (CQL) command. Type: string (or Expression with
          resultType string).
    @@ -6957,6 +7084,7 @@ class CassandraSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
             'consistency_level': {'key': 'consistencyLevel', 'type': 'str'},
         }
    @@ -7495,6 +7623,11 @@ class CommonDataServiceForAppsSource(CopySource):
          Microsoft Common Data Service for Apps (online & on-premises). Type:
          string (or Expression with resultType string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -7508,11 +7641,13 @@ class CommonDataServiceForAppsSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(CommonDataServiceForAppsSource, self).__init__(**kwargs)
             self.query = kwargs.get('query', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'CommonDataServiceForAppsSource'
     
     
    @@ -7712,6 +7847,11 @@ class ConcurSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -7728,6 +7868,7 @@ class ConcurSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -7790,10 +7931,19 @@ class CopyActivity(ExecutionActivity):
          settings when EnableSkipIncompatibleRow is true.
         :type redirect_incompatible_row_settings:
          ~azure.mgmt.datafactory.models.RedirectIncompatibleRowSettings
    +    :param log_storage_settings: Log storage settings customer need to provide
    +     when enabling session log.
    +    :type log_storage_settings:
    +     ~azure.mgmt.datafactory.models.LogStorageSettings
         :param preserve_rules: Preserve Rules.
         :type preserve_rules: list[object]
         :param preserve: Preserve rules.
         :type preserve: list[object]
    +    :param validate_data_consistency: Whether to enable Data Consistency
    +     validation. Type: boolean (or Expression with resultType boolean).
    +    :type validate_data_consistency: object
    +    :param skip_error_file: Specify the fault tolerance for data consistency.
    +    :type skip_error_file: ~azure.mgmt.datafactory.models.SkipErrorFile
         :param inputs: List of inputs for the activity.
         :type inputs: list[~azure.mgmt.datafactory.models.DatasetReference]
         :param outputs: List of outputs for the activity.
    @@ -7825,8 +7975,11 @@ class CopyActivity(ExecutionActivity):
             'data_integration_units': {'key': 'typeProperties.dataIntegrationUnits', 'type': 'object'},
             'enable_skip_incompatible_row': {'key': 'typeProperties.enableSkipIncompatibleRow', 'type': 'object'},
             'redirect_incompatible_row_settings': {'key': 'typeProperties.redirectIncompatibleRowSettings', 'type': 'RedirectIncompatibleRowSettings'},
    +        'log_storage_settings': {'key': 'typeProperties.logStorageSettings', 'type': 'LogStorageSettings'},
             'preserve_rules': {'key': 'typeProperties.preserveRules', 'type': '[object]'},
             'preserve': {'key': 'typeProperties.preserve', 'type': '[object]'},
    +        'validate_data_consistency': {'key': 'typeProperties.validateDataConsistency', 'type': 'object'},
    +        'skip_error_file': {'key': 'typeProperties.skipErrorFile', 'type': 'SkipErrorFile'},
             'inputs': {'key': 'inputs', 'type': '[DatasetReference]'},
             'outputs': {'key': 'outputs', 'type': '[DatasetReference]'},
         }
    @@ -7842,8 +7995,11 @@ def __init__(self, **kwargs):
             self.data_integration_units = kwargs.get('data_integration_units', None)
             self.enable_skip_incompatible_row = kwargs.get('enable_skip_incompatible_row', None)
             self.redirect_incompatible_row_settings = kwargs.get('redirect_incompatible_row_settings', None)
    +        self.log_storage_settings = kwargs.get('log_storage_settings', None)
             self.preserve_rules = kwargs.get('preserve_rules', None)
             self.preserve = kwargs.get('preserve', None)
    +        self.validate_data_consistency = kwargs.get('validate_data_consistency', None)
    +        self.skip_error_file = kwargs.get('skip_error_file', None)
             self.inputs = kwargs.get('inputs', None)
             self.outputs = kwargs.get('outputs', None)
             self.type = 'Copy'
    @@ -8126,6 +8282,11 @@ class CosmosDbMongoDbApiSource(CopySource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -8142,6 +8303,7 @@ class CosmosDbMongoDbApiSource(CopySource):
             'cursor_methods': {'key': 'cursorMethods', 'type': 'MongoDbCursorMethodsProperties'},
             'batch_size': {'key': 'batchSize', 'type': 'object'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
    @@ -8150,6 +8312,7 @@ def __init__(self, **kwargs):
             self.cursor_methods = kwargs.get('cursor_methods', None)
             self.batch_size = kwargs.get('batch_size', None)
             self.query_timeout = kwargs.get('query_timeout', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'CosmosDbMongoDbApiSource'
     
     
    @@ -8299,6 +8462,11 @@ class CosmosDbSqlApiSource(CopySource):
         :param preferred_regions: Preferred regions. Type: array of strings (or
          Expression with resultType array of strings).
         :type preferred_regions: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -8314,6 +8482,7 @@ class CosmosDbSqlApiSource(CopySource):
             'query': {'key': 'query', 'type': 'object'},
             'page_size': {'key': 'pageSize', 'type': 'object'},
             'preferred_regions': {'key': 'preferredRegions', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
    @@ -8321,6 +8490,7 @@ def __init__(self, **kwargs):
             self.query = kwargs.get('query', None)
             self.page_size = kwargs.get('page_size', None)
             self.preferred_regions = kwargs.get('preferred_regions', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'CosmosDbSqlApiSource'
     
     
    @@ -8407,6 +8577,11 @@ class CouchbaseSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -8423,6 +8598,7 @@ class CouchbaseSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -9925,37 +10101,47 @@ class Db2LinkedService(LinkedService):
         :type annotations: list[object]
         :param type: Required. Constant filled by server.
         :type type: str
    -    :param server: Required. Server name for connection. Type: string (or
    -     Expression with resultType string).
    +    :param connection_string: The connection string. It is mutually exclusive
    +     with server, database, authenticationType, userName, packageCollection and
    +     certificateCommonName property. Type: string, SecureString or
    +     AzureKeyVaultSecretReference.
    +    :type connection_string: object
    +    :param server: Server name for connection. It is mutually exclusive with
    +     connectionString property. Type: string (or Expression with resultType
    +     string).
         :type server: object
    -    :param database: Required. Database name for connection. Type: string (or
    -     Expression with resultType string).
    +    :param database: Database name for connection. It is mutually exclusive
    +     with connectionString property. Type: string (or Expression with
    +     resultType string).
         :type database: object
         :param authentication_type: AuthenticationType to be used for connection.
    -     Possible values include: 'Basic'
    +     It is mutually exclusive with connectionString property. Possible values
    +     include: 'Basic'
         :type authentication_type: str or
          ~azure.mgmt.datafactory.models.Db2AuthenticationType
    -    :param username: Username for authentication. Type: string (or Expression
    -     with resultType string).
    +    :param username: Username for authentication. It is mutually exclusive
    +     with connectionString property. Type: string (or Expression with
    +     resultType string).
         :type username: object
         :param password: Password for authentication.
         :type password: ~azure.mgmt.datafactory.models.SecretBase
         :param package_collection: Under where packages are created when querying
    -     database. Type: string (or Expression with resultType string).
    +     database. It is mutually exclusive with connectionString property. Type:
    +     string (or Expression with resultType string).
         :type package_collection: object
         :param certificate_common_name: Certificate Common Name when TLS is
    -     enabled. Type: string (or Expression with resultType string).
    +     enabled. It is mutually exclusive with connectionString property. Type:
    +     string (or Expression with resultType string).
         :type certificate_common_name: object
         :param encrypted_credential: The encrypted credential used for
          authentication. Credentials are encrypted using the integration runtime
    -     credential manager. Type: string (or Expression with resultType string).
    +     credential manager. It is mutually exclusive with connectionString
    +     property. Type: string (or Expression with resultType string).
         :type encrypted_credential: object
         """
     
         _validation = {
             'type': {'required': True},
    -        'server': {'required': True},
    -        'database': {'required': True},
         }
     
         _attribute_map = {
    @@ -9965,6 +10151,7 @@ class Db2LinkedService(LinkedService):
             'parameters': {'key': 'parameters', 'type': '{ParameterSpecification}'},
             'annotations': {'key': 'annotations', 'type': '[object]'},
             'type': {'key': 'type', 'type': 'str'},
    +        'connection_string': {'key': 'typeProperties.connectionString', 'type': 'object'},
             'server': {'key': 'typeProperties.server', 'type': 'object'},
             'database': {'key': 'typeProperties.database', 'type': 'object'},
             'authentication_type': {'key': 'typeProperties.authenticationType', 'type': 'str'},
    @@ -9977,6 +10164,7 @@ class Db2LinkedService(LinkedService):
     
         def __init__(self, **kwargs):
             super(Db2LinkedService, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
             self.server = kwargs.get('server', None)
             self.database = kwargs.get('database', None)
             self.authentication_type = kwargs.get('authentication_type', None)
    @@ -10013,6 +10201,11 @@ class Db2Source(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -10029,6 +10222,7 @@ class Db2Source(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -10459,6 +10653,11 @@ class DelimitedTextSource(CopySource):
         :param format_settings: DelimitedText format settings.
         :type format_settings:
          ~azure.mgmt.datafactory.models.DelimitedTextReadSettings
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -10473,12 +10672,14 @@ class DelimitedTextSource(CopySource):
             'type': {'key': 'type', 'type': 'str'},
             'store_settings': {'key': 'storeSettings', 'type': 'StoreReadSettings'},
             'format_settings': {'key': 'formatSettings', 'type': 'DelimitedTextReadSettings'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(DelimitedTextSource, self).__init__(**kwargs)
             self.store_settings = kwargs.get('store_settings', None)
             self.format_settings = kwargs.get('format_settings', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'DelimitedTextSource'
     
     
    @@ -10739,6 +10940,11 @@ class DocumentDbCollectionSource(CopySource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -10754,6 +10960,7 @@ class DocumentDbCollectionSource(CopySource):
             'query': {'key': 'query', 'type': 'object'},
             'nesting_separator': {'key': 'nestingSeparator', 'type': 'object'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
    @@ -10761,6 +10968,7 @@ def __init__(self, **kwargs):
             self.query = kwargs.get('query', None)
             self.nesting_separator = kwargs.get('nesting_separator', None)
             self.query_timeout = kwargs.get('query_timeout', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'DocumentDbCollectionSource'
     
     
    @@ -10846,6 +11054,11 @@ class DrillSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -10862,6 +11075,7 @@ class DrillSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -11157,6 +11371,11 @@ class DynamicsAXSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -11173,6 +11392,7 @@ class DynamicsAXSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -11463,6 +11683,11 @@ class DynamicsCrmSource(CopySource):
          Microsoft Dynamics CRM (online & on-premises). Type: string (or Expression
          with resultType string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -11476,11 +11701,13 @@ class DynamicsCrmSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(DynamicsCrmSource, self).__init__(**kwargs)
             self.query = kwargs.get('query', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'DynamicsCrmSource'
     
     
    @@ -11762,6 +11989,11 @@ class DynamicsSource(CopySource):
          Microsoft Dynamics (online & on-premises). Type: string (or Expression
          with resultType string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -11775,11 +12007,13 @@ class DynamicsSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(DynamicsSource, self).__init__(**kwargs)
             self.query = kwargs.get('query', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'DynamicsSource'
     
     
    @@ -11947,6 +12181,11 @@ class EloquaSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -11963,6 +12202,7 @@ class EloquaSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -12821,6 +13061,10 @@ class FileServerReadSettings(StoreReadSettings):
         :param wildcard_file_name: FileServer wildcardFileName. Type: string (or
          Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -12843,6 +13087,7 @@ class FileServerReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
    @@ -12853,6 +13098,7 @@ def __init__(self, **kwargs):
             self.recursive = kwargs.get('recursive', None)
             self.wildcard_folder_path = kwargs.get('wildcard_folder_path', None)
             self.wildcard_file_name = kwargs.get('wildcard_file_name', None)
    +        self.file_list_path = kwargs.get('file_list_path', None)
             self.enable_partition_discovery = kwargs.get('enable_partition_discovery', None)
             self.modified_datetime_start = kwargs.get('modified_datetime_start', None)
             self.modified_datetime_end = kwargs.get('modified_datetime_end', None)
    @@ -13060,6 +13306,11 @@ class FileSystemSource(CopySource):
          recursively. Default is true. Type: boolean (or Expression with resultType
          boolean).
         :type recursive: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -13073,11 +13324,13 @@ class FileSystemSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'recursive': {'key': 'recursive', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(FileSystemSource, self).__init__(**kwargs)
             self.recursive = kwargs.get('recursive', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'FileSystemSource'
     
     
    @@ -13215,6 +13468,10 @@ class FtpReadSettings(StoreReadSettings):
         :param wildcard_file_name: Ftp wildcardFileName. Type: string (or
          Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param use_binary_transfer: Specify whether to use binary transfer mode
          for FTP stores.
         :type use_binary_transfer: bool
    @@ -13231,6 +13488,7 @@ class FtpReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'use_binary_transfer': {'key': 'useBinaryTransfer', 'type': 'bool'},
         }
     
    @@ -13239,6 +13497,7 @@ def __init__(self, **kwargs):
             self.recursive = kwargs.get('recursive', None)
             self.wildcard_folder_path = kwargs.get('wildcard_folder_path', None)
             self.wildcard_file_name = kwargs.get('wildcard_file_name', None)
    +        self.file_list_path = kwargs.get('file_list_path', None)
             self.use_binary_transfer = kwargs.get('use_binary_transfer', None)
             self.type = 'FtpReadSettings'
     
    @@ -13695,6 +13954,11 @@ class GoogleAdWordsSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -13711,6 +13975,7 @@ class GoogleAdWordsSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -13927,6 +14192,11 @@ class GoogleBigQuerySource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -13943,6 +14213,7 @@ class GoogleBigQuerySource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -14089,6 +14360,10 @@ class GoogleCloudStorageReadSettings(StoreReadSettings):
         :param prefix: The prefix filter for the Google Cloud Storage object name.
          Type: string (or Expression with resultType string).
         :type prefix: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -14112,6 +14387,7 @@ class GoogleCloudStorageReadSettings(StoreReadSettings):
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
             'prefix': {'key': 'prefix', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
    @@ -14123,6 +14399,7 @@ def __init__(self, **kwargs):
             self.wildcard_folder_path = kwargs.get('wildcard_folder_path', None)
             self.wildcard_file_name = kwargs.get('wildcard_file_name', None)
             self.prefix = kwargs.get('prefix', None)
    +        self.file_list_path = kwargs.get('file_list_path', None)
             self.enable_partition_discovery = kwargs.get('enable_partition_discovery', None)
             self.modified_datetime_start = kwargs.get('modified_datetime_start', None)
             self.modified_datetime_end = kwargs.get('modified_datetime_end', None)
    @@ -14211,6 +14488,11 @@ class GreenplumSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -14227,6 +14509,7 @@ class GreenplumSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -14493,6 +14776,11 @@ class HBaseSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -14509,6 +14797,7 @@ class HBaseSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -14645,6 +14934,10 @@ class HdfsReadSettings(StoreReadSettings):
         :param wildcard_file_name: HDFS wildcardFileName. Type: string (or
          Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -14669,6 +14962,7 @@ class HdfsReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
    @@ -14680,6 +14974,7 @@ def __init__(self, **kwargs):
             self.recursive = kwargs.get('recursive', None)
             self.wildcard_folder_path = kwargs.get('wildcard_folder_path', None)
             self.wildcard_file_name = kwargs.get('wildcard_file_name', None)
    +        self.file_list_path = kwargs.get('file_list_path', None)
             self.enable_partition_discovery = kwargs.get('enable_partition_discovery', None)
             self.modified_datetime_start = kwargs.get('modified_datetime_start', None)
             self.modified_datetime_end = kwargs.get('modified_datetime_end', None)
    @@ -15721,6 +16016,11 @@ class HiveSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -15737,6 +16037,7 @@ class HiveSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -16234,6 +16535,11 @@ class HubspotSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -16250,6 +16556,7 @@ class HubspotSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -16519,6 +16826,11 @@ class ImpalaSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -16535,6 +16847,7 @@ class ImpalaSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -16697,6 +17010,11 @@ class InformixSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -16713,6 +17031,7 @@ class InformixSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -17676,6 +17995,11 @@ class JiraSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -17692,6 +18016,7 @@ class JiraSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -17924,6 +18249,11 @@ class JsonSource(CopySource):
         :type type: str
         :param store_settings: Json store settings.
         :type store_settings: ~azure.mgmt.datafactory.models.StoreReadSettings
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -17937,11 +18267,13 @@ class JsonSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'store_settings': {'key': 'storeSettings', 'type': 'StoreReadSettings'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(JsonSource, self).__init__(**kwargs)
             self.store_settings = kwargs.get('store_settings', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'JsonSource'
     
     
    @@ -18490,6 +18822,11 @@ class MagentoSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -18506,6 +18843,7 @@ class MagentoSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -18901,6 +19239,11 @@ class MariaDBSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -18917,6 +19260,7 @@ class MariaDBSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -19149,6 +19493,11 @@ class MarketoSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -19165,6 +19514,7 @@ class MarketoSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -19326,6 +19676,11 @@ class MicrosoftAccessSource(CopySource):
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -19339,11 +19694,13 @@ class MicrosoftAccessSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(MicrosoftAccessSource, self).__init__(**kwargs)
             self.query = kwargs.get('query', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'MicrosoftAccessSource'
     
     
    @@ -19630,6 +19987,11 @@ class MongoDbSource(CopySource):
         :param query: Database query. Should be a SQL-92 query expression. Type:
          string (or Expression with resultType string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -19643,11 +20005,13 @@ class MongoDbSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(MongoDbSource, self).__init__(**kwargs)
             self.query = kwargs.get('query', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'MongoDbSource'
     
     
    @@ -19804,6 +20168,11 @@ class MongoDbV2Source(CopySource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -19820,6 +20189,7 @@ class MongoDbV2Source(CopySource):
             'cursor_methods': {'key': 'cursorMethods', 'type': 'MongoDbCursorMethodsProperties'},
             'batch_size': {'key': 'batchSize', 'type': 'object'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
    @@ -19828,6 +20198,7 @@ def __init__(self, **kwargs):
             self.cursor_methods = kwargs.get('cursor_methods', None)
             self.batch_size = kwargs.get('batch_size', None)
             self.query_timeout = kwargs.get('query_timeout', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'MongoDbV2Source'
     
     
    @@ -19914,6 +20285,11 @@ class MySqlSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -19930,6 +20306,7 @@ class MySqlSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -20111,6 +20488,11 @@ class NetezzaSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -20136,6 +20518,7 @@ class NetezzaSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
             'partition_option': {'key': 'partitionOption', 'type': 'str'},
             'partition_settings': {'key': 'partitionSettings', 'type': 'NetezzaPartitionSettings'},
    @@ -20418,6 +20801,11 @@ class ODataSource(CopySource):
         :param query: OData query. For example, "$top=1". Type: string (or
          Expression with resultType string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -20431,11 +20819,13 @@ class ODataSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(ODataSource, self).__init__(**kwargs)
             self.query = kwargs.get('query', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'ODataSource'
     
     
    @@ -20592,6 +20982,11 @@ class OdbcSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -20608,6 +21003,7 @@ class OdbcSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -21355,6 +21751,11 @@ class OracleServiceCloudSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -21371,6 +21772,7 @@ class OracleServiceCloudSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -21471,6 +21873,11 @@ class OracleSource(CopySource):
          source partitioning.
         :type partition_settings:
          ~azure.mgmt.datafactory.models.OraclePartitionSettings
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -21487,6 +21894,7 @@ class OracleSource(CopySource):
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
             'partition_option': {'key': 'partitionOption', 'type': 'str'},
             'partition_settings': {'key': 'partitionSettings', 'type': 'OraclePartitionSettings'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
    @@ -21495,6 +21903,7 @@ def __init__(self, **kwargs):
             self.query_timeout = kwargs.get('query_timeout', None)
             self.partition_option = kwargs.get('partition_option', None)
             self.partition_settings = kwargs.get('partition_settings', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'OracleSource'
     
     
    @@ -21744,6 +22153,11 @@ class OrcSource(CopySource):
         :type type: str
         :param store_settings: ORC store settings.
         :type store_settings: ~azure.mgmt.datafactory.models.StoreReadSettings
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -21757,11 +22171,13 @@ class OrcSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'store_settings': {'key': 'storeSettings', 'type': 'StoreReadSettings'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(OrcSource, self).__init__(**kwargs)
             self.store_settings = kwargs.get('store_settings', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'OrcSource'
     
     
    @@ -21966,6 +22382,11 @@ class ParquetSource(CopySource):
         :type type: str
         :param store_settings: Parquet store settings.
         :type store_settings: ~azure.mgmt.datafactory.models.StoreReadSettings
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -21979,11 +22400,13 @@ class ParquetSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'store_settings': {'key': 'storeSettings', 'type': 'StoreReadSettings'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(ParquetSource, self).__init__(**kwargs)
             self.store_settings = kwargs.get('store_settings', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'ParquetSource'
     
     
    @@ -22152,6 +22575,11 @@ class PaypalSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -22168,6 +22596,7 @@ class PaypalSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -22381,6 +22810,11 @@ class PhoenixSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -22397,6 +22831,7 @@ class PhoenixSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -22811,6 +23246,11 @@ class PostgreSqlSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -22827,6 +23267,7 @@ class PostgreSqlSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -23121,6 +23562,11 @@ class PrestoSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -23137,6 +23583,7 @@ class PrestoSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -23319,6 +23766,11 @@ class QuickBooksSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -23335,6 +23787,7 @@ class QuickBooksSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -23503,6 +23956,11 @@ class RelationalSource(CopySource):
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -23516,11 +23974,13 @@ class RelationalSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(RelationalSource, self).__init__(**kwargs)
             self.query = kwargs.get('query', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'RelationalSource'
     
     
    @@ -23584,48 +24044,6 @@ def __init__(self, **kwargs):
             self.type = 'RelationalTable'
     
     
    -class RerunTriggerResource(SubResource):
    -    """RerunTrigger resource type.
    -
    -    Variables are only populated by the server, and will be ignored when
    -    sending a request.
    -
    -    All required parameters must be populated in order to send to Azure.
    -
    -    :ivar id: The resource identifier.
    -    :vartype id: str
    -    :ivar name: The resource name.
    -    :vartype name: str
    -    :ivar type: The resource type.
    -    :vartype type: str
    -    :ivar etag: Etag identifies change in the resource.
    -    :vartype etag: str
    -    :param properties: Required. Properties of the rerun trigger.
    -    :type properties:
    -     ~azure.mgmt.datafactory.models.RerunTumblingWindowTrigger
    -    """
    -
    -    _validation = {
    -        'id': {'readonly': True},
    -        'name': {'readonly': True},
    -        'type': {'readonly': True},
    -        'etag': {'readonly': True},
    -        'properties': {'required': True},
    -    }
    -
    -    _attribute_map = {
    -        'id': {'key': 'id', 'type': 'str'},
    -        'name': {'key': 'name', 'type': 'str'},
    -        'type': {'key': 'type', 'type': 'str'},
    -        'etag': {'key': 'etag', 'type': 'str'},
    -        'properties': {'key': 'properties', 'type': 'RerunTumblingWindowTrigger'},
    -    }
    -
    -    def __init__(self, **kwargs):
    -        super(RerunTriggerResource, self).__init__(**kwargs)
    -        self.properties = kwargs.get('properties', None)
    -
    -
     class RerunTumblingWindowTrigger(Trigger):
         """Trigger that schedules pipeline reruns for all fixed time interval windows
         from a requested start time to requested end time.
    @@ -23650,7 +24068,7 @@ class RerunTumblingWindowTrigger(Trigger):
         :type annotations: list[object]
         :param type: Required. Constant filled by server.
         :type type: str
    -    :param parent_trigger: The parent trigger reference.
    +    :param parent_trigger: Required. The parent trigger reference.
         :type parent_trigger: object
         :param requested_start_time: Required. The start time for the time period
          for which restatement is initiated. Only UTC time is currently supported.
    @@ -23658,17 +24076,18 @@ class RerunTumblingWindowTrigger(Trigger):
         :param requested_end_time: Required. The end time for the time period for
          which restatement is initiated. Only UTC time is currently supported.
         :type requested_end_time: datetime
    -    :param max_concurrency: Required. The max number of parallel time windows
    -     (ready for execution) for which a rerun is triggered.
    -    :type max_concurrency: int
    +    :param rerun_concurrency: Required. The max number of parallel time
    +     windows (ready for execution) for which a rerun is triggered.
    +    :type rerun_concurrency: int
         """
     
         _validation = {
             'runtime_state': {'readonly': True},
             'type': {'required': True},
    +        'parent_trigger': {'required': True},
             'requested_start_time': {'required': True},
             'requested_end_time': {'required': True},
    -        'max_concurrency': {'required': True, 'maximum': 50, 'minimum': 1},
    +        'rerun_concurrency': {'required': True, 'maximum': 50, 'minimum': 1},
         }
     
         _attribute_map = {
    @@ -23680,7 +24099,7 @@ class RerunTumblingWindowTrigger(Trigger):
             'parent_trigger': {'key': 'typeProperties.parentTrigger', 'type': 'object'},
             'requested_start_time': {'key': 'typeProperties.requestedStartTime', 'type': 'iso-8601'},
             'requested_end_time': {'key': 'typeProperties.requestedEndTime', 'type': 'iso-8601'},
    -        'max_concurrency': {'key': 'typeProperties.maxConcurrency', 'type': 'int'},
    +        'rerun_concurrency': {'key': 'typeProperties.rerunConcurrency', 'type': 'int'},
         }
     
         def __init__(self, **kwargs):
    @@ -23688,45 +24107,10 @@ def __init__(self, **kwargs):
             self.parent_trigger = kwargs.get('parent_trigger', None)
             self.requested_start_time = kwargs.get('requested_start_time', None)
             self.requested_end_time = kwargs.get('requested_end_time', None)
    -        self.max_concurrency = kwargs.get('max_concurrency', None)
    +        self.rerun_concurrency = kwargs.get('rerun_concurrency', None)
             self.type = 'RerunTumblingWindowTrigger'
     
     
    -class RerunTumblingWindowTriggerActionParameters(Model):
    -    """Rerun tumbling window trigger Parameters.
    -
    -    All required parameters must be populated in order to send to Azure.
    -
    -    :param start_time: Required. The start time for the time period for which
    -     restatement is initiated. Only UTC time is currently supported.
    -    :type start_time: datetime
    -    :param end_time: Required. The end time for the time period for which
    -     restatement is initiated. Only UTC time is currently supported.
    -    :type end_time: datetime
    -    :param max_concurrency: Required. The max number of parallel time windows
    -     (ready for execution) for which a rerun is triggered.
    -    :type max_concurrency: int
    -    """
    -
    -    _validation = {
    -        'start_time': {'required': True},
    -        'end_time': {'required': True},
    -        'max_concurrency': {'required': True, 'maximum': 50, 'minimum': 1},
    -    }
    -
    -    _attribute_map = {
    -        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
    -        'end_time': {'key': 'endTime', 'type': 'iso-8601'},
    -        'max_concurrency': {'key': 'maxConcurrency', 'type': 'int'},
    -    }
    -
    -    def __init__(self, **kwargs):
    -        super(RerunTumblingWindowTriggerActionParameters, self).__init__(**kwargs)
    -        self.start_time = kwargs.get('start_time', None)
    -        self.end_time = kwargs.get('end_time', None)
    -        self.max_concurrency = kwargs.get('max_concurrency', None)
    -
    -
     class ResponsysLinkedService(LinkedService):
         """Responsys linked service.
     
    @@ -23894,6 +24278,11 @@ class ResponsysSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -23910,6 +24299,7 @@ class ResponsysSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -24138,6 +24528,11 @@ class RestSource(CopySource):
         :param request_interval: The time to await before sending next page
          request.
         :type request_interval: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -24156,6 +24551,7 @@ class RestSource(CopySource):
             'pagination_rules': {'key': 'paginationRules', 'type': 'object'},
             'http_request_timeout': {'key': 'httpRequestTimeout', 'type': 'object'},
             'request_interval': {'key': 'requestInterval', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
    @@ -24166,6 +24562,7 @@ def __init__(self, **kwargs):
             self.pagination_rules = kwargs.get('pagination_rules', None)
             self.http_request_timeout = kwargs.get('http_request_timeout', None)
             self.request_interval = kwargs.get('request_interval', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'RestSource'
     
     
    @@ -24345,9 +24742,12 @@ class SalesforceLinkedService(LinkedService):
         :param password: The password for Basic authentication of the Salesforce
          instance.
         :type password: ~azure.mgmt.datafactory.models.SecretBase
    -    :param security_token: The security token is required to remotely access
    +    :param security_token: The security token is optional to remotely access
          Salesforce instance.
         :type security_token: ~azure.mgmt.datafactory.models.SecretBase
    +    :param api_version: The Salesforce API version used in ADF. Type: string
    +     (or Expression with resultType string).
    +    :type api_version: object
         :param encrypted_credential: The encrypted credential used for
          authentication. Credentials are encrypted using the integration runtime
          credential manager. Type: string (or Expression with resultType string).
    @@ -24369,6 +24769,7 @@ class SalesforceLinkedService(LinkedService):
             'username': {'key': 'typeProperties.username', 'type': 'object'},
             'password': {'key': 'typeProperties.password', 'type': 'SecretBase'},
             'security_token': {'key': 'typeProperties.securityToken', 'type': 'SecretBase'},
    +        'api_version': {'key': 'typeProperties.apiVersion', 'type': 'object'},
             'encrypted_credential': {'key': 'typeProperties.encryptedCredential', 'type': 'object'},
         }
     
    @@ -24378,6 +24779,7 @@ def __init__(self, **kwargs):
             self.username = kwargs.get('username', None)
             self.password = kwargs.get('password', None)
             self.security_token = kwargs.get('security_token', None)
    +        self.api_version = kwargs.get('api_version', None)
             self.encrypted_credential = kwargs.get('encrypted_credential', None)
             self.type = 'Salesforce'
     
    @@ -24546,6 +24948,11 @@ class SalesforceMarketingCloudSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -24562,6 +24969,7 @@ class SalesforceMarketingCloudSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -24664,9 +25072,12 @@ class SalesforceServiceCloudLinkedService(LinkedService):
         :param password: The password for Basic authentication of the Salesforce
          instance.
         :type password: ~azure.mgmt.datafactory.models.SecretBase
    -    :param security_token: The security token is required to remotely access
    +    :param security_token: The security token is optional to remotely access
          Salesforce instance.
         :type security_token: ~azure.mgmt.datafactory.models.SecretBase
    +    :param api_version: The Salesforce API version used in ADF. Type: string
    +     (or Expression with resultType string).
    +    :type api_version: object
         :param extended_properties: Extended properties appended to the connection
          string. Type: string (or Expression with resultType string).
         :type extended_properties: object
    @@ -24691,6 +25102,7 @@ class SalesforceServiceCloudLinkedService(LinkedService):
             'username': {'key': 'typeProperties.username', 'type': 'object'},
             'password': {'key': 'typeProperties.password', 'type': 'SecretBase'},
             'security_token': {'key': 'typeProperties.securityToken', 'type': 'SecretBase'},
    +        'api_version': {'key': 'typeProperties.apiVersion', 'type': 'object'},
             'extended_properties': {'key': 'typeProperties.extendedProperties', 'type': 'object'},
             'encrypted_credential': {'key': 'typeProperties.encryptedCredential', 'type': 'object'},
         }
    @@ -24701,6 +25113,7 @@ def __init__(self, **kwargs):
             self.username = kwargs.get('username', None)
             self.password = kwargs.get('password', None)
             self.security_token = kwargs.get('security_token', None)
    +        self.api_version = kwargs.get('api_version', None)
             self.extended_properties = kwargs.get('extended_properties', None)
             self.encrypted_credential = kwargs.get('encrypted_credential', None)
             self.type = 'SalesforceServiceCloud'
    @@ -24866,6 +25279,11 @@ class SalesforceServiceCloudSource(CopySource):
          Query. Possible values include: 'Query', 'QueryAll'
         :type read_behavior: str or
          ~azure.mgmt.datafactory.models.SalesforceSourceReadBehavior
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -24880,12 +25298,14 @@ class SalesforceServiceCloudSource(CopySource):
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
             'read_behavior': {'key': 'readBehavior', 'type': 'str'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(SalesforceServiceCloudSource, self).__init__(**kwargs)
             self.query = kwargs.get('query', None)
             self.read_behavior = kwargs.get('read_behavior', None)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'SalesforceServiceCloudSource'
     
     
    @@ -24986,6 +25406,11 @@ class SalesforceSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -25006,6 +25431,7 @@ class SalesforceSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
             'read_behavior': {'key': 'readBehavior', 'type': 'str'},
         }
    @@ -25173,6 +25599,11 @@ class SapBwSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: MDX query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -25189,6 +25620,7 @@ class SapBwSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -25403,6 +25835,11 @@ class SapCloudForCustomerSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: SAP Cloud for Customer OData query. For example, "$top=1".
          Type: string (or Expression with resultType string).
         :type query: object
    @@ -25419,6 +25856,7 @@ class SapCloudForCustomerSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -25578,6 +26016,11 @@ class SapEccSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: SAP ECC OData query. For example, "$top=1". Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -25594,6 +26037,7 @@ class SapEccSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -25719,6 +26163,11 @@ class SapHanaSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: SAP HANA Sql query. Type: string (or Expression with
          resultType string).
         :type query: object
    @@ -25747,6 +26196,7 @@ class SapHanaSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
             'packet_size': {'key': 'packetSize', 'type': 'object'},
             'partition_option': {'key': 'partitionOption', 'type': 'str'},
    @@ -25940,6 +26390,11 @@ class SapOpenHubSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param exclude_last_request: Whether to exclude the records of the last
          request. The default value is true. Type: boolean (or Expression with
          resultType boolean).
    @@ -25962,6 +26417,7 @@ class SapOpenHubSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'exclude_last_request': {'key': 'excludeLastRequest', 'type': 'object'},
             'base_request_id': {'key': 'baseRequestId', 'type': 'object'},
         }
    @@ -26297,6 +26753,11 @@ class SapTableSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param row_count: The number of rows to be retrieved. Type: integer(or
          Expression with resultType integer).
         :type row_count: object
    @@ -26342,6 +26803,7 @@ class SapTableSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'row_count': {'key': 'rowCount', 'type': 'object'},
             'row_skips': {'key': 'rowSkips', 'type': 'object'},
             'rfc_table_fields': {'key': 'rfcTableFields', 'type': 'object'},
    @@ -27032,6 +27494,11 @@ class ServiceNowSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -27048,6 +27515,7 @@ class ServiceNowSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -27162,6 +27630,10 @@ class SftpReadSettings(StoreReadSettings):
         :param wildcard_file_name: Sftp wildcardFileName. Type: string (or
          Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param modified_datetime_start: The start of file's modified datetime.
          Type: string (or Expression with resultType string).
         :type modified_datetime_start: object
    @@ -27181,6 +27653,7 @@ class SftpReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
         }
    @@ -27190,6 +27663,7 @@ def __init__(self, **kwargs):
             self.recursive = kwargs.get('recursive', None)
             self.wildcard_folder_path = kwargs.get('wildcard_folder_path', None)
             self.wildcard_file_name = kwargs.get('wildcard_file_name', None)
    +        self.file_list_path = kwargs.get('file_list_path', None)
             self.modified_datetime_start = kwargs.get('modified_datetime_start', None)
             self.modified_datetime_end = kwargs.get('modified_datetime_end', None)
             self.type = 'SftpReadSettings'
    @@ -27322,6 +27796,10 @@ class SftpWriteSettings(StoreWriteSettings):
          SFTP server. Default value: 01:00:00 (one hour). Type: string (or
          Expression with resultType string).
         :type operation_timeout: object
    +    :param use_temp_file_rename: Upload to temporary file(s) and rename.
    +     Disable this option if your SFTP server doesn't support rename operation.
    +     Type: boolean (or Expression with resultType boolean).
    +    :type use_temp_file_rename: object
         """
     
         _validation = {
    @@ -27334,11 +27812,13 @@ class SftpWriteSettings(StoreWriteSettings):
             'copy_behavior': {'key': 'copyBehavior', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'operation_timeout': {'key': 'operationTimeout', 'type': 'object'},
    +        'use_temp_file_rename': {'key': 'useTempFileRename', 'type': 'object'},
         }
     
         def __init__(self, **kwargs):
             super(SftpWriteSettings, self).__init__(**kwargs)
             self.operation_timeout = kwargs.get('operation_timeout', None)
    +        self.use_temp_file_rename = kwargs.get('use_temp_file_rename', None)
             self.type = 'SftpWriteSettings'
     
     
    @@ -27501,6 +27981,11 @@ class ShopifySource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -27517,6 +28002,7 @@ class ShopifySource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -27526,6 +28012,29 @@ def __init__(self, **kwargs):
             self.type = 'ShopifySource'
     
     
    +class SkipErrorFile(Model):
    +    """Skip error file.
    +
    +    :param file_missing: Skip if file is deleted by other client during copy.
    +     Default is true. Type: boolean (or Expression with resultType boolean).
    +    :type file_missing: object
    +    :param data_inconsistency: Skip if source/sink file changed by other
    +     concurrent write. Default is false. Type: boolean (or Expression with
    +     resultType boolean).
    +    :type data_inconsistency: object
    +    """
    +
    +    _attribute_map = {
    +        'file_missing': {'key': 'fileMissing', 'type': 'object'},
    +        'data_inconsistency': {'key': 'dataInconsistency', 'type': 'object'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SkipErrorFile, self).__init__(**kwargs)
    +        self.file_missing = kwargs.get('file_missing', None)
    +        self.data_inconsistency = kwargs.get('data_inconsistency', None)
    +
    +
     class SparkLinkedService(LinkedService):
         """Spark Server linked service.
     
    @@ -27740,6 +28249,11 @@ class SparkSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -27756,6 +28270,7 @@ class SparkSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -27872,6 +28387,11 @@ class SqlDWSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param sql_reader_query: SQL Data Warehouse reader query. Type: string (or
          Expression with resultType string).
         :type sql_reader_query: object
    @@ -27897,6 +28417,7 @@ class SqlDWSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'sql_reader_query': {'key': 'sqlReaderQuery', 'type': 'object'},
             'sql_reader_stored_procedure_name': {'key': 'sqlReaderStoredProcedureName', 'type': 'object'},
             'stored_procedure_parameters': {'key': 'storedProcedureParameters', 'type': 'object'},
    @@ -28016,6 +28537,11 @@ class SqlMISource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param sql_reader_query: SQL reader query. Type: string (or Expression
          with resultType string).
         :type sql_reader_query: object
    @@ -28042,6 +28568,7 @@ class SqlMISource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'sql_reader_query': {'key': 'sqlReaderQuery', 'type': 'object'},
             'sql_reader_stored_procedure_name': {'key': 'sqlReaderStoredProcedureName', 'type': 'object'},
             'stored_procedure_parameters': {'key': 'storedProcedureParameters', 'type': '{StoredProcedureParameter}'},
    @@ -28225,6 +28752,11 @@ class SqlServerSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param sql_reader_query: SQL reader query. Type: string (or Expression
          with resultType string).
         :type sql_reader_query: object
    @@ -28251,6 +28783,7 @@ class SqlServerSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'sql_reader_query': {'key': 'sqlReaderQuery', 'type': 'object'},
             'sql_reader_stored_procedure_name': {'key': 'sqlReaderStoredProcedureName', 'type': 'object'},
             'stored_procedure_parameters': {'key': 'storedProcedureParameters', 'type': '{StoredProcedureParameter}'},
    @@ -28500,6 +29033,11 @@ class SqlSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param sql_reader_query: SQL reader query. Type: string (or Expression
          with resultType string).
         :type sql_reader_query: object
    @@ -28511,6 +29049,12 @@ class SqlSource(TabularSource):
          procedure parameters. Example: "{Parameter1: {value: "1", type: "int"}}".
         :type stored_procedure_parameters: dict[str,
          ~azure.mgmt.datafactory.models.StoredProcedureParameter]
    +    :param isolation_level: Specifies the transaction locking behavior for the
    +     SQL source. Allowed values:
    +     ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The
    +     default value is ReadCommitted. Type: string (or Expression with
    +     resultType string).
    +    :type isolation_level: object
         """
     
         _validation = {
    @@ -28524,9 +29068,11 @@ class SqlSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'sql_reader_query': {'key': 'sqlReaderQuery', 'type': 'object'},
             'sql_reader_stored_procedure_name': {'key': 'sqlReaderStoredProcedureName', 'type': 'object'},
             'stored_procedure_parameters': {'key': 'storedProcedureParameters', 'type': '{StoredProcedureParameter}'},
    +        'isolation_level': {'key': 'isolationLevel', 'type': 'object'},
         }
     
         def __init__(self, **kwargs):
    @@ -28534,6 +29080,7 @@ def __init__(self, **kwargs):
             self.sql_reader_query = kwargs.get('sql_reader_query', None)
             self.sql_reader_stored_procedure_name = kwargs.get('sql_reader_stored_procedure_name', None)
             self.stored_procedure_parameters = kwargs.get('stored_procedure_parameters', None)
    +        self.isolation_level = kwargs.get('isolation_level', None)
             self.type = 'SqlSource'
     
     
    @@ -28708,6 +29255,11 @@ class SquareSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -28724,6 +29276,7 @@ class SquareSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -29617,6 +30170,11 @@ class SybaseSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -29633,6 +30191,7 @@ class SybaseSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -29829,6 +30388,11 @@ class TeradataSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Teradata query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -29854,6 +30418,7 @@ class TeradataSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
             'partition_option': {'key': 'partitionOption', 'type': 'str'},
             'partition_settings': {'key': 'partitionSettings', 'type': 'TeradataPartitionSettings'},
    @@ -30053,6 +30618,28 @@ def __init__(self, **kwargs):
             self.type = 'TriggerDependencyReference'
     
     
    +class TriggerFilterParameters(Model):
    +    """Query parameters for triggers.
    +
    +    :param continuation_token: The continuation token for getting the next
    +     page of results. Null for first page.
    +    :type continuation_token: str
    +    :param parent_trigger_name: The name of the parent TumblingWindowTrigger
    +     to get the child rerun triggers
    +    :type parent_trigger_name: str
    +    """
    +
    +    _attribute_map = {
    +        'continuation_token': {'key': 'continuationToken', 'type': 'str'},
    +        'parent_trigger_name': {'key': 'parentTriggerName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TriggerFilterParameters, self).__init__(**kwargs)
    +        self.continuation_token = kwargs.get('continuation_token', None)
    +        self.parent_trigger_name = kwargs.get('parent_trigger_name', None)
    +
    +
     class TriggerPipelineReference(Model):
         """Pipeline that needs to be triggered with the given parameters.
     
    @@ -30073,6 +30660,33 @@ def __init__(self, **kwargs):
             self.parameters = kwargs.get('parameters', None)
     
     
    +class TriggerQueryResponse(Model):
    +    """A query of triggers.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param value: Required. List of triggers.
    +    :type value: list[~azure.mgmt.datafactory.models.TriggerResource]
    +    :param continuation_token: The continuation token for getting the next
    +     page of results, if any remaining results exist, null otherwise.
    +    :type continuation_token: str
    +    """
    +
    +    _validation = {
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[TriggerResource]'},
    +        'continuation_token': {'key': 'continuationToken', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TriggerQueryResponse, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.continuation_token = kwargs.get('continuation_token', None)
    +
    +
     class TriggerReference(Model):
         """Trigger reference type.
     
    @@ -30770,6 +31384,11 @@ class VerticaSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -30786,6 +31405,7 @@ class VerticaSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -31345,6 +31965,11 @@ class WebSource(CopySource):
         :type max_concurrent_connections: object
         :param type: Required. Constant filled by server.
         :type type: str
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -31357,10 +31982,12 @@ class WebSource(CopySource):
             'source_retry_wait': {'key': 'sourceRetryWait', 'type': 'object'},
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         def __init__(self, **kwargs):
             super(WebSource, self).__init__(**kwargs)
    +        self.additional_columns = kwargs.get('additional_columns', None)
             self.type = 'WebSource'
     
     
    @@ -31596,6 +32223,11 @@ class XeroSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -31612,6 +32244,7 @@ class XeroSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    @@ -31779,6 +32412,11 @@ class ZohoSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -31795,6 +32433,7 @@ class ZohoSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    diff --git a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_models_py3.py b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_models_py3.py
    index 8c7c24c27e52..170bbebf3deb 100644
    --- a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_models_py3.py
    +++ b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_models_py3.py
    @@ -302,6 +302,28 @@ def __init__(self, *, job_version: str=None, **kwargs) -> None:
             self.job_version = job_version
     
     
    +class AdditionalColumns(Model):
    +    """Specify the column name and value of additional columns.
    +
    +    :param name: Additional column name. Type: string (or Expression with
    +     resultType string).
    +    :type name: object
    +    :param value: Additional column value. Type: string (or Expression with
    +     resultType string).
    +    :type value: object
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'object'},
    +        'value': {'key': 'value', 'type': 'object'},
    +    }
    +
    +    def __init__(self, *, name=None, value=None, **kwargs) -> None:
    +        super(AdditionalColumns, self).__init__(**kwargs)
    +        self.name = name
    +        self.value = value
    +
    +
     class LinkedService(Model):
         """The Azure Data Factory nested object which contains the information and
         credential which can be used to connect with related store or compute
    @@ -748,6 +770,11 @@ class TabularSource(CopySource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -761,15 +788,17 @@ class TabularSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
         _subtype_map = {
             'type': {'AmazonRedshiftSource': 'AmazonRedshiftSource', 'GoogleAdWordsSource': 'GoogleAdWordsSource', 'OracleServiceCloudSource': 'OracleServiceCloudSource', 'DynamicsAXSource': 'DynamicsAXSource', 'ResponsysSource': 'ResponsysSource', 'SalesforceMarketingCloudSource': 'SalesforceMarketingCloudSource', 'VerticaSource': 'VerticaSource', 'NetezzaSource': 'NetezzaSource', 'ZohoSource': 'ZohoSource', 'XeroSource': 'XeroSource', 'SquareSource': 'SquareSource', 'SparkSource': 'SparkSource', 'ShopifySource': 'ShopifySource', 'ServiceNowSource': 'ServiceNowSource', 'QuickBooksSource': 'QuickBooksSource', 'PrestoSource': 'PrestoSource', 'PhoenixSource': 'PhoenixSource', 'PaypalSource': 'PaypalSource', 'MarketoSource': 'MarketoSource', 'AzureMariaDBSource': 'AzureMariaDBSource', 'MariaDBSource': 'MariaDBSource', 'MagentoSource': 'MagentoSource', 'JiraSource': 'JiraSource', 'ImpalaSource': 'ImpalaSource', 'HubspotSource': 'HubspotSource', 'HiveSource': 'HiveSource', 'HBaseSource': 'HBaseSource', 'GreenplumSource': 'GreenplumSource', 'GoogleBigQuerySource': 'GoogleBigQuerySource', 'EloquaSource': 'EloquaSource', 'DrillSource': 'DrillSource', 'CouchbaseSource': 'CouchbaseSource', 'ConcurSource': 'ConcurSource', 'AzurePostgreSqlSource': 'AzurePostgreSqlSource', 'AmazonMWSSource': 'AmazonMWSSource', 'CassandraSource': 'CassandraSource', 'TeradataSource': 'TeradataSource', 'AzureMySqlSource': 'AzureMySqlSource', 'SqlDWSource': 'SqlDWSource', 'SqlMISource': 'SqlMISource', 'AzureSqlSource': 'AzureSqlSource', 'SqlServerSource': 'SqlServerSource', 'SqlSource': 'SqlSource', 'SapTableSource': 'SapTableSource', 'SapOpenHubSource': 'SapOpenHubSource', 'SapHanaSource': 'SapHanaSource', 'SapEccSource': 'SapEccSource', 'SapCloudForCustomerSource': 'SapCloudForCustomerSource', 'SalesforceSource': 'SalesforceSource', 'SapBwSource': 'SapBwSource', 'SybaseSource': 'SybaseSource', 'PostgreSqlSource': 'PostgreSqlSource', 'MySqlSource': 'MySqlSource', 'OdbcSource': 'OdbcSource', 'Db2Source': 'Db2Source', 'InformixSource': 'InformixSource', 'AzureTableSource': 'AzureTableSource'}
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, **kwargs) -> None:
             super(TabularSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.query_timeout = query_timeout
    +        self.additional_columns = additional_columns
             self.type = 'TabularSource'
     
     
    @@ -798,6 +827,11 @@ class AmazonMWSSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -814,11 +848,12 @@ class AmazonMWSSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(AmazonMWSSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(AmazonMWSSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'AmazonMWSSource'
     
    @@ -922,6 +957,11 @@ class AmazonRedshiftSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -944,12 +984,13 @@ class AmazonRedshiftSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
             'redshift_unload_settings': {'key': 'redshiftUnloadSettings', 'type': 'RedshiftUnloadSettings'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, redshift_unload_settings=None, **kwargs) -> None:
    -        super(AmazonRedshiftSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, redshift_unload_settings=None, **kwargs) -> None:
    +        super(AmazonRedshiftSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.redshift_unload_settings = redshift_unload_settings
             self.type = 'AmazonRedshiftSource'
    @@ -1347,6 +1388,10 @@ class AmazonS3ReadSettings(StoreReadSettings):
         :param prefix: The prefix filter for the S3 object name. Type: string (or
          Expression with resultType string).
         :type prefix: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -1370,17 +1415,19 @@ class AmazonS3ReadSettings(StoreReadSettings):
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
             'prefix': {'key': 'prefix', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, prefix=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, prefix=None, file_list_path=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
             super(AmazonS3ReadSettings, self).__init__(additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.recursive = recursive
             self.wildcard_folder_path = wildcard_folder_path
             self.wildcard_file_name = wildcard_file_name
             self.prefix = prefix
    +        self.file_list_path = file_list_path
             self.enable_partition_discovery = enable_partition_discovery
             self.modified_datetime_start = modified_datetime_start
             self.modified_datetime_end = modified_datetime_end
    @@ -1784,6 +1831,11 @@ class AvroSource(CopySource):
         :type type: str
         :param store_settings: Avro store settings.
         :type store_settings: ~azure.mgmt.datafactory.models.StoreReadSettings
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -1797,11 +1849,13 @@ class AvroSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'store_settings': {'key': 'storeSettings', 'type': 'StoreReadSettings'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, store_settings=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, store_settings=None, additional_columns=None, **kwargs) -> None:
             super(AvroSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.store_settings = store_settings
    +        self.additional_columns = additional_columns
             self.type = 'AvroSource'
     
     
    @@ -2249,6 +2303,10 @@ class AzureBlobFSReadSettings(StoreReadSettings):
         :param wildcard_file_name: Azure blobFS wildcardFileName. Type: string (or
          Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -2271,16 +2329,18 @@ class AzureBlobFSReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, file_list_path=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
             super(AzureBlobFSReadSettings, self).__init__(additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.recursive = recursive
             self.wildcard_folder_path = wildcard_folder_path
             self.wildcard_file_name = wildcard_file_name
    +        self.file_list_path = file_list_path
             self.enable_partition_discovery = enable_partition_discovery
             self.modified_datetime_start = modified_datetime_start
             self.modified_datetime_end = modified_datetime_end
    @@ -2638,6 +2698,10 @@ class AzureBlobStorageReadSettings(StoreReadSettings):
         :param prefix: The prefix filter for the Azure Blob name. Type: string (or
          Expression with resultType string).
         :type prefix: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -2661,17 +2725,19 @@ class AzureBlobStorageReadSettings(StoreReadSettings):
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
             'prefix': {'key': 'prefix', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, prefix=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, prefix=None, file_list_path=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
             super(AzureBlobStorageReadSettings, self).__init__(additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.recursive = recursive
             self.wildcard_folder_path = wildcard_folder_path
             self.wildcard_file_name = wildcard_file_name
             self.prefix = prefix
    +        self.file_list_path = file_list_path
             self.enable_partition_discovery = enable_partition_discovery
             self.modified_datetime_start = modified_datetime_start
             self.modified_datetime_end = modified_datetime_end
    @@ -3142,6 +3208,11 @@ class AzureDataExplorerSource(CopySource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9]))..
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -3158,13 +3229,15 @@ class AzureDataExplorerSource(CopySource):
             'query': {'key': 'query', 'type': 'object'},
             'no_truncation': {'key': 'noTruncation', 'type': 'object'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, query, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, no_truncation=None, query_timeout=None, **kwargs) -> None:
    +    def __init__(self, *, query, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, no_truncation=None, query_timeout=None, additional_columns=None, **kwargs) -> None:
             super(AzureDataExplorerSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.query = query
             self.no_truncation = no_truncation
             self.query_timeout = query_timeout
    +        self.additional_columns = additional_columns
             self.type = 'AzureDataExplorerSource'
     
     
    @@ -3533,6 +3606,10 @@ class AzureDataLakeStoreReadSettings(StoreReadSettings):
         :param wildcard_file_name: ADLS wildcardFileName. Type: string (or
          Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -3555,16 +3632,18 @@ class AzureDataLakeStoreReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, file_list_path=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
             super(AzureDataLakeStoreReadSettings, self).__init__(additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.recursive = recursive
             self.wildcard_folder_path = wildcard_folder_path
             self.wildcard_file_name = wildcard_file_name
    +        self.file_list_path = file_list_path
             self.enable_partition_discovery = enable_partition_discovery
             self.modified_datetime_start = modified_datetime_start
             self.modified_datetime_end = modified_datetime_end
    @@ -3690,6 +3769,11 @@ class AzureDataLakeStoreWriteSettings(StoreWriteSettings):
         :type copy_behavior: object
         :param type: Required. Constant filled by server.
         :type type: str
    +    :param expiry_date_time: Specifies the expiry time of the written files.
    +     The time is applied to the UTC time zone in the format of
    +     "2018-12-01T05:00:00Z". Default value is NULL. Type: integer (or
    +     Expression with resultType integer).
    +    :type expiry_date_time: object
         """
     
         _validation = {
    @@ -3701,10 +3785,12 @@ class AzureDataLakeStoreWriteSettings(StoreWriteSettings):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'copy_behavior': {'key': 'copyBehavior', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
    +        'expiry_date_time': {'key': 'expiryDateTime', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, copy_behavior=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, copy_behavior=None, expiry_date_time=None, **kwargs) -> None:
             super(AzureDataLakeStoreWriteSettings, self).__init__(additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, copy_behavior=copy_behavior, **kwargs)
    +        self.expiry_date_time = expiry_date_time
             self.type = 'AzureDataLakeStoreWriteSettings'
     
     
    @@ -3828,6 +3914,10 @@ class AzureFileStorageReadSettings(StoreReadSettings):
         :param wildcard_file_name: Azure File Storage wildcardFileName. Type:
          string (or Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -3850,16 +3940,18 @@ class AzureFileStorageReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, file_list_path=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
             super(AzureFileStorageReadSettings, self).__init__(additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.recursive = recursive
             self.wildcard_folder_path = wildcard_folder_path
             self.wildcard_file_name = wildcard_file_name
    +        self.file_list_path = file_list_path
             self.enable_partition_discovery = enable_partition_discovery
             self.modified_datetime_start = modified_datetime_start
             self.modified_datetime_end = modified_datetime_end
    @@ -4194,6 +4286,11 @@ class AzureMariaDBSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -4210,11 +4307,12 @@ class AzureMariaDBSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(AzureMariaDBSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(AzureMariaDBSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'AzureMariaDBSource'
     
    @@ -4834,6 +4932,11 @@ class AzureMySqlSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -4850,11 +4953,12 @@ class AzureMySqlSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(AzureMySqlSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(AzureMySqlSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'AzureMySqlSource'
     
    @@ -5061,6 +5165,11 @@ class AzurePostgreSqlSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -5077,11 +5186,12 @@ class AzurePostgreSqlSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(AzurePostgreSqlSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(AzurePostgreSqlSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'AzurePostgreSqlSource'
     
    @@ -5852,6 +5962,11 @@ class AzureSqlSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param sql_reader_query: SQL reader query. Type: string (or Expression
          with resultType string).
         :type sql_reader_query: object
    @@ -5878,14 +5993,15 @@ class AzureSqlSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'sql_reader_query': {'key': 'sqlReaderQuery', 'type': 'object'},
             'sql_reader_stored_procedure_name': {'key': 'sqlReaderStoredProcedureName', 'type': 'object'},
             'stored_procedure_parameters': {'key': 'storedProcedureParameters', 'type': '{StoredProcedureParameter}'},
             'produce_additional_types': {'key': 'produceAdditionalTypes', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, sql_reader_query=None, sql_reader_stored_procedure_name=None, stored_procedure_parameters=None, produce_additional_types=None, **kwargs) -> None:
    -        super(AzureSqlSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, sql_reader_query=None, sql_reader_stored_procedure_name=None, stored_procedure_parameters=None, produce_additional_types=None, **kwargs) -> None:
    +        super(AzureSqlSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.sql_reader_query = sql_reader_query
             self.sql_reader_stored_procedure_name = sql_reader_stored_procedure_name
             self.stored_procedure_parameters = stored_procedure_parameters
    @@ -6189,6 +6305,11 @@ class AzureTableSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param azure_table_source_query: Azure Table source query. Type: string
          (or Expression with resultType string).
         :type azure_table_source_query: object
    @@ -6209,12 +6330,13 @@ class AzureTableSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'azure_table_source_query': {'key': 'azureTableSourceQuery', 'type': 'object'},
             'azure_table_source_ignore_table_not_found': {'key': 'azureTableSourceIgnoreTableNotFound', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, azure_table_source_query=None, azure_table_source_ignore_table_not_found=None, **kwargs) -> None:
    -        super(AzureTableSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, azure_table_source_query=None, azure_table_source_ignore_table_not_found=None, **kwargs) -> None:
    +        super(AzureTableSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.azure_table_source_query = azure_table_source_query
             self.azure_table_source_ignore_table_not_found = azure_table_source_ignore_table_not_found
             self.type = 'AzureTableSource'
    @@ -6458,7 +6580,7 @@ class Trigger(Model):
         pipeline run.
     
         You probably want to use the sub-classes and not this class directly. Known
    -    sub-classes are: RerunTumblingWindowTrigger, ChainingTrigger,
    +    sub-classes are: ChainingTrigger, RerunTumblingWindowTrigger,
         TumblingWindowTrigger, MultiplePipelineTrigger
     
         Variables are only populated by the server, and will be ignored when
    @@ -6497,7 +6619,7 @@ class Trigger(Model):
         }
     
         _subtype_map = {
    -        'type': {'RerunTumblingWindowTrigger': 'RerunTumblingWindowTrigger', 'ChainingTrigger': 'ChainingTrigger', 'TumblingWindowTrigger': 'TumblingWindowTrigger', 'MultiplePipelineTrigger': 'MultiplePipelineTrigger'}
    +        'type': {'ChainingTrigger': 'ChainingTrigger', 'RerunTumblingWindowTrigger': 'RerunTumblingWindowTrigger', 'TumblingWindowTrigger': 'TumblingWindowTrigger', 'MultiplePipelineTrigger': 'MultiplePipelineTrigger'}
         }
     
         def __init__(self, *, additional_properties=None, description: str=None, annotations=None, **kwargs) -> None:
    @@ -6930,6 +7052,11 @@ class CassandraSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Should be a SQL-92 query expression or
          Cassandra Query Language (CQL) command. Type: string (or Expression with
          resultType string).
    @@ -6957,12 +7084,13 @@ class CassandraSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
             'consistency_level': {'key': 'consistencyLevel', 'type': 'str'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, consistency_level=None, **kwargs) -> None:
    -        super(CassandraSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, consistency_level=None, **kwargs) -> None:
    +        super(CassandraSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.consistency_level = consistency_level
             self.type = 'CassandraSource'
    @@ -7495,6 +7623,11 @@ class CommonDataServiceForAppsSource(CopySource):
          Microsoft Common Data Service for Apps (online & on-premises). Type:
          string (or Expression with resultType string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -7508,11 +7641,13 @@ class CommonDataServiceForAppsSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, additional_columns=None, **kwargs) -> None:
             super(CommonDataServiceForAppsSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.query = query
    +        self.additional_columns = additional_columns
             self.type = 'CommonDataServiceForAppsSource'
     
     
    @@ -7712,6 +7847,11 @@ class ConcurSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -7728,11 +7868,12 @@ class ConcurSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(ConcurSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(ConcurSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'ConcurSource'
     
    @@ -7790,10 +7931,19 @@ class CopyActivity(ExecutionActivity):
          settings when EnableSkipIncompatibleRow is true.
         :type redirect_incompatible_row_settings:
          ~azure.mgmt.datafactory.models.RedirectIncompatibleRowSettings
    +    :param log_storage_settings: Log storage settings customer need to provide
    +     when enabling session log.
    +    :type log_storage_settings:
    +     ~azure.mgmt.datafactory.models.LogStorageSettings
         :param preserve_rules: Preserve Rules.
         :type preserve_rules: list[object]
         :param preserve: Preserve rules.
         :type preserve: list[object]
    +    :param validate_data_consistency: Whether to enable Data Consistency
    +     validation. Type: boolean (or Expression with resultType boolean).
    +    :type validate_data_consistency: object
    +    :param skip_error_file: Specify the fault tolerance for data consistency.
    +    :type skip_error_file: ~azure.mgmt.datafactory.models.SkipErrorFile
         :param inputs: List of inputs for the activity.
         :type inputs: list[~azure.mgmt.datafactory.models.DatasetReference]
         :param outputs: List of outputs for the activity.
    @@ -7825,13 +7975,16 @@ class CopyActivity(ExecutionActivity):
             'data_integration_units': {'key': 'typeProperties.dataIntegrationUnits', 'type': 'object'},
             'enable_skip_incompatible_row': {'key': 'typeProperties.enableSkipIncompatibleRow', 'type': 'object'},
             'redirect_incompatible_row_settings': {'key': 'typeProperties.redirectIncompatibleRowSettings', 'type': 'RedirectIncompatibleRowSettings'},
    +        'log_storage_settings': {'key': 'typeProperties.logStorageSettings', 'type': 'LogStorageSettings'},
             'preserve_rules': {'key': 'typeProperties.preserveRules', 'type': '[object]'},
             'preserve': {'key': 'typeProperties.preserve', 'type': '[object]'},
    +        'validate_data_consistency': {'key': 'typeProperties.validateDataConsistency', 'type': 'object'},
    +        'skip_error_file': {'key': 'typeProperties.skipErrorFile', 'type': 'SkipErrorFile'},
             'inputs': {'key': 'inputs', 'type': '[DatasetReference]'},
             'outputs': {'key': 'outputs', 'type': '[DatasetReference]'},
         }
     
    -    def __init__(self, *, name: str, source, sink, additional_properties=None, description: str=None, depends_on=None, user_properties=None, linked_service_name=None, policy=None, translator=None, enable_staging=None, staging_settings=None, parallel_copies=None, data_integration_units=None, enable_skip_incompatible_row=None, redirect_incompatible_row_settings=None, preserve_rules=None, preserve=None, inputs=None, outputs=None, **kwargs) -> None:
    +    def __init__(self, *, name: str, source, sink, additional_properties=None, description: str=None, depends_on=None, user_properties=None, linked_service_name=None, policy=None, translator=None, enable_staging=None, staging_settings=None, parallel_copies=None, data_integration_units=None, enable_skip_incompatible_row=None, redirect_incompatible_row_settings=None, log_storage_settings=None, preserve_rules=None, preserve=None, validate_data_consistency=None, skip_error_file=None, inputs=None, outputs=None, **kwargs) -> None:
             super(CopyActivity, self).__init__(additional_properties=additional_properties, name=name, description=description, depends_on=depends_on, user_properties=user_properties, linked_service_name=linked_service_name, policy=policy, **kwargs)
             self.source = source
             self.sink = sink
    @@ -7842,8 +7995,11 @@ def __init__(self, *, name: str, source, sink, additional_properties=None, descr
             self.data_integration_units = data_integration_units
             self.enable_skip_incompatible_row = enable_skip_incompatible_row
             self.redirect_incompatible_row_settings = redirect_incompatible_row_settings
    +        self.log_storage_settings = log_storage_settings
             self.preserve_rules = preserve_rules
             self.preserve = preserve
    +        self.validate_data_consistency = validate_data_consistency
    +        self.skip_error_file = skip_error_file
             self.inputs = inputs
             self.outputs = outputs
             self.type = 'Copy'
    @@ -8126,6 +8282,11 @@ class CosmosDbMongoDbApiSource(CopySource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -8142,14 +8303,16 @@ class CosmosDbMongoDbApiSource(CopySource):
             'cursor_methods': {'key': 'cursorMethods', 'type': 'MongoDbCursorMethodsProperties'},
             'batch_size': {'key': 'batchSize', 'type': 'object'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, filter=None, cursor_methods=None, batch_size=None, query_timeout=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, filter=None, cursor_methods=None, batch_size=None, query_timeout=None, additional_columns=None, **kwargs) -> None:
             super(CosmosDbMongoDbApiSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.filter = filter
             self.cursor_methods = cursor_methods
             self.batch_size = batch_size
             self.query_timeout = query_timeout
    +        self.additional_columns = additional_columns
             self.type = 'CosmosDbMongoDbApiSource'
     
     
    @@ -8299,6 +8462,11 @@ class CosmosDbSqlApiSource(CopySource):
         :param preferred_regions: Preferred regions. Type: array of strings (or
          Expression with resultType array of strings).
         :type preferred_regions: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -8314,13 +8482,15 @@ class CosmosDbSqlApiSource(CopySource):
             'query': {'key': 'query', 'type': 'object'},
             'page_size': {'key': 'pageSize', 'type': 'object'},
             'preferred_regions': {'key': 'preferredRegions', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, page_size=None, preferred_regions=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, page_size=None, preferred_regions=None, additional_columns=None, **kwargs) -> None:
             super(CosmosDbSqlApiSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.query = query
             self.page_size = page_size
             self.preferred_regions = preferred_regions
    +        self.additional_columns = additional_columns
             self.type = 'CosmosDbSqlApiSource'
     
     
    @@ -8407,6 +8577,11 @@ class CouchbaseSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -8423,11 +8598,12 @@ class CouchbaseSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(CouchbaseSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(CouchbaseSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'CouchbaseSource'
     
    @@ -9925,37 +10101,47 @@ class Db2LinkedService(LinkedService):
         :type annotations: list[object]
         :param type: Required. Constant filled by server.
         :type type: str
    -    :param server: Required. Server name for connection. Type: string (or
    -     Expression with resultType string).
    +    :param connection_string: The connection string. It is mutually exclusive
    +     with server, database, authenticationType, userName, packageCollection and
    +     certificateCommonName property. Type: string, SecureString or
    +     AzureKeyVaultSecretReference.
    +    :type connection_string: object
    +    :param server: Server name for connection. It is mutually exclusive with
    +     connectionString property. Type: string (or Expression with resultType
    +     string).
         :type server: object
    -    :param database: Required. Database name for connection. Type: string (or
    -     Expression with resultType string).
    +    :param database: Database name for connection. It is mutually exclusive
    +     with connectionString property. Type: string (or Expression with
    +     resultType string).
         :type database: object
         :param authentication_type: AuthenticationType to be used for connection.
    -     Possible values include: 'Basic'
    +     It is mutually exclusive with connectionString property. Possible values
    +     include: 'Basic'
         :type authentication_type: str or
          ~azure.mgmt.datafactory.models.Db2AuthenticationType
    -    :param username: Username for authentication. Type: string (or Expression
    -     with resultType string).
    +    :param username: Username for authentication. It is mutually exclusive
    +     with connectionString property. Type: string (or Expression with
    +     resultType string).
         :type username: object
         :param password: Password for authentication.
         :type password: ~azure.mgmt.datafactory.models.SecretBase
         :param package_collection: Under where packages are created when querying
    -     database. Type: string (or Expression with resultType string).
    +     database. It is mutually exclusive with connectionString property. Type:
    +     string (or Expression with resultType string).
         :type package_collection: object
         :param certificate_common_name: Certificate Common Name when TLS is
    -     enabled. Type: string (or Expression with resultType string).
    +     enabled. It is mutually exclusive with connectionString property. Type:
    +     string (or Expression with resultType string).
         :type certificate_common_name: object
         :param encrypted_credential: The encrypted credential used for
          authentication. Credentials are encrypted using the integration runtime
    -     credential manager. Type: string (or Expression with resultType string).
    +     credential manager. It is mutually exclusive with connectionString
    +     property. Type: string (or Expression with resultType string).
         :type encrypted_credential: object
         """
     
         _validation = {
             'type': {'required': True},
    -        'server': {'required': True},
    -        'database': {'required': True},
         }
     
         _attribute_map = {
    @@ -9965,6 +10151,7 @@ class Db2LinkedService(LinkedService):
             'parameters': {'key': 'parameters', 'type': '{ParameterSpecification}'},
             'annotations': {'key': 'annotations', 'type': '[object]'},
             'type': {'key': 'type', 'type': 'str'},
    +        'connection_string': {'key': 'typeProperties.connectionString', 'type': 'object'},
             'server': {'key': 'typeProperties.server', 'type': 'object'},
             'database': {'key': 'typeProperties.database', 'type': 'object'},
             'authentication_type': {'key': 'typeProperties.authenticationType', 'type': 'str'},
    @@ -9975,8 +10162,9 @@ class Db2LinkedService(LinkedService):
             'encrypted_credential': {'key': 'typeProperties.encryptedCredential', 'type': 'object'},
         }
     
    -    def __init__(self, *, server, database, additional_properties=None, connect_via=None, description: str=None, parameters=None, annotations=None, authentication_type=None, username=None, password=None, package_collection=None, certificate_common_name=None, encrypted_credential=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, connect_via=None, description: str=None, parameters=None, annotations=None, connection_string=None, server=None, database=None, authentication_type=None, username=None, password=None, package_collection=None, certificate_common_name=None, encrypted_credential=None, **kwargs) -> None:
             super(Db2LinkedService, self).__init__(additional_properties=additional_properties, connect_via=connect_via, description=description, parameters=parameters, annotations=annotations, **kwargs)
    +        self.connection_string = connection_string
             self.server = server
             self.database = database
             self.authentication_type = authentication_type
    @@ -10013,6 +10201,11 @@ class Db2Source(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -10029,11 +10222,12 @@ class Db2Source(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(Db2Source, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(Db2Source, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'Db2Source'
     
    @@ -10459,6 +10653,11 @@ class DelimitedTextSource(CopySource):
         :param format_settings: DelimitedText format settings.
         :type format_settings:
          ~azure.mgmt.datafactory.models.DelimitedTextReadSettings
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -10473,12 +10672,14 @@ class DelimitedTextSource(CopySource):
             'type': {'key': 'type', 'type': 'str'},
             'store_settings': {'key': 'storeSettings', 'type': 'StoreReadSettings'},
             'format_settings': {'key': 'formatSettings', 'type': 'DelimitedTextReadSettings'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, store_settings=None, format_settings=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, store_settings=None, format_settings=None, additional_columns=None, **kwargs) -> None:
             super(DelimitedTextSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.store_settings = store_settings
             self.format_settings = format_settings
    +        self.additional_columns = additional_columns
             self.type = 'DelimitedTextSource'
     
     
    @@ -10739,6 +10940,11 @@ class DocumentDbCollectionSource(CopySource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -10754,13 +10960,15 @@ class DocumentDbCollectionSource(CopySource):
             'query': {'key': 'query', 'type': 'object'},
             'nesting_separator': {'key': 'nestingSeparator', 'type': 'object'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, nesting_separator=None, query_timeout=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, nesting_separator=None, query_timeout=None, additional_columns=None, **kwargs) -> None:
             super(DocumentDbCollectionSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.query = query
             self.nesting_separator = nesting_separator
             self.query_timeout = query_timeout
    +        self.additional_columns = additional_columns
             self.type = 'DocumentDbCollectionSource'
     
     
    @@ -10846,6 +11054,11 @@ class DrillSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -10862,11 +11075,12 @@ class DrillSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(DrillSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(DrillSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'DrillSource'
     
    @@ -11157,6 +11371,11 @@ class DynamicsAXSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -11173,11 +11392,12 @@ class DynamicsAXSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(DynamicsAXSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(DynamicsAXSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'DynamicsAXSource'
     
    @@ -11463,6 +11683,11 @@ class DynamicsCrmSource(CopySource):
          Microsoft Dynamics CRM (online & on-premises). Type: string (or Expression
          with resultType string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -11476,11 +11701,13 @@ class DynamicsCrmSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, additional_columns=None, **kwargs) -> None:
             super(DynamicsCrmSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.query = query
    +        self.additional_columns = additional_columns
             self.type = 'DynamicsCrmSource'
     
     
    @@ -11762,6 +11989,11 @@ class DynamicsSource(CopySource):
          Microsoft Dynamics (online & on-premises). Type: string (or Expression
          with resultType string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -11775,11 +12007,13 @@ class DynamicsSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, additional_columns=None, **kwargs) -> None:
             super(DynamicsSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.query = query
    +        self.additional_columns = additional_columns
             self.type = 'DynamicsSource'
     
     
    @@ -11947,6 +12181,11 @@ class EloquaSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -11963,11 +12202,12 @@ class EloquaSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(EloquaSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(EloquaSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'EloquaSource'
     
    @@ -12821,6 +13061,10 @@ class FileServerReadSettings(StoreReadSettings):
         :param wildcard_file_name: FileServer wildcardFileName. Type: string (or
          Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -12843,16 +13087,18 @@ class FileServerReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, file_list_path=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
             super(FileServerReadSettings, self).__init__(additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.recursive = recursive
             self.wildcard_folder_path = wildcard_folder_path
             self.wildcard_file_name = wildcard_file_name
    +        self.file_list_path = file_list_path
             self.enable_partition_discovery = enable_partition_discovery
             self.modified_datetime_start = modified_datetime_start
             self.modified_datetime_end = modified_datetime_end
    @@ -13060,6 +13306,11 @@ class FileSystemSource(CopySource):
          recursively. Default is true. Type: boolean (or Expression with resultType
          boolean).
         :type recursive: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -13073,11 +13324,13 @@ class FileSystemSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'recursive': {'key': 'recursive', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, recursive=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, recursive=None, additional_columns=None, **kwargs) -> None:
             super(FileSystemSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.recursive = recursive
    +        self.additional_columns = additional_columns
             self.type = 'FileSystemSource'
     
     
    @@ -13215,6 +13468,10 @@ class FtpReadSettings(StoreReadSettings):
         :param wildcard_file_name: Ftp wildcardFileName. Type: string (or
          Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param use_binary_transfer: Specify whether to use binary transfer mode
          for FTP stores.
         :type use_binary_transfer: bool
    @@ -13231,14 +13488,16 @@ class FtpReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'use_binary_transfer': {'key': 'useBinaryTransfer', 'type': 'bool'},
         }
     
    -    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, use_binary_transfer: bool=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, file_list_path=None, use_binary_transfer: bool=None, **kwargs) -> None:
             super(FtpReadSettings, self).__init__(additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.recursive = recursive
             self.wildcard_folder_path = wildcard_folder_path
             self.wildcard_file_name = wildcard_file_name
    +        self.file_list_path = file_list_path
             self.use_binary_transfer = use_binary_transfer
             self.type = 'FtpReadSettings'
     
    @@ -13695,6 +13954,11 @@ class GoogleAdWordsSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -13711,11 +13975,12 @@ class GoogleAdWordsSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(GoogleAdWordsSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(GoogleAdWordsSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'GoogleAdWordsSource'
     
    @@ -13927,6 +14192,11 @@ class GoogleBigQuerySource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -13943,11 +14213,12 @@ class GoogleBigQuerySource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(GoogleBigQuerySource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(GoogleBigQuerySource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'GoogleBigQuerySource'
     
    @@ -14089,6 +14360,10 @@ class GoogleCloudStorageReadSettings(StoreReadSettings):
         :param prefix: The prefix filter for the Google Cloud Storage object name.
          Type: string (or Expression with resultType string).
         :type prefix: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -14112,17 +14387,19 @@ class GoogleCloudStorageReadSettings(StoreReadSettings):
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
             'prefix': {'key': 'prefix', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, prefix=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, prefix=None, file_list_path=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
             super(GoogleCloudStorageReadSettings, self).__init__(additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.recursive = recursive
             self.wildcard_folder_path = wildcard_folder_path
             self.wildcard_file_name = wildcard_file_name
             self.prefix = prefix
    +        self.file_list_path = file_list_path
             self.enable_partition_discovery = enable_partition_discovery
             self.modified_datetime_start = modified_datetime_start
             self.modified_datetime_end = modified_datetime_end
    @@ -14211,6 +14488,11 @@ class GreenplumSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -14227,11 +14509,12 @@ class GreenplumSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(GreenplumSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(GreenplumSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'GreenplumSource'
     
    @@ -14493,6 +14776,11 @@ class HBaseSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -14509,11 +14797,12 @@ class HBaseSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(HBaseSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(HBaseSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'HBaseSource'
     
    @@ -14645,6 +14934,10 @@ class HdfsReadSettings(StoreReadSettings):
         :param wildcard_file_name: HDFS wildcardFileName. Type: string (or
          Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param enable_partition_discovery: Indicates whether to enable partition
          discovery.
         :type enable_partition_discovery: bool
    @@ -14669,17 +14962,19 @@ class HdfsReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'enable_partition_discovery': {'key': 'enablePartitionDiscovery', 'type': 'bool'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
             'distcp_settings': {'key': 'distcpSettings', 'type': 'DistcpSettings'},
         }
     
    -    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, distcp_settings=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, file_list_path=None, enable_partition_discovery: bool=None, modified_datetime_start=None, modified_datetime_end=None, distcp_settings=None, **kwargs) -> None:
             super(HdfsReadSettings, self).__init__(additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.recursive = recursive
             self.wildcard_folder_path = wildcard_folder_path
             self.wildcard_file_name = wildcard_file_name
    +        self.file_list_path = file_list_path
             self.enable_partition_discovery = enable_partition_discovery
             self.modified_datetime_start = modified_datetime_start
             self.modified_datetime_end = modified_datetime_end
    @@ -15721,6 +16016,11 @@ class HiveSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -15737,11 +16037,12 @@ class HiveSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(HiveSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(HiveSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'HiveSource'
     
    @@ -16234,6 +16535,11 @@ class HubspotSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -16250,11 +16556,12 @@ class HubspotSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(HubspotSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(HubspotSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'HubspotSource'
     
    @@ -16519,6 +16826,11 @@ class ImpalaSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -16535,11 +16847,12 @@ class ImpalaSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(ImpalaSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(ImpalaSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'ImpalaSource'
     
    @@ -16697,6 +17010,11 @@ class InformixSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -16713,11 +17031,12 @@ class InformixSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(InformixSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(InformixSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'InformixSource'
     
    @@ -17676,6 +17995,11 @@ class JiraSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -17692,11 +18016,12 @@ class JiraSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(JiraSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(JiraSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'JiraSource'
     
    @@ -17924,6 +18249,11 @@ class JsonSource(CopySource):
         :type type: str
         :param store_settings: Json store settings.
         :type store_settings: ~azure.mgmt.datafactory.models.StoreReadSettings
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -17937,11 +18267,13 @@ class JsonSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'store_settings': {'key': 'storeSettings', 'type': 'StoreReadSettings'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, store_settings=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, store_settings=None, additional_columns=None, **kwargs) -> None:
             super(JsonSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.store_settings = store_settings
    +        self.additional_columns = additional_columns
             self.type = 'JsonSource'
     
     
    @@ -18490,6 +18822,11 @@ class MagentoSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -18506,11 +18843,12 @@ class MagentoSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(MagentoSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(MagentoSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'MagentoSource'
     
    @@ -18901,6 +19239,11 @@ class MariaDBSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -18917,11 +19260,12 @@ class MariaDBSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(MariaDBSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(MariaDBSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'MariaDBSource'
     
    @@ -19149,6 +19493,11 @@ class MarketoSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -19165,11 +19514,12 @@ class MarketoSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(MarketoSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(MarketoSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'MarketoSource'
     
    @@ -19326,6 +19676,11 @@ class MicrosoftAccessSource(CopySource):
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -19339,11 +19694,13 @@ class MicrosoftAccessSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, additional_columns=None, **kwargs) -> None:
             super(MicrosoftAccessSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.query = query
    +        self.additional_columns = additional_columns
             self.type = 'MicrosoftAccessSource'
     
     
    @@ -19630,6 +19987,11 @@ class MongoDbSource(CopySource):
         :param query: Database query. Should be a SQL-92 query expression. Type:
          string (or Expression with resultType string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -19643,11 +20005,13 @@ class MongoDbSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, additional_columns=None, **kwargs) -> None:
             super(MongoDbSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.query = query
    +        self.additional_columns = additional_columns
             self.type = 'MongoDbSource'
     
     
    @@ -19804,6 +20168,11 @@ class MongoDbV2Source(CopySource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -19820,14 +20189,16 @@ class MongoDbV2Source(CopySource):
             'cursor_methods': {'key': 'cursorMethods', 'type': 'MongoDbCursorMethodsProperties'},
             'batch_size': {'key': 'batchSize', 'type': 'object'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, filter=None, cursor_methods=None, batch_size=None, query_timeout=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, filter=None, cursor_methods=None, batch_size=None, query_timeout=None, additional_columns=None, **kwargs) -> None:
             super(MongoDbV2Source, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.filter = filter
             self.cursor_methods = cursor_methods
             self.batch_size = batch_size
             self.query_timeout = query_timeout
    +        self.additional_columns = additional_columns
             self.type = 'MongoDbV2Source'
     
     
    @@ -19914,6 +20285,11 @@ class MySqlSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -19930,11 +20306,12 @@ class MySqlSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(MySqlSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(MySqlSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'MySqlSource'
     
    @@ -20111,6 +20488,11 @@ class NetezzaSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -20136,13 +20518,14 @@ class NetezzaSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
             'partition_option': {'key': 'partitionOption', 'type': 'str'},
             'partition_settings': {'key': 'partitionSettings', 'type': 'NetezzaPartitionSettings'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, partition_option=None, partition_settings=None, **kwargs) -> None:
    -        super(NetezzaSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, partition_option=None, partition_settings=None, **kwargs) -> None:
    +        super(NetezzaSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.partition_option = partition_option
             self.partition_settings = partition_settings
    @@ -20418,6 +20801,11 @@ class ODataSource(CopySource):
         :param query: OData query. For example, "$top=1". Type: string (or
          Expression with resultType string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -20431,11 +20819,13 @@ class ODataSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, additional_columns=None, **kwargs) -> None:
             super(ODataSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.query = query
    +        self.additional_columns = additional_columns
             self.type = 'ODataSource'
     
     
    @@ -20592,6 +20982,11 @@ class OdbcSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -20608,11 +21003,12 @@ class OdbcSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(OdbcSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(OdbcSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'OdbcSource'
     
    @@ -21355,6 +21751,11 @@ class OracleServiceCloudSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -21371,11 +21772,12 @@ class OracleServiceCloudSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(OracleServiceCloudSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(OracleServiceCloudSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'OracleServiceCloudSource'
     
    @@ -21471,6 +21873,11 @@ class OracleSource(CopySource):
          source partitioning.
         :type partition_settings:
          ~azure.mgmt.datafactory.models.OraclePartitionSettings
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -21487,14 +21894,16 @@ class OracleSource(CopySource):
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
             'partition_option': {'key': 'partitionOption', 'type': 'str'},
             'partition_settings': {'key': 'partitionSettings', 'type': 'OraclePartitionSettings'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, oracle_reader_query=None, query_timeout=None, partition_option=None, partition_settings=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, oracle_reader_query=None, query_timeout=None, partition_option=None, partition_settings=None, additional_columns=None, **kwargs) -> None:
             super(OracleSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.oracle_reader_query = oracle_reader_query
             self.query_timeout = query_timeout
             self.partition_option = partition_option
             self.partition_settings = partition_settings
    +        self.additional_columns = additional_columns
             self.type = 'OracleSource'
     
     
    @@ -21744,6 +22153,11 @@ class OrcSource(CopySource):
         :type type: str
         :param store_settings: ORC store settings.
         :type store_settings: ~azure.mgmt.datafactory.models.StoreReadSettings
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -21757,11 +22171,13 @@ class OrcSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'store_settings': {'key': 'storeSettings', 'type': 'StoreReadSettings'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, store_settings=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, store_settings=None, additional_columns=None, **kwargs) -> None:
             super(OrcSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.store_settings = store_settings
    +        self.additional_columns = additional_columns
             self.type = 'OrcSource'
     
     
    @@ -21966,6 +22382,11 @@ class ParquetSource(CopySource):
         :type type: str
         :param store_settings: Parquet store settings.
         :type store_settings: ~azure.mgmt.datafactory.models.StoreReadSettings
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -21979,11 +22400,13 @@ class ParquetSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'store_settings': {'key': 'storeSettings', 'type': 'StoreReadSettings'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, store_settings=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, store_settings=None, additional_columns=None, **kwargs) -> None:
             super(ParquetSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.store_settings = store_settings
    +        self.additional_columns = additional_columns
             self.type = 'ParquetSource'
     
     
    @@ -22152,6 +22575,11 @@ class PaypalSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -22168,11 +22596,12 @@ class PaypalSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(PaypalSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(PaypalSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'PaypalSource'
     
    @@ -22381,6 +22810,11 @@ class PhoenixSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -22397,11 +22831,12 @@ class PhoenixSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(PhoenixSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(PhoenixSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'PhoenixSource'
     
    @@ -22811,6 +23246,11 @@ class PostgreSqlSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -22827,11 +23267,12 @@ class PostgreSqlSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(PostgreSqlSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(PostgreSqlSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'PostgreSqlSource'
     
    @@ -23121,6 +23562,11 @@ class PrestoSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -23137,11 +23583,12 @@ class PrestoSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(PrestoSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(PrestoSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'PrestoSource'
     
    @@ -23319,6 +23766,11 @@ class QuickBooksSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -23335,11 +23787,12 @@ class QuickBooksSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(QuickBooksSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(QuickBooksSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'QuickBooksSource'
     
    @@ -23503,6 +23956,11 @@ class RelationalSource(CopySource):
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -23516,11 +23974,13 @@ class RelationalSource(CopySource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, additional_columns=None, **kwargs) -> None:
             super(RelationalSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.query = query
    +        self.additional_columns = additional_columns
             self.type = 'RelationalSource'
     
     
    @@ -23584,48 +24044,6 @@ def __init__(self, *, linked_service_name, additional_properties=None, descripti
             self.type = 'RelationalTable'
     
     
    -class RerunTriggerResource(SubResource):
    -    """RerunTrigger resource type.
    -
    -    Variables are only populated by the server, and will be ignored when
    -    sending a request.
    -
    -    All required parameters must be populated in order to send to Azure.
    -
    -    :ivar id: The resource identifier.
    -    :vartype id: str
    -    :ivar name: The resource name.
    -    :vartype name: str
    -    :ivar type: The resource type.
    -    :vartype type: str
    -    :ivar etag: Etag identifies change in the resource.
    -    :vartype etag: str
    -    :param properties: Required. Properties of the rerun trigger.
    -    :type properties:
    -     ~azure.mgmt.datafactory.models.RerunTumblingWindowTrigger
    -    """
    -
    -    _validation = {
    -        'id': {'readonly': True},
    -        'name': {'readonly': True},
    -        'type': {'readonly': True},
    -        'etag': {'readonly': True},
    -        'properties': {'required': True},
    -    }
    -
    -    _attribute_map = {
    -        'id': {'key': 'id', 'type': 'str'},
    -        'name': {'key': 'name', 'type': 'str'},
    -        'type': {'key': 'type', 'type': 'str'},
    -        'etag': {'key': 'etag', 'type': 'str'},
    -        'properties': {'key': 'properties', 'type': 'RerunTumblingWindowTrigger'},
    -    }
    -
    -    def __init__(self, *, properties, **kwargs) -> None:
    -        super(RerunTriggerResource, self).__init__(**kwargs)
    -        self.properties = properties
    -
    -
     class RerunTumblingWindowTrigger(Trigger):
         """Trigger that schedules pipeline reruns for all fixed time interval windows
         from a requested start time to requested end time.
    @@ -23650,7 +24068,7 @@ class RerunTumblingWindowTrigger(Trigger):
         :type annotations: list[object]
         :param type: Required. Constant filled by server.
         :type type: str
    -    :param parent_trigger: The parent trigger reference.
    +    :param parent_trigger: Required. The parent trigger reference.
         :type parent_trigger: object
         :param requested_start_time: Required. The start time for the time period
          for which restatement is initiated. Only UTC time is currently supported.
    @@ -23658,17 +24076,18 @@ class RerunTumblingWindowTrigger(Trigger):
         :param requested_end_time: Required. The end time for the time period for
          which restatement is initiated. Only UTC time is currently supported.
         :type requested_end_time: datetime
    -    :param max_concurrency: Required. The max number of parallel time windows
    -     (ready for execution) for which a rerun is triggered.
    -    :type max_concurrency: int
    +    :param rerun_concurrency: Required. The max number of parallel time
    +     windows (ready for execution) for which a rerun is triggered.
    +    :type rerun_concurrency: int
         """
     
         _validation = {
             'runtime_state': {'readonly': True},
             'type': {'required': True},
    +        'parent_trigger': {'required': True},
             'requested_start_time': {'required': True},
             'requested_end_time': {'required': True},
    -        'max_concurrency': {'required': True, 'maximum': 50, 'minimum': 1},
    +        'rerun_concurrency': {'required': True, 'maximum': 50, 'minimum': 1},
         }
     
         _attribute_map = {
    @@ -23680,53 +24099,18 @@ class RerunTumblingWindowTrigger(Trigger):
             'parent_trigger': {'key': 'typeProperties.parentTrigger', 'type': 'object'},
             'requested_start_time': {'key': 'typeProperties.requestedStartTime', 'type': 'iso-8601'},
             'requested_end_time': {'key': 'typeProperties.requestedEndTime', 'type': 'iso-8601'},
    -        'max_concurrency': {'key': 'typeProperties.maxConcurrency', 'type': 'int'},
    +        'rerun_concurrency': {'key': 'typeProperties.rerunConcurrency', 'type': 'int'},
         }
     
    -    def __init__(self, *, requested_start_time, requested_end_time, max_concurrency: int, additional_properties=None, description: str=None, annotations=None, parent_trigger=None, **kwargs) -> None:
    +    def __init__(self, *, parent_trigger, requested_start_time, requested_end_time, rerun_concurrency: int, additional_properties=None, description: str=None, annotations=None, **kwargs) -> None:
             super(RerunTumblingWindowTrigger, self).__init__(additional_properties=additional_properties, description=description, annotations=annotations, **kwargs)
             self.parent_trigger = parent_trigger
             self.requested_start_time = requested_start_time
             self.requested_end_time = requested_end_time
    -        self.max_concurrency = max_concurrency
    +        self.rerun_concurrency = rerun_concurrency
             self.type = 'RerunTumblingWindowTrigger'
     
     
    -class RerunTumblingWindowTriggerActionParameters(Model):
    -    """Rerun tumbling window trigger Parameters.
    -
    -    All required parameters must be populated in order to send to Azure.
    -
    -    :param start_time: Required. The start time for the time period for which
    -     restatement is initiated. Only UTC time is currently supported.
    -    :type start_time: datetime
    -    :param end_time: Required. The end time for the time period for which
    -     restatement is initiated. Only UTC time is currently supported.
    -    :type end_time: datetime
    -    :param max_concurrency: Required. The max number of parallel time windows
    -     (ready for execution) for which a rerun is triggered.
    -    :type max_concurrency: int
    -    """
    -
    -    _validation = {
    -        'start_time': {'required': True},
    -        'end_time': {'required': True},
    -        'max_concurrency': {'required': True, 'maximum': 50, 'minimum': 1},
    -    }
    -
    -    _attribute_map = {
    -        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
    -        'end_time': {'key': 'endTime', 'type': 'iso-8601'},
    -        'max_concurrency': {'key': 'maxConcurrency', 'type': 'int'},
    -    }
    -
    -    def __init__(self, *, start_time, end_time, max_concurrency: int, **kwargs) -> None:
    -        super(RerunTumblingWindowTriggerActionParameters, self).__init__(**kwargs)
    -        self.start_time = start_time
    -        self.end_time = end_time
    -        self.max_concurrency = max_concurrency
    -
    -
     class ResponsysLinkedService(LinkedService):
         """Responsys linked service.
     
    @@ -23894,6 +24278,11 @@ class ResponsysSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -23910,11 +24299,12 @@ class ResponsysSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(ResponsysSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(ResponsysSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'ResponsysSource'
     
    @@ -24138,6 +24528,11 @@ class RestSource(CopySource):
         :param request_interval: The time to await before sending next page
          request.
         :type request_interval: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -24156,9 +24551,10 @@ class RestSource(CopySource):
             'pagination_rules': {'key': 'paginationRules', 'type': 'object'},
             'http_request_timeout': {'key': 'httpRequestTimeout', 'type': 'object'},
             'request_interval': {'key': 'requestInterval', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, request_method=None, request_body=None, additional_headers=None, pagination_rules=None, http_request_timeout=None, request_interval=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, request_method=None, request_body=None, additional_headers=None, pagination_rules=None, http_request_timeout=None, request_interval=None, additional_columns=None, **kwargs) -> None:
             super(RestSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.request_method = request_method
             self.request_body = request_body
    @@ -24166,6 +24562,7 @@ def __init__(self, *, additional_properties=None, source_retry_count=None, sourc
             self.pagination_rules = pagination_rules
             self.http_request_timeout = http_request_timeout
             self.request_interval = request_interval
    +        self.additional_columns = additional_columns
             self.type = 'RestSource'
     
     
    @@ -24345,9 +24742,12 @@ class SalesforceLinkedService(LinkedService):
         :param password: The password for Basic authentication of the Salesforce
          instance.
         :type password: ~azure.mgmt.datafactory.models.SecretBase
    -    :param security_token: The security token is required to remotely access
    +    :param security_token: The security token is optional to remotely access
          Salesforce instance.
         :type security_token: ~azure.mgmt.datafactory.models.SecretBase
    +    :param api_version: The Salesforce API version used in ADF. Type: string
    +     (or Expression with resultType string).
    +    :type api_version: object
         :param encrypted_credential: The encrypted credential used for
          authentication. Credentials are encrypted using the integration runtime
          credential manager. Type: string (or Expression with resultType string).
    @@ -24369,15 +24769,17 @@ class SalesforceLinkedService(LinkedService):
             'username': {'key': 'typeProperties.username', 'type': 'object'},
             'password': {'key': 'typeProperties.password', 'type': 'SecretBase'},
             'security_token': {'key': 'typeProperties.securityToken', 'type': 'SecretBase'},
    +        'api_version': {'key': 'typeProperties.apiVersion', 'type': 'object'},
             'encrypted_credential': {'key': 'typeProperties.encryptedCredential', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, connect_via=None, description: str=None, parameters=None, annotations=None, environment_url=None, username=None, password=None, security_token=None, encrypted_credential=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, connect_via=None, description: str=None, parameters=None, annotations=None, environment_url=None, username=None, password=None, security_token=None, api_version=None, encrypted_credential=None, **kwargs) -> None:
             super(SalesforceLinkedService, self).__init__(additional_properties=additional_properties, connect_via=connect_via, description=description, parameters=parameters, annotations=annotations, **kwargs)
             self.environment_url = environment_url
             self.username = username
             self.password = password
             self.security_token = security_token
    +        self.api_version = api_version
             self.encrypted_credential = encrypted_credential
             self.type = 'Salesforce'
     
    @@ -24546,6 +24948,11 @@ class SalesforceMarketingCloudSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -24562,11 +24969,12 @@ class SalesforceMarketingCloudSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(SalesforceMarketingCloudSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(SalesforceMarketingCloudSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'SalesforceMarketingCloudSource'
     
    @@ -24664,9 +25072,12 @@ class SalesforceServiceCloudLinkedService(LinkedService):
         :param password: The password for Basic authentication of the Salesforce
          instance.
         :type password: ~azure.mgmt.datafactory.models.SecretBase
    -    :param security_token: The security token is required to remotely access
    +    :param security_token: The security token is optional to remotely access
          Salesforce instance.
         :type security_token: ~azure.mgmt.datafactory.models.SecretBase
    +    :param api_version: The Salesforce API version used in ADF. Type: string
    +     (or Expression with resultType string).
    +    :type api_version: object
         :param extended_properties: Extended properties appended to the connection
          string. Type: string (or Expression with resultType string).
         :type extended_properties: object
    @@ -24691,16 +25102,18 @@ class SalesforceServiceCloudLinkedService(LinkedService):
             'username': {'key': 'typeProperties.username', 'type': 'object'},
             'password': {'key': 'typeProperties.password', 'type': 'SecretBase'},
             'security_token': {'key': 'typeProperties.securityToken', 'type': 'SecretBase'},
    +        'api_version': {'key': 'typeProperties.apiVersion', 'type': 'object'},
             'extended_properties': {'key': 'typeProperties.extendedProperties', 'type': 'object'},
             'encrypted_credential': {'key': 'typeProperties.encryptedCredential', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, connect_via=None, description: str=None, parameters=None, annotations=None, environment_url=None, username=None, password=None, security_token=None, extended_properties=None, encrypted_credential=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, connect_via=None, description: str=None, parameters=None, annotations=None, environment_url=None, username=None, password=None, security_token=None, api_version=None, extended_properties=None, encrypted_credential=None, **kwargs) -> None:
             super(SalesforceServiceCloudLinkedService, self).__init__(additional_properties=additional_properties, connect_via=connect_via, description=description, parameters=parameters, annotations=annotations, **kwargs)
             self.environment_url = environment_url
             self.username = username
             self.password = password
             self.security_token = security_token
    +        self.api_version = api_version
             self.extended_properties = extended_properties
             self.encrypted_credential = encrypted_credential
             self.type = 'SalesforceServiceCloud'
    @@ -24866,6 +25279,11 @@ class SalesforceServiceCloudSource(CopySource):
          Query. Possible values include: 'Query', 'QueryAll'
         :type read_behavior: str or
          ~azure.mgmt.datafactory.models.SalesforceSourceReadBehavior
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -24880,12 +25298,14 @@ class SalesforceServiceCloudSource(CopySource):
             'type': {'key': 'type', 'type': 'str'},
             'query': {'key': 'query', 'type': 'object'},
             'read_behavior': {'key': 'readBehavior', 'type': 'str'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, read_behavior=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query=None, read_behavior=None, additional_columns=None, **kwargs) -> None:
             super(SalesforceServiceCloudSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.query = query
             self.read_behavior = read_behavior
    +        self.additional_columns = additional_columns
             self.type = 'SalesforceServiceCloudSource'
     
     
    @@ -24986,6 +25406,11 @@ class SalesforceSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -25006,12 +25431,13 @@ class SalesforceSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
             'read_behavior': {'key': 'readBehavior', 'type': 'str'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, read_behavior=None, **kwargs) -> None:
    -        super(SalesforceSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, read_behavior=None, **kwargs) -> None:
    +        super(SalesforceSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.read_behavior = read_behavior
             self.type = 'SalesforceSource'
    @@ -25173,6 +25599,11 @@ class SapBwSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: MDX query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -25189,11 +25620,12 @@ class SapBwSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(SapBwSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(SapBwSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'SapBwSource'
     
    @@ -25403,6 +25835,11 @@ class SapCloudForCustomerSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: SAP Cloud for Customer OData query. For example, "$top=1".
          Type: string (or Expression with resultType string).
         :type query: object
    @@ -25419,11 +25856,12 @@ class SapCloudForCustomerSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(SapCloudForCustomerSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(SapCloudForCustomerSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'SapCloudForCustomerSource'
     
    @@ -25578,6 +26016,11 @@ class SapEccSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: SAP ECC OData query. For example, "$top=1". Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -25594,11 +26037,12 @@ class SapEccSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(SapEccSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(SapEccSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'SapEccSource'
     
    @@ -25719,6 +26163,11 @@ class SapHanaSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: SAP HANA Sql query. Type: string (or Expression with
          resultType string).
         :type query: object
    @@ -25747,14 +26196,15 @@ class SapHanaSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
             'packet_size': {'key': 'packetSize', 'type': 'object'},
             'partition_option': {'key': 'partitionOption', 'type': 'str'},
             'partition_settings': {'key': 'partitionSettings', 'type': 'SapHanaPartitionSettings'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, packet_size=None, partition_option=None, partition_settings=None, **kwargs) -> None:
    -        super(SapHanaSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, packet_size=None, partition_option=None, partition_settings=None, **kwargs) -> None:
    +        super(SapHanaSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.packet_size = packet_size
             self.partition_option = partition_option
    @@ -25940,6 +26390,11 @@ class SapOpenHubSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param exclude_last_request: Whether to exclude the records of the last
          request. The default value is true. Type: boolean (or Expression with
          resultType boolean).
    @@ -25962,12 +26417,13 @@ class SapOpenHubSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'exclude_last_request': {'key': 'excludeLastRequest', 'type': 'object'},
             'base_request_id': {'key': 'baseRequestId', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, exclude_last_request=None, base_request_id=None, **kwargs) -> None:
    -        super(SapOpenHubSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, exclude_last_request=None, base_request_id=None, **kwargs) -> None:
    +        super(SapOpenHubSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.exclude_last_request = exclude_last_request
             self.base_request_id = base_request_id
             self.type = 'SapOpenHubSource'
    @@ -26297,6 +26753,11 @@ class SapTableSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param row_count: The number of rows to be retrieved. Type: integer(or
          Expression with resultType integer).
         :type row_count: object
    @@ -26342,6 +26803,7 @@ class SapTableSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'row_count': {'key': 'rowCount', 'type': 'object'},
             'row_skips': {'key': 'rowSkips', 'type': 'object'},
             'rfc_table_fields': {'key': 'rfcTableFields', 'type': 'object'},
    @@ -26352,8 +26814,8 @@ class SapTableSource(TabularSource):
             'partition_settings': {'key': 'partitionSettings', 'type': 'SapTablePartitionSettings'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, row_count=None, row_skips=None, rfc_table_fields=None, rfc_table_options=None, batch_size=None, custom_rfc_read_table_function_module=None, partition_option=None, partition_settings=None, **kwargs) -> None:
    -        super(SapTableSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, row_count=None, row_skips=None, rfc_table_fields=None, rfc_table_options=None, batch_size=None, custom_rfc_read_table_function_module=None, partition_option=None, partition_settings=None, **kwargs) -> None:
    +        super(SapTableSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.row_count = row_count
             self.row_skips = row_skips
             self.rfc_table_fields = rfc_table_fields
    @@ -27032,6 +27494,11 @@ class ServiceNowSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -27048,11 +27515,12 @@ class ServiceNowSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(ServiceNowSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(ServiceNowSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'ServiceNowSource'
     
    @@ -27162,6 +27630,10 @@ class SftpReadSettings(StoreReadSettings):
         :param wildcard_file_name: Sftp wildcardFileName. Type: string (or
          Expression with resultType string).
         :type wildcard_file_name: object
    +    :param file_list_path: Point to a text file that lists each file (relative
    +     path to the path configured in the dataset) that you want to copy. Type:
    +     string (or Expression with resultType string).
    +    :type file_list_path: object
         :param modified_datetime_start: The start of file's modified datetime.
          Type: string (or Expression with resultType string).
         :type modified_datetime_start: object
    @@ -27181,15 +27653,17 @@ class SftpReadSettings(StoreReadSettings):
             'recursive': {'key': 'recursive', 'type': 'object'},
             'wildcard_folder_path': {'key': 'wildcardFolderPath', 'type': 'object'},
             'wildcard_file_name': {'key': 'wildcardFileName', 'type': 'object'},
    +        'file_list_path': {'key': 'fileListPath', 'type': 'object'},
             'modified_datetime_start': {'key': 'modifiedDatetimeStart', 'type': 'object'},
             'modified_datetime_end': {'key': 'modifiedDatetimeEnd', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, recursive=None, wildcard_folder_path=None, wildcard_file_name=None, file_list_path=None, modified_datetime_start=None, modified_datetime_end=None, **kwargs) -> None:
             super(SftpReadSettings, self).__init__(additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs)
             self.recursive = recursive
             self.wildcard_folder_path = wildcard_folder_path
             self.wildcard_file_name = wildcard_file_name
    +        self.file_list_path = file_list_path
             self.modified_datetime_start = modified_datetime_start
             self.modified_datetime_end = modified_datetime_end
             self.type = 'SftpReadSettings'
    @@ -27322,6 +27796,10 @@ class SftpWriteSettings(StoreWriteSettings):
          SFTP server. Default value: 01:00:00 (one hour). Type: string (or
          Expression with resultType string).
         :type operation_timeout: object
    +    :param use_temp_file_rename: Upload to temporary file(s) and rename.
    +     Disable this option if your SFTP server doesn't support rename operation.
    +     Type: boolean (or Expression with resultType boolean).
    +    :type use_temp_file_rename: object
         """
     
         _validation = {
    @@ -27334,11 +27812,13 @@ class SftpWriteSettings(StoreWriteSettings):
             'copy_behavior': {'key': 'copyBehavior', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'operation_timeout': {'key': 'operationTimeout', 'type': 'object'},
    +        'use_temp_file_rename': {'key': 'useTempFileRename', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, copy_behavior=None, operation_timeout=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, max_concurrent_connections=None, copy_behavior=None, operation_timeout=None, use_temp_file_rename=None, **kwargs) -> None:
             super(SftpWriteSettings, self).__init__(additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, copy_behavior=copy_behavior, **kwargs)
             self.operation_timeout = operation_timeout
    +        self.use_temp_file_rename = use_temp_file_rename
             self.type = 'SftpWriteSettings'
     
     
    @@ -27501,6 +27981,11 @@ class ShopifySource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -27517,15 +28002,39 @@ class ShopifySource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(ShopifySource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(ShopifySource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'ShopifySource'
     
     
    +class SkipErrorFile(Model):
    +    """Skip error file.
    +
    +    :param file_missing: Skip if file is deleted by other client during copy.
    +     Default is true. Type: boolean (or Expression with resultType boolean).
    +    :type file_missing: object
    +    :param data_inconsistency: Skip if source/sink file changed by other
    +     concurrent write. Default is false. Type: boolean (or Expression with
    +     resultType boolean).
    +    :type data_inconsistency: object
    +    """
    +
    +    _attribute_map = {
    +        'file_missing': {'key': 'fileMissing', 'type': 'object'},
    +        'data_inconsistency': {'key': 'dataInconsistency', 'type': 'object'},
    +    }
    +
    +    def __init__(self, *, file_missing=None, data_inconsistency=None, **kwargs) -> None:
    +        super(SkipErrorFile, self).__init__(**kwargs)
    +        self.file_missing = file_missing
    +        self.data_inconsistency = data_inconsistency
    +
    +
     class SparkLinkedService(LinkedService):
         """Spark Server linked service.
     
    @@ -27740,6 +28249,11 @@ class SparkSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -27756,11 +28270,12 @@ class SparkSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(SparkSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(SparkSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'SparkSource'
     
    @@ -27872,6 +28387,11 @@ class SqlDWSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param sql_reader_query: SQL Data Warehouse reader query. Type: string (or
          Expression with resultType string).
         :type sql_reader_query: object
    @@ -27897,13 +28417,14 @@ class SqlDWSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'sql_reader_query': {'key': 'sqlReaderQuery', 'type': 'object'},
             'sql_reader_stored_procedure_name': {'key': 'sqlReaderStoredProcedureName', 'type': 'object'},
             'stored_procedure_parameters': {'key': 'storedProcedureParameters', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, sql_reader_query=None, sql_reader_stored_procedure_name=None, stored_procedure_parameters=None, **kwargs) -> None:
    -        super(SqlDWSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, sql_reader_query=None, sql_reader_stored_procedure_name=None, stored_procedure_parameters=None, **kwargs) -> None:
    +        super(SqlDWSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.sql_reader_query = sql_reader_query
             self.sql_reader_stored_procedure_name = sql_reader_stored_procedure_name
             self.stored_procedure_parameters = stored_procedure_parameters
    @@ -28016,6 +28537,11 @@ class SqlMISource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param sql_reader_query: SQL reader query. Type: string (or Expression
          with resultType string).
         :type sql_reader_query: object
    @@ -28042,14 +28568,15 @@ class SqlMISource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'sql_reader_query': {'key': 'sqlReaderQuery', 'type': 'object'},
             'sql_reader_stored_procedure_name': {'key': 'sqlReaderStoredProcedureName', 'type': 'object'},
             'stored_procedure_parameters': {'key': 'storedProcedureParameters', 'type': '{StoredProcedureParameter}'},
             'produce_additional_types': {'key': 'produceAdditionalTypes', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, sql_reader_query=None, sql_reader_stored_procedure_name=None, stored_procedure_parameters=None, produce_additional_types=None, **kwargs) -> None:
    -        super(SqlMISource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, sql_reader_query=None, sql_reader_stored_procedure_name=None, stored_procedure_parameters=None, produce_additional_types=None, **kwargs) -> None:
    +        super(SqlMISource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.sql_reader_query = sql_reader_query
             self.sql_reader_stored_procedure_name = sql_reader_stored_procedure_name
             self.stored_procedure_parameters = stored_procedure_parameters
    @@ -28225,6 +28752,11 @@ class SqlServerSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param sql_reader_query: SQL reader query. Type: string (or Expression
          with resultType string).
         :type sql_reader_query: object
    @@ -28251,14 +28783,15 @@ class SqlServerSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'sql_reader_query': {'key': 'sqlReaderQuery', 'type': 'object'},
             'sql_reader_stored_procedure_name': {'key': 'sqlReaderStoredProcedureName', 'type': 'object'},
             'stored_procedure_parameters': {'key': 'storedProcedureParameters', 'type': '{StoredProcedureParameter}'},
             'produce_additional_types': {'key': 'produceAdditionalTypes', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, sql_reader_query=None, sql_reader_stored_procedure_name=None, stored_procedure_parameters=None, produce_additional_types=None, **kwargs) -> None:
    -        super(SqlServerSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, sql_reader_query=None, sql_reader_stored_procedure_name=None, stored_procedure_parameters=None, produce_additional_types=None, **kwargs) -> None:
    +        super(SqlServerSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.sql_reader_query = sql_reader_query
             self.sql_reader_stored_procedure_name = sql_reader_stored_procedure_name
             self.stored_procedure_parameters = stored_procedure_parameters
    @@ -28500,6 +29033,11 @@ class SqlSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param sql_reader_query: SQL reader query. Type: string (or Expression
          with resultType string).
         :type sql_reader_query: object
    @@ -28511,6 +29049,12 @@ class SqlSource(TabularSource):
          procedure parameters. Example: "{Parameter1: {value: "1", type: "int"}}".
         :type stored_procedure_parameters: dict[str,
          ~azure.mgmt.datafactory.models.StoredProcedureParameter]
    +    :param isolation_level: Specifies the transaction locking behavior for the
    +     SQL source. Allowed values:
    +     ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The
    +     default value is ReadCommitted. Type: string (or Expression with
    +     resultType string).
    +    :type isolation_level: object
         """
     
         _validation = {
    @@ -28524,16 +29068,19 @@ class SqlSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'sql_reader_query': {'key': 'sqlReaderQuery', 'type': 'object'},
             'sql_reader_stored_procedure_name': {'key': 'sqlReaderStoredProcedureName', 'type': 'object'},
             'stored_procedure_parameters': {'key': 'storedProcedureParameters', 'type': '{StoredProcedureParameter}'},
    +        'isolation_level': {'key': 'isolationLevel', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, sql_reader_query=None, sql_reader_stored_procedure_name=None, stored_procedure_parameters=None, **kwargs) -> None:
    -        super(SqlSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, sql_reader_query=None, sql_reader_stored_procedure_name=None, stored_procedure_parameters=None, isolation_level=None, **kwargs) -> None:
    +        super(SqlSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.sql_reader_query = sql_reader_query
             self.sql_reader_stored_procedure_name = sql_reader_stored_procedure_name
             self.stored_procedure_parameters = stored_procedure_parameters
    +        self.isolation_level = isolation_level
             self.type = 'SqlSource'
     
     
    @@ -28708,6 +29255,11 @@ class SquareSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -28724,11 +29276,12 @@ class SquareSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(SquareSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(SquareSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'SquareSource'
     
    @@ -29617,6 +30170,11 @@ class SybaseSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Database query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -29633,11 +30191,12 @@ class SybaseSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(SybaseSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(SybaseSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'SybaseSource'
     
    @@ -29829,6 +30388,11 @@ class TeradataSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: Teradata query. Type: string (or Expression with resultType
          string).
         :type query: object
    @@ -29854,13 +30418,14 @@ class TeradataSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
             'partition_option': {'key': 'partitionOption', 'type': 'str'},
             'partition_settings': {'key': 'partitionSettings', 'type': 'TeradataPartitionSettings'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, partition_option=None, partition_settings=None, **kwargs) -> None:
    -        super(TeradataSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, partition_option=None, partition_settings=None, **kwargs) -> None:
    +        super(TeradataSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.partition_option = partition_option
             self.partition_settings = partition_settings
    @@ -30053,6 +30618,28 @@ def __init__(self, *, reference_trigger, **kwargs) -> None:
             self.type = 'TriggerDependencyReference'
     
     
    +class TriggerFilterParameters(Model):
    +    """Query parameters for triggers.
    +
    +    :param continuation_token: The continuation token for getting the next
    +     page of results. Null for first page.
    +    :type continuation_token: str
    +    :param parent_trigger_name: The name of the parent TumblingWindowTrigger
    +     to get the child rerun triggers
    +    :type parent_trigger_name: str
    +    """
    +
    +    _attribute_map = {
    +        'continuation_token': {'key': 'continuationToken', 'type': 'str'},
    +        'parent_trigger_name': {'key': 'parentTriggerName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, continuation_token: str=None, parent_trigger_name: str=None, **kwargs) -> None:
    +        super(TriggerFilterParameters, self).__init__(**kwargs)
    +        self.continuation_token = continuation_token
    +        self.parent_trigger_name = parent_trigger_name
    +
    +
     class TriggerPipelineReference(Model):
         """Pipeline that needs to be triggered with the given parameters.
     
    @@ -30073,6 +30660,33 @@ def __init__(self, *, pipeline_reference=None, parameters=None, **kwargs) -> Non
             self.parameters = parameters
     
     
    +class TriggerQueryResponse(Model):
    +    """A query of triggers.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param value: Required. List of triggers.
    +    :type value: list[~azure.mgmt.datafactory.models.TriggerResource]
    +    :param continuation_token: The continuation token for getting the next
    +     page of results, if any remaining results exist, null otherwise.
    +    :type continuation_token: str
    +    """
    +
    +    _validation = {
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[TriggerResource]'},
    +        'continuation_token': {'key': 'continuationToken', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, value, continuation_token: str=None, **kwargs) -> None:
    +        super(TriggerQueryResponse, self).__init__(**kwargs)
    +        self.value = value
    +        self.continuation_token = continuation_token
    +
    +
     class TriggerReference(Model):
         """Trigger reference type.
     
    @@ -30770,6 +31384,11 @@ class VerticaSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -30786,11 +31405,12 @@ class VerticaSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(VerticaSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(VerticaSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'VerticaSource'
     
    @@ -31345,6 +31965,11 @@ class WebSource(CopySource):
         :type max_concurrent_connections: object
         :param type: Required. Constant filled by server.
         :type type: str
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         """
     
         _validation = {
    @@ -31357,10 +31982,12 @@ class WebSource(CopySource):
             'source_retry_wait': {'key': 'sourceRetryWait', 'type': 'object'},
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, **kwargs) -> None:
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, additional_columns=None, **kwargs) -> None:
             super(WebSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, **kwargs)
    +        self.additional_columns = additional_columns
             self.type = 'WebSource'
     
     
    @@ -31596,6 +32223,11 @@ class XeroSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -31612,11 +32244,12 @@ class XeroSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(XeroSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(XeroSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'XeroSource'
     
    @@ -31779,6 +32412,11 @@ class ZohoSource(TabularSource):
          resultType string), pattern:
          ((\\d+)\\.)?(\\d\\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
         :type query_timeout: object
    +    :param additional_columns: Specifies the additional columns to be added to
    +     source data. Type: array of objects (or Expression with resultType array
    +     of objects).
    +    :type additional_columns:
    +     list[~azure.mgmt.datafactory.models.AdditionalColumns]
         :param query: A query to retrieve data from source. Type: string (or
          Expression with resultType string).
         :type query: object
    @@ -31795,10 +32433,11 @@ class ZohoSource(TabularSource):
             'max_concurrent_connections': {'key': 'maxConcurrentConnections', 'type': 'object'},
             'type': {'key': 'type', 'type': 'str'},
             'query_timeout': {'key': 'queryTimeout', 'type': 'object'},
    +        'additional_columns': {'key': 'additionalColumns', 'type': '[AdditionalColumns]'},
             'query': {'key': 'query', 'type': 'object'},
         }
     
    -    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, query=None, **kwargs) -> None:
    -        super(ZohoSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, **kwargs)
    +    def __init__(self, *, additional_properties=None, source_retry_count=None, source_retry_wait=None, max_concurrent_connections=None, query_timeout=None, additional_columns=None, query=None, **kwargs) -> None:
    +        super(ZohoSource, self).__init__(additional_properties=additional_properties, source_retry_count=source_retry_count, source_retry_wait=source_retry_wait, max_concurrent_connections=max_concurrent_connections, query_timeout=query_timeout, additional_columns=additional_columns, **kwargs)
             self.query = query
             self.type = 'ZohoSource'
    diff --git a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_paged_models.py b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_paged_models.py
    index f78455cfdb9a..9a46a2afb4ca 100644
    --- a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_paged_models.py
    +++ b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/models/_paged_models.py
    @@ -103,19 +103,6 @@ class TriggerResourcePaged(Paged):
         def __init__(self, *args, **kwargs):
     
             super(TriggerResourcePaged, self).__init__(*args, **kwargs)
    -class RerunTriggerResourcePaged(Paged):
    -    """
    -    A paging container for iterating over a list of :class:`RerunTriggerResource ` object
    -    """
    -
    -    _attribute_map = {
    -        'next_link': {'key': 'nextLink', 'type': 'str'},
    -        'current_page': {'key': 'value', 'type': '[RerunTriggerResource]'}
    -    }
    -
    -    def __init__(self, *args, **kwargs):
    -
    -        super(RerunTriggerResourcePaged, self).__init__(*args, **kwargs)
     class DataFlowResourcePaged(Paged):
         """
         A paging container for iterating over a list of :class:`DataFlowResource ` object
    diff --git a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/__init__.py b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/__init__.py
    index 619150f2d6a8..59e9feaff462 100644
    --- a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/__init__.py
    +++ b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/__init__.py
    @@ -22,7 +22,6 @@
     from ._activity_runs_operations import ActivityRunsOperations
     from ._triggers_operations import TriggersOperations
     from ._trigger_runs_operations import TriggerRunsOperations
    -from ._rerun_triggers_operations import RerunTriggersOperations
     from ._data_flows_operations import DataFlowsOperations
     from ._data_flow_debug_session_operations import DataFlowDebugSessionOperations
     
    @@ -40,7 +39,6 @@
         'ActivityRunsOperations',
         'TriggersOperations',
         'TriggerRunsOperations',
    -    'RerunTriggersOperations',
         'DataFlowsOperations',
         'DataFlowDebugSessionOperations',
     ]
    diff --git a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/_pipelines_operations.py b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/_pipelines_operations.py
    index 00201749beee..1f24fba6ac9c 100644
    --- a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/_pipelines_operations.py
    +++ b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/_pipelines_operations.py
    @@ -314,7 +314,7 @@ def delete(
         delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/pipelines/{pipelineName}'}
     
         def create_run(
    -            self, resource_group_name, factory_name, pipeline_name, reference_pipeline_run_id=None, is_recovery=None, start_activity_name=None, parameters=None, custom_headers=None, raw=False, **operation_config):
    +            self, resource_group_name, factory_name, pipeline_name, reference_pipeline_run_id=None, is_recovery=None, start_activity_name=None, start_from_failure=None, parameters=None, custom_headers=None, raw=False, **operation_config):
             """Creates a run of a pipeline.
     
             :param resource_group_name: The resource group name.
    @@ -334,6 +334,10 @@ def create_run(
             :param start_activity_name: In recovery mode, the rerun will start
              from this activity. If not specified, all activities will run.
             :type start_activity_name: str
    +        :param start_from_failure: In recovery mode, if set to true, the rerun
    +         will start from failed activities. The property will be used only if
    +         startActivityName is not specified.
    +        :type start_from_failure: bool
             :param parameters: Parameters of the pipeline run. These parameters
              will be used only if the runId is not specified.
             :type parameters: dict[str, object]
    @@ -366,6 +370,8 @@ def create_run(
                 query_parameters['isRecovery'] = self._serialize.query("is_recovery", is_recovery, 'bool')
             if start_activity_name is not None:
                 query_parameters['startActivityName'] = self._serialize.query("start_activity_name", start_activity_name, 'str')
    +        if start_from_failure is not None:
    +            query_parameters['startFromFailure'] = self._serialize.query("start_from_failure", start_from_failure, 'bool')
     
             # Construct headers
             header_parameters = {}
    diff --git a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/_triggers_operations.py b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/_triggers_operations.py
    index 57e31b1bd8c9..4554f5f7f71b 100644
    --- a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/_triggers_operations.py
    +++ b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/_triggers_operations.py
    @@ -113,6 +113,79 @@ def internal_paging(next_link=None):
             return deserialized
         list_by_factory.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/triggers'}
     
    +    def query_by_factory(
    +            self, resource_group_name, factory_name, continuation_token=None, parent_trigger_name=None, custom_headers=None, raw=False, **operation_config):
    +        """Query triggers.
    +
    +        :param resource_group_name: The resource group name.
    +        :type resource_group_name: str
    +        :param factory_name: The factory name.
    +        :type factory_name: str
    +        :param continuation_token: The continuation token for getting the next
    +         page of results. Null for first page.
    +        :type continuation_token: str
    +        :param parent_trigger_name: The name of the parent
    +         TumblingWindowTrigger to get the child rerun triggers
    +        :type parent_trigger_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: TriggerQueryResponse or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.datafactory.models.TriggerQueryResponse or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        filter_parameters = models.TriggerFilterParameters(continuation_token=continuation_token, parent_trigger_name=parent_trigger_name)
    +
    +        # Construct URL
    +        url = self.query_by_factory.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'),
    +            'factoryName': self._serialize.url("factory_name", factory_name, 'str', max_length=63, min_length=3, pattern=r'^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(filter_parameters, 'TriggerFilterParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('TriggerQueryResponse', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    query_by_factory.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/querytriggers'}
    +
         def create_or_update(
                 self, resource_group_name, factory_name, trigger_name, properties, if_match=None, custom_headers=None, raw=False, **operation_config):
             """Creates or updates a trigger.
    diff --git a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/version.py b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/version.py
    index 3697d9b71739..1f08862acee4 100644
    --- a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/version.py
    +++ b/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/version.py
    @@ -9,5 +9,5 @@
     # regenerated.
     # --------------------------------------------------------------------------
     
    -VERSION = "0.9.0"
    +VERSION = "0.10.0"
     
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/CHANGELOG.md b/sdk/eventgrid/azure-mgmt-eventgrid/CHANGELOG.md
    index ccbd4d092cc1..e40fb4c092ad 100644
    --- a/sdk/eventgrid/azure-mgmt-eventgrid/CHANGELOG.md
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/CHANGELOG.md
    @@ -1,5 +1,45 @@
     # Release History
     
    +## 3.0.0rc5 (2020-03-19)
    +
    +**Features**
    +
    +- Model Domain has a new parameter public_network_access
    +- Model Domain has a new parameter identity
    +- Model Domain has a new parameter private_endpoint_connections
    +- Model Domain has a new parameter sku
    +- Model DomainUpdateParameters has a new parameter public_network_access
    +- Model DomainUpdateParameters has a new parameter identity
    +- Model DomainUpdateParameters has a new parameter sku
    +- Model TopicUpdateParameters has a new parameter public_network_access
    +- Model TopicUpdateParameters has a new parameter identity
    +- Model TopicUpdateParameters has a new parameter sku
    +- Model EventSubscriptionUpdateParameters has a new parameter dead_letter_with_resource_identity
    +- Model EventSubscriptionUpdateParameters has a new parameter delivery_with_resource_identity
    +- Model Topic has a new parameter public_network_access
    +- Model Topic has a new parameter identity
    +- Model Topic has a new parameter private_endpoint_connections
    +- Model Topic has a new parameter sku
    +- Model EventSubscription has a new parameter dead_letter_with_resource_identity
    +- Model EventSubscription has a new parameter delivery_with_resource_identity
    +- Added operation group PrivateLinkResourcesOperations
    +- Added operation group SystemTopicsOperations
    +- Added operation group PrivateEndpointConnectionsOperations
    +- Added operation group PartnerTopicsOperations
    +- Added operation group PartnerNamespacesOperations
    +- Added operation group PartnerTopicEventSubscriptionsOperations
    +- Added operation group PartnerRegistrationsOperations
    +- Added operation group ExtensionTopicsOperations
    +- Added operation group SystemTopicEventSubscriptionsOperations
    +- Added operation group EventChannelsOperations
    +
    +**Breaking changes**
    +
    +- Model Domain no longer has parameter allow_traffic_from_all_ips
    +- Model DomainUpdateParameters no longer has parameter allow_traffic_from_all_ips
    +- Model TopicUpdateParameters no longer has parameter allow_traffic_from_all_ips
    +- Model Topic no longer has parameter allow_traffic_from_all_ips
    +
     ## 3.0.0rc4 (2020-01-17)
     
     **Features**
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/README.md b/sdk/eventgrid/azure-mgmt-eventgrid/README.md
    index 4a32536bce92..c0d223ed7a4c 100644
    --- a/sdk/eventgrid/azure-mgmt-eventgrid/README.md
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/README.md
    @@ -1,29 +1,21 @@
    -## Microsoft Azure SDK for Python
    +# Microsoft Azure SDK for Python
     
     This is the Microsoft Azure EventGrid Management Client Library.
    -
    -Azure Resource Manager (ARM) is the next generation of management APIs
    -that replace the old Azure Service Management (ASM).
    -
     This package has been tested with Python 2.7, 3.5, 3.6, 3.7 and 3.8.
    +For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/)
     
    -For the older Azure Service Management (ASM) libraries, see
    -[azure-servicemanagement-legacy](https://pypi.python.org/pypi/azure-servicemanagement-legacy)
    -library.
    -
    -For a more complete set of Azure libraries, see the
    -[azure](https://pypi.python.org/pypi/azure) bundle package.
     
    -## Usage
    +# Usage
     
    -For code examples, see [EventGrid
    -Management](https://docs.microsoft.com/python/api/overview/azure/event-grid)
    +For code examples, see [EventGrid Management](https://docs.microsoft.com/python/api/overview/azure/event-grid)
     on docs.microsoft.com.
     
    -## Provide Feedback
     
    -If you encounter any bugs or have suggestions, please file an issue in
    -the [Issues](https://github.com/Azure/azure-sdk-for-python/issues)
    +# Provide Feedback
    +
    +If you encounter any bugs or have suggestions, please file an issue in the
    +[Issues](https://github.com/Azure/azure-sdk-for-python/issues)
     section of the project.
     
    -![image](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-eventgrid%2FREADME.png)
    +
    +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-eventgrid%2FREADME.png)
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/_event_grid_management_client.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/_event_grid_management_client.py
    index c0acd1541bf7..829072a97703 100644
    --- a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/_event_grid_management_client.py
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/_event_grid_management_client.py
    @@ -15,9 +15,19 @@
     from ._configuration import EventGridManagementClientConfiguration
     from .operations import DomainsOperations
     from .operations import DomainTopicsOperations
    +from .operations import EventChannelsOperations
     from .operations import EventSubscriptionsOperations
    +from .operations import SystemTopicEventSubscriptionsOperations
    +from .operations import PartnerTopicEventSubscriptionsOperations
     from .operations import Operations
    +from .operations import PartnerNamespacesOperations
    +from .operations import PartnerRegistrationsOperations
    +from .operations import PartnerTopicsOperations
    +from .operations import PrivateEndpointConnectionsOperations
    +from .operations import PrivateLinkResourcesOperations
    +from .operations import SystemTopicsOperations
     from .operations import TopicsOperations
    +from .operations import ExtensionTopicsOperations
     from .operations import TopicTypesOperations
     from . import models
     
    @@ -32,12 +42,32 @@ class EventGridManagementClient(SDKClient):
         :vartype domains: azure.mgmt.eventgrid.operations.DomainsOperations
         :ivar domain_topics: DomainTopics operations
         :vartype domain_topics: azure.mgmt.eventgrid.operations.DomainTopicsOperations
    +    :ivar event_channels: EventChannels operations
    +    :vartype event_channels: azure.mgmt.eventgrid.operations.EventChannelsOperations
         :ivar event_subscriptions: EventSubscriptions operations
         :vartype event_subscriptions: azure.mgmt.eventgrid.operations.EventSubscriptionsOperations
    +    :ivar system_topic_event_subscriptions: SystemTopicEventSubscriptions operations
    +    :vartype system_topic_event_subscriptions: azure.mgmt.eventgrid.operations.SystemTopicEventSubscriptionsOperations
    +    :ivar partner_topic_event_subscriptions: PartnerTopicEventSubscriptions operations
    +    :vartype partner_topic_event_subscriptions: azure.mgmt.eventgrid.operations.PartnerTopicEventSubscriptionsOperations
         :ivar operations: Operations operations
         :vartype operations: azure.mgmt.eventgrid.operations.Operations
    +    :ivar partner_namespaces: PartnerNamespaces operations
    +    :vartype partner_namespaces: azure.mgmt.eventgrid.operations.PartnerNamespacesOperations
    +    :ivar partner_registrations: PartnerRegistrations operations
    +    :vartype partner_registrations: azure.mgmt.eventgrid.operations.PartnerRegistrationsOperations
    +    :ivar partner_topics: PartnerTopics operations
    +    :vartype partner_topics: azure.mgmt.eventgrid.operations.PartnerTopicsOperations
    +    :ivar private_endpoint_connections: PrivateEndpointConnections operations
    +    :vartype private_endpoint_connections: azure.mgmt.eventgrid.operations.PrivateEndpointConnectionsOperations
    +    :ivar private_link_resources: PrivateLinkResources operations
    +    :vartype private_link_resources: azure.mgmt.eventgrid.operations.PrivateLinkResourcesOperations
    +    :ivar system_topics: SystemTopics operations
    +    :vartype system_topics: azure.mgmt.eventgrid.operations.SystemTopicsOperations
         :ivar topics: Topics operations
         :vartype topics: azure.mgmt.eventgrid.operations.TopicsOperations
    +    :ivar extension_topics: ExtensionTopics operations
    +    :vartype extension_topics: azure.mgmt.eventgrid.operations.ExtensionTopicsOperations
         :ivar topic_types: TopicTypes operations
         :vartype topic_types: azure.mgmt.eventgrid.operations.TopicTypesOperations
     
    @@ -66,11 +96,31 @@ def __init__(
                 self._client, self.config, self._serialize, self._deserialize)
             self.domain_topics = DomainTopicsOperations(
                 self._client, self.config, self._serialize, self._deserialize)
    +        self.event_channels = EventChannelsOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
             self.event_subscriptions = EventSubscriptionsOperations(
                 self._client, self.config, self._serialize, self._deserialize)
    +        self.system_topic_event_subscriptions = SystemTopicEventSubscriptionsOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.partner_topic_event_subscriptions = PartnerTopicEventSubscriptionsOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
             self.operations = Operations(
                 self._client, self.config, self._serialize, self._deserialize)
    +        self.partner_namespaces = PartnerNamespacesOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.partner_registrations = PartnerRegistrationsOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.partner_topics = PartnerTopicsOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.private_endpoint_connections = PrivateEndpointConnectionsOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.private_link_resources = PrivateLinkResourcesOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.system_topics = SystemTopicsOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
             self.topics = TopicsOperations(
                 self._client, self.config, self._serialize, self._deserialize)
    +        self.extension_topics = ExtensionTopicsOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
             self.topic_types = TopicTypesOperations(
                 self._client, self.config, self._serialize, self._deserialize)
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/__init__.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/__init__.py
    index b3e80dc36b0b..538fd1e5bf7c 100644
    --- a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/__init__.py
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/__init__.py
    @@ -13,20 +13,29 @@
         from ._models_py3 import AdvancedFilter
         from ._models_py3 import AzureFunctionEventSubscriptionDestination
         from ._models_py3 import BoolEqualsAdvancedFilter
    +    from ._models_py3 import ConnectionState
         from ._models_py3 import DeadLetterDestination
    +    from ._models_py3 import DeadLetterWithResourceIdentity
    +    from ._models_py3 import DeliveryWithResourceIdentity
         from ._models_py3 import Domain
         from ._models_py3 import DomainRegenerateKeyRequest
         from ._models_py3 import DomainSharedAccessKeys
         from ._models_py3 import DomainTopic
         from ._models_py3 import DomainUpdateParameters
    +    from ._models_py3 import EventChannel
    +    from ._models_py3 import EventChannelDestination
    +    from ._models_py3 import EventChannelSource
         from ._models_py3 import EventHubEventSubscriptionDestination
         from ._models_py3 import EventSubscription
         from ._models_py3 import EventSubscriptionDestination
         from ._models_py3 import EventSubscriptionFilter
         from ._models_py3 import EventSubscriptionFullUrl
    +    from ._models_py3 import EventSubscriptionIdentity
         from ._models_py3 import EventSubscriptionUpdateParameters
         from ._models_py3 import EventType
    +    from ._models_py3 import ExtensionTopic
         from ._models_py3 import HybridConnectionEventSubscriptionDestination
    +    from ._models_py3 import IdentityInfo
         from ._models_py3 import InboundIpRule
         from ._models_py3 import InputSchemaMapping
         from ._models_py3 import JsonField
    @@ -40,10 +49,27 @@
         from ._models_py3 import NumberNotInAdvancedFilter
         from ._models_py3 import Operation
         from ._models_py3 import OperationInfo
    +    from ._models_py3 import PartnerNamespace
    +    from ._models_py3 import PartnerNamespaceRegenerateKeyRequest
    +    from ._models_py3 import PartnerNamespaceSharedAccessKeys
    +    from ._models_py3 import PartnerNamespaceUpdateParameters
    +    from ._models_py3 import PartnerRegistration
    +    from ._models_py3 import PartnerRegistrationEventTypesListResult
    +    from ._models_py3 import PartnerRegistrationUpdateParameters
    +    from ._models_py3 import PartnerTopic
    +    from ._models_py3 import PartnerTopicType
    +    from ._models_py3 import PartnerTopicTypesListResult
    +    from ._models_py3 import PartnerTopicUpdateParameters
    +    from ._models_py3 import PrivateEndpoint
    +    from ._models_py3 import PrivateEndpointConnection
    +    from ._models_py3 import PrivateLinkResource
         from ._models_py3 import Resource
    +    from ._models_py3 import ResourceSku
         from ._models_py3 import RetryPolicy
         from ._models_py3 import ServiceBusQueueEventSubscriptionDestination
         from ._models_py3 import ServiceBusTopicEventSubscriptionDestination
    +    from ._models_py3 import SkuDefinitionsForResourceType
    +    from ._models_py3 import SkuDefinitionsForResourceTypeListResult
         from ._models_py3 import StorageBlobDeadLetterDestination
         from ._models_py3 import StorageQueueEventSubscriptionDestination
         from ._models_py3 import StringBeginsWithAdvancedFilter
    @@ -51,31 +77,43 @@
         from ._models_py3 import StringEndsWithAdvancedFilter
         from ._models_py3 import StringInAdvancedFilter
         from ._models_py3 import StringNotInAdvancedFilter
    +    from ._models_py3 import SystemTopic
    +    from ._models_py3 import SystemTopicUpdateParameters
         from ._models_py3 import Topic
         from ._models_py3 import TopicRegenerateKeyRequest
         from ._models_py3 import TopicSharedAccessKeys
         from ._models_py3 import TopicTypeInfo
         from ._models_py3 import TopicUpdateParameters
         from ._models_py3 import TrackedResource
    +    from ._models_py3 import UserIdentityProperties
         from ._models_py3 import WebHookEventSubscriptionDestination
     except (SyntaxError, ImportError):
         from ._models import AdvancedFilter
         from ._models import AzureFunctionEventSubscriptionDestination
         from ._models import BoolEqualsAdvancedFilter
    +    from ._models import ConnectionState
         from ._models import DeadLetterDestination
    +    from ._models import DeadLetterWithResourceIdentity
    +    from ._models import DeliveryWithResourceIdentity
         from ._models import Domain
         from ._models import DomainRegenerateKeyRequest
         from ._models import DomainSharedAccessKeys
         from ._models import DomainTopic
         from ._models import DomainUpdateParameters
    +    from ._models import EventChannel
    +    from ._models import EventChannelDestination
    +    from ._models import EventChannelSource
         from ._models import EventHubEventSubscriptionDestination
         from ._models import EventSubscription
         from ._models import EventSubscriptionDestination
         from ._models import EventSubscriptionFilter
         from ._models import EventSubscriptionFullUrl
    +    from ._models import EventSubscriptionIdentity
         from ._models import EventSubscriptionUpdateParameters
         from ._models import EventType
    +    from ._models import ExtensionTopic
         from ._models import HybridConnectionEventSubscriptionDestination
    +    from ._models import IdentityInfo
         from ._models import InboundIpRule
         from ._models import InputSchemaMapping
         from ._models import JsonField
    @@ -89,10 +127,27 @@
         from ._models import NumberNotInAdvancedFilter
         from ._models import Operation
         from ._models import OperationInfo
    +    from ._models import PartnerNamespace
    +    from ._models import PartnerNamespaceRegenerateKeyRequest
    +    from ._models import PartnerNamespaceSharedAccessKeys
    +    from ._models import PartnerNamespaceUpdateParameters
    +    from ._models import PartnerRegistration
    +    from ._models import PartnerRegistrationEventTypesListResult
    +    from ._models import PartnerRegistrationUpdateParameters
    +    from ._models import PartnerTopic
    +    from ._models import PartnerTopicType
    +    from ._models import PartnerTopicTypesListResult
    +    from ._models import PartnerTopicUpdateParameters
    +    from ._models import PrivateEndpoint
    +    from ._models import PrivateEndpointConnection
    +    from ._models import PrivateLinkResource
         from ._models import Resource
    +    from ._models import ResourceSku
         from ._models import RetryPolicy
         from ._models import ServiceBusQueueEventSubscriptionDestination
         from ._models import ServiceBusTopicEventSubscriptionDestination
    +    from ._models import SkuDefinitionsForResourceType
    +    from ._models import SkuDefinitionsForResourceTypeListResult
         from ._models import StorageBlobDeadLetterDestination
         from ._models import StorageQueueEventSubscriptionDestination
         from ._models import StringBeginsWithAdvancedFilter
    @@ -100,27 +155,50 @@
         from ._models import StringEndsWithAdvancedFilter
         from ._models import StringInAdvancedFilter
         from ._models import StringNotInAdvancedFilter
    +    from ._models import SystemTopic
    +    from ._models import SystemTopicUpdateParameters
         from ._models import Topic
         from ._models import TopicRegenerateKeyRequest
         from ._models import TopicSharedAccessKeys
         from ._models import TopicTypeInfo
         from ._models import TopicUpdateParameters
         from ._models import TrackedResource
    +    from ._models import UserIdentityProperties
         from ._models import WebHookEventSubscriptionDestination
     from ._paged_models import DomainPaged
     from ._paged_models import DomainTopicPaged
    +from ._paged_models import EventChannelPaged
     from ._paged_models import EventSubscriptionPaged
     from ._paged_models import EventTypePaged
     from ._paged_models import OperationPaged
    +from ._paged_models import PartnerNamespacePaged
    +from ._paged_models import PartnerRegistrationPaged
    +from ._paged_models import PartnerTopicPaged
    +from ._paged_models import PrivateEndpointConnectionPaged
    +from ._paged_models import PrivateLinkResourcePaged
    +from ._paged_models import SystemTopicPaged
     from ._paged_models import TopicPaged
     from ._paged_models import TopicTypeInfoPaged
     from ._event_grid_management_client_enums import (
    +    PersistedConnectionStatus,
    +    ResourceProvisioningState,
         DomainProvisioningState,
         InputSchema,
    +    PublicNetworkAccess,
         IpActionType,
    +    Sku,
    +    IdentityType,
         DomainTopicProvisioningState,
    +    EventChannelProvisioningState,
         EventSubscriptionProvisioningState,
    +    EventSubscriptionIdentityType,
         EventDeliverySchema,
    +    PartnerNamespaceProvisioningState,
    +    PartnerRegistrationProvisioningState,
    +    PartnerRegistrationVisibilityState,
    +    PartnerTopicProvisioningState,
    +    PartnerTopicActivationState,
    +    PartnerTopicTypeAuthorizationState,
         TopicProvisioningState,
         ResourceRegionType,
         TopicTypeProvisioningState,
    @@ -130,20 +208,29 @@
         'AdvancedFilter',
         'AzureFunctionEventSubscriptionDestination',
         'BoolEqualsAdvancedFilter',
    +    'ConnectionState',
         'DeadLetterDestination',
    +    'DeadLetterWithResourceIdentity',
    +    'DeliveryWithResourceIdentity',
         'Domain',
         'DomainRegenerateKeyRequest',
         'DomainSharedAccessKeys',
         'DomainTopic',
         'DomainUpdateParameters',
    +    'EventChannel',
    +    'EventChannelDestination',
    +    'EventChannelSource',
         'EventHubEventSubscriptionDestination',
         'EventSubscription',
         'EventSubscriptionDestination',
         'EventSubscriptionFilter',
         'EventSubscriptionFullUrl',
    +    'EventSubscriptionIdentity',
         'EventSubscriptionUpdateParameters',
         'EventType',
    +    'ExtensionTopic',
         'HybridConnectionEventSubscriptionDestination',
    +    'IdentityInfo',
         'InboundIpRule',
         'InputSchemaMapping',
         'JsonField',
    @@ -157,10 +244,27 @@
         'NumberNotInAdvancedFilter',
         'Operation',
         'OperationInfo',
    +    'PartnerNamespace',
    +    'PartnerNamespaceRegenerateKeyRequest',
    +    'PartnerNamespaceSharedAccessKeys',
    +    'PartnerNamespaceUpdateParameters',
    +    'PartnerRegistration',
    +    'PartnerRegistrationEventTypesListResult',
    +    'PartnerRegistrationUpdateParameters',
    +    'PartnerTopic',
    +    'PartnerTopicType',
    +    'PartnerTopicTypesListResult',
    +    'PartnerTopicUpdateParameters',
    +    'PrivateEndpoint',
    +    'PrivateEndpointConnection',
    +    'PrivateLinkResource',
         'Resource',
    +    'ResourceSku',
         'RetryPolicy',
         'ServiceBusQueueEventSubscriptionDestination',
         'ServiceBusTopicEventSubscriptionDestination',
    +    'SkuDefinitionsForResourceType',
    +    'SkuDefinitionsForResourceTypeListResult',
         'StorageBlobDeadLetterDestination',
         'StorageQueueEventSubscriptionDestination',
         'StringBeginsWithAdvancedFilter',
    @@ -168,26 +272,49 @@
         'StringEndsWithAdvancedFilter',
         'StringInAdvancedFilter',
         'StringNotInAdvancedFilter',
    +    'SystemTopic',
    +    'SystemTopicUpdateParameters',
         'Topic',
         'TopicRegenerateKeyRequest',
         'TopicSharedAccessKeys',
         'TopicTypeInfo',
         'TopicUpdateParameters',
         'TrackedResource',
    +    'UserIdentityProperties',
         'WebHookEventSubscriptionDestination',
         'DomainPaged',
         'DomainTopicPaged',
    +    'EventChannelPaged',
         'EventSubscriptionPaged',
         'OperationPaged',
    +    'PartnerNamespacePaged',
    +    'PartnerRegistrationPaged',
    +    'PartnerTopicPaged',
    +    'PrivateEndpointConnectionPaged',
    +    'PrivateLinkResourcePaged',
    +    'SystemTopicPaged',
         'TopicPaged',
         'EventTypePaged',
         'TopicTypeInfoPaged',
    +    'PersistedConnectionStatus',
    +    'ResourceProvisioningState',
         'DomainProvisioningState',
         'InputSchema',
    +    'PublicNetworkAccess',
         'IpActionType',
    +    'Sku',
    +    'IdentityType',
         'DomainTopicProvisioningState',
    +    'EventChannelProvisioningState',
         'EventSubscriptionProvisioningState',
    +    'EventSubscriptionIdentityType',
         'EventDeliverySchema',
    +    'PartnerNamespaceProvisioningState',
    +    'PartnerRegistrationProvisioningState',
    +    'PartnerRegistrationVisibilityState',
    +    'PartnerTopicProvisioningState',
    +    'PartnerTopicActivationState',
    +    'PartnerTopicTypeAuthorizationState',
         'TopicProvisioningState',
         'ResourceRegionType',
         'TopicTypeProvisioningState',
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_event_grid_management_client_enums.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_event_grid_management_client_enums.py
    index 8772bd438926..f798c2958b9e 100644
    --- a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_event_grid_management_client_enums.py
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_event_grid_management_client_enums.py
    @@ -12,6 +12,24 @@
     from enum import Enum
     
     
    +class PersistedConnectionStatus(str, Enum):
    +
    +    pending = "Pending"
    +    approved = "Approved"
    +    rejected = "Rejected"
    +    disconnected = "Disconnected"
    +
    +
    +class ResourceProvisioningState(str, Enum):
    +
    +    creating = "Creating"
    +    updating = "Updating"
    +    deleting = "Deleting"
    +    succeeded = "Succeeded"
    +    canceled = "Canceled"
    +    failed = "Failed"
    +
    +
     class DomainProvisioningState(str, Enum):
     
         creating = "Creating"
    @@ -29,11 +47,31 @@ class InputSchema(str, Enum):
         cloud_event_schema_v1_0 = "CloudEventSchemaV1_0"
     
     
    +class PublicNetworkAccess(str, Enum):
    +
    +    enabled = "Enabled"
    +    disabled = "Disabled"
    +
    +
     class IpActionType(str, Enum):
     
         allow = "Allow"
     
     
    +class Sku(str, Enum):
    +
    +    basic = "Basic"
    +    premium = "Premium"
    +
    +
    +class IdentityType(str, Enum):
    +
    +    none = "None"
    +    system_assigned = "SystemAssigned"
    +    user_assigned = "UserAssigned"
    +    system_assigned_user_assigned = "SystemAssigned, UserAssigned"
    +
    +
     class DomainTopicProvisioningState(str, Enum):
     
         creating = "Creating"
    @@ -44,6 +82,16 @@ class DomainTopicProvisioningState(str, Enum):
         failed = "Failed"
     
     
    +class EventChannelProvisioningState(str, Enum):
    +
    +    creating = "Creating"
    +    updating = "Updating"
    +    deleting = "Deleting"
    +    succeeded = "Succeeded"
    +    canceled = "Canceled"
    +    failed = "Failed"
    +
    +
     class EventSubscriptionProvisioningState(str, Enum):
     
         creating = "Creating"
    @@ -55,6 +103,12 @@ class EventSubscriptionProvisioningState(str, Enum):
         awaiting_manual_action = "AwaitingManualAction"
     
     
    +class EventSubscriptionIdentityType(str, Enum):
    +
    +    system_assigned = "SystemAssigned"
    +    user_assigned = "UserAssigned"
    +
    +
     class EventDeliverySchema(str, Enum):
     
         event_grid_schema = "EventGridSchema"
    @@ -62,6 +116,57 @@ class EventDeliverySchema(str, Enum):
         cloud_event_schema_v1_0 = "CloudEventSchemaV1_0"
     
     
    +class PartnerNamespaceProvisioningState(str, Enum):
    +
    +    creating = "Creating"
    +    updating = "Updating"
    +    deleting = "Deleting"
    +    succeeded = "Succeeded"
    +    canceled = "Canceled"
    +    failed = "Failed"
    +
    +
    +class PartnerRegistrationProvisioningState(str, Enum):
    +
    +    creating = "Creating"
    +    updating = "Updating"
    +    deleting = "Deleting"
    +    succeeded = "Succeeded"
    +    canceled = "Canceled"
    +    failed = "Failed"
    +
    +
    +class PartnerRegistrationVisibilityState(str, Enum):
    +
    +    hidden = "Hidden"
    +    public_preview = "PublicPreview"
    +    generally_available = "GenerallyAvailable"
    +
    +
    +class PartnerTopicProvisioningState(str, Enum):
    +
    +    creating = "Creating"
    +    updating = "Updating"
    +    deleting = "Deleting"
    +    succeeded = "Succeeded"
    +    canceled = "Canceled"
    +    failed = "Failed"
    +
    +
    +class PartnerTopicActivationState(str, Enum):
    +
    +    never_activated = "NeverActivated"
    +    activated = "Activated"
    +    deactivated = "Deactivated"
    +
    +
    +class PartnerTopicTypeAuthorizationState(str, Enum):
    +
    +    not_applicable = "NotApplicable"
    +    not_authorized = "NotAuthorized"
    +    authorized = "Authorized"
    +
    +
     class TopicProvisioningState(str, Enum):
     
         creating = "Creating"
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_models.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_models.py
    index a5cd04e53aaf..1de5cb112928 100644
    --- a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_models.py
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_models.py
    @@ -166,6 +166,32 @@ class CloudError(Model):
         }
     
     
    +class ConnectionState(Model):
    +    """ConnectionState Information.
    +
    +    :param status: Status of the connection. Possible values include:
    +     'Pending', 'Approved', 'Rejected', 'Disconnected'
    +    :type status: str or
    +     ~azure.mgmt.eventgrid.models.PersistedConnectionStatus
    +    :param description: Description of the connection state.
    +    :type description: str
    +    :param actions_required: Actions required (if any).
    +    :type actions_required: str
    +    """
    +
    +    _attribute_map = {
    +        'status': {'key': 'status', 'type': 'str'},
    +        'description': {'key': 'description', 'type': 'str'},
    +        'actions_required': {'key': 'actionsRequired', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ConnectionState, self).__init__(**kwargs)
    +        self.status = kwargs.get('status', None)
    +        self.description = kwargs.get('description', None)
    +        self.actions_required = kwargs.get('actions_required', None)
    +
    +
     class DeadLetterDestination(Model):
         """Information about the dead letter destination for an event subscription. To
         configure a deadletter destination, do not directly instantiate an object
    @@ -199,6 +225,56 @@ def __init__(self, **kwargs):
             self.endpoint_type = None
     
     
    +class DeadLetterWithResourceIdentity(Model):
    +    """Information about the deadletter destination with resource identity.
    +
    +    :param identity: The identity to use when dead-lettering events.
    +    :type identity: ~azure.mgmt.eventgrid.models.EventSubscriptionIdentity
    +    :param dead_letter_destination: Information about the destination where
    +     events have to be delivered for the event subscription.
    +     Uses the managed identity setup on the parent resource (namely, topic or
    +     domain) to acquire the authentication tokens being used during delivery /
    +     dead-lettering.
    +    :type dead_letter_destination:
    +     ~azure.mgmt.eventgrid.models.DeadLetterDestination
    +    """
    +
    +    _attribute_map = {
    +        'identity': {'key': 'identity', 'type': 'EventSubscriptionIdentity'},
    +        'dead_letter_destination': {'key': 'deadLetterDestination', 'type': 'DeadLetterDestination'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeadLetterWithResourceIdentity, self).__init__(**kwargs)
    +        self.identity = kwargs.get('identity', None)
    +        self.dead_letter_destination = kwargs.get('dead_letter_destination', None)
    +
    +
    +class DeliveryWithResourceIdentity(Model):
    +    """Information about the delivery for an event subscription with resource
    +    identity.
    +
    +    :param identity: The identity to use when delivering events.
    +    :type identity: ~azure.mgmt.eventgrid.models.EventSubscriptionIdentity
    +    :param destination: Information about the destination where events have to
    +     be delivered for the event subscription.
    +     Uses Azure Event Grid's identity to acquire the authentication tokens
    +     being used during delivery / dead-lettering.
    +    :type destination:
    +     ~azure.mgmt.eventgrid.models.EventSubscriptionDestination
    +    """
    +
    +    _attribute_map = {
    +        'identity': {'key': 'identity', 'type': 'EventSubscriptionIdentity'},
    +        'destination': {'key': 'destination', 'type': 'EventSubscriptionDestination'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeliveryWithResourceIdentity, self).__init__(**kwargs)
    +        self.identity = kwargs.get('identity', None)
    +        self.destination = kwargs.get('destination', None)
    +
    +
     class Resource(Model):
         """Definition of a Resource.
     
    @@ -291,6 +367,9 @@ class Domain(TrackedResource):
         :type location: str
         :param tags: Tags of the resource.
         :type tags: dict[str, str]
    +    :param private_endpoint_connections: List of private endpoint connections.
    +    :type private_endpoint_connections:
    +     list[~azure.mgmt.eventgrid.models.PrivateEndpointConnection]
         :ivar provisioning_state: Provisioning state of the domain. Possible
          values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
          'Canceled', 'Failed'
    @@ -309,13 +388,21 @@ class Domain(TrackedResource):
          ~azure.mgmt.eventgrid.models.InputSchemaMapping
         :ivar metric_resource_id: Metric resource id for the domain.
         :vartype metric_resource_id: str
    -    :param allow_traffic_from_all_ips: This determines if IP filtering rules
    -     ought to be evaluated or not. By default it will not evaluate and will
    -     allow traffic from all IPs.
    -    :type allow_traffic_from_all_ips: bool
    -    :param inbound_ip_rules: This determines the IP filtering rules that ought
    -     be applied when events are received on this domain.
    +    :param public_network_access: This determines if traffic is allowed over
    +     public network. By default it is enabled.
    +     You can further restrict to specific IPs by configuring . Possible values include: 'Enabled', 'Disabled'
    +    :type public_network_access: str or
    +     ~azure.mgmt.eventgrid.models.PublicNetworkAccess
    +    :param inbound_ip_rules: This can be used to restrict traffic from
    +     specific IPs instead of all IPs. Note: These are considered only if
    +     PublicNetworkAccess is enabled.
         :type inbound_ip_rules: list[~azure.mgmt.eventgrid.models.InboundIpRule]
    +    :param sku: The Sku pricing tier for the domain.
    +    :type sku: ~azure.mgmt.eventgrid.models.ResourceSku
    +    :param identity: Identity information for the resource.
    +    :type identity: ~azure.mgmt.eventgrid.models.IdentityInfo
         """
     
         _validation = {
    @@ -334,24 +421,30 @@ class Domain(TrackedResource):
             'type': {'key': 'type', 'type': 'str'},
             'location': {'key': 'location', 'type': 'str'},
             'tags': {'key': 'tags', 'type': '{str}'},
    +        'private_endpoint_connections': {'key': 'properties.privateEndpointConnections', 'type': '[PrivateEndpointConnection]'},
             'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
             'endpoint': {'key': 'properties.endpoint', 'type': 'str'},
             'input_schema': {'key': 'properties.inputSchema', 'type': 'str'},
             'input_schema_mapping': {'key': 'properties.inputSchemaMapping', 'type': 'InputSchemaMapping'},
             'metric_resource_id': {'key': 'properties.metricResourceId', 'type': 'str'},
    -        'allow_traffic_from_all_ips': {'key': 'properties.allowTrafficFromAllIPs', 'type': 'bool'},
    +        'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'},
             'inbound_ip_rules': {'key': 'properties.inboundIpRules', 'type': '[InboundIpRule]'},
    +        'sku': {'key': 'sku', 'type': 'ResourceSku'},
    +        'identity': {'key': 'identity', 'type': 'IdentityInfo'},
         }
     
         def __init__(self, **kwargs):
             super(Domain, self).__init__(**kwargs)
    +        self.private_endpoint_connections = kwargs.get('private_endpoint_connections', None)
             self.provisioning_state = None
             self.endpoint = None
             self.input_schema = kwargs.get('input_schema', "EventGridSchema")
             self.input_schema_mapping = kwargs.get('input_schema_mapping', None)
             self.metric_resource_id = None
    -        self.allow_traffic_from_all_ips = kwargs.get('allow_traffic_from_all_ips', None)
    +        self.public_network_access = kwargs.get('public_network_access', None)
             self.inbound_ip_rules = kwargs.get('inbound_ip_rules', None)
    +        self.sku = kwargs.get('sku', None)
    +        self.identity = kwargs.get('identity', None)
     
     
     class DomainRegenerateKeyRequest(Model):
    @@ -436,28 +529,136 @@ def __init__(self, **kwargs):
     class DomainUpdateParameters(Model):
         """Properties of the Domain update.
     
    -    :param tags: Tags of the domains resource
    +    :param tags: Tags of the domains resource.
         :type tags: dict[str, str]
    -    :param allow_traffic_from_all_ips: This determines if IP filtering rules
    -     ought to be evaluated or not. By default it will not evaluate and will
    -     allow traffic from all IPs.
    -    :type allow_traffic_from_all_ips: bool
    -    :param inbound_ip_rules: This determines the IP filtering rules that ought
    -     be applied when events are received on this domain.
    +    :param public_network_access: This determines if traffic is allowed over
    +     public network. By default it is enabled.
    +     You can further restrict to specific IPs by configuring . Possible values include: 'Enabled', 'Disabled'
    +    :type public_network_access: str or
    +     ~azure.mgmt.eventgrid.models.PublicNetworkAccess
    +    :param inbound_ip_rules: This can be used to restrict traffic from
    +     specific IPs instead of all IPs. Note: These are considered only if
    +     PublicNetworkAccess is enabled.
         :type inbound_ip_rules: list[~azure.mgmt.eventgrid.models.InboundIpRule]
    +    :param identity: Identity information for the resource.
    +    :type identity: ~azure.mgmt.eventgrid.models.IdentityInfo
    +    :param sku: The Sku pricing tier for the domain.
    +    :type sku: ~azure.mgmt.eventgrid.models.ResourceSku
         """
     
         _attribute_map = {
             'tags': {'key': 'tags', 'type': '{str}'},
    -        'allow_traffic_from_all_ips': {'key': 'allowTrafficFromAllIPs', 'type': 'bool'},
    -        'inbound_ip_rules': {'key': 'inboundIpRules', 'type': '[InboundIpRule]'},
    +        'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'},
    +        'inbound_ip_rules': {'key': 'properties.inboundIpRules', 'type': '[InboundIpRule]'},
    +        'identity': {'key': 'identity', 'type': 'IdentityInfo'},
    +        'sku': {'key': 'sku', 'type': 'ResourceSku'},
         }
     
         def __init__(self, **kwargs):
             super(DomainUpdateParameters, self).__init__(**kwargs)
             self.tags = kwargs.get('tags', None)
    -        self.allow_traffic_from_all_ips = kwargs.get('allow_traffic_from_all_ips', None)
    +        self.public_network_access = kwargs.get('public_network_access', None)
             self.inbound_ip_rules = kwargs.get('inbound_ip_rules', None)
    +        self.identity = kwargs.get('identity', None)
    +        self.sku = kwargs.get('sku', None)
    +
    +
    +class EventChannel(Resource):
    +    """Event Channel.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param source: Source of the event channel. This represents a unique
    +     resource in the partner's resource model.
    +    :type source: ~azure.mgmt.eventgrid.models.EventChannelSource
    +    :param destination: Represents the destination of an event channel.
    +    :type destination: ~azure.mgmt.eventgrid.models.EventChannelDestination
    +    :ivar provisioning_state: Provisioning state of the event channel.
    +     Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Canceled', 'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.eventgrid.models.EventChannelProvisioningState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'source': {'key': 'properties.source', 'type': 'EventChannelSource'},
    +        'destination': {'key': 'properties.destination', 'type': 'EventChannelDestination'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EventChannel, self).__init__(**kwargs)
    +        self.source = kwargs.get('source', None)
    +        self.destination = kwargs.get('destination', None)
    +        self.provisioning_state = None
    +
    +
    +class EventChannelDestination(Model):
    +    """Properties of the destination of an event channel.
    +
    +    :param azure_subscription_id: Azure subscription ID of the customer
    +     creating the event channel. The partner topic
    +     associated with the event channel will be created under this Azure
    +     subscription.
    +    :type azure_subscription_id: str
    +    :param resource_group: Azure Resource Group of the customer creating the
    +     event channel. The partner topic
    +     associated with the event channel will be created under this resource
    +     group.
    +    :type resource_group: str
    +    :param partner_topic_name: Name of the partner topic associated with the
    +     event channel.
    +    :type partner_topic_name: str
    +    """
    +
    +    _attribute_map = {
    +        'azure_subscription_id': {'key': 'azureSubscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +        'partner_topic_name': {'key': 'partnerTopicName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EventChannelDestination, self).__init__(**kwargs)
    +        self.azure_subscription_id = kwargs.get('azure_subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +        self.partner_topic_name = kwargs.get('partner_topic_name', None)
    +
    +
    +class EventChannelSource(Model):
    +    """Properties of the source of an event channel.
    +
    +    :param source: The identifier of the resource that's the source of the
    +     events.
    +     This represents a unique resource in the partner's resource model.
    +    :type source: str
    +    """
    +
    +    _attribute_map = {
    +        'source': {'key': 'source', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EventChannelSource, self).__init__(**kwargs)
    +        self.source = kwargs.get('source', None)
     
     
     class EventHubEventSubscriptionDestination(EventSubscriptionDestination):
    @@ -508,8 +709,17 @@ class EventSubscription(Resource):
          ~azure.mgmt.eventgrid.models.EventSubscriptionProvisioningState
         :param destination: Information about the destination where events have to
          be delivered for the event subscription.
    +     Uses Azure Event Grid's identity to acquire the authentication tokens
    +     being used during delivery / dead-lettering.
         :type destination:
          ~azure.mgmt.eventgrid.models.EventSubscriptionDestination
    +    :param delivery_with_resource_identity: Information about the destination
    +     where events have to be delivered for the event subscription.
    +     Uses the managed identity setup on the parent resource (namely, topic or
    +     domain) to acquire the authentication tokens being used during delivery /
    +     dead-lettering.
    +    :type delivery_with_resource_identity:
    +     ~azure.mgmt.eventgrid.models.DeliveryWithResourceIdentity
         :param filter: Information about the filter for the event subscription.
         :type filter: ~azure.mgmt.eventgrid.models.EventSubscriptionFilter
         :param labels: List of user defined labels.
    @@ -524,10 +734,21 @@ class EventSubscription(Resource):
         :param retry_policy: The retry policy for events. This can be used to
          configure maximum number of delivery attempts and time to live for events.
         :type retry_policy: ~azure.mgmt.eventgrid.models.RetryPolicy
    -    :param dead_letter_destination: The DeadLetter destination of the event
    -     subscription.
    +    :param dead_letter_destination: The dead letter destination of the event
    +     subscription. Any event that cannot be delivered to its' destination is
    +     sent to the dead letter destination.
    +     Uses Azure Event Grid's identity to acquire the authentication tokens
    +     being used during delivery / dead-lettering.
         :type dead_letter_destination:
          ~azure.mgmt.eventgrid.models.DeadLetterDestination
    +    :param dead_letter_with_resource_identity: The dead letter destination of
    +     the event subscription. Any event that cannot be delivered to its'
    +     destination is sent to the dead letter destination.
    +     Uses the managed identity setup on the parent resource (namely, topic or
    +     domain) to acquire the authentication tokens being used during delivery /
    +     dead-lettering.
    +    :type dead_letter_with_resource_identity:
    +     ~azure.mgmt.eventgrid.models.DeadLetterWithResourceIdentity
         """
     
         _validation = {
    @@ -545,12 +766,14 @@ class EventSubscription(Resource):
             'topic': {'key': 'properties.topic', 'type': 'str'},
             'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
             'destination': {'key': 'properties.destination', 'type': 'EventSubscriptionDestination'},
    +        'delivery_with_resource_identity': {'key': 'properties.deliveryWithResourceIdentity', 'type': 'DeliveryWithResourceIdentity'},
             'filter': {'key': 'properties.filter', 'type': 'EventSubscriptionFilter'},
             'labels': {'key': 'properties.labels', 'type': '[str]'},
             'expiration_time_utc': {'key': 'properties.expirationTimeUtc', 'type': 'iso-8601'},
             'event_delivery_schema': {'key': 'properties.eventDeliverySchema', 'type': 'str'},
             'retry_policy': {'key': 'properties.retryPolicy', 'type': 'RetryPolicy'},
             'dead_letter_destination': {'key': 'properties.deadLetterDestination', 'type': 'DeadLetterDestination'},
    +        'dead_letter_with_resource_identity': {'key': 'properties.deadLetterWithResourceIdentity', 'type': 'DeadLetterWithResourceIdentity'},
         }
     
         def __init__(self, **kwargs):
    @@ -558,12 +781,14 @@ def __init__(self, **kwargs):
             self.topic = None
             self.provisioning_state = None
             self.destination = kwargs.get('destination', None)
    +        self.delivery_with_resource_identity = kwargs.get('delivery_with_resource_identity', None)
             self.filter = kwargs.get('filter', None)
             self.labels = kwargs.get('labels', None)
             self.expiration_time_utc = kwargs.get('expiration_time_utc', None)
             self.event_delivery_schema = kwargs.get('event_delivery_schema', None)
             self.retry_policy = kwargs.get('retry_policy', None)
             self.dead_letter_destination = kwargs.get('dead_letter_destination', None)
    +        self.dead_letter_with_resource_identity = kwargs.get('dead_letter_with_resource_identity', None)
     
     
     class EventSubscriptionFilter(Model):
    @@ -625,13 +850,47 @@ def __init__(self, **kwargs):
             self.endpoint_url = kwargs.get('endpoint_url', None)
     
     
    +class EventSubscriptionIdentity(Model):
    +    """The identity information with the event subscription.
    +
    +    :param type: The type of managed identity used. The type 'SystemAssigned,
    +     UserAssigned' includes both an implicitly created identity and a set of
    +     user-assigned identities. The type 'None' will remove any identity.
    +     Possible values include: 'SystemAssigned', 'UserAssigned'
    +    :type type: str or
    +     ~azure.mgmt.eventgrid.models.EventSubscriptionIdentityType
    +    :param user_assigned_identity: The user identity associated with the
    +     resource.
    +    :type user_assigned_identity: str
    +    """
    +
    +    _attribute_map = {
    +        'type': {'key': 'type', 'type': 'str'},
    +        'user_assigned_identity': {'key': 'userAssignedIdentity', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EventSubscriptionIdentity, self).__init__(**kwargs)
    +        self.type = kwargs.get('type', None)
    +        self.user_assigned_identity = kwargs.get('user_assigned_identity', None)
    +
    +
     class EventSubscriptionUpdateParameters(Model):
         """Properties of the Event Subscription update.
     
         :param destination: Information about the destination where events have to
          be delivered for the event subscription.
    +     Uses Azure Event Grid's identity to acquire the authentication tokens
    +     being used during delivery / dead-lettering.
         :type destination:
          ~azure.mgmt.eventgrid.models.EventSubscriptionDestination
    +    :param delivery_with_resource_identity: Information about the destination
    +     where events have to be delivered for the event subscription.
    +     Uses the managed identity setup on the parent resource (topic / domain) to
    +     acquire the authentication tokens being used during delivery /
    +     dead-lettering.
    +    :type delivery_with_resource_identity:
    +     ~azure.mgmt.eventgrid.models.DeliveryWithResourceIdentity
         :param filter: Information about the filter for the event subscription.
         :type filter: ~azure.mgmt.eventgrid.models.EventSubscriptionFilter
         :param labels: List of user defined labels.
    @@ -647,31 +906,46 @@ class EventSubscriptionUpdateParameters(Model):
         :param retry_policy: The retry policy for events. This can be used to
          configure maximum number of delivery attempts and time to live for events.
         :type retry_policy: ~azure.mgmt.eventgrid.models.RetryPolicy
    -    :param dead_letter_destination: The DeadLetter destination of the event
    -     subscription.
    +    :param dead_letter_destination: The dead letter destination of the event
    +     subscription. Any event that cannot be delivered to its' destination is
    +     sent to the dead letter destination.
    +     Uses Azure Event Grid's identity to acquire the authentication tokens
    +     being used during delivery / dead-lettering.
         :type dead_letter_destination:
          ~azure.mgmt.eventgrid.models.DeadLetterDestination
    +    :param dead_letter_with_resource_identity: The dead letter destination of
    +     the event subscription. Any event that cannot be delivered to its'
    +     destination is sent to the dead letter destination.
    +     Uses the managed identity setup on the parent resource (topic / domain) to
    +     acquire the authentication tokens being used during delivery /
    +     dead-lettering.
    +    :type dead_letter_with_resource_identity:
    +     ~azure.mgmt.eventgrid.models.DeadLetterWithResourceIdentity
         """
     
         _attribute_map = {
             'destination': {'key': 'destination', 'type': 'EventSubscriptionDestination'},
    +        'delivery_with_resource_identity': {'key': 'deliveryWithResourceIdentity', 'type': 'DeliveryWithResourceIdentity'},
             'filter': {'key': 'filter', 'type': 'EventSubscriptionFilter'},
             'labels': {'key': 'labels', 'type': '[str]'},
             'expiration_time_utc': {'key': 'expirationTimeUtc', 'type': 'iso-8601'},
             'event_delivery_schema': {'key': 'eventDeliverySchema', 'type': 'str'},
             'retry_policy': {'key': 'retryPolicy', 'type': 'RetryPolicy'},
             'dead_letter_destination': {'key': 'deadLetterDestination', 'type': 'DeadLetterDestination'},
    +        'dead_letter_with_resource_identity': {'key': 'deadLetterWithResourceIdentity', 'type': 'DeadLetterWithResourceIdentity'},
         }
     
         def __init__(self, **kwargs):
             super(EventSubscriptionUpdateParameters, self).__init__(**kwargs)
             self.destination = kwargs.get('destination', None)
    +        self.delivery_with_resource_identity = kwargs.get('delivery_with_resource_identity', None)
             self.filter = kwargs.get('filter', None)
             self.labels = kwargs.get('labels', None)
             self.expiration_time_utc = kwargs.get('expiration_time_utc', None)
             self.event_delivery_schema = kwargs.get('event_delivery_schema', None)
             self.retry_policy = kwargs.get('retry_policy', None)
             self.dead_letter_destination = kwargs.get('dead_letter_destination', None)
    +        self.dead_letter_with_resource_identity = kwargs.get('dead_letter_with_resource_identity', None)
     
     
     class EventType(Resource):
    @@ -720,6 +994,46 @@ def __init__(self, **kwargs):
             self.is_in_default_set = kwargs.get('is_in_default_set', None)
     
     
    +class ExtensionTopic(Resource):
    +    """Event grid Extension Topic. This is used for getting Event Grid related
    +    metrics for Azure resources.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param description: Description of the extension topic.
    +    :type description: str
    +    :param system_topic: System topic resource id which is mapped to the
    +     source.
    +    :type system_topic: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'description': {'key': 'properties.description', 'type': 'str'},
    +        'system_topic': {'key': 'properties.systemTopic', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ExtensionTopic, self).__init__(**kwargs)
    +        self.description = kwargs.get('description', None)
    +        self.system_topic = kwargs.get('system_topic', None)
    +
    +
     class HybridConnectionEventSubscriptionDestination(EventSubscriptionDestination):
         """Information about the HybridConnection destination for an event
         subscription.
    @@ -748,6 +1062,43 @@ def __init__(self, **kwargs):
             self.endpoint_type = 'HybridConnection'
     
     
    +class IdentityInfo(Model):
    +    """The identity information for the resource.
    +
    +    :param type: The type of managed identity used. The type 'SystemAssigned,
    +     UserAssigned' includes both an implicitly created identity and a set of
    +     user-assigned identities. The type 'None' will remove any identity.
    +     Possible values include: 'None', 'SystemAssigned', 'UserAssigned',
    +     'SystemAssigned, UserAssigned'
    +    :type type: str or ~azure.mgmt.eventgrid.models.IdentityType
    +    :param principal_id: The principal ID of resource identity.
    +    :type principal_id: str
    +    :param tenant_id: The tenant ID of resource.
    +    :type tenant_id: str
    +    :param user_assigned_identities: The list of user identities associated
    +     with the resource. The user identity dictionary key references will be ARM
    +     resource ids in the form:
    +     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
    +     This property is currently not used and reserved for future usage.
    +    :type user_assigned_identities: dict[str,
    +     ~azure.mgmt.eventgrid.models.UserIdentityProperties]
    +    """
    +
    +    _attribute_map = {
    +        'type': {'key': 'type', 'type': 'str'},
    +        'principal_id': {'key': 'principalId', 'type': 'str'},
    +        'tenant_id': {'key': 'tenantId', 'type': 'str'},
    +        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{UserIdentityProperties}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IdentityInfo, self).__init__(**kwargs)
    +        self.type = kwargs.get('type', None)
    +        self.principal_id = kwargs.get('principal_id', None)
    +        self.tenant_id = kwargs.get('tenant_id', None)
    +        self.user_assigned_identities = kwargs.get('user_assigned_identities', None)
    +
    +
     class InboundIpRule(Model):
         """InboundIpRule.
     
    @@ -1141,104 +1492,698 @@ def __init__(self, **kwargs):
             self.description = kwargs.get('description', None)
     
     
    -class RetryPolicy(Model):
    -    """Information about the retry policy for an event subscription.
    +class PartnerNamespace(TrackedResource):
    +    """EventGrid Partner Namespace.
     
    -    :param max_delivery_attempts: Maximum number of delivery retry attempts
    -     for events.
    -    :type max_delivery_attempts: int
    -    :param event_time_to_live_in_minutes: Time To Live (in minutes) for
    -     events.
    -    :type event_time_to_live_in_minutes: int
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param location: Required. Location of the resource.
    +    :type location: str
    +    :param tags: Tags of the resource.
    +    :type tags: dict[str, str]
    +    :ivar provisioning_state: Provisioning state of the partner namespace.
    +     Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Canceled', 'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.eventgrid.models.PartnerNamespaceProvisioningState
    +    :param partner_registration_fully_qualified_id: The fully qualified ARM Id
    +     of the partner registration that should be associated with this partner
    +     namespace. This takes the following format:
    +     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerRegistrations/{partnerRegistrationName}.
    +    :type partner_registration_fully_qualified_id: str
    +    :ivar endpoint: Endpoint for the partner namespace.
    +    :vartype endpoint: str
         """
     
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +        'endpoint': {'readonly': True},
    +    }
    +
         _attribute_map = {
    -        'max_delivery_attempts': {'key': 'maxDeliveryAttempts', 'type': 'int'},
    -        'event_time_to_live_in_minutes': {'key': 'eventTimeToLiveInMinutes', 'type': 'int'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +        'partner_registration_fully_qualified_id': {'key': 'properties.partnerRegistrationFullyQualifiedId', 'type': 'str'},
    +        'endpoint': {'key': 'properties.endpoint', 'type': 'str'},
         }
     
         def __init__(self, **kwargs):
    -        super(RetryPolicy, self).__init__(**kwargs)
    -        self.max_delivery_attempts = kwargs.get('max_delivery_attempts', None)
    -        self.event_time_to_live_in_minutes = kwargs.get('event_time_to_live_in_minutes', None)
    +        super(PartnerNamespace, self).__init__(**kwargs)
    +        self.provisioning_state = None
    +        self.partner_registration_fully_qualified_id = kwargs.get('partner_registration_fully_qualified_id', None)
    +        self.endpoint = None
     
     
    -class ServiceBusQueueEventSubscriptionDestination(EventSubscriptionDestination):
    -    """Information about the service bus destination for an event subscription.
    +class PartnerNamespaceRegenerateKeyRequest(Model):
    +    """PartnerNamespace regenerate shared access key request.
     
         All required parameters must be populated in order to send to Azure.
     
    -    :param endpoint_type: Required. Constant filled by server.
    -    :type endpoint_type: str
    -    :param resource_id: The Azure Resource Id that represents the endpoint of
    -     the Service Bus destination of an event subscription.
    -    :type resource_id: str
    +    :param key_name: Required. Key name to regenerate (key1 or key2).
    +    :type key_name: str
         """
     
         _validation = {
    -        'endpoint_type': {'required': True},
    +        'key_name': {'required': True},
         }
     
         _attribute_map = {
    -        'endpoint_type': {'key': 'endpointType', 'type': 'str'},
    -        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    +        'key_name': {'key': 'keyName', 'type': 'str'},
         }
     
         def __init__(self, **kwargs):
    -        super(ServiceBusQueueEventSubscriptionDestination, self).__init__(**kwargs)
    -        self.resource_id = kwargs.get('resource_id', None)
    -        self.endpoint_type = 'ServiceBusQueue'
    -
    +        super(PartnerNamespaceRegenerateKeyRequest, self).__init__(**kwargs)
    +        self.key_name = kwargs.get('key_name', None)
     
    -class ServiceBusTopicEventSubscriptionDestination(EventSubscriptionDestination):
    -    """Information about the service bus topic destination for an event
    -    subscription.
     
    -    All required parameters must be populated in order to send to Azure.
    +class PartnerNamespaceSharedAccessKeys(Model):
    +    """Shared access keys of the partner namespace.
     
    -    :param endpoint_type: Required. Constant filled by server.
    -    :type endpoint_type: str
    -    :param resource_id: The Azure Resource Id that represents the endpoint of
    -     the Service Bus Topic destination of an event subscription.
    -    :type resource_id: str
    +    :param key1: Shared access key1 for the partner namespace.
    +    :type key1: str
    +    :param key2: Shared access key2 for the partner namespace.
    +    :type key2: str
         """
     
    -    _validation = {
    -        'endpoint_type': {'required': True},
    -    }
    -
         _attribute_map = {
    -        'endpoint_type': {'key': 'endpointType', 'type': 'str'},
    -        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    +        'key1': {'key': 'key1', 'type': 'str'},
    +        'key2': {'key': 'key2', 'type': 'str'},
         }
     
         def __init__(self, **kwargs):
    -        super(ServiceBusTopicEventSubscriptionDestination, self).__init__(**kwargs)
    -        self.resource_id = kwargs.get('resource_id', None)
    -        self.endpoint_type = 'ServiceBusTopic'
    -
    +        super(PartnerNamespaceSharedAccessKeys, self).__init__(**kwargs)
    +        self.key1 = kwargs.get('key1', None)
    +        self.key2 = kwargs.get('key2', None)
     
    -class StorageBlobDeadLetterDestination(DeadLetterDestination):
    -    """Information about the storage blob based dead letter destination.
     
    -    All required parameters must be populated in order to send to Azure.
    +class PartnerNamespaceUpdateParameters(Model):
    +    """Properties of the PartnerNamespace update.
     
    -    :param endpoint_type: Required. Constant filled by server.
    -    :type endpoint_type: str
    -    :param resource_id: The Azure Resource ID of the storage account that is
    -     the destination of the deadletter events
    -    :type resource_id: str
    -    :param blob_container_name: The name of the Storage blob container that is
    -     the destination of the deadletter events
    -    :type blob_container_name: str
    +    :param tags: Tags of the partner namespace.
    +    :type tags: dict[str, str]
         """
     
    -    _validation = {
    -        'endpoint_type': {'required': True},
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
         }
     
    -    _attribute_map = {
    -        'endpoint_type': {'key': 'endpointType', 'type': 'str'},
    +    def __init__(self, **kwargs):
    +        super(PartnerNamespaceUpdateParameters, self).__init__(**kwargs)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class PartnerRegistration(TrackedResource):
    +    """Information about a partner registration.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param location: Required. Location of the resource.
    +    :type location: str
    +    :param tags: Tags of the resource.
    +    :type tags: dict[str, str]
    +    :ivar provisioning_state: Provisioning state of the partner registration.
    +     Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Canceled', 'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.eventgrid.models.PartnerRegistrationProvisioningState
    +    :param partner_name: Official name of the partner name. For example:
    +     "Contoso".
    +    :type partner_name: str
    +    :param partner_resource_type_name: Name of the partner resource type.
    +    :type partner_resource_type_name: str
    +    :param partner_resource_type_display_name: Display name of the partner
    +     resource type.
    +    :type partner_resource_type_display_name: str
    +    :param partner_resource_type_description: Description of the partner
    +     resource type.
    +    :type partner_resource_type_description: str
    +    :param setup_uri: URI of the partner website that can be used by Azure
    +     customers to setup Event Grid
    +     integration on an event source.
    +    :type setup_uri: str
    +    :param logo_uri: URI of the logo.
    +    :type logo_uri: str
    +    :param visibility_state: Visibility state of the partner registration.
    +     Possible values include: 'Hidden', 'PublicPreview', 'GenerallyAvailable'
    +    :type visibility_state: str or
    +     ~azure.mgmt.eventgrid.models.PartnerRegistrationVisibilityState
    +    :param authorized_azure_subscription_ids: List of Azure subscription Ids
    +     that are authorized to create a partner namespace
    +     associated with this partner registration. This is an optional property.
    +     Creating
    +     partner namespaces is always permitted under the same Azure subscription
    +     as the one used
    +     for creating the partner registration.
    +    :type authorized_azure_subscription_ids: list[str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +        'partner_name': {'key': 'properties.partnerName', 'type': 'str'},
    +        'partner_resource_type_name': {'key': 'properties.partnerResourceTypeName', 'type': 'str'},
    +        'partner_resource_type_display_name': {'key': 'properties.partnerResourceTypeDisplayName', 'type': 'str'},
    +        'partner_resource_type_description': {'key': 'properties.partnerResourceTypeDescription', 'type': 'str'},
    +        'setup_uri': {'key': 'properties.setupUri', 'type': 'str'},
    +        'logo_uri': {'key': 'properties.logoUri', 'type': 'str'},
    +        'visibility_state': {'key': 'properties.visibilityState', 'type': 'str'},
    +        'authorized_azure_subscription_ids': {'key': 'properties.authorizedAzureSubscriptionIds', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PartnerRegistration, self).__init__(**kwargs)
    +        self.provisioning_state = None
    +        self.partner_name = kwargs.get('partner_name', None)
    +        self.partner_resource_type_name = kwargs.get('partner_resource_type_name', None)
    +        self.partner_resource_type_display_name = kwargs.get('partner_resource_type_display_name', None)
    +        self.partner_resource_type_description = kwargs.get('partner_resource_type_description', None)
    +        self.setup_uri = kwargs.get('setup_uri', None)
    +        self.logo_uri = kwargs.get('logo_uri', None)
    +        self.visibility_state = kwargs.get('visibility_state', None)
    +        self.authorized_azure_subscription_ids = kwargs.get('authorized_azure_subscription_ids', None)
    +
    +
    +class PartnerRegistrationEventTypesListResult(Model):
    +    """Result of the List Partner Registration Event Types operation.
    +
    +    :param value: A collection of partner registration event types.
    +    :type value: list[~azure.mgmt.eventgrid.models.EventType]
    +    :param next_link: A link for the next page of partner registration event
    +     types.
    +    :type next_link: str
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[EventType]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PartnerRegistrationEventTypesListResult, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.next_link = kwargs.get('next_link', None)
    +
    +
    +class PartnerRegistrationUpdateParameters(Model):
    +    """Properties of the Partner Registration update.
    +
    +    :param partner_topic_type_name: Name of the partner topic type.
    +    :type partner_topic_type_name: str
    +    :param partner_topic_type_display_name: Display name of the partner topic
    +     type.
    +    :type partner_topic_type_display_name: str
    +    :param partner_topic_type_description: Description of the partner topic
    +     type.
    +    :type partner_topic_type_description: str
    +    :param setup_uri: URI of the partner website that can be used by Azure
    +     customers to setup Event Grid
    +     integration on an event source.
    +    :type setup_uri: str
    +    :param logo_uri: URI of the partner logo.
    +    :type logo_uri: str
    +    :param authorized_azure_subscription_ids: List of IDs of Azure AD
    +     applications that are authorized to create a partner namespace
    +     associated with this partner registration. This is an optional property.
    +     Creating
    +     partner namespaces is always permitted under the same Azure subscription
    +     as the one used
    +     for creating the partner registration.
    +    :type authorized_azure_subscription_ids: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'partner_topic_type_name': {'key': 'partnerTopicTypeName', 'type': 'str'},
    +        'partner_topic_type_display_name': {'key': 'partnerTopicTypeDisplayName', 'type': 'str'},
    +        'partner_topic_type_description': {'key': 'partnerTopicTypeDescription', 'type': 'str'},
    +        'setup_uri': {'key': 'setupUri', 'type': 'str'},
    +        'logo_uri': {'key': 'logoUri', 'type': 'str'},
    +        'authorized_azure_subscription_ids': {'key': 'authorizedAzureSubscriptionIds', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PartnerRegistrationUpdateParameters, self).__init__(**kwargs)
    +        self.partner_topic_type_name = kwargs.get('partner_topic_type_name', None)
    +        self.partner_topic_type_display_name = kwargs.get('partner_topic_type_display_name', None)
    +        self.partner_topic_type_description = kwargs.get('partner_topic_type_description', None)
    +        self.setup_uri = kwargs.get('setup_uri', None)
    +        self.logo_uri = kwargs.get('logo_uri', None)
    +        self.authorized_azure_subscription_ids = kwargs.get('authorized_azure_subscription_ids', None)
    +
    +
    +class PartnerTopic(TrackedResource):
    +    """EventGrid Partner Topic.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param location: Required. Location of the resource.
    +    :type location: str
    +    :param tags: Tags of the resource.
    +    :type tags: dict[str, str]
    +    :param source: Source associated with this partner topic. This represents
    +     a unique partner resource.
    +    :type source: str
    +    :ivar provisioning_state: Provisioning state of the partner topic.
    +     Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Canceled', 'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.eventgrid.models.PartnerTopicProvisioningState
    +    :param activation_state: Activation state of the partner topic. Possible
    +     values include: 'NeverActivated', 'Activated', 'Deactivated'
    +    :type activation_state: str or
    +     ~azure.mgmt.eventgrid.models.PartnerTopicActivationState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'source': {'key': 'properties.source', 'type': 'str'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +        'activation_state': {'key': 'properties.activationState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PartnerTopic, self).__init__(**kwargs)
    +        self.source = kwargs.get('source', None)
    +        self.provisioning_state = None
    +        self.activation_state = kwargs.get('activation_state', None)
    +
    +
    +class PartnerTopicType(Resource):
    +    """Properties of a partner topic type.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param partner_name: Official name of the partner.
    +    :type partner_name: str
    +    :param topic_type_name: Name of the partner topic type. This name should
    +     be unique among all partner topic types names.
    +    :type topic_type_name: str
    +    :param display_name: Display Name for the partner topic type.
    +    :type display_name: str
    +    :param description: Description of the partner topic type.
    +    :type description: str
    +    :param setup_uri: URI of the partner website that can be used by Azure
    +     customers to setup Event Grid
    +     integration on an event source.
    +    :type setup_uri: str
    +    :param authorization_state: Status of whether the customer has authorized
    +     a partner to create partner topics
    +     in the customer's subscription. Possible values include: 'NotApplicable',
    +     'NotAuthorized', 'Authorized'
    +    :type authorization_state: str or
    +     ~azure.mgmt.eventgrid.models.PartnerTopicTypeAuthorizationState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'partner_name': {'key': 'properties.partnerName', 'type': 'str'},
    +        'topic_type_name': {'key': 'properties.topicTypeName', 'type': 'str'},
    +        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    +        'description': {'key': 'properties.description', 'type': 'str'},
    +        'setup_uri': {'key': 'properties.setupUri', 'type': 'str'},
    +        'authorization_state': {'key': 'properties.authorizationState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PartnerTopicType, self).__init__(**kwargs)
    +        self.partner_name = kwargs.get('partner_name', None)
    +        self.topic_type_name = kwargs.get('topic_type_name', None)
    +        self.display_name = kwargs.get('display_name', None)
    +        self.description = kwargs.get('description', None)
    +        self.setup_uri = kwargs.get('setup_uri', None)
    +        self.authorization_state = kwargs.get('authorization_state', None)
    +
    +
    +class PartnerTopicTypesListResult(Model):
    +    """Result of the List Partner Topic Types operation.
    +
    +    :param value: A collection of partner topic types.
    +    :type value: list[~azure.mgmt.eventgrid.models.PartnerTopicType]
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[PartnerTopicType]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PartnerTopicTypesListResult, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +
    +
    +class PartnerTopicUpdateParameters(Model):
    +    """Properties of the Partner Topic update.
    +
    +    :param tags: Tags of the partner topic.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PartnerTopicUpdateParameters, self).__init__(**kwargs)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class PrivateEndpoint(Model):
    +    """PrivateEndpoint information.
    +
    +    :param id: The ARM identifier for Private Endpoint.
    +    :type id: str
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PrivateEndpoint, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +
    +
    +class PrivateEndpointConnection(Resource):
    +    """PrivateEndpointConnection resource information.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param private_endpoint: The Private Endpoint resource for this
    +     Connection.
    +    :type private_endpoint: ~azure.mgmt.eventgrid.models.PrivateEndpoint
    +    :param group_ids: GroupIds from the private link service resource.
    +    :type group_ids: list[str]
    +    :param private_link_service_connection_state: Details about the state of
    +     the connection.
    +    :type private_link_service_connection_state:
    +     ~azure.mgmt.eventgrid.models.ConnectionState
    +    :param provisioning_state: Provisioning state of the Private Endpoint
    +     Connection. Possible values include: 'Creating', 'Updating', 'Deleting',
    +     'Succeeded', 'Canceled', 'Failed'
    +    :type provisioning_state: str or
    +     ~azure.mgmt.eventgrid.models.ResourceProvisioningState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'private_endpoint': {'key': 'properties.privateEndpoint', 'type': 'PrivateEndpoint'},
    +        'group_ids': {'key': 'properties.groupIds', 'type': '[str]'},
    +        'private_link_service_connection_state': {'key': 'properties.privateLinkServiceConnectionState', 'type': 'ConnectionState'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PrivateEndpointConnection, self).__init__(**kwargs)
    +        self.private_endpoint = kwargs.get('private_endpoint', None)
    +        self.group_ids = kwargs.get('group_ids', None)
    +        self.private_link_service_connection_state = kwargs.get('private_link_service_connection_state', None)
    +        self.provisioning_state = kwargs.get('provisioning_state', None)
    +
    +
    +class PrivateLinkResource(Model):
    +    """Information of the private link resource.
    +
    +    :param group_id:
    +    :type group_id: str
    +    :param display_name:
    +    :type display_name: str
    +    :param required_members:
    +    :type required_members: list[str]
    +    :param required_zone_names:
    +    :type required_zone_names: list[str]
    +    :param id: Fully qualified identifier of the resource.
    +    :type id: str
    +    :param name: Name of the resource
    +    :type name: str
    +    :param type: Type of the resource
    +    :type type: str
    +    """
    +
    +    _attribute_map = {
    +        'group_id': {'key': 'properties.groupId', 'type': 'str'},
    +        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    +        'required_members': {'key': 'properties.requiredMembers', 'type': '[str]'},
    +        'required_zone_names': {'key': 'properties.requiredZoneNames', 'type': '[str]'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PrivateLinkResource, self).__init__(**kwargs)
    +        self.group_id = kwargs.get('group_id', None)
    +        self.display_name = kwargs.get('display_name', None)
    +        self.required_members = kwargs.get('required_members', None)
    +        self.required_zone_names = kwargs.get('required_zone_names', None)
    +        self.id = kwargs.get('id', None)
    +        self.name = kwargs.get('name', None)
    +        self.type = kwargs.get('type', None)
    +
    +
    +class ResourceSku(Model):
    +    """Describes an EventGrid Resource Sku.
    +
    +    :param name: the Sku name of the resource.
    +     the possible values: Basic; Premium. Possible values include: 'Basic',
    +     'Premium'
    +    :type name: str or ~azure.mgmt.eventgrid.models.Sku
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ResourceSku, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +
    +
    +class RetryPolicy(Model):
    +    """Information about the retry policy for an event subscription.
    +
    +    :param max_delivery_attempts: Maximum number of delivery retry attempts
    +     for events.
    +    :type max_delivery_attempts: int
    +    :param event_time_to_live_in_minutes: Time To Live (in minutes) for
    +     events.
    +    :type event_time_to_live_in_minutes: int
    +    """
    +
    +    _attribute_map = {
    +        'max_delivery_attempts': {'key': 'maxDeliveryAttempts', 'type': 'int'},
    +        'event_time_to_live_in_minutes': {'key': 'eventTimeToLiveInMinutes', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RetryPolicy, self).__init__(**kwargs)
    +        self.max_delivery_attempts = kwargs.get('max_delivery_attempts', None)
    +        self.event_time_to_live_in_minutes = kwargs.get('event_time_to_live_in_minutes', None)
    +
    +
    +class ServiceBusQueueEventSubscriptionDestination(EventSubscriptionDestination):
    +    """Information about the service bus destination for an event subscription.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param endpoint_type: Required. Constant filled by server.
    +    :type endpoint_type: str
    +    :param resource_id: The Azure Resource Id that represents the endpoint of
    +     the Service Bus destination of an event subscription.
    +    :type resource_id: str
    +    """
    +
    +    _validation = {
    +        'endpoint_type': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'endpoint_type': {'key': 'endpointType', 'type': 'str'},
    +        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ServiceBusQueueEventSubscriptionDestination, self).__init__(**kwargs)
    +        self.resource_id = kwargs.get('resource_id', None)
    +        self.endpoint_type = 'ServiceBusQueue'
    +
    +
    +class ServiceBusTopicEventSubscriptionDestination(EventSubscriptionDestination):
    +    """Information about the service bus topic destination for an event
    +    subscription.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param endpoint_type: Required. Constant filled by server.
    +    :type endpoint_type: str
    +    :param resource_id: The Azure Resource Id that represents the endpoint of
    +     the Service Bus Topic destination of an event subscription.
    +    :type resource_id: str
    +    """
    +
    +    _validation = {
    +        'endpoint_type': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'endpoint_type': {'key': 'endpointType', 'type': 'str'},
    +        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ServiceBusTopicEventSubscriptionDestination, self).__init__(**kwargs)
    +        self.resource_id = kwargs.get('resource_id', None)
    +        self.endpoint_type = 'ServiceBusTopic'
    +
    +
    +class SkuDefinitionsForResourceType(Model):
    +    """Describes an EventGrid Resource Sku Definition.
    +
    +    :param resource_type: The Resource Type applicable for the Sku.
    +    :type resource_type: str
    +    :param skus: The Sku pricing tiers for the resource type.
    +    :type skus: list[~azure.mgmt.eventgrid.models.ResourceSku]
    +    """
    +
    +    _attribute_map = {
    +        'resource_type': {'key': 'resourceType', 'type': 'str'},
    +        'skus': {'key': 'skus', 'type': '[ResourceSku]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SkuDefinitionsForResourceType, self).__init__(**kwargs)
    +        self.resource_type = kwargs.get('resource_type', None)
    +        self.skus = kwargs.get('skus', None)
    +
    +
    +class SkuDefinitionsForResourceTypeListResult(Model):
    +    """List collection of Sku Definitions for each Resource Type.
    +
    +    :param value: A collection of Sku Definitions for each Resource Type.
    +    :type value:
    +     list[~azure.mgmt.eventgrid.models.SkuDefinitionsForResourceType]
    +    :param next_link: A link for the next page of Sku Definitions.
    +    :type next_link: str
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SkuDefinitionsForResourceType]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SkuDefinitionsForResourceTypeListResult, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.next_link = kwargs.get('next_link', None)
    +
    +
    +class StorageBlobDeadLetterDestination(DeadLetterDestination):
    +    """Information about the storage blob based dead letter destination.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param endpoint_type: Required. Constant filled by server.
    +    :type endpoint_type: str
    +    :param resource_id: The Azure Resource ID of the storage account that is
    +     the destination of the deadletter events
    +    :type resource_id: str
    +    :param blob_container_name: The name of the Storage blob container that is
    +     the destination of the deadletter events
    +    :type blob_container_name: str
    +    """
    +
    +    _validation = {
    +        'endpoint_type': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'endpoint_type': {'key': 'endpointType', 'type': 'str'},
             'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
             'blob_container_name': {'key': 'properties.blobContainerName', 'type': 'str'},
         }
    @@ -1432,6 +2377,82 @@ def __init__(self, **kwargs):
             self.operator_type = 'StringNotIn'
     
     
    +class SystemTopic(TrackedResource):
    +    """EventGrid System Topic.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param location: Required. Location of the resource.
    +    :type location: str
    +    :param tags: Tags of the resource.
    +    :type tags: dict[str, str]
    +    :ivar provisioning_state: Provisioning state of the system topic. Possible
    +     values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Canceled', 'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.eventgrid.models.ResourceProvisioningState
    +    :param source: Source for the system topic.
    +    :type source: str
    +    :param topic_type: TopicType for the system topic.
    +    :type topic_type: str
    +    :ivar metric_resource_id: Metric resource id for the system topic.
    +    :vartype metric_resource_id: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +        'metric_resource_id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +        'source': {'key': 'properties.source', 'type': 'str'},
    +        'topic_type': {'key': 'properties.topicType', 'type': 'str'},
    +        'metric_resource_id': {'key': 'properties.metricResourceId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SystemTopic, self).__init__(**kwargs)
    +        self.provisioning_state = None
    +        self.source = kwargs.get('source', None)
    +        self.topic_type = kwargs.get('topic_type', None)
    +        self.metric_resource_id = None
    +
    +
    +class SystemTopicUpdateParameters(Model):
    +    """Properties of the System Topic update.
    +
    +    :param tags: Tags of the system topic.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SystemTopicUpdateParameters, self).__init__(**kwargs)
    +        self.tags = kwargs.get('tags', None)
    +
    +
     class Topic(TrackedResource):
         """EventGrid Topic.
     
    @@ -1450,6 +2471,9 @@ class Topic(TrackedResource):
         :type location: str
         :param tags: Tags of the resource.
         :type tags: dict[str, str]
    +    :param private_endpoint_connections: List of private endpoint connections.
    +    :type private_endpoint_connections:
    +     list[~azure.mgmt.eventgrid.models.PrivateEndpointConnection]
         :ivar provisioning_state: Provisioning state of the topic. Possible values
          include: 'Creating', 'Updating', 'Deleting', 'Succeeded', 'Canceled',
          'Failed'
    @@ -1470,13 +2494,21 @@ class Topic(TrackedResource):
          ~azure.mgmt.eventgrid.models.InputSchemaMapping
         :ivar metric_resource_id: Metric resource id for the topic.
         :vartype metric_resource_id: str
    -    :param allow_traffic_from_all_ips: This determines if IP filtering rules
    -     ought to be evaluated or not. By default it will not evaluate and will
    -     allow traffic from all IPs.
    -    :type allow_traffic_from_all_ips: bool
    -    :param inbound_ip_rules: This determines the IP filtering rules that ought
    -     to be applied when events are received on this topic.
    +    :param public_network_access: This determines if traffic is allowed over
    +     public network. By default it is enabled.
    +     You can further restrict to specific IPs by configuring . Possible values include: 'Enabled', 'Disabled'
    +    :type public_network_access: str or
    +     ~azure.mgmt.eventgrid.models.PublicNetworkAccess
    +    :param inbound_ip_rules: This can be used to restrict traffic from
    +     specific IPs instead of all IPs. Note: These are considered only if
    +     PublicNetworkAccess is enabled.
         :type inbound_ip_rules: list[~azure.mgmt.eventgrid.models.InboundIpRule]
    +    :param sku: The Sku pricing tier for the topic.
    +    :type sku: ~azure.mgmt.eventgrid.models.ResourceSku
    +    :param identity: Identity information for the resource.
    +    :type identity: ~azure.mgmt.eventgrid.models.IdentityInfo
         """
     
         _validation = {
    @@ -1495,24 +2527,30 @@ class Topic(TrackedResource):
             'type': {'key': 'type', 'type': 'str'},
             'location': {'key': 'location', 'type': 'str'},
             'tags': {'key': 'tags', 'type': '{str}'},
    +        'private_endpoint_connections': {'key': 'properties.privateEndpointConnections', 'type': '[PrivateEndpointConnection]'},
             'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
             'endpoint': {'key': 'properties.endpoint', 'type': 'str'},
             'input_schema': {'key': 'properties.inputSchema', 'type': 'str'},
             'input_schema_mapping': {'key': 'properties.inputSchemaMapping', 'type': 'InputSchemaMapping'},
             'metric_resource_id': {'key': 'properties.metricResourceId', 'type': 'str'},
    -        'allow_traffic_from_all_ips': {'key': 'properties.allowTrafficFromAllIPs', 'type': 'bool'},
    +        'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'},
             'inbound_ip_rules': {'key': 'properties.inboundIpRules', 'type': '[InboundIpRule]'},
    +        'sku': {'key': 'sku', 'type': 'ResourceSku'},
    +        'identity': {'key': 'identity', 'type': 'IdentityInfo'},
         }
     
         def __init__(self, **kwargs):
             super(Topic, self).__init__(**kwargs)
    +        self.private_endpoint_connections = kwargs.get('private_endpoint_connections', None)
             self.provisioning_state = None
             self.endpoint = None
             self.input_schema = kwargs.get('input_schema', "EventGridSchema")
             self.input_schema_mapping = kwargs.get('input_schema_mapping', None)
             self.metric_resource_id = None
    -        self.allow_traffic_from_all_ips = kwargs.get('allow_traffic_from_all_ips', None)
    +        self.public_network_access = kwargs.get('public_network_access', None)
             self.inbound_ip_rules = kwargs.get('inbound_ip_rules', None)
    +        self.sku = kwargs.get('sku', None)
    +        self.identity = kwargs.get('identity', None)
     
     
     class TopicRegenerateKeyRequest(Model):
    @@ -1626,26 +2664,58 @@ class TopicUpdateParameters(Model):
     
         :param tags: Tags of the resource.
         :type tags: dict[str, str]
    -    :param allow_traffic_from_all_ips: This determines if IP filtering rules
    -     ought to be evaluated or not. By default it will not evaluate and will
    -     allow traffic from all IPs.
    -    :type allow_traffic_from_all_ips: bool
    -    :param inbound_ip_rules: This determines the IP filtering rules that ought
    -     be applied when events are received on this domain.
    +    :param identity: Resource identity information.
    +    :type identity: ~azure.mgmt.eventgrid.models.IdentityInfo
    +    :param public_network_access: This determines if traffic is allowed over
    +     public network. By default it is enabled.
    +     You can further restrict to specific IPs by configuring . Possible values include: 'Enabled', 'Disabled'
    +    :type public_network_access: str or
    +     ~azure.mgmt.eventgrid.models.PublicNetworkAccess
    +    :param inbound_ip_rules: This can be used to restrict traffic from
    +     specific IPs instead of all IPs. Note: These are considered only if
    +     PublicNetworkAccess is enabled.
         :type inbound_ip_rules: list[~azure.mgmt.eventgrid.models.InboundIpRule]
    +    :param sku: The Sku pricing tier for the topic.
    +    :type sku: ~azure.mgmt.eventgrid.models.ResourceSku
         """
     
         _attribute_map = {
             'tags': {'key': 'tags', 'type': '{str}'},
    -        'allow_traffic_from_all_ips': {'key': 'allowTrafficFromAllIPs', 'type': 'bool'},
    -        'inbound_ip_rules': {'key': 'inboundIpRules', 'type': '[InboundIpRule]'},
    +        'identity': {'key': 'identity', 'type': 'IdentityInfo'},
    +        'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'},
    +        'inbound_ip_rules': {'key': 'properties.inboundIpRules', 'type': '[InboundIpRule]'},
    +        'sku': {'key': 'sku', 'type': 'ResourceSku'},
         }
     
         def __init__(self, **kwargs):
             super(TopicUpdateParameters, self).__init__(**kwargs)
             self.tags = kwargs.get('tags', None)
    -        self.allow_traffic_from_all_ips = kwargs.get('allow_traffic_from_all_ips', None)
    +        self.identity = kwargs.get('identity', None)
    +        self.public_network_access = kwargs.get('public_network_access', None)
             self.inbound_ip_rules = kwargs.get('inbound_ip_rules', None)
    +        self.sku = kwargs.get('sku', None)
    +
    +
    +class UserIdentityProperties(Model):
    +    """The information about the user identity.
    +
    +    :param principal_id: The principal id of user assigned identity.
    +    :type principal_id: str
    +    :param client_id: The client id of user assigned identity.
    +    :type client_id: str
    +    """
    +
    +    _attribute_map = {
    +        'principal_id': {'key': 'principalId', 'type': 'str'},
    +        'client_id': {'key': 'clientId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(UserIdentityProperties, self).__init__(**kwargs)
    +        self.principal_id = kwargs.get('principal_id', None)
    +        self.client_id = kwargs.get('client_id', None)
     
     
     class WebHookEventSubscriptionDestination(EventSubscriptionDestination):
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_models_py3.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_models_py3.py
    index ffcf536a1600..7e9db8370110 100644
    --- a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_models_py3.py
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_models_py3.py
    @@ -166,6 +166,32 @@ class CloudError(Model):
         }
     
     
    +class ConnectionState(Model):
    +    """ConnectionState Information.
    +
    +    :param status: Status of the connection. Possible values include:
    +     'Pending', 'Approved', 'Rejected', 'Disconnected'
    +    :type status: str or
    +     ~azure.mgmt.eventgrid.models.PersistedConnectionStatus
    +    :param description: Description of the connection state.
    +    :type description: str
    +    :param actions_required: Actions required (if any).
    +    :type actions_required: str
    +    """
    +
    +    _attribute_map = {
    +        'status': {'key': 'status', 'type': 'str'},
    +        'description': {'key': 'description', 'type': 'str'},
    +        'actions_required': {'key': 'actionsRequired', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, status=None, description: str=None, actions_required: str=None, **kwargs) -> None:
    +        super(ConnectionState, self).__init__(**kwargs)
    +        self.status = status
    +        self.description = description
    +        self.actions_required = actions_required
    +
    +
     class DeadLetterDestination(Model):
         """Information about the dead letter destination for an event subscription. To
         configure a deadletter destination, do not directly instantiate an object
    @@ -199,6 +225,56 @@ def __init__(self, **kwargs) -> None:
             self.endpoint_type = None
     
     
    +class DeadLetterWithResourceIdentity(Model):
    +    """Information about the deadletter destination with resource identity.
    +
    +    :param identity: The identity to use when dead-lettering events.
    +    :type identity: ~azure.mgmt.eventgrid.models.EventSubscriptionIdentity
    +    :param dead_letter_destination: Information about the destination where
    +     events have to be delivered for the event subscription.
    +     Uses the managed identity setup on the parent resource (namely, topic or
    +     domain) to acquire the authentication tokens being used during delivery /
    +     dead-lettering.
    +    :type dead_letter_destination:
    +     ~azure.mgmt.eventgrid.models.DeadLetterDestination
    +    """
    +
    +    _attribute_map = {
    +        'identity': {'key': 'identity', 'type': 'EventSubscriptionIdentity'},
    +        'dead_letter_destination': {'key': 'deadLetterDestination', 'type': 'DeadLetterDestination'},
    +    }
    +
    +    def __init__(self, *, identity=None, dead_letter_destination=None, **kwargs) -> None:
    +        super(DeadLetterWithResourceIdentity, self).__init__(**kwargs)
    +        self.identity = identity
    +        self.dead_letter_destination = dead_letter_destination
    +
    +
    +class DeliveryWithResourceIdentity(Model):
    +    """Information about the delivery for an event subscription with resource
    +    identity.
    +
    +    :param identity: The identity to use when delivering events.
    +    :type identity: ~azure.mgmt.eventgrid.models.EventSubscriptionIdentity
    +    :param destination: Information about the destination where events have to
    +     be delivered for the event subscription.
    +     Uses Azure Event Grid's identity to acquire the authentication tokens
    +     being used during delivery / dead-lettering.
    +    :type destination:
    +     ~azure.mgmt.eventgrid.models.EventSubscriptionDestination
    +    """
    +
    +    _attribute_map = {
    +        'identity': {'key': 'identity', 'type': 'EventSubscriptionIdentity'},
    +        'destination': {'key': 'destination', 'type': 'EventSubscriptionDestination'},
    +    }
    +
    +    def __init__(self, *, identity=None, destination=None, **kwargs) -> None:
    +        super(DeliveryWithResourceIdentity, self).__init__(**kwargs)
    +        self.identity = identity
    +        self.destination = destination
    +
    +
     class Resource(Model):
         """Definition of a Resource.
     
    @@ -291,6 +367,9 @@ class Domain(TrackedResource):
         :type location: str
         :param tags: Tags of the resource.
         :type tags: dict[str, str]
    +    :param private_endpoint_connections: List of private endpoint connections.
    +    :type private_endpoint_connections:
    +     list[~azure.mgmt.eventgrid.models.PrivateEndpointConnection]
         :ivar provisioning_state: Provisioning state of the domain. Possible
          values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
          'Canceled', 'Failed'
    @@ -309,13 +388,21 @@ class Domain(TrackedResource):
          ~azure.mgmt.eventgrid.models.InputSchemaMapping
         :ivar metric_resource_id: Metric resource id for the domain.
         :vartype metric_resource_id: str
    -    :param allow_traffic_from_all_ips: This determines if IP filtering rules
    -     ought to be evaluated or not. By default it will not evaluate and will
    -     allow traffic from all IPs.
    -    :type allow_traffic_from_all_ips: bool
    -    :param inbound_ip_rules: This determines the IP filtering rules that ought
    -     be applied when events are received on this domain.
    +    :param public_network_access: This determines if traffic is allowed over
    +     public network. By default it is enabled.
    +     You can further restrict to specific IPs by configuring . Possible values include: 'Enabled', 'Disabled'
    +    :type public_network_access: str or
    +     ~azure.mgmt.eventgrid.models.PublicNetworkAccess
    +    :param inbound_ip_rules: This can be used to restrict traffic from
    +     specific IPs instead of all IPs. Note: These are considered only if
    +     PublicNetworkAccess is enabled.
         :type inbound_ip_rules: list[~azure.mgmt.eventgrid.models.InboundIpRule]
    +    :param sku: The Sku pricing tier for the domain.
    +    :type sku: ~azure.mgmt.eventgrid.models.ResourceSku
    +    :param identity: Identity information for the resource.
    +    :type identity: ~azure.mgmt.eventgrid.models.IdentityInfo
         """
     
         _validation = {
    @@ -334,24 +421,30 @@ class Domain(TrackedResource):
             'type': {'key': 'type', 'type': 'str'},
             'location': {'key': 'location', 'type': 'str'},
             'tags': {'key': 'tags', 'type': '{str}'},
    +        'private_endpoint_connections': {'key': 'properties.privateEndpointConnections', 'type': '[PrivateEndpointConnection]'},
             'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
             'endpoint': {'key': 'properties.endpoint', 'type': 'str'},
             'input_schema': {'key': 'properties.inputSchema', 'type': 'str'},
             'input_schema_mapping': {'key': 'properties.inputSchemaMapping', 'type': 'InputSchemaMapping'},
             'metric_resource_id': {'key': 'properties.metricResourceId', 'type': 'str'},
    -        'allow_traffic_from_all_ips': {'key': 'properties.allowTrafficFromAllIPs', 'type': 'bool'},
    +        'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'},
             'inbound_ip_rules': {'key': 'properties.inboundIpRules', 'type': '[InboundIpRule]'},
    +        'sku': {'key': 'sku', 'type': 'ResourceSku'},
    +        'identity': {'key': 'identity', 'type': 'IdentityInfo'},
         }
     
    -    def __init__(self, *, location: str, tags=None, input_schema="EventGridSchema", input_schema_mapping=None, allow_traffic_from_all_ips: bool=None, inbound_ip_rules=None, **kwargs) -> None:
    +    def __init__(self, *, location: str, tags=None, private_endpoint_connections=None, input_schema="EventGridSchema", input_schema_mapping=None, public_network_access=None, inbound_ip_rules=None, sku=None, identity=None, **kwargs) -> None:
             super(Domain, self).__init__(location=location, tags=tags, **kwargs)
    +        self.private_endpoint_connections = private_endpoint_connections
             self.provisioning_state = None
             self.endpoint = None
             self.input_schema = input_schema
             self.input_schema_mapping = input_schema_mapping
             self.metric_resource_id = None
    -        self.allow_traffic_from_all_ips = allow_traffic_from_all_ips
    +        self.public_network_access = public_network_access
             self.inbound_ip_rules = inbound_ip_rules
    +        self.sku = sku
    +        self.identity = identity
     
     
     class DomainRegenerateKeyRequest(Model):
    @@ -436,28 +529,136 @@ def __init__(self, *, provisioning_state=None, **kwargs) -> None:
     class DomainUpdateParameters(Model):
         """Properties of the Domain update.
     
    -    :param tags: Tags of the domains resource
    +    :param tags: Tags of the domains resource.
         :type tags: dict[str, str]
    -    :param allow_traffic_from_all_ips: This determines if IP filtering rules
    -     ought to be evaluated or not. By default it will not evaluate and will
    -     allow traffic from all IPs.
    -    :type allow_traffic_from_all_ips: bool
    -    :param inbound_ip_rules: This determines the IP filtering rules that ought
    -     be applied when events are received on this domain.
    +    :param public_network_access: This determines if traffic is allowed over
    +     public network. By default it is enabled.
    +     You can further restrict to specific IPs by configuring . Possible values include: 'Enabled', 'Disabled'
    +    :type public_network_access: str or
    +     ~azure.mgmt.eventgrid.models.PublicNetworkAccess
    +    :param inbound_ip_rules: This can be used to restrict traffic from
    +     specific IPs instead of all IPs. Note: These are considered only if
    +     PublicNetworkAccess is enabled.
         :type inbound_ip_rules: list[~azure.mgmt.eventgrid.models.InboundIpRule]
    +    :param identity: Identity information for the resource.
    +    :type identity: ~azure.mgmt.eventgrid.models.IdentityInfo
    +    :param sku: The Sku pricing tier for the domain.
    +    :type sku: ~azure.mgmt.eventgrid.models.ResourceSku
         """
     
         _attribute_map = {
             'tags': {'key': 'tags', 'type': '{str}'},
    -        'allow_traffic_from_all_ips': {'key': 'allowTrafficFromAllIPs', 'type': 'bool'},
    -        'inbound_ip_rules': {'key': 'inboundIpRules', 'type': '[InboundIpRule]'},
    +        'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'},
    +        'inbound_ip_rules': {'key': 'properties.inboundIpRules', 'type': '[InboundIpRule]'},
    +        'identity': {'key': 'identity', 'type': 'IdentityInfo'},
    +        'sku': {'key': 'sku', 'type': 'ResourceSku'},
         }
     
    -    def __init__(self, *, tags=None, allow_traffic_from_all_ips: bool=None, inbound_ip_rules=None, **kwargs) -> None:
    +    def __init__(self, *, tags=None, public_network_access=None, inbound_ip_rules=None, identity=None, sku=None, **kwargs) -> None:
             super(DomainUpdateParameters, self).__init__(**kwargs)
             self.tags = tags
    -        self.allow_traffic_from_all_ips = allow_traffic_from_all_ips
    +        self.public_network_access = public_network_access
             self.inbound_ip_rules = inbound_ip_rules
    +        self.identity = identity
    +        self.sku = sku
    +
    +
    +class EventChannel(Resource):
    +    """Event Channel.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param source: Source of the event channel. This represents a unique
    +     resource in the partner's resource model.
    +    :type source: ~azure.mgmt.eventgrid.models.EventChannelSource
    +    :param destination: Represents the destination of an event channel.
    +    :type destination: ~azure.mgmt.eventgrid.models.EventChannelDestination
    +    :ivar provisioning_state: Provisioning state of the event channel.
    +     Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Canceled', 'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.eventgrid.models.EventChannelProvisioningState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'source': {'key': 'properties.source', 'type': 'EventChannelSource'},
    +        'destination': {'key': 'properties.destination', 'type': 'EventChannelDestination'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, source=None, destination=None, **kwargs) -> None:
    +        super(EventChannel, self).__init__(**kwargs)
    +        self.source = source
    +        self.destination = destination
    +        self.provisioning_state = None
    +
    +
    +class EventChannelDestination(Model):
    +    """Properties of the destination of an event channel.
    +
    +    :param azure_subscription_id: Azure subscription ID of the customer
    +     creating the event channel. The partner topic
    +     associated with the event channel will be created under this Azure
    +     subscription.
    +    :type azure_subscription_id: str
    +    :param resource_group: Azure Resource Group of the customer creating the
    +     event channel. The partner topic
    +     associated with the event channel will be created under this resource
    +     group.
    +    :type resource_group: str
    +    :param partner_topic_name: Name of the partner topic associated with the
    +     event channel.
    +    :type partner_topic_name: str
    +    """
    +
    +    _attribute_map = {
    +        'azure_subscription_id': {'key': 'azureSubscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +        'partner_topic_name': {'key': 'partnerTopicName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, azure_subscription_id: str=None, resource_group: str=None, partner_topic_name: str=None, **kwargs) -> None:
    +        super(EventChannelDestination, self).__init__(**kwargs)
    +        self.azure_subscription_id = azure_subscription_id
    +        self.resource_group = resource_group
    +        self.partner_topic_name = partner_topic_name
    +
    +
    +class EventChannelSource(Model):
    +    """Properties of the source of an event channel.
    +
    +    :param source: The identifier of the resource that's the source of the
    +     events.
    +     This represents a unique resource in the partner's resource model.
    +    :type source: str
    +    """
    +
    +    _attribute_map = {
    +        'source': {'key': 'source', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, source: str=None, **kwargs) -> None:
    +        super(EventChannelSource, self).__init__(**kwargs)
    +        self.source = source
     
     
     class EventHubEventSubscriptionDestination(EventSubscriptionDestination):
    @@ -508,8 +709,17 @@ class EventSubscription(Resource):
          ~azure.mgmt.eventgrid.models.EventSubscriptionProvisioningState
         :param destination: Information about the destination where events have to
          be delivered for the event subscription.
    +     Uses Azure Event Grid's identity to acquire the authentication tokens
    +     being used during delivery / dead-lettering.
         :type destination:
          ~azure.mgmt.eventgrid.models.EventSubscriptionDestination
    +    :param delivery_with_resource_identity: Information about the destination
    +     where events have to be delivered for the event subscription.
    +     Uses the managed identity setup on the parent resource (namely, topic or
    +     domain) to acquire the authentication tokens being used during delivery /
    +     dead-lettering.
    +    :type delivery_with_resource_identity:
    +     ~azure.mgmt.eventgrid.models.DeliveryWithResourceIdentity
         :param filter: Information about the filter for the event subscription.
         :type filter: ~azure.mgmt.eventgrid.models.EventSubscriptionFilter
         :param labels: List of user defined labels.
    @@ -524,10 +734,21 @@ class EventSubscription(Resource):
         :param retry_policy: The retry policy for events. This can be used to
          configure maximum number of delivery attempts and time to live for events.
         :type retry_policy: ~azure.mgmt.eventgrid.models.RetryPolicy
    -    :param dead_letter_destination: The DeadLetter destination of the event
    -     subscription.
    +    :param dead_letter_destination: The dead letter destination of the event
    +     subscription. Any event that cannot be delivered to its' destination is
    +     sent to the dead letter destination.
    +     Uses Azure Event Grid's identity to acquire the authentication tokens
    +     being used during delivery / dead-lettering.
         :type dead_letter_destination:
          ~azure.mgmt.eventgrid.models.DeadLetterDestination
    +    :param dead_letter_with_resource_identity: The dead letter destination of
    +     the event subscription. Any event that cannot be delivered to its'
    +     destination is sent to the dead letter destination.
    +     Uses the managed identity setup on the parent resource (namely, topic or
    +     domain) to acquire the authentication tokens being used during delivery /
    +     dead-lettering.
    +    :type dead_letter_with_resource_identity:
    +     ~azure.mgmt.eventgrid.models.DeadLetterWithResourceIdentity
         """
     
         _validation = {
    @@ -545,25 +766,29 @@ class EventSubscription(Resource):
             'topic': {'key': 'properties.topic', 'type': 'str'},
             'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
             'destination': {'key': 'properties.destination', 'type': 'EventSubscriptionDestination'},
    +        'delivery_with_resource_identity': {'key': 'properties.deliveryWithResourceIdentity', 'type': 'DeliveryWithResourceIdentity'},
             'filter': {'key': 'properties.filter', 'type': 'EventSubscriptionFilter'},
             'labels': {'key': 'properties.labels', 'type': '[str]'},
             'expiration_time_utc': {'key': 'properties.expirationTimeUtc', 'type': 'iso-8601'},
             'event_delivery_schema': {'key': 'properties.eventDeliverySchema', 'type': 'str'},
             'retry_policy': {'key': 'properties.retryPolicy', 'type': 'RetryPolicy'},
             'dead_letter_destination': {'key': 'properties.deadLetterDestination', 'type': 'DeadLetterDestination'},
    +        'dead_letter_with_resource_identity': {'key': 'properties.deadLetterWithResourceIdentity', 'type': 'DeadLetterWithResourceIdentity'},
         }
     
    -    def __init__(self, *, destination=None, filter=None, labels=None, expiration_time_utc=None, event_delivery_schema=None, retry_policy=None, dead_letter_destination=None, **kwargs) -> None:
    +    def __init__(self, *, destination=None, delivery_with_resource_identity=None, filter=None, labels=None, expiration_time_utc=None, event_delivery_schema=None, retry_policy=None, dead_letter_destination=None, dead_letter_with_resource_identity=None, **kwargs) -> None:
             super(EventSubscription, self).__init__(**kwargs)
             self.topic = None
             self.provisioning_state = None
             self.destination = destination
    +        self.delivery_with_resource_identity = delivery_with_resource_identity
             self.filter = filter
             self.labels = labels
             self.expiration_time_utc = expiration_time_utc
             self.event_delivery_schema = event_delivery_schema
             self.retry_policy = retry_policy
             self.dead_letter_destination = dead_letter_destination
    +        self.dead_letter_with_resource_identity = dead_letter_with_resource_identity
     
     
     class EventSubscriptionFilter(Model):
    @@ -625,13 +850,47 @@ def __init__(self, *, endpoint_url: str=None, **kwargs) -> None:
             self.endpoint_url = endpoint_url
     
     
    +class EventSubscriptionIdentity(Model):
    +    """The identity information with the event subscription.
    +
    +    :param type: The type of managed identity used. The type 'SystemAssigned,
    +     UserAssigned' includes both an implicitly created identity and a set of
    +     user-assigned identities. The type 'None' will remove any identity.
    +     Possible values include: 'SystemAssigned', 'UserAssigned'
    +    :type type: str or
    +     ~azure.mgmt.eventgrid.models.EventSubscriptionIdentityType
    +    :param user_assigned_identity: The user identity associated with the
    +     resource.
    +    :type user_assigned_identity: str
    +    """
    +
    +    _attribute_map = {
    +        'type': {'key': 'type', 'type': 'str'},
    +        'user_assigned_identity': {'key': 'userAssignedIdentity', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, type=None, user_assigned_identity: str=None, **kwargs) -> None:
    +        super(EventSubscriptionIdentity, self).__init__(**kwargs)
    +        self.type = type
    +        self.user_assigned_identity = user_assigned_identity
    +
    +
     class EventSubscriptionUpdateParameters(Model):
         """Properties of the Event Subscription update.
     
         :param destination: Information about the destination where events have to
          be delivered for the event subscription.
    +     Uses Azure Event Grid's identity to acquire the authentication tokens
    +     being used during delivery / dead-lettering.
         :type destination:
          ~azure.mgmt.eventgrid.models.EventSubscriptionDestination
    +    :param delivery_with_resource_identity: Information about the destination
    +     where events have to be delivered for the event subscription.
    +     Uses the managed identity setup on the parent resource (topic / domain) to
    +     acquire the authentication tokens being used during delivery /
    +     dead-lettering.
    +    :type delivery_with_resource_identity:
    +     ~azure.mgmt.eventgrid.models.DeliveryWithResourceIdentity
         :param filter: Information about the filter for the event subscription.
         :type filter: ~azure.mgmt.eventgrid.models.EventSubscriptionFilter
         :param labels: List of user defined labels.
    @@ -647,31 +906,46 @@ class EventSubscriptionUpdateParameters(Model):
         :param retry_policy: The retry policy for events. This can be used to
          configure maximum number of delivery attempts and time to live for events.
         :type retry_policy: ~azure.mgmt.eventgrid.models.RetryPolicy
    -    :param dead_letter_destination: The DeadLetter destination of the event
    -     subscription.
    +    :param dead_letter_destination: The dead letter destination of the event
    +     subscription. Any event that cannot be delivered to its' destination is
    +     sent to the dead letter destination.
    +     Uses Azure Event Grid's identity to acquire the authentication tokens
    +     being used during delivery / dead-lettering.
         :type dead_letter_destination:
          ~azure.mgmt.eventgrid.models.DeadLetterDestination
    +    :param dead_letter_with_resource_identity: The dead letter destination of
    +     the event subscription. Any event that cannot be delivered to its'
    +     destination is sent to the dead letter destination.
    +     Uses the managed identity setup on the parent resource (topic / domain) to
    +     acquire the authentication tokens being used during delivery /
    +     dead-lettering.
    +    :type dead_letter_with_resource_identity:
    +     ~azure.mgmt.eventgrid.models.DeadLetterWithResourceIdentity
         """
     
         _attribute_map = {
             'destination': {'key': 'destination', 'type': 'EventSubscriptionDestination'},
    +        'delivery_with_resource_identity': {'key': 'deliveryWithResourceIdentity', 'type': 'DeliveryWithResourceIdentity'},
             'filter': {'key': 'filter', 'type': 'EventSubscriptionFilter'},
             'labels': {'key': 'labels', 'type': '[str]'},
             'expiration_time_utc': {'key': 'expirationTimeUtc', 'type': 'iso-8601'},
             'event_delivery_schema': {'key': 'eventDeliverySchema', 'type': 'str'},
             'retry_policy': {'key': 'retryPolicy', 'type': 'RetryPolicy'},
             'dead_letter_destination': {'key': 'deadLetterDestination', 'type': 'DeadLetterDestination'},
    +        'dead_letter_with_resource_identity': {'key': 'deadLetterWithResourceIdentity', 'type': 'DeadLetterWithResourceIdentity'},
         }
     
    -    def __init__(self, *, destination=None, filter=None, labels=None, expiration_time_utc=None, event_delivery_schema=None, retry_policy=None, dead_letter_destination=None, **kwargs) -> None:
    +    def __init__(self, *, destination=None, delivery_with_resource_identity=None, filter=None, labels=None, expiration_time_utc=None, event_delivery_schema=None, retry_policy=None, dead_letter_destination=None, dead_letter_with_resource_identity=None, **kwargs) -> None:
             super(EventSubscriptionUpdateParameters, self).__init__(**kwargs)
             self.destination = destination
    +        self.delivery_with_resource_identity = delivery_with_resource_identity
             self.filter = filter
             self.labels = labels
             self.expiration_time_utc = expiration_time_utc
             self.event_delivery_schema = event_delivery_schema
             self.retry_policy = retry_policy
             self.dead_letter_destination = dead_letter_destination
    +        self.dead_letter_with_resource_identity = dead_letter_with_resource_identity
     
     
     class EventType(Resource):
    @@ -720,6 +994,46 @@ def __init__(self, *, display_name: str=None, description: str=None, schema_url:
             self.is_in_default_set = is_in_default_set
     
     
    +class ExtensionTopic(Resource):
    +    """Event grid Extension Topic. This is used for getting Event Grid related
    +    metrics for Azure resources.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param description: Description of the extension topic.
    +    :type description: str
    +    :param system_topic: System topic resource id which is mapped to the
    +     source.
    +    :type system_topic: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'description': {'key': 'properties.description', 'type': 'str'},
    +        'system_topic': {'key': 'properties.systemTopic', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, description: str=None, system_topic: str=None, **kwargs) -> None:
    +        super(ExtensionTopic, self).__init__(**kwargs)
    +        self.description = description
    +        self.system_topic = system_topic
    +
    +
     class HybridConnectionEventSubscriptionDestination(EventSubscriptionDestination):
         """Information about the HybridConnection destination for an event
         subscription.
    @@ -748,6 +1062,43 @@ def __init__(self, *, resource_id: str=None, **kwargs) -> None:
             self.endpoint_type = 'HybridConnection'
     
     
    +class IdentityInfo(Model):
    +    """The identity information for the resource.
    +
    +    :param type: The type of managed identity used. The type 'SystemAssigned,
    +     UserAssigned' includes both an implicitly created identity and a set of
    +     user-assigned identities. The type 'None' will remove any identity.
    +     Possible values include: 'None', 'SystemAssigned', 'UserAssigned',
    +     'SystemAssigned, UserAssigned'
    +    :type type: str or ~azure.mgmt.eventgrid.models.IdentityType
    +    :param principal_id: The principal ID of resource identity.
    +    :type principal_id: str
    +    :param tenant_id: The tenant ID of resource.
    +    :type tenant_id: str
    +    :param user_assigned_identities: The list of user identities associated
    +     with the resource. The user identity dictionary key references will be ARM
    +     resource ids in the form:
    +     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
    +     This property is currently not used and reserved for future usage.
    +    :type user_assigned_identities: dict[str,
    +     ~azure.mgmt.eventgrid.models.UserIdentityProperties]
    +    """
    +
    +    _attribute_map = {
    +        'type': {'key': 'type', 'type': 'str'},
    +        'principal_id': {'key': 'principalId', 'type': 'str'},
    +        'tenant_id': {'key': 'tenantId', 'type': 'str'},
    +        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{UserIdentityProperties}'},
    +    }
    +
    +    def __init__(self, *, type=None, principal_id: str=None, tenant_id: str=None, user_assigned_identities=None, **kwargs) -> None:
    +        super(IdentityInfo, self).__init__(**kwargs)
    +        self.type = type
    +        self.principal_id = principal_id
    +        self.tenant_id = tenant_id
    +        self.user_assigned_identities = user_assigned_identities
    +
    +
     class InboundIpRule(Model):
         """InboundIpRule.
     
    @@ -1141,119 +1492,713 @@ def __init__(self, *, provider: str=None, resource: str=None, operation: str=Non
             self.description = description
     
     
    -class RetryPolicy(Model):
    -    """Information about the retry policy for an event subscription.
    -
    -    :param max_delivery_attempts: Maximum number of delivery retry attempts
    -     for events.
    -    :type max_delivery_attempts: int
    -    :param event_time_to_live_in_minutes: Time To Live (in minutes) for
    -     events.
    -    :type event_time_to_live_in_minutes: int
    -    """
    -
    -    _attribute_map = {
    -        'max_delivery_attempts': {'key': 'maxDeliveryAttempts', 'type': 'int'},
    -        'event_time_to_live_in_minutes': {'key': 'eventTimeToLiveInMinutes', 'type': 'int'},
    -    }
    -
    -    def __init__(self, *, max_delivery_attempts: int=None, event_time_to_live_in_minutes: int=None, **kwargs) -> None:
    -        super(RetryPolicy, self).__init__(**kwargs)
    -        self.max_delivery_attempts = max_delivery_attempts
    -        self.event_time_to_live_in_minutes = event_time_to_live_in_minutes
    -
    +class PartnerNamespace(TrackedResource):
    +    """EventGrid Partner Namespace.
     
    -class ServiceBusQueueEventSubscriptionDestination(EventSubscriptionDestination):
    -    """Information about the service bus destination for an event subscription.
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
     
         All required parameters must be populated in order to send to Azure.
     
    -    :param endpoint_type: Required. Constant filled by server.
    -    :type endpoint_type: str
    -    :param resource_id: The Azure Resource Id that represents the endpoint of
    -     the Service Bus destination of an event subscription.
    -    :type resource_id: str
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param location: Required. Location of the resource.
    +    :type location: str
    +    :param tags: Tags of the resource.
    +    :type tags: dict[str, str]
    +    :ivar provisioning_state: Provisioning state of the partner namespace.
    +     Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Canceled', 'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.eventgrid.models.PartnerNamespaceProvisioningState
    +    :param partner_registration_fully_qualified_id: The fully qualified ARM Id
    +     of the partner registration that should be associated with this partner
    +     namespace. This takes the following format:
    +     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerRegistrations/{partnerRegistrationName}.
    +    :type partner_registration_fully_qualified_id: str
    +    :ivar endpoint: Endpoint for the partner namespace.
    +    :vartype endpoint: str
         """
     
         _validation = {
    -        'endpoint_type': {'required': True},
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +        'endpoint': {'readonly': True},
         }
     
         _attribute_map = {
    -        'endpoint_type': {'key': 'endpointType', 'type': 'str'},
    -        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +        'partner_registration_fully_qualified_id': {'key': 'properties.partnerRegistrationFullyQualifiedId', 'type': 'str'},
    +        'endpoint': {'key': 'properties.endpoint', 'type': 'str'},
         }
     
    -    def __init__(self, *, resource_id: str=None, **kwargs) -> None:
    -        super(ServiceBusQueueEventSubscriptionDestination, self).__init__(**kwargs)
    -        self.resource_id = resource_id
    -        self.endpoint_type = 'ServiceBusQueue'
    +    def __init__(self, *, location: str, tags=None, partner_registration_fully_qualified_id: str=None, **kwargs) -> None:
    +        super(PartnerNamespace, self).__init__(location=location, tags=tags, **kwargs)
    +        self.provisioning_state = None
    +        self.partner_registration_fully_qualified_id = partner_registration_fully_qualified_id
    +        self.endpoint = None
     
     
    -class ServiceBusTopicEventSubscriptionDestination(EventSubscriptionDestination):
    -    """Information about the service bus topic destination for an event
    -    subscription.
    +class PartnerNamespaceRegenerateKeyRequest(Model):
    +    """PartnerNamespace regenerate shared access key request.
     
         All required parameters must be populated in order to send to Azure.
     
    -    :param endpoint_type: Required. Constant filled by server.
    -    :type endpoint_type: str
    -    :param resource_id: The Azure Resource Id that represents the endpoint of
    -     the Service Bus Topic destination of an event subscription.
    -    :type resource_id: str
    +    :param key_name: Required. Key name to regenerate (key1 or key2).
    +    :type key_name: str
         """
     
         _validation = {
    -        'endpoint_type': {'required': True},
    +        'key_name': {'required': True},
         }
     
         _attribute_map = {
    -        'endpoint_type': {'key': 'endpointType', 'type': 'str'},
    -        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    +        'key_name': {'key': 'keyName', 'type': 'str'},
         }
     
    -    def __init__(self, *, resource_id: str=None, **kwargs) -> None:
    -        super(ServiceBusTopicEventSubscriptionDestination, self).__init__(**kwargs)
    -        self.resource_id = resource_id
    -        self.endpoint_type = 'ServiceBusTopic'
    -
    +    def __init__(self, *, key_name: str, **kwargs) -> None:
    +        super(PartnerNamespaceRegenerateKeyRequest, self).__init__(**kwargs)
    +        self.key_name = key_name
     
    -class StorageBlobDeadLetterDestination(DeadLetterDestination):
    -    """Information about the storage blob based dead letter destination.
     
    -    All required parameters must be populated in order to send to Azure.
    +class PartnerNamespaceSharedAccessKeys(Model):
    +    """Shared access keys of the partner namespace.
     
    -    :param endpoint_type: Required. Constant filled by server.
    -    :type endpoint_type: str
    -    :param resource_id: The Azure Resource ID of the storage account that is
    -     the destination of the deadletter events
    -    :type resource_id: str
    -    :param blob_container_name: The name of the Storage blob container that is
    -     the destination of the deadletter events
    -    :type blob_container_name: str
    +    :param key1: Shared access key1 for the partner namespace.
    +    :type key1: str
    +    :param key2: Shared access key2 for the partner namespace.
    +    :type key2: str
         """
     
    -    _validation = {
    -        'endpoint_type': {'required': True},
    -    }
    -
         _attribute_map = {
    -        'endpoint_type': {'key': 'endpointType', 'type': 'str'},
    -        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    -        'blob_container_name': {'key': 'properties.blobContainerName', 'type': 'str'},
    +        'key1': {'key': 'key1', 'type': 'str'},
    +        'key2': {'key': 'key2', 'type': 'str'},
         }
     
    -    def __init__(self, *, resource_id: str=None, blob_container_name: str=None, **kwargs) -> None:
    -        super(StorageBlobDeadLetterDestination, self).__init__(**kwargs)
    -        self.resource_id = resource_id
    -        self.blob_container_name = blob_container_name
    -        self.endpoint_type = 'StorageBlob'
    +    def __init__(self, *, key1: str=None, key2: str=None, **kwargs) -> None:
    +        super(PartnerNamespaceSharedAccessKeys, self).__init__(**kwargs)
    +        self.key1 = key1
    +        self.key2 = key2
     
     
    -class StorageQueueEventSubscriptionDestination(EventSubscriptionDestination):
    -    """Information about the storage queue destination for an event subscription.
    +class PartnerNamespaceUpdateParameters(Model):
    +    """Properties of the PartnerNamespace update.
    +
    +    :param tags: Tags of the partner namespace.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, tags=None, **kwargs) -> None:
    +        super(PartnerNamespaceUpdateParameters, self).__init__(**kwargs)
    +        self.tags = tags
    +
    +
    +class PartnerRegistration(TrackedResource):
    +    """Information about a partner registration.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param location: Required. Location of the resource.
    +    :type location: str
    +    :param tags: Tags of the resource.
    +    :type tags: dict[str, str]
    +    :ivar provisioning_state: Provisioning state of the partner registration.
    +     Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Canceled', 'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.eventgrid.models.PartnerRegistrationProvisioningState
    +    :param partner_name: Official name of the partner name. For example:
    +     "Contoso".
    +    :type partner_name: str
    +    :param partner_resource_type_name: Name of the partner resource type.
    +    :type partner_resource_type_name: str
    +    :param partner_resource_type_display_name: Display name of the partner
    +     resource type.
    +    :type partner_resource_type_display_name: str
    +    :param partner_resource_type_description: Description of the partner
    +     resource type.
    +    :type partner_resource_type_description: str
    +    :param setup_uri: URI of the partner website that can be used by Azure
    +     customers to setup Event Grid
    +     integration on an event source.
    +    :type setup_uri: str
    +    :param logo_uri: URI of the logo.
    +    :type logo_uri: str
    +    :param visibility_state: Visibility state of the partner registration.
    +     Possible values include: 'Hidden', 'PublicPreview', 'GenerallyAvailable'
    +    :type visibility_state: str or
    +     ~azure.mgmt.eventgrid.models.PartnerRegistrationVisibilityState
    +    :param authorized_azure_subscription_ids: List of Azure subscription Ids
    +     that are authorized to create a partner namespace
    +     associated with this partner registration. This is an optional property.
    +     Creating
    +     partner namespaces is always permitted under the same Azure subscription
    +     as the one used
    +     for creating the partner registration.
    +    :type authorized_azure_subscription_ids: list[str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +        'partner_name': {'key': 'properties.partnerName', 'type': 'str'},
    +        'partner_resource_type_name': {'key': 'properties.partnerResourceTypeName', 'type': 'str'},
    +        'partner_resource_type_display_name': {'key': 'properties.partnerResourceTypeDisplayName', 'type': 'str'},
    +        'partner_resource_type_description': {'key': 'properties.partnerResourceTypeDescription', 'type': 'str'},
    +        'setup_uri': {'key': 'properties.setupUri', 'type': 'str'},
    +        'logo_uri': {'key': 'properties.logoUri', 'type': 'str'},
    +        'visibility_state': {'key': 'properties.visibilityState', 'type': 'str'},
    +        'authorized_azure_subscription_ids': {'key': 'properties.authorizedAzureSubscriptionIds', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, *, location: str, tags=None, partner_name: str=None, partner_resource_type_name: str=None, partner_resource_type_display_name: str=None, partner_resource_type_description: str=None, setup_uri: str=None, logo_uri: str=None, visibility_state=None, authorized_azure_subscription_ids=None, **kwargs) -> None:
    +        super(PartnerRegistration, self).__init__(location=location, tags=tags, **kwargs)
    +        self.provisioning_state = None
    +        self.partner_name = partner_name
    +        self.partner_resource_type_name = partner_resource_type_name
    +        self.partner_resource_type_display_name = partner_resource_type_display_name
    +        self.partner_resource_type_description = partner_resource_type_description
    +        self.setup_uri = setup_uri
    +        self.logo_uri = logo_uri
    +        self.visibility_state = visibility_state
    +        self.authorized_azure_subscription_ids = authorized_azure_subscription_ids
    +
    +
    +class PartnerRegistrationEventTypesListResult(Model):
    +    """Result of the List Partner Registration Event Types operation.
    +
    +    :param value: A collection of partner registration event types.
    +    :type value: list[~azure.mgmt.eventgrid.models.EventType]
    +    :param next_link: A link for the next page of partner registration event
    +     types.
    +    :type next_link: str
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[EventType]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, value=None, next_link: str=None, **kwargs) -> None:
    +        super(PartnerRegistrationEventTypesListResult, self).__init__(**kwargs)
    +        self.value = value
    +        self.next_link = next_link
    +
    +
    +class PartnerRegistrationUpdateParameters(Model):
    +    """Properties of the Partner Registration update.
    +
    +    :param partner_topic_type_name: Name of the partner topic type.
    +    :type partner_topic_type_name: str
    +    :param partner_topic_type_display_name: Display name of the partner topic
    +     type.
    +    :type partner_topic_type_display_name: str
    +    :param partner_topic_type_description: Description of the partner topic
    +     type.
    +    :type partner_topic_type_description: str
    +    :param setup_uri: URI of the partner website that can be used by Azure
    +     customers to setup Event Grid
    +     integration on an event source.
    +    :type setup_uri: str
    +    :param logo_uri: URI of the partner logo.
    +    :type logo_uri: str
    +    :param authorized_azure_subscription_ids: List of IDs of Azure AD
    +     applications that are authorized to create a partner namespace
    +     associated with this partner registration. This is an optional property.
    +     Creating
    +     partner namespaces is always permitted under the same Azure subscription
    +     as the one used
    +     for creating the partner registration.
    +    :type authorized_azure_subscription_ids: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'partner_topic_type_name': {'key': 'partnerTopicTypeName', 'type': 'str'},
    +        'partner_topic_type_display_name': {'key': 'partnerTopicTypeDisplayName', 'type': 'str'},
    +        'partner_topic_type_description': {'key': 'partnerTopicTypeDescription', 'type': 'str'},
    +        'setup_uri': {'key': 'setupUri', 'type': 'str'},
    +        'logo_uri': {'key': 'logoUri', 'type': 'str'},
    +        'authorized_azure_subscription_ids': {'key': 'authorizedAzureSubscriptionIds', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, *, partner_topic_type_name: str=None, partner_topic_type_display_name: str=None, partner_topic_type_description: str=None, setup_uri: str=None, logo_uri: str=None, authorized_azure_subscription_ids=None, **kwargs) -> None:
    +        super(PartnerRegistrationUpdateParameters, self).__init__(**kwargs)
    +        self.partner_topic_type_name = partner_topic_type_name
    +        self.partner_topic_type_display_name = partner_topic_type_display_name
    +        self.partner_topic_type_description = partner_topic_type_description
    +        self.setup_uri = setup_uri
    +        self.logo_uri = logo_uri
    +        self.authorized_azure_subscription_ids = authorized_azure_subscription_ids
    +
    +
    +class PartnerTopic(TrackedResource):
    +    """EventGrid Partner Topic.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param location: Required. Location of the resource.
    +    :type location: str
    +    :param tags: Tags of the resource.
    +    :type tags: dict[str, str]
    +    :param source: Source associated with this partner topic. This represents
    +     a unique partner resource.
    +    :type source: str
    +    :ivar provisioning_state: Provisioning state of the partner topic.
    +     Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Canceled', 'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.eventgrid.models.PartnerTopicProvisioningState
    +    :param activation_state: Activation state of the partner topic. Possible
    +     values include: 'NeverActivated', 'Activated', 'Deactivated'
    +    :type activation_state: str or
    +     ~azure.mgmt.eventgrid.models.PartnerTopicActivationState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'source': {'key': 'properties.source', 'type': 'str'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +        'activation_state': {'key': 'properties.activationState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, location: str, tags=None, source: str=None, activation_state=None, **kwargs) -> None:
    +        super(PartnerTopic, self).__init__(location=location, tags=tags, **kwargs)
    +        self.source = source
    +        self.provisioning_state = None
    +        self.activation_state = activation_state
     
    -    All required parameters must be populated in order to send to Azure.
    +
    +class PartnerTopicType(Resource):
    +    """Properties of a partner topic type.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param partner_name: Official name of the partner.
    +    :type partner_name: str
    +    :param topic_type_name: Name of the partner topic type. This name should
    +     be unique among all partner topic types names.
    +    :type topic_type_name: str
    +    :param display_name: Display Name for the partner topic type.
    +    :type display_name: str
    +    :param description: Description of the partner topic type.
    +    :type description: str
    +    :param setup_uri: URI of the partner website that can be used by Azure
    +     customers to setup Event Grid
    +     integration on an event source.
    +    :type setup_uri: str
    +    :param authorization_state: Status of whether the customer has authorized
    +     a partner to create partner topics
    +     in the customer's subscription. Possible values include: 'NotApplicable',
    +     'NotAuthorized', 'Authorized'
    +    :type authorization_state: str or
    +     ~azure.mgmt.eventgrid.models.PartnerTopicTypeAuthorizationState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'partner_name': {'key': 'properties.partnerName', 'type': 'str'},
    +        'topic_type_name': {'key': 'properties.topicTypeName', 'type': 'str'},
    +        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    +        'description': {'key': 'properties.description', 'type': 'str'},
    +        'setup_uri': {'key': 'properties.setupUri', 'type': 'str'},
    +        'authorization_state': {'key': 'properties.authorizationState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, partner_name: str=None, topic_type_name: str=None, display_name: str=None, description: str=None, setup_uri: str=None, authorization_state=None, **kwargs) -> None:
    +        super(PartnerTopicType, self).__init__(**kwargs)
    +        self.partner_name = partner_name
    +        self.topic_type_name = topic_type_name
    +        self.display_name = display_name
    +        self.description = description
    +        self.setup_uri = setup_uri
    +        self.authorization_state = authorization_state
    +
    +
    +class PartnerTopicTypesListResult(Model):
    +    """Result of the List Partner Topic Types operation.
    +
    +    :param value: A collection of partner topic types.
    +    :type value: list[~azure.mgmt.eventgrid.models.PartnerTopicType]
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[PartnerTopicType]'},
    +    }
    +
    +    def __init__(self, *, value=None, **kwargs) -> None:
    +        super(PartnerTopicTypesListResult, self).__init__(**kwargs)
    +        self.value = value
    +
    +
    +class PartnerTopicUpdateParameters(Model):
    +    """Properties of the Partner Topic update.
    +
    +    :param tags: Tags of the partner topic.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, tags=None, **kwargs) -> None:
    +        super(PartnerTopicUpdateParameters, self).__init__(**kwargs)
    +        self.tags = tags
    +
    +
    +class PrivateEndpoint(Model):
    +    """PrivateEndpoint information.
    +
    +    :param id: The ARM identifier for Private Endpoint.
    +    :type id: str
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, id: str=None, **kwargs) -> None:
    +        super(PrivateEndpoint, self).__init__(**kwargs)
    +        self.id = id
    +
    +
    +class PrivateEndpointConnection(Resource):
    +    """PrivateEndpointConnection resource information.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param private_endpoint: The Private Endpoint resource for this
    +     Connection.
    +    :type private_endpoint: ~azure.mgmt.eventgrid.models.PrivateEndpoint
    +    :param group_ids: GroupIds from the private link service resource.
    +    :type group_ids: list[str]
    +    :param private_link_service_connection_state: Details about the state of
    +     the connection.
    +    :type private_link_service_connection_state:
    +     ~azure.mgmt.eventgrid.models.ConnectionState
    +    :param provisioning_state: Provisioning state of the Private Endpoint
    +     Connection. Possible values include: 'Creating', 'Updating', 'Deleting',
    +     'Succeeded', 'Canceled', 'Failed'
    +    :type provisioning_state: str or
    +     ~azure.mgmt.eventgrid.models.ResourceProvisioningState
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'private_endpoint': {'key': 'properties.privateEndpoint', 'type': 'PrivateEndpoint'},
    +        'group_ids': {'key': 'properties.groupIds', 'type': '[str]'},
    +        'private_link_service_connection_state': {'key': 'properties.privateLinkServiceConnectionState', 'type': 'ConnectionState'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, private_endpoint=None, group_ids=None, private_link_service_connection_state=None, provisioning_state=None, **kwargs) -> None:
    +        super(PrivateEndpointConnection, self).__init__(**kwargs)
    +        self.private_endpoint = private_endpoint
    +        self.group_ids = group_ids
    +        self.private_link_service_connection_state = private_link_service_connection_state
    +        self.provisioning_state = provisioning_state
    +
    +
    +class PrivateLinkResource(Model):
    +    """Information of the private link resource.
    +
    +    :param group_id:
    +    :type group_id: str
    +    :param display_name:
    +    :type display_name: str
    +    :param required_members:
    +    :type required_members: list[str]
    +    :param required_zone_names:
    +    :type required_zone_names: list[str]
    +    :param id: Fully qualified identifier of the resource.
    +    :type id: str
    +    :param name: Name of the resource
    +    :type name: str
    +    :param type: Type of the resource
    +    :type type: str
    +    """
    +
    +    _attribute_map = {
    +        'group_id': {'key': 'properties.groupId', 'type': 'str'},
    +        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    +        'required_members': {'key': 'properties.requiredMembers', 'type': '[str]'},
    +        'required_zone_names': {'key': 'properties.requiredZoneNames', 'type': '[str]'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, group_id: str=None, display_name: str=None, required_members=None, required_zone_names=None, id: str=None, name: str=None, type: str=None, **kwargs) -> None:
    +        super(PrivateLinkResource, self).__init__(**kwargs)
    +        self.group_id = group_id
    +        self.display_name = display_name
    +        self.required_members = required_members
    +        self.required_zone_names = required_zone_names
    +        self.id = id
    +        self.name = name
    +        self.type = type
    +
    +
    +class ResourceSku(Model):
    +    """Describes an EventGrid Resource Sku.
    +
    +    :param name: the Sku name of the resource.
    +     the possible values: Basic; Premium. Possible values include: 'Basic',
    +     'Premium'
    +    :type name: str or ~azure.mgmt.eventgrid.models.Sku
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, name=None, **kwargs) -> None:
    +        super(ResourceSku, self).__init__(**kwargs)
    +        self.name = name
    +
    +
    +class RetryPolicy(Model):
    +    """Information about the retry policy for an event subscription.
    +
    +    :param max_delivery_attempts: Maximum number of delivery retry attempts
    +     for events.
    +    :type max_delivery_attempts: int
    +    :param event_time_to_live_in_minutes: Time To Live (in minutes) for
    +     events.
    +    :type event_time_to_live_in_minutes: int
    +    """
    +
    +    _attribute_map = {
    +        'max_delivery_attempts': {'key': 'maxDeliveryAttempts', 'type': 'int'},
    +        'event_time_to_live_in_minutes': {'key': 'eventTimeToLiveInMinutes', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, max_delivery_attempts: int=None, event_time_to_live_in_minutes: int=None, **kwargs) -> None:
    +        super(RetryPolicy, self).__init__(**kwargs)
    +        self.max_delivery_attempts = max_delivery_attempts
    +        self.event_time_to_live_in_minutes = event_time_to_live_in_minutes
    +
    +
    +class ServiceBusQueueEventSubscriptionDestination(EventSubscriptionDestination):
    +    """Information about the service bus destination for an event subscription.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param endpoint_type: Required. Constant filled by server.
    +    :type endpoint_type: str
    +    :param resource_id: The Azure Resource Id that represents the endpoint of
    +     the Service Bus destination of an event subscription.
    +    :type resource_id: str
    +    """
    +
    +    _validation = {
    +        'endpoint_type': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'endpoint_type': {'key': 'endpointType', 'type': 'str'},
    +        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, resource_id: str=None, **kwargs) -> None:
    +        super(ServiceBusQueueEventSubscriptionDestination, self).__init__(**kwargs)
    +        self.resource_id = resource_id
    +        self.endpoint_type = 'ServiceBusQueue'
    +
    +
    +class ServiceBusTopicEventSubscriptionDestination(EventSubscriptionDestination):
    +    """Information about the service bus topic destination for an event
    +    subscription.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param endpoint_type: Required. Constant filled by server.
    +    :type endpoint_type: str
    +    :param resource_id: The Azure Resource Id that represents the endpoint of
    +     the Service Bus Topic destination of an event subscription.
    +    :type resource_id: str
    +    """
    +
    +    _validation = {
    +        'endpoint_type': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'endpoint_type': {'key': 'endpointType', 'type': 'str'},
    +        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, resource_id: str=None, **kwargs) -> None:
    +        super(ServiceBusTopicEventSubscriptionDestination, self).__init__(**kwargs)
    +        self.resource_id = resource_id
    +        self.endpoint_type = 'ServiceBusTopic'
    +
    +
    +class SkuDefinitionsForResourceType(Model):
    +    """Describes an EventGrid Resource Sku Definition.
    +
    +    :param resource_type: The Resource Type applicable for the Sku.
    +    :type resource_type: str
    +    :param skus: The Sku pricing tiers for the resource type.
    +    :type skus: list[~azure.mgmt.eventgrid.models.ResourceSku]
    +    """
    +
    +    _attribute_map = {
    +        'resource_type': {'key': 'resourceType', 'type': 'str'},
    +        'skus': {'key': 'skus', 'type': '[ResourceSku]'},
    +    }
    +
    +    def __init__(self, *, resource_type: str=None, skus=None, **kwargs) -> None:
    +        super(SkuDefinitionsForResourceType, self).__init__(**kwargs)
    +        self.resource_type = resource_type
    +        self.skus = skus
    +
    +
    +class SkuDefinitionsForResourceTypeListResult(Model):
    +    """List collection of Sku Definitions for each Resource Type.
    +
    +    :param value: A collection of Sku Definitions for each Resource Type.
    +    :type value:
    +     list[~azure.mgmt.eventgrid.models.SkuDefinitionsForResourceType]
    +    :param next_link: A link for the next page of Sku Definitions.
    +    :type next_link: str
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SkuDefinitionsForResourceType]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, value=None, next_link: str=None, **kwargs) -> None:
    +        super(SkuDefinitionsForResourceTypeListResult, self).__init__(**kwargs)
    +        self.value = value
    +        self.next_link = next_link
    +
    +
    +class StorageBlobDeadLetterDestination(DeadLetterDestination):
    +    """Information about the storage blob based dead letter destination.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param endpoint_type: Required. Constant filled by server.
    +    :type endpoint_type: str
    +    :param resource_id: The Azure Resource ID of the storage account that is
    +     the destination of the deadletter events
    +    :type resource_id: str
    +    :param blob_container_name: The name of the Storage blob container that is
    +     the destination of the deadletter events
    +    :type blob_container_name: str
    +    """
    +
    +    _validation = {
    +        'endpoint_type': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'endpoint_type': {'key': 'endpointType', 'type': 'str'},
    +        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    +        'blob_container_name': {'key': 'properties.blobContainerName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, resource_id: str=None, blob_container_name: str=None, **kwargs) -> None:
    +        super(StorageBlobDeadLetterDestination, self).__init__(**kwargs)
    +        self.resource_id = resource_id
    +        self.blob_container_name = blob_container_name
    +        self.endpoint_type = 'StorageBlob'
    +
    +
    +class StorageQueueEventSubscriptionDestination(EventSubscriptionDestination):
    +    """Information about the storage queue destination for an event subscription.
    +
    +    All required parameters must be populated in order to send to Azure.
     
         :param endpoint_type: Required. Constant filled by server.
         :type endpoint_type: str
    @@ -1432,6 +2377,82 @@ def __init__(self, *, key: str=None, values=None, **kwargs) -> None:
             self.operator_type = 'StringNotIn'
     
     
    +class SystemTopic(TrackedResource):
    +    """EventGrid System Topic.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: Fully qualified identifier of the resource.
    +    :vartype id: str
    +    :ivar name: Name of the resource
    +    :vartype name: str
    +    :ivar type: Type of the resource
    +    :vartype type: str
    +    :param location: Required. Location of the resource.
    +    :type location: str
    +    :param tags: Tags of the resource.
    +    :type tags: dict[str, str]
    +    :ivar provisioning_state: Provisioning state of the system topic. Possible
    +     values include: 'Creating', 'Updating', 'Deleting', 'Succeeded',
    +     'Canceled', 'Failed'
    +    :vartype provisioning_state: str or
    +     ~azure.mgmt.eventgrid.models.ResourceProvisioningState
    +    :param source: Source for the system topic.
    +    :type source: str
    +    :param topic_type: TopicType for the system topic.
    +    :type topic_type: str
    +    :ivar metric_resource_id: Metric resource id for the system topic.
    +    :vartype metric_resource_id: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'provisioning_state': {'readonly': True},
    +        'metric_resource_id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
    +        'source': {'key': 'properties.source', 'type': 'str'},
    +        'topic_type': {'key': 'properties.topicType', 'type': 'str'},
    +        'metric_resource_id': {'key': 'properties.metricResourceId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, location: str, tags=None, source: str=None, topic_type: str=None, **kwargs) -> None:
    +        super(SystemTopic, self).__init__(location=location, tags=tags, **kwargs)
    +        self.provisioning_state = None
    +        self.source = source
    +        self.topic_type = topic_type
    +        self.metric_resource_id = None
    +
    +
    +class SystemTopicUpdateParameters(Model):
    +    """Properties of the System Topic update.
    +
    +    :param tags: Tags of the system topic.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, tags=None, **kwargs) -> None:
    +        super(SystemTopicUpdateParameters, self).__init__(**kwargs)
    +        self.tags = tags
    +
    +
     class Topic(TrackedResource):
         """EventGrid Topic.
     
    @@ -1450,6 +2471,9 @@ class Topic(TrackedResource):
         :type location: str
         :param tags: Tags of the resource.
         :type tags: dict[str, str]
    +    :param private_endpoint_connections: List of private endpoint connections.
    +    :type private_endpoint_connections:
    +     list[~azure.mgmt.eventgrid.models.PrivateEndpointConnection]
         :ivar provisioning_state: Provisioning state of the topic. Possible values
          include: 'Creating', 'Updating', 'Deleting', 'Succeeded', 'Canceled',
          'Failed'
    @@ -1470,13 +2494,21 @@ class Topic(TrackedResource):
          ~azure.mgmt.eventgrid.models.InputSchemaMapping
         :ivar metric_resource_id: Metric resource id for the topic.
         :vartype metric_resource_id: str
    -    :param allow_traffic_from_all_ips: This determines if IP filtering rules
    -     ought to be evaluated or not. By default it will not evaluate and will
    -     allow traffic from all IPs.
    -    :type allow_traffic_from_all_ips: bool
    -    :param inbound_ip_rules: This determines the IP filtering rules that ought
    -     to be applied when events are received on this topic.
    +    :param public_network_access: This determines if traffic is allowed over
    +     public network. By default it is enabled.
    +     You can further restrict to specific IPs by configuring . Possible values include: 'Enabled', 'Disabled'
    +    :type public_network_access: str or
    +     ~azure.mgmt.eventgrid.models.PublicNetworkAccess
    +    :param inbound_ip_rules: This can be used to restrict traffic from
    +     specific IPs instead of all IPs. Note: These are considered only if
    +     PublicNetworkAccess is enabled.
         :type inbound_ip_rules: list[~azure.mgmt.eventgrid.models.InboundIpRule]
    +    :param sku: The Sku pricing tier for the topic.
    +    :type sku: ~azure.mgmt.eventgrid.models.ResourceSku
    +    :param identity: Identity information for the resource.
    +    :type identity: ~azure.mgmt.eventgrid.models.IdentityInfo
         """
     
         _validation = {
    @@ -1495,24 +2527,30 @@ class Topic(TrackedResource):
             'type': {'key': 'type', 'type': 'str'},
             'location': {'key': 'location', 'type': 'str'},
             'tags': {'key': 'tags', 'type': '{str}'},
    +        'private_endpoint_connections': {'key': 'properties.privateEndpointConnections', 'type': '[PrivateEndpointConnection]'},
             'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
             'endpoint': {'key': 'properties.endpoint', 'type': 'str'},
             'input_schema': {'key': 'properties.inputSchema', 'type': 'str'},
             'input_schema_mapping': {'key': 'properties.inputSchemaMapping', 'type': 'InputSchemaMapping'},
             'metric_resource_id': {'key': 'properties.metricResourceId', 'type': 'str'},
    -        'allow_traffic_from_all_ips': {'key': 'properties.allowTrafficFromAllIPs', 'type': 'bool'},
    +        'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'},
             'inbound_ip_rules': {'key': 'properties.inboundIpRules', 'type': '[InboundIpRule]'},
    +        'sku': {'key': 'sku', 'type': 'ResourceSku'},
    +        'identity': {'key': 'identity', 'type': 'IdentityInfo'},
         }
     
    -    def __init__(self, *, location: str, tags=None, input_schema="EventGridSchema", input_schema_mapping=None, allow_traffic_from_all_ips: bool=None, inbound_ip_rules=None, **kwargs) -> None:
    +    def __init__(self, *, location: str, tags=None, private_endpoint_connections=None, input_schema="EventGridSchema", input_schema_mapping=None, public_network_access=None, inbound_ip_rules=None, sku=None, identity=None, **kwargs) -> None:
             super(Topic, self).__init__(location=location, tags=tags, **kwargs)
    +        self.private_endpoint_connections = private_endpoint_connections
             self.provisioning_state = None
             self.endpoint = None
             self.input_schema = input_schema
             self.input_schema_mapping = input_schema_mapping
             self.metric_resource_id = None
    -        self.allow_traffic_from_all_ips = allow_traffic_from_all_ips
    +        self.public_network_access = public_network_access
             self.inbound_ip_rules = inbound_ip_rules
    +        self.sku = sku
    +        self.identity = identity
     
     
     class TopicRegenerateKeyRequest(Model):
    @@ -1626,26 +2664,58 @@ class TopicUpdateParameters(Model):
     
         :param tags: Tags of the resource.
         :type tags: dict[str, str]
    -    :param allow_traffic_from_all_ips: This determines if IP filtering rules
    -     ought to be evaluated or not. By default it will not evaluate and will
    -     allow traffic from all IPs.
    -    :type allow_traffic_from_all_ips: bool
    -    :param inbound_ip_rules: This determines the IP filtering rules that ought
    -     be applied when events are received on this domain.
    +    :param identity: Resource identity information.
    +    :type identity: ~azure.mgmt.eventgrid.models.IdentityInfo
    +    :param public_network_access: This determines if traffic is allowed over
    +     public network. By default it is enabled.
    +     You can further restrict to specific IPs by configuring . Possible values include: 'Enabled', 'Disabled'
    +    :type public_network_access: str or
    +     ~azure.mgmt.eventgrid.models.PublicNetworkAccess
    +    :param inbound_ip_rules: This can be used to restrict traffic from
    +     specific IPs instead of all IPs. Note: These are considered only if
    +     PublicNetworkAccess is enabled.
         :type inbound_ip_rules: list[~azure.mgmt.eventgrid.models.InboundIpRule]
    +    :param sku: The Sku pricing tier for the topic.
    +    :type sku: ~azure.mgmt.eventgrid.models.ResourceSku
         """
     
         _attribute_map = {
             'tags': {'key': 'tags', 'type': '{str}'},
    -        'allow_traffic_from_all_ips': {'key': 'allowTrafficFromAllIPs', 'type': 'bool'},
    -        'inbound_ip_rules': {'key': 'inboundIpRules', 'type': '[InboundIpRule]'},
    +        'identity': {'key': 'identity', 'type': 'IdentityInfo'},
    +        'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'},
    +        'inbound_ip_rules': {'key': 'properties.inboundIpRules', 'type': '[InboundIpRule]'},
    +        'sku': {'key': 'sku', 'type': 'ResourceSku'},
         }
     
    -    def __init__(self, *, tags=None, allow_traffic_from_all_ips: bool=None, inbound_ip_rules=None, **kwargs) -> None:
    +    def __init__(self, *, tags=None, identity=None, public_network_access=None, inbound_ip_rules=None, sku=None, **kwargs) -> None:
             super(TopicUpdateParameters, self).__init__(**kwargs)
             self.tags = tags
    -        self.allow_traffic_from_all_ips = allow_traffic_from_all_ips
    +        self.identity = identity
    +        self.public_network_access = public_network_access
             self.inbound_ip_rules = inbound_ip_rules
    +        self.sku = sku
    +
    +
    +class UserIdentityProperties(Model):
    +    """The information about the user identity.
    +
    +    :param principal_id: The principal id of user assigned identity.
    +    :type principal_id: str
    +    :param client_id: The client id of user assigned identity.
    +    :type client_id: str
    +    """
    +
    +    _attribute_map = {
    +        'principal_id': {'key': 'principalId', 'type': 'str'},
    +        'client_id': {'key': 'clientId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, principal_id: str=None, client_id: str=None, **kwargs) -> None:
    +        super(UserIdentityProperties, self).__init__(**kwargs)
    +        self.principal_id = principal_id
    +        self.client_id = client_id
     
     
     class WebHookEventSubscriptionDestination(EventSubscriptionDestination):
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_paged_models.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_paged_models.py
    index 51d07add2ef3..20d75dc4b167 100644
    --- a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_paged_models.py
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/models/_paged_models.py
    @@ -38,6 +38,19 @@ class DomainTopicPaged(Paged):
         def __init__(self, *args, **kwargs):
     
             super(DomainTopicPaged, self).__init__(*args, **kwargs)
    +class EventChannelPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`EventChannel ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[EventChannel]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(EventChannelPaged, self).__init__(*args, **kwargs)
     class EventSubscriptionPaged(Paged):
         """
         A paging container for iterating over a list of :class:`EventSubscription ` object
    @@ -64,6 +77,84 @@ class OperationPaged(Paged):
         def __init__(self, *args, **kwargs):
     
             super(OperationPaged, self).__init__(*args, **kwargs)
    +class PartnerNamespacePaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`PartnerNamespace ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[PartnerNamespace]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(PartnerNamespacePaged, self).__init__(*args, **kwargs)
    +class PartnerRegistrationPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`PartnerRegistration ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[PartnerRegistration]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(PartnerRegistrationPaged, self).__init__(*args, **kwargs)
    +class PartnerTopicPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`PartnerTopic ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[PartnerTopic]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(PartnerTopicPaged, self).__init__(*args, **kwargs)
    +class PrivateEndpointConnectionPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`PrivateEndpointConnection ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[PrivateEndpointConnection]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(PrivateEndpointConnectionPaged, self).__init__(*args, **kwargs)
    +class PrivateLinkResourcePaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`PrivateLinkResource ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[PrivateLinkResource]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(PrivateLinkResourcePaged, self).__init__(*args, **kwargs)
    +class SystemTopicPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`SystemTopic ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[SystemTopic]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(SystemTopicPaged, self).__init__(*args, **kwargs)
     class TopicPaged(Paged):
         """
         A paging container for iterating over a list of :class:`Topic ` object
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/__init__.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/__init__.py
    index fae2cb13aafd..6a4607f4a8ba 100644
    --- a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/__init__.py
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/__init__.py
    @@ -11,16 +11,36 @@
     
     from ._domains_operations import DomainsOperations
     from ._domain_topics_operations import DomainTopicsOperations
    +from ._event_channels_operations import EventChannelsOperations
     from ._event_subscriptions_operations import EventSubscriptionsOperations
    +from ._system_topic_event_subscriptions_operations import SystemTopicEventSubscriptionsOperations
    +from ._partner_topic_event_subscriptions_operations import PartnerTopicEventSubscriptionsOperations
     from ._operations import Operations
    +from ._partner_namespaces_operations import PartnerNamespacesOperations
    +from ._partner_registrations_operations import PartnerRegistrationsOperations
    +from ._partner_topics_operations import PartnerTopicsOperations
    +from ._private_endpoint_connections_operations import PrivateEndpointConnectionsOperations
    +from ._private_link_resources_operations import PrivateLinkResourcesOperations
    +from ._system_topics_operations import SystemTopicsOperations
     from ._topics_operations import TopicsOperations
    +from ._extension_topics_operations import ExtensionTopicsOperations
     from ._topic_types_operations import TopicTypesOperations
     
     __all__ = [
         'DomainsOperations',
         'DomainTopicsOperations',
    +    'EventChannelsOperations',
         'EventSubscriptionsOperations',
    +    'SystemTopicEventSubscriptionsOperations',
    +    'PartnerTopicEventSubscriptionsOperations',
         'Operations',
    +    'PartnerNamespacesOperations',
    +    'PartnerRegistrationsOperations',
    +    'PartnerTopicsOperations',
    +    'PrivateEndpointConnectionsOperations',
    +    'PrivateLinkResourcesOperations',
    +    'SystemTopicsOperations',
         'TopicsOperations',
    +    'ExtensionTopicsOperations',
         'TopicTypesOperations',
     ]
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_domains_operations.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_domains_operations.py
    index 47cfdd92a297..0b21e61ec836 100644
    --- a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_domains_operations.py
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_domains_operations.py
    @@ -325,7 +325,7 @@ def _update_initial(
             request = self._client.patch(url, query_parameters, header_parameters, body_content)
             response = self._client.send(request, stream=False, **operation_config)
     
    -        if response.status_code not in [201]:
    +        if response.status_code not in [200, 201]:
                 exp = CloudError(response)
                 exp.request_id = response.headers.get('x-ms-request-id')
                 raise exp
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_event_channels_operations.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_event_channels_operations.py
    new file mode 100644
    index 000000000000..25f10bb4882d
    --- /dev/null
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_event_channels_operations.py
    @@ -0,0 +1,333 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
    +
    +from .. import models
    +
    +
    +class EventChannelsOperations(object):
    +    """EventChannelsOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: Version of the API to be used with the client request. Constant value: "2020-04-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2020-04-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, partner_namespace_name, event_channel_name, custom_headers=None, raw=False, **operation_config):
    +        """Get an event channel.
    +
    +        Get properties of an event channel.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_namespace_name: Name of the partner namespace.
    +        :type partner_namespace_name: str
    +        :param event_channel_name: Name of the event channel.
    +        :type event_channel_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EventChannel or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.EventChannel or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerNamespaceName': self._serialize.url("partner_namespace_name", partner_namespace_name, 'str'),
    +            'eventChannelName': self._serialize.url("event_channel_name", event_channel_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EventChannel', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerNamespaces/{partnerNamespaceName}/eventChannels/{eventChannelName}'}
    +
    +    def create_or_update(
    +            self, resource_group_name, partner_namespace_name, event_channel_name, event_channel_info, custom_headers=None, raw=False, **operation_config):
    +        """Create an event channel.
    +
    +        Asynchronously creates a new event channel with the specified
    +        parameters.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_namespace_name: Name of the partner namespace.
    +        :type partner_namespace_name: str
    +        :param event_channel_name: Name of the event channel.
    +        :type event_channel_name: str
    +        :param event_channel_info: EventChannel information.
    +        :type event_channel_info: ~azure.mgmt.eventgrid.models.EventChannel
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EventChannel or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.EventChannel or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerNamespaceName': self._serialize.url("partner_namespace_name", partner_namespace_name, 'str'),
    +            'eventChannelName': self._serialize.url("event_channel_name", event_channel_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(event_channel_info, 'EventChannel')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EventChannel', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerNamespaces/{partnerNamespaceName}/eventChannels/{eventChannelName}'}
    +
    +    def delete(
    +            self, resource_group_name, partner_namespace_name, event_channel_name, custom_headers=None, raw=False, **operation_config):
    +        """Delete an event channel.
    +
    +        Delete existing event channel.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_namespace_name: Name of the partner namespace.
    +        :type partner_namespace_name: str
    +        :param event_channel_name: Name of the event channel.
    +        :type event_channel_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: None or ClientRawResponse if raw=true
    +        :rtype: None or ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerNamespaceName': self._serialize.url("partner_namespace_name", partner_namespace_name, 'str'),
    +            'eventChannelName': self._serialize.url("event_channel_name", event_channel_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202, 204]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerNamespaces/{partnerNamespaceName}/eventChannels/{eventChannelName}'}
    +
    +    def list_by_partner_namespace(
    +            self, resource_group_name, partner_namespace_name, filter=None, top=None, custom_headers=None, raw=False, **operation_config):
    +        """List event channels.
    +
    +        List all the event channels in a partner namespace.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_namespace_name: Name of the partner namespace.
    +        :type partner_namespace_name: str
    +        :param filter: The query used to filter the search results using OData
    +         syntax. Filtering is permitted on the 'name' property only and with
    +         limited number of OData operations. These operations are: the
    +         'contains' function as well as the following logical operations: not,
    +         and, or, eq (for equal), and ne (for not equal). No arithmetic
    +         operations are supported. The following is a valid filter example:
    +         $filter=contains(namE, 'PATTERN') and name ne 'PATTERN-1'. The
    +         following is not a valid filter example: $filter=location eq 'westus'.
    +        :type filter: str
    +        :param top: The number of results to return per page for the list
    +         operation. Valid range for top parameter is 1 to 100. If not
    +         specified, the default number of results to be returned is 20 items
    +         per page.
    +        :type top: int
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of EventChannel
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.EventChannelPaged[~azure.mgmt.eventgrid.models.EventChannel]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_partner_namespace.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'partnerNamespaceName': self._serialize.url("partner_namespace_name", partner_namespace_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +                if filter is not None:
    +                    query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +                if top is not None:
    +                    query_parameters['$top'] = self._serialize.query("top", top, 'int')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.EventChannelPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_partner_namespace.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerNamespaces/{partnerNamespaceName}/eventChannels'}
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_extension_topics_operations.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_extension_topics_operations.py
    new file mode 100644
    index 000000000000..1187598fafbb
    --- /dev/null
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_extension_topics_operations.py
    @@ -0,0 +1,106 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
    +
    +from .. import models
    +
    +
    +class ExtensionTopicsOperations(object):
    +    """ExtensionTopicsOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: Version of the API to be used with the client request. Constant value: "2020-04-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2020-04-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, scope, custom_headers=None, raw=False, **operation_config):
    +        """Get properties of an extension topic.
    +
    +        Get the properties of an extension topic.
    +
    +        :param scope: The identifier of the resource to which extension topic
    +         is queried. The scope can be a subscription, or a resource group, or a
    +         top level resource belonging to a resource provider namespace. For
    +         example, use '/subscriptions/{subscriptionId}/' for a subscription,
    +         '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'
    +         for a resource group, and
    +         '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}'
    +         for Azure resource.
    +        :type scope: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: ExtensionTopic or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.ExtensionTopic or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'scope': self._serialize.url("scope", scope, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ExtensionTopic', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/{scope}/providers/Microsoft.EventGrid/extensionTopics/default'}
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_partner_namespaces_operations.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_partner_namespaces_operations.py
    new file mode 100644
    index 000000000000..4195f26749c5
    --- /dev/null
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_partner_namespaces_operations.py
    @@ -0,0 +1,713 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class PartnerNamespacesOperations(object):
    +    """PartnerNamespacesOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: Version of the API to be used with the client request. Constant value: "2020-04-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2020-04-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, partner_namespace_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a partner namespace.
    +
    +        Get properties of a partner namespace.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_namespace_name: Name of the partner namespace.
    +        :type partner_namespace_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: PartnerNamespace or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.PartnerNamespace or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerNamespaceName': self._serialize.url("partner_namespace_name", partner_namespace_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PartnerNamespace', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerNamespaces/{partnerNamespaceName}'}
    +
    +
    +    def _create_or_update_initial(
    +            self, resource_group_name, partner_namespace_name, partner_namespace_info, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerNamespaceName': self._serialize.url("partner_namespace_name", partner_namespace_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(partner_namespace_info, 'PartnerNamespace')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [201]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('PartnerNamespace', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def create_or_update(
    +            self, resource_group_name, partner_namespace_name, partner_namespace_info, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Create a partner namespace.
    +
    +        Asynchronously creates a new partner namespace with the specified
    +        parameters.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_namespace_name: Name of the partner namespace.
    +        :type partner_namespace_name: str
    +        :param partner_namespace_info: PartnerNamespace information.
    +        :type partner_namespace_info:
    +         ~azure.mgmt.eventgrid.models.PartnerNamespace
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns PartnerNamespace or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.eventgrid.models.PartnerNamespace]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.eventgrid.models.PartnerNamespace]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._create_or_update_initial(
    +            resource_group_name=resource_group_name,
    +            partner_namespace_name=partner_namespace_name,
    +            partner_namespace_info=partner_namespace_info,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('PartnerNamespace', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerNamespaces/{partnerNamespaceName}'}
    +
    +
    +    def _delete_initial(
    +            self, resource_group_name, partner_namespace_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerNamespaceName': self._serialize.url("partner_namespace_name", partner_namespace_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [202, 204]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +
    +    def delete(
    +            self, resource_group_name, partner_namespace_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Delete a partner namespace.
    +
    +        Delete existing partner namespace.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_namespace_name: Name of the partner namespace.
    +        :type partner_namespace_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns None or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._delete_initial(
    +            resource_group_name=resource_group_name,
    +            partner_namespace_name=partner_namespace_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            if raw:
    +                client_raw_response = ClientRawResponse(None, response)
    +                return client_raw_response
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerNamespaces/{partnerNamespaceName}'}
    +
    +
    +    def _update_initial(
    +            self, resource_group_name, partner_namespace_name, tags=None, custom_headers=None, raw=False, **operation_config):
    +        partner_namespace_update_parameters = models.PartnerNamespaceUpdateParameters(tags=tags)
    +
    +        # Construct URL
    +        url = self.update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerNamespaceName': self._serialize.url("partner_namespace_name", partner_namespace_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(partner_namespace_update_parameters, 'PartnerNamespaceUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('PartnerNamespace', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def update(
    +            self, resource_group_name, partner_namespace_name, tags=None, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Update a partner namespace.
    +
    +        Asynchronously updates a partner namespace with the specified
    +        parameters.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_namespace_name: Name of the partner namespace.
    +        :type partner_namespace_name: str
    +        :param tags: Tags of the partner namespace.
    +        :type tags: dict[str, str]
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns PartnerNamespace or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.eventgrid.models.PartnerNamespace]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.eventgrid.models.PartnerNamespace]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._update_initial(
    +            resource_group_name=resource_group_name,
    +            partner_namespace_name=partner_namespace_name,
    +            tags=tags,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('PartnerNamespace', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerNamespaces/{partnerNamespaceName}'}
    +
    +    def list_by_subscription(
    +            self, filter=None, top=None, custom_headers=None, raw=False, **operation_config):
    +        """List partner namespaces under an Azure subscription.
    +
    +        List all the partner namespaces under an Azure subscription.
    +
    +        :param filter: The query used to filter the search results using OData
    +         syntax. Filtering is permitted on the 'name' property only and with
    +         limited number of OData operations. These operations are: the
    +         'contains' function as well as the following logical operations: not,
    +         and, or, eq (for equal), and ne (for not equal). No arithmetic
    +         operations are supported. The following is a valid filter example:
    +         $filter=contains(namE, 'PATTERN') and name ne 'PATTERN-1'. The
    +         following is not a valid filter example: $filter=location eq 'westus'.
    +        :type filter: str
    +        :param top: The number of results to return per page for the list
    +         operation. Valid range for top parameter is 1 to 100. If not
    +         specified, the default number of results to be returned is 20 items
    +         per page.
    +        :type top: int
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of PartnerNamespace
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.PartnerNamespacePaged[~azure.mgmt.eventgrid.models.PartnerNamespace]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_subscription.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +                if filter is not None:
    +                    query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +                if top is not None:
    +                    query_parameters['$top'] = self._serialize.query("top", top, 'int')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.PartnerNamespacePaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.EventGrid/partnerNamespaces'}
    +
    +    def list_by_resource_group(
    +            self, resource_group_name, filter=None, top=None, custom_headers=None, raw=False, **operation_config):
    +        """List partner namespaces under a resource group.
    +
    +        List all the partner namespaces under a resource group.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param filter: The query used to filter the search results using OData
    +         syntax. Filtering is permitted on the 'name' property only and with
    +         limited number of OData operations. These operations are: the
    +         'contains' function as well as the following logical operations: not,
    +         and, or, eq (for equal), and ne (for not equal). No arithmetic
    +         operations are supported. The following is a valid filter example:
    +         $filter=contains(namE, 'PATTERN') and name ne 'PATTERN-1'. The
    +         following is not a valid filter example: $filter=location eq 'westus'.
    +        :type filter: str
    +        :param top: The number of results to return per page for the list
    +         operation. Valid range for top parameter is 1 to 100. If not
    +         specified, the default number of results to be returned is 20 items
    +         per page.
    +        :type top: int
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of PartnerNamespace
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.PartnerNamespacePaged[~azure.mgmt.eventgrid.models.PartnerNamespace]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_resource_group.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +                if filter is not None:
    +                    query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +                if top is not None:
    +                    query_parameters['$top'] = self._serialize.query("top", top, 'int')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.PartnerNamespacePaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerNamespaces'}
    +
    +    def list_shared_access_keys(
    +            self, resource_group_name, partner_namespace_name, custom_headers=None, raw=False, **operation_config):
    +        """List keys for a partner namespace.
    +
    +        List the two keys used to publish to a partner namespace.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_namespace_name: Name of the partner namespace.
    +        :type partner_namespace_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: PartnerNamespaceSharedAccessKeys or ClientRawResponse if
    +         raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.PartnerNamespaceSharedAccessKeys
    +         or ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.list_shared_access_keys.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerNamespaceName': self._serialize.url("partner_namespace_name", partner_namespace_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PartnerNamespaceSharedAccessKeys', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    list_shared_access_keys.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerNamespaces/{partnerNamespaceName}/listKeys'}
    +
    +    def regenerate_key(
    +            self, resource_group_name, partner_namespace_name, key_name, custom_headers=None, raw=False, **operation_config):
    +        """Regenerate key for a partner namespace.
    +
    +        Regenerate a shared access key for a partner namespace.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_namespace_name: Name of the partner namespace.
    +        :type partner_namespace_name: str
    +        :param key_name: Key name to regenerate (key1 or key2).
    +        :type key_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: PartnerNamespaceSharedAccessKeys or ClientRawResponse if
    +         raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.PartnerNamespaceSharedAccessKeys
    +         or ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        regenerate_key_request = models.PartnerNamespaceRegenerateKeyRequest(key_name=key_name)
    +
    +        # Construct URL
    +        url = self.regenerate_key.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerNamespaceName': self._serialize.url("partner_namespace_name", partner_namespace_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(regenerate_key_request, 'PartnerNamespaceRegenerateKeyRequest')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PartnerNamespaceSharedAccessKeys', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    regenerate_key.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerNamespaces/{partnerNamespaceName}/regenerateKey'}
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_partner_registrations_operations.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_partner_registrations_operations.py
    new file mode 100644
    index 000000000000..9bd6e57dfd24
    --- /dev/null
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_partner_registrations_operations.py
    @@ -0,0 +1,545 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
    +
    +from .. import models
    +
    +
    +class PartnerRegistrationsOperations(object):
    +    """PartnerRegistrationsOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: Version of the API to be used with the client request. Constant value: "2020-04-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2020-04-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, partner_registration_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a partner registration.
    +
    +        Gets a partner registration with the specified parameters.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_registration_name: Name of the partner registration.
    +        :type partner_registration_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: PartnerRegistration or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.PartnerRegistration or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerRegistrationName': self._serialize.url("partner_registration_name", partner_registration_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PartnerRegistration', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerRegistrations/{partnerRegistrationName}'}
    +
    +    def create_or_update(
    +            self, resource_group_name, partner_registration_name, partner_registration_info, custom_headers=None, raw=False, **operation_config):
    +        """Create a partner registration.
    +
    +        Creates a new partner registration with the specified parameters.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_registration_name: Name of the partner registration.
    +        :type partner_registration_name: str
    +        :param partner_registration_info: PartnerRegistration information.
    +        :type partner_registration_info:
    +         ~azure.mgmt.eventgrid.models.PartnerRegistration
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: PartnerRegistration or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.PartnerRegistration or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerRegistrationName': self._serialize.url("partner_registration_name", partner_registration_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(partner_registration_info, 'PartnerRegistration')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PartnerRegistration', response)
    +        if response.status_code == 202:
    +            deserialized = self._deserialize('PartnerRegistration', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerRegistrations/{partnerRegistrationName}'}
    +
    +    def delete(
    +            self, resource_group_name, partner_registration_name, custom_headers=None, raw=False, **operation_config):
    +        """Delete a partner registration.
    +
    +        Deletes a partner registration with the specified parameters.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_registration_name: Name of the partner registration.
    +        :type partner_registration_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: None or ClientRawResponse if raw=true
    +        :rtype: None or ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerRegistrationName': self._serialize.url("partner_registration_name", partner_registration_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202, 204]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerRegistrations/{partnerRegistrationName}'}
    +
    +    def update(
    +            self, resource_group_name, partner_registration_name, partner_registration_update_parameters, custom_headers=None, raw=False, **operation_config):
    +        """Update a partner registration.
    +
    +        Updates a partner registration with the specified parameters.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_registration_name: Name of the partner registration.
    +        :type partner_registration_name: str
    +        :param partner_registration_update_parameters: Partner registration
    +         update information.
    +        :type partner_registration_update_parameters:
    +         ~azure.mgmt.eventgrid.models.PartnerRegistrationUpdateParameters
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: PartnerRegistration or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.PartnerRegistration or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerRegistrationName': self._serialize.url("partner_registration_name", partner_registration_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(partner_registration_update_parameters, 'PartnerRegistrationUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('PartnerRegistration', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerRegistrations/{partnerRegistrationName}'}
    +
    +    def list_by_subscription(
    +            self, filter=None, top=None, custom_headers=None, raw=False, **operation_config):
    +        """List partner registrations under an Azure subscription.
    +
    +        List all the partner registrations under an Azure subscription.
    +
    +        :param filter: The query used to filter the search results using OData
    +         syntax. Filtering is permitted on the 'name' property only and with
    +         limited number of OData operations. These operations are: the
    +         'contains' function as well as the following logical operations: not,
    +         and, or, eq (for equal), and ne (for not equal). No arithmetic
    +         operations are supported. The following is a valid filter example:
    +         $filter=contains(namE, 'PATTERN') and name ne 'PATTERN-1'. The
    +         following is not a valid filter example: $filter=location eq 'westus'.
    +        :type filter: str
    +        :param top: The number of results to return per page for the list
    +         operation. Valid range for top parameter is 1 to 100. If not
    +         specified, the default number of results to be returned is 20 items
    +         per page.
    +        :type top: int
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of PartnerRegistration
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.PartnerRegistrationPaged[~azure.mgmt.eventgrid.models.PartnerRegistration]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_subscription.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +                if filter is not None:
    +                    query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +                if top is not None:
    +                    query_parameters['$top'] = self._serialize.query("top", top, 'int')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.PartnerRegistrationPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.EventGrid/partnerRegistrations'}
    +
    +    def list_by_resource_group(
    +            self, resource_group_name, filter=None, top=None, custom_headers=None, raw=False, **operation_config):
    +        """List partner registrations under a resource group.
    +
    +        List all the partner registrations under a resource group.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param filter: The query used to filter the search results using OData
    +         syntax. Filtering is permitted on the 'name' property only and with
    +         limited number of OData operations. These operations are: the
    +         'contains' function as well as the following logical operations: not,
    +         and, or, eq (for equal), and ne (for not equal). No arithmetic
    +         operations are supported. The following is a valid filter example:
    +         $filter=contains(namE, 'PATTERN') and name ne 'PATTERN-1'. The
    +         following is not a valid filter example: $filter=location eq 'westus'.
    +        :type filter: str
    +        :param top: The number of results to return per page for the list
    +         operation. Valid range for top parameter is 1 to 100. If not
    +         specified, the default number of results to be returned is 20 items
    +         per page.
    +        :type top: int
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of PartnerRegistration
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.PartnerRegistrationPaged[~azure.mgmt.eventgrid.models.PartnerRegistration]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_resource_group.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +                if filter is not None:
    +                    query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +                if top is not None:
    +                    query_parameters['$top'] = self._serialize.query("top", top, 'int')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.PartnerRegistrationPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerRegistrations'}
    +
    +    def list(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """List all available partners registrations.
    +
    +        List all partners registrations.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of PartnerRegistration
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.PartnerRegistrationPaged[~azure.mgmt.eventgrid.models.PartnerRegistration]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list.metadata['url']
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.PartnerRegistrationPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list.metadata = {'url': '/providers/Microsoft.EventGrid/partnerRegistrations'}
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_partner_topic_event_subscriptions_operations.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_partner_topic_event_subscriptions_operations.py
    new file mode 100644
    index 000000000000..678c1fef122a
    --- /dev/null
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_partner_topic_event_subscriptions_operations.py
    @@ -0,0 +1,567 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class PartnerTopicEventSubscriptionsOperations(object):
    +    """PartnerTopicEventSubscriptionsOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: Version of the API to be used with the client request. Constant value: "2020-04-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2020-04-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, partner_topic_name, event_subscription_name, custom_headers=None, raw=False, **operation_config):
    +        """Get an event subscription of a partner topic.
    +
    +        Get an event subscription of a partner topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_topic_name: Name of the partner topic.
    +        :type partner_topic_name: str
    +        :param event_subscription_name: Name of the event subscription to be
    +         found. Event subscription names must be between 3 and 100 characters
    +         in length and use alphanumeric letters only.
    +        :type event_subscription_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EventSubscription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.EventSubscription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerTopicName': self._serialize.url("partner_topic_name", partner_topic_name, 'str'),
    +            'eventSubscriptionName': self._serialize.url("event_subscription_name", event_subscription_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EventSubscription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerTopics/{partnerTopicName}/eventSubscriptions/{eventSubscriptionName}'}
    +
    +
    +    def _create_or_update_initial(
    +            self, resource_group_name, partner_topic_name, event_subscription_name, event_subscription_info, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerTopicName': self._serialize.url("partner_topic_name", partner_topic_name, 'str'),
    +            'eventSubscriptionName': self._serialize.url("event_subscription_name", event_subscription_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(event_subscription_info, 'EventSubscription')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [201]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('EventSubscription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def create_or_update(
    +            self, resource_group_name, partner_topic_name, event_subscription_name, event_subscription_info, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Create or update an event subscription of a partner topic.
    +
    +        Asynchronously creates or updates an event subscription of a partner
    +        topic with the specified parameters. Existing event subscriptions will
    +        be updated with this API.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_topic_name: Name of the partner topic.
    +        :type partner_topic_name: str
    +        :param event_subscription_name: Name of the event subscription to be
    +         created. Event subscription names must be between 3 and 100 characters
    +         in length and use alphanumeric letters only.
    +        :type event_subscription_name: str
    +        :param event_subscription_info: Event subscription properties
    +         containing the destination and filter information.
    +        :type event_subscription_info:
    +         ~azure.mgmt.eventgrid.models.EventSubscription
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns EventSubscription or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.eventgrid.models.EventSubscription]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.eventgrid.models.EventSubscription]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._create_or_update_initial(
    +            resource_group_name=resource_group_name,
    +            partner_topic_name=partner_topic_name,
    +            event_subscription_name=event_subscription_name,
    +            event_subscription_info=event_subscription_info,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('EventSubscription', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerTopics/{partnerTopicName}/eventSubscriptions/{eventSubscriptionName}'}
    +
    +
    +    def _delete_initial(
    +            self, resource_group_name, partner_topic_name, event_subscription_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerTopicName': self._serialize.url("partner_topic_name", partner_topic_name, 'str'),
    +            'eventSubscriptionName': self._serialize.url("event_subscription_name", event_subscription_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [202, 204]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +
    +    def delete(
    +            self, resource_group_name, partner_topic_name, event_subscription_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Delete an event subscription of a partner topic.
    +
    +        Delete an event subscription of a partner topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_topic_name: Name of the partner topic.
    +        :type partner_topic_name: str
    +        :param event_subscription_name: Name of the event subscription to be
    +         created. Event subscription names must be between 3 and 100 characters
    +         in length and use alphanumeric letters only.
    +        :type event_subscription_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns None or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._delete_initial(
    +            resource_group_name=resource_group_name,
    +            partner_topic_name=partner_topic_name,
    +            event_subscription_name=event_subscription_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            if raw:
    +                client_raw_response = ClientRawResponse(None, response)
    +                return client_raw_response
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerTopics/{partnerTopicName}/eventSubscriptions/{eventSubscriptionName}'}
    +
    +
    +    def _update_initial(
    +            self, resource_group_name, partner_topic_name, event_subscription_name, event_subscription_update_parameters, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerTopicName': self._serialize.url("partner_topic_name", partner_topic_name, 'str'),
    +            'eventSubscriptionName': self._serialize.url("event_subscription_name", event_subscription_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(event_subscription_update_parameters, 'EventSubscriptionUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [201]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('EventSubscription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def update(
    +            self, resource_group_name, partner_topic_name, event_subscription_name, event_subscription_update_parameters, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Update event subscription of a partner topic.
    +
    +        Update event subscription of a partner topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_topic_name: Name of the partner topic.
    +        :type partner_topic_name: str
    +        :param event_subscription_name: Name of the event subscription to be
    +         created. Event subscription names must be between 3 and 100 characters
    +         in length and use alphanumeric letters only.
    +        :type event_subscription_name: str
    +        :param event_subscription_update_parameters: Updated event
    +         subscription information.
    +        :type event_subscription_update_parameters:
    +         ~azure.mgmt.eventgrid.models.EventSubscriptionUpdateParameters
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns EventSubscription or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.eventgrid.models.EventSubscription]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.eventgrid.models.EventSubscription]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._update_initial(
    +            resource_group_name=resource_group_name,
    +            partner_topic_name=partner_topic_name,
    +            event_subscription_name=event_subscription_name,
    +            event_subscription_update_parameters=event_subscription_update_parameters,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('EventSubscription', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerTopics/{partnerTopicName}/eventSubscriptions/{eventSubscriptionName}'}
    +
    +    def get_full_url(
    +            self, resource_group_name, partner_topic_name, event_subscription_name, custom_headers=None, raw=False, **operation_config):
    +        """Get full URL of an event subscription of a partner topic.
    +
    +        Get the full endpoint URL for an event subscription of a partner topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_topic_name: Name of the partner topic.
    +        :type partner_topic_name: str
    +        :param event_subscription_name: Name of the event subscription to be
    +         created. Event subscription names must be between 3 and 100 characters
    +         in length and use alphanumeric letters only.
    +        :type event_subscription_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EventSubscriptionFullUrl or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.EventSubscriptionFullUrl or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.get_full_url.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerTopicName': self._serialize.url("partner_topic_name", partner_topic_name, 'str'),
    +            'eventSubscriptionName': self._serialize.url("event_subscription_name", event_subscription_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EventSubscriptionFullUrl', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_full_url.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerTopics/{partnerTopicName}/eventSubscriptions/{eventSubscriptionName}/getFullUrl'}
    +
    +    def list_by_partner_topic(
    +            self, resource_group_name, partner_topic_name, custom_headers=None, raw=False, **operation_config):
    +        """List event subscriptions of a partner topic.
    +
    +        List event subscriptions that belong to a specific partner topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_topic_name: Name of the partner topic.
    +        :type partner_topic_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of EventSubscription
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.EventSubscriptionPaged[~azure.mgmt.eventgrid.models.EventSubscription]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_partner_topic.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'partnerTopicName': self._serialize.url("partner_topic_name", partner_topic_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.EventSubscriptionPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_partner_topic.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerTopics/{partnerTopicName}/eventSubscriptions'}
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_partner_topics_operations.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_partner_topics_operations.py
    new file mode 100644
    index 000000000000..763b8d9bdce2
    --- /dev/null
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_partner_topics_operations.py
    @@ -0,0 +1,564 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class PartnerTopicsOperations(object):
    +    """PartnerTopicsOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: Version of the API to be used with the client request. Constant value: "2020-04-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2020-04-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, partner_topic_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a partner topic.
    +
    +        Get properties of a partner topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_topic_name: Name of the partner topic.
    +        :type partner_topic_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: PartnerTopic or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.PartnerTopic or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerTopicName': self._serialize.url("partner_topic_name", partner_topic_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PartnerTopic', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerTopics/{partnerTopicName}'}
    +
    +
    +    def _delete_initial(
    +            self, resource_group_name, partner_topic_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerTopicName': self._serialize.url("partner_topic_name", partner_topic_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202, 204]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +
    +    def delete(
    +            self, resource_group_name, partner_topic_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Delete a partner topic.
    +
    +        Delete existing partner topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_topic_name: Name of the partner topic.
    +        :type partner_topic_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns None or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._delete_initial(
    +            resource_group_name=resource_group_name,
    +            partner_topic_name=partner_topic_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            if raw:
    +                client_raw_response = ClientRawResponse(None, response)
    +                return client_raw_response
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerTopics/{partnerTopicName}'}
    +
    +    def update(
    +            self, resource_group_name, partner_topic_name, tags=None, custom_headers=None, raw=False, **operation_config):
    +        """Update a partner topic.
    +
    +        Asynchronously updates a partner topic with the specified parameters.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_topic_name: Name of the partner topic.
    +        :type partner_topic_name: str
    +        :param tags: Tags of the partner topic.
    +        :type tags: dict[str, str]
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: PartnerTopic or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.PartnerTopic or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        partner_topic_update_parameters = models.PartnerTopicUpdateParameters(tags=tags)
    +
    +        # Construct URL
    +        url = self.update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerTopicName': self._serialize.url("partner_topic_name", partner_topic_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(partner_topic_update_parameters, 'PartnerTopicUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('PartnerTopic', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerTopics/{partnerTopicName}'}
    +
    +    def list_by_subscription(
    +            self, filter=None, top=None, custom_headers=None, raw=False, **operation_config):
    +        """List partner topics under an Azure subscription.
    +
    +        List all the partner topics under an Azure subscription.
    +
    +        :param filter: The query used to filter the search results using OData
    +         syntax. Filtering is permitted on the 'name' property only and with
    +         limited number of OData operations. These operations are: the
    +         'contains' function as well as the following logical operations: not,
    +         and, or, eq (for equal), and ne (for not equal). No arithmetic
    +         operations are supported. The following is a valid filter example:
    +         $filter=contains(namE, 'PATTERN') and name ne 'PATTERN-1'. The
    +         following is not a valid filter example: $filter=location eq 'westus'.
    +        :type filter: str
    +        :param top: The number of results to return per page for the list
    +         operation. Valid range for top parameter is 1 to 100. If not
    +         specified, the default number of results to be returned is 20 items
    +         per page.
    +        :type top: int
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of PartnerTopic
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.PartnerTopicPaged[~azure.mgmt.eventgrid.models.PartnerTopic]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_subscription.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +                if filter is not None:
    +                    query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +                if top is not None:
    +                    query_parameters['$top'] = self._serialize.query("top", top, 'int')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.PartnerTopicPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.EventGrid/partnerTopics'}
    +
    +    def list_by_resource_group(
    +            self, resource_group_name, filter=None, top=None, custom_headers=None, raw=False, **operation_config):
    +        """List partner topics under a resource group.
    +
    +        List all the partner topics under a resource group.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param filter: The query used to filter the search results using OData
    +         syntax. Filtering is permitted on the 'name' property only and with
    +         limited number of OData operations. These operations are: the
    +         'contains' function as well as the following logical operations: not,
    +         and, or, eq (for equal), and ne (for not equal). No arithmetic
    +         operations are supported. The following is a valid filter example:
    +         $filter=contains(namE, 'PATTERN') and name ne 'PATTERN-1'. The
    +         following is not a valid filter example: $filter=location eq 'westus'.
    +        :type filter: str
    +        :param top: The number of results to return per page for the list
    +         operation. Valid range for top parameter is 1 to 100. If not
    +         specified, the default number of results to be returned is 20 items
    +         per page.
    +        :type top: int
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of PartnerTopic
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.PartnerTopicPaged[~azure.mgmt.eventgrid.models.PartnerTopic]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_resource_group.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +                if filter is not None:
    +                    query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +                if top is not None:
    +                    query_parameters['$top'] = self._serialize.query("top", top, 'int')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.PartnerTopicPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerTopics'}
    +
    +    def activate(
    +            self, resource_group_name, partner_topic_name, custom_headers=None, raw=False, **operation_config):
    +        """Activate a partner topic.
    +
    +        Activate a newly created partner topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_topic_name: Name of the partner topic.
    +        :type partner_topic_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: PartnerTopic or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.PartnerTopic or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.activate.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerTopicName': self._serialize.url("partner_topic_name", partner_topic_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PartnerTopic', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    activate.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerTopics/{partnerTopicName}/activate'}
    +
    +    def deactivate(
    +            self, resource_group_name, partner_topic_name, custom_headers=None, raw=False, **operation_config):
    +        """Deactivate a partner topic.
    +
    +        Deactivate specific partner topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param partner_topic_name: Name of the partner topic.
    +        :type partner_topic_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: PartnerTopic or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.PartnerTopic or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.deactivate.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'partnerTopicName': self._serialize.url("partner_topic_name", partner_topic_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PartnerTopic', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    deactivate.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerTopics/{partnerTopicName}/deactivate'}
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_private_endpoint_connections_operations.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_private_endpoint_connections_operations.py
    new file mode 100644
    index 000000000000..6aa90da3bc5f
    --- /dev/null
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_private_endpoint_connections_operations.py
    @@ -0,0 +1,416 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class PrivateEndpointConnectionsOperations(object):
    +    """PrivateEndpointConnectionsOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: Version of the API to be used with the client request. Constant value: "2020-04-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2020-04-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, parent_type, parent_name, private_endpoint_connection_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a specific private endpoint connection.
    +
    +        Get a specific private endpoint connection under a topic or domain.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param parent_type: The type of the parent resource. This can be
    +         either \\'topics\\' or \\'domains\\'.
    +        :type parent_type: str
    +        :param parent_name: The name of the parent resource (namely, either,
    +         the topic name or domain name).
    +        :type parent_name: str
    +        :param private_endpoint_connection_name: The name of the private
    +         endpoint connection connection.
    +        :type private_endpoint_connection_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: PrivateEndpointConnection or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.PrivateEndpointConnection or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'parentType': self._serialize.url("parent_type", parent_type, 'str'),
    +            'parentName': self._serialize.url("parent_name", parent_name, 'str'),
    +            'privateEndpointConnectionName': self._serialize.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PrivateEndpointConnection', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/{parentType}/{parentName}/privateEndpointConnections/{privateEndpointConnectionName}'}
    +
    +
    +    def _update_initial(
    +            self, resource_group_name, parent_type, parent_name, private_endpoint_connection_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'parentType': self._serialize.url("parent_type", parent_type, 'str'),
    +            'parentName': self._serialize.url("parent_name", parent_name, 'str'),
    +            'privateEndpointConnectionName': self._serialize.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PrivateEndpointConnection', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('PrivateEndpointConnection', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def update(
    +            self, resource_group_name, parent_type, parent_name, private_endpoint_connection_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Update a specific private endpoint connection.
    +
    +        Update a specific private endpoint connection under a topic or domain.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param parent_type: The type of the parent resource. This can be
    +         either \\'topics\\' or \\'domains\\'.
    +        :type parent_type: str
    +        :param parent_name: The name of the parent resource (namely, either,
    +         the topic name or domain name).
    +        :type parent_name: str
    +        :param private_endpoint_connection_name: The name of the private
    +         endpoint connection connection.
    +        :type private_endpoint_connection_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns
    +         PrivateEndpointConnection or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.eventgrid.models.PrivateEndpointConnection]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.eventgrid.models.PrivateEndpointConnection]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._update_initial(
    +            resource_group_name=resource_group_name,
    +            parent_type=parent_type,
    +            parent_name=parent_name,
    +            private_endpoint_connection_name=private_endpoint_connection_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('PrivateEndpointConnection', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/{parentType}/{parentName}/privateEndpointConnections/{privateEndpointConnectionName}'}
    +
    +
    +    def _delete_initial(
    +            self, resource_group_name, parent_type, parent_name, private_endpoint_connection_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'parentType': self._serialize.url("parent_type", parent_type, 'str'),
    +            'parentName': self._serialize.url("parent_name", parent_name, 'str'),
    +            'privateEndpointConnectionName': self._serialize.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [202, 204]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +
    +    def delete(
    +            self, resource_group_name, parent_type, parent_name, private_endpoint_connection_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Delete a specific private endpoint connection.
    +
    +        Delete a specific private endpoint connection under a topic or domain.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param parent_type: The type of the parent resource. This can be
    +         either \\'topics\\' or \\'domains\\'.
    +        :type parent_type: str
    +        :param parent_name: The name of the parent resource (namely, either,
    +         the topic name or domain name).
    +        :type parent_name: str
    +        :param private_endpoint_connection_name: The name of the private
    +         endpoint connection connection.
    +        :type private_endpoint_connection_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns None or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._delete_initial(
    +            resource_group_name=resource_group_name,
    +            parent_type=parent_type,
    +            parent_name=parent_name,
    +            private_endpoint_connection_name=private_endpoint_connection_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            if raw:
    +                client_raw_response = ClientRawResponse(None, response)
    +                return client_raw_response
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/{parentType}/{parentName}/privateEndpointConnections/{privateEndpointConnectionName}'}
    +
    +    def list_by_resource(
    +            self, resource_group_name, parent_type, parent_name, filter=None, top=None, custom_headers=None, raw=False, **operation_config):
    +        """Lists all private endpoint connections under a resource.
    +
    +        Get all private endpoint connections under a topic or domain.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param parent_type: The type of the parent resource. This can be
    +         either \\'topics\\' or \\'domains\\'.
    +        :type parent_type: str
    +        :param parent_name: The name of the parent resource (namely, either,
    +         the topic name or domain name).
    +        :type parent_name: str
    +        :param filter: The query used to filter the search results using OData
    +         syntax. Filtering is permitted on the 'name' property only and with
    +         limited number of OData operations. These operations are: the
    +         'contains' function as well as the following logical operations: not,
    +         and, or, eq (for equal), and ne (for not equal). No arithmetic
    +         operations are supported. The following is a valid filter example:
    +         $filter=contains(namE, 'PATTERN') and name ne 'PATTERN-1'. The
    +         following is not a valid filter example: $filter=location eq 'westus'.
    +        :type filter: str
    +        :param top: The number of results to return per page for the list
    +         operation. Valid range for top parameter is 1 to 100. If not
    +         specified, the default number of results to be returned is 20 items
    +         per page.
    +        :type top: int
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of PrivateEndpointConnection
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.PrivateEndpointConnectionPaged[~azure.mgmt.eventgrid.models.PrivateEndpointConnection]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_resource.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'parentType': self._serialize.url("parent_type", parent_type, 'str'),
    +                    'parentName': self._serialize.url("parent_name", parent_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +                if filter is not None:
    +                    query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +                if top is not None:
    +                    query_parameters['$top'] = self._serialize.query("top", top, 'int')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.PrivateEndpointConnectionPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_resource.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/{parentType}/{parentName}/privateEndpointConnections'}
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_private_link_resources_operations.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_private_link_resources_operations.py
    new file mode 100644
    index 000000000000..6500b3252ee9
    --- /dev/null
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_private_link_resources_operations.py
    @@ -0,0 +1,210 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
    +
    +from .. import models
    +
    +
    +class PrivateLinkResourcesOperations(object):
    +    """PrivateLinkResourcesOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: Version of the API to be used with the client request. Constant value: "2020-04-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2020-04-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, parent_type, parent_name, private_link_resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a private link resource.
    +
    +        Get properties of a private link resource.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param parent_type: The type of the parent resource. This can be
    +         either \\'topics\\' or \\'domains\\'.
    +        :type parent_type: str
    +        :param parent_name: The name of the parent resource (namely, either,
    +         the topic name or domain name).
    +        :type parent_name: str
    +        :param private_link_resource_name: The name of private link resource.
    +        :type private_link_resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: PrivateLinkResource or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.PrivateLinkResource or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'parentType': self._serialize.url("parent_type", parent_type, 'str'),
    +            'parentName': self._serialize.url("parent_name", parent_name, 'str'),
    +            'privateLinkResourceName': self._serialize.url("private_link_resource_name", private_link_resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PrivateLinkResource', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/{parentType}/{parentName}/privateLinkResources/{privateLinkResourceName}'}
    +
    +    def list_by_resource(
    +            self, resource_group_name, parent_type, parent_name, filter=None, top=None, custom_headers=None, raw=False, **operation_config):
    +        """List private link resources under specific topic or domain.
    +
    +        List all the private link resources under a topic or domain.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param parent_type: The type of the parent resource. This can be
    +         either \\'topics\\' or \\'domains\\'.
    +        :type parent_type: str
    +        :param parent_name: The name of the parent resource (namely, either,
    +         the topic name or domain name).
    +        :type parent_name: str
    +        :param filter: The query used to filter the search results using OData
    +         syntax. Filtering is permitted on the 'name' property only and with
    +         limited number of OData operations. These operations are: the
    +         'contains' function as well as the following logical operations: not,
    +         and, or, eq (for equal), and ne (for not equal). No arithmetic
    +         operations are supported. The following is a valid filter example:
    +         $filter=contains(namE, 'PATTERN') and name ne 'PATTERN-1'. The
    +         following is not a valid filter example: $filter=location eq 'westus'.
    +        :type filter: str
    +        :param top: The number of results to return per page for the list
    +         operation. Valid range for top parameter is 1 to 100. If not
    +         specified, the default number of results to be returned is 20 items
    +         per page.
    +        :type top: int
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of PrivateLinkResource
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.PrivateLinkResourcePaged[~azure.mgmt.eventgrid.models.PrivateLinkResource]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_resource.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'parentType': self._serialize.url("parent_type", parent_type, 'str'),
    +                    'parentName': self._serialize.url("parent_name", parent_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +                if filter is not None:
    +                    query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +                if top is not None:
    +                    query_parameters['$top'] = self._serialize.query("top", top, 'int')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.PrivateLinkResourcePaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_resource.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/{parentType}/{parentName}/privateLinkResources'}
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_system_topic_event_subscriptions_operations.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_system_topic_event_subscriptions_operations.py
    new file mode 100644
    index 000000000000..94eb74dd3bb6
    --- /dev/null
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_system_topic_event_subscriptions_operations.py
    @@ -0,0 +1,567 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class SystemTopicEventSubscriptionsOperations(object):
    +    """SystemTopicEventSubscriptionsOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: Version of the API to be used with the client request. Constant value: "2020-04-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2020-04-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, system_topic_name, event_subscription_name, custom_headers=None, raw=False, **operation_config):
    +        """Get an event subscription of a system topic.
    +
    +        Get an event subscription.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param system_topic_name: Name of the system topic.
    +        :type system_topic_name: str
    +        :param event_subscription_name: Name of the event subscription to be
    +         created. Event subscription names must be between 3 and 100 characters
    +         in length and use alphanumeric letters only.
    +        :type event_subscription_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EventSubscription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.EventSubscription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'systemTopicName': self._serialize.url("system_topic_name", system_topic_name, 'str'),
    +            'eventSubscriptionName': self._serialize.url("event_subscription_name", event_subscription_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EventSubscription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/systemTopics/{systemTopicName}/eventSubscriptions/{eventSubscriptionName}'}
    +
    +
    +    def _create_or_update_initial(
    +            self, resource_group_name, system_topic_name, event_subscription_name, event_subscription_info, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'systemTopicName': self._serialize.url("system_topic_name", system_topic_name, 'str'),
    +            'eventSubscriptionName': self._serialize.url("event_subscription_name", event_subscription_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(event_subscription_info, 'EventSubscription')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [201]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('EventSubscription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def create_or_update(
    +            self, resource_group_name, system_topic_name, event_subscription_name, event_subscription_info, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Create or update an event subscription for a system topic.
    +
    +        Asynchronously creates or updates an event subscription with the
    +        specified parameters. Existing event subscriptions will be updated with
    +        this API.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param system_topic_name: Name of the system topic.
    +        :type system_topic_name: str
    +        :param event_subscription_name: Name of the event subscription to be
    +         created. Event subscription names must be between 3 and 100 characters
    +         in length and use alphanumeric letters only.
    +        :type event_subscription_name: str
    +        :param event_subscription_info: Event subscription properties
    +         containing the destination and filter information.
    +        :type event_subscription_info:
    +         ~azure.mgmt.eventgrid.models.EventSubscription
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns EventSubscription or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.eventgrid.models.EventSubscription]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.eventgrid.models.EventSubscription]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._create_or_update_initial(
    +            resource_group_name=resource_group_name,
    +            system_topic_name=system_topic_name,
    +            event_subscription_name=event_subscription_name,
    +            event_subscription_info=event_subscription_info,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('EventSubscription', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/systemTopics/{systemTopicName}/eventSubscriptions/{eventSubscriptionName}'}
    +
    +
    +    def _delete_initial(
    +            self, resource_group_name, system_topic_name, event_subscription_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'systemTopicName': self._serialize.url("system_topic_name", system_topic_name, 'str'),
    +            'eventSubscriptionName': self._serialize.url("event_subscription_name", event_subscription_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [202, 204]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +
    +    def delete(
    +            self, resource_group_name, system_topic_name, event_subscription_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Delete an event subscription of a system topic.
    +
    +        Delete an event subscription of a system topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param system_topic_name: Name of the system topic.
    +        :type system_topic_name: str
    +        :param event_subscription_name: Name of the event subscription to be
    +         created. Event subscription names must be between 3 and 100 characters
    +         in length and use alphanumeric letters only.
    +        :type event_subscription_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns None or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._delete_initial(
    +            resource_group_name=resource_group_name,
    +            system_topic_name=system_topic_name,
    +            event_subscription_name=event_subscription_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            if raw:
    +                client_raw_response = ClientRawResponse(None, response)
    +                return client_raw_response
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/systemTopics/{systemTopicName}/eventSubscriptions/{eventSubscriptionName}'}
    +
    +
    +    def _update_initial(
    +            self, resource_group_name, system_topic_name, event_subscription_name, event_subscription_update_parameters, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'systemTopicName': self._serialize.url("system_topic_name", system_topic_name, 'str'),
    +            'eventSubscriptionName': self._serialize.url("event_subscription_name", event_subscription_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(event_subscription_update_parameters, 'EventSubscriptionUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [201]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('EventSubscription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def update(
    +            self, resource_group_name, system_topic_name, event_subscription_name, event_subscription_update_parameters, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Update event subscription of a system topic.
    +
    +        Update event subscription of a system topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param system_topic_name: Name of the system topic.
    +        :type system_topic_name: str
    +        :param event_subscription_name: Name of the event subscription to be
    +         created. Event subscription names must be between 3 and 100 characters
    +         in length and use alphanumeric letters only.
    +        :type event_subscription_name: str
    +        :param event_subscription_update_parameters: Updated event
    +         subscription information.
    +        :type event_subscription_update_parameters:
    +         ~azure.mgmt.eventgrid.models.EventSubscriptionUpdateParameters
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns EventSubscription or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.eventgrid.models.EventSubscription]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.eventgrid.models.EventSubscription]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._update_initial(
    +            resource_group_name=resource_group_name,
    +            system_topic_name=system_topic_name,
    +            event_subscription_name=event_subscription_name,
    +            event_subscription_update_parameters=event_subscription_update_parameters,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('EventSubscription', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/systemTopics/{systemTopicName}/eventSubscriptions/{eventSubscriptionName}'}
    +
    +    def get_full_url(
    +            self, resource_group_name, system_topic_name, event_subscription_name, custom_headers=None, raw=False, **operation_config):
    +        """Get full URL of an event subscription of a system topic.
    +
    +        Get the full endpoint URL for an event subscription of a system topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param system_topic_name: Name of the system topic.
    +        :type system_topic_name: str
    +        :param event_subscription_name: Name of the event subscription to be
    +         created. Event subscription names must be between 3 and 100 characters
    +         in length and use alphanumeric letters only.
    +        :type event_subscription_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EventSubscriptionFullUrl or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.EventSubscriptionFullUrl or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises: :class:`CloudError`
    +        """
    +        # Construct URL
    +        url = self.get_full_url.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'systemTopicName': self._serialize.url("system_topic_name", system_topic_name, 'str'),
    +            'eventSubscriptionName': self._serialize.url("event_subscription_name", event_subscription_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EventSubscriptionFullUrl', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_full_url.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/systemTopics/{systemTopicName}/eventSubscriptions/{eventSubscriptionName}/getFullUrl'}
    +
    +    def list_by_system_topic(
    +            self, resource_group_name, system_topic_name, custom_headers=None, raw=False, **operation_config):
    +        """List event subscriptions of a system topic.
    +
    +        List event subscriptions that belong to a specific system topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
    +        :type resource_group_name: str
    +        :param system_topic_name: Name of the system topic.
    +        :type system_topic_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of EventSubscription
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.EventSubscriptionPaged[~azure.mgmt.eventgrid.models.EventSubscription]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_system_topic.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'systemTopicName': self._serialize.url("system_topic_name", system_topic_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.EventSubscriptionPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_system_topic.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/systemTopics/{systemTopicName}/eventSubscriptions'}
    diff --git a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/_rerun_triggers_operations.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_system_topics_operations.py
    similarity index 50%
    rename from sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/_rerun_triggers_operations.py
    rename to sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_system_topics_operations.py
    index 6d5f8e9831de..1d9b4643522f 100644
    --- a/sdk/datafactory/azure-mgmt-datafactory/azure/mgmt/datafactory/operations/_rerun_triggers_operations.py
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_system_topics_operations.py
    @@ -18,8 +18,8 @@
     from .. import models
     
     
    -class RerunTriggersOperations(object):
    -    """RerunTriggersOperations operations.
    +class SystemTopicsOperations(object):
    +    """SystemTopicsOperations operations.
     
         You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
     
    @@ -27,7 +27,7 @@ class RerunTriggersOperations(object):
         :param config: Configuration of service client.
         :param serializer: An object model serializer.
         :param deserializer: An object model deserializer.
    -    :ivar api_version: The API version. Constant value: "2018-06-01".
    +    :ivar api_version: Version of the API to be used with the client request. Constant value: "2020-04-01-preview".
         """
     
         models = models
    @@ -37,44 +37,37 @@ def __init__(self, client, config, serializer, deserializer):
             self._client = client
             self._serialize = serializer
             self._deserialize = deserializer
    -        self.api_version = "2018-06-01"
    +        self.api_version = "2020-04-01-preview"
     
             self.config = config
     
    -    def create(
    -            self, resource_group_name, factory_name, trigger_name, rerun_trigger_name, rerun_tumbling_window_trigger_action_parameters, custom_headers=None, raw=False, **operation_config):
    -        """Creates a rerun trigger.
    +    def get(
    +            self, resource_group_name, system_topic_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a system topic.
     
    -        :param resource_group_name: The resource group name.
    +        Get properties of a system topic.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
             :type resource_group_name: str
    -        :param factory_name: The factory name.
    -        :type factory_name: str
    -        :param trigger_name: The trigger name.
    -        :type trigger_name: str
    -        :param rerun_trigger_name: The rerun trigger name.
    -        :type rerun_trigger_name: str
    -        :param rerun_tumbling_window_trigger_action_parameters: Rerun tumbling
    -         window trigger action parameters.
    -        :type rerun_tumbling_window_trigger_action_parameters:
    -         ~azure.mgmt.datafactory.models.RerunTumblingWindowTriggerActionParameters
    +        :param system_topic_name: Name of the system topic.
    +        :type system_topic_name: str
             :param dict custom_headers: headers that will be added to the request
             :param bool raw: returns the direct response alongside the
              deserialized response
             :param operation_config: :ref:`Operation configuration
              overrides`.
    -        :return: TriggerResource or ClientRawResponse if raw=true
    -        :rtype: ~azure.mgmt.datafactory.models.TriggerResource or
    +        :return: SystemTopic or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.eventgrid.models.SystemTopic or
              ~msrest.pipeline.ClientRawResponse
             :raises: :class:`CloudError`
             """
             # Construct URL
    -        url = self.create.metadata['url']
    +        url = self.get.metadata['url']
             path_format_arguments = {
                 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    -            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'),
    -            'factoryName': self._serialize.url("factory_name", factory_name, 'str', max_length=63, min_length=3, pattern=r'^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$'),
    -            'triggerName': self._serialize.url("trigger_name", trigger_name, 'str', max_length=260, min_length=1, pattern=r'^[A-Za-z0-9_][^<>*#.%&:\\+?/]*$'),
    -            'rerunTriggerName': self._serialize.url("rerun_trigger_name", rerun_trigger_name, 'str', max_length=260, min_length=1, pattern=r'^[A-Za-z0-9_][^<>*#.%&:\\+?/]*$')
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'systemTopicName': self._serialize.url("system_topic_name", system_topic_name, 'str')
             }
             url = self._client.format_url(url, **path_format_arguments)
     
    @@ -85,7 +78,6 @@ def create(
             # Construct headers
             header_parameters = {}
             header_parameters['Accept'] = 'application/json'
    -        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
             if self.config.generate_client_request_id:
                 header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
             if custom_headers:
    @@ -93,11 +85,8 @@ def create(
             if self.config.accept_language is not None:
                 header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
     
    -        # Construct body
    -        body_content = self._serialize.body(rerun_tumbling_window_trigger_action_parameters, 'RerunTumblingWindowTriggerActionParameters')
    -
             # Construct and send request
    -        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        request = self._client.get(url, query_parameters, header_parameters)
             response = self._client.send(request, stream=False, **operation_config)
     
             if response.status_code not in [200]:
    @@ -107,26 +96,24 @@ def create(
     
             deserialized = None
             if response.status_code == 200:
    -            deserialized = self._deserialize('TriggerResource', response)
    +            deserialized = self._deserialize('SystemTopic', response)
     
             if raw:
                 client_raw_response = ClientRawResponse(deserialized, response)
                 return client_raw_response
     
             return deserialized
    -    create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/triggers/{triggerName}/rerunTriggers/{rerunTriggerName}'}
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/systemTopics/{systemTopicName}'}
     
     
    -    def _start_initial(
    -            self, resource_group_name, factory_name, trigger_name, rerun_trigger_name, custom_headers=None, raw=False, **operation_config):
    +    def _create_or_update_initial(
    +            self, resource_group_name, system_topic_name, system_topic_info, custom_headers=None, raw=False, **operation_config):
             # Construct URL
    -        url = self.start.metadata['url']
    +        url = self.create_or_update.metadata['url']
             path_format_arguments = {
                 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    -            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'),
    -            'factoryName': self._serialize.url("factory_name", factory_name, 'str', max_length=63, min_length=3, pattern=r'^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$'),
    -            'triggerName': self._serialize.url("trigger_name", trigger_name, 'str', max_length=260, min_length=1, pattern=r'^[A-Za-z0-9_][^<>*#.%&:\\+?/]*$'),
    -            'rerunTriggerName': self._serialize.url("rerun_trigger_name", rerun_trigger_name, 'str', max_length=260, min_length=1, pattern=r'^[A-Za-z0-9_][^<>*#.%&:\\+?/]*$')
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'systemTopicName': self._serialize.url("system_topic_name", system_topic_name, 'str')
             }
             url = self._client.format_url(url, **path_format_arguments)
     
    @@ -136,6 +123,8 @@ def _start_initial(
     
             # Construct headers
             header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
             if self.config.generate_client_request_id:
                 header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
             if custom_headers:
    @@ -143,57 +132,76 @@ def _start_initial(
             if self.config.accept_language is not None:
                 header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
     
    +        # Construct body
    +        body_content = self._serialize.body(system_topic_info, 'SystemTopic')
    +
             # Construct and send request
    -        request = self._client.post(url, query_parameters, header_parameters)
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
             response = self._client.send(request, stream=False, **operation_config)
     
    -        if response.status_code not in [200]:
    +        if response.status_code not in [200, 201]:
                 exp = CloudError(response)
                 exp.request_id = response.headers.get('x-ms-request-id')
                 raise exp
     
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SystemTopic', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('SystemTopic', response)
    +
             if raw:
    -            client_raw_response = ClientRawResponse(None, response)
    +            client_raw_response = ClientRawResponse(deserialized, response)
                 return client_raw_response
     
    -    def start(
    -            self, resource_group_name, factory_name, trigger_name, rerun_trigger_name, custom_headers=None, raw=False, polling=True, **operation_config):
    -        """Starts a trigger.
    +        return deserialized
     
    -        :param resource_group_name: The resource group name.
    +    def create_or_update(
    +            self, resource_group_name, system_topic_name, system_topic_info, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Create a system topic.
    +
    +        Asynchronously creates a new system topic with the specified
    +        parameters.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
             :type resource_group_name: str
    -        :param factory_name: The factory name.
    -        :type factory_name: str
    -        :param trigger_name: The trigger name.
    -        :type trigger_name: str
    -        :param rerun_trigger_name: The rerun trigger name.
    -        :type rerun_trigger_name: str
    +        :param system_topic_name: Name of the system topic.
    +        :type system_topic_name: str
    +        :param system_topic_info: System Topic information.
    +        :type system_topic_info: ~azure.mgmt.eventgrid.models.SystemTopic
             :param dict custom_headers: headers that will be added to the request
             :param bool raw: The poller return type is ClientRawResponse, the
              direct response alongside the deserialized response
             :param polling: True for ARMPolling, False for no polling, or a
              polling object for personal polling strategy
    -        :return: An instance of LROPoller that returns None or
    -         ClientRawResponse if raw==True
    -        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    -         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :return: An instance of LROPoller that returns SystemTopic or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.eventgrid.models.SystemTopic]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.eventgrid.models.SystemTopic]]
             :raises: :class:`CloudError`
             """
    -        raw_result = self._start_initial(
    +        raw_result = self._create_or_update_initial(
                 resource_group_name=resource_group_name,
    -            factory_name=factory_name,
    -            trigger_name=trigger_name,
    -            rerun_trigger_name=rerun_trigger_name,
    +            system_topic_name=system_topic_name,
    +            system_topic_info=system_topic_info,
                 custom_headers=custom_headers,
                 raw=True,
                 **operation_config
             )
     
             def get_long_running_output(response):
    +            deserialized = self._deserialize('SystemTopic', response)
    +
                 if raw:
    -                client_raw_response = ClientRawResponse(None, response)
    +                client_raw_response = ClientRawResponse(deserialized, response)
                     return client_raw_response
     
    +            return deserialized
    +
             lro_delay = operation_config.get(
                 'long_running_operation_timeout',
                 self.config.long_running_operation_timeout)
    @@ -201,19 +209,17 @@ def get_long_running_output(response):
             elif polling is False: polling_method = NoPolling()
             else: polling_method = polling
             return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    -    start.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/triggers/{triggerName}/rerunTriggers/{rerunTriggerName}/start'}
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/systemTopics/{systemTopicName}'}
     
     
    -    def _stop_initial(
    -            self, resource_group_name, factory_name, trigger_name, rerun_trigger_name, custom_headers=None, raw=False, **operation_config):
    +    def _delete_initial(
    +            self, resource_group_name, system_topic_name, custom_headers=None, raw=False, **operation_config):
             # Construct URL
    -        url = self.stop.metadata['url']
    +        url = self.delete.metadata['url']
             path_format_arguments = {
                 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    -            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'),
    -            'factoryName': self._serialize.url("factory_name", factory_name, 'str', max_length=63, min_length=3, pattern=r'^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$'),
    -            'triggerName': self._serialize.url("trigger_name", trigger_name, 'str', max_length=260, min_length=1, pattern=r'^[A-Za-z0-9_][^<>*#.%&:\\+?/]*$'),
    -            'rerunTriggerName': self._serialize.url("rerun_trigger_name", rerun_trigger_name, 'str', max_length=260, min_length=1, pattern=r'^[A-Za-z0-9_][^<>*#.%&:\\+?/]*$')
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'systemTopicName': self._serialize.url("system_topic_name", system_topic_name, 'str')
             }
             url = self._client.format_url(url, **path_format_arguments)
     
    @@ -231,10 +237,10 @@ def _stop_initial(
                 header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
     
             # Construct and send request
    -        request = self._client.post(url, query_parameters, header_parameters)
    +        request = self._client.delete(url, query_parameters, header_parameters)
             response = self._client.send(request, stream=False, **operation_config)
     
    -        if response.status_code not in [200]:
    +        if response.status_code not in [202, 204]:
                 exp = CloudError(response)
                 exp.request_id = response.headers.get('x-ms-request-id')
                 raise exp
    @@ -243,18 +249,17 @@ def _stop_initial(
                 client_raw_response = ClientRawResponse(None, response)
                 return client_raw_response
     
    -    def stop(
    -            self, resource_group_name, factory_name, trigger_name, rerun_trigger_name, custom_headers=None, raw=False, polling=True, **operation_config):
    -        """Stops a trigger.
    +    def delete(
    +            self, resource_group_name, system_topic_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Delete a system topic.
    +
    +        Delete existing system topic.
     
    -        :param resource_group_name: The resource group name.
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
             :type resource_group_name: str
    -        :param factory_name: The factory name.
    -        :type factory_name: str
    -        :param trigger_name: The trigger name.
    -        :type trigger_name: str
    -        :param rerun_trigger_name: The rerun trigger name.
    -        :type rerun_trigger_name: str
    +        :param system_topic_name: Name of the system topic.
    +        :type system_topic_name: str
             :param dict custom_headers: headers that will be added to the request
             :param bool raw: The poller return type is ClientRawResponse, the
              direct response alongside the deserialized response
    @@ -266,11 +271,9 @@ def stop(
              ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
             :raises: :class:`CloudError`
             """
    -        raw_result = self._stop_initial(
    +        raw_result = self._delete_initial(
                 resource_group_name=resource_group_name,
    -            factory_name=factory_name,
    -            trigger_name=trigger_name,
    -            rerun_trigger_name=rerun_trigger_name,
    +            system_topic_name=system_topic_name,
                 custom_headers=custom_headers,
                 raw=True,
                 **operation_config
    @@ -288,19 +291,19 @@ def get_long_running_output(response):
             elif polling is False: polling_method = NoPolling()
             else: polling_method = polling
             return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    -    stop.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/triggers/{triggerName}/rerunTriggers/{rerunTriggerName}/stop'}
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/systemTopics/{systemTopicName}'}
     
     
    -    def _cancel_initial(
    -            self, resource_group_name, factory_name, trigger_name, rerun_trigger_name, custom_headers=None, raw=False, **operation_config):
    +    def _update_initial(
    +            self, resource_group_name, system_topic_name, tags=None, custom_headers=None, raw=False, **operation_config):
    +        system_topic_update_parameters = models.SystemTopicUpdateParameters(tags=tags)
    +
             # Construct URL
    -        url = self.cancel.metadata['url']
    +        url = self.update.metadata['url']
             path_format_arguments = {
                 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    -            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'),
    -            'factoryName': self._serialize.url("factory_name", factory_name, 'str', max_length=63, min_length=3, pattern=r'^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$'),
    -            'triggerName': self._serialize.url("trigger_name", trigger_name, 'str', max_length=260, min_length=1, pattern=r'^[A-Za-z0-9_][^<>*#.%&:\\+?/]*$'),
    -            'rerunTriggerName': self._serialize.url("rerun_trigger_name", rerun_trigger_name, 'str', max_length=260, min_length=1, pattern=r'^[A-Za-z0-9_][^<>*#.%&:\\+?/]*$')
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'systemTopicName': self._serialize.url("system_topic_name", system_topic_name, 'str')
             }
             url = self._client.format_url(url, **path_format_arguments)
     
    @@ -310,6 +313,8 @@ def _cancel_initial(
     
             # Construct headers
             header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
             if self.config.generate_client_request_id:
                 header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
             if custom_headers:
    @@ -317,57 +322,75 @@ def _cancel_initial(
             if self.config.accept_language is not None:
                 header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
     
    +        # Construct body
    +        body_content = self._serialize.body(system_topic_update_parameters, 'SystemTopicUpdateParameters')
    +
             # Construct and send request
    -        request = self._client.post(url, query_parameters, header_parameters)
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
             response = self._client.send(request, stream=False, **operation_config)
     
    -        if response.status_code not in [200]:
    +        if response.status_code not in [200, 201]:
                 exp = CloudError(response)
                 exp.request_id = response.headers.get('x-ms-request-id')
                 raise exp
     
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SystemTopic', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('SystemTopic', response)
    +
             if raw:
    -            client_raw_response = ClientRawResponse(None, response)
    +            client_raw_response = ClientRawResponse(deserialized, response)
                 return client_raw_response
     
    -    def cancel(
    -            self, resource_group_name, factory_name, trigger_name, rerun_trigger_name, custom_headers=None, raw=False, polling=True, **operation_config):
    -        """Cancels a trigger.
    +        return deserialized
    +
    +    def update(
    +            self, resource_group_name, system_topic_name, tags=None, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Update a system topic.
     
    -        :param resource_group_name: The resource group name.
    +        Asynchronously updates a system topic with the specified parameters.
    +
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
             :type resource_group_name: str
    -        :param factory_name: The factory name.
    -        :type factory_name: str
    -        :param trigger_name: The trigger name.
    -        :type trigger_name: str
    -        :param rerun_trigger_name: The rerun trigger name.
    -        :type rerun_trigger_name: str
    +        :param system_topic_name: Name of the system topic.
    +        :type system_topic_name: str
    +        :param tags: Tags of the system topic.
    +        :type tags: dict[str, str]
             :param dict custom_headers: headers that will be added to the request
             :param bool raw: The poller return type is ClientRawResponse, the
              direct response alongside the deserialized response
             :param polling: True for ARMPolling, False for no polling, or a
              polling object for personal polling strategy
    -        :return: An instance of LROPoller that returns None or
    -         ClientRawResponse if raw==True
    -        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    -         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :return: An instance of LROPoller that returns SystemTopic or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.eventgrid.models.SystemTopic]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.eventgrid.models.SystemTopic]]
             :raises: :class:`CloudError`
             """
    -        raw_result = self._cancel_initial(
    +        raw_result = self._update_initial(
                 resource_group_name=resource_group_name,
    -            factory_name=factory_name,
    -            trigger_name=trigger_name,
    -            rerun_trigger_name=rerun_trigger_name,
    +            system_topic_name=system_topic_name,
    +            tags=tags,
                 custom_headers=custom_headers,
                 raw=True,
                 **operation_config
             )
     
             def get_long_running_output(response):
    +            deserialized = self._deserialize('SystemTopic', response)
    +
                 if raw:
    -                client_raw_response = ClientRawResponse(None, response)
    +                client_raw_response = ClientRawResponse(deserialized, response)
                     return client_raw_response
     
    +            return deserialized
    +
             lro_delay = operation_config.get(
                 'long_running_operation_timeout',
                 self.config.long_running_operation_timeout)
    @@ -375,43 +398,144 @@ def get_long_running_output(response):
             elif polling is False: polling_method = NoPolling()
             else: polling_method = polling
             return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    -    cancel.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/triggers/{triggerName}/rerunTriggers/{rerunTriggerName}/cancel'}
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/systemTopics/{systemTopicName}'}
    +
    +    def list_by_subscription(
    +            self, filter=None, top=None, custom_headers=None, raw=False, **operation_config):
    +        """List system topics under an Azure subscription.
    +
    +        List all the system topics under an Azure subscription.
    +
    +        :param filter: The query used to filter the search results using OData
    +         syntax. Filtering is permitted on the 'name' property only and with
    +         limited number of OData operations. These operations are: the
    +         'contains' function as well as the following logical operations: not,
    +         and, or, eq (for equal), and ne (for not equal). No arithmetic
    +         operations are supported. The following is a valid filter example:
    +         $filter=contains(namE, 'PATTERN') and name ne 'PATTERN-1'. The
    +         following is not a valid filter example: $filter=location eq 'westus'.
    +        :type filter: str
    +        :param top: The number of results to return per page for the list
    +         operation. Valid range for top parameter is 1 to 100. If not
    +         specified, the default number of results to be returned is 20 items
    +         per page.
    +        :type top: int
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of SystemTopic
    +        :rtype:
    +         ~azure.mgmt.eventgrid.models.SystemTopicPaged[~azure.mgmt.eventgrid.models.SystemTopic]
    +        :raises: :class:`CloudError`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_subscription.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +                if filter is not None:
    +                    query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +                if top is not None:
    +                    query_parameters['$top'] = self._serialize.query("top", top, 'int')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.SystemTopicPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.EventGrid/systemTopics'}
    +
    +    def list_by_resource_group(
    +            self, resource_group_name, filter=None, top=None, custom_headers=None, raw=False, **operation_config):
    +        """List system topics under a resource group.
     
    -    def list_by_trigger(
    -            self, resource_group_name, factory_name, trigger_name, custom_headers=None, raw=False, **operation_config):
    -        """Lists rerun triggers by an original trigger name.
    +        List all the system topics under a resource group.
     
    -        :param resource_group_name: The resource group name.
    +        :param resource_group_name: The name of the resource group within the
    +         user's subscription.
             :type resource_group_name: str
    -        :param factory_name: The factory name.
    -        :type factory_name: str
    -        :param trigger_name: The trigger name.
    -        :type trigger_name: str
    +        :param filter: The query used to filter the search results using OData
    +         syntax. Filtering is permitted on the 'name' property only and with
    +         limited number of OData operations. These operations are: the
    +         'contains' function as well as the following logical operations: not,
    +         and, or, eq (for equal), and ne (for not equal). No arithmetic
    +         operations are supported. The following is a valid filter example:
    +         $filter=contains(namE, 'PATTERN') and name ne 'PATTERN-1'. The
    +         following is not a valid filter example: $filter=location eq 'westus'.
    +        :type filter: str
    +        :param top: The number of results to return per page for the list
    +         operation. Valid range for top parameter is 1 to 100. If not
    +         specified, the default number of results to be returned is 20 items
    +         per page.
    +        :type top: int
             :param dict custom_headers: headers that will be added to the request
             :param bool raw: returns the direct response alongside the
              deserialized response
             :param operation_config: :ref:`Operation configuration
              overrides`.
    -        :return: An iterator like instance of RerunTriggerResource
    +        :return: An iterator like instance of SystemTopic
             :rtype:
    -         ~azure.mgmt.datafactory.models.RerunTriggerResourcePaged[~azure.mgmt.datafactory.models.RerunTriggerResource]
    +         ~azure.mgmt.eventgrid.models.SystemTopicPaged[~azure.mgmt.eventgrid.models.SystemTopic]
             :raises: :class:`CloudError`
             """
             def prepare_request(next_link=None):
                 if not next_link:
                     # Construct URL
    -                url = self.list_by_trigger.metadata['url']
    +                url = self.list_by_resource_group.metadata['url']
                     path_format_arguments = {
                         'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    -                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'),
    -                    'factoryName': self._serialize.url("factory_name", factory_name, 'str', max_length=63, min_length=3, pattern=r'^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$'),
    -                    'triggerName': self._serialize.url("trigger_name", trigger_name, 'str', max_length=260, min_length=1, pattern=r'^[A-Za-z0-9_][^<>*#.%&:\\+?/]*$')
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
                     }
                     url = self._client.format_url(url, **path_format_arguments)
     
                     # Construct parameters
                     query_parameters = {}
                     query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +                if filter is not None:
    +                    query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
    +                if top is not None:
    +                    query_parameters['$top'] = self._serialize.query("top", top, 'int')
     
                 else:
                     url = next_link
    @@ -447,7 +571,7 @@ def internal_paging(next_link=None):
             header_dict = None
             if raw:
                 header_dict = {}
    -        deserialized = models.RerunTriggerResourcePaged(internal_paging, self._deserialize.dependencies, header_dict)
    +        deserialized = models.SystemTopicPaged(internal_paging, self._deserialize.dependencies, header_dict)
     
             return deserialized
    -    list_by_trigger.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/triggers/{triggerName}/rerunTriggers'}
    +    list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/systemTopics'}
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_topics_operations.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_topics_operations.py
    index bc4dcd964055..636333df52a3 100644
    --- a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_topics_operations.py
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/operations/_topics_operations.py
    @@ -324,7 +324,7 @@ def _update_initial(
             request = self._client.patch(url, query_parameters, header_parameters, body_content)
             response = self._client.send(request, stream=False, **operation_config)
     
    -        if response.status_code not in [201]:
    +        if response.status_code not in [200, 201]:
                 exp = CloudError(response)
                 exp.request_id = response.headers.get('x-ms-request-id')
                 raise exp
    diff --git a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/version.py b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/version.py
    index fc43877054a5..936dbeb88fea 100644
    --- a/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/version.py
    +++ b/sdk/eventgrid/azure-mgmt-eventgrid/azure/mgmt/eventgrid/version.py
    @@ -9,4 +9,4 @@
     # regenerated.
     # --------------------------------------------------------------------------
     
    -VERSION = "3.0.0rc4"
    +VERSION = "3.0.0rc5"
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/CHANGELOG.md b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/CHANGELOG.md
    index 4d6010a3249a..524cf5a2bf1c 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/CHANGELOG.md
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/CHANGELOG.md
    @@ -1,6 +1,12 @@
     # Release History
     
    -## 1.0.1 (Unreleased)
    +## 1.1.1 (Unreleased)
    +
    +
    +## 1.1.0 (2020-03-09)
    +
    +**New features**
    +- Param `api_version` of `BlobCheckpointStore` now supports older versions of Azure Storage Service API.
     
     ## 1.0.0 (2020-01-13)
     Stable release. No new features or API changes.
    @@ -30,4 +36,4 @@ This release has trivial internal changes only. No feature changes.
     
     - `BlobPartitionManager` that uses Azure Blob Storage Block Blob to store EventProcessor checkpoint data
     
    -![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/HISTORY.png)
    \ No newline at end of file
    +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/HISTORY.png)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/README.md b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/README.md
    index 4e3305647dd1..7e5dc6fbf132 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/README.md
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/README.md
    @@ -5,17 +5,11 @@ This Checkpoint Store package works as a plug-in package to `EventHubConsumerCli
     
     Please note that this is an async library, for sync version of the Azure EventHubs Checkpoint Store client library, please refer to [azure-eventhub-checkpointstoreblob](../azure-eventhub-checkpointstoreblob).
     
    -[Source code](./) | [Package (PyPi)](https://pypi.org/project/azure-eventhub-checkpointstoreblob-aio/) | [API reference documentation](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-eventhub/5.0.0/azure.eventhub.aio.html#azure.eventhub.aio.CheckpointStore) | [Azure Eventhubs documentation](https://docs.microsoft.com/en-us/azure/event-hubs/) | [Azure Storage documentation](https://docs.microsoft.com/en-us/azure/storage/)
    +[Source code](./) | [Package (PyPi)](https://pypi.org/project/azure-eventhub-checkpointstoreblob-aio/) | [API reference documentation](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-eventhub/5.0.1/azure.eventhub.aio.html#azure.eventhub.aio.CheckpointStore) | [Azure Eventhubs documentation](https://docs.microsoft.com/en-us/azure/event-hubs/) | [Azure Storage documentation](https://docs.microsoft.com/en-us/azure/storage/)
     
     ## Getting started
     
    -### Install the package
    -
    -```
    -$ pip install azure-eventhub-checkpointstoreblob-aio
    -```
    -
    -**Prerequisites**
    +### Prerequisites
     
     - Python 3.5.3 or later.
     - **Microsoft Azure Subscription:**  To use Azure services, including Azure Event Hubs, you'll need a subscription.  If you do not have an existing Azure account, you may sign up for a free trial or use your MSDN subscriber benefits when you [create an account](https://azure.microsoft.com/en-us/).
    @@ -24,6 +18,11 @@ $ pip install azure-eventhub-checkpointstoreblob-aio
     
     - **Azure Storage Account:** You'll need to have an Azure Storage Account and create a Azure Blob Storage Block Container to store the checkpoint data with blobs. You may follow the guide [creating an Azure Block Blob Storage Account](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-create-account-block-blob).
     
    +### Install the package
    +
    +```
    +$ pip install azure-eventhub-checkpointstoreblob-aio
    +```
     
     ## Key concepts
     
    @@ -97,11 +96,24 @@ if __name__ == '__main__':
         loop.run_until_complete(main())
     ```
     
    +#### Use `BlobCheckpointStore` with a different version of Azure Storage Service API
    +Some environments have different versions of Azure Storage Service API. 
    +`BlobCheckpointStore` by default uses the Storage Service API version 2019-07-07. To use it against a different
    +version, specify `api_version` when you create the `BlobCheckpointStore` object.
    +
    +
     ## Troubleshooting
     
     ### General
     Enabling logging will be helpful to do trouble shooting.
    -Refer to [Logging](#logging) to enable loggers for related libraries.
    +
    +### Logging
    +
    +- Enable `azure.eventhub.extensions.checkpointstoreblobaio` logger to collect traces from the library.
    +- Enable `azure.eventhub` logger to collect traces from the main azure-eventhub library.
    +- Enable `azure.eventhub.extensions.checkpointstoreblobaio._vendor.storage` logger to collect traces from azure storage blob library.
    +- Enable `uamqp` logger to collect traces from the underlying uAMQP library.
    +- Enable AMQP frame level trace by setting `logging_enable=True` when creating the client.
     
     ## Next steps
     
    @@ -110,15 +122,7 @@ Refer to [Logging](#logging) to enable loggers for related libraries.
     
     ### Documentation
     
    -Reference documentation is available [here](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-eventhub/5.0.0/azure.eventhub.aio.html#azure.eventhub.aio.CheckpointStore)
    -
    -### Logging
    -
    -- Enable `azure.eventhub.extensions.checkpointstoreblobaio` logger to collect traces from the library.
    -- Enable `azure.eventhub` logger to collect traces from the main azure-eventhub library.
    -- Enable `azure.storage.blob` logger to collect traces from azure storage blob library.
    -- Enable `uamqp` logger to collect traces from the underlying uAMQP library.
    -- Enable AMQP frame level trace by setting `logging_enable=True` when creating the client.
    +Reference documentation is available [here](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-eventhub/5.0.1/azure.eventhub.aio.html#azure.eventhub.aio.CheckpointStore)
     
     ### Provide Feedback
     
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_blobstoragecsaio.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_blobstoragecsaio.py
    index 043a7e65d595..8ee9aaca319b 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_blobstoragecsaio.py
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_blobstoragecsaio.py
    @@ -9,7 +9,9 @@
     from azure.eventhub.exceptions import OwnershipLostError  # type: ignore
     from azure.eventhub.aio import CheckpointStore  # type: ignore  # pylint: disable=no-name-in-module
     from azure.core.exceptions import ResourceModifiedError, ResourceExistsError  # type: ignore
    -from azure.storage.blob.aio import ContainerClient, BlobClient  # type: ignore
    +from ._vendor.storage.blob.aio import ContainerClient, BlobClient
    +from ._vendor.storage.blob._shared.base_client import parse_connection_str
    +
     
     logger = logging.getLogger(__name__)
     UPLOAD_DATA = ""
    @@ -31,21 +33,33 @@ class BlobCheckpointStore(CheckpointStore):
             account URL already has a SAS token. The value can be a SAS token string, an account
             shared access key, or an instance of a TokenCredentials class from azure.identity.
             If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +            The Storage API version to use for requests. Default value is '2019-07-07'.
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
         """
     
         def __init__(self, blob_account_url, container_name, *, credential=None, **kwargs):
             # type(str, str, Optional[Any], Any) -> None
    -        container_client = kwargs.pop("container_client", None)
    -        self._container_client = container_client or ContainerClient(
    -            blob_account_url, container_name, credential=credential, **kwargs
    -        )
    +        self._container_client = kwargs.pop("container_client", None)
    +        if not self._container_client:
    +            api_version = kwargs.pop("api_version", None)
    +            if api_version:
    +                headers = kwargs.get("headers")
    +                if headers:
    +                    headers["x-ms-version"] = api_version
    +                else:
    +                    kwargs["headers"] = {"x-ms-version": api_version}
    +            self._container_client = ContainerClient(
    +                blob_account_url, container_name, credential=credential, **kwargs
    +            )
             self._cached_blob_clients = defaultdict()  # type: Dict[str, BlobClient]
     
         @classmethod
         def from_connection_string(
             cls, conn_str, container_name, *, credential=None, **kwargs
         ):
    -        # type: (str, str, Optional[Any], str) -> BlobCheckpointStore
    +        # type: (str, str, Any, Optional[Any], Any) -> BlobCheckpointStore
             """Create BlobCheckpointStore from a storage connection string.
     
             :param str conn_str:
    @@ -59,11 +73,18 @@ def from_connection_string(
                 access key values. The value can be a SAS token string, an account shared access
                 key, or an instance of a TokenCredentials class from azure.identity.
                 Credentials provided here will take precedence over those in the connection string.
    +        :keyword str api_version:
    +            The Storage API version to use for requests. Default value is '2019-07-07'.
    +        :keyword str secondary_hostname:
    +            The hostname of the secondary endpoint.
    +        :returns: A blob checkpoint store.
    +        :rtype: ~azure.eventhub.extensions.checkpointstoreblobaio.BlobCheckpointStore
             """
    -        container_client = ContainerClient.from_connection_string(
    -            conn_str, container_name, credential=credential, **kwargs
    -        )
    -        return cls(None, None, container_client=container_client)
    +        account_url, secondary, credential = parse_connection_str(conn_str, credential, 'blob')
    +        if 'secondary_hostname' not in kwargs:
    +            kwargs['secondary_hostname'] = secondary
    +
    +        return cls(account_url, container_name, credential=credential, **kwargs)
     
         async def __aenter__(self):
             await self._container_client.__aenter__()
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/__init__.py
    new file mode 100644
    index 000000000000..ad42bf279a86
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/__init__.py
    @@ -0,0 +1,4 @@
    +# --------------------------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for license information.
    +# -----------------------------------------------------------------------------------
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/__init__.py
    new file mode 100644
    index 000000000000..59cb70146572
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/__init__.py
    @@ -0,0 +1 @@
    +__path__ = __import__('pkgutil').extend_path(__path__, __name__)  # type: str
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/__init__.py
    new file mode 100644
    index 000000000000..2370d0cd28d7
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/__init__.py
    @@ -0,0 +1,210 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import os
    +
    +from typing import Union, Iterable, AnyStr, IO, Any, Dict  # pylint: disable=unused-import
    +from ._version import VERSION
    +from ._blob_client import BlobClient
    +from ._container_client import ContainerClient
    +from ._blob_service_client import BlobServiceClient
    +from ._lease import BlobLeaseClient
    +from ._download import StorageStreamDownloader
    +from ._shared_access_signature import generate_account_sas, generate_container_sas, generate_blob_sas
    +from ._shared.policies import ExponentialRetry, LinearRetry
    +from ._shared.response_handlers import PartialBatchErrorException
    +from ._shared.models import(
    +    LocationMode,
    +    ResourceTypes,
    +    AccountSasPermissions,
    +    StorageErrorCode,
    +    UserDelegationKey
    +)
    +from ._generated.models import (
    +    RehydratePriority
    +)
    +from ._models import (
    +    BlobType,
    +    BlockState,
    +    StandardBlobTier,
    +    PremiumPageBlobTier,
    +    SequenceNumberAction,
    +    PublicAccess,
    +    BlobAnalyticsLogging,
    +    Metrics,
    +    RetentionPolicy,
    +    StaticWebsite,
    +    CorsRule,
    +    ContainerProperties,
    +    BlobProperties,
    +    LeaseProperties,
    +    ContentSettings,
    +    CopyProperties,
    +    BlobBlock,
    +    PageRange,
    +    AccessPolicy,
    +    ContainerSasPermissions,
    +    BlobSasPermissions,
    +    CustomerProvidedEncryptionKey,
    +    ContainerEncryptionScope
    +)
    +
    +__version__ = VERSION
    +
    +
    +def upload_blob_to_url(
    +        blob_url,  # type: str
    +        data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +        credential=None,  # type: Any
    +        **kwargs):
    +    # type: (...) -> Dict[str, Any]
    +    """Upload data to a given URL
    +
    +    The data will be uploaded as a block blob.
    +
    +    :param str blob_url:
    +        The full URI to the blob. This can also include a SAS token.
    +    :param data:
    +        The data to upload. This can be bytes, text, an iterable or a file-like object.
    +    :type data: bytes or str or Iterable
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        blob URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword bool overwrite:
    +        Whether the blob to be uploaded should overwrite the current data.
    +        If True, upload_blob_to_url will overwrite any existing data. If set to False, the
    +        operation will fail with a ResourceExistsError.
    +    :keyword int max_concurrency:
    +        The number of parallel connections with which to download.
    +    :keyword int length:
    +        Number of bytes to read from the stream. This is optional, but
    +        should be supplied for optimal performance.
    +    :keyword dict(str,str) metadata:
    +        Name-value pairs associated with the blob as metadata.
    +    :keyword bool validate_content:
    +        If true, calculates an MD5 hash for each chunk of the blob. The storage
    +        service checks the hash of the content that has arrived with the hash
    +        that was sent. This is primarily valuable for detecting bitflips on
    +        the wire if using http instead of https as https (the default) will
    +        already validate. Note that this MD5 hash is not stored with the
    +        blob. Also note that if enabled, the memory-efficient upload algorithm
    +        will not be used, because computing the MD5 hash requires buffering
    +        entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +    :keyword str encoding:
    +        Encoding to use if text is supplied as input. Defaults to UTF-8.
    +    :returns: Blob-updated property dict (Etag and last modified)
    +    :rtype: dict(str, Any)
    +    """
    +    with BlobClient.from_blob_url(blob_url, credential=credential) as client:
    +        return client.upload_blob(data=data, blob_type=BlobType.BlockBlob, **kwargs)
    +
    +
    +def _download_to_stream(client, handle, **kwargs):
    +    """Download data to specified open file-handle."""
    +    stream = client.download_blob(**kwargs)
    +    stream.readinto(handle)
    +
    +
    +def download_blob_from_url(
    +        blob_url,  # type: str
    +        output,  # type: str
    +        credential=None,  # type: Any
    +        **kwargs):
    +    # type: (...) -> None
    +    """Download the contents of a blob to a local file or stream.
    +
    +    :param str blob_url:
    +        The full URI to the blob. This can also include a SAS token.
    +    :param output:
    +        Where the data should be downloaded to. This could be either a file path to write to,
    +        or an open IO handle to write to.
    +    :type output: str or writable stream.
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        blob URL already has a SAS token or the blob is public. The value can be a SAS token string,
    +        an account shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword bool overwrite:
    +        Whether the local file should be overwritten if it already exists. The default value is
    +        `False` - in which case a ValueError will be raised if the file already exists. If set to
    +        `True`, an attempt will be made to write to the existing file. If a stream handle is passed
    +        in, this value is ignored.
    +    :keyword int max_concurrency:
    +        The number of parallel connections with which to download.
    +    :keyword int offset:
    +        Start of byte range to use for downloading a section of the blob.
    +        Must be set if length is provided.
    +    :keyword int length:
    +        Number of bytes to read from the stream. This is optional, but
    +        should be supplied for optimal performance.
    +    :keyword bool validate_content:
    +        If true, calculates an MD5 hash for each chunk of the blob. The storage
    +        service checks the hash of the content that has arrived with the hash
    +        that was sent. This is primarily valuable for detecting bitflips on
    +        the wire if using http instead of https as https (the default) will
    +        already validate. Note that this MD5 hash is not stored with the
    +        blob. Also note that if enabled, the memory-efficient upload algorithm
    +        will not be used, because computing the MD5 hash requires buffering
    +        entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +    :rtype: None
    +    """
    +    overwrite = kwargs.pop('overwrite', False)
    +    with BlobClient.from_blob_url(blob_url, credential=credential) as client:
    +        if hasattr(output, 'write'):
    +            _download_to_stream(client, output, **kwargs)
    +        else:
    +            if not overwrite and os.path.isfile(output):
    +                raise ValueError("The file '{}' already exists.".format(output))
    +            with open(output, 'wb') as file_handle:
    +                _download_to_stream(client, file_handle, **kwargs)
    +
    +
    +__all__ = [
    +    'upload_blob_to_url',
    +    'download_blob_from_url',
    +    'BlobServiceClient',
    +    'ContainerClient',
    +    'BlobClient',
    +    'BlobType',
    +    'BlobLeaseClient',
    +    'StorageErrorCode',
    +    'UserDelegationKey',
    +    'ExponentialRetry',
    +    'LinearRetry',
    +    'LocationMode',
    +    'BlockState',
    +    'StandardBlobTier',
    +    'PremiumPageBlobTier',
    +    'SequenceNumberAction',
    +    'PublicAccess',
    +    'BlobAnalyticsLogging',
    +    'Metrics',
    +    'RetentionPolicy',
    +    'StaticWebsite',
    +    'CorsRule',
    +    'ContainerProperties',
    +    'BlobProperties',
    +    'LeaseProperties',
    +    'ContentSettings',
    +    'CopyProperties',
    +    'BlobBlock',
    +    'PageRange',
    +    'AccessPolicy',
    +    'ContainerSasPermissions',
    +    'BlobSasPermissions',
    +    'ResourceTypes',
    +    'AccountSasPermissions',
    +    'StorageStreamDownloader',
    +    'CustomerProvidedEncryptionKey',
    +    'RehydratePriority',
    +    'generate_account_sas',
    +    'generate_container_sas',
    +    'generate_blob_sas',
    +    'PartialBatchErrorException',
    +    'ContainerEncryptionScope'
    +]
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_blob_client.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_blob_client.py
    new file mode 100644
    index 000000000000..115d74bec9b1
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_blob_client.py
    @@ -0,0 +1,3005 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=too-many-lines,no-self-use
    +
    +from io import BytesIO
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, IO, Iterable, AnyStr, Dict, List, Tuple,
    +    TYPE_CHECKING
    +)
    +try:
    +    from urllib.parse import urlparse, quote, unquote
    +except ImportError:
    +    from urlparse import urlparse # type: ignore
    +    from urllib2 import quote, unquote # type: ignore
    +
    +import six
    +from azure.core.tracing.decorator import distributed_trace
    +
    +from ._shared import encode_base64
    +from ._shared.base_client import StorageAccountHostsMixin, parse_connection_str, parse_query
    +from ._shared.encryption import generate_blob_encryption_data
    +from ._shared.uploads import IterStreamer
    +from ._shared.request_handlers import (
    +    add_metadata_headers, get_length, read_length,
    +    validate_and_format_range_headers)
    +from ._shared.response_handlers import return_response_headers, process_storage_error
    +from ._generated import AzureBlobStorage, VERSION
    +from ._generated.models import ( # pylint: disable=unused-import
    +    DeleteSnapshotsOptionType,
    +    BlobHTTPHeaders,
    +    BlockLookupList,
    +    AppendPositionAccessConditions,
    +    SequenceNumberAccessConditions,
    +    StorageErrorException,
    +    UserDelegationKey,
    +    CpkInfo)
    +from ._serialize import get_modify_conditions, get_source_conditions, get_cpk_scope_info, get_api_version
    +from ._deserialize import get_page_ranges_result, deserialize_blob_properties, deserialize_blob_stream
    +from ._upload_helpers import (
    +    upload_block_blob,
    +    upload_append_blob,
    +    upload_page_blob)
    +from ._models import BlobType, BlobBlock
    +from ._download import StorageStreamDownloader
    +from ._lease import BlobLeaseClient, get_access_conditions
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from ._generated.models import BlockList
    +    from ._models import (  # pylint: disable=unused-import
    +        ContainerProperties,
    +        BlobProperties,
    +        BlobSasPermissions,
    +        ContentSettings,
    +        PremiumPageBlobTier,
    +        StandardBlobTier,
    +        SequenceNumberAction
    +    )
    +
    +_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION = (
    +    'The require_encryption flag is set, but encryption is not supported'
    +    ' for this method.')
    +
    +
    +class BlobClient(StorageAccountHostsMixin):  # pylint: disable=too-many-public-methods
    +    """A client to interact with a specific blob, although that blob may not yet exist.
    +
    +    :param str account_url:
    +        The URI to the storage account. In order to create a client given the full URI to the blob,
    +        use the :func:`from_blob_url` classmethod.
    +    :param container_name: The container name for the blob.
    +    :type container_name: str
    +    :param blob_name: The name of the blob with which to interact. If specified, this value will override
    +        a blob value specified in the blob URL.
    +    :type blob_name: str
    +    :param str snapshot:
    +        The optional blob snapshot on which to operate. This can be the snapshot ID string
    +        or the response returned from :func:`create_snapshot`.
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +        The Storage API version to use for requests. Default value is '2019-07-07'.
    +        Setting to an older version may result in reduced feature compatibility.
    +
    +        .. versionadded:: 12.2.0
    +
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +    :keyword int max_block_size: The maximum chunk size for uploading a block blob in chunks.
    +        Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_put_size: If the blob size is less than max_single_put_size, then the blob will be
    +        uploaded with only one http PUT request. If the blob size is larger than max_single_put_size,
    +        the blob will be uploaded in chunks. Defaults to 64*1024*1024, or 64MB.
    +    :keyword int min_large_block_upload_threshold: The minimum chunk size required to use the memory efficient
    +        algorithm when uploading a block blob. Defaults to 4*1024*1024+1.
    +    :keyword bool use_byte_buffer: Use a byte buffer for block blob uploads. Defaults to False.
    +    :keyword int max_page_size: The maximum chunk size for uploading a page blob. Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_get_size: The maximum size for a blob to be downloaded in a single call,
    +        the exceeded part will be downloaded in chunks (could be parallel). Defaults to 32*1024*1024, or 32MB.
    +    :keyword int max_chunk_get_size: The maximum chunk size used for downloading a blob. Defaults to 4*1024*1024,
    +        or 4MB.
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication.py
    +            :start-after: [START create_blob_client]
    +            :end-before: [END create_blob_client]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobClient from a URL to a public blob (no auth needed).
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication.py
    +            :start-after: [START create_blob_client_sas_url]
    +            :end-before: [END create_blob_client_sas_url]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobClient from a SAS URL to a blob.
    +    """
    +    def __init__(
    +            self, account_url,  # type: str
    +            container_name,  # type: str
    +            blob_name,  # type: str
    +            snapshot=None,  # type: Optional[Union[str, Dict[str, Any]]]
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):
    +        # type: (...) -> None
    +        try:
    +            if not account_url.lower().startswith('http'):
    +                account_url = "https://" + account_url
    +        except AttributeError:
    +            raise ValueError("Account URL must be a string.")
    +        parsed_url = urlparse(account_url.rstrip('/'))
    +
    +        if not (container_name and blob_name):
    +            raise ValueError("Please specify a container name and blob name.")
    +        if not parsed_url.netloc:
    +            raise ValueError("Invalid URL: {}".format(account_url))
    +
    +        path_snapshot, sas_token = parse_query(parsed_url.query)
    +
    +        self.container_name = container_name
    +        self.blob_name = blob_name
    +        try:
    +            self.snapshot = snapshot.snapshot # type: ignore
    +        except AttributeError:
    +            try:
    +                self.snapshot = snapshot['snapshot'] # type: ignore
    +            except TypeError:
    +                self.snapshot = snapshot or path_snapshot
    +
    +        self._query_str, credential = self._format_query_string(sas_token, credential, snapshot=self.snapshot)
    +        super(BlobClient, self).__init__(parsed_url, service='blob', credential=credential, **kwargs)
    +        self._client = AzureBlobStorage(self.url, pipeline=self._pipeline)
    +        self._client._config.version = get_api_version(kwargs, VERSION)  # pylint: disable=protected-access
    +
    +    def _format_url(self, hostname):
    +        container_name = self.container_name
    +        if isinstance(container_name, six.text_type):
    +            container_name = container_name.encode('UTF-8')
    +        return "{}://{}/{}/{}{}".format(
    +            self.scheme,
    +            hostname,
    +            quote(container_name),
    +            quote(self.blob_name, safe='~'),
    +            self._query_str)
    +
    +    @classmethod
    +    def from_blob_url(cls, blob_url, credential=None, snapshot=None, **kwargs):
    +        # type: (str, Optional[Any], Optional[Union[str, Dict[str, Any]]], Any) -> BlobClient
    +        """Create BlobClient from a blob url.
    +
    +        :param str blob_url:
    +            The full endpoint URL to the Blob, including SAS token and snapshot if used. This could be
    +            either the primary endpoint, or the secondary endpoint depending on the current `location_mode`.
    +        :type blob_url: str
    +        :param credential:
    +            The credentials with which to authenticate. This is optional if the
    +            account URL already has a SAS token, or the connection string already has shared
    +            access key values. The value can be a SAS token string, an account shared access
    +            key, or an instance of a TokenCredentials class from azure.identity.
    +            Credentials provided here will take precedence over those in the connection string.
    +        :param str snapshot:
    +            The optional blob snapshot on which to operate. This can be the snapshot ID string
    +            or the response returned from :func:`create_snapshot`. If specified, this will override
    +            the snapshot in the url.
    +        :returns: A Blob client.
    +        :rtype: ~azure.storage.blob.BlobClient
    +        """
    +        try:
    +            if not blob_url.lower().startswith('http'):
    +                blob_url = "https://" + blob_url
    +        except AttributeError:
    +            raise ValueError("Blob URL must be a string.")
    +        parsed_url = urlparse(blob_url.rstrip('/'))
    +
    +        if not parsed_url.netloc:
    +            raise ValueError("Invalid URL: {}".format(blob_url))
    +
    +        path_blob = parsed_url.path.lstrip('/').split('/')
    +        account_path = ""
    +        if len(path_blob) > 2:
    +            account_path = "/" + "/".join(path_blob[:-2])
    +        account_url = "{}://{}{}?{}".format(
    +            parsed_url.scheme,
    +            parsed_url.netloc.rstrip('/'),
    +            account_path,
    +            parsed_url.query)
    +        container_name, blob_name = unquote(path_blob[-2]), unquote(path_blob[-1])
    +        if not container_name or not blob_name:
    +            raise ValueError("Invalid URL. Provide a blob_url with a valid blob and container name.")
    +
    +        path_snapshot, _ = parse_query(parsed_url.query)
    +        if snapshot:
    +            try:
    +                path_snapshot = snapshot.snapshot # type: ignore
    +            except AttributeError:
    +                try:
    +                    path_snapshot = snapshot['snapshot'] # type: ignore
    +                except TypeError:
    +                    path_snapshot = snapshot
    +
    +        return cls(
    +            account_url, container_name=container_name, blob_name=blob_name,
    +            snapshot=path_snapshot, credential=credential, **kwargs
    +        )
    +
    +    @classmethod
    +    def from_connection_string(
    +            cls, conn_str,  # type: str
    +            container_name,  # type: str
    +            blob_name,  # type: str
    +            snapshot=None,  # type: Optional[str]
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):  # type: (...) -> BlobClient
    +        """Create BlobClient from a Connection String.
    +
    +        :param str conn_str:
    +            A connection string to an Azure Storage account.
    +        :param container_name: The container name for the blob.
    +        :type container_name: str
    +        :param blob_name: The name of the blob with which to interact.
    +        :type blob_name: str
    +        :param str snapshot:
    +            The optional blob snapshot on which to operate. This can be the snapshot ID string
    +            or the response returned from :func:`create_snapshot`.
    +        :param credential:
    +            The credentials with which to authenticate. This is optional if the
    +            account URL already has a SAS token, or the connection string already has shared
    +            access key values. The value can be a SAS token string, an account shared access
    +            key, or an instance of a TokenCredentials class from azure.identity.
    +            Credentials provided here will take precedence over those in the connection string.
    +        :returns: A Blob client.
    +        :rtype: ~azure.storage.blob.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_authentication.py
    +                :start-after: [START auth_from_connection_string_blob]
    +                :end-before: [END auth_from_connection_string_blob]
    +                :language: python
    +                :dedent: 8
    +                :caption: Creating the BlobClient from a connection string.
    +        """
    +        account_url, secondary, credential = parse_connection_str(conn_str, credential, 'blob')
    +        if 'secondary_hostname' not in kwargs:
    +            kwargs['secondary_hostname'] = secondary
    +        return cls(
    +            account_url, container_name=container_name, blob_name=blob_name,
    +            snapshot=snapshot, credential=credential, **kwargs
    +        )
    +
    +    @distributed_trace
    +    def get_account_information(self, **kwargs):
    +        # type: (**Any) -> Dict[str, str]
    +        """Gets information related to the storage account in which the blob resides.
    +
    +        The information can also be retrieved if the user has a SAS to a container or blob.
    +        The keys in the returned dictionary include 'sku_name' and 'account_kind'.
    +
    +        :returns: A dict of account information (SKU and account type).
    +        :rtype: dict(str, str)
    +        """
    +        try:
    +            return self._client.blob.get_account_info(cls=return_response_headers, **kwargs) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _upload_blob_options(  # pylint:disable=too-many-statements
    +            self, data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            blob_type=BlobType.BlockBlob,  # type: Union[str, BlobType]
    +            length=None,  # type: Optional[int]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption and not self.key_encryption_key:
    +            raise ValueError("Encryption required but no key was provided.")
    +        encryption_options = {
    +            'required': self.require_encryption,
    +            'key': self.key_encryption_key,
    +            'resolver': self.key_resolver_function,
    +        }
    +        if self.key_encryption_key is not None:
    +            cek, iv, encryption_data = generate_blob_encryption_data(self.key_encryption_key)
    +            encryption_options['cek'] = cek
    +            encryption_options['vector'] = iv
    +            encryption_options['data'] = encryption_data
    +
    +        encoding = kwargs.pop('encoding', 'UTF-8')
    +        if isinstance(data, six.text_type):
    +            data = data.encode(encoding) # type: ignore
    +        if length is None:
    +            length = get_length(data)
    +        if isinstance(data, bytes):
    +            data = data[:length]
    +
    +        if isinstance(data, bytes):
    +            stream = BytesIO(data)
    +        elif hasattr(data, 'read'):
    +            stream = data
    +        elif hasattr(data, '__iter__'):
    +            stream = IterStreamer(data, encoding=encoding)
    +        else:
    +            raise TypeError("Unsupported data type: {}".format(type(data)))
    +
    +        validate_content = kwargs.pop('validate_content', False)
    +        content_settings = kwargs.pop('content_settings', None)
    +        overwrite = kwargs.pop('overwrite', False)
    +        max_concurrency = kwargs.pop('max_concurrency', 1)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        kwargs['cpk_info'] = cpk_info
    +
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        kwargs['lease_access_conditions'] = get_access_conditions(kwargs.pop('lease', None))
    +        kwargs['modified_access_conditions'] = get_modify_conditions(kwargs)
    +        kwargs['cpk_scope_info'] = get_cpk_scope_info(kwargs)
    +        if content_settings:
    +            kwargs['blob_headers'] = BlobHTTPHeaders(
    +                blob_cache_control=content_settings.cache_control,
    +                blob_content_type=content_settings.content_type,
    +                blob_content_md5=bytearray(content_settings.content_md5) if content_settings.content_md5 else None,
    +                blob_content_encoding=content_settings.content_encoding,
    +                blob_content_language=content_settings.content_language,
    +                blob_content_disposition=content_settings.content_disposition
    +            )
    +        kwargs['stream'] = stream
    +        kwargs['length'] = length
    +        kwargs['overwrite'] = overwrite
    +        kwargs['headers'] = headers
    +        kwargs['validate_content'] = validate_content
    +        kwargs['blob_settings'] = self._config
    +        kwargs['max_concurrency'] = max_concurrency
    +        kwargs['encryption_options'] = encryption_options
    +        if blob_type == BlobType.BlockBlob:
    +            kwargs['client'] = self._client.block_blob
    +            kwargs['data'] = data
    +        elif blob_type == BlobType.PageBlob:
    +            kwargs['client'] = self._client.page_blob
    +        elif blob_type == BlobType.AppendBlob:
    +            if self.require_encryption or (self.key_encryption_key is not None):
    +                raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +            kwargs['client'] = self._client.append_blob
    +        else:
    +            raise ValueError("Unsupported BlobType: {}".format(blob_type))
    +        return kwargs
    +
    +    @distributed_trace
    +    def upload_blob(  # pylint: disable=too-many-locals
    +            self, data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            blob_type=BlobType.BlockBlob,  # type: Union[str, BlobType]
    +            length=None,  # type: Optional[int]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Any
    +        """Creates a new blob from a data source with automatic chunking.
    +
    +        :param data: The blob data to upload.
    +        :param ~azure.storage.blob.BlobType blob_type: The type of the blob. This can be
    +            either BlockBlob, PageBlob or AppendBlob. The default value is BlockBlob.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword bool overwrite: Whether the blob to be uploaded should overwrite the current data.
    +            If True, upload_blob will overwrite the existing data. If set to False, the
    +            operation will fail with ResourceExistsError. The exception to the above is with Append
    +            blob types: if set to False and the data already exists, an error will not be raised
    +            and the data will be appended to the existing blob. If set overwrite=True, then the existing
    +            append blob will be deleted, and a new one created. Defaults to False.
    +        :keyword ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, upload_blob only succeeds if the
    +            blob's lease is active and matches this ID. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int max_concurrency:
    +            Maximum number of parallel connections to use when the blob size exceeds
    +            64MB.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :returns: Blob-updated property dict (Etag and last modified)
    +        :rtype: dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_hello_world.py
    +                :start-after: [START upload_a_blob]
    +                :end-before: [END upload_a_blob]
    +                :language: python
    +                :dedent: 12
    +                :caption: Upload a blob to the container.
    +        """
    +        options = self._upload_blob_options(
    +            data,
    +            blob_type=blob_type,
    +            length=length,
    +            metadata=metadata,
    +            **kwargs)
    +        if blob_type == BlobType.BlockBlob:
    +            return upload_block_blob(**options)
    +        if blob_type == BlobType.PageBlob:
    +            return upload_page_blob(**options)
    +        return upload_append_blob(**options)
    +
    +    def _download_blob_options(self, offset=None, length=None, **kwargs):
    +        # type: (Optional[int], Optional[int], **Any) -> Dict[str, Any]
    +        if self.require_encryption and not self.key_encryption_key:
    +            raise ValueError("Encryption required but no key was provided.")
    +        if length is not None and offset is None:
    +            raise ValueError("Offset value must not be None if length is set.")
    +        if length is not None:
    +            length = offset + length - 1  # Service actually uses an end-range inclusive index
    +
    +        validate_content = kwargs.pop('validate_content', False)
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'clients': self._client,
    +            'config': self._config,
    +            'start_range': offset,
    +            'end_range': length,
    +            'validate_content': validate_content,
    +            'encryption_options': {
    +                'required': self.require_encryption,
    +                'key': self.key_encryption_key,
    +                'resolver': self.key_resolver_function},
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_info': cpk_info,
    +            'cls': deserialize_blob_stream,
    +            'max_concurrency':kwargs.pop('max_concurrency', 1),
    +            'encoding': kwargs.pop('encoding', None),
    +            'timeout': kwargs.pop('timeout', None),
    +            'name': self.blob_name,
    +            'container': self.container_name}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def download_blob(self, offset=None, length=None, **kwargs):
    +        # type: (Optional[int], Optional[int], **Any) -> StorageStreamDownloader
    +        """Downloads a blob to the StorageStreamDownloader. The readall() method must
    +        be used to read all the content or readinto() must be used to download the blob into
    +        a stream.
    +
    +        :param int offset:
    +            Start of byte range to use for downloading a section of the blob.
    +            Must be set if length is provided.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, download_blob only
    +            succeeds if the blob's lease is active and matches this ID. Value can be a
    +            BlobLeaseClient object or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :keyword str encoding:
    +            Encoding to decode the downloaded bytes. Default is None, i.e. no decoding.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :returns: A streaming object (StorageStreamDownloader)
    +        :rtype: ~azure.storage.blob.StorageStreamDownloader
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_hello_world.py
    +                :start-after: [START download_a_blob]
    +                :end-before: [END download_a_blob]
    +                :language: python
    +                :dedent: 12
    +                :caption: Download a blob.
    +        """
    +        options = self._download_blob_options(
    +            offset=offset,
    +            length=length,
    +            **kwargs)
    +        return StorageStreamDownloader(**options)
    +
    +    @staticmethod
    +    def _generic_delete_blob_options(delete_snapshots=False, **kwargs):
    +        # type: (bool, **Any) -> Dict[str, Any]
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        if delete_snapshots:
    +            delete_snapshots = DeleteSnapshotsOptionType(delete_snapshots)
    +        options = {
    +            'timeout': kwargs.pop('timeout', None),
    +            'delete_snapshots': delete_snapshots or None,
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions}
    +        options.update(kwargs)
    +        return options
    +
    +    def _delete_blob_options(self, delete_snapshots=False, **kwargs):
    +        # type: (bool, **Any) -> Dict[str, Any]
    +        if self.snapshot and delete_snapshots:
    +            raise ValueError("The delete_snapshots option cannot be used with a specific snapshot.")
    +        options = self._generic_delete_blob_options(delete_snapshots, **kwargs)
    +        options['snapshot'] = self.snapshot
    +        return options
    +
    +    @distributed_trace
    +    def delete_blob(self, delete_snapshots=False, **kwargs):
    +        # type: (bool, **Any) -> None
    +        """Marks the specified blob for deletion.
    +
    +        The blob is later deleted during garbage collection.
    +        Note that in order to delete a blob, you must delete all of its
    +        snapshots. You can delete both at the same time with the delete_blob()
    +        operation.
    +
    +        If a delete retention policy is enabled for the service, then this operation soft deletes the blob
    +        and retains the blob for a specified number of days.
    +        After the specified number of days, the blob's data is removed from the service during garbage collection.
    +        Soft deleted blob is accessible through :func:`~ContainerClient.list_blobs()` specifying `include=['deleted']`
    +        option. Soft-deleted blob can be restored using :func:`undelete` operation.
    +
    +        :param str delete_snapshots:
    +            Required if the blob has associated snapshots. Values include:
    +             - "only": Deletes only the blobs snapshots.
    +             - "include": Deletes the blob along with all snapshots.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, delete_blob only
    +            succeeds if the blob's lease is active and matches this ID. Value can be a
    +            BlobLeaseClient object or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_hello_world.py
    +                :start-after: [START delete_blob]
    +                :end-before: [END delete_blob]
    +                :language: python
    +                :dedent: 12
    +                :caption: Delete a blob.
    +        """
    +        options = self._delete_blob_options(delete_snapshots=delete_snapshots, **kwargs)
    +        try:
    +            self._client.blob.delete(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def undelete_blob(self, **kwargs):
    +        # type: (**Any) -> None
    +        """Restores soft-deleted blobs or snapshots.
    +
    +        Operation will only be successful if used within the specified number of days
    +        set in the delete retention policy.
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START undelete_blob]
    +                :end-before: [END undelete_blob]
    +                :language: python
    +                :dedent: 8
    +                :caption: Undeleting a blob.
    +        """
    +        try:
    +            self._client.blob.undelete(timeout=kwargs.pop('timeout', None), **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def get_blob_properties(self, **kwargs):
    +        # type: (**Any) -> BlobProperties
    +        """Returns all user-defined metadata, standard HTTP properties, and
    +        system properties for the blob. It does not return the content of the blob.
    +
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: BlobProperties
    +        :rtype: ~azure.storage.blob.BlobProperties
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START get_blob_properties]
    +                :end-before: [END get_blob_properties]
    +                :language: python
    +                :dedent: 8
    +                :caption: Getting the properties for a blob.
    +        """
    +        # TODO: extract this out as _get_blob_properties_options
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        try:
    +            blob_props = self._client.blob.get_properties(
    +                timeout=kwargs.pop('timeout', None),
    +                snapshot=self.snapshot,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                cls=deserialize_blob_properties,
    +                cpk_info=cpk_info,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        blob_props.name = self.blob_name
    +        blob_props.container = self.container_name
    +        return blob_props # type: ignore
    +
    +    def _set_http_headers_options(self, content_settings=None, **kwargs):
    +        # type: (Optional[ContentSettings], **Any) -> Dict[str, Any]
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        blob_headers = None
    +        if content_settings:
    +            blob_headers = BlobHTTPHeaders(
    +                blob_cache_control=content_settings.cache_control,
    +                blob_content_type=content_settings.content_type,
    +                blob_content_md5=bytearray(content_settings.content_md5) if content_settings.content_md5 else None,
    +                blob_content_encoding=content_settings.content_encoding,
    +                blob_content_language=content_settings.content_language,
    +                blob_content_disposition=content_settings.content_disposition
    +            )
    +        options = {
    +            'timeout': kwargs.pop('timeout', None),
    +            'blob_http_headers': blob_headers,
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def set_http_headers(self, content_settings=None, **kwargs):
    +        # type: (Optional[ContentSettings], **Any) -> None
    +        """Sets system properties on the blob.
    +
    +        If one property is set for the content_settings, all properties will be overridden.
    +
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified)
    +        :rtype: Dict[str, Any]
    +        """
    +        options = self._set_http_headers_options(content_settings=content_settings, **kwargs)
    +        try:
    +            return self._client.blob.set_http_headers(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _set_blob_metadata_options(self, metadata=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], **Any) -> Dict[str, Any]
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        options = {
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers,
    +            'headers': headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def set_blob_metadata(self, metadata=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], **Any) -> Dict[str, Union[str, datetime]]
    +        """Sets user-defined metadata for the blob as one or more name-value pairs.
    +
    +        :param metadata:
    +            Dict containing name and value pairs. Each call to this operation
    +            replaces all existing metadata attached to the blob. To remove all
    +            metadata from the blob, call this operation with no metadata headers.
    +        :type metadata: dict(str, str)
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified)
    +        """
    +        options = self._set_blob_metadata_options(metadata=metadata, **kwargs)
    +        try:
    +            return self._client.blob.set_metadata(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _create_page_blob_options(  # type: ignore
    +            self, size,  # type: int
    +            content_settings=None,  # type: Optional[ContentSettings]
    +            metadata=None, # type: Optional[Dict[str, str]]
    +            premium_page_blob_tier=None,  # type: Optional[Union[str, PremiumPageBlobTier]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        blob_headers = None
    +        if content_settings:
    +            blob_headers = BlobHTTPHeaders(
    +                blob_cache_control=content_settings.cache_control,
    +                blob_content_type=content_settings.content_type,
    +                blob_content_md5=bytearray(content_settings.content_md5) if content_settings.content_md5 else None,
    +                blob_content_encoding=content_settings.content_encoding,
    +                blob_content_language=content_settings.content_language,
    +                blob_content_disposition=content_settings.content_disposition
    +            )
    +
    +        sequence_number = kwargs.pop('sequence_number', None)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        if premium_page_blob_tier:
    +            try:
    +                headers['x-ms-access-tier'] = premium_page_blob_tier.value  # type: ignore
    +            except AttributeError:
    +                headers['x-ms-access-tier'] = premium_page_blob_tier  # type: ignore
    +        options = {
    +            'content_length': 0,
    +            'blob_content_length': size,
    +            'blob_sequence_number': sequence_number,
    +            'blob_http_headers': blob_headers,
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers,
    +            'headers': headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def create_page_blob(  # type: ignore
    +            self, size,  # type: int
    +            content_settings=None,  # type: Optional[ContentSettings]
    +            metadata=None, # type: Optional[Dict[str, str]]
    +            premium_page_blob_tier=None,  # type: Optional[Union[str, PremiumPageBlobTier]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Creates a new Page Blob of the specified size.
    +
    +        :param int size:
    +            This specifies the maximum size for the page blob, up to 1 TB.
    +            The page blob size must be aligned to a 512-byte boundary.
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :param ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword int sequence_number:
    +            Only for Page blobs. The sequence number is a user-controlled value that you can use to
    +            track requests. The value of the sequence number must be between 0
    +            and 2^63 - 1.The default value is 0.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict[str, Any]
    +        """
    +        options = self._create_page_blob_options(
    +            size,
    +            content_settings=content_settings,
    +            metadata=metadata,
    +            premium_page_blob_tier=premium_page_blob_tier,
    +            **kwargs)
    +        try:
    +            return self._client.page_blob.create(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _create_append_blob_options(self, content_settings=None, metadata=None, **kwargs):
    +        # type: (Optional[ContentSettings], Optional[Dict[str, str]], **Any) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        blob_headers = None
    +        if content_settings:
    +            blob_headers = BlobHTTPHeaders(
    +                blob_cache_control=content_settings.cache_control,
    +                blob_content_type=content_settings.content_type,
    +                blob_content_md5=bytearray(content_settings.content_md5) if content_settings.content_md5 else None,
    +                blob_content_encoding=content_settings.content_encoding,
    +                blob_content_language=content_settings.content_language,
    +                blob_content_disposition=content_settings.content_disposition
    +            )
    +
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'content_length': 0,
    +            'blob_http_headers': blob_headers,
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers,
    +            'headers': headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def create_append_blob(self, content_settings=None, metadata=None, **kwargs):
    +        # type: (Optional[ContentSettings], Optional[Dict[str, str]], **Any) -> Dict[str, Union[str, datetime]]
    +        """Creates a new Append Blob.
    +
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict[str, Any]
    +        """
    +        options = self._create_append_blob_options(
    +            content_settings=content_settings,
    +            metadata=metadata,
    +            **kwargs)
    +        try:
    +            return self._client.append_blob.create(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _create_snapshot_options(self, metadata=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], **Any) -> Dict[str, Any]
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers,
    +            'headers': headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def create_snapshot(self, metadata=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], **Any) -> Dict[str, Union[str, datetime]]
    +        """Creates a snapshot of the blob.
    +
    +        A snapshot is a read-only version of a blob that's taken at a point in time.
    +        It can be read, copied, or deleted, but not modified. Snapshots provide a way
    +        to back up a blob as it appears at a moment in time.
    +
    +        A snapshot of a blob has the same name as the base blob from which the snapshot
    +        is taken, with a DateTime value appended to indicate the time at which the
    +        snapshot was taken.
    +
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Snapshot ID, Etag, and last modified).
    +        :rtype: dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START create_blob_snapshot]
    +                :end-before: [END create_blob_snapshot]
    +                :language: python
    +                :dedent: 8
    +                :caption: Create a snapshot of the blob.
    +        """
    +        options = self._create_snapshot_options(metadata=metadata, **kwargs)
    +        try:
    +            return self._client.blob.create_snapshot(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _start_copy_from_url_options(self, source_url, metadata=None, incremental_copy=False, **kwargs):
    +        # type: (str, Optional[Dict[str, str]], bool, **Any) -> Dict[str, Any]
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        if 'source_lease' in kwargs:
    +            source_lease = kwargs.pop('source_lease')
    +            try:
    +                headers['x-ms-source-lease-id'] = source_lease.id # type: str
    +            except AttributeError:
    +                headers['x-ms-source-lease-id'] = source_lease
    +
    +        tier = kwargs.pop('premium_page_blob_tier', None) or kwargs.pop('standard_blob_tier', None)
    +
    +        if kwargs.get('requires_sync'):
    +            headers['x-ms-requires-sync'] = str(kwargs.pop('requires_sync'))
    +
    +        timeout = kwargs.pop('timeout', None)
    +        dest_mod_conditions = get_modify_conditions(kwargs)
    +        options = {
    +            'copy_source': source_url,
    +            'timeout': timeout,
    +            'modified_access_conditions': dest_mod_conditions,
    +            'headers': headers,
    +            'cls': return_response_headers,
    +        }
    +        if not incremental_copy:
    +            source_mod_conditions = get_source_conditions(kwargs)
    +            dest_access_conditions = get_access_conditions(kwargs.pop('destination_lease', None))
    +            options['source_modified_access_conditions'] = source_mod_conditions
    +            options['lease_access_conditions'] = dest_access_conditions
    +            options['tier'] = tier.value if tier else None
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def start_copy_from_url(self, source_url, metadata=None, incremental_copy=False, **kwargs):
    +        # type: (str, Optional[Dict[str, str]], bool, **Any) -> Dict[str, Union[str, datetime]]
    +        """Copies a blob asynchronously.
    +
    +        This operation returns a copy operation
    +        object that can be used to wait on the completion of the operation,
    +        as well as check status or abort the copy operation.
    +        The Blob service copies blobs on a best-effort basis.
    +
    +        The source blob for a copy operation may be a block blob, an append blob,
    +        or a page blob. If the destination blob already exists, it must be of the
    +        same blob type as the source blob. Any existing destination blob will be
    +        overwritten. The destination blob cannot be modified while a copy operation
    +        is in progress.
    +
    +        When copying from a page blob, the Blob service creates a destination page
    +        blob of the source blob's length, initially containing all zeroes. Then
    +        the source page ranges are enumerated, and non-empty ranges are copied.
    +
    +        For a block blob or an append blob, the Blob service creates a committed
    +        blob of zero length before returning from this operation. When copying
    +        from a block blob, all committed blocks and their block IDs are copied.
    +        Uncommitted blocks are not copied. At the end of the copy operation, the
    +        destination blob will have the same committed block count as the source.
    +
    +        When copying from an append blob, all committed blocks are copied. At the
    +        end of the copy operation, the destination blob will have the same committed
    +        block count as the source.
    +
    +        For all blob types, you can call status() on the returned polling object
    +        to check the status of the copy operation, or wait() to block until the
    +        operation is complete. The final blob will be committed when the copy completes.
    +
    +        :param str source_url:
    +            A URL of up to 2 KB in length that specifies a file or blob.
    +            The value should be URL-encoded as it would appear in a request URI.
    +            If the source is in another account, the source must either be public
    +            or must be authenticated via a shared access signature. If the source
    +            is public, no authentication is required.
    +            Examples:
    +            https://myaccount.blob.core.windows.net/mycontainer/myblob
    +
    +            https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=
    +
    +            https://otheraccount.blob.core.windows.net/mycontainer/myblob?sastoken
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata. If no name-value
    +            pairs are specified, the operation will copy the metadata from the
    +            source blob or file to the destination blob. If one or more name-value
    +            pairs are specified, the destination blob is created with the specified
    +            metadata, and metadata is not copied from the source blob or file.
    +        :type metadata: dict(str, str)
    +        :param bool incremental_copy:
    +            Copies the snapshot of the source page blob to a destination page blob.
    +            The snapshot is copied such that only the differential changes between
    +            the previously copied snapshot are transferred to the destination.
    +            The copied snapshots are complete copies of the original snapshot and
    +            can be read or copied from as usual. Defaults to False.
    +        :keyword ~datetime.datetime source_if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only if the source
    +            blob has been modified since the specified date/time.
    +        :keyword ~datetime.datetime source_if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only if the source blob
    +            has not been modified since the specified date/time.
    +        :keyword str source_etag:
    +            The source ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions source_match_condition:
    +            The source match condition to use upon the etag.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only
    +            if the destination blob has been modified since the specified date/time.
    +            If the destination blob has not been modified, the Blob service returns
    +            status code 412 (Precondition Failed).
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only
    +            if the destination blob has not been modified since the specified
    +            date/time. If the destination blob has been modified, the Blob service
    +            returns status code 412 (Precondition Failed).
    +        :keyword str etag:
    +            The destination ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The destination match condition to use upon the etag.
    +        :keyword destination_lease:
    +            The lease ID specified for this header must match the lease ID of the
    +            destination blob. If the request does not include the lease ID or it is not
    +            valid, the operation fails with status code 412 (Precondition Failed).
    +        :paramtype destination_lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword source_lease:
    +            Specify this to perform the Copy Blob operation only if
    +            the lease ID given matches the active lease ID of the source blob.
    +        :paramtype source_lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword ~azure.storage.blob.RehydratePriority rehydrate_priority:
    +            Indicates the priority with which to rehydrate an archived blob
    +        :keyword bool requires_sync:
    +            Enforces that the service will not return a response until the copy is complete.
    +        :returns: A dictionary of copy properties (etag, last_modified, copy_id, copy_status).
    +        :rtype: dict[str, str or ~datetime.datetime]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START copy_blob_from_url]
    +                :end-before: [END copy_blob_from_url]
    +                :language: python
    +                :dedent: 12
    +                :caption: Copy a blob from a URL.
    +        """
    +        options = self._start_copy_from_url_options(
    +            source_url,
    +            metadata=metadata,
    +            incremental_copy=incremental_copy,
    +            **kwargs)
    +        try:
    +            if incremental_copy:
    +                return self._client.page_blob.copy_incremental(**options)
    +            return self._client.blob.start_copy_from_url(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _abort_copy_options(self, copy_id, **kwargs):
    +        # type: (Union[str, Dict[str, Any], BlobProperties], **Any) -> Dict[str, Any]
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        try:
    +            copy_id = copy_id.copy.id
    +        except AttributeError:
    +            try:
    +                copy_id = copy_id['copy_id']
    +            except TypeError:
    +                pass
    +        options = {
    +            'copy_id': copy_id,
    +            'lease_access_conditions': access_conditions,
    +            'timeout': kwargs.pop('timeout', None)}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def abort_copy(self, copy_id, **kwargs):
    +        # type: (Union[str, Dict[str, Any], BlobProperties], **Any) -> None
    +        """Abort an ongoing copy operation.
    +
    +        This will leave a destination blob with zero length and full metadata.
    +        This will raise an error if the copy operation has already ended.
    +
    +        :param copy_id:
    +            The copy operation to abort. This can be either an ID string, or an
    +            instance of BlobProperties.
    +        :type copy_id: str or ~azure.storage.blob.BlobProperties
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START abort_copy_blob_from_url]
    +                :end-before: [END abort_copy_blob_from_url]
    +                :language: python
    +                :dedent: 12
    +                :caption: Abort copying a blob from URL.
    +        """
    +        options = self._abort_copy_options(copy_id, **kwargs)
    +        try:
    +            self._client.blob.abort_copy_from_url(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def acquire_lease(self, lease_duration=-1, lease_id=None, **kwargs):
    +        # type: (int, Optional[str], **Any) -> BlobLeaseClient
    +        """Requests a new lease.
    +
    +        If the blob does not have an active lease, the Blob
    +        Service creates a lease on the blob and returns a new lease.
    +
    +        :param int lease_duration:
    +            Specifies the duration of the lease, in seconds, or negative one
    +            (-1) for a lease that never expires. A non-infinite lease can be
    +            between 15 and 60 seconds. A lease duration cannot be changed
    +            using renew or change. Default is -1 (infinite lease).
    +        :param str lease_id:
    +            Proposed lease ID, in a GUID string format. The Blob Service
    +            returns 400 (Invalid request) if the proposed lease ID is not
    +            in the correct format.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: A BlobLeaseClient object.
    +        :rtype: ~azure.storage.blob.BlobLeaseClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START acquire_lease_on_blob]
    +                :end-before: [END acquire_lease_on_blob]
    +                :language: python
    +                :dedent: 8
    +                :caption: Acquiring a lease on a blob.
    +        """
    +        lease = BlobLeaseClient(self, lease_id=lease_id) # type: ignore
    +        lease.acquire(lease_duration=lease_duration, **kwargs)
    +        return lease
    +
    +    @distributed_trace
    +    def set_standard_blob_tier(self, standard_blob_tier, **kwargs):
    +        # type: (Union[str, StandardBlobTier], Any) -> None
    +        """This operation sets the tier on a block blob.
    +
    +        A block blob's tier determines Hot/Cool/Archive storage type.
    +        This operation does not update the blob's ETag.
    +
    +        :param standard_blob_tier:
    +            Indicates the tier to be set on the blob. Options include 'Hot', 'Cool',
    +            'Archive'. The hot tier is optimized for storing data that is accessed
    +            frequently. The cool storage tier is optimized for storing data that
    +            is infrequently accessed and stored for at least a month. The archive
    +            tier is optimized for storing data that is rarely accessed and stored
    +            for at least six months with flexible latency requirements.
    +        :type standard_blob_tier: str or ~azure.storage.blob.StandardBlobTier
    +        :keyword ~azure.storage.blob.RehydratePriority rehydrate_priority:
    +            Indicates the priority with which to rehydrate an archived blob
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :rtype: None
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if standard_blob_tier is None:
    +            raise ValueError("A StandardBlobTier must be specified")
    +        try:
    +            self._client.blob.set_tier(
    +                tier=standard_blob_tier,
    +                timeout=kwargs.pop('timeout', None),
    +                lease_access_conditions=access_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _stage_block_options(
    +            self, block_id,  # type: str
    +            data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +        block_id = encode_base64(str(block_id))
    +        if isinstance(data, six.text_type):
    +            data = data.encode(kwargs.pop('encoding', 'UTF-8'))  # type: ignore
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if length is None:
    +            length = get_length(data)
    +            if length is None:
    +                length, data = read_length(data)
    +        if isinstance(data, bytes):
    +            data = data[:length]
    +
    +        validate_content = kwargs.pop('validate_content', False)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'block_id': block_id,
    +            'content_length': length,
    +            'body': data,
    +            'transactional_content_md5': None,
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'validate_content': validate_content,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +        }
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def stage_block(
    +            self, block_id,  # type: str
    +            data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Creates a new block to be committed as part of a blob.
    +
    +        :param str block_id: A valid Base64 string value that identifies the
    +             block. Prior to encoding, the string must be less than or equal to 64
    +             bytes in size. For a given blob, the length of the value specified for
    +             the block_id parameter must be the same size for each block.
    +        :param data: The blob data.
    +        :param int length: Size of the block.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        options = self._stage_block_options(
    +            block_id,
    +            data,
    +            length=length,
    +            **kwargs)
    +        try:
    +            self._client.block_blob.stage_block(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _stage_block_from_url_options(
    +            self, block_id,  # type: str
    +            source_url,  # type: str
    +            source_offset=None,  # type: Optional[int]
    +            source_length=None,  # type: Optional[int]
    +            source_content_md5=None,  # type: Optional[Union[bytes, bytearray]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if source_length is not None and source_offset is None:
    +            raise ValueError("Source offset value must not be None if length is set.")
    +        if source_length is not None:
    +            source_length = source_offset + source_length - 1
    +        block_id = encode_base64(str(block_id))
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        range_header = None
    +        if source_offset is not None:
    +            range_header, _ = validate_and_format_range_headers(source_offset, source_length)
    +
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        options = {
    +            'block_id': block_id,
    +            'content_length': 0,
    +            'source_url': source_url,
    +            'source_range': range_header,
    +            'source_content_md5': bytearray(source_content_md5) if source_content_md5 else None,
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers,
    +        }
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def stage_block_from_url(
    +            self, block_id,  # type: str
    +            source_url,  # type: str
    +            source_offset=None,  # type: Optional[int]
    +            source_length=None,  # type: Optional[int]
    +            source_content_md5=None,  # type: Optional[Union[bytes, bytearray]]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Creates a new block to be committed as part of a blob where
    +        the contents are read from a URL.
    +
    +        :param str block_id: A valid Base64 string value that identifies the
    +             block. Prior to encoding, the string must be less than or equal to 64
    +             bytes in size. For a given blob, the length of the value specified for
    +             the block_id parameter must be the same size for each block.
    +        :param str source_url: The URL.
    +        :param int source_offset:
    +            Start of byte range to use for the block.
    +            Must be set if source length is provided.
    +        :param int source_length: The size of the block in bytes.
    +        :param bytearray source_content_md5:
    +            Specify the md5 calculated for the range of
    +            bytes that must be read from the copy source.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        options = self._stage_block_from_url_options(
    +            block_id,
    +            source_url,
    +            source_offset=source_offset,
    +            source_length=source_length,
    +            source_content_md5=source_content_md5,
    +            **kwargs)
    +        try:
    +            self._client.block_blob.stage_block_from_url(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _get_block_list_result(self, blocks):
    +        # type: (BlockList) -> Tuple[List[BlobBlock], List[BlobBlock]]
    +        committed = [] # type: List
    +        uncommitted = [] # type: List
    +        if blocks.committed_blocks:
    +            committed = [BlobBlock._from_generated(b) for b in blocks.committed_blocks]  # pylint: disable=protected-access
    +        if blocks.uncommitted_blocks:
    +            uncommitted = [BlobBlock._from_generated(b) for b in blocks.uncommitted_blocks]  # pylint: disable=protected-access
    +        return committed, uncommitted
    +
    +    @distributed_trace
    +    def get_block_list(self, block_list_type="committed", **kwargs):
    +        # type: (Optional[str], **Any) -> Tuple[List[BlobBlock], List[BlobBlock]]
    +        """The Get Block List operation retrieves the list of blocks that have
    +        been uploaded as part of a block blob.
    +
    +        :param str block_list_type:
    +            Specifies whether to return the list of committed
    +            blocks, the list of uncommitted blocks, or both lists together.
    +            Possible values include: 'committed', 'uncommitted', 'all'
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: A tuple of two lists - committed and uncommitted blocks
    +        :rtype: tuple(list(~azure.storage.blob.BlobBlock), list(~azure.storage.blob.BlobBlock))
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        try:
    +            blocks = self._client.block_blob.get_block_list(
    +                list_type=block_list_type,
    +                snapshot=self.snapshot,
    +                timeout=kwargs.pop('timeout', None),
    +                lease_access_conditions=access_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return self._get_block_list_result(blocks)
    +
    +    def _commit_block_list_options( # type: ignore
    +            self, block_list,  # type: List[BlobBlock]
    +            content_settings=None,  # type: Optional[ContentSettings]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +        block_lookup = BlockLookupList(committed=[], uncommitted=[], latest=[])
    +        for block in block_list:
    +            try:
    +                if block.state.value == 'committed':
    +                    block_lookup.committed.append(encode_base64(str(block.id)))
    +                elif block.state.value == 'uncommitted':
    +                    block_lookup.uncommitted.append(encode_base64(str(block.id)))
    +                else:
    +                    block_lookup.latest.append(encode_base64(str(block.id)))
    +            except AttributeError:
    +                block_lookup.latest.append(encode_base64(str(block)))
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        blob_headers = None
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        if content_settings:
    +            blob_headers = BlobHTTPHeaders(
    +                blob_cache_control=content_settings.cache_control,
    +                blob_content_type=content_settings.content_type,
    +                blob_content_md5=bytearray(content_settings.content_md5) if content_settings.content_md5 else None,
    +                blob_content_encoding=content_settings.content_encoding,
    +                blob_content_language=content_settings.content_language,
    +                blob_content_disposition=content_settings.content_disposition
    +            )
    +
    +        validate_content = kwargs.pop('validate_content', False)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        tier = kwargs.pop('standard_blob_tier', None)
    +
    +        options = {
    +            'blocks': block_lookup,
    +            'blob_http_headers': blob_headers,
    +            'lease_access_conditions': access_conditions,
    +            'timeout': kwargs.pop('timeout', None),
    +            'modified_access_conditions': mod_conditions,
    +            'cls': return_response_headers,
    +            'validate_content': validate_content,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'tier': tier.value if tier else None,
    +            'headers': headers
    +        }
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def commit_block_list( # type: ignore
    +            self, block_list,  # type: List[BlobBlock]
    +            content_settings=None,  # type: Optional[ContentSettings]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """The Commit Block List operation writes a blob by specifying the list of
    +        block IDs that make up the blob.
    +
    +        :param list block_list:
    +            List of Blockblobs.
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict[str, str]
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash of the page content. The storage
    +            service checks the hash of the content that has arrived
    +            with the hash that was sent. This is primarily valuable for detecting
    +            bitflips on the wire if using http instead of https, as https (the default),
    +            will already validate. Note that this MD5 hash is not stored with the
    +            blob.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._commit_block_list_options(
    +            block_list,
    +            content_settings=content_settings,
    +            metadata=metadata,
    +            **kwargs)
    +        try:
    +            return self._client.block_blob.commit_block_list(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def set_premium_page_blob_tier(self, premium_page_blob_tier, **kwargs):
    +        # type: (Union[str, PremiumPageBlobTier], **Any) -> None
    +        """Sets the page blob tiers on the blob. This API is only supported for page blobs on premium accounts.
    +
    +        :param premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :type premium_page_blob_tier: ~azure.storage.blob.PremiumPageBlobTier
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :rtype: None
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if premium_page_blob_tier is None:
    +            raise ValueError("A PremiumPageBlobTier must be specified")
    +        try:
    +            self._client.blob.set_tier(
    +                tier=premium_page_blob_tier,
    +                timeout=kwargs.pop('timeout', None),
    +                lease_access_conditions=access_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _get_page_ranges_options( # type: ignore
    +            self, offset=None, # type: Optional[int]
    +            length=None, # type: Optional[int]
    +            previous_snapshot_diff=None,  # type: Optional[Union[str, Dict[str, Any]]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        if length is not None and offset is None:
    +            raise ValueError("Offset value must not be None if length is set.")
    +        if length is not None:
    +            length = offset + length - 1  # Reformat to an inclusive range index
    +        page_range, _ = validate_and_format_range_headers(
    +            offset, length, start_range_required=False, end_range_required=False, align_to_page=True
    +        )
    +        options = {
    +            'snapshot': self.snapshot,
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'timeout': kwargs.pop('timeout', None),
    +            'range': page_range}
    +        if previous_snapshot_diff:
    +            try:
    +                options['prevsnapshot'] = previous_snapshot_diff.snapshot # type: ignore
    +            except AttributeError:
    +                try:
    +                    options['prevsnapshot'] = previous_snapshot_diff['snapshot'] # type: ignore
    +                except TypeError:
    +                    options['prevsnapshot'] = previous_snapshot_diff
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def get_page_ranges( # type: ignore
    +            self, offset=None, # type: Optional[int]
    +            length=None, # type: Optional[int]
    +            previous_snapshot_diff=None,  # type: Optional[Union[str, Dict[str, Any]]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Tuple[List[Dict[str, int]], List[Dict[str, int]]]
    +        """Returns the list of valid page ranges for a Page Blob or snapshot
    +        of a page blob.
    +
    +        :param int offset:
    +            Start of byte range to use for getting valid page ranges.
    +            If no length is given, all bytes after the offset will be searched.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for getting valid page ranges.
    +            If length is given, offset must be provided.
    +            This range will return valid page ranges from the offset start up to
    +            the specified length.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param str previous_snapshot_diff:
    +            The snapshot diff parameter that contains an opaque DateTime value that
    +            specifies a previous blob snapshot to be compared
    +            against a more recent snapshot or the current blob.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns:
    +            A tuple of two lists of page ranges as dictionaries with 'start' and 'end' keys.
    +            The first element are filled page ranges, the 2nd element is cleared page ranges.
    +        :rtype: tuple(list(dict(str, str), list(dict(str, str))
    +        """
    +        options = self._get_page_ranges_options(
    +            offset=offset,
    +            length=length,
    +            previous_snapshot_diff=previous_snapshot_diff,
    +            **kwargs)
    +        try:
    +            if previous_snapshot_diff:
    +                ranges = self._client.page_blob.get_page_ranges_diff(**options)
    +            else:
    +                ranges = self._client.page_blob.get_page_ranges(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return get_page_ranges_result(ranges)
    +
    +    @distributed_trace
    +    def get_page_range_diff_for_managed_disk(
    +            self, previous_snapshot_url,  # type: str
    +            offset=None, # type: Optional[int]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> Tuple[List[Dict[str, int]], List[Dict[str, int]]]
    +        """Returns the list of valid page ranges for a managed disk or snapshot.
    +
    +        .. note::
    +            This operation is only available for managed disk accounts.
    +
    +        .. versionadded:: 12.2.0
    +            This operation was introduced in API version '2019-07-07'.
    +
    +        :param previous_snapshot_url:
    +            Specifies the URL of a previous snapshot of the managed disk.
    +            The response will only contain pages that were changed between the target blob and
    +            its previous snapshot.
    +        :param int offset:
    +            Start of byte range to use for getting valid page ranges.
    +            If no length is given, all bytes after the offset will be searched.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for getting valid page ranges.
    +            If length is given, offset must be provided.
    +            This range will return valid page ranges from the offset start up to
    +            the specified length.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns:
    +            A tuple of two lists of page ranges as dictionaries with 'start' and 'end' keys.
    +            The first element are filled page ranges, the 2nd element is cleared page ranges.
    +        :rtype: tuple(list(dict(str, str), list(dict(str, str))
    +        """
    +        options = self._get_page_ranges_options(
    +            offset=offset,
    +            length=length,
    +            prev_snapshot_url=previous_snapshot_url,
    +            **kwargs)
    +        try:
    +            ranges = self._client.page_blob.get_page_ranges_diff(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return get_page_ranges_result(ranges)
    +
    +    def _set_sequence_number_options(self, sequence_number_action, sequence_number=None, **kwargs):
    +        # type: (Union[str, SequenceNumberAction], Optional[str], **Any) -> Dict[str, Any]
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        if sequence_number_action is None:
    +            raise ValueError("A sequence number action must be specified")
    +        options = {
    +            'sequence_number_action': sequence_number_action,
    +            'timeout': kwargs.pop('timeout', None),
    +            'blob_sequence_number': sequence_number,
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def set_sequence_number(self, sequence_number_action, sequence_number=None, **kwargs):
    +        # type: (Union[str, SequenceNumberAction], Optional[str], **Any) -> Dict[str, Union[str, datetime]]
    +        """Sets the blob sequence number.
    +
    +        :param str sequence_number_action:
    +            This property indicates how the service should modify the blob's sequence
    +            number. See :class:`~azure.storage.blob.SequenceNumberAction` for more information.
    +        :param str sequence_number:
    +            This property sets the blob's sequence number. The sequence number is a
    +            user-controlled property that you can use to track requests and manage
    +            concurrency issues.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._set_sequence_number_options(
    +            sequence_number_action, sequence_number=sequence_number, **kwargs)
    +        try:
    +            return self._client.page_blob.update_sequence_number(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _resize_blob_options(self, size, **kwargs):
    +        # type: (int, **Any) -> Dict[str, Any]
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        if size is None:
    +            raise ValueError("A content length must be specified for a Page Blob.")
    +
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        options = {
    +            'blob_content_length': size,
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def resize_blob(self, size, **kwargs):
    +        # type: (int, **Any) -> Dict[str, Union[str, datetime]]
    +        """Resizes a page blob to the specified size.
    +
    +        If the specified value is less than the current size of the blob,
    +        then all pages above the specified value are cleared.
    +
    +        :param int size:
    +            Size used to resize blob. Maximum size for a page blob is up to 1 TB.
    +            The page blob size must be aligned to a 512-byte boundary.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._resize_blob_options(size, **kwargs)
    +        try:
    +            return self._client.page_blob.resize(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _upload_page_options( # type: ignore
    +            self, page,  # type: bytes
    +            offset,  # type: int
    +            length,  # type: int
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if isinstance(page, six.text_type):
    +            page = page.encode(kwargs.pop('encoding', 'UTF-8'))
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +
    +        if offset is None or offset % 512 != 0:
    +            raise ValueError("offset must be an integer that aligns with 512 page size")
    +        if length is None or length % 512 != 0:
    +            raise ValueError("length must be an integer that aligns with 512 page size")
    +        end_range = offset + length - 1  # Reformat to an inclusive range index
    +        content_range = 'bytes={0}-{1}'.format(offset, end_range) # type: ignore
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        seq_conditions = SequenceNumberAccessConditions(
    +            if_sequence_number_less_than_or_equal_to=kwargs.pop('if_sequence_number_lte', None),
    +            if_sequence_number_less_than=kwargs.pop('if_sequence_number_lt', None),
    +            if_sequence_number_equal_to=kwargs.pop('if_sequence_number_eq', None)
    +        )
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        validate_content = kwargs.pop('validate_content', False)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        options = {
    +            'body': page[:length],
    +            'content_length': length,
    +            'transactional_content_md5': None,
    +            'timeout': kwargs.pop('timeout', None),
    +            'range': content_range,
    +            'lease_access_conditions': access_conditions,
    +            'sequence_number_access_conditions': seq_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'validate_content': validate_content,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def upload_page( # type: ignore
    +            self, page,  # type: bytes
    +            offset,  # type: int
    +            length,  # type: int
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """The Upload Pages operation writes a range of pages to a page blob.
    +
    +        :param bytes page:
    +            Content of the page.
    +        :param int offset:
    +            Start of byte range to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length  must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash of the page content. The storage
    +            service checks the hash of the content that has arrived
    +            with the hash that was sent. This is primarily valuable for detecting
    +            bitflips on the wire if using http instead of https, as https (the default),
    +            will already validate. Note that this MD5 hash is not stored with the
    +            blob.
    +        :keyword int if_sequence_number_lte:
    +            If the blob's sequence number is less than or equal to
    +            the specified value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_lt:
    +            If the blob's sequence number is less than the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_eq:
    +            If the blob's sequence number is equal to the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._upload_page_options(
    +            page=page,
    +            offset=offset,
    +            length=length,
    +            **kwargs)
    +        try:
    +            return self._client.page_blob.upload_pages(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _upload_pages_from_url_options(  # type: ignore
    +            self, source_url,  # type: str
    +            offset,  # type: int
    +            length,  # type: int
    +            source_offset,  # type: int
    +            **kwargs
    +    ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +
    +        # TODO: extract the code to a method format_range
    +        if offset is None or offset % 512 != 0:
    +            raise ValueError("offset must be an integer that aligns with 512 page size")
    +        if length is None or length % 512 != 0:
    +            raise ValueError("length must be an integer that aligns with 512 page size")
    +        if source_offset is None or offset % 512 != 0:
    +            raise ValueError("source_offset must be an integer that aligns with 512 page size")
    +
    +        # Format range
    +        end_range = offset + length - 1
    +        destination_range = 'bytes={0}-{1}'.format(offset, end_range)
    +        source_range = 'bytes={0}-{1}'.format(source_offset, source_offset + length - 1)  # should subtract 1 here?
    +
    +        seq_conditions = SequenceNumberAccessConditions(
    +            if_sequence_number_less_than_or_equal_to=kwargs.pop('if_sequence_number_lte', None),
    +            if_sequence_number_less_than=kwargs.pop('if_sequence_number_lt', None),
    +            if_sequence_number_equal_to=kwargs.pop('if_sequence_number_eq', None)
    +        )
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        source_mod_conditions = get_source_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        source_content_md5 = kwargs.pop('source_content_md5', None)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'source_url': source_url,
    +            'content_length': 0,
    +            'source_range': source_range,
    +            'range': destination_range,
    +            'source_content_md5': bytearray(source_content_md5) if source_content_md5 else None,
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'sequence_number_access_conditions': seq_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'source_modified_access_conditions': source_mod_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def upload_pages_from_url(self, source_url,  # type: str
    +                              offset,  # type: int
    +                              length,  # type: int
    +                              source_offset,  # type: int
    +                              **kwargs
    +                              ):
    +        # type: (...) -> Dict[str, Any]
    +        """
    +        The Upload Pages operation writes a range of pages to a page blob where
    +        the contents are read from a URL.
    +
    +        :param str source_url:
    +            The URL of the source data. It can point to any Azure Blob or File, that is either public or has a
    +            shared access signature attached.
    +        :param int offset:
    +            Start of byte range to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length  must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int source_offset:
    +            This indicates the start of the range of bytes(inclusive) that has to be taken from the copy source.
    +            The service will read the same number of bytes as the destination range (length-offset).
    +        :keyword bytes source_content_md5:
    +            If given, the service will calculate the MD5 hash of the block content and compare against this value.
    +        :keyword ~datetime.datetime source_if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the source resource has been modified since the specified time.
    +        :keyword ~datetime.datetime source_if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the source resource has not been modified since the specified date/time.
    +        :keyword str source_etag:
    +            The source ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions source_match_condition:
    +            The source match condition to use upon the etag.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword int if_sequence_number_lte:
    +            If the blob's sequence number is less than or equal to
    +            the specified value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_lt:
    +            If the blob's sequence number is less than the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_eq:
    +            If the blob's sequence number is equal to the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            The destination ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The destination match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        """
    +        options = self._upload_pages_from_url_options(
    +            source_url=source_url,
    +            offset=offset,
    +            length=length,
    +            source_offset=source_offset,
    +            **kwargs
    +        )
    +        try:
    +            return self._client.page_blob.upload_pages_from_url(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _clear_page_options(self, offset, length, **kwargs):
    +        # type: (int, int, **Any) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        seq_conditions = SequenceNumberAccessConditions(
    +            if_sequence_number_less_than_or_equal_to=kwargs.pop('if_sequence_number_lte', None),
    +            if_sequence_number_less_than=kwargs.pop('if_sequence_number_lt', None),
    +            if_sequence_number_equal_to=kwargs.pop('if_sequence_number_eq', None)
    +        )
    +        mod_conditions = get_modify_conditions(kwargs)
    +        if offset is None or offset % 512 != 0:
    +            raise ValueError("offset must be an integer that aligns with 512 page size")
    +        if length is None or length % 512 != 0:
    +            raise ValueError("length must be an integer that aligns with 512 page size")
    +        end_range = length + offset - 1  # Reformat to an inclusive range index
    +        content_range = 'bytes={0}-{1}'.format(offset, end_range)
    +
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'content_length': 0,
    +            'timeout': kwargs.pop('timeout', None),
    +            'range': content_range,
    +            'lease_access_conditions': access_conditions,
    +            'sequence_number_access_conditions': seq_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def clear_page(self, offset, length, **kwargs):
    +        # type: (int, int, **Any) -> Dict[str, Union[str, datetime]]
    +        """Clears a range of pages.
    +
    +        :param int offset:
    +            Start of byte range to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword int if_sequence_number_lte:
    +            If the blob's sequence number is less than or equal to
    +            the specified value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_lt:
    +            If the blob's sequence number is less than the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_eq:
    +            If the blob's sequence number is equal to the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._clear_page_options(offset, length, **kwargs)
    +        try:
    +            return self._client.page_blob.clear_pages(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _append_block_options( # type: ignore
    +            self, data,  # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +
    +        if isinstance(data, six.text_type):
    +            data = data.encode(kwargs.pop('encoding', 'UTF-8')) # type: ignore
    +        if length is None:
    +            length = get_length(data)
    +            if length is None:
    +                length, data = read_length(data)
    +        if length == 0:
    +            return {}
    +        if isinstance(data, bytes):
    +            data = data[:length]
    +
    +        appendpos_condition = kwargs.pop('appendpos_condition', None)
    +        maxsize_condition = kwargs.pop('maxsize_condition', None)
    +        validate_content = kwargs.pop('validate_content', False)
    +        append_conditions = None
    +        if maxsize_condition or appendpos_condition is not None:
    +            append_conditions = AppendPositionAccessConditions(
    +                max_size=maxsize_condition,
    +                append_position=appendpos_condition
    +            )
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        options = {
    +            'body': data,
    +            'content_length': length,
    +            'timeout': kwargs.pop('timeout', None),
    +            'transactional_content_md5': None,
    +            'lease_access_conditions': access_conditions,
    +            'append_position_access_conditions': append_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'validate_content': validate_content,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def append_block( # type: ignore
    +            self, data,  # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime, int]]
    +        """Commits a new block of data to the end of the existing append blob.
    +
    +        :param data:
    +            Content of the block. This can be bytes, text, an iterable or a file-like object.
    +        :type data: bytes or str or Iterable
    +        :param int length:
    +            Size of the block in bytes.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash of the block content. The storage
    +            service checks the hash of the content that has arrived
    +            with the hash that was sent. This is primarily valuable for detecting
    +            bitflips on the wire if using http instead of https, as https (the default),
    +            will already validate. Note that this MD5 hash is not stored with the
    +            blob.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int appendpos_condition:
    +            Optional conditional header, used only for the Append Block operation.
    +            A number indicating the byte offset to compare. Append Block will
    +            succeed only if the append position is equal to this number. If it
    +            is not, the request will fail with the AppendPositionConditionNotMet error
    +            (HTTP status code 412 - Precondition Failed).
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag, last modified, append offset, committed block count).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._append_block_options(
    +            data,
    +            length=length,
    +            **kwargs
    +        )
    +        try:
    +            return self._client.append_blob.append_block(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _append_block_from_url_options(  # type: ignore
    +            self, copy_source_url,  # type: str
    +            source_offset=None,  # type: Optional[int]
    +            source_length=None,  # type: Optional[int]
    +            **kwargs
    +    ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +
    +        # If end range is provided, start range must be provided
    +        if source_length is not None and source_offset is None:
    +            raise ValueError("source_offset should also be specified if source_length is specified")
    +        # Format based on whether length is present
    +        source_range = None
    +        if source_length is not None:
    +            end_range = source_offset + source_length - 1
    +            source_range = 'bytes={0}-{1}'.format(source_offset, end_range)
    +        elif source_offset is not None:
    +            source_range = "bytes={0}-".format(source_offset)
    +
    +        appendpos_condition = kwargs.pop('appendpos_condition', None)
    +        maxsize_condition = kwargs.pop('maxsize_condition', None)
    +        source_content_md5 = kwargs.pop('source_content_md5', None)
    +        append_conditions = None
    +        if maxsize_condition or appendpos_condition is not None:
    +            append_conditions = AppendPositionAccessConditions(
    +                max_size=maxsize_condition,
    +                append_position=appendpos_condition
    +            )
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        source_mod_conditions = get_source_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'source_url': copy_source_url,
    +            'content_length': 0,
    +            'source_range': source_range,
    +            'source_content_md5': source_content_md5,
    +            'transactional_content_md5': None,
    +            'lease_access_conditions': access_conditions,
    +            'append_position_access_conditions': append_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'source_modified_access_conditions': source_mod_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers,
    +            'timeout': kwargs.pop('timeout', None)}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def append_block_from_url(self, copy_source_url,  # type: str
    +                              source_offset=None,  # type: Optional[int]
    +                              source_length=None,  # type: Optional[int]
    +                              **kwargs):
    +        # type: (...) -> Dict[str, Union[str, datetime, int]]
    +        """
    +        Creates a new block to be committed as part of a blob, where the contents are read from a source url.
    +
    +        :param str copy_source_url:
    +            The URL of the source data. It can point to any Azure Blob or File, that is either public or has a
    +            shared access signature attached.
    +        :param int source_offset:
    +            This indicates the start of the range of bytes (inclusive) that has to be taken from the copy source.
    +        :param int source_length:
    +            This indicates the end of the range of bytes that has to be taken from the copy source.
    +        :keyword bytearray source_content_md5:
    +            If given, the service will calculate the MD5 hash of the block content and compare against this value.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int appendpos_condition:
    +            Optional conditional header, used only for the Append Block operation.
    +            A number indicating the byte offset to compare. Append Block will
    +            succeed only if the append position is equal to this number. If it
    +            is not, the request will fail with the
    +            AppendPositionConditionNotMet error
    +            (HTTP status code 412 - Precondition Failed).
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            The destination ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The destination match condition to use upon the etag.
    +        :keyword ~datetime.datetime source_if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the source resource has been modified since the specified time.
    +        :keyword ~datetime.datetime source_if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the source resource has not been modified since the specified date/time.
    +        :keyword str source_etag:
    +            The source ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions source_match_condition:
    +            The source match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        """
    +        options = self._append_block_from_url_options(
    +            copy_source_url,
    +            source_offset=source_offset,
    +            source_length=source_length,
    +            **kwargs
    +        )
    +        try:
    +            return self._client.append_blob.append_block_from_url(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_blob_service_client.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_blob_service_client.py
    new file mode 100644
    index 000000000000..787089422353
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_blob_service_client.py
    @@ -0,0 +1,615 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import functools
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, Dict, List,
    +    TYPE_CHECKING
    +)
    +
    +try:
    +    from urllib.parse import urlparse
    +except ImportError:
    +    from urlparse import urlparse # type: ignore
    +
    +from azure.core.paging import ItemPaged
    +from azure.core.pipeline import Pipeline
    +from azure.core.tracing.decorator import distributed_trace
    +
    +from ._shared.models import LocationMode
    +from ._shared.base_client import StorageAccountHostsMixin, TransportWrapper, parse_connection_str, parse_query
    +from ._shared.parser import _to_utc_datetime
    +from ._shared.response_handlers import return_response_headers, process_storage_error, \
    +    parse_to_internal_user_delegation_key
    +from ._generated import AzureBlobStorage, VERSION
    +from ._generated.models import StorageErrorException, StorageServiceProperties, KeyInfo
    +from ._container_client import ContainerClient
    +from ._blob_client import BlobClient
    +from ._models import ContainerPropertiesPaged
    +from ._serialize import get_api_version
    +from ._deserialize import service_stats_deserialize, service_properties_deserialize
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from azure.core.pipeline.transport import HttpTransport
    +    from azure.core.pipeline.policies import HTTPPolicy
    +    from ._shared.models import UserDelegationKey
    +    from ._lease import BlobLeaseClient
    +    from ._models import (
    +        BlobProperties,
    +        ContainerProperties,
    +        PublicAccess,
    +        BlobAnalyticsLogging,
    +        Metrics,
    +        CorsRule,
    +        RetentionPolicy,
    +        StaticWebsite,
    +    )
    +
    +
    +class BlobServiceClient(StorageAccountHostsMixin):
    +    """A client to interact with the Blob Service at the account level.
    +
    +    This client provides operations to retrieve and configure the account properties
    +    as well as list, create and delete containers within the account.
    +    For operations relating to a specific container or blob, clients for those entities
    +    can also be retrieved using the `get_client` functions.
    +
    +    :param str account_url:
    +        The URL to the blob storage account. Any other entities included
    +        in the URL path (e.g. container or blob) will be discarded. This URL can be optionally
    +        authenticated with a SAS token.
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +        The Storage API version to use for requests. Default value is '2019-07-07'.
    +        Setting to an older version may result in reduced feature compatibility.
    +
    +        .. versionadded:: 12.2.0
    +
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +    :keyword int max_block_size: The maximum chunk size for uploading a block blob in chunks.
    +        Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_put_size: If the blob size is less than max_single_put_size, then the blob will be
    +        uploaded with only one http PUT request. If the blob size is larger than max_single_put_size,
    +        the blob will be uploaded in chunks. Defaults to 64*1024*1024, or 64MB.
    +    :keyword int min_large_block_upload_threshold: The minimum chunk size required to use the memory efficient
    +        algorithm when uploading a block blob. Defaults to 4*1024*1024+1.
    +    :keyword bool use_byte_buffer: Use a byte buffer for block blob uploads. Defaults to False.
    +    :keyword int max_page_size: The maximum chunk size for uploading a page blob. Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_get_size: The maximum size for a blob to be downloaded in a single call,
    +        the exceeded part will be downloaded in chunks (could be parallel). Defaults to 32*1024*1024, or 32MB.
    +    :keyword int max_chunk_get_size: The maximum chunk size used for downloading a blob. Defaults to 4*1024*1024,
    +        or 4MB.
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication.py
    +            :start-after: [START create_blob_service_client]
    +            :end-before: [END create_blob_service_client]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobServiceClient with account url and credential.
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication.py
    +            :start-after: [START create_blob_service_client_oauth]
    +            :end-before: [END create_blob_service_client_oauth]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobServiceClient with Azure Identity credentials.
    +    """
    +
    +    def __init__(
    +            self, account_url,  # type: str
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):
    +        # type: (...) -> None
    +        try:
    +            if not account_url.lower().startswith('http'):
    +                account_url = "https://" + account_url
    +        except AttributeError:
    +            raise ValueError("Account URL must be a string.")
    +        parsed_url = urlparse(account_url.rstrip('/'))
    +        if not parsed_url.netloc:
    +            raise ValueError("Invalid URL: {}".format(account_url))
    +
    +        _, sas_token = parse_query(parsed_url.query)
    +        self._query_str, credential = self._format_query_string(sas_token, credential)
    +        super(BlobServiceClient, self).__init__(parsed_url, service='blob', credential=credential, **kwargs)
    +        self._client = AzureBlobStorage(self.url, pipeline=self._pipeline)
    +        self._client._config.version = get_api_version(kwargs, VERSION)  # pylint: disable=protected-access
    +
    +    def _format_url(self, hostname):
    +        """Format the endpoint URL according to the current location
    +        mode hostname.
    +        """
    +        return "{}://{}/{}".format(self.scheme, hostname, self._query_str)
    +
    +    @classmethod
    +    def from_connection_string(
    +            cls, conn_str,  # type: str
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):  # type: (...) -> BlobServiceClient
    +        """Create BlobServiceClient from a Connection String.
    +
    +        :param str conn_str:
    +            A connection string to an Azure Storage account.
    +        :param credential:
    +            The credentials with which to authenticate. This is optional if the
    +            account URL already has a SAS token, or the connection string already has shared
    +            access key values. The value can be a SAS token string, an account shared access
    +            key, or an instance of a TokenCredentials class from azure.identity.
    +            Credentials provided here will take precedence over those in the connection string.
    +        :returns: A Blob service client.
    +        :rtype: ~azure.storage.blob.BlobServiceClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_authentication.py
    +                :start-after: [START auth_from_connection_string]
    +                :end-before: [END auth_from_connection_string]
    +                :language: python
    +                :dedent: 8
    +                :caption: Creating the BlobServiceClient from a connection string.
    +        """
    +        account_url, secondary, credential = parse_connection_str(conn_str, credential, 'blob')
    +        if 'secondary_hostname' not in kwargs:
    +            kwargs['secondary_hostname'] = secondary
    +        return cls(account_url, credential=credential, **kwargs)
    +
    +    @distributed_trace
    +    def get_user_delegation_key(self, key_start_time,  # type: datetime
    +                                key_expiry_time,  # type: datetime
    +                                **kwargs  # type: Any
    +                                ):
    +        # type: (...) -> UserDelegationKey
    +        """
    +        Obtain a user delegation key for the purpose of signing SAS tokens.
    +        A token credential must be present on the service object for this request to succeed.
    +
    +        :param ~datetime.datetime key_start_time:
    +            A DateTime value. Indicates when the key becomes valid.
    +        :param ~datetime.datetime key_expiry_time:
    +            A DateTime value. Indicates when the key stops being valid.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: The user delegation key.
    +        :rtype: ~azure.storage.blob.UserDelegationKey
    +        """
    +        key_info = KeyInfo(start=_to_utc_datetime(key_start_time), expiry=_to_utc_datetime(key_expiry_time))
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            user_delegation_key = self._client.service.get_user_delegation_key(key_info=key_info,
    +                                                                               timeout=timeout,
    +                                                                               **kwargs)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +        return parse_to_internal_user_delegation_key(user_delegation_key)  # type: ignore
    +
    +    @distributed_trace
    +    def get_account_information(self, **kwargs):
    +        # type: (Any) -> Dict[str, str]
    +        """Gets information related to the storage account.
    +
    +        The information can also be retrieved if the user has a SAS to a container or blob.
    +        The keys in the returned dictionary include 'sku_name' and 'account_kind'.
    +
    +        :returns: A dict of account information (SKU and account type).
    +        :rtype: dict(str, str)
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START get_blob_service_account_info]
    +                :end-before: [END get_blob_service_account_info]
    +                :language: python
    +                :dedent: 8
    +                :caption: Getting account information for the blob service.
    +        """
    +        try:
    +            return self._client.service.get_account_info(cls=return_response_headers, **kwargs) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def get_service_stats(self, **kwargs):
    +        # type: (**Any) -> Dict[str, Any]
    +        """Retrieves statistics related to replication for the Blob service.
    +
    +        It is only available when read-access geo-redundant replication is enabled for
    +        the storage account.
    +
    +        With geo-redundant replication, Azure Storage maintains your data durable
    +        in two locations. In both locations, Azure Storage constantly maintains
    +        multiple healthy replicas of your data. The location where you read,
    +        create, update, or delete data is the primary storage account location.
    +        The primary location exists in the region you choose at the time you
    +        create an account via the Azure Management Azure classic portal, for
    +        example, North Central US. The location to which your data is replicated
    +        is the secondary location. The secondary location is automatically
    +        determined based on the location of the primary; it is in a second data
    +        center that resides in the same region as the primary location. Read-only
    +        access is available from the secondary location, if read-access geo-redundant
    +        replication is enabled for your storage account.
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: The blob service stats.
    +        :rtype: Dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START get_blob_service_stats]
    +                :end-before: [END get_blob_service_stats]
    +                :language: python
    +                :dedent: 8
    +                :caption: Getting service stats for the blob service.
    +        """
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            stats = self._client.service.get_statistics( # type: ignore
    +                timeout=timeout, use_location=LocationMode.SECONDARY, **kwargs)
    +            return service_stats_deserialize(stats)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def get_service_properties(self, **kwargs):
    +        # type: (Any) -> Dict[str, Any]
    +        """Gets the properties of a storage account's Blob service, including
    +        Azure Storage Analytics.
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An object containing blob service properties such as
    +            analytics logging, hour/minute metrics, cors rules, etc.
    +        :rtype: Dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START get_blob_service_properties]
    +                :end-before: [END get_blob_service_properties]
    +                :language: python
    +                :dedent: 8
    +                :caption: Getting service properties for the blob service.
    +        """
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            service_props = self._client.service.get_properties(timeout=timeout, **kwargs)
    +            return service_properties_deserialize(service_props)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def set_service_properties(
    +            self, analytics_logging=None,  # type: Optional[BlobAnalyticsLogging]
    +            hour_metrics=None,  # type: Optional[Metrics]
    +            minute_metrics=None,  # type: Optional[Metrics]
    +            cors=None,  # type: Optional[List[CorsRule]]
    +            target_version=None,  # type: Optional[str]
    +            delete_retention_policy=None,  # type: Optional[RetentionPolicy]
    +            static_website=None,  # type: Optional[StaticWebsite]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Sets the properties of a storage account's Blob service, including
    +        Azure Storage Analytics.
    +
    +        If an element (e.g. analytics_logging) is left as None, the
    +        existing settings on the service for that functionality are preserved.
    +
    +        :param analytics_logging:
    +            Groups the Azure Analytics Logging settings.
    +        :type analytics_logging: ~azure.storage.blob.BlobAnalyticsLogging
    +        :param hour_metrics:
    +            The hour metrics settings provide a summary of request
    +            statistics grouped by API in hourly aggregates for blobs.
    +        :type hour_metrics: ~azure.storage.blob.Metrics
    +        :param minute_metrics:
    +            The minute metrics settings provide request statistics
    +            for each minute for blobs.
    +        :type minute_metrics: ~azure.storage.blob.Metrics
    +        :param cors:
    +            You can include up to five CorsRule elements in the
    +            list. If an empty list is specified, all CORS rules will be deleted,
    +            and CORS will be disabled for the service.
    +        :type cors: list[~azure.storage.blob.CorsRule]
    +        :param str target_version:
    +            Indicates the default version to use for requests if an incoming
    +            request's version is not specified.
    +        :param delete_retention_policy:
    +            The delete retention policy specifies whether to retain deleted blobs.
    +            It also specifies the number of days and versions of blob to keep.
    +        :type delete_retention_policy: ~azure.storage.blob.RetentionPolicy
    +        :param static_website:
    +            Specifies whether the static website feature is enabled,
    +            and if yes, indicates the index document and 404 error document to use.
    +        :type static_website: ~azure.storage.blob.StaticWebsite
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START set_blob_service_properties]
    +                :end-before: [END set_blob_service_properties]
    +                :language: python
    +                :dedent: 8
    +                :caption: Setting service properties for the blob service.
    +        """
    +        props = StorageServiceProperties(
    +            logging=analytics_logging,
    +            hour_metrics=hour_metrics,
    +            minute_metrics=minute_metrics,
    +            cors=cors,
    +            default_service_version=target_version,
    +            delete_retention_policy=delete_retention_policy,
    +            static_website=static_website
    +        )
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            self._client.service.set_properties(props, timeout=timeout, **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def list_containers(
    +            self, name_starts_with=None,  # type: Optional[str]
    +            include_metadata=False,  # type: Optional[bool]
    +            **kwargs
    +        ):
    +        # type: (...) -> ItemPaged[ContainerProperties]
    +        """Returns a generator to list the containers under the specified account.
    +
    +        The generator will lazily follow the continuation tokens returned by
    +        the service and stop when all containers have been returned.
    +
    +        :param str name_starts_with:
    +            Filters the results to return only containers whose names
    +            begin with the specified prefix.
    +        :param bool include_metadata:
    +            Specifies that container metadata to be returned in the response.
    +            The default value is `False`.
    +        :keyword int results_per_page:
    +            The maximum number of container names to retrieve per API
    +            call. If the request does not specify the server will return up to 5,000 items.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An iterable (auto-paging) of ContainerProperties.
    +        :rtype: ~azure.core.paging.ItemPaged[~azure.storage.blob.ContainerProperties]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START bsc_list_containers]
    +                :end-before: [END bsc_list_containers]
    +                :language: python
    +                :dedent: 12
    +                :caption: Listing the containers in the blob service.
    +        """
    +        include = 'metadata' if include_metadata else None
    +        timeout = kwargs.pop('timeout', None)
    +        results_per_page = kwargs.pop('results_per_page', None)
    +        command = functools.partial(
    +            self._client.service.list_containers_segment,
    +            prefix=name_starts_with,
    +            include=include,
    +            timeout=timeout,
    +            **kwargs)
    +        return ItemPaged(
    +                command,
    +                prefix=name_starts_with,
    +                results_per_page=results_per_page,
    +                page_iterator_class=ContainerPropertiesPaged
    +            )
    +
    +    @distributed_trace
    +    def create_container(
    +            self, name,  # type: str
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            public_access=None,  # type: Optional[Union[PublicAccess, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> ContainerClient
    +        """Creates a new container under the specified account.
    +
    +        If the container with the same name already exists, a ResourceExistsError will
    +        be raised. This method returns a client with which to interact with the newly
    +        created container.
    +
    +        :param str name: The name of the container to create.
    +        :param metadata:
    +            A dict with name-value pairs to associate with the
    +            container as metadata. Example: `{'Category':'test'}`
    +        :type metadata: dict(str, str)
    +        :param public_access:
    +            Possible values include: 'container', 'blob'.
    +        :type public_access: str or ~azure.storage.blob.PublicAccess
    +        :keyword container_encryption_scope:
    +            Specifies the default encryption scope to set on the container and use for
    +            all future writes.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :paramtype container_encryption_scope: dict or ~azure.storage.blob.ContainerEncryptionScope
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: ~azure.storage.blob.ContainerClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START bsc_create_container]
    +                :end-before: [END bsc_create_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: Creating a container in the blob service.
    +        """
    +        container = self.get_container_client(name)
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        container.create_container(
    +            metadata=metadata, public_access=public_access, timeout=timeout, **kwargs)
    +        return container
    +
    +    @distributed_trace
    +    def delete_container(
    +            self, container,  # type: Union[ContainerProperties, str]
    +            lease=None,  # type: Optional[Union[BlobLeaseClient, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Marks the specified container for deletion.
    +
    +        The container and any blobs contained within it are later deleted during garbage collection.
    +        If the container is not found, a ResourceNotFoundError will be raised.
    +
    +        :param container:
    +            The container to delete. This can either be the name of the container,
    +            or an instance of ContainerProperties.
    +        :type container: str or ~azure.storage.blob.ContainerProperties
    +        :param lease:
    +            If specified, delete_container only succeeds if the
    +            container's lease is active and matches this ID.
    +            Required if the container has an active lease.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START bsc_delete_container]
    +                :end-before: [END bsc_delete_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: Deleting a container in the blob service.
    +        """
    +        container = self.get_container_client(container) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        container.delete_container( # type: ignore
    +            lease=lease,
    +            timeout=timeout,
    +            **kwargs)
    +
    +    def get_container_client(self, container):
    +        # type: (Union[ContainerProperties, str]) -> ContainerClient
    +        """Get a client to interact with the specified container.
    +
    +        The container need not already exist.
    +
    +        :param container:
    +            The container. This can either be the name of the container,
    +            or an instance of ContainerProperties.
    +        :type container: str or ~azure.storage.blob.ContainerProperties
    +        :returns: A ContainerClient.
    +        :rtype: ~azure.storage.blob.ContainerClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START bsc_get_container_client]
    +                :end-before: [END bsc_get_container_client]
    +                :language: python
    +                :dedent: 8
    +                :caption: Getting the container client to interact with a specific container.
    +        """
    +        try:
    +            container_name = container.name
    +        except AttributeError:
    +            container_name = container
    +        _pipeline = Pipeline(
    +            transport=TransportWrapper(self._pipeline._transport), # pylint: disable = protected-access
    +            policies=self._pipeline._impl_policies # pylint: disable = protected-access
    +        )
    +        return ContainerClient(
    +            self.url, container_name=container_name,
    +            credential=self.credential, api_version=self.api_version, _configuration=self._config,
    +            _pipeline=_pipeline, _location_mode=self._location_mode, _hosts=self._hosts,
    +            require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key,
    +            key_resolver_function=self.key_resolver_function)
    +
    +    def get_blob_client(
    +            self, container,  # type: Union[ContainerProperties, str]
    +            blob,  # type: Union[BlobProperties, str]
    +            snapshot=None  # type: Optional[Union[Dict[str, Any], str]]
    +        ):
    +        # type: (...) -> BlobClient
    +        """Get a client to interact with the specified blob.
    +
    +        The blob need not already exist.
    +
    +        :param container:
    +            The container that the blob is in. This can either be the name of the container,
    +            or an instance of ContainerProperties.
    +        :type container: str or ~azure.storage.blob.ContainerProperties
    +        :param blob:
    +            The blob with which to interact. This can either be the name of the blob,
    +            or an instance of BlobProperties.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param snapshot:
    +            The optional blob snapshot on which to operate. This can either be the ID of the snapshot,
    +            or a dictionary output returned by :func:`~azure.storage.blob.BlobClient.create_snapshot()`.
    +        :type snapshot: str or dict(str, Any)
    +        :returns: A BlobClient.
    +        :rtype: ~azure.storage.blob.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START bsc_get_blob_client]
    +                :end-before: [END bsc_get_blob_client]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting the blob client to interact with a specific blob.
    +        """
    +        try:
    +            container_name = container.name
    +        except AttributeError:
    +            container_name = container
    +        try:
    +            blob_name = blob.name
    +        except AttributeError:
    +            blob_name = blob
    +        _pipeline = Pipeline(
    +            transport=TransportWrapper(self._pipeline._transport), # pylint: disable = protected-access
    +            policies=self._pipeline._impl_policies # pylint: disable = protected-access
    +        )
    +        return BlobClient( # type: ignore
    +            self.url, container_name=container_name, blob_name=blob_name, snapshot=snapshot,
    +            credential=self.credential, api_version=self.api_version, _configuration=self._config,
    +            _pipeline=_pipeline, _location_mode=self._location_mode, _hosts=self._hosts,
    +            require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key,
    +            key_resolver_function=self.key_resolver_function)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_container_client.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_container_client.py
    new file mode 100644
    index 000000000000..9b567fda5405
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_container_client.py
    @@ -0,0 +1,1312 @@
    +# pylint: disable=too-many-lines
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import functools
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, AnyStr, Dict, List, Tuple, IO, Iterator,
    +    TYPE_CHECKING
    +)
    +
    +try:
    +    from urllib.parse import urlparse, quote, unquote
    +except ImportError:
    +    from urlparse import urlparse # type: ignore
    +    from urllib2 import quote, unquote # type: ignore
    +
    +import six
    +
    +from azure.core.paging import ItemPaged
    +from azure.core.tracing.decorator import distributed_trace
    +from azure.core.pipeline import Pipeline
    +from azure.core.pipeline.transport import HttpRequest
    +
    +from ._shared.base_client import StorageAccountHostsMixin, TransportWrapper, parse_connection_str, parse_query
    +from ._shared.request_handlers import add_metadata_headers, serialize_iso
    +from ._shared.response_handlers import (
    +    process_storage_error,
    +    return_response_headers,
    +    return_headers_and_deserialized)
    +from ._generated import AzureBlobStorage, VERSION
    +from ._generated.models import (
    +    StorageErrorException,
    +    SignedIdentifier)
    +from ._deserialize import deserialize_container_properties
    +from ._serialize import get_modify_conditions, get_container_cpk_scope_info, get_api_version
    +from ._models import ( # pylint: disable=unused-import
    +    ContainerProperties,
    +    BlobProperties,
    +    BlobPropertiesPaged,
    +    BlobType,
    +    BlobPrefix)
    +from ._lease import BlobLeaseClient, get_access_conditions
    +from ._blob_client import BlobClient
    +
    +if TYPE_CHECKING:
    +    from azure.core.pipeline.transport import HttpTransport, HttpResponse  # pylint: disable=ungrouped-imports
    +    from azure.core.pipeline.policies import HTTPPolicy # pylint: disable=ungrouped-imports
    +    from datetime import datetime
    +    from ._models import (  # pylint: disable=unused-import
    +        PublicAccess,
    +        AccessPolicy,
    +        ContentSettings,
    +        StandardBlobTier,
    +        PremiumPageBlobTier)
    +
    +
    +def _get_blob_name(blob):
    +    """Return the blob name.
    +
    +    :param blob: A blob string or BlobProperties
    +    :rtype: str
    +    """
    +    try:
    +        return blob.name
    +    except AttributeError:
    +        return blob
    +
    +
    +class ContainerClient(StorageAccountHostsMixin):
    +    """A client to interact with a specific container, although that container
    +    may not yet exist.
    +
    +    For operations relating to a specific blob within this container, a blob client can be
    +    retrieved using the :func:`~get_blob_client` function.
    +
    +    :param str account_url:
    +        The URI to the storage account. In order to create a client given the full URI to the container,
    +        use the :func:`from_container_url` classmethod.
    +    :param container_name:
    +        The name of the container for the blob.
    +    :type container_name: str
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +        The Storage API version to use for requests. Default value is '2019-07-07'.
    +        Setting to an older version may result in reduced feature compatibility.
    +
    +        .. versionadded:: 12.2.0
    +
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +    :keyword int max_block_size: The maximum chunk size for uploading a block blob in chunks.
    +        Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_put_size: If the blob size is less than max_single_put_size, then the blob will be
    +        uploaded with only one http PUT request. If the blob size is larger than max_single_put_size,
    +        the blob will be uploaded in chunks. Defaults to 64*1024*1024, or 64MB.
    +    :keyword int min_large_block_upload_threshold: The minimum chunk size required to use the memory efficient
    +        algorithm when uploading a block blob. Defaults to 4*1024*1024+1.
    +    :keyword bool use_byte_buffer: Use a byte buffer for block blob uploads. Defaults to False.
    +    :keyword int max_page_size: The maximum chunk size for uploading a page blob. Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_get_size: The maximum size for a blob to be downloaded in a single call,
    +        the exceeded part will be downloaded in chunks (could be parallel). Defaults to 32*1024*1024, or 32MB.
    +    :keyword int max_chunk_get_size: The maximum chunk size used for downloading a blob. Defaults to 4*1024*1024,
    +        or 4MB.
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_containers.py
    +            :start-after: [START create_container_client_from_service]
    +            :end-before: [END create_container_client_from_service]
    +            :language: python
    +            :dedent: 8
    +            :caption: Get a ContainerClient from an existing BlobServiceClient.
    +
    +        .. literalinclude:: ../samples/blob_samples_containers.py
    +            :start-after: [START create_container_client_sasurl]
    +            :end-before: [END create_container_client_sasurl]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the container client directly.
    +    """
    +    def __init__(
    +            self, account_url,  # type: str
    +            container_name,  # type: str
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):
    +        # type: (...) -> None
    +        try:
    +            if not account_url.lower().startswith('http'):
    +                account_url = "https://" + account_url
    +        except AttributeError:
    +            raise ValueError("Container URL must be a string.")
    +        parsed_url = urlparse(account_url.rstrip('/'))
    +        if not container_name:
    +            raise ValueError("Please specify a container name.")
    +        if not parsed_url.netloc:
    +            raise ValueError("Invalid URL: {}".format(account_url))
    +
    +        _, sas_token = parse_query(parsed_url.query)
    +        self.container_name = container_name
    +        self._query_str, credential = self._format_query_string(sas_token, credential)
    +        super(ContainerClient, self).__init__(parsed_url, service='blob', credential=credential, **kwargs)
    +        self._client = AzureBlobStorage(self.url, pipeline=self._pipeline)
    +        self._client._config.version = get_api_version(kwargs, VERSION)  # pylint: disable=protected-access
    +
    +    def _format_url(self, hostname):
    +        container_name = self.container_name
    +        if isinstance(container_name, six.text_type):
    +            container_name = container_name.encode('UTF-8')
    +        return "{}://{}/{}{}".format(
    +            self.scheme,
    +            hostname,
    +            quote(container_name),
    +            self._query_str)
    +
    +    @classmethod
    +    def from_container_url(cls, container_url, credential=None, **kwargs):
    +        # type: (str, Optional[Any], Any) -> ContainerClient
    +        """Create ContainerClient from a container url.
    +
    +        :param str container_url:
    +            The full endpoint URL to the Container, including SAS token if used. This could be
    +            either the primary endpoint, or the secondary endpoint depending on the current `location_mode`.
    +        :type container_url: str
    +        :param credential:
    +            The credentials with which to authenticate. This is optional if the
    +            account URL already has a SAS token, or the connection string already has shared
    +            access key values. The value can be a SAS token string, an account shared access
    +            key, or an instance of a TokenCredentials class from azure.identity.
    +            Credentials provided here will take precedence over those in the connection string.
    +        :returns: A container client.
    +        :rtype: ~azure.storage.blob.ContainerClient
    +        """
    +        try:
    +            if not container_url.lower().startswith('http'):
    +                container_url = "https://" + container_url
    +        except AttributeError:
    +            raise ValueError("Container URL must be a string.")
    +        parsed_url = urlparse(container_url.rstrip('/'))
    +        if not parsed_url.netloc:
    +            raise ValueError("Invalid URL: {}".format(container_url))
    +
    +        container_path = parsed_url.path.lstrip('/').split('/')
    +        account_path = ""
    +        if len(container_path) > 1:
    +            account_path = "/" + "/".join(container_path[:-1])
    +        account_url = "{}://{}{}?{}".format(
    +            parsed_url.scheme,
    +            parsed_url.netloc.rstrip('/'),
    +            account_path,
    +            parsed_url.query)
    +        container_name = unquote(container_path[-1])
    +        if not container_name:
    +            raise ValueError("Invalid URL. Please provide a URL with a valid container name")
    +        return cls(account_url, container_name=container_name, credential=credential, **kwargs)
    +
    +    @classmethod
    +    def from_connection_string(
    +            cls, conn_str,  # type: str
    +            container_name,  # type: str
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):  # type: (...) -> ContainerClient
    +        """Create ContainerClient from a Connection String.
    +
    +        :param str conn_str:
    +            A connection string to an Azure Storage account.
    +        :param container_name:
    +            The container name for the blob.
    +        :type container_name: str
    +        :param credential:
    +            The credentials with which to authenticate. This is optional if the
    +            account URL already has a SAS token, or the connection string already has shared
    +            access key values. The value can be a SAS token string, an account shared access
    +            key, or an instance of a TokenCredentials class from azure.identity.
    +            Credentials provided here will take precedence over those in the connection string.
    +        :returns: A container client.
    +        :rtype: ~azure.storage.blob.ContainerClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_authentication.py
    +                :start-after: [START auth_from_connection_string_container]
    +                :end-before: [END auth_from_connection_string_container]
    +                :language: python
    +                :dedent: 8
    +                :caption: Creating the ContainerClient from a connection string.
    +        """
    +        account_url, secondary, credential = parse_connection_str(conn_str, credential, 'blob')
    +        if 'secondary_hostname' not in kwargs:
    +            kwargs['secondary_hostname'] = secondary
    +        return cls(
    +            account_url, container_name=container_name, credential=credential, **kwargs)
    +
    +    @distributed_trace
    +    def create_container(self, metadata=None, public_access=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], Optional[Union[PublicAccess, str]], **Any) -> None
    +        """
    +        Creates a new container under the specified account. If the container
    +        with the same name already exists, the operation fails.
    +
    +        :param metadata:
    +            A dict with name_value pairs to associate with the
    +            container as metadata. Example:{'Category':'test'}
    +        :type metadata: dict[str, str]
    +        :param ~azure.storage.blob.PublicAccess public_access:
    +            Possible values include: 'container', 'blob'.
    +        :keyword container_encryption_scope:
    +            Specifies the default encryption scope to set on the container and use for
    +            all future writes.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :paramtype container_encryption_scope: dict or ~azure.storage.blob.ContainerEncryptionScope
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START create_container]
    +                :end-before: [END create_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: Creating a container to store blobs.
    +        """
    +        headers = kwargs.pop('headers', {})
    +        timeout = kwargs.pop('timeout', None)
    +        headers.update(add_metadata_headers(metadata)) # type: ignore
    +        container_cpk_scope_info = get_container_cpk_scope_info(kwargs)
    +        try:
    +            return self._client.container.create( # type: ignore
    +                timeout=timeout,
    +                access=public_access,
    +                container_cpk_scope_info=container_cpk_scope_info,
    +                cls=return_response_headers,
    +                headers=headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def delete_container(
    +            self, **kwargs):
    +        # type: (Any) -> None
    +        """
    +        Marks the specified container for deletion. The container and any blobs
    +        contained within it are later deleted during garbage collection.
    +
    +        :keyword lease:
    +            If specified, delete_container only succeeds if the
    +            container's lease is active and matches this ID.
    +            Required if the container has an active lease.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START delete_container]
    +                :end-before: [END delete_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: Delete a container.
    +        """
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        mod_conditions = get_modify_conditions(kwargs)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            self._client.container.delete(
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def acquire_lease(
    +            self, lease_duration=-1,  # type: int
    +            lease_id=None,  # type: Optional[str]
    +            **kwargs):
    +        # type: (...) -> BlobLeaseClient
    +        """
    +        Requests a new lease. If the container does not have an active lease,
    +        the Blob service creates a lease on the container and returns a new
    +        lease ID.
    +
    +        :param int lease_duration:
    +            Specifies the duration of the lease, in seconds, or negative one
    +            (-1) for a lease that never expires. A non-infinite lease can be
    +            between 15 and 60 seconds. A lease duration cannot be changed
    +            using renew or change. Default is -1 (infinite lease).
    +        :param str lease_id:
    +            Proposed lease ID, in a GUID string format. The Blob service returns
    +            400 (Invalid request) if the proposed lease ID is not in the correct format.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: A BlobLeaseClient object, that can be run in a context manager.
    +        :rtype: ~azure.storage.blob.BlobLeaseClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START acquire_lease_on_container]
    +                :end-before: [END acquire_lease_on_container]
    +                :language: python
    +                :dedent: 8
    +                :caption: Acquiring a lease on the container.
    +        """
    +        lease = BlobLeaseClient(self, lease_id=lease_id) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        lease.acquire(lease_duration=lease_duration, timeout=timeout, **kwargs)
    +        return lease
    +
    +    @distributed_trace
    +    def get_account_information(self, **kwargs):
    +        # type: (**Any) -> Dict[str, str]
    +        """Gets information related to the storage account.
    +
    +        The information can also be retrieved if the user has a SAS to a container or blob.
    +        The keys in the returned dictionary include 'sku_name' and 'account_kind'.
    +
    +        :returns: A dict of account information (SKU and account type).
    +        :rtype: dict(str, str)
    +        """
    +        try:
    +            return self._client.container.get_account_info(cls=return_response_headers, **kwargs) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def get_container_properties(self, **kwargs):
    +        # type: (Any) -> ContainerProperties
    +        """Returns all user-defined metadata and system properties for the specified
    +        container. The data returned does not include the container's list of blobs.
    +
    +        :keyword lease:
    +            If specified, get_container_properties only succeeds if the
    +            container's lease is active and matches this ID.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: Properties for the specified container within a container object.
    +        :rtype: ~azure.storage.blob.ContainerProperties
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START get_container_properties]
    +                :end-before: [END get_container_properties]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting properties on the container.
    +        """
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            response = self._client.container.get_properties(
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                cls=deserialize_container_properties,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        response.name = self.container_name
    +        return response # type: ignore
    +
    +    @distributed_trace
    +    def set_container_metadata( # type: ignore
    +            self, metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Sets one or more user-defined name-value pairs for the specified
    +        container. Each call to this operation replaces all existing metadata
    +        attached to the container. To remove all metadata from the container,
    +        call this operation with no metadata dict.
    +
    +        :param metadata:
    +            A dict containing name-value pairs to associate with the container as
    +            metadata. Example: {'category':'test'}
    +        :type metadata: dict[str, str]
    +        :keyword lease:
    +            If specified, set_container_metadata only succeeds if the
    +            container's lease is active and matches this ID.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Container-updated property dict (Etag and last modified).
    +        :rtype: dict[str, str or datetime]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START set_container_metadata]
    +                :end-before: [END set_container_metadata]
    +                :language: python
    +                :dedent: 12
    +                :caption: Setting metadata on the container.
    +        """
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        mod_conditions = get_modify_conditions(kwargs)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            return self._client.container.set_metadata( # type: ignore
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                headers=headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def get_container_access_policy(self, **kwargs):
    +        # type: (Any) -> Dict[str, Any]
    +        """Gets the permissions for the specified container.
    +        The permissions indicate whether container data may be accessed publicly.
    +
    +        :keyword lease:
    +            If specified, get_container_access_policy only succeeds if the
    +            container's lease is active and matches this ID.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Access policy information in a dict.
    +        :rtype: dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START get_container_access_policy]
    +                :end-before: [END get_container_access_policy]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting the access policy on the container.
    +        """
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            response, identifiers = self._client.container.get_access_policy(
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                cls=return_headers_and_deserialized,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return {
    +            'public_access': response.get('blob_public_access'),
    +            'signed_identifiers': identifiers or []
    +        }
    +
    +    @distributed_trace
    +    def set_container_access_policy(
    +            self, signed_identifiers,  # type: Dict[str, AccessPolicy]
    +            public_access=None,  # type: Optional[Union[str, PublicAccess]]
    +            **kwargs
    +        ):  # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Sets the permissions for the specified container or stored access
    +        policies that may be used with Shared Access Signatures. The permissions
    +        indicate whether blobs in a container may be accessed publicly.
    +
    +        :param signed_identifiers:
    +            A dictionary of access policies to associate with the container. The
    +            dictionary may contain up to 5 elements. An empty dictionary
    +            will clear the access policies set on the service.
    +        :type signed_identifiers: dict[str, ~azure.storage.blob.AccessPolicy]
    +        :param ~azure.storage.blob.PublicAccess public_access:
    +            Possible values include: 'container', 'blob'.
    +        :keyword lease:
    +            Required if the container has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A datetime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified date/time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A datetime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Container-updated property dict (Etag and last modified).
    +        :rtype: dict[str, str or ~datetime.datetime]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START set_container_access_policy]
    +                :end-before: [END set_container_access_policy]
    +                :language: python
    +                :dedent: 12
    +                :caption: Setting access policy on the container.
    +        """
    +        if len(signed_identifiers) > 5:
    +            raise ValueError(
    +                'Too many access policies provided. The server does not support setting '
    +                'more than 5 access policies on a single resource.')
    +        identifiers = []
    +        for key, value in signed_identifiers.items():
    +            if value:
    +                value.start = serialize_iso(value.start)
    +                value.expiry = serialize_iso(value.expiry)
    +            identifiers.append(SignedIdentifier(id=key, access_policy=value)) # type: ignore
    +        signed_identifiers = identifiers # type: ignore
    +        lease = kwargs.pop('lease', None)
    +        mod_conditions = get_modify_conditions(kwargs)
    +        access_conditions = get_access_conditions(lease)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            return self._client.container.set_access_policy(
    +                container_acl=signed_identifiers or None,
    +                timeout=timeout,
    +                access=public_access,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def list_blobs(self, name_starts_with=None, include=None, **kwargs):
    +        # type: (Optional[str], Optional[Any], **Any) -> ItemPaged[BlobProperties]
    +        """Returns a generator to list the blobs under the specified container.
    +        The generator will lazily follow the continuation tokens returned by
    +        the service.
    +
    +        :param str name_starts_with:
    +            Filters the results to return only blobs whose names
    +            begin with the specified prefix.
    +        :param list[str] include:
    +            Specifies one or more additional datasets to include in the response.
    +            Options include: 'snapshots', 'metadata', 'uncommittedblobs', 'copy', 'deleted'.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An iterable (auto-paging) response of BlobProperties.
    +        :rtype: ~azure.core.paging.ItemPaged[~azure.storage.blob.BlobProperties]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START list_blobs_in_container]
    +                :end-before: [END list_blobs_in_container]
    +                :language: python
    +                :dedent: 8
    +                :caption: List the blobs in the container.
    +        """
    +        if include and not isinstance(include, list):
    +            include = [include]
    +
    +        results_per_page = kwargs.pop('results_per_page', None)
    +        timeout = kwargs.pop('timeout', None)
    +        command = functools.partial(
    +            self._client.container.list_blob_flat_segment,
    +            include=include,
    +            timeout=timeout,
    +            **kwargs)
    +        return ItemPaged(
    +            command, prefix=name_starts_with, results_per_page=results_per_page,
    +            page_iterator_class=BlobPropertiesPaged)
    +
    +    @distributed_trace
    +    def walk_blobs(
    +            self, name_starts_with=None, # type: Optional[str]
    +            include=None, # type: Optional[Any]
    +            delimiter="/", # type: str
    +            **kwargs # type: Optional[Any]
    +        ):
    +        # type: (...) -> ItemPaged[BlobProperties]
    +        """Returns a generator to list the blobs under the specified container.
    +        The generator will lazily follow the continuation tokens returned by
    +        the service. This operation will list blobs in accordance with a hierarchy,
    +        as delimited by the specified delimiter character.
    +
    +        :param str name_starts_with:
    +            Filters the results to return only blobs whose names
    +            begin with the specified prefix.
    +        :param list[str] include:
    +            Specifies one or more additional datasets to include in the response.
    +            Options include: 'snapshots', 'metadata', 'uncommittedblobs', 'copy', 'deleted'.
    +        :param str delimiter:
    +            When the request includes this parameter, the operation returns a BlobPrefix
    +            element in the response body that acts as a placeholder for all blobs whose
    +            names begin with the same substring up to the appearance of the delimiter
    +            character. The delimiter may be a single character or a string.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An iterable (auto-paging) response of BlobProperties.
    +        :rtype: ~azure.core.paging.ItemPaged[~azure.storage.blob.BlobProperties]
    +        """
    +        if include and not isinstance(include, list):
    +            include = [include]
    +
    +        results_per_page = kwargs.pop('results_per_page', None)
    +        timeout = kwargs.pop('timeout', None)
    +        command = functools.partial(
    +            self._client.container.list_blob_hierarchy_segment,
    +            delimiter=delimiter,
    +            include=include,
    +            timeout=timeout,
    +            **kwargs)
    +        return BlobPrefix(
    +            command,
    +            prefix=name_starts_with,
    +            results_per_page=results_per_page,
    +            delimiter=delimiter)
    +
    +    @distributed_trace
    +    def upload_blob(
    +            self, name,  # type: Union[str, BlobProperties]
    +            data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            blob_type=BlobType.BlockBlob,  # type: Union[str, BlobType]
    +            length=None,  # type: Optional[int]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> BlobClient
    +        """Creates a new blob from a data source with automatic chunking.
    +
    +        :param name: The blob with which to interact. If specified, this value will override
    +            a blob value specified in the blob URL.
    +        :type name: str or ~azure.storage.blob.BlobProperties
    +        :param data: The blob data to upload.
    +        :param ~azure.storage.blob.BlobType blob_type: The type of the blob. This can be
    +            either BlockBlob, PageBlob or AppendBlob. The default value is BlockBlob.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword bool overwrite: Whether the blob to be uploaded should overwrite the current data.
    +            If True, upload_blob will overwrite the existing data. If set to False, the
    +            operation will fail with ResourceExistsError. The exception to the above is with Append
    +            blob types: if set to False and the data already exists, an error will not be raised
    +            and the data will be appended to the existing blob. If set overwrite=True, then the existing
    +            append blob will be deleted, and a new one created. Defaults to False.
    +        :keyword ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used, because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the container has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int max_concurrency:
    +            Maximum number of parallel connections to use when the blob size exceeds
    +            64MB.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :returns: A BlobClient to interact with the newly uploaded blob.
    +        :rtype: ~azure.storage.blob.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START upload_blob_to_container]
    +                :end-before: [END upload_blob_to_container]
    +                :language: python
    +                :dedent: 8
    +                :caption: Upload blob to the container.
    +        """
    +        blob = self.get_blob_client(name)
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        encoding = kwargs.pop('encoding', 'UTF-8')
    +        blob.upload_blob(
    +            data,
    +            blob_type=blob_type,
    +            length=length,
    +            metadata=metadata,
    +            timeout=timeout,
    +            encoding=encoding,
    +            **kwargs
    +        )
    +        return blob
    +
    +    @distributed_trace
    +    def delete_blob(
    +            self, blob,  # type: Union[str, BlobProperties]
    +            delete_snapshots=None,  # type: Optional[str]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Marks the specified blob or snapshot for deletion.
    +
    +        The blob is later deleted during garbage collection.
    +        Note that in order to delete a blob, you must delete all of its
    +        snapshots. You can delete both at the same time with the delete_blob
    +        operation.
    +
    +        If a delete retention policy is enabled for the service, then this operation soft deletes the blob or snapshot
    +        and retains the blob or snapshot for specified number of days.
    +        After specified number of days, blob's data is removed from the service during garbage collection.
    +        Soft deleted blob or snapshot is accessible through :func:`list_blobs()` specifying `include=["deleted"]`
    +        option. Soft-deleted blob or snapshot can be restored using :func:`~BlobClient.undelete()`
    +
    +        :param blob: The blob with which to interact. If specified, this value will override
    +            a blob value specified in the blob URL.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param str delete_snapshots:
    +            Required if the blob has associated snapshots. Values include:
    +             - "only": Deletes only the blobs snapshots.
    +             - "include": Deletes the blob along with all snapshots.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        blob_client = self.get_blob_client(blob) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        blob_client.delete_blob( # type: ignore
    +            delete_snapshots=delete_snapshots,
    +            timeout=timeout,
    +            **kwargs)
    +
    +    @distributed_trace
    +    def download_blob(self, blob, offset=None, length=None, **kwargs):
    +        # type: (Union[str, BlobProperties], Optional[int], Optional[int], **Any) -> StorageStreamDownloader
    +        """Downloads a blob to the StorageStreamDownloader. The readall() method must
    +        be used to read all the content or readinto() must be used to download the blob into
    +        a stream.
    +
    +        :param blob: The blob with which to interact. If specified, this value will override
    +            a blob value specified in the blob URL.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param int offset:
    +            Start of byte range to use for downloading a section of the blob.
    +            Must be set if length is provided.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, download_blob only
    +            succeeds if the blob's lease is active and matches this ID. Value can be a
    +            BlobLeaseClient object or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :keyword str encoding:
    +            Encoding to decode the downloaded bytes. Default is None, i.e. no decoding.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :returns: A streaming object (StorageStreamDownloader)
    +        :rtype: ~azure.storage.blob.StorageStreamDownloader
    +        """
    +        blob_client = self.get_blob_client(blob) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        return blob_client.download_blob(offset=offset, length=length, **kwargs)
    +
    +    def _generate_delete_blobs_options(
    +        self, snapshot=None,
    +        delete_snapshots=None,
    +        request_id=None,
    +        lease_access_conditions=None,
    +        modified_access_conditions=None,
    +        **kwargs
    +    ):
    +        """This code is a copy from _generated.
    +
    +        Once Autorest is able to provide request preparation this code should be removed.
    +        """
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct parameters
    +        timeout = kwargs.pop('timeout', None)
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._client._serialize.query("snapshot", snapshot, 'str')  # pylint: disable=protected-access
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._client._serialize.query("timeout", timeout, 'int', minimum=0)  # pylint: disable=protected-access
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if delete_snapshots is not None:
    +            header_parameters['x-ms-delete-snapshots'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "delete_snapshots", delete_snapshots, 'DeleteSnapshotsOptionType')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "if_none_match", if_none_match, 'str')
    +
    +        return query_parameters, header_parameters
    +
    +    @distributed_trace
    +    def delete_blobs(self, *blobs, **kwargs):
    +        # type: (...) -> Iterator[HttpResponse]
    +        """Marks the specified blobs or snapshots for deletion.
    +
    +        The blobs are later deleted during garbage collection.
    +        Note that in order to delete blobs, you must delete all of their
    +        snapshots. You can delete both at the same time with the delete_blobs operation.
    +
    +        If a delete retention policy is enabled for the service, then this operation soft deletes the blobs or snapshots
    +        and retains the blobs or snapshots for specified number of days.
    +        After specified number of days, blobs' data is removed from the service during garbage collection.
    +        Soft deleted blobs or snapshots are accessible through :func:`list_blobs()` specifying `include=["deleted"]`
    +        Soft-deleted blobs or snapshots can be restored using :func:`~BlobClient.undelete()`
    +
    +        :param blobs: The blobs to delete. This can be a single blob, or multiple values can
    +            be supplied, where each value is either the name of the blob (str) or BlobProperties.
    +        :type blobs: str or ~azure.storage.blob.BlobProperties
    +        :keyword str delete_snapshots:
    +            Required if a blob has associated snapshots. Values include:
    +             - "only": Deletes only the blobs snapshots.
    +             - "include": Deletes the blob along with all snapshots.
    +        :keyword lease:
    +            Required if a blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword bool raise_on_any_failure:
    +            This is a boolean param which defaults to True. When this is set, an exception
    +            is raised even if there is a single operation failure.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: An iterator of responses, one for each blob in order
    +        :rtype: Iterator[~azure.core.pipeline.transport.HttpResponse]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START delete_multiple_blobs]
    +                :end-before: [END delete_multiple_blobs]
    +                :language: python
    +                :dedent: 8
    +                :caption: Deleting multiple blobs.
    +        """
    +        raise_on_any_failure = kwargs.pop('raise_on_any_failure', True)
    +        options = BlobClient._generic_delete_blob_options(  # pylint: disable=protected-access
    +            **kwargs
    +        )
    +        options.update({'raise_on_any_failure': raise_on_any_failure})
    +        query_parameters, header_parameters = self._generate_delete_blobs_options(**options)
    +        # To pass kwargs to "_batch_send", we need to remove anything that was
    +        # in the Autorest signature for Autorest, otherwise transport will be upset
    +        for possible_param in ['timeout', 'delete_snapshots', 'lease_access_conditions', 'modified_access_conditions']:
    +            options.pop(possible_param, None)
    +
    +        reqs = []
    +        for blob in blobs:
    +            blob_name = _get_blob_name(blob)
    +            req = HttpRequest(
    +                "DELETE",
    +                "/{}/{}".format(self.container_name, blob_name),
    +                headers=header_parameters
    +            )
    +            req.format_parameters(query_parameters)
    +            reqs.append(req)
    +
    +        return self._batch_send(*reqs, **options)
    +
    +    def _generate_set_tier_options(
    +        self, tier, rehydrate_priority=None, request_id=None, lease_access_conditions=None, **kwargs
    +    ):
    +        """This code is a copy from _generated.
    +
    +        Once Autorest is able to provide request preparation this code should be removed.
    +        """
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "tier"
    +        timeout = kwargs.pop('timeout', None)
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._client._serialize.query("timeout", timeout, 'int', minimum=0)  # pylint: disable=protected-access
    +        query_parameters['comp'] = self._client._serialize.query("comp", comp, 'str')  # pylint: disable=protected-access, specify-parameter-names-in-call
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-access-tier'] = self._client._serialize.header("tier", tier, 'str')  # pylint: disable=protected-access, specify-parameter-names-in-call
    +        if rehydrate_priority is not None:
    +            header_parameters['x-ms-rehydrate-priority'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "rehydrate_priority", rehydrate_priority, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._client._serialize.header("lease_id", lease_id, 'str')  # pylint: disable=protected-access
    +
    +        return query_parameters, header_parameters
    +
    +    @distributed_trace
    +    def set_standard_blob_tier_blobs(
    +        self,
    +        standard_blob_tier,  # type: Union[str, StandardBlobTier]
    +        *blobs,  # type: Union[str, BlobProperties]
    +        **kwargs
    +    ):
    +        # type: (...) -> Iterator[HttpResponse]
    +        """This operation sets the tier on block blobs.
    +
    +        A block blob's tier determines Hot/Cool/Archive storage type.
    +        This operation does not update the blob's ETag.
    +
    +        :param standard_blob_tier:
    +            Indicates the tier to be set on the blob. Options include 'Hot', 'Cool',
    +            'Archive'. The hot tier is optimized for storing data that is accessed
    +            frequently. The cool storage tier is optimized for storing data that
    +            is infrequently accessed and stored for at least a month. The archive
    +            tier is optimized for storing data that is rarely accessed and stored
    +            for at least six months with flexible latency requirements.
    +        :type standard_blob_tier: str or ~azure.storage.blob.StandardBlobTier
    +        :param blobs: The blobs with which to interact. This can be a single blob, or multiple values can
    +            be supplied, where each value is either the name of the blob (str) or BlobProperties.
    +        :type blobs: str or ~azure.storage.blob.BlobProperties
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword bool raise_on_any_failure:
    +            This is a boolean param which defaults to True. When this is set, an exception
    +            is raised even if there is a single operation failure.
    +        :return: An iterator of responses, one for each blob in order
    +        :rtype: Iterator[~azure.core.pipeline.transport.HttpResponse]
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if standard_blob_tier is None:
    +            raise ValueError("A StandardBlobTier must be specified")
    +
    +        query_parameters, header_parameters = self._generate_set_tier_options(
    +            tier=standard_blob_tier,
    +            lease_access_conditions=access_conditions,
    +            **kwargs
    +        )
    +        # To pass kwargs to "_batch_send", we need to remove anything that was
    +        # in the Autorest signature for Autorest, otherwise transport will be upset
    +        for possible_param in ['timeout', 'lease']:
    +            kwargs.pop(possible_param, None)
    +
    +        reqs = []
    +        for blob in blobs:
    +            blob_name = _get_blob_name(blob)
    +            req = HttpRequest(
    +                "PUT",
    +                "/{}/{}".format(self.container_name, blob_name),
    +                headers=header_parameters
    +            )
    +            req.format_parameters(query_parameters)
    +            reqs.append(req)
    +
    +        return self._batch_send(*reqs, **kwargs)
    +
    +    @distributed_trace
    +    def set_premium_page_blob_tier_blobs(
    +        self,
    +        premium_page_blob_tier,  # type: Union[str, PremiumPageBlobTier]
    +        *blobs,  # type: Union[str, BlobProperties]
    +        **kwargs
    +    ):
    +        # type: (...) -> Iterator[HttpResponse]
    +        """Sets the page blob tiers on the blobs. This API is only supported for page blobs on premium accounts.
    +
    +        :param premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :type premium_page_blob_tier: ~azure.storage.blob.PremiumPageBlobTier
    +        :param blobs: The blobs with which to interact. This can be a single blob, or multiple values can
    +            be supplied, where each value is either the name of the blob (str) or BlobProperties.
    +        :type blobs: str or ~azure.storage.blob.BlobProperties
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword bool raise_on_any_failure:
    +            This is a boolean param which defaults to True. When this is set, an exception
    +            is raised even if there is a single operation failure.
    +        :return: An iterator of responses, one for each blob in order
    +        :rtype: iterator[~azure.core.pipeline.transport.HttpResponse]
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if premium_page_blob_tier is None:
    +            raise ValueError("A PremiumPageBlobTier must be specified")
    +
    +        query_parameters, header_parameters = self._generate_set_tier_options(
    +            tier=premium_page_blob_tier,
    +            lease_access_conditions=access_conditions,
    +            **kwargs
    +        )
    +        # To pass kwargs to "_batch_send", we need to remove anything that was
    +        # in the Autorest signature for Autorest, otherwise transport will be upset
    +        for possible_param in ['timeout', 'lease']:
    +            kwargs.pop(possible_param, None)
    +
    +        reqs = []
    +        for blob in blobs:
    +            blob_name = _get_blob_name(blob)
    +            req = HttpRequest(
    +                "PUT",
    +                "/{}/{}".format(self.container_name, blob_name),
    +                headers=header_parameters
    +            )
    +            req.format_parameters(query_parameters)
    +            reqs.append(req)
    +
    +        return self._batch_send(*reqs, **kwargs)
    +
    +    def get_blob_client(
    +            self, blob,  # type: Union[str, BlobProperties]
    +            snapshot=None  # type: str
    +        ):
    +        # type: (...) -> BlobClient
    +        """Get a client to interact with the specified blob.
    +
    +        The blob need not already exist.
    +
    +        :param blob:
    +            The blob with which to interact.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param str snapshot:
    +            The optional blob snapshot on which to operate. This can be the snapshot ID string
    +            or the response returned from :func:`~BlobClient.create_snapshot()`.
    +        :returns: A BlobClient.
    +        :rtype: ~azure.storage.blob.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START get_blob_client]
    +                :end-before: [END get_blob_client]
    +                :language: python
    +                :dedent: 8
    +                :caption: Get the blob client.
    +        """
    +        blob_name = _get_blob_name(blob)
    +        _pipeline = Pipeline(
    +            transport=TransportWrapper(self._pipeline._transport), # pylint: disable = protected-access
    +            policies=self._pipeline._impl_policies # pylint: disable = protected-access
    +        )
    +        return BlobClient(
    +            self.url, container_name=self.container_name, blob_name=blob_name, snapshot=snapshot,
    +            credential=self.credential, api_version=self.api_version, _configuration=self._config,
    +            _pipeline=self._pipeline, _location_mode=self._location_mode, _hosts=self._hosts,
    +            require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key,
    +            key_resolver_function=self.key_resolver_function)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_deserialize.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_deserialize.py
    new file mode 100644
    index 000000000000..9796c6cc90c6
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_deserialize.py
    @@ -0,0 +1,84 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=no-self-use
    +
    +from typing import (  # pylint: disable=unused-import
    +    Tuple, Dict, List,
    +    TYPE_CHECKING
    +)
    +
    +from ._shared.response_handlers import deserialize_metadata
    +from ._models import BlobProperties, ContainerProperties, BlobAnalyticsLogging, Metrics, CorsRule, RetentionPolicy, \
    +    StaticWebsite
    +
    +if TYPE_CHECKING:
    +    from ._generated.models import PageList  # added after porting
    +    # from azure.storage.blob._generated.models import PageList
    +
    +
    +def deserialize_blob_properties(response, obj, headers):
    +    metadata = deserialize_metadata(response, obj, headers)
    +    blob_properties = BlobProperties(
    +        metadata=metadata,
    +        **headers
    +    )
    +    if 'Content-Range' in headers:
    +        if 'x-ms-blob-content-md5' in headers:
    +            blob_properties.content_settings.content_md5 = headers['x-ms-blob-content-md5']
    +        else:
    +            blob_properties.content_settings.content_md5 = None
    +    return blob_properties
    +
    +
    +def deserialize_blob_stream(response, obj, headers):
    +    blob_properties = deserialize_blob_properties(response, obj, headers)
    +    obj.properties = blob_properties
    +    return response.location_mode, obj
    +
    +
    +def deserialize_container_properties(response, obj, headers):
    +    metadata = deserialize_metadata(response, obj, headers)
    +    container_properties = ContainerProperties(
    +        metadata=metadata,
    +        **headers
    +    )
    +    return container_properties
    +
    +
    +def get_page_ranges_result(ranges):
    +    # type: (PageList) -> Tuple[List[Dict[str, int]], List[Dict[str, int]]]
    +    page_range = [] # type: ignore
    +    clear_range = [] # type: List
    +    if ranges.page_range:
    +        page_range = [{'start': b.start, 'end': b.end} for b in ranges.page_range] # type: ignore
    +    if ranges.clear_range:
    +        clear_range = [{'start': b.start, 'end': b.end} for b in ranges.clear_range]
    +    return page_range, clear_range  # type: ignore
    +
    +
    +def service_stats_deserialize(generated):
    +    """Deserialize a ServiceStats objects into a dict.
    +    """
    +    return {
    +        'geo_replication': {
    +            'status': generated.geo_replication.status,
    +            'last_sync_time': generated.geo_replication.last_sync_time,
    +        }
    +    }
    +
    +
    +def service_properties_deserialize(generated):
    +    """Deserialize a ServiceProperties objects into a dict.
    +    """
    +    return {
    +        'analytics_logging': BlobAnalyticsLogging._from_generated(generated.logging),  # pylint: disable=protected-access
    +        'hour_metrics': Metrics._from_generated(generated.hour_metrics),  # pylint: disable=protected-access
    +        'minute_metrics': Metrics._from_generated(generated.minute_metrics),  # pylint: disable=protected-access
    +        'cors': [CorsRule._from_generated(cors) for cors in generated.cors],  # pylint: disable=protected-access
    +        'target_version': generated.default_service_version,  # pylint: disable=protected-access
    +        'delete_retention_policy': RetentionPolicy._from_generated(generated.delete_retention_policy),  # pylint: disable=protected-access
    +        'static_website': StaticWebsite._from_generated(generated.static_website),  # pylint: disable=protected-access
    +    }
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_download.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_download.py
    new file mode 100644
    index 000000000000..478ed3c2804a
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_download.py
    @@ -0,0 +1,579 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import sys
    +import threading
    +import warnings
    +from io import BytesIO
    +
    +from azure.core.exceptions import HttpResponseError
    +from azure.core.tracing.common import with_current_context
    +from ._shared.encryption import decrypt_blob
    +from ._shared.request_handlers import validate_and_format_range_headers
    +from ._shared.response_handlers import process_storage_error, parse_length_from_content_range
    +from ._deserialize import get_page_ranges_result
    +
    +
    +def process_range_and_offset(start_range, end_range, length, encryption):
    +    start_offset, end_offset = 0, 0
    +    if encryption.get("key") is not None or encryption.get("resolver") is not None:
    +        if start_range is not None:
    +            # Align the start of the range along a 16 byte block
    +            start_offset = start_range % 16
    +            start_range -= start_offset
    +
    +            # Include an extra 16 bytes for the IV if necessary
    +            # Because of the previous offsetting, start_range will always
    +            # be a multiple of 16.
    +            if start_range > 0:
    +                start_offset += 16
    +                start_range -= 16
    +
    +        if length is not None:
    +            # Align the end of the range along a 16 byte block
    +            end_offset = 15 - (end_range % 16)
    +            end_range += end_offset
    +
    +    return (start_range, end_range), (start_offset, end_offset)
    +
    +
    +def process_content(data, start_offset, end_offset, encryption):
    +    if data is None:
    +        raise ValueError("Response cannot be None.")
    +    try:
    +        content = b"".join(list(data))
    +    except Exception as error:
    +        raise HttpResponseError(message="Download stream interrupted.", response=data.response, error=error)
    +    if content and encryption.get("key") is not None or encryption.get("resolver") is not None:
    +        try:
    +            return decrypt_blob(
    +                encryption.get("required"),
    +                encryption.get("key"),
    +                encryption.get("resolver"),
    +                content,
    +                start_offset,
    +                end_offset,
    +                data.response.headers,
    +            )
    +        except Exception as error:
    +            raise HttpResponseError(message="Decryption failed.", response=data.response, error=error)
    +    return content
    +
    +
    +class _ChunkDownloader(object):  # pylint: disable=too-many-instance-attributes
    +    def __init__(
    +        self,
    +        client=None,
    +        non_empty_ranges=None,
    +        total_size=None,
    +        chunk_size=None,
    +        current_progress=None,
    +        start_range=None,
    +        end_range=None,
    +        stream=None,
    +        parallel=None,
    +        validate_content=None,
    +        encryption_options=None,
    +        **kwargs
    +    ):
    +        self.client = client
    +        self.non_empty_ranges = non_empty_ranges
    +
    +        # Information on the download range/chunk size
    +        self.chunk_size = chunk_size
    +        self.total_size = total_size
    +        self.start_index = start_range
    +        self.end_index = end_range
    +
    +        # The destination that we will write to
    +        self.stream = stream
    +        self.stream_lock = threading.Lock() if parallel else None
    +        self.progress_lock = threading.Lock() if parallel else None
    +
    +        # For a parallel download, the stream is always seekable, so we note down the current position
    +        # in order to seek to the right place when out-of-order chunks come in
    +        self.stream_start = stream.tell() if parallel else None
    +
    +        # Download progress so far
    +        self.progress_total = current_progress
    +
    +        # Encryption
    +        self.encryption_options = encryption_options
    +
    +        # Parameters for each get operation
    +        self.validate_content = validate_content
    +        self.request_options = kwargs
    +
    +    def _calculate_range(self, chunk_start):
    +        if chunk_start + self.chunk_size > self.end_index:
    +            chunk_end = self.end_index
    +        else:
    +            chunk_end = chunk_start + self.chunk_size
    +        return chunk_start, chunk_end
    +
    +    def get_chunk_offsets(self):
    +        index = self.start_index
    +        while index < self.end_index:
    +            yield index
    +            index += self.chunk_size
    +
    +    def process_chunk(self, chunk_start):
    +        chunk_start, chunk_end = self._calculate_range(chunk_start)
    +        chunk_data = self._download_chunk(chunk_start, chunk_end - 1)
    +        length = chunk_end - chunk_start
    +        if length > 0:
    +            self._write_to_stream(chunk_data, chunk_start)
    +            self._update_progress(length)
    +
    +    def yield_chunk(self, chunk_start):
    +        chunk_start, chunk_end = self._calculate_range(chunk_start)
    +        return self._download_chunk(chunk_start, chunk_end - 1)
    +
    +    def _update_progress(self, length):
    +        if self.progress_lock:
    +            with self.progress_lock:  # pylint: disable=not-context-manager
    +                self.progress_total += length
    +        else:
    +            self.progress_total += length
    +
    +    def _write_to_stream(self, chunk_data, chunk_start):
    +        if self.stream_lock:
    +            with self.stream_lock:  # pylint: disable=not-context-manager
    +                self.stream.seek(self.stream_start + (chunk_start - self.start_index))
    +                self.stream.write(chunk_data)
    +        else:
    +            self.stream.write(chunk_data)
    +
    +    def _do_optimize(self, given_range_start, given_range_end):
    +        # If we have no page range list stored, then assume there's data everywhere for that page blob
    +        # or it's a block blob or append blob
    +        if self.non_empty_ranges is None:
    +            return False
    +
    +        for source_range in self.non_empty_ranges:
    +            # Case 1: As the range list is sorted, if we've reached such a source_range
    +            # we've checked all the appropriate source_range already and haven't found any overlapping.
    +            # so the given range doesn't have any data and download optimization could be applied.
    +            # given range:		|   |
    +            # source range:			       |   |
    +            if given_range_end < source_range['start']:  # pylint:disable=no-else-return
    +                return True
    +            # Case 2: the given range comes after source_range, continue checking.
    +            # given range:				|   |
    +            # source range:	|   |
    +            elif source_range['end'] < given_range_start:
    +                pass
    +            # Case 3: source_range and given range overlap somehow, no need to optimize.
    +            else:
    +                return False
    +        # Went through all src_ranges, but nothing overlapped. Optimization will be applied.
    +        return True
    +
    +    def _download_chunk(self, chunk_start, chunk_end):
    +        download_range, offset = process_range_and_offset(
    +            chunk_start, chunk_end, chunk_end, self.encryption_options
    +        )
    +
    +        # No need to download the empty chunk from server if there's no data in the chunk to be downloaded.
    +        # Do optimize and create empty chunk locally if condition is met.
    +        if self._do_optimize(download_range[0], download_range[1]):
    +            chunk_data = b"\x00" * self.chunk_size
    +        else:
    +            range_header, range_validation = validate_and_format_range_headers(
    +                download_range[0],
    +                download_range[1],
    +                check_content_md5=self.validate_content
    +            )
    +
    +            try:
    +                _, response = self.client.download(
    +                    range=range_header,
    +                    range_get_content_md5=range_validation,
    +                    validate_content=self.validate_content,
    +                    data_stream_total=self.total_size,
    +                    download_stream_current=self.progress_total,
    +                    **self.request_options
    +                )
    +            except HttpResponseError as error:
    +                process_storage_error(error)
    +
    +            chunk_data = process_content(response, offset[0], offset[1], self.encryption_options)
    +
    +            # This makes sure that if_match is set so that we can validate
    +            # that subsequent downloads are to an unmodified blob
    +            if self.request_options.get("modified_access_conditions"):
    +                self.request_options["modified_access_conditions"].if_match = response.properties.etag
    +
    +        return chunk_data
    +
    +
    +class _ChunkIterator(object):
    +    """Async iterator for chunks in blob download stream."""
    +
    +    def __init__(self, size, content, downloader):
    +        self.size = size
    +        self._current_content = content
    +        self._iter_downloader = downloader
    +        self._iter_chunks = None
    +        self._complete = (size == 0)
    +
    +    def __len__(self):
    +        return self.size
    +
    +    def __iter__(self):
    +        return self
    +
    +    def __next__(self):
    +        """Iterate through responses."""
    +        if self._complete:
    +            raise StopIteration("Download complete")
    +        if not self._iter_downloader:
    +            # If no iterator was supplied, the download completed with
    +            # the initial GET, so we just return that data
    +            self._complete = True
    +            return self._current_content
    +
    +        if not self._iter_chunks:
    +            self._iter_chunks = self._iter_downloader.get_chunk_offsets()
    +        else:
    +            chunk = next(self._iter_chunks)
    +            self._current_content = self._iter_downloader.yield_chunk(chunk)
    +
    +        return self._current_content
    +
    +    next = __next__  # Python 2 compatibility.
    +
    +
    +class StorageStreamDownloader(object):  # pylint: disable=too-many-instance-attributes
    +    """A streaming object to download from Azure Storage.
    +
    +    :ivar str name:
    +        The name of the blob being downloaded.
    +    :ivar str container:
    +        The name of the container where the blob is.
    +    :ivar ~azure.storage.blob.BlobProperties properties:
    +        The properties of the blob being downloaded. If only a range of the data is being
    +        downloaded, this will be reflected in the properties.
    +    :ivar int size:
    +        The size of the total data in the stream. This will be the byte range if speficied,
    +        otherwise the total size of the blob.
    +    """
    +
    +    def __init__(
    +        self,
    +        clients=None,
    +        config=None,
    +        start_range=None,
    +        end_range=None,
    +        validate_content=None,
    +        encryption_options=None,
    +        max_concurrency=1,
    +        name=None,
    +        container=None,
    +        encoding=None,
    +        **kwargs
    +    ):
    +        self.name = name
    +        self.container = container
    +        self.properties = None
    +        self.size = None
    +
    +        self._clients = clients
    +        self._config = config
    +        self._start_range = start_range
    +        self._end_range = end_range
    +        self._max_concurrency = max_concurrency
    +        self._encoding = encoding
    +        self._validate_content = validate_content
    +        self._encryption_options = encryption_options or {}
    +        self._request_options = kwargs
    +        self._location_mode = None
    +        self._download_complete = False
    +        self._current_content = None
    +        self._file_size = None
    +        self._non_empty_ranges = None
    +        self._response = None
    +
    +        # The service only provides transactional MD5s for chunks under 4MB.
    +        # If validate_content is on, get only self.MAX_CHUNK_GET_SIZE for the first
    +        # chunk so a transactional MD5 can be retrieved.
    +        self._first_get_size = (
    +            self._config.max_single_get_size if not self._validate_content else self._config.max_chunk_get_size
    +        )
    +        initial_request_start = self._start_range if self._start_range is not None else 0
    +        if self._end_range is not None and self._end_range - self._start_range < self._first_get_size:
    +            initial_request_end = self._end_range
    +        else:
    +            initial_request_end = initial_request_start + self._first_get_size - 1
    +
    +        self._initial_range, self._initial_offset = process_range_and_offset(
    +            initial_request_start, initial_request_end, self._end_range, self._encryption_options
    +        )
    +
    +        self._response = self._initial_request()
    +        self.properties = self._response.properties
    +        self.properties.name = self.name
    +        self.properties.container = self.container
    +
    +        # Set the content length to the download size instead of the size of
    +        # the last range
    +        self.properties.size = self.size
    +
    +        # Overwrite the content range to the user requested range
    +        self.properties.content_range = "bytes {0}-{1}/{2}".format(
    +            self._start_range,
    +            self._end_range,
    +            self._file_size
    +        )
    +
    +        # Overwrite the content MD5 as it is the MD5 for the last range instead
    +        # of the stored MD5
    +        # TODO: Set to the stored MD5 when the service returns this
    +        self.properties.content_md5 = None
    +
    +        if self.size == 0:
    +            self._current_content = b""
    +        else:
    +            self._current_content = process_content(
    +                self._response,
    +                self._initial_offset[0],
    +                self._initial_offset[1],
    +                self._encryption_options
    +            )
    +
    +    def __len__(self):
    +        return self.size
    +
    +    def _initial_request(self):
    +        range_header, range_validation = validate_and_format_range_headers(
    +            self._initial_range[0],
    +            self._initial_range[1],
    +            start_range_required=False,
    +            end_range_required=False,
    +            check_content_md5=self._validate_content
    +        )
    +
    +        try:
    +            location_mode, response = self._clients.blob.download(
    +                range=range_header,
    +                range_get_content_md5=range_validation,
    +                validate_content=self._validate_content,
    +                data_stream_total=None,
    +                download_stream_current=0,
    +                **self._request_options
    +            )
    +
    +            # Check the location we read from to ensure we use the same one
    +            # for subsequent requests.
    +            self._location_mode = location_mode
    +
    +            # Parse the total file size and adjust the download size if ranges
    +            # were specified
    +            self._file_size = parse_length_from_content_range(response.properties.content_range)
    +            if self._end_range is not None:
    +                # Use the end range index unless it is over the end of the file
    +                self.size = min(self._file_size, self._end_range - self._start_range + 1)
    +            elif self._start_range is not None:
    +                self.size = self._file_size - self._start_range
    +            else:
    +                self.size = self._file_size
    +
    +        except HttpResponseError as error:
    +            if self._start_range is None and error.response.status_code == 416:
    +                # Get range will fail on an empty file. If the user did not
    +                # request a range, do a regular get request in order to get
    +                # any properties.
    +                try:
    +                    _, response = self._clients.blob.download(
    +                        validate_content=self._validate_content,
    +                        data_stream_total=0,
    +                        download_stream_current=0,
    +                        **self._request_options
    +                    )
    +                except HttpResponseError as error:
    +                    process_storage_error(error)
    +
    +                # Set the download size to empty
    +                self.size = 0
    +                self._file_size = 0
    +            else:
    +                process_storage_error(error)
    +
    +        # get page ranges to optimize downloading sparse page blob
    +        if response.properties.blob_type == 'PageBlob':
    +            try:
    +                page_ranges = self._clients.page_blob.get_page_ranges()
    +                self._non_empty_ranges = get_page_ranges_result(page_ranges)[0]
    +            # according to the REST API documentation:
    +            # in a highly fragmented page blob with a large number of writes,
    +            # a Get Page Ranges request can fail due to an internal server timeout.
    +            # thus, if the page blob is not sparse, it's ok for it to fail
    +            except HttpResponseError:
    +                pass
    +
    +        # If the file is small, the download is complete at this point.
    +        # If file size is large, download the rest of the file in chunks.
    +        if response.properties.size != self.size:
    +            # Lock on the etag. This can be overriden by the user by specifying '*'
    +            if self._request_options.get("modified_access_conditions"):
    +                if not self._request_options["modified_access_conditions"].if_match:
    +                    self._request_options["modified_access_conditions"].if_match = response.properties.etag
    +        else:
    +            self._download_complete = True
    +        return response
    +
    +    def chunks(self):
    +        if self.size == 0 or self._download_complete:
    +            iter_downloader = None
    +        else:
    +            data_end = self._file_size
    +            if self._end_range is not None:
    +                # Use the end range index unless it is over the end of the file
    +                data_end = min(self._file_size, self._end_range + 1)
    +            iter_downloader = _ChunkDownloader(
    +                client=self._clients.blob,
    +                non_empty_ranges=self._non_empty_ranges,
    +                total_size=self.size,
    +                chunk_size=self._config.max_chunk_get_size,
    +                current_progress=self._first_get_size,
    +                start_range=self._initial_range[1] + 1,  # start where the first download ended
    +                end_range=data_end,
    +                stream=None,
    +                parallel=False,
    +                validate_content=self._validate_content,
    +                encryption_options=self._encryption_options,
    +                use_location=self._location_mode,
    +                **self._request_options
    +            )
    +        return _ChunkIterator(
    +            size=self.size,
    +            content=self._current_content,
    +            downloader=iter_downloader)
    +
    +    def readall(self):
    +        """Download the contents of this blob.
    +
    +        This operation is blocking until all data is downloaded.
    +        :rtype: bytes or str
    +        """
    +        stream = BytesIO()
    +        self.readinto(stream)
    +        data = stream.getvalue()
    +        if self._encoding:
    +            return data.decode(self._encoding)
    +        return data
    +
    +    def content_as_bytes(self, max_concurrency=1):
    +        """Download the contents of this file.
    +
    +        This operation is blocking until all data is downloaded.
    +
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :rtype: bytes
    +        """
    +        warnings.warn(
    +            "content_as_bytes is deprecated, use readall instead",
    +            DeprecationWarning
    +        )
    +        self._max_concurrency = max_concurrency
    +        return self.readall()
    +
    +    def content_as_text(self, max_concurrency=1, encoding="UTF-8"):
    +        """Download the contents of this blob, and decode as text.
    +
    +        This operation is blocking until all data is downloaded.
    +
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :param str encoding:
    +            Test encoding to decode the downloaded bytes. Default is UTF-8.
    +        :rtype: str
    +        """
    +        warnings.warn(
    +            "content_as_text is deprecated, use readall instead",
    +            DeprecationWarning
    +        )
    +        self._max_concurrency = max_concurrency
    +        self._encoding = encoding
    +        return self.readall()
    +
    +    def readinto(self, stream):
    +        """Download the contents of this file to a stream.
    +
    +        :param stream:
    +            The stream to download to. This can be an open file-handle,
    +            or any writable stream. The stream must be seekable if the download
    +            uses more than one parallel connection.
    +        :returns: The number of bytes read.
    +        :rtype: int
    +        """
    +        # The stream must be seekable if parallel download is required
    +        parallel = self._max_concurrency > 1
    +        if parallel:
    +            error_message = "Target stream handle must be seekable."
    +            if sys.version_info >= (3,) and not stream.seekable():
    +                raise ValueError(error_message)
    +
    +            try:
    +                stream.seek(stream.tell())
    +            except (NotImplementedError, AttributeError):
    +                raise ValueError(error_message)
    +
    +        # Write the content to the user stream
    +        stream.write(self._current_content)
    +        if self._download_complete:
    +            return self.size
    +
    +        data_end = self._file_size
    +        if self._end_range is not None:
    +            # Use the length unless it is over the end of the file
    +            data_end = min(self._file_size, self._end_range + 1)
    +
    +        downloader = _ChunkDownloader(
    +            client=self._clients.blob,
    +            non_empty_ranges=self._non_empty_ranges,
    +            total_size=self.size,
    +            chunk_size=self._config.max_chunk_get_size,
    +            current_progress=self._first_get_size,
    +            start_range=self._initial_range[1] + 1,  # Start where the first download ended
    +            end_range=data_end,
    +            stream=stream,
    +            parallel=parallel,
    +            validate_content=self._validate_content,
    +            encryption_options=self._encryption_options,
    +            use_location=self._location_mode,
    +            **self._request_options
    +        )
    +        if parallel:
    +            import concurrent.futures
    +            executor = concurrent.futures.ThreadPoolExecutor(self._max_concurrency)
    +            list(executor.map(
    +                    with_current_context(downloader.process_chunk),
    +                    downloader.get_chunk_offsets()
    +                ))
    +        else:
    +            for chunk in downloader.get_chunk_offsets():
    +                downloader.process_chunk(chunk)
    +        return self.size
    +
    +    def download_to_stream(self, stream, max_concurrency=1):
    +        """Download the contents of this blob to a stream.
    +
    +        :param stream:
    +            The stream to download to. This can be an open file-handle,
    +            or any writable stream. The stream must be seekable if the download
    +            uses more than one parallel connection.
    +        :returns: The properties of the downloaded blob.
    +        :rtype: Any
    +        """
    +        warnings.warn(
    +            "download_to_stream is deprecated, use readinto instead",
    +            DeprecationWarning
    +        )
    +        self._max_concurrency = max_concurrency
    +        self.readinto(stream)
    +        return self.properties
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/__init__.py
    new file mode 100644
    index 000000000000..f5c8f4a954df
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/__init__.py
    @@ -0,0 +1,18 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._azure_blob_storage import AzureBlobStorage
    +__all__ = ['AzureBlobStorage']
    +
    +from .version import VERSION
    +
    +__version__ = VERSION
    +
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/_azure_blob_storage.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/_azure_blob_storage.py
    new file mode 100644
    index 000000000000..4da98d39c392
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/_azure_blob_storage.py
    @@ -0,0 +1,83 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core import PipelineClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration import AzureBlobStorageConfiguration
    +from azure.core.exceptions import map_error
    +from .operations import ServiceOperations
    +from .operations import ContainerOperations
    +from .operations import DirectoryOperations
    +from .operations import BlobOperations
    +from .operations import PageBlobOperations
    +from .operations import AppendBlobOperations
    +from .operations import BlockBlobOperations
    +from . import models
    +
    +
    +class AzureBlobStorage(object):
    +    """AzureBlobStorage
    +
    +
    +    :ivar service: Service operations
    +    :vartype service: azure.storage.blob.operations.ServiceOperations
    +    :ivar container: Container operations
    +    :vartype container: azure.storage.blob.operations.ContainerOperations
    +    :ivar directory: Directory operations
    +    :vartype directory: azure.storage.blob.operations.DirectoryOperations
    +    :ivar blob: Blob operations
    +    :vartype blob: azure.storage.blob.operations.BlobOperations
    +    :ivar page_blob: PageBlob operations
    +    :vartype page_blob: azure.storage.blob.operations.PageBlobOperations
    +    :ivar append_blob: AppendBlob operations
    +    :vartype append_blob: azure.storage.blob.operations.AppendBlobOperations
    +    :ivar block_blob: BlockBlob operations
    +    :vartype block_blob: azure.storage.blob.operations.BlockBlobOperations
    +
    +    :param url: The URL of the service account, container, or blob that is the
    +     targe of the desired operation.
    +    :type url: str
    +    """
    +
    +    def __init__(self, url, **kwargs):
    +
    +        base_url = '{url}'
    +        self._config = AzureBlobStorageConfiguration(url, **kwargs)
    +        self._client = PipelineClient(base_url=base_url, config=self._config, **kwargs)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '2019-07-07'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +        self.service = ServiceOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.container = ContainerOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.directory = DirectoryOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.blob = BlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.page_blob = PageBlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.append_blob = AppendBlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.block_blob = BlockBlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +
    +    def close(self):
    +        self._client.close()
    +    def __enter__(self):
    +        self._client.__enter__()
    +        return self
    +    def __exit__(self, *exc_details):
    +        self._client.__exit__(*exc_details)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/_configuration.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/_configuration.py
    new file mode 100644
    index 000000000000..24ac275f9379
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/_configuration.py
    @@ -0,0 +1,52 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.configuration import Configuration
    +from azure.core.pipeline import policies
    +
    +from .version import VERSION
    +
    +
    +class AzureBlobStorageConfiguration(Configuration):
    +    """Configuration for AzureBlobStorage
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param url: The URL of the service account, container, or blob that is the
    +     targe of the desired operation.
    +    :type url: str
    +    :ivar version: Specifies the version of the operation to use for this
    +     request.
    +    :type version: str
    +    """
    +
    +    def __init__(self, url, **kwargs):
    +
    +        if url is None:
    +            raise ValueError("Parameter 'url' must not be None.")
    +
    +        super(AzureBlobStorageConfiguration, self).__init__(**kwargs)
    +        self._configure(**kwargs)
    +
    +        self.user_agent_policy.add_user_agent('azsdk-python-azureblobstorage/{}'.format(VERSION))
    +        self.generate_client_request_id = True
    +
    +        self.url = url
    +        self.version = "2019-07-07"
    +
    +    def _configure(self, **kwargs):
    +        self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs)
    +        self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs)
    +        self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
    +        self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
    +        self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs)
    +        self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
    +        self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/__init__.py
    new file mode 100644
    index 000000000000..009c96594356
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/__init__.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._azure_blob_storage_async import AzureBlobStorage
    +__all__ = ['AzureBlobStorage']
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/_azure_blob_storage_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/_azure_blob_storage_async.py
    new file mode 100644
    index 000000000000..6273538a3a10
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/_azure_blob_storage_async.py
    @@ -0,0 +1,84 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core import AsyncPipelineClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration_async import AzureBlobStorageConfiguration
    +from azure.core.exceptions import map_error
    +from .operations_async import ServiceOperations
    +from .operations_async import ContainerOperations
    +from .operations_async import DirectoryOperations
    +from .operations_async import BlobOperations
    +from .operations_async import PageBlobOperations
    +from .operations_async import AppendBlobOperations
    +from .operations_async import BlockBlobOperations
    +from .. import models
    +
    +
    +class AzureBlobStorage(object):
    +    """AzureBlobStorage
    +
    +
    +    :ivar service: Service operations
    +    :vartype service: azure.storage.blob.aio.operations_async.ServiceOperations
    +    :ivar container: Container operations
    +    :vartype container: azure.storage.blob.aio.operations_async.ContainerOperations
    +    :ivar directory: Directory operations
    +    :vartype directory: azure.storage.blob.aio.operations_async.DirectoryOperations
    +    :ivar blob: Blob operations
    +    :vartype blob: azure.storage.blob.aio.operations_async.BlobOperations
    +    :ivar page_blob: PageBlob operations
    +    :vartype page_blob: azure.storage.blob.aio.operations_async.PageBlobOperations
    +    :ivar append_blob: AppendBlob operations
    +    :vartype append_blob: azure.storage.blob.aio.operations_async.AppendBlobOperations
    +    :ivar block_blob: BlockBlob operations
    +    :vartype block_blob: azure.storage.blob.aio.operations_async.BlockBlobOperations
    +
    +    :param url: The URL of the service account, container, or blob that is the
    +     targe of the desired operation.
    +    :type url: str
    +    """
    +
    +    def __init__(
    +            self, url, **kwargs):
    +
    +        base_url = '{url}'
    +        self._config = AzureBlobStorageConfiguration(url, **kwargs)
    +        self._client = AsyncPipelineClient(base_url=base_url, config=self._config, **kwargs)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '2019-07-07'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +        self.service = ServiceOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.container = ContainerOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.directory = DirectoryOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.blob = BlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.page_blob = PageBlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.append_blob = AppendBlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.block_blob = BlockBlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +
    +    async def close(self):
    +        await self._client.close()
    +    async def __aenter__(self):
    +        await self._client.__aenter__()
    +        return self
    +    async def __aexit__(self, *exc_details):
    +        await self._client.__aexit__(*exc_details)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/_configuration_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/_configuration_async.py
    new file mode 100644
    index 000000000000..e061a25e717e
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/_configuration_async.py
    @@ -0,0 +1,53 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.configuration import Configuration
    +from azure.core.pipeline import policies
    +
    +from ..version import VERSION
    +
    +
    +class AzureBlobStorageConfiguration(Configuration):
    +    """Configuration for AzureBlobStorage
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param url: The URL of the service account, container, or blob that is the
    +     targe of the desired operation.
    +    :type url: str
    +    :ivar version: Specifies the version of the operation to use for this
    +     request.
    +    :type version: str
    +    """
    +
    +    def __init__(self, url, **kwargs):
    +
    +        if url is None:
    +            raise ValueError("Parameter 'url' must not be None.")
    +
    +        super(AzureBlobStorageConfiguration, self).__init__(**kwargs)
    +        self._configure(**kwargs)
    +
    +        self.user_agent_policy.add_user_agent('azsdk-python-azureblobstorage/{}'.format(VERSION))
    +        self.generate_client_request_id = True
    +        self.accept_language = None
    +
    +        self.url = url
    +        self.version = "2019-07-07"
    +
    +    def _configure(self, **kwargs):
    +        self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs)
    +        self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs)
    +        self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
    +        self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
    +        self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs)
    +        self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
    +        self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/__init__.py
    new file mode 100644
    index 000000000000..dec05192c81f
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/__init__.py
    @@ -0,0 +1,28 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._service_operations_async import ServiceOperations
    +from ._container_operations_async import ContainerOperations
    +from ._directory_operations_async import DirectoryOperations
    +from ._blob_operations_async import BlobOperations
    +from ._page_blob_operations_async import PageBlobOperations
    +from ._append_blob_operations_async import AppendBlobOperations
    +from ._block_blob_operations_async import BlockBlobOperations
    +
    +__all__ = [
    +    'ServiceOperations',
    +    'ContainerOperations',
    +    'DirectoryOperations',
    +    'BlobOperations',
    +    'PageBlobOperations',
    +    'AppendBlobOperations',
    +    'BlockBlobOperations',
    +]
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_append_blob_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_append_blob_operations_async.py
    new file mode 100644
    index 000000000000..db94e0a92b36
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_append_blob_operations_async.py
    @@ -0,0 +1,563 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class AppendBlobOperations:
    +    """AppendBlobOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_blob_type: Specifies the type of blob to create: block blob, page blob, or append blob. Constant value: "AppendBlob".
    +    :ivar comp: . Constant value: "appendblock".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_blob_type = "AppendBlob"
    +        self.comp = "appendblock"
    +
    +    async def create(self, content_length, timeout=None, metadata=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Create Append Blob operation creates a new append blob.
    +
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-blob-type'] = self._serialize.header("self.x_ms_blob_type", self.x_ms_blob_type, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def append_block(self, body, content_length, timeout=None, transactional_content_md5=None, transactional_content_crc64=None, request_id=None, lease_access_conditions=None, append_position_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Append Block operation commits a new block of data to the end of an
    +        existing append blob. The Append Block operation is permitted only if
    +        the blob was created with x-ms-blob-type set to AppendBlob. Append
    +        Block is supported only on version 2015-02-21 version or later.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param append_position_access_conditions: Additional parameters for
    +         the operation
    +        :type append_position_access_conditions:
    +         ~azure.storage.blob.models.AppendPositionAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        max_size = None
    +        if append_position_access_conditions is not None:
    +            max_size = append_position_access_conditions.max_size
    +        append_position = None
    +        if append_position_access_conditions is not None:
    +            append_position = append_position_access_conditions.append_position
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.append_block.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("self.comp", self.comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if max_size is not None:
    +            header_parameters['x-ms-blob-condition-maxsize'] = self._serialize.header("max_size", max_size, 'long')
    +        if append_position is not None:
    +            header_parameters['x-ms-blob-condition-appendpos'] = self._serialize.header("append_position", append_position, 'long')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-append-offset': self._deserialize('str', response.headers.get('x-ms-blob-append-offset')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    append_block.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def append_block_from_url(self, source_url, content_length, source_range=None, source_content_md5=None, source_contentcrc64=None, timeout=None, transactional_content_md5=None, request_id=None, cpk_info=None, cpk_scope_info=None, lease_access_conditions=None, append_position_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Append Block operation commits a new block of data to the end of an
    +        existing append blob where the contents are read from a source url. The
    +        Append Block operation is permitted only if the blob was created with
    +        x-ms-blob-type set to AppendBlob. Append Block is supported only on
    +        version 2015-02-21 version or later.
    +
    +        :param source_url: Specify a URL to the copy source.
    +        :type source_url: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param source_range: Bytes of source data in the specified range.
    +        :type source_range: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_contentcrc64: Specify the crc64 calculated for the range
    +         of bytes that must be read from the copy source.
    +        :type source_contentcrc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param append_position_access_conditions: Additional parameters for
    +         the operation
    +        :type append_position_access_conditions:
    +         ~azure.storage.blob.models.AppendPositionAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        max_size = None
    +        if append_position_access_conditions is not None:
    +            max_size = append_position_access_conditions.max_size
    +        append_position = None
    +        if append_position_access_conditions is not None:
    +            append_position = append_position_access_conditions.append_position
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        # Construct URL
    +        url = self.append_block_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("self.comp", self.comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("source_url", source_url, 'str')
    +        if source_range is not None:
    +            header_parameters['x-ms-source-range'] = self._serialize.header("source_range", source_range, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        if source_contentcrc64 is not None:
    +            header_parameters['x-ms-source-content-crc64'] = self._serialize.header("source_contentcrc64", source_contentcrc64, 'bytearray')
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if max_size is not None:
    +            header_parameters['x-ms-blob-condition-maxsize'] = self._serialize.header("max_size", max_size, 'long')
    +        if append_position is not None:
    +            header_parameters['x-ms-blob-condition-appendpos'] = self._serialize.header("append_position", append_position, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-append-offset': self._deserialize('str', response.headers.get('x-ms-blob-append-offset')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    append_block_from_url.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_blob_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_blob_operations_async.py
    new file mode 100644
    index 000000000000..3374d597419f
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_blob_operations_async.py
    @@ -0,0 +1,2443 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class BlobOperations:
    +    """BlobOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_requires_sync: . Constant value: "true".
    +    :ivar x_ms_copy_action: . Constant value: "abort".
    +    :ivar restype: . Constant value: "account".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_requires_sync = "true"
    +        self.x_ms_copy_action = "abort"
    +        self.restype = "account"
    +
    +    async def download(self, snapshot=None, timeout=None, range=None, range_get_content_md5=None, range_get_content_crc64=None, request_id=None, lease_access_conditions=None, cpk_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Download operation reads or downloads a blob from the system,
    +        including its metadata and properties. You can also call Download to
    +        read a snapshot.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param range_get_content_md5: When set to true and specified together
    +         with the Range, the service returns the MD5 hash for the range, as
    +         long as the range is less than or equal to 4 MB in size.
    +        :type range_get_content_md5: bool
    +        :param range_get_content_crc64: When set to true and specified
    +         together with the Range, the service returns the CRC64 hash for the
    +         range, as long as the range is less than or equal to 4 MB in size.
    +        :type range_get_content_crc64: bool
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: object or the result of cls(response)
    +        :rtype: Generator
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.download.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        if range_get_content_md5 is not None:
    +            header_parameters['x-ms-range-get-content-md5'] = self._serialize.header("range_get_content_md5", range_get_content_md5, 'bool')
    +        if range_get_content_crc64 is not None:
    +            header_parameters['x-ms-range-get-content-crc64'] = self._serialize.header("range_get_content_crc64", range_get_content_crc64, 'bool')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=True, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200, 206]:
    +            await response.load_body()
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = response.stream_download(self._client._pipeline)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'Content-Range': self._deserialize('str', response.headers.get('Content-Range')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'Content-Encoding': self._deserialize('str', response.headers.get('Content-Encoding')),
    +                'Cache-Control': self._deserialize('str', response.headers.get('Cache-Control')),
    +                'Content-Disposition': self._deserialize('str', response.headers.get('Content-Disposition')),
    +                'Content-Language': self._deserialize('str', response.headers.get('Content-Language')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-blob-type': self._deserialize(models.BlobType, response.headers.get('x-ms-blob-type')),
    +                'x-ms-copy-completion-time': self._deserialize('rfc-1123', response.headers.get('x-ms-copy-completion-time')),
    +                'x-ms-copy-status-description': self._deserialize('str', response.headers.get('x-ms-copy-status-description')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-progress': self._deserialize('str', response.headers.get('x-ms-copy-progress')),
    +                'x-ms-copy-source': self._deserialize('str', response.headers.get('x-ms-copy-source')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Accept-Ranges': self._deserialize('str', response.headers.get('Accept-Ranges')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-blob-content-md5': self._deserialize('bytearray', response.headers.get('x-ms-blob-content-md5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +        if response.status_code == 206:
    +            deserialized = response.stream_download(self._client._pipeline)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'Content-Range': self._deserialize('str', response.headers.get('Content-Range')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'Content-Encoding': self._deserialize('str', response.headers.get('Content-Encoding')),
    +                'Cache-Control': self._deserialize('str', response.headers.get('Cache-Control')),
    +                'Content-Disposition': self._deserialize('str', response.headers.get('Content-Disposition')),
    +                'Content-Language': self._deserialize('str', response.headers.get('Content-Language')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-blob-type': self._deserialize(models.BlobType, response.headers.get('x-ms-blob-type')),
    +                'x-ms-copy-completion-time': self._deserialize('rfc-1123', response.headers.get('x-ms-copy-completion-time')),
    +                'x-ms-copy-status-description': self._deserialize('str', response.headers.get('x-ms-copy-status-description')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-progress': self._deserialize('str', response.headers.get('x-ms-copy-progress')),
    +                'x-ms-copy-source': self._deserialize('str', response.headers.get('x-ms-copy-source')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Accept-Ranges': self._deserialize('str', response.headers.get('Accept-Ranges')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-blob-content-md5': self._deserialize('bytearray', response.headers.get('x-ms-blob-content-md5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    download.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def get_properties(self, snapshot=None, timeout=None, request_id=None, lease_access_conditions=None, cpk_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Get Properties operation returns all user-defined metadata,
    +        standard HTTP properties, and system properties for the blob. It does
    +        not return the content of the blob.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.get_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.head(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-creation-time': self._deserialize('rfc-1123', response.headers.get('x-ms-creation-time')),
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'x-ms-blob-type': self._deserialize(models.BlobType, response.headers.get('x-ms-blob-type')),
    +                'x-ms-copy-completion-time': self._deserialize('rfc-1123', response.headers.get('x-ms-copy-completion-time')),
    +                'x-ms-copy-status-description': self._deserialize('str', response.headers.get('x-ms-copy-status-description')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-progress': self._deserialize('str', response.headers.get('x-ms-copy-progress')),
    +                'x-ms-copy-source': self._deserialize('str', response.headers.get('x-ms-copy-source')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-incremental-copy': self._deserialize('bool', response.headers.get('x-ms-incremental-copy')),
    +                'x-ms-copy-destination-snapshot': self._deserialize('str', response.headers.get('x-ms-copy-destination-snapshot')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'Content-Encoding': self._deserialize('str', response.headers.get('Content-Encoding')),
    +                'Content-Disposition': self._deserialize('str', response.headers.get('Content-Disposition')),
    +                'Content-Language': self._deserialize('str', response.headers.get('Content-Language')),
    +                'Cache-Control': self._deserialize('str', response.headers.get('Cache-Control')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'Accept-Ranges': self._deserialize('str', response.headers.get('Accept-Ranges')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-access-tier': self._deserialize('str', response.headers.get('x-ms-access-tier')),
    +                'x-ms-access-tier-inferred': self._deserialize('bool', response.headers.get('x-ms-access-tier-inferred')),
    +                'x-ms-archive-status': self._deserialize('str', response.headers.get('x-ms-archive-status')),
    +                'x-ms-access-tier-change-time': self._deserialize('rfc-1123', response.headers.get('x-ms-access-tier-change-time')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_properties.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def delete(self, snapshot=None, timeout=None, delete_snapshots=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """If the storage account's soft delete feature is disabled then, when a
    +        blob is deleted, it is permanently removed from the storage account. If
    +        the storage account's soft delete feature is enabled, then, when a blob
    +        is deleted, it is marked for deletion and becomes inaccessible
    +        immediately. However, the blob service retains the blob or snapshot for
    +        the number of days specified by the DeleteRetentionPolicy section of
    +        [Storage service properties] (Set-Blob-Service-Properties.md). After
    +        the specified number of days has passed, the blob's data is permanently
    +        removed from the storage account. Note that you continue to be charged
    +        for the soft-deleted blob's storage until it is permanently removed.
    +        Use the List Blobs API and specify the "include=deleted" query
    +        parameter to discover which blobs and snapshots have been soft deleted.
    +        You can then use the Undelete Blob API to restore a soft-deleted blob.
    +        All other operations on a soft-deleted blob or snapshot causes the
    +        service to return an HTTP status code of 404 (ResourceNotFound).
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param delete_snapshots: Required if the blob has associated
    +         snapshots. Specify one of the following two options: include: Delete
    +         the base blob and all of its snapshots. only: Delete only the blob's
    +         snapshots and not the blob itself. Possible values include: 'include',
    +         'only'
    +        :type delete_snapshots: str or
    +         ~azure.storage.blob.models.DeleteSnapshotsOptionType
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if delete_snapshots is not None:
    +            header_parameters['x-ms-delete-snapshots'] = self._serialize.header("delete_snapshots", delete_snapshots, 'DeleteSnapshotsOptionType')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    delete.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def set_access_control(self, timeout=None, owner=None, group=None, posix_permissions=None, posix_acl=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Set the owner, group, permissions, or access control list for a blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param owner: Optional. The owner of the blob or directory.
    +        :type owner: str
    +        :param group: Optional. The owning group of the blob or directory.
    +        :type group: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_acl: Sets POSIX access control rights on files and
    +         directories. The value is a comma-separated list of access control
    +         entries. Each access control entry (ACE) consists of a scope, a type,
    +         a user or group identifier, and permissions in the format
    +         "[scope:][type]:[id]:[permissions]".
    +        :type posix_acl: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "setAccessControl"
    +
    +        # Construct URL
    +        url = self.set_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if owner is not None:
    +            header_parameters['x-ms-owner'] = self._serialize.header("owner", owner, 'str')
    +        if group is not None:
    +            header_parameters['x-ms-group'] = self._serialize.header("group", group, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_acl is not None:
    +            header_parameters['x-ms-acl'] = self._serialize.header("posix_acl", posix_acl, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_access_control.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def get_access_control(self, timeout=None, upn=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Get the owner, group, permissions, or access control list for a blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param upn: Optional. Valid only when Hierarchical Namespace is
    +         enabled for the account. If "true", the identity values returned in
    +         the x-ms-owner, x-ms-group, and x-ms-acl response headers will be
    +         transformed from Azure Active Directory Object IDs to User Principal
    +         Names.  If "false", the values will be returned as Azure Active
    +         Directory Object IDs. The default value is false.
    +        :type upn: bool
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "getAccessControl"
    +
    +        # Construct URL
    +        url = self.get_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if upn is not None:
    +            query_parameters['upn'] = self._serialize.query("upn", upn, 'bool')
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.head(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-owner': self._deserialize('str', response.headers.get('x-ms-owner')),
    +                'x-ms-group': self._deserialize('str', response.headers.get('x-ms-group')),
    +                'x-ms-permissions': self._deserialize('str', response.headers.get('x-ms-permissions')),
    +                'x-ms-acl': self._deserialize('str', response.headers.get('x-ms-acl')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_access_control.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def rename(self, rename_source, timeout=None, path_rename_mode=None, directory_properties=None, posix_permissions=None, posix_umask=None, source_lease_id=None, request_id=None, directory_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Rename a blob/file.  By default, the destination is overwritten and if
    +        the destination already exists and has a lease the lease is broken.
    +        This operation supports conditional HTTP requests.  For more
    +        information, see [Specifying Conditional Headers for Blob Service
    +        Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).
    +        To fail if the destination already exists, use a conditional request
    +        with If-None-Match: "*".
    +
    +        :param rename_source: The file or directory to be renamed. The value
    +         must have the following format: "/{filesysystem}/{path}".  If
    +         "x-ms-properties" is specified, the properties will overwrite the
    +         existing properties; otherwise, the existing properties will be
    +         preserved.
    +        :type rename_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param path_rename_mode: Determines the behavior of the rename
    +         operation. Possible values include: 'legacy', 'posix'
    +        :type path_rename_mode: str or
    +         ~azure.storage.blob.models.PathRenameMode
    +        :param directory_properties: Optional.  User-defined properties to be
    +         stored with the file or directory, in the format of a comma-separated
    +         list of name and value pairs "n1=v1, n2=v2, ...", where each value is
    +         base64 encoded.
    +        :type directory_properties: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_umask: Only valid if Hierarchical Namespace is enabled
    +         for the account. This umask restricts permission settings for file and
    +         directory, and will only be applied when default Acl does not exist in
    +         parent directory. If the umask bit has set, it means that the
    +         corresponding permission will be disabled. Otherwise the corresponding
    +         permission will be determined by the permission. A 4-digit octal
    +         notation (e.g. 0022) is supported here. If no umask was specified, a
    +         default umask - 0027 will be used.
    +        :type posix_umask: str
    +        :param source_lease_id: A lease ID for the source path. If specified,
    +         the source path must have an active lease and the leaase ID must
    +         match.
    +        :type source_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param directory_http_headers: Additional parameters for the operation
    +        :type directory_http_headers:
    +         ~azure.storage.blob.models.DirectoryHttpHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        cache_control = None
    +        if directory_http_headers is not None:
    +            cache_control = directory_http_headers.cache_control
    +        content_type = None
    +        if directory_http_headers is not None:
    +            content_type = directory_http_headers.content_type
    +        content_encoding = None
    +        if directory_http_headers is not None:
    +            content_encoding = directory_http_headers.content_encoding
    +        content_language = None
    +        if directory_http_headers is not None:
    +            content_language = directory_http_headers.content_language
    +        content_disposition = None
    +        if directory_http_headers is not None:
    +            content_disposition = directory_http_headers.content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        # Construct URL
    +        url = self.rename.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if path_rename_mode is not None:
    +            query_parameters['mode'] = self._serialize.query("path_rename_mode", path_rename_mode, 'PathRenameMode')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-rename-source'] = self._serialize.header("rename_source", rename_source, 'str')
    +        if directory_properties is not None:
    +            header_parameters['x-ms-properties'] = self._serialize.header("directory_properties", directory_properties, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_umask is not None:
    +            header_parameters['x-ms-umask'] = self._serialize.header("posix_umask", posix_umask, 'str')
    +        if source_lease_id is not None:
    +            header_parameters['x-ms-source-lease-id'] = self._serialize.header("source_lease_id", source_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if cache_control is not None:
    +            header_parameters['x-ms-cache-control'] = self._serialize.header("cache_control", cache_control, 'str')
    +        if content_type is not None:
    +            header_parameters['x-ms-content-type'] = self._serialize.header("content_type", content_type, 'str')
    +        if content_encoding is not None:
    +            header_parameters['x-ms-content-encoding'] = self._serialize.header("content_encoding", content_encoding, 'str')
    +        if content_language is not None:
    +            header_parameters['x-ms-content-language'] = self._serialize.header("content_language", content_language, 'str')
    +        if content_disposition is not None:
    +            header_parameters['x-ms-content-disposition'] = self._serialize.header("content_disposition", content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    rename.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def undelete(self, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """Undelete a blob that was previously soft deleted.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "undelete"
    +
    +        # Construct URL
    +        url = self.undelete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    undelete.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def set_http_headers(self, timeout=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Set HTTP Headers operation sets system properties on the blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.set_http_headers.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_http_headers.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def set_metadata(self, timeout=None, metadata=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Set Blob Metadata operation sets user-defined metadata for the
    +        specified blob as one or more name-value pairs.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "metadata"
    +
    +        # Construct URL
    +        url = self.set_metadata.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_metadata.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def acquire_lease(self, timeout=None, duration=None, proposed_lease_id=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param duration: Specifies the duration of the lease, in seconds, or
    +         negative one (-1) for a lease that never expires. A non-infinite lease
    +         can be between 15 and 60 seconds. A lease duration cannot be changed
    +         using renew or change.
    +        :type duration: int
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "acquire"
    +
    +        # Construct URL
    +        url = self.acquire_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if duration is not None:
    +            header_parameters['x-ms-lease-duration'] = self._serialize.header("duration", duration, 'int')
    +        if proposed_lease_id is not None:
    +            header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    acquire_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def release_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "release"
    +
    +        # Construct URL
    +        url = self.release_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    release_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def renew_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "renew"
    +
    +        # Construct URL
    +        url = self.renew_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    renew_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def change_lease(self, lease_id, proposed_lease_id, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "change"
    +
    +        # Construct URL
    +        url = self.change_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    change_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def break_lease(self, timeout=None, break_period=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param break_period: For a break operation, proposed duration the
    +         lease should continue before it is broken, in seconds, between 0 and
    +         60. This break period is only used if it is shorter than the time
    +         remaining on the lease. If longer, the time remaining on the lease is
    +         used. A new lease will not be available before the break period has
    +         expired, but the lease may be held for longer than the break period.
    +         If this header does not appear with a break operation, a
    +         fixed-duration lease breaks after the remaining lease period elapses,
    +         and an infinite lease breaks immediately.
    +        :type break_period: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "break"
    +
    +        # Construct URL
    +        url = self.break_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if break_period is not None:
    +            header_parameters['x-ms-lease-break-period'] = self._serialize.header("break_period", break_period, 'int')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-time': self._deserialize('int', response.headers.get('x-ms-lease-time')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    break_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def create_snapshot(self, timeout=None, metadata=None, request_id=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """The Create Snapshot operation creates a read-only snapshot of a blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "snapshot"
    +
    +        # Construct URL
    +        url = self.create_snapshot.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-snapshot': self._deserialize('str', response.headers.get('x-ms-snapshot')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create_snapshot.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def start_copy_from_url(self, copy_source, timeout=None, metadata=None, tier=None, rehydrate_priority=None, request_id=None, source_modified_access_conditions=None, modified_access_conditions=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """The Start Copy From URL operation copies a blob or an internet resource
    +        to a new blob.
    +
    +        :param copy_source: Specifies the name of the source page blob
    +         snapshot. This value is a URL of up to 2 KB in length that specifies a
    +         page blob snapshot. The value should be URL-encoded as it would appear
    +         in a request URI. The source blob must either be public or must be
    +         authenticated via a shared access signature.
    +        :type copy_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param rehydrate_priority: Optional: Indicates the priority with which
    +         to rehydrate an archived blob. Possible values include: 'High',
    +         'Standard'
    +        :type rehydrate_priority: str or
    +         ~azure.storage.blob.models.RehydratePriority
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        # Construct URL
    +        url = self.start_copy_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        if rehydrate_priority is not None:
    +            header_parameters['x-ms-rehydrate-priority'] = self._serialize.header("rehydrate_priority", rehydrate_priority, 'str')
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    start_copy_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def copy_from_url(self, copy_source, timeout=None, metadata=None, tier=None, request_id=None, source_content_md5=None, source_modified_access_conditions=None, modified_access_conditions=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """The Copy From URL operation copies a blob or an internet resource to a
    +        new blob. It will not return a response until the copy is complete.
    +
    +        :param copy_source: Specifies the name of the source page blob
    +         snapshot. This value is a URL of up to 2 KB in length that specifies a
    +         page blob snapshot. The value should be URL-encoded as it would appear
    +         in a request URI. The source blob must either be public or must be
    +         authenticated via a shared access signature.
    +        :type copy_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        # Construct URL
    +        url = self.copy_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        header_parameters['x-ms-requires-sync'] = self._serialize.header("self.x_ms_requires_sync", self.x_ms_requires_sync, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-status': self._deserialize(models.SyncCopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    copy_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def abort_copy_from_url(self, copy_id, timeout=None, request_id=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """The Abort Copy From URL operation aborts a pending Copy From URL
    +        operation, and leaves a destination blob with zero length and full
    +        metadata.
    +
    +        :param copy_id: The copy identifier provided in the x-ms-copy-id
    +         header of the original Copy Blob operation.
    +        :type copy_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "copy"
    +
    +        # Construct URL
    +        url = self.abort_copy_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['copyid'] = self._serialize.query("copy_id", copy_id, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-copy-action'] = self._serialize.header("self.x_ms_copy_action", self.x_ms_copy_action, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    abort_copy_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def set_tier(self, tier, timeout=None, rehydrate_priority=None, request_id=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """The Set Tier operation sets the tier on a blob. The operation is
    +        allowed on a page blob in a premium storage account and on a block blob
    +        in a blob storage account (locally redundant storage only). A premium
    +        page blob's tier determines the allowed size, IOPS, and bandwidth of
    +        the blob. A block blob's tier determines Hot/Cool/Archive storage type.
    +        This operation does not update the blob's ETag.
    +
    +        :param tier: Indicates the tier to be set on the blob. Possible values
    +         include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30', 'P40', 'P50', 'P60',
    +         'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierRequired
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param rehydrate_priority: Optional: Indicates the priority with which
    +         to rehydrate an archived blob. Possible values include: 'High',
    +         'Standard'
    +        :type rehydrate_priority: str or
    +         ~azure.storage.blob.models.RehydratePriority
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "tier"
    +
    +        # Construct URL
    +        url = self.set_tier.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        if rehydrate_priority is not None:
    +            header_parameters['x-ms-rehydrate-priority'] = self._serialize.header("rehydrate_priority", rehydrate_priority, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200, 202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_tier.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def get_account_info(self, *, cls=None, **kwargs):
    +        """Returns the sku name and account kind .
    +
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_account_info.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['restype'] = self._serialize.query("self.restype", self.restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-sku-name': self._deserialize(models.SkuName, response.headers.get('x-ms-sku-name')),
    +                'x-ms-account-kind': self._deserialize(models.AccountKind, response.headers.get('x-ms-account-kind')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_account_info.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_block_blob_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_block_blob_operations_async.py
    new file mode 100644
    index 000000000000..b5225decc55c
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_block_blob_operations_async.py
    @@ -0,0 +1,802 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class BlockBlobOperations:
    +    """BlockBlobOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_blob_type: Specifies the type of blob to create: block blob, page blob, or append blob. Constant value: "BlockBlob".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_blob_type = "BlockBlob"
    +
    +    async def upload(self, body, content_length, timeout=None, transactional_content_md5=None, metadata=None, tier=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Upload Block Blob operation updates the content of an existing
    +        block blob. Updating an existing block blob overwrites any existing
    +        metadata on the blob. Partial updates are not supported with Put Blob;
    +        the content of the existing blob is overwritten with the content of the
    +        new blob. To perform a partial update of the content of a block blob,
    +        use the Put Block List operation.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.upload.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-blob-type'] = self._serialize.header("self.x_ms_blob_type", self.x_ms_blob_type, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    upload.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def stage_block(self, block_id, content_length, body, transactional_content_md5=None, transactional_content_crc64=None, timeout=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, *, cls=None, **kwargs):
    +        """The Stage Block operation creates a new block to be committed as part
    +        of a blob.
    +
    +        :param block_id: A valid Base64 string value that identifies the
    +         block. Prior to encoding, the string must be less than or equal to 64
    +         bytes in size. For a given blob, the length of the value specified for
    +         the blockid parameter must be the same size for each block.
    +        :type block_id: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param body: Initial data
    +        :type body: Generator
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +
    +        comp = "block"
    +
    +        # Construct URL
    +        url = self.stage_block.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['blockid'] = self._serialize.query("block_id", block_id, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    stage_block.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def stage_block_from_url(self, block_id, content_length, source_url, source_range=None, source_content_md5=None, source_contentcrc64=None, timeout=None, request_id=None, cpk_info=None, cpk_scope_info=None, lease_access_conditions=None, source_modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Stage Block operation creates a new block to be committed as part
    +        of a blob where the contents are read from a URL.
    +
    +        :param block_id: A valid Base64 string value that identifies the
    +         block. Prior to encoding, the string must be less than or equal to 64
    +         bytes in size. For a given blob, the length of the value specified for
    +         the blockid parameter must be the same size for each block.
    +        :type block_id: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param source_url: Specify a URL to the copy source.
    +        :type source_url: str
    +        :param source_range: Bytes of source data in the specified range.
    +        :type source_range: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_contentcrc64: Specify the crc64 calculated for the range
    +         of bytes that must be read from the copy source.
    +        :type source_contentcrc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        comp = "block"
    +
    +        # Construct URL
    +        url = self.stage_block_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['blockid'] = self._serialize.query("block_id", block_id, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("source_url", source_url, 'str')
    +        if source_range is not None:
    +            header_parameters['x-ms-source-range'] = self._serialize.header("source_range", source_range, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        if source_contentcrc64 is not None:
    +            header_parameters['x-ms-source-content-crc64'] = self._serialize.header("source_contentcrc64", source_contentcrc64, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    stage_block_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def commit_block_list(self, blocks, timeout=None, transactional_content_md5=None, transactional_content_crc64=None, metadata=None, tier=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Commit Block List operation writes a blob by specifying the list of
    +        block IDs that make up the blob. In order to be written as part of a
    +        blob, a block must have been successfully written to the server in a
    +        prior Put Block operation. You can call Put Block List to update a blob
    +        by uploading only those blocks that have changed, then committing the
    +        new and existing blocks together. You can do this by specifying whether
    +        to commit a block from the committed block list or from the uncommitted
    +        block list, or to commit the most recently uploaded version of the
    +        block, whichever list it may belong to.
    +
    +        :param blocks:
    +        :type blocks: ~azure.storage.blob.models.BlockLookupList
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "blocklist"
    +
    +        # Construct URL
    +        url = self.commit_block_list.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(blocks, 'BlockLookupList')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    commit_block_list.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def get_block_list(self, list_type="committed", snapshot=None, timeout=None, request_id=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """The Get Block List operation retrieves the list of blocks that have
    +        been uploaded as part of a block blob.
    +
    +        :param list_type: Specifies whether to return the list of committed
    +         blocks, the list of uncommitted blocks, or both lists together.
    +         Possible values include: 'committed', 'uncommitted', 'all'
    +        :type list_type: str or ~azure.storage.blob.models.BlockListType
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BlockList or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.BlockList
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "blocklist"
    +
    +        # Construct URL
    +        url = self.get_block_list.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        query_parameters['blocklisttype'] = self._serialize.query("list_type", list_type, 'BlockListType')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BlockList', response)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-blob-content-length': self._deserialize('long', response.headers.get('x-ms-blob-content-length')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_block_list.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_container_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_container_operations_async.py
    new file mode 100644
    index 000000000000..635a98cfbc6e
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_container_operations_async.py
    @@ -0,0 +1,1327 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class ContainerOperations:
    +    """ContainerOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +
    +    async def create(self, timeout=None, metadata=None, access=None, request_id=None, container_cpk_scope_info=None, *, cls=None, **kwargs):
    +        """creates a new container under the specified account. If the container
    +        with the same name already exists, the operation fails.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param access: Specifies whether data in the container may be accessed
    +         publicly and the level of access. Possible values include:
    +         'container', 'blob'
    +        :type access: str or ~azure.storage.blob.models.PublicAccessType
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param container_cpk_scope_info: Additional parameters for the
    +         operation
    +        :type container_cpk_scope_info:
    +         ~azure.storage.blob.models.ContainerCpkScopeInfo
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        default_encryption_scope = None
    +        if container_cpk_scope_info is not None:
    +            default_encryption_scope = container_cpk_scope_info.default_encryption_scope
    +        deny_encryption_scope_override = None
    +        if container_cpk_scope_info is not None:
    +            deny_encryption_scope_override = container_cpk_scope_info.deny_encryption_scope_override
    +
    +        restype = "container"
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if access is not None:
    +            header_parameters['x-ms-blob-public-access'] = self._serialize.header("access", access, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if default_encryption_scope is not None:
    +            header_parameters['x-ms-default-encryption-scope'] = self._serialize.header("default_encryption_scope", default_encryption_scope, 'str')
    +        if deny_encryption_scope_override is not None:
    +            header_parameters['x-ms-deny-encryption-scope-override'] = self._serialize.header("deny_encryption_scope_override", deny_encryption_scope_override, 'bool')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{containerName}'}
    +
    +    async def get_properties(self, timeout=None, request_id=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """returns all user-defined metadata and system properties for the
    +        specified container. The data returned does not include the container's
    +        list of blobs.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        restype = "container"
    +
    +        # Construct URL
    +        url = self.get_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-public-access': self._deserialize('str', response.headers.get('x-ms-blob-public-access')),
    +                'x-ms-has-immutability-policy': self._deserialize('bool', response.headers.get('x-ms-has-immutability-policy')),
    +                'x-ms-has-legal-hold': self._deserialize('bool', response.headers.get('x-ms-has-legal-hold')),
    +                'x-ms-default-encryption-scope': self._deserialize('str', response.headers.get('x-ms-default-encryption-scope')),
    +                'x-ms-deny-encryption-scope-override': self._deserialize('bool', response.headers.get('x-ms-deny-encryption-scope-override')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_properties.metadata = {'url': '/{containerName}'}
    +
    +    async def delete(self, timeout=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """operation marks the specified container for deletion. The container and
    +        any blobs contained within it are later deleted during garbage
    +        collection.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        restype = "container"
    +
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    delete.metadata = {'url': '/{containerName}'}
    +
    +    async def set_metadata(self, timeout=None, metadata=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """operation sets one or more user-defined name-value pairs for the
    +        specified container.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +
    +        restype = "container"
    +        comp = "metadata"
    +
    +        # Construct URL
    +        url = self.set_metadata.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_metadata.metadata = {'url': '/{containerName}'}
    +
    +    async def get_access_policy(self, timeout=None, request_id=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """gets the permissions for the specified container. The permissions
    +        indicate whether container data may be accessed publicly.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: list or the result of cls(response)
    +        :rtype: list[~azure.storage.blob.models.SignedIdentifier]
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        restype = "container"
    +        comp = "acl"
    +
    +        # Construct URL
    +        url = self.get_access_policy.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('[SignedIdentifier]', response)
    +            header_dict = {
    +                'x-ms-blob-public-access': self._deserialize('str', response.headers.get('x-ms-blob-public-access')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_access_policy.metadata = {'url': '/{containerName}'}
    +
    +    async def set_access_policy(self, container_acl=None, timeout=None, access=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """sets the permissions for the specified container. The permissions
    +        indicate whether blobs in a container may be accessed publicly.
    +
    +        :param container_acl: the acls for the container
    +        :type container_acl: list[~azure.storage.blob.models.SignedIdentifier]
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param access: Specifies whether data in the container may be accessed
    +         publicly and the level of access. Possible values include:
    +         'container', 'blob'
    +        :type access: str or ~azure.storage.blob.models.PublicAccessType
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        restype = "container"
    +        comp = "acl"
    +
    +        # Construct URL
    +        url = self.set_access_policy.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        if access is not None:
    +            header_parameters['x-ms-blob-public-access'] = self._serialize.header("access", access, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct body
    +        serialization_ctxt = {'xml': {'name': 'SignedIdentifiers', 'itemsName': 'SignedIdentifiers', 'wrapped': True}}
    +        if container_acl is not None:
    +            body_content = self._serialize.body(container_acl, '[SignedIdentifier]', serialization_ctxt=serialization_ctxt)
    +        else:
    +            body_content = None
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_access_policy.metadata = {'url': '/{containerName}'}
    +
    +    async def acquire_lease(self, timeout=None, duration=None, proposed_lease_id=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param duration: Specifies the duration of the lease, in seconds, or
    +         negative one (-1) for a lease that never expires. A non-infinite lease
    +         can be between 15 and 60 seconds. A lease duration cannot be changed
    +         using renew or change.
    +        :type duration: int
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "acquire"
    +
    +        # Construct URL
    +        url = self.acquire_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if duration is not None:
    +            header_parameters['x-ms-lease-duration'] = self._serialize.header("duration", duration, 'int')
    +        if proposed_lease_id is not None:
    +            header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    acquire_lease.metadata = {'url': '/{containerName}'}
    +
    +    async def release_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "release"
    +
    +        # Construct URL
    +        url = self.release_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    release_lease.metadata = {'url': '/{containerName}'}
    +
    +    async def renew_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "renew"
    +
    +        # Construct URL
    +        url = self.renew_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    renew_lease.metadata = {'url': '/{containerName}'}
    +
    +    async def break_lease(self, timeout=None, break_period=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param break_period: For a break operation, proposed duration the
    +         lease should continue before it is broken, in seconds, between 0 and
    +         60. This break period is only used if it is shorter than the time
    +         remaining on the lease. If longer, the time remaining on the lease is
    +         used. A new lease will not be available before the break period has
    +         expired, but the lease may be held for longer than the break period.
    +         If this header does not appear with a break operation, a
    +         fixed-duration lease breaks after the remaining lease period elapses,
    +         and an infinite lease breaks immediately.
    +        :type break_period: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "break"
    +
    +        # Construct URL
    +        url = self.break_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if break_period is not None:
    +            header_parameters['x-ms-lease-break-period'] = self._serialize.header("break_period", break_period, 'int')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-time': self._deserialize('int', response.headers.get('x-ms-lease-time')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    break_lease.metadata = {'url': '/{containerName}'}
    +
    +    async def change_lease(self, lease_id, proposed_lease_id, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "change"
    +
    +        # Construct URL
    +        url = self.change_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    change_lease.metadata = {'url': '/{containerName}'}
    +
    +    async def list_blob_flat_segment(self, prefix=None, marker=None, maxresults=None, include=None, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """[Update] The List Blobs operation returns a list of the blobs under the
    +        specified container.
    +
    +        :param prefix: Filters the results to return only containers whose
    +         name begins with the specified prefix.
    +        :type prefix: str
    +        :param marker: A string value that identifies the portion of the list
    +         of containers to be returned with the next listing operation. The
    +         operation returns the NextMarker value within the response body if the
    +         listing operation did not return all containers remaining to be listed
    +         with the current page. The NextMarker value can be used as the value
    +         for the marker parameter in a subsequent call to request the next page
    +         of list items. The marker value is opaque to the client.
    +        :type marker: str
    +        :param maxresults: Specifies the maximum number of containers to
    +         return. If the request does not specify maxresults, or specifies a
    +         value greater than 5000, the server will return up to 5000 items. Note
    +         that if the listing operation crosses a partition boundary, then the
    +         service will return a continuation token for retrieving the remainder
    +         of the results. For this reason, it is possible that the service will
    +         return fewer results than specified by maxresults, or than the default
    +         of 5000.
    +        :type maxresults: int
    +        :param include: Include this parameter to specify one or more datasets
    +         to include in the response.
    +        :type include: list[str or
    +         ~azure.storage.blob.models.ListBlobsIncludeItem]
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: ListBlobsFlatSegmentResponse or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.ListBlobsFlatSegmentResponse
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "container"
    +        comp = "list"
    +
    +        # Construct URL
    +        url = self.list_blob_flat_segment.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if prefix is not None:
    +            query_parameters['prefix'] = self._serialize.query("prefix", prefix, 'str')
    +        if marker is not None:
    +            query_parameters['marker'] = self._serialize.query("marker", marker, 'str')
    +        if maxresults is not None:
    +            query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1)
    +        if include is not None:
    +            query_parameters['include'] = self._serialize.query("include", include, '[ListBlobsIncludeItem]', div=',')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ListBlobsFlatSegmentResponse', response)
    +            header_dict = {
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    list_blob_flat_segment.metadata = {'url': '/{containerName}'}
    +
    +    async def list_blob_hierarchy_segment(self, delimiter, prefix=None, marker=None, maxresults=None, include=None, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """[Update] The List Blobs operation returns a list of the blobs under the
    +        specified container.
    +
    +        :param delimiter: When the request includes this parameter, the
    +         operation returns a BlobPrefix element in the response body that acts
    +         as a placeholder for all blobs whose names begin with the same
    +         substring up to the appearance of the delimiter character. The
    +         delimiter may be a single character or a string.
    +        :type delimiter: str
    +        :param prefix: Filters the results to return only containers whose
    +         name begins with the specified prefix.
    +        :type prefix: str
    +        :param marker: A string value that identifies the portion of the list
    +         of containers to be returned with the next listing operation. The
    +         operation returns the NextMarker value within the response body if the
    +         listing operation did not return all containers remaining to be listed
    +         with the current page. The NextMarker value can be used as the value
    +         for the marker parameter in a subsequent call to request the next page
    +         of list items. The marker value is opaque to the client.
    +        :type marker: str
    +        :param maxresults: Specifies the maximum number of containers to
    +         return. If the request does not specify maxresults, or specifies a
    +         value greater than 5000, the server will return up to 5000 items. Note
    +         that if the listing operation crosses a partition boundary, then the
    +         service will return a continuation token for retrieving the remainder
    +         of the results. For this reason, it is possible that the service will
    +         return fewer results than specified by maxresults, or than the default
    +         of 5000.
    +        :type maxresults: int
    +        :param include: Include this parameter to specify one or more datasets
    +         to include in the response.
    +        :type include: list[str or
    +         ~azure.storage.blob.models.ListBlobsIncludeItem]
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: ListBlobsHierarchySegmentResponse or the result of
    +         cls(response)
    +        :rtype: ~azure.storage.blob.models.ListBlobsHierarchySegmentResponse
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "container"
    +        comp = "list"
    +
    +        # Construct URL
    +        url = self.list_blob_hierarchy_segment.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if prefix is not None:
    +            query_parameters['prefix'] = self._serialize.query("prefix", prefix, 'str')
    +        query_parameters['delimiter'] = self._serialize.query("delimiter", delimiter, 'str')
    +        if marker is not None:
    +            query_parameters['marker'] = self._serialize.query("marker", marker, 'str')
    +        if maxresults is not None:
    +            query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1)
    +        if include is not None:
    +            query_parameters['include'] = self._serialize.query("include", include, '[ListBlobsIncludeItem]', div=',')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ListBlobsHierarchySegmentResponse', response)
    +            header_dict = {
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    list_blob_hierarchy_segment.metadata = {'url': '/{containerName}'}
    +
    +    async def get_account_info(self, *, cls=None, **kwargs):
    +        """Returns the sku name and account kind .
    +
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "account"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_account_info.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-sku-name': self._deserialize(models.SkuName, response.headers.get('x-ms-sku-name')),
    +                'x-ms-account-kind': self._deserialize(models.AccountKind, response.headers.get('x-ms-account-kind')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_account_info.metadata = {'url': '/{containerName}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_directory_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_directory_operations_async.py
    new file mode 100644
    index 000000000000..144bdfff6582
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_directory_operations_async.py
    @@ -0,0 +1,740 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class DirectoryOperations:
    +    """DirectoryOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar resource: . Constant value: "directory".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.resource = "directory"
    +
    +    async def create(self, timeout=None, directory_properties=None, posix_permissions=None, posix_umask=None, request_id=None, directory_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Create a directory. By default, the destination is overwritten and if
    +        the destination already exists and has a lease the lease is broken.
    +        This operation supports conditional HTTP requests.  For more
    +        information, see [Specifying Conditional Headers for Blob Service
    +        Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).
    +        To fail if the destination already exists, use a conditional request
    +        with If-None-Match: "*".
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param directory_properties: Optional.  User-defined properties to be
    +         stored with the file or directory, in the format of a comma-separated
    +         list of name and value pairs "n1=v1, n2=v2, ...", where each value is
    +         base64 encoded.
    +        :type directory_properties: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_umask: Only valid if Hierarchical Namespace is enabled
    +         for the account. This umask restricts permission settings for file and
    +         directory, and will only be applied when default Acl does not exist in
    +         parent directory. If the umask bit has set, it means that the
    +         corresponding permission will be disabled. Otherwise the corresponding
    +         permission will be determined by the permission. A 4-digit octal
    +         notation (e.g. 0022) is supported here. If no umask was specified, a
    +         default umask - 0027 will be used.
    +        :type posix_umask: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param directory_http_headers: Additional parameters for the operation
    +        :type directory_http_headers:
    +         ~azure.storage.blob.models.DirectoryHttpHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        cache_control = None
    +        if directory_http_headers is not None:
    +            cache_control = directory_http_headers.cache_control
    +        content_type = None
    +        if directory_http_headers is not None:
    +            content_type = directory_http_headers.content_type
    +        content_encoding = None
    +        if directory_http_headers is not None:
    +            content_encoding = directory_http_headers.content_encoding
    +        content_language = None
    +        if directory_http_headers is not None:
    +            content_language = directory_http_headers.content_language
    +        content_disposition = None
    +        if directory_http_headers is not None:
    +            content_disposition = directory_http_headers.content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['resource'] = self._serialize.query("self.resource", self.resource, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if directory_properties is not None:
    +            header_parameters['x-ms-properties'] = self._serialize.header("directory_properties", directory_properties, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_umask is not None:
    +            header_parameters['x-ms-umask'] = self._serialize.header("posix_umask", posix_umask, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if cache_control is not None:
    +            header_parameters['x-ms-cache-control'] = self._serialize.header("cache_control", cache_control, 'str')
    +        if content_type is not None:
    +            header_parameters['x-ms-content-type'] = self._serialize.header("content_type", content_type, 'str')
    +        if content_encoding is not None:
    +            header_parameters['x-ms-content-encoding'] = self._serialize.header("content_encoding", content_encoding, 'str')
    +        if content_language is not None:
    +            header_parameters['x-ms-content-language'] = self._serialize.header("content_language", content_language, 'str')
    +        if content_disposition is not None:
    +            header_parameters['x-ms-content-disposition'] = self._serialize.header("content_disposition", content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def rename(self, rename_source, timeout=None, marker=None, path_rename_mode=None, directory_properties=None, posix_permissions=None, posix_umask=None, source_lease_id=None, request_id=None, directory_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Rename a directory. By default, the destination is overwritten and if
    +        the destination already exists and has a lease the lease is broken.
    +        This operation supports conditional HTTP requests. For more
    +        information, see [Specifying Conditional Headers for Blob Service
    +        Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).
    +        To fail if the destination already exists, use a conditional request
    +        with If-None-Match: "*".
    +
    +        :param rename_source: The file or directory to be renamed. The value
    +         must have the following format: "/{filesysystem}/{path}".  If
    +         "x-ms-properties" is specified, the properties will overwrite the
    +         existing properties; otherwise, the existing properties will be
    +         preserved.
    +        :type rename_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param marker: When renaming a directory, the number of paths that are
    +         renamed with each invocation is limited.  If the number of paths to be
    +         renamed exceeds this limit, a continuation token is returned in this
    +         response header.  When a continuation token is returned in the
    +         response, it must be specified in a subsequent invocation of the
    +         rename operation to continue renaming the directory.
    +        :type marker: str
    +        :param path_rename_mode: Determines the behavior of the rename
    +         operation. Possible values include: 'legacy', 'posix'
    +        :type path_rename_mode: str or
    +         ~azure.storage.blob.models.PathRenameMode
    +        :param directory_properties: Optional.  User-defined properties to be
    +         stored with the file or directory, in the format of a comma-separated
    +         list of name and value pairs "n1=v1, n2=v2, ...", where each value is
    +         base64 encoded.
    +        :type directory_properties: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_umask: Only valid if Hierarchical Namespace is enabled
    +         for the account. This umask restricts permission settings for file and
    +         directory, and will only be applied when default Acl does not exist in
    +         parent directory. If the umask bit has set, it means that the
    +         corresponding permission will be disabled. Otherwise the corresponding
    +         permission will be determined by the permission. A 4-digit octal
    +         notation (e.g. 0022) is supported here. If no umask was specified, a
    +         default umask - 0027 will be used.
    +        :type posix_umask: str
    +        :param source_lease_id: A lease ID for the source path. If specified,
    +         the source path must have an active lease and the leaase ID must
    +         match.
    +        :type source_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param directory_http_headers: Additional parameters for the operation
    +        :type directory_http_headers:
    +         ~azure.storage.blob.models.DirectoryHttpHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        cache_control = None
    +        if directory_http_headers is not None:
    +            cache_control = directory_http_headers.cache_control
    +        content_type = None
    +        if directory_http_headers is not None:
    +            content_type = directory_http_headers.content_type
    +        content_encoding = None
    +        if directory_http_headers is not None:
    +            content_encoding = directory_http_headers.content_encoding
    +        content_language = None
    +        if directory_http_headers is not None:
    +            content_language = directory_http_headers.content_language
    +        content_disposition = None
    +        if directory_http_headers is not None:
    +            content_disposition = directory_http_headers.content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        # Construct URL
    +        url = self.rename.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if marker is not None:
    +            query_parameters['continuation'] = self._serialize.query("marker", marker, 'str')
    +        if path_rename_mode is not None:
    +            query_parameters['mode'] = self._serialize.query("path_rename_mode", path_rename_mode, 'PathRenameMode')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-rename-source'] = self._serialize.header("rename_source", rename_source, 'str')
    +        if directory_properties is not None:
    +            header_parameters['x-ms-properties'] = self._serialize.header("directory_properties", directory_properties, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_umask is not None:
    +            header_parameters['x-ms-umask'] = self._serialize.header("posix_umask", posix_umask, 'str')
    +        if source_lease_id is not None:
    +            header_parameters['x-ms-source-lease-id'] = self._serialize.header("source_lease_id", source_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if cache_control is not None:
    +            header_parameters['x-ms-cache-control'] = self._serialize.header("cache_control", cache_control, 'str')
    +        if content_type is not None:
    +            header_parameters['x-ms-content-type'] = self._serialize.header("content_type", content_type, 'str')
    +        if content_encoding is not None:
    +            header_parameters['x-ms-content-encoding'] = self._serialize.header("content_encoding", content_encoding, 'str')
    +        if content_language is not None:
    +            header_parameters['x-ms-content-language'] = self._serialize.header("content_language", content_language, 'str')
    +        if content_disposition is not None:
    +            header_parameters['x-ms-content-disposition'] = self._serialize.header("content_disposition", content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-continuation': self._deserialize('str', response.headers.get('x-ms-continuation')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    rename.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def delete(self, recursive_directory_delete, timeout=None, marker=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Deletes the directory.
    +
    +        :param recursive_directory_delete: If "true", all paths beneath the
    +         directory will be deleted. If "false" and the directory is non-empty,
    +         an error occurs.
    +        :type recursive_directory_delete: bool
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param marker: When renaming a directory, the number of paths that are
    +         renamed with each invocation is limited.  If the number of paths to be
    +         renamed exceeds this limit, a continuation token is returned in this
    +         response header.  When a continuation token is returned in the
    +         response, it must be specified in a subsequent invocation of the
    +         rename operation to continue renaming the directory.
    +        :type marker: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['recursive'] = self._serialize.query("recursive_directory_delete", recursive_directory_delete, 'bool')
    +        if marker is not None:
    +            query_parameters['continuation'] = self._serialize.query("marker", marker, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-continuation': self._deserialize('str', response.headers.get('x-ms-continuation')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    delete.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def set_access_control(self, timeout=None, owner=None, group=None, posix_permissions=None, posix_acl=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Set the owner, group, permissions, or access control list for a
    +        directory.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param owner: Optional. The owner of the blob or directory.
    +        :type owner: str
    +        :param group: Optional. The owning group of the blob or directory.
    +        :type group: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_acl: Sets POSIX access control rights on files and
    +         directories. The value is a comma-separated list of access control
    +         entries. Each access control entry (ACE) consists of a scope, a type,
    +         a user or group identifier, and permissions in the format
    +         "[scope:][type]:[id]:[permissions]".
    +        :type posix_acl: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "setAccessControl"
    +
    +        # Construct URL
    +        url = self.set_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if owner is not None:
    +            header_parameters['x-ms-owner'] = self._serialize.header("owner", owner, 'str')
    +        if group is not None:
    +            header_parameters['x-ms-group'] = self._serialize.header("group", group, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_acl is not None:
    +            header_parameters['x-ms-acl'] = self._serialize.header("posix_acl", posix_acl, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_access_control.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def get_access_control(self, timeout=None, upn=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Get the owner, group, permissions, or access control list for a
    +        directory.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param upn: Optional. Valid only when Hierarchical Namespace is
    +         enabled for the account. If "true", the identity values returned in
    +         the x-ms-owner, x-ms-group, and x-ms-acl response headers will be
    +         transformed from Azure Active Directory Object IDs to User Principal
    +         Names.  If "false", the values will be returned as Azure Active
    +         Directory Object IDs. The default value is false.
    +        :type upn: bool
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "getAccessControl"
    +
    +        # Construct URL
    +        url = self.get_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if upn is not None:
    +            query_parameters['upn'] = self._serialize.query("upn", upn, 'bool')
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.head(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-owner': self._deserialize('str', response.headers.get('x-ms-owner')),
    +                'x-ms-group': self._deserialize('str', response.headers.get('x-ms-group')),
    +                'x-ms-permissions': self._deserialize('str', response.headers.get('x-ms-permissions')),
    +                'x-ms-acl': self._deserialize('str', response.headers.get('x-ms-acl')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_access_control.metadata = {'url': '/{filesystem}/{path}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_page_blob_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_page_blob_operations_async.py
    new file mode 100644
    index 000000000000..5ea13fa19dfb
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_page_blob_operations_async.py
    @@ -0,0 +1,1348 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class PageBlobOperations:
    +    """PageBlobOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_blob_type: Specifies the type of blob to create: block blob, page blob, or append blob. Constant value: "PageBlob".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_blob_type = "PageBlob"
    +
    +    async def create(self, content_length, blob_content_length, timeout=None, tier=None, metadata=None, blob_sequence_number=0, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Create operation creates a new page blob.
    +
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param blob_content_length: This header specifies the maximum size for
    +         the page blob, up to 1 TB. The page blob size must be aligned to a
    +         512-byte boundary.
    +        :type blob_content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param tier: Optional. Indicates the tier to be set on the page blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80'
    +        :type tier: str or
    +         ~azure.storage.blob.models.PremiumPageBlobAccessTier
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param blob_sequence_number: Set for page blobs only. The sequence
    +         number is a user-controlled value that you can use to track requests.
    +         The value of the sequence number must be between 0 and 2^63 - 1.
    +        :type blob_sequence_number: long
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-blob-content-length'] = self._serialize.header("blob_content_length", blob_content_length, 'long')
    +        if blob_sequence_number is not None:
    +            header_parameters['x-ms-blob-sequence-number'] = self._serialize.header("blob_sequence_number", blob_sequence_number, 'long')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-blob-type'] = self._serialize.header("self.x_ms_blob_type", self.x_ms_blob_type, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def upload_pages(self, body, content_length, transactional_content_md5=None, transactional_content_crc64=None, timeout=None, range=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, sequence_number_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Upload Pages operation writes a range of pages to a page blob.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param sequence_number_access_conditions: Additional parameters for
    +         the operation
    +        :type sequence_number_access_conditions:
    +         ~azure.storage.blob.models.SequenceNumberAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_sequence_number_less_than_or_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than_or_equal_to = sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to
    +        if_sequence_number_less_than = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than
    +        if_sequence_number_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "page"
    +        page_write = "update"
    +
    +        # Construct URL
    +        url = self.upload_pages.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-page-write'] = self._serialize.header("page_write", page_write, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_sequence_number_less_than_or_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-le'] = self._serialize.header("if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, 'long')
    +        if if_sequence_number_less_than is not None:
    +            header_parameters['x-ms-if-sequence-number-lt'] = self._serialize.header("if_sequence_number_less_than", if_sequence_number_less_than, 'long')
    +        if if_sequence_number_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-eq'] = self._serialize.header("if_sequence_number_equal_to", if_sequence_number_equal_to, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    upload_pages.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def clear_pages(self, content_length, timeout=None, range=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, sequence_number_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Clear Pages operation clears a set of pages from a page blob.
    +
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param sequence_number_access_conditions: Additional parameters for
    +         the operation
    +        :type sequence_number_access_conditions:
    +         ~azure.storage.blob.models.SequenceNumberAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_sequence_number_less_than_or_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than_or_equal_to = sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to
    +        if_sequence_number_less_than = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than
    +        if_sequence_number_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "page"
    +        page_write = "clear"
    +
    +        # Construct URL
    +        url = self.clear_pages.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-page-write'] = self._serialize.header("page_write", page_write, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_sequence_number_less_than_or_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-le'] = self._serialize.header("if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, 'long')
    +        if if_sequence_number_less_than is not None:
    +            header_parameters['x-ms-if-sequence-number-lt'] = self._serialize.header("if_sequence_number_less_than", if_sequence_number_less_than, 'long')
    +        if if_sequence_number_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-eq'] = self._serialize.header("if_sequence_number_equal_to", if_sequence_number_equal_to, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    clear_pages.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def upload_pages_from_url(self, source_url, source_range, content_length, range, source_content_md5=None, source_contentcrc64=None, timeout=None, request_id=None, cpk_info=None, cpk_scope_info=None, lease_access_conditions=None, sequence_number_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Upload Pages operation writes a range of pages to a page blob where
    +        the contents are read from a URL.
    +
    +        :param source_url: Specify a URL to the copy source.
    +        :type source_url: str
    +        :param source_range: Bytes of source data in the specified range. The
    +         length of this range should match the ContentLength header and
    +         x-ms-range/Range destination range header.
    +        :type source_range: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param range: The range of bytes to which the source range would be
    +         written. The range should be 512 aligned and range-end is required.
    +        :type range: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_contentcrc64: Specify the crc64 calculated for the range
    +         of bytes that must be read from the copy source.
    +        :type source_contentcrc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param sequence_number_access_conditions: Additional parameters for
    +         the operation
    +        :type sequence_number_access_conditions:
    +         ~azure.storage.blob.models.SequenceNumberAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_sequence_number_less_than_or_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than_or_equal_to = sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to
    +        if_sequence_number_less_than = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than
    +        if_sequence_number_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        comp = "page"
    +        page_write = "update"
    +
    +        # Construct URL
    +        url = self.upload_pages_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("source_url", source_url, 'str')
    +        header_parameters['x-ms-source-range'] = self._serialize.header("source_range", source_range, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        if source_contentcrc64 is not None:
    +            header_parameters['x-ms-source-content-crc64'] = self._serialize.header("source_contentcrc64", source_contentcrc64, 'bytearray')
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-page-write'] = self._serialize.header("page_write", page_write, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_sequence_number_less_than_or_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-le'] = self._serialize.header("if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, 'long')
    +        if if_sequence_number_less_than is not None:
    +            header_parameters['x-ms-if-sequence-number-lt'] = self._serialize.header("if_sequence_number_less_than", if_sequence_number_less_than, 'long')
    +        if if_sequence_number_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-eq'] = self._serialize.header("if_sequence_number_equal_to", if_sequence_number_equal_to, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    upload_pages_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def get_page_ranges(self, snapshot=None, timeout=None, range=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Get Page Ranges operation returns the list of valid page ranges for
    +        a page blob or snapshot of a page blob.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: PageList or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.PageList
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "pagelist"
    +
    +        # Construct URL
    +        url = self.get_page_ranges.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PageList', response)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'x-ms-blob-content-length': self._deserialize('long', response.headers.get('x-ms-blob-content-length')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_page_ranges.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def get_page_ranges_diff(self, snapshot=None, timeout=None, prevsnapshot=None, prev_snapshot_url=None, range=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Get Page Ranges Diff operation returns the list of valid page
    +        ranges for a page blob that were changed between target blob and
    +        previous snapshot.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param prevsnapshot: Optional in version 2015-07-08 and newer. The
    +         prevsnapshot parameter is a DateTime value that specifies that the
    +         response will contain only pages that were changed between target blob
    +         and previous snapshot. Changed pages include both updated and cleared
    +         pages. The target blob may be a snapshot, as long as the snapshot
    +         specified by prevsnapshot is the older of the two. Note that
    +         incremental snapshots are currently supported only for blobs created
    +         on or after January 1, 2016.
    +        :type prevsnapshot: str
    +        :param prev_snapshot_url: Optional. This header is only supported in
    +         service versions 2019-04-19 and after and specifies the URL of a
    +         previous snapshot of the target blob. The response will only contain
    +         pages that were changed between the target blob and its previous
    +         snapshot.
    +        :type prev_snapshot_url: str
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: PageList or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.PageList
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "pagelist"
    +
    +        # Construct URL
    +        url = self.get_page_ranges_diff.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if prevsnapshot is not None:
    +            query_parameters['prevsnapshot'] = self._serialize.query("prevsnapshot", prevsnapshot, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        if prev_snapshot_url is not None:
    +            header_parameters['x-ms-previous-snapshot-url'] = self._serialize.header("prev_snapshot_url", prev_snapshot_url, 'str')
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PageList', response)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'x-ms-blob-content-length': self._deserialize('long', response.headers.get('x-ms-blob-content-length')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_page_ranges_diff.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def resize(self, blob_content_length, timeout=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Resize the Blob.
    +
    +        :param blob_content_length: This header specifies the maximum size for
    +         the page blob, up to 1 TB. The page blob size must be aligned to a
    +         512-byte boundary.
    +        :type blob_content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.resize.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-blob-content-length'] = self._serialize.header("blob_content_length", blob_content_length, 'long')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    resize.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def update_sequence_number(self, sequence_number_action, timeout=None, blob_sequence_number=0, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Update the sequence number of the blob.
    +
    +        :param sequence_number_action: Required if the
    +         x-ms-blob-sequence-number header is set for the request. This property
    +         applies to page blobs only. This property indicates how the service
    +         should modify the blob's sequence number. Possible values include:
    +         'max', 'update', 'increment'
    +        :type sequence_number_action: str or
    +         ~azure.storage.blob.models.SequenceNumberActionType
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param blob_sequence_number: Set for page blobs only. The sequence
    +         number is a user-controlled value that you can use to track requests.
    +         The value of the sequence number must be between 0 and 2^63 - 1.
    +        :type blob_sequence_number: long
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.update_sequence_number.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-sequence-number-action'] = self._serialize.header("sequence_number_action", sequence_number_action, 'SequenceNumberActionType')
    +        if blob_sequence_number is not None:
    +            header_parameters['x-ms-blob-sequence-number'] = self._serialize.header("blob_sequence_number", blob_sequence_number, 'long')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    update_sequence_number.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def copy_incremental(self, copy_source, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Copy Incremental operation copies a snapshot of the source page
    +        blob to a destination page blob. The snapshot is copied such that only
    +        the differential changes between the previously copied snapshot are
    +        transferred to the destination. The copied snapshots are complete
    +        copies of the original snapshot and can be read or copied from as
    +        usual. This API is supported since REST version 2016-05-31.
    +
    +        :param copy_source: Specifies the name of the source page blob
    +         snapshot. This value is a URL of up to 2 KB in length that specifies a
    +         page blob snapshot. The value should be URL-encoded as it would appear
    +         in a request URI. The source blob must either be public or must be
    +         authenticated via a shared access signature.
    +        :type copy_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "incrementalcopy"
    +
    +        # Construct URL
    +        url = self.copy_incremental.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    copy_incremental.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_service_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_service_operations_async.py
    new file mode 100644
    index 000000000000..b62063c8eb9b
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/aio/operations_async/_service_operations_async.py
    @@ -0,0 +1,567 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class ServiceOperations:
    +    """ServiceOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +
    +    async def set_properties(self, storage_service_properties, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """Sets properties for a storage account's Blob service endpoint,
    +        including properties for Storage Analytics and CORS (Cross-Origin
    +        Resource Sharing) rules.
    +
    +        :param storage_service_properties: The StorageService properties.
    +        :type storage_service_properties:
    +         ~azure.storage.blob.models.StorageServiceProperties
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.set_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(storage_service_properties, 'StorageServiceProperties')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_properties.metadata = {'url': '/'}
    +
    +    async def get_properties(self, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """gets the properties of a storage account's Blob service, including
    +        properties for Storage Analytics and CORS (Cross-Origin Resource
    +        Sharing) rules.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageServiceProperties or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.StorageServiceProperties
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageServiceProperties', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_properties.metadata = {'url': '/'}
    +
    +    async def get_statistics(self, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """Retrieves statistics related to replication for the Blob service. It is
    +        only available on the secondary location endpoint when read-access
    +        geo-redundant replication is enabled for the storage account.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageServiceStats or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.StorageServiceStats
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "stats"
    +
    +        # Construct URL
    +        url = self.get_statistics.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageServiceStats', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_statistics.metadata = {'url': '/'}
    +
    +    async def list_containers_segment(self, prefix=None, marker=None, maxresults=None, include=None, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """The List Containers Segment operation returns a list of the containers
    +        under the specified account.
    +
    +        :param prefix: Filters the results to return only containers whose
    +         name begins with the specified prefix.
    +        :type prefix: str
    +        :param marker: A string value that identifies the portion of the list
    +         of containers to be returned with the next listing operation. The
    +         operation returns the NextMarker value within the response body if the
    +         listing operation did not return all containers remaining to be listed
    +         with the current page. The NextMarker value can be used as the value
    +         for the marker parameter in a subsequent call to request the next page
    +         of list items. The marker value is opaque to the client.
    +        :type marker: str
    +        :param maxresults: Specifies the maximum number of containers to
    +         return. If the request does not specify maxresults, or specifies a
    +         value greater than 5000, the server will return up to 5000 items. Note
    +         that if the listing operation crosses a partition boundary, then the
    +         service will return a continuation token for retrieving the remainder
    +         of the results. For this reason, it is possible that the service will
    +         return fewer results than specified by maxresults, or than the default
    +         of 5000.
    +        :type maxresults: int
    +        :param include: Include this parameter to specify that the container's
    +         metadata be returned as part of the response body. Possible values
    +         include: 'metadata'
    +        :type include: str or
    +         ~azure.storage.blob.models.ListContainersIncludeType
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: ListContainersSegmentResponse or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.ListContainersSegmentResponse
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "list"
    +
    +        # Construct URL
    +        url = self.list_containers_segment.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if prefix is not None:
    +            query_parameters['prefix'] = self._serialize.query("prefix", prefix, 'str')
    +        if marker is not None:
    +            query_parameters['marker'] = self._serialize.query("marker", marker, 'str')
    +        if maxresults is not None:
    +            query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1)
    +        if include is not None:
    +            query_parameters['include'] = self._serialize.query("include", include, 'ListContainersIncludeType')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ListContainersSegmentResponse', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    list_containers_segment.metadata = {'url': '/'}
    +
    +    async def get_user_delegation_key(self, key_info, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """Retrieves a user delegation key for the Blob service. This is only a
    +        valid operation when using bearer token authentication.
    +
    +        :param key_info:
    +        :type key_info: ~azure.storage.blob.models.KeyInfo
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: UserDelegationKey or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.UserDelegationKey
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "userdelegationkey"
    +
    +        # Construct URL
    +        url = self.get_user_delegation_key.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(key_info, 'KeyInfo')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('UserDelegationKey', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_user_delegation_key.metadata = {'url': '/'}
    +
    +    async def get_account_info(self, *, cls=None, **kwargs):
    +        """Returns the sku name and account kind .
    +
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "account"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_account_info.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-sku-name': self._deserialize(models.SkuName, response.headers.get('x-ms-sku-name')),
    +                'x-ms-account-kind': self._deserialize(models.AccountKind, response.headers.get('x-ms-account-kind')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_account_info.metadata = {'url': '/'}
    +
    +    async def submit_batch(self, body, content_length, multipart_content_type, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """The Batch operation allows multiple API calls to be embedded into a
    +        single HTTP request.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param multipart_content_type: Required. The value of this header must
    +         be multipart/mixed with a batch boundary. Example header value:
    +         multipart/mixed; boundary=batch_
    +        :type multipart_content_type: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: object or the result of cls(response)
    +        :rtype: Generator
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "batch"
    +
    +        # Construct URL
    +        url = self.submit_batch.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        header_parameters['Content-Type'] = self._serialize.header("multipart_content_type", multipart_content_type, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = await self._client._pipeline.run(request, stream=True, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            await response.load_body()
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = response.stream_download(self._client._pipeline)
    +            header_dict = {
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    submit_batch.metadata = {'url': '/'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/models/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/models/__init__.py
    new file mode 100644
    index 000000000000..4cf758cfccb6
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/models/__init__.py
    @@ -0,0 +1,192 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +try:
    +    from ._models_py3 import AccessPolicy
    +    from ._models_py3 import AppendPositionAccessConditions
    +    from ._models_py3 import BlobFlatListSegment
    +    from ._models_py3 import BlobHierarchyListSegment
    +    from ._models_py3 import BlobHTTPHeaders
    +    from ._models_py3 import BlobItem
    +    from ._models_py3 import BlobMetadata
    +    from ._models_py3 import BlobPrefix
    +    from ._models_py3 import BlobProperties
    +    from ._models_py3 import Block
    +    from ._models_py3 import BlockList
    +    from ._models_py3 import BlockLookupList
    +    from ._models_py3 import ClearRange
    +    from ._models_py3 import ContainerCpkScopeInfo
    +    from ._models_py3 import ContainerItem
    +    from ._models_py3 import ContainerProperties
    +    from ._models_py3 import CorsRule
    +    from ._models_py3 import CpkInfo
    +    from ._models_py3 import CpkScopeInfo
    +    from ._models_py3 import DataLakeStorageError, DataLakeStorageErrorException
    +    from ._models_py3 import DataLakeStorageErrorError
    +    from ._models_py3 import DirectoryHttpHeaders
    +    from ._models_py3 import GeoReplication
    +    from ._models_py3 import KeyInfo
    +    from ._models_py3 import LeaseAccessConditions
    +    from ._models_py3 import ListBlobsFlatSegmentResponse
    +    from ._models_py3 import ListBlobsHierarchySegmentResponse
    +    from ._models_py3 import ListContainersSegmentResponse
    +    from ._models_py3 import Logging
    +    from ._models_py3 import Metrics
    +    from ._models_py3 import ModifiedAccessConditions
    +    from ._models_py3 import PageList
    +    from ._models_py3 import PageRange
    +    from ._models_py3 import RetentionPolicy
    +    from ._models_py3 import SequenceNumberAccessConditions
    +    from ._models_py3 import SignedIdentifier
    +    from ._models_py3 import SourceModifiedAccessConditions
    +    from ._models_py3 import StaticWebsite
    +    from ._models_py3 import StorageError, StorageErrorException
    +    from ._models_py3 import StorageServiceProperties
    +    from ._models_py3 import StorageServiceStats
    +    from ._models_py3 import UserDelegationKey
    +except (SyntaxError, ImportError):
    +    from ._models import AccessPolicy
    +    from ._models import AppendPositionAccessConditions
    +    from ._models import BlobFlatListSegment
    +    from ._models import BlobHierarchyListSegment
    +    from ._models import BlobHTTPHeaders
    +    from ._models import BlobItem
    +    from ._models import BlobMetadata
    +    from ._models import BlobPrefix
    +    from ._models import BlobProperties
    +    from ._models import Block
    +    from ._models import BlockList
    +    from ._models import BlockLookupList
    +    from ._models import ClearRange
    +    from ._models import ContainerCpkScopeInfo
    +    from ._models import ContainerItem
    +    from ._models import ContainerProperties
    +    from ._models import CorsRule
    +    from ._models import CpkInfo
    +    from ._models import CpkScopeInfo
    +    from ._models import DataLakeStorageError, DataLakeStorageErrorException
    +    from ._models import DataLakeStorageErrorError
    +    from ._models import DirectoryHttpHeaders
    +    from ._models import GeoReplication
    +    from ._models import KeyInfo
    +    from ._models import LeaseAccessConditions
    +    from ._models import ListBlobsFlatSegmentResponse
    +    from ._models import ListBlobsHierarchySegmentResponse
    +    from ._models import ListContainersSegmentResponse
    +    from ._models import Logging
    +    from ._models import Metrics
    +    from ._models import ModifiedAccessConditions
    +    from ._models import PageList
    +    from ._models import PageRange
    +    from ._models import RetentionPolicy
    +    from ._models import SequenceNumberAccessConditions
    +    from ._models import SignedIdentifier
    +    from ._models import SourceModifiedAccessConditions
    +    from ._models import StaticWebsite
    +    from ._models import StorageError, StorageErrorException
    +    from ._models import StorageServiceProperties
    +    from ._models import StorageServiceStats
    +    from ._models import UserDelegationKey
    +from ._azure_blob_storage_enums import (
    +    AccessTier,
    +    AccessTierOptional,
    +    AccessTierRequired,
    +    AccountKind,
    +    ArchiveStatus,
    +    BlobType,
    +    BlockListType,
    +    CopyStatusType,
    +    DeleteSnapshotsOptionType,
    +    EncryptionAlgorithmType,
    +    GeoReplicationStatusType,
    +    LeaseDurationType,
    +    LeaseStateType,
    +    LeaseStatusType,
    +    ListBlobsIncludeItem,
    +    ListContainersIncludeType,
    +    PathRenameMode,
    +    PremiumPageBlobAccessTier,
    +    PublicAccessType,
    +    RehydratePriority,
    +    SequenceNumberActionType,
    +    SkuName,
    +    StorageErrorCode,
    +    SyncCopyStatusType,
    +)
    +
    +__all__ = [
    +    'AccessPolicy',
    +    'AppendPositionAccessConditions',
    +    'BlobFlatListSegment',
    +    'BlobHierarchyListSegment',
    +    'BlobHTTPHeaders',
    +    'BlobItem',
    +    'BlobMetadata',
    +    'BlobPrefix',
    +    'BlobProperties',
    +    'Block',
    +    'BlockList',
    +    'BlockLookupList',
    +    'ClearRange',
    +    'ContainerCpkScopeInfo',
    +    'ContainerItem',
    +    'ContainerProperties',
    +    'CorsRule',
    +    'CpkInfo',
    +    'CpkScopeInfo',
    +    'DataLakeStorageError', 'DataLakeStorageErrorException',
    +    'DataLakeStorageErrorError',
    +    'DirectoryHttpHeaders',
    +    'GeoReplication',
    +    'KeyInfo',
    +    'LeaseAccessConditions',
    +    'ListBlobsFlatSegmentResponse',
    +    'ListBlobsHierarchySegmentResponse',
    +    'ListContainersSegmentResponse',
    +    'Logging',
    +    'Metrics',
    +    'ModifiedAccessConditions',
    +    'PageList',
    +    'PageRange',
    +    'RetentionPolicy',
    +    'SequenceNumberAccessConditions',
    +    'SignedIdentifier',
    +    'SourceModifiedAccessConditions',
    +    'StaticWebsite',
    +    'StorageError', 'StorageErrorException',
    +    'StorageServiceProperties',
    +    'StorageServiceStats',
    +    'UserDelegationKey',
    +    'PublicAccessType',
    +    'CopyStatusType',
    +    'LeaseDurationType',
    +    'LeaseStateType',
    +    'LeaseStatusType',
    +    'AccessTier',
    +    'ArchiveStatus',
    +    'BlobType',
    +    'StorageErrorCode',
    +    'GeoReplicationStatusType',
    +    'AccessTierRequired',
    +    'AccessTierOptional',
    +    'PremiumPageBlobAccessTier',
    +    'RehydratePriority',
    +    'BlockListType',
    +    'DeleteSnapshotsOptionType',
    +    'EncryptionAlgorithmType',
    +    'ListBlobsIncludeItem',
    +    'ListContainersIncludeType',
    +    'PathRenameMode',
    +    'SequenceNumberActionType',
    +    'SkuName',
    +    'AccountKind',
    +    'SyncCopyStatusType',
    +]
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/models/_azure_blob_storage_enums.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/models/_azure_blob_storage_enums.py
    new file mode 100644
    index 000000000000..966e2e9c3248
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/models/_azure_blob_storage_enums.py
    @@ -0,0 +1,322 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from enum import Enum
    +
    +
    +class PublicAccessType(str, Enum):
    +
    +    container = "container"
    +    blob = "blob"
    +
    +
    +class CopyStatusType(str, Enum):
    +
    +    pending = "pending"
    +    success = "success"
    +    aborted = "aborted"
    +    failed = "failed"
    +
    +
    +class LeaseDurationType(str, Enum):
    +
    +    infinite = "infinite"
    +    fixed = "fixed"
    +
    +
    +class LeaseStateType(str, Enum):
    +
    +    available = "available"
    +    leased = "leased"
    +    expired = "expired"
    +    breaking = "breaking"
    +    broken = "broken"
    +
    +
    +class LeaseStatusType(str, Enum):
    +
    +    locked = "locked"
    +    unlocked = "unlocked"
    +
    +
    +class AccessTier(str, Enum):
    +
    +    p4 = "P4"
    +    p6 = "P6"
    +    p10 = "P10"
    +    p15 = "P15"
    +    p20 = "P20"
    +    p30 = "P30"
    +    p40 = "P40"
    +    p50 = "P50"
    +    p60 = "P60"
    +    p70 = "P70"
    +    p80 = "P80"
    +    hot = "Hot"
    +    cool = "Cool"
    +    archive = "Archive"
    +
    +
    +class ArchiveStatus(str, Enum):
    +
    +    rehydrate_pending_to_hot = "rehydrate-pending-to-hot"
    +    rehydrate_pending_to_cool = "rehydrate-pending-to-cool"
    +
    +
    +class BlobType(str, Enum):
    +
    +    block_blob = "BlockBlob"
    +    page_blob = "PageBlob"
    +    append_blob = "AppendBlob"
    +
    +
    +class StorageErrorCode(str, Enum):
    +
    +    account_already_exists = "AccountAlreadyExists"
    +    account_being_created = "AccountBeingCreated"
    +    account_is_disabled = "AccountIsDisabled"
    +    authentication_failed = "AuthenticationFailed"
    +    authorization_failure = "AuthorizationFailure"
    +    condition_headers_not_supported = "ConditionHeadersNotSupported"
    +    condition_not_met = "ConditionNotMet"
    +    empty_metadata_key = "EmptyMetadataKey"
    +    insufficient_account_permissions = "InsufficientAccountPermissions"
    +    internal_error = "InternalError"
    +    invalid_authentication_info = "InvalidAuthenticationInfo"
    +    invalid_header_value = "InvalidHeaderValue"
    +    invalid_http_verb = "InvalidHttpVerb"
    +    invalid_input = "InvalidInput"
    +    invalid_md5 = "InvalidMd5"
    +    invalid_metadata = "InvalidMetadata"
    +    invalid_query_parameter_value = "InvalidQueryParameterValue"
    +    invalid_range = "InvalidRange"
    +    invalid_resource_name = "InvalidResourceName"
    +    invalid_uri = "InvalidUri"
    +    invalid_xml_document = "InvalidXmlDocument"
    +    invalid_xml_node_value = "InvalidXmlNodeValue"
    +    md5_mismatch = "Md5Mismatch"
    +    metadata_too_large = "MetadataTooLarge"
    +    missing_content_length_header = "MissingContentLengthHeader"
    +    missing_required_query_parameter = "MissingRequiredQueryParameter"
    +    missing_required_header = "MissingRequiredHeader"
    +    missing_required_xml_node = "MissingRequiredXmlNode"
    +    multiple_condition_headers_not_supported = "MultipleConditionHeadersNotSupported"
    +    operation_timed_out = "OperationTimedOut"
    +    out_of_range_input = "OutOfRangeInput"
    +    out_of_range_query_parameter_value = "OutOfRangeQueryParameterValue"
    +    request_body_too_large = "RequestBodyTooLarge"
    +    resource_type_mismatch = "ResourceTypeMismatch"
    +    request_url_failed_to_parse = "RequestUrlFailedToParse"
    +    resource_already_exists = "ResourceAlreadyExists"
    +    resource_not_found = "ResourceNotFound"
    +    server_busy = "ServerBusy"
    +    unsupported_header = "UnsupportedHeader"
    +    unsupported_xml_node = "UnsupportedXmlNode"
    +    unsupported_query_parameter = "UnsupportedQueryParameter"
    +    unsupported_http_verb = "UnsupportedHttpVerb"
    +    append_position_condition_not_met = "AppendPositionConditionNotMet"
    +    blob_already_exists = "BlobAlreadyExists"
    +    blob_not_found = "BlobNotFound"
    +    blob_overwritten = "BlobOverwritten"
    +    blob_tier_inadequate_for_content_length = "BlobTierInadequateForContentLength"
    +    block_count_exceeds_limit = "BlockCountExceedsLimit"
    +    block_list_too_long = "BlockListTooLong"
    +    cannot_change_to_lower_tier = "CannotChangeToLowerTier"
    +    cannot_verify_copy_source = "CannotVerifyCopySource"
    +    container_already_exists = "ContainerAlreadyExists"
    +    container_being_deleted = "ContainerBeingDeleted"
    +    container_disabled = "ContainerDisabled"
    +    container_not_found = "ContainerNotFound"
    +    content_length_larger_than_tier_limit = "ContentLengthLargerThanTierLimit"
    +    copy_across_accounts_not_supported = "CopyAcrossAccountsNotSupported"
    +    copy_id_mismatch = "CopyIdMismatch"
    +    feature_version_mismatch = "FeatureVersionMismatch"
    +    incremental_copy_blob_mismatch = "IncrementalCopyBlobMismatch"
    +    incremental_copy_of_eralier_version_snapshot_not_allowed = "IncrementalCopyOfEralierVersionSnapshotNotAllowed"
    +    incremental_copy_source_must_be_snapshot = "IncrementalCopySourceMustBeSnapshot"
    +    infinite_lease_duration_required = "InfiniteLeaseDurationRequired"
    +    invalid_blob_or_block = "InvalidBlobOrBlock"
    +    invalid_blob_tier = "InvalidBlobTier"
    +    invalid_blob_type = "InvalidBlobType"
    +    invalid_block_id = "InvalidBlockId"
    +    invalid_block_list = "InvalidBlockList"
    +    invalid_operation = "InvalidOperation"
    +    invalid_page_range = "InvalidPageRange"
    +    invalid_source_blob_type = "InvalidSourceBlobType"
    +    invalid_source_blob_url = "InvalidSourceBlobUrl"
    +    invalid_version_for_page_blob_operation = "InvalidVersionForPageBlobOperation"
    +    lease_already_present = "LeaseAlreadyPresent"
    +    lease_already_broken = "LeaseAlreadyBroken"
    +    lease_id_mismatch_with_blob_operation = "LeaseIdMismatchWithBlobOperation"
    +    lease_id_mismatch_with_container_operation = "LeaseIdMismatchWithContainerOperation"
    +    lease_id_mismatch_with_lease_operation = "LeaseIdMismatchWithLeaseOperation"
    +    lease_id_missing = "LeaseIdMissing"
    +    lease_is_breaking_and_cannot_be_acquired = "LeaseIsBreakingAndCannotBeAcquired"
    +    lease_is_breaking_and_cannot_be_changed = "LeaseIsBreakingAndCannotBeChanged"
    +    lease_is_broken_and_cannot_be_renewed = "LeaseIsBrokenAndCannotBeRenewed"
    +    lease_lost = "LeaseLost"
    +    lease_not_present_with_blob_operation = "LeaseNotPresentWithBlobOperation"
    +    lease_not_present_with_container_operation = "LeaseNotPresentWithContainerOperation"
    +    lease_not_present_with_lease_operation = "LeaseNotPresentWithLeaseOperation"
    +    max_blob_size_condition_not_met = "MaxBlobSizeConditionNotMet"
    +    no_pending_copy_operation = "NoPendingCopyOperation"
    +    operation_not_allowed_on_incremental_copy_blob = "OperationNotAllowedOnIncrementalCopyBlob"
    +    pending_copy_operation = "PendingCopyOperation"
    +    previous_snapshot_cannot_be_newer = "PreviousSnapshotCannotBeNewer"
    +    previous_snapshot_not_found = "PreviousSnapshotNotFound"
    +    previous_snapshot_operation_not_supported = "PreviousSnapshotOperationNotSupported"
    +    sequence_number_condition_not_met = "SequenceNumberConditionNotMet"
    +    sequence_number_increment_too_large = "SequenceNumberIncrementTooLarge"
    +    snapshot_count_exceeded = "SnapshotCountExceeded"
    +    snaphot_operation_rate_exceeded = "SnaphotOperationRateExceeded"
    +    snapshots_present = "SnapshotsPresent"
    +    source_condition_not_met = "SourceConditionNotMet"
    +    system_in_use = "SystemInUse"
    +    target_condition_not_met = "TargetConditionNotMet"
    +    unauthorized_blob_overwrite = "UnauthorizedBlobOverwrite"
    +    blob_being_rehydrated = "BlobBeingRehydrated"
    +    blob_archived = "BlobArchived"
    +    blob_not_archived = "BlobNotArchived"
    +    authorization_source_ip_mismatch = "AuthorizationSourceIPMismatch"
    +    authorization_protocol_mismatch = "AuthorizationProtocolMismatch"
    +    authorization_permission_mismatch = "AuthorizationPermissionMismatch"
    +    authorization_service_mismatch = "AuthorizationServiceMismatch"
    +    authorization_resource_type_mismatch = "AuthorizationResourceTypeMismatch"
    +
    +
    +class GeoReplicationStatusType(str, Enum):
    +
    +    live = "live"
    +    bootstrap = "bootstrap"
    +    unavailable = "unavailable"
    +
    +
    +class AccessTierRequired(str, Enum):
    +
    +    p4 = "P4"
    +    p6 = "P6"
    +    p10 = "P10"
    +    p15 = "P15"
    +    p20 = "P20"
    +    p30 = "P30"
    +    p40 = "P40"
    +    p50 = "P50"
    +    p60 = "P60"
    +    p70 = "P70"
    +    p80 = "P80"
    +    hot = "Hot"
    +    cool = "Cool"
    +    archive = "Archive"
    +
    +
    +class AccessTierOptional(str, Enum):
    +
    +    p4 = "P4"
    +    p6 = "P6"
    +    p10 = "P10"
    +    p15 = "P15"
    +    p20 = "P20"
    +    p30 = "P30"
    +    p40 = "P40"
    +    p50 = "P50"
    +    p60 = "P60"
    +    p70 = "P70"
    +    p80 = "P80"
    +    hot = "Hot"
    +    cool = "Cool"
    +    archive = "Archive"
    +
    +
    +class PremiumPageBlobAccessTier(str, Enum):
    +
    +    p4 = "P4"
    +    p6 = "P6"
    +    p10 = "P10"
    +    p15 = "P15"
    +    p20 = "P20"
    +    p30 = "P30"
    +    p40 = "P40"
    +    p50 = "P50"
    +    p60 = "P60"
    +    p70 = "P70"
    +    p80 = "P80"
    +
    +
    +class RehydratePriority(str, Enum):
    +
    +    high = "High"
    +    standard = "Standard"
    +
    +
    +class BlockListType(str, Enum):
    +
    +    committed = "committed"
    +    uncommitted = "uncommitted"
    +    all = "all"
    +
    +
    +class DeleteSnapshotsOptionType(str, Enum):
    +
    +    include = "include"
    +    only = "only"
    +
    +
    +class EncryptionAlgorithmType(str, Enum):
    +
    +    aes256 = "AES256"
    +
    +
    +class ListBlobsIncludeItem(str, Enum):
    +
    +    copy = "copy"
    +    deleted = "deleted"
    +    metadata = "metadata"
    +    snapshots = "snapshots"
    +    uncommittedblobs = "uncommittedblobs"
    +
    +
    +class ListContainersIncludeType(str, Enum):
    +
    +    metadata = "metadata"
    +
    +
    +class PathRenameMode(str, Enum):
    +
    +    legacy = "legacy"
    +    posix = "posix"
    +
    +
    +class SequenceNumberActionType(str, Enum):
    +
    +    max = "max"
    +    update = "update"
    +    increment = "increment"
    +
    +
    +class SkuName(str, Enum):
    +
    +    standard_lrs = "Standard_LRS"
    +    standard_grs = "Standard_GRS"
    +    standard_ragrs = "Standard_RAGRS"
    +    standard_zrs = "Standard_ZRS"
    +    premium_lrs = "Premium_LRS"
    +
    +
    +class AccountKind(str, Enum):
    +
    +    storage = "Storage"
    +    blob_storage = "BlobStorage"
    +    storage_v2 = "StorageV2"
    +
    +
    +class SyncCopyStatusType(str, Enum):
    +
    +    success = "success"
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/models/_models.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/models/_models.py
    new file mode 100644
    index 000000000000..e442dc31aae6
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/models/_models.py
    @@ -0,0 +1,1589 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from azure.core.exceptions import HttpResponseError
    +
    +
    +class AccessPolicy(Model):
    +    """An Access policy.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required. the date-time the policy is active
    +    :type start: str
    +    :param expiry: Required. the date-time the policy expires
    +    :type expiry: str
    +    :param permission: Required. the permissions for the acl policy
    +    :type permission: str
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'expiry': {'required': True},
    +        'permission': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'str', 'xml': {'name': 'Start'}},
    +        'expiry': {'key': 'Expiry', 'type': 'str', 'xml': {'name': 'Expiry'}},
    +        'permission': {'key': 'Permission', 'type': 'str', 'xml': {'name': 'Permission'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AccessPolicy, self).__init__(**kwargs)
    +        self.start = kwargs.get('start', None)
    +        self.expiry = kwargs.get('expiry', None)
    +        self.permission = kwargs.get('permission', None)
    +
    +
    +class AppendPositionAccessConditions(Model):
    +    """Additional parameters for a set of operations, such as:
    +    AppendBlob_append_block, AppendBlob_append_block_from_url.
    +
    +    :param max_size: Optional conditional header. The max length in bytes
    +     permitted for the append blob. If the Append Block operation would cause
    +     the blob to exceed that limit or if the blob size is already greater than
    +     the value specified in this header, the request will fail with
    +     MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition
    +     Failed).
    +    :type max_size: long
    +    :param append_position: Optional conditional header, used only for the
    +     Append Block operation. A number indicating the byte offset to compare.
    +     Append Block will succeed only if the append position is equal to this
    +     number. If it is not, the request will fail with the
    +     AppendPositionConditionNotMet error (HTTP status code 412 - Precondition
    +     Failed).
    +    :type append_position: long
    +    """
    +
    +    _attribute_map = {
    +        'max_size': {'key': '', 'type': 'long', 'xml': {'name': 'max_size'}},
    +        'append_position': {'key': '', 'type': 'long', 'xml': {'name': 'append_position'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AppendPositionAccessConditions, self).__init__(**kwargs)
    +        self.max_size = kwargs.get('max_size', None)
    +        self.append_position = kwargs.get('append_position', None)
    +
    +
    +class BlobFlatListSegment(Model):
    +    """BlobFlatListSegment.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param blob_items: Required.
    +    :type blob_items: list[~azure.storage.blob.models.BlobItem]
    +    """
    +
    +    _validation = {
    +        'blob_items': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'blob_items': {'key': 'BlobItems', 'type': '[BlobItem]', 'xml': {'name': 'BlobItems', 'itemsName': 'Blob'}},
    +    }
    +    _xml_map = {
    +        'name': 'Blobs'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobFlatListSegment, self).__init__(**kwargs)
    +        self.blob_items = kwargs.get('blob_items', None)
    +
    +
    +class BlobHierarchyListSegment(Model):
    +    """BlobHierarchyListSegment.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param blob_prefixes:
    +    :type blob_prefixes: list[~azure.storage.blob.models.BlobPrefix]
    +    :param blob_items: Required.
    +    :type blob_items: list[~azure.storage.blob.models.BlobItem]
    +    """
    +
    +    _validation = {
    +        'blob_items': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'blob_prefixes': {'key': 'BlobPrefixes', 'type': '[BlobPrefix]', 'xml': {'name': 'BlobPrefix', 'itemsName': 'BlobPrefix'}},
    +        'blob_items': {'key': 'BlobItems', 'type': '[BlobItem]', 'xml': {'name': 'Blob', 'itemsName': 'Blob'}},
    +    }
    +    _xml_map = {
    +        'name': 'Blobs'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobHierarchyListSegment, self).__init__(**kwargs)
    +        self.blob_prefixes = kwargs.get('blob_prefixes', None)
    +        self.blob_items = kwargs.get('blob_items', None)
    +
    +
    +class BlobHTTPHeaders(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param blob_cache_control: Optional. Sets the blob's cache control. If
    +     specified, this property is stored with the blob and returned with a read
    +     request.
    +    :type blob_cache_control: str
    +    :param blob_content_type: Optional. Sets the blob's content type. If
    +     specified, this property is stored with the blob and returned with a read
    +     request.
    +    :type blob_content_type: str
    +    :param blob_content_md5: Optional. An MD5 hash of the blob content. Note
    +     that this hash is not validated, as the hashes for the individual blocks
    +     were validated when each was uploaded.
    +    :type blob_content_md5: bytearray
    +    :param blob_content_encoding: Optional. Sets the blob's content encoding.
    +     If specified, this property is stored with the blob and returned with a
    +     read request.
    +    :type blob_content_encoding: str
    +    :param blob_content_language: Optional. Set the blob's content language.
    +     If specified, this property is stored with the blob and returned with a
    +     read request.
    +    :type blob_content_language: str
    +    :param blob_content_disposition: Optional. Sets the blob's
    +     Content-Disposition header.
    +    :type blob_content_disposition: str
    +    """
    +
    +    _attribute_map = {
    +        'blob_cache_control': {'key': '', 'type': 'str', 'xml': {'name': 'blob_cache_control'}},
    +        'blob_content_type': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_type'}},
    +        'blob_content_md5': {'key': '', 'type': 'bytearray', 'xml': {'name': 'blob_content_md5'}},
    +        'blob_content_encoding': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_encoding'}},
    +        'blob_content_language': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_language'}},
    +        'blob_content_disposition': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_disposition'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobHTTPHeaders, self).__init__(**kwargs)
    +        self.blob_cache_control = kwargs.get('blob_cache_control', None)
    +        self.blob_content_type = kwargs.get('blob_content_type', None)
    +        self.blob_content_md5 = kwargs.get('blob_content_md5', None)
    +        self.blob_content_encoding = kwargs.get('blob_content_encoding', None)
    +        self.blob_content_language = kwargs.get('blob_content_language', None)
    +        self.blob_content_disposition = kwargs.get('blob_content_disposition', None)
    +
    +
    +class BlobItem(Model):
    +    """An Azure Storage blob.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required.
    +    :type name: str
    +    :param deleted: Required.
    +    :type deleted: bool
    +    :param snapshot: Required.
    +    :type snapshot: str
    +    :param properties: Required.
    +    :type properties: ~azure.storage.blob.models.BlobProperties
    +    :param metadata:
    +    :type metadata: ~azure.storage.blob.models.BlobMetadata
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'deleted': {'required': True},
    +        'snapshot': {'required': True},
    +        'properties': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +        'deleted': {'key': 'Deleted', 'type': 'bool', 'xml': {'name': 'Deleted'}},
    +        'snapshot': {'key': 'Snapshot', 'type': 'str', 'xml': {'name': 'Snapshot'}},
    +        'properties': {'key': 'Properties', 'type': 'BlobProperties', 'xml': {'name': 'Properties'}},
    +        'metadata': {'key': 'Metadata', 'type': 'BlobMetadata', 'xml': {'name': 'Metadata'}},
    +    }
    +    _xml_map = {
    +        'name': 'Blob'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobItem, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.deleted = kwargs.get('deleted', None)
    +        self.snapshot = kwargs.get('snapshot', None)
    +        self.properties = kwargs.get('properties', None)
    +        self.metadata = kwargs.get('metadata', None)
    +
    +
    +class BlobMetadata(Model):
    +    """BlobMetadata.
    +
    +    :param additional_properties: Unmatched properties from the message are
    +     deserialized this collection
    +    :type additional_properties: dict[str, str]
    +    :param encrypted:
    +    :type encrypted: str
    +    """
    +
    +    _attribute_map = {
    +        'additional_properties': {'key': '', 'type': '{str}', 'xml': {'name': 'additional_properties'}},
    +        'encrypted': {'key': 'Encrypted', 'type': 'str', 'xml': {'name': 'Encrypted', 'attr': True}},
    +    }
    +    _xml_map = {
    +        'name': 'Metadata'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobMetadata, self).__init__(**kwargs)
    +        self.additional_properties = kwargs.get('additional_properties', None)
    +        self.encrypted = kwargs.get('encrypted', None)
    +
    +
    +class BlobPrefix(Model):
    +    """BlobPrefix.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required.
    +    :type name: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobPrefix, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +
    +
    +class BlobProperties(Model):
    +    """Properties of a blob.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param creation_time:
    +    :type creation_time: datetime
    +    :param last_modified: Required.
    +    :type last_modified: datetime
    +    :param etag: Required.
    +    :type etag: str
    +    :param content_length: Size in bytes
    +    :type content_length: long
    +    :param content_type:
    +    :type content_type: str
    +    :param content_encoding:
    +    :type content_encoding: str
    +    :param content_language:
    +    :type content_language: str
    +    :param content_md5:
    +    :type content_md5: bytearray
    +    :param content_disposition:
    +    :type content_disposition: str
    +    :param cache_control:
    +    :type cache_control: str
    +    :param blob_sequence_number:
    +    :type blob_sequence_number: long
    +    :param blob_type: Possible values include: 'BlockBlob', 'PageBlob',
    +     'AppendBlob'
    +    :type blob_type: str or ~azure.storage.blob.models.BlobType
    +    :param lease_status: Possible values include: 'locked', 'unlocked'
    +    :type lease_status: str or ~azure.storage.blob.models.LeaseStatusType
    +    :param lease_state: Possible values include: 'available', 'leased',
    +     'expired', 'breaking', 'broken'
    +    :type lease_state: str or ~azure.storage.blob.models.LeaseStateType
    +    :param lease_duration: Possible values include: 'infinite', 'fixed'
    +    :type lease_duration: str or ~azure.storage.blob.models.LeaseDurationType
    +    :param copy_id:
    +    :type copy_id: str
    +    :param copy_status: Possible values include: 'pending', 'success',
    +     'aborted', 'failed'
    +    :type copy_status: str or ~azure.storage.blob.models.CopyStatusType
    +    :param copy_source:
    +    :type copy_source: str
    +    :param copy_progress:
    +    :type copy_progress: str
    +    :param copy_completion_time:
    +    :type copy_completion_time: datetime
    +    :param copy_status_description:
    +    :type copy_status_description: str
    +    :param server_encrypted:
    +    :type server_encrypted: bool
    +    :param incremental_copy:
    +    :type incremental_copy: bool
    +    :param destination_snapshot:
    +    :type destination_snapshot: str
    +    :param deleted_time:
    +    :type deleted_time: datetime
    +    :param remaining_retention_days:
    +    :type remaining_retention_days: int
    +    :param access_tier: Possible values include: 'P4', 'P6', 'P10', 'P15',
    +     'P20', 'P30', 'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +    :type access_tier: str or ~azure.storage.blob.models.AccessTier
    +    :param access_tier_inferred:
    +    :type access_tier_inferred: bool
    +    :param archive_status: Possible values include:
    +     'rehydrate-pending-to-hot', 'rehydrate-pending-to-cool'
    +    :type archive_status: str or ~azure.storage.blob.models.ArchiveStatus
    +    :param customer_provided_key_sha256:
    +    :type customer_provided_key_sha256: str
    +    :param encryption_scope: The name of the encryption scope under which the
    +     blob is encrypted.
    +    :type encryption_scope: str
    +    :param access_tier_change_time:
    +    :type access_tier_change_time: datetime
    +    """
    +
    +    _validation = {
    +        'last_modified': {'required': True},
    +        'etag': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'creation_time': {'key': 'Creation-Time', 'type': 'rfc-1123', 'xml': {'name': 'Creation-Time'}},
    +        'last_modified': {'key': 'Last-Modified', 'type': 'rfc-1123', 'xml': {'name': 'Last-Modified'}},
    +        'etag': {'key': 'Etag', 'type': 'str', 'xml': {'name': 'Etag'}},
    +        'content_length': {'key': 'Content-Length', 'type': 'long', 'xml': {'name': 'Content-Length'}},
    +        'content_type': {'key': 'Content-Type', 'type': 'str', 'xml': {'name': 'Content-Type'}},
    +        'content_encoding': {'key': 'Content-Encoding', 'type': 'str', 'xml': {'name': 'Content-Encoding'}},
    +        'content_language': {'key': 'Content-Language', 'type': 'str', 'xml': {'name': 'Content-Language'}},
    +        'content_md5': {'key': 'Content-MD5', 'type': 'bytearray', 'xml': {'name': 'Content-MD5'}},
    +        'content_disposition': {'key': 'Content-Disposition', 'type': 'str', 'xml': {'name': 'Content-Disposition'}},
    +        'cache_control': {'key': 'Cache-Control', 'type': 'str', 'xml': {'name': 'Cache-Control'}},
    +        'blob_sequence_number': {'key': 'x-ms-blob-sequence-number', 'type': 'long', 'xml': {'name': 'x-ms-blob-sequence-number'}},
    +        'blob_type': {'key': 'BlobType', 'type': 'BlobType', 'xml': {'name': 'BlobType'}},
    +        'lease_status': {'key': 'LeaseStatus', 'type': 'LeaseStatusType', 'xml': {'name': 'LeaseStatus'}},
    +        'lease_state': {'key': 'LeaseState', 'type': 'LeaseStateType', 'xml': {'name': 'LeaseState'}},
    +        'lease_duration': {'key': 'LeaseDuration', 'type': 'LeaseDurationType', 'xml': {'name': 'LeaseDuration'}},
    +        'copy_id': {'key': 'CopyId', 'type': 'str', 'xml': {'name': 'CopyId'}},
    +        'copy_status': {'key': 'CopyStatus', 'type': 'CopyStatusType', 'xml': {'name': 'CopyStatus'}},
    +        'copy_source': {'key': 'CopySource', 'type': 'str', 'xml': {'name': 'CopySource'}},
    +        'copy_progress': {'key': 'CopyProgress', 'type': 'str', 'xml': {'name': 'CopyProgress'}},
    +        'copy_completion_time': {'key': 'CopyCompletionTime', 'type': 'rfc-1123', 'xml': {'name': 'CopyCompletionTime'}},
    +        'copy_status_description': {'key': 'CopyStatusDescription', 'type': 'str', 'xml': {'name': 'CopyStatusDescription'}},
    +        'server_encrypted': {'key': 'ServerEncrypted', 'type': 'bool', 'xml': {'name': 'ServerEncrypted'}},
    +        'incremental_copy': {'key': 'IncrementalCopy', 'type': 'bool', 'xml': {'name': 'IncrementalCopy'}},
    +        'destination_snapshot': {'key': 'DestinationSnapshot', 'type': 'str', 'xml': {'name': 'DestinationSnapshot'}},
    +        'deleted_time': {'key': 'DeletedTime', 'type': 'rfc-1123', 'xml': {'name': 'DeletedTime'}},
    +        'remaining_retention_days': {'key': 'RemainingRetentionDays', 'type': 'int', 'xml': {'name': 'RemainingRetentionDays'}},
    +        'access_tier': {'key': 'AccessTier', 'type': 'str', 'xml': {'name': 'AccessTier'}},
    +        'access_tier_inferred': {'key': 'AccessTierInferred', 'type': 'bool', 'xml': {'name': 'AccessTierInferred'}},
    +        'archive_status': {'key': 'ArchiveStatus', 'type': 'str', 'xml': {'name': 'ArchiveStatus'}},
    +        'customer_provided_key_sha256': {'key': 'CustomerProvidedKeySha256', 'type': 'str', 'xml': {'name': 'CustomerProvidedKeySha256'}},
    +        'encryption_scope': {'key': 'EncryptionScope', 'type': 'str', 'xml': {'name': 'EncryptionScope'}},
    +        'access_tier_change_time': {'key': 'AccessTierChangeTime', 'type': 'rfc-1123', 'xml': {'name': 'AccessTierChangeTime'}},
    +    }
    +    _xml_map = {
    +        'name': 'Properties'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobProperties, self).__init__(**kwargs)
    +        self.creation_time = kwargs.get('creation_time', None)
    +        self.last_modified = kwargs.get('last_modified', None)
    +        self.etag = kwargs.get('etag', None)
    +        self.content_length = kwargs.get('content_length', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.content_encoding = kwargs.get('content_encoding', None)
    +        self.content_language = kwargs.get('content_language', None)
    +        self.content_md5 = kwargs.get('content_md5', None)
    +        self.content_disposition = kwargs.get('content_disposition', None)
    +        self.cache_control = kwargs.get('cache_control', None)
    +        self.blob_sequence_number = kwargs.get('blob_sequence_number', None)
    +        self.blob_type = kwargs.get('blob_type', None)
    +        self.lease_status = kwargs.get('lease_status', None)
    +        self.lease_state = kwargs.get('lease_state', None)
    +        self.lease_duration = kwargs.get('lease_duration', None)
    +        self.copy_id = kwargs.get('copy_id', None)
    +        self.copy_status = kwargs.get('copy_status', None)
    +        self.copy_source = kwargs.get('copy_source', None)
    +        self.copy_progress = kwargs.get('copy_progress', None)
    +        self.copy_completion_time = kwargs.get('copy_completion_time', None)
    +        self.copy_status_description = kwargs.get('copy_status_description', None)
    +        self.server_encrypted = kwargs.get('server_encrypted', None)
    +        self.incremental_copy = kwargs.get('incremental_copy', None)
    +        self.destination_snapshot = kwargs.get('destination_snapshot', None)
    +        self.deleted_time = kwargs.get('deleted_time', None)
    +        self.remaining_retention_days = kwargs.get('remaining_retention_days', None)
    +        self.access_tier = kwargs.get('access_tier', None)
    +        self.access_tier_inferred = kwargs.get('access_tier_inferred', None)
    +        self.archive_status = kwargs.get('archive_status', None)
    +        self.customer_provided_key_sha256 = kwargs.get('customer_provided_key_sha256', None)
    +        self.encryption_scope = kwargs.get('encryption_scope', None)
    +        self.access_tier_change_time = kwargs.get('access_tier_change_time', None)
    +
    +
    +class Block(Model):
    +    """Represents a single block in a block blob.  It describes the block's ID and
    +    size.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The base64 encoded block ID.
    +    :type name: str
    +    :param size: Required. The block size in bytes.
    +    :type size: int
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'size': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +        'size': {'key': 'Size', 'type': 'int', 'xml': {'name': 'Size'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Block, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.size = kwargs.get('size', None)
    +
    +
    +class BlockList(Model):
    +    """BlockList.
    +
    +    :param committed_blocks:
    +    :type committed_blocks: list[~azure.storage.blob.models.Block]
    +    :param uncommitted_blocks:
    +    :type uncommitted_blocks: list[~azure.storage.blob.models.Block]
    +    """
    +
    +    _attribute_map = {
    +        'committed_blocks': {'key': 'CommittedBlocks', 'type': '[Block]', 'xml': {'name': 'CommittedBlocks', 'itemsName': 'Block', 'wrapped': True}},
    +        'uncommitted_blocks': {'key': 'UncommittedBlocks', 'type': '[Block]', 'xml': {'name': 'UncommittedBlocks', 'itemsName': 'Block', 'wrapped': True}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlockList, self).__init__(**kwargs)
    +        self.committed_blocks = kwargs.get('committed_blocks', None)
    +        self.uncommitted_blocks = kwargs.get('uncommitted_blocks', None)
    +
    +
    +class BlockLookupList(Model):
    +    """BlockLookupList.
    +
    +    :param committed:
    +    :type committed: list[str]
    +    :param uncommitted:
    +    :type uncommitted: list[str]
    +    :param latest:
    +    :type latest: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'committed': {'key': 'Committed', 'type': '[str]', 'xml': {'name': 'Committed', 'itemsName': 'Committed'}},
    +        'uncommitted': {'key': 'Uncommitted', 'type': '[str]', 'xml': {'name': 'Uncommitted', 'itemsName': 'Uncommitted'}},
    +        'latest': {'key': 'Latest', 'type': '[str]', 'xml': {'name': 'Latest', 'itemsName': 'Latest'}},
    +    }
    +    _xml_map = {
    +        'name': 'BlockList'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlockLookupList, self).__init__(**kwargs)
    +        self.committed = kwargs.get('committed', None)
    +        self.uncommitted = kwargs.get('uncommitted', None)
    +        self.latest = kwargs.get('latest', None)
    +
    +
    +class ClearRange(Model):
    +    """ClearRange.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required.
    +    :type start: long
    +    :param end: Required.
    +    :type end: long
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'end': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'long', 'xml': {'name': 'Start'}},
    +        'end': {'key': 'End', 'type': 'long', 'xml': {'name': 'End'}},
    +    }
    +    _xml_map = {
    +        'name': 'ClearRange'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ClearRange, self).__init__(**kwargs)
    +        self.start = kwargs.get('start', None)
    +        self.end = kwargs.get('end', None)
    +
    +
    +class ContainerCpkScopeInfo(Model):
    +    """Additional parameters for create operation.
    +
    +    :param default_encryption_scope: Optional.  Version 2019-07-07 and later.
    +     Specifies the default encryption scope to set on the container and use for
    +     all future writes.
    +    :type default_encryption_scope: str
    +    :param deny_encryption_scope_override: Optional.  Version 2019-07-07 and
    +     newer.  If true, prevents any request from specifying a different
    +     encryption scope than the scope set on the container.
    +    :type deny_encryption_scope_override: bool
    +    """
    +
    +    _attribute_map = {
    +        'default_encryption_scope': {'key': '', 'type': 'str', 'xml': {'name': 'default_encryption_scope'}},
    +        'deny_encryption_scope_override': {'key': '', 'type': 'bool', 'xml': {'name': 'deny_encryption_scope_override'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ContainerCpkScopeInfo, self).__init__(**kwargs)
    +        self.default_encryption_scope = kwargs.get('default_encryption_scope', None)
    +        self.deny_encryption_scope_override = kwargs.get('deny_encryption_scope_override', None)
    +
    +
    +class ContainerItem(Model):
    +    """An Azure Storage container.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required.
    +    :type name: str
    +    :param properties: Required.
    +    :type properties: ~azure.storage.blob.models.ContainerProperties
    +    :param metadata:
    +    :type metadata: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'properties': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +        'properties': {'key': 'Properties', 'type': 'ContainerProperties', 'xml': {'name': 'Properties'}},
    +        'metadata': {'key': 'Metadata', 'type': '{str}', 'xml': {'name': 'Metadata'}},
    +    }
    +    _xml_map = {
    +        'name': 'Container'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ContainerItem, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.properties = kwargs.get('properties', None)
    +        self.metadata = kwargs.get('metadata', None)
    +
    +
    +class ContainerProperties(Model):
    +    """Properties of a container.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param last_modified: Required.
    +    :type last_modified: datetime
    +    :param etag: Required.
    +    :type etag: str
    +    :param lease_status: Possible values include: 'locked', 'unlocked'
    +    :type lease_status: str or ~azure.storage.blob.models.LeaseStatusType
    +    :param lease_state: Possible values include: 'available', 'leased',
    +     'expired', 'breaking', 'broken'
    +    :type lease_state: str or ~azure.storage.blob.models.LeaseStateType
    +    :param lease_duration: Possible values include: 'infinite', 'fixed'
    +    :type lease_duration: str or ~azure.storage.blob.models.LeaseDurationType
    +    :param public_access: Possible values include: 'container', 'blob'
    +    :type public_access: str or ~azure.storage.blob.models.PublicAccessType
    +    :param has_immutability_policy:
    +    :type has_immutability_policy: bool
    +    :param has_legal_hold:
    +    :type has_legal_hold: bool
    +    :param default_encryption_scope:
    +    :type default_encryption_scope: str
    +    :param deny_encryption_scope_override:
    +    :type deny_encryption_scope_override: bool
    +    """
    +
    +    _validation = {
    +        'last_modified': {'required': True},
    +        'etag': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'last_modified': {'key': 'Last-Modified', 'type': 'rfc-1123', 'xml': {'name': 'Last-Modified'}},
    +        'etag': {'key': 'Etag', 'type': 'str', 'xml': {'name': 'Etag'}},
    +        'lease_status': {'key': 'LeaseStatus', 'type': 'LeaseStatusType', 'xml': {'name': 'LeaseStatus'}},
    +        'lease_state': {'key': 'LeaseState', 'type': 'LeaseStateType', 'xml': {'name': 'LeaseState'}},
    +        'lease_duration': {'key': 'LeaseDuration', 'type': 'LeaseDurationType', 'xml': {'name': 'LeaseDuration'}},
    +        'public_access': {'key': 'PublicAccess', 'type': 'str', 'xml': {'name': 'PublicAccess'}},
    +        'has_immutability_policy': {'key': 'HasImmutabilityPolicy', 'type': 'bool', 'xml': {'name': 'HasImmutabilityPolicy'}},
    +        'has_legal_hold': {'key': 'HasLegalHold', 'type': 'bool', 'xml': {'name': 'HasLegalHold'}},
    +        'default_encryption_scope': {'key': 'DefaultEncryptionScope', 'type': 'str', 'xml': {'name': 'DefaultEncryptionScope'}},
    +        'deny_encryption_scope_override': {'key': 'DenyEncryptionScopeOverride', 'type': 'bool', 'xml': {'name': 'DenyEncryptionScopeOverride'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ContainerProperties, self).__init__(**kwargs)
    +        self.last_modified = kwargs.get('last_modified', None)
    +        self.etag = kwargs.get('etag', None)
    +        self.lease_status = kwargs.get('lease_status', None)
    +        self.lease_state = kwargs.get('lease_state', None)
    +        self.lease_duration = kwargs.get('lease_duration', None)
    +        self.public_access = kwargs.get('public_access', None)
    +        self.has_immutability_policy = kwargs.get('has_immutability_policy', None)
    +        self.has_legal_hold = kwargs.get('has_legal_hold', None)
    +        self.default_encryption_scope = kwargs.get('default_encryption_scope', None)
    +        self.deny_encryption_scope_override = kwargs.get('deny_encryption_scope_override', None)
    +
    +
    +class CorsRule(Model):
    +    """CORS is an HTTP feature that enables a web application running under one
    +    domain to access resources in another domain. Web browsers implement a
    +    security restriction known as same-origin policy that prevents a web page
    +    from calling APIs in a different domain; CORS provides a secure way to
    +    allow one domain (the origin domain) to call APIs in another domain.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param allowed_origins: Required. The origin domains that are permitted to
    +     make a request against the storage service via CORS. The origin domain is
    +     the domain from which the request originates. Note that the origin must be
    +     an exact case-sensitive match with the origin that the user age sends to
    +     the service. You can also use the wildcard character '*' to allow all
    +     origin domains to make requests via CORS.
    +    :type allowed_origins: str
    +    :param allowed_methods: Required. The methods (HTTP request verbs) that
    +     the origin domain may use for a CORS request. (comma separated)
    +    :type allowed_methods: str
    +    :param allowed_headers: Required. the request headers that the origin
    +     domain may specify on the CORS request.
    +    :type allowed_headers: str
    +    :param exposed_headers: Required. The response headers that may be sent in
    +     the response to the CORS request and exposed by the browser to the request
    +     issuer
    +    :type exposed_headers: str
    +    :param max_age_in_seconds: Required. The maximum amount time that a
    +     browser should cache the preflight OPTIONS request.
    +    :type max_age_in_seconds: int
    +    """
    +
    +    _validation = {
    +        'allowed_origins': {'required': True},
    +        'allowed_methods': {'required': True},
    +        'allowed_headers': {'required': True},
    +        'exposed_headers': {'required': True},
    +        'max_age_in_seconds': {'required': True, 'minimum': 0},
    +    }
    +
    +    _attribute_map = {
    +        'allowed_origins': {'key': 'AllowedOrigins', 'type': 'str', 'xml': {'name': 'AllowedOrigins'}},
    +        'allowed_methods': {'key': 'AllowedMethods', 'type': 'str', 'xml': {'name': 'AllowedMethods'}},
    +        'allowed_headers': {'key': 'AllowedHeaders', 'type': 'str', 'xml': {'name': 'AllowedHeaders'}},
    +        'exposed_headers': {'key': 'ExposedHeaders', 'type': 'str', 'xml': {'name': 'ExposedHeaders'}},
    +        'max_age_in_seconds': {'key': 'MaxAgeInSeconds', 'type': 'int', 'xml': {'name': 'MaxAgeInSeconds'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CorsRule, self).__init__(**kwargs)
    +        self.allowed_origins = kwargs.get('allowed_origins', None)
    +        self.allowed_methods = kwargs.get('allowed_methods', None)
    +        self.allowed_headers = kwargs.get('allowed_headers', None)
    +        self.exposed_headers = kwargs.get('exposed_headers', None)
    +        self.max_age_in_seconds = kwargs.get('max_age_in_seconds', None)
    +
    +
    +class CpkInfo(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param encryption_key: Optional. Specifies the encryption key to use to
    +     encrypt the data provided in the request. If not specified, encryption is
    +     performed with the root account encryption key.  For more information, see
    +     Encryption at Rest for Azure Storage Services.
    +    :type encryption_key: str
    +    :param encryption_key_sha256: The SHA-256 hash of the provided encryption
    +     key. Must be provided if the x-ms-encryption-key header is provided.
    +    :type encryption_key_sha256: str
    +    :param encryption_algorithm: The algorithm used to produce the encryption
    +     key hash. Currently, the only accepted value is "AES256". Must be provided
    +     if the x-ms-encryption-key header is provided. Possible values include:
    +     'AES256'
    +    :type encryption_algorithm: str or
    +     ~azure.storage.blob.models.EncryptionAlgorithmType
    +    """
    +
    +    _attribute_map = {
    +        'encryption_key': {'key': '', 'type': 'str', 'xml': {'name': 'encryption_key'}},
    +        'encryption_key_sha256': {'key': '', 'type': 'str', 'xml': {'name': 'encryption_key_sha256'}},
    +        'encryption_algorithm': {'key': '', 'type': 'EncryptionAlgorithmType', 'xml': {'name': 'encryption_algorithm'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CpkInfo, self).__init__(**kwargs)
    +        self.encryption_key = kwargs.get('encryption_key', None)
    +        self.encryption_key_sha256 = kwargs.get('encryption_key_sha256', None)
    +        self.encryption_algorithm = kwargs.get('encryption_algorithm', None)
    +
    +
    +class CpkScopeInfo(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param encryption_scope: Optional. Version 2019-07-07 and later.
    +     Specifies the name of the encryption scope to use to encrypt the data
    +     provided in the request. If not specified, encryption is performed with
    +     the default account encryption scope.  For more information, see
    +     Encryption at Rest for Azure Storage Services.
    +    :type encryption_scope: str
    +    """
    +
    +    _attribute_map = {
    +        'encryption_scope': {'key': '', 'type': 'str', 'xml': {'name': 'encryption_scope'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CpkScopeInfo, self).__init__(**kwargs)
    +        self.encryption_scope = kwargs.get('encryption_scope', None)
    +
    +
    +class DataLakeStorageError(Model):
    +    """DataLakeStorageError.
    +
    +    :param error: The service error response object.
    +    :type error: ~azure.storage.blob.models.DataLakeStorageErrorError
    +    """
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'DataLakeStorageErrorError', 'xml': {'name': 'error'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DataLakeStorageError, self).__init__(**kwargs)
    +        self.error = kwargs.get('error', None)
    +
    +
    +class DataLakeStorageErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'DataLakeStorageError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'DataLakeStorageError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(DataLakeStorageErrorException, self).__init__(response=response)
    +
    +
    +class DataLakeStorageErrorError(Model):
    +    """The service error response object.
    +
    +    :param code: The service error code.
    +    :type code: str
    +    :param message: The service error message.
    +    :type message: str
    +    """
    +
    +    _attribute_map = {
    +        'code': {'key': 'Code', 'type': 'str', 'xml': {'name': 'Code'}},
    +        'message': {'key': 'Message', 'type': 'str', 'xml': {'name': 'Message'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DataLakeStorageErrorError, self).__init__(**kwargs)
    +        self.code = kwargs.get('code', None)
    +        self.message = kwargs.get('message', None)
    +
    +
    +class DirectoryHttpHeaders(Model):
    +    """Additional parameters for a set of operations, such as: Directory_create,
    +    Directory_rename, Blob_rename.
    +
    +    :param cache_control: Cache control for given resource
    +    :type cache_control: str
    +    :param content_type: Content type for given resource
    +    :type content_type: str
    +    :param content_encoding: Content encoding for given resource
    +    :type content_encoding: str
    +    :param content_language: Content language for given resource
    +    :type content_language: str
    +    :param content_disposition: Content disposition for given resource
    +    :type content_disposition: str
    +    """
    +
    +    _attribute_map = {
    +        'cache_control': {'key': '', 'type': 'str', 'xml': {'name': 'cache_control'}},
    +        'content_type': {'key': '', 'type': 'str', 'xml': {'name': 'content_type'}},
    +        'content_encoding': {'key': '', 'type': 'str', 'xml': {'name': 'content_encoding'}},
    +        'content_language': {'key': '', 'type': 'str', 'xml': {'name': 'content_language'}},
    +        'content_disposition': {'key': '', 'type': 'str', 'xml': {'name': 'content_disposition'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DirectoryHttpHeaders, self).__init__(**kwargs)
    +        self.cache_control = kwargs.get('cache_control', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.content_encoding = kwargs.get('content_encoding', None)
    +        self.content_language = kwargs.get('content_language', None)
    +        self.content_disposition = kwargs.get('content_disposition', None)
    +
    +
    +class GeoReplication(Model):
    +    """Geo-Replication information for the Secondary Storage Service.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param status: Required. The status of the secondary location. Possible
    +     values include: 'live', 'bootstrap', 'unavailable'
    +    :type status: str or ~azure.storage.blob.models.GeoReplicationStatusType
    +    :param last_sync_time: Required. A GMT date/time value, to the second. All
    +     primary writes preceding this value are guaranteed to be available for
    +     read operations at the secondary. Primary writes after this point in time
    +     may or may not be available for reads.
    +    :type last_sync_time: datetime
    +    """
    +
    +    _validation = {
    +        'status': {'required': True},
    +        'last_sync_time': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'status': {'key': 'Status', 'type': 'str', 'xml': {'name': 'Status'}},
    +        'last_sync_time': {'key': 'LastSyncTime', 'type': 'rfc-1123', 'xml': {'name': 'LastSyncTime'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(GeoReplication, self).__init__(**kwargs)
    +        self.status = kwargs.get('status', None)
    +        self.last_sync_time = kwargs.get('last_sync_time', None)
    +
    +
    +class KeyInfo(Model):
    +    """Key information.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required. The date-time the key is active in ISO 8601 UTC
    +     time
    +    :type start: str
    +    :param expiry: Required. The date-time the key expires in ISO 8601 UTC
    +     time
    +    :type expiry: str
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'expiry': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'str', 'xml': {'name': 'Start'}},
    +        'expiry': {'key': 'Expiry', 'type': 'str', 'xml': {'name': 'Expiry'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyInfo, self).__init__(**kwargs)
    +        self.start = kwargs.get('start', None)
    +        self.expiry = kwargs.get('expiry', None)
    +
    +
    +class LeaseAccessConditions(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param lease_id: If specified, the operation only succeeds if the
    +     resource's lease is active and matches this ID.
    +    :type lease_id: str
    +    """
    +
    +    _attribute_map = {
    +        'lease_id': {'key': '', 'type': 'str', 'xml': {'name': 'lease_id'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(LeaseAccessConditions, self).__init__(**kwargs)
    +        self.lease_id = kwargs.get('lease_id', None)
    +
    +
    +class ListBlobsFlatSegmentResponse(Model):
    +    """An enumeration of blobs.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param service_endpoint: Required.
    +    :type service_endpoint: str
    +    :param container_name: Required.
    +    :type container_name: str
    +    :param prefix:
    +    :type prefix: str
    +    :param marker:
    +    :type marker: str
    +    :param max_results:
    +    :type max_results: int
    +    :param segment: Required.
    +    :type segment: ~azure.storage.blob.models.BlobFlatListSegment
    +    :param next_marker:
    +    :type next_marker: str
    +    """
    +
    +    _validation = {
    +        'service_endpoint': {'required': True},
    +        'container_name': {'required': True},
    +        'segment': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}},
    +        'container_name': {'key': 'ContainerName', 'type': 'str', 'xml': {'name': 'ContainerName', 'attr': True}},
    +        'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}},
    +        'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}},
    +        'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}},
    +        'segment': {'key': 'Segment', 'type': 'BlobFlatListSegment', 'xml': {'name': 'Segment'}},
    +        'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}},
    +    }
    +    _xml_map = {
    +        'name': 'EnumerationResults'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ListBlobsFlatSegmentResponse, self).__init__(**kwargs)
    +        self.service_endpoint = kwargs.get('service_endpoint', None)
    +        self.container_name = kwargs.get('container_name', None)
    +        self.prefix = kwargs.get('prefix', None)
    +        self.marker = kwargs.get('marker', None)
    +        self.max_results = kwargs.get('max_results', None)
    +        self.segment = kwargs.get('segment', None)
    +        self.next_marker = kwargs.get('next_marker', None)
    +
    +
    +class ListBlobsHierarchySegmentResponse(Model):
    +    """An enumeration of blobs.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param service_endpoint: Required.
    +    :type service_endpoint: str
    +    :param container_name: Required.
    +    :type container_name: str
    +    :param prefix:
    +    :type prefix: str
    +    :param marker:
    +    :type marker: str
    +    :param max_results:
    +    :type max_results: int
    +    :param delimiter:
    +    :type delimiter: str
    +    :param segment: Required.
    +    :type segment: ~azure.storage.blob.models.BlobHierarchyListSegment
    +    :param next_marker:
    +    :type next_marker: str
    +    """
    +
    +    _validation = {
    +        'service_endpoint': {'required': True},
    +        'container_name': {'required': True},
    +        'segment': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}},
    +        'container_name': {'key': 'ContainerName', 'type': 'str', 'xml': {'name': 'ContainerName', 'attr': True}},
    +        'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}},
    +        'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}},
    +        'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}},
    +        'delimiter': {'key': 'Delimiter', 'type': 'str', 'xml': {'name': 'Delimiter'}},
    +        'segment': {'key': 'Segment', 'type': 'BlobHierarchyListSegment', 'xml': {'name': 'Segment'}},
    +        'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}},
    +    }
    +    _xml_map = {
    +        'name': 'EnumerationResults'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ListBlobsHierarchySegmentResponse, self).__init__(**kwargs)
    +        self.service_endpoint = kwargs.get('service_endpoint', None)
    +        self.container_name = kwargs.get('container_name', None)
    +        self.prefix = kwargs.get('prefix', None)
    +        self.marker = kwargs.get('marker', None)
    +        self.max_results = kwargs.get('max_results', None)
    +        self.delimiter = kwargs.get('delimiter', None)
    +        self.segment = kwargs.get('segment', None)
    +        self.next_marker = kwargs.get('next_marker', None)
    +
    +
    +class ListContainersSegmentResponse(Model):
    +    """An enumeration of containers.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param service_endpoint: Required.
    +    :type service_endpoint: str
    +    :param prefix:
    +    :type prefix: str
    +    :param marker:
    +    :type marker: str
    +    :param max_results:
    +    :type max_results: int
    +    :param container_items: Required.
    +    :type container_items: list[~azure.storage.blob.models.ContainerItem]
    +    :param next_marker:
    +    :type next_marker: str
    +    """
    +
    +    _validation = {
    +        'service_endpoint': {'required': True},
    +        'container_items': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}},
    +        'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}},
    +        'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}},
    +        'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}},
    +        'container_items': {'key': 'ContainerItems', 'type': '[ContainerItem]', 'xml': {'name': 'Containers', 'itemsName': 'Containers', 'wrapped': True}},
    +        'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}},
    +    }
    +    _xml_map = {
    +        'name': 'EnumerationResults'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ListContainersSegmentResponse, self).__init__(**kwargs)
    +        self.service_endpoint = kwargs.get('service_endpoint', None)
    +        self.prefix = kwargs.get('prefix', None)
    +        self.marker = kwargs.get('marker', None)
    +        self.max_results = kwargs.get('max_results', None)
    +        self.container_items = kwargs.get('container_items', None)
    +        self.next_marker = kwargs.get('next_marker', None)
    +
    +
    +class Logging(Model):
    +    """Azure Analytics Logging settings.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param version: Required. The version of Storage Analytics to configure.
    +    :type version: str
    +    :param delete: Required. Indicates whether all delete requests should be
    +     logged.
    +    :type delete: bool
    +    :param read: Required. Indicates whether all read requests should be
    +     logged.
    +    :type read: bool
    +    :param write: Required. Indicates whether all write requests should be
    +     logged.
    +    :type write: bool
    +    :param retention_policy: Required.
    +    :type retention_policy: ~azure.storage.blob.models.RetentionPolicy
    +    """
    +
    +    _validation = {
    +        'version': {'required': True},
    +        'delete': {'required': True},
    +        'read': {'required': True},
    +        'write': {'required': True},
    +        'retention_policy': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'version': {'key': 'Version', 'type': 'str', 'xml': {'name': 'Version'}},
    +        'delete': {'key': 'Delete', 'type': 'bool', 'xml': {'name': 'Delete'}},
    +        'read': {'key': 'Read', 'type': 'bool', 'xml': {'name': 'Read'}},
    +        'write': {'key': 'Write', 'type': 'bool', 'xml': {'name': 'Write'}},
    +        'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'RetentionPolicy'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Logging, self).__init__(**kwargs)
    +        self.version = kwargs.get('version', None)
    +        self.delete = kwargs.get('delete', None)
    +        self.read = kwargs.get('read', None)
    +        self.write = kwargs.get('write', None)
    +        self.retention_policy = kwargs.get('retention_policy', None)
    +
    +
    +class Metrics(Model):
    +    """a summary of request statistics grouped by API in hour or minute aggregates
    +    for blobs.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param version: The version of Storage Analytics to configure.
    +    :type version: str
    +    :param enabled: Required. Indicates whether metrics are enabled for the
    +     Blob service.
    +    :type enabled: bool
    +    :param include_apis: Indicates whether metrics should generate summary
    +     statistics for called API operations.
    +    :type include_apis: bool
    +    :param retention_policy:
    +    :type retention_policy: ~azure.storage.blob.models.RetentionPolicy
    +    """
    +
    +    _validation = {
    +        'enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'version': {'key': 'Version', 'type': 'str', 'xml': {'name': 'Version'}},
    +        'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}},
    +        'include_apis': {'key': 'IncludeAPIs', 'type': 'bool', 'xml': {'name': 'IncludeAPIs'}},
    +        'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'RetentionPolicy'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Metrics, self).__init__(**kwargs)
    +        self.version = kwargs.get('version', None)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.include_apis = kwargs.get('include_apis', None)
    +        self.retention_policy = kwargs.get('retention_policy', None)
    +
    +
    +class ModifiedAccessConditions(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param if_modified_since: Specify this header value to operate only on a
    +     blob if it has been modified since the specified date/time.
    +    :type if_modified_since: datetime
    +    :param if_unmodified_since: Specify this header value to operate only on a
    +     blob if it has not been modified since the specified date/time.
    +    :type if_unmodified_since: datetime
    +    :param if_match: Specify an ETag value to operate only on blobs with a
    +     matching value.
    +    :type if_match: str
    +    :param if_none_match: Specify an ETag value to operate only on blobs
    +     without a matching value.
    +    :type if_none_match: str
    +    """
    +
    +    _attribute_map = {
    +        'if_modified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'if_modified_since'}},
    +        'if_unmodified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'if_unmodified_since'}},
    +        'if_match': {'key': '', 'type': 'str', 'xml': {'name': 'if_match'}},
    +        'if_none_match': {'key': '', 'type': 'str', 'xml': {'name': 'if_none_match'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ModifiedAccessConditions, self).__init__(**kwargs)
    +        self.if_modified_since = kwargs.get('if_modified_since', None)
    +        self.if_unmodified_since = kwargs.get('if_unmodified_since', None)
    +        self.if_match = kwargs.get('if_match', None)
    +        self.if_none_match = kwargs.get('if_none_match', None)
    +
    +
    +class PageList(Model):
    +    """the list of pages.
    +
    +    :param page_range:
    +    :type page_range: list[~azure.storage.blob.models.PageRange]
    +    :param clear_range:
    +    :type clear_range: list[~azure.storage.blob.models.ClearRange]
    +    """
    +
    +    _attribute_map = {
    +        'page_range': {'key': 'PageRange', 'type': '[PageRange]', 'xml': {'name': 'PageRange', 'itemsName': 'PageRange'}},
    +        'clear_range': {'key': 'ClearRange', 'type': '[ClearRange]', 'xml': {'name': 'ClearRange', 'itemsName': 'ClearRange'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PageList, self).__init__(**kwargs)
    +        self.page_range = kwargs.get('page_range', None)
    +        self.clear_range = kwargs.get('clear_range', None)
    +
    +
    +class PageRange(Model):
    +    """PageRange.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required.
    +    :type start: long
    +    :param end: Required.
    +    :type end: long
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'end': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'long', 'xml': {'name': 'Start'}},
    +        'end': {'key': 'End', 'type': 'long', 'xml': {'name': 'End'}},
    +    }
    +    _xml_map = {
    +        'name': 'PageRange'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PageRange, self).__init__(**kwargs)
    +        self.start = kwargs.get('start', None)
    +        self.end = kwargs.get('end', None)
    +
    +
    +class RetentionPolicy(Model):
    +    """the retention policy which determines how long the associated data should
    +    persist.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param enabled: Required. Indicates whether a retention policy is enabled
    +     for the storage service
    +    :type enabled: bool
    +    :param days: Indicates the number of days that metrics or logging or
    +     soft-deleted data should be retained. All data older than this value will
    +     be deleted
    +    :type days: int
    +    """
    +
    +    _validation = {
    +        'enabled': {'required': True},
    +        'days': {'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}},
    +        'days': {'key': 'Days', 'type': 'int', 'xml': {'name': 'Days'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RetentionPolicy, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.days = kwargs.get('days', None)
    +
    +
    +class SequenceNumberAccessConditions(Model):
    +    """Additional parameters for a set of operations, such as:
    +    PageBlob_upload_pages, PageBlob_clear_pages,
    +    PageBlob_upload_pages_from_url.
    +
    +    :param if_sequence_number_less_than_or_equal_to: Specify this header value
    +     to operate only on a blob if it has a sequence number less than or equal
    +     to the specified.
    +    :type if_sequence_number_less_than_or_equal_to: long
    +    :param if_sequence_number_less_than: Specify this header value to operate
    +     only on a blob if it has a sequence number less than the specified.
    +    :type if_sequence_number_less_than: long
    +    :param if_sequence_number_equal_to: Specify this header value to operate
    +     only on a blob if it has the specified sequence number.
    +    :type if_sequence_number_equal_to: long
    +    """
    +
    +    _attribute_map = {
    +        'if_sequence_number_less_than_or_equal_to': {'key': '', 'type': 'long', 'xml': {'name': 'if_sequence_number_less_than_or_equal_to'}},
    +        'if_sequence_number_less_than': {'key': '', 'type': 'long', 'xml': {'name': 'if_sequence_number_less_than'}},
    +        'if_sequence_number_equal_to': {'key': '', 'type': 'long', 'xml': {'name': 'if_sequence_number_equal_to'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SequenceNumberAccessConditions, self).__init__(**kwargs)
    +        self.if_sequence_number_less_than_or_equal_to = kwargs.get('if_sequence_number_less_than_or_equal_to', None)
    +        self.if_sequence_number_less_than = kwargs.get('if_sequence_number_less_than', None)
    +        self.if_sequence_number_equal_to = kwargs.get('if_sequence_number_equal_to', None)
    +
    +
    +class SignedIdentifier(Model):
    +    """signed identifier.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param id: Required. a unique id
    +    :type id: str
    +    :param access_policy:
    +    :type access_policy: ~azure.storage.blob.models.AccessPolicy
    +    """
    +
    +    _validation = {
    +        'id': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'Id', 'type': 'str', 'xml': {'name': 'Id'}},
    +        'access_policy': {'key': 'AccessPolicy', 'type': 'AccessPolicy', 'xml': {'name': 'AccessPolicy'}},
    +    }
    +    _xml_map = {
    +        'name': 'SignedIdentifier'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SignedIdentifier, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.access_policy = kwargs.get('access_policy', None)
    +
    +
    +class SourceModifiedAccessConditions(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param source_if_modified_since: Specify this header value to operate only
    +     on a blob if it has been modified since the specified date/time.
    +    :type source_if_modified_since: datetime
    +    :param source_if_unmodified_since: Specify this header value to operate
    +     only on a blob if it has not been modified since the specified date/time.
    +    :type source_if_unmodified_since: datetime
    +    :param source_if_match: Specify an ETag value to operate only on blobs
    +     with a matching value.
    +    :type source_if_match: str
    +    :param source_if_none_match: Specify an ETag value to operate only on
    +     blobs without a matching value.
    +    :type source_if_none_match: str
    +    """
    +
    +    _attribute_map = {
    +        'source_if_modified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'source_if_modified_since'}},
    +        'source_if_unmodified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'source_if_unmodified_since'}},
    +        'source_if_match': {'key': '', 'type': 'str', 'xml': {'name': 'source_if_match'}},
    +        'source_if_none_match': {'key': '', 'type': 'str', 'xml': {'name': 'source_if_none_match'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SourceModifiedAccessConditions, self).__init__(**kwargs)
    +        self.source_if_modified_since = kwargs.get('source_if_modified_since', None)
    +        self.source_if_unmodified_since = kwargs.get('source_if_unmodified_since', None)
    +        self.source_if_match = kwargs.get('source_if_match', None)
    +        self.source_if_none_match = kwargs.get('source_if_none_match', None)
    +
    +
    +class StaticWebsite(Model):
    +    """The properties that enable an account to host a static website.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param enabled: Required. Indicates whether this account is hosting a
    +     static website
    +    :type enabled: bool
    +    :param index_document: The default name of the index page under each
    +     directory
    +    :type index_document: str
    +    :param error_document404_path: The absolute path of the custom 404 page
    +    :type error_document404_path: str
    +    """
    +
    +    _validation = {
    +        'enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}},
    +        'index_document': {'key': 'IndexDocument', 'type': 'str', 'xml': {'name': 'IndexDocument'}},
    +        'error_document404_path': {'key': 'ErrorDocument404Path', 'type': 'str', 'xml': {'name': 'ErrorDocument404Path'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StaticWebsite, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.index_document = kwargs.get('index_document', None)
    +        self.error_document404_path = kwargs.get('error_document404_path', None)
    +
    +
    +class StorageError(Model):
    +    """StorageError.
    +
    +    :param message:
    +    :type message: str
    +    """
    +
    +    _attribute_map = {
    +        'message': {'key': 'Message', 'type': 'str', 'xml': {'name': 'Message'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageError, self).__init__(**kwargs)
    +        self.message = kwargs.get('message', None)
    +
    +
    +class StorageErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'StorageError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'StorageError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(StorageErrorException, self).__init__(response=response)
    +
    +
    +class StorageServiceProperties(Model):
    +    """Storage Service Properties.
    +
    +    :param logging:
    +    :type logging: ~azure.storage.blob.models.Logging
    +    :param hour_metrics:
    +    :type hour_metrics: ~azure.storage.blob.models.Metrics
    +    :param minute_metrics:
    +    :type minute_metrics: ~azure.storage.blob.models.Metrics
    +    :param cors: The set of CORS rules.
    +    :type cors: list[~azure.storage.blob.models.CorsRule]
    +    :param default_service_version: The default version to use for requests to
    +     the Blob service if an incoming request's version is not specified.
    +     Possible values include version 2008-10-27 and all more recent versions
    +    :type default_service_version: str
    +    :param delete_retention_policy:
    +    :type delete_retention_policy: ~azure.storage.blob.models.RetentionPolicy
    +    :param static_website:
    +    :type static_website: ~azure.storage.blob.models.StaticWebsite
    +    """
    +
    +    _attribute_map = {
    +        'logging': {'key': 'Logging', 'type': 'Logging', 'xml': {'name': 'Logging'}},
    +        'hour_metrics': {'key': 'HourMetrics', 'type': 'Metrics', 'xml': {'name': 'HourMetrics'}},
    +        'minute_metrics': {'key': 'MinuteMetrics', 'type': 'Metrics', 'xml': {'name': 'MinuteMetrics'}},
    +        'cors': {'key': 'Cors', 'type': '[CorsRule]', 'xml': {'name': 'Cors', 'itemsName': 'CorsRule', 'wrapped': True}},
    +        'default_service_version': {'key': 'DefaultServiceVersion', 'type': 'str', 'xml': {'name': 'DefaultServiceVersion'}},
    +        'delete_retention_policy': {'key': 'DeleteRetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'DeleteRetentionPolicy'}},
    +        'static_website': {'key': 'StaticWebsite', 'type': 'StaticWebsite', 'xml': {'name': 'StaticWebsite'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageServiceProperties, self).__init__(**kwargs)
    +        self.logging = kwargs.get('logging', None)
    +        self.hour_metrics = kwargs.get('hour_metrics', None)
    +        self.minute_metrics = kwargs.get('minute_metrics', None)
    +        self.cors = kwargs.get('cors', None)
    +        self.default_service_version = kwargs.get('default_service_version', None)
    +        self.delete_retention_policy = kwargs.get('delete_retention_policy', None)
    +        self.static_website = kwargs.get('static_website', None)
    +
    +
    +class StorageServiceStats(Model):
    +    """Stats for the storage service.
    +
    +    :param geo_replication:
    +    :type geo_replication: ~azure.storage.blob.models.GeoReplication
    +    """
    +
    +    _attribute_map = {
    +        'geo_replication': {'key': 'GeoReplication', 'type': 'GeoReplication', 'xml': {'name': 'GeoReplication'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageServiceStats, self).__init__(**kwargs)
    +        self.geo_replication = kwargs.get('geo_replication', None)
    +
    +
    +class UserDelegationKey(Model):
    +    """A user delegation key.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param signed_oid: Required. The Azure Active Directory object ID in GUID
    +     format.
    +    :type signed_oid: str
    +    :param signed_tid: Required. The Azure Active Directory tenant ID in GUID
    +     format
    +    :type signed_tid: str
    +    :param signed_start: Required. The date-time the key is active
    +    :type signed_start: datetime
    +    :param signed_expiry: Required. The date-time the key expires
    +    :type signed_expiry: datetime
    +    :param signed_service: Required. Abbreviation of the Azure Storage service
    +     that accepts the key
    +    :type signed_service: str
    +    :param signed_version: Required. The service version that created the key
    +    :type signed_version: str
    +    :param value: Required. The key as a base64 string
    +    :type value: str
    +    """
    +
    +    _validation = {
    +        'signed_oid': {'required': True},
    +        'signed_tid': {'required': True},
    +        'signed_start': {'required': True},
    +        'signed_expiry': {'required': True},
    +        'signed_service': {'required': True},
    +        'signed_version': {'required': True},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'signed_oid': {'key': 'SignedOid', 'type': 'str', 'xml': {'name': 'SignedOid'}},
    +        'signed_tid': {'key': 'SignedTid', 'type': 'str', 'xml': {'name': 'SignedTid'}},
    +        'signed_start': {'key': 'SignedStart', 'type': 'iso-8601', 'xml': {'name': 'SignedStart'}},
    +        'signed_expiry': {'key': 'SignedExpiry', 'type': 'iso-8601', 'xml': {'name': 'SignedExpiry'}},
    +        'signed_service': {'key': 'SignedService', 'type': 'str', 'xml': {'name': 'SignedService'}},
    +        'signed_version': {'key': 'SignedVersion', 'type': 'str', 'xml': {'name': 'SignedVersion'}},
    +        'value': {'key': 'Value', 'type': 'str', 'xml': {'name': 'Value'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(UserDelegationKey, self).__init__(**kwargs)
    +        self.signed_oid = kwargs.get('signed_oid', None)
    +        self.signed_tid = kwargs.get('signed_tid', None)
    +        self.signed_start = kwargs.get('signed_start', None)
    +        self.signed_expiry = kwargs.get('signed_expiry', None)
    +        self.signed_service = kwargs.get('signed_service', None)
    +        self.signed_version = kwargs.get('signed_version', None)
    +        self.value = kwargs.get('value', None)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/models/_models_py3.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/models/_models_py3.py
    new file mode 100644
    index 000000000000..10738de1a089
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/models/_models_py3.py
    @@ -0,0 +1,1589 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from azure.core.exceptions import HttpResponseError
    +
    +
    +class AccessPolicy(Model):
    +    """An Access policy.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required. the date-time the policy is active
    +    :type start: str
    +    :param expiry: Required. the date-time the policy expires
    +    :type expiry: str
    +    :param permission: Required. the permissions for the acl policy
    +    :type permission: str
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'expiry': {'required': True},
    +        'permission': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'str', 'xml': {'name': 'Start'}},
    +        'expiry': {'key': 'Expiry', 'type': 'str', 'xml': {'name': 'Expiry'}},
    +        'permission': {'key': 'Permission', 'type': 'str', 'xml': {'name': 'Permission'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, start: str, expiry: str, permission: str, **kwargs) -> None:
    +        super(AccessPolicy, self).__init__(**kwargs)
    +        self.start = start
    +        self.expiry = expiry
    +        self.permission = permission
    +
    +
    +class AppendPositionAccessConditions(Model):
    +    """Additional parameters for a set of operations, such as:
    +    AppendBlob_append_block, AppendBlob_append_block_from_url.
    +
    +    :param max_size: Optional conditional header. The max length in bytes
    +     permitted for the append blob. If the Append Block operation would cause
    +     the blob to exceed that limit or if the blob size is already greater than
    +     the value specified in this header, the request will fail with
    +     MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition
    +     Failed).
    +    :type max_size: long
    +    :param append_position: Optional conditional header, used only for the
    +     Append Block operation. A number indicating the byte offset to compare.
    +     Append Block will succeed only if the append position is equal to this
    +     number. If it is not, the request will fail with the
    +     AppendPositionConditionNotMet error (HTTP status code 412 - Precondition
    +     Failed).
    +    :type append_position: long
    +    """
    +
    +    _attribute_map = {
    +        'max_size': {'key': '', 'type': 'long', 'xml': {'name': 'max_size'}},
    +        'append_position': {'key': '', 'type': 'long', 'xml': {'name': 'append_position'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, max_size: int=None, append_position: int=None, **kwargs) -> None:
    +        super(AppendPositionAccessConditions, self).__init__(**kwargs)
    +        self.max_size = max_size
    +        self.append_position = append_position
    +
    +
    +class BlobFlatListSegment(Model):
    +    """BlobFlatListSegment.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param blob_items: Required.
    +    :type blob_items: list[~azure.storage.blob.models.BlobItem]
    +    """
    +
    +    _validation = {
    +        'blob_items': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'blob_items': {'key': 'BlobItems', 'type': '[BlobItem]', 'xml': {'name': 'BlobItems', 'itemsName': 'Blob'}},
    +    }
    +    _xml_map = {
    +        'name': 'Blobs'
    +    }
    +
    +    def __init__(self, *, blob_items, **kwargs) -> None:
    +        super(BlobFlatListSegment, self).__init__(**kwargs)
    +        self.blob_items = blob_items
    +
    +
    +class BlobHierarchyListSegment(Model):
    +    """BlobHierarchyListSegment.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param blob_prefixes:
    +    :type blob_prefixes: list[~azure.storage.blob.models.BlobPrefix]
    +    :param blob_items: Required.
    +    :type blob_items: list[~azure.storage.blob.models.BlobItem]
    +    """
    +
    +    _validation = {
    +        'blob_items': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'blob_prefixes': {'key': 'BlobPrefixes', 'type': '[BlobPrefix]', 'xml': {'name': 'BlobPrefix', 'itemsName': 'BlobPrefix'}},
    +        'blob_items': {'key': 'BlobItems', 'type': '[BlobItem]', 'xml': {'name': 'Blob', 'itemsName': 'Blob'}},
    +    }
    +    _xml_map = {
    +        'name': 'Blobs'
    +    }
    +
    +    def __init__(self, *, blob_items, blob_prefixes=None, **kwargs) -> None:
    +        super(BlobHierarchyListSegment, self).__init__(**kwargs)
    +        self.blob_prefixes = blob_prefixes
    +        self.blob_items = blob_items
    +
    +
    +class BlobHTTPHeaders(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param blob_cache_control: Optional. Sets the blob's cache control. If
    +     specified, this property is stored with the blob and returned with a read
    +     request.
    +    :type blob_cache_control: str
    +    :param blob_content_type: Optional. Sets the blob's content type. If
    +     specified, this property is stored with the blob and returned with a read
    +     request.
    +    :type blob_content_type: str
    +    :param blob_content_md5: Optional. An MD5 hash of the blob content. Note
    +     that this hash is not validated, as the hashes for the individual blocks
    +     were validated when each was uploaded.
    +    :type blob_content_md5: bytearray
    +    :param blob_content_encoding: Optional. Sets the blob's content encoding.
    +     If specified, this property is stored with the blob and returned with a
    +     read request.
    +    :type blob_content_encoding: str
    +    :param blob_content_language: Optional. Set the blob's content language.
    +     If specified, this property is stored with the blob and returned with a
    +     read request.
    +    :type blob_content_language: str
    +    :param blob_content_disposition: Optional. Sets the blob's
    +     Content-Disposition header.
    +    :type blob_content_disposition: str
    +    """
    +
    +    _attribute_map = {
    +        'blob_cache_control': {'key': '', 'type': 'str', 'xml': {'name': 'blob_cache_control'}},
    +        'blob_content_type': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_type'}},
    +        'blob_content_md5': {'key': '', 'type': 'bytearray', 'xml': {'name': 'blob_content_md5'}},
    +        'blob_content_encoding': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_encoding'}},
    +        'blob_content_language': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_language'}},
    +        'blob_content_disposition': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_disposition'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, blob_cache_control: str=None, blob_content_type: str=None, blob_content_md5: bytearray=None, blob_content_encoding: str=None, blob_content_language: str=None, blob_content_disposition: str=None, **kwargs) -> None:
    +        super(BlobHTTPHeaders, self).__init__(**kwargs)
    +        self.blob_cache_control = blob_cache_control
    +        self.blob_content_type = blob_content_type
    +        self.blob_content_md5 = blob_content_md5
    +        self.blob_content_encoding = blob_content_encoding
    +        self.blob_content_language = blob_content_language
    +        self.blob_content_disposition = blob_content_disposition
    +
    +
    +class BlobItem(Model):
    +    """An Azure Storage blob.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required.
    +    :type name: str
    +    :param deleted: Required.
    +    :type deleted: bool
    +    :param snapshot: Required.
    +    :type snapshot: str
    +    :param properties: Required.
    +    :type properties: ~azure.storage.blob.models.BlobProperties
    +    :param metadata:
    +    :type metadata: ~azure.storage.blob.models.BlobMetadata
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'deleted': {'required': True},
    +        'snapshot': {'required': True},
    +        'properties': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +        'deleted': {'key': 'Deleted', 'type': 'bool', 'xml': {'name': 'Deleted'}},
    +        'snapshot': {'key': 'Snapshot', 'type': 'str', 'xml': {'name': 'Snapshot'}},
    +        'properties': {'key': 'Properties', 'type': 'BlobProperties', 'xml': {'name': 'Properties'}},
    +        'metadata': {'key': 'Metadata', 'type': 'BlobMetadata', 'xml': {'name': 'Metadata'}},
    +    }
    +    _xml_map = {
    +        'name': 'Blob'
    +    }
    +
    +    def __init__(self, *, name: str, deleted: bool, snapshot: str, properties, metadata=None, **kwargs) -> None:
    +        super(BlobItem, self).__init__(**kwargs)
    +        self.name = name
    +        self.deleted = deleted
    +        self.snapshot = snapshot
    +        self.properties = properties
    +        self.metadata = metadata
    +
    +
    +class BlobMetadata(Model):
    +    """BlobMetadata.
    +
    +    :param additional_properties: Unmatched properties from the message are
    +     deserialized this collection
    +    :type additional_properties: dict[str, str]
    +    :param encrypted:
    +    :type encrypted: str
    +    """
    +
    +    _attribute_map = {
    +        'additional_properties': {'key': '', 'type': '{str}', 'xml': {'name': 'additional_properties'}},
    +        'encrypted': {'key': 'Encrypted', 'type': 'str', 'xml': {'name': 'Encrypted', 'attr': True}},
    +    }
    +    _xml_map = {
    +        'name': 'Metadata'
    +    }
    +
    +    def __init__(self, *, additional_properties=None, encrypted: str=None, **kwargs) -> None:
    +        super(BlobMetadata, self).__init__(**kwargs)
    +        self.additional_properties = additional_properties
    +        self.encrypted = encrypted
    +
    +
    +class BlobPrefix(Model):
    +    """BlobPrefix.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required.
    +    :type name: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, name: str, **kwargs) -> None:
    +        super(BlobPrefix, self).__init__(**kwargs)
    +        self.name = name
    +
    +
    +class BlobProperties(Model):
    +    """Properties of a blob.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param creation_time:
    +    :type creation_time: datetime
    +    :param last_modified: Required.
    +    :type last_modified: datetime
    +    :param etag: Required.
    +    :type etag: str
    +    :param content_length: Size in bytes
    +    :type content_length: long
    +    :param content_type:
    +    :type content_type: str
    +    :param content_encoding:
    +    :type content_encoding: str
    +    :param content_language:
    +    :type content_language: str
    +    :param content_md5:
    +    :type content_md5: bytearray
    +    :param content_disposition:
    +    :type content_disposition: str
    +    :param cache_control:
    +    :type cache_control: str
    +    :param blob_sequence_number:
    +    :type blob_sequence_number: long
    +    :param blob_type: Possible values include: 'BlockBlob', 'PageBlob',
    +     'AppendBlob'
    +    :type blob_type: str or ~azure.storage.blob.models.BlobType
    +    :param lease_status: Possible values include: 'locked', 'unlocked'
    +    :type lease_status: str or ~azure.storage.blob.models.LeaseStatusType
    +    :param lease_state: Possible values include: 'available', 'leased',
    +     'expired', 'breaking', 'broken'
    +    :type lease_state: str or ~azure.storage.blob.models.LeaseStateType
    +    :param lease_duration: Possible values include: 'infinite', 'fixed'
    +    :type lease_duration: str or ~azure.storage.blob.models.LeaseDurationType
    +    :param copy_id:
    +    :type copy_id: str
    +    :param copy_status: Possible values include: 'pending', 'success',
    +     'aborted', 'failed'
    +    :type copy_status: str or ~azure.storage.blob.models.CopyStatusType
    +    :param copy_source:
    +    :type copy_source: str
    +    :param copy_progress:
    +    :type copy_progress: str
    +    :param copy_completion_time:
    +    :type copy_completion_time: datetime
    +    :param copy_status_description:
    +    :type copy_status_description: str
    +    :param server_encrypted:
    +    :type server_encrypted: bool
    +    :param incremental_copy:
    +    :type incremental_copy: bool
    +    :param destination_snapshot:
    +    :type destination_snapshot: str
    +    :param deleted_time:
    +    :type deleted_time: datetime
    +    :param remaining_retention_days:
    +    :type remaining_retention_days: int
    +    :param access_tier: Possible values include: 'P4', 'P6', 'P10', 'P15',
    +     'P20', 'P30', 'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +    :type access_tier: str or ~azure.storage.blob.models.AccessTier
    +    :param access_tier_inferred:
    +    :type access_tier_inferred: bool
    +    :param archive_status: Possible values include:
    +     'rehydrate-pending-to-hot', 'rehydrate-pending-to-cool'
    +    :type archive_status: str or ~azure.storage.blob.models.ArchiveStatus
    +    :param customer_provided_key_sha256:
    +    :type customer_provided_key_sha256: str
    +    :param encryption_scope: The name of the encryption scope under which the
    +     blob is encrypted.
    +    :type encryption_scope: str
    +    :param access_tier_change_time:
    +    :type access_tier_change_time: datetime
    +    """
    +
    +    _validation = {
    +        'last_modified': {'required': True},
    +        'etag': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'creation_time': {'key': 'Creation-Time', 'type': 'rfc-1123', 'xml': {'name': 'Creation-Time'}},
    +        'last_modified': {'key': 'Last-Modified', 'type': 'rfc-1123', 'xml': {'name': 'Last-Modified'}},
    +        'etag': {'key': 'Etag', 'type': 'str', 'xml': {'name': 'Etag'}},
    +        'content_length': {'key': 'Content-Length', 'type': 'long', 'xml': {'name': 'Content-Length'}},
    +        'content_type': {'key': 'Content-Type', 'type': 'str', 'xml': {'name': 'Content-Type'}},
    +        'content_encoding': {'key': 'Content-Encoding', 'type': 'str', 'xml': {'name': 'Content-Encoding'}},
    +        'content_language': {'key': 'Content-Language', 'type': 'str', 'xml': {'name': 'Content-Language'}},
    +        'content_md5': {'key': 'Content-MD5', 'type': 'bytearray', 'xml': {'name': 'Content-MD5'}},
    +        'content_disposition': {'key': 'Content-Disposition', 'type': 'str', 'xml': {'name': 'Content-Disposition'}},
    +        'cache_control': {'key': 'Cache-Control', 'type': 'str', 'xml': {'name': 'Cache-Control'}},
    +        'blob_sequence_number': {'key': 'x-ms-blob-sequence-number', 'type': 'long', 'xml': {'name': 'x-ms-blob-sequence-number'}},
    +        'blob_type': {'key': 'BlobType', 'type': 'BlobType', 'xml': {'name': 'BlobType'}},
    +        'lease_status': {'key': 'LeaseStatus', 'type': 'LeaseStatusType', 'xml': {'name': 'LeaseStatus'}},
    +        'lease_state': {'key': 'LeaseState', 'type': 'LeaseStateType', 'xml': {'name': 'LeaseState'}},
    +        'lease_duration': {'key': 'LeaseDuration', 'type': 'LeaseDurationType', 'xml': {'name': 'LeaseDuration'}},
    +        'copy_id': {'key': 'CopyId', 'type': 'str', 'xml': {'name': 'CopyId'}},
    +        'copy_status': {'key': 'CopyStatus', 'type': 'CopyStatusType', 'xml': {'name': 'CopyStatus'}},
    +        'copy_source': {'key': 'CopySource', 'type': 'str', 'xml': {'name': 'CopySource'}},
    +        'copy_progress': {'key': 'CopyProgress', 'type': 'str', 'xml': {'name': 'CopyProgress'}},
    +        'copy_completion_time': {'key': 'CopyCompletionTime', 'type': 'rfc-1123', 'xml': {'name': 'CopyCompletionTime'}},
    +        'copy_status_description': {'key': 'CopyStatusDescription', 'type': 'str', 'xml': {'name': 'CopyStatusDescription'}},
    +        'server_encrypted': {'key': 'ServerEncrypted', 'type': 'bool', 'xml': {'name': 'ServerEncrypted'}},
    +        'incremental_copy': {'key': 'IncrementalCopy', 'type': 'bool', 'xml': {'name': 'IncrementalCopy'}},
    +        'destination_snapshot': {'key': 'DestinationSnapshot', 'type': 'str', 'xml': {'name': 'DestinationSnapshot'}},
    +        'deleted_time': {'key': 'DeletedTime', 'type': 'rfc-1123', 'xml': {'name': 'DeletedTime'}},
    +        'remaining_retention_days': {'key': 'RemainingRetentionDays', 'type': 'int', 'xml': {'name': 'RemainingRetentionDays'}},
    +        'access_tier': {'key': 'AccessTier', 'type': 'str', 'xml': {'name': 'AccessTier'}},
    +        'access_tier_inferred': {'key': 'AccessTierInferred', 'type': 'bool', 'xml': {'name': 'AccessTierInferred'}},
    +        'archive_status': {'key': 'ArchiveStatus', 'type': 'str', 'xml': {'name': 'ArchiveStatus'}},
    +        'customer_provided_key_sha256': {'key': 'CustomerProvidedKeySha256', 'type': 'str', 'xml': {'name': 'CustomerProvidedKeySha256'}},
    +        'encryption_scope': {'key': 'EncryptionScope', 'type': 'str', 'xml': {'name': 'EncryptionScope'}},
    +        'access_tier_change_time': {'key': 'AccessTierChangeTime', 'type': 'rfc-1123', 'xml': {'name': 'AccessTierChangeTime'}},
    +    }
    +    _xml_map = {
    +        'name': 'Properties'
    +    }
    +
    +    def __init__(self, *, last_modified, etag: str, creation_time=None, content_length: int=None, content_type: str=None, content_encoding: str=None, content_language: str=None, content_md5: bytearray=None, content_disposition: str=None, cache_control: str=None, blob_sequence_number: int=None, blob_type=None, lease_status=None, lease_state=None, lease_duration=None, copy_id: str=None, copy_status=None, copy_source: str=None, copy_progress: str=None, copy_completion_time=None, copy_status_description: str=None, server_encrypted: bool=None, incremental_copy: bool=None, destination_snapshot: str=None, deleted_time=None, remaining_retention_days: int=None, access_tier=None, access_tier_inferred: bool=None, archive_status=None, customer_provided_key_sha256: str=None, encryption_scope: str=None, access_tier_change_time=None, **kwargs) -> None:
    +        super(BlobProperties, self).__init__(**kwargs)
    +        self.creation_time = creation_time
    +        self.last_modified = last_modified
    +        self.etag = etag
    +        self.content_length = content_length
    +        self.content_type = content_type
    +        self.content_encoding = content_encoding
    +        self.content_language = content_language
    +        self.content_md5 = content_md5
    +        self.content_disposition = content_disposition
    +        self.cache_control = cache_control
    +        self.blob_sequence_number = blob_sequence_number
    +        self.blob_type = blob_type
    +        self.lease_status = lease_status
    +        self.lease_state = lease_state
    +        self.lease_duration = lease_duration
    +        self.copy_id = copy_id
    +        self.copy_status = copy_status
    +        self.copy_source = copy_source
    +        self.copy_progress = copy_progress
    +        self.copy_completion_time = copy_completion_time
    +        self.copy_status_description = copy_status_description
    +        self.server_encrypted = server_encrypted
    +        self.incremental_copy = incremental_copy
    +        self.destination_snapshot = destination_snapshot
    +        self.deleted_time = deleted_time
    +        self.remaining_retention_days = remaining_retention_days
    +        self.access_tier = access_tier
    +        self.access_tier_inferred = access_tier_inferred
    +        self.archive_status = archive_status
    +        self.customer_provided_key_sha256 = customer_provided_key_sha256
    +        self.encryption_scope = encryption_scope
    +        self.access_tier_change_time = access_tier_change_time
    +
    +
    +class Block(Model):
    +    """Represents a single block in a block blob.  It describes the block's ID and
    +    size.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The base64 encoded block ID.
    +    :type name: str
    +    :param size: Required. The block size in bytes.
    +    :type size: int
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'size': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +        'size': {'key': 'Size', 'type': 'int', 'xml': {'name': 'Size'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, name: str, size: int, **kwargs) -> None:
    +        super(Block, self).__init__(**kwargs)
    +        self.name = name
    +        self.size = size
    +
    +
    +class BlockList(Model):
    +    """BlockList.
    +
    +    :param committed_blocks:
    +    :type committed_blocks: list[~azure.storage.blob.models.Block]
    +    :param uncommitted_blocks:
    +    :type uncommitted_blocks: list[~azure.storage.blob.models.Block]
    +    """
    +
    +    _attribute_map = {
    +        'committed_blocks': {'key': 'CommittedBlocks', 'type': '[Block]', 'xml': {'name': 'CommittedBlocks', 'itemsName': 'Block', 'wrapped': True}},
    +        'uncommitted_blocks': {'key': 'UncommittedBlocks', 'type': '[Block]', 'xml': {'name': 'UncommittedBlocks', 'itemsName': 'Block', 'wrapped': True}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, committed_blocks=None, uncommitted_blocks=None, **kwargs) -> None:
    +        super(BlockList, self).__init__(**kwargs)
    +        self.committed_blocks = committed_blocks
    +        self.uncommitted_blocks = uncommitted_blocks
    +
    +
    +class BlockLookupList(Model):
    +    """BlockLookupList.
    +
    +    :param committed:
    +    :type committed: list[str]
    +    :param uncommitted:
    +    :type uncommitted: list[str]
    +    :param latest:
    +    :type latest: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'committed': {'key': 'Committed', 'type': '[str]', 'xml': {'name': 'Committed', 'itemsName': 'Committed'}},
    +        'uncommitted': {'key': 'Uncommitted', 'type': '[str]', 'xml': {'name': 'Uncommitted', 'itemsName': 'Uncommitted'}},
    +        'latest': {'key': 'Latest', 'type': '[str]', 'xml': {'name': 'Latest', 'itemsName': 'Latest'}},
    +    }
    +    _xml_map = {
    +        'name': 'BlockList'
    +    }
    +
    +    def __init__(self, *, committed=None, uncommitted=None, latest=None, **kwargs) -> None:
    +        super(BlockLookupList, self).__init__(**kwargs)
    +        self.committed = committed
    +        self.uncommitted = uncommitted
    +        self.latest = latest
    +
    +
    +class ClearRange(Model):
    +    """ClearRange.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required.
    +    :type start: long
    +    :param end: Required.
    +    :type end: long
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'end': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'long', 'xml': {'name': 'Start'}},
    +        'end': {'key': 'End', 'type': 'long', 'xml': {'name': 'End'}},
    +    }
    +    _xml_map = {
    +        'name': 'ClearRange'
    +    }
    +
    +    def __init__(self, *, start: int, end: int, **kwargs) -> None:
    +        super(ClearRange, self).__init__(**kwargs)
    +        self.start = start
    +        self.end = end
    +
    +
    +class ContainerCpkScopeInfo(Model):
    +    """Additional parameters for create operation.
    +
    +    :param default_encryption_scope: Optional.  Version 2019-07-07 and later.
    +     Specifies the default encryption scope to set on the container and use for
    +     all future writes.
    +    :type default_encryption_scope: str
    +    :param deny_encryption_scope_override: Optional.  Version 2019-07-07 and
    +     newer.  If true, prevents any request from specifying a different
    +     encryption scope than the scope set on the container.
    +    :type deny_encryption_scope_override: bool
    +    """
    +
    +    _attribute_map = {
    +        'default_encryption_scope': {'key': '', 'type': 'str', 'xml': {'name': 'default_encryption_scope'}},
    +        'deny_encryption_scope_override': {'key': '', 'type': 'bool', 'xml': {'name': 'deny_encryption_scope_override'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, default_encryption_scope: str=None, deny_encryption_scope_override: bool=None, **kwargs) -> None:
    +        super(ContainerCpkScopeInfo, self).__init__(**kwargs)
    +        self.default_encryption_scope = default_encryption_scope
    +        self.deny_encryption_scope_override = deny_encryption_scope_override
    +
    +
    +class ContainerItem(Model):
    +    """An Azure Storage container.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required.
    +    :type name: str
    +    :param properties: Required.
    +    :type properties: ~azure.storage.blob.models.ContainerProperties
    +    :param metadata:
    +    :type metadata: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'properties': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +        'properties': {'key': 'Properties', 'type': 'ContainerProperties', 'xml': {'name': 'Properties'}},
    +        'metadata': {'key': 'Metadata', 'type': '{str}', 'xml': {'name': 'Metadata'}},
    +    }
    +    _xml_map = {
    +        'name': 'Container'
    +    }
    +
    +    def __init__(self, *, name: str, properties, metadata=None, **kwargs) -> None:
    +        super(ContainerItem, self).__init__(**kwargs)
    +        self.name = name
    +        self.properties = properties
    +        self.metadata = metadata
    +
    +
    +class ContainerProperties(Model):
    +    """Properties of a container.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param last_modified: Required.
    +    :type last_modified: datetime
    +    :param etag: Required.
    +    :type etag: str
    +    :param lease_status: Possible values include: 'locked', 'unlocked'
    +    :type lease_status: str or ~azure.storage.blob.models.LeaseStatusType
    +    :param lease_state: Possible values include: 'available', 'leased',
    +     'expired', 'breaking', 'broken'
    +    :type lease_state: str or ~azure.storage.blob.models.LeaseStateType
    +    :param lease_duration: Possible values include: 'infinite', 'fixed'
    +    :type lease_duration: str or ~azure.storage.blob.models.LeaseDurationType
    +    :param public_access: Possible values include: 'container', 'blob'
    +    :type public_access: str or ~azure.storage.blob.models.PublicAccessType
    +    :param has_immutability_policy:
    +    :type has_immutability_policy: bool
    +    :param has_legal_hold:
    +    :type has_legal_hold: bool
    +    :param default_encryption_scope:
    +    :type default_encryption_scope: str
    +    :param deny_encryption_scope_override:
    +    :type deny_encryption_scope_override: bool
    +    """
    +
    +    _validation = {
    +        'last_modified': {'required': True},
    +        'etag': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'last_modified': {'key': 'Last-Modified', 'type': 'rfc-1123', 'xml': {'name': 'Last-Modified'}},
    +        'etag': {'key': 'Etag', 'type': 'str', 'xml': {'name': 'Etag'}},
    +        'lease_status': {'key': 'LeaseStatus', 'type': 'LeaseStatusType', 'xml': {'name': 'LeaseStatus'}},
    +        'lease_state': {'key': 'LeaseState', 'type': 'LeaseStateType', 'xml': {'name': 'LeaseState'}},
    +        'lease_duration': {'key': 'LeaseDuration', 'type': 'LeaseDurationType', 'xml': {'name': 'LeaseDuration'}},
    +        'public_access': {'key': 'PublicAccess', 'type': 'str', 'xml': {'name': 'PublicAccess'}},
    +        'has_immutability_policy': {'key': 'HasImmutabilityPolicy', 'type': 'bool', 'xml': {'name': 'HasImmutabilityPolicy'}},
    +        'has_legal_hold': {'key': 'HasLegalHold', 'type': 'bool', 'xml': {'name': 'HasLegalHold'}},
    +        'default_encryption_scope': {'key': 'DefaultEncryptionScope', 'type': 'str', 'xml': {'name': 'DefaultEncryptionScope'}},
    +        'deny_encryption_scope_override': {'key': 'DenyEncryptionScopeOverride', 'type': 'bool', 'xml': {'name': 'DenyEncryptionScopeOverride'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, last_modified, etag: str, lease_status=None, lease_state=None, lease_duration=None, public_access=None, has_immutability_policy: bool=None, has_legal_hold: bool=None, default_encryption_scope: str=None, deny_encryption_scope_override: bool=None, **kwargs) -> None:
    +        super(ContainerProperties, self).__init__(**kwargs)
    +        self.last_modified = last_modified
    +        self.etag = etag
    +        self.lease_status = lease_status
    +        self.lease_state = lease_state
    +        self.lease_duration = lease_duration
    +        self.public_access = public_access
    +        self.has_immutability_policy = has_immutability_policy
    +        self.has_legal_hold = has_legal_hold
    +        self.default_encryption_scope = default_encryption_scope
    +        self.deny_encryption_scope_override = deny_encryption_scope_override
    +
    +
    +class CorsRule(Model):
    +    """CORS is an HTTP feature that enables a web application running under one
    +    domain to access resources in another domain. Web browsers implement a
    +    security restriction known as same-origin policy that prevents a web page
    +    from calling APIs in a different domain; CORS provides a secure way to
    +    allow one domain (the origin domain) to call APIs in another domain.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param allowed_origins: Required. The origin domains that are permitted to
    +     make a request against the storage service via CORS. The origin domain is
    +     the domain from which the request originates. Note that the origin must be
    +     an exact case-sensitive match with the origin that the user age sends to
    +     the service. You can also use the wildcard character '*' to allow all
    +     origin domains to make requests via CORS.
    +    :type allowed_origins: str
    +    :param allowed_methods: Required. The methods (HTTP request verbs) that
    +     the origin domain may use for a CORS request. (comma separated)
    +    :type allowed_methods: str
    +    :param allowed_headers: Required. the request headers that the origin
    +     domain may specify on the CORS request.
    +    :type allowed_headers: str
    +    :param exposed_headers: Required. The response headers that may be sent in
    +     the response to the CORS request and exposed by the browser to the request
    +     issuer
    +    :type exposed_headers: str
    +    :param max_age_in_seconds: Required. The maximum amount time that a
    +     browser should cache the preflight OPTIONS request.
    +    :type max_age_in_seconds: int
    +    """
    +
    +    _validation = {
    +        'allowed_origins': {'required': True},
    +        'allowed_methods': {'required': True},
    +        'allowed_headers': {'required': True},
    +        'exposed_headers': {'required': True},
    +        'max_age_in_seconds': {'required': True, 'minimum': 0},
    +    }
    +
    +    _attribute_map = {
    +        'allowed_origins': {'key': 'AllowedOrigins', 'type': 'str', 'xml': {'name': 'AllowedOrigins'}},
    +        'allowed_methods': {'key': 'AllowedMethods', 'type': 'str', 'xml': {'name': 'AllowedMethods'}},
    +        'allowed_headers': {'key': 'AllowedHeaders', 'type': 'str', 'xml': {'name': 'AllowedHeaders'}},
    +        'exposed_headers': {'key': 'ExposedHeaders', 'type': 'str', 'xml': {'name': 'ExposedHeaders'}},
    +        'max_age_in_seconds': {'key': 'MaxAgeInSeconds', 'type': 'int', 'xml': {'name': 'MaxAgeInSeconds'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, allowed_origins: str, allowed_methods: str, allowed_headers: str, exposed_headers: str, max_age_in_seconds: int, **kwargs) -> None:
    +        super(CorsRule, self).__init__(**kwargs)
    +        self.allowed_origins = allowed_origins
    +        self.allowed_methods = allowed_methods
    +        self.allowed_headers = allowed_headers
    +        self.exposed_headers = exposed_headers
    +        self.max_age_in_seconds = max_age_in_seconds
    +
    +
    +class CpkInfo(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param encryption_key: Optional. Specifies the encryption key to use to
    +     encrypt the data provided in the request. If not specified, encryption is
    +     performed with the root account encryption key.  For more information, see
    +     Encryption at Rest for Azure Storage Services.
    +    :type encryption_key: str
    +    :param encryption_key_sha256: The SHA-256 hash of the provided encryption
    +     key. Must be provided if the x-ms-encryption-key header is provided.
    +    :type encryption_key_sha256: str
    +    :param encryption_algorithm: The algorithm used to produce the encryption
    +     key hash. Currently, the only accepted value is "AES256". Must be provided
    +     if the x-ms-encryption-key header is provided. Possible values include:
    +     'AES256'
    +    :type encryption_algorithm: str or
    +     ~azure.storage.blob.models.EncryptionAlgorithmType
    +    """
    +
    +    _attribute_map = {
    +        'encryption_key': {'key': '', 'type': 'str', 'xml': {'name': 'encryption_key'}},
    +        'encryption_key_sha256': {'key': '', 'type': 'str', 'xml': {'name': 'encryption_key_sha256'}},
    +        'encryption_algorithm': {'key': '', 'type': 'EncryptionAlgorithmType', 'xml': {'name': 'encryption_algorithm'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, encryption_key: str=None, encryption_key_sha256: str=None, encryption_algorithm=None, **kwargs) -> None:
    +        super(CpkInfo, self).__init__(**kwargs)
    +        self.encryption_key = encryption_key
    +        self.encryption_key_sha256 = encryption_key_sha256
    +        self.encryption_algorithm = encryption_algorithm
    +
    +
    +class CpkScopeInfo(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param encryption_scope: Optional. Version 2019-07-07 and later.
    +     Specifies the name of the encryption scope to use to encrypt the data
    +     provided in the request. If not specified, encryption is performed with
    +     the default account encryption scope.  For more information, see
    +     Encryption at Rest for Azure Storage Services.
    +    :type encryption_scope: str
    +    """
    +
    +    _attribute_map = {
    +        'encryption_scope': {'key': '', 'type': 'str', 'xml': {'name': 'encryption_scope'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, encryption_scope: str=None, **kwargs) -> None:
    +        super(CpkScopeInfo, self).__init__(**kwargs)
    +        self.encryption_scope = encryption_scope
    +
    +
    +class DataLakeStorageError(Model):
    +    """DataLakeStorageError.
    +
    +    :param error: The service error response object.
    +    :type error: ~azure.storage.blob.models.DataLakeStorageErrorError
    +    """
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'DataLakeStorageErrorError', 'xml': {'name': 'error'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, error=None, **kwargs) -> None:
    +        super(DataLakeStorageError, self).__init__(**kwargs)
    +        self.error = error
    +
    +
    +class DataLakeStorageErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'DataLakeStorageError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'DataLakeStorageError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(DataLakeStorageErrorException, self).__init__(response=response)
    +
    +
    +class DataLakeStorageErrorError(Model):
    +    """The service error response object.
    +
    +    :param code: The service error code.
    +    :type code: str
    +    :param message: The service error message.
    +    :type message: str
    +    """
    +
    +    _attribute_map = {
    +        'code': {'key': 'Code', 'type': 'str', 'xml': {'name': 'Code'}},
    +        'message': {'key': 'Message', 'type': 'str', 'xml': {'name': 'Message'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, code: str=None, message: str=None, **kwargs) -> None:
    +        super(DataLakeStorageErrorError, self).__init__(**kwargs)
    +        self.code = code
    +        self.message = message
    +
    +
    +class DirectoryHttpHeaders(Model):
    +    """Additional parameters for a set of operations, such as: Directory_create,
    +    Directory_rename, Blob_rename.
    +
    +    :param cache_control: Cache control for given resource
    +    :type cache_control: str
    +    :param content_type: Content type for given resource
    +    :type content_type: str
    +    :param content_encoding: Content encoding for given resource
    +    :type content_encoding: str
    +    :param content_language: Content language for given resource
    +    :type content_language: str
    +    :param content_disposition: Content disposition for given resource
    +    :type content_disposition: str
    +    """
    +
    +    _attribute_map = {
    +        'cache_control': {'key': '', 'type': 'str', 'xml': {'name': 'cache_control'}},
    +        'content_type': {'key': '', 'type': 'str', 'xml': {'name': 'content_type'}},
    +        'content_encoding': {'key': '', 'type': 'str', 'xml': {'name': 'content_encoding'}},
    +        'content_language': {'key': '', 'type': 'str', 'xml': {'name': 'content_language'}},
    +        'content_disposition': {'key': '', 'type': 'str', 'xml': {'name': 'content_disposition'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, cache_control: str=None, content_type: str=None, content_encoding: str=None, content_language: str=None, content_disposition: str=None, **kwargs) -> None:
    +        super(DirectoryHttpHeaders, self).__init__(**kwargs)
    +        self.cache_control = cache_control
    +        self.content_type = content_type
    +        self.content_encoding = content_encoding
    +        self.content_language = content_language
    +        self.content_disposition = content_disposition
    +
    +
    +class GeoReplication(Model):
    +    """Geo-Replication information for the Secondary Storage Service.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param status: Required. The status of the secondary location. Possible
    +     values include: 'live', 'bootstrap', 'unavailable'
    +    :type status: str or ~azure.storage.blob.models.GeoReplicationStatusType
    +    :param last_sync_time: Required. A GMT date/time value, to the second. All
    +     primary writes preceding this value are guaranteed to be available for
    +     read operations at the secondary. Primary writes after this point in time
    +     may or may not be available for reads.
    +    :type last_sync_time: datetime
    +    """
    +
    +    _validation = {
    +        'status': {'required': True},
    +        'last_sync_time': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'status': {'key': 'Status', 'type': 'str', 'xml': {'name': 'Status'}},
    +        'last_sync_time': {'key': 'LastSyncTime', 'type': 'rfc-1123', 'xml': {'name': 'LastSyncTime'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, status, last_sync_time, **kwargs) -> None:
    +        super(GeoReplication, self).__init__(**kwargs)
    +        self.status = status
    +        self.last_sync_time = last_sync_time
    +
    +
    +class KeyInfo(Model):
    +    """Key information.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required. The date-time the key is active in ISO 8601 UTC
    +     time
    +    :type start: str
    +    :param expiry: Required. The date-time the key expires in ISO 8601 UTC
    +     time
    +    :type expiry: str
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'expiry': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'str', 'xml': {'name': 'Start'}},
    +        'expiry': {'key': 'Expiry', 'type': 'str', 'xml': {'name': 'Expiry'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, start: str, expiry: str, **kwargs) -> None:
    +        super(KeyInfo, self).__init__(**kwargs)
    +        self.start = start
    +        self.expiry = expiry
    +
    +
    +class LeaseAccessConditions(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param lease_id: If specified, the operation only succeeds if the
    +     resource's lease is active and matches this ID.
    +    :type lease_id: str
    +    """
    +
    +    _attribute_map = {
    +        'lease_id': {'key': '', 'type': 'str', 'xml': {'name': 'lease_id'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, lease_id: str=None, **kwargs) -> None:
    +        super(LeaseAccessConditions, self).__init__(**kwargs)
    +        self.lease_id = lease_id
    +
    +
    +class ListBlobsFlatSegmentResponse(Model):
    +    """An enumeration of blobs.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param service_endpoint: Required.
    +    :type service_endpoint: str
    +    :param container_name: Required.
    +    :type container_name: str
    +    :param prefix:
    +    :type prefix: str
    +    :param marker:
    +    :type marker: str
    +    :param max_results:
    +    :type max_results: int
    +    :param segment: Required.
    +    :type segment: ~azure.storage.blob.models.BlobFlatListSegment
    +    :param next_marker:
    +    :type next_marker: str
    +    """
    +
    +    _validation = {
    +        'service_endpoint': {'required': True},
    +        'container_name': {'required': True},
    +        'segment': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}},
    +        'container_name': {'key': 'ContainerName', 'type': 'str', 'xml': {'name': 'ContainerName', 'attr': True}},
    +        'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}},
    +        'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}},
    +        'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}},
    +        'segment': {'key': 'Segment', 'type': 'BlobFlatListSegment', 'xml': {'name': 'Segment'}},
    +        'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}},
    +    }
    +    _xml_map = {
    +        'name': 'EnumerationResults'
    +    }
    +
    +    def __init__(self, *, service_endpoint: str, container_name: str, segment, prefix: str=None, marker: str=None, max_results: int=None, next_marker: str=None, **kwargs) -> None:
    +        super(ListBlobsFlatSegmentResponse, self).__init__(**kwargs)
    +        self.service_endpoint = service_endpoint
    +        self.container_name = container_name
    +        self.prefix = prefix
    +        self.marker = marker
    +        self.max_results = max_results
    +        self.segment = segment
    +        self.next_marker = next_marker
    +
    +
    +class ListBlobsHierarchySegmentResponse(Model):
    +    """An enumeration of blobs.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param service_endpoint: Required.
    +    :type service_endpoint: str
    +    :param container_name: Required.
    +    :type container_name: str
    +    :param prefix:
    +    :type prefix: str
    +    :param marker:
    +    :type marker: str
    +    :param max_results:
    +    :type max_results: int
    +    :param delimiter:
    +    :type delimiter: str
    +    :param segment: Required.
    +    :type segment: ~azure.storage.blob.models.BlobHierarchyListSegment
    +    :param next_marker:
    +    :type next_marker: str
    +    """
    +
    +    _validation = {
    +        'service_endpoint': {'required': True},
    +        'container_name': {'required': True},
    +        'segment': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}},
    +        'container_name': {'key': 'ContainerName', 'type': 'str', 'xml': {'name': 'ContainerName', 'attr': True}},
    +        'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}},
    +        'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}},
    +        'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}},
    +        'delimiter': {'key': 'Delimiter', 'type': 'str', 'xml': {'name': 'Delimiter'}},
    +        'segment': {'key': 'Segment', 'type': 'BlobHierarchyListSegment', 'xml': {'name': 'Segment'}},
    +        'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}},
    +    }
    +    _xml_map = {
    +        'name': 'EnumerationResults'
    +    }
    +
    +    def __init__(self, *, service_endpoint: str, container_name: str, segment, prefix: str=None, marker: str=None, max_results: int=None, delimiter: str=None, next_marker: str=None, **kwargs) -> None:
    +        super(ListBlobsHierarchySegmentResponse, self).__init__(**kwargs)
    +        self.service_endpoint = service_endpoint
    +        self.container_name = container_name
    +        self.prefix = prefix
    +        self.marker = marker
    +        self.max_results = max_results
    +        self.delimiter = delimiter
    +        self.segment = segment
    +        self.next_marker = next_marker
    +
    +
    +class ListContainersSegmentResponse(Model):
    +    """An enumeration of containers.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param service_endpoint: Required.
    +    :type service_endpoint: str
    +    :param prefix:
    +    :type prefix: str
    +    :param marker:
    +    :type marker: str
    +    :param max_results:
    +    :type max_results: int
    +    :param container_items: Required.
    +    :type container_items: list[~azure.storage.blob.models.ContainerItem]
    +    :param next_marker:
    +    :type next_marker: str
    +    """
    +
    +    _validation = {
    +        'service_endpoint': {'required': True},
    +        'container_items': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}},
    +        'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}},
    +        'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}},
    +        'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}},
    +        'container_items': {'key': 'ContainerItems', 'type': '[ContainerItem]', 'xml': {'name': 'Containers', 'itemsName': 'Containers', 'wrapped': True}},
    +        'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}},
    +    }
    +    _xml_map = {
    +        'name': 'EnumerationResults'
    +    }
    +
    +    def __init__(self, *, service_endpoint: str, container_items, prefix: str=None, marker: str=None, max_results: int=None, next_marker: str=None, **kwargs) -> None:
    +        super(ListContainersSegmentResponse, self).__init__(**kwargs)
    +        self.service_endpoint = service_endpoint
    +        self.prefix = prefix
    +        self.marker = marker
    +        self.max_results = max_results
    +        self.container_items = container_items
    +        self.next_marker = next_marker
    +
    +
    +class Logging(Model):
    +    """Azure Analytics Logging settings.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param version: Required. The version of Storage Analytics to configure.
    +    :type version: str
    +    :param delete: Required. Indicates whether all delete requests should be
    +     logged.
    +    :type delete: bool
    +    :param read: Required. Indicates whether all read requests should be
    +     logged.
    +    :type read: bool
    +    :param write: Required. Indicates whether all write requests should be
    +     logged.
    +    :type write: bool
    +    :param retention_policy: Required.
    +    :type retention_policy: ~azure.storage.blob.models.RetentionPolicy
    +    """
    +
    +    _validation = {
    +        'version': {'required': True},
    +        'delete': {'required': True},
    +        'read': {'required': True},
    +        'write': {'required': True},
    +        'retention_policy': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'version': {'key': 'Version', 'type': 'str', 'xml': {'name': 'Version'}},
    +        'delete': {'key': 'Delete', 'type': 'bool', 'xml': {'name': 'Delete'}},
    +        'read': {'key': 'Read', 'type': 'bool', 'xml': {'name': 'Read'}},
    +        'write': {'key': 'Write', 'type': 'bool', 'xml': {'name': 'Write'}},
    +        'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'RetentionPolicy'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, version: str, delete: bool, read: bool, write: bool, retention_policy, **kwargs) -> None:
    +        super(Logging, self).__init__(**kwargs)
    +        self.version = version
    +        self.delete = delete
    +        self.read = read
    +        self.write = write
    +        self.retention_policy = retention_policy
    +
    +
    +class Metrics(Model):
    +    """a summary of request statistics grouped by API in hour or minute aggregates
    +    for blobs.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param version: The version of Storage Analytics to configure.
    +    :type version: str
    +    :param enabled: Required. Indicates whether metrics are enabled for the
    +     Blob service.
    +    :type enabled: bool
    +    :param include_apis: Indicates whether metrics should generate summary
    +     statistics for called API operations.
    +    :type include_apis: bool
    +    :param retention_policy:
    +    :type retention_policy: ~azure.storage.blob.models.RetentionPolicy
    +    """
    +
    +    _validation = {
    +        'enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'version': {'key': 'Version', 'type': 'str', 'xml': {'name': 'Version'}},
    +        'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}},
    +        'include_apis': {'key': 'IncludeAPIs', 'type': 'bool', 'xml': {'name': 'IncludeAPIs'}},
    +        'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'RetentionPolicy'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, enabled: bool, version: str=None, include_apis: bool=None, retention_policy=None, **kwargs) -> None:
    +        super(Metrics, self).__init__(**kwargs)
    +        self.version = version
    +        self.enabled = enabled
    +        self.include_apis = include_apis
    +        self.retention_policy = retention_policy
    +
    +
    +class ModifiedAccessConditions(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param if_modified_since: Specify this header value to operate only on a
    +     blob if it has been modified since the specified date/time.
    +    :type if_modified_since: datetime
    +    :param if_unmodified_since: Specify this header value to operate only on a
    +     blob if it has not been modified since the specified date/time.
    +    :type if_unmodified_since: datetime
    +    :param if_match: Specify an ETag value to operate only on blobs with a
    +     matching value.
    +    :type if_match: str
    +    :param if_none_match: Specify an ETag value to operate only on blobs
    +     without a matching value.
    +    :type if_none_match: str
    +    """
    +
    +    _attribute_map = {
    +        'if_modified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'if_modified_since'}},
    +        'if_unmodified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'if_unmodified_since'}},
    +        'if_match': {'key': '', 'type': 'str', 'xml': {'name': 'if_match'}},
    +        'if_none_match': {'key': '', 'type': 'str', 'xml': {'name': 'if_none_match'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, if_modified_since=None, if_unmodified_since=None, if_match: str=None, if_none_match: str=None, **kwargs) -> None:
    +        super(ModifiedAccessConditions, self).__init__(**kwargs)
    +        self.if_modified_since = if_modified_since
    +        self.if_unmodified_since = if_unmodified_since
    +        self.if_match = if_match
    +        self.if_none_match = if_none_match
    +
    +
    +class PageList(Model):
    +    """the list of pages.
    +
    +    :param page_range:
    +    :type page_range: list[~azure.storage.blob.models.PageRange]
    +    :param clear_range:
    +    :type clear_range: list[~azure.storage.blob.models.ClearRange]
    +    """
    +
    +    _attribute_map = {
    +        'page_range': {'key': 'PageRange', 'type': '[PageRange]', 'xml': {'name': 'PageRange', 'itemsName': 'PageRange'}},
    +        'clear_range': {'key': 'ClearRange', 'type': '[ClearRange]', 'xml': {'name': 'ClearRange', 'itemsName': 'ClearRange'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, page_range=None, clear_range=None, **kwargs) -> None:
    +        super(PageList, self).__init__(**kwargs)
    +        self.page_range = page_range
    +        self.clear_range = clear_range
    +
    +
    +class PageRange(Model):
    +    """PageRange.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required.
    +    :type start: long
    +    :param end: Required.
    +    :type end: long
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'end': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'long', 'xml': {'name': 'Start'}},
    +        'end': {'key': 'End', 'type': 'long', 'xml': {'name': 'End'}},
    +    }
    +    _xml_map = {
    +        'name': 'PageRange'
    +    }
    +
    +    def __init__(self, *, start: int, end: int, **kwargs) -> None:
    +        super(PageRange, self).__init__(**kwargs)
    +        self.start = start
    +        self.end = end
    +
    +
    +class RetentionPolicy(Model):
    +    """the retention policy which determines how long the associated data should
    +    persist.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param enabled: Required. Indicates whether a retention policy is enabled
    +     for the storage service
    +    :type enabled: bool
    +    :param days: Indicates the number of days that metrics or logging or
    +     soft-deleted data should be retained. All data older than this value will
    +     be deleted
    +    :type days: int
    +    """
    +
    +    _validation = {
    +        'enabled': {'required': True},
    +        'days': {'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}},
    +        'days': {'key': 'Days', 'type': 'int', 'xml': {'name': 'Days'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, enabled: bool, days: int=None, **kwargs) -> None:
    +        super(RetentionPolicy, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.days = days
    +
    +
    +class SequenceNumberAccessConditions(Model):
    +    """Additional parameters for a set of operations, such as:
    +    PageBlob_upload_pages, PageBlob_clear_pages,
    +    PageBlob_upload_pages_from_url.
    +
    +    :param if_sequence_number_less_than_or_equal_to: Specify this header value
    +     to operate only on a blob if it has a sequence number less than or equal
    +     to the specified.
    +    :type if_sequence_number_less_than_or_equal_to: long
    +    :param if_sequence_number_less_than: Specify this header value to operate
    +     only on a blob if it has a sequence number less than the specified.
    +    :type if_sequence_number_less_than: long
    +    :param if_sequence_number_equal_to: Specify this header value to operate
    +     only on a blob if it has the specified sequence number.
    +    :type if_sequence_number_equal_to: long
    +    """
    +
    +    _attribute_map = {
    +        'if_sequence_number_less_than_or_equal_to': {'key': '', 'type': 'long', 'xml': {'name': 'if_sequence_number_less_than_or_equal_to'}},
    +        'if_sequence_number_less_than': {'key': '', 'type': 'long', 'xml': {'name': 'if_sequence_number_less_than'}},
    +        'if_sequence_number_equal_to': {'key': '', 'type': 'long', 'xml': {'name': 'if_sequence_number_equal_to'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, if_sequence_number_less_than_or_equal_to: int=None, if_sequence_number_less_than: int=None, if_sequence_number_equal_to: int=None, **kwargs) -> None:
    +        super(SequenceNumberAccessConditions, self).__init__(**kwargs)
    +        self.if_sequence_number_less_than_or_equal_to = if_sequence_number_less_than_or_equal_to
    +        self.if_sequence_number_less_than = if_sequence_number_less_than
    +        self.if_sequence_number_equal_to = if_sequence_number_equal_to
    +
    +
    +class SignedIdentifier(Model):
    +    """signed identifier.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param id: Required. a unique id
    +    :type id: str
    +    :param access_policy:
    +    :type access_policy: ~azure.storage.blob.models.AccessPolicy
    +    """
    +
    +    _validation = {
    +        'id': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'Id', 'type': 'str', 'xml': {'name': 'Id'}},
    +        'access_policy': {'key': 'AccessPolicy', 'type': 'AccessPolicy', 'xml': {'name': 'AccessPolicy'}},
    +    }
    +    _xml_map = {
    +        'name': 'SignedIdentifier'
    +    }
    +
    +    def __init__(self, *, id: str, access_policy=None, **kwargs) -> None:
    +        super(SignedIdentifier, self).__init__(**kwargs)
    +        self.id = id
    +        self.access_policy = access_policy
    +
    +
    +class SourceModifiedAccessConditions(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param source_if_modified_since: Specify this header value to operate only
    +     on a blob if it has been modified since the specified date/time.
    +    :type source_if_modified_since: datetime
    +    :param source_if_unmodified_since: Specify this header value to operate
    +     only on a blob if it has not been modified since the specified date/time.
    +    :type source_if_unmodified_since: datetime
    +    :param source_if_match: Specify an ETag value to operate only on blobs
    +     with a matching value.
    +    :type source_if_match: str
    +    :param source_if_none_match: Specify an ETag value to operate only on
    +     blobs without a matching value.
    +    :type source_if_none_match: str
    +    """
    +
    +    _attribute_map = {
    +        'source_if_modified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'source_if_modified_since'}},
    +        'source_if_unmodified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'source_if_unmodified_since'}},
    +        'source_if_match': {'key': '', 'type': 'str', 'xml': {'name': 'source_if_match'}},
    +        'source_if_none_match': {'key': '', 'type': 'str', 'xml': {'name': 'source_if_none_match'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, source_if_modified_since=None, source_if_unmodified_since=None, source_if_match: str=None, source_if_none_match: str=None, **kwargs) -> None:
    +        super(SourceModifiedAccessConditions, self).__init__(**kwargs)
    +        self.source_if_modified_since = source_if_modified_since
    +        self.source_if_unmodified_since = source_if_unmodified_since
    +        self.source_if_match = source_if_match
    +        self.source_if_none_match = source_if_none_match
    +
    +
    +class StaticWebsite(Model):
    +    """The properties that enable an account to host a static website.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param enabled: Required. Indicates whether this account is hosting a
    +     static website
    +    :type enabled: bool
    +    :param index_document: The default name of the index page under each
    +     directory
    +    :type index_document: str
    +    :param error_document404_path: The absolute path of the custom 404 page
    +    :type error_document404_path: str
    +    """
    +
    +    _validation = {
    +        'enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}},
    +        'index_document': {'key': 'IndexDocument', 'type': 'str', 'xml': {'name': 'IndexDocument'}},
    +        'error_document404_path': {'key': 'ErrorDocument404Path', 'type': 'str', 'xml': {'name': 'ErrorDocument404Path'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, enabled: bool, index_document: str=None, error_document404_path: str=None, **kwargs) -> None:
    +        super(StaticWebsite, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.index_document = index_document
    +        self.error_document404_path = error_document404_path
    +
    +
    +class StorageError(Model):
    +    """StorageError.
    +
    +    :param message:
    +    :type message: str
    +    """
    +
    +    _attribute_map = {
    +        'message': {'key': 'Message', 'type': 'str', 'xml': {'name': 'Message'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, message: str=None, **kwargs) -> None:
    +        super(StorageError, self).__init__(**kwargs)
    +        self.message = message
    +
    +
    +class StorageErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'StorageError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'StorageError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(StorageErrorException, self).__init__(response=response)
    +
    +
    +class StorageServiceProperties(Model):
    +    """Storage Service Properties.
    +
    +    :param logging:
    +    :type logging: ~azure.storage.blob.models.Logging
    +    :param hour_metrics:
    +    :type hour_metrics: ~azure.storage.blob.models.Metrics
    +    :param minute_metrics:
    +    :type minute_metrics: ~azure.storage.blob.models.Metrics
    +    :param cors: The set of CORS rules.
    +    :type cors: list[~azure.storage.blob.models.CorsRule]
    +    :param default_service_version: The default version to use for requests to
    +     the Blob service if an incoming request's version is not specified.
    +     Possible values include version 2008-10-27 and all more recent versions
    +    :type default_service_version: str
    +    :param delete_retention_policy:
    +    :type delete_retention_policy: ~azure.storage.blob.models.RetentionPolicy
    +    :param static_website:
    +    :type static_website: ~azure.storage.blob.models.StaticWebsite
    +    """
    +
    +    _attribute_map = {
    +        'logging': {'key': 'Logging', 'type': 'Logging', 'xml': {'name': 'Logging'}},
    +        'hour_metrics': {'key': 'HourMetrics', 'type': 'Metrics', 'xml': {'name': 'HourMetrics'}},
    +        'minute_metrics': {'key': 'MinuteMetrics', 'type': 'Metrics', 'xml': {'name': 'MinuteMetrics'}},
    +        'cors': {'key': 'Cors', 'type': '[CorsRule]', 'xml': {'name': 'Cors', 'itemsName': 'CorsRule', 'wrapped': True}},
    +        'default_service_version': {'key': 'DefaultServiceVersion', 'type': 'str', 'xml': {'name': 'DefaultServiceVersion'}},
    +        'delete_retention_policy': {'key': 'DeleteRetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'DeleteRetentionPolicy'}},
    +        'static_website': {'key': 'StaticWebsite', 'type': 'StaticWebsite', 'xml': {'name': 'StaticWebsite'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, logging=None, hour_metrics=None, minute_metrics=None, cors=None, default_service_version: str=None, delete_retention_policy=None, static_website=None, **kwargs) -> None:
    +        super(StorageServiceProperties, self).__init__(**kwargs)
    +        self.logging = logging
    +        self.hour_metrics = hour_metrics
    +        self.minute_metrics = minute_metrics
    +        self.cors = cors
    +        self.default_service_version = default_service_version
    +        self.delete_retention_policy = delete_retention_policy
    +        self.static_website = static_website
    +
    +
    +class StorageServiceStats(Model):
    +    """Stats for the storage service.
    +
    +    :param geo_replication:
    +    :type geo_replication: ~azure.storage.blob.models.GeoReplication
    +    """
    +
    +    _attribute_map = {
    +        'geo_replication': {'key': 'GeoReplication', 'type': 'GeoReplication', 'xml': {'name': 'GeoReplication'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, geo_replication=None, **kwargs) -> None:
    +        super(StorageServiceStats, self).__init__(**kwargs)
    +        self.geo_replication = geo_replication
    +
    +
    +class UserDelegationKey(Model):
    +    """A user delegation key.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param signed_oid: Required. The Azure Active Directory object ID in GUID
    +     format.
    +    :type signed_oid: str
    +    :param signed_tid: Required. The Azure Active Directory tenant ID in GUID
    +     format
    +    :type signed_tid: str
    +    :param signed_start: Required. The date-time the key is active
    +    :type signed_start: datetime
    +    :param signed_expiry: Required. The date-time the key expires
    +    :type signed_expiry: datetime
    +    :param signed_service: Required. Abbreviation of the Azure Storage service
    +     that accepts the key
    +    :type signed_service: str
    +    :param signed_version: Required. The service version that created the key
    +    :type signed_version: str
    +    :param value: Required. The key as a base64 string
    +    :type value: str
    +    """
    +
    +    _validation = {
    +        'signed_oid': {'required': True},
    +        'signed_tid': {'required': True},
    +        'signed_start': {'required': True},
    +        'signed_expiry': {'required': True},
    +        'signed_service': {'required': True},
    +        'signed_version': {'required': True},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'signed_oid': {'key': 'SignedOid', 'type': 'str', 'xml': {'name': 'SignedOid'}},
    +        'signed_tid': {'key': 'SignedTid', 'type': 'str', 'xml': {'name': 'SignedTid'}},
    +        'signed_start': {'key': 'SignedStart', 'type': 'iso-8601', 'xml': {'name': 'SignedStart'}},
    +        'signed_expiry': {'key': 'SignedExpiry', 'type': 'iso-8601', 'xml': {'name': 'SignedExpiry'}},
    +        'signed_service': {'key': 'SignedService', 'type': 'str', 'xml': {'name': 'SignedService'}},
    +        'signed_version': {'key': 'SignedVersion', 'type': 'str', 'xml': {'name': 'SignedVersion'}},
    +        'value': {'key': 'Value', 'type': 'str', 'xml': {'name': 'Value'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, signed_oid: str, signed_tid: str, signed_start, signed_expiry, signed_service: str, signed_version: str, value: str, **kwargs) -> None:
    +        super(UserDelegationKey, self).__init__(**kwargs)
    +        self.signed_oid = signed_oid
    +        self.signed_tid = signed_tid
    +        self.signed_start = signed_start
    +        self.signed_expiry = signed_expiry
    +        self.signed_service = signed_service
    +        self.signed_version = signed_version
    +        self.value = value
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/__init__.py
    new file mode 100644
    index 000000000000..1ea045334401
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/__init__.py
    @@ -0,0 +1,28 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._service_operations import ServiceOperations
    +from ._container_operations import ContainerOperations
    +from ._directory_operations import DirectoryOperations
    +from ._blob_operations import BlobOperations
    +from ._page_blob_operations import PageBlobOperations
    +from ._append_blob_operations import AppendBlobOperations
    +from ._block_blob_operations import BlockBlobOperations
    +
    +__all__ = [
    +    'ServiceOperations',
    +    'ContainerOperations',
    +    'DirectoryOperations',
    +    'BlobOperations',
    +    'PageBlobOperations',
    +    'AppendBlobOperations',
    +    'BlockBlobOperations',
    +]
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_append_blob_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_append_blob_operations.py
    new file mode 100644
    index 000000000000..58948c64d126
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_append_blob_operations.py
    @@ -0,0 +1,563 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class AppendBlobOperations(object):
    +    """AppendBlobOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_blob_type: Specifies the type of blob to create: block blob, page blob, or append blob. Constant value: "AppendBlob".
    +    :ivar comp: . Constant value: "appendblock".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_blob_type = "AppendBlob"
    +        self.comp = "appendblock"
    +
    +    def create(self, content_length, timeout=None, metadata=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Create Append Blob operation creates a new append blob.
    +
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-blob-type'] = self._serialize.header("self.x_ms_blob_type", self.x_ms_blob_type, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def append_block(self, body, content_length, timeout=None, transactional_content_md5=None, transactional_content_crc64=None, request_id=None, lease_access_conditions=None, append_position_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Append Block operation commits a new block of data to the end of an
    +        existing append blob. The Append Block operation is permitted only if
    +        the blob was created with x-ms-blob-type set to AppendBlob. Append
    +        Block is supported only on version 2015-02-21 version or later.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param append_position_access_conditions: Additional parameters for
    +         the operation
    +        :type append_position_access_conditions:
    +         ~azure.storage.blob.models.AppendPositionAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        max_size = None
    +        if append_position_access_conditions is not None:
    +            max_size = append_position_access_conditions.max_size
    +        append_position = None
    +        if append_position_access_conditions is not None:
    +            append_position = append_position_access_conditions.append_position
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.append_block.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("self.comp", self.comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if max_size is not None:
    +            header_parameters['x-ms-blob-condition-maxsize'] = self._serialize.header("max_size", max_size, 'long')
    +        if append_position is not None:
    +            header_parameters['x-ms-blob-condition-appendpos'] = self._serialize.header("append_position", append_position, 'long')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-append-offset': self._deserialize('str', response.headers.get('x-ms-blob-append-offset')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    append_block.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def append_block_from_url(self, source_url, content_length, source_range=None, source_content_md5=None, source_contentcrc64=None, timeout=None, transactional_content_md5=None, request_id=None, cpk_info=None, cpk_scope_info=None, lease_access_conditions=None, append_position_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, cls=None, **kwargs):
    +        """The Append Block operation commits a new block of data to the end of an
    +        existing append blob where the contents are read from a source url. The
    +        Append Block operation is permitted only if the blob was created with
    +        x-ms-blob-type set to AppendBlob. Append Block is supported only on
    +        version 2015-02-21 version or later.
    +
    +        :param source_url: Specify a URL to the copy source.
    +        :type source_url: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param source_range: Bytes of source data in the specified range.
    +        :type source_range: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_contentcrc64: Specify the crc64 calculated for the range
    +         of bytes that must be read from the copy source.
    +        :type source_contentcrc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param append_position_access_conditions: Additional parameters for
    +         the operation
    +        :type append_position_access_conditions:
    +         ~azure.storage.blob.models.AppendPositionAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        max_size = None
    +        if append_position_access_conditions is not None:
    +            max_size = append_position_access_conditions.max_size
    +        append_position = None
    +        if append_position_access_conditions is not None:
    +            append_position = append_position_access_conditions.append_position
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        # Construct URL
    +        url = self.append_block_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("self.comp", self.comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("source_url", source_url, 'str')
    +        if source_range is not None:
    +            header_parameters['x-ms-source-range'] = self._serialize.header("source_range", source_range, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        if source_contentcrc64 is not None:
    +            header_parameters['x-ms-source-content-crc64'] = self._serialize.header("source_contentcrc64", source_contentcrc64, 'bytearray')
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if max_size is not None:
    +            header_parameters['x-ms-blob-condition-maxsize'] = self._serialize.header("max_size", max_size, 'long')
    +        if append_position is not None:
    +            header_parameters['x-ms-blob-condition-appendpos'] = self._serialize.header("append_position", append_position, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-append-offset': self._deserialize('str', response.headers.get('x-ms-blob-append-offset')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    append_block_from_url.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_blob_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_blob_operations.py
    new file mode 100644
    index 000000000000..3927498cf07a
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_blob_operations.py
    @@ -0,0 +1,2442 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class BlobOperations(object):
    +    """BlobOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_requires_sync: . Constant value: "true".
    +    :ivar x_ms_copy_action: . Constant value: "abort".
    +    :ivar restype: . Constant value: "account".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_requires_sync = "true"
    +        self.x_ms_copy_action = "abort"
    +        self.restype = "account"
    +
    +    def download(self, snapshot=None, timeout=None, range=None, range_get_content_md5=None, range_get_content_crc64=None, request_id=None, lease_access_conditions=None, cpk_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Download operation reads or downloads a blob from the system,
    +        including its metadata and properties. You can also call Download to
    +        read a snapshot.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param range_get_content_md5: When set to true and specified together
    +         with the Range, the service returns the MD5 hash for the range, as
    +         long as the range is less than or equal to 4 MB in size.
    +        :type range_get_content_md5: bool
    +        :param range_get_content_crc64: When set to true and specified
    +         together with the Range, the service returns the CRC64 hash for the
    +         range, as long as the range is less than or equal to 4 MB in size.
    +        :type range_get_content_crc64: bool
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: object or the result of cls(response)
    +        :rtype: Generator
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.download.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        if range_get_content_md5 is not None:
    +            header_parameters['x-ms-range-get-content-md5'] = self._serialize.header("range_get_content_md5", range_get_content_md5, 'bool')
    +        if range_get_content_crc64 is not None:
    +            header_parameters['x-ms-range-get-content-crc64'] = self._serialize.header("range_get_content_crc64", range_get_content_crc64, 'bool')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=True, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200, 206]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = response.stream_download(self._client._pipeline)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'Content-Range': self._deserialize('str', response.headers.get('Content-Range')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'Content-Encoding': self._deserialize('str', response.headers.get('Content-Encoding')),
    +                'Cache-Control': self._deserialize('str', response.headers.get('Cache-Control')),
    +                'Content-Disposition': self._deserialize('str', response.headers.get('Content-Disposition')),
    +                'Content-Language': self._deserialize('str', response.headers.get('Content-Language')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-blob-type': self._deserialize(models.BlobType, response.headers.get('x-ms-blob-type')),
    +                'x-ms-copy-completion-time': self._deserialize('rfc-1123', response.headers.get('x-ms-copy-completion-time')),
    +                'x-ms-copy-status-description': self._deserialize('str', response.headers.get('x-ms-copy-status-description')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-progress': self._deserialize('str', response.headers.get('x-ms-copy-progress')),
    +                'x-ms-copy-source': self._deserialize('str', response.headers.get('x-ms-copy-source')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Accept-Ranges': self._deserialize('str', response.headers.get('Accept-Ranges')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-blob-content-md5': self._deserialize('bytearray', response.headers.get('x-ms-blob-content-md5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +        if response.status_code == 206:
    +            deserialized = response.stream_download(self._client._pipeline)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'Content-Range': self._deserialize('str', response.headers.get('Content-Range')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'Content-Encoding': self._deserialize('str', response.headers.get('Content-Encoding')),
    +                'Cache-Control': self._deserialize('str', response.headers.get('Cache-Control')),
    +                'Content-Disposition': self._deserialize('str', response.headers.get('Content-Disposition')),
    +                'Content-Language': self._deserialize('str', response.headers.get('Content-Language')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-blob-type': self._deserialize(models.BlobType, response.headers.get('x-ms-blob-type')),
    +                'x-ms-copy-completion-time': self._deserialize('rfc-1123', response.headers.get('x-ms-copy-completion-time')),
    +                'x-ms-copy-status-description': self._deserialize('str', response.headers.get('x-ms-copy-status-description')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-progress': self._deserialize('str', response.headers.get('x-ms-copy-progress')),
    +                'x-ms-copy-source': self._deserialize('str', response.headers.get('x-ms-copy-source')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Accept-Ranges': self._deserialize('str', response.headers.get('Accept-Ranges')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-blob-content-md5': self._deserialize('bytearray', response.headers.get('x-ms-blob-content-md5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    download.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def get_properties(self, snapshot=None, timeout=None, request_id=None, lease_access_conditions=None, cpk_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Get Properties operation returns all user-defined metadata,
    +        standard HTTP properties, and system properties for the blob. It does
    +        not return the content of the blob.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.get_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.head(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-creation-time': self._deserialize('rfc-1123', response.headers.get('x-ms-creation-time')),
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'x-ms-blob-type': self._deserialize(models.BlobType, response.headers.get('x-ms-blob-type')),
    +                'x-ms-copy-completion-time': self._deserialize('rfc-1123', response.headers.get('x-ms-copy-completion-time')),
    +                'x-ms-copy-status-description': self._deserialize('str', response.headers.get('x-ms-copy-status-description')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-progress': self._deserialize('str', response.headers.get('x-ms-copy-progress')),
    +                'x-ms-copy-source': self._deserialize('str', response.headers.get('x-ms-copy-source')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-incremental-copy': self._deserialize('bool', response.headers.get('x-ms-incremental-copy')),
    +                'x-ms-copy-destination-snapshot': self._deserialize('str', response.headers.get('x-ms-copy-destination-snapshot')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'Content-Encoding': self._deserialize('str', response.headers.get('Content-Encoding')),
    +                'Content-Disposition': self._deserialize('str', response.headers.get('Content-Disposition')),
    +                'Content-Language': self._deserialize('str', response.headers.get('Content-Language')),
    +                'Cache-Control': self._deserialize('str', response.headers.get('Cache-Control')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'Accept-Ranges': self._deserialize('str', response.headers.get('Accept-Ranges')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-access-tier': self._deserialize('str', response.headers.get('x-ms-access-tier')),
    +                'x-ms-access-tier-inferred': self._deserialize('bool', response.headers.get('x-ms-access-tier-inferred')),
    +                'x-ms-archive-status': self._deserialize('str', response.headers.get('x-ms-archive-status')),
    +                'x-ms-access-tier-change-time': self._deserialize('rfc-1123', response.headers.get('x-ms-access-tier-change-time')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_properties.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def delete(self, snapshot=None, timeout=None, delete_snapshots=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """If the storage account's soft delete feature is disabled then, when a
    +        blob is deleted, it is permanently removed from the storage account. If
    +        the storage account's soft delete feature is enabled, then, when a blob
    +        is deleted, it is marked for deletion and becomes inaccessible
    +        immediately. However, the blob service retains the blob or snapshot for
    +        the number of days specified by the DeleteRetentionPolicy section of
    +        [Storage service properties] (Set-Blob-Service-Properties.md). After
    +        the specified number of days has passed, the blob's data is permanently
    +        removed from the storage account. Note that you continue to be charged
    +        for the soft-deleted blob's storage until it is permanently removed.
    +        Use the List Blobs API and specify the "include=deleted" query
    +        parameter to discover which blobs and snapshots have been soft deleted.
    +        You can then use the Undelete Blob API to restore a soft-deleted blob.
    +        All other operations on a soft-deleted blob or snapshot causes the
    +        service to return an HTTP status code of 404 (ResourceNotFound).
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param delete_snapshots: Required if the blob has associated
    +         snapshots. Specify one of the following two options: include: Delete
    +         the base blob and all of its snapshots. only: Delete only the blob's
    +         snapshots and not the blob itself. Possible values include: 'include',
    +         'only'
    +        :type delete_snapshots: str or
    +         ~azure.storage.blob.models.DeleteSnapshotsOptionType
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if delete_snapshots is not None:
    +            header_parameters['x-ms-delete-snapshots'] = self._serialize.header("delete_snapshots", delete_snapshots, 'DeleteSnapshotsOptionType')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    delete.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def set_access_control(self, timeout=None, owner=None, group=None, posix_permissions=None, posix_acl=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Set the owner, group, permissions, or access control list for a blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param owner: Optional. The owner of the blob or directory.
    +        :type owner: str
    +        :param group: Optional. The owning group of the blob or directory.
    +        :type group: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_acl: Sets POSIX access control rights on files and
    +         directories. The value is a comma-separated list of access control
    +         entries. Each access control entry (ACE) consists of a scope, a type,
    +         a user or group identifier, and permissions in the format
    +         "[scope:][type]:[id]:[permissions]".
    +        :type posix_acl: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "setAccessControl"
    +
    +        # Construct URL
    +        url = self.set_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if owner is not None:
    +            header_parameters['x-ms-owner'] = self._serialize.header("owner", owner, 'str')
    +        if group is not None:
    +            header_parameters['x-ms-group'] = self._serialize.header("group", group, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_acl is not None:
    +            header_parameters['x-ms-acl'] = self._serialize.header("posix_acl", posix_acl, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_access_control.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def get_access_control(self, timeout=None, upn=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Get the owner, group, permissions, or access control list for a blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param upn: Optional. Valid only when Hierarchical Namespace is
    +         enabled for the account. If "true", the identity values returned in
    +         the x-ms-owner, x-ms-group, and x-ms-acl response headers will be
    +         transformed from Azure Active Directory Object IDs to User Principal
    +         Names.  If "false", the values will be returned as Azure Active
    +         Directory Object IDs. The default value is false.
    +        :type upn: bool
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "getAccessControl"
    +
    +        # Construct URL
    +        url = self.get_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if upn is not None:
    +            query_parameters['upn'] = self._serialize.query("upn", upn, 'bool')
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.head(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-owner': self._deserialize('str', response.headers.get('x-ms-owner')),
    +                'x-ms-group': self._deserialize('str', response.headers.get('x-ms-group')),
    +                'x-ms-permissions': self._deserialize('str', response.headers.get('x-ms-permissions')),
    +                'x-ms-acl': self._deserialize('str', response.headers.get('x-ms-acl')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_access_control.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def rename(self, rename_source, timeout=None, path_rename_mode=None, directory_properties=None, posix_permissions=None, posix_umask=None, source_lease_id=None, request_id=None, directory_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, cls=None, **kwargs):
    +        """Rename a blob/file.  By default, the destination is overwritten and if
    +        the destination already exists and has a lease the lease is broken.
    +        This operation supports conditional HTTP requests.  For more
    +        information, see [Specifying Conditional Headers for Blob Service
    +        Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).
    +        To fail if the destination already exists, use a conditional request
    +        with If-None-Match: "*".
    +
    +        :param rename_source: The file or directory to be renamed. The value
    +         must have the following format: "/{filesysystem}/{path}".  If
    +         "x-ms-properties" is specified, the properties will overwrite the
    +         existing properties; otherwise, the existing properties will be
    +         preserved.
    +        :type rename_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param path_rename_mode: Determines the behavior of the rename
    +         operation. Possible values include: 'legacy', 'posix'
    +        :type path_rename_mode: str or
    +         ~azure.storage.blob.models.PathRenameMode
    +        :param directory_properties: Optional.  User-defined properties to be
    +         stored with the file or directory, in the format of a comma-separated
    +         list of name and value pairs "n1=v1, n2=v2, ...", where each value is
    +         base64 encoded.
    +        :type directory_properties: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_umask: Only valid if Hierarchical Namespace is enabled
    +         for the account. This umask restricts permission settings for file and
    +         directory, and will only be applied when default Acl does not exist in
    +         parent directory. If the umask bit has set, it means that the
    +         corresponding permission will be disabled. Otherwise the corresponding
    +         permission will be determined by the permission. A 4-digit octal
    +         notation (e.g. 0022) is supported here. If no umask was specified, a
    +         default umask - 0027 will be used.
    +        :type posix_umask: str
    +        :param source_lease_id: A lease ID for the source path. If specified,
    +         the source path must have an active lease and the leaase ID must
    +         match.
    +        :type source_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param directory_http_headers: Additional parameters for the operation
    +        :type directory_http_headers:
    +         ~azure.storage.blob.models.DirectoryHttpHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        cache_control = None
    +        if directory_http_headers is not None:
    +            cache_control = directory_http_headers.cache_control
    +        content_type = None
    +        if directory_http_headers is not None:
    +            content_type = directory_http_headers.content_type
    +        content_encoding = None
    +        if directory_http_headers is not None:
    +            content_encoding = directory_http_headers.content_encoding
    +        content_language = None
    +        if directory_http_headers is not None:
    +            content_language = directory_http_headers.content_language
    +        content_disposition = None
    +        if directory_http_headers is not None:
    +            content_disposition = directory_http_headers.content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        # Construct URL
    +        url = self.rename.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if path_rename_mode is not None:
    +            query_parameters['mode'] = self._serialize.query("path_rename_mode", path_rename_mode, 'PathRenameMode')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-rename-source'] = self._serialize.header("rename_source", rename_source, 'str')
    +        if directory_properties is not None:
    +            header_parameters['x-ms-properties'] = self._serialize.header("directory_properties", directory_properties, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_umask is not None:
    +            header_parameters['x-ms-umask'] = self._serialize.header("posix_umask", posix_umask, 'str')
    +        if source_lease_id is not None:
    +            header_parameters['x-ms-source-lease-id'] = self._serialize.header("source_lease_id", source_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if cache_control is not None:
    +            header_parameters['x-ms-cache-control'] = self._serialize.header("cache_control", cache_control, 'str')
    +        if content_type is not None:
    +            header_parameters['x-ms-content-type'] = self._serialize.header("content_type", content_type, 'str')
    +        if content_encoding is not None:
    +            header_parameters['x-ms-content-encoding'] = self._serialize.header("content_encoding", content_encoding, 'str')
    +        if content_language is not None:
    +            header_parameters['x-ms-content-language'] = self._serialize.header("content_language", content_language, 'str')
    +        if content_disposition is not None:
    +            header_parameters['x-ms-content-disposition'] = self._serialize.header("content_disposition", content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    rename.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def undelete(self, timeout=None, request_id=None, cls=None, **kwargs):
    +        """Undelete a blob that was previously soft deleted.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "undelete"
    +
    +        # Construct URL
    +        url = self.undelete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    undelete.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def set_http_headers(self, timeout=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Set HTTP Headers operation sets system properties on the blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.set_http_headers.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_http_headers.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def set_metadata(self, timeout=None, metadata=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Set Blob Metadata operation sets user-defined metadata for the
    +        specified blob as one or more name-value pairs.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "metadata"
    +
    +        # Construct URL
    +        url = self.set_metadata.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_metadata.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def acquire_lease(self, timeout=None, duration=None, proposed_lease_id=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param duration: Specifies the duration of the lease, in seconds, or
    +         negative one (-1) for a lease that never expires. A non-infinite lease
    +         can be between 15 and 60 seconds. A lease duration cannot be changed
    +         using renew or change.
    +        :type duration: int
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "acquire"
    +
    +        # Construct URL
    +        url = self.acquire_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if duration is not None:
    +            header_parameters['x-ms-lease-duration'] = self._serialize.header("duration", duration, 'int')
    +        if proposed_lease_id is not None:
    +            header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    acquire_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def release_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "release"
    +
    +        # Construct URL
    +        url = self.release_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    release_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def renew_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "renew"
    +
    +        # Construct URL
    +        url = self.renew_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    renew_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def change_lease(self, lease_id, proposed_lease_id, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "change"
    +
    +        # Construct URL
    +        url = self.change_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    change_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def break_lease(self, timeout=None, break_period=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param break_period: For a break operation, proposed duration the
    +         lease should continue before it is broken, in seconds, between 0 and
    +         60. This break period is only used if it is shorter than the time
    +         remaining on the lease. If longer, the time remaining on the lease is
    +         used. A new lease will not be available before the break period has
    +         expired, but the lease may be held for longer than the break period.
    +         If this header does not appear with a break operation, a
    +         fixed-duration lease breaks after the remaining lease period elapses,
    +         and an infinite lease breaks immediately.
    +        :type break_period: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "break"
    +
    +        # Construct URL
    +        url = self.break_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if break_period is not None:
    +            header_parameters['x-ms-lease-break-period'] = self._serialize.header("break_period", break_period, 'int')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-time': self._deserialize('int', response.headers.get('x-ms-lease-time')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    break_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def create_snapshot(self, timeout=None, metadata=None, request_id=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """The Create Snapshot operation creates a read-only snapshot of a blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "snapshot"
    +
    +        # Construct URL
    +        url = self.create_snapshot.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-snapshot': self._deserialize('str', response.headers.get('x-ms-snapshot')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create_snapshot.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def start_copy_from_url(self, copy_source, timeout=None, metadata=None, tier=None, rehydrate_priority=None, request_id=None, source_modified_access_conditions=None, modified_access_conditions=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """The Start Copy From URL operation copies a blob or an internet resource
    +        to a new blob.
    +
    +        :param copy_source: Specifies the name of the source page blob
    +         snapshot. This value is a URL of up to 2 KB in length that specifies a
    +         page blob snapshot. The value should be URL-encoded as it would appear
    +         in a request URI. The source blob must either be public or must be
    +         authenticated via a shared access signature.
    +        :type copy_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param rehydrate_priority: Optional: Indicates the priority with which
    +         to rehydrate an archived blob. Possible values include: 'High',
    +         'Standard'
    +        :type rehydrate_priority: str or
    +         ~azure.storage.blob.models.RehydratePriority
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        # Construct URL
    +        url = self.start_copy_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        if rehydrate_priority is not None:
    +            header_parameters['x-ms-rehydrate-priority'] = self._serialize.header("rehydrate_priority", rehydrate_priority, 'str')
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    start_copy_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def copy_from_url(self, copy_source, timeout=None, metadata=None, tier=None, request_id=None, source_content_md5=None, source_modified_access_conditions=None, modified_access_conditions=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """The Copy From URL operation copies a blob or an internet resource to a
    +        new blob. It will not return a response until the copy is complete.
    +
    +        :param copy_source: Specifies the name of the source page blob
    +         snapshot. This value is a URL of up to 2 KB in length that specifies a
    +         page blob snapshot. The value should be URL-encoded as it would appear
    +         in a request URI. The source blob must either be public or must be
    +         authenticated via a shared access signature.
    +        :type copy_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        # Construct URL
    +        url = self.copy_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        header_parameters['x-ms-requires-sync'] = self._serialize.header("self.x_ms_requires_sync", self.x_ms_requires_sync, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-status': self._deserialize(models.SyncCopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    copy_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def abort_copy_from_url(self, copy_id, timeout=None, request_id=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """The Abort Copy From URL operation aborts a pending Copy From URL
    +        operation, and leaves a destination blob with zero length and full
    +        metadata.
    +
    +        :param copy_id: The copy identifier provided in the x-ms-copy-id
    +         header of the original Copy Blob operation.
    +        :type copy_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "copy"
    +
    +        # Construct URL
    +        url = self.abort_copy_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['copyid'] = self._serialize.query("copy_id", copy_id, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-copy-action'] = self._serialize.header("self.x_ms_copy_action", self.x_ms_copy_action, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    abort_copy_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def set_tier(self, tier, timeout=None, rehydrate_priority=None, request_id=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """The Set Tier operation sets the tier on a blob. The operation is
    +        allowed on a page blob in a premium storage account and on a block blob
    +        in a blob storage account (locally redundant storage only). A premium
    +        page blob's tier determines the allowed size, IOPS, and bandwidth of
    +        the blob. A block blob's tier determines Hot/Cool/Archive storage type.
    +        This operation does not update the blob's ETag.
    +
    +        :param tier: Indicates the tier to be set on the blob. Possible values
    +         include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30', 'P40', 'P50', 'P60',
    +         'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierRequired
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param rehydrate_priority: Optional: Indicates the priority with which
    +         to rehydrate an archived blob. Possible values include: 'High',
    +         'Standard'
    +        :type rehydrate_priority: str or
    +         ~azure.storage.blob.models.RehydratePriority
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "tier"
    +
    +        # Construct URL
    +        url = self.set_tier.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        if rehydrate_priority is not None:
    +            header_parameters['x-ms-rehydrate-priority'] = self._serialize.header("rehydrate_priority", rehydrate_priority, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200, 202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_tier.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def get_account_info(self, cls=None, **kwargs):
    +        """Returns the sku name and account kind .
    +
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_account_info.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['restype'] = self._serialize.query("self.restype", self.restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-sku-name': self._deserialize(models.SkuName, response.headers.get('x-ms-sku-name')),
    +                'x-ms-account-kind': self._deserialize(models.AccountKind, response.headers.get('x-ms-account-kind')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_account_info.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_block_blob_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_block_blob_operations.py
    new file mode 100644
    index 000000000000..034e32f8211f
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_block_blob_operations.py
    @@ -0,0 +1,802 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class BlockBlobOperations(object):
    +    """BlockBlobOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_blob_type: Specifies the type of blob to create: block blob, page blob, or append blob. Constant value: "BlockBlob".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_blob_type = "BlockBlob"
    +
    +    def upload(self, body, content_length, timeout=None, transactional_content_md5=None, metadata=None, tier=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Upload Block Blob operation updates the content of an existing
    +        block blob. Updating an existing block blob overwrites any existing
    +        metadata on the blob. Partial updates are not supported with Put Blob;
    +        the content of the existing blob is overwritten with the content of the
    +        new blob. To perform a partial update of the content of a block blob,
    +        use the Put Block List operation.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.upload.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-blob-type'] = self._serialize.header("self.x_ms_blob_type", self.x_ms_blob_type, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    upload.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def stage_block(self, block_id, content_length, body, transactional_content_md5=None, transactional_content_crc64=None, timeout=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, cls=None, **kwargs):
    +        """The Stage Block operation creates a new block to be committed as part
    +        of a blob.
    +
    +        :param block_id: A valid Base64 string value that identifies the
    +         block. Prior to encoding, the string must be less than or equal to 64
    +         bytes in size. For a given blob, the length of the value specified for
    +         the blockid parameter must be the same size for each block.
    +        :type block_id: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param body: Initial data
    +        :type body: Generator
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +
    +        comp = "block"
    +
    +        # Construct URL
    +        url = self.stage_block.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['blockid'] = self._serialize.query("block_id", block_id, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    stage_block.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def stage_block_from_url(self, block_id, content_length, source_url, source_range=None, source_content_md5=None, source_contentcrc64=None, timeout=None, request_id=None, cpk_info=None, cpk_scope_info=None, lease_access_conditions=None, source_modified_access_conditions=None, cls=None, **kwargs):
    +        """The Stage Block operation creates a new block to be committed as part
    +        of a blob where the contents are read from a URL.
    +
    +        :param block_id: A valid Base64 string value that identifies the
    +         block. Prior to encoding, the string must be less than or equal to 64
    +         bytes in size. For a given blob, the length of the value specified for
    +         the blockid parameter must be the same size for each block.
    +        :type block_id: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param source_url: Specify a URL to the copy source.
    +        :type source_url: str
    +        :param source_range: Bytes of source data in the specified range.
    +        :type source_range: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_contentcrc64: Specify the crc64 calculated for the range
    +         of bytes that must be read from the copy source.
    +        :type source_contentcrc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        comp = "block"
    +
    +        # Construct URL
    +        url = self.stage_block_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['blockid'] = self._serialize.query("block_id", block_id, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("source_url", source_url, 'str')
    +        if source_range is not None:
    +            header_parameters['x-ms-source-range'] = self._serialize.header("source_range", source_range, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        if source_contentcrc64 is not None:
    +            header_parameters['x-ms-source-content-crc64'] = self._serialize.header("source_contentcrc64", source_contentcrc64, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    stage_block_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def commit_block_list(self, blocks, timeout=None, transactional_content_md5=None, transactional_content_crc64=None, metadata=None, tier=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Commit Block List operation writes a blob by specifying the list of
    +        block IDs that make up the blob. In order to be written as part of a
    +        blob, a block must have been successfully written to the server in a
    +        prior Put Block operation. You can call Put Block List to update a blob
    +        by uploading only those blocks that have changed, then committing the
    +        new and existing blocks together. You can do this by specifying whether
    +        to commit a block from the committed block list or from the uncommitted
    +        block list, or to commit the most recently uploaded version of the
    +        block, whichever list it may belong to.
    +
    +        :param blocks:
    +        :type blocks: ~azure.storage.blob.models.BlockLookupList
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "blocklist"
    +
    +        # Construct URL
    +        url = self.commit_block_list.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(blocks, 'BlockLookupList')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    commit_block_list.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def get_block_list(self, list_type="committed", snapshot=None, timeout=None, request_id=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """The Get Block List operation retrieves the list of blocks that have
    +        been uploaded as part of a block blob.
    +
    +        :param list_type: Specifies whether to return the list of committed
    +         blocks, the list of uncommitted blocks, or both lists together.
    +         Possible values include: 'committed', 'uncommitted', 'all'
    +        :type list_type: str or ~azure.storage.blob.models.BlockListType
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BlockList or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.BlockList
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "blocklist"
    +
    +        # Construct URL
    +        url = self.get_block_list.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        query_parameters['blocklisttype'] = self._serialize.query("list_type", list_type, 'BlockListType')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BlockList', response)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-blob-content-length': self._deserialize('long', response.headers.get('x-ms-blob-content-length')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_block_list.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_container_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_container_operations.py
    new file mode 100644
    index 000000000000..2d2812a4da5f
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_container_operations.py
    @@ -0,0 +1,1327 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class ContainerOperations(object):
    +    """ContainerOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +
    +    def create(self, timeout=None, metadata=None, access=None, request_id=None, container_cpk_scope_info=None, cls=None, **kwargs):
    +        """creates a new container under the specified account. If the container
    +        with the same name already exists, the operation fails.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param access: Specifies whether data in the container may be accessed
    +         publicly and the level of access. Possible values include:
    +         'container', 'blob'
    +        :type access: str or ~azure.storage.blob.models.PublicAccessType
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param container_cpk_scope_info: Additional parameters for the
    +         operation
    +        :type container_cpk_scope_info:
    +         ~azure.storage.blob.models.ContainerCpkScopeInfo
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        default_encryption_scope = None
    +        if container_cpk_scope_info is not None:
    +            default_encryption_scope = container_cpk_scope_info.default_encryption_scope
    +        deny_encryption_scope_override = None
    +        if container_cpk_scope_info is not None:
    +            deny_encryption_scope_override = container_cpk_scope_info.deny_encryption_scope_override
    +
    +        restype = "container"
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if access is not None:
    +            header_parameters['x-ms-blob-public-access'] = self._serialize.header("access", access, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if default_encryption_scope is not None:
    +            header_parameters['x-ms-default-encryption-scope'] = self._serialize.header("default_encryption_scope", default_encryption_scope, 'str')
    +        if deny_encryption_scope_override is not None:
    +            header_parameters['x-ms-deny-encryption-scope-override'] = self._serialize.header("deny_encryption_scope_override", deny_encryption_scope_override, 'bool')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{containerName}'}
    +
    +    def get_properties(self, timeout=None, request_id=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """returns all user-defined metadata and system properties for the
    +        specified container. The data returned does not include the container's
    +        list of blobs.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        restype = "container"
    +
    +        # Construct URL
    +        url = self.get_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-public-access': self._deserialize('str', response.headers.get('x-ms-blob-public-access')),
    +                'x-ms-has-immutability-policy': self._deserialize('bool', response.headers.get('x-ms-has-immutability-policy')),
    +                'x-ms-has-legal-hold': self._deserialize('bool', response.headers.get('x-ms-has-legal-hold')),
    +                'x-ms-default-encryption-scope': self._deserialize('str', response.headers.get('x-ms-default-encryption-scope')),
    +                'x-ms-deny-encryption-scope-override': self._deserialize('bool', response.headers.get('x-ms-deny-encryption-scope-override')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_properties.metadata = {'url': '/{containerName}'}
    +
    +    def delete(self, timeout=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """operation marks the specified container for deletion. The container and
    +        any blobs contained within it are later deleted during garbage
    +        collection.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        restype = "container"
    +
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    delete.metadata = {'url': '/{containerName}'}
    +
    +    def set_metadata(self, timeout=None, metadata=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """operation sets one or more user-defined name-value pairs for the
    +        specified container.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +
    +        restype = "container"
    +        comp = "metadata"
    +
    +        # Construct URL
    +        url = self.set_metadata.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_metadata.metadata = {'url': '/{containerName}'}
    +
    +    def get_access_policy(self, timeout=None, request_id=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """gets the permissions for the specified container. The permissions
    +        indicate whether container data may be accessed publicly.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: list or the result of cls(response)
    +        :rtype: list[~azure.storage.blob.models.SignedIdentifier]
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        restype = "container"
    +        comp = "acl"
    +
    +        # Construct URL
    +        url = self.get_access_policy.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('[SignedIdentifier]', response)
    +            header_dict = {
    +                'x-ms-blob-public-access': self._deserialize('str', response.headers.get('x-ms-blob-public-access')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_access_policy.metadata = {'url': '/{containerName}'}
    +
    +    def set_access_policy(self, container_acl=None, timeout=None, access=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """sets the permissions for the specified container. The permissions
    +        indicate whether blobs in a container may be accessed publicly.
    +
    +        :param container_acl: the acls for the container
    +        :type container_acl: list[~azure.storage.blob.models.SignedIdentifier]
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param access: Specifies whether data in the container may be accessed
    +         publicly and the level of access. Possible values include:
    +         'container', 'blob'
    +        :type access: str or ~azure.storage.blob.models.PublicAccessType
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        restype = "container"
    +        comp = "acl"
    +
    +        # Construct URL
    +        url = self.set_access_policy.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        if access is not None:
    +            header_parameters['x-ms-blob-public-access'] = self._serialize.header("access", access, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct body
    +        serialization_ctxt = {'xml': {'name': 'SignedIdentifiers', 'itemsName': 'SignedIdentifiers', 'wrapped': True}}
    +        if container_acl is not None:
    +            body_content = self._serialize.body(container_acl, '[SignedIdentifier]', serialization_ctxt=serialization_ctxt)
    +        else:
    +            body_content = None
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_access_policy.metadata = {'url': '/{containerName}'}
    +
    +    def acquire_lease(self, timeout=None, duration=None, proposed_lease_id=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param duration: Specifies the duration of the lease, in seconds, or
    +         negative one (-1) for a lease that never expires. A non-infinite lease
    +         can be between 15 and 60 seconds. A lease duration cannot be changed
    +         using renew or change.
    +        :type duration: int
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "acquire"
    +
    +        # Construct URL
    +        url = self.acquire_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if duration is not None:
    +            header_parameters['x-ms-lease-duration'] = self._serialize.header("duration", duration, 'int')
    +        if proposed_lease_id is not None:
    +            header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    acquire_lease.metadata = {'url': '/{containerName}'}
    +
    +    def release_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "release"
    +
    +        # Construct URL
    +        url = self.release_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    release_lease.metadata = {'url': '/{containerName}'}
    +
    +    def renew_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "renew"
    +
    +        # Construct URL
    +        url = self.renew_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    renew_lease.metadata = {'url': '/{containerName}'}
    +
    +    def break_lease(self, timeout=None, break_period=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param break_period: For a break operation, proposed duration the
    +         lease should continue before it is broken, in seconds, between 0 and
    +         60. This break period is only used if it is shorter than the time
    +         remaining on the lease. If longer, the time remaining on the lease is
    +         used. A new lease will not be available before the break period has
    +         expired, but the lease may be held for longer than the break period.
    +         If this header does not appear with a break operation, a
    +         fixed-duration lease breaks after the remaining lease period elapses,
    +         and an infinite lease breaks immediately.
    +        :type break_period: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "break"
    +
    +        # Construct URL
    +        url = self.break_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if break_period is not None:
    +            header_parameters['x-ms-lease-break-period'] = self._serialize.header("break_period", break_period, 'int')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-time': self._deserialize('int', response.headers.get('x-ms-lease-time')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    break_lease.metadata = {'url': '/{containerName}'}
    +
    +    def change_lease(self, lease_id, proposed_lease_id, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "change"
    +
    +        # Construct URL
    +        url = self.change_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    change_lease.metadata = {'url': '/{containerName}'}
    +
    +    def list_blob_flat_segment(self, prefix=None, marker=None, maxresults=None, include=None, timeout=None, request_id=None, cls=None, **kwargs):
    +        """[Update] The List Blobs operation returns a list of the blobs under the
    +        specified container.
    +
    +        :param prefix: Filters the results to return only containers whose
    +         name begins with the specified prefix.
    +        :type prefix: str
    +        :param marker: A string value that identifies the portion of the list
    +         of containers to be returned with the next listing operation. The
    +         operation returns the NextMarker value within the response body if the
    +         listing operation did not return all containers remaining to be listed
    +         with the current page. The NextMarker value can be used as the value
    +         for the marker parameter in a subsequent call to request the next page
    +         of list items. The marker value is opaque to the client.
    +        :type marker: str
    +        :param maxresults: Specifies the maximum number of containers to
    +         return. If the request does not specify maxresults, or specifies a
    +         value greater than 5000, the server will return up to 5000 items. Note
    +         that if the listing operation crosses a partition boundary, then the
    +         service will return a continuation token for retrieving the remainder
    +         of the results. For this reason, it is possible that the service will
    +         return fewer results than specified by maxresults, or than the default
    +         of 5000.
    +        :type maxresults: int
    +        :param include: Include this parameter to specify one or more datasets
    +         to include in the response.
    +        :type include: list[str or
    +         ~azure.storage.blob.models.ListBlobsIncludeItem]
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: ListBlobsFlatSegmentResponse or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.ListBlobsFlatSegmentResponse
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "container"
    +        comp = "list"
    +
    +        # Construct URL
    +        url = self.list_blob_flat_segment.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if prefix is not None:
    +            query_parameters['prefix'] = self._serialize.query("prefix", prefix, 'str')
    +        if marker is not None:
    +            query_parameters['marker'] = self._serialize.query("marker", marker, 'str')
    +        if maxresults is not None:
    +            query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1)
    +        if include is not None:
    +            query_parameters['include'] = self._serialize.query("include", include, '[ListBlobsIncludeItem]', div=',')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ListBlobsFlatSegmentResponse', response)
    +            header_dict = {
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    list_blob_flat_segment.metadata = {'url': '/{containerName}'}
    +
    +    def list_blob_hierarchy_segment(self, delimiter, prefix=None, marker=None, maxresults=None, include=None, timeout=None, request_id=None, cls=None, **kwargs):
    +        """[Update] The List Blobs operation returns a list of the blobs under the
    +        specified container.
    +
    +        :param delimiter: When the request includes this parameter, the
    +         operation returns a BlobPrefix element in the response body that acts
    +         as a placeholder for all blobs whose names begin with the same
    +         substring up to the appearance of the delimiter character. The
    +         delimiter may be a single character or a string.
    +        :type delimiter: str
    +        :param prefix: Filters the results to return only containers whose
    +         name begins with the specified prefix.
    +        :type prefix: str
    +        :param marker: A string value that identifies the portion of the list
    +         of containers to be returned with the next listing operation. The
    +         operation returns the NextMarker value within the response body if the
    +         listing operation did not return all containers remaining to be listed
    +         with the current page. The NextMarker value can be used as the value
    +         for the marker parameter in a subsequent call to request the next page
    +         of list items. The marker value is opaque to the client.
    +        :type marker: str
    +        :param maxresults: Specifies the maximum number of containers to
    +         return. If the request does not specify maxresults, or specifies a
    +         value greater than 5000, the server will return up to 5000 items. Note
    +         that if the listing operation crosses a partition boundary, then the
    +         service will return a continuation token for retrieving the remainder
    +         of the results. For this reason, it is possible that the service will
    +         return fewer results than specified by maxresults, or than the default
    +         of 5000.
    +        :type maxresults: int
    +        :param include: Include this parameter to specify one or more datasets
    +         to include in the response.
    +        :type include: list[str or
    +         ~azure.storage.blob.models.ListBlobsIncludeItem]
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: ListBlobsHierarchySegmentResponse or the result of
    +         cls(response)
    +        :rtype: ~azure.storage.blob.models.ListBlobsHierarchySegmentResponse
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "container"
    +        comp = "list"
    +
    +        # Construct URL
    +        url = self.list_blob_hierarchy_segment.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if prefix is not None:
    +            query_parameters['prefix'] = self._serialize.query("prefix", prefix, 'str')
    +        query_parameters['delimiter'] = self._serialize.query("delimiter", delimiter, 'str')
    +        if marker is not None:
    +            query_parameters['marker'] = self._serialize.query("marker", marker, 'str')
    +        if maxresults is not None:
    +            query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1)
    +        if include is not None:
    +            query_parameters['include'] = self._serialize.query("include", include, '[ListBlobsIncludeItem]', div=',')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ListBlobsHierarchySegmentResponse', response)
    +            header_dict = {
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    list_blob_hierarchy_segment.metadata = {'url': '/{containerName}'}
    +
    +    def get_account_info(self, cls=None, **kwargs):
    +        """Returns the sku name and account kind .
    +
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "account"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_account_info.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-sku-name': self._deserialize(models.SkuName, response.headers.get('x-ms-sku-name')),
    +                'x-ms-account-kind': self._deserialize(models.AccountKind, response.headers.get('x-ms-account-kind')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_account_info.metadata = {'url': '/{containerName}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_directory_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_directory_operations.py
    new file mode 100644
    index 000000000000..bfaf63388ec0
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_directory_operations.py
    @@ -0,0 +1,740 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class DirectoryOperations(object):
    +    """DirectoryOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar resource: . Constant value: "directory".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.resource = "directory"
    +
    +    def create(self, timeout=None, directory_properties=None, posix_permissions=None, posix_umask=None, request_id=None, directory_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Create a directory. By default, the destination is overwritten and if
    +        the destination already exists and has a lease the lease is broken.
    +        This operation supports conditional HTTP requests.  For more
    +        information, see [Specifying Conditional Headers for Blob Service
    +        Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).
    +        To fail if the destination already exists, use a conditional request
    +        with If-None-Match: "*".
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param directory_properties: Optional.  User-defined properties to be
    +         stored with the file or directory, in the format of a comma-separated
    +         list of name and value pairs "n1=v1, n2=v2, ...", where each value is
    +         base64 encoded.
    +        :type directory_properties: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_umask: Only valid if Hierarchical Namespace is enabled
    +         for the account. This umask restricts permission settings for file and
    +         directory, and will only be applied when default Acl does not exist in
    +         parent directory. If the umask bit has set, it means that the
    +         corresponding permission will be disabled. Otherwise the corresponding
    +         permission will be determined by the permission. A 4-digit octal
    +         notation (e.g. 0022) is supported here. If no umask was specified, a
    +         default umask - 0027 will be used.
    +        :type posix_umask: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param directory_http_headers: Additional parameters for the operation
    +        :type directory_http_headers:
    +         ~azure.storage.blob.models.DirectoryHttpHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        cache_control = None
    +        if directory_http_headers is not None:
    +            cache_control = directory_http_headers.cache_control
    +        content_type = None
    +        if directory_http_headers is not None:
    +            content_type = directory_http_headers.content_type
    +        content_encoding = None
    +        if directory_http_headers is not None:
    +            content_encoding = directory_http_headers.content_encoding
    +        content_language = None
    +        if directory_http_headers is not None:
    +            content_language = directory_http_headers.content_language
    +        content_disposition = None
    +        if directory_http_headers is not None:
    +            content_disposition = directory_http_headers.content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['resource'] = self._serialize.query("self.resource", self.resource, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if directory_properties is not None:
    +            header_parameters['x-ms-properties'] = self._serialize.header("directory_properties", directory_properties, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_umask is not None:
    +            header_parameters['x-ms-umask'] = self._serialize.header("posix_umask", posix_umask, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if cache_control is not None:
    +            header_parameters['x-ms-cache-control'] = self._serialize.header("cache_control", cache_control, 'str')
    +        if content_type is not None:
    +            header_parameters['x-ms-content-type'] = self._serialize.header("content_type", content_type, 'str')
    +        if content_encoding is not None:
    +            header_parameters['x-ms-content-encoding'] = self._serialize.header("content_encoding", content_encoding, 'str')
    +        if content_language is not None:
    +            header_parameters['x-ms-content-language'] = self._serialize.header("content_language", content_language, 'str')
    +        if content_disposition is not None:
    +            header_parameters['x-ms-content-disposition'] = self._serialize.header("content_disposition", content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def rename(self, rename_source, timeout=None, marker=None, path_rename_mode=None, directory_properties=None, posix_permissions=None, posix_umask=None, source_lease_id=None, request_id=None, directory_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, cls=None, **kwargs):
    +        """Rename a directory. By default, the destination is overwritten and if
    +        the destination already exists and has a lease the lease is broken.
    +        This operation supports conditional HTTP requests. For more
    +        information, see [Specifying Conditional Headers for Blob Service
    +        Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).
    +        To fail if the destination already exists, use a conditional request
    +        with If-None-Match: "*".
    +
    +        :param rename_source: The file or directory to be renamed. The value
    +         must have the following format: "/{filesysystem}/{path}".  If
    +         "x-ms-properties" is specified, the properties will overwrite the
    +         existing properties; otherwise, the existing properties will be
    +         preserved.
    +        :type rename_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param marker: When renaming a directory, the number of paths that are
    +         renamed with each invocation is limited.  If the number of paths to be
    +         renamed exceeds this limit, a continuation token is returned in this
    +         response header.  When a continuation token is returned in the
    +         response, it must be specified in a subsequent invocation of the
    +         rename operation to continue renaming the directory.
    +        :type marker: str
    +        :param path_rename_mode: Determines the behavior of the rename
    +         operation. Possible values include: 'legacy', 'posix'
    +        :type path_rename_mode: str or
    +         ~azure.storage.blob.models.PathRenameMode
    +        :param directory_properties: Optional.  User-defined properties to be
    +         stored with the file or directory, in the format of a comma-separated
    +         list of name and value pairs "n1=v1, n2=v2, ...", where each value is
    +         base64 encoded.
    +        :type directory_properties: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_umask: Only valid if Hierarchical Namespace is enabled
    +         for the account. This umask restricts permission settings for file and
    +         directory, and will only be applied when default Acl does not exist in
    +         parent directory. If the umask bit has set, it means that the
    +         corresponding permission will be disabled. Otherwise the corresponding
    +         permission will be determined by the permission. A 4-digit octal
    +         notation (e.g. 0022) is supported here. If no umask was specified, a
    +         default umask - 0027 will be used.
    +        :type posix_umask: str
    +        :param source_lease_id: A lease ID for the source path. If specified,
    +         the source path must have an active lease and the leaase ID must
    +         match.
    +        :type source_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param directory_http_headers: Additional parameters for the operation
    +        :type directory_http_headers:
    +         ~azure.storage.blob.models.DirectoryHttpHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        cache_control = None
    +        if directory_http_headers is not None:
    +            cache_control = directory_http_headers.cache_control
    +        content_type = None
    +        if directory_http_headers is not None:
    +            content_type = directory_http_headers.content_type
    +        content_encoding = None
    +        if directory_http_headers is not None:
    +            content_encoding = directory_http_headers.content_encoding
    +        content_language = None
    +        if directory_http_headers is not None:
    +            content_language = directory_http_headers.content_language
    +        content_disposition = None
    +        if directory_http_headers is not None:
    +            content_disposition = directory_http_headers.content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        # Construct URL
    +        url = self.rename.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if marker is not None:
    +            query_parameters['continuation'] = self._serialize.query("marker", marker, 'str')
    +        if path_rename_mode is not None:
    +            query_parameters['mode'] = self._serialize.query("path_rename_mode", path_rename_mode, 'PathRenameMode')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-rename-source'] = self._serialize.header("rename_source", rename_source, 'str')
    +        if directory_properties is not None:
    +            header_parameters['x-ms-properties'] = self._serialize.header("directory_properties", directory_properties, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_umask is not None:
    +            header_parameters['x-ms-umask'] = self._serialize.header("posix_umask", posix_umask, 'str')
    +        if source_lease_id is not None:
    +            header_parameters['x-ms-source-lease-id'] = self._serialize.header("source_lease_id", source_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if cache_control is not None:
    +            header_parameters['x-ms-cache-control'] = self._serialize.header("cache_control", cache_control, 'str')
    +        if content_type is not None:
    +            header_parameters['x-ms-content-type'] = self._serialize.header("content_type", content_type, 'str')
    +        if content_encoding is not None:
    +            header_parameters['x-ms-content-encoding'] = self._serialize.header("content_encoding", content_encoding, 'str')
    +        if content_language is not None:
    +            header_parameters['x-ms-content-language'] = self._serialize.header("content_language", content_language, 'str')
    +        if content_disposition is not None:
    +            header_parameters['x-ms-content-disposition'] = self._serialize.header("content_disposition", content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-continuation': self._deserialize('str', response.headers.get('x-ms-continuation')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    rename.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def delete(self, recursive_directory_delete, timeout=None, marker=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Deletes the directory.
    +
    +        :param recursive_directory_delete: If "true", all paths beneath the
    +         directory will be deleted. If "false" and the directory is non-empty,
    +         an error occurs.
    +        :type recursive_directory_delete: bool
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param marker: When renaming a directory, the number of paths that are
    +         renamed with each invocation is limited.  If the number of paths to be
    +         renamed exceeds this limit, a continuation token is returned in this
    +         response header.  When a continuation token is returned in the
    +         response, it must be specified in a subsequent invocation of the
    +         rename operation to continue renaming the directory.
    +        :type marker: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['recursive'] = self._serialize.query("recursive_directory_delete", recursive_directory_delete, 'bool')
    +        if marker is not None:
    +            query_parameters['continuation'] = self._serialize.query("marker", marker, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-continuation': self._deserialize('str', response.headers.get('x-ms-continuation')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    delete.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def set_access_control(self, timeout=None, owner=None, group=None, posix_permissions=None, posix_acl=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Set the owner, group, permissions, or access control list for a
    +        directory.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param owner: Optional. The owner of the blob or directory.
    +        :type owner: str
    +        :param group: Optional. The owning group of the blob or directory.
    +        :type group: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_acl: Sets POSIX access control rights on files and
    +         directories. The value is a comma-separated list of access control
    +         entries. Each access control entry (ACE) consists of a scope, a type,
    +         a user or group identifier, and permissions in the format
    +         "[scope:][type]:[id]:[permissions]".
    +        :type posix_acl: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "setAccessControl"
    +
    +        # Construct URL
    +        url = self.set_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if owner is not None:
    +            header_parameters['x-ms-owner'] = self._serialize.header("owner", owner, 'str')
    +        if group is not None:
    +            header_parameters['x-ms-group'] = self._serialize.header("group", group, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_acl is not None:
    +            header_parameters['x-ms-acl'] = self._serialize.header("posix_acl", posix_acl, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_access_control.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def get_access_control(self, timeout=None, upn=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Get the owner, group, permissions, or access control list for a
    +        directory.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param upn: Optional. Valid only when Hierarchical Namespace is
    +         enabled for the account. If "true", the identity values returned in
    +         the x-ms-owner, x-ms-group, and x-ms-acl response headers will be
    +         transformed from Azure Active Directory Object IDs to User Principal
    +         Names.  If "false", the values will be returned as Azure Active
    +         Directory Object IDs. The default value is false.
    +        :type upn: bool
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "getAccessControl"
    +
    +        # Construct URL
    +        url = self.get_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if upn is not None:
    +            query_parameters['upn'] = self._serialize.query("upn", upn, 'bool')
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.head(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-owner': self._deserialize('str', response.headers.get('x-ms-owner')),
    +                'x-ms-group': self._deserialize('str', response.headers.get('x-ms-group')),
    +                'x-ms-permissions': self._deserialize('str', response.headers.get('x-ms-permissions')),
    +                'x-ms-acl': self._deserialize('str', response.headers.get('x-ms-acl')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_access_control.metadata = {'url': '/{filesystem}/{path}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_page_blob_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_page_blob_operations.py
    new file mode 100644
    index 000000000000..70e8048a6803
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_page_blob_operations.py
    @@ -0,0 +1,1348 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class PageBlobOperations(object):
    +    """PageBlobOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_blob_type: Specifies the type of blob to create: block blob, page blob, or append blob. Constant value: "PageBlob".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_blob_type = "PageBlob"
    +
    +    def create(self, content_length, blob_content_length, timeout=None, tier=None, metadata=None, blob_sequence_number=0, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Create operation creates a new page blob.
    +
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param blob_content_length: This header specifies the maximum size for
    +         the page blob, up to 1 TB. The page blob size must be aligned to a
    +         512-byte boundary.
    +        :type blob_content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param tier: Optional. Indicates the tier to be set on the page blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80'
    +        :type tier: str or
    +         ~azure.storage.blob.models.PremiumPageBlobAccessTier
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param blob_sequence_number: Set for page blobs only. The sequence
    +         number is a user-controlled value that you can use to track requests.
    +         The value of the sequence number must be between 0 and 2^63 - 1.
    +        :type blob_sequence_number: long
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-blob-content-length'] = self._serialize.header("blob_content_length", blob_content_length, 'long')
    +        if blob_sequence_number is not None:
    +            header_parameters['x-ms-blob-sequence-number'] = self._serialize.header("blob_sequence_number", blob_sequence_number, 'long')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-blob-type'] = self._serialize.header("self.x_ms_blob_type", self.x_ms_blob_type, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def upload_pages(self, body, content_length, transactional_content_md5=None, transactional_content_crc64=None, timeout=None, range=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, sequence_number_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Upload Pages operation writes a range of pages to a page blob.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param sequence_number_access_conditions: Additional parameters for
    +         the operation
    +        :type sequence_number_access_conditions:
    +         ~azure.storage.blob.models.SequenceNumberAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_sequence_number_less_than_or_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than_or_equal_to = sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to
    +        if_sequence_number_less_than = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than
    +        if_sequence_number_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "page"
    +        page_write = "update"
    +
    +        # Construct URL
    +        url = self.upload_pages.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-page-write'] = self._serialize.header("page_write", page_write, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_sequence_number_less_than_or_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-le'] = self._serialize.header("if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, 'long')
    +        if if_sequence_number_less_than is not None:
    +            header_parameters['x-ms-if-sequence-number-lt'] = self._serialize.header("if_sequence_number_less_than", if_sequence_number_less_than, 'long')
    +        if if_sequence_number_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-eq'] = self._serialize.header("if_sequence_number_equal_to", if_sequence_number_equal_to, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    upload_pages.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def clear_pages(self, content_length, timeout=None, range=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, sequence_number_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Clear Pages operation clears a set of pages from a page blob.
    +
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param sequence_number_access_conditions: Additional parameters for
    +         the operation
    +        :type sequence_number_access_conditions:
    +         ~azure.storage.blob.models.SequenceNumberAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_sequence_number_less_than_or_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than_or_equal_to = sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to
    +        if_sequence_number_less_than = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than
    +        if_sequence_number_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "page"
    +        page_write = "clear"
    +
    +        # Construct URL
    +        url = self.clear_pages.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-page-write'] = self._serialize.header("page_write", page_write, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_sequence_number_less_than_or_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-le'] = self._serialize.header("if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, 'long')
    +        if if_sequence_number_less_than is not None:
    +            header_parameters['x-ms-if-sequence-number-lt'] = self._serialize.header("if_sequence_number_less_than", if_sequence_number_less_than, 'long')
    +        if if_sequence_number_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-eq'] = self._serialize.header("if_sequence_number_equal_to", if_sequence_number_equal_to, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    clear_pages.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def upload_pages_from_url(self, source_url, source_range, content_length, range, source_content_md5=None, source_contentcrc64=None, timeout=None, request_id=None, cpk_info=None, cpk_scope_info=None, lease_access_conditions=None, sequence_number_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, cls=None, **kwargs):
    +        """The Upload Pages operation writes a range of pages to a page blob where
    +        the contents are read from a URL.
    +
    +        :param source_url: Specify a URL to the copy source.
    +        :type source_url: str
    +        :param source_range: Bytes of source data in the specified range. The
    +         length of this range should match the ContentLength header and
    +         x-ms-range/Range destination range header.
    +        :type source_range: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param range: The range of bytes to which the source range would be
    +         written. The range should be 512 aligned and range-end is required.
    +        :type range: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_contentcrc64: Specify the crc64 calculated for the range
    +         of bytes that must be read from the copy source.
    +        :type source_contentcrc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param sequence_number_access_conditions: Additional parameters for
    +         the operation
    +        :type sequence_number_access_conditions:
    +         ~azure.storage.blob.models.SequenceNumberAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_sequence_number_less_than_or_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than_or_equal_to = sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to
    +        if_sequence_number_less_than = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than
    +        if_sequence_number_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        comp = "page"
    +        page_write = "update"
    +
    +        # Construct URL
    +        url = self.upload_pages_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("source_url", source_url, 'str')
    +        header_parameters['x-ms-source-range'] = self._serialize.header("source_range", source_range, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        if source_contentcrc64 is not None:
    +            header_parameters['x-ms-source-content-crc64'] = self._serialize.header("source_contentcrc64", source_contentcrc64, 'bytearray')
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-page-write'] = self._serialize.header("page_write", page_write, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_sequence_number_less_than_or_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-le'] = self._serialize.header("if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, 'long')
    +        if if_sequence_number_less_than is not None:
    +            header_parameters['x-ms-if-sequence-number-lt'] = self._serialize.header("if_sequence_number_less_than", if_sequence_number_less_than, 'long')
    +        if if_sequence_number_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-eq'] = self._serialize.header("if_sequence_number_equal_to", if_sequence_number_equal_to, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    upload_pages_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def get_page_ranges(self, snapshot=None, timeout=None, range=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Get Page Ranges operation returns the list of valid page ranges for
    +        a page blob or snapshot of a page blob.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: PageList or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.PageList
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "pagelist"
    +
    +        # Construct URL
    +        url = self.get_page_ranges.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PageList', response)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'x-ms-blob-content-length': self._deserialize('long', response.headers.get('x-ms-blob-content-length')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_page_ranges.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def get_page_ranges_diff(self, snapshot=None, timeout=None, prevsnapshot=None, prev_snapshot_url=None, range=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Get Page Ranges Diff operation returns the list of valid page
    +        ranges for a page blob that were changed between target blob and
    +        previous snapshot.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param prevsnapshot: Optional in version 2015-07-08 and newer. The
    +         prevsnapshot parameter is a DateTime value that specifies that the
    +         response will contain only pages that were changed between target blob
    +         and previous snapshot. Changed pages include both updated and cleared
    +         pages. The target blob may be a snapshot, as long as the snapshot
    +         specified by prevsnapshot is the older of the two. Note that
    +         incremental snapshots are currently supported only for blobs created
    +         on or after January 1, 2016.
    +        :type prevsnapshot: str
    +        :param prev_snapshot_url: Optional. This header is only supported in
    +         service versions 2019-04-19 and after and specifies the URL of a
    +         previous snapshot of the target blob. The response will only contain
    +         pages that were changed between the target blob and its previous
    +         snapshot.
    +        :type prev_snapshot_url: str
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: PageList or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.PageList
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "pagelist"
    +
    +        # Construct URL
    +        url = self.get_page_ranges_diff.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if prevsnapshot is not None:
    +            query_parameters['prevsnapshot'] = self._serialize.query("prevsnapshot", prevsnapshot, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        if prev_snapshot_url is not None:
    +            header_parameters['x-ms-previous-snapshot-url'] = self._serialize.header("prev_snapshot_url", prev_snapshot_url, 'str')
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PageList', response)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'x-ms-blob-content-length': self._deserialize('long', response.headers.get('x-ms-blob-content-length')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_page_ranges_diff.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def resize(self, blob_content_length, timeout=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Resize the Blob.
    +
    +        :param blob_content_length: This header specifies the maximum size for
    +         the page blob, up to 1 TB. The page blob size must be aligned to a
    +         512-byte boundary.
    +        :type blob_content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.resize.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-blob-content-length'] = self._serialize.header("blob_content_length", blob_content_length, 'long')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    resize.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def update_sequence_number(self, sequence_number_action, timeout=None, blob_sequence_number=0, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Update the sequence number of the blob.
    +
    +        :param sequence_number_action: Required if the
    +         x-ms-blob-sequence-number header is set for the request. This property
    +         applies to page blobs only. This property indicates how the service
    +         should modify the blob's sequence number. Possible values include:
    +         'max', 'update', 'increment'
    +        :type sequence_number_action: str or
    +         ~azure.storage.blob.models.SequenceNumberActionType
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param blob_sequence_number: Set for page blobs only. The sequence
    +         number is a user-controlled value that you can use to track requests.
    +         The value of the sequence number must be between 0 and 2^63 - 1.
    +        :type blob_sequence_number: long
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.update_sequence_number.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-sequence-number-action'] = self._serialize.header("sequence_number_action", sequence_number_action, 'SequenceNumberActionType')
    +        if blob_sequence_number is not None:
    +            header_parameters['x-ms-blob-sequence-number'] = self._serialize.header("blob_sequence_number", blob_sequence_number, 'long')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    update_sequence_number.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def copy_incremental(self, copy_source, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Copy Incremental operation copies a snapshot of the source page
    +        blob to a destination page blob. The snapshot is copied such that only
    +        the differential changes between the previously copied snapshot are
    +        transferred to the destination. The copied snapshots are complete
    +        copies of the original snapshot and can be read or copied from as
    +        usual. This API is supported since REST version 2016-05-31.
    +
    +        :param copy_source: Specifies the name of the source page blob
    +         snapshot. This value is a URL of up to 2 KB in length that specifies a
    +         page blob snapshot. The value should be URL-encoded as it would appear
    +         in a request URI. The source blob must either be public or must be
    +         authenticated via a shared access signature.
    +        :type copy_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "incrementalcopy"
    +
    +        # Construct URL
    +        url = self.copy_incremental.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    copy_incremental.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_service_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_service_operations.py
    new file mode 100644
    index 000000000000..b8f4f8e42323
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/operations/_service_operations.py
    @@ -0,0 +1,566 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class ServiceOperations(object):
    +    """ServiceOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +
    +    def set_properties(self, storage_service_properties, timeout=None, request_id=None, cls=None, **kwargs):
    +        """Sets properties for a storage account's Blob service endpoint,
    +        including properties for Storage Analytics and CORS (Cross-Origin
    +        Resource Sharing) rules.
    +
    +        :param storage_service_properties: The StorageService properties.
    +        :type storage_service_properties:
    +         ~azure.storage.blob.models.StorageServiceProperties
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.set_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(storage_service_properties, 'StorageServiceProperties')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_properties.metadata = {'url': '/'}
    +
    +    def get_properties(self, timeout=None, request_id=None, cls=None, **kwargs):
    +        """gets the properties of a storage account's Blob service, including
    +        properties for Storage Analytics and CORS (Cross-Origin Resource
    +        Sharing) rules.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageServiceProperties or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.StorageServiceProperties
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageServiceProperties', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_properties.metadata = {'url': '/'}
    +
    +    def get_statistics(self, timeout=None, request_id=None, cls=None, **kwargs):
    +        """Retrieves statistics related to replication for the Blob service. It is
    +        only available on the secondary location endpoint when read-access
    +        geo-redundant replication is enabled for the storage account.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageServiceStats or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.StorageServiceStats
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "stats"
    +
    +        # Construct URL
    +        url = self.get_statistics.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageServiceStats', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_statistics.metadata = {'url': '/'}
    +
    +    def list_containers_segment(self, prefix=None, marker=None, maxresults=None, include=None, timeout=None, request_id=None, cls=None, **kwargs):
    +        """The List Containers Segment operation returns a list of the containers
    +        under the specified account.
    +
    +        :param prefix: Filters the results to return only containers whose
    +         name begins with the specified prefix.
    +        :type prefix: str
    +        :param marker: A string value that identifies the portion of the list
    +         of containers to be returned with the next listing operation. The
    +         operation returns the NextMarker value within the response body if the
    +         listing operation did not return all containers remaining to be listed
    +         with the current page. The NextMarker value can be used as the value
    +         for the marker parameter in a subsequent call to request the next page
    +         of list items. The marker value is opaque to the client.
    +        :type marker: str
    +        :param maxresults: Specifies the maximum number of containers to
    +         return. If the request does not specify maxresults, or specifies a
    +         value greater than 5000, the server will return up to 5000 items. Note
    +         that if the listing operation crosses a partition boundary, then the
    +         service will return a continuation token for retrieving the remainder
    +         of the results. For this reason, it is possible that the service will
    +         return fewer results than specified by maxresults, or than the default
    +         of 5000.
    +        :type maxresults: int
    +        :param include: Include this parameter to specify that the container's
    +         metadata be returned as part of the response body. Possible values
    +         include: 'metadata'
    +        :type include: str or
    +         ~azure.storage.blob.models.ListContainersIncludeType
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: ListContainersSegmentResponse or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.ListContainersSegmentResponse
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "list"
    +
    +        # Construct URL
    +        url = self.list_containers_segment.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if prefix is not None:
    +            query_parameters['prefix'] = self._serialize.query("prefix", prefix, 'str')
    +        if marker is not None:
    +            query_parameters['marker'] = self._serialize.query("marker", marker, 'str')
    +        if maxresults is not None:
    +            query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1)
    +        if include is not None:
    +            query_parameters['include'] = self._serialize.query("include", include, 'ListContainersIncludeType')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ListContainersSegmentResponse', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    list_containers_segment.metadata = {'url': '/'}
    +
    +    def get_user_delegation_key(self, key_info, timeout=None, request_id=None, cls=None, **kwargs):
    +        """Retrieves a user delegation key for the Blob service. This is only a
    +        valid operation when using bearer token authentication.
    +
    +        :param key_info:
    +        :type key_info: ~azure.storage.blob.models.KeyInfo
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: UserDelegationKey or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.UserDelegationKey
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "userdelegationkey"
    +
    +        # Construct URL
    +        url = self.get_user_delegation_key.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(key_info, 'KeyInfo')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('UserDelegationKey', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_user_delegation_key.metadata = {'url': '/'}
    +
    +    def get_account_info(self, cls=None, **kwargs):
    +        """Returns the sku name and account kind .
    +
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "account"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_account_info.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-sku-name': self._deserialize(models.SkuName, response.headers.get('x-ms-sku-name')),
    +                'x-ms-account-kind': self._deserialize(models.AccountKind, response.headers.get('x-ms-account-kind')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_account_info.metadata = {'url': '/'}
    +
    +    def submit_batch(self, body, content_length, multipart_content_type, timeout=None, request_id=None, cls=None, **kwargs):
    +        """The Batch operation allows multiple API calls to be embedded into a
    +        single HTTP request.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param multipart_content_type: Required. The value of this header must
    +         be multipart/mixed with a batch boundary. Example header value:
    +         multipart/mixed; boundary=batch_
    +        :type multipart_content_type: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: object or the result of cls(response)
    +        :rtype: Generator
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "batch"
    +
    +        # Construct URL
    +        url = self.submit_batch.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        header_parameters['Content-Type'] = self._serialize.header("multipart_content_type", multipart_content_type, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = self._client._pipeline.run(request, stream=True, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = response.stream_download(self._client._pipeline)
    +            header_dict = {
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    submit_batch.metadata = {'url': '/'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/version.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/version.py
    new file mode 100644
    index 000000000000..629812170000
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_generated/version.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "2019-07-07"
    +
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_lease.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_lease.py
    new file mode 100644
    index 000000000000..92dd0a33e1c0
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_lease.py
    @@ -0,0 +1,311 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, IO, Iterable, AnyStr, Dict, List, Tuple,
    +    TypeVar, TYPE_CHECKING
    +)
    +
    +from azure.core.tracing.decorator import distributed_trace
    +
    +from ._shared.response_handlers import return_response_headers, process_storage_error
    +from ._generated.models import StorageErrorException, LeaseAccessConditions
    +from ._serialize import get_modify_conditions
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from ._generated.operations import BlobOperations, ContainerOperations
    +    BlobClient = TypeVar("BlobClient")
    +    ContainerClient = TypeVar("ContainerClient")
    +
    +
    +def get_access_conditions(lease):
    +    # type: (Optional[Union[BlobLeaseClient, str]]) -> Union[LeaseAccessConditions, None]
    +    try:
    +        lease_id = lease.id # type: ignore
    +    except AttributeError:
    +        lease_id = lease # type: ignore
    +    return LeaseAccessConditions(lease_id=lease_id) if lease_id else None
    +
    +
    +class BlobLeaseClient(object):
    +    """Creates a new BlobLeaseClient.
    +
    +    This client provides lease operations on a BlobClient or ContainerClient.
    +
    +    :ivar str id:
    +        The ID of the lease currently being maintained. This will be `None` if no
    +        lease has yet been acquired.
    +    :ivar str etag:
    +        The ETag of the lease currently being maintained. This will be `None` if no
    +        lease has yet been acquired or modified.
    +    :ivar ~datetime.datetime last_modified:
    +        The last modified timestamp of the lease currently being maintained.
    +        This will be `None` if no lease has yet been acquired or modified.
    +
    +    :param client:
    +        The client of the blob or container to lease.
    +    :type client: ~azure.storage.blob.BlobClient or
    +        ~azure.storage.blob.ContainerClient
    +    :param str lease_id:
    +        A string representing the lease ID of an existing lease. This value does not
    +        need to be specified in order to acquire a new lease, or break one.
    +    """
    +    def __init__(
    +            self, client, lease_id=None
    +    ):  # pylint: disable=missing-client-constructor-parameter-credential,missing-client-constructor-parameter-kwargs
    +        # type: (Union[BlobClient, ContainerClient], Optional[str]) -> None
    +        self.id = lease_id or str(uuid.uuid4())
    +        self.last_modified = None
    +        self.etag = None
    +        if hasattr(client, 'blob_name'):
    +            self._client = client._client.blob  # type: ignore # pylint: disable=protected-access
    +        elif hasattr(client, 'container_name'):
    +            self._client = client._client.container  # type: ignore # pylint: disable=protected-access
    +        else:
    +            raise TypeError("Lease must use either BlobClient or ContainerClient.")
    +
    +    def __enter__(self):
    +        return self
    +
    +    def __exit__(self, *args):
    +        self.release()
    +
    +    @distributed_trace
    +    def acquire(self, lease_duration=-1, **kwargs):
    +        # type: (int, **Any) -> None
    +        """Requests a new lease.
    +
    +        If the container does not have an active lease, the Blob service creates a
    +        lease on the container and returns a new lease ID.
    +
    +        :param int lease_duration:
    +            Specifies the duration of the lease, in seconds, or negative one
    +            (-1) for a lease that never expires. A non-infinite lease can be
    +            between 15 and 60 seconds. A lease duration cannot be changed
    +            using renew or change. Default is -1 (infinite lease).
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = self._client.acquire_lease(
    +                timeout=kwargs.pop('timeout', None),
    +                duration=lease_duration,
    +                proposed_lease_id=self.id,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +        self.etag = kwargs.get('etag')  # type: str
    +
    +    @distributed_trace
    +    def renew(self, **kwargs):
    +        # type: (Any) -> None
    +        """Renews the lease.
    +
    +        The lease can be renewed if the lease ID specified in the
    +        lease client matches that associated with the container or blob. Note that
    +        the lease may be renewed even if it has expired as long as the container
    +        or blob has not been leased again since the expiration of that lease. When you
    +        renew a lease, the lease duration clock resets.
    +
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = self._client.renew_lease(
    +                lease_id=self.id,
    +                timeout=kwargs.pop('timeout', None),
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.etag = response.get('etag')  # type: str
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +
    +    @distributed_trace
    +    def release(self, **kwargs):
    +        # type: (Any) -> None
    +        """Release the lease.
    +
    +        The lease may be released if the client lease id specified matches
    +        that associated with the container or blob. Releasing the lease allows another client
    +        to immediately acquire the lease for the container or blob as soon as the release is complete.
    +
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = self._client.release_lease(
    +                lease_id=self.id,
    +                timeout=kwargs.pop('timeout', None),
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.etag = response.get('etag')  # type: str
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +
    +    @distributed_trace
    +    def change(self, proposed_lease_id, **kwargs):
    +        # type: (str, Any) -> None
    +        """Change the lease ID of an active lease.
    +
    +        :param str proposed_lease_id:
    +            Proposed lease ID, in a GUID string format. The Blob service returns 400
    +            (Invalid request) if the proposed lease ID is not in the correct format.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = self._client.change_lease(
    +                lease_id=self.id,
    +                proposed_lease_id=proposed_lease_id,
    +                timeout=kwargs.pop('timeout', None),
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.etag = response.get('etag')  # type: str
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +
    +    @distributed_trace
    +    def break_lease(self, lease_break_period=None, **kwargs):
    +        # type: (Optional[int], Any) -> int
    +        """Break the lease, if the container or blob has an active lease.
    +
    +        Once a lease is broken, it cannot be renewed. Any authorized request can break the lease;
    +        the request is not required to specify a matching lease ID. When a lease
    +        is broken, the lease break period is allowed to elapse, during which time
    +        no lease operation except break and release can be performed on the container or blob.
    +        When a lease is successfully broken, the response indicates the interval
    +        in seconds until a new lease can be acquired.
    +
    +        :param int lease_break_period:
    +            This is the proposed duration of seconds that the lease
    +            should continue before it is broken, between 0 and 60 seconds. This
    +            break period is only used if it is shorter than the time remaining
    +            on the lease. If longer, the time remaining on the lease is used.
    +            A new lease will not be available before the break period has
    +            expired, but the lease may be held for longer than the break
    +            period. If this header does not appear with a break
    +            operation, a fixed-duration lease breaks after the remaining lease
    +            period elapses, and an infinite lease breaks immediately.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: Approximate time remaining in the lease period, in seconds.
    +        :rtype: int
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = self._client.break_lease(
    +                timeout=kwargs.pop('timeout', None),
    +                break_period=lease_break_period,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return response.get('lease_time') # type: ignore
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_models.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_models.py
    new file mode 100644
    index 000000000000..58dfacad8a92
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_models.py
    @@ -0,0 +1,1085 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=too-few-public-methods, too-many-instance-attributes
    +# pylint: disable=super-init-not-called, too-many-lines
    +
    +from enum import Enum
    +
    +from azure.core.paging import PageIterator, ItemPaged
    +
    +from ._shared import decode_base64_to_text
    +from ._shared.response_handlers import return_context_and_deserialized, process_storage_error
    +from ._shared.models import DictMixin, get_enum_value
    +from ._generated.models import Logging as GeneratedLogging
    +from ._generated.models import Metrics as GeneratedMetrics
    +from ._generated.models import RetentionPolicy as GeneratedRetentionPolicy
    +from ._generated.models import StaticWebsite as GeneratedStaticWebsite
    +from ._generated.models import CorsRule as GeneratedCorsRule
    +from ._generated.models import AccessPolicy as GenAccessPolicy
    +from ._generated.models import StorageErrorException
    +from ._generated.models import BlobPrefix as GenBlobPrefix
    +from ._generated.models import BlobItem
    +
    +
    +class BlobType(str, Enum):
    +
    +    BlockBlob = "BlockBlob"
    +    PageBlob = "PageBlob"
    +    AppendBlob = "AppendBlob"
    +
    +
    +class BlockState(str, Enum):
    +    """Block blob block types."""
    +
    +    Committed = 'Committed'  #: Committed blocks.
    +    Latest = 'Latest'  #: Latest blocks.
    +    Uncommitted = 'Uncommitted'  #: Uncommitted blocks.
    +
    +
    +class StandardBlobTier(str, Enum):
    +    """
    +    Specifies the blob tier to set the blob to. This is only applicable for
    +    block blobs on standard storage accounts.
    +    """
    +
    +    Archive = 'Archive'  #: Archive
    +    Cool = 'Cool'  #: Cool
    +    Hot = 'Hot'  #: Hot
    +
    +
    +class PremiumPageBlobTier(str, Enum):
    +    """
    +    Specifies the page blob tier to set the blob to. This is only applicable to page
    +    blobs on premium storage accounts. Please take a look at:
    +    https://docs.microsoft.com/en-us/azure/storage/storage-premium-storage#scalability-and-performance-targets
    +    for detailed information on the corresponding IOPS and throughput per PageBlobTier.
    +    """
    +
    +    P4 = 'P4'  #: P4 Tier
    +    P6 = 'P6'  #: P6 Tier
    +    P10 = 'P10'  #: P10 Tier
    +    P20 = 'P20'  #: P20 Tier
    +    P30 = 'P30'  #: P30 Tier
    +    P40 = 'P40'  #: P40 Tier
    +    P50 = 'P50'  #: P50 Tier
    +    P60 = 'P60'  #: P60 Tier
    +
    +
    +class SequenceNumberAction(str, Enum):
    +    """Sequence number actions."""
    +
    +    Increment = 'increment'
    +    """
    +    Increments the value of the sequence number by 1. If specifying this option,
    +    do not include the x-ms-blob-sequence-number header.
    +    """
    +
    +    Max = 'max'
    +    """
    +    Sets the sequence number to be the higher of the value included with the
    +    request and the value currently stored for the blob.
    +    """
    +
    +    Update = 'update'
    +    """Sets the sequence number to the value included with the request."""
    +
    +
    +class PublicAccess(str, Enum):
    +    """
    +    Specifies whether data in the container may be accessed publicly and the level of access.
    +    """
    +
    +    OFF = 'off'
    +    """
    +    Specifies that there is no public read access for both the container and blobs within the container.
    +    Clients cannot enumerate the containers within the storage account as well as the blobs within the container.
    +    """
    +
    +    Blob = 'blob'
    +    """
    +    Specifies public read access for blobs. Blob data within this container can be read
    +    via anonymous request, but container data is not available. Clients cannot enumerate
    +    blobs within the container via anonymous request.
    +    """
    +
    +    Container = 'container'
    +    """
    +    Specifies full public read access for container and blob data. Clients can enumerate
    +    blobs within the container via anonymous request, but cannot enumerate containers
    +    within the storage account.
    +    """
    +
    +
    +class BlobAnalyticsLogging(GeneratedLogging):
    +    """Azure Analytics Logging settings.
    +
    +    :keyword str version:
    +        The version of Storage Analytics to configure. The default value is 1.0.
    +    :keyword bool delete:
    +        Indicates whether all delete requests should be logged. The default value is `False`.
    +    :keyword bool read:
    +        Indicates whether all read requests should be logged. The default value is `False`.
    +    :keyword bool write:
    +        Indicates whether all write requests should be logged. The default value is `False`.
    +    :keyword ~azure.storage.blob.RetentionPolicy retention_policy:
    +        Determines how long the associated data should persist. If not specified the retention
    +        policy will be disabled by default.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.version = kwargs.get('version', u'1.0')
    +        self.delete = kwargs.get('delete', False)
    +        self.read = kwargs.get('read', False)
    +        self.write = kwargs.get('write', False)
    +        self.retention_policy = kwargs.get('retention_policy') or RetentionPolicy()
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        if not generated:
    +            return cls()
    +        return cls(
    +            version=generated.version,
    +            delete=generated.delete,
    +            read=generated.read,
    +            write=generated.write,
    +            retention_policy=RetentionPolicy._from_generated(generated.retention_policy)  # pylint: disable=protected-access
    +        )
    +
    +
    +class Metrics(GeneratedMetrics):
    +    """A summary of request statistics grouped by API in hour or minute aggregates
    +    for blobs.
    +
    +    :keyword str version:
    +        The version of Storage Analytics to configure. The default value is 1.0.
    +    :keyword bool enabled:
    +        Indicates whether metrics are enabled for the Blob service.
    +        The default value is `False`.
    +    :keyword bool include_apis:
    +        Indicates whether metrics should generate summary statistics for called API operations.
    +    :keyword ~azure.storage.blob.RetentionPolicy retention_policy:
    +        Determines how long the associated data should persist. If not specified the retention
    +        policy will be disabled by default.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.version = kwargs.get('version', u'1.0')
    +        self.enabled = kwargs.get('enabled', False)
    +        self.include_apis = kwargs.get('include_apis')
    +        self.retention_policy = kwargs.get('retention_policy') or RetentionPolicy()
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        if not generated:
    +            return cls()
    +        return cls(
    +            version=generated.version,
    +            enabled=generated.enabled,
    +            include_apis=generated.include_apis,
    +            retention_policy=RetentionPolicy._from_generated(generated.retention_policy)  # pylint: disable=protected-access
    +        )
    +
    +
    +class RetentionPolicy(GeneratedRetentionPolicy):
    +    """The retention policy which determines how long the associated data should
    +    persist.
    +
    +    :param bool enabled:
    +        Indicates whether a retention policy is enabled for the storage service.
    +        The default value is False.
    +    :param int days:
    +        Indicates the number of days that metrics or logging or
    +        soft-deleted data should be retained. All data older than this value will
    +        be deleted. If enabled=True, the number of days must be specified.
    +    """
    +
    +    def __init__(self, enabled=False, days=None):
    +        self.enabled = enabled
    +        self.days = days
    +        if self.enabled and (self.days is None):
    +            raise ValueError("If policy is enabled, 'days' must be specified.")
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        if not generated:
    +            return cls()
    +        return cls(
    +            enabled=generated.enabled,
    +            days=generated.days,
    +        )
    +
    +
    +class StaticWebsite(GeneratedStaticWebsite):
    +    """The properties that enable an account to host a static website.
    +
    +    :keyword bool enabled:
    +        Indicates whether this account is hosting a static website.
    +        The default value is `False`.
    +    :keyword str index_document:
    +        The default name of the index page under each directory.
    +    :keyword str error_document404_path:
    +        The absolute path of the custom 404 page.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.enabled = kwargs.get('enabled', False)
    +        if self.enabled:
    +            self.index_document = kwargs.get('index_document')
    +            self.error_document404_path = kwargs.get('error_document404_path')
    +        else:
    +            self.index_document = None
    +            self.error_document404_path = None
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        if not generated:
    +            return cls()
    +        return cls(
    +            enabled=generated.enabled,
    +            index_document=generated.index_document,
    +            error_document404_path=generated.error_document404_path,
    +        )
    +
    +
    +class CorsRule(GeneratedCorsRule):
    +    """CORS is an HTTP feature that enables a web application running under one
    +    domain to access resources in another domain. Web browsers implement a
    +    security restriction known as same-origin policy that prevents a web page
    +    from calling APIs in a different domain; CORS provides a secure way to
    +    allow one domain (the origin domain) to call APIs in another domain.
    +
    +    :param list(str) allowed_origins:
    +        A list of origin domains that will be allowed via CORS, or "*" to allow
    +        all domains. The list of must contain at least one entry. Limited to 64
    +        origin domains. Each allowed origin can have up to 256 characters.
    +    :param list(str) allowed_methods:
    +        A list of HTTP methods that are allowed to be executed by the origin.
    +        The list of must contain at least one entry. For Azure Storage,
    +        permitted methods are DELETE, GET, HEAD, MERGE, POST, OPTIONS or PUT.
    +    :keyword list(str) allowed_headers:
    +        Defaults to an empty list. A list of headers allowed to be part of
    +        the cross-origin request. Limited to 64 defined headers and 2 prefixed
    +        headers. Each header can be up to 256 characters.
    +    :keyword list(str) exposed_headers:
    +        Defaults to an empty list. A list of response headers to expose to CORS
    +        clients. Limited to 64 defined headers and two prefixed headers. Each
    +        header can be up to 256 characters.
    +    :keyword int max_age_in_seconds:
    +        The number of seconds that the client/browser should cache a
    +        preflight response.
    +    """
    +
    +    def __init__(self, allowed_origins, allowed_methods, **kwargs):
    +        self.allowed_origins = ','.join(allowed_origins)
    +        self.allowed_methods = ','.join(allowed_methods)
    +        self.allowed_headers = ','.join(kwargs.get('allowed_headers', []))
    +        self.exposed_headers = ','.join(kwargs.get('exposed_headers', []))
    +        self.max_age_in_seconds = kwargs.get('max_age_in_seconds', 0)
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        return cls(
    +            [generated.allowed_origins],
    +            [generated.allowed_methods],
    +            allowed_headers=[generated.allowed_headers],
    +            exposed_headers=[generated.exposed_headers],
    +            max_age_in_seconds=generated.max_age_in_seconds,
    +        )
    +
    +
    +class ContainerProperties(DictMixin):
    +    """Blob container's properties class.
    +
    +    Returned ``ContainerProperties`` instances expose these values through a
    +    dictionary interface, for example: ``container_props["last_modified"]``.
    +    Additionally, the container name is available as ``container_props["name"]``.
    +
    +    :ivar ~datetime.datetime last_modified:
    +        A datetime object representing the last time the container was modified.
    +    :ivar str etag:
    +        The ETag contains a value that you can use to perform operations
    +        conditionally.
    +    :ivar ~azure.storage.blob.LeaseProperties lease:
    +        Stores all the lease information for the container.
    +    :ivar str public_access: Specifies whether data in the container may be accessed
    +        publicly and the level of access.
    +    :ivar bool has_immutability_policy:
    +        Represents whether the container has an immutability policy.
    +    :ivar bool has_legal_hold:
    +        Represents whether the container has a legal hold.
    +    :ivar dict metadata: A dict with name-value pairs to associate with the
    +        container as metadata.
    +    :ivar ~azure.storage.blob.ContainerEncryptionScope encryption_scope:
    +        The default encryption scope configuration for the container.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.name = None
    +        self.last_modified = kwargs.get('Last-Modified')
    +        self.etag = kwargs.get('ETag')
    +        self.lease = LeaseProperties(**kwargs)
    +        self.public_access = kwargs.get('x-ms-blob-public-access')
    +        self.has_immutability_policy = kwargs.get('x-ms-has-immutability-policy')
    +        self.has_legal_hold = kwargs.get('x-ms-has-legal-hold')
    +        self.metadata = kwargs.get('metadata')
    +        self.encryption_scope = None
    +        default_encryption_scope = kwargs.get('x-ms-default-encryption-scope')
    +        if default_encryption_scope:
    +            self.encryption_scope = ContainerEncryptionScope(
    +                default_encryption_scope=default_encryption_scope,
    +                prevent_encryption_scope_override=kwargs.get('x-ms-deny-encryption-scope-override', False)
    +            )
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        props = cls()
    +        props.name = generated.name
    +        props.last_modified = generated.properties.last_modified
    +        props.etag = generated.properties.etag
    +        props.lease = LeaseProperties._from_generated(generated)  # pylint: disable=protected-access
    +        props.public_access = generated.properties.public_access
    +        props.has_immutability_policy = generated.properties.has_immutability_policy
    +        props.has_legal_hold = generated.properties.has_legal_hold
    +        props.metadata = generated.metadata
    +        props.encryption_scope = ContainerEncryptionScope._from_generated(generated)  #pylint: disable=protected-access
    +        return props
    +
    +
    +class ContainerPropertiesPaged(PageIterator):
    +    """An Iterable of Container properties.
    +
    +    :ivar str service_endpoint: The service URL.
    +    :ivar str prefix: A container name prefix being used to filter the list.
    +    :ivar str marker: The continuation token of the current page of results.
    +    :ivar int results_per_page: The maximum number of results retrieved per API call.
    +    :ivar str continuation_token: The continuation token to retrieve the next page of results.
    +    :ivar str location_mode: The location mode being used to list results. The available
    +        options include "primary" and "secondary".
    +    :ivar current_page: The current page of listed results.
    +    :vartype current_page: list(~azure.storage.blob.ContainerProperties)
    +
    +    :param callable command: Function to retrieve the next page of items.
    +    :param str prefix: Filters the results to return only containers whose names
    +        begin with the specified prefix.
    +    :param int results_per_page: The maximum number of container names to retrieve per
    +        call.
    +    :param str continuation_token: An opaque continuation token.
    +    """
    +    def __init__(self, command, prefix=None, results_per_page=None, continuation_token=None):
    +        super(ContainerPropertiesPaged, self).__init__(
    +            get_next=self._get_next_cb,
    +            extract_data=self._extract_data_cb,
    +            continuation_token=continuation_token or ""
    +        )
    +        self._command = command
    +        self.service_endpoint = None
    +        self.prefix = prefix
    +        self.marker = None
    +        self.results_per_page = results_per_page
    +        self.location_mode = None
    +        self.current_page = []
    +
    +    def _get_next_cb(self, continuation_token):
    +        try:
    +            return self._command(
    +                marker=continuation_token or None,
    +                maxresults=self.results_per_page,
    +                cls=return_context_and_deserialized,
    +                use_location=self.location_mode)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _extract_data_cb(self, get_next_return):
    +        self.location_mode, self._response = get_next_return
    +        self.service_endpoint = self._response.service_endpoint
    +        self.prefix = self._response.prefix
    +        self.marker = self._response.marker
    +        self.results_per_page = self._response.max_results
    +        self.current_page = [self._build_item(item) for item in self._response.container_items]
    +
    +        return self._response.next_marker or None, self.current_page
    +
    +    @staticmethod
    +    def _build_item(item):
    +        return ContainerProperties._from_generated(item)  # pylint: disable=protected-access
    +
    +
    +class BlobProperties(DictMixin):
    +    """
    +    Blob Properties.
    +
    +    :ivar str name:
    +        The name of the blob.
    +    :ivar str container:
    +        The container in which the blob resides.
    +    :ivar str snapshot:
    +        Datetime value that uniquely identifies the blob snapshot.
    +    :ivar ~azure.blob.storage.BlobType blob_type:
    +        String indicating this blob's type.
    +    :ivar dict metadata:
    +        Name-value pairs associated with the blob as metadata.
    +    :ivar ~datetime.datetime last_modified:
    +        A datetime object representing the last time the blob was modified.
    +    :ivar str etag:
    +        The ETag contains a value that you can use to perform operations
    +        conditionally.
    +    :ivar int size:
    +        The size of the content returned. If the entire blob was requested,
    +        the length of blob in bytes. If a subset of the blob was requested, the
    +        length of the returned subset.
    +    :ivar str content_range:
    +        Indicates the range of bytes returned in the event that the client
    +        requested a subset of the blob.
    +    :ivar int append_blob_committed_block_count:
    +        (For Append Blobs) Number of committed blocks in the blob.
    +    :ivar int page_blob_sequence_number:
    +        (For Page Blobs) Sequence number for page blob used for coordinating
    +        concurrent writes.
    +    :ivar bool server_encrypted:
    +        Set to true if the blob is encrypted on the server.
    +    :ivar ~azure.storage.blob.CopyProperties copy:
    +        Stores all the copy properties for the blob.
    +    :ivar ~azure.storage.blob.ContentSettings content_settings:
    +        Stores all the content settings for the blob.
    +    :ivar ~azure.storage.blob.LeaseProperties lease:
    +        Stores all the lease information for the blob.
    +    :ivar ~azure.storage.blob.StandardBlobTier blob_tier:
    +        Indicates the access tier of the blob. The hot tier is optimized
    +        for storing data that is accessed frequently. The cool storage tier
    +        is optimized for storing data that is infrequently accessed and stored
    +        for at least a month. The archive tier is optimized for storing
    +        data that is rarely accessed and stored for at least six months
    +        with flexible latency requirements.
    +    :ivar ~datetime.datetime blob_tier_change_time:
    +        Indicates when the access tier was last changed.
    +    :ivar bool blob_tier_inferred:
    +        Indicates whether the access tier was inferred by the service.
    +        If false, it indicates that the tier was set explicitly.
    +    :ivar bool deleted:
    +        Whether this blob was deleted.
    +    :ivar ~datetime.datetime deleted_time:
    +        A datetime object representing the time at which the blob was deleted.
    +    :ivar int remaining_retention_days:
    +        The number of days that the blob will be retained before being permanently deleted by the service.
    +    :ivar ~datetime.datetime creation_time:
    +        Indicates when the blob was created, in UTC.
    +    :ivar str archive_status:
    +        Archive status of blob.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.name = kwargs.get('name')
    +        self.container = None
    +        self.snapshot = kwargs.get('x-ms-snapshot')
    +        self.blob_type = BlobType(kwargs['x-ms-blob-type']) if kwargs.get('x-ms-blob-type') else None
    +        self.metadata = kwargs.get('metadata')
    +        self.encrypted_metadata = kwargs.get('encrypted_metadata')
    +        self.last_modified = kwargs.get('Last-Modified')
    +        self.etag = kwargs.get('ETag')
    +        self.size = kwargs.get('Content-Length')
    +        self.content_range = kwargs.get('Content-Range')
    +        self.append_blob_committed_block_count = kwargs.get('x-ms-blob-committed-block-count')
    +        self.page_blob_sequence_number = kwargs.get('x-ms-blob-sequence-number')
    +        self.server_encrypted = kwargs.get('x-ms-server-encrypted')
    +        self.copy = CopyProperties(**kwargs)
    +        self.content_settings = ContentSettings(**kwargs)
    +        self.lease = LeaseProperties(**kwargs)
    +        self.blob_tier = kwargs.get('x-ms-access-tier')
    +        self.blob_tier_change_time = kwargs.get('x-ms-access-tier-change-time')
    +        self.blob_tier_inferred = kwargs.get('x-ms-access-tier-inferred')
    +        self.deleted = False
    +        self.deleted_time = None
    +        self.remaining_retention_days = None
    +        self.creation_time = kwargs.get('x-ms-creation-time')
    +        self.archive_status = kwargs.get('x-ms-archive-status')
    +        self.encryption_key_sha256 = kwargs.get('x-ms-encryption-key-sha256')
    +        self.encryption_scope = kwargs.get('x-ms-encryption-scope')
    +        self.request_server_encrypted = kwargs.get('x-ms-server-encrypted')
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        blob = BlobProperties()
    +        blob.name = generated.name
    +        blob_type = get_enum_value(generated.properties.blob_type)
    +        blob.blob_type = BlobType(blob_type) if blob_type else None
    +        blob.etag = generated.properties.etag
    +        blob.deleted = generated.deleted
    +        blob.snapshot = generated.snapshot
    +        blob.metadata = generated.metadata.additional_properties if generated.metadata else {}
    +        blob.encrypted_metadata = generated.metadata.encrypted if generated.metadata else None
    +        blob.lease = LeaseProperties._from_generated(generated)  # pylint: disable=protected-access
    +        blob.copy = CopyProperties._from_generated(generated)  # pylint: disable=protected-access
    +        blob.last_modified = generated.properties.last_modified
    +        blob.creation_time = generated.properties.creation_time
    +        blob.content_settings = ContentSettings._from_generated(generated)  # pylint: disable=protected-access
    +        blob.size = generated.properties.content_length
    +        blob.page_blob_sequence_number = generated.properties.blob_sequence_number
    +        blob.server_encrypted = generated.properties.server_encrypted
    +        blob.encryption_scope = generated.properties.encryption_scope
    +        blob.deleted_time = generated.properties.deleted_time
    +        blob.remaining_retention_days = generated.properties.remaining_retention_days
    +        blob.blob_tier = generated.properties.access_tier
    +        blob.blob_tier_inferred = generated.properties.access_tier_inferred
    +        blob.archive_status = generated.properties.archive_status
    +        blob.blob_tier_change_time = generated.properties.access_tier_change_time
    +        return blob
    +
    +
    +class BlobPropertiesPaged(PageIterator):
    +    """An Iterable of Blob properties.
    +
    +    :ivar str service_endpoint: The service URL.
    +    :ivar str prefix: A blob name prefix being used to filter the list.
    +    :ivar str marker: The continuation token of the current page of results.
    +    :ivar int results_per_page: The maximum number of results retrieved per API call.
    +    :ivar str continuation_token: The continuation token to retrieve the next page of results.
    +    :ivar str location_mode: The location mode being used to list results. The available
    +        options include "primary" and "secondary".
    +    :ivar current_page: The current page of listed results.
    +    :vartype current_page: list(~azure.storage.blob.BlobProperties)
    +    :ivar str container: The container that the blobs are listed from.
    +    :ivar str delimiter: A delimiting character used for hierarchy listing.
    +
    +    :param callable command: Function to retrieve the next page of items.
    +    :param str container: The name of the container.
    +    :param str prefix: Filters the results to return only blobs whose names
    +        begin with the specified prefix.
    +    :param int results_per_page: The maximum number of blobs to retrieve per
    +        call.
    +    :param str continuation_token: An opaque continuation token.
    +    :param str delimiter:
    +        Used to capture blobs whose names begin with the same substring up to
    +        the appearance of the delimiter character. The delimiter may be a single
    +        character or a string.
    +    :param location_mode: Specifies the location the request should be sent to.
    +        This mode only applies for RA-GRS accounts which allow secondary read access.
    +        Options include 'primary' or 'secondary'.
    +    """
    +    def __init__(
    +            self, command,
    +            container=None,
    +            prefix=None,
    +            results_per_page=None,
    +            continuation_token=None,
    +            delimiter=None,
    +            location_mode=None):
    +        super(BlobPropertiesPaged, self).__init__(
    +            get_next=self._get_next_cb,
    +            extract_data=self._extract_data_cb,
    +            continuation_token=continuation_token or ""
    +        )
    +        self._command = command
    +        self.service_endpoint = None
    +        self.prefix = prefix
    +        self.marker = None
    +        self.results_per_page = results_per_page
    +        self.container = container
    +        self.delimiter = delimiter
    +        self.current_page = None
    +        self.location_mode = location_mode
    +
    +    def _get_next_cb(self, continuation_token):
    +        try:
    +            return self._command(
    +                prefix=self.prefix,
    +                marker=continuation_token or None,
    +                maxresults=self.results_per_page,
    +                cls=return_context_and_deserialized,
    +                use_location=self.location_mode)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _extract_data_cb(self, get_next_return):
    +        self.location_mode, self._response = get_next_return
    +        self.service_endpoint = self._response.service_endpoint
    +        self.prefix = self._response.prefix
    +        self.marker = self._response.marker
    +        self.results_per_page = self._response.max_results
    +        self.container = self._response.container_name
    +        self.current_page = [self._build_item(item) for item in self._response.segment.blob_items]
    +
    +        return self._response.next_marker or None, self.current_page
    +
    +    def _build_item(self, item):
    +        if isinstance(item, BlobProperties):
    +            return item
    +        if isinstance(item, BlobItem):
    +            blob = BlobProperties._from_generated(item)  # pylint: disable=protected-access
    +            blob.container = self.container
    +            return blob
    +        return item
    +
    +
    +class BlobPrefix(ItemPaged, DictMixin):
    +    """An Iterable of Blob properties.
    +
    +    Returned from walk_blobs when a delimiter is used.
    +    Can be thought of as a virtual blob directory.
    +
    +    :ivar str name: The prefix, or "directory name" of the blob.
    +    :ivar str service_endpoint: The service URL.
    +    :ivar str prefix: A blob name prefix being used to filter the list.
    +    :ivar str marker: The continuation token of the current page of results.
    +    :ivar int results_per_page: The maximum number of results retrieved per API call.
    +    :ivar str next_marker: The continuation token to retrieve the next page of results.
    +    :ivar str location_mode: The location mode being used to list results. The available
    +        options include "primary" and "secondary".
    +    :ivar current_page: The current page of listed results.
    +    :vartype current_page: list(~azure.storage.blob.BlobProperties)
    +    :ivar str container: The container that the blobs are listed from.
    +    :ivar str delimiter: A delimiting character used for hierarchy listing.
    +
    +    :param callable command: Function to retrieve the next page of items.
    +    :param str prefix: Filters the results to return only blobs whose names
    +        begin with the specified prefix.
    +    :param int results_per_page: The maximum number of blobs to retrieve per
    +        call.
    +    :param str marker: An opaque continuation token.
    +    :param str delimiter:
    +        Used to capture blobs whose names begin with the same substring up to
    +        the appearance of the delimiter character. The delimiter may be a single
    +        character or a string.
    +    :param location_mode: Specifies the location the request should be sent to.
    +        This mode only applies for RA-GRS accounts which allow secondary read access.
    +        Options include 'primary' or 'secondary'.
    +    """
    +    def __init__(self, *args, **kwargs):
    +        super(BlobPrefix, self).__init__(*args, page_iterator_class=BlobPrefixPaged, **kwargs)
    +        self.name = kwargs.get('prefix')
    +        self.prefix = kwargs.get('prefix')
    +        self.results_per_page = kwargs.get('results_per_page')
    +        self.container = kwargs.get('container')
    +        self.delimiter = kwargs.get('delimiter')
    +        self.location_mode = kwargs.get('location_mode')
    +
    +
    +class BlobPrefixPaged(BlobPropertiesPaged):
    +    def __init__(self, *args, **kwargs):
    +        super(BlobPrefixPaged, self).__init__(*args, **kwargs)
    +        self.name = self.prefix
    +
    +    def _extract_data_cb(self, get_next_return):
    +        continuation_token, _ = super(BlobPrefixPaged, self)._extract_data_cb(get_next_return)
    +        self.current_page = self._response.segment.blob_prefixes + self._response.segment.blob_items
    +        self.current_page = [self._build_item(item) for item in self.current_page]
    +        self.delimiter = self._response.delimiter
    +
    +        return continuation_token, self.current_page
    +
    +    def _build_item(self, item):
    +        item = super(BlobPrefixPaged, self)._build_item(item)
    +        if isinstance(item, GenBlobPrefix):
    +            return BlobPrefix(
    +                self._command,
    +                container=self.container,
    +                prefix=item.name,
    +                results_per_page=self.results_per_page,
    +                location_mode=self.location_mode)
    +        return item
    +
    +
    +class LeaseProperties(DictMixin):
    +    """Blob Lease Properties.
    +
    +    :ivar str status:
    +        The lease status of the blob. Possible values: locked|unlocked
    +    :ivar str state:
    +        Lease state of the blob. Possible values: available|leased|expired|breaking|broken
    +    :ivar str duration:
    +        When a blob is leased, specifies whether the lease is of infinite or fixed duration.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.status = get_enum_value(kwargs.get('x-ms-lease-status'))
    +        self.state = get_enum_value(kwargs.get('x-ms-lease-state'))
    +        self.duration = get_enum_value(kwargs.get('x-ms-lease-duration'))
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        lease = cls()
    +        lease.status = get_enum_value(generated.properties.lease_status)
    +        lease.state = get_enum_value(generated.properties.lease_state)
    +        lease.duration = get_enum_value(generated.properties.lease_duration)
    +        return lease
    +
    +
    +class ContentSettings(DictMixin):
    +    """The content settings of a blob.
    +
    +    :param str content_type:
    +        The content type specified for the blob. If no content type was
    +        specified, the default content type is application/octet-stream.
    +    :param str content_encoding:
    +        If the content_encoding has previously been set
    +        for the blob, that value is stored.
    +    :param str content_language:
    +        If the content_language has previously been set
    +        for the blob, that value is stored.
    +    :param str content_disposition:
    +        content_disposition conveys additional information about how to
    +        process the response payload, and also can be used to attach
    +        additional metadata. If content_disposition has previously been set
    +        for the blob, that value is stored.
    +    :param str cache_control:
    +        If the cache_control has previously been set for
    +        the blob, that value is stored.
    +    :param str content_md5:
    +        If the content_md5 has been set for the blob, this response
    +        header is stored so that the client can check for message content
    +        integrity.
    +    """
    +
    +    def __init__(
    +            self, content_type=None, content_encoding=None,
    +            content_language=None, content_disposition=None,
    +            cache_control=None, content_md5=None, **kwargs):
    +
    +        self.content_type = content_type or kwargs.get('Content-Type')
    +        self.content_encoding = content_encoding or kwargs.get('Content-Encoding')
    +        self.content_language = content_language or kwargs.get('Content-Language')
    +        self.content_md5 = content_md5 or kwargs.get('Content-MD5')
    +        self.content_disposition = content_disposition or kwargs.get('Content-Disposition')
    +        self.cache_control = cache_control or kwargs.get('Cache-Control')
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        settings = cls()
    +        settings.content_type = generated.properties.content_type or None
    +        settings.content_encoding = generated.properties.content_encoding or None
    +        settings.content_language = generated.properties.content_language or None
    +        settings.content_md5 = generated.properties.content_md5 or None
    +        settings.content_disposition = generated.properties.content_disposition or None
    +        settings.cache_control = generated.properties.cache_control or None
    +        return settings
    +
    +
    +class CopyProperties(DictMixin):
    +    """Blob Copy Properties.
    +
    +    These properties will be `None` if this blob has never been the destination
    +    in a Copy Blob operation, or if this blob has been modified after a concluded
    +    Copy Blob operation, for example, using Set Blob Properties, Upload Blob, or Commit Block List.
    +
    +    :ivar str id:
    +        String identifier for the last attempted Copy Blob operation where this blob
    +        was the destination blob.
    +    :ivar str source:
    +        URL up to 2 KB in length that specifies the source blob used in the last attempted
    +        Copy Blob operation where this blob was the destination blob.
    +    :ivar str status:
    +        State of the copy operation identified by Copy ID, with these values:
    +            success:
    +                Copy completed successfully.
    +            pending:
    +                Copy is in progress. Check copy_status_description if intermittent,
    +                non-fatal errors impede copy progress but don't cause failure.
    +            aborted:
    +                Copy was ended by Abort Copy Blob.
    +            failed:
    +                Copy failed. See copy_status_description for failure details.
    +    :ivar str progress:
    +        Contains the number of bytes copied and the total bytes in the source in the last
    +        attempted Copy Blob operation where this blob was the destination blob. Can show
    +        between 0 and Content-Length bytes copied.
    +    :ivar ~datetime.datetime completion_time:
    +        Conclusion time of the last attempted Copy Blob operation where this blob was the
    +        destination blob. This value can specify the time of a completed, aborted, or
    +        failed copy attempt.
    +    :ivar str status_description:
    +        Only appears when x-ms-copy-status is failed or pending. Describes cause of fatal
    +        or non-fatal copy operation failure.
    +    :ivar bool incremental_copy:
    +        Copies the snapshot of the source page blob to a destination page blob.
    +        The snapshot is copied such that only the differential changes between
    +        the previously copied snapshot are transferred to the destination
    +    :ivar ~datetime.datetime destination_snapshot:
    +        Included if the blob is incremental copy blob or incremental copy snapshot,
    +        if x-ms-copy-status is success. Snapshot time of the last successful
    +        incremental copy snapshot for this blob.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.id = kwargs.get('x-ms-copy-id')
    +        self.source = kwargs.get('x-ms-copy-source')
    +        self.status = get_enum_value(kwargs.get('x-ms-copy-status'))
    +        self.progress = kwargs.get('x-ms-copy-progress')
    +        self.completion_time = kwargs.get('x-ms-copy-completion_time')
    +        self.status_description = kwargs.get('x-ms-copy-status-description')
    +        self.incremental_copy = kwargs.get('x-ms-incremental-copy')
    +        self.destination_snapshot = kwargs.get('x-ms-copy-destination-snapshot')
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        copy = cls()
    +        copy.id = generated.properties.copy_id or None
    +        copy.status = get_enum_value(generated.properties.copy_status) or None
    +        copy.source = generated.properties.copy_source or None
    +        copy.progress = generated.properties.copy_progress or None
    +        copy.completion_time = generated.properties.copy_completion_time or None
    +        copy.status_description = generated.properties.copy_status_description or None
    +        copy.incremental_copy = generated.properties.incremental_copy or None
    +        copy.destination_snapshot = generated.properties.destination_snapshot or None
    +        return copy
    +
    +
    +class BlobBlock(DictMixin):
    +    """BlockBlob Block class.
    +
    +    :param str block_id:
    +        Block id.
    +    :param str state:
    +        Block state. Possible values: committed|uncommitted
    +    :ivar int size:
    +        Block size in bytes.
    +    """
    +
    +    def __init__(self, block_id, state=BlockState.Latest):
    +        self.id = block_id
    +        self.state = state
    +        self.size = None
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        block = cls(decode_base64_to_text(generated.name))
    +        block.size = generated.size
    +        return block
    +
    +
    +class PageRange(DictMixin):
    +    """Page Range for page blob.
    +
    +    :param int start:
    +        Start of page range in bytes.
    +    :param int end:
    +        End of page range in bytes.
    +    """
    +
    +    def __init__(self, start=None, end=None):
    +        self.start = start
    +        self.end = end
    +
    +
    +class AccessPolicy(GenAccessPolicy):
    +    """Access Policy class used by the set and get access policy methods in each service.
    +
    +    A stored access policy can specify the start time, expiry time, and
    +    permissions for the Shared Access Signatures with which it's associated.
    +    Depending on how you want to control access to your resource, you can
    +    specify all of these parameters within the stored access policy, and omit
    +    them from the URL for the Shared Access Signature. Doing so permits you to
    +    modify the associated signature's behavior at any time, as well as to revoke
    +    it. Or you can specify one or more of the access policy parameters within
    +    the stored access policy, and the others on the URL. Finally, you can
    +    specify all of the parameters on the URL. In this case, you can use the
    +    stored access policy to revoke the signature, but not to modify its behavior.
    +
    +    Together the Shared Access Signature and the stored access policy must
    +    include all fields required to authenticate the signature. If any required
    +    fields are missing, the request will fail. Likewise, if a field is specified
    +    both in the Shared Access Signature URL and in the stored access policy, the
    +    request will fail with status code 400 (Bad Request).
    +
    +    :param permission:
    +        The permissions associated with the shared access signature. The
    +        user is restricted to operations allowed by the permissions.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has been
    +        specified in an associated stored access policy.
    +    :type permission: str or ~azure.storage.blob.ContainerSasPermissions
    +    :param expiry:
    +        The time at which the shared access signature becomes invalid.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has
    +        been specified in an associated stored access policy. Azure will always
    +        convert values to UTC. If a date is passed in without timezone info, it
    +        is assumed to be UTC.
    +    :type expiry: ~datetime.datetime or str
    +    :param start:
    +        The time at which the shared access signature becomes valid. If
    +        omitted, start time for this call is assumed to be the time when the
    +        storage service receives the request. Azure will always convert values
    +        to UTC. If a date is passed in without timezone info, it is assumed to
    +        be UTC.
    +    :type start: ~datetime.datetime or str
    +    """
    +    def __init__(self, permission=None, expiry=None, start=None):
    +        self.start = start
    +        self.expiry = expiry
    +        self.permission = permission
    +
    +
    +class ContainerSasPermissions(object):
    +    """ContainerSasPermissions class to be used with the
    +    :func:`~azure.storage.blob.generate_container_sas` function and
    +    for the AccessPolicies used with
    +    :func:`~azure.storage.blob.ContainerClient.set_container_access_policy`.
    +
    +    :param bool read:
    +        Read the content, properties, metadata or block list of any blob in the
    +        container. Use any blob in the container as the source of a copy operation.
    +    :param bool write:
    +        For any blob in the container, create or write content, properties,
    +        metadata, or block list. Snapshot or lease the blob. Resize the blob
    +        (page blob only). Use the blob as the destination of a copy operation
    +        within the same account. Note: You cannot grant permissions to read or
    +        write container properties or metadata, nor to lease a container, with
    +        a container SAS. Use an account SAS instead.
    +    :param bool delete:
    +        Delete any blob in the container. Note: You cannot grant permissions to
    +        delete a container with a container SAS. Use an account SAS instead.
    +    :param bool list:
    +        List blobs in the container.
    +    """
    +    def __init__(self, read=False, write=False, delete=False, list=False):  # pylint: disable=redefined-builtin
    +        self.read = read
    +        self.write = write
    +        self.delete = delete
    +        self.list = list
    +        self._str = (('r' if self.read else '') +
    +                     ('w' if self.write else '') +
    +                     ('d' if self.delete else '') +
    +                     ('l' if self.list else ''))
    +
    +    def __str__(self):
    +        return self._str
    +
    +    @classmethod
    +    def from_string(cls, permission):
    +        """Create a ContainerSasPermissions from a string.
    +
    +        To specify read, write, delete, or list permissions you need only to
    +        include the first letter of the word in the string. E.g. For read and
    +        write permissions, you would provide a string "rw".
    +
    +        :param str permission: The string which dictates the read, write, delete,
    +            and list permissions.
    +        :return: A ContainerSasPermissions object
    +        :rtype: ~azure.storage.blob.ContainerSasPermissions
    +        """
    +        p_read = 'r' in permission
    +        p_write = 'w' in permission
    +        p_delete = 'd' in permission
    +        p_list = 'l' in permission
    +        parsed = cls(p_read, p_write, p_delete, p_list)
    +        parsed._str = permission # pylint: disable = protected-access
    +        return parsed
    +
    +
    +class BlobSasPermissions(object):
    +    """BlobSasPermissions class to be used with the
    +    :func:`~azure.storage.blob.generate_blob_sas` function.
    +
    +    :param bool read:
    +        Read the content, properties, metadata and block list. Use the blob as
    +        the source of a copy operation.
    +    :param bool add:
    +        Add a block to an append blob.
    +    :param bool create:
    +        Write a new blob, snapshot a blob, or copy a blob to a new blob.
    +    :param bool write:
    +        Create or write content, properties, metadata, or block list. Snapshot
    +        or lease the blob. Resize the blob (page blob only). Use the blob as the
    +        destination of a copy operation within the same account.
    +    :param bool delete:
    +        Delete the blob.
    +    """
    +    def __init__(self, read=False, add=False, create=False, write=False,
    +                 delete=False):
    +        self.read = read
    +        self.add = add
    +        self.create = create
    +        self.write = write
    +        self.delete = delete
    +        self._str = (('r' if self.read else '') +
    +                     ('a' if self.add else '') +
    +                     ('c' if self.create else '') +
    +                     ('w' if self.write else '') +
    +                     ('d' if self.delete else ''))
    +
    +    def __str__(self):
    +        return self._str
    +
    +    @classmethod
    +    def from_string(cls, permission):
    +        """Create a BlobSasPermissions from a string.
    +
    +        To specify read, add, create, write, or delete permissions you need only to
    +        include the first letter of the word in the string. E.g. For read and
    +        write permissions, you would provide a string "rw".
    +
    +        :param str permission: The string which dictates the read, add, create,
    +            write, or delete permissions.
    +        :return: A BlobSasPermissions object
    +        :rtype: ~azure.storage.blob.BlobSasPermissions
    +        """
    +        p_read = 'r' in permission
    +        p_add = 'a' in permission
    +        p_create = 'c' in permission
    +        p_write = 'w' in permission
    +        p_delete = 'd' in permission
    +
    +        parsed = cls(p_read, p_add, p_create, p_write, p_delete)
    +        parsed._str = permission # pylint: disable = protected-access
    +        return parsed
    +
    +
    +class CustomerProvidedEncryptionKey(object):
    +    """
    +    All data in Azure Storage is encrypted at-rest using an account-level encryption key.
    +    In versions 2018-06-17 and newer, you can manage the key used to encrypt blob contents
    +    and application metadata per-blob by providing an AES-256 encryption key in requests to the storage service.
    +
    +    When you use a customer-provided key, Azure Storage does not manage or persist your key.
    +    When writing data to a blob, the provided key is used to encrypt your data before writing it to disk.
    +    A SHA-256 hash of the encryption key is written alongside the blob contents,
    +    and is used to verify that all subsequent operations against the blob use the same encryption key.
    +    This hash cannot be used to retrieve the encryption key or decrypt the contents of the blob.
    +    When reading a blob, the provided key is used to decrypt your data after reading it from disk.
    +    In both cases, the provided encryption key is securely discarded
    +    as soon as the encryption or decryption process completes.
    +
    +    :param str key_value:
    +        Base64-encoded AES-256 encryption key value.
    +    :param str key_hash:
    +        Base64-encoded SHA256 of the encryption key.
    +    :ivar str algorithm:
    +        Specifies the algorithm to use when encrypting data using the given key. Must be AES256.
    +    """
    +    def __init__(self, key_value, key_hash):
    +        self.key_value = key_value
    +        self.key_hash = key_hash
    +        self.algorithm = 'AES256'
    +
    +
    +class ContainerEncryptionScope(object):
    +    """The default encryption scope configuration for a container.
    +
    +    This scope is used implicitly for all future writes within the container,
    +    but can be overridden per blob operation.
    +
    +    .. versionadded:: 12.2.0
    +
    +    :param str default_encryption_scope:
    +        Specifies the default encryption scope to set on the container and use for
    +        all future writes.
    +    :param bool prevent_encryption_scope_override:
    +        If true, prevents any request from specifying a different encryption scope than the scope
    +        set on the container. Default value is false.
    +    """
    +
    +    def __init__(self, default_encryption_scope, **kwargs):
    +        self.default_encryption_scope = default_encryption_scope
    +        self.prevent_encryption_scope_override = kwargs.get('prevent_encryption_scope_override', False)
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        if generated.properties.default_encryption_scope:
    +            scope = cls(
    +                generated.properties.default_encryption_scope,
    +                prevent_encryption_scope_override=generated.properties.deny_encryption_scope_override or False
    +            )
    +            return scope
    +        return None
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_serialize.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_serialize.py
    new file mode 100644
    index 000000000000..0f202b865ce3
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_serialize.py
    @@ -0,0 +1,103 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=no-self-use
    +
    +from azure.core import MatchConditions
    +
    +from ._models import ContainerEncryptionScope
    +from ._generated.models import (
    +    ModifiedAccessConditions,
    +    SourceModifiedAccessConditions,
    +    CpkScopeInfo,
    +    ContainerCpkScopeInfo
    +)
    +
    +
    +_SUPPORTED_API_VERSIONS = [
    +    '2019-02-02',
    +    '2019-07-07'
    +]
    +
    +
    +def _get_match_headers(kwargs, match_param, etag_param):
    +    # type: (str) -> Tuple(Dict[str, Any], Optional[str], Optional[str])
    +    if_match = None
    +    if_none_match = None
    +    match_condition = kwargs.pop(match_param, None)
    +    if match_condition == MatchConditions.IfNotModified:
    +        if_match = kwargs.pop(etag_param, None)
    +        if not if_match:
    +            raise ValueError("'{}' specified without '{}'.".format(match_param, etag_param))
    +    elif match_condition == MatchConditions.IfPresent:
    +        if_match = '*'
    +    elif match_condition == MatchConditions.IfModified:
    +        if_none_match = kwargs.pop(etag_param, None)
    +        if not if_none_match:
    +            raise ValueError("'{}' specified without '{}'.".format(match_param, etag_param))
    +    elif match_condition == MatchConditions.IfMissing:
    +        if_none_match = '*'
    +    elif match_condition is None:
    +        if etag_param in kwargs:
    +            raise ValueError("'{}' specified without '{}'.".format(etag_param, match_param))
    +    else:
    +        raise TypeError("Invalid match condition: {}".format(match_condition))
    +    return if_match, if_none_match
    +
    +
    +def get_modify_conditions(kwargs):
    +    # type: (Dict[str, Any]) -> ModifiedAccessConditions
    +    if_match, if_none_match = _get_match_headers(kwargs, 'match_condition', 'etag')
    +    return ModifiedAccessConditions(
    +        if_modified_since=kwargs.pop('if_modified_since', None),
    +        if_unmodified_since=kwargs.pop('if_unmodified_since', None),
    +        if_match=if_match or kwargs.pop('if_match', None),
    +        if_none_match=if_none_match or kwargs.pop('if_none_match', None)
    +    )
    +
    +
    +def get_source_conditions(kwargs):
    +    # type: (Dict[str, Any]) -> SourceModifiedAccessConditions
    +    if_match, if_none_match = _get_match_headers(kwargs, 'source_match_condition', 'source_etag')
    +    return SourceModifiedAccessConditions(
    +        source_if_modified_since=kwargs.pop('source_if_modified_since', None),
    +        source_if_unmodified_since=kwargs.pop('source_if_unmodified_since', None),
    +        source_if_match=if_match or kwargs.pop('source_if_match', None),
    +        source_if_none_match=if_none_match or kwargs.pop('source_if_none_match', None)
    +    )
    +
    +
    +def get_cpk_scope_info(kwargs):
    +    # type: (Dict[str, Any]) -> CpkScopeInfo
    +    if 'encryption_scope' in kwargs:
    +        return CpkScopeInfo(encryption_scope=kwargs.pop('encryption_scope'))
    +    return None
    +
    +
    +def get_container_cpk_scope_info(kwargs):
    +    # type: (Dict[str, Any]) -> ContainerCpkScopeInfo
    +    encryption_scope = kwargs.pop('container_encryption_scope', None)
    +    if encryption_scope:
    +        if isinstance(encryption_scope, ContainerEncryptionScope):
    +            return ContainerCpkScopeInfo(
    +                default_encryption_scope=encryption_scope.default_encryption_scope,
    +                deny_encryption_scope_override=encryption_scope.prevent_encryption_scope_override
    +            )
    +        if isinstance(encryption_scope, dict):
    +            return ContainerCpkScopeInfo(
    +                default_encryption_scope=encryption_scope['default_encryption_scope'],
    +                deny_encryption_scope_override=encryption_scope.get('prevent_encryption_scope_override')
    +            )
    +        raise TypeError("Container encryption scope must be dict or type ContainerEncryptionScope.")
    +    return None
    +
    +
    +def get_api_version(kwargs, default):
    +    # type: (Dict[str, Any]) -> str
    +    api_version = kwargs.pop('api_version', None)
    +    if api_version and api_version not in _SUPPORTED_API_VERSIONS:
    +        versions = '\n'.join(_SUPPORTED_API_VERSIONS)
    +        raise ValueError("Unsupported API version '{}'. Please select from:\n{}".format(api_version, versions))
    +    return api_version or default
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/__init__.py
    new file mode 100644
    index 000000000000..160f88223820
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/__init__.py
    @@ -0,0 +1,56 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import base64
    +import hashlib
    +import hmac
    +
    +try:
    +    from urllib.parse import quote, unquote
    +except ImportError:
    +    from urllib2 import quote, unquote # type: ignore
    +
    +import six
    +
    +
    +def url_quote(url):
    +    return quote(url)
    +
    +
    +def url_unquote(url):
    +    return unquote(url)
    +
    +
    +def encode_base64(data):
    +    if isinstance(data, six.text_type):
    +        data = data.encode('utf-8')
    +    encoded = base64.b64encode(data)
    +    return encoded.decode('utf-8')
    +
    +
    +def decode_base64_to_bytes(data):
    +    if isinstance(data, six.text_type):
    +        data = data.encode('utf-8')
    +    return base64.b64decode(data)
    +
    +
    +def decode_base64_to_text(data):
    +    decoded_bytes = decode_base64_to_bytes(data)
    +    return decoded_bytes.decode('utf-8')
    +
    +
    +def sign_string(key, string_to_sign, key_is_base64=True):
    +    if key_is_base64:
    +        key = decode_base64_to_bytes(key)
    +    else:
    +        if isinstance(key, six.text_type):
    +            key = key.encode('utf-8')
    +    if isinstance(string_to_sign, six.text_type):
    +        string_to_sign = string_to_sign.encode('utf-8')
    +    signed_hmac_sha256 = hmac.HMAC(key, string_to_sign, hashlib.sha256)
    +    digest = signed_hmac_sha256.digest()
    +    encoded_digest = encode_base64(digest)
    +    return encoded_digest
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/authentication.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/authentication.py
    new file mode 100644
    index 000000000000..a8db96d4a051
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/authentication.py
    @@ -0,0 +1,136 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import logging
    +import sys
    +
    +try:
    +    from urllib.parse import urlparse, unquote
    +except ImportError:
    +    from urlparse import urlparse # type: ignore
    +    from urllib2 import unquote # type: ignore
    +
    +try:
    +    from yarl import URL
    +except ImportError:
    +    pass
    +
    +try:
    +    from azure.core.pipeline.transport import AioHttpTransport
    +except ImportError:
    +    AioHttpTransport = None
    +
    +from azure.core.exceptions import ClientAuthenticationError
    +from azure.core.pipeline.policies import SansIOHTTPPolicy
    +
    +from . import sign_string
    +
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +# wraps a given exception with the desired exception type
    +def _wrap_exception(ex, desired_type):
    +    msg = ""
    +    if ex.args:
    +        msg = ex.args[0]
    +    if sys.version_info >= (3,):
    +        # Automatic chaining in Python 3 means we keep the trace
    +        return desired_type(msg)
    +    # There isn't a good solution in 2 for keeping the stack trace
    +    # in general, or that will not result in an error in 3
    +    # However, we can keep the previous error type and message
    +    # TODO: In the future we will log the trace
    +    return desired_type('{}: {}'.format(ex.__class__.__name__, msg))
    +
    +
    +class AzureSigningError(ClientAuthenticationError):
    +    """
    +    Represents a fatal error when attempting to sign a request.
    +    In general, the cause of this exception is user error. For example, the given account key is not valid.
    +    Please visit https://docs.microsoft.com/en-us/azure/storage/common/storage-create-storage-account for more info.
    +    """
    +
    +
    +# pylint: disable=no-self-use
    +class SharedKeyCredentialPolicy(SansIOHTTPPolicy):
    +
    +    def __init__(self, account_name, account_key):
    +        self.account_name = account_name
    +        self.account_key = account_key
    +        super(SharedKeyCredentialPolicy, self).__init__()
    +
    +    def _get_headers(self, request, headers_to_sign):
    +        headers = dict((name.lower(), value) for name, value in request.http_request.headers.items() if value)
    +        if 'content-length' in headers and headers['content-length'] == '0':
    +            del headers['content-length']
    +        return '\n'.join(headers.get(x, '') for x in headers_to_sign) + '\n'
    +
    +    def _get_verb(self, request):
    +        return request.http_request.method + '\n'
    +
    +    def _get_canonicalized_resource(self, request):
    +        uri_path = urlparse(request.http_request.url).path
    +        try:
    +            if isinstance(request.context.transport, AioHttpTransport) or \
    +                isinstance(getattr(request.context.transport, "_transport", None), AioHttpTransport):
    +                uri_path = URL(uri_path)
    +                return '/' + self.account_name + str(uri_path)
    +        except TypeError:
    +            pass
    +        return '/' + self.account_name + uri_path
    +
    +    def _get_canonicalized_headers(self, request):
    +        string_to_sign = ''
    +        x_ms_headers = []
    +        for name, value in request.http_request.headers.items():
    +            if name.startswith('x-ms-'):
    +                x_ms_headers.append((name.lower(), value))
    +        x_ms_headers.sort()
    +        for name, value in x_ms_headers:
    +            if value is not None:
    +                string_to_sign += ''.join([name, ':', value, '\n'])
    +        return string_to_sign
    +
    +    def _get_canonicalized_resource_query(self, request):
    +        sorted_queries = [(name, value) for name, value in request.http_request.query.items()]
    +        sorted_queries.sort()
    +
    +        string_to_sign = ''
    +        for name, value in sorted_queries:
    +            if value is not None:
    +                string_to_sign += '\n' + name.lower() + ':' + unquote(value)
    +
    +        return string_to_sign
    +
    +    def _add_authorization_header(self, request, string_to_sign):
    +        try:
    +            signature = sign_string(self.account_key, string_to_sign)
    +            auth_string = 'SharedKey ' + self.account_name + ':' + signature
    +            request.http_request.headers['Authorization'] = auth_string
    +        except Exception as ex:
    +            # Wrap any error that occurred as signing error
    +            # Doing so will clarify/locate the source of problem
    +            raise _wrap_exception(ex, AzureSigningError)
    +
    +    def on_request(self, request):
    +        string_to_sign = \
    +            self._get_verb(request) + \
    +            self._get_headers(
    +                request,
    +                [
    +                    'content-encoding', 'content-language', 'content-length',
    +                    'content-md5', 'content-type', 'date', 'if-modified-since',
    +                    'if-match', 'if-none-match', 'if-unmodified-since', 'byte_range'
    +                ]
    +            ) + \
    +            self._get_canonicalized_headers(request) + \
    +            self._get_canonicalized_resource(request) + \
    +            self._get_canonicalized_resource_query(request)
    +
    +        self._add_authorization_header(request, string_to_sign)
    +        #logger.debug("String_to_sign=%s", string_to_sign)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/base_client.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/base_client.py
    new file mode 100644
    index 000000000000..30a89cfd13ec
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/base_client.py
    @@ -0,0 +1,427 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union,
    +    Optional,
    +    Any,
    +    Iterable,
    +    Dict,
    +    List,
    +    Type,
    +    Tuple,
    +    TYPE_CHECKING,
    +)
    +import logging
    +
    +try:
    +    from urllib.parse import parse_qs, quote
    +except ImportError:
    +    from urlparse import parse_qs  # type: ignore
    +    from urllib2 import quote  # type: ignore
    +
    +import six
    +
    +from azure.core.configuration import Configuration
    +from azure.core.exceptions import HttpResponseError
    +from azure.core.pipeline import Pipeline
    +from azure.core.pipeline.transport import RequestsTransport, HttpTransport
    +from azure.core.pipeline.policies import (
    +    RedirectPolicy,
    +    ContentDecodePolicy,
    +    BearerTokenCredentialPolicy,
    +    ProxyPolicy,
    +    DistributedTracingPolicy,
    +    HttpLoggingPolicy,
    +)
    +
    +from .constants import STORAGE_OAUTH_SCOPE, SERVICE_HOST_BASE, CONNECTION_TIMEOUT, READ_TIMEOUT
    +from .models import LocationMode
    +from .authentication import SharedKeyCredentialPolicy
    +from .shared_access_signature import QueryStringConstants
    +from .policies import (
    +    StorageHeadersPolicy,
    +    StorageUserAgentPolicy,
    +    StorageContentValidation,
    +    StorageRequestHook,
    +    StorageResponseHook,
    +    StorageLoggingPolicy,
    +    StorageHosts,
    +    QueueMessagePolicy,
    +    ExponentialRetry,
    +)
    +from .._generated.models import StorageErrorException
    +from .response_handlers import process_storage_error, PartialBatchErrorException
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +_SERVICE_PARAMS = {
    +    "blob": {"primary": "BlobEndpoint", "secondary": "BlobSecondaryEndpoint"},
    +    "queue": {"primary": "QueueEndpoint", "secondary": "QueueSecondaryEndpoint"},
    +    "file": {"primary": "FileEndpoint", "secondary": "FileSecondaryEndpoint"},
    +    "dfs": {"primary": "BlobEndpoint", "secondary": "BlobSecondaryEndpoint"},
    +}
    +
    +
    +class StorageAccountHostsMixin(object):  # pylint: disable=too-many-instance-attributes
    +    def __init__(
    +        self,
    +        parsed_url,  # type: Any
    +        service,  # type: str
    +        credential=None,  # type: Optional[Any]
    +        **kwargs  # type: Any
    +    ):
    +        # type: (...) -> None
    +        self._location_mode = kwargs.get("_location_mode", LocationMode.PRIMARY)
    +        self._hosts = kwargs.get("_hosts")
    +        self.scheme = parsed_url.scheme
    +
    +        if service not in ["blob", "queue", "file-share", "dfs"]:
    +            raise ValueError("Invalid service: {}".format(service))
    +        service_name = service.split('-')[0]
    +        account = parsed_url.netloc.split(".{}.core.".format(service_name))
    +        self.account_name = account[0] if len(account) > 1 else None
    +        secondary_hostname = None
    +
    +        self.credential = format_shared_key_credential(account, credential)
    +        if self.scheme.lower() != "https" and hasattr(self.credential, "get_token"):
    +            raise ValueError("Token credential is only supported with HTTPS.")
    +        if hasattr(self.credential, "account_name"):
    +            self.account_name = self.credential.account_name
    +            secondary_hostname = "{}-secondary.{}.{}".format(
    +                self.credential.account_name, service_name, SERVICE_HOST_BASE)
    +
    +        if not self._hosts:
    +            if len(account) > 1:
    +                secondary_hostname = parsed_url.netloc.replace(account[0], account[0] + "-secondary")
    +            if kwargs.get("secondary_hostname"):
    +                secondary_hostname = kwargs["secondary_hostname"]
    +            primary_hostname = (parsed_url.netloc + parsed_url.path).rstrip('/')
    +            self._hosts = {LocationMode.PRIMARY: primary_hostname, LocationMode.SECONDARY: secondary_hostname}
    +
    +        self.require_encryption = kwargs.get("require_encryption", False)
    +        self.key_encryption_key = kwargs.get("key_encryption_key")
    +        self.key_resolver_function = kwargs.get("key_resolver_function")
    +        self._config, self._pipeline = self._create_pipeline(self.credential, storage_sdk=service, **kwargs)
    +
    +    def __enter__(self):
    +        self._client.__enter__()
    +        return self
    +
    +    def __exit__(self, *args):
    +        self._client.__exit__(*args)
    +
    +    def close(self):
    +        """ This method is to close the sockets opened by the client.
    +        It need not be used when using with a context manager.
    +        """
    +        self._client.close()
    +
    +    @property
    +    def url(self):
    +        """The full endpoint URL to this entity, including SAS token if used.
    +
    +        This could be either the primary endpoint,
    +        or the secondary endpoint depending on the current :func:`location_mode`.
    +        """
    +        return self._format_url(self._hosts[self._location_mode])
    +
    +    @property
    +    def primary_endpoint(self):
    +        """The full primary endpoint URL.
    +
    +        :type: str
    +        """
    +        return self._format_url(self._hosts[LocationMode.PRIMARY])
    +
    +    @property
    +    def primary_hostname(self):
    +        """The hostname of the primary endpoint.
    +
    +        :type: str
    +        """
    +        return self._hosts[LocationMode.PRIMARY]
    +
    +    @property
    +    def secondary_endpoint(self):
    +        """The full secondary endpoint URL if configured.
    +
    +        If not available a ValueError will be raised. To explicitly specify a secondary hostname, use the optional
    +        `secondary_hostname` keyword argument on instantiation.
    +
    +        :type: str
    +        :raise ValueError:
    +        """
    +        if not self._hosts[LocationMode.SECONDARY]:
    +            raise ValueError("No secondary host configured.")
    +        return self._format_url(self._hosts[LocationMode.SECONDARY])
    +
    +    @property
    +    def secondary_hostname(self):
    +        """The hostname of the secondary endpoint.
    +
    +        If not available this will be None. To explicitly specify a secondary hostname, use the optional
    +        `secondary_hostname` keyword argument on instantiation.
    +
    +        :type: str or None
    +        """
    +        return self._hosts[LocationMode.SECONDARY]
    +
    +    @property
    +    def location_mode(self):
    +        """The location mode that the client is currently using.
    +
    +        By default this will be "primary". Options include "primary" and "secondary".
    +
    +        :type: str
    +        """
    +
    +        return self._location_mode
    +
    +    @location_mode.setter
    +    def location_mode(self, value):
    +        if self._hosts.get(value):
    +            self._location_mode = value
    +            self._client._config.url = self.url  # pylint: disable=protected-access
    +        else:
    +            raise ValueError("No host URL for location mode: {}".format(value))
    +
    +    @property
    +    def api_version(self):
    +        """The version of the Storage API used for requests.
    +
    +        :type: str
    +        """
    +        return self._client._config.version  # pylint: disable=protected-access
    +
    +    def _format_query_string(self, sas_token, credential, snapshot=None, share_snapshot=None):
    +        query_str = "?"
    +        if snapshot:
    +            query_str += "snapshot={}&".format(self.snapshot)
    +        if share_snapshot:
    +            query_str += "sharesnapshot={}&".format(self.snapshot)
    +        if sas_token and not credential:
    +            query_str += sas_token
    +        elif is_credential_sastoken(credential):
    +            query_str += credential.lstrip("?")
    +            credential = None
    +        return query_str.rstrip("?&"), credential
    +
    +    def _create_pipeline(self, credential, **kwargs):
    +        # type: (Any, **Any) -> Tuple[Configuration, Pipeline]
    +        self._credential_policy = None
    +        if hasattr(credential, "get_token"):
    +            self._credential_policy = BearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
    +        elif isinstance(credential, SharedKeyCredentialPolicy):
    +            self._credential_policy = credential
    +        elif credential is not None:
    +            raise TypeError("Unsupported credential: {}".format(credential))
    +
    +        config = kwargs.get("_configuration") or create_configuration(**kwargs)
    +        if kwargs.get("_pipeline"):
    +            return config, kwargs["_pipeline"]
    +        config.transport = kwargs.get("transport")  # type: ignore
    +        kwargs.setdefault("connection_timeout", CONNECTION_TIMEOUT)
    +        kwargs.setdefault("read_timeout", READ_TIMEOUT)
    +        if not config.transport:
    +            config.transport = RequestsTransport(**kwargs)
    +        policies = [
    +            QueueMessagePolicy(),
    +            config.headers_policy,
    +            config.proxy_policy,
    +            config.user_agent_policy,
    +            StorageContentValidation(),
    +            StorageRequestHook(**kwargs),
    +            self._credential_policy,
    +            ContentDecodePolicy(response_encoding="utf-8"),
    +            RedirectPolicy(**kwargs),
    +            StorageHosts(hosts=self._hosts, **kwargs),
    +            config.retry_policy,
    +            config.logging_policy,
    +            StorageResponseHook(**kwargs),
    +            DistributedTracingPolicy(**kwargs),
    +            HttpLoggingPolicy(**kwargs)
    +        ]
    +        return config, Pipeline(config.transport, policies=policies)
    +
    +    def _batch_send(
    +        self, *reqs,  # type: HttpRequest
    +        **kwargs
    +    ):
    +        """Given a series of request, do a Storage batch call.
    +        """
    +        # Pop it here, so requests doesn't feel bad about additional kwarg
    +        raise_on_any_failure = kwargs.pop("raise_on_any_failure", True)
    +        request = self._client._client.post(  # pylint: disable=protected-access
    +            url='https://{}/?comp=batch'.format(self.primary_hostname),
    +            headers={
    +                'x-ms-version': self.api_version
    +            }
    +        )
    +
    +        request.set_multipart_mixed(
    +            *reqs,
    +            policies=[
    +                StorageHeadersPolicy(),
    +                self._credential_policy
    +            ]
    +        )
    +
    +        pipeline_response = self._pipeline.run(
    +            request, **kwargs
    +        )
    +        response = pipeline_response.http_response
    +
    +        try:
    +            if response.status_code not in [202]:
    +                raise HttpResponseError(response=response)
    +            parts = response.parts()
    +            if raise_on_any_failure:
    +                parts = list(response.parts())
    +                if any(p for p in parts if not 200 <= p.status_code < 300):
    +                    error = PartialBatchErrorException(
    +                        message="There is a partial failure in the batch operation.",
    +                        response=response, parts=parts
    +                    )
    +                    raise error
    +                return iter(parts)
    +            return parts
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +class TransportWrapper(HttpTransport):
    +    """Wrapper class that ensures that an inner client created
    +    by a `get_client` method does not close the outer transport for the parent
    +    when used in a context manager.
    +    """
    +    def __init__(self, transport):
    +        self._transport = transport
    +
    +    def send(self, request, **kwargs):
    +        return self._transport.send(request, **kwargs)
    +
    +    def open(self):
    +        pass
    +
    +    def close(self):
    +        pass
    +
    +    def __enter__(self):
    +        pass
    +
    +    def __exit__(self, *args):  # pylint: disable=arguments-differ
    +        pass
    +
    +
    +def format_shared_key_credential(account, credential):
    +    if isinstance(credential, six.string_types):
    +        if len(account) < 2:
    +            raise ValueError("Unable to determine account name for shared key credential.")
    +        credential = {"account_name": account[0], "account_key": credential}
    +    if isinstance(credential, dict):
    +        if "account_name" not in credential:
    +            raise ValueError("Shared key credential missing 'account_name")
    +        if "account_key" not in credential:
    +            raise ValueError("Shared key credential missing 'account_key")
    +        return SharedKeyCredentialPolicy(**credential)
    +    return credential
    +
    +
    +def parse_connection_str(conn_str, credential, service):
    +    conn_str = conn_str.rstrip(";")
    +    conn_settings = [s.split("=", 1) for s in conn_str.split(";")]
    +    if any(len(tup) != 2 for tup in conn_settings):
    +        raise ValueError("Connection string is either blank or malformed.")
    +    conn_settings = dict(conn_settings)
    +    endpoints = _SERVICE_PARAMS[service]
    +    primary = None
    +    secondary = None
    +    if not credential:
    +        try:
    +            credential = {"account_name": conn_settings["AccountName"], "account_key": conn_settings["AccountKey"]}
    +        except KeyError:
    +            credential = conn_settings.get("SharedAccessSignature")
    +    if endpoints["primary"] in conn_settings:
    +        primary = conn_settings[endpoints["primary"]]
    +        if endpoints["secondary"] in conn_settings:
    +            secondary = conn_settings[endpoints["secondary"]]
    +    else:
    +        if endpoints["secondary"] in conn_settings:
    +            raise ValueError("Connection string specifies only secondary endpoint.")
    +        try:
    +            primary = "{}://{}.{}.{}".format(
    +                conn_settings["DefaultEndpointsProtocol"],
    +                conn_settings["AccountName"],
    +                service,
    +                conn_settings["EndpointSuffix"],
    +            )
    +            secondary = "{}-secondary.{}.{}".format(
    +                conn_settings["AccountName"], service, conn_settings["EndpointSuffix"]
    +            )
    +        except KeyError:
    +            pass
    +
    +    if not primary:
    +        try:
    +            primary = "https://{}.{}.{}".format(
    +                conn_settings["AccountName"], service, conn_settings.get("EndpointSuffix", SERVICE_HOST_BASE)
    +            )
    +        except KeyError:
    +            raise ValueError("Connection string missing required connection details.")
    +    return primary, secondary, credential
    +
    +
    +def create_configuration(**kwargs):
    +    # type: (**Any) -> Configuration
    +    config = Configuration(**kwargs)
    +    config.headers_policy = StorageHeadersPolicy(**kwargs)
    +    config.user_agent_policy = StorageUserAgentPolicy(**kwargs)
    +    config.retry_policy = kwargs.get("retry_policy") or ExponentialRetry(**kwargs)
    +    config.logging_policy = StorageLoggingPolicy(**kwargs)
    +    config.proxy_policy = ProxyPolicy(**kwargs)
    +
    +    # Storage settings
    +    config.max_single_put_size = kwargs.get("max_single_put_size", 64 * 1024 * 1024)
    +    config.copy_polling_interval = 15
    +
    +    # Block blob uploads
    +    config.max_block_size = kwargs.get("max_block_size", 4 * 1024 * 1024)
    +    config.min_large_block_upload_threshold = kwargs.get("min_large_block_upload_threshold", 4 * 1024 * 1024 + 1)
    +    config.use_byte_buffer = kwargs.get("use_byte_buffer", False)
    +
    +    # Page blob uploads
    +    config.max_page_size = kwargs.get("max_page_size", 4 * 1024 * 1024)
    +
    +    # Blob downloads
    +    config.max_single_get_size = kwargs.get("max_single_get_size", 32 * 1024 * 1024)
    +    config.max_chunk_get_size = kwargs.get("max_chunk_get_size", 4 * 1024 * 1024)
    +
    +    # File uploads
    +    config.max_range_size = kwargs.get("max_range_size", 4 * 1024 * 1024)
    +    return config
    +
    +
    +def parse_query(query_str):
    +    sas_values = QueryStringConstants.to_list()
    +    parsed_query = {k: v[0] for k, v in parse_qs(query_str).items()}
    +    sas_params = ["{}={}".format(k, quote(v, safe='')) for k, v in parsed_query.items() if k in sas_values]
    +    sas_token = None
    +    if sas_params:
    +        sas_token = "&".join(sas_params)
    +
    +    snapshot = parsed_query.get("snapshot") or parsed_query.get("sharesnapshot")
    +    return snapshot, sas_token
    +
    +
    +def is_credential_sastoken(credential):
    +    if not credential or not isinstance(credential, six.string_types):
    +        return False
    +
    +    sas_values = QueryStringConstants.to_list()
    +    parsed_query = parse_qs(credential.lstrip("?"))
    +    if parsed_query and all([k in sas_values for k in parsed_query.keys()]):
    +        return True
    +    return False
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/base_client_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/base_client_async.py
    new file mode 100644
    index 000000000000..3c806d796864
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/base_client_async.py
    @@ -0,0 +1,176 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, Dict, List, Type, Tuple,
    +    TYPE_CHECKING
    +)
    +import logging
    +from azure.core.pipeline import AsyncPipeline
    +from azure.core.async_paging import AsyncList
    +from azure.core.exceptions import HttpResponseError
    +from azure.core.pipeline.policies import (
    +    ContentDecodePolicy,
    +    AsyncBearerTokenCredentialPolicy,
    +    AsyncRedirectPolicy,
    +    DistributedTracingPolicy,
    +    HttpLoggingPolicy,
    +)
    +from azure.core.pipeline.transport import AsyncHttpTransport
    +
    +from .constants import STORAGE_OAUTH_SCOPE, CONNECTION_TIMEOUT, READ_TIMEOUT
    +from .authentication import SharedKeyCredentialPolicy
    +from .base_client import create_configuration
    +from .policies import (
    +    StorageContentValidation,
    +    StorageRequestHook,
    +    StorageHosts,
    +    StorageHeadersPolicy,
    +    QueueMessagePolicy
    +)
    +from .policies_async import AsyncStorageResponseHook
    +
    +from .._generated.models import StorageErrorException
    +from .response_handlers import process_storage_error, PartialBatchErrorException
    +
    +if TYPE_CHECKING:
    +    from azure.core.pipeline import Pipeline
    +    from azure.core.pipeline.transport import HttpRequest
    +    from azure.core.configuration import Configuration
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +class AsyncStorageAccountHostsMixin(object):
    +
    +    def __enter__(self):
    +        raise TypeError("Async client only supports 'async with'.")
    +
    +    def __exit__(self, *args):
    +        pass
    +
    +    async def __aenter__(self):
    +        await self._client.__aenter__()
    +        return self
    +
    +    async def __aexit__(self, *args):
    +        await self._client.__aexit__(*args)
    +
    +    async def close(self):
    +        """ This method is to close the sockets opened by the client.
    +        It need not be used when using with a context manager.
    +        """
    +        await self._client.close()
    +
    +    def _create_pipeline(self, credential, **kwargs):
    +        # type: (Any, **Any) -> Tuple[Configuration, Pipeline]
    +        self._credential_policy = None
    +        if hasattr(credential, 'get_token'):
    +            self._credential_policy = AsyncBearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
    +        elif isinstance(credential, SharedKeyCredentialPolicy):
    +            self._credential_policy = credential
    +        elif credential is not None:
    +            raise TypeError("Unsupported credential: {}".format(credential))
    +        config = kwargs.get('_configuration') or create_configuration(**kwargs)
    +        if kwargs.get('_pipeline'):
    +            return config, kwargs['_pipeline']
    +        config.transport = kwargs.get('transport')  # type: ignore
    +        kwargs.setdefault("connection_timeout", CONNECTION_TIMEOUT)
    +        kwargs.setdefault("read_timeout", READ_TIMEOUT)
    +        if not config.transport:
    +            try:
    +                from azure.core.pipeline.transport import AioHttpTransport
    +            except ImportError:
    +                raise ImportError("Unable to create async transport. Please check aiohttp is installed.")
    +            config.transport = AioHttpTransport(**kwargs)
    +        policies = [
    +            QueueMessagePolicy(),
    +            config.headers_policy,
    +            config.proxy_policy,
    +            config.user_agent_policy,
    +            StorageContentValidation(),
    +            StorageRequestHook(**kwargs),
    +            self._credential_policy,
    +            ContentDecodePolicy(response_encoding="utf-8"),
    +            AsyncRedirectPolicy(**kwargs),
    +            StorageHosts(hosts=self._hosts, **kwargs), # type: ignore
    +            config.retry_policy,
    +            config.logging_policy,
    +            AsyncStorageResponseHook(**kwargs),
    +            DistributedTracingPolicy(**kwargs),
    +            HttpLoggingPolicy(**kwargs),
    +        ]
    +        return config, AsyncPipeline(config.transport, policies=policies)
    +
    +    async def _batch_send(
    +        self, *reqs: 'HttpRequest',
    +        **kwargs
    +    ):
    +        """Given a series of request, do a Storage batch call.
    +        """
    +        # Pop it here, so requests doesn't feel bad about additional kwarg
    +        raise_on_any_failure = kwargs.pop("raise_on_any_failure", True)
    +        request = self._client._client.post(  # pylint: disable=protected-access
    +            url='https://{}/?comp=batch'.format(self.primary_hostname),
    +            headers={
    +                'x-ms-version': self.api_version
    +            }
    +        )
    +
    +        request.set_multipart_mixed(
    +            *reqs,
    +            policies=[
    +                StorageHeadersPolicy(),
    +                self._credential_policy
    +            ]
    +        )
    +
    +        pipeline_response = await self._pipeline.run(
    +            request, **kwargs
    +        )
    +        response = pipeline_response.http_response
    +
    +        try:
    +            if response.status_code not in [202]:
    +                raise HttpResponseError(response=response)
    +            parts = response.parts() # Return an AsyncIterator
    +            if raise_on_any_failure:
    +                parts_list = []
    +                async for part in parts:
    +                    parts_list.append(part)
    +                if any(p for p in parts_list if not 200 <= p.status_code < 300):
    +                    error = PartialBatchErrorException(
    +                        message="There is a partial failure in the batch operation.",
    +                        response=response, parts=parts_list
    +                    )
    +                    raise error
    +                return AsyncList(parts_list)
    +            return parts
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +
    +class AsyncTransportWrapper(AsyncHttpTransport):
    +    """Wrapper class that ensures that an inner client created
    +    by a `get_client` method does not close the outer transport for the parent
    +    when used in a context manager.
    +    """
    +    def __init__(self, async_transport):
    +        self._transport = async_transport
    +
    +    async def send(self, request, **kwargs):
    +        return await self._transport.send(request, **kwargs)
    +
    +    async def open(self):
    +        pass
    +
    +    async def close(self):
    +        pass
    +
    +    async def __aenter__(self):
    +        pass
    +
    +    async def __aexit__(self, *args):  # pylint: disable=arguments-differ
    +        pass
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/constants.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/constants.py
    new file mode 100644
    index 000000000000..7fb05b559850
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/constants.py
    @@ -0,0 +1,26 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import sys
    +from .._generated.version import VERSION
    +
    +
    +X_MS_VERSION = VERSION
    +
    +# Socket timeout in seconds
    +CONNECTION_TIMEOUT = 20
    +READ_TIMEOUT = 20
    +
    +# for python 3.5+, there was a change to the definition of the socket timeout (as far as socket.sendall is concerned)
    +# The socket timeout is now the maximum total duration to send all data.
    +if sys.version_info >= (3, 5):
    +    # the timeout to connect is 20 seconds, and the read timeout is 2000 seconds
    +    # the 2000 seconds was calculated with: 100MB (max block size)/ 50KB/s (an arbitrarily chosen minimum upload speed)
    +    READ_TIMEOUT = 2000
    +
    +STORAGE_OAUTH_SCOPE = "https://storage.azure.com/.default"
    +
    +SERVICE_HOST_BASE = 'core.windows.net'
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/encryption.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/encryption.py
    new file mode 100644
    index 000000000000..62607cc0cf85
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/encryption.py
    @@ -0,0 +1,542 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import os
    +from os import urandom
    +from json import (
    +    dumps,
    +    loads,
    +)
    +from collections import OrderedDict
    +
    +from cryptography.hazmat.backends import default_backend
    +from cryptography.hazmat.primitives.ciphers import Cipher
    +from cryptography.hazmat.primitives.ciphers.algorithms import AES
    +from cryptography.hazmat.primitives.ciphers.modes import CBC
    +from cryptography.hazmat.primitives.padding import PKCS7
    +
    +from azure.core.exceptions import HttpResponseError
    +
    +from .._version import VERSION
    +from . import encode_base64, decode_base64_to_bytes
    +
    +
    +_ENCRYPTION_PROTOCOL_V1 = '1.0'
    +_ERROR_OBJECT_INVALID = \
    +    '{0} does not define a complete interface. Value of {1} is either missing or invalid.'
    +
    +
    +def _validate_not_none(param_name, param):
    +    if param is None:
    +        raise ValueError('{0} should not be None.'.format(param_name))
    +
    +
    +def _validate_key_encryption_key_wrap(kek):
    +    # Note that None is not callable and so will fail the second clause of each check.
    +    if not hasattr(kek, 'wrap_key') or not callable(kek.wrap_key):
    +        raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'wrap_key'))
    +    if not hasattr(kek, 'get_kid') or not callable(kek.get_kid):
    +        raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'get_kid'))
    +    if not hasattr(kek, 'get_key_wrap_algorithm') or not callable(kek.get_key_wrap_algorithm):
    +        raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'get_key_wrap_algorithm'))
    +
    +
    +class _EncryptionAlgorithm(object):
    +    '''
    +    Specifies which client encryption algorithm is used.
    +    '''
    +    AES_CBC_256 = 'AES_CBC_256'
    +
    +
    +class _WrappedContentKey:
    +    '''
    +    Represents the envelope key details stored on the service.
    +    '''
    +
    +    def __init__(self, algorithm, encrypted_key, key_id):
    +        '''
    +        :param str algorithm:
    +            The algorithm used for wrapping.
    +        :param bytes encrypted_key:
    +            The encrypted content-encryption-key.
    +        :param str key_id:
    +            The key-encryption-key identifier string.
    +        '''
    +
    +        _validate_not_none('algorithm', algorithm)
    +        _validate_not_none('encrypted_key', encrypted_key)
    +        _validate_not_none('key_id', key_id)
    +
    +        self.algorithm = algorithm
    +        self.encrypted_key = encrypted_key
    +        self.key_id = key_id
    +
    +
    +class _EncryptionAgent:
    +    '''
    +    Represents the encryption agent stored on the service.
    +    It consists of the encryption protocol version and encryption algorithm used.
    +    '''
    +
    +    def __init__(self, encryption_algorithm, protocol):
    +        '''
    +        :param _EncryptionAlgorithm encryption_algorithm:
    +            The algorithm used for encrypting the message contents.
    +        :param str protocol:
    +            The protocol version used for encryption.
    +        '''
    +
    +        _validate_not_none('encryption_algorithm', encryption_algorithm)
    +        _validate_not_none('protocol', protocol)
    +
    +        self.encryption_algorithm = str(encryption_algorithm)
    +        self.protocol = protocol
    +
    +
    +class _EncryptionData:
    +    '''
    +    Represents the encryption data that is stored on the service.
    +    '''
    +
    +    def __init__(self, content_encryption_IV, encryption_agent, wrapped_content_key,
    +                 key_wrapping_metadata):
    +        '''
    +        :param bytes content_encryption_IV:
    +            The content encryption initialization vector.
    +        :param _EncryptionAgent encryption_agent:
    +            The encryption agent.
    +        :param _WrappedContentKey wrapped_content_key:
    +            An object that stores the wrapping algorithm, the key identifier,
    +            and the encrypted key bytes.
    +        :param dict key_wrapping_metadata:
    +            A dict containing metadata related to the key wrapping.
    +        '''
    +
    +        _validate_not_none('content_encryption_IV', content_encryption_IV)
    +        _validate_not_none('encryption_agent', encryption_agent)
    +        _validate_not_none('wrapped_content_key', wrapped_content_key)
    +
    +        self.content_encryption_IV = content_encryption_IV
    +        self.encryption_agent = encryption_agent
    +        self.wrapped_content_key = wrapped_content_key
    +        self.key_wrapping_metadata = key_wrapping_metadata
    +
    +
    +def _generate_encryption_data_dict(kek, cek, iv):
    +    '''
    +    Generates and returns the encryption metadata as a dict.
    +
    +    :param object kek: The key encryption key. See calling functions for more information.
    +    :param bytes cek: The content encryption key.
    +    :param bytes iv: The initialization vector.
    +    :return: A dict containing all the encryption metadata.
    +    :rtype: dict
    +    '''
    +    # Encrypt the cek.
    +    wrapped_cek = kek.wrap_key(cek)
    +
    +    # Build the encryption_data dict.
    +    # Use OrderedDict to comply with Java's ordering requirement.
    +    wrapped_content_key = OrderedDict()
    +    wrapped_content_key['KeyId'] = kek.get_kid()
    +    wrapped_content_key['EncryptedKey'] = encode_base64(wrapped_cek)
    +    wrapped_content_key['Algorithm'] = kek.get_key_wrap_algorithm()
    +
    +    encryption_agent = OrderedDict()
    +    encryption_agent['Protocol'] = _ENCRYPTION_PROTOCOL_V1
    +    encryption_agent['EncryptionAlgorithm'] = _EncryptionAlgorithm.AES_CBC_256
    +
    +    encryption_data_dict = OrderedDict()
    +    encryption_data_dict['WrappedContentKey'] = wrapped_content_key
    +    encryption_data_dict['EncryptionAgent'] = encryption_agent
    +    encryption_data_dict['ContentEncryptionIV'] = encode_base64(iv)
    +    encryption_data_dict['KeyWrappingMetadata'] = {'EncryptionLibrary': 'Python ' + VERSION}
    +
    +    return encryption_data_dict
    +
    +
    +def _dict_to_encryption_data(encryption_data_dict):
    +    '''
    +    Converts the specified dictionary to an EncryptionData object for
    +    eventual use in decryption.
    +
    +    :param dict encryption_data_dict:
    +        The dictionary containing the encryption data.
    +    :return: an _EncryptionData object built from the dictionary.
    +    :rtype: _EncryptionData
    +    '''
    +    try:
    +        if encryption_data_dict['EncryptionAgent']['Protocol'] != _ENCRYPTION_PROTOCOL_V1:
    +            raise ValueError("Unsupported encryption version.")
    +    except KeyError:
    +        raise ValueError("Unsupported encryption version.")
    +    wrapped_content_key = encryption_data_dict['WrappedContentKey']
    +    wrapped_content_key = _WrappedContentKey(wrapped_content_key['Algorithm'],
    +                                             decode_base64_to_bytes(wrapped_content_key['EncryptedKey']),
    +                                             wrapped_content_key['KeyId'])
    +
    +    encryption_agent = encryption_data_dict['EncryptionAgent']
    +    encryption_agent = _EncryptionAgent(encryption_agent['EncryptionAlgorithm'],
    +                                        encryption_agent['Protocol'])
    +
    +    if 'KeyWrappingMetadata' in encryption_data_dict:
    +        key_wrapping_metadata = encryption_data_dict['KeyWrappingMetadata']
    +    else:
    +        key_wrapping_metadata = None
    +
    +    encryption_data = _EncryptionData(decode_base64_to_bytes(encryption_data_dict['ContentEncryptionIV']),
    +                                      encryption_agent,
    +                                      wrapped_content_key,
    +                                      key_wrapping_metadata)
    +
    +    return encryption_data
    +
    +
    +def _generate_AES_CBC_cipher(cek, iv):
    +    '''
    +    Generates and returns an encryption cipher for AES CBC using the given cek and iv.
    +
    +    :param bytes[] cek: The content encryption key for the cipher.
    +    :param bytes[] iv: The initialization vector for the cipher.
    +    :return: A cipher for encrypting in AES256 CBC.
    +    :rtype: ~cryptography.hazmat.primitives.ciphers.Cipher
    +    '''
    +
    +    backend = default_backend()
    +    algorithm = AES(cek)
    +    mode = CBC(iv)
    +    return Cipher(algorithm, mode, backend)
    +
    +
    +def _validate_and_unwrap_cek(encryption_data, key_encryption_key=None, key_resolver=None):
    +    '''
    +    Extracts and returns the content_encryption_key stored in the encryption_data object
    +    and performs necessary validation on all parameters.
    +    :param _EncryptionData encryption_data:
    +        The encryption metadata of the retrieved value.
    +    :param obj key_encryption_key:
    +        The key_encryption_key used to unwrap the cek. Please refer to high-level service object
    +        instance variables for more details.
    +    :param func key_resolver:
    +        A function used that, given a key_id, will return a key_encryption_key. Please refer
    +        to high-level service object instance variables for more details.
    +    :return: the content_encryption_key stored in the encryption_data object.
    +    :rtype: bytes[]
    +    '''
    +
    +    _validate_not_none('content_encryption_IV', encryption_data.content_encryption_IV)
    +    _validate_not_none('encrypted_key', encryption_data.wrapped_content_key.encrypted_key)
    +
    +    if _ENCRYPTION_PROTOCOL_V1 != encryption_data.encryption_agent.protocol:
    +        raise ValueError('Encryption version is not supported.')
    +
    +    content_encryption_key = None
    +
    +    # If the resolver exists, give priority to the key it finds.
    +    if key_resolver is not None:
    +        key_encryption_key = key_resolver(encryption_data.wrapped_content_key.key_id)
    +
    +    _validate_not_none('key_encryption_key', key_encryption_key)
    +    if not hasattr(key_encryption_key, 'get_kid') or not callable(key_encryption_key.get_kid):
    +        raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'get_kid'))
    +    if not hasattr(key_encryption_key, 'unwrap_key') or not callable(key_encryption_key.unwrap_key):
    +        raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'unwrap_key'))
    +    if encryption_data.wrapped_content_key.key_id != key_encryption_key.get_kid():
    +        raise ValueError('Provided or resolved key-encryption-key does not match the id of key used to encrypt.')
    +    # Will throw an exception if the specified algorithm is not supported.
    +    content_encryption_key = key_encryption_key.unwrap_key(encryption_data.wrapped_content_key.encrypted_key,
    +                                                           encryption_data.wrapped_content_key.algorithm)
    +    _validate_not_none('content_encryption_key', content_encryption_key)
    +
    +    return content_encryption_key
    +
    +
    +def _decrypt_message(message, encryption_data, key_encryption_key=None, resolver=None):
    +    '''
    +    Decrypts the given ciphertext using AES256 in CBC mode with 128 bit padding.
    +    Unwraps the content-encryption-key using the user-provided or resolved key-encryption-key (kek).
    +    Returns the original plaintex.
    +
    +    :param str message:
    +        The ciphertext to be decrypted.
    +    :param _EncryptionData encryption_data:
    +        The metadata associated with this ciphertext.
    +    :param object key_encryption_key:
    +        The user-provided key-encryption-key. Must implement the following methods:
    +        unwrap_key(key, algorithm)
    +            - returns the unwrapped form of the specified symmetric key using the string-specified algorithm.
    +        get_kid()
    +            - returns a string key id for this key-encryption-key.
    +    :param function resolver(kid):
    +        The user-provided key resolver. Uses the kid string to return a key-encryption-key
    +        implementing the interface defined above.
    +    :return: The decrypted plaintext.
    +    :rtype: str
    +    '''
    +    _validate_not_none('message', message)
    +    content_encryption_key = _validate_and_unwrap_cek(encryption_data, key_encryption_key, resolver)
    +
    +    if _EncryptionAlgorithm.AES_CBC_256 != encryption_data.encryption_agent.encryption_algorithm:
    +        raise ValueError('Specified encryption algorithm is not supported.')
    +
    +    cipher = _generate_AES_CBC_cipher(content_encryption_key, encryption_data.content_encryption_IV)
    +
    +    # decrypt data
    +    decrypted_data = message
    +    decryptor = cipher.decryptor()
    +    decrypted_data = (decryptor.update(decrypted_data) + decryptor.finalize())
    +
    +    # unpad data
    +    unpadder = PKCS7(128).unpadder()
    +    decrypted_data = (unpadder.update(decrypted_data) + unpadder.finalize())
    +
    +    return decrypted_data
    +
    +
    +def encrypt_blob(blob, key_encryption_key):
    +    '''
    +    Encrypts the given blob using AES256 in CBC mode with 128 bit padding.
    +    Wraps the generated content-encryption-key using the user-provided key-encryption-key (kek).
    +    Returns a json-formatted string containing the encryption metadata. This method should
    +    only be used when a blob is small enough for single shot upload. Encrypting larger blobs
    +    is done as a part of the upload_data_chunks method.
    +
    +    :param bytes blob:
    +        The blob to be encrypted.
    +    :param object key_encryption_key:
    +        The user-provided key-encryption-key. Must implement the following methods:
    +        wrap_key(key)--wraps the specified key using an algorithm of the user's choice.
    +        get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key.
    +        get_kid()--returns a string key id for this key-encryption-key.
    +    :return: A tuple of json-formatted string containing the encryption metadata and the encrypted blob data.
    +    :rtype: (str, bytes)
    +    '''
    +
    +    _validate_not_none('blob', blob)
    +    _validate_not_none('key_encryption_key', key_encryption_key)
    +    _validate_key_encryption_key_wrap(key_encryption_key)
    +
    +    # AES256 uses 256 bit (32 byte) keys and always with 16 byte blocks
    +    content_encryption_key = urandom(32)
    +    initialization_vector = urandom(16)
    +
    +    cipher = _generate_AES_CBC_cipher(content_encryption_key, initialization_vector)
    +
    +    # PKCS7 with 16 byte blocks ensures compatibility with AES.
    +    padder = PKCS7(128).padder()
    +    padded_data = padder.update(blob) + padder.finalize()
    +
    +    # Encrypt the data.
    +    encryptor = cipher.encryptor()
    +    encrypted_data = encryptor.update(padded_data) + encryptor.finalize()
    +    encryption_data = _generate_encryption_data_dict(key_encryption_key, content_encryption_key,
    +                                                     initialization_vector)
    +    encryption_data['EncryptionMode'] = 'FullBlob'
    +
    +    return dumps(encryption_data), encrypted_data
    +
    +
    +def generate_blob_encryption_data(key_encryption_key):
    +    '''
    +    Generates the encryption_metadata for the blob.
    +
    +    :param bytes key_encryption_key:
    +        The key-encryption-key used to wrap the cek associate with this blob.
    +    :return: A tuple containing the cek and iv for this blob as well as the
    +        serialized encryption metadata for the blob.
    +    :rtype: (bytes, bytes, str)
    +    '''
    +    encryption_data = None
    +    content_encryption_key = None
    +    initialization_vector = None
    +    if key_encryption_key:
    +        _validate_key_encryption_key_wrap(key_encryption_key)
    +        content_encryption_key = urandom(32)
    +        initialization_vector = urandom(16)
    +        encryption_data = _generate_encryption_data_dict(key_encryption_key,
    +                                                         content_encryption_key,
    +                                                         initialization_vector)
    +        encryption_data['EncryptionMode'] = 'FullBlob'
    +        encryption_data = dumps(encryption_data)
    +
    +    return content_encryption_key, initialization_vector, encryption_data
    +
    +
    +def decrypt_blob(require_encryption, key_encryption_key, key_resolver,
    +                 content, start_offset, end_offset, response_headers):
    +    '''
    +    Decrypts the given blob contents and returns only the requested range.
    +
    +    :param bool require_encryption:
    +        Whether or not the calling blob service requires objects to be decrypted.
    +    :param object key_encryption_key:
    +        The user-provided key-encryption-key. Must implement the following methods:
    +        wrap_key(key)--wraps the specified key using an algorithm of the user's choice.
    +        get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key.
    +        get_kid()--returns a string key id for this key-encryption-key.
    +    :param key_resolver(kid):
    +        The user-provided key resolver. Uses the kid string to return a key-encryption-key
    +        implementing the interface defined above.
    +    :return: The decrypted blob content.
    +    :rtype: bytes
    +    '''
    +    try:
    +        encryption_data = _dict_to_encryption_data(loads(response_headers['x-ms-meta-encryptiondata']))
    +    except:  # pylint: disable=bare-except
    +        if require_encryption:
    +            raise ValueError(
    +                'Encryption required, but received data does not contain appropriate metatadata.' + \
    +                'Data was either not encrypted or metadata has been lost.')
    +
    +        return content
    +
    +    if encryption_data.encryption_agent.encryption_algorithm != _EncryptionAlgorithm.AES_CBC_256:
    +        raise ValueError('Specified encryption algorithm is not supported.')
    +
    +    blob_type = response_headers['x-ms-blob-type']
    +
    +    iv = None
    +    unpad = False
    +    if 'content-range' in response_headers:
    +        content_range = response_headers['content-range']
    +        # Format: 'bytes x-y/size'
    +
    +        # Ignore the word 'bytes'
    +        content_range = content_range.split(' ')
    +
    +        content_range = content_range[1].split('-')
    +        content_range = content_range[1].split('/')
    +        end_range = int(content_range[0])
    +        blob_size = int(content_range[1])
    +
    +        if start_offset >= 16:
    +            iv = content[:16]
    +            content = content[16:]
    +            start_offset -= 16
    +        else:
    +            iv = encryption_data.content_encryption_IV
    +
    +        if end_range == blob_size - 1:
    +            unpad = True
    +    else:
    +        unpad = True
    +        iv = encryption_data.content_encryption_IV
    +
    +    if blob_type == 'PageBlob':
    +        unpad = False
    +
    +    content_encryption_key = _validate_and_unwrap_cek(encryption_data, key_encryption_key, key_resolver)
    +    cipher = _generate_AES_CBC_cipher(content_encryption_key, iv)
    +    decryptor = cipher.decryptor()
    +
    +    content = decryptor.update(content) + decryptor.finalize()
    +    if unpad:
    +        unpadder = PKCS7(128).unpadder()
    +        content = unpadder.update(content) + unpadder.finalize()
    +
    +    return content[start_offset: len(content) - end_offset]
    +
    +
    +def get_blob_encryptor_and_padder(cek, iv, should_pad):
    +    encryptor = None
    +    padder = None
    +
    +    if cek is not None and iv is not None:
    +        cipher = _generate_AES_CBC_cipher(cek, iv)
    +        encryptor = cipher.encryptor()
    +        padder = PKCS7(128).padder() if should_pad else None
    +
    +    return encryptor, padder
    +
    +
    +def encrypt_queue_message(message, key_encryption_key):
    +    '''
    +    Encrypts the given plain text message using AES256 in CBC mode with 128 bit padding.
    +    Wraps the generated content-encryption-key using the user-provided key-encryption-key (kek).
    +    Returns a json-formatted string containing the encrypted message and the encryption metadata.
    +
    +    :param object message:
    +        The plain text messge to be encrypted.
    +    :param object key_encryption_key:
    +        The user-provided key-encryption-key. Must implement the following methods:
    +        wrap_key(key)--wraps the specified key using an algorithm of the user's choice.
    +        get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key.
    +        get_kid()--returns a string key id for this key-encryption-key.
    +    :return: A json-formatted string containing the encrypted message and the encryption metadata.
    +    :rtype: str
    +    '''
    +
    +    _validate_not_none('message', message)
    +    _validate_not_none('key_encryption_key', key_encryption_key)
    +    _validate_key_encryption_key_wrap(key_encryption_key)
    +
    +    # AES256 uses 256 bit (32 byte) keys and always with 16 byte blocks
    +    content_encryption_key = os.urandom(32)
    +    initialization_vector = os.urandom(16)
    +
    +    # Queue encoding functions all return unicode strings, and encryption should
    +    # operate on binary strings.
    +    message = message.encode('utf-8')
    +
    +    cipher = _generate_AES_CBC_cipher(content_encryption_key, initialization_vector)
    +
    +    # PKCS7 with 16 byte blocks ensures compatibility with AES.
    +    padder = PKCS7(128).padder()
    +    padded_data = padder.update(message) + padder.finalize()
    +
    +    # Encrypt the data.
    +    encryptor = cipher.encryptor()
    +    encrypted_data = encryptor.update(padded_data) + encryptor.finalize()
    +
    +    # Build the dictionary structure.
    +    queue_message = {'EncryptedMessageContents': encode_base64(encrypted_data),
    +                     'EncryptionData': _generate_encryption_data_dict(key_encryption_key,
    +                                                                      content_encryption_key,
    +                                                                      initialization_vector)}
    +
    +    return dumps(queue_message)
    +
    +
    +def decrypt_queue_message(message, response, require_encryption, key_encryption_key, resolver):
    +    '''
    +    Returns the decrypted message contents from an EncryptedQueueMessage.
    +    If no encryption metadata is present, will return the unaltered message.
    +    :param str message:
    +        The JSON formatted QueueEncryptedMessage contents with all associated metadata.
    +    :param bool require_encryption:
    +        If set, will enforce that the retrieved messages are encrypted and decrypt them.
    +    :param object key_encryption_key:
    +        The user-provided key-encryption-key. Must implement the following methods:
    +        unwrap_key(key, algorithm)
    +            - returns the unwrapped form of the specified symmetric key usingthe string-specified algorithm.
    +        get_kid()
    +            - returns a string key id for this key-encryption-key.
    +    :param function resolver(kid):
    +        The user-provided key resolver. Uses the kid string to return a key-encryption-key
    +        implementing the interface defined above.
    +    :return: The plain text message from the queue message.
    +    :rtype: str
    +    '''
    +
    +    try:
    +        message = loads(message)
    +
    +        encryption_data = _dict_to_encryption_data(message['EncryptionData'])
    +        decoded_data = decode_base64_to_bytes(message['EncryptedMessageContents'])
    +    except (KeyError, ValueError):
    +        # Message was not json formatted and so was not encrypted
    +        # or the user provided a json formatted message.
    +        if require_encryption:
    +            raise ValueError('Message was not encrypted.')
    +
    +        return message
    +    try:
    +        return _decrypt_message(decoded_data, encryption_data, key_encryption_key, resolver).decode('utf-8')
    +    except Exception as error:
    +        raise HttpResponseError(
    +            message="Decryption failed.",
    +            response=response,
    +            error=error)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/models.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/models.py
    new file mode 100644
    index 000000000000..6a8cfaf84745
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/models.py
    @@ -0,0 +1,425 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from enum import Enum
    +
    +
    +def get_enum_value(value):
    +    if value is None or value in ["None", ""]:
    +        return None
    +    try:
    +        return value.value
    +    except AttributeError:
    +        return value
    +
    +
    +class StorageErrorCode(str, Enum):
    +
    +    # Generic storage values
    +    account_already_exists = "AccountAlreadyExists"
    +    account_being_created = "AccountBeingCreated"
    +    account_is_disabled = "AccountIsDisabled"
    +    authentication_failed = "AuthenticationFailed"
    +    authorization_failure = "AuthorizationFailure"
    +    condition_headers_not_supported = "ConditionHeadersNotSupported"
    +    condition_not_met = "ConditionNotMet"
    +    empty_metadata_key = "EmptyMetadataKey"
    +    insufficient_account_permissions = "InsufficientAccountPermissions"
    +    internal_error = "InternalError"
    +    invalid_authentication_info = "InvalidAuthenticationInfo"
    +    invalid_header_value = "InvalidHeaderValue"
    +    invalid_http_verb = "InvalidHttpVerb"
    +    invalid_input = "InvalidInput"
    +    invalid_md5 = "InvalidMd5"
    +    invalid_metadata = "InvalidMetadata"
    +    invalid_query_parameter_value = "InvalidQueryParameterValue"
    +    invalid_range = "InvalidRange"
    +    invalid_resource_name = "InvalidResourceName"
    +    invalid_uri = "InvalidUri"
    +    invalid_xml_document = "InvalidXmlDocument"
    +    invalid_xml_node_value = "InvalidXmlNodeValue"
    +    md5_mismatch = "Md5Mismatch"
    +    metadata_too_large = "MetadataTooLarge"
    +    missing_content_length_header = "MissingContentLengthHeader"
    +    missing_required_query_parameter = "MissingRequiredQueryParameter"
    +    missing_required_header = "MissingRequiredHeader"
    +    missing_required_xml_node = "MissingRequiredXmlNode"
    +    multiple_condition_headers_not_supported = "MultipleConditionHeadersNotSupported"
    +    operation_timed_out = "OperationTimedOut"
    +    out_of_range_input = "OutOfRangeInput"
    +    out_of_range_query_parameter_value = "OutOfRangeQueryParameterValue"
    +    request_body_too_large = "RequestBodyTooLarge"
    +    resource_type_mismatch = "ResourceTypeMismatch"
    +    request_url_failed_to_parse = "RequestUrlFailedToParse"
    +    resource_already_exists = "ResourceAlreadyExists"
    +    resource_not_found = "ResourceNotFound"
    +    server_busy = "ServerBusy"
    +    unsupported_header = "UnsupportedHeader"
    +    unsupported_xml_node = "UnsupportedXmlNode"
    +    unsupported_query_parameter = "UnsupportedQueryParameter"
    +    unsupported_http_verb = "UnsupportedHttpVerb"
    +
    +    # Blob values
    +    append_position_condition_not_met = "AppendPositionConditionNotMet"
    +    blob_already_exists = "BlobAlreadyExists"
    +    blob_not_found = "BlobNotFound"
    +    blob_overwritten = "BlobOverwritten"
    +    blob_tier_inadequate_for_content_length = "BlobTierInadequateForContentLength"
    +    block_count_exceeds_limit = "BlockCountExceedsLimit"
    +    block_list_too_long = "BlockListTooLong"
    +    cannot_change_to_lower_tier = "CannotChangeToLowerTier"
    +    cannot_verify_copy_source = "CannotVerifyCopySource"
    +    container_already_exists = "ContainerAlreadyExists"
    +    container_being_deleted = "ContainerBeingDeleted"
    +    container_disabled = "ContainerDisabled"
    +    container_not_found = "ContainerNotFound"
    +    content_length_larger_than_tier_limit = "ContentLengthLargerThanTierLimit"
    +    copy_across_accounts_not_supported = "CopyAcrossAccountsNotSupported"
    +    copy_id_mismatch = "CopyIdMismatch"
    +    feature_version_mismatch = "FeatureVersionMismatch"
    +    incremental_copy_blob_mismatch = "IncrementalCopyBlobMismatch"
    +    incremental_copy_of_eralier_version_snapshot_not_allowed = "IncrementalCopyOfEralierVersionSnapshotNotAllowed"
    +    incremental_copy_source_must_be_snapshot = "IncrementalCopySourceMustBeSnapshot"
    +    infinite_lease_duration_required = "InfiniteLeaseDurationRequired"
    +    invalid_blob_or_block = "InvalidBlobOrBlock"
    +    invalid_blob_tier = "InvalidBlobTier"
    +    invalid_blob_type = "InvalidBlobType"
    +    invalid_block_id = "InvalidBlockId"
    +    invalid_block_list = "InvalidBlockList"
    +    invalid_operation = "InvalidOperation"
    +    invalid_page_range = "InvalidPageRange"
    +    invalid_source_blob_type = "InvalidSourceBlobType"
    +    invalid_source_blob_url = "InvalidSourceBlobUrl"
    +    invalid_version_for_page_blob_operation = "InvalidVersionForPageBlobOperation"
    +    lease_already_present = "LeaseAlreadyPresent"
    +    lease_already_broken = "LeaseAlreadyBroken"
    +    lease_id_mismatch_with_blob_operation = "LeaseIdMismatchWithBlobOperation"
    +    lease_id_mismatch_with_container_operation = "LeaseIdMismatchWithContainerOperation"
    +    lease_id_mismatch_with_lease_operation = "LeaseIdMismatchWithLeaseOperation"
    +    lease_id_missing = "LeaseIdMissing"
    +    lease_is_breaking_and_cannot_be_acquired = "LeaseIsBreakingAndCannotBeAcquired"
    +    lease_is_breaking_and_cannot_be_changed = "LeaseIsBreakingAndCannotBeChanged"
    +    lease_is_broken_and_cannot_be_renewed = "LeaseIsBrokenAndCannotBeRenewed"
    +    lease_lost = "LeaseLost"
    +    lease_not_present_with_blob_operation = "LeaseNotPresentWithBlobOperation"
    +    lease_not_present_with_container_operation = "LeaseNotPresentWithContainerOperation"
    +    lease_not_present_with_lease_operation = "LeaseNotPresentWithLeaseOperation"
    +    max_blob_size_condition_not_met = "MaxBlobSizeConditionNotMet"
    +    no_pending_copy_operation = "NoPendingCopyOperation"
    +    operation_not_allowed_on_incremental_copy_blob = "OperationNotAllowedOnIncrementalCopyBlob"
    +    pending_copy_operation = "PendingCopyOperation"
    +    previous_snapshot_cannot_be_newer = "PreviousSnapshotCannotBeNewer"
    +    previous_snapshot_not_found = "PreviousSnapshotNotFound"
    +    previous_snapshot_operation_not_supported = "PreviousSnapshotOperationNotSupported"
    +    sequence_number_condition_not_met = "SequenceNumberConditionNotMet"
    +    sequence_number_increment_too_large = "SequenceNumberIncrementTooLarge"
    +    snapshot_count_exceeded = "SnapshotCountExceeded"
    +    snaphot_operation_rate_exceeded = "SnaphotOperationRateExceeded"
    +    snapshots_present = "SnapshotsPresent"
    +    source_condition_not_met = "SourceConditionNotMet"
    +    system_in_use = "SystemInUse"
    +    target_condition_not_met = "TargetConditionNotMet"
    +    unauthorized_blob_overwrite = "UnauthorizedBlobOverwrite"
    +    blob_being_rehydrated = "BlobBeingRehydrated"
    +    blob_archived = "BlobArchived"
    +    blob_not_archived = "BlobNotArchived"
    +
    +    # Queue values
    +    invalid_marker = "InvalidMarker"
    +    message_not_found = "MessageNotFound"
    +    message_too_large = "MessageTooLarge"
    +    pop_receipt_mismatch = "PopReceiptMismatch"
    +    queue_already_exists = "QueueAlreadyExists"
    +    queue_being_deleted = "QueueBeingDeleted"
    +    queue_disabled = "QueueDisabled"
    +    queue_not_empty = "QueueNotEmpty"
    +    queue_not_found = "QueueNotFound"
    +
    +    # File values
    +    cannot_delete_file_or_directory = "CannotDeleteFileOrDirectory"
    +    client_cache_flush_delay = "ClientCacheFlushDelay"
    +    delete_pending = "DeletePending"
    +    directory_not_empty = "DirectoryNotEmpty"
    +    file_lock_conflict = "FileLockConflict"
    +    invalid_file_or_directory_path_name = "InvalidFileOrDirectoryPathName"
    +    parent_not_found = "ParentNotFound"
    +    read_only_attribute = "ReadOnlyAttribute"
    +    share_already_exists = "ShareAlreadyExists"
    +    share_being_deleted = "ShareBeingDeleted"
    +    share_disabled = "ShareDisabled"
    +    share_not_found = "ShareNotFound"
    +    sharing_violation = "SharingViolation"
    +    share_snapshot_in_progress = "ShareSnapshotInProgress"
    +    share_snapshot_count_exceeded = "ShareSnapshotCountExceeded"
    +    share_snapshot_operation_not_supported = "ShareSnapshotOperationNotSupported"
    +    share_has_snapshots = "ShareHasSnapshots"
    +    container_quota_downgrade_not_allowed = "ContainerQuotaDowngradeNotAllowed"
    +
    +
    +class DictMixin(object):
    +
    +    def __setitem__(self, key, item):
    +        self.__dict__[key] = item
    +
    +    def __getitem__(self, key):
    +        return self.__dict__[key]
    +
    +    def __repr__(self):
    +        return str(self)
    +
    +    def __len__(self):
    +        return len(self.keys())
    +
    +    def __delitem__(self, key):
    +        self.__dict__[key] = None
    +
    +    def __eq__(self, other):
    +        """Compare objects by comparing all attributes."""
    +        if isinstance(other, self.__class__):
    +            return self.__dict__ == other.__dict__
    +        return False
    +
    +    def __ne__(self, other):
    +        """Compare objects by comparing all attributes."""
    +        return not self.__eq__(other)
    +
    +    def __str__(self):
    +        return str({k: v for k, v in self.__dict__.items() if not k.startswith('_')})
    +
    +    def has_key(self, k):
    +        return k in self.__dict__
    +
    +    def update(self, *args, **kwargs):
    +        return self.__dict__.update(*args, **kwargs)
    +
    +    def keys(self):
    +        return [k for k in self.__dict__ if not k.startswith('_')]
    +
    +    def values(self):
    +        return [v for k, v in self.__dict__.items() if not k.startswith('_')]
    +
    +    def items(self):
    +        return [(k, v) for k, v in self.__dict__.items() if not k.startswith('_')]
    +
    +    def get(self, key, default=None):
    +        if key in self.__dict__:
    +            return self.__dict__[key]
    +        return default
    +
    +
    +class LocationMode(object):
    +    """
    +    Specifies the location the request should be sent to. This mode only applies
    +    for RA-GRS accounts which allow secondary read access. All other account types
    +    must use PRIMARY.
    +    """
    +
    +    PRIMARY = 'primary'  #: Requests should be sent to the primary location.
    +    SECONDARY = 'secondary'  #: Requests should be sent to the secondary location, if possible.
    +
    +
    +class ResourceTypes(object):
    +    """
    +    Specifies the resource types that are accessible with the account SAS.
    +
    +    :param bool service:
    +        Access to service-level APIs (e.g., Get/Set Service Properties,
    +        Get Service Stats, List Containers/Queues/Shares)
    +    :param bool container:
    +        Access to container-level APIs (e.g., Create/Delete Container,
    +        Create/Delete Queue, Create/Delete Share,
    +        List Blobs/Files and Directories)
    +    :param bool object:
    +        Access to object-level APIs for blobs, queue messages, and
    +        files(e.g. Put Blob, Query Entity, Get Messages, Create File, etc.)
    +    """
    +
    +    def __init__(self, service=False, container=False, object=False):  # pylint: disable=redefined-builtin
    +        self.service = service
    +        self.container = container
    +        self.object = object
    +        self._str = (('s' if self.service else '') +
    +                ('c' if self.container else '') +
    +                ('o' if self.object else ''))
    +
    +    def __str__(self):
    +        return self._str
    +
    +    @classmethod
    +    def from_string(cls, string):
    +        """Create a ResourceTypes from a string.
    +
    +        To specify service, container, or object you need only to
    +        include the first letter of the word in the string. E.g. service and container,
    +        you would provide a string "sc".
    +
    +        :param str string: Specify service, container, or object in
    +            in the string with the first letter of the word.
    +        :return: A ResourceTypes object
    +        :rtype: ~azure.storage.blob.ResourceTypes
    +        """
    +        res_service = 's' in string
    +        res_container = 'c' in string
    +        res_object = 'o' in string
    +
    +        parsed = cls(res_service, res_container, res_object)
    +        parsed._str = string  # pylint: disable = protected-access
    +        return parsed
    +
    +
    +class AccountSasPermissions(object):
    +    """
    +    :class:`~ResourceTypes` class to be used with generate_account_sas
    +    function and for the AccessPolicies used with set_*_acl. There are two types of
    +    SAS which may be used to grant resource access. One is to grant access to a
    +    specific resource (resource-specific). Another is to grant access to the
    +    entire service for a specific account and allow certain operations based on
    +    perms found here.
    +
    +    :param bool read:
    +        Valid for all signed resources types (Service, Container, and Object).
    +        Permits read permissions to the specified resource type.
    +    :param bool write:
    +        Valid for all signed resources types (Service, Container, and Object).
    +        Permits write permissions to the specified resource type.
    +    :param bool delete:
    +        Valid for Container and Object resource types, except for queue messages.
    +    :param bool list:
    +        Valid for Service and Container resource types only.
    +    :param bool add:
    +        Valid for the following Object resource types only: queue messages, and append blobs.
    +    :param bool create:
    +        Valid for the following Object resource types only: blobs and files.
    +        Users can create new blobs or files, but may not overwrite existing
    +        blobs or files.
    +    :param bool update:
    +        Valid for the following Object resource types only: queue messages.
    +    :param bool process:
    +        Valid for the following Object resource type only: queue messages.
    +    """
    +    def __init__(self, read=False, write=False, delete=False, list=False,  # pylint: disable=redefined-builtin
    +                 add=False, create=False, update=False, process=False):
    +        self.read = read
    +        self.write = write
    +        self.delete = delete
    +        self.list = list
    +        self.add = add
    +        self.create = create
    +        self.update = update
    +        self.process = process
    +        self._str = (('r' if self.read else '') +
    +                     ('w' if  self.write else '') +
    +                     ('d' if self.delete else '') +
    +                     ('l' if self.list else '') +
    +                     ('a' if self.add else '') +
    +                     ('c' if self.create else '') +
    +                     ('u' if self.update else '') +
    +                     ('p' if self.process else ''))
    +
    +    def __str__(self):
    +        return self._str
    +
    +    @classmethod
    +    def from_string(cls, permission):
    +        """Create AccountSasPermissions from a string.
    +
    +        To specify read, write, delete, etc. permissions you need only to
    +        include the first letter of the word in the string. E.g. for read and write
    +        permissions you would provide a string "rw".
    +
    +        :param str permission: Specify permissions in
    +            the string with the first letter of the word.
    +        :return: A AccountSasPermissions object
    +        :rtype: ~azure.storage.blob.AccountSasPermissions
    +        """
    +        p_read = 'r' in permission
    +        p_write = 'w' in permission
    +        p_delete = 'd' in permission
    +        p_list = 'l' in permission
    +        p_add = 'a' in permission
    +        p_create = 'c' in permission
    +        p_update = 'u' in permission
    +        p_process = 'p' in permission
    +
    +        parsed = cls(p_read, p_write, p_delete, p_list, p_add, p_create, p_update, p_process)
    +        parsed._str = permission # pylint: disable = protected-access
    +        return parsed
    +
    +class Services(object):
    +    """Specifies the services accessible with the account SAS.
    +
    +    :param bool blob:
    +        Access for the `~azure.storage.blob.BlobServiceClient`
    +    :param bool queue:
    +        Access for the `~azure.storage.queue.QueueServiceClient`
    +    :param bool fileshare:
    +        Access for the `~azure.storage.fileshare.ShareServiceClient`
    +    """
    +
    +    def __init__(self, blob=False, queue=False, fileshare=False):
    +        self.blob = blob
    +        self.queue = queue
    +        self.fileshare = fileshare
    +        self._str = (('b' if self.blob else '') +
    +                ('q' if self.queue else '') +
    +                ('f' if self.fileshare else ''))
    +
    +    def __str__(self):
    +        return self._str
    +
    +    @classmethod
    +    def from_string(cls, string):
    +        """Create Services from a string.
    +
    +        To specify blob, queue, or file you need only to
    +        include the first letter of the word in the string. E.g. for blob and queue
    +        you would provide a string "bq".
    +
    +        :param str string: Specify blob, queue, or file in
    +            in the string with the first letter of the word.
    +        :return: A Services object
    +        :rtype: ~azure.storage.blob.Services
    +        """
    +        res_blob = 'b' in string
    +        res_queue = 'q' in string
    +        res_file = 'f' in string
    +
    +        parsed = cls(res_blob, res_queue, res_file)
    +        parsed._str = string  # pylint: disable = protected-access
    +        return parsed
    +
    +
    +class UserDelegationKey(object):
    +    """
    +    Represents a user delegation key, provided to the user by Azure Storage
    +    based on their Azure Active Directory access token.
    +
    +    The fields are saved as simple strings since the user does not have to interact with this object;
    +    to generate an identify SAS, the user can simply pass it to the right API.
    +
    +    :ivar str signed_oid:
    +        Object ID of this token.
    +    :ivar str signed_tid:
    +        Tenant ID of the tenant that issued this token.
    +    :ivar str signed_start:
    +        The datetime this token becomes valid.
    +    :ivar str signed_expiry:
    +        The datetime this token expires.
    +    :ivar str signed_service:
    +        What service this key is valid for.
    +    :ivar str signed_version:
    +        The version identifier of the REST service that created this token.
    +    :ivar str value:
    +        The user delegation key.
    +    """
    +    def __init__(self):
    +        self.signed_oid = None
    +        self.signed_tid = None
    +        self.signed_start = None
    +        self.signed_expiry = None
    +        self.signed_service = None
    +        self.signed_version = None
    +        self.value = None
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/parser.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/parser.py
    new file mode 100644
    index 000000000000..c6feba8a6393
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/parser.py
    @@ -0,0 +1,20 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import sys
    +
    +if sys.version_info < (3,):
    +    def _str(value):
    +        if isinstance(value, unicode):  # pylint: disable=undefined-variable
    +            return value.encode('utf-8')
    +
    +        return str(value)
    +else:
    +    _str = str
    +
    +
    +def _to_utc_datetime(value):
    +    return value.strftime('%Y-%m-%dT%H:%M:%SZ')
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/policies.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/policies.py
    new file mode 100644
    index 000000000000..b603efe505e8
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/policies.py
    @@ -0,0 +1,638 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import base64
    +import hashlib
    +import re
    +import random
    +from time import time
    +from io import SEEK_SET, UnsupportedOperation
    +import logging
    +import uuid
    +import types
    +import platform
    +from typing import Any, TYPE_CHECKING
    +from wsgiref.handlers import format_date_time
    +try:
    +    from urllib.parse import (
    +        urlparse,
    +        parse_qsl,
    +        urlunparse,
    +        urlencode,
    +    )
    +except ImportError:
    +    from urllib import urlencode # type: ignore
    +    from urlparse import ( # type: ignore
    +        urlparse,
    +        parse_qsl,
    +        urlunparse,
    +    )
    +
    +from azure.core.pipeline.policies import (
    +    HeadersPolicy,
    +    SansIOHTTPPolicy,
    +    NetworkTraceLoggingPolicy,
    +    HTTPPolicy,
    +    RequestHistory
    +)
    +from azure.core.exceptions import AzureError, ServiceRequestError, ServiceResponseError
    +
    +from .._version import VERSION
    +from .models import LocationMode
    +
    +try:
    +    _unicode_type = unicode # type: ignore
    +except NameError:
    +    _unicode_type = str
    +
    +if TYPE_CHECKING:
    +    from azure.core.pipeline import PipelineRequest, PipelineResponse
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +def encode_base64(data):
    +    if isinstance(data, _unicode_type):
    +        data = data.encode('utf-8')
    +    encoded = base64.b64encode(data)
    +    return encoded.decode('utf-8')
    +
    +
    +def is_exhausted(settings):
    +    """Are we out of retries?"""
    +    retry_counts = (settings['total'], settings['connect'], settings['read'], settings['status'])
    +    retry_counts = list(filter(None, retry_counts))
    +    if not retry_counts:
    +        return False
    +    return min(retry_counts) < 0
    +
    +
    +def retry_hook(settings, **kwargs):
    +    if settings['hook']:
    +        settings['hook'](retry_count=settings['count'] - 1, location_mode=settings['mode'], **kwargs)
    +
    +
    +def is_retry(response, mode):
    +    """Is this method/status code retryable? (Based on whitelists and control
    +    variables such as the number of total retries to allow, whether to
    +    respect the Retry-After header, whether this header is present, and
    +    whether the returned status code is on the list of status codes to
    +    be retried upon on the presence of the aforementioned header)
    +    """
    +    status = response.http_response.status_code
    +    if 300 <= status < 500:
    +        # An exception occured, but in most cases it was expected. Examples could
    +        # include a 309 Conflict or 412 Precondition Failed.
    +        if status == 404 and mode == LocationMode.SECONDARY:
    +            # Response code 404 should be retried if secondary was used.
    +            return True
    +        if status == 408:
    +            # Response code 408 is a timeout and should be retried.
    +            return True
    +        return False
    +    if status >= 500:
    +        # Response codes above 500 with the exception of 501 Not Implemented and
    +        # 505 Version Not Supported indicate a server issue and should be retried.
    +        if status in [501, 505]:
    +            return False
    +        return True
    +    return False
    +
    +
    +def urljoin(base_url, stub_url):
    +    parsed = urlparse(base_url)
    +    parsed = parsed._replace(path=parsed.path + '/' + stub_url)
    +    return parsed.geturl()
    +
    +
    +class QueueMessagePolicy(SansIOHTTPPolicy):
    +
    +    def on_request(self, request):
    +        message_id = request.context.options.pop('queue_message_id', None)
    +        if message_id:
    +            request.http_request.url = urljoin(
    +                request.http_request.url,
    +                message_id)
    +
    +
    +class StorageHeadersPolicy(HeadersPolicy):
    +    request_id_header_name = 'x-ms-client-request-id'
    +
    +    def on_request(self, request):
    +        # type: (PipelineRequest, Any) -> None
    +        super(StorageHeadersPolicy, self).on_request(request)
    +        current_time = format_date_time(time())
    +        request.http_request.headers['x-ms-date'] = current_time
    +
    +        custom_id = request.context.options.pop('client_request_id', None)
    +        request.http_request.headers['x-ms-client-request-id'] = custom_id or str(uuid.uuid1())
    +
    +    # def on_response(self, request, response):
    +    #     # raise exception if the echoed client request id from the service is not identical to the one we sent
    +    #     if self.request_id_header_name in response.http_response.headers:
    +
    +    #         client_request_id = request.http_request.headers.get(self.request_id_header_name)
    +
    +    #         if response.http_response.headers[self.request_id_header_name] != client_request_id:
    +    #             raise AzureError(
    +    #                 "Echoed client request ID: {} does not match sent client request ID: {}.  "
    +    #                 "Service request ID: {}".format(
    +    #                     response.http_response.headers[self.request_id_header_name], client_request_id,
    +    #                     response.http_response.headers['x-ms-request-id']),
    +    #                 response=response.http_response
    +    #             )
    +
    +
    +class StorageHosts(SansIOHTTPPolicy):
    +
    +    def __init__(self, hosts=None, **kwargs):  # pylint: disable=unused-argument
    +        self.hosts = hosts
    +        super(StorageHosts, self).__init__()
    +
    +    def on_request(self, request):
    +        # type: (PipelineRequest, Any) -> None
    +        request.context.options['hosts'] = self.hosts
    +        parsed_url = urlparse(request.http_request.url)
    +
    +        # Detect what location mode we're currently requesting with
    +        location_mode = LocationMode.PRIMARY
    +        for key, value in self.hosts.items():
    +            if parsed_url.netloc == value:
    +                location_mode = key
    +
    +        # See if a specific location mode has been specified, and if so, redirect
    +        use_location = request.context.options.pop('use_location', None)
    +        if use_location:
    +            # Lock retries to the specific location
    +            request.context.options['retry_to_secondary'] = False
    +            if use_location not in self.hosts:
    +                raise ValueError("Attempting to use undefined host location {}".format(use_location))
    +            if use_location != location_mode:
    +                # Update request URL to use the specified location
    +                updated = parsed_url._replace(netloc=self.hosts[use_location])
    +                request.http_request.url = updated.geturl()
    +                location_mode = use_location
    +
    +        request.context.options['location_mode'] = location_mode
    +
    +
    +class StorageLoggingPolicy(NetworkTraceLoggingPolicy):
    +    """A policy that logs HTTP request and response to the DEBUG logger.
    +
    +    This accepts both global configuration, and per-request level with "enable_http_logger"
    +    """
    +
    +    def on_request(self, request):
    +        # type: (PipelineRequest, Any) -> None
    +        http_request = request.http_request
    +        options = request.context.options
    +        if options.pop("logging_enable", self.enable_http_logger):
    +            request.context["logging_enable"] = True
    +            if not _LOGGER.isEnabledFor(logging.DEBUG):
    +                return
    +
    +            try:
    +                log_url = http_request.url
    +                query_params = http_request.query
    +                if 'sig' in query_params:
    +                    log_url = log_url.replace(query_params['sig'], "sig=*****")
    +                _LOGGER.debug("Request URL: %r", log_url)
    +                _LOGGER.debug("Request method: %r", http_request.method)
    +                _LOGGER.debug("Request headers:")
    +                for header, value in http_request.headers.items():
    +                    if header.lower() == 'authorization':
    +                        value = '*****'
    +                    elif header.lower() == 'x-ms-copy-source' and 'sig' in value:
    +                        # take the url apart and scrub away the signed signature
    +                        scheme, netloc, path, params, query, fragment = urlparse(value)
    +                        parsed_qs = dict(parse_qsl(query))
    +                        parsed_qs['sig'] = '*****'
    +
    +                        # the SAS needs to be put back together
    +                        value = urlunparse((scheme, netloc, path, params, urlencode(parsed_qs), fragment))
    +
    +                    _LOGGER.debug("    %r: %r", header, value)
    +                _LOGGER.debug("Request body:")
    +
    +                # We don't want to log the binary data of a file upload.
    +                if isinstance(http_request.body, types.GeneratorType):
    +                    _LOGGER.debug("File upload")
    +                else:
    +                    _LOGGER.debug(str(http_request.body))
    +            except Exception as err:  # pylint: disable=broad-except
    +                _LOGGER.debug("Failed to log request: %r", err)
    +
    +    def on_response(self, request, response):
    +        # type: (PipelineRequest, PipelineResponse, Any) -> None
    +        if response.context.pop("logging_enable", self.enable_http_logger):
    +            if not _LOGGER.isEnabledFor(logging.DEBUG):
    +                return
    +
    +            try:
    +                _LOGGER.debug("Response status: %r", response.http_response.status_code)
    +                _LOGGER.debug("Response headers:")
    +                for res_header, value in response.http_response.headers.items():
    +                    _LOGGER.debug("    %r: %r", res_header, value)
    +
    +                # We don't want to log binary data if the response is a file.
    +                _LOGGER.debug("Response content:")
    +                pattern = re.compile(r'attachment; ?filename=["\w.]+', re.IGNORECASE)
    +                header = response.http_response.headers.get('content-disposition')
    +
    +                if header and pattern.match(header):
    +                    filename = header.partition('=')[2]
    +                    _LOGGER.debug("File attachments: %s", filename)
    +                elif response.http_response.headers.get("content-type", "").endswith("octet-stream"):
    +                    _LOGGER.debug("Body contains binary data.")
    +                elif response.http_response.headers.get("content-type", "").startswith("image"):
    +                    _LOGGER.debug("Body contains image data.")
    +                else:
    +                    if response.context.options.get('stream', False):
    +                        _LOGGER.debug("Body is streamable")
    +                    else:
    +                        _LOGGER.debug(response.http_response.text())
    +            except Exception as err:  # pylint: disable=broad-except
    +                _LOGGER.debug("Failed to log response: %s", repr(err))
    +
    +
    +class StorageUserAgentPolicy(SansIOHTTPPolicy):
    +
    +    _USERAGENT = "User-Agent"
    +
    +    def __init__(self, **kwargs):
    +        self._application = kwargs.pop('user_agent', None)
    +        storage_sdk = kwargs.pop('storage_sdk')
    +        self._user_agent = "azsdk-python-storage-{}/{} Python/{} ({})".format(
    +            storage_sdk,
    +            VERSION,
    +            platform.python_version(),
    +            platform.platform())
    +        super(StorageUserAgentPolicy, self).__init__()
    +
    +    def on_request(self, request):
    +        existing = request.http_request.headers.get(self._USERAGENT, "")
    +        app_string = request.context.options.pop('user_agent', None) or self._application
    +        if app_string:
    +            request.http_request.headers[self._USERAGENT] = "{} {}".format(
    +                app_string, self._user_agent)
    +        else:
    +            request.http_request.headers[self._USERAGENT] = self._user_agent
    +        if existing:
    +            request.http_request.headers[self._USERAGENT] += " " + existing
    +
    +
    +class StorageRequestHook(SansIOHTTPPolicy):
    +
    +    def __init__(self, **kwargs):  # pylint: disable=unused-argument
    +        self._request_callback = kwargs.get('raw_request_hook')
    +        super(StorageRequestHook, self).__init__()
    +
    +    def on_request(self, request):
    +        # type: (PipelineRequest, **Any) -> PipelineResponse
    +        request_callback = request.context.options.pop('raw_request_hook', self._request_callback)
    +        if request_callback:
    +            request_callback(request)
    +
    +
    +class StorageResponseHook(HTTPPolicy):
    +
    +    def __init__(self, **kwargs):  # pylint: disable=unused-argument
    +        self._response_callback = kwargs.get('raw_response_hook')
    +        super(StorageResponseHook, self).__init__()
    +
    +    def send(self, request):
    +        # type: (PipelineRequest) -> PipelineResponse
    +        data_stream_total = request.context.get('data_stream_total') or \
    +            request.context.options.pop('data_stream_total', None)
    +        download_stream_current = request.context.get('download_stream_current') or \
    +            request.context.options.pop('download_stream_current', None)
    +        upload_stream_current = request.context.get('upload_stream_current') or \
    +            request.context.options.pop('upload_stream_current', None)
    +        response_callback = request.context.get('response_callback') or \
    +            request.context.options.pop('raw_response_hook', self._response_callback)
    +
    +        response = self.next.send(request)
    +        will_retry = is_retry(response, request.context.options.get('mode'))
    +        if not will_retry and download_stream_current is not None:
    +            download_stream_current += int(response.http_response.headers.get('Content-Length', 0))
    +            if data_stream_total is None:
    +                content_range = response.http_response.headers.get('Content-Range')
    +                if content_range:
    +                    data_stream_total = int(content_range.split(' ', 1)[1].split('/', 1)[1])
    +                else:
    +                    data_stream_total = download_stream_current
    +        elif not will_retry and upload_stream_current is not None:
    +            upload_stream_current += int(response.http_request.headers.get('Content-Length', 0))
    +        for pipeline_obj in [request, response]:
    +            pipeline_obj.context['data_stream_total'] = data_stream_total
    +            pipeline_obj.context['download_stream_current'] = download_stream_current
    +            pipeline_obj.context['upload_stream_current'] = upload_stream_current
    +        if response_callback:
    +            response_callback(response)
    +            request.context['response_callback'] = response_callback
    +        return response
    +
    +
    +class StorageContentValidation(SansIOHTTPPolicy):
    +    """A simple policy that sends the given headers
    +    with the request.
    +
    +    This will overwrite any headers already defined in the request.
    +    """
    +    header_name = 'Content-MD5'
    +
    +    def __init__(self, **kwargs):  # pylint: disable=unused-argument
    +        super(StorageContentValidation, self).__init__()
    +
    +    @staticmethod
    +    def get_content_md5(data):
    +        md5 = hashlib.md5()
    +        if isinstance(data, bytes):
    +            md5.update(data)
    +        elif hasattr(data, 'read'):
    +            pos = 0
    +            try:
    +                pos = data.tell()
    +            except:  # pylint: disable=bare-except
    +                pass
    +            for chunk in iter(lambda: data.read(4096), b""):
    +                md5.update(chunk)
    +            try:
    +                data.seek(pos, SEEK_SET)
    +            except (AttributeError, IOError):
    +                raise ValueError("Data should be bytes or a seekable file-like object.")
    +        else:
    +            raise ValueError("Data should be bytes or a seekable file-like object.")
    +
    +        return md5.digest()
    +
    +    def on_request(self, request):
    +        # type: (PipelineRequest, Any) -> None
    +        validate_content = request.context.options.pop('validate_content', False)
    +        if validate_content and request.http_request.method != 'GET':
    +            computed_md5 = encode_base64(StorageContentValidation.get_content_md5(request.http_request.data))
    +            request.http_request.headers[self.header_name] = computed_md5
    +            request.context['validate_content_md5'] = computed_md5
    +        request.context['validate_content'] = validate_content
    +
    +    def on_response(self, request, response):
    +        if response.context.get('validate_content', False) and response.http_response.headers.get('content-md5'):
    +            computed_md5 = request.context.get('validate_content_md5') or \
    +                encode_base64(StorageContentValidation.get_content_md5(response.http_response.body()))
    +            if response.http_response.headers['content-md5'] != computed_md5:
    +                raise AzureError(
    +                    'MD5 mismatch. Expected value is \'{0}\', computed value is \'{1}\'.'.format(
    +                        response.http_response.headers['content-md5'], computed_md5),
    +                    response=response.http_response
    +                )
    +
    +
    +class StorageRetryPolicy(HTTPPolicy):
    +    """
    +    The base class for Exponential and Linear retries containing shared code.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.total_retries = kwargs.pop('retry_total', 10)
    +        self.connect_retries = kwargs.pop('retry_connect', 3)
    +        self.read_retries = kwargs.pop('retry_read', 3)
    +        self.status_retries = kwargs.pop('retry_status', 3)
    +        self.retry_to_secondary = kwargs.pop('retry_to_secondary', False)
    +        super(StorageRetryPolicy, self).__init__()
    +
    +    def _set_next_host_location(self, settings, request):  # pylint: disable=no-self-use
    +        """
    +        A function which sets the next host location on the request, if applicable.
    +
    +        :param ~azure.storage.models.RetryContext context:
    +            The retry context containing the previous host location and the request
    +            to evaluate and possibly modify.
    +        """
    +        if settings['hosts'] and all(settings['hosts'].values()):
    +            url = urlparse(request.url)
    +            # If there's more than one possible location, retry to the alternative
    +            if settings['mode'] == LocationMode.PRIMARY:
    +                settings['mode'] = LocationMode.SECONDARY
    +            else:
    +                settings['mode'] = LocationMode.PRIMARY
    +            updated = url._replace(netloc=settings['hosts'].get(settings['mode']))
    +            request.url = updated.geturl()
    +
    +    def configure_retries(self, request):  # pylint: disable=no-self-use
    +        body_position = None
    +        if hasattr(request.http_request.body, 'read'):
    +            try:
    +                body_position = request.http_request.body.tell()
    +            except (AttributeError, UnsupportedOperation):
    +                # if body position cannot be obtained, then retries will not work
    +                pass
    +        options = request.context.options
    +        return {
    +            'total': options.pop("retry_total", self.total_retries),
    +            'connect': options.pop("retry_connect", self.connect_retries),
    +            'read': options.pop("retry_read", self.read_retries),
    +            'status': options.pop("retry_status", self.status_retries),
    +            'retry_secondary': options.pop("retry_to_secondary", self.retry_to_secondary),
    +            'mode': options.pop("location_mode", LocationMode.PRIMARY),
    +            'hosts': options.pop("hosts", None),
    +            'hook': options.pop("retry_hook", None),
    +            'body_position': body_position,
    +            'count': 0,
    +            'history': []
    +        }
    +
    +    def get_backoff_time(self, settings):  # pylint: disable=unused-argument,no-self-use
    +        """ Formula for computing the current backoff.
    +        Should be calculated by child class.
    +
    +        :rtype: float
    +        """
    +        return 0
    +
    +    def sleep(self, settings, transport):
    +        backoff = self.get_backoff_time(settings)
    +        if not backoff or backoff < 0:
    +            return
    +        transport.sleep(backoff)
    +
    +    def increment(self, settings, request, response=None, error=None):
    +        """Increment the retry counters.
    +
    +        :param response: A pipeline response object.
    +        :param error: An error encountered during the request, or
    +            None if the response was received successfully.
    +
    +        :return: Whether the retry attempts are exhausted.
    +        """
    +        settings['total'] -= 1
    +
    +        if error and isinstance(error, ServiceRequestError):
    +            # Errors when we're fairly sure that the server did not receive the
    +            # request, so it should be safe to retry.
    +            settings['connect'] -= 1
    +            settings['history'].append(RequestHistory(request, error=error))
    +
    +        elif error and isinstance(error, ServiceResponseError):
    +            # Errors that occur after the request has been started, so we should
    +            # assume that the server began processing it.
    +            settings['read'] -= 1
    +            settings['history'].append(RequestHistory(request, error=error))
    +
    +        else:
    +            # Incrementing because of a server error like a 500 in
    +            # status_forcelist and a the given method is in the whitelist
    +            if response:
    +                settings['status'] -= 1
    +                settings['history'].append(RequestHistory(request, http_response=response))
    +
    +        if not is_exhausted(settings):
    +            if request.method not in ['PUT'] and settings['retry_secondary']:
    +                self._set_next_host_location(settings, request)
    +
    +            # rewind the request body if it is a stream
    +            if request.body and hasattr(request.body, 'read'):
    +                # no position was saved, then retry would not work
    +                if settings['body_position'] is None:
    +                    return False
    +                try:
    +                    # attempt to rewind the body to the initial position
    +                    request.body.seek(settings['body_position'], SEEK_SET)
    +                except (UnsupportedOperation, ValueError):
    +                    # if body is not seekable, then retry would not work
    +                    return False
    +            settings['count'] += 1
    +            return True
    +        return False
    +
    +    def send(self, request):
    +        retries_remaining = True
    +        response = None
    +        retry_settings = self.configure_retries(request)
    +        while retries_remaining:
    +            try:
    +                response = self.next.send(request)
    +                if is_retry(response, retry_settings['mode']):
    +                    retries_remaining = self.increment(
    +                        retry_settings,
    +                        request=request.http_request,
    +                        response=response.http_response)
    +                    if retries_remaining:
    +                        retry_hook(
    +                            retry_settings,
    +                            request=request.http_request,
    +                            response=response.http_response,
    +                            error=None)
    +                        self.sleep(retry_settings, request.context.transport)
    +                        continue
    +                break
    +            except AzureError as err:
    +                retries_remaining = self.increment(
    +                    retry_settings, request=request.http_request, error=err)
    +                if retries_remaining:
    +                    retry_hook(
    +                        retry_settings,
    +                        request=request.http_request,
    +                        response=None,
    +                        error=err)
    +                    self.sleep(retry_settings, request.context.transport)
    +                    continue
    +                raise err
    +        if retry_settings['history']:
    +            response.context['history'] = retry_settings['history']
    +        response.http_response.location_mode = retry_settings['mode']
    +        return response
    +
    +
    +class ExponentialRetry(StorageRetryPolicy):
    +    """Exponential retry."""
    +
    +    def __init__(self, initial_backoff=15, increment_base=3, retry_total=3,
    +                 retry_to_secondary=False, random_jitter_range=3, **kwargs):
    +        '''
    +        Constructs an Exponential retry object. The initial_backoff is used for
    +        the first retry. Subsequent retries are retried after initial_backoff +
    +        increment_power^retry_count seconds. For example, by default the first retry
    +        occurs after 15 seconds, the second after (15+3^1) = 18 seconds, and the
    +        third after (15+3^2) = 24 seconds.
    +
    +        :param int initial_backoff:
    +            The initial backoff interval, in seconds, for the first retry.
    +        :param int increment_base:
    +            The base, in seconds, to increment the initial_backoff by after the
    +            first retry.
    +        :param int max_attempts:
    +            The maximum number of retry attempts.
    +        :param bool retry_to_secondary:
    +            Whether the request should be retried to secondary, if able. This should
    +            only be enabled of RA-GRS accounts are used and potentially stale data
    +            can be handled.
    +        :param int random_jitter_range:
    +            A number in seconds which indicates a range to jitter/randomize for the back-off interval.
    +            For example, a random_jitter_range of 3 results in the back-off interval x to vary between x+3 and x-3.
    +        '''
    +        self.initial_backoff = initial_backoff
    +        self.increment_base = increment_base
    +        self.random_jitter_range = random_jitter_range
    +        super(ExponentialRetry, self).__init__(
    +            retry_total=retry_total, retry_to_secondary=retry_to_secondary, **kwargs)
    +
    +    def get_backoff_time(self, settings):
    +        """
    +        Calculates how long to sleep before retrying.
    +
    +        :return:
    +            An integer indicating how long to wait before retrying the request,
    +            or None to indicate no retry should be performed.
    +        :rtype: int or None
    +        """
    +        random_generator = random.Random()
    +        backoff = self.initial_backoff + (0 if settings['count'] == 0 else pow(self.increment_base, settings['count']))
    +        random_range_start = backoff - self.random_jitter_range if backoff > self.random_jitter_range else 0
    +        random_range_end = backoff + self.random_jitter_range
    +        return random_generator.uniform(random_range_start, random_range_end)
    +
    +
    +class LinearRetry(StorageRetryPolicy):
    +    """Linear retry."""
    +
    +    def __init__(self, backoff=15, retry_total=3, retry_to_secondary=False, random_jitter_range=3, **kwargs):
    +        """
    +        Constructs a Linear retry object.
    +
    +        :param int backoff:
    +            The backoff interval, in seconds, between retries.
    +        :param int max_attempts:
    +            The maximum number of retry attempts.
    +        :param bool retry_to_secondary:
    +            Whether the request should be retried to secondary, if able. This should
    +            only be enabled of RA-GRS accounts are used and potentially stale data
    +            can be handled.
    +        :param int random_jitter_range:
    +            A number in seconds which indicates a range to jitter/randomize for the back-off interval.
    +            For example, a random_jitter_range of 3 results in the back-off interval x to vary between x+3 and x-3.
    +        """
    +        self.backoff = backoff
    +        self.random_jitter_range = random_jitter_range
    +        super(LinearRetry, self).__init__(
    +            retry_total=retry_total, retry_to_secondary=retry_to_secondary, **kwargs)
    +
    +    def get_backoff_time(self, settings):
    +        """
    +        Calculates how long to sleep before retrying.
    +
    +        :return:
    +            An integer indicating how long to wait before retrying the request,
    +            or None to indicate no retry should be performed.
    +        :rtype: int or None
    +        """
    +        random_generator = random.Random()
    +        # the backoff interval normally does not change, however there is the possibility
    +        # that it was modified by accessing the property directly after initializing the object
    +        random_range_start = self.backoff - self.random_jitter_range \
    +            if self.backoff > self.random_jitter_range else 0
    +        random_range_end = self.backoff + self.random_jitter_range
    +        return random_generator.uniform(random_range_start, random_range_end)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/policies_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/policies_async.py
    new file mode 100644
    index 000000000000..c0a44767b177
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/policies_async.py
    @@ -0,0 +1,219 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import asyncio
    +import random
    +import logging
    +from typing import Any, TYPE_CHECKING
    +
    +from azure.core.pipeline.policies import AsyncHTTPPolicy
    +from azure.core.exceptions import AzureError
    +
    +from .policies import is_retry, StorageRetryPolicy
    +
    +if TYPE_CHECKING:
    +    from azure.core.pipeline import PipelineRequest, PipelineResponse
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +async def retry_hook(settings, **kwargs):
    +    if settings['hook']:
    +        if asyncio.iscoroutine(settings['hook']):
    +            await settings['hook'](
    +                retry_count=settings['count'] - 1,
    +                location_mode=settings['mode'],
    +                **kwargs)
    +        else:
    +            settings['hook'](
    +                retry_count=settings['count'] - 1,
    +                location_mode=settings['mode'],
    +                **kwargs)
    +
    +
    +class AsyncStorageResponseHook(AsyncHTTPPolicy):
    +
    +    def __init__(self, **kwargs):  # pylint: disable=unused-argument
    +        self._response_callback = kwargs.get('raw_response_hook')
    +        super(AsyncStorageResponseHook, self).__init__()
    +
    +    async def send(self, request):
    +        # type: (PipelineRequest) -> PipelineResponse
    +        data_stream_total = request.context.get('data_stream_total') or \
    +            request.context.options.pop('data_stream_total', None)
    +        download_stream_current = request.context.get('download_stream_current') or \
    +            request.context.options.pop('download_stream_current', None)
    +        upload_stream_current = request.context.get('upload_stream_current') or \
    +            request.context.options.pop('upload_stream_current', None)
    +        response_callback = request.context.get('response_callback') or \
    +            request.context.options.pop('raw_response_hook', self._response_callback)
    +
    +        response = await self.next.send(request)
    +        await response.http_response.load_body()
    +
    +        will_retry = is_retry(response, request.context.options.get('mode'))
    +        if not will_retry and download_stream_current is not None:
    +            download_stream_current += int(response.http_response.headers.get('Content-Length', 0))
    +            if data_stream_total is None:
    +                content_range = response.http_response.headers.get('Content-Range')
    +                if content_range:
    +                    data_stream_total = int(content_range.split(' ', 1)[1].split('/', 1)[1])
    +                else:
    +                    data_stream_total = download_stream_current
    +        elif not will_retry and upload_stream_current is not None:
    +            upload_stream_current += int(response.http_request.headers.get('Content-Length', 0))
    +        for pipeline_obj in [request, response]:
    +            pipeline_obj.context['data_stream_total'] = data_stream_total
    +            pipeline_obj.context['download_stream_current'] = download_stream_current
    +            pipeline_obj.context['upload_stream_current'] = upload_stream_current
    +        if response_callback:
    +            if asyncio.iscoroutine(response_callback):
    +                await response_callback(response)
    +            else:
    +                response_callback(response)
    +            request.context['response_callback'] = response_callback
    +        return response
    +
    +class AsyncStorageRetryPolicy(StorageRetryPolicy):
    +    """
    +    The base class for Exponential and Linear retries containing shared code.
    +    """
    +
    +    async def sleep(self, settings, transport):
    +        backoff = self.get_backoff_time(settings)
    +        if not backoff or backoff < 0:
    +            return
    +        await transport.sleep(backoff)
    +
    +    async def send(self, request):
    +        retries_remaining = True
    +        response = None
    +        retry_settings = self.configure_retries(request)
    +        while retries_remaining:
    +            try:
    +                response = await self.next.send(request)
    +                if is_retry(response, retry_settings['mode']):
    +                    retries_remaining = self.increment(
    +                        retry_settings,
    +                        request=request.http_request,
    +                        response=response.http_response)
    +                    if retries_remaining:
    +                        await retry_hook(
    +                            retry_settings,
    +                            request=request.http_request,
    +                            response=response.http_response,
    +                            error=None)
    +                        await self.sleep(retry_settings, request.context.transport)
    +                        continue
    +                break
    +            except AzureError as err:
    +                retries_remaining = self.increment(
    +                    retry_settings, request=request.http_request, error=err)
    +                if retries_remaining:
    +                    await retry_hook(
    +                        retry_settings,
    +                        request=request.http_request,
    +                        response=None,
    +                        error=err)
    +                    await self.sleep(retry_settings, request.context.transport)
    +                    continue
    +                raise err
    +        if retry_settings['history']:
    +            response.context['history'] = retry_settings['history']
    +        response.http_response.location_mode = retry_settings['mode']
    +        return response
    +
    +
    +class ExponentialRetry(AsyncStorageRetryPolicy):
    +    """Exponential retry."""
    +
    +    def __init__(self, initial_backoff=15, increment_base=3, retry_total=3,
    +                 retry_to_secondary=False, random_jitter_range=3, **kwargs):
    +        '''
    +        Constructs an Exponential retry object. The initial_backoff is used for
    +        the first retry. Subsequent retries are retried after initial_backoff +
    +        increment_power^retry_count seconds. For example, by default the first retry
    +        occurs after 15 seconds, the second after (15+3^1) = 18 seconds, and the
    +        third after (15+3^2) = 24 seconds.
    +
    +        :param int initial_backoff:
    +            The initial backoff interval, in seconds, for the first retry.
    +        :param int increment_base:
    +            The base, in seconds, to increment the initial_backoff by after the
    +            first retry.
    +        :param int max_attempts:
    +            The maximum number of retry attempts.
    +        :param bool retry_to_secondary:
    +            Whether the request should be retried to secondary, if able. This should
    +            only be enabled of RA-GRS accounts are used and potentially stale data
    +            can be handled.
    +        :param int random_jitter_range:
    +            A number in seconds which indicates a range to jitter/randomize for the back-off interval.
    +            For example, a random_jitter_range of 3 results in the back-off interval x to vary between x+3 and x-3.
    +        '''
    +        self.initial_backoff = initial_backoff
    +        self.increment_base = increment_base
    +        self.random_jitter_range = random_jitter_range
    +        super(ExponentialRetry, self).__init__(
    +            retry_total=retry_total, retry_to_secondary=retry_to_secondary, **kwargs)
    +
    +    def get_backoff_time(self, settings):
    +        """
    +        Calculates how long to sleep before retrying.
    +
    +        :return:
    +            An integer indicating how long to wait before retrying the request,
    +            or None to indicate no retry should be performed.
    +        :rtype: int or None
    +        """
    +        random_generator = random.Random()
    +        backoff = self.initial_backoff + (0 if settings['count'] == 0 else pow(self.increment_base, settings['count']))
    +        random_range_start = backoff - self.random_jitter_range if backoff > self.random_jitter_range else 0
    +        random_range_end = backoff + self.random_jitter_range
    +        return random_generator.uniform(random_range_start, random_range_end)
    +
    +
    +class LinearRetry(AsyncStorageRetryPolicy):
    +    """Linear retry."""
    +
    +    def __init__(self, backoff=15, retry_total=3, retry_to_secondary=False, random_jitter_range=3, **kwargs):
    +        """
    +        Constructs a Linear retry object.
    +
    +        :param int backoff:
    +            The backoff interval, in seconds, between retries.
    +        :param int max_attempts:
    +            The maximum number of retry attempts.
    +        :param bool retry_to_secondary:
    +            Whether the request should be retried to secondary, if able. This should
    +            only be enabled of RA-GRS accounts are used and potentially stale data
    +            can be handled.
    +        :param int random_jitter_range:
    +            A number in seconds which indicates a range to jitter/randomize for the back-off interval.
    +            For example, a random_jitter_range of 3 results in the back-off interval x to vary between x+3 and x-3.
    +        """
    +        self.backoff = backoff
    +        self.random_jitter_range = random_jitter_range
    +        super(LinearRetry, self).__init__(
    +            retry_total=retry_total, retry_to_secondary=retry_to_secondary, **kwargs)
    +
    +    def get_backoff_time(self, settings):
    +        """
    +        Calculates how long to sleep before retrying.
    +
    +        :return:
    +            An integer indicating how long to wait before retrying the request,
    +            or None to indicate no retry should be performed.
    +        :rtype: int or None
    +        """
    +        random_generator = random.Random()
    +        # the backoff interval normally does not change, however there is the possibility
    +        # that it was modified by accessing the property directly after initializing the object
    +        random_range_start = self.backoff - self.random_jitter_range \
    +            if self.backoff > self.random_jitter_range else 0
    +        random_range_end = self.backoff + self.random_jitter_range
    +        return random_generator.uniform(random_range_start, random_range_end)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/request_handlers.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/request_handlers.py
    new file mode 100644
    index 000000000000..2ce74d43db21
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/request_handlers.py
    @@ -0,0 +1,147 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, Dict, List, Type, Tuple,
    +    TYPE_CHECKING
    +)
    +
    +import logging
    +from os import fstat
    +from io import (SEEK_END, SEEK_SET, UnsupportedOperation)
    +
    +import isodate
    +
    +from azure.core.exceptions import raise_with_traceback
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +def serialize_iso(attr):
    +    """Serialize Datetime object into ISO-8601 formatted string.
    +
    +    :param Datetime attr: Object to be serialized.
    +    :rtype: str
    +    :raises: ValueError if format invalid.
    +    """
    +    if not attr:
    +        return None
    +    if isinstance(attr, str):
    +        attr = isodate.parse_datetime(attr)
    +    try:
    +        utc = attr.utctimetuple()
    +        if utc.tm_year > 9999 or utc.tm_year < 1:
    +            raise OverflowError("Hit max or min date")
    +
    +        date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format(
    +            utc.tm_year, utc.tm_mon, utc.tm_mday,
    +            utc.tm_hour, utc.tm_min, utc.tm_sec)
    +        return date + 'Z'
    +    except (ValueError, OverflowError) as err:
    +        msg = "Unable to serialize datetime object."
    +        raise_with_traceback(ValueError, msg, err)
    +    except AttributeError as err:
    +        msg = "ISO-8601 object must be valid Datetime object."
    +        raise_with_traceback(TypeError, msg, err)
    +
    +
    +def get_length(data):
    +    length = None
    +    # Check if object implements the __len__ method, covers most input cases such as bytearray.
    +    try:
    +        length = len(data)
    +    except:  # pylint: disable=bare-except
    +        pass
    +
    +    if not length:
    +        # Check if the stream is a file-like stream object.
    +        # If so, calculate the size using the file descriptor.
    +        try:
    +            fileno = data.fileno()
    +        except (AttributeError, UnsupportedOperation):
    +            pass
    +        else:
    +            try:
    +                return fstat(fileno).st_size
    +            except OSError:
    +                # Not a valid fileno, may be possible requests returned
    +                # a socket number?
    +                pass
    +
    +        # If the stream is seekable and tell() is implemented, calculate the stream size.
    +        try:
    +            current_position = data.tell()
    +            data.seek(0, SEEK_END)
    +            length = data.tell() - current_position
    +            data.seek(current_position, SEEK_SET)
    +        except (AttributeError, UnsupportedOperation):
    +            pass
    +
    +    return length
    +
    +
    +def read_length(data):
    +    try:
    +        if hasattr(data, 'read'):
    +            read_data = b''
    +            for chunk in iter(lambda: data.read(4096), b""):
    +                read_data += chunk
    +            return len(read_data), read_data
    +        if hasattr(data, '__iter__'):
    +            read_data = b''
    +            for chunk in data:
    +                read_data += chunk
    +            return len(read_data), read_data
    +    except:  # pylint: disable=bare-except
    +        pass
    +    raise ValueError("Unable to calculate content length, please specify.")
    +
    +
    +def validate_and_format_range_headers(
    +        start_range, end_range, start_range_required=True,
    +        end_range_required=True, check_content_md5=False, align_to_page=False):
    +    # If end range is provided, start range must be provided
    +    if (start_range_required or end_range is not None) and start_range is None:
    +        raise ValueError("start_range value cannot be None.")
    +    if end_range_required and end_range is None:
    +        raise ValueError("end_range value cannot be None.")
    +
    +    # Page ranges must be 512 aligned
    +    if align_to_page:
    +        if start_range is not None and start_range % 512 != 0:
    +            raise ValueError("Invalid page blob start_range: {0}. "
    +                             "The size must be aligned to a 512-byte boundary.".format(start_range))
    +        if end_range is not None and end_range % 512 != 511:
    +            raise ValueError("Invalid page blob end_range: {0}. "
    +                             "The size must be aligned to a 512-byte boundary.".format(end_range))
    +
    +    # Format based on whether end_range is present
    +    range_header = None
    +    if end_range is not None:
    +        range_header = 'bytes={0}-{1}'.format(start_range, end_range)
    +    elif start_range is not None:
    +        range_header = "bytes={0}-".format(start_range)
    +
    +    # Content MD5 can only be provided for a complete range less than 4MB in size
    +    range_validation = None
    +    if check_content_md5:
    +        if start_range is None or end_range is None:
    +            raise ValueError("Both start and end range requied for MD5 content validation.")
    +        if end_range - start_range > 4 * 1024 * 1024:
    +            raise ValueError("Getting content MD5 for a range greater than 4MB is not supported.")
    +        range_validation = 'true'
    +
    +    return range_header, range_validation
    +
    +
    +def add_metadata_headers(metadata=None):
    +    # type: (Optional[Dict[str, str]]) -> Dict[str, str]
    +    headers = {}
    +    if metadata:
    +        for key, value in metadata.items():
    +            headers['x-ms-meta-{}'.format(key)] = value
    +    return headers
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/response_handlers.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/response_handlers.py
    new file mode 100644
    index 000000000000..ac526e594161
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/response_handlers.py
    @@ -0,0 +1,159 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, Dict, List, Type, Tuple,
    +    TYPE_CHECKING
    +)
    +import logging
    +
    +from azure.core.pipeline.policies import ContentDecodePolicy
    +from azure.core.exceptions import (
    +    HttpResponseError,
    +    ResourceNotFoundError,
    +    ResourceModifiedError,
    +    ResourceExistsError,
    +    ClientAuthenticationError,
    +    DecodeError)
    +
    +from .parser import _to_utc_datetime
    +from .models import StorageErrorCode, UserDelegationKey, get_enum_value
    +
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from azure.core.exceptions import AzureError
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +class PartialBatchErrorException(HttpResponseError):
    +    """There is a partial failure in batch operations.
    +
    +    :param str message: The message of the exception.
    +    :param response: Server response to be deserialized.
    +    :param list parts: A list of the parts in multipart response.
    +    """
    +
    +    def __init__(self, message, response, parts):
    +        self.parts = parts
    +        super(PartialBatchErrorException, self).__init__(message=message, response=response)
    +
    +
    +def parse_length_from_content_range(content_range):
    +    '''
    +    Parses the blob length from the content range header: bytes 1-3/65537
    +    '''
    +    if content_range is None:
    +        return None
    +
    +    # First, split in space and take the second half: '1-3/65537'
    +    # Next, split on slash and take the second half: '65537'
    +    # Finally, convert to an int: 65537
    +    return int(content_range.split(' ', 1)[1].split('/', 1)[1])
    +
    +
    +def normalize_headers(headers):
    +    normalized = {}
    +    for key, value in headers.items():
    +        if key.startswith('x-ms-'):
    +            key = key[5:]
    +        normalized[key.lower().replace('-', '_')] = get_enum_value(value)
    +    return normalized
    +
    +
    +def deserialize_metadata(response, obj, headers):  # pylint: disable=unused-argument
    +    raw_metadata = {k: v for k, v in response.headers.items() if k.startswith("x-ms-meta-")}
    +    return {k[10:]: v for k, v in raw_metadata.items()}
    +
    +
    +def return_response_headers(response, deserialized, response_headers):  # pylint: disable=unused-argument
    +    return normalize_headers(response_headers)
    +
    +
    +def return_headers_and_deserialized(response, deserialized, response_headers):  # pylint: disable=unused-argument
    +    return normalize_headers(response_headers), deserialized
    +
    +
    +def return_context_and_deserialized(response, deserialized, response_headers):  # pylint: disable=unused-argument
    +    return response.location_mode, deserialized
    +
    +
    +def process_storage_error(storage_error):
    +    raise_error = HttpResponseError
    +    error_code = storage_error.response.headers.get('x-ms-error-code')
    +    error_message = storage_error.message
    +    additional_data = {}
    +    try:
    +        error_body = ContentDecodePolicy.deserialize_from_http_generics(storage_error.response)
    +        if error_body:
    +            for info in error_body.iter():
    +                if info.tag.lower() == 'code':
    +                    error_code = info.text
    +                elif info.tag.lower() == 'message':
    +                    error_message = info.text
    +                else:
    +                    additional_data[info.tag] = info.text
    +    except DecodeError:
    +        pass
    +
    +    try:
    +        if error_code:
    +            error_code = StorageErrorCode(error_code)
    +            if error_code in [StorageErrorCode.condition_not_met,
    +                              StorageErrorCode.blob_overwritten]:
    +                raise_error = ResourceModifiedError
    +            if error_code in [StorageErrorCode.invalid_authentication_info,
    +                              StorageErrorCode.authentication_failed]:
    +                raise_error = ClientAuthenticationError
    +            if error_code in [StorageErrorCode.resource_not_found,
    +                              StorageErrorCode.cannot_verify_copy_source,
    +                              StorageErrorCode.blob_not_found,
    +                              StorageErrorCode.queue_not_found,
    +                              StorageErrorCode.container_not_found,
    +                              StorageErrorCode.parent_not_found,
    +                              StorageErrorCode.share_not_found]:
    +                raise_error = ResourceNotFoundError
    +            if error_code in [StorageErrorCode.account_already_exists,
    +                              StorageErrorCode.account_being_created,
    +                              StorageErrorCode.resource_already_exists,
    +                              StorageErrorCode.resource_type_mismatch,
    +                              StorageErrorCode.blob_already_exists,
    +                              StorageErrorCode.queue_already_exists,
    +                              StorageErrorCode.container_already_exists,
    +                              StorageErrorCode.container_being_deleted,
    +                              StorageErrorCode.queue_being_deleted,
    +                              StorageErrorCode.share_already_exists,
    +                              StorageErrorCode.share_being_deleted]:
    +                raise_error = ResourceExistsError
    +    except ValueError:
    +        # Got an unknown error code
    +        pass
    +
    +    try:
    +        error_message += "\nErrorCode:{}".format(error_code.value)
    +    except AttributeError:
    +        error_message += "\nErrorCode:{}".format(error_code)
    +    for name, info in additional_data.items():
    +        error_message += "\n{}:{}".format(name, info)
    +
    +    error = raise_error(message=error_message, response=storage_error.response)
    +    error.error_code = error_code
    +    error.additional_info = additional_data
    +    raise error
    +
    +
    +def parse_to_internal_user_delegation_key(service_user_delegation_key):
    +    internal_user_delegation_key = UserDelegationKey()
    +    internal_user_delegation_key.signed_oid = service_user_delegation_key.signed_oid
    +    internal_user_delegation_key.signed_tid = service_user_delegation_key.signed_tid
    +    internal_user_delegation_key.signed_start = _to_utc_datetime(service_user_delegation_key.signed_start)
    +    internal_user_delegation_key.signed_expiry = _to_utc_datetime(service_user_delegation_key.signed_expiry)
    +    internal_user_delegation_key.signed_service = service_user_delegation_key.signed_service
    +    internal_user_delegation_key.signed_version = service_user_delegation_key.signed_version
    +    internal_user_delegation_key.value = service_user_delegation_key.value
    +    return internal_user_delegation_key
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/shared_access_signature.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/shared_access_signature.py
    new file mode 100644
    index 000000000000..367c6554ef89
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/shared_access_signature.py
    @@ -0,0 +1,209 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from datetime import date
    +
    +from .parser import _str, _to_utc_datetime
    +from .constants import X_MS_VERSION
    +from . import sign_string, url_quote
    +
    +
    +class QueryStringConstants(object):
    +    SIGNED_SIGNATURE = 'sig'
    +    SIGNED_PERMISSION = 'sp'
    +    SIGNED_START = 'st'
    +    SIGNED_EXPIRY = 'se'
    +    SIGNED_RESOURCE = 'sr'
    +    SIGNED_IDENTIFIER = 'si'
    +    SIGNED_IP = 'sip'
    +    SIGNED_PROTOCOL = 'spr'
    +    SIGNED_VERSION = 'sv'
    +    SIGNED_CACHE_CONTROL = 'rscc'
    +    SIGNED_CONTENT_DISPOSITION = 'rscd'
    +    SIGNED_CONTENT_ENCODING = 'rsce'
    +    SIGNED_CONTENT_LANGUAGE = 'rscl'
    +    SIGNED_CONTENT_TYPE = 'rsct'
    +    START_PK = 'spk'
    +    START_RK = 'srk'
    +    END_PK = 'epk'
    +    END_RK = 'erk'
    +    SIGNED_RESOURCE_TYPES = 'srt'
    +    SIGNED_SERVICES = 'ss'
    +    SIGNED_OID = 'skoid'
    +    SIGNED_TID = 'sktid'
    +    SIGNED_KEY_START = 'skt'
    +    SIGNED_KEY_EXPIRY = 'ske'
    +    SIGNED_KEY_SERVICE = 'sks'
    +    SIGNED_KEY_VERSION = 'skv'
    +
    +    @staticmethod
    +    def to_list():
    +        return [
    +            QueryStringConstants.SIGNED_SIGNATURE,
    +            QueryStringConstants.SIGNED_PERMISSION,
    +            QueryStringConstants.SIGNED_START,
    +            QueryStringConstants.SIGNED_EXPIRY,
    +            QueryStringConstants.SIGNED_RESOURCE,
    +            QueryStringConstants.SIGNED_IDENTIFIER,
    +            QueryStringConstants.SIGNED_IP,
    +            QueryStringConstants.SIGNED_PROTOCOL,
    +            QueryStringConstants.SIGNED_VERSION,
    +            QueryStringConstants.SIGNED_CACHE_CONTROL,
    +            QueryStringConstants.SIGNED_CONTENT_DISPOSITION,
    +            QueryStringConstants.SIGNED_CONTENT_ENCODING,
    +            QueryStringConstants.SIGNED_CONTENT_LANGUAGE,
    +            QueryStringConstants.SIGNED_CONTENT_TYPE,
    +            QueryStringConstants.START_PK,
    +            QueryStringConstants.START_RK,
    +            QueryStringConstants.END_PK,
    +            QueryStringConstants.END_RK,
    +            QueryStringConstants.SIGNED_RESOURCE_TYPES,
    +            QueryStringConstants.SIGNED_SERVICES,
    +            QueryStringConstants.SIGNED_OID,
    +            QueryStringConstants.SIGNED_TID,
    +            QueryStringConstants.SIGNED_KEY_START,
    +            QueryStringConstants.SIGNED_KEY_EXPIRY,
    +            QueryStringConstants.SIGNED_KEY_SERVICE,
    +            QueryStringConstants.SIGNED_KEY_VERSION,
    +        ]
    +
    +
    +class SharedAccessSignature(object):
    +    '''
    +    Provides a factory for creating account access
    +    signature tokens with an account name and account key. Users can either
    +    use the factory or can construct the appropriate service and use the
    +    generate_*_shared_access_signature method directly.
    +    '''
    +
    +    def __init__(self, account_name, account_key, x_ms_version=X_MS_VERSION):
    +        '''
    +        :param str account_name:
    +            The storage account name used to generate the shared access signatures.
    +        :param str account_key:
    +            The access key to generate the shares access signatures.
    +        :param str x_ms_version:
    +            The service version used to generate the shared access signatures.
    +        '''
    +        self.account_name = account_name
    +        self.account_key = account_key
    +        self.x_ms_version = x_ms_version
    +
    +    def generate_account(self, services, resource_types, permission, expiry, start=None,
    +                         ip=None, protocol=None):
    +        '''
    +        Generates a shared access signature for the account.
    +        Use the returned signature with the sas_token parameter of the service
    +        or to create a new account object.
    +
    +        :param ResourceTypes resource_types:
    +            Specifies the resource types that are accessible with the account
    +            SAS. You can combine values to provide access to more than one
    +            resource type.
    +        :param AccountSasPermissions permission:
    +            The permissions associated with the shared access signature. The
    +            user is restricted to operations allowed by the permissions.
    +            Required unless an id is given referencing a stored access policy
    +            which contains this field. This field must be omitted if it has been
    +            specified in an associated stored access policy. You can combine
    +            values to provide more than one permission.
    +        :param expiry:
    +            The time at which the shared access signature becomes invalid.
    +            Required unless an id is given referencing a stored access policy
    +            which contains this field. This field must be omitted if it has
    +            been specified in an associated stored access policy. Azure will always
    +            convert values to UTC. If a date is passed in without timezone info, it
    +            is assumed to be UTC.
    +        :type expiry: datetime or str
    +        :param start:
    +            The time at which the shared access signature becomes valid. If
    +            omitted, start time for this call is assumed to be the time when the
    +            storage service receives the request. Azure will always convert values
    +            to UTC. If a date is passed in without timezone info, it is assumed to
    +            be UTC.
    +        :type start: datetime or str
    +        :param str ip:
    +            Specifies an IP address or a range of IP addresses from which to accept requests.
    +            If the IP address from which the request originates does not match the IP address
    +            or address range specified on the SAS token, the request is not authenticated.
    +            For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS
    +            restricts the request to those IP addresses.
    +        :param str protocol:
    +            Specifies the protocol permitted for a request made. The default value
    +            is https,http. See :class:`~azure.storage.common.models.Protocol` for possible values.
    +        '''
    +        sas = _SharedAccessHelper()
    +        sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version)
    +        sas.add_account(services, resource_types)
    +        sas.add_account_signature(self.account_name, self.account_key)
    +
    +        return sas.get_token()
    +
    +
    +class _SharedAccessHelper(object):
    +    def __init__(self):
    +        self.query_dict = {}
    +
    +    def _add_query(self, name, val):
    +        if val:
    +            self.query_dict[name] = _str(val) if val is not None else None
    +
    +    def add_base(self, permission, expiry, start, ip, protocol, x_ms_version):
    +        if isinstance(start, date):
    +            start = _to_utc_datetime(start)
    +
    +        if isinstance(expiry, date):
    +            expiry = _to_utc_datetime(expiry)
    +
    +        self._add_query(QueryStringConstants.SIGNED_START, start)
    +        self._add_query(QueryStringConstants.SIGNED_EXPIRY, expiry)
    +        self._add_query(QueryStringConstants.SIGNED_PERMISSION, permission)
    +        self._add_query(QueryStringConstants.SIGNED_IP, ip)
    +        self._add_query(QueryStringConstants.SIGNED_PROTOCOL, protocol)
    +        self._add_query(QueryStringConstants.SIGNED_VERSION, x_ms_version)
    +
    +    def add_resource(self, resource):
    +        self._add_query(QueryStringConstants.SIGNED_RESOURCE, resource)
    +
    +    def add_id(self, policy_id):
    +        self._add_query(QueryStringConstants.SIGNED_IDENTIFIER, policy_id)
    +
    +    def add_account(self, services, resource_types):
    +        self._add_query(QueryStringConstants.SIGNED_SERVICES, services)
    +        self._add_query(QueryStringConstants.SIGNED_RESOURCE_TYPES, resource_types)
    +
    +    def add_override_response_headers(self, cache_control,
    +                                      content_disposition,
    +                                      content_encoding,
    +                                      content_language,
    +                                      content_type):
    +        self._add_query(QueryStringConstants.SIGNED_CACHE_CONTROL, cache_control)
    +        self._add_query(QueryStringConstants.SIGNED_CONTENT_DISPOSITION, content_disposition)
    +        self._add_query(QueryStringConstants.SIGNED_CONTENT_ENCODING, content_encoding)
    +        self._add_query(QueryStringConstants.SIGNED_CONTENT_LANGUAGE, content_language)
    +        self._add_query(QueryStringConstants.SIGNED_CONTENT_TYPE, content_type)
    +
    +    def add_account_signature(self, account_name, account_key):
    +        def get_value_to_append(query):
    +            return_value = self.query_dict.get(query) or ''
    +            return return_value + '\n'
    +
    +        string_to_sign = \
    +            (account_name + '\n' +
    +             get_value_to_append(QueryStringConstants.SIGNED_PERMISSION) +
    +             get_value_to_append(QueryStringConstants.SIGNED_SERVICES) +
    +             get_value_to_append(QueryStringConstants.SIGNED_RESOURCE_TYPES) +
    +             get_value_to_append(QueryStringConstants.SIGNED_START) +
    +             get_value_to_append(QueryStringConstants.SIGNED_EXPIRY) +
    +             get_value_to_append(QueryStringConstants.SIGNED_IP) +
    +             get_value_to_append(QueryStringConstants.SIGNED_PROTOCOL) +
    +             get_value_to_append(QueryStringConstants.SIGNED_VERSION))
    +
    +        self._add_query(QueryStringConstants.SIGNED_SIGNATURE,
    +                        sign_string(account_key, string_to_sign))
    +
    +    def get_token(self):
    +        return '&'.join(['{0}={1}'.format(n, url_quote(v)) for n, v in self.query_dict.items() if v is not None])
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/uploads.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/uploads.py
    new file mode 100644
    index 000000000000..13b814e11040
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/uploads.py
    @@ -0,0 +1,548 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=no-self-use
    +
    +from concurrent import futures
    +from io import (BytesIO, IOBase, SEEK_CUR, SEEK_END, SEEK_SET, UnsupportedOperation)
    +from threading import Lock
    +from itertools import islice
    +from math import ceil
    +
    +import six
    +
    +from azure.core.tracing.common import with_current_context
    +
    +from . import encode_base64, url_quote
    +from .request_handlers import get_length
    +from .response_handlers import return_response_headers
    +from .encryption import get_blob_encryptor_and_padder
    +
    +
    +_LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE = 4 * 1024 * 1024
    +_ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM = "{0} should be a seekable file-like/io.IOBase type stream object."
    +
    +
    +def _parallel_uploads(executor, uploader, pending, running):
    +    range_ids = []
    +    while True:
    +        # Wait for some download to finish before adding a new one
    +        done, running = futures.wait(running, return_when=futures.FIRST_COMPLETED)
    +        range_ids.extend([chunk.result() for chunk in done])
    +        try:
    +            next_chunk = next(pending)
    +        except StopIteration:
    +            break
    +        else:
    +            running.add(executor.submit(with_current_context(uploader), next_chunk))
    +
    +    # Wait for the remaining uploads to finish
    +    done, _running = futures.wait(running)
    +    range_ids.extend([chunk.result() for chunk in done])
    +    return range_ids
    +
    +
    +def upload_data_chunks(
    +        service=None,
    +        uploader_class=None,
    +        total_size=None,
    +        chunk_size=None,
    +        max_concurrency=None,
    +        stream=None,
    +        validate_content=None,
    +        encryption_options=None,
    +        **kwargs):
    +
    +    if encryption_options:
    +        encryptor, padder = get_blob_encryptor_and_padder(
    +            encryption_options.get('cek'),
    +            encryption_options.get('vector'),
    +            uploader_class is not PageBlobChunkUploader)
    +        kwargs['encryptor'] = encryptor
    +        kwargs['padder'] = padder
    +
    +    parallel = max_concurrency > 1
    +    if parallel and 'modified_access_conditions' in kwargs:
    +        # Access conditions do not work with parallelism
    +        kwargs['modified_access_conditions'] = None
    +
    +    uploader = uploader_class(
    +        service=service,
    +        total_size=total_size,
    +        chunk_size=chunk_size,
    +        stream=stream,
    +        parallel=parallel,
    +        validate_content=validate_content,
    +        **kwargs)
    +    if parallel:
    +        executor = futures.ThreadPoolExecutor(max_concurrency)
    +        upload_tasks = uploader.get_chunk_streams()
    +        running_futures = [
    +            executor.submit(with_current_context(uploader.process_chunk), u)
    +            for u in islice(upload_tasks, 0, max_concurrency)
    +        ]
    +        range_ids = _parallel_uploads(executor, uploader.process_chunk, upload_tasks, running_futures)
    +    else:
    +        range_ids = [uploader.process_chunk(result) for result in uploader.get_chunk_streams()]
    +    if any(range_ids):
    +        return [r[1] for r in sorted(range_ids, key=lambda r: r[0])]
    +    return uploader.response_headers
    +
    +
    +def upload_substream_blocks(
    +        service=None,
    +        uploader_class=None,
    +        total_size=None,
    +        chunk_size=None,
    +        max_concurrency=None,
    +        stream=None,
    +        **kwargs):
    +    parallel = max_concurrency > 1
    +    if parallel and 'modified_access_conditions' in kwargs:
    +        # Access conditions do not work with parallelism
    +        kwargs['modified_access_conditions'] = None
    +    uploader = uploader_class(
    +        service=service,
    +        total_size=total_size,
    +        chunk_size=chunk_size,
    +        stream=stream,
    +        parallel=parallel,
    +        **kwargs)
    +
    +    if parallel:
    +        executor = futures.ThreadPoolExecutor(max_concurrency)
    +        upload_tasks = uploader.get_substream_blocks()
    +        running_futures = [
    +            executor.submit(with_current_context(uploader.process_substream_block), u)
    +            for u in islice(upload_tasks, 0, max_concurrency)
    +        ]
    +        range_ids = _parallel_uploads(executor, uploader.process_substream_block, upload_tasks, running_futures)
    +    else:
    +        range_ids = [uploader.process_substream_block(b) for b in uploader.get_substream_blocks()]
    +    return sorted(range_ids)
    +
    +
    +class _ChunkUploader(object):  # pylint: disable=too-many-instance-attributes
    +
    +    def __init__(self, service, total_size, chunk_size, stream, parallel, encryptor=None, padder=None, **kwargs):
    +        self.service = service
    +        self.total_size = total_size
    +        self.chunk_size = chunk_size
    +        self.stream = stream
    +        self.parallel = parallel
    +
    +        # Stream management
    +        self.stream_start = stream.tell() if parallel else None
    +        self.stream_lock = Lock() if parallel else None
    +
    +        # Progress feedback
    +        self.progress_total = 0
    +        self.progress_lock = Lock() if parallel else None
    +
    +        # Encryption
    +        self.encryptor = encryptor
    +        self.padder = padder
    +        self.response_headers = None
    +        self.etag = None
    +        self.last_modified = None
    +        self.request_options = kwargs
    +
    +    def get_chunk_streams(self):
    +        index = 0
    +        while True:
    +            data = b""
    +            read_size = self.chunk_size
    +
    +            # Buffer until we either reach the end of the stream or get a whole chunk.
    +            while True:
    +                if self.total_size:
    +                    read_size = min(self.chunk_size - len(data), self.total_size - (index + len(data)))
    +                temp = self.stream.read(read_size)
    +                if not isinstance(temp, six.binary_type):
    +                    raise TypeError("Blob data should be of type bytes.")
    +                data += temp or b""
    +
    +                # We have read an empty string and so are at the end
    +                # of the buffer or we have read a full chunk.
    +                if temp == b"" or len(data) == self.chunk_size:
    +                    break
    +
    +            if len(data) == self.chunk_size:
    +                if self.padder:
    +                    data = self.padder.update(data)
    +                if self.encryptor:
    +                    data = self.encryptor.update(data)
    +                yield index, data
    +            else:
    +                if self.padder:
    +                    data = self.padder.update(data) + self.padder.finalize()
    +                if self.encryptor:
    +                    data = self.encryptor.update(data) + self.encryptor.finalize()
    +                if data:
    +                    yield index, data
    +                break
    +            index += len(data)
    +
    +    def process_chunk(self, chunk_data):
    +        chunk_bytes = chunk_data[1]
    +        chunk_offset = chunk_data[0]
    +        return self._upload_chunk_with_progress(chunk_offset, chunk_bytes)
    +
    +    def _update_progress(self, length):
    +        if self.progress_lock is not None:
    +            with self.progress_lock:
    +                self.progress_total += length
    +        else:
    +            self.progress_total += length
    +
    +    def _upload_chunk(self, chunk_offset, chunk_data):
    +        raise NotImplementedError("Must be implemented by child class.")
    +
    +    def _upload_chunk_with_progress(self, chunk_offset, chunk_data):
    +        range_id = self._upload_chunk(chunk_offset, chunk_data)
    +        self._update_progress(len(chunk_data))
    +        return range_id
    +
    +    def get_substream_blocks(self):
    +        assert self.chunk_size is not None
    +        lock = self.stream_lock
    +        blob_length = self.total_size
    +
    +        if blob_length is None:
    +            blob_length = get_length(self.stream)
    +            if blob_length is None:
    +                raise ValueError("Unable to determine content length of upload data.")
    +
    +        blocks = int(ceil(blob_length / (self.chunk_size * 1.0)))
    +        last_block_size = self.chunk_size if blob_length % self.chunk_size == 0 else blob_length % self.chunk_size
    +
    +        for i in range(blocks):
    +            index = i * self.chunk_size
    +            length = last_block_size if i == blocks - 1 else self.chunk_size
    +            yield ('BlockId{}'.format("%05d" % i), SubStream(self.stream, index, length, lock))
    +
    +    def process_substream_block(self, block_data):
    +        return self._upload_substream_block_with_progress(block_data[0], block_data[1])
    +
    +    def _upload_substream_block(self, block_id, block_stream):
    +        raise NotImplementedError("Must be implemented by child class.")
    +
    +    def _upload_substream_block_with_progress(self, block_id, block_stream):
    +        range_id = self._upload_substream_block(block_id, block_stream)
    +        self._update_progress(len(block_stream))
    +        return range_id
    +
    +    def set_response_properties(self, resp):
    +        self.etag = resp.etag
    +        self.last_modified = resp.last_modified
    +
    +
    +class BlockBlobChunkUploader(_ChunkUploader):
    +
    +    def __init__(self, *args, **kwargs):
    +        kwargs.pop("modified_access_conditions", None)
    +        super(BlockBlobChunkUploader, self).__init__(*args, **kwargs)
    +        self.current_length = None
    +
    +    def _upload_chunk(self, chunk_offset, chunk_data):
    +        # TODO: This is incorrect, but works with recording.
    +        index = '{0:032d}'.format(chunk_offset)
    +        block_id = encode_base64(url_quote(encode_base64(index)))
    +        self.service.stage_block(
    +            block_id,
    +            len(chunk_data),
    +            chunk_data,
    +            data_stream_total=self.total_size,
    +            upload_stream_current=self.progress_total,
    +            **self.request_options
    +        )
    +        return index, block_id
    +
    +    def _upload_substream_block(self, block_id, block_stream):
    +        try:
    +            self.service.stage_block(
    +                block_id,
    +                len(block_stream),
    +                block_stream,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options
    +            )
    +        finally:
    +            block_stream.close()
    +        return block_id
    +
    +
    +class PageBlobChunkUploader(_ChunkUploader):  # pylint: disable=abstract-method
    +
    +    def _is_chunk_empty(self, chunk_data):
    +        # read until non-zero byte is encountered
    +        # if reached the end without returning, then chunk_data is all 0's
    +        return not any(bytearray(chunk_data))
    +
    +    def _upload_chunk(self, chunk_offset, chunk_data):
    +        # avoid uploading the empty pages
    +        if not self._is_chunk_empty(chunk_data):
    +            chunk_end = chunk_offset + len(chunk_data) - 1
    +            content_range = "bytes={0}-{1}".format(chunk_offset, chunk_end)
    +            computed_md5 = None
    +            self.response_headers = self.service.upload_pages(
    +                chunk_data,
    +                content_length=len(chunk_data),
    +                transactional_content_md5=computed_md5,
    +                range=content_range,
    +                cls=return_response_headers,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options
    +            )
    +
    +            if not self.parallel and self.request_options.get('modified_access_conditions'):
    +                self.request_options['modified_access_conditions'].if_match = self.response_headers['etag']
    +
    +
    +class AppendBlobChunkUploader(_ChunkUploader):  # pylint: disable=abstract-method
    +
    +    def __init__(self, *args, **kwargs):
    +        super(AppendBlobChunkUploader, self).__init__(*args, **kwargs)
    +        self.current_length = None
    +
    +    def _upload_chunk(self, chunk_offset, chunk_data):
    +        if self.current_length is None:
    +            self.response_headers = self.service.append_block(
    +                chunk_data,
    +                content_length=len(chunk_data),
    +                cls=return_response_headers,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options
    +            )
    +            self.current_length = int(self.response_headers["blob_append_offset"])
    +        else:
    +            self.request_options['append_position_access_conditions'].append_position = \
    +                self.current_length + chunk_offset
    +            self.response_headers = self.service.append_block(
    +                chunk_data,
    +                content_length=len(chunk_data),
    +                cls=return_response_headers,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options
    +            )
    +
    +
    +class FileChunkUploader(_ChunkUploader):  # pylint: disable=abstract-method
    +
    +    def _upload_chunk(self, chunk_offset, chunk_data):
    +        length = len(chunk_data)
    +        chunk_end = chunk_offset + length - 1
    +        response = self.service.upload_range(
    +            chunk_data,
    +            chunk_offset,
    +            length,
    +            data_stream_total=self.total_size,
    +            upload_stream_current=self.progress_total,
    +            **self.request_options
    +        )
    +        return 'bytes={0}-{1}'.format(chunk_offset, chunk_end), response
    +
    +
    +class SubStream(IOBase):
    +
    +    def __init__(self, wrapped_stream, stream_begin_index, length, lockObj):
    +        # Python 2.7: file-like objects created with open() typically support seek(), but are not
    +        # derivations of io.IOBase and thus do not implement seekable().
    +        # Python > 3.0: file-like objects created with open() are derived from io.IOBase.
    +        try:
    +            # only the main thread runs this, so there's no need grabbing the lock
    +            wrapped_stream.seek(0, SEEK_CUR)
    +        except:
    +            raise ValueError("Wrapped stream must support seek().")
    +
    +        self._lock = lockObj
    +        self._wrapped_stream = wrapped_stream
    +        self._position = 0
    +        self._stream_begin_index = stream_begin_index
    +        self._length = length
    +        self._buffer = BytesIO()
    +
    +        # we must avoid buffering more than necessary, and also not use up too much memory
    +        # so the max buffer size is capped at 4MB
    +        self._max_buffer_size = (
    +            length if length < _LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE else _LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE
    +        )
    +        self._current_buffer_start = 0
    +        self._current_buffer_size = 0
    +        super(SubStream, self).__init__()
    +
    +    def __len__(self):
    +        return self._length
    +
    +    def close(self):
    +        if self._buffer:
    +            self._buffer.close()
    +        self._wrapped_stream = None
    +        IOBase.close(self)
    +
    +    def fileno(self):
    +        return self._wrapped_stream.fileno()
    +
    +    def flush(self):
    +        pass
    +
    +    def read(self, size=None):
    +        if self.closed:  # pylint: disable=using-constant-test
    +            raise ValueError("Stream is closed.")
    +
    +        if size is None:
    +            size = self._length - self._position
    +
    +        # adjust if out of bounds
    +        if size + self._position >= self._length:
    +            size = self._length - self._position
    +
    +        # return fast
    +        if size == 0 or self._buffer.closed:
    +            return b""
    +
    +        # attempt first read from the read buffer and update position
    +        read_buffer = self._buffer.read(size)
    +        bytes_read = len(read_buffer)
    +        bytes_remaining = size - bytes_read
    +        self._position += bytes_read
    +
    +        # repopulate the read buffer from the underlying stream to fulfill the request
    +        # ensure the seek and read operations are done atomically (only if a lock is provided)
    +        if bytes_remaining > 0:
    +            with self._buffer:
    +                # either read in the max buffer size specified on the class
    +                # or read in just enough data for the current block/sub stream
    +                current_max_buffer_size = min(self._max_buffer_size, self._length - self._position)
    +
    +                # lock is only defined if max_concurrency > 1 (parallel uploads)
    +                if self._lock:
    +                    with self._lock:
    +                        # reposition the underlying stream to match the start of the data to read
    +                        absolute_position = self._stream_begin_index + self._position
    +                        self._wrapped_stream.seek(absolute_position, SEEK_SET)
    +                        # If we can't seek to the right location, our read will be corrupted so fail fast.
    +                        if self._wrapped_stream.tell() != absolute_position:
    +                            raise IOError("Stream failed to seek to the desired location.")
    +                        buffer_from_stream = self._wrapped_stream.read(current_max_buffer_size)
    +                else:
    +                    buffer_from_stream = self._wrapped_stream.read(current_max_buffer_size)
    +
    +            if buffer_from_stream:
    +                # update the buffer with new data from the wrapped stream
    +                # we need to note down the start position and size of the buffer, in case seek is performed later
    +                self._buffer = BytesIO(buffer_from_stream)
    +                self._current_buffer_start = self._position
    +                self._current_buffer_size = len(buffer_from_stream)
    +
    +                # read the remaining bytes from the new buffer and update position
    +                second_read_buffer = self._buffer.read(bytes_remaining)
    +                read_buffer += second_read_buffer
    +                self._position += len(second_read_buffer)
    +
    +        return read_buffer
    +
    +    def readable(self):
    +        return True
    +
    +    def readinto(self, b):
    +        raise UnsupportedOperation
    +
    +    def seek(self, offset, whence=0):
    +        if whence is SEEK_SET:
    +            start_index = 0
    +        elif whence is SEEK_CUR:
    +            start_index = self._position
    +        elif whence is SEEK_END:
    +            start_index = self._length
    +            offset = -offset
    +        else:
    +            raise ValueError("Invalid argument for the 'whence' parameter.")
    +
    +        pos = start_index + offset
    +
    +        if pos > self._length:
    +            pos = self._length
    +        elif pos < 0:
    +            pos = 0
    +
    +        # check if buffer is still valid
    +        # if not, drop buffer
    +        if pos < self._current_buffer_start or pos >= self._current_buffer_start + self._current_buffer_size:
    +            self._buffer.close()
    +            self._buffer = BytesIO()
    +        else:  # if yes seek to correct position
    +            delta = pos - self._current_buffer_start
    +            self._buffer.seek(delta, SEEK_SET)
    +
    +        self._position = pos
    +        return pos
    +
    +    def seekable(self):
    +        return True
    +
    +    def tell(self):
    +        return self._position
    +
    +    def write(self):
    +        raise UnsupportedOperation
    +
    +    def writelines(self):
    +        raise UnsupportedOperation
    +
    +    def writeable(self):
    +        return False
    +
    +
    +class IterStreamer(object):
    +    """
    +    File-like streaming iterator.
    +    """
    +
    +    def __init__(self, generator, encoding="UTF-8"):
    +        self.generator = generator
    +        self.iterator = iter(generator)
    +        self.leftover = b""
    +        self.encoding = encoding
    +
    +    def __len__(self):
    +        return self.generator.__len__()
    +
    +    def __iter__(self):
    +        return self.iterator
    +
    +    def seekable(self):
    +        return False
    +
    +    def next(self):
    +        return next(self.iterator)
    +
    +    def tell(self, *args, **kwargs):
    +        raise UnsupportedOperation("Data generator does not support tell.")
    +
    +    def seek(self, *args, **kwargs):
    +        raise UnsupportedOperation("Data generator is unseekable.")
    +
    +    def read(self, size):
    +        data = self.leftover
    +        count = len(self.leftover)
    +        try:
    +            while count < size:
    +                chunk = self.next()
    +                if isinstance(chunk, six.text_type):
    +                    chunk = chunk.encode(self.encoding)
    +                data += chunk
    +                count += len(chunk)
    +        except StopIteration:
    +            pass
    +
    +        if count > size:
    +            self.leftover = data[size:]
    +
    +        return data[:size]
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/uploads_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/uploads_async.py
    new file mode 100644
    index 000000000000..92fcab5ef5f0
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared/uploads_async.py
    @@ -0,0 +1,350 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=no-self-use
    +
    +import asyncio
    +from asyncio import Lock
    +from itertools import islice
    +import threading
    +
    +from math import ceil
    +
    +import six
    +
    +from . import encode_base64, url_quote
    +from .request_handlers import get_length
    +from .response_handlers import return_response_headers
    +from .encryption import get_blob_encryptor_and_padder
    +from .uploads import SubStream, IterStreamer  # pylint: disable=unused-import
    +
    +
    +_LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE = 4 * 1024 * 1024
    +_ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM = '{0} should be a seekable file-like/io.IOBase type stream object.'
    +
    +
    +async def _parallel_uploads(uploader, pending, running):
    +    range_ids = []
    +    while True:
    +        # Wait for some download to finish before adding a new one
    +        done, running = await asyncio.wait(running, return_when=asyncio.FIRST_COMPLETED)
    +        range_ids.extend([chunk.result() for chunk in done])
    +        try:
    +            next_chunk = next(pending)
    +        except StopIteration:
    +            break
    +        else:
    +            running.add(asyncio.ensure_future(uploader(next_chunk)))
    +
    +    # Wait for the remaining uploads to finish
    +    if running:
    +        done, _running = await asyncio.wait(running)
    +        range_ids.extend([chunk.result() for chunk in done])
    +    return range_ids
    +
    +
    +async def upload_data_chunks(
    +        service=None,
    +        uploader_class=None,
    +        total_size=None,
    +        chunk_size=None,
    +        max_concurrency=None,
    +        stream=None,
    +        encryption_options=None,
    +        **kwargs):
    +
    +    if encryption_options:
    +        encryptor, padder = get_blob_encryptor_and_padder(
    +            encryption_options.get('cek'),
    +            encryption_options.get('vector'),
    +            uploader_class is not PageBlobChunkUploader)
    +        kwargs['encryptor'] = encryptor
    +        kwargs['padder'] = padder
    +
    +    parallel = max_concurrency > 1
    +    if parallel and 'modified_access_conditions' in kwargs:
    +        # Access conditions do not work with parallelism
    +        kwargs['modified_access_conditions'] = None
    +
    +    uploader = uploader_class(
    +        service=service,
    +        total_size=total_size,
    +        chunk_size=chunk_size,
    +        stream=stream,
    +        parallel=parallel,
    +        **kwargs)
    +
    +    if parallel:
    +        upload_tasks = uploader.get_chunk_streams()
    +        running_futures = [
    +            asyncio.ensure_future(uploader.process_chunk(u))
    +            for u in islice(upload_tasks, 0, max_concurrency)
    +        ]
    +        range_ids = await _parallel_uploads(uploader.process_chunk, upload_tasks, running_futures)
    +    else:
    +        range_ids = []
    +        for chunk in uploader.get_chunk_streams():
    +            range_ids.append(await uploader.process_chunk(chunk))
    +
    +    if any(range_ids):
    +        return [r[1] for r in sorted(range_ids, key=lambda r: r[0])]
    +    return uploader.response_headers
    +
    +
    +async def upload_substream_blocks(
    +        service=None,
    +        uploader_class=None,
    +        total_size=None,
    +        chunk_size=None,
    +        max_concurrency=None,
    +        stream=None,
    +        **kwargs):
    +    parallel = max_concurrency > 1
    +    if parallel and 'modified_access_conditions' in kwargs:
    +        # Access conditions do not work with parallelism
    +        kwargs['modified_access_conditions'] = None
    +    uploader = uploader_class(
    +        service=service,
    +        total_size=total_size,
    +        chunk_size=chunk_size,
    +        stream=stream,
    +        parallel=parallel,
    +        **kwargs)
    +
    +    if parallel:
    +        upload_tasks = uploader.get_substream_blocks()
    +        running_futures = [
    +            asyncio.ensure_future(uploader.process_substream_block(u))
    +            for u in islice(upload_tasks, 0, max_concurrency)
    +        ]
    +        range_ids = await _parallel_uploads(uploader.process_substream_block, upload_tasks, running_futures)
    +    else:
    +        range_ids = []
    +        for block in uploader.get_substream_blocks():
    +            range_ids.append(await uploader.process_substream_block(block))
    +    return sorted(range_ids)
    +
    +
    +class _ChunkUploader(object):  # pylint: disable=too-many-instance-attributes
    +
    +    def __init__(self, service, total_size, chunk_size, stream, parallel, encryptor=None, padder=None, **kwargs):
    +        self.service = service
    +        self.total_size = total_size
    +        self.chunk_size = chunk_size
    +        self.stream = stream
    +        self.parallel = parallel
    +
    +        # Stream management
    +        self.stream_start = stream.tell() if parallel else None
    +        self.stream_lock = threading.Lock() if parallel else None
    +
    +        # Progress feedback
    +        self.progress_total = 0
    +        self.progress_lock = Lock() if parallel else None
    +
    +        # Encryption
    +        self.encryptor = encryptor
    +        self.padder = padder
    +        self.response_headers = None
    +        self.etag = None
    +        self.last_modified = None
    +        self.request_options = kwargs
    +
    +    def get_chunk_streams(self):
    +        index = 0
    +        while True:
    +            data = b''
    +            read_size = self.chunk_size
    +
    +            # Buffer until we either reach the end of the stream or get a whole chunk.
    +            while True:
    +                if self.total_size:
    +                    read_size = min(self.chunk_size - len(data), self.total_size - (index + len(data)))
    +                temp = self.stream.read(read_size)
    +                if not isinstance(temp, six.binary_type):
    +                    raise TypeError('Blob data should be of type bytes.')
    +                data += temp or b""
    +
    +                # We have read an empty string and so are at the end
    +                # of the buffer or we have read a full chunk.
    +                if temp == b'' or len(data) == self.chunk_size:
    +                    break
    +
    +            if len(data) == self.chunk_size:
    +                if self.padder:
    +                    data = self.padder.update(data)
    +                if self.encryptor:
    +                    data = self.encryptor.update(data)
    +                yield index, data
    +            else:
    +                if self.padder:
    +                    data = self.padder.update(data) + self.padder.finalize()
    +                if self.encryptor:
    +                    data = self.encryptor.update(data) + self.encryptor.finalize()
    +                if data:
    +                    yield index, data
    +                break
    +            index += len(data)
    +
    +    async def process_chunk(self, chunk_data):
    +        chunk_bytes = chunk_data[1]
    +        chunk_offset = chunk_data[0]
    +        return await self._upload_chunk_with_progress(chunk_offset, chunk_bytes)
    +
    +    async def _update_progress(self, length):
    +        if self.progress_lock is not None:
    +            async with self.progress_lock:
    +                self.progress_total += length
    +        else:
    +            self.progress_total += length
    +
    +    async def _upload_chunk(self, chunk_offset, chunk_data):
    +        raise NotImplementedError("Must be implemented by child class.")
    +
    +    async def _upload_chunk_with_progress(self, chunk_offset, chunk_data):
    +        range_id = await self._upload_chunk(chunk_offset, chunk_data)
    +        await self._update_progress(len(chunk_data))
    +        return range_id
    +
    +    def get_substream_blocks(self):
    +        assert self.chunk_size is not None
    +        lock = self.stream_lock
    +        blob_length = self.total_size
    +
    +        if blob_length is None:
    +            blob_length = get_length(self.stream)
    +            if blob_length is None:
    +                raise ValueError("Unable to determine content length of upload data.")
    +
    +        blocks = int(ceil(blob_length / (self.chunk_size * 1.0)))
    +        last_block_size = self.chunk_size if blob_length % self.chunk_size == 0 else blob_length % self.chunk_size
    +
    +        for i in range(blocks):
    +            index = i * self.chunk_size
    +            length = last_block_size if i == blocks - 1 else self.chunk_size
    +            yield ('BlockId{}'.format("%05d" % i), SubStream(self.stream, index, length, lock))
    +
    +    async def process_substream_block(self, block_data):
    +        return await self._upload_substream_block_with_progress(block_data[0], block_data[1])
    +
    +    async def _upload_substream_block(self, block_id, block_stream):
    +        raise NotImplementedError("Must be implemented by child class.")
    +
    +    async def _upload_substream_block_with_progress(self, block_id, block_stream):
    +        range_id = await self._upload_substream_block(block_id, block_stream)
    +        await self._update_progress(len(block_stream))
    +        return range_id
    +
    +    def set_response_properties(self, resp):
    +        self.etag = resp.etag
    +        self.last_modified = resp.last_modified
    +
    +
    +class BlockBlobChunkUploader(_ChunkUploader):
    +
    +    def __init__(self, *args, **kwargs):
    +        kwargs.pop('modified_access_conditions', None)
    +        super(BlockBlobChunkUploader, self).__init__(*args, **kwargs)
    +        self.current_length = None
    +
    +    async def _upload_chunk(self, chunk_offset, chunk_data):
    +        # TODO: This is incorrect, but works with recording.
    +        index = '{0:032d}'.format(chunk_offset)
    +        block_id = encode_base64(url_quote(encode_base64(index)))
    +        await self.service.stage_block(
    +            block_id,
    +            len(chunk_data),
    +            chunk_data,
    +            data_stream_total=self.total_size,
    +            upload_stream_current=self.progress_total,
    +            **self.request_options)
    +        return index, block_id
    +
    +    async def _upload_substream_block(self, block_id, block_stream):
    +        try:
    +            await self.service.stage_block(
    +                block_id,
    +                len(block_stream),
    +                block_stream,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options)
    +        finally:
    +            block_stream.close()
    +        return block_id
    +
    +
    +class PageBlobChunkUploader(_ChunkUploader):  # pylint: disable=abstract-method
    +
    +    def _is_chunk_empty(self, chunk_data):
    +        # read until non-zero byte is encountered
    +        # if reached the end without returning, then chunk_data is all 0's
    +        for each_byte in chunk_data:
    +            if each_byte not in [0, b'\x00']:
    +                return False
    +        return True
    +
    +    async def _upload_chunk(self, chunk_offset, chunk_data):
    +        # avoid uploading the empty pages
    +        if not self._is_chunk_empty(chunk_data):
    +            chunk_end = chunk_offset + len(chunk_data) - 1
    +            content_range = 'bytes={0}-{1}'.format(chunk_offset, chunk_end)
    +            computed_md5 = None
    +            self.response_headers = await self.service.upload_pages(
    +                chunk_data,
    +                content_length=len(chunk_data),
    +                transactional_content_md5=computed_md5,
    +                range=content_range,
    +                cls=return_response_headers,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options)
    +
    +            if not self.parallel and self.request_options.get('modified_access_conditions'):
    +                self.request_options['modified_access_conditions'].if_match = self.response_headers['etag']
    +
    +
    +class AppendBlobChunkUploader(_ChunkUploader):  # pylint: disable=abstract-method
    +
    +    def __init__(self, *args, **kwargs):
    +        super(AppendBlobChunkUploader, self).__init__(*args, **kwargs)
    +        self.current_length = None
    +
    +    async def _upload_chunk(self, chunk_offset, chunk_data):
    +        if self.current_length is None:
    +            self.response_headers = await self.service.append_block(
    +                chunk_data,
    +                content_length=len(chunk_data),
    +                cls=return_response_headers,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options)
    +            self.current_length = int(self.response_headers['blob_append_offset'])
    +        else:
    +            self.request_options['append_position_access_conditions'].append_position = \
    +                self.current_length + chunk_offset
    +            self.response_headers = await self.service.append_block(
    +                chunk_data,
    +                content_length=len(chunk_data),
    +                cls=return_response_headers,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options)
    +
    +
    +class FileChunkUploader(_ChunkUploader):  # pylint: disable=abstract-method
    +
    +    async def _upload_chunk(self, chunk_offset, chunk_data):
    +        chunk_end = chunk_offset + len(chunk_data) - 1
    +        response = await self.service.upload_range(
    +            chunk_data,
    +            chunk_offset,
    +            chunk_end,
    +            data_stream_total=self.total_size,
    +            upload_stream_current=self.progress_total,
    +            **self.request_options
    +        )
    +        range_id = 'bytes={0}-{1}'.format(chunk_offset, chunk_end)
    +        return range_id, response
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared_access_signature.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared_access_signature.py
    new file mode 100644
    index 000000000000..8c80c0afa4c6
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_shared_access_signature.py
    @@ -0,0 +1,571 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, TYPE_CHECKING
    +)
    +
    +from ._shared import sign_string, url_quote
    +from ._shared.constants import X_MS_VERSION
    +from ._shared.models import Services
    +from ._shared.shared_access_signature import SharedAccessSignature, _SharedAccessHelper, \
    +    QueryStringConstants
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from . import (
    +        ResourceTypes,
    +        AccountSasPermissions,
    +        UserDelegationKey,
    +        ContainerSasPermissions,
    +        BlobSasPermissions
    +    )
    +
    +class BlobQueryStringConstants(object):
    +    SIGNED_TIMESTAMP = 'snapshot'
    +
    +
    +class BlobSharedAccessSignature(SharedAccessSignature):
    +    '''
    +    Provides a factory for creating blob and container access
    +    signature tokens with a common account name and account key.  Users can either
    +    use the factory or can construct the appropriate service and use the
    +    generate_*_shared_access_signature method directly.
    +    '''
    +
    +    def __init__(self, account_name, account_key=None, user_delegation_key=None):
    +        '''
    +        :param str account_name:
    +            The storage account name used to generate the shared access signatures.
    +        :param str account_key:
    +            The access key to generate the shares access signatures.
    +        :param ~azure.storage.blob.models.UserDelegationKey user_delegation_key:
    +            Instead of an account key, the user could pass in a user delegation key.
    +            A user delegation key can be obtained from the service by authenticating with an AAD identity;
    +            this can be accomplished by calling get_user_delegation_key on any Blob service object.
    +        '''
    +        super(BlobSharedAccessSignature, self).__init__(account_name, account_key, x_ms_version=X_MS_VERSION)
    +        self.user_delegation_key = user_delegation_key
    +
    +    def generate_blob(self, container_name, blob_name, snapshot=None, permission=None,
    +                      expiry=None, start=None, policy_id=None, ip=None, protocol=None,
    +                      cache_control=None, content_disposition=None,
    +                      content_encoding=None, content_language=None,
    +                      content_type=None):
    +        '''
    +        Generates a shared access signature for the blob or one of its snapshots.
    +        Use the returned signature with the sas_token parameter of any BlobService.
    +
    +        :param str container_name:
    +            Name of container.
    +        :param str blob_name:
    +            Name of blob.
    +        :param str snapshot:
    +            The snapshot parameter is an opaque DateTime value that,
    +            when present, specifies the blob snapshot to grant permission.
    +        :param BlobSasPermissions permission:
    +            The permissions associated with the shared access signature. The
    +            user is restricted to operations allowed by the permissions.
    +            Permissions must be ordered read, write, delete, list.
    +            Required unless an id is given referencing a stored access policy
    +            which contains this field. This field must be omitted if it has been
    +            specified in an associated stored access policy.
    +        :param expiry:
    +            The time at which the shared access signature becomes invalid.
    +            Required unless an id is given referencing a stored access policy
    +            which contains this field. This field must be omitted if it has
    +            been specified in an associated stored access policy. Azure will always
    +            convert values to UTC. If a date is passed in without timezone info, it
    +            is assumed to be UTC.
    +        :type expiry: datetime or str
    +        :param start:
    +            The time at which the shared access signature becomes valid. If
    +            omitted, start time for this call is assumed to be the time when the
    +            storage service receives the request. Azure will always convert values
    +            to UTC. If a date is passed in without timezone info, it is assumed to
    +            be UTC.
    +        :type start: datetime or str
    +        :param str policy_id:
    +            A unique value up to 64 characters in length that correlates to a
    +            stored access policy. To create a stored access policy, use
    +            set_blob_service_properties.
    +        :param str ip:
    +            Specifies an IP address or a range of IP addresses from which to accept requests.
    +            If the IP address from which the request originates does not match the IP address
    +            or address range specified on the SAS token, the request is not authenticated.
    +            For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS
    +            restricts the request to those IP addresses.
    +        :param str protocol:
    +            Specifies the protocol permitted for a request made. The default value
    +            is https,http. See :class:`~azure.storage.common.models.Protocol` for possible values.
    +        :param str cache_control:
    +            Response header value for Cache-Control when resource is accessed
    +            using this shared access signature.
    +        :param str content_disposition:
    +            Response header value for Content-Disposition when resource is accessed
    +            using this shared access signature.
    +        :param str content_encoding:
    +            Response header value for Content-Encoding when resource is accessed
    +            using this shared access signature.
    +        :param str content_language:
    +            Response header value for Content-Language when resource is accessed
    +            using this shared access signature.
    +        :param str content_type:
    +            Response header value for Content-Type when resource is accessed
    +            using this shared access signature.
    +        '''
    +        resource_path = container_name + '/' + blob_name
    +
    +        sas = _BlobSharedAccessHelper()
    +        sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version)
    +        sas.add_id(policy_id)
    +        sas.add_resource('b' if snapshot is None else 'bs')
    +        sas.add_timestamp(snapshot)
    +        sas.add_override_response_headers(cache_control, content_disposition,
    +                                          content_encoding, content_language,
    +                                          content_type)
    +        sas.add_resource_signature(self.account_name, self.account_key, resource_path,
    +                                   user_delegation_key=self.user_delegation_key)
    +
    +        return sas.get_token()
    +
    +    def generate_container(self, container_name, permission=None, expiry=None,
    +                           start=None, policy_id=None, ip=None, protocol=None,
    +                           cache_control=None, content_disposition=None,
    +                           content_encoding=None, content_language=None,
    +                           content_type=None):
    +        '''
    +        Generates a shared access signature for the container.
    +        Use the returned signature with the sas_token parameter of any BlobService.
    +
    +        :param str container_name:
    +            Name of container.
    +        :param ContainerSasPermissions permission:
    +            The permissions associated with the shared access signature. The
    +            user is restricted to operations allowed by the permissions.
    +            Permissions must be ordered read, write, delete, list.
    +            Required unless an id is given referencing a stored access policy
    +            which contains this field. This field must be omitted if it has been
    +            specified in an associated stored access policy.
    +        :param expiry:
    +            The time at which the shared access signature becomes invalid.
    +            Required unless an id is given referencing a stored access policy
    +            which contains this field. This field must be omitted if it has
    +            been specified in an associated stored access policy. Azure will always
    +            convert values to UTC. If a date is passed in without timezone info, it
    +            is assumed to be UTC.
    +        :type expiry: datetime or str
    +        :param start:
    +            The time at which the shared access signature becomes valid. If
    +            omitted, start time for this call is assumed to be the time when the
    +            storage service receives the request. Azure will always convert values
    +            to UTC. If a date is passed in without timezone info, it is assumed to
    +            be UTC.
    +        :type start: datetime or str
    +        :param str policy_id:
    +            A unique value up to 64 characters in length that correlates to a
    +            stored access policy. To create a stored access policy, use
    +            set_blob_service_properties.
    +        :param str ip:
    +            Specifies an IP address or a range of IP addresses from which to accept requests.
    +            If the IP address from which the request originates does not match the IP address
    +            or address range specified on the SAS token, the request is not authenticated.
    +            For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS
    +            restricts the request to those IP addresses.
    +        :param str protocol:
    +            Specifies the protocol permitted for a request made. The default value
    +            is https,http. See :class:`~azure.storage.common.models.Protocol` for possible values.
    +        :param str cache_control:
    +            Response header value for Cache-Control when resource is accessed
    +            using this shared access signature.
    +        :param str content_disposition:
    +            Response header value for Content-Disposition when resource is accessed
    +            using this shared access signature.
    +        :param str content_encoding:
    +            Response header value for Content-Encoding when resource is accessed
    +            using this shared access signature.
    +        :param str content_language:
    +            Response header value for Content-Language when resource is accessed
    +            using this shared access signature.
    +        :param str content_type:
    +            Response header value for Content-Type when resource is accessed
    +            using this shared access signature.
    +        '''
    +        sas = _BlobSharedAccessHelper()
    +        sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version)
    +        sas.add_id(policy_id)
    +        sas.add_resource('c')
    +        sas.add_override_response_headers(cache_control, content_disposition,
    +                                          content_encoding, content_language,
    +                                          content_type)
    +        sas.add_resource_signature(self.account_name, self.account_key, container_name,
    +                                   user_delegation_key=self.user_delegation_key)
    +        return sas.get_token()
    +
    +
    +class _BlobSharedAccessHelper(_SharedAccessHelper):
    +
    +    def add_timestamp(self, timestamp):
    +        self._add_query(BlobQueryStringConstants.SIGNED_TIMESTAMP, timestamp)
    +
    +    def get_value_to_append(self, query):
    +        return_value = self.query_dict.get(query) or ''
    +        return return_value + '\n'
    +
    +    def add_resource_signature(self, account_name, account_key, path, user_delegation_key=None):
    +        # pylint: disable = no-member
    +        if path[0] != '/':
    +            path = '/' + path
    +
    +        canonicalized_resource = '/blob/' + account_name + path + '\n'
    +
    +        # Form the string to sign from shared_access_policy and canonicalized
    +        # resource. The order of values is important.
    +        string_to_sign = \
    +            (self.get_value_to_append(QueryStringConstants.SIGNED_PERMISSION) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_START) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_EXPIRY) +
    +             canonicalized_resource)
    +
    +        if user_delegation_key is not None:
    +            self._add_query(QueryStringConstants.SIGNED_OID, user_delegation_key.signed_oid)
    +            self._add_query(QueryStringConstants.SIGNED_TID, user_delegation_key.signed_tid)
    +            self._add_query(QueryStringConstants.SIGNED_KEY_START, user_delegation_key.signed_start)
    +            self._add_query(QueryStringConstants.SIGNED_KEY_EXPIRY, user_delegation_key.signed_expiry)
    +            self._add_query(QueryStringConstants.SIGNED_KEY_SERVICE, user_delegation_key.signed_service)
    +            self._add_query(QueryStringConstants.SIGNED_KEY_VERSION, user_delegation_key.signed_version)
    +
    +            string_to_sign += \
    +                (self.get_value_to_append(QueryStringConstants.SIGNED_OID) +
    +                 self.get_value_to_append(QueryStringConstants.SIGNED_TID) +
    +                 self.get_value_to_append(QueryStringConstants.SIGNED_KEY_START) +
    +                 self.get_value_to_append(QueryStringConstants.SIGNED_KEY_EXPIRY) +
    +                 self.get_value_to_append(QueryStringConstants.SIGNED_KEY_SERVICE) +
    +                 self.get_value_to_append(QueryStringConstants.SIGNED_KEY_VERSION))
    +        else:
    +            string_to_sign += self.get_value_to_append(QueryStringConstants.SIGNED_IDENTIFIER)
    +
    +        string_to_sign += \
    +            (self.get_value_to_append(QueryStringConstants.SIGNED_IP) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_PROTOCOL) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_VERSION) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_RESOURCE) +
    +             self.get_value_to_append(BlobQueryStringConstants.SIGNED_TIMESTAMP) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_CACHE_CONTROL) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_CONTENT_DISPOSITION) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_CONTENT_ENCODING) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_CONTENT_LANGUAGE) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_CONTENT_TYPE))
    +
    +        # remove the trailing newline
    +        if string_to_sign[-1] == '\n':
    +            string_to_sign = string_to_sign[:-1]
    +
    +        self._add_query(QueryStringConstants.SIGNED_SIGNATURE,
    +                        sign_string(account_key if user_delegation_key is None else user_delegation_key.value,
    +                                    string_to_sign))
    +
    +    def get_token(self):
    +        # a conscious decision was made to exclude the timestamp in the generated token
    +        # this is to avoid having two snapshot ids in the query parameters when the user appends the snapshot timestamp
    +        exclude = [BlobQueryStringConstants.SIGNED_TIMESTAMP]
    +        return '&'.join(['{0}={1}'.format(n, url_quote(v))
    +                         for n, v in self.query_dict.items() if v is not None and n not in exclude])
    +
    +
    +def generate_account_sas(
    +        account_name,  # type: str
    +        account_key,  # type: str
    +        resource_types,  # type: Union[ResourceTypes, str]
    +        permission,  # type: Union[AccountSasPermissions, str]
    +        expiry,  # type: Optional[Union[datetime, str]]
    +        start=None,  # type: Optional[Union[datetime, str]]
    +        ip=None,  # type: Optional[str]
    +        **kwargs # type: Any
    +    ):  # type: (...) -> str
    +    """Generates a shared access signature for the blob service.
    +
    +    Use the returned signature with the credential parameter of any BlobServiceClient,
    +    ContainerClient or BlobClient.
    +
    +    :param str account_name:
    +        The storage account name used to generate the shared access signature.
    +    :param str account_key:
    +        The account key, also called shared key or access key, to generate the shared access signature.
    +    :param resource_types:
    +        Specifies the resource types that are accessible with the account SAS.
    +    :type resource_types: str or ~azure.storage.blob.ResourceTypes
    +    :param permission:
    +        The permissions associated with the shared access signature. The
    +        user is restricted to operations allowed by the permissions.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has been
    +        specified in an associated stored access policy.
    +    :type permission: str or ~azure.storage.blob.AccountSasPermissions
    +    :param expiry:
    +        The time at which the shared access signature becomes invalid.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has
    +        been specified in an associated stored access policy. Azure will always
    +        convert values to UTC. If a date is passed in without timezone info, it
    +        is assumed to be UTC.
    +    :type expiry: ~datetime.datetime or str
    +    :param start:
    +        The time at which the shared access signature becomes valid. If
    +        omitted, start time for this call is assumed to be the time when the
    +        storage service receives the request. Azure will always convert values
    +        to UTC. If a date is passed in without timezone info, it is assumed to
    +        be UTC.
    +    :type start: ~datetime.datetime or str
    +    :param str ip:
    +        Specifies an IP address or a range of IP addresses from which to accept requests.
    +        If the IP address from which the request originates does not match the IP address
    +        or address range specified on the SAS token, the request is not authenticated.
    +        For example, specifying ip=168.1.5.65 or ip=168.1.5.60-168.1.5.70 on the SAS
    +        restricts the request to those IP addresses.
    +    :keyword str protocol:
    +        Specifies the protocol permitted for a request made. The default value is https.
    +    :return: A Shared Access Signature (sas) token.
    +    :rtype: str
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication.py
    +            :start-after: [START create_sas_token]
    +            :end-before: [END create_sas_token]
    +            :language: python
    +            :dedent: 8
    +            :caption: Generating a shared access signature.
    +    """
    +    sas = SharedAccessSignature(account_name, account_key)
    +    return sas.generate_account(
    +        services=Services(blob=True),
    +        resource_types=resource_types,
    +        permission=permission,
    +        expiry=expiry,
    +        start=start,
    +        ip=ip,
    +        **kwargs
    +    ) # type: ignore
    +
    +
    +def generate_container_sas(
    +        account_name,  # type: str
    +        container_name,  # type: str
    +        account_key=None,  # type: Optional[str]
    +        user_delegation_key=None,  # type: Optional[UserDelegationKey]
    +        permission=None,  # type: Optional[Union[ContainerSasPermissions, str]]
    +        expiry=None,  # type: Optional[Union[datetime, str]]
    +        start=None,  # type: Optional[Union[datetime, str]]
    +        policy_id=None,  # type: Optional[str]
    +        ip=None,  # type: Optional[str]
    +        **kwargs # type: Any
    +    ):
    +    # type: (...) -> Any
    +    """Generates a shared access signature for a container.
    +
    +    Use the returned signature with the credential parameter of any BlobServiceClient,
    +    ContainerClient or BlobClient.
    +
    +    :param str account_name:
    +        The storage account name used to generate the shared access signature.
    +    :param str container_name:
    +        The name of the container.
    +    :param str account_key:
    +        The account key, also called shared key or access key, to generate the shared access signature.
    +        Either `account_key` or `user_delegation_key` must be specified.
    +    :param ~azure.storage.blob.UserDelegationKey user_delegation_key:
    +        Instead of an account shared key, the user could pass in a user delegation key.
    +        A user delegation key can be obtained from the service by authenticating with an AAD identity;
    +        this can be accomplished by calling :func:`~azure.storage.blob.BlobServiceClient.get_user_delegation_key`.
    +        When present, the SAS is signed with the user delegation key instead.
    +    :param permission:
    +        The permissions associated with the shared access signature. The
    +        user is restricted to operations allowed by the permissions.
    +        Permissions must be ordered read, write, delete, list.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has been
    +        specified in an associated stored access policy.
    +    :type permission: str or ~azure.storage.blob.ContainerSasPermissions
    +    :param expiry:
    +        The time at which the shared access signature becomes invalid.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has
    +        been specified in an associated stored access policy. Azure will always
    +        convert values to UTC. If a date is passed in without timezone info, it
    +        is assumed to be UTC.
    +    :type expiry: ~datetime.datetime or str
    +    :param start:
    +        The time at which the shared access signature becomes valid. If
    +        omitted, start time for this call is assumed to be the time when the
    +        storage service receives the request. Azure will always convert values
    +        to UTC. If a date is passed in without timezone info, it is assumed to
    +        be UTC.
    +    :type start: ~datetime.datetime or str
    +    :param str policy_id:
    +        A unique value up to 64 characters in length that correlates to a
    +        stored access policy. To create a stored access policy, use
    +        :func:`~azure.storage.blob.ContainerClient.set_container_access_policy`.
    +    :param str ip:
    +        Specifies an IP address or a range of IP addresses from which to accept requests.
    +        If the IP address from which the request originates does not match the IP address
    +        or address range specified on the SAS token, the request is not authenticated.
    +        For example, specifying ip=168.1.5.65 or ip=168.1.5.60-168.1.5.70 on the SAS
    +        restricts the request to those IP addresses.
    +    :keyword str protocol:
    +        Specifies the protocol permitted for a request made. The default value is https.
    +    :keyword str cache_control:
    +        Response header value for Cache-Control when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_disposition:
    +        Response header value for Content-Disposition when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_encoding:
    +        Response header value for Content-Encoding when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_language:
    +        Response header value for Content-Language when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_type:
    +        Response header value for Content-Type when resource is accessed
    +        using this shared access signature.
    +    :return: A Shared Access Signature (sas) token.
    +    :rtype: str
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_containers.py
    +            :start-after: [START generate_sas_token]
    +            :end-before: [END generate_sas_token]
    +            :language: python
    +            :dedent: 12
    +            :caption: Generating a sas token.
    +    """
    +    if not user_delegation_key and not account_key:
    +        raise ValueError("Either user_delegation_key or account_key must be provided.")
    +
    +    if user_delegation_key:
    +        sas = BlobSharedAccessSignature(account_name, user_delegation_key=user_delegation_key)
    +    else:
    +        sas = BlobSharedAccessSignature(account_name, account_key=account_key)
    +    return sas.generate_container(
    +        container_name,
    +        permission=permission,
    +        expiry=expiry,
    +        start=start,
    +        policy_id=policy_id,
    +        ip=ip,
    +        **kwargs
    +    )
    +
    +
    +def generate_blob_sas(
    +        account_name,  # type: str
    +        container_name,  # type: str
    +        blob_name,  # type: str
    +        snapshot=None,  # type: Optional[str]
    +        account_key=None,  # type: Optional[str]
    +        user_delegation_key=None,  # type: Optional[UserDelegationKey]
    +        permission=None,  # type: Optional[Union[BlobSasPermissions, str]]
    +        expiry=None,  # type: Optional[Union[datetime, str]]
    +        start=None,  # type: Optional[Union[datetime, str]]
    +        policy_id=None,  # type: Optional[str]
    +        ip=None,  # type: Optional[str]
    +        **kwargs # type: Any
    +    ):
    +    # type: (...) -> Any
    +    """Generates a shared access signature for a blob.
    +
    +    Use the returned signature with the credential parameter of any BlobServiceClient,
    +    ContainerClient or BlobClient.
    +
    +    :param str account_name:
    +        The storage account name used to generate the shared access signature.
    +    :param str container_name:
    +        The name of the container.
    +    :param str blob_name:
    +        The name of the blob.
    +    :param str snapshot:
    +        An optional blob snapshot ID.
    +    :param str account_key:
    +        The account key, also called shared key or access key, to generate the shared access signature.
    +        Either `account_key` or `user_delegation_key` must be specified.
    +    :param ~azure.storage.blob.UserDelegationKey user_delegation_key:
    +        Instead of an account shared key, the user could pass in a user delegation key.
    +        A user delegation key can be obtained from the service by authenticating with an AAD identity;
    +        this can be accomplished by calling :func:`~azure.storage.blob.BlobServiceClient.get_user_delegation_key`.
    +        When present, the SAS is signed with the user delegation key instead.
    +    :param permission:
    +        The permissions associated with the shared access signature. The
    +        user is restricted to operations allowed by the permissions.
    +        Permissions must be ordered read, write, delete, list.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has been
    +        specified in an associated stored access policy.
    +    :type permission: str or ~azure.storage.blob.BlobSasPermissions
    +    :param expiry:
    +        The time at which the shared access signature becomes invalid.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has
    +        been specified in an associated stored access policy. Azure will always
    +        convert values to UTC. If a date is passed in without timezone info, it
    +        is assumed to be UTC.
    +    :type expiry: ~datetime.datetime or str
    +    :param start:
    +        The time at which the shared access signature becomes valid. If
    +        omitted, start time for this call is assumed to be the time when the
    +        storage service receives the request. Azure will always convert values
    +        to UTC. If a date is passed in without timezone info, it is assumed to
    +        be UTC.
    +    :type start: ~datetime.datetime or str
    +    :param str policy_id:
    +        A unique value up to 64 characters in length that correlates to a
    +        stored access policy. To create a stored access policy, use
    +        :func:`~azure.storage.blob.ContainerClient.set_container_access_policy()`.
    +    :param str ip:
    +        Specifies an IP address or a range of IP addresses from which to accept requests.
    +        If the IP address from which the request originates does not match the IP address
    +        or address range specified on the SAS token, the request is not authenticated.
    +        For example, specifying ip=168.1.5.65 or ip=168.1.5.60-168.1.5.70 on the SAS
    +        restricts the request to those IP addresses.
    +    :keyword str protocol:
    +        Specifies the protocol permitted for a request made. The default value is https.
    +    :keyword str cache_control:
    +        Response header value for Cache-Control when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_disposition:
    +        Response header value for Content-Disposition when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_encoding:
    +        Response header value for Content-Encoding when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_language:
    +        Response header value for Content-Language when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_type:
    +        Response header value for Content-Type when resource is accessed
    +        using this shared access signature.
    +    :return: A Shared Access Signature (sas) token.
    +    :rtype: str
    +    """
    +    if not user_delegation_key and not account_key:
    +        raise ValueError("Either user_delegation_key or account_key must be provided.")
    +
    +    if user_delegation_key:
    +        sas = BlobSharedAccessSignature(account_name, user_delegation_key=user_delegation_key)
    +    else:
    +        sas = BlobSharedAccessSignature(account_name, account_key=account_key)
    +    return sas.generate_blob(
    +        container_name,
    +        blob_name,
    +        snapshot=snapshot,
    +        permission=permission,
    +        expiry=expiry,
    +        start=start,
    +        policy_id=policy_id,
    +        ip=ip,
    +        **kwargs
    +    )
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_upload_helpers.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_upload_helpers.py
    new file mode 100644
    index 000000000000..85d40698864f
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_upload_helpers.py
    @@ -0,0 +1,281 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=no-self-use
    +
    +from io import SEEK_SET, UnsupportedOperation
    +from typing import Optional, Union, Any, TypeVar, TYPE_CHECKING # pylint: disable=unused-import
    +
    +import six
    +from azure.core.exceptions import ResourceExistsError, ResourceModifiedError
    +
    +from ._shared.response_handlers import (
    +    process_storage_error,
    +    return_response_headers)
    +from ._shared.models import StorageErrorCode
    +from ._shared.uploads import (
    +    upload_data_chunks,
    +    upload_substream_blocks,
    +    BlockBlobChunkUploader,
    +    PageBlobChunkUploader,
    +    AppendBlobChunkUploader)
    +from ._shared.encryption import generate_blob_encryption_data, encrypt_blob
    +from ._generated.models import (
    +    StorageErrorException,
    +    BlockLookupList,
    +    AppendPositionAccessConditions,
    +    ModifiedAccessConditions,
    +)
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime # pylint: disable=unused-import
    +    BlobLeaseClient = TypeVar("BlobLeaseClient")
    +
    +_LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE = 4 * 1024 * 1024
    +_ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM = '{0} should be a seekable file-like/io.IOBase type stream object.'
    +
    +
    +def _convert_mod_error(error):
    +    message = error.message.replace(
    +        "The condition specified using HTTP conditional header(s) is not met.",
    +        "The specified blob already exists.")
    +    message = message.replace("ConditionNotMet", "BlobAlreadyExists")
    +    overwrite_error = ResourceExistsError(
    +        message=message,
    +        response=error.response,
    +        error=error)
    +    overwrite_error.error_code = StorageErrorCode.blob_already_exists
    +    raise overwrite_error
    +
    +
    +def _any_conditions(modified_access_conditions=None, **kwargs):  # pylint: disable=unused-argument
    +    return any([
    +        modified_access_conditions.if_modified_since,
    +        modified_access_conditions.if_unmodified_since,
    +        modified_access_conditions.if_none_match,
    +        modified_access_conditions.if_match
    +    ])
    +
    +
    +def upload_block_blob(  # pylint: disable=too-many-locals
    +        client=None,
    +        data=None,
    +        stream=None,
    +        length=None,
    +        overwrite=None,
    +        headers=None,
    +        validate_content=None,
    +        max_concurrency=None,
    +        blob_settings=None,
    +        encryption_options=None,
    +        **kwargs):
    +    try:
    +        if not overwrite and not _any_conditions(**kwargs):
    +            kwargs['modified_access_conditions'].if_none_match = '*'
    +        adjusted_count = length
    +        if (encryption_options.get('key') is not None) and (adjusted_count is not None):
    +            adjusted_count += (16 - (length % 16))
    +        blob_headers = kwargs.pop('blob_headers', None)
    +        tier = kwargs.pop('standard_blob_tier', None)
    +
    +        # Do single put if the size is smaller than config.max_single_put_size
    +        if adjusted_count is not None and (adjusted_count < blob_settings.max_single_put_size):
    +            try:
    +                data = data.read(length)
    +                if not isinstance(data, six.binary_type):
    +                    raise TypeError('Blob data should be of type bytes.')
    +            except AttributeError:
    +                pass
    +            if encryption_options.get('key'):
    +                encryption_data, data = encrypt_blob(data, encryption_options['key'])
    +                headers['x-ms-meta-encryptiondata'] = encryption_data
    +            return client.upload(
    +                data,
    +                content_length=adjusted_count,
    +                blob_http_headers=blob_headers,
    +                headers=headers,
    +                cls=return_response_headers,
    +                validate_content=validate_content,
    +                data_stream_total=adjusted_count,
    +                upload_stream_current=0,
    +                tier=tier.value if tier else None,
    +                **kwargs)
    +
    +        use_original_upload_path = blob_settings.use_byte_buffer or \
    +            validate_content or encryption_options.get('required') or \
    +            blob_settings.max_block_size < blob_settings.min_large_block_upload_threshold or \
    +            hasattr(stream, 'seekable') and not stream.seekable() or \
    +            not hasattr(stream, 'seek') or not hasattr(stream, 'tell')
    +
    +        if use_original_upload_path:
    +            if encryption_options.get('key'):
    +                cek, iv, encryption_data = generate_blob_encryption_data(encryption_options['key'])
    +                headers['x-ms-meta-encryptiondata'] = encryption_data
    +                encryption_options['cek'] = cek
    +                encryption_options['vector'] = iv
    +            block_ids = upload_data_chunks(
    +                service=client,
    +                uploader_class=BlockBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                max_concurrency=max_concurrency,
    +                stream=stream,
    +                validate_content=validate_content,
    +                encryption_options=encryption_options,
    +                **kwargs
    +            )
    +        else:
    +            block_ids = upload_substream_blocks(
    +                service=client,
    +                uploader_class=BlockBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                max_concurrency=max_concurrency,
    +                stream=stream,
    +                validate_content=validate_content,
    +                **kwargs
    +            )
    +
    +        block_lookup = BlockLookupList(committed=[], uncommitted=[], latest=[])
    +        block_lookup.latest = block_ids
    +        return client.commit_block_list(
    +            block_lookup,
    +            blob_http_headers=blob_headers,
    +            cls=return_response_headers,
    +            validate_content=validate_content,
    +            headers=headers,
    +            tier=tier.value if tier else None,
    +            **kwargs)
    +    except StorageErrorException as error:
    +        try:
    +            process_storage_error(error)
    +        except ResourceModifiedError as mod_error:
    +            if not overwrite:
    +                _convert_mod_error(mod_error)
    +            raise
    +
    +
    +def upload_page_blob(
    +        client=None,
    +        stream=None,
    +        length=None,
    +        overwrite=None,
    +        headers=None,
    +        validate_content=None,
    +        max_concurrency=None,
    +        blob_settings=None,
    +        encryption_options=None,
    +        **kwargs):
    +    try:
    +        if not overwrite and not _any_conditions(**kwargs):
    +            kwargs['modified_access_conditions'].if_none_match = '*'
    +        if length is None or length < 0:
    +            raise ValueError("A content length must be specified for a Page Blob.")
    +        if length % 512 != 0:
    +            raise ValueError("Invalid page blob size: {0}. "
    +                             "The size must be aligned to a 512-byte boundary.".format(length))
    +        if kwargs.get('premium_page_blob_tier'):
    +            premium_page_blob_tier = kwargs.pop('premium_page_blob_tier')
    +            try:
    +                headers['x-ms-access-tier'] = premium_page_blob_tier.value
    +            except AttributeError:
    +                headers['x-ms-access-tier'] = premium_page_blob_tier
    +        if encryption_options and encryption_options.get('data'):
    +            headers['x-ms-meta-encryptiondata'] = encryption_options['data']
    +        response = client.create(
    +            content_length=0,
    +            blob_content_length=length,
    +            blob_sequence_number=None,
    +            blob_http_headers=kwargs.pop('blob_headers', None),
    +            cls=return_response_headers,
    +            headers=headers,
    +            **kwargs)
    +        if length == 0:
    +            return response
    +
    +        kwargs['modified_access_conditions'] = ModifiedAccessConditions(if_match=response['etag'])
    +        return upload_data_chunks(
    +            service=client,
    +            uploader_class=PageBlobChunkUploader,
    +            total_size=length,
    +            chunk_size=blob_settings.max_page_size,
    +            stream=stream,
    +            max_concurrency=max_concurrency,
    +            validate_content=validate_content,
    +            encryption_options=encryption_options,
    +            **kwargs)
    +
    +    except StorageErrorException as error:
    +        try:
    +            process_storage_error(error)
    +        except ResourceModifiedError as mod_error:
    +            if not overwrite:
    +                _convert_mod_error(mod_error)
    +            raise
    +
    +
    +def upload_append_blob(  # pylint: disable=unused-argument
    +        client=None,
    +        stream=None,
    +        length=None,
    +        overwrite=None,
    +        headers=None,
    +        validate_content=None,
    +        max_concurrency=None,
    +        blob_settings=None,
    +        encryption_options=None,
    +        **kwargs):
    +    try:
    +        if length == 0:
    +            return {}
    +        blob_headers = kwargs.pop('blob_headers', None)
    +        append_conditions = AppendPositionAccessConditions(
    +            max_size=kwargs.pop('maxsize_condition', None),
    +            append_position=None)
    +        try:
    +            if overwrite:
    +                client.create(
    +                    content_length=0,
    +                    blob_http_headers=blob_headers,
    +                    headers=headers,
    +                    **kwargs)
    +            return upload_data_chunks(
    +                service=client,
    +                uploader_class=AppendBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                stream=stream,
    +                max_concurrency=max_concurrency,
    +                validate_content=validate_content,
    +                append_position_access_conditions=append_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            if error.response.status_code != 404:
    +                raise
    +            # rewind the request body if it is a stream
    +            if hasattr(stream, 'read'):
    +                try:
    +                    # attempt to rewind the body to the initial position
    +                    stream.seek(0, SEEK_SET)
    +                except UnsupportedOperation:
    +                    # if body is not seekable, then retry would not work
    +                    raise error
    +            client.create(
    +                content_length=0,
    +                blob_http_headers=blob_headers,
    +                headers=headers,
    +                **kwargs)
    +            return upload_data_chunks(
    +                service=client,
    +                uploader_class=AppendBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                stream=stream,
    +                max_concurrency=max_concurrency,
    +                validate_content=validate_content,
    +                append_position_access_conditions=append_conditions,
    +                **kwargs)
    +    except StorageErrorException as error:
    +        process_storage_error(error)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_version.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_version.py
    new file mode 100644
    index 000000000000..c7e18b39cee7
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/_version.py
    @@ -0,0 +1,7 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "12.2.1"
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/__init__.py
    new file mode 100644
    index 000000000000..247f39e1ffde
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/__init__.py
    @@ -0,0 +1,137 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import os
    +
    +from .._models import BlobType
    +from .._shared.policies_async import ExponentialRetry, LinearRetry
    +from ._blob_client_async import BlobClient
    +from ._container_client_async import ContainerClient
    +from ._blob_service_client_async import BlobServiceClient
    +from ._lease_async import BlobLeaseClient
    +from ._download_async import StorageStreamDownloader
    +
    +
    +async def upload_blob_to_url(
    +        blob_url,  # type: str
    +        data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +        credential=None,  # type: Any
    +        **kwargs):
    +    # type: (...) -> dict[str, Any]
    +    """Upload data to a given URL
    +
    +    The data will be uploaded as a block blob.
    +
    +    :param str blob_url:
    +        The full URI to the blob. This can also include a SAS token.
    +    :param data:
    +        The data to upload. This can be bytes, text, an iterable or a file-like object.
    +    :type data: bytes or str or Iterable
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        blob URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword bool overwrite:
    +        Whether the blob to be uploaded should overwrite the current data.
    +        If True, upload_blob_to_url will overwrite any existing data. If set to False, the
    +        operation will fail with a ResourceExistsError.
    +    :keyword int max_concurrency:
    +        The number of parallel connections with which to download.
    +    :keyword int length:
    +        Number of bytes to read from the stream. This is optional, but
    +        should be supplied for optimal performance.
    +    :keyword dict(str,str) metadata:
    +        Name-value pairs associated with the blob as metadata.
    +    :keyword bool validate_content:
    +        If true, calculates an MD5 hash for each chunk of the blob. The storage
    +        service checks the hash of the content that has arrived with the hash
    +        that was sent. This is primarily valuable for detecting bitflips on
    +        the wire if using http instead of https as https (the default) will
    +        already validate. Note that this MD5 hash is not stored with the
    +        blob. Also note that if enabled, the memory-efficient upload algorithm
    +        will not be used, because computing the MD5 hash requires buffering
    +        entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +    :keyword str encoding:
    +        Encoding to use if text is supplied as input. Defaults to UTF-8.
    +    :returns: Blob-updated property dict (Etag and last modified)
    +    :rtype: dict(str, Any)
    +    """
    +    async with BlobClient.from_blob_url(blob_url, credential=credential) as client:
    +        return await client.upload_blob(data=data, blob_type=BlobType.BlockBlob, **kwargs)
    +
    +
    +async def _download_to_stream(client, handle, **kwargs):
    +    """Download data to specified open file-handle."""
    +    stream = await client.download_blob(**kwargs)
    +    await stream.readinto(handle)
    +
    +
    +async def download_blob_from_url(
    +        blob_url,  # type: str
    +        output,  # type: str
    +        credential=None,  # type: Any
    +        **kwargs):
    +    # type: (...) -> None
    +    """Download the contents of a blob to a local file or stream.
    +
    +    :param str blob_url:
    +        The full URI to the blob. This can also include a SAS token.
    +    :param output:
    +        Where the data should be downloaded to. This could be either a file path to write to,
    +        or an open IO handle to write to.
    +    :type output: str or writable stream
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        blob URL already has a SAS token or the blob is public. The value can be a SAS token string,
    +        an account shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword bool overwrite:
    +        Whether the local file should be overwritten if it already exists. The default value is
    +        `False` - in which case a ValueError will be raised if the file already exists. If set to
    +        `True`, an attempt will be made to write to the existing file. If a stream handle is passed
    +        in, this value is ignored.
    +    :keyword int max_concurrency:
    +        The number of parallel connections with which to download.
    +    :keyword int offset:
    +        Start of byte range to use for downloading a section of the blob.
    +        Must be set if length is provided.
    +    :keyword int length:
    +        Number of bytes to read from the stream. This is optional, but
    +        should be supplied for optimal performance.
    +    :keyword bool validate_content:
    +        If true, calculates an MD5 hash for each chunk of the blob. The storage
    +        service checks the hash of the content that has arrived with the hash
    +        that was sent. This is primarily valuable for detecting bitflips on
    +        the wire if using http instead of https as https (the default) will
    +        already validate. Note that this MD5 hash is not stored with the
    +        blob. Also note that if enabled, the memory-efficient upload algorithm
    +        will not be used, because computing the MD5 hash requires buffering
    +        entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +    :rtype: None
    +    """
    +    overwrite = kwargs.pop('overwrite', False)
    +    async with BlobClient.from_blob_url(blob_url, credential=credential) as client:
    +        if hasattr(output, 'write'):
    +            await _download_to_stream(client, output, **kwargs)
    +        else:
    +            if not overwrite and os.path.isfile(output):
    +                raise ValueError("The file '{}' already exists.".format(output))
    +            with open(output, 'wb') as file_handle:
    +                await _download_to_stream(client, file_handle, **kwargs)
    +
    +
    +__all__ = [
    +    'upload_blob_to_url',
    +    'download_blob_from_url',
    +    'BlobServiceClient',
    +    'ContainerClient',
    +    'BlobClient',
    +    'BlobLeaseClient',
    +    'ExponentialRetry',
    +    'LinearRetry',
    +    'StorageStreamDownloader'
    +]
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_blob_client_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_blob_client_async.py
    new file mode 100644
    index 000000000000..1e23223c7fc0
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_blob_client_async.py
    @@ -0,0 +1,1990 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=too-many-lines
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, IO, Iterable, AnyStr, Dict, List, Tuple,
    +    TYPE_CHECKING
    +)
    +
    +from azure.core.tracing.decorator_async import distributed_trace_async
    +
    +from .._shared.base_client_async import AsyncStorageAccountHostsMixin
    +from .._shared.policies_async import ExponentialRetry
    +from .._shared.response_handlers import return_response_headers, process_storage_error
    +from .._deserialize import get_page_ranges_result
    +from .._serialize import get_modify_conditions, get_api_version
    +from .._generated import VERSION
    +from .._generated.aio import AzureBlobStorage
    +from .._generated.models import StorageErrorException, CpkInfo
    +from .._deserialize import deserialize_blob_properties
    +from .._blob_client import BlobClient as BlobClientBase
    +from ._upload_helpers import (
    +    upload_block_blob,
    +    upload_append_blob,
    +    upload_page_blob)
    +from .._models import BlobType, BlobBlock
    +from .._lease import get_access_conditions
    +from ._lease_async import BlobLeaseClient
    +from ._download_async import StorageStreamDownloader
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from azure.core.pipeline.policies import HTTPPolicy
    +    from .._models import (  # pylint: disable=unused-import
    +        ContainerProperties,
    +        BlobProperties,
    +        BlobSasPermissions,
    +        ContentSettings,
    +        PremiumPageBlobTier,
    +        StandardBlobTier,
    +        SequenceNumberAction
    +    )
    +
    +
    +class BlobClient(AsyncStorageAccountHostsMixin, BlobClientBase):  # pylint: disable=too-many-public-methods
    +    """A client to interact with a specific blob, although that blob may not yet exist.
    +
    +    :param str account_url:
    +        The URI to the storage account. In order to create a client given the full URI to the blob,
    +        use the :func:`from_blob_url` classmethod.
    +    :param container_name: The container name for the blob.
    +    :type container_name: str
    +    :param blob_name: The name of the blob with which to interact. If specified, this value will override
    +        a blob value specified in the blob URL.
    +    :type blob_name: str
    +    :param str snapshot:
    +        The optional blob snapshot on which to operate. This can be the snapshot ID string
    +        or the response returned from :func:`create_snapshot`.
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +        The Storage API version to use for requests. Default value is '2019-07-07'.
    +        Setting to an older version may result in reduced feature compatibility.
    +
    +        .. versionadded:: 12.2.0
    +
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +    :keyword int max_block_size: The maximum chunk size for uploading a block blob in chunks.
    +        Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_put_size: If the blob size is less than max_single_put_size, then the blob will be
    +        uploaded with only one http PUT request. If the blob size is larger than max_single_put_size,
    +        the blob will be uploaded in chunks. Defaults to 64*1024*1024, or 64MB.
    +    :keyword int min_large_block_upload_threshold: The minimum chunk size required to use the memory efficient
    +        algorithm when uploading a block blob. Defaults to 4*1024*1024+1.
    +    :keyword bool use_byte_buffer: Use a byte buffer for block blob uploads. Defaults to False.
    +    :keyword int max_page_size: The maximum chunk size for uploading a page blob. Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_get_size: The maximum size for a blob to be downloaded in a single call,
    +        the exceeded part will be downloaded in chunks (could be parallel). Defaults to 32*1024*1024, or 32MB.
    +    :keyword int max_chunk_get_size: The maximum chunk size used for downloading a blob. Defaults to 4*1024*1024,
    +        or 4MB.
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication_async.py
    +            :start-after: [START create_blob_client]
    +            :end-before: [END create_blob_client]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobClient from a URL to a public blob (no auth needed).
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication_async.py
    +            :start-after: [START create_blob_client_sas_url]
    +            :end-before: [END create_blob_client_sas_url]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobClient from a SAS URL to a blob.
    +    """
    +    def __init__(
    +            self, account_url,  # type: str
    +            container_name,  # type: str
    +            blob_name,  # type: str
    +            snapshot=None,  # type: Optional[Union[str, Dict[str, Any]]]
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):
    +        # type: (...) -> None
    +        kwargs['retry_policy'] = kwargs.get('retry_policy') or ExponentialRetry(**kwargs)
    +        super(BlobClient, self).__init__(
    +            account_url,
    +            container_name=container_name,
    +            blob_name=blob_name,
    +            snapshot=snapshot,
    +            credential=credential,
    +            **kwargs)
    +        self._client = AzureBlobStorage(url=self.url, pipeline=self._pipeline)
    +        self._client._config.version = get_api_version(kwargs, VERSION)  # pylint: disable=protected-access
    +        self._loop = kwargs.get('loop', None)
    +
    +    @distributed_trace_async
    +    async def get_account_information(self, **kwargs): # type: ignore
    +        # type: (Optional[int]) -> Dict[str, str]
    +        """Gets information related to the storage account in which the blob resides.
    +
    +        The information can also be retrieved if the user has a SAS to a container or blob.
    +        The keys in the returned dictionary include 'sku_name' and 'account_kind'.
    +
    +        :returns: A dict of account information (SKU and account type).
    +        :rtype: dict(str, str)
    +        """
    +        try:
    +            return await self._client.blob.get_account_info(cls=return_response_headers, **kwargs) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def upload_blob(
    +            self, data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            blob_type=BlobType.BlockBlob,  # type: Union[str, BlobType]
    +            length=None,  # type: Optional[int]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Any
    +        """Creates a new blob from a data source with automatic chunking.
    +
    +        :param data: The blob data to upload.
    +        :param ~azure.storage.blob.BlobType blob_type: The type of the blob. This can be
    +            either BlockBlob, PageBlob or AppendBlob. The default value is BlockBlob.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword bool overwrite: Whether the blob to be uploaded should overwrite the current data.
    +            If True, upload_blob will overwrite the existing data. If set to False, the
    +            operation will fail with ResourceExistsError. The exception to the above is with Append
    +            blob types: if set to False and the data already exists, an error will not be raised
    +            and the data will be appended to the existing blob. If set overwrite=True, then the existing
    +            append blob will be deleted, and a new one created. Defaults to False.
    +        :keyword ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            If specified, upload_blob only succeeds if the
    +            blob's lease is active and matches this ID.
    +            Required if the blob has an active lease.
    +        :paramtype: ~azure.storage.blob.aio.BlobLeaseClient
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int max_concurrency:
    +            Maximum number of parallel connections to use when the blob size exceeds
    +            64MB.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :returns: Blob-updated property dict (Etag and last modified)
    +        :rtype: dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_hello_world_async.py
    +                :start-after: [START upload_a_blob]
    +                :end-before: [END upload_a_blob]
    +                :language: python
    +                :dedent: 16
    +                :caption: Upload a blob to the container.
    +        """
    +        options = self._upload_blob_options(
    +            data,
    +            blob_type=blob_type,
    +            length=length,
    +            metadata=metadata,
    +            **kwargs)
    +        if blob_type == BlobType.BlockBlob:
    +            return await upload_block_blob(**options)
    +        if blob_type == BlobType.PageBlob:
    +            return await upload_page_blob(**options)
    +        return await upload_append_blob(**options)
    +
    +    @distributed_trace_async
    +    async def download_blob(self, offset=None, length=None, **kwargs):
    +        # type: (Optional[int], Optional[int], Any) -> StorageStreamDownloader
    +        """Downloads a blob to the StorageStreamDownloader. The readall() method must
    +        be used to read all the content or readinto() must be used to download the blob into
    +        a stream.
    +
    +        :param int offset:
    +            Start of byte range to use for downloading a section of the blob.
    +            Must be set if length is provided.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, download_blob only
    +            succeeds if the blob's lease is active and matches this ID. Value can be a
    +            BlobLeaseClient object or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :keyword str encoding:
    +            Encoding to decode the downloaded bytes. Default is None, i.e. no decoding.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :returns: A streaming object (StorageStreamDownloader)
    +        :rtype: ~azure.storage.blob.aio.StorageStreamDownloader
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_hello_world_async.py
    +                :start-after: [START download_a_blob]
    +                :end-before: [END download_a_blob]
    +                :language: python
    +                :dedent: 16
    +                :caption: Download a blob.
    +        """
    +        options = self._download_blob_options(
    +            offset=offset,
    +            length=length,
    +            **kwargs)
    +        downloader = StorageStreamDownloader(**options)
    +        await downloader._setup()  # pylint: disable=protected-access
    +        return downloader
    +
    +    @distributed_trace_async
    +    async def delete_blob(self, delete_snapshots=False, **kwargs):
    +        # type: (bool, Any) -> None
    +        """Marks the specified blob for deletion.
    +
    +        The blob is later deleted during garbage collection.
    +        Note that in order to delete a blob, you must delete all of its
    +        snapshots. You can delete both at the same time with the delete_blob()
    +        operation.
    +
    +        If a delete retention policy is enabled for the service, then this operation soft deletes the blob
    +        and retains the blob for a specified number of days.
    +        After the specified number of days, the blob's data is removed from the service during garbage collection.
    +        Soft deleted blob is accessible through :func:`~ContainerClient.list_blobs()` specifying `include=['deleted']`
    +        option. Soft-deleted blob can be restored using :func:`undelete` operation.
    +
    +        :param str delete_snapshots:
    +            Required if the blob has associated snapshots. Values include:
    +             - "only": Deletes only the blobs snapshots.
    +             - "include": Deletes the blob along with all snapshots.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, delete_blob only
    +            succeeds if the blob's lease is active and matches this ID. Value can be a
    +            BlobLeaseClient object or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_hello_world_async.py
    +                :start-after: [START delete_blob]
    +                :end-before: [END delete_blob]
    +                :language: python
    +                :dedent: 16
    +                :caption: Delete a blob.
    +        """
    +        options = self._delete_blob_options(delete_snapshots=delete_snapshots, **kwargs)
    +        try:
    +            await self._client.blob.delete(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def undelete_blob(self, **kwargs):
    +        # type: (Any) -> None
    +        """Restores soft-deleted blobs or snapshots.
    +
    +        Operation will only be successful if used within the specified number of days
    +        set in the delete retention policy.
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START undelete_blob]
    +                :end-before: [END undelete_blob]
    +                :language: python
    +                :dedent: 12
    +                :caption: Undeleting a blob.
    +        """
    +        try:
    +            await self._client.blob.undelete(timeout=kwargs.pop('timeout', None), **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_blob_properties(self, **kwargs):
    +        # type: (Any) -> BlobProperties
    +        """Returns all user-defined metadata, standard HTTP properties, and
    +        system properties for the blob. It does not return the content of the blob.
    +
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: BlobProperties
    +        :rtype: ~azure.storage.blob.BlobProperties
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START get_blob_properties]
    +                :end-before: [END get_blob_properties]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting the properties for a blob.
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        try:
    +            blob_props = await self._client.blob.get_properties(
    +                timeout=kwargs.pop('timeout', None),
    +                snapshot=self.snapshot,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                cls=deserialize_blob_properties,
    +                cpk_info=cpk_info,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        blob_props.name = self.blob_name
    +        blob_props.container = self.container_name
    +        return blob_props # type: ignore
    +
    +    @distributed_trace_async
    +    async def set_http_headers(self, content_settings=None, **kwargs):
    +        # type: (Optional[ContentSettings], Any) -> None
    +        """Sets system properties on the blob.
    +
    +        If one property is set for the content_settings, all properties will be overridden.
    +
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified)
    +        :rtype: Dict[str, Any]
    +        """
    +        options = self._set_http_headers_options(content_settings=content_settings, **kwargs)
    +        try:
    +            return await self._client.blob.set_http_headers(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def set_blob_metadata(self, metadata=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], Any) -> Dict[str, Union[str, datetime]]
    +        """Sets user-defined metadata for the blob as one or more name-value pairs.
    +
    +        :param metadata:
    +            Dict containing name and value pairs. Each call to this operation
    +            replaces all existing metadata attached to the blob. To remove all
    +            metadata from the blob, call this operation with no metadata headers.
    +        :type metadata: dict(str, str)
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified)
    +        """
    +        options = self._set_blob_metadata_options(metadata=metadata, **kwargs)
    +        try:
    +            return await self._client.blob.set_metadata(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def create_page_blob(  # type: ignore
    +            self, size,  # type: int
    +            content_settings=None,  # type: Optional[ContentSettings]
    +            metadata=None, # type: Optional[Dict[str, str]]
    +            premium_page_blob_tier=None,  # type: Optional[Union[str, PremiumPageBlobTier]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Creates a new Page Blob of the specified size.
    +
    +        :param int size:
    +            This specifies the maximum size for the page blob, up to 1 TB.
    +            The page blob size must be aligned to a 512-byte boundary.
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :param ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword int sequence_number:
    +            Only for Page blobs. The sequence number is a user-controlled value that you can use to
    +            track requests. The value of the sequence number must be between 0
    +            and 2^63 - 1.The default value is 0.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict[str, Any]
    +        """
    +        options = self._create_page_blob_options(
    +            size,
    +            content_settings=content_settings,
    +            metadata=metadata,
    +            premium_page_blob_tier=premium_page_blob_tier,
    +            **kwargs)
    +        try:
    +            return await self._client.page_blob.create(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def create_append_blob(self, content_settings=None, metadata=None, **kwargs):
    +        # type: (Optional[ContentSettings], Optional[Dict[str, str]], Any) -> Dict[str, Union[str, datetime]]
    +        """Creates a new Append Blob.
    +
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict[str, Any]
    +        """
    +        options = self._create_append_blob_options(
    +            content_settings=content_settings,
    +            metadata=metadata,
    +            **kwargs)
    +        try:
    +            return await self._client.append_blob.create(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def create_snapshot(self, metadata=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], Any) -> Dict[str, Union[str, datetime]]
    +        """Creates a snapshot of the blob.
    +
    +        A snapshot is a read-only version of a blob that's taken at a point in time.
    +        It can be read, copied, or deleted, but not modified. Snapshots provide a way
    +        to back up a blob as it appears at a moment in time.
    +
    +        A snapshot of a blob has the same name as the base blob from which the snapshot
    +        is taken, with a DateTime value appended to indicate the time at which the
    +        snapshot was taken.
    +
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Snapshot ID, Etag, and last modified).
    +        :rtype: dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START create_blob_snapshot]
    +                :end-before: [END create_blob_snapshot]
    +                :language: python
    +                :dedent: 12
    +                :caption: Create a snapshot of the blob.
    +        """
    +        options = self._create_snapshot_options(metadata=metadata, **kwargs)
    +        try:
    +            return await self._client.blob.create_snapshot(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def start_copy_from_url(self, source_url, metadata=None, incremental_copy=False, **kwargs):
    +        # type: (str, Optional[Dict[str, str]], bool, Any) -> Any
    +        """Copies a blob asynchronously.
    +
    +        This operation returns a copy operation
    +        object that can be used to wait on the completion of the operation,
    +        as well as check status or abort the copy operation.
    +        The Blob service copies blobs on a best-effort basis.
    +
    +        The source blob for a copy operation may be a block blob, an append blob,
    +        or a page blob. If the destination blob already exists, it must be of the
    +        same blob type as the source blob. Any existing destination blob will be
    +        overwritten. The destination blob cannot be modified while a copy operation
    +        is in progress.
    +
    +        When copying from a page blob, the Blob service creates a destination page
    +        blob of the source blob's length, initially containing all zeroes. Then
    +        the source page ranges are enumerated, and non-empty ranges are copied.
    +
    +        For a block blob or an append blob, the Blob service creates a committed
    +        blob of zero length before returning from this operation. When copying
    +        from a block blob, all committed blocks and their block IDs are copied.
    +        Uncommitted blocks are not copied. At the end of the copy operation, the
    +        destination blob will have the same committed block count as the source.
    +
    +        When copying from an append blob, all committed blocks are copied. At the
    +        end of the copy operation, the destination blob will have the same committed
    +        block count as the source.
    +
    +        For all blob types, you can call status() on the returned polling object
    +        to check the status of the copy operation, or wait() to block until the
    +        operation is complete. The final blob will be committed when the copy completes.
    +
    +        :param str source_url:
    +            A URL of up to 2 KB in length that specifies a file or blob.
    +            The value should be URL-encoded as it would appear in a request URI.
    +            If the source is in another account, the source must either be public
    +            or must be authenticated via a shared access signature. If the source
    +            is public, no authentication is required.
    +            Examples:
    +            https://myaccount.blob.core.windows.net/mycontainer/myblob
    +
    +            https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=
    +
    +            https://otheraccount.blob.core.windows.net/mycontainer/myblob?sastoken
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata. If no name-value
    +            pairs are specified, the operation will copy the metadata from the
    +            source blob or file to the destination blob. If one or more name-value
    +            pairs are specified, the destination blob is created with the specified
    +            metadata, and metadata is not copied from the source blob or file.
    +        :type metadata: dict(str, str)
    +        :param bool incremental_copy:
    +            Copies the snapshot of the source page blob to a destination page blob.
    +            The snapshot is copied such that only the differential changes between
    +            the previously copied snapshot are transferred to the destination.
    +            The copied snapshots are complete copies of the original snapshot and
    +            can be read or copied from as usual. Defaults to False.
    +        :keyword ~datetime.datetime source_if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only if the source
    +            blob has been modified since the specified date/time.
    +        :keyword ~datetime.datetime source_if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only if the source blob
    +            has not been modified since the specified date/time.
    +        :keyword str source_etag:
    +            The source ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions source_match_condition:
    +            The source match condition to use upon the etag.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only
    +            if the destination blob has been modified since the specified date/time.
    +            If the destination blob has not been modified, the Blob service returns
    +            status code 412 (Precondition Failed).
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only
    +            if the destination blob has not been modified since the specified
    +            date/time. If the destination blob has been modified, the Blob service
    +            returns status code 412 (Precondition Failed).
    +        :keyword str etag:
    +            The destination ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The destination match condition to use upon the etag.
    +        :keyword destination_lease:
    +            The lease ID specified for this header must match the lease ID of the
    +            destination blob. If the request does not include the lease ID or it is not
    +            valid, the operation fails with status code 412 (Precondition Failed).
    +        :paramtype destination_lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword source_lease:
    +            Specify this to perform the Copy Blob operation only if
    +            the lease ID given matches the active lease ID of the source blob.
    +        :paramtype source_lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword ~azure.storage.blob.RehydratePriority rehydrate_priority:
    +            Indicates the priority with which to rehydrate an archived blob
    +        :keyword bool requires_sync:
    +            Enforces that the service will not return a response until the copy is complete.
    +        :returns: A dictionary of copy properties (etag, last_modified, copy_id, copy_status).
    +        :rtype: dict[str, str or ~datetime.datetime]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START copy_blob_from_url]
    +                :end-before: [END copy_blob_from_url]
    +                :language: python
    +                :dedent: 16
    +                :caption: Copy a blob from a URL.
    +        """
    +        options = self._start_copy_from_url_options(
    +            source_url,
    +            metadata=metadata,
    +            incremental_copy=incremental_copy,
    +            **kwargs)
    +        try:
    +            if incremental_copy:
    +                return await self._client.page_blob.copy_incremental(**options)
    +            return await self._client.blob.start_copy_from_url(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def abort_copy(self, copy_id, **kwargs):
    +        # type: (Union[str, Dict[str, Any], BlobProperties], Any) -> None
    +        """Abort an ongoing copy operation.
    +
    +        This will leave a destination blob with zero length and full metadata.
    +        This will raise an error if the copy operation has already ended.
    +
    +        :param copy_id:
    +            The copy operation to abort. This can be either an ID, or an
    +            instance of BlobProperties.
    +        :type copy_id: str or ~azure.storage.blob.BlobProperties
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START abort_copy_blob_from_url]
    +                :end-before: [END abort_copy_blob_from_url]
    +                :language: python
    +                :dedent: 16
    +                :caption: Abort copying a blob from URL.
    +        """
    +        options = self._abort_copy_options(copy_id, **kwargs)
    +        try:
    +            await self._client.blob.abort_copy_from_url(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def acquire_lease(self, lease_duration=-1, lease_id=None, **kwargs):
    +        # type: (int, Optional[str], Any) -> BlobLeaseClient
    +        """Requests a new lease.
    +
    +        If the blob does not have an active lease, the Blob
    +        Service creates a lease on the blob and returns a new lease.
    +
    +        :param int lease_duration:
    +            Specifies the duration of the lease, in seconds, or negative one
    +            (-1) for a lease that never expires. A non-infinite lease can be
    +            between 15 and 60 seconds. A lease duration cannot be changed
    +            using renew or change. Default is -1 (infinite lease).
    +        :param str lease_id:
    +            Proposed lease ID, in a GUID string format. The Blob Service
    +            returns 400 (Invalid request) if the proposed lease ID is not
    +            in the correct format.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: A BlobLeaseClient object.
    +        :rtype: ~azure.storage.blob.aio.BlobLeaseClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START acquire_lease_on_blob]
    +                :end-before: [END acquire_lease_on_blob]
    +                :language: python
    +                :dedent: 12
    +                :caption: Acquiring a lease on a blob.
    +        """
    +        lease = BlobLeaseClient(self, lease_id=lease_id) # type: ignore
    +        await lease.acquire(lease_duration=lease_duration, **kwargs)
    +        return lease
    +
    +    @distributed_trace_async
    +    async def set_standard_blob_tier(self, standard_blob_tier, **kwargs):
    +        # type: (Union[str, StandardBlobTier], Any) -> None
    +        """This operation sets the tier on a block blob.
    +
    +        A block blob's tier determines Hot/Cool/Archive storage type.
    +        This operation does not update the blob's ETag.
    +
    +        :param standard_blob_tier:
    +            Indicates the tier to be set on the blob. Options include 'Hot', 'Cool',
    +            'Archive'. The hot tier is optimized for storing data that is accessed
    +            frequently. The cool storage tier is optimized for storing data that
    +            is infrequently accessed and stored for at least a month. The archive
    +            tier is optimized for storing data that is rarely accessed and stored
    +            for at least six months with flexible latency requirements.
    +        :type standard_blob_tier: str or ~azure.storage.blob.StandardBlobTier
    +        :keyword ~azure.storage.blob.RehydratePriority rehydrate_priority:
    +            Indicates the priority with which to rehydrate an archived blob
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :rtype: None
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if standard_blob_tier is None:
    +            raise ValueError("A StandardBlobTier must be specified")
    +        try:
    +            await self._client.blob.set_tier(
    +                tier=standard_blob_tier,
    +                timeout=kwargs.pop('timeout', None),
    +                lease_access_conditions=access_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def stage_block(
    +            self, block_id,  # type: str
    +            data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Creates a new block to be committed as part of a blob.
    +
    +        :param str block_id: A valid Base64 string value that identifies the
    +             block. Prior to encoding, the string must be less than or equal to 64
    +             bytes in size. For a given blob, the length of the value specified for
    +             the block_id parameter must be the same size for each block.
    +        :param data: The blob data.
    +        :param int length: Size of the block.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        options = self._stage_block_options(
    +            block_id,
    +            data,
    +            length=length,
    +            **kwargs)
    +        try:
    +            await self._client.block_blob.stage_block(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def stage_block_from_url(
    +            self, block_id,  # type: str
    +            source_url,  # type: str
    +            source_offset=None,  # type: Optional[int]
    +            source_length=None,  # type: Optional[int]
    +            source_content_md5=None,  # type: Optional[Union[bytes, bytearray]]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Creates a new block to be committed as part of a blob where
    +        the contents are read from a URL.
    +
    +        :param str block_id: A valid Base64 string value that identifies the
    +             block. Prior to encoding, the string must be less than or equal to 64
    +             bytes in size. For a given blob, the length of the value specified for
    +             the block_id parameter must be the same size for each block.
    +        :param str source_url: The URL.
    +        :param int source_offset:
    +            Start of byte range to use for the block.
    +            Must be set if source length is provided.
    +        :param int source_length: The size of the block in bytes.
    +        :param bytearray source_content_md5:
    +            Specify the md5 calculated for the range of
    +            bytes that must be read from the copy source.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        options = self._stage_block_from_url_options(
    +            block_id,
    +            source_url,
    +            source_offset=source_offset,
    +            source_length=source_length,
    +            source_content_md5=source_content_md5,
    +            **kwargs)
    +        try:
    +            await self._client.block_blob.stage_block_from_url(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_block_list(self, block_list_type="committed", **kwargs):
    +        # type: (Optional[str], Any) -> Tuple[List[BlobBlock], List[BlobBlock]]
    +        """The Get Block List operation retrieves the list of blocks that have
    +        been uploaded as part of a block blob.
    +
    +        :param str block_list_type:
    +            Specifies whether to return the list of committed
    +            blocks, the list of uncommitted blocks, or both lists together.
    +            Possible values include: 'committed', 'uncommitted', 'all'
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: A tuple of two lists - committed and uncommitted blocks
    +        :rtype: tuple(list(~azure.storage.blob.BlobBlock), list(~azure.storage.blob.BlobBlock))
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('kease', None))
    +        try:
    +            blocks = await self._client.block_blob.get_block_list(
    +                list_type=block_list_type,
    +                snapshot=self.snapshot,
    +                timeout=kwargs.pop('timeout', None),
    +                lease_access_conditions=access_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return self._get_block_list_result(blocks)
    +
    +    @distributed_trace_async
    +    async def commit_block_list( # type: ignore
    +            self, block_list,  # type: List[BlobBlock]
    +            content_settings=None,  # type: Optional[ContentSettings]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """The Commit Block List operation writes a blob by specifying the list of
    +        block IDs that make up the blob.
    +
    +        :param list block_list:
    +            List of Blockblobs.
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict[str, str]
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash of the page content. The storage
    +            service checks the hash of the content that has arrived
    +            with the hash that was sent. This is primarily valuable for detecting
    +            bitflips on the wire if using http instead of https, as https (the default),
    +            will already validate. Note that this MD5 hash is not stored with the
    +            blob.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._commit_block_list_options(
    +            block_list,
    +            content_settings=content_settings,
    +            metadata=metadata,
    +            **kwargs)
    +        try:
    +            return await self._client.block_blob.commit_block_list(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def set_premium_page_blob_tier(self, premium_page_blob_tier, **kwargs):
    +        # type: (Union[str, PremiumPageBlobTier], **Any) -> None
    +        """Sets the page blob tiers on the blob. This API is only supported for page blobs on premium accounts.
    +
    +        :param premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :type premium_page_blob_tier: ~azure.storage.blob.PremiumPageBlobTier
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :rtype: None
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if premium_page_blob_tier is None:
    +            raise ValueError("A PremiumPageBlobTiermust be specified")
    +        try:
    +            await self._client.blob.set_tier(
    +                tier=premium_page_blob_tier,
    +                timeout=kwargs.pop('timeout', None),
    +                lease_access_conditions=access_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_page_ranges( # type: ignore
    +            self, offset=None, # type: Optional[int]
    +            length=None, # type: Optional[int]
    +            previous_snapshot_diff=None,  # type: Optional[Union[str, Dict[str, Any]]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Tuple[List[Dict[str, int]], List[Dict[str, int]]]
    +        """Returns the list of valid page ranges for a Page Blob or snapshot
    +        of a page blob.
    +
    +        :param int offset:
    +            Start of byte range to use for getting valid page ranges.
    +            If no length is given, all bytes after the offset will be searched.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for getting valid page ranges.
    +            If length is given, offset must be provided.
    +            This range will return valid page ranges from the offset start up to
    +            the specified length.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param str previous_snapshot_diff:
    +            The snapshot diff parameter that contains an opaque DateTime value that
    +            specifies a previous blob snapshot to be compared
    +            against a more recent snapshot or the current blob.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns:
    +            A tuple of two lists of page ranges as dictionaries with 'start' and 'end' keys.
    +            The first element are filled page ranges, the 2nd element is cleared page ranges.
    +        :rtype: tuple(list(dict(str, str), list(dict(str, str))
    +        """
    +        options = self._get_page_ranges_options(
    +            offset=offset,
    +            length=length,
    +            previous_snapshot_diff=previous_snapshot_diff,
    +            **kwargs)
    +        try:
    +            if previous_snapshot_diff:
    +                ranges = await self._client.page_blob.get_page_ranges_diff(**options)
    +            else:
    +                ranges = await self._client.page_blob.get_page_ranges(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return get_page_ranges_result(ranges)
    +
    +    @distributed_trace_async
    +    async def get_page_range_diff_for_managed_disk(
    +            self, previous_snapshot_url,  # type: str
    +            offset=None, # type: Optional[int]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> Tuple[List[Dict[str, int]], List[Dict[str, int]]]
    +        """Returns the list of valid page ranges for a managed disk or snapshot.
    +
    +        .. note::
    +            This operation is only available for managed disk accounts.
    +
    +        .. versionadded:: 12.2.0
    +            This operation was introduced in API version '2019-07-07'.
    +
    +        :param previous_snapshot_url:
    +            Specifies the URL of a previous snapshot of the managed disk.
    +            The response will only contain pages that were changed between the target blob and
    +            its previous snapshot.
    +        :param int offset:
    +            Start of byte range to use for getting valid page ranges.
    +            If no length is given, all bytes after the offset will be searched.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for getting valid page ranges.
    +            If length is given, offset must be provided.
    +            This range will return valid page ranges from the offset start up to
    +            the specified length.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns:
    +            A tuple of two lists of page ranges as dictionaries with 'start' and 'end' keys.
    +            The first element are filled page ranges, the 2nd element is cleared page ranges.
    +        :rtype: tuple(list(dict(str, str), list(dict(str, str))
    +        """
    +        options = self._get_page_ranges_options(
    +            offset=offset,
    +            length=length,
    +            prev_snapshot_url=previous_snapshot_url,
    +            **kwargs)
    +        try:
    +            ranges = await self._client.page_blob.get_page_ranges_diff(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return get_page_ranges_result(ranges)
    +
    +    @distributed_trace_async
    +    async def set_sequence_number( # type: ignore
    +            self, sequence_number_action,  # type: Union[str, SequenceNumberAction]
    +            sequence_number=None,  # type: Optional[str]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Sets the blob sequence number.
    +
    +        :param str sequence_number_action:
    +            This property indicates how the service should modify the blob's sequence
    +            number. See :class:`~azure.storage.blob.SequenceNumberAction` for more information.
    +        :param str sequence_number:
    +            This property sets the blob's sequence number. The sequence number is a
    +            user-controlled property that you can use to track requests and manage
    +            concurrency issues.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._set_sequence_number_options(
    +            sequence_number_action, sequence_number=sequence_number, **kwargs)
    +        try:
    +            return await self._client.page_blob.update_sequence_number(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def resize_blob(self, size, **kwargs):
    +        # type: (int, Any) -> Dict[str, Union[str, datetime]]
    +        """Resizes a page blob to the specified size.
    +
    +        If the specified value is less than the current size of the blob,
    +        then all pages above the specified value are cleared.
    +
    +        :param int size:
    +            Size used to resize blob. Maximum size for a page blob is up to 1 TB.
    +            The page blob size must be aligned to a 512-byte boundary.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._resize_blob_options(size, **kwargs)
    +        try:
    +            return await self._client.page_blob.resize(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def upload_page( # type: ignore
    +            self, page,  # type: bytes
    +            offset,  # type: int
    +            length,  # type: int
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """The Upload Pages operation writes a range of pages to a page blob.
    +
    +        :param bytes page:
    +            Content of the page.
    +        :param int offset:
    +            Start of byte range to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash of the page content. The storage
    +            service checks the hash of the content that has arrived
    +            with the hash that was sent. This is primarily valuable for detecting
    +            bitflips on the wire if using http instead of https, as https (the default),
    +            will already validate. Note that this MD5 hash is not stored with the
    +            blob.
    +        :keyword int if_sequence_number_lte:
    +            If the blob's sequence number is less than or equal to
    +            the specified value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_lt:
    +            If the blob's sequence number is less than the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_eq:
    +            If the blob's sequence number is equal to the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._upload_page_options(
    +            page=page,
    +            offset=offset,
    +            length=length,
    +            **kwargs)
    +        try:
    +            return await self._client.page_blob.upload_pages(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def upload_pages_from_url(self, source_url,  # type: str
    +                                    offset,  # type: int
    +                                    length,  # type: int
    +                                    source_offset,  # type: int
    +                                    **kwargs
    +                                    ):
    +        # type: (...) -> Dict[str, Any]
    +        """
    +        The Upload Pages operation writes a range of pages to a page blob where
    +        the contents are read from a URL.
    +
    +        :param str source_url:
    +            The URL of the source data. It can point to any Azure Blob or File, that is either public or has a
    +            shared access signature attached.
    +        :param int offset:
    +            Start of byte range to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length  must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int source_offset:
    +            This indicates the start of the range of bytes(inclusive) that has to be taken from the copy source.
    +            The service will read the same number of bytes as the destination range (length-offset).
    +        :keyword bytes source_content_md5:
    +            If given, the service will calculate the MD5 hash of the block content and compare against this value.
    +        :keyword ~datetime.datetime source_if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the source resource has been modified since the specified time.
    +        :keyword ~datetime.datetime source_if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the source resource has not been modified since the specified date/time.
    +        :keyword str source_etag:
    +            The source ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions source_match_condition:
    +            The source match condition to use upon the etag.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword int if_sequence_number_lte:
    +            If the blob's sequence number is less than or equal to
    +            the specified value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_lt:
    +            If the blob's sequence number is less than the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_eq:
    +            If the blob's sequence number is equal to the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            The destination ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The destination match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        """
    +
    +        options = self._upload_pages_from_url_options(
    +            source_url=source_url,
    +            offset=offset,
    +            length=length,
    +            source_offset=source_offset,
    +            **kwargs
    +        )
    +        try:
    +            return await self._client.page_blob.upload_pages_from_url(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def clear_page(self, offset, length, **kwargs):
    +        # type: (int, int, Any) -> Dict[str, Union[str, datetime]]
    +        """Clears a range of pages.
    +
    +        :param int offset:
    +            Start of byte range to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length  must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword int if_sequence_number_lte:
    +            If the blob's sequence number is less than or equal to
    +            the specified value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_lt:
    +            If the blob's sequence number is less than the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_eq:
    +            If the blob's sequence number is equal to the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._clear_page_options(offset, length, **kwargs)
    +        try:
    +            return await self._client.page_blob.clear_pages(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def append_block( # type: ignore
    +            self, data,  # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime, int]]
    +        """Commits a new block of data to the end of the existing append blob.
    +
    +        :param data:
    +            Content of the block.
    +        :param int length:
    +            Size of the block in bytes.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash of the block content. The storage
    +            service checks the hash of the content that has arrived
    +            with the hash that was sent. This is primarily valuable for detecting
    +            bitflips on the wire if using http instead of https, as https (the default),
    +            will already validate. Note that this MD5 hash is not stored with the
    +            blob.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int appendpos_condition:
    +            Optional conditional header, used only for the Append Block operation.
    +            A number indicating the byte offset to compare. Append Block will
    +            succeed only if the append position is equal to this number. If it
    +            is not, the request will fail with the AppendPositionConditionNotMet error
    +            (HTTP status code 412 - Precondition Failed).
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag, last modified, append offset, committed block count).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._append_block_options(
    +            data,
    +            length=length,
    +            **kwargs
    +        )
    +        try:
    +            return await self._client.append_blob.append_block(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async()
    +    async def append_block_from_url(self, copy_source_url,  # type: str
    +                                    source_offset=None,  # type: Optional[int]
    +                                    source_length=None,  # type: Optional[int]
    +                                    **kwargs):
    +        # type: (...) -> Dict[str, Union[str, datetime, int]]
    +        """
    +        Creates a new block to be committed as part of a blob, where the contents are read from a source url.
    +
    +        :param str copy_source_url:
    +            The URL of the source data. It can point to any Azure Blob or File, that is either public or has a
    +            shared access signature attached.
    +        :param int source_offset:
    +            This indicates the start of the range of bytes(inclusive) that has to be taken from the copy source.
    +        :param int source_length:
    +            This indicates the end of the range of bytes that has to be taken from the copy source.
    +        :keyword bytearray source_content_md5:
    +            If given, the service will calculate the MD5 hash of the block content and compare against this value.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int appendpos_condition:
    +            Optional conditional header, used only for the Append Block operation.
    +            A number indicating the byte offset to compare. Append Block will
    +            succeed only if the append position is equal to this number. If it
    +            is not, the request will fail with the
    +            AppendPositionConditionNotMet error
    +            (HTTP status code 412 - Precondition Failed).
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            The destination ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The destination match condition to use upon the etag.
    +        :keyword ~datetime.datetime source_if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the source resource has been modified since the specified time.
    +        :keyword ~datetime.datetime source_if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the source resource has not been modified since the specified date/time.
    +        :keyword str source_etag:
    +            The source ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions source_match_condition:
    +            The source match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        """
    +        options = self._append_block_from_url_options(
    +            copy_source_url,
    +            source_offset=source_offset,
    +            source_length=source_length,
    +            **kwargs
    +        )
    +        try:
    +            return await self._client.append_blob.append_block_from_url(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_blob_service_client_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_blob_service_client_async.py
    new file mode 100644
    index 000000000000..77bc5657e7cd
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_blob_service_client_async.py
    @@ -0,0 +1,571 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import functools
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, Dict, List,
    +    TYPE_CHECKING
    +)
    +
    +from azure.core.tracing.decorator import distributed_trace
    +from azure.core.pipeline import AsyncPipeline
    +from azure.core.tracing.decorator_async import distributed_trace_async
    +from azure.core.async_paging import AsyncItemPaged
    +
    +from .._shared.models import LocationMode
    +from .._shared.policies_async import ExponentialRetry
    +from .._shared.base_client_async import AsyncStorageAccountHostsMixin, AsyncTransportWrapper
    +from .._shared.response_handlers import return_response_headers, process_storage_error
    +from .._shared.parser import _to_utc_datetime
    +from .._shared.response_handlers import parse_to_internal_user_delegation_key
    +from .._generated import VERSION
    +from .._generated.aio import AzureBlobStorage
    +from .._generated.models import StorageErrorException, StorageServiceProperties, KeyInfo
    +from .._blob_service_client import BlobServiceClient as BlobServiceClientBase
    +from ._container_client_async import ContainerClient
    +from ._blob_client_async import BlobClient
    +from .._models import ContainerProperties
    +from .._deserialize import service_stats_deserialize, service_properties_deserialize
    +from .._serialize import get_api_version
    +from ._models import ContainerPropertiesPaged
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from azure.core.pipeline.transport import HttpTransport
    +    from azure.core.pipeline.policies import HTTPPolicy
    +    from .._shared.models import AccountSasPermissions, ResourceTypes, UserDelegationKey
    +    from ._lease_async import BlobLeaseClient
    +    from .._models import (
    +        BlobProperties,
    +        PublicAccess,
    +        BlobAnalyticsLogging,
    +        Metrics,
    +        CorsRule,
    +        RetentionPolicy,
    +        StaticWebsite,
    +    )
    +
    +
    +class BlobServiceClient(AsyncStorageAccountHostsMixin, BlobServiceClientBase):
    +    """A client to interact with the Blob Service at the account level.
    +
    +    This client provides operations to retrieve and configure the account properties
    +    as well as list, create and delete containers within the account.
    +    For operations relating to a specific container or blob, clients for those entities
    +    can also be retrieved using the `get_client` functions.
    +
    +    :param str account_url:
    +        The URL to the blob storage account. Any other entities included
    +        in the URL path (e.g. container or blob) will be discarded. This URL can be optionally
    +        authenticated with a SAS token.
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +        The Storage API version to use for requests. Default value is '2019-07-07'.
    +        Setting to an older version may result in reduced feature compatibility.
    +
    +        .. versionadded:: 12.2.0
    +
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +    :keyword int max_block_size: The maximum chunk size for uploading a block blob in chunks.
    +        Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_put_size: If the blob size is less than max_single_put_size, then the blob will be
    +        uploaded with only one http PUT request. If the blob size is larger than max_single_put_size,
    +        the blob will be uploaded in chunks. Defaults to 64*1024*1024, or 64MB.
    +    :keyword int min_large_block_upload_threshold: The minimum chunk size required to use the memory efficient
    +        algorithm when uploading a block blob. Defaults to 4*1024*1024+1.
    +    :keyword bool use_byte_buffer: Use a byte buffer for block blob uploads. Defaults to False.
    +    :keyword int max_page_size: The maximum chunk size for uploading a page blob. Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_get_size: The maximum size for a blob to be downloaded in a single call,
    +        the exceeded part will be downloaded in chunks (could be parallel). Defaults to 32*1024*1024, or 32MB.
    +    :keyword int max_chunk_get_size: The maximum chunk size used for downloading a blob. Defaults to 4*1024*1024,
    +        or 4MB.
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication_async.py
    +            :start-after: [START create_blob_service_client]
    +            :end-before: [END create_blob_service_client]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobServiceClient with account url and credential.
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication_async.py
    +            :start-after: [START create_blob_service_client_oauth]
    +            :end-before: [END create_blob_service_client_oauth]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobServiceClient with Azure Identity credentials.
    +    """
    +
    +    def __init__(
    +            self, account_url,  # type: str
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):
    +        # type: (...) -> None
    +        kwargs['retry_policy'] = kwargs.get('retry_policy') or ExponentialRetry(**kwargs)
    +        super(BlobServiceClient, self).__init__(
    +            account_url,
    +            credential=credential,
    +            **kwargs)
    +        self._client = AzureBlobStorage(url=self.url, pipeline=self._pipeline)
    +        self._client._config.version = get_api_version(kwargs, VERSION)  # pylint: disable=protected-access
    +        self._loop = kwargs.get('loop', None)
    +
    +    @distributed_trace_async
    +    async def get_user_delegation_key(self, key_start_time,  # type: datetime
    +                                      key_expiry_time,  # type: datetime
    +                                      **kwargs  # type: Any
    +                                      ):
    +        # type: (...) -> UserDelegationKey
    +        """
    +        Obtain a user delegation key for the purpose of signing SAS tokens.
    +        A token credential must be present on the service object for this request to succeed.
    +
    +        :param ~datetime.datetime key_start_time:
    +            A DateTime value. Indicates when the key becomes valid.
    +        :param ~datetime.datetime key_expiry_time:
    +            A DateTime value. Indicates when the key stops being valid.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: The user delegation key.
    +        :rtype: ~azure.storage.blob.UserDelegationKey
    +        """
    +        key_info = KeyInfo(start=_to_utc_datetime(key_start_time), expiry=_to_utc_datetime(key_expiry_time))
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            user_delegation_key = await self._client.service.get_user_delegation_key(key_info=key_info,
    +                                                                                     timeout=timeout,
    +                                                                                     **kwargs)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +        return parse_to_internal_user_delegation_key(user_delegation_key)  # type: ignore
    +
    +    @distributed_trace_async
    +    async def get_account_information(self, **kwargs):
    +        # type: (Any) -> Dict[str, str]
    +        """Gets information related to the storage account.
    +
    +        The information can also be retrieved if the user has a SAS to a container or blob.
    +        The keys in the returned dictionary include 'sku_name' and 'account_kind'.
    +
    +        :returns: A dict of account information (SKU and account type).
    +        :rtype: dict(str, str)
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START get_blob_service_account_info]
    +                :end-before: [END get_blob_service_account_info]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting account information for the blob service.
    +        """
    +        try:
    +            return await self._client.service.get_account_info(cls=return_response_headers, **kwargs) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_service_stats(self, **kwargs):
    +        # type: (Any) -> Dict[str, Any]
    +        """Retrieves statistics related to replication for the Blob service.
    +
    +        It is only available when read-access geo-redundant replication is enabled for
    +        the storage account.
    +
    +        With geo-redundant replication, Azure Storage maintains your data durable
    +        in two locations. In both locations, Azure Storage constantly maintains
    +        multiple healthy replicas of your data. The location where you read,
    +        create, update, or delete data is the primary storage account location.
    +        The primary location exists in the region you choose at the time you
    +        create an account via the Azure Management Azure classic portal, for
    +        example, North Central US. The location to which your data is replicated
    +        is the secondary location. The secondary location is automatically
    +        determined based on the location of the primary; it is in a second data
    +        center that resides in the same region as the primary location. Read-only
    +        access is available from the secondary location, if read-access geo-redundant
    +        replication is enabled for your storage account.
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: The blob service stats.
    +        :rtype: Dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START get_blob_service_stats]
    +                :end-before: [END get_blob_service_stats]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting service stats for the blob service.
    +        """
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            stats = await self._client.service.get_statistics( # type: ignore
    +                timeout=timeout, use_location=LocationMode.SECONDARY, **kwargs)
    +            return service_stats_deserialize(stats)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_service_properties(self, **kwargs):
    +        # type: (Any) -> Dict[str, Any]
    +        """Gets the properties of a storage account's Blob service, including
    +        Azure Storage Analytics.
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An object containing blob service properties such as
    +            analytics logging, hour/minute metrics, cors rules, etc.
    +        :rtype: Dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START get_blob_service_properties]
    +                :end-before: [END get_blob_service_properties]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting service properties for the blob service.
    +        """
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            service_props = await self._client.service.get_properties(timeout=timeout, **kwargs)
    +            return service_properties_deserialize(service_props)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def set_service_properties(
    +            self, analytics_logging=None,  # type: Optional[BlobAnalyticsLogging]
    +            hour_metrics=None,  # type: Optional[Metrics]
    +            minute_metrics=None,  # type: Optional[Metrics]
    +            cors=None,  # type: Optional[List[CorsRule]]
    +            target_version=None,  # type: Optional[str]
    +            delete_retention_policy=None,  # type: Optional[RetentionPolicy]
    +            static_website=None,  # type: Optional[StaticWebsite]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Sets the properties of a storage account's Blob service, including
    +        Azure Storage Analytics.
    +
    +        If an element (e.g. analytics_logging) is left as None, the
    +        existing settings on the service for that functionality are preserved.
    +
    +        :param analytics_logging:
    +            Groups the Azure Analytics Logging settings.
    +        :type analytics_logging: ~azure.storage.blob.BlobAnalyticsLogging
    +        :param hour_metrics:
    +            The hour metrics settings provide a summary of request
    +            statistics grouped by API in hourly aggregates for blobs.
    +        :type hour_metrics: ~azure.storage.blob.Metrics
    +        :param minute_metrics:
    +            The minute metrics settings provide request statistics
    +            for each minute for blobs.
    +        :type minute_metrics: ~azure.storage.blob.Metrics
    +        :param cors:
    +            You can include up to five CorsRule elements in the
    +            list. If an empty list is specified, all CORS rules will be deleted,
    +            and CORS will be disabled for the service.
    +        :type cors: list[~azure.storage.blob.CorsRule]
    +        :param str target_version:
    +            Indicates the default version to use for requests if an incoming
    +            request's version is not specified.
    +        :param delete_retention_policy:
    +            The delete retention policy specifies whether to retain deleted blobs.
    +            It also specifies the number of days and versions of blob to keep.
    +        :type delete_retention_policy: ~azure.storage.blob.RetentionPolicy
    +        :param static_website:
    +            Specifies whether the static website feature is enabled,
    +            and if yes, indicates the index document and 404 error document to use.
    +        :type static_website: ~azure.storage.blob.StaticWebsite
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START set_blob_service_properties]
    +                :end-before: [END set_blob_service_properties]
    +                :language: python
    +                :dedent: 12
    +                :caption: Setting service properties for the blob service.
    +        """
    +        props = StorageServiceProperties(
    +            logging=analytics_logging,
    +            hour_metrics=hour_metrics,
    +            minute_metrics=minute_metrics,
    +            cors=cors,
    +            default_service_version=target_version,
    +            delete_retention_policy=delete_retention_policy,
    +            static_website=static_website
    +        )
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            await self._client.service.set_properties(props, timeout=timeout, **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def list_containers(
    +            self, name_starts_with=None,  # type: Optional[str]
    +            include_metadata=False,  # type: Optional[bool]
    +            **kwargs
    +        ):
    +        # type: (...) -> AsyncItemPaged[ContainerProperties]
    +        """Returns a generator to list the containers under the specified account.
    +
    +        The generator will lazily follow the continuation tokens returned by
    +        the service and stop when all containers have been returned.
    +
    +        :param str name_starts_with:
    +            Filters the results to return only containers whose names
    +            begin with the specified prefix.
    +        :param bool include_metadata:
    +            Specifies that container metadata to be returned in the response.
    +            The default value is `False`.
    +        :keyword int results_per_page:
    +            The maximum number of container names to retrieve per API
    +            call. If the request does not specify the server will return up to 5,000 items.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An iterable (auto-paging) of ContainerProperties.
    +        :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.storage.blob.ContainerProperties]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START bsc_list_containers]
    +                :end-before: [END bsc_list_containers]
    +                :language: python
    +                :dedent: 16
    +                :caption: Listing the containers in the blob service.
    +        """
    +        include = 'metadata' if include_metadata else None
    +        timeout = kwargs.pop('timeout', None)
    +        results_per_page = kwargs.pop('results_per_page', None)
    +        command = functools.partial(
    +            self._client.service.list_containers_segment,
    +            prefix=name_starts_with,
    +            include=include,
    +            timeout=timeout,
    +            **kwargs)
    +        return AsyncItemPaged(
    +            command,
    +            prefix=name_starts_with,
    +            results_per_page=results_per_page,
    +            page_iterator_class=ContainerPropertiesPaged
    +        )
    +
    +    @distributed_trace_async
    +    async def create_container(
    +            self, name,  # type: str
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            public_access=None,  # type: Optional[Union[PublicAccess, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> ContainerClient
    +        """Creates a new container under the specified account.
    +
    +        If the container with the same name already exists, a ResourceExistsError will
    +        be raised. This method returns a client with which to interact with the newly
    +        created container.
    +
    +        :param str name: The name of the container to create.
    +        :param metadata:
    +            A dict with name-value pairs to associate with the
    +            container as metadata. Example: `{'Category':'test'}`
    +        :type metadata: dict(str, str)
    +        :param public_access:
    +            Possible values include: 'container', 'blob'.
    +        :type public_access: str or ~azure.storage.blob.PublicAccess
    +        :keyword container_encryption_scope:
    +            Specifies the default encryption scope to set on the container and use for
    +            all future writes.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :paramtype container_encryption_scope: dict or ~azure.storage.blob.ContainerEncryptionScope
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: ~azure.storage.blob.aio.ContainerClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START bsc_create_container]
    +                :end-before: [END bsc_create_container]
    +                :language: python
    +                :dedent: 16
    +                :caption: Creating a container in the blob service.
    +        """
    +        container = self.get_container_client(name)
    +        timeout = kwargs.pop('timeout', None)
    +        kwargs.setdefault('merge_span', True)
    +        await container.create_container(
    +            metadata=metadata, public_access=public_access, timeout=timeout, **kwargs)
    +        return container
    +
    +    @distributed_trace_async
    +    async def delete_container(
    +            self, container,  # type: Union[ContainerProperties, str]
    +            lease=None,  # type: Optional[Union[BlobLeaseClient, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Marks the specified container for deletion.
    +
    +        The container and any blobs contained within it are later deleted during garbage collection.
    +        If the container is not found, a ResourceNotFoundError will be raised.
    +
    +        :param container:
    +            The container to delete. This can either be the name of the container,
    +            or an instance of ContainerProperties.
    +        :type container: str or ~azure.storage.blob.ContainerProperties
    +        :param lease:
    +            If specified, delete_container only succeeds if the
    +            container's lease is active and matches this ID.
    +            Required if the container has an active lease.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START bsc_delete_container]
    +                :end-before: [END bsc_delete_container]
    +                :language: python
    +                :dedent: 16
    +                :caption: Deleting a container in the blob service.
    +        """
    +        container = self.get_container_client(container) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        await container.delete_container( # type: ignore
    +            lease=lease,
    +            timeout=timeout,
    +            **kwargs)
    +
    +    def get_container_client(self, container):
    +        # type: (Union[ContainerProperties, str]) -> ContainerClient
    +        """Get a client to interact with the specified container.
    +
    +        The container need not already exist.
    +
    +        :param container:
    +            The container. This can either be the name of the container,
    +            or an instance of ContainerProperties.
    +        :type container: str or ~azure.storage.blob.ContainerProperties
    +        :returns: A ContainerClient.
    +        :rtype: ~azure.storage.blob.aio.ContainerClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START bsc_get_container_client]
    +                :end-before: [END bsc_get_container_client]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting the container client to interact with a specific container.
    +        """
    +        try:
    +            container_name = container.name
    +        except AttributeError:
    +            container_name = container
    +        _pipeline = AsyncPipeline(
    +            transport=AsyncTransportWrapper(self._pipeline._transport), # pylint: disable = protected-access
    +            policies=self._pipeline._impl_policies # pylint: disable = protected-access
    +        )
    +        return ContainerClient(
    +            self.url, container_name=container_name,
    +            credential=self.credential, api_version=self.api_version, _configuration=self._config,
    +            _pipeline=_pipeline, _location_mode=self._location_mode, _hosts=self._hosts,
    +            require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key,
    +            key_resolver_function=self.key_resolver_function, loop=self._loop)
    +
    +    def get_blob_client(
    +            self, container,  # type: Union[ContainerProperties, str]
    +            blob,  # type: Union[BlobProperties, str]
    +            snapshot=None  # type: Optional[Union[Dict[str, Any], str]]
    +        ):
    +        # type: (...) -> BlobClient
    +        """Get a client to interact with the specified blob.
    +
    +        The blob need not already exist.
    +
    +        :param container:
    +            The container that the blob is in. This can either be the name of the container,
    +            or an instance of ContainerProperties.
    +        :type container: str or ~azure.storage.blob.ContainerProperties
    +        :param blob:
    +            The blob with which to interact. This can either be the name of the blob,
    +            or an instance of BlobProperties.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param snapshot:
    +            The optional blob snapshot on which to operate. This can either be the ID of the snapshot,
    +            or a dictionary output returned by
    +            :func:`~azure.storage.blob.aio.BlobClient.create_snapshot()`.
    +        :type snapshot: str or dict(str, Any)
    +        :returns: A BlobClient.
    +        :rtype: ~azure.storage.blob.aio.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START bsc_get_blob_client]
    +                :end-before: [END bsc_get_blob_client]
    +                :language: python
    +                :dedent: 16
    +                :caption: Getting the blob client to interact with a specific blob.
    +        """
    +        try:
    +            container_name = container.name
    +        except AttributeError:
    +            container_name = container
    +
    +        try:
    +            blob_name = blob.name
    +        except AttributeError:
    +            blob_name = blob
    +        _pipeline = AsyncPipeline(
    +            transport=AsyncTransportWrapper(self._pipeline._transport), # pylint: disable = protected-access
    +            policies=self._pipeline._impl_policies # pylint: disable = protected-access
    +        )
    +        return BlobClient( # type: ignore
    +            self.url, container_name=container_name, blob_name=blob_name, snapshot=snapshot,
    +            credential=self.credential, api_version=self.api_version, _configuration=self._config,
    +            _pipeline=_pipeline, _location_mode=self._location_mode, _hosts=self._hosts,
    +            require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key,
    +            key_resolver_function=self.key_resolver_function, loop=self._loop)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_container_client_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_container_client_async.py
    new file mode 100644
    index 000000000000..a0133468b2a0
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_container_client_async.py
    @@ -0,0 +1,1108 @@
    +# pylint: disable=too-many-lines
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import functools
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, AnyStr, Dict, List, Tuple, IO, AsyncIterator,
    +    TYPE_CHECKING
    +)
    +
    +from azure.core.tracing.decorator import distributed_trace
    +from azure.core.tracing.decorator_async import distributed_trace_async
    +from azure.core.async_paging import AsyncItemPaged
    +from azure.core.pipeline import AsyncPipeline
    +from azure.core.pipeline.transport import HttpRequest, AsyncHttpResponse
    +
    +from .._shared.base_client_async import AsyncStorageAccountHostsMixin, AsyncTransportWrapper
    +from .._shared.policies_async import ExponentialRetry
    +from .._shared.request_handlers import add_metadata_headers, serialize_iso
    +from .._shared.response_handlers import (
    +    process_storage_error,
    +    return_response_headers,
    +    return_headers_and_deserialized)
    +from .._generated import VERSION
    +from .._generated.aio import AzureBlobStorage
    +from .._generated.models import (
    +    StorageErrorException,
    +    SignedIdentifier)
    +from .._deserialize import deserialize_container_properties
    +from .._serialize import get_modify_conditions, get_container_cpk_scope_info, get_api_version
    +from .._container_client import ContainerClient as ContainerClientBase, _get_blob_name
    +from .._lease import get_access_conditions
    +from .._models import ContainerProperties, BlobProperties, BlobType  # pylint: disable=unused-import
    +from ._models import BlobPropertiesPaged, BlobPrefix
    +from ._lease_async import BlobLeaseClient
    +from ._blob_client_async import BlobClient
    +
    +if TYPE_CHECKING:
    +    from azure.core.pipeline.transport import HttpTransport
    +    from azure.core.pipeline.policies import HTTPPolicy
    +    from .._models import ContainerSasPermissions, PublicAccess
    +    from ._download_async import StorageStreamDownloader
    +    from datetime import datetime
    +    from .._models import ( # pylint: disable=unused-import
    +        AccessPolicy,
    +        ContentSettings,
    +        StandardBlobTier,
    +        PremiumPageBlobTier)
    +
    +
    +class ContainerClient(AsyncStorageAccountHostsMixin, ContainerClientBase):
    +    """A client to interact with a specific container, although that container
    +    may not yet exist.
    +
    +    For operations relating to a specific blob within this container, a blob client can be
    +    retrieved using the :func:`~get_blob_client` function.
    +
    +    :param str account_url:
    +        The URI to the storage account. In order to create a client given the full URI to the container,
    +        use the :func:`from_container_url` classmethod.
    +    :param container_name:
    +        The name of the container for the blob.
    +    :type container_name: str
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +        The Storage API version to use for requests. Default value is '2019-07-07'.
    +        Setting to an older version may result in reduced feature compatibility.
    +
    +        .. versionadded:: 12.2.0
    +
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +    :keyword int max_block_size: The maximum chunk size for uploading a block blob in chunks.
    +        Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_put_size: If the blob size is less than max_single_put_size, then the blob will be
    +        uploaded with only one http PUT request. If the blob size is larger than max_single_put_size,
    +        the blob will be uploaded in chunks. Defaults to 64*1024*1024, or 64MB.
    +    :keyword int min_large_block_upload_threshold: The minimum chunk size required to use the memory efficient
    +        algorithm when uploading a block blob. Defaults to 4*1024*1024+1.
    +    :keyword bool use_byte_buffer: Use a byte buffer for block blob uploads. Defaults to False.
    +    :keyword int max_page_size: The maximum chunk size for uploading a page blob. Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_get_size: The maximum size for a blob to be downloaded in a single call,
    +        the exceeded part will be downloaded in chunks (could be parallel). Defaults to 32*1024*1024, or 32MB.
    +    :keyword int max_chunk_get_size: The maximum chunk size used for downloading a blob. Defaults to 4*1024*1024,
    +        or 4MB.
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_containers_async.py
    +            :start-after: [START create_container_client_from_service]
    +            :end-before: [END create_container_client_from_service]
    +            :language: python
    +            :dedent: 8
    +            :caption: Get a ContainerClient from an existing BlobServiceClient.
    +
    +        .. literalinclude:: ../samples/blob_samples_containers_async.py
    +            :start-after: [START create_container_client_sasurl]
    +            :end-before: [END create_container_client_sasurl]
    +            :language: python
    +            :dedent: 12
    +            :caption: Creating the container client directly.
    +    """
    +    def __init__(
    +            self, account_url,  # type: str
    +            container_name,  # type: str
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):
    +        # type: (...) -> None
    +        kwargs['retry_policy'] = kwargs.get('retry_policy') or ExponentialRetry(**kwargs)
    +        super(ContainerClient, self).__init__(
    +            account_url,
    +            container_name=container_name,
    +            credential=credential,
    +            **kwargs)
    +        self._client = AzureBlobStorage(url=self.url, pipeline=self._pipeline)
    +        self._client._config.version = get_api_version(kwargs, VERSION)  # pylint: disable=protected-access
    +        self._loop = kwargs.get('loop', None)
    +
    +    @distributed_trace_async
    +    async def create_container(self, metadata=None, public_access=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], Optional[Union[PublicAccess, str]], **Any) -> None
    +        """
    +        Creates a new container under the specified account. If the container
    +        with the same name already exists, the operation fails.
    +
    +        :param metadata:
    +            A dict with name_value pairs to associate with the
    +            container as metadata. Example:{'Category':'test'}
    +        :type metadata: dict[str, str]
    +        :param ~azure.storage.blob.PublicAccess public_access:
    +            Possible values include: 'container', 'blob'.
    +        :keyword container_encryption_scope:
    +            Specifies the default encryption scope to set on the container and use for
    +            all future writes.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :paramtype container_encryption_scope: dict or ~azure.storage.blob.ContainerEncryptionScope
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START create_container]
    +                :end-before: [END create_container]
    +                :language: python
    +                :dedent: 16
    +                :caption: Creating a container to store blobs.
    +        """
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata)) # type: ignore
    +        timeout = kwargs.pop('timeout', None)
    +        container_cpk_scope_info = get_container_cpk_scope_info(kwargs)
    +        try:
    +            return await self._client.container.create( # type: ignore
    +                timeout=timeout,
    +                access=public_access,
    +                container_cpk_scope_info=container_cpk_scope_info,
    +                cls=return_response_headers,
    +                headers=headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def delete_container(
    +            self, **kwargs):
    +        # type: (Any) -> None
    +        """
    +        Marks the specified container for deletion. The container and any blobs
    +        contained within it are later deleted during garbage collection.
    +
    +        :keyword lease:
    +            If specified, delete_container only succeeds if the
    +            container's lease is active and matches this ID.
    +            Required if the container has an active lease.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START delete_container]
    +                :end-before: [END delete_container]
    +                :language: python
    +                :dedent: 16
    +                :caption: Delete a container.
    +        """
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        mod_conditions = get_modify_conditions(kwargs)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            await self._client.container.delete(
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def acquire_lease(
    +            self, lease_duration=-1,  # type: int
    +            lease_id=None,  # type: Optional[str]
    +            **kwargs):
    +        # type: (...) -> BlobLeaseClient
    +        """
    +        Requests a new lease. If the container does not have an active lease,
    +        the Blob service creates a lease on the container and returns a new
    +        lease ID.
    +
    +        :param int lease_duration:
    +            Specifies the duration of the lease, in seconds, or negative one
    +            (-1) for a lease that never expires. A non-infinite lease can be
    +            between 15 and 60 seconds. A lease duration cannot be changed
    +            using renew or change. Default is -1 (infinite lease).
    +        :param str lease_id:
    +            Proposed lease ID, in a GUID string format. The Blob service returns
    +            400 (Invalid request) if the proposed lease ID is not in the correct format.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: A BlobLeaseClient object, that can be run in a context manager.
    +        :rtype: ~azure.storage.blob.aio.BlobLeaseClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START acquire_lease_on_container]
    +                :end-before: [END acquire_lease_on_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: Acquiring a lease on the container.
    +        """
    +        lease = BlobLeaseClient(self, lease_id=lease_id) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        await lease.acquire(lease_duration=lease_duration, timeout=timeout, **kwargs)
    +        return lease
    +
    +    @distributed_trace_async
    +    async def get_account_information(self, **kwargs):
    +        # type: (**Any) -> Dict[str, str]
    +        """Gets information related to the storage account.
    +
    +        The information can also be retrieved if the user has a SAS to a container or blob.
    +        The keys in the returned dictionary include 'sku_name' and 'account_kind'.
    +
    +        :returns: A dict of account information (SKU and account type).
    +        :rtype: dict(str, str)
    +        """
    +        try:
    +            return await self._client.container.get_account_info(cls=return_response_headers, **kwargs) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_container_properties(self, **kwargs):
    +        # type: (**Any) -> ContainerProperties
    +        """Returns all user-defined metadata and system properties for the specified
    +        container. The data returned does not include the container's list of blobs.
    +
    +        :keyword lease:
    +            If specified, get_container_properties only succeeds if the
    +            container's lease is active and matches this ID.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: Properties for the specified container within a container object.
    +        :rtype: ~azure.storage.blob.ContainerProperties
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START get_container_properties]
    +                :end-before: [END get_container_properties]
    +                :language: python
    +                :dedent: 16
    +                :caption: Getting properties on the container.
    +        """
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            response = await self._client.container.get_properties(
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                cls=deserialize_container_properties,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        response.name = self.container_name
    +        return response # type: ignore
    +
    +    @distributed_trace_async
    +    async def set_container_metadata( # type: ignore
    +            self, metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Sets one or more user-defined name-value pairs for the specified
    +        container. Each call to this operation replaces all existing metadata
    +        attached to the container. To remove all metadata from the container,
    +        call this operation with no metadata dict.
    +
    +        :param metadata:
    +            A dict containing name-value pairs to associate with the container as
    +            metadata. Example: {'category':'test'}
    +        :type metadata: dict[str, str]
    +        :keyword lease:
    +            If specified, set_container_metadata only succeeds if the
    +            container's lease is active and matches this ID.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Container-updated property dict (Etag and last modified).
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START set_container_metadata]
    +                :end-before: [END set_container_metadata]
    +                :language: python
    +                :dedent: 16
    +                :caption: Setting metadata on the container.
    +        """
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        mod_conditions = get_modify_conditions(kwargs)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            return await self._client.container.set_metadata( # type: ignore
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                headers=headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_container_access_policy(self, **kwargs):
    +        # type: (Any) -> Dict[str, Any]
    +        """Gets the permissions for the specified container.
    +        The permissions indicate whether container data may be accessed publicly.
    +
    +        :keyword lease:
    +            If specified, get_container_access_policy only succeeds if the
    +            container's lease is active and matches this ID.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Access policy information in a dict.
    +        :rtype: dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START get_container_access_policy]
    +                :end-before: [END get_container_access_policy]
    +                :language: python
    +                :dedent: 16
    +                :caption: Getting the access policy on the container.
    +        """
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            response, identifiers = await self._client.container.get_access_policy(
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                cls=return_headers_and_deserialized,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return {
    +            'public_access': response.get('blob_public_access'),
    +            'signed_identifiers': identifiers or []
    +        }
    +
    +    @distributed_trace_async
    +    async def set_container_access_policy(
    +            self, signed_identifiers,  # type: Dict[str, AccessPolicy]
    +            public_access=None,  # type: Optional[Union[str, PublicAccess]]
    +            **kwargs  # type: Any
    +        ):  # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Sets the permissions for the specified container or stored access
    +        policies that may be used with Shared Access Signatures. The permissions
    +        indicate whether blobs in a container may be accessed publicly.
    +
    +        :param signed_identifiers:
    +            A dictionary of access policies to associate with the container. The
    +            dictionary may contain up to 5 elements. An empty dictionary
    +            will clear the access policies set on the service.
    +        :type signed_identifiers: dict[str, ~azure.storage.blob.AccessPolicy]
    +        :param ~azure.storage.blob.PublicAccess public_access:
    +            Possible values include: 'container', 'blob'.
    +        :keyword lease:
    +            Required if the container has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A datetime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified date/time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A datetime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Container-updated property dict (Etag and last modified).
    +        :rtype: dict[str, str or ~datetime.datetime]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START set_container_access_policy]
    +                :end-before: [END set_container_access_policy]
    +                :language: python
    +                :dedent: 16
    +                :caption: Setting access policy on the container.
    +        """
    +        timeout = kwargs.pop('timeout', None)
    +        lease = kwargs.pop('lease', None)
    +        if len(signed_identifiers) > 5:
    +            raise ValueError(
    +                'Too many access policies provided. The server does not support setting '
    +                'more than 5 access policies on a single resource.')
    +        identifiers = []
    +        for key, value in signed_identifiers.items():
    +            if value:
    +                value.start = serialize_iso(value.start)
    +                value.expiry = serialize_iso(value.expiry)
    +            identifiers.append(SignedIdentifier(id=key, access_policy=value)) # type: ignore
    +        signed_identifiers = identifiers # type: ignore
    +
    +        mod_conditions = get_modify_conditions(kwargs)
    +        access_conditions = get_access_conditions(lease)
    +        try:
    +            return await self._client.container.set_access_policy(
    +                container_acl=signed_identifiers or None,
    +                timeout=timeout,
    +                access=public_access,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def list_blobs(self, name_starts_with=None, include=None, **kwargs):
    +        # type: (Optional[str], Optional[Any], **Any) -> AsyncItemPaged[BlobProperties]
    +        """Returns a generator to list the blobs under the specified container.
    +        The generator will lazily follow the continuation tokens returned by
    +        the service.
    +
    +        :param str name_starts_with:
    +            Filters the results to return only blobs whose names
    +            begin with the specified prefix.
    +        :param list[str] include:
    +            Specifies one or more additional datasets to include in the response.
    +            Options include: 'snapshots', 'metadata', 'uncommittedblobs', 'copy', 'deleted'.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An iterable (auto-paging) response of BlobProperties.
    +        :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.storage.blob.BlobProperties]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START list_blobs_in_container]
    +                :end-before: [END list_blobs_in_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: List the blobs in the container.
    +        """
    +        if include and not isinstance(include, list):
    +            include = [include]
    +
    +        results_per_page = kwargs.pop('results_per_page', None)
    +        timeout = kwargs.pop('timeout', None)
    +        command = functools.partial(
    +            self._client.container.list_blob_flat_segment,
    +            include=include,
    +            timeout=timeout,
    +            **kwargs)
    +        return AsyncItemPaged(
    +            command,
    +            prefix=name_starts_with,
    +            results_per_page=results_per_page,
    +            page_iterator_class=BlobPropertiesPaged
    +        )
    +
    +    @distributed_trace
    +    def walk_blobs(
    +            self, name_starts_with=None, # type: Optional[str]
    +            include=None, # type: Optional[Any]
    +            delimiter="/", # type: str
    +            **kwargs # type: Optional[Any]
    +        ):
    +        # type: (...) -> AsyncItemPaged[BlobProperties]
    +        """Returns a generator to list the blobs under the specified container.
    +        The generator will lazily follow the continuation tokens returned by
    +        the service. This operation will list blobs in accordance with a hierarchy,
    +        as delimited by the specified delimiter character.
    +
    +        :param str name_starts_with:
    +            Filters the results to return only blobs whose names
    +            begin with the specified prefix.
    +        :param list[str] include:
    +            Specifies one or more additional datasets to include in the response.
    +            Options include: 'snapshots', 'metadata', 'uncommittedblobs', 'copy', 'deleted'.
    +        :param str delimiter:
    +            When the request includes this parameter, the operation returns a BlobPrefix
    +            element in the response body that acts as a placeholder for all blobs whose
    +            names begin with the same substring up to the appearance of the delimiter
    +            character. The delimiter may be a single character or a string.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An iterable (auto-paging) response of BlobProperties.
    +        :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.storage.blob.BlobProperties]
    +        """
    +        if include and not isinstance(include, list):
    +            include = [include]
    +
    +        results_per_page = kwargs.pop('results_per_page', None)
    +        timeout = kwargs.pop('timeout', None)
    +        command = functools.partial(
    +            self._client.container.list_blob_hierarchy_segment,
    +            delimiter=delimiter,
    +            include=include,
    +            timeout=timeout,
    +            **kwargs)
    +        return BlobPrefix(
    +            command,
    +            prefix=name_starts_with,
    +            results_per_page=results_per_page,
    +            delimiter=delimiter)
    +
    +    @distributed_trace_async
    +    async def upload_blob(
    +            self, name,  # type: Union[str, BlobProperties]
    +            data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            blob_type=BlobType.BlockBlob,  # type: Union[str, BlobType]
    +            length=None,  # type: Optional[int]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> BlobClient
    +        """Creates a new blob from a data source with automatic chunking.
    +
    +        :param name: The blob with which to interact. If specified, this value will override
    +            a blob value specified in the blob URL.
    +        :type name: str or ~azure.storage.blob.BlobProperties
    +        :param data: The blob data to upload.
    +        :param ~azure.storage.blob.BlobType blob_type: The type of the blob. This can be
    +            either BlockBlob, PageBlob or AppendBlob. The default value is BlockBlob.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword bool overwrite: Whether the blob to be uploaded should overwrite the current data.
    +            If True, upload_blob will overwrite the existing data. If set to False, the
    +            operation will fail with ResourceExistsError. The exception to the above is with Append
    +            blob types: if set to False and the data already exists, an error will not be raised
    +            and the data will be appended to the existing blob. If set overwrite=True, then the existing
    +            append blob will be deleted, and a new one created. Defaults to False.
    +        :keyword ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used, because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the container has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int max_concurrency:
    +            Maximum number of parallel connections to use when the blob size exceeds
    +            64MB.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :returns: A BlobClient to interact with the newly uploaded blob.
    +        :rtype: ~azure.storage.blob.aio.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START upload_blob_to_container]
    +                :end-before: [END upload_blob_to_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: Upload blob to the container.
    +        """
    +        blob = self.get_blob_client(name)
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        encoding = kwargs.pop('encoding', 'UTF-8')
    +        await blob.upload_blob(
    +            data,
    +            blob_type=blob_type,
    +            length=length,
    +            metadata=metadata,
    +            timeout=timeout,
    +            encoding=encoding,
    +            **kwargs
    +        )
    +        return blob
    +
    +    @distributed_trace_async
    +    async def delete_blob(
    +            self, blob,  # type: Union[str, BlobProperties]
    +            delete_snapshots=None,  # type: Optional[str]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Marks the specified blob or snapshot for deletion.
    +
    +        The blob is later deleted during garbage collection.
    +        Note that in order to delete a blob, you must delete all of its
    +        snapshots. You can delete both at the same time with the delete_blob
    +        operation.
    +
    +        If a delete retention policy is enabled for the service, then this operation soft deletes the blob or snapshot
    +        and retains the blob or snapshot for specified number of days.
    +        After specified number of days, blob's data is removed from the service during garbage collection.
    +        Soft deleted blob or snapshot is accessible through :func:`list_blobs()` specifying `include=["deleted"]`
    +        option. Soft-deleted blob or snapshot can be restored using :func:`~BlobClient.undelete()`
    +
    +        :param blob: The blob with which to interact. If specified, this value will override
    +            a blob value specified in the blob URL.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param str delete_snapshots:
    +            Required if the blob has associated snapshots. Values include:
    +             - "only": Deletes only the blobs snapshots.
    +             - "include": Deletes the blob along with all snapshots.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a Lease object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        blob = self.get_blob_client(blob) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        await blob.delete_blob( # type: ignore
    +            delete_snapshots=delete_snapshots,
    +            timeout=timeout,
    +            **kwargs)
    +
    +    @distributed_trace_async
    +    async def download_blob(self, blob, offset=None, length=None, **kwargs):
    +        # type: (Union[str, BlobProperties], Optional[int], Optional[int], Any) -> StorageStreamDownloader
    +        """Downloads a blob to the StorageStreamDownloader. The readall() method must
    +        be used to read all the content or readinto() must be used to download the blob into
    +        a stream.
    +
    +        :param blob: The blob with which to interact. If specified, this value will override
    +            a blob value specified in the blob URL.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param int offset:
    +            Start of byte range to use for downloading a section of the blob.
    +            Must be set if length is provided.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, download_blob only
    +            succeeds if the blob's lease is active and matches this ID. Value can be a
    +            BlobLeaseClient object or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :keyword str encoding:
    +            Encoding to decode the downloaded bytes. Default is None, i.e. no decoding.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :returns: A streaming object. (StorageStreamDownloader)
    +        :rtype: ~azure.storage.blob.aio.StorageStreamDownloader
    +        """
    +        blob_client = self.get_blob_client(blob) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        return await blob_client.download_blob(
    +            offset=offset,
    +            length=length,
    +            **kwargs)
    +
    +    @distributed_trace_async
    +    async def delete_blobs(  # pylint: disable=arguments-differ
    +            self, *blobs: Union[str, BlobProperties],
    +            delete_snapshots: Optional[str] = None,
    +            lease: Optional[Union[str, BlobLeaseClient]] = None,
    +            **kwargs
    +        ) -> AsyncIterator[AsyncHttpResponse]:
    +        """Marks the specified blobs or snapshots for deletion.
    +
    +        The blobs are later deleted during garbage collection.
    +        Note that in order to delete blobs, you must delete all of their
    +        snapshots. You can delete both at the same time with the delete_blobs operation.
    +
    +        If a delete retention policy is enabled for the service, then this operation soft deletes the blobs or snapshots
    +        and retains the blobs or snapshots for specified number of days.
    +        After specified number of days, blobs' data is removed from the service during garbage collection.
    +        Soft deleted blobs or snapshots are accessible through :func:`list_blobs()` specifying `include=["deleted"]`
    +        Soft-deleted blobs or snapshots can be restored using :func:`~BlobClient.undelete()`
    +
    +        :param blobs: The blob names with which to interact. This can be a single blob, or multiple values can
    +            be supplied, where each value is either the name of the blob (str) or BlobProperties.
    +        :type blobs: str or ~azure.storage.blob.BlobProperties
    +        :param str delete_snapshots:
    +            Required if a blob has associated snapshots. Values include:
    +             - "only": Deletes only the blobs snapshots.
    +             - "include": Deletes the blob along with all snapshots.
    +        :param lease:
    +            Required if a blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :type lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword bool raise_on_any_failure:
    +            This is a boolean param which defaults to True. When this is set, an exception
    +            is raised even if there is a single operation failure. For optimal performance,
    +            this should be set to False
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: An async iterator of responses, one for each blob in order
    +        :rtype: asynciterator[~azure.core.pipeline.transport.AsyncHttpResponse]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START delete_multiple_blobs]
    +                :end-before: [END delete_multiple_blobs]
    +                :language: python
    +                :dedent: 12
    +                :caption: Deleting multiple blobs.
    +        """
    +        raise_on_any_failure = kwargs.pop('raise_on_any_failure', True)
    +        timeout = kwargs.pop('timeout', None)
    +        options = BlobClient._generic_delete_blob_options(  # pylint: disable=protected-access
    +            delete_snapshots=delete_snapshots,
    +            lease=lease,
    +            timeout=timeout,
    +            **kwargs
    +        )
    +        options.update({'raise_on_any_failure': raise_on_any_failure})
    +        query_parameters, header_parameters = self._generate_delete_blobs_options(**options)
    +        # To pass kwargs to "_batch_send", we need to remove anything that was
    +        # in the Autorest signature for Autorest, otherwise transport will be upset
    +        for possible_param in ['timeout', 'delete_snapshots', 'lease_access_conditions', 'modified_access_conditions']:
    +            options.pop(possible_param, None)
    +
    +        reqs = []
    +        for blob in blobs:
    +            blob_name = _get_blob_name(blob)
    +            req = HttpRequest(
    +                "DELETE",
    +                "/{}/{}".format(self.container_name, blob_name),
    +                headers=header_parameters
    +            )
    +            req.format_parameters(query_parameters)
    +            reqs.append(req)
    +
    +        return await self._batch_send(*reqs, **options)
    +
    +    @distributed_trace
    +    async def set_standard_blob_tier_blobs(
    +        self,
    +        standard_blob_tier: Union[str, 'StandardBlobTier'],
    +        *blobs: Union[str, BlobProperties],
    +        **kwargs
    +    ) -> AsyncIterator[AsyncHttpResponse]:
    +        """This operation sets the tier on block blobs.
    +
    +        A block blob's tier determines Hot/Cool/Archive storage type.
    +        This operation does not update the blob's ETag.
    +
    +        :param standard_blob_tier:
    +            Indicates the tier to be set on the blob. Options include 'Hot', 'Cool',
    +            'Archive'. The hot tier is optimized for storing data that is accessed
    +            frequently. The cool storage tier is optimized for storing data that
    +            is infrequently accessed and stored for at least a month. The archive
    +            tier is optimized for storing data that is rarely accessed and stored
    +            for at least six months with flexible latency requirements.
    +        :type standard_blob_tier: str or ~azure.storage.blob.StandardBlobTier
    +        :param blobs: The blobs with which to interact. This can be a single blob, or multiple values can
    +            be supplied, where each value is either the name of the blob (str) or BlobProperties.
    +        :type blobs: str or ~azure.storage.blob.BlobProperties
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword bool raise_on_any_failure:
    +            This is a boolean param which defaults to True. When this is set, an exception
    +            is raised even if there is a single operation failure. For optimal performance,
    +            this should be set to False.
    +        :return: An async iterator of responses, one for each blob in order
    +        :rtype: asynciterator[~azure.core.pipeline.transport.AsyncHttpResponse]
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if standard_blob_tier is None:
    +            raise ValueError("A StandardBlobTier must be specified")
    +
    +        query_parameters, header_parameters = self._generate_set_tier_options(
    +            tier=standard_blob_tier,
    +            lease_access_conditions=access_conditions,
    +            **kwargs
    +        )
    +        # To pass kwargs to "_batch_send", we need to remove anything that was
    +        # in the Autorest signature for Autorest, otherwise transport will be upset
    +        for possible_param in ['timeout', 'lease']:
    +            kwargs.pop(possible_param, None)
    +
    +        reqs = []
    +        for blob in blobs:
    +            blob_name = _get_blob_name(blob)
    +            req = HttpRequest(
    +                "PUT",
    +                "/{}/{}".format(self.container_name, blob_name),
    +                headers=header_parameters
    +            )
    +            req.format_parameters(query_parameters)
    +            reqs.append(req)
    +
    +        return await self._batch_send(*reqs, **kwargs)
    +
    +    @distributed_trace
    +    async def set_premium_page_blob_tier_blobs(
    +        self,
    +        premium_page_blob_tier: Union[str, 'PremiumPageBlobTier'],
    +        *blobs: Union[str, BlobProperties],
    +        **kwargs
    +    ) -> AsyncIterator[AsyncHttpResponse]:
    +        """Sets the page blob tiers on the blobs. This API is only supported for page blobs on premium accounts.
    +
    +        :param premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :type premium_page_blob_tier: ~azure.storage.blob.PremiumPageBlobTier
    +        :param blobs: The blobs with which to interact. This can be a single blob, or multiple values can
    +            be supplied, where each value is either the name of the blob (str) or BlobProperties.
    +        :type blobs: str or ~azure.storage.blob.BlobProperties
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword bool raise_on_any_failure:
    +            This is a boolean param which defaults to True. When this is set, an exception
    +            is raised even if there is a single operation failure. For optimal performance,
    +            this should be set to False.
    +        :return: An async iterator of responses, one for each blob in order
    +        :rtype: asynciterator[~azure.core.pipeline.transport.AsyncHttpResponse]
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if premium_page_blob_tier is None:
    +            raise ValueError("A PremiumPageBlobTier must be specified")
    +
    +        query_parameters, header_parameters = self._generate_set_tier_options(
    +            tier=premium_page_blob_tier,
    +            lease_access_conditions=access_conditions,
    +            **kwargs
    +        )
    +        # To pass kwargs to "_batch_send", we need to remove anything that was
    +        # in the Autorest signature for Autorest, otherwise transport will be upset
    +        for possible_param in ['timeout', 'lease']:
    +            kwargs.pop(possible_param, None)
    +
    +        reqs = []
    +        for blob in blobs:
    +            blob_name = _get_blob_name(blob)
    +            req = HttpRequest(
    +                "PUT",
    +                "/{}/{}".format(self.container_name, blob_name),
    +                headers=header_parameters
    +            )
    +            req.format_parameters(query_parameters)
    +            reqs.append(req)
    +
    +        return await self._batch_send(*reqs, **kwargs)
    +
    +    def get_blob_client(
    +            self, blob,  # type: Union[BlobProperties, str]
    +            snapshot=None  # type: str
    +        ):
    +        # type: (...) -> BlobClient
    +        """Get a client to interact with the specified blob.
    +
    +        The blob need not already exist.
    +
    +        :param blob:
    +            The blob with which to interact.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param str snapshot:
    +            The optional blob snapshot on which to operate. This can be the snapshot ID string
    +            or the response returned from :func:`~BlobClient.create_snapshot()`.
    +        :returns: A BlobClient.
    +        :rtype: ~azure.storage.blob.aio.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START get_blob_client]
    +                :end-before: [END get_blob_client]
    +                :language: python
    +                :dedent: 12
    +                :caption: Get the blob client.
    +        """
    +        blob_name = _get_blob_name(blob)
    +        _pipeline = AsyncPipeline(
    +            transport=AsyncTransportWrapper(self._pipeline._transport), # pylint: disable = protected-access
    +            policies=self._pipeline._impl_policies # pylint: disable = protected-access
    +        )
    +        return BlobClient(
    +            self.url, container_name=self.container_name, blob_name=blob_name, snapshot=snapshot,
    +            credential=self.credential, api_version=self.api_version, _configuration=self._config,
    +            _pipeline=_pipeline, _location_mode=self._location_mode, _hosts=self._hosts,
    +            require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key,
    +            key_resolver_function=self.key_resolver_function, loop=self._loop)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_download_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_download_async.py
    new file mode 100644
    index 000000000000..ea83862e4ae5
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_download_async.py
    @@ -0,0 +1,490 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import asyncio
    +import sys
    +from io import BytesIO
    +from itertools import islice
    +import warnings
    +
    +from azure.core.exceptions import HttpResponseError
    +from .._shared.encryption import decrypt_blob
    +from .._shared.request_handlers import validate_and_format_range_headers
    +from .._shared.response_handlers import process_storage_error, parse_length_from_content_range
    +from .._deserialize import get_page_ranges_result
    +from .._download import process_range_and_offset, _ChunkDownloader
    +
    +
    +async def process_content(data, start_offset, end_offset, encryption):
    +    if data is None:
    +        raise ValueError("Response cannot be None.")
    +    try:
    +        content = data.response.body()
    +    except Exception as error:
    +        raise HttpResponseError(message="Download stream interrupted.", response=data.response, error=error)
    +    if encryption.get('key') is not None or encryption.get('resolver') is not None:
    +        try:
    +            return decrypt_blob(
    +                encryption.get('required'),
    +                encryption.get('key'),
    +                encryption.get('resolver'),
    +                content,
    +                start_offset,
    +                end_offset,
    +                data.response.headers)
    +        except Exception as error:
    +            raise HttpResponseError(
    +                message="Decryption failed.",
    +                response=data.response,
    +                error=error)
    +    return content
    +
    +
    +class _AsyncChunkDownloader(_ChunkDownloader):
    +    def __init__(self, **kwargs):
    +        super(_AsyncChunkDownloader, self).__init__(**kwargs)
    +        self.stream_lock = asyncio.Lock() if kwargs.get('parallel') else None
    +        self.progress_lock = asyncio.Lock() if kwargs.get('parallel') else None
    +
    +    async def process_chunk(self, chunk_start):
    +        chunk_start, chunk_end = self._calculate_range(chunk_start)
    +        chunk_data = await self._download_chunk(chunk_start, chunk_end - 1)
    +        length = chunk_end - chunk_start
    +        if length > 0:
    +            await self._write_to_stream(chunk_data, chunk_start)
    +            await self._update_progress(length)
    +
    +    async def yield_chunk(self, chunk_start):
    +        chunk_start, chunk_end = self._calculate_range(chunk_start)
    +        return await self._download_chunk(chunk_start, chunk_end - 1)
    +
    +    async def _update_progress(self, length):
    +        if self.progress_lock:
    +            async with self.progress_lock:  # pylint: disable=not-async-context-manager
    +                self.progress_total += length
    +        else:
    +            self.progress_total += length
    +
    +    async def _write_to_stream(self, chunk_data, chunk_start):
    +        if self.stream_lock:
    +            async with self.stream_lock:  # pylint: disable=not-async-context-manager
    +                self.stream.seek(self.stream_start + (chunk_start - self.start_index))
    +                self.stream.write(chunk_data)
    +        else:
    +            self.stream.write(chunk_data)
    +
    +    async def _download_chunk(self, chunk_start, chunk_end):
    +        download_range, offset = process_range_and_offset(
    +            chunk_start, chunk_end, chunk_end, self.encryption_options)
    +
    +        # No need to download the empty chunk from server if there's no data in the chunk to be downloaded.
    +        # Do optimize and create empty chunk locally if condition is met.
    +        if self._do_optimize(download_range[0], download_range[1]):
    +            chunk_data = b"\x00" * self.chunk_size
    +        else:
    +            range_header, range_validation = validate_and_format_range_headers(
    +                download_range[0],
    +                download_range[1],
    +                check_content_md5=self.validate_content
    +            )
    +            try:
    +                _, response = await self.client.download(
    +                    range=range_header,
    +                    range_get_content_md5=range_validation,
    +                    validate_content=self.validate_content,
    +                    data_stream_total=self.total_size,
    +                    download_stream_current=self.progress_total,
    +                    **self.request_options
    +                )
    +            except HttpResponseError as error:
    +                process_storage_error(error)
    +
    +            chunk_data = await process_content(response, offset[0], offset[1], self.encryption_options)
    +
    +            # This makes sure that if_match is set so that we can validate
    +            # that subsequent downloads are to an unmodified blob
    +            if self.request_options.get('modified_access_conditions'):
    +                self.request_options['modified_access_conditions'].if_match = response.properties.etag
    +
    +        return chunk_data
    +
    +
    +class _AsyncChunkIterator(object):
    +    """Async iterator for chunks in blob download stream."""
    +
    +    def __init__(self, size, content, downloader):
    +        self.size = size
    +        self._current_content = content
    +        self._iter_downloader = downloader
    +        self._iter_chunks = None
    +        self._complete = (size == 0)
    +
    +    def __len__(self):
    +        return self.size
    +
    +    def __iter__(self):
    +        raise TypeError("Async stream must be iterated asynchronously.")
    +
    +    def __aiter__(self):
    +        return self
    +
    +    async def __anext__(self):
    +        """Iterate through responses."""
    +        if self._complete:
    +            raise StopAsyncIteration("Download complete")
    +        if not self._iter_downloader:
    +            # If no iterator was supplied, the download completed with
    +            # the initial GET, so we just return that data
    +            self._complete = True
    +            return self._current_content
    +
    +        if not self._iter_chunks:
    +            self._iter_chunks = self._iter_downloader.get_chunk_offsets()
    +        else:
    +            try:
    +                chunk = next(self._iter_chunks)
    +            except StopIteration:
    +                raise StopAsyncIteration("Download complete")
    +            self._current_content = await self._iter_downloader.yield_chunk(chunk)
    +
    +        return self._current_content
    +
    +
    +class StorageStreamDownloader(object):  # pylint: disable=too-many-instance-attributes
    +    """A streaming object to download from Azure Storage.
    +
    +    :ivar str name:
    +        The name of the blob being downloaded.
    +    :ivar str container:
    +        The name of the container where the blob is.
    +    :ivar ~azure.storage.blob.BlobProperties properties:
    +        The properties of the blob being downloaded. If only a range of the data is being
    +        downloaded, this will be reflected in the properties.
    +    :ivar int size:
    +        The size of the total data in the stream. This will be the byte range if speficied,
    +        otherwise the total size of the blob.
    +    """
    +
    +    def __init__(
    +            self,
    +            clients=None,
    +            config=None,
    +            start_range=None,
    +            end_range=None,
    +            validate_content=None,
    +            encryption_options=None,
    +            max_concurrency=1,
    +            name=None,
    +            container=None,
    +            encoding=None,
    +            **kwargs
    +    ):
    +        self.name = name
    +        self.container = container
    +        self.properties = None
    +        self.size = None
    +
    +        self._clients = clients
    +        self._config = config
    +        self._start_range = start_range
    +        self._end_range = end_range
    +        self._max_concurrency = max_concurrency
    +        self._encoding = encoding
    +        self._validate_content = validate_content
    +        self._encryption_options = encryption_options or {}
    +        self._request_options = kwargs
    +        self._location_mode = None
    +        self._download_complete = False
    +        self._current_content = None
    +        self._file_size = None
    +        self._non_empty_ranges = None
    +        self._response = None
    +
    +        # The service only provides transactional MD5s for chunks under 4MB.
    +        # If validate_content is on, get only self.MAX_CHUNK_GET_SIZE for the first
    +        # chunk so a transactional MD5 can be retrieved.
    +        self._first_get_size = self._config.max_single_get_size if not self._validate_content \
    +            else self._config.max_chunk_get_size
    +        initial_request_start = self._start_range if self._start_range is not None else 0
    +        if self._end_range is not None and self._end_range - self._start_range < self._first_get_size:
    +            initial_request_end = self._end_range
    +        else:
    +            initial_request_end = initial_request_start + self._first_get_size - 1
    +
    +        self._initial_range, self._initial_offset = process_range_and_offset(
    +            initial_request_start, initial_request_end, self._end_range, self._encryption_options
    +        )
    +
    +    def __len__(self):
    +        return self.size
    +
    +    async def _setup(self):
    +        self._response = await self._initial_request()
    +        self.properties = self._response.properties
    +        self.properties.name = self.name
    +        self.properties.container = self.container
    +
    +        # Set the content length to the download size instead of the size of
    +        # the last range
    +        self.properties.size = self.size
    +
    +        # Overwrite the content range to the user requested range
    +        self.properties.content_range = 'bytes {0}-{1}/{2}'.format(
    +            self._start_range,
    +            self._end_range,
    +            self._file_size
    +        )
    +
    +        # Overwrite the content MD5 as it is the MD5 for the last range instead
    +        # of the stored MD5
    +        # TODO: Set to the stored MD5 when the service returns this
    +        self.properties.content_md5 = None
    +
    +        if self.size == 0:
    +            self._current_content = b""
    +        else:
    +            self._current_content = await process_content(
    +                self._response,
    +                self._initial_offset[0],
    +                self._initial_offset[1],
    +                self._encryption_options
    +            )
    +
    +    async def _initial_request(self):
    +        range_header, range_validation = validate_and_format_range_headers(
    +            self._initial_range[0],
    +            self._initial_range[1],
    +            start_range_required=False,
    +            end_range_required=False,
    +            check_content_md5=self._validate_content)
    +
    +        try:
    +            location_mode, response = await self._clients.blob.download(
    +                range=range_header,
    +                range_get_content_md5=range_validation,
    +                validate_content=self._validate_content,
    +                data_stream_total=None,
    +                download_stream_current=0,
    +                **self._request_options)
    +
    +            # Check the location we read from to ensure we use the same one
    +            # for subsequent requests.
    +            self._location_mode = location_mode
    +
    +            # Parse the total file size and adjust the download size if ranges
    +            # were specified
    +            self._file_size = parse_length_from_content_range(response.properties.content_range)
    +            if self._end_range is not None:
    +                # Use the length unless it is over the end of the file
    +                self.size = min(self._file_size, self._end_range - self._start_range + 1)
    +            elif self._start_range is not None:
    +                self.size = self._file_size - self._start_range
    +            else:
    +                self.size = self._file_size
    +
    +        except HttpResponseError as error:
    +            if self._start_range is None and error.response.status_code == 416:
    +                # Get range will fail on an empty file. If the user did not
    +                # request a range, do a regular get request in order to get
    +                # any properties.
    +                try:
    +                    _, response = await self._clients.blob.download(
    +                        validate_content=self._validate_content,
    +                        data_stream_total=0,
    +                        download_stream_current=0,
    +                        **self._request_options)
    +                except HttpResponseError as error:
    +                    process_storage_error(error)
    +
    +                # Set the download size to empty
    +                self.size = 0
    +                self._file_size = 0
    +            else:
    +                process_storage_error(error)
    +
    +        # get page ranges to optimize downloading sparse page blob
    +        if response.properties.blob_type == 'PageBlob':
    +            try:
    +                page_ranges = await self._clients.page_blob.get_page_ranges()
    +                self._non_empty_ranges = get_page_ranges_result(page_ranges)[0]
    +            except HttpResponseError:
    +                pass
    +
    +        # If the file is small, the download is complete at this point.
    +        # If file size is large, download the rest of the file in chunks.
    +        if response.properties.size != self.size:
    +            # Lock on the etag. This can be overriden by the user by specifying '*'
    +            if self._request_options.get('modified_access_conditions'):
    +                if not self._request_options['modified_access_conditions'].if_match:
    +                    self._request_options['modified_access_conditions'].if_match = response.properties.etag
    +        else:
    +            self._download_complete = True
    +        return response
    +
    +    def chunks(self):
    +        """Iterate over chunks in the download stream.
    +
    +        :rtype: Iterable[bytes]
    +        """
    +        if self.size == 0 or self._download_complete:
    +            iter_downloader = None
    +        else:
    +            data_end = self._file_size
    +            if self._end_range is not None:
    +                # Use the length unless it is over the end of the file
    +                data_end = min(self._file_size, self._end_range + 1)
    +            iter_downloader = _AsyncChunkDownloader(
    +                client=self._clients.blob,
    +                non_empty_ranges=self._non_empty_ranges,
    +                total_size=self.size,
    +                chunk_size=self._config.max_chunk_get_size,
    +                current_progress=self._first_get_size,
    +                start_range=self._initial_range[1] + 1,  # Start where the first download ended
    +                end_range=data_end,
    +                stream=None,
    +                parallel=False,
    +                validate_content=self._validate_content,
    +                encryption_options=self._encryption_options,
    +                use_location=self._location_mode,
    +                **self._request_options)
    +        return _AsyncChunkIterator(
    +            size=self.size,
    +            content=self._current_content,
    +            downloader=iter_downloader)
    +
    +    async def readall(self):
    +        """Download the contents of this blob.
    +
    +        This operation is blocking until all data is downloaded.
    +        :rtype: bytes or str
    +        """
    +        stream = BytesIO()
    +        await self.readinto(stream)
    +        data = stream.getvalue()
    +        if self._encoding:
    +            return data.decode(self._encoding)
    +        return data
    +
    +    async def content_as_bytes(self, max_concurrency=1):
    +        """Download the contents of this file.
    +
    +        This operation is blocking until all data is downloaded.
    +
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :rtype: bytes
    +        """
    +        warnings.warn(
    +            "content_as_bytes is deprecated, use readall instead",
    +            DeprecationWarning
    +        )
    +        self._max_concurrency = max_concurrency
    +        return await self.readall()
    +
    +    async def content_as_text(self, max_concurrency=1, encoding="UTF-8"):
    +        """Download the contents of this blob, and decode as text.
    +
    +        This operation is blocking until all data is downloaded.
    +
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :param str encoding:
    +            Test encoding to decode the downloaded bytes. Default is UTF-8.
    +        :rtype: str
    +        """
    +        warnings.warn(
    +            "content_as_text is deprecated, use readall instead",
    +            DeprecationWarning
    +        )
    +        self._max_concurrency = max_concurrency
    +        self._encoding = encoding
    +        return await self.readall()
    +
    +    async def readinto(self, stream):
    +        """Download the contents of this blob to a stream.
    +
    +        :param stream:
    +            The stream to download to. This can be an open file-handle,
    +            or any writable stream. The stream must be seekable if the download
    +            uses more than one parallel connection.
    +        :returns: The number of bytes read.
    +        :rtype: int
    +        """
    +        # the stream must be seekable if parallel download is required
    +        parallel = self._max_concurrency > 1
    +        if parallel:
    +            error_message = "Target stream handle must be seekable."
    +            if sys.version_info >= (3,) and not stream.seekable():
    +                raise ValueError(error_message)
    +
    +            try:
    +                stream.seek(stream.tell())
    +            except (NotImplementedError, AttributeError):
    +                raise ValueError(error_message)
    +
    +        # Write the content to the user stream
    +        stream.write(self._current_content)
    +        if self._download_complete:
    +            return self.size
    +
    +        data_end = self._file_size
    +        if self._end_range is not None:
    +            # Use the length unless it is over the end of the file
    +            data_end = min(self._file_size, self._end_range + 1)
    +
    +        downloader = _AsyncChunkDownloader(
    +            client=self._clients.blob,
    +            non_empty_ranges=self._non_empty_ranges,
    +            total_size=self.size,
    +            chunk_size=self._config.max_chunk_get_size,
    +            current_progress=self._first_get_size,
    +            start_range=self._initial_range[1] + 1,  # start where the first download ended
    +            end_range=data_end,
    +            stream=stream,
    +            parallel=parallel,
    +            validate_content=self._validate_content,
    +            encryption_options=self._encryption_options,
    +            use_location=self._location_mode,
    +            **self._request_options)
    +
    +        dl_tasks = downloader.get_chunk_offsets()
    +        running_futures = [
    +            asyncio.ensure_future(downloader.process_chunk(d))
    +            for d in islice(dl_tasks, 0, self._max_concurrency)
    +        ]
    +        while running_futures:
    +            # Wait for some download to finish before adding a new one
    +            _done, running_futures = await asyncio.wait(
    +                running_futures, return_when=asyncio.FIRST_COMPLETED)
    +            try:
    +                next_chunk = next(dl_tasks)
    +            except StopIteration:
    +                break
    +            else:
    +                running_futures.add(asyncio.ensure_future(downloader.process_chunk(next_chunk)))
    +
    +        if running_futures:
    +            # Wait for the remaining downloads to finish
    +            await asyncio.wait(running_futures)
    +        return self.size
    +
    +    async def download_to_stream(self, stream, max_concurrency=1):
    +        """Download the contents of this blob to a stream.
    +
    +        :param stream:
    +            The stream to download to. This can be an open file-handle,
    +            or any writable stream. The stream must be seekable if the download
    +            uses more than one parallel connection.
    +        :returns: The properties of the downloaded blob.
    +        :rtype: Any
    +        """
    +        warnings.warn(
    +            "download_to_stream is deprecated, use readinto instead",
    +            DeprecationWarning
    +        )
    +        self._max_concurrency = max_concurrency
    +        await self.readinto(stream)
    +        return self.properties
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_lease_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_lease_async.py
    new file mode 100644
    index 000000000000..ecd9076bc8cd
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_lease_async.py
    @@ -0,0 +1,296 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, IO, Iterable, AnyStr, Dict, List, Tuple,
    +    TypeVar, TYPE_CHECKING
    +)
    +
    +from azure.core.tracing.decorator_async import distributed_trace_async
    +
    +from .._shared.response_handlers import return_response_headers, process_storage_error
    +from .._generated.models import (
    +    StorageErrorException,
    +    LeaseAccessConditions)
    +from .._serialize import get_modify_conditions
    +from .._lease import BlobLeaseClient as LeaseClientBase
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from .._generated.operations import BlobOperations, ContainerOperations
    +    BlobClient = TypeVar("BlobClient")
    +    ContainerClient = TypeVar("ContainerClient")
    +
    +
    +class BlobLeaseClient(LeaseClientBase):
    +    """Creates a new BlobLeaseClient.
    +
    +    This client provides lease operations on a BlobClient or ContainerClient.
    +
    +    :ivar str id:
    +        The ID of the lease currently being maintained. This will be `None` if no
    +        lease has yet been acquired.
    +    :ivar str etag:
    +        The ETag of the lease currently being maintained. This will be `None` if no
    +        lease has yet been acquired or modified.
    +    :ivar ~datetime.datetime last_modified:
    +        The last modified timestamp of the lease currently being maintained.
    +        This will be `None` if no lease has yet been acquired or modified.
    +
    +    :param client:
    +        The client of the blob or container to lease.
    +    :type client: ~azure.storage.blob.aio.BlobClient or
    +        ~azure.storage.blob.aio.ContainerClient
    +    :param str lease_id:
    +        A string representing the lease ID of an existing lease. This value does not
    +        need to be specified in order to acquire a new lease, or break one.
    +    """
    +
    +    def __enter__(self):
    +        raise TypeError("Async lease must use 'async with'.")
    +
    +    def __exit__(self, *args):
    +        self.release()
    +
    +    async def __aenter__(self):
    +        return self
    +
    +    async def __aexit__(self, *args):
    +        await self.release()
    +
    +    @distributed_trace_async
    +    async def acquire(self, lease_duration=-1, **kwargs):
    +        # type: (int, Any) -> None
    +        """Requests a new lease.
    +
    +        If the container does not have an active lease, the Blob service creates a
    +        lease on the container and returns a new lease ID.
    +
    +        :param int lease_duration:
    +            Specifies the duration of the lease, in seconds, or negative one
    +            (-1) for a lease that never expires. A non-infinite lease can be
    +            between 15 and 60 seconds. A lease duration cannot be changed
    +            using renew or change. Default is -1 (infinite lease).
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = await self._client.acquire_lease(
    +                timeout=kwargs.pop('timeout', None),
    +                duration=lease_duration,
    +                proposed_lease_id=self.id,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +        self.etag = kwargs.get('etag')  # type: str
    +
    +    @distributed_trace_async
    +    async def renew(self, **kwargs):
    +        # type: (Any) -> None
    +        """Renews the lease.
    +
    +        The lease can be renewed if the lease ID specified in the
    +        lease client matches that associated with the container or blob. Note that
    +        the lease may be renewed even if it has expired as long as the container
    +        or blob has not been leased again since the expiration of that lease. When you
    +        renew a lease, the lease duration clock resets.
    +
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = await self._client.renew_lease(
    +                lease_id=self.id,
    +                timeout=kwargs.pop('timeout', None),
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.etag = response.get('etag')  # type: str
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +
    +    @distributed_trace_async
    +    async def release(self, **kwargs):
    +        # type: (Any) -> None
    +        """Release the lease.
    +
    +        The lease may be released if the client lease id specified matches
    +        that associated with the container or blob. Releasing the lease allows another client
    +        to immediately acquire the lease for the container or blob as soon as the release is complete.
    +
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = await self._client.release_lease(
    +                lease_id=self.id,
    +                timeout=kwargs.pop('timeout', None),
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.etag = response.get('etag')  # type: str
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +
    +    @distributed_trace_async
    +    async def change(self, proposed_lease_id, **kwargs):
    +        # type: (str, Any) -> None
    +        """Change the lease ID of an active lease.
    +
    +        :param str proposed_lease_id:
    +            Proposed lease ID, in a GUID string format. The Blob service returns 400
    +            (Invalid request) if the proposed lease ID is not in the correct format.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = await self._client.change_lease(
    +                lease_id=self.id,
    +                proposed_lease_id=proposed_lease_id,
    +                timeout=kwargs.pop('timeout', None),
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.etag = response.get('etag')  # type: str
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +
    +    @distributed_trace_async
    +    async def break_lease(self, lease_break_period=None, **kwargs):
    +        # type: (Optional[int], Any) -> int
    +        """Break the lease, if the container or blob has an active lease.
    +
    +        Once a lease is broken, it cannot be renewed. Any authorized request can break the lease;
    +        the request is not required to specify a matching lease ID. When a lease
    +        is broken, the lease break period is allowed to elapse, during which time
    +        no lease operation except break and release can be performed on the container or blob.
    +        When a lease is successfully broken, the response indicates the interval
    +        in seconds until a new lease can be acquired.
    +
    +        :param int lease_break_period:
    +            This is the proposed duration of seconds that the lease
    +            should continue before it is broken, between 0 and 60 seconds. This
    +            break period is only used if it is shorter than the time remaining
    +            on the lease. If longer, the time remaining on the lease is used.
    +            A new lease will not be available before the break period has
    +            expired, but the lease may be held for longer than the break
    +            period. If this header does not appear with a break
    +            operation, a fixed-duration lease breaks after the remaining lease
    +            period elapses, and an infinite lease breaks immediately.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: Approximate time remaining in the lease period, in seconds.
    +        :rtype: int
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = await self._client.break_lease(
    +                timeout=kwargs.pop('timeout', None),
    +                break_period=lease_break_period,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return response.get('lease_time') # type: ignore
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_models.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_models.py
    new file mode 100644
    index 000000000000..312802255d70
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_models.py
    @@ -0,0 +1,226 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=too-few-public-methods, too-many-instance-attributes
    +# pylint: disable=super-init-not-called, too-many-lines
    +
    +from typing import List, Any, TYPE_CHECKING # pylint: disable=unused-import
    +
    +from azure.core.async_paging import AsyncPageIterator, AsyncItemPaged
    +
    +from .._models import BlobProperties, ContainerProperties
    +from .._shared.response_handlers import return_context_and_deserialized, process_storage_error
    +from .._shared.models import DictMixin
    +
    +from .._generated.models import StorageErrorException
    +from .._generated.models import BlobPrefix as GenBlobPrefix
    +from .._generated.models import BlobItem
    +
    +
    +class ContainerPropertiesPaged(AsyncPageIterator):
    +    """An Iterable of Container properties.
    +
    +    :ivar str service_endpoint: The service URL.
    +    :ivar str prefix: A container name prefix being used to filter the list.
    +    :ivar str marker: The continuation token of the current page of results.
    +    :ivar int results_per_page: The maximum number of results retrieved per API call.
    +    :ivar str location_mode: The location mode being used to list results. The available
    +        options include "primary" and "secondary".
    +    :ivar current_page: The current page of listed results.
    +    :vartype current_page: list(~azure.storage.blob.models.ContainerProperties)
    +
    +    :param callable command: Function to retrieve the next page of items.
    +    :param str prefix: Filters the results to return only containers whose names
    +        begin with the specified prefix.
    +    :param int results_per_page: The maximum number of container names to retrieve per
    +        call.
    +    :param str continuation_token: An opaque continuation token.
    +    """
    +    def __init__(self, command, prefix=None, results_per_page=None, continuation_token=None):
    +        super(ContainerPropertiesPaged, self).__init__(
    +            get_next=self._get_next_cb,
    +            extract_data=self._extract_data_cb,
    +            continuation_token=continuation_token or ""
    +        )
    +        self._command = command
    +        self.service_endpoint = None
    +        self.prefix = prefix
    +        self.marker = None
    +        self.results_per_page = results_per_page
    +        self.location_mode = None
    +        self.current_page = []
    +
    +    async def _get_next_cb(self, continuation_token):
    +        try:
    +            return await self._command(
    +                marker=continuation_token or None,
    +                maxresults=self.results_per_page,
    +                cls=return_context_and_deserialized,
    +                use_location=self.location_mode)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    async def _extract_data_cb(self, get_next_return):
    +        self.location_mode, self._response = get_next_return
    +        self.service_endpoint = self._response.service_endpoint
    +        self.prefix = self._response.prefix
    +        self.marker = self._response.marker
    +        self.results_per_page = self._response.max_results
    +        self.current_page = [self._build_item(item) for item in self._response.container_items]
    +
    +        return self._response.next_marker or None, self.current_page
    +
    +    @staticmethod
    +    def _build_item(item):
    +        return ContainerProperties._from_generated(item)  # pylint: disable=protected-access
    +
    +
    +class BlobPropertiesPaged(AsyncPageIterator):
    +    """An Iterable of Blob properties.
    +
    +    :ivar str service_endpoint: The service URL.
    +    :ivar str prefix: A blob name prefix being used to filter the list.
    +    :ivar str marker: The continuation token of the current page of results.
    +    :ivar int results_per_page: The maximum number of results retrieved per API call.
    +    :ivar str location_mode: The location mode being used to list results. The available
    +        options include "primary" and "secondary".
    +    :ivar current_page: The current page of listed results.
    +    :vartype current_page: list(~azure.storage.blob.models.BlobProperties)
    +    :ivar str container: The container that the blobs are listed from.
    +    :ivar str delimiter: A delimiting character used for hierarchy listing.
    +
    +    :param callable command: Function to retrieve the next page of items.
    +    :param str container: The container that the blobs are listed from.
    +    :param str prefix: Filters the results to return only blobs whose names
    +        begin with the specified prefix.
    +    :param int results_per_page: The maximum number of blobs to retrieve per
    +        call.
    +    :param str continuation_token: An opaque continuation token.
    +    :param str delimiter:
    +        Used to capture blobs whose names begin with the same substring up to
    +        the appearance of the delimiter character. The delimiter may be a single
    +        character or a string.
    +    :param location_mode: Specifies the location the request should be sent to.
    +        This mode only applies for RA-GRS accounts which allow secondary read access.
    +        Options include 'primary' or 'secondary'.
    +    """
    +    def __init__(
    +            self, command,
    +            container=None,
    +            prefix=None,
    +            results_per_page=None,
    +            continuation_token=None,
    +            delimiter=None,
    +            location_mode=None):
    +        super(BlobPropertiesPaged, self).__init__(
    +            get_next=self._get_next_cb,
    +            extract_data=self._extract_data_cb,
    +            continuation_token=continuation_token or ""
    +        )
    +        self._command = command
    +        self.service_endpoint = None
    +        self.prefix = prefix
    +        self.marker = None
    +        self.results_per_page = results_per_page
    +        self.container = container
    +        self.delimiter = delimiter
    +        self.current_page = None
    +        self.location_mode = location_mode
    +
    +    async def _get_next_cb(self, continuation_token):
    +        try:
    +            return await self._command(
    +                prefix=self.prefix,
    +                marker=continuation_token or None,
    +                maxresults=self.results_per_page,
    +                cls=return_context_and_deserialized,
    +                use_location=self.location_mode)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    async def _extract_data_cb(self, get_next_return):
    +        self.location_mode, self._response = get_next_return
    +        self.service_endpoint = self._response.service_endpoint
    +        self.prefix = self._response.prefix
    +        self.marker = self._response.marker
    +        self.results_per_page = self._response.max_results
    +        self.container = self._response.container_name
    +        self.current_page = [self._build_item(item) for item in self._response.segment.blob_items]
    +
    +        return self._response.next_marker or None, self.current_page
    +
    +    def _build_item(self, item):
    +        if isinstance(item, BlobProperties):
    +            return item
    +        if isinstance(item, BlobItem):
    +            blob = BlobProperties._from_generated(item)  # pylint: disable=protected-access
    +            blob.container = self.container
    +            return blob
    +        return item
    +
    +
    +class BlobPrefix(AsyncItemPaged, DictMixin):
    +    """An Iterable of Blob properties.
    +
    +    Returned from walk_blobs when a delimiter is used.
    +    Can be thought of as a virtual blob directory.
    +
    +    :ivar str name: The prefix, or "directory name" of the blob.
    +    :ivar str prefix: A blob name prefix being used to filter the list.
    +    :ivar int results_per_page: The maximum number of results retrieved per API call.
    +    :ivar str marker: The continuation token of the current page of results.
    +    :ivar str location_mode: The location mode being used to list results. The available
    +        options include "primary" and "secondary".
    +    :ivar current_page: The current page of listed results.
    +    :vartype current_page: list(~azure.storage.blob.models.BlobProperties)
    +    :ivar str container: The container that the blobs are listed from.
    +    :ivar str delimiter: A delimiting character used for hierarchy listing.
    +    :param callable command: Function to retrieve the next page of items.
    +    :param str prefix: Filters the results to return only blobs whose names
    +        begin with the specified prefix.
    +    :param int results_per_page: The maximum number of blobs to retrieve per
    +        call.
    +    :param str marker: An opaque continuation token.
    +    :param str delimiter:
    +        Used to capture blobs whose names begin with the same substring up to
    +        the appearance of the delimiter character. The delimiter may be a single
    +        character or a string.
    +    :param location_mode: Specifies the location the request should be sent to.
    +        This mode only applies for RA-GRS accounts which allow secondary read access.
    +        Options include 'primary' or 'secondary'.
    +    """
    +    def __init__(self, *args, **kwargs):
    +        super(BlobPrefix, self).__init__(*args, page_iterator_class=BlobPrefixPaged, **kwargs)
    +        self.name = kwargs.get('prefix')
    +        self.prefix = kwargs.get('prefix')
    +        self.results_per_page = kwargs.get('results_per_page')
    +        self.container = kwargs.get('container')
    +        self.delimiter = kwargs.get('delimiter')
    +        self.location_mode = kwargs.get('location_mode')
    +
    +
    +class BlobPrefixPaged(BlobPropertiesPaged):
    +    def __init__(self, *args, **kwargs):
    +        super(BlobPrefixPaged, self).__init__(*args, **kwargs)
    +        self.name = self.prefix
    +
    +    async def _extract_data_cb(self, get_next_return):
    +        continuation_token, _ = await super(BlobPrefixPaged, self)._extract_data_cb(get_next_return)
    +        self.current_page = self._response.segment.blob_prefixes + self._response.segment.blob_items
    +        self.current_page = [self._build_item(item) for item in self.current_page]
    +        self.delimiter = self._response.delimiter
    +
    +        return continuation_token, self.current_page
    +
    +    def _build_item(self, item):
    +        item = super(BlobPrefixPaged, self)._build_item(item)
    +        if isinstance(item, GenBlobPrefix):
    +            return BlobPrefix(
    +                self._command,
    +                container=self.container,
    +                prefix=item.name,
    +                results_per_page=self.results_per_page,
    +                location_mode=self.location_mode)
    +        return item
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_upload_helpers.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_upload_helpers.py
    new file mode 100644
    index 000000000000..b936ee6cfc59
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_vendor/storage/blob/aio/_upload_helpers.py
    @@ -0,0 +1,256 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=no-self-use
    +
    +from io import SEEK_SET, UnsupportedOperation
    +from typing import Optional, Union, Any, TypeVar, TYPE_CHECKING # pylint: disable=unused-import
    +
    +import six
    +from azure.core.exceptions import ResourceModifiedError
    +
    +from .._shared.response_handlers import (
    +    process_storage_error,
    +    return_response_headers)
    +from .._shared.uploads_async import (
    +    upload_data_chunks,
    +    upload_substream_blocks,
    +    BlockBlobChunkUploader,
    +    PageBlobChunkUploader,
    +    AppendBlobChunkUploader)
    +from .._shared.encryption import generate_blob_encryption_data, encrypt_blob
    +from .._generated.models import (
    +    StorageErrorException,
    +    BlockLookupList,
    +    AppendPositionAccessConditions,
    +    ModifiedAccessConditions,
    +)
    +from .._upload_helpers import _convert_mod_error, _any_conditions
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime # pylint: disable=unused-import
    +    BlobLeaseClient = TypeVar("BlobLeaseClient")
    +
    +
    +async def upload_block_blob(  # pylint: disable=too-many-locals
    +        client=None,
    +        data=None,
    +        stream=None,
    +        length=None,
    +        overwrite=None,
    +        headers=None,
    +        validate_content=None,
    +        max_concurrency=None,
    +        blob_settings=None,
    +        encryption_options=None,
    +        **kwargs):
    +    try:
    +        if not overwrite and not _any_conditions(**kwargs):
    +            kwargs['modified_access_conditions'].if_none_match = '*'
    +        adjusted_count = length
    +        if (encryption_options.get('key') is not None) and (adjusted_count is not None):
    +            adjusted_count += (16 - (length % 16))
    +        blob_headers = kwargs.pop('blob_headers', None)
    +        tier = kwargs.pop('standard_blob_tier', None)
    +
    +        # Do single put if the size is smaller than config.max_single_put_size
    +        if adjusted_count is not None and (adjusted_count < blob_settings.max_single_put_size):
    +            try:
    +                data = data.read(length)
    +                if not isinstance(data, six.binary_type):
    +                    raise TypeError('Blob data should be of type bytes.')
    +            except AttributeError:
    +                pass
    +            if encryption_options.get('key'):
    +                encryption_data, data = encrypt_blob(data, encryption_options['key'])
    +                headers['x-ms-meta-encryptiondata'] = encryption_data
    +            return await client.upload(
    +                data,
    +                content_length=adjusted_count,
    +                blob_http_headers=blob_headers,
    +                headers=headers,
    +                cls=return_response_headers,
    +                validate_content=validate_content,
    +                data_stream_total=adjusted_count,
    +                upload_stream_current=0,
    +                tier=tier.value if tier else None,
    +                **kwargs)
    +
    +        use_original_upload_path = blob_settings.use_byte_buffer or \
    +            validate_content or encryption_options.get('required') or \
    +            blob_settings.max_block_size < blob_settings.min_large_block_upload_threshold or \
    +            hasattr(stream, 'seekable') and not stream.seekable() or \
    +            not hasattr(stream, 'seek') or not hasattr(stream, 'tell')
    +
    +        if use_original_upload_path:
    +            if encryption_options.get('key'):
    +                cek, iv, encryption_data = generate_blob_encryption_data(encryption_options['key'])
    +                headers['x-ms-meta-encryptiondata'] = encryption_data
    +                encryption_options['cek'] = cek
    +                encryption_options['vector'] = iv
    +            block_ids = await upload_data_chunks(
    +                service=client,
    +                uploader_class=BlockBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                max_concurrency=max_concurrency,
    +                stream=stream,
    +                validate_content=validate_content,
    +                encryption_options=encryption_options,
    +                **kwargs
    +            )
    +        else:
    +            block_ids = await upload_substream_blocks(
    +                service=client,
    +                uploader_class=BlockBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                max_concurrency=max_concurrency,
    +                stream=stream,
    +                validate_content=validate_content,
    +                **kwargs
    +            )
    +
    +        block_lookup = BlockLookupList(committed=[], uncommitted=[], latest=[])
    +        block_lookup.latest = block_ids
    +        return await client.commit_block_list(
    +            block_lookup,
    +            blob_http_headers=blob_headers,
    +            cls=return_response_headers,
    +            validate_content=validate_content,
    +            headers=headers,
    +            tier=tier.value if tier else None,
    +            **kwargs)
    +    except StorageErrorException as error:
    +        try:
    +            process_storage_error(error)
    +        except ResourceModifiedError as mod_error:
    +            if not overwrite:
    +                _convert_mod_error(mod_error)
    +            raise
    +
    +
    +async def upload_page_blob(
    +        client=None,
    +        stream=None,
    +        length=None,
    +        overwrite=None,
    +        headers=None,
    +        validate_content=None,
    +        max_concurrency=None,
    +        blob_settings=None,
    +        encryption_options=None,
    +        **kwargs):
    +    try:
    +        if not overwrite and not _any_conditions(**kwargs):
    +            kwargs['modified_access_conditions'].if_none_match = '*'
    +        if length is None or length < 0:
    +            raise ValueError("A content length must be specified for a Page Blob.")
    +        if length % 512 != 0:
    +            raise ValueError("Invalid page blob size: {0}. "
    +                             "The size must be aligned to a 512-byte boundary.".format(length))
    +        if kwargs.get('premium_page_blob_tier'):
    +            premium_page_blob_tier = kwargs.pop('premium_page_blob_tier')
    +            try:
    +                headers['x-ms-access-tier'] = premium_page_blob_tier.value
    +            except AttributeError:
    +                headers['x-ms-access-tier'] = premium_page_blob_tier
    +        if encryption_options and encryption_options.get('data'):
    +            headers['x-ms-meta-encryptiondata'] = encryption_options['data']
    +        response = await client.create(
    +            content_length=0,
    +            blob_content_length=length,
    +            blob_sequence_number=None,
    +            blob_http_headers=kwargs.pop('blob_headers', None),
    +            cls=return_response_headers,
    +            headers=headers,
    +            **kwargs)
    +        if length == 0:
    +            return response
    +
    +        kwargs['modified_access_conditions'] = ModifiedAccessConditions(if_match=response['etag'])
    +        return await upload_data_chunks(
    +            service=client,
    +            uploader_class=PageBlobChunkUploader,
    +            total_size=length,
    +            chunk_size=blob_settings.max_page_size,
    +            stream=stream,
    +            max_concurrency=max_concurrency,
    +            validate_content=validate_content,
    +            encryption_options=encryption_options,
    +            **kwargs)
    +
    +    except StorageErrorException as error:
    +        try:
    +            process_storage_error(error)
    +        except ResourceModifiedError as mod_error:
    +            if not overwrite:
    +                _convert_mod_error(mod_error)
    +            raise
    +
    +
    +async def upload_append_blob(  # pylint: disable=unused-argument
    +        client=None,
    +        stream=None,
    +        length=None,
    +        overwrite=None,
    +        headers=None,
    +        validate_content=None,
    +        max_concurrency=None,
    +        blob_settings=None,
    +        encryption_options=None,
    +        **kwargs):
    +    try:
    +        if length == 0:
    +            return {}
    +        blob_headers = kwargs.pop('blob_headers', None)
    +        append_conditions = AppendPositionAccessConditions(
    +            max_size=kwargs.pop('maxsize_condition', None),
    +            append_position=None)
    +        try:
    +            if overwrite:
    +                await client.create(
    +                    content_length=0,
    +                    blob_http_headers=blob_headers,
    +                    headers=headers,
    +                    **kwargs)
    +            return await upload_data_chunks(
    +                service=client,
    +                uploader_class=AppendBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                stream=stream,
    +                max_concurrency=max_concurrency,
    +                validate_content=validate_content,
    +                append_position_access_conditions=append_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            if error.response.status_code != 404:
    +                raise
    +            # rewind the request body if it is a stream
    +            if hasattr(stream, 'read'):
    +                try:
    +                    # attempt to rewind the body to the initial position
    +                    stream.seek(0, SEEK_SET)
    +                except UnsupportedOperation:
    +                    # if body is not seekable, then retry would not work
    +                    raise error
    +            await client.create(
    +                content_length=0,
    +                blob_http_headers=blob_headers,
    +                headers=headers,
    +                **kwargs)
    +            return await upload_data_chunks(
    +                service=client,
    +                uploader_class=AppendBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                stream=stream,
    +                max_concurrency=max_concurrency,
    +                validate_content=validate_content,
    +                append_position_access_conditions=append_conditions,
    +                **kwargs)
    +    except StorageErrorException as error:
    +        process_storage_error(error)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_version.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_version.py
    index 010063f9dd93..373777a19de0 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_version.py
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/azure/eventhub/extensions/checkpointstoreblobaio/_version.py
    @@ -3,4 +3,4 @@
     # Licensed under the MIT License.
     # ------------------------------------
     
    -VERSION = "1.0.1"
    +VERSION = "1.1.1"
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/dev_requirements.txt b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/dev_requirements.txt
    index 6c498fed5674..8b068466e84b 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/dev_requirements.txt
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/dev_requirements.txt
    @@ -1,4 +1,2 @@
     -e ../../../tools/azure-sdk-tools
    -../../core/azure-core
    --e ../../storage/azure-storage-blob
     ../azure-eventhub
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/samples/event_processor_blob_storage_example.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/samples/event_processor_blob_storage_example.py
    index ae79624b280a..3d96cb4c34ee 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/samples/event_processor_blob_storage_example.py
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/samples/event_processor_blob_storage_example.py
    @@ -23,7 +23,7 @@ async def main(client):
         loop = asyncio.get_event_loop()
         checkpoint_store = BlobCheckpointStore.from_connection_string(
             STORAGE_CONNECTION_STR,
    -        container_name=BLOB_CONTAINER_NAME
    +        container_name=BLOB_CONTAINER_NAME,
         )
         client = EventHubConsumerClient.from_connection_string(
             CONNECTION_STR,
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/samples/event_processor_blob_storage_example_with_storage_api_version.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/samples/event_processor_blob_storage_example_with_storage_api_version.py
    new file mode 100644
    index 000000000000..3f4e5c6a5be5
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/samples/event_processor_blob_storage_example_with_storage_api_version.py
    @@ -0,0 +1,38 @@
    +import asyncio
    +import os
    +from azure.eventhub.aio import EventHubConsumerClient
    +from azure.eventhub.extensions.checkpointstoreblobaio import BlobCheckpointStore
    +
    +CONNECTION_STR = os.environ["EVENT_HUB_CONN_STR"]
    +STORAGE_CONNECTION_STR = os.environ["AZURE_STORAGE_CONN_STR"]
    +BLOB_CONTAINER_NAME = "your-blob-container-name"  # Please make sure the blob container resource exists.
    +STORAGE_SERVICE_API_VERSION = "2017-11-09"
    +
    +
    +async def on_event(partition_context, event):
    +    # Put your code here.
    +    # Do some sync or async operations. If the operation is i/o intensive, async will have better performance.
    +    print(event)
    +    await partition_context.update_checkpoint(event)
    +
    +
    +async def main(client):
    +    async with client:
    +        await client.receive(on_event)
    +
    +if __name__ == '__main__':
    +    loop = asyncio.get_event_loop()
    +    checkpoint_store = BlobCheckpointStore.from_connection_string(
    +        STORAGE_CONNECTION_STR,
    +        container_name=BLOB_CONTAINER_NAME,
    +        api_version=STORAGE_SERVICE_API_VERSION
    +    )
    +    client = EventHubConsumerClient.from_connection_string(
    +        CONNECTION_STR,
    +        "$Default",
    +        checkpoint_store=checkpoint_store
    +    )
    +    try:
    +        loop.run_until_complete(main(client))
    +    finally:
    +        loop.stop()
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/setup.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/setup.py
    index 88f1fd79f107..6c276e7c3f0e 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/setup.py
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/setup.py
    @@ -39,7 +39,7 @@
             # Exclude packages that will be covered by PEP420 or nspkg
             'azure',
             'azure.eventhub',
    -        'azure.eventhub.extensions',
    +        'azure.eventhub.extensions'
         ]
     
     setup(
    @@ -53,7 +53,7 @@
         author_email='azpysdkhelp@microsoft.com',
         url='https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio',
         classifiers=[
    -        'Development Status :: 5 - Production/Stable',
    +        "Development Status :: 5 - Production/Stable",
             'Programming Language :: Python',
             'Programming Language :: Python :: 3',
             'Programming Language :: Python :: 3.5',
    @@ -66,11 +66,19 @@
         packages=find_packages(exclude=exclude_packages),
         python_requires=">=3.5.3",
         install_requires=[
    -        'azure-storage-blob<13.0.0,>=12.0.0',
    +        # dependencies for the vendored storage blob
    +        "azure-core<2.0.0,>=1.2.2",
    +        "msrest>=0.6.10",
    +        "cryptography>=2.1.4",
    +        # end of dependencies for the vendored storage blob
             'azure-eventhub<6.0.0,>=5.0.0',
             'aiohttp<4.0,>=3.0',
         ],
         extras_require={
    -
    -    }
    +        # dependencies for the vendored storage blob
    +        ":python_version<'3.0'": ['futures'],
    +        ":python_version<'3.4'": ['enum34>=1.0.4'],
    +        ":python_version<'3.5'": ["typing"]
    +        # end of dependencies for the vendored storage blob
    +    },
     )
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/tests/test_storage_blob_partition_manager_aio.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/tests/test_storage_blob_partition_manager_aio.py
    index 7db12363782a..3b22eecdab55 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/tests/test_storage_blob_partition_manager_aio.py
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob-aio/tests/test_storage_blob_partition_manager_aio.py
    @@ -12,6 +12,7 @@
     import asyncio
     
     from azure.eventhub.extensions.checkpointstoreblobaio import BlobCheckpointStore
    +from azure.eventhub.extensions.checkpointstoreblobaio._vendor.storage.blob import BlobServiceClient
     
     
     def get_live_storage_blob_client():
    @@ -19,11 +20,6 @@ def get_live_storage_blob_client():
             storage_connection_str = os.environ['AZURE_STORAGE_CONN_STR']
         except KeyError:
             return None, None
    -    try:
    -        from azure.storage.blob import BlobServiceClient
    -        from azure.storage.blob.aio import ContainerClient
    -    except ImportError or ModuleNotFoundError:
    -        return None, None
     
         container_str = str(uuid.uuid4())
         blob_service_client = BlobServiceClient.from_connection_string(storage_connection_str)
    @@ -34,7 +30,6 @@ def get_live_storage_blob_client():
     def remove_live_storage_blob_client(container_str):
         try:
             storage_connection_str = os.environ['AZURE_STORAGE_CONN_STR']
    -        from azure.storage.blob import BlobServiceClient
             blob_service_client = BlobServiceClient.from_connection_string(storage_connection_str)
             blob_service_client.delete_container(container_str)
         except:
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/CHANGELOG.md b/sdk/eventhub/azure-eventhub-checkpointstoreblob/CHANGELOG.md
    index bbae3dace509..02b68ca42faf 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob/CHANGELOG.md
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/CHANGELOG.md
    @@ -1,6 +1,12 @@
     # Release History
     
    -## 1.0.1 (Unreleased)
    +## 1.1.1 (Unreleased)
    +
    +
    +## 1.1.0 (2020-03-09)
    +
    +**New features**
    +- Param `api_version` of `BlobCheckpointStore` now supports older versions of Azure Storage Service API.
     
     ## 1.0.0 (2020-01-13)
     Stable release. No new features or API changes.
    @@ -21,4 +27,4 @@ Stable release. No new features or API changes.
     
     - `BlobPartitionManager` that uses Azure Blob Storage Block Blob to store EventProcessor checkpoint data
     
    -![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python/sdk/eventhub/azure-eventhub-checkpointstoreblob/HISTORY.png)
    \ No newline at end of file
    +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python/sdk/eventhub/azure-eventhub-checkpointstoreblob/HISTORY.png)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/README.md b/sdk/eventhub/azure-eventhub-checkpointstoreblob/README.md
    index f0f958fee642..82438a6c90bb 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob/README.md
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/README.md
    @@ -5,17 +5,11 @@ This Checkpoint Store package works as a plug-in package to `EventHubConsumerCli
     
     Please note that this is a sync library, for async version of the Azure EventHubs Checkpoint Store client library, please refer to [azure-eventhub-checkpointstoreblob-aio](../azure-eventhub-checkpointstoreblob-aio).
     
    -[Source code](./) | [Package (PyPi)](https://pypi.org/project/azure-eventhub-checkpointstoreblob/) | [API reference documentation](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-eventhub/5.0.0/azure.eventhub.html#azure.eventhub.CheckpointStore) | [Azure Eventhubs documentation](https://docs.microsoft.com/en-us/azure/event-hubs/) | [Azure Storage documentation](https://docs.microsoft.com/en-us/azure/storage/)
    +[Source code](./) | [Package (PyPi)](https://pypi.org/project/azure-eventhub-checkpointstoreblob) | [API reference documentation](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-eventhub/5.0.1/azure.eventhub.html#azure.eventhub.CheckpointStore) | [Azure Eventhubs documentation](https://docs.microsoft.com/en-us/azure/event-hubs/) | [Azure Storage documentation](https://docs.microsoft.com/en-us/azure/storage/)
     
     ## Getting started
     
    -### Install the package
    -
    -```
    -$ pip install azure-eventhub-checkpointstoreblob
    -```
    -
    -**Prerequisites**
    +### Prerequisites
     
     - Python2.7, Python 3.5.3 or later.
     - **Microsoft Azure Subscription:**  To use Azure services, including Azure Event Hubs, you'll need a subscription. If you do not have an existing Azure account, you may sign up for a free trial or use your MSDN subscriber benefits when you [create an account](https://azure.microsoft.com/en-us/).
    @@ -24,6 +18,12 @@ $ pip install azure-eventhub-checkpointstoreblob
     
     - **Azure Storage Account:** You'll need to have an Azure Storage Account and create a Azure Blob Storage Block Container to store the checkpoint data with blobs. You may follow the guide [creating an Azure Block Blob Storage Account](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-create-account-block-blob).
     
    +### Install the package
    +
    +```
    +$ pip install azure-eventhub-checkpointstoreblob
    +```
    +
     ## Key concepts
     
     ### Checkpointing
    @@ -95,11 +95,24 @@ if __name__ == '__main__':
         main()
     ```
     
    +#### Use `BlobCheckpointStore` with a different version of Azure Storage Service API
    +Some environments have different versions of Azure Storage Service API. 
    +`BlobCheckpointStore` by default uses the Storage Service API version 2019-07-07. To use it against a different
    +version, specify `api_version` when you create the `BlobCheckpointStore` object.
    +
    +
     ## Troubleshooting
     
     ### General
     Enabling logging will be helpful to do trouble shooting.
    -Refer to [Logging](#logging) to enable loggers for related libraries.
    +
    +### Logging
    +
    +- Enable `azure.eventhub.extensions.checkpointstoreblob` logger to collect traces from the library.
    +- Enable `azure.eventhub` logger to collect traces from the main azure-eventhub library.
    +- Enable `azure.eventhub.extensions.checkpointstoreblob._vendor.storage` logger to collect traces from azure storage blob library.
    +- Enable `uamqp` logger to collect traces from the underlying uAMQP library.
    +- Enable AMQP frame level trace by setting `logging_enable=True` when creating the client.
     
     ## Next steps
     
    @@ -108,15 +121,7 @@ Refer to [Logging](#logging) to enable loggers for related libraries.
     
     ### Documentation
     
    -Reference documentation is available [here](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-eventhub/5.0.0/azure.eventhub.html#azure.eventhub.CheckpointStore)
    -
    -### Logging
    -
    -- Enable `azure.eventhub.extensions.checkpointstoreblob` logger to collect traces from the library.
    -- Enable `azure.eventhub` logger to collect traces from the main azure-eventhub library.
    -- Enable `azure.storage.blob` logger to collect traces from azure storage blob library.
    -- Enable `uamqp` logger to collect traces from the underlying uAMQP library.
    -- Enable AMQP frame level trace by setting `logging_enable=True` when creating the client.
    +Reference documentation is available [here](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-eventhub/5.0.1/azure.eventhub.html#azure.eventhub.CheckpointStore)
     
     ### Provide Feedback
     
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_blobstoragecs.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_blobstoragecs.py
    index 22cabb0cd039..3f11f9f2e08d 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_blobstoragecs.py
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_blobstoragecs.py
    @@ -12,7 +12,8 @@
     from azure.eventhub import CheckpointStore  # type: ignore  # pylint: disable=no-name-in-module
     from azure.eventhub.exceptions import OwnershipLostError  # type: ignore
     from azure.core.exceptions import ResourceModifiedError, ResourceExistsError  # type: ignore
    -from azure.storage.blob import BlobClient, ContainerClient  # type: ignore
    +from ._vendor.storage.blob import BlobClient, ContainerClient
    +from ._vendor.storage.blob._shared.base_client import parse_connection_str
     
     logger = logging.getLogger(__name__)
     UPLOAD_DATA = ""
    @@ -42,25 +43,71 @@ class BlobCheckpointStore(CheckpointStore):
         This class implements methods list_ownership, claim_ownership, update_checkpoint and list_checkpoints that are
         defined in class azure.eventhub.aio.CheckpointStore of package azure-eventhub.
     
    +    :param str account_url:
    +        The URI to the storage account. In order to create a client given the full URI to the container,
    +        use the :func:`from_container_url` classmethod.
    +    :param container_name:
    +        The name of the container for the blob.
    +    :type container_name: str
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +            The Storage API version to use for requests. Default value is '2019-07-07'.
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +
         """
     
         def __init__(self, blob_account_url, container_name, credential=None, **kwargs):
             # type(str, str, Optional[Any], Any) -> None
    -        container_client = kwargs.pop("container_client", None)
    -        self._container_client = container_client or ContainerClient(
    -            blob_account_url, container_name, credential=credential, **kwargs
    -        )
    +        self._container_client = kwargs.pop("container_client", None)
    +        if not self._container_client:
    +            api_version = kwargs.pop("api_version", None)
    +            if api_version:
    +                headers = kwargs.get("headers")
    +                if headers:
    +                    headers["x-ms-version"] = api_version
    +                else:
    +                    kwargs["headers"] = {"x-ms-version": api_version}
    +            self._container_client = ContainerClient(
    +                blob_account_url, container_name, credential=credential, **kwargs
    +            )
             self._cached_blob_clients = defaultdict()  # type: Dict[str, BlobClient]
     
         @classmethod
         def from_connection_string(
             cls, conn_str, container_name, credential=None, **kwargs
         ):
    -        # type: (str, str, Optional[Any], str) -> BlobCheckpointStore
    -        container_client = ContainerClient.from_connection_string(
    -            conn_str, container_name, credential=credential, **kwargs
    -        )
    -        return cls(None, None, container_client=container_client)
    +        # type: (str, str, Optional[Any], Any) -> BlobCheckpointStore
    +        """Create BlobCheckpointStore from a storage connection string.
    +
    +        :param str conn_str:
    +            A connection string to an Azure Storage account.
    +        :param container_name:
    +            The container name for the blob.
    +        :type container_name: str
    +        :param credential:
    +            The credentials with which to authenticate. This is optional if the
    +            account URL already has a SAS token, or the connection string already has shared
    +            access key values. The value can be a SAS token string, an account
    +            shared access key, or an instance of a TokenCredentials class from azure.identity.
    +            Credentials provided here will take precedence over those in the connection string.
    +        :keyword str api_version:
    +            The Storage API version to use for requests. Default value is '2019-07-07'.
    +        :keyword str secondary_hostname:
    +            The hostname of the secondary endpoint.
    +        :returns: A blob checkpoint store.
    +        :rtype: ~azure.eventhub.extensions.checkpointstoreblob.BlobCheckpointStore
    +        """
    +
    +        account_url, secondary, credential = parse_connection_str(conn_str, credential, 'blob')
    +        if 'secondary_hostname' not in kwargs:
    +            kwargs['secondary_hostname'] = secondary
    +
    +        return cls(account_url, container_name, credential=credential, **kwargs)
     
         def __enter__(self):
             self._container_client.__enter__()
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/__init__.py
    new file mode 100644
    index 000000000000..ad42bf279a86
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/__init__.py
    @@ -0,0 +1,4 @@
    +# --------------------------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for license information.
    +# -----------------------------------------------------------------------------------
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/__init__.py
    new file mode 100644
    index 000000000000..59cb70146572
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/__init__.py
    @@ -0,0 +1 @@
    +__path__ = __import__('pkgutil').extend_path(__path__, __name__)  # type: str
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/__init__.py
    new file mode 100644
    index 000000000000..2370d0cd28d7
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/__init__.py
    @@ -0,0 +1,210 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import os
    +
    +from typing import Union, Iterable, AnyStr, IO, Any, Dict  # pylint: disable=unused-import
    +from ._version import VERSION
    +from ._blob_client import BlobClient
    +from ._container_client import ContainerClient
    +from ._blob_service_client import BlobServiceClient
    +from ._lease import BlobLeaseClient
    +from ._download import StorageStreamDownloader
    +from ._shared_access_signature import generate_account_sas, generate_container_sas, generate_blob_sas
    +from ._shared.policies import ExponentialRetry, LinearRetry
    +from ._shared.response_handlers import PartialBatchErrorException
    +from ._shared.models import(
    +    LocationMode,
    +    ResourceTypes,
    +    AccountSasPermissions,
    +    StorageErrorCode,
    +    UserDelegationKey
    +)
    +from ._generated.models import (
    +    RehydratePriority
    +)
    +from ._models import (
    +    BlobType,
    +    BlockState,
    +    StandardBlobTier,
    +    PremiumPageBlobTier,
    +    SequenceNumberAction,
    +    PublicAccess,
    +    BlobAnalyticsLogging,
    +    Metrics,
    +    RetentionPolicy,
    +    StaticWebsite,
    +    CorsRule,
    +    ContainerProperties,
    +    BlobProperties,
    +    LeaseProperties,
    +    ContentSettings,
    +    CopyProperties,
    +    BlobBlock,
    +    PageRange,
    +    AccessPolicy,
    +    ContainerSasPermissions,
    +    BlobSasPermissions,
    +    CustomerProvidedEncryptionKey,
    +    ContainerEncryptionScope
    +)
    +
    +__version__ = VERSION
    +
    +
    +def upload_blob_to_url(
    +        blob_url,  # type: str
    +        data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +        credential=None,  # type: Any
    +        **kwargs):
    +    # type: (...) -> Dict[str, Any]
    +    """Upload data to a given URL
    +
    +    The data will be uploaded as a block blob.
    +
    +    :param str blob_url:
    +        The full URI to the blob. This can also include a SAS token.
    +    :param data:
    +        The data to upload. This can be bytes, text, an iterable or a file-like object.
    +    :type data: bytes or str or Iterable
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        blob URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword bool overwrite:
    +        Whether the blob to be uploaded should overwrite the current data.
    +        If True, upload_blob_to_url will overwrite any existing data. If set to False, the
    +        operation will fail with a ResourceExistsError.
    +    :keyword int max_concurrency:
    +        The number of parallel connections with which to download.
    +    :keyword int length:
    +        Number of bytes to read from the stream. This is optional, but
    +        should be supplied for optimal performance.
    +    :keyword dict(str,str) metadata:
    +        Name-value pairs associated with the blob as metadata.
    +    :keyword bool validate_content:
    +        If true, calculates an MD5 hash for each chunk of the blob. The storage
    +        service checks the hash of the content that has arrived with the hash
    +        that was sent. This is primarily valuable for detecting bitflips on
    +        the wire if using http instead of https as https (the default) will
    +        already validate. Note that this MD5 hash is not stored with the
    +        blob. Also note that if enabled, the memory-efficient upload algorithm
    +        will not be used, because computing the MD5 hash requires buffering
    +        entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +    :keyword str encoding:
    +        Encoding to use if text is supplied as input. Defaults to UTF-8.
    +    :returns: Blob-updated property dict (Etag and last modified)
    +    :rtype: dict(str, Any)
    +    """
    +    with BlobClient.from_blob_url(blob_url, credential=credential) as client:
    +        return client.upload_blob(data=data, blob_type=BlobType.BlockBlob, **kwargs)
    +
    +
    +def _download_to_stream(client, handle, **kwargs):
    +    """Download data to specified open file-handle."""
    +    stream = client.download_blob(**kwargs)
    +    stream.readinto(handle)
    +
    +
    +def download_blob_from_url(
    +        blob_url,  # type: str
    +        output,  # type: str
    +        credential=None,  # type: Any
    +        **kwargs):
    +    # type: (...) -> None
    +    """Download the contents of a blob to a local file or stream.
    +
    +    :param str blob_url:
    +        The full URI to the blob. This can also include a SAS token.
    +    :param output:
    +        Where the data should be downloaded to. This could be either a file path to write to,
    +        or an open IO handle to write to.
    +    :type output: str or writable stream.
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        blob URL already has a SAS token or the blob is public. The value can be a SAS token string,
    +        an account shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword bool overwrite:
    +        Whether the local file should be overwritten if it already exists. The default value is
    +        `False` - in which case a ValueError will be raised if the file already exists. If set to
    +        `True`, an attempt will be made to write to the existing file. If a stream handle is passed
    +        in, this value is ignored.
    +    :keyword int max_concurrency:
    +        The number of parallel connections with which to download.
    +    :keyword int offset:
    +        Start of byte range to use for downloading a section of the blob.
    +        Must be set if length is provided.
    +    :keyword int length:
    +        Number of bytes to read from the stream. This is optional, but
    +        should be supplied for optimal performance.
    +    :keyword bool validate_content:
    +        If true, calculates an MD5 hash for each chunk of the blob. The storage
    +        service checks the hash of the content that has arrived with the hash
    +        that was sent. This is primarily valuable for detecting bitflips on
    +        the wire if using http instead of https as https (the default) will
    +        already validate. Note that this MD5 hash is not stored with the
    +        blob. Also note that if enabled, the memory-efficient upload algorithm
    +        will not be used, because computing the MD5 hash requires buffering
    +        entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +    :rtype: None
    +    """
    +    overwrite = kwargs.pop('overwrite', False)
    +    with BlobClient.from_blob_url(blob_url, credential=credential) as client:
    +        if hasattr(output, 'write'):
    +            _download_to_stream(client, output, **kwargs)
    +        else:
    +            if not overwrite and os.path.isfile(output):
    +                raise ValueError("The file '{}' already exists.".format(output))
    +            with open(output, 'wb') as file_handle:
    +                _download_to_stream(client, file_handle, **kwargs)
    +
    +
    +__all__ = [
    +    'upload_blob_to_url',
    +    'download_blob_from_url',
    +    'BlobServiceClient',
    +    'ContainerClient',
    +    'BlobClient',
    +    'BlobType',
    +    'BlobLeaseClient',
    +    'StorageErrorCode',
    +    'UserDelegationKey',
    +    'ExponentialRetry',
    +    'LinearRetry',
    +    'LocationMode',
    +    'BlockState',
    +    'StandardBlobTier',
    +    'PremiumPageBlobTier',
    +    'SequenceNumberAction',
    +    'PublicAccess',
    +    'BlobAnalyticsLogging',
    +    'Metrics',
    +    'RetentionPolicy',
    +    'StaticWebsite',
    +    'CorsRule',
    +    'ContainerProperties',
    +    'BlobProperties',
    +    'LeaseProperties',
    +    'ContentSettings',
    +    'CopyProperties',
    +    'BlobBlock',
    +    'PageRange',
    +    'AccessPolicy',
    +    'ContainerSasPermissions',
    +    'BlobSasPermissions',
    +    'ResourceTypes',
    +    'AccountSasPermissions',
    +    'StorageStreamDownloader',
    +    'CustomerProvidedEncryptionKey',
    +    'RehydratePriority',
    +    'generate_account_sas',
    +    'generate_container_sas',
    +    'generate_blob_sas',
    +    'PartialBatchErrorException',
    +    'ContainerEncryptionScope'
    +]
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_blob_client.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_blob_client.py
    new file mode 100644
    index 000000000000..115d74bec9b1
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_blob_client.py
    @@ -0,0 +1,3005 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=too-many-lines,no-self-use
    +
    +from io import BytesIO
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, IO, Iterable, AnyStr, Dict, List, Tuple,
    +    TYPE_CHECKING
    +)
    +try:
    +    from urllib.parse import urlparse, quote, unquote
    +except ImportError:
    +    from urlparse import urlparse # type: ignore
    +    from urllib2 import quote, unquote # type: ignore
    +
    +import six
    +from azure.core.tracing.decorator import distributed_trace
    +
    +from ._shared import encode_base64
    +from ._shared.base_client import StorageAccountHostsMixin, parse_connection_str, parse_query
    +from ._shared.encryption import generate_blob_encryption_data
    +from ._shared.uploads import IterStreamer
    +from ._shared.request_handlers import (
    +    add_metadata_headers, get_length, read_length,
    +    validate_and_format_range_headers)
    +from ._shared.response_handlers import return_response_headers, process_storage_error
    +from ._generated import AzureBlobStorage, VERSION
    +from ._generated.models import ( # pylint: disable=unused-import
    +    DeleteSnapshotsOptionType,
    +    BlobHTTPHeaders,
    +    BlockLookupList,
    +    AppendPositionAccessConditions,
    +    SequenceNumberAccessConditions,
    +    StorageErrorException,
    +    UserDelegationKey,
    +    CpkInfo)
    +from ._serialize import get_modify_conditions, get_source_conditions, get_cpk_scope_info, get_api_version
    +from ._deserialize import get_page_ranges_result, deserialize_blob_properties, deserialize_blob_stream
    +from ._upload_helpers import (
    +    upload_block_blob,
    +    upload_append_blob,
    +    upload_page_blob)
    +from ._models import BlobType, BlobBlock
    +from ._download import StorageStreamDownloader
    +from ._lease import BlobLeaseClient, get_access_conditions
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from ._generated.models import BlockList
    +    from ._models import (  # pylint: disable=unused-import
    +        ContainerProperties,
    +        BlobProperties,
    +        BlobSasPermissions,
    +        ContentSettings,
    +        PremiumPageBlobTier,
    +        StandardBlobTier,
    +        SequenceNumberAction
    +    )
    +
    +_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION = (
    +    'The require_encryption flag is set, but encryption is not supported'
    +    ' for this method.')
    +
    +
    +class BlobClient(StorageAccountHostsMixin):  # pylint: disable=too-many-public-methods
    +    """A client to interact with a specific blob, although that blob may not yet exist.
    +
    +    :param str account_url:
    +        The URI to the storage account. In order to create a client given the full URI to the blob,
    +        use the :func:`from_blob_url` classmethod.
    +    :param container_name: The container name for the blob.
    +    :type container_name: str
    +    :param blob_name: The name of the blob with which to interact. If specified, this value will override
    +        a blob value specified in the blob URL.
    +    :type blob_name: str
    +    :param str snapshot:
    +        The optional blob snapshot on which to operate. This can be the snapshot ID string
    +        or the response returned from :func:`create_snapshot`.
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +        The Storage API version to use for requests. Default value is '2019-07-07'.
    +        Setting to an older version may result in reduced feature compatibility.
    +
    +        .. versionadded:: 12.2.0
    +
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +    :keyword int max_block_size: The maximum chunk size for uploading a block blob in chunks.
    +        Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_put_size: If the blob size is less than max_single_put_size, then the blob will be
    +        uploaded with only one http PUT request. If the blob size is larger than max_single_put_size,
    +        the blob will be uploaded in chunks. Defaults to 64*1024*1024, or 64MB.
    +    :keyword int min_large_block_upload_threshold: The minimum chunk size required to use the memory efficient
    +        algorithm when uploading a block blob. Defaults to 4*1024*1024+1.
    +    :keyword bool use_byte_buffer: Use a byte buffer for block blob uploads. Defaults to False.
    +    :keyword int max_page_size: The maximum chunk size for uploading a page blob. Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_get_size: The maximum size for a blob to be downloaded in a single call,
    +        the exceeded part will be downloaded in chunks (could be parallel). Defaults to 32*1024*1024, or 32MB.
    +    :keyword int max_chunk_get_size: The maximum chunk size used for downloading a blob. Defaults to 4*1024*1024,
    +        or 4MB.
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication.py
    +            :start-after: [START create_blob_client]
    +            :end-before: [END create_blob_client]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobClient from a URL to a public blob (no auth needed).
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication.py
    +            :start-after: [START create_blob_client_sas_url]
    +            :end-before: [END create_blob_client_sas_url]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobClient from a SAS URL to a blob.
    +    """
    +    def __init__(
    +            self, account_url,  # type: str
    +            container_name,  # type: str
    +            blob_name,  # type: str
    +            snapshot=None,  # type: Optional[Union[str, Dict[str, Any]]]
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):
    +        # type: (...) -> None
    +        try:
    +            if not account_url.lower().startswith('http'):
    +                account_url = "https://" + account_url
    +        except AttributeError:
    +            raise ValueError("Account URL must be a string.")
    +        parsed_url = urlparse(account_url.rstrip('/'))
    +
    +        if not (container_name and blob_name):
    +            raise ValueError("Please specify a container name and blob name.")
    +        if not parsed_url.netloc:
    +            raise ValueError("Invalid URL: {}".format(account_url))
    +
    +        path_snapshot, sas_token = parse_query(parsed_url.query)
    +
    +        self.container_name = container_name
    +        self.blob_name = blob_name
    +        try:
    +            self.snapshot = snapshot.snapshot # type: ignore
    +        except AttributeError:
    +            try:
    +                self.snapshot = snapshot['snapshot'] # type: ignore
    +            except TypeError:
    +                self.snapshot = snapshot or path_snapshot
    +
    +        self._query_str, credential = self._format_query_string(sas_token, credential, snapshot=self.snapshot)
    +        super(BlobClient, self).__init__(parsed_url, service='blob', credential=credential, **kwargs)
    +        self._client = AzureBlobStorage(self.url, pipeline=self._pipeline)
    +        self._client._config.version = get_api_version(kwargs, VERSION)  # pylint: disable=protected-access
    +
    +    def _format_url(self, hostname):
    +        container_name = self.container_name
    +        if isinstance(container_name, six.text_type):
    +            container_name = container_name.encode('UTF-8')
    +        return "{}://{}/{}/{}{}".format(
    +            self.scheme,
    +            hostname,
    +            quote(container_name),
    +            quote(self.blob_name, safe='~'),
    +            self._query_str)
    +
    +    @classmethod
    +    def from_blob_url(cls, blob_url, credential=None, snapshot=None, **kwargs):
    +        # type: (str, Optional[Any], Optional[Union[str, Dict[str, Any]]], Any) -> BlobClient
    +        """Create BlobClient from a blob url.
    +
    +        :param str blob_url:
    +            The full endpoint URL to the Blob, including SAS token and snapshot if used. This could be
    +            either the primary endpoint, or the secondary endpoint depending on the current `location_mode`.
    +        :type blob_url: str
    +        :param credential:
    +            The credentials with which to authenticate. This is optional if the
    +            account URL already has a SAS token, or the connection string already has shared
    +            access key values. The value can be a SAS token string, an account shared access
    +            key, or an instance of a TokenCredentials class from azure.identity.
    +            Credentials provided here will take precedence over those in the connection string.
    +        :param str snapshot:
    +            The optional blob snapshot on which to operate. This can be the snapshot ID string
    +            or the response returned from :func:`create_snapshot`. If specified, this will override
    +            the snapshot in the url.
    +        :returns: A Blob client.
    +        :rtype: ~azure.storage.blob.BlobClient
    +        """
    +        try:
    +            if not blob_url.lower().startswith('http'):
    +                blob_url = "https://" + blob_url
    +        except AttributeError:
    +            raise ValueError("Blob URL must be a string.")
    +        parsed_url = urlparse(blob_url.rstrip('/'))
    +
    +        if not parsed_url.netloc:
    +            raise ValueError("Invalid URL: {}".format(blob_url))
    +
    +        path_blob = parsed_url.path.lstrip('/').split('/')
    +        account_path = ""
    +        if len(path_blob) > 2:
    +            account_path = "/" + "/".join(path_blob[:-2])
    +        account_url = "{}://{}{}?{}".format(
    +            parsed_url.scheme,
    +            parsed_url.netloc.rstrip('/'),
    +            account_path,
    +            parsed_url.query)
    +        container_name, blob_name = unquote(path_blob[-2]), unquote(path_blob[-1])
    +        if not container_name or not blob_name:
    +            raise ValueError("Invalid URL. Provide a blob_url with a valid blob and container name.")
    +
    +        path_snapshot, _ = parse_query(parsed_url.query)
    +        if snapshot:
    +            try:
    +                path_snapshot = snapshot.snapshot # type: ignore
    +            except AttributeError:
    +                try:
    +                    path_snapshot = snapshot['snapshot'] # type: ignore
    +                except TypeError:
    +                    path_snapshot = snapshot
    +
    +        return cls(
    +            account_url, container_name=container_name, blob_name=blob_name,
    +            snapshot=path_snapshot, credential=credential, **kwargs
    +        )
    +
    +    @classmethod
    +    def from_connection_string(
    +            cls, conn_str,  # type: str
    +            container_name,  # type: str
    +            blob_name,  # type: str
    +            snapshot=None,  # type: Optional[str]
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):  # type: (...) -> BlobClient
    +        """Create BlobClient from a Connection String.
    +
    +        :param str conn_str:
    +            A connection string to an Azure Storage account.
    +        :param container_name: The container name for the blob.
    +        :type container_name: str
    +        :param blob_name: The name of the blob with which to interact.
    +        :type blob_name: str
    +        :param str snapshot:
    +            The optional blob snapshot on which to operate. This can be the snapshot ID string
    +            or the response returned from :func:`create_snapshot`.
    +        :param credential:
    +            The credentials with which to authenticate. This is optional if the
    +            account URL already has a SAS token, or the connection string already has shared
    +            access key values. The value can be a SAS token string, an account shared access
    +            key, or an instance of a TokenCredentials class from azure.identity.
    +            Credentials provided here will take precedence over those in the connection string.
    +        :returns: A Blob client.
    +        :rtype: ~azure.storage.blob.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_authentication.py
    +                :start-after: [START auth_from_connection_string_blob]
    +                :end-before: [END auth_from_connection_string_blob]
    +                :language: python
    +                :dedent: 8
    +                :caption: Creating the BlobClient from a connection string.
    +        """
    +        account_url, secondary, credential = parse_connection_str(conn_str, credential, 'blob')
    +        if 'secondary_hostname' not in kwargs:
    +            kwargs['secondary_hostname'] = secondary
    +        return cls(
    +            account_url, container_name=container_name, blob_name=blob_name,
    +            snapshot=snapshot, credential=credential, **kwargs
    +        )
    +
    +    @distributed_trace
    +    def get_account_information(self, **kwargs):
    +        # type: (**Any) -> Dict[str, str]
    +        """Gets information related to the storage account in which the blob resides.
    +
    +        The information can also be retrieved if the user has a SAS to a container or blob.
    +        The keys in the returned dictionary include 'sku_name' and 'account_kind'.
    +
    +        :returns: A dict of account information (SKU and account type).
    +        :rtype: dict(str, str)
    +        """
    +        try:
    +            return self._client.blob.get_account_info(cls=return_response_headers, **kwargs) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _upload_blob_options(  # pylint:disable=too-many-statements
    +            self, data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            blob_type=BlobType.BlockBlob,  # type: Union[str, BlobType]
    +            length=None,  # type: Optional[int]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption and not self.key_encryption_key:
    +            raise ValueError("Encryption required but no key was provided.")
    +        encryption_options = {
    +            'required': self.require_encryption,
    +            'key': self.key_encryption_key,
    +            'resolver': self.key_resolver_function,
    +        }
    +        if self.key_encryption_key is not None:
    +            cek, iv, encryption_data = generate_blob_encryption_data(self.key_encryption_key)
    +            encryption_options['cek'] = cek
    +            encryption_options['vector'] = iv
    +            encryption_options['data'] = encryption_data
    +
    +        encoding = kwargs.pop('encoding', 'UTF-8')
    +        if isinstance(data, six.text_type):
    +            data = data.encode(encoding) # type: ignore
    +        if length is None:
    +            length = get_length(data)
    +        if isinstance(data, bytes):
    +            data = data[:length]
    +
    +        if isinstance(data, bytes):
    +            stream = BytesIO(data)
    +        elif hasattr(data, 'read'):
    +            stream = data
    +        elif hasattr(data, '__iter__'):
    +            stream = IterStreamer(data, encoding=encoding)
    +        else:
    +            raise TypeError("Unsupported data type: {}".format(type(data)))
    +
    +        validate_content = kwargs.pop('validate_content', False)
    +        content_settings = kwargs.pop('content_settings', None)
    +        overwrite = kwargs.pop('overwrite', False)
    +        max_concurrency = kwargs.pop('max_concurrency', 1)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        kwargs['cpk_info'] = cpk_info
    +
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        kwargs['lease_access_conditions'] = get_access_conditions(kwargs.pop('lease', None))
    +        kwargs['modified_access_conditions'] = get_modify_conditions(kwargs)
    +        kwargs['cpk_scope_info'] = get_cpk_scope_info(kwargs)
    +        if content_settings:
    +            kwargs['blob_headers'] = BlobHTTPHeaders(
    +                blob_cache_control=content_settings.cache_control,
    +                blob_content_type=content_settings.content_type,
    +                blob_content_md5=bytearray(content_settings.content_md5) if content_settings.content_md5 else None,
    +                blob_content_encoding=content_settings.content_encoding,
    +                blob_content_language=content_settings.content_language,
    +                blob_content_disposition=content_settings.content_disposition
    +            )
    +        kwargs['stream'] = stream
    +        kwargs['length'] = length
    +        kwargs['overwrite'] = overwrite
    +        kwargs['headers'] = headers
    +        kwargs['validate_content'] = validate_content
    +        kwargs['blob_settings'] = self._config
    +        kwargs['max_concurrency'] = max_concurrency
    +        kwargs['encryption_options'] = encryption_options
    +        if blob_type == BlobType.BlockBlob:
    +            kwargs['client'] = self._client.block_blob
    +            kwargs['data'] = data
    +        elif blob_type == BlobType.PageBlob:
    +            kwargs['client'] = self._client.page_blob
    +        elif blob_type == BlobType.AppendBlob:
    +            if self.require_encryption or (self.key_encryption_key is not None):
    +                raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +            kwargs['client'] = self._client.append_blob
    +        else:
    +            raise ValueError("Unsupported BlobType: {}".format(blob_type))
    +        return kwargs
    +
    +    @distributed_trace
    +    def upload_blob(  # pylint: disable=too-many-locals
    +            self, data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            blob_type=BlobType.BlockBlob,  # type: Union[str, BlobType]
    +            length=None,  # type: Optional[int]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Any
    +        """Creates a new blob from a data source with automatic chunking.
    +
    +        :param data: The blob data to upload.
    +        :param ~azure.storage.blob.BlobType blob_type: The type of the blob. This can be
    +            either BlockBlob, PageBlob or AppendBlob. The default value is BlockBlob.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword bool overwrite: Whether the blob to be uploaded should overwrite the current data.
    +            If True, upload_blob will overwrite the existing data. If set to False, the
    +            operation will fail with ResourceExistsError. The exception to the above is with Append
    +            blob types: if set to False and the data already exists, an error will not be raised
    +            and the data will be appended to the existing blob. If set overwrite=True, then the existing
    +            append blob will be deleted, and a new one created. Defaults to False.
    +        :keyword ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, upload_blob only succeeds if the
    +            blob's lease is active and matches this ID. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int max_concurrency:
    +            Maximum number of parallel connections to use when the blob size exceeds
    +            64MB.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :returns: Blob-updated property dict (Etag and last modified)
    +        :rtype: dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_hello_world.py
    +                :start-after: [START upload_a_blob]
    +                :end-before: [END upload_a_blob]
    +                :language: python
    +                :dedent: 12
    +                :caption: Upload a blob to the container.
    +        """
    +        options = self._upload_blob_options(
    +            data,
    +            blob_type=blob_type,
    +            length=length,
    +            metadata=metadata,
    +            **kwargs)
    +        if blob_type == BlobType.BlockBlob:
    +            return upload_block_blob(**options)
    +        if blob_type == BlobType.PageBlob:
    +            return upload_page_blob(**options)
    +        return upload_append_blob(**options)
    +
    +    def _download_blob_options(self, offset=None, length=None, **kwargs):
    +        # type: (Optional[int], Optional[int], **Any) -> Dict[str, Any]
    +        if self.require_encryption and not self.key_encryption_key:
    +            raise ValueError("Encryption required but no key was provided.")
    +        if length is not None and offset is None:
    +            raise ValueError("Offset value must not be None if length is set.")
    +        if length is not None:
    +            length = offset + length - 1  # Service actually uses an end-range inclusive index
    +
    +        validate_content = kwargs.pop('validate_content', False)
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'clients': self._client,
    +            'config': self._config,
    +            'start_range': offset,
    +            'end_range': length,
    +            'validate_content': validate_content,
    +            'encryption_options': {
    +                'required': self.require_encryption,
    +                'key': self.key_encryption_key,
    +                'resolver': self.key_resolver_function},
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_info': cpk_info,
    +            'cls': deserialize_blob_stream,
    +            'max_concurrency':kwargs.pop('max_concurrency', 1),
    +            'encoding': kwargs.pop('encoding', None),
    +            'timeout': kwargs.pop('timeout', None),
    +            'name': self.blob_name,
    +            'container': self.container_name}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def download_blob(self, offset=None, length=None, **kwargs):
    +        # type: (Optional[int], Optional[int], **Any) -> StorageStreamDownloader
    +        """Downloads a blob to the StorageStreamDownloader. The readall() method must
    +        be used to read all the content or readinto() must be used to download the blob into
    +        a stream.
    +
    +        :param int offset:
    +            Start of byte range to use for downloading a section of the blob.
    +            Must be set if length is provided.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, download_blob only
    +            succeeds if the blob's lease is active and matches this ID. Value can be a
    +            BlobLeaseClient object or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :keyword str encoding:
    +            Encoding to decode the downloaded bytes. Default is None, i.e. no decoding.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :returns: A streaming object (StorageStreamDownloader)
    +        :rtype: ~azure.storage.blob.StorageStreamDownloader
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_hello_world.py
    +                :start-after: [START download_a_blob]
    +                :end-before: [END download_a_blob]
    +                :language: python
    +                :dedent: 12
    +                :caption: Download a blob.
    +        """
    +        options = self._download_blob_options(
    +            offset=offset,
    +            length=length,
    +            **kwargs)
    +        return StorageStreamDownloader(**options)
    +
    +    @staticmethod
    +    def _generic_delete_blob_options(delete_snapshots=False, **kwargs):
    +        # type: (bool, **Any) -> Dict[str, Any]
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        if delete_snapshots:
    +            delete_snapshots = DeleteSnapshotsOptionType(delete_snapshots)
    +        options = {
    +            'timeout': kwargs.pop('timeout', None),
    +            'delete_snapshots': delete_snapshots or None,
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions}
    +        options.update(kwargs)
    +        return options
    +
    +    def _delete_blob_options(self, delete_snapshots=False, **kwargs):
    +        # type: (bool, **Any) -> Dict[str, Any]
    +        if self.snapshot and delete_snapshots:
    +            raise ValueError("The delete_snapshots option cannot be used with a specific snapshot.")
    +        options = self._generic_delete_blob_options(delete_snapshots, **kwargs)
    +        options['snapshot'] = self.snapshot
    +        return options
    +
    +    @distributed_trace
    +    def delete_blob(self, delete_snapshots=False, **kwargs):
    +        # type: (bool, **Any) -> None
    +        """Marks the specified blob for deletion.
    +
    +        The blob is later deleted during garbage collection.
    +        Note that in order to delete a blob, you must delete all of its
    +        snapshots. You can delete both at the same time with the delete_blob()
    +        operation.
    +
    +        If a delete retention policy is enabled for the service, then this operation soft deletes the blob
    +        and retains the blob for a specified number of days.
    +        After the specified number of days, the blob's data is removed from the service during garbage collection.
    +        Soft deleted blob is accessible through :func:`~ContainerClient.list_blobs()` specifying `include=['deleted']`
    +        option. Soft-deleted blob can be restored using :func:`undelete` operation.
    +
    +        :param str delete_snapshots:
    +            Required if the blob has associated snapshots. Values include:
    +             - "only": Deletes only the blobs snapshots.
    +             - "include": Deletes the blob along with all snapshots.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, delete_blob only
    +            succeeds if the blob's lease is active and matches this ID. Value can be a
    +            BlobLeaseClient object or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_hello_world.py
    +                :start-after: [START delete_blob]
    +                :end-before: [END delete_blob]
    +                :language: python
    +                :dedent: 12
    +                :caption: Delete a blob.
    +        """
    +        options = self._delete_blob_options(delete_snapshots=delete_snapshots, **kwargs)
    +        try:
    +            self._client.blob.delete(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def undelete_blob(self, **kwargs):
    +        # type: (**Any) -> None
    +        """Restores soft-deleted blobs or snapshots.
    +
    +        Operation will only be successful if used within the specified number of days
    +        set in the delete retention policy.
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START undelete_blob]
    +                :end-before: [END undelete_blob]
    +                :language: python
    +                :dedent: 8
    +                :caption: Undeleting a blob.
    +        """
    +        try:
    +            self._client.blob.undelete(timeout=kwargs.pop('timeout', None), **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def get_blob_properties(self, **kwargs):
    +        # type: (**Any) -> BlobProperties
    +        """Returns all user-defined metadata, standard HTTP properties, and
    +        system properties for the blob. It does not return the content of the blob.
    +
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: BlobProperties
    +        :rtype: ~azure.storage.blob.BlobProperties
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START get_blob_properties]
    +                :end-before: [END get_blob_properties]
    +                :language: python
    +                :dedent: 8
    +                :caption: Getting the properties for a blob.
    +        """
    +        # TODO: extract this out as _get_blob_properties_options
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        try:
    +            blob_props = self._client.blob.get_properties(
    +                timeout=kwargs.pop('timeout', None),
    +                snapshot=self.snapshot,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                cls=deserialize_blob_properties,
    +                cpk_info=cpk_info,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        blob_props.name = self.blob_name
    +        blob_props.container = self.container_name
    +        return blob_props # type: ignore
    +
    +    def _set_http_headers_options(self, content_settings=None, **kwargs):
    +        # type: (Optional[ContentSettings], **Any) -> Dict[str, Any]
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        blob_headers = None
    +        if content_settings:
    +            blob_headers = BlobHTTPHeaders(
    +                blob_cache_control=content_settings.cache_control,
    +                blob_content_type=content_settings.content_type,
    +                blob_content_md5=bytearray(content_settings.content_md5) if content_settings.content_md5 else None,
    +                blob_content_encoding=content_settings.content_encoding,
    +                blob_content_language=content_settings.content_language,
    +                blob_content_disposition=content_settings.content_disposition
    +            )
    +        options = {
    +            'timeout': kwargs.pop('timeout', None),
    +            'blob_http_headers': blob_headers,
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def set_http_headers(self, content_settings=None, **kwargs):
    +        # type: (Optional[ContentSettings], **Any) -> None
    +        """Sets system properties on the blob.
    +
    +        If one property is set for the content_settings, all properties will be overridden.
    +
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified)
    +        :rtype: Dict[str, Any]
    +        """
    +        options = self._set_http_headers_options(content_settings=content_settings, **kwargs)
    +        try:
    +            return self._client.blob.set_http_headers(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _set_blob_metadata_options(self, metadata=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], **Any) -> Dict[str, Any]
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        options = {
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers,
    +            'headers': headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def set_blob_metadata(self, metadata=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], **Any) -> Dict[str, Union[str, datetime]]
    +        """Sets user-defined metadata for the blob as one or more name-value pairs.
    +
    +        :param metadata:
    +            Dict containing name and value pairs. Each call to this operation
    +            replaces all existing metadata attached to the blob. To remove all
    +            metadata from the blob, call this operation with no metadata headers.
    +        :type metadata: dict(str, str)
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified)
    +        """
    +        options = self._set_blob_metadata_options(metadata=metadata, **kwargs)
    +        try:
    +            return self._client.blob.set_metadata(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _create_page_blob_options(  # type: ignore
    +            self, size,  # type: int
    +            content_settings=None,  # type: Optional[ContentSettings]
    +            metadata=None, # type: Optional[Dict[str, str]]
    +            premium_page_blob_tier=None,  # type: Optional[Union[str, PremiumPageBlobTier]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        blob_headers = None
    +        if content_settings:
    +            blob_headers = BlobHTTPHeaders(
    +                blob_cache_control=content_settings.cache_control,
    +                blob_content_type=content_settings.content_type,
    +                blob_content_md5=bytearray(content_settings.content_md5) if content_settings.content_md5 else None,
    +                blob_content_encoding=content_settings.content_encoding,
    +                blob_content_language=content_settings.content_language,
    +                blob_content_disposition=content_settings.content_disposition
    +            )
    +
    +        sequence_number = kwargs.pop('sequence_number', None)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        if premium_page_blob_tier:
    +            try:
    +                headers['x-ms-access-tier'] = premium_page_blob_tier.value  # type: ignore
    +            except AttributeError:
    +                headers['x-ms-access-tier'] = premium_page_blob_tier  # type: ignore
    +        options = {
    +            'content_length': 0,
    +            'blob_content_length': size,
    +            'blob_sequence_number': sequence_number,
    +            'blob_http_headers': blob_headers,
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers,
    +            'headers': headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def create_page_blob(  # type: ignore
    +            self, size,  # type: int
    +            content_settings=None,  # type: Optional[ContentSettings]
    +            metadata=None, # type: Optional[Dict[str, str]]
    +            premium_page_blob_tier=None,  # type: Optional[Union[str, PremiumPageBlobTier]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Creates a new Page Blob of the specified size.
    +
    +        :param int size:
    +            This specifies the maximum size for the page blob, up to 1 TB.
    +            The page blob size must be aligned to a 512-byte boundary.
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :param ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword int sequence_number:
    +            Only for Page blobs. The sequence number is a user-controlled value that you can use to
    +            track requests. The value of the sequence number must be between 0
    +            and 2^63 - 1.The default value is 0.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict[str, Any]
    +        """
    +        options = self._create_page_blob_options(
    +            size,
    +            content_settings=content_settings,
    +            metadata=metadata,
    +            premium_page_blob_tier=premium_page_blob_tier,
    +            **kwargs)
    +        try:
    +            return self._client.page_blob.create(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _create_append_blob_options(self, content_settings=None, metadata=None, **kwargs):
    +        # type: (Optional[ContentSettings], Optional[Dict[str, str]], **Any) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        blob_headers = None
    +        if content_settings:
    +            blob_headers = BlobHTTPHeaders(
    +                blob_cache_control=content_settings.cache_control,
    +                blob_content_type=content_settings.content_type,
    +                blob_content_md5=bytearray(content_settings.content_md5) if content_settings.content_md5 else None,
    +                blob_content_encoding=content_settings.content_encoding,
    +                blob_content_language=content_settings.content_language,
    +                blob_content_disposition=content_settings.content_disposition
    +            )
    +
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'content_length': 0,
    +            'blob_http_headers': blob_headers,
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers,
    +            'headers': headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def create_append_blob(self, content_settings=None, metadata=None, **kwargs):
    +        # type: (Optional[ContentSettings], Optional[Dict[str, str]], **Any) -> Dict[str, Union[str, datetime]]
    +        """Creates a new Append Blob.
    +
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict[str, Any]
    +        """
    +        options = self._create_append_blob_options(
    +            content_settings=content_settings,
    +            metadata=metadata,
    +            **kwargs)
    +        try:
    +            return self._client.append_blob.create(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _create_snapshot_options(self, metadata=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], **Any) -> Dict[str, Any]
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers,
    +            'headers': headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def create_snapshot(self, metadata=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], **Any) -> Dict[str, Union[str, datetime]]
    +        """Creates a snapshot of the blob.
    +
    +        A snapshot is a read-only version of a blob that's taken at a point in time.
    +        It can be read, copied, or deleted, but not modified. Snapshots provide a way
    +        to back up a blob as it appears at a moment in time.
    +
    +        A snapshot of a blob has the same name as the base blob from which the snapshot
    +        is taken, with a DateTime value appended to indicate the time at which the
    +        snapshot was taken.
    +
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Snapshot ID, Etag, and last modified).
    +        :rtype: dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START create_blob_snapshot]
    +                :end-before: [END create_blob_snapshot]
    +                :language: python
    +                :dedent: 8
    +                :caption: Create a snapshot of the blob.
    +        """
    +        options = self._create_snapshot_options(metadata=metadata, **kwargs)
    +        try:
    +            return self._client.blob.create_snapshot(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _start_copy_from_url_options(self, source_url, metadata=None, incremental_copy=False, **kwargs):
    +        # type: (str, Optional[Dict[str, str]], bool, **Any) -> Dict[str, Any]
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        if 'source_lease' in kwargs:
    +            source_lease = kwargs.pop('source_lease')
    +            try:
    +                headers['x-ms-source-lease-id'] = source_lease.id # type: str
    +            except AttributeError:
    +                headers['x-ms-source-lease-id'] = source_lease
    +
    +        tier = kwargs.pop('premium_page_blob_tier', None) or kwargs.pop('standard_blob_tier', None)
    +
    +        if kwargs.get('requires_sync'):
    +            headers['x-ms-requires-sync'] = str(kwargs.pop('requires_sync'))
    +
    +        timeout = kwargs.pop('timeout', None)
    +        dest_mod_conditions = get_modify_conditions(kwargs)
    +        options = {
    +            'copy_source': source_url,
    +            'timeout': timeout,
    +            'modified_access_conditions': dest_mod_conditions,
    +            'headers': headers,
    +            'cls': return_response_headers,
    +        }
    +        if not incremental_copy:
    +            source_mod_conditions = get_source_conditions(kwargs)
    +            dest_access_conditions = get_access_conditions(kwargs.pop('destination_lease', None))
    +            options['source_modified_access_conditions'] = source_mod_conditions
    +            options['lease_access_conditions'] = dest_access_conditions
    +            options['tier'] = tier.value if tier else None
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def start_copy_from_url(self, source_url, metadata=None, incremental_copy=False, **kwargs):
    +        # type: (str, Optional[Dict[str, str]], bool, **Any) -> Dict[str, Union[str, datetime]]
    +        """Copies a blob asynchronously.
    +
    +        This operation returns a copy operation
    +        object that can be used to wait on the completion of the operation,
    +        as well as check status or abort the copy operation.
    +        The Blob service copies blobs on a best-effort basis.
    +
    +        The source blob for a copy operation may be a block blob, an append blob,
    +        or a page blob. If the destination blob already exists, it must be of the
    +        same blob type as the source blob. Any existing destination blob will be
    +        overwritten. The destination blob cannot be modified while a copy operation
    +        is in progress.
    +
    +        When copying from a page blob, the Blob service creates a destination page
    +        blob of the source blob's length, initially containing all zeroes. Then
    +        the source page ranges are enumerated, and non-empty ranges are copied.
    +
    +        For a block blob or an append blob, the Blob service creates a committed
    +        blob of zero length before returning from this operation. When copying
    +        from a block blob, all committed blocks and their block IDs are copied.
    +        Uncommitted blocks are not copied. At the end of the copy operation, the
    +        destination blob will have the same committed block count as the source.
    +
    +        When copying from an append blob, all committed blocks are copied. At the
    +        end of the copy operation, the destination blob will have the same committed
    +        block count as the source.
    +
    +        For all blob types, you can call status() on the returned polling object
    +        to check the status of the copy operation, or wait() to block until the
    +        operation is complete. The final blob will be committed when the copy completes.
    +
    +        :param str source_url:
    +            A URL of up to 2 KB in length that specifies a file or blob.
    +            The value should be URL-encoded as it would appear in a request URI.
    +            If the source is in another account, the source must either be public
    +            or must be authenticated via a shared access signature. If the source
    +            is public, no authentication is required.
    +            Examples:
    +            https://myaccount.blob.core.windows.net/mycontainer/myblob
    +
    +            https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=
    +
    +            https://otheraccount.blob.core.windows.net/mycontainer/myblob?sastoken
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata. If no name-value
    +            pairs are specified, the operation will copy the metadata from the
    +            source blob or file to the destination blob. If one or more name-value
    +            pairs are specified, the destination blob is created with the specified
    +            metadata, and metadata is not copied from the source blob or file.
    +        :type metadata: dict(str, str)
    +        :param bool incremental_copy:
    +            Copies the snapshot of the source page blob to a destination page blob.
    +            The snapshot is copied such that only the differential changes between
    +            the previously copied snapshot are transferred to the destination.
    +            The copied snapshots are complete copies of the original snapshot and
    +            can be read or copied from as usual. Defaults to False.
    +        :keyword ~datetime.datetime source_if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only if the source
    +            blob has been modified since the specified date/time.
    +        :keyword ~datetime.datetime source_if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only if the source blob
    +            has not been modified since the specified date/time.
    +        :keyword str source_etag:
    +            The source ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions source_match_condition:
    +            The source match condition to use upon the etag.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only
    +            if the destination blob has been modified since the specified date/time.
    +            If the destination blob has not been modified, the Blob service returns
    +            status code 412 (Precondition Failed).
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only
    +            if the destination blob has not been modified since the specified
    +            date/time. If the destination blob has been modified, the Blob service
    +            returns status code 412 (Precondition Failed).
    +        :keyword str etag:
    +            The destination ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The destination match condition to use upon the etag.
    +        :keyword destination_lease:
    +            The lease ID specified for this header must match the lease ID of the
    +            destination blob. If the request does not include the lease ID or it is not
    +            valid, the operation fails with status code 412 (Precondition Failed).
    +        :paramtype destination_lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword source_lease:
    +            Specify this to perform the Copy Blob operation only if
    +            the lease ID given matches the active lease ID of the source blob.
    +        :paramtype source_lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword ~azure.storage.blob.RehydratePriority rehydrate_priority:
    +            Indicates the priority with which to rehydrate an archived blob
    +        :keyword bool requires_sync:
    +            Enforces that the service will not return a response until the copy is complete.
    +        :returns: A dictionary of copy properties (etag, last_modified, copy_id, copy_status).
    +        :rtype: dict[str, str or ~datetime.datetime]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START copy_blob_from_url]
    +                :end-before: [END copy_blob_from_url]
    +                :language: python
    +                :dedent: 12
    +                :caption: Copy a blob from a URL.
    +        """
    +        options = self._start_copy_from_url_options(
    +            source_url,
    +            metadata=metadata,
    +            incremental_copy=incremental_copy,
    +            **kwargs)
    +        try:
    +            if incremental_copy:
    +                return self._client.page_blob.copy_incremental(**options)
    +            return self._client.blob.start_copy_from_url(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _abort_copy_options(self, copy_id, **kwargs):
    +        # type: (Union[str, Dict[str, Any], BlobProperties], **Any) -> Dict[str, Any]
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        try:
    +            copy_id = copy_id.copy.id
    +        except AttributeError:
    +            try:
    +                copy_id = copy_id['copy_id']
    +            except TypeError:
    +                pass
    +        options = {
    +            'copy_id': copy_id,
    +            'lease_access_conditions': access_conditions,
    +            'timeout': kwargs.pop('timeout', None)}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def abort_copy(self, copy_id, **kwargs):
    +        # type: (Union[str, Dict[str, Any], BlobProperties], **Any) -> None
    +        """Abort an ongoing copy operation.
    +
    +        This will leave a destination blob with zero length and full metadata.
    +        This will raise an error if the copy operation has already ended.
    +
    +        :param copy_id:
    +            The copy operation to abort. This can be either an ID string, or an
    +            instance of BlobProperties.
    +        :type copy_id: str or ~azure.storage.blob.BlobProperties
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START abort_copy_blob_from_url]
    +                :end-before: [END abort_copy_blob_from_url]
    +                :language: python
    +                :dedent: 12
    +                :caption: Abort copying a blob from URL.
    +        """
    +        options = self._abort_copy_options(copy_id, **kwargs)
    +        try:
    +            self._client.blob.abort_copy_from_url(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def acquire_lease(self, lease_duration=-1, lease_id=None, **kwargs):
    +        # type: (int, Optional[str], **Any) -> BlobLeaseClient
    +        """Requests a new lease.
    +
    +        If the blob does not have an active lease, the Blob
    +        Service creates a lease on the blob and returns a new lease.
    +
    +        :param int lease_duration:
    +            Specifies the duration of the lease, in seconds, or negative one
    +            (-1) for a lease that never expires. A non-infinite lease can be
    +            between 15 and 60 seconds. A lease duration cannot be changed
    +            using renew or change. Default is -1 (infinite lease).
    +        :param str lease_id:
    +            Proposed lease ID, in a GUID string format. The Blob Service
    +            returns 400 (Invalid request) if the proposed lease ID is not
    +            in the correct format.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: A BlobLeaseClient object.
    +        :rtype: ~azure.storage.blob.BlobLeaseClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START acquire_lease_on_blob]
    +                :end-before: [END acquire_lease_on_blob]
    +                :language: python
    +                :dedent: 8
    +                :caption: Acquiring a lease on a blob.
    +        """
    +        lease = BlobLeaseClient(self, lease_id=lease_id) # type: ignore
    +        lease.acquire(lease_duration=lease_duration, **kwargs)
    +        return lease
    +
    +    @distributed_trace
    +    def set_standard_blob_tier(self, standard_blob_tier, **kwargs):
    +        # type: (Union[str, StandardBlobTier], Any) -> None
    +        """This operation sets the tier on a block blob.
    +
    +        A block blob's tier determines Hot/Cool/Archive storage type.
    +        This operation does not update the blob's ETag.
    +
    +        :param standard_blob_tier:
    +            Indicates the tier to be set on the blob. Options include 'Hot', 'Cool',
    +            'Archive'. The hot tier is optimized for storing data that is accessed
    +            frequently. The cool storage tier is optimized for storing data that
    +            is infrequently accessed and stored for at least a month. The archive
    +            tier is optimized for storing data that is rarely accessed and stored
    +            for at least six months with flexible latency requirements.
    +        :type standard_blob_tier: str or ~azure.storage.blob.StandardBlobTier
    +        :keyword ~azure.storage.blob.RehydratePriority rehydrate_priority:
    +            Indicates the priority with which to rehydrate an archived blob
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :rtype: None
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if standard_blob_tier is None:
    +            raise ValueError("A StandardBlobTier must be specified")
    +        try:
    +            self._client.blob.set_tier(
    +                tier=standard_blob_tier,
    +                timeout=kwargs.pop('timeout', None),
    +                lease_access_conditions=access_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _stage_block_options(
    +            self, block_id,  # type: str
    +            data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +        block_id = encode_base64(str(block_id))
    +        if isinstance(data, six.text_type):
    +            data = data.encode(kwargs.pop('encoding', 'UTF-8'))  # type: ignore
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if length is None:
    +            length = get_length(data)
    +            if length is None:
    +                length, data = read_length(data)
    +        if isinstance(data, bytes):
    +            data = data[:length]
    +
    +        validate_content = kwargs.pop('validate_content', False)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'block_id': block_id,
    +            'content_length': length,
    +            'body': data,
    +            'transactional_content_md5': None,
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'validate_content': validate_content,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +        }
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def stage_block(
    +            self, block_id,  # type: str
    +            data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Creates a new block to be committed as part of a blob.
    +
    +        :param str block_id: A valid Base64 string value that identifies the
    +             block. Prior to encoding, the string must be less than or equal to 64
    +             bytes in size. For a given blob, the length of the value specified for
    +             the block_id parameter must be the same size for each block.
    +        :param data: The blob data.
    +        :param int length: Size of the block.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        options = self._stage_block_options(
    +            block_id,
    +            data,
    +            length=length,
    +            **kwargs)
    +        try:
    +            self._client.block_blob.stage_block(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _stage_block_from_url_options(
    +            self, block_id,  # type: str
    +            source_url,  # type: str
    +            source_offset=None,  # type: Optional[int]
    +            source_length=None,  # type: Optional[int]
    +            source_content_md5=None,  # type: Optional[Union[bytes, bytearray]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if source_length is not None and source_offset is None:
    +            raise ValueError("Source offset value must not be None if length is set.")
    +        if source_length is not None:
    +            source_length = source_offset + source_length - 1
    +        block_id = encode_base64(str(block_id))
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        range_header = None
    +        if source_offset is not None:
    +            range_header, _ = validate_and_format_range_headers(source_offset, source_length)
    +
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        options = {
    +            'block_id': block_id,
    +            'content_length': 0,
    +            'source_url': source_url,
    +            'source_range': range_header,
    +            'source_content_md5': bytearray(source_content_md5) if source_content_md5 else None,
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers,
    +        }
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def stage_block_from_url(
    +            self, block_id,  # type: str
    +            source_url,  # type: str
    +            source_offset=None,  # type: Optional[int]
    +            source_length=None,  # type: Optional[int]
    +            source_content_md5=None,  # type: Optional[Union[bytes, bytearray]]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Creates a new block to be committed as part of a blob where
    +        the contents are read from a URL.
    +
    +        :param str block_id: A valid Base64 string value that identifies the
    +             block. Prior to encoding, the string must be less than or equal to 64
    +             bytes in size. For a given blob, the length of the value specified for
    +             the block_id parameter must be the same size for each block.
    +        :param str source_url: The URL.
    +        :param int source_offset:
    +            Start of byte range to use for the block.
    +            Must be set if source length is provided.
    +        :param int source_length: The size of the block in bytes.
    +        :param bytearray source_content_md5:
    +            Specify the md5 calculated for the range of
    +            bytes that must be read from the copy source.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        options = self._stage_block_from_url_options(
    +            block_id,
    +            source_url,
    +            source_offset=source_offset,
    +            source_length=source_length,
    +            source_content_md5=source_content_md5,
    +            **kwargs)
    +        try:
    +            self._client.block_blob.stage_block_from_url(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _get_block_list_result(self, blocks):
    +        # type: (BlockList) -> Tuple[List[BlobBlock], List[BlobBlock]]
    +        committed = [] # type: List
    +        uncommitted = [] # type: List
    +        if blocks.committed_blocks:
    +            committed = [BlobBlock._from_generated(b) for b in blocks.committed_blocks]  # pylint: disable=protected-access
    +        if blocks.uncommitted_blocks:
    +            uncommitted = [BlobBlock._from_generated(b) for b in blocks.uncommitted_blocks]  # pylint: disable=protected-access
    +        return committed, uncommitted
    +
    +    @distributed_trace
    +    def get_block_list(self, block_list_type="committed", **kwargs):
    +        # type: (Optional[str], **Any) -> Tuple[List[BlobBlock], List[BlobBlock]]
    +        """The Get Block List operation retrieves the list of blocks that have
    +        been uploaded as part of a block blob.
    +
    +        :param str block_list_type:
    +            Specifies whether to return the list of committed
    +            blocks, the list of uncommitted blocks, or both lists together.
    +            Possible values include: 'committed', 'uncommitted', 'all'
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: A tuple of two lists - committed and uncommitted blocks
    +        :rtype: tuple(list(~azure.storage.blob.BlobBlock), list(~azure.storage.blob.BlobBlock))
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        try:
    +            blocks = self._client.block_blob.get_block_list(
    +                list_type=block_list_type,
    +                snapshot=self.snapshot,
    +                timeout=kwargs.pop('timeout', None),
    +                lease_access_conditions=access_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return self._get_block_list_result(blocks)
    +
    +    def _commit_block_list_options( # type: ignore
    +            self, block_list,  # type: List[BlobBlock]
    +            content_settings=None,  # type: Optional[ContentSettings]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +        block_lookup = BlockLookupList(committed=[], uncommitted=[], latest=[])
    +        for block in block_list:
    +            try:
    +                if block.state.value == 'committed':
    +                    block_lookup.committed.append(encode_base64(str(block.id)))
    +                elif block.state.value == 'uncommitted':
    +                    block_lookup.uncommitted.append(encode_base64(str(block.id)))
    +                else:
    +                    block_lookup.latest.append(encode_base64(str(block.id)))
    +            except AttributeError:
    +                block_lookup.latest.append(encode_base64(str(block)))
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        blob_headers = None
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        if content_settings:
    +            blob_headers = BlobHTTPHeaders(
    +                blob_cache_control=content_settings.cache_control,
    +                blob_content_type=content_settings.content_type,
    +                blob_content_md5=bytearray(content_settings.content_md5) if content_settings.content_md5 else None,
    +                blob_content_encoding=content_settings.content_encoding,
    +                blob_content_language=content_settings.content_language,
    +                blob_content_disposition=content_settings.content_disposition
    +            )
    +
    +        validate_content = kwargs.pop('validate_content', False)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        tier = kwargs.pop('standard_blob_tier', None)
    +
    +        options = {
    +            'blocks': block_lookup,
    +            'blob_http_headers': blob_headers,
    +            'lease_access_conditions': access_conditions,
    +            'timeout': kwargs.pop('timeout', None),
    +            'modified_access_conditions': mod_conditions,
    +            'cls': return_response_headers,
    +            'validate_content': validate_content,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'tier': tier.value if tier else None,
    +            'headers': headers
    +        }
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def commit_block_list( # type: ignore
    +            self, block_list,  # type: List[BlobBlock]
    +            content_settings=None,  # type: Optional[ContentSettings]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """The Commit Block List operation writes a blob by specifying the list of
    +        block IDs that make up the blob.
    +
    +        :param list block_list:
    +            List of Blockblobs.
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict[str, str]
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash of the page content. The storage
    +            service checks the hash of the content that has arrived
    +            with the hash that was sent. This is primarily valuable for detecting
    +            bitflips on the wire if using http instead of https, as https (the default),
    +            will already validate. Note that this MD5 hash is not stored with the
    +            blob.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._commit_block_list_options(
    +            block_list,
    +            content_settings=content_settings,
    +            metadata=metadata,
    +            **kwargs)
    +        try:
    +            return self._client.block_blob.commit_block_list(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def set_premium_page_blob_tier(self, premium_page_blob_tier, **kwargs):
    +        # type: (Union[str, PremiumPageBlobTier], **Any) -> None
    +        """Sets the page blob tiers on the blob. This API is only supported for page blobs on premium accounts.
    +
    +        :param premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :type premium_page_blob_tier: ~azure.storage.blob.PremiumPageBlobTier
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :rtype: None
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if premium_page_blob_tier is None:
    +            raise ValueError("A PremiumPageBlobTier must be specified")
    +        try:
    +            self._client.blob.set_tier(
    +                tier=premium_page_blob_tier,
    +                timeout=kwargs.pop('timeout', None),
    +                lease_access_conditions=access_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _get_page_ranges_options( # type: ignore
    +            self, offset=None, # type: Optional[int]
    +            length=None, # type: Optional[int]
    +            previous_snapshot_diff=None,  # type: Optional[Union[str, Dict[str, Any]]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        if length is not None and offset is None:
    +            raise ValueError("Offset value must not be None if length is set.")
    +        if length is not None:
    +            length = offset + length - 1  # Reformat to an inclusive range index
    +        page_range, _ = validate_and_format_range_headers(
    +            offset, length, start_range_required=False, end_range_required=False, align_to_page=True
    +        )
    +        options = {
    +            'snapshot': self.snapshot,
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'timeout': kwargs.pop('timeout', None),
    +            'range': page_range}
    +        if previous_snapshot_diff:
    +            try:
    +                options['prevsnapshot'] = previous_snapshot_diff.snapshot # type: ignore
    +            except AttributeError:
    +                try:
    +                    options['prevsnapshot'] = previous_snapshot_diff['snapshot'] # type: ignore
    +                except TypeError:
    +                    options['prevsnapshot'] = previous_snapshot_diff
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def get_page_ranges( # type: ignore
    +            self, offset=None, # type: Optional[int]
    +            length=None, # type: Optional[int]
    +            previous_snapshot_diff=None,  # type: Optional[Union[str, Dict[str, Any]]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Tuple[List[Dict[str, int]], List[Dict[str, int]]]
    +        """Returns the list of valid page ranges for a Page Blob or snapshot
    +        of a page blob.
    +
    +        :param int offset:
    +            Start of byte range to use for getting valid page ranges.
    +            If no length is given, all bytes after the offset will be searched.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for getting valid page ranges.
    +            If length is given, offset must be provided.
    +            This range will return valid page ranges from the offset start up to
    +            the specified length.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param str previous_snapshot_diff:
    +            The snapshot diff parameter that contains an opaque DateTime value that
    +            specifies a previous blob snapshot to be compared
    +            against a more recent snapshot or the current blob.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns:
    +            A tuple of two lists of page ranges as dictionaries with 'start' and 'end' keys.
    +            The first element are filled page ranges, the 2nd element is cleared page ranges.
    +        :rtype: tuple(list(dict(str, str), list(dict(str, str))
    +        """
    +        options = self._get_page_ranges_options(
    +            offset=offset,
    +            length=length,
    +            previous_snapshot_diff=previous_snapshot_diff,
    +            **kwargs)
    +        try:
    +            if previous_snapshot_diff:
    +                ranges = self._client.page_blob.get_page_ranges_diff(**options)
    +            else:
    +                ranges = self._client.page_blob.get_page_ranges(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return get_page_ranges_result(ranges)
    +
    +    @distributed_trace
    +    def get_page_range_diff_for_managed_disk(
    +            self, previous_snapshot_url,  # type: str
    +            offset=None, # type: Optional[int]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> Tuple[List[Dict[str, int]], List[Dict[str, int]]]
    +        """Returns the list of valid page ranges for a managed disk or snapshot.
    +
    +        .. note::
    +            This operation is only available for managed disk accounts.
    +
    +        .. versionadded:: 12.2.0
    +            This operation was introduced in API version '2019-07-07'.
    +
    +        :param previous_snapshot_url:
    +            Specifies the URL of a previous snapshot of the managed disk.
    +            The response will only contain pages that were changed between the target blob and
    +            its previous snapshot.
    +        :param int offset:
    +            Start of byte range to use for getting valid page ranges.
    +            If no length is given, all bytes after the offset will be searched.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for getting valid page ranges.
    +            If length is given, offset must be provided.
    +            This range will return valid page ranges from the offset start up to
    +            the specified length.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns:
    +            A tuple of two lists of page ranges as dictionaries with 'start' and 'end' keys.
    +            The first element are filled page ranges, the 2nd element is cleared page ranges.
    +        :rtype: tuple(list(dict(str, str), list(dict(str, str))
    +        """
    +        options = self._get_page_ranges_options(
    +            offset=offset,
    +            length=length,
    +            prev_snapshot_url=previous_snapshot_url,
    +            **kwargs)
    +        try:
    +            ranges = self._client.page_blob.get_page_ranges_diff(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return get_page_ranges_result(ranges)
    +
    +    def _set_sequence_number_options(self, sequence_number_action, sequence_number=None, **kwargs):
    +        # type: (Union[str, SequenceNumberAction], Optional[str], **Any) -> Dict[str, Any]
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        if sequence_number_action is None:
    +            raise ValueError("A sequence number action must be specified")
    +        options = {
    +            'sequence_number_action': sequence_number_action,
    +            'timeout': kwargs.pop('timeout', None),
    +            'blob_sequence_number': sequence_number,
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def set_sequence_number(self, sequence_number_action, sequence_number=None, **kwargs):
    +        # type: (Union[str, SequenceNumberAction], Optional[str], **Any) -> Dict[str, Union[str, datetime]]
    +        """Sets the blob sequence number.
    +
    +        :param str sequence_number_action:
    +            This property indicates how the service should modify the blob's sequence
    +            number. See :class:`~azure.storage.blob.SequenceNumberAction` for more information.
    +        :param str sequence_number:
    +            This property sets the blob's sequence number. The sequence number is a
    +            user-controlled property that you can use to track requests and manage
    +            concurrency issues.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._set_sequence_number_options(
    +            sequence_number_action, sequence_number=sequence_number, **kwargs)
    +        try:
    +            return self._client.page_blob.update_sequence_number(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _resize_blob_options(self, size, **kwargs):
    +        # type: (int, **Any) -> Dict[str, Any]
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        if size is None:
    +            raise ValueError("A content length must be specified for a Page Blob.")
    +
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        options = {
    +            'blob_content_length': size,
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def resize_blob(self, size, **kwargs):
    +        # type: (int, **Any) -> Dict[str, Union[str, datetime]]
    +        """Resizes a page blob to the specified size.
    +
    +        If the specified value is less than the current size of the blob,
    +        then all pages above the specified value are cleared.
    +
    +        :param int size:
    +            Size used to resize blob. Maximum size for a page blob is up to 1 TB.
    +            The page blob size must be aligned to a 512-byte boundary.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._resize_blob_options(size, **kwargs)
    +        try:
    +            return self._client.page_blob.resize(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _upload_page_options( # type: ignore
    +            self, page,  # type: bytes
    +            offset,  # type: int
    +            length,  # type: int
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if isinstance(page, six.text_type):
    +            page = page.encode(kwargs.pop('encoding', 'UTF-8'))
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +
    +        if offset is None or offset % 512 != 0:
    +            raise ValueError("offset must be an integer that aligns with 512 page size")
    +        if length is None or length % 512 != 0:
    +            raise ValueError("length must be an integer that aligns with 512 page size")
    +        end_range = offset + length - 1  # Reformat to an inclusive range index
    +        content_range = 'bytes={0}-{1}'.format(offset, end_range) # type: ignore
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        seq_conditions = SequenceNumberAccessConditions(
    +            if_sequence_number_less_than_or_equal_to=kwargs.pop('if_sequence_number_lte', None),
    +            if_sequence_number_less_than=kwargs.pop('if_sequence_number_lt', None),
    +            if_sequence_number_equal_to=kwargs.pop('if_sequence_number_eq', None)
    +        )
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        validate_content = kwargs.pop('validate_content', False)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        options = {
    +            'body': page[:length],
    +            'content_length': length,
    +            'transactional_content_md5': None,
    +            'timeout': kwargs.pop('timeout', None),
    +            'range': content_range,
    +            'lease_access_conditions': access_conditions,
    +            'sequence_number_access_conditions': seq_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'validate_content': validate_content,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def upload_page( # type: ignore
    +            self, page,  # type: bytes
    +            offset,  # type: int
    +            length,  # type: int
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """The Upload Pages operation writes a range of pages to a page blob.
    +
    +        :param bytes page:
    +            Content of the page.
    +        :param int offset:
    +            Start of byte range to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length  must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash of the page content. The storage
    +            service checks the hash of the content that has arrived
    +            with the hash that was sent. This is primarily valuable for detecting
    +            bitflips on the wire if using http instead of https, as https (the default),
    +            will already validate. Note that this MD5 hash is not stored with the
    +            blob.
    +        :keyword int if_sequence_number_lte:
    +            If the blob's sequence number is less than or equal to
    +            the specified value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_lt:
    +            If the blob's sequence number is less than the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_eq:
    +            If the blob's sequence number is equal to the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._upload_page_options(
    +            page=page,
    +            offset=offset,
    +            length=length,
    +            **kwargs)
    +        try:
    +            return self._client.page_blob.upload_pages(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _upload_pages_from_url_options(  # type: ignore
    +            self, source_url,  # type: str
    +            offset,  # type: int
    +            length,  # type: int
    +            source_offset,  # type: int
    +            **kwargs
    +    ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +
    +        # TODO: extract the code to a method format_range
    +        if offset is None or offset % 512 != 0:
    +            raise ValueError("offset must be an integer that aligns with 512 page size")
    +        if length is None or length % 512 != 0:
    +            raise ValueError("length must be an integer that aligns with 512 page size")
    +        if source_offset is None or offset % 512 != 0:
    +            raise ValueError("source_offset must be an integer that aligns with 512 page size")
    +
    +        # Format range
    +        end_range = offset + length - 1
    +        destination_range = 'bytes={0}-{1}'.format(offset, end_range)
    +        source_range = 'bytes={0}-{1}'.format(source_offset, source_offset + length - 1)  # should subtract 1 here?
    +
    +        seq_conditions = SequenceNumberAccessConditions(
    +            if_sequence_number_less_than_or_equal_to=kwargs.pop('if_sequence_number_lte', None),
    +            if_sequence_number_less_than=kwargs.pop('if_sequence_number_lt', None),
    +            if_sequence_number_equal_to=kwargs.pop('if_sequence_number_eq', None)
    +        )
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        source_mod_conditions = get_source_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        source_content_md5 = kwargs.pop('source_content_md5', None)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'source_url': source_url,
    +            'content_length': 0,
    +            'source_range': source_range,
    +            'range': destination_range,
    +            'source_content_md5': bytearray(source_content_md5) if source_content_md5 else None,
    +            'timeout': kwargs.pop('timeout', None),
    +            'lease_access_conditions': access_conditions,
    +            'sequence_number_access_conditions': seq_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'source_modified_access_conditions': source_mod_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def upload_pages_from_url(self, source_url,  # type: str
    +                              offset,  # type: int
    +                              length,  # type: int
    +                              source_offset,  # type: int
    +                              **kwargs
    +                              ):
    +        # type: (...) -> Dict[str, Any]
    +        """
    +        The Upload Pages operation writes a range of pages to a page blob where
    +        the contents are read from a URL.
    +
    +        :param str source_url:
    +            The URL of the source data. It can point to any Azure Blob or File, that is either public or has a
    +            shared access signature attached.
    +        :param int offset:
    +            Start of byte range to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length  must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int source_offset:
    +            This indicates the start of the range of bytes(inclusive) that has to be taken from the copy source.
    +            The service will read the same number of bytes as the destination range (length-offset).
    +        :keyword bytes source_content_md5:
    +            If given, the service will calculate the MD5 hash of the block content and compare against this value.
    +        :keyword ~datetime.datetime source_if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the source resource has been modified since the specified time.
    +        :keyword ~datetime.datetime source_if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the source resource has not been modified since the specified date/time.
    +        :keyword str source_etag:
    +            The source ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions source_match_condition:
    +            The source match condition to use upon the etag.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword int if_sequence_number_lte:
    +            If the blob's sequence number is less than or equal to
    +            the specified value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_lt:
    +            If the blob's sequence number is less than the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_eq:
    +            If the blob's sequence number is equal to the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            The destination ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The destination match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        """
    +        options = self._upload_pages_from_url_options(
    +            source_url=source_url,
    +            offset=offset,
    +            length=length,
    +            source_offset=source_offset,
    +            **kwargs
    +        )
    +        try:
    +            return self._client.page_blob.upload_pages_from_url(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _clear_page_options(self, offset, length, **kwargs):
    +        # type: (int, int, **Any) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        seq_conditions = SequenceNumberAccessConditions(
    +            if_sequence_number_less_than_or_equal_to=kwargs.pop('if_sequence_number_lte', None),
    +            if_sequence_number_less_than=kwargs.pop('if_sequence_number_lt', None),
    +            if_sequence_number_equal_to=kwargs.pop('if_sequence_number_eq', None)
    +        )
    +        mod_conditions = get_modify_conditions(kwargs)
    +        if offset is None or offset % 512 != 0:
    +            raise ValueError("offset must be an integer that aligns with 512 page size")
    +        if length is None or length % 512 != 0:
    +            raise ValueError("length must be an integer that aligns with 512 page size")
    +        end_range = length + offset - 1  # Reformat to an inclusive range index
    +        content_range = 'bytes={0}-{1}'.format(offset, end_range)
    +
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'content_length': 0,
    +            'timeout': kwargs.pop('timeout', None),
    +            'range': content_range,
    +            'lease_access_conditions': access_conditions,
    +            'sequence_number_access_conditions': seq_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def clear_page(self, offset, length, **kwargs):
    +        # type: (int, int, **Any) -> Dict[str, Union[str, datetime]]
    +        """Clears a range of pages.
    +
    +        :param int offset:
    +            Start of byte range to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword int if_sequence_number_lte:
    +            If the blob's sequence number is less than or equal to
    +            the specified value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_lt:
    +            If the blob's sequence number is less than the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_eq:
    +            If the blob's sequence number is equal to the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._clear_page_options(offset, length, **kwargs)
    +        try:
    +            return self._client.page_blob.clear_pages(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _append_block_options( # type: ignore
    +            self, data,  # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +
    +        if isinstance(data, six.text_type):
    +            data = data.encode(kwargs.pop('encoding', 'UTF-8')) # type: ignore
    +        if length is None:
    +            length = get_length(data)
    +            if length is None:
    +                length, data = read_length(data)
    +        if length == 0:
    +            return {}
    +        if isinstance(data, bytes):
    +            data = data[:length]
    +
    +        appendpos_condition = kwargs.pop('appendpos_condition', None)
    +        maxsize_condition = kwargs.pop('maxsize_condition', None)
    +        validate_content = kwargs.pop('validate_content', False)
    +        append_conditions = None
    +        if maxsize_condition or appendpos_condition is not None:
    +            append_conditions = AppendPositionAccessConditions(
    +                max_size=maxsize_condition,
    +                append_position=appendpos_condition
    +            )
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        options = {
    +            'body': data,
    +            'content_length': length,
    +            'timeout': kwargs.pop('timeout', None),
    +            'transactional_content_md5': None,
    +            'lease_access_conditions': access_conditions,
    +            'append_position_access_conditions': append_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'validate_content': validate_content,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def append_block( # type: ignore
    +            self, data,  # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime, int]]
    +        """Commits a new block of data to the end of the existing append blob.
    +
    +        :param data:
    +            Content of the block. This can be bytes, text, an iterable or a file-like object.
    +        :type data: bytes or str or Iterable
    +        :param int length:
    +            Size of the block in bytes.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash of the block content. The storage
    +            service checks the hash of the content that has arrived
    +            with the hash that was sent. This is primarily valuable for detecting
    +            bitflips on the wire if using http instead of https, as https (the default),
    +            will already validate. Note that this MD5 hash is not stored with the
    +            blob.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int appendpos_condition:
    +            Optional conditional header, used only for the Append Block operation.
    +            A number indicating the byte offset to compare. Append Block will
    +            succeed only if the append position is equal to this number. If it
    +            is not, the request will fail with the AppendPositionConditionNotMet error
    +            (HTTP status code 412 - Precondition Failed).
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag, last modified, append offset, committed block count).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._append_block_options(
    +            data,
    +            length=length,
    +            **kwargs
    +        )
    +        try:
    +            return self._client.append_blob.append_block(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _append_block_from_url_options(  # type: ignore
    +            self, copy_source_url,  # type: str
    +            source_offset=None,  # type: Optional[int]
    +            source_length=None,  # type: Optional[int]
    +            **kwargs
    +    ):
    +        # type: (...) -> Dict[str, Any]
    +        if self.require_encryption or (self.key_encryption_key is not None):
    +            raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION)
    +
    +        # If end range is provided, start range must be provided
    +        if source_length is not None and source_offset is None:
    +            raise ValueError("source_offset should also be specified if source_length is specified")
    +        # Format based on whether length is present
    +        source_range = None
    +        if source_length is not None:
    +            end_range = source_offset + source_length - 1
    +            source_range = 'bytes={0}-{1}'.format(source_offset, end_range)
    +        elif source_offset is not None:
    +            source_range = "bytes={0}-".format(source_offset)
    +
    +        appendpos_condition = kwargs.pop('appendpos_condition', None)
    +        maxsize_condition = kwargs.pop('maxsize_condition', None)
    +        source_content_md5 = kwargs.pop('source_content_md5', None)
    +        append_conditions = None
    +        if maxsize_condition or appendpos_condition is not None:
    +            append_conditions = AppendPositionAccessConditions(
    +                max_size=maxsize_condition,
    +                append_position=appendpos_condition
    +            )
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        source_mod_conditions = get_source_conditions(kwargs)
    +        cpk_scope_info = get_cpk_scope_info(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +
    +        options = {
    +            'source_url': copy_source_url,
    +            'content_length': 0,
    +            'source_range': source_range,
    +            'source_content_md5': source_content_md5,
    +            'transactional_content_md5': None,
    +            'lease_access_conditions': access_conditions,
    +            'append_position_access_conditions': append_conditions,
    +            'modified_access_conditions': mod_conditions,
    +            'source_modified_access_conditions': source_mod_conditions,
    +            'cpk_scope_info': cpk_scope_info,
    +            'cpk_info': cpk_info,
    +            'cls': return_response_headers,
    +            'timeout': kwargs.pop('timeout', None)}
    +        options.update(kwargs)
    +        return options
    +
    +    @distributed_trace
    +    def append_block_from_url(self, copy_source_url,  # type: str
    +                              source_offset=None,  # type: Optional[int]
    +                              source_length=None,  # type: Optional[int]
    +                              **kwargs):
    +        # type: (...) -> Dict[str, Union[str, datetime, int]]
    +        """
    +        Creates a new block to be committed as part of a blob, where the contents are read from a source url.
    +
    +        :param str copy_source_url:
    +            The URL of the source data. It can point to any Azure Blob or File, that is either public or has a
    +            shared access signature attached.
    +        :param int source_offset:
    +            This indicates the start of the range of bytes (inclusive) that has to be taken from the copy source.
    +        :param int source_length:
    +            This indicates the end of the range of bytes that has to be taken from the copy source.
    +        :keyword bytearray source_content_md5:
    +            If given, the service will calculate the MD5 hash of the block content and compare against this value.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int appendpos_condition:
    +            Optional conditional header, used only for the Append Block operation.
    +            A number indicating the byte offset to compare. Append Block will
    +            succeed only if the append position is equal to this number. If it
    +            is not, the request will fail with the
    +            AppendPositionConditionNotMet error
    +            (HTTP status code 412 - Precondition Failed).
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            The destination ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The destination match condition to use upon the etag.
    +        :keyword ~datetime.datetime source_if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the source resource has been modified since the specified time.
    +        :keyword ~datetime.datetime source_if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the source resource has not been modified since the specified date/time.
    +        :keyword str source_etag:
    +            The source ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions source_match_condition:
    +            The source match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        """
    +        options = self._append_block_from_url_options(
    +            copy_source_url,
    +            source_offset=source_offset,
    +            source_length=source_length,
    +            **kwargs
    +        )
    +        try:
    +            return self._client.append_blob.append_block_from_url(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_blob_service_client.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_blob_service_client.py
    new file mode 100644
    index 000000000000..787089422353
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_blob_service_client.py
    @@ -0,0 +1,615 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import functools
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, Dict, List,
    +    TYPE_CHECKING
    +)
    +
    +try:
    +    from urllib.parse import urlparse
    +except ImportError:
    +    from urlparse import urlparse # type: ignore
    +
    +from azure.core.paging import ItemPaged
    +from azure.core.pipeline import Pipeline
    +from azure.core.tracing.decorator import distributed_trace
    +
    +from ._shared.models import LocationMode
    +from ._shared.base_client import StorageAccountHostsMixin, TransportWrapper, parse_connection_str, parse_query
    +from ._shared.parser import _to_utc_datetime
    +from ._shared.response_handlers import return_response_headers, process_storage_error, \
    +    parse_to_internal_user_delegation_key
    +from ._generated import AzureBlobStorage, VERSION
    +from ._generated.models import StorageErrorException, StorageServiceProperties, KeyInfo
    +from ._container_client import ContainerClient
    +from ._blob_client import BlobClient
    +from ._models import ContainerPropertiesPaged
    +from ._serialize import get_api_version
    +from ._deserialize import service_stats_deserialize, service_properties_deserialize
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from azure.core.pipeline.transport import HttpTransport
    +    from azure.core.pipeline.policies import HTTPPolicy
    +    from ._shared.models import UserDelegationKey
    +    from ._lease import BlobLeaseClient
    +    from ._models import (
    +        BlobProperties,
    +        ContainerProperties,
    +        PublicAccess,
    +        BlobAnalyticsLogging,
    +        Metrics,
    +        CorsRule,
    +        RetentionPolicy,
    +        StaticWebsite,
    +    )
    +
    +
    +class BlobServiceClient(StorageAccountHostsMixin):
    +    """A client to interact with the Blob Service at the account level.
    +
    +    This client provides operations to retrieve and configure the account properties
    +    as well as list, create and delete containers within the account.
    +    For operations relating to a specific container or blob, clients for those entities
    +    can also be retrieved using the `get_client` functions.
    +
    +    :param str account_url:
    +        The URL to the blob storage account. Any other entities included
    +        in the URL path (e.g. container or blob) will be discarded. This URL can be optionally
    +        authenticated with a SAS token.
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +        The Storage API version to use for requests. Default value is '2019-07-07'.
    +        Setting to an older version may result in reduced feature compatibility.
    +
    +        .. versionadded:: 12.2.0
    +
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +    :keyword int max_block_size: The maximum chunk size for uploading a block blob in chunks.
    +        Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_put_size: If the blob size is less than max_single_put_size, then the blob will be
    +        uploaded with only one http PUT request. If the blob size is larger than max_single_put_size,
    +        the blob will be uploaded in chunks. Defaults to 64*1024*1024, or 64MB.
    +    :keyword int min_large_block_upload_threshold: The minimum chunk size required to use the memory efficient
    +        algorithm when uploading a block blob. Defaults to 4*1024*1024+1.
    +    :keyword bool use_byte_buffer: Use a byte buffer for block blob uploads. Defaults to False.
    +    :keyword int max_page_size: The maximum chunk size for uploading a page blob. Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_get_size: The maximum size for a blob to be downloaded in a single call,
    +        the exceeded part will be downloaded in chunks (could be parallel). Defaults to 32*1024*1024, or 32MB.
    +    :keyword int max_chunk_get_size: The maximum chunk size used for downloading a blob. Defaults to 4*1024*1024,
    +        or 4MB.
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication.py
    +            :start-after: [START create_blob_service_client]
    +            :end-before: [END create_blob_service_client]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobServiceClient with account url and credential.
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication.py
    +            :start-after: [START create_blob_service_client_oauth]
    +            :end-before: [END create_blob_service_client_oauth]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobServiceClient with Azure Identity credentials.
    +    """
    +
    +    def __init__(
    +            self, account_url,  # type: str
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):
    +        # type: (...) -> None
    +        try:
    +            if not account_url.lower().startswith('http'):
    +                account_url = "https://" + account_url
    +        except AttributeError:
    +            raise ValueError("Account URL must be a string.")
    +        parsed_url = urlparse(account_url.rstrip('/'))
    +        if not parsed_url.netloc:
    +            raise ValueError("Invalid URL: {}".format(account_url))
    +
    +        _, sas_token = parse_query(parsed_url.query)
    +        self._query_str, credential = self._format_query_string(sas_token, credential)
    +        super(BlobServiceClient, self).__init__(parsed_url, service='blob', credential=credential, **kwargs)
    +        self._client = AzureBlobStorage(self.url, pipeline=self._pipeline)
    +        self._client._config.version = get_api_version(kwargs, VERSION)  # pylint: disable=protected-access
    +
    +    def _format_url(self, hostname):
    +        """Format the endpoint URL according to the current location
    +        mode hostname.
    +        """
    +        return "{}://{}/{}".format(self.scheme, hostname, self._query_str)
    +
    +    @classmethod
    +    def from_connection_string(
    +            cls, conn_str,  # type: str
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):  # type: (...) -> BlobServiceClient
    +        """Create BlobServiceClient from a Connection String.
    +
    +        :param str conn_str:
    +            A connection string to an Azure Storage account.
    +        :param credential:
    +            The credentials with which to authenticate. This is optional if the
    +            account URL already has a SAS token, or the connection string already has shared
    +            access key values. The value can be a SAS token string, an account shared access
    +            key, or an instance of a TokenCredentials class from azure.identity.
    +            Credentials provided here will take precedence over those in the connection string.
    +        :returns: A Blob service client.
    +        :rtype: ~azure.storage.blob.BlobServiceClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_authentication.py
    +                :start-after: [START auth_from_connection_string]
    +                :end-before: [END auth_from_connection_string]
    +                :language: python
    +                :dedent: 8
    +                :caption: Creating the BlobServiceClient from a connection string.
    +        """
    +        account_url, secondary, credential = parse_connection_str(conn_str, credential, 'blob')
    +        if 'secondary_hostname' not in kwargs:
    +            kwargs['secondary_hostname'] = secondary
    +        return cls(account_url, credential=credential, **kwargs)
    +
    +    @distributed_trace
    +    def get_user_delegation_key(self, key_start_time,  # type: datetime
    +                                key_expiry_time,  # type: datetime
    +                                **kwargs  # type: Any
    +                                ):
    +        # type: (...) -> UserDelegationKey
    +        """
    +        Obtain a user delegation key for the purpose of signing SAS tokens.
    +        A token credential must be present on the service object for this request to succeed.
    +
    +        :param ~datetime.datetime key_start_time:
    +            A DateTime value. Indicates when the key becomes valid.
    +        :param ~datetime.datetime key_expiry_time:
    +            A DateTime value. Indicates when the key stops being valid.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: The user delegation key.
    +        :rtype: ~azure.storage.blob.UserDelegationKey
    +        """
    +        key_info = KeyInfo(start=_to_utc_datetime(key_start_time), expiry=_to_utc_datetime(key_expiry_time))
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            user_delegation_key = self._client.service.get_user_delegation_key(key_info=key_info,
    +                                                                               timeout=timeout,
    +                                                                               **kwargs)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +        return parse_to_internal_user_delegation_key(user_delegation_key)  # type: ignore
    +
    +    @distributed_trace
    +    def get_account_information(self, **kwargs):
    +        # type: (Any) -> Dict[str, str]
    +        """Gets information related to the storage account.
    +
    +        The information can also be retrieved if the user has a SAS to a container or blob.
    +        The keys in the returned dictionary include 'sku_name' and 'account_kind'.
    +
    +        :returns: A dict of account information (SKU and account type).
    +        :rtype: dict(str, str)
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START get_blob_service_account_info]
    +                :end-before: [END get_blob_service_account_info]
    +                :language: python
    +                :dedent: 8
    +                :caption: Getting account information for the blob service.
    +        """
    +        try:
    +            return self._client.service.get_account_info(cls=return_response_headers, **kwargs) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def get_service_stats(self, **kwargs):
    +        # type: (**Any) -> Dict[str, Any]
    +        """Retrieves statistics related to replication for the Blob service.
    +
    +        It is only available when read-access geo-redundant replication is enabled for
    +        the storage account.
    +
    +        With geo-redundant replication, Azure Storage maintains your data durable
    +        in two locations. In both locations, Azure Storage constantly maintains
    +        multiple healthy replicas of your data. The location where you read,
    +        create, update, or delete data is the primary storage account location.
    +        The primary location exists in the region you choose at the time you
    +        create an account via the Azure Management Azure classic portal, for
    +        example, North Central US. The location to which your data is replicated
    +        is the secondary location. The secondary location is automatically
    +        determined based on the location of the primary; it is in a second data
    +        center that resides in the same region as the primary location. Read-only
    +        access is available from the secondary location, if read-access geo-redundant
    +        replication is enabled for your storage account.
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: The blob service stats.
    +        :rtype: Dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START get_blob_service_stats]
    +                :end-before: [END get_blob_service_stats]
    +                :language: python
    +                :dedent: 8
    +                :caption: Getting service stats for the blob service.
    +        """
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            stats = self._client.service.get_statistics( # type: ignore
    +                timeout=timeout, use_location=LocationMode.SECONDARY, **kwargs)
    +            return service_stats_deserialize(stats)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def get_service_properties(self, **kwargs):
    +        # type: (Any) -> Dict[str, Any]
    +        """Gets the properties of a storage account's Blob service, including
    +        Azure Storage Analytics.
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An object containing blob service properties such as
    +            analytics logging, hour/minute metrics, cors rules, etc.
    +        :rtype: Dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START get_blob_service_properties]
    +                :end-before: [END get_blob_service_properties]
    +                :language: python
    +                :dedent: 8
    +                :caption: Getting service properties for the blob service.
    +        """
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            service_props = self._client.service.get_properties(timeout=timeout, **kwargs)
    +            return service_properties_deserialize(service_props)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def set_service_properties(
    +            self, analytics_logging=None,  # type: Optional[BlobAnalyticsLogging]
    +            hour_metrics=None,  # type: Optional[Metrics]
    +            minute_metrics=None,  # type: Optional[Metrics]
    +            cors=None,  # type: Optional[List[CorsRule]]
    +            target_version=None,  # type: Optional[str]
    +            delete_retention_policy=None,  # type: Optional[RetentionPolicy]
    +            static_website=None,  # type: Optional[StaticWebsite]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Sets the properties of a storage account's Blob service, including
    +        Azure Storage Analytics.
    +
    +        If an element (e.g. analytics_logging) is left as None, the
    +        existing settings on the service for that functionality are preserved.
    +
    +        :param analytics_logging:
    +            Groups the Azure Analytics Logging settings.
    +        :type analytics_logging: ~azure.storage.blob.BlobAnalyticsLogging
    +        :param hour_metrics:
    +            The hour metrics settings provide a summary of request
    +            statistics grouped by API in hourly aggregates for blobs.
    +        :type hour_metrics: ~azure.storage.blob.Metrics
    +        :param minute_metrics:
    +            The minute metrics settings provide request statistics
    +            for each minute for blobs.
    +        :type minute_metrics: ~azure.storage.blob.Metrics
    +        :param cors:
    +            You can include up to five CorsRule elements in the
    +            list. If an empty list is specified, all CORS rules will be deleted,
    +            and CORS will be disabled for the service.
    +        :type cors: list[~azure.storage.blob.CorsRule]
    +        :param str target_version:
    +            Indicates the default version to use for requests if an incoming
    +            request's version is not specified.
    +        :param delete_retention_policy:
    +            The delete retention policy specifies whether to retain deleted blobs.
    +            It also specifies the number of days and versions of blob to keep.
    +        :type delete_retention_policy: ~azure.storage.blob.RetentionPolicy
    +        :param static_website:
    +            Specifies whether the static website feature is enabled,
    +            and if yes, indicates the index document and 404 error document to use.
    +        :type static_website: ~azure.storage.blob.StaticWebsite
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START set_blob_service_properties]
    +                :end-before: [END set_blob_service_properties]
    +                :language: python
    +                :dedent: 8
    +                :caption: Setting service properties for the blob service.
    +        """
    +        props = StorageServiceProperties(
    +            logging=analytics_logging,
    +            hour_metrics=hour_metrics,
    +            minute_metrics=minute_metrics,
    +            cors=cors,
    +            default_service_version=target_version,
    +            delete_retention_policy=delete_retention_policy,
    +            static_website=static_website
    +        )
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            self._client.service.set_properties(props, timeout=timeout, **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def list_containers(
    +            self, name_starts_with=None,  # type: Optional[str]
    +            include_metadata=False,  # type: Optional[bool]
    +            **kwargs
    +        ):
    +        # type: (...) -> ItemPaged[ContainerProperties]
    +        """Returns a generator to list the containers under the specified account.
    +
    +        The generator will lazily follow the continuation tokens returned by
    +        the service and stop when all containers have been returned.
    +
    +        :param str name_starts_with:
    +            Filters the results to return only containers whose names
    +            begin with the specified prefix.
    +        :param bool include_metadata:
    +            Specifies that container metadata to be returned in the response.
    +            The default value is `False`.
    +        :keyword int results_per_page:
    +            The maximum number of container names to retrieve per API
    +            call. If the request does not specify the server will return up to 5,000 items.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An iterable (auto-paging) of ContainerProperties.
    +        :rtype: ~azure.core.paging.ItemPaged[~azure.storage.blob.ContainerProperties]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START bsc_list_containers]
    +                :end-before: [END bsc_list_containers]
    +                :language: python
    +                :dedent: 12
    +                :caption: Listing the containers in the blob service.
    +        """
    +        include = 'metadata' if include_metadata else None
    +        timeout = kwargs.pop('timeout', None)
    +        results_per_page = kwargs.pop('results_per_page', None)
    +        command = functools.partial(
    +            self._client.service.list_containers_segment,
    +            prefix=name_starts_with,
    +            include=include,
    +            timeout=timeout,
    +            **kwargs)
    +        return ItemPaged(
    +                command,
    +                prefix=name_starts_with,
    +                results_per_page=results_per_page,
    +                page_iterator_class=ContainerPropertiesPaged
    +            )
    +
    +    @distributed_trace
    +    def create_container(
    +            self, name,  # type: str
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            public_access=None,  # type: Optional[Union[PublicAccess, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> ContainerClient
    +        """Creates a new container under the specified account.
    +
    +        If the container with the same name already exists, a ResourceExistsError will
    +        be raised. This method returns a client with which to interact with the newly
    +        created container.
    +
    +        :param str name: The name of the container to create.
    +        :param metadata:
    +            A dict with name-value pairs to associate with the
    +            container as metadata. Example: `{'Category':'test'}`
    +        :type metadata: dict(str, str)
    +        :param public_access:
    +            Possible values include: 'container', 'blob'.
    +        :type public_access: str or ~azure.storage.blob.PublicAccess
    +        :keyword container_encryption_scope:
    +            Specifies the default encryption scope to set on the container and use for
    +            all future writes.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :paramtype container_encryption_scope: dict or ~azure.storage.blob.ContainerEncryptionScope
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: ~azure.storage.blob.ContainerClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START bsc_create_container]
    +                :end-before: [END bsc_create_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: Creating a container in the blob service.
    +        """
    +        container = self.get_container_client(name)
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        container.create_container(
    +            metadata=metadata, public_access=public_access, timeout=timeout, **kwargs)
    +        return container
    +
    +    @distributed_trace
    +    def delete_container(
    +            self, container,  # type: Union[ContainerProperties, str]
    +            lease=None,  # type: Optional[Union[BlobLeaseClient, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Marks the specified container for deletion.
    +
    +        The container and any blobs contained within it are later deleted during garbage collection.
    +        If the container is not found, a ResourceNotFoundError will be raised.
    +
    +        :param container:
    +            The container to delete. This can either be the name of the container,
    +            or an instance of ContainerProperties.
    +        :type container: str or ~azure.storage.blob.ContainerProperties
    +        :param lease:
    +            If specified, delete_container only succeeds if the
    +            container's lease is active and matches this ID.
    +            Required if the container has an active lease.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START bsc_delete_container]
    +                :end-before: [END bsc_delete_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: Deleting a container in the blob service.
    +        """
    +        container = self.get_container_client(container) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        container.delete_container( # type: ignore
    +            lease=lease,
    +            timeout=timeout,
    +            **kwargs)
    +
    +    def get_container_client(self, container):
    +        # type: (Union[ContainerProperties, str]) -> ContainerClient
    +        """Get a client to interact with the specified container.
    +
    +        The container need not already exist.
    +
    +        :param container:
    +            The container. This can either be the name of the container,
    +            or an instance of ContainerProperties.
    +        :type container: str or ~azure.storage.blob.ContainerProperties
    +        :returns: A ContainerClient.
    +        :rtype: ~azure.storage.blob.ContainerClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START bsc_get_container_client]
    +                :end-before: [END bsc_get_container_client]
    +                :language: python
    +                :dedent: 8
    +                :caption: Getting the container client to interact with a specific container.
    +        """
    +        try:
    +            container_name = container.name
    +        except AttributeError:
    +            container_name = container
    +        _pipeline = Pipeline(
    +            transport=TransportWrapper(self._pipeline._transport), # pylint: disable = protected-access
    +            policies=self._pipeline._impl_policies # pylint: disable = protected-access
    +        )
    +        return ContainerClient(
    +            self.url, container_name=container_name,
    +            credential=self.credential, api_version=self.api_version, _configuration=self._config,
    +            _pipeline=_pipeline, _location_mode=self._location_mode, _hosts=self._hosts,
    +            require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key,
    +            key_resolver_function=self.key_resolver_function)
    +
    +    def get_blob_client(
    +            self, container,  # type: Union[ContainerProperties, str]
    +            blob,  # type: Union[BlobProperties, str]
    +            snapshot=None  # type: Optional[Union[Dict[str, Any], str]]
    +        ):
    +        # type: (...) -> BlobClient
    +        """Get a client to interact with the specified blob.
    +
    +        The blob need not already exist.
    +
    +        :param container:
    +            The container that the blob is in. This can either be the name of the container,
    +            or an instance of ContainerProperties.
    +        :type container: str or ~azure.storage.blob.ContainerProperties
    +        :param blob:
    +            The blob with which to interact. This can either be the name of the blob,
    +            or an instance of BlobProperties.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param snapshot:
    +            The optional blob snapshot on which to operate. This can either be the ID of the snapshot,
    +            or a dictionary output returned by :func:`~azure.storage.blob.BlobClient.create_snapshot()`.
    +        :type snapshot: str or dict(str, Any)
    +        :returns: A BlobClient.
    +        :rtype: ~azure.storage.blob.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service.py
    +                :start-after: [START bsc_get_blob_client]
    +                :end-before: [END bsc_get_blob_client]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting the blob client to interact with a specific blob.
    +        """
    +        try:
    +            container_name = container.name
    +        except AttributeError:
    +            container_name = container
    +        try:
    +            blob_name = blob.name
    +        except AttributeError:
    +            blob_name = blob
    +        _pipeline = Pipeline(
    +            transport=TransportWrapper(self._pipeline._transport), # pylint: disable = protected-access
    +            policies=self._pipeline._impl_policies # pylint: disable = protected-access
    +        )
    +        return BlobClient( # type: ignore
    +            self.url, container_name=container_name, blob_name=blob_name, snapshot=snapshot,
    +            credential=self.credential, api_version=self.api_version, _configuration=self._config,
    +            _pipeline=_pipeline, _location_mode=self._location_mode, _hosts=self._hosts,
    +            require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key,
    +            key_resolver_function=self.key_resolver_function)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_container_client.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_container_client.py
    new file mode 100644
    index 000000000000..9b567fda5405
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_container_client.py
    @@ -0,0 +1,1312 @@
    +# pylint: disable=too-many-lines
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import functools
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, AnyStr, Dict, List, Tuple, IO, Iterator,
    +    TYPE_CHECKING
    +)
    +
    +try:
    +    from urllib.parse import urlparse, quote, unquote
    +except ImportError:
    +    from urlparse import urlparse # type: ignore
    +    from urllib2 import quote, unquote # type: ignore
    +
    +import six
    +
    +from azure.core.paging import ItemPaged
    +from azure.core.tracing.decorator import distributed_trace
    +from azure.core.pipeline import Pipeline
    +from azure.core.pipeline.transport import HttpRequest
    +
    +from ._shared.base_client import StorageAccountHostsMixin, TransportWrapper, parse_connection_str, parse_query
    +from ._shared.request_handlers import add_metadata_headers, serialize_iso
    +from ._shared.response_handlers import (
    +    process_storage_error,
    +    return_response_headers,
    +    return_headers_and_deserialized)
    +from ._generated import AzureBlobStorage, VERSION
    +from ._generated.models import (
    +    StorageErrorException,
    +    SignedIdentifier)
    +from ._deserialize import deserialize_container_properties
    +from ._serialize import get_modify_conditions, get_container_cpk_scope_info, get_api_version
    +from ._models import ( # pylint: disable=unused-import
    +    ContainerProperties,
    +    BlobProperties,
    +    BlobPropertiesPaged,
    +    BlobType,
    +    BlobPrefix)
    +from ._lease import BlobLeaseClient, get_access_conditions
    +from ._blob_client import BlobClient
    +
    +if TYPE_CHECKING:
    +    from azure.core.pipeline.transport import HttpTransport, HttpResponse  # pylint: disable=ungrouped-imports
    +    from azure.core.pipeline.policies import HTTPPolicy # pylint: disable=ungrouped-imports
    +    from datetime import datetime
    +    from ._models import (  # pylint: disable=unused-import
    +        PublicAccess,
    +        AccessPolicy,
    +        ContentSettings,
    +        StandardBlobTier,
    +        PremiumPageBlobTier)
    +
    +
    +def _get_blob_name(blob):
    +    """Return the blob name.
    +
    +    :param blob: A blob string or BlobProperties
    +    :rtype: str
    +    """
    +    try:
    +        return blob.name
    +    except AttributeError:
    +        return blob
    +
    +
    +class ContainerClient(StorageAccountHostsMixin):
    +    """A client to interact with a specific container, although that container
    +    may not yet exist.
    +
    +    For operations relating to a specific blob within this container, a blob client can be
    +    retrieved using the :func:`~get_blob_client` function.
    +
    +    :param str account_url:
    +        The URI to the storage account. In order to create a client given the full URI to the container,
    +        use the :func:`from_container_url` classmethod.
    +    :param container_name:
    +        The name of the container for the blob.
    +    :type container_name: str
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +        The Storage API version to use for requests. Default value is '2019-07-07'.
    +        Setting to an older version may result in reduced feature compatibility.
    +
    +        .. versionadded:: 12.2.0
    +
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +    :keyword int max_block_size: The maximum chunk size for uploading a block blob in chunks.
    +        Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_put_size: If the blob size is less than max_single_put_size, then the blob will be
    +        uploaded with only one http PUT request. If the blob size is larger than max_single_put_size,
    +        the blob will be uploaded in chunks. Defaults to 64*1024*1024, or 64MB.
    +    :keyword int min_large_block_upload_threshold: The minimum chunk size required to use the memory efficient
    +        algorithm when uploading a block blob. Defaults to 4*1024*1024+1.
    +    :keyword bool use_byte_buffer: Use a byte buffer for block blob uploads. Defaults to False.
    +    :keyword int max_page_size: The maximum chunk size for uploading a page blob. Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_get_size: The maximum size for a blob to be downloaded in a single call,
    +        the exceeded part will be downloaded in chunks (could be parallel). Defaults to 32*1024*1024, or 32MB.
    +    :keyword int max_chunk_get_size: The maximum chunk size used for downloading a blob. Defaults to 4*1024*1024,
    +        or 4MB.
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_containers.py
    +            :start-after: [START create_container_client_from_service]
    +            :end-before: [END create_container_client_from_service]
    +            :language: python
    +            :dedent: 8
    +            :caption: Get a ContainerClient from an existing BlobServiceClient.
    +
    +        .. literalinclude:: ../samples/blob_samples_containers.py
    +            :start-after: [START create_container_client_sasurl]
    +            :end-before: [END create_container_client_sasurl]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the container client directly.
    +    """
    +    def __init__(
    +            self, account_url,  # type: str
    +            container_name,  # type: str
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):
    +        # type: (...) -> None
    +        try:
    +            if not account_url.lower().startswith('http'):
    +                account_url = "https://" + account_url
    +        except AttributeError:
    +            raise ValueError("Container URL must be a string.")
    +        parsed_url = urlparse(account_url.rstrip('/'))
    +        if not container_name:
    +            raise ValueError("Please specify a container name.")
    +        if not parsed_url.netloc:
    +            raise ValueError("Invalid URL: {}".format(account_url))
    +
    +        _, sas_token = parse_query(parsed_url.query)
    +        self.container_name = container_name
    +        self._query_str, credential = self._format_query_string(sas_token, credential)
    +        super(ContainerClient, self).__init__(parsed_url, service='blob', credential=credential, **kwargs)
    +        self._client = AzureBlobStorage(self.url, pipeline=self._pipeline)
    +        self._client._config.version = get_api_version(kwargs, VERSION)  # pylint: disable=protected-access
    +
    +    def _format_url(self, hostname):
    +        container_name = self.container_name
    +        if isinstance(container_name, six.text_type):
    +            container_name = container_name.encode('UTF-8')
    +        return "{}://{}/{}{}".format(
    +            self.scheme,
    +            hostname,
    +            quote(container_name),
    +            self._query_str)
    +
    +    @classmethod
    +    def from_container_url(cls, container_url, credential=None, **kwargs):
    +        # type: (str, Optional[Any], Any) -> ContainerClient
    +        """Create ContainerClient from a container url.
    +
    +        :param str container_url:
    +            The full endpoint URL to the Container, including SAS token if used. This could be
    +            either the primary endpoint, or the secondary endpoint depending on the current `location_mode`.
    +        :type container_url: str
    +        :param credential:
    +            The credentials with which to authenticate. This is optional if the
    +            account URL already has a SAS token, or the connection string already has shared
    +            access key values. The value can be a SAS token string, an account shared access
    +            key, or an instance of a TokenCredentials class from azure.identity.
    +            Credentials provided here will take precedence over those in the connection string.
    +        :returns: A container client.
    +        :rtype: ~azure.storage.blob.ContainerClient
    +        """
    +        try:
    +            if not container_url.lower().startswith('http'):
    +                container_url = "https://" + container_url
    +        except AttributeError:
    +            raise ValueError("Container URL must be a string.")
    +        parsed_url = urlparse(container_url.rstrip('/'))
    +        if not parsed_url.netloc:
    +            raise ValueError("Invalid URL: {}".format(container_url))
    +
    +        container_path = parsed_url.path.lstrip('/').split('/')
    +        account_path = ""
    +        if len(container_path) > 1:
    +            account_path = "/" + "/".join(container_path[:-1])
    +        account_url = "{}://{}{}?{}".format(
    +            parsed_url.scheme,
    +            parsed_url.netloc.rstrip('/'),
    +            account_path,
    +            parsed_url.query)
    +        container_name = unquote(container_path[-1])
    +        if not container_name:
    +            raise ValueError("Invalid URL. Please provide a URL with a valid container name")
    +        return cls(account_url, container_name=container_name, credential=credential, **kwargs)
    +
    +    @classmethod
    +    def from_connection_string(
    +            cls, conn_str,  # type: str
    +            container_name,  # type: str
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):  # type: (...) -> ContainerClient
    +        """Create ContainerClient from a Connection String.
    +
    +        :param str conn_str:
    +            A connection string to an Azure Storage account.
    +        :param container_name:
    +            The container name for the blob.
    +        :type container_name: str
    +        :param credential:
    +            The credentials with which to authenticate. This is optional if the
    +            account URL already has a SAS token, or the connection string already has shared
    +            access key values. The value can be a SAS token string, an account shared access
    +            key, or an instance of a TokenCredentials class from azure.identity.
    +            Credentials provided here will take precedence over those in the connection string.
    +        :returns: A container client.
    +        :rtype: ~azure.storage.blob.ContainerClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_authentication.py
    +                :start-after: [START auth_from_connection_string_container]
    +                :end-before: [END auth_from_connection_string_container]
    +                :language: python
    +                :dedent: 8
    +                :caption: Creating the ContainerClient from a connection string.
    +        """
    +        account_url, secondary, credential = parse_connection_str(conn_str, credential, 'blob')
    +        if 'secondary_hostname' not in kwargs:
    +            kwargs['secondary_hostname'] = secondary
    +        return cls(
    +            account_url, container_name=container_name, credential=credential, **kwargs)
    +
    +    @distributed_trace
    +    def create_container(self, metadata=None, public_access=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], Optional[Union[PublicAccess, str]], **Any) -> None
    +        """
    +        Creates a new container under the specified account. If the container
    +        with the same name already exists, the operation fails.
    +
    +        :param metadata:
    +            A dict with name_value pairs to associate with the
    +            container as metadata. Example:{'Category':'test'}
    +        :type metadata: dict[str, str]
    +        :param ~azure.storage.blob.PublicAccess public_access:
    +            Possible values include: 'container', 'blob'.
    +        :keyword container_encryption_scope:
    +            Specifies the default encryption scope to set on the container and use for
    +            all future writes.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :paramtype container_encryption_scope: dict or ~azure.storage.blob.ContainerEncryptionScope
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START create_container]
    +                :end-before: [END create_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: Creating a container to store blobs.
    +        """
    +        headers = kwargs.pop('headers', {})
    +        timeout = kwargs.pop('timeout', None)
    +        headers.update(add_metadata_headers(metadata)) # type: ignore
    +        container_cpk_scope_info = get_container_cpk_scope_info(kwargs)
    +        try:
    +            return self._client.container.create( # type: ignore
    +                timeout=timeout,
    +                access=public_access,
    +                container_cpk_scope_info=container_cpk_scope_info,
    +                cls=return_response_headers,
    +                headers=headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def delete_container(
    +            self, **kwargs):
    +        # type: (Any) -> None
    +        """
    +        Marks the specified container for deletion. The container and any blobs
    +        contained within it are later deleted during garbage collection.
    +
    +        :keyword lease:
    +            If specified, delete_container only succeeds if the
    +            container's lease is active and matches this ID.
    +            Required if the container has an active lease.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START delete_container]
    +                :end-before: [END delete_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: Delete a container.
    +        """
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        mod_conditions = get_modify_conditions(kwargs)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            self._client.container.delete(
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def acquire_lease(
    +            self, lease_duration=-1,  # type: int
    +            lease_id=None,  # type: Optional[str]
    +            **kwargs):
    +        # type: (...) -> BlobLeaseClient
    +        """
    +        Requests a new lease. If the container does not have an active lease,
    +        the Blob service creates a lease on the container and returns a new
    +        lease ID.
    +
    +        :param int lease_duration:
    +            Specifies the duration of the lease, in seconds, or negative one
    +            (-1) for a lease that never expires. A non-infinite lease can be
    +            between 15 and 60 seconds. A lease duration cannot be changed
    +            using renew or change. Default is -1 (infinite lease).
    +        :param str lease_id:
    +            Proposed lease ID, in a GUID string format. The Blob service returns
    +            400 (Invalid request) if the proposed lease ID is not in the correct format.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: A BlobLeaseClient object, that can be run in a context manager.
    +        :rtype: ~azure.storage.blob.BlobLeaseClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START acquire_lease_on_container]
    +                :end-before: [END acquire_lease_on_container]
    +                :language: python
    +                :dedent: 8
    +                :caption: Acquiring a lease on the container.
    +        """
    +        lease = BlobLeaseClient(self, lease_id=lease_id) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        lease.acquire(lease_duration=lease_duration, timeout=timeout, **kwargs)
    +        return lease
    +
    +    @distributed_trace
    +    def get_account_information(self, **kwargs):
    +        # type: (**Any) -> Dict[str, str]
    +        """Gets information related to the storage account.
    +
    +        The information can also be retrieved if the user has a SAS to a container or blob.
    +        The keys in the returned dictionary include 'sku_name' and 'account_kind'.
    +
    +        :returns: A dict of account information (SKU and account type).
    +        :rtype: dict(str, str)
    +        """
    +        try:
    +            return self._client.container.get_account_info(cls=return_response_headers, **kwargs) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def get_container_properties(self, **kwargs):
    +        # type: (Any) -> ContainerProperties
    +        """Returns all user-defined metadata and system properties for the specified
    +        container. The data returned does not include the container's list of blobs.
    +
    +        :keyword lease:
    +            If specified, get_container_properties only succeeds if the
    +            container's lease is active and matches this ID.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: Properties for the specified container within a container object.
    +        :rtype: ~azure.storage.blob.ContainerProperties
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START get_container_properties]
    +                :end-before: [END get_container_properties]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting properties on the container.
    +        """
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            response = self._client.container.get_properties(
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                cls=deserialize_container_properties,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        response.name = self.container_name
    +        return response # type: ignore
    +
    +    @distributed_trace
    +    def set_container_metadata( # type: ignore
    +            self, metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Sets one or more user-defined name-value pairs for the specified
    +        container. Each call to this operation replaces all existing metadata
    +        attached to the container. To remove all metadata from the container,
    +        call this operation with no metadata dict.
    +
    +        :param metadata:
    +            A dict containing name-value pairs to associate with the container as
    +            metadata. Example: {'category':'test'}
    +        :type metadata: dict[str, str]
    +        :keyword lease:
    +            If specified, set_container_metadata only succeeds if the
    +            container's lease is active and matches this ID.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Container-updated property dict (Etag and last modified).
    +        :rtype: dict[str, str or datetime]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START set_container_metadata]
    +                :end-before: [END set_container_metadata]
    +                :language: python
    +                :dedent: 12
    +                :caption: Setting metadata on the container.
    +        """
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        mod_conditions = get_modify_conditions(kwargs)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            return self._client.container.set_metadata( # type: ignore
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                headers=headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def get_container_access_policy(self, **kwargs):
    +        # type: (Any) -> Dict[str, Any]
    +        """Gets the permissions for the specified container.
    +        The permissions indicate whether container data may be accessed publicly.
    +
    +        :keyword lease:
    +            If specified, get_container_access_policy only succeeds if the
    +            container's lease is active and matches this ID.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Access policy information in a dict.
    +        :rtype: dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START get_container_access_policy]
    +                :end-before: [END get_container_access_policy]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting the access policy on the container.
    +        """
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            response, identifiers = self._client.container.get_access_policy(
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                cls=return_headers_and_deserialized,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return {
    +            'public_access': response.get('blob_public_access'),
    +            'signed_identifiers': identifiers or []
    +        }
    +
    +    @distributed_trace
    +    def set_container_access_policy(
    +            self, signed_identifiers,  # type: Dict[str, AccessPolicy]
    +            public_access=None,  # type: Optional[Union[str, PublicAccess]]
    +            **kwargs
    +        ):  # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Sets the permissions for the specified container or stored access
    +        policies that may be used with Shared Access Signatures. The permissions
    +        indicate whether blobs in a container may be accessed publicly.
    +
    +        :param signed_identifiers:
    +            A dictionary of access policies to associate with the container. The
    +            dictionary may contain up to 5 elements. An empty dictionary
    +            will clear the access policies set on the service.
    +        :type signed_identifiers: dict[str, ~azure.storage.blob.AccessPolicy]
    +        :param ~azure.storage.blob.PublicAccess public_access:
    +            Possible values include: 'container', 'blob'.
    +        :keyword lease:
    +            Required if the container has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A datetime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified date/time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A datetime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Container-updated property dict (Etag and last modified).
    +        :rtype: dict[str, str or ~datetime.datetime]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START set_container_access_policy]
    +                :end-before: [END set_container_access_policy]
    +                :language: python
    +                :dedent: 12
    +                :caption: Setting access policy on the container.
    +        """
    +        if len(signed_identifiers) > 5:
    +            raise ValueError(
    +                'Too many access policies provided. The server does not support setting '
    +                'more than 5 access policies on a single resource.')
    +        identifiers = []
    +        for key, value in signed_identifiers.items():
    +            if value:
    +                value.start = serialize_iso(value.start)
    +                value.expiry = serialize_iso(value.expiry)
    +            identifiers.append(SignedIdentifier(id=key, access_policy=value)) # type: ignore
    +        signed_identifiers = identifiers # type: ignore
    +        lease = kwargs.pop('lease', None)
    +        mod_conditions = get_modify_conditions(kwargs)
    +        access_conditions = get_access_conditions(lease)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            return self._client.container.set_access_policy(
    +                container_acl=signed_identifiers or None,
    +                timeout=timeout,
    +                access=public_access,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def list_blobs(self, name_starts_with=None, include=None, **kwargs):
    +        # type: (Optional[str], Optional[Any], **Any) -> ItemPaged[BlobProperties]
    +        """Returns a generator to list the blobs under the specified container.
    +        The generator will lazily follow the continuation tokens returned by
    +        the service.
    +
    +        :param str name_starts_with:
    +            Filters the results to return only blobs whose names
    +            begin with the specified prefix.
    +        :param list[str] include:
    +            Specifies one or more additional datasets to include in the response.
    +            Options include: 'snapshots', 'metadata', 'uncommittedblobs', 'copy', 'deleted'.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An iterable (auto-paging) response of BlobProperties.
    +        :rtype: ~azure.core.paging.ItemPaged[~azure.storage.blob.BlobProperties]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START list_blobs_in_container]
    +                :end-before: [END list_blobs_in_container]
    +                :language: python
    +                :dedent: 8
    +                :caption: List the blobs in the container.
    +        """
    +        if include and not isinstance(include, list):
    +            include = [include]
    +
    +        results_per_page = kwargs.pop('results_per_page', None)
    +        timeout = kwargs.pop('timeout', None)
    +        command = functools.partial(
    +            self._client.container.list_blob_flat_segment,
    +            include=include,
    +            timeout=timeout,
    +            **kwargs)
    +        return ItemPaged(
    +            command, prefix=name_starts_with, results_per_page=results_per_page,
    +            page_iterator_class=BlobPropertiesPaged)
    +
    +    @distributed_trace
    +    def walk_blobs(
    +            self, name_starts_with=None, # type: Optional[str]
    +            include=None, # type: Optional[Any]
    +            delimiter="/", # type: str
    +            **kwargs # type: Optional[Any]
    +        ):
    +        # type: (...) -> ItemPaged[BlobProperties]
    +        """Returns a generator to list the blobs under the specified container.
    +        The generator will lazily follow the continuation tokens returned by
    +        the service. This operation will list blobs in accordance with a hierarchy,
    +        as delimited by the specified delimiter character.
    +
    +        :param str name_starts_with:
    +            Filters the results to return only blobs whose names
    +            begin with the specified prefix.
    +        :param list[str] include:
    +            Specifies one or more additional datasets to include in the response.
    +            Options include: 'snapshots', 'metadata', 'uncommittedblobs', 'copy', 'deleted'.
    +        :param str delimiter:
    +            When the request includes this parameter, the operation returns a BlobPrefix
    +            element in the response body that acts as a placeholder for all blobs whose
    +            names begin with the same substring up to the appearance of the delimiter
    +            character. The delimiter may be a single character or a string.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An iterable (auto-paging) response of BlobProperties.
    +        :rtype: ~azure.core.paging.ItemPaged[~azure.storage.blob.BlobProperties]
    +        """
    +        if include and not isinstance(include, list):
    +            include = [include]
    +
    +        results_per_page = kwargs.pop('results_per_page', None)
    +        timeout = kwargs.pop('timeout', None)
    +        command = functools.partial(
    +            self._client.container.list_blob_hierarchy_segment,
    +            delimiter=delimiter,
    +            include=include,
    +            timeout=timeout,
    +            **kwargs)
    +        return BlobPrefix(
    +            command,
    +            prefix=name_starts_with,
    +            results_per_page=results_per_page,
    +            delimiter=delimiter)
    +
    +    @distributed_trace
    +    def upload_blob(
    +            self, name,  # type: Union[str, BlobProperties]
    +            data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            blob_type=BlobType.BlockBlob,  # type: Union[str, BlobType]
    +            length=None,  # type: Optional[int]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> BlobClient
    +        """Creates a new blob from a data source with automatic chunking.
    +
    +        :param name: The blob with which to interact. If specified, this value will override
    +            a blob value specified in the blob URL.
    +        :type name: str or ~azure.storage.blob.BlobProperties
    +        :param data: The blob data to upload.
    +        :param ~azure.storage.blob.BlobType blob_type: The type of the blob. This can be
    +            either BlockBlob, PageBlob or AppendBlob. The default value is BlockBlob.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword bool overwrite: Whether the blob to be uploaded should overwrite the current data.
    +            If True, upload_blob will overwrite the existing data. If set to False, the
    +            operation will fail with ResourceExistsError. The exception to the above is with Append
    +            blob types: if set to False and the data already exists, an error will not be raised
    +            and the data will be appended to the existing blob. If set overwrite=True, then the existing
    +            append blob will be deleted, and a new one created. Defaults to False.
    +        :keyword ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used, because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the container has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int max_concurrency:
    +            Maximum number of parallel connections to use when the blob size exceeds
    +            64MB.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :returns: A BlobClient to interact with the newly uploaded blob.
    +        :rtype: ~azure.storage.blob.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START upload_blob_to_container]
    +                :end-before: [END upload_blob_to_container]
    +                :language: python
    +                :dedent: 8
    +                :caption: Upload blob to the container.
    +        """
    +        blob = self.get_blob_client(name)
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        encoding = kwargs.pop('encoding', 'UTF-8')
    +        blob.upload_blob(
    +            data,
    +            blob_type=blob_type,
    +            length=length,
    +            metadata=metadata,
    +            timeout=timeout,
    +            encoding=encoding,
    +            **kwargs
    +        )
    +        return blob
    +
    +    @distributed_trace
    +    def delete_blob(
    +            self, blob,  # type: Union[str, BlobProperties]
    +            delete_snapshots=None,  # type: Optional[str]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Marks the specified blob or snapshot for deletion.
    +
    +        The blob is later deleted during garbage collection.
    +        Note that in order to delete a blob, you must delete all of its
    +        snapshots. You can delete both at the same time with the delete_blob
    +        operation.
    +
    +        If a delete retention policy is enabled for the service, then this operation soft deletes the blob or snapshot
    +        and retains the blob or snapshot for specified number of days.
    +        After specified number of days, blob's data is removed from the service during garbage collection.
    +        Soft deleted blob or snapshot is accessible through :func:`list_blobs()` specifying `include=["deleted"]`
    +        option. Soft-deleted blob or snapshot can be restored using :func:`~BlobClient.undelete()`
    +
    +        :param blob: The blob with which to interact. If specified, this value will override
    +            a blob value specified in the blob URL.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param str delete_snapshots:
    +            Required if the blob has associated snapshots. Values include:
    +             - "only": Deletes only the blobs snapshots.
    +             - "include": Deletes the blob along with all snapshots.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        blob_client = self.get_blob_client(blob) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        blob_client.delete_blob( # type: ignore
    +            delete_snapshots=delete_snapshots,
    +            timeout=timeout,
    +            **kwargs)
    +
    +    @distributed_trace
    +    def download_blob(self, blob, offset=None, length=None, **kwargs):
    +        # type: (Union[str, BlobProperties], Optional[int], Optional[int], **Any) -> StorageStreamDownloader
    +        """Downloads a blob to the StorageStreamDownloader. The readall() method must
    +        be used to read all the content or readinto() must be used to download the blob into
    +        a stream.
    +
    +        :param blob: The blob with which to interact. If specified, this value will override
    +            a blob value specified in the blob URL.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param int offset:
    +            Start of byte range to use for downloading a section of the blob.
    +            Must be set if length is provided.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, download_blob only
    +            succeeds if the blob's lease is active and matches this ID. Value can be a
    +            BlobLeaseClient object or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :keyword str encoding:
    +            Encoding to decode the downloaded bytes. Default is None, i.e. no decoding.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :returns: A streaming object (StorageStreamDownloader)
    +        :rtype: ~azure.storage.blob.StorageStreamDownloader
    +        """
    +        blob_client = self.get_blob_client(blob) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        return blob_client.download_blob(offset=offset, length=length, **kwargs)
    +
    +    def _generate_delete_blobs_options(
    +        self, snapshot=None,
    +        delete_snapshots=None,
    +        request_id=None,
    +        lease_access_conditions=None,
    +        modified_access_conditions=None,
    +        **kwargs
    +    ):
    +        """This code is a copy from _generated.
    +
    +        Once Autorest is able to provide request preparation this code should be removed.
    +        """
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct parameters
    +        timeout = kwargs.pop('timeout', None)
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._client._serialize.query("snapshot", snapshot, 'str')  # pylint: disable=protected-access
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._client._serialize.query("timeout", timeout, 'int', minimum=0)  # pylint: disable=protected-access
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if delete_snapshots is not None:
    +            header_parameters['x-ms-delete-snapshots'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "delete_snapshots", delete_snapshots, 'DeleteSnapshotsOptionType')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "if_none_match", if_none_match, 'str')
    +
    +        return query_parameters, header_parameters
    +
    +    @distributed_trace
    +    def delete_blobs(self, *blobs, **kwargs):
    +        # type: (...) -> Iterator[HttpResponse]
    +        """Marks the specified blobs or snapshots for deletion.
    +
    +        The blobs are later deleted during garbage collection.
    +        Note that in order to delete blobs, you must delete all of their
    +        snapshots. You can delete both at the same time with the delete_blobs operation.
    +
    +        If a delete retention policy is enabled for the service, then this operation soft deletes the blobs or snapshots
    +        and retains the blobs or snapshots for specified number of days.
    +        After specified number of days, blobs' data is removed from the service during garbage collection.
    +        Soft deleted blobs or snapshots are accessible through :func:`list_blobs()` specifying `include=["deleted"]`
    +        Soft-deleted blobs or snapshots can be restored using :func:`~BlobClient.undelete()`
    +
    +        :param blobs: The blobs to delete. This can be a single blob, or multiple values can
    +            be supplied, where each value is either the name of the blob (str) or BlobProperties.
    +        :type blobs: str or ~azure.storage.blob.BlobProperties
    +        :keyword str delete_snapshots:
    +            Required if a blob has associated snapshots. Values include:
    +             - "only": Deletes only the blobs snapshots.
    +             - "include": Deletes the blob along with all snapshots.
    +        :keyword lease:
    +            Required if a blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword bool raise_on_any_failure:
    +            This is a boolean param which defaults to True. When this is set, an exception
    +            is raised even if there is a single operation failure.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: An iterator of responses, one for each blob in order
    +        :rtype: Iterator[~azure.core.pipeline.transport.HttpResponse]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common.py
    +                :start-after: [START delete_multiple_blobs]
    +                :end-before: [END delete_multiple_blobs]
    +                :language: python
    +                :dedent: 8
    +                :caption: Deleting multiple blobs.
    +        """
    +        raise_on_any_failure = kwargs.pop('raise_on_any_failure', True)
    +        options = BlobClient._generic_delete_blob_options(  # pylint: disable=protected-access
    +            **kwargs
    +        )
    +        options.update({'raise_on_any_failure': raise_on_any_failure})
    +        query_parameters, header_parameters = self._generate_delete_blobs_options(**options)
    +        # To pass kwargs to "_batch_send", we need to remove anything that was
    +        # in the Autorest signature for Autorest, otherwise transport will be upset
    +        for possible_param in ['timeout', 'delete_snapshots', 'lease_access_conditions', 'modified_access_conditions']:
    +            options.pop(possible_param, None)
    +
    +        reqs = []
    +        for blob in blobs:
    +            blob_name = _get_blob_name(blob)
    +            req = HttpRequest(
    +                "DELETE",
    +                "/{}/{}".format(self.container_name, blob_name),
    +                headers=header_parameters
    +            )
    +            req.format_parameters(query_parameters)
    +            reqs.append(req)
    +
    +        return self._batch_send(*reqs, **options)
    +
    +    def _generate_set_tier_options(
    +        self, tier, rehydrate_priority=None, request_id=None, lease_access_conditions=None, **kwargs
    +    ):
    +        """This code is a copy from _generated.
    +
    +        Once Autorest is able to provide request preparation this code should be removed.
    +        """
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "tier"
    +        timeout = kwargs.pop('timeout', None)
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._client._serialize.query("timeout", timeout, 'int', minimum=0)  # pylint: disable=protected-access
    +        query_parameters['comp'] = self._client._serialize.query("comp", comp, 'str')  # pylint: disable=protected-access, specify-parameter-names-in-call
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-access-tier'] = self._client._serialize.header("tier", tier, 'str')  # pylint: disable=protected-access, specify-parameter-names-in-call
    +        if rehydrate_priority is not None:
    +            header_parameters['x-ms-rehydrate-priority'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "rehydrate_priority", rehydrate_priority, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._client._serialize.header(  # pylint: disable=protected-access
    +                "request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._client._serialize.header("lease_id", lease_id, 'str')  # pylint: disable=protected-access
    +
    +        return query_parameters, header_parameters
    +
    +    @distributed_trace
    +    def set_standard_blob_tier_blobs(
    +        self,
    +        standard_blob_tier,  # type: Union[str, StandardBlobTier]
    +        *blobs,  # type: Union[str, BlobProperties]
    +        **kwargs
    +    ):
    +        # type: (...) -> Iterator[HttpResponse]
    +        """This operation sets the tier on block blobs.
    +
    +        A block blob's tier determines Hot/Cool/Archive storage type.
    +        This operation does not update the blob's ETag.
    +
    +        :param standard_blob_tier:
    +            Indicates the tier to be set on the blob. Options include 'Hot', 'Cool',
    +            'Archive'. The hot tier is optimized for storing data that is accessed
    +            frequently. The cool storage tier is optimized for storing data that
    +            is infrequently accessed and stored for at least a month. The archive
    +            tier is optimized for storing data that is rarely accessed and stored
    +            for at least six months with flexible latency requirements.
    +        :type standard_blob_tier: str or ~azure.storage.blob.StandardBlobTier
    +        :param blobs: The blobs with which to interact. This can be a single blob, or multiple values can
    +            be supplied, where each value is either the name of the blob (str) or BlobProperties.
    +        :type blobs: str or ~azure.storage.blob.BlobProperties
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword bool raise_on_any_failure:
    +            This is a boolean param which defaults to True. When this is set, an exception
    +            is raised even if there is a single operation failure.
    +        :return: An iterator of responses, one for each blob in order
    +        :rtype: Iterator[~azure.core.pipeline.transport.HttpResponse]
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if standard_blob_tier is None:
    +            raise ValueError("A StandardBlobTier must be specified")
    +
    +        query_parameters, header_parameters = self._generate_set_tier_options(
    +            tier=standard_blob_tier,
    +            lease_access_conditions=access_conditions,
    +            **kwargs
    +        )
    +        # To pass kwargs to "_batch_send", we need to remove anything that was
    +        # in the Autorest signature for Autorest, otherwise transport will be upset
    +        for possible_param in ['timeout', 'lease']:
    +            kwargs.pop(possible_param, None)
    +
    +        reqs = []
    +        for blob in blobs:
    +            blob_name = _get_blob_name(blob)
    +            req = HttpRequest(
    +                "PUT",
    +                "/{}/{}".format(self.container_name, blob_name),
    +                headers=header_parameters
    +            )
    +            req.format_parameters(query_parameters)
    +            reqs.append(req)
    +
    +        return self._batch_send(*reqs, **kwargs)
    +
    +    @distributed_trace
    +    def set_premium_page_blob_tier_blobs(
    +        self,
    +        premium_page_blob_tier,  # type: Union[str, PremiumPageBlobTier]
    +        *blobs,  # type: Union[str, BlobProperties]
    +        **kwargs
    +    ):
    +        # type: (...) -> Iterator[HttpResponse]
    +        """Sets the page blob tiers on the blobs. This API is only supported for page blobs on premium accounts.
    +
    +        :param premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :type premium_page_blob_tier: ~azure.storage.blob.PremiumPageBlobTier
    +        :param blobs: The blobs with which to interact. This can be a single blob, or multiple values can
    +            be supplied, where each value is either the name of the blob (str) or BlobProperties.
    +        :type blobs: str or ~azure.storage.blob.BlobProperties
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword bool raise_on_any_failure:
    +            This is a boolean param which defaults to True. When this is set, an exception
    +            is raised even if there is a single operation failure.
    +        :return: An iterator of responses, one for each blob in order
    +        :rtype: iterator[~azure.core.pipeline.transport.HttpResponse]
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if premium_page_blob_tier is None:
    +            raise ValueError("A PremiumPageBlobTier must be specified")
    +
    +        query_parameters, header_parameters = self._generate_set_tier_options(
    +            tier=premium_page_blob_tier,
    +            lease_access_conditions=access_conditions,
    +            **kwargs
    +        )
    +        # To pass kwargs to "_batch_send", we need to remove anything that was
    +        # in the Autorest signature for Autorest, otherwise transport will be upset
    +        for possible_param in ['timeout', 'lease']:
    +            kwargs.pop(possible_param, None)
    +
    +        reqs = []
    +        for blob in blobs:
    +            blob_name = _get_blob_name(blob)
    +            req = HttpRequest(
    +                "PUT",
    +                "/{}/{}".format(self.container_name, blob_name),
    +                headers=header_parameters
    +            )
    +            req.format_parameters(query_parameters)
    +            reqs.append(req)
    +
    +        return self._batch_send(*reqs, **kwargs)
    +
    +    def get_blob_client(
    +            self, blob,  # type: Union[str, BlobProperties]
    +            snapshot=None  # type: str
    +        ):
    +        # type: (...) -> BlobClient
    +        """Get a client to interact with the specified blob.
    +
    +        The blob need not already exist.
    +
    +        :param blob:
    +            The blob with which to interact.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param str snapshot:
    +            The optional blob snapshot on which to operate. This can be the snapshot ID string
    +            or the response returned from :func:`~BlobClient.create_snapshot()`.
    +        :returns: A BlobClient.
    +        :rtype: ~azure.storage.blob.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers.py
    +                :start-after: [START get_blob_client]
    +                :end-before: [END get_blob_client]
    +                :language: python
    +                :dedent: 8
    +                :caption: Get the blob client.
    +        """
    +        blob_name = _get_blob_name(blob)
    +        _pipeline = Pipeline(
    +            transport=TransportWrapper(self._pipeline._transport), # pylint: disable = protected-access
    +            policies=self._pipeline._impl_policies # pylint: disable = protected-access
    +        )
    +        return BlobClient(
    +            self.url, container_name=self.container_name, blob_name=blob_name, snapshot=snapshot,
    +            credential=self.credential, api_version=self.api_version, _configuration=self._config,
    +            _pipeline=self._pipeline, _location_mode=self._location_mode, _hosts=self._hosts,
    +            require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key,
    +            key_resolver_function=self.key_resolver_function)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_deserialize.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_deserialize.py
    new file mode 100644
    index 000000000000..9796c6cc90c6
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_deserialize.py
    @@ -0,0 +1,84 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=no-self-use
    +
    +from typing import (  # pylint: disable=unused-import
    +    Tuple, Dict, List,
    +    TYPE_CHECKING
    +)
    +
    +from ._shared.response_handlers import deserialize_metadata
    +from ._models import BlobProperties, ContainerProperties, BlobAnalyticsLogging, Metrics, CorsRule, RetentionPolicy, \
    +    StaticWebsite
    +
    +if TYPE_CHECKING:
    +    from ._generated.models import PageList  # added after porting
    +    # from azure.storage.blob._generated.models import PageList
    +
    +
    +def deserialize_blob_properties(response, obj, headers):
    +    metadata = deserialize_metadata(response, obj, headers)
    +    blob_properties = BlobProperties(
    +        metadata=metadata,
    +        **headers
    +    )
    +    if 'Content-Range' in headers:
    +        if 'x-ms-blob-content-md5' in headers:
    +            blob_properties.content_settings.content_md5 = headers['x-ms-blob-content-md5']
    +        else:
    +            blob_properties.content_settings.content_md5 = None
    +    return blob_properties
    +
    +
    +def deserialize_blob_stream(response, obj, headers):
    +    blob_properties = deserialize_blob_properties(response, obj, headers)
    +    obj.properties = blob_properties
    +    return response.location_mode, obj
    +
    +
    +def deserialize_container_properties(response, obj, headers):
    +    metadata = deserialize_metadata(response, obj, headers)
    +    container_properties = ContainerProperties(
    +        metadata=metadata,
    +        **headers
    +    )
    +    return container_properties
    +
    +
    +def get_page_ranges_result(ranges):
    +    # type: (PageList) -> Tuple[List[Dict[str, int]], List[Dict[str, int]]]
    +    page_range = [] # type: ignore
    +    clear_range = [] # type: List
    +    if ranges.page_range:
    +        page_range = [{'start': b.start, 'end': b.end} for b in ranges.page_range] # type: ignore
    +    if ranges.clear_range:
    +        clear_range = [{'start': b.start, 'end': b.end} for b in ranges.clear_range]
    +    return page_range, clear_range  # type: ignore
    +
    +
    +def service_stats_deserialize(generated):
    +    """Deserialize a ServiceStats objects into a dict.
    +    """
    +    return {
    +        'geo_replication': {
    +            'status': generated.geo_replication.status,
    +            'last_sync_time': generated.geo_replication.last_sync_time,
    +        }
    +    }
    +
    +
    +def service_properties_deserialize(generated):
    +    """Deserialize a ServiceProperties objects into a dict.
    +    """
    +    return {
    +        'analytics_logging': BlobAnalyticsLogging._from_generated(generated.logging),  # pylint: disable=protected-access
    +        'hour_metrics': Metrics._from_generated(generated.hour_metrics),  # pylint: disable=protected-access
    +        'minute_metrics': Metrics._from_generated(generated.minute_metrics),  # pylint: disable=protected-access
    +        'cors': [CorsRule._from_generated(cors) for cors in generated.cors],  # pylint: disable=protected-access
    +        'target_version': generated.default_service_version,  # pylint: disable=protected-access
    +        'delete_retention_policy': RetentionPolicy._from_generated(generated.delete_retention_policy),  # pylint: disable=protected-access
    +        'static_website': StaticWebsite._from_generated(generated.static_website),  # pylint: disable=protected-access
    +    }
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_download.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_download.py
    new file mode 100644
    index 000000000000..478ed3c2804a
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_download.py
    @@ -0,0 +1,579 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import sys
    +import threading
    +import warnings
    +from io import BytesIO
    +
    +from azure.core.exceptions import HttpResponseError
    +from azure.core.tracing.common import with_current_context
    +from ._shared.encryption import decrypt_blob
    +from ._shared.request_handlers import validate_and_format_range_headers
    +from ._shared.response_handlers import process_storage_error, parse_length_from_content_range
    +from ._deserialize import get_page_ranges_result
    +
    +
    +def process_range_and_offset(start_range, end_range, length, encryption):
    +    start_offset, end_offset = 0, 0
    +    if encryption.get("key") is not None or encryption.get("resolver") is not None:
    +        if start_range is not None:
    +            # Align the start of the range along a 16 byte block
    +            start_offset = start_range % 16
    +            start_range -= start_offset
    +
    +            # Include an extra 16 bytes for the IV if necessary
    +            # Because of the previous offsetting, start_range will always
    +            # be a multiple of 16.
    +            if start_range > 0:
    +                start_offset += 16
    +                start_range -= 16
    +
    +        if length is not None:
    +            # Align the end of the range along a 16 byte block
    +            end_offset = 15 - (end_range % 16)
    +            end_range += end_offset
    +
    +    return (start_range, end_range), (start_offset, end_offset)
    +
    +
    +def process_content(data, start_offset, end_offset, encryption):
    +    if data is None:
    +        raise ValueError("Response cannot be None.")
    +    try:
    +        content = b"".join(list(data))
    +    except Exception as error:
    +        raise HttpResponseError(message="Download stream interrupted.", response=data.response, error=error)
    +    if content and encryption.get("key") is not None or encryption.get("resolver") is not None:
    +        try:
    +            return decrypt_blob(
    +                encryption.get("required"),
    +                encryption.get("key"),
    +                encryption.get("resolver"),
    +                content,
    +                start_offset,
    +                end_offset,
    +                data.response.headers,
    +            )
    +        except Exception as error:
    +            raise HttpResponseError(message="Decryption failed.", response=data.response, error=error)
    +    return content
    +
    +
    +class _ChunkDownloader(object):  # pylint: disable=too-many-instance-attributes
    +    def __init__(
    +        self,
    +        client=None,
    +        non_empty_ranges=None,
    +        total_size=None,
    +        chunk_size=None,
    +        current_progress=None,
    +        start_range=None,
    +        end_range=None,
    +        stream=None,
    +        parallel=None,
    +        validate_content=None,
    +        encryption_options=None,
    +        **kwargs
    +    ):
    +        self.client = client
    +        self.non_empty_ranges = non_empty_ranges
    +
    +        # Information on the download range/chunk size
    +        self.chunk_size = chunk_size
    +        self.total_size = total_size
    +        self.start_index = start_range
    +        self.end_index = end_range
    +
    +        # The destination that we will write to
    +        self.stream = stream
    +        self.stream_lock = threading.Lock() if parallel else None
    +        self.progress_lock = threading.Lock() if parallel else None
    +
    +        # For a parallel download, the stream is always seekable, so we note down the current position
    +        # in order to seek to the right place when out-of-order chunks come in
    +        self.stream_start = stream.tell() if parallel else None
    +
    +        # Download progress so far
    +        self.progress_total = current_progress
    +
    +        # Encryption
    +        self.encryption_options = encryption_options
    +
    +        # Parameters for each get operation
    +        self.validate_content = validate_content
    +        self.request_options = kwargs
    +
    +    def _calculate_range(self, chunk_start):
    +        if chunk_start + self.chunk_size > self.end_index:
    +            chunk_end = self.end_index
    +        else:
    +            chunk_end = chunk_start + self.chunk_size
    +        return chunk_start, chunk_end
    +
    +    def get_chunk_offsets(self):
    +        index = self.start_index
    +        while index < self.end_index:
    +            yield index
    +            index += self.chunk_size
    +
    +    def process_chunk(self, chunk_start):
    +        chunk_start, chunk_end = self._calculate_range(chunk_start)
    +        chunk_data = self._download_chunk(chunk_start, chunk_end - 1)
    +        length = chunk_end - chunk_start
    +        if length > 0:
    +            self._write_to_stream(chunk_data, chunk_start)
    +            self._update_progress(length)
    +
    +    def yield_chunk(self, chunk_start):
    +        chunk_start, chunk_end = self._calculate_range(chunk_start)
    +        return self._download_chunk(chunk_start, chunk_end - 1)
    +
    +    def _update_progress(self, length):
    +        if self.progress_lock:
    +            with self.progress_lock:  # pylint: disable=not-context-manager
    +                self.progress_total += length
    +        else:
    +            self.progress_total += length
    +
    +    def _write_to_stream(self, chunk_data, chunk_start):
    +        if self.stream_lock:
    +            with self.stream_lock:  # pylint: disable=not-context-manager
    +                self.stream.seek(self.stream_start + (chunk_start - self.start_index))
    +                self.stream.write(chunk_data)
    +        else:
    +            self.stream.write(chunk_data)
    +
    +    def _do_optimize(self, given_range_start, given_range_end):
    +        # If we have no page range list stored, then assume there's data everywhere for that page blob
    +        # or it's a block blob or append blob
    +        if self.non_empty_ranges is None:
    +            return False
    +
    +        for source_range in self.non_empty_ranges:
    +            # Case 1: As the range list is sorted, if we've reached such a source_range
    +            # we've checked all the appropriate source_range already and haven't found any overlapping.
    +            # so the given range doesn't have any data and download optimization could be applied.
    +            # given range:		|   |
    +            # source range:			       |   |
    +            if given_range_end < source_range['start']:  # pylint:disable=no-else-return
    +                return True
    +            # Case 2: the given range comes after source_range, continue checking.
    +            # given range:				|   |
    +            # source range:	|   |
    +            elif source_range['end'] < given_range_start:
    +                pass
    +            # Case 3: source_range and given range overlap somehow, no need to optimize.
    +            else:
    +                return False
    +        # Went through all src_ranges, but nothing overlapped. Optimization will be applied.
    +        return True
    +
    +    def _download_chunk(self, chunk_start, chunk_end):
    +        download_range, offset = process_range_and_offset(
    +            chunk_start, chunk_end, chunk_end, self.encryption_options
    +        )
    +
    +        # No need to download the empty chunk from server if there's no data in the chunk to be downloaded.
    +        # Do optimize and create empty chunk locally if condition is met.
    +        if self._do_optimize(download_range[0], download_range[1]):
    +            chunk_data = b"\x00" * self.chunk_size
    +        else:
    +            range_header, range_validation = validate_and_format_range_headers(
    +                download_range[0],
    +                download_range[1],
    +                check_content_md5=self.validate_content
    +            )
    +
    +            try:
    +                _, response = self.client.download(
    +                    range=range_header,
    +                    range_get_content_md5=range_validation,
    +                    validate_content=self.validate_content,
    +                    data_stream_total=self.total_size,
    +                    download_stream_current=self.progress_total,
    +                    **self.request_options
    +                )
    +            except HttpResponseError as error:
    +                process_storage_error(error)
    +
    +            chunk_data = process_content(response, offset[0], offset[1], self.encryption_options)
    +
    +            # This makes sure that if_match is set so that we can validate
    +            # that subsequent downloads are to an unmodified blob
    +            if self.request_options.get("modified_access_conditions"):
    +                self.request_options["modified_access_conditions"].if_match = response.properties.etag
    +
    +        return chunk_data
    +
    +
    +class _ChunkIterator(object):
    +    """Async iterator for chunks in blob download stream."""
    +
    +    def __init__(self, size, content, downloader):
    +        self.size = size
    +        self._current_content = content
    +        self._iter_downloader = downloader
    +        self._iter_chunks = None
    +        self._complete = (size == 0)
    +
    +    def __len__(self):
    +        return self.size
    +
    +    def __iter__(self):
    +        return self
    +
    +    def __next__(self):
    +        """Iterate through responses."""
    +        if self._complete:
    +            raise StopIteration("Download complete")
    +        if not self._iter_downloader:
    +            # If no iterator was supplied, the download completed with
    +            # the initial GET, so we just return that data
    +            self._complete = True
    +            return self._current_content
    +
    +        if not self._iter_chunks:
    +            self._iter_chunks = self._iter_downloader.get_chunk_offsets()
    +        else:
    +            chunk = next(self._iter_chunks)
    +            self._current_content = self._iter_downloader.yield_chunk(chunk)
    +
    +        return self._current_content
    +
    +    next = __next__  # Python 2 compatibility.
    +
    +
    +class StorageStreamDownloader(object):  # pylint: disable=too-many-instance-attributes
    +    """A streaming object to download from Azure Storage.
    +
    +    :ivar str name:
    +        The name of the blob being downloaded.
    +    :ivar str container:
    +        The name of the container where the blob is.
    +    :ivar ~azure.storage.blob.BlobProperties properties:
    +        The properties of the blob being downloaded. If only a range of the data is being
    +        downloaded, this will be reflected in the properties.
    +    :ivar int size:
    +        The size of the total data in the stream. This will be the byte range if speficied,
    +        otherwise the total size of the blob.
    +    """
    +
    +    def __init__(
    +        self,
    +        clients=None,
    +        config=None,
    +        start_range=None,
    +        end_range=None,
    +        validate_content=None,
    +        encryption_options=None,
    +        max_concurrency=1,
    +        name=None,
    +        container=None,
    +        encoding=None,
    +        **kwargs
    +    ):
    +        self.name = name
    +        self.container = container
    +        self.properties = None
    +        self.size = None
    +
    +        self._clients = clients
    +        self._config = config
    +        self._start_range = start_range
    +        self._end_range = end_range
    +        self._max_concurrency = max_concurrency
    +        self._encoding = encoding
    +        self._validate_content = validate_content
    +        self._encryption_options = encryption_options or {}
    +        self._request_options = kwargs
    +        self._location_mode = None
    +        self._download_complete = False
    +        self._current_content = None
    +        self._file_size = None
    +        self._non_empty_ranges = None
    +        self._response = None
    +
    +        # The service only provides transactional MD5s for chunks under 4MB.
    +        # If validate_content is on, get only self.MAX_CHUNK_GET_SIZE for the first
    +        # chunk so a transactional MD5 can be retrieved.
    +        self._first_get_size = (
    +            self._config.max_single_get_size if not self._validate_content else self._config.max_chunk_get_size
    +        )
    +        initial_request_start = self._start_range if self._start_range is not None else 0
    +        if self._end_range is not None and self._end_range - self._start_range < self._first_get_size:
    +            initial_request_end = self._end_range
    +        else:
    +            initial_request_end = initial_request_start + self._first_get_size - 1
    +
    +        self._initial_range, self._initial_offset = process_range_and_offset(
    +            initial_request_start, initial_request_end, self._end_range, self._encryption_options
    +        )
    +
    +        self._response = self._initial_request()
    +        self.properties = self._response.properties
    +        self.properties.name = self.name
    +        self.properties.container = self.container
    +
    +        # Set the content length to the download size instead of the size of
    +        # the last range
    +        self.properties.size = self.size
    +
    +        # Overwrite the content range to the user requested range
    +        self.properties.content_range = "bytes {0}-{1}/{2}".format(
    +            self._start_range,
    +            self._end_range,
    +            self._file_size
    +        )
    +
    +        # Overwrite the content MD5 as it is the MD5 for the last range instead
    +        # of the stored MD5
    +        # TODO: Set to the stored MD5 when the service returns this
    +        self.properties.content_md5 = None
    +
    +        if self.size == 0:
    +            self._current_content = b""
    +        else:
    +            self._current_content = process_content(
    +                self._response,
    +                self._initial_offset[0],
    +                self._initial_offset[1],
    +                self._encryption_options
    +            )
    +
    +    def __len__(self):
    +        return self.size
    +
    +    def _initial_request(self):
    +        range_header, range_validation = validate_and_format_range_headers(
    +            self._initial_range[0],
    +            self._initial_range[1],
    +            start_range_required=False,
    +            end_range_required=False,
    +            check_content_md5=self._validate_content
    +        )
    +
    +        try:
    +            location_mode, response = self._clients.blob.download(
    +                range=range_header,
    +                range_get_content_md5=range_validation,
    +                validate_content=self._validate_content,
    +                data_stream_total=None,
    +                download_stream_current=0,
    +                **self._request_options
    +            )
    +
    +            # Check the location we read from to ensure we use the same one
    +            # for subsequent requests.
    +            self._location_mode = location_mode
    +
    +            # Parse the total file size and adjust the download size if ranges
    +            # were specified
    +            self._file_size = parse_length_from_content_range(response.properties.content_range)
    +            if self._end_range is not None:
    +                # Use the end range index unless it is over the end of the file
    +                self.size = min(self._file_size, self._end_range - self._start_range + 1)
    +            elif self._start_range is not None:
    +                self.size = self._file_size - self._start_range
    +            else:
    +                self.size = self._file_size
    +
    +        except HttpResponseError as error:
    +            if self._start_range is None and error.response.status_code == 416:
    +                # Get range will fail on an empty file. If the user did not
    +                # request a range, do a regular get request in order to get
    +                # any properties.
    +                try:
    +                    _, response = self._clients.blob.download(
    +                        validate_content=self._validate_content,
    +                        data_stream_total=0,
    +                        download_stream_current=0,
    +                        **self._request_options
    +                    )
    +                except HttpResponseError as error:
    +                    process_storage_error(error)
    +
    +                # Set the download size to empty
    +                self.size = 0
    +                self._file_size = 0
    +            else:
    +                process_storage_error(error)
    +
    +        # get page ranges to optimize downloading sparse page blob
    +        if response.properties.blob_type == 'PageBlob':
    +            try:
    +                page_ranges = self._clients.page_blob.get_page_ranges()
    +                self._non_empty_ranges = get_page_ranges_result(page_ranges)[0]
    +            # according to the REST API documentation:
    +            # in a highly fragmented page blob with a large number of writes,
    +            # a Get Page Ranges request can fail due to an internal server timeout.
    +            # thus, if the page blob is not sparse, it's ok for it to fail
    +            except HttpResponseError:
    +                pass
    +
    +        # If the file is small, the download is complete at this point.
    +        # If file size is large, download the rest of the file in chunks.
    +        if response.properties.size != self.size:
    +            # Lock on the etag. This can be overriden by the user by specifying '*'
    +            if self._request_options.get("modified_access_conditions"):
    +                if not self._request_options["modified_access_conditions"].if_match:
    +                    self._request_options["modified_access_conditions"].if_match = response.properties.etag
    +        else:
    +            self._download_complete = True
    +        return response
    +
    +    def chunks(self):
    +        if self.size == 0 or self._download_complete:
    +            iter_downloader = None
    +        else:
    +            data_end = self._file_size
    +            if self._end_range is not None:
    +                # Use the end range index unless it is over the end of the file
    +                data_end = min(self._file_size, self._end_range + 1)
    +            iter_downloader = _ChunkDownloader(
    +                client=self._clients.blob,
    +                non_empty_ranges=self._non_empty_ranges,
    +                total_size=self.size,
    +                chunk_size=self._config.max_chunk_get_size,
    +                current_progress=self._first_get_size,
    +                start_range=self._initial_range[1] + 1,  # start where the first download ended
    +                end_range=data_end,
    +                stream=None,
    +                parallel=False,
    +                validate_content=self._validate_content,
    +                encryption_options=self._encryption_options,
    +                use_location=self._location_mode,
    +                **self._request_options
    +            )
    +        return _ChunkIterator(
    +            size=self.size,
    +            content=self._current_content,
    +            downloader=iter_downloader)
    +
    +    def readall(self):
    +        """Download the contents of this blob.
    +
    +        This operation is blocking until all data is downloaded.
    +        :rtype: bytes or str
    +        """
    +        stream = BytesIO()
    +        self.readinto(stream)
    +        data = stream.getvalue()
    +        if self._encoding:
    +            return data.decode(self._encoding)
    +        return data
    +
    +    def content_as_bytes(self, max_concurrency=1):
    +        """Download the contents of this file.
    +
    +        This operation is blocking until all data is downloaded.
    +
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :rtype: bytes
    +        """
    +        warnings.warn(
    +            "content_as_bytes is deprecated, use readall instead",
    +            DeprecationWarning
    +        )
    +        self._max_concurrency = max_concurrency
    +        return self.readall()
    +
    +    def content_as_text(self, max_concurrency=1, encoding="UTF-8"):
    +        """Download the contents of this blob, and decode as text.
    +
    +        This operation is blocking until all data is downloaded.
    +
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :param str encoding:
    +            Test encoding to decode the downloaded bytes. Default is UTF-8.
    +        :rtype: str
    +        """
    +        warnings.warn(
    +            "content_as_text is deprecated, use readall instead",
    +            DeprecationWarning
    +        )
    +        self._max_concurrency = max_concurrency
    +        self._encoding = encoding
    +        return self.readall()
    +
    +    def readinto(self, stream):
    +        """Download the contents of this file to a stream.
    +
    +        :param stream:
    +            The stream to download to. This can be an open file-handle,
    +            or any writable stream. The stream must be seekable if the download
    +            uses more than one parallel connection.
    +        :returns: The number of bytes read.
    +        :rtype: int
    +        """
    +        # The stream must be seekable if parallel download is required
    +        parallel = self._max_concurrency > 1
    +        if parallel:
    +            error_message = "Target stream handle must be seekable."
    +            if sys.version_info >= (3,) and not stream.seekable():
    +                raise ValueError(error_message)
    +
    +            try:
    +                stream.seek(stream.tell())
    +            except (NotImplementedError, AttributeError):
    +                raise ValueError(error_message)
    +
    +        # Write the content to the user stream
    +        stream.write(self._current_content)
    +        if self._download_complete:
    +            return self.size
    +
    +        data_end = self._file_size
    +        if self._end_range is not None:
    +            # Use the length unless it is over the end of the file
    +            data_end = min(self._file_size, self._end_range + 1)
    +
    +        downloader = _ChunkDownloader(
    +            client=self._clients.blob,
    +            non_empty_ranges=self._non_empty_ranges,
    +            total_size=self.size,
    +            chunk_size=self._config.max_chunk_get_size,
    +            current_progress=self._first_get_size,
    +            start_range=self._initial_range[1] + 1,  # Start where the first download ended
    +            end_range=data_end,
    +            stream=stream,
    +            parallel=parallel,
    +            validate_content=self._validate_content,
    +            encryption_options=self._encryption_options,
    +            use_location=self._location_mode,
    +            **self._request_options
    +        )
    +        if parallel:
    +            import concurrent.futures
    +            executor = concurrent.futures.ThreadPoolExecutor(self._max_concurrency)
    +            list(executor.map(
    +                    with_current_context(downloader.process_chunk),
    +                    downloader.get_chunk_offsets()
    +                ))
    +        else:
    +            for chunk in downloader.get_chunk_offsets():
    +                downloader.process_chunk(chunk)
    +        return self.size
    +
    +    def download_to_stream(self, stream, max_concurrency=1):
    +        """Download the contents of this blob to a stream.
    +
    +        :param stream:
    +            The stream to download to. This can be an open file-handle,
    +            or any writable stream. The stream must be seekable if the download
    +            uses more than one parallel connection.
    +        :returns: The properties of the downloaded blob.
    +        :rtype: Any
    +        """
    +        warnings.warn(
    +            "download_to_stream is deprecated, use readinto instead",
    +            DeprecationWarning
    +        )
    +        self._max_concurrency = max_concurrency
    +        self.readinto(stream)
    +        return self.properties
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/__init__.py
    new file mode 100644
    index 000000000000..f5c8f4a954df
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/__init__.py
    @@ -0,0 +1,18 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._azure_blob_storage import AzureBlobStorage
    +__all__ = ['AzureBlobStorage']
    +
    +from .version import VERSION
    +
    +__version__ = VERSION
    +
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/_azure_blob_storage.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/_azure_blob_storage.py
    new file mode 100644
    index 000000000000..4da98d39c392
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/_azure_blob_storage.py
    @@ -0,0 +1,83 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core import PipelineClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration import AzureBlobStorageConfiguration
    +from azure.core.exceptions import map_error
    +from .operations import ServiceOperations
    +from .operations import ContainerOperations
    +from .operations import DirectoryOperations
    +from .operations import BlobOperations
    +from .operations import PageBlobOperations
    +from .operations import AppendBlobOperations
    +from .operations import BlockBlobOperations
    +from . import models
    +
    +
    +class AzureBlobStorage(object):
    +    """AzureBlobStorage
    +
    +
    +    :ivar service: Service operations
    +    :vartype service: azure.storage.blob.operations.ServiceOperations
    +    :ivar container: Container operations
    +    :vartype container: azure.storage.blob.operations.ContainerOperations
    +    :ivar directory: Directory operations
    +    :vartype directory: azure.storage.blob.operations.DirectoryOperations
    +    :ivar blob: Blob operations
    +    :vartype blob: azure.storage.blob.operations.BlobOperations
    +    :ivar page_blob: PageBlob operations
    +    :vartype page_blob: azure.storage.blob.operations.PageBlobOperations
    +    :ivar append_blob: AppendBlob operations
    +    :vartype append_blob: azure.storage.blob.operations.AppendBlobOperations
    +    :ivar block_blob: BlockBlob operations
    +    :vartype block_blob: azure.storage.blob.operations.BlockBlobOperations
    +
    +    :param url: The URL of the service account, container, or blob that is the
    +     targe of the desired operation.
    +    :type url: str
    +    """
    +
    +    def __init__(self, url, **kwargs):
    +
    +        base_url = '{url}'
    +        self._config = AzureBlobStorageConfiguration(url, **kwargs)
    +        self._client = PipelineClient(base_url=base_url, config=self._config, **kwargs)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '2019-07-07'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +        self.service = ServiceOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.container = ContainerOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.directory = DirectoryOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.blob = BlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.page_blob = PageBlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.append_blob = AppendBlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.block_blob = BlockBlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +
    +    def close(self):
    +        self._client.close()
    +    def __enter__(self):
    +        self._client.__enter__()
    +        return self
    +    def __exit__(self, *exc_details):
    +        self._client.__exit__(*exc_details)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/_configuration.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/_configuration.py
    new file mode 100644
    index 000000000000..24ac275f9379
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/_configuration.py
    @@ -0,0 +1,52 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.configuration import Configuration
    +from azure.core.pipeline import policies
    +
    +from .version import VERSION
    +
    +
    +class AzureBlobStorageConfiguration(Configuration):
    +    """Configuration for AzureBlobStorage
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param url: The URL of the service account, container, or blob that is the
    +     targe of the desired operation.
    +    :type url: str
    +    :ivar version: Specifies the version of the operation to use for this
    +     request.
    +    :type version: str
    +    """
    +
    +    def __init__(self, url, **kwargs):
    +
    +        if url is None:
    +            raise ValueError("Parameter 'url' must not be None.")
    +
    +        super(AzureBlobStorageConfiguration, self).__init__(**kwargs)
    +        self._configure(**kwargs)
    +
    +        self.user_agent_policy.add_user_agent('azsdk-python-azureblobstorage/{}'.format(VERSION))
    +        self.generate_client_request_id = True
    +
    +        self.url = url
    +        self.version = "2019-07-07"
    +
    +    def _configure(self, **kwargs):
    +        self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs)
    +        self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs)
    +        self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
    +        self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
    +        self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs)
    +        self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
    +        self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/__init__.py
    new file mode 100644
    index 000000000000..009c96594356
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/__init__.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._azure_blob_storage_async import AzureBlobStorage
    +__all__ = ['AzureBlobStorage']
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/_azure_blob_storage_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/_azure_blob_storage_async.py
    new file mode 100644
    index 000000000000..6273538a3a10
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/_azure_blob_storage_async.py
    @@ -0,0 +1,84 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core import AsyncPipelineClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration_async import AzureBlobStorageConfiguration
    +from azure.core.exceptions import map_error
    +from .operations_async import ServiceOperations
    +from .operations_async import ContainerOperations
    +from .operations_async import DirectoryOperations
    +from .operations_async import BlobOperations
    +from .operations_async import PageBlobOperations
    +from .operations_async import AppendBlobOperations
    +from .operations_async import BlockBlobOperations
    +from .. import models
    +
    +
    +class AzureBlobStorage(object):
    +    """AzureBlobStorage
    +
    +
    +    :ivar service: Service operations
    +    :vartype service: azure.storage.blob.aio.operations_async.ServiceOperations
    +    :ivar container: Container operations
    +    :vartype container: azure.storage.blob.aio.operations_async.ContainerOperations
    +    :ivar directory: Directory operations
    +    :vartype directory: azure.storage.blob.aio.operations_async.DirectoryOperations
    +    :ivar blob: Blob operations
    +    :vartype blob: azure.storage.blob.aio.operations_async.BlobOperations
    +    :ivar page_blob: PageBlob operations
    +    :vartype page_blob: azure.storage.blob.aio.operations_async.PageBlobOperations
    +    :ivar append_blob: AppendBlob operations
    +    :vartype append_blob: azure.storage.blob.aio.operations_async.AppendBlobOperations
    +    :ivar block_blob: BlockBlob operations
    +    :vartype block_blob: azure.storage.blob.aio.operations_async.BlockBlobOperations
    +
    +    :param url: The URL of the service account, container, or blob that is the
    +     targe of the desired operation.
    +    :type url: str
    +    """
    +
    +    def __init__(
    +            self, url, **kwargs):
    +
    +        base_url = '{url}'
    +        self._config = AzureBlobStorageConfiguration(url, **kwargs)
    +        self._client = AsyncPipelineClient(base_url=base_url, config=self._config, **kwargs)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '2019-07-07'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +        self.service = ServiceOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.container = ContainerOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.directory = DirectoryOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.blob = BlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.page_blob = PageBlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.append_blob = AppendBlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +        self.block_blob = BlockBlobOperations(
    +            self._client, self._config, self._serialize, self._deserialize)
    +
    +    async def close(self):
    +        await self._client.close()
    +    async def __aenter__(self):
    +        await self._client.__aenter__()
    +        return self
    +    async def __aexit__(self, *exc_details):
    +        await self._client.__aexit__(*exc_details)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/_configuration_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/_configuration_async.py
    new file mode 100644
    index 000000000000..e061a25e717e
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/_configuration_async.py
    @@ -0,0 +1,53 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.configuration import Configuration
    +from azure.core.pipeline import policies
    +
    +from ..version import VERSION
    +
    +
    +class AzureBlobStorageConfiguration(Configuration):
    +    """Configuration for AzureBlobStorage
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param url: The URL of the service account, container, or blob that is the
    +     targe of the desired operation.
    +    :type url: str
    +    :ivar version: Specifies the version of the operation to use for this
    +     request.
    +    :type version: str
    +    """
    +
    +    def __init__(self, url, **kwargs):
    +
    +        if url is None:
    +            raise ValueError("Parameter 'url' must not be None.")
    +
    +        super(AzureBlobStorageConfiguration, self).__init__(**kwargs)
    +        self._configure(**kwargs)
    +
    +        self.user_agent_policy.add_user_agent('azsdk-python-azureblobstorage/{}'.format(VERSION))
    +        self.generate_client_request_id = True
    +        self.accept_language = None
    +
    +        self.url = url
    +        self.version = "2019-07-07"
    +
    +    def _configure(self, **kwargs):
    +        self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs)
    +        self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs)
    +        self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
    +        self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
    +        self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs)
    +        self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
    +        self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/__init__.py
    new file mode 100644
    index 000000000000..dec05192c81f
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/__init__.py
    @@ -0,0 +1,28 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._service_operations_async import ServiceOperations
    +from ._container_operations_async import ContainerOperations
    +from ._directory_operations_async import DirectoryOperations
    +from ._blob_operations_async import BlobOperations
    +from ._page_blob_operations_async import PageBlobOperations
    +from ._append_blob_operations_async import AppendBlobOperations
    +from ._block_blob_operations_async import BlockBlobOperations
    +
    +__all__ = [
    +    'ServiceOperations',
    +    'ContainerOperations',
    +    'DirectoryOperations',
    +    'BlobOperations',
    +    'PageBlobOperations',
    +    'AppendBlobOperations',
    +    'BlockBlobOperations',
    +]
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_append_blob_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_append_blob_operations_async.py
    new file mode 100644
    index 000000000000..db94e0a92b36
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_append_blob_operations_async.py
    @@ -0,0 +1,563 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class AppendBlobOperations:
    +    """AppendBlobOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_blob_type: Specifies the type of blob to create: block blob, page blob, or append blob. Constant value: "AppendBlob".
    +    :ivar comp: . Constant value: "appendblock".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_blob_type = "AppendBlob"
    +        self.comp = "appendblock"
    +
    +    async def create(self, content_length, timeout=None, metadata=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Create Append Blob operation creates a new append blob.
    +
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-blob-type'] = self._serialize.header("self.x_ms_blob_type", self.x_ms_blob_type, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def append_block(self, body, content_length, timeout=None, transactional_content_md5=None, transactional_content_crc64=None, request_id=None, lease_access_conditions=None, append_position_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Append Block operation commits a new block of data to the end of an
    +        existing append blob. The Append Block operation is permitted only if
    +        the blob was created with x-ms-blob-type set to AppendBlob. Append
    +        Block is supported only on version 2015-02-21 version or later.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param append_position_access_conditions: Additional parameters for
    +         the operation
    +        :type append_position_access_conditions:
    +         ~azure.storage.blob.models.AppendPositionAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        max_size = None
    +        if append_position_access_conditions is not None:
    +            max_size = append_position_access_conditions.max_size
    +        append_position = None
    +        if append_position_access_conditions is not None:
    +            append_position = append_position_access_conditions.append_position
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.append_block.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("self.comp", self.comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if max_size is not None:
    +            header_parameters['x-ms-blob-condition-maxsize'] = self._serialize.header("max_size", max_size, 'long')
    +        if append_position is not None:
    +            header_parameters['x-ms-blob-condition-appendpos'] = self._serialize.header("append_position", append_position, 'long')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-append-offset': self._deserialize('str', response.headers.get('x-ms-blob-append-offset')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    append_block.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def append_block_from_url(self, source_url, content_length, source_range=None, source_content_md5=None, source_contentcrc64=None, timeout=None, transactional_content_md5=None, request_id=None, cpk_info=None, cpk_scope_info=None, lease_access_conditions=None, append_position_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Append Block operation commits a new block of data to the end of an
    +        existing append blob where the contents are read from a source url. The
    +        Append Block operation is permitted only if the blob was created with
    +        x-ms-blob-type set to AppendBlob. Append Block is supported only on
    +        version 2015-02-21 version or later.
    +
    +        :param source_url: Specify a URL to the copy source.
    +        :type source_url: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param source_range: Bytes of source data in the specified range.
    +        :type source_range: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_contentcrc64: Specify the crc64 calculated for the range
    +         of bytes that must be read from the copy source.
    +        :type source_contentcrc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param append_position_access_conditions: Additional parameters for
    +         the operation
    +        :type append_position_access_conditions:
    +         ~azure.storage.blob.models.AppendPositionAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        max_size = None
    +        if append_position_access_conditions is not None:
    +            max_size = append_position_access_conditions.max_size
    +        append_position = None
    +        if append_position_access_conditions is not None:
    +            append_position = append_position_access_conditions.append_position
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        # Construct URL
    +        url = self.append_block_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("self.comp", self.comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("source_url", source_url, 'str')
    +        if source_range is not None:
    +            header_parameters['x-ms-source-range'] = self._serialize.header("source_range", source_range, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        if source_contentcrc64 is not None:
    +            header_parameters['x-ms-source-content-crc64'] = self._serialize.header("source_contentcrc64", source_contentcrc64, 'bytearray')
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if max_size is not None:
    +            header_parameters['x-ms-blob-condition-maxsize'] = self._serialize.header("max_size", max_size, 'long')
    +        if append_position is not None:
    +            header_parameters['x-ms-blob-condition-appendpos'] = self._serialize.header("append_position", append_position, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-append-offset': self._deserialize('str', response.headers.get('x-ms-blob-append-offset')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    append_block_from_url.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_blob_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_blob_operations_async.py
    new file mode 100644
    index 000000000000..3374d597419f
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_blob_operations_async.py
    @@ -0,0 +1,2443 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class BlobOperations:
    +    """BlobOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_requires_sync: . Constant value: "true".
    +    :ivar x_ms_copy_action: . Constant value: "abort".
    +    :ivar restype: . Constant value: "account".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_requires_sync = "true"
    +        self.x_ms_copy_action = "abort"
    +        self.restype = "account"
    +
    +    async def download(self, snapshot=None, timeout=None, range=None, range_get_content_md5=None, range_get_content_crc64=None, request_id=None, lease_access_conditions=None, cpk_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Download operation reads or downloads a blob from the system,
    +        including its metadata and properties. You can also call Download to
    +        read a snapshot.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param range_get_content_md5: When set to true and specified together
    +         with the Range, the service returns the MD5 hash for the range, as
    +         long as the range is less than or equal to 4 MB in size.
    +        :type range_get_content_md5: bool
    +        :param range_get_content_crc64: When set to true and specified
    +         together with the Range, the service returns the CRC64 hash for the
    +         range, as long as the range is less than or equal to 4 MB in size.
    +        :type range_get_content_crc64: bool
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: object or the result of cls(response)
    +        :rtype: Generator
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.download.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        if range_get_content_md5 is not None:
    +            header_parameters['x-ms-range-get-content-md5'] = self._serialize.header("range_get_content_md5", range_get_content_md5, 'bool')
    +        if range_get_content_crc64 is not None:
    +            header_parameters['x-ms-range-get-content-crc64'] = self._serialize.header("range_get_content_crc64", range_get_content_crc64, 'bool')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=True, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200, 206]:
    +            await response.load_body()
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = response.stream_download(self._client._pipeline)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'Content-Range': self._deserialize('str', response.headers.get('Content-Range')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'Content-Encoding': self._deserialize('str', response.headers.get('Content-Encoding')),
    +                'Cache-Control': self._deserialize('str', response.headers.get('Cache-Control')),
    +                'Content-Disposition': self._deserialize('str', response.headers.get('Content-Disposition')),
    +                'Content-Language': self._deserialize('str', response.headers.get('Content-Language')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-blob-type': self._deserialize(models.BlobType, response.headers.get('x-ms-blob-type')),
    +                'x-ms-copy-completion-time': self._deserialize('rfc-1123', response.headers.get('x-ms-copy-completion-time')),
    +                'x-ms-copy-status-description': self._deserialize('str', response.headers.get('x-ms-copy-status-description')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-progress': self._deserialize('str', response.headers.get('x-ms-copy-progress')),
    +                'x-ms-copy-source': self._deserialize('str', response.headers.get('x-ms-copy-source')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Accept-Ranges': self._deserialize('str', response.headers.get('Accept-Ranges')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-blob-content-md5': self._deserialize('bytearray', response.headers.get('x-ms-blob-content-md5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +        if response.status_code == 206:
    +            deserialized = response.stream_download(self._client._pipeline)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'Content-Range': self._deserialize('str', response.headers.get('Content-Range')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'Content-Encoding': self._deserialize('str', response.headers.get('Content-Encoding')),
    +                'Cache-Control': self._deserialize('str', response.headers.get('Cache-Control')),
    +                'Content-Disposition': self._deserialize('str', response.headers.get('Content-Disposition')),
    +                'Content-Language': self._deserialize('str', response.headers.get('Content-Language')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-blob-type': self._deserialize(models.BlobType, response.headers.get('x-ms-blob-type')),
    +                'x-ms-copy-completion-time': self._deserialize('rfc-1123', response.headers.get('x-ms-copy-completion-time')),
    +                'x-ms-copy-status-description': self._deserialize('str', response.headers.get('x-ms-copy-status-description')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-progress': self._deserialize('str', response.headers.get('x-ms-copy-progress')),
    +                'x-ms-copy-source': self._deserialize('str', response.headers.get('x-ms-copy-source')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Accept-Ranges': self._deserialize('str', response.headers.get('Accept-Ranges')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-blob-content-md5': self._deserialize('bytearray', response.headers.get('x-ms-blob-content-md5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    download.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def get_properties(self, snapshot=None, timeout=None, request_id=None, lease_access_conditions=None, cpk_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Get Properties operation returns all user-defined metadata,
    +        standard HTTP properties, and system properties for the blob. It does
    +        not return the content of the blob.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.get_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.head(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-creation-time': self._deserialize('rfc-1123', response.headers.get('x-ms-creation-time')),
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'x-ms-blob-type': self._deserialize(models.BlobType, response.headers.get('x-ms-blob-type')),
    +                'x-ms-copy-completion-time': self._deserialize('rfc-1123', response.headers.get('x-ms-copy-completion-time')),
    +                'x-ms-copy-status-description': self._deserialize('str', response.headers.get('x-ms-copy-status-description')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-progress': self._deserialize('str', response.headers.get('x-ms-copy-progress')),
    +                'x-ms-copy-source': self._deserialize('str', response.headers.get('x-ms-copy-source')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-incremental-copy': self._deserialize('bool', response.headers.get('x-ms-incremental-copy')),
    +                'x-ms-copy-destination-snapshot': self._deserialize('str', response.headers.get('x-ms-copy-destination-snapshot')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'Content-Encoding': self._deserialize('str', response.headers.get('Content-Encoding')),
    +                'Content-Disposition': self._deserialize('str', response.headers.get('Content-Disposition')),
    +                'Content-Language': self._deserialize('str', response.headers.get('Content-Language')),
    +                'Cache-Control': self._deserialize('str', response.headers.get('Cache-Control')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'Accept-Ranges': self._deserialize('str', response.headers.get('Accept-Ranges')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-access-tier': self._deserialize('str', response.headers.get('x-ms-access-tier')),
    +                'x-ms-access-tier-inferred': self._deserialize('bool', response.headers.get('x-ms-access-tier-inferred')),
    +                'x-ms-archive-status': self._deserialize('str', response.headers.get('x-ms-archive-status')),
    +                'x-ms-access-tier-change-time': self._deserialize('rfc-1123', response.headers.get('x-ms-access-tier-change-time')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_properties.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def delete(self, snapshot=None, timeout=None, delete_snapshots=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """If the storage account's soft delete feature is disabled then, when a
    +        blob is deleted, it is permanently removed from the storage account. If
    +        the storage account's soft delete feature is enabled, then, when a blob
    +        is deleted, it is marked for deletion and becomes inaccessible
    +        immediately. However, the blob service retains the blob or snapshot for
    +        the number of days specified by the DeleteRetentionPolicy section of
    +        [Storage service properties] (Set-Blob-Service-Properties.md). After
    +        the specified number of days has passed, the blob's data is permanently
    +        removed from the storage account. Note that you continue to be charged
    +        for the soft-deleted blob's storage until it is permanently removed.
    +        Use the List Blobs API and specify the "include=deleted" query
    +        parameter to discover which blobs and snapshots have been soft deleted.
    +        You can then use the Undelete Blob API to restore a soft-deleted blob.
    +        All other operations on a soft-deleted blob or snapshot causes the
    +        service to return an HTTP status code of 404 (ResourceNotFound).
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param delete_snapshots: Required if the blob has associated
    +         snapshots. Specify one of the following two options: include: Delete
    +         the base blob and all of its snapshots. only: Delete only the blob's
    +         snapshots and not the blob itself. Possible values include: 'include',
    +         'only'
    +        :type delete_snapshots: str or
    +         ~azure.storage.blob.models.DeleteSnapshotsOptionType
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if delete_snapshots is not None:
    +            header_parameters['x-ms-delete-snapshots'] = self._serialize.header("delete_snapshots", delete_snapshots, 'DeleteSnapshotsOptionType')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    delete.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def set_access_control(self, timeout=None, owner=None, group=None, posix_permissions=None, posix_acl=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Set the owner, group, permissions, or access control list for a blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param owner: Optional. The owner of the blob or directory.
    +        :type owner: str
    +        :param group: Optional. The owning group of the blob or directory.
    +        :type group: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_acl: Sets POSIX access control rights on files and
    +         directories. The value is a comma-separated list of access control
    +         entries. Each access control entry (ACE) consists of a scope, a type,
    +         a user or group identifier, and permissions in the format
    +         "[scope:][type]:[id]:[permissions]".
    +        :type posix_acl: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "setAccessControl"
    +
    +        # Construct URL
    +        url = self.set_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if owner is not None:
    +            header_parameters['x-ms-owner'] = self._serialize.header("owner", owner, 'str')
    +        if group is not None:
    +            header_parameters['x-ms-group'] = self._serialize.header("group", group, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_acl is not None:
    +            header_parameters['x-ms-acl'] = self._serialize.header("posix_acl", posix_acl, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_access_control.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def get_access_control(self, timeout=None, upn=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Get the owner, group, permissions, or access control list for a blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param upn: Optional. Valid only when Hierarchical Namespace is
    +         enabled for the account. If "true", the identity values returned in
    +         the x-ms-owner, x-ms-group, and x-ms-acl response headers will be
    +         transformed from Azure Active Directory Object IDs to User Principal
    +         Names.  If "false", the values will be returned as Azure Active
    +         Directory Object IDs. The default value is false.
    +        :type upn: bool
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "getAccessControl"
    +
    +        # Construct URL
    +        url = self.get_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if upn is not None:
    +            query_parameters['upn'] = self._serialize.query("upn", upn, 'bool')
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.head(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-owner': self._deserialize('str', response.headers.get('x-ms-owner')),
    +                'x-ms-group': self._deserialize('str', response.headers.get('x-ms-group')),
    +                'x-ms-permissions': self._deserialize('str', response.headers.get('x-ms-permissions')),
    +                'x-ms-acl': self._deserialize('str', response.headers.get('x-ms-acl')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_access_control.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def rename(self, rename_source, timeout=None, path_rename_mode=None, directory_properties=None, posix_permissions=None, posix_umask=None, source_lease_id=None, request_id=None, directory_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Rename a blob/file.  By default, the destination is overwritten and if
    +        the destination already exists and has a lease the lease is broken.
    +        This operation supports conditional HTTP requests.  For more
    +        information, see [Specifying Conditional Headers for Blob Service
    +        Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).
    +        To fail if the destination already exists, use a conditional request
    +        with If-None-Match: "*".
    +
    +        :param rename_source: The file or directory to be renamed. The value
    +         must have the following format: "/{filesysystem}/{path}".  If
    +         "x-ms-properties" is specified, the properties will overwrite the
    +         existing properties; otherwise, the existing properties will be
    +         preserved.
    +        :type rename_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param path_rename_mode: Determines the behavior of the rename
    +         operation. Possible values include: 'legacy', 'posix'
    +        :type path_rename_mode: str or
    +         ~azure.storage.blob.models.PathRenameMode
    +        :param directory_properties: Optional.  User-defined properties to be
    +         stored with the file or directory, in the format of a comma-separated
    +         list of name and value pairs "n1=v1, n2=v2, ...", where each value is
    +         base64 encoded.
    +        :type directory_properties: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_umask: Only valid if Hierarchical Namespace is enabled
    +         for the account. This umask restricts permission settings for file and
    +         directory, and will only be applied when default Acl does not exist in
    +         parent directory. If the umask bit has set, it means that the
    +         corresponding permission will be disabled. Otherwise the corresponding
    +         permission will be determined by the permission. A 4-digit octal
    +         notation (e.g. 0022) is supported here. If no umask was specified, a
    +         default umask - 0027 will be used.
    +        :type posix_umask: str
    +        :param source_lease_id: A lease ID for the source path. If specified,
    +         the source path must have an active lease and the leaase ID must
    +         match.
    +        :type source_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param directory_http_headers: Additional parameters for the operation
    +        :type directory_http_headers:
    +         ~azure.storage.blob.models.DirectoryHttpHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        cache_control = None
    +        if directory_http_headers is not None:
    +            cache_control = directory_http_headers.cache_control
    +        content_type = None
    +        if directory_http_headers is not None:
    +            content_type = directory_http_headers.content_type
    +        content_encoding = None
    +        if directory_http_headers is not None:
    +            content_encoding = directory_http_headers.content_encoding
    +        content_language = None
    +        if directory_http_headers is not None:
    +            content_language = directory_http_headers.content_language
    +        content_disposition = None
    +        if directory_http_headers is not None:
    +            content_disposition = directory_http_headers.content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        # Construct URL
    +        url = self.rename.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if path_rename_mode is not None:
    +            query_parameters['mode'] = self._serialize.query("path_rename_mode", path_rename_mode, 'PathRenameMode')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-rename-source'] = self._serialize.header("rename_source", rename_source, 'str')
    +        if directory_properties is not None:
    +            header_parameters['x-ms-properties'] = self._serialize.header("directory_properties", directory_properties, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_umask is not None:
    +            header_parameters['x-ms-umask'] = self._serialize.header("posix_umask", posix_umask, 'str')
    +        if source_lease_id is not None:
    +            header_parameters['x-ms-source-lease-id'] = self._serialize.header("source_lease_id", source_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if cache_control is not None:
    +            header_parameters['x-ms-cache-control'] = self._serialize.header("cache_control", cache_control, 'str')
    +        if content_type is not None:
    +            header_parameters['x-ms-content-type'] = self._serialize.header("content_type", content_type, 'str')
    +        if content_encoding is not None:
    +            header_parameters['x-ms-content-encoding'] = self._serialize.header("content_encoding", content_encoding, 'str')
    +        if content_language is not None:
    +            header_parameters['x-ms-content-language'] = self._serialize.header("content_language", content_language, 'str')
    +        if content_disposition is not None:
    +            header_parameters['x-ms-content-disposition'] = self._serialize.header("content_disposition", content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    rename.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def undelete(self, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """Undelete a blob that was previously soft deleted.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "undelete"
    +
    +        # Construct URL
    +        url = self.undelete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    undelete.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def set_http_headers(self, timeout=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Set HTTP Headers operation sets system properties on the blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.set_http_headers.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_http_headers.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def set_metadata(self, timeout=None, metadata=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Set Blob Metadata operation sets user-defined metadata for the
    +        specified blob as one or more name-value pairs.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "metadata"
    +
    +        # Construct URL
    +        url = self.set_metadata.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_metadata.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def acquire_lease(self, timeout=None, duration=None, proposed_lease_id=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param duration: Specifies the duration of the lease, in seconds, or
    +         negative one (-1) for a lease that never expires. A non-infinite lease
    +         can be between 15 and 60 seconds. A lease duration cannot be changed
    +         using renew or change.
    +        :type duration: int
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "acquire"
    +
    +        # Construct URL
    +        url = self.acquire_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if duration is not None:
    +            header_parameters['x-ms-lease-duration'] = self._serialize.header("duration", duration, 'int')
    +        if proposed_lease_id is not None:
    +            header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    acquire_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def release_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "release"
    +
    +        # Construct URL
    +        url = self.release_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    release_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def renew_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "renew"
    +
    +        # Construct URL
    +        url = self.renew_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    renew_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def change_lease(self, lease_id, proposed_lease_id, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "change"
    +
    +        # Construct URL
    +        url = self.change_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    change_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def break_lease(self, timeout=None, break_period=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param break_period: For a break operation, proposed duration the
    +         lease should continue before it is broken, in seconds, between 0 and
    +         60. This break period is only used if it is shorter than the time
    +         remaining on the lease. If longer, the time remaining on the lease is
    +         used. A new lease will not be available before the break period has
    +         expired, but the lease may be held for longer than the break period.
    +         If this header does not appear with a break operation, a
    +         fixed-duration lease breaks after the remaining lease period elapses,
    +         and an infinite lease breaks immediately.
    +        :type break_period: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "break"
    +
    +        # Construct URL
    +        url = self.break_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if break_period is not None:
    +            header_parameters['x-ms-lease-break-period'] = self._serialize.header("break_period", break_period, 'int')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-time': self._deserialize('int', response.headers.get('x-ms-lease-time')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    break_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def create_snapshot(self, timeout=None, metadata=None, request_id=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """The Create Snapshot operation creates a read-only snapshot of a blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "snapshot"
    +
    +        # Construct URL
    +        url = self.create_snapshot.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-snapshot': self._deserialize('str', response.headers.get('x-ms-snapshot')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create_snapshot.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def start_copy_from_url(self, copy_source, timeout=None, metadata=None, tier=None, rehydrate_priority=None, request_id=None, source_modified_access_conditions=None, modified_access_conditions=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """The Start Copy From URL operation copies a blob or an internet resource
    +        to a new blob.
    +
    +        :param copy_source: Specifies the name of the source page blob
    +         snapshot. This value is a URL of up to 2 KB in length that specifies a
    +         page blob snapshot. The value should be URL-encoded as it would appear
    +         in a request URI. The source blob must either be public or must be
    +         authenticated via a shared access signature.
    +        :type copy_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param rehydrate_priority: Optional: Indicates the priority with which
    +         to rehydrate an archived blob. Possible values include: 'High',
    +         'Standard'
    +        :type rehydrate_priority: str or
    +         ~azure.storage.blob.models.RehydratePriority
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        # Construct URL
    +        url = self.start_copy_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        if rehydrate_priority is not None:
    +            header_parameters['x-ms-rehydrate-priority'] = self._serialize.header("rehydrate_priority", rehydrate_priority, 'str')
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    start_copy_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def copy_from_url(self, copy_source, timeout=None, metadata=None, tier=None, request_id=None, source_content_md5=None, source_modified_access_conditions=None, modified_access_conditions=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """The Copy From URL operation copies a blob or an internet resource to a
    +        new blob. It will not return a response until the copy is complete.
    +
    +        :param copy_source: Specifies the name of the source page blob
    +         snapshot. This value is a URL of up to 2 KB in length that specifies a
    +         page blob snapshot. The value should be URL-encoded as it would appear
    +         in a request URI. The source blob must either be public or must be
    +         authenticated via a shared access signature.
    +        :type copy_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        # Construct URL
    +        url = self.copy_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        header_parameters['x-ms-requires-sync'] = self._serialize.header("self.x_ms_requires_sync", self.x_ms_requires_sync, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-status': self._deserialize(models.SyncCopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    copy_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def abort_copy_from_url(self, copy_id, timeout=None, request_id=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """The Abort Copy From URL operation aborts a pending Copy From URL
    +        operation, and leaves a destination blob with zero length and full
    +        metadata.
    +
    +        :param copy_id: The copy identifier provided in the x-ms-copy-id
    +         header of the original Copy Blob operation.
    +        :type copy_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "copy"
    +
    +        # Construct URL
    +        url = self.abort_copy_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['copyid'] = self._serialize.query("copy_id", copy_id, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-copy-action'] = self._serialize.header("self.x_ms_copy_action", self.x_ms_copy_action, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    abort_copy_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def set_tier(self, tier, timeout=None, rehydrate_priority=None, request_id=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """The Set Tier operation sets the tier on a blob. The operation is
    +        allowed on a page blob in a premium storage account and on a block blob
    +        in a blob storage account (locally redundant storage only). A premium
    +        page blob's tier determines the allowed size, IOPS, and bandwidth of
    +        the blob. A block blob's tier determines Hot/Cool/Archive storage type.
    +        This operation does not update the blob's ETag.
    +
    +        :param tier: Indicates the tier to be set on the blob. Possible values
    +         include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30', 'P40', 'P50', 'P60',
    +         'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierRequired
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param rehydrate_priority: Optional: Indicates the priority with which
    +         to rehydrate an archived blob. Possible values include: 'High',
    +         'Standard'
    +        :type rehydrate_priority: str or
    +         ~azure.storage.blob.models.RehydratePriority
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "tier"
    +
    +        # Construct URL
    +        url = self.set_tier.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        if rehydrate_priority is not None:
    +            header_parameters['x-ms-rehydrate-priority'] = self._serialize.header("rehydrate_priority", rehydrate_priority, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200, 202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_tier.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def get_account_info(self, *, cls=None, **kwargs):
    +        """Returns the sku name and account kind .
    +
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_account_info.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['restype'] = self._serialize.query("self.restype", self.restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-sku-name': self._deserialize(models.SkuName, response.headers.get('x-ms-sku-name')),
    +                'x-ms-account-kind': self._deserialize(models.AccountKind, response.headers.get('x-ms-account-kind')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_account_info.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_block_blob_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_block_blob_operations_async.py
    new file mode 100644
    index 000000000000..b5225decc55c
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_block_blob_operations_async.py
    @@ -0,0 +1,802 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class BlockBlobOperations:
    +    """BlockBlobOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_blob_type: Specifies the type of blob to create: block blob, page blob, or append blob. Constant value: "BlockBlob".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_blob_type = "BlockBlob"
    +
    +    async def upload(self, body, content_length, timeout=None, transactional_content_md5=None, metadata=None, tier=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Upload Block Blob operation updates the content of an existing
    +        block blob. Updating an existing block blob overwrites any existing
    +        metadata on the blob. Partial updates are not supported with Put Blob;
    +        the content of the existing blob is overwritten with the content of the
    +        new blob. To perform a partial update of the content of a block blob,
    +        use the Put Block List operation.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.upload.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-blob-type'] = self._serialize.header("self.x_ms_blob_type", self.x_ms_blob_type, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    upload.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def stage_block(self, block_id, content_length, body, transactional_content_md5=None, transactional_content_crc64=None, timeout=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, *, cls=None, **kwargs):
    +        """The Stage Block operation creates a new block to be committed as part
    +        of a blob.
    +
    +        :param block_id: A valid Base64 string value that identifies the
    +         block. Prior to encoding, the string must be less than or equal to 64
    +         bytes in size. For a given blob, the length of the value specified for
    +         the blockid parameter must be the same size for each block.
    +        :type block_id: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param body: Initial data
    +        :type body: Generator
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +
    +        comp = "block"
    +
    +        # Construct URL
    +        url = self.stage_block.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['blockid'] = self._serialize.query("block_id", block_id, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    stage_block.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def stage_block_from_url(self, block_id, content_length, source_url, source_range=None, source_content_md5=None, source_contentcrc64=None, timeout=None, request_id=None, cpk_info=None, cpk_scope_info=None, lease_access_conditions=None, source_modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Stage Block operation creates a new block to be committed as part
    +        of a blob where the contents are read from a URL.
    +
    +        :param block_id: A valid Base64 string value that identifies the
    +         block. Prior to encoding, the string must be less than or equal to 64
    +         bytes in size. For a given blob, the length of the value specified for
    +         the blockid parameter must be the same size for each block.
    +        :type block_id: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param source_url: Specify a URL to the copy source.
    +        :type source_url: str
    +        :param source_range: Bytes of source data in the specified range.
    +        :type source_range: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_contentcrc64: Specify the crc64 calculated for the range
    +         of bytes that must be read from the copy source.
    +        :type source_contentcrc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        comp = "block"
    +
    +        # Construct URL
    +        url = self.stage_block_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['blockid'] = self._serialize.query("block_id", block_id, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("source_url", source_url, 'str')
    +        if source_range is not None:
    +            header_parameters['x-ms-source-range'] = self._serialize.header("source_range", source_range, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        if source_contentcrc64 is not None:
    +            header_parameters['x-ms-source-content-crc64'] = self._serialize.header("source_contentcrc64", source_contentcrc64, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    stage_block_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def commit_block_list(self, blocks, timeout=None, transactional_content_md5=None, transactional_content_crc64=None, metadata=None, tier=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Commit Block List operation writes a blob by specifying the list of
    +        block IDs that make up the blob. In order to be written as part of a
    +        blob, a block must have been successfully written to the server in a
    +        prior Put Block operation. You can call Put Block List to update a blob
    +        by uploading only those blocks that have changed, then committing the
    +        new and existing blocks together. You can do this by specifying whether
    +        to commit a block from the committed block list or from the uncommitted
    +        block list, or to commit the most recently uploaded version of the
    +        block, whichever list it may belong to.
    +
    +        :param blocks:
    +        :type blocks: ~azure.storage.blob.models.BlockLookupList
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "blocklist"
    +
    +        # Construct URL
    +        url = self.commit_block_list.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(blocks, 'BlockLookupList')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    commit_block_list.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def get_block_list(self, list_type="committed", snapshot=None, timeout=None, request_id=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """The Get Block List operation retrieves the list of blocks that have
    +        been uploaded as part of a block blob.
    +
    +        :param list_type: Specifies whether to return the list of committed
    +         blocks, the list of uncommitted blocks, or both lists together.
    +         Possible values include: 'committed', 'uncommitted', 'all'
    +        :type list_type: str or ~azure.storage.blob.models.BlockListType
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BlockList or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.BlockList
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "blocklist"
    +
    +        # Construct URL
    +        url = self.get_block_list.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        query_parameters['blocklisttype'] = self._serialize.query("list_type", list_type, 'BlockListType')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BlockList', response)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-blob-content-length': self._deserialize('long', response.headers.get('x-ms-blob-content-length')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_block_list.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_container_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_container_operations_async.py
    new file mode 100644
    index 000000000000..635a98cfbc6e
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_container_operations_async.py
    @@ -0,0 +1,1327 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class ContainerOperations:
    +    """ContainerOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +
    +    async def create(self, timeout=None, metadata=None, access=None, request_id=None, container_cpk_scope_info=None, *, cls=None, **kwargs):
    +        """creates a new container under the specified account. If the container
    +        with the same name already exists, the operation fails.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param access: Specifies whether data in the container may be accessed
    +         publicly and the level of access. Possible values include:
    +         'container', 'blob'
    +        :type access: str or ~azure.storage.blob.models.PublicAccessType
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param container_cpk_scope_info: Additional parameters for the
    +         operation
    +        :type container_cpk_scope_info:
    +         ~azure.storage.blob.models.ContainerCpkScopeInfo
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        default_encryption_scope = None
    +        if container_cpk_scope_info is not None:
    +            default_encryption_scope = container_cpk_scope_info.default_encryption_scope
    +        deny_encryption_scope_override = None
    +        if container_cpk_scope_info is not None:
    +            deny_encryption_scope_override = container_cpk_scope_info.deny_encryption_scope_override
    +
    +        restype = "container"
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if access is not None:
    +            header_parameters['x-ms-blob-public-access'] = self._serialize.header("access", access, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if default_encryption_scope is not None:
    +            header_parameters['x-ms-default-encryption-scope'] = self._serialize.header("default_encryption_scope", default_encryption_scope, 'str')
    +        if deny_encryption_scope_override is not None:
    +            header_parameters['x-ms-deny-encryption-scope-override'] = self._serialize.header("deny_encryption_scope_override", deny_encryption_scope_override, 'bool')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{containerName}'}
    +
    +    async def get_properties(self, timeout=None, request_id=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """returns all user-defined metadata and system properties for the
    +        specified container. The data returned does not include the container's
    +        list of blobs.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        restype = "container"
    +
    +        # Construct URL
    +        url = self.get_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-public-access': self._deserialize('str', response.headers.get('x-ms-blob-public-access')),
    +                'x-ms-has-immutability-policy': self._deserialize('bool', response.headers.get('x-ms-has-immutability-policy')),
    +                'x-ms-has-legal-hold': self._deserialize('bool', response.headers.get('x-ms-has-legal-hold')),
    +                'x-ms-default-encryption-scope': self._deserialize('str', response.headers.get('x-ms-default-encryption-scope')),
    +                'x-ms-deny-encryption-scope-override': self._deserialize('bool', response.headers.get('x-ms-deny-encryption-scope-override')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_properties.metadata = {'url': '/{containerName}'}
    +
    +    async def delete(self, timeout=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """operation marks the specified container for deletion. The container and
    +        any blobs contained within it are later deleted during garbage
    +        collection.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        restype = "container"
    +
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    delete.metadata = {'url': '/{containerName}'}
    +
    +    async def set_metadata(self, timeout=None, metadata=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """operation sets one or more user-defined name-value pairs for the
    +        specified container.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +
    +        restype = "container"
    +        comp = "metadata"
    +
    +        # Construct URL
    +        url = self.set_metadata.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_metadata.metadata = {'url': '/{containerName}'}
    +
    +    async def get_access_policy(self, timeout=None, request_id=None, lease_access_conditions=None, *, cls=None, **kwargs):
    +        """gets the permissions for the specified container. The permissions
    +        indicate whether container data may be accessed publicly.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: list or the result of cls(response)
    +        :rtype: list[~azure.storage.blob.models.SignedIdentifier]
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        restype = "container"
    +        comp = "acl"
    +
    +        # Construct URL
    +        url = self.get_access_policy.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('[SignedIdentifier]', response)
    +            header_dict = {
    +                'x-ms-blob-public-access': self._deserialize('str', response.headers.get('x-ms-blob-public-access')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_access_policy.metadata = {'url': '/{containerName}'}
    +
    +    async def set_access_policy(self, container_acl=None, timeout=None, access=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """sets the permissions for the specified container. The permissions
    +        indicate whether blobs in a container may be accessed publicly.
    +
    +        :param container_acl: the acls for the container
    +        :type container_acl: list[~azure.storage.blob.models.SignedIdentifier]
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param access: Specifies whether data in the container may be accessed
    +         publicly and the level of access. Possible values include:
    +         'container', 'blob'
    +        :type access: str or ~azure.storage.blob.models.PublicAccessType
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        restype = "container"
    +        comp = "acl"
    +
    +        # Construct URL
    +        url = self.set_access_policy.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        if access is not None:
    +            header_parameters['x-ms-blob-public-access'] = self._serialize.header("access", access, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct body
    +        serialization_ctxt = {'xml': {'name': 'SignedIdentifiers', 'itemsName': 'SignedIdentifiers', 'wrapped': True}}
    +        if container_acl is not None:
    +            body_content = self._serialize.body(container_acl, '[SignedIdentifier]', serialization_ctxt=serialization_ctxt)
    +        else:
    +            body_content = None
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_access_policy.metadata = {'url': '/{containerName}'}
    +
    +    async def acquire_lease(self, timeout=None, duration=None, proposed_lease_id=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param duration: Specifies the duration of the lease, in seconds, or
    +         negative one (-1) for a lease that never expires. A non-infinite lease
    +         can be between 15 and 60 seconds. A lease duration cannot be changed
    +         using renew or change.
    +        :type duration: int
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "acquire"
    +
    +        # Construct URL
    +        url = self.acquire_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if duration is not None:
    +            header_parameters['x-ms-lease-duration'] = self._serialize.header("duration", duration, 'int')
    +        if proposed_lease_id is not None:
    +            header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    acquire_lease.metadata = {'url': '/{containerName}'}
    +
    +    async def release_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "release"
    +
    +        # Construct URL
    +        url = self.release_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    release_lease.metadata = {'url': '/{containerName}'}
    +
    +    async def renew_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "renew"
    +
    +        # Construct URL
    +        url = self.renew_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    renew_lease.metadata = {'url': '/{containerName}'}
    +
    +    async def break_lease(self, timeout=None, break_period=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param break_period: For a break operation, proposed duration the
    +         lease should continue before it is broken, in seconds, between 0 and
    +         60. This break period is only used if it is shorter than the time
    +         remaining on the lease. If longer, the time remaining on the lease is
    +         used. A new lease will not be available before the break period has
    +         expired, but the lease may be held for longer than the break period.
    +         If this header does not appear with a break operation, a
    +         fixed-duration lease breaks after the remaining lease period elapses,
    +         and an infinite lease breaks immediately.
    +        :type break_period: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "break"
    +
    +        # Construct URL
    +        url = self.break_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if break_period is not None:
    +            header_parameters['x-ms-lease-break-period'] = self._serialize.header("break_period", break_period, 'int')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-time': self._deserialize('int', response.headers.get('x-ms-lease-time')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    break_lease.metadata = {'url': '/{containerName}'}
    +
    +    async def change_lease(self, lease_id, proposed_lease_id, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "change"
    +
    +        # Construct URL
    +        url = self.change_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    change_lease.metadata = {'url': '/{containerName}'}
    +
    +    async def list_blob_flat_segment(self, prefix=None, marker=None, maxresults=None, include=None, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """[Update] The List Blobs operation returns a list of the blobs under the
    +        specified container.
    +
    +        :param prefix: Filters the results to return only containers whose
    +         name begins with the specified prefix.
    +        :type prefix: str
    +        :param marker: A string value that identifies the portion of the list
    +         of containers to be returned with the next listing operation. The
    +         operation returns the NextMarker value within the response body if the
    +         listing operation did not return all containers remaining to be listed
    +         with the current page. The NextMarker value can be used as the value
    +         for the marker parameter in a subsequent call to request the next page
    +         of list items. The marker value is opaque to the client.
    +        :type marker: str
    +        :param maxresults: Specifies the maximum number of containers to
    +         return. If the request does not specify maxresults, or specifies a
    +         value greater than 5000, the server will return up to 5000 items. Note
    +         that if the listing operation crosses a partition boundary, then the
    +         service will return a continuation token for retrieving the remainder
    +         of the results. For this reason, it is possible that the service will
    +         return fewer results than specified by maxresults, or than the default
    +         of 5000.
    +        :type maxresults: int
    +        :param include: Include this parameter to specify one or more datasets
    +         to include in the response.
    +        :type include: list[str or
    +         ~azure.storage.blob.models.ListBlobsIncludeItem]
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: ListBlobsFlatSegmentResponse or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.ListBlobsFlatSegmentResponse
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "container"
    +        comp = "list"
    +
    +        # Construct URL
    +        url = self.list_blob_flat_segment.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if prefix is not None:
    +            query_parameters['prefix'] = self._serialize.query("prefix", prefix, 'str')
    +        if marker is not None:
    +            query_parameters['marker'] = self._serialize.query("marker", marker, 'str')
    +        if maxresults is not None:
    +            query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1)
    +        if include is not None:
    +            query_parameters['include'] = self._serialize.query("include", include, '[ListBlobsIncludeItem]', div=',')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ListBlobsFlatSegmentResponse', response)
    +            header_dict = {
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    list_blob_flat_segment.metadata = {'url': '/{containerName}'}
    +
    +    async def list_blob_hierarchy_segment(self, delimiter, prefix=None, marker=None, maxresults=None, include=None, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """[Update] The List Blobs operation returns a list of the blobs under the
    +        specified container.
    +
    +        :param delimiter: When the request includes this parameter, the
    +         operation returns a BlobPrefix element in the response body that acts
    +         as a placeholder for all blobs whose names begin with the same
    +         substring up to the appearance of the delimiter character. The
    +         delimiter may be a single character or a string.
    +        :type delimiter: str
    +        :param prefix: Filters the results to return only containers whose
    +         name begins with the specified prefix.
    +        :type prefix: str
    +        :param marker: A string value that identifies the portion of the list
    +         of containers to be returned with the next listing operation. The
    +         operation returns the NextMarker value within the response body if the
    +         listing operation did not return all containers remaining to be listed
    +         with the current page. The NextMarker value can be used as the value
    +         for the marker parameter in a subsequent call to request the next page
    +         of list items. The marker value is opaque to the client.
    +        :type marker: str
    +        :param maxresults: Specifies the maximum number of containers to
    +         return. If the request does not specify maxresults, or specifies a
    +         value greater than 5000, the server will return up to 5000 items. Note
    +         that if the listing operation crosses a partition boundary, then the
    +         service will return a continuation token for retrieving the remainder
    +         of the results. For this reason, it is possible that the service will
    +         return fewer results than specified by maxresults, or than the default
    +         of 5000.
    +        :type maxresults: int
    +        :param include: Include this parameter to specify one or more datasets
    +         to include in the response.
    +        :type include: list[str or
    +         ~azure.storage.blob.models.ListBlobsIncludeItem]
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: ListBlobsHierarchySegmentResponse or the result of
    +         cls(response)
    +        :rtype: ~azure.storage.blob.models.ListBlobsHierarchySegmentResponse
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "container"
    +        comp = "list"
    +
    +        # Construct URL
    +        url = self.list_blob_hierarchy_segment.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if prefix is not None:
    +            query_parameters['prefix'] = self._serialize.query("prefix", prefix, 'str')
    +        query_parameters['delimiter'] = self._serialize.query("delimiter", delimiter, 'str')
    +        if marker is not None:
    +            query_parameters['marker'] = self._serialize.query("marker", marker, 'str')
    +        if maxresults is not None:
    +            query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1)
    +        if include is not None:
    +            query_parameters['include'] = self._serialize.query("include", include, '[ListBlobsIncludeItem]', div=',')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ListBlobsHierarchySegmentResponse', response)
    +            header_dict = {
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    list_blob_hierarchy_segment.metadata = {'url': '/{containerName}'}
    +
    +    async def get_account_info(self, *, cls=None, **kwargs):
    +        """Returns the sku name and account kind .
    +
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "account"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_account_info.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-sku-name': self._deserialize(models.SkuName, response.headers.get('x-ms-sku-name')),
    +                'x-ms-account-kind': self._deserialize(models.AccountKind, response.headers.get('x-ms-account-kind')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_account_info.metadata = {'url': '/{containerName}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_directory_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_directory_operations_async.py
    new file mode 100644
    index 000000000000..144bdfff6582
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_directory_operations_async.py
    @@ -0,0 +1,740 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class DirectoryOperations:
    +    """DirectoryOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar resource: . Constant value: "directory".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.resource = "directory"
    +
    +    async def create(self, timeout=None, directory_properties=None, posix_permissions=None, posix_umask=None, request_id=None, directory_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Create a directory. By default, the destination is overwritten and if
    +        the destination already exists and has a lease the lease is broken.
    +        This operation supports conditional HTTP requests.  For more
    +        information, see [Specifying Conditional Headers for Blob Service
    +        Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).
    +        To fail if the destination already exists, use a conditional request
    +        with If-None-Match: "*".
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param directory_properties: Optional.  User-defined properties to be
    +         stored with the file or directory, in the format of a comma-separated
    +         list of name and value pairs "n1=v1, n2=v2, ...", where each value is
    +         base64 encoded.
    +        :type directory_properties: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_umask: Only valid if Hierarchical Namespace is enabled
    +         for the account. This umask restricts permission settings for file and
    +         directory, and will only be applied when default Acl does not exist in
    +         parent directory. If the umask bit has set, it means that the
    +         corresponding permission will be disabled. Otherwise the corresponding
    +         permission will be determined by the permission. A 4-digit octal
    +         notation (e.g. 0022) is supported here. If no umask was specified, a
    +         default umask - 0027 will be used.
    +        :type posix_umask: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param directory_http_headers: Additional parameters for the operation
    +        :type directory_http_headers:
    +         ~azure.storage.blob.models.DirectoryHttpHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        cache_control = None
    +        if directory_http_headers is not None:
    +            cache_control = directory_http_headers.cache_control
    +        content_type = None
    +        if directory_http_headers is not None:
    +            content_type = directory_http_headers.content_type
    +        content_encoding = None
    +        if directory_http_headers is not None:
    +            content_encoding = directory_http_headers.content_encoding
    +        content_language = None
    +        if directory_http_headers is not None:
    +            content_language = directory_http_headers.content_language
    +        content_disposition = None
    +        if directory_http_headers is not None:
    +            content_disposition = directory_http_headers.content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['resource'] = self._serialize.query("self.resource", self.resource, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if directory_properties is not None:
    +            header_parameters['x-ms-properties'] = self._serialize.header("directory_properties", directory_properties, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_umask is not None:
    +            header_parameters['x-ms-umask'] = self._serialize.header("posix_umask", posix_umask, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if cache_control is not None:
    +            header_parameters['x-ms-cache-control'] = self._serialize.header("cache_control", cache_control, 'str')
    +        if content_type is not None:
    +            header_parameters['x-ms-content-type'] = self._serialize.header("content_type", content_type, 'str')
    +        if content_encoding is not None:
    +            header_parameters['x-ms-content-encoding'] = self._serialize.header("content_encoding", content_encoding, 'str')
    +        if content_language is not None:
    +            header_parameters['x-ms-content-language'] = self._serialize.header("content_language", content_language, 'str')
    +        if content_disposition is not None:
    +            header_parameters['x-ms-content-disposition'] = self._serialize.header("content_disposition", content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def rename(self, rename_source, timeout=None, marker=None, path_rename_mode=None, directory_properties=None, posix_permissions=None, posix_umask=None, source_lease_id=None, request_id=None, directory_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Rename a directory. By default, the destination is overwritten and if
    +        the destination already exists and has a lease the lease is broken.
    +        This operation supports conditional HTTP requests. For more
    +        information, see [Specifying Conditional Headers for Blob Service
    +        Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).
    +        To fail if the destination already exists, use a conditional request
    +        with If-None-Match: "*".
    +
    +        :param rename_source: The file or directory to be renamed. The value
    +         must have the following format: "/{filesysystem}/{path}".  If
    +         "x-ms-properties" is specified, the properties will overwrite the
    +         existing properties; otherwise, the existing properties will be
    +         preserved.
    +        :type rename_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param marker: When renaming a directory, the number of paths that are
    +         renamed with each invocation is limited.  If the number of paths to be
    +         renamed exceeds this limit, a continuation token is returned in this
    +         response header.  When a continuation token is returned in the
    +         response, it must be specified in a subsequent invocation of the
    +         rename operation to continue renaming the directory.
    +        :type marker: str
    +        :param path_rename_mode: Determines the behavior of the rename
    +         operation. Possible values include: 'legacy', 'posix'
    +        :type path_rename_mode: str or
    +         ~azure.storage.blob.models.PathRenameMode
    +        :param directory_properties: Optional.  User-defined properties to be
    +         stored with the file or directory, in the format of a comma-separated
    +         list of name and value pairs "n1=v1, n2=v2, ...", where each value is
    +         base64 encoded.
    +        :type directory_properties: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_umask: Only valid if Hierarchical Namespace is enabled
    +         for the account. This umask restricts permission settings for file and
    +         directory, and will only be applied when default Acl does not exist in
    +         parent directory. If the umask bit has set, it means that the
    +         corresponding permission will be disabled. Otherwise the corresponding
    +         permission will be determined by the permission. A 4-digit octal
    +         notation (e.g. 0022) is supported here. If no umask was specified, a
    +         default umask - 0027 will be used.
    +        :type posix_umask: str
    +        :param source_lease_id: A lease ID for the source path. If specified,
    +         the source path must have an active lease and the leaase ID must
    +         match.
    +        :type source_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param directory_http_headers: Additional parameters for the operation
    +        :type directory_http_headers:
    +         ~azure.storage.blob.models.DirectoryHttpHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        cache_control = None
    +        if directory_http_headers is not None:
    +            cache_control = directory_http_headers.cache_control
    +        content_type = None
    +        if directory_http_headers is not None:
    +            content_type = directory_http_headers.content_type
    +        content_encoding = None
    +        if directory_http_headers is not None:
    +            content_encoding = directory_http_headers.content_encoding
    +        content_language = None
    +        if directory_http_headers is not None:
    +            content_language = directory_http_headers.content_language
    +        content_disposition = None
    +        if directory_http_headers is not None:
    +            content_disposition = directory_http_headers.content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        # Construct URL
    +        url = self.rename.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if marker is not None:
    +            query_parameters['continuation'] = self._serialize.query("marker", marker, 'str')
    +        if path_rename_mode is not None:
    +            query_parameters['mode'] = self._serialize.query("path_rename_mode", path_rename_mode, 'PathRenameMode')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-rename-source'] = self._serialize.header("rename_source", rename_source, 'str')
    +        if directory_properties is not None:
    +            header_parameters['x-ms-properties'] = self._serialize.header("directory_properties", directory_properties, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_umask is not None:
    +            header_parameters['x-ms-umask'] = self._serialize.header("posix_umask", posix_umask, 'str')
    +        if source_lease_id is not None:
    +            header_parameters['x-ms-source-lease-id'] = self._serialize.header("source_lease_id", source_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if cache_control is not None:
    +            header_parameters['x-ms-cache-control'] = self._serialize.header("cache_control", cache_control, 'str')
    +        if content_type is not None:
    +            header_parameters['x-ms-content-type'] = self._serialize.header("content_type", content_type, 'str')
    +        if content_encoding is not None:
    +            header_parameters['x-ms-content-encoding'] = self._serialize.header("content_encoding", content_encoding, 'str')
    +        if content_language is not None:
    +            header_parameters['x-ms-content-language'] = self._serialize.header("content_language", content_language, 'str')
    +        if content_disposition is not None:
    +            header_parameters['x-ms-content-disposition'] = self._serialize.header("content_disposition", content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-continuation': self._deserialize('str', response.headers.get('x-ms-continuation')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    rename.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def delete(self, recursive_directory_delete, timeout=None, marker=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Deletes the directory.
    +
    +        :param recursive_directory_delete: If "true", all paths beneath the
    +         directory will be deleted. If "false" and the directory is non-empty,
    +         an error occurs.
    +        :type recursive_directory_delete: bool
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param marker: When renaming a directory, the number of paths that are
    +         renamed with each invocation is limited.  If the number of paths to be
    +         renamed exceeds this limit, a continuation token is returned in this
    +         response header.  When a continuation token is returned in the
    +         response, it must be specified in a subsequent invocation of the
    +         rename operation to continue renaming the directory.
    +        :type marker: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['recursive'] = self._serialize.query("recursive_directory_delete", recursive_directory_delete, 'bool')
    +        if marker is not None:
    +            query_parameters['continuation'] = self._serialize.query("marker", marker, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-continuation': self._deserialize('str', response.headers.get('x-ms-continuation')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    delete.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def set_access_control(self, timeout=None, owner=None, group=None, posix_permissions=None, posix_acl=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Set the owner, group, permissions, or access control list for a
    +        directory.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param owner: Optional. The owner of the blob or directory.
    +        :type owner: str
    +        :param group: Optional. The owning group of the blob or directory.
    +        :type group: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_acl: Sets POSIX access control rights on files and
    +         directories. The value is a comma-separated list of access control
    +         entries. Each access control entry (ACE) consists of a scope, a type,
    +         a user or group identifier, and permissions in the format
    +         "[scope:][type]:[id]:[permissions]".
    +        :type posix_acl: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "setAccessControl"
    +
    +        # Construct URL
    +        url = self.set_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if owner is not None:
    +            header_parameters['x-ms-owner'] = self._serialize.header("owner", owner, 'str')
    +        if group is not None:
    +            header_parameters['x-ms-group'] = self._serialize.header("group", group, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_acl is not None:
    +            header_parameters['x-ms-acl'] = self._serialize.header("posix_acl", posix_acl, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_access_control.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    async def get_access_control(self, timeout=None, upn=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Get the owner, group, permissions, or access control list for a
    +        directory.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param upn: Optional. Valid only when Hierarchical Namespace is
    +         enabled for the account. If "true", the identity values returned in
    +         the x-ms-owner, x-ms-group, and x-ms-acl response headers will be
    +         transformed from Azure Active Directory Object IDs to User Principal
    +         Names.  If "false", the values will be returned as Azure Active
    +         Directory Object IDs. The default value is false.
    +        :type upn: bool
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "getAccessControl"
    +
    +        # Construct URL
    +        url = self.get_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if upn is not None:
    +            query_parameters['upn'] = self._serialize.query("upn", upn, 'bool')
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.head(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-owner': self._deserialize('str', response.headers.get('x-ms-owner')),
    +                'x-ms-group': self._deserialize('str', response.headers.get('x-ms-group')),
    +                'x-ms-permissions': self._deserialize('str', response.headers.get('x-ms-permissions')),
    +                'x-ms-acl': self._deserialize('str', response.headers.get('x-ms-acl')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_access_control.metadata = {'url': '/{filesystem}/{path}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_page_blob_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_page_blob_operations_async.py
    new file mode 100644
    index 000000000000..5ea13fa19dfb
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_page_blob_operations_async.py
    @@ -0,0 +1,1348 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class PageBlobOperations:
    +    """PageBlobOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_blob_type: Specifies the type of blob to create: block blob, page blob, or append blob. Constant value: "PageBlob".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_blob_type = "PageBlob"
    +
    +    async def create(self, content_length, blob_content_length, timeout=None, tier=None, metadata=None, blob_sequence_number=0, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Create operation creates a new page blob.
    +
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param blob_content_length: This header specifies the maximum size for
    +         the page blob, up to 1 TB. The page blob size must be aligned to a
    +         512-byte boundary.
    +        :type blob_content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param tier: Optional. Indicates the tier to be set on the page blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80'
    +        :type tier: str or
    +         ~azure.storage.blob.models.PremiumPageBlobAccessTier
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param blob_sequence_number: Set for page blobs only. The sequence
    +         number is a user-controlled value that you can use to track requests.
    +         The value of the sequence number must be between 0 and 2^63 - 1.
    +        :type blob_sequence_number: long
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-blob-content-length'] = self._serialize.header("blob_content_length", blob_content_length, 'long')
    +        if blob_sequence_number is not None:
    +            header_parameters['x-ms-blob-sequence-number'] = self._serialize.header("blob_sequence_number", blob_sequence_number, 'long')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-blob-type'] = self._serialize.header("self.x_ms_blob_type", self.x_ms_blob_type, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def upload_pages(self, body, content_length, transactional_content_md5=None, transactional_content_crc64=None, timeout=None, range=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, sequence_number_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Upload Pages operation writes a range of pages to a page blob.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param sequence_number_access_conditions: Additional parameters for
    +         the operation
    +        :type sequence_number_access_conditions:
    +         ~azure.storage.blob.models.SequenceNumberAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_sequence_number_less_than_or_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than_or_equal_to = sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to
    +        if_sequence_number_less_than = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than
    +        if_sequence_number_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "page"
    +        page_write = "update"
    +
    +        # Construct URL
    +        url = self.upload_pages.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-page-write'] = self._serialize.header("page_write", page_write, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_sequence_number_less_than_or_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-le'] = self._serialize.header("if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, 'long')
    +        if if_sequence_number_less_than is not None:
    +            header_parameters['x-ms-if-sequence-number-lt'] = self._serialize.header("if_sequence_number_less_than", if_sequence_number_less_than, 'long')
    +        if if_sequence_number_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-eq'] = self._serialize.header("if_sequence_number_equal_to", if_sequence_number_equal_to, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    upload_pages.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def clear_pages(self, content_length, timeout=None, range=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, sequence_number_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Clear Pages operation clears a set of pages from a page blob.
    +
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param sequence_number_access_conditions: Additional parameters for
    +         the operation
    +        :type sequence_number_access_conditions:
    +         ~azure.storage.blob.models.SequenceNumberAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_sequence_number_less_than_or_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than_or_equal_to = sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to
    +        if_sequence_number_less_than = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than
    +        if_sequence_number_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "page"
    +        page_write = "clear"
    +
    +        # Construct URL
    +        url = self.clear_pages.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-page-write'] = self._serialize.header("page_write", page_write, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_sequence_number_less_than_or_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-le'] = self._serialize.header("if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, 'long')
    +        if if_sequence_number_less_than is not None:
    +            header_parameters['x-ms-if-sequence-number-lt'] = self._serialize.header("if_sequence_number_less_than", if_sequence_number_less_than, 'long')
    +        if if_sequence_number_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-eq'] = self._serialize.header("if_sequence_number_equal_to", if_sequence_number_equal_to, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    clear_pages.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def upload_pages_from_url(self, source_url, source_range, content_length, range, source_content_md5=None, source_contentcrc64=None, timeout=None, request_id=None, cpk_info=None, cpk_scope_info=None, lease_access_conditions=None, sequence_number_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Upload Pages operation writes a range of pages to a page blob where
    +        the contents are read from a URL.
    +
    +        :param source_url: Specify a URL to the copy source.
    +        :type source_url: str
    +        :param source_range: Bytes of source data in the specified range. The
    +         length of this range should match the ContentLength header and
    +         x-ms-range/Range destination range header.
    +        :type source_range: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param range: The range of bytes to which the source range would be
    +         written. The range should be 512 aligned and range-end is required.
    +        :type range: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_contentcrc64: Specify the crc64 calculated for the range
    +         of bytes that must be read from the copy source.
    +        :type source_contentcrc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param sequence_number_access_conditions: Additional parameters for
    +         the operation
    +        :type sequence_number_access_conditions:
    +         ~azure.storage.blob.models.SequenceNumberAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_sequence_number_less_than_or_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than_or_equal_to = sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to
    +        if_sequence_number_less_than = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than
    +        if_sequence_number_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        comp = "page"
    +        page_write = "update"
    +
    +        # Construct URL
    +        url = self.upload_pages_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("source_url", source_url, 'str')
    +        header_parameters['x-ms-source-range'] = self._serialize.header("source_range", source_range, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        if source_contentcrc64 is not None:
    +            header_parameters['x-ms-source-content-crc64'] = self._serialize.header("source_contentcrc64", source_contentcrc64, 'bytearray')
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-page-write'] = self._serialize.header("page_write", page_write, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_sequence_number_less_than_or_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-le'] = self._serialize.header("if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, 'long')
    +        if if_sequence_number_less_than is not None:
    +            header_parameters['x-ms-if-sequence-number-lt'] = self._serialize.header("if_sequence_number_less_than", if_sequence_number_less_than, 'long')
    +        if if_sequence_number_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-eq'] = self._serialize.header("if_sequence_number_equal_to", if_sequence_number_equal_to, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    upload_pages_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def get_page_ranges(self, snapshot=None, timeout=None, range=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Get Page Ranges operation returns the list of valid page ranges for
    +        a page blob or snapshot of a page blob.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: PageList or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.PageList
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "pagelist"
    +
    +        # Construct URL
    +        url = self.get_page_ranges.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PageList', response)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'x-ms-blob-content-length': self._deserialize('long', response.headers.get('x-ms-blob-content-length')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_page_ranges.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def get_page_ranges_diff(self, snapshot=None, timeout=None, prevsnapshot=None, prev_snapshot_url=None, range=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Get Page Ranges Diff operation returns the list of valid page
    +        ranges for a page blob that were changed between target blob and
    +        previous snapshot.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param prevsnapshot: Optional in version 2015-07-08 and newer. The
    +         prevsnapshot parameter is a DateTime value that specifies that the
    +         response will contain only pages that were changed between target blob
    +         and previous snapshot. Changed pages include both updated and cleared
    +         pages. The target blob may be a snapshot, as long as the snapshot
    +         specified by prevsnapshot is the older of the two. Note that
    +         incremental snapshots are currently supported only for blobs created
    +         on or after January 1, 2016.
    +        :type prevsnapshot: str
    +        :param prev_snapshot_url: Optional. This header is only supported in
    +         service versions 2019-04-19 and after and specifies the URL of a
    +         previous snapshot of the target blob. The response will only contain
    +         pages that were changed between the target blob and its previous
    +         snapshot.
    +        :type prev_snapshot_url: str
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: PageList or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.PageList
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "pagelist"
    +
    +        # Construct URL
    +        url = self.get_page_ranges_diff.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if prevsnapshot is not None:
    +            query_parameters['prevsnapshot'] = self._serialize.query("prevsnapshot", prevsnapshot, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        if prev_snapshot_url is not None:
    +            header_parameters['x-ms-previous-snapshot-url'] = self._serialize.header("prev_snapshot_url", prev_snapshot_url, 'str')
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PageList', response)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'x-ms-blob-content-length': self._deserialize('long', response.headers.get('x-ms-blob-content-length')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_page_ranges_diff.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def resize(self, blob_content_length, timeout=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Resize the Blob.
    +
    +        :param blob_content_length: This header specifies the maximum size for
    +         the page blob, up to 1 TB. The page blob size must be aligned to a
    +         512-byte boundary.
    +        :type blob_content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.resize.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-blob-content-length'] = self._serialize.header("blob_content_length", blob_content_length, 'long')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    resize.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def update_sequence_number(self, sequence_number_action, timeout=None, blob_sequence_number=0, request_id=None, lease_access_conditions=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """Update the sequence number of the blob.
    +
    +        :param sequence_number_action: Required if the
    +         x-ms-blob-sequence-number header is set for the request. This property
    +         applies to page blobs only. This property indicates how the service
    +         should modify the blob's sequence number. Possible values include:
    +         'max', 'update', 'increment'
    +        :type sequence_number_action: str or
    +         ~azure.storage.blob.models.SequenceNumberActionType
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param blob_sequence_number: Set for page blobs only. The sequence
    +         number is a user-controlled value that you can use to track requests.
    +         The value of the sequence number must be between 0 and 2^63 - 1.
    +        :type blob_sequence_number: long
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.update_sequence_number.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-sequence-number-action'] = self._serialize.header("sequence_number_action", sequence_number_action, 'SequenceNumberActionType')
    +        if blob_sequence_number is not None:
    +            header_parameters['x-ms-blob-sequence-number'] = self._serialize.header("blob_sequence_number", blob_sequence_number, 'long')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    update_sequence_number.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    async def copy_incremental(self, copy_source, timeout=None, request_id=None, modified_access_conditions=None, *, cls=None, **kwargs):
    +        """The Copy Incremental operation copies a snapshot of the source page
    +        blob to a destination page blob. The snapshot is copied such that only
    +        the differential changes between the previously copied snapshot are
    +        transferred to the destination. The copied snapshots are complete
    +        copies of the original snapshot and can be read or copied from as
    +        usual. This API is supported since REST version 2016-05-31.
    +
    +        :param copy_source: Specifies the name of the source page blob
    +         snapshot. This value is a URL of up to 2 KB in length that specifies a
    +         page blob snapshot. The value should be URL-encoded as it would appear
    +         in a request URI. The source blob must either be public or must be
    +         authenticated via a shared access signature.
    +        :type copy_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "incrementalcopy"
    +
    +        # Construct URL
    +        url = self.copy_incremental.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    copy_incremental.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_service_operations_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_service_operations_async.py
    new file mode 100644
    index 000000000000..b62063c8eb9b
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/aio/operations_async/_service_operations_async.py
    @@ -0,0 +1,567 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from ... import models
    +
    +
    +class ServiceOperations:
    +    """ServiceOperations async operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer) -> None:
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +
    +    async def set_properties(self, storage_service_properties, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """Sets properties for a storage account's Blob service endpoint,
    +        including properties for Storage Analytics and CORS (Cross-Origin
    +        Resource Sharing) rules.
    +
    +        :param storage_service_properties: The StorageService properties.
    +        :type storage_service_properties:
    +         ~azure.storage.blob.models.StorageServiceProperties
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.set_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(storage_service_properties, 'StorageServiceProperties')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_properties.metadata = {'url': '/'}
    +
    +    async def get_properties(self, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """gets the properties of a storage account's Blob service, including
    +        properties for Storage Analytics and CORS (Cross-Origin Resource
    +        Sharing) rules.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageServiceProperties or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.StorageServiceProperties
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageServiceProperties', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_properties.metadata = {'url': '/'}
    +
    +    async def get_statistics(self, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """Retrieves statistics related to replication for the Blob service. It is
    +        only available on the secondary location endpoint when read-access
    +        geo-redundant replication is enabled for the storage account.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageServiceStats or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.StorageServiceStats
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "stats"
    +
    +        # Construct URL
    +        url = self.get_statistics.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageServiceStats', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_statistics.metadata = {'url': '/'}
    +
    +    async def list_containers_segment(self, prefix=None, marker=None, maxresults=None, include=None, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """The List Containers Segment operation returns a list of the containers
    +        under the specified account.
    +
    +        :param prefix: Filters the results to return only containers whose
    +         name begins with the specified prefix.
    +        :type prefix: str
    +        :param marker: A string value that identifies the portion of the list
    +         of containers to be returned with the next listing operation. The
    +         operation returns the NextMarker value within the response body if the
    +         listing operation did not return all containers remaining to be listed
    +         with the current page. The NextMarker value can be used as the value
    +         for the marker parameter in a subsequent call to request the next page
    +         of list items. The marker value is opaque to the client.
    +        :type marker: str
    +        :param maxresults: Specifies the maximum number of containers to
    +         return. If the request does not specify maxresults, or specifies a
    +         value greater than 5000, the server will return up to 5000 items. Note
    +         that if the listing operation crosses a partition boundary, then the
    +         service will return a continuation token for retrieving the remainder
    +         of the results. For this reason, it is possible that the service will
    +         return fewer results than specified by maxresults, or than the default
    +         of 5000.
    +        :type maxresults: int
    +        :param include: Include this parameter to specify that the container's
    +         metadata be returned as part of the response body. Possible values
    +         include: 'metadata'
    +        :type include: str or
    +         ~azure.storage.blob.models.ListContainersIncludeType
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: ListContainersSegmentResponse or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.ListContainersSegmentResponse
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "list"
    +
    +        # Construct URL
    +        url = self.list_containers_segment.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if prefix is not None:
    +            query_parameters['prefix'] = self._serialize.query("prefix", prefix, 'str')
    +        if marker is not None:
    +            query_parameters['marker'] = self._serialize.query("marker", marker, 'str')
    +        if maxresults is not None:
    +            query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1)
    +        if include is not None:
    +            query_parameters['include'] = self._serialize.query("include", include, 'ListContainersIncludeType')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ListContainersSegmentResponse', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    list_containers_segment.metadata = {'url': '/'}
    +
    +    async def get_user_delegation_key(self, key_info, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """Retrieves a user delegation key for the Blob service. This is only a
    +        valid operation when using bearer token authentication.
    +
    +        :param key_info:
    +        :type key_info: ~azure.storage.blob.models.KeyInfo
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: UserDelegationKey or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.UserDelegationKey
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "userdelegationkey"
    +
    +        # Construct URL
    +        url = self.get_user_delegation_key.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(key_info, 'KeyInfo')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('UserDelegationKey', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_user_delegation_key.metadata = {'url': '/'}
    +
    +    async def get_account_info(self, *, cls=None, **kwargs):
    +        """Returns the sku name and account kind .
    +
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "account"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_account_info.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-sku-name': self._deserialize(models.SkuName, response.headers.get('x-ms-sku-name')),
    +                'x-ms-account-kind': self._deserialize(models.AccountKind, response.headers.get('x-ms-account-kind')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_account_info.metadata = {'url': '/'}
    +
    +    async def submit_batch(self, body, content_length, multipart_content_type, timeout=None, request_id=None, *, cls=None, **kwargs):
    +        """The Batch operation allows multiple API calls to be embedded into a
    +        single HTTP request.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param multipart_content_type: Required. The value of this header must
    +         be multipart/mixed with a batch boundary. Example header value:
    +         multipart/mixed; boundary=batch_
    +        :type multipart_content_type: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: object or the result of cls(response)
    +        :rtype: Generator
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "batch"
    +
    +        # Construct URL
    +        url = self.submit_batch.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        header_parameters['Content-Type'] = self._serialize.header("multipart_content_type", multipart_content_type, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = await self._client._pipeline.run(request, stream=True, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            await response.load_body()
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = response.stream_download(self._client._pipeline)
    +            header_dict = {
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    submit_batch.metadata = {'url': '/'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/models/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/models/__init__.py
    new file mode 100644
    index 000000000000..4cf758cfccb6
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/models/__init__.py
    @@ -0,0 +1,192 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +try:
    +    from ._models_py3 import AccessPolicy
    +    from ._models_py3 import AppendPositionAccessConditions
    +    from ._models_py3 import BlobFlatListSegment
    +    from ._models_py3 import BlobHierarchyListSegment
    +    from ._models_py3 import BlobHTTPHeaders
    +    from ._models_py3 import BlobItem
    +    from ._models_py3 import BlobMetadata
    +    from ._models_py3 import BlobPrefix
    +    from ._models_py3 import BlobProperties
    +    from ._models_py3 import Block
    +    from ._models_py3 import BlockList
    +    from ._models_py3 import BlockLookupList
    +    from ._models_py3 import ClearRange
    +    from ._models_py3 import ContainerCpkScopeInfo
    +    from ._models_py3 import ContainerItem
    +    from ._models_py3 import ContainerProperties
    +    from ._models_py3 import CorsRule
    +    from ._models_py3 import CpkInfo
    +    from ._models_py3 import CpkScopeInfo
    +    from ._models_py3 import DataLakeStorageError, DataLakeStorageErrorException
    +    from ._models_py3 import DataLakeStorageErrorError
    +    from ._models_py3 import DirectoryHttpHeaders
    +    from ._models_py3 import GeoReplication
    +    from ._models_py3 import KeyInfo
    +    from ._models_py3 import LeaseAccessConditions
    +    from ._models_py3 import ListBlobsFlatSegmentResponse
    +    from ._models_py3 import ListBlobsHierarchySegmentResponse
    +    from ._models_py3 import ListContainersSegmentResponse
    +    from ._models_py3 import Logging
    +    from ._models_py3 import Metrics
    +    from ._models_py3 import ModifiedAccessConditions
    +    from ._models_py3 import PageList
    +    from ._models_py3 import PageRange
    +    from ._models_py3 import RetentionPolicy
    +    from ._models_py3 import SequenceNumberAccessConditions
    +    from ._models_py3 import SignedIdentifier
    +    from ._models_py3 import SourceModifiedAccessConditions
    +    from ._models_py3 import StaticWebsite
    +    from ._models_py3 import StorageError, StorageErrorException
    +    from ._models_py3 import StorageServiceProperties
    +    from ._models_py3 import StorageServiceStats
    +    from ._models_py3 import UserDelegationKey
    +except (SyntaxError, ImportError):
    +    from ._models import AccessPolicy
    +    from ._models import AppendPositionAccessConditions
    +    from ._models import BlobFlatListSegment
    +    from ._models import BlobHierarchyListSegment
    +    from ._models import BlobHTTPHeaders
    +    from ._models import BlobItem
    +    from ._models import BlobMetadata
    +    from ._models import BlobPrefix
    +    from ._models import BlobProperties
    +    from ._models import Block
    +    from ._models import BlockList
    +    from ._models import BlockLookupList
    +    from ._models import ClearRange
    +    from ._models import ContainerCpkScopeInfo
    +    from ._models import ContainerItem
    +    from ._models import ContainerProperties
    +    from ._models import CorsRule
    +    from ._models import CpkInfo
    +    from ._models import CpkScopeInfo
    +    from ._models import DataLakeStorageError, DataLakeStorageErrorException
    +    from ._models import DataLakeStorageErrorError
    +    from ._models import DirectoryHttpHeaders
    +    from ._models import GeoReplication
    +    from ._models import KeyInfo
    +    from ._models import LeaseAccessConditions
    +    from ._models import ListBlobsFlatSegmentResponse
    +    from ._models import ListBlobsHierarchySegmentResponse
    +    from ._models import ListContainersSegmentResponse
    +    from ._models import Logging
    +    from ._models import Metrics
    +    from ._models import ModifiedAccessConditions
    +    from ._models import PageList
    +    from ._models import PageRange
    +    from ._models import RetentionPolicy
    +    from ._models import SequenceNumberAccessConditions
    +    from ._models import SignedIdentifier
    +    from ._models import SourceModifiedAccessConditions
    +    from ._models import StaticWebsite
    +    from ._models import StorageError, StorageErrorException
    +    from ._models import StorageServiceProperties
    +    from ._models import StorageServiceStats
    +    from ._models import UserDelegationKey
    +from ._azure_blob_storage_enums import (
    +    AccessTier,
    +    AccessTierOptional,
    +    AccessTierRequired,
    +    AccountKind,
    +    ArchiveStatus,
    +    BlobType,
    +    BlockListType,
    +    CopyStatusType,
    +    DeleteSnapshotsOptionType,
    +    EncryptionAlgorithmType,
    +    GeoReplicationStatusType,
    +    LeaseDurationType,
    +    LeaseStateType,
    +    LeaseStatusType,
    +    ListBlobsIncludeItem,
    +    ListContainersIncludeType,
    +    PathRenameMode,
    +    PremiumPageBlobAccessTier,
    +    PublicAccessType,
    +    RehydratePriority,
    +    SequenceNumberActionType,
    +    SkuName,
    +    StorageErrorCode,
    +    SyncCopyStatusType,
    +)
    +
    +__all__ = [
    +    'AccessPolicy',
    +    'AppendPositionAccessConditions',
    +    'BlobFlatListSegment',
    +    'BlobHierarchyListSegment',
    +    'BlobHTTPHeaders',
    +    'BlobItem',
    +    'BlobMetadata',
    +    'BlobPrefix',
    +    'BlobProperties',
    +    'Block',
    +    'BlockList',
    +    'BlockLookupList',
    +    'ClearRange',
    +    'ContainerCpkScopeInfo',
    +    'ContainerItem',
    +    'ContainerProperties',
    +    'CorsRule',
    +    'CpkInfo',
    +    'CpkScopeInfo',
    +    'DataLakeStorageError', 'DataLakeStorageErrorException',
    +    'DataLakeStorageErrorError',
    +    'DirectoryHttpHeaders',
    +    'GeoReplication',
    +    'KeyInfo',
    +    'LeaseAccessConditions',
    +    'ListBlobsFlatSegmentResponse',
    +    'ListBlobsHierarchySegmentResponse',
    +    'ListContainersSegmentResponse',
    +    'Logging',
    +    'Metrics',
    +    'ModifiedAccessConditions',
    +    'PageList',
    +    'PageRange',
    +    'RetentionPolicy',
    +    'SequenceNumberAccessConditions',
    +    'SignedIdentifier',
    +    'SourceModifiedAccessConditions',
    +    'StaticWebsite',
    +    'StorageError', 'StorageErrorException',
    +    'StorageServiceProperties',
    +    'StorageServiceStats',
    +    'UserDelegationKey',
    +    'PublicAccessType',
    +    'CopyStatusType',
    +    'LeaseDurationType',
    +    'LeaseStateType',
    +    'LeaseStatusType',
    +    'AccessTier',
    +    'ArchiveStatus',
    +    'BlobType',
    +    'StorageErrorCode',
    +    'GeoReplicationStatusType',
    +    'AccessTierRequired',
    +    'AccessTierOptional',
    +    'PremiumPageBlobAccessTier',
    +    'RehydratePriority',
    +    'BlockListType',
    +    'DeleteSnapshotsOptionType',
    +    'EncryptionAlgorithmType',
    +    'ListBlobsIncludeItem',
    +    'ListContainersIncludeType',
    +    'PathRenameMode',
    +    'SequenceNumberActionType',
    +    'SkuName',
    +    'AccountKind',
    +    'SyncCopyStatusType',
    +]
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/models/_azure_blob_storage_enums.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/models/_azure_blob_storage_enums.py
    new file mode 100644
    index 000000000000..966e2e9c3248
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/models/_azure_blob_storage_enums.py
    @@ -0,0 +1,322 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from enum import Enum
    +
    +
    +class PublicAccessType(str, Enum):
    +
    +    container = "container"
    +    blob = "blob"
    +
    +
    +class CopyStatusType(str, Enum):
    +
    +    pending = "pending"
    +    success = "success"
    +    aborted = "aborted"
    +    failed = "failed"
    +
    +
    +class LeaseDurationType(str, Enum):
    +
    +    infinite = "infinite"
    +    fixed = "fixed"
    +
    +
    +class LeaseStateType(str, Enum):
    +
    +    available = "available"
    +    leased = "leased"
    +    expired = "expired"
    +    breaking = "breaking"
    +    broken = "broken"
    +
    +
    +class LeaseStatusType(str, Enum):
    +
    +    locked = "locked"
    +    unlocked = "unlocked"
    +
    +
    +class AccessTier(str, Enum):
    +
    +    p4 = "P4"
    +    p6 = "P6"
    +    p10 = "P10"
    +    p15 = "P15"
    +    p20 = "P20"
    +    p30 = "P30"
    +    p40 = "P40"
    +    p50 = "P50"
    +    p60 = "P60"
    +    p70 = "P70"
    +    p80 = "P80"
    +    hot = "Hot"
    +    cool = "Cool"
    +    archive = "Archive"
    +
    +
    +class ArchiveStatus(str, Enum):
    +
    +    rehydrate_pending_to_hot = "rehydrate-pending-to-hot"
    +    rehydrate_pending_to_cool = "rehydrate-pending-to-cool"
    +
    +
    +class BlobType(str, Enum):
    +
    +    block_blob = "BlockBlob"
    +    page_blob = "PageBlob"
    +    append_blob = "AppendBlob"
    +
    +
    +class StorageErrorCode(str, Enum):
    +
    +    account_already_exists = "AccountAlreadyExists"
    +    account_being_created = "AccountBeingCreated"
    +    account_is_disabled = "AccountIsDisabled"
    +    authentication_failed = "AuthenticationFailed"
    +    authorization_failure = "AuthorizationFailure"
    +    condition_headers_not_supported = "ConditionHeadersNotSupported"
    +    condition_not_met = "ConditionNotMet"
    +    empty_metadata_key = "EmptyMetadataKey"
    +    insufficient_account_permissions = "InsufficientAccountPermissions"
    +    internal_error = "InternalError"
    +    invalid_authentication_info = "InvalidAuthenticationInfo"
    +    invalid_header_value = "InvalidHeaderValue"
    +    invalid_http_verb = "InvalidHttpVerb"
    +    invalid_input = "InvalidInput"
    +    invalid_md5 = "InvalidMd5"
    +    invalid_metadata = "InvalidMetadata"
    +    invalid_query_parameter_value = "InvalidQueryParameterValue"
    +    invalid_range = "InvalidRange"
    +    invalid_resource_name = "InvalidResourceName"
    +    invalid_uri = "InvalidUri"
    +    invalid_xml_document = "InvalidXmlDocument"
    +    invalid_xml_node_value = "InvalidXmlNodeValue"
    +    md5_mismatch = "Md5Mismatch"
    +    metadata_too_large = "MetadataTooLarge"
    +    missing_content_length_header = "MissingContentLengthHeader"
    +    missing_required_query_parameter = "MissingRequiredQueryParameter"
    +    missing_required_header = "MissingRequiredHeader"
    +    missing_required_xml_node = "MissingRequiredXmlNode"
    +    multiple_condition_headers_not_supported = "MultipleConditionHeadersNotSupported"
    +    operation_timed_out = "OperationTimedOut"
    +    out_of_range_input = "OutOfRangeInput"
    +    out_of_range_query_parameter_value = "OutOfRangeQueryParameterValue"
    +    request_body_too_large = "RequestBodyTooLarge"
    +    resource_type_mismatch = "ResourceTypeMismatch"
    +    request_url_failed_to_parse = "RequestUrlFailedToParse"
    +    resource_already_exists = "ResourceAlreadyExists"
    +    resource_not_found = "ResourceNotFound"
    +    server_busy = "ServerBusy"
    +    unsupported_header = "UnsupportedHeader"
    +    unsupported_xml_node = "UnsupportedXmlNode"
    +    unsupported_query_parameter = "UnsupportedQueryParameter"
    +    unsupported_http_verb = "UnsupportedHttpVerb"
    +    append_position_condition_not_met = "AppendPositionConditionNotMet"
    +    blob_already_exists = "BlobAlreadyExists"
    +    blob_not_found = "BlobNotFound"
    +    blob_overwritten = "BlobOverwritten"
    +    blob_tier_inadequate_for_content_length = "BlobTierInadequateForContentLength"
    +    block_count_exceeds_limit = "BlockCountExceedsLimit"
    +    block_list_too_long = "BlockListTooLong"
    +    cannot_change_to_lower_tier = "CannotChangeToLowerTier"
    +    cannot_verify_copy_source = "CannotVerifyCopySource"
    +    container_already_exists = "ContainerAlreadyExists"
    +    container_being_deleted = "ContainerBeingDeleted"
    +    container_disabled = "ContainerDisabled"
    +    container_not_found = "ContainerNotFound"
    +    content_length_larger_than_tier_limit = "ContentLengthLargerThanTierLimit"
    +    copy_across_accounts_not_supported = "CopyAcrossAccountsNotSupported"
    +    copy_id_mismatch = "CopyIdMismatch"
    +    feature_version_mismatch = "FeatureVersionMismatch"
    +    incremental_copy_blob_mismatch = "IncrementalCopyBlobMismatch"
    +    incremental_copy_of_eralier_version_snapshot_not_allowed = "IncrementalCopyOfEralierVersionSnapshotNotAllowed"
    +    incremental_copy_source_must_be_snapshot = "IncrementalCopySourceMustBeSnapshot"
    +    infinite_lease_duration_required = "InfiniteLeaseDurationRequired"
    +    invalid_blob_or_block = "InvalidBlobOrBlock"
    +    invalid_blob_tier = "InvalidBlobTier"
    +    invalid_blob_type = "InvalidBlobType"
    +    invalid_block_id = "InvalidBlockId"
    +    invalid_block_list = "InvalidBlockList"
    +    invalid_operation = "InvalidOperation"
    +    invalid_page_range = "InvalidPageRange"
    +    invalid_source_blob_type = "InvalidSourceBlobType"
    +    invalid_source_blob_url = "InvalidSourceBlobUrl"
    +    invalid_version_for_page_blob_operation = "InvalidVersionForPageBlobOperation"
    +    lease_already_present = "LeaseAlreadyPresent"
    +    lease_already_broken = "LeaseAlreadyBroken"
    +    lease_id_mismatch_with_blob_operation = "LeaseIdMismatchWithBlobOperation"
    +    lease_id_mismatch_with_container_operation = "LeaseIdMismatchWithContainerOperation"
    +    lease_id_mismatch_with_lease_operation = "LeaseIdMismatchWithLeaseOperation"
    +    lease_id_missing = "LeaseIdMissing"
    +    lease_is_breaking_and_cannot_be_acquired = "LeaseIsBreakingAndCannotBeAcquired"
    +    lease_is_breaking_and_cannot_be_changed = "LeaseIsBreakingAndCannotBeChanged"
    +    lease_is_broken_and_cannot_be_renewed = "LeaseIsBrokenAndCannotBeRenewed"
    +    lease_lost = "LeaseLost"
    +    lease_not_present_with_blob_operation = "LeaseNotPresentWithBlobOperation"
    +    lease_not_present_with_container_operation = "LeaseNotPresentWithContainerOperation"
    +    lease_not_present_with_lease_operation = "LeaseNotPresentWithLeaseOperation"
    +    max_blob_size_condition_not_met = "MaxBlobSizeConditionNotMet"
    +    no_pending_copy_operation = "NoPendingCopyOperation"
    +    operation_not_allowed_on_incremental_copy_blob = "OperationNotAllowedOnIncrementalCopyBlob"
    +    pending_copy_operation = "PendingCopyOperation"
    +    previous_snapshot_cannot_be_newer = "PreviousSnapshotCannotBeNewer"
    +    previous_snapshot_not_found = "PreviousSnapshotNotFound"
    +    previous_snapshot_operation_not_supported = "PreviousSnapshotOperationNotSupported"
    +    sequence_number_condition_not_met = "SequenceNumberConditionNotMet"
    +    sequence_number_increment_too_large = "SequenceNumberIncrementTooLarge"
    +    snapshot_count_exceeded = "SnapshotCountExceeded"
    +    snaphot_operation_rate_exceeded = "SnaphotOperationRateExceeded"
    +    snapshots_present = "SnapshotsPresent"
    +    source_condition_not_met = "SourceConditionNotMet"
    +    system_in_use = "SystemInUse"
    +    target_condition_not_met = "TargetConditionNotMet"
    +    unauthorized_blob_overwrite = "UnauthorizedBlobOverwrite"
    +    blob_being_rehydrated = "BlobBeingRehydrated"
    +    blob_archived = "BlobArchived"
    +    blob_not_archived = "BlobNotArchived"
    +    authorization_source_ip_mismatch = "AuthorizationSourceIPMismatch"
    +    authorization_protocol_mismatch = "AuthorizationProtocolMismatch"
    +    authorization_permission_mismatch = "AuthorizationPermissionMismatch"
    +    authorization_service_mismatch = "AuthorizationServiceMismatch"
    +    authorization_resource_type_mismatch = "AuthorizationResourceTypeMismatch"
    +
    +
    +class GeoReplicationStatusType(str, Enum):
    +
    +    live = "live"
    +    bootstrap = "bootstrap"
    +    unavailable = "unavailable"
    +
    +
    +class AccessTierRequired(str, Enum):
    +
    +    p4 = "P4"
    +    p6 = "P6"
    +    p10 = "P10"
    +    p15 = "P15"
    +    p20 = "P20"
    +    p30 = "P30"
    +    p40 = "P40"
    +    p50 = "P50"
    +    p60 = "P60"
    +    p70 = "P70"
    +    p80 = "P80"
    +    hot = "Hot"
    +    cool = "Cool"
    +    archive = "Archive"
    +
    +
    +class AccessTierOptional(str, Enum):
    +
    +    p4 = "P4"
    +    p6 = "P6"
    +    p10 = "P10"
    +    p15 = "P15"
    +    p20 = "P20"
    +    p30 = "P30"
    +    p40 = "P40"
    +    p50 = "P50"
    +    p60 = "P60"
    +    p70 = "P70"
    +    p80 = "P80"
    +    hot = "Hot"
    +    cool = "Cool"
    +    archive = "Archive"
    +
    +
    +class PremiumPageBlobAccessTier(str, Enum):
    +
    +    p4 = "P4"
    +    p6 = "P6"
    +    p10 = "P10"
    +    p15 = "P15"
    +    p20 = "P20"
    +    p30 = "P30"
    +    p40 = "P40"
    +    p50 = "P50"
    +    p60 = "P60"
    +    p70 = "P70"
    +    p80 = "P80"
    +
    +
    +class RehydratePriority(str, Enum):
    +
    +    high = "High"
    +    standard = "Standard"
    +
    +
    +class BlockListType(str, Enum):
    +
    +    committed = "committed"
    +    uncommitted = "uncommitted"
    +    all = "all"
    +
    +
    +class DeleteSnapshotsOptionType(str, Enum):
    +
    +    include = "include"
    +    only = "only"
    +
    +
    +class EncryptionAlgorithmType(str, Enum):
    +
    +    aes256 = "AES256"
    +
    +
    +class ListBlobsIncludeItem(str, Enum):
    +
    +    copy = "copy"
    +    deleted = "deleted"
    +    metadata = "metadata"
    +    snapshots = "snapshots"
    +    uncommittedblobs = "uncommittedblobs"
    +
    +
    +class ListContainersIncludeType(str, Enum):
    +
    +    metadata = "metadata"
    +
    +
    +class PathRenameMode(str, Enum):
    +
    +    legacy = "legacy"
    +    posix = "posix"
    +
    +
    +class SequenceNumberActionType(str, Enum):
    +
    +    max = "max"
    +    update = "update"
    +    increment = "increment"
    +
    +
    +class SkuName(str, Enum):
    +
    +    standard_lrs = "Standard_LRS"
    +    standard_grs = "Standard_GRS"
    +    standard_ragrs = "Standard_RAGRS"
    +    standard_zrs = "Standard_ZRS"
    +    premium_lrs = "Premium_LRS"
    +
    +
    +class AccountKind(str, Enum):
    +
    +    storage = "Storage"
    +    blob_storage = "BlobStorage"
    +    storage_v2 = "StorageV2"
    +
    +
    +class SyncCopyStatusType(str, Enum):
    +
    +    success = "success"
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/models/_models.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/models/_models.py
    new file mode 100644
    index 000000000000..e442dc31aae6
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/models/_models.py
    @@ -0,0 +1,1589 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from azure.core.exceptions import HttpResponseError
    +
    +
    +class AccessPolicy(Model):
    +    """An Access policy.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required. the date-time the policy is active
    +    :type start: str
    +    :param expiry: Required. the date-time the policy expires
    +    :type expiry: str
    +    :param permission: Required. the permissions for the acl policy
    +    :type permission: str
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'expiry': {'required': True},
    +        'permission': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'str', 'xml': {'name': 'Start'}},
    +        'expiry': {'key': 'Expiry', 'type': 'str', 'xml': {'name': 'Expiry'}},
    +        'permission': {'key': 'Permission', 'type': 'str', 'xml': {'name': 'Permission'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AccessPolicy, self).__init__(**kwargs)
    +        self.start = kwargs.get('start', None)
    +        self.expiry = kwargs.get('expiry', None)
    +        self.permission = kwargs.get('permission', None)
    +
    +
    +class AppendPositionAccessConditions(Model):
    +    """Additional parameters for a set of operations, such as:
    +    AppendBlob_append_block, AppendBlob_append_block_from_url.
    +
    +    :param max_size: Optional conditional header. The max length in bytes
    +     permitted for the append blob. If the Append Block operation would cause
    +     the blob to exceed that limit or if the blob size is already greater than
    +     the value specified in this header, the request will fail with
    +     MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition
    +     Failed).
    +    :type max_size: long
    +    :param append_position: Optional conditional header, used only for the
    +     Append Block operation. A number indicating the byte offset to compare.
    +     Append Block will succeed only if the append position is equal to this
    +     number. If it is not, the request will fail with the
    +     AppendPositionConditionNotMet error (HTTP status code 412 - Precondition
    +     Failed).
    +    :type append_position: long
    +    """
    +
    +    _attribute_map = {
    +        'max_size': {'key': '', 'type': 'long', 'xml': {'name': 'max_size'}},
    +        'append_position': {'key': '', 'type': 'long', 'xml': {'name': 'append_position'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AppendPositionAccessConditions, self).__init__(**kwargs)
    +        self.max_size = kwargs.get('max_size', None)
    +        self.append_position = kwargs.get('append_position', None)
    +
    +
    +class BlobFlatListSegment(Model):
    +    """BlobFlatListSegment.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param blob_items: Required.
    +    :type blob_items: list[~azure.storage.blob.models.BlobItem]
    +    """
    +
    +    _validation = {
    +        'blob_items': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'blob_items': {'key': 'BlobItems', 'type': '[BlobItem]', 'xml': {'name': 'BlobItems', 'itemsName': 'Blob'}},
    +    }
    +    _xml_map = {
    +        'name': 'Blobs'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobFlatListSegment, self).__init__(**kwargs)
    +        self.blob_items = kwargs.get('blob_items', None)
    +
    +
    +class BlobHierarchyListSegment(Model):
    +    """BlobHierarchyListSegment.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param blob_prefixes:
    +    :type blob_prefixes: list[~azure.storage.blob.models.BlobPrefix]
    +    :param blob_items: Required.
    +    :type blob_items: list[~azure.storage.blob.models.BlobItem]
    +    """
    +
    +    _validation = {
    +        'blob_items': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'blob_prefixes': {'key': 'BlobPrefixes', 'type': '[BlobPrefix]', 'xml': {'name': 'BlobPrefix', 'itemsName': 'BlobPrefix'}},
    +        'blob_items': {'key': 'BlobItems', 'type': '[BlobItem]', 'xml': {'name': 'Blob', 'itemsName': 'Blob'}},
    +    }
    +    _xml_map = {
    +        'name': 'Blobs'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobHierarchyListSegment, self).__init__(**kwargs)
    +        self.blob_prefixes = kwargs.get('blob_prefixes', None)
    +        self.blob_items = kwargs.get('blob_items', None)
    +
    +
    +class BlobHTTPHeaders(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param blob_cache_control: Optional. Sets the blob's cache control. If
    +     specified, this property is stored with the blob and returned with a read
    +     request.
    +    :type blob_cache_control: str
    +    :param blob_content_type: Optional. Sets the blob's content type. If
    +     specified, this property is stored with the blob and returned with a read
    +     request.
    +    :type blob_content_type: str
    +    :param blob_content_md5: Optional. An MD5 hash of the blob content. Note
    +     that this hash is not validated, as the hashes for the individual blocks
    +     were validated when each was uploaded.
    +    :type blob_content_md5: bytearray
    +    :param blob_content_encoding: Optional. Sets the blob's content encoding.
    +     If specified, this property is stored with the blob and returned with a
    +     read request.
    +    :type blob_content_encoding: str
    +    :param blob_content_language: Optional. Set the blob's content language.
    +     If specified, this property is stored with the blob and returned with a
    +     read request.
    +    :type blob_content_language: str
    +    :param blob_content_disposition: Optional. Sets the blob's
    +     Content-Disposition header.
    +    :type blob_content_disposition: str
    +    """
    +
    +    _attribute_map = {
    +        'blob_cache_control': {'key': '', 'type': 'str', 'xml': {'name': 'blob_cache_control'}},
    +        'blob_content_type': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_type'}},
    +        'blob_content_md5': {'key': '', 'type': 'bytearray', 'xml': {'name': 'blob_content_md5'}},
    +        'blob_content_encoding': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_encoding'}},
    +        'blob_content_language': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_language'}},
    +        'blob_content_disposition': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_disposition'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobHTTPHeaders, self).__init__(**kwargs)
    +        self.blob_cache_control = kwargs.get('blob_cache_control', None)
    +        self.blob_content_type = kwargs.get('blob_content_type', None)
    +        self.blob_content_md5 = kwargs.get('blob_content_md5', None)
    +        self.blob_content_encoding = kwargs.get('blob_content_encoding', None)
    +        self.blob_content_language = kwargs.get('blob_content_language', None)
    +        self.blob_content_disposition = kwargs.get('blob_content_disposition', None)
    +
    +
    +class BlobItem(Model):
    +    """An Azure Storage blob.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required.
    +    :type name: str
    +    :param deleted: Required.
    +    :type deleted: bool
    +    :param snapshot: Required.
    +    :type snapshot: str
    +    :param properties: Required.
    +    :type properties: ~azure.storage.blob.models.BlobProperties
    +    :param metadata:
    +    :type metadata: ~azure.storage.blob.models.BlobMetadata
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'deleted': {'required': True},
    +        'snapshot': {'required': True},
    +        'properties': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +        'deleted': {'key': 'Deleted', 'type': 'bool', 'xml': {'name': 'Deleted'}},
    +        'snapshot': {'key': 'Snapshot', 'type': 'str', 'xml': {'name': 'Snapshot'}},
    +        'properties': {'key': 'Properties', 'type': 'BlobProperties', 'xml': {'name': 'Properties'}},
    +        'metadata': {'key': 'Metadata', 'type': 'BlobMetadata', 'xml': {'name': 'Metadata'}},
    +    }
    +    _xml_map = {
    +        'name': 'Blob'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobItem, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.deleted = kwargs.get('deleted', None)
    +        self.snapshot = kwargs.get('snapshot', None)
    +        self.properties = kwargs.get('properties', None)
    +        self.metadata = kwargs.get('metadata', None)
    +
    +
    +class BlobMetadata(Model):
    +    """BlobMetadata.
    +
    +    :param additional_properties: Unmatched properties from the message are
    +     deserialized this collection
    +    :type additional_properties: dict[str, str]
    +    :param encrypted:
    +    :type encrypted: str
    +    """
    +
    +    _attribute_map = {
    +        'additional_properties': {'key': '', 'type': '{str}', 'xml': {'name': 'additional_properties'}},
    +        'encrypted': {'key': 'Encrypted', 'type': 'str', 'xml': {'name': 'Encrypted', 'attr': True}},
    +    }
    +    _xml_map = {
    +        'name': 'Metadata'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobMetadata, self).__init__(**kwargs)
    +        self.additional_properties = kwargs.get('additional_properties', None)
    +        self.encrypted = kwargs.get('encrypted', None)
    +
    +
    +class BlobPrefix(Model):
    +    """BlobPrefix.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required.
    +    :type name: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobPrefix, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +
    +
    +class BlobProperties(Model):
    +    """Properties of a blob.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param creation_time:
    +    :type creation_time: datetime
    +    :param last_modified: Required.
    +    :type last_modified: datetime
    +    :param etag: Required.
    +    :type etag: str
    +    :param content_length: Size in bytes
    +    :type content_length: long
    +    :param content_type:
    +    :type content_type: str
    +    :param content_encoding:
    +    :type content_encoding: str
    +    :param content_language:
    +    :type content_language: str
    +    :param content_md5:
    +    :type content_md5: bytearray
    +    :param content_disposition:
    +    :type content_disposition: str
    +    :param cache_control:
    +    :type cache_control: str
    +    :param blob_sequence_number:
    +    :type blob_sequence_number: long
    +    :param blob_type: Possible values include: 'BlockBlob', 'PageBlob',
    +     'AppendBlob'
    +    :type blob_type: str or ~azure.storage.blob.models.BlobType
    +    :param lease_status: Possible values include: 'locked', 'unlocked'
    +    :type lease_status: str or ~azure.storage.blob.models.LeaseStatusType
    +    :param lease_state: Possible values include: 'available', 'leased',
    +     'expired', 'breaking', 'broken'
    +    :type lease_state: str or ~azure.storage.blob.models.LeaseStateType
    +    :param lease_duration: Possible values include: 'infinite', 'fixed'
    +    :type lease_duration: str or ~azure.storage.blob.models.LeaseDurationType
    +    :param copy_id:
    +    :type copy_id: str
    +    :param copy_status: Possible values include: 'pending', 'success',
    +     'aborted', 'failed'
    +    :type copy_status: str or ~azure.storage.blob.models.CopyStatusType
    +    :param copy_source:
    +    :type copy_source: str
    +    :param copy_progress:
    +    :type copy_progress: str
    +    :param copy_completion_time:
    +    :type copy_completion_time: datetime
    +    :param copy_status_description:
    +    :type copy_status_description: str
    +    :param server_encrypted:
    +    :type server_encrypted: bool
    +    :param incremental_copy:
    +    :type incremental_copy: bool
    +    :param destination_snapshot:
    +    :type destination_snapshot: str
    +    :param deleted_time:
    +    :type deleted_time: datetime
    +    :param remaining_retention_days:
    +    :type remaining_retention_days: int
    +    :param access_tier: Possible values include: 'P4', 'P6', 'P10', 'P15',
    +     'P20', 'P30', 'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +    :type access_tier: str or ~azure.storage.blob.models.AccessTier
    +    :param access_tier_inferred:
    +    :type access_tier_inferred: bool
    +    :param archive_status: Possible values include:
    +     'rehydrate-pending-to-hot', 'rehydrate-pending-to-cool'
    +    :type archive_status: str or ~azure.storage.blob.models.ArchiveStatus
    +    :param customer_provided_key_sha256:
    +    :type customer_provided_key_sha256: str
    +    :param encryption_scope: The name of the encryption scope under which the
    +     blob is encrypted.
    +    :type encryption_scope: str
    +    :param access_tier_change_time:
    +    :type access_tier_change_time: datetime
    +    """
    +
    +    _validation = {
    +        'last_modified': {'required': True},
    +        'etag': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'creation_time': {'key': 'Creation-Time', 'type': 'rfc-1123', 'xml': {'name': 'Creation-Time'}},
    +        'last_modified': {'key': 'Last-Modified', 'type': 'rfc-1123', 'xml': {'name': 'Last-Modified'}},
    +        'etag': {'key': 'Etag', 'type': 'str', 'xml': {'name': 'Etag'}},
    +        'content_length': {'key': 'Content-Length', 'type': 'long', 'xml': {'name': 'Content-Length'}},
    +        'content_type': {'key': 'Content-Type', 'type': 'str', 'xml': {'name': 'Content-Type'}},
    +        'content_encoding': {'key': 'Content-Encoding', 'type': 'str', 'xml': {'name': 'Content-Encoding'}},
    +        'content_language': {'key': 'Content-Language', 'type': 'str', 'xml': {'name': 'Content-Language'}},
    +        'content_md5': {'key': 'Content-MD5', 'type': 'bytearray', 'xml': {'name': 'Content-MD5'}},
    +        'content_disposition': {'key': 'Content-Disposition', 'type': 'str', 'xml': {'name': 'Content-Disposition'}},
    +        'cache_control': {'key': 'Cache-Control', 'type': 'str', 'xml': {'name': 'Cache-Control'}},
    +        'blob_sequence_number': {'key': 'x-ms-blob-sequence-number', 'type': 'long', 'xml': {'name': 'x-ms-blob-sequence-number'}},
    +        'blob_type': {'key': 'BlobType', 'type': 'BlobType', 'xml': {'name': 'BlobType'}},
    +        'lease_status': {'key': 'LeaseStatus', 'type': 'LeaseStatusType', 'xml': {'name': 'LeaseStatus'}},
    +        'lease_state': {'key': 'LeaseState', 'type': 'LeaseStateType', 'xml': {'name': 'LeaseState'}},
    +        'lease_duration': {'key': 'LeaseDuration', 'type': 'LeaseDurationType', 'xml': {'name': 'LeaseDuration'}},
    +        'copy_id': {'key': 'CopyId', 'type': 'str', 'xml': {'name': 'CopyId'}},
    +        'copy_status': {'key': 'CopyStatus', 'type': 'CopyStatusType', 'xml': {'name': 'CopyStatus'}},
    +        'copy_source': {'key': 'CopySource', 'type': 'str', 'xml': {'name': 'CopySource'}},
    +        'copy_progress': {'key': 'CopyProgress', 'type': 'str', 'xml': {'name': 'CopyProgress'}},
    +        'copy_completion_time': {'key': 'CopyCompletionTime', 'type': 'rfc-1123', 'xml': {'name': 'CopyCompletionTime'}},
    +        'copy_status_description': {'key': 'CopyStatusDescription', 'type': 'str', 'xml': {'name': 'CopyStatusDescription'}},
    +        'server_encrypted': {'key': 'ServerEncrypted', 'type': 'bool', 'xml': {'name': 'ServerEncrypted'}},
    +        'incremental_copy': {'key': 'IncrementalCopy', 'type': 'bool', 'xml': {'name': 'IncrementalCopy'}},
    +        'destination_snapshot': {'key': 'DestinationSnapshot', 'type': 'str', 'xml': {'name': 'DestinationSnapshot'}},
    +        'deleted_time': {'key': 'DeletedTime', 'type': 'rfc-1123', 'xml': {'name': 'DeletedTime'}},
    +        'remaining_retention_days': {'key': 'RemainingRetentionDays', 'type': 'int', 'xml': {'name': 'RemainingRetentionDays'}},
    +        'access_tier': {'key': 'AccessTier', 'type': 'str', 'xml': {'name': 'AccessTier'}},
    +        'access_tier_inferred': {'key': 'AccessTierInferred', 'type': 'bool', 'xml': {'name': 'AccessTierInferred'}},
    +        'archive_status': {'key': 'ArchiveStatus', 'type': 'str', 'xml': {'name': 'ArchiveStatus'}},
    +        'customer_provided_key_sha256': {'key': 'CustomerProvidedKeySha256', 'type': 'str', 'xml': {'name': 'CustomerProvidedKeySha256'}},
    +        'encryption_scope': {'key': 'EncryptionScope', 'type': 'str', 'xml': {'name': 'EncryptionScope'}},
    +        'access_tier_change_time': {'key': 'AccessTierChangeTime', 'type': 'rfc-1123', 'xml': {'name': 'AccessTierChangeTime'}},
    +    }
    +    _xml_map = {
    +        'name': 'Properties'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlobProperties, self).__init__(**kwargs)
    +        self.creation_time = kwargs.get('creation_time', None)
    +        self.last_modified = kwargs.get('last_modified', None)
    +        self.etag = kwargs.get('etag', None)
    +        self.content_length = kwargs.get('content_length', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.content_encoding = kwargs.get('content_encoding', None)
    +        self.content_language = kwargs.get('content_language', None)
    +        self.content_md5 = kwargs.get('content_md5', None)
    +        self.content_disposition = kwargs.get('content_disposition', None)
    +        self.cache_control = kwargs.get('cache_control', None)
    +        self.blob_sequence_number = kwargs.get('blob_sequence_number', None)
    +        self.blob_type = kwargs.get('blob_type', None)
    +        self.lease_status = kwargs.get('lease_status', None)
    +        self.lease_state = kwargs.get('lease_state', None)
    +        self.lease_duration = kwargs.get('lease_duration', None)
    +        self.copy_id = kwargs.get('copy_id', None)
    +        self.copy_status = kwargs.get('copy_status', None)
    +        self.copy_source = kwargs.get('copy_source', None)
    +        self.copy_progress = kwargs.get('copy_progress', None)
    +        self.copy_completion_time = kwargs.get('copy_completion_time', None)
    +        self.copy_status_description = kwargs.get('copy_status_description', None)
    +        self.server_encrypted = kwargs.get('server_encrypted', None)
    +        self.incremental_copy = kwargs.get('incremental_copy', None)
    +        self.destination_snapshot = kwargs.get('destination_snapshot', None)
    +        self.deleted_time = kwargs.get('deleted_time', None)
    +        self.remaining_retention_days = kwargs.get('remaining_retention_days', None)
    +        self.access_tier = kwargs.get('access_tier', None)
    +        self.access_tier_inferred = kwargs.get('access_tier_inferred', None)
    +        self.archive_status = kwargs.get('archive_status', None)
    +        self.customer_provided_key_sha256 = kwargs.get('customer_provided_key_sha256', None)
    +        self.encryption_scope = kwargs.get('encryption_scope', None)
    +        self.access_tier_change_time = kwargs.get('access_tier_change_time', None)
    +
    +
    +class Block(Model):
    +    """Represents a single block in a block blob.  It describes the block's ID and
    +    size.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The base64 encoded block ID.
    +    :type name: str
    +    :param size: Required. The block size in bytes.
    +    :type size: int
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'size': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +        'size': {'key': 'Size', 'type': 'int', 'xml': {'name': 'Size'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Block, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.size = kwargs.get('size', None)
    +
    +
    +class BlockList(Model):
    +    """BlockList.
    +
    +    :param committed_blocks:
    +    :type committed_blocks: list[~azure.storage.blob.models.Block]
    +    :param uncommitted_blocks:
    +    :type uncommitted_blocks: list[~azure.storage.blob.models.Block]
    +    """
    +
    +    _attribute_map = {
    +        'committed_blocks': {'key': 'CommittedBlocks', 'type': '[Block]', 'xml': {'name': 'CommittedBlocks', 'itemsName': 'Block', 'wrapped': True}},
    +        'uncommitted_blocks': {'key': 'UncommittedBlocks', 'type': '[Block]', 'xml': {'name': 'UncommittedBlocks', 'itemsName': 'Block', 'wrapped': True}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlockList, self).__init__(**kwargs)
    +        self.committed_blocks = kwargs.get('committed_blocks', None)
    +        self.uncommitted_blocks = kwargs.get('uncommitted_blocks', None)
    +
    +
    +class BlockLookupList(Model):
    +    """BlockLookupList.
    +
    +    :param committed:
    +    :type committed: list[str]
    +    :param uncommitted:
    +    :type uncommitted: list[str]
    +    :param latest:
    +    :type latest: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'committed': {'key': 'Committed', 'type': '[str]', 'xml': {'name': 'Committed', 'itemsName': 'Committed'}},
    +        'uncommitted': {'key': 'Uncommitted', 'type': '[str]', 'xml': {'name': 'Uncommitted', 'itemsName': 'Uncommitted'}},
    +        'latest': {'key': 'Latest', 'type': '[str]', 'xml': {'name': 'Latest', 'itemsName': 'Latest'}},
    +    }
    +    _xml_map = {
    +        'name': 'BlockList'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BlockLookupList, self).__init__(**kwargs)
    +        self.committed = kwargs.get('committed', None)
    +        self.uncommitted = kwargs.get('uncommitted', None)
    +        self.latest = kwargs.get('latest', None)
    +
    +
    +class ClearRange(Model):
    +    """ClearRange.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required.
    +    :type start: long
    +    :param end: Required.
    +    :type end: long
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'end': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'long', 'xml': {'name': 'Start'}},
    +        'end': {'key': 'End', 'type': 'long', 'xml': {'name': 'End'}},
    +    }
    +    _xml_map = {
    +        'name': 'ClearRange'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ClearRange, self).__init__(**kwargs)
    +        self.start = kwargs.get('start', None)
    +        self.end = kwargs.get('end', None)
    +
    +
    +class ContainerCpkScopeInfo(Model):
    +    """Additional parameters for create operation.
    +
    +    :param default_encryption_scope: Optional.  Version 2019-07-07 and later.
    +     Specifies the default encryption scope to set on the container and use for
    +     all future writes.
    +    :type default_encryption_scope: str
    +    :param deny_encryption_scope_override: Optional.  Version 2019-07-07 and
    +     newer.  If true, prevents any request from specifying a different
    +     encryption scope than the scope set on the container.
    +    :type deny_encryption_scope_override: bool
    +    """
    +
    +    _attribute_map = {
    +        'default_encryption_scope': {'key': '', 'type': 'str', 'xml': {'name': 'default_encryption_scope'}},
    +        'deny_encryption_scope_override': {'key': '', 'type': 'bool', 'xml': {'name': 'deny_encryption_scope_override'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ContainerCpkScopeInfo, self).__init__(**kwargs)
    +        self.default_encryption_scope = kwargs.get('default_encryption_scope', None)
    +        self.deny_encryption_scope_override = kwargs.get('deny_encryption_scope_override', None)
    +
    +
    +class ContainerItem(Model):
    +    """An Azure Storage container.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required.
    +    :type name: str
    +    :param properties: Required.
    +    :type properties: ~azure.storage.blob.models.ContainerProperties
    +    :param metadata:
    +    :type metadata: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'properties': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +        'properties': {'key': 'Properties', 'type': 'ContainerProperties', 'xml': {'name': 'Properties'}},
    +        'metadata': {'key': 'Metadata', 'type': '{str}', 'xml': {'name': 'Metadata'}},
    +    }
    +    _xml_map = {
    +        'name': 'Container'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ContainerItem, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.properties = kwargs.get('properties', None)
    +        self.metadata = kwargs.get('metadata', None)
    +
    +
    +class ContainerProperties(Model):
    +    """Properties of a container.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param last_modified: Required.
    +    :type last_modified: datetime
    +    :param etag: Required.
    +    :type etag: str
    +    :param lease_status: Possible values include: 'locked', 'unlocked'
    +    :type lease_status: str or ~azure.storage.blob.models.LeaseStatusType
    +    :param lease_state: Possible values include: 'available', 'leased',
    +     'expired', 'breaking', 'broken'
    +    :type lease_state: str or ~azure.storage.blob.models.LeaseStateType
    +    :param lease_duration: Possible values include: 'infinite', 'fixed'
    +    :type lease_duration: str or ~azure.storage.blob.models.LeaseDurationType
    +    :param public_access: Possible values include: 'container', 'blob'
    +    :type public_access: str or ~azure.storage.blob.models.PublicAccessType
    +    :param has_immutability_policy:
    +    :type has_immutability_policy: bool
    +    :param has_legal_hold:
    +    :type has_legal_hold: bool
    +    :param default_encryption_scope:
    +    :type default_encryption_scope: str
    +    :param deny_encryption_scope_override:
    +    :type deny_encryption_scope_override: bool
    +    """
    +
    +    _validation = {
    +        'last_modified': {'required': True},
    +        'etag': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'last_modified': {'key': 'Last-Modified', 'type': 'rfc-1123', 'xml': {'name': 'Last-Modified'}},
    +        'etag': {'key': 'Etag', 'type': 'str', 'xml': {'name': 'Etag'}},
    +        'lease_status': {'key': 'LeaseStatus', 'type': 'LeaseStatusType', 'xml': {'name': 'LeaseStatus'}},
    +        'lease_state': {'key': 'LeaseState', 'type': 'LeaseStateType', 'xml': {'name': 'LeaseState'}},
    +        'lease_duration': {'key': 'LeaseDuration', 'type': 'LeaseDurationType', 'xml': {'name': 'LeaseDuration'}},
    +        'public_access': {'key': 'PublicAccess', 'type': 'str', 'xml': {'name': 'PublicAccess'}},
    +        'has_immutability_policy': {'key': 'HasImmutabilityPolicy', 'type': 'bool', 'xml': {'name': 'HasImmutabilityPolicy'}},
    +        'has_legal_hold': {'key': 'HasLegalHold', 'type': 'bool', 'xml': {'name': 'HasLegalHold'}},
    +        'default_encryption_scope': {'key': 'DefaultEncryptionScope', 'type': 'str', 'xml': {'name': 'DefaultEncryptionScope'}},
    +        'deny_encryption_scope_override': {'key': 'DenyEncryptionScopeOverride', 'type': 'bool', 'xml': {'name': 'DenyEncryptionScopeOverride'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ContainerProperties, self).__init__(**kwargs)
    +        self.last_modified = kwargs.get('last_modified', None)
    +        self.etag = kwargs.get('etag', None)
    +        self.lease_status = kwargs.get('lease_status', None)
    +        self.lease_state = kwargs.get('lease_state', None)
    +        self.lease_duration = kwargs.get('lease_duration', None)
    +        self.public_access = kwargs.get('public_access', None)
    +        self.has_immutability_policy = kwargs.get('has_immutability_policy', None)
    +        self.has_legal_hold = kwargs.get('has_legal_hold', None)
    +        self.default_encryption_scope = kwargs.get('default_encryption_scope', None)
    +        self.deny_encryption_scope_override = kwargs.get('deny_encryption_scope_override', None)
    +
    +
    +class CorsRule(Model):
    +    """CORS is an HTTP feature that enables a web application running under one
    +    domain to access resources in another domain. Web browsers implement a
    +    security restriction known as same-origin policy that prevents a web page
    +    from calling APIs in a different domain; CORS provides a secure way to
    +    allow one domain (the origin domain) to call APIs in another domain.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param allowed_origins: Required. The origin domains that are permitted to
    +     make a request against the storage service via CORS. The origin domain is
    +     the domain from which the request originates. Note that the origin must be
    +     an exact case-sensitive match with the origin that the user age sends to
    +     the service. You can also use the wildcard character '*' to allow all
    +     origin domains to make requests via CORS.
    +    :type allowed_origins: str
    +    :param allowed_methods: Required. The methods (HTTP request verbs) that
    +     the origin domain may use for a CORS request. (comma separated)
    +    :type allowed_methods: str
    +    :param allowed_headers: Required. the request headers that the origin
    +     domain may specify on the CORS request.
    +    :type allowed_headers: str
    +    :param exposed_headers: Required. The response headers that may be sent in
    +     the response to the CORS request and exposed by the browser to the request
    +     issuer
    +    :type exposed_headers: str
    +    :param max_age_in_seconds: Required. The maximum amount time that a
    +     browser should cache the preflight OPTIONS request.
    +    :type max_age_in_seconds: int
    +    """
    +
    +    _validation = {
    +        'allowed_origins': {'required': True},
    +        'allowed_methods': {'required': True},
    +        'allowed_headers': {'required': True},
    +        'exposed_headers': {'required': True},
    +        'max_age_in_seconds': {'required': True, 'minimum': 0},
    +    }
    +
    +    _attribute_map = {
    +        'allowed_origins': {'key': 'AllowedOrigins', 'type': 'str', 'xml': {'name': 'AllowedOrigins'}},
    +        'allowed_methods': {'key': 'AllowedMethods', 'type': 'str', 'xml': {'name': 'AllowedMethods'}},
    +        'allowed_headers': {'key': 'AllowedHeaders', 'type': 'str', 'xml': {'name': 'AllowedHeaders'}},
    +        'exposed_headers': {'key': 'ExposedHeaders', 'type': 'str', 'xml': {'name': 'ExposedHeaders'}},
    +        'max_age_in_seconds': {'key': 'MaxAgeInSeconds', 'type': 'int', 'xml': {'name': 'MaxAgeInSeconds'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CorsRule, self).__init__(**kwargs)
    +        self.allowed_origins = kwargs.get('allowed_origins', None)
    +        self.allowed_methods = kwargs.get('allowed_methods', None)
    +        self.allowed_headers = kwargs.get('allowed_headers', None)
    +        self.exposed_headers = kwargs.get('exposed_headers', None)
    +        self.max_age_in_seconds = kwargs.get('max_age_in_seconds', None)
    +
    +
    +class CpkInfo(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param encryption_key: Optional. Specifies the encryption key to use to
    +     encrypt the data provided in the request. If not specified, encryption is
    +     performed with the root account encryption key.  For more information, see
    +     Encryption at Rest for Azure Storage Services.
    +    :type encryption_key: str
    +    :param encryption_key_sha256: The SHA-256 hash of the provided encryption
    +     key. Must be provided if the x-ms-encryption-key header is provided.
    +    :type encryption_key_sha256: str
    +    :param encryption_algorithm: The algorithm used to produce the encryption
    +     key hash. Currently, the only accepted value is "AES256". Must be provided
    +     if the x-ms-encryption-key header is provided. Possible values include:
    +     'AES256'
    +    :type encryption_algorithm: str or
    +     ~azure.storage.blob.models.EncryptionAlgorithmType
    +    """
    +
    +    _attribute_map = {
    +        'encryption_key': {'key': '', 'type': 'str', 'xml': {'name': 'encryption_key'}},
    +        'encryption_key_sha256': {'key': '', 'type': 'str', 'xml': {'name': 'encryption_key_sha256'}},
    +        'encryption_algorithm': {'key': '', 'type': 'EncryptionAlgorithmType', 'xml': {'name': 'encryption_algorithm'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CpkInfo, self).__init__(**kwargs)
    +        self.encryption_key = kwargs.get('encryption_key', None)
    +        self.encryption_key_sha256 = kwargs.get('encryption_key_sha256', None)
    +        self.encryption_algorithm = kwargs.get('encryption_algorithm', None)
    +
    +
    +class CpkScopeInfo(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param encryption_scope: Optional. Version 2019-07-07 and later.
    +     Specifies the name of the encryption scope to use to encrypt the data
    +     provided in the request. If not specified, encryption is performed with
    +     the default account encryption scope.  For more information, see
    +     Encryption at Rest for Azure Storage Services.
    +    :type encryption_scope: str
    +    """
    +
    +    _attribute_map = {
    +        'encryption_scope': {'key': '', 'type': 'str', 'xml': {'name': 'encryption_scope'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CpkScopeInfo, self).__init__(**kwargs)
    +        self.encryption_scope = kwargs.get('encryption_scope', None)
    +
    +
    +class DataLakeStorageError(Model):
    +    """DataLakeStorageError.
    +
    +    :param error: The service error response object.
    +    :type error: ~azure.storage.blob.models.DataLakeStorageErrorError
    +    """
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'DataLakeStorageErrorError', 'xml': {'name': 'error'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DataLakeStorageError, self).__init__(**kwargs)
    +        self.error = kwargs.get('error', None)
    +
    +
    +class DataLakeStorageErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'DataLakeStorageError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'DataLakeStorageError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(DataLakeStorageErrorException, self).__init__(response=response)
    +
    +
    +class DataLakeStorageErrorError(Model):
    +    """The service error response object.
    +
    +    :param code: The service error code.
    +    :type code: str
    +    :param message: The service error message.
    +    :type message: str
    +    """
    +
    +    _attribute_map = {
    +        'code': {'key': 'Code', 'type': 'str', 'xml': {'name': 'Code'}},
    +        'message': {'key': 'Message', 'type': 'str', 'xml': {'name': 'Message'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DataLakeStorageErrorError, self).__init__(**kwargs)
    +        self.code = kwargs.get('code', None)
    +        self.message = kwargs.get('message', None)
    +
    +
    +class DirectoryHttpHeaders(Model):
    +    """Additional parameters for a set of operations, such as: Directory_create,
    +    Directory_rename, Blob_rename.
    +
    +    :param cache_control: Cache control for given resource
    +    :type cache_control: str
    +    :param content_type: Content type for given resource
    +    :type content_type: str
    +    :param content_encoding: Content encoding for given resource
    +    :type content_encoding: str
    +    :param content_language: Content language for given resource
    +    :type content_language: str
    +    :param content_disposition: Content disposition for given resource
    +    :type content_disposition: str
    +    """
    +
    +    _attribute_map = {
    +        'cache_control': {'key': '', 'type': 'str', 'xml': {'name': 'cache_control'}},
    +        'content_type': {'key': '', 'type': 'str', 'xml': {'name': 'content_type'}},
    +        'content_encoding': {'key': '', 'type': 'str', 'xml': {'name': 'content_encoding'}},
    +        'content_language': {'key': '', 'type': 'str', 'xml': {'name': 'content_language'}},
    +        'content_disposition': {'key': '', 'type': 'str', 'xml': {'name': 'content_disposition'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DirectoryHttpHeaders, self).__init__(**kwargs)
    +        self.cache_control = kwargs.get('cache_control', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.content_encoding = kwargs.get('content_encoding', None)
    +        self.content_language = kwargs.get('content_language', None)
    +        self.content_disposition = kwargs.get('content_disposition', None)
    +
    +
    +class GeoReplication(Model):
    +    """Geo-Replication information for the Secondary Storage Service.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param status: Required. The status of the secondary location. Possible
    +     values include: 'live', 'bootstrap', 'unavailable'
    +    :type status: str or ~azure.storage.blob.models.GeoReplicationStatusType
    +    :param last_sync_time: Required. A GMT date/time value, to the second. All
    +     primary writes preceding this value are guaranteed to be available for
    +     read operations at the secondary. Primary writes after this point in time
    +     may or may not be available for reads.
    +    :type last_sync_time: datetime
    +    """
    +
    +    _validation = {
    +        'status': {'required': True},
    +        'last_sync_time': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'status': {'key': 'Status', 'type': 'str', 'xml': {'name': 'Status'}},
    +        'last_sync_time': {'key': 'LastSyncTime', 'type': 'rfc-1123', 'xml': {'name': 'LastSyncTime'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(GeoReplication, self).__init__(**kwargs)
    +        self.status = kwargs.get('status', None)
    +        self.last_sync_time = kwargs.get('last_sync_time', None)
    +
    +
    +class KeyInfo(Model):
    +    """Key information.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required. The date-time the key is active in ISO 8601 UTC
    +     time
    +    :type start: str
    +    :param expiry: Required. The date-time the key expires in ISO 8601 UTC
    +     time
    +    :type expiry: str
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'expiry': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'str', 'xml': {'name': 'Start'}},
    +        'expiry': {'key': 'Expiry', 'type': 'str', 'xml': {'name': 'Expiry'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyInfo, self).__init__(**kwargs)
    +        self.start = kwargs.get('start', None)
    +        self.expiry = kwargs.get('expiry', None)
    +
    +
    +class LeaseAccessConditions(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param lease_id: If specified, the operation only succeeds if the
    +     resource's lease is active and matches this ID.
    +    :type lease_id: str
    +    """
    +
    +    _attribute_map = {
    +        'lease_id': {'key': '', 'type': 'str', 'xml': {'name': 'lease_id'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(LeaseAccessConditions, self).__init__(**kwargs)
    +        self.lease_id = kwargs.get('lease_id', None)
    +
    +
    +class ListBlobsFlatSegmentResponse(Model):
    +    """An enumeration of blobs.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param service_endpoint: Required.
    +    :type service_endpoint: str
    +    :param container_name: Required.
    +    :type container_name: str
    +    :param prefix:
    +    :type prefix: str
    +    :param marker:
    +    :type marker: str
    +    :param max_results:
    +    :type max_results: int
    +    :param segment: Required.
    +    :type segment: ~azure.storage.blob.models.BlobFlatListSegment
    +    :param next_marker:
    +    :type next_marker: str
    +    """
    +
    +    _validation = {
    +        'service_endpoint': {'required': True},
    +        'container_name': {'required': True},
    +        'segment': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}},
    +        'container_name': {'key': 'ContainerName', 'type': 'str', 'xml': {'name': 'ContainerName', 'attr': True}},
    +        'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}},
    +        'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}},
    +        'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}},
    +        'segment': {'key': 'Segment', 'type': 'BlobFlatListSegment', 'xml': {'name': 'Segment'}},
    +        'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}},
    +    }
    +    _xml_map = {
    +        'name': 'EnumerationResults'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ListBlobsFlatSegmentResponse, self).__init__(**kwargs)
    +        self.service_endpoint = kwargs.get('service_endpoint', None)
    +        self.container_name = kwargs.get('container_name', None)
    +        self.prefix = kwargs.get('prefix', None)
    +        self.marker = kwargs.get('marker', None)
    +        self.max_results = kwargs.get('max_results', None)
    +        self.segment = kwargs.get('segment', None)
    +        self.next_marker = kwargs.get('next_marker', None)
    +
    +
    +class ListBlobsHierarchySegmentResponse(Model):
    +    """An enumeration of blobs.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param service_endpoint: Required.
    +    :type service_endpoint: str
    +    :param container_name: Required.
    +    :type container_name: str
    +    :param prefix:
    +    :type prefix: str
    +    :param marker:
    +    :type marker: str
    +    :param max_results:
    +    :type max_results: int
    +    :param delimiter:
    +    :type delimiter: str
    +    :param segment: Required.
    +    :type segment: ~azure.storage.blob.models.BlobHierarchyListSegment
    +    :param next_marker:
    +    :type next_marker: str
    +    """
    +
    +    _validation = {
    +        'service_endpoint': {'required': True},
    +        'container_name': {'required': True},
    +        'segment': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}},
    +        'container_name': {'key': 'ContainerName', 'type': 'str', 'xml': {'name': 'ContainerName', 'attr': True}},
    +        'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}},
    +        'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}},
    +        'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}},
    +        'delimiter': {'key': 'Delimiter', 'type': 'str', 'xml': {'name': 'Delimiter'}},
    +        'segment': {'key': 'Segment', 'type': 'BlobHierarchyListSegment', 'xml': {'name': 'Segment'}},
    +        'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}},
    +    }
    +    _xml_map = {
    +        'name': 'EnumerationResults'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ListBlobsHierarchySegmentResponse, self).__init__(**kwargs)
    +        self.service_endpoint = kwargs.get('service_endpoint', None)
    +        self.container_name = kwargs.get('container_name', None)
    +        self.prefix = kwargs.get('prefix', None)
    +        self.marker = kwargs.get('marker', None)
    +        self.max_results = kwargs.get('max_results', None)
    +        self.delimiter = kwargs.get('delimiter', None)
    +        self.segment = kwargs.get('segment', None)
    +        self.next_marker = kwargs.get('next_marker', None)
    +
    +
    +class ListContainersSegmentResponse(Model):
    +    """An enumeration of containers.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param service_endpoint: Required.
    +    :type service_endpoint: str
    +    :param prefix:
    +    :type prefix: str
    +    :param marker:
    +    :type marker: str
    +    :param max_results:
    +    :type max_results: int
    +    :param container_items: Required.
    +    :type container_items: list[~azure.storage.blob.models.ContainerItem]
    +    :param next_marker:
    +    :type next_marker: str
    +    """
    +
    +    _validation = {
    +        'service_endpoint': {'required': True},
    +        'container_items': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}},
    +        'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}},
    +        'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}},
    +        'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}},
    +        'container_items': {'key': 'ContainerItems', 'type': '[ContainerItem]', 'xml': {'name': 'Containers', 'itemsName': 'Containers', 'wrapped': True}},
    +        'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}},
    +    }
    +    _xml_map = {
    +        'name': 'EnumerationResults'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ListContainersSegmentResponse, self).__init__(**kwargs)
    +        self.service_endpoint = kwargs.get('service_endpoint', None)
    +        self.prefix = kwargs.get('prefix', None)
    +        self.marker = kwargs.get('marker', None)
    +        self.max_results = kwargs.get('max_results', None)
    +        self.container_items = kwargs.get('container_items', None)
    +        self.next_marker = kwargs.get('next_marker', None)
    +
    +
    +class Logging(Model):
    +    """Azure Analytics Logging settings.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param version: Required. The version of Storage Analytics to configure.
    +    :type version: str
    +    :param delete: Required. Indicates whether all delete requests should be
    +     logged.
    +    :type delete: bool
    +    :param read: Required. Indicates whether all read requests should be
    +     logged.
    +    :type read: bool
    +    :param write: Required. Indicates whether all write requests should be
    +     logged.
    +    :type write: bool
    +    :param retention_policy: Required.
    +    :type retention_policy: ~azure.storage.blob.models.RetentionPolicy
    +    """
    +
    +    _validation = {
    +        'version': {'required': True},
    +        'delete': {'required': True},
    +        'read': {'required': True},
    +        'write': {'required': True},
    +        'retention_policy': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'version': {'key': 'Version', 'type': 'str', 'xml': {'name': 'Version'}},
    +        'delete': {'key': 'Delete', 'type': 'bool', 'xml': {'name': 'Delete'}},
    +        'read': {'key': 'Read', 'type': 'bool', 'xml': {'name': 'Read'}},
    +        'write': {'key': 'Write', 'type': 'bool', 'xml': {'name': 'Write'}},
    +        'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'RetentionPolicy'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Logging, self).__init__(**kwargs)
    +        self.version = kwargs.get('version', None)
    +        self.delete = kwargs.get('delete', None)
    +        self.read = kwargs.get('read', None)
    +        self.write = kwargs.get('write', None)
    +        self.retention_policy = kwargs.get('retention_policy', None)
    +
    +
    +class Metrics(Model):
    +    """a summary of request statistics grouped by API in hour or minute aggregates
    +    for blobs.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param version: The version of Storage Analytics to configure.
    +    :type version: str
    +    :param enabled: Required. Indicates whether metrics are enabled for the
    +     Blob service.
    +    :type enabled: bool
    +    :param include_apis: Indicates whether metrics should generate summary
    +     statistics for called API operations.
    +    :type include_apis: bool
    +    :param retention_policy:
    +    :type retention_policy: ~azure.storage.blob.models.RetentionPolicy
    +    """
    +
    +    _validation = {
    +        'enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'version': {'key': 'Version', 'type': 'str', 'xml': {'name': 'Version'}},
    +        'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}},
    +        'include_apis': {'key': 'IncludeAPIs', 'type': 'bool', 'xml': {'name': 'IncludeAPIs'}},
    +        'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'RetentionPolicy'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Metrics, self).__init__(**kwargs)
    +        self.version = kwargs.get('version', None)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.include_apis = kwargs.get('include_apis', None)
    +        self.retention_policy = kwargs.get('retention_policy', None)
    +
    +
    +class ModifiedAccessConditions(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param if_modified_since: Specify this header value to operate only on a
    +     blob if it has been modified since the specified date/time.
    +    :type if_modified_since: datetime
    +    :param if_unmodified_since: Specify this header value to operate only on a
    +     blob if it has not been modified since the specified date/time.
    +    :type if_unmodified_since: datetime
    +    :param if_match: Specify an ETag value to operate only on blobs with a
    +     matching value.
    +    :type if_match: str
    +    :param if_none_match: Specify an ETag value to operate only on blobs
    +     without a matching value.
    +    :type if_none_match: str
    +    """
    +
    +    _attribute_map = {
    +        'if_modified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'if_modified_since'}},
    +        'if_unmodified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'if_unmodified_since'}},
    +        'if_match': {'key': '', 'type': 'str', 'xml': {'name': 'if_match'}},
    +        'if_none_match': {'key': '', 'type': 'str', 'xml': {'name': 'if_none_match'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ModifiedAccessConditions, self).__init__(**kwargs)
    +        self.if_modified_since = kwargs.get('if_modified_since', None)
    +        self.if_unmodified_since = kwargs.get('if_unmodified_since', None)
    +        self.if_match = kwargs.get('if_match', None)
    +        self.if_none_match = kwargs.get('if_none_match', None)
    +
    +
    +class PageList(Model):
    +    """the list of pages.
    +
    +    :param page_range:
    +    :type page_range: list[~azure.storage.blob.models.PageRange]
    +    :param clear_range:
    +    :type clear_range: list[~azure.storage.blob.models.ClearRange]
    +    """
    +
    +    _attribute_map = {
    +        'page_range': {'key': 'PageRange', 'type': '[PageRange]', 'xml': {'name': 'PageRange', 'itemsName': 'PageRange'}},
    +        'clear_range': {'key': 'ClearRange', 'type': '[ClearRange]', 'xml': {'name': 'ClearRange', 'itemsName': 'ClearRange'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PageList, self).__init__(**kwargs)
    +        self.page_range = kwargs.get('page_range', None)
    +        self.clear_range = kwargs.get('clear_range', None)
    +
    +
    +class PageRange(Model):
    +    """PageRange.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required.
    +    :type start: long
    +    :param end: Required.
    +    :type end: long
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'end': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'long', 'xml': {'name': 'Start'}},
    +        'end': {'key': 'End', 'type': 'long', 'xml': {'name': 'End'}},
    +    }
    +    _xml_map = {
    +        'name': 'PageRange'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PageRange, self).__init__(**kwargs)
    +        self.start = kwargs.get('start', None)
    +        self.end = kwargs.get('end', None)
    +
    +
    +class RetentionPolicy(Model):
    +    """the retention policy which determines how long the associated data should
    +    persist.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param enabled: Required. Indicates whether a retention policy is enabled
    +     for the storage service
    +    :type enabled: bool
    +    :param days: Indicates the number of days that metrics or logging or
    +     soft-deleted data should be retained. All data older than this value will
    +     be deleted
    +    :type days: int
    +    """
    +
    +    _validation = {
    +        'enabled': {'required': True},
    +        'days': {'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}},
    +        'days': {'key': 'Days', 'type': 'int', 'xml': {'name': 'Days'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RetentionPolicy, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.days = kwargs.get('days', None)
    +
    +
    +class SequenceNumberAccessConditions(Model):
    +    """Additional parameters for a set of operations, such as:
    +    PageBlob_upload_pages, PageBlob_clear_pages,
    +    PageBlob_upload_pages_from_url.
    +
    +    :param if_sequence_number_less_than_or_equal_to: Specify this header value
    +     to operate only on a blob if it has a sequence number less than or equal
    +     to the specified.
    +    :type if_sequence_number_less_than_or_equal_to: long
    +    :param if_sequence_number_less_than: Specify this header value to operate
    +     only on a blob if it has a sequence number less than the specified.
    +    :type if_sequence_number_less_than: long
    +    :param if_sequence_number_equal_to: Specify this header value to operate
    +     only on a blob if it has the specified sequence number.
    +    :type if_sequence_number_equal_to: long
    +    """
    +
    +    _attribute_map = {
    +        'if_sequence_number_less_than_or_equal_to': {'key': '', 'type': 'long', 'xml': {'name': 'if_sequence_number_less_than_or_equal_to'}},
    +        'if_sequence_number_less_than': {'key': '', 'type': 'long', 'xml': {'name': 'if_sequence_number_less_than'}},
    +        'if_sequence_number_equal_to': {'key': '', 'type': 'long', 'xml': {'name': 'if_sequence_number_equal_to'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SequenceNumberAccessConditions, self).__init__(**kwargs)
    +        self.if_sequence_number_less_than_or_equal_to = kwargs.get('if_sequence_number_less_than_or_equal_to', None)
    +        self.if_sequence_number_less_than = kwargs.get('if_sequence_number_less_than', None)
    +        self.if_sequence_number_equal_to = kwargs.get('if_sequence_number_equal_to', None)
    +
    +
    +class SignedIdentifier(Model):
    +    """signed identifier.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param id: Required. a unique id
    +    :type id: str
    +    :param access_policy:
    +    :type access_policy: ~azure.storage.blob.models.AccessPolicy
    +    """
    +
    +    _validation = {
    +        'id': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'Id', 'type': 'str', 'xml': {'name': 'Id'}},
    +        'access_policy': {'key': 'AccessPolicy', 'type': 'AccessPolicy', 'xml': {'name': 'AccessPolicy'}},
    +    }
    +    _xml_map = {
    +        'name': 'SignedIdentifier'
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SignedIdentifier, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.access_policy = kwargs.get('access_policy', None)
    +
    +
    +class SourceModifiedAccessConditions(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param source_if_modified_since: Specify this header value to operate only
    +     on a blob if it has been modified since the specified date/time.
    +    :type source_if_modified_since: datetime
    +    :param source_if_unmodified_since: Specify this header value to operate
    +     only on a blob if it has not been modified since the specified date/time.
    +    :type source_if_unmodified_since: datetime
    +    :param source_if_match: Specify an ETag value to operate only on blobs
    +     with a matching value.
    +    :type source_if_match: str
    +    :param source_if_none_match: Specify an ETag value to operate only on
    +     blobs without a matching value.
    +    :type source_if_none_match: str
    +    """
    +
    +    _attribute_map = {
    +        'source_if_modified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'source_if_modified_since'}},
    +        'source_if_unmodified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'source_if_unmodified_since'}},
    +        'source_if_match': {'key': '', 'type': 'str', 'xml': {'name': 'source_if_match'}},
    +        'source_if_none_match': {'key': '', 'type': 'str', 'xml': {'name': 'source_if_none_match'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SourceModifiedAccessConditions, self).__init__(**kwargs)
    +        self.source_if_modified_since = kwargs.get('source_if_modified_since', None)
    +        self.source_if_unmodified_since = kwargs.get('source_if_unmodified_since', None)
    +        self.source_if_match = kwargs.get('source_if_match', None)
    +        self.source_if_none_match = kwargs.get('source_if_none_match', None)
    +
    +
    +class StaticWebsite(Model):
    +    """The properties that enable an account to host a static website.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param enabled: Required. Indicates whether this account is hosting a
    +     static website
    +    :type enabled: bool
    +    :param index_document: The default name of the index page under each
    +     directory
    +    :type index_document: str
    +    :param error_document404_path: The absolute path of the custom 404 page
    +    :type error_document404_path: str
    +    """
    +
    +    _validation = {
    +        'enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}},
    +        'index_document': {'key': 'IndexDocument', 'type': 'str', 'xml': {'name': 'IndexDocument'}},
    +        'error_document404_path': {'key': 'ErrorDocument404Path', 'type': 'str', 'xml': {'name': 'ErrorDocument404Path'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StaticWebsite, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.index_document = kwargs.get('index_document', None)
    +        self.error_document404_path = kwargs.get('error_document404_path', None)
    +
    +
    +class StorageError(Model):
    +    """StorageError.
    +
    +    :param message:
    +    :type message: str
    +    """
    +
    +    _attribute_map = {
    +        'message': {'key': 'Message', 'type': 'str', 'xml': {'name': 'Message'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageError, self).__init__(**kwargs)
    +        self.message = kwargs.get('message', None)
    +
    +
    +class StorageErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'StorageError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'StorageError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(StorageErrorException, self).__init__(response=response)
    +
    +
    +class StorageServiceProperties(Model):
    +    """Storage Service Properties.
    +
    +    :param logging:
    +    :type logging: ~azure.storage.blob.models.Logging
    +    :param hour_metrics:
    +    :type hour_metrics: ~azure.storage.blob.models.Metrics
    +    :param minute_metrics:
    +    :type minute_metrics: ~azure.storage.blob.models.Metrics
    +    :param cors: The set of CORS rules.
    +    :type cors: list[~azure.storage.blob.models.CorsRule]
    +    :param default_service_version: The default version to use for requests to
    +     the Blob service if an incoming request's version is not specified.
    +     Possible values include version 2008-10-27 and all more recent versions
    +    :type default_service_version: str
    +    :param delete_retention_policy:
    +    :type delete_retention_policy: ~azure.storage.blob.models.RetentionPolicy
    +    :param static_website:
    +    :type static_website: ~azure.storage.blob.models.StaticWebsite
    +    """
    +
    +    _attribute_map = {
    +        'logging': {'key': 'Logging', 'type': 'Logging', 'xml': {'name': 'Logging'}},
    +        'hour_metrics': {'key': 'HourMetrics', 'type': 'Metrics', 'xml': {'name': 'HourMetrics'}},
    +        'minute_metrics': {'key': 'MinuteMetrics', 'type': 'Metrics', 'xml': {'name': 'MinuteMetrics'}},
    +        'cors': {'key': 'Cors', 'type': '[CorsRule]', 'xml': {'name': 'Cors', 'itemsName': 'CorsRule', 'wrapped': True}},
    +        'default_service_version': {'key': 'DefaultServiceVersion', 'type': 'str', 'xml': {'name': 'DefaultServiceVersion'}},
    +        'delete_retention_policy': {'key': 'DeleteRetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'DeleteRetentionPolicy'}},
    +        'static_website': {'key': 'StaticWebsite', 'type': 'StaticWebsite', 'xml': {'name': 'StaticWebsite'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageServiceProperties, self).__init__(**kwargs)
    +        self.logging = kwargs.get('logging', None)
    +        self.hour_metrics = kwargs.get('hour_metrics', None)
    +        self.minute_metrics = kwargs.get('minute_metrics', None)
    +        self.cors = kwargs.get('cors', None)
    +        self.default_service_version = kwargs.get('default_service_version', None)
    +        self.delete_retention_policy = kwargs.get('delete_retention_policy', None)
    +        self.static_website = kwargs.get('static_website', None)
    +
    +
    +class StorageServiceStats(Model):
    +    """Stats for the storage service.
    +
    +    :param geo_replication:
    +    :type geo_replication: ~azure.storage.blob.models.GeoReplication
    +    """
    +
    +    _attribute_map = {
    +        'geo_replication': {'key': 'GeoReplication', 'type': 'GeoReplication', 'xml': {'name': 'GeoReplication'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageServiceStats, self).__init__(**kwargs)
    +        self.geo_replication = kwargs.get('geo_replication', None)
    +
    +
    +class UserDelegationKey(Model):
    +    """A user delegation key.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param signed_oid: Required. The Azure Active Directory object ID in GUID
    +     format.
    +    :type signed_oid: str
    +    :param signed_tid: Required. The Azure Active Directory tenant ID in GUID
    +     format
    +    :type signed_tid: str
    +    :param signed_start: Required. The date-time the key is active
    +    :type signed_start: datetime
    +    :param signed_expiry: Required. The date-time the key expires
    +    :type signed_expiry: datetime
    +    :param signed_service: Required. Abbreviation of the Azure Storage service
    +     that accepts the key
    +    :type signed_service: str
    +    :param signed_version: Required. The service version that created the key
    +    :type signed_version: str
    +    :param value: Required. The key as a base64 string
    +    :type value: str
    +    """
    +
    +    _validation = {
    +        'signed_oid': {'required': True},
    +        'signed_tid': {'required': True},
    +        'signed_start': {'required': True},
    +        'signed_expiry': {'required': True},
    +        'signed_service': {'required': True},
    +        'signed_version': {'required': True},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'signed_oid': {'key': 'SignedOid', 'type': 'str', 'xml': {'name': 'SignedOid'}},
    +        'signed_tid': {'key': 'SignedTid', 'type': 'str', 'xml': {'name': 'SignedTid'}},
    +        'signed_start': {'key': 'SignedStart', 'type': 'iso-8601', 'xml': {'name': 'SignedStart'}},
    +        'signed_expiry': {'key': 'SignedExpiry', 'type': 'iso-8601', 'xml': {'name': 'SignedExpiry'}},
    +        'signed_service': {'key': 'SignedService', 'type': 'str', 'xml': {'name': 'SignedService'}},
    +        'signed_version': {'key': 'SignedVersion', 'type': 'str', 'xml': {'name': 'SignedVersion'}},
    +        'value': {'key': 'Value', 'type': 'str', 'xml': {'name': 'Value'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(UserDelegationKey, self).__init__(**kwargs)
    +        self.signed_oid = kwargs.get('signed_oid', None)
    +        self.signed_tid = kwargs.get('signed_tid', None)
    +        self.signed_start = kwargs.get('signed_start', None)
    +        self.signed_expiry = kwargs.get('signed_expiry', None)
    +        self.signed_service = kwargs.get('signed_service', None)
    +        self.signed_version = kwargs.get('signed_version', None)
    +        self.value = kwargs.get('value', None)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/models/_models_py3.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/models/_models_py3.py
    new file mode 100644
    index 000000000000..10738de1a089
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/models/_models_py3.py
    @@ -0,0 +1,1589 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from azure.core.exceptions import HttpResponseError
    +
    +
    +class AccessPolicy(Model):
    +    """An Access policy.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required. the date-time the policy is active
    +    :type start: str
    +    :param expiry: Required. the date-time the policy expires
    +    :type expiry: str
    +    :param permission: Required. the permissions for the acl policy
    +    :type permission: str
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'expiry': {'required': True},
    +        'permission': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'str', 'xml': {'name': 'Start'}},
    +        'expiry': {'key': 'Expiry', 'type': 'str', 'xml': {'name': 'Expiry'}},
    +        'permission': {'key': 'Permission', 'type': 'str', 'xml': {'name': 'Permission'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, start: str, expiry: str, permission: str, **kwargs) -> None:
    +        super(AccessPolicy, self).__init__(**kwargs)
    +        self.start = start
    +        self.expiry = expiry
    +        self.permission = permission
    +
    +
    +class AppendPositionAccessConditions(Model):
    +    """Additional parameters for a set of operations, such as:
    +    AppendBlob_append_block, AppendBlob_append_block_from_url.
    +
    +    :param max_size: Optional conditional header. The max length in bytes
    +     permitted for the append blob. If the Append Block operation would cause
    +     the blob to exceed that limit or if the blob size is already greater than
    +     the value specified in this header, the request will fail with
    +     MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition
    +     Failed).
    +    :type max_size: long
    +    :param append_position: Optional conditional header, used only for the
    +     Append Block operation. A number indicating the byte offset to compare.
    +     Append Block will succeed only if the append position is equal to this
    +     number. If it is not, the request will fail with the
    +     AppendPositionConditionNotMet error (HTTP status code 412 - Precondition
    +     Failed).
    +    :type append_position: long
    +    """
    +
    +    _attribute_map = {
    +        'max_size': {'key': '', 'type': 'long', 'xml': {'name': 'max_size'}},
    +        'append_position': {'key': '', 'type': 'long', 'xml': {'name': 'append_position'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, max_size: int=None, append_position: int=None, **kwargs) -> None:
    +        super(AppendPositionAccessConditions, self).__init__(**kwargs)
    +        self.max_size = max_size
    +        self.append_position = append_position
    +
    +
    +class BlobFlatListSegment(Model):
    +    """BlobFlatListSegment.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param blob_items: Required.
    +    :type blob_items: list[~azure.storage.blob.models.BlobItem]
    +    """
    +
    +    _validation = {
    +        'blob_items': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'blob_items': {'key': 'BlobItems', 'type': '[BlobItem]', 'xml': {'name': 'BlobItems', 'itemsName': 'Blob'}},
    +    }
    +    _xml_map = {
    +        'name': 'Blobs'
    +    }
    +
    +    def __init__(self, *, blob_items, **kwargs) -> None:
    +        super(BlobFlatListSegment, self).__init__(**kwargs)
    +        self.blob_items = blob_items
    +
    +
    +class BlobHierarchyListSegment(Model):
    +    """BlobHierarchyListSegment.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param blob_prefixes:
    +    :type blob_prefixes: list[~azure.storage.blob.models.BlobPrefix]
    +    :param blob_items: Required.
    +    :type blob_items: list[~azure.storage.blob.models.BlobItem]
    +    """
    +
    +    _validation = {
    +        'blob_items': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'blob_prefixes': {'key': 'BlobPrefixes', 'type': '[BlobPrefix]', 'xml': {'name': 'BlobPrefix', 'itemsName': 'BlobPrefix'}},
    +        'blob_items': {'key': 'BlobItems', 'type': '[BlobItem]', 'xml': {'name': 'Blob', 'itemsName': 'Blob'}},
    +    }
    +    _xml_map = {
    +        'name': 'Blobs'
    +    }
    +
    +    def __init__(self, *, blob_items, blob_prefixes=None, **kwargs) -> None:
    +        super(BlobHierarchyListSegment, self).__init__(**kwargs)
    +        self.blob_prefixes = blob_prefixes
    +        self.blob_items = blob_items
    +
    +
    +class BlobHTTPHeaders(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param blob_cache_control: Optional. Sets the blob's cache control. If
    +     specified, this property is stored with the blob and returned with a read
    +     request.
    +    :type blob_cache_control: str
    +    :param blob_content_type: Optional. Sets the blob's content type. If
    +     specified, this property is stored with the blob and returned with a read
    +     request.
    +    :type blob_content_type: str
    +    :param blob_content_md5: Optional. An MD5 hash of the blob content. Note
    +     that this hash is not validated, as the hashes for the individual blocks
    +     were validated when each was uploaded.
    +    :type blob_content_md5: bytearray
    +    :param blob_content_encoding: Optional. Sets the blob's content encoding.
    +     If specified, this property is stored with the blob and returned with a
    +     read request.
    +    :type blob_content_encoding: str
    +    :param blob_content_language: Optional. Set the blob's content language.
    +     If specified, this property is stored with the blob and returned with a
    +     read request.
    +    :type blob_content_language: str
    +    :param blob_content_disposition: Optional. Sets the blob's
    +     Content-Disposition header.
    +    :type blob_content_disposition: str
    +    """
    +
    +    _attribute_map = {
    +        'blob_cache_control': {'key': '', 'type': 'str', 'xml': {'name': 'blob_cache_control'}},
    +        'blob_content_type': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_type'}},
    +        'blob_content_md5': {'key': '', 'type': 'bytearray', 'xml': {'name': 'blob_content_md5'}},
    +        'blob_content_encoding': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_encoding'}},
    +        'blob_content_language': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_language'}},
    +        'blob_content_disposition': {'key': '', 'type': 'str', 'xml': {'name': 'blob_content_disposition'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, blob_cache_control: str=None, blob_content_type: str=None, blob_content_md5: bytearray=None, blob_content_encoding: str=None, blob_content_language: str=None, blob_content_disposition: str=None, **kwargs) -> None:
    +        super(BlobHTTPHeaders, self).__init__(**kwargs)
    +        self.blob_cache_control = blob_cache_control
    +        self.blob_content_type = blob_content_type
    +        self.blob_content_md5 = blob_content_md5
    +        self.blob_content_encoding = blob_content_encoding
    +        self.blob_content_language = blob_content_language
    +        self.blob_content_disposition = blob_content_disposition
    +
    +
    +class BlobItem(Model):
    +    """An Azure Storage blob.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required.
    +    :type name: str
    +    :param deleted: Required.
    +    :type deleted: bool
    +    :param snapshot: Required.
    +    :type snapshot: str
    +    :param properties: Required.
    +    :type properties: ~azure.storage.blob.models.BlobProperties
    +    :param metadata:
    +    :type metadata: ~azure.storage.blob.models.BlobMetadata
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'deleted': {'required': True},
    +        'snapshot': {'required': True},
    +        'properties': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +        'deleted': {'key': 'Deleted', 'type': 'bool', 'xml': {'name': 'Deleted'}},
    +        'snapshot': {'key': 'Snapshot', 'type': 'str', 'xml': {'name': 'Snapshot'}},
    +        'properties': {'key': 'Properties', 'type': 'BlobProperties', 'xml': {'name': 'Properties'}},
    +        'metadata': {'key': 'Metadata', 'type': 'BlobMetadata', 'xml': {'name': 'Metadata'}},
    +    }
    +    _xml_map = {
    +        'name': 'Blob'
    +    }
    +
    +    def __init__(self, *, name: str, deleted: bool, snapshot: str, properties, metadata=None, **kwargs) -> None:
    +        super(BlobItem, self).__init__(**kwargs)
    +        self.name = name
    +        self.deleted = deleted
    +        self.snapshot = snapshot
    +        self.properties = properties
    +        self.metadata = metadata
    +
    +
    +class BlobMetadata(Model):
    +    """BlobMetadata.
    +
    +    :param additional_properties: Unmatched properties from the message are
    +     deserialized this collection
    +    :type additional_properties: dict[str, str]
    +    :param encrypted:
    +    :type encrypted: str
    +    """
    +
    +    _attribute_map = {
    +        'additional_properties': {'key': '', 'type': '{str}', 'xml': {'name': 'additional_properties'}},
    +        'encrypted': {'key': 'Encrypted', 'type': 'str', 'xml': {'name': 'Encrypted', 'attr': True}},
    +    }
    +    _xml_map = {
    +        'name': 'Metadata'
    +    }
    +
    +    def __init__(self, *, additional_properties=None, encrypted: str=None, **kwargs) -> None:
    +        super(BlobMetadata, self).__init__(**kwargs)
    +        self.additional_properties = additional_properties
    +        self.encrypted = encrypted
    +
    +
    +class BlobPrefix(Model):
    +    """BlobPrefix.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required.
    +    :type name: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, name: str, **kwargs) -> None:
    +        super(BlobPrefix, self).__init__(**kwargs)
    +        self.name = name
    +
    +
    +class BlobProperties(Model):
    +    """Properties of a blob.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param creation_time:
    +    :type creation_time: datetime
    +    :param last_modified: Required.
    +    :type last_modified: datetime
    +    :param etag: Required.
    +    :type etag: str
    +    :param content_length: Size in bytes
    +    :type content_length: long
    +    :param content_type:
    +    :type content_type: str
    +    :param content_encoding:
    +    :type content_encoding: str
    +    :param content_language:
    +    :type content_language: str
    +    :param content_md5:
    +    :type content_md5: bytearray
    +    :param content_disposition:
    +    :type content_disposition: str
    +    :param cache_control:
    +    :type cache_control: str
    +    :param blob_sequence_number:
    +    :type blob_sequence_number: long
    +    :param blob_type: Possible values include: 'BlockBlob', 'PageBlob',
    +     'AppendBlob'
    +    :type blob_type: str or ~azure.storage.blob.models.BlobType
    +    :param lease_status: Possible values include: 'locked', 'unlocked'
    +    :type lease_status: str or ~azure.storage.blob.models.LeaseStatusType
    +    :param lease_state: Possible values include: 'available', 'leased',
    +     'expired', 'breaking', 'broken'
    +    :type lease_state: str or ~azure.storage.blob.models.LeaseStateType
    +    :param lease_duration: Possible values include: 'infinite', 'fixed'
    +    :type lease_duration: str or ~azure.storage.blob.models.LeaseDurationType
    +    :param copy_id:
    +    :type copy_id: str
    +    :param copy_status: Possible values include: 'pending', 'success',
    +     'aborted', 'failed'
    +    :type copy_status: str or ~azure.storage.blob.models.CopyStatusType
    +    :param copy_source:
    +    :type copy_source: str
    +    :param copy_progress:
    +    :type copy_progress: str
    +    :param copy_completion_time:
    +    :type copy_completion_time: datetime
    +    :param copy_status_description:
    +    :type copy_status_description: str
    +    :param server_encrypted:
    +    :type server_encrypted: bool
    +    :param incremental_copy:
    +    :type incremental_copy: bool
    +    :param destination_snapshot:
    +    :type destination_snapshot: str
    +    :param deleted_time:
    +    :type deleted_time: datetime
    +    :param remaining_retention_days:
    +    :type remaining_retention_days: int
    +    :param access_tier: Possible values include: 'P4', 'P6', 'P10', 'P15',
    +     'P20', 'P30', 'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +    :type access_tier: str or ~azure.storage.blob.models.AccessTier
    +    :param access_tier_inferred:
    +    :type access_tier_inferred: bool
    +    :param archive_status: Possible values include:
    +     'rehydrate-pending-to-hot', 'rehydrate-pending-to-cool'
    +    :type archive_status: str or ~azure.storage.blob.models.ArchiveStatus
    +    :param customer_provided_key_sha256:
    +    :type customer_provided_key_sha256: str
    +    :param encryption_scope: The name of the encryption scope under which the
    +     blob is encrypted.
    +    :type encryption_scope: str
    +    :param access_tier_change_time:
    +    :type access_tier_change_time: datetime
    +    """
    +
    +    _validation = {
    +        'last_modified': {'required': True},
    +        'etag': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'creation_time': {'key': 'Creation-Time', 'type': 'rfc-1123', 'xml': {'name': 'Creation-Time'}},
    +        'last_modified': {'key': 'Last-Modified', 'type': 'rfc-1123', 'xml': {'name': 'Last-Modified'}},
    +        'etag': {'key': 'Etag', 'type': 'str', 'xml': {'name': 'Etag'}},
    +        'content_length': {'key': 'Content-Length', 'type': 'long', 'xml': {'name': 'Content-Length'}},
    +        'content_type': {'key': 'Content-Type', 'type': 'str', 'xml': {'name': 'Content-Type'}},
    +        'content_encoding': {'key': 'Content-Encoding', 'type': 'str', 'xml': {'name': 'Content-Encoding'}},
    +        'content_language': {'key': 'Content-Language', 'type': 'str', 'xml': {'name': 'Content-Language'}},
    +        'content_md5': {'key': 'Content-MD5', 'type': 'bytearray', 'xml': {'name': 'Content-MD5'}},
    +        'content_disposition': {'key': 'Content-Disposition', 'type': 'str', 'xml': {'name': 'Content-Disposition'}},
    +        'cache_control': {'key': 'Cache-Control', 'type': 'str', 'xml': {'name': 'Cache-Control'}},
    +        'blob_sequence_number': {'key': 'x-ms-blob-sequence-number', 'type': 'long', 'xml': {'name': 'x-ms-blob-sequence-number'}},
    +        'blob_type': {'key': 'BlobType', 'type': 'BlobType', 'xml': {'name': 'BlobType'}},
    +        'lease_status': {'key': 'LeaseStatus', 'type': 'LeaseStatusType', 'xml': {'name': 'LeaseStatus'}},
    +        'lease_state': {'key': 'LeaseState', 'type': 'LeaseStateType', 'xml': {'name': 'LeaseState'}},
    +        'lease_duration': {'key': 'LeaseDuration', 'type': 'LeaseDurationType', 'xml': {'name': 'LeaseDuration'}},
    +        'copy_id': {'key': 'CopyId', 'type': 'str', 'xml': {'name': 'CopyId'}},
    +        'copy_status': {'key': 'CopyStatus', 'type': 'CopyStatusType', 'xml': {'name': 'CopyStatus'}},
    +        'copy_source': {'key': 'CopySource', 'type': 'str', 'xml': {'name': 'CopySource'}},
    +        'copy_progress': {'key': 'CopyProgress', 'type': 'str', 'xml': {'name': 'CopyProgress'}},
    +        'copy_completion_time': {'key': 'CopyCompletionTime', 'type': 'rfc-1123', 'xml': {'name': 'CopyCompletionTime'}},
    +        'copy_status_description': {'key': 'CopyStatusDescription', 'type': 'str', 'xml': {'name': 'CopyStatusDescription'}},
    +        'server_encrypted': {'key': 'ServerEncrypted', 'type': 'bool', 'xml': {'name': 'ServerEncrypted'}},
    +        'incremental_copy': {'key': 'IncrementalCopy', 'type': 'bool', 'xml': {'name': 'IncrementalCopy'}},
    +        'destination_snapshot': {'key': 'DestinationSnapshot', 'type': 'str', 'xml': {'name': 'DestinationSnapshot'}},
    +        'deleted_time': {'key': 'DeletedTime', 'type': 'rfc-1123', 'xml': {'name': 'DeletedTime'}},
    +        'remaining_retention_days': {'key': 'RemainingRetentionDays', 'type': 'int', 'xml': {'name': 'RemainingRetentionDays'}},
    +        'access_tier': {'key': 'AccessTier', 'type': 'str', 'xml': {'name': 'AccessTier'}},
    +        'access_tier_inferred': {'key': 'AccessTierInferred', 'type': 'bool', 'xml': {'name': 'AccessTierInferred'}},
    +        'archive_status': {'key': 'ArchiveStatus', 'type': 'str', 'xml': {'name': 'ArchiveStatus'}},
    +        'customer_provided_key_sha256': {'key': 'CustomerProvidedKeySha256', 'type': 'str', 'xml': {'name': 'CustomerProvidedKeySha256'}},
    +        'encryption_scope': {'key': 'EncryptionScope', 'type': 'str', 'xml': {'name': 'EncryptionScope'}},
    +        'access_tier_change_time': {'key': 'AccessTierChangeTime', 'type': 'rfc-1123', 'xml': {'name': 'AccessTierChangeTime'}},
    +    }
    +    _xml_map = {
    +        'name': 'Properties'
    +    }
    +
    +    def __init__(self, *, last_modified, etag: str, creation_time=None, content_length: int=None, content_type: str=None, content_encoding: str=None, content_language: str=None, content_md5: bytearray=None, content_disposition: str=None, cache_control: str=None, blob_sequence_number: int=None, blob_type=None, lease_status=None, lease_state=None, lease_duration=None, copy_id: str=None, copy_status=None, copy_source: str=None, copy_progress: str=None, copy_completion_time=None, copy_status_description: str=None, server_encrypted: bool=None, incremental_copy: bool=None, destination_snapshot: str=None, deleted_time=None, remaining_retention_days: int=None, access_tier=None, access_tier_inferred: bool=None, archive_status=None, customer_provided_key_sha256: str=None, encryption_scope: str=None, access_tier_change_time=None, **kwargs) -> None:
    +        super(BlobProperties, self).__init__(**kwargs)
    +        self.creation_time = creation_time
    +        self.last_modified = last_modified
    +        self.etag = etag
    +        self.content_length = content_length
    +        self.content_type = content_type
    +        self.content_encoding = content_encoding
    +        self.content_language = content_language
    +        self.content_md5 = content_md5
    +        self.content_disposition = content_disposition
    +        self.cache_control = cache_control
    +        self.blob_sequence_number = blob_sequence_number
    +        self.blob_type = blob_type
    +        self.lease_status = lease_status
    +        self.lease_state = lease_state
    +        self.lease_duration = lease_duration
    +        self.copy_id = copy_id
    +        self.copy_status = copy_status
    +        self.copy_source = copy_source
    +        self.copy_progress = copy_progress
    +        self.copy_completion_time = copy_completion_time
    +        self.copy_status_description = copy_status_description
    +        self.server_encrypted = server_encrypted
    +        self.incremental_copy = incremental_copy
    +        self.destination_snapshot = destination_snapshot
    +        self.deleted_time = deleted_time
    +        self.remaining_retention_days = remaining_retention_days
    +        self.access_tier = access_tier
    +        self.access_tier_inferred = access_tier_inferred
    +        self.archive_status = archive_status
    +        self.customer_provided_key_sha256 = customer_provided_key_sha256
    +        self.encryption_scope = encryption_scope
    +        self.access_tier_change_time = access_tier_change_time
    +
    +
    +class Block(Model):
    +    """Represents a single block in a block blob.  It describes the block's ID and
    +    size.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The base64 encoded block ID.
    +    :type name: str
    +    :param size: Required. The block size in bytes.
    +    :type size: int
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'size': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +        'size': {'key': 'Size', 'type': 'int', 'xml': {'name': 'Size'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, name: str, size: int, **kwargs) -> None:
    +        super(Block, self).__init__(**kwargs)
    +        self.name = name
    +        self.size = size
    +
    +
    +class BlockList(Model):
    +    """BlockList.
    +
    +    :param committed_blocks:
    +    :type committed_blocks: list[~azure.storage.blob.models.Block]
    +    :param uncommitted_blocks:
    +    :type uncommitted_blocks: list[~azure.storage.blob.models.Block]
    +    """
    +
    +    _attribute_map = {
    +        'committed_blocks': {'key': 'CommittedBlocks', 'type': '[Block]', 'xml': {'name': 'CommittedBlocks', 'itemsName': 'Block', 'wrapped': True}},
    +        'uncommitted_blocks': {'key': 'UncommittedBlocks', 'type': '[Block]', 'xml': {'name': 'UncommittedBlocks', 'itemsName': 'Block', 'wrapped': True}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, committed_blocks=None, uncommitted_blocks=None, **kwargs) -> None:
    +        super(BlockList, self).__init__(**kwargs)
    +        self.committed_blocks = committed_blocks
    +        self.uncommitted_blocks = uncommitted_blocks
    +
    +
    +class BlockLookupList(Model):
    +    """BlockLookupList.
    +
    +    :param committed:
    +    :type committed: list[str]
    +    :param uncommitted:
    +    :type uncommitted: list[str]
    +    :param latest:
    +    :type latest: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'committed': {'key': 'Committed', 'type': '[str]', 'xml': {'name': 'Committed', 'itemsName': 'Committed'}},
    +        'uncommitted': {'key': 'Uncommitted', 'type': '[str]', 'xml': {'name': 'Uncommitted', 'itemsName': 'Uncommitted'}},
    +        'latest': {'key': 'Latest', 'type': '[str]', 'xml': {'name': 'Latest', 'itemsName': 'Latest'}},
    +    }
    +    _xml_map = {
    +        'name': 'BlockList'
    +    }
    +
    +    def __init__(self, *, committed=None, uncommitted=None, latest=None, **kwargs) -> None:
    +        super(BlockLookupList, self).__init__(**kwargs)
    +        self.committed = committed
    +        self.uncommitted = uncommitted
    +        self.latest = latest
    +
    +
    +class ClearRange(Model):
    +    """ClearRange.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required.
    +    :type start: long
    +    :param end: Required.
    +    :type end: long
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'end': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'long', 'xml': {'name': 'Start'}},
    +        'end': {'key': 'End', 'type': 'long', 'xml': {'name': 'End'}},
    +    }
    +    _xml_map = {
    +        'name': 'ClearRange'
    +    }
    +
    +    def __init__(self, *, start: int, end: int, **kwargs) -> None:
    +        super(ClearRange, self).__init__(**kwargs)
    +        self.start = start
    +        self.end = end
    +
    +
    +class ContainerCpkScopeInfo(Model):
    +    """Additional parameters for create operation.
    +
    +    :param default_encryption_scope: Optional.  Version 2019-07-07 and later.
    +     Specifies the default encryption scope to set on the container and use for
    +     all future writes.
    +    :type default_encryption_scope: str
    +    :param deny_encryption_scope_override: Optional.  Version 2019-07-07 and
    +     newer.  If true, prevents any request from specifying a different
    +     encryption scope than the scope set on the container.
    +    :type deny_encryption_scope_override: bool
    +    """
    +
    +    _attribute_map = {
    +        'default_encryption_scope': {'key': '', 'type': 'str', 'xml': {'name': 'default_encryption_scope'}},
    +        'deny_encryption_scope_override': {'key': '', 'type': 'bool', 'xml': {'name': 'deny_encryption_scope_override'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, default_encryption_scope: str=None, deny_encryption_scope_override: bool=None, **kwargs) -> None:
    +        super(ContainerCpkScopeInfo, self).__init__(**kwargs)
    +        self.default_encryption_scope = default_encryption_scope
    +        self.deny_encryption_scope_override = deny_encryption_scope_override
    +
    +
    +class ContainerItem(Model):
    +    """An Azure Storage container.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required.
    +    :type name: str
    +    :param properties: Required.
    +    :type properties: ~azure.storage.blob.models.ContainerProperties
    +    :param metadata:
    +    :type metadata: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'properties': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}},
    +        'properties': {'key': 'Properties', 'type': 'ContainerProperties', 'xml': {'name': 'Properties'}},
    +        'metadata': {'key': 'Metadata', 'type': '{str}', 'xml': {'name': 'Metadata'}},
    +    }
    +    _xml_map = {
    +        'name': 'Container'
    +    }
    +
    +    def __init__(self, *, name: str, properties, metadata=None, **kwargs) -> None:
    +        super(ContainerItem, self).__init__(**kwargs)
    +        self.name = name
    +        self.properties = properties
    +        self.metadata = metadata
    +
    +
    +class ContainerProperties(Model):
    +    """Properties of a container.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param last_modified: Required.
    +    :type last_modified: datetime
    +    :param etag: Required.
    +    :type etag: str
    +    :param lease_status: Possible values include: 'locked', 'unlocked'
    +    :type lease_status: str or ~azure.storage.blob.models.LeaseStatusType
    +    :param lease_state: Possible values include: 'available', 'leased',
    +     'expired', 'breaking', 'broken'
    +    :type lease_state: str or ~azure.storage.blob.models.LeaseStateType
    +    :param lease_duration: Possible values include: 'infinite', 'fixed'
    +    :type lease_duration: str or ~azure.storage.blob.models.LeaseDurationType
    +    :param public_access: Possible values include: 'container', 'blob'
    +    :type public_access: str or ~azure.storage.blob.models.PublicAccessType
    +    :param has_immutability_policy:
    +    :type has_immutability_policy: bool
    +    :param has_legal_hold:
    +    :type has_legal_hold: bool
    +    :param default_encryption_scope:
    +    :type default_encryption_scope: str
    +    :param deny_encryption_scope_override:
    +    :type deny_encryption_scope_override: bool
    +    """
    +
    +    _validation = {
    +        'last_modified': {'required': True},
    +        'etag': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'last_modified': {'key': 'Last-Modified', 'type': 'rfc-1123', 'xml': {'name': 'Last-Modified'}},
    +        'etag': {'key': 'Etag', 'type': 'str', 'xml': {'name': 'Etag'}},
    +        'lease_status': {'key': 'LeaseStatus', 'type': 'LeaseStatusType', 'xml': {'name': 'LeaseStatus'}},
    +        'lease_state': {'key': 'LeaseState', 'type': 'LeaseStateType', 'xml': {'name': 'LeaseState'}},
    +        'lease_duration': {'key': 'LeaseDuration', 'type': 'LeaseDurationType', 'xml': {'name': 'LeaseDuration'}},
    +        'public_access': {'key': 'PublicAccess', 'type': 'str', 'xml': {'name': 'PublicAccess'}},
    +        'has_immutability_policy': {'key': 'HasImmutabilityPolicy', 'type': 'bool', 'xml': {'name': 'HasImmutabilityPolicy'}},
    +        'has_legal_hold': {'key': 'HasLegalHold', 'type': 'bool', 'xml': {'name': 'HasLegalHold'}},
    +        'default_encryption_scope': {'key': 'DefaultEncryptionScope', 'type': 'str', 'xml': {'name': 'DefaultEncryptionScope'}},
    +        'deny_encryption_scope_override': {'key': 'DenyEncryptionScopeOverride', 'type': 'bool', 'xml': {'name': 'DenyEncryptionScopeOverride'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, last_modified, etag: str, lease_status=None, lease_state=None, lease_duration=None, public_access=None, has_immutability_policy: bool=None, has_legal_hold: bool=None, default_encryption_scope: str=None, deny_encryption_scope_override: bool=None, **kwargs) -> None:
    +        super(ContainerProperties, self).__init__(**kwargs)
    +        self.last_modified = last_modified
    +        self.etag = etag
    +        self.lease_status = lease_status
    +        self.lease_state = lease_state
    +        self.lease_duration = lease_duration
    +        self.public_access = public_access
    +        self.has_immutability_policy = has_immutability_policy
    +        self.has_legal_hold = has_legal_hold
    +        self.default_encryption_scope = default_encryption_scope
    +        self.deny_encryption_scope_override = deny_encryption_scope_override
    +
    +
    +class CorsRule(Model):
    +    """CORS is an HTTP feature that enables a web application running under one
    +    domain to access resources in another domain. Web browsers implement a
    +    security restriction known as same-origin policy that prevents a web page
    +    from calling APIs in a different domain; CORS provides a secure way to
    +    allow one domain (the origin domain) to call APIs in another domain.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param allowed_origins: Required. The origin domains that are permitted to
    +     make a request against the storage service via CORS. The origin domain is
    +     the domain from which the request originates. Note that the origin must be
    +     an exact case-sensitive match with the origin that the user age sends to
    +     the service. You can also use the wildcard character '*' to allow all
    +     origin domains to make requests via CORS.
    +    :type allowed_origins: str
    +    :param allowed_methods: Required. The methods (HTTP request verbs) that
    +     the origin domain may use for a CORS request. (comma separated)
    +    :type allowed_methods: str
    +    :param allowed_headers: Required. the request headers that the origin
    +     domain may specify on the CORS request.
    +    :type allowed_headers: str
    +    :param exposed_headers: Required. The response headers that may be sent in
    +     the response to the CORS request and exposed by the browser to the request
    +     issuer
    +    :type exposed_headers: str
    +    :param max_age_in_seconds: Required. The maximum amount time that a
    +     browser should cache the preflight OPTIONS request.
    +    :type max_age_in_seconds: int
    +    """
    +
    +    _validation = {
    +        'allowed_origins': {'required': True},
    +        'allowed_methods': {'required': True},
    +        'allowed_headers': {'required': True},
    +        'exposed_headers': {'required': True},
    +        'max_age_in_seconds': {'required': True, 'minimum': 0},
    +    }
    +
    +    _attribute_map = {
    +        'allowed_origins': {'key': 'AllowedOrigins', 'type': 'str', 'xml': {'name': 'AllowedOrigins'}},
    +        'allowed_methods': {'key': 'AllowedMethods', 'type': 'str', 'xml': {'name': 'AllowedMethods'}},
    +        'allowed_headers': {'key': 'AllowedHeaders', 'type': 'str', 'xml': {'name': 'AllowedHeaders'}},
    +        'exposed_headers': {'key': 'ExposedHeaders', 'type': 'str', 'xml': {'name': 'ExposedHeaders'}},
    +        'max_age_in_seconds': {'key': 'MaxAgeInSeconds', 'type': 'int', 'xml': {'name': 'MaxAgeInSeconds'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, allowed_origins: str, allowed_methods: str, allowed_headers: str, exposed_headers: str, max_age_in_seconds: int, **kwargs) -> None:
    +        super(CorsRule, self).__init__(**kwargs)
    +        self.allowed_origins = allowed_origins
    +        self.allowed_methods = allowed_methods
    +        self.allowed_headers = allowed_headers
    +        self.exposed_headers = exposed_headers
    +        self.max_age_in_seconds = max_age_in_seconds
    +
    +
    +class CpkInfo(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param encryption_key: Optional. Specifies the encryption key to use to
    +     encrypt the data provided in the request. If not specified, encryption is
    +     performed with the root account encryption key.  For more information, see
    +     Encryption at Rest for Azure Storage Services.
    +    :type encryption_key: str
    +    :param encryption_key_sha256: The SHA-256 hash of the provided encryption
    +     key. Must be provided if the x-ms-encryption-key header is provided.
    +    :type encryption_key_sha256: str
    +    :param encryption_algorithm: The algorithm used to produce the encryption
    +     key hash. Currently, the only accepted value is "AES256". Must be provided
    +     if the x-ms-encryption-key header is provided. Possible values include:
    +     'AES256'
    +    :type encryption_algorithm: str or
    +     ~azure.storage.blob.models.EncryptionAlgorithmType
    +    """
    +
    +    _attribute_map = {
    +        'encryption_key': {'key': '', 'type': 'str', 'xml': {'name': 'encryption_key'}},
    +        'encryption_key_sha256': {'key': '', 'type': 'str', 'xml': {'name': 'encryption_key_sha256'}},
    +        'encryption_algorithm': {'key': '', 'type': 'EncryptionAlgorithmType', 'xml': {'name': 'encryption_algorithm'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, encryption_key: str=None, encryption_key_sha256: str=None, encryption_algorithm=None, **kwargs) -> None:
    +        super(CpkInfo, self).__init__(**kwargs)
    +        self.encryption_key = encryption_key
    +        self.encryption_key_sha256 = encryption_key_sha256
    +        self.encryption_algorithm = encryption_algorithm
    +
    +
    +class CpkScopeInfo(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param encryption_scope: Optional. Version 2019-07-07 and later.
    +     Specifies the name of the encryption scope to use to encrypt the data
    +     provided in the request. If not specified, encryption is performed with
    +     the default account encryption scope.  For more information, see
    +     Encryption at Rest for Azure Storage Services.
    +    :type encryption_scope: str
    +    """
    +
    +    _attribute_map = {
    +        'encryption_scope': {'key': '', 'type': 'str', 'xml': {'name': 'encryption_scope'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, encryption_scope: str=None, **kwargs) -> None:
    +        super(CpkScopeInfo, self).__init__(**kwargs)
    +        self.encryption_scope = encryption_scope
    +
    +
    +class DataLakeStorageError(Model):
    +    """DataLakeStorageError.
    +
    +    :param error: The service error response object.
    +    :type error: ~azure.storage.blob.models.DataLakeStorageErrorError
    +    """
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'DataLakeStorageErrorError', 'xml': {'name': 'error'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, error=None, **kwargs) -> None:
    +        super(DataLakeStorageError, self).__init__(**kwargs)
    +        self.error = error
    +
    +
    +class DataLakeStorageErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'DataLakeStorageError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'DataLakeStorageError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(DataLakeStorageErrorException, self).__init__(response=response)
    +
    +
    +class DataLakeStorageErrorError(Model):
    +    """The service error response object.
    +
    +    :param code: The service error code.
    +    :type code: str
    +    :param message: The service error message.
    +    :type message: str
    +    """
    +
    +    _attribute_map = {
    +        'code': {'key': 'Code', 'type': 'str', 'xml': {'name': 'Code'}},
    +        'message': {'key': 'Message', 'type': 'str', 'xml': {'name': 'Message'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, code: str=None, message: str=None, **kwargs) -> None:
    +        super(DataLakeStorageErrorError, self).__init__(**kwargs)
    +        self.code = code
    +        self.message = message
    +
    +
    +class DirectoryHttpHeaders(Model):
    +    """Additional parameters for a set of operations, such as: Directory_create,
    +    Directory_rename, Blob_rename.
    +
    +    :param cache_control: Cache control for given resource
    +    :type cache_control: str
    +    :param content_type: Content type for given resource
    +    :type content_type: str
    +    :param content_encoding: Content encoding for given resource
    +    :type content_encoding: str
    +    :param content_language: Content language for given resource
    +    :type content_language: str
    +    :param content_disposition: Content disposition for given resource
    +    :type content_disposition: str
    +    """
    +
    +    _attribute_map = {
    +        'cache_control': {'key': '', 'type': 'str', 'xml': {'name': 'cache_control'}},
    +        'content_type': {'key': '', 'type': 'str', 'xml': {'name': 'content_type'}},
    +        'content_encoding': {'key': '', 'type': 'str', 'xml': {'name': 'content_encoding'}},
    +        'content_language': {'key': '', 'type': 'str', 'xml': {'name': 'content_language'}},
    +        'content_disposition': {'key': '', 'type': 'str', 'xml': {'name': 'content_disposition'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, cache_control: str=None, content_type: str=None, content_encoding: str=None, content_language: str=None, content_disposition: str=None, **kwargs) -> None:
    +        super(DirectoryHttpHeaders, self).__init__(**kwargs)
    +        self.cache_control = cache_control
    +        self.content_type = content_type
    +        self.content_encoding = content_encoding
    +        self.content_language = content_language
    +        self.content_disposition = content_disposition
    +
    +
    +class GeoReplication(Model):
    +    """Geo-Replication information for the Secondary Storage Service.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param status: Required. The status of the secondary location. Possible
    +     values include: 'live', 'bootstrap', 'unavailable'
    +    :type status: str or ~azure.storage.blob.models.GeoReplicationStatusType
    +    :param last_sync_time: Required. A GMT date/time value, to the second. All
    +     primary writes preceding this value are guaranteed to be available for
    +     read operations at the secondary. Primary writes after this point in time
    +     may or may not be available for reads.
    +    :type last_sync_time: datetime
    +    """
    +
    +    _validation = {
    +        'status': {'required': True},
    +        'last_sync_time': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'status': {'key': 'Status', 'type': 'str', 'xml': {'name': 'Status'}},
    +        'last_sync_time': {'key': 'LastSyncTime', 'type': 'rfc-1123', 'xml': {'name': 'LastSyncTime'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, status, last_sync_time, **kwargs) -> None:
    +        super(GeoReplication, self).__init__(**kwargs)
    +        self.status = status
    +        self.last_sync_time = last_sync_time
    +
    +
    +class KeyInfo(Model):
    +    """Key information.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required. The date-time the key is active in ISO 8601 UTC
    +     time
    +    :type start: str
    +    :param expiry: Required. The date-time the key expires in ISO 8601 UTC
    +     time
    +    :type expiry: str
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'expiry': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'str', 'xml': {'name': 'Start'}},
    +        'expiry': {'key': 'Expiry', 'type': 'str', 'xml': {'name': 'Expiry'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, start: str, expiry: str, **kwargs) -> None:
    +        super(KeyInfo, self).__init__(**kwargs)
    +        self.start = start
    +        self.expiry = expiry
    +
    +
    +class LeaseAccessConditions(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param lease_id: If specified, the operation only succeeds if the
    +     resource's lease is active and matches this ID.
    +    :type lease_id: str
    +    """
    +
    +    _attribute_map = {
    +        'lease_id': {'key': '', 'type': 'str', 'xml': {'name': 'lease_id'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, lease_id: str=None, **kwargs) -> None:
    +        super(LeaseAccessConditions, self).__init__(**kwargs)
    +        self.lease_id = lease_id
    +
    +
    +class ListBlobsFlatSegmentResponse(Model):
    +    """An enumeration of blobs.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param service_endpoint: Required.
    +    :type service_endpoint: str
    +    :param container_name: Required.
    +    :type container_name: str
    +    :param prefix:
    +    :type prefix: str
    +    :param marker:
    +    :type marker: str
    +    :param max_results:
    +    :type max_results: int
    +    :param segment: Required.
    +    :type segment: ~azure.storage.blob.models.BlobFlatListSegment
    +    :param next_marker:
    +    :type next_marker: str
    +    """
    +
    +    _validation = {
    +        'service_endpoint': {'required': True},
    +        'container_name': {'required': True},
    +        'segment': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}},
    +        'container_name': {'key': 'ContainerName', 'type': 'str', 'xml': {'name': 'ContainerName', 'attr': True}},
    +        'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}},
    +        'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}},
    +        'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}},
    +        'segment': {'key': 'Segment', 'type': 'BlobFlatListSegment', 'xml': {'name': 'Segment'}},
    +        'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}},
    +    }
    +    _xml_map = {
    +        'name': 'EnumerationResults'
    +    }
    +
    +    def __init__(self, *, service_endpoint: str, container_name: str, segment, prefix: str=None, marker: str=None, max_results: int=None, next_marker: str=None, **kwargs) -> None:
    +        super(ListBlobsFlatSegmentResponse, self).__init__(**kwargs)
    +        self.service_endpoint = service_endpoint
    +        self.container_name = container_name
    +        self.prefix = prefix
    +        self.marker = marker
    +        self.max_results = max_results
    +        self.segment = segment
    +        self.next_marker = next_marker
    +
    +
    +class ListBlobsHierarchySegmentResponse(Model):
    +    """An enumeration of blobs.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param service_endpoint: Required.
    +    :type service_endpoint: str
    +    :param container_name: Required.
    +    :type container_name: str
    +    :param prefix:
    +    :type prefix: str
    +    :param marker:
    +    :type marker: str
    +    :param max_results:
    +    :type max_results: int
    +    :param delimiter:
    +    :type delimiter: str
    +    :param segment: Required.
    +    :type segment: ~azure.storage.blob.models.BlobHierarchyListSegment
    +    :param next_marker:
    +    :type next_marker: str
    +    """
    +
    +    _validation = {
    +        'service_endpoint': {'required': True},
    +        'container_name': {'required': True},
    +        'segment': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}},
    +        'container_name': {'key': 'ContainerName', 'type': 'str', 'xml': {'name': 'ContainerName', 'attr': True}},
    +        'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}},
    +        'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}},
    +        'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}},
    +        'delimiter': {'key': 'Delimiter', 'type': 'str', 'xml': {'name': 'Delimiter'}},
    +        'segment': {'key': 'Segment', 'type': 'BlobHierarchyListSegment', 'xml': {'name': 'Segment'}},
    +        'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}},
    +    }
    +    _xml_map = {
    +        'name': 'EnumerationResults'
    +    }
    +
    +    def __init__(self, *, service_endpoint: str, container_name: str, segment, prefix: str=None, marker: str=None, max_results: int=None, delimiter: str=None, next_marker: str=None, **kwargs) -> None:
    +        super(ListBlobsHierarchySegmentResponse, self).__init__(**kwargs)
    +        self.service_endpoint = service_endpoint
    +        self.container_name = container_name
    +        self.prefix = prefix
    +        self.marker = marker
    +        self.max_results = max_results
    +        self.delimiter = delimiter
    +        self.segment = segment
    +        self.next_marker = next_marker
    +
    +
    +class ListContainersSegmentResponse(Model):
    +    """An enumeration of containers.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param service_endpoint: Required.
    +    :type service_endpoint: str
    +    :param prefix:
    +    :type prefix: str
    +    :param marker:
    +    :type marker: str
    +    :param max_results:
    +    :type max_results: int
    +    :param container_items: Required.
    +    :type container_items: list[~azure.storage.blob.models.ContainerItem]
    +    :param next_marker:
    +    :type next_marker: str
    +    """
    +
    +    _validation = {
    +        'service_endpoint': {'required': True},
    +        'container_items': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}},
    +        'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}},
    +        'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}},
    +        'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}},
    +        'container_items': {'key': 'ContainerItems', 'type': '[ContainerItem]', 'xml': {'name': 'Containers', 'itemsName': 'Containers', 'wrapped': True}},
    +        'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}},
    +    }
    +    _xml_map = {
    +        'name': 'EnumerationResults'
    +    }
    +
    +    def __init__(self, *, service_endpoint: str, container_items, prefix: str=None, marker: str=None, max_results: int=None, next_marker: str=None, **kwargs) -> None:
    +        super(ListContainersSegmentResponse, self).__init__(**kwargs)
    +        self.service_endpoint = service_endpoint
    +        self.prefix = prefix
    +        self.marker = marker
    +        self.max_results = max_results
    +        self.container_items = container_items
    +        self.next_marker = next_marker
    +
    +
    +class Logging(Model):
    +    """Azure Analytics Logging settings.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param version: Required. The version of Storage Analytics to configure.
    +    :type version: str
    +    :param delete: Required. Indicates whether all delete requests should be
    +     logged.
    +    :type delete: bool
    +    :param read: Required. Indicates whether all read requests should be
    +     logged.
    +    :type read: bool
    +    :param write: Required. Indicates whether all write requests should be
    +     logged.
    +    :type write: bool
    +    :param retention_policy: Required.
    +    :type retention_policy: ~azure.storage.blob.models.RetentionPolicy
    +    """
    +
    +    _validation = {
    +        'version': {'required': True},
    +        'delete': {'required': True},
    +        'read': {'required': True},
    +        'write': {'required': True},
    +        'retention_policy': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'version': {'key': 'Version', 'type': 'str', 'xml': {'name': 'Version'}},
    +        'delete': {'key': 'Delete', 'type': 'bool', 'xml': {'name': 'Delete'}},
    +        'read': {'key': 'Read', 'type': 'bool', 'xml': {'name': 'Read'}},
    +        'write': {'key': 'Write', 'type': 'bool', 'xml': {'name': 'Write'}},
    +        'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'RetentionPolicy'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, version: str, delete: bool, read: bool, write: bool, retention_policy, **kwargs) -> None:
    +        super(Logging, self).__init__(**kwargs)
    +        self.version = version
    +        self.delete = delete
    +        self.read = read
    +        self.write = write
    +        self.retention_policy = retention_policy
    +
    +
    +class Metrics(Model):
    +    """a summary of request statistics grouped by API in hour or minute aggregates
    +    for blobs.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param version: The version of Storage Analytics to configure.
    +    :type version: str
    +    :param enabled: Required. Indicates whether metrics are enabled for the
    +     Blob service.
    +    :type enabled: bool
    +    :param include_apis: Indicates whether metrics should generate summary
    +     statistics for called API operations.
    +    :type include_apis: bool
    +    :param retention_policy:
    +    :type retention_policy: ~azure.storage.blob.models.RetentionPolicy
    +    """
    +
    +    _validation = {
    +        'enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'version': {'key': 'Version', 'type': 'str', 'xml': {'name': 'Version'}},
    +        'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}},
    +        'include_apis': {'key': 'IncludeAPIs', 'type': 'bool', 'xml': {'name': 'IncludeAPIs'}},
    +        'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'RetentionPolicy'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, enabled: bool, version: str=None, include_apis: bool=None, retention_policy=None, **kwargs) -> None:
    +        super(Metrics, self).__init__(**kwargs)
    +        self.version = version
    +        self.enabled = enabled
    +        self.include_apis = include_apis
    +        self.retention_policy = retention_policy
    +
    +
    +class ModifiedAccessConditions(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param if_modified_since: Specify this header value to operate only on a
    +     blob if it has been modified since the specified date/time.
    +    :type if_modified_since: datetime
    +    :param if_unmodified_since: Specify this header value to operate only on a
    +     blob if it has not been modified since the specified date/time.
    +    :type if_unmodified_since: datetime
    +    :param if_match: Specify an ETag value to operate only on blobs with a
    +     matching value.
    +    :type if_match: str
    +    :param if_none_match: Specify an ETag value to operate only on blobs
    +     without a matching value.
    +    :type if_none_match: str
    +    """
    +
    +    _attribute_map = {
    +        'if_modified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'if_modified_since'}},
    +        'if_unmodified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'if_unmodified_since'}},
    +        'if_match': {'key': '', 'type': 'str', 'xml': {'name': 'if_match'}},
    +        'if_none_match': {'key': '', 'type': 'str', 'xml': {'name': 'if_none_match'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, if_modified_since=None, if_unmodified_since=None, if_match: str=None, if_none_match: str=None, **kwargs) -> None:
    +        super(ModifiedAccessConditions, self).__init__(**kwargs)
    +        self.if_modified_since = if_modified_since
    +        self.if_unmodified_since = if_unmodified_since
    +        self.if_match = if_match
    +        self.if_none_match = if_none_match
    +
    +
    +class PageList(Model):
    +    """the list of pages.
    +
    +    :param page_range:
    +    :type page_range: list[~azure.storage.blob.models.PageRange]
    +    :param clear_range:
    +    :type clear_range: list[~azure.storage.blob.models.ClearRange]
    +    """
    +
    +    _attribute_map = {
    +        'page_range': {'key': 'PageRange', 'type': '[PageRange]', 'xml': {'name': 'PageRange', 'itemsName': 'PageRange'}},
    +        'clear_range': {'key': 'ClearRange', 'type': '[ClearRange]', 'xml': {'name': 'ClearRange', 'itemsName': 'ClearRange'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, page_range=None, clear_range=None, **kwargs) -> None:
    +        super(PageList, self).__init__(**kwargs)
    +        self.page_range = page_range
    +        self.clear_range = clear_range
    +
    +
    +class PageRange(Model):
    +    """PageRange.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param start: Required.
    +    :type start: long
    +    :param end: Required.
    +    :type end: long
    +    """
    +
    +    _validation = {
    +        'start': {'required': True},
    +        'end': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'start': {'key': 'Start', 'type': 'long', 'xml': {'name': 'Start'}},
    +        'end': {'key': 'End', 'type': 'long', 'xml': {'name': 'End'}},
    +    }
    +    _xml_map = {
    +        'name': 'PageRange'
    +    }
    +
    +    def __init__(self, *, start: int, end: int, **kwargs) -> None:
    +        super(PageRange, self).__init__(**kwargs)
    +        self.start = start
    +        self.end = end
    +
    +
    +class RetentionPolicy(Model):
    +    """the retention policy which determines how long the associated data should
    +    persist.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param enabled: Required. Indicates whether a retention policy is enabled
    +     for the storage service
    +    :type enabled: bool
    +    :param days: Indicates the number of days that metrics or logging or
    +     soft-deleted data should be retained. All data older than this value will
    +     be deleted
    +    :type days: int
    +    """
    +
    +    _validation = {
    +        'enabled': {'required': True},
    +        'days': {'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}},
    +        'days': {'key': 'Days', 'type': 'int', 'xml': {'name': 'Days'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, enabled: bool, days: int=None, **kwargs) -> None:
    +        super(RetentionPolicy, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.days = days
    +
    +
    +class SequenceNumberAccessConditions(Model):
    +    """Additional parameters for a set of operations, such as:
    +    PageBlob_upload_pages, PageBlob_clear_pages,
    +    PageBlob_upload_pages_from_url.
    +
    +    :param if_sequence_number_less_than_or_equal_to: Specify this header value
    +     to operate only on a blob if it has a sequence number less than or equal
    +     to the specified.
    +    :type if_sequence_number_less_than_or_equal_to: long
    +    :param if_sequence_number_less_than: Specify this header value to operate
    +     only on a blob if it has a sequence number less than the specified.
    +    :type if_sequence_number_less_than: long
    +    :param if_sequence_number_equal_to: Specify this header value to operate
    +     only on a blob if it has the specified sequence number.
    +    :type if_sequence_number_equal_to: long
    +    """
    +
    +    _attribute_map = {
    +        'if_sequence_number_less_than_or_equal_to': {'key': '', 'type': 'long', 'xml': {'name': 'if_sequence_number_less_than_or_equal_to'}},
    +        'if_sequence_number_less_than': {'key': '', 'type': 'long', 'xml': {'name': 'if_sequence_number_less_than'}},
    +        'if_sequence_number_equal_to': {'key': '', 'type': 'long', 'xml': {'name': 'if_sequence_number_equal_to'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, if_sequence_number_less_than_or_equal_to: int=None, if_sequence_number_less_than: int=None, if_sequence_number_equal_to: int=None, **kwargs) -> None:
    +        super(SequenceNumberAccessConditions, self).__init__(**kwargs)
    +        self.if_sequence_number_less_than_or_equal_to = if_sequence_number_less_than_or_equal_to
    +        self.if_sequence_number_less_than = if_sequence_number_less_than
    +        self.if_sequence_number_equal_to = if_sequence_number_equal_to
    +
    +
    +class SignedIdentifier(Model):
    +    """signed identifier.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param id: Required. a unique id
    +    :type id: str
    +    :param access_policy:
    +    :type access_policy: ~azure.storage.blob.models.AccessPolicy
    +    """
    +
    +    _validation = {
    +        'id': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'Id', 'type': 'str', 'xml': {'name': 'Id'}},
    +        'access_policy': {'key': 'AccessPolicy', 'type': 'AccessPolicy', 'xml': {'name': 'AccessPolicy'}},
    +    }
    +    _xml_map = {
    +        'name': 'SignedIdentifier'
    +    }
    +
    +    def __init__(self, *, id: str, access_policy=None, **kwargs) -> None:
    +        super(SignedIdentifier, self).__init__(**kwargs)
    +        self.id = id
    +        self.access_policy = access_policy
    +
    +
    +class SourceModifiedAccessConditions(Model):
    +    """Additional parameters for a set of operations.
    +
    +    :param source_if_modified_since: Specify this header value to operate only
    +     on a blob if it has been modified since the specified date/time.
    +    :type source_if_modified_since: datetime
    +    :param source_if_unmodified_since: Specify this header value to operate
    +     only on a blob if it has not been modified since the specified date/time.
    +    :type source_if_unmodified_since: datetime
    +    :param source_if_match: Specify an ETag value to operate only on blobs
    +     with a matching value.
    +    :type source_if_match: str
    +    :param source_if_none_match: Specify an ETag value to operate only on
    +     blobs without a matching value.
    +    :type source_if_none_match: str
    +    """
    +
    +    _attribute_map = {
    +        'source_if_modified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'source_if_modified_since'}},
    +        'source_if_unmodified_since': {'key': '', 'type': 'rfc-1123', 'xml': {'name': 'source_if_unmodified_since'}},
    +        'source_if_match': {'key': '', 'type': 'str', 'xml': {'name': 'source_if_match'}},
    +        'source_if_none_match': {'key': '', 'type': 'str', 'xml': {'name': 'source_if_none_match'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, source_if_modified_since=None, source_if_unmodified_since=None, source_if_match: str=None, source_if_none_match: str=None, **kwargs) -> None:
    +        super(SourceModifiedAccessConditions, self).__init__(**kwargs)
    +        self.source_if_modified_since = source_if_modified_since
    +        self.source_if_unmodified_since = source_if_unmodified_since
    +        self.source_if_match = source_if_match
    +        self.source_if_none_match = source_if_none_match
    +
    +
    +class StaticWebsite(Model):
    +    """The properties that enable an account to host a static website.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param enabled: Required. Indicates whether this account is hosting a
    +     static website
    +    :type enabled: bool
    +    :param index_document: The default name of the index page under each
    +     directory
    +    :type index_document: str
    +    :param error_document404_path: The absolute path of the custom 404 page
    +    :type error_document404_path: str
    +    """
    +
    +    _validation = {
    +        'enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}},
    +        'index_document': {'key': 'IndexDocument', 'type': 'str', 'xml': {'name': 'IndexDocument'}},
    +        'error_document404_path': {'key': 'ErrorDocument404Path', 'type': 'str', 'xml': {'name': 'ErrorDocument404Path'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, enabled: bool, index_document: str=None, error_document404_path: str=None, **kwargs) -> None:
    +        super(StaticWebsite, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.index_document = index_document
    +        self.error_document404_path = error_document404_path
    +
    +
    +class StorageError(Model):
    +    """StorageError.
    +
    +    :param message:
    +    :type message: str
    +    """
    +
    +    _attribute_map = {
    +        'message': {'key': 'Message', 'type': 'str', 'xml': {'name': 'Message'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, message: str=None, **kwargs) -> None:
    +        super(StorageError, self).__init__(**kwargs)
    +        self.message = message
    +
    +
    +class StorageErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'StorageError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'StorageError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(StorageErrorException, self).__init__(response=response)
    +
    +
    +class StorageServiceProperties(Model):
    +    """Storage Service Properties.
    +
    +    :param logging:
    +    :type logging: ~azure.storage.blob.models.Logging
    +    :param hour_metrics:
    +    :type hour_metrics: ~azure.storage.blob.models.Metrics
    +    :param minute_metrics:
    +    :type minute_metrics: ~azure.storage.blob.models.Metrics
    +    :param cors: The set of CORS rules.
    +    :type cors: list[~azure.storage.blob.models.CorsRule]
    +    :param default_service_version: The default version to use for requests to
    +     the Blob service if an incoming request's version is not specified.
    +     Possible values include version 2008-10-27 and all more recent versions
    +    :type default_service_version: str
    +    :param delete_retention_policy:
    +    :type delete_retention_policy: ~azure.storage.blob.models.RetentionPolicy
    +    :param static_website:
    +    :type static_website: ~azure.storage.blob.models.StaticWebsite
    +    """
    +
    +    _attribute_map = {
    +        'logging': {'key': 'Logging', 'type': 'Logging', 'xml': {'name': 'Logging'}},
    +        'hour_metrics': {'key': 'HourMetrics', 'type': 'Metrics', 'xml': {'name': 'HourMetrics'}},
    +        'minute_metrics': {'key': 'MinuteMetrics', 'type': 'Metrics', 'xml': {'name': 'MinuteMetrics'}},
    +        'cors': {'key': 'Cors', 'type': '[CorsRule]', 'xml': {'name': 'Cors', 'itemsName': 'CorsRule', 'wrapped': True}},
    +        'default_service_version': {'key': 'DefaultServiceVersion', 'type': 'str', 'xml': {'name': 'DefaultServiceVersion'}},
    +        'delete_retention_policy': {'key': 'DeleteRetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'DeleteRetentionPolicy'}},
    +        'static_website': {'key': 'StaticWebsite', 'type': 'StaticWebsite', 'xml': {'name': 'StaticWebsite'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, logging=None, hour_metrics=None, minute_metrics=None, cors=None, default_service_version: str=None, delete_retention_policy=None, static_website=None, **kwargs) -> None:
    +        super(StorageServiceProperties, self).__init__(**kwargs)
    +        self.logging = logging
    +        self.hour_metrics = hour_metrics
    +        self.minute_metrics = minute_metrics
    +        self.cors = cors
    +        self.default_service_version = default_service_version
    +        self.delete_retention_policy = delete_retention_policy
    +        self.static_website = static_website
    +
    +
    +class StorageServiceStats(Model):
    +    """Stats for the storage service.
    +
    +    :param geo_replication:
    +    :type geo_replication: ~azure.storage.blob.models.GeoReplication
    +    """
    +
    +    _attribute_map = {
    +        'geo_replication': {'key': 'GeoReplication', 'type': 'GeoReplication', 'xml': {'name': 'GeoReplication'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, geo_replication=None, **kwargs) -> None:
    +        super(StorageServiceStats, self).__init__(**kwargs)
    +        self.geo_replication = geo_replication
    +
    +
    +class UserDelegationKey(Model):
    +    """A user delegation key.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param signed_oid: Required. The Azure Active Directory object ID in GUID
    +     format.
    +    :type signed_oid: str
    +    :param signed_tid: Required. The Azure Active Directory tenant ID in GUID
    +     format
    +    :type signed_tid: str
    +    :param signed_start: Required. The date-time the key is active
    +    :type signed_start: datetime
    +    :param signed_expiry: Required. The date-time the key expires
    +    :type signed_expiry: datetime
    +    :param signed_service: Required. Abbreviation of the Azure Storage service
    +     that accepts the key
    +    :type signed_service: str
    +    :param signed_version: Required. The service version that created the key
    +    :type signed_version: str
    +    :param value: Required. The key as a base64 string
    +    :type value: str
    +    """
    +
    +    _validation = {
    +        'signed_oid': {'required': True},
    +        'signed_tid': {'required': True},
    +        'signed_start': {'required': True},
    +        'signed_expiry': {'required': True},
    +        'signed_service': {'required': True},
    +        'signed_version': {'required': True},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'signed_oid': {'key': 'SignedOid', 'type': 'str', 'xml': {'name': 'SignedOid'}},
    +        'signed_tid': {'key': 'SignedTid', 'type': 'str', 'xml': {'name': 'SignedTid'}},
    +        'signed_start': {'key': 'SignedStart', 'type': 'iso-8601', 'xml': {'name': 'SignedStart'}},
    +        'signed_expiry': {'key': 'SignedExpiry', 'type': 'iso-8601', 'xml': {'name': 'SignedExpiry'}},
    +        'signed_service': {'key': 'SignedService', 'type': 'str', 'xml': {'name': 'SignedService'}},
    +        'signed_version': {'key': 'SignedVersion', 'type': 'str', 'xml': {'name': 'SignedVersion'}},
    +        'value': {'key': 'Value', 'type': 'str', 'xml': {'name': 'Value'}},
    +    }
    +    _xml_map = {
    +    }
    +
    +    def __init__(self, *, signed_oid: str, signed_tid: str, signed_start, signed_expiry, signed_service: str, signed_version: str, value: str, **kwargs) -> None:
    +        super(UserDelegationKey, self).__init__(**kwargs)
    +        self.signed_oid = signed_oid
    +        self.signed_tid = signed_tid
    +        self.signed_start = signed_start
    +        self.signed_expiry = signed_expiry
    +        self.signed_service = signed_service
    +        self.signed_version = signed_version
    +        self.value = value
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/__init__.py
    new file mode 100644
    index 000000000000..1ea045334401
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/__init__.py
    @@ -0,0 +1,28 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._service_operations import ServiceOperations
    +from ._container_operations import ContainerOperations
    +from ._directory_operations import DirectoryOperations
    +from ._blob_operations import BlobOperations
    +from ._page_blob_operations import PageBlobOperations
    +from ._append_blob_operations import AppendBlobOperations
    +from ._block_blob_operations import BlockBlobOperations
    +
    +__all__ = [
    +    'ServiceOperations',
    +    'ContainerOperations',
    +    'DirectoryOperations',
    +    'BlobOperations',
    +    'PageBlobOperations',
    +    'AppendBlobOperations',
    +    'BlockBlobOperations',
    +]
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_append_blob_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_append_blob_operations.py
    new file mode 100644
    index 000000000000..58948c64d126
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_append_blob_operations.py
    @@ -0,0 +1,563 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class AppendBlobOperations(object):
    +    """AppendBlobOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_blob_type: Specifies the type of blob to create: block blob, page blob, or append blob. Constant value: "AppendBlob".
    +    :ivar comp: . Constant value: "appendblock".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_blob_type = "AppendBlob"
    +        self.comp = "appendblock"
    +
    +    def create(self, content_length, timeout=None, metadata=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Create Append Blob operation creates a new append blob.
    +
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-blob-type'] = self._serialize.header("self.x_ms_blob_type", self.x_ms_blob_type, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def append_block(self, body, content_length, timeout=None, transactional_content_md5=None, transactional_content_crc64=None, request_id=None, lease_access_conditions=None, append_position_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Append Block operation commits a new block of data to the end of an
    +        existing append blob. The Append Block operation is permitted only if
    +        the blob was created with x-ms-blob-type set to AppendBlob. Append
    +        Block is supported only on version 2015-02-21 version or later.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param append_position_access_conditions: Additional parameters for
    +         the operation
    +        :type append_position_access_conditions:
    +         ~azure.storage.blob.models.AppendPositionAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        max_size = None
    +        if append_position_access_conditions is not None:
    +            max_size = append_position_access_conditions.max_size
    +        append_position = None
    +        if append_position_access_conditions is not None:
    +            append_position = append_position_access_conditions.append_position
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.append_block.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("self.comp", self.comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if max_size is not None:
    +            header_parameters['x-ms-blob-condition-maxsize'] = self._serialize.header("max_size", max_size, 'long')
    +        if append_position is not None:
    +            header_parameters['x-ms-blob-condition-appendpos'] = self._serialize.header("append_position", append_position, 'long')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-append-offset': self._deserialize('str', response.headers.get('x-ms-blob-append-offset')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    append_block.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def append_block_from_url(self, source_url, content_length, source_range=None, source_content_md5=None, source_contentcrc64=None, timeout=None, transactional_content_md5=None, request_id=None, cpk_info=None, cpk_scope_info=None, lease_access_conditions=None, append_position_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, cls=None, **kwargs):
    +        """The Append Block operation commits a new block of data to the end of an
    +        existing append blob where the contents are read from a source url. The
    +        Append Block operation is permitted only if the blob was created with
    +        x-ms-blob-type set to AppendBlob. Append Block is supported only on
    +        version 2015-02-21 version or later.
    +
    +        :param source_url: Specify a URL to the copy source.
    +        :type source_url: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param source_range: Bytes of source data in the specified range.
    +        :type source_range: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_contentcrc64: Specify the crc64 calculated for the range
    +         of bytes that must be read from the copy source.
    +        :type source_contentcrc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param append_position_access_conditions: Additional parameters for
    +         the operation
    +        :type append_position_access_conditions:
    +         ~azure.storage.blob.models.AppendPositionAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        max_size = None
    +        if append_position_access_conditions is not None:
    +            max_size = append_position_access_conditions.max_size
    +        append_position = None
    +        if append_position_access_conditions is not None:
    +            append_position = append_position_access_conditions.append_position
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        # Construct URL
    +        url = self.append_block_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("self.comp", self.comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("source_url", source_url, 'str')
    +        if source_range is not None:
    +            header_parameters['x-ms-source-range'] = self._serialize.header("source_range", source_range, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        if source_contentcrc64 is not None:
    +            header_parameters['x-ms-source-content-crc64'] = self._serialize.header("source_contentcrc64", source_contentcrc64, 'bytearray')
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if max_size is not None:
    +            header_parameters['x-ms-blob-condition-maxsize'] = self._serialize.header("max_size", max_size, 'long')
    +        if append_position is not None:
    +            header_parameters['x-ms-blob-condition-appendpos'] = self._serialize.header("append_position", append_position, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-append-offset': self._deserialize('str', response.headers.get('x-ms-blob-append-offset')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    append_block_from_url.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_blob_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_blob_operations.py
    new file mode 100644
    index 000000000000..3927498cf07a
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_blob_operations.py
    @@ -0,0 +1,2442 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class BlobOperations(object):
    +    """BlobOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_requires_sync: . Constant value: "true".
    +    :ivar x_ms_copy_action: . Constant value: "abort".
    +    :ivar restype: . Constant value: "account".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_requires_sync = "true"
    +        self.x_ms_copy_action = "abort"
    +        self.restype = "account"
    +
    +    def download(self, snapshot=None, timeout=None, range=None, range_get_content_md5=None, range_get_content_crc64=None, request_id=None, lease_access_conditions=None, cpk_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Download operation reads or downloads a blob from the system,
    +        including its metadata and properties. You can also call Download to
    +        read a snapshot.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param range_get_content_md5: When set to true and specified together
    +         with the Range, the service returns the MD5 hash for the range, as
    +         long as the range is less than or equal to 4 MB in size.
    +        :type range_get_content_md5: bool
    +        :param range_get_content_crc64: When set to true and specified
    +         together with the Range, the service returns the CRC64 hash for the
    +         range, as long as the range is less than or equal to 4 MB in size.
    +        :type range_get_content_crc64: bool
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: object or the result of cls(response)
    +        :rtype: Generator
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.download.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        if range_get_content_md5 is not None:
    +            header_parameters['x-ms-range-get-content-md5'] = self._serialize.header("range_get_content_md5", range_get_content_md5, 'bool')
    +        if range_get_content_crc64 is not None:
    +            header_parameters['x-ms-range-get-content-crc64'] = self._serialize.header("range_get_content_crc64", range_get_content_crc64, 'bool')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=True, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200, 206]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = response.stream_download(self._client._pipeline)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'Content-Range': self._deserialize('str', response.headers.get('Content-Range')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'Content-Encoding': self._deserialize('str', response.headers.get('Content-Encoding')),
    +                'Cache-Control': self._deserialize('str', response.headers.get('Cache-Control')),
    +                'Content-Disposition': self._deserialize('str', response.headers.get('Content-Disposition')),
    +                'Content-Language': self._deserialize('str', response.headers.get('Content-Language')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-blob-type': self._deserialize(models.BlobType, response.headers.get('x-ms-blob-type')),
    +                'x-ms-copy-completion-time': self._deserialize('rfc-1123', response.headers.get('x-ms-copy-completion-time')),
    +                'x-ms-copy-status-description': self._deserialize('str', response.headers.get('x-ms-copy-status-description')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-progress': self._deserialize('str', response.headers.get('x-ms-copy-progress')),
    +                'x-ms-copy-source': self._deserialize('str', response.headers.get('x-ms-copy-source')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Accept-Ranges': self._deserialize('str', response.headers.get('Accept-Ranges')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-blob-content-md5': self._deserialize('bytearray', response.headers.get('x-ms-blob-content-md5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +        if response.status_code == 206:
    +            deserialized = response.stream_download(self._client._pipeline)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'Content-Range': self._deserialize('str', response.headers.get('Content-Range')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'Content-Encoding': self._deserialize('str', response.headers.get('Content-Encoding')),
    +                'Cache-Control': self._deserialize('str', response.headers.get('Cache-Control')),
    +                'Content-Disposition': self._deserialize('str', response.headers.get('Content-Disposition')),
    +                'Content-Language': self._deserialize('str', response.headers.get('Content-Language')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-blob-type': self._deserialize(models.BlobType, response.headers.get('x-ms-blob-type')),
    +                'x-ms-copy-completion-time': self._deserialize('rfc-1123', response.headers.get('x-ms-copy-completion-time')),
    +                'x-ms-copy-status-description': self._deserialize('str', response.headers.get('x-ms-copy-status-description')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-progress': self._deserialize('str', response.headers.get('x-ms-copy-progress')),
    +                'x-ms-copy-source': self._deserialize('str', response.headers.get('x-ms-copy-source')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Accept-Ranges': self._deserialize('str', response.headers.get('Accept-Ranges')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-blob-content-md5': self._deserialize('bytearray', response.headers.get('x-ms-blob-content-md5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    download.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def get_properties(self, snapshot=None, timeout=None, request_id=None, lease_access_conditions=None, cpk_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Get Properties operation returns all user-defined metadata,
    +        standard HTTP properties, and system properties for the blob. It does
    +        not return the content of the blob.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.get_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.head(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-creation-time': self._deserialize('rfc-1123', response.headers.get('x-ms-creation-time')),
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'x-ms-blob-type': self._deserialize(models.BlobType, response.headers.get('x-ms-blob-type')),
    +                'x-ms-copy-completion-time': self._deserialize('rfc-1123', response.headers.get('x-ms-copy-completion-time')),
    +                'x-ms-copy-status-description': self._deserialize('str', response.headers.get('x-ms-copy-status-description')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-progress': self._deserialize('str', response.headers.get('x-ms-copy-progress')),
    +                'x-ms-copy-source': self._deserialize('str', response.headers.get('x-ms-copy-source')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-incremental-copy': self._deserialize('bool', response.headers.get('x-ms-incremental-copy')),
    +                'x-ms-copy-destination-snapshot': self._deserialize('str', response.headers.get('x-ms-copy-destination-snapshot')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'Content-Encoding': self._deserialize('str', response.headers.get('Content-Encoding')),
    +                'Content-Disposition': self._deserialize('str', response.headers.get('Content-Disposition')),
    +                'Content-Language': self._deserialize('str', response.headers.get('Content-Language')),
    +                'Cache-Control': self._deserialize('str', response.headers.get('Cache-Control')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'Accept-Ranges': self._deserialize('str', response.headers.get('Accept-Ranges')),
    +                'x-ms-blob-committed-block-count': self._deserialize('int', response.headers.get('x-ms-blob-committed-block-count')),
    +                'x-ms-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-access-tier': self._deserialize('str', response.headers.get('x-ms-access-tier')),
    +                'x-ms-access-tier-inferred': self._deserialize('bool', response.headers.get('x-ms-access-tier-inferred')),
    +                'x-ms-archive-status': self._deserialize('str', response.headers.get('x-ms-archive-status')),
    +                'x-ms-access-tier-change-time': self._deserialize('rfc-1123', response.headers.get('x-ms-access-tier-change-time')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_properties.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def delete(self, snapshot=None, timeout=None, delete_snapshots=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """If the storage account's soft delete feature is disabled then, when a
    +        blob is deleted, it is permanently removed from the storage account. If
    +        the storage account's soft delete feature is enabled, then, when a blob
    +        is deleted, it is marked for deletion and becomes inaccessible
    +        immediately. However, the blob service retains the blob or snapshot for
    +        the number of days specified by the DeleteRetentionPolicy section of
    +        [Storage service properties] (Set-Blob-Service-Properties.md). After
    +        the specified number of days has passed, the blob's data is permanently
    +        removed from the storage account. Note that you continue to be charged
    +        for the soft-deleted blob's storage until it is permanently removed.
    +        Use the List Blobs API and specify the "include=deleted" query
    +        parameter to discover which blobs and snapshots have been soft deleted.
    +        You can then use the Undelete Blob API to restore a soft-deleted blob.
    +        All other operations on a soft-deleted blob or snapshot causes the
    +        service to return an HTTP status code of 404 (ResourceNotFound).
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param delete_snapshots: Required if the blob has associated
    +         snapshots. Specify one of the following two options: include: Delete
    +         the base blob and all of its snapshots. only: Delete only the blob's
    +         snapshots and not the blob itself. Possible values include: 'include',
    +         'only'
    +        :type delete_snapshots: str or
    +         ~azure.storage.blob.models.DeleteSnapshotsOptionType
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if delete_snapshots is not None:
    +            header_parameters['x-ms-delete-snapshots'] = self._serialize.header("delete_snapshots", delete_snapshots, 'DeleteSnapshotsOptionType')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    delete.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def set_access_control(self, timeout=None, owner=None, group=None, posix_permissions=None, posix_acl=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Set the owner, group, permissions, or access control list for a blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param owner: Optional. The owner of the blob or directory.
    +        :type owner: str
    +        :param group: Optional. The owning group of the blob or directory.
    +        :type group: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_acl: Sets POSIX access control rights on files and
    +         directories. The value is a comma-separated list of access control
    +         entries. Each access control entry (ACE) consists of a scope, a type,
    +         a user or group identifier, and permissions in the format
    +         "[scope:][type]:[id]:[permissions]".
    +        :type posix_acl: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "setAccessControl"
    +
    +        # Construct URL
    +        url = self.set_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if owner is not None:
    +            header_parameters['x-ms-owner'] = self._serialize.header("owner", owner, 'str')
    +        if group is not None:
    +            header_parameters['x-ms-group'] = self._serialize.header("group", group, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_acl is not None:
    +            header_parameters['x-ms-acl'] = self._serialize.header("posix_acl", posix_acl, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_access_control.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def get_access_control(self, timeout=None, upn=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Get the owner, group, permissions, or access control list for a blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param upn: Optional. Valid only when Hierarchical Namespace is
    +         enabled for the account. If "true", the identity values returned in
    +         the x-ms-owner, x-ms-group, and x-ms-acl response headers will be
    +         transformed from Azure Active Directory Object IDs to User Principal
    +         Names.  If "false", the values will be returned as Azure Active
    +         Directory Object IDs. The default value is false.
    +        :type upn: bool
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "getAccessControl"
    +
    +        # Construct URL
    +        url = self.get_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if upn is not None:
    +            query_parameters['upn'] = self._serialize.query("upn", upn, 'bool')
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.head(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-owner': self._deserialize('str', response.headers.get('x-ms-owner')),
    +                'x-ms-group': self._deserialize('str', response.headers.get('x-ms-group')),
    +                'x-ms-permissions': self._deserialize('str', response.headers.get('x-ms-permissions')),
    +                'x-ms-acl': self._deserialize('str', response.headers.get('x-ms-acl')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_access_control.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def rename(self, rename_source, timeout=None, path_rename_mode=None, directory_properties=None, posix_permissions=None, posix_umask=None, source_lease_id=None, request_id=None, directory_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, cls=None, **kwargs):
    +        """Rename a blob/file.  By default, the destination is overwritten and if
    +        the destination already exists and has a lease the lease is broken.
    +        This operation supports conditional HTTP requests.  For more
    +        information, see [Specifying Conditional Headers for Blob Service
    +        Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).
    +        To fail if the destination already exists, use a conditional request
    +        with If-None-Match: "*".
    +
    +        :param rename_source: The file or directory to be renamed. The value
    +         must have the following format: "/{filesysystem}/{path}".  If
    +         "x-ms-properties" is specified, the properties will overwrite the
    +         existing properties; otherwise, the existing properties will be
    +         preserved.
    +        :type rename_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param path_rename_mode: Determines the behavior of the rename
    +         operation. Possible values include: 'legacy', 'posix'
    +        :type path_rename_mode: str or
    +         ~azure.storage.blob.models.PathRenameMode
    +        :param directory_properties: Optional.  User-defined properties to be
    +         stored with the file or directory, in the format of a comma-separated
    +         list of name and value pairs "n1=v1, n2=v2, ...", where each value is
    +         base64 encoded.
    +        :type directory_properties: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_umask: Only valid if Hierarchical Namespace is enabled
    +         for the account. This umask restricts permission settings for file and
    +         directory, and will only be applied when default Acl does not exist in
    +         parent directory. If the umask bit has set, it means that the
    +         corresponding permission will be disabled. Otherwise the corresponding
    +         permission will be determined by the permission. A 4-digit octal
    +         notation (e.g. 0022) is supported here. If no umask was specified, a
    +         default umask - 0027 will be used.
    +        :type posix_umask: str
    +        :param source_lease_id: A lease ID for the source path. If specified,
    +         the source path must have an active lease and the leaase ID must
    +         match.
    +        :type source_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param directory_http_headers: Additional parameters for the operation
    +        :type directory_http_headers:
    +         ~azure.storage.blob.models.DirectoryHttpHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        cache_control = None
    +        if directory_http_headers is not None:
    +            cache_control = directory_http_headers.cache_control
    +        content_type = None
    +        if directory_http_headers is not None:
    +            content_type = directory_http_headers.content_type
    +        content_encoding = None
    +        if directory_http_headers is not None:
    +            content_encoding = directory_http_headers.content_encoding
    +        content_language = None
    +        if directory_http_headers is not None:
    +            content_language = directory_http_headers.content_language
    +        content_disposition = None
    +        if directory_http_headers is not None:
    +            content_disposition = directory_http_headers.content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        # Construct URL
    +        url = self.rename.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if path_rename_mode is not None:
    +            query_parameters['mode'] = self._serialize.query("path_rename_mode", path_rename_mode, 'PathRenameMode')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-rename-source'] = self._serialize.header("rename_source", rename_source, 'str')
    +        if directory_properties is not None:
    +            header_parameters['x-ms-properties'] = self._serialize.header("directory_properties", directory_properties, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_umask is not None:
    +            header_parameters['x-ms-umask'] = self._serialize.header("posix_umask", posix_umask, 'str')
    +        if source_lease_id is not None:
    +            header_parameters['x-ms-source-lease-id'] = self._serialize.header("source_lease_id", source_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if cache_control is not None:
    +            header_parameters['x-ms-cache-control'] = self._serialize.header("cache_control", cache_control, 'str')
    +        if content_type is not None:
    +            header_parameters['x-ms-content-type'] = self._serialize.header("content_type", content_type, 'str')
    +        if content_encoding is not None:
    +            header_parameters['x-ms-content-encoding'] = self._serialize.header("content_encoding", content_encoding, 'str')
    +        if content_language is not None:
    +            header_parameters['x-ms-content-language'] = self._serialize.header("content_language", content_language, 'str')
    +        if content_disposition is not None:
    +            header_parameters['x-ms-content-disposition'] = self._serialize.header("content_disposition", content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    rename.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def undelete(self, timeout=None, request_id=None, cls=None, **kwargs):
    +        """Undelete a blob that was previously soft deleted.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "undelete"
    +
    +        # Construct URL
    +        url = self.undelete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    undelete.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def set_http_headers(self, timeout=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Set HTTP Headers operation sets system properties on the blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.set_http_headers.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_http_headers.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def set_metadata(self, timeout=None, metadata=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Set Blob Metadata operation sets user-defined metadata for the
    +        specified blob as one or more name-value pairs.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "metadata"
    +
    +        # Construct URL
    +        url = self.set_metadata.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_metadata.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def acquire_lease(self, timeout=None, duration=None, proposed_lease_id=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param duration: Specifies the duration of the lease, in seconds, or
    +         negative one (-1) for a lease that never expires. A non-infinite lease
    +         can be between 15 and 60 seconds. A lease duration cannot be changed
    +         using renew or change.
    +        :type duration: int
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "acquire"
    +
    +        # Construct URL
    +        url = self.acquire_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if duration is not None:
    +            header_parameters['x-ms-lease-duration'] = self._serialize.header("duration", duration, 'int')
    +        if proposed_lease_id is not None:
    +            header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    acquire_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def release_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "release"
    +
    +        # Construct URL
    +        url = self.release_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    release_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def renew_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "renew"
    +
    +        # Construct URL
    +        url = self.renew_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    renew_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def change_lease(self, lease_id, proposed_lease_id, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "change"
    +
    +        # Construct URL
    +        url = self.change_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    change_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def break_lease(self, timeout=None, break_period=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] The Lease Blob operation establishes and manages a lock on a
    +        blob for write and delete operations.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param break_period: For a break operation, proposed duration the
    +         lease should continue before it is broken, in seconds, between 0 and
    +         60. This break period is only used if it is shorter than the time
    +         remaining on the lease. If longer, the time remaining on the lease is
    +         used. A new lease will not be available before the break period has
    +         expired, but the lease may be held for longer than the break period.
    +         If this header does not appear with a break operation, a
    +         fixed-duration lease breaks after the remaining lease period elapses,
    +         and an infinite lease breaks immediately.
    +        :type break_period: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "lease"
    +        action = "break"
    +
    +        # Construct URL
    +        url = self.break_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if break_period is not None:
    +            header_parameters['x-ms-lease-break-period'] = self._serialize.header("break_period", break_period, 'int')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-time': self._deserialize('int', response.headers.get('x-ms-lease-time')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    break_lease.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def create_snapshot(self, timeout=None, metadata=None, request_id=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """The Create Snapshot operation creates a read-only snapshot of a blob.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "snapshot"
    +
    +        # Construct URL
    +        url = self.create_snapshot.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-snapshot': self._deserialize('str', response.headers.get('x-ms-snapshot')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create_snapshot.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def start_copy_from_url(self, copy_source, timeout=None, metadata=None, tier=None, rehydrate_priority=None, request_id=None, source_modified_access_conditions=None, modified_access_conditions=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """The Start Copy From URL operation copies a blob or an internet resource
    +        to a new blob.
    +
    +        :param copy_source: Specifies the name of the source page blob
    +         snapshot. This value is a URL of up to 2 KB in length that specifies a
    +         page blob snapshot. The value should be URL-encoded as it would appear
    +         in a request URI. The source blob must either be public or must be
    +         authenticated via a shared access signature.
    +        :type copy_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param rehydrate_priority: Optional: Indicates the priority with which
    +         to rehydrate an archived blob. Possible values include: 'High',
    +         'Standard'
    +        :type rehydrate_priority: str or
    +         ~azure.storage.blob.models.RehydratePriority
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        # Construct URL
    +        url = self.start_copy_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        if rehydrate_priority is not None:
    +            header_parameters['x-ms-rehydrate-priority'] = self._serialize.header("rehydrate_priority", rehydrate_priority, 'str')
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    start_copy_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def copy_from_url(self, copy_source, timeout=None, metadata=None, tier=None, request_id=None, source_content_md5=None, source_modified_access_conditions=None, modified_access_conditions=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """The Copy From URL operation copies a blob or an internet resource to a
    +        new blob. It will not return a response until the copy is complete.
    +
    +        :param copy_source: Specifies the name of the source page blob
    +         snapshot. This value is a URL of up to 2 KB in length that specifies a
    +         page blob snapshot. The value should be URL-encoded as it would appear
    +         in a request URI. The source blob must either be public or must be
    +         authenticated via a shared access signature.
    +        :type copy_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        # Construct URL
    +        url = self.copy_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        header_parameters['x-ms-requires-sync'] = self._serialize.header("self.x_ms_requires_sync", self.x_ms_requires_sync, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-status': self._deserialize(models.SyncCopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    copy_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def abort_copy_from_url(self, copy_id, timeout=None, request_id=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """The Abort Copy From URL operation aborts a pending Copy From URL
    +        operation, and leaves a destination blob with zero length and full
    +        metadata.
    +
    +        :param copy_id: The copy identifier provided in the x-ms-copy-id
    +         header of the original Copy Blob operation.
    +        :type copy_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "copy"
    +
    +        # Construct URL
    +        url = self.abort_copy_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['copyid'] = self._serialize.query("copy_id", copy_id, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-copy-action'] = self._serialize.header("self.x_ms_copy_action", self.x_ms_copy_action, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    abort_copy_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def set_tier(self, tier, timeout=None, rehydrate_priority=None, request_id=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """The Set Tier operation sets the tier on a blob. The operation is
    +        allowed on a page blob in a premium storage account and on a block blob
    +        in a blob storage account (locally redundant storage only). A premium
    +        page blob's tier determines the allowed size, IOPS, and bandwidth of
    +        the blob. A block blob's tier determines Hot/Cool/Archive storage type.
    +        This operation does not update the blob's ETag.
    +
    +        :param tier: Indicates the tier to be set on the blob. Possible values
    +         include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30', 'P40', 'P50', 'P60',
    +         'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierRequired
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param rehydrate_priority: Optional: Indicates the priority with which
    +         to rehydrate an archived blob. Possible values include: 'High',
    +         'Standard'
    +        :type rehydrate_priority: str or
    +         ~azure.storage.blob.models.RehydratePriority
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "tier"
    +
    +        # Construct URL
    +        url = self.set_tier.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        if rehydrate_priority is not None:
    +            header_parameters['x-ms-rehydrate-priority'] = self._serialize.header("rehydrate_priority", rehydrate_priority, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200, 202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_tier.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def get_account_info(self, cls=None, **kwargs):
    +        """Returns the sku name and account kind .
    +
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_account_info.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['restype'] = self._serialize.query("self.restype", self.restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-sku-name': self._deserialize(models.SkuName, response.headers.get('x-ms-sku-name')),
    +                'x-ms-account-kind': self._deserialize(models.AccountKind, response.headers.get('x-ms-account-kind')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_account_info.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_block_blob_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_block_blob_operations.py
    new file mode 100644
    index 000000000000..034e32f8211f
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_block_blob_operations.py
    @@ -0,0 +1,802 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class BlockBlobOperations(object):
    +    """BlockBlobOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_blob_type: Specifies the type of blob to create: block blob, page blob, or append blob. Constant value: "BlockBlob".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_blob_type = "BlockBlob"
    +
    +    def upload(self, body, content_length, timeout=None, transactional_content_md5=None, metadata=None, tier=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Upload Block Blob operation updates the content of an existing
    +        block blob. Updating an existing block blob overwrites any existing
    +        metadata on the blob. Partial updates are not supported with Put Blob;
    +        the content of the existing blob is overwritten with the content of the
    +        new blob. To perform a partial update of the content of a block blob,
    +        use the Put Block List operation.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.upload.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-blob-type'] = self._serialize.header("self.x_ms_blob_type", self.x_ms_blob_type, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    upload.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def stage_block(self, block_id, content_length, body, transactional_content_md5=None, transactional_content_crc64=None, timeout=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, cls=None, **kwargs):
    +        """The Stage Block operation creates a new block to be committed as part
    +        of a blob.
    +
    +        :param block_id: A valid Base64 string value that identifies the
    +         block. Prior to encoding, the string must be less than or equal to 64
    +         bytes in size. For a given blob, the length of the value specified for
    +         the blockid parameter must be the same size for each block.
    +        :type block_id: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param body: Initial data
    +        :type body: Generator
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +
    +        comp = "block"
    +
    +        # Construct URL
    +        url = self.stage_block.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['blockid'] = self._serialize.query("block_id", block_id, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    stage_block.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def stage_block_from_url(self, block_id, content_length, source_url, source_range=None, source_content_md5=None, source_contentcrc64=None, timeout=None, request_id=None, cpk_info=None, cpk_scope_info=None, lease_access_conditions=None, source_modified_access_conditions=None, cls=None, **kwargs):
    +        """The Stage Block operation creates a new block to be committed as part
    +        of a blob where the contents are read from a URL.
    +
    +        :param block_id: A valid Base64 string value that identifies the
    +         block. Prior to encoding, the string must be less than or equal to 64
    +         bytes in size. For a given blob, the length of the value specified for
    +         the blockid parameter must be the same size for each block.
    +        :type block_id: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param source_url: Specify a URL to the copy source.
    +        :type source_url: str
    +        :param source_range: Bytes of source data in the specified range.
    +        :type source_range: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_contentcrc64: Specify the crc64 calculated for the range
    +         of bytes that must be read from the copy source.
    +        :type source_contentcrc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        comp = "block"
    +
    +        # Construct URL
    +        url = self.stage_block_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['blockid'] = self._serialize.query("block_id", block_id, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("source_url", source_url, 'str')
    +        if source_range is not None:
    +            header_parameters['x-ms-source-range'] = self._serialize.header("source_range", source_range, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        if source_contentcrc64 is not None:
    +            header_parameters['x-ms-source-content-crc64'] = self._serialize.header("source_contentcrc64", source_contentcrc64, 'bytearray')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    stage_block_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def commit_block_list(self, blocks, timeout=None, transactional_content_md5=None, transactional_content_crc64=None, metadata=None, tier=None, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Commit Block List operation writes a blob by specifying the list of
    +        block IDs that make up the blob. In order to be written as part of a
    +        blob, a block must have been successfully written to the server in a
    +        prior Put Block operation. You can call Put Block List to update a blob
    +        by uploading only those blocks that have changed, then committing the
    +        new and existing blocks together. You can do this by specifying whether
    +        to commit a block from the committed block list or from the uncommitted
    +        block list, or to commit the most recently uploaded version of the
    +        block, whichever list it may belong to.
    +
    +        :param blocks:
    +        :type blocks: ~azure.storage.blob.models.BlockLookupList
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param tier: Optional. Indicates the tier to be set on the blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'
    +        :type tier: str or ~azure.storage.blob.models.AccessTierOptional
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "blocklist"
    +
    +        # Construct URL
    +        url = self.commit_block_list.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(blocks, 'BlockLookupList')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    commit_block_list.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def get_block_list(self, list_type="committed", snapshot=None, timeout=None, request_id=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """The Get Block List operation retrieves the list of blocks that have
    +        been uploaded as part of a block blob.
    +
    +        :param list_type: Specifies whether to return the list of committed
    +         blocks, the list of uncommitted blocks, or both lists together.
    +         Possible values include: 'committed', 'uncommitted', 'all'
    +        :type list_type: str or ~azure.storage.blob.models.BlockListType
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BlockList or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.BlockList
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        comp = "blocklist"
    +
    +        # Construct URL
    +        url = self.get_block_list.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        query_parameters['blocklisttype'] = self._serialize.query("list_type", list_type, 'BlockListType')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BlockList', response)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-blob-content-length': self._deserialize('long', response.headers.get('x-ms-blob-content-length')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_block_list.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_container_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_container_operations.py
    new file mode 100644
    index 000000000000..2d2812a4da5f
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_container_operations.py
    @@ -0,0 +1,1327 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class ContainerOperations(object):
    +    """ContainerOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +
    +    def create(self, timeout=None, metadata=None, access=None, request_id=None, container_cpk_scope_info=None, cls=None, **kwargs):
    +        """creates a new container under the specified account. If the container
    +        with the same name already exists, the operation fails.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param access: Specifies whether data in the container may be accessed
    +         publicly and the level of access. Possible values include:
    +         'container', 'blob'
    +        :type access: str or ~azure.storage.blob.models.PublicAccessType
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param container_cpk_scope_info: Additional parameters for the
    +         operation
    +        :type container_cpk_scope_info:
    +         ~azure.storage.blob.models.ContainerCpkScopeInfo
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        default_encryption_scope = None
    +        if container_cpk_scope_info is not None:
    +            default_encryption_scope = container_cpk_scope_info.default_encryption_scope
    +        deny_encryption_scope_override = None
    +        if container_cpk_scope_info is not None:
    +            deny_encryption_scope_override = container_cpk_scope_info.deny_encryption_scope_override
    +
    +        restype = "container"
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        if access is not None:
    +            header_parameters['x-ms-blob-public-access'] = self._serialize.header("access", access, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if default_encryption_scope is not None:
    +            header_parameters['x-ms-default-encryption-scope'] = self._serialize.header("default_encryption_scope", default_encryption_scope, 'str')
    +        if deny_encryption_scope_override is not None:
    +            header_parameters['x-ms-deny-encryption-scope-override'] = self._serialize.header("deny_encryption_scope_override", deny_encryption_scope_override, 'bool')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{containerName}'}
    +
    +    def get_properties(self, timeout=None, request_id=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """returns all user-defined metadata and system properties for the
    +        specified container. The data returned does not include the container's
    +        list of blobs.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        restype = "container"
    +
    +        # Construct URL
    +        url = self.get_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-meta': self._deserialize('{str}', response.headers.get('x-ms-meta')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-duration': self._deserialize(models.LeaseDurationType, response.headers.get('x-ms-lease-duration')),
    +                'x-ms-lease-state': self._deserialize(models.LeaseStateType, response.headers.get('x-ms-lease-state')),
    +                'x-ms-lease-status': self._deserialize(models.LeaseStatusType, response.headers.get('x-ms-lease-status')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-blob-public-access': self._deserialize('str', response.headers.get('x-ms-blob-public-access')),
    +                'x-ms-has-immutability-policy': self._deserialize('bool', response.headers.get('x-ms-has-immutability-policy')),
    +                'x-ms-has-legal-hold': self._deserialize('bool', response.headers.get('x-ms-has-legal-hold')),
    +                'x-ms-default-encryption-scope': self._deserialize('str', response.headers.get('x-ms-default-encryption-scope')),
    +                'x-ms-deny-encryption-scope-override': self._deserialize('bool', response.headers.get('x-ms-deny-encryption-scope-override')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_properties.metadata = {'url': '/{containerName}'}
    +
    +    def delete(self, timeout=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """operation marks the specified container for deletion. The container and
    +        any blobs contained within it are later deleted during garbage
    +        collection.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        restype = "container"
    +
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    delete.metadata = {'url': '/{containerName}'}
    +
    +    def set_metadata(self, timeout=None, metadata=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """operation sets one or more user-defined name-value pairs for the
    +        specified container.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +
    +        restype = "container"
    +        comp = "metadata"
    +
    +        # Construct URL
    +        url = self.set_metadata.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_metadata.metadata = {'url': '/{containerName}'}
    +
    +    def get_access_policy(self, timeout=None, request_id=None, lease_access_conditions=None, cls=None, **kwargs):
    +        """gets the permissions for the specified container. The permissions
    +        indicate whether container data may be accessed publicly.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: list or the result of cls(response)
    +        :rtype: list[~azure.storage.blob.models.SignedIdentifier]
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +
    +        restype = "container"
    +        comp = "acl"
    +
    +        # Construct URL
    +        url = self.get_access_policy.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('[SignedIdentifier]', response)
    +            header_dict = {
    +                'x-ms-blob-public-access': self._deserialize('str', response.headers.get('x-ms-blob-public-access')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_access_policy.metadata = {'url': '/{containerName}'}
    +
    +    def set_access_policy(self, container_acl=None, timeout=None, access=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """sets the permissions for the specified container. The permissions
    +        indicate whether blobs in a container may be accessed publicly.
    +
    +        :param container_acl: the acls for the container
    +        :type container_acl: list[~azure.storage.blob.models.SignedIdentifier]
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param access: Specifies whether data in the container may be accessed
    +         publicly and the level of access. Possible values include:
    +         'container', 'blob'
    +        :type access: str or ~azure.storage.blob.models.PublicAccessType
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        restype = "container"
    +        comp = "acl"
    +
    +        # Construct URL
    +        url = self.set_access_policy.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        if access is not None:
    +            header_parameters['x-ms-blob-public-access'] = self._serialize.header("access", access, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct body
    +        serialization_ctxt = {'xml': {'name': 'SignedIdentifiers', 'itemsName': 'SignedIdentifiers', 'wrapped': True}}
    +        if container_acl is not None:
    +            body_content = self._serialize.body(container_acl, '[SignedIdentifier]', serialization_ctxt=serialization_ctxt)
    +        else:
    +            body_content = None
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_access_policy.metadata = {'url': '/{containerName}'}
    +
    +    def acquire_lease(self, timeout=None, duration=None, proposed_lease_id=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param duration: Specifies the duration of the lease, in seconds, or
    +         negative one (-1) for a lease that never expires. A non-infinite lease
    +         can be between 15 and 60 seconds. A lease duration cannot be changed
    +         using renew or change.
    +        :type duration: int
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "acquire"
    +
    +        # Construct URL
    +        url = self.acquire_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if duration is not None:
    +            header_parameters['x-ms-lease-duration'] = self._serialize.header("duration", duration, 'int')
    +        if proposed_lease_id is not None:
    +            header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    acquire_lease.metadata = {'url': '/{containerName}'}
    +
    +    def release_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "release"
    +
    +        # Construct URL
    +        url = self.release_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    release_lease.metadata = {'url': '/{containerName}'}
    +
    +    def renew_lease(self, lease_id, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "renew"
    +
    +        # Construct URL
    +        url = self.renew_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    renew_lease.metadata = {'url': '/{containerName}'}
    +
    +    def break_lease(self, timeout=None, break_period=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param break_period: For a break operation, proposed duration the
    +         lease should continue before it is broken, in seconds, between 0 and
    +         60. This break period is only used if it is shorter than the time
    +         remaining on the lease. If longer, the time remaining on the lease is
    +         used. A new lease will not be available before the break period has
    +         expired, but the lease may be held for longer than the break period.
    +         If this header does not appear with a break operation, a
    +         fixed-duration lease breaks after the remaining lease period elapses,
    +         and an infinite lease breaks immediately.
    +        :type break_period: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "break"
    +
    +        # Construct URL
    +        url = self.break_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if break_period is not None:
    +            header_parameters['x-ms-lease-break-period'] = self._serialize.header("break_period", break_period, 'int')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-time': self._deserialize('int', response.headers.get('x-ms-lease-time')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    break_lease.metadata = {'url': '/{containerName}'}
    +
    +    def change_lease(self, lease_id, proposed_lease_id, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """[Update] establishes and manages a lock on a container for delete
    +        operations. The lock duration can be 15 to 60 seconds, or can be
    +        infinite.
    +
    +        :param lease_id: Specifies the current lease ID on the resource.
    +        :type lease_id: str
    +        :param proposed_lease_id: Proposed lease ID, in a GUID string format.
    +         The Blob service returns 400 (Invalid request) if the proposed lease
    +         ID is not in the correct format. See Guid Constructor (String) for a
    +         list of valid GUID string formats.
    +        :type proposed_lease_id: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        comp = "lease"
    +        restype = "container"
    +        action = "change"
    +
    +        # Construct URL
    +        url = self.change_lease.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        header_parameters['x-ms-proposed-lease-id'] = self._serialize.header("proposed_lease_id", proposed_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-lease-action'] = self._serialize.header("action", action, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-lease-id': self._deserialize('str', response.headers.get('x-ms-lease-id')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    change_lease.metadata = {'url': '/{containerName}'}
    +
    +    def list_blob_flat_segment(self, prefix=None, marker=None, maxresults=None, include=None, timeout=None, request_id=None, cls=None, **kwargs):
    +        """[Update] The List Blobs operation returns a list of the blobs under the
    +        specified container.
    +
    +        :param prefix: Filters the results to return only containers whose
    +         name begins with the specified prefix.
    +        :type prefix: str
    +        :param marker: A string value that identifies the portion of the list
    +         of containers to be returned with the next listing operation. The
    +         operation returns the NextMarker value within the response body if the
    +         listing operation did not return all containers remaining to be listed
    +         with the current page. The NextMarker value can be used as the value
    +         for the marker parameter in a subsequent call to request the next page
    +         of list items. The marker value is opaque to the client.
    +        :type marker: str
    +        :param maxresults: Specifies the maximum number of containers to
    +         return. If the request does not specify maxresults, or specifies a
    +         value greater than 5000, the server will return up to 5000 items. Note
    +         that if the listing operation crosses a partition boundary, then the
    +         service will return a continuation token for retrieving the remainder
    +         of the results. For this reason, it is possible that the service will
    +         return fewer results than specified by maxresults, or than the default
    +         of 5000.
    +        :type maxresults: int
    +        :param include: Include this parameter to specify one or more datasets
    +         to include in the response.
    +        :type include: list[str or
    +         ~azure.storage.blob.models.ListBlobsIncludeItem]
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: ListBlobsFlatSegmentResponse or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.ListBlobsFlatSegmentResponse
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "container"
    +        comp = "list"
    +
    +        # Construct URL
    +        url = self.list_blob_flat_segment.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if prefix is not None:
    +            query_parameters['prefix'] = self._serialize.query("prefix", prefix, 'str')
    +        if marker is not None:
    +            query_parameters['marker'] = self._serialize.query("marker", marker, 'str')
    +        if maxresults is not None:
    +            query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1)
    +        if include is not None:
    +            query_parameters['include'] = self._serialize.query("include", include, '[ListBlobsIncludeItem]', div=',')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ListBlobsFlatSegmentResponse', response)
    +            header_dict = {
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    list_blob_flat_segment.metadata = {'url': '/{containerName}'}
    +
    +    def list_blob_hierarchy_segment(self, delimiter, prefix=None, marker=None, maxresults=None, include=None, timeout=None, request_id=None, cls=None, **kwargs):
    +        """[Update] The List Blobs operation returns a list of the blobs under the
    +        specified container.
    +
    +        :param delimiter: When the request includes this parameter, the
    +         operation returns a BlobPrefix element in the response body that acts
    +         as a placeholder for all blobs whose names begin with the same
    +         substring up to the appearance of the delimiter character. The
    +         delimiter may be a single character or a string.
    +        :type delimiter: str
    +        :param prefix: Filters the results to return only containers whose
    +         name begins with the specified prefix.
    +        :type prefix: str
    +        :param marker: A string value that identifies the portion of the list
    +         of containers to be returned with the next listing operation. The
    +         operation returns the NextMarker value within the response body if the
    +         listing operation did not return all containers remaining to be listed
    +         with the current page. The NextMarker value can be used as the value
    +         for the marker parameter in a subsequent call to request the next page
    +         of list items. The marker value is opaque to the client.
    +        :type marker: str
    +        :param maxresults: Specifies the maximum number of containers to
    +         return. If the request does not specify maxresults, or specifies a
    +         value greater than 5000, the server will return up to 5000 items. Note
    +         that if the listing operation crosses a partition boundary, then the
    +         service will return a continuation token for retrieving the remainder
    +         of the results. For this reason, it is possible that the service will
    +         return fewer results than specified by maxresults, or than the default
    +         of 5000.
    +        :type maxresults: int
    +        :param include: Include this parameter to specify one or more datasets
    +         to include in the response.
    +        :type include: list[str or
    +         ~azure.storage.blob.models.ListBlobsIncludeItem]
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: ListBlobsHierarchySegmentResponse or the result of
    +         cls(response)
    +        :rtype: ~azure.storage.blob.models.ListBlobsHierarchySegmentResponse
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "container"
    +        comp = "list"
    +
    +        # Construct URL
    +        url = self.list_blob_hierarchy_segment.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if prefix is not None:
    +            query_parameters['prefix'] = self._serialize.query("prefix", prefix, 'str')
    +        query_parameters['delimiter'] = self._serialize.query("delimiter", delimiter, 'str')
    +        if marker is not None:
    +            query_parameters['marker'] = self._serialize.query("marker", marker, 'str')
    +        if maxresults is not None:
    +            query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1)
    +        if include is not None:
    +            query_parameters['include'] = self._serialize.query("include", include, '[ListBlobsIncludeItem]', div=',')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ListBlobsHierarchySegmentResponse', response)
    +            header_dict = {
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    list_blob_hierarchy_segment.metadata = {'url': '/{containerName}'}
    +
    +    def get_account_info(self, cls=None, **kwargs):
    +        """Returns the sku name and account kind .
    +
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "account"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_account_info.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-sku-name': self._deserialize(models.SkuName, response.headers.get('x-ms-sku-name')),
    +                'x-ms-account-kind': self._deserialize(models.AccountKind, response.headers.get('x-ms-account-kind')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_account_info.metadata = {'url': '/{containerName}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_directory_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_directory_operations.py
    new file mode 100644
    index 000000000000..bfaf63388ec0
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_directory_operations.py
    @@ -0,0 +1,740 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class DirectoryOperations(object):
    +    """DirectoryOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar resource: . Constant value: "directory".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.resource = "directory"
    +
    +    def create(self, timeout=None, directory_properties=None, posix_permissions=None, posix_umask=None, request_id=None, directory_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Create a directory. By default, the destination is overwritten and if
    +        the destination already exists and has a lease the lease is broken.
    +        This operation supports conditional HTTP requests.  For more
    +        information, see [Specifying Conditional Headers for Blob Service
    +        Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).
    +        To fail if the destination already exists, use a conditional request
    +        with If-None-Match: "*".
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param directory_properties: Optional.  User-defined properties to be
    +         stored with the file or directory, in the format of a comma-separated
    +         list of name and value pairs "n1=v1, n2=v2, ...", where each value is
    +         base64 encoded.
    +        :type directory_properties: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_umask: Only valid if Hierarchical Namespace is enabled
    +         for the account. This umask restricts permission settings for file and
    +         directory, and will only be applied when default Acl does not exist in
    +         parent directory. If the umask bit has set, it means that the
    +         corresponding permission will be disabled. Otherwise the corresponding
    +         permission will be determined by the permission. A 4-digit octal
    +         notation (e.g. 0022) is supported here. If no umask was specified, a
    +         default umask - 0027 will be used.
    +        :type posix_umask: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param directory_http_headers: Additional parameters for the operation
    +        :type directory_http_headers:
    +         ~azure.storage.blob.models.DirectoryHttpHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        cache_control = None
    +        if directory_http_headers is not None:
    +            cache_control = directory_http_headers.cache_control
    +        content_type = None
    +        if directory_http_headers is not None:
    +            content_type = directory_http_headers.content_type
    +        content_encoding = None
    +        if directory_http_headers is not None:
    +            content_encoding = directory_http_headers.content_encoding
    +        content_language = None
    +        if directory_http_headers is not None:
    +            content_language = directory_http_headers.content_language
    +        content_disposition = None
    +        if directory_http_headers is not None:
    +            content_disposition = directory_http_headers.content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['resource'] = self._serialize.query("self.resource", self.resource, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if directory_properties is not None:
    +            header_parameters['x-ms-properties'] = self._serialize.header("directory_properties", directory_properties, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_umask is not None:
    +            header_parameters['x-ms-umask'] = self._serialize.header("posix_umask", posix_umask, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if cache_control is not None:
    +            header_parameters['x-ms-cache-control'] = self._serialize.header("cache_control", cache_control, 'str')
    +        if content_type is not None:
    +            header_parameters['x-ms-content-type'] = self._serialize.header("content_type", content_type, 'str')
    +        if content_encoding is not None:
    +            header_parameters['x-ms-content-encoding'] = self._serialize.header("content_encoding", content_encoding, 'str')
    +        if content_language is not None:
    +            header_parameters['x-ms-content-language'] = self._serialize.header("content_language", content_language, 'str')
    +        if content_disposition is not None:
    +            header_parameters['x-ms-content-disposition'] = self._serialize.header("content_disposition", content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def rename(self, rename_source, timeout=None, marker=None, path_rename_mode=None, directory_properties=None, posix_permissions=None, posix_umask=None, source_lease_id=None, request_id=None, directory_http_headers=None, lease_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, cls=None, **kwargs):
    +        """Rename a directory. By default, the destination is overwritten and if
    +        the destination already exists and has a lease the lease is broken.
    +        This operation supports conditional HTTP requests. For more
    +        information, see [Specifying Conditional Headers for Blob Service
    +        Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).
    +        To fail if the destination already exists, use a conditional request
    +        with If-None-Match: "*".
    +
    +        :param rename_source: The file or directory to be renamed. The value
    +         must have the following format: "/{filesysystem}/{path}".  If
    +         "x-ms-properties" is specified, the properties will overwrite the
    +         existing properties; otherwise, the existing properties will be
    +         preserved.
    +        :type rename_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param marker: When renaming a directory, the number of paths that are
    +         renamed with each invocation is limited.  If the number of paths to be
    +         renamed exceeds this limit, a continuation token is returned in this
    +         response header.  When a continuation token is returned in the
    +         response, it must be specified in a subsequent invocation of the
    +         rename operation to continue renaming the directory.
    +        :type marker: str
    +        :param path_rename_mode: Determines the behavior of the rename
    +         operation. Possible values include: 'legacy', 'posix'
    +        :type path_rename_mode: str or
    +         ~azure.storage.blob.models.PathRenameMode
    +        :param directory_properties: Optional.  User-defined properties to be
    +         stored with the file or directory, in the format of a comma-separated
    +         list of name and value pairs "n1=v1, n2=v2, ...", where each value is
    +         base64 encoded.
    +        :type directory_properties: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_umask: Only valid if Hierarchical Namespace is enabled
    +         for the account. This umask restricts permission settings for file and
    +         directory, and will only be applied when default Acl does not exist in
    +         parent directory. If the umask bit has set, it means that the
    +         corresponding permission will be disabled. Otherwise the corresponding
    +         permission will be determined by the permission. A 4-digit octal
    +         notation (e.g. 0022) is supported here. If no umask was specified, a
    +         default umask - 0027 will be used.
    +        :type posix_umask: str
    +        :param source_lease_id: A lease ID for the source path. If specified,
    +         the source path must have an active lease and the leaase ID must
    +         match.
    +        :type source_lease_id: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param directory_http_headers: Additional parameters for the operation
    +        :type directory_http_headers:
    +         ~azure.storage.blob.models.DirectoryHttpHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        cache_control = None
    +        if directory_http_headers is not None:
    +            cache_control = directory_http_headers.cache_control
    +        content_type = None
    +        if directory_http_headers is not None:
    +            content_type = directory_http_headers.content_type
    +        content_encoding = None
    +        if directory_http_headers is not None:
    +            content_encoding = directory_http_headers.content_encoding
    +        content_language = None
    +        if directory_http_headers is not None:
    +            content_language = directory_http_headers.content_language
    +        content_disposition = None
    +        if directory_http_headers is not None:
    +            content_disposition = directory_http_headers.content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        # Construct URL
    +        url = self.rename.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if marker is not None:
    +            query_parameters['continuation'] = self._serialize.query("marker", marker, 'str')
    +        if path_rename_mode is not None:
    +            query_parameters['mode'] = self._serialize.query("path_rename_mode", path_rename_mode, 'PathRenameMode')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-rename-source'] = self._serialize.header("rename_source", rename_source, 'str')
    +        if directory_properties is not None:
    +            header_parameters['x-ms-properties'] = self._serialize.header("directory_properties", directory_properties, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_umask is not None:
    +            header_parameters['x-ms-umask'] = self._serialize.header("posix_umask", posix_umask, 'str')
    +        if source_lease_id is not None:
    +            header_parameters['x-ms-source-lease-id'] = self._serialize.header("source_lease_id", source_lease_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if cache_control is not None:
    +            header_parameters['x-ms-cache-control'] = self._serialize.header("cache_control", cache_control, 'str')
    +        if content_type is not None:
    +            header_parameters['x-ms-content-type'] = self._serialize.header("content_type", content_type, 'str')
    +        if content_encoding is not None:
    +            header_parameters['x-ms-content-encoding'] = self._serialize.header("content_encoding", content_encoding, 'str')
    +        if content_language is not None:
    +            header_parameters['x-ms-content-language'] = self._serialize.header("content_language", content_language, 'str')
    +        if content_disposition is not None:
    +            header_parameters['x-ms-content-disposition'] = self._serialize.header("content_disposition", content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-continuation': self._deserialize('str', response.headers.get('x-ms-continuation')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Content-Length': self._deserialize('long', response.headers.get('Content-Length')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    rename.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def delete(self, recursive_directory_delete, timeout=None, marker=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Deletes the directory.
    +
    +        :param recursive_directory_delete: If "true", all paths beneath the
    +         directory will be deleted. If "false" and the directory is non-empty,
    +         an error occurs.
    +        :type recursive_directory_delete: bool
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param marker: When renaming a directory, the number of paths that are
    +         renamed with each invocation is limited.  If the number of paths to be
    +         renamed exceeds this limit, a continuation token is returned in this
    +         response header.  When a continuation token is returned in the
    +         response, it must be specified in a subsequent invocation of the
    +         rename operation to continue renaming the directory.
    +        :type marker: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['recursive'] = self._serialize.query("recursive_directory_delete", recursive_directory_delete, 'bool')
    +        if marker is not None:
    +            query_parameters['continuation'] = self._serialize.query("marker", marker, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-continuation': self._deserialize('str', response.headers.get('x-ms-continuation')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +            }
    +            return cls(response, None, response_headers)
    +    delete.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def set_access_control(self, timeout=None, owner=None, group=None, posix_permissions=None, posix_acl=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Set the owner, group, permissions, or access control list for a
    +        directory.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param owner: Optional. The owner of the blob or directory.
    +        :type owner: str
    +        :param group: Optional. The owning group of the blob or directory.
    +        :type group: str
    +        :param posix_permissions: Optional and only valid if Hierarchical
    +         Namespace is enabled for the account. Sets POSIX access permissions
    +         for the file owner, the file owning group, and others. Each class may
    +         be granted read, write, or execute permission.  The sticky bit is also
    +         supported.  Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g.
    +         0766) are supported.
    +        :type posix_permissions: str
    +        :param posix_acl: Sets POSIX access control rights on files and
    +         directories. The value is a comma-separated list of access control
    +         entries. Each access control entry (ACE) consists of a scope, a type,
    +         a user or group identifier, and permissions in the format
    +         "[scope:][type]:[id]:[permissions]".
    +        :type posix_acl: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "setAccessControl"
    +
    +        # Construct URL
    +        url = self.set_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if owner is not None:
    +            header_parameters['x-ms-owner'] = self._serialize.header("owner", owner, 'str')
    +        if group is not None:
    +            header_parameters['x-ms-group'] = self._serialize.header("group", group, 'str')
    +        if posix_permissions is not None:
    +            header_parameters['x-ms-permissions'] = self._serialize.header("posix_permissions", posix_permissions, 'str')
    +        if posix_acl is not None:
    +            header_parameters['x-ms-acl'] = self._serialize.header("posix_acl", posix_acl, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_access_control.metadata = {'url': '/{filesystem}/{path}'}
    +
    +    def get_access_control(self, timeout=None, upn=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Get the owner, group, permissions, or access control list for a
    +        directory.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param upn: Optional. Valid only when Hierarchical Namespace is
    +         enabled for the account. If "true", the identity values returned in
    +         the x-ms-owner, x-ms-group, and x-ms-acl response headers will be
    +         transformed from Azure Active Directory Object IDs to User Principal
    +         Names.  If "false", the values will be returned as Azure Active
    +         Directory Object IDs. The default value is false.
    +        :type upn: bool
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`DataLakeStorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +
    +        action = "getAccessControl"
    +
    +        # Construct URL
    +        url = self.get_access_control.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if upn is not None:
    +            query_parameters['upn'] = self._serialize.query("upn", upn, 'bool')
    +        query_parameters['action'] = self._serialize.query("action", action, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +
    +        # Construct and send request
    +        request = self._client.head(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.DataLakeStorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-owner': self._deserialize('str', response.headers.get('x-ms-owner')),
    +                'x-ms-group': self._deserialize('str', response.headers.get('x-ms-group')),
    +                'x-ms-permissions': self._deserialize('str', response.headers.get('x-ms-permissions')),
    +                'x-ms-acl': self._deserialize('str', response.headers.get('x-ms-acl')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_access_control.metadata = {'url': '/{filesystem}/{path}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_page_blob_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_page_blob_operations.py
    new file mode 100644
    index 000000000000..70e8048a6803
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_page_blob_operations.py
    @@ -0,0 +1,1348 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class PageBlobOperations(object):
    +    """PageBlobOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar x_ms_blob_type: Specifies the type of blob to create: block blob, page blob, or append blob. Constant value: "PageBlob".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +        self.x_ms_blob_type = "PageBlob"
    +
    +    def create(self, content_length, blob_content_length, timeout=None, tier=None, metadata=None, blob_sequence_number=0, request_id=None, blob_http_headers=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Create operation creates a new page blob.
    +
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param blob_content_length: This header specifies the maximum size for
    +         the page blob, up to 1 TB. The page blob size must be aligned to a
    +         512-byte boundary.
    +        :type blob_content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param tier: Optional. Indicates the tier to be set on the page blob.
    +         Possible values include: 'P4', 'P6', 'P10', 'P15', 'P20', 'P30',
    +         'P40', 'P50', 'P60', 'P70', 'P80'
    +        :type tier: str or
    +         ~azure.storage.blob.models.PremiumPageBlobAccessTier
    +        :param metadata: Optional. Specifies a user-defined name-value pair
    +         associated with the blob. If no name-value pairs are specified, the
    +         operation will copy the metadata from the source blob or file to the
    +         destination blob. If one or more name-value pairs are specified, the
    +         destination blob is created with the specified metadata, and metadata
    +         is not copied from the source blob or file. Note that beginning with
    +         version 2009-09-19, metadata names must adhere to the naming rules for
    +         C# identifiers. See Naming and Referencing Containers, Blobs, and
    +         Metadata for more information.
    +        :type metadata: str
    +        :param blob_sequence_number: Set for page blobs only. The sequence
    +         number is a user-controlled value that you can use to track requests.
    +         The value of the sequence number must be between 0 and 2^63 - 1.
    +        :type blob_sequence_number: long
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param blob_http_headers: Additional parameters for the operation
    +        :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        blob_content_type = None
    +        if blob_http_headers is not None:
    +            blob_content_type = blob_http_headers.blob_content_type
    +        blob_content_encoding = None
    +        if blob_http_headers is not None:
    +            blob_content_encoding = blob_http_headers.blob_content_encoding
    +        blob_content_language = None
    +        if blob_http_headers is not None:
    +            blob_content_language = blob_http_headers.blob_content_language
    +        blob_content_md5 = None
    +        if blob_http_headers is not None:
    +            blob_content_md5 = blob_http_headers.blob_content_md5
    +        blob_cache_control = None
    +        if blob_http_headers is not None:
    +            blob_cache_control = blob_http_headers.blob_cache_control
    +        blob_content_disposition = None
    +        if blob_http_headers is not None:
    +            blob_content_disposition = blob_http_headers.blob_content_disposition
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        # Construct URL
    +        url = self.create.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if tier is not None:
    +            header_parameters['x-ms-access-tier'] = self._serialize.header("tier", tier, 'str')
    +        if metadata is not None:
    +            header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str')
    +        header_parameters['x-ms-blob-content-length'] = self._serialize.header("blob_content_length", blob_content_length, 'long')
    +        if blob_sequence_number is not None:
    +            header_parameters['x-ms-blob-sequence-number'] = self._serialize.header("blob_sequence_number", blob_sequence_number, 'long')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-blob-type'] = self._serialize.header("self.x_ms_blob_type", self.x_ms_blob_type, 'str')
    +        if blob_content_type is not None:
    +            header_parameters['x-ms-blob-content-type'] = self._serialize.header("blob_content_type", blob_content_type, 'str')
    +        if blob_content_encoding is not None:
    +            header_parameters['x-ms-blob-content-encoding'] = self._serialize.header("blob_content_encoding", blob_content_encoding, 'str')
    +        if blob_content_language is not None:
    +            header_parameters['x-ms-blob-content-language'] = self._serialize.header("blob_content_language", blob_content_language, 'str')
    +        if blob_content_md5 is not None:
    +            header_parameters['x-ms-blob-content-md5'] = self._serialize.header("blob_content_md5", blob_content_md5, 'bytearray')
    +        if blob_cache_control is not None:
    +            header_parameters['x-ms-blob-cache-control'] = self._serialize.header("blob_cache_control", blob_cache_control, 'str')
    +        if blob_content_disposition is not None:
    +            header_parameters['x-ms-blob-content-disposition'] = self._serialize.header("blob_content_disposition", blob_content_disposition, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    create.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def upload_pages(self, body, content_length, transactional_content_md5=None, transactional_content_crc64=None, timeout=None, range=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, sequence_number_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Upload Pages operation writes a range of pages to a page blob.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param transactional_content_md5: Specify the transactional md5 for
    +         the body, to be validated by the service.
    +        :type transactional_content_md5: bytearray
    +        :param transactional_content_crc64: Specify the transactional crc64
    +         for the body, to be validated by the service.
    +        :type transactional_content_crc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param sequence_number_access_conditions: Additional parameters for
    +         the operation
    +        :type sequence_number_access_conditions:
    +         ~azure.storage.blob.models.SequenceNumberAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_sequence_number_less_than_or_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than_or_equal_to = sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to
    +        if_sequence_number_less_than = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than
    +        if_sequence_number_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "page"
    +        page_write = "update"
    +
    +        # Construct URL
    +        url = self.upload_pages.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/octet-stream'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if transactional_content_md5 is not None:
    +            header_parameters['Content-MD5'] = self._serialize.header("transactional_content_md5", transactional_content_md5, 'bytearray')
    +        if transactional_content_crc64 is not None:
    +            header_parameters['x-ms-content-crc64'] = self._serialize.header("transactional_content_crc64", transactional_content_crc64, 'bytearray')
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-page-write'] = self._serialize.header("page_write", page_write, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_sequence_number_less_than_or_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-le'] = self._serialize.header("if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, 'long')
    +        if if_sequence_number_less_than is not None:
    +            header_parameters['x-ms-if-sequence-number-lt'] = self._serialize.header("if_sequence_number_less_than", if_sequence_number_less_than, 'long')
    +        if if_sequence_number_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-eq'] = self._serialize.header("if_sequence_number_equal_to", if_sequence_number_equal_to, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    upload_pages.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def clear_pages(self, content_length, timeout=None, range=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, sequence_number_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Clear Pages operation clears a set of pages from a page blob.
    +
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param sequence_number_access_conditions: Additional parameters for
    +         the operation
    +        :type sequence_number_access_conditions:
    +         ~azure.storage.blob.models.SequenceNumberAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_sequence_number_less_than_or_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than_or_equal_to = sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to
    +        if_sequence_number_less_than = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than
    +        if_sequence_number_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "page"
    +        page_write = "clear"
    +
    +        # Construct URL
    +        url = self.clear_pages.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-page-write'] = self._serialize.header("page_write", page_write, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_sequence_number_less_than_or_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-le'] = self._serialize.header("if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, 'long')
    +        if if_sequence_number_less_than is not None:
    +            header_parameters['x-ms-if-sequence-number-lt'] = self._serialize.header("if_sequence_number_less_than", if_sequence_number_less_than, 'long')
    +        if if_sequence_number_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-eq'] = self._serialize.header("if_sequence_number_equal_to", if_sequence_number_equal_to, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    clear_pages.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def upload_pages_from_url(self, source_url, source_range, content_length, range, source_content_md5=None, source_contentcrc64=None, timeout=None, request_id=None, cpk_info=None, cpk_scope_info=None, lease_access_conditions=None, sequence_number_access_conditions=None, modified_access_conditions=None, source_modified_access_conditions=None, cls=None, **kwargs):
    +        """The Upload Pages operation writes a range of pages to a page blob where
    +        the contents are read from a URL.
    +
    +        :param source_url: Specify a URL to the copy source.
    +        :type source_url: str
    +        :param source_range: Bytes of source data in the specified range. The
    +         length of this range should match the ContentLength header and
    +         x-ms-range/Range destination range header.
    +        :type source_range: str
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param range: The range of bytes to which the source range would be
    +         written. The range should be 512 aligned and range-end is required.
    +        :type range: str
    +        :param source_content_md5: Specify the md5 calculated for the range of
    +         bytes that must be read from the copy source.
    +        :type source_content_md5: bytearray
    +        :param source_contentcrc64: Specify the crc64 calculated for the range
    +         of bytes that must be read from the copy source.
    +        :type source_contentcrc64: bytearray
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param sequence_number_access_conditions: Additional parameters for
    +         the operation
    +        :type sequence_number_access_conditions:
    +         ~azure.storage.blob.models.SequenceNumberAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param source_modified_access_conditions: Additional parameters for
    +         the operation
    +        :type source_modified_access_conditions:
    +         ~azure.storage.blob.models.SourceModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_sequence_number_less_than_or_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than_or_equal_to = sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to
    +        if_sequence_number_less_than = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than
    +        if_sequence_number_equal_to = None
    +        if sequence_number_access_conditions is not None:
    +            if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +        source_if_modified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_modified_since = source_modified_access_conditions.source_if_modified_since
    +        source_if_unmodified_since = None
    +        if source_modified_access_conditions is not None:
    +            source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since
    +        source_if_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_match = source_modified_access_conditions.source_if_match
    +        source_if_none_match = None
    +        if source_modified_access_conditions is not None:
    +            source_if_none_match = source_modified_access_conditions.source_if_none_match
    +
    +        comp = "page"
    +        page_write = "update"
    +
    +        # Construct URL
    +        url = self.upload_pages_from_url.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("source_url", source_url, 'str')
    +        header_parameters['x-ms-source-range'] = self._serialize.header("source_range", source_range, 'str')
    +        if source_content_md5 is not None:
    +            header_parameters['x-ms-source-content-md5'] = self._serialize.header("source_content_md5", source_content_md5, 'bytearray')
    +        if source_contentcrc64 is not None:
    +            header_parameters['x-ms-source-content-crc64'] = self._serialize.header("source_contentcrc64", source_contentcrc64, 'bytearray')
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        header_parameters['x-ms-page-write'] = self._serialize.header("page_write", page_write, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_sequence_number_less_than_or_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-le'] = self._serialize.header("if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, 'long')
    +        if if_sequence_number_less_than is not None:
    +            header_parameters['x-ms-if-sequence-number-lt'] = self._serialize.header("if_sequence_number_less_than", if_sequence_number_less_than, 'long')
    +        if if_sequence_number_equal_to is not None:
    +            header_parameters['x-ms-if-sequence-number-eq'] = self._serialize.header("if_sequence_number_equal_to", if_sequence_number_equal_to, 'long')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +        if source_if_modified_since is not None:
    +            header_parameters['x-ms-source-if-modified-since'] = self._serialize.header("source_if_modified_since", source_if_modified_since, 'rfc-1123')
    +        if source_if_unmodified_since is not None:
    +            header_parameters['x-ms-source-if-unmodified-since'] = self._serialize.header("source_if_unmodified_since", source_if_unmodified_since, 'rfc-1123')
    +        if source_if_match is not None:
    +            header_parameters['x-ms-source-if-match'] = self._serialize.header("source_if_match", source_if_match, 'str')
    +        if source_if_none_match is not None:
    +            header_parameters['x-ms-source-if-none-match'] = self._serialize.header("source_if_none_match", source_if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'Content-MD5': self._deserialize('bytearray', response.headers.get('Content-MD5')),
    +                'x-ms-content-crc64': self._deserialize('bytearray', response.headers.get('x-ms-content-crc64')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-request-server-encrypted': self._deserialize('bool', response.headers.get('x-ms-request-server-encrypted')),
    +                'x-ms-encryption-key-sha256': self._deserialize('str', response.headers.get('x-ms-encryption-key-sha256')),
    +                'x-ms-encryption-scope': self._deserialize('str', response.headers.get('x-ms-encryption-scope')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    upload_pages_from_url.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def get_page_ranges(self, snapshot=None, timeout=None, range=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Get Page Ranges operation returns the list of valid page ranges for
    +        a page blob or snapshot of a page blob.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: PageList or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.PageList
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "pagelist"
    +
    +        # Construct URL
    +        url = self.get_page_ranges.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PageList', response)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'x-ms-blob-content-length': self._deserialize('long', response.headers.get('x-ms-blob-content-length')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_page_ranges.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def get_page_ranges_diff(self, snapshot=None, timeout=None, prevsnapshot=None, prev_snapshot_url=None, range=None, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Get Page Ranges Diff operation returns the list of valid page
    +        ranges for a page blob that were changed between target blob and
    +        previous snapshot.
    +
    +        :param snapshot: The snapshot parameter is an opaque DateTime value
    +         that, when present, specifies the blob snapshot to retrieve. For more
    +         information on working with blob snapshots, see Creating
    +         a Snapshot of a Blob.
    +        :type snapshot: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param prevsnapshot: Optional in version 2015-07-08 and newer. The
    +         prevsnapshot parameter is a DateTime value that specifies that the
    +         response will contain only pages that were changed between target blob
    +         and previous snapshot. Changed pages include both updated and cleared
    +         pages. The target blob may be a snapshot, as long as the snapshot
    +         specified by prevsnapshot is the older of the two. Note that
    +         incremental snapshots are currently supported only for blobs created
    +         on or after January 1, 2016.
    +        :type prevsnapshot: str
    +        :param prev_snapshot_url: Optional. This header is only supported in
    +         service versions 2019-04-19 and after and specifies the URL of a
    +         previous snapshot of the target blob. The response will only contain
    +         pages that were changed between the target blob and its previous
    +         snapshot.
    +        :type prev_snapshot_url: str
    +        :param range: Return only the bytes of the blob in the specified
    +         range.
    +        :type range: str
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: PageList or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.PageList
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "pagelist"
    +
    +        # Construct URL
    +        url = self.get_page_ranges_diff.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if snapshot is not None:
    +            query_parameters['snapshot'] = self._serialize.query("snapshot", snapshot, 'str')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        if prevsnapshot is not None:
    +            query_parameters['prevsnapshot'] = self._serialize.query("prevsnapshot", prevsnapshot, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        if prev_snapshot_url is not None:
    +            header_parameters['x-ms-previous-snapshot-url'] = self._serialize.header("prev_snapshot_url", prev_snapshot_url, 'str')
    +        if range is not None:
    +            header_parameters['x-ms-range'] = self._serialize.header("range", range, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('PageList', response)
    +            header_dict = {
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'x-ms-blob-content-length': self._deserialize('long', response.headers.get('x-ms-blob-content-length')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_page_ranges_diff.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def resize(self, blob_content_length, timeout=None, request_id=None, lease_access_conditions=None, cpk_info=None, cpk_scope_info=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Resize the Blob.
    +
    +        :param blob_content_length: This header specifies the maximum size for
    +         the page blob, up to 1 TB. The page blob size must be aligned to a
    +         512-byte boundary.
    +        :type blob_content_length: long
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param cpk_info: Additional parameters for the operation
    +        :type cpk_info: ~azure.storage.blob.models.CpkInfo
    +        :param cpk_scope_info: Additional parameters for the operation
    +        :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        encryption_key = None
    +        if cpk_info is not None:
    +            encryption_key = cpk_info.encryption_key
    +        encryption_key_sha256 = None
    +        if cpk_info is not None:
    +            encryption_key_sha256 = cpk_info.encryption_key_sha256
    +        encryption_algorithm = None
    +        if cpk_info is not None:
    +            encryption_algorithm = cpk_info.encryption_algorithm
    +        encryption_scope = None
    +        if cpk_scope_info is not None:
    +            encryption_scope = cpk_scope_info.encryption_scope
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.resize.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-blob-content-length'] = self._serialize.header("blob_content_length", blob_content_length, 'long')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if encryption_key is not None:
    +            header_parameters['x-ms-encryption-key'] = self._serialize.header("encryption_key", encryption_key, 'str')
    +        if encryption_key_sha256 is not None:
    +            header_parameters['x-ms-encryption-key-sha256'] = self._serialize.header("encryption_key_sha256", encryption_key_sha256, 'str')
    +        if encryption_algorithm is not None:
    +            header_parameters['x-ms-encryption-algorithm'] = self._serialize.header("encryption_algorithm", encryption_algorithm, 'EncryptionAlgorithmType')
    +        if encryption_scope is not None:
    +            header_parameters['x-ms-encryption-scope'] = self._serialize.header("encryption_scope", encryption_scope, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    resize.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def update_sequence_number(self, sequence_number_action, timeout=None, blob_sequence_number=0, request_id=None, lease_access_conditions=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """Update the sequence number of the blob.
    +
    +        :param sequence_number_action: Required if the
    +         x-ms-blob-sequence-number header is set for the request. This property
    +         applies to page blobs only. This property indicates how the service
    +         should modify the blob's sequence number. Possible values include:
    +         'max', 'update', 'increment'
    +        :type sequence_number_action: str or
    +         ~azure.storage.blob.models.SequenceNumberActionType
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param blob_sequence_number: Set for page blobs only. The sequence
    +         number is a user-controlled value that you can use to track requests.
    +         The value of the sequence number must be between 0 and 2^63 - 1.
    +        :type blob_sequence_number: long
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param lease_access_conditions: Additional parameters for the
    +         operation
    +        :type lease_access_conditions:
    +         ~azure.storage.blob.models.LeaseAccessConditions
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        lease_id = None
    +        if lease_access_conditions is not None:
    +            lease_id = lease_access_conditions.lease_id
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.update_sequence_number.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-sequence-number-action'] = self._serialize.header("sequence_number_action", sequence_number_action, 'SequenceNumberActionType')
    +        if blob_sequence_number is not None:
    +            header_parameters['x-ms-blob-sequence-number'] = self._serialize.header("blob_sequence_number", blob_sequence_number, 'long')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if lease_id is not None:
    +            header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", lease_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-blob-sequence-number': self._deserialize('long', response.headers.get('x-ms-blob-sequence-number')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    update_sequence_number.metadata = {'url': '/{containerName}/{blob}'}
    +
    +    def copy_incremental(self, copy_source, timeout=None, request_id=None, modified_access_conditions=None, cls=None, **kwargs):
    +        """The Copy Incremental operation copies a snapshot of the source page
    +        blob to a destination page blob. The snapshot is copied such that only
    +        the differential changes between the previously copied snapshot are
    +        transferred to the destination. The copied snapshots are complete
    +        copies of the original snapshot and can be read or copied from as
    +        usual. This API is supported since REST version 2016-05-31.
    +
    +        :param copy_source: Specifies the name of the source page blob
    +         snapshot. This value is a URL of up to 2 KB in length that specifies a
    +         page blob snapshot. The value should be URL-encoded as it would appear
    +         in a request URI. The source blob must either be public or must be
    +         authenticated via a shared access signature.
    +        :type copy_source: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param modified_access_conditions: Additional parameters for the
    +         operation
    +        :type modified_access_conditions:
    +         ~azure.storage.blob.models.ModifiedAccessConditions
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        if_modified_since = None
    +        if modified_access_conditions is not None:
    +            if_modified_since = modified_access_conditions.if_modified_since
    +        if_unmodified_since = None
    +        if modified_access_conditions is not None:
    +            if_unmodified_since = modified_access_conditions.if_unmodified_since
    +        if_match = None
    +        if modified_access_conditions is not None:
    +            if_match = modified_access_conditions.if_match
    +        if_none_match = None
    +        if modified_access_conditions is not None:
    +            if_none_match = modified_access_conditions.if_none_match
    +
    +        comp = "incrementalcopy"
    +
    +        # Construct URL
    +        url = self.copy_incremental.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +        if if_modified_since is not None:
    +            header_parameters['If-Modified-Since'] = self._serialize.header("if_modified_since", if_modified_since, 'rfc-1123')
    +        if if_unmodified_since is not None:
    +            header_parameters['If-Unmodified-Since'] = self._serialize.header("if_unmodified_since", if_unmodified_since, 'rfc-1123')
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if if_none_match is not None:
    +            header_parameters['If-None-Match'] = self._serialize.header("if_none_match", if_none_match, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'ETag': self._deserialize('str', response.headers.get('ETag')),
    +                'Last-Modified': self._deserialize('rfc-1123', response.headers.get('Last-Modified')),
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-copy-id': self._deserialize('str', response.headers.get('x-ms-copy-id')),
    +                'x-ms-copy-status': self._deserialize(models.CopyStatusType, response.headers.get('x-ms-copy-status')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    copy_incremental.metadata = {'url': '/{containerName}/{blob}'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_service_operations.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_service_operations.py
    new file mode 100644
    index 000000000000..b8f4f8e42323
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/operations/_service_operations.py
    @@ -0,0 +1,566 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +
    +from .. import models
    +
    +
    +class ServiceOperations(object):
    +    """ServiceOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +
    +        self._config = config
    +
    +    def set_properties(self, storage_service_properties, timeout=None, request_id=None, cls=None, **kwargs):
    +        """Sets properties for a storage account's Blob service endpoint,
    +        including properties for Storage Analytics and CORS (Cross-Origin
    +        Resource Sharing) rules.
    +
    +        :param storage_service_properties: The StorageService properties.
    +        :type storage_service_properties:
    +         ~azure.storage.blob.models.StorageServiceProperties
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.set_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(storage_service_properties, 'StorageServiceProperties')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    set_properties.metadata = {'url': '/'}
    +
    +    def get_properties(self, timeout=None, request_id=None, cls=None, **kwargs):
    +        """gets the properties of a storage account's Blob service, including
    +        properties for Storage Analytics and CORS (Cross-Origin Resource
    +        Sharing) rules.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageServiceProperties or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.StorageServiceProperties
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_properties.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageServiceProperties', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_properties.metadata = {'url': '/'}
    +
    +    def get_statistics(self, timeout=None, request_id=None, cls=None, **kwargs):
    +        """Retrieves statistics related to replication for the Blob service. It is
    +        only available on the secondary location endpoint when read-access
    +        geo-redundant replication is enabled for the storage account.
    +
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageServiceStats or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.StorageServiceStats
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "stats"
    +
    +        # Construct URL
    +        url = self.get_statistics.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageServiceStats', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_statistics.metadata = {'url': '/'}
    +
    +    def list_containers_segment(self, prefix=None, marker=None, maxresults=None, include=None, timeout=None, request_id=None, cls=None, **kwargs):
    +        """The List Containers Segment operation returns a list of the containers
    +        under the specified account.
    +
    +        :param prefix: Filters the results to return only containers whose
    +         name begins with the specified prefix.
    +        :type prefix: str
    +        :param marker: A string value that identifies the portion of the list
    +         of containers to be returned with the next listing operation. The
    +         operation returns the NextMarker value within the response body if the
    +         listing operation did not return all containers remaining to be listed
    +         with the current page. The NextMarker value can be used as the value
    +         for the marker parameter in a subsequent call to request the next page
    +         of list items. The marker value is opaque to the client.
    +        :type marker: str
    +        :param maxresults: Specifies the maximum number of containers to
    +         return. If the request does not specify maxresults, or specifies a
    +         value greater than 5000, the server will return up to 5000 items. Note
    +         that if the listing operation crosses a partition boundary, then the
    +         service will return a continuation token for retrieving the remainder
    +         of the results. For this reason, it is possible that the service will
    +         return fewer results than specified by maxresults, or than the default
    +         of 5000.
    +        :type maxresults: int
    +        :param include: Include this parameter to specify that the container's
    +         metadata be returned as part of the response body. Possible values
    +         include: 'metadata'
    +        :type include: str or
    +         ~azure.storage.blob.models.ListContainersIncludeType
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: ListContainersSegmentResponse or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.ListContainersSegmentResponse
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "list"
    +
    +        # Construct URL
    +        url = self.list_containers_segment.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if prefix is not None:
    +            query_parameters['prefix'] = self._serialize.query("prefix", prefix, 'str')
    +        if marker is not None:
    +            query_parameters['marker'] = self._serialize.query("marker", marker, 'str')
    +        if maxresults is not None:
    +            query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1)
    +        if include is not None:
    +            query_parameters['include'] = self._serialize.query("include", include, 'ListContainersIncludeType')
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('ListContainersSegmentResponse', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    list_containers_segment.metadata = {'url': '/'}
    +
    +    def get_user_delegation_key(self, key_info, timeout=None, request_id=None, cls=None, **kwargs):
    +        """Retrieves a user delegation key for the Blob service. This is only a
    +        valid operation when using bearer token authentication.
    +
    +        :param key_info:
    +        :type key_info: ~azure.storage.blob.models.KeyInfo
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: UserDelegationKey or the result of cls(response)
    +        :rtype: ~azure.storage.blob.models.UserDelegationKey
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "service"
    +        comp = "userdelegationkey"
    +
    +        # Construct URL
    +        url = self.get_user_delegation_key.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(key_info, 'KeyInfo')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('UserDelegationKey', response)
    +            header_dict = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    get_user_delegation_key.metadata = {'url': '/'}
    +
    +    def get_account_info(self, cls=None, **kwargs):
    +        """Returns the sku name and account kind .
    +
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        restype = "account"
    +        comp = "properties"
    +
    +        # Construct URL
    +        url = self.get_account_info.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['restype'] = self._serialize.query("restype", restype, 'str')
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {
    +                'x-ms-client-request-id': self._deserialize('str', response.headers.get('x-ms-client-request-id')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'Date': self._deserialize('rfc-1123', response.headers.get('Date')),
    +                'x-ms-sku-name': self._deserialize(models.SkuName, response.headers.get('x-ms-sku-name')),
    +                'x-ms-account-kind': self._deserialize(models.AccountKind, response.headers.get('x-ms-account-kind')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +            return cls(response, None, response_headers)
    +    get_account_info.metadata = {'url': '/'}
    +
    +    def submit_batch(self, body, content_length, multipart_content_type, timeout=None, request_id=None, cls=None, **kwargs):
    +        """The Batch operation allows multiple API calls to be embedded into a
    +        single HTTP request.
    +
    +        :param body: Initial data
    +        :type body: Generator
    +        :param content_length: The length of the request.
    +        :type content_length: long
    +        :param multipart_content_type: Required. The value of this header must
    +         be multipart/mixed with a batch boundary. Example header value:
    +         multipart/mixed; boundary=batch_
    +        :type multipart_content_type: str
    +        :param timeout: The timeout parameter is expressed in seconds. For
    +         more information, see Setting
    +         Timeouts for Blob Service Operations.
    +        :type timeout: int
    +        :param request_id: Provides a client-generated, opaque value with a 1
    +         KB character limit that is recorded in the analytics logs when storage
    +         analytics logging is enabled.
    +        :type request_id: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: object or the result of cls(response)
    +        :rtype: Generator
    +        :raises:
    +         :class:`StorageErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        comp = "batch"
    +
    +        # Construct URL
    +        url = self.submit_batch.metadata['url']
    +        path_format_arguments = {
    +            'url': self._serialize.url("self._config.url", self._config.url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        if timeout is not None:
    +            query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0)
    +        query_parameters['comp'] = self._serialize.query("comp", comp, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/xml'
    +        header_parameters['Content-Type'] = 'application/xml; charset=utf-8'
    +        header_parameters['Content-Length'] = self._serialize.header("content_length", content_length, 'long')
    +        header_parameters['Content-Type'] = self._serialize.header("multipart_content_type", multipart_content_type, 'str')
    +        header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str')
    +        if request_id is not None:
    +            header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str')
    +
    +        # Construct body
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, stream_content=body)
    +        pipeline_response = self._client._pipeline.run(request, stream=True, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.StorageErrorException(response, self._deserialize)
    +
    +        header_dict = {}
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = response.stream_download(self._client._pipeline)
    +            header_dict = {
    +                'Content-Type': self._deserialize('str', response.headers.get('Content-Type')),
    +                'x-ms-request-id': self._deserialize('str', response.headers.get('x-ms-request-id')),
    +                'x-ms-version': self._deserialize('str', response.headers.get('x-ms-version')),
    +                'x-ms-error-code': self._deserialize('str', response.headers.get('x-ms-error-code')),
    +            }
    +
    +        if cls:
    +            return cls(response, deserialized, header_dict)
    +
    +        return deserialized
    +    submit_batch.metadata = {'url': '/'}
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/version.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/version.py
    new file mode 100644
    index 000000000000..629812170000
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_generated/version.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "2019-07-07"
    +
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_lease.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_lease.py
    new file mode 100644
    index 000000000000..92dd0a33e1c0
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_lease.py
    @@ -0,0 +1,311 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, IO, Iterable, AnyStr, Dict, List, Tuple,
    +    TypeVar, TYPE_CHECKING
    +)
    +
    +from azure.core.tracing.decorator import distributed_trace
    +
    +from ._shared.response_handlers import return_response_headers, process_storage_error
    +from ._generated.models import StorageErrorException, LeaseAccessConditions
    +from ._serialize import get_modify_conditions
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from ._generated.operations import BlobOperations, ContainerOperations
    +    BlobClient = TypeVar("BlobClient")
    +    ContainerClient = TypeVar("ContainerClient")
    +
    +
    +def get_access_conditions(lease):
    +    # type: (Optional[Union[BlobLeaseClient, str]]) -> Union[LeaseAccessConditions, None]
    +    try:
    +        lease_id = lease.id # type: ignore
    +    except AttributeError:
    +        lease_id = lease # type: ignore
    +    return LeaseAccessConditions(lease_id=lease_id) if lease_id else None
    +
    +
    +class BlobLeaseClient(object):
    +    """Creates a new BlobLeaseClient.
    +
    +    This client provides lease operations on a BlobClient or ContainerClient.
    +
    +    :ivar str id:
    +        The ID of the lease currently being maintained. This will be `None` if no
    +        lease has yet been acquired.
    +    :ivar str etag:
    +        The ETag of the lease currently being maintained. This will be `None` if no
    +        lease has yet been acquired or modified.
    +    :ivar ~datetime.datetime last_modified:
    +        The last modified timestamp of the lease currently being maintained.
    +        This will be `None` if no lease has yet been acquired or modified.
    +
    +    :param client:
    +        The client of the blob or container to lease.
    +    :type client: ~azure.storage.blob.BlobClient or
    +        ~azure.storage.blob.ContainerClient
    +    :param str lease_id:
    +        A string representing the lease ID of an existing lease. This value does not
    +        need to be specified in order to acquire a new lease, or break one.
    +    """
    +    def __init__(
    +            self, client, lease_id=None
    +    ):  # pylint: disable=missing-client-constructor-parameter-credential,missing-client-constructor-parameter-kwargs
    +        # type: (Union[BlobClient, ContainerClient], Optional[str]) -> None
    +        self.id = lease_id or str(uuid.uuid4())
    +        self.last_modified = None
    +        self.etag = None
    +        if hasattr(client, 'blob_name'):
    +            self._client = client._client.blob  # type: ignore # pylint: disable=protected-access
    +        elif hasattr(client, 'container_name'):
    +            self._client = client._client.container  # type: ignore # pylint: disable=protected-access
    +        else:
    +            raise TypeError("Lease must use either BlobClient or ContainerClient.")
    +
    +    def __enter__(self):
    +        return self
    +
    +    def __exit__(self, *args):
    +        self.release()
    +
    +    @distributed_trace
    +    def acquire(self, lease_duration=-1, **kwargs):
    +        # type: (int, **Any) -> None
    +        """Requests a new lease.
    +
    +        If the container does not have an active lease, the Blob service creates a
    +        lease on the container and returns a new lease ID.
    +
    +        :param int lease_duration:
    +            Specifies the duration of the lease, in seconds, or negative one
    +            (-1) for a lease that never expires. A non-infinite lease can be
    +            between 15 and 60 seconds. A lease duration cannot be changed
    +            using renew or change. Default is -1 (infinite lease).
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = self._client.acquire_lease(
    +                timeout=kwargs.pop('timeout', None),
    +                duration=lease_duration,
    +                proposed_lease_id=self.id,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +        self.etag = kwargs.get('etag')  # type: str
    +
    +    @distributed_trace
    +    def renew(self, **kwargs):
    +        # type: (Any) -> None
    +        """Renews the lease.
    +
    +        The lease can be renewed if the lease ID specified in the
    +        lease client matches that associated with the container or blob. Note that
    +        the lease may be renewed even if it has expired as long as the container
    +        or blob has not been leased again since the expiration of that lease. When you
    +        renew a lease, the lease duration clock resets.
    +
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = self._client.renew_lease(
    +                lease_id=self.id,
    +                timeout=kwargs.pop('timeout', None),
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.etag = response.get('etag')  # type: str
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +
    +    @distributed_trace
    +    def release(self, **kwargs):
    +        # type: (Any) -> None
    +        """Release the lease.
    +
    +        The lease may be released if the client lease id specified matches
    +        that associated with the container or blob. Releasing the lease allows another client
    +        to immediately acquire the lease for the container or blob as soon as the release is complete.
    +
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = self._client.release_lease(
    +                lease_id=self.id,
    +                timeout=kwargs.pop('timeout', None),
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.etag = response.get('etag')  # type: str
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +
    +    @distributed_trace
    +    def change(self, proposed_lease_id, **kwargs):
    +        # type: (str, Any) -> None
    +        """Change the lease ID of an active lease.
    +
    +        :param str proposed_lease_id:
    +            Proposed lease ID, in a GUID string format. The Blob service returns 400
    +            (Invalid request) if the proposed lease ID is not in the correct format.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = self._client.change_lease(
    +                lease_id=self.id,
    +                proposed_lease_id=proposed_lease_id,
    +                timeout=kwargs.pop('timeout', None),
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.etag = response.get('etag')  # type: str
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +
    +    @distributed_trace
    +    def break_lease(self, lease_break_period=None, **kwargs):
    +        # type: (Optional[int], Any) -> int
    +        """Break the lease, if the container or blob has an active lease.
    +
    +        Once a lease is broken, it cannot be renewed. Any authorized request can break the lease;
    +        the request is not required to specify a matching lease ID. When a lease
    +        is broken, the lease break period is allowed to elapse, during which time
    +        no lease operation except break and release can be performed on the container or blob.
    +        When a lease is successfully broken, the response indicates the interval
    +        in seconds until a new lease can be acquired.
    +
    +        :param int lease_break_period:
    +            This is the proposed duration of seconds that the lease
    +            should continue before it is broken, between 0 and 60 seconds. This
    +            break period is only used if it is shorter than the time remaining
    +            on the lease. If longer, the time remaining on the lease is used.
    +            A new lease will not be available before the break period has
    +            expired, but the lease may be held for longer than the break
    +            period. If this header does not appear with a break
    +            operation, a fixed-duration lease breaks after the remaining lease
    +            period elapses, and an infinite lease breaks immediately.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: Approximate time remaining in the lease period, in seconds.
    +        :rtype: int
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = self._client.break_lease(
    +                timeout=kwargs.pop('timeout', None),
    +                break_period=lease_break_period,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return response.get('lease_time') # type: ignore
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_models.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_models.py
    new file mode 100644
    index 000000000000..58dfacad8a92
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_models.py
    @@ -0,0 +1,1085 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=too-few-public-methods, too-many-instance-attributes
    +# pylint: disable=super-init-not-called, too-many-lines
    +
    +from enum import Enum
    +
    +from azure.core.paging import PageIterator, ItemPaged
    +
    +from ._shared import decode_base64_to_text
    +from ._shared.response_handlers import return_context_and_deserialized, process_storage_error
    +from ._shared.models import DictMixin, get_enum_value
    +from ._generated.models import Logging as GeneratedLogging
    +from ._generated.models import Metrics as GeneratedMetrics
    +from ._generated.models import RetentionPolicy as GeneratedRetentionPolicy
    +from ._generated.models import StaticWebsite as GeneratedStaticWebsite
    +from ._generated.models import CorsRule as GeneratedCorsRule
    +from ._generated.models import AccessPolicy as GenAccessPolicy
    +from ._generated.models import StorageErrorException
    +from ._generated.models import BlobPrefix as GenBlobPrefix
    +from ._generated.models import BlobItem
    +
    +
    +class BlobType(str, Enum):
    +
    +    BlockBlob = "BlockBlob"
    +    PageBlob = "PageBlob"
    +    AppendBlob = "AppendBlob"
    +
    +
    +class BlockState(str, Enum):
    +    """Block blob block types."""
    +
    +    Committed = 'Committed'  #: Committed blocks.
    +    Latest = 'Latest'  #: Latest blocks.
    +    Uncommitted = 'Uncommitted'  #: Uncommitted blocks.
    +
    +
    +class StandardBlobTier(str, Enum):
    +    """
    +    Specifies the blob tier to set the blob to. This is only applicable for
    +    block blobs on standard storage accounts.
    +    """
    +
    +    Archive = 'Archive'  #: Archive
    +    Cool = 'Cool'  #: Cool
    +    Hot = 'Hot'  #: Hot
    +
    +
    +class PremiumPageBlobTier(str, Enum):
    +    """
    +    Specifies the page blob tier to set the blob to. This is only applicable to page
    +    blobs on premium storage accounts. Please take a look at:
    +    https://docs.microsoft.com/en-us/azure/storage/storage-premium-storage#scalability-and-performance-targets
    +    for detailed information on the corresponding IOPS and throughput per PageBlobTier.
    +    """
    +
    +    P4 = 'P4'  #: P4 Tier
    +    P6 = 'P6'  #: P6 Tier
    +    P10 = 'P10'  #: P10 Tier
    +    P20 = 'P20'  #: P20 Tier
    +    P30 = 'P30'  #: P30 Tier
    +    P40 = 'P40'  #: P40 Tier
    +    P50 = 'P50'  #: P50 Tier
    +    P60 = 'P60'  #: P60 Tier
    +
    +
    +class SequenceNumberAction(str, Enum):
    +    """Sequence number actions."""
    +
    +    Increment = 'increment'
    +    """
    +    Increments the value of the sequence number by 1. If specifying this option,
    +    do not include the x-ms-blob-sequence-number header.
    +    """
    +
    +    Max = 'max'
    +    """
    +    Sets the sequence number to be the higher of the value included with the
    +    request and the value currently stored for the blob.
    +    """
    +
    +    Update = 'update'
    +    """Sets the sequence number to the value included with the request."""
    +
    +
    +class PublicAccess(str, Enum):
    +    """
    +    Specifies whether data in the container may be accessed publicly and the level of access.
    +    """
    +
    +    OFF = 'off'
    +    """
    +    Specifies that there is no public read access for both the container and blobs within the container.
    +    Clients cannot enumerate the containers within the storage account as well as the blobs within the container.
    +    """
    +
    +    Blob = 'blob'
    +    """
    +    Specifies public read access for blobs. Blob data within this container can be read
    +    via anonymous request, but container data is not available. Clients cannot enumerate
    +    blobs within the container via anonymous request.
    +    """
    +
    +    Container = 'container'
    +    """
    +    Specifies full public read access for container and blob data. Clients can enumerate
    +    blobs within the container via anonymous request, but cannot enumerate containers
    +    within the storage account.
    +    """
    +
    +
    +class BlobAnalyticsLogging(GeneratedLogging):
    +    """Azure Analytics Logging settings.
    +
    +    :keyword str version:
    +        The version of Storage Analytics to configure. The default value is 1.0.
    +    :keyword bool delete:
    +        Indicates whether all delete requests should be logged. The default value is `False`.
    +    :keyword bool read:
    +        Indicates whether all read requests should be logged. The default value is `False`.
    +    :keyword bool write:
    +        Indicates whether all write requests should be logged. The default value is `False`.
    +    :keyword ~azure.storage.blob.RetentionPolicy retention_policy:
    +        Determines how long the associated data should persist. If not specified the retention
    +        policy will be disabled by default.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.version = kwargs.get('version', u'1.0')
    +        self.delete = kwargs.get('delete', False)
    +        self.read = kwargs.get('read', False)
    +        self.write = kwargs.get('write', False)
    +        self.retention_policy = kwargs.get('retention_policy') or RetentionPolicy()
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        if not generated:
    +            return cls()
    +        return cls(
    +            version=generated.version,
    +            delete=generated.delete,
    +            read=generated.read,
    +            write=generated.write,
    +            retention_policy=RetentionPolicy._from_generated(generated.retention_policy)  # pylint: disable=protected-access
    +        )
    +
    +
    +class Metrics(GeneratedMetrics):
    +    """A summary of request statistics grouped by API in hour or minute aggregates
    +    for blobs.
    +
    +    :keyword str version:
    +        The version of Storage Analytics to configure. The default value is 1.0.
    +    :keyword bool enabled:
    +        Indicates whether metrics are enabled for the Blob service.
    +        The default value is `False`.
    +    :keyword bool include_apis:
    +        Indicates whether metrics should generate summary statistics for called API operations.
    +    :keyword ~azure.storage.blob.RetentionPolicy retention_policy:
    +        Determines how long the associated data should persist. If not specified the retention
    +        policy will be disabled by default.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.version = kwargs.get('version', u'1.0')
    +        self.enabled = kwargs.get('enabled', False)
    +        self.include_apis = kwargs.get('include_apis')
    +        self.retention_policy = kwargs.get('retention_policy') or RetentionPolicy()
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        if not generated:
    +            return cls()
    +        return cls(
    +            version=generated.version,
    +            enabled=generated.enabled,
    +            include_apis=generated.include_apis,
    +            retention_policy=RetentionPolicy._from_generated(generated.retention_policy)  # pylint: disable=protected-access
    +        )
    +
    +
    +class RetentionPolicy(GeneratedRetentionPolicy):
    +    """The retention policy which determines how long the associated data should
    +    persist.
    +
    +    :param bool enabled:
    +        Indicates whether a retention policy is enabled for the storage service.
    +        The default value is False.
    +    :param int days:
    +        Indicates the number of days that metrics or logging or
    +        soft-deleted data should be retained. All data older than this value will
    +        be deleted. If enabled=True, the number of days must be specified.
    +    """
    +
    +    def __init__(self, enabled=False, days=None):
    +        self.enabled = enabled
    +        self.days = days
    +        if self.enabled and (self.days is None):
    +            raise ValueError("If policy is enabled, 'days' must be specified.")
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        if not generated:
    +            return cls()
    +        return cls(
    +            enabled=generated.enabled,
    +            days=generated.days,
    +        )
    +
    +
    +class StaticWebsite(GeneratedStaticWebsite):
    +    """The properties that enable an account to host a static website.
    +
    +    :keyword bool enabled:
    +        Indicates whether this account is hosting a static website.
    +        The default value is `False`.
    +    :keyword str index_document:
    +        The default name of the index page under each directory.
    +    :keyword str error_document404_path:
    +        The absolute path of the custom 404 page.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.enabled = kwargs.get('enabled', False)
    +        if self.enabled:
    +            self.index_document = kwargs.get('index_document')
    +            self.error_document404_path = kwargs.get('error_document404_path')
    +        else:
    +            self.index_document = None
    +            self.error_document404_path = None
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        if not generated:
    +            return cls()
    +        return cls(
    +            enabled=generated.enabled,
    +            index_document=generated.index_document,
    +            error_document404_path=generated.error_document404_path,
    +        )
    +
    +
    +class CorsRule(GeneratedCorsRule):
    +    """CORS is an HTTP feature that enables a web application running under one
    +    domain to access resources in another domain. Web browsers implement a
    +    security restriction known as same-origin policy that prevents a web page
    +    from calling APIs in a different domain; CORS provides a secure way to
    +    allow one domain (the origin domain) to call APIs in another domain.
    +
    +    :param list(str) allowed_origins:
    +        A list of origin domains that will be allowed via CORS, or "*" to allow
    +        all domains. The list of must contain at least one entry. Limited to 64
    +        origin domains. Each allowed origin can have up to 256 characters.
    +    :param list(str) allowed_methods:
    +        A list of HTTP methods that are allowed to be executed by the origin.
    +        The list of must contain at least one entry. For Azure Storage,
    +        permitted methods are DELETE, GET, HEAD, MERGE, POST, OPTIONS or PUT.
    +    :keyword list(str) allowed_headers:
    +        Defaults to an empty list. A list of headers allowed to be part of
    +        the cross-origin request. Limited to 64 defined headers and 2 prefixed
    +        headers. Each header can be up to 256 characters.
    +    :keyword list(str) exposed_headers:
    +        Defaults to an empty list. A list of response headers to expose to CORS
    +        clients. Limited to 64 defined headers and two prefixed headers. Each
    +        header can be up to 256 characters.
    +    :keyword int max_age_in_seconds:
    +        The number of seconds that the client/browser should cache a
    +        preflight response.
    +    """
    +
    +    def __init__(self, allowed_origins, allowed_methods, **kwargs):
    +        self.allowed_origins = ','.join(allowed_origins)
    +        self.allowed_methods = ','.join(allowed_methods)
    +        self.allowed_headers = ','.join(kwargs.get('allowed_headers', []))
    +        self.exposed_headers = ','.join(kwargs.get('exposed_headers', []))
    +        self.max_age_in_seconds = kwargs.get('max_age_in_seconds', 0)
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        return cls(
    +            [generated.allowed_origins],
    +            [generated.allowed_methods],
    +            allowed_headers=[generated.allowed_headers],
    +            exposed_headers=[generated.exposed_headers],
    +            max_age_in_seconds=generated.max_age_in_seconds,
    +        )
    +
    +
    +class ContainerProperties(DictMixin):
    +    """Blob container's properties class.
    +
    +    Returned ``ContainerProperties`` instances expose these values through a
    +    dictionary interface, for example: ``container_props["last_modified"]``.
    +    Additionally, the container name is available as ``container_props["name"]``.
    +
    +    :ivar ~datetime.datetime last_modified:
    +        A datetime object representing the last time the container was modified.
    +    :ivar str etag:
    +        The ETag contains a value that you can use to perform operations
    +        conditionally.
    +    :ivar ~azure.storage.blob.LeaseProperties lease:
    +        Stores all the lease information for the container.
    +    :ivar str public_access: Specifies whether data in the container may be accessed
    +        publicly and the level of access.
    +    :ivar bool has_immutability_policy:
    +        Represents whether the container has an immutability policy.
    +    :ivar bool has_legal_hold:
    +        Represents whether the container has a legal hold.
    +    :ivar dict metadata: A dict with name-value pairs to associate with the
    +        container as metadata.
    +    :ivar ~azure.storage.blob.ContainerEncryptionScope encryption_scope:
    +        The default encryption scope configuration for the container.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.name = None
    +        self.last_modified = kwargs.get('Last-Modified')
    +        self.etag = kwargs.get('ETag')
    +        self.lease = LeaseProperties(**kwargs)
    +        self.public_access = kwargs.get('x-ms-blob-public-access')
    +        self.has_immutability_policy = kwargs.get('x-ms-has-immutability-policy')
    +        self.has_legal_hold = kwargs.get('x-ms-has-legal-hold')
    +        self.metadata = kwargs.get('metadata')
    +        self.encryption_scope = None
    +        default_encryption_scope = kwargs.get('x-ms-default-encryption-scope')
    +        if default_encryption_scope:
    +            self.encryption_scope = ContainerEncryptionScope(
    +                default_encryption_scope=default_encryption_scope,
    +                prevent_encryption_scope_override=kwargs.get('x-ms-deny-encryption-scope-override', False)
    +            )
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        props = cls()
    +        props.name = generated.name
    +        props.last_modified = generated.properties.last_modified
    +        props.etag = generated.properties.etag
    +        props.lease = LeaseProperties._from_generated(generated)  # pylint: disable=protected-access
    +        props.public_access = generated.properties.public_access
    +        props.has_immutability_policy = generated.properties.has_immutability_policy
    +        props.has_legal_hold = generated.properties.has_legal_hold
    +        props.metadata = generated.metadata
    +        props.encryption_scope = ContainerEncryptionScope._from_generated(generated)  #pylint: disable=protected-access
    +        return props
    +
    +
    +class ContainerPropertiesPaged(PageIterator):
    +    """An Iterable of Container properties.
    +
    +    :ivar str service_endpoint: The service URL.
    +    :ivar str prefix: A container name prefix being used to filter the list.
    +    :ivar str marker: The continuation token of the current page of results.
    +    :ivar int results_per_page: The maximum number of results retrieved per API call.
    +    :ivar str continuation_token: The continuation token to retrieve the next page of results.
    +    :ivar str location_mode: The location mode being used to list results. The available
    +        options include "primary" and "secondary".
    +    :ivar current_page: The current page of listed results.
    +    :vartype current_page: list(~azure.storage.blob.ContainerProperties)
    +
    +    :param callable command: Function to retrieve the next page of items.
    +    :param str prefix: Filters the results to return only containers whose names
    +        begin with the specified prefix.
    +    :param int results_per_page: The maximum number of container names to retrieve per
    +        call.
    +    :param str continuation_token: An opaque continuation token.
    +    """
    +    def __init__(self, command, prefix=None, results_per_page=None, continuation_token=None):
    +        super(ContainerPropertiesPaged, self).__init__(
    +            get_next=self._get_next_cb,
    +            extract_data=self._extract_data_cb,
    +            continuation_token=continuation_token or ""
    +        )
    +        self._command = command
    +        self.service_endpoint = None
    +        self.prefix = prefix
    +        self.marker = None
    +        self.results_per_page = results_per_page
    +        self.location_mode = None
    +        self.current_page = []
    +
    +    def _get_next_cb(self, continuation_token):
    +        try:
    +            return self._command(
    +                marker=continuation_token or None,
    +                maxresults=self.results_per_page,
    +                cls=return_context_and_deserialized,
    +                use_location=self.location_mode)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _extract_data_cb(self, get_next_return):
    +        self.location_mode, self._response = get_next_return
    +        self.service_endpoint = self._response.service_endpoint
    +        self.prefix = self._response.prefix
    +        self.marker = self._response.marker
    +        self.results_per_page = self._response.max_results
    +        self.current_page = [self._build_item(item) for item in self._response.container_items]
    +
    +        return self._response.next_marker or None, self.current_page
    +
    +    @staticmethod
    +    def _build_item(item):
    +        return ContainerProperties._from_generated(item)  # pylint: disable=protected-access
    +
    +
    +class BlobProperties(DictMixin):
    +    """
    +    Blob Properties.
    +
    +    :ivar str name:
    +        The name of the blob.
    +    :ivar str container:
    +        The container in which the blob resides.
    +    :ivar str snapshot:
    +        Datetime value that uniquely identifies the blob snapshot.
    +    :ivar ~azure.blob.storage.BlobType blob_type:
    +        String indicating this blob's type.
    +    :ivar dict metadata:
    +        Name-value pairs associated with the blob as metadata.
    +    :ivar ~datetime.datetime last_modified:
    +        A datetime object representing the last time the blob was modified.
    +    :ivar str etag:
    +        The ETag contains a value that you can use to perform operations
    +        conditionally.
    +    :ivar int size:
    +        The size of the content returned. If the entire blob was requested,
    +        the length of blob in bytes. If a subset of the blob was requested, the
    +        length of the returned subset.
    +    :ivar str content_range:
    +        Indicates the range of bytes returned in the event that the client
    +        requested a subset of the blob.
    +    :ivar int append_blob_committed_block_count:
    +        (For Append Blobs) Number of committed blocks in the blob.
    +    :ivar int page_blob_sequence_number:
    +        (For Page Blobs) Sequence number for page blob used for coordinating
    +        concurrent writes.
    +    :ivar bool server_encrypted:
    +        Set to true if the blob is encrypted on the server.
    +    :ivar ~azure.storage.blob.CopyProperties copy:
    +        Stores all the copy properties for the blob.
    +    :ivar ~azure.storage.blob.ContentSettings content_settings:
    +        Stores all the content settings for the blob.
    +    :ivar ~azure.storage.blob.LeaseProperties lease:
    +        Stores all the lease information for the blob.
    +    :ivar ~azure.storage.blob.StandardBlobTier blob_tier:
    +        Indicates the access tier of the blob. The hot tier is optimized
    +        for storing data that is accessed frequently. The cool storage tier
    +        is optimized for storing data that is infrequently accessed and stored
    +        for at least a month. The archive tier is optimized for storing
    +        data that is rarely accessed and stored for at least six months
    +        with flexible latency requirements.
    +    :ivar ~datetime.datetime blob_tier_change_time:
    +        Indicates when the access tier was last changed.
    +    :ivar bool blob_tier_inferred:
    +        Indicates whether the access tier was inferred by the service.
    +        If false, it indicates that the tier was set explicitly.
    +    :ivar bool deleted:
    +        Whether this blob was deleted.
    +    :ivar ~datetime.datetime deleted_time:
    +        A datetime object representing the time at which the blob was deleted.
    +    :ivar int remaining_retention_days:
    +        The number of days that the blob will be retained before being permanently deleted by the service.
    +    :ivar ~datetime.datetime creation_time:
    +        Indicates when the blob was created, in UTC.
    +    :ivar str archive_status:
    +        Archive status of blob.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.name = kwargs.get('name')
    +        self.container = None
    +        self.snapshot = kwargs.get('x-ms-snapshot')
    +        self.blob_type = BlobType(kwargs['x-ms-blob-type']) if kwargs.get('x-ms-blob-type') else None
    +        self.metadata = kwargs.get('metadata')
    +        self.encrypted_metadata = kwargs.get('encrypted_metadata')
    +        self.last_modified = kwargs.get('Last-Modified')
    +        self.etag = kwargs.get('ETag')
    +        self.size = kwargs.get('Content-Length')
    +        self.content_range = kwargs.get('Content-Range')
    +        self.append_blob_committed_block_count = kwargs.get('x-ms-blob-committed-block-count')
    +        self.page_blob_sequence_number = kwargs.get('x-ms-blob-sequence-number')
    +        self.server_encrypted = kwargs.get('x-ms-server-encrypted')
    +        self.copy = CopyProperties(**kwargs)
    +        self.content_settings = ContentSettings(**kwargs)
    +        self.lease = LeaseProperties(**kwargs)
    +        self.blob_tier = kwargs.get('x-ms-access-tier')
    +        self.blob_tier_change_time = kwargs.get('x-ms-access-tier-change-time')
    +        self.blob_tier_inferred = kwargs.get('x-ms-access-tier-inferred')
    +        self.deleted = False
    +        self.deleted_time = None
    +        self.remaining_retention_days = None
    +        self.creation_time = kwargs.get('x-ms-creation-time')
    +        self.archive_status = kwargs.get('x-ms-archive-status')
    +        self.encryption_key_sha256 = kwargs.get('x-ms-encryption-key-sha256')
    +        self.encryption_scope = kwargs.get('x-ms-encryption-scope')
    +        self.request_server_encrypted = kwargs.get('x-ms-server-encrypted')
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        blob = BlobProperties()
    +        blob.name = generated.name
    +        blob_type = get_enum_value(generated.properties.blob_type)
    +        blob.blob_type = BlobType(blob_type) if blob_type else None
    +        blob.etag = generated.properties.etag
    +        blob.deleted = generated.deleted
    +        blob.snapshot = generated.snapshot
    +        blob.metadata = generated.metadata.additional_properties if generated.metadata else {}
    +        blob.encrypted_metadata = generated.metadata.encrypted if generated.metadata else None
    +        blob.lease = LeaseProperties._from_generated(generated)  # pylint: disable=protected-access
    +        blob.copy = CopyProperties._from_generated(generated)  # pylint: disable=protected-access
    +        blob.last_modified = generated.properties.last_modified
    +        blob.creation_time = generated.properties.creation_time
    +        blob.content_settings = ContentSettings._from_generated(generated)  # pylint: disable=protected-access
    +        blob.size = generated.properties.content_length
    +        blob.page_blob_sequence_number = generated.properties.blob_sequence_number
    +        blob.server_encrypted = generated.properties.server_encrypted
    +        blob.encryption_scope = generated.properties.encryption_scope
    +        blob.deleted_time = generated.properties.deleted_time
    +        blob.remaining_retention_days = generated.properties.remaining_retention_days
    +        blob.blob_tier = generated.properties.access_tier
    +        blob.blob_tier_inferred = generated.properties.access_tier_inferred
    +        blob.archive_status = generated.properties.archive_status
    +        blob.blob_tier_change_time = generated.properties.access_tier_change_time
    +        return blob
    +
    +
    +class BlobPropertiesPaged(PageIterator):
    +    """An Iterable of Blob properties.
    +
    +    :ivar str service_endpoint: The service URL.
    +    :ivar str prefix: A blob name prefix being used to filter the list.
    +    :ivar str marker: The continuation token of the current page of results.
    +    :ivar int results_per_page: The maximum number of results retrieved per API call.
    +    :ivar str continuation_token: The continuation token to retrieve the next page of results.
    +    :ivar str location_mode: The location mode being used to list results. The available
    +        options include "primary" and "secondary".
    +    :ivar current_page: The current page of listed results.
    +    :vartype current_page: list(~azure.storage.blob.BlobProperties)
    +    :ivar str container: The container that the blobs are listed from.
    +    :ivar str delimiter: A delimiting character used for hierarchy listing.
    +
    +    :param callable command: Function to retrieve the next page of items.
    +    :param str container: The name of the container.
    +    :param str prefix: Filters the results to return only blobs whose names
    +        begin with the specified prefix.
    +    :param int results_per_page: The maximum number of blobs to retrieve per
    +        call.
    +    :param str continuation_token: An opaque continuation token.
    +    :param str delimiter:
    +        Used to capture blobs whose names begin with the same substring up to
    +        the appearance of the delimiter character. The delimiter may be a single
    +        character or a string.
    +    :param location_mode: Specifies the location the request should be sent to.
    +        This mode only applies for RA-GRS accounts which allow secondary read access.
    +        Options include 'primary' or 'secondary'.
    +    """
    +    def __init__(
    +            self, command,
    +            container=None,
    +            prefix=None,
    +            results_per_page=None,
    +            continuation_token=None,
    +            delimiter=None,
    +            location_mode=None):
    +        super(BlobPropertiesPaged, self).__init__(
    +            get_next=self._get_next_cb,
    +            extract_data=self._extract_data_cb,
    +            continuation_token=continuation_token or ""
    +        )
    +        self._command = command
    +        self.service_endpoint = None
    +        self.prefix = prefix
    +        self.marker = None
    +        self.results_per_page = results_per_page
    +        self.container = container
    +        self.delimiter = delimiter
    +        self.current_page = None
    +        self.location_mode = location_mode
    +
    +    def _get_next_cb(self, continuation_token):
    +        try:
    +            return self._command(
    +                prefix=self.prefix,
    +                marker=continuation_token or None,
    +                maxresults=self.results_per_page,
    +                cls=return_context_and_deserialized,
    +                use_location=self.location_mode)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    def _extract_data_cb(self, get_next_return):
    +        self.location_mode, self._response = get_next_return
    +        self.service_endpoint = self._response.service_endpoint
    +        self.prefix = self._response.prefix
    +        self.marker = self._response.marker
    +        self.results_per_page = self._response.max_results
    +        self.container = self._response.container_name
    +        self.current_page = [self._build_item(item) for item in self._response.segment.blob_items]
    +
    +        return self._response.next_marker or None, self.current_page
    +
    +    def _build_item(self, item):
    +        if isinstance(item, BlobProperties):
    +            return item
    +        if isinstance(item, BlobItem):
    +            blob = BlobProperties._from_generated(item)  # pylint: disable=protected-access
    +            blob.container = self.container
    +            return blob
    +        return item
    +
    +
    +class BlobPrefix(ItemPaged, DictMixin):
    +    """An Iterable of Blob properties.
    +
    +    Returned from walk_blobs when a delimiter is used.
    +    Can be thought of as a virtual blob directory.
    +
    +    :ivar str name: The prefix, or "directory name" of the blob.
    +    :ivar str service_endpoint: The service URL.
    +    :ivar str prefix: A blob name prefix being used to filter the list.
    +    :ivar str marker: The continuation token of the current page of results.
    +    :ivar int results_per_page: The maximum number of results retrieved per API call.
    +    :ivar str next_marker: The continuation token to retrieve the next page of results.
    +    :ivar str location_mode: The location mode being used to list results. The available
    +        options include "primary" and "secondary".
    +    :ivar current_page: The current page of listed results.
    +    :vartype current_page: list(~azure.storage.blob.BlobProperties)
    +    :ivar str container: The container that the blobs are listed from.
    +    :ivar str delimiter: A delimiting character used for hierarchy listing.
    +
    +    :param callable command: Function to retrieve the next page of items.
    +    :param str prefix: Filters the results to return only blobs whose names
    +        begin with the specified prefix.
    +    :param int results_per_page: The maximum number of blobs to retrieve per
    +        call.
    +    :param str marker: An opaque continuation token.
    +    :param str delimiter:
    +        Used to capture blobs whose names begin with the same substring up to
    +        the appearance of the delimiter character. The delimiter may be a single
    +        character or a string.
    +    :param location_mode: Specifies the location the request should be sent to.
    +        This mode only applies for RA-GRS accounts which allow secondary read access.
    +        Options include 'primary' or 'secondary'.
    +    """
    +    def __init__(self, *args, **kwargs):
    +        super(BlobPrefix, self).__init__(*args, page_iterator_class=BlobPrefixPaged, **kwargs)
    +        self.name = kwargs.get('prefix')
    +        self.prefix = kwargs.get('prefix')
    +        self.results_per_page = kwargs.get('results_per_page')
    +        self.container = kwargs.get('container')
    +        self.delimiter = kwargs.get('delimiter')
    +        self.location_mode = kwargs.get('location_mode')
    +
    +
    +class BlobPrefixPaged(BlobPropertiesPaged):
    +    def __init__(self, *args, **kwargs):
    +        super(BlobPrefixPaged, self).__init__(*args, **kwargs)
    +        self.name = self.prefix
    +
    +    def _extract_data_cb(self, get_next_return):
    +        continuation_token, _ = super(BlobPrefixPaged, self)._extract_data_cb(get_next_return)
    +        self.current_page = self._response.segment.blob_prefixes + self._response.segment.blob_items
    +        self.current_page = [self._build_item(item) for item in self.current_page]
    +        self.delimiter = self._response.delimiter
    +
    +        return continuation_token, self.current_page
    +
    +    def _build_item(self, item):
    +        item = super(BlobPrefixPaged, self)._build_item(item)
    +        if isinstance(item, GenBlobPrefix):
    +            return BlobPrefix(
    +                self._command,
    +                container=self.container,
    +                prefix=item.name,
    +                results_per_page=self.results_per_page,
    +                location_mode=self.location_mode)
    +        return item
    +
    +
    +class LeaseProperties(DictMixin):
    +    """Blob Lease Properties.
    +
    +    :ivar str status:
    +        The lease status of the blob. Possible values: locked|unlocked
    +    :ivar str state:
    +        Lease state of the blob. Possible values: available|leased|expired|breaking|broken
    +    :ivar str duration:
    +        When a blob is leased, specifies whether the lease is of infinite or fixed duration.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.status = get_enum_value(kwargs.get('x-ms-lease-status'))
    +        self.state = get_enum_value(kwargs.get('x-ms-lease-state'))
    +        self.duration = get_enum_value(kwargs.get('x-ms-lease-duration'))
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        lease = cls()
    +        lease.status = get_enum_value(generated.properties.lease_status)
    +        lease.state = get_enum_value(generated.properties.lease_state)
    +        lease.duration = get_enum_value(generated.properties.lease_duration)
    +        return lease
    +
    +
    +class ContentSettings(DictMixin):
    +    """The content settings of a blob.
    +
    +    :param str content_type:
    +        The content type specified for the blob. If no content type was
    +        specified, the default content type is application/octet-stream.
    +    :param str content_encoding:
    +        If the content_encoding has previously been set
    +        for the blob, that value is stored.
    +    :param str content_language:
    +        If the content_language has previously been set
    +        for the blob, that value is stored.
    +    :param str content_disposition:
    +        content_disposition conveys additional information about how to
    +        process the response payload, and also can be used to attach
    +        additional metadata. If content_disposition has previously been set
    +        for the blob, that value is stored.
    +    :param str cache_control:
    +        If the cache_control has previously been set for
    +        the blob, that value is stored.
    +    :param str content_md5:
    +        If the content_md5 has been set for the blob, this response
    +        header is stored so that the client can check for message content
    +        integrity.
    +    """
    +
    +    def __init__(
    +            self, content_type=None, content_encoding=None,
    +            content_language=None, content_disposition=None,
    +            cache_control=None, content_md5=None, **kwargs):
    +
    +        self.content_type = content_type or kwargs.get('Content-Type')
    +        self.content_encoding = content_encoding or kwargs.get('Content-Encoding')
    +        self.content_language = content_language or kwargs.get('Content-Language')
    +        self.content_md5 = content_md5 or kwargs.get('Content-MD5')
    +        self.content_disposition = content_disposition or kwargs.get('Content-Disposition')
    +        self.cache_control = cache_control or kwargs.get('Cache-Control')
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        settings = cls()
    +        settings.content_type = generated.properties.content_type or None
    +        settings.content_encoding = generated.properties.content_encoding or None
    +        settings.content_language = generated.properties.content_language or None
    +        settings.content_md5 = generated.properties.content_md5 or None
    +        settings.content_disposition = generated.properties.content_disposition or None
    +        settings.cache_control = generated.properties.cache_control or None
    +        return settings
    +
    +
    +class CopyProperties(DictMixin):
    +    """Blob Copy Properties.
    +
    +    These properties will be `None` if this blob has never been the destination
    +    in a Copy Blob operation, or if this blob has been modified after a concluded
    +    Copy Blob operation, for example, using Set Blob Properties, Upload Blob, or Commit Block List.
    +
    +    :ivar str id:
    +        String identifier for the last attempted Copy Blob operation where this blob
    +        was the destination blob.
    +    :ivar str source:
    +        URL up to 2 KB in length that specifies the source blob used in the last attempted
    +        Copy Blob operation where this blob was the destination blob.
    +    :ivar str status:
    +        State of the copy operation identified by Copy ID, with these values:
    +            success:
    +                Copy completed successfully.
    +            pending:
    +                Copy is in progress. Check copy_status_description if intermittent,
    +                non-fatal errors impede copy progress but don't cause failure.
    +            aborted:
    +                Copy was ended by Abort Copy Blob.
    +            failed:
    +                Copy failed. See copy_status_description for failure details.
    +    :ivar str progress:
    +        Contains the number of bytes copied and the total bytes in the source in the last
    +        attempted Copy Blob operation where this blob was the destination blob. Can show
    +        between 0 and Content-Length bytes copied.
    +    :ivar ~datetime.datetime completion_time:
    +        Conclusion time of the last attempted Copy Blob operation where this blob was the
    +        destination blob. This value can specify the time of a completed, aborted, or
    +        failed copy attempt.
    +    :ivar str status_description:
    +        Only appears when x-ms-copy-status is failed or pending. Describes cause of fatal
    +        or non-fatal copy operation failure.
    +    :ivar bool incremental_copy:
    +        Copies the snapshot of the source page blob to a destination page blob.
    +        The snapshot is copied such that only the differential changes between
    +        the previously copied snapshot are transferred to the destination
    +    :ivar ~datetime.datetime destination_snapshot:
    +        Included if the blob is incremental copy blob or incremental copy snapshot,
    +        if x-ms-copy-status is success. Snapshot time of the last successful
    +        incremental copy snapshot for this blob.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.id = kwargs.get('x-ms-copy-id')
    +        self.source = kwargs.get('x-ms-copy-source')
    +        self.status = get_enum_value(kwargs.get('x-ms-copy-status'))
    +        self.progress = kwargs.get('x-ms-copy-progress')
    +        self.completion_time = kwargs.get('x-ms-copy-completion_time')
    +        self.status_description = kwargs.get('x-ms-copy-status-description')
    +        self.incremental_copy = kwargs.get('x-ms-incremental-copy')
    +        self.destination_snapshot = kwargs.get('x-ms-copy-destination-snapshot')
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        copy = cls()
    +        copy.id = generated.properties.copy_id or None
    +        copy.status = get_enum_value(generated.properties.copy_status) or None
    +        copy.source = generated.properties.copy_source or None
    +        copy.progress = generated.properties.copy_progress or None
    +        copy.completion_time = generated.properties.copy_completion_time or None
    +        copy.status_description = generated.properties.copy_status_description or None
    +        copy.incremental_copy = generated.properties.incremental_copy or None
    +        copy.destination_snapshot = generated.properties.destination_snapshot or None
    +        return copy
    +
    +
    +class BlobBlock(DictMixin):
    +    """BlockBlob Block class.
    +
    +    :param str block_id:
    +        Block id.
    +    :param str state:
    +        Block state. Possible values: committed|uncommitted
    +    :ivar int size:
    +        Block size in bytes.
    +    """
    +
    +    def __init__(self, block_id, state=BlockState.Latest):
    +        self.id = block_id
    +        self.state = state
    +        self.size = None
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        block = cls(decode_base64_to_text(generated.name))
    +        block.size = generated.size
    +        return block
    +
    +
    +class PageRange(DictMixin):
    +    """Page Range for page blob.
    +
    +    :param int start:
    +        Start of page range in bytes.
    +    :param int end:
    +        End of page range in bytes.
    +    """
    +
    +    def __init__(self, start=None, end=None):
    +        self.start = start
    +        self.end = end
    +
    +
    +class AccessPolicy(GenAccessPolicy):
    +    """Access Policy class used by the set and get access policy methods in each service.
    +
    +    A stored access policy can specify the start time, expiry time, and
    +    permissions for the Shared Access Signatures with which it's associated.
    +    Depending on how you want to control access to your resource, you can
    +    specify all of these parameters within the stored access policy, and omit
    +    them from the URL for the Shared Access Signature. Doing so permits you to
    +    modify the associated signature's behavior at any time, as well as to revoke
    +    it. Or you can specify one or more of the access policy parameters within
    +    the stored access policy, and the others on the URL. Finally, you can
    +    specify all of the parameters on the URL. In this case, you can use the
    +    stored access policy to revoke the signature, but not to modify its behavior.
    +
    +    Together the Shared Access Signature and the stored access policy must
    +    include all fields required to authenticate the signature. If any required
    +    fields are missing, the request will fail. Likewise, if a field is specified
    +    both in the Shared Access Signature URL and in the stored access policy, the
    +    request will fail with status code 400 (Bad Request).
    +
    +    :param permission:
    +        The permissions associated with the shared access signature. The
    +        user is restricted to operations allowed by the permissions.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has been
    +        specified in an associated stored access policy.
    +    :type permission: str or ~azure.storage.blob.ContainerSasPermissions
    +    :param expiry:
    +        The time at which the shared access signature becomes invalid.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has
    +        been specified in an associated stored access policy. Azure will always
    +        convert values to UTC. If a date is passed in without timezone info, it
    +        is assumed to be UTC.
    +    :type expiry: ~datetime.datetime or str
    +    :param start:
    +        The time at which the shared access signature becomes valid. If
    +        omitted, start time for this call is assumed to be the time when the
    +        storage service receives the request. Azure will always convert values
    +        to UTC. If a date is passed in without timezone info, it is assumed to
    +        be UTC.
    +    :type start: ~datetime.datetime or str
    +    """
    +    def __init__(self, permission=None, expiry=None, start=None):
    +        self.start = start
    +        self.expiry = expiry
    +        self.permission = permission
    +
    +
    +class ContainerSasPermissions(object):
    +    """ContainerSasPermissions class to be used with the
    +    :func:`~azure.storage.blob.generate_container_sas` function and
    +    for the AccessPolicies used with
    +    :func:`~azure.storage.blob.ContainerClient.set_container_access_policy`.
    +
    +    :param bool read:
    +        Read the content, properties, metadata or block list of any blob in the
    +        container. Use any blob in the container as the source of a copy operation.
    +    :param bool write:
    +        For any blob in the container, create or write content, properties,
    +        metadata, or block list. Snapshot or lease the blob. Resize the blob
    +        (page blob only). Use the blob as the destination of a copy operation
    +        within the same account. Note: You cannot grant permissions to read or
    +        write container properties or metadata, nor to lease a container, with
    +        a container SAS. Use an account SAS instead.
    +    :param bool delete:
    +        Delete any blob in the container. Note: You cannot grant permissions to
    +        delete a container with a container SAS. Use an account SAS instead.
    +    :param bool list:
    +        List blobs in the container.
    +    """
    +    def __init__(self, read=False, write=False, delete=False, list=False):  # pylint: disable=redefined-builtin
    +        self.read = read
    +        self.write = write
    +        self.delete = delete
    +        self.list = list
    +        self._str = (('r' if self.read else '') +
    +                     ('w' if self.write else '') +
    +                     ('d' if self.delete else '') +
    +                     ('l' if self.list else ''))
    +
    +    def __str__(self):
    +        return self._str
    +
    +    @classmethod
    +    def from_string(cls, permission):
    +        """Create a ContainerSasPermissions from a string.
    +
    +        To specify read, write, delete, or list permissions you need only to
    +        include the first letter of the word in the string. E.g. For read and
    +        write permissions, you would provide a string "rw".
    +
    +        :param str permission: The string which dictates the read, write, delete,
    +            and list permissions.
    +        :return: A ContainerSasPermissions object
    +        :rtype: ~azure.storage.blob.ContainerSasPermissions
    +        """
    +        p_read = 'r' in permission
    +        p_write = 'w' in permission
    +        p_delete = 'd' in permission
    +        p_list = 'l' in permission
    +        parsed = cls(p_read, p_write, p_delete, p_list)
    +        parsed._str = permission # pylint: disable = protected-access
    +        return parsed
    +
    +
    +class BlobSasPermissions(object):
    +    """BlobSasPermissions class to be used with the
    +    :func:`~azure.storage.blob.generate_blob_sas` function.
    +
    +    :param bool read:
    +        Read the content, properties, metadata and block list. Use the blob as
    +        the source of a copy operation.
    +    :param bool add:
    +        Add a block to an append blob.
    +    :param bool create:
    +        Write a new blob, snapshot a blob, or copy a blob to a new blob.
    +    :param bool write:
    +        Create or write content, properties, metadata, or block list. Snapshot
    +        or lease the blob. Resize the blob (page blob only). Use the blob as the
    +        destination of a copy operation within the same account.
    +    :param bool delete:
    +        Delete the blob.
    +    """
    +    def __init__(self, read=False, add=False, create=False, write=False,
    +                 delete=False):
    +        self.read = read
    +        self.add = add
    +        self.create = create
    +        self.write = write
    +        self.delete = delete
    +        self._str = (('r' if self.read else '') +
    +                     ('a' if self.add else '') +
    +                     ('c' if self.create else '') +
    +                     ('w' if self.write else '') +
    +                     ('d' if self.delete else ''))
    +
    +    def __str__(self):
    +        return self._str
    +
    +    @classmethod
    +    def from_string(cls, permission):
    +        """Create a BlobSasPermissions from a string.
    +
    +        To specify read, add, create, write, or delete permissions you need only to
    +        include the first letter of the word in the string. E.g. For read and
    +        write permissions, you would provide a string "rw".
    +
    +        :param str permission: The string which dictates the read, add, create,
    +            write, or delete permissions.
    +        :return: A BlobSasPermissions object
    +        :rtype: ~azure.storage.blob.BlobSasPermissions
    +        """
    +        p_read = 'r' in permission
    +        p_add = 'a' in permission
    +        p_create = 'c' in permission
    +        p_write = 'w' in permission
    +        p_delete = 'd' in permission
    +
    +        parsed = cls(p_read, p_add, p_create, p_write, p_delete)
    +        parsed._str = permission # pylint: disable = protected-access
    +        return parsed
    +
    +
    +class CustomerProvidedEncryptionKey(object):
    +    """
    +    All data in Azure Storage is encrypted at-rest using an account-level encryption key.
    +    In versions 2018-06-17 and newer, you can manage the key used to encrypt blob contents
    +    and application metadata per-blob by providing an AES-256 encryption key in requests to the storage service.
    +
    +    When you use a customer-provided key, Azure Storage does not manage or persist your key.
    +    When writing data to a blob, the provided key is used to encrypt your data before writing it to disk.
    +    A SHA-256 hash of the encryption key is written alongside the blob contents,
    +    and is used to verify that all subsequent operations against the blob use the same encryption key.
    +    This hash cannot be used to retrieve the encryption key or decrypt the contents of the blob.
    +    When reading a blob, the provided key is used to decrypt your data after reading it from disk.
    +    In both cases, the provided encryption key is securely discarded
    +    as soon as the encryption or decryption process completes.
    +
    +    :param str key_value:
    +        Base64-encoded AES-256 encryption key value.
    +    :param str key_hash:
    +        Base64-encoded SHA256 of the encryption key.
    +    :ivar str algorithm:
    +        Specifies the algorithm to use when encrypting data using the given key. Must be AES256.
    +    """
    +    def __init__(self, key_value, key_hash):
    +        self.key_value = key_value
    +        self.key_hash = key_hash
    +        self.algorithm = 'AES256'
    +
    +
    +class ContainerEncryptionScope(object):
    +    """The default encryption scope configuration for a container.
    +
    +    This scope is used implicitly for all future writes within the container,
    +    but can be overridden per blob operation.
    +
    +    .. versionadded:: 12.2.0
    +
    +    :param str default_encryption_scope:
    +        Specifies the default encryption scope to set on the container and use for
    +        all future writes.
    +    :param bool prevent_encryption_scope_override:
    +        If true, prevents any request from specifying a different encryption scope than the scope
    +        set on the container. Default value is false.
    +    """
    +
    +    def __init__(self, default_encryption_scope, **kwargs):
    +        self.default_encryption_scope = default_encryption_scope
    +        self.prevent_encryption_scope_override = kwargs.get('prevent_encryption_scope_override', False)
    +
    +    @classmethod
    +    def _from_generated(cls, generated):
    +        if generated.properties.default_encryption_scope:
    +            scope = cls(
    +                generated.properties.default_encryption_scope,
    +                prevent_encryption_scope_override=generated.properties.deny_encryption_scope_override or False
    +            )
    +            return scope
    +        return None
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_serialize.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_serialize.py
    new file mode 100644
    index 000000000000..0f202b865ce3
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_serialize.py
    @@ -0,0 +1,103 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=no-self-use
    +
    +from azure.core import MatchConditions
    +
    +from ._models import ContainerEncryptionScope
    +from ._generated.models import (
    +    ModifiedAccessConditions,
    +    SourceModifiedAccessConditions,
    +    CpkScopeInfo,
    +    ContainerCpkScopeInfo
    +)
    +
    +
    +_SUPPORTED_API_VERSIONS = [
    +    '2019-02-02',
    +    '2019-07-07'
    +]
    +
    +
    +def _get_match_headers(kwargs, match_param, etag_param):
    +    # type: (str) -> Tuple(Dict[str, Any], Optional[str], Optional[str])
    +    if_match = None
    +    if_none_match = None
    +    match_condition = kwargs.pop(match_param, None)
    +    if match_condition == MatchConditions.IfNotModified:
    +        if_match = kwargs.pop(etag_param, None)
    +        if not if_match:
    +            raise ValueError("'{}' specified without '{}'.".format(match_param, etag_param))
    +    elif match_condition == MatchConditions.IfPresent:
    +        if_match = '*'
    +    elif match_condition == MatchConditions.IfModified:
    +        if_none_match = kwargs.pop(etag_param, None)
    +        if not if_none_match:
    +            raise ValueError("'{}' specified without '{}'.".format(match_param, etag_param))
    +    elif match_condition == MatchConditions.IfMissing:
    +        if_none_match = '*'
    +    elif match_condition is None:
    +        if etag_param in kwargs:
    +            raise ValueError("'{}' specified without '{}'.".format(etag_param, match_param))
    +    else:
    +        raise TypeError("Invalid match condition: {}".format(match_condition))
    +    return if_match, if_none_match
    +
    +
    +def get_modify_conditions(kwargs):
    +    # type: (Dict[str, Any]) -> ModifiedAccessConditions
    +    if_match, if_none_match = _get_match_headers(kwargs, 'match_condition', 'etag')
    +    return ModifiedAccessConditions(
    +        if_modified_since=kwargs.pop('if_modified_since', None),
    +        if_unmodified_since=kwargs.pop('if_unmodified_since', None),
    +        if_match=if_match or kwargs.pop('if_match', None),
    +        if_none_match=if_none_match or kwargs.pop('if_none_match', None)
    +    )
    +
    +
    +def get_source_conditions(kwargs):
    +    # type: (Dict[str, Any]) -> SourceModifiedAccessConditions
    +    if_match, if_none_match = _get_match_headers(kwargs, 'source_match_condition', 'source_etag')
    +    return SourceModifiedAccessConditions(
    +        source_if_modified_since=kwargs.pop('source_if_modified_since', None),
    +        source_if_unmodified_since=kwargs.pop('source_if_unmodified_since', None),
    +        source_if_match=if_match or kwargs.pop('source_if_match', None),
    +        source_if_none_match=if_none_match or kwargs.pop('source_if_none_match', None)
    +    )
    +
    +
    +def get_cpk_scope_info(kwargs):
    +    # type: (Dict[str, Any]) -> CpkScopeInfo
    +    if 'encryption_scope' in kwargs:
    +        return CpkScopeInfo(encryption_scope=kwargs.pop('encryption_scope'))
    +    return None
    +
    +
    +def get_container_cpk_scope_info(kwargs):
    +    # type: (Dict[str, Any]) -> ContainerCpkScopeInfo
    +    encryption_scope = kwargs.pop('container_encryption_scope', None)
    +    if encryption_scope:
    +        if isinstance(encryption_scope, ContainerEncryptionScope):
    +            return ContainerCpkScopeInfo(
    +                default_encryption_scope=encryption_scope.default_encryption_scope,
    +                deny_encryption_scope_override=encryption_scope.prevent_encryption_scope_override
    +            )
    +        if isinstance(encryption_scope, dict):
    +            return ContainerCpkScopeInfo(
    +                default_encryption_scope=encryption_scope['default_encryption_scope'],
    +                deny_encryption_scope_override=encryption_scope.get('prevent_encryption_scope_override')
    +            )
    +        raise TypeError("Container encryption scope must be dict or type ContainerEncryptionScope.")
    +    return None
    +
    +
    +def get_api_version(kwargs, default):
    +    # type: (Dict[str, Any]) -> str
    +    api_version = kwargs.pop('api_version', None)
    +    if api_version and api_version not in _SUPPORTED_API_VERSIONS:
    +        versions = '\n'.join(_SUPPORTED_API_VERSIONS)
    +        raise ValueError("Unsupported API version '{}'. Please select from:\n{}".format(api_version, versions))
    +    return api_version or default
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/__init__.py
    new file mode 100644
    index 000000000000..160f88223820
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/__init__.py
    @@ -0,0 +1,56 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import base64
    +import hashlib
    +import hmac
    +
    +try:
    +    from urllib.parse import quote, unquote
    +except ImportError:
    +    from urllib2 import quote, unquote # type: ignore
    +
    +import six
    +
    +
    +def url_quote(url):
    +    return quote(url)
    +
    +
    +def url_unquote(url):
    +    return unquote(url)
    +
    +
    +def encode_base64(data):
    +    if isinstance(data, six.text_type):
    +        data = data.encode('utf-8')
    +    encoded = base64.b64encode(data)
    +    return encoded.decode('utf-8')
    +
    +
    +def decode_base64_to_bytes(data):
    +    if isinstance(data, six.text_type):
    +        data = data.encode('utf-8')
    +    return base64.b64decode(data)
    +
    +
    +def decode_base64_to_text(data):
    +    decoded_bytes = decode_base64_to_bytes(data)
    +    return decoded_bytes.decode('utf-8')
    +
    +
    +def sign_string(key, string_to_sign, key_is_base64=True):
    +    if key_is_base64:
    +        key = decode_base64_to_bytes(key)
    +    else:
    +        if isinstance(key, six.text_type):
    +            key = key.encode('utf-8')
    +    if isinstance(string_to_sign, six.text_type):
    +        string_to_sign = string_to_sign.encode('utf-8')
    +    signed_hmac_sha256 = hmac.HMAC(key, string_to_sign, hashlib.sha256)
    +    digest = signed_hmac_sha256.digest()
    +    encoded_digest = encode_base64(digest)
    +    return encoded_digest
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/authentication.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/authentication.py
    new file mode 100644
    index 000000000000..a8db96d4a051
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/authentication.py
    @@ -0,0 +1,136 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import logging
    +import sys
    +
    +try:
    +    from urllib.parse import urlparse, unquote
    +except ImportError:
    +    from urlparse import urlparse # type: ignore
    +    from urllib2 import unquote # type: ignore
    +
    +try:
    +    from yarl import URL
    +except ImportError:
    +    pass
    +
    +try:
    +    from azure.core.pipeline.transport import AioHttpTransport
    +except ImportError:
    +    AioHttpTransport = None
    +
    +from azure.core.exceptions import ClientAuthenticationError
    +from azure.core.pipeline.policies import SansIOHTTPPolicy
    +
    +from . import sign_string
    +
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +# wraps a given exception with the desired exception type
    +def _wrap_exception(ex, desired_type):
    +    msg = ""
    +    if ex.args:
    +        msg = ex.args[0]
    +    if sys.version_info >= (3,):
    +        # Automatic chaining in Python 3 means we keep the trace
    +        return desired_type(msg)
    +    # There isn't a good solution in 2 for keeping the stack trace
    +    # in general, or that will not result in an error in 3
    +    # However, we can keep the previous error type and message
    +    # TODO: In the future we will log the trace
    +    return desired_type('{}: {}'.format(ex.__class__.__name__, msg))
    +
    +
    +class AzureSigningError(ClientAuthenticationError):
    +    """
    +    Represents a fatal error when attempting to sign a request.
    +    In general, the cause of this exception is user error. For example, the given account key is not valid.
    +    Please visit https://docs.microsoft.com/en-us/azure/storage/common/storage-create-storage-account for more info.
    +    """
    +
    +
    +# pylint: disable=no-self-use
    +class SharedKeyCredentialPolicy(SansIOHTTPPolicy):
    +
    +    def __init__(self, account_name, account_key):
    +        self.account_name = account_name
    +        self.account_key = account_key
    +        super(SharedKeyCredentialPolicy, self).__init__()
    +
    +    def _get_headers(self, request, headers_to_sign):
    +        headers = dict((name.lower(), value) for name, value in request.http_request.headers.items() if value)
    +        if 'content-length' in headers and headers['content-length'] == '0':
    +            del headers['content-length']
    +        return '\n'.join(headers.get(x, '') for x in headers_to_sign) + '\n'
    +
    +    def _get_verb(self, request):
    +        return request.http_request.method + '\n'
    +
    +    def _get_canonicalized_resource(self, request):
    +        uri_path = urlparse(request.http_request.url).path
    +        try:
    +            if isinstance(request.context.transport, AioHttpTransport) or \
    +                isinstance(getattr(request.context.transport, "_transport", None), AioHttpTransport):
    +                uri_path = URL(uri_path)
    +                return '/' + self.account_name + str(uri_path)
    +        except TypeError:
    +            pass
    +        return '/' + self.account_name + uri_path
    +
    +    def _get_canonicalized_headers(self, request):
    +        string_to_sign = ''
    +        x_ms_headers = []
    +        for name, value in request.http_request.headers.items():
    +            if name.startswith('x-ms-'):
    +                x_ms_headers.append((name.lower(), value))
    +        x_ms_headers.sort()
    +        for name, value in x_ms_headers:
    +            if value is not None:
    +                string_to_sign += ''.join([name, ':', value, '\n'])
    +        return string_to_sign
    +
    +    def _get_canonicalized_resource_query(self, request):
    +        sorted_queries = [(name, value) for name, value in request.http_request.query.items()]
    +        sorted_queries.sort()
    +
    +        string_to_sign = ''
    +        for name, value in sorted_queries:
    +            if value is not None:
    +                string_to_sign += '\n' + name.lower() + ':' + unquote(value)
    +
    +        return string_to_sign
    +
    +    def _add_authorization_header(self, request, string_to_sign):
    +        try:
    +            signature = sign_string(self.account_key, string_to_sign)
    +            auth_string = 'SharedKey ' + self.account_name + ':' + signature
    +            request.http_request.headers['Authorization'] = auth_string
    +        except Exception as ex:
    +            # Wrap any error that occurred as signing error
    +            # Doing so will clarify/locate the source of problem
    +            raise _wrap_exception(ex, AzureSigningError)
    +
    +    def on_request(self, request):
    +        string_to_sign = \
    +            self._get_verb(request) + \
    +            self._get_headers(
    +                request,
    +                [
    +                    'content-encoding', 'content-language', 'content-length',
    +                    'content-md5', 'content-type', 'date', 'if-modified-since',
    +                    'if-match', 'if-none-match', 'if-unmodified-since', 'byte_range'
    +                ]
    +            ) + \
    +            self._get_canonicalized_headers(request) + \
    +            self._get_canonicalized_resource(request) + \
    +            self._get_canonicalized_resource_query(request)
    +
    +        self._add_authorization_header(request, string_to_sign)
    +        #logger.debug("String_to_sign=%s", string_to_sign)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/base_client.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/base_client.py
    new file mode 100644
    index 000000000000..30a89cfd13ec
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/base_client.py
    @@ -0,0 +1,427 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union,
    +    Optional,
    +    Any,
    +    Iterable,
    +    Dict,
    +    List,
    +    Type,
    +    Tuple,
    +    TYPE_CHECKING,
    +)
    +import logging
    +
    +try:
    +    from urllib.parse import parse_qs, quote
    +except ImportError:
    +    from urlparse import parse_qs  # type: ignore
    +    from urllib2 import quote  # type: ignore
    +
    +import six
    +
    +from azure.core.configuration import Configuration
    +from azure.core.exceptions import HttpResponseError
    +from azure.core.pipeline import Pipeline
    +from azure.core.pipeline.transport import RequestsTransport, HttpTransport
    +from azure.core.pipeline.policies import (
    +    RedirectPolicy,
    +    ContentDecodePolicy,
    +    BearerTokenCredentialPolicy,
    +    ProxyPolicy,
    +    DistributedTracingPolicy,
    +    HttpLoggingPolicy,
    +)
    +
    +from .constants import STORAGE_OAUTH_SCOPE, SERVICE_HOST_BASE, CONNECTION_TIMEOUT, READ_TIMEOUT
    +from .models import LocationMode
    +from .authentication import SharedKeyCredentialPolicy
    +from .shared_access_signature import QueryStringConstants
    +from .policies import (
    +    StorageHeadersPolicy,
    +    StorageUserAgentPolicy,
    +    StorageContentValidation,
    +    StorageRequestHook,
    +    StorageResponseHook,
    +    StorageLoggingPolicy,
    +    StorageHosts,
    +    QueueMessagePolicy,
    +    ExponentialRetry,
    +)
    +from .._generated.models import StorageErrorException
    +from .response_handlers import process_storage_error, PartialBatchErrorException
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +_SERVICE_PARAMS = {
    +    "blob": {"primary": "BlobEndpoint", "secondary": "BlobSecondaryEndpoint"},
    +    "queue": {"primary": "QueueEndpoint", "secondary": "QueueSecondaryEndpoint"},
    +    "file": {"primary": "FileEndpoint", "secondary": "FileSecondaryEndpoint"},
    +    "dfs": {"primary": "BlobEndpoint", "secondary": "BlobSecondaryEndpoint"},
    +}
    +
    +
    +class StorageAccountHostsMixin(object):  # pylint: disable=too-many-instance-attributes
    +    def __init__(
    +        self,
    +        parsed_url,  # type: Any
    +        service,  # type: str
    +        credential=None,  # type: Optional[Any]
    +        **kwargs  # type: Any
    +    ):
    +        # type: (...) -> None
    +        self._location_mode = kwargs.get("_location_mode", LocationMode.PRIMARY)
    +        self._hosts = kwargs.get("_hosts")
    +        self.scheme = parsed_url.scheme
    +
    +        if service not in ["blob", "queue", "file-share", "dfs"]:
    +            raise ValueError("Invalid service: {}".format(service))
    +        service_name = service.split('-')[0]
    +        account = parsed_url.netloc.split(".{}.core.".format(service_name))
    +        self.account_name = account[0] if len(account) > 1 else None
    +        secondary_hostname = None
    +
    +        self.credential = format_shared_key_credential(account, credential)
    +        if self.scheme.lower() != "https" and hasattr(self.credential, "get_token"):
    +            raise ValueError("Token credential is only supported with HTTPS.")
    +        if hasattr(self.credential, "account_name"):
    +            self.account_name = self.credential.account_name
    +            secondary_hostname = "{}-secondary.{}.{}".format(
    +                self.credential.account_name, service_name, SERVICE_HOST_BASE)
    +
    +        if not self._hosts:
    +            if len(account) > 1:
    +                secondary_hostname = parsed_url.netloc.replace(account[0], account[0] + "-secondary")
    +            if kwargs.get("secondary_hostname"):
    +                secondary_hostname = kwargs["secondary_hostname"]
    +            primary_hostname = (parsed_url.netloc + parsed_url.path).rstrip('/')
    +            self._hosts = {LocationMode.PRIMARY: primary_hostname, LocationMode.SECONDARY: secondary_hostname}
    +
    +        self.require_encryption = kwargs.get("require_encryption", False)
    +        self.key_encryption_key = kwargs.get("key_encryption_key")
    +        self.key_resolver_function = kwargs.get("key_resolver_function")
    +        self._config, self._pipeline = self._create_pipeline(self.credential, storage_sdk=service, **kwargs)
    +
    +    def __enter__(self):
    +        self._client.__enter__()
    +        return self
    +
    +    def __exit__(self, *args):
    +        self._client.__exit__(*args)
    +
    +    def close(self):
    +        """ This method is to close the sockets opened by the client.
    +        It need not be used when using with a context manager.
    +        """
    +        self._client.close()
    +
    +    @property
    +    def url(self):
    +        """The full endpoint URL to this entity, including SAS token if used.
    +
    +        This could be either the primary endpoint,
    +        or the secondary endpoint depending on the current :func:`location_mode`.
    +        """
    +        return self._format_url(self._hosts[self._location_mode])
    +
    +    @property
    +    def primary_endpoint(self):
    +        """The full primary endpoint URL.
    +
    +        :type: str
    +        """
    +        return self._format_url(self._hosts[LocationMode.PRIMARY])
    +
    +    @property
    +    def primary_hostname(self):
    +        """The hostname of the primary endpoint.
    +
    +        :type: str
    +        """
    +        return self._hosts[LocationMode.PRIMARY]
    +
    +    @property
    +    def secondary_endpoint(self):
    +        """The full secondary endpoint URL if configured.
    +
    +        If not available a ValueError will be raised. To explicitly specify a secondary hostname, use the optional
    +        `secondary_hostname` keyword argument on instantiation.
    +
    +        :type: str
    +        :raise ValueError:
    +        """
    +        if not self._hosts[LocationMode.SECONDARY]:
    +            raise ValueError("No secondary host configured.")
    +        return self._format_url(self._hosts[LocationMode.SECONDARY])
    +
    +    @property
    +    def secondary_hostname(self):
    +        """The hostname of the secondary endpoint.
    +
    +        If not available this will be None. To explicitly specify a secondary hostname, use the optional
    +        `secondary_hostname` keyword argument on instantiation.
    +
    +        :type: str or None
    +        """
    +        return self._hosts[LocationMode.SECONDARY]
    +
    +    @property
    +    def location_mode(self):
    +        """The location mode that the client is currently using.
    +
    +        By default this will be "primary". Options include "primary" and "secondary".
    +
    +        :type: str
    +        """
    +
    +        return self._location_mode
    +
    +    @location_mode.setter
    +    def location_mode(self, value):
    +        if self._hosts.get(value):
    +            self._location_mode = value
    +            self._client._config.url = self.url  # pylint: disable=protected-access
    +        else:
    +            raise ValueError("No host URL for location mode: {}".format(value))
    +
    +    @property
    +    def api_version(self):
    +        """The version of the Storage API used for requests.
    +
    +        :type: str
    +        """
    +        return self._client._config.version  # pylint: disable=protected-access
    +
    +    def _format_query_string(self, sas_token, credential, snapshot=None, share_snapshot=None):
    +        query_str = "?"
    +        if snapshot:
    +            query_str += "snapshot={}&".format(self.snapshot)
    +        if share_snapshot:
    +            query_str += "sharesnapshot={}&".format(self.snapshot)
    +        if sas_token and not credential:
    +            query_str += sas_token
    +        elif is_credential_sastoken(credential):
    +            query_str += credential.lstrip("?")
    +            credential = None
    +        return query_str.rstrip("?&"), credential
    +
    +    def _create_pipeline(self, credential, **kwargs):
    +        # type: (Any, **Any) -> Tuple[Configuration, Pipeline]
    +        self._credential_policy = None
    +        if hasattr(credential, "get_token"):
    +            self._credential_policy = BearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
    +        elif isinstance(credential, SharedKeyCredentialPolicy):
    +            self._credential_policy = credential
    +        elif credential is not None:
    +            raise TypeError("Unsupported credential: {}".format(credential))
    +
    +        config = kwargs.get("_configuration") or create_configuration(**kwargs)
    +        if kwargs.get("_pipeline"):
    +            return config, kwargs["_pipeline"]
    +        config.transport = kwargs.get("transport")  # type: ignore
    +        kwargs.setdefault("connection_timeout", CONNECTION_TIMEOUT)
    +        kwargs.setdefault("read_timeout", READ_TIMEOUT)
    +        if not config.transport:
    +            config.transport = RequestsTransport(**kwargs)
    +        policies = [
    +            QueueMessagePolicy(),
    +            config.headers_policy,
    +            config.proxy_policy,
    +            config.user_agent_policy,
    +            StorageContentValidation(),
    +            StorageRequestHook(**kwargs),
    +            self._credential_policy,
    +            ContentDecodePolicy(response_encoding="utf-8"),
    +            RedirectPolicy(**kwargs),
    +            StorageHosts(hosts=self._hosts, **kwargs),
    +            config.retry_policy,
    +            config.logging_policy,
    +            StorageResponseHook(**kwargs),
    +            DistributedTracingPolicy(**kwargs),
    +            HttpLoggingPolicy(**kwargs)
    +        ]
    +        return config, Pipeline(config.transport, policies=policies)
    +
    +    def _batch_send(
    +        self, *reqs,  # type: HttpRequest
    +        **kwargs
    +    ):
    +        """Given a series of request, do a Storage batch call.
    +        """
    +        # Pop it here, so requests doesn't feel bad about additional kwarg
    +        raise_on_any_failure = kwargs.pop("raise_on_any_failure", True)
    +        request = self._client._client.post(  # pylint: disable=protected-access
    +            url='https://{}/?comp=batch'.format(self.primary_hostname),
    +            headers={
    +                'x-ms-version': self.api_version
    +            }
    +        )
    +
    +        request.set_multipart_mixed(
    +            *reqs,
    +            policies=[
    +                StorageHeadersPolicy(),
    +                self._credential_policy
    +            ]
    +        )
    +
    +        pipeline_response = self._pipeline.run(
    +            request, **kwargs
    +        )
    +        response = pipeline_response.http_response
    +
    +        try:
    +            if response.status_code not in [202]:
    +                raise HttpResponseError(response=response)
    +            parts = response.parts()
    +            if raise_on_any_failure:
    +                parts = list(response.parts())
    +                if any(p for p in parts if not 200 <= p.status_code < 300):
    +                    error = PartialBatchErrorException(
    +                        message="There is a partial failure in the batch operation.",
    +                        response=response, parts=parts
    +                    )
    +                    raise error
    +                return iter(parts)
    +            return parts
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +class TransportWrapper(HttpTransport):
    +    """Wrapper class that ensures that an inner client created
    +    by a `get_client` method does not close the outer transport for the parent
    +    when used in a context manager.
    +    """
    +    def __init__(self, transport):
    +        self._transport = transport
    +
    +    def send(self, request, **kwargs):
    +        return self._transport.send(request, **kwargs)
    +
    +    def open(self):
    +        pass
    +
    +    def close(self):
    +        pass
    +
    +    def __enter__(self):
    +        pass
    +
    +    def __exit__(self, *args):  # pylint: disable=arguments-differ
    +        pass
    +
    +
    +def format_shared_key_credential(account, credential):
    +    if isinstance(credential, six.string_types):
    +        if len(account) < 2:
    +            raise ValueError("Unable to determine account name for shared key credential.")
    +        credential = {"account_name": account[0], "account_key": credential}
    +    if isinstance(credential, dict):
    +        if "account_name" not in credential:
    +            raise ValueError("Shared key credential missing 'account_name")
    +        if "account_key" not in credential:
    +            raise ValueError("Shared key credential missing 'account_key")
    +        return SharedKeyCredentialPolicy(**credential)
    +    return credential
    +
    +
    +def parse_connection_str(conn_str, credential, service):
    +    conn_str = conn_str.rstrip(";")
    +    conn_settings = [s.split("=", 1) for s in conn_str.split(";")]
    +    if any(len(tup) != 2 for tup in conn_settings):
    +        raise ValueError("Connection string is either blank or malformed.")
    +    conn_settings = dict(conn_settings)
    +    endpoints = _SERVICE_PARAMS[service]
    +    primary = None
    +    secondary = None
    +    if not credential:
    +        try:
    +            credential = {"account_name": conn_settings["AccountName"], "account_key": conn_settings["AccountKey"]}
    +        except KeyError:
    +            credential = conn_settings.get("SharedAccessSignature")
    +    if endpoints["primary"] in conn_settings:
    +        primary = conn_settings[endpoints["primary"]]
    +        if endpoints["secondary"] in conn_settings:
    +            secondary = conn_settings[endpoints["secondary"]]
    +    else:
    +        if endpoints["secondary"] in conn_settings:
    +            raise ValueError("Connection string specifies only secondary endpoint.")
    +        try:
    +            primary = "{}://{}.{}.{}".format(
    +                conn_settings["DefaultEndpointsProtocol"],
    +                conn_settings["AccountName"],
    +                service,
    +                conn_settings["EndpointSuffix"],
    +            )
    +            secondary = "{}-secondary.{}.{}".format(
    +                conn_settings["AccountName"], service, conn_settings["EndpointSuffix"]
    +            )
    +        except KeyError:
    +            pass
    +
    +    if not primary:
    +        try:
    +            primary = "https://{}.{}.{}".format(
    +                conn_settings["AccountName"], service, conn_settings.get("EndpointSuffix", SERVICE_HOST_BASE)
    +            )
    +        except KeyError:
    +            raise ValueError("Connection string missing required connection details.")
    +    return primary, secondary, credential
    +
    +
    +def create_configuration(**kwargs):
    +    # type: (**Any) -> Configuration
    +    config = Configuration(**kwargs)
    +    config.headers_policy = StorageHeadersPolicy(**kwargs)
    +    config.user_agent_policy = StorageUserAgentPolicy(**kwargs)
    +    config.retry_policy = kwargs.get("retry_policy") or ExponentialRetry(**kwargs)
    +    config.logging_policy = StorageLoggingPolicy(**kwargs)
    +    config.proxy_policy = ProxyPolicy(**kwargs)
    +
    +    # Storage settings
    +    config.max_single_put_size = kwargs.get("max_single_put_size", 64 * 1024 * 1024)
    +    config.copy_polling_interval = 15
    +
    +    # Block blob uploads
    +    config.max_block_size = kwargs.get("max_block_size", 4 * 1024 * 1024)
    +    config.min_large_block_upload_threshold = kwargs.get("min_large_block_upload_threshold", 4 * 1024 * 1024 + 1)
    +    config.use_byte_buffer = kwargs.get("use_byte_buffer", False)
    +
    +    # Page blob uploads
    +    config.max_page_size = kwargs.get("max_page_size", 4 * 1024 * 1024)
    +
    +    # Blob downloads
    +    config.max_single_get_size = kwargs.get("max_single_get_size", 32 * 1024 * 1024)
    +    config.max_chunk_get_size = kwargs.get("max_chunk_get_size", 4 * 1024 * 1024)
    +
    +    # File uploads
    +    config.max_range_size = kwargs.get("max_range_size", 4 * 1024 * 1024)
    +    return config
    +
    +
    +def parse_query(query_str):
    +    sas_values = QueryStringConstants.to_list()
    +    parsed_query = {k: v[0] for k, v in parse_qs(query_str).items()}
    +    sas_params = ["{}={}".format(k, quote(v, safe='')) for k, v in parsed_query.items() if k in sas_values]
    +    sas_token = None
    +    if sas_params:
    +        sas_token = "&".join(sas_params)
    +
    +    snapshot = parsed_query.get("snapshot") or parsed_query.get("sharesnapshot")
    +    return snapshot, sas_token
    +
    +
    +def is_credential_sastoken(credential):
    +    if not credential or not isinstance(credential, six.string_types):
    +        return False
    +
    +    sas_values = QueryStringConstants.to_list()
    +    parsed_query = parse_qs(credential.lstrip("?"))
    +    if parsed_query and all([k in sas_values for k in parsed_query.keys()]):
    +        return True
    +    return False
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/base_client_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/base_client_async.py
    new file mode 100644
    index 000000000000..3c806d796864
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/base_client_async.py
    @@ -0,0 +1,176 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, Dict, List, Type, Tuple,
    +    TYPE_CHECKING
    +)
    +import logging
    +from azure.core.pipeline import AsyncPipeline
    +from azure.core.async_paging import AsyncList
    +from azure.core.exceptions import HttpResponseError
    +from azure.core.pipeline.policies import (
    +    ContentDecodePolicy,
    +    AsyncBearerTokenCredentialPolicy,
    +    AsyncRedirectPolicy,
    +    DistributedTracingPolicy,
    +    HttpLoggingPolicy,
    +)
    +from azure.core.pipeline.transport import AsyncHttpTransport
    +
    +from .constants import STORAGE_OAUTH_SCOPE, CONNECTION_TIMEOUT, READ_TIMEOUT
    +from .authentication import SharedKeyCredentialPolicy
    +from .base_client import create_configuration
    +from .policies import (
    +    StorageContentValidation,
    +    StorageRequestHook,
    +    StorageHosts,
    +    StorageHeadersPolicy,
    +    QueueMessagePolicy
    +)
    +from .policies_async import AsyncStorageResponseHook
    +
    +from .._generated.models import StorageErrorException
    +from .response_handlers import process_storage_error, PartialBatchErrorException
    +
    +if TYPE_CHECKING:
    +    from azure.core.pipeline import Pipeline
    +    from azure.core.pipeline.transport import HttpRequest
    +    from azure.core.configuration import Configuration
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +class AsyncStorageAccountHostsMixin(object):
    +
    +    def __enter__(self):
    +        raise TypeError("Async client only supports 'async with'.")
    +
    +    def __exit__(self, *args):
    +        pass
    +
    +    async def __aenter__(self):
    +        await self._client.__aenter__()
    +        return self
    +
    +    async def __aexit__(self, *args):
    +        await self._client.__aexit__(*args)
    +
    +    async def close(self):
    +        """ This method is to close the sockets opened by the client.
    +        It need not be used when using with a context manager.
    +        """
    +        await self._client.close()
    +
    +    def _create_pipeline(self, credential, **kwargs):
    +        # type: (Any, **Any) -> Tuple[Configuration, Pipeline]
    +        self._credential_policy = None
    +        if hasattr(credential, 'get_token'):
    +            self._credential_policy = AsyncBearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
    +        elif isinstance(credential, SharedKeyCredentialPolicy):
    +            self._credential_policy = credential
    +        elif credential is not None:
    +            raise TypeError("Unsupported credential: {}".format(credential))
    +        config = kwargs.get('_configuration') or create_configuration(**kwargs)
    +        if kwargs.get('_pipeline'):
    +            return config, kwargs['_pipeline']
    +        config.transport = kwargs.get('transport')  # type: ignore
    +        kwargs.setdefault("connection_timeout", CONNECTION_TIMEOUT)
    +        kwargs.setdefault("read_timeout", READ_TIMEOUT)
    +        if not config.transport:
    +            try:
    +                from azure.core.pipeline.transport import AioHttpTransport
    +            except ImportError:
    +                raise ImportError("Unable to create async transport. Please check aiohttp is installed.")
    +            config.transport = AioHttpTransport(**kwargs)
    +        policies = [
    +            QueueMessagePolicy(),
    +            config.headers_policy,
    +            config.proxy_policy,
    +            config.user_agent_policy,
    +            StorageContentValidation(),
    +            StorageRequestHook(**kwargs),
    +            self._credential_policy,
    +            ContentDecodePolicy(response_encoding="utf-8"),
    +            AsyncRedirectPolicy(**kwargs),
    +            StorageHosts(hosts=self._hosts, **kwargs), # type: ignore
    +            config.retry_policy,
    +            config.logging_policy,
    +            AsyncStorageResponseHook(**kwargs),
    +            DistributedTracingPolicy(**kwargs),
    +            HttpLoggingPolicy(**kwargs),
    +        ]
    +        return config, AsyncPipeline(config.transport, policies=policies)
    +
    +    async def _batch_send(
    +        self, *reqs: 'HttpRequest',
    +        **kwargs
    +    ):
    +        """Given a series of request, do a Storage batch call.
    +        """
    +        # Pop it here, so requests doesn't feel bad about additional kwarg
    +        raise_on_any_failure = kwargs.pop("raise_on_any_failure", True)
    +        request = self._client._client.post(  # pylint: disable=protected-access
    +            url='https://{}/?comp=batch'.format(self.primary_hostname),
    +            headers={
    +                'x-ms-version': self.api_version
    +            }
    +        )
    +
    +        request.set_multipart_mixed(
    +            *reqs,
    +            policies=[
    +                StorageHeadersPolicy(),
    +                self._credential_policy
    +            ]
    +        )
    +
    +        pipeline_response = await self._pipeline.run(
    +            request, **kwargs
    +        )
    +        response = pipeline_response.http_response
    +
    +        try:
    +            if response.status_code not in [202]:
    +                raise HttpResponseError(response=response)
    +            parts = response.parts() # Return an AsyncIterator
    +            if raise_on_any_failure:
    +                parts_list = []
    +                async for part in parts:
    +                    parts_list.append(part)
    +                if any(p for p in parts_list if not 200 <= p.status_code < 300):
    +                    error = PartialBatchErrorException(
    +                        message="There is a partial failure in the batch operation.",
    +                        response=response, parts=parts_list
    +                    )
    +                    raise error
    +                return AsyncList(parts_list)
    +            return parts
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +
    +class AsyncTransportWrapper(AsyncHttpTransport):
    +    """Wrapper class that ensures that an inner client created
    +    by a `get_client` method does not close the outer transport for the parent
    +    when used in a context manager.
    +    """
    +    def __init__(self, async_transport):
    +        self._transport = async_transport
    +
    +    async def send(self, request, **kwargs):
    +        return await self._transport.send(request, **kwargs)
    +
    +    async def open(self):
    +        pass
    +
    +    async def close(self):
    +        pass
    +
    +    async def __aenter__(self):
    +        pass
    +
    +    async def __aexit__(self, *args):  # pylint: disable=arguments-differ
    +        pass
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/constants.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/constants.py
    new file mode 100644
    index 000000000000..7fb05b559850
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/constants.py
    @@ -0,0 +1,26 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import sys
    +from .._generated.version import VERSION
    +
    +
    +X_MS_VERSION = VERSION
    +
    +# Socket timeout in seconds
    +CONNECTION_TIMEOUT = 20
    +READ_TIMEOUT = 20
    +
    +# for python 3.5+, there was a change to the definition of the socket timeout (as far as socket.sendall is concerned)
    +# The socket timeout is now the maximum total duration to send all data.
    +if sys.version_info >= (3, 5):
    +    # the timeout to connect is 20 seconds, and the read timeout is 2000 seconds
    +    # the 2000 seconds was calculated with: 100MB (max block size)/ 50KB/s (an arbitrarily chosen minimum upload speed)
    +    READ_TIMEOUT = 2000
    +
    +STORAGE_OAUTH_SCOPE = "https://storage.azure.com/.default"
    +
    +SERVICE_HOST_BASE = 'core.windows.net'
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/encryption.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/encryption.py
    new file mode 100644
    index 000000000000..62607cc0cf85
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/encryption.py
    @@ -0,0 +1,542 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import os
    +from os import urandom
    +from json import (
    +    dumps,
    +    loads,
    +)
    +from collections import OrderedDict
    +
    +from cryptography.hazmat.backends import default_backend
    +from cryptography.hazmat.primitives.ciphers import Cipher
    +from cryptography.hazmat.primitives.ciphers.algorithms import AES
    +from cryptography.hazmat.primitives.ciphers.modes import CBC
    +from cryptography.hazmat.primitives.padding import PKCS7
    +
    +from azure.core.exceptions import HttpResponseError
    +
    +from .._version import VERSION
    +from . import encode_base64, decode_base64_to_bytes
    +
    +
    +_ENCRYPTION_PROTOCOL_V1 = '1.0'
    +_ERROR_OBJECT_INVALID = \
    +    '{0} does not define a complete interface. Value of {1} is either missing or invalid.'
    +
    +
    +def _validate_not_none(param_name, param):
    +    if param is None:
    +        raise ValueError('{0} should not be None.'.format(param_name))
    +
    +
    +def _validate_key_encryption_key_wrap(kek):
    +    # Note that None is not callable and so will fail the second clause of each check.
    +    if not hasattr(kek, 'wrap_key') or not callable(kek.wrap_key):
    +        raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'wrap_key'))
    +    if not hasattr(kek, 'get_kid') or not callable(kek.get_kid):
    +        raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'get_kid'))
    +    if not hasattr(kek, 'get_key_wrap_algorithm') or not callable(kek.get_key_wrap_algorithm):
    +        raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'get_key_wrap_algorithm'))
    +
    +
    +class _EncryptionAlgorithm(object):
    +    '''
    +    Specifies which client encryption algorithm is used.
    +    '''
    +    AES_CBC_256 = 'AES_CBC_256'
    +
    +
    +class _WrappedContentKey:
    +    '''
    +    Represents the envelope key details stored on the service.
    +    '''
    +
    +    def __init__(self, algorithm, encrypted_key, key_id):
    +        '''
    +        :param str algorithm:
    +            The algorithm used for wrapping.
    +        :param bytes encrypted_key:
    +            The encrypted content-encryption-key.
    +        :param str key_id:
    +            The key-encryption-key identifier string.
    +        '''
    +
    +        _validate_not_none('algorithm', algorithm)
    +        _validate_not_none('encrypted_key', encrypted_key)
    +        _validate_not_none('key_id', key_id)
    +
    +        self.algorithm = algorithm
    +        self.encrypted_key = encrypted_key
    +        self.key_id = key_id
    +
    +
    +class _EncryptionAgent:
    +    '''
    +    Represents the encryption agent stored on the service.
    +    It consists of the encryption protocol version and encryption algorithm used.
    +    '''
    +
    +    def __init__(self, encryption_algorithm, protocol):
    +        '''
    +        :param _EncryptionAlgorithm encryption_algorithm:
    +            The algorithm used for encrypting the message contents.
    +        :param str protocol:
    +            The protocol version used for encryption.
    +        '''
    +
    +        _validate_not_none('encryption_algorithm', encryption_algorithm)
    +        _validate_not_none('protocol', protocol)
    +
    +        self.encryption_algorithm = str(encryption_algorithm)
    +        self.protocol = protocol
    +
    +
    +class _EncryptionData:
    +    '''
    +    Represents the encryption data that is stored on the service.
    +    '''
    +
    +    def __init__(self, content_encryption_IV, encryption_agent, wrapped_content_key,
    +                 key_wrapping_metadata):
    +        '''
    +        :param bytes content_encryption_IV:
    +            The content encryption initialization vector.
    +        :param _EncryptionAgent encryption_agent:
    +            The encryption agent.
    +        :param _WrappedContentKey wrapped_content_key:
    +            An object that stores the wrapping algorithm, the key identifier,
    +            and the encrypted key bytes.
    +        :param dict key_wrapping_metadata:
    +            A dict containing metadata related to the key wrapping.
    +        '''
    +
    +        _validate_not_none('content_encryption_IV', content_encryption_IV)
    +        _validate_not_none('encryption_agent', encryption_agent)
    +        _validate_not_none('wrapped_content_key', wrapped_content_key)
    +
    +        self.content_encryption_IV = content_encryption_IV
    +        self.encryption_agent = encryption_agent
    +        self.wrapped_content_key = wrapped_content_key
    +        self.key_wrapping_metadata = key_wrapping_metadata
    +
    +
    +def _generate_encryption_data_dict(kek, cek, iv):
    +    '''
    +    Generates and returns the encryption metadata as a dict.
    +
    +    :param object kek: The key encryption key. See calling functions for more information.
    +    :param bytes cek: The content encryption key.
    +    :param bytes iv: The initialization vector.
    +    :return: A dict containing all the encryption metadata.
    +    :rtype: dict
    +    '''
    +    # Encrypt the cek.
    +    wrapped_cek = kek.wrap_key(cek)
    +
    +    # Build the encryption_data dict.
    +    # Use OrderedDict to comply with Java's ordering requirement.
    +    wrapped_content_key = OrderedDict()
    +    wrapped_content_key['KeyId'] = kek.get_kid()
    +    wrapped_content_key['EncryptedKey'] = encode_base64(wrapped_cek)
    +    wrapped_content_key['Algorithm'] = kek.get_key_wrap_algorithm()
    +
    +    encryption_agent = OrderedDict()
    +    encryption_agent['Protocol'] = _ENCRYPTION_PROTOCOL_V1
    +    encryption_agent['EncryptionAlgorithm'] = _EncryptionAlgorithm.AES_CBC_256
    +
    +    encryption_data_dict = OrderedDict()
    +    encryption_data_dict['WrappedContentKey'] = wrapped_content_key
    +    encryption_data_dict['EncryptionAgent'] = encryption_agent
    +    encryption_data_dict['ContentEncryptionIV'] = encode_base64(iv)
    +    encryption_data_dict['KeyWrappingMetadata'] = {'EncryptionLibrary': 'Python ' + VERSION}
    +
    +    return encryption_data_dict
    +
    +
    +def _dict_to_encryption_data(encryption_data_dict):
    +    '''
    +    Converts the specified dictionary to an EncryptionData object for
    +    eventual use in decryption.
    +
    +    :param dict encryption_data_dict:
    +        The dictionary containing the encryption data.
    +    :return: an _EncryptionData object built from the dictionary.
    +    :rtype: _EncryptionData
    +    '''
    +    try:
    +        if encryption_data_dict['EncryptionAgent']['Protocol'] != _ENCRYPTION_PROTOCOL_V1:
    +            raise ValueError("Unsupported encryption version.")
    +    except KeyError:
    +        raise ValueError("Unsupported encryption version.")
    +    wrapped_content_key = encryption_data_dict['WrappedContentKey']
    +    wrapped_content_key = _WrappedContentKey(wrapped_content_key['Algorithm'],
    +                                             decode_base64_to_bytes(wrapped_content_key['EncryptedKey']),
    +                                             wrapped_content_key['KeyId'])
    +
    +    encryption_agent = encryption_data_dict['EncryptionAgent']
    +    encryption_agent = _EncryptionAgent(encryption_agent['EncryptionAlgorithm'],
    +                                        encryption_agent['Protocol'])
    +
    +    if 'KeyWrappingMetadata' in encryption_data_dict:
    +        key_wrapping_metadata = encryption_data_dict['KeyWrappingMetadata']
    +    else:
    +        key_wrapping_metadata = None
    +
    +    encryption_data = _EncryptionData(decode_base64_to_bytes(encryption_data_dict['ContentEncryptionIV']),
    +                                      encryption_agent,
    +                                      wrapped_content_key,
    +                                      key_wrapping_metadata)
    +
    +    return encryption_data
    +
    +
    +def _generate_AES_CBC_cipher(cek, iv):
    +    '''
    +    Generates and returns an encryption cipher for AES CBC using the given cek and iv.
    +
    +    :param bytes[] cek: The content encryption key for the cipher.
    +    :param bytes[] iv: The initialization vector for the cipher.
    +    :return: A cipher for encrypting in AES256 CBC.
    +    :rtype: ~cryptography.hazmat.primitives.ciphers.Cipher
    +    '''
    +
    +    backend = default_backend()
    +    algorithm = AES(cek)
    +    mode = CBC(iv)
    +    return Cipher(algorithm, mode, backend)
    +
    +
    +def _validate_and_unwrap_cek(encryption_data, key_encryption_key=None, key_resolver=None):
    +    '''
    +    Extracts and returns the content_encryption_key stored in the encryption_data object
    +    and performs necessary validation on all parameters.
    +    :param _EncryptionData encryption_data:
    +        The encryption metadata of the retrieved value.
    +    :param obj key_encryption_key:
    +        The key_encryption_key used to unwrap the cek. Please refer to high-level service object
    +        instance variables for more details.
    +    :param func key_resolver:
    +        A function used that, given a key_id, will return a key_encryption_key. Please refer
    +        to high-level service object instance variables for more details.
    +    :return: the content_encryption_key stored in the encryption_data object.
    +    :rtype: bytes[]
    +    '''
    +
    +    _validate_not_none('content_encryption_IV', encryption_data.content_encryption_IV)
    +    _validate_not_none('encrypted_key', encryption_data.wrapped_content_key.encrypted_key)
    +
    +    if _ENCRYPTION_PROTOCOL_V1 != encryption_data.encryption_agent.protocol:
    +        raise ValueError('Encryption version is not supported.')
    +
    +    content_encryption_key = None
    +
    +    # If the resolver exists, give priority to the key it finds.
    +    if key_resolver is not None:
    +        key_encryption_key = key_resolver(encryption_data.wrapped_content_key.key_id)
    +
    +    _validate_not_none('key_encryption_key', key_encryption_key)
    +    if not hasattr(key_encryption_key, 'get_kid') or not callable(key_encryption_key.get_kid):
    +        raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'get_kid'))
    +    if not hasattr(key_encryption_key, 'unwrap_key') or not callable(key_encryption_key.unwrap_key):
    +        raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'unwrap_key'))
    +    if encryption_data.wrapped_content_key.key_id != key_encryption_key.get_kid():
    +        raise ValueError('Provided or resolved key-encryption-key does not match the id of key used to encrypt.')
    +    # Will throw an exception if the specified algorithm is not supported.
    +    content_encryption_key = key_encryption_key.unwrap_key(encryption_data.wrapped_content_key.encrypted_key,
    +                                                           encryption_data.wrapped_content_key.algorithm)
    +    _validate_not_none('content_encryption_key', content_encryption_key)
    +
    +    return content_encryption_key
    +
    +
    +def _decrypt_message(message, encryption_data, key_encryption_key=None, resolver=None):
    +    '''
    +    Decrypts the given ciphertext using AES256 in CBC mode with 128 bit padding.
    +    Unwraps the content-encryption-key using the user-provided or resolved key-encryption-key (kek).
    +    Returns the original plaintex.
    +
    +    :param str message:
    +        The ciphertext to be decrypted.
    +    :param _EncryptionData encryption_data:
    +        The metadata associated with this ciphertext.
    +    :param object key_encryption_key:
    +        The user-provided key-encryption-key. Must implement the following methods:
    +        unwrap_key(key, algorithm)
    +            - returns the unwrapped form of the specified symmetric key using the string-specified algorithm.
    +        get_kid()
    +            - returns a string key id for this key-encryption-key.
    +    :param function resolver(kid):
    +        The user-provided key resolver. Uses the kid string to return a key-encryption-key
    +        implementing the interface defined above.
    +    :return: The decrypted plaintext.
    +    :rtype: str
    +    '''
    +    _validate_not_none('message', message)
    +    content_encryption_key = _validate_and_unwrap_cek(encryption_data, key_encryption_key, resolver)
    +
    +    if _EncryptionAlgorithm.AES_CBC_256 != encryption_data.encryption_agent.encryption_algorithm:
    +        raise ValueError('Specified encryption algorithm is not supported.')
    +
    +    cipher = _generate_AES_CBC_cipher(content_encryption_key, encryption_data.content_encryption_IV)
    +
    +    # decrypt data
    +    decrypted_data = message
    +    decryptor = cipher.decryptor()
    +    decrypted_data = (decryptor.update(decrypted_data) + decryptor.finalize())
    +
    +    # unpad data
    +    unpadder = PKCS7(128).unpadder()
    +    decrypted_data = (unpadder.update(decrypted_data) + unpadder.finalize())
    +
    +    return decrypted_data
    +
    +
    +def encrypt_blob(blob, key_encryption_key):
    +    '''
    +    Encrypts the given blob using AES256 in CBC mode with 128 bit padding.
    +    Wraps the generated content-encryption-key using the user-provided key-encryption-key (kek).
    +    Returns a json-formatted string containing the encryption metadata. This method should
    +    only be used when a blob is small enough for single shot upload. Encrypting larger blobs
    +    is done as a part of the upload_data_chunks method.
    +
    +    :param bytes blob:
    +        The blob to be encrypted.
    +    :param object key_encryption_key:
    +        The user-provided key-encryption-key. Must implement the following methods:
    +        wrap_key(key)--wraps the specified key using an algorithm of the user's choice.
    +        get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key.
    +        get_kid()--returns a string key id for this key-encryption-key.
    +    :return: A tuple of json-formatted string containing the encryption metadata and the encrypted blob data.
    +    :rtype: (str, bytes)
    +    '''
    +
    +    _validate_not_none('blob', blob)
    +    _validate_not_none('key_encryption_key', key_encryption_key)
    +    _validate_key_encryption_key_wrap(key_encryption_key)
    +
    +    # AES256 uses 256 bit (32 byte) keys and always with 16 byte blocks
    +    content_encryption_key = urandom(32)
    +    initialization_vector = urandom(16)
    +
    +    cipher = _generate_AES_CBC_cipher(content_encryption_key, initialization_vector)
    +
    +    # PKCS7 with 16 byte blocks ensures compatibility with AES.
    +    padder = PKCS7(128).padder()
    +    padded_data = padder.update(blob) + padder.finalize()
    +
    +    # Encrypt the data.
    +    encryptor = cipher.encryptor()
    +    encrypted_data = encryptor.update(padded_data) + encryptor.finalize()
    +    encryption_data = _generate_encryption_data_dict(key_encryption_key, content_encryption_key,
    +                                                     initialization_vector)
    +    encryption_data['EncryptionMode'] = 'FullBlob'
    +
    +    return dumps(encryption_data), encrypted_data
    +
    +
    +def generate_blob_encryption_data(key_encryption_key):
    +    '''
    +    Generates the encryption_metadata for the blob.
    +
    +    :param bytes key_encryption_key:
    +        The key-encryption-key used to wrap the cek associate with this blob.
    +    :return: A tuple containing the cek and iv for this blob as well as the
    +        serialized encryption metadata for the blob.
    +    :rtype: (bytes, bytes, str)
    +    '''
    +    encryption_data = None
    +    content_encryption_key = None
    +    initialization_vector = None
    +    if key_encryption_key:
    +        _validate_key_encryption_key_wrap(key_encryption_key)
    +        content_encryption_key = urandom(32)
    +        initialization_vector = urandom(16)
    +        encryption_data = _generate_encryption_data_dict(key_encryption_key,
    +                                                         content_encryption_key,
    +                                                         initialization_vector)
    +        encryption_data['EncryptionMode'] = 'FullBlob'
    +        encryption_data = dumps(encryption_data)
    +
    +    return content_encryption_key, initialization_vector, encryption_data
    +
    +
    +def decrypt_blob(require_encryption, key_encryption_key, key_resolver,
    +                 content, start_offset, end_offset, response_headers):
    +    '''
    +    Decrypts the given blob contents and returns only the requested range.
    +
    +    :param bool require_encryption:
    +        Whether or not the calling blob service requires objects to be decrypted.
    +    :param object key_encryption_key:
    +        The user-provided key-encryption-key. Must implement the following methods:
    +        wrap_key(key)--wraps the specified key using an algorithm of the user's choice.
    +        get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key.
    +        get_kid()--returns a string key id for this key-encryption-key.
    +    :param key_resolver(kid):
    +        The user-provided key resolver. Uses the kid string to return a key-encryption-key
    +        implementing the interface defined above.
    +    :return: The decrypted blob content.
    +    :rtype: bytes
    +    '''
    +    try:
    +        encryption_data = _dict_to_encryption_data(loads(response_headers['x-ms-meta-encryptiondata']))
    +    except:  # pylint: disable=bare-except
    +        if require_encryption:
    +            raise ValueError(
    +                'Encryption required, but received data does not contain appropriate metatadata.' + \
    +                'Data was either not encrypted or metadata has been lost.')
    +
    +        return content
    +
    +    if encryption_data.encryption_agent.encryption_algorithm != _EncryptionAlgorithm.AES_CBC_256:
    +        raise ValueError('Specified encryption algorithm is not supported.')
    +
    +    blob_type = response_headers['x-ms-blob-type']
    +
    +    iv = None
    +    unpad = False
    +    if 'content-range' in response_headers:
    +        content_range = response_headers['content-range']
    +        # Format: 'bytes x-y/size'
    +
    +        # Ignore the word 'bytes'
    +        content_range = content_range.split(' ')
    +
    +        content_range = content_range[1].split('-')
    +        content_range = content_range[1].split('/')
    +        end_range = int(content_range[0])
    +        blob_size = int(content_range[1])
    +
    +        if start_offset >= 16:
    +            iv = content[:16]
    +            content = content[16:]
    +            start_offset -= 16
    +        else:
    +            iv = encryption_data.content_encryption_IV
    +
    +        if end_range == blob_size - 1:
    +            unpad = True
    +    else:
    +        unpad = True
    +        iv = encryption_data.content_encryption_IV
    +
    +    if blob_type == 'PageBlob':
    +        unpad = False
    +
    +    content_encryption_key = _validate_and_unwrap_cek(encryption_data, key_encryption_key, key_resolver)
    +    cipher = _generate_AES_CBC_cipher(content_encryption_key, iv)
    +    decryptor = cipher.decryptor()
    +
    +    content = decryptor.update(content) + decryptor.finalize()
    +    if unpad:
    +        unpadder = PKCS7(128).unpadder()
    +        content = unpadder.update(content) + unpadder.finalize()
    +
    +    return content[start_offset: len(content) - end_offset]
    +
    +
    +def get_blob_encryptor_and_padder(cek, iv, should_pad):
    +    encryptor = None
    +    padder = None
    +
    +    if cek is not None and iv is not None:
    +        cipher = _generate_AES_CBC_cipher(cek, iv)
    +        encryptor = cipher.encryptor()
    +        padder = PKCS7(128).padder() if should_pad else None
    +
    +    return encryptor, padder
    +
    +
    +def encrypt_queue_message(message, key_encryption_key):
    +    '''
    +    Encrypts the given plain text message using AES256 in CBC mode with 128 bit padding.
    +    Wraps the generated content-encryption-key using the user-provided key-encryption-key (kek).
    +    Returns a json-formatted string containing the encrypted message and the encryption metadata.
    +
    +    :param object message:
    +        The plain text messge to be encrypted.
    +    :param object key_encryption_key:
    +        The user-provided key-encryption-key. Must implement the following methods:
    +        wrap_key(key)--wraps the specified key using an algorithm of the user's choice.
    +        get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key.
    +        get_kid()--returns a string key id for this key-encryption-key.
    +    :return: A json-formatted string containing the encrypted message and the encryption metadata.
    +    :rtype: str
    +    '''
    +
    +    _validate_not_none('message', message)
    +    _validate_not_none('key_encryption_key', key_encryption_key)
    +    _validate_key_encryption_key_wrap(key_encryption_key)
    +
    +    # AES256 uses 256 bit (32 byte) keys and always with 16 byte blocks
    +    content_encryption_key = os.urandom(32)
    +    initialization_vector = os.urandom(16)
    +
    +    # Queue encoding functions all return unicode strings, and encryption should
    +    # operate on binary strings.
    +    message = message.encode('utf-8')
    +
    +    cipher = _generate_AES_CBC_cipher(content_encryption_key, initialization_vector)
    +
    +    # PKCS7 with 16 byte blocks ensures compatibility with AES.
    +    padder = PKCS7(128).padder()
    +    padded_data = padder.update(message) + padder.finalize()
    +
    +    # Encrypt the data.
    +    encryptor = cipher.encryptor()
    +    encrypted_data = encryptor.update(padded_data) + encryptor.finalize()
    +
    +    # Build the dictionary structure.
    +    queue_message = {'EncryptedMessageContents': encode_base64(encrypted_data),
    +                     'EncryptionData': _generate_encryption_data_dict(key_encryption_key,
    +                                                                      content_encryption_key,
    +                                                                      initialization_vector)}
    +
    +    return dumps(queue_message)
    +
    +
    +def decrypt_queue_message(message, response, require_encryption, key_encryption_key, resolver):
    +    '''
    +    Returns the decrypted message contents from an EncryptedQueueMessage.
    +    If no encryption metadata is present, will return the unaltered message.
    +    :param str message:
    +        The JSON formatted QueueEncryptedMessage contents with all associated metadata.
    +    :param bool require_encryption:
    +        If set, will enforce that the retrieved messages are encrypted and decrypt them.
    +    :param object key_encryption_key:
    +        The user-provided key-encryption-key. Must implement the following methods:
    +        unwrap_key(key, algorithm)
    +            - returns the unwrapped form of the specified symmetric key usingthe string-specified algorithm.
    +        get_kid()
    +            - returns a string key id for this key-encryption-key.
    +    :param function resolver(kid):
    +        The user-provided key resolver. Uses the kid string to return a key-encryption-key
    +        implementing the interface defined above.
    +    :return: The plain text message from the queue message.
    +    :rtype: str
    +    '''
    +
    +    try:
    +        message = loads(message)
    +
    +        encryption_data = _dict_to_encryption_data(message['EncryptionData'])
    +        decoded_data = decode_base64_to_bytes(message['EncryptedMessageContents'])
    +    except (KeyError, ValueError):
    +        # Message was not json formatted and so was not encrypted
    +        # or the user provided a json formatted message.
    +        if require_encryption:
    +            raise ValueError('Message was not encrypted.')
    +
    +        return message
    +    try:
    +        return _decrypt_message(decoded_data, encryption_data, key_encryption_key, resolver).decode('utf-8')
    +    except Exception as error:
    +        raise HttpResponseError(
    +            message="Decryption failed.",
    +            response=response,
    +            error=error)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/models.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/models.py
    new file mode 100644
    index 000000000000..6a8cfaf84745
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/models.py
    @@ -0,0 +1,425 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from enum import Enum
    +
    +
    +def get_enum_value(value):
    +    if value is None or value in ["None", ""]:
    +        return None
    +    try:
    +        return value.value
    +    except AttributeError:
    +        return value
    +
    +
    +class StorageErrorCode(str, Enum):
    +
    +    # Generic storage values
    +    account_already_exists = "AccountAlreadyExists"
    +    account_being_created = "AccountBeingCreated"
    +    account_is_disabled = "AccountIsDisabled"
    +    authentication_failed = "AuthenticationFailed"
    +    authorization_failure = "AuthorizationFailure"
    +    condition_headers_not_supported = "ConditionHeadersNotSupported"
    +    condition_not_met = "ConditionNotMet"
    +    empty_metadata_key = "EmptyMetadataKey"
    +    insufficient_account_permissions = "InsufficientAccountPermissions"
    +    internal_error = "InternalError"
    +    invalid_authentication_info = "InvalidAuthenticationInfo"
    +    invalid_header_value = "InvalidHeaderValue"
    +    invalid_http_verb = "InvalidHttpVerb"
    +    invalid_input = "InvalidInput"
    +    invalid_md5 = "InvalidMd5"
    +    invalid_metadata = "InvalidMetadata"
    +    invalid_query_parameter_value = "InvalidQueryParameterValue"
    +    invalid_range = "InvalidRange"
    +    invalid_resource_name = "InvalidResourceName"
    +    invalid_uri = "InvalidUri"
    +    invalid_xml_document = "InvalidXmlDocument"
    +    invalid_xml_node_value = "InvalidXmlNodeValue"
    +    md5_mismatch = "Md5Mismatch"
    +    metadata_too_large = "MetadataTooLarge"
    +    missing_content_length_header = "MissingContentLengthHeader"
    +    missing_required_query_parameter = "MissingRequiredQueryParameter"
    +    missing_required_header = "MissingRequiredHeader"
    +    missing_required_xml_node = "MissingRequiredXmlNode"
    +    multiple_condition_headers_not_supported = "MultipleConditionHeadersNotSupported"
    +    operation_timed_out = "OperationTimedOut"
    +    out_of_range_input = "OutOfRangeInput"
    +    out_of_range_query_parameter_value = "OutOfRangeQueryParameterValue"
    +    request_body_too_large = "RequestBodyTooLarge"
    +    resource_type_mismatch = "ResourceTypeMismatch"
    +    request_url_failed_to_parse = "RequestUrlFailedToParse"
    +    resource_already_exists = "ResourceAlreadyExists"
    +    resource_not_found = "ResourceNotFound"
    +    server_busy = "ServerBusy"
    +    unsupported_header = "UnsupportedHeader"
    +    unsupported_xml_node = "UnsupportedXmlNode"
    +    unsupported_query_parameter = "UnsupportedQueryParameter"
    +    unsupported_http_verb = "UnsupportedHttpVerb"
    +
    +    # Blob values
    +    append_position_condition_not_met = "AppendPositionConditionNotMet"
    +    blob_already_exists = "BlobAlreadyExists"
    +    blob_not_found = "BlobNotFound"
    +    blob_overwritten = "BlobOverwritten"
    +    blob_tier_inadequate_for_content_length = "BlobTierInadequateForContentLength"
    +    block_count_exceeds_limit = "BlockCountExceedsLimit"
    +    block_list_too_long = "BlockListTooLong"
    +    cannot_change_to_lower_tier = "CannotChangeToLowerTier"
    +    cannot_verify_copy_source = "CannotVerifyCopySource"
    +    container_already_exists = "ContainerAlreadyExists"
    +    container_being_deleted = "ContainerBeingDeleted"
    +    container_disabled = "ContainerDisabled"
    +    container_not_found = "ContainerNotFound"
    +    content_length_larger_than_tier_limit = "ContentLengthLargerThanTierLimit"
    +    copy_across_accounts_not_supported = "CopyAcrossAccountsNotSupported"
    +    copy_id_mismatch = "CopyIdMismatch"
    +    feature_version_mismatch = "FeatureVersionMismatch"
    +    incremental_copy_blob_mismatch = "IncrementalCopyBlobMismatch"
    +    incremental_copy_of_eralier_version_snapshot_not_allowed = "IncrementalCopyOfEralierVersionSnapshotNotAllowed"
    +    incremental_copy_source_must_be_snapshot = "IncrementalCopySourceMustBeSnapshot"
    +    infinite_lease_duration_required = "InfiniteLeaseDurationRequired"
    +    invalid_blob_or_block = "InvalidBlobOrBlock"
    +    invalid_blob_tier = "InvalidBlobTier"
    +    invalid_blob_type = "InvalidBlobType"
    +    invalid_block_id = "InvalidBlockId"
    +    invalid_block_list = "InvalidBlockList"
    +    invalid_operation = "InvalidOperation"
    +    invalid_page_range = "InvalidPageRange"
    +    invalid_source_blob_type = "InvalidSourceBlobType"
    +    invalid_source_blob_url = "InvalidSourceBlobUrl"
    +    invalid_version_for_page_blob_operation = "InvalidVersionForPageBlobOperation"
    +    lease_already_present = "LeaseAlreadyPresent"
    +    lease_already_broken = "LeaseAlreadyBroken"
    +    lease_id_mismatch_with_blob_operation = "LeaseIdMismatchWithBlobOperation"
    +    lease_id_mismatch_with_container_operation = "LeaseIdMismatchWithContainerOperation"
    +    lease_id_mismatch_with_lease_operation = "LeaseIdMismatchWithLeaseOperation"
    +    lease_id_missing = "LeaseIdMissing"
    +    lease_is_breaking_and_cannot_be_acquired = "LeaseIsBreakingAndCannotBeAcquired"
    +    lease_is_breaking_and_cannot_be_changed = "LeaseIsBreakingAndCannotBeChanged"
    +    lease_is_broken_and_cannot_be_renewed = "LeaseIsBrokenAndCannotBeRenewed"
    +    lease_lost = "LeaseLost"
    +    lease_not_present_with_blob_operation = "LeaseNotPresentWithBlobOperation"
    +    lease_not_present_with_container_operation = "LeaseNotPresentWithContainerOperation"
    +    lease_not_present_with_lease_operation = "LeaseNotPresentWithLeaseOperation"
    +    max_blob_size_condition_not_met = "MaxBlobSizeConditionNotMet"
    +    no_pending_copy_operation = "NoPendingCopyOperation"
    +    operation_not_allowed_on_incremental_copy_blob = "OperationNotAllowedOnIncrementalCopyBlob"
    +    pending_copy_operation = "PendingCopyOperation"
    +    previous_snapshot_cannot_be_newer = "PreviousSnapshotCannotBeNewer"
    +    previous_snapshot_not_found = "PreviousSnapshotNotFound"
    +    previous_snapshot_operation_not_supported = "PreviousSnapshotOperationNotSupported"
    +    sequence_number_condition_not_met = "SequenceNumberConditionNotMet"
    +    sequence_number_increment_too_large = "SequenceNumberIncrementTooLarge"
    +    snapshot_count_exceeded = "SnapshotCountExceeded"
    +    snaphot_operation_rate_exceeded = "SnaphotOperationRateExceeded"
    +    snapshots_present = "SnapshotsPresent"
    +    source_condition_not_met = "SourceConditionNotMet"
    +    system_in_use = "SystemInUse"
    +    target_condition_not_met = "TargetConditionNotMet"
    +    unauthorized_blob_overwrite = "UnauthorizedBlobOverwrite"
    +    blob_being_rehydrated = "BlobBeingRehydrated"
    +    blob_archived = "BlobArchived"
    +    blob_not_archived = "BlobNotArchived"
    +
    +    # Queue values
    +    invalid_marker = "InvalidMarker"
    +    message_not_found = "MessageNotFound"
    +    message_too_large = "MessageTooLarge"
    +    pop_receipt_mismatch = "PopReceiptMismatch"
    +    queue_already_exists = "QueueAlreadyExists"
    +    queue_being_deleted = "QueueBeingDeleted"
    +    queue_disabled = "QueueDisabled"
    +    queue_not_empty = "QueueNotEmpty"
    +    queue_not_found = "QueueNotFound"
    +
    +    # File values
    +    cannot_delete_file_or_directory = "CannotDeleteFileOrDirectory"
    +    client_cache_flush_delay = "ClientCacheFlushDelay"
    +    delete_pending = "DeletePending"
    +    directory_not_empty = "DirectoryNotEmpty"
    +    file_lock_conflict = "FileLockConflict"
    +    invalid_file_or_directory_path_name = "InvalidFileOrDirectoryPathName"
    +    parent_not_found = "ParentNotFound"
    +    read_only_attribute = "ReadOnlyAttribute"
    +    share_already_exists = "ShareAlreadyExists"
    +    share_being_deleted = "ShareBeingDeleted"
    +    share_disabled = "ShareDisabled"
    +    share_not_found = "ShareNotFound"
    +    sharing_violation = "SharingViolation"
    +    share_snapshot_in_progress = "ShareSnapshotInProgress"
    +    share_snapshot_count_exceeded = "ShareSnapshotCountExceeded"
    +    share_snapshot_operation_not_supported = "ShareSnapshotOperationNotSupported"
    +    share_has_snapshots = "ShareHasSnapshots"
    +    container_quota_downgrade_not_allowed = "ContainerQuotaDowngradeNotAllowed"
    +
    +
    +class DictMixin(object):
    +
    +    def __setitem__(self, key, item):
    +        self.__dict__[key] = item
    +
    +    def __getitem__(self, key):
    +        return self.__dict__[key]
    +
    +    def __repr__(self):
    +        return str(self)
    +
    +    def __len__(self):
    +        return len(self.keys())
    +
    +    def __delitem__(self, key):
    +        self.__dict__[key] = None
    +
    +    def __eq__(self, other):
    +        """Compare objects by comparing all attributes."""
    +        if isinstance(other, self.__class__):
    +            return self.__dict__ == other.__dict__
    +        return False
    +
    +    def __ne__(self, other):
    +        """Compare objects by comparing all attributes."""
    +        return not self.__eq__(other)
    +
    +    def __str__(self):
    +        return str({k: v for k, v in self.__dict__.items() if not k.startswith('_')})
    +
    +    def has_key(self, k):
    +        return k in self.__dict__
    +
    +    def update(self, *args, **kwargs):
    +        return self.__dict__.update(*args, **kwargs)
    +
    +    def keys(self):
    +        return [k for k in self.__dict__ if not k.startswith('_')]
    +
    +    def values(self):
    +        return [v for k, v in self.__dict__.items() if not k.startswith('_')]
    +
    +    def items(self):
    +        return [(k, v) for k, v in self.__dict__.items() if not k.startswith('_')]
    +
    +    def get(self, key, default=None):
    +        if key in self.__dict__:
    +            return self.__dict__[key]
    +        return default
    +
    +
    +class LocationMode(object):
    +    """
    +    Specifies the location the request should be sent to. This mode only applies
    +    for RA-GRS accounts which allow secondary read access. All other account types
    +    must use PRIMARY.
    +    """
    +
    +    PRIMARY = 'primary'  #: Requests should be sent to the primary location.
    +    SECONDARY = 'secondary'  #: Requests should be sent to the secondary location, if possible.
    +
    +
    +class ResourceTypes(object):
    +    """
    +    Specifies the resource types that are accessible with the account SAS.
    +
    +    :param bool service:
    +        Access to service-level APIs (e.g., Get/Set Service Properties,
    +        Get Service Stats, List Containers/Queues/Shares)
    +    :param bool container:
    +        Access to container-level APIs (e.g., Create/Delete Container,
    +        Create/Delete Queue, Create/Delete Share,
    +        List Blobs/Files and Directories)
    +    :param bool object:
    +        Access to object-level APIs for blobs, queue messages, and
    +        files(e.g. Put Blob, Query Entity, Get Messages, Create File, etc.)
    +    """
    +
    +    def __init__(self, service=False, container=False, object=False):  # pylint: disable=redefined-builtin
    +        self.service = service
    +        self.container = container
    +        self.object = object
    +        self._str = (('s' if self.service else '') +
    +                ('c' if self.container else '') +
    +                ('o' if self.object else ''))
    +
    +    def __str__(self):
    +        return self._str
    +
    +    @classmethod
    +    def from_string(cls, string):
    +        """Create a ResourceTypes from a string.
    +
    +        To specify service, container, or object you need only to
    +        include the first letter of the word in the string. E.g. service and container,
    +        you would provide a string "sc".
    +
    +        :param str string: Specify service, container, or object in
    +            in the string with the first letter of the word.
    +        :return: A ResourceTypes object
    +        :rtype: ~azure.storage.blob.ResourceTypes
    +        """
    +        res_service = 's' in string
    +        res_container = 'c' in string
    +        res_object = 'o' in string
    +
    +        parsed = cls(res_service, res_container, res_object)
    +        parsed._str = string  # pylint: disable = protected-access
    +        return parsed
    +
    +
    +class AccountSasPermissions(object):
    +    """
    +    :class:`~ResourceTypes` class to be used with generate_account_sas
    +    function and for the AccessPolicies used with set_*_acl. There are two types of
    +    SAS which may be used to grant resource access. One is to grant access to a
    +    specific resource (resource-specific). Another is to grant access to the
    +    entire service for a specific account and allow certain operations based on
    +    perms found here.
    +
    +    :param bool read:
    +        Valid for all signed resources types (Service, Container, and Object).
    +        Permits read permissions to the specified resource type.
    +    :param bool write:
    +        Valid for all signed resources types (Service, Container, and Object).
    +        Permits write permissions to the specified resource type.
    +    :param bool delete:
    +        Valid for Container and Object resource types, except for queue messages.
    +    :param bool list:
    +        Valid for Service and Container resource types only.
    +    :param bool add:
    +        Valid for the following Object resource types only: queue messages, and append blobs.
    +    :param bool create:
    +        Valid for the following Object resource types only: blobs and files.
    +        Users can create new blobs or files, but may not overwrite existing
    +        blobs or files.
    +    :param bool update:
    +        Valid for the following Object resource types only: queue messages.
    +    :param bool process:
    +        Valid for the following Object resource type only: queue messages.
    +    """
    +    def __init__(self, read=False, write=False, delete=False, list=False,  # pylint: disable=redefined-builtin
    +                 add=False, create=False, update=False, process=False):
    +        self.read = read
    +        self.write = write
    +        self.delete = delete
    +        self.list = list
    +        self.add = add
    +        self.create = create
    +        self.update = update
    +        self.process = process
    +        self._str = (('r' if self.read else '') +
    +                     ('w' if  self.write else '') +
    +                     ('d' if self.delete else '') +
    +                     ('l' if self.list else '') +
    +                     ('a' if self.add else '') +
    +                     ('c' if self.create else '') +
    +                     ('u' if self.update else '') +
    +                     ('p' if self.process else ''))
    +
    +    def __str__(self):
    +        return self._str
    +
    +    @classmethod
    +    def from_string(cls, permission):
    +        """Create AccountSasPermissions from a string.
    +
    +        To specify read, write, delete, etc. permissions you need only to
    +        include the first letter of the word in the string. E.g. for read and write
    +        permissions you would provide a string "rw".
    +
    +        :param str permission: Specify permissions in
    +            the string with the first letter of the word.
    +        :return: A AccountSasPermissions object
    +        :rtype: ~azure.storage.blob.AccountSasPermissions
    +        """
    +        p_read = 'r' in permission
    +        p_write = 'w' in permission
    +        p_delete = 'd' in permission
    +        p_list = 'l' in permission
    +        p_add = 'a' in permission
    +        p_create = 'c' in permission
    +        p_update = 'u' in permission
    +        p_process = 'p' in permission
    +
    +        parsed = cls(p_read, p_write, p_delete, p_list, p_add, p_create, p_update, p_process)
    +        parsed._str = permission # pylint: disable = protected-access
    +        return parsed
    +
    +class Services(object):
    +    """Specifies the services accessible with the account SAS.
    +
    +    :param bool blob:
    +        Access for the `~azure.storage.blob.BlobServiceClient`
    +    :param bool queue:
    +        Access for the `~azure.storage.queue.QueueServiceClient`
    +    :param bool fileshare:
    +        Access for the `~azure.storage.fileshare.ShareServiceClient`
    +    """
    +
    +    def __init__(self, blob=False, queue=False, fileshare=False):
    +        self.blob = blob
    +        self.queue = queue
    +        self.fileshare = fileshare
    +        self._str = (('b' if self.blob else '') +
    +                ('q' if self.queue else '') +
    +                ('f' if self.fileshare else ''))
    +
    +    def __str__(self):
    +        return self._str
    +
    +    @classmethod
    +    def from_string(cls, string):
    +        """Create Services from a string.
    +
    +        To specify blob, queue, or file you need only to
    +        include the first letter of the word in the string. E.g. for blob and queue
    +        you would provide a string "bq".
    +
    +        :param str string: Specify blob, queue, or file in
    +            in the string with the first letter of the word.
    +        :return: A Services object
    +        :rtype: ~azure.storage.blob.Services
    +        """
    +        res_blob = 'b' in string
    +        res_queue = 'q' in string
    +        res_file = 'f' in string
    +
    +        parsed = cls(res_blob, res_queue, res_file)
    +        parsed._str = string  # pylint: disable = protected-access
    +        return parsed
    +
    +
    +class UserDelegationKey(object):
    +    """
    +    Represents a user delegation key, provided to the user by Azure Storage
    +    based on their Azure Active Directory access token.
    +
    +    The fields are saved as simple strings since the user does not have to interact with this object;
    +    to generate an identify SAS, the user can simply pass it to the right API.
    +
    +    :ivar str signed_oid:
    +        Object ID of this token.
    +    :ivar str signed_tid:
    +        Tenant ID of the tenant that issued this token.
    +    :ivar str signed_start:
    +        The datetime this token becomes valid.
    +    :ivar str signed_expiry:
    +        The datetime this token expires.
    +    :ivar str signed_service:
    +        What service this key is valid for.
    +    :ivar str signed_version:
    +        The version identifier of the REST service that created this token.
    +    :ivar str value:
    +        The user delegation key.
    +    """
    +    def __init__(self):
    +        self.signed_oid = None
    +        self.signed_tid = None
    +        self.signed_start = None
    +        self.signed_expiry = None
    +        self.signed_service = None
    +        self.signed_version = None
    +        self.value = None
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/parser.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/parser.py
    new file mode 100644
    index 000000000000..c6feba8a6393
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/parser.py
    @@ -0,0 +1,20 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import sys
    +
    +if sys.version_info < (3,):
    +    def _str(value):
    +        if isinstance(value, unicode):  # pylint: disable=undefined-variable
    +            return value.encode('utf-8')
    +
    +        return str(value)
    +else:
    +    _str = str
    +
    +
    +def _to_utc_datetime(value):
    +    return value.strftime('%Y-%m-%dT%H:%M:%SZ')
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/policies.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/policies.py
    new file mode 100644
    index 000000000000..b603efe505e8
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/policies.py
    @@ -0,0 +1,638 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import base64
    +import hashlib
    +import re
    +import random
    +from time import time
    +from io import SEEK_SET, UnsupportedOperation
    +import logging
    +import uuid
    +import types
    +import platform
    +from typing import Any, TYPE_CHECKING
    +from wsgiref.handlers import format_date_time
    +try:
    +    from urllib.parse import (
    +        urlparse,
    +        parse_qsl,
    +        urlunparse,
    +        urlencode,
    +    )
    +except ImportError:
    +    from urllib import urlencode # type: ignore
    +    from urlparse import ( # type: ignore
    +        urlparse,
    +        parse_qsl,
    +        urlunparse,
    +    )
    +
    +from azure.core.pipeline.policies import (
    +    HeadersPolicy,
    +    SansIOHTTPPolicy,
    +    NetworkTraceLoggingPolicy,
    +    HTTPPolicy,
    +    RequestHistory
    +)
    +from azure.core.exceptions import AzureError, ServiceRequestError, ServiceResponseError
    +
    +from .._version import VERSION
    +from .models import LocationMode
    +
    +try:
    +    _unicode_type = unicode # type: ignore
    +except NameError:
    +    _unicode_type = str
    +
    +if TYPE_CHECKING:
    +    from azure.core.pipeline import PipelineRequest, PipelineResponse
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +def encode_base64(data):
    +    if isinstance(data, _unicode_type):
    +        data = data.encode('utf-8')
    +    encoded = base64.b64encode(data)
    +    return encoded.decode('utf-8')
    +
    +
    +def is_exhausted(settings):
    +    """Are we out of retries?"""
    +    retry_counts = (settings['total'], settings['connect'], settings['read'], settings['status'])
    +    retry_counts = list(filter(None, retry_counts))
    +    if not retry_counts:
    +        return False
    +    return min(retry_counts) < 0
    +
    +
    +def retry_hook(settings, **kwargs):
    +    if settings['hook']:
    +        settings['hook'](retry_count=settings['count'] - 1, location_mode=settings['mode'], **kwargs)
    +
    +
    +def is_retry(response, mode):
    +    """Is this method/status code retryable? (Based on whitelists and control
    +    variables such as the number of total retries to allow, whether to
    +    respect the Retry-After header, whether this header is present, and
    +    whether the returned status code is on the list of status codes to
    +    be retried upon on the presence of the aforementioned header)
    +    """
    +    status = response.http_response.status_code
    +    if 300 <= status < 500:
    +        # An exception occured, but in most cases it was expected. Examples could
    +        # include a 309 Conflict or 412 Precondition Failed.
    +        if status == 404 and mode == LocationMode.SECONDARY:
    +            # Response code 404 should be retried if secondary was used.
    +            return True
    +        if status == 408:
    +            # Response code 408 is a timeout and should be retried.
    +            return True
    +        return False
    +    if status >= 500:
    +        # Response codes above 500 with the exception of 501 Not Implemented and
    +        # 505 Version Not Supported indicate a server issue and should be retried.
    +        if status in [501, 505]:
    +            return False
    +        return True
    +    return False
    +
    +
    +def urljoin(base_url, stub_url):
    +    parsed = urlparse(base_url)
    +    parsed = parsed._replace(path=parsed.path + '/' + stub_url)
    +    return parsed.geturl()
    +
    +
    +class QueueMessagePolicy(SansIOHTTPPolicy):
    +
    +    def on_request(self, request):
    +        message_id = request.context.options.pop('queue_message_id', None)
    +        if message_id:
    +            request.http_request.url = urljoin(
    +                request.http_request.url,
    +                message_id)
    +
    +
    +class StorageHeadersPolicy(HeadersPolicy):
    +    request_id_header_name = 'x-ms-client-request-id'
    +
    +    def on_request(self, request):
    +        # type: (PipelineRequest, Any) -> None
    +        super(StorageHeadersPolicy, self).on_request(request)
    +        current_time = format_date_time(time())
    +        request.http_request.headers['x-ms-date'] = current_time
    +
    +        custom_id = request.context.options.pop('client_request_id', None)
    +        request.http_request.headers['x-ms-client-request-id'] = custom_id or str(uuid.uuid1())
    +
    +    # def on_response(self, request, response):
    +    #     # raise exception if the echoed client request id from the service is not identical to the one we sent
    +    #     if self.request_id_header_name in response.http_response.headers:
    +
    +    #         client_request_id = request.http_request.headers.get(self.request_id_header_name)
    +
    +    #         if response.http_response.headers[self.request_id_header_name] != client_request_id:
    +    #             raise AzureError(
    +    #                 "Echoed client request ID: {} does not match sent client request ID: {}.  "
    +    #                 "Service request ID: {}".format(
    +    #                     response.http_response.headers[self.request_id_header_name], client_request_id,
    +    #                     response.http_response.headers['x-ms-request-id']),
    +    #                 response=response.http_response
    +    #             )
    +
    +
    +class StorageHosts(SansIOHTTPPolicy):
    +
    +    def __init__(self, hosts=None, **kwargs):  # pylint: disable=unused-argument
    +        self.hosts = hosts
    +        super(StorageHosts, self).__init__()
    +
    +    def on_request(self, request):
    +        # type: (PipelineRequest, Any) -> None
    +        request.context.options['hosts'] = self.hosts
    +        parsed_url = urlparse(request.http_request.url)
    +
    +        # Detect what location mode we're currently requesting with
    +        location_mode = LocationMode.PRIMARY
    +        for key, value in self.hosts.items():
    +            if parsed_url.netloc == value:
    +                location_mode = key
    +
    +        # See if a specific location mode has been specified, and if so, redirect
    +        use_location = request.context.options.pop('use_location', None)
    +        if use_location:
    +            # Lock retries to the specific location
    +            request.context.options['retry_to_secondary'] = False
    +            if use_location not in self.hosts:
    +                raise ValueError("Attempting to use undefined host location {}".format(use_location))
    +            if use_location != location_mode:
    +                # Update request URL to use the specified location
    +                updated = parsed_url._replace(netloc=self.hosts[use_location])
    +                request.http_request.url = updated.geturl()
    +                location_mode = use_location
    +
    +        request.context.options['location_mode'] = location_mode
    +
    +
    +class StorageLoggingPolicy(NetworkTraceLoggingPolicy):
    +    """A policy that logs HTTP request and response to the DEBUG logger.
    +
    +    This accepts both global configuration, and per-request level with "enable_http_logger"
    +    """
    +
    +    def on_request(self, request):
    +        # type: (PipelineRequest, Any) -> None
    +        http_request = request.http_request
    +        options = request.context.options
    +        if options.pop("logging_enable", self.enable_http_logger):
    +            request.context["logging_enable"] = True
    +            if not _LOGGER.isEnabledFor(logging.DEBUG):
    +                return
    +
    +            try:
    +                log_url = http_request.url
    +                query_params = http_request.query
    +                if 'sig' in query_params:
    +                    log_url = log_url.replace(query_params['sig'], "sig=*****")
    +                _LOGGER.debug("Request URL: %r", log_url)
    +                _LOGGER.debug("Request method: %r", http_request.method)
    +                _LOGGER.debug("Request headers:")
    +                for header, value in http_request.headers.items():
    +                    if header.lower() == 'authorization':
    +                        value = '*****'
    +                    elif header.lower() == 'x-ms-copy-source' and 'sig' in value:
    +                        # take the url apart and scrub away the signed signature
    +                        scheme, netloc, path, params, query, fragment = urlparse(value)
    +                        parsed_qs = dict(parse_qsl(query))
    +                        parsed_qs['sig'] = '*****'
    +
    +                        # the SAS needs to be put back together
    +                        value = urlunparse((scheme, netloc, path, params, urlencode(parsed_qs), fragment))
    +
    +                    _LOGGER.debug("    %r: %r", header, value)
    +                _LOGGER.debug("Request body:")
    +
    +                # We don't want to log the binary data of a file upload.
    +                if isinstance(http_request.body, types.GeneratorType):
    +                    _LOGGER.debug("File upload")
    +                else:
    +                    _LOGGER.debug(str(http_request.body))
    +            except Exception as err:  # pylint: disable=broad-except
    +                _LOGGER.debug("Failed to log request: %r", err)
    +
    +    def on_response(self, request, response):
    +        # type: (PipelineRequest, PipelineResponse, Any) -> None
    +        if response.context.pop("logging_enable", self.enable_http_logger):
    +            if not _LOGGER.isEnabledFor(logging.DEBUG):
    +                return
    +
    +            try:
    +                _LOGGER.debug("Response status: %r", response.http_response.status_code)
    +                _LOGGER.debug("Response headers:")
    +                for res_header, value in response.http_response.headers.items():
    +                    _LOGGER.debug("    %r: %r", res_header, value)
    +
    +                # We don't want to log binary data if the response is a file.
    +                _LOGGER.debug("Response content:")
    +                pattern = re.compile(r'attachment; ?filename=["\w.]+', re.IGNORECASE)
    +                header = response.http_response.headers.get('content-disposition')
    +
    +                if header and pattern.match(header):
    +                    filename = header.partition('=')[2]
    +                    _LOGGER.debug("File attachments: %s", filename)
    +                elif response.http_response.headers.get("content-type", "").endswith("octet-stream"):
    +                    _LOGGER.debug("Body contains binary data.")
    +                elif response.http_response.headers.get("content-type", "").startswith("image"):
    +                    _LOGGER.debug("Body contains image data.")
    +                else:
    +                    if response.context.options.get('stream', False):
    +                        _LOGGER.debug("Body is streamable")
    +                    else:
    +                        _LOGGER.debug(response.http_response.text())
    +            except Exception as err:  # pylint: disable=broad-except
    +                _LOGGER.debug("Failed to log response: %s", repr(err))
    +
    +
    +class StorageUserAgentPolicy(SansIOHTTPPolicy):
    +
    +    _USERAGENT = "User-Agent"
    +
    +    def __init__(self, **kwargs):
    +        self._application = kwargs.pop('user_agent', None)
    +        storage_sdk = kwargs.pop('storage_sdk')
    +        self._user_agent = "azsdk-python-storage-{}/{} Python/{} ({})".format(
    +            storage_sdk,
    +            VERSION,
    +            platform.python_version(),
    +            platform.platform())
    +        super(StorageUserAgentPolicy, self).__init__()
    +
    +    def on_request(self, request):
    +        existing = request.http_request.headers.get(self._USERAGENT, "")
    +        app_string = request.context.options.pop('user_agent', None) or self._application
    +        if app_string:
    +            request.http_request.headers[self._USERAGENT] = "{} {}".format(
    +                app_string, self._user_agent)
    +        else:
    +            request.http_request.headers[self._USERAGENT] = self._user_agent
    +        if existing:
    +            request.http_request.headers[self._USERAGENT] += " " + existing
    +
    +
    +class StorageRequestHook(SansIOHTTPPolicy):
    +
    +    def __init__(self, **kwargs):  # pylint: disable=unused-argument
    +        self._request_callback = kwargs.get('raw_request_hook')
    +        super(StorageRequestHook, self).__init__()
    +
    +    def on_request(self, request):
    +        # type: (PipelineRequest, **Any) -> PipelineResponse
    +        request_callback = request.context.options.pop('raw_request_hook', self._request_callback)
    +        if request_callback:
    +            request_callback(request)
    +
    +
    +class StorageResponseHook(HTTPPolicy):
    +
    +    def __init__(self, **kwargs):  # pylint: disable=unused-argument
    +        self._response_callback = kwargs.get('raw_response_hook')
    +        super(StorageResponseHook, self).__init__()
    +
    +    def send(self, request):
    +        # type: (PipelineRequest) -> PipelineResponse
    +        data_stream_total = request.context.get('data_stream_total') or \
    +            request.context.options.pop('data_stream_total', None)
    +        download_stream_current = request.context.get('download_stream_current') or \
    +            request.context.options.pop('download_stream_current', None)
    +        upload_stream_current = request.context.get('upload_stream_current') or \
    +            request.context.options.pop('upload_stream_current', None)
    +        response_callback = request.context.get('response_callback') or \
    +            request.context.options.pop('raw_response_hook', self._response_callback)
    +
    +        response = self.next.send(request)
    +        will_retry = is_retry(response, request.context.options.get('mode'))
    +        if not will_retry and download_stream_current is not None:
    +            download_stream_current += int(response.http_response.headers.get('Content-Length', 0))
    +            if data_stream_total is None:
    +                content_range = response.http_response.headers.get('Content-Range')
    +                if content_range:
    +                    data_stream_total = int(content_range.split(' ', 1)[1].split('/', 1)[1])
    +                else:
    +                    data_stream_total = download_stream_current
    +        elif not will_retry and upload_stream_current is not None:
    +            upload_stream_current += int(response.http_request.headers.get('Content-Length', 0))
    +        for pipeline_obj in [request, response]:
    +            pipeline_obj.context['data_stream_total'] = data_stream_total
    +            pipeline_obj.context['download_stream_current'] = download_stream_current
    +            pipeline_obj.context['upload_stream_current'] = upload_stream_current
    +        if response_callback:
    +            response_callback(response)
    +            request.context['response_callback'] = response_callback
    +        return response
    +
    +
    +class StorageContentValidation(SansIOHTTPPolicy):
    +    """A simple policy that sends the given headers
    +    with the request.
    +
    +    This will overwrite any headers already defined in the request.
    +    """
    +    header_name = 'Content-MD5'
    +
    +    def __init__(self, **kwargs):  # pylint: disable=unused-argument
    +        super(StorageContentValidation, self).__init__()
    +
    +    @staticmethod
    +    def get_content_md5(data):
    +        md5 = hashlib.md5()
    +        if isinstance(data, bytes):
    +            md5.update(data)
    +        elif hasattr(data, 'read'):
    +            pos = 0
    +            try:
    +                pos = data.tell()
    +            except:  # pylint: disable=bare-except
    +                pass
    +            for chunk in iter(lambda: data.read(4096), b""):
    +                md5.update(chunk)
    +            try:
    +                data.seek(pos, SEEK_SET)
    +            except (AttributeError, IOError):
    +                raise ValueError("Data should be bytes or a seekable file-like object.")
    +        else:
    +            raise ValueError("Data should be bytes or a seekable file-like object.")
    +
    +        return md5.digest()
    +
    +    def on_request(self, request):
    +        # type: (PipelineRequest, Any) -> None
    +        validate_content = request.context.options.pop('validate_content', False)
    +        if validate_content and request.http_request.method != 'GET':
    +            computed_md5 = encode_base64(StorageContentValidation.get_content_md5(request.http_request.data))
    +            request.http_request.headers[self.header_name] = computed_md5
    +            request.context['validate_content_md5'] = computed_md5
    +        request.context['validate_content'] = validate_content
    +
    +    def on_response(self, request, response):
    +        if response.context.get('validate_content', False) and response.http_response.headers.get('content-md5'):
    +            computed_md5 = request.context.get('validate_content_md5') or \
    +                encode_base64(StorageContentValidation.get_content_md5(response.http_response.body()))
    +            if response.http_response.headers['content-md5'] != computed_md5:
    +                raise AzureError(
    +                    'MD5 mismatch. Expected value is \'{0}\', computed value is \'{1}\'.'.format(
    +                        response.http_response.headers['content-md5'], computed_md5),
    +                    response=response.http_response
    +                )
    +
    +
    +class StorageRetryPolicy(HTTPPolicy):
    +    """
    +    The base class for Exponential and Linear retries containing shared code.
    +    """
    +
    +    def __init__(self, **kwargs):
    +        self.total_retries = kwargs.pop('retry_total', 10)
    +        self.connect_retries = kwargs.pop('retry_connect', 3)
    +        self.read_retries = kwargs.pop('retry_read', 3)
    +        self.status_retries = kwargs.pop('retry_status', 3)
    +        self.retry_to_secondary = kwargs.pop('retry_to_secondary', False)
    +        super(StorageRetryPolicy, self).__init__()
    +
    +    def _set_next_host_location(self, settings, request):  # pylint: disable=no-self-use
    +        """
    +        A function which sets the next host location on the request, if applicable.
    +
    +        :param ~azure.storage.models.RetryContext context:
    +            The retry context containing the previous host location and the request
    +            to evaluate and possibly modify.
    +        """
    +        if settings['hosts'] and all(settings['hosts'].values()):
    +            url = urlparse(request.url)
    +            # If there's more than one possible location, retry to the alternative
    +            if settings['mode'] == LocationMode.PRIMARY:
    +                settings['mode'] = LocationMode.SECONDARY
    +            else:
    +                settings['mode'] = LocationMode.PRIMARY
    +            updated = url._replace(netloc=settings['hosts'].get(settings['mode']))
    +            request.url = updated.geturl()
    +
    +    def configure_retries(self, request):  # pylint: disable=no-self-use
    +        body_position = None
    +        if hasattr(request.http_request.body, 'read'):
    +            try:
    +                body_position = request.http_request.body.tell()
    +            except (AttributeError, UnsupportedOperation):
    +                # if body position cannot be obtained, then retries will not work
    +                pass
    +        options = request.context.options
    +        return {
    +            'total': options.pop("retry_total", self.total_retries),
    +            'connect': options.pop("retry_connect", self.connect_retries),
    +            'read': options.pop("retry_read", self.read_retries),
    +            'status': options.pop("retry_status", self.status_retries),
    +            'retry_secondary': options.pop("retry_to_secondary", self.retry_to_secondary),
    +            'mode': options.pop("location_mode", LocationMode.PRIMARY),
    +            'hosts': options.pop("hosts", None),
    +            'hook': options.pop("retry_hook", None),
    +            'body_position': body_position,
    +            'count': 0,
    +            'history': []
    +        }
    +
    +    def get_backoff_time(self, settings):  # pylint: disable=unused-argument,no-self-use
    +        """ Formula for computing the current backoff.
    +        Should be calculated by child class.
    +
    +        :rtype: float
    +        """
    +        return 0
    +
    +    def sleep(self, settings, transport):
    +        backoff = self.get_backoff_time(settings)
    +        if not backoff or backoff < 0:
    +            return
    +        transport.sleep(backoff)
    +
    +    def increment(self, settings, request, response=None, error=None):
    +        """Increment the retry counters.
    +
    +        :param response: A pipeline response object.
    +        :param error: An error encountered during the request, or
    +            None if the response was received successfully.
    +
    +        :return: Whether the retry attempts are exhausted.
    +        """
    +        settings['total'] -= 1
    +
    +        if error and isinstance(error, ServiceRequestError):
    +            # Errors when we're fairly sure that the server did not receive the
    +            # request, so it should be safe to retry.
    +            settings['connect'] -= 1
    +            settings['history'].append(RequestHistory(request, error=error))
    +
    +        elif error and isinstance(error, ServiceResponseError):
    +            # Errors that occur after the request has been started, so we should
    +            # assume that the server began processing it.
    +            settings['read'] -= 1
    +            settings['history'].append(RequestHistory(request, error=error))
    +
    +        else:
    +            # Incrementing because of a server error like a 500 in
    +            # status_forcelist and a the given method is in the whitelist
    +            if response:
    +                settings['status'] -= 1
    +                settings['history'].append(RequestHistory(request, http_response=response))
    +
    +        if not is_exhausted(settings):
    +            if request.method not in ['PUT'] and settings['retry_secondary']:
    +                self._set_next_host_location(settings, request)
    +
    +            # rewind the request body if it is a stream
    +            if request.body and hasattr(request.body, 'read'):
    +                # no position was saved, then retry would not work
    +                if settings['body_position'] is None:
    +                    return False
    +                try:
    +                    # attempt to rewind the body to the initial position
    +                    request.body.seek(settings['body_position'], SEEK_SET)
    +                except (UnsupportedOperation, ValueError):
    +                    # if body is not seekable, then retry would not work
    +                    return False
    +            settings['count'] += 1
    +            return True
    +        return False
    +
    +    def send(self, request):
    +        retries_remaining = True
    +        response = None
    +        retry_settings = self.configure_retries(request)
    +        while retries_remaining:
    +            try:
    +                response = self.next.send(request)
    +                if is_retry(response, retry_settings['mode']):
    +                    retries_remaining = self.increment(
    +                        retry_settings,
    +                        request=request.http_request,
    +                        response=response.http_response)
    +                    if retries_remaining:
    +                        retry_hook(
    +                            retry_settings,
    +                            request=request.http_request,
    +                            response=response.http_response,
    +                            error=None)
    +                        self.sleep(retry_settings, request.context.transport)
    +                        continue
    +                break
    +            except AzureError as err:
    +                retries_remaining = self.increment(
    +                    retry_settings, request=request.http_request, error=err)
    +                if retries_remaining:
    +                    retry_hook(
    +                        retry_settings,
    +                        request=request.http_request,
    +                        response=None,
    +                        error=err)
    +                    self.sleep(retry_settings, request.context.transport)
    +                    continue
    +                raise err
    +        if retry_settings['history']:
    +            response.context['history'] = retry_settings['history']
    +        response.http_response.location_mode = retry_settings['mode']
    +        return response
    +
    +
    +class ExponentialRetry(StorageRetryPolicy):
    +    """Exponential retry."""
    +
    +    def __init__(self, initial_backoff=15, increment_base=3, retry_total=3,
    +                 retry_to_secondary=False, random_jitter_range=3, **kwargs):
    +        '''
    +        Constructs an Exponential retry object. The initial_backoff is used for
    +        the first retry. Subsequent retries are retried after initial_backoff +
    +        increment_power^retry_count seconds. For example, by default the first retry
    +        occurs after 15 seconds, the second after (15+3^1) = 18 seconds, and the
    +        third after (15+3^2) = 24 seconds.
    +
    +        :param int initial_backoff:
    +            The initial backoff interval, in seconds, for the first retry.
    +        :param int increment_base:
    +            The base, in seconds, to increment the initial_backoff by after the
    +            first retry.
    +        :param int max_attempts:
    +            The maximum number of retry attempts.
    +        :param bool retry_to_secondary:
    +            Whether the request should be retried to secondary, if able. This should
    +            only be enabled of RA-GRS accounts are used and potentially stale data
    +            can be handled.
    +        :param int random_jitter_range:
    +            A number in seconds which indicates a range to jitter/randomize for the back-off interval.
    +            For example, a random_jitter_range of 3 results in the back-off interval x to vary between x+3 and x-3.
    +        '''
    +        self.initial_backoff = initial_backoff
    +        self.increment_base = increment_base
    +        self.random_jitter_range = random_jitter_range
    +        super(ExponentialRetry, self).__init__(
    +            retry_total=retry_total, retry_to_secondary=retry_to_secondary, **kwargs)
    +
    +    def get_backoff_time(self, settings):
    +        """
    +        Calculates how long to sleep before retrying.
    +
    +        :return:
    +            An integer indicating how long to wait before retrying the request,
    +            or None to indicate no retry should be performed.
    +        :rtype: int or None
    +        """
    +        random_generator = random.Random()
    +        backoff = self.initial_backoff + (0 if settings['count'] == 0 else pow(self.increment_base, settings['count']))
    +        random_range_start = backoff - self.random_jitter_range if backoff > self.random_jitter_range else 0
    +        random_range_end = backoff + self.random_jitter_range
    +        return random_generator.uniform(random_range_start, random_range_end)
    +
    +
    +class LinearRetry(StorageRetryPolicy):
    +    """Linear retry."""
    +
    +    def __init__(self, backoff=15, retry_total=3, retry_to_secondary=False, random_jitter_range=3, **kwargs):
    +        """
    +        Constructs a Linear retry object.
    +
    +        :param int backoff:
    +            The backoff interval, in seconds, between retries.
    +        :param int max_attempts:
    +            The maximum number of retry attempts.
    +        :param bool retry_to_secondary:
    +            Whether the request should be retried to secondary, if able. This should
    +            only be enabled of RA-GRS accounts are used and potentially stale data
    +            can be handled.
    +        :param int random_jitter_range:
    +            A number in seconds which indicates a range to jitter/randomize for the back-off interval.
    +            For example, a random_jitter_range of 3 results in the back-off interval x to vary between x+3 and x-3.
    +        """
    +        self.backoff = backoff
    +        self.random_jitter_range = random_jitter_range
    +        super(LinearRetry, self).__init__(
    +            retry_total=retry_total, retry_to_secondary=retry_to_secondary, **kwargs)
    +
    +    def get_backoff_time(self, settings):
    +        """
    +        Calculates how long to sleep before retrying.
    +
    +        :return:
    +            An integer indicating how long to wait before retrying the request,
    +            or None to indicate no retry should be performed.
    +        :rtype: int or None
    +        """
    +        random_generator = random.Random()
    +        # the backoff interval normally does not change, however there is the possibility
    +        # that it was modified by accessing the property directly after initializing the object
    +        random_range_start = self.backoff - self.random_jitter_range \
    +            if self.backoff > self.random_jitter_range else 0
    +        random_range_end = self.backoff + self.random_jitter_range
    +        return random_generator.uniform(random_range_start, random_range_end)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/policies_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/policies_async.py
    new file mode 100644
    index 000000000000..c0a44767b177
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/policies_async.py
    @@ -0,0 +1,219 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import asyncio
    +import random
    +import logging
    +from typing import Any, TYPE_CHECKING
    +
    +from azure.core.pipeline.policies import AsyncHTTPPolicy
    +from azure.core.exceptions import AzureError
    +
    +from .policies import is_retry, StorageRetryPolicy
    +
    +if TYPE_CHECKING:
    +    from azure.core.pipeline import PipelineRequest, PipelineResponse
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +async def retry_hook(settings, **kwargs):
    +    if settings['hook']:
    +        if asyncio.iscoroutine(settings['hook']):
    +            await settings['hook'](
    +                retry_count=settings['count'] - 1,
    +                location_mode=settings['mode'],
    +                **kwargs)
    +        else:
    +            settings['hook'](
    +                retry_count=settings['count'] - 1,
    +                location_mode=settings['mode'],
    +                **kwargs)
    +
    +
    +class AsyncStorageResponseHook(AsyncHTTPPolicy):
    +
    +    def __init__(self, **kwargs):  # pylint: disable=unused-argument
    +        self._response_callback = kwargs.get('raw_response_hook')
    +        super(AsyncStorageResponseHook, self).__init__()
    +
    +    async def send(self, request):
    +        # type: (PipelineRequest) -> PipelineResponse
    +        data_stream_total = request.context.get('data_stream_total') or \
    +            request.context.options.pop('data_stream_total', None)
    +        download_stream_current = request.context.get('download_stream_current') or \
    +            request.context.options.pop('download_stream_current', None)
    +        upload_stream_current = request.context.get('upload_stream_current') or \
    +            request.context.options.pop('upload_stream_current', None)
    +        response_callback = request.context.get('response_callback') or \
    +            request.context.options.pop('raw_response_hook', self._response_callback)
    +
    +        response = await self.next.send(request)
    +        await response.http_response.load_body()
    +
    +        will_retry = is_retry(response, request.context.options.get('mode'))
    +        if not will_retry and download_stream_current is not None:
    +            download_stream_current += int(response.http_response.headers.get('Content-Length', 0))
    +            if data_stream_total is None:
    +                content_range = response.http_response.headers.get('Content-Range')
    +                if content_range:
    +                    data_stream_total = int(content_range.split(' ', 1)[1].split('/', 1)[1])
    +                else:
    +                    data_stream_total = download_stream_current
    +        elif not will_retry and upload_stream_current is not None:
    +            upload_stream_current += int(response.http_request.headers.get('Content-Length', 0))
    +        for pipeline_obj in [request, response]:
    +            pipeline_obj.context['data_stream_total'] = data_stream_total
    +            pipeline_obj.context['download_stream_current'] = download_stream_current
    +            pipeline_obj.context['upload_stream_current'] = upload_stream_current
    +        if response_callback:
    +            if asyncio.iscoroutine(response_callback):
    +                await response_callback(response)
    +            else:
    +                response_callback(response)
    +            request.context['response_callback'] = response_callback
    +        return response
    +
    +class AsyncStorageRetryPolicy(StorageRetryPolicy):
    +    """
    +    The base class for Exponential and Linear retries containing shared code.
    +    """
    +
    +    async def sleep(self, settings, transport):
    +        backoff = self.get_backoff_time(settings)
    +        if not backoff or backoff < 0:
    +            return
    +        await transport.sleep(backoff)
    +
    +    async def send(self, request):
    +        retries_remaining = True
    +        response = None
    +        retry_settings = self.configure_retries(request)
    +        while retries_remaining:
    +            try:
    +                response = await self.next.send(request)
    +                if is_retry(response, retry_settings['mode']):
    +                    retries_remaining = self.increment(
    +                        retry_settings,
    +                        request=request.http_request,
    +                        response=response.http_response)
    +                    if retries_remaining:
    +                        await retry_hook(
    +                            retry_settings,
    +                            request=request.http_request,
    +                            response=response.http_response,
    +                            error=None)
    +                        await self.sleep(retry_settings, request.context.transport)
    +                        continue
    +                break
    +            except AzureError as err:
    +                retries_remaining = self.increment(
    +                    retry_settings, request=request.http_request, error=err)
    +                if retries_remaining:
    +                    await retry_hook(
    +                        retry_settings,
    +                        request=request.http_request,
    +                        response=None,
    +                        error=err)
    +                    await self.sleep(retry_settings, request.context.transport)
    +                    continue
    +                raise err
    +        if retry_settings['history']:
    +            response.context['history'] = retry_settings['history']
    +        response.http_response.location_mode = retry_settings['mode']
    +        return response
    +
    +
    +class ExponentialRetry(AsyncStorageRetryPolicy):
    +    """Exponential retry."""
    +
    +    def __init__(self, initial_backoff=15, increment_base=3, retry_total=3,
    +                 retry_to_secondary=False, random_jitter_range=3, **kwargs):
    +        '''
    +        Constructs an Exponential retry object. The initial_backoff is used for
    +        the first retry. Subsequent retries are retried after initial_backoff +
    +        increment_power^retry_count seconds. For example, by default the first retry
    +        occurs after 15 seconds, the second after (15+3^1) = 18 seconds, and the
    +        third after (15+3^2) = 24 seconds.
    +
    +        :param int initial_backoff:
    +            The initial backoff interval, in seconds, for the first retry.
    +        :param int increment_base:
    +            The base, in seconds, to increment the initial_backoff by after the
    +            first retry.
    +        :param int max_attempts:
    +            The maximum number of retry attempts.
    +        :param bool retry_to_secondary:
    +            Whether the request should be retried to secondary, if able. This should
    +            only be enabled of RA-GRS accounts are used and potentially stale data
    +            can be handled.
    +        :param int random_jitter_range:
    +            A number in seconds which indicates a range to jitter/randomize for the back-off interval.
    +            For example, a random_jitter_range of 3 results in the back-off interval x to vary between x+3 and x-3.
    +        '''
    +        self.initial_backoff = initial_backoff
    +        self.increment_base = increment_base
    +        self.random_jitter_range = random_jitter_range
    +        super(ExponentialRetry, self).__init__(
    +            retry_total=retry_total, retry_to_secondary=retry_to_secondary, **kwargs)
    +
    +    def get_backoff_time(self, settings):
    +        """
    +        Calculates how long to sleep before retrying.
    +
    +        :return:
    +            An integer indicating how long to wait before retrying the request,
    +            or None to indicate no retry should be performed.
    +        :rtype: int or None
    +        """
    +        random_generator = random.Random()
    +        backoff = self.initial_backoff + (0 if settings['count'] == 0 else pow(self.increment_base, settings['count']))
    +        random_range_start = backoff - self.random_jitter_range if backoff > self.random_jitter_range else 0
    +        random_range_end = backoff + self.random_jitter_range
    +        return random_generator.uniform(random_range_start, random_range_end)
    +
    +
    +class LinearRetry(AsyncStorageRetryPolicy):
    +    """Linear retry."""
    +
    +    def __init__(self, backoff=15, retry_total=3, retry_to_secondary=False, random_jitter_range=3, **kwargs):
    +        """
    +        Constructs a Linear retry object.
    +
    +        :param int backoff:
    +            The backoff interval, in seconds, between retries.
    +        :param int max_attempts:
    +            The maximum number of retry attempts.
    +        :param bool retry_to_secondary:
    +            Whether the request should be retried to secondary, if able. This should
    +            only be enabled of RA-GRS accounts are used and potentially stale data
    +            can be handled.
    +        :param int random_jitter_range:
    +            A number in seconds which indicates a range to jitter/randomize for the back-off interval.
    +            For example, a random_jitter_range of 3 results in the back-off interval x to vary between x+3 and x-3.
    +        """
    +        self.backoff = backoff
    +        self.random_jitter_range = random_jitter_range
    +        super(LinearRetry, self).__init__(
    +            retry_total=retry_total, retry_to_secondary=retry_to_secondary, **kwargs)
    +
    +    def get_backoff_time(self, settings):
    +        """
    +        Calculates how long to sleep before retrying.
    +
    +        :return:
    +            An integer indicating how long to wait before retrying the request,
    +            or None to indicate no retry should be performed.
    +        :rtype: int or None
    +        """
    +        random_generator = random.Random()
    +        # the backoff interval normally does not change, however there is the possibility
    +        # that it was modified by accessing the property directly after initializing the object
    +        random_range_start = self.backoff - self.random_jitter_range \
    +            if self.backoff > self.random_jitter_range else 0
    +        random_range_end = self.backoff + self.random_jitter_range
    +        return random_generator.uniform(random_range_start, random_range_end)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/request_handlers.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/request_handlers.py
    new file mode 100644
    index 000000000000..2ce74d43db21
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/request_handlers.py
    @@ -0,0 +1,147 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, Dict, List, Type, Tuple,
    +    TYPE_CHECKING
    +)
    +
    +import logging
    +from os import fstat
    +from io import (SEEK_END, SEEK_SET, UnsupportedOperation)
    +
    +import isodate
    +
    +from azure.core.exceptions import raise_with_traceback
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +def serialize_iso(attr):
    +    """Serialize Datetime object into ISO-8601 formatted string.
    +
    +    :param Datetime attr: Object to be serialized.
    +    :rtype: str
    +    :raises: ValueError if format invalid.
    +    """
    +    if not attr:
    +        return None
    +    if isinstance(attr, str):
    +        attr = isodate.parse_datetime(attr)
    +    try:
    +        utc = attr.utctimetuple()
    +        if utc.tm_year > 9999 or utc.tm_year < 1:
    +            raise OverflowError("Hit max or min date")
    +
    +        date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format(
    +            utc.tm_year, utc.tm_mon, utc.tm_mday,
    +            utc.tm_hour, utc.tm_min, utc.tm_sec)
    +        return date + 'Z'
    +    except (ValueError, OverflowError) as err:
    +        msg = "Unable to serialize datetime object."
    +        raise_with_traceback(ValueError, msg, err)
    +    except AttributeError as err:
    +        msg = "ISO-8601 object must be valid Datetime object."
    +        raise_with_traceback(TypeError, msg, err)
    +
    +
    +def get_length(data):
    +    length = None
    +    # Check if object implements the __len__ method, covers most input cases such as bytearray.
    +    try:
    +        length = len(data)
    +    except:  # pylint: disable=bare-except
    +        pass
    +
    +    if not length:
    +        # Check if the stream is a file-like stream object.
    +        # If so, calculate the size using the file descriptor.
    +        try:
    +            fileno = data.fileno()
    +        except (AttributeError, UnsupportedOperation):
    +            pass
    +        else:
    +            try:
    +                return fstat(fileno).st_size
    +            except OSError:
    +                # Not a valid fileno, may be possible requests returned
    +                # a socket number?
    +                pass
    +
    +        # If the stream is seekable and tell() is implemented, calculate the stream size.
    +        try:
    +            current_position = data.tell()
    +            data.seek(0, SEEK_END)
    +            length = data.tell() - current_position
    +            data.seek(current_position, SEEK_SET)
    +        except (AttributeError, UnsupportedOperation):
    +            pass
    +
    +    return length
    +
    +
    +def read_length(data):
    +    try:
    +        if hasattr(data, 'read'):
    +            read_data = b''
    +            for chunk in iter(lambda: data.read(4096), b""):
    +                read_data += chunk
    +            return len(read_data), read_data
    +        if hasattr(data, '__iter__'):
    +            read_data = b''
    +            for chunk in data:
    +                read_data += chunk
    +            return len(read_data), read_data
    +    except:  # pylint: disable=bare-except
    +        pass
    +    raise ValueError("Unable to calculate content length, please specify.")
    +
    +
    +def validate_and_format_range_headers(
    +        start_range, end_range, start_range_required=True,
    +        end_range_required=True, check_content_md5=False, align_to_page=False):
    +    # If end range is provided, start range must be provided
    +    if (start_range_required or end_range is not None) and start_range is None:
    +        raise ValueError("start_range value cannot be None.")
    +    if end_range_required and end_range is None:
    +        raise ValueError("end_range value cannot be None.")
    +
    +    # Page ranges must be 512 aligned
    +    if align_to_page:
    +        if start_range is not None and start_range % 512 != 0:
    +            raise ValueError("Invalid page blob start_range: {0}. "
    +                             "The size must be aligned to a 512-byte boundary.".format(start_range))
    +        if end_range is not None and end_range % 512 != 511:
    +            raise ValueError("Invalid page blob end_range: {0}. "
    +                             "The size must be aligned to a 512-byte boundary.".format(end_range))
    +
    +    # Format based on whether end_range is present
    +    range_header = None
    +    if end_range is not None:
    +        range_header = 'bytes={0}-{1}'.format(start_range, end_range)
    +    elif start_range is not None:
    +        range_header = "bytes={0}-".format(start_range)
    +
    +    # Content MD5 can only be provided for a complete range less than 4MB in size
    +    range_validation = None
    +    if check_content_md5:
    +        if start_range is None or end_range is None:
    +            raise ValueError("Both start and end range requied for MD5 content validation.")
    +        if end_range - start_range > 4 * 1024 * 1024:
    +            raise ValueError("Getting content MD5 for a range greater than 4MB is not supported.")
    +        range_validation = 'true'
    +
    +    return range_header, range_validation
    +
    +
    +def add_metadata_headers(metadata=None):
    +    # type: (Optional[Dict[str, str]]) -> Dict[str, str]
    +    headers = {}
    +    if metadata:
    +        for key, value in metadata.items():
    +            headers['x-ms-meta-{}'.format(key)] = value
    +    return headers
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/response_handlers.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/response_handlers.py
    new file mode 100644
    index 000000000000..ac526e594161
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/response_handlers.py
    @@ -0,0 +1,159 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, Dict, List, Type, Tuple,
    +    TYPE_CHECKING
    +)
    +import logging
    +
    +from azure.core.pipeline.policies import ContentDecodePolicy
    +from azure.core.exceptions import (
    +    HttpResponseError,
    +    ResourceNotFoundError,
    +    ResourceModifiedError,
    +    ResourceExistsError,
    +    ClientAuthenticationError,
    +    DecodeError)
    +
    +from .parser import _to_utc_datetime
    +from .models import StorageErrorCode, UserDelegationKey, get_enum_value
    +
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from azure.core.exceptions import AzureError
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +class PartialBatchErrorException(HttpResponseError):
    +    """There is a partial failure in batch operations.
    +
    +    :param str message: The message of the exception.
    +    :param response: Server response to be deserialized.
    +    :param list parts: A list of the parts in multipart response.
    +    """
    +
    +    def __init__(self, message, response, parts):
    +        self.parts = parts
    +        super(PartialBatchErrorException, self).__init__(message=message, response=response)
    +
    +
    +def parse_length_from_content_range(content_range):
    +    '''
    +    Parses the blob length from the content range header: bytes 1-3/65537
    +    '''
    +    if content_range is None:
    +        return None
    +
    +    # First, split in space and take the second half: '1-3/65537'
    +    # Next, split on slash and take the second half: '65537'
    +    # Finally, convert to an int: 65537
    +    return int(content_range.split(' ', 1)[1].split('/', 1)[1])
    +
    +
    +def normalize_headers(headers):
    +    normalized = {}
    +    for key, value in headers.items():
    +        if key.startswith('x-ms-'):
    +            key = key[5:]
    +        normalized[key.lower().replace('-', '_')] = get_enum_value(value)
    +    return normalized
    +
    +
    +def deserialize_metadata(response, obj, headers):  # pylint: disable=unused-argument
    +    raw_metadata = {k: v for k, v in response.headers.items() if k.startswith("x-ms-meta-")}
    +    return {k[10:]: v for k, v in raw_metadata.items()}
    +
    +
    +def return_response_headers(response, deserialized, response_headers):  # pylint: disable=unused-argument
    +    return normalize_headers(response_headers)
    +
    +
    +def return_headers_and_deserialized(response, deserialized, response_headers):  # pylint: disable=unused-argument
    +    return normalize_headers(response_headers), deserialized
    +
    +
    +def return_context_and_deserialized(response, deserialized, response_headers):  # pylint: disable=unused-argument
    +    return response.location_mode, deserialized
    +
    +
    +def process_storage_error(storage_error):
    +    raise_error = HttpResponseError
    +    error_code = storage_error.response.headers.get('x-ms-error-code')
    +    error_message = storage_error.message
    +    additional_data = {}
    +    try:
    +        error_body = ContentDecodePolicy.deserialize_from_http_generics(storage_error.response)
    +        if error_body:
    +            for info in error_body.iter():
    +                if info.tag.lower() == 'code':
    +                    error_code = info.text
    +                elif info.tag.lower() == 'message':
    +                    error_message = info.text
    +                else:
    +                    additional_data[info.tag] = info.text
    +    except DecodeError:
    +        pass
    +
    +    try:
    +        if error_code:
    +            error_code = StorageErrorCode(error_code)
    +            if error_code in [StorageErrorCode.condition_not_met,
    +                              StorageErrorCode.blob_overwritten]:
    +                raise_error = ResourceModifiedError
    +            if error_code in [StorageErrorCode.invalid_authentication_info,
    +                              StorageErrorCode.authentication_failed]:
    +                raise_error = ClientAuthenticationError
    +            if error_code in [StorageErrorCode.resource_not_found,
    +                              StorageErrorCode.cannot_verify_copy_source,
    +                              StorageErrorCode.blob_not_found,
    +                              StorageErrorCode.queue_not_found,
    +                              StorageErrorCode.container_not_found,
    +                              StorageErrorCode.parent_not_found,
    +                              StorageErrorCode.share_not_found]:
    +                raise_error = ResourceNotFoundError
    +            if error_code in [StorageErrorCode.account_already_exists,
    +                              StorageErrorCode.account_being_created,
    +                              StorageErrorCode.resource_already_exists,
    +                              StorageErrorCode.resource_type_mismatch,
    +                              StorageErrorCode.blob_already_exists,
    +                              StorageErrorCode.queue_already_exists,
    +                              StorageErrorCode.container_already_exists,
    +                              StorageErrorCode.container_being_deleted,
    +                              StorageErrorCode.queue_being_deleted,
    +                              StorageErrorCode.share_already_exists,
    +                              StorageErrorCode.share_being_deleted]:
    +                raise_error = ResourceExistsError
    +    except ValueError:
    +        # Got an unknown error code
    +        pass
    +
    +    try:
    +        error_message += "\nErrorCode:{}".format(error_code.value)
    +    except AttributeError:
    +        error_message += "\nErrorCode:{}".format(error_code)
    +    for name, info in additional_data.items():
    +        error_message += "\n{}:{}".format(name, info)
    +
    +    error = raise_error(message=error_message, response=storage_error.response)
    +    error.error_code = error_code
    +    error.additional_info = additional_data
    +    raise error
    +
    +
    +def parse_to_internal_user_delegation_key(service_user_delegation_key):
    +    internal_user_delegation_key = UserDelegationKey()
    +    internal_user_delegation_key.signed_oid = service_user_delegation_key.signed_oid
    +    internal_user_delegation_key.signed_tid = service_user_delegation_key.signed_tid
    +    internal_user_delegation_key.signed_start = _to_utc_datetime(service_user_delegation_key.signed_start)
    +    internal_user_delegation_key.signed_expiry = _to_utc_datetime(service_user_delegation_key.signed_expiry)
    +    internal_user_delegation_key.signed_service = service_user_delegation_key.signed_service
    +    internal_user_delegation_key.signed_version = service_user_delegation_key.signed_version
    +    internal_user_delegation_key.value = service_user_delegation_key.value
    +    return internal_user_delegation_key
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/shared_access_signature.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/shared_access_signature.py
    new file mode 100644
    index 000000000000..367c6554ef89
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/shared_access_signature.py
    @@ -0,0 +1,209 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from datetime import date
    +
    +from .parser import _str, _to_utc_datetime
    +from .constants import X_MS_VERSION
    +from . import sign_string, url_quote
    +
    +
    +class QueryStringConstants(object):
    +    SIGNED_SIGNATURE = 'sig'
    +    SIGNED_PERMISSION = 'sp'
    +    SIGNED_START = 'st'
    +    SIGNED_EXPIRY = 'se'
    +    SIGNED_RESOURCE = 'sr'
    +    SIGNED_IDENTIFIER = 'si'
    +    SIGNED_IP = 'sip'
    +    SIGNED_PROTOCOL = 'spr'
    +    SIGNED_VERSION = 'sv'
    +    SIGNED_CACHE_CONTROL = 'rscc'
    +    SIGNED_CONTENT_DISPOSITION = 'rscd'
    +    SIGNED_CONTENT_ENCODING = 'rsce'
    +    SIGNED_CONTENT_LANGUAGE = 'rscl'
    +    SIGNED_CONTENT_TYPE = 'rsct'
    +    START_PK = 'spk'
    +    START_RK = 'srk'
    +    END_PK = 'epk'
    +    END_RK = 'erk'
    +    SIGNED_RESOURCE_TYPES = 'srt'
    +    SIGNED_SERVICES = 'ss'
    +    SIGNED_OID = 'skoid'
    +    SIGNED_TID = 'sktid'
    +    SIGNED_KEY_START = 'skt'
    +    SIGNED_KEY_EXPIRY = 'ske'
    +    SIGNED_KEY_SERVICE = 'sks'
    +    SIGNED_KEY_VERSION = 'skv'
    +
    +    @staticmethod
    +    def to_list():
    +        return [
    +            QueryStringConstants.SIGNED_SIGNATURE,
    +            QueryStringConstants.SIGNED_PERMISSION,
    +            QueryStringConstants.SIGNED_START,
    +            QueryStringConstants.SIGNED_EXPIRY,
    +            QueryStringConstants.SIGNED_RESOURCE,
    +            QueryStringConstants.SIGNED_IDENTIFIER,
    +            QueryStringConstants.SIGNED_IP,
    +            QueryStringConstants.SIGNED_PROTOCOL,
    +            QueryStringConstants.SIGNED_VERSION,
    +            QueryStringConstants.SIGNED_CACHE_CONTROL,
    +            QueryStringConstants.SIGNED_CONTENT_DISPOSITION,
    +            QueryStringConstants.SIGNED_CONTENT_ENCODING,
    +            QueryStringConstants.SIGNED_CONTENT_LANGUAGE,
    +            QueryStringConstants.SIGNED_CONTENT_TYPE,
    +            QueryStringConstants.START_PK,
    +            QueryStringConstants.START_RK,
    +            QueryStringConstants.END_PK,
    +            QueryStringConstants.END_RK,
    +            QueryStringConstants.SIGNED_RESOURCE_TYPES,
    +            QueryStringConstants.SIGNED_SERVICES,
    +            QueryStringConstants.SIGNED_OID,
    +            QueryStringConstants.SIGNED_TID,
    +            QueryStringConstants.SIGNED_KEY_START,
    +            QueryStringConstants.SIGNED_KEY_EXPIRY,
    +            QueryStringConstants.SIGNED_KEY_SERVICE,
    +            QueryStringConstants.SIGNED_KEY_VERSION,
    +        ]
    +
    +
    +class SharedAccessSignature(object):
    +    '''
    +    Provides a factory for creating account access
    +    signature tokens with an account name and account key. Users can either
    +    use the factory or can construct the appropriate service and use the
    +    generate_*_shared_access_signature method directly.
    +    '''
    +
    +    def __init__(self, account_name, account_key, x_ms_version=X_MS_VERSION):
    +        '''
    +        :param str account_name:
    +            The storage account name used to generate the shared access signatures.
    +        :param str account_key:
    +            The access key to generate the shares access signatures.
    +        :param str x_ms_version:
    +            The service version used to generate the shared access signatures.
    +        '''
    +        self.account_name = account_name
    +        self.account_key = account_key
    +        self.x_ms_version = x_ms_version
    +
    +    def generate_account(self, services, resource_types, permission, expiry, start=None,
    +                         ip=None, protocol=None):
    +        '''
    +        Generates a shared access signature for the account.
    +        Use the returned signature with the sas_token parameter of the service
    +        or to create a new account object.
    +
    +        :param ResourceTypes resource_types:
    +            Specifies the resource types that are accessible with the account
    +            SAS. You can combine values to provide access to more than one
    +            resource type.
    +        :param AccountSasPermissions permission:
    +            The permissions associated with the shared access signature. The
    +            user is restricted to operations allowed by the permissions.
    +            Required unless an id is given referencing a stored access policy
    +            which contains this field. This field must be omitted if it has been
    +            specified in an associated stored access policy. You can combine
    +            values to provide more than one permission.
    +        :param expiry:
    +            The time at which the shared access signature becomes invalid.
    +            Required unless an id is given referencing a stored access policy
    +            which contains this field. This field must be omitted if it has
    +            been specified in an associated stored access policy. Azure will always
    +            convert values to UTC. If a date is passed in without timezone info, it
    +            is assumed to be UTC.
    +        :type expiry: datetime or str
    +        :param start:
    +            The time at which the shared access signature becomes valid. If
    +            omitted, start time for this call is assumed to be the time when the
    +            storage service receives the request. Azure will always convert values
    +            to UTC. If a date is passed in without timezone info, it is assumed to
    +            be UTC.
    +        :type start: datetime or str
    +        :param str ip:
    +            Specifies an IP address or a range of IP addresses from which to accept requests.
    +            If the IP address from which the request originates does not match the IP address
    +            or address range specified on the SAS token, the request is not authenticated.
    +            For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS
    +            restricts the request to those IP addresses.
    +        :param str protocol:
    +            Specifies the protocol permitted for a request made. The default value
    +            is https,http. See :class:`~azure.storage.common.models.Protocol` for possible values.
    +        '''
    +        sas = _SharedAccessHelper()
    +        sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version)
    +        sas.add_account(services, resource_types)
    +        sas.add_account_signature(self.account_name, self.account_key)
    +
    +        return sas.get_token()
    +
    +
    +class _SharedAccessHelper(object):
    +    def __init__(self):
    +        self.query_dict = {}
    +
    +    def _add_query(self, name, val):
    +        if val:
    +            self.query_dict[name] = _str(val) if val is not None else None
    +
    +    def add_base(self, permission, expiry, start, ip, protocol, x_ms_version):
    +        if isinstance(start, date):
    +            start = _to_utc_datetime(start)
    +
    +        if isinstance(expiry, date):
    +            expiry = _to_utc_datetime(expiry)
    +
    +        self._add_query(QueryStringConstants.SIGNED_START, start)
    +        self._add_query(QueryStringConstants.SIGNED_EXPIRY, expiry)
    +        self._add_query(QueryStringConstants.SIGNED_PERMISSION, permission)
    +        self._add_query(QueryStringConstants.SIGNED_IP, ip)
    +        self._add_query(QueryStringConstants.SIGNED_PROTOCOL, protocol)
    +        self._add_query(QueryStringConstants.SIGNED_VERSION, x_ms_version)
    +
    +    def add_resource(self, resource):
    +        self._add_query(QueryStringConstants.SIGNED_RESOURCE, resource)
    +
    +    def add_id(self, policy_id):
    +        self._add_query(QueryStringConstants.SIGNED_IDENTIFIER, policy_id)
    +
    +    def add_account(self, services, resource_types):
    +        self._add_query(QueryStringConstants.SIGNED_SERVICES, services)
    +        self._add_query(QueryStringConstants.SIGNED_RESOURCE_TYPES, resource_types)
    +
    +    def add_override_response_headers(self, cache_control,
    +                                      content_disposition,
    +                                      content_encoding,
    +                                      content_language,
    +                                      content_type):
    +        self._add_query(QueryStringConstants.SIGNED_CACHE_CONTROL, cache_control)
    +        self._add_query(QueryStringConstants.SIGNED_CONTENT_DISPOSITION, content_disposition)
    +        self._add_query(QueryStringConstants.SIGNED_CONTENT_ENCODING, content_encoding)
    +        self._add_query(QueryStringConstants.SIGNED_CONTENT_LANGUAGE, content_language)
    +        self._add_query(QueryStringConstants.SIGNED_CONTENT_TYPE, content_type)
    +
    +    def add_account_signature(self, account_name, account_key):
    +        def get_value_to_append(query):
    +            return_value = self.query_dict.get(query) or ''
    +            return return_value + '\n'
    +
    +        string_to_sign = \
    +            (account_name + '\n' +
    +             get_value_to_append(QueryStringConstants.SIGNED_PERMISSION) +
    +             get_value_to_append(QueryStringConstants.SIGNED_SERVICES) +
    +             get_value_to_append(QueryStringConstants.SIGNED_RESOURCE_TYPES) +
    +             get_value_to_append(QueryStringConstants.SIGNED_START) +
    +             get_value_to_append(QueryStringConstants.SIGNED_EXPIRY) +
    +             get_value_to_append(QueryStringConstants.SIGNED_IP) +
    +             get_value_to_append(QueryStringConstants.SIGNED_PROTOCOL) +
    +             get_value_to_append(QueryStringConstants.SIGNED_VERSION))
    +
    +        self._add_query(QueryStringConstants.SIGNED_SIGNATURE,
    +                        sign_string(account_key, string_to_sign))
    +
    +    def get_token(self):
    +        return '&'.join(['{0}={1}'.format(n, url_quote(v)) for n, v in self.query_dict.items() if v is not None])
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/uploads.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/uploads.py
    new file mode 100644
    index 000000000000..13b814e11040
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/uploads.py
    @@ -0,0 +1,548 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=no-self-use
    +
    +from concurrent import futures
    +from io import (BytesIO, IOBase, SEEK_CUR, SEEK_END, SEEK_SET, UnsupportedOperation)
    +from threading import Lock
    +from itertools import islice
    +from math import ceil
    +
    +import six
    +
    +from azure.core.tracing.common import with_current_context
    +
    +from . import encode_base64, url_quote
    +from .request_handlers import get_length
    +from .response_handlers import return_response_headers
    +from .encryption import get_blob_encryptor_and_padder
    +
    +
    +_LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE = 4 * 1024 * 1024
    +_ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM = "{0} should be a seekable file-like/io.IOBase type stream object."
    +
    +
    +def _parallel_uploads(executor, uploader, pending, running):
    +    range_ids = []
    +    while True:
    +        # Wait for some download to finish before adding a new one
    +        done, running = futures.wait(running, return_when=futures.FIRST_COMPLETED)
    +        range_ids.extend([chunk.result() for chunk in done])
    +        try:
    +            next_chunk = next(pending)
    +        except StopIteration:
    +            break
    +        else:
    +            running.add(executor.submit(with_current_context(uploader), next_chunk))
    +
    +    # Wait for the remaining uploads to finish
    +    done, _running = futures.wait(running)
    +    range_ids.extend([chunk.result() for chunk in done])
    +    return range_ids
    +
    +
    +def upload_data_chunks(
    +        service=None,
    +        uploader_class=None,
    +        total_size=None,
    +        chunk_size=None,
    +        max_concurrency=None,
    +        stream=None,
    +        validate_content=None,
    +        encryption_options=None,
    +        **kwargs):
    +
    +    if encryption_options:
    +        encryptor, padder = get_blob_encryptor_and_padder(
    +            encryption_options.get('cek'),
    +            encryption_options.get('vector'),
    +            uploader_class is not PageBlobChunkUploader)
    +        kwargs['encryptor'] = encryptor
    +        kwargs['padder'] = padder
    +
    +    parallel = max_concurrency > 1
    +    if parallel and 'modified_access_conditions' in kwargs:
    +        # Access conditions do not work with parallelism
    +        kwargs['modified_access_conditions'] = None
    +
    +    uploader = uploader_class(
    +        service=service,
    +        total_size=total_size,
    +        chunk_size=chunk_size,
    +        stream=stream,
    +        parallel=parallel,
    +        validate_content=validate_content,
    +        **kwargs)
    +    if parallel:
    +        executor = futures.ThreadPoolExecutor(max_concurrency)
    +        upload_tasks = uploader.get_chunk_streams()
    +        running_futures = [
    +            executor.submit(with_current_context(uploader.process_chunk), u)
    +            for u in islice(upload_tasks, 0, max_concurrency)
    +        ]
    +        range_ids = _parallel_uploads(executor, uploader.process_chunk, upload_tasks, running_futures)
    +    else:
    +        range_ids = [uploader.process_chunk(result) for result in uploader.get_chunk_streams()]
    +    if any(range_ids):
    +        return [r[1] for r in sorted(range_ids, key=lambda r: r[0])]
    +    return uploader.response_headers
    +
    +
    +def upload_substream_blocks(
    +        service=None,
    +        uploader_class=None,
    +        total_size=None,
    +        chunk_size=None,
    +        max_concurrency=None,
    +        stream=None,
    +        **kwargs):
    +    parallel = max_concurrency > 1
    +    if parallel and 'modified_access_conditions' in kwargs:
    +        # Access conditions do not work with parallelism
    +        kwargs['modified_access_conditions'] = None
    +    uploader = uploader_class(
    +        service=service,
    +        total_size=total_size,
    +        chunk_size=chunk_size,
    +        stream=stream,
    +        parallel=parallel,
    +        **kwargs)
    +
    +    if parallel:
    +        executor = futures.ThreadPoolExecutor(max_concurrency)
    +        upload_tasks = uploader.get_substream_blocks()
    +        running_futures = [
    +            executor.submit(with_current_context(uploader.process_substream_block), u)
    +            for u in islice(upload_tasks, 0, max_concurrency)
    +        ]
    +        range_ids = _parallel_uploads(executor, uploader.process_substream_block, upload_tasks, running_futures)
    +    else:
    +        range_ids = [uploader.process_substream_block(b) for b in uploader.get_substream_blocks()]
    +    return sorted(range_ids)
    +
    +
    +class _ChunkUploader(object):  # pylint: disable=too-many-instance-attributes
    +
    +    def __init__(self, service, total_size, chunk_size, stream, parallel, encryptor=None, padder=None, **kwargs):
    +        self.service = service
    +        self.total_size = total_size
    +        self.chunk_size = chunk_size
    +        self.stream = stream
    +        self.parallel = parallel
    +
    +        # Stream management
    +        self.stream_start = stream.tell() if parallel else None
    +        self.stream_lock = Lock() if parallel else None
    +
    +        # Progress feedback
    +        self.progress_total = 0
    +        self.progress_lock = Lock() if parallel else None
    +
    +        # Encryption
    +        self.encryptor = encryptor
    +        self.padder = padder
    +        self.response_headers = None
    +        self.etag = None
    +        self.last_modified = None
    +        self.request_options = kwargs
    +
    +    def get_chunk_streams(self):
    +        index = 0
    +        while True:
    +            data = b""
    +            read_size = self.chunk_size
    +
    +            # Buffer until we either reach the end of the stream or get a whole chunk.
    +            while True:
    +                if self.total_size:
    +                    read_size = min(self.chunk_size - len(data), self.total_size - (index + len(data)))
    +                temp = self.stream.read(read_size)
    +                if not isinstance(temp, six.binary_type):
    +                    raise TypeError("Blob data should be of type bytes.")
    +                data += temp or b""
    +
    +                # We have read an empty string and so are at the end
    +                # of the buffer or we have read a full chunk.
    +                if temp == b"" or len(data) == self.chunk_size:
    +                    break
    +
    +            if len(data) == self.chunk_size:
    +                if self.padder:
    +                    data = self.padder.update(data)
    +                if self.encryptor:
    +                    data = self.encryptor.update(data)
    +                yield index, data
    +            else:
    +                if self.padder:
    +                    data = self.padder.update(data) + self.padder.finalize()
    +                if self.encryptor:
    +                    data = self.encryptor.update(data) + self.encryptor.finalize()
    +                if data:
    +                    yield index, data
    +                break
    +            index += len(data)
    +
    +    def process_chunk(self, chunk_data):
    +        chunk_bytes = chunk_data[1]
    +        chunk_offset = chunk_data[0]
    +        return self._upload_chunk_with_progress(chunk_offset, chunk_bytes)
    +
    +    def _update_progress(self, length):
    +        if self.progress_lock is not None:
    +            with self.progress_lock:
    +                self.progress_total += length
    +        else:
    +            self.progress_total += length
    +
    +    def _upload_chunk(self, chunk_offset, chunk_data):
    +        raise NotImplementedError("Must be implemented by child class.")
    +
    +    def _upload_chunk_with_progress(self, chunk_offset, chunk_data):
    +        range_id = self._upload_chunk(chunk_offset, chunk_data)
    +        self._update_progress(len(chunk_data))
    +        return range_id
    +
    +    def get_substream_blocks(self):
    +        assert self.chunk_size is not None
    +        lock = self.stream_lock
    +        blob_length = self.total_size
    +
    +        if blob_length is None:
    +            blob_length = get_length(self.stream)
    +            if blob_length is None:
    +                raise ValueError("Unable to determine content length of upload data.")
    +
    +        blocks = int(ceil(blob_length / (self.chunk_size * 1.0)))
    +        last_block_size = self.chunk_size if blob_length % self.chunk_size == 0 else blob_length % self.chunk_size
    +
    +        for i in range(blocks):
    +            index = i * self.chunk_size
    +            length = last_block_size if i == blocks - 1 else self.chunk_size
    +            yield ('BlockId{}'.format("%05d" % i), SubStream(self.stream, index, length, lock))
    +
    +    def process_substream_block(self, block_data):
    +        return self._upload_substream_block_with_progress(block_data[0], block_data[1])
    +
    +    def _upload_substream_block(self, block_id, block_stream):
    +        raise NotImplementedError("Must be implemented by child class.")
    +
    +    def _upload_substream_block_with_progress(self, block_id, block_stream):
    +        range_id = self._upload_substream_block(block_id, block_stream)
    +        self._update_progress(len(block_stream))
    +        return range_id
    +
    +    def set_response_properties(self, resp):
    +        self.etag = resp.etag
    +        self.last_modified = resp.last_modified
    +
    +
    +class BlockBlobChunkUploader(_ChunkUploader):
    +
    +    def __init__(self, *args, **kwargs):
    +        kwargs.pop("modified_access_conditions", None)
    +        super(BlockBlobChunkUploader, self).__init__(*args, **kwargs)
    +        self.current_length = None
    +
    +    def _upload_chunk(self, chunk_offset, chunk_data):
    +        # TODO: This is incorrect, but works with recording.
    +        index = '{0:032d}'.format(chunk_offset)
    +        block_id = encode_base64(url_quote(encode_base64(index)))
    +        self.service.stage_block(
    +            block_id,
    +            len(chunk_data),
    +            chunk_data,
    +            data_stream_total=self.total_size,
    +            upload_stream_current=self.progress_total,
    +            **self.request_options
    +        )
    +        return index, block_id
    +
    +    def _upload_substream_block(self, block_id, block_stream):
    +        try:
    +            self.service.stage_block(
    +                block_id,
    +                len(block_stream),
    +                block_stream,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options
    +            )
    +        finally:
    +            block_stream.close()
    +        return block_id
    +
    +
    +class PageBlobChunkUploader(_ChunkUploader):  # pylint: disable=abstract-method
    +
    +    def _is_chunk_empty(self, chunk_data):
    +        # read until non-zero byte is encountered
    +        # if reached the end without returning, then chunk_data is all 0's
    +        return not any(bytearray(chunk_data))
    +
    +    def _upload_chunk(self, chunk_offset, chunk_data):
    +        # avoid uploading the empty pages
    +        if not self._is_chunk_empty(chunk_data):
    +            chunk_end = chunk_offset + len(chunk_data) - 1
    +            content_range = "bytes={0}-{1}".format(chunk_offset, chunk_end)
    +            computed_md5 = None
    +            self.response_headers = self.service.upload_pages(
    +                chunk_data,
    +                content_length=len(chunk_data),
    +                transactional_content_md5=computed_md5,
    +                range=content_range,
    +                cls=return_response_headers,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options
    +            )
    +
    +            if not self.parallel and self.request_options.get('modified_access_conditions'):
    +                self.request_options['modified_access_conditions'].if_match = self.response_headers['etag']
    +
    +
    +class AppendBlobChunkUploader(_ChunkUploader):  # pylint: disable=abstract-method
    +
    +    def __init__(self, *args, **kwargs):
    +        super(AppendBlobChunkUploader, self).__init__(*args, **kwargs)
    +        self.current_length = None
    +
    +    def _upload_chunk(self, chunk_offset, chunk_data):
    +        if self.current_length is None:
    +            self.response_headers = self.service.append_block(
    +                chunk_data,
    +                content_length=len(chunk_data),
    +                cls=return_response_headers,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options
    +            )
    +            self.current_length = int(self.response_headers["blob_append_offset"])
    +        else:
    +            self.request_options['append_position_access_conditions'].append_position = \
    +                self.current_length + chunk_offset
    +            self.response_headers = self.service.append_block(
    +                chunk_data,
    +                content_length=len(chunk_data),
    +                cls=return_response_headers,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options
    +            )
    +
    +
    +class FileChunkUploader(_ChunkUploader):  # pylint: disable=abstract-method
    +
    +    def _upload_chunk(self, chunk_offset, chunk_data):
    +        length = len(chunk_data)
    +        chunk_end = chunk_offset + length - 1
    +        response = self.service.upload_range(
    +            chunk_data,
    +            chunk_offset,
    +            length,
    +            data_stream_total=self.total_size,
    +            upload_stream_current=self.progress_total,
    +            **self.request_options
    +        )
    +        return 'bytes={0}-{1}'.format(chunk_offset, chunk_end), response
    +
    +
    +class SubStream(IOBase):
    +
    +    def __init__(self, wrapped_stream, stream_begin_index, length, lockObj):
    +        # Python 2.7: file-like objects created with open() typically support seek(), but are not
    +        # derivations of io.IOBase and thus do not implement seekable().
    +        # Python > 3.0: file-like objects created with open() are derived from io.IOBase.
    +        try:
    +            # only the main thread runs this, so there's no need grabbing the lock
    +            wrapped_stream.seek(0, SEEK_CUR)
    +        except:
    +            raise ValueError("Wrapped stream must support seek().")
    +
    +        self._lock = lockObj
    +        self._wrapped_stream = wrapped_stream
    +        self._position = 0
    +        self._stream_begin_index = stream_begin_index
    +        self._length = length
    +        self._buffer = BytesIO()
    +
    +        # we must avoid buffering more than necessary, and also not use up too much memory
    +        # so the max buffer size is capped at 4MB
    +        self._max_buffer_size = (
    +            length if length < _LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE else _LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE
    +        )
    +        self._current_buffer_start = 0
    +        self._current_buffer_size = 0
    +        super(SubStream, self).__init__()
    +
    +    def __len__(self):
    +        return self._length
    +
    +    def close(self):
    +        if self._buffer:
    +            self._buffer.close()
    +        self._wrapped_stream = None
    +        IOBase.close(self)
    +
    +    def fileno(self):
    +        return self._wrapped_stream.fileno()
    +
    +    def flush(self):
    +        pass
    +
    +    def read(self, size=None):
    +        if self.closed:  # pylint: disable=using-constant-test
    +            raise ValueError("Stream is closed.")
    +
    +        if size is None:
    +            size = self._length - self._position
    +
    +        # adjust if out of bounds
    +        if size + self._position >= self._length:
    +            size = self._length - self._position
    +
    +        # return fast
    +        if size == 0 or self._buffer.closed:
    +            return b""
    +
    +        # attempt first read from the read buffer and update position
    +        read_buffer = self._buffer.read(size)
    +        bytes_read = len(read_buffer)
    +        bytes_remaining = size - bytes_read
    +        self._position += bytes_read
    +
    +        # repopulate the read buffer from the underlying stream to fulfill the request
    +        # ensure the seek and read operations are done atomically (only if a lock is provided)
    +        if bytes_remaining > 0:
    +            with self._buffer:
    +                # either read in the max buffer size specified on the class
    +                # or read in just enough data for the current block/sub stream
    +                current_max_buffer_size = min(self._max_buffer_size, self._length - self._position)
    +
    +                # lock is only defined if max_concurrency > 1 (parallel uploads)
    +                if self._lock:
    +                    with self._lock:
    +                        # reposition the underlying stream to match the start of the data to read
    +                        absolute_position = self._stream_begin_index + self._position
    +                        self._wrapped_stream.seek(absolute_position, SEEK_SET)
    +                        # If we can't seek to the right location, our read will be corrupted so fail fast.
    +                        if self._wrapped_stream.tell() != absolute_position:
    +                            raise IOError("Stream failed to seek to the desired location.")
    +                        buffer_from_stream = self._wrapped_stream.read(current_max_buffer_size)
    +                else:
    +                    buffer_from_stream = self._wrapped_stream.read(current_max_buffer_size)
    +
    +            if buffer_from_stream:
    +                # update the buffer with new data from the wrapped stream
    +                # we need to note down the start position and size of the buffer, in case seek is performed later
    +                self._buffer = BytesIO(buffer_from_stream)
    +                self._current_buffer_start = self._position
    +                self._current_buffer_size = len(buffer_from_stream)
    +
    +                # read the remaining bytes from the new buffer and update position
    +                second_read_buffer = self._buffer.read(bytes_remaining)
    +                read_buffer += second_read_buffer
    +                self._position += len(second_read_buffer)
    +
    +        return read_buffer
    +
    +    def readable(self):
    +        return True
    +
    +    def readinto(self, b):
    +        raise UnsupportedOperation
    +
    +    def seek(self, offset, whence=0):
    +        if whence is SEEK_SET:
    +            start_index = 0
    +        elif whence is SEEK_CUR:
    +            start_index = self._position
    +        elif whence is SEEK_END:
    +            start_index = self._length
    +            offset = -offset
    +        else:
    +            raise ValueError("Invalid argument for the 'whence' parameter.")
    +
    +        pos = start_index + offset
    +
    +        if pos > self._length:
    +            pos = self._length
    +        elif pos < 0:
    +            pos = 0
    +
    +        # check if buffer is still valid
    +        # if not, drop buffer
    +        if pos < self._current_buffer_start or pos >= self._current_buffer_start + self._current_buffer_size:
    +            self._buffer.close()
    +            self._buffer = BytesIO()
    +        else:  # if yes seek to correct position
    +            delta = pos - self._current_buffer_start
    +            self._buffer.seek(delta, SEEK_SET)
    +
    +        self._position = pos
    +        return pos
    +
    +    def seekable(self):
    +        return True
    +
    +    def tell(self):
    +        return self._position
    +
    +    def write(self):
    +        raise UnsupportedOperation
    +
    +    def writelines(self):
    +        raise UnsupportedOperation
    +
    +    def writeable(self):
    +        return False
    +
    +
    +class IterStreamer(object):
    +    """
    +    File-like streaming iterator.
    +    """
    +
    +    def __init__(self, generator, encoding="UTF-8"):
    +        self.generator = generator
    +        self.iterator = iter(generator)
    +        self.leftover = b""
    +        self.encoding = encoding
    +
    +    def __len__(self):
    +        return self.generator.__len__()
    +
    +    def __iter__(self):
    +        return self.iterator
    +
    +    def seekable(self):
    +        return False
    +
    +    def next(self):
    +        return next(self.iterator)
    +
    +    def tell(self, *args, **kwargs):
    +        raise UnsupportedOperation("Data generator does not support tell.")
    +
    +    def seek(self, *args, **kwargs):
    +        raise UnsupportedOperation("Data generator is unseekable.")
    +
    +    def read(self, size):
    +        data = self.leftover
    +        count = len(self.leftover)
    +        try:
    +            while count < size:
    +                chunk = self.next()
    +                if isinstance(chunk, six.text_type):
    +                    chunk = chunk.encode(self.encoding)
    +                data += chunk
    +                count += len(chunk)
    +        except StopIteration:
    +            pass
    +
    +        if count > size:
    +            self.leftover = data[size:]
    +
    +        return data[:size]
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/uploads_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/uploads_async.py
    new file mode 100644
    index 000000000000..92fcab5ef5f0
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared/uploads_async.py
    @@ -0,0 +1,350 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=no-self-use
    +
    +import asyncio
    +from asyncio import Lock
    +from itertools import islice
    +import threading
    +
    +from math import ceil
    +
    +import six
    +
    +from . import encode_base64, url_quote
    +from .request_handlers import get_length
    +from .response_handlers import return_response_headers
    +from .encryption import get_blob_encryptor_and_padder
    +from .uploads import SubStream, IterStreamer  # pylint: disable=unused-import
    +
    +
    +_LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE = 4 * 1024 * 1024
    +_ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM = '{0} should be a seekable file-like/io.IOBase type stream object.'
    +
    +
    +async def _parallel_uploads(uploader, pending, running):
    +    range_ids = []
    +    while True:
    +        # Wait for some download to finish before adding a new one
    +        done, running = await asyncio.wait(running, return_when=asyncio.FIRST_COMPLETED)
    +        range_ids.extend([chunk.result() for chunk in done])
    +        try:
    +            next_chunk = next(pending)
    +        except StopIteration:
    +            break
    +        else:
    +            running.add(asyncio.ensure_future(uploader(next_chunk)))
    +
    +    # Wait for the remaining uploads to finish
    +    if running:
    +        done, _running = await asyncio.wait(running)
    +        range_ids.extend([chunk.result() for chunk in done])
    +    return range_ids
    +
    +
    +async def upload_data_chunks(
    +        service=None,
    +        uploader_class=None,
    +        total_size=None,
    +        chunk_size=None,
    +        max_concurrency=None,
    +        stream=None,
    +        encryption_options=None,
    +        **kwargs):
    +
    +    if encryption_options:
    +        encryptor, padder = get_blob_encryptor_and_padder(
    +            encryption_options.get('cek'),
    +            encryption_options.get('vector'),
    +            uploader_class is not PageBlobChunkUploader)
    +        kwargs['encryptor'] = encryptor
    +        kwargs['padder'] = padder
    +
    +    parallel = max_concurrency > 1
    +    if parallel and 'modified_access_conditions' in kwargs:
    +        # Access conditions do not work with parallelism
    +        kwargs['modified_access_conditions'] = None
    +
    +    uploader = uploader_class(
    +        service=service,
    +        total_size=total_size,
    +        chunk_size=chunk_size,
    +        stream=stream,
    +        parallel=parallel,
    +        **kwargs)
    +
    +    if parallel:
    +        upload_tasks = uploader.get_chunk_streams()
    +        running_futures = [
    +            asyncio.ensure_future(uploader.process_chunk(u))
    +            for u in islice(upload_tasks, 0, max_concurrency)
    +        ]
    +        range_ids = await _parallel_uploads(uploader.process_chunk, upload_tasks, running_futures)
    +    else:
    +        range_ids = []
    +        for chunk in uploader.get_chunk_streams():
    +            range_ids.append(await uploader.process_chunk(chunk))
    +
    +    if any(range_ids):
    +        return [r[1] for r in sorted(range_ids, key=lambda r: r[0])]
    +    return uploader.response_headers
    +
    +
    +async def upload_substream_blocks(
    +        service=None,
    +        uploader_class=None,
    +        total_size=None,
    +        chunk_size=None,
    +        max_concurrency=None,
    +        stream=None,
    +        **kwargs):
    +    parallel = max_concurrency > 1
    +    if parallel and 'modified_access_conditions' in kwargs:
    +        # Access conditions do not work with parallelism
    +        kwargs['modified_access_conditions'] = None
    +    uploader = uploader_class(
    +        service=service,
    +        total_size=total_size,
    +        chunk_size=chunk_size,
    +        stream=stream,
    +        parallel=parallel,
    +        **kwargs)
    +
    +    if parallel:
    +        upload_tasks = uploader.get_substream_blocks()
    +        running_futures = [
    +            asyncio.ensure_future(uploader.process_substream_block(u))
    +            for u in islice(upload_tasks, 0, max_concurrency)
    +        ]
    +        range_ids = await _parallel_uploads(uploader.process_substream_block, upload_tasks, running_futures)
    +    else:
    +        range_ids = []
    +        for block in uploader.get_substream_blocks():
    +            range_ids.append(await uploader.process_substream_block(block))
    +    return sorted(range_ids)
    +
    +
    +class _ChunkUploader(object):  # pylint: disable=too-many-instance-attributes
    +
    +    def __init__(self, service, total_size, chunk_size, stream, parallel, encryptor=None, padder=None, **kwargs):
    +        self.service = service
    +        self.total_size = total_size
    +        self.chunk_size = chunk_size
    +        self.stream = stream
    +        self.parallel = parallel
    +
    +        # Stream management
    +        self.stream_start = stream.tell() if parallel else None
    +        self.stream_lock = threading.Lock() if parallel else None
    +
    +        # Progress feedback
    +        self.progress_total = 0
    +        self.progress_lock = Lock() if parallel else None
    +
    +        # Encryption
    +        self.encryptor = encryptor
    +        self.padder = padder
    +        self.response_headers = None
    +        self.etag = None
    +        self.last_modified = None
    +        self.request_options = kwargs
    +
    +    def get_chunk_streams(self):
    +        index = 0
    +        while True:
    +            data = b''
    +            read_size = self.chunk_size
    +
    +            # Buffer until we either reach the end of the stream or get a whole chunk.
    +            while True:
    +                if self.total_size:
    +                    read_size = min(self.chunk_size - len(data), self.total_size - (index + len(data)))
    +                temp = self.stream.read(read_size)
    +                if not isinstance(temp, six.binary_type):
    +                    raise TypeError('Blob data should be of type bytes.')
    +                data += temp or b""
    +
    +                # We have read an empty string and so are at the end
    +                # of the buffer or we have read a full chunk.
    +                if temp == b'' or len(data) == self.chunk_size:
    +                    break
    +
    +            if len(data) == self.chunk_size:
    +                if self.padder:
    +                    data = self.padder.update(data)
    +                if self.encryptor:
    +                    data = self.encryptor.update(data)
    +                yield index, data
    +            else:
    +                if self.padder:
    +                    data = self.padder.update(data) + self.padder.finalize()
    +                if self.encryptor:
    +                    data = self.encryptor.update(data) + self.encryptor.finalize()
    +                if data:
    +                    yield index, data
    +                break
    +            index += len(data)
    +
    +    async def process_chunk(self, chunk_data):
    +        chunk_bytes = chunk_data[1]
    +        chunk_offset = chunk_data[0]
    +        return await self._upload_chunk_with_progress(chunk_offset, chunk_bytes)
    +
    +    async def _update_progress(self, length):
    +        if self.progress_lock is not None:
    +            async with self.progress_lock:
    +                self.progress_total += length
    +        else:
    +            self.progress_total += length
    +
    +    async def _upload_chunk(self, chunk_offset, chunk_data):
    +        raise NotImplementedError("Must be implemented by child class.")
    +
    +    async def _upload_chunk_with_progress(self, chunk_offset, chunk_data):
    +        range_id = await self._upload_chunk(chunk_offset, chunk_data)
    +        await self._update_progress(len(chunk_data))
    +        return range_id
    +
    +    def get_substream_blocks(self):
    +        assert self.chunk_size is not None
    +        lock = self.stream_lock
    +        blob_length = self.total_size
    +
    +        if blob_length is None:
    +            blob_length = get_length(self.stream)
    +            if blob_length is None:
    +                raise ValueError("Unable to determine content length of upload data.")
    +
    +        blocks = int(ceil(blob_length / (self.chunk_size * 1.0)))
    +        last_block_size = self.chunk_size if blob_length % self.chunk_size == 0 else blob_length % self.chunk_size
    +
    +        for i in range(blocks):
    +            index = i * self.chunk_size
    +            length = last_block_size if i == blocks - 1 else self.chunk_size
    +            yield ('BlockId{}'.format("%05d" % i), SubStream(self.stream, index, length, lock))
    +
    +    async def process_substream_block(self, block_data):
    +        return await self._upload_substream_block_with_progress(block_data[0], block_data[1])
    +
    +    async def _upload_substream_block(self, block_id, block_stream):
    +        raise NotImplementedError("Must be implemented by child class.")
    +
    +    async def _upload_substream_block_with_progress(self, block_id, block_stream):
    +        range_id = await self._upload_substream_block(block_id, block_stream)
    +        await self._update_progress(len(block_stream))
    +        return range_id
    +
    +    def set_response_properties(self, resp):
    +        self.etag = resp.etag
    +        self.last_modified = resp.last_modified
    +
    +
    +class BlockBlobChunkUploader(_ChunkUploader):
    +
    +    def __init__(self, *args, **kwargs):
    +        kwargs.pop('modified_access_conditions', None)
    +        super(BlockBlobChunkUploader, self).__init__(*args, **kwargs)
    +        self.current_length = None
    +
    +    async def _upload_chunk(self, chunk_offset, chunk_data):
    +        # TODO: This is incorrect, but works with recording.
    +        index = '{0:032d}'.format(chunk_offset)
    +        block_id = encode_base64(url_quote(encode_base64(index)))
    +        await self.service.stage_block(
    +            block_id,
    +            len(chunk_data),
    +            chunk_data,
    +            data_stream_total=self.total_size,
    +            upload_stream_current=self.progress_total,
    +            **self.request_options)
    +        return index, block_id
    +
    +    async def _upload_substream_block(self, block_id, block_stream):
    +        try:
    +            await self.service.stage_block(
    +                block_id,
    +                len(block_stream),
    +                block_stream,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options)
    +        finally:
    +            block_stream.close()
    +        return block_id
    +
    +
    +class PageBlobChunkUploader(_ChunkUploader):  # pylint: disable=abstract-method
    +
    +    def _is_chunk_empty(self, chunk_data):
    +        # read until non-zero byte is encountered
    +        # if reached the end without returning, then chunk_data is all 0's
    +        for each_byte in chunk_data:
    +            if each_byte not in [0, b'\x00']:
    +                return False
    +        return True
    +
    +    async def _upload_chunk(self, chunk_offset, chunk_data):
    +        # avoid uploading the empty pages
    +        if not self._is_chunk_empty(chunk_data):
    +            chunk_end = chunk_offset + len(chunk_data) - 1
    +            content_range = 'bytes={0}-{1}'.format(chunk_offset, chunk_end)
    +            computed_md5 = None
    +            self.response_headers = await self.service.upload_pages(
    +                chunk_data,
    +                content_length=len(chunk_data),
    +                transactional_content_md5=computed_md5,
    +                range=content_range,
    +                cls=return_response_headers,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options)
    +
    +            if not self.parallel and self.request_options.get('modified_access_conditions'):
    +                self.request_options['modified_access_conditions'].if_match = self.response_headers['etag']
    +
    +
    +class AppendBlobChunkUploader(_ChunkUploader):  # pylint: disable=abstract-method
    +
    +    def __init__(self, *args, **kwargs):
    +        super(AppendBlobChunkUploader, self).__init__(*args, **kwargs)
    +        self.current_length = None
    +
    +    async def _upload_chunk(self, chunk_offset, chunk_data):
    +        if self.current_length is None:
    +            self.response_headers = await self.service.append_block(
    +                chunk_data,
    +                content_length=len(chunk_data),
    +                cls=return_response_headers,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options)
    +            self.current_length = int(self.response_headers['blob_append_offset'])
    +        else:
    +            self.request_options['append_position_access_conditions'].append_position = \
    +                self.current_length + chunk_offset
    +            self.response_headers = await self.service.append_block(
    +                chunk_data,
    +                content_length=len(chunk_data),
    +                cls=return_response_headers,
    +                data_stream_total=self.total_size,
    +                upload_stream_current=self.progress_total,
    +                **self.request_options)
    +
    +
    +class FileChunkUploader(_ChunkUploader):  # pylint: disable=abstract-method
    +
    +    async def _upload_chunk(self, chunk_offset, chunk_data):
    +        chunk_end = chunk_offset + len(chunk_data) - 1
    +        response = await self.service.upload_range(
    +            chunk_data,
    +            chunk_offset,
    +            chunk_end,
    +            data_stream_total=self.total_size,
    +            upload_stream_current=self.progress_total,
    +            **self.request_options
    +        )
    +        range_id = 'bytes={0}-{1}'.format(chunk_offset, chunk_end)
    +        return range_id, response
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared_access_signature.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared_access_signature.py
    new file mode 100644
    index 000000000000..8c80c0afa4c6
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_shared_access_signature.py
    @@ -0,0 +1,571 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, TYPE_CHECKING
    +)
    +
    +from ._shared import sign_string, url_quote
    +from ._shared.constants import X_MS_VERSION
    +from ._shared.models import Services
    +from ._shared.shared_access_signature import SharedAccessSignature, _SharedAccessHelper, \
    +    QueryStringConstants
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from . import (
    +        ResourceTypes,
    +        AccountSasPermissions,
    +        UserDelegationKey,
    +        ContainerSasPermissions,
    +        BlobSasPermissions
    +    )
    +
    +class BlobQueryStringConstants(object):
    +    SIGNED_TIMESTAMP = 'snapshot'
    +
    +
    +class BlobSharedAccessSignature(SharedAccessSignature):
    +    '''
    +    Provides a factory for creating blob and container access
    +    signature tokens with a common account name and account key.  Users can either
    +    use the factory or can construct the appropriate service and use the
    +    generate_*_shared_access_signature method directly.
    +    '''
    +
    +    def __init__(self, account_name, account_key=None, user_delegation_key=None):
    +        '''
    +        :param str account_name:
    +            The storage account name used to generate the shared access signatures.
    +        :param str account_key:
    +            The access key to generate the shares access signatures.
    +        :param ~azure.storage.blob.models.UserDelegationKey user_delegation_key:
    +            Instead of an account key, the user could pass in a user delegation key.
    +            A user delegation key can be obtained from the service by authenticating with an AAD identity;
    +            this can be accomplished by calling get_user_delegation_key on any Blob service object.
    +        '''
    +        super(BlobSharedAccessSignature, self).__init__(account_name, account_key, x_ms_version=X_MS_VERSION)
    +        self.user_delegation_key = user_delegation_key
    +
    +    def generate_blob(self, container_name, blob_name, snapshot=None, permission=None,
    +                      expiry=None, start=None, policy_id=None, ip=None, protocol=None,
    +                      cache_control=None, content_disposition=None,
    +                      content_encoding=None, content_language=None,
    +                      content_type=None):
    +        '''
    +        Generates a shared access signature for the blob or one of its snapshots.
    +        Use the returned signature with the sas_token parameter of any BlobService.
    +
    +        :param str container_name:
    +            Name of container.
    +        :param str blob_name:
    +            Name of blob.
    +        :param str snapshot:
    +            The snapshot parameter is an opaque DateTime value that,
    +            when present, specifies the blob snapshot to grant permission.
    +        :param BlobSasPermissions permission:
    +            The permissions associated with the shared access signature. The
    +            user is restricted to operations allowed by the permissions.
    +            Permissions must be ordered read, write, delete, list.
    +            Required unless an id is given referencing a stored access policy
    +            which contains this field. This field must be omitted if it has been
    +            specified in an associated stored access policy.
    +        :param expiry:
    +            The time at which the shared access signature becomes invalid.
    +            Required unless an id is given referencing a stored access policy
    +            which contains this field. This field must be omitted if it has
    +            been specified in an associated stored access policy. Azure will always
    +            convert values to UTC. If a date is passed in without timezone info, it
    +            is assumed to be UTC.
    +        :type expiry: datetime or str
    +        :param start:
    +            The time at which the shared access signature becomes valid. If
    +            omitted, start time for this call is assumed to be the time when the
    +            storage service receives the request. Azure will always convert values
    +            to UTC. If a date is passed in without timezone info, it is assumed to
    +            be UTC.
    +        :type start: datetime or str
    +        :param str policy_id:
    +            A unique value up to 64 characters in length that correlates to a
    +            stored access policy. To create a stored access policy, use
    +            set_blob_service_properties.
    +        :param str ip:
    +            Specifies an IP address or a range of IP addresses from which to accept requests.
    +            If the IP address from which the request originates does not match the IP address
    +            or address range specified on the SAS token, the request is not authenticated.
    +            For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS
    +            restricts the request to those IP addresses.
    +        :param str protocol:
    +            Specifies the protocol permitted for a request made. The default value
    +            is https,http. See :class:`~azure.storage.common.models.Protocol` for possible values.
    +        :param str cache_control:
    +            Response header value for Cache-Control when resource is accessed
    +            using this shared access signature.
    +        :param str content_disposition:
    +            Response header value for Content-Disposition when resource is accessed
    +            using this shared access signature.
    +        :param str content_encoding:
    +            Response header value for Content-Encoding when resource is accessed
    +            using this shared access signature.
    +        :param str content_language:
    +            Response header value for Content-Language when resource is accessed
    +            using this shared access signature.
    +        :param str content_type:
    +            Response header value for Content-Type when resource is accessed
    +            using this shared access signature.
    +        '''
    +        resource_path = container_name + '/' + blob_name
    +
    +        sas = _BlobSharedAccessHelper()
    +        sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version)
    +        sas.add_id(policy_id)
    +        sas.add_resource('b' if snapshot is None else 'bs')
    +        sas.add_timestamp(snapshot)
    +        sas.add_override_response_headers(cache_control, content_disposition,
    +                                          content_encoding, content_language,
    +                                          content_type)
    +        sas.add_resource_signature(self.account_name, self.account_key, resource_path,
    +                                   user_delegation_key=self.user_delegation_key)
    +
    +        return sas.get_token()
    +
    +    def generate_container(self, container_name, permission=None, expiry=None,
    +                           start=None, policy_id=None, ip=None, protocol=None,
    +                           cache_control=None, content_disposition=None,
    +                           content_encoding=None, content_language=None,
    +                           content_type=None):
    +        '''
    +        Generates a shared access signature for the container.
    +        Use the returned signature with the sas_token parameter of any BlobService.
    +
    +        :param str container_name:
    +            Name of container.
    +        :param ContainerSasPermissions permission:
    +            The permissions associated with the shared access signature. The
    +            user is restricted to operations allowed by the permissions.
    +            Permissions must be ordered read, write, delete, list.
    +            Required unless an id is given referencing a stored access policy
    +            which contains this field. This field must be omitted if it has been
    +            specified in an associated stored access policy.
    +        :param expiry:
    +            The time at which the shared access signature becomes invalid.
    +            Required unless an id is given referencing a stored access policy
    +            which contains this field. This field must be omitted if it has
    +            been specified in an associated stored access policy. Azure will always
    +            convert values to UTC. If a date is passed in without timezone info, it
    +            is assumed to be UTC.
    +        :type expiry: datetime or str
    +        :param start:
    +            The time at which the shared access signature becomes valid. If
    +            omitted, start time for this call is assumed to be the time when the
    +            storage service receives the request. Azure will always convert values
    +            to UTC. If a date is passed in without timezone info, it is assumed to
    +            be UTC.
    +        :type start: datetime or str
    +        :param str policy_id:
    +            A unique value up to 64 characters in length that correlates to a
    +            stored access policy. To create a stored access policy, use
    +            set_blob_service_properties.
    +        :param str ip:
    +            Specifies an IP address or a range of IP addresses from which to accept requests.
    +            If the IP address from which the request originates does not match the IP address
    +            or address range specified on the SAS token, the request is not authenticated.
    +            For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS
    +            restricts the request to those IP addresses.
    +        :param str protocol:
    +            Specifies the protocol permitted for a request made. The default value
    +            is https,http. See :class:`~azure.storage.common.models.Protocol` for possible values.
    +        :param str cache_control:
    +            Response header value for Cache-Control when resource is accessed
    +            using this shared access signature.
    +        :param str content_disposition:
    +            Response header value for Content-Disposition when resource is accessed
    +            using this shared access signature.
    +        :param str content_encoding:
    +            Response header value for Content-Encoding when resource is accessed
    +            using this shared access signature.
    +        :param str content_language:
    +            Response header value for Content-Language when resource is accessed
    +            using this shared access signature.
    +        :param str content_type:
    +            Response header value for Content-Type when resource is accessed
    +            using this shared access signature.
    +        '''
    +        sas = _BlobSharedAccessHelper()
    +        sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version)
    +        sas.add_id(policy_id)
    +        sas.add_resource('c')
    +        sas.add_override_response_headers(cache_control, content_disposition,
    +                                          content_encoding, content_language,
    +                                          content_type)
    +        sas.add_resource_signature(self.account_name, self.account_key, container_name,
    +                                   user_delegation_key=self.user_delegation_key)
    +        return sas.get_token()
    +
    +
    +class _BlobSharedAccessHelper(_SharedAccessHelper):
    +
    +    def add_timestamp(self, timestamp):
    +        self._add_query(BlobQueryStringConstants.SIGNED_TIMESTAMP, timestamp)
    +
    +    def get_value_to_append(self, query):
    +        return_value = self.query_dict.get(query) or ''
    +        return return_value + '\n'
    +
    +    def add_resource_signature(self, account_name, account_key, path, user_delegation_key=None):
    +        # pylint: disable = no-member
    +        if path[0] != '/':
    +            path = '/' + path
    +
    +        canonicalized_resource = '/blob/' + account_name + path + '\n'
    +
    +        # Form the string to sign from shared_access_policy and canonicalized
    +        # resource. The order of values is important.
    +        string_to_sign = \
    +            (self.get_value_to_append(QueryStringConstants.SIGNED_PERMISSION) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_START) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_EXPIRY) +
    +             canonicalized_resource)
    +
    +        if user_delegation_key is not None:
    +            self._add_query(QueryStringConstants.SIGNED_OID, user_delegation_key.signed_oid)
    +            self._add_query(QueryStringConstants.SIGNED_TID, user_delegation_key.signed_tid)
    +            self._add_query(QueryStringConstants.SIGNED_KEY_START, user_delegation_key.signed_start)
    +            self._add_query(QueryStringConstants.SIGNED_KEY_EXPIRY, user_delegation_key.signed_expiry)
    +            self._add_query(QueryStringConstants.SIGNED_KEY_SERVICE, user_delegation_key.signed_service)
    +            self._add_query(QueryStringConstants.SIGNED_KEY_VERSION, user_delegation_key.signed_version)
    +
    +            string_to_sign += \
    +                (self.get_value_to_append(QueryStringConstants.SIGNED_OID) +
    +                 self.get_value_to_append(QueryStringConstants.SIGNED_TID) +
    +                 self.get_value_to_append(QueryStringConstants.SIGNED_KEY_START) +
    +                 self.get_value_to_append(QueryStringConstants.SIGNED_KEY_EXPIRY) +
    +                 self.get_value_to_append(QueryStringConstants.SIGNED_KEY_SERVICE) +
    +                 self.get_value_to_append(QueryStringConstants.SIGNED_KEY_VERSION))
    +        else:
    +            string_to_sign += self.get_value_to_append(QueryStringConstants.SIGNED_IDENTIFIER)
    +
    +        string_to_sign += \
    +            (self.get_value_to_append(QueryStringConstants.SIGNED_IP) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_PROTOCOL) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_VERSION) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_RESOURCE) +
    +             self.get_value_to_append(BlobQueryStringConstants.SIGNED_TIMESTAMP) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_CACHE_CONTROL) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_CONTENT_DISPOSITION) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_CONTENT_ENCODING) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_CONTENT_LANGUAGE) +
    +             self.get_value_to_append(QueryStringConstants.SIGNED_CONTENT_TYPE))
    +
    +        # remove the trailing newline
    +        if string_to_sign[-1] == '\n':
    +            string_to_sign = string_to_sign[:-1]
    +
    +        self._add_query(QueryStringConstants.SIGNED_SIGNATURE,
    +                        sign_string(account_key if user_delegation_key is None else user_delegation_key.value,
    +                                    string_to_sign))
    +
    +    def get_token(self):
    +        # a conscious decision was made to exclude the timestamp in the generated token
    +        # this is to avoid having two snapshot ids in the query parameters when the user appends the snapshot timestamp
    +        exclude = [BlobQueryStringConstants.SIGNED_TIMESTAMP]
    +        return '&'.join(['{0}={1}'.format(n, url_quote(v))
    +                         for n, v in self.query_dict.items() if v is not None and n not in exclude])
    +
    +
    +def generate_account_sas(
    +        account_name,  # type: str
    +        account_key,  # type: str
    +        resource_types,  # type: Union[ResourceTypes, str]
    +        permission,  # type: Union[AccountSasPermissions, str]
    +        expiry,  # type: Optional[Union[datetime, str]]
    +        start=None,  # type: Optional[Union[datetime, str]]
    +        ip=None,  # type: Optional[str]
    +        **kwargs # type: Any
    +    ):  # type: (...) -> str
    +    """Generates a shared access signature for the blob service.
    +
    +    Use the returned signature with the credential parameter of any BlobServiceClient,
    +    ContainerClient or BlobClient.
    +
    +    :param str account_name:
    +        The storage account name used to generate the shared access signature.
    +    :param str account_key:
    +        The account key, also called shared key or access key, to generate the shared access signature.
    +    :param resource_types:
    +        Specifies the resource types that are accessible with the account SAS.
    +    :type resource_types: str or ~azure.storage.blob.ResourceTypes
    +    :param permission:
    +        The permissions associated with the shared access signature. The
    +        user is restricted to operations allowed by the permissions.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has been
    +        specified in an associated stored access policy.
    +    :type permission: str or ~azure.storage.blob.AccountSasPermissions
    +    :param expiry:
    +        The time at which the shared access signature becomes invalid.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has
    +        been specified in an associated stored access policy. Azure will always
    +        convert values to UTC. If a date is passed in without timezone info, it
    +        is assumed to be UTC.
    +    :type expiry: ~datetime.datetime or str
    +    :param start:
    +        The time at which the shared access signature becomes valid. If
    +        omitted, start time for this call is assumed to be the time when the
    +        storage service receives the request. Azure will always convert values
    +        to UTC. If a date is passed in without timezone info, it is assumed to
    +        be UTC.
    +    :type start: ~datetime.datetime or str
    +    :param str ip:
    +        Specifies an IP address or a range of IP addresses from which to accept requests.
    +        If the IP address from which the request originates does not match the IP address
    +        or address range specified on the SAS token, the request is not authenticated.
    +        For example, specifying ip=168.1.5.65 or ip=168.1.5.60-168.1.5.70 on the SAS
    +        restricts the request to those IP addresses.
    +    :keyword str protocol:
    +        Specifies the protocol permitted for a request made. The default value is https.
    +    :return: A Shared Access Signature (sas) token.
    +    :rtype: str
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication.py
    +            :start-after: [START create_sas_token]
    +            :end-before: [END create_sas_token]
    +            :language: python
    +            :dedent: 8
    +            :caption: Generating a shared access signature.
    +    """
    +    sas = SharedAccessSignature(account_name, account_key)
    +    return sas.generate_account(
    +        services=Services(blob=True),
    +        resource_types=resource_types,
    +        permission=permission,
    +        expiry=expiry,
    +        start=start,
    +        ip=ip,
    +        **kwargs
    +    ) # type: ignore
    +
    +
    +def generate_container_sas(
    +        account_name,  # type: str
    +        container_name,  # type: str
    +        account_key=None,  # type: Optional[str]
    +        user_delegation_key=None,  # type: Optional[UserDelegationKey]
    +        permission=None,  # type: Optional[Union[ContainerSasPermissions, str]]
    +        expiry=None,  # type: Optional[Union[datetime, str]]
    +        start=None,  # type: Optional[Union[datetime, str]]
    +        policy_id=None,  # type: Optional[str]
    +        ip=None,  # type: Optional[str]
    +        **kwargs # type: Any
    +    ):
    +    # type: (...) -> Any
    +    """Generates a shared access signature for a container.
    +
    +    Use the returned signature with the credential parameter of any BlobServiceClient,
    +    ContainerClient or BlobClient.
    +
    +    :param str account_name:
    +        The storage account name used to generate the shared access signature.
    +    :param str container_name:
    +        The name of the container.
    +    :param str account_key:
    +        The account key, also called shared key or access key, to generate the shared access signature.
    +        Either `account_key` or `user_delegation_key` must be specified.
    +    :param ~azure.storage.blob.UserDelegationKey user_delegation_key:
    +        Instead of an account shared key, the user could pass in a user delegation key.
    +        A user delegation key can be obtained from the service by authenticating with an AAD identity;
    +        this can be accomplished by calling :func:`~azure.storage.blob.BlobServiceClient.get_user_delegation_key`.
    +        When present, the SAS is signed with the user delegation key instead.
    +    :param permission:
    +        The permissions associated with the shared access signature. The
    +        user is restricted to operations allowed by the permissions.
    +        Permissions must be ordered read, write, delete, list.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has been
    +        specified in an associated stored access policy.
    +    :type permission: str or ~azure.storage.blob.ContainerSasPermissions
    +    :param expiry:
    +        The time at which the shared access signature becomes invalid.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has
    +        been specified in an associated stored access policy. Azure will always
    +        convert values to UTC. If a date is passed in without timezone info, it
    +        is assumed to be UTC.
    +    :type expiry: ~datetime.datetime or str
    +    :param start:
    +        The time at which the shared access signature becomes valid. If
    +        omitted, start time for this call is assumed to be the time when the
    +        storage service receives the request. Azure will always convert values
    +        to UTC. If a date is passed in without timezone info, it is assumed to
    +        be UTC.
    +    :type start: ~datetime.datetime or str
    +    :param str policy_id:
    +        A unique value up to 64 characters in length that correlates to a
    +        stored access policy. To create a stored access policy, use
    +        :func:`~azure.storage.blob.ContainerClient.set_container_access_policy`.
    +    :param str ip:
    +        Specifies an IP address or a range of IP addresses from which to accept requests.
    +        If the IP address from which the request originates does not match the IP address
    +        or address range specified on the SAS token, the request is not authenticated.
    +        For example, specifying ip=168.1.5.65 or ip=168.1.5.60-168.1.5.70 on the SAS
    +        restricts the request to those IP addresses.
    +    :keyword str protocol:
    +        Specifies the protocol permitted for a request made. The default value is https.
    +    :keyword str cache_control:
    +        Response header value for Cache-Control when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_disposition:
    +        Response header value for Content-Disposition when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_encoding:
    +        Response header value for Content-Encoding when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_language:
    +        Response header value for Content-Language when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_type:
    +        Response header value for Content-Type when resource is accessed
    +        using this shared access signature.
    +    :return: A Shared Access Signature (sas) token.
    +    :rtype: str
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_containers.py
    +            :start-after: [START generate_sas_token]
    +            :end-before: [END generate_sas_token]
    +            :language: python
    +            :dedent: 12
    +            :caption: Generating a sas token.
    +    """
    +    if not user_delegation_key and not account_key:
    +        raise ValueError("Either user_delegation_key or account_key must be provided.")
    +
    +    if user_delegation_key:
    +        sas = BlobSharedAccessSignature(account_name, user_delegation_key=user_delegation_key)
    +    else:
    +        sas = BlobSharedAccessSignature(account_name, account_key=account_key)
    +    return sas.generate_container(
    +        container_name,
    +        permission=permission,
    +        expiry=expiry,
    +        start=start,
    +        policy_id=policy_id,
    +        ip=ip,
    +        **kwargs
    +    )
    +
    +
    +def generate_blob_sas(
    +        account_name,  # type: str
    +        container_name,  # type: str
    +        blob_name,  # type: str
    +        snapshot=None,  # type: Optional[str]
    +        account_key=None,  # type: Optional[str]
    +        user_delegation_key=None,  # type: Optional[UserDelegationKey]
    +        permission=None,  # type: Optional[Union[BlobSasPermissions, str]]
    +        expiry=None,  # type: Optional[Union[datetime, str]]
    +        start=None,  # type: Optional[Union[datetime, str]]
    +        policy_id=None,  # type: Optional[str]
    +        ip=None,  # type: Optional[str]
    +        **kwargs # type: Any
    +    ):
    +    # type: (...) -> Any
    +    """Generates a shared access signature for a blob.
    +
    +    Use the returned signature with the credential parameter of any BlobServiceClient,
    +    ContainerClient or BlobClient.
    +
    +    :param str account_name:
    +        The storage account name used to generate the shared access signature.
    +    :param str container_name:
    +        The name of the container.
    +    :param str blob_name:
    +        The name of the blob.
    +    :param str snapshot:
    +        An optional blob snapshot ID.
    +    :param str account_key:
    +        The account key, also called shared key or access key, to generate the shared access signature.
    +        Either `account_key` or `user_delegation_key` must be specified.
    +    :param ~azure.storage.blob.UserDelegationKey user_delegation_key:
    +        Instead of an account shared key, the user could pass in a user delegation key.
    +        A user delegation key can be obtained from the service by authenticating with an AAD identity;
    +        this can be accomplished by calling :func:`~azure.storage.blob.BlobServiceClient.get_user_delegation_key`.
    +        When present, the SAS is signed with the user delegation key instead.
    +    :param permission:
    +        The permissions associated with the shared access signature. The
    +        user is restricted to operations allowed by the permissions.
    +        Permissions must be ordered read, write, delete, list.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has been
    +        specified in an associated stored access policy.
    +    :type permission: str or ~azure.storage.blob.BlobSasPermissions
    +    :param expiry:
    +        The time at which the shared access signature becomes invalid.
    +        Required unless an id is given referencing a stored access policy
    +        which contains this field. This field must be omitted if it has
    +        been specified in an associated stored access policy. Azure will always
    +        convert values to UTC. If a date is passed in without timezone info, it
    +        is assumed to be UTC.
    +    :type expiry: ~datetime.datetime or str
    +    :param start:
    +        The time at which the shared access signature becomes valid. If
    +        omitted, start time for this call is assumed to be the time when the
    +        storage service receives the request. Azure will always convert values
    +        to UTC. If a date is passed in without timezone info, it is assumed to
    +        be UTC.
    +    :type start: ~datetime.datetime or str
    +    :param str policy_id:
    +        A unique value up to 64 characters in length that correlates to a
    +        stored access policy. To create a stored access policy, use
    +        :func:`~azure.storage.blob.ContainerClient.set_container_access_policy()`.
    +    :param str ip:
    +        Specifies an IP address or a range of IP addresses from which to accept requests.
    +        If the IP address from which the request originates does not match the IP address
    +        or address range specified on the SAS token, the request is not authenticated.
    +        For example, specifying ip=168.1.5.65 or ip=168.1.5.60-168.1.5.70 on the SAS
    +        restricts the request to those IP addresses.
    +    :keyword str protocol:
    +        Specifies the protocol permitted for a request made. The default value is https.
    +    :keyword str cache_control:
    +        Response header value for Cache-Control when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_disposition:
    +        Response header value for Content-Disposition when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_encoding:
    +        Response header value for Content-Encoding when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_language:
    +        Response header value for Content-Language when resource is accessed
    +        using this shared access signature.
    +    :keyword str content_type:
    +        Response header value for Content-Type when resource is accessed
    +        using this shared access signature.
    +    :return: A Shared Access Signature (sas) token.
    +    :rtype: str
    +    """
    +    if not user_delegation_key and not account_key:
    +        raise ValueError("Either user_delegation_key or account_key must be provided.")
    +
    +    if user_delegation_key:
    +        sas = BlobSharedAccessSignature(account_name, user_delegation_key=user_delegation_key)
    +    else:
    +        sas = BlobSharedAccessSignature(account_name, account_key=account_key)
    +    return sas.generate_blob(
    +        container_name,
    +        blob_name,
    +        snapshot=snapshot,
    +        permission=permission,
    +        expiry=expiry,
    +        start=start,
    +        policy_id=policy_id,
    +        ip=ip,
    +        **kwargs
    +    )
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_upload_helpers.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_upload_helpers.py
    new file mode 100644
    index 000000000000..85d40698864f
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_upload_helpers.py
    @@ -0,0 +1,281 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=no-self-use
    +
    +from io import SEEK_SET, UnsupportedOperation
    +from typing import Optional, Union, Any, TypeVar, TYPE_CHECKING # pylint: disable=unused-import
    +
    +import six
    +from azure.core.exceptions import ResourceExistsError, ResourceModifiedError
    +
    +from ._shared.response_handlers import (
    +    process_storage_error,
    +    return_response_headers)
    +from ._shared.models import StorageErrorCode
    +from ._shared.uploads import (
    +    upload_data_chunks,
    +    upload_substream_blocks,
    +    BlockBlobChunkUploader,
    +    PageBlobChunkUploader,
    +    AppendBlobChunkUploader)
    +from ._shared.encryption import generate_blob_encryption_data, encrypt_blob
    +from ._generated.models import (
    +    StorageErrorException,
    +    BlockLookupList,
    +    AppendPositionAccessConditions,
    +    ModifiedAccessConditions,
    +)
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime # pylint: disable=unused-import
    +    BlobLeaseClient = TypeVar("BlobLeaseClient")
    +
    +_LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE = 4 * 1024 * 1024
    +_ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM = '{0} should be a seekable file-like/io.IOBase type stream object.'
    +
    +
    +def _convert_mod_error(error):
    +    message = error.message.replace(
    +        "The condition specified using HTTP conditional header(s) is not met.",
    +        "The specified blob already exists.")
    +    message = message.replace("ConditionNotMet", "BlobAlreadyExists")
    +    overwrite_error = ResourceExistsError(
    +        message=message,
    +        response=error.response,
    +        error=error)
    +    overwrite_error.error_code = StorageErrorCode.blob_already_exists
    +    raise overwrite_error
    +
    +
    +def _any_conditions(modified_access_conditions=None, **kwargs):  # pylint: disable=unused-argument
    +    return any([
    +        modified_access_conditions.if_modified_since,
    +        modified_access_conditions.if_unmodified_since,
    +        modified_access_conditions.if_none_match,
    +        modified_access_conditions.if_match
    +    ])
    +
    +
    +def upload_block_blob(  # pylint: disable=too-many-locals
    +        client=None,
    +        data=None,
    +        stream=None,
    +        length=None,
    +        overwrite=None,
    +        headers=None,
    +        validate_content=None,
    +        max_concurrency=None,
    +        blob_settings=None,
    +        encryption_options=None,
    +        **kwargs):
    +    try:
    +        if not overwrite and not _any_conditions(**kwargs):
    +            kwargs['modified_access_conditions'].if_none_match = '*'
    +        adjusted_count = length
    +        if (encryption_options.get('key') is not None) and (adjusted_count is not None):
    +            adjusted_count += (16 - (length % 16))
    +        blob_headers = kwargs.pop('blob_headers', None)
    +        tier = kwargs.pop('standard_blob_tier', None)
    +
    +        # Do single put if the size is smaller than config.max_single_put_size
    +        if adjusted_count is not None and (adjusted_count < blob_settings.max_single_put_size):
    +            try:
    +                data = data.read(length)
    +                if not isinstance(data, six.binary_type):
    +                    raise TypeError('Blob data should be of type bytes.')
    +            except AttributeError:
    +                pass
    +            if encryption_options.get('key'):
    +                encryption_data, data = encrypt_blob(data, encryption_options['key'])
    +                headers['x-ms-meta-encryptiondata'] = encryption_data
    +            return client.upload(
    +                data,
    +                content_length=adjusted_count,
    +                blob_http_headers=blob_headers,
    +                headers=headers,
    +                cls=return_response_headers,
    +                validate_content=validate_content,
    +                data_stream_total=adjusted_count,
    +                upload_stream_current=0,
    +                tier=tier.value if tier else None,
    +                **kwargs)
    +
    +        use_original_upload_path = blob_settings.use_byte_buffer or \
    +            validate_content or encryption_options.get('required') or \
    +            blob_settings.max_block_size < blob_settings.min_large_block_upload_threshold or \
    +            hasattr(stream, 'seekable') and not stream.seekable() or \
    +            not hasattr(stream, 'seek') or not hasattr(stream, 'tell')
    +
    +        if use_original_upload_path:
    +            if encryption_options.get('key'):
    +                cek, iv, encryption_data = generate_blob_encryption_data(encryption_options['key'])
    +                headers['x-ms-meta-encryptiondata'] = encryption_data
    +                encryption_options['cek'] = cek
    +                encryption_options['vector'] = iv
    +            block_ids = upload_data_chunks(
    +                service=client,
    +                uploader_class=BlockBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                max_concurrency=max_concurrency,
    +                stream=stream,
    +                validate_content=validate_content,
    +                encryption_options=encryption_options,
    +                **kwargs
    +            )
    +        else:
    +            block_ids = upload_substream_blocks(
    +                service=client,
    +                uploader_class=BlockBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                max_concurrency=max_concurrency,
    +                stream=stream,
    +                validate_content=validate_content,
    +                **kwargs
    +            )
    +
    +        block_lookup = BlockLookupList(committed=[], uncommitted=[], latest=[])
    +        block_lookup.latest = block_ids
    +        return client.commit_block_list(
    +            block_lookup,
    +            blob_http_headers=blob_headers,
    +            cls=return_response_headers,
    +            validate_content=validate_content,
    +            headers=headers,
    +            tier=tier.value if tier else None,
    +            **kwargs)
    +    except StorageErrorException as error:
    +        try:
    +            process_storage_error(error)
    +        except ResourceModifiedError as mod_error:
    +            if not overwrite:
    +                _convert_mod_error(mod_error)
    +            raise
    +
    +
    +def upload_page_blob(
    +        client=None,
    +        stream=None,
    +        length=None,
    +        overwrite=None,
    +        headers=None,
    +        validate_content=None,
    +        max_concurrency=None,
    +        blob_settings=None,
    +        encryption_options=None,
    +        **kwargs):
    +    try:
    +        if not overwrite and not _any_conditions(**kwargs):
    +            kwargs['modified_access_conditions'].if_none_match = '*'
    +        if length is None or length < 0:
    +            raise ValueError("A content length must be specified for a Page Blob.")
    +        if length % 512 != 0:
    +            raise ValueError("Invalid page blob size: {0}. "
    +                             "The size must be aligned to a 512-byte boundary.".format(length))
    +        if kwargs.get('premium_page_blob_tier'):
    +            premium_page_blob_tier = kwargs.pop('premium_page_blob_tier')
    +            try:
    +                headers['x-ms-access-tier'] = premium_page_blob_tier.value
    +            except AttributeError:
    +                headers['x-ms-access-tier'] = premium_page_blob_tier
    +        if encryption_options and encryption_options.get('data'):
    +            headers['x-ms-meta-encryptiondata'] = encryption_options['data']
    +        response = client.create(
    +            content_length=0,
    +            blob_content_length=length,
    +            blob_sequence_number=None,
    +            blob_http_headers=kwargs.pop('blob_headers', None),
    +            cls=return_response_headers,
    +            headers=headers,
    +            **kwargs)
    +        if length == 0:
    +            return response
    +
    +        kwargs['modified_access_conditions'] = ModifiedAccessConditions(if_match=response['etag'])
    +        return upload_data_chunks(
    +            service=client,
    +            uploader_class=PageBlobChunkUploader,
    +            total_size=length,
    +            chunk_size=blob_settings.max_page_size,
    +            stream=stream,
    +            max_concurrency=max_concurrency,
    +            validate_content=validate_content,
    +            encryption_options=encryption_options,
    +            **kwargs)
    +
    +    except StorageErrorException as error:
    +        try:
    +            process_storage_error(error)
    +        except ResourceModifiedError as mod_error:
    +            if not overwrite:
    +                _convert_mod_error(mod_error)
    +            raise
    +
    +
    +def upload_append_blob(  # pylint: disable=unused-argument
    +        client=None,
    +        stream=None,
    +        length=None,
    +        overwrite=None,
    +        headers=None,
    +        validate_content=None,
    +        max_concurrency=None,
    +        blob_settings=None,
    +        encryption_options=None,
    +        **kwargs):
    +    try:
    +        if length == 0:
    +            return {}
    +        blob_headers = kwargs.pop('blob_headers', None)
    +        append_conditions = AppendPositionAccessConditions(
    +            max_size=kwargs.pop('maxsize_condition', None),
    +            append_position=None)
    +        try:
    +            if overwrite:
    +                client.create(
    +                    content_length=0,
    +                    blob_http_headers=blob_headers,
    +                    headers=headers,
    +                    **kwargs)
    +            return upload_data_chunks(
    +                service=client,
    +                uploader_class=AppendBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                stream=stream,
    +                max_concurrency=max_concurrency,
    +                validate_content=validate_content,
    +                append_position_access_conditions=append_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            if error.response.status_code != 404:
    +                raise
    +            # rewind the request body if it is a stream
    +            if hasattr(stream, 'read'):
    +                try:
    +                    # attempt to rewind the body to the initial position
    +                    stream.seek(0, SEEK_SET)
    +                except UnsupportedOperation:
    +                    # if body is not seekable, then retry would not work
    +                    raise error
    +            client.create(
    +                content_length=0,
    +                blob_http_headers=blob_headers,
    +                headers=headers,
    +                **kwargs)
    +            return upload_data_chunks(
    +                service=client,
    +                uploader_class=AppendBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                stream=stream,
    +                max_concurrency=max_concurrency,
    +                validate_content=validate_content,
    +                append_position_access_conditions=append_conditions,
    +                **kwargs)
    +    except StorageErrorException as error:
    +        process_storage_error(error)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_version.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_version.py
    new file mode 100644
    index 000000000000..c7e18b39cee7
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/_version.py
    @@ -0,0 +1,7 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "12.2.1"
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/__init__.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/__init__.py
    new file mode 100644
    index 000000000000..247f39e1ffde
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/__init__.py
    @@ -0,0 +1,137 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import os
    +
    +from .._models import BlobType
    +from .._shared.policies_async import ExponentialRetry, LinearRetry
    +from ._blob_client_async import BlobClient
    +from ._container_client_async import ContainerClient
    +from ._blob_service_client_async import BlobServiceClient
    +from ._lease_async import BlobLeaseClient
    +from ._download_async import StorageStreamDownloader
    +
    +
    +async def upload_blob_to_url(
    +        blob_url,  # type: str
    +        data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +        credential=None,  # type: Any
    +        **kwargs):
    +    # type: (...) -> dict[str, Any]
    +    """Upload data to a given URL
    +
    +    The data will be uploaded as a block blob.
    +
    +    :param str blob_url:
    +        The full URI to the blob. This can also include a SAS token.
    +    :param data:
    +        The data to upload. This can be bytes, text, an iterable or a file-like object.
    +    :type data: bytes or str or Iterable
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        blob URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword bool overwrite:
    +        Whether the blob to be uploaded should overwrite the current data.
    +        If True, upload_blob_to_url will overwrite any existing data. If set to False, the
    +        operation will fail with a ResourceExistsError.
    +    :keyword int max_concurrency:
    +        The number of parallel connections with which to download.
    +    :keyword int length:
    +        Number of bytes to read from the stream. This is optional, but
    +        should be supplied for optimal performance.
    +    :keyword dict(str,str) metadata:
    +        Name-value pairs associated with the blob as metadata.
    +    :keyword bool validate_content:
    +        If true, calculates an MD5 hash for each chunk of the blob. The storage
    +        service checks the hash of the content that has arrived with the hash
    +        that was sent. This is primarily valuable for detecting bitflips on
    +        the wire if using http instead of https as https (the default) will
    +        already validate. Note that this MD5 hash is not stored with the
    +        blob. Also note that if enabled, the memory-efficient upload algorithm
    +        will not be used, because computing the MD5 hash requires buffering
    +        entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +    :keyword str encoding:
    +        Encoding to use if text is supplied as input. Defaults to UTF-8.
    +    :returns: Blob-updated property dict (Etag and last modified)
    +    :rtype: dict(str, Any)
    +    """
    +    async with BlobClient.from_blob_url(blob_url, credential=credential) as client:
    +        return await client.upload_blob(data=data, blob_type=BlobType.BlockBlob, **kwargs)
    +
    +
    +async def _download_to_stream(client, handle, **kwargs):
    +    """Download data to specified open file-handle."""
    +    stream = await client.download_blob(**kwargs)
    +    await stream.readinto(handle)
    +
    +
    +async def download_blob_from_url(
    +        blob_url,  # type: str
    +        output,  # type: str
    +        credential=None,  # type: Any
    +        **kwargs):
    +    # type: (...) -> None
    +    """Download the contents of a blob to a local file or stream.
    +
    +    :param str blob_url:
    +        The full URI to the blob. This can also include a SAS token.
    +    :param output:
    +        Where the data should be downloaded to. This could be either a file path to write to,
    +        or an open IO handle to write to.
    +    :type output: str or writable stream
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        blob URL already has a SAS token or the blob is public. The value can be a SAS token string,
    +        an account shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword bool overwrite:
    +        Whether the local file should be overwritten if it already exists. The default value is
    +        `False` - in which case a ValueError will be raised if the file already exists. If set to
    +        `True`, an attempt will be made to write to the existing file. If a stream handle is passed
    +        in, this value is ignored.
    +    :keyword int max_concurrency:
    +        The number of parallel connections with which to download.
    +    :keyword int offset:
    +        Start of byte range to use for downloading a section of the blob.
    +        Must be set if length is provided.
    +    :keyword int length:
    +        Number of bytes to read from the stream. This is optional, but
    +        should be supplied for optimal performance.
    +    :keyword bool validate_content:
    +        If true, calculates an MD5 hash for each chunk of the blob. The storage
    +        service checks the hash of the content that has arrived with the hash
    +        that was sent. This is primarily valuable for detecting bitflips on
    +        the wire if using http instead of https as https (the default) will
    +        already validate. Note that this MD5 hash is not stored with the
    +        blob. Also note that if enabled, the memory-efficient upload algorithm
    +        will not be used, because computing the MD5 hash requires buffering
    +        entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +    :rtype: None
    +    """
    +    overwrite = kwargs.pop('overwrite', False)
    +    async with BlobClient.from_blob_url(blob_url, credential=credential) as client:
    +        if hasattr(output, 'write'):
    +            await _download_to_stream(client, output, **kwargs)
    +        else:
    +            if not overwrite and os.path.isfile(output):
    +                raise ValueError("The file '{}' already exists.".format(output))
    +            with open(output, 'wb') as file_handle:
    +                await _download_to_stream(client, file_handle, **kwargs)
    +
    +
    +__all__ = [
    +    'upload_blob_to_url',
    +    'download_blob_from_url',
    +    'BlobServiceClient',
    +    'ContainerClient',
    +    'BlobClient',
    +    'BlobLeaseClient',
    +    'ExponentialRetry',
    +    'LinearRetry',
    +    'StorageStreamDownloader'
    +]
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_blob_client_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_blob_client_async.py
    new file mode 100644
    index 000000000000..1e23223c7fc0
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_blob_client_async.py
    @@ -0,0 +1,1990 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=too-many-lines
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, IO, Iterable, AnyStr, Dict, List, Tuple,
    +    TYPE_CHECKING
    +)
    +
    +from azure.core.tracing.decorator_async import distributed_trace_async
    +
    +from .._shared.base_client_async import AsyncStorageAccountHostsMixin
    +from .._shared.policies_async import ExponentialRetry
    +from .._shared.response_handlers import return_response_headers, process_storage_error
    +from .._deserialize import get_page_ranges_result
    +from .._serialize import get_modify_conditions, get_api_version
    +from .._generated import VERSION
    +from .._generated.aio import AzureBlobStorage
    +from .._generated.models import StorageErrorException, CpkInfo
    +from .._deserialize import deserialize_blob_properties
    +from .._blob_client import BlobClient as BlobClientBase
    +from ._upload_helpers import (
    +    upload_block_blob,
    +    upload_append_blob,
    +    upload_page_blob)
    +from .._models import BlobType, BlobBlock
    +from .._lease import get_access_conditions
    +from ._lease_async import BlobLeaseClient
    +from ._download_async import StorageStreamDownloader
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from azure.core.pipeline.policies import HTTPPolicy
    +    from .._models import (  # pylint: disable=unused-import
    +        ContainerProperties,
    +        BlobProperties,
    +        BlobSasPermissions,
    +        ContentSettings,
    +        PremiumPageBlobTier,
    +        StandardBlobTier,
    +        SequenceNumberAction
    +    )
    +
    +
    +class BlobClient(AsyncStorageAccountHostsMixin, BlobClientBase):  # pylint: disable=too-many-public-methods
    +    """A client to interact with a specific blob, although that blob may not yet exist.
    +
    +    :param str account_url:
    +        The URI to the storage account. In order to create a client given the full URI to the blob,
    +        use the :func:`from_blob_url` classmethod.
    +    :param container_name: The container name for the blob.
    +    :type container_name: str
    +    :param blob_name: The name of the blob with which to interact. If specified, this value will override
    +        a blob value specified in the blob URL.
    +    :type blob_name: str
    +    :param str snapshot:
    +        The optional blob snapshot on which to operate. This can be the snapshot ID string
    +        or the response returned from :func:`create_snapshot`.
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +        The Storage API version to use for requests. Default value is '2019-07-07'.
    +        Setting to an older version may result in reduced feature compatibility.
    +
    +        .. versionadded:: 12.2.0
    +
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +    :keyword int max_block_size: The maximum chunk size for uploading a block blob in chunks.
    +        Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_put_size: If the blob size is less than max_single_put_size, then the blob will be
    +        uploaded with only one http PUT request. If the blob size is larger than max_single_put_size,
    +        the blob will be uploaded in chunks. Defaults to 64*1024*1024, or 64MB.
    +    :keyword int min_large_block_upload_threshold: The minimum chunk size required to use the memory efficient
    +        algorithm when uploading a block blob. Defaults to 4*1024*1024+1.
    +    :keyword bool use_byte_buffer: Use a byte buffer for block blob uploads. Defaults to False.
    +    :keyword int max_page_size: The maximum chunk size for uploading a page blob. Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_get_size: The maximum size for a blob to be downloaded in a single call,
    +        the exceeded part will be downloaded in chunks (could be parallel). Defaults to 32*1024*1024, or 32MB.
    +    :keyword int max_chunk_get_size: The maximum chunk size used for downloading a blob. Defaults to 4*1024*1024,
    +        or 4MB.
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication_async.py
    +            :start-after: [START create_blob_client]
    +            :end-before: [END create_blob_client]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobClient from a URL to a public blob (no auth needed).
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication_async.py
    +            :start-after: [START create_blob_client_sas_url]
    +            :end-before: [END create_blob_client_sas_url]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobClient from a SAS URL to a blob.
    +    """
    +    def __init__(
    +            self, account_url,  # type: str
    +            container_name,  # type: str
    +            blob_name,  # type: str
    +            snapshot=None,  # type: Optional[Union[str, Dict[str, Any]]]
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):
    +        # type: (...) -> None
    +        kwargs['retry_policy'] = kwargs.get('retry_policy') or ExponentialRetry(**kwargs)
    +        super(BlobClient, self).__init__(
    +            account_url,
    +            container_name=container_name,
    +            blob_name=blob_name,
    +            snapshot=snapshot,
    +            credential=credential,
    +            **kwargs)
    +        self._client = AzureBlobStorage(url=self.url, pipeline=self._pipeline)
    +        self._client._config.version = get_api_version(kwargs, VERSION)  # pylint: disable=protected-access
    +        self._loop = kwargs.get('loop', None)
    +
    +    @distributed_trace_async
    +    async def get_account_information(self, **kwargs): # type: ignore
    +        # type: (Optional[int]) -> Dict[str, str]
    +        """Gets information related to the storage account in which the blob resides.
    +
    +        The information can also be retrieved if the user has a SAS to a container or blob.
    +        The keys in the returned dictionary include 'sku_name' and 'account_kind'.
    +
    +        :returns: A dict of account information (SKU and account type).
    +        :rtype: dict(str, str)
    +        """
    +        try:
    +            return await self._client.blob.get_account_info(cls=return_response_headers, **kwargs) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def upload_blob(
    +            self, data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            blob_type=BlobType.BlockBlob,  # type: Union[str, BlobType]
    +            length=None,  # type: Optional[int]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Any
    +        """Creates a new blob from a data source with automatic chunking.
    +
    +        :param data: The blob data to upload.
    +        :param ~azure.storage.blob.BlobType blob_type: The type of the blob. This can be
    +            either BlockBlob, PageBlob or AppendBlob. The default value is BlockBlob.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword bool overwrite: Whether the blob to be uploaded should overwrite the current data.
    +            If True, upload_blob will overwrite the existing data. If set to False, the
    +            operation will fail with ResourceExistsError. The exception to the above is with Append
    +            blob types: if set to False and the data already exists, an error will not be raised
    +            and the data will be appended to the existing blob. If set overwrite=True, then the existing
    +            append blob will be deleted, and a new one created. Defaults to False.
    +        :keyword ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            If specified, upload_blob only succeeds if the
    +            blob's lease is active and matches this ID.
    +            Required if the blob has an active lease.
    +        :paramtype: ~azure.storage.blob.aio.BlobLeaseClient
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int max_concurrency:
    +            Maximum number of parallel connections to use when the blob size exceeds
    +            64MB.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :returns: Blob-updated property dict (Etag and last modified)
    +        :rtype: dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_hello_world_async.py
    +                :start-after: [START upload_a_blob]
    +                :end-before: [END upload_a_blob]
    +                :language: python
    +                :dedent: 16
    +                :caption: Upload a blob to the container.
    +        """
    +        options = self._upload_blob_options(
    +            data,
    +            blob_type=blob_type,
    +            length=length,
    +            metadata=metadata,
    +            **kwargs)
    +        if blob_type == BlobType.BlockBlob:
    +            return await upload_block_blob(**options)
    +        if blob_type == BlobType.PageBlob:
    +            return await upload_page_blob(**options)
    +        return await upload_append_blob(**options)
    +
    +    @distributed_trace_async
    +    async def download_blob(self, offset=None, length=None, **kwargs):
    +        # type: (Optional[int], Optional[int], Any) -> StorageStreamDownloader
    +        """Downloads a blob to the StorageStreamDownloader. The readall() method must
    +        be used to read all the content or readinto() must be used to download the blob into
    +        a stream.
    +
    +        :param int offset:
    +            Start of byte range to use for downloading a section of the blob.
    +            Must be set if length is provided.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, download_blob only
    +            succeeds if the blob's lease is active and matches this ID. Value can be a
    +            BlobLeaseClient object or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :keyword str encoding:
    +            Encoding to decode the downloaded bytes. Default is None, i.e. no decoding.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :returns: A streaming object (StorageStreamDownloader)
    +        :rtype: ~azure.storage.blob.aio.StorageStreamDownloader
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_hello_world_async.py
    +                :start-after: [START download_a_blob]
    +                :end-before: [END download_a_blob]
    +                :language: python
    +                :dedent: 16
    +                :caption: Download a blob.
    +        """
    +        options = self._download_blob_options(
    +            offset=offset,
    +            length=length,
    +            **kwargs)
    +        downloader = StorageStreamDownloader(**options)
    +        await downloader._setup()  # pylint: disable=protected-access
    +        return downloader
    +
    +    @distributed_trace_async
    +    async def delete_blob(self, delete_snapshots=False, **kwargs):
    +        # type: (bool, Any) -> None
    +        """Marks the specified blob for deletion.
    +
    +        The blob is later deleted during garbage collection.
    +        Note that in order to delete a blob, you must delete all of its
    +        snapshots. You can delete both at the same time with the delete_blob()
    +        operation.
    +
    +        If a delete retention policy is enabled for the service, then this operation soft deletes the blob
    +        and retains the blob for a specified number of days.
    +        After the specified number of days, the blob's data is removed from the service during garbage collection.
    +        Soft deleted blob is accessible through :func:`~ContainerClient.list_blobs()` specifying `include=['deleted']`
    +        option. Soft-deleted blob can be restored using :func:`undelete` operation.
    +
    +        :param str delete_snapshots:
    +            Required if the blob has associated snapshots. Values include:
    +             - "only": Deletes only the blobs snapshots.
    +             - "include": Deletes the blob along with all snapshots.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, delete_blob only
    +            succeeds if the blob's lease is active and matches this ID. Value can be a
    +            BlobLeaseClient object or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_hello_world_async.py
    +                :start-after: [START delete_blob]
    +                :end-before: [END delete_blob]
    +                :language: python
    +                :dedent: 16
    +                :caption: Delete a blob.
    +        """
    +        options = self._delete_blob_options(delete_snapshots=delete_snapshots, **kwargs)
    +        try:
    +            await self._client.blob.delete(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def undelete_blob(self, **kwargs):
    +        # type: (Any) -> None
    +        """Restores soft-deleted blobs or snapshots.
    +
    +        Operation will only be successful if used within the specified number of days
    +        set in the delete retention policy.
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START undelete_blob]
    +                :end-before: [END undelete_blob]
    +                :language: python
    +                :dedent: 12
    +                :caption: Undeleting a blob.
    +        """
    +        try:
    +            await self._client.blob.undelete(timeout=kwargs.pop('timeout', None), **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_blob_properties(self, **kwargs):
    +        # type: (Any) -> BlobProperties
    +        """Returns all user-defined metadata, standard HTTP properties, and
    +        system properties for the blob. It does not return the content of the blob.
    +
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: BlobProperties
    +        :rtype: ~azure.storage.blob.BlobProperties
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START get_blob_properties]
    +                :end-before: [END get_blob_properties]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting the properties for a blob.
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        mod_conditions = get_modify_conditions(kwargs)
    +        cpk = kwargs.pop('cpk', None)
    +        cpk_info = None
    +        if cpk:
    +            if self.scheme.lower() != 'https':
    +                raise ValueError("Customer provided encryption key must be used over HTTPS.")
    +            cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash,
    +                               encryption_algorithm=cpk.algorithm)
    +        try:
    +            blob_props = await self._client.blob.get_properties(
    +                timeout=kwargs.pop('timeout', None),
    +                snapshot=self.snapshot,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                cls=deserialize_blob_properties,
    +                cpk_info=cpk_info,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        blob_props.name = self.blob_name
    +        blob_props.container = self.container_name
    +        return blob_props # type: ignore
    +
    +    @distributed_trace_async
    +    async def set_http_headers(self, content_settings=None, **kwargs):
    +        # type: (Optional[ContentSettings], Any) -> None
    +        """Sets system properties on the blob.
    +
    +        If one property is set for the content_settings, all properties will be overridden.
    +
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified)
    +        :rtype: Dict[str, Any]
    +        """
    +        options = self._set_http_headers_options(content_settings=content_settings, **kwargs)
    +        try:
    +            return await self._client.blob.set_http_headers(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def set_blob_metadata(self, metadata=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], Any) -> Dict[str, Union[str, datetime]]
    +        """Sets user-defined metadata for the blob as one or more name-value pairs.
    +
    +        :param metadata:
    +            Dict containing name and value pairs. Each call to this operation
    +            replaces all existing metadata attached to the blob. To remove all
    +            metadata from the blob, call this operation with no metadata headers.
    +        :type metadata: dict(str, str)
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified)
    +        """
    +        options = self._set_blob_metadata_options(metadata=metadata, **kwargs)
    +        try:
    +            return await self._client.blob.set_metadata(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def create_page_blob(  # type: ignore
    +            self, size,  # type: int
    +            content_settings=None,  # type: Optional[ContentSettings]
    +            metadata=None, # type: Optional[Dict[str, str]]
    +            premium_page_blob_tier=None,  # type: Optional[Union[str, PremiumPageBlobTier]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Creates a new Page Blob of the specified size.
    +
    +        :param int size:
    +            This specifies the maximum size for the page blob, up to 1 TB.
    +            The page blob size must be aligned to a 512-byte boundary.
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :param ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword int sequence_number:
    +            Only for Page blobs. The sequence number is a user-controlled value that you can use to
    +            track requests. The value of the sequence number must be between 0
    +            and 2^63 - 1.The default value is 0.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict[str, Any]
    +        """
    +        options = self._create_page_blob_options(
    +            size,
    +            content_settings=content_settings,
    +            metadata=metadata,
    +            premium_page_blob_tier=premium_page_blob_tier,
    +            **kwargs)
    +        try:
    +            return await self._client.page_blob.create(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def create_append_blob(self, content_settings=None, metadata=None, **kwargs):
    +        # type: (Optional[ContentSettings], Optional[Dict[str, str]], Any) -> Dict[str, Union[str, datetime]]
    +        """Creates a new Append Blob.
    +
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict[str, Any]
    +        """
    +        options = self._create_append_blob_options(
    +            content_settings=content_settings,
    +            metadata=metadata,
    +            **kwargs)
    +        try:
    +            return await self._client.append_blob.create(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def create_snapshot(self, metadata=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], Any) -> Dict[str, Union[str, datetime]]
    +        """Creates a snapshot of the blob.
    +
    +        A snapshot is a read-only version of a blob that's taken at a point in time.
    +        It can be read, copied, or deleted, but not modified. Snapshots provide a way
    +        to back up a blob as it appears at a moment in time.
    +
    +        A snapshot of a blob has the same name as the base blob from which the snapshot
    +        is taken, with a DateTime value appended to indicate the time at which the
    +        snapshot was taken.
    +
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Snapshot ID, Etag, and last modified).
    +        :rtype: dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START create_blob_snapshot]
    +                :end-before: [END create_blob_snapshot]
    +                :language: python
    +                :dedent: 12
    +                :caption: Create a snapshot of the blob.
    +        """
    +        options = self._create_snapshot_options(metadata=metadata, **kwargs)
    +        try:
    +            return await self._client.blob.create_snapshot(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def start_copy_from_url(self, source_url, metadata=None, incremental_copy=False, **kwargs):
    +        # type: (str, Optional[Dict[str, str]], bool, Any) -> Any
    +        """Copies a blob asynchronously.
    +
    +        This operation returns a copy operation
    +        object that can be used to wait on the completion of the operation,
    +        as well as check status or abort the copy operation.
    +        The Blob service copies blobs on a best-effort basis.
    +
    +        The source blob for a copy operation may be a block blob, an append blob,
    +        or a page blob. If the destination blob already exists, it must be of the
    +        same blob type as the source blob. Any existing destination blob will be
    +        overwritten. The destination blob cannot be modified while a copy operation
    +        is in progress.
    +
    +        When copying from a page blob, the Blob service creates a destination page
    +        blob of the source blob's length, initially containing all zeroes. Then
    +        the source page ranges are enumerated, and non-empty ranges are copied.
    +
    +        For a block blob or an append blob, the Blob service creates a committed
    +        blob of zero length before returning from this operation. When copying
    +        from a block blob, all committed blocks and their block IDs are copied.
    +        Uncommitted blocks are not copied. At the end of the copy operation, the
    +        destination blob will have the same committed block count as the source.
    +
    +        When copying from an append blob, all committed blocks are copied. At the
    +        end of the copy operation, the destination blob will have the same committed
    +        block count as the source.
    +
    +        For all blob types, you can call status() on the returned polling object
    +        to check the status of the copy operation, or wait() to block until the
    +        operation is complete. The final blob will be committed when the copy completes.
    +
    +        :param str source_url:
    +            A URL of up to 2 KB in length that specifies a file or blob.
    +            The value should be URL-encoded as it would appear in a request URI.
    +            If the source is in another account, the source must either be public
    +            or must be authenticated via a shared access signature. If the source
    +            is public, no authentication is required.
    +            Examples:
    +            https://myaccount.blob.core.windows.net/mycontainer/myblob
    +
    +            https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=
    +
    +            https://otheraccount.blob.core.windows.net/mycontainer/myblob?sastoken
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata. If no name-value
    +            pairs are specified, the operation will copy the metadata from the
    +            source blob or file to the destination blob. If one or more name-value
    +            pairs are specified, the destination blob is created with the specified
    +            metadata, and metadata is not copied from the source blob or file.
    +        :type metadata: dict(str, str)
    +        :param bool incremental_copy:
    +            Copies the snapshot of the source page blob to a destination page blob.
    +            The snapshot is copied such that only the differential changes between
    +            the previously copied snapshot are transferred to the destination.
    +            The copied snapshots are complete copies of the original snapshot and
    +            can be read or copied from as usual. Defaults to False.
    +        :keyword ~datetime.datetime source_if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only if the source
    +            blob has been modified since the specified date/time.
    +        :keyword ~datetime.datetime source_if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only if the source blob
    +            has not been modified since the specified date/time.
    +        :keyword str source_etag:
    +            The source ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions source_match_condition:
    +            The source match condition to use upon the etag.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only
    +            if the destination blob has been modified since the specified date/time.
    +            If the destination blob has not been modified, the Blob service returns
    +            status code 412 (Precondition Failed).
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this conditional header to copy the blob only
    +            if the destination blob has not been modified since the specified
    +            date/time. If the destination blob has been modified, the Blob service
    +            returns status code 412 (Precondition Failed).
    +        :keyword str etag:
    +            The destination ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The destination match condition to use upon the etag.
    +        :keyword destination_lease:
    +            The lease ID specified for this header must match the lease ID of the
    +            destination blob. If the request does not include the lease ID or it is not
    +            valid, the operation fails with status code 412 (Precondition Failed).
    +        :paramtype destination_lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword source_lease:
    +            Specify this to perform the Copy Blob operation only if
    +            the lease ID given matches the active lease ID of the source blob.
    +        :paramtype source_lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword ~azure.storage.blob.RehydratePriority rehydrate_priority:
    +            Indicates the priority with which to rehydrate an archived blob
    +        :keyword bool requires_sync:
    +            Enforces that the service will not return a response until the copy is complete.
    +        :returns: A dictionary of copy properties (etag, last_modified, copy_id, copy_status).
    +        :rtype: dict[str, str or ~datetime.datetime]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START copy_blob_from_url]
    +                :end-before: [END copy_blob_from_url]
    +                :language: python
    +                :dedent: 16
    +                :caption: Copy a blob from a URL.
    +        """
    +        options = self._start_copy_from_url_options(
    +            source_url,
    +            metadata=metadata,
    +            incremental_copy=incremental_copy,
    +            **kwargs)
    +        try:
    +            if incremental_copy:
    +                return await self._client.page_blob.copy_incremental(**options)
    +            return await self._client.blob.start_copy_from_url(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def abort_copy(self, copy_id, **kwargs):
    +        # type: (Union[str, Dict[str, Any], BlobProperties], Any) -> None
    +        """Abort an ongoing copy operation.
    +
    +        This will leave a destination blob with zero length and full metadata.
    +        This will raise an error if the copy operation has already ended.
    +
    +        :param copy_id:
    +            The copy operation to abort. This can be either an ID, or an
    +            instance of BlobProperties.
    +        :type copy_id: str or ~azure.storage.blob.BlobProperties
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START abort_copy_blob_from_url]
    +                :end-before: [END abort_copy_blob_from_url]
    +                :language: python
    +                :dedent: 16
    +                :caption: Abort copying a blob from URL.
    +        """
    +        options = self._abort_copy_options(copy_id, **kwargs)
    +        try:
    +            await self._client.blob.abort_copy_from_url(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def acquire_lease(self, lease_duration=-1, lease_id=None, **kwargs):
    +        # type: (int, Optional[str], Any) -> BlobLeaseClient
    +        """Requests a new lease.
    +
    +        If the blob does not have an active lease, the Blob
    +        Service creates a lease on the blob and returns a new lease.
    +
    +        :param int lease_duration:
    +            Specifies the duration of the lease, in seconds, or negative one
    +            (-1) for a lease that never expires. A non-infinite lease can be
    +            between 15 and 60 seconds. A lease duration cannot be changed
    +            using renew or change. Default is -1 (infinite lease).
    +        :param str lease_id:
    +            Proposed lease ID, in a GUID string format. The Blob Service
    +            returns 400 (Invalid request) if the proposed lease ID is not
    +            in the correct format.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: A BlobLeaseClient object.
    +        :rtype: ~azure.storage.blob.aio.BlobLeaseClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START acquire_lease_on_blob]
    +                :end-before: [END acquire_lease_on_blob]
    +                :language: python
    +                :dedent: 12
    +                :caption: Acquiring a lease on a blob.
    +        """
    +        lease = BlobLeaseClient(self, lease_id=lease_id) # type: ignore
    +        await lease.acquire(lease_duration=lease_duration, **kwargs)
    +        return lease
    +
    +    @distributed_trace_async
    +    async def set_standard_blob_tier(self, standard_blob_tier, **kwargs):
    +        # type: (Union[str, StandardBlobTier], Any) -> None
    +        """This operation sets the tier on a block blob.
    +
    +        A block blob's tier determines Hot/Cool/Archive storage type.
    +        This operation does not update the blob's ETag.
    +
    +        :param standard_blob_tier:
    +            Indicates the tier to be set on the blob. Options include 'Hot', 'Cool',
    +            'Archive'. The hot tier is optimized for storing data that is accessed
    +            frequently. The cool storage tier is optimized for storing data that
    +            is infrequently accessed and stored for at least a month. The archive
    +            tier is optimized for storing data that is rarely accessed and stored
    +            for at least six months with flexible latency requirements.
    +        :type standard_blob_tier: str or ~azure.storage.blob.StandardBlobTier
    +        :keyword ~azure.storage.blob.RehydratePriority rehydrate_priority:
    +            Indicates the priority with which to rehydrate an archived blob
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :rtype: None
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if standard_blob_tier is None:
    +            raise ValueError("A StandardBlobTier must be specified")
    +        try:
    +            await self._client.blob.set_tier(
    +                tier=standard_blob_tier,
    +                timeout=kwargs.pop('timeout', None),
    +                lease_access_conditions=access_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def stage_block(
    +            self, block_id,  # type: str
    +            data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Creates a new block to be committed as part of a blob.
    +
    +        :param str block_id: A valid Base64 string value that identifies the
    +             block. Prior to encoding, the string must be less than or equal to 64
    +             bytes in size. For a given blob, the length of the value specified for
    +             the block_id parameter must be the same size for each block.
    +        :param data: The blob data.
    +        :param int length: Size of the block.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        options = self._stage_block_options(
    +            block_id,
    +            data,
    +            length=length,
    +            **kwargs)
    +        try:
    +            await self._client.block_blob.stage_block(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def stage_block_from_url(
    +            self, block_id,  # type: str
    +            source_url,  # type: str
    +            source_offset=None,  # type: Optional[int]
    +            source_length=None,  # type: Optional[int]
    +            source_content_md5=None,  # type: Optional[Union[bytes, bytearray]]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Creates a new block to be committed as part of a blob where
    +        the contents are read from a URL.
    +
    +        :param str block_id: A valid Base64 string value that identifies the
    +             block. Prior to encoding, the string must be less than or equal to 64
    +             bytes in size. For a given blob, the length of the value specified for
    +             the block_id parameter must be the same size for each block.
    +        :param str source_url: The URL.
    +        :param int source_offset:
    +            Start of byte range to use for the block.
    +            Must be set if source length is provided.
    +        :param int source_length: The size of the block in bytes.
    +        :param bytearray source_content_md5:
    +            Specify the md5 calculated for the range of
    +            bytes that must be read from the copy source.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        options = self._stage_block_from_url_options(
    +            block_id,
    +            source_url,
    +            source_offset=source_offset,
    +            source_length=source_length,
    +            source_content_md5=source_content_md5,
    +            **kwargs)
    +        try:
    +            await self._client.block_blob.stage_block_from_url(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_block_list(self, block_list_type="committed", **kwargs):
    +        # type: (Optional[str], Any) -> Tuple[List[BlobBlock], List[BlobBlock]]
    +        """The Get Block List operation retrieves the list of blocks that have
    +        been uploaded as part of a block blob.
    +
    +        :param str block_list_type:
    +            Specifies whether to return the list of committed
    +            blocks, the list of uncommitted blocks, or both lists together.
    +            Possible values include: 'committed', 'uncommitted', 'all'
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: A tuple of two lists - committed and uncommitted blocks
    +        :rtype: tuple(list(~azure.storage.blob.BlobBlock), list(~azure.storage.blob.BlobBlock))
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('kease', None))
    +        try:
    +            blocks = await self._client.block_blob.get_block_list(
    +                list_type=block_list_type,
    +                snapshot=self.snapshot,
    +                timeout=kwargs.pop('timeout', None),
    +                lease_access_conditions=access_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return self._get_block_list_result(blocks)
    +
    +    @distributed_trace_async
    +    async def commit_block_list( # type: ignore
    +            self, block_list,  # type: List[BlobBlock]
    +            content_settings=None,  # type: Optional[ContentSettings]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """The Commit Block List operation writes a blob by specifying the list of
    +        block IDs that make up the blob.
    +
    +        :param list block_list:
    +            List of Blockblobs.
    +        :param ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict[str, str]
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash of the page content. The storage
    +            service checks the hash of the content that has arrived
    +            with the hash that was sent. This is primarily valuable for detecting
    +            bitflips on the wire if using http instead of https, as https (the default),
    +            will already validate. Note that this MD5 hash is not stored with the
    +            blob.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._commit_block_list_options(
    +            block_list,
    +            content_settings=content_settings,
    +            metadata=metadata,
    +            **kwargs)
    +        try:
    +            return await self._client.block_blob.commit_block_list(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def set_premium_page_blob_tier(self, premium_page_blob_tier, **kwargs):
    +        # type: (Union[str, PremiumPageBlobTier], **Any) -> None
    +        """Sets the page blob tiers on the blob. This API is only supported for page blobs on premium accounts.
    +
    +        :param premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :type premium_page_blob_tier: ~azure.storage.blob.PremiumPageBlobTier
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :rtype: None
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if premium_page_blob_tier is None:
    +            raise ValueError("A PremiumPageBlobTiermust be specified")
    +        try:
    +            await self._client.blob.set_tier(
    +                tier=premium_page_blob_tier,
    +                timeout=kwargs.pop('timeout', None),
    +                lease_access_conditions=access_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_page_ranges( # type: ignore
    +            self, offset=None, # type: Optional[int]
    +            length=None, # type: Optional[int]
    +            previous_snapshot_diff=None,  # type: Optional[Union[str, Dict[str, Any]]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Tuple[List[Dict[str, int]], List[Dict[str, int]]]
    +        """Returns the list of valid page ranges for a Page Blob or snapshot
    +        of a page blob.
    +
    +        :param int offset:
    +            Start of byte range to use for getting valid page ranges.
    +            If no length is given, all bytes after the offset will be searched.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for getting valid page ranges.
    +            If length is given, offset must be provided.
    +            This range will return valid page ranges from the offset start up to
    +            the specified length.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param str previous_snapshot_diff:
    +            The snapshot diff parameter that contains an opaque DateTime value that
    +            specifies a previous blob snapshot to be compared
    +            against a more recent snapshot or the current blob.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns:
    +            A tuple of two lists of page ranges as dictionaries with 'start' and 'end' keys.
    +            The first element are filled page ranges, the 2nd element is cleared page ranges.
    +        :rtype: tuple(list(dict(str, str), list(dict(str, str))
    +        """
    +        options = self._get_page_ranges_options(
    +            offset=offset,
    +            length=length,
    +            previous_snapshot_diff=previous_snapshot_diff,
    +            **kwargs)
    +        try:
    +            if previous_snapshot_diff:
    +                ranges = await self._client.page_blob.get_page_ranges_diff(**options)
    +            else:
    +                ranges = await self._client.page_blob.get_page_ranges(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return get_page_ranges_result(ranges)
    +
    +    @distributed_trace_async
    +    async def get_page_range_diff_for_managed_disk(
    +            self, previous_snapshot_url,  # type: str
    +            offset=None, # type: Optional[int]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> Tuple[List[Dict[str, int]], List[Dict[str, int]]]
    +        """Returns the list of valid page ranges for a managed disk or snapshot.
    +
    +        .. note::
    +            This operation is only available for managed disk accounts.
    +
    +        .. versionadded:: 12.2.0
    +            This operation was introduced in API version '2019-07-07'.
    +
    +        :param previous_snapshot_url:
    +            Specifies the URL of a previous snapshot of the managed disk.
    +            The response will only contain pages that were changed between the target blob and
    +            its previous snapshot.
    +        :param int offset:
    +            Start of byte range to use for getting valid page ranges.
    +            If no length is given, all bytes after the offset will be searched.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for getting valid page ranges.
    +            If length is given, offset must be provided.
    +            This range will return valid page ranges from the offset start up to
    +            the specified length.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns:
    +            A tuple of two lists of page ranges as dictionaries with 'start' and 'end' keys.
    +            The first element are filled page ranges, the 2nd element is cleared page ranges.
    +        :rtype: tuple(list(dict(str, str), list(dict(str, str))
    +        """
    +        options = self._get_page_ranges_options(
    +            offset=offset,
    +            length=length,
    +            prev_snapshot_url=previous_snapshot_url,
    +            **kwargs)
    +        try:
    +            ranges = await self._client.page_blob.get_page_ranges_diff(**options)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return get_page_ranges_result(ranges)
    +
    +    @distributed_trace_async
    +    async def set_sequence_number( # type: ignore
    +            self, sequence_number_action,  # type: Union[str, SequenceNumberAction]
    +            sequence_number=None,  # type: Optional[str]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Sets the blob sequence number.
    +
    +        :param str sequence_number_action:
    +            This property indicates how the service should modify the blob's sequence
    +            number. See :class:`~azure.storage.blob.SequenceNumberAction` for more information.
    +        :param str sequence_number:
    +            This property sets the blob's sequence number. The sequence number is a
    +            user-controlled property that you can use to track requests and manage
    +            concurrency issues.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._set_sequence_number_options(
    +            sequence_number_action, sequence_number=sequence_number, **kwargs)
    +        try:
    +            return await self._client.page_blob.update_sequence_number(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def resize_blob(self, size, **kwargs):
    +        # type: (int, Any) -> Dict[str, Union[str, datetime]]
    +        """Resizes a page blob to the specified size.
    +
    +        If the specified value is less than the current size of the blob,
    +        then all pages above the specified value are cleared.
    +
    +        :param int size:
    +            Size used to resize blob. Maximum size for a page blob is up to 1 TB.
    +            The page blob size must be aligned to a 512-byte boundary.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._resize_blob_options(size, **kwargs)
    +        try:
    +            return await self._client.page_blob.resize(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def upload_page( # type: ignore
    +            self, page,  # type: bytes
    +            offset,  # type: int
    +            length,  # type: int
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """The Upload Pages operation writes a range of pages to a page blob.
    +
    +        :param bytes page:
    +            Content of the page.
    +        :param int offset:
    +            Start of byte range to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash of the page content. The storage
    +            service checks the hash of the content that has arrived
    +            with the hash that was sent. This is primarily valuable for detecting
    +            bitflips on the wire if using http instead of https, as https (the default),
    +            will already validate. Note that this MD5 hash is not stored with the
    +            blob.
    +        :keyword int if_sequence_number_lte:
    +            If the blob's sequence number is less than or equal to
    +            the specified value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_lt:
    +            If the blob's sequence number is less than the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_eq:
    +            If the blob's sequence number is equal to the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._upload_page_options(
    +            page=page,
    +            offset=offset,
    +            length=length,
    +            **kwargs)
    +        try:
    +            return await self._client.page_blob.upload_pages(**options) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def upload_pages_from_url(self, source_url,  # type: str
    +                                    offset,  # type: int
    +                                    length,  # type: int
    +                                    source_offset,  # type: int
    +                                    **kwargs
    +                                    ):
    +        # type: (...) -> Dict[str, Any]
    +        """
    +        The Upload Pages operation writes a range of pages to a page blob where
    +        the contents are read from a URL.
    +
    +        :param str source_url:
    +            The URL of the source data. It can point to any Azure Blob or File, that is either public or has a
    +            shared access signature attached.
    +        :param int offset:
    +            Start of byte range to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length  must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :param int source_offset:
    +            This indicates the start of the range of bytes(inclusive) that has to be taken from the copy source.
    +            The service will read the same number of bytes as the destination range (length-offset).
    +        :keyword bytes source_content_md5:
    +            If given, the service will calculate the MD5 hash of the block content and compare against this value.
    +        :keyword ~datetime.datetime source_if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the source resource has been modified since the specified time.
    +        :keyword ~datetime.datetime source_if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the source resource has not been modified since the specified date/time.
    +        :keyword str source_etag:
    +            The source ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions source_match_condition:
    +            The source match condition to use upon the etag.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword int if_sequence_number_lte:
    +            If the blob's sequence number is less than or equal to
    +            the specified value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_lt:
    +            If the blob's sequence number is less than the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_eq:
    +            If the blob's sequence number is equal to the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            The destination ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The destination match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        """
    +
    +        options = self._upload_pages_from_url_options(
    +            source_url=source_url,
    +            offset=offset,
    +            length=length,
    +            source_offset=source_offset,
    +            **kwargs
    +        )
    +        try:
    +            return await self._client.page_blob.upload_pages_from_url(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def clear_page(self, offset, length, **kwargs):
    +        # type: (int, int, Any) -> Dict[str, Union[str, datetime]]
    +        """Clears a range of pages.
    +
    +        :param int offset:
    +            Start of byte range to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length  must be a modulus of
    +            512.
    +        :param int length:
    +            Number of bytes to use for writing to a section of the blob.
    +            Pages must be aligned with 512-byte boundaries, the start offset
    +            must be a modulus of 512 and the length must be a modulus of
    +            512.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword int if_sequence_number_lte:
    +            If the blob's sequence number is less than or equal to
    +            the specified value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_lt:
    +            If the blob's sequence number is less than the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword int if_sequence_number_eq:
    +            If the blob's sequence number is equal to the specified
    +            value, the request proceeds; otherwise it fails.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag and last modified).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._clear_page_options(offset, length, **kwargs)
    +        try:
    +            return await self._client.page_blob.clear_pages(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def append_block( # type: ignore
    +            self, data,  # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]]
    +            length=None,  # type: Optional[int]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime, int]]
    +        """Commits a new block of data to the end of the existing append blob.
    +
    +        :param data:
    +            Content of the block.
    +        :param int length:
    +            Size of the block in bytes.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash of the block content. The storage
    +            service checks the hash of the content that has arrived
    +            with the hash that was sent. This is primarily valuable for detecting
    +            bitflips on the wire if using http instead of https, as https (the default),
    +            will already validate. Note that this MD5 hash is not stored with the
    +            blob.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int appendpos_condition:
    +            Optional conditional header, used only for the Append Block operation.
    +            A number indicating the byte offset to compare. Append Block will
    +            succeed only if the append position is equal to this number. If it
    +            is not, the request will fail with the AppendPositionConditionNotMet error
    +            (HTTP status code 412 - Precondition Failed).
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Blob-updated property dict (Etag, last modified, append offset, committed block count).
    +        :rtype: dict(str, Any)
    +        """
    +        options = self._append_block_options(
    +            data,
    +            length=length,
    +            **kwargs
    +        )
    +        try:
    +            return await self._client.append_blob.append_block(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async()
    +    async def append_block_from_url(self, copy_source_url,  # type: str
    +                                    source_offset=None,  # type: Optional[int]
    +                                    source_length=None,  # type: Optional[int]
    +                                    **kwargs):
    +        # type: (...) -> Dict[str, Union[str, datetime, int]]
    +        """
    +        Creates a new block to be committed as part of a blob, where the contents are read from a source url.
    +
    +        :param str copy_source_url:
    +            The URL of the source data. It can point to any Azure Blob or File, that is either public or has a
    +            shared access signature attached.
    +        :param int source_offset:
    +            This indicates the start of the range of bytes(inclusive) that has to be taken from the copy source.
    +        :param int source_length:
    +            This indicates the end of the range of bytes that has to be taken from the copy source.
    +        :keyword bytearray source_content_md5:
    +            If given, the service will calculate the MD5 hash of the block content and compare against this value.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int appendpos_condition:
    +            Optional conditional header, used only for the Append Block operation.
    +            A number indicating the byte offset to compare. Append Block will
    +            succeed only if the append position is equal to this number. If it
    +            is not, the request will fail with the
    +            AppendPositionConditionNotMet error
    +            (HTTP status code 412 - Precondition Failed).
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            The destination ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The destination match condition to use upon the etag.
    +        :keyword ~datetime.datetime source_if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the source resource has been modified since the specified time.
    +        :keyword ~datetime.datetime source_if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the source resource has not been modified since the specified date/time.
    +        :keyword str source_etag:
    +            The source ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions source_match_condition:
    +            The source match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        """
    +        options = self._append_block_from_url_options(
    +            copy_source_url,
    +            source_offset=source_offset,
    +            source_length=source_length,
    +            **kwargs
    +        )
    +        try:
    +            return await self._client.append_blob.append_block_from_url(**options)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_blob_service_client_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_blob_service_client_async.py
    new file mode 100644
    index 000000000000..77bc5657e7cd
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_blob_service_client_async.py
    @@ -0,0 +1,571 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import functools
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, Dict, List,
    +    TYPE_CHECKING
    +)
    +
    +from azure.core.tracing.decorator import distributed_trace
    +from azure.core.pipeline import AsyncPipeline
    +from azure.core.tracing.decorator_async import distributed_trace_async
    +from azure.core.async_paging import AsyncItemPaged
    +
    +from .._shared.models import LocationMode
    +from .._shared.policies_async import ExponentialRetry
    +from .._shared.base_client_async import AsyncStorageAccountHostsMixin, AsyncTransportWrapper
    +from .._shared.response_handlers import return_response_headers, process_storage_error
    +from .._shared.parser import _to_utc_datetime
    +from .._shared.response_handlers import parse_to_internal_user_delegation_key
    +from .._generated import VERSION
    +from .._generated.aio import AzureBlobStorage
    +from .._generated.models import StorageErrorException, StorageServiceProperties, KeyInfo
    +from .._blob_service_client import BlobServiceClient as BlobServiceClientBase
    +from ._container_client_async import ContainerClient
    +from ._blob_client_async import BlobClient
    +from .._models import ContainerProperties
    +from .._deserialize import service_stats_deserialize, service_properties_deserialize
    +from .._serialize import get_api_version
    +from ._models import ContainerPropertiesPaged
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from azure.core.pipeline.transport import HttpTransport
    +    from azure.core.pipeline.policies import HTTPPolicy
    +    from .._shared.models import AccountSasPermissions, ResourceTypes, UserDelegationKey
    +    from ._lease_async import BlobLeaseClient
    +    from .._models import (
    +        BlobProperties,
    +        PublicAccess,
    +        BlobAnalyticsLogging,
    +        Metrics,
    +        CorsRule,
    +        RetentionPolicy,
    +        StaticWebsite,
    +    )
    +
    +
    +class BlobServiceClient(AsyncStorageAccountHostsMixin, BlobServiceClientBase):
    +    """A client to interact with the Blob Service at the account level.
    +
    +    This client provides operations to retrieve and configure the account properties
    +    as well as list, create and delete containers within the account.
    +    For operations relating to a specific container or blob, clients for those entities
    +    can also be retrieved using the `get_client` functions.
    +
    +    :param str account_url:
    +        The URL to the blob storage account. Any other entities included
    +        in the URL path (e.g. container or blob) will be discarded. This URL can be optionally
    +        authenticated with a SAS token.
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +        The Storage API version to use for requests. Default value is '2019-07-07'.
    +        Setting to an older version may result in reduced feature compatibility.
    +
    +        .. versionadded:: 12.2.0
    +
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +    :keyword int max_block_size: The maximum chunk size for uploading a block blob in chunks.
    +        Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_put_size: If the blob size is less than max_single_put_size, then the blob will be
    +        uploaded with only one http PUT request. If the blob size is larger than max_single_put_size,
    +        the blob will be uploaded in chunks. Defaults to 64*1024*1024, or 64MB.
    +    :keyword int min_large_block_upload_threshold: The minimum chunk size required to use the memory efficient
    +        algorithm when uploading a block blob. Defaults to 4*1024*1024+1.
    +    :keyword bool use_byte_buffer: Use a byte buffer for block blob uploads. Defaults to False.
    +    :keyword int max_page_size: The maximum chunk size for uploading a page blob. Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_get_size: The maximum size for a blob to be downloaded in a single call,
    +        the exceeded part will be downloaded in chunks (could be parallel). Defaults to 32*1024*1024, or 32MB.
    +    :keyword int max_chunk_get_size: The maximum chunk size used for downloading a blob. Defaults to 4*1024*1024,
    +        or 4MB.
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication_async.py
    +            :start-after: [START create_blob_service_client]
    +            :end-before: [END create_blob_service_client]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobServiceClient with account url and credential.
    +
    +        .. literalinclude:: ../samples/blob_samples_authentication_async.py
    +            :start-after: [START create_blob_service_client_oauth]
    +            :end-before: [END create_blob_service_client_oauth]
    +            :language: python
    +            :dedent: 8
    +            :caption: Creating the BlobServiceClient with Azure Identity credentials.
    +    """
    +
    +    def __init__(
    +            self, account_url,  # type: str
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):
    +        # type: (...) -> None
    +        kwargs['retry_policy'] = kwargs.get('retry_policy') or ExponentialRetry(**kwargs)
    +        super(BlobServiceClient, self).__init__(
    +            account_url,
    +            credential=credential,
    +            **kwargs)
    +        self._client = AzureBlobStorage(url=self.url, pipeline=self._pipeline)
    +        self._client._config.version = get_api_version(kwargs, VERSION)  # pylint: disable=protected-access
    +        self._loop = kwargs.get('loop', None)
    +
    +    @distributed_trace_async
    +    async def get_user_delegation_key(self, key_start_time,  # type: datetime
    +                                      key_expiry_time,  # type: datetime
    +                                      **kwargs  # type: Any
    +                                      ):
    +        # type: (...) -> UserDelegationKey
    +        """
    +        Obtain a user delegation key for the purpose of signing SAS tokens.
    +        A token credential must be present on the service object for this request to succeed.
    +
    +        :param ~datetime.datetime key_start_time:
    +            A DateTime value. Indicates when the key becomes valid.
    +        :param ~datetime.datetime key_expiry_time:
    +            A DateTime value. Indicates when the key stops being valid.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: The user delegation key.
    +        :rtype: ~azure.storage.blob.UserDelegationKey
    +        """
    +        key_info = KeyInfo(start=_to_utc_datetime(key_start_time), expiry=_to_utc_datetime(key_expiry_time))
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            user_delegation_key = await self._client.service.get_user_delegation_key(key_info=key_info,
    +                                                                                     timeout=timeout,
    +                                                                                     **kwargs)  # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +        return parse_to_internal_user_delegation_key(user_delegation_key)  # type: ignore
    +
    +    @distributed_trace_async
    +    async def get_account_information(self, **kwargs):
    +        # type: (Any) -> Dict[str, str]
    +        """Gets information related to the storage account.
    +
    +        The information can also be retrieved if the user has a SAS to a container or blob.
    +        The keys in the returned dictionary include 'sku_name' and 'account_kind'.
    +
    +        :returns: A dict of account information (SKU and account type).
    +        :rtype: dict(str, str)
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START get_blob_service_account_info]
    +                :end-before: [END get_blob_service_account_info]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting account information for the blob service.
    +        """
    +        try:
    +            return await self._client.service.get_account_info(cls=return_response_headers, **kwargs) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_service_stats(self, **kwargs):
    +        # type: (Any) -> Dict[str, Any]
    +        """Retrieves statistics related to replication for the Blob service.
    +
    +        It is only available when read-access geo-redundant replication is enabled for
    +        the storage account.
    +
    +        With geo-redundant replication, Azure Storage maintains your data durable
    +        in two locations. In both locations, Azure Storage constantly maintains
    +        multiple healthy replicas of your data. The location where you read,
    +        create, update, or delete data is the primary storage account location.
    +        The primary location exists in the region you choose at the time you
    +        create an account via the Azure Management Azure classic portal, for
    +        example, North Central US. The location to which your data is replicated
    +        is the secondary location. The secondary location is automatically
    +        determined based on the location of the primary; it is in a second data
    +        center that resides in the same region as the primary location. Read-only
    +        access is available from the secondary location, if read-access geo-redundant
    +        replication is enabled for your storage account.
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: The blob service stats.
    +        :rtype: Dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START get_blob_service_stats]
    +                :end-before: [END get_blob_service_stats]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting service stats for the blob service.
    +        """
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            stats = await self._client.service.get_statistics( # type: ignore
    +                timeout=timeout, use_location=LocationMode.SECONDARY, **kwargs)
    +            return service_stats_deserialize(stats)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_service_properties(self, **kwargs):
    +        # type: (Any) -> Dict[str, Any]
    +        """Gets the properties of a storage account's Blob service, including
    +        Azure Storage Analytics.
    +
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An object containing blob service properties such as
    +            analytics logging, hour/minute metrics, cors rules, etc.
    +        :rtype: Dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START get_blob_service_properties]
    +                :end-before: [END get_blob_service_properties]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting service properties for the blob service.
    +        """
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            service_props = await self._client.service.get_properties(timeout=timeout, **kwargs)
    +            return service_properties_deserialize(service_props)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def set_service_properties(
    +            self, analytics_logging=None,  # type: Optional[BlobAnalyticsLogging]
    +            hour_metrics=None,  # type: Optional[Metrics]
    +            minute_metrics=None,  # type: Optional[Metrics]
    +            cors=None,  # type: Optional[List[CorsRule]]
    +            target_version=None,  # type: Optional[str]
    +            delete_retention_policy=None,  # type: Optional[RetentionPolicy]
    +            static_website=None,  # type: Optional[StaticWebsite]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Sets the properties of a storage account's Blob service, including
    +        Azure Storage Analytics.
    +
    +        If an element (e.g. analytics_logging) is left as None, the
    +        existing settings on the service for that functionality are preserved.
    +
    +        :param analytics_logging:
    +            Groups the Azure Analytics Logging settings.
    +        :type analytics_logging: ~azure.storage.blob.BlobAnalyticsLogging
    +        :param hour_metrics:
    +            The hour metrics settings provide a summary of request
    +            statistics grouped by API in hourly aggregates for blobs.
    +        :type hour_metrics: ~azure.storage.blob.Metrics
    +        :param minute_metrics:
    +            The minute metrics settings provide request statistics
    +            for each minute for blobs.
    +        :type minute_metrics: ~azure.storage.blob.Metrics
    +        :param cors:
    +            You can include up to five CorsRule elements in the
    +            list. If an empty list is specified, all CORS rules will be deleted,
    +            and CORS will be disabled for the service.
    +        :type cors: list[~azure.storage.blob.CorsRule]
    +        :param str target_version:
    +            Indicates the default version to use for requests if an incoming
    +            request's version is not specified.
    +        :param delete_retention_policy:
    +            The delete retention policy specifies whether to retain deleted blobs.
    +            It also specifies the number of days and versions of blob to keep.
    +        :type delete_retention_policy: ~azure.storage.blob.RetentionPolicy
    +        :param static_website:
    +            Specifies whether the static website feature is enabled,
    +            and if yes, indicates the index document and 404 error document to use.
    +        :type static_website: ~azure.storage.blob.StaticWebsite
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START set_blob_service_properties]
    +                :end-before: [END set_blob_service_properties]
    +                :language: python
    +                :dedent: 12
    +                :caption: Setting service properties for the blob service.
    +        """
    +        props = StorageServiceProperties(
    +            logging=analytics_logging,
    +            hour_metrics=hour_metrics,
    +            minute_metrics=minute_metrics,
    +            cors=cors,
    +            default_service_version=target_version,
    +            delete_retention_policy=delete_retention_policy,
    +            static_website=static_website
    +        )
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            await self._client.service.set_properties(props, timeout=timeout, **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def list_containers(
    +            self, name_starts_with=None,  # type: Optional[str]
    +            include_metadata=False,  # type: Optional[bool]
    +            **kwargs
    +        ):
    +        # type: (...) -> AsyncItemPaged[ContainerProperties]
    +        """Returns a generator to list the containers under the specified account.
    +
    +        The generator will lazily follow the continuation tokens returned by
    +        the service and stop when all containers have been returned.
    +
    +        :param str name_starts_with:
    +            Filters the results to return only containers whose names
    +            begin with the specified prefix.
    +        :param bool include_metadata:
    +            Specifies that container metadata to be returned in the response.
    +            The default value is `False`.
    +        :keyword int results_per_page:
    +            The maximum number of container names to retrieve per API
    +            call. If the request does not specify the server will return up to 5,000 items.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An iterable (auto-paging) of ContainerProperties.
    +        :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.storage.blob.ContainerProperties]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START bsc_list_containers]
    +                :end-before: [END bsc_list_containers]
    +                :language: python
    +                :dedent: 16
    +                :caption: Listing the containers in the blob service.
    +        """
    +        include = 'metadata' if include_metadata else None
    +        timeout = kwargs.pop('timeout', None)
    +        results_per_page = kwargs.pop('results_per_page', None)
    +        command = functools.partial(
    +            self._client.service.list_containers_segment,
    +            prefix=name_starts_with,
    +            include=include,
    +            timeout=timeout,
    +            **kwargs)
    +        return AsyncItemPaged(
    +            command,
    +            prefix=name_starts_with,
    +            results_per_page=results_per_page,
    +            page_iterator_class=ContainerPropertiesPaged
    +        )
    +
    +    @distributed_trace_async
    +    async def create_container(
    +            self, name,  # type: str
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            public_access=None,  # type: Optional[Union[PublicAccess, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> ContainerClient
    +        """Creates a new container under the specified account.
    +
    +        If the container with the same name already exists, a ResourceExistsError will
    +        be raised. This method returns a client with which to interact with the newly
    +        created container.
    +
    +        :param str name: The name of the container to create.
    +        :param metadata:
    +            A dict with name-value pairs to associate with the
    +            container as metadata. Example: `{'Category':'test'}`
    +        :type metadata: dict(str, str)
    +        :param public_access:
    +            Possible values include: 'container', 'blob'.
    +        :type public_access: str or ~azure.storage.blob.PublicAccess
    +        :keyword container_encryption_scope:
    +            Specifies the default encryption scope to set on the container and use for
    +            all future writes.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :paramtype container_encryption_scope: dict or ~azure.storage.blob.ContainerEncryptionScope
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: ~azure.storage.blob.aio.ContainerClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START bsc_create_container]
    +                :end-before: [END bsc_create_container]
    +                :language: python
    +                :dedent: 16
    +                :caption: Creating a container in the blob service.
    +        """
    +        container = self.get_container_client(name)
    +        timeout = kwargs.pop('timeout', None)
    +        kwargs.setdefault('merge_span', True)
    +        await container.create_container(
    +            metadata=metadata, public_access=public_access, timeout=timeout, **kwargs)
    +        return container
    +
    +    @distributed_trace_async
    +    async def delete_container(
    +            self, container,  # type: Union[ContainerProperties, str]
    +            lease=None,  # type: Optional[Union[BlobLeaseClient, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Marks the specified container for deletion.
    +
    +        The container and any blobs contained within it are later deleted during garbage collection.
    +        If the container is not found, a ResourceNotFoundError will be raised.
    +
    +        :param container:
    +            The container to delete. This can either be the name of the container,
    +            or an instance of ContainerProperties.
    +        :type container: str or ~azure.storage.blob.ContainerProperties
    +        :param lease:
    +            If specified, delete_container only succeeds if the
    +            container's lease is active and matches this ID.
    +            Required if the container has an active lease.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START bsc_delete_container]
    +                :end-before: [END bsc_delete_container]
    +                :language: python
    +                :dedent: 16
    +                :caption: Deleting a container in the blob service.
    +        """
    +        container = self.get_container_client(container) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        await container.delete_container( # type: ignore
    +            lease=lease,
    +            timeout=timeout,
    +            **kwargs)
    +
    +    def get_container_client(self, container):
    +        # type: (Union[ContainerProperties, str]) -> ContainerClient
    +        """Get a client to interact with the specified container.
    +
    +        The container need not already exist.
    +
    +        :param container:
    +            The container. This can either be the name of the container,
    +            or an instance of ContainerProperties.
    +        :type container: str or ~azure.storage.blob.ContainerProperties
    +        :returns: A ContainerClient.
    +        :rtype: ~azure.storage.blob.aio.ContainerClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START bsc_get_container_client]
    +                :end-before: [END bsc_get_container_client]
    +                :language: python
    +                :dedent: 12
    +                :caption: Getting the container client to interact with a specific container.
    +        """
    +        try:
    +            container_name = container.name
    +        except AttributeError:
    +            container_name = container
    +        _pipeline = AsyncPipeline(
    +            transport=AsyncTransportWrapper(self._pipeline._transport), # pylint: disable = protected-access
    +            policies=self._pipeline._impl_policies # pylint: disable = protected-access
    +        )
    +        return ContainerClient(
    +            self.url, container_name=container_name,
    +            credential=self.credential, api_version=self.api_version, _configuration=self._config,
    +            _pipeline=_pipeline, _location_mode=self._location_mode, _hosts=self._hosts,
    +            require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key,
    +            key_resolver_function=self.key_resolver_function, loop=self._loop)
    +
    +    def get_blob_client(
    +            self, container,  # type: Union[ContainerProperties, str]
    +            blob,  # type: Union[BlobProperties, str]
    +            snapshot=None  # type: Optional[Union[Dict[str, Any], str]]
    +        ):
    +        # type: (...) -> BlobClient
    +        """Get a client to interact with the specified blob.
    +
    +        The blob need not already exist.
    +
    +        :param container:
    +            The container that the blob is in. This can either be the name of the container,
    +            or an instance of ContainerProperties.
    +        :type container: str or ~azure.storage.blob.ContainerProperties
    +        :param blob:
    +            The blob with which to interact. This can either be the name of the blob,
    +            or an instance of BlobProperties.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param snapshot:
    +            The optional blob snapshot on which to operate. This can either be the ID of the snapshot,
    +            or a dictionary output returned by
    +            :func:`~azure.storage.blob.aio.BlobClient.create_snapshot()`.
    +        :type snapshot: str or dict(str, Any)
    +        :returns: A BlobClient.
    +        :rtype: ~azure.storage.blob.aio.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_service_async.py
    +                :start-after: [START bsc_get_blob_client]
    +                :end-before: [END bsc_get_blob_client]
    +                :language: python
    +                :dedent: 16
    +                :caption: Getting the blob client to interact with a specific blob.
    +        """
    +        try:
    +            container_name = container.name
    +        except AttributeError:
    +            container_name = container
    +
    +        try:
    +            blob_name = blob.name
    +        except AttributeError:
    +            blob_name = blob
    +        _pipeline = AsyncPipeline(
    +            transport=AsyncTransportWrapper(self._pipeline._transport), # pylint: disable = protected-access
    +            policies=self._pipeline._impl_policies # pylint: disable = protected-access
    +        )
    +        return BlobClient( # type: ignore
    +            self.url, container_name=container_name, blob_name=blob_name, snapshot=snapshot,
    +            credential=self.credential, api_version=self.api_version, _configuration=self._config,
    +            _pipeline=_pipeline, _location_mode=self._location_mode, _hosts=self._hosts,
    +            require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key,
    +            key_resolver_function=self.key_resolver_function, loop=self._loop)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_container_client_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_container_client_async.py
    new file mode 100644
    index 000000000000..a0133468b2a0
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_container_client_async.py
    @@ -0,0 +1,1108 @@
    +# pylint: disable=too-many-lines
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import functools
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, Iterable, AnyStr, Dict, List, Tuple, IO, AsyncIterator,
    +    TYPE_CHECKING
    +)
    +
    +from azure.core.tracing.decorator import distributed_trace
    +from azure.core.tracing.decorator_async import distributed_trace_async
    +from azure.core.async_paging import AsyncItemPaged
    +from azure.core.pipeline import AsyncPipeline
    +from azure.core.pipeline.transport import HttpRequest, AsyncHttpResponse
    +
    +from .._shared.base_client_async import AsyncStorageAccountHostsMixin, AsyncTransportWrapper
    +from .._shared.policies_async import ExponentialRetry
    +from .._shared.request_handlers import add_metadata_headers, serialize_iso
    +from .._shared.response_handlers import (
    +    process_storage_error,
    +    return_response_headers,
    +    return_headers_and_deserialized)
    +from .._generated import VERSION
    +from .._generated.aio import AzureBlobStorage
    +from .._generated.models import (
    +    StorageErrorException,
    +    SignedIdentifier)
    +from .._deserialize import deserialize_container_properties
    +from .._serialize import get_modify_conditions, get_container_cpk_scope_info, get_api_version
    +from .._container_client import ContainerClient as ContainerClientBase, _get_blob_name
    +from .._lease import get_access_conditions
    +from .._models import ContainerProperties, BlobProperties, BlobType  # pylint: disable=unused-import
    +from ._models import BlobPropertiesPaged, BlobPrefix
    +from ._lease_async import BlobLeaseClient
    +from ._blob_client_async import BlobClient
    +
    +if TYPE_CHECKING:
    +    from azure.core.pipeline.transport import HttpTransport
    +    from azure.core.pipeline.policies import HTTPPolicy
    +    from .._models import ContainerSasPermissions, PublicAccess
    +    from ._download_async import StorageStreamDownloader
    +    from datetime import datetime
    +    from .._models import ( # pylint: disable=unused-import
    +        AccessPolicy,
    +        ContentSettings,
    +        StandardBlobTier,
    +        PremiumPageBlobTier)
    +
    +
    +class ContainerClient(AsyncStorageAccountHostsMixin, ContainerClientBase):
    +    """A client to interact with a specific container, although that container
    +    may not yet exist.
    +
    +    For operations relating to a specific blob within this container, a blob client can be
    +    retrieved using the :func:`~get_blob_client` function.
    +
    +    :param str account_url:
    +        The URI to the storage account. In order to create a client given the full URI to the container,
    +        use the :func:`from_container_url` classmethod.
    +    :param container_name:
    +        The name of the container for the blob.
    +    :type container_name: str
    +    :param credential:
    +        The credentials with which to authenticate. This is optional if the
    +        account URL already has a SAS token. The value can be a SAS token string, an account
    +        shared access key, or an instance of a TokenCredentials class from azure.identity.
    +        If the URL already has a SAS token, specifying an explicit credential will take priority.
    +    :keyword str api_version:
    +        The Storage API version to use for requests. Default value is '2019-07-07'.
    +        Setting to an older version may result in reduced feature compatibility.
    +
    +        .. versionadded:: 12.2.0
    +
    +    :keyword str secondary_hostname:
    +        The hostname of the secondary endpoint.
    +    :keyword int max_block_size: The maximum chunk size for uploading a block blob in chunks.
    +        Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_put_size: If the blob size is less than max_single_put_size, then the blob will be
    +        uploaded with only one http PUT request. If the blob size is larger than max_single_put_size,
    +        the blob will be uploaded in chunks. Defaults to 64*1024*1024, or 64MB.
    +    :keyword int min_large_block_upload_threshold: The minimum chunk size required to use the memory efficient
    +        algorithm when uploading a block blob. Defaults to 4*1024*1024+1.
    +    :keyword bool use_byte_buffer: Use a byte buffer for block blob uploads. Defaults to False.
    +    :keyword int max_page_size: The maximum chunk size for uploading a page blob. Defaults to 4*1024*1024, or 4MB.
    +    :keyword int max_single_get_size: The maximum size for a blob to be downloaded in a single call,
    +        the exceeded part will be downloaded in chunks (could be parallel). Defaults to 32*1024*1024, or 32MB.
    +    :keyword int max_chunk_get_size: The maximum chunk size used for downloading a blob. Defaults to 4*1024*1024,
    +        or 4MB.
    +
    +    .. admonition:: Example:
    +
    +        .. literalinclude:: ../samples/blob_samples_containers_async.py
    +            :start-after: [START create_container_client_from_service]
    +            :end-before: [END create_container_client_from_service]
    +            :language: python
    +            :dedent: 8
    +            :caption: Get a ContainerClient from an existing BlobServiceClient.
    +
    +        .. literalinclude:: ../samples/blob_samples_containers_async.py
    +            :start-after: [START create_container_client_sasurl]
    +            :end-before: [END create_container_client_sasurl]
    +            :language: python
    +            :dedent: 12
    +            :caption: Creating the container client directly.
    +    """
    +    def __init__(
    +            self, account_url,  # type: str
    +            container_name,  # type: str
    +            credential=None,  # type: Optional[Any]
    +            **kwargs  # type: Any
    +        ):
    +        # type: (...) -> None
    +        kwargs['retry_policy'] = kwargs.get('retry_policy') or ExponentialRetry(**kwargs)
    +        super(ContainerClient, self).__init__(
    +            account_url,
    +            container_name=container_name,
    +            credential=credential,
    +            **kwargs)
    +        self._client = AzureBlobStorage(url=self.url, pipeline=self._pipeline)
    +        self._client._config.version = get_api_version(kwargs, VERSION)  # pylint: disable=protected-access
    +        self._loop = kwargs.get('loop', None)
    +
    +    @distributed_trace_async
    +    async def create_container(self, metadata=None, public_access=None, **kwargs):
    +        # type: (Optional[Dict[str, str]], Optional[Union[PublicAccess, str]], **Any) -> None
    +        """
    +        Creates a new container under the specified account. If the container
    +        with the same name already exists, the operation fails.
    +
    +        :param metadata:
    +            A dict with name_value pairs to associate with the
    +            container as metadata. Example:{'Category':'test'}
    +        :type metadata: dict[str, str]
    +        :param ~azure.storage.blob.PublicAccess public_access:
    +            Possible values include: 'container', 'blob'.
    +        :keyword container_encryption_scope:
    +            Specifies the default encryption scope to set on the container and use for
    +            all future writes.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :paramtype container_encryption_scope: dict or ~azure.storage.blob.ContainerEncryptionScope
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START create_container]
    +                :end-before: [END create_container]
    +                :language: python
    +                :dedent: 16
    +                :caption: Creating a container to store blobs.
    +        """
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata)) # type: ignore
    +        timeout = kwargs.pop('timeout', None)
    +        container_cpk_scope_info = get_container_cpk_scope_info(kwargs)
    +        try:
    +            return await self._client.container.create( # type: ignore
    +                timeout=timeout,
    +                access=public_access,
    +                container_cpk_scope_info=container_cpk_scope_info,
    +                cls=return_response_headers,
    +                headers=headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def delete_container(
    +            self, **kwargs):
    +        # type: (Any) -> None
    +        """
    +        Marks the specified container for deletion. The container and any blobs
    +        contained within it are later deleted during garbage collection.
    +
    +        :keyword lease:
    +            If specified, delete_container only succeeds if the
    +            container's lease is active and matches this ID.
    +            Required if the container has an active lease.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START delete_container]
    +                :end-before: [END delete_container]
    +                :language: python
    +                :dedent: 16
    +                :caption: Delete a container.
    +        """
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        mod_conditions = get_modify_conditions(kwargs)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            await self._client.container.delete(
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def acquire_lease(
    +            self, lease_duration=-1,  # type: int
    +            lease_id=None,  # type: Optional[str]
    +            **kwargs):
    +        # type: (...) -> BlobLeaseClient
    +        """
    +        Requests a new lease. If the container does not have an active lease,
    +        the Blob service creates a lease on the container and returns a new
    +        lease ID.
    +
    +        :param int lease_duration:
    +            Specifies the duration of the lease, in seconds, or negative one
    +            (-1) for a lease that never expires. A non-infinite lease can be
    +            between 15 and 60 seconds. A lease duration cannot be changed
    +            using renew or change. Default is -1 (infinite lease).
    +        :param str lease_id:
    +            Proposed lease ID, in a GUID string format. The Blob service returns
    +            400 (Invalid request) if the proposed lease ID is not in the correct format.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: A BlobLeaseClient object, that can be run in a context manager.
    +        :rtype: ~azure.storage.blob.aio.BlobLeaseClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START acquire_lease_on_container]
    +                :end-before: [END acquire_lease_on_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: Acquiring a lease on the container.
    +        """
    +        lease = BlobLeaseClient(self, lease_id=lease_id) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        await lease.acquire(lease_duration=lease_duration, timeout=timeout, **kwargs)
    +        return lease
    +
    +    @distributed_trace_async
    +    async def get_account_information(self, **kwargs):
    +        # type: (**Any) -> Dict[str, str]
    +        """Gets information related to the storage account.
    +
    +        The information can also be retrieved if the user has a SAS to a container or blob.
    +        The keys in the returned dictionary include 'sku_name' and 'account_kind'.
    +
    +        :returns: A dict of account information (SKU and account type).
    +        :rtype: dict(str, str)
    +        """
    +        try:
    +            return await self._client.container.get_account_info(cls=return_response_headers, **kwargs) # type: ignore
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_container_properties(self, **kwargs):
    +        # type: (**Any) -> ContainerProperties
    +        """Returns all user-defined metadata and system properties for the specified
    +        container. The data returned does not include the container's list of blobs.
    +
    +        :keyword lease:
    +            If specified, get_container_properties only succeeds if the
    +            container's lease is active and matches this ID.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: Properties for the specified container within a container object.
    +        :rtype: ~azure.storage.blob.ContainerProperties
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START get_container_properties]
    +                :end-before: [END get_container_properties]
    +                :language: python
    +                :dedent: 16
    +                :caption: Getting properties on the container.
    +        """
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            response = await self._client.container.get_properties(
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                cls=deserialize_container_properties,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        response.name = self.container_name
    +        return response # type: ignore
    +
    +    @distributed_trace_async
    +    async def set_container_metadata( # type: ignore
    +            self, metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Sets one or more user-defined name-value pairs for the specified
    +        container. Each call to this operation replaces all existing metadata
    +        attached to the container. To remove all metadata from the container,
    +        call this operation with no metadata dict.
    +
    +        :param metadata:
    +            A dict containing name-value pairs to associate with the container as
    +            metadata. Example: {'category':'test'}
    +        :type metadata: dict[str, str]
    +        :keyword lease:
    +            If specified, set_container_metadata only succeeds if the
    +            container's lease is active and matches this ID.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Container-updated property dict (Etag and last modified).
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START set_container_metadata]
    +                :end-before: [END set_container_metadata]
    +                :language: python
    +                :dedent: 16
    +                :caption: Setting metadata on the container.
    +        """
    +        headers = kwargs.pop('headers', {})
    +        headers.update(add_metadata_headers(metadata))
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        mod_conditions = get_modify_conditions(kwargs)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            return await self._client.container.set_metadata( # type: ignore
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                headers=headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace_async
    +    async def get_container_access_policy(self, **kwargs):
    +        # type: (Any) -> Dict[str, Any]
    +        """Gets the permissions for the specified container.
    +        The permissions indicate whether container data may be accessed publicly.
    +
    +        :keyword lease:
    +            If specified, get_container_access_policy only succeeds if the
    +            container's lease is active and matches this ID.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Access policy information in a dict.
    +        :rtype: dict[str, Any]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START get_container_access_policy]
    +                :end-before: [END get_container_access_policy]
    +                :language: python
    +                :dedent: 16
    +                :caption: Getting the access policy on the container.
    +        """
    +        lease = kwargs.pop('lease', None)
    +        access_conditions = get_access_conditions(lease)
    +        timeout = kwargs.pop('timeout', None)
    +        try:
    +            response, identifiers = await self._client.container.get_access_policy(
    +                timeout=timeout,
    +                lease_access_conditions=access_conditions,
    +                cls=return_headers_and_deserialized,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return {
    +            'public_access': response.get('blob_public_access'),
    +            'signed_identifiers': identifiers or []
    +        }
    +
    +    @distributed_trace_async
    +    async def set_container_access_policy(
    +            self, signed_identifiers,  # type: Dict[str, AccessPolicy]
    +            public_access=None,  # type: Optional[Union[str, PublicAccess]]
    +            **kwargs  # type: Any
    +        ):  # type: (...) -> Dict[str, Union[str, datetime]]
    +        """Sets the permissions for the specified container or stored access
    +        policies that may be used with Shared Access Signatures. The permissions
    +        indicate whether blobs in a container may be accessed publicly.
    +
    +        :param signed_identifiers:
    +            A dictionary of access policies to associate with the container. The
    +            dictionary may contain up to 5 elements. An empty dictionary
    +            will clear the access policies set on the service.
    +        :type signed_identifiers: dict[str, ~azure.storage.blob.AccessPolicy]
    +        :param ~azure.storage.blob.PublicAccess public_access:
    +            Possible values include: 'container', 'blob'.
    +        :keyword lease:
    +            Required if the container has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A datetime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified date/time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A datetime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: Container-updated property dict (Etag and last modified).
    +        :rtype: dict[str, str or ~datetime.datetime]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START set_container_access_policy]
    +                :end-before: [END set_container_access_policy]
    +                :language: python
    +                :dedent: 16
    +                :caption: Setting access policy on the container.
    +        """
    +        timeout = kwargs.pop('timeout', None)
    +        lease = kwargs.pop('lease', None)
    +        if len(signed_identifiers) > 5:
    +            raise ValueError(
    +                'Too many access policies provided. The server does not support setting '
    +                'more than 5 access policies on a single resource.')
    +        identifiers = []
    +        for key, value in signed_identifiers.items():
    +            if value:
    +                value.start = serialize_iso(value.start)
    +                value.expiry = serialize_iso(value.expiry)
    +            identifiers.append(SignedIdentifier(id=key, access_policy=value)) # type: ignore
    +        signed_identifiers = identifiers # type: ignore
    +
    +        mod_conditions = get_modify_conditions(kwargs)
    +        access_conditions = get_access_conditions(lease)
    +        try:
    +            return await self._client.container.set_access_policy(
    +                container_acl=signed_identifiers or None,
    +                timeout=timeout,
    +                access=public_access,
    +                lease_access_conditions=access_conditions,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    @distributed_trace
    +    def list_blobs(self, name_starts_with=None, include=None, **kwargs):
    +        # type: (Optional[str], Optional[Any], **Any) -> AsyncItemPaged[BlobProperties]
    +        """Returns a generator to list the blobs under the specified container.
    +        The generator will lazily follow the continuation tokens returned by
    +        the service.
    +
    +        :param str name_starts_with:
    +            Filters the results to return only blobs whose names
    +            begin with the specified prefix.
    +        :param list[str] include:
    +            Specifies one or more additional datasets to include in the response.
    +            Options include: 'snapshots', 'metadata', 'uncommittedblobs', 'copy', 'deleted'.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An iterable (auto-paging) response of BlobProperties.
    +        :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.storage.blob.BlobProperties]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START list_blobs_in_container]
    +                :end-before: [END list_blobs_in_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: List the blobs in the container.
    +        """
    +        if include and not isinstance(include, list):
    +            include = [include]
    +
    +        results_per_page = kwargs.pop('results_per_page', None)
    +        timeout = kwargs.pop('timeout', None)
    +        command = functools.partial(
    +            self._client.container.list_blob_flat_segment,
    +            include=include,
    +            timeout=timeout,
    +            **kwargs)
    +        return AsyncItemPaged(
    +            command,
    +            prefix=name_starts_with,
    +            results_per_page=results_per_page,
    +            page_iterator_class=BlobPropertiesPaged
    +        )
    +
    +    @distributed_trace
    +    def walk_blobs(
    +            self, name_starts_with=None, # type: Optional[str]
    +            include=None, # type: Optional[Any]
    +            delimiter="/", # type: str
    +            **kwargs # type: Optional[Any]
    +        ):
    +        # type: (...) -> AsyncItemPaged[BlobProperties]
    +        """Returns a generator to list the blobs under the specified container.
    +        The generator will lazily follow the continuation tokens returned by
    +        the service. This operation will list blobs in accordance with a hierarchy,
    +        as delimited by the specified delimiter character.
    +
    +        :param str name_starts_with:
    +            Filters the results to return only blobs whose names
    +            begin with the specified prefix.
    +        :param list[str] include:
    +            Specifies one or more additional datasets to include in the response.
    +            Options include: 'snapshots', 'metadata', 'uncommittedblobs', 'copy', 'deleted'.
    +        :param str delimiter:
    +            When the request includes this parameter, the operation returns a BlobPrefix
    +            element in the response body that acts as a placeholder for all blobs whose
    +            names begin with the same substring up to the appearance of the delimiter
    +            character. The delimiter may be a single character or a string.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :returns: An iterable (auto-paging) response of BlobProperties.
    +        :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.storage.blob.BlobProperties]
    +        """
    +        if include and not isinstance(include, list):
    +            include = [include]
    +
    +        results_per_page = kwargs.pop('results_per_page', None)
    +        timeout = kwargs.pop('timeout', None)
    +        command = functools.partial(
    +            self._client.container.list_blob_hierarchy_segment,
    +            delimiter=delimiter,
    +            include=include,
    +            timeout=timeout,
    +            **kwargs)
    +        return BlobPrefix(
    +            command,
    +            prefix=name_starts_with,
    +            results_per_page=results_per_page,
    +            delimiter=delimiter)
    +
    +    @distributed_trace_async
    +    async def upload_blob(
    +            self, name,  # type: Union[str, BlobProperties]
    +            data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
    +            blob_type=BlobType.BlockBlob,  # type: Union[str, BlobType]
    +            length=None,  # type: Optional[int]
    +            metadata=None,  # type: Optional[Dict[str, str]]
    +            **kwargs
    +        ):
    +        # type: (...) -> BlobClient
    +        """Creates a new blob from a data source with automatic chunking.
    +
    +        :param name: The blob with which to interact. If specified, this value will override
    +            a blob value specified in the blob URL.
    +        :type name: str or ~azure.storage.blob.BlobProperties
    +        :param data: The blob data to upload.
    +        :param ~azure.storage.blob.BlobType blob_type: The type of the blob. This can be
    +            either BlockBlob, PageBlob or AppendBlob. The default value is BlockBlob.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :param metadata:
    +            Name-value pairs associated with the blob as metadata.
    +        :type metadata: dict(str, str)
    +        :keyword bool overwrite: Whether the blob to be uploaded should overwrite the current data.
    +            If True, upload_blob will overwrite the existing data. If set to False, the
    +            operation will fail with ResourceExistsError. The exception to the above is with Append
    +            blob types: if set to False and the data already exists, an error will not be raised
    +            and the data will be appended to the existing blob. If set overwrite=True, then the existing
    +            append blob will be deleted, and a new one created. Defaults to False.
    +        :keyword ~azure.storage.blob.ContentSettings content_settings:
    +            ContentSettings object used to set blob properties. Used to set content type, encoding,
    +            language, disposition, md5, and cache control.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used, because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the container has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :keyword ~azure.storage.blob.PremiumPageBlobTier premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :keyword ~azure.storage.blob.StandardBlobTier standard_blob_tier:
    +            A standard blob tier value to set the blob to. For this version of the library,
    +            this is only applicable to block blobs on standard storage accounts.
    +        :keyword int maxsize_condition:
    +            Optional conditional header. The max length in bytes permitted for
    +            the append blob. If the Append Block operation would cause the blob
    +            to exceed that limit or if the blob size is already greater than the
    +            value specified in this header, the request will fail with
    +            MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed).
    +        :keyword int max_concurrency:
    +            Maximum number of parallel connections to use when the blob size exceeds
    +            64MB.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword str encryption_scope:
    +            A predefined encryption scope used to encrypt the data on the service. An encryption
    +            scope can be created using the Management API and referenced here by name. If a default
    +            encryption scope has been defined at the container, this value will override it if the
    +            container-level scope is configured to allow overrides. Otherwise an error will be raised.
    +
    +            .. versionadded:: 12.2.0
    +
    +        :keyword str encoding:
    +            Defaults to UTF-8.
    +        :returns: A BlobClient to interact with the newly uploaded blob.
    +        :rtype: ~azure.storage.blob.aio.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START upload_blob_to_container]
    +                :end-before: [END upload_blob_to_container]
    +                :language: python
    +                :dedent: 12
    +                :caption: Upload blob to the container.
    +        """
    +        blob = self.get_blob_client(name)
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        encoding = kwargs.pop('encoding', 'UTF-8')
    +        await blob.upload_blob(
    +            data,
    +            blob_type=blob_type,
    +            length=length,
    +            metadata=metadata,
    +            timeout=timeout,
    +            encoding=encoding,
    +            **kwargs
    +        )
    +        return blob
    +
    +    @distributed_trace_async
    +    async def delete_blob(
    +            self, blob,  # type: Union[str, BlobProperties]
    +            delete_snapshots=None,  # type: Optional[str]
    +            **kwargs
    +        ):
    +        # type: (...) -> None
    +        """Marks the specified blob or snapshot for deletion.
    +
    +        The blob is later deleted during garbage collection.
    +        Note that in order to delete a blob, you must delete all of its
    +        snapshots. You can delete both at the same time with the delete_blob
    +        operation.
    +
    +        If a delete retention policy is enabled for the service, then this operation soft deletes the blob or snapshot
    +        and retains the blob or snapshot for specified number of days.
    +        After specified number of days, blob's data is removed from the service during garbage collection.
    +        Soft deleted blob or snapshot is accessible through :func:`list_blobs()` specifying `include=["deleted"]`
    +        option. Soft-deleted blob or snapshot can be restored using :func:`~BlobClient.undelete()`
    +
    +        :param blob: The blob with which to interact. If specified, this value will override
    +            a blob value specified in the blob URL.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param str delete_snapshots:
    +            Required if the blob has associated snapshots. Values include:
    +             - "only": Deletes only the blobs snapshots.
    +             - "include": Deletes the blob along with all snapshots.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a Lease object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        blob = self.get_blob_client(blob) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        timeout = kwargs.pop('timeout', None)
    +        await blob.delete_blob( # type: ignore
    +            delete_snapshots=delete_snapshots,
    +            timeout=timeout,
    +            **kwargs)
    +
    +    @distributed_trace_async
    +    async def download_blob(self, blob, offset=None, length=None, **kwargs):
    +        # type: (Union[str, BlobProperties], Optional[int], Optional[int], Any) -> StorageStreamDownloader
    +        """Downloads a blob to the StorageStreamDownloader. The readall() method must
    +        be used to read all the content or readinto() must be used to download the blob into
    +        a stream.
    +
    +        :param blob: The blob with which to interact. If specified, this value will override
    +            a blob value specified in the blob URL.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param int offset:
    +            Start of byte range to use for downloading a section of the blob.
    +            Must be set if length is provided.
    +        :param int length:
    +            Number of bytes to read from the stream. This is optional, but
    +            should be supplied for optimal performance.
    +        :keyword bool validate_content:
    +            If true, calculates an MD5 hash for each chunk of the blob. The storage
    +            service checks the hash of the content that has arrived with the hash
    +            that was sent. This is primarily valuable for detecting bitflips on
    +            the wire if using http instead of https, as https (the default), will
    +            already validate. Note that this MD5 hash is not stored with the
    +            blob. Also note that if enabled, the memory-efficient upload algorithm
    +            will not be used because computing the MD5 hash requires buffering
    +            entire blocks, and doing so defeats the purpose of the memory-efficient algorithm.
    +        :keyword lease:
    +            Required if the blob has an active lease. If specified, download_blob only
    +            succeeds if the blob's lease is active and matches this ID. Value can be a
    +            BlobLeaseClient object or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword ~azure.storage.blob.CustomerProvidedEncryptionKey cpk:
    +            Encrypts the data on the service-side with the given key.
    +            Use of customer-provided keys must be done over HTTPS.
    +            As the encryption key itself is provided in the request,
    +            a secure connection must be established to transfer the key.
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :keyword str encoding:
    +            Encoding to decode the downloaded bytes. Default is None, i.e. no decoding.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :returns: A streaming object. (StorageStreamDownloader)
    +        :rtype: ~azure.storage.blob.aio.StorageStreamDownloader
    +        """
    +        blob_client = self.get_blob_client(blob) # type: ignore
    +        kwargs.setdefault('merge_span', True)
    +        return await blob_client.download_blob(
    +            offset=offset,
    +            length=length,
    +            **kwargs)
    +
    +    @distributed_trace_async
    +    async def delete_blobs(  # pylint: disable=arguments-differ
    +            self, *blobs: Union[str, BlobProperties],
    +            delete_snapshots: Optional[str] = None,
    +            lease: Optional[Union[str, BlobLeaseClient]] = None,
    +            **kwargs
    +        ) -> AsyncIterator[AsyncHttpResponse]:
    +        """Marks the specified blobs or snapshots for deletion.
    +
    +        The blobs are later deleted during garbage collection.
    +        Note that in order to delete blobs, you must delete all of their
    +        snapshots. You can delete both at the same time with the delete_blobs operation.
    +
    +        If a delete retention policy is enabled for the service, then this operation soft deletes the blobs or snapshots
    +        and retains the blobs or snapshots for specified number of days.
    +        After specified number of days, blobs' data is removed from the service during garbage collection.
    +        Soft deleted blobs or snapshots are accessible through :func:`list_blobs()` specifying `include=["deleted"]`
    +        Soft-deleted blobs or snapshots can be restored using :func:`~BlobClient.undelete()`
    +
    +        :param blobs: The blob names with which to interact. This can be a single blob, or multiple values can
    +            be supplied, where each value is either the name of the blob (str) or BlobProperties.
    +        :type blobs: str or ~azure.storage.blob.BlobProperties
    +        :param str delete_snapshots:
    +            Required if a blob has associated snapshots. Values include:
    +             - "only": Deletes only the blobs snapshots.
    +             - "include": Deletes the blob along with all snapshots.
    +        :param lease:
    +            Required if a blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :type lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword bool raise_on_any_failure:
    +            This is a boolean param which defaults to True. When this is set, an exception
    +            is raised even if there is a single operation failure. For optimal performance,
    +            this should be set to False
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: An async iterator of responses, one for each blob in order
    +        :rtype: asynciterator[~azure.core.pipeline.transport.AsyncHttpResponse]
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_common_async.py
    +                :start-after: [START delete_multiple_blobs]
    +                :end-before: [END delete_multiple_blobs]
    +                :language: python
    +                :dedent: 12
    +                :caption: Deleting multiple blobs.
    +        """
    +        raise_on_any_failure = kwargs.pop('raise_on_any_failure', True)
    +        timeout = kwargs.pop('timeout', None)
    +        options = BlobClient._generic_delete_blob_options(  # pylint: disable=protected-access
    +            delete_snapshots=delete_snapshots,
    +            lease=lease,
    +            timeout=timeout,
    +            **kwargs
    +        )
    +        options.update({'raise_on_any_failure': raise_on_any_failure})
    +        query_parameters, header_parameters = self._generate_delete_blobs_options(**options)
    +        # To pass kwargs to "_batch_send", we need to remove anything that was
    +        # in the Autorest signature for Autorest, otherwise transport will be upset
    +        for possible_param in ['timeout', 'delete_snapshots', 'lease_access_conditions', 'modified_access_conditions']:
    +            options.pop(possible_param, None)
    +
    +        reqs = []
    +        for blob in blobs:
    +            blob_name = _get_blob_name(blob)
    +            req = HttpRequest(
    +                "DELETE",
    +                "/{}/{}".format(self.container_name, blob_name),
    +                headers=header_parameters
    +            )
    +            req.format_parameters(query_parameters)
    +            reqs.append(req)
    +
    +        return await self._batch_send(*reqs, **options)
    +
    +    @distributed_trace
    +    async def set_standard_blob_tier_blobs(
    +        self,
    +        standard_blob_tier: Union[str, 'StandardBlobTier'],
    +        *blobs: Union[str, BlobProperties],
    +        **kwargs
    +    ) -> AsyncIterator[AsyncHttpResponse]:
    +        """This operation sets the tier on block blobs.
    +
    +        A block blob's tier determines Hot/Cool/Archive storage type.
    +        This operation does not update the blob's ETag.
    +
    +        :param standard_blob_tier:
    +            Indicates the tier to be set on the blob. Options include 'Hot', 'Cool',
    +            'Archive'. The hot tier is optimized for storing data that is accessed
    +            frequently. The cool storage tier is optimized for storing data that
    +            is infrequently accessed and stored for at least a month. The archive
    +            tier is optimized for storing data that is rarely accessed and stored
    +            for at least six months with flexible latency requirements.
    +        :type standard_blob_tier: str or ~azure.storage.blob.StandardBlobTier
    +        :param blobs: The blobs with which to interact. This can be a single blob, or multiple values can
    +            be supplied, where each value is either the name of the blob (str) or BlobProperties.
    +        :type blobs: str or ~azure.storage.blob.BlobProperties
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword bool raise_on_any_failure:
    +            This is a boolean param which defaults to True. When this is set, an exception
    +            is raised even if there is a single operation failure. For optimal performance,
    +            this should be set to False.
    +        :return: An async iterator of responses, one for each blob in order
    +        :rtype: asynciterator[~azure.core.pipeline.transport.AsyncHttpResponse]
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if standard_blob_tier is None:
    +            raise ValueError("A StandardBlobTier must be specified")
    +
    +        query_parameters, header_parameters = self._generate_set_tier_options(
    +            tier=standard_blob_tier,
    +            lease_access_conditions=access_conditions,
    +            **kwargs
    +        )
    +        # To pass kwargs to "_batch_send", we need to remove anything that was
    +        # in the Autorest signature for Autorest, otherwise transport will be upset
    +        for possible_param in ['timeout', 'lease']:
    +            kwargs.pop(possible_param, None)
    +
    +        reqs = []
    +        for blob in blobs:
    +            blob_name = _get_blob_name(blob)
    +            req = HttpRequest(
    +                "PUT",
    +                "/{}/{}".format(self.container_name, blob_name),
    +                headers=header_parameters
    +            )
    +            req.format_parameters(query_parameters)
    +            reqs.append(req)
    +
    +        return await self._batch_send(*reqs, **kwargs)
    +
    +    @distributed_trace
    +    async def set_premium_page_blob_tier_blobs(
    +        self,
    +        premium_page_blob_tier: Union[str, 'PremiumPageBlobTier'],
    +        *blobs: Union[str, BlobProperties],
    +        **kwargs
    +    ) -> AsyncIterator[AsyncHttpResponse]:
    +        """Sets the page blob tiers on the blobs. This API is only supported for page blobs on premium accounts.
    +
    +        :param premium_page_blob_tier:
    +            A page blob tier value to set the blob to. The tier correlates to the size of the
    +            blob and number of allowed IOPS. This is only applicable to page blobs on
    +            premium storage accounts.
    +        :type premium_page_blob_tier: ~azure.storage.blob.PremiumPageBlobTier
    +        :param blobs: The blobs with which to interact. This can be a single blob, or multiple values can
    +            be supplied, where each value is either the name of the blob (str) or BlobProperties.
    +        :type blobs: str or ~azure.storage.blob.BlobProperties
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds. This method may make
    +            multiple calls to the Azure service and the timeout will apply to
    +            each call individually.
    +        :keyword lease:
    +            Required if the blob has an active lease. Value can be a BlobLeaseClient object
    +            or the lease ID as a string.
    +        :paramtype lease: ~azure.storage.blob.aio.BlobLeaseClient or str
    +        :keyword bool raise_on_any_failure:
    +            This is a boolean param which defaults to True. When this is set, an exception
    +            is raised even if there is a single operation failure. For optimal performance,
    +            this should be set to False.
    +        :return: An async iterator of responses, one for each blob in order
    +        :rtype: asynciterator[~azure.core.pipeline.transport.AsyncHttpResponse]
    +        """
    +        access_conditions = get_access_conditions(kwargs.pop('lease', None))
    +        if premium_page_blob_tier is None:
    +            raise ValueError("A PremiumPageBlobTier must be specified")
    +
    +        query_parameters, header_parameters = self._generate_set_tier_options(
    +            tier=premium_page_blob_tier,
    +            lease_access_conditions=access_conditions,
    +            **kwargs
    +        )
    +        # To pass kwargs to "_batch_send", we need to remove anything that was
    +        # in the Autorest signature for Autorest, otherwise transport will be upset
    +        for possible_param in ['timeout', 'lease']:
    +            kwargs.pop(possible_param, None)
    +
    +        reqs = []
    +        for blob in blobs:
    +            blob_name = _get_blob_name(blob)
    +            req = HttpRequest(
    +                "PUT",
    +                "/{}/{}".format(self.container_name, blob_name),
    +                headers=header_parameters
    +            )
    +            req.format_parameters(query_parameters)
    +            reqs.append(req)
    +
    +        return await self._batch_send(*reqs, **kwargs)
    +
    +    def get_blob_client(
    +            self, blob,  # type: Union[BlobProperties, str]
    +            snapshot=None  # type: str
    +        ):
    +        # type: (...) -> BlobClient
    +        """Get a client to interact with the specified blob.
    +
    +        The blob need not already exist.
    +
    +        :param blob:
    +            The blob with which to interact.
    +        :type blob: str or ~azure.storage.blob.BlobProperties
    +        :param str snapshot:
    +            The optional blob snapshot on which to operate. This can be the snapshot ID string
    +            or the response returned from :func:`~BlobClient.create_snapshot()`.
    +        :returns: A BlobClient.
    +        :rtype: ~azure.storage.blob.aio.BlobClient
    +
    +        .. admonition:: Example:
    +
    +            .. literalinclude:: ../samples/blob_samples_containers_async.py
    +                :start-after: [START get_blob_client]
    +                :end-before: [END get_blob_client]
    +                :language: python
    +                :dedent: 12
    +                :caption: Get the blob client.
    +        """
    +        blob_name = _get_blob_name(blob)
    +        _pipeline = AsyncPipeline(
    +            transport=AsyncTransportWrapper(self._pipeline._transport), # pylint: disable = protected-access
    +            policies=self._pipeline._impl_policies # pylint: disable = protected-access
    +        )
    +        return BlobClient(
    +            self.url, container_name=self.container_name, blob_name=blob_name, snapshot=snapshot,
    +            credential=self.credential, api_version=self.api_version, _configuration=self._config,
    +            _pipeline=_pipeline, _location_mode=self._location_mode, _hosts=self._hosts,
    +            require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key,
    +            key_resolver_function=self.key_resolver_function, loop=self._loop)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_download_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_download_async.py
    new file mode 100644
    index 000000000000..ea83862e4ae5
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_download_async.py
    @@ -0,0 +1,490 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +import asyncio
    +import sys
    +from io import BytesIO
    +from itertools import islice
    +import warnings
    +
    +from azure.core.exceptions import HttpResponseError
    +from .._shared.encryption import decrypt_blob
    +from .._shared.request_handlers import validate_and_format_range_headers
    +from .._shared.response_handlers import process_storage_error, parse_length_from_content_range
    +from .._deserialize import get_page_ranges_result
    +from .._download import process_range_and_offset, _ChunkDownloader
    +
    +
    +async def process_content(data, start_offset, end_offset, encryption):
    +    if data is None:
    +        raise ValueError("Response cannot be None.")
    +    try:
    +        content = data.response.body()
    +    except Exception as error:
    +        raise HttpResponseError(message="Download stream interrupted.", response=data.response, error=error)
    +    if encryption.get('key') is not None or encryption.get('resolver') is not None:
    +        try:
    +            return decrypt_blob(
    +                encryption.get('required'),
    +                encryption.get('key'),
    +                encryption.get('resolver'),
    +                content,
    +                start_offset,
    +                end_offset,
    +                data.response.headers)
    +        except Exception as error:
    +            raise HttpResponseError(
    +                message="Decryption failed.",
    +                response=data.response,
    +                error=error)
    +    return content
    +
    +
    +class _AsyncChunkDownloader(_ChunkDownloader):
    +    def __init__(self, **kwargs):
    +        super(_AsyncChunkDownloader, self).__init__(**kwargs)
    +        self.stream_lock = asyncio.Lock() if kwargs.get('parallel') else None
    +        self.progress_lock = asyncio.Lock() if kwargs.get('parallel') else None
    +
    +    async def process_chunk(self, chunk_start):
    +        chunk_start, chunk_end = self._calculate_range(chunk_start)
    +        chunk_data = await self._download_chunk(chunk_start, chunk_end - 1)
    +        length = chunk_end - chunk_start
    +        if length > 0:
    +            await self._write_to_stream(chunk_data, chunk_start)
    +            await self._update_progress(length)
    +
    +    async def yield_chunk(self, chunk_start):
    +        chunk_start, chunk_end = self._calculate_range(chunk_start)
    +        return await self._download_chunk(chunk_start, chunk_end - 1)
    +
    +    async def _update_progress(self, length):
    +        if self.progress_lock:
    +            async with self.progress_lock:  # pylint: disable=not-async-context-manager
    +                self.progress_total += length
    +        else:
    +            self.progress_total += length
    +
    +    async def _write_to_stream(self, chunk_data, chunk_start):
    +        if self.stream_lock:
    +            async with self.stream_lock:  # pylint: disable=not-async-context-manager
    +                self.stream.seek(self.stream_start + (chunk_start - self.start_index))
    +                self.stream.write(chunk_data)
    +        else:
    +            self.stream.write(chunk_data)
    +
    +    async def _download_chunk(self, chunk_start, chunk_end):
    +        download_range, offset = process_range_and_offset(
    +            chunk_start, chunk_end, chunk_end, self.encryption_options)
    +
    +        # No need to download the empty chunk from server if there's no data in the chunk to be downloaded.
    +        # Do optimize and create empty chunk locally if condition is met.
    +        if self._do_optimize(download_range[0], download_range[1]):
    +            chunk_data = b"\x00" * self.chunk_size
    +        else:
    +            range_header, range_validation = validate_and_format_range_headers(
    +                download_range[0],
    +                download_range[1],
    +                check_content_md5=self.validate_content
    +            )
    +            try:
    +                _, response = await self.client.download(
    +                    range=range_header,
    +                    range_get_content_md5=range_validation,
    +                    validate_content=self.validate_content,
    +                    data_stream_total=self.total_size,
    +                    download_stream_current=self.progress_total,
    +                    **self.request_options
    +                )
    +            except HttpResponseError as error:
    +                process_storage_error(error)
    +
    +            chunk_data = await process_content(response, offset[0], offset[1], self.encryption_options)
    +
    +            # This makes sure that if_match is set so that we can validate
    +            # that subsequent downloads are to an unmodified blob
    +            if self.request_options.get('modified_access_conditions'):
    +                self.request_options['modified_access_conditions'].if_match = response.properties.etag
    +
    +        return chunk_data
    +
    +
    +class _AsyncChunkIterator(object):
    +    """Async iterator for chunks in blob download stream."""
    +
    +    def __init__(self, size, content, downloader):
    +        self.size = size
    +        self._current_content = content
    +        self._iter_downloader = downloader
    +        self._iter_chunks = None
    +        self._complete = (size == 0)
    +
    +    def __len__(self):
    +        return self.size
    +
    +    def __iter__(self):
    +        raise TypeError("Async stream must be iterated asynchronously.")
    +
    +    def __aiter__(self):
    +        return self
    +
    +    async def __anext__(self):
    +        """Iterate through responses."""
    +        if self._complete:
    +            raise StopAsyncIteration("Download complete")
    +        if not self._iter_downloader:
    +            # If no iterator was supplied, the download completed with
    +            # the initial GET, so we just return that data
    +            self._complete = True
    +            return self._current_content
    +
    +        if not self._iter_chunks:
    +            self._iter_chunks = self._iter_downloader.get_chunk_offsets()
    +        else:
    +            try:
    +                chunk = next(self._iter_chunks)
    +            except StopIteration:
    +                raise StopAsyncIteration("Download complete")
    +            self._current_content = await self._iter_downloader.yield_chunk(chunk)
    +
    +        return self._current_content
    +
    +
    +class StorageStreamDownloader(object):  # pylint: disable=too-many-instance-attributes
    +    """A streaming object to download from Azure Storage.
    +
    +    :ivar str name:
    +        The name of the blob being downloaded.
    +    :ivar str container:
    +        The name of the container where the blob is.
    +    :ivar ~azure.storage.blob.BlobProperties properties:
    +        The properties of the blob being downloaded. If only a range of the data is being
    +        downloaded, this will be reflected in the properties.
    +    :ivar int size:
    +        The size of the total data in the stream. This will be the byte range if speficied,
    +        otherwise the total size of the blob.
    +    """
    +
    +    def __init__(
    +            self,
    +            clients=None,
    +            config=None,
    +            start_range=None,
    +            end_range=None,
    +            validate_content=None,
    +            encryption_options=None,
    +            max_concurrency=1,
    +            name=None,
    +            container=None,
    +            encoding=None,
    +            **kwargs
    +    ):
    +        self.name = name
    +        self.container = container
    +        self.properties = None
    +        self.size = None
    +
    +        self._clients = clients
    +        self._config = config
    +        self._start_range = start_range
    +        self._end_range = end_range
    +        self._max_concurrency = max_concurrency
    +        self._encoding = encoding
    +        self._validate_content = validate_content
    +        self._encryption_options = encryption_options or {}
    +        self._request_options = kwargs
    +        self._location_mode = None
    +        self._download_complete = False
    +        self._current_content = None
    +        self._file_size = None
    +        self._non_empty_ranges = None
    +        self._response = None
    +
    +        # The service only provides transactional MD5s for chunks under 4MB.
    +        # If validate_content is on, get only self.MAX_CHUNK_GET_SIZE for the first
    +        # chunk so a transactional MD5 can be retrieved.
    +        self._first_get_size = self._config.max_single_get_size if not self._validate_content \
    +            else self._config.max_chunk_get_size
    +        initial_request_start = self._start_range if self._start_range is not None else 0
    +        if self._end_range is not None and self._end_range - self._start_range < self._first_get_size:
    +            initial_request_end = self._end_range
    +        else:
    +            initial_request_end = initial_request_start + self._first_get_size - 1
    +
    +        self._initial_range, self._initial_offset = process_range_and_offset(
    +            initial_request_start, initial_request_end, self._end_range, self._encryption_options
    +        )
    +
    +    def __len__(self):
    +        return self.size
    +
    +    async def _setup(self):
    +        self._response = await self._initial_request()
    +        self.properties = self._response.properties
    +        self.properties.name = self.name
    +        self.properties.container = self.container
    +
    +        # Set the content length to the download size instead of the size of
    +        # the last range
    +        self.properties.size = self.size
    +
    +        # Overwrite the content range to the user requested range
    +        self.properties.content_range = 'bytes {0}-{1}/{2}'.format(
    +            self._start_range,
    +            self._end_range,
    +            self._file_size
    +        )
    +
    +        # Overwrite the content MD5 as it is the MD5 for the last range instead
    +        # of the stored MD5
    +        # TODO: Set to the stored MD5 when the service returns this
    +        self.properties.content_md5 = None
    +
    +        if self.size == 0:
    +            self._current_content = b""
    +        else:
    +            self._current_content = await process_content(
    +                self._response,
    +                self._initial_offset[0],
    +                self._initial_offset[1],
    +                self._encryption_options
    +            )
    +
    +    async def _initial_request(self):
    +        range_header, range_validation = validate_and_format_range_headers(
    +            self._initial_range[0],
    +            self._initial_range[1],
    +            start_range_required=False,
    +            end_range_required=False,
    +            check_content_md5=self._validate_content)
    +
    +        try:
    +            location_mode, response = await self._clients.blob.download(
    +                range=range_header,
    +                range_get_content_md5=range_validation,
    +                validate_content=self._validate_content,
    +                data_stream_total=None,
    +                download_stream_current=0,
    +                **self._request_options)
    +
    +            # Check the location we read from to ensure we use the same one
    +            # for subsequent requests.
    +            self._location_mode = location_mode
    +
    +            # Parse the total file size and adjust the download size if ranges
    +            # were specified
    +            self._file_size = parse_length_from_content_range(response.properties.content_range)
    +            if self._end_range is not None:
    +                # Use the length unless it is over the end of the file
    +                self.size = min(self._file_size, self._end_range - self._start_range + 1)
    +            elif self._start_range is not None:
    +                self.size = self._file_size - self._start_range
    +            else:
    +                self.size = self._file_size
    +
    +        except HttpResponseError as error:
    +            if self._start_range is None and error.response.status_code == 416:
    +                # Get range will fail on an empty file. If the user did not
    +                # request a range, do a regular get request in order to get
    +                # any properties.
    +                try:
    +                    _, response = await self._clients.blob.download(
    +                        validate_content=self._validate_content,
    +                        data_stream_total=0,
    +                        download_stream_current=0,
    +                        **self._request_options)
    +                except HttpResponseError as error:
    +                    process_storage_error(error)
    +
    +                # Set the download size to empty
    +                self.size = 0
    +                self._file_size = 0
    +            else:
    +                process_storage_error(error)
    +
    +        # get page ranges to optimize downloading sparse page blob
    +        if response.properties.blob_type == 'PageBlob':
    +            try:
    +                page_ranges = await self._clients.page_blob.get_page_ranges()
    +                self._non_empty_ranges = get_page_ranges_result(page_ranges)[0]
    +            except HttpResponseError:
    +                pass
    +
    +        # If the file is small, the download is complete at this point.
    +        # If file size is large, download the rest of the file in chunks.
    +        if response.properties.size != self.size:
    +            # Lock on the etag. This can be overriden by the user by specifying '*'
    +            if self._request_options.get('modified_access_conditions'):
    +                if not self._request_options['modified_access_conditions'].if_match:
    +                    self._request_options['modified_access_conditions'].if_match = response.properties.etag
    +        else:
    +            self._download_complete = True
    +        return response
    +
    +    def chunks(self):
    +        """Iterate over chunks in the download stream.
    +
    +        :rtype: Iterable[bytes]
    +        """
    +        if self.size == 0 or self._download_complete:
    +            iter_downloader = None
    +        else:
    +            data_end = self._file_size
    +            if self._end_range is not None:
    +                # Use the length unless it is over the end of the file
    +                data_end = min(self._file_size, self._end_range + 1)
    +            iter_downloader = _AsyncChunkDownloader(
    +                client=self._clients.blob,
    +                non_empty_ranges=self._non_empty_ranges,
    +                total_size=self.size,
    +                chunk_size=self._config.max_chunk_get_size,
    +                current_progress=self._first_get_size,
    +                start_range=self._initial_range[1] + 1,  # Start where the first download ended
    +                end_range=data_end,
    +                stream=None,
    +                parallel=False,
    +                validate_content=self._validate_content,
    +                encryption_options=self._encryption_options,
    +                use_location=self._location_mode,
    +                **self._request_options)
    +        return _AsyncChunkIterator(
    +            size=self.size,
    +            content=self._current_content,
    +            downloader=iter_downloader)
    +
    +    async def readall(self):
    +        """Download the contents of this blob.
    +
    +        This operation is blocking until all data is downloaded.
    +        :rtype: bytes or str
    +        """
    +        stream = BytesIO()
    +        await self.readinto(stream)
    +        data = stream.getvalue()
    +        if self._encoding:
    +            return data.decode(self._encoding)
    +        return data
    +
    +    async def content_as_bytes(self, max_concurrency=1):
    +        """Download the contents of this file.
    +
    +        This operation is blocking until all data is downloaded.
    +
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :rtype: bytes
    +        """
    +        warnings.warn(
    +            "content_as_bytes is deprecated, use readall instead",
    +            DeprecationWarning
    +        )
    +        self._max_concurrency = max_concurrency
    +        return await self.readall()
    +
    +    async def content_as_text(self, max_concurrency=1, encoding="UTF-8"):
    +        """Download the contents of this blob, and decode as text.
    +
    +        This operation is blocking until all data is downloaded.
    +
    +        :keyword int max_concurrency:
    +            The number of parallel connections with which to download.
    +        :param str encoding:
    +            Test encoding to decode the downloaded bytes. Default is UTF-8.
    +        :rtype: str
    +        """
    +        warnings.warn(
    +            "content_as_text is deprecated, use readall instead",
    +            DeprecationWarning
    +        )
    +        self._max_concurrency = max_concurrency
    +        self._encoding = encoding
    +        return await self.readall()
    +
    +    async def readinto(self, stream):
    +        """Download the contents of this blob to a stream.
    +
    +        :param stream:
    +            The stream to download to. This can be an open file-handle,
    +            or any writable stream. The stream must be seekable if the download
    +            uses more than one parallel connection.
    +        :returns: The number of bytes read.
    +        :rtype: int
    +        """
    +        # the stream must be seekable if parallel download is required
    +        parallel = self._max_concurrency > 1
    +        if parallel:
    +            error_message = "Target stream handle must be seekable."
    +            if sys.version_info >= (3,) and not stream.seekable():
    +                raise ValueError(error_message)
    +
    +            try:
    +                stream.seek(stream.tell())
    +            except (NotImplementedError, AttributeError):
    +                raise ValueError(error_message)
    +
    +        # Write the content to the user stream
    +        stream.write(self._current_content)
    +        if self._download_complete:
    +            return self.size
    +
    +        data_end = self._file_size
    +        if self._end_range is not None:
    +            # Use the length unless it is over the end of the file
    +            data_end = min(self._file_size, self._end_range + 1)
    +
    +        downloader = _AsyncChunkDownloader(
    +            client=self._clients.blob,
    +            non_empty_ranges=self._non_empty_ranges,
    +            total_size=self.size,
    +            chunk_size=self._config.max_chunk_get_size,
    +            current_progress=self._first_get_size,
    +            start_range=self._initial_range[1] + 1,  # start where the first download ended
    +            end_range=data_end,
    +            stream=stream,
    +            parallel=parallel,
    +            validate_content=self._validate_content,
    +            encryption_options=self._encryption_options,
    +            use_location=self._location_mode,
    +            **self._request_options)
    +
    +        dl_tasks = downloader.get_chunk_offsets()
    +        running_futures = [
    +            asyncio.ensure_future(downloader.process_chunk(d))
    +            for d in islice(dl_tasks, 0, self._max_concurrency)
    +        ]
    +        while running_futures:
    +            # Wait for some download to finish before adding a new one
    +            _done, running_futures = await asyncio.wait(
    +                running_futures, return_when=asyncio.FIRST_COMPLETED)
    +            try:
    +                next_chunk = next(dl_tasks)
    +            except StopIteration:
    +                break
    +            else:
    +                running_futures.add(asyncio.ensure_future(downloader.process_chunk(next_chunk)))
    +
    +        if running_futures:
    +            # Wait for the remaining downloads to finish
    +            await asyncio.wait(running_futures)
    +        return self.size
    +
    +    async def download_to_stream(self, stream, max_concurrency=1):
    +        """Download the contents of this blob to a stream.
    +
    +        :param stream:
    +            The stream to download to. This can be an open file-handle,
    +            or any writable stream. The stream must be seekable if the download
    +            uses more than one parallel connection.
    +        :returns: The properties of the downloaded blob.
    +        :rtype: Any
    +        """
    +        warnings.warn(
    +            "download_to_stream is deprecated, use readinto instead",
    +            DeprecationWarning
    +        )
    +        self._max_concurrency = max_concurrency
    +        await self.readinto(stream)
    +        return self.properties
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_lease_async.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_lease_async.py
    new file mode 100644
    index 000000000000..ecd9076bc8cd
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_lease_async.py
    @@ -0,0 +1,296 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +
    +from typing import (  # pylint: disable=unused-import
    +    Union, Optional, Any, IO, Iterable, AnyStr, Dict, List, Tuple,
    +    TypeVar, TYPE_CHECKING
    +)
    +
    +from azure.core.tracing.decorator_async import distributed_trace_async
    +
    +from .._shared.response_handlers import return_response_headers, process_storage_error
    +from .._generated.models import (
    +    StorageErrorException,
    +    LeaseAccessConditions)
    +from .._serialize import get_modify_conditions
    +from .._lease import BlobLeaseClient as LeaseClientBase
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime
    +    from .._generated.operations import BlobOperations, ContainerOperations
    +    BlobClient = TypeVar("BlobClient")
    +    ContainerClient = TypeVar("ContainerClient")
    +
    +
    +class BlobLeaseClient(LeaseClientBase):
    +    """Creates a new BlobLeaseClient.
    +
    +    This client provides lease operations on a BlobClient or ContainerClient.
    +
    +    :ivar str id:
    +        The ID of the lease currently being maintained. This will be `None` if no
    +        lease has yet been acquired.
    +    :ivar str etag:
    +        The ETag of the lease currently being maintained. This will be `None` if no
    +        lease has yet been acquired or modified.
    +    :ivar ~datetime.datetime last_modified:
    +        The last modified timestamp of the lease currently being maintained.
    +        This will be `None` if no lease has yet been acquired or modified.
    +
    +    :param client:
    +        The client of the blob or container to lease.
    +    :type client: ~azure.storage.blob.aio.BlobClient or
    +        ~azure.storage.blob.aio.ContainerClient
    +    :param str lease_id:
    +        A string representing the lease ID of an existing lease. This value does not
    +        need to be specified in order to acquire a new lease, or break one.
    +    """
    +
    +    def __enter__(self):
    +        raise TypeError("Async lease must use 'async with'.")
    +
    +    def __exit__(self, *args):
    +        self.release()
    +
    +    async def __aenter__(self):
    +        return self
    +
    +    async def __aexit__(self, *args):
    +        await self.release()
    +
    +    @distributed_trace_async
    +    async def acquire(self, lease_duration=-1, **kwargs):
    +        # type: (int, Any) -> None
    +        """Requests a new lease.
    +
    +        If the container does not have an active lease, the Blob service creates a
    +        lease on the container and returns a new lease ID.
    +
    +        :param int lease_duration:
    +            Specifies the duration of the lease, in seconds, or negative one
    +            (-1) for a lease that never expires. A non-infinite lease can be
    +            between 15 and 60 seconds. A lease duration cannot be changed
    +            using renew or change. Default is -1 (infinite lease).
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :rtype: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = await self._client.acquire_lease(
    +                timeout=kwargs.pop('timeout', None),
    +                duration=lease_duration,
    +                proposed_lease_id=self.id,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +        self.etag = kwargs.get('etag')  # type: str
    +
    +    @distributed_trace_async
    +    async def renew(self, **kwargs):
    +        # type: (Any) -> None
    +        """Renews the lease.
    +
    +        The lease can be renewed if the lease ID specified in the
    +        lease client matches that associated with the container or blob. Note that
    +        the lease may be renewed even if it has expired as long as the container
    +        or blob has not been leased again since the expiration of that lease. When you
    +        renew a lease, the lease duration clock resets.
    +
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = await self._client.renew_lease(
    +                lease_id=self.id,
    +                timeout=kwargs.pop('timeout', None),
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.etag = response.get('etag')  # type: str
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +
    +    @distributed_trace_async
    +    async def release(self, **kwargs):
    +        # type: (Any) -> None
    +        """Release the lease.
    +
    +        The lease may be released if the client lease id specified matches
    +        that associated with the container or blob. Releasing the lease allows another client
    +        to immediately acquire the lease for the container or blob as soon as the release is complete.
    +
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = await self._client.release_lease(
    +                lease_id=self.id,
    +                timeout=kwargs.pop('timeout', None),
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.etag = response.get('etag')  # type: str
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +
    +    @distributed_trace_async
    +    async def change(self, proposed_lease_id, **kwargs):
    +        # type: (str, Any) -> None
    +        """Change the lease ID of an active lease.
    +
    +        :param str proposed_lease_id:
    +            Proposed lease ID, in a GUID string format. The Blob service returns 400
    +            (Invalid request) if the proposed lease ID is not in the correct format.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword str etag:
    +            An ETag value, or the wildcard character (*). Used to check if the resource has changed,
    +            and act according to the condition specified by the `match_condition` parameter.
    +        :keyword ~azure.core.MatchConditions match_condition:
    +            The match condition to use upon the etag.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: None
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = await self._client.change_lease(
    +                lease_id=self.id,
    +                proposed_lease_id=proposed_lease_id,
    +                timeout=kwargs.pop('timeout', None),
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        self.etag = response.get('etag')  # type: str
    +        self.id = response.get('lease_id')  # type: str
    +        self.last_modified = response.get('last_modified')   # type: datetime
    +
    +    @distributed_trace_async
    +    async def break_lease(self, lease_break_period=None, **kwargs):
    +        # type: (Optional[int], Any) -> int
    +        """Break the lease, if the container or blob has an active lease.
    +
    +        Once a lease is broken, it cannot be renewed. Any authorized request can break the lease;
    +        the request is not required to specify a matching lease ID. When a lease
    +        is broken, the lease break period is allowed to elapse, during which time
    +        no lease operation except break and release can be performed on the container or blob.
    +        When a lease is successfully broken, the response indicates the interval
    +        in seconds until a new lease can be acquired.
    +
    +        :param int lease_break_period:
    +            This is the proposed duration of seconds that the lease
    +            should continue before it is broken, between 0 and 60 seconds. This
    +            break period is only used if it is shorter than the time remaining
    +            on the lease. If longer, the time remaining on the lease is used.
    +            A new lease will not be available before the break period has
    +            expired, but the lease may be held for longer than the break
    +            period. If this header does not appear with a break
    +            operation, a fixed-duration lease breaks after the remaining lease
    +            period elapses, and an infinite lease breaks immediately.
    +        :keyword ~datetime.datetime if_modified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only
    +            if the resource has been modified since the specified time.
    +        :keyword ~datetime.datetime if_unmodified_since:
    +            A DateTime value. Azure expects the date value passed in to be UTC.
    +            If timezone is included, any non-UTC datetimes will be converted to UTC.
    +            If a date is passed in without timezone info, it is assumed to be UTC.
    +            Specify this header to perform the operation only if
    +            the resource has not been modified since the specified date/time.
    +        :keyword int timeout:
    +            The timeout parameter is expressed in seconds.
    +        :return: Approximate time remaining in the lease period, in seconds.
    +        :rtype: int
    +        """
    +        mod_conditions = get_modify_conditions(kwargs)
    +        try:
    +            response = await self._client.break_lease(
    +                timeout=kwargs.pop('timeout', None),
    +                break_period=lease_break_period,
    +                modified_access_conditions=mod_conditions,
    +                cls=return_response_headers,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +        return response.get('lease_time') # type: ignore
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_models.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_models.py
    new file mode 100644
    index 000000000000..312802255d70
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_models.py
    @@ -0,0 +1,226 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=too-few-public-methods, too-many-instance-attributes
    +# pylint: disable=super-init-not-called, too-many-lines
    +
    +from typing import List, Any, TYPE_CHECKING # pylint: disable=unused-import
    +
    +from azure.core.async_paging import AsyncPageIterator, AsyncItemPaged
    +
    +from .._models import BlobProperties, ContainerProperties
    +from .._shared.response_handlers import return_context_and_deserialized, process_storage_error
    +from .._shared.models import DictMixin
    +
    +from .._generated.models import StorageErrorException
    +from .._generated.models import BlobPrefix as GenBlobPrefix
    +from .._generated.models import BlobItem
    +
    +
    +class ContainerPropertiesPaged(AsyncPageIterator):
    +    """An Iterable of Container properties.
    +
    +    :ivar str service_endpoint: The service URL.
    +    :ivar str prefix: A container name prefix being used to filter the list.
    +    :ivar str marker: The continuation token of the current page of results.
    +    :ivar int results_per_page: The maximum number of results retrieved per API call.
    +    :ivar str location_mode: The location mode being used to list results. The available
    +        options include "primary" and "secondary".
    +    :ivar current_page: The current page of listed results.
    +    :vartype current_page: list(~azure.storage.blob.models.ContainerProperties)
    +
    +    :param callable command: Function to retrieve the next page of items.
    +    :param str prefix: Filters the results to return only containers whose names
    +        begin with the specified prefix.
    +    :param int results_per_page: The maximum number of container names to retrieve per
    +        call.
    +    :param str continuation_token: An opaque continuation token.
    +    """
    +    def __init__(self, command, prefix=None, results_per_page=None, continuation_token=None):
    +        super(ContainerPropertiesPaged, self).__init__(
    +            get_next=self._get_next_cb,
    +            extract_data=self._extract_data_cb,
    +            continuation_token=continuation_token or ""
    +        )
    +        self._command = command
    +        self.service_endpoint = None
    +        self.prefix = prefix
    +        self.marker = None
    +        self.results_per_page = results_per_page
    +        self.location_mode = None
    +        self.current_page = []
    +
    +    async def _get_next_cb(self, continuation_token):
    +        try:
    +            return await self._command(
    +                marker=continuation_token or None,
    +                maxresults=self.results_per_page,
    +                cls=return_context_and_deserialized,
    +                use_location=self.location_mode)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    async def _extract_data_cb(self, get_next_return):
    +        self.location_mode, self._response = get_next_return
    +        self.service_endpoint = self._response.service_endpoint
    +        self.prefix = self._response.prefix
    +        self.marker = self._response.marker
    +        self.results_per_page = self._response.max_results
    +        self.current_page = [self._build_item(item) for item in self._response.container_items]
    +
    +        return self._response.next_marker or None, self.current_page
    +
    +    @staticmethod
    +    def _build_item(item):
    +        return ContainerProperties._from_generated(item)  # pylint: disable=protected-access
    +
    +
    +class BlobPropertiesPaged(AsyncPageIterator):
    +    """An Iterable of Blob properties.
    +
    +    :ivar str service_endpoint: The service URL.
    +    :ivar str prefix: A blob name prefix being used to filter the list.
    +    :ivar str marker: The continuation token of the current page of results.
    +    :ivar int results_per_page: The maximum number of results retrieved per API call.
    +    :ivar str location_mode: The location mode being used to list results. The available
    +        options include "primary" and "secondary".
    +    :ivar current_page: The current page of listed results.
    +    :vartype current_page: list(~azure.storage.blob.models.BlobProperties)
    +    :ivar str container: The container that the blobs are listed from.
    +    :ivar str delimiter: A delimiting character used for hierarchy listing.
    +
    +    :param callable command: Function to retrieve the next page of items.
    +    :param str container: The container that the blobs are listed from.
    +    :param str prefix: Filters the results to return only blobs whose names
    +        begin with the specified prefix.
    +    :param int results_per_page: The maximum number of blobs to retrieve per
    +        call.
    +    :param str continuation_token: An opaque continuation token.
    +    :param str delimiter:
    +        Used to capture blobs whose names begin with the same substring up to
    +        the appearance of the delimiter character. The delimiter may be a single
    +        character or a string.
    +    :param location_mode: Specifies the location the request should be sent to.
    +        This mode only applies for RA-GRS accounts which allow secondary read access.
    +        Options include 'primary' or 'secondary'.
    +    """
    +    def __init__(
    +            self, command,
    +            container=None,
    +            prefix=None,
    +            results_per_page=None,
    +            continuation_token=None,
    +            delimiter=None,
    +            location_mode=None):
    +        super(BlobPropertiesPaged, self).__init__(
    +            get_next=self._get_next_cb,
    +            extract_data=self._extract_data_cb,
    +            continuation_token=continuation_token or ""
    +        )
    +        self._command = command
    +        self.service_endpoint = None
    +        self.prefix = prefix
    +        self.marker = None
    +        self.results_per_page = results_per_page
    +        self.container = container
    +        self.delimiter = delimiter
    +        self.current_page = None
    +        self.location_mode = location_mode
    +
    +    async def _get_next_cb(self, continuation_token):
    +        try:
    +            return await self._command(
    +                prefix=self.prefix,
    +                marker=continuation_token or None,
    +                maxresults=self.results_per_page,
    +                cls=return_context_and_deserialized,
    +                use_location=self.location_mode)
    +        except StorageErrorException as error:
    +            process_storage_error(error)
    +
    +    async def _extract_data_cb(self, get_next_return):
    +        self.location_mode, self._response = get_next_return
    +        self.service_endpoint = self._response.service_endpoint
    +        self.prefix = self._response.prefix
    +        self.marker = self._response.marker
    +        self.results_per_page = self._response.max_results
    +        self.container = self._response.container_name
    +        self.current_page = [self._build_item(item) for item in self._response.segment.blob_items]
    +
    +        return self._response.next_marker or None, self.current_page
    +
    +    def _build_item(self, item):
    +        if isinstance(item, BlobProperties):
    +            return item
    +        if isinstance(item, BlobItem):
    +            blob = BlobProperties._from_generated(item)  # pylint: disable=protected-access
    +            blob.container = self.container
    +            return blob
    +        return item
    +
    +
    +class BlobPrefix(AsyncItemPaged, DictMixin):
    +    """An Iterable of Blob properties.
    +
    +    Returned from walk_blobs when a delimiter is used.
    +    Can be thought of as a virtual blob directory.
    +
    +    :ivar str name: The prefix, or "directory name" of the blob.
    +    :ivar str prefix: A blob name prefix being used to filter the list.
    +    :ivar int results_per_page: The maximum number of results retrieved per API call.
    +    :ivar str marker: The continuation token of the current page of results.
    +    :ivar str location_mode: The location mode being used to list results. The available
    +        options include "primary" and "secondary".
    +    :ivar current_page: The current page of listed results.
    +    :vartype current_page: list(~azure.storage.blob.models.BlobProperties)
    +    :ivar str container: The container that the blobs are listed from.
    +    :ivar str delimiter: A delimiting character used for hierarchy listing.
    +    :param callable command: Function to retrieve the next page of items.
    +    :param str prefix: Filters the results to return only blobs whose names
    +        begin with the specified prefix.
    +    :param int results_per_page: The maximum number of blobs to retrieve per
    +        call.
    +    :param str marker: An opaque continuation token.
    +    :param str delimiter:
    +        Used to capture blobs whose names begin with the same substring up to
    +        the appearance of the delimiter character. The delimiter may be a single
    +        character or a string.
    +    :param location_mode: Specifies the location the request should be sent to.
    +        This mode only applies for RA-GRS accounts which allow secondary read access.
    +        Options include 'primary' or 'secondary'.
    +    """
    +    def __init__(self, *args, **kwargs):
    +        super(BlobPrefix, self).__init__(*args, page_iterator_class=BlobPrefixPaged, **kwargs)
    +        self.name = kwargs.get('prefix')
    +        self.prefix = kwargs.get('prefix')
    +        self.results_per_page = kwargs.get('results_per_page')
    +        self.container = kwargs.get('container')
    +        self.delimiter = kwargs.get('delimiter')
    +        self.location_mode = kwargs.get('location_mode')
    +
    +
    +class BlobPrefixPaged(BlobPropertiesPaged):
    +    def __init__(self, *args, **kwargs):
    +        super(BlobPrefixPaged, self).__init__(*args, **kwargs)
    +        self.name = self.prefix
    +
    +    async def _extract_data_cb(self, get_next_return):
    +        continuation_token, _ = await super(BlobPrefixPaged, self)._extract_data_cb(get_next_return)
    +        self.current_page = self._response.segment.blob_prefixes + self._response.segment.blob_items
    +        self.current_page = [self._build_item(item) for item in self.current_page]
    +        self.delimiter = self._response.delimiter
    +
    +        return continuation_token, self.current_page
    +
    +    def _build_item(self, item):
    +        item = super(BlobPrefixPaged, self)._build_item(item)
    +        if isinstance(item, GenBlobPrefix):
    +            return BlobPrefix(
    +                self._command,
    +                container=self.container,
    +                prefix=item.name,
    +                results_per_page=self.results_per_page,
    +                location_mode=self.location_mode)
    +        return item
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_upload_helpers.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_upload_helpers.py
    new file mode 100644
    index 000000000000..b936ee6cfc59
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_vendor/storage/blob/aio/_upload_helpers.py
    @@ -0,0 +1,256 @@
    +# -------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +# --------------------------------------------------------------------------
    +# pylint: disable=no-self-use
    +
    +from io import SEEK_SET, UnsupportedOperation
    +from typing import Optional, Union, Any, TypeVar, TYPE_CHECKING # pylint: disable=unused-import
    +
    +import six
    +from azure.core.exceptions import ResourceModifiedError
    +
    +from .._shared.response_handlers import (
    +    process_storage_error,
    +    return_response_headers)
    +from .._shared.uploads_async import (
    +    upload_data_chunks,
    +    upload_substream_blocks,
    +    BlockBlobChunkUploader,
    +    PageBlobChunkUploader,
    +    AppendBlobChunkUploader)
    +from .._shared.encryption import generate_blob_encryption_data, encrypt_blob
    +from .._generated.models import (
    +    StorageErrorException,
    +    BlockLookupList,
    +    AppendPositionAccessConditions,
    +    ModifiedAccessConditions,
    +)
    +from .._upload_helpers import _convert_mod_error, _any_conditions
    +
    +if TYPE_CHECKING:
    +    from datetime import datetime # pylint: disable=unused-import
    +    BlobLeaseClient = TypeVar("BlobLeaseClient")
    +
    +
    +async def upload_block_blob(  # pylint: disable=too-many-locals
    +        client=None,
    +        data=None,
    +        stream=None,
    +        length=None,
    +        overwrite=None,
    +        headers=None,
    +        validate_content=None,
    +        max_concurrency=None,
    +        blob_settings=None,
    +        encryption_options=None,
    +        **kwargs):
    +    try:
    +        if not overwrite and not _any_conditions(**kwargs):
    +            kwargs['modified_access_conditions'].if_none_match = '*'
    +        adjusted_count = length
    +        if (encryption_options.get('key') is not None) and (adjusted_count is not None):
    +            adjusted_count += (16 - (length % 16))
    +        blob_headers = kwargs.pop('blob_headers', None)
    +        tier = kwargs.pop('standard_blob_tier', None)
    +
    +        # Do single put if the size is smaller than config.max_single_put_size
    +        if adjusted_count is not None and (adjusted_count < blob_settings.max_single_put_size):
    +            try:
    +                data = data.read(length)
    +                if not isinstance(data, six.binary_type):
    +                    raise TypeError('Blob data should be of type bytes.')
    +            except AttributeError:
    +                pass
    +            if encryption_options.get('key'):
    +                encryption_data, data = encrypt_blob(data, encryption_options['key'])
    +                headers['x-ms-meta-encryptiondata'] = encryption_data
    +            return await client.upload(
    +                data,
    +                content_length=adjusted_count,
    +                blob_http_headers=blob_headers,
    +                headers=headers,
    +                cls=return_response_headers,
    +                validate_content=validate_content,
    +                data_stream_total=adjusted_count,
    +                upload_stream_current=0,
    +                tier=tier.value if tier else None,
    +                **kwargs)
    +
    +        use_original_upload_path = blob_settings.use_byte_buffer or \
    +            validate_content or encryption_options.get('required') or \
    +            blob_settings.max_block_size < blob_settings.min_large_block_upload_threshold or \
    +            hasattr(stream, 'seekable') and not stream.seekable() or \
    +            not hasattr(stream, 'seek') or not hasattr(stream, 'tell')
    +
    +        if use_original_upload_path:
    +            if encryption_options.get('key'):
    +                cek, iv, encryption_data = generate_blob_encryption_data(encryption_options['key'])
    +                headers['x-ms-meta-encryptiondata'] = encryption_data
    +                encryption_options['cek'] = cek
    +                encryption_options['vector'] = iv
    +            block_ids = await upload_data_chunks(
    +                service=client,
    +                uploader_class=BlockBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                max_concurrency=max_concurrency,
    +                stream=stream,
    +                validate_content=validate_content,
    +                encryption_options=encryption_options,
    +                **kwargs
    +            )
    +        else:
    +            block_ids = await upload_substream_blocks(
    +                service=client,
    +                uploader_class=BlockBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                max_concurrency=max_concurrency,
    +                stream=stream,
    +                validate_content=validate_content,
    +                **kwargs
    +            )
    +
    +        block_lookup = BlockLookupList(committed=[], uncommitted=[], latest=[])
    +        block_lookup.latest = block_ids
    +        return await client.commit_block_list(
    +            block_lookup,
    +            blob_http_headers=blob_headers,
    +            cls=return_response_headers,
    +            validate_content=validate_content,
    +            headers=headers,
    +            tier=tier.value if tier else None,
    +            **kwargs)
    +    except StorageErrorException as error:
    +        try:
    +            process_storage_error(error)
    +        except ResourceModifiedError as mod_error:
    +            if not overwrite:
    +                _convert_mod_error(mod_error)
    +            raise
    +
    +
    +async def upload_page_blob(
    +        client=None,
    +        stream=None,
    +        length=None,
    +        overwrite=None,
    +        headers=None,
    +        validate_content=None,
    +        max_concurrency=None,
    +        blob_settings=None,
    +        encryption_options=None,
    +        **kwargs):
    +    try:
    +        if not overwrite and not _any_conditions(**kwargs):
    +            kwargs['modified_access_conditions'].if_none_match = '*'
    +        if length is None or length < 0:
    +            raise ValueError("A content length must be specified for a Page Blob.")
    +        if length % 512 != 0:
    +            raise ValueError("Invalid page blob size: {0}. "
    +                             "The size must be aligned to a 512-byte boundary.".format(length))
    +        if kwargs.get('premium_page_blob_tier'):
    +            premium_page_blob_tier = kwargs.pop('premium_page_blob_tier')
    +            try:
    +                headers['x-ms-access-tier'] = premium_page_blob_tier.value
    +            except AttributeError:
    +                headers['x-ms-access-tier'] = premium_page_blob_tier
    +        if encryption_options and encryption_options.get('data'):
    +            headers['x-ms-meta-encryptiondata'] = encryption_options['data']
    +        response = await client.create(
    +            content_length=0,
    +            blob_content_length=length,
    +            blob_sequence_number=None,
    +            blob_http_headers=kwargs.pop('blob_headers', None),
    +            cls=return_response_headers,
    +            headers=headers,
    +            **kwargs)
    +        if length == 0:
    +            return response
    +
    +        kwargs['modified_access_conditions'] = ModifiedAccessConditions(if_match=response['etag'])
    +        return await upload_data_chunks(
    +            service=client,
    +            uploader_class=PageBlobChunkUploader,
    +            total_size=length,
    +            chunk_size=blob_settings.max_page_size,
    +            stream=stream,
    +            max_concurrency=max_concurrency,
    +            validate_content=validate_content,
    +            encryption_options=encryption_options,
    +            **kwargs)
    +
    +    except StorageErrorException as error:
    +        try:
    +            process_storage_error(error)
    +        except ResourceModifiedError as mod_error:
    +            if not overwrite:
    +                _convert_mod_error(mod_error)
    +            raise
    +
    +
    +async def upload_append_blob(  # pylint: disable=unused-argument
    +        client=None,
    +        stream=None,
    +        length=None,
    +        overwrite=None,
    +        headers=None,
    +        validate_content=None,
    +        max_concurrency=None,
    +        blob_settings=None,
    +        encryption_options=None,
    +        **kwargs):
    +    try:
    +        if length == 0:
    +            return {}
    +        blob_headers = kwargs.pop('blob_headers', None)
    +        append_conditions = AppendPositionAccessConditions(
    +            max_size=kwargs.pop('maxsize_condition', None),
    +            append_position=None)
    +        try:
    +            if overwrite:
    +                await client.create(
    +                    content_length=0,
    +                    blob_http_headers=blob_headers,
    +                    headers=headers,
    +                    **kwargs)
    +            return await upload_data_chunks(
    +                service=client,
    +                uploader_class=AppendBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                stream=stream,
    +                max_concurrency=max_concurrency,
    +                validate_content=validate_content,
    +                append_position_access_conditions=append_conditions,
    +                **kwargs)
    +        except StorageErrorException as error:
    +            if error.response.status_code != 404:
    +                raise
    +            # rewind the request body if it is a stream
    +            if hasattr(stream, 'read'):
    +                try:
    +                    # attempt to rewind the body to the initial position
    +                    stream.seek(0, SEEK_SET)
    +                except UnsupportedOperation:
    +                    # if body is not seekable, then retry would not work
    +                    raise error
    +            await client.create(
    +                content_length=0,
    +                blob_http_headers=blob_headers,
    +                headers=headers,
    +                **kwargs)
    +            return await upload_data_chunks(
    +                service=client,
    +                uploader_class=AppendBlobChunkUploader,
    +                total_size=length,
    +                chunk_size=blob_settings.max_block_size,
    +                stream=stream,
    +                max_concurrency=max_concurrency,
    +                validate_content=validate_content,
    +                append_position_access_conditions=append_conditions,
    +                **kwargs)
    +    except StorageErrorException as error:
    +        process_storage_error(error)
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_version.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_version.py
    index 010063f9dd93..373777a19de0 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_version.py
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/azure/eventhub/extensions/checkpointstoreblob/_version.py
    @@ -3,4 +3,4 @@
     # Licensed under the MIT License.
     # ------------------------------------
     
    -VERSION = "1.0.1"
    +VERSION = "1.1.1"
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/dev_requirements.txt b/sdk/eventhub/azure-eventhub-checkpointstoreblob/dev_requirements.txt
    index 5bb86ed77b9a..8b068466e84b 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob/dev_requirements.txt
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/dev_requirements.txt
    @@ -1,5 +1,2 @@
     -e ../../../tools/azure-sdk-tools
    -../../core/azure-core
    --e ../../storage/azure-storage-blob
     ../azure-eventhub
    -
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/samples/event_processor_blob_storage_example.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/samples/event_processor_blob_storage_example.py
    index d57999a037af..53c685b02400 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob/samples/event_processor_blob_storage_example.py
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/samples/event_processor_blob_storage_example.py
    @@ -17,7 +17,7 @@ def on_event(partition_context, event):
     if __name__ == '__main__':
         checkpoint_store = BlobCheckpointStore.from_connection_string(
             STORAGE_CONNECTION_STR,
    -        container_name=BLOB_CONTAINER_NAME
    +        container_name=BLOB_CONTAINER_NAME,
         )
         client = EventHubConsumerClient.from_connection_string(
             CONNECTION_STR,
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/samples/event_processor_blob_storage_example_with_storage_api_version.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/samples/event_processor_blob_storage_example_with_storage_api_version.py
    new file mode 100644
    index 000000000000..ed802d4cfe73
    --- /dev/null
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/samples/event_processor_blob_storage_example_with_storage_api_version.py
    @@ -0,0 +1,33 @@
    +import os
    +from azure.eventhub import EventHubConsumerClient
    +from azure.eventhub.extensions.checkpointstoreblob import BlobCheckpointStore
    +
    +CONNECTION_STR = os.environ["EVENT_HUB_CONN_STR"]
    +STORAGE_CONNECTION_STR = os.environ["AZURE_STORAGE_CONN_STR"]
    +BLOB_CONTAINER_NAME = "your-blob-container-name"  # Please make sure the blob container resource exists.
    +STORAGE_SERVICE_API_VERSION = "2017-11-09"
    +
    +
    +def on_event(partition_context, event):
    +    # Put your code here.
    +    # Avoid time-consuming operations.
    +    print(event)
    +    partition_context.update_checkpoint(event)
    +
    +
    +if __name__ == '__main__':
    +    checkpoint_store = BlobCheckpointStore.from_connection_string(
    +        STORAGE_CONNECTION_STR,
    +        container_name=BLOB_CONTAINER_NAME,
    +        api_version=STORAGE_SERVICE_API_VERSION
    +    )
    +    client = EventHubConsumerClient.from_connection_string(
    +        CONNECTION_STR,
    +        "$Default",
    +        checkpoint_store=checkpoint_store
    +    )
    +
    +    try:
    +        client.receive(on_event)
    +    except KeyboardInterrupt:
    +        client.close()
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/setup.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/setup.py
    index 40f6e926ed84..82d1c0543ad8 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob/setup.py
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/setup.py
    @@ -53,7 +53,7 @@
         author_email='azpysdkhelp@microsoft.com',
         url='https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/eventhub/azure-eventhub-checkpointstoreblob',
         classifiers=[
    -        'Development Status :: 5 - Production/Stable',
    +        "Development Status :: 5 - Production/Stable",
             'Programming Language :: Python',
             'Programming Language :: Python :: 2',
             'Programming Language :: Python :: 2.7',
    @@ -67,10 +67,18 @@
         zip_safe=False,
         packages=find_packages(exclude=exclude_packages),
         install_requires=[
    -        'azure-storage-blob<13.0.0,>=12.0.0',
    +        # dependencies for the vendored storage blob
    +        "azure-core<2.0.0,>=1.2.2",
    +        "msrest>=0.6.10",
    +        "cryptography>=2.1.4",
    +        # end of dependencies for the vendored storage blob
             'azure-eventhub<6.0.0,>=5.0.0',
         ],
         extras_require={
    -
    -    }
    +        # dependencies for the vendored storage blob
    +        ":python_version<'3.0'": ['futures'],
    +        ":python_version<'3.4'": ['enum34>=1.0.4'],
    +        ":python_version<'3.5'": ["typing"]
    +        # end of dependencies for the vendored storage blob
    +    },
     )
    diff --git a/sdk/eventhub/azure-eventhub-checkpointstoreblob/tests/test_storage_blob_partition_manager.py b/sdk/eventhub/azure-eventhub-checkpointstoreblob/tests/test_storage_blob_partition_manager.py
    index 8c3701dcfee3..fe98208bc0c3 100644
    --- a/sdk/eventhub/azure-eventhub-checkpointstoreblob/tests/test_storage_blob_partition_manager.py
    +++ b/sdk/eventhub/azure-eventhub-checkpointstoreblob/tests/test_storage_blob_partition_manager.py
    @@ -11,18 +11,13 @@
     import warnings
     
     from azure.eventhub.extensions.checkpointstoreblob import BlobCheckpointStore
    -
    +from azure.eventhub.extensions.checkpointstoreblob._vendor.storage.blob import BlobServiceClient, ContainerClient
     
     def get_live_storage_blob_client():
         try:
             storage_connection_str = os.environ['AZURE_STORAGE_CONN_STR']
         except KeyError:
             return None, None
    -    try:
    -        from azure.storage.blob import BlobServiceClient
    -        from azure.storage.blob import ContainerClient
    -    except ImportError or ModuleNotFoundError:
    -        return None, None
     
         container_name = str(uuid.uuid4())
         blob_service_client = BlobServiceClient.from_connection_string(storage_connection_str)
    @@ -33,7 +28,6 @@ def get_live_storage_blob_client():
     def remove_live_storage_blob_client(container_name):
         try:
             storage_connection_str = os.environ['AZURE_STORAGE_CONN_STR']
    -        from azure.storage.blob import BlobServiceClient
             blob_service_client = BlobServiceClient.from_connection_string(storage_connection_str)
             blob_service_client.delete_container(container_name)
         except:
    diff --git a/sdk/eventhub/azure-eventhub/CHANGELOG.md b/sdk/eventhub/azure-eventhub/CHANGELOG.md
    index 5787da31cfbb..8d3353c45ff4 100644
    --- a/sdk/eventhub/azure-eventhub/CHANGELOG.md
    +++ b/sdk/eventhub/azure-eventhub/CHANGELOG.md
    @@ -1,10 +1,15 @@
     # Release History
     
    -## 5.0.1 (Unreleased)
    +## 5.0.2 (Unreleased)
    +
    +
    +## 5.0.1 (2020-03-09)
     
     **Bug fixes**
     
    -- Fixed a bug that `azure.eventhub.EventHubConsumerClient.receive()` doesn't call error handler callback on_error #9660
    +- Fixed a bug that swallowed errors when receiving events with `azure.eventhub.EventHubConsumerClient`  #9660
    +- Fixed a bug that caused `get_eventhub_properties`, `get_partition_ids`, and `get_partition_properties` to raise
    +an error on Azure Stack #9920 
     
     ## 5.0.0 (2020-01-13)
     
    @@ -322,4 +327,4 @@ Version 5.0.0b1 is a preview of our efforts to create a client library that is u
     
     - Swapped out Proton dependency for uAMQP.
     
    -![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python/sdk/eventhub/azure-eventhub/HISTORY.png)
    \ No newline at end of file
    +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python/sdk/eventhub/azure-eventhub/HISTORY.png)
    diff --git a/sdk/eventhub/azure-eventhub/README.md b/sdk/eventhub/azure-eventhub/README.md
    index cba5a2a7ec63..635b108273c3 100644
    --- a/sdk/eventhub/azure-eventhub/README.md
    +++ b/sdk/eventhub/azure-eventhub/README.md
    @@ -13,21 +13,13 @@ The Azure Event Hubs client library allows for publishing and consuming of Azure
     - Observe interesting operations and interactions happening within your business or other ecosystem, allowing loosely coupled systems to interact without the need to bind them together.
     - Receive events from one or more publishers, transform them to better meet the needs of your ecosystem, then publish the transformed events to a new stream for consumers to observe.
     
    -[Source code](./) | [Package (PyPi)](https://pypi.org/project/azure-eventhub/5.0.0) | [API reference documentation](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-eventhub/5.0.0/azure.eventhub.html) | [Product documentation](https://docs.microsoft.com/en-us/azure/event-hubs/)
    +[Source code](./) | [Package (PyPi)](https://pypi.org/project/azure-eventhub/5.0.1) | [API reference documentation](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-eventhub/5.0.1/azure.eventhub.html) | [Product documentation](https://docs.microsoft.com/en-us/azure/event-hubs/)
     
     ## Getting started
     
    -### Install the package
    -
    -Install the Azure Event Hubs client library for Python with pip:
    -
    -```
    -$ pip install azure-eventhub
    -```
    +### Prerequisites
     
    -**Prerequisites**
    -
    -- Python 2.7, 3.5 or later.
    +- Python 2.7, 3.5.3 or later.
     - **Microsoft Azure Subscription:**  To use Azure services, including Azure Event Hubs, you'll need a subscription.
     If you do not have an existing Azure account, you may sign up for a free trial or use your MSDN subscriber benefits when you [create an account](https://account.windowsazure.com/Home/Index).
     
    @@ -36,6 +28,14 @@ If you are not familiar with creating Azure resources, you may wish to follow th
     for [creating an Event Hub using the Azure portal](https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-create).
     There, you can also find detailed instructions for using the Azure CLI, Azure PowerShell, or Azure Resource Manager (ARM) templates to create an Event Hub.
     
    +### Install the package
    +
    +Install the Azure Event Hubs client library for Python with pip:
    +
    +```
    +$ pip install azure-eventhub
    +```
    +
     ### Authenticate the client
     
     Interaction with Event Hubs starts with an instance of EventHubConsumerClient or EventHubProducerClient class. You need either the host name, SAS/AAD credential and event hub name or a connection string to instantiate the client object.
    @@ -351,6 +351,12 @@ The Event Hubs APIs generate the following exceptions in azure.eventhub.exceptio
     - **OperationTimeoutError:** EventHubConsumer.send() times out.
     - **EventHubError:** All other Eventhubs related errors. It is also the root error class of all the errors described above.
     
    +### Logging
    +
    +- Enable `azure.eventhub` logger to collect traces from the library.
    +- Enable `uamqp` logger to collect traces from the underlying uAMQP library.
    +- Enable AMQP frame level trace by setting `logging_enable=True` when creating the client.
    +
     ## Next steps
     
     ### More sample code
    @@ -359,13 +365,7 @@ Please take a look at the [samples](./samples) directory for detailed examples o
     
     ### Documentation
     
    -Reference documentation is available [here](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-eventhub/5.0.0/azure.eventhub.html).
    -
    -### Logging
    -
    -- Enable `azure.eventhub` logger to collect traces from the library.
    -- Enable `uamqp` logger to collect traces from the underlying uAMQP library.
    -- Enable AMQP frame level trace by setting `logging_enable=True` when creating the client.
    +Reference documentation is available [here](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-eventhub/5.0.1/azure.eventhub.html).
     
     ### Provide Feedback
     
    diff --git a/sdk/eventhub/azure-eventhub/azure/eventhub/_consumer.py b/sdk/eventhub/azure-eventhub/azure/eventhub/_consumer.py
    index b5e58ae6e803..6203ae636201 100644
    --- a/sdk/eventhub/azure-eventhub/azure/eventhub/_consumer.py
    +++ b/sdk/eventhub/azure-eventhub/azure/eventhub/_consumer.py
    @@ -7,7 +7,7 @@
     import uuid
     import logging
     from collections import deque
    -from typing import TYPE_CHECKING, Callable, Dict, Optional, Any, Deque
    +from typing import TYPE_CHECKING, Callable, Dict, Optional, Any
     
     import uamqp
     from uamqp import types, errors, utils
    @@ -120,7 +120,7 @@ def __init__(self, client, source, **kwargs):
             self._track_last_enqueued_event_properties = (
                 track_last_enqueued_event_properties
             )
    -        self._message_buffer = deque()  # type: Deque[uamqp.Message]
    +        self._message_buffer = deque()  # type: ignore
             self._last_received_event = None  # type: Optional[EventData]
     
         def _create_handler(self, auth):
    diff --git a/sdk/eventhub/azure-eventhub/azure/eventhub/_eventprocessor/event_processor.py b/sdk/eventhub/azure-eventhub/azure/eventhub/_eventprocessor/event_processor.py
    index 05efeae54f90..96adae779e26 100644
    --- a/sdk/eventhub/azure-eventhub/azure/eventhub/_eventprocessor/event_processor.py
    +++ b/sdk/eventhub/azure-eventhub/azure/eventhub/_eventprocessor/event_processor.py
    @@ -2,6 +2,7 @@
     # Copyright (c) Microsoft Corporation. All rights reserved.
     # Licensed under the MIT License. See License.txt in the project root for license information.
     # --------------------------------------------------------------------------------------------
    +import random
     import uuid
     import logging
     import time
    @@ -224,6 +225,8 @@ def _load_balancing(self):
     
             """
             while self._running:
    +            random_jitter = self._load_balancing_interval * random.random() * 0.2
    +            load_balancing_interval = self._load_balancing_interval + random_jitter
                 try:
                     claimed_partition_ids = self._ownership_manager.claim_ownership()
                     if claimed_partition_ids:
    @@ -266,11 +269,11 @@ def _load_balancing(self):
                         self._eventhub_name,
                         self._consumer_group,
                         err,
    -                    self._load_balancing_interval
    +                    load_balancing_interval
                     )
                     self._process_error(None, err)  # type: ignore
     
    -            time.sleep(self._load_balancing_interval)
    +            time.sleep(load_balancing_interval)
     
         def _close_consumer(self, partition_id, consumer, reason):
             # type: (str, EventHubConsumer, CloseReason) -> None
    diff --git a/sdk/eventhub/azure-eventhub/azure/eventhub/_version.py b/sdk/eventhub/azure-eventhub/azure/eventhub/_version.py
    index aeddf5ca4e16..6c807fdc869b 100644
    --- a/sdk/eventhub/azure-eventhub/azure/eventhub/_version.py
    +++ b/sdk/eventhub/azure-eventhub/azure/eventhub/_version.py
    @@ -3,4 +3,4 @@
     # Licensed under the MIT License.
     # ------------------------------------
     
    -VERSION = "5.0.1"
    +VERSION = "5.0.2"
    diff --git a/sdk/eventhub/azure-eventhub/azure/eventhub/aio/_eventprocessor/event_processor.py b/sdk/eventhub/azure-eventhub/azure/eventhub/aio/_eventprocessor/event_processor.py
    index 4095e2bbaf73..3c6329ae1beb 100644
    --- a/sdk/eventhub/azure-eventhub/azure/eventhub/aio/_eventprocessor/event_processor.py
    +++ b/sdk/eventhub/azure-eventhub/azure/eventhub/aio/_eventprocessor/event_processor.py
    @@ -2,6 +2,7 @@
     # Copyright (c) Microsoft Corporation. All rights reserved.
     # Licensed under the MIT License. See License.txt in the project root for license information.
     # --------------------------------------------------------------------------------------------
    +import random
     from typing import (
         Dict,
         Callable,
    @@ -310,6 +311,8 @@ async def start(self) -> None:
             if not self._running:
                 self._running = True
                 while self._running:
    +                random_jitter = self._load_balancing_interval * random.random() * 0.2
    +                load_balancing_interval = self._load_balancing_interval + random_jitter
                     try:
                         claimed_partition_ids = (
                             await self._ownership_manager.claim_ownership()
    @@ -355,11 +358,11 @@ async def start(self) -> None:
                             self._eventhub_name,
                             self._consumer_group,
                             err,
    -                        self._load_balancing_interval
    +                        load_balancing_interval
                         )
                         await self._process_error(None, err)  # type: ignore
     
    -                await asyncio.sleep(self._load_balancing_interval, loop=self._loop)
    +                await asyncio.sleep(load_balancing_interval, loop=self._loop)
     
         async def stop(self) -> None:
             """Stop the EventProcessor.
    diff --git a/sdk/eventhub/azure-eventhub/setup.py b/sdk/eventhub/azure-eventhub/setup.py
    index 5efbc5504e34..8c0c14dbd1f8 100644
    --- a/sdk/eventhub/azure-eventhub/setup.py
    +++ b/sdk/eventhub/azure-eventhub/setup.py
    @@ -54,7 +54,7 @@
         author_email='azpysdkhelp@microsoft.com',
         url='https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/eventhub/azure-eventhub',
         classifiers=[
    -        'Development Status :: 5 - Production/Stable',
    +        "Development Status :: 5 - Production/Stable",
             'Programming Language :: Python',
             'Programming Language :: Python :: 2',
             'Programming Language :: Python :: 2.7',
    diff --git a/sdk/eventhub/azure-eventhub/tests/livetest/synctests/test_eventprocessor.py b/sdk/eventhub/azure-eventhub/tests/livetest/synctests/test_eventprocessor.py
    index 817823bd7c15..01e338cb6c52 100644
    --- a/sdk/eventhub/azure-eventhub/tests/livetest/synctests/test_eventprocessor.py
    +++ b/sdk/eventhub/azure-eventhub/tests/livetest/synctests/test_eventprocessor.py
    @@ -213,7 +213,7 @@ def close(self):
         thread.join()
         assert ep_partitions == 2
         assert assert_map["initialize"] == "called"
    -    assert event_map['0'] > 1 and event_map['1'] > 1
    +    assert event_map['0'] >= 1 and event_map['1'] >= 1
         assert assert_map["checkpoint"] == "checkpoint called"
         assert "error" not in assert_map
         assert assert_map["close_reason"] == CloseReason.SHUTDOWN
    diff --git a/sdk/healthcareapis/azure-mgmt-healthcareapis/tests/recordings/test_cli_mgmt_healthcareapis.test_healthcareapis.yaml b/sdk/healthcareapis/azure-mgmt-healthcareapis/tests/recordings/test_cli_mgmt_healthcareapis.test_healthcareapis.yaml
    index 2a3c43211db6..b73c8a64374f 100644
    --- a/sdk/healthcareapis/azure-mgmt-healthcareapis/tests/recordings/test_cli_mgmt_healthcareapis.test_healthcareapis.yaml
    +++ b/sdk/healthcareapis/azure-mgmt-healthcareapis/tests/recordings/test_cli_mgmt_healthcareapis.test_healthcareapis.yaml
    @@ -1,59 +1,6 @@
     interactions:
     - request:
    -    body: '{"name": "myhcasrvanxy", "type": "Microsoft.HealthcareApis/services"}'
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      Content-Length:
    -      - '69'
    -      Content-Type:
    -      - application/json; charset=utf-8
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -      accept-language:
    -      - en-US
    -    method: POST
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/checkNameAvailability?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"nameAvailable":true}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '22'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Mon, 04 Nov 2019 23:46:25 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - fa4dd19f4a2d854bbf7d2893ef7de314
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: '{"kind": "fhir-R4", "location": "westus2", "properties": {"accessPolicies":
    +    body: '{"kind": "fhir", "location": "eastus", "properties": {"accessPolicies":
           [{"objectId": "c487e7d1-3210-41a3-8ccc-e9372b78da47"}, {"objectId": "5b307da8-43d4-492b-8b66-b0294ade872f"}],
           "cosmosDbConfiguration": {"offerThroughput": 1000}, "authenticationConfiguration":
           {"authority": "https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc",
    @@ -68,32 +15,32 @@ interactions:
           Connection:
           - keep-alive
           Content-Length:
    -      - '599'
    +      - '595'
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
           accept-language:
           - en-US
         method: PUT
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myhcasrvanxy?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myapimrndxyzabc?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myhcasrvanxy","name":"myhcasrvanxy","type":"Microsoft.HealthcareApis/services","etag":"\"21006231-0000-0400-0000-5dc0b8560000\"","location":"westus2","kind":"fhir-R4","properties":{"secondaryLocations":null,"accessPolicies":[{"objectId":"c487e7d1-3210-41a3-8ccc-e9372b78da47"},{"objectId":"5b307da8-43d4-492b-8b66-b0294ade872f"}],"cosmosDbConfiguration":{"offerThroughput":1000},"authenticationConfiguration":{"authority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","audience":"https://azurehealthcareapis.com","smartProxyEnabled":true},"corsConfiguration":{"origins":["*"],"headers":["*"],"methods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"maxAge":1440,"allowCredentials":false},"provisioningState":"Creating"}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myapimrndxyzabc","name":"myapimrndxyzabc","type":"Microsoft.HealthcareApis/services","etag":"\"12000fbc-0000-0400-0000-5e5743540000\"","location":"eastus","kind":"fhir","properties":{"secondaryLocations":null,"accessPolicies":[{"objectId":"c487e7d1-3210-41a3-8ccc-e9372b78da47"},{"objectId":"5b307da8-43d4-492b-8b66-b0294ade872f"}],"cosmosDbConfiguration":{"offerThroughput":1000},"authenticationConfiguration":{"authority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","audience":"https://azurehealthcareapis.com","smartProxyEnabled":true},"corsConfiguration":{"origins":["*"],"headers":["*"],"methods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"maxAge":1440,"allowCredentials":false},"exportConfiguration":{"storageAccountName":null},"provisioningState":"Creating"}}'
         headers:
           azure-asyncoperation:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
           cache-control:
           - no-cache
           content-length:
    -      - '924'
    +      - '976'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:46:31 GMT
    +      - Thu, 27 Feb 2020 04:19:35 GMT
           etag:
    -      - '"21006231-0000-0400-0000-5dc0b8560000"'
    +      - '"12000fbc-0000-0400-0000-5e5743540000"'
           expires:
           - '-1'
           pragma:
    @@ -107,9 +54,9 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-ratelimit-remaining-subscription-writes:
    -      - '1198'
    +      - '1199'
           x-request-id:
    -      - 076a2dd59c25894895792f54c20e96ad
    +      - 8b0c7a3dc7e25549ac6a4739323d6aa9
         status:
           code: 201
           message: Created
    @@ -123,24 +70,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Running","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:47:15 GMT
    +      - Thu, 27 Feb 2020 04:20:05 GMT
           expires:
           - '-1'
           pragma:
    @@ -158,7 +103,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 5c9feda379ded14e9b2f1d5b45ff7ace
    +      - 526ab1a4380f4945a51224607eea9814
         status:
           code: 200
           message: OK
    @@ -172,24 +117,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Running","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:47:44 GMT
    +      - Thu, 27 Feb 2020 04:20:35 GMT
           expires:
           - '-1'
           pragma:
    @@ -207,7 +150,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 2e4171aa1fbd174c89574754ad03adf0
    +      - c2927b4010816e48b9a3c057e2b469f2
         status:
           code: 200
           message: OK
    @@ -221,24 +164,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Running","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:48:15 GMT
    +      - Thu, 27 Feb 2020 04:21:06 GMT
           expires:
           - '-1'
           pragma:
    @@ -256,7 +197,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 9888c4f73ed3a347a5163ee28ecb1ecb
    +      - 7128e548f4bfb942b0fbdcf961df9caf
         status:
           code: 200
           message: OK
    @@ -270,24 +211,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Running","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:48:46 GMT
    +      - Thu, 27 Feb 2020 04:21:37 GMT
           expires:
           - '-1'
           pragma:
    @@ -305,7 +244,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - e2db32a6b9cb034cbbc0e0dbc35a04a2
    +      - bc824480a48e3e4ab3e10ecc462b424e
         status:
           code: 200
           message: OK
    @@ -319,24 +258,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Running","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:49:17 GMT
    +      - Thu, 27 Feb 2020 04:22:08 GMT
           expires:
           - '-1'
           pragma:
    @@ -354,7 +291,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - b5a61fee5c15cb4c8755c46850993bb5
    +      - 585878441395d84aa599086161d634f3
         status:
           code: 200
           message: OK
    @@ -368,24 +305,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Running","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:49:47 GMT
    +      - Thu, 27 Feb 2020 04:23:40 GMT
           expires:
           - '-1'
           pragma:
    @@ -403,7 +338,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 15a0d968f73e8743958b4e4e284e26a6
    +      - ddec1a223a5d70449cd84d80d57f16c0
         status:
           code: 200
           message: OK
    @@ -417,24 +352,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Running","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:50:18 GMT
    +      - Thu, 27 Feb 2020 04:24:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -452,7 +385,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 4c5c64143c59fa4980e54e3b5ef1ba29
    +      - 0a6aa59c18be644aa2549f13fff3cb40
         status:
           code: 200
           message: OK
    @@ -466,24 +399,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Running","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:50:48 GMT
    +      - Thu, 27 Feb 2020 04:24:41 GMT
           expires:
           - '-1'
           pragma:
    @@ -501,7 +432,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - c75fb2f9f8084342ab61685148033d8f
    +      - 26b687880072a847ab25f3361d06a2a9
         status:
           code: 200
           message: OK
    @@ -515,24 +446,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Running","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:51:19 GMT
    +      - Thu, 27 Feb 2020 04:25:12 GMT
           expires:
           - '-1'
           pragma:
    @@ -550,7 +479,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 984ae9410ef0184b981bd36780cdfd10
    +      - d05eec661c8e974d94d7dff110d7569e
         status:
           code: 200
           message: OK
    @@ -564,24 +493,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Running","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:51:49 GMT
    +      - Thu, 27 Feb 2020 04:25:42 GMT
           expires:
           - '-1'
           pragma:
    @@ -599,7 +526,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 01f2d36d7816a145a16e32443029cd2e
    +      - 8e4e661374dac546948d87c75df8aae9
         status:
           code: 200
           message: OK
    @@ -613,24 +540,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Running","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:52:20 GMT
    +      - Thu, 27 Feb 2020 04:26:13 GMT
           expires:
           - '-1'
           pragma:
    @@ -648,7 +573,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 9a89b65ace18594dbc829f85de172fea
    +      - 815f4e52f4cb9e4599b43ca65bba9888
         status:
           code: 200
           message: OK
    @@ -662,24 +587,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Running","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:52:50 GMT
    +      - Thu, 27 Feb 2020 04:26:43 GMT
           expires:
           - '-1'
           pragma:
    @@ -697,7 +620,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 165948d6eec30a44a731afee30714818
    +      - 81a43a864a2f014a95dde9ea704f38d5
         status:
           code: 200
           message: OK
    @@ -711,24 +634,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/b670872b-726d-4f02-b22d-aab02b318624","name":"b670872b-726d-4f02-b22d-aab02b318624","status":"Succeeded","startTime":"2019-11-04T23:46:30.4878447Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"51d18212-ff5d-11e9-818a-0242ac11000a","loggingRootId":"7155c5ba-2029-4318-9ec4-332124499c83","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1295'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:53:21 GMT
    +      - Thu, 27 Feb 2020 04:27:14 GMT
           expires:
           - '-1'
           pragma:
    @@ -746,7 +667,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - fd60f96bc25bda4a9c728c4b89eca855
    +      - ea93ed2c4e93d24887822bb8bfaf1129
         status:
           code: 200
           message: OK
    @@ -760,24 +681,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myhcasrvanxy?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myhcasrvanxy","name":"myhcasrvanxy","type":"Microsoft.HealthcareApis/services","etag":"\"2100a939-0000-0400-0000-5dc0b9f10000\"","location":"westus2","kind":"fhir-R4","tags":{},"properties":{"secondaryLocations":null,"accessPolicies":[{"objectId":"c487e7d1-3210-41a3-8ccc-e9372b78da47"},{"objectId":"5b307da8-43d4-492b-8b66-b0294ade872f"}],"cosmosDbConfiguration":{"offerThroughput":1000},"authenticationConfiguration":{"authority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","audience":"https://azurehealthcareapis.com","smartProxyEnabled":true},"corsConfiguration":{"origins":["*"],"headers":["*"],"methods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"maxAge":1440,"allowCredentials":false},"provisioningState":"Succeeded"}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '935'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:53:24 GMT
    -      etag:
    -      - '"2100a939-0000-0400-0000-5dc0b9f10000"'
    +      - Thu, 27 Feb 2020 04:27:46 GMT
           expires:
           - '-1'
           pragma:
    @@ -795,61 +714,10 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 5baaccf9b2b8674aa59e52727e8a4cfc
    +      - e029c3ec6893324cb1c7acacbff85bb7
         status:
           code: 200
           message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      Content-Length:
    -      - '0'
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -      accept-language:
    -      - en-US
    -    method: DELETE
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myhcasrvanxy?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: ''
    -    headers:
    -      azure-asyncoperation:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '0'
    -      date:
    -      - Mon, 04 Nov 2019 23:53:35 GMT
    -      expires:
    -      - '-1'
    -      location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview&operationResultResponseType=Location
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      x-content-type-options:
    -      - nosniff
    -      x-ms-ratelimit-remaining-subscription-deletes:
    -      - '14999'
    -      x-request-id:
    -      - 3429811c06704043a862dd4734c9bd1f
    -    status:
    -      code: 202
    -      message: Accepted
     - request:
         body: null
         headers:
    @@ -860,24 +728,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:54:06 GMT
    +      - Thu, 27 Feb 2020 04:28:16 GMT
           expires:
           - '-1'
           pragma:
    @@ -895,7 +761,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - bc745256ff1c7745947e859fb1164d4a
    +      - 580639cc71e7b449b8bccb6829d0a49d
         status:
           code: 200
           message: OK
    @@ -909,24 +775,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:54:36 GMT
    +      - Thu, 27 Feb 2020 04:28:47 GMT
           expires:
           - '-1'
           pragma:
    @@ -944,7 +808,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 4c643a71202d654497ee26ed307b18ec
    +      - e79da1bc660a474b9974171671d5e349
         status:
           code: 200
           message: OK
    @@ -958,24 +822,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:55:07 GMT
    +      - Thu, 27 Feb 2020 04:29:17 GMT
           expires:
           - '-1'
           pragma:
    @@ -993,7 +855,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - fbd439a86ec6014abce2fee4995154c5
    +      - df7ca6a4e82b4e4d99a51d7dd0861228
         status:
           code: 200
           message: OK
    @@ -1007,24 +869,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:55:37 GMT
    +      - Thu, 27 Feb 2020 04:29:49 GMT
           expires:
           - '-1'
           pragma:
    @@ -1042,7 +902,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - e4344fa94137af48bedc5019fb9deaa4
    +      - d51021e5f005f045a8ed134029026689
         status:
           code: 200
           message: OK
    @@ -1056,24 +916,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Running","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:56:08 GMT
    +      - Thu, 27 Feb 2020 04:30:19 GMT
           expires:
           - '-1'
           pragma:
    @@ -1091,7 +949,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - fa0bae26debfd347ad9b3b11c6d423f6
    +      - 1f3292ca624d5442900ef91da371cab0
         status:
           code: 200
           message: OK
    @@ -1105,24 +963,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","name":"4822b081-d0ff-4a27-ac0a-7fbae2dd19e3","status":"Succeeded","startTime":"2020-02-27T04:19:32.9482065Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '276'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:56:39 GMT
    +      - Thu, 27 Feb 2020 04:30:50 GMT
           expires:
           - '-1'
           pragma:
    @@ -1140,7 +996,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 3738550cab9eb84a8239df8c07bd0ea0
    +      - b0d330bdb449b8469ce58dcf1b3b781a
         status:
           code: 200
           message: OK
    @@ -1154,24 +1010,24 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myapimrndxyzabc?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myapimrndxyzabc","name":"myapimrndxyzabc","type":"Microsoft.HealthcareApis/services","etag":"\"120040ce-0000-0400-0000-5e5745e50000\"","location":"eastus","kind":"fhir","tags":{},"properties":{"secondaryLocations":null,"accessPolicies":[{"objectId":"c487e7d1-3210-41a3-8ccc-e9372b78da47"},{"objectId":"5b307da8-43d4-492b-8b66-b0294ade872f"}],"cosmosDbConfiguration":{"offerThroughput":1000},"authenticationConfiguration":{"authority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","audience":"https://azurehealthcareapis.com","smartProxyEnabled":true},"corsConfiguration":{"origins":["*"],"headers":["*"],"methods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"maxAge":1440,"allowCredentials":false},"exportConfiguration":{"storageAccountName":null},"provisioningState":"Succeeded"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '987'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:57:09 GMT
    +      - Thu, 27 Feb 2020 04:30:53 GMT
    +      etag:
    +      - '"120040ce-0000-0400-0000-5e5745e50000"'
           expires:
           - '-1'
           pragma:
    @@ -1189,7 +1045,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 763c9626b384744ead660d29e044029f
    +      - 021421bf595ae04998044f59362eba54
         status:
           code: 200
           message: OK
    @@ -1203,24 +1059,25 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/read?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"error":{"code":"OperationResultNotFound","message":"The operation
    +        result was not found."}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '92'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:57:39 GMT
    +      - Thu, 27 Feb 2020 04:31:00 GMT
           expires:
           - '-1'
           pragma:
    @@ -1231,17 +1088,13 @@ interactions:
           - Microsoft-HTTPAPI/2.0
           strict-transport-security:
           - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 77053ea7bfa4c448b08ed1fd57eb8058
    +      - adff337dc5b4144e846674736f793485
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -1252,24 +1105,26 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myapimrndxyzabc?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myapimrndxyzabc","name":"myapimrndxyzabc","type":"Microsoft.HealthcareApis/services","etag":"\"120040ce-0000-0400-0000-5e5745e50000\"","location":"eastus","kind":"fhir","tags":{},"properties":{"secondaryLocations":null,"accessPolicies":[{"objectId":"c487e7d1-3210-41a3-8ccc-e9372b78da47"},{"objectId":"5b307da8-43d4-492b-8b66-b0294ade872f"}],"cosmosDbConfiguration":{"offerThroughput":1000},"authenticationConfiguration":{"authority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","audience":"https://azurehealthcareapis.com","smartProxyEnabled":true},"corsConfiguration":{"origins":["*"],"headers":["*"],"methods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"maxAge":1440,"allowCredentials":false},"exportConfiguration":{"storageAccountName":null},"provisioningState":"Succeeded"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '987'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:58:10 GMT
    +      - Thu, 27 Feb 2020 04:31:04 GMT
    +      etag:
    +      - '"120040ce-0000-0400-0000-5e5745e50000"'
           expires:
           - '-1'
           pragma:
    @@ -1287,12 +1142,12 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - a3f73e3baad5fc4e91b7418f8eb1515f
    +      - ff92905b412aaf4e87a954beec2ea52d
         status:
           code: 200
           message: OK
     - request:
    -    body: null
    +    body: '{"tags": {"tags": "{''tag1'': ''value1'', ''tag2'': ''value2''}"}}'
         headers:
           Accept:
           - application/json
    @@ -1300,74 +1155,32 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1293'
    -      content-type:
    +      Content-Length:
    +      - '58'
    +      Content-Type:
           - application/json; charset=utf-8
    -      date:
    -      - Mon, 04 Nov 2019 23:58:42 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - a6768f7ed97c5b4486401450a54be151
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: PATCH
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myapimrndxyzabc?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myapimrndxyzabc","name":"myapimrndxyzabc","type":"Microsoft.HealthcareApis/services","etag":"\"120096cf-0000-0400-0000-5e5746130000\"","location":"eastus","kind":"fhir","tags":{"tags":"{''tag1'':
    +        ''value1'', ''tag2'': ''value2''}"},"properties":{"secondaryLocations":null,"accessPolicies":[{"objectId":"c487e7d1-3210-41a3-8ccc-e9372b78da47"},{"objectId":"5b307da8-43d4-492b-8b66-b0294ade872f"}],"cosmosDbConfiguration":{"offerThroughput":1000},"authenticationConfiguration":{"authority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","audience":"https://azurehealthcareapis.com","smartProxyEnabled":true},"corsConfiguration":{"origins":["*"],"headers":["*"],"methods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"maxAge":1440,"allowCredentials":false},"exportConfiguration":{"storageAccountName":null},"provisioningState":"Succeeded"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '1032'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Mon, 04 Nov 2019 23:59:13 GMT
    +      - Thu, 27 Feb 2020 04:31:18 GMT
    +      etag:
    +      - '"120096cf-0000-0400-0000-5e5746130000"'
           expires:
           - '-1'
           pragma:
    @@ -1384,13 +1197,15 @@ interactions:
           - Accept-Encoding
           x-content-type-options:
           - nosniff
    +      x-ms-ratelimit-remaining-subscription-writes:
    +      - '1197'
           x-request-id:
    -      - 8bb851b008cc484f80a55717c16b0934
    +      - 8f1b296a6d4d274486d58a91de42b090
         status:
           code: 200
           message: OK
     - request:
    -    body: null
    +    body: '{"name": "myapimrndxyzabcABC", "type": "Microsoft.HealthcareApis/services"}'
         headers:
           Accept:
           - application/json
    @@ -1398,74 +1213,30 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1293'
    -      content-type:
    +      Content-Length:
    +      - '75'
    +      Content-Type:
           - application/json; charset=utf-8
    -      date:
    -      - Mon, 04 Nov 2019 23:59:43 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - 6e0bea82b10c5543b2d0850bb481e392
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: POST
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/checkNameAvailability?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"nameAvailable":false,"reason":"Invalid","message":"Name can contain
    +        only lowercase letters, numbers and the ''-'' character."}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '126'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:00:14 GMT
    +      - Thu, 27 Feb 2020 04:31:18 GMT
           expires:
           - '-1'
           pragma:
    @@ -1483,7 +1254,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 8cd1b82f43c0a3469ee80d1b3e8317c1
    +      - 317982c51e373a4aa2923e3469f3f094
         status:
           code: 200
           message: OK
    @@ -1496,27 +1267,31 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    +      Content-Length:
    +      - '0'
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      accept-language:
    +      - en-US
    +    method: DELETE
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myapimrndxyzabc?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: ''
         headers:
    +      azure-asyncoperation:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    -      content-type:
    -      - application/json; charset=utf-8
    +      - '0'
           date:
    -      - Tue, 05 Nov 2019 00:00:46 GMT
    +      - Thu, 27 Feb 2020 04:31:23 GMT
           expires:
           - '-1'
    +      location:
    +      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview&operationResultResponseType=Location
           pragma:
           - no-cache
           request-context:
    @@ -1525,17 +1300,15 @@ interactions:
           - Microsoft-HTTPAPI/2.0
           strict-transport-security:
           - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
           x-content-type-options:
           - nosniff
    +      x-ms-ratelimit-remaining-subscription-deletes:
    +      - '14999'
           x-request-id:
    -      - e937570cb681be43a06229529113cc40
    +      - 8e66a41507ad184783663bfa56f80254
         status:
    -      code: 200
    -      message: OK
    +      code: 202
    +      message: Accepted
     - request:
         body: null
         headers:
    @@ -1546,24 +1319,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:01:17 GMT
    +      - Thu, 27 Feb 2020 04:31:54 GMT
           expires:
           - '-1'
           pragma:
    @@ -1581,7 +1352,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - e63d3d2284aa9e4a9fcdb0504996380a
    +      - 9d5d5e82f9c79545bfcad5f9a97c699c
         status:
           code: 200
           message: OK
    @@ -1595,24 +1366,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:01:47 GMT
    +      - Thu, 27 Feb 2020 04:32:25 GMT
           expires:
           - '-1'
           pragma:
    @@ -1630,7 +1399,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 6f58e93f887fba4d9135c76116a9343f
    +      - 62d75de001c0f34093fa676ac144a6fb
         status:
           code: 200
           message: OK
    @@ -1644,24 +1413,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1293'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:02:17 GMT
    +      - Thu, 27 Feb 2020 04:32:56 GMT
           expires:
           - '-1'
           pragma:
    @@ -1679,7 +1446,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 002fd8f594bff349bd77420ecc556fb1
    +      - e9f3b2814f32eb4fbe525877da01ca15
         status:
           code: 200
           message: OK
    @@ -1693,964 +1460,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1293'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:02:48 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - 3bc704d8971d0b41a333f4aff6c1ce90
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Running","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1293'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:03:19 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - e96d8868a038c845b553f5f6d6dd10f5
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/81749910-9a94-4d9d-8c86-8299f432c029","name":"81749910-9a94-4d9d-8c86-8299f432c029","status":"Succeeded","startTime":"2019-11-04T23:53:35.1037582Z","properties":{"accountId":"lcoq3samb0xn6uca1mpfq2185","accountName":"myhcasrvanxy","loggingParentId":"4b47acb8-ff5e-11e9-818a-0242ac11000a","loggingRootId":"7ff41b2d-3942-4daf-99c5-166487b451f0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47","5b307da8-43d4-492b-8b66-b0294ade872f"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/abfde7b2-df0f-47e6-aabf-2462b07508dc","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":["*"],"corsHeaders":["*"],"corsMethods":["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"corsMaxAge":1440,"corsAllowCredentials":false,"smartProxyEnabled":true,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1295'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:03:49 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - c08e1668244f9746a051a15577cf3d64
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: '{"kind": "fhir-R4", "location": "westus2", "properties": {"accessPolicies":
    -      [{"objectId": "c487e7d1-3210-41a3-8ccc-e9372b78da47"}]}}'
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      Content-Length:
    -      - '132'
    -      Content-Type:
    -      - application/json; charset=utf-8
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -      accept-language:
    -      - en-US
    -    method: PUT
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myhcasrvanxy?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myhcasrvanxy","name":"myhcasrvanxy","type":"Microsoft.HealthcareApis/services","etag":"\"2100d545-0000-0400-0000-5dc0bc6b0000\"","location":"westus2","kind":"fhir-R4","properties":{"secondaryLocations":null,"accessPolicies":[{"objectId":"c487e7d1-3210-41a3-8ccc-e9372b78da47"}],"cosmosDbConfiguration":{"offerThroughput":1000},"authenticationConfiguration":{"authority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","audience":"https://azurehealthcareapis.com","smartProxyEnabled":false},"corsConfiguration":{"origins":[],"headers":[],"methods":[],"maxAge":null,"allowCredentials":false},"provisioningState":"Creating"}}'
    -    headers:
    -      azure-asyncoperation:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '822'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:03:56 GMT
    -      etag:
    -      - '"2100d545-0000-0400-0000-5dc0bc6b0000"'
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      x-content-type-options:
    -      - nosniff
    -      x-ms-ratelimit-remaining-subscription-writes:
    -      - '1199'
    -      x-request-id:
    -      - e3d4cf442a601c46833e1f34bc33353a
    -    status:
    -      code: 201
    -      message: Created
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Running","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1204'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:04:27 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - 2f9d8f64455b5c4686fc0899ec0dcc7f
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Running","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1204'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:04:58 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - 9ebaf7692858244cb767aeafea12a7f1
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Running","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1204'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:05:28 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - f69fcdfe92e8ab41a63c03d5b764ed5a
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Running","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1204'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:05:58 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - f3b0800af0e64547b3d3b61a9e0ece6a
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Running","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1204'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:06:29 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - 0ece6a0f544ed14181a38698bffb5acd
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Running","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1204'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:06:59 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - 8576b3ae005c8b42a05d291059619679
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Running","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1204'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:07:29 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - aaa9bebd4229e84498d2262896015b96
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Running","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1204'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:08:00 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - 4c1d9a5b8ee2324f9669ae919de76bc2
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Running","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1204'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:08:31 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - d40f5091d4308247b1b87a3ee544f0a5
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Running","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1204'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:09:01 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - 31c4b0db774e914c8bbef21b850bf5fe
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Running","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1204'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:09:31 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - 9b87426a039a6947b91fddc113d7fa3b
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Running","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1204'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:10:02 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - 62ecfe1024d0274fb921114ab815bcfa
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/d894fff4-fd37-475e-ba00-cc6ea3aeefa2","name":"d894fff4-fd37-475e-ba00-cc6ea3aeefa2","status":"Succeeded","startTime":"2019-11-05T00:03:55.9453057Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"bfc88e12-ff5f-11e9-818a-0242ac11000a","loggingRootId":"c4229a72-2e54-4283-9b96-71fc168d0ac0","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":0,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '1206'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:10:32 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - f7c6de88f4043f4ab777b0f0cd57229e
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -    method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myhcasrvanxy?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myhcasrvanxy","name":"myhcasrvanxy","type":"Microsoft.HealthcareApis/services","etag":"\"2100504d-0000-0400-0000-5dc0bdeb0000\"","location":"westus2","kind":"fhir-R4","tags":{},"properties":{"secondaryLocations":null,"accessPolicies":[{"objectId":"c487e7d1-3210-41a3-8ccc-e9372b78da47"}],"cosmosDbConfiguration":{"offerThroughput":1000},"authenticationConfiguration":{"authority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","audience":"https://azurehealthcareapis.com","smartProxyEnabled":false},"corsConfiguration":{"origins":[],"headers":[],"methods":[],"maxAge":null,"allowCredentials":false},"provisioningState":"Succeeded"}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '833'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Tue, 05 Nov 2019 00:10:35 GMT
    -      etag:
    -      - '"2100504d-0000-0400-0000-5dc0bdeb0000"'
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      transfer-encoding:
    -      - chunked
    -      vary:
    -      - Accept-Encoding
    -      x-content-type-options:
    -      - nosniff
    -      x-request-id:
    -      - 5e2efcb19baa294e9f77d4e33d2f4991
    -    status:
    -      code: 200
    -      message: OK
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      Content-Length:
    -      - '0'
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    -      accept-language:
    -      - en-US
    -    method: DELETE
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_healthcareapis_test_healthcareapise0d71394/providers/Microsoft.HealthcareApis/services/myhcasrvanxy?api-version=2018-08-20-preview
    -  response:
    -    body:
    -      string: ''
    -    headers:
    -      azure-asyncoperation:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '0'
    -      date:
    -      - Tue, 05 Nov 2019 00:10:40 GMT
    -      expires:
    -      - '-1'
    -      location:
    -      - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview&operationResultResponseType=Location
    -      pragma:
    -      - no-cache
    -      request-context:
    -      - appId=cid-v1:3de0b58a-5b02-4f39-a0b3-83315651f823
    -      server:
    -      - Microsoft-HTTPAPI/2.0
    -      strict-transport-security:
    -      - max-age=31536000; includeSubDomains
    -      x-content-type-options:
    -      - nosniff
    -      x-ms-ratelimit-remaining-subscription-deletes:
    -      - '14999'
    -      x-request-id:
    -      - 0a1ecd307185f742a241ca107d71da19
    -    status:
    -      code: 202
    -      message: Accepted
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:11:12 GMT
    +      - Thu, 27 Feb 2020 04:33:26 GMT
           expires:
           - '-1'
           pragma:
    @@ -2668,7 +1493,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - e9efd03760730744ad34b168d3a7d811
    +      - 89851ac3dbce2c4e84a8450e0c4b1d4e
         status:
           code: 200
           message: OK
    @@ -2682,24 +1507,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:11:42 GMT
    +      - Thu, 27 Feb 2020 04:33:57 GMT
           expires:
           - '-1'
           pragma:
    @@ -2717,7 +1540,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 8e1d233695bdf1409c2ca4c93a8dc73c
    +      - 46c1bb568808934b82bd7224480e5492
         status:
           code: 200
           message: OK
    @@ -2731,24 +1554,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:12:13 GMT
    +      - Thu, 27 Feb 2020 04:34:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -2766,7 +1587,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - c3227dab8596bf4497241bba7c714e72
    +      - 406abceee452dc4b82f87c00d0f45bb2
         status:
           code: 200
           message: OK
    @@ -2780,24 +1601,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:12:48 GMT
    +      - Thu, 27 Feb 2020 04:34:58 GMT
           expires:
           - '-1'
           pragma:
    @@ -2815,7 +1634,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - bfde85d9abd29d49916a5e8fe41756d0
    +      - 5e11f1701bec094eb46570860a878204
         status:
           code: 200
           message: OK
    @@ -2829,24 +1648,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:13:19 GMT
    +      - Thu, 27 Feb 2020 04:35:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -2864,7 +1681,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 8ba11ca0cabd5444aa0c0d1be19ca67d
    +      - a7e873188b74de4da829a32dcda5a061
         status:
           code: 200
           message: OK
    @@ -2878,24 +1695,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:13:54 GMT
    +      - Thu, 27 Feb 2020 04:35:59 GMT
           expires:
           - '-1'
           pragma:
    @@ -2913,7 +1728,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - aac0a8ebb6521e44b7a34c36eda3e0b8
    +      - f3bab752881c424e8dd5e61d7337cba5
         status:
           code: 200
           message: OK
    @@ -2927,24 +1742,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:14:24 GMT
    +      - Thu, 27 Feb 2020 04:36:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -2962,7 +1775,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - bbf2e946039cfc469115e5cad24bf4a8
    +      - 3855a7a9a2b0364197b323ba18ab9153
         status:
           code: 200
           message: OK
    @@ -2976,24 +1789,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:14:55 GMT
    +      - Thu, 27 Feb 2020 04:37:01 GMT
           expires:
           - '-1'
           pragma:
    @@ -3011,7 +1822,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - ab4a295c7d00234f8e0cf43b8488ff7e
    +      - c3fbaf7b16f8154390ffd2c9c3ada135
         status:
           code: 200
           message: OK
    @@ -3025,24 +1836,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:15:25 GMT
    +      - Thu, 27 Feb 2020 04:37:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -3060,7 +1869,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 731e79a3e645b04389e9b0b46d5b946d
    +      - 972db7334e245d4fbb75dd601bbfa5f2
         status:
           code: 200
           message: OK
    @@ -3074,24 +1883,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:15:55 GMT
    +      - Thu, 27 Feb 2020 04:38:03 GMT
           expires:
           - '-1'
           pragma:
    @@ -3109,7 +1916,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 464be3c5dc609f4da5299111f5e27a98
    +      - 91aa4e4e8de38c4ea7e3bc51432fdda4
         status:
           code: 200
           message: OK
    @@ -3123,24 +1930,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:16:26 GMT
    +      - Thu, 27 Feb 2020 04:38:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -3158,7 +1963,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - c55a15ba8dcf6749aa412117fdefd711
    +      - fa864c52acbbdc45999e13abcebf4060
         status:
           code: 200
           message: OK
    @@ -3172,24 +1977,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:16:56 GMT
    +      - Thu, 27 Feb 2020 04:39:04 GMT
           expires:
           - '-1'
           pragma:
    @@ -3207,7 +2010,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 27c5caac2c2ec34189d6a1e9a44fe38f
    +      - 8f7efccf124d1148becc2168a659a16b
         status:
           code: 200
           message: OK
    @@ -3221,24 +2024,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:17:29 GMT
    +      - Thu, 27 Feb 2020 04:39:34 GMT
           expires:
           - '-1'
           pragma:
    @@ -3256,7 +2057,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 35199b9cee65b64bb99da1f45e3b0850
    +      - 4d1bac391abbe2489b6dcf7ff5afada2
         status:
           code: 200
           message: OK
    @@ -3270,24 +2071,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:17:59 GMT
    +      - Thu, 27 Feb 2020 04:40:06 GMT
           expires:
           - '-1'
           pragma:
    @@ -3305,7 +2104,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 820e4b3e2ee2754489bec6b1814a64e4
    +      - 55fc9e29d99b204a804d926d2e250fcb
         status:
           code: 200
           message: OK
    @@ -3319,24 +2118,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:18:29 GMT
    +      - Thu, 27 Feb 2020 04:40:36 GMT
           expires:
           - '-1'
           pragma:
    @@ -3354,7 +2151,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 0e27331fda4af84fa3ca5f705fe33ca1
    +      - e07ea35b607a0341b1417296ee0177f1
         status:
           code: 200
           message: OK
    @@ -3368,24 +2165,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:19:01 GMT
    +      - Thu, 27 Feb 2020 04:41:07 GMT
           expires:
           - '-1'
           pragma:
    @@ -3403,7 +2198,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 7a0400522a841746aff7d4e0228439d9
    +      - 36786f6805387b4881f14e50a62d447f
         status:
           code: 200
           message: OK
    @@ -3417,24 +2212,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:19:32 GMT
    +      - Thu, 27 Feb 2020 04:41:38 GMT
           expires:
           - '-1'
           pragma:
    @@ -3452,7 +2245,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 44469dca5c3d55409330a7df6d15e8b8
    +      - 4673a2ccbdb2234eb724e78852ec816a
         status:
           code: 200
           message: OK
    @@ -3466,24 +2259,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Running","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Running","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1204'
    +      - '274'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:20:05 GMT
    +      - Thu, 27 Feb 2020 04:42:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -3501,7 +2292,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 2da53ea5a75c5a43a61e7dbde1dbe4e0
    +      - 7eca90529b635a44b88773abf7039a11
         status:
           code: 200
           message: OK
    @@ -3515,24 +2306,22 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - python/3.6.8 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.8
    -        msrest_azure/0.4.34 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
    +      - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10
    +        msrest_azure/0.6.2 azure-mgmt-healthcareapis/0.1.0 Azure-SDK-For-Python
         method: GET
    -    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6?api-version=2018-08-20-preview
    +    uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611?api-version=2018-08-20-preview
       response:
         body:
    -      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/westus2/operationresults/a8871d0a-7f56-42b7-916f-8f1b5f15dba6","name":"a8871d0a-7f56-42b7-916f-8f1b5f15dba6","status":"Succeeded","startTime":"2019-11-05T00:10:41.3205698Z","properties":{"accountId":"44eh25jmpso3saqln58q39g7h","accountName":"myhcasrvanxy","loggingParentId":"b1e78298-ff60-11e9-818a-0242ac11000a","loggingRootId":"8a289678-541b-4a2a-abae-8dd940455032","externalSecurityAuthenticationAllowedOids":["c487e7d1-3210-41a3-8ccc-e9372b78da47"],"externalSecurityAuthenticationAuthority":"https://login.microsoftonline.com/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","externalSecurityAuthenticationAudience":"https://azurehealthcareapis.com","offerThroughput":1000,"provisioningOperation":1,"subscriptionId
    -        ":"00000000-0000-0000-0000-000000000000","resourceGroupName ":"test_cli_mgmt_healthcareapis_test_healthcareapise0d71394","providerNamespace
    -        ":"Microsoft.HealthcareApis","resourceTypeName ":"services","skuName":null,"tags":{},"secondaryRegionNames":null,"corsOrigins":[],"corsHeaders":[],"corsMethods":[],"corsMaxAge":null,"corsAllowCredentials":false,"smartProxyEnabled":false,"fhirVersion":0}}'
    +      string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.HealthcareApis/locations/eastus/operationresults/fecf5034-778e-466e-a613-9517eda91611","name":"fecf5034-778e-466e-a613-9517eda91611","status":"Succeeded","startTime":"2020-02-27T04:31:23.7933336Z"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1206'
    +      - '276'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Tue, 05 Nov 2019 00:20:35 GMT
    +      - Thu, 27 Feb 2020 04:42:42 GMT
           expires:
           - '-1'
           pragma:
    @@ -3550,7 +2339,7 @@ interactions:
           x-content-type-options:
           - nosniff
           x-request-id:
    -      - 45e9cb19a5b27e4497cc79284d229518
    +      - fac616eee9487a408688eada2625e104
         status:
           code: 200
           message: OK
    diff --git a/sdk/healthcareapis/azure-mgmt-healthcareapis/tests/test_cli_mgmt_healthcareapis.py b/sdk/healthcareapis/azure-mgmt-healthcareapis/tests/test_cli_mgmt_healthcareapis.py
    index 7723519ac1d3..30103130f8a6 100644
    --- a/sdk/healthcareapis/azure-mgmt-healthcareapis/tests/test_cli_mgmt_healthcareapis.py
    +++ b/sdk/healthcareapis/azure-mgmt-healthcareapis/tests/test_cli_mgmt_healthcareapis.py
    @@ -6,6 +6,16 @@
     # license information.
     #--------------------------------------------------------------------------
     
    +
    +# TEST SCENARIO COVERAGE
    +# ----------------------
    +# Methods Total   : 9
    +# Methods Covered : 9
    +# Examples Total  : 9
    +# Examples Tested : 9
    +# Coverage %      : 100
    +# ----------------------
    +
     import unittest
     
     import azure.mgmt.healthcareapis
    @@ -24,15 +34,14 @@ def setUp(self):
         @ResourceGroupPreparer(location=AZURE_LOCATION)
         def test_healthcareapis(self, resource_group):
     
    -        SERVICE_NAME = "myhcasrvanxy"
    -
    -        # Check name availability[post]
    -        result = self.mgmt_client.services.check_name_availability(type="Microsoft.HealthcareApis/services", name=SERVICE_NAME)
    +        SERVICE_NAME = "myapimrndxyzabc"
    +        OPERATIONRESULT_NAME = "read"
    +        LOCATION_NAME = AZURE_LOCATION
     
    -        # Create or Update a service with all parameters[put]
    +        # ServicePut[put]
             BODY = {
    -          "location": "westus2",
    -          "kind": "fhir-R4",
    +          "location": "eastus",
    +          "kind": "fhir",
               "properties": {
                 "access_policies": [
                   {
    @@ -73,36 +82,45 @@ def test_healthcareapis(self, resource_group):
             result = self.mgmt_client.services.create_or_update(resource_group.name, SERVICE_NAME, BODY)
             result = result.result()
     
    -        # Delete service[delete]
    -        result = self.mgmt_client.services.delete(resource_group.name, SERVICE_NAME)
    -        result = result.result()
    +        # OperationResultsGet[get]
    +        result = self.mgmt_client.operation_results.get(LOCATION_NAME, OPERATIONRESULT_NAME)
    +
    +        # ServiceGet[get]
    +        result = self.mgmt_client.services.get(resource_group.name, SERVICE_NAME)
    +
    +        # ServiceListByResourceGroup[get]
    +        result = self.mgmt_client.services.list_by_resource_group(resource_group.name)
    +
    +        # ServiceList[get]
    +        result = self.mgmt_client.services.list()
    +
    +        # OperationsList[get]
    +        result = self.mgmt_client.operations.list()
     
    -        # Create or Update a service with minimum parameters[put]
    +        # ServicePatch[patch]
             BODY = {
    -          "location": "westus2",
    -          "kind": "fhir-R4",
    -          "properties": {
    -            "access_policies": [
    -              {
    -                "object_id": "c487e7d1-3210-41a3-8ccc-e9372b78da47"
    -              }
    -            ]
    +          "tags": {
    +            "tag1": "value1",
    +            "tag2": "value2"
               }
             }
    -        result = self.mgmt_client.services.create_or_update(resource_group.name, SERVICE_NAME, BODY)
    +        result = self.mgmt_client.services.update(resource_group.name, SERVICE_NAME, BODY)
             result = result.result()
     
    -        # List all services in subscription[get]
    -        result = self.mgmt_client.services.list()
    -
    -        # List all services in resource group[get]
    -        result = self.mgmt_client.services.list_by_resource_group(resource_group.name, )
    +        # CheckNameAvailabilityPost[post]
    +        BODY = {
    +          "type": "Microsoft.HealthcareApis/services",
    +          "name": "serviceName"
    +        }
    +        NAME = SERVICE_NAME + 'ABC'
    +        TYPE = "Microsoft.HealthcareApis/services"
    +        result = self.mgmt_client.services.check_name_availability(NAME, TYPE)
     
    -        # Delete service[delete]
    +        # ServiceDelete[delete]
             result = self.mgmt_client.services.delete(resource_group.name, SERVICE_NAME)
             result = result.result()
     
     
     #------------------------------------------------------------------------------
     if __name__ == '__main__':
    -    unittest.main()
    \ No newline at end of file
    +    unittest.main()
    diff --git a/sdk/identity/azure-identity/CHANGELOG.md b/sdk/identity/azure-identity/CHANGELOG.md
    index 39907d8ce5cc..09d4a9d1cc8e 100644
    --- a/sdk/identity/azure-identity/CHANGELOG.md
    +++ b/sdk/identity/azure-identity/CHANGELOG.md
    @@ -1,6 +1,13 @@
     # Release History
     
    -## 1.3.1 (Unreleased)
    +## 1.4.0b2 (Unreleased)
    +
    +
    +## 1.4.0b1 (2020-03-10)
    +- `DefaultAzureCredential` can now authenticate using the identity logged in to
    +the Azure CLI, unless explicitly disabled with a keyword argument:
    +`DefaultAzureCredential(exclude_cli_credential=True)`
    +([#10092](https://github.com/Azure/azure-sdk-for-python/pull/10092))
     
     
     ## 1.3.0 (2020-02-11)
    diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/__init__.py b/sdk/identity/azure-identity/azure/identity/_credentials/__init__.py
    index 62c41086c96c..1afc6a6ee9e8 100644
    --- a/sdk/identity/azure-identity/azure/identity/_credentials/__init__.py
    +++ b/sdk/identity/azure-identity/azure/identity/_credentials/__init__.py
    @@ -10,6 +10,7 @@
     from .environment import EnvironmentCredential
     from .managed_identity import ManagedIdentityCredential
     from .shared_cache import SharedTokenCacheCredential
    +from .azure_cli import AzureCliCredential
     from .user import DeviceCodeCredential, UsernamePasswordCredential
     
     
    @@ -24,5 +25,6 @@
         "InteractiveBrowserCredential",
         "ManagedIdentityCredential",
         "SharedTokenCacheCredential",
    +    "AzureCliCredential",
         "UsernamePasswordCredential",
     ]
    diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/azure_cli.py b/sdk/identity/azure-identity/azure/identity/_credentials/azure_cli.py
    new file mode 100644
    index 000000000000..902fb08ec695
    --- /dev/null
    +++ b/sdk/identity/azure-identity/azure/identity/_credentials/azure_cli.py
    @@ -0,0 +1,132 @@
    +# ------------------------------------
    +# Copyright (c) Microsoft Corporation.
    +# Licensed under the MIT License.
    +# ------------------------------------
    +from datetime import datetime
    +import json
    +import os
    +import platform
    +import re
    +import sys
    +from typing import TYPE_CHECKING
    +
    +import subprocess
    +
    +from azure.core.credentials import AccessToken
    +from azure.core.exceptions import ClientAuthenticationError
    +
    +from .. import CredentialUnavailableError
    +from .._internal import _scopes_to_resource
    +
    +if TYPE_CHECKING:
    +    # pylint:disable=ungrouped-imports
    +    from typing import Any
    +
    +CLI_NOT_FOUND = "Azure CLI not found on path"
    +COMMAND_LINE = "az account get-access-token --output json --resource {}"
    +
    +# CLI's "expiresOn" is naive, so we use this naive datetime for the epoch to calculate expires_on in UTC
    +EPOCH = datetime.fromtimestamp(0)
    +
    +
    +class AzureCliCredential(object):
    +    """Authenticates by requesting a token from the Azure CLI.
    +
    +    This requires previously logging in to Azure via "az login", and will use the CLI's currently logged in identity.
    +    """
    +
    +    def get_token(self, *scopes, **kwargs):  # pylint:disable=no-self-use,unused-argument
    +        # type: (*str, **Any) -> AccessToken
    +        """Request an access token for `scopes`.
    +
    +        .. note:: This method is called by Azure SDK clients. It isn't intended for use in application code.
    +
    +        Only one scope is supported per request. This credential won't cache tokens. Every call invokes the Azure CLI.
    +
    +        :param str scopes: desired scopes for the token. Only **one** scope is supported per call.
    +        :rtype: :class:`azure.core.credentials.AccessToken`
    +
    +        :raises ~azure.identity.CredentialUnavailableError: the credential was unable to invoke the Azure CLI.
    +        :raises ~azure.core.exceptions.ClientAuthenticationError: the credential invoked the Azure CLI but didn't
    +          receive an access token.
    +        """
    +
    +        resource = _scopes_to_resource(*scopes)
    +        output, error = _run_command(COMMAND_LINE.format(resource))
    +        if error:
    +            raise error
    +
    +        token = parse_token(output)
    +        if not token:
    +            sanitized_output = sanitize_output(output)
    +            raise ClientAuthenticationError(message="Unexpected output from Azure CLI: '{}'".format(sanitized_output))
    +
    +        return token
    +
    +
    +def parse_token(output):
    +    """Parse output of 'az account get-access-token' to an AccessToken.
    +
    +    In particular, convert the CLI's "expiresOn" value, the string representation of a naive datetime, to epoch seconds.
    +    """
    +    try:
    +        token = json.loads(output)
    +        parsed_expires_on = datetime.strptime(token["expiresOn"], "%Y-%m-%d %H:%M:%S.%f")
    +
    +        # calculate seconds since the epoch; parsed_expires_on and EPOCH are naive
    +        expires_on = (parsed_expires_on - EPOCH).total_seconds()
    +
    +        return AccessToken(token["accessToken"], int(expires_on))
    +    except (KeyError, ValueError):
    +        return None
    +
    +
    +def get_safe_working_dir():
    +    """Invoke 'az' from a directory controlled by the OS, not the executing program's directory"""
    +
    +    if sys.platform.startswith("win"):
    +        path = os.environ.get("SYSTEMROOT")
    +        if not path:
    +            raise CredentialUnavailableError(message="Environment variable 'SYSTEMROOT' has no value")
    +        return path
    +
    +    return "/bin"
    +
    +
    +def sanitize_output(output):
    +    """Redact access tokens from CLI output to prevent error messages revealing them"""
    +    return re.sub(r"\"accessToken\": \"(.*?)(\"|$)", "****", output)
    +
    +
    +def _run_command(command):
    +    if sys.platform.startswith("win"):
    +        args = ["cmd", "/c", command]
    +    else:
    +        args = ["/bin/sh", "-c", command]
    +    try:
    +        working_directory = get_safe_working_dir()
    +
    +        kwargs = {"stderr": subprocess.STDOUT, "cwd": working_directory, "universal_newlines": True}
    +        if platform.python_version() >= "3.3":
    +            kwargs["timeout"] = 10
    +
    +        output = subprocess.check_output(args, **kwargs)
    +        return output, None
    +    except subprocess.CalledProcessError as ex:
    +        # non-zero return from shell
    +        if ex.returncode == 127 or ex.output.startswith("'az' is not recognized"):
    +            error = CredentialUnavailableError(message=CLI_NOT_FOUND)
    +        else:
    +            # return code is from the CLI -> propagate its output
    +            if ex.output:
    +                message = sanitize_output(ex.output)
    +            else:
    +                message = "Failed to invoke Azure CLI"
    +            error = ClientAuthenticationError(message=message)
    +    except OSError as ex:
    +        # failed to execute 'cmd' or '/bin/sh'; CLI may or may not be installed
    +        error = CredentialUnavailableError(message="Failed to execute '{}'".format(args[0]))
    +    except Exception as ex:  # pylint:disable=broad-except
    +        error = ex
    +
    +    return None, error
    diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/default.py b/sdk/identity/azure-identity/azure/identity/_credentials/default.py
    index 7ac2676f4df1..93e05351b6e2 100644
    --- a/sdk/identity/azure-identity/azure/identity/_credentials/default.py
    +++ b/sdk/identity/azure-identity/azure/identity/_credentials/default.py
    @@ -13,6 +13,8 @@
     from .environment import EnvironmentCredential
     from .managed_identity import ManagedIdentityCredential
     from .shared_cache import SharedTokenCacheCredential
    +from .azure_cli import AzureCliCredential
    +
     
     try:
         from typing import TYPE_CHECKING
    @@ -38,12 +40,14 @@ class DefaultAzureCredential(ChainedTokenCredential):
         3. On Windows only: a user who has signed in with a Microsoft application, such as Visual Studio. If multiple
            identities are in the cache, then the value of  the environment variable ``AZURE_USERNAME`` is used to select
            which identity to use. See :class:`~azure.identity.SharedTokenCacheCredential` for more details.
    +    4. The identity currently logged in to the Azure CLI.
     
         This default behavior is configurable with keyword arguments.
     
         :keyword str authority: Authority of an Azure Active Directory endpoint, for example 'login.microsoftonline.com',
               the authority for Azure Public Cloud (which is the default). :class:`~azure.identity.KnownAuthorities`
               defines authorities for other clouds. Managed identities ignore this because they reside in a single cloud.
    +    :keyword bool exclude_cli_credential: Whether to exclude the Azure CLI from the credential. Defaults to **False**.
         :keyword bool exclude_environment_credential: Whether to exclude a service principal configured by environment
             variables from the credential. Defaults to **False**.
         :keyword bool exclude_managed_identity_credential: Whether to exclude managed identity from the credential.
    @@ -69,6 +73,7 @@ def __init__(self, **kwargs):
             exclude_environment_credential = kwargs.pop("exclude_environment_credential", False)
             exclude_managed_identity_credential = kwargs.pop("exclude_managed_identity_credential", False)
             exclude_shared_token_cache_credential = kwargs.pop("exclude_shared_token_cache_credential", False)
    +        exclude_cli_credential = kwargs.pop("exclude_cli_credential", False)
             exclude_interactive_browser_credential = kwargs.pop("exclude_interactive_browser_credential", True)
     
             credentials = []
    @@ -86,6 +91,8 @@ def __init__(self, **kwargs):
                 except Exception as ex:  # pylint:disable=broad-except
                     # transitive dependency pywin32 doesn't support 3.8 (https://github.com/mhammond/pywin32/issues/1431)
                     _LOGGER.info("Shared token cache is unavailable: '%s'", ex)
    +        if not exclude_cli_credential:
    +            credentials.append(AzureCliCredential())
             if not exclude_interactive_browser_credential:
                 credentials.append(InteractiveBrowserCredential())
     
    diff --git a/sdk/identity/azure-identity/azure/identity/_internal/__init__.py b/sdk/identity/azure-identity/azure/identity/_internal/__init__.py
    index b6234d1eee67..25de23f23ca4 100644
    --- a/sdk/identity/azure-identity/azure/identity/_internal/__init__.py
    +++ b/sdk/identity/azure-identity/azure/identity/_internal/__init__.py
    @@ -9,6 +9,20 @@
     from .msal_credentials import ConfidentialClientCredential, PublicClientCredential
     from .msal_transport_adapter import MsalTransportAdapter, MsalTransportResponse
     
    +
    +def _scopes_to_resource(*scopes):
    +    """Convert an AADv2 scope to an AADv1 resource"""
    +
    +    if len(scopes) != 1:
    +        raise ValueError("This credential supports only one scope per token request")
    +
    +    resource = scopes[0]
    +    if resource.endswith("/.default"):
    +        resource = resource[: -len("/.default")]
    +
    +    return resource
    +
    +
     __all__ = [
         "AadClient",
         "AadClientBase",
    diff --git a/sdk/identity/azure-identity/azure/identity/_version.py b/sdk/identity/azure-identity/azure/identity/_version.py
    index 895f65061040..da4aaef3872e 100644
    --- a/sdk/identity/azure-identity/azure/identity/_version.py
    +++ b/sdk/identity/azure-identity/azure/identity/_version.py
    @@ -2,4 +2,4 @@
     # Copyright (c) Microsoft Corporation.
     # Licensed under the MIT License.
     # ------------------------------------
    -VERSION = "1.3.1"
    +VERSION = "1.4.0b2"
    diff --git a/sdk/identity/azure-identity/azure/identity/aio/_credentials/__init__.py b/sdk/identity/azure-identity/azure/identity/aio/_credentials/__init__.py
    index 976a90eb18e3..5b06446c4775 100644
    --- a/sdk/identity/azure-identity/azure/identity/aio/_credentials/__init__.py
    +++ b/sdk/identity/azure-identity/azure/identity/aio/_credentials/__init__.py
    @@ -9,10 +9,12 @@
     from .managed_identity import ManagedIdentityCredential
     from .client_credential import CertificateCredential, ClientSecretCredential
     from .shared_cache import SharedTokenCacheCredential
    +from .azure_cli import AzureCliCredential
     
     
     __all__ = [
         "AuthorizationCodeCredential",
    +    "AzureCliCredential",
         "CertificateCredential",
         "ChainedTokenCredential",
         "ClientSecretCredential",
    diff --git a/sdk/identity/azure-identity/azure/identity/aio/_credentials/azure_cli.py b/sdk/identity/azure-identity/azure/identity/aio/_credentials/azure_cli.py
    new file mode 100644
    index 000000000000..b048c6b95c6e
    --- /dev/null
    +++ b/sdk/identity/azure-identity/azure/identity/aio/_credentials/azure_cli.py
    @@ -0,0 +1,87 @@
    +# ------------------------------------
    +# Copyright (c) Microsoft Corporation.
    +# Licensed under the MIT License.
    +# ------------------------------------
    +import asyncio
    +import sys
    +
    +from azure.core.exceptions import ClientAuthenticationError
    +from .._credentials.base import AsyncCredentialBase
    +from ... import CredentialUnavailableError
    +from ..._credentials.azure_cli import (
    +    AzureCliCredential as _SyncAzureCliCredential,
    +    CLI_NOT_FOUND,
    +    COMMAND_LINE,
    +    get_safe_working_dir,
    +    parse_token,
    +    sanitize_output,
    +)
    +from ..._internal import _scopes_to_resource
    +
    +
    +class AzureCliCredential(AsyncCredentialBase):
    +    """Authenticates by requesting a token from the Azure CLI.
    +
    +    This requires previously logging in to Azure via "az login", and will use the CLI's currently logged in identity.
    +    """
    +
    +    async def get_token(self, *scopes, **kwargs):
    +        """Request an access token for `scopes`.
    +
    +        .. note:: This method is called by Azure SDK clients. It isn't intended for use in application code.
    +
    +        Only one scope is supported per request. This credential won't cache tokens. Every call invokes the Azure CLI.
    +
    +        :param str scopes: desired scopes for the token. Only **one** scope is supported per call.
    +        :rtype: :class:`azure.core.credentials.AccessToken`
    +
    +        :raises ~azure.identity.CredentialUnavailableError: the credential was unable to invoke the Azure CLI.
    +        :raises ~azure.core.exceptions.ClientAuthenticationError: the credential invoked the Azure CLI but didn't
    +          receive an access token.
    +        """
    +        # only ProactorEventLoop supports subprocesses on Windows (and it isn't the default loop on Python < 3.8)
    +        if sys.platform.startswith("win") and not isinstance(asyncio.get_event_loop(), asyncio.ProactorEventLoop):
    +            return _SyncAzureCliCredential().get_token(*scopes, **kwargs)
    +
    +        resource = _scopes_to_resource(*scopes)
    +        output = await _run_command(COMMAND_LINE.format(resource))
    +
    +        token = parse_token(output)
    +        if not token:
    +            sanitized_output = sanitize_output(output)
    +            raise ClientAuthenticationError(message="Unexpected output from Azure CLI: '{}'".format(sanitized_output))
    +
    +        return token
    +
    +    async def close(self):
    +        """Calling this method is unnecessary"""
    +
    +
    +async def _run_command(command):
    +    if sys.platform.startswith("win"):
    +        args = ("cmd", "/c " + command)
    +    else:
    +        args = ("/bin/sh", "-c " + command)
    +
    +    working_directory = get_safe_working_dir()
    +
    +    try:
    +        proc = await asyncio.create_subprocess_exec(
    +            *args, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.STDOUT, cwd=working_directory
    +        )
    +    except OSError as ex:
    +        # failed to execute 'cmd' or '/bin/sh'; CLI may or may not be installed
    +        error = CredentialUnavailableError(message="Failed to execute '{}'".format(args[0]))
    +        raise error from ex
    +
    +    stdout, _ = await asyncio.wait_for(proc.communicate(), 10)
    +    output = stdout.decode()
    +
    +    if proc.returncode == 0:
    +        return output
    +
    +    if proc.returncode == 127 or output.startswith("'az' is not recognized"):
    +        raise CredentialUnavailableError(CLI_NOT_FOUND)
    +
    +    message = sanitize_output(output) if output else "Failed to invoke Azure CLI"
    +    raise ClientAuthenticationError(message=message)
    diff --git a/sdk/identity/azure-identity/azure/identity/aio/_credentials/default.py b/sdk/identity/azure-identity/azure/identity/aio/_credentials/default.py
    index bcf81c4cc338..91b4d27d6fc5 100644
    --- a/sdk/identity/azure-identity/azure/identity/aio/_credentials/default.py
    +++ b/sdk/identity/azure-identity/azure/identity/aio/_credentials/default.py
    @@ -9,6 +9,7 @@
     from azure.core.exceptions import ClientAuthenticationError
     
     from ..._constants import EnvironmentVariables, KnownAuthorities
    +from .azure_cli import AzureCliCredential
     from .chained import ChainedTokenCredential
     from .environment import EnvironmentCredential
     from .managed_identity import ManagedIdentityCredential
    @@ -32,12 +33,14 @@ class DefaultAzureCredential(ChainedTokenCredential):
         3. On Windows only: a user who has signed in with a Microsoft application, such as Visual Studio. If multiple
            identities are in the cache, then the value of  the environment variable ``AZURE_USERNAME`` is used to select
            which identity to use. See :class:`~azure.identity.aio.SharedTokenCacheCredential` for more details.
    +    4. The identity currently logged in to the Azure CLI.
     
         This default behavior is configurable with keyword arguments.
     
         :keyword str authority: Authority of an Azure Active Directory endpoint, for example 'login.microsoftonline.com',
               the authority for Azure Public Cloud (which is the default). :class:`~azure.identity.KnownAuthorities`
               defines authorities for other clouds. Managed identities ignore this because they reside in a single cloud.
    +    :keyword bool exclude_cli_credential: Whether to exclude the Azure CLI from the credential. Defaults to **False**.
         :keyword bool exclude_environment_credential: Whether to exclude a service principal configured by environment
             variables from the credential. Defaults to **False**.
         :keyword bool exclude_managed_identity_credential: Whether to exclude managed identity from the credential.
    @@ -58,6 +61,7 @@ def __init__(self, **kwargs):
                 "shared_cache_tenant_id", os.environ.get(EnvironmentVariables.AZURE_TENANT_ID)
             )
     
    +        exclude_cli_credential = kwargs.pop("exclude_cli_credential", False)
             exclude_environment_credential = kwargs.pop("exclude_environment_credential", False)
             exclude_managed_identity_credential = kwargs.pop("exclude_managed_identity_credential", False)
             exclude_shared_token_cache_credential = kwargs.pop("exclude_shared_token_cache_credential", False)
    @@ -77,6 +81,8 @@ def __init__(self, **kwargs):
                 except Exception as ex:  # pylint:disable=broad-except
                     # transitive dependency pywin32 doesn't support 3.8 (https://github.com/mhammond/pywin32/issues/1431)
                     _LOGGER.info("Shared token cache is unavailable: '%s'", ex)
    +        if not exclude_cli_credential:
    +            credentials.append(AzureCliCredential())
     
             super().__init__(*credentials)
     
    diff --git a/sdk/identity/azure-identity/conftest.py b/sdk/identity/azure-identity/conftest.py
    index c271cab2fbb6..c6c50271ddc3 100644
    --- a/sdk/identity/azure-identity/conftest.py
    +++ b/sdk/identity/azure-identity/conftest.py
    @@ -113,3 +113,23 @@ def live_user_details():
             pytest.skip("To test username/password authentication, set $AZURE_USERNAME, $AZURE_PASSWORD, $USER_TENANT")
         else:
             return user_details
    +
    +@pytest.fixture()
    +def event_loop():
    +    """Ensure the event loop used by pytest-asyncio on Windows is ProactorEventLoop, which supports subprocesses.
    +
    +    This is necessary because SelectorEventLoop, which does not support subprocesses, is the default on Python < 3.8.
    +    """
    +
    +    try:
    +        import asyncio
    +    except:
    +        return
    +
    +    if sys.platform.startswith("win"):
    +        loop = asyncio.ProactorEventLoop()
    +    else:
    +        loop = asyncio.new_event_loop()
    +
    +    yield loop
    +    loop.close()
    diff --git a/sdk/identity/azure-identity/setup.py b/sdk/identity/azure-identity/setup.py
    index e81a75eb44e8..669b99a6d80c 100644
    --- a/sdk/identity/azure-identity/setup.py
    +++ b/sdk/identity/azure-identity/setup.py
    @@ -51,7 +51,7 @@
         author_email="azpysdkhelp@microsoft.com",
         url="https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/identity/azure-identity",
         classifiers=[
    -        "Development Status :: 5 - Production/Stable",
    +        "Development Status :: 4 - Beta",
             "Programming Language :: Python",
             "Programming Language :: Python :: 2",
             "Programming Language :: Python :: 2.7",
    diff --git a/sdk/identity/azure-identity/tests/test_cli_credential.py b/sdk/identity/azure-identity/tests/test_cli_credential.py
    new file mode 100644
    index 000000000000..e432e6906fb0
    --- /dev/null
    +++ b/sdk/identity/azure-identity/tests/test_cli_credential.py
    @@ -0,0 +1,116 @@
    +# ------------------------------------
    +# Copyright (c) Microsoft Corporation.
    +# Licensed under the MIT License.
    +# ------------------------------------
    +from datetime import datetime
    +import json
    +
    +from azure.identity import CredentialUnavailableError
    +from azure.identity._credentials.azure_cli import AzureCliCredential, CLI_NOT_FOUND
    +from azure.core.exceptions import ClientAuthenticationError
    +
    +import subprocess
    +import pytest
    +
    +from helpers import mock
    +
    +CHECK_OUTPUT = AzureCliCredential.__module__ + ".subprocess.check_output"
    +
    +TEST_ERROR_OUTPUTS = (
    +    '{"accessToken": "secret value',
    +    '{"accessToken": "secret value"',
    +    '{"accessToken": "secret value and some other nonsense"',
    +    '{"accessToken": "secret value", some invalid json, "accessToken": "secret value"}',
    +    '{"accessToken": "secret value"}',
    +    '{"accessToken": "secret value", "subscription": "some-guid", "tenant": "some-guid", "tokenType": "Bearer"}',
    +    "no secrets or json here",
    +    "{}",
    +)
    +
    +
    +def raise_called_process_error(return_code, output, cmd="..."):
    +    error = subprocess.CalledProcessError(return_code, cmd=cmd, output=output)
    +    return mock.Mock(side_effect=error)
    +
    +
    +def test_get_token():
    +    """The credential should parse the CLI's output to an AccessToken"""
    +
    +    access_token = "access token"
    +    valid_seconds = 42
    +    successful_output = json.dumps(
    +        {
    +            # expiresOn is a naive datetime representing valid_seconds from the epoch
    +            "expiresOn": datetime.fromtimestamp(valid_seconds).strftime("%Y-%m-%d %H:%M:%S.%f"),
    +            "accessToken": access_token,
    +            "subscription": "some-guid",
    +            "tenant": "some-guid",
    +            "tokenType": "Bearer",
    +        }
    +    )
    +
    +    with mock.patch(CHECK_OUTPUT, mock.Mock(return_value=successful_output)):
    +        token = AzureCliCredential().get_token("scope")
    +
    +    assert token.token == access_token
    +    assert type(token.expires_on) == int
    +    assert token.expires_on == valid_seconds
    +
    +
    +def test_cli_not_installed_linux():
    +    """The credential should raise CredentialUnavailableError when the CLI isn't installed"""
    +
    +    output = "/bin/sh: 1: az: not found"
    +    with mock.patch(CHECK_OUTPUT, raise_called_process_error(127, output)):
    +        with pytest.raises(CredentialUnavailableError, match=CLI_NOT_FOUND):
    +            AzureCliCredential().get_token("scope")
    +
    +
    +def test_cli_not_installed_windows():
    +    """The credential should raise CredentialUnavailableError when the CLI isn't installed"""
    +
    +    output = "'az' is not recognized as an internal or external command, operable program or batch file."
    +    with mock.patch(CHECK_OUTPUT, raise_called_process_error(1, output)):
    +        with pytest.raises(CredentialUnavailableError, match=CLI_NOT_FOUND):
    +            AzureCliCredential().get_token("scope")
    +
    +
    +def test_cannot_execute_shell():
    +    """The credential should raise CredentialUnavailableError when the subprocess doesn't start"""
    +
    +    with mock.patch(CHECK_OUTPUT, mock.Mock(side_effect=OSError())):
    +        with pytest.raises(CredentialUnavailableError):
    +            AzureCliCredential().get_token("scope")
    +
    +
    +def test_not_logged_in():
    +    """When the CLI isn't logged in, the credential should raise an error containing the CLI's output"""
    +
    +    output = "ERROR: Please run 'az login' to setup account."
    +    with mock.patch(CHECK_OUTPUT, raise_called_process_error(1, output)):
    +        with pytest.raises(ClientAuthenticationError, match=output):
    +            AzureCliCredential().get_token("scope")
    +
    +
    +@pytest.mark.parametrize("output", TEST_ERROR_OUTPUTS)
    +def test_parsing_error_does_not_expose_token(output):
    +    """Errors during CLI output parsing shouldn't expose access tokens in that output"""
    +
    +    with mock.patch(CHECK_OUTPUT, mock.Mock(return_value=output)):
    +        with pytest.raises(ClientAuthenticationError) as ex:
    +            AzureCliCredential().get_token("scope")
    +
    +    assert "secret value" not in str(ex.value)
    +    assert "secret value" not in repr(ex.value)
    +
    +
    +@pytest.mark.parametrize("output", TEST_ERROR_OUTPUTS)
    +def test_subprocess_error_does_not_expose_token(output):
    +    """Errors from the subprocess shouldn't expose access tokens in CLI output"""
    +
    +    with mock.patch(CHECK_OUTPUT, raise_called_process_error(1, output=output)):
    +        with pytest.raises(ClientAuthenticationError) as ex:
    +            AzureCliCredential().get_token("scope")
    +
    +    assert "secret value" not in str(ex.value)
    +    assert "secret value" not in repr(ex.value)
    diff --git a/sdk/identity/azure-identity/tests/test_cli_credential_async.py b/sdk/identity/azure-identity/tests/test_cli_credential_async.py
    new file mode 100644
    index 000000000000..f40614923ac4
    --- /dev/null
    +++ b/sdk/identity/azure-identity/tests/test_cli_credential_async.py
    @@ -0,0 +1,155 @@
    +# ------------------------------------
    +# Copyright (c) Microsoft Corporation.
    +# Licensed under the MIT License.
    +# ------------------------------------
    +from datetime import datetime
    +import json
    +import sys
    +from unittest import mock
    +
    +from azure.identity import CredentialUnavailableError
    +from azure.identity.aio._credentials.azure_cli import AzureCliCredential
    +from azure.identity._credentials.azure_cli import CLI_NOT_FOUND
    +from azure.core.exceptions import ClientAuthenticationError
    +import pytest
    +
    +from helpers_async import get_completed_future
    +from test_cli_credential import TEST_ERROR_OUTPUTS
    +
    +SUBPROCESS_EXEC = AzureCliCredential.__module__ + ".asyncio.create_subprocess_exec"
    +
    +
    +def mock_exec(stdout, stderr="", return_code=0):
    +    async def communicate():
    +        return (stdout.encode(), stderr.encode())
    +
    +    process = mock.Mock(communicate=communicate, returncode=return_code)
    +    return mock.Mock(return_value=get_completed_future(process))
    +
    +
    +@pytest.mark.asyncio
    +async def test_close():
    +    """The credential must define close, although it's a no-op because the credential has no transport"""
    +
    +    await AzureCliCredential().close()
    +
    +
    +@pytest.mark.asyncio
    +async def test_context_manager():
    +    """The credential must be a context manager, although it does nothing as one because it has no transport"""
    +
    +    async with AzureCliCredential():
    +        pass
    +
    +
    +@pytest.mark.skipif(not sys.platform.startswith("win"), reason="tests Windows-specific behavior")
    +@pytest.mark.asyncio
    +async def test_windows_fallback():
    +    """The credential should fall back to the sync implementation when not using ProactorEventLoop on Windows"""
    +
    +    sync_get_token = mock.Mock()
    +    with mock.patch("azure.identity.aio._credentials.azure_cli._SyncAzureCliCredential") as fallback:
    +        fallback.return_value = mock.Mock(get_token=sync_get_token)
    +        with mock.patch(AzureCliCredential.__module__ + ".asyncio.get_event_loop"):
    +            # asyncio.get_event_loop now returns Mock, i.e. never ProactorEventLoop
    +            credential = AzureCliCredential()
    +            await credential.get_token("scope")
    +
    +    assert sync_get_token.call_count == 1
    +
    +
    +@pytest.mark.asyncio
    +async def test_get_token():
    +    """The credential should parse the CLI's output to an AccessToken"""
    +
    +    access_token = "access token"
    +    valid_seconds = 42
    +    successful_output = json.dumps(
    +        {
    +            # expiresOn is a naive datetime representing valid_seconds from the epoch
    +            "expiresOn": datetime.fromtimestamp(valid_seconds).strftime("%Y-%m-%d %H:%M:%S.%f"),
    +            "accessToken": access_token,
    +            "subscription": "some-guid",
    +            "tenant": "some-guid",
    +            "tokenType": "Bearer",
    +        }
    +    )
    +
    +    with mock.patch(SUBPROCESS_EXEC, mock_exec(successful_output)):
    +        credential = AzureCliCredential()
    +        token = await credential.get_token("scope")
    +
    +    assert token.token == access_token
    +    assert type(token.expires_on) == int
    +    assert token.expires_on == valid_seconds
    +
    +
    +@pytest.mark.asyncio
    +async def test_cli_not_installed_linux():
    +    """The credential should raise CredentialUnavailableError when the CLI isn't installed"""
    +
    +    output = "/bin/sh: 1: az: not found"
    +    with mock.patch(SUBPROCESS_EXEC, mock_exec(output, return_code=127)):
    +        with pytest.raises(CredentialUnavailableError, match=CLI_NOT_FOUND):
    +            credential = AzureCliCredential()
    +            await credential.get_token("scope")
    +
    +
    +@pytest.mark.asyncio
    +async def test_cli_not_installed_windows():
    +    """The credential should raise CredentialUnavailableError when the CLI isn't installed"""
    +
    +    output = "'az' is not recognized as an internal or external command, operable program or batch file."
    +    with mock.patch(SUBPROCESS_EXEC, mock_exec(output, return_code=1)):
    +        with pytest.raises(CredentialUnavailableError, match=CLI_NOT_FOUND):
    +            credential = AzureCliCredential()
    +            await credential.get_token("scope")
    +
    +
    +@pytest.mark.asyncio
    +async def test_cannot_execute_shell():
    +    """The credential should raise CredentialUnavailableError when the subprocess doesn't start"""
    +
    +    with mock.patch(SUBPROCESS_EXEC, mock.Mock(side_effect=OSError())):
    +        with pytest.raises(CredentialUnavailableError):
    +            credential = AzureCliCredential()
    +            await credential.get_token("scope")
    +
    +
    +@pytest.mark.asyncio
    +async def test_not_logged_in():
    +    """When the CLI isn't logged in, the credential should raise an error containing the CLI's output"""
    +
    +    output = "ERROR: Please run 'az login' to setup account."
    +    with mock.patch(SUBPROCESS_EXEC, mock_exec(output, return_code=1)):
    +        with pytest.raises(ClientAuthenticationError, match=output):
    +            credential = AzureCliCredential()
    +            await credential.get_token("scope")
    +
    +
    +@pytest.mark.parametrize("output", TEST_ERROR_OUTPUTS)
    +@pytest.mark.asyncio
    +async def test_parsing_error_does_not_expose_token(output):
    +    """Errors during CLI output parsing shouldn't expose access tokens in that output"""
    +
    +    with mock.patch(SUBPROCESS_EXEC, mock_exec(output)):
    +        with pytest.raises(ClientAuthenticationError) as ex:
    +            credential = AzureCliCredential()
    +            await credential.get_token("scope")
    +
    +    assert "secret value" not in str(ex.value)
    +    assert "secret value" not in repr(ex.value)
    +
    +
    +@pytest.mark.parametrize("output", TEST_ERROR_OUTPUTS)
    +@pytest.mark.asyncio
    +async def test_subprocess_error_does_not_expose_token(output):
    +    """Errors from the subprocess shouldn't expose access tokens in CLI output"""
    +
    +    with mock.patch(SUBPROCESS_EXEC, mock_exec(output, return_code=1)):
    +        with pytest.raises(ClientAuthenticationError) as ex:
    +            credential = AzureCliCredential()
    +            await credential.get_token("scope")
    +
    +    assert "secret value" not in str(ex.value)
    +    assert "secret value" not in repr(ex.value)
    diff --git a/sdk/identity/azure-identity/tests/test_default.py b/sdk/identity/azure-identity/tests/test_default.py
    index 78e399b52f5f..e7b1b98353a0 100644
    --- a/sdk/identity/azure-identity/tests/test_default.py
    +++ b/sdk/identity/azure-identity/tests/test_default.py
    @@ -11,6 +11,7 @@
         SharedTokenCacheCredential,
     )
     from azure.identity._constants import EnvironmentVariables
    +from azure.identity._credentials.azure_cli import AzureCliCredential
     from azure.identity._credentials.managed_identity import ManagedIdentityCredential
     from six.moves.urllib_parse import urlparse
     
    @@ -101,6 +102,9 @@ def assert_credentials_not_present(chain, *excluded_credential_classes):
             credential = DefaultAzureCredential(exclude_shared_token_cache_credential=True)
             assert_credentials_not_present(credential, SharedTokenCacheCredential)
     
    +    credential = DefaultAzureCredential(exclude_cli_credential=True)
    +    assert_credentials_not_present(credential, AzureCliCredential)
    +
         # interactive auth is excluded by default
         credential = DefaultAzureCredential(exclude_interactive_browser_credential=False)
         actual = {c.__class__ for c in credential.credentials}
    diff --git a/sdk/identity/azure-identity/tests/test_default_async.py b/sdk/identity/azure-identity/tests/test_default_async.py
    index 6bbcc16667c0..6443e08c372a 100644
    --- a/sdk/identity/azure-identity/tests/test_default_async.py
    +++ b/sdk/identity/azure-identity/tests/test_default_async.py
    @@ -9,6 +9,7 @@
     
     from azure.identity import KnownAuthorities
     from azure.identity.aio import DefaultAzureCredential, SharedTokenCacheCredential
    +from azure.identity.aio._credentials.azure_cli import AzureCliCredential
     from azure.identity.aio._credentials.managed_identity import ManagedIdentityCredential
     from azure.identity._constants import EnvironmentVariables
     import pytest
    @@ -106,6 +107,9 @@ def assert_credentials_not_present(chain, *credential_classes):
             credential = DefaultAzureCredential(exclude_shared_token_cache_credential=True)
             assert_credentials_not_present(credential, SharedTokenCacheCredential)
     
    +    credential = DefaultAzureCredential(exclude_cli_credential=True)
    +    assert_credentials_not_present(credential, AzureCliCredential)
    +
     
     @pytest.mark.asyncio
     async def test_shared_cache_tenant_id():
    diff --git a/sdk/iothub/azure-mgmt-iotcentral/CHANGELOG.md b/sdk/iothub/azure-mgmt-iotcentral/CHANGELOG.md
    index 483f9a23ef99..9cd268f3fbb4 100644
    --- a/sdk/iothub/azure-mgmt-iotcentral/CHANGELOG.md
    +++ b/sdk/iothub/azure-mgmt-iotcentral/CHANGELOG.md
    @@ -1,5 +1,11 @@
     # Release History
     
    +## 3.0.0 (2020-03-09)
    +
    +**Breaking changes**
    +
    +- Removed operation AppsOperations.list_templates
    +
     ## 2.0.0 (2019-12-25)
     
     **Features**
    diff --git a/sdk/iothub/azure-mgmt-iotcentral/README.md b/sdk/iothub/azure-mgmt-iotcentral/README.md
    index 57711b63d701..4a2c0b7292bf 100644
    --- a/sdk/iothub/azure-mgmt-iotcentral/README.md
    +++ b/sdk/iothub/azure-mgmt-iotcentral/README.md
    @@ -1,29 +1,21 @@
    -## Microsoft Azure SDK for Python
    +# Microsoft Azure SDK for Python
     
     This is the Microsoft Azure IoTCentral Management Client Library.
    -
    -Azure Resource Manager (ARM) is the next generation of management APIs
    -that replace the old Azure Service Management (ASM).
    -
     This package has been tested with Python 2.7, 3.5, 3.6, 3.7 and 3.8.
    +For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/sdk)
     
    -For the older Azure Service Management (ASM) libraries, see
    -[azure-servicemanagement-legacy](https://pypi.python.org/pypi/azure-servicemanagement-legacy)
    -library.
     
    -For a more complete set of Azure libraries, see the
    -[azure](https://pypi.python.org/pypi/azure) bundle package.
    +# Usage
     
    -## Usage
    +For code examples, see [IoTCentral Management](https://docs.microsoft.com/python/api/overview/azure/)
    +on docs.microsoft.com.
     
    -For code examples, see [IoTCentral
    -Management](https://docs.microsoft.com/python/api/overview/azure/) on
    -docs.microsoft.com.
     
    -## Provide Feedback
    +# Provide Feedback
     
    -If you encounter any bugs or have suggestions, please file an issue in
    -the [Issues](https://github.com/Azure/azure-sdk-for-python/issues)
    +If you encounter any bugs or have suggestions, please file an issue in the
    +[Issues](https://github.com/Azure/azure-sdk-for-python/issues)
     section of the project.
     
    -![image](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-iotcentral%2FREADME.png)
    +
    +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-iotcentral%2FREADME.png)
    diff --git a/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/models/__init__.py b/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/models/__init__.py
    index ee902bf65a30..f352527b5348 100644
    --- a/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/models/__init__.py
    +++ b/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/models/__init__.py
    @@ -15,8 +15,7 @@
         from ._models_py3 import AppPatch
         from ._models_py3 import AppSkuInfo
         from ._models_py3 import AppTemplate
    -    from ._models_py3 import ErrorDetails, ErrorDetailsException
    -    from ._models_py3 import ErrorResponseBody
    +    from ._models_py3 import CloudErrorBody
         from ._models_py3 import Operation
         from ._models_py3 import OperationDisplay
         from ._models_py3 import OperationInputs
    @@ -27,8 +26,7 @@
         from ._models import AppPatch
         from ._models import AppSkuInfo
         from ._models import AppTemplate
    -    from ._models import ErrorDetails, ErrorDetailsException
    -    from ._models import ErrorResponseBody
    +    from ._models import CloudErrorBody
         from ._models import Operation
         from ._models import OperationDisplay
         from ._models import OperationInputs
    @@ -46,8 +44,7 @@
         'AppPatch',
         'AppSkuInfo',
         'AppTemplate',
    -    'ErrorDetails', 'ErrorDetailsException',
    -    'ErrorResponseBody',
    +    'CloudErrorBody',
         'Operation',
         'OperationDisplay',
         'OperationInputs',
    diff --git a/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/models/_models.py b/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/models/_models.py
    index 00700f06a6ee..0ab6e3d4113e 100644
    --- a/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/models/_models.py
    +++ b/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/models/_models.py
    @@ -96,8 +96,6 @@ class App(Resource):
             'type': {'readonly': True},
             'location': {'required': True},
             'application_id': {'readonly': True},
    -        'display_name': {'pattern': r'^.{1,200}$'},
    -        'subdomain': {'pattern': r'^[a-z0-9-]{1,63}$'},
             'sku': {'required': True},
         }
     
    @@ -181,8 +179,6 @@ class AppPatch(Model):
     
         _validation = {
             'application_id': {'readonly': True},
    -        'display_name': {'pattern': r'^.{1,200}$'},
    -        'subdomain': {'pattern': r'^[a-z0-9-]{1,63}$'},
         }
     
         _attribute_map = {
    @@ -274,14 +270,6 @@ def __init__(self, **kwargs):
     
     
     class CloudError(Model):
    -    """CloudError.
    -    """
    -
    -    _attribute_map = {
    -    }
    -
    -
    -class ErrorDetails(Model):
         """Error details.
     
         Variables are only populated by the server, and will be ignored when
    @@ -294,7 +282,7 @@ class ErrorDetails(Model):
         :ivar target: The target of the particular error.
         :vartype target: str
         :param details: A list of additional details about the error.
    -    :type details: list[~azure.mgmt.iotcentral.models.ErrorResponseBody]
    +    :type details: list[~azure.mgmt.iotcentral.models.CloudErrorBody]
         """
     
         _validation = {
    @@ -307,19 +295,19 @@ class ErrorDetails(Model):
             'code': {'key': 'error.code', 'type': 'str'},
             'message': {'key': 'error.message', 'type': 'str'},
             'target': {'key': 'error.target', 'type': 'str'},
    -        'details': {'key': 'error.details', 'type': '[ErrorResponseBody]'},
    +        'details': {'key': 'error.details', 'type': '[CloudErrorBody]'},
         }
     
         def __init__(self, **kwargs):
    -        super(ErrorDetails, self).__init__(**kwargs)
    +        super(CloudError, self).__init__(**kwargs)
             self.code = None
             self.message = None
             self.target = None
             self.details = kwargs.get('details', None)
     
     
    -class ErrorDetailsException(HttpOperationError):
    -    """Server responsed with exception of type: 'ErrorDetails'.
    +class CloudErrorException(HttpOperationError):
    +    """Server responsed with exception of type: 'CloudError'.
     
         :param deserialize: A deserializer
         :param response: Server response to be deserialized.
    @@ -327,10 +315,10 @@ class ErrorDetailsException(HttpOperationError):
     
         def __init__(self, deserialize, response, *args):
     
    -        super(ErrorDetailsException, self).__init__(deserialize, response, 'ErrorDetails', *args)
    +        super(CloudErrorException, self).__init__(deserialize, response, 'CloudError', *args)
     
     
    -class ErrorResponseBody(Model):
    +class CloudErrorBody(Model):
         """Details of error response.
     
         Variables are only populated by the server, and will be ignored when
    @@ -343,7 +331,7 @@ class ErrorResponseBody(Model):
         :ivar target: The target of the particular error.
         :vartype target: str
         :param details: A list of additional details about the error.
    -    :type details: list[~azure.mgmt.iotcentral.models.ErrorResponseBody]
    +    :type details: list[~azure.mgmt.iotcentral.models.CloudErrorBody]
         """
     
         _validation = {
    @@ -356,11 +344,11 @@ class ErrorResponseBody(Model):
             'code': {'key': 'code', 'type': 'str'},
             'message': {'key': 'message', 'type': 'str'},
             'target': {'key': 'target', 'type': 'str'},
    -        'details': {'key': 'details', 'type': '[ErrorResponseBody]'},
    +        'details': {'key': 'details', 'type': '[CloudErrorBody]'},
         }
     
         def __init__(self, **kwargs):
    -        super(ErrorResponseBody, self).__init__(**kwargs)
    +        super(CloudErrorBody, self).__init__(**kwargs)
             self.code = None
             self.message = None
             self.target = None
    @@ -447,7 +435,7 @@ class OperationInputs(Model):
         """
     
         _validation = {
    -        'name': {'required': True, 'pattern': r'^[a-z0-9-]{1,63}$'},
    +        'name': {'required': True},
         }
     
         _attribute_map = {
    diff --git a/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/models/_models_py3.py b/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/models/_models_py3.py
    index f7bd00d8b6bb..603a076e9104 100644
    --- a/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/models/_models_py3.py
    +++ b/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/models/_models_py3.py
    @@ -96,8 +96,6 @@ class App(Resource):
             'type': {'readonly': True},
             'location': {'required': True},
             'application_id': {'readonly': True},
    -        'display_name': {'pattern': r'^.{1,200}$'},
    -        'subdomain': {'pattern': r'^[a-z0-9-]{1,63}$'},
             'sku': {'required': True},
         }
     
    @@ -181,8 +179,6 @@ class AppPatch(Model):
     
         _validation = {
             'application_id': {'readonly': True},
    -        'display_name': {'pattern': r'^.{1,200}$'},
    -        'subdomain': {'pattern': r'^[a-z0-9-]{1,63}$'},
         }
     
         _attribute_map = {
    @@ -274,14 +270,6 @@ def __init__(self, **kwargs) -> None:
     
     
     class CloudError(Model):
    -    """CloudError.
    -    """
    -
    -    _attribute_map = {
    -    }
    -
    -
    -class ErrorDetails(Model):
         """Error details.
     
         Variables are only populated by the server, and will be ignored when
    @@ -294,7 +282,7 @@ class ErrorDetails(Model):
         :ivar target: The target of the particular error.
         :vartype target: str
         :param details: A list of additional details about the error.
    -    :type details: list[~azure.mgmt.iotcentral.models.ErrorResponseBody]
    +    :type details: list[~azure.mgmt.iotcentral.models.CloudErrorBody]
         """
     
         _validation = {
    @@ -307,19 +295,19 @@ class ErrorDetails(Model):
             'code': {'key': 'error.code', 'type': 'str'},
             'message': {'key': 'error.message', 'type': 'str'},
             'target': {'key': 'error.target', 'type': 'str'},
    -        'details': {'key': 'error.details', 'type': '[ErrorResponseBody]'},
    +        'details': {'key': 'error.details', 'type': '[CloudErrorBody]'},
         }
     
         def __init__(self, *, details=None, **kwargs) -> None:
    -        super(ErrorDetails, self).__init__(**kwargs)
    +        super(CloudError, self).__init__(**kwargs)
             self.code = None
             self.message = None
             self.target = None
             self.details = details
     
     
    -class ErrorDetailsException(HttpOperationError):
    -    """Server responsed with exception of type: 'ErrorDetails'.
    +class CloudErrorException(HttpOperationError):
    +    """Server responsed with exception of type: 'CloudError'.
     
         :param deserialize: A deserializer
         :param response: Server response to be deserialized.
    @@ -327,10 +315,10 @@ class ErrorDetailsException(HttpOperationError):
     
         def __init__(self, deserialize, response, *args):
     
    -        super(ErrorDetailsException, self).__init__(deserialize, response, 'ErrorDetails', *args)
    +        super(CloudErrorException, self).__init__(deserialize, response, 'CloudError', *args)
     
     
    -class ErrorResponseBody(Model):
    +class CloudErrorBody(Model):
         """Details of error response.
     
         Variables are only populated by the server, and will be ignored when
    @@ -343,7 +331,7 @@ class ErrorResponseBody(Model):
         :ivar target: The target of the particular error.
         :vartype target: str
         :param details: A list of additional details about the error.
    -    :type details: list[~azure.mgmt.iotcentral.models.ErrorResponseBody]
    +    :type details: list[~azure.mgmt.iotcentral.models.CloudErrorBody]
         """
     
         _validation = {
    @@ -356,11 +344,11 @@ class ErrorResponseBody(Model):
             'code': {'key': 'code', 'type': 'str'},
             'message': {'key': 'message', 'type': 'str'},
             'target': {'key': 'target', 'type': 'str'},
    -        'details': {'key': 'details', 'type': '[ErrorResponseBody]'},
    +        'details': {'key': 'details', 'type': '[CloudErrorBody]'},
         }
     
         def __init__(self, *, details=None, **kwargs) -> None:
    -        super(ErrorResponseBody, self).__init__(**kwargs)
    +        super(CloudErrorBody, self).__init__(**kwargs)
             self.code = None
             self.message = None
             self.target = None
    @@ -447,7 +435,7 @@ class OperationInputs(Model):
         """
     
         _validation = {
    -        'name': {'required': True, 'pattern': r'^[a-z0-9-]{1,63}$'},
    +        'name': {'required': True},
         }
     
         _attribute_map = {
    diff --git a/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/operations/_apps_operations.py b/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/operations/_apps_operations.py
    index 086d87e57451..2a7579673e9b 100644
    --- a/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/operations/_apps_operations.py
    +++ b/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/operations/_apps_operations.py
    @@ -11,6 +11,7 @@
     
     import uuid
     from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
     from msrest.polling import LROPoller, NoPolling
     from msrestazure.polling.arm_polling import ARMPolling
     
    @@ -58,8 +59,7 @@ def get(
             :return: App or ClientRawResponse if raw=true
             :rtype: ~azure.mgmt.iotcentral.models.App or
              ~msrest.pipeline.ClientRawResponse
    -        :raises:
    -         :class:`ErrorDetailsException`
    +        :raises: :class:`CloudError`
             """
             # Construct URL
             url = self.get.metadata['url']
    @@ -89,7 +89,9 @@ def get(
             response = self._client.send(request, stream=False, **operation_config)
     
             if response.status_code not in [200]:
    -            raise models.ErrorDetailsException(self._deserialize, response)
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
     
             deserialized = None
             if response.status_code == 200:
    @@ -137,7 +139,9 @@ def _create_or_update_initial(
             response = self._client.send(request, stream=False, **operation_config)
     
             if response.status_code not in [200, 201, 202]:
    -            raise models.ErrorDetailsException(self._deserialize, response)
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
     
             deserialized = None
     
    @@ -179,8 +183,7 @@ def create_or_update(
              ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.iotcentral.models.App]
              or
              ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.iotcentral.models.App]]
    -        :raises:
    -         :class:`ErrorDetailsException`
    +        :raises: :class:`CloudError`
             """
             raw_result = self._create_or_update_initial(
                 resource_group_name=resource_group_name,
    @@ -244,7 +247,9 @@ def _update_initial(
             response = self._client.send(request, stream=False, **operation_config)
     
             if response.status_code not in [200, 202]:
    -            raise models.ErrorDetailsException(self._deserialize, response)
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
     
             deserialized = None
     
    @@ -281,8 +286,7 @@ def update(
              ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.iotcentral.models.App]
              or
              ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.iotcentral.models.App]]
    -        :raises:
    -         :class:`ErrorDetailsException`
    +        :raises: :class:`CloudError`
             """
             raw_result = self._update_initial(
                 resource_group_name=resource_group_name,
    @@ -341,7 +345,9 @@ def _delete_initial(
             response = self._client.send(request, stream=False, **operation_config)
     
             if response.status_code not in [200, 202, 204]:
    -            raise models.ErrorDetailsException(self._deserialize, response)
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
     
             if raw:
                 client_raw_response = ClientRawResponse(None, response)
    @@ -366,8 +372,7 @@ def delete(
              ClientRawResponse if raw==True
             :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
              ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    -        :raises:
    -         :class:`ErrorDetailsException`
    +        :raises: :class:`CloudError`
             """
             raw_result = self._delete_initial(
                 resource_group_name=resource_group_name,
    @@ -403,8 +408,7 @@ def list_by_subscription(
             :return: An iterator like instance of App
             :rtype:
              ~azure.mgmt.iotcentral.models.AppPaged[~azure.mgmt.iotcentral.models.App]
    -        :raises:
    -         :class:`ErrorDetailsException`
    +        :raises: :class:`CloudError`
             """
             def prepare_request(next_link=None):
                 if not next_link:
    @@ -443,7 +447,9 @@ def internal_paging(next_link=None):
                 response = self._client.send(request, stream=False, **operation_config)
     
                 if response.status_code not in [200]:
    -                raise models.ErrorDetailsException(self._deserialize, response)
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
     
                 return response
     
    @@ -471,8 +477,7 @@ def list_by_resource_group(
             :return: An iterator like instance of App
             :rtype:
              ~azure.mgmt.iotcentral.models.AppPaged[~azure.mgmt.iotcentral.models.App]
    -        :raises:
    -         :class:`ErrorDetailsException`
    +        :raises: :class:`CloudError`
             """
             def prepare_request(next_link=None):
                 if not next_link:
    @@ -512,7 +517,9 @@ def internal_paging(next_link=None):
                 response = self._client.send(request, stream=False, **operation_config)
     
                 if response.status_code not in [200]:
    -                raise models.ErrorDetailsException(self._deserialize, response)
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
     
                 return response
     
    @@ -542,8 +549,7 @@ def check_name_availability(
             :return: AppAvailabilityInfo or ClientRawResponse if raw=true
             :rtype: ~azure.mgmt.iotcentral.models.AppAvailabilityInfo or
              ~msrest.pipeline.ClientRawResponse
    -        :raises:
    -         :class:`ErrorDetailsException`
    +        :raises: :class:`CloudError`
             """
             operation_inputs = models.OperationInputs(name=name, type=type)
     
    @@ -577,7 +583,9 @@ def check_name_availability(
             response = self._client.send(request, stream=False, **operation_config)
     
             if response.status_code not in [200]:
    -            raise models.ErrorDetailsException(self._deserialize, response)
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
     
             deserialized = None
             if response.status_code == 200:
    @@ -607,8 +615,7 @@ def check_subdomain_availability(
             :return: AppAvailabilityInfo or ClientRawResponse if raw=true
             :rtype: ~azure.mgmt.iotcentral.models.AppAvailabilityInfo or
              ~msrest.pipeline.ClientRawResponse
    -        :raises:
    -         :class:`ErrorDetailsException`
    +        :raises: :class:`CloudError`
             """
             operation_inputs = models.OperationInputs(name=name, type=type)
     
    @@ -642,7 +649,9 @@ def check_subdomain_availability(
             response = self._client.send(request, stream=False, **operation_config)
     
             if response.status_code not in [200]:
    -            raise models.ErrorDetailsException(self._deserialize, response)
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
     
             deserialized = None
             if response.status_code == 200:
    @@ -667,8 +676,7 @@ def list_templates(
             :return: An iterator like instance of AppTemplate
             :rtype:
              ~azure.mgmt.iotcentral.models.AppTemplatePaged[~azure.mgmt.iotcentral.models.AppTemplate]
    -        :raises:
    -         :class:`ErrorDetailsException`
    +        :raises: :class:`CloudError`
             """
             def prepare_request(next_link=None):
                 if not next_link:
    @@ -707,7 +715,9 @@ def internal_paging(next_link=None):
                 response = self._client.send(request, stream=False, **operation_config)
     
                 if response.status_code not in [200]:
    -                raise models.ErrorDetailsException(self._deserialize, response)
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
     
                 return response
     
    diff --git a/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/operations/_operations.py b/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/operations/_operations.py
    index c8c90e368a44..764115f4f92d 100644
    --- a/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/operations/_operations.py
    +++ b/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/operations/_operations.py
    @@ -11,6 +11,7 @@
     
     import uuid
     from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
     
     from .. import models
     
    @@ -50,8 +51,7 @@ def list(
             :return: An iterator like instance of Operation
             :rtype:
              ~azure.mgmt.iotcentral.models.OperationPaged[~azure.mgmt.iotcentral.models.Operation]
    -        :raises:
    -         :class:`ErrorDetailsException`
    +        :raises: :class:`CloudError`
             """
             def prepare_request(next_link=None):
                 if not next_link:
    @@ -86,7 +86,9 @@ def internal_paging(next_link=None):
                 response = self._client.send(request, stream=False, **operation_config)
     
                 if response.status_code not in [200]:
    -                raise models.ErrorDetailsException(self._deserialize, response)
    +                exp = CloudError(response)
    +                exp.request_id = response.headers.get('x-ms-request-id')
    +                raise exp
     
                 return response
     
    diff --git a/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/version.py b/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/version.py
    index 53c4c7ea05e8..7f225c6aab41 100644
    --- a/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/version.py
    +++ b/sdk/iothub/azure-mgmt-iotcentral/azure/mgmt/iotcentral/version.py
    @@ -9,5 +9,5 @@
     # regenerated.
     # --------------------------------------------------------------------------
     
    -VERSION = "2.0.0"
    +VERSION = "3.0.0"
     
    diff --git a/sdk/iothub/azure-mgmt-iothub/CHANGELOG.md b/sdk/iothub/azure-mgmt-iothub/CHANGELOG.md
    index 25b3a653be73..127e133450ab 100644
    --- a/sdk/iothub/azure-mgmt-iothub/CHANGELOG.md
    +++ b/sdk/iothub/azure-mgmt-iothub/CHANGELOG.md
    @@ -1,5 +1,9 @@
     # Release History
     
    +## 0.11.0 (2020-03-17)
    +
    +  - Preview API versions 2018-12-01-preview, 2019-03-22-preview, 2019-07-01-preview included
    +
     ## 0.10.0 (2020-01-09)
     
     **Features**
    diff --git a/sdk/iothub/azure-mgmt-iothub/README.md b/sdk/iothub/azure-mgmt-iothub/README.md
    index fd2ff607ba9f..8b1b9e790551 100644
    --- a/sdk/iothub/azure-mgmt-iothub/README.md
    +++ b/sdk/iothub/azure-mgmt-iothub/README.md
    @@ -1,29 +1,21 @@
    -## Microsoft Azure SDK for Python
    +# Microsoft Azure SDK for Python
     
     This is the Microsoft Azure IoTHub Management Client Library.
    -
    -Azure Resource Manager (ARM) is the next generation of management APIs
    -that replace the old Azure Service Management (ASM).
    -
     This package has been tested with Python 2.7, 3.5, 3.6, 3.7 and 3.8.
    +For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/)
     
    -For the older Azure Service Management (ASM) libraries, see
    -[azure-servicemanagement-legacy](https://pypi.python.org/pypi/azure-servicemanagement-legacy)
    -library.
     
    -For a more complete set of Azure libraries, see the
    -[azure](https://pypi.python.org/pypi/azure) bundle package.
    +# Usage
     
    -## Usage
    +For code examples, see [IoTHub Management](https://docs.microsoft.com/python/api/overview/azure/iot)
    +on docs.microsoft.com.
     
    -For code examples, see [IoTHub
    -Management](https://docs.microsoft.com/python/api/overview/azure/iot) on
    -docs.microsoft.com.
     
    -## Provide Feedback
    +# Provide Feedback
     
    -If you encounter any bugs or have suggestions, please file an issue in
    -the [Issues](https://github.com/Azure/azure-sdk-for-python/issues)
    +If you encounter any bugs or have suggestions, please file an issue in the
    +[Issues](https://github.com/Azure/azure-sdk-for-python/issues)
     section of the project.
     
    -![image](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-iothub%2FREADME.png)
    +
    +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-iothub%2FREADME.png)
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/_iot_hub_client.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/_iot_hub_client.py
    index 0ca28ed0e6e8..2bd6ef94e63c 100644
    --- a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/_iot_hub_client.py
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/_iot_hub_client.py
    @@ -77,7 +77,10 @@ def models(cls, api_version=DEFAULT_API_VERSION):
                * 2017-07-01: :mod:`v2017_07_01.models`
                * 2018-01-22: :mod:`v2018_01_22.models`
                * 2018-04-01: :mod:`v2018_04_01.models`
    +           * 2018-12-01-preview: :mod:`v2018_12_01_preview.models`
                * 2019-03-22: :mod:`v2019_03_22.models`
    +           * 2019-03-22-preview: :mod:`v2019_03_22_preview.models`
    +           * 2019-07-01-preview: :mod:`v2019_07_01_preview.models`
                * 2019-11-04: :mod:`v2019_11_04.models`
             """
             if api_version == '2016-02-03':
    @@ -95,9 +98,18 @@ def models(cls, api_version=DEFAULT_API_VERSION):
             elif api_version == '2018-04-01':
                 from .v2018_04_01 import models
                 return models
    +        elif api_version == '2018-12-01-preview':
    +            from .v2018_12_01_preview import models
    +            return models
             elif api_version == '2019-03-22':
                 from .v2019_03_22 import models
                 return models
    +        elif api_version == '2019-03-22-preview':
    +            from .v2019_03_22_preview import models
    +            return models
    +        elif api_version == '2019-07-01-preview':
    +            from .v2019_07_01_preview import models
    +            return models
             elif api_version == '2019-11-04':
                 from .v2019_11_04 import models
                 return models
    @@ -110,7 +122,10 @@ def certificates(self):
                * 2017-07-01: :class:`CertificatesOperations`
                * 2018-01-22: :class:`CertificatesOperations`
                * 2018-04-01: :class:`CertificatesOperations`
    +           * 2018-12-01-preview: :class:`CertificatesOperations`
                * 2019-03-22: :class:`CertificatesOperations`
    +           * 2019-03-22-preview: :class:`CertificatesOperations`
    +           * 2019-07-01-preview: :class:`CertificatesOperations`
                * 2019-11-04: :class:`CertificatesOperations`
             """
             api_version = self._get_api_version('certificates')
    @@ -120,8 +135,14 @@ def certificates(self):
                 from .v2018_01_22.operations import CertificatesOperations as OperationClass
             elif api_version == '2018-04-01':
                 from .v2018_04_01.operations import CertificatesOperations as OperationClass
    +        elif api_version == '2018-12-01-preview':
    +            from .v2018_12_01_preview.operations import CertificatesOperations as OperationClass
             elif api_version == '2019-03-22':
                 from .v2019_03_22.operations import CertificatesOperations as OperationClass
    +        elif api_version == '2019-03-22-preview':
    +            from .v2019_03_22_preview.operations import CertificatesOperations as OperationClass
    +        elif api_version == '2019-07-01-preview':
    +            from .v2019_07_01_preview.operations import CertificatesOperations as OperationClass
             elif api_version == '2019-11-04':
                 from .v2019_11_04.operations import CertificatesOperations as OperationClass
             else:
    @@ -133,11 +154,17 @@ def iot_hub(self):
             """Instance depends on the API version:
     
                * 2019-03-22: :class:`IotHubOperations`
    +           * 2019-03-22-preview: :class:`IotHubOperations`
    +           * 2019-07-01-preview: :class:`IotHubOperations`
                * 2019-11-04: :class:`IotHubOperations`
             """
             api_version = self._get_api_version('iot_hub')
             if api_version == '2019-03-22':
                 from .v2019_03_22.operations import IotHubOperations as OperationClass
    +        elif api_version == '2019-03-22-preview':
    +            from .v2019_03_22_preview.operations import IotHubOperations as OperationClass
    +        elif api_version == '2019-07-01-preview':
    +            from .v2019_07_01_preview.operations import IotHubOperations as OperationClass
             elif api_version == '2019-11-04':
                 from .v2019_11_04.operations import IotHubOperations as OperationClass
             else:
    @@ -153,7 +180,10 @@ def iot_hub_resource(self):
                * 2017-07-01: :class:`IotHubResourceOperations`
                * 2018-01-22: :class:`IotHubResourceOperations`
                * 2018-04-01: :class:`IotHubResourceOperations`
    +           * 2018-12-01-preview: :class:`IotHubResourceOperations`
                * 2019-03-22: :class:`IotHubResourceOperations`
    +           * 2019-03-22-preview: :class:`IotHubResourceOperations`
    +           * 2019-07-01-preview: :class:`IotHubResourceOperations`
                * 2019-11-04: :class:`IotHubResourceOperations`
             """
             api_version = self._get_api_version('iot_hub_resource')
    @@ -167,8 +197,14 @@ def iot_hub_resource(self):
                 from .v2018_01_22.operations import IotHubResourceOperations as OperationClass
             elif api_version == '2018-04-01':
                 from .v2018_04_01.operations import IotHubResourceOperations as OperationClass
    +        elif api_version == '2018-12-01-preview':
    +            from .v2018_12_01_preview.operations import IotHubResourceOperations as OperationClass
             elif api_version == '2019-03-22':
                 from .v2019_03_22.operations import IotHubResourceOperations as OperationClass
    +        elif api_version == '2019-03-22-preview':
    +            from .v2019_03_22_preview.operations import IotHubResourceOperations as OperationClass
    +        elif api_version == '2019-07-01-preview':
    +            from .v2019_07_01_preview.operations import IotHubResourceOperations as OperationClass
             elif api_version == '2019-11-04':
                 from .v2019_11_04.operations import IotHubResourceOperations as OperationClass
             else:
    @@ -182,7 +218,10 @@ def operations(self):
                * 2017-07-01: :class:`Operations`
                * 2018-01-22: :class:`Operations`
                * 2018-04-01: :class:`Operations`
    +           * 2018-12-01-preview: :class:`Operations`
                * 2019-03-22: :class:`Operations`
    +           * 2019-03-22-preview: :class:`Operations`
    +           * 2019-07-01-preview: :class:`Operations`
                * 2019-11-04: :class:`Operations`
             """
             api_version = self._get_api_version('operations')
    @@ -192,8 +231,14 @@ def operations(self):
                 from .v2018_01_22.operations import Operations as OperationClass
             elif api_version == '2018-04-01':
                 from .v2018_04_01.operations import Operations as OperationClass
    +        elif api_version == '2018-12-01-preview':
    +            from .v2018_12_01_preview.operations import Operations as OperationClass
             elif api_version == '2019-03-22':
                 from .v2019_03_22.operations import Operations as OperationClass
    +        elif api_version == '2019-03-22-preview':
    +            from .v2019_03_22_preview.operations import Operations as OperationClass
    +        elif api_version == '2019-07-01-preview':
    +            from .v2019_07_01_preview.operations import Operations as OperationClass
             elif api_version == '2019-11-04':
                 from .v2019_11_04.operations import Operations as OperationClass
             else:
    @@ -205,14 +250,23 @@ def resource_provider_common(self):
             """Instance depends on the API version:
     
                * 2018-04-01: :class:`ResourceProviderCommonOperations`
    +           * 2018-12-01-preview: :class:`ResourceProviderCommonOperations`
                * 2019-03-22: :class:`ResourceProviderCommonOperations`
    +           * 2019-03-22-preview: :class:`ResourceProviderCommonOperations`
    +           * 2019-07-01-preview: :class:`ResourceProviderCommonOperations`
                * 2019-11-04: :class:`ResourceProviderCommonOperations`
             """
             api_version = self._get_api_version('resource_provider_common')
             if api_version == '2018-04-01':
                 from .v2018_04_01.operations import ResourceProviderCommonOperations as OperationClass
    +        elif api_version == '2018-12-01-preview':
    +            from .v2018_12_01_preview.operations import ResourceProviderCommonOperations as OperationClass
             elif api_version == '2019-03-22':
                 from .v2019_03_22.operations import ResourceProviderCommonOperations as OperationClass
    +        elif api_version == '2019-03-22-preview':
    +            from .v2019_03_22_preview.operations import ResourceProviderCommonOperations as OperationClass
    +        elif api_version == '2019-07-01-preview':
    +            from .v2019_07_01_preview.operations import ResourceProviderCommonOperations as OperationClass
             elif api_version == '2019-11-04':
                 from .v2019_11_04.operations import ResourceProviderCommonOperations as OperationClass
             else:
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/__init__.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/__init__.py
    new file mode 100644
    index 000000000000..867dea34192d
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/__init__.py
    @@ -0,0 +1,19 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._configuration import IotHubClientConfiguration
    +from ._iot_hub_client import IotHubClient
    +__all__ = ['IotHubClient', 'IotHubClientConfiguration']
    +
    +from .version import VERSION
    +
    +__version__ = VERSION
    +
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/_configuration.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/_configuration.py
    new file mode 100644
    index 000000000000..b2e8885bcfe2
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/_configuration.py
    @@ -0,0 +1,48 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +from msrestazure import AzureConfiguration
    +
    +from .version import VERSION
    +
    +
    +class IotHubClientConfiguration(AzureConfiguration):
    +    """Configuration for IotHubClient
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    :param subscription_id: The subscription identifier.
    +    :type subscription_id: str
    +    :param str base_url: Service URL
    +    """
    +
    +    def __init__(
    +            self, credentials, subscription_id, base_url=None):
    +
    +        if credentials is None:
    +            raise ValueError("Parameter 'credentials' must not be None.")
    +        if subscription_id is None:
    +            raise ValueError("Parameter 'subscription_id' must not be None.")
    +        if not base_url:
    +            base_url = 'https://management.azure.com'
    +
    +        super(IotHubClientConfiguration, self).__init__(base_url)
    +
    +        # Starting Autorest.Python 4.0.64, make connection pool activated by default
    +        self.keep_alive = True
    +
    +        self.add_user_agent('azure-mgmt-iothub/{}'.format(VERSION))
    +        self.add_user_agent('Azure-SDK-For-Python')
    +
    +        self.credentials = credentials
    +        self.subscription_id = subscription_id
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/_iot_hub_client.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/_iot_hub_client.py
    new file mode 100644
    index 000000000000..c4a311959d49
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/_iot_hub_client.py
    @@ -0,0 +1,64 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.service_client import SDKClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration import IotHubClientConfiguration
    +from .operations import Operations
    +from .operations import IotHubResourceOperations
    +from .operations import ResourceProviderCommonOperations
    +from .operations import CertificatesOperations
    +from . import models
    +
    +
    +class IotHubClient(SDKClient):
    +    """Use this API to manage the IoT hubs in your Azure subscription.
    +
    +    :ivar config: Configuration for client.
    +    :vartype config: IotHubClientConfiguration
    +
    +    :ivar operations: Operations operations
    +    :vartype operations: azure.mgmt.iothub.operations.Operations
    +    :ivar iot_hub_resource: IotHubResource operations
    +    :vartype iot_hub_resource: azure.mgmt.iothub.operations.IotHubResourceOperations
    +    :ivar resource_provider_common: ResourceProviderCommon operations
    +    :vartype resource_provider_common: azure.mgmt.iothub.operations.ResourceProviderCommonOperations
    +    :ivar certificates: Certificates operations
    +    :vartype certificates: azure.mgmt.iothub.operations.CertificatesOperations
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    :param subscription_id: The subscription identifier.
    +    :type subscription_id: str
    +    :param str base_url: Service URL
    +    """
    +
    +    def __init__(
    +            self, credentials, subscription_id, base_url=None):
    +
    +        self.config = IotHubClientConfiguration(credentials, subscription_id, base_url)
    +        super(IotHubClient, self).__init__(self.config.credentials, self.config)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '2018-12-01-preview'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +        self.operations = Operations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.iot_hub_resource = IotHubResourceOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.resource_provider_common = ResourceProviderCommonOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.certificates = CertificatesOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/__init__.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/__init__.py
    new file mode 100644
    index 000000000000..bf2e36e136c9
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/__init__.py
    @@ -0,0 +1,236 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +try:
    +    from ._models_py3 import CertificateBodyDescription
    +    from ._models_py3 import CertificateDescription
    +    from ._models_py3 import CertificateListDescription
    +    from ._models_py3 import CertificateProperties
    +    from ._models_py3 import CertificatePropertiesWithNonce
    +    from ._models_py3 import CertificateVerificationDescription
    +    from ._models_py3 import CertificateWithNonceDescription
    +    from ._models_py3 import CloudToDeviceProperties
    +    from ._models_py3 import EndpointHealthData
    +    from ._models_py3 import ErrorDetails, ErrorDetailsException
    +    from ._models_py3 import EventHubConsumerGroupInfo
    +    from ._models_py3 import EventHubProperties
    +    from ._models_py3 import ExportDevicesRequest
    +    from ._models_py3 import FallbackRouteProperties
    +    from ._models_py3 import FeedbackProperties
    +    from ._models_py3 import ImportDevicesRequest
    +    from ._models_py3 import IotHubCapacity
    +    from ._models_py3 import IotHubDescription
    +    from ._models_py3 import IotHubLocationDescription
    +    from ._models_py3 import IotHubNameAvailabilityInfo
    +    from ._models_py3 import IotHubProperties
    +    from ._models_py3 import IotHubPropertiesDeviceStreams
    +    from ._models_py3 import IotHubQuotaMetricInfo
    +    from ._models_py3 import IotHubSkuDescription
    +    from ._models_py3 import IotHubSkuInfo
    +    from ._models_py3 import IpFilterRule
    +    from ._models_py3 import JobResponse
    +    from ._models_py3 import MatchedRoute
    +    from ._models_py3 import MessagingEndpointProperties
    +    from ._models_py3 import Name
    +    from ._models_py3 import Operation
    +    from ._models_py3 import OperationDisplay
    +    from ._models_py3 import OperationInputs
    +    from ._models_py3 import RegistryStatistics
    +    from ._models_py3 import Resource
    +    from ._models_py3 import RouteCompilationError
    +    from ._models_py3 import RouteErrorPosition
    +    from ._models_py3 import RouteErrorRange
    +    from ._models_py3 import RouteProperties
    +    from ._models_py3 import RoutingEndpoints
    +    from ._models_py3 import RoutingEventHubProperties
    +    from ._models_py3 import RoutingMessage
    +    from ._models_py3 import RoutingProperties
    +    from ._models_py3 import RoutingServiceBusQueueEndpointProperties
    +    from ._models_py3 import RoutingServiceBusTopicEndpointProperties
    +    from ._models_py3 import RoutingStorageContainerProperties
    +    from ._models_py3 import RoutingTwin
    +    from ._models_py3 import RoutingTwinProperties
    +    from ._models_py3 import SharedAccessSignatureAuthorizationRule
    +    from ._models_py3 import StorageEndpointProperties
    +    from ._models_py3 import TagsResource
    +    from ._models_py3 import TestAllRoutesInput
    +    from ._models_py3 import TestAllRoutesResult
    +    from ._models_py3 import TestRouteInput
    +    from ._models_py3 import TestRouteResult
    +    from ._models_py3 import TestRouteResultDetails
    +    from ._models_py3 import UserSubscriptionQuota
    +    from ._models_py3 import UserSubscriptionQuotaListResult
    +except (SyntaxError, ImportError):
    +    from ._models import CertificateBodyDescription
    +    from ._models import CertificateDescription
    +    from ._models import CertificateListDescription
    +    from ._models import CertificateProperties
    +    from ._models import CertificatePropertiesWithNonce
    +    from ._models import CertificateVerificationDescription
    +    from ._models import CertificateWithNonceDescription
    +    from ._models import CloudToDeviceProperties
    +    from ._models import EndpointHealthData
    +    from ._models import ErrorDetails, ErrorDetailsException
    +    from ._models import EventHubConsumerGroupInfo
    +    from ._models import EventHubProperties
    +    from ._models import ExportDevicesRequest
    +    from ._models import FallbackRouteProperties
    +    from ._models import FeedbackProperties
    +    from ._models import ImportDevicesRequest
    +    from ._models import IotHubCapacity
    +    from ._models import IotHubDescription
    +    from ._models import IotHubLocationDescription
    +    from ._models import IotHubNameAvailabilityInfo
    +    from ._models import IotHubProperties
    +    from ._models import IotHubPropertiesDeviceStreams
    +    from ._models import IotHubQuotaMetricInfo
    +    from ._models import IotHubSkuDescription
    +    from ._models import IotHubSkuInfo
    +    from ._models import IpFilterRule
    +    from ._models import JobResponse
    +    from ._models import MatchedRoute
    +    from ._models import MessagingEndpointProperties
    +    from ._models import Name
    +    from ._models import Operation
    +    from ._models import OperationDisplay
    +    from ._models import OperationInputs
    +    from ._models import RegistryStatistics
    +    from ._models import Resource
    +    from ._models import RouteCompilationError
    +    from ._models import RouteErrorPosition
    +    from ._models import RouteErrorRange
    +    from ._models import RouteProperties
    +    from ._models import RoutingEndpoints
    +    from ._models import RoutingEventHubProperties
    +    from ._models import RoutingMessage
    +    from ._models import RoutingProperties
    +    from ._models import RoutingServiceBusQueueEndpointProperties
    +    from ._models import RoutingServiceBusTopicEndpointProperties
    +    from ._models import RoutingStorageContainerProperties
    +    from ._models import RoutingTwin
    +    from ._models import RoutingTwinProperties
    +    from ._models import SharedAccessSignatureAuthorizationRule
    +    from ._models import StorageEndpointProperties
    +    from ._models import TagsResource
    +    from ._models import TestAllRoutesInput
    +    from ._models import TestAllRoutesResult
    +    from ._models import TestRouteInput
    +    from ._models import TestRouteResult
    +    from ._models import TestRouteResultDetails
    +    from ._models import UserSubscriptionQuota
    +    from ._models import UserSubscriptionQuotaListResult
    +from ._paged_models import EndpointHealthDataPaged
    +from ._paged_models import EventHubConsumerGroupInfoPaged
    +from ._paged_models import IotHubDescriptionPaged
    +from ._paged_models import IotHubQuotaMetricInfoPaged
    +from ._paged_models import IotHubSkuDescriptionPaged
    +from ._paged_models import JobResponsePaged
    +from ._paged_models import OperationPaged
    +from ._paged_models import SharedAccessSignatureAuthorizationRulePaged
    +from ._iot_hub_client_enums import (
    +    AccessRights,
    +    IpFilterActionType,
    +    RoutingSource,
    +    Capabilities,
    +    IotHubReplicaRoleType,
    +    IotHubSku,
    +    IotHubSkuTier,
    +    EndpointHealthStatus,
    +    JobType,
    +    JobStatus,
    +    IotHubScaleType,
    +    IotHubNameUnavailabilityReason,
    +    TestResultStatus,
    +    RouteErrorSeverity,
    +)
    +
    +__all__ = [
    +    'CertificateBodyDescription',
    +    'CertificateDescription',
    +    'CertificateListDescription',
    +    'CertificateProperties',
    +    'CertificatePropertiesWithNonce',
    +    'CertificateVerificationDescription',
    +    'CertificateWithNonceDescription',
    +    'CloudToDeviceProperties',
    +    'EndpointHealthData',
    +    'ErrorDetails', 'ErrorDetailsException',
    +    'EventHubConsumerGroupInfo',
    +    'EventHubProperties',
    +    'ExportDevicesRequest',
    +    'FallbackRouteProperties',
    +    'FeedbackProperties',
    +    'ImportDevicesRequest',
    +    'IotHubCapacity',
    +    'IotHubDescription',
    +    'IotHubLocationDescription',
    +    'IotHubNameAvailabilityInfo',
    +    'IotHubProperties',
    +    'IotHubPropertiesDeviceStreams',
    +    'IotHubQuotaMetricInfo',
    +    'IotHubSkuDescription',
    +    'IotHubSkuInfo',
    +    'IpFilterRule',
    +    'JobResponse',
    +    'MatchedRoute',
    +    'MessagingEndpointProperties',
    +    'Name',
    +    'Operation',
    +    'OperationDisplay',
    +    'OperationInputs',
    +    'RegistryStatistics',
    +    'Resource',
    +    'RouteCompilationError',
    +    'RouteErrorPosition',
    +    'RouteErrorRange',
    +    'RouteProperties',
    +    'RoutingEndpoints',
    +    'RoutingEventHubProperties',
    +    'RoutingMessage',
    +    'RoutingProperties',
    +    'RoutingServiceBusQueueEndpointProperties',
    +    'RoutingServiceBusTopicEndpointProperties',
    +    'RoutingStorageContainerProperties',
    +    'RoutingTwin',
    +    'RoutingTwinProperties',
    +    'SharedAccessSignatureAuthorizationRule',
    +    'StorageEndpointProperties',
    +    'TagsResource',
    +    'TestAllRoutesInput',
    +    'TestAllRoutesResult',
    +    'TestRouteInput',
    +    'TestRouteResult',
    +    'TestRouteResultDetails',
    +    'UserSubscriptionQuota',
    +    'UserSubscriptionQuotaListResult',
    +    'OperationPaged',
    +    'IotHubDescriptionPaged',
    +    'IotHubSkuDescriptionPaged',
    +    'EventHubConsumerGroupInfoPaged',
    +    'JobResponsePaged',
    +    'IotHubQuotaMetricInfoPaged',
    +    'EndpointHealthDataPaged',
    +    'SharedAccessSignatureAuthorizationRulePaged',
    +    'AccessRights',
    +    'IpFilterActionType',
    +    'RoutingSource',
    +    'Capabilities',
    +    'IotHubReplicaRoleType',
    +    'IotHubSku',
    +    'IotHubSkuTier',
    +    'EndpointHealthStatus',
    +    'JobType',
    +    'JobStatus',
    +    'IotHubScaleType',
    +    'IotHubNameUnavailabilityReason',
    +    'TestResultStatus',
    +    'RouteErrorSeverity',
    +]
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/_iot_hub_client_enums.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/_iot_hub_client_enums.py
    new file mode 100644
    index 000000000000..e2619c34c7ed
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/_iot_hub_client_enums.py
    @@ -0,0 +1,134 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from enum import Enum
    +
    +
    +class AccessRights(str, Enum):
    +
    +    registry_read = "RegistryRead"
    +    registry_write = "RegistryWrite"
    +    service_connect = "ServiceConnect"
    +    device_connect = "DeviceConnect"
    +    registry_read_registry_write = "RegistryRead, RegistryWrite"
    +    registry_read_service_connect = "RegistryRead, ServiceConnect"
    +    registry_read_device_connect = "RegistryRead, DeviceConnect"
    +    registry_write_service_connect = "RegistryWrite, ServiceConnect"
    +    registry_write_device_connect = "RegistryWrite, DeviceConnect"
    +    service_connect_device_connect = "ServiceConnect, DeviceConnect"
    +    registry_read_registry_write_service_connect = "RegistryRead, RegistryWrite, ServiceConnect"
    +    registry_read_registry_write_device_connect = "RegistryRead, RegistryWrite, DeviceConnect"
    +    registry_read_service_connect_device_connect = "RegistryRead, ServiceConnect, DeviceConnect"
    +    registry_write_service_connect_device_connect = "RegistryWrite, ServiceConnect, DeviceConnect"
    +    registry_read_registry_write_service_connect_device_connect = "RegistryRead, RegistryWrite, ServiceConnect, DeviceConnect"
    +
    +
    +class IpFilterActionType(str, Enum):
    +
    +    accept = "Accept"
    +    reject = "Reject"
    +
    +
    +class RoutingSource(str, Enum):
    +
    +    invalid = "Invalid"
    +    device_messages = "DeviceMessages"
    +    twin_change_events = "TwinChangeEvents"
    +    device_lifecycle_events = "DeviceLifecycleEvents"
    +    device_job_lifecycle_events = "DeviceJobLifecycleEvents"
    +
    +
    +class Capabilities(str, Enum):
    +
    +    none = "None"
    +    device_management = "DeviceManagement"
    +
    +
    +class IotHubReplicaRoleType(str, Enum):
    +
    +    primary = "primary"
    +    secondary = "secondary"
    +
    +
    +class IotHubSku(str, Enum):
    +
    +    f1 = "F1"
    +    s1 = "S1"
    +    s2 = "S2"
    +    s3 = "S3"
    +    b1 = "B1"
    +    b2 = "B2"
    +    b3 = "B3"
    +
    +
    +class IotHubSkuTier(str, Enum):
    +
    +    free = "Free"
    +    standard = "Standard"
    +    basic = "Basic"
    +
    +
    +class EndpointHealthStatus(str, Enum):
    +
    +    unknown = "unknown"
    +    healthy = "healthy"
    +    unhealthy = "unhealthy"
    +    dead = "dead"
    +
    +
    +class JobType(str, Enum):
    +
    +    unknown = "unknown"
    +    export = "export"
    +    import_enum = "import"
    +    backup = "backup"
    +    read_device_properties = "readDeviceProperties"
    +    write_device_properties = "writeDeviceProperties"
    +    update_device_configuration = "updateDeviceConfiguration"
    +    reboot_device = "rebootDevice"
    +    factory_reset_device = "factoryResetDevice"
    +    firmware_update = "firmwareUpdate"
    +
    +
    +class JobStatus(str, Enum):
    +
    +    unknown = "unknown"
    +    enqueued = "enqueued"
    +    running = "running"
    +    completed = "completed"
    +    failed = "failed"
    +    cancelled = "cancelled"
    +
    +
    +class IotHubScaleType(str, Enum):
    +
    +    automatic = "Automatic"
    +    manual = "Manual"
    +    none = "None"
    +
    +
    +class IotHubNameUnavailabilityReason(str, Enum):
    +
    +    invalid = "Invalid"
    +    already_exists = "AlreadyExists"
    +
    +
    +class TestResultStatus(str, Enum):
    +
    +    undefined = "undefined"
    +    false = "false"
    +    true = "true"
    +
    +
    +class RouteErrorSeverity(str, Enum):
    +
    +    error = "error"
    +    warning = "warning"
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/_models.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/_models.py
    new file mode 100644
    index 000000000000..0fa14e4d9dfa
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/_models.py
    @@ -0,0 +1,2043 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from msrest.exceptions import HttpOperationError
    +
    +
    +class CertificateBodyDescription(Model):
    +    """The JSON-serialized X509 Certificate.
    +
    +    :param certificate: base-64 representation of the X509 leaf certificate
    +     .cer file or just .pem file content.
    +    :type certificate: str
    +    """
    +
    +    _attribute_map = {
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateBodyDescription, self).__init__(**kwargs)
    +        self.certificate = kwargs.get('certificate', None)
    +
    +
    +class CertificateDescription(Model):
    +    """The X509 Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.CertificateProperties
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The name of the certificate.
    +    :vartype name: str
    +    :ivar etag: The entity tag.
    +    :vartype etag: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'etag': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'CertificateProperties'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateDescription, self).__init__(**kwargs)
    +        self.properties = kwargs.get('properties', None)
    +        self.id = None
    +        self.name = None
    +        self.etag = None
    +        self.type = None
    +
    +
    +class CertificateListDescription(Model):
    +    """The JSON-serialized array of Certificate objects.
    +
    +    :param value: The array of Certificate objects.
    +    :type value: list[~azure.mgmt.iothub.models.CertificateDescription]
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateDescription]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateListDescription, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +
    +
    +class CertificateProperties(Model):
    +    """The description of an X509 CA Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar subject: The certificate's subject name.
    +    :vartype subject: str
    +    :ivar expiry: The certificate's expiration date and time.
    +    :vartype expiry: datetime
    +    :ivar thumbprint: The certificate's thumbprint.
    +    :vartype thumbprint: str
    +    :ivar is_verified: Determines whether certificate has been verified.
    +    :vartype is_verified: bool
    +    :ivar created: The certificate's create date and time.
    +    :vartype created: datetime
    +    :ivar updated: The certificate's last update date and time.
    +    :vartype updated: datetime
    +    :param certificate: The certificate content
    +    :type certificate: str
    +    """
    +
    +    _validation = {
    +        'subject': {'readonly': True},
    +        'expiry': {'readonly': True},
    +        'thumbprint': {'readonly': True},
    +        'is_verified': {'readonly': True},
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'expiry': {'key': 'expiry', 'type': 'rfc-1123'},
    +        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
    +        'is_verified': {'key': 'isVerified', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'rfc-1123'},
    +        'updated': {'key': 'updated', 'type': 'rfc-1123'},
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateProperties, self).__init__(**kwargs)
    +        self.subject = None
    +        self.expiry = None
    +        self.thumbprint = None
    +        self.is_verified = None
    +        self.created = None
    +        self.updated = None
    +        self.certificate = kwargs.get('certificate', None)
    +
    +
    +class CertificatePropertiesWithNonce(Model):
    +    """The description of an X509 CA Certificate including the challenge nonce
    +    issued for the Proof-Of-Possession flow.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar subject: The certificate's subject name.
    +    :vartype subject: str
    +    :ivar expiry: The certificate's expiration date and time.
    +    :vartype expiry: datetime
    +    :ivar thumbprint: The certificate's thumbprint.
    +    :vartype thumbprint: str
    +    :ivar is_verified: Determines whether certificate has been verified.
    +    :vartype is_verified: bool
    +    :ivar created: The certificate's create date and time.
    +    :vartype created: datetime
    +    :ivar updated: The certificate's last update date and time.
    +    :vartype updated: datetime
    +    :ivar verification_code: The certificate's verification code that will be
    +     used for proof of possession.
    +    :vartype verification_code: str
    +    :ivar certificate: The certificate content
    +    :vartype certificate: str
    +    """
    +
    +    _validation = {
    +        'subject': {'readonly': True},
    +        'expiry': {'readonly': True},
    +        'thumbprint': {'readonly': True},
    +        'is_verified': {'readonly': True},
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'verification_code': {'readonly': True},
    +        'certificate': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'expiry': {'key': 'expiry', 'type': 'rfc-1123'},
    +        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
    +        'is_verified': {'key': 'isVerified', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'rfc-1123'},
    +        'updated': {'key': 'updated', 'type': 'rfc-1123'},
    +        'verification_code': {'key': 'verificationCode', 'type': 'str'},
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificatePropertiesWithNonce, self).__init__(**kwargs)
    +        self.subject = None
    +        self.expiry = None
    +        self.thumbprint = None
    +        self.is_verified = None
    +        self.created = None
    +        self.updated = None
    +        self.verification_code = None
    +        self.certificate = None
    +
    +
    +class CertificateVerificationDescription(Model):
    +    """The JSON-serialized leaf certificate.
    +
    +    :param certificate: base-64 representation of X509 certificate .cer file
    +     or just .pem file content.
    +    :type certificate: str
    +    """
    +
    +    _attribute_map = {
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateVerificationDescription, self).__init__(**kwargs)
    +        self.certificate = kwargs.get('certificate', None)
    +
    +
    +class CertificateWithNonceDescription(Model):
    +    """The X509 Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.CertificatePropertiesWithNonce
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The name of the certificate.
    +    :vartype name: str
    +    :ivar etag: The entity tag.
    +    :vartype etag: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'etag': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'CertificatePropertiesWithNonce'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateWithNonceDescription, self).__init__(**kwargs)
    +        self.properties = kwargs.get('properties', None)
    +        self.id = None
    +        self.name = None
    +        self.etag = None
    +        self.type = None
    +
    +
    +class CloudError(Model):
    +    """CloudError.
    +    """
    +
    +    _attribute_map = {
    +    }
    +
    +
    +class CloudToDeviceProperties(Model):
    +    """The IoT hub cloud-to-device messaging properties.
    +
    +    :param max_delivery_count: The max delivery count for cloud-to-device
    +     messages in the device queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type max_delivery_count: int
    +    :param default_ttl_as_iso8601: The default time to live for
    +     cloud-to-device messages in the device queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type default_ttl_as_iso8601: timedelta
    +    :param feedback:
    +    :type feedback: ~azure.mgmt.iothub.models.FeedbackProperties
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +        'default_ttl_as_iso8601': {'key': 'defaultTtlAsIso8601', 'type': 'duration'},
    +        'feedback': {'key': 'feedback', 'type': 'FeedbackProperties'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CloudToDeviceProperties, self).__init__(**kwargs)
    +        self.max_delivery_count = kwargs.get('max_delivery_count', None)
    +        self.default_ttl_as_iso8601 = kwargs.get('default_ttl_as_iso8601', None)
    +        self.feedback = kwargs.get('feedback', None)
    +
    +
    +class EndpointHealthData(Model):
    +    """The health data for an endpoint.
    +
    +    :param endpoint_id: Id of the endpoint
    +    :type endpoint_id: str
    +    :param health_status: Health statuses have following meanings. The
    +     'healthy' status shows that the endpoint is accepting messages as
    +     expected. The 'unhealthy' status shows that the endpoint is not accepting
    +     messages as expected and IoT Hub is retrying to send data to this
    +     endpoint. The status of an unhealthy endpoint will be updated to healthy
    +     when IoT Hub has established an eventually consistent state of health. The
    +     'dead' status shows that the endpoint is not accepting messages, after IoT
    +     Hub retried sending messages for the retrial period. See IoT Hub metrics
    +     to identify errors and monitor issues with endpoints. The 'unknown' status
    +     shows that the IoT Hub has not established a connection with the endpoint.
    +     No messages have been delivered to or rejected from this endpoint.
    +     Possible values include: 'unknown', 'healthy', 'unhealthy', 'dead'
    +    :type health_status: str or ~azure.mgmt.iothub.models.EndpointHealthStatus
    +    """
    +
    +    _attribute_map = {
    +        'endpoint_id': {'key': 'endpointId', 'type': 'str'},
    +        'health_status': {'key': 'healthStatus', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EndpointHealthData, self).__init__(**kwargs)
    +        self.endpoint_id = kwargs.get('endpoint_id', None)
    +        self.health_status = kwargs.get('health_status', None)
    +
    +
    +class ErrorDetails(Model):
    +    """Error details.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: The error code.
    +    :vartype code: str
    +    :ivar http_status_code: The HTTP status code.
    +    :vartype http_status_code: str
    +    :ivar message: The error message.
    +    :vartype message: str
    +    :ivar details: The error details.
    +    :vartype details: str
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'http_status_code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'details': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'http_status_code': {'key': 'httpStatusCode', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'details': {'key': 'details', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ErrorDetails, self).__init__(**kwargs)
    +        self.code = None
    +        self.http_status_code = None
    +        self.message = None
    +        self.details = None
    +
    +
    +class ErrorDetailsException(HttpOperationError):
    +    """Server responsed with exception of type: 'ErrorDetails'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, deserialize, response, *args):
    +
    +        super(ErrorDetailsException, self).__init__(deserialize, response, 'ErrorDetails', *args)
    +
    +
    +class EventHubConsumerGroupInfo(Model):
    +    """The properties of the EventHubConsumerGroupInfo object.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties: The tags.
    +    :type properties: dict[str, str]
    +    :ivar id: The Event Hub-compatible consumer group identifier.
    +    :vartype id: str
    +    :ivar name: The Event Hub-compatible consumer group name.
    +    :vartype name: str
    +    :ivar type: the resource type.
    +    :vartype type: str
    +    :ivar etag: The etag.
    +    :vartype etag: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'etag': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': '{str}'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EventHubConsumerGroupInfo, self).__init__(**kwargs)
    +        self.properties = kwargs.get('properties', None)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.etag = None
    +
    +
    +class EventHubProperties(Model):
    +    """The properties of the provisioned Event Hub-compatible endpoint used by the
    +    IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param retention_time_in_days: The retention time for device-to-cloud
    +     messages in days. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages
    +    :type retention_time_in_days: long
    +    :param partition_count: The number of partitions for receiving
    +     device-to-cloud messages in the Event Hub-compatible endpoint. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages.
    +    :type partition_count: int
    +    :ivar partition_ids: The partition ids in the Event Hub-compatible
    +     endpoint.
    +    :vartype partition_ids: list[str]
    +    :ivar path: The Event Hub-compatible name.
    +    :vartype path: str
    +    :ivar endpoint: The Event Hub-compatible endpoint.
    +    :vartype endpoint: str
    +    """
    +
    +    _validation = {
    +        'partition_ids': {'readonly': True},
    +        'path': {'readonly': True},
    +        'endpoint': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'retention_time_in_days': {'key': 'retentionTimeInDays', 'type': 'long'},
    +        'partition_count': {'key': 'partitionCount', 'type': 'int'},
    +        'partition_ids': {'key': 'partitionIds', 'type': '[str]'},
    +        'path': {'key': 'path', 'type': 'str'},
    +        'endpoint': {'key': 'endpoint', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EventHubProperties, self).__init__(**kwargs)
    +        self.retention_time_in_days = kwargs.get('retention_time_in_days', None)
    +        self.partition_count = kwargs.get('partition_count', None)
    +        self.partition_ids = None
    +        self.path = None
    +        self.endpoint = None
    +
    +
    +class ExportDevicesRequest(Model):
    +    """Use to provide parameters when requesting an export of all devices in the
    +    IoT hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param export_blob_container_uri: Required. The export blob container URI.
    +    :type export_blob_container_uri: str
    +    :param exclude_keys: Required. The value indicating whether keys should be
    +     excluded during export.
    +    :type exclude_keys: bool
    +    """
    +
    +    _validation = {
    +        'export_blob_container_uri': {'required': True},
    +        'exclude_keys': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'export_blob_container_uri': {'key': 'exportBlobContainerUri', 'type': 'str'},
    +        'exclude_keys': {'key': 'excludeKeys', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ExportDevicesRequest, self).__init__(**kwargs)
    +        self.export_blob_container_uri = kwargs.get('export_blob_container_uri', None)
    +        self.exclude_keys = kwargs.get('exclude_keys', None)
    +
    +
    +class FallbackRouteProperties(Model):
    +    """The properties of the fallback route. IoT Hub uses these properties when it
    +    routes messages to the fallback endpoint.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: The name of the route. The name can only include alphanumeric
    +     characters, periods, underscores, hyphens, has a maximum length of 64
    +     characters, and must be unique.
    +    :type name: str
    +    :ivar source: Required. The source to which the routing rule is to be
    +     applied to. For example, DeviceMessages. Default value: "DeviceMessages" .
    +    :vartype source: str
    +    :param condition: The condition which is evaluated in order to apply the
    +     fallback route. If the condition is not provided it will evaluate to true
    +     by default. For grammar, See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
    +    :type condition: str
    +    :param endpoint_names: Required. The list of endpoints to which the
    +     messages that satisfy the condition are routed to. Currently only 1
    +     endpoint is allowed.
    +    :type endpoint_names: list[str]
    +    :param is_enabled: Required. Used to specify whether the fallback route is
    +     enabled.
    +    :type is_enabled: bool
    +    """
    +
    +    _validation = {
    +        'source': {'required': True, 'constant': True},
    +        'endpoint_names': {'required': True, 'max_items': 1, 'min_items': 1},
    +        'is_enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'condition': {'key': 'condition', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +        'is_enabled': {'key': 'isEnabled', 'type': 'bool'},
    +    }
    +
    +    source = "DeviceMessages"
    +
    +    def __init__(self, **kwargs):
    +        super(FallbackRouteProperties, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.condition = kwargs.get('condition', None)
    +        self.endpoint_names = kwargs.get('endpoint_names', None)
    +        self.is_enabled = kwargs.get('is_enabled', None)
    +
    +
    +class FeedbackProperties(Model):
    +    """The properties of the feedback queue for cloud-to-device messages.
    +
    +    :param lock_duration_as_iso8601: The lock duration for the feedback queue.
    +     See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type lock_duration_as_iso8601: timedelta
    +    :param ttl_as_iso8601: The period of time for which a message is available
    +     to consume before it is expired by the IoT hub. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type ttl_as_iso8601: timedelta
    +    :param max_delivery_count: The number of times the IoT hub attempts to
    +     deliver a message on the feedback queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type max_delivery_count: int
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lock_duration_as_iso8601': {'key': 'lockDurationAsIso8601', 'type': 'duration'},
    +        'ttl_as_iso8601': {'key': 'ttlAsIso8601', 'type': 'duration'},
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(FeedbackProperties, self).__init__(**kwargs)
    +        self.lock_duration_as_iso8601 = kwargs.get('lock_duration_as_iso8601', None)
    +        self.ttl_as_iso8601 = kwargs.get('ttl_as_iso8601', None)
    +        self.max_delivery_count = kwargs.get('max_delivery_count', None)
    +
    +
    +class ImportDevicesRequest(Model):
    +    """Use to provide parameters when requesting an import of all devices in the
    +    hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param input_blob_container_uri: Required. The input blob container URI.
    +    :type input_blob_container_uri: str
    +    :param output_blob_container_uri: Required. The output blob container URI.
    +    :type output_blob_container_uri: str
    +    """
    +
    +    _validation = {
    +        'input_blob_container_uri': {'required': True},
    +        'output_blob_container_uri': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'input_blob_container_uri': {'key': 'inputBlobContainerUri', 'type': 'str'},
    +        'output_blob_container_uri': {'key': 'outputBlobContainerUri', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ImportDevicesRequest, self).__init__(**kwargs)
    +        self.input_blob_container_uri = kwargs.get('input_blob_container_uri', None)
    +        self.output_blob_container_uri = kwargs.get('output_blob_container_uri', None)
    +
    +
    +class IotHubCapacity(Model):
    +    """IoT Hub capacity information.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar minimum: The minimum number of units.
    +    :vartype minimum: long
    +    :ivar maximum: The maximum number of units.
    +    :vartype maximum: long
    +    :ivar default: The default number of units.
    +    :vartype default: long
    +    :ivar scale_type: The type of the scaling enabled. Possible values
    +     include: 'Automatic', 'Manual', 'None'
    +    :vartype scale_type: str or ~azure.mgmt.iothub.models.IotHubScaleType
    +    """
    +
    +    _validation = {
    +        'minimum': {'readonly': True, 'maximum': 1, 'minimum': 1},
    +        'maximum': {'readonly': True},
    +        'default': {'readonly': True},
    +        'scale_type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'minimum': {'key': 'minimum', 'type': 'long'},
    +        'maximum': {'key': 'maximum', 'type': 'long'},
    +        'default': {'key': 'default', 'type': 'long'},
    +        'scale_type': {'key': 'scaleType', 'type': 'IotHubScaleType'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubCapacity, self).__init__(**kwargs)
    +        self.minimum = None
    +        self.maximum = None
    +        self.default = None
    +        self.scale_type = None
    +
    +
    +class Resource(Model):
    +    """The common properties of an Azure resource.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The resource name.
    +    :vartype name: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    :param location: Required. The resource location.
    +    :type location: str
    +    :param tags: The resource tags.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True, 'pattern': r'^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{2,49}[a-zA-Z0-9]$'},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.location = kwargs.get('location', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class IotHubDescription(Resource):
    +    """The description of the IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The resource name.
    +    :vartype name: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    :param location: Required. The resource location.
    +    :type location: str
    +    :param tags: The resource tags.
    +    :type tags: dict[str, str]
    +    :param etag: The Etag field is *not* required. If it is provided in the
    +     response body, it must also be provided as a header per the normal ETag
    +     convention.
    +    :type etag: str
    +    :param properties: IotHub properties
    +    :type properties: ~azure.mgmt.iothub.models.IotHubProperties
    +    :param sku: Required. IotHub SKU info
    +    :type sku: ~azure.mgmt.iothub.models.IotHubSkuInfo
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True, 'pattern': r'^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{2,49}[a-zA-Z0-9]$'},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'sku': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'properties': {'key': 'properties', 'type': 'IotHubProperties'},
    +        'sku': {'key': 'sku', 'type': 'IotHubSkuInfo'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubDescription, self).__init__(**kwargs)
    +        self.etag = kwargs.get('etag', None)
    +        self.properties = kwargs.get('properties', None)
    +        self.sku = kwargs.get('sku', None)
    +
    +
    +class IotHubLocationDescription(Model):
    +    """Public representation of one of the locations where a resource is
    +    provisioned.
    +
    +    :param location: Azure Geo Regions
    +    :type location: str
    +    :param role: Specific Role assigned to this location. Possible values
    +     include: 'primary', 'secondary'
    +    :type role: str or ~azure.mgmt.iothub.models.IotHubReplicaRoleType
    +    """
    +
    +    _attribute_map = {
    +        'location': {'key': 'location', 'type': 'str'},
    +        'role': {'key': 'role', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubLocationDescription, self).__init__(**kwargs)
    +        self.location = kwargs.get('location', None)
    +        self.role = kwargs.get('role', None)
    +
    +
    +class IotHubNameAvailabilityInfo(Model):
    +    """The properties indicating whether a given IoT hub name is available.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name_available: The value which indicates whether the provided name
    +     is available.
    +    :vartype name_available: bool
    +    :ivar reason: The reason for unavailability. Possible values include:
    +     'Invalid', 'AlreadyExists'
    +    :vartype reason: str or
    +     ~azure.mgmt.iothub.models.IotHubNameUnavailabilityReason
    +    :param message: The detailed reason message.
    +    :type message: str
    +    """
    +
    +    _validation = {
    +        'name_available': {'readonly': True},
    +        'reason': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name_available': {'key': 'nameAvailable', 'type': 'bool'},
    +        'reason': {'key': 'reason', 'type': 'IotHubNameUnavailabilityReason'},
    +        'message': {'key': 'message', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubNameAvailabilityInfo, self).__init__(**kwargs)
    +        self.name_available = None
    +        self.reason = None
    +        self.message = kwargs.get('message', None)
    +
    +
    +class IotHubProperties(Model):
    +    """The properties of an IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param authorization_policies: The shared access policies you can use to
    +     secure a connection to the IoT hub.
    +    :type authorization_policies:
    +     list[~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRule]
    +    :param ip_filter_rules: The IP filter rules.
    +    :type ip_filter_rules: list[~azure.mgmt.iothub.models.IpFilterRule]
    +    :ivar provisioning_state: The provisioning state.
    +    :vartype provisioning_state: str
    +    :ivar state: The hub state.
    +    :vartype state: str
    +    :ivar host_name: The name of the host.
    +    :vartype host_name: str
    +    :param event_hub_endpoints: The Event Hub-compatible endpoint properties.
    +     The only possible keys to this dictionary is events. This key has to be
    +     present in the dictionary while making create or update calls for the IoT
    +     hub.
    +    :type event_hub_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.EventHubProperties]
    +    :param routing:
    +    :type routing: ~azure.mgmt.iothub.models.RoutingProperties
    +    :param storage_endpoints: The list of Azure Storage endpoints where you
    +     can upload files. Currently you can configure only one Azure Storage
    +     account and that MUST have its key as $default. Specifying more than one
    +     storage account causes an error to be thrown. Not specifying a value for
    +     this property when the enableFileUploadNotifications property is set to
    +     True, causes an error to be thrown.
    +    :type storage_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.StorageEndpointProperties]
    +    :param messaging_endpoints: The messaging endpoint properties for the file
    +     upload notification queue.
    +    :type messaging_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.MessagingEndpointProperties]
    +    :param enable_file_upload_notifications: If True, file upload
    +     notifications are enabled.
    +    :type enable_file_upload_notifications: bool
    +    :param cloud_to_device:
    +    :type cloud_to_device: ~azure.mgmt.iothub.models.CloudToDeviceProperties
    +    :param comments: IoT hub comments.
    +    :type comments: str
    +    :param device_streams: The device streams properties of iothub.
    +    :type device_streams:
    +     ~azure.mgmt.iothub.models.IotHubPropertiesDeviceStreams
    +    :param features: The capabilities and features enabled for the IoT hub.
    +     Possible values include: 'None', 'DeviceManagement'
    +    :type features: str or ~azure.mgmt.iothub.models.Capabilities
    +    :param locations: Primary and secondary location for iot hub
    +    :type locations: list[~azure.mgmt.iothub.models.IotHubLocationDescription]
    +    """
    +
    +    _validation = {
    +        'provisioning_state': {'readonly': True},
    +        'state': {'readonly': True},
    +        'host_name': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'authorization_policies': {'key': 'authorizationPolicies', 'type': '[SharedAccessSignatureAuthorizationRule]'},
    +        'ip_filter_rules': {'key': 'ipFilterRules', 'type': '[IpFilterRule]'},
    +        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
    +        'state': {'key': 'state', 'type': 'str'},
    +        'host_name': {'key': 'hostName', 'type': 'str'},
    +        'event_hub_endpoints': {'key': 'eventHubEndpoints', 'type': '{EventHubProperties}'},
    +        'routing': {'key': 'routing', 'type': 'RoutingProperties'},
    +        'storage_endpoints': {'key': 'storageEndpoints', 'type': '{StorageEndpointProperties}'},
    +        'messaging_endpoints': {'key': 'messagingEndpoints', 'type': '{MessagingEndpointProperties}'},
    +        'enable_file_upload_notifications': {'key': 'enableFileUploadNotifications', 'type': 'bool'},
    +        'cloud_to_device': {'key': 'cloudToDevice', 'type': 'CloudToDeviceProperties'},
    +        'comments': {'key': 'comments', 'type': 'str'},
    +        'device_streams': {'key': 'deviceStreams', 'type': 'IotHubPropertiesDeviceStreams'},
    +        'features': {'key': 'features', 'type': 'str'},
    +        'locations': {'key': 'locations', 'type': '[IotHubLocationDescription]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubProperties, self).__init__(**kwargs)
    +        self.authorization_policies = kwargs.get('authorization_policies', None)
    +        self.ip_filter_rules = kwargs.get('ip_filter_rules', None)
    +        self.provisioning_state = None
    +        self.state = None
    +        self.host_name = None
    +        self.event_hub_endpoints = kwargs.get('event_hub_endpoints', None)
    +        self.routing = kwargs.get('routing', None)
    +        self.storage_endpoints = kwargs.get('storage_endpoints', None)
    +        self.messaging_endpoints = kwargs.get('messaging_endpoints', None)
    +        self.enable_file_upload_notifications = kwargs.get('enable_file_upload_notifications', None)
    +        self.cloud_to_device = kwargs.get('cloud_to_device', None)
    +        self.comments = kwargs.get('comments', None)
    +        self.device_streams = kwargs.get('device_streams', None)
    +        self.features = kwargs.get('features', None)
    +        self.locations = kwargs.get('locations', None)
    +
    +
    +class IotHubPropertiesDeviceStreams(Model):
    +    """The device streams properties of iothub.
    +
    +    :param streaming_endpoints: List of Device Streams Endpoints.
    +    :type streaming_endpoints: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'streaming_endpoints': {'key': 'streamingEndpoints', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubPropertiesDeviceStreams, self).__init__(**kwargs)
    +        self.streaming_endpoints = kwargs.get('streaming_endpoints', None)
    +
    +
    +class IotHubQuotaMetricInfo(Model):
    +    """Quota metrics properties.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name: The name of the quota metric.
    +    :vartype name: str
    +    :ivar current_value: The current value for the quota metric.
    +    :vartype current_value: long
    +    :ivar max_value: The maximum value of the quota metric.
    +    :vartype max_value: long
    +    """
    +
    +    _validation = {
    +        'name': {'readonly': True},
    +        'current_value': {'readonly': True},
    +        'max_value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'current_value': {'key': 'currentValue', 'type': 'long'},
    +        'max_value': {'key': 'maxValue', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubQuotaMetricInfo, self).__init__(**kwargs)
    +        self.name = None
    +        self.current_value = None
    +        self.max_value = None
    +
    +
    +class IotHubSkuDescription(Model):
    +    """SKU properties.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar resource_type: The type of the resource.
    +    :vartype resource_type: str
    +    :param sku: Required. The type of the resource.
    +    :type sku: ~azure.mgmt.iothub.models.IotHubSkuInfo
    +    :param capacity: Required. IotHub capacity
    +    :type capacity: ~azure.mgmt.iothub.models.IotHubCapacity
    +    """
    +
    +    _validation = {
    +        'resource_type': {'readonly': True},
    +        'sku': {'required': True},
    +        'capacity': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'resource_type': {'key': 'resourceType', 'type': 'str'},
    +        'sku': {'key': 'sku', 'type': 'IotHubSkuInfo'},
    +        'capacity': {'key': 'capacity', 'type': 'IotHubCapacity'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubSkuDescription, self).__init__(**kwargs)
    +        self.resource_type = None
    +        self.sku = kwargs.get('sku', None)
    +        self.capacity = kwargs.get('capacity', None)
    +
    +
    +class IotHubSkuInfo(Model):
    +    """Information about the SKU of the IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the SKU. Possible values include: 'F1',
    +     'S1', 'S2', 'S3', 'B1', 'B2', 'B3'
    +    :type name: str or ~azure.mgmt.iothub.models.IotHubSku
    +    :ivar tier: The billing tier for the IoT hub. Possible values include:
    +     'Free', 'Standard', 'Basic'
    +    :vartype tier: str or ~azure.mgmt.iothub.models.IotHubSkuTier
    +    :param capacity: The number of provisioned IoT Hub units. See:
    +     https://docs.microsoft.com/azure/azure-subscription-service-limits#iot-hub-limits.
    +    :type capacity: long
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'tier': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'tier': {'key': 'tier', 'type': 'IotHubSkuTier'},
    +        'capacity': {'key': 'capacity', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubSkuInfo, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.tier = None
    +        self.capacity = kwargs.get('capacity', None)
    +
    +
    +class IpFilterRule(Model):
    +    """The IP filter rules for the IoT hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param filter_name: Required. The name of the IP filter rule.
    +    :type filter_name: str
    +    :param action: Required. The desired action for requests captured by this
    +     rule. Possible values include: 'Accept', 'Reject'
    +    :type action: str or ~azure.mgmt.iothub.models.IpFilterActionType
    +    :param ip_mask: Required. A string that contains the IP address range in
    +     CIDR notation for the rule.
    +    :type ip_mask: str
    +    """
    +
    +    _validation = {
    +        'filter_name': {'required': True},
    +        'action': {'required': True},
    +        'ip_mask': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'filter_name': {'key': 'filterName', 'type': 'str'},
    +        'action': {'key': 'action', 'type': 'IpFilterActionType'},
    +        'ip_mask': {'key': 'ipMask', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IpFilterRule, self).__init__(**kwargs)
    +        self.filter_name = kwargs.get('filter_name', None)
    +        self.action = kwargs.get('action', None)
    +        self.ip_mask = kwargs.get('ip_mask', None)
    +
    +
    +class JobResponse(Model):
    +    """The properties of the Job Response object.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar job_id: The job identifier.
    +    :vartype job_id: str
    +    :ivar start_time_utc: The start time of the job.
    +    :vartype start_time_utc: datetime
    +    :ivar end_time_utc: The time the job stopped processing.
    +    :vartype end_time_utc: datetime
    +    :ivar type: The type of the job. Possible values include: 'unknown',
    +     'export', 'import', 'backup', 'readDeviceProperties',
    +     'writeDeviceProperties', 'updateDeviceConfiguration', 'rebootDevice',
    +     'factoryResetDevice', 'firmwareUpdate'
    +    :vartype type: str or ~azure.mgmt.iothub.models.JobType
    +    :ivar status: The status of the job. Possible values include: 'unknown',
    +     'enqueued', 'running', 'completed', 'failed', 'cancelled'
    +    :vartype status: str or ~azure.mgmt.iothub.models.JobStatus
    +    :ivar failure_reason: If status == failed, this string containing the
    +     reason for the failure.
    +    :vartype failure_reason: str
    +    :ivar status_message: The status message for the job.
    +    :vartype status_message: str
    +    :ivar parent_job_id: The job identifier of the parent job, if any.
    +    :vartype parent_job_id: str
    +    """
    +
    +    _validation = {
    +        'job_id': {'readonly': True},
    +        'start_time_utc': {'readonly': True},
    +        'end_time_utc': {'readonly': True},
    +        'type': {'readonly': True},
    +        'status': {'readonly': True},
    +        'failure_reason': {'readonly': True},
    +        'status_message': {'readonly': True},
    +        'parent_job_id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'job_id': {'key': 'jobId', 'type': 'str'},
    +        'start_time_utc': {'key': 'startTimeUtc', 'type': 'rfc-1123'},
    +        'end_time_utc': {'key': 'endTimeUtc', 'type': 'rfc-1123'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'status': {'key': 'status', 'type': 'JobStatus'},
    +        'failure_reason': {'key': 'failureReason', 'type': 'str'},
    +        'status_message': {'key': 'statusMessage', 'type': 'str'},
    +        'parent_job_id': {'key': 'parentJobId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(JobResponse, self).__init__(**kwargs)
    +        self.job_id = None
    +        self.start_time_utc = None
    +        self.end_time_utc = None
    +        self.type = None
    +        self.status = None
    +        self.failure_reason = None
    +        self.status_message = None
    +        self.parent_job_id = None
    +
    +
    +class MatchedRoute(Model):
    +    """Routes that matched.
    +
    +    :param properties: Properties of routes that matched
    +    :type properties: ~azure.mgmt.iothub.models.RouteProperties
    +    """
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'RouteProperties'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(MatchedRoute, self).__init__(**kwargs)
    +        self.properties = kwargs.get('properties', None)
    +
    +
    +class MessagingEndpointProperties(Model):
    +    """The properties of the messaging endpoints used by this IoT hub.
    +
    +    :param lock_duration_as_iso8601: The lock duration. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type lock_duration_as_iso8601: timedelta
    +    :param ttl_as_iso8601: The period of time for which a message is available
    +     to consume before it is expired by the IoT hub. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type ttl_as_iso8601: timedelta
    +    :param max_delivery_count: The number of times the IoT hub attempts to
    +     deliver a message. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type max_delivery_count: int
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lock_duration_as_iso8601': {'key': 'lockDurationAsIso8601', 'type': 'duration'},
    +        'ttl_as_iso8601': {'key': 'ttlAsIso8601', 'type': 'duration'},
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(MessagingEndpointProperties, self).__init__(**kwargs)
    +        self.lock_duration_as_iso8601 = kwargs.get('lock_duration_as_iso8601', None)
    +        self.ttl_as_iso8601 = kwargs.get('ttl_as_iso8601', None)
    +        self.max_delivery_count = kwargs.get('max_delivery_count', None)
    +
    +
    +class Name(Model):
    +    """Name of Iot Hub type.
    +
    +    :param value: IotHub type
    +    :type value: str
    +    :param localized_value: Localized value of name
    +    :type localized_value: str
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'localized_value': {'key': 'localizedValue', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Name, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.localized_value = kwargs.get('localized_value', None)
    +
    +
    +class Operation(Model):
    +    """IoT Hub REST API operation.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name: Operation name: {provider}/{resource}/{read | write | action |
    +     delete}
    +    :vartype name: str
    +    :param display: The object that represents the operation.
    +    :type display: ~azure.mgmt.iothub.models.OperationDisplay
    +    """
    +
    +    _validation = {
    +        'name': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'display': {'key': 'display', 'type': 'OperationDisplay'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Operation, self).__init__(**kwargs)
    +        self.name = None
    +        self.display = kwargs.get('display', None)
    +
    +
    +class OperationDisplay(Model):
    +    """The object that represents the operation.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar provider: Service provider: Microsoft Devices
    +    :vartype provider: str
    +    :ivar resource: Resource Type: IotHubs
    +    :vartype resource: str
    +    :ivar operation: Name of the operation
    +    :vartype operation: str
    +    :ivar description: Description of the operation
    +    :vartype description: str
    +    """
    +
    +    _validation = {
    +        'provider': {'readonly': True},
    +        'resource': {'readonly': True},
    +        'operation': {'readonly': True},
    +        'description': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'resource': {'key': 'resource', 'type': 'str'},
    +        'operation': {'key': 'operation', 'type': 'str'},
    +        'description': {'key': 'description', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(OperationDisplay, self).__init__(**kwargs)
    +        self.provider = None
    +        self.resource = None
    +        self.operation = None
    +        self.description = None
    +
    +
    +class OperationInputs(Model):
    +    """Input values.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the IoT hub to check.
    +    :type name: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(OperationInputs, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +
    +
    +class RegistryStatistics(Model):
    +    """Identity registry statistics.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar total_device_count: The total count of devices in the identity
    +     registry.
    +    :vartype total_device_count: long
    +    :ivar enabled_device_count: The count of enabled devices in the identity
    +     registry.
    +    :vartype enabled_device_count: long
    +    :ivar disabled_device_count: The count of disabled devices in the identity
    +     registry.
    +    :vartype disabled_device_count: long
    +    """
    +
    +    _validation = {
    +        'total_device_count': {'readonly': True},
    +        'enabled_device_count': {'readonly': True},
    +        'disabled_device_count': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'total_device_count': {'key': 'totalDeviceCount', 'type': 'long'},
    +        'enabled_device_count': {'key': 'enabledDeviceCount', 'type': 'long'},
    +        'disabled_device_count': {'key': 'disabledDeviceCount', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RegistryStatistics, self).__init__(**kwargs)
    +        self.total_device_count = None
    +        self.enabled_device_count = None
    +        self.disabled_device_count = None
    +
    +
    +class RouteCompilationError(Model):
    +    """Compilation error when evaluating route.
    +
    +    :param message: Route error message
    +    :type message: str
    +    :param severity: Severity of the route error. Possible values include:
    +     'error', 'warning'
    +    :type severity: str or ~azure.mgmt.iothub.models.RouteErrorSeverity
    +    :param location: Location where the route error happened
    +    :type location: ~azure.mgmt.iothub.models.RouteErrorRange
    +    """
    +
    +    _attribute_map = {
    +        'message': {'key': 'message', 'type': 'str'},
    +        'severity': {'key': 'severity', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'RouteErrorRange'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RouteCompilationError, self).__init__(**kwargs)
    +        self.message = kwargs.get('message', None)
    +        self.severity = kwargs.get('severity', None)
    +        self.location = kwargs.get('location', None)
    +
    +
    +class RouteErrorPosition(Model):
    +    """Position where the route error happened.
    +
    +    :param line: Line where the route error happened
    +    :type line: int
    +    :param column: Column where the route error happened
    +    :type column: int
    +    """
    +
    +    _attribute_map = {
    +        'line': {'key': 'line', 'type': 'int'},
    +        'column': {'key': 'column', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RouteErrorPosition, self).__init__(**kwargs)
    +        self.line = kwargs.get('line', None)
    +        self.column = kwargs.get('column', None)
    +
    +
    +class RouteErrorRange(Model):
    +    """Range of route errors.
    +
    +    :param start: Start where the route error happened
    +    :type start: ~azure.mgmt.iothub.models.RouteErrorPosition
    +    :param end: End where the route error happened
    +    :type end: ~azure.mgmt.iothub.models.RouteErrorPosition
    +    """
    +
    +    _attribute_map = {
    +        'start': {'key': 'start', 'type': 'RouteErrorPosition'},
    +        'end': {'key': 'end', 'type': 'RouteErrorPosition'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RouteErrorRange, self).__init__(**kwargs)
    +        self.start = kwargs.get('start', None)
    +        self.end = kwargs.get('end', None)
    +
    +
    +class RouteProperties(Model):
    +    """The properties of a routing rule that your IoT hub uses to route messages
    +    to endpoints.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the route. The name can only include
    +     alphanumeric characters, periods, underscores, hyphens, has a maximum
    +     length of 64 characters, and must be unique.
    +    :type name: str
    +    :param source: Required. The source that the routing rule is to be applied
    +     to, such as DeviceMessages. Possible values include: 'Invalid',
    +     'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents',
    +     'DeviceJobLifecycleEvents'
    +    :type source: str or ~azure.mgmt.iothub.models.RoutingSource
    +    :param condition: The condition that is evaluated to apply the routing
    +     rule. If no condition is provided, it evaluates to true by default. For
    +     grammar, see:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
    +    :type condition: str
    +    :param endpoint_names: Required. The list of endpoints to which messages
    +     that satisfy the condition are routed. Currently only one endpoint is
    +     allowed.
    +    :type endpoint_names: list[str]
    +    :param is_enabled: Required. Used to specify whether a route is enabled.
    +    :type is_enabled: bool
    +    """
    +
    +    _validation = {
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +        'source': {'required': True},
    +        'endpoint_names': {'required': True, 'max_items': 1, 'min_items': 1},
    +        'is_enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'condition': {'key': 'condition', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +        'is_enabled': {'key': 'isEnabled', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RouteProperties, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.source = kwargs.get('source', None)
    +        self.condition = kwargs.get('condition', None)
    +        self.endpoint_names = kwargs.get('endpoint_names', None)
    +        self.is_enabled = kwargs.get('is_enabled', None)
    +
    +
    +class RoutingEndpoints(Model):
    +    """The properties related to the custom endpoints to which your IoT hub routes
    +    messages based on the routing rules. A maximum of 10 custom endpoints are
    +    allowed across all endpoint types for paid hubs and only 1 custom endpoint
    +    is allowed across all endpoint types for free hubs.
    +
    +    :param service_bus_queues: The list of Service Bus queue endpoints that
    +     IoT hub routes the messages to, based on the routing rules.
    +    :type service_bus_queues:
    +     list[~azure.mgmt.iothub.models.RoutingServiceBusQueueEndpointProperties]
    +    :param service_bus_topics: The list of Service Bus topic endpoints that
    +     the IoT hub routes the messages to, based on the routing rules.
    +    :type service_bus_topics:
    +     list[~azure.mgmt.iothub.models.RoutingServiceBusTopicEndpointProperties]
    +    :param event_hubs: The list of Event Hubs endpoints that IoT hub routes
    +     messages to, based on the routing rules. This list does not include the
    +     built-in Event Hubs endpoint.
    +    :type event_hubs:
    +     list[~azure.mgmt.iothub.models.RoutingEventHubProperties]
    +    :param storage_containers: The list of storage container endpoints that
    +     IoT hub routes messages to, based on the routing rules.
    +    :type storage_containers:
    +     list[~azure.mgmt.iothub.models.RoutingStorageContainerProperties]
    +    """
    +
    +    _attribute_map = {
    +        'service_bus_queues': {'key': 'serviceBusQueues', 'type': '[RoutingServiceBusQueueEndpointProperties]'},
    +        'service_bus_topics': {'key': 'serviceBusTopics', 'type': '[RoutingServiceBusTopicEndpointProperties]'},
    +        'event_hubs': {'key': 'eventHubs', 'type': '[RoutingEventHubProperties]'},
    +        'storage_containers': {'key': 'storageContainers', 'type': '[RoutingStorageContainerProperties]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingEndpoints, self).__init__(**kwargs)
    +        self.service_bus_queues = kwargs.get('service_bus_queues', None)
    +        self.service_bus_topics = kwargs.get('service_bus_topics', None)
    +        self.event_hubs = kwargs.get('event_hubs', None)
    +        self.storage_containers = kwargs.get('storage_containers', None)
    +
    +
    +class RoutingEventHubProperties(Model):
    +    """The properties related to an event hub endpoint.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the event hub
    +     endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the event hub
    +     endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the event hub
    +     endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingEventHubProperties, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.name = kwargs.get('name', None)
    +        self.subscription_id = kwargs.get('subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +
    +
    +class RoutingMessage(Model):
    +    """Routing message.
    +
    +    :param body: Body of routing message
    +    :type body: str
    +    :param app_properties: App properties
    +    :type app_properties: dict[str, str]
    +    :param system_properties: System properties
    +    :type system_properties: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'body': {'key': 'body', 'type': 'str'},
    +        'app_properties': {'key': 'appProperties', 'type': '{str}'},
    +        'system_properties': {'key': 'systemProperties', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingMessage, self).__init__(**kwargs)
    +        self.body = kwargs.get('body', None)
    +        self.app_properties = kwargs.get('app_properties', None)
    +        self.system_properties = kwargs.get('system_properties', None)
    +
    +
    +class RoutingProperties(Model):
    +    """The routing related properties of the IoT hub. See:
    +    https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging.
    +
    +    :param endpoints:
    +    :type endpoints: ~azure.mgmt.iothub.models.RoutingEndpoints
    +    :param routes: The list of user-provided routing rules that the IoT hub
    +     uses to route messages to built-in and custom endpoints. A maximum of 100
    +     routing rules are allowed for paid hubs and a maximum of 5 routing rules
    +     are allowed for free hubs.
    +    :type routes: list[~azure.mgmt.iothub.models.RouteProperties]
    +    :param fallback_route: The properties of the route that is used as a
    +     fall-back route when none of the conditions specified in the 'routes'
    +     section are met. This is an optional parameter. When this property is not
    +     set, the messages which do not meet any of the conditions specified in the
    +     'routes' section get routed to the built-in eventhub endpoint.
    +    :type fallback_route: ~azure.mgmt.iothub.models.FallbackRouteProperties
    +    """
    +
    +    _attribute_map = {
    +        'endpoints': {'key': 'endpoints', 'type': 'RoutingEndpoints'},
    +        'routes': {'key': 'routes', 'type': '[RouteProperties]'},
    +        'fallback_route': {'key': 'fallbackRoute', 'type': 'FallbackRouteProperties'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingProperties, self).__init__(**kwargs)
    +        self.endpoints = kwargs.get('endpoints', None)
    +        self.routes = kwargs.get('routes', None)
    +        self.fallback_route = kwargs.get('fallback_route', None)
    +
    +
    +class RoutingServiceBusQueueEndpointProperties(Model):
    +    """The properties related to service bus queue endpoint types.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the service
    +     bus queue endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types. The name need not be the same as the actual
    +     queue name.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the service bus
    +     queue endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the service bus
    +     queue endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingServiceBusQueueEndpointProperties, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.name = kwargs.get('name', None)
    +        self.subscription_id = kwargs.get('subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +
    +
    +class RoutingServiceBusTopicEndpointProperties(Model):
    +    """The properties related to service bus topic endpoint types.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the service
    +     bus topic endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.  The name need not be the same as the actual
    +     topic name.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the service bus
    +     topic endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the service bus
    +     topic endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingServiceBusTopicEndpointProperties, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.name = kwargs.get('name', None)
    +        self.subscription_id = kwargs.get('subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +
    +
    +class RoutingStorageContainerProperties(Model):
    +    """The properties related to a storage container endpoint.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the storage
    +     account.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the storage
    +     account.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the storage
    +     account.
    +    :type resource_group: str
    +    :param container_name: Required. The name of storage container in the
    +     storage account.
    +    :type container_name: str
    +    :param file_name_format: File name format for the blob. Default format is
    +     {iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}. All parameters are
    +     mandatory but can be reordered.
    +    :type file_name_format: str
    +    :param batch_frequency_in_seconds: Time interval at which blobs are
    +     written to storage. Value should be between 60 and 720 seconds. Default
    +     value is 300 seconds.
    +    :type batch_frequency_in_seconds: int
    +    :param max_chunk_size_in_bytes: Maximum number of bytes for each blob
    +     written to storage. Value should be between 10485760(10MB) and
    +     524288000(500MB). Default value is 314572800(300MB).
    +    :type max_chunk_size_in_bytes: int
    +    :param encoding: Encoding that is used to serialize messages to blobs.
    +     Supported values are 'avro', 'avrodeflate', and 'JSON'. Default value is
    +     'avro'. Possible values include: 'Avro', 'AvroDeflate', 'JSON'
    +    :type encoding: str or ~azure.mgmt.iothub.models.enum
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +        'container_name': {'required': True},
    +        'batch_frequency_in_seconds': {'maximum': 720, 'minimum': 60},
    +        'max_chunk_size_in_bytes': {'maximum': 524288000, 'minimum': 10485760},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +        'container_name': {'key': 'containerName', 'type': 'str'},
    +        'file_name_format': {'key': 'fileNameFormat', 'type': 'str'},
    +        'batch_frequency_in_seconds': {'key': 'batchFrequencyInSeconds', 'type': 'int'},
    +        'max_chunk_size_in_bytes': {'key': 'maxChunkSizeInBytes', 'type': 'int'},
    +        'encoding': {'key': 'encoding', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingStorageContainerProperties, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.name = kwargs.get('name', None)
    +        self.subscription_id = kwargs.get('subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +        self.container_name = kwargs.get('container_name', None)
    +        self.file_name_format = kwargs.get('file_name_format', None)
    +        self.batch_frequency_in_seconds = kwargs.get('batch_frequency_in_seconds', None)
    +        self.max_chunk_size_in_bytes = kwargs.get('max_chunk_size_in_bytes', None)
    +        self.encoding = kwargs.get('encoding', None)
    +
    +
    +class RoutingTwin(Model):
    +    """Twin reference input parameter. This is an optional parameter.
    +
    +    :param tags: Twin Tags
    +    :type tags: object
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.RoutingTwinProperties
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': 'object'},
    +        'properties': {'key': 'properties', 'type': 'RoutingTwinProperties'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingTwin, self).__init__(**kwargs)
    +        self.tags = kwargs.get('tags', None)
    +        self.properties = kwargs.get('properties', None)
    +
    +
    +class RoutingTwinProperties(Model):
    +    """RoutingTwinProperties.
    +
    +    :param desired: Twin desired properties
    +    :type desired: object
    +    :param reported: Twin desired properties
    +    :type reported: object
    +    """
    +
    +    _attribute_map = {
    +        'desired': {'key': 'desired', 'type': 'object'},
    +        'reported': {'key': 'reported', 'type': 'object'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingTwinProperties, self).__init__(**kwargs)
    +        self.desired = kwargs.get('desired', None)
    +        self.reported = kwargs.get('reported', None)
    +
    +
    +class SharedAccessSignatureAuthorizationRule(Model):
    +    """The properties of an IoT hub shared access policy.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_name: Required. The name of the shared access policy.
    +    :type key_name: str
    +    :param primary_key: The primary key.
    +    :type primary_key: str
    +    :param secondary_key: The secondary key.
    +    :type secondary_key: str
    +    :param rights: Required. The permissions assigned to the shared access
    +     policy. Possible values include: 'RegistryRead', 'RegistryWrite',
    +     'ServiceConnect', 'DeviceConnect', 'RegistryRead, RegistryWrite',
    +     'RegistryRead, ServiceConnect', 'RegistryRead, DeviceConnect',
    +     'RegistryWrite, ServiceConnect', 'RegistryWrite, DeviceConnect',
    +     'ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite,
    +     ServiceConnect', 'RegistryRead, RegistryWrite, DeviceConnect',
    +     'RegistryRead, ServiceConnect, DeviceConnect', 'RegistryWrite,
    +     ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite,
    +     ServiceConnect, DeviceConnect'
    +    :type rights: str or ~azure.mgmt.iothub.models.AccessRights
    +    """
    +
    +    _validation = {
    +        'key_name': {'required': True},
    +        'rights': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_name': {'key': 'keyName', 'type': 'str'},
    +        'primary_key': {'key': 'primaryKey', 'type': 'str'},
    +        'secondary_key': {'key': 'secondaryKey', 'type': 'str'},
    +        'rights': {'key': 'rights', 'type': 'AccessRights'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SharedAccessSignatureAuthorizationRule, self).__init__(**kwargs)
    +        self.key_name = kwargs.get('key_name', None)
    +        self.primary_key = kwargs.get('primary_key', None)
    +        self.secondary_key = kwargs.get('secondary_key', None)
    +        self.rights = kwargs.get('rights', None)
    +
    +
    +class StorageEndpointProperties(Model):
    +    """The properties of the Azure Storage endpoint for file upload.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param sas_ttl_as_iso8601: The period of time for which the SAS URI
    +     generated by IoT Hub for file upload is valid. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload#file-upload-notification-configuration-options.
    +    :type sas_ttl_as_iso8601: timedelta
    +    :param connection_string: Required. The connection string for the Azure
    +     Storage account to which files are uploaded.
    +    :type connection_string: str
    +    :param container_name: Required. The name of the root container where you
    +     upload files. The container need not exist but should be creatable using
    +     the connectionString specified.
    +    :type container_name: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'container_name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'sas_ttl_as_iso8601': {'key': 'sasTtlAsIso8601', 'type': 'duration'},
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'container_name': {'key': 'containerName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageEndpointProperties, self).__init__(**kwargs)
    +        self.sas_ttl_as_iso8601 = kwargs.get('sas_ttl_as_iso8601', None)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.container_name = kwargs.get('container_name', None)
    +
    +
    +class TagsResource(Model):
    +    """A container holding only the Tags for a resource, allowing the user to
    +    update the tags on an IoT Hub instance.
    +
    +    :param tags: Resource tags
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TagsResource, self).__init__(**kwargs)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class TestAllRoutesInput(Model):
    +    """Input for testing all routes.
    +
    +    :param routing_source: Routing source. Possible values include: 'Invalid',
    +     'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents',
    +     'DeviceJobLifecycleEvents'
    +    :type routing_source: str or ~azure.mgmt.iothub.models.RoutingSource
    +    :param message: Routing message
    +    :type message: ~azure.mgmt.iothub.models.RoutingMessage
    +    :param twin: Routing Twin Reference
    +    :type twin: ~azure.mgmt.iothub.models.RoutingTwin
    +    """
    +
    +    _attribute_map = {
    +        'routing_source': {'key': 'routingSource', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'RoutingMessage'},
    +        'twin': {'key': 'twin', 'type': 'RoutingTwin'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestAllRoutesInput, self).__init__(**kwargs)
    +        self.routing_source = kwargs.get('routing_source', None)
    +        self.message = kwargs.get('message', None)
    +        self.twin = kwargs.get('twin', None)
    +
    +
    +class TestAllRoutesResult(Model):
    +    """Result of testing all routes.
    +
    +    :param routes: JSON-serialized array of matched routes
    +    :type routes: list[~azure.mgmt.iothub.models.MatchedRoute]
    +    """
    +
    +    _attribute_map = {
    +        'routes': {'key': 'routes', 'type': '[MatchedRoute]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestAllRoutesResult, self).__init__(**kwargs)
    +        self.routes = kwargs.get('routes', None)
    +
    +
    +class TestRouteInput(Model):
    +    """Input for testing route.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param message: Routing message
    +    :type message: ~azure.mgmt.iothub.models.RoutingMessage
    +    :param route: Required. Route properties
    +    :type route: ~azure.mgmt.iothub.models.RouteProperties
    +    :param twin: Routing Twin Reference
    +    :type twin: ~azure.mgmt.iothub.models.RoutingTwin
    +    """
    +
    +    _validation = {
    +        'route': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'message': {'key': 'message', 'type': 'RoutingMessage'},
    +        'route': {'key': 'route', 'type': 'RouteProperties'},
    +        'twin': {'key': 'twin', 'type': 'RoutingTwin'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestRouteInput, self).__init__(**kwargs)
    +        self.message = kwargs.get('message', None)
    +        self.route = kwargs.get('route', None)
    +        self.twin = kwargs.get('twin', None)
    +
    +
    +class TestRouteResult(Model):
    +    """Result of testing one route.
    +
    +    :param result: Result of testing route. Possible values include:
    +     'undefined', 'false', 'true'
    +    :type result: str or ~azure.mgmt.iothub.models.TestResultStatus
    +    :param details: Detailed result of testing route
    +    :type details: ~azure.mgmt.iothub.models.TestRouteResultDetails
    +    """
    +
    +    _attribute_map = {
    +        'result': {'key': 'result', 'type': 'str'},
    +        'details': {'key': 'details', 'type': 'TestRouteResultDetails'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestRouteResult, self).__init__(**kwargs)
    +        self.result = kwargs.get('result', None)
    +        self.details = kwargs.get('details', None)
    +
    +
    +class TestRouteResultDetails(Model):
    +    """Detailed result of testing a route.
    +
    +    :param compilation_errors: JSON-serialized list of route compilation
    +     errors
    +    :type compilation_errors:
    +     list[~azure.mgmt.iothub.models.RouteCompilationError]
    +    """
    +
    +    _attribute_map = {
    +        'compilation_errors': {'key': 'compilationErrors', 'type': '[RouteCompilationError]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestRouteResultDetails, self).__init__(**kwargs)
    +        self.compilation_errors = kwargs.get('compilation_errors', None)
    +
    +
    +class UserSubscriptionQuota(Model):
    +    """User subscription quota response.
    +
    +    :param id: IotHub type id
    +    :type id: str
    +    :param type: Response type
    +    :type type: str
    +    :param unit: Unit of IotHub type
    +    :type unit: str
    +    :param current_value: Current number of IotHub type
    +    :type current_value: int
    +    :param limit: Numerical limit on IotHub type
    +    :type limit: int
    +    :param name: IotHub type
    +    :type name: ~azure.mgmt.iothub.models.Name
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'unit': {'key': 'unit', 'type': 'str'},
    +        'current_value': {'key': 'currentValue', 'type': 'int'},
    +        'limit': {'key': 'limit', 'type': 'int'},
    +        'name': {'key': 'name', 'type': 'Name'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(UserSubscriptionQuota, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.type = kwargs.get('type', None)
    +        self.unit = kwargs.get('unit', None)
    +        self.current_value = kwargs.get('current_value', None)
    +        self.limit = kwargs.get('limit', None)
    +        self.name = kwargs.get('name', None)
    +
    +
    +class UserSubscriptionQuotaListResult(Model):
    +    """Json-serialized array of User subscription quota response.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value:
    +    :type value: list[~azure.mgmt.iothub.models.UserSubscriptionQuota]
    +    :ivar next_link:
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[UserSubscriptionQuota]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(UserSubscriptionQuotaListResult, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.next_link = None
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/_models_py3.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/_models_py3.py
    new file mode 100644
    index 000000000000..dcb9857bb773
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/_models_py3.py
    @@ -0,0 +1,2043 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from msrest.exceptions import HttpOperationError
    +
    +
    +class CertificateBodyDescription(Model):
    +    """The JSON-serialized X509 Certificate.
    +
    +    :param certificate: base-64 representation of the X509 leaf certificate
    +     .cer file or just .pem file content.
    +    :type certificate: str
    +    """
    +
    +    _attribute_map = {
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, certificate: str=None, **kwargs) -> None:
    +        super(CertificateBodyDescription, self).__init__(**kwargs)
    +        self.certificate = certificate
    +
    +
    +class CertificateDescription(Model):
    +    """The X509 Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.CertificateProperties
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The name of the certificate.
    +    :vartype name: str
    +    :ivar etag: The entity tag.
    +    :vartype etag: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'etag': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'CertificateProperties'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, properties=None, **kwargs) -> None:
    +        super(CertificateDescription, self).__init__(**kwargs)
    +        self.properties = properties
    +        self.id = None
    +        self.name = None
    +        self.etag = None
    +        self.type = None
    +
    +
    +class CertificateListDescription(Model):
    +    """The JSON-serialized array of Certificate objects.
    +
    +    :param value: The array of Certificate objects.
    +    :type value: list[~azure.mgmt.iothub.models.CertificateDescription]
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateDescription]'},
    +    }
    +
    +    def __init__(self, *, value=None, **kwargs) -> None:
    +        super(CertificateListDescription, self).__init__(**kwargs)
    +        self.value = value
    +
    +
    +class CertificateProperties(Model):
    +    """The description of an X509 CA Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar subject: The certificate's subject name.
    +    :vartype subject: str
    +    :ivar expiry: The certificate's expiration date and time.
    +    :vartype expiry: datetime
    +    :ivar thumbprint: The certificate's thumbprint.
    +    :vartype thumbprint: str
    +    :ivar is_verified: Determines whether certificate has been verified.
    +    :vartype is_verified: bool
    +    :ivar created: The certificate's create date and time.
    +    :vartype created: datetime
    +    :ivar updated: The certificate's last update date and time.
    +    :vartype updated: datetime
    +    :param certificate: The certificate content
    +    :type certificate: str
    +    """
    +
    +    _validation = {
    +        'subject': {'readonly': True},
    +        'expiry': {'readonly': True},
    +        'thumbprint': {'readonly': True},
    +        'is_verified': {'readonly': True},
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'expiry': {'key': 'expiry', 'type': 'rfc-1123'},
    +        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
    +        'is_verified': {'key': 'isVerified', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'rfc-1123'},
    +        'updated': {'key': 'updated', 'type': 'rfc-1123'},
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, certificate: str=None, **kwargs) -> None:
    +        super(CertificateProperties, self).__init__(**kwargs)
    +        self.subject = None
    +        self.expiry = None
    +        self.thumbprint = None
    +        self.is_verified = None
    +        self.created = None
    +        self.updated = None
    +        self.certificate = certificate
    +
    +
    +class CertificatePropertiesWithNonce(Model):
    +    """The description of an X509 CA Certificate including the challenge nonce
    +    issued for the Proof-Of-Possession flow.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar subject: The certificate's subject name.
    +    :vartype subject: str
    +    :ivar expiry: The certificate's expiration date and time.
    +    :vartype expiry: datetime
    +    :ivar thumbprint: The certificate's thumbprint.
    +    :vartype thumbprint: str
    +    :ivar is_verified: Determines whether certificate has been verified.
    +    :vartype is_verified: bool
    +    :ivar created: The certificate's create date and time.
    +    :vartype created: datetime
    +    :ivar updated: The certificate's last update date and time.
    +    :vartype updated: datetime
    +    :ivar verification_code: The certificate's verification code that will be
    +     used for proof of possession.
    +    :vartype verification_code: str
    +    :ivar certificate: The certificate content
    +    :vartype certificate: str
    +    """
    +
    +    _validation = {
    +        'subject': {'readonly': True},
    +        'expiry': {'readonly': True},
    +        'thumbprint': {'readonly': True},
    +        'is_verified': {'readonly': True},
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'verification_code': {'readonly': True},
    +        'certificate': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'expiry': {'key': 'expiry', 'type': 'rfc-1123'},
    +        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
    +        'is_verified': {'key': 'isVerified', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'rfc-1123'},
    +        'updated': {'key': 'updated', 'type': 'rfc-1123'},
    +        'verification_code': {'key': 'verificationCode', 'type': 'str'},
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(CertificatePropertiesWithNonce, self).__init__(**kwargs)
    +        self.subject = None
    +        self.expiry = None
    +        self.thumbprint = None
    +        self.is_verified = None
    +        self.created = None
    +        self.updated = None
    +        self.verification_code = None
    +        self.certificate = None
    +
    +
    +class CertificateVerificationDescription(Model):
    +    """The JSON-serialized leaf certificate.
    +
    +    :param certificate: base-64 representation of X509 certificate .cer file
    +     or just .pem file content.
    +    :type certificate: str
    +    """
    +
    +    _attribute_map = {
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, certificate: str=None, **kwargs) -> None:
    +        super(CertificateVerificationDescription, self).__init__(**kwargs)
    +        self.certificate = certificate
    +
    +
    +class CertificateWithNonceDescription(Model):
    +    """The X509 Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.CertificatePropertiesWithNonce
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The name of the certificate.
    +    :vartype name: str
    +    :ivar etag: The entity tag.
    +    :vartype etag: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'etag': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'CertificatePropertiesWithNonce'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, properties=None, **kwargs) -> None:
    +        super(CertificateWithNonceDescription, self).__init__(**kwargs)
    +        self.properties = properties
    +        self.id = None
    +        self.name = None
    +        self.etag = None
    +        self.type = None
    +
    +
    +class CloudError(Model):
    +    """CloudError.
    +    """
    +
    +    _attribute_map = {
    +    }
    +
    +
    +class CloudToDeviceProperties(Model):
    +    """The IoT hub cloud-to-device messaging properties.
    +
    +    :param max_delivery_count: The max delivery count for cloud-to-device
    +     messages in the device queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type max_delivery_count: int
    +    :param default_ttl_as_iso8601: The default time to live for
    +     cloud-to-device messages in the device queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type default_ttl_as_iso8601: timedelta
    +    :param feedback:
    +    :type feedback: ~azure.mgmt.iothub.models.FeedbackProperties
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +        'default_ttl_as_iso8601': {'key': 'defaultTtlAsIso8601', 'type': 'duration'},
    +        'feedback': {'key': 'feedback', 'type': 'FeedbackProperties'},
    +    }
    +
    +    def __init__(self, *, max_delivery_count: int=None, default_ttl_as_iso8601=None, feedback=None, **kwargs) -> None:
    +        super(CloudToDeviceProperties, self).__init__(**kwargs)
    +        self.max_delivery_count = max_delivery_count
    +        self.default_ttl_as_iso8601 = default_ttl_as_iso8601
    +        self.feedback = feedback
    +
    +
    +class EndpointHealthData(Model):
    +    """The health data for an endpoint.
    +
    +    :param endpoint_id: Id of the endpoint
    +    :type endpoint_id: str
    +    :param health_status: Health statuses have following meanings. The
    +     'healthy' status shows that the endpoint is accepting messages as
    +     expected. The 'unhealthy' status shows that the endpoint is not accepting
    +     messages as expected and IoT Hub is retrying to send data to this
    +     endpoint. The status of an unhealthy endpoint will be updated to healthy
    +     when IoT Hub has established an eventually consistent state of health. The
    +     'dead' status shows that the endpoint is not accepting messages, after IoT
    +     Hub retried sending messages for the retrial period. See IoT Hub metrics
    +     to identify errors and monitor issues with endpoints. The 'unknown' status
    +     shows that the IoT Hub has not established a connection with the endpoint.
    +     No messages have been delivered to or rejected from this endpoint.
    +     Possible values include: 'unknown', 'healthy', 'unhealthy', 'dead'
    +    :type health_status: str or ~azure.mgmt.iothub.models.EndpointHealthStatus
    +    """
    +
    +    _attribute_map = {
    +        'endpoint_id': {'key': 'endpointId', 'type': 'str'},
    +        'health_status': {'key': 'healthStatus', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, endpoint_id: str=None, health_status=None, **kwargs) -> None:
    +        super(EndpointHealthData, self).__init__(**kwargs)
    +        self.endpoint_id = endpoint_id
    +        self.health_status = health_status
    +
    +
    +class ErrorDetails(Model):
    +    """Error details.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: The error code.
    +    :vartype code: str
    +    :ivar http_status_code: The HTTP status code.
    +    :vartype http_status_code: str
    +    :ivar message: The error message.
    +    :vartype message: str
    +    :ivar details: The error details.
    +    :vartype details: str
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'http_status_code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'details': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'http_status_code': {'key': 'httpStatusCode', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'details': {'key': 'details', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(ErrorDetails, self).__init__(**kwargs)
    +        self.code = None
    +        self.http_status_code = None
    +        self.message = None
    +        self.details = None
    +
    +
    +class ErrorDetailsException(HttpOperationError):
    +    """Server responsed with exception of type: 'ErrorDetails'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, deserialize, response, *args):
    +
    +        super(ErrorDetailsException, self).__init__(deserialize, response, 'ErrorDetails', *args)
    +
    +
    +class EventHubConsumerGroupInfo(Model):
    +    """The properties of the EventHubConsumerGroupInfo object.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties: The tags.
    +    :type properties: dict[str, str]
    +    :ivar id: The Event Hub-compatible consumer group identifier.
    +    :vartype id: str
    +    :ivar name: The Event Hub-compatible consumer group name.
    +    :vartype name: str
    +    :ivar type: the resource type.
    +    :vartype type: str
    +    :ivar etag: The etag.
    +    :vartype etag: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'etag': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': '{str}'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, properties=None, **kwargs) -> None:
    +        super(EventHubConsumerGroupInfo, self).__init__(**kwargs)
    +        self.properties = properties
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.etag = None
    +
    +
    +class EventHubProperties(Model):
    +    """The properties of the provisioned Event Hub-compatible endpoint used by the
    +    IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param retention_time_in_days: The retention time for device-to-cloud
    +     messages in days. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages
    +    :type retention_time_in_days: long
    +    :param partition_count: The number of partitions for receiving
    +     device-to-cloud messages in the Event Hub-compatible endpoint. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages.
    +    :type partition_count: int
    +    :ivar partition_ids: The partition ids in the Event Hub-compatible
    +     endpoint.
    +    :vartype partition_ids: list[str]
    +    :ivar path: The Event Hub-compatible name.
    +    :vartype path: str
    +    :ivar endpoint: The Event Hub-compatible endpoint.
    +    :vartype endpoint: str
    +    """
    +
    +    _validation = {
    +        'partition_ids': {'readonly': True},
    +        'path': {'readonly': True},
    +        'endpoint': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'retention_time_in_days': {'key': 'retentionTimeInDays', 'type': 'long'},
    +        'partition_count': {'key': 'partitionCount', 'type': 'int'},
    +        'partition_ids': {'key': 'partitionIds', 'type': '[str]'},
    +        'path': {'key': 'path', 'type': 'str'},
    +        'endpoint': {'key': 'endpoint', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, retention_time_in_days: int=None, partition_count: int=None, **kwargs) -> None:
    +        super(EventHubProperties, self).__init__(**kwargs)
    +        self.retention_time_in_days = retention_time_in_days
    +        self.partition_count = partition_count
    +        self.partition_ids = None
    +        self.path = None
    +        self.endpoint = None
    +
    +
    +class ExportDevicesRequest(Model):
    +    """Use to provide parameters when requesting an export of all devices in the
    +    IoT hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param export_blob_container_uri: Required. The export blob container URI.
    +    :type export_blob_container_uri: str
    +    :param exclude_keys: Required. The value indicating whether keys should be
    +     excluded during export.
    +    :type exclude_keys: bool
    +    """
    +
    +    _validation = {
    +        'export_blob_container_uri': {'required': True},
    +        'exclude_keys': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'export_blob_container_uri': {'key': 'exportBlobContainerUri', 'type': 'str'},
    +        'exclude_keys': {'key': 'excludeKeys', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, export_blob_container_uri: str, exclude_keys: bool, **kwargs) -> None:
    +        super(ExportDevicesRequest, self).__init__(**kwargs)
    +        self.export_blob_container_uri = export_blob_container_uri
    +        self.exclude_keys = exclude_keys
    +
    +
    +class FallbackRouteProperties(Model):
    +    """The properties of the fallback route. IoT Hub uses these properties when it
    +    routes messages to the fallback endpoint.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: The name of the route. The name can only include alphanumeric
    +     characters, periods, underscores, hyphens, has a maximum length of 64
    +     characters, and must be unique.
    +    :type name: str
    +    :ivar source: Required. The source to which the routing rule is to be
    +     applied to. For example, DeviceMessages. Default value: "DeviceMessages" .
    +    :vartype source: str
    +    :param condition: The condition which is evaluated in order to apply the
    +     fallback route. If the condition is not provided it will evaluate to true
    +     by default. For grammar, See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
    +    :type condition: str
    +    :param endpoint_names: Required. The list of endpoints to which the
    +     messages that satisfy the condition are routed to. Currently only 1
    +     endpoint is allowed.
    +    :type endpoint_names: list[str]
    +    :param is_enabled: Required. Used to specify whether the fallback route is
    +     enabled.
    +    :type is_enabled: bool
    +    """
    +
    +    _validation = {
    +        'source': {'required': True, 'constant': True},
    +        'endpoint_names': {'required': True, 'max_items': 1, 'min_items': 1},
    +        'is_enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'condition': {'key': 'condition', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +        'is_enabled': {'key': 'isEnabled', 'type': 'bool'},
    +    }
    +
    +    source = "DeviceMessages"
    +
    +    def __init__(self, *, endpoint_names, is_enabled: bool, name: str=None, condition: str=None, **kwargs) -> None:
    +        super(FallbackRouteProperties, self).__init__(**kwargs)
    +        self.name = name
    +        self.condition = condition
    +        self.endpoint_names = endpoint_names
    +        self.is_enabled = is_enabled
    +
    +
    +class FeedbackProperties(Model):
    +    """The properties of the feedback queue for cloud-to-device messages.
    +
    +    :param lock_duration_as_iso8601: The lock duration for the feedback queue.
    +     See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type lock_duration_as_iso8601: timedelta
    +    :param ttl_as_iso8601: The period of time for which a message is available
    +     to consume before it is expired by the IoT hub. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type ttl_as_iso8601: timedelta
    +    :param max_delivery_count: The number of times the IoT hub attempts to
    +     deliver a message on the feedback queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type max_delivery_count: int
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lock_duration_as_iso8601': {'key': 'lockDurationAsIso8601', 'type': 'duration'},
    +        'ttl_as_iso8601': {'key': 'ttlAsIso8601', 'type': 'duration'},
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, lock_duration_as_iso8601=None, ttl_as_iso8601=None, max_delivery_count: int=None, **kwargs) -> None:
    +        super(FeedbackProperties, self).__init__(**kwargs)
    +        self.lock_duration_as_iso8601 = lock_duration_as_iso8601
    +        self.ttl_as_iso8601 = ttl_as_iso8601
    +        self.max_delivery_count = max_delivery_count
    +
    +
    +class ImportDevicesRequest(Model):
    +    """Use to provide parameters when requesting an import of all devices in the
    +    hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param input_blob_container_uri: Required. The input blob container URI.
    +    :type input_blob_container_uri: str
    +    :param output_blob_container_uri: Required. The output blob container URI.
    +    :type output_blob_container_uri: str
    +    """
    +
    +    _validation = {
    +        'input_blob_container_uri': {'required': True},
    +        'output_blob_container_uri': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'input_blob_container_uri': {'key': 'inputBlobContainerUri', 'type': 'str'},
    +        'output_blob_container_uri': {'key': 'outputBlobContainerUri', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, input_blob_container_uri: str, output_blob_container_uri: str, **kwargs) -> None:
    +        super(ImportDevicesRequest, self).__init__(**kwargs)
    +        self.input_blob_container_uri = input_blob_container_uri
    +        self.output_blob_container_uri = output_blob_container_uri
    +
    +
    +class IotHubCapacity(Model):
    +    """IoT Hub capacity information.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar minimum: The minimum number of units.
    +    :vartype minimum: long
    +    :ivar maximum: The maximum number of units.
    +    :vartype maximum: long
    +    :ivar default: The default number of units.
    +    :vartype default: long
    +    :ivar scale_type: The type of the scaling enabled. Possible values
    +     include: 'Automatic', 'Manual', 'None'
    +    :vartype scale_type: str or ~azure.mgmt.iothub.models.IotHubScaleType
    +    """
    +
    +    _validation = {
    +        'minimum': {'readonly': True, 'maximum': 1, 'minimum': 1},
    +        'maximum': {'readonly': True},
    +        'default': {'readonly': True},
    +        'scale_type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'minimum': {'key': 'minimum', 'type': 'long'},
    +        'maximum': {'key': 'maximum', 'type': 'long'},
    +        'default': {'key': 'default', 'type': 'long'},
    +        'scale_type': {'key': 'scaleType', 'type': 'IotHubScaleType'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(IotHubCapacity, self).__init__(**kwargs)
    +        self.minimum = None
    +        self.maximum = None
    +        self.default = None
    +        self.scale_type = None
    +
    +
    +class Resource(Model):
    +    """The common properties of an Azure resource.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The resource name.
    +    :vartype name: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    :param location: Required. The resource location.
    +    :type location: str
    +    :param tags: The resource tags.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True, 'pattern': r'^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{2,49}[a-zA-Z0-9]$'},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, location: str, tags=None, **kwargs) -> None:
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.location = location
    +        self.tags = tags
    +
    +
    +class IotHubDescription(Resource):
    +    """The description of the IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The resource name.
    +    :vartype name: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    :param location: Required. The resource location.
    +    :type location: str
    +    :param tags: The resource tags.
    +    :type tags: dict[str, str]
    +    :param etag: The Etag field is *not* required. If it is provided in the
    +     response body, it must also be provided as a header per the normal ETag
    +     convention.
    +    :type etag: str
    +    :param properties: IotHub properties
    +    :type properties: ~azure.mgmt.iothub.models.IotHubProperties
    +    :param sku: Required. IotHub SKU info
    +    :type sku: ~azure.mgmt.iothub.models.IotHubSkuInfo
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True, 'pattern': r'^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{2,49}[a-zA-Z0-9]$'},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'sku': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'properties': {'key': 'properties', 'type': 'IotHubProperties'},
    +        'sku': {'key': 'sku', 'type': 'IotHubSkuInfo'},
    +    }
    +
    +    def __init__(self, *, location: str, sku, tags=None, etag: str=None, properties=None, **kwargs) -> None:
    +        super(IotHubDescription, self).__init__(location=location, tags=tags, **kwargs)
    +        self.etag = etag
    +        self.properties = properties
    +        self.sku = sku
    +
    +
    +class IotHubLocationDescription(Model):
    +    """Public representation of one of the locations where a resource is
    +    provisioned.
    +
    +    :param location: Azure Geo Regions
    +    :type location: str
    +    :param role: Specific Role assigned to this location. Possible values
    +     include: 'primary', 'secondary'
    +    :type role: str or ~azure.mgmt.iothub.models.IotHubReplicaRoleType
    +    """
    +
    +    _attribute_map = {
    +        'location': {'key': 'location', 'type': 'str'},
    +        'role': {'key': 'role', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, location: str=None, role=None, **kwargs) -> None:
    +        super(IotHubLocationDescription, self).__init__(**kwargs)
    +        self.location = location
    +        self.role = role
    +
    +
    +class IotHubNameAvailabilityInfo(Model):
    +    """The properties indicating whether a given IoT hub name is available.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name_available: The value which indicates whether the provided name
    +     is available.
    +    :vartype name_available: bool
    +    :ivar reason: The reason for unavailability. Possible values include:
    +     'Invalid', 'AlreadyExists'
    +    :vartype reason: str or
    +     ~azure.mgmt.iothub.models.IotHubNameUnavailabilityReason
    +    :param message: The detailed reason message.
    +    :type message: str
    +    """
    +
    +    _validation = {
    +        'name_available': {'readonly': True},
    +        'reason': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name_available': {'key': 'nameAvailable', 'type': 'bool'},
    +        'reason': {'key': 'reason', 'type': 'IotHubNameUnavailabilityReason'},
    +        'message': {'key': 'message', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, message: str=None, **kwargs) -> None:
    +        super(IotHubNameAvailabilityInfo, self).__init__(**kwargs)
    +        self.name_available = None
    +        self.reason = None
    +        self.message = message
    +
    +
    +class IotHubProperties(Model):
    +    """The properties of an IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param authorization_policies: The shared access policies you can use to
    +     secure a connection to the IoT hub.
    +    :type authorization_policies:
    +     list[~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRule]
    +    :param ip_filter_rules: The IP filter rules.
    +    :type ip_filter_rules: list[~azure.mgmt.iothub.models.IpFilterRule]
    +    :ivar provisioning_state: The provisioning state.
    +    :vartype provisioning_state: str
    +    :ivar state: The hub state.
    +    :vartype state: str
    +    :ivar host_name: The name of the host.
    +    :vartype host_name: str
    +    :param event_hub_endpoints: The Event Hub-compatible endpoint properties.
    +     The only possible keys to this dictionary is events. This key has to be
    +     present in the dictionary while making create or update calls for the IoT
    +     hub.
    +    :type event_hub_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.EventHubProperties]
    +    :param routing:
    +    :type routing: ~azure.mgmt.iothub.models.RoutingProperties
    +    :param storage_endpoints: The list of Azure Storage endpoints where you
    +     can upload files. Currently you can configure only one Azure Storage
    +     account and that MUST have its key as $default. Specifying more than one
    +     storage account causes an error to be thrown. Not specifying a value for
    +     this property when the enableFileUploadNotifications property is set to
    +     True, causes an error to be thrown.
    +    :type storage_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.StorageEndpointProperties]
    +    :param messaging_endpoints: The messaging endpoint properties for the file
    +     upload notification queue.
    +    :type messaging_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.MessagingEndpointProperties]
    +    :param enable_file_upload_notifications: If True, file upload
    +     notifications are enabled.
    +    :type enable_file_upload_notifications: bool
    +    :param cloud_to_device:
    +    :type cloud_to_device: ~azure.mgmt.iothub.models.CloudToDeviceProperties
    +    :param comments: IoT hub comments.
    +    :type comments: str
    +    :param device_streams: The device streams properties of iothub.
    +    :type device_streams:
    +     ~azure.mgmt.iothub.models.IotHubPropertiesDeviceStreams
    +    :param features: The capabilities and features enabled for the IoT hub.
    +     Possible values include: 'None', 'DeviceManagement'
    +    :type features: str or ~azure.mgmt.iothub.models.Capabilities
    +    :param locations: Primary and secondary location for iot hub
    +    :type locations: list[~azure.mgmt.iothub.models.IotHubLocationDescription]
    +    """
    +
    +    _validation = {
    +        'provisioning_state': {'readonly': True},
    +        'state': {'readonly': True},
    +        'host_name': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'authorization_policies': {'key': 'authorizationPolicies', 'type': '[SharedAccessSignatureAuthorizationRule]'},
    +        'ip_filter_rules': {'key': 'ipFilterRules', 'type': '[IpFilterRule]'},
    +        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
    +        'state': {'key': 'state', 'type': 'str'},
    +        'host_name': {'key': 'hostName', 'type': 'str'},
    +        'event_hub_endpoints': {'key': 'eventHubEndpoints', 'type': '{EventHubProperties}'},
    +        'routing': {'key': 'routing', 'type': 'RoutingProperties'},
    +        'storage_endpoints': {'key': 'storageEndpoints', 'type': '{StorageEndpointProperties}'},
    +        'messaging_endpoints': {'key': 'messagingEndpoints', 'type': '{MessagingEndpointProperties}'},
    +        'enable_file_upload_notifications': {'key': 'enableFileUploadNotifications', 'type': 'bool'},
    +        'cloud_to_device': {'key': 'cloudToDevice', 'type': 'CloudToDeviceProperties'},
    +        'comments': {'key': 'comments', 'type': 'str'},
    +        'device_streams': {'key': 'deviceStreams', 'type': 'IotHubPropertiesDeviceStreams'},
    +        'features': {'key': 'features', 'type': 'str'},
    +        'locations': {'key': 'locations', 'type': '[IotHubLocationDescription]'},
    +    }
    +
    +    def __init__(self, *, authorization_policies=None, ip_filter_rules=None, event_hub_endpoints=None, routing=None, storage_endpoints=None, messaging_endpoints=None, enable_file_upload_notifications: bool=None, cloud_to_device=None, comments: str=None, device_streams=None, features=None, locations=None, **kwargs) -> None:
    +        super(IotHubProperties, self).__init__(**kwargs)
    +        self.authorization_policies = authorization_policies
    +        self.ip_filter_rules = ip_filter_rules
    +        self.provisioning_state = None
    +        self.state = None
    +        self.host_name = None
    +        self.event_hub_endpoints = event_hub_endpoints
    +        self.routing = routing
    +        self.storage_endpoints = storage_endpoints
    +        self.messaging_endpoints = messaging_endpoints
    +        self.enable_file_upload_notifications = enable_file_upload_notifications
    +        self.cloud_to_device = cloud_to_device
    +        self.comments = comments
    +        self.device_streams = device_streams
    +        self.features = features
    +        self.locations = locations
    +
    +
    +class IotHubPropertiesDeviceStreams(Model):
    +    """The device streams properties of iothub.
    +
    +    :param streaming_endpoints: List of Device Streams Endpoints.
    +    :type streaming_endpoints: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'streaming_endpoints': {'key': 'streamingEndpoints', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, *, streaming_endpoints=None, **kwargs) -> None:
    +        super(IotHubPropertiesDeviceStreams, self).__init__(**kwargs)
    +        self.streaming_endpoints = streaming_endpoints
    +
    +
    +class IotHubQuotaMetricInfo(Model):
    +    """Quota metrics properties.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name: The name of the quota metric.
    +    :vartype name: str
    +    :ivar current_value: The current value for the quota metric.
    +    :vartype current_value: long
    +    :ivar max_value: The maximum value of the quota metric.
    +    :vartype max_value: long
    +    """
    +
    +    _validation = {
    +        'name': {'readonly': True},
    +        'current_value': {'readonly': True},
    +        'max_value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'current_value': {'key': 'currentValue', 'type': 'long'},
    +        'max_value': {'key': 'maxValue', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(IotHubQuotaMetricInfo, self).__init__(**kwargs)
    +        self.name = None
    +        self.current_value = None
    +        self.max_value = None
    +
    +
    +class IotHubSkuDescription(Model):
    +    """SKU properties.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar resource_type: The type of the resource.
    +    :vartype resource_type: str
    +    :param sku: Required. The type of the resource.
    +    :type sku: ~azure.mgmt.iothub.models.IotHubSkuInfo
    +    :param capacity: Required. IotHub capacity
    +    :type capacity: ~azure.mgmt.iothub.models.IotHubCapacity
    +    """
    +
    +    _validation = {
    +        'resource_type': {'readonly': True},
    +        'sku': {'required': True},
    +        'capacity': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'resource_type': {'key': 'resourceType', 'type': 'str'},
    +        'sku': {'key': 'sku', 'type': 'IotHubSkuInfo'},
    +        'capacity': {'key': 'capacity', 'type': 'IotHubCapacity'},
    +    }
    +
    +    def __init__(self, *, sku, capacity, **kwargs) -> None:
    +        super(IotHubSkuDescription, self).__init__(**kwargs)
    +        self.resource_type = None
    +        self.sku = sku
    +        self.capacity = capacity
    +
    +
    +class IotHubSkuInfo(Model):
    +    """Information about the SKU of the IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the SKU. Possible values include: 'F1',
    +     'S1', 'S2', 'S3', 'B1', 'B2', 'B3'
    +    :type name: str or ~azure.mgmt.iothub.models.IotHubSku
    +    :ivar tier: The billing tier for the IoT hub. Possible values include:
    +     'Free', 'Standard', 'Basic'
    +    :vartype tier: str or ~azure.mgmt.iothub.models.IotHubSkuTier
    +    :param capacity: The number of provisioned IoT Hub units. See:
    +     https://docs.microsoft.com/azure/azure-subscription-service-limits#iot-hub-limits.
    +    :type capacity: long
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'tier': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'tier': {'key': 'tier', 'type': 'IotHubSkuTier'},
    +        'capacity': {'key': 'capacity', 'type': 'long'},
    +    }
    +
    +    def __init__(self, *, name, capacity: int=None, **kwargs) -> None:
    +        super(IotHubSkuInfo, self).__init__(**kwargs)
    +        self.name = name
    +        self.tier = None
    +        self.capacity = capacity
    +
    +
    +class IpFilterRule(Model):
    +    """The IP filter rules for the IoT hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param filter_name: Required. The name of the IP filter rule.
    +    :type filter_name: str
    +    :param action: Required. The desired action for requests captured by this
    +     rule. Possible values include: 'Accept', 'Reject'
    +    :type action: str or ~azure.mgmt.iothub.models.IpFilterActionType
    +    :param ip_mask: Required. A string that contains the IP address range in
    +     CIDR notation for the rule.
    +    :type ip_mask: str
    +    """
    +
    +    _validation = {
    +        'filter_name': {'required': True},
    +        'action': {'required': True},
    +        'ip_mask': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'filter_name': {'key': 'filterName', 'type': 'str'},
    +        'action': {'key': 'action', 'type': 'IpFilterActionType'},
    +        'ip_mask': {'key': 'ipMask', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, filter_name: str, action, ip_mask: str, **kwargs) -> None:
    +        super(IpFilterRule, self).__init__(**kwargs)
    +        self.filter_name = filter_name
    +        self.action = action
    +        self.ip_mask = ip_mask
    +
    +
    +class JobResponse(Model):
    +    """The properties of the Job Response object.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar job_id: The job identifier.
    +    :vartype job_id: str
    +    :ivar start_time_utc: The start time of the job.
    +    :vartype start_time_utc: datetime
    +    :ivar end_time_utc: The time the job stopped processing.
    +    :vartype end_time_utc: datetime
    +    :ivar type: The type of the job. Possible values include: 'unknown',
    +     'export', 'import', 'backup', 'readDeviceProperties',
    +     'writeDeviceProperties', 'updateDeviceConfiguration', 'rebootDevice',
    +     'factoryResetDevice', 'firmwareUpdate'
    +    :vartype type: str or ~azure.mgmt.iothub.models.JobType
    +    :ivar status: The status of the job. Possible values include: 'unknown',
    +     'enqueued', 'running', 'completed', 'failed', 'cancelled'
    +    :vartype status: str or ~azure.mgmt.iothub.models.JobStatus
    +    :ivar failure_reason: If status == failed, this string containing the
    +     reason for the failure.
    +    :vartype failure_reason: str
    +    :ivar status_message: The status message for the job.
    +    :vartype status_message: str
    +    :ivar parent_job_id: The job identifier of the parent job, if any.
    +    :vartype parent_job_id: str
    +    """
    +
    +    _validation = {
    +        'job_id': {'readonly': True},
    +        'start_time_utc': {'readonly': True},
    +        'end_time_utc': {'readonly': True},
    +        'type': {'readonly': True},
    +        'status': {'readonly': True},
    +        'failure_reason': {'readonly': True},
    +        'status_message': {'readonly': True},
    +        'parent_job_id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'job_id': {'key': 'jobId', 'type': 'str'},
    +        'start_time_utc': {'key': 'startTimeUtc', 'type': 'rfc-1123'},
    +        'end_time_utc': {'key': 'endTimeUtc', 'type': 'rfc-1123'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'status': {'key': 'status', 'type': 'JobStatus'},
    +        'failure_reason': {'key': 'failureReason', 'type': 'str'},
    +        'status_message': {'key': 'statusMessage', 'type': 'str'},
    +        'parent_job_id': {'key': 'parentJobId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(JobResponse, self).__init__(**kwargs)
    +        self.job_id = None
    +        self.start_time_utc = None
    +        self.end_time_utc = None
    +        self.type = None
    +        self.status = None
    +        self.failure_reason = None
    +        self.status_message = None
    +        self.parent_job_id = None
    +
    +
    +class MatchedRoute(Model):
    +    """Routes that matched.
    +
    +    :param properties: Properties of routes that matched
    +    :type properties: ~azure.mgmt.iothub.models.RouteProperties
    +    """
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'RouteProperties'},
    +    }
    +
    +    def __init__(self, *, properties=None, **kwargs) -> None:
    +        super(MatchedRoute, self).__init__(**kwargs)
    +        self.properties = properties
    +
    +
    +class MessagingEndpointProperties(Model):
    +    """The properties of the messaging endpoints used by this IoT hub.
    +
    +    :param lock_duration_as_iso8601: The lock duration. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type lock_duration_as_iso8601: timedelta
    +    :param ttl_as_iso8601: The period of time for which a message is available
    +     to consume before it is expired by the IoT hub. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type ttl_as_iso8601: timedelta
    +    :param max_delivery_count: The number of times the IoT hub attempts to
    +     deliver a message. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type max_delivery_count: int
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lock_duration_as_iso8601': {'key': 'lockDurationAsIso8601', 'type': 'duration'},
    +        'ttl_as_iso8601': {'key': 'ttlAsIso8601', 'type': 'duration'},
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, lock_duration_as_iso8601=None, ttl_as_iso8601=None, max_delivery_count: int=None, **kwargs) -> None:
    +        super(MessagingEndpointProperties, self).__init__(**kwargs)
    +        self.lock_duration_as_iso8601 = lock_duration_as_iso8601
    +        self.ttl_as_iso8601 = ttl_as_iso8601
    +        self.max_delivery_count = max_delivery_count
    +
    +
    +class Name(Model):
    +    """Name of Iot Hub type.
    +
    +    :param value: IotHub type
    +    :type value: str
    +    :param localized_value: Localized value of name
    +    :type localized_value: str
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'localized_value': {'key': 'localizedValue', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, value: str=None, localized_value: str=None, **kwargs) -> None:
    +        super(Name, self).__init__(**kwargs)
    +        self.value = value
    +        self.localized_value = localized_value
    +
    +
    +class Operation(Model):
    +    """IoT Hub REST API operation.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name: Operation name: {provider}/{resource}/{read | write | action |
    +     delete}
    +    :vartype name: str
    +    :param display: The object that represents the operation.
    +    :type display: ~azure.mgmt.iothub.models.OperationDisplay
    +    """
    +
    +    _validation = {
    +        'name': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'display': {'key': 'display', 'type': 'OperationDisplay'},
    +    }
    +
    +    def __init__(self, *, display=None, **kwargs) -> None:
    +        super(Operation, self).__init__(**kwargs)
    +        self.name = None
    +        self.display = display
    +
    +
    +class OperationDisplay(Model):
    +    """The object that represents the operation.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar provider: Service provider: Microsoft Devices
    +    :vartype provider: str
    +    :ivar resource: Resource Type: IotHubs
    +    :vartype resource: str
    +    :ivar operation: Name of the operation
    +    :vartype operation: str
    +    :ivar description: Description of the operation
    +    :vartype description: str
    +    """
    +
    +    _validation = {
    +        'provider': {'readonly': True},
    +        'resource': {'readonly': True},
    +        'operation': {'readonly': True},
    +        'description': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'resource': {'key': 'resource', 'type': 'str'},
    +        'operation': {'key': 'operation', 'type': 'str'},
    +        'description': {'key': 'description', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(OperationDisplay, self).__init__(**kwargs)
    +        self.provider = None
    +        self.resource = None
    +        self.operation = None
    +        self.description = None
    +
    +
    +class OperationInputs(Model):
    +    """Input values.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the IoT hub to check.
    +    :type name: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, name: str, **kwargs) -> None:
    +        super(OperationInputs, self).__init__(**kwargs)
    +        self.name = name
    +
    +
    +class RegistryStatistics(Model):
    +    """Identity registry statistics.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar total_device_count: The total count of devices in the identity
    +     registry.
    +    :vartype total_device_count: long
    +    :ivar enabled_device_count: The count of enabled devices in the identity
    +     registry.
    +    :vartype enabled_device_count: long
    +    :ivar disabled_device_count: The count of disabled devices in the identity
    +     registry.
    +    :vartype disabled_device_count: long
    +    """
    +
    +    _validation = {
    +        'total_device_count': {'readonly': True},
    +        'enabled_device_count': {'readonly': True},
    +        'disabled_device_count': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'total_device_count': {'key': 'totalDeviceCount', 'type': 'long'},
    +        'enabled_device_count': {'key': 'enabledDeviceCount', 'type': 'long'},
    +        'disabled_device_count': {'key': 'disabledDeviceCount', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(RegistryStatistics, self).__init__(**kwargs)
    +        self.total_device_count = None
    +        self.enabled_device_count = None
    +        self.disabled_device_count = None
    +
    +
    +class RouteCompilationError(Model):
    +    """Compilation error when evaluating route.
    +
    +    :param message: Route error message
    +    :type message: str
    +    :param severity: Severity of the route error. Possible values include:
    +     'error', 'warning'
    +    :type severity: str or ~azure.mgmt.iothub.models.RouteErrorSeverity
    +    :param location: Location where the route error happened
    +    :type location: ~azure.mgmt.iothub.models.RouteErrorRange
    +    """
    +
    +    _attribute_map = {
    +        'message': {'key': 'message', 'type': 'str'},
    +        'severity': {'key': 'severity', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'RouteErrorRange'},
    +    }
    +
    +    def __init__(self, *, message: str=None, severity=None, location=None, **kwargs) -> None:
    +        super(RouteCompilationError, self).__init__(**kwargs)
    +        self.message = message
    +        self.severity = severity
    +        self.location = location
    +
    +
    +class RouteErrorPosition(Model):
    +    """Position where the route error happened.
    +
    +    :param line: Line where the route error happened
    +    :type line: int
    +    :param column: Column where the route error happened
    +    :type column: int
    +    """
    +
    +    _attribute_map = {
    +        'line': {'key': 'line', 'type': 'int'},
    +        'column': {'key': 'column', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, line: int=None, column: int=None, **kwargs) -> None:
    +        super(RouteErrorPosition, self).__init__(**kwargs)
    +        self.line = line
    +        self.column = column
    +
    +
    +class RouteErrorRange(Model):
    +    """Range of route errors.
    +
    +    :param start: Start where the route error happened
    +    :type start: ~azure.mgmt.iothub.models.RouteErrorPosition
    +    :param end: End where the route error happened
    +    :type end: ~azure.mgmt.iothub.models.RouteErrorPosition
    +    """
    +
    +    _attribute_map = {
    +        'start': {'key': 'start', 'type': 'RouteErrorPosition'},
    +        'end': {'key': 'end', 'type': 'RouteErrorPosition'},
    +    }
    +
    +    def __init__(self, *, start=None, end=None, **kwargs) -> None:
    +        super(RouteErrorRange, self).__init__(**kwargs)
    +        self.start = start
    +        self.end = end
    +
    +
    +class RouteProperties(Model):
    +    """The properties of a routing rule that your IoT hub uses to route messages
    +    to endpoints.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the route. The name can only include
    +     alphanumeric characters, periods, underscores, hyphens, has a maximum
    +     length of 64 characters, and must be unique.
    +    :type name: str
    +    :param source: Required. The source that the routing rule is to be applied
    +     to, such as DeviceMessages. Possible values include: 'Invalid',
    +     'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents',
    +     'DeviceJobLifecycleEvents'
    +    :type source: str or ~azure.mgmt.iothub.models.RoutingSource
    +    :param condition: The condition that is evaluated to apply the routing
    +     rule. If no condition is provided, it evaluates to true by default. For
    +     grammar, see:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
    +    :type condition: str
    +    :param endpoint_names: Required. The list of endpoints to which messages
    +     that satisfy the condition are routed. Currently only one endpoint is
    +     allowed.
    +    :type endpoint_names: list[str]
    +    :param is_enabled: Required. Used to specify whether a route is enabled.
    +    :type is_enabled: bool
    +    """
    +
    +    _validation = {
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +        'source': {'required': True},
    +        'endpoint_names': {'required': True, 'max_items': 1, 'min_items': 1},
    +        'is_enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'condition': {'key': 'condition', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +        'is_enabled': {'key': 'isEnabled', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, name: str, source, endpoint_names, is_enabled: bool, condition: str=None, **kwargs) -> None:
    +        super(RouteProperties, self).__init__(**kwargs)
    +        self.name = name
    +        self.source = source
    +        self.condition = condition
    +        self.endpoint_names = endpoint_names
    +        self.is_enabled = is_enabled
    +
    +
    +class RoutingEndpoints(Model):
    +    """The properties related to the custom endpoints to which your IoT hub routes
    +    messages based on the routing rules. A maximum of 10 custom endpoints are
    +    allowed across all endpoint types for paid hubs and only 1 custom endpoint
    +    is allowed across all endpoint types for free hubs.
    +
    +    :param service_bus_queues: The list of Service Bus queue endpoints that
    +     IoT hub routes the messages to, based on the routing rules.
    +    :type service_bus_queues:
    +     list[~azure.mgmt.iothub.models.RoutingServiceBusQueueEndpointProperties]
    +    :param service_bus_topics: The list of Service Bus topic endpoints that
    +     the IoT hub routes the messages to, based on the routing rules.
    +    :type service_bus_topics:
    +     list[~azure.mgmt.iothub.models.RoutingServiceBusTopicEndpointProperties]
    +    :param event_hubs: The list of Event Hubs endpoints that IoT hub routes
    +     messages to, based on the routing rules. This list does not include the
    +     built-in Event Hubs endpoint.
    +    :type event_hubs:
    +     list[~azure.mgmt.iothub.models.RoutingEventHubProperties]
    +    :param storage_containers: The list of storage container endpoints that
    +     IoT hub routes messages to, based on the routing rules.
    +    :type storage_containers:
    +     list[~azure.mgmt.iothub.models.RoutingStorageContainerProperties]
    +    """
    +
    +    _attribute_map = {
    +        'service_bus_queues': {'key': 'serviceBusQueues', 'type': '[RoutingServiceBusQueueEndpointProperties]'},
    +        'service_bus_topics': {'key': 'serviceBusTopics', 'type': '[RoutingServiceBusTopicEndpointProperties]'},
    +        'event_hubs': {'key': 'eventHubs', 'type': '[RoutingEventHubProperties]'},
    +        'storage_containers': {'key': 'storageContainers', 'type': '[RoutingStorageContainerProperties]'},
    +    }
    +
    +    def __init__(self, *, service_bus_queues=None, service_bus_topics=None, event_hubs=None, storage_containers=None, **kwargs) -> None:
    +        super(RoutingEndpoints, self).__init__(**kwargs)
    +        self.service_bus_queues = service_bus_queues
    +        self.service_bus_topics = service_bus_topics
    +        self.event_hubs = event_hubs
    +        self.storage_containers = storage_containers
    +
    +
    +class RoutingEventHubProperties(Model):
    +    """The properties related to an event hub endpoint.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the event hub
    +     endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the event hub
    +     endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the event hub
    +     endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, name: str, subscription_id: str=None, resource_group: str=None, **kwargs) -> None:
    +        super(RoutingEventHubProperties, self).__init__(**kwargs)
    +        self.connection_string = connection_string
    +        self.name = name
    +        self.subscription_id = subscription_id
    +        self.resource_group = resource_group
    +
    +
    +class RoutingMessage(Model):
    +    """Routing message.
    +
    +    :param body: Body of routing message
    +    :type body: str
    +    :param app_properties: App properties
    +    :type app_properties: dict[str, str]
    +    :param system_properties: System properties
    +    :type system_properties: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'body': {'key': 'body', 'type': 'str'},
    +        'app_properties': {'key': 'appProperties', 'type': '{str}'},
    +        'system_properties': {'key': 'systemProperties', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, body: str=None, app_properties=None, system_properties=None, **kwargs) -> None:
    +        super(RoutingMessage, self).__init__(**kwargs)
    +        self.body = body
    +        self.app_properties = app_properties
    +        self.system_properties = system_properties
    +
    +
    +class RoutingProperties(Model):
    +    """The routing related properties of the IoT hub. See:
    +    https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging.
    +
    +    :param endpoints:
    +    :type endpoints: ~azure.mgmt.iothub.models.RoutingEndpoints
    +    :param routes: The list of user-provided routing rules that the IoT hub
    +     uses to route messages to built-in and custom endpoints. A maximum of 100
    +     routing rules are allowed for paid hubs and a maximum of 5 routing rules
    +     are allowed for free hubs.
    +    :type routes: list[~azure.mgmt.iothub.models.RouteProperties]
    +    :param fallback_route: The properties of the route that is used as a
    +     fall-back route when none of the conditions specified in the 'routes'
    +     section are met. This is an optional parameter. When this property is not
    +     set, the messages which do not meet any of the conditions specified in the
    +     'routes' section get routed to the built-in eventhub endpoint.
    +    :type fallback_route: ~azure.mgmt.iothub.models.FallbackRouteProperties
    +    """
    +
    +    _attribute_map = {
    +        'endpoints': {'key': 'endpoints', 'type': 'RoutingEndpoints'},
    +        'routes': {'key': 'routes', 'type': '[RouteProperties]'},
    +        'fallback_route': {'key': 'fallbackRoute', 'type': 'FallbackRouteProperties'},
    +    }
    +
    +    def __init__(self, *, endpoints=None, routes=None, fallback_route=None, **kwargs) -> None:
    +        super(RoutingProperties, self).__init__(**kwargs)
    +        self.endpoints = endpoints
    +        self.routes = routes
    +        self.fallback_route = fallback_route
    +
    +
    +class RoutingServiceBusQueueEndpointProperties(Model):
    +    """The properties related to service bus queue endpoint types.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the service
    +     bus queue endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types. The name need not be the same as the actual
    +     queue name.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the service bus
    +     queue endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the service bus
    +     queue endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, name: str, subscription_id: str=None, resource_group: str=None, **kwargs) -> None:
    +        super(RoutingServiceBusQueueEndpointProperties, self).__init__(**kwargs)
    +        self.connection_string = connection_string
    +        self.name = name
    +        self.subscription_id = subscription_id
    +        self.resource_group = resource_group
    +
    +
    +class RoutingServiceBusTopicEndpointProperties(Model):
    +    """The properties related to service bus topic endpoint types.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the service
    +     bus topic endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.  The name need not be the same as the actual
    +     topic name.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the service bus
    +     topic endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the service bus
    +     topic endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, name: str, subscription_id: str=None, resource_group: str=None, **kwargs) -> None:
    +        super(RoutingServiceBusTopicEndpointProperties, self).__init__(**kwargs)
    +        self.connection_string = connection_string
    +        self.name = name
    +        self.subscription_id = subscription_id
    +        self.resource_group = resource_group
    +
    +
    +class RoutingStorageContainerProperties(Model):
    +    """The properties related to a storage container endpoint.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the storage
    +     account.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the storage
    +     account.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the storage
    +     account.
    +    :type resource_group: str
    +    :param container_name: Required. The name of storage container in the
    +     storage account.
    +    :type container_name: str
    +    :param file_name_format: File name format for the blob. Default format is
    +     {iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}. All parameters are
    +     mandatory but can be reordered.
    +    :type file_name_format: str
    +    :param batch_frequency_in_seconds: Time interval at which blobs are
    +     written to storage. Value should be between 60 and 720 seconds. Default
    +     value is 300 seconds.
    +    :type batch_frequency_in_seconds: int
    +    :param max_chunk_size_in_bytes: Maximum number of bytes for each blob
    +     written to storage. Value should be between 10485760(10MB) and
    +     524288000(500MB). Default value is 314572800(300MB).
    +    :type max_chunk_size_in_bytes: int
    +    :param encoding: Encoding that is used to serialize messages to blobs.
    +     Supported values are 'avro', 'avrodeflate', and 'JSON'. Default value is
    +     'avro'. Possible values include: 'Avro', 'AvroDeflate', 'JSON'
    +    :type encoding: str or ~azure.mgmt.iothub.models.enum
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +        'container_name': {'required': True},
    +        'batch_frequency_in_seconds': {'maximum': 720, 'minimum': 60},
    +        'max_chunk_size_in_bytes': {'maximum': 524288000, 'minimum': 10485760},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +        'container_name': {'key': 'containerName', 'type': 'str'},
    +        'file_name_format': {'key': 'fileNameFormat', 'type': 'str'},
    +        'batch_frequency_in_seconds': {'key': 'batchFrequencyInSeconds', 'type': 'int'},
    +        'max_chunk_size_in_bytes': {'key': 'maxChunkSizeInBytes', 'type': 'int'},
    +        'encoding': {'key': 'encoding', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, name: str, container_name: str, subscription_id: str=None, resource_group: str=None, file_name_format: str=None, batch_frequency_in_seconds: int=None, max_chunk_size_in_bytes: int=None, encoding=None, **kwargs) -> None:
    +        super(RoutingStorageContainerProperties, self).__init__(**kwargs)
    +        self.connection_string = connection_string
    +        self.name = name
    +        self.subscription_id = subscription_id
    +        self.resource_group = resource_group
    +        self.container_name = container_name
    +        self.file_name_format = file_name_format
    +        self.batch_frequency_in_seconds = batch_frequency_in_seconds
    +        self.max_chunk_size_in_bytes = max_chunk_size_in_bytes
    +        self.encoding = encoding
    +
    +
    +class RoutingTwin(Model):
    +    """Twin reference input parameter. This is an optional parameter.
    +
    +    :param tags: Twin Tags
    +    :type tags: object
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.RoutingTwinProperties
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': 'object'},
    +        'properties': {'key': 'properties', 'type': 'RoutingTwinProperties'},
    +    }
    +
    +    def __init__(self, *, tags=None, properties=None, **kwargs) -> None:
    +        super(RoutingTwin, self).__init__(**kwargs)
    +        self.tags = tags
    +        self.properties = properties
    +
    +
    +class RoutingTwinProperties(Model):
    +    """RoutingTwinProperties.
    +
    +    :param desired: Twin desired properties
    +    :type desired: object
    +    :param reported: Twin desired properties
    +    :type reported: object
    +    """
    +
    +    _attribute_map = {
    +        'desired': {'key': 'desired', 'type': 'object'},
    +        'reported': {'key': 'reported', 'type': 'object'},
    +    }
    +
    +    def __init__(self, *, desired=None, reported=None, **kwargs) -> None:
    +        super(RoutingTwinProperties, self).__init__(**kwargs)
    +        self.desired = desired
    +        self.reported = reported
    +
    +
    +class SharedAccessSignatureAuthorizationRule(Model):
    +    """The properties of an IoT hub shared access policy.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_name: Required. The name of the shared access policy.
    +    :type key_name: str
    +    :param primary_key: The primary key.
    +    :type primary_key: str
    +    :param secondary_key: The secondary key.
    +    :type secondary_key: str
    +    :param rights: Required. The permissions assigned to the shared access
    +     policy. Possible values include: 'RegistryRead', 'RegistryWrite',
    +     'ServiceConnect', 'DeviceConnect', 'RegistryRead, RegistryWrite',
    +     'RegistryRead, ServiceConnect', 'RegistryRead, DeviceConnect',
    +     'RegistryWrite, ServiceConnect', 'RegistryWrite, DeviceConnect',
    +     'ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite,
    +     ServiceConnect', 'RegistryRead, RegistryWrite, DeviceConnect',
    +     'RegistryRead, ServiceConnect, DeviceConnect', 'RegistryWrite,
    +     ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite,
    +     ServiceConnect, DeviceConnect'
    +    :type rights: str or ~azure.mgmt.iothub.models.AccessRights
    +    """
    +
    +    _validation = {
    +        'key_name': {'required': True},
    +        'rights': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_name': {'key': 'keyName', 'type': 'str'},
    +        'primary_key': {'key': 'primaryKey', 'type': 'str'},
    +        'secondary_key': {'key': 'secondaryKey', 'type': 'str'},
    +        'rights': {'key': 'rights', 'type': 'AccessRights'},
    +    }
    +
    +    def __init__(self, *, key_name: str, rights, primary_key: str=None, secondary_key: str=None, **kwargs) -> None:
    +        super(SharedAccessSignatureAuthorizationRule, self).__init__(**kwargs)
    +        self.key_name = key_name
    +        self.primary_key = primary_key
    +        self.secondary_key = secondary_key
    +        self.rights = rights
    +
    +
    +class StorageEndpointProperties(Model):
    +    """The properties of the Azure Storage endpoint for file upload.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param sas_ttl_as_iso8601: The period of time for which the SAS URI
    +     generated by IoT Hub for file upload is valid. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload#file-upload-notification-configuration-options.
    +    :type sas_ttl_as_iso8601: timedelta
    +    :param connection_string: Required. The connection string for the Azure
    +     Storage account to which files are uploaded.
    +    :type connection_string: str
    +    :param container_name: Required. The name of the root container where you
    +     upload files. The container need not exist but should be creatable using
    +     the connectionString specified.
    +    :type container_name: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'container_name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'sas_ttl_as_iso8601': {'key': 'sasTtlAsIso8601', 'type': 'duration'},
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'container_name': {'key': 'containerName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, container_name: str, sas_ttl_as_iso8601=None, **kwargs) -> None:
    +        super(StorageEndpointProperties, self).__init__(**kwargs)
    +        self.sas_ttl_as_iso8601 = sas_ttl_as_iso8601
    +        self.connection_string = connection_string
    +        self.container_name = container_name
    +
    +
    +class TagsResource(Model):
    +    """A container holding only the Tags for a resource, allowing the user to
    +    update the tags on an IoT Hub instance.
    +
    +    :param tags: Resource tags
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, tags=None, **kwargs) -> None:
    +        super(TagsResource, self).__init__(**kwargs)
    +        self.tags = tags
    +
    +
    +class TestAllRoutesInput(Model):
    +    """Input for testing all routes.
    +
    +    :param routing_source: Routing source. Possible values include: 'Invalid',
    +     'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents',
    +     'DeviceJobLifecycleEvents'
    +    :type routing_source: str or ~azure.mgmt.iothub.models.RoutingSource
    +    :param message: Routing message
    +    :type message: ~azure.mgmt.iothub.models.RoutingMessage
    +    :param twin: Routing Twin Reference
    +    :type twin: ~azure.mgmt.iothub.models.RoutingTwin
    +    """
    +
    +    _attribute_map = {
    +        'routing_source': {'key': 'routingSource', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'RoutingMessage'},
    +        'twin': {'key': 'twin', 'type': 'RoutingTwin'},
    +    }
    +
    +    def __init__(self, *, routing_source=None, message=None, twin=None, **kwargs) -> None:
    +        super(TestAllRoutesInput, self).__init__(**kwargs)
    +        self.routing_source = routing_source
    +        self.message = message
    +        self.twin = twin
    +
    +
    +class TestAllRoutesResult(Model):
    +    """Result of testing all routes.
    +
    +    :param routes: JSON-serialized array of matched routes
    +    :type routes: list[~azure.mgmt.iothub.models.MatchedRoute]
    +    """
    +
    +    _attribute_map = {
    +        'routes': {'key': 'routes', 'type': '[MatchedRoute]'},
    +    }
    +
    +    def __init__(self, *, routes=None, **kwargs) -> None:
    +        super(TestAllRoutesResult, self).__init__(**kwargs)
    +        self.routes = routes
    +
    +
    +class TestRouteInput(Model):
    +    """Input for testing route.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param message: Routing message
    +    :type message: ~azure.mgmt.iothub.models.RoutingMessage
    +    :param route: Required. Route properties
    +    :type route: ~azure.mgmt.iothub.models.RouteProperties
    +    :param twin: Routing Twin Reference
    +    :type twin: ~azure.mgmt.iothub.models.RoutingTwin
    +    """
    +
    +    _validation = {
    +        'route': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'message': {'key': 'message', 'type': 'RoutingMessage'},
    +        'route': {'key': 'route', 'type': 'RouteProperties'},
    +        'twin': {'key': 'twin', 'type': 'RoutingTwin'},
    +    }
    +
    +    def __init__(self, *, route, message=None, twin=None, **kwargs) -> None:
    +        super(TestRouteInput, self).__init__(**kwargs)
    +        self.message = message
    +        self.route = route
    +        self.twin = twin
    +
    +
    +class TestRouteResult(Model):
    +    """Result of testing one route.
    +
    +    :param result: Result of testing route. Possible values include:
    +     'undefined', 'false', 'true'
    +    :type result: str or ~azure.mgmt.iothub.models.TestResultStatus
    +    :param details: Detailed result of testing route
    +    :type details: ~azure.mgmt.iothub.models.TestRouteResultDetails
    +    """
    +
    +    _attribute_map = {
    +        'result': {'key': 'result', 'type': 'str'},
    +        'details': {'key': 'details', 'type': 'TestRouteResultDetails'},
    +    }
    +
    +    def __init__(self, *, result=None, details=None, **kwargs) -> None:
    +        super(TestRouteResult, self).__init__(**kwargs)
    +        self.result = result
    +        self.details = details
    +
    +
    +class TestRouteResultDetails(Model):
    +    """Detailed result of testing a route.
    +
    +    :param compilation_errors: JSON-serialized list of route compilation
    +     errors
    +    :type compilation_errors:
    +     list[~azure.mgmt.iothub.models.RouteCompilationError]
    +    """
    +
    +    _attribute_map = {
    +        'compilation_errors': {'key': 'compilationErrors', 'type': '[RouteCompilationError]'},
    +    }
    +
    +    def __init__(self, *, compilation_errors=None, **kwargs) -> None:
    +        super(TestRouteResultDetails, self).__init__(**kwargs)
    +        self.compilation_errors = compilation_errors
    +
    +
    +class UserSubscriptionQuota(Model):
    +    """User subscription quota response.
    +
    +    :param id: IotHub type id
    +    :type id: str
    +    :param type: Response type
    +    :type type: str
    +    :param unit: Unit of IotHub type
    +    :type unit: str
    +    :param current_value: Current number of IotHub type
    +    :type current_value: int
    +    :param limit: Numerical limit on IotHub type
    +    :type limit: int
    +    :param name: IotHub type
    +    :type name: ~azure.mgmt.iothub.models.Name
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'unit': {'key': 'unit', 'type': 'str'},
    +        'current_value': {'key': 'currentValue', 'type': 'int'},
    +        'limit': {'key': 'limit', 'type': 'int'},
    +        'name': {'key': 'name', 'type': 'Name'},
    +    }
    +
    +    def __init__(self, *, id: str=None, type: str=None, unit: str=None, current_value: int=None, limit: int=None, name=None, **kwargs) -> None:
    +        super(UserSubscriptionQuota, self).__init__(**kwargs)
    +        self.id = id
    +        self.type = type
    +        self.unit = unit
    +        self.current_value = current_value
    +        self.limit = limit
    +        self.name = name
    +
    +
    +class UserSubscriptionQuotaListResult(Model):
    +    """Json-serialized array of User subscription quota response.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value:
    +    :type value: list[~azure.mgmt.iothub.models.UserSubscriptionQuota]
    +    :ivar next_link:
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[UserSubscriptionQuota]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, value=None, **kwargs) -> None:
    +        super(UserSubscriptionQuotaListResult, self).__init__(**kwargs)
    +        self.value = value
    +        self.next_link = None
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/_paged_models.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/_paged_models.py
    new file mode 100644
    index 000000000000..9efc5c83f755
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/models/_paged_models.py
    @@ -0,0 +1,118 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.paging import Paged
    +
    +
    +class OperationPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`Operation ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[Operation]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(OperationPaged, self).__init__(*args, **kwargs)
    +class IotHubDescriptionPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`IotHubDescription ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[IotHubDescription]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(IotHubDescriptionPaged, self).__init__(*args, **kwargs)
    +class IotHubSkuDescriptionPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`IotHubSkuDescription ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[IotHubSkuDescription]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(IotHubSkuDescriptionPaged, self).__init__(*args, **kwargs)
    +class EventHubConsumerGroupInfoPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`EventHubConsumerGroupInfo ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[EventHubConsumerGroupInfo]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(EventHubConsumerGroupInfoPaged, self).__init__(*args, **kwargs)
    +class JobResponsePaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`JobResponse ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[JobResponse]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(JobResponsePaged, self).__init__(*args, **kwargs)
    +class IotHubQuotaMetricInfoPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`IotHubQuotaMetricInfo ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[IotHubQuotaMetricInfo]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(IotHubQuotaMetricInfoPaged, self).__init__(*args, **kwargs)
    +class EndpointHealthDataPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`EndpointHealthData ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[EndpointHealthData]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(EndpointHealthDataPaged, self).__init__(*args, **kwargs)
    +class SharedAccessSignatureAuthorizationRulePaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`SharedAccessSignatureAuthorizationRule ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[SharedAccessSignatureAuthorizationRule]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(SharedAccessSignatureAuthorizationRulePaged, self).__init__(*args, **kwargs)
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/__init__.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/__init__.py
    new file mode 100644
    index 000000000000..7faa232fbaf0
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/__init__.py
    @@ -0,0 +1,22 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._operations import Operations
    +from ._iot_hub_resource_operations import IotHubResourceOperations
    +from ._resource_provider_common_operations import ResourceProviderCommonOperations
    +from ._certificates_operations import CertificatesOperations
    +
    +__all__ = [
    +    'Operations',
    +    'IotHubResourceOperations',
    +    'ResourceProviderCommonOperations',
    +    'CertificatesOperations',
    +]
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/_certificates_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/_certificates_operations.py
    new file mode 100644
    index 000000000000..76e4c3696246
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/_certificates_operations.py
    @@ -0,0 +1,462 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +
    +from .. import models
    +
    +
    +class CertificatesOperations(object):
    +    """CertificatesOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2018-12-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2018-12-01-preview"
    +
    +        self.config = config
    +
    +    def list_by_iot_hub(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the certificate list.
    +
    +        Returns the list of certificates.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateListDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateListDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.list_by_iot_hub.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateListDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    list_by_iot_hub.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates'}
    +
    +    def get(
    +            self, resource_group_name, resource_name, certificate_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the certificate.
    +
    +        Returns the certificate.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}'}
    +
    +    def create_or_update(
    +            self, resource_group_name, resource_name, certificate_name, if_match=None, certificate=None, custom_headers=None, raw=False, **operation_config):
    +        """Upload the certificate to the IoT hub.
    +
    +        Adds new or replaces existing certificate.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param if_match: ETag of the Certificate. Do not specify for creating
    +         a brand new certificate. Required to update an existing certificate.
    +        :type if_match: str
    +        :param certificate: base-64 representation of the X509 leaf
    +         certificate .cer file or just .pem file content.
    +        :type certificate: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        certificate_description = models.CertificateBodyDescription(certificate=certificate)
    +
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_description, 'CertificateBodyDescription')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateDescription', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('CertificateDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}'}
    +
    +    def delete(
    +            self, resource_group_name, resource_name, certificate_name, if_match, custom_headers=None, raw=False, **operation_config):
    +        """Delete an X509 certificate.
    +
    +        Deletes an existing X509 certificate or does nothing if it does not
    +        exist.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param if_match: ETag of the Certificate.
    +        :type if_match: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: None or ClientRawResponse if raw=true
    +        :rtype: None or ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 204]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}'}
    +
    +    def generate_verification_code(
    +            self, resource_group_name, resource_name, certificate_name, if_match, custom_headers=None, raw=False, **operation_config):
    +        """Generate verification code for proof of possession flow.
    +
    +        Generates verification code for proof of possession flow. The
    +        verification code will be used to generate a leaf certificate.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param if_match: ETag of the Certificate.
    +        :type if_match: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateWithNonceDescription or ClientRawResponse if
    +         raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateWithNonceDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.generate_verification_code.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateWithNonceDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    generate_verification_code.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}/generateVerificationCode'}
    +
    +    def verify(
    +            self, resource_group_name, resource_name, certificate_name, if_match, certificate=None, custom_headers=None, raw=False, **operation_config):
    +        """Verify certificate's private key possession.
    +
    +        Verifies the certificate's private key possession by providing the leaf
    +        cert issued by the verifying pre uploaded certificate.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param if_match: ETag of the Certificate.
    +        :type if_match: str
    +        :param certificate: base-64 representation of X509 certificate .cer
    +         file or just .pem file content.
    +        :type certificate: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        certificate_verification_body = models.CertificateVerificationDescription(certificate=certificate)
    +
    +        # Construct URL
    +        url = self.verify.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_verification_body, 'CertificateVerificationDescription')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    verify.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}/verify'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/_iot_hub_resource_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/_iot_hub_resource_operations.py
    new file mode 100644
    index 000000000000..29648985a39a
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/_iot_hub_resource_operations.py
    @@ -0,0 +1,1777 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class IotHubResourceOperations(object):
    +    """IotHubResourceOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2018-12-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2018-12-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the non-security related metadata of an IoT hub.
    +
    +        Get the non-security related metadata of an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: IotHubDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.IotHubDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}'}
    +
    +
    +    def _create_or_update_initial(
    +            self, resource_group_name, resource_name, iot_hub_description, if_match=None, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(iot_hub_description, 'IotHubDescription')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def create_or_update(
    +            self, resource_group_name, resource_name, iot_hub_description, if_match=None, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Create or update the metadata of an IoT hub.
    +
    +        Create or update the metadata of an Iot hub. The usual pattern to
    +        modify a property is to retrieve the IoT hub metadata and security
    +        metadata, and then combine them with the modified values in a new body
    +        to update the IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param iot_hub_description: The IoT hub metadata and security
    +         metadata.
    +        :type iot_hub_description: ~azure.mgmt.iothub.models.IotHubDescription
    +        :param if_match: ETag of the IoT Hub. Do not specify for creating a
    +         brand new IoT Hub. Required to update an existing IoT Hub.
    +        :type if_match: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns IotHubDescription or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.iothub.models.IotHubDescription]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.iothub.models.IotHubDescription]]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        raw_result = self._create_or_update_initial(
    +            resource_group_name=resource_group_name,
    +            resource_name=resource_name,
    +            iot_hub_description=iot_hub_description,
    +            if_match=if_match,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}'}
    +
    +
    +    def _update_initial(
    +            self, resource_group_name, resource_name, tags=None, custom_headers=None, raw=False, **operation_config):
    +        iot_hub_tags = models.TagsResource(tags=tags)
    +
    +        # Construct URL
    +        url = self.update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(iot_hub_tags, 'TagsResource')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def update(
    +            self, resource_group_name, resource_name, tags=None, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Update an existing IoT Hubs tags.
    +
    +        Update an existing IoT Hub tags. to update other fields use the
    +        CreateOrUpdate method.
    +
    +        :param resource_group_name: Resource group identifier.
    +        :type resource_group_name: str
    +        :param resource_name: Name of iot hub to update.
    +        :type resource_name: str
    +        :param tags: Resource tags
    +        :type tags: dict[str, str]
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns IotHubDescription or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.iothub.models.IotHubDescription]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.iothub.models.IotHubDescription]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._update_initial(
    +            resource_group_name=resource_group_name,
    +            resource_name=resource_name,
    +            tags=tags,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}'}
    +
    +
    +    def _delete_initial(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202, 204, 404]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +        if response.status_code == 202:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +        if response.status_code == 404:
    +            deserialized = self._deserialize('ErrorDetails', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def delete(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Delete an IoT hub.
    +
    +        Delete an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns object or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[object] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[object]]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        raw_result = self._delete_initial(
    +            resource_group_name=resource_group_name,
    +            resource_name=resource_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('object', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}'}
    +
    +    def list_by_subscription(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """Get all the IoT hubs in a subscription.
    +
    +        Get all the IoT hubs in a subscription.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of IotHubDescription
    +        :rtype:
    +         ~azure.mgmt.iothub.models.IotHubDescriptionPaged[~azure.mgmt.iothub.models.IotHubDescription]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_subscription.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.IotHubDescriptionPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Devices/IotHubs'}
    +
    +    def list_by_resource_group(
    +            self, resource_group_name, custom_headers=None, raw=False, **operation_config):
    +        """Get all the IoT hubs in a resource group.
    +
    +        Get all the IoT hubs in a resource group.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of IotHubDescription
    +        :rtype:
    +         ~azure.mgmt.iothub.models.IotHubDescriptionPaged[~azure.mgmt.iothub.models.IotHubDescription]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_resource_group.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.IotHubDescriptionPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs'}
    +
    +    def get_stats(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the statistics from an IoT hub.
    +
    +        Get the statistics from an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: RegistryStatistics or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.RegistryStatistics or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_stats.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('RegistryStatistics', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_stats.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/IotHubStats'}
    +
    +    def get_valid_skus(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the list of valid SKUs for an IoT hub.
    +
    +        Get the list of valid SKUs for an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of IotHubSkuDescription
    +        :rtype:
    +         ~azure.mgmt.iothub.models.IotHubSkuDescriptionPaged[~azure.mgmt.iothub.models.IotHubSkuDescription]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_valid_skus.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.IotHubSkuDescriptionPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    get_valid_skus.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/skus'}
    +
    +    def list_event_hub_consumer_groups(
    +            self, resource_group_name, resource_name, event_hub_endpoint_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a list of the consumer groups in the Event Hub-compatible
    +        device-to-cloud endpoint in an IoT hub.
    +
    +        Get a list of the consumer groups in the Event Hub-compatible
    +        device-to-cloud endpoint in an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param event_hub_endpoint_name: The name of the Event Hub-compatible
    +         endpoint.
    +        :type event_hub_endpoint_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of EventHubConsumerGroupInfo
    +        :rtype:
    +         ~azure.mgmt.iothub.models.EventHubConsumerGroupInfoPaged[~azure.mgmt.iothub.models.EventHubConsumerGroupInfo]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_event_hub_consumer_groups.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +                    'eventHubEndpointName': self._serialize.url("event_hub_endpoint_name", event_hub_endpoint_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.EventHubConsumerGroupInfoPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_event_hub_consumer_groups.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/eventHubEndpoints/{eventHubEndpointName}/ConsumerGroups'}
    +
    +    def get_event_hub_consumer_group(
    +            self, resource_group_name, resource_name, event_hub_endpoint_name, name, custom_headers=None, raw=False, **operation_config):
    +        """Get a consumer group from the Event Hub-compatible device-to-cloud
    +        endpoint for an IoT hub.
    +
    +        Get a consumer group from the Event Hub-compatible device-to-cloud
    +        endpoint for an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param event_hub_endpoint_name: The name of the Event Hub-compatible
    +         endpoint in the IoT hub.
    +        :type event_hub_endpoint_name: str
    +        :param name: The name of the consumer group to retrieve.
    +        :type name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EventHubConsumerGroupInfo or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.EventHubConsumerGroupInfo or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_event_hub_consumer_group.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'eventHubEndpointName': self._serialize.url("event_hub_endpoint_name", event_hub_endpoint_name, 'str'),
    +            'name': self._serialize.url("name", name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EventHubConsumerGroupInfo', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_event_hub_consumer_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/eventHubEndpoints/{eventHubEndpointName}/ConsumerGroups/{name}'}
    +
    +    def create_event_hub_consumer_group(
    +            self, resource_group_name, resource_name, event_hub_endpoint_name, name, custom_headers=None, raw=False, **operation_config):
    +        """Add a consumer group to an Event Hub-compatible endpoint in an IoT hub.
    +
    +        Add a consumer group to an Event Hub-compatible endpoint in an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param event_hub_endpoint_name: The name of the Event Hub-compatible
    +         endpoint in the IoT hub.
    +        :type event_hub_endpoint_name: str
    +        :param name: The name of the consumer group to add.
    +        :type name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EventHubConsumerGroupInfo or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.EventHubConsumerGroupInfo or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.create_event_hub_consumer_group.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'eventHubEndpointName': self._serialize.url("event_hub_endpoint_name", event_hub_endpoint_name, 'str'),
    +            'name': self._serialize.url("name", name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EventHubConsumerGroupInfo', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    create_event_hub_consumer_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/eventHubEndpoints/{eventHubEndpointName}/ConsumerGroups/{name}'}
    +
    +    def delete_event_hub_consumer_group(
    +            self, resource_group_name, resource_name, event_hub_endpoint_name, name, custom_headers=None, raw=False, **operation_config):
    +        """Delete a consumer group from an Event Hub-compatible endpoint in an IoT
    +        hub.
    +
    +        Delete a consumer group from an Event Hub-compatible endpoint in an IoT
    +        hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param event_hub_endpoint_name: The name of the Event Hub-compatible
    +         endpoint in the IoT hub.
    +        :type event_hub_endpoint_name: str
    +        :param name: The name of the consumer group to delete.
    +        :type name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: None or ClientRawResponse if raw=true
    +        :rtype: None or ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.delete_event_hub_consumer_group.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'eventHubEndpointName': self._serialize.url("event_hub_endpoint_name", event_hub_endpoint_name, 'str'),
    +            'name': self._serialize.url("name", name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +    delete_event_hub_consumer_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/eventHubEndpoints/{eventHubEndpointName}/ConsumerGroups/{name}'}
    +
    +    def list_jobs(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a list of all the jobs in an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry.
    +
    +        Get a list of all the jobs in an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of JobResponse
    +        :rtype:
    +         ~azure.mgmt.iothub.models.JobResponsePaged[~azure.mgmt.iothub.models.JobResponse]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_jobs.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.JobResponsePaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_jobs.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/jobs'}
    +
    +    def get_job(
    +            self, resource_group_name, resource_name, job_id, custom_headers=None, raw=False, **operation_config):
    +        """Get the details of a job from an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry.
    +
    +        Get the details of a job from an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param job_id: The job identifier.
    +        :type job_id: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: JobResponse or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.JobResponse or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_job.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'jobId': self._serialize.url("job_id", job_id, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('JobResponse', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_job.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/jobs/{jobId}'}
    +
    +    def get_quota_metrics(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the quota metrics for an IoT hub.
    +
    +        Get the quota metrics for an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of IotHubQuotaMetricInfo
    +        :rtype:
    +         ~azure.mgmt.iothub.models.IotHubQuotaMetricInfoPaged[~azure.mgmt.iothub.models.IotHubQuotaMetricInfo]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_quota_metrics.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.IotHubQuotaMetricInfoPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    get_quota_metrics.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/quotaMetrics'}
    +
    +    def get_endpoint_health(
    +            self, resource_group_name, iot_hub_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the health for routing endpoints.
    +
    +        Get the health for routing endpoints.
    +
    +        :param resource_group_name:
    +        :type resource_group_name: str
    +        :param iot_hub_name:
    +        :type iot_hub_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of EndpointHealthData
    +        :rtype:
    +         ~azure.mgmt.iothub.models.EndpointHealthDataPaged[~azure.mgmt.iothub.models.EndpointHealthData]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_endpoint_health.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'iotHubName': self._serialize.url("iot_hub_name", iot_hub_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.EndpointHealthDataPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    get_endpoint_health.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{iotHubName}/routingEndpointsHealth'}
    +
    +    def check_name_availability(
    +            self, name, custom_headers=None, raw=False, **operation_config):
    +        """Check if an IoT hub name is available.
    +
    +        Check if an IoT hub name is available.
    +
    +        :param name: The name of the IoT hub to check.
    +        :type name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: IotHubNameAvailabilityInfo or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.IotHubNameAvailabilityInfo or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        operation_inputs = models.OperationInputs(name=name)
    +
    +        # Construct URL
    +        url = self.check_name_availability.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(operation_inputs, 'OperationInputs')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubNameAvailabilityInfo', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    check_name_availability.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Devices/checkNameAvailability'}
    +
    +    def test_all_routes(
    +            self, input, iot_hub_name, resource_group_name, custom_headers=None, raw=False, **operation_config):
    +        """Test all routes.
    +
    +        Test all routes configured in this Iot Hub.
    +
    +        :param input: Input for testing all routes
    +        :type input: ~azure.mgmt.iothub.models.TestAllRoutesInput
    +        :param iot_hub_name: IotHub to be tested
    +        :type iot_hub_name: str
    +        :param resource_group_name: resource group which Iot Hub belongs to
    +        :type resource_group_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: TestAllRoutesResult or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.TestAllRoutesResult or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.test_all_routes.metadata['url']
    +        path_format_arguments = {
    +            'iotHubName': self._serialize.url("iot_hub_name", iot_hub_name, 'str'),
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(input, 'TestAllRoutesInput')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('TestAllRoutesResult', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    test_all_routes.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{iotHubName}/routing/routes/$testall'}
    +
    +    def test_route(
    +            self, input, iot_hub_name, resource_group_name, custom_headers=None, raw=False, **operation_config):
    +        """Test the new route.
    +
    +        Test the new route for this Iot Hub.
    +
    +        :param input: Route that needs to be tested
    +        :type input: ~azure.mgmt.iothub.models.TestRouteInput
    +        :param iot_hub_name: IotHub to be tested
    +        :type iot_hub_name: str
    +        :param resource_group_name: resource group which Iot Hub belongs to
    +        :type resource_group_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: TestRouteResult or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.TestRouteResult or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.test_route.metadata['url']
    +        path_format_arguments = {
    +            'iotHubName': self._serialize.url("iot_hub_name", iot_hub_name, 'str'),
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(input, 'TestRouteInput')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('TestRouteResult', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    test_route.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{iotHubName}/routing/routes/$testnew'}
    +
    +    def list_keys(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the security metadata for an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security.
    +
    +        Get the security metadata for an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of
    +         SharedAccessSignatureAuthorizationRule
    +        :rtype:
    +         ~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRulePaged[~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRule]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_keys.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.post(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.SharedAccessSignatureAuthorizationRulePaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_keys.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/listkeys'}
    +
    +    def get_keys_for_key_name(
    +            self, resource_group_name, resource_name, key_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a shared access policy by name from an IoT hub. For more
    +        information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security.
    +
    +        Get a shared access policy by name from an IoT hub. For more
    +        information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param key_name: The name of the shared access policy.
    +        :type key_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: SharedAccessSignatureAuthorizationRule or ClientRawResponse
    +         if raw=true
    +        :rtype:
    +         ~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRule or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_keys_for_key_name.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'keyName': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SharedAccessSignatureAuthorizationRule', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_keys_for_key_name.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/IotHubKeys/{keyName}/listkeys'}
    +
    +    def export_devices(
    +            self, resource_group_name, resource_name, export_blob_container_uri, exclude_keys, custom_headers=None, raw=False, **operation_config):
    +        """Exports all the device identities in the IoT hub identity registry to
    +        an Azure Storage blob container. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities.
    +
    +        Exports all the device identities in the IoT hub identity registry to
    +        an Azure Storage blob container. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param export_blob_container_uri: The export blob container URI.
    +        :type export_blob_container_uri: str
    +        :param exclude_keys: The value indicating whether keys should be
    +         excluded during export.
    +        :type exclude_keys: bool
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: JobResponse or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.JobResponse or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        export_devices_parameters = models.ExportDevicesRequest(export_blob_container_uri=export_blob_container_uri, exclude_keys=exclude_keys)
    +
    +        # Construct URL
    +        url = self.export_devices.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(export_devices_parameters, 'ExportDevicesRequest')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('JobResponse', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    export_devices.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/exportDevices'}
    +
    +    def import_devices(
    +            self, resource_group_name, resource_name, input_blob_container_uri, output_blob_container_uri, custom_headers=None, raw=False, **operation_config):
    +        """Import, update, or delete device identities in the IoT hub identity
    +        registry from a blob. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities.
    +
    +        Import, update, or delete device identities in the IoT hub identity
    +        registry from a blob. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param input_blob_container_uri: The input blob container URI.
    +        :type input_blob_container_uri: str
    +        :param output_blob_container_uri: The output blob container URI.
    +        :type output_blob_container_uri: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: JobResponse or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.JobResponse or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        import_devices_parameters = models.ImportDevicesRequest(input_blob_container_uri=input_blob_container_uri, output_blob_container_uri=output_blob_container_uri)
    +
    +        # Construct URL
    +        url = self.import_devices.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(import_devices_parameters, 'ImportDevicesRequest')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('JobResponse', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    import_devices.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/importDevices'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/_operations.py
    new file mode 100644
    index 000000000000..e9dce5afa2ff
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/_operations.py
    @@ -0,0 +1,100 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +
    +from .. import models
    +
    +
    +class Operations(object):
    +    """Operations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2018-12-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2018-12-01-preview"
    +
    +        self.config = config
    +
    +    def list(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """Lists all of the available IoT Hub REST API operations.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of Operation
    +        :rtype:
    +         ~azure.mgmt.iothub.models.OperationPaged[~azure.mgmt.iothub.models.Operation]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list.metadata['url']
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.OperationPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list.metadata = {'url': '/providers/Microsoft.Devices/operations'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/_resource_provider_common_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/_resource_provider_common_operations.py
    new file mode 100644
    index 000000000000..100ea6503ac6
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/operations/_resource_provider_common_operations.py
    @@ -0,0 +1,96 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +
    +from .. import models
    +
    +
    +class ResourceProviderCommonOperations(object):
    +    """ResourceProviderCommonOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2018-12-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2018-12-01-preview"
    +
    +        self.config = config
    +
    +    def get_subscription_quota(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """Get the number of iot hubs in the subscription.
    +
    +        Get the number of free and paid iot hubs in the subscription.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: UserSubscriptionQuotaListResult or ClientRawResponse if
    +         raw=true
    +        :rtype: ~azure.mgmt.iothub.models.UserSubscriptionQuotaListResult or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_subscription_quota.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('UserSubscriptionQuotaListResult', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_subscription_quota.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Devices/usages'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/version.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/version.py
    new file mode 100644
    index 000000000000..0a72a39badd5
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2018_12_01_preview/version.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "0.8.2"
    +
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/__init__.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/__init__.py
    new file mode 100644
    index 000000000000..867dea34192d
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/__init__.py
    @@ -0,0 +1,19 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._configuration import IotHubClientConfiguration
    +from ._iot_hub_client import IotHubClient
    +__all__ = ['IotHubClient', 'IotHubClientConfiguration']
    +
    +from .version import VERSION
    +
    +__version__ = VERSION
    +
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/_configuration.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/_configuration.py
    new file mode 100644
    index 000000000000..b2e8885bcfe2
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/_configuration.py
    @@ -0,0 +1,48 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +from msrestazure import AzureConfiguration
    +
    +from .version import VERSION
    +
    +
    +class IotHubClientConfiguration(AzureConfiguration):
    +    """Configuration for IotHubClient
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    :param subscription_id: The subscription identifier.
    +    :type subscription_id: str
    +    :param str base_url: Service URL
    +    """
    +
    +    def __init__(
    +            self, credentials, subscription_id, base_url=None):
    +
    +        if credentials is None:
    +            raise ValueError("Parameter 'credentials' must not be None.")
    +        if subscription_id is None:
    +            raise ValueError("Parameter 'subscription_id' must not be None.")
    +        if not base_url:
    +            base_url = 'https://management.azure.com'
    +
    +        super(IotHubClientConfiguration, self).__init__(base_url)
    +
    +        # Starting Autorest.Python 4.0.64, make connection pool activated by default
    +        self.keep_alive = True
    +
    +        self.add_user_agent('azure-mgmt-iothub/{}'.format(VERSION))
    +        self.add_user_agent('Azure-SDK-For-Python')
    +
    +        self.credentials = credentials
    +        self.subscription_id = subscription_id
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/_iot_hub_client.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/_iot_hub_client.py
    new file mode 100644
    index 000000000000..fbe07e66cddc
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/_iot_hub_client.py
    @@ -0,0 +1,69 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.service_client import SDKClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration import IotHubClientConfiguration
    +from .operations import Operations
    +from .operations import IotHubResourceOperations
    +from .operations import ResourceProviderCommonOperations
    +from .operations import CertificatesOperations
    +from .operations import IotHubOperations
    +from . import models
    +
    +
    +class IotHubClient(SDKClient):
    +    """Use this API to manage the IoT hubs in your Azure subscription.
    +
    +    :ivar config: Configuration for client.
    +    :vartype config: IotHubClientConfiguration
    +
    +    :ivar operations: Operations operations
    +    :vartype operations: azure.mgmt.iothub.operations.Operations
    +    :ivar iot_hub_resource: IotHubResource operations
    +    :vartype iot_hub_resource: azure.mgmt.iothub.operations.IotHubResourceOperations
    +    :ivar resource_provider_common: ResourceProviderCommon operations
    +    :vartype resource_provider_common: azure.mgmt.iothub.operations.ResourceProviderCommonOperations
    +    :ivar certificates: Certificates operations
    +    :vartype certificates: azure.mgmt.iothub.operations.CertificatesOperations
    +    :ivar iot_hub: IotHub operations
    +    :vartype iot_hub: azure.mgmt.iothub.operations.IotHubOperations
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    :param subscription_id: The subscription identifier.
    +    :type subscription_id: str
    +    :param str base_url: Service URL
    +    """
    +
    +    def __init__(
    +            self, credentials, subscription_id, base_url=None):
    +
    +        self.config = IotHubClientConfiguration(credentials, subscription_id, base_url)
    +        super(IotHubClient, self).__init__(self.config.credentials, self.config)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '2019-03-22-preview'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +        self.operations = Operations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.iot_hub_resource = IotHubResourceOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.resource_provider_common = ResourceProviderCommonOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.certificates = CertificatesOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.iot_hub = IotHubOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/__init__.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/__init__.py
    new file mode 100644
    index 000000000000..855c564865d3
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/__init__.py
    @@ -0,0 +1,242 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +try:
    +    from ._models_py3 import CertificateBodyDescription
    +    from ._models_py3 import CertificateDescription
    +    from ._models_py3 import CertificateListDescription
    +    from ._models_py3 import CertificateProperties
    +    from ._models_py3 import CertificatePropertiesWithNonce
    +    from ._models_py3 import CertificateVerificationDescription
    +    from ._models_py3 import CertificateWithNonceDescription
    +    from ._models_py3 import CloudToDeviceProperties
    +    from ._models_py3 import EndpointHealthData
    +    from ._models_py3 import EnrichmentProperties
    +    from ._models_py3 import ErrorDetails, ErrorDetailsException
    +    from ._models_py3 import EventHubConsumerGroupInfo
    +    from ._models_py3 import EventHubProperties
    +    from ._models_py3 import ExportDevicesRequest
    +    from ._models_py3 import FailoverInput
    +    from ._models_py3 import FallbackRouteProperties
    +    from ._models_py3 import FeedbackProperties
    +    from ._models_py3 import ImportDevicesRequest
    +    from ._models_py3 import IotHubCapacity
    +    from ._models_py3 import IotHubDescription
    +    from ._models_py3 import IotHubLocationDescription
    +    from ._models_py3 import IotHubNameAvailabilityInfo
    +    from ._models_py3 import IotHubProperties
    +    from ._models_py3 import IotHubPropertiesDeviceStreams
    +    from ._models_py3 import IotHubQuotaMetricInfo
    +    from ._models_py3 import IotHubSkuDescription
    +    from ._models_py3 import IotHubSkuInfo
    +    from ._models_py3 import IpFilterRule
    +    from ._models_py3 import JobResponse
    +    from ._models_py3 import MatchedRoute
    +    from ._models_py3 import MessagingEndpointProperties
    +    from ._models_py3 import Name
    +    from ._models_py3 import Operation
    +    from ._models_py3 import OperationDisplay
    +    from ._models_py3 import OperationInputs
    +    from ._models_py3 import RegistryStatistics
    +    from ._models_py3 import Resource
    +    from ._models_py3 import RouteCompilationError
    +    from ._models_py3 import RouteErrorPosition
    +    from ._models_py3 import RouteErrorRange
    +    from ._models_py3 import RouteProperties
    +    from ._models_py3 import RoutingEndpoints
    +    from ._models_py3 import RoutingEventHubProperties
    +    from ._models_py3 import RoutingMessage
    +    from ._models_py3 import RoutingProperties
    +    from ._models_py3 import RoutingServiceBusQueueEndpointProperties
    +    from ._models_py3 import RoutingServiceBusTopicEndpointProperties
    +    from ._models_py3 import RoutingStorageContainerProperties
    +    from ._models_py3 import RoutingTwin
    +    from ._models_py3 import RoutingTwinProperties
    +    from ._models_py3 import SharedAccessSignatureAuthorizationRule
    +    from ._models_py3 import StorageEndpointProperties
    +    from ._models_py3 import TagsResource
    +    from ._models_py3 import TestAllRoutesInput
    +    from ._models_py3 import TestAllRoutesResult
    +    from ._models_py3 import TestRouteInput
    +    from ._models_py3 import TestRouteResult
    +    from ._models_py3 import TestRouteResultDetails
    +    from ._models_py3 import UserSubscriptionQuota
    +    from ._models_py3 import UserSubscriptionQuotaListResult
    +except (SyntaxError, ImportError):
    +    from ._models import CertificateBodyDescription
    +    from ._models import CertificateDescription
    +    from ._models import CertificateListDescription
    +    from ._models import CertificateProperties
    +    from ._models import CertificatePropertiesWithNonce
    +    from ._models import CertificateVerificationDescription
    +    from ._models import CertificateWithNonceDescription
    +    from ._models import CloudToDeviceProperties
    +    from ._models import EndpointHealthData
    +    from ._models import EnrichmentProperties
    +    from ._models import ErrorDetails, ErrorDetailsException
    +    from ._models import EventHubConsumerGroupInfo
    +    from ._models import EventHubProperties
    +    from ._models import ExportDevicesRequest
    +    from ._models import FailoverInput
    +    from ._models import FallbackRouteProperties
    +    from ._models import FeedbackProperties
    +    from ._models import ImportDevicesRequest
    +    from ._models import IotHubCapacity
    +    from ._models import IotHubDescription
    +    from ._models import IotHubLocationDescription
    +    from ._models import IotHubNameAvailabilityInfo
    +    from ._models import IotHubProperties
    +    from ._models import IotHubPropertiesDeviceStreams
    +    from ._models import IotHubQuotaMetricInfo
    +    from ._models import IotHubSkuDescription
    +    from ._models import IotHubSkuInfo
    +    from ._models import IpFilterRule
    +    from ._models import JobResponse
    +    from ._models import MatchedRoute
    +    from ._models import MessagingEndpointProperties
    +    from ._models import Name
    +    from ._models import Operation
    +    from ._models import OperationDisplay
    +    from ._models import OperationInputs
    +    from ._models import RegistryStatistics
    +    from ._models import Resource
    +    from ._models import RouteCompilationError
    +    from ._models import RouteErrorPosition
    +    from ._models import RouteErrorRange
    +    from ._models import RouteProperties
    +    from ._models import RoutingEndpoints
    +    from ._models import RoutingEventHubProperties
    +    from ._models import RoutingMessage
    +    from ._models import RoutingProperties
    +    from ._models import RoutingServiceBusQueueEndpointProperties
    +    from ._models import RoutingServiceBusTopicEndpointProperties
    +    from ._models import RoutingStorageContainerProperties
    +    from ._models import RoutingTwin
    +    from ._models import RoutingTwinProperties
    +    from ._models import SharedAccessSignatureAuthorizationRule
    +    from ._models import StorageEndpointProperties
    +    from ._models import TagsResource
    +    from ._models import TestAllRoutesInput
    +    from ._models import TestAllRoutesResult
    +    from ._models import TestRouteInput
    +    from ._models import TestRouteResult
    +    from ._models import TestRouteResultDetails
    +    from ._models import UserSubscriptionQuota
    +    from ._models import UserSubscriptionQuotaListResult
    +from ._paged_models import EndpointHealthDataPaged
    +from ._paged_models import EventHubConsumerGroupInfoPaged
    +from ._paged_models import IotHubDescriptionPaged
    +from ._paged_models import IotHubQuotaMetricInfoPaged
    +from ._paged_models import IotHubSkuDescriptionPaged
    +from ._paged_models import JobResponsePaged
    +from ._paged_models import OperationPaged
    +from ._paged_models import SharedAccessSignatureAuthorizationRulePaged
    +from ._iot_hub_client_enums import (
    +    AccessRights,
    +    IpFilterActionType,
    +    RoutingSource,
    +    Capabilities,
    +    IotHubReplicaRoleType,
    +    IotHubSku,
    +    IotHubSkuTier,
    +    EndpointHealthStatus,
    +    JobType,
    +    JobStatus,
    +    IotHubScaleType,
    +    IotHubNameUnavailabilityReason,
    +    TestResultStatus,
    +    RouteErrorSeverity,
    +)
    +
    +__all__ = [
    +    'CertificateBodyDescription',
    +    'CertificateDescription',
    +    'CertificateListDescription',
    +    'CertificateProperties',
    +    'CertificatePropertiesWithNonce',
    +    'CertificateVerificationDescription',
    +    'CertificateWithNonceDescription',
    +    'CloudToDeviceProperties',
    +    'EndpointHealthData',
    +    'EnrichmentProperties',
    +    'ErrorDetails', 'ErrorDetailsException',
    +    'EventHubConsumerGroupInfo',
    +    'EventHubProperties',
    +    'ExportDevicesRequest',
    +    'FailoverInput',
    +    'FallbackRouteProperties',
    +    'FeedbackProperties',
    +    'ImportDevicesRequest',
    +    'IotHubCapacity',
    +    'IotHubDescription',
    +    'IotHubLocationDescription',
    +    'IotHubNameAvailabilityInfo',
    +    'IotHubProperties',
    +    'IotHubPropertiesDeviceStreams',
    +    'IotHubQuotaMetricInfo',
    +    'IotHubSkuDescription',
    +    'IotHubSkuInfo',
    +    'IpFilterRule',
    +    'JobResponse',
    +    'MatchedRoute',
    +    'MessagingEndpointProperties',
    +    'Name',
    +    'Operation',
    +    'OperationDisplay',
    +    'OperationInputs',
    +    'RegistryStatistics',
    +    'Resource',
    +    'RouteCompilationError',
    +    'RouteErrorPosition',
    +    'RouteErrorRange',
    +    'RouteProperties',
    +    'RoutingEndpoints',
    +    'RoutingEventHubProperties',
    +    'RoutingMessage',
    +    'RoutingProperties',
    +    'RoutingServiceBusQueueEndpointProperties',
    +    'RoutingServiceBusTopicEndpointProperties',
    +    'RoutingStorageContainerProperties',
    +    'RoutingTwin',
    +    'RoutingTwinProperties',
    +    'SharedAccessSignatureAuthorizationRule',
    +    'StorageEndpointProperties',
    +    'TagsResource',
    +    'TestAllRoutesInput',
    +    'TestAllRoutesResult',
    +    'TestRouteInput',
    +    'TestRouteResult',
    +    'TestRouteResultDetails',
    +    'UserSubscriptionQuota',
    +    'UserSubscriptionQuotaListResult',
    +    'OperationPaged',
    +    'IotHubDescriptionPaged',
    +    'IotHubSkuDescriptionPaged',
    +    'EventHubConsumerGroupInfoPaged',
    +    'JobResponsePaged',
    +    'IotHubQuotaMetricInfoPaged',
    +    'EndpointHealthDataPaged',
    +    'SharedAccessSignatureAuthorizationRulePaged',
    +    'AccessRights',
    +    'IpFilterActionType',
    +    'RoutingSource',
    +    'Capabilities',
    +    'IotHubReplicaRoleType',
    +    'IotHubSku',
    +    'IotHubSkuTier',
    +    'EndpointHealthStatus',
    +    'JobType',
    +    'JobStatus',
    +    'IotHubScaleType',
    +    'IotHubNameUnavailabilityReason',
    +    'TestResultStatus',
    +    'RouteErrorSeverity',
    +]
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/_iot_hub_client_enums.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/_iot_hub_client_enums.py
    new file mode 100644
    index 000000000000..e2619c34c7ed
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/_iot_hub_client_enums.py
    @@ -0,0 +1,134 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from enum import Enum
    +
    +
    +class AccessRights(str, Enum):
    +
    +    registry_read = "RegistryRead"
    +    registry_write = "RegistryWrite"
    +    service_connect = "ServiceConnect"
    +    device_connect = "DeviceConnect"
    +    registry_read_registry_write = "RegistryRead, RegistryWrite"
    +    registry_read_service_connect = "RegistryRead, ServiceConnect"
    +    registry_read_device_connect = "RegistryRead, DeviceConnect"
    +    registry_write_service_connect = "RegistryWrite, ServiceConnect"
    +    registry_write_device_connect = "RegistryWrite, DeviceConnect"
    +    service_connect_device_connect = "ServiceConnect, DeviceConnect"
    +    registry_read_registry_write_service_connect = "RegistryRead, RegistryWrite, ServiceConnect"
    +    registry_read_registry_write_device_connect = "RegistryRead, RegistryWrite, DeviceConnect"
    +    registry_read_service_connect_device_connect = "RegistryRead, ServiceConnect, DeviceConnect"
    +    registry_write_service_connect_device_connect = "RegistryWrite, ServiceConnect, DeviceConnect"
    +    registry_read_registry_write_service_connect_device_connect = "RegistryRead, RegistryWrite, ServiceConnect, DeviceConnect"
    +
    +
    +class IpFilterActionType(str, Enum):
    +
    +    accept = "Accept"
    +    reject = "Reject"
    +
    +
    +class RoutingSource(str, Enum):
    +
    +    invalid = "Invalid"
    +    device_messages = "DeviceMessages"
    +    twin_change_events = "TwinChangeEvents"
    +    device_lifecycle_events = "DeviceLifecycleEvents"
    +    device_job_lifecycle_events = "DeviceJobLifecycleEvents"
    +
    +
    +class Capabilities(str, Enum):
    +
    +    none = "None"
    +    device_management = "DeviceManagement"
    +
    +
    +class IotHubReplicaRoleType(str, Enum):
    +
    +    primary = "primary"
    +    secondary = "secondary"
    +
    +
    +class IotHubSku(str, Enum):
    +
    +    f1 = "F1"
    +    s1 = "S1"
    +    s2 = "S2"
    +    s3 = "S3"
    +    b1 = "B1"
    +    b2 = "B2"
    +    b3 = "B3"
    +
    +
    +class IotHubSkuTier(str, Enum):
    +
    +    free = "Free"
    +    standard = "Standard"
    +    basic = "Basic"
    +
    +
    +class EndpointHealthStatus(str, Enum):
    +
    +    unknown = "unknown"
    +    healthy = "healthy"
    +    unhealthy = "unhealthy"
    +    dead = "dead"
    +
    +
    +class JobType(str, Enum):
    +
    +    unknown = "unknown"
    +    export = "export"
    +    import_enum = "import"
    +    backup = "backup"
    +    read_device_properties = "readDeviceProperties"
    +    write_device_properties = "writeDeviceProperties"
    +    update_device_configuration = "updateDeviceConfiguration"
    +    reboot_device = "rebootDevice"
    +    factory_reset_device = "factoryResetDevice"
    +    firmware_update = "firmwareUpdate"
    +
    +
    +class JobStatus(str, Enum):
    +
    +    unknown = "unknown"
    +    enqueued = "enqueued"
    +    running = "running"
    +    completed = "completed"
    +    failed = "failed"
    +    cancelled = "cancelled"
    +
    +
    +class IotHubScaleType(str, Enum):
    +
    +    automatic = "Automatic"
    +    manual = "Manual"
    +    none = "None"
    +
    +
    +class IotHubNameUnavailabilityReason(str, Enum):
    +
    +    invalid = "Invalid"
    +    already_exists = "AlreadyExists"
    +
    +
    +class TestResultStatus(str, Enum):
    +
    +    undefined = "undefined"
    +    false = "false"
    +    true = "true"
    +
    +
    +class RouteErrorSeverity(str, Enum):
    +
    +    error = "error"
    +    warning = "warning"
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/_models.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/_models.py
    new file mode 100644
    index 000000000000..19da905a3803
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/_models.py
    @@ -0,0 +1,2107 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from msrest.exceptions import HttpOperationError
    +
    +
    +class CertificateBodyDescription(Model):
    +    """The JSON-serialized X509 Certificate.
    +
    +    :param certificate: base-64 representation of the X509 leaf certificate
    +     .cer file or just .pem file content.
    +    :type certificate: str
    +    """
    +
    +    _attribute_map = {
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateBodyDescription, self).__init__(**kwargs)
    +        self.certificate = kwargs.get('certificate', None)
    +
    +
    +class CertificateDescription(Model):
    +    """The X509 Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.CertificateProperties
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The name of the certificate.
    +    :vartype name: str
    +    :ivar etag: The entity tag.
    +    :vartype etag: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'etag': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'CertificateProperties'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateDescription, self).__init__(**kwargs)
    +        self.properties = kwargs.get('properties', None)
    +        self.id = None
    +        self.name = None
    +        self.etag = None
    +        self.type = None
    +
    +
    +class CertificateListDescription(Model):
    +    """The JSON-serialized array of Certificate objects.
    +
    +    :param value: The array of Certificate objects.
    +    :type value: list[~azure.mgmt.iothub.models.CertificateDescription]
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateDescription]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateListDescription, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +
    +
    +class CertificateProperties(Model):
    +    """The description of an X509 CA Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar subject: The certificate's subject name.
    +    :vartype subject: str
    +    :ivar expiry: The certificate's expiration date and time.
    +    :vartype expiry: datetime
    +    :ivar thumbprint: The certificate's thumbprint.
    +    :vartype thumbprint: str
    +    :ivar is_verified: Determines whether certificate has been verified.
    +    :vartype is_verified: bool
    +    :ivar created: The certificate's create date and time.
    +    :vartype created: datetime
    +    :ivar updated: The certificate's last update date and time.
    +    :vartype updated: datetime
    +    :param certificate: The certificate content
    +    :type certificate: str
    +    """
    +
    +    _validation = {
    +        'subject': {'readonly': True},
    +        'expiry': {'readonly': True},
    +        'thumbprint': {'readonly': True},
    +        'is_verified': {'readonly': True},
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'expiry': {'key': 'expiry', 'type': 'rfc-1123'},
    +        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
    +        'is_verified': {'key': 'isVerified', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'rfc-1123'},
    +        'updated': {'key': 'updated', 'type': 'rfc-1123'},
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateProperties, self).__init__(**kwargs)
    +        self.subject = None
    +        self.expiry = None
    +        self.thumbprint = None
    +        self.is_verified = None
    +        self.created = None
    +        self.updated = None
    +        self.certificate = kwargs.get('certificate', None)
    +
    +
    +class CertificatePropertiesWithNonce(Model):
    +    """The description of an X509 CA Certificate including the challenge nonce
    +    issued for the Proof-Of-Possession flow.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar subject: The certificate's subject name.
    +    :vartype subject: str
    +    :ivar expiry: The certificate's expiration date and time.
    +    :vartype expiry: datetime
    +    :ivar thumbprint: The certificate's thumbprint.
    +    :vartype thumbprint: str
    +    :ivar is_verified: Determines whether certificate has been verified.
    +    :vartype is_verified: bool
    +    :ivar created: The certificate's create date and time.
    +    :vartype created: datetime
    +    :ivar updated: The certificate's last update date and time.
    +    :vartype updated: datetime
    +    :ivar verification_code: The certificate's verification code that will be
    +     used for proof of possession.
    +    :vartype verification_code: str
    +    :ivar certificate: The certificate content
    +    :vartype certificate: str
    +    """
    +
    +    _validation = {
    +        'subject': {'readonly': True},
    +        'expiry': {'readonly': True},
    +        'thumbprint': {'readonly': True},
    +        'is_verified': {'readonly': True},
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'verification_code': {'readonly': True},
    +        'certificate': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'expiry': {'key': 'expiry', 'type': 'rfc-1123'},
    +        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
    +        'is_verified': {'key': 'isVerified', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'rfc-1123'},
    +        'updated': {'key': 'updated', 'type': 'rfc-1123'},
    +        'verification_code': {'key': 'verificationCode', 'type': 'str'},
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificatePropertiesWithNonce, self).__init__(**kwargs)
    +        self.subject = None
    +        self.expiry = None
    +        self.thumbprint = None
    +        self.is_verified = None
    +        self.created = None
    +        self.updated = None
    +        self.verification_code = None
    +        self.certificate = None
    +
    +
    +class CertificateVerificationDescription(Model):
    +    """The JSON-serialized leaf certificate.
    +
    +    :param certificate: base-64 representation of X509 certificate .cer file
    +     or just .pem file content.
    +    :type certificate: str
    +    """
    +
    +    _attribute_map = {
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateVerificationDescription, self).__init__(**kwargs)
    +        self.certificate = kwargs.get('certificate', None)
    +
    +
    +class CertificateWithNonceDescription(Model):
    +    """The X509 Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.CertificatePropertiesWithNonce
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The name of the certificate.
    +    :vartype name: str
    +    :ivar etag: The entity tag.
    +    :vartype etag: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'etag': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'CertificatePropertiesWithNonce'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateWithNonceDescription, self).__init__(**kwargs)
    +        self.properties = kwargs.get('properties', None)
    +        self.id = None
    +        self.name = None
    +        self.etag = None
    +        self.type = None
    +
    +
    +class CloudError(Model):
    +    """CloudError.
    +    """
    +
    +    _attribute_map = {
    +    }
    +
    +
    +class CloudToDeviceProperties(Model):
    +    """The IoT hub cloud-to-device messaging properties.
    +
    +    :param max_delivery_count: The max delivery count for cloud-to-device
    +     messages in the device queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type max_delivery_count: int
    +    :param default_ttl_as_iso8601: The default time to live for
    +     cloud-to-device messages in the device queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type default_ttl_as_iso8601: timedelta
    +    :param feedback:
    +    :type feedback: ~azure.mgmt.iothub.models.FeedbackProperties
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +        'default_ttl_as_iso8601': {'key': 'defaultTtlAsIso8601', 'type': 'duration'},
    +        'feedback': {'key': 'feedback', 'type': 'FeedbackProperties'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CloudToDeviceProperties, self).__init__(**kwargs)
    +        self.max_delivery_count = kwargs.get('max_delivery_count', None)
    +        self.default_ttl_as_iso8601 = kwargs.get('default_ttl_as_iso8601', None)
    +        self.feedback = kwargs.get('feedback', None)
    +
    +
    +class EndpointHealthData(Model):
    +    """The health data for an endpoint.
    +
    +    :param endpoint_id: Id of the endpoint
    +    :type endpoint_id: str
    +    :param health_status: Health statuses have following meanings. The
    +     'healthy' status shows that the endpoint is accepting messages as
    +     expected. The 'unhealthy' status shows that the endpoint is not accepting
    +     messages as expected and IoT Hub is retrying to send data to this
    +     endpoint. The status of an unhealthy endpoint will be updated to healthy
    +     when IoT Hub has established an eventually consistent state of health. The
    +     'dead' status shows that the endpoint is not accepting messages, after IoT
    +     Hub retried sending messages for the retrial period. See IoT Hub metrics
    +     to identify errors and monitor issues with endpoints. The 'unknown' status
    +     shows that the IoT Hub has not established a connection with the endpoint.
    +     No messages have been delivered to or rejected from this endpoint.
    +     Possible values include: 'unknown', 'healthy', 'unhealthy', 'dead'
    +    :type health_status: str or ~azure.mgmt.iothub.models.EndpointHealthStatus
    +    """
    +
    +    _attribute_map = {
    +        'endpoint_id': {'key': 'endpointId', 'type': 'str'},
    +        'health_status': {'key': 'healthStatus', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EndpointHealthData, self).__init__(**kwargs)
    +        self.endpoint_id = kwargs.get('endpoint_id', None)
    +        self.health_status = kwargs.get('health_status', None)
    +
    +
    +class EnrichmentProperties(Model):
    +    """The properties of an enrichment that your IoT hub applies to messages
    +    delivered to endpoints.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key: Required. The key or name for the enrichment property.
    +    :type key: str
    +    :param value: Required. The value for the enrichment property.
    +    :type value: str
    +    :param endpoint_names: Required. The list of endpoints for which the
    +     enrichment is applied to the message.
    +    :type endpoint_names: list[str]
    +    """
    +
    +    _validation = {
    +        'key': {'required': True},
    +        'value': {'required': True},
    +        'endpoint_names': {'required': True, 'min_items': 1},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EnrichmentProperties, self).__init__(**kwargs)
    +        self.key = kwargs.get('key', None)
    +        self.value = kwargs.get('value', None)
    +        self.endpoint_names = kwargs.get('endpoint_names', None)
    +
    +
    +class ErrorDetails(Model):
    +    """Error details.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: The error code.
    +    :vartype code: str
    +    :ivar http_status_code: The HTTP status code.
    +    :vartype http_status_code: str
    +    :ivar message: The error message.
    +    :vartype message: str
    +    :ivar details: The error details.
    +    :vartype details: str
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'http_status_code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'details': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'http_status_code': {'key': 'httpStatusCode', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'details': {'key': 'details', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ErrorDetails, self).__init__(**kwargs)
    +        self.code = None
    +        self.http_status_code = None
    +        self.message = None
    +        self.details = None
    +
    +
    +class ErrorDetailsException(HttpOperationError):
    +    """Server responsed with exception of type: 'ErrorDetails'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, deserialize, response, *args):
    +
    +        super(ErrorDetailsException, self).__init__(deserialize, response, 'ErrorDetails', *args)
    +
    +
    +class EventHubConsumerGroupInfo(Model):
    +    """The properties of the EventHubConsumerGroupInfo object.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties: The tags.
    +    :type properties: dict[str, str]
    +    :ivar id: The Event Hub-compatible consumer group identifier.
    +    :vartype id: str
    +    :ivar name: The Event Hub-compatible consumer group name.
    +    :vartype name: str
    +    :ivar type: the resource type.
    +    :vartype type: str
    +    :ivar etag: The etag.
    +    :vartype etag: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'etag': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': '{str}'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EventHubConsumerGroupInfo, self).__init__(**kwargs)
    +        self.properties = kwargs.get('properties', None)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.etag = None
    +
    +
    +class EventHubProperties(Model):
    +    """The properties of the provisioned Event Hub-compatible endpoint used by the
    +    IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param retention_time_in_days: The retention time for device-to-cloud
    +     messages in days. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages
    +    :type retention_time_in_days: long
    +    :param partition_count: The number of partitions for receiving
    +     device-to-cloud messages in the Event Hub-compatible endpoint. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages.
    +    :type partition_count: int
    +    :ivar partition_ids: The partition ids in the Event Hub-compatible
    +     endpoint.
    +    :vartype partition_ids: list[str]
    +    :ivar path: The Event Hub-compatible name.
    +    :vartype path: str
    +    :ivar endpoint: The Event Hub-compatible endpoint.
    +    :vartype endpoint: str
    +    """
    +
    +    _validation = {
    +        'partition_ids': {'readonly': True},
    +        'path': {'readonly': True},
    +        'endpoint': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'retention_time_in_days': {'key': 'retentionTimeInDays', 'type': 'long'},
    +        'partition_count': {'key': 'partitionCount', 'type': 'int'},
    +        'partition_ids': {'key': 'partitionIds', 'type': '[str]'},
    +        'path': {'key': 'path', 'type': 'str'},
    +        'endpoint': {'key': 'endpoint', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EventHubProperties, self).__init__(**kwargs)
    +        self.retention_time_in_days = kwargs.get('retention_time_in_days', None)
    +        self.partition_count = kwargs.get('partition_count', None)
    +        self.partition_ids = None
    +        self.path = None
    +        self.endpoint = None
    +
    +
    +class ExportDevicesRequest(Model):
    +    """Use to provide parameters when requesting an export of all devices in the
    +    IoT hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param export_blob_container_uri: Required. The export blob container URI.
    +    :type export_blob_container_uri: str
    +    :param exclude_keys: Required. The value indicating whether keys should be
    +     excluded during export.
    +    :type exclude_keys: bool
    +    """
    +
    +    _validation = {
    +        'export_blob_container_uri': {'required': True},
    +        'exclude_keys': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'export_blob_container_uri': {'key': 'exportBlobContainerUri', 'type': 'str'},
    +        'exclude_keys': {'key': 'excludeKeys', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ExportDevicesRequest, self).__init__(**kwargs)
    +        self.export_blob_container_uri = kwargs.get('export_blob_container_uri', None)
    +        self.exclude_keys = kwargs.get('exclude_keys', None)
    +
    +
    +class FailoverInput(Model):
    +    """Use to provide failover region when requesting manual Failover for a hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param failover_region: Required. Region the hub will be failed over to
    +    :type failover_region: str
    +    """
    +
    +    _validation = {
    +        'failover_region': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'failover_region': {'key': 'failoverRegion', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(FailoverInput, self).__init__(**kwargs)
    +        self.failover_region = kwargs.get('failover_region', None)
    +
    +
    +class FallbackRouteProperties(Model):
    +    """The properties of the fallback route. IoT Hub uses these properties when it
    +    routes messages to the fallback endpoint.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: The name of the route. The name can only include alphanumeric
    +     characters, periods, underscores, hyphens, has a maximum length of 64
    +     characters, and must be unique.
    +    :type name: str
    +    :ivar source: Required. The source to which the routing rule is to be
    +     applied to. For example, DeviceMessages. Default value: "DeviceMessages" .
    +    :vartype source: str
    +    :param condition: The condition which is evaluated in order to apply the
    +     fallback route. If the condition is not provided it will evaluate to true
    +     by default. For grammar, See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
    +    :type condition: str
    +    :param endpoint_names: Required. The list of endpoints to which the
    +     messages that satisfy the condition are routed to. Currently only 1
    +     endpoint is allowed.
    +    :type endpoint_names: list[str]
    +    :param is_enabled: Required. Used to specify whether the fallback route is
    +     enabled.
    +    :type is_enabled: bool
    +    """
    +
    +    _validation = {
    +        'source': {'required': True, 'constant': True},
    +        'endpoint_names': {'required': True, 'max_items': 1, 'min_items': 1},
    +        'is_enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'condition': {'key': 'condition', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +        'is_enabled': {'key': 'isEnabled', 'type': 'bool'},
    +    }
    +
    +    source = "DeviceMessages"
    +
    +    def __init__(self, **kwargs):
    +        super(FallbackRouteProperties, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.condition = kwargs.get('condition', None)
    +        self.endpoint_names = kwargs.get('endpoint_names', None)
    +        self.is_enabled = kwargs.get('is_enabled', None)
    +
    +
    +class FeedbackProperties(Model):
    +    """The properties of the feedback queue for cloud-to-device messages.
    +
    +    :param lock_duration_as_iso8601: The lock duration for the feedback queue.
    +     See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type lock_duration_as_iso8601: timedelta
    +    :param ttl_as_iso8601: The period of time for which a message is available
    +     to consume before it is expired by the IoT hub. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type ttl_as_iso8601: timedelta
    +    :param max_delivery_count: The number of times the IoT hub attempts to
    +     deliver a message on the feedback queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type max_delivery_count: int
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lock_duration_as_iso8601': {'key': 'lockDurationAsIso8601', 'type': 'duration'},
    +        'ttl_as_iso8601': {'key': 'ttlAsIso8601', 'type': 'duration'},
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(FeedbackProperties, self).__init__(**kwargs)
    +        self.lock_duration_as_iso8601 = kwargs.get('lock_duration_as_iso8601', None)
    +        self.ttl_as_iso8601 = kwargs.get('ttl_as_iso8601', None)
    +        self.max_delivery_count = kwargs.get('max_delivery_count', None)
    +
    +
    +class ImportDevicesRequest(Model):
    +    """Use to provide parameters when requesting an import of all devices in the
    +    hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param input_blob_container_uri: Required. The input blob container URI.
    +    :type input_blob_container_uri: str
    +    :param output_blob_container_uri: Required. The output blob container URI.
    +    :type output_blob_container_uri: str
    +    """
    +
    +    _validation = {
    +        'input_blob_container_uri': {'required': True},
    +        'output_blob_container_uri': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'input_blob_container_uri': {'key': 'inputBlobContainerUri', 'type': 'str'},
    +        'output_blob_container_uri': {'key': 'outputBlobContainerUri', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ImportDevicesRequest, self).__init__(**kwargs)
    +        self.input_blob_container_uri = kwargs.get('input_blob_container_uri', None)
    +        self.output_blob_container_uri = kwargs.get('output_blob_container_uri', None)
    +
    +
    +class IotHubCapacity(Model):
    +    """IoT Hub capacity information.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar minimum: The minimum number of units.
    +    :vartype minimum: long
    +    :ivar maximum: The maximum number of units.
    +    :vartype maximum: long
    +    :ivar default: The default number of units.
    +    :vartype default: long
    +    :ivar scale_type: The type of the scaling enabled. Possible values
    +     include: 'Automatic', 'Manual', 'None'
    +    :vartype scale_type: str or ~azure.mgmt.iothub.models.IotHubScaleType
    +    """
    +
    +    _validation = {
    +        'minimum': {'readonly': True, 'maximum': 1, 'minimum': 1},
    +        'maximum': {'readonly': True},
    +        'default': {'readonly': True},
    +        'scale_type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'minimum': {'key': 'minimum', 'type': 'long'},
    +        'maximum': {'key': 'maximum', 'type': 'long'},
    +        'default': {'key': 'default', 'type': 'long'},
    +        'scale_type': {'key': 'scaleType', 'type': 'IotHubScaleType'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubCapacity, self).__init__(**kwargs)
    +        self.minimum = None
    +        self.maximum = None
    +        self.default = None
    +        self.scale_type = None
    +
    +
    +class Resource(Model):
    +    """The common properties of an Azure resource.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The resource name.
    +    :vartype name: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    :param location: Required. The resource location.
    +    :type location: str
    +    :param tags: The resource tags.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True, 'pattern': r'^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{2,49}[a-zA-Z0-9]$'},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.location = kwargs.get('location', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class IotHubDescription(Resource):
    +    """The description of the IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The resource name.
    +    :vartype name: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    :param location: Required. The resource location.
    +    :type location: str
    +    :param tags: The resource tags.
    +    :type tags: dict[str, str]
    +    :param etag: The Etag field is *not* required. If it is provided in the
    +     response body, it must also be provided as a header per the normal ETag
    +     convention.
    +    :type etag: str
    +    :param properties: IotHub properties
    +    :type properties: ~azure.mgmt.iothub.models.IotHubProperties
    +    :param sku: Required. IotHub SKU info
    +    :type sku: ~azure.mgmt.iothub.models.IotHubSkuInfo
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True, 'pattern': r'^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{2,49}[a-zA-Z0-9]$'},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'sku': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'properties': {'key': 'properties', 'type': 'IotHubProperties'},
    +        'sku': {'key': 'sku', 'type': 'IotHubSkuInfo'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubDescription, self).__init__(**kwargs)
    +        self.etag = kwargs.get('etag', None)
    +        self.properties = kwargs.get('properties', None)
    +        self.sku = kwargs.get('sku', None)
    +
    +
    +class IotHubLocationDescription(Model):
    +    """Public representation of one of the locations where a resource is
    +    provisioned.
    +
    +    :param location: Azure Geo Regions
    +    :type location: str
    +    :param role: Specific Role assigned to this location. Possible values
    +     include: 'primary', 'secondary'
    +    :type role: str or ~azure.mgmt.iothub.models.IotHubReplicaRoleType
    +    """
    +
    +    _attribute_map = {
    +        'location': {'key': 'location', 'type': 'str'},
    +        'role': {'key': 'role', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubLocationDescription, self).__init__(**kwargs)
    +        self.location = kwargs.get('location', None)
    +        self.role = kwargs.get('role', None)
    +
    +
    +class IotHubNameAvailabilityInfo(Model):
    +    """The properties indicating whether a given IoT hub name is available.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name_available: The value which indicates whether the provided name
    +     is available.
    +    :vartype name_available: bool
    +    :ivar reason: The reason for unavailability. Possible values include:
    +     'Invalid', 'AlreadyExists'
    +    :vartype reason: str or
    +     ~azure.mgmt.iothub.models.IotHubNameUnavailabilityReason
    +    :param message: The detailed reason message.
    +    :type message: str
    +    """
    +
    +    _validation = {
    +        'name_available': {'readonly': True},
    +        'reason': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name_available': {'key': 'nameAvailable', 'type': 'bool'},
    +        'reason': {'key': 'reason', 'type': 'IotHubNameUnavailabilityReason'},
    +        'message': {'key': 'message', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubNameAvailabilityInfo, self).__init__(**kwargs)
    +        self.name_available = None
    +        self.reason = None
    +        self.message = kwargs.get('message', None)
    +
    +
    +class IotHubProperties(Model):
    +    """The properties of an IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param authorization_policies: The shared access policies you can use to
    +     secure a connection to the IoT hub.
    +    :type authorization_policies:
    +     list[~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRule]
    +    :param ip_filter_rules: The IP filter rules.
    +    :type ip_filter_rules: list[~azure.mgmt.iothub.models.IpFilterRule]
    +    :ivar provisioning_state: The provisioning state.
    +    :vartype provisioning_state: str
    +    :ivar state: The hub state.
    +    :vartype state: str
    +    :ivar host_name: The name of the host.
    +    :vartype host_name: str
    +    :param event_hub_endpoints: The Event Hub-compatible endpoint properties.
    +     The only possible keys to this dictionary is events. This key has to be
    +     present in the dictionary while making create or update calls for the IoT
    +     hub.
    +    :type event_hub_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.EventHubProperties]
    +    :param routing:
    +    :type routing: ~azure.mgmt.iothub.models.RoutingProperties
    +    :param storage_endpoints: The list of Azure Storage endpoints where you
    +     can upload files. Currently you can configure only one Azure Storage
    +     account and that MUST have its key as $default. Specifying more than one
    +     storage account causes an error to be thrown. Not specifying a value for
    +     this property when the enableFileUploadNotifications property is set to
    +     True, causes an error to be thrown.
    +    :type storage_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.StorageEndpointProperties]
    +    :param messaging_endpoints: The messaging endpoint properties for the file
    +     upload notification queue.
    +    :type messaging_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.MessagingEndpointProperties]
    +    :param enable_file_upload_notifications: If True, file upload
    +     notifications are enabled.
    +    :type enable_file_upload_notifications: bool
    +    :param cloud_to_device:
    +    :type cloud_to_device: ~azure.mgmt.iothub.models.CloudToDeviceProperties
    +    :param comments: IoT hub comments.
    +    :type comments: str
    +    :param device_streams: The device streams properties of iothub.
    +    :type device_streams:
    +     ~azure.mgmt.iothub.models.IotHubPropertiesDeviceStreams
    +    :param features: The capabilities and features enabled for the IoT hub.
    +     Possible values include: 'None', 'DeviceManagement'
    +    :type features: str or ~azure.mgmt.iothub.models.Capabilities
    +    :ivar locations: Primary and secondary location for iot hub
    +    :vartype locations:
    +     list[~azure.mgmt.iothub.models.IotHubLocationDescription]
    +    """
    +
    +    _validation = {
    +        'provisioning_state': {'readonly': True},
    +        'state': {'readonly': True},
    +        'host_name': {'readonly': True},
    +        'locations': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'authorization_policies': {'key': 'authorizationPolicies', 'type': '[SharedAccessSignatureAuthorizationRule]'},
    +        'ip_filter_rules': {'key': 'ipFilterRules', 'type': '[IpFilterRule]'},
    +        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
    +        'state': {'key': 'state', 'type': 'str'},
    +        'host_name': {'key': 'hostName', 'type': 'str'},
    +        'event_hub_endpoints': {'key': 'eventHubEndpoints', 'type': '{EventHubProperties}'},
    +        'routing': {'key': 'routing', 'type': 'RoutingProperties'},
    +        'storage_endpoints': {'key': 'storageEndpoints', 'type': '{StorageEndpointProperties}'},
    +        'messaging_endpoints': {'key': 'messagingEndpoints', 'type': '{MessagingEndpointProperties}'},
    +        'enable_file_upload_notifications': {'key': 'enableFileUploadNotifications', 'type': 'bool'},
    +        'cloud_to_device': {'key': 'cloudToDevice', 'type': 'CloudToDeviceProperties'},
    +        'comments': {'key': 'comments', 'type': 'str'},
    +        'device_streams': {'key': 'deviceStreams', 'type': 'IotHubPropertiesDeviceStreams'},
    +        'features': {'key': 'features', 'type': 'str'},
    +        'locations': {'key': 'locations', 'type': '[IotHubLocationDescription]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubProperties, self).__init__(**kwargs)
    +        self.authorization_policies = kwargs.get('authorization_policies', None)
    +        self.ip_filter_rules = kwargs.get('ip_filter_rules', None)
    +        self.provisioning_state = None
    +        self.state = None
    +        self.host_name = None
    +        self.event_hub_endpoints = kwargs.get('event_hub_endpoints', None)
    +        self.routing = kwargs.get('routing', None)
    +        self.storage_endpoints = kwargs.get('storage_endpoints', None)
    +        self.messaging_endpoints = kwargs.get('messaging_endpoints', None)
    +        self.enable_file_upload_notifications = kwargs.get('enable_file_upload_notifications', None)
    +        self.cloud_to_device = kwargs.get('cloud_to_device', None)
    +        self.comments = kwargs.get('comments', None)
    +        self.device_streams = kwargs.get('device_streams', None)
    +        self.features = kwargs.get('features', None)
    +        self.locations = None
    +
    +
    +class IotHubPropertiesDeviceStreams(Model):
    +    """The device streams properties of iothub.
    +
    +    :param streaming_endpoints: List of Device Streams Endpoints.
    +    :type streaming_endpoints: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'streaming_endpoints': {'key': 'streamingEndpoints', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubPropertiesDeviceStreams, self).__init__(**kwargs)
    +        self.streaming_endpoints = kwargs.get('streaming_endpoints', None)
    +
    +
    +class IotHubQuotaMetricInfo(Model):
    +    """Quota metrics properties.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name: The name of the quota metric.
    +    :vartype name: str
    +    :ivar current_value: The current value for the quota metric.
    +    :vartype current_value: long
    +    :ivar max_value: The maximum value of the quota metric.
    +    :vartype max_value: long
    +    """
    +
    +    _validation = {
    +        'name': {'readonly': True},
    +        'current_value': {'readonly': True},
    +        'max_value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'current_value': {'key': 'currentValue', 'type': 'long'},
    +        'max_value': {'key': 'maxValue', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubQuotaMetricInfo, self).__init__(**kwargs)
    +        self.name = None
    +        self.current_value = None
    +        self.max_value = None
    +
    +
    +class IotHubSkuDescription(Model):
    +    """SKU properties.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar resource_type: The type of the resource.
    +    :vartype resource_type: str
    +    :param sku: Required. The type of the resource.
    +    :type sku: ~azure.mgmt.iothub.models.IotHubSkuInfo
    +    :param capacity: Required. IotHub capacity
    +    :type capacity: ~azure.mgmt.iothub.models.IotHubCapacity
    +    """
    +
    +    _validation = {
    +        'resource_type': {'readonly': True},
    +        'sku': {'required': True},
    +        'capacity': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'resource_type': {'key': 'resourceType', 'type': 'str'},
    +        'sku': {'key': 'sku', 'type': 'IotHubSkuInfo'},
    +        'capacity': {'key': 'capacity', 'type': 'IotHubCapacity'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubSkuDescription, self).__init__(**kwargs)
    +        self.resource_type = None
    +        self.sku = kwargs.get('sku', None)
    +        self.capacity = kwargs.get('capacity', None)
    +
    +
    +class IotHubSkuInfo(Model):
    +    """Information about the SKU of the IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the SKU. Possible values include: 'F1',
    +     'S1', 'S2', 'S3', 'B1', 'B2', 'B3'
    +    :type name: str or ~azure.mgmt.iothub.models.IotHubSku
    +    :ivar tier: The billing tier for the IoT hub. Possible values include:
    +     'Free', 'Standard', 'Basic'
    +    :vartype tier: str or ~azure.mgmt.iothub.models.IotHubSkuTier
    +    :param capacity: The number of provisioned IoT Hub units. See:
    +     https://docs.microsoft.com/azure/azure-subscription-service-limits#iot-hub-limits.
    +    :type capacity: long
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'tier': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'tier': {'key': 'tier', 'type': 'IotHubSkuTier'},
    +        'capacity': {'key': 'capacity', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubSkuInfo, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.tier = None
    +        self.capacity = kwargs.get('capacity', None)
    +
    +
    +class IpFilterRule(Model):
    +    """The IP filter rules for the IoT hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param filter_name: Required. The name of the IP filter rule.
    +    :type filter_name: str
    +    :param action: Required. The desired action for requests captured by this
    +     rule. Possible values include: 'Accept', 'Reject'
    +    :type action: str or ~azure.mgmt.iothub.models.IpFilterActionType
    +    :param ip_mask: Required. A string that contains the IP address range in
    +     CIDR notation for the rule.
    +    :type ip_mask: str
    +    """
    +
    +    _validation = {
    +        'filter_name': {'required': True},
    +        'action': {'required': True},
    +        'ip_mask': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'filter_name': {'key': 'filterName', 'type': 'str'},
    +        'action': {'key': 'action', 'type': 'IpFilterActionType'},
    +        'ip_mask': {'key': 'ipMask', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IpFilterRule, self).__init__(**kwargs)
    +        self.filter_name = kwargs.get('filter_name', None)
    +        self.action = kwargs.get('action', None)
    +        self.ip_mask = kwargs.get('ip_mask', None)
    +
    +
    +class JobResponse(Model):
    +    """The properties of the Job Response object.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar job_id: The job identifier.
    +    :vartype job_id: str
    +    :ivar start_time_utc: The start time of the job.
    +    :vartype start_time_utc: datetime
    +    :ivar end_time_utc: The time the job stopped processing.
    +    :vartype end_time_utc: datetime
    +    :ivar type: The type of the job. Possible values include: 'unknown',
    +     'export', 'import', 'backup', 'readDeviceProperties',
    +     'writeDeviceProperties', 'updateDeviceConfiguration', 'rebootDevice',
    +     'factoryResetDevice', 'firmwareUpdate'
    +    :vartype type: str or ~azure.mgmt.iothub.models.JobType
    +    :ivar status: The status of the job. Possible values include: 'unknown',
    +     'enqueued', 'running', 'completed', 'failed', 'cancelled'
    +    :vartype status: str or ~azure.mgmt.iothub.models.JobStatus
    +    :ivar failure_reason: If status == failed, this string containing the
    +     reason for the failure.
    +    :vartype failure_reason: str
    +    :ivar status_message: The status message for the job.
    +    :vartype status_message: str
    +    :ivar parent_job_id: The job identifier of the parent job, if any.
    +    :vartype parent_job_id: str
    +    """
    +
    +    _validation = {
    +        'job_id': {'readonly': True},
    +        'start_time_utc': {'readonly': True},
    +        'end_time_utc': {'readonly': True},
    +        'type': {'readonly': True},
    +        'status': {'readonly': True},
    +        'failure_reason': {'readonly': True},
    +        'status_message': {'readonly': True},
    +        'parent_job_id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'job_id': {'key': 'jobId', 'type': 'str'},
    +        'start_time_utc': {'key': 'startTimeUtc', 'type': 'rfc-1123'},
    +        'end_time_utc': {'key': 'endTimeUtc', 'type': 'rfc-1123'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'status': {'key': 'status', 'type': 'JobStatus'},
    +        'failure_reason': {'key': 'failureReason', 'type': 'str'},
    +        'status_message': {'key': 'statusMessage', 'type': 'str'},
    +        'parent_job_id': {'key': 'parentJobId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(JobResponse, self).__init__(**kwargs)
    +        self.job_id = None
    +        self.start_time_utc = None
    +        self.end_time_utc = None
    +        self.type = None
    +        self.status = None
    +        self.failure_reason = None
    +        self.status_message = None
    +        self.parent_job_id = None
    +
    +
    +class MatchedRoute(Model):
    +    """Routes that matched.
    +
    +    :param properties: Properties of routes that matched
    +    :type properties: ~azure.mgmt.iothub.models.RouteProperties
    +    """
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'RouteProperties'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(MatchedRoute, self).__init__(**kwargs)
    +        self.properties = kwargs.get('properties', None)
    +
    +
    +class MessagingEndpointProperties(Model):
    +    """The properties of the messaging endpoints used by this IoT hub.
    +
    +    :param lock_duration_as_iso8601: The lock duration. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type lock_duration_as_iso8601: timedelta
    +    :param ttl_as_iso8601: The period of time for which a message is available
    +     to consume before it is expired by the IoT hub. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type ttl_as_iso8601: timedelta
    +    :param max_delivery_count: The number of times the IoT hub attempts to
    +     deliver a message. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type max_delivery_count: int
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lock_duration_as_iso8601': {'key': 'lockDurationAsIso8601', 'type': 'duration'},
    +        'ttl_as_iso8601': {'key': 'ttlAsIso8601', 'type': 'duration'},
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(MessagingEndpointProperties, self).__init__(**kwargs)
    +        self.lock_duration_as_iso8601 = kwargs.get('lock_duration_as_iso8601', None)
    +        self.ttl_as_iso8601 = kwargs.get('ttl_as_iso8601', None)
    +        self.max_delivery_count = kwargs.get('max_delivery_count', None)
    +
    +
    +class Name(Model):
    +    """Name of Iot Hub type.
    +
    +    :param value: IotHub type
    +    :type value: str
    +    :param localized_value: Localized value of name
    +    :type localized_value: str
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'localized_value': {'key': 'localizedValue', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Name, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.localized_value = kwargs.get('localized_value', None)
    +
    +
    +class Operation(Model):
    +    """IoT Hub REST API operation.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name: Operation name: {provider}/{resource}/{read | write | action |
    +     delete}
    +    :vartype name: str
    +    :param display: The object that represents the operation.
    +    :type display: ~azure.mgmt.iothub.models.OperationDisplay
    +    """
    +
    +    _validation = {
    +        'name': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'display': {'key': 'display', 'type': 'OperationDisplay'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Operation, self).__init__(**kwargs)
    +        self.name = None
    +        self.display = kwargs.get('display', None)
    +
    +
    +class OperationDisplay(Model):
    +    """The object that represents the operation.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar provider: Service provider: Microsoft Devices
    +    :vartype provider: str
    +    :ivar resource: Resource Type: IotHubs
    +    :vartype resource: str
    +    :ivar operation: Name of the operation
    +    :vartype operation: str
    +    :ivar description: Description of the operation
    +    :vartype description: str
    +    """
    +
    +    _validation = {
    +        'provider': {'readonly': True},
    +        'resource': {'readonly': True},
    +        'operation': {'readonly': True},
    +        'description': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'resource': {'key': 'resource', 'type': 'str'},
    +        'operation': {'key': 'operation', 'type': 'str'},
    +        'description': {'key': 'description', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(OperationDisplay, self).__init__(**kwargs)
    +        self.provider = None
    +        self.resource = None
    +        self.operation = None
    +        self.description = None
    +
    +
    +class OperationInputs(Model):
    +    """Input values.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the IoT hub to check.
    +    :type name: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(OperationInputs, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +
    +
    +class RegistryStatistics(Model):
    +    """Identity registry statistics.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar total_device_count: The total count of devices in the identity
    +     registry.
    +    :vartype total_device_count: long
    +    :ivar enabled_device_count: The count of enabled devices in the identity
    +     registry.
    +    :vartype enabled_device_count: long
    +    :ivar disabled_device_count: The count of disabled devices in the identity
    +     registry.
    +    :vartype disabled_device_count: long
    +    """
    +
    +    _validation = {
    +        'total_device_count': {'readonly': True},
    +        'enabled_device_count': {'readonly': True},
    +        'disabled_device_count': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'total_device_count': {'key': 'totalDeviceCount', 'type': 'long'},
    +        'enabled_device_count': {'key': 'enabledDeviceCount', 'type': 'long'},
    +        'disabled_device_count': {'key': 'disabledDeviceCount', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RegistryStatistics, self).__init__(**kwargs)
    +        self.total_device_count = None
    +        self.enabled_device_count = None
    +        self.disabled_device_count = None
    +
    +
    +class RouteCompilationError(Model):
    +    """Compilation error when evaluating route.
    +
    +    :param message: Route error message
    +    :type message: str
    +    :param severity: Severity of the route error. Possible values include:
    +     'error', 'warning'
    +    :type severity: str or ~azure.mgmt.iothub.models.RouteErrorSeverity
    +    :param location: Location where the route error happened
    +    :type location: ~azure.mgmt.iothub.models.RouteErrorRange
    +    """
    +
    +    _attribute_map = {
    +        'message': {'key': 'message', 'type': 'str'},
    +        'severity': {'key': 'severity', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'RouteErrorRange'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RouteCompilationError, self).__init__(**kwargs)
    +        self.message = kwargs.get('message', None)
    +        self.severity = kwargs.get('severity', None)
    +        self.location = kwargs.get('location', None)
    +
    +
    +class RouteErrorPosition(Model):
    +    """Position where the route error happened.
    +
    +    :param line: Line where the route error happened
    +    :type line: int
    +    :param column: Column where the route error happened
    +    :type column: int
    +    """
    +
    +    _attribute_map = {
    +        'line': {'key': 'line', 'type': 'int'},
    +        'column': {'key': 'column', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RouteErrorPosition, self).__init__(**kwargs)
    +        self.line = kwargs.get('line', None)
    +        self.column = kwargs.get('column', None)
    +
    +
    +class RouteErrorRange(Model):
    +    """Range of route errors.
    +
    +    :param start: Start where the route error happened
    +    :type start: ~azure.mgmt.iothub.models.RouteErrorPosition
    +    :param end: End where the route error happened
    +    :type end: ~azure.mgmt.iothub.models.RouteErrorPosition
    +    """
    +
    +    _attribute_map = {
    +        'start': {'key': 'start', 'type': 'RouteErrorPosition'},
    +        'end': {'key': 'end', 'type': 'RouteErrorPosition'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RouteErrorRange, self).__init__(**kwargs)
    +        self.start = kwargs.get('start', None)
    +        self.end = kwargs.get('end', None)
    +
    +
    +class RouteProperties(Model):
    +    """The properties of a routing rule that your IoT hub uses to route messages
    +    to endpoints.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the route. The name can only include
    +     alphanumeric characters, periods, underscores, hyphens, has a maximum
    +     length of 64 characters, and must be unique.
    +    :type name: str
    +    :param source: Required. The source that the routing rule is to be applied
    +     to, such as DeviceMessages. Possible values include: 'Invalid',
    +     'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents',
    +     'DeviceJobLifecycleEvents'
    +    :type source: str or ~azure.mgmt.iothub.models.RoutingSource
    +    :param condition: The condition that is evaluated to apply the routing
    +     rule. If no condition is provided, it evaluates to true by default. For
    +     grammar, see:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
    +    :type condition: str
    +    :param endpoint_names: Required. The list of endpoints to which messages
    +     that satisfy the condition are routed. Currently only one endpoint is
    +     allowed.
    +    :type endpoint_names: list[str]
    +    :param is_enabled: Required. Used to specify whether a route is enabled.
    +    :type is_enabled: bool
    +    """
    +
    +    _validation = {
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +        'source': {'required': True},
    +        'endpoint_names': {'required': True, 'max_items': 1, 'min_items': 1},
    +        'is_enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'condition': {'key': 'condition', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +        'is_enabled': {'key': 'isEnabled', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RouteProperties, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.source = kwargs.get('source', None)
    +        self.condition = kwargs.get('condition', None)
    +        self.endpoint_names = kwargs.get('endpoint_names', None)
    +        self.is_enabled = kwargs.get('is_enabled', None)
    +
    +
    +class RoutingEndpoints(Model):
    +    """The properties related to the custom endpoints to which your IoT hub routes
    +    messages based on the routing rules. A maximum of 10 custom endpoints are
    +    allowed across all endpoint types for paid hubs and only 1 custom endpoint
    +    is allowed across all endpoint types for free hubs.
    +
    +    :param service_bus_queues: The list of Service Bus queue endpoints that
    +     IoT hub routes the messages to, based on the routing rules.
    +    :type service_bus_queues:
    +     list[~azure.mgmt.iothub.models.RoutingServiceBusQueueEndpointProperties]
    +    :param service_bus_topics: The list of Service Bus topic endpoints that
    +     the IoT hub routes the messages to, based on the routing rules.
    +    :type service_bus_topics:
    +     list[~azure.mgmt.iothub.models.RoutingServiceBusTopicEndpointProperties]
    +    :param event_hubs: The list of Event Hubs endpoints that IoT hub routes
    +     messages to, based on the routing rules. This list does not include the
    +     built-in Event Hubs endpoint.
    +    :type event_hubs:
    +     list[~azure.mgmt.iothub.models.RoutingEventHubProperties]
    +    :param storage_containers: The list of storage container endpoints that
    +     IoT hub routes messages to, based on the routing rules.
    +    :type storage_containers:
    +     list[~azure.mgmt.iothub.models.RoutingStorageContainerProperties]
    +    """
    +
    +    _attribute_map = {
    +        'service_bus_queues': {'key': 'serviceBusQueues', 'type': '[RoutingServiceBusQueueEndpointProperties]'},
    +        'service_bus_topics': {'key': 'serviceBusTopics', 'type': '[RoutingServiceBusTopicEndpointProperties]'},
    +        'event_hubs': {'key': 'eventHubs', 'type': '[RoutingEventHubProperties]'},
    +        'storage_containers': {'key': 'storageContainers', 'type': '[RoutingStorageContainerProperties]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingEndpoints, self).__init__(**kwargs)
    +        self.service_bus_queues = kwargs.get('service_bus_queues', None)
    +        self.service_bus_topics = kwargs.get('service_bus_topics', None)
    +        self.event_hubs = kwargs.get('event_hubs', None)
    +        self.storage_containers = kwargs.get('storage_containers', None)
    +
    +
    +class RoutingEventHubProperties(Model):
    +    """The properties related to an event hub endpoint.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the event hub
    +     endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the event hub
    +     endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the event hub
    +     endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingEventHubProperties, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.name = kwargs.get('name', None)
    +        self.subscription_id = kwargs.get('subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +
    +
    +class RoutingMessage(Model):
    +    """Routing message.
    +
    +    :param body: Body of routing message
    +    :type body: str
    +    :param app_properties: App properties
    +    :type app_properties: dict[str, str]
    +    :param system_properties: System properties
    +    :type system_properties: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'body': {'key': 'body', 'type': 'str'},
    +        'app_properties': {'key': 'appProperties', 'type': '{str}'},
    +        'system_properties': {'key': 'systemProperties', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingMessage, self).__init__(**kwargs)
    +        self.body = kwargs.get('body', None)
    +        self.app_properties = kwargs.get('app_properties', None)
    +        self.system_properties = kwargs.get('system_properties', None)
    +
    +
    +class RoutingProperties(Model):
    +    """The routing related properties of the IoT hub. See:
    +    https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging.
    +
    +    :param endpoints:
    +    :type endpoints: ~azure.mgmt.iothub.models.RoutingEndpoints
    +    :param routes: The list of user-provided routing rules that the IoT hub
    +     uses to route messages to built-in and custom endpoints. A maximum of 100
    +     routing rules are allowed for paid hubs and a maximum of 5 routing rules
    +     are allowed for free hubs.
    +    :type routes: list[~azure.mgmt.iothub.models.RouteProperties]
    +    :param fallback_route: The properties of the route that is used as a
    +     fall-back route when none of the conditions specified in the 'routes'
    +     section are met. This is an optional parameter. When this property is not
    +     set, the messages which do not meet any of the conditions specified in the
    +     'routes' section get routed to the built-in eventhub endpoint.
    +    :type fallback_route: ~azure.mgmt.iothub.models.FallbackRouteProperties
    +    :param enrichments: The list of user-provided enrichments that the IoT hub
    +     applies to messages to be delivered to built-in and custom endpoints. See:
    +     https://aka.ms/iotmsgenrich
    +    :type enrichments: list[~azure.mgmt.iothub.models.EnrichmentProperties]
    +    """
    +
    +    _attribute_map = {
    +        'endpoints': {'key': 'endpoints', 'type': 'RoutingEndpoints'},
    +        'routes': {'key': 'routes', 'type': '[RouteProperties]'},
    +        'fallback_route': {'key': 'fallbackRoute', 'type': 'FallbackRouteProperties'},
    +        'enrichments': {'key': 'enrichments', 'type': '[EnrichmentProperties]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingProperties, self).__init__(**kwargs)
    +        self.endpoints = kwargs.get('endpoints', None)
    +        self.routes = kwargs.get('routes', None)
    +        self.fallback_route = kwargs.get('fallback_route', None)
    +        self.enrichments = kwargs.get('enrichments', None)
    +
    +
    +class RoutingServiceBusQueueEndpointProperties(Model):
    +    """The properties related to service bus queue endpoint types.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the service
    +     bus queue endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types. The name need not be the same as the actual
    +     queue name.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the service bus
    +     queue endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the service bus
    +     queue endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingServiceBusQueueEndpointProperties, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.name = kwargs.get('name', None)
    +        self.subscription_id = kwargs.get('subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +
    +
    +class RoutingServiceBusTopicEndpointProperties(Model):
    +    """The properties related to service bus topic endpoint types.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the service
    +     bus topic endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.  The name need not be the same as the actual
    +     topic name.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the service bus
    +     topic endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the service bus
    +     topic endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingServiceBusTopicEndpointProperties, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.name = kwargs.get('name', None)
    +        self.subscription_id = kwargs.get('subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +
    +
    +class RoutingStorageContainerProperties(Model):
    +    """The properties related to a storage container endpoint.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the storage
    +     account.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the storage
    +     account.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the storage
    +     account.
    +    :type resource_group: str
    +    :param container_name: Required. The name of storage container in the
    +     storage account.
    +    :type container_name: str
    +    :param file_name_format: File name format for the blob. Default format is
    +     {iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}. All parameters are
    +     mandatory but can be reordered.
    +    :type file_name_format: str
    +    :param batch_frequency_in_seconds: Time interval at which blobs are
    +     written to storage. Value should be between 60 and 720 seconds. Default
    +     value is 300 seconds.
    +    :type batch_frequency_in_seconds: int
    +    :param max_chunk_size_in_bytes: Maximum number of bytes for each blob
    +     written to storage. Value should be between 10485760(10MB) and
    +     524288000(500MB). Default value is 314572800(300MB).
    +    :type max_chunk_size_in_bytes: int
    +    :param encoding: Encoding that is used to serialize messages to blobs.
    +     Supported values are 'avro', 'avrodeflate', and 'JSON'. Default value is
    +     'avro'. Possible values include: 'Avro', 'AvroDeflate', 'JSON'
    +    :type encoding: str or ~azure.mgmt.iothub.models.enum
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +        'container_name': {'required': True},
    +        'batch_frequency_in_seconds': {'maximum': 720, 'minimum': 60},
    +        'max_chunk_size_in_bytes': {'maximum': 524288000, 'minimum': 10485760},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +        'container_name': {'key': 'containerName', 'type': 'str'},
    +        'file_name_format': {'key': 'fileNameFormat', 'type': 'str'},
    +        'batch_frequency_in_seconds': {'key': 'batchFrequencyInSeconds', 'type': 'int'},
    +        'max_chunk_size_in_bytes': {'key': 'maxChunkSizeInBytes', 'type': 'int'},
    +        'encoding': {'key': 'encoding', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingStorageContainerProperties, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.name = kwargs.get('name', None)
    +        self.subscription_id = kwargs.get('subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +        self.container_name = kwargs.get('container_name', None)
    +        self.file_name_format = kwargs.get('file_name_format', None)
    +        self.batch_frequency_in_seconds = kwargs.get('batch_frequency_in_seconds', None)
    +        self.max_chunk_size_in_bytes = kwargs.get('max_chunk_size_in_bytes', None)
    +        self.encoding = kwargs.get('encoding', None)
    +
    +
    +class RoutingTwin(Model):
    +    """Twin reference input parameter. This is an optional parameter.
    +
    +    :param tags: Twin Tags
    +    :type tags: object
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.RoutingTwinProperties
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': 'object'},
    +        'properties': {'key': 'properties', 'type': 'RoutingTwinProperties'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingTwin, self).__init__(**kwargs)
    +        self.tags = kwargs.get('tags', None)
    +        self.properties = kwargs.get('properties', None)
    +
    +
    +class RoutingTwinProperties(Model):
    +    """RoutingTwinProperties.
    +
    +    :param desired: Twin desired properties
    +    :type desired: object
    +    :param reported: Twin desired properties
    +    :type reported: object
    +    """
    +
    +    _attribute_map = {
    +        'desired': {'key': 'desired', 'type': 'object'},
    +        'reported': {'key': 'reported', 'type': 'object'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingTwinProperties, self).__init__(**kwargs)
    +        self.desired = kwargs.get('desired', None)
    +        self.reported = kwargs.get('reported', None)
    +
    +
    +class SharedAccessSignatureAuthorizationRule(Model):
    +    """The properties of an IoT hub shared access policy.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_name: Required. The name of the shared access policy.
    +    :type key_name: str
    +    :param primary_key: The primary key.
    +    :type primary_key: str
    +    :param secondary_key: The secondary key.
    +    :type secondary_key: str
    +    :param rights: Required. The permissions assigned to the shared access
    +     policy. Possible values include: 'RegistryRead', 'RegistryWrite',
    +     'ServiceConnect', 'DeviceConnect', 'RegistryRead, RegistryWrite',
    +     'RegistryRead, ServiceConnect', 'RegistryRead, DeviceConnect',
    +     'RegistryWrite, ServiceConnect', 'RegistryWrite, DeviceConnect',
    +     'ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite,
    +     ServiceConnect', 'RegistryRead, RegistryWrite, DeviceConnect',
    +     'RegistryRead, ServiceConnect, DeviceConnect', 'RegistryWrite,
    +     ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite,
    +     ServiceConnect, DeviceConnect'
    +    :type rights: str or ~azure.mgmt.iothub.models.AccessRights
    +    """
    +
    +    _validation = {
    +        'key_name': {'required': True},
    +        'rights': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_name': {'key': 'keyName', 'type': 'str'},
    +        'primary_key': {'key': 'primaryKey', 'type': 'str'},
    +        'secondary_key': {'key': 'secondaryKey', 'type': 'str'},
    +        'rights': {'key': 'rights', 'type': 'AccessRights'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SharedAccessSignatureAuthorizationRule, self).__init__(**kwargs)
    +        self.key_name = kwargs.get('key_name', None)
    +        self.primary_key = kwargs.get('primary_key', None)
    +        self.secondary_key = kwargs.get('secondary_key', None)
    +        self.rights = kwargs.get('rights', None)
    +
    +
    +class StorageEndpointProperties(Model):
    +    """The properties of the Azure Storage endpoint for file upload.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param sas_ttl_as_iso8601: The period of time for which the SAS URI
    +     generated by IoT Hub for file upload is valid. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload#file-upload-notification-configuration-options.
    +    :type sas_ttl_as_iso8601: timedelta
    +    :param connection_string: Required. The connection string for the Azure
    +     Storage account to which files are uploaded.
    +    :type connection_string: str
    +    :param container_name: Required. The name of the root container where you
    +     upload files. The container need not exist but should be creatable using
    +     the connectionString specified.
    +    :type container_name: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'container_name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'sas_ttl_as_iso8601': {'key': 'sasTtlAsIso8601', 'type': 'duration'},
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'container_name': {'key': 'containerName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageEndpointProperties, self).__init__(**kwargs)
    +        self.sas_ttl_as_iso8601 = kwargs.get('sas_ttl_as_iso8601', None)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.container_name = kwargs.get('container_name', None)
    +
    +
    +class TagsResource(Model):
    +    """A container holding only the Tags for a resource, allowing the user to
    +    update the tags on an IoT Hub instance.
    +
    +    :param tags: Resource tags
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TagsResource, self).__init__(**kwargs)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class TestAllRoutesInput(Model):
    +    """Input for testing all routes.
    +
    +    :param routing_source: Routing source. Possible values include: 'Invalid',
    +     'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents',
    +     'DeviceJobLifecycleEvents'
    +    :type routing_source: str or ~azure.mgmt.iothub.models.RoutingSource
    +    :param message: Routing message
    +    :type message: ~azure.mgmt.iothub.models.RoutingMessage
    +    :param twin: Routing Twin Reference
    +    :type twin: ~azure.mgmt.iothub.models.RoutingTwin
    +    """
    +
    +    _attribute_map = {
    +        'routing_source': {'key': 'routingSource', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'RoutingMessage'},
    +        'twin': {'key': 'twin', 'type': 'RoutingTwin'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestAllRoutesInput, self).__init__(**kwargs)
    +        self.routing_source = kwargs.get('routing_source', None)
    +        self.message = kwargs.get('message', None)
    +        self.twin = kwargs.get('twin', None)
    +
    +
    +class TestAllRoutesResult(Model):
    +    """Result of testing all routes.
    +
    +    :param routes: JSON-serialized array of matched routes
    +    :type routes: list[~azure.mgmt.iothub.models.MatchedRoute]
    +    """
    +
    +    _attribute_map = {
    +        'routes': {'key': 'routes', 'type': '[MatchedRoute]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestAllRoutesResult, self).__init__(**kwargs)
    +        self.routes = kwargs.get('routes', None)
    +
    +
    +class TestRouteInput(Model):
    +    """Input for testing route.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param message: Routing message
    +    :type message: ~azure.mgmt.iothub.models.RoutingMessage
    +    :param route: Required. Route properties
    +    :type route: ~azure.mgmt.iothub.models.RouteProperties
    +    :param twin: Routing Twin Reference
    +    :type twin: ~azure.mgmt.iothub.models.RoutingTwin
    +    """
    +
    +    _validation = {
    +        'route': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'message': {'key': 'message', 'type': 'RoutingMessage'},
    +        'route': {'key': 'route', 'type': 'RouteProperties'},
    +        'twin': {'key': 'twin', 'type': 'RoutingTwin'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestRouteInput, self).__init__(**kwargs)
    +        self.message = kwargs.get('message', None)
    +        self.route = kwargs.get('route', None)
    +        self.twin = kwargs.get('twin', None)
    +
    +
    +class TestRouteResult(Model):
    +    """Result of testing one route.
    +
    +    :param result: Result of testing route. Possible values include:
    +     'undefined', 'false', 'true'
    +    :type result: str or ~azure.mgmt.iothub.models.TestResultStatus
    +    :param details: Detailed result of testing route
    +    :type details: ~azure.mgmt.iothub.models.TestRouteResultDetails
    +    """
    +
    +    _attribute_map = {
    +        'result': {'key': 'result', 'type': 'str'},
    +        'details': {'key': 'details', 'type': 'TestRouteResultDetails'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestRouteResult, self).__init__(**kwargs)
    +        self.result = kwargs.get('result', None)
    +        self.details = kwargs.get('details', None)
    +
    +
    +class TestRouteResultDetails(Model):
    +    """Detailed result of testing a route.
    +
    +    :param compilation_errors: JSON-serialized list of route compilation
    +     errors
    +    :type compilation_errors:
    +     list[~azure.mgmt.iothub.models.RouteCompilationError]
    +    """
    +
    +    _attribute_map = {
    +        'compilation_errors': {'key': 'compilationErrors', 'type': '[RouteCompilationError]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestRouteResultDetails, self).__init__(**kwargs)
    +        self.compilation_errors = kwargs.get('compilation_errors', None)
    +
    +
    +class UserSubscriptionQuota(Model):
    +    """User subscription quota response.
    +
    +    :param id: IotHub type id
    +    :type id: str
    +    :param type: Response type
    +    :type type: str
    +    :param unit: Unit of IotHub type
    +    :type unit: str
    +    :param current_value: Current number of IotHub type
    +    :type current_value: int
    +    :param limit: Numerical limit on IotHub type
    +    :type limit: int
    +    :param name: IotHub type
    +    :type name: ~azure.mgmt.iothub.models.Name
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'unit': {'key': 'unit', 'type': 'str'},
    +        'current_value': {'key': 'currentValue', 'type': 'int'},
    +        'limit': {'key': 'limit', 'type': 'int'},
    +        'name': {'key': 'name', 'type': 'Name'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(UserSubscriptionQuota, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.type = kwargs.get('type', None)
    +        self.unit = kwargs.get('unit', None)
    +        self.current_value = kwargs.get('current_value', None)
    +        self.limit = kwargs.get('limit', None)
    +        self.name = kwargs.get('name', None)
    +
    +
    +class UserSubscriptionQuotaListResult(Model):
    +    """Json-serialized array of User subscription quota response.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value:
    +    :type value: list[~azure.mgmt.iothub.models.UserSubscriptionQuota]
    +    :ivar next_link:
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[UserSubscriptionQuota]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(UserSubscriptionQuotaListResult, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.next_link = None
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/_models_py3.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/_models_py3.py
    new file mode 100644
    index 000000000000..7de261f3b8b3
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/_models_py3.py
    @@ -0,0 +1,2107 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from msrest.exceptions import HttpOperationError
    +
    +
    +class CertificateBodyDescription(Model):
    +    """The JSON-serialized X509 Certificate.
    +
    +    :param certificate: base-64 representation of the X509 leaf certificate
    +     .cer file or just .pem file content.
    +    :type certificate: str
    +    """
    +
    +    _attribute_map = {
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, certificate: str=None, **kwargs) -> None:
    +        super(CertificateBodyDescription, self).__init__(**kwargs)
    +        self.certificate = certificate
    +
    +
    +class CertificateDescription(Model):
    +    """The X509 Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.CertificateProperties
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The name of the certificate.
    +    :vartype name: str
    +    :ivar etag: The entity tag.
    +    :vartype etag: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'etag': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'CertificateProperties'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, properties=None, **kwargs) -> None:
    +        super(CertificateDescription, self).__init__(**kwargs)
    +        self.properties = properties
    +        self.id = None
    +        self.name = None
    +        self.etag = None
    +        self.type = None
    +
    +
    +class CertificateListDescription(Model):
    +    """The JSON-serialized array of Certificate objects.
    +
    +    :param value: The array of Certificate objects.
    +    :type value: list[~azure.mgmt.iothub.models.CertificateDescription]
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateDescription]'},
    +    }
    +
    +    def __init__(self, *, value=None, **kwargs) -> None:
    +        super(CertificateListDescription, self).__init__(**kwargs)
    +        self.value = value
    +
    +
    +class CertificateProperties(Model):
    +    """The description of an X509 CA Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar subject: The certificate's subject name.
    +    :vartype subject: str
    +    :ivar expiry: The certificate's expiration date and time.
    +    :vartype expiry: datetime
    +    :ivar thumbprint: The certificate's thumbprint.
    +    :vartype thumbprint: str
    +    :ivar is_verified: Determines whether certificate has been verified.
    +    :vartype is_verified: bool
    +    :ivar created: The certificate's create date and time.
    +    :vartype created: datetime
    +    :ivar updated: The certificate's last update date and time.
    +    :vartype updated: datetime
    +    :param certificate: The certificate content
    +    :type certificate: str
    +    """
    +
    +    _validation = {
    +        'subject': {'readonly': True},
    +        'expiry': {'readonly': True},
    +        'thumbprint': {'readonly': True},
    +        'is_verified': {'readonly': True},
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'expiry': {'key': 'expiry', 'type': 'rfc-1123'},
    +        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
    +        'is_verified': {'key': 'isVerified', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'rfc-1123'},
    +        'updated': {'key': 'updated', 'type': 'rfc-1123'},
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, certificate: str=None, **kwargs) -> None:
    +        super(CertificateProperties, self).__init__(**kwargs)
    +        self.subject = None
    +        self.expiry = None
    +        self.thumbprint = None
    +        self.is_verified = None
    +        self.created = None
    +        self.updated = None
    +        self.certificate = certificate
    +
    +
    +class CertificatePropertiesWithNonce(Model):
    +    """The description of an X509 CA Certificate including the challenge nonce
    +    issued for the Proof-Of-Possession flow.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar subject: The certificate's subject name.
    +    :vartype subject: str
    +    :ivar expiry: The certificate's expiration date and time.
    +    :vartype expiry: datetime
    +    :ivar thumbprint: The certificate's thumbprint.
    +    :vartype thumbprint: str
    +    :ivar is_verified: Determines whether certificate has been verified.
    +    :vartype is_verified: bool
    +    :ivar created: The certificate's create date and time.
    +    :vartype created: datetime
    +    :ivar updated: The certificate's last update date and time.
    +    :vartype updated: datetime
    +    :ivar verification_code: The certificate's verification code that will be
    +     used for proof of possession.
    +    :vartype verification_code: str
    +    :ivar certificate: The certificate content
    +    :vartype certificate: str
    +    """
    +
    +    _validation = {
    +        'subject': {'readonly': True},
    +        'expiry': {'readonly': True},
    +        'thumbprint': {'readonly': True},
    +        'is_verified': {'readonly': True},
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'verification_code': {'readonly': True},
    +        'certificate': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'expiry': {'key': 'expiry', 'type': 'rfc-1123'},
    +        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
    +        'is_verified': {'key': 'isVerified', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'rfc-1123'},
    +        'updated': {'key': 'updated', 'type': 'rfc-1123'},
    +        'verification_code': {'key': 'verificationCode', 'type': 'str'},
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(CertificatePropertiesWithNonce, self).__init__(**kwargs)
    +        self.subject = None
    +        self.expiry = None
    +        self.thumbprint = None
    +        self.is_verified = None
    +        self.created = None
    +        self.updated = None
    +        self.verification_code = None
    +        self.certificate = None
    +
    +
    +class CertificateVerificationDescription(Model):
    +    """The JSON-serialized leaf certificate.
    +
    +    :param certificate: base-64 representation of X509 certificate .cer file
    +     or just .pem file content.
    +    :type certificate: str
    +    """
    +
    +    _attribute_map = {
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, certificate: str=None, **kwargs) -> None:
    +        super(CertificateVerificationDescription, self).__init__(**kwargs)
    +        self.certificate = certificate
    +
    +
    +class CertificateWithNonceDescription(Model):
    +    """The X509 Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.CertificatePropertiesWithNonce
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The name of the certificate.
    +    :vartype name: str
    +    :ivar etag: The entity tag.
    +    :vartype etag: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'etag': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'CertificatePropertiesWithNonce'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, properties=None, **kwargs) -> None:
    +        super(CertificateWithNonceDescription, self).__init__(**kwargs)
    +        self.properties = properties
    +        self.id = None
    +        self.name = None
    +        self.etag = None
    +        self.type = None
    +
    +
    +class CloudError(Model):
    +    """CloudError.
    +    """
    +
    +    _attribute_map = {
    +    }
    +
    +
    +class CloudToDeviceProperties(Model):
    +    """The IoT hub cloud-to-device messaging properties.
    +
    +    :param max_delivery_count: The max delivery count for cloud-to-device
    +     messages in the device queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type max_delivery_count: int
    +    :param default_ttl_as_iso8601: The default time to live for
    +     cloud-to-device messages in the device queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type default_ttl_as_iso8601: timedelta
    +    :param feedback:
    +    :type feedback: ~azure.mgmt.iothub.models.FeedbackProperties
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +        'default_ttl_as_iso8601': {'key': 'defaultTtlAsIso8601', 'type': 'duration'},
    +        'feedback': {'key': 'feedback', 'type': 'FeedbackProperties'},
    +    }
    +
    +    def __init__(self, *, max_delivery_count: int=None, default_ttl_as_iso8601=None, feedback=None, **kwargs) -> None:
    +        super(CloudToDeviceProperties, self).__init__(**kwargs)
    +        self.max_delivery_count = max_delivery_count
    +        self.default_ttl_as_iso8601 = default_ttl_as_iso8601
    +        self.feedback = feedback
    +
    +
    +class EndpointHealthData(Model):
    +    """The health data for an endpoint.
    +
    +    :param endpoint_id: Id of the endpoint
    +    :type endpoint_id: str
    +    :param health_status: Health statuses have following meanings. The
    +     'healthy' status shows that the endpoint is accepting messages as
    +     expected. The 'unhealthy' status shows that the endpoint is not accepting
    +     messages as expected and IoT Hub is retrying to send data to this
    +     endpoint. The status of an unhealthy endpoint will be updated to healthy
    +     when IoT Hub has established an eventually consistent state of health. The
    +     'dead' status shows that the endpoint is not accepting messages, after IoT
    +     Hub retried sending messages for the retrial period. See IoT Hub metrics
    +     to identify errors and monitor issues with endpoints. The 'unknown' status
    +     shows that the IoT Hub has not established a connection with the endpoint.
    +     No messages have been delivered to or rejected from this endpoint.
    +     Possible values include: 'unknown', 'healthy', 'unhealthy', 'dead'
    +    :type health_status: str or ~azure.mgmt.iothub.models.EndpointHealthStatus
    +    """
    +
    +    _attribute_map = {
    +        'endpoint_id': {'key': 'endpointId', 'type': 'str'},
    +        'health_status': {'key': 'healthStatus', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, endpoint_id: str=None, health_status=None, **kwargs) -> None:
    +        super(EndpointHealthData, self).__init__(**kwargs)
    +        self.endpoint_id = endpoint_id
    +        self.health_status = health_status
    +
    +
    +class EnrichmentProperties(Model):
    +    """The properties of an enrichment that your IoT hub applies to messages
    +    delivered to endpoints.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key: Required. The key or name for the enrichment property.
    +    :type key: str
    +    :param value: Required. The value for the enrichment property.
    +    :type value: str
    +    :param endpoint_names: Required. The list of endpoints for which the
    +     enrichment is applied to the message.
    +    :type endpoint_names: list[str]
    +    """
    +
    +    _validation = {
    +        'key': {'required': True},
    +        'value': {'required': True},
    +        'endpoint_names': {'required': True, 'min_items': 1},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, *, key: str, value: str, endpoint_names, **kwargs) -> None:
    +        super(EnrichmentProperties, self).__init__(**kwargs)
    +        self.key = key
    +        self.value = value
    +        self.endpoint_names = endpoint_names
    +
    +
    +class ErrorDetails(Model):
    +    """Error details.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: The error code.
    +    :vartype code: str
    +    :ivar http_status_code: The HTTP status code.
    +    :vartype http_status_code: str
    +    :ivar message: The error message.
    +    :vartype message: str
    +    :ivar details: The error details.
    +    :vartype details: str
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'http_status_code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'details': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'http_status_code': {'key': 'httpStatusCode', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'details': {'key': 'details', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(ErrorDetails, self).__init__(**kwargs)
    +        self.code = None
    +        self.http_status_code = None
    +        self.message = None
    +        self.details = None
    +
    +
    +class ErrorDetailsException(HttpOperationError):
    +    """Server responsed with exception of type: 'ErrorDetails'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, deserialize, response, *args):
    +
    +        super(ErrorDetailsException, self).__init__(deserialize, response, 'ErrorDetails', *args)
    +
    +
    +class EventHubConsumerGroupInfo(Model):
    +    """The properties of the EventHubConsumerGroupInfo object.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties: The tags.
    +    :type properties: dict[str, str]
    +    :ivar id: The Event Hub-compatible consumer group identifier.
    +    :vartype id: str
    +    :ivar name: The Event Hub-compatible consumer group name.
    +    :vartype name: str
    +    :ivar type: the resource type.
    +    :vartype type: str
    +    :ivar etag: The etag.
    +    :vartype etag: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'etag': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': '{str}'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, properties=None, **kwargs) -> None:
    +        super(EventHubConsumerGroupInfo, self).__init__(**kwargs)
    +        self.properties = properties
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.etag = None
    +
    +
    +class EventHubProperties(Model):
    +    """The properties of the provisioned Event Hub-compatible endpoint used by the
    +    IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param retention_time_in_days: The retention time for device-to-cloud
    +     messages in days. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages
    +    :type retention_time_in_days: long
    +    :param partition_count: The number of partitions for receiving
    +     device-to-cloud messages in the Event Hub-compatible endpoint. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages.
    +    :type partition_count: int
    +    :ivar partition_ids: The partition ids in the Event Hub-compatible
    +     endpoint.
    +    :vartype partition_ids: list[str]
    +    :ivar path: The Event Hub-compatible name.
    +    :vartype path: str
    +    :ivar endpoint: The Event Hub-compatible endpoint.
    +    :vartype endpoint: str
    +    """
    +
    +    _validation = {
    +        'partition_ids': {'readonly': True},
    +        'path': {'readonly': True},
    +        'endpoint': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'retention_time_in_days': {'key': 'retentionTimeInDays', 'type': 'long'},
    +        'partition_count': {'key': 'partitionCount', 'type': 'int'},
    +        'partition_ids': {'key': 'partitionIds', 'type': '[str]'},
    +        'path': {'key': 'path', 'type': 'str'},
    +        'endpoint': {'key': 'endpoint', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, retention_time_in_days: int=None, partition_count: int=None, **kwargs) -> None:
    +        super(EventHubProperties, self).__init__(**kwargs)
    +        self.retention_time_in_days = retention_time_in_days
    +        self.partition_count = partition_count
    +        self.partition_ids = None
    +        self.path = None
    +        self.endpoint = None
    +
    +
    +class ExportDevicesRequest(Model):
    +    """Use to provide parameters when requesting an export of all devices in the
    +    IoT hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param export_blob_container_uri: Required. The export blob container URI.
    +    :type export_blob_container_uri: str
    +    :param exclude_keys: Required. The value indicating whether keys should be
    +     excluded during export.
    +    :type exclude_keys: bool
    +    """
    +
    +    _validation = {
    +        'export_blob_container_uri': {'required': True},
    +        'exclude_keys': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'export_blob_container_uri': {'key': 'exportBlobContainerUri', 'type': 'str'},
    +        'exclude_keys': {'key': 'excludeKeys', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, export_blob_container_uri: str, exclude_keys: bool, **kwargs) -> None:
    +        super(ExportDevicesRequest, self).__init__(**kwargs)
    +        self.export_blob_container_uri = export_blob_container_uri
    +        self.exclude_keys = exclude_keys
    +
    +
    +class FailoverInput(Model):
    +    """Use to provide failover region when requesting manual Failover for a hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param failover_region: Required. Region the hub will be failed over to
    +    :type failover_region: str
    +    """
    +
    +    _validation = {
    +        'failover_region': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'failover_region': {'key': 'failoverRegion', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, failover_region: str, **kwargs) -> None:
    +        super(FailoverInput, self).__init__(**kwargs)
    +        self.failover_region = failover_region
    +
    +
    +class FallbackRouteProperties(Model):
    +    """The properties of the fallback route. IoT Hub uses these properties when it
    +    routes messages to the fallback endpoint.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: The name of the route. The name can only include alphanumeric
    +     characters, periods, underscores, hyphens, has a maximum length of 64
    +     characters, and must be unique.
    +    :type name: str
    +    :ivar source: Required. The source to which the routing rule is to be
    +     applied to. For example, DeviceMessages. Default value: "DeviceMessages" .
    +    :vartype source: str
    +    :param condition: The condition which is evaluated in order to apply the
    +     fallback route. If the condition is not provided it will evaluate to true
    +     by default. For grammar, See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
    +    :type condition: str
    +    :param endpoint_names: Required. The list of endpoints to which the
    +     messages that satisfy the condition are routed to. Currently only 1
    +     endpoint is allowed.
    +    :type endpoint_names: list[str]
    +    :param is_enabled: Required. Used to specify whether the fallback route is
    +     enabled.
    +    :type is_enabled: bool
    +    """
    +
    +    _validation = {
    +        'source': {'required': True, 'constant': True},
    +        'endpoint_names': {'required': True, 'max_items': 1, 'min_items': 1},
    +        'is_enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'condition': {'key': 'condition', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +        'is_enabled': {'key': 'isEnabled', 'type': 'bool'},
    +    }
    +
    +    source = "DeviceMessages"
    +
    +    def __init__(self, *, endpoint_names, is_enabled: bool, name: str=None, condition: str=None, **kwargs) -> None:
    +        super(FallbackRouteProperties, self).__init__(**kwargs)
    +        self.name = name
    +        self.condition = condition
    +        self.endpoint_names = endpoint_names
    +        self.is_enabled = is_enabled
    +
    +
    +class FeedbackProperties(Model):
    +    """The properties of the feedback queue for cloud-to-device messages.
    +
    +    :param lock_duration_as_iso8601: The lock duration for the feedback queue.
    +     See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type lock_duration_as_iso8601: timedelta
    +    :param ttl_as_iso8601: The period of time for which a message is available
    +     to consume before it is expired by the IoT hub. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type ttl_as_iso8601: timedelta
    +    :param max_delivery_count: The number of times the IoT hub attempts to
    +     deliver a message on the feedback queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type max_delivery_count: int
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lock_duration_as_iso8601': {'key': 'lockDurationAsIso8601', 'type': 'duration'},
    +        'ttl_as_iso8601': {'key': 'ttlAsIso8601', 'type': 'duration'},
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, lock_duration_as_iso8601=None, ttl_as_iso8601=None, max_delivery_count: int=None, **kwargs) -> None:
    +        super(FeedbackProperties, self).__init__(**kwargs)
    +        self.lock_duration_as_iso8601 = lock_duration_as_iso8601
    +        self.ttl_as_iso8601 = ttl_as_iso8601
    +        self.max_delivery_count = max_delivery_count
    +
    +
    +class ImportDevicesRequest(Model):
    +    """Use to provide parameters when requesting an import of all devices in the
    +    hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param input_blob_container_uri: Required. The input blob container URI.
    +    :type input_blob_container_uri: str
    +    :param output_blob_container_uri: Required. The output blob container URI.
    +    :type output_blob_container_uri: str
    +    """
    +
    +    _validation = {
    +        'input_blob_container_uri': {'required': True},
    +        'output_blob_container_uri': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'input_blob_container_uri': {'key': 'inputBlobContainerUri', 'type': 'str'},
    +        'output_blob_container_uri': {'key': 'outputBlobContainerUri', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, input_blob_container_uri: str, output_blob_container_uri: str, **kwargs) -> None:
    +        super(ImportDevicesRequest, self).__init__(**kwargs)
    +        self.input_blob_container_uri = input_blob_container_uri
    +        self.output_blob_container_uri = output_blob_container_uri
    +
    +
    +class IotHubCapacity(Model):
    +    """IoT Hub capacity information.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar minimum: The minimum number of units.
    +    :vartype minimum: long
    +    :ivar maximum: The maximum number of units.
    +    :vartype maximum: long
    +    :ivar default: The default number of units.
    +    :vartype default: long
    +    :ivar scale_type: The type of the scaling enabled. Possible values
    +     include: 'Automatic', 'Manual', 'None'
    +    :vartype scale_type: str or ~azure.mgmt.iothub.models.IotHubScaleType
    +    """
    +
    +    _validation = {
    +        'minimum': {'readonly': True, 'maximum': 1, 'minimum': 1},
    +        'maximum': {'readonly': True},
    +        'default': {'readonly': True},
    +        'scale_type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'minimum': {'key': 'minimum', 'type': 'long'},
    +        'maximum': {'key': 'maximum', 'type': 'long'},
    +        'default': {'key': 'default', 'type': 'long'},
    +        'scale_type': {'key': 'scaleType', 'type': 'IotHubScaleType'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(IotHubCapacity, self).__init__(**kwargs)
    +        self.minimum = None
    +        self.maximum = None
    +        self.default = None
    +        self.scale_type = None
    +
    +
    +class Resource(Model):
    +    """The common properties of an Azure resource.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The resource name.
    +    :vartype name: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    :param location: Required. The resource location.
    +    :type location: str
    +    :param tags: The resource tags.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True, 'pattern': r'^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{2,49}[a-zA-Z0-9]$'},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, location: str, tags=None, **kwargs) -> None:
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.location = location
    +        self.tags = tags
    +
    +
    +class IotHubDescription(Resource):
    +    """The description of the IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The resource name.
    +    :vartype name: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    :param location: Required. The resource location.
    +    :type location: str
    +    :param tags: The resource tags.
    +    :type tags: dict[str, str]
    +    :param etag: The Etag field is *not* required. If it is provided in the
    +     response body, it must also be provided as a header per the normal ETag
    +     convention.
    +    :type etag: str
    +    :param properties: IotHub properties
    +    :type properties: ~azure.mgmt.iothub.models.IotHubProperties
    +    :param sku: Required. IotHub SKU info
    +    :type sku: ~azure.mgmt.iothub.models.IotHubSkuInfo
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True, 'pattern': r'^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{2,49}[a-zA-Z0-9]$'},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'sku': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'properties': {'key': 'properties', 'type': 'IotHubProperties'},
    +        'sku': {'key': 'sku', 'type': 'IotHubSkuInfo'},
    +    }
    +
    +    def __init__(self, *, location: str, sku, tags=None, etag: str=None, properties=None, **kwargs) -> None:
    +        super(IotHubDescription, self).__init__(location=location, tags=tags, **kwargs)
    +        self.etag = etag
    +        self.properties = properties
    +        self.sku = sku
    +
    +
    +class IotHubLocationDescription(Model):
    +    """Public representation of one of the locations where a resource is
    +    provisioned.
    +
    +    :param location: Azure Geo Regions
    +    :type location: str
    +    :param role: Specific Role assigned to this location. Possible values
    +     include: 'primary', 'secondary'
    +    :type role: str or ~azure.mgmt.iothub.models.IotHubReplicaRoleType
    +    """
    +
    +    _attribute_map = {
    +        'location': {'key': 'location', 'type': 'str'},
    +        'role': {'key': 'role', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, location: str=None, role=None, **kwargs) -> None:
    +        super(IotHubLocationDescription, self).__init__(**kwargs)
    +        self.location = location
    +        self.role = role
    +
    +
    +class IotHubNameAvailabilityInfo(Model):
    +    """The properties indicating whether a given IoT hub name is available.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name_available: The value which indicates whether the provided name
    +     is available.
    +    :vartype name_available: bool
    +    :ivar reason: The reason for unavailability. Possible values include:
    +     'Invalid', 'AlreadyExists'
    +    :vartype reason: str or
    +     ~azure.mgmt.iothub.models.IotHubNameUnavailabilityReason
    +    :param message: The detailed reason message.
    +    :type message: str
    +    """
    +
    +    _validation = {
    +        'name_available': {'readonly': True},
    +        'reason': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name_available': {'key': 'nameAvailable', 'type': 'bool'},
    +        'reason': {'key': 'reason', 'type': 'IotHubNameUnavailabilityReason'},
    +        'message': {'key': 'message', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, message: str=None, **kwargs) -> None:
    +        super(IotHubNameAvailabilityInfo, self).__init__(**kwargs)
    +        self.name_available = None
    +        self.reason = None
    +        self.message = message
    +
    +
    +class IotHubProperties(Model):
    +    """The properties of an IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param authorization_policies: The shared access policies you can use to
    +     secure a connection to the IoT hub.
    +    :type authorization_policies:
    +     list[~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRule]
    +    :param ip_filter_rules: The IP filter rules.
    +    :type ip_filter_rules: list[~azure.mgmt.iothub.models.IpFilterRule]
    +    :ivar provisioning_state: The provisioning state.
    +    :vartype provisioning_state: str
    +    :ivar state: The hub state.
    +    :vartype state: str
    +    :ivar host_name: The name of the host.
    +    :vartype host_name: str
    +    :param event_hub_endpoints: The Event Hub-compatible endpoint properties.
    +     The only possible keys to this dictionary is events. This key has to be
    +     present in the dictionary while making create or update calls for the IoT
    +     hub.
    +    :type event_hub_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.EventHubProperties]
    +    :param routing:
    +    :type routing: ~azure.mgmt.iothub.models.RoutingProperties
    +    :param storage_endpoints: The list of Azure Storage endpoints where you
    +     can upload files. Currently you can configure only one Azure Storage
    +     account and that MUST have its key as $default. Specifying more than one
    +     storage account causes an error to be thrown. Not specifying a value for
    +     this property when the enableFileUploadNotifications property is set to
    +     True, causes an error to be thrown.
    +    :type storage_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.StorageEndpointProperties]
    +    :param messaging_endpoints: The messaging endpoint properties for the file
    +     upload notification queue.
    +    :type messaging_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.MessagingEndpointProperties]
    +    :param enable_file_upload_notifications: If True, file upload
    +     notifications are enabled.
    +    :type enable_file_upload_notifications: bool
    +    :param cloud_to_device:
    +    :type cloud_to_device: ~azure.mgmt.iothub.models.CloudToDeviceProperties
    +    :param comments: IoT hub comments.
    +    :type comments: str
    +    :param device_streams: The device streams properties of iothub.
    +    :type device_streams:
    +     ~azure.mgmt.iothub.models.IotHubPropertiesDeviceStreams
    +    :param features: The capabilities and features enabled for the IoT hub.
    +     Possible values include: 'None', 'DeviceManagement'
    +    :type features: str or ~azure.mgmt.iothub.models.Capabilities
    +    :ivar locations: Primary and secondary location for iot hub
    +    :vartype locations:
    +     list[~azure.mgmt.iothub.models.IotHubLocationDescription]
    +    """
    +
    +    _validation = {
    +        'provisioning_state': {'readonly': True},
    +        'state': {'readonly': True},
    +        'host_name': {'readonly': True},
    +        'locations': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'authorization_policies': {'key': 'authorizationPolicies', 'type': '[SharedAccessSignatureAuthorizationRule]'},
    +        'ip_filter_rules': {'key': 'ipFilterRules', 'type': '[IpFilterRule]'},
    +        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
    +        'state': {'key': 'state', 'type': 'str'},
    +        'host_name': {'key': 'hostName', 'type': 'str'},
    +        'event_hub_endpoints': {'key': 'eventHubEndpoints', 'type': '{EventHubProperties}'},
    +        'routing': {'key': 'routing', 'type': 'RoutingProperties'},
    +        'storage_endpoints': {'key': 'storageEndpoints', 'type': '{StorageEndpointProperties}'},
    +        'messaging_endpoints': {'key': 'messagingEndpoints', 'type': '{MessagingEndpointProperties}'},
    +        'enable_file_upload_notifications': {'key': 'enableFileUploadNotifications', 'type': 'bool'},
    +        'cloud_to_device': {'key': 'cloudToDevice', 'type': 'CloudToDeviceProperties'},
    +        'comments': {'key': 'comments', 'type': 'str'},
    +        'device_streams': {'key': 'deviceStreams', 'type': 'IotHubPropertiesDeviceStreams'},
    +        'features': {'key': 'features', 'type': 'str'},
    +        'locations': {'key': 'locations', 'type': '[IotHubLocationDescription]'},
    +    }
    +
    +    def __init__(self, *, authorization_policies=None, ip_filter_rules=None, event_hub_endpoints=None, routing=None, storage_endpoints=None, messaging_endpoints=None, enable_file_upload_notifications: bool=None, cloud_to_device=None, comments: str=None, device_streams=None, features=None, **kwargs) -> None:
    +        super(IotHubProperties, self).__init__(**kwargs)
    +        self.authorization_policies = authorization_policies
    +        self.ip_filter_rules = ip_filter_rules
    +        self.provisioning_state = None
    +        self.state = None
    +        self.host_name = None
    +        self.event_hub_endpoints = event_hub_endpoints
    +        self.routing = routing
    +        self.storage_endpoints = storage_endpoints
    +        self.messaging_endpoints = messaging_endpoints
    +        self.enable_file_upload_notifications = enable_file_upload_notifications
    +        self.cloud_to_device = cloud_to_device
    +        self.comments = comments
    +        self.device_streams = device_streams
    +        self.features = features
    +        self.locations = None
    +
    +
    +class IotHubPropertiesDeviceStreams(Model):
    +    """The device streams properties of iothub.
    +
    +    :param streaming_endpoints: List of Device Streams Endpoints.
    +    :type streaming_endpoints: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'streaming_endpoints': {'key': 'streamingEndpoints', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, *, streaming_endpoints=None, **kwargs) -> None:
    +        super(IotHubPropertiesDeviceStreams, self).__init__(**kwargs)
    +        self.streaming_endpoints = streaming_endpoints
    +
    +
    +class IotHubQuotaMetricInfo(Model):
    +    """Quota metrics properties.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name: The name of the quota metric.
    +    :vartype name: str
    +    :ivar current_value: The current value for the quota metric.
    +    :vartype current_value: long
    +    :ivar max_value: The maximum value of the quota metric.
    +    :vartype max_value: long
    +    """
    +
    +    _validation = {
    +        'name': {'readonly': True},
    +        'current_value': {'readonly': True},
    +        'max_value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'current_value': {'key': 'currentValue', 'type': 'long'},
    +        'max_value': {'key': 'maxValue', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(IotHubQuotaMetricInfo, self).__init__(**kwargs)
    +        self.name = None
    +        self.current_value = None
    +        self.max_value = None
    +
    +
    +class IotHubSkuDescription(Model):
    +    """SKU properties.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar resource_type: The type of the resource.
    +    :vartype resource_type: str
    +    :param sku: Required. The type of the resource.
    +    :type sku: ~azure.mgmt.iothub.models.IotHubSkuInfo
    +    :param capacity: Required. IotHub capacity
    +    :type capacity: ~azure.mgmt.iothub.models.IotHubCapacity
    +    """
    +
    +    _validation = {
    +        'resource_type': {'readonly': True},
    +        'sku': {'required': True},
    +        'capacity': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'resource_type': {'key': 'resourceType', 'type': 'str'},
    +        'sku': {'key': 'sku', 'type': 'IotHubSkuInfo'},
    +        'capacity': {'key': 'capacity', 'type': 'IotHubCapacity'},
    +    }
    +
    +    def __init__(self, *, sku, capacity, **kwargs) -> None:
    +        super(IotHubSkuDescription, self).__init__(**kwargs)
    +        self.resource_type = None
    +        self.sku = sku
    +        self.capacity = capacity
    +
    +
    +class IotHubSkuInfo(Model):
    +    """Information about the SKU of the IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the SKU. Possible values include: 'F1',
    +     'S1', 'S2', 'S3', 'B1', 'B2', 'B3'
    +    :type name: str or ~azure.mgmt.iothub.models.IotHubSku
    +    :ivar tier: The billing tier for the IoT hub. Possible values include:
    +     'Free', 'Standard', 'Basic'
    +    :vartype tier: str or ~azure.mgmt.iothub.models.IotHubSkuTier
    +    :param capacity: The number of provisioned IoT Hub units. See:
    +     https://docs.microsoft.com/azure/azure-subscription-service-limits#iot-hub-limits.
    +    :type capacity: long
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'tier': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'tier': {'key': 'tier', 'type': 'IotHubSkuTier'},
    +        'capacity': {'key': 'capacity', 'type': 'long'},
    +    }
    +
    +    def __init__(self, *, name, capacity: int=None, **kwargs) -> None:
    +        super(IotHubSkuInfo, self).__init__(**kwargs)
    +        self.name = name
    +        self.tier = None
    +        self.capacity = capacity
    +
    +
    +class IpFilterRule(Model):
    +    """The IP filter rules for the IoT hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param filter_name: Required. The name of the IP filter rule.
    +    :type filter_name: str
    +    :param action: Required. The desired action for requests captured by this
    +     rule. Possible values include: 'Accept', 'Reject'
    +    :type action: str or ~azure.mgmt.iothub.models.IpFilterActionType
    +    :param ip_mask: Required. A string that contains the IP address range in
    +     CIDR notation for the rule.
    +    :type ip_mask: str
    +    """
    +
    +    _validation = {
    +        'filter_name': {'required': True},
    +        'action': {'required': True},
    +        'ip_mask': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'filter_name': {'key': 'filterName', 'type': 'str'},
    +        'action': {'key': 'action', 'type': 'IpFilterActionType'},
    +        'ip_mask': {'key': 'ipMask', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, filter_name: str, action, ip_mask: str, **kwargs) -> None:
    +        super(IpFilterRule, self).__init__(**kwargs)
    +        self.filter_name = filter_name
    +        self.action = action
    +        self.ip_mask = ip_mask
    +
    +
    +class JobResponse(Model):
    +    """The properties of the Job Response object.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar job_id: The job identifier.
    +    :vartype job_id: str
    +    :ivar start_time_utc: The start time of the job.
    +    :vartype start_time_utc: datetime
    +    :ivar end_time_utc: The time the job stopped processing.
    +    :vartype end_time_utc: datetime
    +    :ivar type: The type of the job. Possible values include: 'unknown',
    +     'export', 'import', 'backup', 'readDeviceProperties',
    +     'writeDeviceProperties', 'updateDeviceConfiguration', 'rebootDevice',
    +     'factoryResetDevice', 'firmwareUpdate'
    +    :vartype type: str or ~azure.mgmt.iothub.models.JobType
    +    :ivar status: The status of the job. Possible values include: 'unknown',
    +     'enqueued', 'running', 'completed', 'failed', 'cancelled'
    +    :vartype status: str or ~azure.mgmt.iothub.models.JobStatus
    +    :ivar failure_reason: If status == failed, this string containing the
    +     reason for the failure.
    +    :vartype failure_reason: str
    +    :ivar status_message: The status message for the job.
    +    :vartype status_message: str
    +    :ivar parent_job_id: The job identifier of the parent job, if any.
    +    :vartype parent_job_id: str
    +    """
    +
    +    _validation = {
    +        'job_id': {'readonly': True},
    +        'start_time_utc': {'readonly': True},
    +        'end_time_utc': {'readonly': True},
    +        'type': {'readonly': True},
    +        'status': {'readonly': True},
    +        'failure_reason': {'readonly': True},
    +        'status_message': {'readonly': True},
    +        'parent_job_id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'job_id': {'key': 'jobId', 'type': 'str'},
    +        'start_time_utc': {'key': 'startTimeUtc', 'type': 'rfc-1123'},
    +        'end_time_utc': {'key': 'endTimeUtc', 'type': 'rfc-1123'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'status': {'key': 'status', 'type': 'JobStatus'},
    +        'failure_reason': {'key': 'failureReason', 'type': 'str'},
    +        'status_message': {'key': 'statusMessage', 'type': 'str'},
    +        'parent_job_id': {'key': 'parentJobId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(JobResponse, self).__init__(**kwargs)
    +        self.job_id = None
    +        self.start_time_utc = None
    +        self.end_time_utc = None
    +        self.type = None
    +        self.status = None
    +        self.failure_reason = None
    +        self.status_message = None
    +        self.parent_job_id = None
    +
    +
    +class MatchedRoute(Model):
    +    """Routes that matched.
    +
    +    :param properties: Properties of routes that matched
    +    :type properties: ~azure.mgmt.iothub.models.RouteProperties
    +    """
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'RouteProperties'},
    +    }
    +
    +    def __init__(self, *, properties=None, **kwargs) -> None:
    +        super(MatchedRoute, self).__init__(**kwargs)
    +        self.properties = properties
    +
    +
    +class MessagingEndpointProperties(Model):
    +    """The properties of the messaging endpoints used by this IoT hub.
    +
    +    :param lock_duration_as_iso8601: The lock duration. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type lock_duration_as_iso8601: timedelta
    +    :param ttl_as_iso8601: The period of time for which a message is available
    +     to consume before it is expired by the IoT hub. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type ttl_as_iso8601: timedelta
    +    :param max_delivery_count: The number of times the IoT hub attempts to
    +     deliver a message. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type max_delivery_count: int
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lock_duration_as_iso8601': {'key': 'lockDurationAsIso8601', 'type': 'duration'},
    +        'ttl_as_iso8601': {'key': 'ttlAsIso8601', 'type': 'duration'},
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, lock_duration_as_iso8601=None, ttl_as_iso8601=None, max_delivery_count: int=None, **kwargs) -> None:
    +        super(MessagingEndpointProperties, self).__init__(**kwargs)
    +        self.lock_duration_as_iso8601 = lock_duration_as_iso8601
    +        self.ttl_as_iso8601 = ttl_as_iso8601
    +        self.max_delivery_count = max_delivery_count
    +
    +
    +class Name(Model):
    +    """Name of Iot Hub type.
    +
    +    :param value: IotHub type
    +    :type value: str
    +    :param localized_value: Localized value of name
    +    :type localized_value: str
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'localized_value': {'key': 'localizedValue', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, value: str=None, localized_value: str=None, **kwargs) -> None:
    +        super(Name, self).__init__(**kwargs)
    +        self.value = value
    +        self.localized_value = localized_value
    +
    +
    +class Operation(Model):
    +    """IoT Hub REST API operation.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name: Operation name: {provider}/{resource}/{read | write | action |
    +     delete}
    +    :vartype name: str
    +    :param display: The object that represents the operation.
    +    :type display: ~azure.mgmt.iothub.models.OperationDisplay
    +    """
    +
    +    _validation = {
    +        'name': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'display': {'key': 'display', 'type': 'OperationDisplay'},
    +    }
    +
    +    def __init__(self, *, display=None, **kwargs) -> None:
    +        super(Operation, self).__init__(**kwargs)
    +        self.name = None
    +        self.display = display
    +
    +
    +class OperationDisplay(Model):
    +    """The object that represents the operation.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar provider: Service provider: Microsoft Devices
    +    :vartype provider: str
    +    :ivar resource: Resource Type: IotHubs
    +    :vartype resource: str
    +    :ivar operation: Name of the operation
    +    :vartype operation: str
    +    :ivar description: Description of the operation
    +    :vartype description: str
    +    """
    +
    +    _validation = {
    +        'provider': {'readonly': True},
    +        'resource': {'readonly': True},
    +        'operation': {'readonly': True},
    +        'description': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'resource': {'key': 'resource', 'type': 'str'},
    +        'operation': {'key': 'operation', 'type': 'str'},
    +        'description': {'key': 'description', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(OperationDisplay, self).__init__(**kwargs)
    +        self.provider = None
    +        self.resource = None
    +        self.operation = None
    +        self.description = None
    +
    +
    +class OperationInputs(Model):
    +    """Input values.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the IoT hub to check.
    +    :type name: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, name: str, **kwargs) -> None:
    +        super(OperationInputs, self).__init__(**kwargs)
    +        self.name = name
    +
    +
    +class RegistryStatistics(Model):
    +    """Identity registry statistics.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar total_device_count: The total count of devices in the identity
    +     registry.
    +    :vartype total_device_count: long
    +    :ivar enabled_device_count: The count of enabled devices in the identity
    +     registry.
    +    :vartype enabled_device_count: long
    +    :ivar disabled_device_count: The count of disabled devices in the identity
    +     registry.
    +    :vartype disabled_device_count: long
    +    """
    +
    +    _validation = {
    +        'total_device_count': {'readonly': True},
    +        'enabled_device_count': {'readonly': True},
    +        'disabled_device_count': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'total_device_count': {'key': 'totalDeviceCount', 'type': 'long'},
    +        'enabled_device_count': {'key': 'enabledDeviceCount', 'type': 'long'},
    +        'disabled_device_count': {'key': 'disabledDeviceCount', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(RegistryStatistics, self).__init__(**kwargs)
    +        self.total_device_count = None
    +        self.enabled_device_count = None
    +        self.disabled_device_count = None
    +
    +
    +class RouteCompilationError(Model):
    +    """Compilation error when evaluating route.
    +
    +    :param message: Route error message
    +    :type message: str
    +    :param severity: Severity of the route error. Possible values include:
    +     'error', 'warning'
    +    :type severity: str or ~azure.mgmt.iothub.models.RouteErrorSeverity
    +    :param location: Location where the route error happened
    +    :type location: ~azure.mgmt.iothub.models.RouteErrorRange
    +    """
    +
    +    _attribute_map = {
    +        'message': {'key': 'message', 'type': 'str'},
    +        'severity': {'key': 'severity', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'RouteErrorRange'},
    +    }
    +
    +    def __init__(self, *, message: str=None, severity=None, location=None, **kwargs) -> None:
    +        super(RouteCompilationError, self).__init__(**kwargs)
    +        self.message = message
    +        self.severity = severity
    +        self.location = location
    +
    +
    +class RouteErrorPosition(Model):
    +    """Position where the route error happened.
    +
    +    :param line: Line where the route error happened
    +    :type line: int
    +    :param column: Column where the route error happened
    +    :type column: int
    +    """
    +
    +    _attribute_map = {
    +        'line': {'key': 'line', 'type': 'int'},
    +        'column': {'key': 'column', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, line: int=None, column: int=None, **kwargs) -> None:
    +        super(RouteErrorPosition, self).__init__(**kwargs)
    +        self.line = line
    +        self.column = column
    +
    +
    +class RouteErrorRange(Model):
    +    """Range of route errors.
    +
    +    :param start: Start where the route error happened
    +    :type start: ~azure.mgmt.iothub.models.RouteErrorPosition
    +    :param end: End where the route error happened
    +    :type end: ~azure.mgmt.iothub.models.RouteErrorPosition
    +    """
    +
    +    _attribute_map = {
    +        'start': {'key': 'start', 'type': 'RouteErrorPosition'},
    +        'end': {'key': 'end', 'type': 'RouteErrorPosition'},
    +    }
    +
    +    def __init__(self, *, start=None, end=None, **kwargs) -> None:
    +        super(RouteErrorRange, self).__init__(**kwargs)
    +        self.start = start
    +        self.end = end
    +
    +
    +class RouteProperties(Model):
    +    """The properties of a routing rule that your IoT hub uses to route messages
    +    to endpoints.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the route. The name can only include
    +     alphanumeric characters, periods, underscores, hyphens, has a maximum
    +     length of 64 characters, and must be unique.
    +    :type name: str
    +    :param source: Required. The source that the routing rule is to be applied
    +     to, such as DeviceMessages. Possible values include: 'Invalid',
    +     'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents',
    +     'DeviceJobLifecycleEvents'
    +    :type source: str or ~azure.mgmt.iothub.models.RoutingSource
    +    :param condition: The condition that is evaluated to apply the routing
    +     rule. If no condition is provided, it evaluates to true by default. For
    +     grammar, see:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
    +    :type condition: str
    +    :param endpoint_names: Required. The list of endpoints to which messages
    +     that satisfy the condition are routed. Currently only one endpoint is
    +     allowed.
    +    :type endpoint_names: list[str]
    +    :param is_enabled: Required. Used to specify whether a route is enabled.
    +    :type is_enabled: bool
    +    """
    +
    +    _validation = {
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +        'source': {'required': True},
    +        'endpoint_names': {'required': True, 'max_items': 1, 'min_items': 1},
    +        'is_enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'condition': {'key': 'condition', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +        'is_enabled': {'key': 'isEnabled', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, name: str, source, endpoint_names, is_enabled: bool, condition: str=None, **kwargs) -> None:
    +        super(RouteProperties, self).__init__(**kwargs)
    +        self.name = name
    +        self.source = source
    +        self.condition = condition
    +        self.endpoint_names = endpoint_names
    +        self.is_enabled = is_enabled
    +
    +
    +class RoutingEndpoints(Model):
    +    """The properties related to the custom endpoints to which your IoT hub routes
    +    messages based on the routing rules. A maximum of 10 custom endpoints are
    +    allowed across all endpoint types for paid hubs and only 1 custom endpoint
    +    is allowed across all endpoint types for free hubs.
    +
    +    :param service_bus_queues: The list of Service Bus queue endpoints that
    +     IoT hub routes the messages to, based on the routing rules.
    +    :type service_bus_queues:
    +     list[~azure.mgmt.iothub.models.RoutingServiceBusQueueEndpointProperties]
    +    :param service_bus_topics: The list of Service Bus topic endpoints that
    +     the IoT hub routes the messages to, based on the routing rules.
    +    :type service_bus_topics:
    +     list[~azure.mgmt.iothub.models.RoutingServiceBusTopicEndpointProperties]
    +    :param event_hubs: The list of Event Hubs endpoints that IoT hub routes
    +     messages to, based on the routing rules. This list does not include the
    +     built-in Event Hubs endpoint.
    +    :type event_hubs:
    +     list[~azure.mgmt.iothub.models.RoutingEventHubProperties]
    +    :param storage_containers: The list of storage container endpoints that
    +     IoT hub routes messages to, based on the routing rules.
    +    :type storage_containers:
    +     list[~azure.mgmt.iothub.models.RoutingStorageContainerProperties]
    +    """
    +
    +    _attribute_map = {
    +        'service_bus_queues': {'key': 'serviceBusQueues', 'type': '[RoutingServiceBusQueueEndpointProperties]'},
    +        'service_bus_topics': {'key': 'serviceBusTopics', 'type': '[RoutingServiceBusTopicEndpointProperties]'},
    +        'event_hubs': {'key': 'eventHubs', 'type': '[RoutingEventHubProperties]'},
    +        'storage_containers': {'key': 'storageContainers', 'type': '[RoutingStorageContainerProperties]'},
    +    }
    +
    +    def __init__(self, *, service_bus_queues=None, service_bus_topics=None, event_hubs=None, storage_containers=None, **kwargs) -> None:
    +        super(RoutingEndpoints, self).__init__(**kwargs)
    +        self.service_bus_queues = service_bus_queues
    +        self.service_bus_topics = service_bus_topics
    +        self.event_hubs = event_hubs
    +        self.storage_containers = storage_containers
    +
    +
    +class RoutingEventHubProperties(Model):
    +    """The properties related to an event hub endpoint.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the event hub
    +     endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the event hub
    +     endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the event hub
    +     endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, name: str, subscription_id: str=None, resource_group: str=None, **kwargs) -> None:
    +        super(RoutingEventHubProperties, self).__init__(**kwargs)
    +        self.connection_string = connection_string
    +        self.name = name
    +        self.subscription_id = subscription_id
    +        self.resource_group = resource_group
    +
    +
    +class RoutingMessage(Model):
    +    """Routing message.
    +
    +    :param body: Body of routing message
    +    :type body: str
    +    :param app_properties: App properties
    +    :type app_properties: dict[str, str]
    +    :param system_properties: System properties
    +    :type system_properties: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'body': {'key': 'body', 'type': 'str'},
    +        'app_properties': {'key': 'appProperties', 'type': '{str}'},
    +        'system_properties': {'key': 'systemProperties', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, body: str=None, app_properties=None, system_properties=None, **kwargs) -> None:
    +        super(RoutingMessage, self).__init__(**kwargs)
    +        self.body = body
    +        self.app_properties = app_properties
    +        self.system_properties = system_properties
    +
    +
    +class RoutingProperties(Model):
    +    """The routing related properties of the IoT hub. See:
    +    https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging.
    +
    +    :param endpoints:
    +    :type endpoints: ~azure.mgmt.iothub.models.RoutingEndpoints
    +    :param routes: The list of user-provided routing rules that the IoT hub
    +     uses to route messages to built-in and custom endpoints. A maximum of 100
    +     routing rules are allowed for paid hubs and a maximum of 5 routing rules
    +     are allowed for free hubs.
    +    :type routes: list[~azure.mgmt.iothub.models.RouteProperties]
    +    :param fallback_route: The properties of the route that is used as a
    +     fall-back route when none of the conditions specified in the 'routes'
    +     section are met. This is an optional parameter. When this property is not
    +     set, the messages which do not meet any of the conditions specified in the
    +     'routes' section get routed to the built-in eventhub endpoint.
    +    :type fallback_route: ~azure.mgmt.iothub.models.FallbackRouteProperties
    +    :param enrichments: The list of user-provided enrichments that the IoT hub
    +     applies to messages to be delivered to built-in and custom endpoints. See:
    +     https://aka.ms/iotmsgenrich
    +    :type enrichments: list[~azure.mgmt.iothub.models.EnrichmentProperties]
    +    """
    +
    +    _attribute_map = {
    +        'endpoints': {'key': 'endpoints', 'type': 'RoutingEndpoints'},
    +        'routes': {'key': 'routes', 'type': '[RouteProperties]'},
    +        'fallback_route': {'key': 'fallbackRoute', 'type': 'FallbackRouteProperties'},
    +        'enrichments': {'key': 'enrichments', 'type': '[EnrichmentProperties]'},
    +    }
    +
    +    def __init__(self, *, endpoints=None, routes=None, fallback_route=None, enrichments=None, **kwargs) -> None:
    +        super(RoutingProperties, self).__init__(**kwargs)
    +        self.endpoints = endpoints
    +        self.routes = routes
    +        self.fallback_route = fallback_route
    +        self.enrichments = enrichments
    +
    +
    +class RoutingServiceBusQueueEndpointProperties(Model):
    +    """The properties related to service bus queue endpoint types.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the service
    +     bus queue endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types. The name need not be the same as the actual
    +     queue name.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the service bus
    +     queue endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the service bus
    +     queue endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, name: str, subscription_id: str=None, resource_group: str=None, **kwargs) -> None:
    +        super(RoutingServiceBusQueueEndpointProperties, self).__init__(**kwargs)
    +        self.connection_string = connection_string
    +        self.name = name
    +        self.subscription_id = subscription_id
    +        self.resource_group = resource_group
    +
    +
    +class RoutingServiceBusTopicEndpointProperties(Model):
    +    """The properties related to service bus topic endpoint types.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the service
    +     bus topic endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.  The name need not be the same as the actual
    +     topic name.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the service bus
    +     topic endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the service bus
    +     topic endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, name: str, subscription_id: str=None, resource_group: str=None, **kwargs) -> None:
    +        super(RoutingServiceBusTopicEndpointProperties, self).__init__(**kwargs)
    +        self.connection_string = connection_string
    +        self.name = name
    +        self.subscription_id = subscription_id
    +        self.resource_group = resource_group
    +
    +
    +class RoutingStorageContainerProperties(Model):
    +    """The properties related to a storage container endpoint.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the storage
    +     account.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the storage
    +     account.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the storage
    +     account.
    +    :type resource_group: str
    +    :param container_name: Required. The name of storage container in the
    +     storage account.
    +    :type container_name: str
    +    :param file_name_format: File name format for the blob. Default format is
    +     {iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}. All parameters are
    +     mandatory but can be reordered.
    +    :type file_name_format: str
    +    :param batch_frequency_in_seconds: Time interval at which blobs are
    +     written to storage. Value should be between 60 and 720 seconds. Default
    +     value is 300 seconds.
    +    :type batch_frequency_in_seconds: int
    +    :param max_chunk_size_in_bytes: Maximum number of bytes for each blob
    +     written to storage. Value should be between 10485760(10MB) and
    +     524288000(500MB). Default value is 314572800(300MB).
    +    :type max_chunk_size_in_bytes: int
    +    :param encoding: Encoding that is used to serialize messages to blobs.
    +     Supported values are 'avro', 'avrodeflate', and 'JSON'. Default value is
    +     'avro'. Possible values include: 'Avro', 'AvroDeflate', 'JSON'
    +    :type encoding: str or ~azure.mgmt.iothub.models.enum
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +        'container_name': {'required': True},
    +        'batch_frequency_in_seconds': {'maximum': 720, 'minimum': 60},
    +        'max_chunk_size_in_bytes': {'maximum': 524288000, 'minimum': 10485760},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +        'container_name': {'key': 'containerName', 'type': 'str'},
    +        'file_name_format': {'key': 'fileNameFormat', 'type': 'str'},
    +        'batch_frequency_in_seconds': {'key': 'batchFrequencyInSeconds', 'type': 'int'},
    +        'max_chunk_size_in_bytes': {'key': 'maxChunkSizeInBytes', 'type': 'int'},
    +        'encoding': {'key': 'encoding', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, name: str, container_name: str, subscription_id: str=None, resource_group: str=None, file_name_format: str=None, batch_frequency_in_seconds: int=None, max_chunk_size_in_bytes: int=None, encoding=None, **kwargs) -> None:
    +        super(RoutingStorageContainerProperties, self).__init__(**kwargs)
    +        self.connection_string = connection_string
    +        self.name = name
    +        self.subscription_id = subscription_id
    +        self.resource_group = resource_group
    +        self.container_name = container_name
    +        self.file_name_format = file_name_format
    +        self.batch_frequency_in_seconds = batch_frequency_in_seconds
    +        self.max_chunk_size_in_bytes = max_chunk_size_in_bytes
    +        self.encoding = encoding
    +
    +
    +class RoutingTwin(Model):
    +    """Twin reference input parameter. This is an optional parameter.
    +
    +    :param tags: Twin Tags
    +    :type tags: object
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.RoutingTwinProperties
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': 'object'},
    +        'properties': {'key': 'properties', 'type': 'RoutingTwinProperties'},
    +    }
    +
    +    def __init__(self, *, tags=None, properties=None, **kwargs) -> None:
    +        super(RoutingTwin, self).__init__(**kwargs)
    +        self.tags = tags
    +        self.properties = properties
    +
    +
    +class RoutingTwinProperties(Model):
    +    """RoutingTwinProperties.
    +
    +    :param desired: Twin desired properties
    +    :type desired: object
    +    :param reported: Twin desired properties
    +    :type reported: object
    +    """
    +
    +    _attribute_map = {
    +        'desired': {'key': 'desired', 'type': 'object'},
    +        'reported': {'key': 'reported', 'type': 'object'},
    +    }
    +
    +    def __init__(self, *, desired=None, reported=None, **kwargs) -> None:
    +        super(RoutingTwinProperties, self).__init__(**kwargs)
    +        self.desired = desired
    +        self.reported = reported
    +
    +
    +class SharedAccessSignatureAuthorizationRule(Model):
    +    """The properties of an IoT hub shared access policy.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_name: Required. The name of the shared access policy.
    +    :type key_name: str
    +    :param primary_key: The primary key.
    +    :type primary_key: str
    +    :param secondary_key: The secondary key.
    +    :type secondary_key: str
    +    :param rights: Required. The permissions assigned to the shared access
    +     policy. Possible values include: 'RegistryRead', 'RegistryWrite',
    +     'ServiceConnect', 'DeviceConnect', 'RegistryRead, RegistryWrite',
    +     'RegistryRead, ServiceConnect', 'RegistryRead, DeviceConnect',
    +     'RegistryWrite, ServiceConnect', 'RegistryWrite, DeviceConnect',
    +     'ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite,
    +     ServiceConnect', 'RegistryRead, RegistryWrite, DeviceConnect',
    +     'RegistryRead, ServiceConnect, DeviceConnect', 'RegistryWrite,
    +     ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite,
    +     ServiceConnect, DeviceConnect'
    +    :type rights: str or ~azure.mgmt.iothub.models.AccessRights
    +    """
    +
    +    _validation = {
    +        'key_name': {'required': True},
    +        'rights': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_name': {'key': 'keyName', 'type': 'str'},
    +        'primary_key': {'key': 'primaryKey', 'type': 'str'},
    +        'secondary_key': {'key': 'secondaryKey', 'type': 'str'},
    +        'rights': {'key': 'rights', 'type': 'AccessRights'},
    +    }
    +
    +    def __init__(self, *, key_name: str, rights, primary_key: str=None, secondary_key: str=None, **kwargs) -> None:
    +        super(SharedAccessSignatureAuthorizationRule, self).__init__(**kwargs)
    +        self.key_name = key_name
    +        self.primary_key = primary_key
    +        self.secondary_key = secondary_key
    +        self.rights = rights
    +
    +
    +class StorageEndpointProperties(Model):
    +    """The properties of the Azure Storage endpoint for file upload.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param sas_ttl_as_iso8601: The period of time for which the SAS URI
    +     generated by IoT Hub for file upload is valid. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload#file-upload-notification-configuration-options.
    +    :type sas_ttl_as_iso8601: timedelta
    +    :param connection_string: Required. The connection string for the Azure
    +     Storage account to which files are uploaded.
    +    :type connection_string: str
    +    :param container_name: Required. The name of the root container where you
    +     upload files. The container need not exist but should be creatable using
    +     the connectionString specified.
    +    :type container_name: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'container_name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'sas_ttl_as_iso8601': {'key': 'sasTtlAsIso8601', 'type': 'duration'},
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'container_name': {'key': 'containerName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, container_name: str, sas_ttl_as_iso8601=None, **kwargs) -> None:
    +        super(StorageEndpointProperties, self).__init__(**kwargs)
    +        self.sas_ttl_as_iso8601 = sas_ttl_as_iso8601
    +        self.connection_string = connection_string
    +        self.container_name = container_name
    +
    +
    +class TagsResource(Model):
    +    """A container holding only the Tags for a resource, allowing the user to
    +    update the tags on an IoT Hub instance.
    +
    +    :param tags: Resource tags
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, tags=None, **kwargs) -> None:
    +        super(TagsResource, self).__init__(**kwargs)
    +        self.tags = tags
    +
    +
    +class TestAllRoutesInput(Model):
    +    """Input for testing all routes.
    +
    +    :param routing_source: Routing source. Possible values include: 'Invalid',
    +     'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents',
    +     'DeviceJobLifecycleEvents'
    +    :type routing_source: str or ~azure.mgmt.iothub.models.RoutingSource
    +    :param message: Routing message
    +    :type message: ~azure.mgmt.iothub.models.RoutingMessage
    +    :param twin: Routing Twin Reference
    +    :type twin: ~azure.mgmt.iothub.models.RoutingTwin
    +    """
    +
    +    _attribute_map = {
    +        'routing_source': {'key': 'routingSource', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'RoutingMessage'},
    +        'twin': {'key': 'twin', 'type': 'RoutingTwin'},
    +    }
    +
    +    def __init__(self, *, routing_source=None, message=None, twin=None, **kwargs) -> None:
    +        super(TestAllRoutesInput, self).__init__(**kwargs)
    +        self.routing_source = routing_source
    +        self.message = message
    +        self.twin = twin
    +
    +
    +class TestAllRoutesResult(Model):
    +    """Result of testing all routes.
    +
    +    :param routes: JSON-serialized array of matched routes
    +    :type routes: list[~azure.mgmt.iothub.models.MatchedRoute]
    +    """
    +
    +    _attribute_map = {
    +        'routes': {'key': 'routes', 'type': '[MatchedRoute]'},
    +    }
    +
    +    def __init__(self, *, routes=None, **kwargs) -> None:
    +        super(TestAllRoutesResult, self).__init__(**kwargs)
    +        self.routes = routes
    +
    +
    +class TestRouteInput(Model):
    +    """Input for testing route.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param message: Routing message
    +    :type message: ~azure.mgmt.iothub.models.RoutingMessage
    +    :param route: Required. Route properties
    +    :type route: ~azure.mgmt.iothub.models.RouteProperties
    +    :param twin: Routing Twin Reference
    +    :type twin: ~azure.mgmt.iothub.models.RoutingTwin
    +    """
    +
    +    _validation = {
    +        'route': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'message': {'key': 'message', 'type': 'RoutingMessage'},
    +        'route': {'key': 'route', 'type': 'RouteProperties'},
    +        'twin': {'key': 'twin', 'type': 'RoutingTwin'},
    +    }
    +
    +    def __init__(self, *, route, message=None, twin=None, **kwargs) -> None:
    +        super(TestRouteInput, self).__init__(**kwargs)
    +        self.message = message
    +        self.route = route
    +        self.twin = twin
    +
    +
    +class TestRouteResult(Model):
    +    """Result of testing one route.
    +
    +    :param result: Result of testing route. Possible values include:
    +     'undefined', 'false', 'true'
    +    :type result: str or ~azure.mgmt.iothub.models.TestResultStatus
    +    :param details: Detailed result of testing route
    +    :type details: ~azure.mgmt.iothub.models.TestRouteResultDetails
    +    """
    +
    +    _attribute_map = {
    +        'result': {'key': 'result', 'type': 'str'},
    +        'details': {'key': 'details', 'type': 'TestRouteResultDetails'},
    +    }
    +
    +    def __init__(self, *, result=None, details=None, **kwargs) -> None:
    +        super(TestRouteResult, self).__init__(**kwargs)
    +        self.result = result
    +        self.details = details
    +
    +
    +class TestRouteResultDetails(Model):
    +    """Detailed result of testing a route.
    +
    +    :param compilation_errors: JSON-serialized list of route compilation
    +     errors
    +    :type compilation_errors:
    +     list[~azure.mgmt.iothub.models.RouteCompilationError]
    +    """
    +
    +    _attribute_map = {
    +        'compilation_errors': {'key': 'compilationErrors', 'type': '[RouteCompilationError]'},
    +    }
    +
    +    def __init__(self, *, compilation_errors=None, **kwargs) -> None:
    +        super(TestRouteResultDetails, self).__init__(**kwargs)
    +        self.compilation_errors = compilation_errors
    +
    +
    +class UserSubscriptionQuota(Model):
    +    """User subscription quota response.
    +
    +    :param id: IotHub type id
    +    :type id: str
    +    :param type: Response type
    +    :type type: str
    +    :param unit: Unit of IotHub type
    +    :type unit: str
    +    :param current_value: Current number of IotHub type
    +    :type current_value: int
    +    :param limit: Numerical limit on IotHub type
    +    :type limit: int
    +    :param name: IotHub type
    +    :type name: ~azure.mgmt.iothub.models.Name
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'unit': {'key': 'unit', 'type': 'str'},
    +        'current_value': {'key': 'currentValue', 'type': 'int'},
    +        'limit': {'key': 'limit', 'type': 'int'},
    +        'name': {'key': 'name', 'type': 'Name'},
    +    }
    +
    +    def __init__(self, *, id: str=None, type: str=None, unit: str=None, current_value: int=None, limit: int=None, name=None, **kwargs) -> None:
    +        super(UserSubscriptionQuota, self).__init__(**kwargs)
    +        self.id = id
    +        self.type = type
    +        self.unit = unit
    +        self.current_value = current_value
    +        self.limit = limit
    +        self.name = name
    +
    +
    +class UserSubscriptionQuotaListResult(Model):
    +    """Json-serialized array of User subscription quota response.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value:
    +    :type value: list[~azure.mgmt.iothub.models.UserSubscriptionQuota]
    +    :ivar next_link:
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[UserSubscriptionQuota]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, value=None, **kwargs) -> None:
    +        super(UserSubscriptionQuotaListResult, self).__init__(**kwargs)
    +        self.value = value
    +        self.next_link = None
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/_paged_models.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/_paged_models.py
    new file mode 100644
    index 000000000000..9efc5c83f755
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/models/_paged_models.py
    @@ -0,0 +1,118 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.paging import Paged
    +
    +
    +class OperationPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`Operation ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[Operation]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(OperationPaged, self).__init__(*args, **kwargs)
    +class IotHubDescriptionPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`IotHubDescription ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[IotHubDescription]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(IotHubDescriptionPaged, self).__init__(*args, **kwargs)
    +class IotHubSkuDescriptionPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`IotHubSkuDescription ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[IotHubSkuDescription]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(IotHubSkuDescriptionPaged, self).__init__(*args, **kwargs)
    +class EventHubConsumerGroupInfoPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`EventHubConsumerGroupInfo ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[EventHubConsumerGroupInfo]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(EventHubConsumerGroupInfoPaged, self).__init__(*args, **kwargs)
    +class JobResponsePaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`JobResponse ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[JobResponse]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(JobResponsePaged, self).__init__(*args, **kwargs)
    +class IotHubQuotaMetricInfoPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`IotHubQuotaMetricInfo ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[IotHubQuotaMetricInfo]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(IotHubQuotaMetricInfoPaged, self).__init__(*args, **kwargs)
    +class EndpointHealthDataPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`EndpointHealthData ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[EndpointHealthData]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(EndpointHealthDataPaged, self).__init__(*args, **kwargs)
    +class SharedAccessSignatureAuthorizationRulePaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`SharedAccessSignatureAuthorizationRule ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[SharedAccessSignatureAuthorizationRule]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(SharedAccessSignatureAuthorizationRulePaged, self).__init__(*args, **kwargs)
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/__init__.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/__init__.py
    new file mode 100644
    index 000000000000..a30b3dc26f79
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/__init__.py
    @@ -0,0 +1,24 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._operations import Operations
    +from ._iot_hub_resource_operations import IotHubResourceOperations
    +from ._resource_provider_common_operations import ResourceProviderCommonOperations
    +from ._certificates_operations import CertificatesOperations
    +from ._iot_hub_operations import IotHubOperations
    +
    +__all__ = [
    +    'Operations',
    +    'IotHubResourceOperations',
    +    'ResourceProviderCommonOperations',
    +    'CertificatesOperations',
    +    'IotHubOperations',
    +]
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_certificates_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_certificates_operations.py
    new file mode 100644
    index 000000000000..aaade9ffcdee
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_certificates_operations.py
    @@ -0,0 +1,462 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +
    +from .. import models
    +
    +
    +class CertificatesOperations(object):
    +    """CertificatesOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2019-03-22-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2019-03-22-preview"
    +
    +        self.config = config
    +
    +    def list_by_iot_hub(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the certificate list.
    +
    +        Returns the list of certificates.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateListDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateListDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.list_by_iot_hub.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateListDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    list_by_iot_hub.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates'}
    +
    +    def get(
    +            self, resource_group_name, resource_name, certificate_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the certificate.
    +
    +        Returns the certificate.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}'}
    +
    +    def create_or_update(
    +            self, resource_group_name, resource_name, certificate_name, if_match=None, certificate=None, custom_headers=None, raw=False, **operation_config):
    +        """Upload the certificate to the IoT hub.
    +
    +        Adds new or replaces existing certificate.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param if_match: ETag of the Certificate. Do not specify for creating
    +         a brand new certificate. Required to update an existing certificate.
    +        :type if_match: str
    +        :param certificate: base-64 representation of the X509 leaf
    +         certificate .cer file or just .pem file content.
    +        :type certificate: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        certificate_description = models.CertificateBodyDescription(certificate=certificate)
    +
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_description, 'CertificateBodyDescription')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateDescription', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('CertificateDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}'}
    +
    +    def delete(
    +            self, resource_group_name, resource_name, certificate_name, if_match, custom_headers=None, raw=False, **operation_config):
    +        """Delete an X509 certificate.
    +
    +        Deletes an existing X509 certificate or does nothing if it does not
    +        exist.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param if_match: ETag of the Certificate.
    +        :type if_match: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: None or ClientRawResponse if raw=true
    +        :rtype: None or ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 204]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}'}
    +
    +    def generate_verification_code(
    +            self, resource_group_name, resource_name, certificate_name, if_match, custom_headers=None, raw=False, **operation_config):
    +        """Generate verification code for proof of possession flow.
    +
    +        Generates verification code for proof of possession flow. The
    +        verification code will be used to generate a leaf certificate.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param if_match: ETag of the Certificate.
    +        :type if_match: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateWithNonceDescription or ClientRawResponse if
    +         raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateWithNonceDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.generate_verification_code.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateWithNonceDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    generate_verification_code.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}/generateVerificationCode'}
    +
    +    def verify(
    +            self, resource_group_name, resource_name, certificate_name, if_match, certificate=None, custom_headers=None, raw=False, **operation_config):
    +        """Verify certificate's private key possession.
    +
    +        Verifies the certificate's private key possession by providing the leaf
    +        cert issued by the verifying pre uploaded certificate.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param if_match: ETag of the Certificate.
    +        :type if_match: str
    +        :param certificate: base-64 representation of X509 certificate .cer
    +         file or just .pem file content.
    +        :type certificate: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        certificate_verification_body = models.CertificateVerificationDescription(certificate=certificate)
    +
    +        # Construct URL
    +        url = self.verify.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_verification_body, 'CertificateVerificationDescription')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    verify.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}/verify'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_iot_hub_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_iot_hub_operations.py
    new file mode 100644
    index 000000000000..30830c6175c9
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_iot_hub_operations.py
    @@ -0,0 +1,130 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class IotHubOperations(object):
    +    """IotHubOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2019-03-22-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2019-03-22-preview"
    +
    +        self.config = config
    +
    +
    +    def _manual_failover_initial(
    +            self, iot_hub_name, resource_group_name, failover_region, custom_headers=None, raw=False, **operation_config):
    +        failover_input = models.FailoverInput(failover_region=failover_region)
    +
    +        # Construct URL
    +        url = self.manual_failover.metadata['url']
    +        path_format_arguments = {
    +            'iotHubName': self._serialize.url("iot_hub_name", iot_hub_name, 'str'),
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(failover_input, 'FailoverInput')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +
    +    def manual_failover(
    +            self, iot_hub_name, resource_group_name, failover_region, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Manual Failover Fail over.
    +
    +        Perform manual fail over of given hub.
    +
    +        :param iot_hub_name: IotHub to fail over
    +        :type iot_hub_name: str
    +        :param resource_group_name: resource group which Iot Hub belongs to
    +        :type resource_group_name: str
    +        :param failover_region: Region the hub will be failed over to
    +        :type failover_region: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns None or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        raw_result = self._manual_failover_initial(
    +            iot_hub_name=iot_hub_name,
    +            resource_group_name=resource_group_name,
    +            failover_region=failover_region,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            if raw:
    +                client_raw_response = ClientRawResponse(None, response)
    +                return client_raw_response
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    manual_failover.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{iotHubName}/failover'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_iot_hub_resource_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_iot_hub_resource_operations.py
    new file mode 100644
    index 000000000000..631ec6479d81
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_iot_hub_resource_operations.py
    @@ -0,0 +1,1777 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class IotHubResourceOperations(object):
    +    """IotHubResourceOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2019-03-22-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2019-03-22-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the non-security related metadata of an IoT hub.
    +
    +        Get the non-security related metadata of an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: IotHubDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.IotHubDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}'}
    +
    +
    +    def _create_or_update_initial(
    +            self, resource_group_name, resource_name, iot_hub_description, if_match=None, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(iot_hub_description, 'IotHubDescription')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def create_or_update(
    +            self, resource_group_name, resource_name, iot_hub_description, if_match=None, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Create or update the metadata of an IoT hub.
    +
    +        Create or update the metadata of an Iot hub. The usual pattern to
    +        modify a property is to retrieve the IoT hub metadata and security
    +        metadata, and then combine them with the modified values in a new body
    +        to update the IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param iot_hub_description: The IoT hub metadata and security
    +         metadata.
    +        :type iot_hub_description: ~azure.mgmt.iothub.models.IotHubDescription
    +        :param if_match: ETag of the IoT Hub. Do not specify for creating a
    +         brand new IoT Hub. Required to update an existing IoT Hub.
    +        :type if_match: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns IotHubDescription or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.iothub.models.IotHubDescription]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.iothub.models.IotHubDescription]]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        raw_result = self._create_or_update_initial(
    +            resource_group_name=resource_group_name,
    +            resource_name=resource_name,
    +            iot_hub_description=iot_hub_description,
    +            if_match=if_match,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}'}
    +
    +
    +    def _update_initial(
    +            self, resource_group_name, resource_name, tags=None, custom_headers=None, raw=False, **operation_config):
    +        iot_hub_tags = models.TagsResource(tags=tags)
    +
    +        # Construct URL
    +        url = self.update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(iot_hub_tags, 'TagsResource')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def update(
    +            self, resource_group_name, resource_name, tags=None, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Update an existing IoT Hubs tags.
    +
    +        Update an existing IoT Hub tags. to update other fields use the
    +        CreateOrUpdate method.
    +
    +        :param resource_group_name: Resource group identifier.
    +        :type resource_group_name: str
    +        :param resource_name: Name of iot hub to update.
    +        :type resource_name: str
    +        :param tags: Resource tags
    +        :type tags: dict[str, str]
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns IotHubDescription or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.iothub.models.IotHubDescription]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.iothub.models.IotHubDescription]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._update_initial(
    +            resource_group_name=resource_group_name,
    +            resource_name=resource_name,
    +            tags=tags,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}'}
    +
    +
    +    def _delete_initial(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202, 204, 404]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +        if response.status_code == 202:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +        if response.status_code == 404:
    +            deserialized = self._deserialize('ErrorDetails', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def delete(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Delete an IoT hub.
    +
    +        Delete an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns object or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[object] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[object]]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        raw_result = self._delete_initial(
    +            resource_group_name=resource_group_name,
    +            resource_name=resource_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('object', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}'}
    +
    +    def list_by_subscription(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """Get all the IoT hubs in a subscription.
    +
    +        Get all the IoT hubs in a subscription.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of IotHubDescription
    +        :rtype:
    +         ~azure.mgmt.iothub.models.IotHubDescriptionPaged[~azure.mgmt.iothub.models.IotHubDescription]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_subscription.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.IotHubDescriptionPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Devices/IotHubs'}
    +
    +    def list_by_resource_group(
    +            self, resource_group_name, custom_headers=None, raw=False, **operation_config):
    +        """Get all the IoT hubs in a resource group.
    +
    +        Get all the IoT hubs in a resource group.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of IotHubDescription
    +        :rtype:
    +         ~azure.mgmt.iothub.models.IotHubDescriptionPaged[~azure.mgmt.iothub.models.IotHubDescription]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_resource_group.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.IotHubDescriptionPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs'}
    +
    +    def get_stats(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the statistics from an IoT hub.
    +
    +        Get the statistics from an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: RegistryStatistics or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.RegistryStatistics or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_stats.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('RegistryStatistics', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_stats.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/IotHubStats'}
    +
    +    def get_valid_skus(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the list of valid SKUs for an IoT hub.
    +
    +        Get the list of valid SKUs for an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of IotHubSkuDescription
    +        :rtype:
    +         ~azure.mgmt.iothub.models.IotHubSkuDescriptionPaged[~azure.mgmt.iothub.models.IotHubSkuDescription]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_valid_skus.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.IotHubSkuDescriptionPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    get_valid_skus.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/skus'}
    +
    +    def list_event_hub_consumer_groups(
    +            self, resource_group_name, resource_name, event_hub_endpoint_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a list of the consumer groups in the Event Hub-compatible
    +        device-to-cloud endpoint in an IoT hub.
    +
    +        Get a list of the consumer groups in the Event Hub-compatible
    +        device-to-cloud endpoint in an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param event_hub_endpoint_name: The name of the Event Hub-compatible
    +         endpoint.
    +        :type event_hub_endpoint_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of EventHubConsumerGroupInfo
    +        :rtype:
    +         ~azure.mgmt.iothub.models.EventHubConsumerGroupInfoPaged[~azure.mgmt.iothub.models.EventHubConsumerGroupInfo]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_event_hub_consumer_groups.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +                    'eventHubEndpointName': self._serialize.url("event_hub_endpoint_name", event_hub_endpoint_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.EventHubConsumerGroupInfoPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_event_hub_consumer_groups.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/eventHubEndpoints/{eventHubEndpointName}/ConsumerGroups'}
    +
    +    def get_event_hub_consumer_group(
    +            self, resource_group_name, resource_name, event_hub_endpoint_name, name, custom_headers=None, raw=False, **operation_config):
    +        """Get a consumer group from the Event Hub-compatible device-to-cloud
    +        endpoint for an IoT hub.
    +
    +        Get a consumer group from the Event Hub-compatible device-to-cloud
    +        endpoint for an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param event_hub_endpoint_name: The name of the Event Hub-compatible
    +         endpoint in the IoT hub.
    +        :type event_hub_endpoint_name: str
    +        :param name: The name of the consumer group to retrieve.
    +        :type name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EventHubConsumerGroupInfo or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.EventHubConsumerGroupInfo or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_event_hub_consumer_group.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'eventHubEndpointName': self._serialize.url("event_hub_endpoint_name", event_hub_endpoint_name, 'str'),
    +            'name': self._serialize.url("name", name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EventHubConsumerGroupInfo', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_event_hub_consumer_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/eventHubEndpoints/{eventHubEndpointName}/ConsumerGroups/{name}'}
    +
    +    def create_event_hub_consumer_group(
    +            self, resource_group_name, resource_name, event_hub_endpoint_name, name, custom_headers=None, raw=False, **operation_config):
    +        """Add a consumer group to an Event Hub-compatible endpoint in an IoT hub.
    +
    +        Add a consumer group to an Event Hub-compatible endpoint in an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param event_hub_endpoint_name: The name of the Event Hub-compatible
    +         endpoint in the IoT hub.
    +        :type event_hub_endpoint_name: str
    +        :param name: The name of the consumer group to add.
    +        :type name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EventHubConsumerGroupInfo or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.EventHubConsumerGroupInfo or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.create_event_hub_consumer_group.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'eventHubEndpointName': self._serialize.url("event_hub_endpoint_name", event_hub_endpoint_name, 'str'),
    +            'name': self._serialize.url("name", name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EventHubConsumerGroupInfo', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    create_event_hub_consumer_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/eventHubEndpoints/{eventHubEndpointName}/ConsumerGroups/{name}'}
    +
    +    def delete_event_hub_consumer_group(
    +            self, resource_group_name, resource_name, event_hub_endpoint_name, name, custom_headers=None, raw=False, **operation_config):
    +        """Delete a consumer group from an Event Hub-compatible endpoint in an IoT
    +        hub.
    +
    +        Delete a consumer group from an Event Hub-compatible endpoint in an IoT
    +        hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param event_hub_endpoint_name: The name of the Event Hub-compatible
    +         endpoint in the IoT hub.
    +        :type event_hub_endpoint_name: str
    +        :param name: The name of the consumer group to delete.
    +        :type name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: None or ClientRawResponse if raw=true
    +        :rtype: None or ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.delete_event_hub_consumer_group.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'eventHubEndpointName': self._serialize.url("event_hub_endpoint_name", event_hub_endpoint_name, 'str'),
    +            'name': self._serialize.url("name", name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +    delete_event_hub_consumer_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/eventHubEndpoints/{eventHubEndpointName}/ConsumerGroups/{name}'}
    +
    +    def list_jobs(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a list of all the jobs in an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry.
    +
    +        Get a list of all the jobs in an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of JobResponse
    +        :rtype:
    +         ~azure.mgmt.iothub.models.JobResponsePaged[~azure.mgmt.iothub.models.JobResponse]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_jobs.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.JobResponsePaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_jobs.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/jobs'}
    +
    +    def get_job(
    +            self, resource_group_name, resource_name, job_id, custom_headers=None, raw=False, **operation_config):
    +        """Get the details of a job from an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry.
    +
    +        Get the details of a job from an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param job_id: The job identifier.
    +        :type job_id: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: JobResponse or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.JobResponse or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_job.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'jobId': self._serialize.url("job_id", job_id, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('JobResponse', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_job.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/jobs/{jobId}'}
    +
    +    def get_quota_metrics(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the quota metrics for an IoT hub.
    +
    +        Get the quota metrics for an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of IotHubQuotaMetricInfo
    +        :rtype:
    +         ~azure.mgmt.iothub.models.IotHubQuotaMetricInfoPaged[~azure.mgmt.iothub.models.IotHubQuotaMetricInfo]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_quota_metrics.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.IotHubQuotaMetricInfoPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    get_quota_metrics.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/quotaMetrics'}
    +
    +    def get_endpoint_health(
    +            self, resource_group_name, iot_hub_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the health for routing endpoints.
    +
    +        Get the health for routing endpoints.
    +
    +        :param resource_group_name:
    +        :type resource_group_name: str
    +        :param iot_hub_name:
    +        :type iot_hub_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of EndpointHealthData
    +        :rtype:
    +         ~azure.mgmt.iothub.models.EndpointHealthDataPaged[~azure.mgmt.iothub.models.EndpointHealthData]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_endpoint_health.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'iotHubName': self._serialize.url("iot_hub_name", iot_hub_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.EndpointHealthDataPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    get_endpoint_health.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{iotHubName}/routingEndpointsHealth'}
    +
    +    def check_name_availability(
    +            self, name, custom_headers=None, raw=False, **operation_config):
    +        """Check if an IoT hub name is available.
    +
    +        Check if an IoT hub name is available.
    +
    +        :param name: The name of the IoT hub to check.
    +        :type name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: IotHubNameAvailabilityInfo or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.IotHubNameAvailabilityInfo or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        operation_inputs = models.OperationInputs(name=name)
    +
    +        # Construct URL
    +        url = self.check_name_availability.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(operation_inputs, 'OperationInputs')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubNameAvailabilityInfo', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    check_name_availability.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Devices/checkNameAvailability'}
    +
    +    def test_all_routes(
    +            self, input, iot_hub_name, resource_group_name, custom_headers=None, raw=False, **operation_config):
    +        """Test all routes.
    +
    +        Test all routes configured in this Iot Hub.
    +
    +        :param input: Input for testing all routes
    +        :type input: ~azure.mgmt.iothub.models.TestAllRoutesInput
    +        :param iot_hub_name: IotHub to be tested
    +        :type iot_hub_name: str
    +        :param resource_group_name: resource group which Iot Hub belongs to
    +        :type resource_group_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: TestAllRoutesResult or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.TestAllRoutesResult or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.test_all_routes.metadata['url']
    +        path_format_arguments = {
    +            'iotHubName': self._serialize.url("iot_hub_name", iot_hub_name, 'str'),
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(input, 'TestAllRoutesInput')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('TestAllRoutesResult', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    test_all_routes.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{iotHubName}/routing/routes/$testall'}
    +
    +    def test_route(
    +            self, input, iot_hub_name, resource_group_name, custom_headers=None, raw=False, **operation_config):
    +        """Test the new route.
    +
    +        Test the new route for this Iot Hub.
    +
    +        :param input: Route that needs to be tested
    +        :type input: ~azure.mgmt.iothub.models.TestRouteInput
    +        :param iot_hub_name: IotHub to be tested
    +        :type iot_hub_name: str
    +        :param resource_group_name: resource group which Iot Hub belongs to
    +        :type resource_group_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: TestRouteResult or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.TestRouteResult or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.test_route.metadata['url']
    +        path_format_arguments = {
    +            'iotHubName': self._serialize.url("iot_hub_name", iot_hub_name, 'str'),
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(input, 'TestRouteInput')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('TestRouteResult', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    test_route.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{iotHubName}/routing/routes/$testnew'}
    +
    +    def list_keys(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the security metadata for an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security.
    +
    +        Get the security metadata for an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of
    +         SharedAccessSignatureAuthorizationRule
    +        :rtype:
    +         ~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRulePaged[~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRule]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_keys.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.post(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.SharedAccessSignatureAuthorizationRulePaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_keys.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/listkeys'}
    +
    +    def get_keys_for_key_name(
    +            self, resource_group_name, resource_name, key_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a shared access policy by name from an IoT hub. For more
    +        information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security.
    +
    +        Get a shared access policy by name from an IoT hub. For more
    +        information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param key_name: The name of the shared access policy.
    +        :type key_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: SharedAccessSignatureAuthorizationRule or ClientRawResponse
    +         if raw=true
    +        :rtype:
    +         ~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRule or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_keys_for_key_name.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'keyName': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SharedAccessSignatureAuthorizationRule', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_keys_for_key_name.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/IotHubKeys/{keyName}/listkeys'}
    +
    +    def export_devices(
    +            self, resource_group_name, resource_name, export_blob_container_uri, exclude_keys, custom_headers=None, raw=False, **operation_config):
    +        """Exports all the device identities in the IoT hub identity registry to
    +        an Azure Storage blob container. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities.
    +
    +        Exports all the device identities in the IoT hub identity registry to
    +        an Azure Storage blob container. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param export_blob_container_uri: The export blob container URI.
    +        :type export_blob_container_uri: str
    +        :param exclude_keys: The value indicating whether keys should be
    +         excluded during export.
    +        :type exclude_keys: bool
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: JobResponse or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.JobResponse or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        export_devices_parameters = models.ExportDevicesRequest(export_blob_container_uri=export_blob_container_uri, exclude_keys=exclude_keys)
    +
    +        # Construct URL
    +        url = self.export_devices.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(export_devices_parameters, 'ExportDevicesRequest')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('JobResponse', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    export_devices.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/exportDevices'}
    +
    +    def import_devices(
    +            self, resource_group_name, resource_name, input_blob_container_uri, output_blob_container_uri, custom_headers=None, raw=False, **operation_config):
    +        """Import, update, or delete device identities in the IoT hub identity
    +        registry from a blob. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities.
    +
    +        Import, update, or delete device identities in the IoT hub identity
    +        registry from a blob. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param input_blob_container_uri: The input blob container URI.
    +        :type input_blob_container_uri: str
    +        :param output_blob_container_uri: The output blob container URI.
    +        :type output_blob_container_uri: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: JobResponse or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.JobResponse or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        import_devices_parameters = models.ImportDevicesRequest(input_blob_container_uri=input_blob_container_uri, output_blob_container_uri=output_blob_container_uri)
    +
    +        # Construct URL
    +        url = self.import_devices.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(import_devices_parameters, 'ImportDevicesRequest')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('JobResponse', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    import_devices.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/importDevices'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_operations.py
    new file mode 100644
    index 000000000000..e05cdc550f92
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_operations.py
    @@ -0,0 +1,100 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +
    +from .. import models
    +
    +
    +class Operations(object):
    +    """Operations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2019-03-22-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2019-03-22-preview"
    +
    +        self.config = config
    +
    +    def list(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """Lists all of the available IoT Hub REST API operations.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of Operation
    +        :rtype:
    +         ~azure.mgmt.iothub.models.OperationPaged[~azure.mgmt.iothub.models.Operation]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list.metadata['url']
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.OperationPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list.metadata = {'url': '/providers/Microsoft.Devices/operations'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_resource_provider_common_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_resource_provider_common_operations.py
    new file mode 100644
    index 000000000000..fe5f959b5b3c
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/operations/_resource_provider_common_operations.py
    @@ -0,0 +1,96 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +
    +from .. import models
    +
    +
    +class ResourceProviderCommonOperations(object):
    +    """ResourceProviderCommonOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2019-03-22-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2019-03-22-preview"
    +
    +        self.config = config
    +
    +    def get_subscription_quota(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """Get the number of iot hubs in the subscription.
    +
    +        Get the number of free and paid iot hubs in the subscription.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: UserSubscriptionQuotaListResult or ClientRawResponse if
    +         raw=true
    +        :rtype: ~azure.mgmt.iothub.models.UserSubscriptionQuotaListResult or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_subscription_quota.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('UserSubscriptionQuotaListResult', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_subscription_quota.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Devices/usages'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/version.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/version.py
    new file mode 100644
    index 000000000000..0a72a39badd5
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_03_22_preview/version.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "0.8.2"
    +
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/__init__.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/__init__.py
    new file mode 100644
    index 000000000000..867dea34192d
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/__init__.py
    @@ -0,0 +1,19 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._configuration import IotHubClientConfiguration
    +from ._iot_hub_client import IotHubClient
    +__all__ = ['IotHubClient', 'IotHubClientConfiguration']
    +
    +from .version import VERSION
    +
    +__version__ = VERSION
    +
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/_configuration.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/_configuration.py
    new file mode 100644
    index 000000000000..b2e8885bcfe2
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/_configuration.py
    @@ -0,0 +1,48 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +from msrestazure import AzureConfiguration
    +
    +from .version import VERSION
    +
    +
    +class IotHubClientConfiguration(AzureConfiguration):
    +    """Configuration for IotHubClient
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    :param subscription_id: The subscription identifier.
    +    :type subscription_id: str
    +    :param str base_url: Service URL
    +    """
    +
    +    def __init__(
    +            self, credentials, subscription_id, base_url=None):
    +
    +        if credentials is None:
    +            raise ValueError("Parameter 'credentials' must not be None.")
    +        if subscription_id is None:
    +            raise ValueError("Parameter 'subscription_id' must not be None.")
    +        if not base_url:
    +            base_url = 'https://management.azure.com'
    +
    +        super(IotHubClientConfiguration, self).__init__(base_url)
    +
    +        # Starting Autorest.Python 4.0.64, make connection pool activated by default
    +        self.keep_alive = True
    +
    +        self.add_user_agent('azure-mgmt-iothub/{}'.format(VERSION))
    +        self.add_user_agent('Azure-SDK-For-Python')
    +
    +        self.credentials = credentials
    +        self.subscription_id = subscription_id
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/_iot_hub_client.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/_iot_hub_client.py
    new file mode 100644
    index 000000000000..a10d9e118ffe
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/_iot_hub_client.py
    @@ -0,0 +1,69 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.service_client import SDKClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration import IotHubClientConfiguration
    +from .operations import Operations
    +from .operations import IotHubResourceOperations
    +from .operations import ResourceProviderCommonOperations
    +from .operations import CertificatesOperations
    +from .operations import IotHubOperations
    +from . import models
    +
    +
    +class IotHubClient(SDKClient):
    +    """Use this API to manage the IoT hubs in your Azure subscription.
    +
    +    :ivar config: Configuration for client.
    +    :vartype config: IotHubClientConfiguration
    +
    +    :ivar operations: Operations operations
    +    :vartype operations: azure.mgmt.iothub.operations.Operations
    +    :ivar iot_hub_resource: IotHubResource operations
    +    :vartype iot_hub_resource: azure.mgmt.iothub.operations.IotHubResourceOperations
    +    :ivar resource_provider_common: ResourceProviderCommon operations
    +    :vartype resource_provider_common: azure.mgmt.iothub.operations.ResourceProviderCommonOperations
    +    :ivar certificates: Certificates operations
    +    :vartype certificates: azure.mgmt.iothub.operations.CertificatesOperations
    +    :ivar iot_hub: IotHub operations
    +    :vartype iot_hub: azure.mgmt.iothub.operations.IotHubOperations
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    :param subscription_id: The subscription identifier.
    +    :type subscription_id: str
    +    :param str base_url: Service URL
    +    """
    +
    +    def __init__(
    +            self, credentials, subscription_id, base_url=None):
    +
    +        self.config = IotHubClientConfiguration(credentials, subscription_id, base_url)
    +        super(IotHubClient, self).__init__(self.config.credentials, self.config)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '2019-07-01-preview'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +        self.operations = Operations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.iot_hub_resource = IotHubResourceOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.resource_provider_common = ResourceProviderCommonOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.certificates = CertificatesOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    +        self.iot_hub = IotHubOperations(
    +            self._client, self.config, self._serialize, self._deserialize)
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/__init__.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/__init__.py
    new file mode 100644
    index 000000000000..855c564865d3
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/__init__.py
    @@ -0,0 +1,242 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +try:
    +    from ._models_py3 import CertificateBodyDescription
    +    from ._models_py3 import CertificateDescription
    +    from ._models_py3 import CertificateListDescription
    +    from ._models_py3 import CertificateProperties
    +    from ._models_py3 import CertificatePropertiesWithNonce
    +    from ._models_py3 import CertificateVerificationDescription
    +    from ._models_py3 import CertificateWithNonceDescription
    +    from ._models_py3 import CloudToDeviceProperties
    +    from ._models_py3 import EndpointHealthData
    +    from ._models_py3 import EnrichmentProperties
    +    from ._models_py3 import ErrorDetails, ErrorDetailsException
    +    from ._models_py3 import EventHubConsumerGroupInfo
    +    from ._models_py3 import EventHubProperties
    +    from ._models_py3 import ExportDevicesRequest
    +    from ._models_py3 import FailoverInput
    +    from ._models_py3 import FallbackRouteProperties
    +    from ._models_py3 import FeedbackProperties
    +    from ._models_py3 import ImportDevicesRequest
    +    from ._models_py3 import IotHubCapacity
    +    from ._models_py3 import IotHubDescription
    +    from ._models_py3 import IotHubLocationDescription
    +    from ._models_py3 import IotHubNameAvailabilityInfo
    +    from ._models_py3 import IotHubProperties
    +    from ._models_py3 import IotHubPropertiesDeviceStreams
    +    from ._models_py3 import IotHubQuotaMetricInfo
    +    from ._models_py3 import IotHubSkuDescription
    +    from ._models_py3 import IotHubSkuInfo
    +    from ._models_py3 import IpFilterRule
    +    from ._models_py3 import JobResponse
    +    from ._models_py3 import MatchedRoute
    +    from ._models_py3 import MessagingEndpointProperties
    +    from ._models_py3 import Name
    +    from ._models_py3 import Operation
    +    from ._models_py3 import OperationDisplay
    +    from ._models_py3 import OperationInputs
    +    from ._models_py3 import RegistryStatistics
    +    from ._models_py3 import Resource
    +    from ._models_py3 import RouteCompilationError
    +    from ._models_py3 import RouteErrorPosition
    +    from ._models_py3 import RouteErrorRange
    +    from ._models_py3 import RouteProperties
    +    from ._models_py3 import RoutingEndpoints
    +    from ._models_py3 import RoutingEventHubProperties
    +    from ._models_py3 import RoutingMessage
    +    from ._models_py3 import RoutingProperties
    +    from ._models_py3 import RoutingServiceBusQueueEndpointProperties
    +    from ._models_py3 import RoutingServiceBusTopicEndpointProperties
    +    from ._models_py3 import RoutingStorageContainerProperties
    +    from ._models_py3 import RoutingTwin
    +    from ._models_py3 import RoutingTwinProperties
    +    from ._models_py3 import SharedAccessSignatureAuthorizationRule
    +    from ._models_py3 import StorageEndpointProperties
    +    from ._models_py3 import TagsResource
    +    from ._models_py3 import TestAllRoutesInput
    +    from ._models_py3 import TestAllRoutesResult
    +    from ._models_py3 import TestRouteInput
    +    from ._models_py3 import TestRouteResult
    +    from ._models_py3 import TestRouteResultDetails
    +    from ._models_py3 import UserSubscriptionQuota
    +    from ._models_py3 import UserSubscriptionQuotaListResult
    +except (SyntaxError, ImportError):
    +    from ._models import CertificateBodyDescription
    +    from ._models import CertificateDescription
    +    from ._models import CertificateListDescription
    +    from ._models import CertificateProperties
    +    from ._models import CertificatePropertiesWithNonce
    +    from ._models import CertificateVerificationDescription
    +    from ._models import CertificateWithNonceDescription
    +    from ._models import CloudToDeviceProperties
    +    from ._models import EndpointHealthData
    +    from ._models import EnrichmentProperties
    +    from ._models import ErrorDetails, ErrorDetailsException
    +    from ._models import EventHubConsumerGroupInfo
    +    from ._models import EventHubProperties
    +    from ._models import ExportDevicesRequest
    +    from ._models import FailoverInput
    +    from ._models import FallbackRouteProperties
    +    from ._models import FeedbackProperties
    +    from ._models import ImportDevicesRequest
    +    from ._models import IotHubCapacity
    +    from ._models import IotHubDescription
    +    from ._models import IotHubLocationDescription
    +    from ._models import IotHubNameAvailabilityInfo
    +    from ._models import IotHubProperties
    +    from ._models import IotHubPropertiesDeviceStreams
    +    from ._models import IotHubQuotaMetricInfo
    +    from ._models import IotHubSkuDescription
    +    from ._models import IotHubSkuInfo
    +    from ._models import IpFilterRule
    +    from ._models import JobResponse
    +    from ._models import MatchedRoute
    +    from ._models import MessagingEndpointProperties
    +    from ._models import Name
    +    from ._models import Operation
    +    from ._models import OperationDisplay
    +    from ._models import OperationInputs
    +    from ._models import RegistryStatistics
    +    from ._models import Resource
    +    from ._models import RouteCompilationError
    +    from ._models import RouteErrorPosition
    +    from ._models import RouteErrorRange
    +    from ._models import RouteProperties
    +    from ._models import RoutingEndpoints
    +    from ._models import RoutingEventHubProperties
    +    from ._models import RoutingMessage
    +    from ._models import RoutingProperties
    +    from ._models import RoutingServiceBusQueueEndpointProperties
    +    from ._models import RoutingServiceBusTopicEndpointProperties
    +    from ._models import RoutingStorageContainerProperties
    +    from ._models import RoutingTwin
    +    from ._models import RoutingTwinProperties
    +    from ._models import SharedAccessSignatureAuthorizationRule
    +    from ._models import StorageEndpointProperties
    +    from ._models import TagsResource
    +    from ._models import TestAllRoutesInput
    +    from ._models import TestAllRoutesResult
    +    from ._models import TestRouteInput
    +    from ._models import TestRouteResult
    +    from ._models import TestRouteResultDetails
    +    from ._models import UserSubscriptionQuota
    +    from ._models import UserSubscriptionQuotaListResult
    +from ._paged_models import EndpointHealthDataPaged
    +from ._paged_models import EventHubConsumerGroupInfoPaged
    +from ._paged_models import IotHubDescriptionPaged
    +from ._paged_models import IotHubQuotaMetricInfoPaged
    +from ._paged_models import IotHubSkuDescriptionPaged
    +from ._paged_models import JobResponsePaged
    +from ._paged_models import OperationPaged
    +from ._paged_models import SharedAccessSignatureAuthorizationRulePaged
    +from ._iot_hub_client_enums import (
    +    AccessRights,
    +    IpFilterActionType,
    +    RoutingSource,
    +    Capabilities,
    +    IotHubReplicaRoleType,
    +    IotHubSku,
    +    IotHubSkuTier,
    +    EndpointHealthStatus,
    +    JobType,
    +    JobStatus,
    +    IotHubScaleType,
    +    IotHubNameUnavailabilityReason,
    +    TestResultStatus,
    +    RouteErrorSeverity,
    +)
    +
    +__all__ = [
    +    'CertificateBodyDescription',
    +    'CertificateDescription',
    +    'CertificateListDescription',
    +    'CertificateProperties',
    +    'CertificatePropertiesWithNonce',
    +    'CertificateVerificationDescription',
    +    'CertificateWithNonceDescription',
    +    'CloudToDeviceProperties',
    +    'EndpointHealthData',
    +    'EnrichmentProperties',
    +    'ErrorDetails', 'ErrorDetailsException',
    +    'EventHubConsumerGroupInfo',
    +    'EventHubProperties',
    +    'ExportDevicesRequest',
    +    'FailoverInput',
    +    'FallbackRouteProperties',
    +    'FeedbackProperties',
    +    'ImportDevicesRequest',
    +    'IotHubCapacity',
    +    'IotHubDescription',
    +    'IotHubLocationDescription',
    +    'IotHubNameAvailabilityInfo',
    +    'IotHubProperties',
    +    'IotHubPropertiesDeviceStreams',
    +    'IotHubQuotaMetricInfo',
    +    'IotHubSkuDescription',
    +    'IotHubSkuInfo',
    +    'IpFilterRule',
    +    'JobResponse',
    +    'MatchedRoute',
    +    'MessagingEndpointProperties',
    +    'Name',
    +    'Operation',
    +    'OperationDisplay',
    +    'OperationInputs',
    +    'RegistryStatistics',
    +    'Resource',
    +    'RouteCompilationError',
    +    'RouteErrorPosition',
    +    'RouteErrorRange',
    +    'RouteProperties',
    +    'RoutingEndpoints',
    +    'RoutingEventHubProperties',
    +    'RoutingMessage',
    +    'RoutingProperties',
    +    'RoutingServiceBusQueueEndpointProperties',
    +    'RoutingServiceBusTopicEndpointProperties',
    +    'RoutingStorageContainerProperties',
    +    'RoutingTwin',
    +    'RoutingTwinProperties',
    +    'SharedAccessSignatureAuthorizationRule',
    +    'StorageEndpointProperties',
    +    'TagsResource',
    +    'TestAllRoutesInput',
    +    'TestAllRoutesResult',
    +    'TestRouteInput',
    +    'TestRouteResult',
    +    'TestRouteResultDetails',
    +    'UserSubscriptionQuota',
    +    'UserSubscriptionQuotaListResult',
    +    'OperationPaged',
    +    'IotHubDescriptionPaged',
    +    'IotHubSkuDescriptionPaged',
    +    'EventHubConsumerGroupInfoPaged',
    +    'JobResponsePaged',
    +    'IotHubQuotaMetricInfoPaged',
    +    'EndpointHealthDataPaged',
    +    'SharedAccessSignatureAuthorizationRulePaged',
    +    'AccessRights',
    +    'IpFilterActionType',
    +    'RoutingSource',
    +    'Capabilities',
    +    'IotHubReplicaRoleType',
    +    'IotHubSku',
    +    'IotHubSkuTier',
    +    'EndpointHealthStatus',
    +    'JobType',
    +    'JobStatus',
    +    'IotHubScaleType',
    +    'IotHubNameUnavailabilityReason',
    +    'TestResultStatus',
    +    'RouteErrorSeverity',
    +]
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/_iot_hub_client_enums.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/_iot_hub_client_enums.py
    new file mode 100644
    index 000000000000..62003c4b182b
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/_iot_hub_client_enums.py
    @@ -0,0 +1,135 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from enum import Enum
    +
    +
    +class AccessRights(str, Enum):
    +
    +    registry_read = "RegistryRead"
    +    registry_write = "RegistryWrite"
    +    service_connect = "ServiceConnect"
    +    device_connect = "DeviceConnect"
    +    registry_read_registry_write = "RegistryRead, RegistryWrite"
    +    registry_read_service_connect = "RegistryRead, ServiceConnect"
    +    registry_read_device_connect = "RegistryRead, DeviceConnect"
    +    registry_write_service_connect = "RegistryWrite, ServiceConnect"
    +    registry_write_device_connect = "RegistryWrite, DeviceConnect"
    +    service_connect_device_connect = "ServiceConnect, DeviceConnect"
    +    registry_read_registry_write_service_connect = "RegistryRead, RegistryWrite, ServiceConnect"
    +    registry_read_registry_write_device_connect = "RegistryRead, RegistryWrite, DeviceConnect"
    +    registry_read_service_connect_device_connect = "RegistryRead, ServiceConnect, DeviceConnect"
    +    registry_write_service_connect_device_connect = "RegistryWrite, ServiceConnect, DeviceConnect"
    +    registry_read_registry_write_service_connect_device_connect = "RegistryRead, RegistryWrite, ServiceConnect, DeviceConnect"
    +
    +
    +class IpFilterActionType(str, Enum):
    +
    +    accept = "Accept"
    +    reject = "Reject"
    +
    +
    +class RoutingSource(str, Enum):
    +
    +    invalid = "Invalid"
    +    device_messages = "DeviceMessages"
    +    twin_change_events = "TwinChangeEvents"
    +    device_lifecycle_events = "DeviceLifecycleEvents"
    +    device_job_lifecycle_events = "DeviceJobLifecycleEvents"
    +    digital_twin_change_events = "DigitalTwinChangeEvents"
    +
    +
    +class Capabilities(str, Enum):
    +
    +    none = "None"
    +    device_management = "DeviceManagement"
    +
    +
    +class IotHubReplicaRoleType(str, Enum):
    +
    +    primary = "primary"
    +    secondary = "secondary"
    +
    +
    +class IotHubSku(str, Enum):
    +
    +    f1 = "F1"
    +    s1 = "S1"
    +    s2 = "S2"
    +    s3 = "S3"
    +    b1 = "B1"
    +    b2 = "B2"
    +    b3 = "B3"
    +
    +
    +class IotHubSkuTier(str, Enum):
    +
    +    free = "Free"
    +    standard = "Standard"
    +    basic = "Basic"
    +
    +
    +class EndpointHealthStatus(str, Enum):
    +
    +    unknown = "unknown"
    +    healthy = "healthy"
    +    unhealthy = "unhealthy"
    +    dead = "dead"
    +
    +
    +class JobType(str, Enum):
    +
    +    unknown = "unknown"
    +    export = "export"
    +    import_enum = "import"
    +    backup = "backup"
    +    read_device_properties = "readDeviceProperties"
    +    write_device_properties = "writeDeviceProperties"
    +    update_device_configuration = "updateDeviceConfiguration"
    +    reboot_device = "rebootDevice"
    +    factory_reset_device = "factoryResetDevice"
    +    firmware_update = "firmwareUpdate"
    +
    +
    +class JobStatus(str, Enum):
    +
    +    unknown = "unknown"
    +    enqueued = "enqueued"
    +    running = "running"
    +    completed = "completed"
    +    failed = "failed"
    +    cancelled = "cancelled"
    +
    +
    +class IotHubScaleType(str, Enum):
    +
    +    automatic = "Automatic"
    +    manual = "Manual"
    +    none = "None"
    +
    +
    +class IotHubNameUnavailabilityReason(str, Enum):
    +
    +    invalid = "Invalid"
    +    already_exists = "AlreadyExists"
    +
    +
    +class TestResultStatus(str, Enum):
    +
    +    undefined = "undefined"
    +    false = "false"
    +    true = "true"
    +
    +
    +class RouteErrorSeverity(str, Enum):
    +
    +    error = "error"
    +    warning = "warning"
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/_models.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/_models.py
    new file mode 100644
    index 000000000000..6953a265c6b4
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/_models.py
    @@ -0,0 +1,2107 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from msrest.exceptions import HttpOperationError
    +
    +
    +class CertificateBodyDescription(Model):
    +    """The JSON-serialized X509 Certificate.
    +
    +    :param certificate: base-64 representation of the X509 leaf certificate
    +     .cer file or just .pem file content.
    +    :type certificate: str
    +    """
    +
    +    _attribute_map = {
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateBodyDescription, self).__init__(**kwargs)
    +        self.certificate = kwargs.get('certificate', None)
    +
    +
    +class CertificateDescription(Model):
    +    """The X509 Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.CertificateProperties
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The name of the certificate.
    +    :vartype name: str
    +    :ivar etag: The entity tag.
    +    :vartype etag: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'etag': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'CertificateProperties'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateDescription, self).__init__(**kwargs)
    +        self.properties = kwargs.get('properties', None)
    +        self.id = None
    +        self.name = None
    +        self.etag = None
    +        self.type = None
    +
    +
    +class CertificateListDescription(Model):
    +    """The JSON-serialized array of Certificate objects.
    +
    +    :param value: The array of Certificate objects.
    +    :type value: list[~azure.mgmt.iothub.models.CertificateDescription]
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateDescription]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateListDescription, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +
    +
    +class CertificateProperties(Model):
    +    """The description of an X509 CA Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar subject: The certificate's subject name.
    +    :vartype subject: str
    +    :ivar expiry: The certificate's expiration date and time.
    +    :vartype expiry: datetime
    +    :ivar thumbprint: The certificate's thumbprint.
    +    :vartype thumbprint: str
    +    :ivar is_verified: Determines whether certificate has been verified.
    +    :vartype is_verified: bool
    +    :ivar created: The certificate's create date and time.
    +    :vartype created: datetime
    +    :ivar updated: The certificate's last update date and time.
    +    :vartype updated: datetime
    +    :param certificate: The certificate content
    +    :type certificate: str
    +    """
    +
    +    _validation = {
    +        'subject': {'readonly': True},
    +        'expiry': {'readonly': True},
    +        'thumbprint': {'readonly': True},
    +        'is_verified': {'readonly': True},
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'expiry': {'key': 'expiry', 'type': 'rfc-1123'},
    +        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
    +        'is_verified': {'key': 'isVerified', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'rfc-1123'},
    +        'updated': {'key': 'updated', 'type': 'rfc-1123'},
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateProperties, self).__init__(**kwargs)
    +        self.subject = None
    +        self.expiry = None
    +        self.thumbprint = None
    +        self.is_verified = None
    +        self.created = None
    +        self.updated = None
    +        self.certificate = kwargs.get('certificate', None)
    +
    +
    +class CertificatePropertiesWithNonce(Model):
    +    """The description of an X509 CA Certificate including the challenge nonce
    +    issued for the Proof-Of-Possession flow.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar subject: The certificate's subject name.
    +    :vartype subject: str
    +    :ivar expiry: The certificate's expiration date and time.
    +    :vartype expiry: datetime
    +    :ivar thumbprint: The certificate's thumbprint.
    +    :vartype thumbprint: str
    +    :ivar is_verified: Determines whether certificate has been verified.
    +    :vartype is_verified: bool
    +    :ivar created: The certificate's create date and time.
    +    :vartype created: datetime
    +    :ivar updated: The certificate's last update date and time.
    +    :vartype updated: datetime
    +    :ivar verification_code: The certificate's verification code that will be
    +     used for proof of possession.
    +    :vartype verification_code: str
    +    :ivar certificate: The certificate content
    +    :vartype certificate: str
    +    """
    +
    +    _validation = {
    +        'subject': {'readonly': True},
    +        'expiry': {'readonly': True},
    +        'thumbprint': {'readonly': True},
    +        'is_verified': {'readonly': True},
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'verification_code': {'readonly': True},
    +        'certificate': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'expiry': {'key': 'expiry', 'type': 'rfc-1123'},
    +        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
    +        'is_verified': {'key': 'isVerified', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'rfc-1123'},
    +        'updated': {'key': 'updated', 'type': 'rfc-1123'},
    +        'verification_code': {'key': 'verificationCode', 'type': 'str'},
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificatePropertiesWithNonce, self).__init__(**kwargs)
    +        self.subject = None
    +        self.expiry = None
    +        self.thumbprint = None
    +        self.is_verified = None
    +        self.created = None
    +        self.updated = None
    +        self.verification_code = None
    +        self.certificate = None
    +
    +
    +class CertificateVerificationDescription(Model):
    +    """The JSON-serialized leaf certificate.
    +
    +    :param certificate: base-64 representation of X509 certificate .cer file
    +     or just .pem file content.
    +    :type certificate: str
    +    """
    +
    +    _attribute_map = {
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateVerificationDescription, self).__init__(**kwargs)
    +        self.certificate = kwargs.get('certificate', None)
    +
    +
    +class CertificateWithNonceDescription(Model):
    +    """The X509 Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.CertificatePropertiesWithNonce
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The name of the certificate.
    +    :vartype name: str
    +    :ivar etag: The entity tag.
    +    :vartype etag: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'etag': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'CertificatePropertiesWithNonce'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateWithNonceDescription, self).__init__(**kwargs)
    +        self.properties = kwargs.get('properties', None)
    +        self.id = None
    +        self.name = None
    +        self.etag = None
    +        self.type = None
    +
    +
    +class CloudError(Model):
    +    """CloudError.
    +    """
    +
    +    _attribute_map = {
    +    }
    +
    +
    +class CloudToDeviceProperties(Model):
    +    """The IoT hub cloud-to-device messaging properties.
    +
    +    :param max_delivery_count: The max delivery count for cloud-to-device
    +     messages in the device queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type max_delivery_count: int
    +    :param default_ttl_as_iso8601: The default time to live for
    +     cloud-to-device messages in the device queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type default_ttl_as_iso8601: timedelta
    +    :param feedback:
    +    :type feedback: ~azure.mgmt.iothub.models.FeedbackProperties
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +        'default_ttl_as_iso8601': {'key': 'defaultTtlAsIso8601', 'type': 'duration'},
    +        'feedback': {'key': 'feedback', 'type': 'FeedbackProperties'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CloudToDeviceProperties, self).__init__(**kwargs)
    +        self.max_delivery_count = kwargs.get('max_delivery_count', None)
    +        self.default_ttl_as_iso8601 = kwargs.get('default_ttl_as_iso8601', None)
    +        self.feedback = kwargs.get('feedback', None)
    +
    +
    +class EndpointHealthData(Model):
    +    """The health data for an endpoint.
    +
    +    :param endpoint_id: Id of the endpoint
    +    :type endpoint_id: str
    +    :param health_status: Health statuses have following meanings. The
    +     'healthy' status shows that the endpoint is accepting messages as
    +     expected. The 'unhealthy' status shows that the endpoint is not accepting
    +     messages as expected and IoT Hub is retrying to send data to this
    +     endpoint. The status of an unhealthy endpoint will be updated to healthy
    +     when IoT Hub has established an eventually consistent state of health. The
    +     'dead' status shows that the endpoint is not accepting messages, after IoT
    +     Hub retried sending messages for the retrial period. See IoT Hub metrics
    +     to identify errors and monitor issues with endpoints. The 'unknown' status
    +     shows that the IoT Hub has not established a connection with the endpoint.
    +     No messages have been delivered to or rejected from this endpoint.
    +     Possible values include: 'unknown', 'healthy', 'unhealthy', 'dead'
    +    :type health_status: str or ~azure.mgmt.iothub.models.EndpointHealthStatus
    +    """
    +
    +    _attribute_map = {
    +        'endpoint_id': {'key': 'endpointId', 'type': 'str'},
    +        'health_status': {'key': 'healthStatus', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EndpointHealthData, self).__init__(**kwargs)
    +        self.endpoint_id = kwargs.get('endpoint_id', None)
    +        self.health_status = kwargs.get('health_status', None)
    +
    +
    +class EnrichmentProperties(Model):
    +    """The properties of an enrichment that your IoT hub applies to messages
    +    delivered to endpoints.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key: Required. The key or name for the enrichment property.
    +    :type key: str
    +    :param value: Required. The value for the enrichment property.
    +    :type value: str
    +    :param endpoint_names: Required. The list of endpoints for which the
    +     enrichment is applied to the message.
    +    :type endpoint_names: list[str]
    +    """
    +
    +    _validation = {
    +        'key': {'required': True},
    +        'value': {'required': True},
    +        'endpoint_names': {'required': True, 'min_items': 1},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EnrichmentProperties, self).__init__(**kwargs)
    +        self.key = kwargs.get('key', None)
    +        self.value = kwargs.get('value', None)
    +        self.endpoint_names = kwargs.get('endpoint_names', None)
    +
    +
    +class ErrorDetails(Model):
    +    """Error details.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: The error code.
    +    :vartype code: str
    +    :ivar http_status_code: The HTTP status code.
    +    :vartype http_status_code: str
    +    :ivar message: The error message.
    +    :vartype message: str
    +    :ivar details: The error details.
    +    :vartype details: str
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'http_status_code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'details': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'http_status_code': {'key': 'httpStatusCode', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'details': {'key': 'details', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ErrorDetails, self).__init__(**kwargs)
    +        self.code = None
    +        self.http_status_code = None
    +        self.message = None
    +        self.details = None
    +
    +
    +class ErrorDetailsException(HttpOperationError):
    +    """Server responsed with exception of type: 'ErrorDetails'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, deserialize, response, *args):
    +
    +        super(ErrorDetailsException, self).__init__(deserialize, response, 'ErrorDetails', *args)
    +
    +
    +class EventHubConsumerGroupInfo(Model):
    +    """The properties of the EventHubConsumerGroupInfo object.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties: The tags.
    +    :type properties: dict[str, str]
    +    :ivar id: The Event Hub-compatible consumer group identifier.
    +    :vartype id: str
    +    :ivar name: The Event Hub-compatible consumer group name.
    +    :vartype name: str
    +    :ivar type: the resource type.
    +    :vartype type: str
    +    :ivar etag: The etag.
    +    :vartype etag: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'etag': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': '{str}'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EventHubConsumerGroupInfo, self).__init__(**kwargs)
    +        self.properties = kwargs.get('properties', None)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.etag = None
    +
    +
    +class EventHubProperties(Model):
    +    """The properties of the provisioned Event Hub-compatible endpoint used by the
    +    IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param retention_time_in_days: The retention time for device-to-cloud
    +     messages in days. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages
    +    :type retention_time_in_days: long
    +    :param partition_count: The number of partitions for receiving
    +     device-to-cloud messages in the Event Hub-compatible endpoint. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages.
    +    :type partition_count: int
    +    :ivar partition_ids: The partition ids in the Event Hub-compatible
    +     endpoint.
    +    :vartype partition_ids: list[str]
    +    :ivar path: The Event Hub-compatible name.
    +    :vartype path: str
    +    :ivar endpoint: The Event Hub-compatible endpoint.
    +    :vartype endpoint: str
    +    """
    +
    +    _validation = {
    +        'partition_ids': {'readonly': True},
    +        'path': {'readonly': True},
    +        'endpoint': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'retention_time_in_days': {'key': 'retentionTimeInDays', 'type': 'long'},
    +        'partition_count': {'key': 'partitionCount', 'type': 'int'},
    +        'partition_ids': {'key': 'partitionIds', 'type': '[str]'},
    +        'path': {'key': 'path', 'type': 'str'},
    +        'endpoint': {'key': 'endpoint', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(EventHubProperties, self).__init__(**kwargs)
    +        self.retention_time_in_days = kwargs.get('retention_time_in_days', None)
    +        self.partition_count = kwargs.get('partition_count', None)
    +        self.partition_ids = None
    +        self.path = None
    +        self.endpoint = None
    +
    +
    +class ExportDevicesRequest(Model):
    +    """Use to provide parameters when requesting an export of all devices in the
    +    IoT hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param export_blob_container_uri: Required. The export blob container URI.
    +    :type export_blob_container_uri: str
    +    :param exclude_keys: Required. The value indicating whether keys should be
    +     excluded during export.
    +    :type exclude_keys: bool
    +    """
    +
    +    _validation = {
    +        'export_blob_container_uri': {'required': True},
    +        'exclude_keys': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'export_blob_container_uri': {'key': 'exportBlobContainerUri', 'type': 'str'},
    +        'exclude_keys': {'key': 'excludeKeys', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ExportDevicesRequest, self).__init__(**kwargs)
    +        self.export_blob_container_uri = kwargs.get('export_blob_container_uri', None)
    +        self.exclude_keys = kwargs.get('exclude_keys', None)
    +
    +
    +class FailoverInput(Model):
    +    """Use to provide failover region when requesting manual Failover for a hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param failover_region: Required. Region the hub will be failed over to
    +    :type failover_region: str
    +    """
    +
    +    _validation = {
    +        'failover_region': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'failover_region': {'key': 'failoverRegion', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(FailoverInput, self).__init__(**kwargs)
    +        self.failover_region = kwargs.get('failover_region', None)
    +
    +
    +class FallbackRouteProperties(Model):
    +    """The properties of the fallback route. IoT Hub uses these properties when it
    +    routes messages to the fallback endpoint.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: The name of the route. The name can only include alphanumeric
    +     characters, periods, underscores, hyphens, has a maximum length of 64
    +     characters, and must be unique.
    +    :type name: str
    +    :ivar source: Required. The source to which the routing rule is to be
    +     applied to. For example, DeviceMessages. Default value: "DeviceMessages" .
    +    :vartype source: str
    +    :param condition: The condition which is evaluated in order to apply the
    +     fallback route. If the condition is not provided it will evaluate to true
    +     by default. For grammar, See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
    +    :type condition: str
    +    :param endpoint_names: Required. The list of endpoints to which the
    +     messages that satisfy the condition are routed to. Currently only 1
    +     endpoint is allowed.
    +    :type endpoint_names: list[str]
    +    :param is_enabled: Required. Used to specify whether the fallback route is
    +     enabled.
    +    :type is_enabled: bool
    +    """
    +
    +    _validation = {
    +        'source': {'required': True, 'constant': True},
    +        'endpoint_names': {'required': True, 'max_items': 1, 'min_items': 1},
    +        'is_enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'condition': {'key': 'condition', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +        'is_enabled': {'key': 'isEnabled', 'type': 'bool'},
    +    }
    +
    +    source = "DeviceMessages"
    +
    +    def __init__(self, **kwargs):
    +        super(FallbackRouteProperties, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.condition = kwargs.get('condition', None)
    +        self.endpoint_names = kwargs.get('endpoint_names', None)
    +        self.is_enabled = kwargs.get('is_enabled', None)
    +
    +
    +class FeedbackProperties(Model):
    +    """The properties of the feedback queue for cloud-to-device messages.
    +
    +    :param lock_duration_as_iso8601: The lock duration for the feedback queue.
    +     See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type lock_duration_as_iso8601: timedelta
    +    :param ttl_as_iso8601: The period of time for which a message is available
    +     to consume before it is expired by the IoT hub. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type ttl_as_iso8601: timedelta
    +    :param max_delivery_count: The number of times the IoT hub attempts to
    +     deliver a message on the feedback queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type max_delivery_count: int
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lock_duration_as_iso8601': {'key': 'lockDurationAsIso8601', 'type': 'duration'},
    +        'ttl_as_iso8601': {'key': 'ttlAsIso8601', 'type': 'duration'},
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(FeedbackProperties, self).__init__(**kwargs)
    +        self.lock_duration_as_iso8601 = kwargs.get('lock_duration_as_iso8601', None)
    +        self.ttl_as_iso8601 = kwargs.get('ttl_as_iso8601', None)
    +        self.max_delivery_count = kwargs.get('max_delivery_count', None)
    +
    +
    +class ImportDevicesRequest(Model):
    +    """Use to provide parameters when requesting an import of all devices in the
    +    hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param input_blob_container_uri: Required. The input blob container URI.
    +    :type input_blob_container_uri: str
    +    :param output_blob_container_uri: Required. The output blob container URI.
    +    :type output_blob_container_uri: str
    +    """
    +
    +    _validation = {
    +        'input_blob_container_uri': {'required': True},
    +        'output_blob_container_uri': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'input_blob_container_uri': {'key': 'inputBlobContainerUri', 'type': 'str'},
    +        'output_blob_container_uri': {'key': 'outputBlobContainerUri', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(ImportDevicesRequest, self).__init__(**kwargs)
    +        self.input_blob_container_uri = kwargs.get('input_blob_container_uri', None)
    +        self.output_blob_container_uri = kwargs.get('output_blob_container_uri', None)
    +
    +
    +class IotHubCapacity(Model):
    +    """IoT Hub capacity information.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar minimum: The minimum number of units.
    +    :vartype minimum: long
    +    :ivar maximum: The maximum number of units.
    +    :vartype maximum: long
    +    :ivar default: The default number of units.
    +    :vartype default: long
    +    :ivar scale_type: The type of the scaling enabled. Possible values
    +     include: 'Automatic', 'Manual', 'None'
    +    :vartype scale_type: str or ~azure.mgmt.iothub.models.IotHubScaleType
    +    """
    +
    +    _validation = {
    +        'minimum': {'readonly': True, 'maximum': 1, 'minimum': 1},
    +        'maximum': {'readonly': True},
    +        'default': {'readonly': True},
    +        'scale_type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'minimum': {'key': 'minimum', 'type': 'long'},
    +        'maximum': {'key': 'maximum', 'type': 'long'},
    +        'default': {'key': 'default', 'type': 'long'},
    +        'scale_type': {'key': 'scaleType', 'type': 'IotHubScaleType'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubCapacity, self).__init__(**kwargs)
    +        self.minimum = None
    +        self.maximum = None
    +        self.default = None
    +        self.scale_type = None
    +
    +
    +class Resource(Model):
    +    """The common properties of an Azure resource.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The resource name.
    +    :vartype name: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    :param location: Required. The resource location.
    +    :type location: str
    +    :param tags: The resource tags.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True, 'pattern': r'^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{2,49}[a-zA-Z0-9]$'},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.location = kwargs.get('location', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class IotHubDescription(Resource):
    +    """The description of the IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The resource name.
    +    :vartype name: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    :param location: Required. The resource location.
    +    :type location: str
    +    :param tags: The resource tags.
    +    :type tags: dict[str, str]
    +    :param etag: The Etag field is *not* required. If it is provided in the
    +     response body, it must also be provided as a header per the normal ETag
    +     convention.
    +    :type etag: str
    +    :param properties: IotHub properties
    +    :type properties: ~azure.mgmt.iothub.models.IotHubProperties
    +    :param sku: Required. IotHub SKU info
    +    :type sku: ~azure.mgmt.iothub.models.IotHubSkuInfo
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True, 'pattern': r'^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{2,49}[a-zA-Z0-9]$'},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'sku': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'properties': {'key': 'properties', 'type': 'IotHubProperties'},
    +        'sku': {'key': 'sku', 'type': 'IotHubSkuInfo'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubDescription, self).__init__(**kwargs)
    +        self.etag = kwargs.get('etag', None)
    +        self.properties = kwargs.get('properties', None)
    +        self.sku = kwargs.get('sku', None)
    +
    +
    +class IotHubLocationDescription(Model):
    +    """Public representation of one of the locations where a resource is
    +    provisioned.
    +
    +    :param location: Azure Geo Regions
    +    :type location: str
    +    :param role: Specific Role assigned to this location. Possible values
    +     include: 'primary', 'secondary'
    +    :type role: str or ~azure.mgmt.iothub.models.IotHubReplicaRoleType
    +    """
    +
    +    _attribute_map = {
    +        'location': {'key': 'location', 'type': 'str'},
    +        'role': {'key': 'role', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubLocationDescription, self).__init__(**kwargs)
    +        self.location = kwargs.get('location', None)
    +        self.role = kwargs.get('role', None)
    +
    +
    +class IotHubNameAvailabilityInfo(Model):
    +    """The properties indicating whether a given IoT hub name is available.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name_available: The value which indicates whether the provided name
    +     is available.
    +    :vartype name_available: bool
    +    :ivar reason: The reason for unavailability. Possible values include:
    +     'Invalid', 'AlreadyExists'
    +    :vartype reason: str or
    +     ~azure.mgmt.iothub.models.IotHubNameUnavailabilityReason
    +    :param message: The detailed reason message.
    +    :type message: str
    +    """
    +
    +    _validation = {
    +        'name_available': {'readonly': True},
    +        'reason': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name_available': {'key': 'nameAvailable', 'type': 'bool'},
    +        'reason': {'key': 'reason', 'type': 'IotHubNameUnavailabilityReason'},
    +        'message': {'key': 'message', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubNameAvailabilityInfo, self).__init__(**kwargs)
    +        self.name_available = None
    +        self.reason = None
    +        self.message = kwargs.get('message', None)
    +
    +
    +class IotHubProperties(Model):
    +    """The properties of an IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param authorization_policies: The shared access policies you can use to
    +     secure a connection to the IoT hub.
    +    :type authorization_policies:
    +     list[~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRule]
    +    :param ip_filter_rules: The IP filter rules.
    +    :type ip_filter_rules: list[~azure.mgmt.iothub.models.IpFilterRule]
    +    :ivar provisioning_state: The provisioning state.
    +    :vartype provisioning_state: str
    +    :ivar state: The hub state.
    +    :vartype state: str
    +    :ivar host_name: The name of the host.
    +    :vartype host_name: str
    +    :param event_hub_endpoints: The Event Hub-compatible endpoint properties.
    +     The only possible keys to this dictionary is events. This key has to be
    +     present in the dictionary while making create or update calls for the IoT
    +     hub.
    +    :type event_hub_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.EventHubProperties]
    +    :param routing:
    +    :type routing: ~azure.mgmt.iothub.models.RoutingProperties
    +    :param storage_endpoints: The list of Azure Storage endpoints where you
    +     can upload files. Currently you can configure only one Azure Storage
    +     account and that MUST have its key as $default. Specifying more than one
    +     storage account causes an error to be thrown. Not specifying a value for
    +     this property when the enableFileUploadNotifications property is set to
    +     True, causes an error to be thrown.
    +    :type storage_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.StorageEndpointProperties]
    +    :param messaging_endpoints: The messaging endpoint properties for the file
    +     upload notification queue.
    +    :type messaging_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.MessagingEndpointProperties]
    +    :param enable_file_upload_notifications: If True, file upload
    +     notifications are enabled.
    +    :type enable_file_upload_notifications: bool
    +    :param cloud_to_device:
    +    :type cloud_to_device: ~azure.mgmt.iothub.models.CloudToDeviceProperties
    +    :param comments: IoT hub comments.
    +    :type comments: str
    +    :param device_streams: The device streams properties of iothub.
    +    :type device_streams:
    +     ~azure.mgmt.iothub.models.IotHubPropertiesDeviceStreams
    +    :param features: The capabilities and features enabled for the IoT hub.
    +     Possible values include: 'None', 'DeviceManagement'
    +    :type features: str or ~azure.mgmt.iothub.models.Capabilities
    +    :ivar locations: Primary and secondary location for iot hub
    +    :vartype locations:
    +     list[~azure.mgmt.iothub.models.IotHubLocationDescription]
    +    """
    +
    +    _validation = {
    +        'provisioning_state': {'readonly': True},
    +        'state': {'readonly': True},
    +        'host_name': {'readonly': True},
    +        'locations': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'authorization_policies': {'key': 'authorizationPolicies', 'type': '[SharedAccessSignatureAuthorizationRule]'},
    +        'ip_filter_rules': {'key': 'ipFilterRules', 'type': '[IpFilterRule]'},
    +        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
    +        'state': {'key': 'state', 'type': 'str'},
    +        'host_name': {'key': 'hostName', 'type': 'str'},
    +        'event_hub_endpoints': {'key': 'eventHubEndpoints', 'type': '{EventHubProperties}'},
    +        'routing': {'key': 'routing', 'type': 'RoutingProperties'},
    +        'storage_endpoints': {'key': 'storageEndpoints', 'type': '{StorageEndpointProperties}'},
    +        'messaging_endpoints': {'key': 'messagingEndpoints', 'type': '{MessagingEndpointProperties}'},
    +        'enable_file_upload_notifications': {'key': 'enableFileUploadNotifications', 'type': 'bool'},
    +        'cloud_to_device': {'key': 'cloudToDevice', 'type': 'CloudToDeviceProperties'},
    +        'comments': {'key': 'comments', 'type': 'str'},
    +        'device_streams': {'key': 'deviceStreams', 'type': 'IotHubPropertiesDeviceStreams'},
    +        'features': {'key': 'features', 'type': 'str'},
    +        'locations': {'key': 'locations', 'type': '[IotHubLocationDescription]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubProperties, self).__init__(**kwargs)
    +        self.authorization_policies = kwargs.get('authorization_policies', None)
    +        self.ip_filter_rules = kwargs.get('ip_filter_rules', None)
    +        self.provisioning_state = None
    +        self.state = None
    +        self.host_name = None
    +        self.event_hub_endpoints = kwargs.get('event_hub_endpoints', None)
    +        self.routing = kwargs.get('routing', None)
    +        self.storage_endpoints = kwargs.get('storage_endpoints', None)
    +        self.messaging_endpoints = kwargs.get('messaging_endpoints', None)
    +        self.enable_file_upload_notifications = kwargs.get('enable_file_upload_notifications', None)
    +        self.cloud_to_device = kwargs.get('cloud_to_device', None)
    +        self.comments = kwargs.get('comments', None)
    +        self.device_streams = kwargs.get('device_streams', None)
    +        self.features = kwargs.get('features', None)
    +        self.locations = None
    +
    +
    +class IotHubPropertiesDeviceStreams(Model):
    +    """The device streams properties of iothub.
    +
    +    :param streaming_endpoints: List of Device Streams Endpoints.
    +    :type streaming_endpoints: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'streaming_endpoints': {'key': 'streamingEndpoints', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubPropertiesDeviceStreams, self).__init__(**kwargs)
    +        self.streaming_endpoints = kwargs.get('streaming_endpoints', None)
    +
    +
    +class IotHubQuotaMetricInfo(Model):
    +    """Quota metrics properties.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name: The name of the quota metric.
    +    :vartype name: str
    +    :ivar current_value: The current value for the quota metric.
    +    :vartype current_value: long
    +    :ivar max_value: The maximum value of the quota metric.
    +    :vartype max_value: long
    +    """
    +
    +    _validation = {
    +        'name': {'readonly': True},
    +        'current_value': {'readonly': True},
    +        'max_value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'current_value': {'key': 'currentValue', 'type': 'long'},
    +        'max_value': {'key': 'maxValue', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubQuotaMetricInfo, self).__init__(**kwargs)
    +        self.name = None
    +        self.current_value = None
    +        self.max_value = None
    +
    +
    +class IotHubSkuDescription(Model):
    +    """SKU properties.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar resource_type: The type of the resource.
    +    :vartype resource_type: str
    +    :param sku: Required. The type of the resource.
    +    :type sku: ~azure.mgmt.iothub.models.IotHubSkuInfo
    +    :param capacity: Required. IotHub capacity
    +    :type capacity: ~azure.mgmt.iothub.models.IotHubCapacity
    +    """
    +
    +    _validation = {
    +        'resource_type': {'readonly': True},
    +        'sku': {'required': True},
    +        'capacity': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'resource_type': {'key': 'resourceType', 'type': 'str'},
    +        'sku': {'key': 'sku', 'type': 'IotHubSkuInfo'},
    +        'capacity': {'key': 'capacity', 'type': 'IotHubCapacity'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubSkuDescription, self).__init__(**kwargs)
    +        self.resource_type = None
    +        self.sku = kwargs.get('sku', None)
    +        self.capacity = kwargs.get('capacity', None)
    +
    +
    +class IotHubSkuInfo(Model):
    +    """Information about the SKU of the IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the SKU. Possible values include: 'F1',
    +     'S1', 'S2', 'S3', 'B1', 'B2', 'B3'
    +    :type name: str or ~azure.mgmt.iothub.models.IotHubSku
    +    :ivar tier: The billing tier for the IoT hub. Possible values include:
    +     'Free', 'Standard', 'Basic'
    +    :vartype tier: str or ~azure.mgmt.iothub.models.IotHubSkuTier
    +    :param capacity: The number of provisioned IoT Hub units. See:
    +     https://docs.microsoft.com/azure/azure-subscription-service-limits#iot-hub-limits.
    +    :type capacity: long
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'tier': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'tier': {'key': 'tier', 'type': 'IotHubSkuTier'},
    +        'capacity': {'key': 'capacity', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IotHubSkuInfo, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.tier = None
    +        self.capacity = kwargs.get('capacity', None)
    +
    +
    +class IpFilterRule(Model):
    +    """The IP filter rules for the IoT hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param filter_name: Required. The name of the IP filter rule.
    +    :type filter_name: str
    +    :param action: Required. The desired action for requests captured by this
    +     rule. Possible values include: 'Accept', 'Reject'
    +    :type action: str or ~azure.mgmt.iothub.models.IpFilterActionType
    +    :param ip_mask: Required. A string that contains the IP address range in
    +     CIDR notation for the rule.
    +    :type ip_mask: str
    +    """
    +
    +    _validation = {
    +        'filter_name': {'required': True},
    +        'action': {'required': True},
    +        'ip_mask': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'filter_name': {'key': 'filterName', 'type': 'str'},
    +        'action': {'key': 'action', 'type': 'IpFilterActionType'},
    +        'ip_mask': {'key': 'ipMask', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IpFilterRule, self).__init__(**kwargs)
    +        self.filter_name = kwargs.get('filter_name', None)
    +        self.action = kwargs.get('action', None)
    +        self.ip_mask = kwargs.get('ip_mask', None)
    +
    +
    +class JobResponse(Model):
    +    """The properties of the Job Response object.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar job_id: The job identifier.
    +    :vartype job_id: str
    +    :ivar start_time_utc: The start time of the job.
    +    :vartype start_time_utc: datetime
    +    :ivar end_time_utc: The time the job stopped processing.
    +    :vartype end_time_utc: datetime
    +    :ivar type: The type of the job. Possible values include: 'unknown',
    +     'export', 'import', 'backup', 'readDeviceProperties',
    +     'writeDeviceProperties', 'updateDeviceConfiguration', 'rebootDevice',
    +     'factoryResetDevice', 'firmwareUpdate'
    +    :vartype type: str or ~azure.mgmt.iothub.models.JobType
    +    :ivar status: The status of the job. Possible values include: 'unknown',
    +     'enqueued', 'running', 'completed', 'failed', 'cancelled'
    +    :vartype status: str or ~azure.mgmt.iothub.models.JobStatus
    +    :ivar failure_reason: If status == failed, this string containing the
    +     reason for the failure.
    +    :vartype failure_reason: str
    +    :ivar status_message: The status message for the job.
    +    :vartype status_message: str
    +    :ivar parent_job_id: The job identifier of the parent job, if any.
    +    :vartype parent_job_id: str
    +    """
    +
    +    _validation = {
    +        'job_id': {'readonly': True},
    +        'start_time_utc': {'readonly': True},
    +        'end_time_utc': {'readonly': True},
    +        'type': {'readonly': True},
    +        'status': {'readonly': True},
    +        'failure_reason': {'readonly': True},
    +        'status_message': {'readonly': True},
    +        'parent_job_id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'job_id': {'key': 'jobId', 'type': 'str'},
    +        'start_time_utc': {'key': 'startTimeUtc', 'type': 'rfc-1123'},
    +        'end_time_utc': {'key': 'endTimeUtc', 'type': 'rfc-1123'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'status': {'key': 'status', 'type': 'JobStatus'},
    +        'failure_reason': {'key': 'failureReason', 'type': 'str'},
    +        'status_message': {'key': 'statusMessage', 'type': 'str'},
    +        'parent_job_id': {'key': 'parentJobId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(JobResponse, self).__init__(**kwargs)
    +        self.job_id = None
    +        self.start_time_utc = None
    +        self.end_time_utc = None
    +        self.type = None
    +        self.status = None
    +        self.failure_reason = None
    +        self.status_message = None
    +        self.parent_job_id = None
    +
    +
    +class MatchedRoute(Model):
    +    """Routes that matched.
    +
    +    :param properties: Properties of routes that matched
    +    :type properties: ~azure.mgmt.iothub.models.RouteProperties
    +    """
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'RouteProperties'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(MatchedRoute, self).__init__(**kwargs)
    +        self.properties = kwargs.get('properties', None)
    +
    +
    +class MessagingEndpointProperties(Model):
    +    """The properties of the messaging endpoints used by this IoT hub.
    +
    +    :param lock_duration_as_iso8601: The lock duration. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type lock_duration_as_iso8601: timedelta
    +    :param ttl_as_iso8601: The period of time for which a message is available
    +     to consume before it is expired by the IoT hub. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type ttl_as_iso8601: timedelta
    +    :param max_delivery_count: The number of times the IoT hub attempts to
    +     deliver a message. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type max_delivery_count: int
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lock_duration_as_iso8601': {'key': 'lockDurationAsIso8601', 'type': 'duration'},
    +        'ttl_as_iso8601': {'key': 'ttlAsIso8601', 'type': 'duration'},
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(MessagingEndpointProperties, self).__init__(**kwargs)
    +        self.lock_duration_as_iso8601 = kwargs.get('lock_duration_as_iso8601', None)
    +        self.ttl_as_iso8601 = kwargs.get('ttl_as_iso8601', None)
    +        self.max_delivery_count = kwargs.get('max_delivery_count', None)
    +
    +
    +class Name(Model):
    +    """Name of Iot Hub type.
    +
    +    :param value: IotHub type
    +    :type value: str
    +    :param localized_value: Localized value of name
    +    :type localized_value: str
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'localized_value': {'key': 'localizedValue', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Name, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.localized_value = kwargs.get('localized_value', None)
    +
    +
    +class Operation(Model):
    +    """IoT Hub REST API operation.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name: Operation name: {provider}/{resource}/{read | write | action |
    +     delete}
    +    :vartype name: str
    +    :param display: The object that represents the operation.
    +    :type display: ~azure.mgmt.iothub.models.OperationDisplay
    +    """
    +
    +    _validation = {
    +        'name': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'display': {'key': 'display', 'type': 'OperationDisplay'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Operation, self).__init__(**kwargs)
    +        self.name = None
    +        self.display = kwargs.get('display', None)
    +
    +
    +class OperationDisplay(Model):
    +    """The object that represents the operation.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar provider: Service provider: Microsoft Devices
    +    :vartype provider: str
    +    :ivar resource: Resource Type: IotHubs
    +    :vartype resource: str
    +    :ivar operation: Name of the operation
    +    :vartype operation: str
    +    :ivar description: Description of the operation
    +    :vartype description: str
    +    """
    +
    +    _validation = {
    +        'provider': {'readonly': True},
    +        'resource': {'readonly': True},
    +        'operation': {'readonly': True},
    +        'description': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'resource': {'key': 'resource', 'type': 'str'},
    +        'operation': {'key': 'operation', 'type': 'str'},
    +        'description': {'key': 'description', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(OperationDisplay, self).__init__(**kwargs)
    +        self.provider = None
    +        self.resource = None
    +        self.operation = None
    +        self.description = None
    +
    +
    +class OperationInputs(Model):
    +    """Input values.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the IoT hub to check.
    +    :type name: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(OperationInputs, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +
    +
    +class RegistryStatistics(Model):
    +    """Identity registry statistics.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar total_device_count: The total count of devices in the identity
    +     registry.
    +    :vartype total_device_count: long
    +    :ivar enabled_device_count: The count of enabled devices in the identity
    +     registry.
    +    :vartype enabled_device_count: long
    +    :ivar disabled_device_count: The count of disabled devices in the identity
    +     registry.
    +    :vartype disabled_device_count: long
    +    """
    +
    +    _validation = {
    +        'total_device_count': {'readonly': True},
    +        'enabled_device_count': {'readonly': True},
    +        'disabled_device_count': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'total_device_count': {'key': 'totalDeviceCount', 'type': 'long'},
    +        'enabled_device_count': {'key': 'enabledDeviceCount', 'type': 'long'},
    +        'disabled_device_count': {'key': 'disabledDeviceCount', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RegistryStatistics, self).__init__(**kwargs)
    +        self.total_device_count = None
    +        self.enabled_device_count = None
    +        self.disabled_device_count = None
    +
    +
    +class RouteCompilationError(Model):
    +    """Compilation error when evaluating route.
    +
    +    :param message: Route error message
    +    :type message: str
    +    :param severity: Severity of the route error. Possible values include:
    +     'error', 'warning'
    +    :type severity: str or ~azure.mgmt.iothub.models.RouteErrorSeverity
    +    :param location: Location where the route error happened
    +    :type location: ~azure.mgmt.iothub.models.RouteErrorRange
    +    """
    +
    +    _attribute_map = {
    +        'message': {'key': 'message', 'type': 'str'},
    +        'severity': {'key': 'severity', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'RouteErrorRange'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RouteCompilationError, self).__init__(**kwargs)
    +        self.message = kwargs.get('message', None)
    +        self.severity = kwargs.get('severity', None)
    +        self.location = kwargs.get('location', None)
    +
    +
    +class RouteErrorPosition(Model):
    +    """Position where the route error happened.
    +
    +    :param line: Line where the route error happened
    +    :type line: int
    +    :param column: Column where the route error happened
    +    :type column: int
    +    """
    +
    +    _attribute_map = {
    +        'line': {'key': 'line', 'type': 'int'},
    +        'column': {'key': 'column', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RouteErrorPosition, self).__init__(**kwargs)
    +        self.line = kwargs.get('line', None)
    +        self.column = kwargs.get('column', None)
    +
    +
    +class RouteErrorRange(Model):
    +    """Range of route errors.
    +
    +    :param start: Start where the route error happened
    +    :type start: ~azure.mgmt.iothub.models.RouteErrorPosition
    +    :param end: End where the route error happened
    +    :type end: ~azure.mgmt.iothub.models.RouteErrorPosition
    +    """
    +
    +    _attribute_map = {
    +        'start': {'key': 'start', 'type': 'RouteErrorPosition'},
    +        'end': {'key': 'end', 'type': 'RouteErrorPosition'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RouteErrorRange, self).__init__(**kwargs)
    +        self.start = kwargs.get('start', None)
    +        self.end = kwargs.get('end', None)
    +
    +
    +class RouteProperties(Model):
    +    """The properties of a routing rule that your IoT hub uses to route messages
    +    to endpoints.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the route. The name can only include
    +     alphanumeric characters, periods, underscores, hyphens, has a maximum
    +     length of 64 characters, and must be unique.
    +    :type name: str
    +    :param source: Required. The source that the routing rule is to be applied
    +     to, such as DeviceMessages. Possible values include: 'Invalid',
    +     'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents',
    +     'DeviceJobLifecycleEvents', 'DigitalTwinChangeEvents'
    +    :type source: str or ~azure.mgmt.iothub.models.RoutingSource
    +    :param condition: The condition that is evaluated to apply the routing
    +     rule. If no condition is provided, it evaluates to true by default. For
    +     grammar, see:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
    +    :type condition: str
    +    :param endpoint_names: Required. The list of endpoints to which messages
    +     that satisfy the condition are routed. Currently only one endpoint is
    +     allowed.
    +    :type endpoint_names: list[str]
    +    :param is_enabled: Required. Used to specify whether a route is enabled.
    +    :type is_enabled: bool
    +    """
    +
    +    _validation = {
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +        'source': {'required': True},
    +        'endpoint_names': {'required': True, 'max_items': 1, 'min_items': 1},
    +        'is_enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'condition': {'key': 'condition', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +        'is_enabled': {'key': 'isEnabled', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RouteProperties, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.source = kwargs.get('source', None)
    +        self.condition = kwargs.get('condition', None)
    +        self.endpoint_names = kwargs.get('endpoint_names', None)
    +        self.is_enabled = kwargs.get('is_enabled', None)
    +
    +
    +class RoutingEndpoints(Model):
    +    """The properties related to the custom endpoints to which your IoT hub routes
    +    messages based on the routing rules. A maximum of 10 custom endpoints are
    +    allowed across all endpoint types for paid hubs and only 1 custom endpoint
    +    is allowed across all endpoint types for free hubs.
    +
    +    :param service_bus_queues: The list of Service Bus queue endpoints that
    +     IoT hub routes the messages to, based on the routing rules.
    +    :type service_bus_queues:
    +     list[~azure.mgmt.iothub.models.RoutingServiceBusQueueEndpointProperties]
    +    :param service_bus_topics: The list of Service Bus topic endpoints that
    +     the IoT hub routes the messages to, based on the routing rules.
    +    :type service_bus_topics:
    +     list[~azure.mgmt.iothub.models.RoutingServiceBusTopicEndpointProperties]
    +    :param event_hubs: The list of Event Hubs endpoints that IoT hub routes
    +     messages to, based on the routing rules. This list does not include the
    +     built-in Event Hubs endpoint.
    +    :type event_hubs:
    +     list[~azure.mgmt.iothub.models.RoutingEventHubProperties]
    +    :param storage_containers: The list of storage container endpoints that
    +     IoT hub routes messages to, based on the routing rules.
    +    :type storage_containers:
    +     list[~azure.mgmt.iothub.models.RoutingStorageContainerProperties]
    +    """
    +
    +    _attribute_map = {
    +        'service_bus_queues': {'key': 'serviceBusQueues', 'type': '[RoutingServiceBusQueueEndpointProperties]'},
    +        'service_bus_topics': {'key': 'serviceBusTopics', 'type': '[RoutingServiceBusTopicEndpointProperties]'},
    +        'event_hubs': {'key': 'eventHubs', 'type': '[RoutingEventHubProperties]'},
    +        'storage_containers': {'key': 'storageContainers', 'type': '[RoutingStorageContainerProperties]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingEndpoints, self).__init__(**kwargs)
    +        self.service_bus_queues = kwargs.get('service_bus_queues', None)
    +        self.service_bus_topics = kwargs.get('service_bus_topics', None)
    +        self.event_hubs = kwargs.get('event_hubs', None)
    +        self.storage_containers = kwargs.get('storage_containers', None)
    +
    +
    +class RoutingEventHubProperties(Model):
    +    """The properties related to an event hub endpoint.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the event hub
    +     endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the event hub
    +     endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the event hub
    +     endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingEventHubProperties, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.name = kwargs.get('name', None)
    +        self.subscription_id = kwargs.get('subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +
    +
    +class RoutingMessage(Model):
    +    """Routing message.
    +
    +    :param body: Body of routing message
    +    :type body: str
    +    :param app_properties: App properties
    +    :type app_properties: dict[str, str]
    +    :param system_properties: System properties
    +    :type system_properties: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'body': {'key': 'body', 'type': 'str'},
    +        'app_properties': {'key': 'appProperties', 'type': '{str}'},
    +        'system_properties': {'key': 'systemProperties', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingMessage, self).__init__(**kwargs)
    +        self.body = kwargs.get('body', None)
    +        self.app_properties = kwargs.get('app_properties', None)
    +        self.system_properties = kwargs.get('system_properties', None)
    +
    +
    +class RoutingProperties(Model):
    +    """The routing related properties of the IoT hub. See:
    +    https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging.
    +
    +    :param endpoints:
    +    :type endpoints: ~azure.mgmt.iothub.models.RoutingEndpoints
    +    :param routes: The list of user-provided routing rules that the IoT hub
    +     uses to route messages to built-in and custom endpoints. A maximum of 100
    +     routing rules are allowed for paid hubs and a maximum of 5 routing rules
    +     are allowed for free hubs.
    +    :type routes: list[~azure.mgmt.iothub.models.RouteProperties]
    +    :param fallback_route: The properties of the route that is used as a
    +     fall-back route when none of the conditions specified in the 'routes'
    +     section are met. This is an optional parameter. When this property is not
    +     set, the messages which do not meet any of the conditions specified in the
    +     'routes' section get routed to the built-in eventhub endpoint.
    +    :type fallback_route: ~azure.mgmt.iothub.models.FallbackRouteProperties
    +    :param enrichments: The list of user-provided enrichments that the IoT hub
    +     applies to messages to be delivered to built-in and custom endpoints. See:
    +     https://aka.ms/iotmsgenrich
    +    :type enrichments: list[~azure.mgmt.iothub.models.EnrichmentProperties]
    +    """
    +
    +    _attribute_map = {
    +        'endpoints': {'key': 'endpoints', 'type': 'RoutingEndpoints'},
    +        'routes': {'key': 'routes', 'type': '[RouteProperties]'},
    +        'fallback_route': {'key': 'fallbackRoute', 'type': 'FallbackRouteProperties'},
    +        'enrichments': {'key': 'enrichments', 'type': '[EnrichmentProperties]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingProperties, self).__init__(**kwargs)
    +        self.endpoints = kwargs.get('endpoints', None)
    +        self.routes = kwargs.get('routes', None)
    +        self.fallback_route = kwargs.get('fallback_route', None)
    +        self.enrichments = kwargs.get('enrichments', None)
    +
    +
    +class RoutingServiceBusQueueEndpointProperties(Model):
    +    """The properties related to service bus queue endpoint types.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the service
    +     bus queue endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types. The name need not be the same as the actual
    +     queue name.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the service bus
    +     queue endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the service bus
    +     queue endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingServiceBusQueueEndpointProperties, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.name = kwargs.get('name', None)
    +        self.subscription_id = kwargs.get('subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +
    +
    +class RoutingServiceBusTopicEndpointProperties(Model):
    +    """The properties related to service bus topic endpoint types.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the service
    +     bus topic endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.  The name need not be the same as the actual
    +     topic name.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the service bus
    +     topic endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the service bus
    +     topic endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingServiceBusTopicEndpointProperties, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.name = kwargs.get('name', None)
    +        self.subscription_id = kwargs.get('subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +
    +
    +class RoutingStorageContainerProperties(Model):
    +    """The properties related to a storage container endpoint.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the storage
    +     account.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the storage
    +     account.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the storage
    +     account.
    +    :type resource_group: str
    +    :param container_name: Required. The name of storage container in the
    +     storage account.
    +    :type container_name: str
    +    :param file_name_format: File name format for the blob. Default format is
    +     {iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}. All parameters are
    +     mandatory but can be reordered.
    +    :type file_name_format: str
    +    :param batch_frequency_in_seconds: Time interval at which blobs are
    +     written to storage. Value should be between 60 and 720 seconds. Default
    +     value is 300 seconds.
    +    :type batch_frequency_in_seconds: int
    +    :param max_chunk_size_in_bytes: Maximum number of bytes for each blob
    +     written to storage. Value should be between 10485760(10MB) and
    +     524288000(500MB). Default value is 314572800(300MB).
    +    :type max_chunk_size_in_bytes: int
    +    :param encoding: Encoding that is used to serialize messages to blobs.
    +     Supported values are 'avro', 'avrodeflate', and 'JSON'. Default value is
    +     'avro'. Possible values include: 'Avro', 'AvroDeflate', 'JSON'
    +    :type encoding: str or ~azure.mgmt.iothub.models.enum
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +        'container_name': {'required': True},
    +        'batch_frequency_in_seconds': {'maximum': 720, 'minimum': 60},
    +        'max_chunk_size_in_bytes': {'maximum': 524288000, 'minimum': 10485760},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +        'container_name': {'key': 'containerName', 'type': 'str'},
    +        'file_name_format': {'key': 'fileNameFormat', 'type': 'str'},
    +        'batch_frequency_in_seconds': {'key': 'batchFrequencyInSeconds', 'type': 'int'},
    +        'max_chunk_size_in_bytes': {'key': 'maxChunkSizeInBytes', 'type': 'int'},
    +        'encoding': {'key': 'encoding', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingStorageContainerProperties, self).__init__(**kwargs)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.name = kwargs.get('name', None)
    +        self.subscription_id = kwargs.get('subscription_id', None)
    +        self.resource_group = kwargs.get('resource_group', None)
    +        self.container_name = kwargs.get('container_name', None)
    +        self.file_name_format = kwargs.get('file_name_format', None)
    +        self.batch_frequency_in_seconds = kwargs.get('batch_frequency_in_seconds', None)
    +        self.max_chunk_size_in_bytes = kwargs.get('max_chunk_size_in_bytes', None)
    +        self.encoding = kwargs.get('encoding', None)
    +
    +
    +class RoutingTwin(Model):
    +    """Twin reference input parameter. This is an optional parameter.
    +
    +    :param tags: Twin Tags
    +    :type tags: object
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.RoutingTwinProperties
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': 'object'},
    +        'properties': {'key': 'properties', 'type': 'RoutingTwinProperties'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingTwin, self).__init__(**kwargs)
    +        self.tags = kwargs.get('tags', None)
    +        self.properties = kwargs.get('properties', None)
    +
    +
    +class RoutingTwinProperties(Model):
    +    """RoutingTwinProperties.
    +
    +    :param desired: Twin desired properties
    +    :type desired: object
    +    :param reported: Twin desired properties
    +    :type reported: object
    +    """
    +
    +    _attribute_map = {
    +        'desired': {'key': 'desired', 'type': 'object'},
    +        'reported': {'key': 'reported', 'type': 'object'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(RoutingTwinProperties, self).__init__(**kwargs)
    +        self.desired = kwargs.get('desired', None)
    +        self.reported = kwargs.get('reported', None)
    +
    +
    +class SharedAccessSignatureAuthorizationRule(Model):
    +    """The properties of an IoT hub shared access policy.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_name: Required. The name of the shared access policy.
    +    :type key_name: str
    +    :param primary_key: The primary key.
    +    :type primary_key: str
    +    :param secondary_key: The secondary key.
    +    :type secondary_key: str
    +    :param rights: Required. The permissions assigned to the shared access
    +     policy. Possible values include: 'RegistryRead', 'RegistryWrite',
    +     'ServiceConnect', 'DeviceConnect', 'RegistryRead, RegistryWrite',
    +     'RegistryRead, ServiceConnect', 'RegistryRead, DeviceConnect',
    +     'RegistryWrite, ServiceConnect', 'RegistryWrite, DeviceConnect',
    +     'ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite,
    +     ServiceConnect', 'RegistryRead, RegistryWrite, DeviceConnect',
    +     'RegistryRead, ServiceConnect, DeviceConnect', 'RegistryWrite,
    +     ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite,
    +     ServiceConnect, DeviceConnect'
    +    :type rights: str or ~azure.mgmt.iothub.models.AccessRights
    +    """
    +
    +    _validation = {
    +        'key_name': {'required': True},
    +        'rights': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_name': {'key': 'keyName', 'type': 'str'},
    +        'primary_key': {'key': 'primaryKey', 'type': 'str'},
    +        'secondary_key': {'key': 'secondaryKey', 'type': 'str'},
    +        'rights': {'key': 'rights', 'type': 'AccessRights'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SharedAccessSignatureAuthorizationRule, self).__init__(**kwargs)
    +        self.key_name = kwargs.get('key_name', None)
    +        self.primary_key = kwargs.get('primary_key', None)
    +        self.secondary_key = kwargs.get('secondary_key', None)
    +        self.rights = kwargs.get('rights', None)
    +
    +
    +class StorageEndpointProperties(Model):
    +    """The properties of the Azure Storage endpoint for file upload.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param sas_ttl_as_iso8601: The period of time for which the SAS URI
    +     generated by IoT Hub for file upload is valid. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload#file-upload-notification-configuration-options.
    +    :type sas_ttl_as_iso8601: timedelta
    +    :param connection_string: Required. The connection string for the Azure
    +     Storage account to which files are uploaded.
    +    :type connection_string: str
    +    :param container_name: Required. The name of the root container where you
    +     upload files. The container need not exist but should be creatable using
    +     the connectionString specified.
    +    :type container_name: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'container_name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'sas_ttl_as_iso8601': {'key': 'sasTtlAsIso8601', 'type': 'duration'},
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'container_name': {'key': 'containerName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageEndpointProperties, self).__init__(**kwargs)
    +        self.sas_ttl_as_iso8601 = kwargs.get('sas_ttl_as_iso8601', None)
    +        self.connection_string = kwargs.get('connection_string', None)
    +        self.container_name = kwargs.get('container_name', None)
    +
    +
    +class TagsResource(Model):
    +    """A container holding only the Tags for a resource, allowing the user to
    +    update the tags on an IoT Hub instance.
    +
    +    :param tags: Resource tags
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TagsResource, self).__init__(**kwargs)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class TestAllRoutesInput(Model):
    +    """Input for testing all routes.
    +
    +    :param routing_source: Routing source. Possible values include: 'Invalid',
    +     'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents',
    +     'DeviceJobLifecycleEvents', 'DigitalTwinChangeEvents'
    +    :type routing_source: str or ~azure.mgmt.iothub.models.RoutingSource
    +    :param message: Routing message
    +    :type message: ~azure.mgmt.iothub.models.RoutingMessage
    +    :param twin: Routing Twin Reference
    +    :type twin: ~azure.mgmt.iothub.models.RoutingTwin
    +    """
    +
    +    _attribute_map = {
    +        'routing_source': {'key': 'routingSource', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'RoutingMessage'},
    +        'twin': {'key': 'twin', 'type': 'RoutingTwin'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestAllRoutesInput, self).__init__(**kwargs)
    +        self.routing_source = kwargs.get('routing_source', None)
    +        self.message = kwargs.get('message', None)
    +        self.twin = kwargs.get('twin', None)
    +
    +
    +class TestAllRoutesResult(Model):
    +    """Result of testing all routes.
    +
    +    :param routes: JSON-serialized array of matched routes
    +    :type routes: list[~azure.mgmt.iothub.models.MatchedRoute]
    +    """
    +
    +    _attribute_map = {
    +        'routes': {'key': 'routes', 'type': '[MatchedRoute]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestAllRoutesResult, self).__init__(**kwargs)
    +        self.routes = kwargs.get('routes', None)
    +
    +
    +class TestRouteInput(Model):
    +    """Input for testing route.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param message: Routing message
    +    :type message: ~azure.mgmt.iothub.models.RoutingMessage
    +    :param route: Required. Route properties
    +    :type route: ~azure.mgmt.iothub.models.RouteProperties
    +    :param twin: Routing Twin Reference
    +    :type twin: ~azure.mgmt.iothub.models.RoutingTwin
    +    """
    +
    +    _validation = {
    +        'route': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'message': {'key': 'message', 'type': 'RoutingMessage'},
    +        'route': {'key': 'route', 'type': 'RouteProperties'},
    +        'twin': {'key': 'twin', 'type': 'RoutingTwin'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestRouteInput, self).__init__(**kwargs)
    +        self.message = kwargs.get('message', None)
    +        self.route = kwargs.get('route', None)
    +        self.twin = kwargs.get('twin', None)
    +
    +
    +class TestRouteResult(Model):
    +    """Result of testing one route.
    +
    +    :param result: Result of testing route. Possible values include:
    +     'undefined', 'false', 'true'
    +    :type result: str or ~azure.mgmt.iothub.models.TestResultStatus
    +    :param details: Detailed result of testing route
    +    :type details: ~azure.mgmt.iothub.models.TestRouteResultDetails
    +    """
    +
    +    _attribute_map = {
    +        'result': {'key': 'result', 'type': 'str'},
    +        'details': {'key': 'details', 'type': 'TestRouteResultDetails'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestRouteResult, self).__init__(**kwargs)
    +        self.result = kwargs.get('result', None)
    +        self.details = kwargs.get('details', None)
    +
    +
    +class TestRouteResultDetails(Model):
    +    """Detailed result of testing a route.
    +
    +    :param compilation_errors: JSON-serialized list of route compilation
    +     errors
    +    :type compilation_errors:
    +     list[~azure.mgmt.iothub.models.RouteCompilationError]
    +    """
    +
    +    _attribute_map = {
    +        'compilation_errors': {'key': 'compilationErrors', 'type': '[RouteCompilationError]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(TestRouteResultDetails, self).__init__(**kwargs)
    +        self.compilation_errors = kwargs.get('compilation_errors', None)
    +
    +
    +class UserSubscriptionQuota(Model):
    +    """User subscription quota response.
    +
    +    :param id: IotHub type id
    +    :type id: str
    +    :param type: Response type
    +    :type type: str
    +    :param unit: Unit of IotHub type
    +    :type unit: str
    +    :param current_value: Current number of IotHub type
    +    :type current_value: int
    +    :param limit: Numerical limit on IotHub type
    +    :type limit: int
    +    :param name: IotHub type
    +    :type name: ~azure.mgmt.iothub.models.Name
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'unit': {'key': 'unit', 'type': 'str'},
    +        'current_value': {'key': 'currentValue', 'type': 'int'},
    +        'limit': {'key': 'limit', 'type': 'int'},
    +        'name': {'key': 'name', 'type': 'Name'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(UserSubscriptionQuota, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.type = kwargs.get('type', None)
    +        self.unit = kwargs.get('unit', None)
    +        self.current_value = kwargs.get('current_value', None)
    +        self.limit = kwargs.get('limit', None)
    +        self.name = kwargs.get('name', None)
    +
    +
    +class UserSubscriptionQuotaListResult(Model):
    +    """Json-serialized array of User subscription quota response.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value:
    +    :type value: list[~azure.mgmt.iothub.models.UserSubscriptionQuota]
    +    :ivar next_link:
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[UserSubscriptionQuota]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(UserSubscriptionQuotaListResult, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.next_link = None
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/_models_py3.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/_models_py3.py
    new file mode 100644
    index 000000000000..ae63b49a6421
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/_models_py3.py
    @@ -0,0 +1,2107 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from msrest.exceptions import HttpOperationError
    +
    +
    +class CertificateBodyDescription(Model):
    +    """The JSON-serialized X509 Certificate.
    +
    +    :param certificate: base-64 representation of the X509 leaf certificate
    +     .cer file or just .pem file content.
    +    :type certificate: str
    +    """
    +
    +    _attribute_map = {
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, certificate: str=None, **kwargs) -> None:
    +        super(CertificateBodyDescription, self).__init__(**kwargs)
    +        self.certificate = certificate
    +
    +
    +class CertificateDescription(Model):
    +    """The X509 Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.CertificateProperties
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The name of the certificate.
    +    :vartype name: str
    +    :ivar etag: The entity tag.
    +    :vartype etag: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'etag': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'CertificateProperties'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, properties=None, **kwargs) -> None:
    +        super(CertificateDescription, self).__init__(**kwargs)
    +        self.properties = properties
    +        self.id = None
    +        self.name = None
    +        self.etag = None
    +        self.type = None
    +
    +
    +class CertificateListDescription(Model):
    +    """The JSON-serialized array of Certificate objects.
    +
    +    :param value: The array of Certificate objects.
    +    :type value: list[~azure.mgmt.iothub.models.CertificateDescription]
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateDescription]'},
    +    }
    +
    +    def __init__(self, *, value=None, **kwargs) -> None:
    +        super(CertificateListDescription, self).__init__(**kwargs)
    +        self.value = value
    +
    +
    +class CertificateProperties(Model):
    +    """The description of an X509 CA Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar subject: The certificate's subject name.
    +    :vartype subject: str
    +    :ivar expiry: The certificate's expiration date and time.
    +    :vartype expiry: datetime
    +    :ivar thumbprint: The certificate's thumbprint.
    +    :vartype thumbprint: str
    +    :ivar is_verified: Determines whether certificate has been verified.
    +    :vartype is_verified: bool
    +    :ivar created: The certificate's create date and time.
    +    :vartype created: datetime
    +    :ivar updated: The certificate's last update date and time.
    +    :vartype updated: datetime
    +    :param certificate: The certificate content
    +    :type certificate: str
    +    """
    +
    +    _validation = {
    +        'subject': {'readonly': True},
    +        'expiry': {'readonly': True},
    +        'thumbprint': {'readonly': True},
    +        'is_verified': {'readonly': True},
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'expiry': {'key': 'expiry', 'type': 'rfc-1123'},
    +        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
    +        'is_verified': {'key': 'isVerified', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'rfc-1123'},
    +        'updated': {'key': 'updated', 'type': 'rfc-1123'},
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, certificate: str=None, **kwargs) -> None:
    +        super(CertificateProperties, self).__init__(**kwargs)
    +        self.subject = None
    +        self.expiry = None
    +        self.thumbprint = None
    +        self.is_verified = None
    +        self.created = None
    +        self.updated = None
    +        self.certificate = certificate
    +
    +
    +class CertificatePropertiesWithNonce(Model):
    +    """The description of an X509 CA Certificate including the challenge nonce
    +    issued for the Proof-Of-Possession flow.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar subject: The certificate's subject name.
    +    :vartype subject: str
    +    :ivar expiry: The certificate's expiration date and time.
    +    :vartype expiry: datetime
    +    :ivar thumbprint: The certificate's thumbprint.
    +    :vartype thumbprint: str
    +    :ivar is_verified: Determines whether certificate has been verified.
    +    :vartype is_verified: bool
    +    :ivar created: The certificate's create date and time.
    +    :vartype created: datetime
    +    :ivar updated: The certificate's last update date and time.
    +    :vartype updated: datetime
    +    :ivar verification_code: The certificate's verification code that will be
    +     used for proof of possession.
    +    :vartype verification_code: str
    +    :ivar certificate: The certificate content
    +    :vartype certificate: str
    +    """
    +
    +    _validation = {
    +        'subject': {'readonly': True},
    +        'expiry': {'readonly': True},
    +        'thumbprint': {'readonly': True},
    +        'is_verified': {'readonly': True},
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'verification_code': {'readonly': True},
    +        'certificate': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'expiry': {'key': 'expiry', 'type': 'rfc-1123'},
    +        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
    +        'is_verified': {'key': 'isVerified', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'rfc-1123'},
    +        'updated': {'key': 'updated', 'type': 'rfc-1123'},
    +        'verification_code': {'key': 'verificationCode', 'type': 'str'},
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(CertificatePropertiesWithNonce, self).__init__(**kwargs)
    +        self.subject = None
    +        self.expiry = None
    +        self.thumbprint = None
    +        self.is_verified = None
    +        self.created = None
    +        self.updated = None
    +        self.verification_code = None
    +        self.certificate = None
    +
    +
    +class CertificateVerificationDescription(Model):
    +    """The JSON-serialized leaf certificate.
    +
    +    :param certificate: base-64 representation of X509 certificate .cer file
    +     or just .pem file content.
    +    :type certificate: str
    +    """
    +
    +    _attribute_map = {
    +        'certificate': {'key': 'certificate', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, certificate: str=None, **kwargs) -> None:
    +        super(CertificateVerificationDescription, self).__init__(**kwargs)
    +        self.certificate = certificate
    +
    +
    +class CertificateWithNonceDescription(Model):
    +    """The X509 Certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.CertificatePropertiesWithNonce
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The name of the certificate.
    +    :vartype name: str
    +    :ivar etag: The entity tag.
    +    :vartype etag: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'etag': {'readonly': True},
    +        'type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'CertificatePropertiesWithNonce'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, properties=None, **kwargs) -> None:
    +        super(CertificateWithNonceDescription, self).__init__(**kwargs)
    +        self.properties = properties
    +        self.id = None
    +        self.name = None
    +        self.etag = None
    +        self.type = None
    +
    +
    +class CloudError(Model):
    +    """CloudError.
    +    """
    +
    +    _attribute_map = {
    +    }
    +
    +
    +class CloudToDeviceProperties(Model):
    +    """The IoT hub cloud-to-device messaging properties.
    +
    +    :param max_delivery_count: The max delivery count for cloud-to-device
    +     messages in the device queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type max_delivery_count: int
    +    :param default_ttl_as_iso8601: The default time to live for
    +     cloud-to-device messages in the device queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type default_ttl_as_iso8601: timedelta
    +    :param feedback:
    +    :type feedback: ~azure.mgmt.iothub.models.FeedbackProperties
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +        'default_ttl_as_iso8601': {'key': 'defaultTtlAsIso8601', 'type': 'duration'},
    +        'feedback': {'key': 'feedback', 'type': 'FeedbackProperties'},
    +    }
    +
    +    def __init__(self, *, max_delivery_count: int=None, default_ttl_as_iso8601=None, feedback=None, **kwargs) -> None:
    +        super(CloudToDeviceProperties, self).__init__(**kwargs)
    +        self.max_delivery_count = max_delivery_count
    +        self.default_ttl_as_iso8601 = default_ttl_as_iso8601
    +        self.feedback = feedback
    +
    +
    +class EndpointHealthData(Model):
    +    """The health data for an endpoint.
    +
    +    :param endpoint_id: Id of the endpoint
    +    :type endpoint_id: str
    +    :param health_status: Health statuses have following meanings. The
    +     'healthy' status shows that the endpoint is accepting messages as
    +     expected. The 'unhealthy' status shows that the endpoint is not accepting
    +     messages as expected and IoT Hub is retrying to send data to this
    +     endpoint. The status of an unhealthy endpoint will be updated to healthy
    +     when IoT Hub has established an eventually consistent state of health. The
    +     'dead' status shows that the endpoint is not accepting messages, after IoT
    +     Hub retried sending messages for the retrial period. See IoT Hub metrics
    +     to identify errors and monitor issues with endpoints. The 'unknown' status
    +     shows that the IoT Hub has not established a connection with the endpoint.
    +     No messages have been delivered to or rejected from this endpoint.
    +     Possible values include: 'unknown', 'healthy', 'unhealthy', 'dead'
    +    :type health_status: str or ~azure.mgmt.iothub.models.EndpointHealthStatus
    +    """
    +
    +    _attribute_map = {
    +        'endpoint_id': {'key': 'endpointId', 'type': 'str'},
    +        'health_status': {'key': 'healthStatus', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, endpoint_id: str=None, health_status=None, **kwargs) -> None:
    +        super(EndpointHealthData, self).__init__(**kwargs)
    +        self.endpoint_id = endpoint_id
    +        self.health_status = health_status
    +
    +
    +class EnrichmentProperties(Model):
    +    """The properties of an enrichment that your IoT hub applies to messages
    +    delivered to endpoints.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key: Required. The key or name for the enrichment property.
    +    :type key: str
    +    :param value: Required. The value for the enrichment property.
    +    :type value: str
    +    :param endpoint_names: Required. The list of endpoints for which the
    +     enrichment is applied to the message.
    +    :type endpoint_names: list[str]
    +    """
    +
    +    _validation = {
    +        'key': {'required': True},
    +        'value': {'required': True},
    +        'endpoint_names': {'required': True, 'min_items': 1},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, *, key: str, value: str, endpoint_names, **kwargs) -> None:
    +        super(EnrichmentProperties, self).__init__(**kwargs)
    +        self.key = key
    +        self.value = value
    +        self.endpoint_names = endpoint_names
    +
    +
    +class ErrorDetails(Model):
    +    """Error details.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: The error code.
    +    :vartype code: str
    +    :ivar http_status_code: The HTTP status code.
    +    :vartype http_status_code: str
    +    :ivar message: The error message.
    +    :vartype message: str
    +    :ivar details: The error details.
    +    :vartype details: str
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'http_status_code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'details': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'http_status_code': {'key': 'httpStatusCode', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'details': {'key': 'details', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(ErrorDetails, self).__init__(**kwargs)
    +        self.code = None
    +        self.http_status_code = None
    +        self.message = None
    +        self.details = None
    +
    +
    +class ErrorDetailsException(HttpOperationError):
    +    """Server responsed with exception of type: 'ErrorDetails'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, deserialize, response, *args):
    +
    +        super(ErrorDetailsException, self).__init__(deserialize, response, 'ErrorDetails', *args)
    +
    +
    +class EventHubConsumerGroupInfo(Model):
    +    """The properties of the EventHubConsumerGroupInfo object.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param properties: The tags.
    +    :type properties: dict[str, str]
    +    :ivar id: The Event Hub-compatible consumer group identifier.
    +    :vartype id: str
    +    :ivar name: The Event Hub-compatible consumer group name.
    +    :vartype name: str
    +    :ivar type: the resource type.
    +    :vartype type: str
    +    :ivar etag: The etag.
    +    :vartype etag: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True},
    +        'type': {'readonly': True},
    +        'etag': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': '{str}'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, properties=None, **kwargs) -> None:
    +        super(EventHubConsumerGroupInfo, self).__init__(**kwargs)
    +        self.properties = properties
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.etag = None
    +
    +
    +class EventHubProperties(Model):
    +    """The properties of the provisioned Event Hub-compatible endpoint used by the
    +    IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param retention_time_in_days: The retention time for device-to-cloud
    +     messages in days. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages
    +    :type retention_time_in_days: long
    +    :param partition_count: The number of partitions for receiving
    +     device-to-cloud messages in the Event Hub-compatible endpoint. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages.
    +    :type partition_count: int
    +    :ivar partition_ids: The partition ids in the Event Hub-compatible
    +     endpoint.
    +    :vartype partition_ids: list[str]
    +    :ivar path: The Event Hub-compatible name.
    +    :vartype path: str
    +    :ivar endpoint: The Event Hub-compatible endpoint.
    +    :vartype endpoint: str
    +    """
    +
    +    _validation = {
    +        'partition_ids': {'readonly': True},
    +        'path': {'readonly': True},
    +        'endpoint': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'retention_time_in_days': {'key': 'retentionTimeInDays', 'type': 'long'},
    +        'partition_count': {'key': 'partitionCount', 'type': 'int'},
    +        'partition_ids': {'key': 'partitionIds', 'type': '[str]'},
    +        'path': {'key': 'path', 'type': 'str'},
    +        'endpoint': {'key': 'endpoint', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, retention_time_in_days: int=None, partition_count: int=None, **kwargs) -> None:
    +        super(EventHubProperties, self).__init__(**kwargs)
    +        self.retention_time_in_days = retention_time_in_days
    +        self.partition_count = partition_count
    +        self.partition_ids = None
    +        self.path = None
    +        self.endpoint = None
    +
    +
    +class ExportDevicesRequest(Model):
    +    """Use to provide parameters when requesting an export of all devices in the
    +    IoT hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param export_blob_container_uri: Required. The export blob container URI.
    +    :type export_blob_container_uri: str
    +    :param exclude_keys: Required. The value indicating whether keys should be
    +     excluded during export.
    +    :type exclude_keys: bool
    +    """
    +
    +    _validation = {
    +        'export_blob_container_uri': {'required': True},
    +        'exclude_keys': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'export_blob_container_uri': {'key': 'exportBlobContainerUri', 'type': 'str'},
    +        'exclude_keys': {'key': 'excludeKeys', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, export_blob_container_uri: str, exclude_keys: bool, **kwargs) -> None:
    +        super(ExportDevicesRequest, self).__init__(**kwargs)
    +        self.export_blob_container_uri = export_blob_container_uri
    +        self.exclude_keys = exclude_keys
    +
    +
    +class FailoverInput(Model):
    +    """Use to provide failover region when requesting manual Failover for a hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param failover_region: Required. Region the hub will be failed over to
    +    :type failover_region: str
    +    """
    +
    +    _validation = {
    +        'failover_region': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'failover_region': {'key': 'failoverRegion', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, failover_region: str, **kwargs) -> None:
    +        super(FailoverInput, self).__init__(**kwargs)
    +        self.failover_region = failover_region
    +
    +
    +class FallbackRouteProperties(Model):
    +    """The properties of the fallback route. IoT Hub uses these properties when it
    +    routes messages to the fallback endpoint.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: The name of the route. The name can only include alphanumeric
    +     characters, periods, underscores, hyphens, has a maximum length of 64
    +     characters, and must be unique.
    +    :type name: str
    +    :ivar source: Required. The source to which the routing rule is to be
    +     applied to. For example, DeviceMessages. Default value: "DeviceMessages" .
    +    :vartype source: str
    +    :param condition: The condition which is evaluated in order to apply the
    +     fallback route. If the condition is not provided it will evaluate to true
    +     by default. For grammar, See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
    +    :type condition: str
    +    :param endpoint_names: Required. The list of endpoints to which the
    +     messages that satisfy the condition are routed to. Currently only 1
    +     endpoint is allowed.
    +    :type endpoint_names: list[str]
    +    :param is_enabled: Required. Used to specify whether the fallback route is
    +     enabled.
    +    :type is_enabled: bool
    +    """
    +
    +    _validation = {
    +        'source': {'required': True, 'constant': True},
    +        'endpoint_names': {'required': True, 'max_items': 1, 'min_items': 1},
    +        'is_enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'condition': {'key': 'condition', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +        'is_enabled': {'key': 'isEnabled', 'type': 'bool'},
    +    }
    +
    +    source = "DeviceMessages"
    +
    +    def __init__(self, *, endpoint_names, is_enabled: bool, name: str=None, condition: str=None, **kwargs) -> None:
    +        super(FallbackRouteProperties, self).__init__(**kwargs)
    +        self.name = name
    +        self.condition = condition
    +        self.endpoint_names = endpoint_names
    +        self.is_enabled = is_enabled
    +
    +
    +class FeedbackProperties(Model):
    +    """The properties of the feedback queue for cloud-to-device messages.
    +
    +    :param lock_duration_as_iso8601: The lock duration for the feedback queue.
    +     See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type lock_duration_as_iso8601: timedelta
    +    :param ttl_as_iso8601: The period of time for which a message is available
    +     to consume before it is expired by the IoT hub. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type ttl_as_iso8601: timedelta
    +    :param max_delivery_count: The number of times the IoT hub attempts to
    +     deliver a message on the feedback queue. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
    +    :type max_delivery_count: int
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lock_duration_as_iso8601': {'key': 'lockDurationAsIso8601', 'type': 'duration'},
    +        'ttl_as_iso8601': {'key': 'ttlAsIso8601', 'type': 'duration'},
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, lock_duration_as_iso8601=None, ttl_as_iso8601=None, max_delivery_count: int=None, **kwargs) -> None:
    +        super(FeedbackProperties, self).__init__(**kwargs)
    +        self.lock_duration_as_iso8601 = lock_duration_as_iso8601
    +        self.ttl_as_iso8601 = ttl_as_iso8601
    +        self.max_delivery_count = max_delivery_count
    +
    +
    +class ImportDevicesRequest(Model):
    +    """Use to provide parameters when requesting an import of all devices in the
    +    hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param input_blob_container_uri: Required. The input blob container URI.
    +    :type input_blob_container_uri: str
    +    :param output_blob_container_uri: Required. The output blob container URI.
    +    :type output_blob_container_uri: str
    +    """
    +
    +    _validation = {
    +        'input_blob_container_uri': {'required': True},
    +        'output_blob_container_uri': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'input_blob_container_uri': {'key': 'inputBlobContainerUri', 'type': 'str'},
    +        'output_blob_container_uri': {'key': 'outputBlobContainerUri', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, input_blob_container_uri: str, output_blob_container_uri: str, **kwargs) -> None:
    +        super(ImportDevicesRequest, self).__init__(**kwargs)
    +        self.input_blob_container_uri = input_blob_container_uri
    +        self.output_blob_container_uri = output_blob_container_uri
    +
    +
    +class IotHubCapacity(Model):
    +    """IoT Hub capacity information.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar minimum: The minimum number of units.
    +    :vartype minimum: long
    +    :ivar maximum: The maximum number of units.
    +    :vartype maximum: long
    +    :ivar default: The default number of units.
    +    :vartype default: long
    +    :ivar scale_type: The type of the scaling enabled. Possible values
    +     include: 'Automatic', 'Manual', 'None'
    +    :vartype scale_type: str or ~azure.mgmt.iothub.models.IotHubScaleType
    +    """
    +
    +    _validation = {
    +        'minimum': {'readonly': True, 'maximum': 1, 'minimum': 1},
    +        'maximum': {'readonly': True},
    +        'default': {'readonly': True},
    +        'scale_type': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'minimum': {'key': 'minimum', 'type': 'long'},
    +        'maximum': {'key': 'maximum', 'type': 'long'},
    +        'default': {'key': 'default', 'type': 'long'},
    +        'scale_type': {'key': 'scaleType', 'type': 'IotHubScaleType'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(IotHubCapacity, self).__init__(**kwargs)
    +        self.minimum = None
    +        self.maximum = None
    +        self.default = None
    +        self.scale_type = None
    +
    +
    +class Resource(Model):
    +    """The common properties of an Azure resource.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The resource name.
    +    :vartype name: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    :param location: Required. The resource location.
    +    :type location: str
    +    :param tags: The resource tags.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True, 'pattern': r'^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{2,49}[a-zA-Z0-9]$'},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, location: str, tags=None, **kwargs) -> None:
    +        super(Resource, self).__init__(**kwargs)
    +        self.id = None
    +        self.name = None
    +        self.type = None
    +        self.location = location
    +        self.tags = tags
    +
    +
    +class IotHubDescription(Resource):
    +    """The description of the IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar id: The resource identifier.
    +    :vartype id: str
    +    :ivar name: The resource name.
    +    :vartype name: str
    +    :ivar type: The resource type.
    +    :vartype type: str
    +    :param location: Required. The resource location.
    +    :type location: str
    +    :param tags: The resource tags.
    +    :type tags: dict[str, str]
    +    :param etag: The Etag field is *not* required. If it is provided in the
    +     response body, it must also be provided as a header per the normal ETag
    +     convention.
    +    :type etag: str
    +    :param properties: IotHub properties
    +    :type properties: ~azure.mgmt.iothub.models.IotHubProperties
    +    :param sku: Required. IotHub SKU info
    +    :type sku: ~azure.mgmt.iothub.models.IotHubSkuInfo
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'name': {'readonly': True, 'pattern': r'^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{2,49}[a-zA-Z0-9]$'},
    +        'type': {'readonly': True},
    +        'location': {'required': True},
    +        'sku': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'etag': {'key': 'etag', 'type': 'str'},
    +        'properties': {'key': 'properties', 'type': 'IotHubProperties'},
    +        'sku': {'key': 'sku', 'type': 'IotHubSkuInfo'},
    +    }
    +
    +    def __init__(self, *, location: str, sku, tags=None, etag: str=None, properties=None, **kwargs) -> None:
    +        super(IotHubDescription, self).__init__(location=location, tags=tags, **kwargs)
    +        self.etag = etag
    +        self.properties = properties
    +        self.sku = sku
    +
    +
    +class IotHubLocationDescription(Model):
    +    """Public representation of one of the locations where a resource is
    +    provisioned.
    +
    +    :param location: Azure Geo Regions
    +    :type location: str
    +    :param role: Specific Role assigned to this location. Possible values
    +     include: 'primary', 'secondary'
    +    :type role: str or ~azure.mgmt.iothub.models.IotHubReplicaRoleType
    +    """
    +
    +    _attribute_map = {
    +        'location': {'key': 'location', 'type': 'str'},
    +        'role': {'key': 'role', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, location: str=None, role=None, **kwargs) -> None:
    +        super(IotHubLocationDescription, self).__init__(**kwargs)
    +        self.location = location
    +        self.role = role
    +
    +
    +class IotHubNameAvailabilityInfo(Model):
    +    """The properties indicating whether a given IoT hub name is available.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name_available: The value which indicates whether the provided name
    +     is available.
    +    :vartype name_available: bool
    +    :ivar reason: The reason for unavailability. Possible values include:
    +     'Invalid', 'AlreadyExists'
    +    :vartype reason: str or
    +     ~azure.mgmt.iothub.models.IotHubNameUnavailabilityReason
    +    :param message: The detailed reason message.
    +    :type message: str
    +    """
    +
    +    _validation = {
    +        'name_available': {'readonly': True},
    +        'reason': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name_available': {'key': 'nameAvailable', 'type': 'bool'},
    +        'reason': {'key': 'reason', 'type': 'IotHubNameUnavailabilityReason'},
    +        'message': {'key': 'message', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, message: str=None, **kwargs) -> None:
    +        super(IotHubNameAvailabilityInfo, self).__init__(**kwargs)
    +        self.name_available = None
    +        self.reason = None
    +        self.message = message
    +
    +
    +class IotHubProperties(Model):
    +    """The properties of an IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param authorization_policies: The shared access policies you can use to
    +     secure a connection to the IoT hub.
    +    :type authorization_policies:
    +     list[~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRule]
    +    :param ip_filter_rules: The IP filter rules.
    +    :type ip_filter_rules: list[~azure.mgmt.iothub.models.IpFilterRule]
    +    :ivar provisioning_state: The provisioning state.
    +    :vartype provisioning_state: str
    +    :ivar state: The hub state.
    +    :vartype state: str
    +    :ivar host_name: The name of the host.
    +    :vartype host_name: str
    +    :param event_hub_endpoints: The Event Hub-compatible endpoint properties.
    +     The only possible keys to this dictionary is events. This key has to be
    +     present in the dictionary while making create or update calls for the IoT
    +     hub.
    +    :type event_hub_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.EventHubProperties]
    +    :param routing:
    +    :type routing: ~azure.mgmt.iothub.models.RoutingProperties
    +    :param storage_endpoints: The list of Azure Storage endpoints where you
    +     can upload files. Currently you can configure only one Azure Storage
    +     account and that MUST have its key as $default. Specifying more than one
    +     storage account causes an error to be thrown. Not specifying a value for
    +     this property when the enableFileUploadNotifications property is set to
    +     True, causes an error to be thrown.
    +    :type storage_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.StorageEndpointProperties]
    +    :param messaging_endpoints: The messaging endpoint properties for the file
    +     upload notification queue.
    +    :type messaging_endpoints: dict[str,
    +     ~azure.mgmt.iothub.models.MessagingEndpointProperties]
    +    :param enable_file_upload_notifications: If True, file upload
    +     notifications are enabled.
    +    :type enable_file_upload_notifications: bool
    +    :param cloud_to_device:
    +    :type cloud_to_device: ~azure.mgmt.iothub.models.CloudToDeviceProperties
    +    :param comments: IoT hub comments.
    +    :type comments: str
    +    :param device_streams: The device streams properties of iothub.
    +    :type device_streams:
    +     ~azure.mgmt.iothub.models.IotHubPropertiesDeviceStreams
    +    :param features: The capabilities and features enabled for the IoT hub.
    +     Possible values include: 'None', 'DeviceManagement'
    +    :type features: str or ~azure.mgmt.iothub.models.Capabilities
    +    :ivar locations: Primary and secondary location for iot hub
    +    :vartype locations:
    +     list[~azure.mgmt.iothub.models.IotHubLocationDescription]
    +    """
    +
    +    _validation = {
    +        'provisioning_state': {'readonly': True},
    +        'state': {'readonly': True},
    +        'host_name': {'readonly': True},
    +        'locations': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'authorization_policies': {'key': 'authorizationPolicies', 'type': '[SharedAccessSignatureAuthorizationRule]'},
    +        'ip_filter_rules': {'key': 'ipFilterRules', 'type': '[IpFilterRule]'},
    +        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
    +        'state': {'key': 'state', 'type': 'str'},
    +        'host_name': {'key': 'hostName', 'type': 'str'},
    +        'event_hub_endpoints': {'key': 'eventHubEndpoints', 'type': '{EventHubProperties}'},
    +        'routing': {'key': 'routing', 'type': 'RoutingProperties'},
    +        'storage_endpoints': {'key': 'storageEndpoints', 'type': '{StorageEndpointProperties}'},
    +        'messaging_endpoints': {'key': 'messagingEndpoints', 'type': '{MessagingEndpointProperties}'},
    +        'enable_file_upload_notifications': {'key': 'enableFileUploadNotifications', 'type': 'bool'},
    +        'cloud_to_device': {'key': 'cloudToDevice', 'type': 'CloudToDeviceProperties'},
    +        'comments': {'key': 'comments', 'type': 'str'},
    +        'device_streams': {'key': 'deviceStreams', 'type': 'IotHubPropertiesDeviceStreams'},
    +        'features': {'key': 'features', 'type': 'str'},
    +        'locations': {'key': 'locations', 'type': '[IotHubLocationDescription]'},
    +    }
    +
    +    def __init__(self, *, authorization_policies=None, ip_filter_rules=None, event_hub_endpoints=None, routing=None, storage_endpoints=None, messaging_endpoints=None, enable_file_upload_notifications: bool=None, cloud_to_device=None, comments: str=None, device_streams=None, features=None, **kwargs) -> None:
    +        super(IotHubProperties, self).__init__(**kwargs)
    +        self.authorization_policies = authorization_policies
    +        self.ip_filter_rules = ip_filter_rules
    +        self.provisioning_state = None
    +        self.state = None
    +        self.host_name = None
    +        self.event_hub_endpoints = event_hub_endpoints
    +        self.routing = routing
    +        self.storage_endpoints = storage_endpoints
    +        self.messaging_endpoints = messaging_endpoints
    +        self.enable_file_upload_notifications = enable_file_upload_notifications
    +        self.cloud_to_device = cloud_to_device
    +        self.comments = comments
    +        self.device_streams = device_streams
    +        self.features = features
    +        self.locations = None
    +
    +
    +class IotHubPropertiesDeviceStreams(Model):
    +    """The device streams properties of iothub.
    +
    +    :param streaming_endpoints: List of Device Streams Endpoints.
    +    :type streaming_endpoints: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'streaming_endpoints': {'key': 'streamingEndpoints', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, *, streaming_endpoints=None, **kwargs) -> None:
    +        super(IotHubPropertiesDeviceStreams, self).__init__(**kwargs)
    +        self.streaming_endpoints = streaming_endpoints
    +
    +
    +class IotHubQuotaMetricInfo(Model):
    +    """Quota metrics properties.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name: The name of the quota metric.
    +    :vartype name: str
    +    :ivar current_value: The current value for the quota metric.
    +    :vartype current_value: long
    +    :ivar max_value: The maximum value of the quota metric.
    +    :vartype max_value: long
    +    """
    +
    +    _validation = {
    +        'name': {'readonly': True},
    +        'current_value': {'readonly': True},
    +        'max_value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'current_value': {'key': 'currentValue', 'type': 'long'},
    +        'max_value': {'key': 'maxValue', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(IotHubQuotaMetricInfo, self).__init__(**kwargs)
    +        self.name = None
    +        self.current_value = None
    +        self.max_value = None
    +
    +
    +class IotHubSkuDescription(Model):
    +    """SKU properties.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :ivar resource_type: The type of the resource.
    +    :vartype resource_type: str
    +    :param sku: Required. The type of the resource.
    +    :type sku: ~azure.mgmt.iothub.models.IotHubSkuInfo
    +    :param capacity: Required. IotHub capacity
    +    :type capacity: ~azure.mgmt.iothub.models.IotHubCapacity
    +    """
    +
    +    _validation = {
    +        'resource_type': {'readonly': True},
    +        'sku': {'required': True},
    +        'capacity': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'resource_type': {'key': 'resourceType', 'type': 'str'},
    +        'sku': {'key': 'sku', 'type': 'IotHubSkuInfo'},
    +        'capacity': {'key': 'capacity', 'type': 'IotHubCapacity'},
    +    }
    +
    +    def __init__(self, *, sku, capacity, **kwargs) -> None:
    +        super(IotHubSkuDescription, self).__init__(**kwargs)
    +        self.resource_type = None
    +        self.sku = sku
    +        self.capacity = capacity
    +
    +
    +class IotHubSkuInfo(Model):
    +    """Information about the SKU of the IoT hub.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the SKU. Possible values include: 'F1',
    +     'S1', 'S2', 'S3', 'B1', 'B2', 'B3'
    +    :type name: str or ~azure.mgmt.iothub.models.IotHubSku
    +    :ivar tier: The billing tier for the IoT hub. Possible values include:
    +     'Free', 'Standard', 'Basic'
    +    :vartype tier: str or ~azure.mgmt.iothub.models.IotHubSkuTier
    +    :param capacity: The number of provisioned IoT Hub units. See:
    +     https://docs.microsoft.com/azure/azure-subscription-service-limits#iot-hub-limits.
    +    :type capacity: long
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +        'tier': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'tier': {'key': 'tier', 'type': 'IotHubSkuTier'},
    +        'capacity': {'key': 'capacity', 'type': 'long'},
    +    }
    +
    +    def __init__(self, *, name, capacity: int=None, **kwargs) -> None:
    +        super(IotHubSkuInfo, self).__init__(**kwargs)
    +        self.name = name
    +        self.tier = None
    +        self.capacity = capacity
    +
    +
    +class IpFilterRule(Model):
    +    """The IP filter rules for the IoT hub.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param filter_name: Required. The name of the IP filter rule.
    +    :type filter_name: str
    +    :param action: Required. The desired action for requests captured by this
    +     rule. Possible values include: 'Accept', 'Reject'
    +    :type action: str or ~azure.mgmt.iothub.models.IpFilterActionType
    +    :param ip_mask: Required. A string that contains the IP address range in
    +     CIDR notation for the rule.
    +    :type ip_mask: str
    +    """
    +
    +    _validation = {
    +        'filter_name': {'required': True},
    +        'action': {'required': True},
    +        'ip_mask': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'filter_name': {'key': 'filterName', 'type': 'str'},
    +        'action': {'key': 'action', 'type': 'IpFilterActionType'},
    +        'ip_mask': {'key': 'ipMask', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, filter_name: str, action, ip_mask: str, **kwargs) -> None:
    +        super(IpFilterRule, self).__init__(**kwargs)
    +        self.filter_name = filter_name
    +        self.action = action
    +        self.ip_mask = ip_mask
    +
    +
    +class JobResponse(Model):
    +    """The properties of the Job Response object.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar job_id: The job identifier.
    +    :vartype job_id: str
    +    :ivar start_time_utc: The start time of the job.
    +    :vartype start_time_utc: datetime
    +    :ivar end_time_utc: The time the job stopped processing.
    +    :vartype end_time_utc: datetime
    +    :ivar type: The type of the job. Possible values include: 'unknown',
    +     'export', 'import', 'backup', 'readDeviceProperties',
    +     'writeDeviceProperties', 'updateDeviceConfiguration', 'rebootDevice',
    +     'factoryResetDevice', 'firmwareUpdate'
    +    :vartype type: str or ~azure.mgmt.iothub.models.JobType
    +    :ivar status: The status of the job. Possible values include: 'unknown',
    +     'enqueued', 'running', 'completed', 'failed', 'cancelled'
    +    :vartype status: str or ~azure.mgmt.iothub.models.JobStatus
    +    :ivar failure_reason: If status == failed, this string containing the
    +     reason for the failure.
    +    :vartype failure_reason: str
    +    :ivar status_message: The status message for the job.
    +    :vartype status_message: str
    +    :ivar parent_job_id: The job identifier of the parent job, if any.
    +    :vartype parent_job_id: str
    +    """
    +
    +    _validation = {
    +        'job_id': {'readonly': True},
    +        'start_time_utc': {'readonly': True},
    +        'end_time_utc': {'readonly': True},
    +        'type': {'readonly': True},
    +        'status': {'readonly': True},
    +        'failure_reason': {'readonly': True},
    +        'status_message': {'readonly': True},
    +        'parent_job_id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'job_id': {'key': 'jobId', 'type': 'str'},
    +        'start_time_utc': {'key': 'startTimeUtc', 'type': 'rfc-1123'},
    +        'end_time_utc': {'key': 'endTimeUtc', 'type': 'rfc-1123'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'status': {'key': 'status', 'type': 'JobStatus'},
    +        'failure_reason': {'key': 'failureReason', 'type': 'str'},
    +        'status_message': {'key': 'statusMessage', 'type': 'str'},
    +        'parent_job_id': {'key': 'parentJobId', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(JobResponse, self).__init__(**kwargs)
    +        self.job_id = None
    +        self.start_time_utc = None
    +        self.end_time_utc = None
    +        self.type = None
    +        self.status = None
    +        self.failure_reason = None
    +        self.status_message = None
    +        self.parent_job_id = None
    +
    +
    +class MatchedRoute(Model):
    +    """Routes that matched.
    +
    +    :param properties: Properties of routes that matched
    +    :type properties: ~azure.mgmt.iothub.models.RouteProperties
    +    """
    +
    +    _attribute_map = {
    +        'properties': {'key': 'properties', 'type': 'RouteProperties'},
    +    }
    +
    +    def __init__(self, *, properties=None, **kwargs) -> None:
    +        super(MatchedRoute, self).__init__(**kwargs)
    +        self.properties = properties
    +
    +
    +class MessagingEndpointProperties(Model):
    +    """The properties of the messaging endpoints used by this IoT hub.
    +
    +    :param lock_duration_as_iso8601: The lock duration. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type lock_duration_as_iso8601: timedelta
    +    :param ttl_as_iso8601: The period of time for which a message is available
    +     to consume before it is expired by the IoT hub. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type ttl_as_iso8601: timedelta
    +    :param max_delivery_count: The number of times the IoT hub attempts to
    +     deliver a message. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
    +    :type max_delivery_count: int
    +    """
    +
    +    _validation = {
    +        'max_delivery_count': {'maximum': 100, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lock_duration_as_iso8601': {'key': 'lockDurationAsIso8601', 'type': 'duration'},
    +        'ttl_as_iso8601': {'key': 'ttlAsIso8601', 'type': 'duration'},
    +        'max_delivery_count': {'key': 'maxDeliveryCount', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, lock_duration_as_iso8601=None, ttl_as_iso8601=None, max_delivery_count: int=None, **kwargs) -> None:
    +        super(MessagingEndpointProperties, self).__init__(**kwargs)
    +        self.lock_duration_as_iso8601 = lock_duration_as_iso8601
    +        self.ttl_as_iso8601 = ttl_as_iso8601
    +        self.max_delivery_count = max_delivery_count
    +
    +
    +class Name(Model):
    +    """Name of Iot Hub type.
    +
    +    :param value: IotHub type
    +    :type value: str
    +    :param localized_value: Localized value of name
    +    :type localized_value: str
    +    """
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'localized_value': {'key': 'localizedValue', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, value: str=None, localized_value: str=None, **kwargs) -> None:
    +        super(Name, self).__init__(**kwargs)
    +        self.value = value
    +        self.localized_value = localized_value
    +
    +
    +class Operation(Model):
    +    """IoT Hub REST API operation.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar name: Operation name: {provider}/{resource}/{read | write | action |
    +     delete}
    +    :vartype name: str
    +    :param display: The object that represents the operation.
    +    :type display: ~azure.mgmt.iothub.models.OperationDisplay
    +    """
    +
    +    _validation = {
    +        'name': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'display': {'key': 'display', 'type': 'OperationDisplay'},
    +    }
    +
    +    def __init__(self, *, display=None, **kwargs) -> None:
    +        super(Operation, self).__init__(**kwargs)
    +        self.name = None
    +        self.display = display
    +
    +
    +class OperationDisplay(Model):
    +    """The object that represents the operation.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar provider: Service provider: Microsoft Devices
    +    :vartype provider: str
    +    :ivar resource: Resource Type: IotHubs
    +    :vartype resource: str
    +    :ivar operation: Name of the operation
    +    :vartype operation: str
    +    :ivar description: Description of the operation
    +    :vartype description: str
    +    """
    +
    +    _validation = {
    +        'provider': {'readonly': True},
    +        'resource': {'readonly': True},
    +        'operation': {'readonly': True},
    +        'description': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'resource': {'key': 'resource', 'type': 'str'},
    +        'operation': {'key': 'operation', 'type': 'str'},
    +        'description': {'key': 'description', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(OperationDisplay, self).__init__(**kwargs)
    +        self.provider = None
    +        self.resource = None
    +        self.operation = None
    +        self.description = None
    +
    +
    +class OperationInputs(Model):
    +    """Input values.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the IoT hub to check.
    +    :type name: str
    +    """
    +
    +    _validation = {
    +        'name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, name: str, **kwargs) -> None:
    +        super(OperationInputs, self).__init__(**kwargs)
    +        self.name = name
    +
    +
    +class RegistryStatistics(Model):
    +    """Identity registry statistics.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar total_device_count: The total count of devices in the identity
    +     registry.
    +    :vartype total_device_count: long
    +    :ivar enabled_device_count: The count of enabled devices in the identity
    +     registry.
    +    :vartype enabled_device_count: long
    +    :ivar disabled_device_count: The count of disabled devices in the identity
    +     registry.
    +    :vartype disabled_device_count: long
    +    """
    +
    +    _validation = {
    +        'total_device_count': {'readonly': True},
    +        'enabled_device_count': {'readonly': True},
    +        'disabled_device_count': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'total_device_count': {'key': 'totalDeviceCount', 'type': 'long'},
    +        'enabled_device_count': {'key': 'enabledDeviceCount', 'type': 'long'},
    +        'disabled_device_count': {'key': 'disabledDeviceCount', 'type': 'long'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(RegistryStatistics, self).__init__(**kwargs)
    +        self.total_device_count = None
    +        self.enabled_device_count = None
    +        self.disabled_device_count = None
    +
    +
    +class RouteCompilationError(Model):
    +    """Compilation error when evaluating route.
    +
    +    :param message: Route error message
    +    :type message: str
    +    :param severity: Severity of the route error. Possible values include:
    +     'error', 'warning'
    +    :type severity: str or ~azure.mgmt.iothub.models.RouteErrorSeverity
    +    :param location: Location where the route error happened
    +    :type location: ~azure.mgmt.iothub.models.RouteErrorRange
    +    """
    +
    +    _attribute_map = {
    +        'message': {'key': 'message', 'type': 'str'},
    +        'severity': {'key': 'severity', 'type': 'str'},
    +        'location': {'key': 'location', 'type': 'RouteErrorRange'},
    +    }
    +
    +    def __init__(self, *, message: str=None, severity=None, location=None, **kwargs) -> None:
    +        super(RouteCompilationError, self).__init__(**kwargs)
    +        self.message = message
    +        self.severity = severity
    +        self.location = location
    +
    +
    +class RouteErrorPosition(Model):
    +    """Position where the route error happened.
    +
    +    :param line: Line where the route error happened
    +    :type line: int
    +    :param column: Column where the route error happened
    +    :type column: int
    +    """
    +
    +    _attribute_map = {
    +        'line': {'key': 'line', 'type': 'int'},
    +        'column': {'key': 'column', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, line: int=None, column: int=None, **kwargs) -> None:
    +        super(RouteErrorPosition, self).__init__(**kwargs)
    +        self.line = line
    +        self.column = column
    +
    +
    +class RouteErrorRange(Model):
    +    """Range of route errors.
    +
    +    :param start: Start where the route error happened
    +    :type start: ~azure.mgmt.iothub.models.RouteErrorPosition
    +    :param end: End where the route error happened
    +    :type end: ~azure.mgmt.iothub.models.RouteErrorPosition
    +    """
    +
    +    _attribute_map = {
    +        'start': {'key': 'start', 'type': 'RouteErrorPosition'},
    +        'end': {'key': 'end', 'type': 'RouteErrorPosition'},
    +    }
    +
    +    def __init__(self, *, start=None, end=None, **kwargs) -> None:
    +        super(RouteErrorRange, self).__init__(**kwargs)
    +        self.start = start
    +        self.end = end
    +
    +
    +class RouteProperties(Model):
    +    """The properties of a routing rule that your IoT hub uses to route messages
    +    to endpoints.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param name: Required. The name of the route. The name can only include
    +     alphanumeric characters, periods, underscores, hyphens, has a maximum
    +     length of 64 characters, and must be unique.
    +    :type name: str
    +    :param source: Required. The source that the routing rule is to be applied
    +     to, such as DeviceMessages. Possible values include: 'Invalid',
    +     'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents',
    +     'DeviceJobLifecycleEvents', 'DigitalTwinChangeEvents'
    +    :type source: str or ~azure.mgmt.iothub.models.RoutingSource
    +    :param condition: The condition that is evaluated to apply the routing
    +     rule. If no condition is provided, it evaluates to true by default. For
    +     grammar, see:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
    +    :type condition: str
    +    :param endpoint_names: Required. The list of endpoints to which messages
    +     that satisfy the condition are routed. Currently only one endpoint is
    +     allowed.
    +    :type endpoint_names: list[str]
    +    :param is_enabled: Required. Used to specify whether a route is enabled.
    +    :type is_enabled: bool
    +    """
    +
    +    _validation = {
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +        'source': {'required': True},
    +        'endpoint_names': {'required': True, 'max_items': 1, 'min_items': 1},
    +        'is_enabled': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'source': {'key': 'source', 'type': 'str'},
    +        'condition': {'key': 'condition', 'type': 'str'},
    +        'endpoint_names': {'key': 'endpointNames', 'type': '[str]'},
    +        'is_enabled': {'key': 'isEnabled', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, name: str, source, endpoint_names, is_enabled: bool, condition: str=None, **kwargs) -> None:
    +        super(RouteProperties, self).__init__(**kwargs)
    +        self.name = name
    +        self.source = source
    +        self.condition = condition
    +        self.endpoint_names = endpoint_names
    +        self.is_enabled = is_enabled
    +
    +
    +class RoutingEndpoints(Model):
    +    """The properties related to the custom endpoints to which your IoT hub routes
    +    messages based on the routing rules. A maximum of 10 custom endpoints are
    +    allowed across all endpoint types for paid hubs and only 1 custom endpoint
    +    is allowed across all endpoint types for free hubs.
    +
    +    :param service_bus_queues: The list of Service Bus queue endpoints that
    +     IoT hub routes the messages to, based on the routing rules.
    +    :type service_bus_queues:
    +     list[~azure.mgmt.iothub.models.RoutingServiceBusQueueEndpointProperties]
    +    :param service_bus_topics: The list of Service Bus topic endpoints that
    +     the IoT hub routes the messages to, based on the routing rules.
    +    :type service_bus_topics:
    +     list[~azure.mgmt.iothub.models.RoutingServiceBusTopicEndpointProperties]
    +    :param event_hubs: The list of Event Hubs endpoints that IoT hub routes
    +     messages to, based on the routing rules. This list does not include the
    +     built-in Event Hubs endpoint.
    +    :type event_hubs:
    +     list[~azure.mgmt.iothub.models.RoutingEventHubProperties]
    +    :param storage_containers: The list of storage container endpoints that
    +     IoT hub routes messages to, based on the routing rules.
    +    :type storage_containers:
    +     list[~azure.mgmt.iothub.models.RoutingStorageContainerProperties]
    +    """
    +
    +    _attribute_map = {
    +        'service_bus_queues': {'key': 'serviceBusQueues', 'type': '[RoutingServiceBusQueueEndpointProperties]'},
    +        'service_bus_topics': {'key': 'serviceBusTopics', 'type': '[RoutingServiceBusTopicEndpointProperties]'},
    +        'event_hubs': {'key': 'eventHubs', 'type': '[RoutingEventHubProperties]'},
    +        'storage_containers': {'key': 'storageContainers', 'type': '[RoutingStorageContainerProperties]'},
    +    }
    +
    +    def __init__(self, *, service_bus_queues=None, service_bus_topics=None, event_hubs=None, storage_containers=None, **kwargs) -> None:
    +        super(RoutingEndpoints, self).__init__(**kwargs)
    +        self.service_bus_queues = service_bus_queues
    +        self.service_bus_topics = service_bus_topics
    +        self.event_hubs = event_hubs
    +        self.storage_containers = storage_containers
    +
    +
    +class RoutingEventHubProperties(Model):
    +    """The properties related to an event hub endpoint.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the event hub
    +     endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the event hub
    +     endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the event hub
    +     endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, name: str, subscription_id: str=None, resource_group: str=None, **kwargs) -> None:
    +        super(RoutingEventHubProperties, self).__init__(**kwargs)
    +        self.connection_string = connection_string
    +        self.name = name
    +        self.subscription_id = subscription_id
    +        self.resource_group = resource_group
    +
    +
    +class RoutingMessage(Model):
    +    """Routing message.
    +
    +    :param body: Body of routing message
    +    :type body: str
    +    :param app_properties: App properties
    +    :type app_properties: dict[str, str]
    +    :param system_properties: System properties
    +    :type system_properties: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'body': {'key': 'body', 'type': 'str'},
    +        'app_properties': {'key': 'appProperties', 'type': '{str}'},
    +        'system_properties': {'key': 'systemProperties', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, body: str=None, app_properties=None, system_properties=None, **kwargs) -> None:
    +        super(RoutingMessage, self).__init__(**kwargs)
    +        self.body = body
    +        self.app_properties = app_properties
    +        self.system_properties = system_properties
    +
    +
    +class RoutingProperties(Model):
    +    """The routing related properties of the IoT hub. See:
    +    https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging.
    +
    +    :param endpoints:
    +    :type endpoints: ~azure.mgmt.iothub.models.RoutingEndpoints
    +    :param routes: The list of user-provided routing rules that the IoT hub
    +     uses to route messages to built-in and custom endpoints. A maximum of 100
    +     routing rules are allowed for paid hubs and a maximum of 5 routing rules
    +     are allowed for free hubs.
    +    :type routes: list[~azure.mgmt.iothub.models.RouteProperties]
    +    :param fallback_route: The properties of the route that is used as a
    +     fall-back route when none of the conditions specified in the 'routes'
    +     section are met. This is an optional parameter. When this property is not
    +     set, the messages which do not meet any of the conditions specified in the
    +     'routes' section get routed to the built-in eventhub endpoint.
    +    :type fallback_route: ~azure.mgmt.iothub.models.FallbackRouteProperties
    +    :param enrichments: The list of user-provided enrichments that the IoT hub
    +     applies to messages to be delivered to built-in and custom endpoints. See:
    +     https://aka.ms/iotmsgenrich
    +    :type enrichments: list[~azure.mgmt.iothub.models.EnrichmentProperties]
    +    """
    +
    +    _attribute_map = {
    +        'endpoints': {'key': 'endpoints', 'type': 'RoutingEndpoints'},
    +        'routes': {'key': 'routes', 'type': '[RouteProperties]'},
    +        'fallback_route': {'key': 'fallbackRoute', 'type': 'FallbackRouteProperties'},
    +        'enrichments': {'key': 'enrichments', 'type': '[EnrichmentProperties]'},
    +    }
    +
    +    def __init__(self, *, endpoints=None, routes=None, fallback_route=None, enrichments=None, **kwargs) -> None:
    +        super(RoutingProperties, self).__init__(**kwargs)
    +        self.endpoints = endpoints
    +        self.routes = routes
    +        self.fallback_route = fallback_route
    +        self.enrichments = enrichments
    +
    +
    +class RoutingServiceBusQueueEndpointProperties(Model):
    +    """The properties related to service bus queue endpoint types.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the service
    +     bus queue endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types. The name need not be the same as the actual
    +     queue name.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the service bus
    +     queue endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the service bus
    +     queue endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, name: str, subscription_id: str=None, resource_group: str=None, **kwargs) -> None:
    +        super(RoutingServiceBusQueueEndpointProperties, self).__init__(**kwargs)
    +        self.connection_string = connection_string
    +        self.name = name
    +        self.subscription_id = subscription_id
    +        self.resource_group = resource_group
    +
    +
    +class RoutingServiceBusTopicEndpointProperties(Model):
    +    """The properties related to service bus topic endpoint types.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the service
    +     bus topic endpoint.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.  The name need not be the same as the actual
    +     topic name.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the service bus
    +     topic endpoint.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the service bus
    +     topic endpoint.
    +    :type resource_group: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, name: str, subscription_id: str=None, resource_group: str=None, **kwargs) -> None:
    +        super(RoutingServiceBusTopicEndpointProperties, self).__init__(**kwargs)
    +        self.connection_string = connection_string
    +        self.name = name
    +        self.subscription_id = subscription_id
    +        self.resource_group = resource_group
    +
    +
    +class RoutingStorageContainerProperties(Model):
    +    """The properties related to a storage container endpoint.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param connection_string: Required. The connection string of the storage
    +     account.
    +    :type connection_string: str
    +    :param name: Required. The name that identifies this endpoint. The name
    +     can only include alphanumeric characters, periods, underscores, hyphens
    +     and has a maximum length of 64 characters. The following names are
    +     reserved:  events, fileNotifications, $default. Endpoint names must be
    +     unique across endpoint types.
    +    :type name: str
    +    :param subscription_id: The subscription identifier of the storage
    +     account.
    +    :type subscription_id: str
    +    :param resource_group: The name of the resource group of the storage
    +     account.
    +    :type resource_group: str
    +    :param container_name: Required. The name of storage container in the
    +     storage account.
    +    :type container_name: str
    +    :param file_name_format: File name format for the blob. Default format is
    +     {iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}. All parameters are
    +     mandatory but can be reordered.
    +    :type file_name_format: str
    +    :param batch_frequency_in_seconds: Time interval at which blobs are
    +     written to storage. Value should be between 60 and 720 seconds. Default
    +     value is 300 seconds.
    +    :type batch_frequency_in_seconds: int
    +    :param max_chunk_size_in_bytes: Maximum number of bytes for each blob
    +     written to storage. Value should be between 10485760(10MB) and
    +     524288000(500MB). Default value is 314572800(300MB).
    +    :type max_chunk_size_in_bytes: int
    +    :param encoding: Encoding that is used to serialize messages to blobs.
    +     Supported values are 'avro', 'avrodeflate', and 'JSON'. Default value is
    +     'avro'. Possible values include: 'Avro', 'AvroDeflate', 'JSON'
    +    :type encoding: str or ~azure.mgmt.iothub.models.enum
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'name': {'required': True, 'pattern': r'^[A-Za-z0-9-._]{1,64}$'},
    +        'container_name': {'required': True},
    +        'batch_frequency_in_seconds': {'maximum': 720, 'minimum': 60},
    +        'max_chunk_size_in_bytes': {'maximum': 524288000, 'minimum': 10485760},
    +    }
    +
    +    _attribute_map = {
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
    +        'resource_group': {'key': 'resourceGroup', 'type': 'str'},
    +        'container_name': {'key': 'containerName', 'type': 'str'},
    +        'file_name_format': {'key': 'fileNameFormat', 'type': 'str'},
    +        'batch_frequency_in_seconds': {'key': 'batchFrequencyInSeconds', 'type': 'int'},
    +        'max_chunk_size_in_bytes': {'key': 'maxChunkSizeInBytes', 'type': 'int'},
    +        'encoding': {'key': 'encoding', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, name: str, container_name: str, subscription_id: str=None, resource_group: str=None, file_name_format: str=None, batch_frequency_in_seconds: int=None, max_chunk_size_in_bytes: int=None, encoding=None, **kwargs) -> None:
    +        super(RoutingStorageContainerProperties, self).__init__(**kwargs)
    +        self.connection_string = connection_string
    +        self.name = name
    +        self.subscription_id = subscription_id
    +        self.resource_group = resource_group
    +        self.container_name = container_name
    +        self.file_name_format = file_name_format
    +        self.batch_frequency_in_seconds = batch_frequency_in_seconds
    +        self.max_chunk_size_in_bytes = max_chunk_size_in_bytes
    +        self.encoding = encoding
    +
    +
    +class RoutingTwin(Model):
    +    """Twin reference input parameter. This is an optional parameter.
    +
    +    :param tags: Twin Tags
    +    :type tags: object
    +    :param properties:
    +    :type properties: ~azure.mgmt.iothub.models.RoutingTwinProperties
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': 'object'},
    +        'properties': {'key': 'properties', 'type': 'RoutingTwinProperties'},
    +    }
    +
    +    def __init__(self, *, tags=None, properties=None, **kwargs) -> None:
    +        super(RoutingTwin, self).__init__(**kwargs)
    +        self.tags = tags
    +        self.properties = properties
    +
    +
    +class RoutingTwinProperties(Model):
    +    """RoutingTwinProperties.
    +
    +    :param desired: Twin desired properties
    +    :type desired: object
    +    :param reported: Twin desired properties
    +    :type reported: object
    +    """
    +
    +    _attribute_map = {
    +        'desired': {'key': 'desired', 'type': 'object'},
    +        'reported': {'key': 'reported', 'type': 'object'},
    +    }
    +
    +    def __init__(self, *, desired=None, reported=None, **kwargs) -> None:
    +        super(RoutingTwinProperties, self).__init__(**kwargs)
    +        self.desired = desired
    +        self.reported = reported
    +
    +
    +class SharedAccessSignatureAuthorizationRule(Model):
    +    """The properties of an IoT hub shared access policy.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_name: Required. The name of the shared access policy.
    +    :type key_name: str
    +    :param primary_key: The primary key.
    +    :type primary_key: str
    +    :param secondary_key: The secondary key.
    +    :type secondary_key: str
    +    :param rights: Required. The permissions assigned to the shared access
    +     policy. Possible values include: 'RegistryRead', 'RegistryWrite',
    +     'ServiceConnect', 'DeviceConnect', 'RegistryRead, RegistryWrite',
    +     'RegistryRead, ServiceConnect', 'RegistryRead, DeviceConnect',
    +     'RegistryWrite, ServiceConnect', 'RegistryWrite, DeviceConnect',
    +     'ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite,
    +     ServiceConnect', 'RegistryRead, RegistryWrite, DeviceConnect',
    +     'RegistryRead, ServiceConnect, DeviceConnect', 'RegistryWrite,
    +     ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite,
    +     ServiceConnect, DeviceConnect'
    +    :type rights: str or ~azure.mgmt.iothub.models.AccessRights
    +    """
    +
    +    _validation = {
    +        'key_name': {'required': True},
    +        'rights': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_name': {'key': 'keyName', 'type': 'str'},
    +        'primary_key': {'key': 'primaryKey', 'type': 'str'},
    +        'secondary_key': {'key': 'secondaryKey', 'type': 'str'},
    +        'rights': {'key': 'rights', 'type': 'AccessRights'},
    +    }
    +
    +    def __init__(self, *, key_name: str, rights, primary_key: str=None, secondary_key: str=None, **kwargs) -> None:
    +        super(SharedAccessSignatureAuthorizationRule, self).__init__(**kwargs)
    +        self.key_name = key_name
    +        self.primary_key = primary_key
    +        self.secondary_key = secondary_key
    +        self.rights = rights
    +
    +
    +class StorageEndpointProperties(Model):
    +    """The properties of the Azure Storage endpoint for file upload.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param sas_ttl_as_iso8601: The period of time for which the SAS URI
    +     generated by IoT Hub for file upload is valid. See:
    +     https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload#file-upload-notification-configuration-options.
    +    :type sas_ttl_as_iso8601: timedelta
    +    :param connection_string: Required. The connection string for the Azure
    +     Storage account to which files are uploaded.
    +    :type connection_string: str
    +    :param container_name: Required. The name of the root container where you
    +     upload files. The container need not exist but should be creatable using
    +     the connectionString specified.
    +    :type container_name: str
    +    """
    +
    +    _validation = {
    +        'connection_string': {'required': True},
    +        'container_name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'sas_ttl_as_iso8601': {'key': 'sasTtlAsIso8601', 'type': 'duration'},
    +        'connection_string': {'key': 'connectionString', 'type': 'str'},
    +        'container_name': {'key': 'containerName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, connection_string: str, container_name: str, sas_ttl_as_iso8601=None, **kwargs) -> None:
    +        super(StorageEndpointProperties, self).__init__(**kwargs)
    +        self.sas_ttl_as_iso8601 = sas_ttl_as_iso8601
    +        self.connection_string = connection_string
    +        self.container_name = container_name
    +
    +
    +class TagsResource(Model):
    +    """A container holding only the Tags for a resource, allowing the user to
    +    update the tags on an IoT Hub instance.
    +
    +    :param tags: Resource tags
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, tags=None, **kwargs) -> None:
    +        super(TagsResource, self).__init__(**kwargs)
    +        self.tags = tags
    +
    +
    +class TestAllRoutesInput(Model):
    +    """Input for testing all routes.
    +
    +    :param routing_source: Routing source. Possible values include: 'Invalid',
    +     'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents',
    +     'DeviceJobLifecycleEvents', 'DigitalTwinChangeEvents'
    +    :type routing_source: str or ~azure.mgmt.iothub.models.RoutingSource
    +    :param message: Routing message
    +    :type message: ~azure.mgmt.iothub.models.RoutingMessage
    +    :param twin: Routing Twin Reference
    +    :type twin: ~azure.mgmt.iothub.models.RoutingTwin
    +    """
    +
    +    _attribute_map = {
    +        'routing_source': {'key': 'routingSource', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'RoutingMessage'},
    +        'twin': {'key': 'twin', 'type': 'RoutingTwin'},
    +    }
    +
    +    def __init__(self, *, routing_source=None, message=None, twin=None, **kwargs) -> None:
    +        super(TestAllRoutesInput, self).__init__(**kwargs)
    +        self.routing_source = routing_source
    +        self.message = message
    +        self.twin = twin
    +
    +
    +class TestAllRoutesResult(Model):
    +    """Result of testing all routes.
    +
    +    :param routes: JSON-serialized array of matched routes
    +    :type routes: list[~azure.mgmt.iothub.models.MatchedRoute]
    +    """
    +
    +    _attribute_map = {
    +        'routes': {'key': 'routes', 'type': '[MatchedRoute]'},
    +    }
    +
    +    def __init__(self, *, routes=None, **kwargs) -> None:
    +        super(TestAllRoutesResult, self).__init__(**kwargs)
    +        self.routes = routes
    +
    +
    +class TestRouteInput(Model):
    +    """Input for testing route.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param message: Routing message
    +    :type message: ~azure.mgmt.iothub.models.RoutingMessage
    +    :param route: Required. Route properties
    +    :type route: ~azure.mgmt.iothub.models.RouteProperties
    +    :param twin: Routing Twin Reference
    +    :type twin: ~azure.mgmt.iothub.models.RoutingTwin
    +    """
    +
    +    _validation = {
    +        'route': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'message': {'key': 'message', 'type': 'RoutingMessage'},
    +        'route': {'key': 'route', 'type': 'RouteProperties'},
    +        'twin': {'key': 'twin', 'type': 'RoutingTwin'},
    +    }
    +
    +    def __init__(self, *, route, message=None, twin=None, **kwargs) -> None:
    +        super(TestRouteInput, self).__init__(**kwargs)
    +        self.message = message
    +        self.route = route
    +        self.twin = twin
    +
    +
    +class TestRouteResult(Model):
    +    """Result of testing one route.
    +
    +    :param result: Result of testing route. Possible values include:
    +     'undefined', 'false', 'true'
    +    :type result: str or ~azure.mgmt.iothub.models.TestResultStatus
    +    :param details: Detailed result of testing route
    +    :type details: ~azure.mgmt.iothub.models.TestRouteResultDetails
    +    """
    +
    +    _attribute_map = {
    +        'result': {'key': 'result', 'type': 'str'},
    +        'details': {'key': 'details', 'type': 'TestRouteResultDetails'},
    +    }
    +
    +    def __init__(self, *, result=None, details=None, **kwargs) -> None:
    +        super(TestRouteResult, self).__init__(**kwargs)
    +        self.result = result
    +        self.details = details
    +
    +
    +class TestRouteResultDetails(Model):
    +    """Detailed result of testing a route.
    +
    +    :param compilation_errors: JSON-serialized list of route compilation
    +     errors
    +    :type compilation_errors:
    +     list[~azure.mgmt.iothub.models.RouteCompilationError]
    +    """
    +
    +    _attribute_map = {
    +        'compilation_errors': {'key': 'compilationErrors', 'type': '[RouteCompilationError]'},
    +    }
    +
    +    def __init__(self, *, compilation_errors=None, **kwargs) -> None:
    +        super(TestRouteResultDetails, self).__init__(**kwargs)
    +        self.compilation_errors = compilation_errors
    +
    +
    +class UserSubscriptionQuota(Model):
    +    """User subscription quota response.
    +
    +    :param id: IotHub type id
    +    :type id: str
    +    :param type: Response type
    +    :type type: str
    +    :param unit: Unit of IotHub type
    +    :type unit: str
    +    :param current_value: Current number of IotHub type
    +    :type current_value: int
    +    :param limit: Numerical limit on IotHub type
    +    :type limit: int
    +    :param name: IotHub type
    +    :type name: ~azure.mgmt.iothub.models.Name
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'type': {'key': 'type', 'type': 'str'},
    +        'unit': {'key': 'unit', 'type': 'str'},
    +        'current_value': {'key': 'currentValue', 'type': 'int'},
    +        'limit': {'key': 'limit', 'type': 'int'},
    +        'name': {'key': 'name', 'type': 'Name'},
    +    }
    +
    +    def __init__(self, *, id: str=None, type: str=None, unit: str=None, current_value: int=None, limit: int=None, name=None, **kwargs) -> None:
    +        super(UserSubscriptionQuota, self).__init__(**kwargs)
    +        self.id = id
    +        self.type = type
    +        self.unit = unit
    +        self.current_value = current_value
    +        self.limit = limit
    +        self.name = name
    +
    +
    +class UserSubscriptionQuotaListResult(Model):
    +    """Json-serialized array of User subscription quota response.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value:
    +    :type value: list[~azure.mgmt.iothub.models.UserSubscriptionQuota]
    +    :ivar next_link:
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[UserSubscriptionQuota]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, value=None, **kwargs) -> None:
    +        super(UserSubscriptionQuotaListResult, self).__init__(**kwargs)
    +        self.value = value
    +        self.next_link = None
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/_paged_models.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/_paged_models.py
    new file mode 100644
    index 000000000000..9efc5c83f755
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/models/_paged_models.py
    @@ -0,0 +1,118 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.paging import Paged
    +
    +
    +class OperationPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`Operation ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[Operation]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(OperationPaged, self).__init__(*args, **kwargs)
    +class IotHubDescriptionPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`IotHubDescription ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[IotHubDescription]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(IotHubDescriptionPaged, self).__init__(*args, **kwargs)
    +class IotHubSkuDescriptionPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`IotHubSkuDescription ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[IotHubSkuDescription]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(IotHubSkuDescriptionPaged, self).__init__(*args, **kwargs)
    +class EventHubConsumerGroupInfoPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`EventHubConsumerGroupInfo ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[EventHubConsumerGroupInfo]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(EventHubConsumerGroupInfoPaged, self).__init__(*args, **kwargs)
    +class JobResponsePaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`JobResponse ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[JobResponse]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(JobResponsePaged, self).__init__(*args, **kwargs)
    +class IotHubQuotaMetricInfoPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`IotHubQuotaMetricInfo ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[IotHubQuotaMetricInfo]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(IotHubQuotaMetricInfoPaged, self).__init__(*args, **kwargs)
    +class EndpointHealthDataPaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`EndpointHealthData ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[EndpointHealthData]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(EndpointHealthDataPaged, self).__init__(*args, **kwargs)
    +class SharedAccessSignatureAuthorizationRulePaged(Paged):
    +    """
    +    A paging container for iterating over a list of :class:`SharedAccessSignatureAuthorizationRule ` object
    +    """
    +
    +    _attribute_map = {
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +        'current_page': {'key': 'value', 'type': '[SharedAccessSignatureAuthorizationRule]'}
    +    }
    +
    +    def __init__(self, *args, **kwargs):
    +
    +        super(SharedAccessSignatureAuthorizationRulePaged, self).__init__(*args, **kwargs)
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/__init__.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/__init__.py
    new file mode 100644
    index 000000000000..a30b3dc26f79
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/__init__.py
    @@ -0,0 +1,24 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._operations import Operations
    +from ._iot_hub_resource_operations import IotHubResourceOperations
    +from ._resource_provider_common_operations import ResourceProviderCommonOperations
    +from ._certificates_operations import CertificatesOperations
    +from ._iot_hub_operations import IotHubOperations
    +
    +__all__ = [
    +    'Operations',
    +    'IotHubResourceOperations',
    +    'ResourceProviderCommonOperations',
    +    'CertificatesOperations',
    +    'IotHubOperations',
    +]
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_certificates_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_certificates_operations.py
    new file mode 100644
    index 000000000000..465ea7e3e5c3
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_certificates_operations.py
    @@ -0,0 +1,462 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +
    +from .. import models
    +
    +
    +class CertificatesOperations(object):
    +    """CertificatesOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2019-07-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2019-07-01-preview"
    +
    +        self.config = config
    +
    +    def list_by_iot_hub(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the certificate list.
    +
    +        Returns the list of certificates.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateListDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateListDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.list_by_iot_hub.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateListDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    list_by_iot_hub.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates'}
    +
    +    def get(
    +            self, resource_group_name, resource_name, certificate_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the certificate.
    +
    +        Returns the certificate.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}'}
    +
    +    def create_or_update(
    +            self, resource_group_name, resource_name, certificate_name, if_match=None, certificate=None, custom_headers=None, raw=False, **operation_config):
    +        """Upload the certificate to the IoT hub.
    +
    +        Adds new or replaces existing certificate.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param if_match: ETag of the Certificate. Do not specify for creating
    +         a brand new certificate. Required to update an existing certificate.
    +        :type if_match: str
    +        :param certificate: base-64 representation of the X509 leaf
    +         certificate .cer file or just .pem file content.
    +        :type certificate: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        certificate_description = models.CertificateBodyDescription(certificate=certificate)
    +
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_description, 'CertificateBodyDescription')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateDescription', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('CertificateDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}'}
    +
    +    def delete(
    +            self, resource_group_name, resource_name, certificate_name, if_match, custom_headers=None, raw=False, **operation_config):
    +        """Delete an X509 certificate.
    +
    +        Deletes an existing X509 certificate or does nothing if it does not
    +        exist.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param if_match: ETag of the Certificate.
    +        :type if_match: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: None or ClientRawResponse if raw=true
    +        :rtype: None or ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 204]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}'}
    +
    +    def generate_verification_code(
    +            self, resource_group_name, resource_name, certificate_name, if_match, custom_headers=None, raw=False, **operation_config):
    +        """Generate verification code for proof of possession flow.
    +
    +        Generates verification code for proof of possession flow. The
    +        verification code will be used to generate a leaf certificate.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param if_match: ETag of the Certificate.
    +        :type if_match: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateWithNonceDescription or ClientRawResponse if
    +         raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateWithNonceDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.generate_verification_code.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateWithNonceDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    generate_verification_code.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}/generateVerificationCode'}
    +
    +    def verify(
    +            self, resource_group_name, resource_name, certificate_name, if_match, certificate=None, custom_headers=None, raw=False, **operation_config):
    +        """Verify certificate's private key possession.
    +
    +        Verifies the certificate's private key possession by providing the leaf
    +        cert issued by the verifying pre uploaded certificate.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param if_match: ETag of the Certificate.
    +        :type if_match: str
    +        :param certificate: base-64 representation of X509 certificate .cer
    +         file or just .pem file content.
    +        :type certificate: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: CertificateDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.CertificateDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        certificate_verification_body = models.CertificateVerificationDescription(certificate=certificate)
    +
    +        # Construct URL
    +        url = self.verify.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'certificateName': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[A-Za-z0-9-._]{1,64}$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_verification_body, 'CertificateVerificationDescription')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    verify.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/certificates/{certificateName}/verify'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_iot_hub_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_iot_hub_operations.py
    new file mode 100644
    index 000000000000..dc02947b6c9a
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_iot_hub_operations.py
    @@ -0,0 +1,130 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class IotHubOperations(object):
    +    """IotHubOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2019-07-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2019-07-01-preview"
    +
    +        self.config = config
    +
    +
    +    def _manual_failover_initial(
    +            self, iot_hub_name, resource_group_name, failover_region, custom_headers=None, raw=False, **operation_config):
    +        failover_input = models.FailoverInput(failover_region=failover_region)
    +
    +        # Construct URL
    +        url = self.manual_failover.metadata['url']
    +        path_format_arguments = {
    +            'iotHubName': self._serialize.url("iot_hub_name", iot_hub_name, 'str'),
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(failover_input, 'FailoverInput')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +
    +    def manual_failover(
    +            self, iot_hub_name, resource_group_name, failover_region, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Manual Failover Fail over.
    +
    +        Perform manual fail over of given hub.
    +
    +        :param iot_hub_name: IotHub to fail over
    +        :type iot_hub_name: str
    +        :param resource_group_name: resource group which Iot Hub belongs to
    +        :type resource_group_name: str
    +        :param failover_region: Region the hub will be failed over to
    +        :type failover_region: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns None or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        raw_result = self._manual_failover_initial(
    +            iot_hub_name=iot_hub_name,
    +            resource_group_name=resource_group_name,
    +            failover_region=failover_region,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            if raw:
    +                client_raw_response = ClientRawResponse(None, response)
    +                return client_raw_response
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    manual_failover.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{iotHubName}/failover'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_iot_hub_resource_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_iot_hub_resource_operations.py
    new file mode 100644
    index 000000000000..43154348c51d
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_iot_hub_resource_operations.py
    @@ -0,0 +1,1777 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +from msrestazure.azure_exceptions import CloudError
    +from msrest.polling import LROPoller, NoPolling
    +from msrestazure.polling.arm_polling import ARMPolling
    +
    +from .. import models
    +
    +
    +class IotHubResourceOperations(object):
    +    """IotHubResourceOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2019-07-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2019-07-01-preview"
    +
    +        self.config = config
    +
    +    def get(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the non-security related metadata of an IoT hub.
    +
    +        Get the non-security related metadata of an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: IotHubDescription or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.IotHubDescription or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}'}
    +
    +
    +    def _create_or_update_initial(
    +            self, resource_group_name, resource_name, iot_hub_description, if_match=None, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.create_or_update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if if_match is not None:
    +            header_parameters['If-Match'] = self._serialize.header("if_match", if_match, 'str')
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(iot_hub_description, 'IotHubDescription')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 201]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def create_or_update(
    +            self, resource_group_name, resource_name, iot_hub_description, if_match=None, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Create or update the metadata of an IoT hub.
    +
    +        Create or update the metadata of an Iot hub. The usual pattern to
    +        modify a property is to retrieve the IoT hub metadata and security
    +        metadata, and then combine them with the modified values in a new body
    +        to update the IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param iot_hub_description: The IoT hub metadata and security
    +         metadata.
    +        :type iot_hub_description: ~azure.mgmt.iothub.models.IotHubDescription
    +        :param if_match: ETag of the IoT Hub. Do not specify for creating a
    +         brand new IoT Hub. Required to update an existing IoT Hub.
    +        :type if_match: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns IotHubDescription or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.iothub.models.IotHubDescription]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.iothub.models.IotHubDescription]]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        raw_result = self._create_or_update_initial(
    +            resource_group_name=resource_group_name,
    +            resource_name=resource_name,
    +            iot_hub_description=iot_hub_description,
    +            if_match=if_match,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}'}
    +
    +
    +    def _update_initial(
    +            self, resource_group_name, resource_name, tags=None, custom_headers=None, raw=False, **operation_config):
    +        iot_hub_tags = models.TagsResource(tags=tags)
    +
    +        # Construct URL
    +        url = self.update.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(iot_hub_tags, 'TagsResource')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            exp = CloudError(response)
    +            exp.request_id = response.headers.get('x-ms-request-id')
    +            raise exp
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def update(
    +            self, resource_group_name, resource_name, tags=None, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Update an existing IoT Hubs tags.
    +
    +        Update an existing IoT Hub tags. to update other fields use the
    +        CreateOrUpdate method.
    +
    +        :param resource_group_name: Resource group identifier.
    +        :type resource_group_name: str
    +        :param resource_name: Name of iot hub to update.
    +        :type resource_name: str
    +        :param tags: Resource tags
    +        :type tags: dict[str, str]
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns IotHubDescription or
    +         ClientRawResponse if raw==True
    +        :rtype:
    +         ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.iothub.models.IotHubDescription]
    +         or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.iothub.models.IotHubDescription]]
    +        :raises: :class:`CloudError`
    +        """
    +        raw_result = self._update_initial(
    +            resource_group_name=resource_group_name,
    +            resource_name=resource_name,
    +            tags=tags,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('IotHubDescription', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}'}
    +
    +
    +    def _delete_initial(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        # Construct URL
    +        url = self.delete.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200, 202, 204, 404]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +        if response.status_code == 202:
    +            deserialized = self._deserialize('IotHubDescription', response)
    +        if response.status_code == 404:
    +            deserialized = self._deserialize('ErrorDetails', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +
    +    def delete(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, polling=True, **operation_config):
    +        """Delete an IoT hub.
    +
    +        Delete an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: The poller return type is ClientRawResponse, the
    +         direct response alongside the deserialized response
    +        :param polling: True for ARMPolling, False for no polling, or a
    +         polling object for personal polling strategy
    +        :return: An instance of LROPoller that returns object or
    +         ClientRawResponse if raw==True
    +        :rtype: ~msrestazure.azure_operation.AzureOperationPoller[object] or
    +         ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[object]]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        raw_result = self._delete_initial(
    +            resource_group_name=resource_group_name,
    +            resource_name=resource_name,
    +            custom_headers=custom_headers,
    +            raw=True,
    +            **operation_config
    +        )
    +
    +        def get_long_running_output(response):
    +            deserialized = self._deserialize('object', response)
    +
    +            if raw:
    +                client_raw_response = ClientRawResponse(deserialized, response)
    +                return client_raw_response
    +
    +            return deserialized
    +
    +        lro_delay = operation_config.get(
    +            'long_running_operation_timeout',
    +            self.config.long_running_operation_timeout)
    +        if polling is True: polling_method = ARMPolling(lro_delay, **operation_config)
    +        elif polling is False: polling_method = NoPolling()
    +        else: polling_method = polling
    +        return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
    +    delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}'}
    +
    +    def list_by_subscription(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """Get all the IoT hubs in a subscription.
    +
    +        Get all the IoT hubs in a subscription.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of IotHubDescription
    +        :rtype:
    +         ~azure.mgmt.iothub.models.IotHubDescriptionPaged[~azure.mgmt.iothub.models.IotHubDescription]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_subscription.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.IotHubDescriptionPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Devices/IotHubs'}
    +
    +    def list_by_resource_group(
    +            self, resource_group_name, custom_headers=None, raw=False, **operation_config):
    +        """Get all the IoT hubs in a resource group.
    +
    +        Get all the IoT hubs in a resource group.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of IotHubDescription
    +        :rtype:
    +         ~azure.mgmt.iothub.models.IotHubDescriptionPaged[~azure.mgmt.iothub.models.IotHubDescription]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_by_resource_group.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.IotHubDescriptionPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs'}
    +
    +    def get_stats(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the statistics from an IoT hub.
    +
    +        Get the statistics from an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: RegistryStatistics or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.RegistryStatistics or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_stats.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('RegistryStatistics', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_stats.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/IotHubStats'}
    +
    +    def get_valid_skus(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the list of valid SKUs for an IoT hub.
    +
    +        Get the list of valid SKUs for an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of IotHubSkuDescription
    +        :rtype:
    +         ~azure.mgmt.iothub.models.IotHubSkuDescriptionPaged[~azure.mgmt.iothub.models.IotHubSkuDescription]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_valid_skus.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.IotHubSkuDescriptionPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    get_valid_skus.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/skus'}
    +
    +    def list_event_hub_consumer_groups(
    +            self, resource_group_name, resource_name, event_hub_endpoint_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a list of the consumer groups in the Event Hub-compatible
    +        device-to-cloud endpoint in an IoT hub.
    +
    +        Get a list of the consumer groups in the Event Hub-compatible
    +        device-to-cloud endpoint in an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param event_hub_endpoint_name: The name of the Event Hub-compatible
    +         endpoint.
    +        :type event_hub_endpoint_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of EventHubConsumerGroupInfo
    +        :rtype:
    +         ~azure.mgmt.iothub.models.EventHubConsumerGroupInfoPaged[~azure.mgmt.iothub.models.EventHubConsumerGroupInfo]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_event_hub_consumer_groups.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +                    'eventHubEndpointName': self._serialize.url("event_hub_endpoint_name", event_hub_endpoint_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.EventHubConsumerGroupInfoPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_event_hub_consumer_groups.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/eventHubEndpoints/{eventHubEndpointName}/ConsumerGroups'}
    +
    +    def get_event_hub_consumer_group(
    +            self, resource_group_name, resource_name, event_hub_endpoint_name, name, custom_headers=None, raw=False, **operation_config):
    +        """Get a consumer group from the Event Hub-compatible device-to-cloud
    +        endpoint for an IoT hub.
    +
    +        Get a consumer group from the Event Hub-compatible device-to-cloud
    +        endpoint for an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param event_hub_endpoint_name: The name of the Event Hub-compatible
    +         endpoint in the IoT hub.
    +        :type event_hub_endpoint_name: str
    +        :param name: The name of the consumer group to retrieve.
    +        :type name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EventHubConsumerGroupInfo or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.EventHubConsumerGroupInfo or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_event_hub_consumer_group.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'eventHubEndpointName': self._serialize.url("event_hub_endpoint_name", event_hub_endpoint_name, 'str'),
    +            'name': self._serialize.url("name", name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EventHubConsumerGroupInfo', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_event_hub_consumer_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/eventHubEndpoints/{eventHubEndpointName}/ConsumerGroups/{name}'}
    +
    +    def create_event_hub_consumer_group(
    +            self, resource_group_name, resource_name, event_hub_endpoint_name, name, custom_headers=None, raw=False, **operation_config):
    +        """Add a consumer group to an Event Hub-compatible endpoint in an IoT hub.
    +
    +        Add a consumer group to an Event Hub-compatible endpoint in an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param event_hub_endpoint_name: The name of the Event Hub-compatible
    +         endpoint in the IoT hub.
    +        :type event_hub_endpoint_name: str
    +        :param name: The name of the consumer group to add.
    +        :type name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: EventHubConsumerGroupInfo or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.EventHubConsumerGroupInfo or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.create_event_hub_consumer_group.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'eventHubEndpointName': self._serialize.url("event_hub_endpoint_name", event_hub_endpoint_name, 'str'),
    +            'name': self._serialize.url("name", name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('EventHubConsumerGroupInfo', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    create_event_hub_consumer_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/eventHubEndpoints/{eventHubEndpointName}/ConsumerGroups/{name}'}
    +
    +    def delete_event_hub_consumer_group(
    +            self, resource_group_name, resource_name, event_hub_endpoint_name, name, custom_headers=None, raw=False, **operation_config):
    +        """Delete a consumer group from an Event Hub-compatible endpoint in an IoT
    +        hub.
    +
    +        Delete a consumer group from an Event Hub-compatible endpoint in an IoT
    +        hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param event_hub_endpoint_name: The name of the Event Hub-compatible
    +         endpoint in the IoT hub.
    +        :type event_hub_endpoint_name: str
    +        :param name: The name of the consumer group to delete.
    +        :type name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: None or ClientRawResponse if raw=true
    +        :rtype: None or ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.delete_event_hub_consumer_group.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'eventHubEndpointName': self._serialize.url("event_hub_endpoint_name", event_hub_endpoint_name, 'str'),
    +            'name': self._serialize.url("name", name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(None, response)
    +            return client_raw_response
    +    delete_event_hub_consumer_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/eventHubEndpoints/{eventHubEndpointName}/ConsumerGroups/{name}'}
    +
    +    def list_jobs(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a list of all the jobs in an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry.
    +
    +        Get a list of all the jobs in an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of JobResponse
    +        :rtype:
    +         ~azure.mgmt.iothub.models.JobResponsePaged[~azure.mgmt.iothub.models.JobResponse]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_jobs.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.JobResponsePaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_jobs.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/jobs'}
    +
    +    def get_job(
    +            self, resource_group_name, resource_name, job_id, custom_headers=None, raw=False, **operation_config):
    +        """Get the details of a job from an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry.
    +
    +        Get the details of a job from an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param job_id: The job identifier.
    +        :type job_id: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: JobResponse or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.JobResponse or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_job.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'jobId': self._serialize.url("job_id", job_id, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('JobResponse', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_job.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/jobs/{jobId}'}
    +
    +    def get_quota_metrics(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the quota metrics for an IoT hub.
    +
    +        Get the quota metrics for an IoT hub.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of IotHubQuotaMetricInfo
    +        :rtype:
    +         ~azure.mgmt.iothub.models.IotHubQuotaMetricInfoPaged[~azure.mgmt.iothub.models.IotHubQuotaMetricInfo]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_quota_metrics.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.IotHubQuotaMetricInfoPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    get_quota_metrics.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/quotaMetrics'}
    +
    +    def get_endpoint_health(
    +            self, resource_group_name, iot_hub_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the health for routing endpoints.
    +
    +        Get the health for routing endpoints.
    +
    +        :param resource_group_name:
    +        :type resource_group_name: str
    +        :param iot_hub_name:
    +        :type iot_hub_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of EndpointHealthData
    +        :rtype:
    +         ~azure.mgmt.iothub.models.EndpointHealthDataPaged[~azure.mgmt.iothub.models.EndpointHealthData]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_endpoint_health.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'iotHubName': self._serialize.url("iot_hub_name", iot_hub_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.EndpointHealthDataPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    get_endpoint_health.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{iotHubName}/routingEndpointsHealth'}
    +
    +    def check_name_availability(
    +            self, name, custom_headers=None, raw=False, **operation_config):
    +        """Check if an IoT hub name is available.
    +
    +        Check if an IoT hub name is available.
    +
    +        :param name: The name of the IoT hub to check.
    +        :type name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: IotHubNameAvailabilityInfo or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.IotHubNameAvailabilityInfo or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        operation_inputs = models.OperationInputs(name=name)
    +
    +        # Construct URL
    +        url = self.check_name_availability.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(operation_inputs, 'OperationInputs')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IotHubNameAvailabilityInfo', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    check_name_availability.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Devices/checkNameAvailability'}
    +
    +    def test_all_routes(
    +            self, input, iot_hub_name, resource_group_name, custom_headers=None, raw=False, **operation_config):
    +        """Test all routes.
    +
    +        Test all routes configured in this Iot Hub.
    +
    +        :param input: Input for testing all routes
    +        :type input: ~azure.mgmt.iothub.models.TestAllRoutesInput
    +        :param iot_hub_name: IotHub to be tested
    +        :type iot_hub_name: str
    +        :param resource_group_name: resource group which Iot Hub belongs to
    +        :type resource_group_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: TestAllRoutesResult or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.TestAllRoutesResult or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.test_all_routes.metadata['url']
    +        path_format_arguments = {
    +            'iotHubName': self._serialize.url("iot_hub_name", iot_hub_name, 'str'),
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(input, 'TestAllRoutesInput')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('TestAllRoutesResult', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    test_all_routes.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{iotHubName}/routing/routes/$testall'}
    +
    +    def test_route(
    +            self, input, iot_hub_name, resource_group_name, custom_headers=None, raw=False, **operation_config):
    +        """Test the new route.
    +
    +        Test the new route for this Iot Hub.
    +
    +        :param input: Route that needs to be tested
    +        :type input: ~azure.mgmt.iothub.models.TestRouteInput
    +        :param iot_hub_name: IotHub to be tested
    +        :type iot_hub_name: str
    +        :param resource_group_name: resource group which Iot Hub belongs to
    +        :type resource_group_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: TestRouteResult or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.TestRouteResult or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.test_route.metadata['url']
    +        path_format_arguments = {
    +            'iotHubName': self._serialize.url("iot_hub_name", iot_hub_name, 'str'),
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(input, 'TestRouteInput')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('TestRouteResult', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    test_route.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{iotHubName}/routing/routes/$testnew'}
    +
    +    def list_keys(
    +            self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config):
    +        """Get the security metadata for an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security.
    +
    +        Get the security metadata for an IoT hub. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of
    +         SharedAccessSignatureAuthorizationRule
    +        :rtype:
    +         ~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRulePaged[~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRule]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list_keys.metadata['url']
    +                path_format_arguments = {
    +                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +                    'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.post(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.SharedAccessSignatureAuthorizationRulePaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list_keys.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/listkeys'}
    +
    +    def get_keys_for_key_name(
    +            self, resource_group_name, resource_name, key_name, custom_headers=None, raw=False, **operation_config):
    +        """Get a shared access policy by name from an IoT hub. For more
    +        information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security.
    +
    +        Get a shared access policy by name from an IoT hub. For more
    +        information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param key_name: The name of the shared access policy.
    +        :type key_name: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: SharedAccessSignatureAuthorizationRule or ClientRawResponse
    +         if raw=true
    +        :rtype:
    +         ~azure.mgmt.iothub.models.SharedAccessSignatureAuthorizationRule or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_keys_for_key_name.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str'),
    +            'keyName': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SharedAccessSignatureAuthorizationRule', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_keys_for_key_name.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/IotHubKeys/{keyName}/listkeys'}
    +
    +    def export_devices(
    +            self, resource_group_name, resource_name, export_blob_container_uri, exclude_keys, custom_headers=None, raw=False, **operation_config):
    +        """Exports all the device identities in the IoT hub identity registry to
    +        an Azure Storage blob container. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities.
    +
    +        Exports all the device identities in the IoT hub identity registry to
    +        an Azure Storage blob container. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param export_blob_container_uri: The export blob container URI.
    +        :type export_blob_container_uri: str
    +        :param exclude_keys: The value indicating whether keys should be
    +         excluded during export.
    +        :type exclude_keys: bool
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: JobResponse or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.JobResponse or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        export_devices_parameters = models.ExportDevicesRequest(export_blob_container_uri=export_blob_container_uri, exclude_keys=exclude_keys)
    +
    +        # Construct URL
    +        url = self.export_devices.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(export_devices_parameters, 'ExportDevicesRequest')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('JobResponse', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    export_devices.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/exportDevices'}
    +
    +    def import_devices(
    +            self, resource_group_name, resource_name, input_blob_container_uri, output_blob_container_uri, custom_headers=None, raw=False, **operation_config):
    +        """Import, update, or delete device identities in the IoT hub identity
    +        registry from a blob. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities.
    +
    +        Import, update, or delete device identities in the IoT hub identity
    +        registry from a blob. For more information, see:
    +        https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities.
    +
    +        :param resource_group_name: The name of the resource group that
    +         contains the IoT hub.
    +        :type resource_group_name: str
    +        :param resource_name: The name of the IoT hub.
    +        :type resource_name: str
    +        :param input_blob_container_uri: The input blob container URI.
    +        :type input_blob_container_uri: str
    +        :param output_blob_container_uri: The output blob container URI.
    +        :type output_blob_container_uri: str
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: JobResponse or ClientRawResponse if raw=true
    +        :rtype: ~azure.mgmt.iothub.models.JobResponse or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        import_devices_parameters = models.ImportDevicesRequest(input_blob_container_uri=input_blob_container_uri, output_blob_container_uri=output_blob_container_uri)
    +
    +        # Construct URL
    +        url = self.import_devices.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'),
    +            'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
    +            'resourceName': self._serialize.url("resource_name", resource_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct body
    +        body_content = self._serialize.body(import_devices_parameters, 'ImportDevicesRequest')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('JobResponse', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    import_devices.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Devices/IotHubs/{resourceName}/importDevices'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_operations.py
    new file mode 100644
    index 000000000000..928809c59ad3
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_operations.py
    @@ -0,0 +1,100 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +
    +from .. import models
    +
    +
    +class Operations(object):
    +    """Operations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2019-07-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2019-07-01-preview"
    +
    +        self.config = config
    +
    +    def list(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """Lists all of the available IoT Hub REST API operations.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: An iterator like instance of Operation
    +        :rtype:
    +         ~azure.mgmt.iothub.models.OperationPaged[~azure.mgmt.iothub.models.Operation]
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        def prepare_request(next_link=None):
    +            if not next_link:
    +                # Construct URL
    +                url = self.list.metadata['url']
    +
    +                # Construct parameters
    +                query_parameters = {}
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                query_parameters = {}
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self.config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +            if custom_headers:
    +                header_parameters.update(custom_headers)
    +            if self.config.accept_language is not None:
    +                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def internal_paging(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            response = self._client.send(request, stream=False, **operation_config)
    +
    +            if response.status_code not in [200]:
    +                raise models.ErrorDetailsException(self._deserialize, response)
    +
    +            return response
    +
    +        # Deserialize response
    +        header_dict = None
    +        if raw:
    +            header_dict = {}
    +        deserialized = models.OperationPaged(internal_paging, self._deserialize.dependencies, header_dict)
    +
    +        return deserialized
    +    list.metadata = {'url': '/providers/Microsoft.Devices/operations'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_resource_provider_common_operations.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_resource_provider_common_operations.py
    new file mode 100644
    index 000000000000..d15208ac8a1f
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/operations/_resource_provider_common_operations.py
    @@ -0,0 +1,96 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +import uuid
    +from msrest.pipeline import ClientRawResponse
    +
    +from .. import models
    +
    +
    +class ResourceProviderCommonOperations(object):
    +    """ResourceProviderCommonOperations operations.
    +
    +    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
    +
    +    :param client: Client for service requests.
    +    :param config: Configuration of service client.
    +    :param serializer: An object model serializer.
    +    :param deserializer: An object model deserializer.
    +    :ivar api_version: The version of the API. Constant value: "2019-07-01-preview".
    +    """
    +
    +    models = models
    +
    +    def __init__(self, client, config, serializer, deserializer):
    +
    +        self._client = client
    +        self._serialize = serializer
    +        self._deserialize = deserializer
    +        self.api_version = "2019-07-01-preview"
    +
    +        self.config = config
    +
    +    def get_subscription_quota(
    +            self, custom_headers=None, raw=False, **operation_config):
    +        """Get the number of iot hubs in the subscription.
    +
    +        Get the number of free and paid iot hubs in the subscription.
    +
    +        :param dict custom_headers: headers that will be added to the request
    +        :param bool raw: returns the direct response alongside the
    +         deserialized response
    +        :param operation_config: :ref:`Operation configuration
    +         overrides`.
    +        :return: UserSubscriptionQuotaListResult or ClientRawResponse if
    +         raw=true
    +        :rtype: ~azure.mgmt.iothub.models.UserSubscriptionQuotaListResult or
    +         ~msrest.pipeline.ClientRawResponse
    +        :raises:
    +         :class:`ErrorDetailsException`
    +        """
    +        # Construct URL
    +        url = self.get_subscription_quota.metadata['url']
    +        path_format_arguments = {
    +            'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self.config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +        if custom_headers:
    +            header_parameters.update(custom_headers)
    +        if self.config.accept_language is not None:
    +            header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        response = self._client.send(request, stream=False, **operation_config)
    +
    +        if response.status_code not in [200]:
    +            raise models.ErrorDetailsException(self._deserialize, response)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('UserSubscriptionQuotaListResult', response)
    +
    +        if raw:
    +            client_raw_response = ClientRawResponse(deserialized, response)
    +            return client_raw_response
    +
    +        return deserialized
    +    get_subscription_quota.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Devices/usages'}
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/version.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/version.py
    new file mode 100644
    index 000000000000..0a72a39badd5
    --- /dev/null
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/v2019_07_01_preview/version.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "0.8.2"
    +
    diff --git a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/version.py b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/version.py
    index 1f08862acee4..afa3d545c718 100644
    --- a/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/version.py
    +++ b/sdk/iothub/azure-mgmt-iothub/azure/mgmt/iothub/version.py
    @@ -9,5 +9,5 @@
     # regenerated.
     # --------------------------------------------------------------------------
     
    -VERSION = "0.10.0"
    +VERSION = "0.11.0"
     
    diff --git a/sdk/keyvault/azure-keyvault-certificates/CHANGELOG.md b/sdk/keyvault/azure-keyvault-certificates/CHANGELOG.md
    index 320d158a03b8..a137663b2a28 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/CHANGELOG.md
    +++ b/sdk/keyvault/azure-keyvault-certificates/CHANGELOG.md
    @@ -1,5 +1,14 @@
     # Release History
     
    +## 4.2.0b2 (Unreleased)
    +
    +
    +## 4.2.0b1 (2020-03-10)
    +- Support for Key Vault API version 7.1-preview
    +([#10124](https://github.com/Azure/azure-sdk-for-python/pull/10124))
    +  - Added `recoverable_days` to `CertificateProperties`
    +  - Added `ApiVersion` enum identifying Key Vault versions supported by this package
    +
     ## 4.1.0 (2020-03-10)
     - `CertificateClient` instances have a `close` method which closes opened
     sockets. Used as a context manager, a `CertificateClient` closes opened sockets
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/__init__.py
    index e74b38f9ef4c..d644e8db7e11 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/__init__.py
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/__init__.py
    @@ -24,8 +24,10 @@
         LifetimeAction,
         KeyVaultCertificate
     )
    +from ._shared.multi_api import ApiVersion
     
     __all__ = [
    +    "ApiVersion",
         "CertificatePolicyAction",
         "AdministratorContact",
         "CertificateClient",
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_client.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_client.py
    index a42906146d78..335b7eabd488 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_client.py
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_client.py
    @@ -40,7 +40,8 @@ class CertificateClient(KeyVaultClientBase):
         :param str vault_url: URL of the vault the client will access. This is also called the vault's "DNS Name".
         :param credential: An object which can provide an access token for the vault, such as a credential from
             :mod:`azure.identity`
    -    :keyword str api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :keyword api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :paramtype api_version: ~azure.keyvault.certificates.ApiVersion
         :keyword transport: transport to use. Defaults to :class:`~azure.core.pipeline.transport.RequestsTransport`.
         :paramtype transport: ~azure.core.pipeline.transport.HttpTransport
     
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_models.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_models.py
    index 2affba7003c2..c1a27bed98a9 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_models.py
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_models.py
    @@ -229,6 +229,18 @@ def updated_on(self):
             """
             return self._attributes.updated if self._attributes else None
     
    +    @property
    +    def recoverable_days(self):
    +        # type: () -> Optional[int]
    +        """The number of days the certificate is retained before being deleted from a soft-delete enabled Key Vault.
    +
    +        :rtype: int
    +        """
    +        # recoverable_days was added in 7.1-preview
    +        if self._attributes and hasattr(self._attributes, "recoverable_days"):
    +            return self._attributes.recoverable_days
    +        return None
    +
         @property
         def recovery_level(self):
             # type: () -> models.DeletionRecoveryLevel
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/__init__.py
    new file mode 100644
    index 000000000000..e913d4cf6c46
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/__init__.py
    @@ -0,0 +1,18 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._key_vault_client import KeyVaultClient
    +__all__ = ['KeyVaultClient']
    +
    +from .version import VERSION
    +
    +__version__ = VERSION
    +
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/_configuration.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/_configuration.py
    new file mode 100644
    index 000000000000..68d6f5b6bd2c
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/_configuration.py
    @@ -0,0 +1,47 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +from azure.core.configuration import Configuration
    +from azure.core.pipeline import policies
    +
    +from .version import VERSION
    +
    +
    +class KeyVaultClientConfiguration(Configuration):
    +    """Configuration for KeyVaultClient
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    """
    +
    +    def __init__(self, credentials, **kwargs):
    +
    +        if credentials is None:
    +            raise ValueError("Parameter 'credentials' must not be None.")
    +
    +        super(KeyVaultClientConfiguration, self).__init__(**kwargs)
    +        self._configure(**kwargs)
    +
    +        self.user_agent_policy.add_user_agent('azsdk-python-azure-keyvault/{}'.format(VERSION))
    +        self.generate_client_request_id = True
    +
    +        self.credentials = credentials
    +
    +    def _configure(self, **kwargs):
    +        self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs)
    +        self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs)
    +        self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
    +        self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
    +        self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs)
    +        self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
    +        self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs)
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/_key_vault_client.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/_key_vault_client.py
    new file mode 100644
    index 000000000000..f380f67e0a87
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/_key_vault_client.py
    @@ -0,0 +1,48 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core import PipelineClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration import KeyVaultClientConfiguration
    +from .operations import KeyVaultClientOperationsMixin
    +from . import models
    +
    +
    +class KeyVaultClient(KeyVaultClientOperationsMixin):
    +    """The key vault client performs cryptographic key operations and vault operations against the Key Vault service.
    +
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    """
    +
    +    def __init__(
    +            self, credentials, **kwargs):
    +
    +        base_url = '{vaultBaseUrl}'
    +        self._config = KeyVaultClientConfiguration(credentials, **kwargs)
    +        self._client = PipelineClient(base_url=base_url, config=self._config, **kwargs)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '7.1-preview'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +
    +    def close(self):
    +        self._client.close()
    +    def __enter__(self):
    +        self._client.__enter__()
    +        return self
    +    def __exit__(self, *exc_details):
    +        self._client.__exit__(*exc_details)
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/__init__.py
    new file mode 100644
    index 000000000000..fb2e6c3866fd
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/__init__.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._key_vault_client_async import KeyVaultClient
    +__all__ = ['KeyVaultClient']
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/_configuration_async.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/_configuration_async.py
    new file mode 100644
    index 000000000000..fb961bb4bd2d
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/_configuration_async.py
    @@ -0,0 +1,47 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +from azure.core.configuration import Configuration
    +from azure.core.pipeline import policies
    +
    +from ..version import VERSION
    +
    +
    +class KeyVaultClientConfiguration(Configuration):
    +    """Configuration for KeyVaultClient
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    """
    +
    +    def __init__(self, credentials, **kwargs):
    +
    +        if credentials is None:
    +            raise ValueError("Parameter 'credentials' must not be None.")
    +
    +        super(KeyVaultClientConfiguration, self).__init__(**kwargs)
    +        self._configure(**kwargs)
    +
    +        self.user_agent_policy.add_user_agent('azsdk-python-azure-keyvault/{}'.format(VERSION))
    +        self.generate_client_request_id = True
    +
    +        self.credentials = credentials
    +
    +    def _configure(self, **kwargs):
    +        self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs)
    +        self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs)
    +        self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
    +        self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
    +        self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs)
    +        self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
    +        self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs)
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/_key_vault_client_async.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/_key_vault_client_async.py
    new file mode 100644
    index 000000000000..b2b908c4a757
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/_key_vault_client_async.py
    @@ -0,0 +1,48 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core import AsyncPipelineClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration_async import KeyVaultClientConfiguration
    +from .operations_async import KeyVaultClientOperationsMixin
    +from .. import models
    +
    +
    +class KeyVaultClient(KeyVaultClientOperationsMixin):
    +    """The key vault client performs cryptographic key operations and vault operations against the Key Vault service.
    +
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    """
    +
    +    def __init__(
    +            self, credentials, **kwargs):
    +
    +        base_url = '{vaultBaseUrl}'
    +        self._config = KeyVaultClientConfiguration(credentials, **kwargs)
    +        self._client = AsyncPipelineClient(base_url=base_url, config=self._config, **kwargs)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '7.1-preview'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +
    +    async def close(self):
    +        await self._client.close()
    +    async def __aenter__(self):
    +        await self._client.__aenter__()
    +        return self
    +    async def __aexit__(self, *exc_details):
    +        await self._client.__aexit__(*exc_details)
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/operations_async/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/operations_async/__init__.py
    new file mode 100644
    index 000000000000..771a17ceb80d
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/operations_async/__init__.py
    @@ -0,0 +1,16 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._key_vault_client_operations_async import KeyVaultClientOperationsMixin
    +
    +__all__ = [
    +    'KeyVaultClientOperationsMixin',
    +]
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/operations_async/_key_vault_client_operations_async.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/operations_async/_key_vault_client_operations_async.py
    new file mode 100644
    index 000000000000..5701d4354d9b
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/aio/operations_async/_key_vault_client_operations_async.py
    @@ -0,0 +1,5224 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +from azure.core.async_paging import AsyncItemPaged, AsyncList
    +from ... import models
    +import uuid
    +
    +
    +class KeyVaultClientOperationsMixin:
    +
    +    def get_certificates(
    +            self, vault_base_url, maxresults=None, include_pending=None, *, cls=None, **kwargs):
    +        """List certificates in a specified key vault.
    +
    +        The GetCertificates operation returns the set of certificates resources
    +        in the specified key vault. This operation requires the
    +        certificates/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :param include_pending: Specifies whether to include certificates
    +         which are not completely provisioned.
    +        :type include_pending: bool
    +        :return: An iterator like instance of CertificateItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.CertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificates.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                if include_pending is not None:
    +                    query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('CertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_certificates.metadata = {'url': '/certificates'}
    +
    +    async def delete_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Deletes a certificate from a specified key vault.
    +
    +        Deletes all versions of a certificate object along with its associated
    +        policy. Delete certificate cannot be used to remove individual versions
    +        of a certificate object. This operation requires the
    +        certificates/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedCertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedCertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedCertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate.metadata = {'url': '/certificates/{certificate-name}'}
    +
    +    async def set_certificate_contacts(self, vault_base_url, contact_list=None, *, cls=None, **kwargs):
    +        """Sets the certificate contacts for the specified key vault.
    +
    +        Sets the certificate contacts for the specified key vault. This
    +        operation requires the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param contact_list: The contact list for the vault certificates.
    +        :type contact_list: list[~azure.keyvault.v7_1.models.Contact]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        contacts = models.Contacts(contact_list=contact_list)
    +
    +        # Construct URL
    +        url = self.set_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(contacts, 'Contacts')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    async def get_certificate_contacts(self, vault_base_url, *, cls=None, **kwargs):
    +        """Lists the certificate contacts for a specified key vault.
    +
    +        The GetCertificateContacts operation returns the set of certificate
    +        contact resources in the specified key vault. This operation requires
    +        the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    async def delete_certificate_contacts(self, vault_base_url, *, cls=None, **kwargs):
    +        """Deletes the certificate contacts for a specified key vault.
    +
    +        Deletes the certificate contacts for a specified key vault certificate.
    +        This operation requires the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    def get_certificate_issuers(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """List certificate issuers for a specified key vault.
    +
    +        The GetCertificateIssuers operation returns the set of certificate
    +        issuer resources in the specified key vault. This operation requires
    +        the certificates/manageissuers/getissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of CertificateIssuerItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.CertificateIssuerItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificate_issuers.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('CertificateIssuerListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_certificate_issuers.metadata = {'url': '/certificates/issuers'}
    +
    +    async def set_certificate_issuer(self, vault_base_url, issuer_name, provider, credentials=None, organization_details=None, attributes=None, *, cls=None, **kwargs):
    +        """Sets the specified certificate issuer.
    +
    +        The SetCertificateIssuer operation adds or updates the specified
    +        certificate issuer. This operation requires the certificates/setissuers
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param provider: The issuer provider.
    +        :type provider: str
    +        :param credentials: The credentials to be used for the issuer.
    +        :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +        :param organization_details: Details of the organization as provided
    +         to the issuer.
    +        :type organization_details:
    +         ~azure.keyvault.v7_1.models.OrganizationDetails
    +        :param attributes: Attributes of the issuer object.
    +        :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameter = models.CertificateIssuerSetParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes)
    +
    +        # Construct URL
    +        url = self.set_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameter, 'CertificateIssuerSetParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    async def update_certificate_issuer(self, vault_base_url, issuer_name, provider=None, credentials=None, organization_details=None, attributes=None, *, cls=None, **kwargs):
    +        """Updates the specified certificate issuer.
    +
    +        The UpdateCertificateIssuer operation performs an update on the
    +        specified certificate issuer entity. This operation requires the
    +        certificates/setissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param provider: The issuer provider.
    +        :type provider: str
    +        :param credentials: The credentials to be used for the issuer.
    +        :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +        :param organization_details: Details of the organization as provided
    +         to the issuer.
    +        :type organization_details:
    +         ~azure.keyvault.v7_1.models.OrganizationDetails
    +        :param attributes: Attributes of the issuer object.
    +        :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameter = models.CertificateIssuerUpdateParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes)
    +
    +        # Construct URL
    +        url = self.update_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameter, 'CertificateIssuerUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    async def get_certificate_issuer(self, vault_base_url, issuer_name, *, cls=None, **kwargs):
    +        """Lists the specified certificate issuer.
    +
    +        The GetCertificateIssuer operation returns the specified certificate
    +        issuer resources in the specified key vault. This operation requires
    +        the certificates/manageissuers/getissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    async def delete_certificate_issuer(self, vault_base_url, issuer_name, *, cls=None, **kwargs):
    +        """Deletes the specified certificate issuer.
    +
    +        The DeleteCertificateIssuer operation permanently removes the specified
    +        certificate issuer from the vault. This operation requires the
    +        certificates/manageissuers/deleteissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    async def create_certificate(self, vault_base_url, certificate_name, certificate_policy=None, certificate_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Creates a new certificate.
    +
    +        If this is the first version, the certificate resource is created. This
    +        operation requires the certificates/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateCreateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.create_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 202:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    create_certificate.metadata = {'url': '/certificates/{certificate-name}/create'}
    +
    +    async def import_certificate(self, vault_base_url, certificate_name, base64_encoded_certificate, password=None, certificate_policy=None, certificate_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Imports a certificate into a specified key vault.
    +
    +        Imports an existing valid certificate, containing a private key, into
    +        Azure Key Vault. The certificate to be imported can be in either PFX or
    +        PEM format. If the certificate is in PEM format the PEM file must
    +        contain the key as well as x509 certificates. This operation requires
    +        the certificates/import permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param base64_encoded_certificate: Base64 encoded representation of
    +         the certificate object to import. This certificate needs to contain
    +         the private key.
    +        :type base64_encoded_certificate: str
    +        :param password: If the private key in base64EncodedCertificate is
    +         encrypted, the password used for encryption.
    +        :type password: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateImportParameters(base64_encoded_certificate=base64_encoded_certificate, password=password, certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.import_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateImportParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    import_certificate.metadata = {'url': '/certificates/{certificate-name}/import'}
    +
    +    def get_certificate_versions(
    +            self, vault_base_url, certificate_name, maxresults=None, *, cls=None, **kwargs):
    +        """List the versions of a certificate.
    +
    +        The GetCertificateVersions operation returns the versions of a
    +        certificate in the specified key vault. This operation requires the
    +        certificates/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of CertificateItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.CertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificate_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('CertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_certificate_versions.metadata = {'url': '/certificates/{certificate-name}/versions'}
    +
    +    async def get_certificate_policy(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Lists the policy for a certificate.
    +
    +        The GetCertificatePolicy operation returns the specified certificate
    +        policy resources in the specified key vault. This operation requires
    +        the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in a given key
    +         vault.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificatePolicy or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_policy.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificatePolicy', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}
    +
    +    async def update_certificate_policy(self, vault_base_url, certificate_name, certificate_policy, *, cls=None, **kwargs):
    +        """Updates the policy for a certificate.
    +
    +        Set specified members in the certificate policy. Leave others as null.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_policy: The policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificatePolicy or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.update_certificate_policy.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_policy, 'CertificatePolicy')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificatePolicy', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}
    +
    +    async def update_certificate(self, vault_base_url, certificate_name, certificate_version, certificate_policy=None, certificate_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given certificate.
    +
    +        The UpdateCertificate operation applies the specified update on the
    +        given certificate; the only elements updated are the certificate's
    +        attributes. This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given key
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_version: The version of the certificate.
    +        :type certificate_version: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateUpdateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
    +            'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}
    +
    +    async def get_certificate(self, vault_base_url, certificate_name, certificate_version, *, cls=None, **kwargs):
    +        """Gets information about a certificate.
    +
    +        Gets information about a specific certificate. This operation requires
    +        the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_version: The version of the certificate.
    +        :type certificate_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
    +            'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}
    +
    +    async def update_certificate_operation(self, vault_base_url, certificate_name, cancellation_requested, *, cls=None, **kwargs):
    +        """Updates a certificate operation.
    +
    +        Updates a certificate creation operation that is already in progress.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param cancellation_requested: Indicates if cancellation was requested
    +         on the certificate operation.
    +        :type cancellation_requested: bool
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        certificate_operation = models.CertificateOperationUpdateParameter(cancellation_requested=cancellation_requested)
    +
    +        # Construct URL
    +        url = self.update_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_operation, 'CertificateOperationUpdateParameter')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    async def get_certificate_operation(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Gets the creation operation of a certificate.
    +
    +        Gets the creation operation associated with a specified certificate.
    +        This operation requires the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    async def delete_certificate_operation(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Deletes the creation operation for a specific certificate.
    +
    +        Deletes the creation operation for a specified certificate that is in
    +        the process of being created. The certificate is no longer created.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    async def merge_certificate(self, vault_base_url, certificate_name, x509_certificates, certificate_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Merges a certificate or a certificate chain with a key pair existing on
    +        the server.
    +
    +        The MergeCertificate operation performs the merging of a certificate or
    +        certificate chain with a key pair currently available in the service.
    +        This operation requires the certificates/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param x509_certificates: The certificate or the certificate chain to
    +         merge.
    +        :type x509_certificates: list[bytearray]
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateMergeParameters(x509_certificates=x509_certificates, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.merge_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateMergeParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    merge_certificate.metadata = {'url': '/certificates/{certificate-name}/pending/merge'}
    +
    +    async def backup_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Backs up the specified certificate.
    +
    +        Requests that a backup of the specified certificate be downloaded to
    +        the client. All versions of the certificate will be downloaded. This
    +        operation requires the certificates/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupCertificateResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupCertificateResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupCertificateResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_certificate.metadata = {'url': '/certificates/{certificate-name}/backup'}
    +
    +    async def restore_certificate(self, vault_base_url, certificate_bundle_backup, *, cls=None, **kwargs):
    +        """Restores a backed up certificate to a vault.
    +
    +        Restores a backed up certificate, and all its versions, to a vault.
    +        This operation requires the certificates/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_bundle_backup: The backup blob associated with a
    +         certificate bundle.
    +        :type certificate_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateRestoreParameters(certificate_bundle_backup=certificate_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_certificate.metadata = {'url': '/certificates/restore'}
    +
    +    def get_deleted_certificates(
    +            self, vault_base_url, maxresults=None, include_pending=None, *, cls=None, **kwargs):
    +        """Lists the deleted certificates in the specified vault currently
    +        available for recovery.
    +
    +        The GetDeletedCertificates operation retrieves the certificates in the
    +        current vault which are in a deleted state and ready for recovery or
    +        purging. This operation includes deletion-specific information. This
    +        operation requires the certificates/get/list permission. This operation
    +        can only be enabled on soft-delete enabled vaults.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :param include_pending: Specifies whether to include certificates
    +         which are not completely provisioned.
    +        :type include_pending: bool
    +        :return: An iterator like instance of DeletedCertificateItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedCertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_certificates.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                if include_pending is not None:
    +                    query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedCertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_certificates.metadata = {'url': '/deletedcertificates'}
    +
    +    async def get_deleted_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Retrieves information about the specified deleted certificate.
    +
    +        The GetDeletedCertificate operation retrieves the deleted certificate
    +        information plus its attributes, such as retention interval, scheduled
    +        permanent deletion and the current deletion recovery level. This
    +        operation requires the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedCertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedCertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedCertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}
    +
    +    async def purge_deleted_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Permanently deletes the specified deleted certificate.
    +
    +        The PurgeDeletedCertificate operation performs an irreversible deletion
    +        of the specified certificate, without possibility for recovery. The
    +        operation is not available if the recovery level does not specify
    +        'Purgeable'. This operation requires the certificate/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}
    +
    +    async def recover_deleted_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Recovers the deleted certificate back to its current version under
    +        /certificates.
    +
    +        The RecoverDeletedCertificate operation performs the reversal of the
    +        Delete operation. The operation is applicable in vaults enabled for
    +        soft-delete, and must be issued during the retention interval
    +        (available in the deleted certificate's attributes). This operation
    +        requires the certificates/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the deleted certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}/recover'}
    +
    +    async def create_key(self, vault_base_url, key_name, kty, key_size=None, key_ops=None, key_attributes=None, tags=None, curve=None, *, cls=None, **kwargs):
    +        """Creates a new key, stores it, then returns key parameters and
    +        attributes to the client.
    +
    +        The create key operation can be used to create any key type in Azure
    +        Key Vault. If the named key already exists, Azure Key Vault creates a
    +        new version of the key. It requires the keys/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name for the new key. The system will generate
    +         the version name for the new key.
    +        :type key_name: str
    +        :param kty: The type of key to create. For valid values, see
    +         JsonWebKeyType. Possible values include: 'EC', 'EC-HSM', 'RSA',
    +         'RSA-HSM', 'oct'
    +        :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +        :param key_size: The key size in bits. For example: 2048, 3072, or
    +         4096 for RSA.
    +        :type key_size: int
    +        :param key_ops:
    +        :type key_ops: list[str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +        :param key_attributes:
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param curve: Elliptic curve name. For valid values, see
    +         JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384',
    +         'P-521', 'P-256K'
    +        :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyCreateParameters(kty=kty, key_size=key_size, key_ops=key_ops, key_attributes=key_attributes, tags=tags, curve=curve)
    +
    +        # Construct URL
    +        url = self.create_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    create_key.metadata = {'url': '/keys/{key-name}/create'}
    +
    +    async def import_key(self, vault_base_url, key_name, key, hsm=None, key_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Imports an externally created key, stores it, and returns key
    +        parameters and attributes to the client.
    +
    +        The import key operation may be used to import any key type into an
    +        Azure Key Vault. If the named key already exists, Azure Key Vault
    +        creates a new version of the key. This operation requires the
    +        keys/import permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: Name for the imported key.
    +        :type key_name: str
    +        :param key: The Json web key
    +        :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +        :param hsm: Whether to import as a hardware key (HSM) or software key.
    +        :type hsm: bool
    +        :param key_attributes: The key management attributes.
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyImportParameters(hsm=hsm, key=key, key_attributes=key_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.import_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyImportParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    import_key.metadata = {'url': '/keys/{key-name}'}
    +
    +    async def delete_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Deletes a key of any type from storage in Azure Key Vault.
    +
    +        The delete key operation cannot be used to remove individual versions
    +        of a key. This operation removes the cryptographic material associated
    +        with the key, which means the key is not usable for Sign/Verify,
    +        Wrap/Unwrap or Encrypt/Decrypt operations. This operation requires the
    +        keys/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key to delete.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedKeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedKeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedKeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_key.metadata = {'url': '/keys/{key-name}'}
    +
    +    async def update_key(self, vault_base_url, key_name, key_version, key_ops=None, key_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """The update key operation changes specified attributes of a stored key
    +        and can be applied to any key type and key version stored in Azure Key
    +        Vault.
    +
    +        In order to perform this operation, the key must already exist in the
    +        Key Vault. Note: The cryptographic material of a key itself cannot be
    +        changed. This operation requires the keys/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of key to update.
    +        :type key_name: str
    +        :param key_version: The version of the key to update.
    +        :type key_version: str
    +        :param key_ops: Json web key operations. For more information on
    +         possible key operations, see JsonWebKeyOperation.
    +        :type key_ops: list[str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +        :param key_attributes:
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyUpdateParameters(key_ops=key_ops, key_attributes=key_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_key.metadata = {'url': '/keys/{key-name}/{key-version}'}
    +
    +    async def get_key(self, vault_base_url, key_name, key_version, *, cls=None, **kwargs):
    +        """Gets the public part of a stored key.
    +
    +        The get key operation is applicable to all key types. If the requested
    +        key is symmetric, then no key material is released in the response.
    +        This operation requires the keys/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key to get.
    +        :type key_name: str
    +        :param key_version: Adding the version parameter retrieves a specific
    +         version of a key.
    +        :type key_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_key.metadata = {'url': '/keys/{key-name}/{key-version}'}
    +
    +    def get_key_versions(
    +            self, vault_base_url, key_name, maxresults=None, *, cls=None, **kwargs):
    +        """Retrieves a list of individual key versions with the same key name.
    +
    +        The full key identifier, attributes, and tags are provided in the
    +        response. This operation requires the keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of KeyItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.KeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_key_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'key-name': self._serialize.url("key_name", key_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'key-name': self._serialize.url("key_name", key_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('KeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_key_versions.metadata = {'url': '/keys/{key-name}/versions'}
    +
    +    def get_keys(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """List keys in the specified vault.
    +
    +        Retrieves a list of the keys in the Key Vault as JSON Web Key
    +        structures that contain the public part of a stored key. The LIST
    +        operation is applicable to all key types, however only the base key
    +        identifier, attributes, and tags are provided in the response.
    +        Individual versions of a key are not listed in the response. This
    +        operation requires the keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of KeyItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.KeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_keys.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('KeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_keys.metadata = {'url': '/keys'}
    +
    +    async def backup_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Requests that a backup of the specified key be downloaded to the
    +        client.
    +
    +        The Key Backup operation exports a key from Azure Key Vault in a
    +        protected form. Note that this operation does NOT return key material
    +        in a form that can be used outside the Azure Key Vault system, the
    +        returned key material is either protected to a Azure Key Vault HSM or
    +        to Azure Key Vault itself. The intent of this operation is to allow a
    +        client to GENERATE a key in one Azure Key Vault instance, BACKUP the
    +        key, and then RESTORE it into another Azure Key Vault instance. The
    +        BACKUP operation may be used to export, in protected form, any key type
    +        from Azure Key Vault. Individual versions of a key cannot be backed up.
    +        BACKUP / RESTORE can be performed within geographical boundaries only;
    +        meaning that a BACKUP from one geographical area cannot be restored to
    +        another geographical area. For example, a backup from the US
    +        geographical area cannot be restored in an EU geographical area. This
    +        operation requires the key/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupKeyResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupKeyResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupKeyResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_key.metadata = {'url': '/keys/{key-name}/backup'}
    +
    +    async def restore_key(self, vault_base_url, key_bundle_backup, *, cls=None, **kwargs):
    +        """Restores a backed up key to a vault.
    +
    +        Imports a previously backed up key into Azure Key Vault, restoring the
    +        key, its key identifier, attributes and access control policies. The
    +        RESTORE operation may be used to import a previously backed up key.
    +        Individual versions of a key cannot be restored. The key is restored in
    +        its entirety with the same key name as it had when it was backed up. If
    +        the key name is not available in the target Key Vault, the RESTORE
    +        operation will be rejected. While the key name is retained during
    +        restore, the final key identifier will change if the key is restored to
    +        a different vault. Restore will restore all versions and preserve
    +        version identifiers. The RESTORE operation is subject to security
    +        constraints: The target Key Vault must be owned by the same Microsoft
    +        Azure Subscription as the source Key Vault The user must have RESTORE
    +        permission in the target Key Vault. This operation requires the
    +        keys/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_bundle_backup: The backup blob associated with a key
    +         bundle.
    +        :type key_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyRestoreParameters(key_bundle_backup=key_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_key.metadata = {'url': '/keys/restore'}
    +
    +    async def encrypt(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Encrypts an arbitrary sequence of bytes using an encryption key that is
    +        stored in a key vault.
    +
    +        The ENCRYPT operation encrypts an arbitrary sequence of bytes using an
    +        encryption key that is stored in Azure Key Vault. Note that the ENCRYPT
    +        operation only supports a single block of data, the size of which is
    +        dependent on the target key and the encryption algorithm to be used.
    +        The ENCRYPT operation is only strictly necessary for symmetric keys
    +        stored in Azure Key Vault since protection with an asymmetric key can
    +        be performed using public portion of the key. This operation is
    +        supported for asymmetric keys as a convenience for callers that have a
    +        key-reference but do not have access to the public key material. This
    +        operation requires the keys/encrypt permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.encrypt.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    encrypt.metadata = {'url': '/keys/{key-name}/{key-version}/encrypt'}
    +
    +    async def decrypt(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Decrypts a single block of encrypted data.
    +
    +        The DECRYPT operation decrypts a well-formed block of ciphertext using
    +        the target encryption key and specified algorithm. This operation is
    +        the reverse of the ENCRYPT operation; only a single block of data may
    +        be decrypted, the size of this block is dependent on the target key and
    +        the algorithm to be used. The DECRYPT operation applies to asymmetric
    +        and symmetric keys stored in Azure Key Vault since it uses the private
    +        portion of the key. This operation requires the keys/decrypt
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.decrypt.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    decrypt.metadata = {'url': '/keys/{key-name}/{key-version}/decrypt'}
    +
    +    async def sign(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Creates a signature from a digest using the specified key.
    +
    +        The SIGN operation is applicable to asymmetric and symmetric keys
    +        stored in Azure Key Vault since this operation uses the private portion
    +        of the key. This operation requires the keys/sign permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: The signing/verification algorithm identifier. For
    +         more information on possible algorithm types, see
    +         JsonWebKeySignatureAlgorithm. Possible values include: 'PS256',
    +         'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256',
    +         'ES384', 'ES512', 'ES256K'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeySignParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.sign.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeySignParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    sign.metadata = {'url': '/keys/{key-name}/{key-version}/sign'}
    +
    +    async def verify(self, vault_base_url, key_name, key_version, algorithm, digest, signature, *, cls=None, **kwargs):
    +        """Verifies a signature using a specified key.
    +
    +        The VERIFY operation is applicable to symmetric keys stored in Azure
    +        Key Vault. VERIFY is not strictly necessary for asymmetric keys stored
    +        in Azure Key Vault since signature verification can be performed using
    +        the public portion of the key but this operation is supported as a
    +        convenience for callers that only have a key-reference and not the
    +        public portion of the key. This operation requires the keys/verify
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: The signing/verification algorithm. For more
    +         information on possible algorithm types, see
    +         JsonWebKeySignatureAlgorithm. Possible values include: 'PS256',
    +         'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256',
    +         'ES384', 'ES512', 'ES256K'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +        :param digest: The digest used for signing.
    +        :type digest: bytes
    +        :param signature: The signature to be verified.
    +        :type signature: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyVerifyResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyVerifyResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyVerifyParameters(algorithm=algorithm, digest=digest, signature=signature)
    +
    +        # Construct URL
    +        url = self.verify.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyVerifyParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyVerifyResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    verify.metadata = {'url': '/keys/{key-name}/{key-version}/verify'}
    +
    +    async def wrap_key(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Wraps a symmetric key using a specified key.
    +
    +        The WRAP operation supports encryption of a symmetric key using a key
    +        encryption key that has previously been stored in an Azure Key Vault.
    +        The WRAP operation is only strictly necessary for symmetric keys stored
    +        in Azure Key Vault since protection with an asymmetric key can be
    +        performed using the public portion of the key. This operation is
    +        supported for asymmetric keys as a convenience for callers that have a
    +        key-reference but do not have access to the public key material. This
    +        operation requires the keys/wrapKey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.wrap_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    wrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/wrapkey'}
    +
    +    async def unwrap_key(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Unwraps a symmetric key using the specified key that was initially used
    +        for wrapping that key.
    +
    +        The UNWRAP operation supports decryption of a symmetric key using the
    +        target key encryption key. This operation is the reverse of the WRAP
    +        operation. The UNWRAP operation applies to asymmetric and symmetric
    +        keys stored in Azure Key Vault since it uses the private portion of the
    +        key. This operation requires the keys/unwrapKey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.unwrap_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    unwrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/unwrapkey'}
    +
    +    def get_deleted_keys(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """Lists the deleted keys in the specified vault.
    +
    +        Retrieves a list of the keys in the Key Vault as JSON Web Key
    +        structures that contain the public part of a deleted key. This
    +        operation includes deletion-specific information. The Get Deleted Keys
    +        operation is applicable for vaults enabled for soft-delete. While the
    +        operation can be invoked on any vault, it will return an error if
    +        invoked on a non soft-delete enabled vault. This operation requires the
    +        keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedKeyItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedKeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_keys.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedKeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_keys.metadata = {'url': '/deletedkeys'}
    +
    +    async def get_deleted_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Gets the public part of a deleted key.
    +
    +        The Get Deleted Key operation is applicable for soft-delete enabled
    +        vaults. While the operation can be invoked on any vault, it will return
    +        an error if invoked on a non soft-delete enabled vault. This operation
    +        requires the keys/get permission. .
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedKeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedKeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedKeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}
    +
    +    async def purge_deleted_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Permanently deletes the specified key.
    +
    +        The Purge Deleted Key operation is applicable for soft-delete enabled
    +        vaults. While the operation can be invoked on any vault, it will return
    +        an error if invoked on a non soft-delete enabled vault. This operation
    +        requires the keys/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}
    +
    +    async def recover_deleted_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Recovers the deleted key to its latest version.
    +
    +        The Recover Deleted Key operation is applicable for deleted keys in
    +        soft-delete enabled vaults. It recovers the deleted key back to its
    +        latest version under /keys. An attempt to recover an non-deleted key
    +        will return an error. Consider this the inverse of the delete operation
    +        on soft-delete enabled vaults. This operation requires the keys/recover
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the deleted key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_key.metadata = {'url': '/deletedkeys/{key-name}/recover'}
    +
    +    async def set_secret(self, vault_base_url, secret_name, value, tags=None, content_type=None, secret_attributes=None, *, cls=None, **kwargs):
    +        """Sets a secret in a specified key vault.
    +
    +        The SET operation adds a secret to the Azure Key Vault. If the named
    +        secret already exists, Azure Key Vault creates a new version of that
    +        secret. This operation requires the secrets/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param value: The value of the secret.
    +        :type value: str
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param content_type: Type of the secret value such as a password.
    +        :type content_type: str
    +        :param secret_attributes: The secret management attributes.
    +        :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretSetParameters(value=value, tags=tags, content_type=content_type, secret_attributes=secret_attributes)
    +
    +        # Construct URL
    +        url = self.set_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretSetParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_secret.metadata = {'url': '/secrets/{secret-name}'}
    +
    +    async def delete_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Deletes a secret from a specified key vault.
    +
    +        The DELETE operation applies to any secret stored in Azure Key Vault.
    +        DELETE cannot be applied to an individual version of a secret. This
    +        operation requires the secrets/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_secret.metadata = {'url': '/secrets/{secret-name}'}
    +
    +    async def update_secret(self, vault_base_url, secret_name, secret_version, content_type=None, secret_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Updates the attributes associated with a specified secret in a given
    +        key vault.
    +
    +        The UPDATE operation changes specified attributes of an existing stored
    +        secret. Attributes that are not specified in the request are left
    +        unchanged. The value of a secret itself cannot be changed. This
    +        operation requires the secrets/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param secret_version: The version of the secret.
    +        :type secret_version: str
    +        :param content_type: Type of the secret value such as a password.
    +        :type content_type: str
    +        :param secret_attributes: The secret management attributes.
    +        :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretUpdateParameters(content_type=content_type, secret_attributes=secret_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
    +            'secret-version': self._serialize.url("secret_version", secret_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}
    +
    +    async def get_secret(self, vault_base_url, secret_name, secret_version, *, cls=None, **kwargs):
    +        """Get a specified secret from a given key vault.
    +
    +        The GET operation is applicable to any secret stored in Azure Key
    +        Vault. This operation requires the secrets/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param secret_version: The version of the secret.
    +        :type secret_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
    +            'secret-version': self._serialize.url("secret_version", secret_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}
    +
    +    def get_secrets(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """List secrets in a specified key vault.
    +
    +        The Get Secrets operation is applicable to the entire vault. However,
    +        only the base secret identifier and its attributes are provided in the
    +        response. Individual secret versions are not listed in the response.
    +        This operation requires the secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified, the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SecretItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.SecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_secrets.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('SecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_secrets.metadata = {'url': '/secrets'}
    +
    +    def get_secret_versions(
    +            self, vault_base_url, secret_name, maxresults=None, *, cls=None, **kwargs):
    +        """List all versions of the specified secret.
    +
    +        The full secret identifier and attributes are provided in the response.
    +        No values are returned for the secrets. This operations requires the
    +        secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified, the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SecretItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.SecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_secret_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('SecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_secret_versions.metadata = {'url': '/secrets/{secret-name}/versions'}
    +
    +    def get_deleted_secrets(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """Lists deleted secrets for the specified vault.
    +
    +        The Get Deleted Secrets operation returns the secrets that have been
    +        deleted for a vault enabled for soft-delete. This operation requires
    +        the secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedSecretItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedSecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_secrets.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedSecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_secrets.metadata = {'url': '/deletedsecrets'}
    +
    +    async def get_deleted_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Gets the specified deleted secret.
    +
    +        The Get Deleted Secret operation returns the specified deleted secret
    +        along with its attributes. This operation requires the secrets/get
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}
    +
    +    async def purge_deleted_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Permanently deletes the specified secret.
    +
    +        The purge deleted secret operation removes the secret permanently,
    +        without the possibility of recovery. This operation can only be enabled
    +        on a soft-delete enabled vault. This operation requires the
    +        secrets/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}
    +
    +    async def recover_deleted_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Recovers the deleted secret to the latest version.
    +
    +        Recovers the deleted secret in the specified vault. This operation can
    +        only be performed on a soft-delete enabled vault. This operation
    +        requires the secrets/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the deleted secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}/recover'}
    +
    +    async def backup_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Backs up the specified secret.
    +
    +        Requests that a backup of the specified secret be downloaded to the
    +        client. All versions of the secret will be downloaded. This operation
    +        requires the secrets/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupSecretResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupSecretResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupSecretResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_secret.metadata = {'url': '/secrets/{secret-name}/backup'}
    +
    +    async def restore_secret(self, vault_base_url, secret_bundle_backup, *, cls=None, **kwargs):
    +        """Restores a backed up secret to a vault.
    +
    +        Restores a backed up secret, and all its versions, to a vault. This
    +        operation requires the secrets/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_bundle_backup: The backup blob associated with a secret
    +         bundle.
    +        :type secret_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretRestoreParameters(secret_bundle_backup=secret_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_secret.metadata = {'url': '/secrets/restore'}
    +
    +    def get_storage_accounts(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """List storage accounts managed by the specified key vault. This
    +        operation requires the storage/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of StorageAccountItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.StorageAccountItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_storage_accounts.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('StorageListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_storage_accounts.metadata = {'url': '/storage'}
    +
    +    def get_deleted_storage_accounts(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """Lists deleted storage accounts for the specified vault.
    +
    +        The Get Deleted Storage Accounts operation returns the storage accounts
    +        that have been deleted for a vault enabled for soft-delete. This
    +        operation requires the storage/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedStorageAccountItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedStorageAccountItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_storage_accounts.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedStorageListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_storage_accounts.metadata = {'url': '/deletedstorage'}
    +
    +    async def get_deleted_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Gets the specified deleted storage account.
    +
    +        The Get Deleted Storage Account operation returns the specified deleted
    +        storage account along with its attributes. This operation requires the
    +        storage/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedStorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedStorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedStorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}
    +
    +    async def purge_deleted_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Permanently deletes the specified storage account.
    +
    +        The purge deleted storage account operation removes the secret
    +        permanently, without the possibility of recovery. This operation can
    +        only be performed on a soft-delete enabled vault. This operation
    +        requires the storage/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}
    +
    +    async def recover_deleted_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Recovers the deleted storage account.
    +
    +        Recovers the deleted storage account in the specified vault. This
    +        operation can only be performed on a soft-delete enabled vault. This
    +        operation requires the storage/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}/recover'}
    +
    +    async def backup_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Backs up the specified storage account.
    +
    +        Requests that a backup of the specified storage account be downloaded
    +        to the client. This operation requires the storage/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupStorageResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupStorageResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupStorageResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_storage_account.metadata = {'url': '/storage/{storage-account-name}/backup'}
    +
    +    async def restore_storage_account(self, vault_base_url, storage_bundle_backup, *, cls=None, **kwargs):
    +        """Restores a backed up storage account to a vault.
    +
    +        Restores a backed up storage account to a vault. This operation
    +        requires the storage/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_bundle_backup: The backup blob associated with a
    +         storage account.
    +        :type storage_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageRestoreParameters(storage_bundle_backup=storage_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_storage_account.metadata = {'url': '/storage/restore'}
    +
    +    async def delete_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Deletes a storage account. This operation requires the storage/delete
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedStorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedStorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedStorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    async def get_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Gets information about a specified storage account. This operation
    +        requires the storage/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    async def set_storage_account(self, vault_base_url, storage_account_name, resource_id, active_key_name, auto_regenerate_key, regeneration_period=None, storage_account_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Creates or updates a new storage account. This operation requires the
    +        storage/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param resource_id: Storage account resource id.
    +        :type resource_id: str
    +        :param active_key_name: Current active storage account key name.
    +        :type active_key_name: str
    +        :param auto_regenerate_key: whether keyvault should manage the storage
    +         account for the user.
    +        :type auto_regenerate_key: bool
    +        :param regeneration_period: The key regeneration time duration
    +         specified in ISO-8601 format.
    +        :type regeneration_period: str
    +        :param storage_account_attributes: The attributes of the storage
    +         account.
    +        :type storage_account_attributes:
    +         ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountCreateParameters(resource_id=resource_id, active_key_name=active_key_name, auto_regenerate_key=auto_regenerate_key, regeneration_period=regeneration_period, storage_account_attributes=storage_account_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.set_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    async def update_storage_account(self, vault_base_url, storage_account_name, active_key_name=None, auto_regenerate_key=None, regeneration_period=None, storage_account_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given storage
    +        account. This operation requires the storage/set/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param active_key_name: The current active storage account key name.
    +        :type active_key_name: str
    +        :param auto_regenerate_key: whether keyvault should manage the storage
    +         account for the user.
    +        :type auto_regenerate_key: bool
    +        :param regeneration_period: The key regeneration time duration
    +         specified in ISO-8601 format.
    +        :type regeneration_period: str
    +        :param storage_account_attributes: The attributes of the storage
    +         account.
    +        :type storage_account_attributes:
    +         ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountUpdateParameters(active_key_name=active_key_name, auto_regenerate_key=auto_regenerate_key, regeneration_period=regeneration_period, storage_account_attributes=storage_account_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    async def regenerate_storage_account_key(self, vault_base_url, storage_account_name, key_name, *, cls=None, **kwargs):
    +        """Regenerates the specified key value for the given storage account. This
    +        operation requires the storage/regeneratekey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param key_name: The storage account key name.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountRegenerteKeyParameters(key_name=key_name)
    +
    +        # Construct URL
    +        url = self.regenerate_storage_account_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountRegenerteKeyParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    regenerate_storage_account_key.metadata = {'url': '/storage/{storage-account-name}/regeneratekey'}
    +
    +    def get_sas_definitions(
    +            self, vault_base_url, storage_account_name, maxresults=None, *, cls=None, **kwargs):
    +        """List storage SAS definitions for the given storage account. This
    +        operation requires the storage/listsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SasDefinitionItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.SasDefinitionItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_sas_definitions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('SasDefinitionListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_sas_definitions.metadata = {'url': '/storage/{storage-account-name}/sas'}
    +
    +    def get_deleted_sas_definitions(
    +            self, vault_base_url, storage_account_name, maxresults=None, *, cls=None, **kwargs):
    +        """Lists deleted SAS definitions for the specified vault and storage
    +        account.
    +
    +        The Get Deleted Sas Definitions operation returns the SAS definitions
    +        that have been deleted for a vault enabled for soft-delete. This
    +        operation requires the storage/listsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedSasDefinitionItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedSasDefinitionItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_sas_definitions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedSasDefinitionListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_sas_definitions.metadata = {'url': '/deletedstorage/{storage-account-name}/sas'}
    +
    +    async def get_deleted_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, *, cls=None, **kwargs):
    +        """Gets the specified deleted sas definition.
    +
    +        The Get Deleted SAS Definition operation returns the specified deleted
    +        SAS definition along with its attributes. This operation requires the
    +        storage/getsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    async def recover_deleted_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, *, cls=None, **kwargs):
    +        """Recovers the deleted SAS definition.
    +
    +        Recovers the deleted SAS definition for the specified storage account.
    +        This operation can only be performed on a soft-delete enabled vault.
    +        This operation requires the storage/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}/recover'}
    +
    +    async def delete_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, *, cls=None, **kwargs):
    +        """Deletes a SAS definition from a specified storage account. This
    +        operation requires the storage/deletesas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    async def get_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, *, cls=None, **kwargs):
    +        """Gets information about a SAS definition for the specified storage
    +        account. This operation requires the storage/getsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    async def set_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, template_uri, sas_type, validity_period, sas_definition_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Creates or updates a new SAS definition for the specified storage
    +        account. This operation requires the storage/setsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param template_uri: The SAS definition token template signed with an
    +         arbitrary key.  Tokens created according to the SAS definition will
    +         have the same properties as the template.
    +        :type template_uri: str
    +        :param sas_type: The type of SAS token the SAS definition will create.
    +         Possible values include: 'account', 'service'
    +        :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +        :param validity_period: The validity period of SAS tokens created
    +         according to the SAS definition.
    +        :type validity_period: str
    +        :param sas_definition_attributes: The attributes of the SAS
    +         definition.
    +        :type sas_definition_attributes:
    +         ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SasDefinitionCreateParameters(template_uri=template_uri, sas_type=sas_type, validity_period=validity_period, sas_definition_attributes=sas_definition_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.set_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SasDefinitionCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    async def update_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, template_uri=None, sas_type=None, validity_period=None, sas_definition_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given SAS
    +        definition. This operation requires the storage/setsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param template_uri: The SAS definition token template signed with an
    +         arbitrary key.  Tokens created according to the SAS definition will
    +         have the same properties as the template.
    +        :type template_uri: str
    +        :param sas_type: The type of SAS token the SAS definition will create.
    +         Possible values include: 'account', 'service'
    +        :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +        :param validity_period: The validity period of SAS tokens created
    +         according to the SAS definition.
    +        :type validity_period: str
    +        :param sas_definition_attributes: The attributes of the SAS
    +         definition.
    +        :type sas_definition_attributes:
    +         ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SasDefinitionUpdateParameters(template_uri=template_uri, sas_type=sas_type, validity_period=validity_period, sas_definition_attributes=sas_definition_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SasDefinitionUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/models/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/models/__init__.py
    new file mode 100644
    index 000000000000..68ccf6d2e5f5
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/models/__init__.py
    @@ -0,0 +1,303 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +try:
    +    from ._models_py3 import Action
    +    from ._models_py3 import AdministratorDetails
    +    from ._models_py3 import Attributes
    +    from ._models_py3 import BackupCertificateResult
    +    from ._models_py3 import BackupKeyResult
    +    from ._models_py3 import BackupSecretResult
    +    from ._models_py3 import BackupStorageResult
    +    from ._models_py3 import CertificateAttributes
    +    from ._models_py3 import CertificateBundle
    +    from ._models_py3 import CertificateCreateParameters
    +    from ._models_py3 import CertificateImportParameters
    +    from ._models_py3 import CertificateIssuerItem
    +    from ._models_py3 import CertificateIssuerListResult
    +    from ._models_py3 import CertificateIssuerSetParameters
    +    from ._models_py3 import CertificateIssuerUpdateParameters
    +    from ._models_py3 import CertificateItem
    +    from ._models_py3 import CertificateListResult
    +    from ._models_py3 import CertificateMergeParameters
    +    from ._models_py3 import CertificateOperation
    +    from ._models_py3 import CertificateOperationUpdateParameter
    +    from ._models_py3 import CertificatePolicy
    +    from ._models_py3 import CertificateRestoreParameters
    +    from ._models_py3 import CertificateUpdateParameters
    +    from ._models_py3 import Contact
    +    from ._models_py3 import Contacts
    +    from ._models_py3 import DeletedCertificateBundle
    +    from ._models_py3 import DeletedCertificateItem
    +    from ._models_py3 import DeletedCertificateListResult
    +    from ._models_py3 import DeletedKeyBundle
    +    from ._models_py3 import DeletedKeyItem
    +    from ._models_py3 import DeletedKeyListResult
    +    from ._models_py3 import DeletedSasDefinitionBundle
    +    from ._models_py3 import DeletedSasDefinitionItem
    +    from ._models_py3 import DeletedSasDefinitionListResult
    +    from ._models_py3 import DeletedSecretBundle
    +    from ._models_py3 import DeletedSecretItem
    +    from ._models_py3 import DeletedSecretListResult
    +    from ._models_py3 import DeletedStorageAccountItem
    +    from ._models_py3 import DeletedStorageBundle
    +    from ._models_py3 import DeletedStorageListResult
    +    from ._models_py3 import Error
    +    from ._models_py3 import IssuerAttributes
    +    from ._models_py3 import IssuerBundle
    +    from ._models_py3 import IssuerCredentials
    +    from ._models_py3 import IssuerParameters
    +    from ._models_py3 import JsonWebKey
    +    from ._models_py3 import KeyAttributes
    +    from ._models_py3 import KeyBundle
    +    from ._models_py3 import KeyCreateParameters
    +    from ._models_py3 import KeyImportParameters
    +    from ._models_py3 import KeyItem
    +    from ._models_py3 import KeyListResult
    +    from ._models_py3 import KeyOperationResult
    +    from ._models_py3 import KeyOperationsParameters
    +    from ._models_py3 import KeyProperties
    +    from ._models_py3 import KeyRestoreParameters
    +    from ._models_py3 import KeySignParameters
    +    from ._models_py3 import KeyUpdateParameters
    +    from ._models_py3 import KeyVaultError, KeyVaultErrorException
    +    from ._models_py3 import KeyVerifyParameters
    +    from ._models_py3 import KeyVerifyResult
    +    from ._models_py3 import LifetimeAction
    +    from ._models_py3 import OrganizationDetails
    +    from ._models_py3 import PendingCertificateSigningRequestResult
    +    from ._models_py3 import SasDefinitionAttributes
    +    from ._models_py3 import SasDefinitionBundle
    +    from ._models_py3 import SasDefinitionCreateParameters
    +    from ._models_py3 import SasDefinitionItem
    +    from ._models_py3 import SasDefinitionListResult
    +    from ._models_py3 import SasDefinitionUpdateParameters
    +    from ._models_py3 import SecretAttributes
    +    from ._models_py3 import SecretBundle
    +    from ._models_py3 import SecretItem
    +    from ._models_py3 import SecretListResult
    +    from ._models_py3 import SecretProperties
    +    from ._models_py3 import SecretRestoreParameters
    +    from ._models_py3 import SecretSetParameters
    +    from ._models_py3 import SecretUpdateParameters
    +    from ._models_py3 import StorageAccountAttributes
    +    from ._models_py3 import StorageAccountCreateParameters
    +    from ._models_py3 import StorageAccountItem
    +    from ._models_py3 import StorageAccountRegenerteKeyParameters
    +    from ._models_py3 import StorageAccountUpdateParameters
    +    from ._models_py3 import StorageBundle
    +    from ._models_py3 import StorageListResult
    +    from ._models_py3 import StorageRestoreParameters
    +    from ._models_py3 import SubjectAlternativeNames
    +    from ._models_py3 import Trigger
    +    from ._models_py3 import X509CertificateProperties
    +except (SyntaxError, ImportError):
    +    from ._models import Action
    +    from ._models import AdministratorDetails
    +    from ._models import Attributes
    +    from ._models import BackupCertificateResult
    +    from ._models import BackupKeyResult
    +    from ._models import BackupSecretResult
    +    from ._models import BackupStorageResult
    +    from ._models import CertificateAttributes
    +    from ._models import CertificateBundle
    +    from ._models import CertificateCreateParameters
    +    from ._models import CertificateImportParameters
    +    from ._models import CertificateIssuerItem
    +    from ._models import CertificateIssuerListResult
    +    from ._models import CertificateIssuerSetParameters
    +    from ._models import CertificateIssuerUpdateParameters
    +    from ._models import CertificateItem
    +    from ._models import CertificateListResult
    +    from ._models import CertificateMergeParameters
    +    from ._models import CertificateOperation
    +    from ._models import CertificateOperationUpdateParameter
    +    from ._models import CertificatePolicy
    +    from ._models import CertificateRestoreParameters
    +    from ._models import CertificateUpdateParameters
    +    from ._models import Contact
    +    from ._models import Contacts
    +    from ._models import DeletedCertificateBundle
    +    from ._models import DeletedCertificateItem
    +    from ._models import DeletedCertificateListResult
    +    from ._models import DeletedKeyBundle
    +    from ._models import DeletedKeyItem
    +    from ._models import DeletedKeyListResult
    +    from ._models import DeletedSasDefinitionBundle
    +    from ._models import DeletedSasDefinitionItem
    +    from ._models import DeletedSasDefinitionListResult
    +    from ._models import DeletedSecretBundle
    +    from ._models import DeletedSecretItem
    +    from ._models import DeletedSecretListResult
    +    from ._models import DeletedStorageAccountItem
    +    from ._models import DeletedStorageBundle
    +    from ._models import DeletedStorageListResult
    +    from ._models import Error
    +    from ._models import IssuerAttributes
    +    from ._models import IssuerBundle
    +    from ._models import IssuerCredentials
    +    from ._models import IssuerParameters
    +    from ._models import JsonWebKey
    +    from ._models import KeyAttributes
    +    from ._models import KeyBundle
    +    from ._models import KeyCreateParameters
    +    from ._models import KeyImportParameters
    +    from ._models import KeyItem
    +    from ._models import KeyListResult
    +    from ._models import KeyOperationResult
    +    from ._models import KeyOperationsParameters
    +    from ._models import KeyProperties
    +    from ._models import KeyRestoreParameters
    +    from ._models import KeySignParameters
    +    from ._models import KeyUpdateParameters
    +    from ._models import KeyVaultError, KeyVaultErrorException
    +    from ._models import KeyVerifyParameters
    +    from ._models import KeyVerifyResult
    +    from ._models import LifetimeAction
    +    from ._models import OrganizationDetails
    +    from ._models import PendingCertificateSigningRequestResult
    +    from ._models import SasDefinitionAttributes
    +    from ._models import SasDefinitionBundle
    +    from ._models import SasDefinitionCreateParameters
    +    from ._models import SasDefinitionItem
    +    from ._models import SasDefinitionListResult
    +    from ._models import SasDefinitionUpdateParameters
    +    from ._models import SecretAttributes
    +    from ._models import SecretBundle
    +    from ._models import SecretItem
    +    from ._models import SecretListResult
    +    from ._models import SecretProperties
    +    from ._models import SecretRestoreParameters
    +    from ._models import SecretSetParameters
    +    from ._models import SecretUpdateParameters
    +    from ._models import StorageAccountAttributes
    +    from ._models import StorageAccountCreateParameters
    +    from ._models import StorageAccountItem
    +    from ._models import StorageAccountRegenerteKeyParameters
    +    from ._models import StorageAccountUpdateParameters
    +    from ._models import StorageBundle
    +    from ._models import StorageListResult
    +    from ._models import StorageRestoreParameters
    +    from ._models import SubjectAlternativeNames
    +    from ._models import Trigger
    +    from ._models import X509CertificateProperties
    +from ._key_vault_client_enums import (
    +    DeletionRecoveryLevel,
    +    JsonWebKeyType,
    +    JsonWebKeyCurveName,
    +    KeyUsageType,
    +    ActionType,
    +    JsonWebKeyOperation,
    +    JsonWebKeyEncryptionAlgorithm,
    +    JsonWebKeySignatureAlgorithm,
    +    SasTokenType,
    +)
    +
    +__all__ = [
    +    'Action',
    +    'AdministratorDetails',
    +    'Attributes',
    +    'BackupCertificateResult',
    +    'BackupKeyResult',
    +    'BackupSecretResult',
    +    'BackupStorageResult',
    +    'CertificateAttributes',
    +    'CertificateBundle',
    +    'CertificateCreateParameters',
    +    'CertificateImportParameters',
    +    'CertificateIssuerItem',
    +    'CertificateIssuerListResult',
    +    'CertificateIssuerSetParameters',
    +    'CertificateIssuerUpdateParameters',
    +    'CertificateItem',
    +    'CertificateListResult',
    +    'CertificateMergeParameters',
    +    'CertificateOperation',
    +    'CertificateOperationUpdateParameter',
    +    'CertificatePolicy',
    +    'CertificateRestoreParameters',
    +    'CertificateUpdateParameters',
    +    'Contact',
    +    'Contacts',
    +    'DeletedCertificateBundle',
    +    'DeletedCertificateItem',
    +    'DeletedCertificateListResult',
    +    'DeletedKeyBundle',
    +    'DeletedKeyItem',
    +    'DeletedKeyListResult',
    +    'DeletedSasDefinitionBundle',
    +    'DeletedSasDefinitionItem',
    +    'DeletedSasDefinitionListResult',
    +    'DeletedSecretBundle',
    +    'DeletedSecretItem',
    +    'DeletedSecretListResult',
    +    'DeletedStorageAccountItem',
    +    'DeletedStorageBundle',
    +    'DeletedStorageListResult',
    +    'Error',
    +    'IssuerAttributes',
    +    'IssuerBundle',
    +    'IssuerCredentials',
    +    'IssuerParameters',
    +    'JsonWebKey',
    +    'KeyAttributes',
    +    'KeyBundle',
    +    'KeyCreateParameters',
    +    'KeyImportParameters',
    +    'KeyItem',
    +    'KeyListResult',
    +    'KeyOperationResult',
    +    'KeyOperationsParameters',
    +    'KeyProperties',
    +    'KeyRestoreParameters',
    +    'KeySignParameters',
    +    'KeyUpdateParameters',
    +    'KeyVaultError', 'KeyVaultErrorException',
    +    'KeyVerifyParameters',
    +    'KeyVerifyResult',
    +    'LifetimeAction',
    +    'OrganizationDetails',
    +    'PendingCertificateSigningRequestResult',
    +    'SasDefinitionAttributes',
    +    'SasDefinitionBundle',
    +    'SasDefinitionCreateParameters',
    +    'SasDefinitionItem',
    +    'SasDefinitionListResult',
    +    'SasDefinitionUpdateParameters',
    +    'SecretAttributes',
    +    'SecretBundle',
    +    'SecretItem',
    +    'SecretListResult',
    +    'SecretProperties',
    +    'SecretRestoreParameters',
    +    'SecretSetParameters',
    +    'SecretUpdateParameters',
    +    'StorageAccountAttributes',
    +    'StorageAccountCreateParameters',
    +    'StorageAccountItem',
    +    'StorageAccountRegenerteKeyParameters',
    +    'StorageAccountUpdateParameters',
    +    'StorageBundle',
    +    'StorageListResult',
    +    'StorageRestoreParameters',
    +    'SubjectAlternativeNames',
    +    'Trigger',
    +    'X509CertificateProperties',
    +    'DeletionRecoveryLevel',
    +    'JsonWebKeyType',
    +    'JsonWebKeyCurveName',
    +    'KeyUsageType',
    +    'ActionType',
    +    'JsonWebKeyOperation',
    +    'JsonWebKeyEncryptionAlgorithm',
    +    'JsonWebKeySignatureAlgorithm',
    +    'SasTokenType',
    +]
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/models/_key_vault_client_enums.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/models/_key_vault_client_enums.py
    new file mode 100644
    index 000000000000..936353e5bb83
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/models/_key_vault_client_enums.py
    @@ -0,0 +1,98 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from enum import Enum
    +
    +
    +class DeletionRecoveryLevel(str, Enum):
    +
    +    purgeable = "Purgeable"
    +    recoverable_purgeable = "Recoverable+Purgeable"
    +    recoverable = "Recoverable"
    +    recoverable_protected_subscription = "Recoverable+ProtectedSubscription"
    +    customized_recoverable_purgeable = "CustomizedRecoverable+Purgeable"
    +    customized_recoverable = "CustomizedRecoverable"
    +    customized_recoverable_protected_subscription = "CustomizedRecoverable+ProtectedSubscription"
    +
    +
    +class JsonWebKeyType(str, Enum):
    +
    +    ec = "EC"
    +    ec_hsm = "EC-HSM"
    +    rsa = "RSA"
    +    rsa_hsm = "RSA-HSM"
    +    oct = "oct"
    +
    +
    +class JsonWebKeyCurveName(str, Enum):
    +
    +    p_256 = "P-256"
    +    p_384 = "P-384"
    +    p_521 = "P-521"
    +    p_256_k = "P-256K"
    +
    +
    +class KeyUsageType(str, Enum):
    +
    +    digital_signature = "digitalSignature"
    +    non_repudiation = "nonRepudiation"
    +    key_encipherment = "keyEncipherment"
    +    data_encipherment = "dataEncipherment"
    +    key_agreement = "keyAgreement"
    +    key_cert_sign = "keyCertSign"
    +    c_rl_sign = "cRLSign"
    +    encipher_only = "encipherOnly"
    +    decipher_only = "decipherOnly"
    +
    +
    +class ActionType(str, Enum):
    +
    +    email_contacts = "EmailContacts"
    +    auto_renew = "AutoRenew"
    +
    +
    +class JsonWebKeyOperation(str, Enum):
    +
    +    encrypt = "encrypt"
    +    decrypt = "decrypt"
    +    sign = "sign"
    +    verify = "verify"
    +    wrap_key = "wrapKey"
    +    unwrap_key = "unwrapKey"
    +    import_enum = "import"
    +
    +
    +class JsonWebKeyEncryptionAlgorithm(str, Enum):
    +
    +    rsa_oaep = "RSA-OAEP"
    +    rsa_oaep_256 = "RSA-OAEP-256"
    +    rsa1_5 = "RSA1_5"
    +
    +
    +class JsonWebKeySignatureAlgorithm(str, Enum):
    +
    +    ps256 = "PS256"  #: RSASSA-PSS using SHA-256 and MGF1 with SHA-256, as described in https://tools.ietf.org/html/rfc7518
    +    ps384 = "PS384"  #: RSASSA-PSS using SHA-384 and MGF1 with SHA-384, as described in https://tools.ietf.org/html/rfc7518
    +    ps512 = "PS512"  #: RSASSA-PSS using SHA-512 and MGF1 with SHA-512, as described in https://tools.ietf.org/html/rfc7518
    +    rs256 = "RS256"  #: RSASSA-PKCS1-v1_5 using SHA-256, as described in https://tools.ietf.org/html/rfc7518
    +    rs384 = "RS384"  #: RSASSA-PKCS1-v1_5 using SHA-384, as described in https://tools.ietf.org/html/rfc7518
    +    rs512 = "RS512"  #: RSASSA-PKCS1-v1_5 using SHA-512, as described in https://tools.ietf.org/html/rfc7518
    +    rsnull = "RSNULL"  #: Reserved
    +    es256 = "ES256"  #: ECDSA using P-256 and SHA-256, as described in https://tools.ietf.org/html/rfc7518.
    +    es384 = "ES384"  #: ECDSA using P-384 and SHA-384, as described in https://tools.ietf.org/html/rfc7518
    +    es512 = "ES512"  #: ECDSA using P-521 and SHA-512, as described in https://tools.ietf.org/html/rfc7518
    +    es256_k = "ES256K"  #: ECDSA using P-256K and SHA-256, as described in https://tools.ietf.org/html/rfc7518
    +
    +
    +class SasTokenType(str, Enum):
    +
    +    account = "account"
    +    service = "service"
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/models/_models.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/models/_models.py
    new file mode 100644
    index 000000000000..ea5379c44cc0
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/models/_models.py
    @@ -0,0 +1,3244 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from azure.core.exceptions import HttpResponseError
    +
    +
    +class Action(Model):
    +    """The action that will be executed.
    +
    +    :param action_type: The type of the action. Possible values include:
    +     'EmailContacts', 'AutoRenew'
    +    :type action_type: str or ~azure.keyvault.v7_1.models.ActionType
    +    """
    +
    +    _attribute_map = {
    +        'action_type': {'key': 'action_type', 'type': 'ActionType'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Action, self).__init__(**kwargs)
    +        self.action_type = kwargs.get('action_type', None)
    +
    +
    +class AdministratorDetails(Model):
    +    """Details of the organization administrator of the certificate issuer.
    +
    +    :param first_name: First name.
    +    :type first_name: str
    +    :param last_name: Last name.
    +    :type last_name: str
    +    :param email_address: Email address.
    +    :type email_address: str
    +    :param phone: Phone number.
    +    :type phone: str
    +    """
    +
    +    _attribute_map = {
    +        'first_name': {'key': 'first_name', 'type': 'str'},
    +        'last_name': {'key': 'last_name', 'type': 'str'},
    +        'email_address': {'key': 'email', 'type': 'str'},
    +        'phone': {'key': 'phone', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AdministratorDetails, self).__init__(**kwargs)
    +        self.first_name = kwargs.get('first_name', None)
    +        self.last_name = kwargs.get('last_name', None)
    +        self.email_address = kwargs.get('email_address', None)
    +        self.phone = kwargs.get('phone', None)
    +
    +
    +class Attributes(Model):
    +    """The object attributes managed by the KeyVault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Attributes, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.not_before = kwargs.get('not_before', None)
    +        self.expires = kwargs.get('expires', None)
    +        self.created = None
    +        self.updated = None
    +
    +
    +class BackupCertificateResult(Model):
    +    """The backup certificate result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up certificate.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BackupCertificateResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupKeyResult(Model):
    +    """The backup key result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up key.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BackupKeyResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupSecretResult(Model):
    +    """The backup secret result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up secret.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BackupSecretResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupStorageResult(Model):
    +    """The backup storage result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up storage account.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BackupStorageResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class CertificateAttributes(Attributes):
    +    """The certificate management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for certificates in the current vault. If it contains 'Purgeable',
    +     the certificate can be permanently deleted by a privileged user;
    +     otherwise, only the system can purge the certificate, at the end of the
    +     retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateAttributes, self).__init__(**kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class CertificateBundle(Model):
    +    """A certificate bundle consists of a certificate (X509) plus its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :ivar kid: The key id.
    +    :vartype kid: str
    +    :ivar sid: The secret id.
    +    :vartype sid: str
    +    :ivar x509_thumbprint: Thumbprint of the certificate.
    +    :vartype x509_thumbprint: bytes
    +    :ivar policy: The management policy.
    +    :vartype policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param cer: CER contents of x509 certificate.
    +    :type cer: bytearray
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'kid': {'readonly': True},
    +        'sid': {'readonly': True},
    +        'x509_thumbprint': {'readonly': True},
    +        'policy': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'sid': {'key': 'sid', 'type': 'str'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'cer': {'key': 'cer', 'type': 'bytearray'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.kid = None
    +        self.sid = None
    +        self.x509_thumbprint = None
    +        self.policy = None
    +        self.cer = kwargs.get('cer', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CertificateCreateParameters(Model):
    +    """The certificate create parameters.
    +
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateCreateParameters, self).__init__(**kwargs)
    +        self.certificate_policy = kwargs.get('certificate_policy', None)
    +        self.certificate_attributes = kwargs.get('certificate_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CertificateImportParameters(Model):
    +    """The certificate import parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param base64_encoded_certificate: Required. Base64 encoded representation
    +     of the certificate object to import. This certificate needs to contain the
    +     private key.
    +    :type base64_encoded_certificate: str
    +    :param password: If the private key in base64EncodedCertificate is
    +     encrypted, the password used for encryption.
    +    :type password: str
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'base64_encoded_certificate': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'base64_encoded_certificate': {'key': 'value', 'type': 'str'},
    +        'password': {'key': 'pwd', 'type': 'str'},
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateImportParameters, self).__init__(**kwargs)
    +        self.base64_encoded_certificate = kwargs.get('base64_encoded_certificate', None)
    +        self.password = kwargs.get('password', None)
    +        self.certificate_policy = kwargs.get('certificate_policy', None)
    +        self.certificate_attributes = kwargs.get('certificate_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CertificateIssuerItem(Model):
    +    """The certificate issuer item containing certificate issuer metadata.
    +
    +    :param id: Certificate Identifier.
    +    :type id: str
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'provider': {'key': 'provider', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateIssuerItem, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.provider = kwargs.get('provider', None)
    +
    +
    +class CertificateIssuerListResult(Model):
    +    """The certificate issuer list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of certificate issuers
    +     in the key vault along with a link to the next page of certificate
    +     issuers.
    +    :vartype value: list[~azure.keyvault.v7_1.models.CertificateIssuerItem]
    +    :ivar next_link: The URL to get the next set of certificate issuers.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateIssuerItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateIssuerListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class CertificateIssuerSetParameters(Model):
    +    """The certificate issuer set parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param provider: Required. The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _validation = {
    +        'provider': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateIssuerSetParameters, self).__init__(**kwargs)
    +        self.provider = kwargs.get('provider', None)
    +        self.credentials = kwargs.get('credentials', None)
    +        self.organization_details = kwargs.get('organization_details', None)
    +        self.attributes = kwargs.get('attributes', None)
    +
    +
    +class CertificateIssuerUpdateParameters(Model):
    +    """The certificate issuer update parameters.
    +
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateIssuerUpdateParameters, self).__init__(**kwargs)
    +        self.provider = kwargs.get('provider', None)
    +        self.credentials = kwargs.get('credentials', None)
    +        self.organization_details = kwargs.get('organization_details', None)
    +        self.attributes = kwargs.get('attributes', None)
    +
    +
    +class CertificateItem(Model):
    +    """The certificate item containing certificate metadata.
    +
    +    :param id: Certificate identifier.
    +    :type id: str
    +    :param attributes: The certificate management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param x509_thumbprint: Thumbprint of the certificate.
    +    :type x509_thumbprint: bytes
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateItem, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.x509_thumbprint = kwargs.get('x509_thumbprint', None)
    +
    +
    +class CertificateListResult(Model):
    +    """The certificate list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of certificates in the
    +     key vault along with a link to the next page of certificates.
    +    :vartype value: list[~azure.keyvault.v7_1.models.CertificateItem]
    +    :ivar next_link: The URL to get the next set of certificates.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class CertificateMergeParameters(Model):
    +    """The certificate merge parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param x509_certificates: Required. The certificate or the certificate
    +     chain to merge.
    +    :type x509_certificates: list[bytearray]
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'x509_certificates': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'x509_certificates': {'key': 'x5c', 'type': '[bytearray]'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateMergeParameters, self).__init__(**kwargs)
    +        self.x509_certificates = kwargs.get('x509_certificates', None)
    +        self.certificate_attributes = kwargs.get('certificate_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CertificateOperation(Model):
    +    """A certificate operation is returned in case of asynchronous requests.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :param issuer_parameters: Parameters for the issuer of the X509 component
    +     of a certificate.
    +    :type issuer_parameters: ~azure.keyvault.v7_1.models.IssuerParameters
    +    :param csr: The certificate signing request (CSR) that is being used in
    +     the certificate operation.
    +    :type csr: bytearray
    +    :param cancellation_requested: Indicates if cancellation was requested on
    +     the certificate operation.
    +    :type cancellation_requested: bool
    +    :param status: Status of the certificate operation.
    +    :type status: str
    +    :param status_details: The status details of the certificate operation.
    +    :type status_details: str
    +    :param error: Error encountered, if any, during the certificate operation.
    +    :type error: ~azure.keyvault.v7_1.models.Error
    +    :param target: Location which contains the result of the certificate
    +     operation.
    +    :type target: str
    +    :param request_id: Identifier for the certificate operation.
    +    :type request_id: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'},
    +        'csr': {'key': 'csr', 'type': 'bytearray'},
    +        'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'},
    +        'status': {'key': 'status', 'type': 'str'},
    +        'status_details': {'key': 'status_details', 'type': 'str'},
    +        'error': {'key': 'error', 'type': 'Error'},
    +        'target': {'key': 'target', 'type': 'str'},
    +        'request_id': {'key': 'request_id', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateOperation, self).__init__(**kwargs)
    +        self.id = None
    +        self.issuer_parameters = kwargs.get('issuer_parameters', None)
    +        self.csr = kwargs.get('csr', None)
    +        self.cancellation_requested = kwargs.get('cancellation_requested', None)
    +        self.status = kwargs.get('status', None)
    +        self.status_details = kwargs.get('status_details', None)
    +        self.error = kwargs.get('error', None)
    +        self.target = kwargs.get('target', None)
    +        self.request_id = kwargs.get('request_id', None)
    +
    +
    +class CertificateOperationUpdateParameter(Model):
    +    """The certificate operation update parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param cancellation_requested: Required. Indicates if cancellation was
    +     requested on the certificate operation.
    +    :type cancellation_requested: bool
    +    """
    +
    +    _validation = {
    +        'cancellation_requested': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateOperationUpdateParameter, self).__init__(**kwargs)
    +        self.cancellation_requested = kwargs.get('cancellation_requested', None)
    +
    +
    +class CertificatePolicy(Model):
    +    """Management policy for a certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :param key_properties: Properties of the key backing a certificate.
    +    :type key_properties: ~azure.keyvault.v7_1.models.KeyProperties
    +    :param secret_properties: Properties of the secret backing a certificate.
    +    :type secret_properties: ~azure.keyvault.v7_1.models.SecretProperties
    +    :param x509_certificate_properties: Properties of the X509 component of a
    +     certificate.
    +    :type x509_certificate_properties:
    +     ~azure.keyvault.v7_1.models.X509CertificateProperties
    +    :param lifetime_actions: Actions that will be performed by Key Vault over
    +     the lifetime of a certificate.
    +    :type lifetime_actions: list[~azure.keyvault.v7_1.models.LifetimeAction]
    +    :param issuer_parameters: Parameters for the issuer of the X509 component
    +     of a certificate.
    +    :type issuer_parameters: ~azure.keyvault.v7_1.models.IssuerParameters
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'key_properties': {'key': 'key_props', 'type': 'KeyProperties'},
    +        'secret_properties': {'key': 'secret_props', 'type': 'SecretProperties'},
    +        'x509_certificate_properties': {'key': 'x509_props', 'type': 'X509CertificateProperties'},
    +        'lifetime_actions': {'key': 'lifetime_actions', 'type': '[LifetimeAction]'},
    +        'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificatePolicy, self).__init__(**kwargs)
    +        self.id = None
    +        self.key_properties = kwargs.get('key_properties', None)
    +        self.secret_properties = kwargs.get('secret_properties', None)
    +        self.x509_certificate_properties = kwargs.get('x509_certificate_properties', None)
    +        self.lifetime_actions = kwargs.get('lifetime_actions', None)
    +        self.issuer_parameters = kwargs.get('issuer_parameters', None)
    +        self.attributes = kwargs.get('attributes', None)
    +
    +
    +class CertificateRestoreParameters(Model):
    +    """The certificate restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param certificate_bundle_backup: Required. The backup blob associated
    +     with a certificate bundle.
    +    :type certificate_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'certificate_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'certificate_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateRestoreParameters, self).__init__(**kwargs)
    +        self.certificate_bundle_backup = kwargs.get('certificate_bundle_backup', None)
    +
    +
    +class CertificateUpdateParameters(Model):
    +    """The certificate update parameters.
    +
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateUpdateParameters, self).__init__(**kwargs)
    +        self.certificate_policy = kwargs.get('certificate_policy', None)
    +        self.certificate_attributes = kwargs.get('certificate_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class Contact(Model):
    +    """The contact information for the vault certificates.
    +
    +    :param email_address: Email address.
    +    :type email_address: str
    +    :param name: Name.
    +    :type name: str
    +    :param phone: Phone number.
    +    :type phone: str
    +    """
    +
    +    _attribute_map = {
    +        'email_address': {'key': 'email', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'phone': {'key': 'phone', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Contact, self).__init__(**kwargs)
    +        self.email_address = kwargs.get('email_address', None)
    +        self.name = kwargs.get('name', None)
    +        self.phone = kwargs.get('phone', None)
    +
    +
    +class Contacts(Model):
    +    """The contacts for the vault certificates.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Identifier for the contacts collection.
    +    :vartype id: str
    +    :param contact_list: The contact list for the vault certificates.
    +    :type contact_list: list[~azure.keyvault.v7_1.models.Contact]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'contact_list': {'key': 'contacts', 'type': '[Contact]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Contacts, self).__init__(**kwargs)
    +        self.id = None
    +        self.contact_list = kwargs.get('contact_list', None)
    +
    +
    +class DeletedCertificateBundle(CertificateBundle):
    +    """A Deleted Certificate consisting of its previous id, attributes and its
    +    tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :ivar kid: The key id.
    +    :vartype kid: str
    +    :ivar sid: The secret id.
    +    :vartype sid: str
    +    :ivar x509_thumbprint: Thumbprint of the certificate.
    +    :vartype x509_thumbprint: bytes
    +    :ivar policy: The management policy.
    +    :vartype policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param cer: CER contents of x509 certificate.
    +    :type cer: bytearray
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs
    +    :type tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted certificate.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the certificate is scheduled to
    +     be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the certificate was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'kid': {'readonly': True},
    +        'sid': {'readonly': True},
    +        'x509_thumbprint': {'readonly': True},
    +        'policy': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'sid': {'key': 'sid', 'type': 'str'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'cer': {'key': 'cer', 'type': 'bytearray'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedCertificateBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedCertificateItem(CertificateItem):
    +    """The deleted certificate item containing metadata about the deleted
    +    certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Certificate identifier.
    +    :type id: str
    +    :param attributes: The certificate management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param x509_thumbprint: Thumbprint of the certificate.
    +    :type x509_thumbprint: bytes
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted certificate.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the certificate is scheduled to
    +     be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the certificate was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedCertificateItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedCertificateListResult(Model):
    +    """A list of certificates that have been deleted in this vault.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of deleted certificates
    +     in the vault along with a link to the next page of deleted certificates
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedCertificateItem]
    +    :ivar next_link: The URL to get the next set of deleted certificates.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedCertificateItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedCertificateListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class KeyBundle(Model):
    +    """A KeyBundle consisting of a WebKey plus its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param key: The Json web key.
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyBundle, self).__init__(**kwargs)
    +        self.key = kwargs.get('key', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.managed = None
    +
    +
    +class DeletedKeyBundle(KeyBundle):
    +    """A DeletedKeyBundle consisting of a WebKey plus its Attributes and deletion
    +    info.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param key: The Json web key.
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted key.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the key is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the key was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedKeyBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class KeyItem(Model):
    +    """The key item containing key metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyItem, self).__init__(**kwargs)
    +        self.kid = kwargs.get('kid', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.managed = None
    +
    +
    +class DeletedKeyItem(KeyItem):
    +    """The deleted key item containing the deleted key metadata and information
    +    about deletion.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted key.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the key is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the key was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedKeyItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedKeyListResult(Model):
    +    """A list of keys that have been deleted in this vault.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of deleted keys in the
    +     vault along with a link to the next page of deleted keys
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedKeyItem]
    +    :ivar next_link: The URL to get the next set of deleted keys.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedKeyItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedKeyListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SasDefinitionBundle(Model):
    +    """A SAS definition bundle consists of key vault SAS definition details plus
    +    its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The SAS definition id.
    +    :vartype id: str
    +    :ivar secret_id: Storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :vartype template_uri: str
    +    :ivar sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :vartype sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :ivar validity_period: The validity period of SAS tokens created according
    +     to the SAS definition.
    +    :vartype validity_period: str
    +    :ivar attributes: The SAS definition attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'template_uri': {'readonly': True},
    +        'sas_type': {'readonly': True},
    +        'validity_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.secret_id = None
    +        self.template_uri = None
    +        self.sas_type = None
    +        self.validity_period = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedSasDefinitionBundle(SasDefinitionBundle):
    +    """A deleted SAS definition bundle consisting of its previous id, attributes
    +    and its tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The SAS definition id.
    +    :vartype id: str
    +    :ivar secret_id: Storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :vartype template_uri: str
    +    :ivar sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :vartype sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :ivar validity_period: The validity period of SAS tokens created according
    +     to the SAS definition.
    +    :vartype validity_period: str
    +    :ivar attributes: The SAS definition attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted SAS definition.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the SAS definition is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the SAS definition was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'template_uri': {'readonly': True},
    +        'sas_type': {'readonly': True},
    +        'validity_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSasDefinitionBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class SasDefinitionItem(Model):
    +    """The SAS definition item containing storage SAS definition metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage SAS identifier.
    +    :vartype id: str
    +    :ivar secret_id: The storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar attributes: The SAS definition management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionItem, self).__init__(**kwargs)
    +        self.id = None
    +        self.secret_id = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedSasDefinitionItem(SasDefinitionItem):
    +    """The deleted SAS definition item containing metadata about the deleted SAS
    +    definition.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage SAS identifier.
    +    :vartype id: str
    +    :ivar secret_id: The storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar attributes: The SAS definition management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted SAS definition.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the SAS definition is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the SAS definition was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSasDefinitionItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedSasDefinitionListResult(Model):
    +    """The deleted SAS definition list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted SAS
    +     definitions in the vault along with a link to the next page of deleted sas
    +     definitions
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedSasDefinitionItem]
    +    :ivar next_link: The URL to get the next set of deleted SAS definitions.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedSasDefinitionItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSasDefinitionListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SecretBundle(Model):
    +    """A secret consisting of a value, id and its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value: The secret value.
    +    :type value: str
    +    :param id: The secret id.
    +    :type id: str
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar kid: If this is a secret backing a KV certificate, then this field
    +     specifies the corresponding key backing the KV certificate.
    +    :vartype kid: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a secret backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretBundle, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.id = kwargs.get('id', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.kid = None
    +        self.managed = None
    +
    +
    +class DeletedSecretBundle(SecretBundle):
    +    """A Deleted Secret consisting of its previous id, attributes and its tags, as
    +    well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value: The secret value.
    +    :type value: str
    +    :param id: The secret id.
    +    :type id: str
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar kid: If this is a secret backing a KV certificate, then this field
    +     specifies the corresponding key backing the KV certificate.
    +    :vartype kid: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a secret backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted secret.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the secret is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the secret was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSecretBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class SecretItem(Model):
    +    """The secret item containing secret metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Secret identifier.
    +    :type id: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretItem, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.managed = None
    +
    +
    +class DeletedSecretItem(SecretItem):
    +    """The deleted secret item containing metadata about the deleted secret.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Secret identifier.
    +    :type id: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted secret.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the secret is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the secret was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSecretItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedSecretListResult(Model):
    +    """The deleted secret list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted secrets
    +     in the vault along with a link to the next page of deleted secrets
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedSecretItem]
    +    :ivar next_link: The URL to get the next set of deleted secrets.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedSecretItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSecretListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class StorageAccountItem(Model):
    +    """The storage account item containing storage account metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Storage identifier.
    +    :vartype id: str
    +    :ivar resource_id: Storage account resource Id.
    +    :vartype resource_id: str
    +    :ivar attributes: The storage account management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountItem, self).__init__(**kwargs)
    +        self.id = None
    +        self.resource_id = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedStorageAccountItem(StorageAccountItem):
    +    """The deleted storage account item containing metadata about the deleted
    +    storage account.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Storage identifier.
    +    :vartype id: str
    +    :ivar resource_id: Storage account resource Id.
    +    :vartype resource_id: str
    +    :ivar attributes: The storage account management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted storage account.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the storage account is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the storage account was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedStorageAccountItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class StorageBundle(Model):
    +    """A Storage account bundle consists of key vault storage account details plus
    +    its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage account id.
    +    :vartype id: str
    +    :ivar resource_id: The storage account resource id.
    +    :vartype resource_id: str
    +    :ivar active_key_name: The current active storage account key name.
    +    :vartype active_key_name: str
    +    :ivar auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :vartype auto_regenerate_key: bool
    +    :ivar regeneration_period: The key regeneration time duration specified in
    +     ISO-8601 format.
    +    :vartype regeneration_period: str
    +    :ivar attributes: The storage account attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'active_key_name': {'readonly': True},
    +        'auto_regenerate_key': {'readonly': True},
    +        'regeneration_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.resource_id = None
    +        self.active_key_name = None
    +        self.auto_regenerate_key = None
    +        self.regeneration_period = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedStorageBundle(StorageBundle):
    +    """A deleted storage account bundle consisting of its previous id, attributes
    +    and its tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage account id.
    +    :vartype id: str
    +    :ivar resource_id: The storage account resource id.
    +    :vartype resource_id: str
    +    :ivar active_key_name: The current active storage account key name.
    +    :vartype active_key_name: str
    +    :ivar auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :vartype auto_regenerate_key: bool
    +    :ivar regeneration_period: The key regeneration time duration specified in
    +     ISO-8601 format.
    +    :vartype regeneration_period: str
    +    :ivar attributes: The storage account attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted storage account.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the storage account is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the storage account was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'active_key_name': {'readonly': True},
    +        'auto_regenerate_key': {'readonly': True},
    +        'regeneration_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedStorageBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedStorageListResult(Model):
    +    """The deleted storage account list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted storage
    +     accounts in the vault along with a link to the next page of deleted
    +     storage accounts
    +    :vartype value:
    +     list[~azure.keyvault.v7_1.models.DeletedStorageAccountItem]
    +    :ivar next_link: The URL to get the next set of deleted storage accounts.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedStorageAccountItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedStorageListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class Error(Model):
    +    """The key vault server error.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: The error code.
    +    :vartype code: str
    +    :ivar message: The error message.
    +    :vartype message: str
    +    :ivar inner_error:
    +    :vartype inner_error: ~azure.keyvault.v7_1.models.Error
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'inner_error': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'inner_error': {'key': 'innererror', 'type': 'Error'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Error, self).__init__(**kwargs)
    +        self.code = None
    +        self.message = None
    +        self.inner_error = None
    +
    +
    +class IssuerAttributes(Model):
    +    """The attributes of an issuer managed by the Key Vault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the issuer is enabled.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IssuerAttributes, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.created = None
    +        self.updated = None
    +
    +
    +class IssuerBundle(Model):
    +    """The issuer for Key Vault certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Identifier for the issuer object.
    +    :vartype id: str
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IssuerBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.provider = kwargs.get('provider', None)
    +        self.credentials = kwargs.get('credentials', None)
    +        self.organization_details = kwargs.get('organization_details', None)
    +        self.attributes = kwargs.get('attributes', None)
    +
    +
    +class IssuerCredentials(Model):
    +    """The credentials to be used for the certificate issuer.
    +
    +    :param account_id: The user name/account name/account id.
    +    :type account_id: str
    +    :param password: The password/secret/account key.
    +    :type password: str
    +    """
    +
    +    _attribute_map = {
    +        'account_id': {'key': 'account_id', 'type': 'str'},
    +        'password': {'key': 'pwd', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IssuerCredentials, self).__init__(**kwargs)
    +        self.account_id = kwargs.get('account_id', None)
    +        self.password = kwargs.get('password', None)
    +
    +
    +class IssuerParameters(Model):
    +    """Parameters for the issuer of the X509 component of a certificate.
    +
    +    :param name: Name of the referenced issuer object or reserved names; for
    +     example, 'Self' or 'Unknown'.
    +    :type name: str
    +    :param certificate_type: Certificate type as supported by the provider
    +     (optional); for example 'OV-SSL', 'EV-SSL'
    +    :type certificate_type: str
    +    :param certificate_transparency: Indicates if the certificates generated
    +     under this policy should be published to certificate transparency logs.
    +    :type certificate_transparency: bool
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'certificate_type': {'key': 'cty', 'type': 'str'},
    +        'certificate_transparency': {'key': 'cert_transparency', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IssuerParameters, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.certificate_type = kwargs.get('certificate_type', None)
    +        self.certificate_transparency = kwargs.get('certificate_transparency', None)
    +
    +
    +class JsonWebKey(Model):
    +    """As of http://tools.ietf.org/html/draft-ietf-jose-json-web-key-18.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param kty: JsonWebKey Key Type (kty), as defined in
    +     https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40.
    +     Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'
    +    :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_ops:
    +    :type key_ops: list[str]
    +    :param n: RSA modulus.
    +    :type n: bytes
    +    :param e: RSA public exponent.
    +    :type e: bytes
    +    :param d: RSA private exponent, or the D component of an EC private key.
    +    :type d: bytes
    +    :param dp: RSA private key parameter.
    +    :type dp: bytes
    +    :param dq: RSA private key parameter.
    +    :type dq: bytes
    +    :param qi: RSA private key parameter.
    +    :type qi: bytes
    +    :param p: RSA secret prime.
    +    :type p: bytes
    +    :param q: RSA secret prime, with p < q.
    +    :type q: bytes
    +    :param k: Symmetric key.
    +    :type k: bytes
    +    :param t: HSM Token, used with 'Bring Your Own Key'.
    +    :type t: bytes
    +    :param crv: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type crv: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    :param x: X component of an EC public key.
    +    :type x: bytes
    +    :param y: Y component of an EC public key.
    +    :type y: bytes
    +    """
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'kty': {'key': 'kty', 'type': 'str'},
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'n': {'key': 'n', 'type': 'base64'},
    +        'e': {'key': 'e', 'type': 'base64'},
    +        'd': {'key': 'd', 'type': 'base64'},
    +        'dp': {'key': 'dp', 'type': 'base64'},
    +        'dq': {'key': 'dq', 'type': 'base64'},
    +        'qi': {'key': 'qi', 'type': 'base64'},
    +        'p': {'key': 'p', 'type': 'base64'},
    +        'q': {'key': 'q', 'type': 'base64'},
    +        'k': {'key': 'k', 'type': 'base64'},
    +        't': {'key': 'key_hsm', 'type': 'base64'},
    +        'crv': {'key': 'crv', 'type': 'str'},
    +        'x': {'key': 'x', 'type': 'base64'},
    +        'y': {'key': 'y', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(JsonWebKey, self).__init__(**kwargs)
    +        self.kid = kwargs.get('kid', None)
    +        self.kty = kwargs.get('kty', None)
    +        self.key_ops = kwargs.get('key_ops', None)
    +        self.n = kwargs.get('n', None)
    +        self.e = kwargs.get('e', None)
    +        self.d = kwargs.get('d', None)
    +        self.dp = kwargs.get('dp', None)
    +        self.dq = kwargs.get('dq', None)
    +        self.qi = kwargs.get('qi', None)
    +        self.p = kwargs.get('p', None)
    +        self.q = kwargs.get('q', None)
    +        self.k = kwargs.get('k', None)
    +        self.t = kwargs.get('t', None)
    +        self.crv = kwargs.get('crv', None)
    +        self.x = kwargs.get('x', None)
    +        self.y = kwargs.get('y', None)
    +
    +
    +class KeyAttributes(Attributes):
    +    """The attributes of a key managed by the key vault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for keys in the current vault. If it contains 'Purgeable' the key
    +     can be permanently deleted by a privileged user; otherwise, only the
    +     system can purge the key, at the end of the retention interval. Possible
    +     values include: 'Purgeable', 'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyAttributes, self).__init__(**kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class KeyCreateParameters(Model):
    +    """The key create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param kty: Required. The type of key to create. For valid values, see
    +     JsonWebKeyType. Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM',
    +     'oct'
    +    :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_size: The key size in bits. For example: 2048, 3072, or 4096
    +     for RSA.
    +    :type key_size: int
    +    :param key_ops:
    +    :type key_ops: list[str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +    :param key_attributes:
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param curve: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    """
    +
    +    _validation = {
    +        'kty': {'required': True, 'min_length': 1},
    +    }
    +
    +    _attribute_map = {
    +        'kty': {'key': 'kty', 'type': 'str'},
    +        'key_size': {'key': 'key_size', 'type': 'int'},
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'curve': {'key': 'crv', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyCreateParameters, self).__init__(**kwargs)
    +        self.kty = kwargs.get('kty', None)
    +        self.key_size = kwargs.get('key_size', None)
    +        self.key_ops = kwargs.get('key_ops', None)
    +        self.key_attributes = kwargs.get('key_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.curve = kwargs.get('curve', None)
    +
    +
    +class KeyImportParameters(Model):
    +    """The key import parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param hsm: Whether to import as a hardware key (HSM) or software key.
    +    :type hsm: bool
    +    :param key: Required. The Json web key
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param key_attributes: The key management attributes.
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'key': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'hsm': {'key': 'Hsm', 'type': 'bool'},
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyImportParameters, self).__init__(**kwargs)
    +        self.hsm = kwargs.get('hsm', None)
    +        self.key = kwargs.get('key', None)
    +        self.key_attributes = kwargs.get('key_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class KeyListResult(Model):
    +    """The key list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of keys in the key vault
    +     along with a link to the next page of keys.
    +    :vartype value: list[~azure.keyvault.v7_1.models.KeyItem]
    +    :ivar next_link: The URL to get the next set of keys.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[KeyItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class KeyOperationResult(Model):
    +    """The key operation result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar kid: Key identifier
    +    :vartype kid: str
    +    :ivar result:
    +    :vartype result: bytes
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'result': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'result': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyOperationResult, self).__init__(**kwargs)
    +        self.kid = None
    +        self.result = None
    +
    +
    +class KeyOperationsParameters(Model):
    +    """The key operations parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. algorithm identifier. Possible values include:
    +     'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +    :param value: Required.
    +    :type value: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyOperationsParameters, self).__init__(**kwargs)
    +        self.algorithm = kwargs.get('algorithm', None)
    +        self.value = kwargs.get('value', None)
    +
    +
    +class KeyProperties(Model):
    +    """Properties of the key pair backing a certificate.
    +
    +    :param exportable: Indicates if the private key can be exported.
    +    :type exportable: bool
    +    :param key_type: The type of key pair to be used for the certificate.
    +     Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'
    +    :type key_type: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_size: The key size in bits. For example: 2048, 3072, or 4096
    +     for RSA.
    +    :type key_size: int
    +    :param reuse_key: Indicates if the same key pair will be used on
    +     certificate renewal.
    +    :type reuse_key: bool
    +    :param curve: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    """
    +
    +    _attribute_map = {
    +        'exportable': {'key': 'exportable', 'type': 'bool'},
    +        'key_type': {'key': 'kty', 'type': 'str'},
    +        'key_size': {'key': 'key_size', 'type': 'int'},
    +        'reuse_key': {'key': 'reuse_key', 'type': 'bool'},
    +        'curve': {'key': 'crv', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyProperties, self).__init__(**kwargs)
    +        self.exportable = kwargs.get('exportable', None)
    +        self.key_type = kwargs.get('key_type', None)
    +        self.key_size = kwargs.get('key_size', None)
    +        self.reuse_key = kwargs.get('reuse_key', None)
    +        self.curve = kwargs.get('curve', None)
    +
    +
    +class KeyRestoreParameters(Model):
    +    """The key restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_bundle_backup: Required. The backup blob associated with a key
    +     bundle.
    +    :type key_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'key_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyRestoreParameters, self).__init__(**kwargs)
    +        self.key_bundle_backup = kwargs.get('key_bundle_backup', None)
    +
    +
    +class KeySignParameters(Model):
    +    """The key operations parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. The signing/verification algorithm identifier.
    +     For more information on possible algorithm types, see
    +     JsonWebKeySignatureAlgorithm. Possible values include: 'PS256', 'PS384',
    +     'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256', 'ES384', 'ES512',
    +     'ES256K'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +    :param value: Required.
    +    :type value: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeySignParameters, self).__init__(**kwargs)
    +        self.algorithm = kwargs.get('algorithm', None)
    +        self.value = kwargs.get('value', None)
    +
    +
    +class KeyUpdateParameters(Model):
    +    """The key update parameters.
    +
    +    :param key_ops: Json web key operations. For more information on possible
    +     key operations, see JsonWebKeyOperation.
    +    :type key_ops: list[str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +    :param key_attributes:
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyUpdateParameters, self).__init__(**kwargs)
    +        self.key_ops = kwargs.get('key_ops', None)
    +        self.key_attributes = kwargs.get('key_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class KeyVaultError(Model):
    +    """The key vault error exception.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar error:
    +    :vartype error: ~azure.keyvault.v7_1.models.Error
    +    """
    +
    +    _validation = {
    +        'error': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'Error'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyVaultError, self).__init__(**kwargs)
    +        self.error = None
    +
    +
    +class KeyVaultErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'KeyVaultError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'KeyVaultError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(KeyVaultErrorException, self).__init__(response=response)
    +
    +
    +class KeyVerifyParameters(Model):
    +    """The key verify parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. The signing/verification algorithm. For more
    +     information on possible algorithm types, see JsonWebKeySignatureAlgorithm.
    +     Possible values include: 'PS256', 'PS384', 'PS512', 'RS256', 'RS384',
    +     'RS512', 'RSNULL', 'ES256', 'ES384', 'ES512', 'ES256K'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +    :param digest: Required. The digest used for signing.
    +    :type digest: bytes
    +    :param signature: Required. The signature to be verified.
    +    :type signature: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'digest': {'required': True},
    +        'signature': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'digest': {'key': 'digest', 'type': 'base64'},
    +        'signature': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyVerifyParameters, self).__init__(**kwargs)
    +        self.algorithm = kwargs.get('algorithm', None)
    +        self.digest = kwargs.get('digest', None)
    +        self.signature = kwargs.get('signature', None)
    +
    +
    +class KeyVerifyResult(Model):
    +    """The key verify result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: True if the signature is verified, otherwise false.
    +    :vartype value: bool
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyVerifyResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class LifetimeAction(Model):
    +    """Action and its trigger that will be performed by Key Vault over the
    +    lifetime of a certificate.
    +
    +    :param trigger: The condition that will execute the action.
    +    :type trigger: ~azure.keyvault.v7_1.models.Trigger
    +    :param action: The action that will be executed.
    +    :type action: ~azure.keyvault.v7_1.models.Action
    +    """
    +
    +    _attribute_map = {
    +        'trigger': {'key': 'trigger', 'type': 'Trigger'},
    +        'action': {'key': 'action', 'type': 'Action'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(LifetimeAction, self).__init__(**kwargs)
    +        self.trigger = kwargs.get('trigger', None)
    +        self.action = kwargs.get('action', None)
    +
    +
    +class OrganizationDetails(Model):
    +    """Details of the organization of the certificate issuer.
    +
    +    :param id: Id of the organization.
    +    :type id: str
    +    :param admin_details: Details of the organization administrator.
    +    :type admin_details:
    +     list[~azure.keyvault.v7_1.models.AdministratorDetails]
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'admin_details': {'key': 'admin_details', 'type': '[AdministratorDetails]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(OrganizationDetails, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.admin_details = kwargs.get('admin_details', None)
    +
    +
    +class PendingCertificateSigningRequestResult(Model):
    +    """The pending certificate signing request result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The pending certificate signing request as Base64 encoded
    +     string.
    +    :vartype value: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PendingCertificateSigningRequestResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class SasDefinitionAttributes(Model):
    +    """The SAS definition management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: the enabled state of the object.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for SAS definitions in the current vault. If it contains
    +     'Purgeable' the SAS definition can be permanently deleted by a privileged
    +     user; otherwise, only the system can purge the SAS definition, at the end
    +     of the retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionAttributes, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.created = None
    +        self.updated = None
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class SasDefinitionCreateParameters(Model):
    +    """The SAS definition create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param template_uri: Required. The SAS definition token template signed
    +     with an arbitrary key.  Tokens created according to the SAS definition
    +     will have the same properties as the template.
    +    :type template_uri: str
    +    :param sas_type: Required. The type of SAS token the SAS definition will
    +     create. Possible values include: 'account', 'service'
    +    :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :param validity_period: Required. The validity period of SAS tokens
    +     created according to the SAS definition.
    +    :type validity_period: str
    +    :param sas_definition_attributes: The attributes of the SAS definition.
    +    :type sas_definition_attributes:
    +     ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'template_uri': {'required': True},
    +        'sas_type': {'required': True},
    +        'validity_period': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'sas_definition_attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionCreateParameters, self).__init__(**kwargs)
    +        self.template_uri = kwargs.get('template_uri', None)
    +        self.sas_type = kwargs.get('sas_type', None)
    +        self.validity_period = kwargs.get('validity_period', None)
    +        self.sas_definition_attributes = kwargs.get('sas_definition_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class SasDefinitionListResult(Model):
    +    """The storage account SAS definition list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of SAS definitions along
    +     with a link to the next page of SAS definitions.
    +    :vartype value: list[~azure.keyvault.v7_1.models.SasDefinitionItem]
    +    :ivar next_link: The URL to get the next set of SAS definitions.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SasDefinitionItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SasDefinitionUpdateParameters(Model):
    +    """The SAS definition update parameters.
    +
    +    :param template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :type template_uri: str
    +    :param sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :param validity_period: The validity period of SAS tokens created
    +     according to the SAS definition.
    +    :type validity_period: str
    +    :param sas_definition_attributes: The attributes of the SAS definition.
    +    :type sas_definition_attributes:
    +     ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'sas_definition_attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionUpdateParameters, self).__init__(**kwargs)
    +        self.template_uri = kwargs.get('template_uri', None)
    +        self.sas_type = kwargs.get('sas_type', None)
    +        self.validity_period = kwargs.get('validity_period', None)
    +        self.sas_definition_attributes = kwargs.get('sas_definition_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class SecretAttributes(Attributes):
    +    """The secret management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for secrets in the current vault. If it contains 'Purgeable', the
    +     secret can be permanently deleted by a privileged user; otherwise, only
    +     the system can purge the secret, at the end of the retention interval.
    +     Possible values include: 'Purgeable', 'Recoverable+Purgeable',
    +     'Recoverable', 'Recoverable+ProtectedSubscription',
    +     'CustomizedRecoverable+Purgeable', 'CustomizedRecoverable',
    +     'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretAttributes, self).__init__(**kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class SecretListResult(Model):
    +    """The secret list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of secrets in the key
    +     vault along with a link to the next page of secrets.
    +    :vartype value: list[~azure.keyvault.v7_1.models.SecretItem]
    +    :ivar next_link: The URL to get the next set of secrets.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SecretItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SecretProperties(Model):
    +    """Properties of the key backing a certificate.
    +
    +    :param content_type: The media type (MIME type).
    +    :type content_type: str
    +    """
    +
    +    _attribute_map = {
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretProperties, self).__init__(**kwargs)
    +        self.content_type = kwargs.get('content_type', None)
    +
    +
    +class SecretRestoreParameters(Model):
    +    """The secret restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param secret_bundle_backup: Required. The backup blob associated with a
    +     secret bundle.
    +    :type secret_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'secret_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'secret_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretRestoreParameters, self).__init__(**kwargs)
    +        self.secret_bundle_backup = kwargs.get('secret_bundle_backup', None)
    +
    +
    +class SecretSetParameters(Model):
    +    """The secret set parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param value: Required. The value of the secret.
    +    :type value: str
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :param secret_attributes: The secret management attributes.
    +    :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    """
    +
    +    _validation = {
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretSetParameters, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.secret_attributes = kwargs.get('secret_attributes', None)
    +
    +
    +class SecretUpdateParameters(Model):
    +    """The secret update parameters.
    +
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :param secret_attributes: The secret management attributes.
    +    :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretUpdateParameters, self).__init__(**kwargs)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.secret_attributes = kwargs.get('secret_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class StorageAccountAttributes(Model):
    +    """The storage account management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: the enabled state of the object.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for storage accounts in the current vault. If it contains
    +     'Purgeable' the storage account can be permanently deleted by a privileged
    +     user; otherwise, only the system can purge the storage account, at the end
    +     of the retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountAttributes, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.created = None
    +        self.updated = None
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class StorageAccountCreateParameters(Model):
    +    """The storage account create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param resource_id: Required. Storage account resource id.
    +    :type resource_id: str
    +    :param active_key_name: Required. Current active storage account key name.
    +    :type active_key_name: str
    +    :param auto_regenerate_key: Required. whether keyvault should manage the
    +     storage account for the user.
    +    :type auto_regenerate_key: bool
    +    :param regeneration_period: The key regeneration time duration specified
    +     in ISO-8601 format.
    +    :type regeneration_period: str
    +    :param storage_account_attributes: The attributes of the storage account.
    +    :type storage_account_attributes:
    +     ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'resource_id': {'required': True},
    +        'active_key_name': {'required': True},
    +        'auto_regenerate_key': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'storage_account_attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountCreateParameters, self).__init__(**kwargs)
    +        self.resource_id = kwargs.get('resource_id', None)
    +        self.active_key_name = kwargs.get('active_key_name', None)
    +        self.auto_regenerate_key = kwargs.get('auto_regenerate_key', None)
    +        self.regeneration_period = kwargs.get('regeneration_period', None)
    +        self.storage_account_attributes = kwargs.get('storage_account_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class StorageAccountRegenerteKeyParameters(Model):
    +    """The storage account key regenerate parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_name: Required. The storage account key name.
    +    :type key_name: str
    +    """
    +
    +    _validation = {
    +        'key_name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_name': {'key': 'keyName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountRegenerteKeyParameters, self).__init__(**kwargs)
    +        self.key_name = kwargs.get('key_name', None)
    +
    +
    +class StorageAccountUpdateParameters(Model):
    +    """The storage account update parameters.
    +
    +    :param active_key_name: The current active storage account key name.
    +    :type active_key_name: str
    +    :param auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :type auto_regenerate_key: bool
    +    :param regeneration_period: The key regeneration time duration specified
    +     in ISO-8601 format.
    +    :type regeneration_period: str
    +    :param storage_account_attributes: The attributes of the storage account.
    +    :type storage_account_attributes:
    +     ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'storage_account_attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountUpdateParameters, self).__init__(**kwargs)
    +        self.active_key_name = kwargs.get('active_key_name', None)
    +        self.auto_regenerate_key = kwargs.get('auto_regenerate_key', None)
    +        self.regeneration_period = kwargs.get('regeneration_period', None)
    +        self.storage_account_attributes = kwargs.get('storage_account_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class StorageListResult(Model):
    +    """The storage accounts list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of storage accounts in
    +     the key vault along with a link to the next page of storage accounts.
    +    :vartype value: list[~azure.keyvault.v7_1.models.StorageAccountItem]
    +    :ivar next_link: The URL to get the next set of storage accounts.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[StorageAccountItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class StorageRestoreParameters(Model):
    +    """The secret restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param storage_bundle_backup: Required. The backup blob associated with a
    +     storage account.
    +    :type storage_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'storage_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'storage_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageRestoreParameters, self).__init__(**kwargs)
    +        self.storage_bundle_backup = kwargs.get('storage_bundle_backup', None)
    +
    +
    +class SubjectAlternativeNames(Model):
    +    """The subject alternate names of a X509 object.
    +
    +    :param emails: Email addresses.
    +    :type emails: list[str]
    +    :param dns_names: Domain names.
    +    :type dns_names: list[str]
    +    :param upns: User principal names.
    +    :type upns: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'emails': {'key': 'emails', 'type': '[str]'},
    +        'dns_names': {'key': 'dns_names', 'type': '[str]'},
    +        'upns': {'key': 'upns', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SubjectAlternativeNames, self).__init__(**kwargs)
    +        self.emails = kwargs.get('emails', None)
    +        self.dns_names = kwargs.get('dns_names', None)
    +        self.upns = kwargs.get('upns', None)
    +
    +
    +class Trigger(Model):
    +    """A condition to be satisfied for an action to be executed.
    +
    +    :param lifetime_percentage: Percentage of lifetime at which to trigger.
    +     Value should be between 1 and 99.
    +    :type lifetime_percentage: int
    +    :param days_before_expiry: Days before expiry to attempt renewal. Value
    +     should be between 1 and validity_in_months multiplied by 27. If
    +     validity_in_months is 36, then value should be between 1 and 972 (36 *
    +     27).
    +    :type days_before_expiry: int
    +    """
    +
    +    _validation = {
    +        'lifetime_percentage': {'maximum': 99, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lifetime_percentage': {'key': 'lifetime_percentage', 'type': 'int'},
    +        'days_before_expiry': {'key': 'days_before_expiry', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Trigger, self).__init__(**kwargs)
    +        self.lifetime_percentage = kwargs.get('lifetime_percentage', None)
    +        self.days_before_expiry = kwargs.get('days_before_expiry', None)
    +
    +
    +class X509CertificateProperties(Model):
    +    """Properties of the X509 component of a certificate.
    +
    +    :param subject: The subject name. Should be a valid X509 distinguished
    +     Name.
    +    :type subject: str
    +    :param ekus: The enhanced key usage.
    +    :type ekus: list[str]
    +    :param subject_alternative_names: The subject alternative names.
    +    :type subject_alternative_names:
    +     ~azure.keyvault.v7_1.models.SubjectAlternativeNames
    +    :param key_usage: List of key usages.
    +    :type key_usage: list[str or ~azure.keyvault.v7_1.models.KeyUsageType]
    +    :param validity_in_months: The duration that the certificate is valid in
    +     months.
    +    :type validity_in_months: int
    +    """
    +
    +    _validation = {
    +        'validity_in_months': {'minimum': 0},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'ekus': {'key': 'ekus', 'type': '[str]'},
    +        'subject_alternative_names': {'key': 'sans', 'type': 'SubjectAlternativeNames'},
    +        'key_usage': {'key': 'key_usage', 'type': '[str]'},
    +        'validity_in_months': {'key': 'validity_months', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(X509CertificateProperties, self).__init__(**kwargs)
    +        self.subject = kwargs.get('subject', None)
    +        self.ekus = kwargs.get('ekus', None)
    +        self.subject_alternative_names = kwargs.get('subject_alternative_names', None)
    +        self.key_usage = kwargs.get('key_usage', None)
    +        self.validity_in_months = kwargs.get('validity_in_months', None)
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/models/_models_py3.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/models/_models_py3.py
    new file mode 100644
    index 000000000000..b57835037d85
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/models/_models_py3.py
    @@ -0,0 +1,3244 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from azure.core.exceptions import HttpResponseError
    +
    +
    +class Action(Model):
    +    """The action that will be executed.
    +
    +    :param action_type: The type of the action. Possible values include:
    +     'EmailContacts', 'AutoRenew'
    +    :type action_type: str or ~azure.keyvault.v7_1.models.ActionType
    +    """
    +
    +    _attribute_map = {
    +        'action_type': {'key': 'action_type', 'type': 'ActionType'},
    +    }
    +
    +    def __init__(self, *, action_type=None, **kwargs) -> None:
    +        super(Action, self).__init__(**kwargs)
    +        self.action_type = action_type
    +
    +
    +class AdministratorDetails(Model):
    +    """Details of the organization administrator of the certificate issuer.
    +
    +    :param first_name: First name.
    +    :type first_name: str
    +    :param last_name: Last name.
    +    :type last_name: str
    +    :param email_address: Email address.
    +    :type email_address: str
    +    :param phone: Phone number.
    +    :type phone: str
    +    """
    +
    +    _attribute_map = {
    +        'first_name': {'key': 'first_name', 'type': 'str'},
    +        'last_name': {'key': 'last_name', 'type': 'str'},
    +        'email_address': {'key': 'email', 'type': 'str'},
    +        'phone': {'key': 'phone', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, first_name: str=None, last_name: str=None, email_address: str=None, phone: str=None, **kwargs) -> None:
    +        super(AdministratorDetails, self).__init__(**kwargs)
    +        self.first_name = first_name
    +        self.last_name = last_name
    +        self.email_address = email_address
    +        self.phone = phone
    +
    +
    +class Attributes(Model):
    +    """The object attributes managed by the KeyVault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, not_before=None, expires=None, **kwargs) -> None:
    +        super(Attributes, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.not_before = not_before
    +        self.expires = expires
    +        self.created = None
    +        self.updated = None
    +
    +
    +class BackupCertificateResult(Model):
    +    """The backup certificate result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up certificate.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(BackupCertificateResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupKeyResult(Model):
    +    """The backup key result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up key.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(BackupKeyResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupSecretResult(Model):
    +    """The backup secret result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up secret.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(BackupSecretResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupStorageResult(Model):
    +    """The backup storage result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up storage account.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(BackupStorageResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class CertificateAttributes(Attributes):
    +    """The certificate management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for certificates in the current vault. If it contains 'Purgeable',
    +     the certificate can be permanently deleted by a privileged user;
    +     otherwise, only the system can purge the certificate, at the end of the
    +     retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, not_before=None, expires=None, **kwargs) -> None:
    +        super(CertificateAttributes, self).__init__(enabled=enabled, not_before=not_before, expires=expires, **kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class CertificateBundle(Model):
    +    """A certificate bundle consists of a certificate (X509) plus its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :ivar kid: The key id.
    +    :vartype kid: str
    +    :ivar sid: The secret id.
    +    :vartype sid: str
    +    :ivar x509_thumbprint: Thumbprint of the certificate.
    +    :vartype x509_thumbprint: bytes
    +    :ivar policy: The management policy.
    +    :vartype policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param cer: CER contents of x509 certificate.
    +    :type cer: bytearray
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'kid': {'readonly': True},
    +        'sid': {'readonly': True},
    +        'x509_thumbprint': {'readonly': True},
    +        'policy': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'sid': {'key': 'sid', 'type': 'str'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'cer': {'key': 'cer', 'type': 'bytearray'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, cer: bytearray=None, content_type: str=None, attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.kid = None
    +        self.sid = None
    +        self.x509_thumbprint = None
    +        self.policy = None
    +        self.cer = cer
    +        self.content_type = content_type
    +        self.attributes = attributes
    +        self.tags = tags
    +
    +
    +class CertificateCreateParameters(Model):
    +    """The certificate create parameters.
    +
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, certificate_policy=None, certificate_attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateCreateParameters, self).__init__(**kwargs)
    +        self.certificate_policy = certificate_policy
    +        self.certificate_attributes = certificate_attributes
    +        self.tags = tags
    +
    +
    +class CertificateImportParameters(Model):
    +    """The certificate import parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param base64_encoded_certificate: Required. Base64 encoded representation
    +     of the certificate object to import. This certificate needs to contain the
    +     private key.
    +    :type base64_encoded_certificate: str
    +    :param password: If the private key in base64EncodedCertificate is
    +     encrypted, the password used for encryption.
    +    :type password: str
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'base64_encoded_certificate': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'base64_encoded_certificate': {'key': 'value', 'type': 'str'},
    +        'password': {'key': 'pwd', 'type': 'str'},
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, base64_encoded_certificate: str, password: str=None, certificate_policy=None, certificate_attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateImportParameters, self).__init__(**kwargs)
    +        self.base64_encoded_certificate = base64_encoded_certificate
    +        self.password = password
    +        self.certificate_policy = certificate_policy
    +        self.certificate_attributes = certificate_attributes
    +        self.tags = tags
    +
    +
    +class CertificateIssuerItem(Model):
    +    """The certificate issuer item containing certificate issuer metadata.
    +
    +    :param id: Certificate Identifier.
    +    :type id: str
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'provider': {'key': 'provider', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, id: str=None, provider: str=None, **kwargs) -> None:
    +        super(CertificateIssuerItem, self).__init__(**kwargs)
    +        self.id = id
    +        self.provider = provider
    +
    +
    +class CertificateIssuerListResult(Model):
    +    """The certificate issuer list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of certificate issuers
    +     in the key vault along with a link to the next page of certificate
    +     issuers.
    +    :vartype value: list[~azure.keyvault.v7_1.models.CertificateIssuerItem]
    +    :ivar next_link: The URL to get the next set of certificate issuers.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateIssuerItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(CertificateIssuerListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class CertificateIssuerSetParameters(Model):
    +    """The certificate issuer set parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param provider: Required. The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _validation = {
    +        'provider': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, *, provider: str, credentials=None, organization_details=None, attributes=None, **kwargs) -> None:
    +        super(CertificateIssuerSetParameters, self).__init__(**kwargs)
    +        self.provider = provider
    +        self.credentials = credentials
    +        self.organization_details = organization_details
    +        self.attributes = attributes
    +
    +
    +class CertificateIssuerUpdateParameters(Model):
    +    """The certificate issuer update parameters.
    +
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, *, provider: str=None, credentials=None, organization_details=None, attributes=None, **kwargs) -> None:
    +        super(CertificateIssuerUpdateParameters, self).__init__(**kwargs)
    +        self.provider = provider
    +        self.credentials = credentials
    +        self.organization_details = organization_details
    +        self.attributes = attributes
    +
    +
    +class CertificateItem(Model):
    +    """The certificate item containing certificate metadata.
    +
    +    :param id: Certificate identifier.
    +    :type id: str
    +    :param attributes: The certificate management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param x509_thumbprint: Thumbprint of the certificate.
    +    :type x509_thumbprint: bytes
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, id: str=None, attributes=None, tags=None, x509_thumbprint: bytes=None, **kwargs) -> None:
    +        super(CertificateItem, self).__init__(**kwargs)
    +        self.id = id
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.x509_thumbprint = x509_thumbprint
    +
    +
    +class CertificateListResult(Model):
    +    """The certificate list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of certificates in the
    +     key vault along with a link to the next page of certificates.
    +    :vartype value: list[~azure.keyvault.v7_1.models.CertificateItem]
    +    :ivar next_link: The URL to get the next set of certificates.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(CertificateListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class CertificateMergeParameters(Model):
    +    """The certificate merge parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param x509_certificates: Required. The certificate or the certificate
    +     chain to merge.
    +    :type x509_certificates: list[bytearray]
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'x509_certificates': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'x509_certificates': {'key': 'x5c', 'type': '[bytearray]'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, x509_certificates, certificate_attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateMergeParameters, self).__init__(**kwargs)
    +        self.x509_certificates = x509_certificates
    +        self.certificate_attributes = certificate_attributes
    +        self.tags = tags
    +
    +
    +class CertificateOperation(Model):
    +    """A certificate operation is returned in case of asynchronous requests.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :param issuer_parameters: Parameters for the issuer of the X509 component
    +     of a certificate.
    +    :type issuer_parameters: ~azure.keyvault.v7_1.models.IssuerParameters
    +    :param csr: The certificate signing request (CSR) that is being used in
    +     the certificate operation.
    +    :type csr: bytearray
    +    :param cancellation_requested: Indicates if cancellation was requested on
    +     the certificate operation.
    +    :type cancellation_requested: bool
    +    :param status: Status of the certificate operation.
    +    :type status: str
    +    :param status_details: The status details of the certificate operation.
    +    :type status_details: str
    +    :param error: Error encountered, if any, during the certificate operation.
    +    :type error: ~azure.keyvault.v7_1.models.Error
    +    :param target: Location which contains the result of the certificate
    +     operation.
    +    :type target: str
    +    :param request_id: Identifier for the certificate operation.
    +    :type request_id: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'},
    +        'csr': {'key': 'csr', 'type': 'bytearray'},
    +        'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'},
    +        'status': {'key': 'status', 'type': 'str'},
    +        'status_details': {'key': 'status_details', 'type': 'str'},
    +        'error': {'key': 'error', 'type': 'Error'},
    +        'target': {'key': 'target', 'type': 'str'},
    +        'request_id': {'key': 'request_id', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, issuer_parameters=None, csr: bytearray=None, cancellation_requested: bool=None, status: str=None, status_details: str=None, error=None, target: str=None, request_id: str=None, **kwargs) -> None:
    +        super(CertificateOperation, self).__init__(**kwargs)
    +        self.id = None
    +        self.issuer_parameters = issuer_parameters
    +        self.csr = csr
    +        self.cancellation_requested = cancellation_requested
    +        self.status = status
    +        self.status_details = status_details
    +        self.error = error
    +        self.target = target
    +        self.request_id = request_id
    +
    +
    +class CertificateOperationUpdateParameter(Model):
    +    """The certificate operation update parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param cancellation_requested: Required. Indicates if cancellation was
    +     requested on the certificate operation.
    +    :type cancellation_requested: bool
    +    """
    +
    +    _validation = {
    +        'cancellation_requested': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, cancellation_requested: bool, **kwargs) -> None:
    +        super(CertificateOperationUpdateParameter, self).__init__(**kwargs)
    +        self.cancellation_requested = cancellation_requested
    +
    +
    +class CertificatePolicy(Model):
    +    """Management policy for a certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :param key_properties: Properties of the key backing a certificate.
    +    :type key_properties: ~azure.keyvault.v7_1.models.KeyProperties
    +    :param secret_properties: Properties of the secret backing a certificate.
    +    :type secret_properties: ~azure.keyvault.v7_1.models.SecretProperties
    +    :param x509_certificate_properties: Properties of the X509 component of a
    +     certificate.
    +    :type x509_certificate_properties:
    +     ~azure.keyvault.v7_1.models.X509CertificateProperties
    +    :param lifetime_actions: Actions that will be performed by Key Vault over
    +     the lifetime of a certificate.
    +    :type lifetime_actions: list[~azure.keyvault.v7_1.models.LifetimeAction]
    +    :param issuer_parameters: Parameters for the issuer of the X509 component
    +     of a certificate.
    +    :type issuer_parameters: ~azure.keyvault.v7_1.models.IssuerParameters
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'key_properties': {'key': 'key_props', 'type': 'KeyProperties'},
    +        'secret_properties': {'key': 'secret_props', 'type': 'SecretProperties'},
    +        'x509_certificate_properties': {'key': 'x509_props', 'type': 'X509CertificateProperties'},
    +        'lifetime_actions': {'key': 'lifetime_actions', 'type': '[LifetimeAction]'},
    +        'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +    }
    +
    +    def __init__(self, *, key_properties=None, secret_properties=None, x509_certificate_properties=None, lifetime_actions=None, issuer_parameters=None, attributes=None, **kwargs) -> None:
    +        super(CertificatePolicy, self).__init__(**kwargs)
    +        self.id = None
    +        self.key_properties = key_properties
    +        self.secret_properties = secret_properties
    +        self.x509_certificate_properties = x509_certificate_properties
    +        self.lifetime_actions = lifetime_actions
    +        self.issuer_parameters = issuer_parameters
    +        self.attributes = attributes
    +
    +
    +class CertificateRestoreParameters(Model):
    +    """The certificate restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param certificate_bundle_backup: Required. The backup blob associated
    +     with a certificate bundle.
    +    :type certificate_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'certificate_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'certificate_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, certificate_bundle_backup: bytes, **kwargs) -> None:
    +        super(CertificateRestoreParameters, self).__init__(**kwargs)
    +        self.certificate_bundle_backup = certificate_bundle_backup
    +
    +
    +class CertificateUpdateParameters(Model):
    +    """The certificate update parameters.
    +
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, certificate_policy=None, certificate_attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateUpdateParameters, self).__init__(**kwargs)
    +        self.certificate_policy = certificate_policy
    +        self.certificate_attributes = certificate_attributes
    +        self.tags = tags
    +
    +
    +class Contact(Model):
    +    """The contact information for the vault certificates.
    +
    +    :param email_address: Email address.
    +    :type email_address: str
    +    :param name: Name.
    +    :type name: str
    +    :param phone: Phone number.
    +    :type phone: str
    +    """
    +
    +    _attribute_map = {
    +        'email_address': {'key': 'email', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'phone': {'key': 'phone', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, email_address: str=None, name: str=None, phone: str=None, **kwargs) -> None:
    +        super(Contact, self).__init__(**kwargs)
    +        self.email_address = email_address
    +        self.name = name
    +        self.phone = phone
    +
    +
    +class Contacts(Model):
    +    """The contacts for the vault certificates.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Identifier for the contacts collection.
    +    :vartype id: str
    +    :param contact_list: The contact list for the vault certificates.
    +    :type contact_list: list[~azure.keyvault.v7_1.models.Contact]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'contact_list': {'key': 'contacts', 'type': '[Contact]'},
    +    }
    +
    +    def __init__(self, *, contact_list=None, **kwargs) -> None:
    +        super(Contacts, self).__init__(**kwargs)
    +        self.id = None
    +        self.contact_list = contact_list
    +
    +
    +class DeletedCertificateBundle(CertificateBundle):
    +    """A Deleted Certificate consisting of its previous id, attributes and its
    +    tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :ivar kid: The key id.
    +    :vartype kid: str
    +    :ivar sid: The secret id.
    +    :vartype sid: str
    +    :ivar x509_thumbprint: Thumbprint of the certificate.
    +    :vartype x509_thumbprint: bytes
    +    :ivar policy: The management policy.
    +    :vartype policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param cer: CER contents of x509 certificate.
    +    :type cer: bytearray
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs
    +    :type tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted certificate.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the certificate is scheduled to
    +     be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the certificate was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'kid': {'readonly': True},
    +        'sid': {'readonly': True},
    +        'x509_thumbprint': {'readonly': True},
    +        'policy': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'sid': {'key': 'sid', 'type': 'str'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'cer': {'key': 'cer', 'type': 'bytearray'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, cer: bytearray=None, content_type: str=None, attributes=None, tags=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedCertificateBundle, self).__init__(cer=cer, content_type=content_type, attributes=attributes, tags=tags, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedCertificateItem(CertificateItem):
    +    """The deleted certificate item containing metadata about the deleted
    +    certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Certificate identifier.
    +    :type id: str
    +    :param attributes: The certificate management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param x509_thumbprint: Thumbprint of the certificate.
    +    :type x509_thumbprint: bytes
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted certificate.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the certificate is scheduled to
    +     be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the certificate was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, id: str=None, attributes=None, tags=None, x509_thumbprint: bytes=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedCertificateItem, self).__init__(id=id, attributes=attributes, tags=tags, x509_thumbprint=x509_thumbprint, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedCertificateListResult(Model):
    +    """A list of certificates that have been deleted in this vault.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of deleted certificates
    +     in the vault along with a link to the next page of deleted certificates
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedCertificateItem]
    +    :ivar next_link: The URL to get the next set of deleted certificates.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedCertificateItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedCertificateListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class KeyBundle(Model):
    +    """A KeyBundle consisting of a WebKey plus its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param key: The Json web key.
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, key=None, attributes=None, tags=None, **kwargs) -> None:
    +        super(KeyBundle, self).__init__(**kwargs)
    +        self.key = key
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.managed = None
    +
    +
    +class DeletedKeyBundle(KeyBundle):
    +    """A DeletedKeyBundle consisting of a WebKey plus its Attributes and deletion
    +    info.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param key: The Json web key.
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted key.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the key is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the key was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, key=None, attributes=None, tags=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedKeyBundle, self).__init__(key=key, attributes=attributes, tags=tags, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class KeyItem(Model):
    +    """The key item containing key metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, kid: str=None, attributes=None, tags=None, **kwargs) -> None:
    +        super(KeyItem, self).__init__(**kwargs)
    +        self.kid = kid
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.managed = None
    +
    +
    +class DeletedKeyItem(KeyItem):
    +    """The deleted key item containing the deleted key metadata and information
    +    about deletion.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted key.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the key is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the key was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, kid: str=None, attributes=None, tags=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedKeyItem, self).__init__(kid=kid, attributes=attributes, tags=tags, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedKeyListResult(Model):
    +    """A list of keys that have been deleted in this vault.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of deleted keys in the
    +     vault along with a link to the next page of deleted keys
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedKeyItem]
    +    :ivar next_link: The URL to get the next set of deleted keys.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedKeyItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedKeyListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SasDefinitionBundle(Model):
    +    """A SAS definition bundle consists of key vault SAS definition details plus
    +    its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The SAS definition id.
    +    :vartype id: str
    +    :ivar secret_id: Storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :vartype template_uri: str
    +    :ivar sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :vartype sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :ivar validity_period: The validity period of SAS tokens created according
    +     to the SAS definition.
    +    :vartype validity_period: str
    +    :ivar attributes: The SAS definition attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'template_uri': {'readonly': True},
    +        'sas_type': {'readonly': True},
    +        'validity_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(SasDefinitionBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.secret_id = None
    +        self.template_uri = None
    +        self.sas_type = None
    +        self.validity_period = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedSasDefinitionBundle(SasDefinitionBundle):
    +    """A deleted SAS definition bundle consisting of its previous id, attributes
    +    and its tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The SAS definition id.
    +    :vartype id: str
    +    :ivar secret_id: Storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :vartype template_uri: str
    +    :ivar sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :vartype sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :ivar validity_period: The validity period of SAS tokens created according
    +     to the SAS definition.
    +    :vartype validity_period: str
    +    :ivar attributes: The SAS definition attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted SAS definition.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the SAS definition is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the SAS definition was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'template_uri': {'readonly': True},
    +        'sas_type': {'readonly': True},
    +        'validity_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedSasDefinitionBundle, self).__init__(**kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class SasDefinitionItem(Model):
    +    """The SAS definition item containing storage SAS definition metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage SAS identifier.
    +    :vartype id: str
    +    :ivar secret_id: The storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar attributes: The SAS definition management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(SasDefinitionItem, self).__init__(**kwargs)
    +        self.id = None
    +        self.secret_id = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedSasDefinitionItem(SasDefinitionItem):
    +    """The deleted SAS definition item containing metadata about the deleted SAS
    +    definition.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage SAS identifier.
    +    :vartype id: str
    +    :ivar secret_id: The storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar attributes: The SAS definition management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted SAS definition.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the SAS definition is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the SAS definition was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedSasDefinitionItem, self).__init__(**kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedSasDefinitionListResult(Model):
    +    """The deleted SAS definition list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted SAS
    +     definitions in the vault along with a link to the next page of deleted sas
    +     definitions
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedSasDefinitionItem]
    +    :ivar next_link: The URL to get the next set of deleted SAS definitions.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedSasDefinitionItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedSasDefinitionListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SecretBundle(Model):
    +    """A secret consisting of a value, id and its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value: The secret value.
    +    :type value: str
    +    :param id: The secret id.
    +    :type id: str
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar kid: If this is a secret backing a KV certificate, then this field
    +     specifies the corresponding key backing the KV certificate.
    +    :vartype kid: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a secret backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, value: str=None, id: str=None, content_type: str=None, attributes=None, tags=None, **kwargs) -> None:
    +        super(SecretBundle, self).__init__(**kwargs)
    +        self.value = value
    +        self.id = id
    +        self.content_type = content_type
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.kid = None
    +        self.managed = None
    +
    +
    +class DeletedSecretBundle(SecretBundle):
    +    """A Deleted Secret consisting of its previous id, attributes and its tags, as
    +    well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value: The secret value.
    +    :type value: str
    +    :param id: The secret id.
    +    :type id: str
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar kid: If this is a secret backing a KV certificate, then this field
    +     specifies the corresponding key backing the KV certificate.
    +    :vartype kid: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a secret backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted secret.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the secret is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the secret was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, value: str=None, id: str=None, content_type: str=None, attributes=None, tags=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedSecretBundle, self).__init__(value=value, id=id, content_type=content_type, attributes=attributes, tags=tags, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class SecretItem(Model):
    +    """The secret item containing secret metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Secret identifier.
    +    :type id: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, id: str=None, attributes=None, tags=None, content_type: str=None, **kwargs) -> None:
    +        super(SecretItem, self).__init__(**kwargs)
    +        self.id = id
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.content_type = content_type
    +        self.managed = None
    +
    +
    +class DeletedSecretItem(SecretItem):
    +    """The deleted secret item containing metadata about the deleted secret.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Secret identifier.
    +    :type id: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted secret.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the secret is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the secret was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, id: str=None, attributes=None, tags=None, content_type: str=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedSecretItem, self).__init__(id=id, attributes=attributes, tags=tags, content_type=content_type, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedSecretListResult(Model):
    +    """The deleted secret list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted secrets
    +     in the vault along with a link to the next page of deleted secrets
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedSecretItem]
    +    :ivar next_link: The URL to get the next set of deleted secrets.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedSecretItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedSecretListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class StorageAccountItem(Model):
    +    """The storage account item containing storage account metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Storage identifier.
    +    :vartype id: str
    +    :ivar resource_id: Storage account resource Id.
    +    :vartype resource_id: str
    +    :ivar attributes: The storage account management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(StorageAccountItem, self).__init__(**kwargs)
    +        self.id = None
    +        self.resource_id = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedStorageAccountItem(StorageAccountItem):
    +    """The deleted storage account item containing metadata about the deleted
    +    storage account.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Storage identifier.
    +    :vartype id: str
    +    :ivar resource_id: Storage account resource Id.
    +    :vartype resource_id: str
    +    :ivar attributes: The storage account management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted storage account.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the storage account is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the storage account was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedStorageAccountItem, self).__init__(**kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class StorageBundle(Model):
    +    """A Storage account bundle consists of key vault storage account details plus
    +    its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage account id.
    +    :vartype id: str
    +    :ivar resource_id: The storage account resource id.
    +    :vartype resource_id: str
    +    :ivar active_key_name: The current active storage account key name.
    +    :vartype active_key_name: str
    +    :ivar auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :vartype auto_regenerate_key: bool
    +    :ivar regeneration_period: The key regeneration time duration specified in
    +     ISO-8601 format.
    +    :vartype regeneration_period: str
    +    :ivar attributes: The storage account attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'active_key_name': {'readonly': True},
    +        'auto_regenerate_key': {'readonly': True},
    +        'regeneration_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(StorageBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.resource_id = None
    +        self.active_key_name = None
    +        self.auto_regenerate_key = None
    +        self.regeneration_period = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedStorageBundle(StorageBundle):
    +    """A deleted storage account bundle consisting of its previous id, attributes
    +    and its tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage account id.
    +    :vartype id: str
    +    :ivar resource_id: The storage account resource id.
    +    :vartype resource_id: str
    +    :ivar active_key_name: The current active storage account key name.
    +    :vartype active_key_name: str
    +    :ivar auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :vartype auto_regenerate_key: bool
    +    :ivar regeneration_period: The key regeneration time duration specified in
    +     ISO-8601 format.
    +    :vartype regeneration_period: str
    +    :ivar attributes: The storage account attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted storage account.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the storage account is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the storage account was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'active_key_name': {'readonly': True},
    +        'auto_regenerate_key': {'readonly': True},
    +        'regeneration_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedStorageBundle, self).__init__(**kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedStorageListResult(Model):
    +    """The deleted storage account list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted storage
    +     accounts in the vault along with a link to the next page of deleted
    +     storage accounts
    +    :vartype value:
    +     list[~azure.keyvault.v7_1.models.DeletedStorageAccountItem]
    +    :ivar next_link: The URL to get the next set of deleted storage accounts.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedStorageAccountItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedStorageListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class Error(Model):
    +    """The key vault server error.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: The error code.
    +    :vartype code: str
    +    :ivar message: The error message.
    +    :vartype message: str
    +    :ivar inner_error:
    +    :vartype inner_error: ~azure.keyvault.v7_1.models.Error
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'inner_error': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'inner_error': {'key': 'innererror', 'type': 'Error'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(Error, self).__init__(**kwargs)
    +        self.code = None
    +        self.message = None
    +        self.inner_error = None
    +
    +
    +class IssuerAttributes(Model):
    +    """The attributes of an issuer managed by the Key Vault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the issuer is enabled.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
    +        super(IssuerAttributes, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.created = None
    +        self.updated = None
    +
    +
    +class IssuerBundle(Model):
    +    """The issuer for Key Vault certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Identifier for the issuer object.
    +    :vartype id: str
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, *, provider: str=None, credentials=None, organization_details=None, attributes=None, **kwargs) -> None:
    +        super(IssuerBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.provider = provider
    +        self.credentials = credentials
    +        self.organization_details = organization_details
    +        self.attributes = attributes
    +
    +
    +class IssuerCredentials(Model):
    +    """The credentials to be used for the certificate issuer.
    +
    +    :param account_id: The user name/account name/account id.
    +    :type account_id: str
    +    :param password: The password/secret/account key.
    +    :type password: str
    +    """
    +
    +    _attribute_map = {
    +        'account_id': {'key': 'account_id', 'type': 'str'},
    +        'password': {'key': 'pwd', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, account_id: str=None, password: str=None, **kwargs) -> None:
    +        super(IssuerCredentials, self).__init__(**kwargs)
    +        self.account_id = account_id
    +        self.password = password
    +
    +
    +class IssuerParameters(Model):
    +    """Parameters for the issuer of the X509 component of a certificate.
    +
    +    :param name: Name of the referenced issuer object or reserved names; for
    +     example, 'Self' or 'Unknown'.
    +    :type name: str
    +    :param certificate_type: Certificate type as supported by the provider
    +     (optional); for example 'OV-SSL', 'EV-SSL'
    +    :type certificate_type: str
    +    :param certificate_transparency: Indicates if the certificates generated
    +     under this policy should be published to certificate transparency logs.
    +    :type certificate_transparency: bool
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'certificate_type': {'key': 'cty', 'type': 'str'},
    +        'certificate_transparency': {'key': 'cert_transparency', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, name: str=None, certificate_type: str=None, certificate_transparency: bool=None, **kwargs) -> None:
    +        super(IssuerParameters, self).__init__(**kwargs)
    +        self.name = name
    +        self.certificate_type = certificate_type
    +        self.certificate_transparency = certificate_transparency
    +
    +
    +class JsonWebKey(Model):
    +    """As of http://tools.ietf.org/html/draft-ietf-jose-json-web-key-18.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param kty: JsonWebKey Key Type (kty), as defined in
    +     https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40.
    +     Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'
    +    :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_ops:
    +    :type key_ops: list[str]
    +    :param n: RSA modulus.
    +    :type n: bytes
    +    :param e: RSA public exponent.
    +    :type e: bytes
    +    :param d: RSA private exponent, or the D component of an EC private key.
    +    :type d: bytes
    +    :param dp: RSA private key parameter.
    +    :type dp: bytes
    +    :param dq: RSA private key parameter.
    +    :type dq: bytes
    +    :param qi: RSA private key parameter.
    +    :type qi: bytes
    +    :param p: RSA secret prime.
    +    :type p: bytes
    +    :param q: RSA secret prime, with p < q.
    +    :type q: bytes
    +    :param k: Symmetric key.
    +    :type k: bytes
    +    :param t: HSM Token, used with 'Bring Your Own Key'.
    +    :type t: bytes
    +    :param crv: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type crv: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    :param x: X component of an EC public key.
    +    :type x: bytes
    +    :param y: Y component of an EC public key.
    +    :type y: bytes
    +    """
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'kty': {'key': 'kty', 'type': 'str'},
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'n': {'key': 'n', 'type': 'base64'},
    +        'e': {'key': 'e', 'type': 'base64'},
    +        'd': {'key': 'd', 'type': 'base64'},
    +        'dp': {'key': 'dp', 'type': 'base64'},
    +        'dq': {'key': 'dq', 'type': 'base64'},
    +        'qi': {'key': 'qi', 'type': 'base64'},
    +        'p': {'key': 'p', 'type': 'base64'},
    +        'q': {'key': 'q', 'type': 'base64'},
    +        'k': {'key': 'k', 'type': 'base64'},
    +        't': {'key': 'key_hsm', 'type': 'base64'},
    +        'crv': {'key': 'crv', 'type': 'str'},
    +        'x': {'key': 'x', 'type': 'base64'},
    +        'y': {'key': 'y', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, kid: str=None, kty=None, key_ops=None, n: bytes=None, e: bytes=None, d: bytes=None, dp: bytes=None, dq: bytes=None, qi: bytes=None, p: bytes=None, q: bytes=None, k: bytes=None, t: bytes=None, crv=None, x: bytes=None, y: bytes=None, **kwargs) -> None:
    +        super(JsonWebKey, self).__init__(**kwargs)
    +        self.kid = kid
    +        self.kty = kty
    +        self.key_ops = key_ops
    +        self.n = n
    +        self.e = e
    +        self.d = d
    +        self.dp = dp
    +        self.dq = dq
    +        self.qi = qi
    +        self.p = p
    +        self.q = q
    +        self.k = k
    +        self.t = t
    +        self.crv = crv
    +        self.x = x
    +        self.y = y
    +
    +
    +class KeyAttributes(Attributes):
    +    """The attributes of a key managed by the key vault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for keys in the current vault. If it contains 'Purgeable' the key
    +     can be permanently deleted by a privileged user; otherwise, only the
    +     system can purge the key, at the end of the retention interval. Possible
    +     values include: 'Purgeable', 'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, not_before=None, expires=None, **kwargs) -> None:
    +        super(KeyAttributes, self).__init__(enabled=enabled, not_before=not_before, expires=expires, **kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class KeyCreateParameters(Model):
    +    """The key create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param kty: Required. The type of key to create. For valid values, see
    +     JsonWebKeyType. Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM',
    +     'oct'
    +    :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_size: The key size in bits. For example: 2048, 3072, or 4096
    +     for RSA.
    +    :type key_size: int
    +    :param key_ops:
    +    :type key_ops: list[str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +    :param key_attributes:
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param curve: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    """
    +
    +    _validation = {
    +        'kty': {'required': True, 'min_length': 1},
    +    }
    +
    +    _attribute_map = {
    +        'kty': {'key': 'kty', 'type': 'str'},
    +        'key_size': {'key': 'key_size', 'type': 'int'},
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'curve': {'key': 'crv', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, kty, key_size: int=None, key_ops=None, key_attributes=None, tags=None, curve=None, **kwargs) -> None:
    +        super(KeyCreateParameters, self).__init__(**kwargs)
    +        self.kty = kty
    +        self.key_size = key_size
    +        self.key_ops = key_ops
    +        self.key_attributes = key_attributes
    +        self.tags = tags
    +        self.curve = curve
    +
    +
    +class KeyImportParameters(Model):
    +    """The key import parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param hsm: Whether to import as a hardware key (HSM) or software key.
    +    :type hsm: bool
    +    :param key: Required. The Json web key
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param key_attributes: The key management attributes.
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'key': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'hsm': {'key': 'Hsm', 'type': 'bool'},
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, key, hsm: bool=None, key_attributes=None, tags=None, **kwargs) -> None:
    +        super(KeyImportParameters, self).__init__(**kwargs)
    +        self.hsm = hsm
    +        self.key = key
    +        self.key_attributes = key_attributes
    +        self.tags = tags
    +
    +
    +class KeyListResult(Model):
    +    """The key list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of keys in the key vault
    +     along with a link to the next page of keys.
    +    :vartype value: list[~azure.keyvault.v7_1.models.KeyItem]
    +    :ivar next_link: The URL to get the next set of keys.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[KeyItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(KeyListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class KeyOperationResult(Model):
    +    """The key operation result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar kid: Key identifier
    +    :vartype kid: str
    +    :ivar result:
    +    :vartype result: bytes
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'result': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'result': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(KeyOperationResult, self).__init__(**kwargs)
    +        self.kid = None
    +        self.result = None
    +
    +
    +class KeyOperationsParameters(Model):
    +    """The key operations parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. algorithm identifier. Possible values include:
    +     'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +    :param value: Required.
    +    :type value: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, algorithm, value: bytes, **kwargs) -> None:
    +        super(KeyOperationsParameters, self).__init__(**kwargs)
    +        self.algorithm = algorithm
    +        self.value = value
    +
    +
    +class KeyProperties(Model):
    +    """Properties of the key pair backing a certificate.
    +
    +    :param exportable: Indicates if the private key can be exported.
    +    :type exportable: bool
    +    :param key_type: The type of key pair to be used for the certificate.
    +     Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'
    +    :type key_type: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_size: The key size in bits. For example: 2048, 3072, or 4096
    +     for RSA.
    +    :type key_size: int
    +    :param reuse_key: Indicates if the same key pair will be used on
    +     certificate renewal.
    +    :type reuse_key: bool
    +    :param curve: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    """
    +
    +    _attribute_map = {
    +        'exportable': {'key': 'exportable', 'type': 'bool'},
    +        'key_type': {'key': 'kty', 'type': 'str'},
    +        'key_size': {'key': 'key_size', 'type': 'int'},
    +        'reuse_key': {'key': 'reuse_key', 'type': 'bool'},
    +        'curve': {'key': 'crv', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, exportable: bool=None, key_type=None, key_size: int=None, reuse_key: bool=None, curve=None, **kwargs) -> None:
    +        super(KeyProperties, self).__init__(**kwargs)
    +        self.exportable = exportable
    +        self.key_type = key_type
    +        self.key_size = key_size
    +        self.reuse_key = reuse_key
    +        self.curve = curve
    +
    +
    +class KeyRestoreParameters(Model):
    +    """The key restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_bundle_backup: Required. The backup blob associated with a key
    +     bundle.
    +    :type key_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'key_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, key_bundle_backup: bytes, **kwargs) -> None:
    +        super(KeyRestoreParameters, self).__init__(**kwargs)
    +        self.key_bundle_backup = key_bundle_backup
    +
    +
    +class KeySignParameters(Model):
    +    """The key operations parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. The signing/verification algorithm identifier.
    +     For more information on possible algorithm types, see
    +     JsonWebKeySignatureAlgorithm. Possible values include: 'PS256', 'PS384',
    +     'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256', 'ES384', 'ES512',
    +     'ES256K'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +    :param value: Required.
    +    :type value: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, algorithm, value: bytes, **kwargs) -> None:
    +        super(KeySignParameters, self).__init__(**kwargs)
    +        self.algorithm = algorithm
    +        self.value = value
    +
    +
    +class KeyUpdateParameters(Model):
    +    """The key update parameters.
    +
    +    :param key_ops: Json web key operations. For more information on possible
    +     key operations, see JsonWebKeyOperation.
    +    :type key_ops: list[str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +    :param key_attributes:
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, key_ops=None, key_attributes=None, tags=None, **kwargs) -> None:
    +        super(KeyUpdateParameters, self).__init__(**kwargs)
    +        self.key_ops = key_ops
    +        self.key_attributes = key_attributes
    +        self.tags = tags
    +
    +
    +class KeyVaultError(Model):
    +    """The key vault error exception.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar error:
    +    :vartype error: ~azure.keyvault.v7_1.models.Error
    +    """
    +
    +    _validation = {
    +        'error': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'Error'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(KeyVaultError, self).__init__(**kwargs)
    +        self.error = None
    +
    +
    +class KeyVaultErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'KeyVaultError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'KeyVaultError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(KeyVaultErrorException, self).__init__(response=response)
    +
    +
    +class KeyVerifyParameters(Model):
    +    """The key verify parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. The signing/verification algorithm. For more
    +     information on possible algorithm types, see JsonWebKeySignatureAlgorithm.
    +     Possible values include: 'PS256', 'PS384', 'PS512', 'RS256', 'RS384',
    +     'RS512', 'RSNULL', 'ES256', 'ES384', 'ES512', 'ES256K'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +    :param digest: Required. The digest used for signing.
    +    :type digest: bytes
    +    :param signature: Required. The signature to be verified.
    +    :type signature: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'digest': {'required': True},
    +        'signature': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'digest': {'key': 'digest', 'type': 'base64'},
    +        'signature': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, algorithm, digest: bytes, signature: bytes, **kwargs) -> None:
    +        super(KeyVerifyParameters, self).__init__(**kwargs)
    +        self.algorithm = algorithm
    +        self.digest = digest
    +        self.signature = signature
    +
    +
    +class KeyVerifyResult(Model):
    +    """The key verify result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: True if the signature is verified, otherwise false.
    +    :vartype value: bool
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(KeyVerifyResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class LifetimeAction(Model):
    +    """Action and its trigger that will be performed by Key Vault over the
    +    lifetime of a certificate.
    +
    +    :param trigger: The condition that will execute the action.
    +    :type trigger: ~azure.keyvault.v7_1.models.Trigger
    +    :param action: The action that will be executed.
    +    :type action: ~azure.keyvault.v7_1.models.Action
    +    """
    +
    +    _attribute_map = {
    +        'trigger': {'key': 'trigger', 'type': 'Trigger'},
    +        'action': {'key': 'action', 'type': 'Action'},
    +    }
    +
    +    def __init__(self, *, trigger=None, action=None, **kwargs) -> None:
    +        super(LifetimeAction, self).__init__(**kwargs)
    +        self.trigger = trigger
    +        self.action = action
    +
    +
    +class OrganizationDetails(Model):
    +    """Details of the organization of the certificate issuer.
    +
    +    :param id: Id of the organization.
    +    :type id: str
    +    :param admin_details: Details of the organization administrator.
    +    :type admin_details:
    +     list[~azure.keyvault.v7_1.models.AdministratorDetails]
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'admin_details': {'key': 'admin_details', 'type': '[AdministratorDetails]'},
    +    }
    +
    +    def __init__(self, *, id: str=None, admin_details=None, **kwargs) -> None:
    +        super(OrganizationDetails, self).__init__(**kwargs)
    +        self.id = id
    +        self.admin_details = admin_details
    +
    +
    +class PendingCertificateSigningRequestResult(Model):
    +    """The pending certificate signing request result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The pending certificate signing request as Base64 encoded
    +     string.
    +    :vartype value: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(PendingCertificateSigningRequestResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class SasDefinitionAttributes(Model):
    +    """The SAS definition management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: the enabled state of the object.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for SAS definitions in the current vault. If it contains
    +     'Purgeable' the SAS definition can be permanently deleted by a privileged
    +     user; otherwise, only the system can purge the SAS definition, at the end
    +     of the retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
    +        super(SasDefinitionAttributes, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.created = None
    +        self.updated = None
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class SasDefinitionCreateParameters(Model):
    +    """The SAS definition create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param template_uri: Required. The SAS definition token template signed
    +     with an arbitrary key.  Tokens created according to the SAS definition
    +     will have the same properties as the template.
    +    :type template_uri: str
    +    :param sas_type: Required. The type of SAS token the SAS definition will
    +     create. Possible values include: 'account', 'service'
    +    :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :param validity_period: Required. The validity period of SAS tokens
    +     created according to the SAS definition.
    +    :type validity_period: str
    +    :param sas_definition_attributes: The attributes of the SAS definition.
    +    :type sas_definition_attributes:
    +     ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'template_uri': {'required': True},
    +        'sas_type': {'required': True},
    +        'validity_period': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'sas_definition_attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, template_uri: str, sas_type, validity_period: str, sas_definition_attributes=None, tags=None, **kwargs) -> None:
    +        super(SasDefinitionCreateParameters, self).__init__(**kwargs)
    +        self.template_uri = template_uri
    +        self.sas_type = sas_type
    +        self.validity_period = validity_period
    +        self.sas_definition_attributes = sas_definition_attributes
    +        self.tags = tags
    +
    +
    +class SasDefinitionListResult(Model):
    +    """The storage account SAS definition list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of SAS definitions along
    +     with a link to the next page of SAS definitions.
    +    :vartype value: list[~azure.keyvault.v7_1.models.SasDefinitionItem]
    +    :ivar next_link: The URL to get the next set of SAS definitions.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SasDefinitionItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(SasDefinitionListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SasDefinitionUpdateParameters(Model):
    +    """The SAS definition update parameters.
    +
    +    :param template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :type template_uri: str
    +    :param sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :param validity_period: The validity period of SAS tokens created
    +     according to the SAS definition.
    +    :type validity_period: str
    +    :param sas_definition_attributes: The attributes of the SAS definition.
    +    :type sas_definition_attributes:
    +     ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'sas_definition_attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, template_uri: str=None, sas_type=None, validity_period: str=None, sas_definition_attributes=None, tags=None, **kwargs) -> None:
    +        super(SasDefinitionUpdateParameters, self).__init__(**kwargs)
    +        self.template_uri = template_uri
    +        self.sas_type = sas_type
    +        self.validity_period = validity_period
    +        self.sas_definition_attributes = sas_definition_attributes
    +        self.tags = tags
    +
    +
    +class SecretAttributes(Attributes):
    +    """The secret management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for secrets in the current vault. If it contains 'Purgeable', the
    +     secret can be permanently deleted by a privileged user; otherwise, only
    +     the system can purge the secret, at the end of the retention interval.
    +     Possible values include: 'Purgeable', 'Recoverable+Purgeable',
    +     'Recoverable', 'Recoverable+ProtectedSubscription',
    +     'CustomizedRecoverable+Purgeable', 'CustomizedRecoverable',
    +     'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, not_before=None, expires=None, **kwargs) -> None:
    +        super(SecretAttributes, self).__init__(enabled=enabled, not_before=not_before, expires=expires, **kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class SecretListResult(Model):
    +    """The secret list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of secrets in the key
    +     vault along with a link to the next page of secrets.
    +    :vartype value: list[~azure.keyvault.v7_1.models.SecretItem]
    +    :ivar next_link: The URL to get the next set of secrets.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SecretItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(SecretListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SecretProperties(Model):
    +    """Properties of the key backing a certificate.
    +
    +    :param content_type: The media type (MIME type).
    +    :type content_type: str
    +    """
    +
    +    _attribute_map = {
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, content_type: str=None, **kwargs) -> None:
    +        super(SecretProperties, self).__init__(**kwargs)
    +        self.content_type = content_type
    +
    +
    +class SecretRestoreParameters(Model):
    +    """The secret restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param secret_bundle_backup: Required. The backup blob associated with a
    +     secret bundle.
    +    :type secret_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'secret_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'secret_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, secret_bundle_backup: bytes, **kwargs) -> None:
    +        super(SecretRestoreParameters, self).__init__(**kwargs)
    +        self.secret_bundle_backup = secret_bundle_backup
    +
    +
    +class SecretSetParameters(Model):
    +    """The secret set parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param value: Required. The value of the secret.
    +    :type value: str
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :param secret_attributes: The secret management attributes.
    +    :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    """
    +
    +    _validation = {
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +    }
    +
    +    def __init__(self, *, value: str, tags=None, content_type: str=None, secret_attributes=None, **kwargs) -> None:
    +        super(SecretSetParameters, self).__init__(**kwargs)
    +        self.value = value
    +        self.tags = tags
    +        self.content_type = content_type
    +        self.secret_attributes = secret_attributes
    +
    +
    +class SecretUpdateParameters(Model):
    +    """The secret update parameters.
    +
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :param secret_attributes: The secret management attributes.
    +    :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, content_type: str=None, secret_attributes=None, tags=None, **kwargs) -> None:
    +        super(SecretUpdateParameters, self).__init__(**kwargs)
    +        self.content_type = content_type
    +        self.secret_attributes = secret_attributes
    +        self.tags = tags
    +
    +
    +class StorageAccountAttributes(Model):
    +    """The storage account management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: the enabled state of the object.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for storage accounts in the current vault. If it contains
    +     'Purgeable' the storage account can be permanently deleted by a privileged
    +     user; otherwise, only the system can purge the storage account, at the end
    +     of the retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
    +        super(StorageAccountAttributes, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.created = None
    +        self.updated = None
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class StorageAccountCreateParameters(Model):
    +    """The storage account create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param resource_id: Required. Storage account resource id.
    +    :type resource_id: str
    +    :param active_key_name: Required. Current active storage account key name.
    +    :type active_key_name: str
    +    :param auto_regenerate_key: Required. whether keyvault should manage the
    +     storage account for the user.
    +    :type auto_regenerate_key: bool
    +    :param regeneration_period: The key regeneration time duration specified
    +     in ISO-8601 format.
    +    :type regeneration_period: str
    +    :param storage_account_attributes: The attributes of the storage account.
    +    :type storage_account_attributes:
    +     ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'resource_id': {'required': True},
    +        'active_key_name': {'required': True},
    +        'auto_regenerate_key': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'storage_account_attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, resource_id: str, active_key_name: str, auto_regenerate_key: bool, regeneration_period: str=None, storage_account_attributes=None, tags=None, **kwargs) -> None:
    +        super(StorageAccountCreateParameters, self).__init__(**kwargs)
    +        self.resource_id = resource_id
    +        self.active_key_name = active_key_name
    +        self.auto_regenerate_key = auto_regenerate_key
    +        self.regeneration_period = regeneration_period
    +        self.storage_account_attributes = storage_account_attributes
    +        self.tags = tags
    +
    +
    +class StorageAccountRegenerteKeyParameters(Model):
    +    """The storage account key regenerate parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_name: Required. The storage account key name.
    +    :type key_name: str
    +    """
    +
    +    _validation = {
    +        'key_name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_name': {'key': 'keyName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, key_name: str, **kwargs) -> None:
    +        super(StorageAccountRegenerteKeyParameters, self).__init__(**kwargs)
    +        self.key_name = key_name
    +
    +
    +class StorageAccountUpdateParameters(Model):
    +    """The storage account update parameters.
    +
    +    :param active_key_name: The current active storage account key name.
    +    :type active_key_name: str
    +    :param auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :type auto_regenerate_key: bool
    +    :param regeneration_period: The key regeneration time duration specified
    +     in ISO-8601 format.
    +    :type regeneration_period: str
    +    :param storage_account_attributes: The attributes of the storage account.
    +    :type storage_account_attributes:
    +     ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'storage_account_attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, active_key_name: str=None, auto_regenerate_key: bool=None, regeneration_period: str=None, storage_account_attributes=None, tags=None, **kwargs) -> None:
    +        super(StorageAccountUpdateParameters, self).__init__(**kwargs)
    +        self.active_key_name = active_key_name
    +        self.auto_regenerate_key = auto_regenerate_key
    +        self.regeneration_period = regeneration_period
    +        self.storage_account_attributes = storage_account_attributes
    +        self.tags = tags
    +
    +
    +class StorageListResult(Model):
    +    """The storage accounts list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of storage accounts in
    +     the key vault along with a link to the next page of storage accounts.
    +    :vartype value: list[~azure.keyvault.v7_1.models.StorageAccountItem]
    +    :ivar next_link: The URL to get the next set of storage accounts.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[StorageAccountItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(StorageListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class StorageRestoreParameters(Model):
    +    """The secret restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param storage_bundle_backup: Required. The backup blob associated with a
    +     storage account.
    +    :type storage_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'storage_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'storage_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, storage_bundle_backup: bytes, **kwargs) -> None:
    +        super(StorageRestoreParameters, self).__init__(**kwargs)
    +        self.storage_bundle_backup = storage_bundle_backup
    +
    +
    +class SubjectAlternativeNames(Model):
    +    """The subject alternate names of a X509 object.
    +
    +    :param emails: Email addresses.
    +    :type emails: list[str]
    +    :param dns_names: Domain names.
    +    :type dns_names: list[str]
    +    :param upns: User principal names.
    +    :type upns: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'emails': {'key': 'emails', 'type': '[str]'},
    +        'dns_names': {'key': 'dns_names', 'type': '[str]'},
    +        'upns': {'key': 'upns', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, *, emails=None, dns_names=None, upns=None, **kwargs) -> None:
    +        super(SubjectAlternativeNames, self).__init__(**kwargs)
    +        self.emails = emails
    +        self.dns_names = dns_names
    +        self.upns = upns
    +
    +
    +class Trigger(Model):
    +    """A condition to be satisfied for an action to be executed.
    +
    +    :param lifetime_percentage: Percentage of lifetime at which to trigger.
    +     Value should be between 1 and 99.
    +    :type lifetime_percentage: int
    +    :param days_before_expiry: Days before expiry to attempt renewal. Value
    +     should be between 1 and validity_in_months multiplied by 27. If
    +     validity_in_months is 36, then value should be between 1 and 972 (36 *
    +     27).
    +    :type days_before_expiry: int
    +    """
    +
    +    _validation = {
    +        'lifetime_percentage': {'maximum': 99, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lifetime_percentage': {'key': 'lifetime_percentage', 'type': 'int'},
    +        'days_before_expiry': {'key': 'days_before_expiry', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, lifetime_percentage: int=None, days_before_expiry: int=None, **kwargs) -> None:
    +        super(Trigger, self).__init__(**kwargs)
    +        self.lifetime_percentage = lifetime_percentage
    +        self.days_before_expiry = days_before_expiry
    +
    +
    +class X509CertificateProperties(Model):
    +    """Properties of the X509 component of a certificate.
    +
    +    :param subject: The subject name. Should be a valid X509 distinguished
    +     Name.
    +    :type subject: str
    +    :param ekus: The enhanced key usage.
    +    :type ekus: list[str]
    +    :param subject_alternative_names: The subject alternative names.
    +    :type subject_alternative_names:
    +     ~azure.keyvault.v7_1.models.SubjectAlternativeNames
    +    :param key_usage: List of key usages.
    +    :type key_usage: list[str or ~azure.keyvault.v7_1.models.KeyUsageType]
    +    :param validity_in_months: The duration that the certificate is valid in
    +     months.
    +    :type validity_in_months: int
    +    """
    +
    +    _validation = {
    +        'validity_in_months': {'minimum': 0},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'ekus': {'key': 'ekus', 'type': '[str]'},
    +        'subject_alternative_names': {'key': 'sans', 'type': 'SubjectAlternativeNames'},
    +        'key_usage': {'key': 'key_usage', 'type': '[str]'},
    +        'validity_in_months': {'key': 'validity_months', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, subject: str=None, ekus=None, subject_alternative_names=None, key_usage=None, validity_in_months: int=None, **kwargs) -> None:
    +        super(X509CertificateProperties, self).__init__(**kwargs)
    +        self.subject = subject
    +        self.ekus = ekus
    +        self.subject_alternative_names = subject_alternative_names
    +        self.key_usage = key_usage
    +        self.validity_in_months = validity_in_months
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/operations/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/operations/__init__.py
    new file mode 100644
    index 000000000000..603e37d3ee07
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/operations/__init__.py
    @@ -0,0 +1,16 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._key_vault_client_operations import KeyVaultClientOperationsMixin
    +
    +__all__ = [
    +    'KeyVaultClientOperationsMixin',
    +]
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/operations/_key_vault_client_operations.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/operations/_key_vault_client_operations.py
    new file mode 100644
    index 000000000000..449c73af3bb1
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/operations/_key_vault_client_operations.py
    @@ -0,0 +1,5224 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +from azure.core.paging import ItemPaged
    +from .. import models
    +import uuid
    +
    +
    +class KeyVaultClientOperationsMixin(object):
    +
    +    def get_certificates(
    +            self, vault_base_url, maxresults=None, include_pending=None, cls=None, **kwargs):
    +        """List certificates in a specified key vault.
    +
    +        The GetCertificates operation returns the set of certificates resources
    +        in the specified key vault. This operation requires the
    +        certificates/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :param include_pending: Specifies whether to include certificates
    +         which are not completely provisioned.
    +        :type include_pending: bool
    +        :return: An iterator like instance of CertificateItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.CertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificates.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                if include_pending is not None:
    +                    query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('CertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_certificates.metadata = {'url': '/certificates'}
    +
    +    def delete_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Deletes a certificate from a specified key vault.
    +
    +        Deletes all versions of a certificate object along with its associated
    +        policy. Delete certificate cannot be used to remove individual versions
    +        of a certificate object. This operation requires the
    +        certificates/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedCertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedCertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedCertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate.metadata = {'url': '/certificates/{certificate-name}'}
    +
    +    def set_certificate_contacts(self, vault_base_url, contact_list=None, cls=None, **kwargs):
    +        """Sets the certificate contacts for the specified key vault.
    +
    +        Sets the certificate contacts for the specified key vault. This
    +        operation requires the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param contact_list: The contact list for the vault certificates.
    +        :type contact_list: list[~azure.keyvault.v7_1.models.Contact]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        contacts = models.Contacts(contact_list=contact_list)
    +
    +        # Construct URL
    +        url = self.set_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(contacts, 'Contacts')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    def get_certificate_contacts(self, vault_base_url, cls=None, **kwargs):
    +        """Lists the certificate contacts for a specified key vault.
    +
    +        The GetCertificateContacts operation returns the set of certificate
    +        contact resources in the specified key vault. This operation requires
    +        the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    def delete_certificate_contacts(self, vault_base_url, cls=None, **kwargs):
    +        """Deletes the certificate contacts for a specified key vault.
    +
    +        Deletes the certificate contacts for a specified key vault certificate.
    +        This operation requires the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    def get_certificate_issuers(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """List certificate issuers for a specified key vault.
    +
    +        The GetCertificateIssuers operation returns the set of certificate
    +        issuer resources in the specified key vault. This operation requires
    +        the certificates/manageissuers/getissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of CertificateIssuerItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.CertificateIssuerItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificate_issuers.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('CertificateIssuerListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_certificate_issuers.metadata = {'url': '/certificates/issuers'}
    +
    +    def set_certificate_issuer(self, vault_base_url, issuer_name, provider, credentials=None, organization_details=None, attributes=None, cls=None, **kwargs):
    +        """Sets the specified certificate issuer.
    +
    +        The SetCertificateIssuer operation adds or updates the specified
    +        certificate issuer. This operation requires the certificates/setissuers
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param provider: The issuer provider.
    +        :type provider: str
    +        :param credentials: The credentials to be used for the issuer.
    +        :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +        :param organization_details: Details of the organization as provided
    +         to the issuer.
    +        :type organization_details:
    +         ~azure.keyvault.v7_1.models.OrganizationDetails
    +        :param attributes: Attributes of the issuer object.
    +        :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameter = models.CertificateIssuerSetParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes)
    +
    +        # Construct URL
    +        url = self.set_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameter, 'CertificateIssuerSetParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    def update_certificate_issuer(self, vault_base_url, issuer_name, provider=None, credentials=None, organization_details=None, attributes=None, cls=None, **kwargs):
    +        """Updates the specified certificate issuer.
    +
    +        The UpdateCertificateIssuer operation performs an update on the
    +        specified certificate issuer entity. This operation requires the
    +        certificates/setissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param provider: The issuer provider.
    +        :type provider: str
    +        :param credentials: The credentials to be used for the issuer.
    +        :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +        :param organization_details: Details of the organization as provided
    +         to the issuer.
    +        :type organization_details:
    +         ~azure.keyvault.v7_1.models.OrganizationDetails
    +        :param attributes: Attributes of the issuer object.
    +        :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameter = models.CertificateIssuerUpdateParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes)
    +
    +        # Construct URL
    +        url = self.update_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameter, 'CertificateIssuerUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    def get_certificate_issuer(self, vault_base_url, issuer_name, cls=None, **kwargs):
    +        """Lists the specified certificate issuer.
    +
    +        The GetCertificateIssuer operation returns the specified certificate
    +        issuer resources in the specified key vault. This operation requires
    +        the certificates/manageissuers/getissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    def delete_certificate_issuer(self, vault_base_url, issuer_name, cls=None, **kwargs):
    +        """Deletes the specified certificate issuer.
    +
    +        The DeleteCertificateIssuer operation permanently removes the specified
    +        certificate issuer from the vault. This operation requires the
    +        certificates/manageissuers/deleteissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    def create_certificate(self, vault_base_url, certificate_name, certificate_policy=None, certificate_attributes=None, tags=None, cls=None, **kwargs):
    +        """Creates a new certificate.
    +
    +        If this is the first version, the certificate resource is created. This
    +        operation requires the certificates/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateCreateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.create_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 202:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    create_certificate.metadata = {'url': '/certificates/{certificate-name}/create'}
    +
    +    def import_certificate(self, vault_base_url, certificate_name, base64_encoded_certificate, password=None, certificate_policy=None, certificate_attributes=None, tags=None, cls=None, **kwargs):
    +        """Imports a certificate into a specified key vault.
    +
    +        Imports an existing valid certificate, containing a private key, into
    +        Azure Key Vault. The certificate to be imported can be in either PFX or
    +        PEM format. If the certificate is in PEM format the PEM file must
    +        contain the key as well as x509 certificates. This operation requires
    +        the certificates/import permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param base64_encoded_certificate: Base64 encoded representation of
    +         the certificate object to import. This certificate needs to contain
    +         the private key.
    +        :type base64_encoded_certificate: str
    +        :param password: If the private key in base64EncodedCertificate is
    +         encrypted, the password used for encryption.
    +        :type password: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateImportParameters(base64_encoded_certificate=base64_encoded_certificate, password=password, certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.import_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateImportParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    import_certificate.metadata = {'url': '/certificates/{certificate-name}/import'}
    +
    +    def get_certificate_versions(
    +            self, vault_base_url, certificate_name, maxresults=None, cls=None, **kwargs):
    +        """List the versions of a certificate.
    +
    +        The GetCertificateVersions operation returns the versions of a
    +        certificate in the specified key vault. This operation requires the
    +        certificates/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of CertificateItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.CertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificate_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('CertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_certificate_versions.metadata = {'url': '/certificates/{certificate-name}/versions'}
    +
    +    def get_certificate_policy(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Lists the policy for a certificate.
    +
    +        The GetCertificatePolicy operation returns the specified certificate
    +        policy resources in the specified key vault. This operation requires
    +        the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in a given key
    +         vault.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificatePolicy or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_policy.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificatePolicy', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}
    +
    +    def update_certificate_policy(self, vault_base_url, certificate_name, certificate_policy, cls=None, **kwargs):
    +        """Updates the policy for a certificate.
    +
    +        Set specified members in the certificate policy. Leave others as null.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_policy: The policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificatePolicy or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.update_certificate_policy.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_policy, 'CertificatePolicy')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificatePolicy', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}
    +
    +    def update_certificate(self, vault_base_url, certificate_name, certificate_version, certificate_policy=None, certificate_attributes=None, tags=None, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given certificate.
    +
    +        The UpdateCertificate operation applies the specified update on the
    +        given certificate; the only elements updated are the certificate's
    +        attributes. This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given key
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_version: The version of the certificate.
    +        :type certificate_version: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateUpdateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
    +            'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}
    +
    +    def get_certificate(self, vault_base_url, certificate_name, certificate_version, cls=None, **kwargs):
    +        """Gets information about a certificate.
    +
    +        Gets information about a specific certificate. This operation requires
    +        the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_version: The version of the certificate.
    +        :type certificate_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
    +            'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}
    +
    +    def update_certificate_operation(self, vault_base_url, certificate_name, cancellation_requested, cls=None, **kwargs):
    +        """Updates a certificate operation.
    +
    +        Updates a certificate creation operation that is already in progress.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param cancellation_requested: Indicates if cancellation was requested
    +         on the certificate operation.
    +        :type cancellation_requested: bool
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        certificate_operation = models.CertificateOperationUpdateParameter(cancellation_requested=cancellation_requested)
    +
    +        # Construct URL
    +        url = self.update_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_operation, 'CertificateOperationUpdateParameter')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    def get_certificate_operation(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Gets the creation operation of a certificate.
    +
    +        Gets the creation operation associated with a specified certificate.
    +        This operation requires the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    def delete_certificate_operation(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Deletes the creation operation for a specific certificate.
    +
    +        Deletes the creation operation for a specified certificate that is in
    +        the process of being created. The certificate is no longer created.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    def merge_certificate(self, vault_base_url, certificate_name, x509_certificates, certificate_attributes=None, tags=None, cls=None, **kwargs):
    +        """Merges a certificate or a certificate chain with a key pair existing on
    +        the server.
    +
    +        The MergeCertificate operation performs the merging of a certificate or
    +        certificate chain with a key pair currently available in the service.
    +        This operation requires the certificates/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param x509_certificates: The certificate or the certificate chain to
    +         merge.
    +        :type x509_certificates: list[bytearray]
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateMergeParameters(x509_certificates=x509_certificates, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.merge_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateMergeParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    merge_certificate.metadata = {'url': '/certificates/{certificate-name}/pending/merge'}
    +
    +    def backup_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Backs up the specified certificate.
    +
    +        Requests that a backup of the specified certificate be downloaded to
    +        the client. All versions of the certificate will be downloaded. This
    +        operation requires the certificates/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupCertificateResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupCertificateResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupCertificateResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_certificate.metadata = {'url': '/certificates/{certificate-name}/backup'}
    +
    +    def restore_certificate(self, vault_base_url, certificate_bundle_backup, cls=None, **kwargs):
    +        """Restores a backed up certificate to a vault.
    +
    +        Restores a backed up certificate, and all its versions, to a vault.
    +        This operation requires the certificates/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_bundle_backup: The backup blob associated with a
    +         certificate bundle.
    +        :type certificate_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateRestoreParameters(certificate_bundle_backup=certificate_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_certificate.metadata = {'url': '/certificates/restore'}
    +
    +    def get_deleted_certificates(
    +            self, vault_base_url, maxresults=None, include_pending=None, cls=None, **kwargs):
    +        """Lists the deleted certificates in the specified vault currently
    +        available for recovery.
    +
    +        The GetDeletedCertificates operation retrieves the certificates in the
    +        current vault which are in a deleted state and ready for recovery or
    +        purging. This operation includes deletion-specific information. This
    +        operation requires the certificates/get/list permission. This operation
    +        can only be enabled on soft-delete enabled vaults.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :param include_pending: Specifies whether to include certificates
    +         which are not completely provisioned.
    +        :type include_pending: bool
    +        :return: An iterator like instance of DeletedCertificateItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedCertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_certificates.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                if include_pending is not None:
    +                    query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedCertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_certificates.metadata = {'url': '/deletedcertificates'}
    +
    +    def get_deleted_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Retrieves information about the specified deleted certificate.
    +
    +        The GetDeletedCertificate operation retrieves the deleted certificate
    +        information plus its attributes, such as retention interval, scheduled
    +        permanent deletion and the current deletion recovery level. This
    +        operation requires the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedCertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedCertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedCertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}
    +
    +    def purge_deleted_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Permanently deletes the specified deleted certificate.
    +
    +        The PurgeDeletedCertificate operation performs an irreversible deletion
    +        of the specified certificate, without possibility for recovery. The
    +        operation is not available if the recovery level does not specify
    +        'Purgeable'. This operation requires the certificate/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}
    +
    +    def recover_deleted_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Recovers the deleted certificate back to its current version under
    +        /certificates.
    +
    +        The RecoverDeletedCertificate operation performs the reversal of the
    +        Delete operation. The operation is applicable in vaults enabled for
    +        soft-delete, and must be issued during the retention interval
    +        (available in the deleted certificate's attributes). This operation
    +        requires the certificates/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the deleted certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}/recover'}
    +
    +    def create_key(self, vault_base_url, key_name, kty, key_size=None, key_ops=None, key_attributes=None, tags=None, curve=None, cls=None, **kwargs):
    +        """Creates a new key, stores it, then returns key parameters and
    +        attributes to the client.
    +
    +        The create key operation can be used to create any key type in Azure
    +        Key Vault. If the named key already exists, Azure Key Vault creates a
    +        new version of the key. It requires the keys/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name for the new key. The system will generate
    +         the version name for the new key.
    +        :type key_name: str
    +        :param kty: The type of key to create. For valid values, see
    +         JsonWebKeyType. Possible values include: 'EC', 'EC-HSM', 'RSA',
    +         'RSA-HSM', 'oct'
    +        :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +        :param key_size: The key size in bits. For example: 2048, 3072, or
    +         4096 for RSA.
    +        :type key_size: int
    +        :param key_ops:
    +        :type key_ops: list[str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +        :param key_attributes:
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param curve: Elliptic curve name. For valid values, see
    +         JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384',
    +         'P-521', 'P-256K'
    +        :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyCreateParameters(kty=kty, key_size=key_size, key_ops=key_ops, key_attributes=key_attributes, tags=tags, curve=curve)
    +
    +        # Construct URL
    +        url = self.create_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    create_key.metadata = {'url': '/keys/{key-name}/create'}
    +
    +    def import_key(self, vault_base_url, key_name, key, hsm=None, key_attributes=None, tags=None, cls=None, **kwargs):
    +        """Imports an externally created key, stores it, and returns key
    +        parameters and attributes to the client.
    +
    +        The import key operation may be used to import any key type into an
    +        Azure Key Vault. If the named key already exists, Azure Key Vault
    +        creates a new version of the key. This operation requires the
    +        keys/import permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: Name for the imported key.
    +        :type key_name: str
    +        :param key: The Json web key
    +        :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +        :param hsm: Whether to import as a hardware key (HSM) or software key.
    +        :type hsm: bool
    +        :param key_attributes: The key management attributes.
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyImportParameters(hsm=hsm, key=key, key_attributes=key_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.import_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyImportParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    import_key.metadata = {'url': '/keys/{key-name}'}
    +
    +    def delete_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Deletes a key of any type from storage in Azure Key Vault.
    +
    +        The delete key operation cannot be used to remove individual versions
    +        of a key. This operation removes the cryptographic material associated
    +        with the key, which means the key is not usable for Sign/Verify,
    +        Wrap/Unwrap or Encrypt/Decrypt operations. This operation requires the
    +        keys/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key to delete.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedKeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedKeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedKeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_key.metadata = {'url': '/keys/{key-name}'}
    +
    +    def update_key(self, vault_base_url, key_name, key_version, key_ops=None, key_attributes=None, tags=None, cls=None, **kwargs):
    +        """The update key operation changes specified attributes of a stored key
    +        and can be applied to any key type and key version stored in Azure Key
    +        Vault.
    +
    +        In order to perform this operation, the key must already exist in the
    +        Key Vault. Note: The cryptographic material of a key itself cannot be
    +        changed. This operation requires the keys/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of key to update.
    +        :type key_name: str
    +        :param key_version: The version of the key to update.
    +        :type key_version: str
    +        :param key_ops: Json web key operations. For more information on
    +         possible key operations, see JsonWebKeyOperation.
    +        :type key_ops: list[str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +        :param key_attributes:
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyUpdateParameters(key_ops=key_ops, key_attributes=key_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_key.metadata = {'url': '/keys/{key-name}/{key-version}'}
    +
    +    def get_key(self, vault_base_url, key_name, key_version, cls=None, **kwargs):
    +        """Gets the public part of a stored key.
    +
    +        The get key operation is applicable to all key types. If the requested
    +        key is symmetric, then no key material is released in the response.
    +        This operation requires the keys/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key to get.
    +        :type key_name: str
    +        :param key_version: Adding the version parameter retrieves a specific
    +         version of a key.
    +        :type key_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_key.metadata = {'url': '/keys/{key-name}/{key-version}'}
    +
    +    def get_key_versions(
    +            self, vault_base_url, key_name, maxresults=None, cls=None, **kwargs):
    +        """Retrieves a list of individual key versions with the same key name.
    +
    +        The full key identifier, attributes, and tags are provided in the
    +        response. This operation requires the keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of KeyItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.KeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_key_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'key-name': self._serialize.url("key_name", key_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'key-name': self._serialize.url("key_name", key_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('KeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_key_versions.metadata = {'url': '/keys/{key-name}/versions'}
    +
    +    def get_keys(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """List keys in the specified vault.
    +
    +        Retrieves a list of the keys in the Key Vault as JSON Web Key
    +        structures that contain the public part of a stored key. The LIST
    +        operation is applicable to all key types, however only the base key
    +        identifier, attributes, and tags are provided in the response.
    +        Individual versions of a key are not listed in the response. This
    +        operation requires the keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of KeyItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.KeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_keys.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('KeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_keys.metadata = {'url': '/keys'}
    +
    +    def backup_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Requests that a backup of the specified key be downloaded to the
    +        client.
    +
    +        The Key Backup operation exports a key from Azure Key Vault in a
    +        protected form. Note that this operation does NOT return key material
    +        in a form that can be used outside the Azure Key Vault system, the
    +        returned key material is either protected to a Azure Key Vault HSM or
    +        to Azure Key Vault itself. The intent of this operation is to allow a
    +        client to GENERATE a key in one Azure Key Vault instance, BACKUP the
    +        key, and then RESTORE it into another Azure Key Vault instance. The
    +        BACKUP operation may be used to export, in protected form, any key type
    +        from Azure Key Vault. Individual versions of a key cannot be backed up.
    +        BACKUP / RESTORE can be performed within geographical boundaries only;
    +        meaning that a BACKUP from one geographical area cannot be restored to
    +        another geographical area. For example, a backup from the US
    +        geographical area cannot be restored in an EU geographical area. This
    +        operation requires the key/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupKeyResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupKeyResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupKeyResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_key.metadata = {'url': '/keys/{key-name}/backup'}
    +
    +    def restore_key(self, vault_base_url, key_bundle_backup, cls=None, **kwargs):
    +        """Restores a backed up key to a vault.
    +
    +        Imports a previously backed up key into Azure Key Vault, restoring the
    +        key, its key identifier, attributes and access control policies. The
    +        RESTORE operation may be used to import a previously backed up key.
    +        Individual versions of a key cannot be restored. The key is restored in
    +        its entirety with the same key name as it had when it was backed up. If
    +        the key name is not available in the target Key Vault, the RESTORE
    +        operation will be rejected. While the key name is retained during
    +        restore, the final key identifier will change if the key is restored to
    +        a different vault. Restore will restore all versions and preserve
    +        version identifiers. The RESTORE operation is subject to security
    +        constraints: The target Key Vault must be owned by the same Microsoft
    +        Azure Subscription as the source Key Vault The user must have RESTORE
    +        permission in the target Key Vault. This operation requires the
    +        keys/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_bundle_backup: The backup blob associated with a key
    +         bundle.
    +        :type key_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyRestoreParameters(key_bundle_backup=key_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_key.metadata = {'url': '/keys/restore'}
    +
    +    def encrypt(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Encrypts an arbitrary sequence of bytes using an encryption key that is
    +        stored in a key vault.
    +
    +        The ENCRYPT operation encrypts an arbitrary sequence of bytes using an
    +        encryption key that is stored in Azure Key Vault. Note that the ENCRYPT
    +        operation only supports a single block of data, the size of which is
    +        dependent on the target key and the encryption algorithm to be used.
    +        The ENCRYPT operation is only strictly necessary for symmetric keys
    +        stored in Azure Key Vault since protection with an asymmetric key can
    +        be performed using public portion of the key. This operation is
    +        supported for asymmetric keys as a convenience for callers that have a
    +        key-reference but do not have access to the public key material. This
    +        operation requires the keys/encrypt permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.encrypt.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    encrypt.metadata = {'url': '/keys/{key-name}/{key-version}/encrypt'}
    +
    +    def decrypt(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Decrypts a single block of encrypted data.
    +
    +        The DECRYPT operation decrypts a well-formed block of ciphertext using
    +        the target encryption key and specified algorithm. This operation is
    +        the reverse of the ENCRYPT operation; only a single block of data may
    +        be decrypted, the size of this block is dependent on the target key and
    +        the algorithm to be used. The DECRYPT operation applies to asymmetric
    +        and symmetric keys stored in Azure Key Vault since it uses the private
    +        portion of the key. This operation requires the keys/decrypt
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.decrypt.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    decrypt.metadata = {'url': '/keys/{key-name}/{key-version}/decrypt'}
    +
    +    def sign(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Creates a signature from a digest using the specified key.
    +
    +        The SIGN operation is applicable to asymmetric and symmetric keys
    +        stored in Azure Key Vault since this operation uses the private portion
    +        of the key. This operation requires the keys/sign permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: The signing/verification algorithm identifier. For
    +         more information on possible algorithm types, see
    +         JsonWebKeySignatureAlgorithm. Possible values include: 'PS256',
    +         'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256',
    +         'ES384', 'ES512', 'ES256K'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeySignParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.sign.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeySignParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    sign.metadata = {'url': '/keys/{key-name}/{key-version}/sign'}
    +
    +    def verify(self, vault_base_url, key_name, key_version, algorithm, digest, signature, cls=None, **kwargs):
    +        """Verifies a signature using a specified key.
    +
    +        The VERIFY operation is applicable to symmetric keys stored in Azure
    +        Key Vault. VERIFY is not strictly necessary for asymmetric keys stored
    +        in Azure Key Vault since signature verification can be performed using
    +        the public portion of the key but this operation is supported as a
    +        convenience for callers that only have a key-reference and not the
    +        public portion of the key. This operation requires the keys/verify
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: The signing/verification algorithm. For more
    +         information on possible algorithm types, see
    +         JsonWebKeySignatureAlgorithm. Possible values include: 'PS256',
    +         'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256',
    +         'ES384', 'ES512', 'ES256K'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +        :param digest: The digest used for signing.
    +        :type digest: bytes
    +        :param signature: The signature to be verified.
    +        :type signature: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyVerifyResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyVerifyResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyVerifyParameters(algorithm=algorithm, digest=digest, signature=signature)
    +
    +        # Construct URL
    +        url = self.verify.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyVerifyParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyVerifyResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    verify.metadata = {'url': '/keys/{key-name}/{key-version}/verify'}
    +
    +    def wrap_key(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Wraps a symmetric key using a specified key.
    +
    +        The WRAP operation supports encryption of a symmetric key using a key
    +        encryption key that has previously been stored in an Azure Key Vault.
    +        The WRAP operation is only strictly necessary for symmetric keys stored
    +        in Azure Key Vault since protection with an asymmetric key can be
    +        performed using the public portion of the key. This operation is
    +        supported for asymmetric keys as a convenience for callers that have a
    +        key-reference but do not have access to the public key material. This
    +        operation requires the keys/wrapKey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.wrap_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    wrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/wrapkey'}
    +
    +    def unwrap_key(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Unwraps a symmetric key using the specified key that was initially used
    +        for wrapping that key.
    +
    +        The UNWRAP operation supports decryption of a symmetric key using the
    +        target key encryption key. This operation is the reverse of the WRAP
    +        operation. The UNWRAP operation applies to asymmetric and symmetric
    +        keys stored in Azure Key Vault since it uses the private portion of the
    +        key. This operation requires the keys/unwrapKey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.unwrap_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    unwrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/unwrapkey'}
    +
    +    def get_deleted_keys(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """Lists the deleted keys in the specified vault.
    +
    +        Retrieves a list of the keys in the Key Vault as JSON Web Key
    +        structures that contain the public part of a deleted key. This
    +        operation includes deletion-specific information. The Get Deleted Keys
    +        operation is applicable for vaults enabled for soft-delete. While the
    +        operation can be invoked on any vault, it will return an error if
    +        invoked on a non soft-delete enabled vault. This operation requires the
    +        keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedKeyItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedKeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_keys.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedKeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_keys.metadata = {'url': '/deletedkeys'}
    +
    +    def get_deleted_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Gets the public part of a deleted key.
    +
    +        The Get Deleted Key operation is applicable for soft-delete enabled
    +        vaults. While the operation can be invoked on any vault, it will return
    +        an error if invoked on a non soft-delete enabled vault. This operation
    +        requires the keys/get permission. .
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedKeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedKeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedKeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}
    +
    +    def purge_deleted_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Permanently deletes the specified key.
    +
    +        The Purge Deleted Key operation is applicable for soft-delete enabled
    +        vaults. While the operation can be invoked on any vault, it will return
    +        an error if invoked on a non soft-delete enabled vault. This operation
    +        requires the keys/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}
    +
    +    def recover_deleted_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Recovers the deleted key to its latest version.
    +
    +        The Recover Deleted Key operation is applicable for deleted keys in
    +        soft-delete enabled vaults. It recovers the deleted key back to its
    +        latest version under /keys. An attempt to recover an non-deleted key
    +        will return an error. Consider this the inverse of the delete operation
    +        on soft-delete enabled vaults. This operation requires the keys/recover
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the deleted key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_key.metadata = {'url': '/deletedkeys/{key-name}/recover'}
    +
    +    def set_secret(self, vault_base_url, secret_name, value, tags=None, content_type=None, secret_attributes=None, cls=None, **kwargs):
    +        """Sets a secret in a specified key vault.
    +
    +        The SET operation adds a secret to the Azure Key Vault. If the named
    +        secret already exists, Azure Key Vault creates a new version of that
    +        secret. This operation requires the secrets/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param value: The value of the secret.
    +        :type value: str
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param content_type: Type of the secret value such as a password.
    +        :type content_type: str
    +        :param secret_attributes: The secret management attributes.
    +        :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretSetParameters(value=value, tags=tags, content_type=content_type, secret_attributes=secret_attributes)
    +
    +        # Construct URL
    +        url = self.set_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretSetParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_secret.metadata = {'url': '/secrets/{secret-name}'}
    +
    +    def delete_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Deletes a secret from a specified key vault.
    +
    +        The DELETE operation applies to any secret stored in Azure Key Vault.
    +        DELETE cannot be applied to an individual version of a secret. This
    +        operation requires the secrets/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_secret.metadata = {'url': '/secrets/{secret-name}'}
    +
    +    def update_secret(self, vault_base_url, secret_name, secret_version, content_type=None, secret_attributes=None, tags=None, cls=None, **kwargs):
    +        """Updates the attributes associated with a specified secret in a given
    +        key vault.
    +
    +        The UPDATE operation changes specified attributes of an existing stored
    +        secret. Attributes that are not specified in the request are left
    +        unchanged. The value of a secret itself cannot be changed. This
    +        operation requires the secrets/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param secret_version: The version of the secret.
    +        :type secret_version: str
    +        :param content_type: Type of the secret value such as a password.
    +        :type content_type: str
    +        :param secret_attributes: The secret management attributes.
    +        :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretUpdateParameters(content_type=content_type, secret_attributes=secret_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
    +            'secret-version': self._serialize.url("secret_version", secret_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}
    +
    +    def get_secret(self, vault_base_url, secret_name, secret_version, cls=None, **kwargs):
    +        """Get a specified secret from a given key vault.
    +
    +        The GET operation is applicable to any secret stored in Azure Key
    +        Vault. This operation requires the secrets/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param secret_version: The version of the secret.
    +        :type secret_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
    +            'secret-version': self._serialize.url("secret_version", secret_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}
    +
    +    def get_secrets(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """List secrets in a specified key vault.
    +
    +        The Get Secrets operation is applicable to the entire vault. However,
    +        only the base secret identifier and its attributes are provided in the
    +        response. Individual secret versions are not listed in the response.
    +        This operation requires the secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified, the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SecretItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.SecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_secrets.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('SecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_secrets.metadata = {'url': '/secrets'}
    +
    +    def get_secret_versions(
    +            self, vault_base_url, secret_name, maxresults=None, cls=None, **kwargs):
    +        """List all versions of the specified secret.
    +
    +        The full secret identifier and attributes are provided in the response.
    +        No values are returned for the secrets. This operations requires the
    +        secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified, the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SecretItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.SecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_secret_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('SecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_secret_versions.metadata = {'url': '/secrets/{secret-name}/versions'}
    +
    +    def get_deleted_secrets(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """Lists deleted secrets for the specified vault.
    +
    +        The Get Deleted Secrets operation returns the secrets that have been
    +        deleted for a vault enabled for soft-delete. This operation requires
    +        the secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedSecretItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedSecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_secrets.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedSecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_secrets.metadata = {'url': '/deletedsecrets'}
    +
    +    def get_deleted_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Gets the specified deleted secret.
    +
    +        The Get Deleted Secret operation returns the specified deleted secret
    +        along with its attributes. This operation requires the secrets/get
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}
    +
    +    def purge_deleted_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Permanently deletes the specified secret.
    +
    +        The purge deleted secret operation removes the secret permanently,
    +        without the possibility of recovery. This operation can only be enabled
    +        on a soft-delete enabled vault. This operation requires the
    +        secrets/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}
    +
    +    def recover_deleted_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Recovers the deleted secret to the latest version.
    +
    +        Recovers the deleted secret in the specified vault. This operation can
    +        only be performed on a soft-delete enabled vault. This operation
    +        requires the secrets/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the deleted secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}/recover'}
    +
    +    def backup_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Backs up the specified secret.
    +
    +        Requests that a backup of the specified secret be downloaded to the
    +        client. All versions of the secret will be downloaded. This operation
    +        requires the secrets/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupSecretResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupSecretResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupSecretResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_secret.metadata = {'url': '/secrets/{secret-name}/backup'}
    +
    +    def restore_secret(self, vault_base_url, secret_bundle_backup, cls=None, **kwargs):
    +        """Restores a backed up secret to a vault.
    +
    +        Restores a backed up secret, and all its versions, to a vault. This
    +        operation requires the secrets/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_bundle_backup: The backup blob associated with a secret
    +         bundle.
    +        :type secret_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretRestoreParameters(secret_bundle_backup=secret_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_secret.metadata = {'url': '/secrets/restore'}
    +
    +    def get_storage_accounts(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """List storage accounts managed by the specified key vault. This
    +        operation requires the storage/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of StorageAccountItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.StorageAccountItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_storage_accounts.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('StorageListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_storage_accounts.metadata = {'url': '/storage'}
    +
    +    def get_deleted_storage_accounts(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """Lists deleted storage accounts for the specified vault.
    +
    +        The Get Deleted Storage Accounts operation returns the storage accounts
    +        that have been deleted for a vault enabled for soft-delete. This
    +        operation requires the storage/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedStorageAccountItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedStorageAccountItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_storage_accounts.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedStorageListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_storage_accounts.metadata = {'url': '/deletedstorage'}
    +
    +    def get_deleted_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Gets the specified deleted storage account.
    +
    +        The Get Deleted Storage Account operation returns the specified deleted
    +        storage account along with its attributes. This operation requires the
    +        storage/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedStorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedStorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedStorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}
    +
    +    def purge_deleted_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Permanently deletes the specified storage account.
    +
    +        The purge deleted storage account operation removes the secret
    +        permanently, without the possibility of recovery. This operation can
    +        only be performed on a soft-delete enabled vault. This operation
    +        requires the storage/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}
    +
    +    def recover_deleted_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Recovers the deleted storage account.
    +
    +        Recovers the deleted storage account in the specified vault. This
    +        operation can only be performed on a soft-delete enabled vault. This
    +        operation requires the storage/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}/recover'}
    +
    +    def backup_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Backs up the specified storage account.
    +
    +        Requests that a backup of the specified storage account be downloaded
    +        to the client. This operation requires the storage/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupStorageResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupStorageResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupStorageResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_storage_account.metadata = {'url': '/storage/{storage-account-name}/backup'}
    +
    +    def restore_storage_account(self, vault_base_url, storage_bundle_backup, cls=None, **kwargs):
    +        """Restores a backed up storage account to a vault.
    +
    +        Restores a backed up storage account to a vault. This operation
    +        requires the storage/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_bundle_backup: The backup blob associated with a
    +         storage account.
    +        :type storage_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageRestoreParameters(storage_bundle_backup=storage_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_storage_account.metadata = {'url': '/storage/restore'}
    +
    +    def delete_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Deletes a storage account. This operation requires the storage/delete
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedStorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedStorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedStorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    def get_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Gets information about a specified storage account. This operation
    +        requires the storage/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    def set_storage_account(self, vault_base_url, storage_account_name, resource_id, active_key_name, auto_regenerate_key, regeneration_period=None, storage_account_attributes=None, tags=None, cls=None, **kwargs):
    +        """Creates or updates a new storage account. This operation requires the
    +        storage/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param resource_id: Storage account resource id.
    +        :type resource_id: str
    +        :param active_key_name: Current active storage account key name.
    +        :type active_key_name: str
    +        :param auto_regenerate_key: whether keyvault should manage the storage
    +         account for the user.
    +        :type auto_regenerate_key: bool
    +        :param regeneration_period: The key regeneration time duration
    +         specified in ISO-8601 format.
    +        :type regeneration_period: str
    +        :param storage_account_attributes: The attributes of the storage
    +         account.
    +        :type storage_account_attributes:
    +         ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountCreateParameters(resource_id=resource_id, active_key_name=active_key_name, auto_regenerate_key=auto_regenerate_key, regeneration_period=regeneration_period, storage_account_attributes=storage_account_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.set_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    def update_storage_account(self, vault_base_url, storage_account_name, active_key_name=None, auto_regenerate_key=None, regeneration_period=None, storage_account_attributes=None, tags=None, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given storage
    +        account. This operation requires the storage/set/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param active_key_name: The current active storage account key name.
    +        :type active_key_name: str
    +        :param auto_regenerate_key: whether keyvault should manage the storage
    +         account for the user.
    +        :type auto_regenerate_key: bool
    +        :param regeneration_period: The key regeneration time duration
    +         specified in ISO-8601 format.
    +        :type regeneration_period: str
    +        :param storage_account_attributes: The attributes of the storage
    +         account.
    +        :type storage_account_attributes:
    +         ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountUpdateParameters(active_key_name=active_key_name, auto_regenerate_key=auto_regenerate_key, regeneration_period=regeneration_period, storage_account_attributes=storage_account_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    def regenerate_storage_account_key(self, vault_base_url, storage_account_name, key_name, cls=None, **kwargs):
    +        """Regenerates the specified key value for the given storage account. This
    +        operation requires the storage/regeneratekey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param key_name: The storage account key name.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountRegenerteKeyParameters(key_name=key_name)
    +
    +        # Construct URL
    +        url = self.regenerate_storage_account_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountRegenerteKeyParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    regenerate_storage_account_key.metadata = {'url': '/storage/{storage-account-name}/regeneratekey'}
    +
    +    def get_sas_definitions(
    +            self, vault_base_url, storage_account_name, maxresults=None, cls=None, **kwargs):
    +        """List storage SAS definitions for the given storage account. This
    +        operation requires the storage/listsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SasDefinitionItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.SasDefinitionItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_sas_definitions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('SasDefinitionListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_sas_definitions.metadata = {'url': '/storage/{storage-account-name}/sas'}
    +
    +    def get_deleted_sas_definitions(
    +            self, vault_base_url, storage_account_name, maxresults=None, cls=None, **kwargs):
    +        """Lists deleted SAS definitions for the specified vault and storage
    +        account.
    +
    +        The Get Deleted Sas Definitions operation returns the SAS definitions
    +        that have been deleted for a vault enabled for soft-delete. This
    +        operation requires the storage/listsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedSasDefinitionItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedSasDefinitionItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_sas_definitions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedSasDefinitionListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_sas_definitions.metadata = {'url': '/deletedstorage/{storage-account-name}/sas'}
    +
    +    def get_deleted_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, cls=None, **kwargs):
    +        """Gets the specified deleted sas definition.
    +
    +        The Get Deleted SAS Definition operation returns the specified deleted
    +        SAS definition along with its attributes. This operation requires the
    +        storage/getsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    def recover_deleted_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, cls=None, **kwargs):
    +        """Recovers the deleted SAS definition.
    +
    +        Recovers the deleted SAS definition for the specified storage account.
    +        This operation can only be performed on a soft-delete enabled vault.
    +        This operation requires the storage/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}/recover'}
    +
    +    def delete_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, cls=None, **kwargs):
    +        """Deletes a SAS definition from a specified storage account. This
    +        operation requires the storage/deletesas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    def get_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, cls=None, **kwargs):
    +        """Gets information about a SAS definition for the specified storage
    +        account. This operation requires the storage/getsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    def set_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, template_uri, sas_type, validity_period, sas_definition_attributes=None, tags=None, cls=None, **kwargs):
    +        """Creates or updates a new SAS definition for the specified storage
    +        account. This operation requires the storage/setsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param template_uri: The SAS definition token template signed with an
    +         arbitrary key.  Tokens created according to the SAS definition will
    +         have the same properties as the template.
    +        :type template_uri: str
    +        :param sas_type: The type of SAS token the SAS definition will create.
    +         Possible values include: 'account', 'service'
    +        :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +        :param validity_period: The validity period of SAS tokens created
    +         according to the SAS definition.
    +        :type validity_period: str
    +        :param sas_definition_attributes: The attributes of the SAS
    +         definition.
    +        :type sas_definition_attributes:
    +         ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SasDefinitionCreateParameters(template_uri=template_uri, sas_type=sas_type, validity_period=validity_period, sas_definition_attributes=sas_definition_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.set_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SasDefinitionCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    def update_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, template_uri=None, sas_type=None, validity_period=None, sas_definition_attributes=None, tags=None, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given SAS
    +        definition. This operation requires the storage/setsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param template_uri: The SAS definition token template signed with an
    +         arbitrary key.  Tokens created according to the SAS definition will
    +         have the same properties as the template.
    +        :type template_uri: str
    +        :param sas_type: The type of SAS token the SAS definition will create.
    +         Possible values include: 'account', 'service'
    +        :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +        :param validity_period: The validity period of SAS tokens created
    +         according to the SAS definition.
    +        :type validity_period: str
    +        :param sas_definition_attributes: The attributes of the SAS
    +         definition.
    +        :type sas_definition_attributes:
    +         ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SasDefinitionUpdateParameters(template_uri=template_uri, sas_type=sas_type, validity_period=validity_period, sas_definition_attributes=sas_definition_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SasDefinitionUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/version.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/version.py
    new file mode 100644
    index 000000000000..d92d63667368
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_generated/v7_1_preview/version.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "7.1-preview"
    +
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/multi_api.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/multi_api.py
    index 8c8b343047fe..15cb1b2186e5 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/multi_api.py
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/multi_api.py
    @@ -3,29 +3,64 @@
     # Licensed under the MIT License.
     # ------------------------------------
     from collections import namedtuple
    +from enum import Enum
    +from typing import TYPE_CHECKING
     
    +from ._generated.v7_1_preview.version import VERSION as V7_1_PREVIEW_VERSION
     from ._generated.v7_0.version import VERSION as V7_0_VERSION
     from ._generated.v2016_10_01.version import VERSION as V2016_10_01_VERSION
     
    -SUPPORTED_VERSIONS = (V7_0_VERSION, V2016_10_01_VERSION)
    -DEFAULT_VERSION = V7_0_VERSION
    +if TYPE_CHECKING:
    +    from typing import Union
    +
    +
    +class ApiVersion(Enum):
    +    """Key Vault API versions supported by this package"""
    +
    +    #: this is the default version
    +    V7_1_preview = V7_1_PREVIEW_VERSION
    +    V7_0 = V7_0_VERSION
    +    V2016_10_01 = V2016_10_01_VERSION
    +
    +
    +DEFAULT_VERSION = ApiVersion.V7_1_preview
     
     GeneratedApi = namedtuple("GeneratedApi", ("models", "client_cls", "config_cls"))
     
     
     def load_generated_api(api_version, aio=False):
    -    # type: (str, bool) -> GeneratedApi
    +    # type: (Union[ApiVersion, str], bool) -> GeneratedApi
         api_version = api_version or DEFAULT_VERSION
    -    if api_version == V7_0_VERSION:
    -        from ._generated.v7_0 import models
    +    try:
    +        # api_version could be a string; map it to an instance of ApiVersion
    +        # (this is a no-op if it's already an instance of ApiVersion)
    +        api_version = ApiVersion(api_version)
    +    except ValueError:
    +        # api_version is unknown to ApiVersion
    +        raise NotImplementedError(
    +            "This package doesn't support API version '{}'. ".format(api_version)
    +            + "Supported versions: {}".format(", ".join(v.value for v in ApiVersion))
    +        )
    +
    +    if api_version == ApiVersion.V7_1_preview:
    +        from ._generated.v7_1_preview import models
    +
    +        if aio:
    +            from ._generated.v7_1_preview.aio import KeyVaultClient
    +            from ._generated.v7_1_preview.aio._configuration_async import KeyVaultClientConfiguration
    +        else:
    +            from ._generated.v7_1_preview import KeyVaultClient  # type: ignore
    +            from ._generated.v7_1_preview._configuration import KeyVaultClientConfiguration  # type: ignore
    +    elif api_version == ApiVersion.V7_0:
    +        from ._generated.v7_0 import models  # type: ignore
     
             if aio:
    -            from ._generated.v7_0.aio import KeyVaultClient
    -            from ._generated.v7_0.aio._configuration_async import KeyVaultClientConfiguration
    +            from ._generated.v7_0.aio import KeyVaultClient  # type: ignore
    +            from ._generated.v7_0.aio._configuration_async import KeyVaultClientConfiguration  # type: ignore
             else:
                 from ._generated.v7_0 import KeyVaultClient  # type: ignore
                 from ._generated.v7_0._configuration import KeyVaultClientConfiguration  # type: ignore
    -    elif api_version == V2016_10_01_VERSION:
    +    elif api_version == ApiVersion.V2016_10_01:
             from ._generated.v2016_10_01 import models  # type: ignore
     
             if aio:
    @@ -34,10 +69,5 @@ def load_generated_api(api_version, aio=False):
             else:
                 from ._generated.v2016_10_01 import KeyVaultClient  # type: ignore
                 from ._generated.v2016_10_01._configuration import KeyVaultClientConfiguration  # type: ignore
    -    else:
    -        raise NotImplementedError(
    -            "This package doesn't support API version '{}'. ".format(api_version)
    -            + "Supported versions: {}".format(", ".join(SUPPORTED_VERSIONS))
    -        )
     
         return GeneratedApi(models=models, client_cls=KeyVaultClient, config_cls=KeyVaultClientConfiguration)
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_version.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_version.py
    index f16e7f347a3e..669c806c6fdb 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_version.py
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_version.py
    @@ -3,4 +3,4 @@
     # Licensed under the MIT License.
     # ------------------------------------
     
    -VERSION = "4.1.0"
    +VERSION = "4.2.0b2"
    diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_client.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_client.py
    index 1015f3b3ab17..ea65dd03d776 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_client.py
    +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_client.py
    @@ -33,7 +33,8 @@ class CertificateClient(AsyncKeyVaultClientBase):
         :param str vault_url: URL of the vault the client will access
         :param credential: An object which can provide an access token for the vault, such as a credential from
             :mod:`azure.identity.aio`
    -    :keyword str api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :keyword api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :paramtype api_version: ~azure.keyvault.certificates.ApiVersion
         :keyword transport: transport to use. Defaults to
          :class:`~azure.core.pipeline.transport.AioHttpTransport`.
         :paramtype transport: ~azure.core.pipeline.transport.AsyncHttpTransport
    diff --git a/sdk/keyvault/azure-keyvault-certificates/setup.py b/sdk/keyvault/azure-keyvault-certificates/setup.py
    index c0bba02f8bdc..1eaefc9b5704 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/setup.py
    +++ b/sdk/keyvault/azure-keyvault-certificates/setup.py
    @@ -58,7 +58,7 @@
         author_email="azurekeyvault@microsoft.com",
         url="https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-keyvault-certificates",
         classifiers=[
    -        "Development Status :: 5 - Production/Stable",
    +        "Development Status :: 4 - Beta",
             "Programming Language :: Python",
             "Programming Language :: Python :: 2",
             "Programming Language :: Python :: 2.7",
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_async_request_cancellation_and_deletion.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_async_request_cancellation_and_deletion.yaml
    index 8ffac7adb66d..81e01ec6ad07 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_async_request_cancellation_and_deletion.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_async_request_cancellation_and_deletion.yaml
    @@ -2,296 +2,956 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"policy": {"x509_props": {"subject": "CN=DefaultPolicy", "sans": {}},
           "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['99']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '99'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI6ICM1v5hXGtLVHu9xzjrGtm88aw+4kl7ZeB7YLXWjjIVv4enYbELThurBpdTnJ8TGaDIPefMp8Q6wQWmqYyTFgq8+2Ko39m1TzJB3E3qPNlFFoBm3WxoWQ0gt/b4T6+3xw/uJd48ZPmxmlI/DaBcHJOmPmV6u5GnsL/1FJHh9wfOwQXpOeHf9TnrbbqNfLLvOM1b4CpXEBXdVQRYgmu9jbfdgT4hMM2txFG3Y9BZEDf5xYLzgNvLjMmL3z2oG4bLIMSjPIaRfa8ZqAY6/i4rG6FttWZqmyZtunnL/YLuJ8EDkB2Of2aHtGjWxX2TcHwBbSrdP1eygxXK4WZk5XWuUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBAR9s29RashLyB5X8FENkHkOp2PPhTH3o/hrFVAbN6K1C8+Zwq+xnVwZxHyv9vpS1M+1siTe6/Zz/WBllCEMtGlYdRarst625S5xmHFGydkpoAu2ZpdGkXNqHdwsJRN/5QKchBuo62coz6OV4odWQ08JpssWq9l7FnZy7UBEHVRj0JiFQ960go+ou/sSC2LBLbCwGabyTnqA+cqfRKBX6fL+/D8Q9M6bckrSvNjc8AeM37E//tytIvXIgPASdkeq3bT1s4GnLRYDWzd+R/pGHvglQOO809wKRng3nGw6IbmEiusGuf2EtdANV9UErWZIfF0ySi9ivUXvIzTxjO6M4V","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALrLFtzOxre8e7FEYfzGucf/9i4O7DAikLwYdAvVPdn8eO7G26OpIgtF+8eq/+asQgD8G54f1hhbQj0TosKqEQ42DkyPOIx+xLdLCt0uOlsiqXc1IJZtehTLS4dmJduCMg7+5YfpXQHxVLK6uSRdnLdpIQRedthgXGfvKJ2Zr/h4KV5aAZN0zzyuRl4EF4sswOzgc/Mtrob1ni2pwiklwbrTEzEHY9k7mVtviegFEAXOsjgnsQO1S/PwHmHTMe6+VfRn1/Z4AaZLVEgrf+AatRkf+21Lo3xJnmlkMESv4FnK7GQ+rkB7rLzOJy+EybF1oZYimk7XmqVjn6rNq1wbymcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBtB8RrIWNYhNO0mC4jO2rUfNoYjX9HvK2XdUwXRIFKqHzPhJsTUCXUdsFd+8g0xEnbGAH/sYKRT9a25LleDaB6o6D2hPEc5khEAm740dmZ6v95Hz+zNxMYv4IkwK95q7w1qRlWE+YzJyqhy4IavYRSgyd0yaumiDFbLkXqlb29wciWGD4Oi9MvLNXBcbvykopDUSSBf85i6NeA6s6TeiWaskesQq4BA7WaiLhpfw3/v/1+bFLyxc5L+FbuNNkvOhFaOv+0wMKr1zmt+KmQT2Jy1kilNkEv9g4DgVH7DJlmjTwUsiTwkB58PIEaoaMPST+ZHROReMAJEM/BpUJPCnsB","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"2fc8c78ba49c471e95f1842d069eb8a0"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1314']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:24 GMT']
    -      expires: ['-1']
    -      location: ['https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.0&request_id=2fc8c78ba49c471e95f1842d069eb8a0']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 202, message: Accepted}
    +        time based on the issuer provider. Please check again later.","request_id":"dd6fd01b95df416d9c0b4b4942a3e66d"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1314'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.1-preview&request_id=dd6fd01b95df416d9c0b4b4942a3e66d
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
     - request:
         body: '{"cancellation_requested": true}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['32']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '32'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI6ICM1v5hXGtLVHu9xzjrGtm88aw+4kl7ZeB7YLXWjjIVv4enYbELThurBpdTnJ8TGaDIPefMp8Q6wQWmqYyTFgq8+2Ko39m1TzJB3E3qPNlFFoBm3WxoWQ0gt/b4T6+3xw/uJd48ZPmxmlI/DaBcHJOmPmV6u5GnsL/1FJHh9wfOwQXpOeHf9TnrbbqNfLLvOM1b4CpXEBXdVQRYgmu9jbfdgT4hMM2txFG3Y9BZEDf5xYLzgNvLjMmL3z2oG4bLIMSjPIaRfa8ZqAY6/i4rG6FttWZqmyZtunnL/YLuJ8EDkB2Of2aHtGjWxX2TcHwBbSrdP1eygxXK4WZk5XWuUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBAR9s29RashLyB5X8FENkHkOp2PPhTH3o/hrFVAbN6K1C8+Zwq+xnVwZxHyv9vpS1M+1siTe6/Zz/WBllCEMtGlYdRarst625S5xmHFGydkpoAu2ZpdGkXNqHdwsJRN/5QKchBuo62coz6OV4odWQ08JpssWq9l7FnZy7UBEHVRj0JiFQ960go+ou/sSC2LBLbCwGabyTnqA+cqfRKBX6fL+/D8Q9M6bckrSvNjc8AeM37E//tytIvXIgPASdkeq3bT1s4GnLRYDWzd+R/pGHvglQOO809wKRng3nGw6IbmEiusGuf2EtdANV9UErWZIfF0ySi9ivUXvIzTxjO6M4V","cancellation_requested":true,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALrLFtzOxre8e7FEYfzGucf/9i4O7DAikLwYdAvVPdn8eO7G26OpIgtF+8eq/+asQgD8G54f1hhbQj0TosKqEQ42DkyPOIx+xLdLCt0uOlsiqXc1IJZtehTLS4dmJduCMg7+5YfpXQHxVLK6uSRdnLdpIQRedthgXGfvKJ2Zr/h4KV5aAZN0zzyuRl4EF4sswOzgc/Mtrob1ni2pwiklwbrTEzEHY9k7mVtviegFEAXOsjgnsQO1S/PwHmHTMe6+VfRn1/Z4AaZLVEgrf+AatRkf+21Lo3xJnmlkMESv4FnK7GQ+rkB7rLzOJy+EybF1oZYimk7XmqVjn6rNq1wbymcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBtB8RrIWNYhNO0mC4jO2rUfNoYjX9HvK2XdUwXRIFKqHzPhJsTUCXUdsFd+8g0xEnbGAH/sYKRT9a25LleDaB6o6D2hPEc5khEAm740dmZ6v95Hz+zNxMYv4IkwK95q7w1qRlWE+YzJyqhy4IavYRSgyd0yaumiDFbLkXqlb29wciWGD4Oi9MvLNXBcbvykopDUSSBf85i6NeA6s6TeiWaskesQq4BA7WaiLhpfw3/v/1+bFLyxc5L+FbuNNkvOhFaOv+0wMKr1zmt+KmQT2Jy1kilNkEv9g4DgVH7DJlmjTwUsiTwkB58PIEaoaMPST+ZHROReMAJEM/BpUJPCnsB","cancellation_requested":true,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"2fc8c78ba49c471e95f1842d069eb8a0"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1313']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"dd6fd01b95df416d9c0b4b4942a3e66d"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1313'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI6ICM1v5hXGtLVHu9xzjrGtm88aw+4kl7ZeB7YLXWjjIVv4enYbELThurBpdTnJ8TGaDIPefMp8Q6wQWmqYyTFgq8+2Ko39m1TzJB3E3qPNlFFoBm3WxoWQ0gt/b4T6+3xw/uJd48ZPmxmlI/DaBcHJOmPmV6u5GnsL/1FJHh9wfOwQXpOeHf9TnrbbqNfLLvOM1b4CpXEBXdVQRYgmu9jbfdgT4hMM2txFG3Y9BZEDf5xYLzgNvLjMmL3z2oG4bLIMSjPIaRfa8ZqAY6/i4rG6FttWZqmyZtunnL/YLuJ8EDkB2Of2aHtGjWxX2TcHwBbSrdP1eygxXK4WZk5XWuUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBAR9s29RashLyB5X8FENkHkOp2PPhTH3o/hrFVAbN6K1C8+Zwq+xnVwZxHyv9vpS1M+1siTe6/Zz/WBllCEMtGlYdRarst625S5xmHFGydkpoAu2ZpdGkXNqHdwsJRN/5QKchBuo62coz6OV4odWQ08JpssWq9l7FnZy7UBEHVRj0JiFQ960go+ou/sSC2LBLbCwGabyTnqA+cqfRKBX6fL+/D8Q9M6bckrSvNjc8AeM37E//tytIvXIgPASdkeq3bT1s4GnLRYDWzd+R/pGHvglQOO809wKRng3nGw6IbmEiusGuf2EtdANV9UErWZIfF0ySi9ivUXvIzTxjO6M4V","cancellation_requested":true,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALrLFtzOxre8e7FEYfzGucf/9i4O7DAikLwYdAvVPdn8eO7G26OpIgtF+8eq/+asQgD8G54f1hhbQj0TosKqEQ42DkyPOIx+xLdLCt0uOlsiqXc1IJZtehTLS4dmJduCMg7+5YfpXQHxVLK6uSRdnLdpIQRedthgXGfvKJ2Zr/h4KV5aAZN0zzyuRl4EF4sswOzgc/Mtrob1ni2pwiklwbrTEzEHY9k7mVtviegFEAXOsjgnsQO1S/PwHmHTMe6+VfRn1/Z4AaZLVEgrf+AatRkf+21Lo3xJnmlkMESv4FnK7GQ+rkB7rLzOJy+EybF1oZYimk7XmqVjn6rNq1wbymcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBtB8RrIWNYhNO0mC4jO2rUfNoYjX9HvK2XdUwXRIFKqHzPhJsTUCXUdsFd+8g0xEnbGAH/sYKRT9a25LleDaB6o6D2hPEc5khEAm740dmZ6v95Hz+zNxMYv4IkwK95q7w1qRlWE+YzJyqhy4IavYRSgyd0yaumiDFbLkXqlb29wciWGD4Oi9MvLNXBcbvykopDUSSBf85i6NeA6s6TeiWaskesQq4BA7WaiLhpfw3/v/1+bFLyxc5L+FbuNNkvOhFaOv+0wMKr1zmt+KmQT2Jy1kilNkEv9g4DgVH7DJlmjTwUsiTwkB58PIEaoaMPST+ZHROReMAJEM/BpUJPCnsB","cancellation_requested":true,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"2fc8c78ba49c471e95f1842d069eb8a0"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1313']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"dd6fd01b95df416d9c0b4b4942a3e66d"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1313'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI6ICM1v5hXGtLVHu9xzjrGtm88aw+4kl7ZeB7YLXWjjIVv4enYbELThurBpdTnJ8TGaDIPefMp8Q6wQWmqYyTFgq8+2Ko39m1TzJB3E3qPNlFFoBm3WxoWQ0gt/b4T6+3xw/uJd48ZPmxmlI/DaBcHJOmPmV6u5GnsL/1FJHh9wfOwQXpOeHf9TnrbbqNfLLvOM1b4CpXEBXdVQRYgmu9jbfdgT4hMM2txFG3Y9BZEDf5xYLzgNvLjMmL3z2oG4bLIMSjPIaRfa8ZqAY6/i4rG6FttWZqmyZtunnL/YLuJ8EDkB2Of2aHtGjWxX2TcHwBbSrdP1eygxXK4WZk5XWuUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBAR9s29RashLyB5X8FENkHkOp2PPhTH3o/hrFVAbN6K1C8+Zwq+xnVwZxHyv9vpS1M+1siTe6/Zz/WBllCEMtGlYdRarst625S5xmHFGydkpoAu2ZpdGkXNqHdwsJRN/5QKchBuo62coz6OV4odWQ08JpssWq9l7FnZy7UBEHVRj0JiFQ960go+ou/sSC2LBLbCwGabyTnqA+cqfRKBX6fL+/D8Q9M6bckrSvNjc8AeM37E//tytIvXIgPASdkeq3bT1s4GnLRYDWzd+R/pGHvglQOO809wKRng3nGw6IbmEiusGuf2EtdANV9UErWZIfF0ySi9ivUXvIzTxjO6M4V","cancellation_requested":true,"status":"inProgress","status_details":"Pending
    -        certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"2fc8c78ba49c471e95f1842d069eb8a0"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1313']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALrLFtzOxre8e7FEYfzGucf/9i4O7DAikLwYdAvVPdn8eO7G26OpIgtF+8eq/+asQgD8G54f1hhbQj0TosKqEQ42DkyPOIx+xLdLCt0uOlsiqXc1IJZtehTLS4dmJduCMg7+5YfpXQHxVLK6uSRdnLdpIQRedthgXGfvKJ2Zr/h4KV5aAZN0zzyuRl4EF4sswOzgc/Mtrob1ni2pwiklwbrTEzEHY9k7mVtviegFEAXOsjgnsQO1S/PwHmHTMe6+VfRn1/Z4AaZLVEgrf+AatRkf+21Lo3xJnmlkMESv4FnK7GQ+rkB7rLzOJy+EybF1oZYimk7XmqVjn6rNq1wbymcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBtB8RrIWNYhNO0mC4jO2rUfNoYjX9HvK2XdUwXRIFKqHzPhJsTUCXUdsFd+8g0xEnbGAH/sYKRT9a25LleDaB6o6D2hPEc5khEAm740dmZ6v95Hz+zNxMYv4IkwK95q7w1qRlWE+YzJyqhy4IavYRSgyd0yaumiDFbLkXqlb29wciWGD4Oi9MvLNXBcbvykopDUSSBf85i6NeA6s6TeiWaskesQq4BA7WaiLhpfw3/v/1+bFLyxc5L+FbuNNkvOhFaOv+0wMKr1zmt+KmQT2Jy1kilNkEv9g4DgVH7DJlmjTwUsiTwkB58PIEaoaMPST+ZHROReMAJEM/BpUJPCnsB","cancellation_requested":true,"status":"cancelled","request_id":"dd6fd01b95df416d9c0b4b4942a3e66d"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1148'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI6ICM1v5hXGtLVHu9xzjrGtm88aw+4kl7ZeB7YLXWjjIVv4enYbELThurBpdTnJ8TGaDIPefMp8Q6wQWmqYyTFgq8+2Ko39m1TzJB3E3qPNlFFoBm3WxoWQ0gt/b4T6+3xw/uJd48ZPmxmlI/DaBcHJOmPmV6u5GnsL/1FJHh9wfOwQXpOeHf9TnrbbqNfLLvOM1b4CpXEBXdVQRYgmu9jbfdgT4hMM2txFG3Y9BZEDf5xYLzgNvLjMmL3z2oG4bLIMSjPIaRfa8ZqAY6/i4rG6FttWZqmyZtunnL/YLuJ8EDkB2Of2aHtGjWxX2TcHwBbSrdP1eygxXK4WZk5XWuUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBAR9s29RashLyB5X8FENkHkOp2PPhTH3o/hrFVAbN6K1C8+Zwq+xnVwZxHyv9vpS1M+1siTe6/Zz/WBllCEMtGlYdRarst625S5xmHFGydkpoAu2ZpdGkXNqHdwsJRN/5QKchBuo62coz6OV4odWQ08JpssWq9l7FnZy7UBEHVRj0JiFQ960go+ou/sSC2LBLbCwGabyTnqA+cqfRKBX6fL+/D8Q9M6bckrSvNjc8AeM37E//tytIvXIgPASdkeq3bT1s4GnLRYDWzd+R/pGHvglQOO809wKRng3nGw6IbmEiusGuf2EtdANV9UErWZIfF0ySi9ivUXvIzTxjO6M4V","cancellation_requested":true,"status":"cancelled","request_id":"2fc8c78ba49c471e95f1842d069eb8a0"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1148']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALrLFtzOxre8e7FEYfzGucf/9i4O7DAikLwYdAvVPdn8eO7G26OpIgtF+8eq/+asQgD8G54f1hhbQj0TosKqEQ42DkyPOIx+xLdLCt0uOlsiqXc1IJZtehTLS4dmJduCMg7+5YfpXQHxVLK6uSRdnLdpIQRedthgXGfvKJ2Zr/h4KV5aAZN0zzyuRl4EF4sswOzgc/Mtrob1ni2pwiklwbrTEzEHY9k7mVtviegFEAXOsjgnsQO1S/PwHmHTMe6+VfRn1/Z4AaZLVEgrf+AatRkf+21Lo3xJnmlkMESv4FnK7GQ+rkB7rLzOJy+EybF1oZYimk7XmqVjn6rNq1wbymcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBtB8RrIWNYhNO0mC4jO2rUfNoYjX9HvK2XdUwXRIFKqHzPhJsTUCXUdsFd+8g0xEnbGAH/sYKRT9a25LleDaB6o6D2hPEc5khEAm740dmZ6v95Hz+zNxMYv4IkwK95q7w1qRlWE+YzJyqhy4IavYRSgyd0yaumiDFbLkXqlb29wciWGD4Oi9MvLNXBcbvykopDUSSBf85i6NeA6s6TeiWaskesQq4BA7WaiLhpfw3/v/1+bFLyxc5L+FbuNNkvOhFaOv+0wMKr1zmt+KmQT2Jy1kilNkEv9g4DgVH7DJlmjTwUsiTwkB58PIEaoaMPST+ZHROReMAJEM/BpUJPCnsB","cancellation_requested":true,"status":"cancelled","request_id":"dd6fd01b95df416d9c0b4b4942a3e66d"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1148'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALrLFtzOxre8e7FEYfzGucf/9i4O7DAikLwYdAvVPdn8eO7G26OpIgtF+8eq/+asQgD8G54f1hhbQj0TosKqEQ42DkyPOIx+xLdLCt0uOlsiqXc1IJZtehTLS4dmJduCMg7+5YfpXQHxVLK6uSRdnLdpIQRedthgXGfvKJ2Zr/h4KV5aAZN0zzyuRl4EF4sswOzgc/Mtrob1ni2pwiklwbrTEzEHY9k7mVtviegFEAXOsjgnsQO1S/PwHmHTMe6+VfRn1/Z4AaZLVEgrf+AatRkf+21Lo3xJnmlkMESv4FnK7GQ+rkB7rLzOJy+EybF1oZYimk7XmqVjn6rNq1wbymcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBtB8RrIWNYhNO0mC4jO2rUfNoYjX9HvK2XdUwXRIFKqHzPhJsTUCXUdsFd+8g0xEnbGAH/sYKRT9a25LleDaB6o6D2hPEc5khEAm740dmZ6v95Hz+zNxMYv4IkwK95q7w1qRlWE+YzJyqhy4IavYRSgyd0yaumiDFbLkXqlb29wciWGD4Oi9MvLNXBcbvykopDUSSBf85i6NeA6s6TeiWaskesQq4BA7WaiLhpfw3/v/1+bFLyxc5L+FbuNNkvOhFaOv+0wMKr1zmt+KmQT2Jy1kilNkEv9g4DgVH7DJlmjTwUsiTwkB58PIEaoaMPST+ZHROReMAJEM/BpUJPCnsB","cancellation_requested":true,"status":"cancelled","request_id":"dd6fd01b95df416d9c0b4b4942a3e66d"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1148'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI6ICM1v5hXGtLVHu9xzjrGtm88aw+4kl7ZeB7YLXWjjIVv4enYbELThurBpdTnJ8TGaDIPefMp8Q6wQWmqYyTFgq8+2Ko39m1TzJB3E3qPNlFFoBm3WxoWQ0gt/b4T6+3xw/uJd48ZPmxmlI/DaBcHJOmPmV6u5GnsL/1FJHh9wfOwQXpOeHf9TnrbbqNfLLvOM1b4CpXEBXdVQRYgmu9jbfdgT4hMM2txFG3Y9BZEDf5xYLzgNvLjMmL3z2oG4bLIMSjPIaRfa8ZqAY6/i4rG6FttWZqmyZtunnL/YLuJ8EDkB2Of2aHtGjWxX2TcHwBbSrdP1eygxXK4WZk5XWuUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBAR9s29RashLyB5X8FENkHkOp2PPhTH3o/hrFVAbN6K1C8+Zwq+xnVwZxHyv9vpS1M+1siTe6/Zz/WBllCEMtGlYdRarst625S5xmHFGydkpoAu2ZpdGkXNqHdwsJRN/5QKchBuo62coz6OV4odWQ08JpssWq9l7FnZy7UBEHVRj0JiFQ960go+ou/sSC2LBLbCwGabyTnqA+cqfRKBX6fL+/D8Q9M6bckrSvNjc8AeM37E//tytIvXIgPASdkeq3bT1s4GnLRYDWzd+R/pGHvglQOO809wKRng3nGw6IbmEiusGuf2EtdANV9UErWZIfF0ySi9ivUXvIzTxjO6M4V","cancellation_requested":true,"status":"cancelled","request_id":"2fc8c78ba49c471e95f1842d069eb8a0"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1148']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"error":{"code":"PendingCertificateNotFound","message":"Pending certificate
    +        not found: asyncCanceledDeletedCert"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '115'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI6ICM1v5hXGtLVHu9xzjrGtm88aw+4kl7ZeB7YLXWjjIVv4enYbELThurBpdTnJ8TGaDIPefMp8Q6wQWmqYyTFgq8+2Ko39m1TzJB3E3qPNlFFoBm3WxoWQ0gt/b4T6+3xw/uJd48ZPmxmlI/DaBcHJOmPmV6u5GnsL/1FJHh9wfOwQXpOeHf9TnrbbqNfLLvOM1b4CpXEBXdVQRYgmu9jbfdgT4hMM2txFG3Y9BZEDf5xYLzgNvLjMmL3z2oG4bLIMSjPIaRfa8ZqAY6/i4rG6FttWZqmyZtunnL/YLuJ8EDkB2Of2aHtGjWxX2TcHwBbSrdP1eygxXK4WZk5XWuUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBAR9s29RashLyB5X8FENkHkOp2PPhTH3o/hrFVAbN6K1C8+Zwq+xnVwZxHyv9vpS1M+1siTe6/Zz/WBllCEMtGlYdRarst625S5xmHFGydkpoAu2ZpdGkXNqHdwsJRN/5QKchBuo62coz6OV4odWQ08JpssWq9l7FnZy7UBEHVRj0JiFQ960go+ou/sSC2LBLbCwGabyTnqA+cqfRKBX6fL+/D8Q9M6bckrSvNjc8AeM37E//tytIvXIgPASdkeq3bT1s4GnLRYDWzd+R/pGHvglQOO809wKRng3nGw6IbmEiusGuf2EtdANV9UErWZIfF0ySi9ivUXvIzTxjO6M4V","cancellation_requested":true,"status":"cancelled","request_id":"2fc8c78ba49c471e95f1842d069eb8a0"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1148']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/asyncCanceledDeletedCert","deletedDate":1583453275,"scheduledPurgeDate":1591229275,"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/f84d4b4ea5924465a95c758f8d824464","attributes":{"enabled":false,"nbf":1583452654,"exp":1614989254,"created":1583453254,"updated":1583453254,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1087'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/asyncCanceledDeletedCert?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"PendingCertificateNotFound","message":"Pending
    -        certificate not found: asyncCanceledDeletedCert"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['115']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: asyncCanceledDeletedCert"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '108'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert?api-version=7.0
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/asyncCanceledDeletedCert?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/fbaa3fb2764e42558624017ba6fac606","attributes":{"enabled":false,"nbf":1575676043,"exp":1607299043,"created":1575676643,"updated":1575676643,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676643,"updated":1575676643}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['909']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: asyncCanceledDeletedCert"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '108'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/asyncCanceledDeletedCert?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: asyncCanceledDeletedCert"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '108'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/asyncCanceledDeletedCert?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: asyncCanceledDeletedCert"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '108'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/asyncCanceledDeletedCert?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: asyncCanceledDeletedCert"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '108'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/asyncCanceledDeletedCert?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: asyncCanceledDeletedCert"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '108'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/asyncCanceledDeletedCert?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: asyncCanceledDeletedCert"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '108'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/asyncCanceledDeletedCert?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: asyncCanceledDeletedCert"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '108'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/asyncCanceledDeletedCert?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: asyncCanceledDeletedCert"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '108'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/asyncCanceledDeletedCert?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/asyncCanceledDeletedCert","deletedDate":1583453275,"scheduledPurgeDate":1591229275,"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/f84d4b4ea5924465a95c758f8d824464","attributes":{"enabled":false,"nbf":1583452654,"exp":1614989254,"created":1583453254,"updated":1583453254,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/asyncCanceledDeletedCert/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1087'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_backup_restore.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_backup_restore.yaml
    index eb1af10ab4cd..401312314821 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_backup_restore.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_backup_restore.yaml
    @@ -2,296 +2,468 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"policy": {"x509_props": {"subject": "CN=DefaultPolicy", "sans": {"upns":
           ["john.doe@domain.com"]}}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['130']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '130'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJOkvvshdrFa/DTXO4mSx8xmdr4DN9Mv4MpDC9riXobtKn2Lhg4rqrSZRFtupgnyl13AQgm3wyIvRzzjPZs5jvkgfQUxXotHXb7V/arMyCxmSX5KBE2xpGn09tMaFJEWieXMCW2XtGaCbT4C0g0LKdOBIj9poEC7ndpp3YOzlFwdCsy+8QZiHnwmmY86yx8upNeXstgckfTgvASNAoMsjTOk9wi9tlSG/LMr74GLf3k6MHXlEJyjRtr6fkK8Hhn4KGwI6ZwA6Zfqyj6ABBjHRgKQGETo8+yOU6wjElqJ/UJMa5LO6dDARDzxkf6OuGfu/cklyhTNX6gsU+yUHLErgZ0CAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBwwJMd8uFdXXdTkWaGcF9opD2BtlvupIEL2uIlAL4dWln9bK0664wAS938RULDEFo62rmmDA2vbnrp/OaLc+O6v8F/7+Uc6DCMmJvmuPs3mRxg3lXYLd6iFcJGZbz+Yj0N2AlHZ9EbMp9WUH5wihT+DEyE5pJHP3sbY2wdNGa+6mmI3ri+EjIppYvxYC+QAKvnB9lDYVQ1eoy5b5YbrzTQ2zngyuO82j5jQjnoT+8lC8G+o47Bhfk/bN5nfP+8ymPia70xcZJb981kazXmAAwkFpvQglTncMaQ7i7hILgebyeZtekl8WNp85a24qrtU+/90nSPkEVArTn/nAtjOJEN","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJVtZ6aI18XvPHu3luahoTjw9GL+bMWI9m8pJaWRH41J4wJ6c9sf+DHZlWO6qvZMok5OR2XEl1dX662/gjE7kPgTMjfXVcQFbxae3pUji9wFxXShOJ4O1ZlsqARj40obXXjTFi/ntAilV5oqx2EtKsC6YSV2ot8LDgfSZXDjiCN24BS047Xtcm3GjZyWMK9+qg81tDyci/O59DZy3KTI88WsnUUXvfrcav8tiiOm4+AU8YrDV8IaSE6bMvuB5SBiFQEy0LobEaE+ctIISA/pSF29KdbiwogNeX+qGMFibh0umDzFWFZCeLMEr0BDwGgla+/zVPmI+lBo3pCcIVHyrt0CAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBfp4sOHecpAhQHbknawmngAFALgExG5NzRATVae2ENdQS2kuAJekJfIXT7Mn8ESTtr6GOyPjAQjXP6PGyhK5VkAChjP959n96vBSQa7cY39I+kvubhR3baCGgv5NCV2Zaosyr4Lzc4mpMwiVLfx6bhqskvdGgM9Nzwm0tZx6flu1nbbb9V7Hb1QFXLwG2sn9u3BCniYasrzhU+tVFJid6EgqRx5shFfZ5sOZadpmzJ6s3nVfMFQ4Nvgyr1S2khLDS53szhsb3OBW+sQHNk1YNZXpGMoiKD8LYci13ZO7NpkUzUvh3g9Cul4DQTmj6sSPZL/AQn+3tNADO7rBMuhi7n","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"fa58bd10a3a245e7bbb1fd459605b7d0"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"e097fc8373bf4b2eaa045cdf703601da"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1366']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      location: ['https://vaultname.vault.azure.net/certificates/cert96da121a/pending?api-version=7.0&request_id=fa58bd10a3a245e7bbb1fd459605b7d0']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 202, message: Accepted}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1366'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://vaultname.vault.azure.net/certificates/cert96da121a/pending?api-version=7.1-preview&request_id=e097fc8373bf4b2eaa045cdf703601da
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJOkvvshdrFa/DTXO4mSx8xmdr4DN9Mv4MpDC9riXobtKn2Lhg4rqrSZRFtupgnyl13AQgm3wyIvRzzjPZs5jvkgfQUxXotHXb7V/arMyCxmSX5KBE2xpGn09tMaFJEWieXMCW2XtGaCbT4C0g0LKdOBIj9poEC7ndpp3YOzlFwdCsy+8QZiHnwmmY86yx8upNeXstgckfTgvASNAoMsjTOk9wi9tlSG/LMr74GLf3k6MHXlEJyjRtr6fkK8Hhn4KGwI6ZwA6Zfqyj6ABBjHRgKQGETo8+yOU6wjElqJ/UJMa5LO6dDARDzxkf6OuGfu/cklyhTNX6gsU+yUHLErgZ0CAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBwwJMd8uFdXXdTkWaGcF9opD2BtlvupIEL2uIlAL4dWln9bK0664wAS938RULDEFo62rmmDA2vbnrp/OaLc+O6v8F/7+Uc6DCMmJvmuPs3mRxg3lXYLd6iFcJGZbz+Yj0N2AlHZ9EbMp9WUH5wihT+DEyE5pJHP3sbY2wdNGa+6mmI3ri+EjIppYvxYC+QAKvnB9lDYVQ1eoy5b5YbrzTQ2zngyuO82j5jQjnoT+8lC8G+o47Bhfk/bN5nfP+8ymPia70xcZJb981kazXmAAwkFpvQglTncMaQ7i7hILgebyeZtekl8WNp85a24qrtU+/90nSPkEVArTn/nAtjOJEN","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJVtZ6aI18XvPHu3luahoTjw9GL+bMWI9m8pJaWRH41J4wJ6c9sf+DHZlWO6qvZMok5OR2XEl1dX662/gjE7kPgTMjfXVcQFbxae3pUji9wFxXShOJ4O1ZlsqARj40obXXjTFi/ntAilV5oqx2EtKsC6YSV2ot8LDgfSZXDjiCN24BS047Xtcm3GjZyWMK9+qg81tDyci/O59DZy3KTI88WsnUUXvfrcav8tiiOm4+AU8YrDV8IaSE6bMvuB5SBiFQEy0LobEaE+ctIISA/pSF29KdbiwogNeX+qGMFibh0umDzFWFZCeLMEr0BDwGgla+/zVPmI+lBo3pCcIVHyrt0CAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBfp4sOHecpAhQHbknawmngAFALgExG5NzRATVae2ENdQS2kuAJekJfIXT7Mn8ESTtr6GOyPjAQjXP6PGyhK5VkAChjP959n96vBSQa7cY39I+kvubhR3baCGgv5NCV2Zaosyr4Lzc4mpMwiVLfx6bhqskvdGgM9Nzwm0tZx6flu1nbbb9V7Hb1QFXLwG2sn9u3BCniYasrzhU+tVFJid6EgqRx5shFfZ5sOZadpmzJ6s3nVfMFQ4Nvgyr1S2khLDS53szhsb3OBW+sQHNk1YNZXpGMoiKD8LYci13ZO7NpkUzUvh3g9Cul4DQTmj6sSPZL/AQn+3tNADO7rBMuhi7n","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"fa58bd10a3a245e7bbb1fd459605b7d0"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"e097fc8373bf4b2eaa045cdf703601da"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1366']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1366'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJOkvvshdrFa/DTXO4mSx8xmdr4DN9Mv4MpDC9riXobtKn2Lhg4rqrSZRFtupgnyl13AQgm3wyIvRzzjPZs5jvkgfQUxXotHXb7V/arMyCxmSX5KBE2xpGn09tMaFJEWieXMCW2XtGaCbT4C0g0LKdOBIj9poEC7ndpp3YOzlFwdCsy+8QZiHnwmmY86yx8upNeXstgckfTgvASNAoMsjTOk9wi9tlSG/LMr74GLf3k6MHXlEJyjRtr6fkK8Hhn4KGwI6ZwA6Zfqyj6ABBjHRgKQGETo8+yOU6wjElqJ/UJMa5LO6dDARDzxkf6OuGfu/cklyhTNX6gsU+yUHLErgZ0CAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBwwJMd8uFdXXdTkWaGcF9opD2BtlvupIEL2uIlAL4dWln9bK0664wAS938RULDEFo62rmmDA2vbnrp/OaLc+O6v8F/7+Uc6DCMmJvmuPs3mRxg3lXYLd6iFcJGZbz+Yj0N2AlHZ9EbMp9WUH5wihT+DEyE5pJHP3sbY2wdNGa+6mmI3ri+EjIppYvxYC+QAKvnB9lDYVQ1eoy5b5YbrzTQ2zngyuO82j5jQjnoT+8lC8G+o47Bhfk/bN5nfP+8ymPia70xcZJb981kazXmAAwkFpvQglTncMaQ7i7hILgebyeZtekl8WNp85a24qrtU+/90nSPkEVArTn/nAtjOJEN","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJVtZ6aI18XvPHu3luahoTjw9GL+bMWI9m8pJaWRH41J4wJ6c9sf+DHZlWO6qvZMok5OR2XEl1dX662/gjE7kPgTMjfXVcQFbxae3pUji9wFxXShOJ4O1ZlsqARj40obXXjTFi/ntAilV5oqx2EtKsC6YSV2ot8LDgfSZXDjiCN24BS047Xtcm3GjZyWMK9+qg81tDyci/O59DZy3KTI88WsnUUXvfrcav8tiiOm4+AU8YrDV8IaSE6bMvuB5SBiFQEy0LobEaE+ctIISA/pSF29KdbiwogNeX+qGMFibh0umDzFWFZCeLMEr0BDwGgla+/zVPmI+lBo3pCcIVHyrt0CAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBfp4sOHecpAhQHbknawmngAFALgExG5NzRATVae2ENdQS2kuAJekJfIXT7Mn8ESTtr6GOyPjAQjXP6PGyhK5VkAChjP959n96vBSQa7cY39I+kvubhR3baCGgv5NCV2Zaosyr4Lzc4mpMwiVLfx6bhqskvdGgM9Nzwm0tZx6flu1nbbb9V7Hb1QFXLwG2sn9u3BCniYasrzhU+tVFJid6EgqRx5shFfZ5sOZadpmzJ6s3nVfMFQ4Nvgyr1S2khLDS53szhsb3OBW+sQHNk1YNZXpGMoiKD8LYci13ZO7NpkUzUvh3g9Cul4DQTmj6sSPZL/AQn+3tNADO7rBMuhi7n","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"fa58bd10a3a245e7bbb1fd459605b7d0"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"e097fc8373bf4b2eaa045cdf703601da"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1366']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:33 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1366'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJOkvvshdrFa/DTXO4mSx8xmdr4DN9Mv4MpDC9riXobtKn2Lhg4rqrSZRFtupgnyl13AQgm3wyIvRzzjPZs5jvkgfQUxXotHXb7V/arMyCxmSX5KBE2xpGn09tMaFJEWieXMCW2XtGaCbT4C0g0LKdOBIj9poEC7ndpp3YOzlFwdCsy+8QZiHnwmmY86yx8upNeXstgckfTgvASNAoMsjTOk9wi9tlSG/LMr74GLf3k6MHXlEJyjRtr6fkK8Hhn4KGwI6ZwA6Zfqyj6ABBjHRgKQGETo8+yOU6wjElqJ/UJMa5LO6dDARDzxkf6OuGfu/cklyhTNX6gsU+yUHLErgZ0CAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBwwJMd8uFdXXdTkWaGcF9opD2BtlvupIEL2uIlAL4dWln9bK0664wAS938RULDEFo62rmmDA2vbnrp/OaLc+O6v8F/7+Uc6DCMmJvmuPs3mRxg3lXYLd6iFcJGZbz+Yj0N2AlHZ9EbMp9WUH5wihT+DEyE5pJHP3sbY2wdNGa+6mmI3ri+EjIppYvxYC+QAKvnB9lDYVQ1eoy5b5YbrzTQ2zngyuO82j5jQjnoT+8lC8G+o47Bhfk/bN5nfP+8ymPia70xcZJb981kazXmAAwkFpvQglTncMaQ7i7hILgebyeZtekl8WNp85a24qrtU+/90nSPkEVArTn/nAtjOJEN","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"fa58bd10a3a245e7bbb1fd459605b7d0"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1366']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/pending?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJOkvvshdrFa/DTXO4mSx8xmdr4DN9Mv4MpDC9riXobtKn2Lhg4rqrSZRFtupgnyl13AQgm3wyIvRzzjPZs5jvkgfQUxXotHXb7V/arMyCxmSX5KBE2xpGn09tMaFJEWieXMCW2XtGaCbT4C0g0LKdOBIj9poEC7ndpp3YOzlFwdCsy+8QZiHnwmmY86yx8upNeXstgckfTgvASNAoMsjTOk9wi9tlSG/LMr74GLf3k6MHXlEJyjRtr6fkK8Hhn4KGwI6ZwA6Zfqyj6ABBjHRgKQGETo8+yOU6wjElqJ/UJMa5LO6dDARDzxkf6OuGfu/cklyhTNX6gsU+yUHLErgZ0CAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBwwJMd8uFdXXdTkWaGcF9opD2BtlvupIEL2uIlAL4dWln9bK0664wAS938RULDEFo62rmmDA2vbnrp/OaLc+O6v8F/7+Uc6DCMmJvmuPs3mRxg3lXYLd6iFcJGZbz+Yj0N2AlHZ9EbMp9WUH5wihT+DEyE5pJHP3sbY2wdNGa+6mmI3ri+EjIppYvxYC+QAKvnB9lDYVQ1eoy5b5YbrzTQ2zngyuO82j5jQjnoT+8lC8G+o47Bhfk/bN5nfP+8ymPia70xcZJb981kazXmAAwkFpvQglTncMaQ7i7hILgebyeZtekl8WNp85a24qrtU+/90nSPkEVArTn/nAtjOJEN","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert96da121a","request_id":"fa58bd10a3a245e7bbb1fd459605b7d0"}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJVtZ6aI18XvPHu3luahoTjw9GL+bMWI9m8pJaWRH41J4wJ6c9sf+DHZlWO6qvZMok5OR2XEl1dX662/gjE7kPgTMjfXVcQFbxae3pUji9wFxXShOJ4O1ZlsqARj40obXXjTFi/ntAilV5oqx2EtKsC6YSV2ot8LDgfSZXDjiCN24BS047Xtcm3GjZyWMK9+qg81tDyci/O59DZy3KTI88WsnUUXvfrcav8tiiOm4+AU8YrDV8IaSE6bMvuB5SBiFQEy0LobEaE+ctIISA/pSF29KdbiwogNeX+qGMFibh0umDzFWFZCeLMEr0BDwGgla+/zVPmI+lBo3pCcIVHyrt0CAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBfp4sOHecpAhQHbknawmngAFALgExG5NzRATVae2ENdQS2kuAJekJfIXT7Mn8ESTtr6GOyPjAQjXP6PGyhK5VkAChjP959n96vBSQa7cY39I+kvubhR3baCGgv5NCV2Zaosyr4Lzc4mpMwiVLfx6bhqskvdGgM9Nzwm0tZx6flu1nbbb9V7Hb1QFXLwG2sn9u3BCniYasrzhU+tVFJid6EgqRx5shFfZ5sOZadpmzJ6s3nVfMFQ4Nvgyr1S2khLDS53szhsb3OBW+sQHNk1YNZXpGMoiKD8LYci13ZO7NpkUzUvh3g9Cul4DQTmj6sSPZL/AQn+3tNADO7rBMuhi7n","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert96da121a","request_id":"e097fc8373bf4b2eaa045cdf703601da"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1287']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:53 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1287'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/4ded11909844446da851716966700e94","kid":"https://vaultname.vault.azure.net/keys/cert96da121a/4ded11909844446da851716966700e94","sid":"https://vaultname.vault.azure.net/secrets/cert96da121a/4ded11909844446da851716966700e94","x5t":"lWUrAzM39YfWwwowyQ4opMUMjEs","cer":"MIIDaDCCAlCgAwIBAgIQPwNCMBbYTBily42E/YcDFTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDc0NloXDTIwMTIwNjIzNTc0NlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJOkvvshdrFa/DTXO4mSx8xmdr4DN9Mv4MpDC9riXobtKn2Lhg4rqrSZRFtupgnyl13AQgm3wyIvRzzjPZs5jvkgfQUxXotHXb7V/arMyCxmSX5KBE2xpGn09tMaFJEWieXMCW2XtGaCbT4C0g0LKdOBIj9poEC7ndpp3YOzlFwdCsy+8QZiHnwmmY86yx8upNeXstgckfTgvASNAoMsjTOk9wi9tlSG/LMr74GLf3k6MHXlEJyjRtr6fkK8Hhn4KGwI6ZwA6Zfqyj6ABBjHRgKQGETo8+yOU6wjElqJ/UJMa5LO6dDARDzxkf6OuGfu/cklyhTNX6gsU+yUHLErgZ0CAwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLgYDVR0RBCcwJaAjBgorBgEEAYI3FAIDoBUME2pvaG4uZG9lQGRvbWFpbi5jb20wHwYDVR0jBBgwFoAUcbh0fxdzGaaT1KU94N7TBkzhqiMwHQYDVR0OBBYEFHG4dH8Xcxmmk9SlPeDe0wZM4aojMA0GCSqGSIb3DQEBCwUAA4IBAQBwFE6XqtyC++LJBcrgE9BGOSwsTX9NizdRBgIKqJUBqUr6ad3JJUHppZ6QgXvQPjOQ5c989oWJCRJvfAogGFKSOwZgmJnZI+eCH9NkxZC6HziHIwuLozUWpSbfrHPN3wy3OBjjaaNux0TTVw++KT4++uFrmAa1slHhSVqg9u2N7ZmbmO95w51opjUn/9+qNwpLh9E2mRvke/cvDGzK0C9UabtjmBvmP2B+9AkPy1aO7WmGJ0iRbWxbW+hFPMKYj7I1NHkt9JNa69iJpDtVJdNYyFinaZCN4f+DOV6nyWP0EE32SXEDncZDZf/U2/X69cq6Lugaufos8A+ZjLFcUQt1","attributes":{"enabled":true,"nbf":1575676066,"exp":1607299066,"created":1575676666,"updated":1575676666,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"upns":["john.doe@domain.com"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676643,"updated":1575676643}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending"}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/7240242757e24b9cae1b7fc62f6865ca","kid":"https://vaultname.vault.azure.net/keys/cert96da121a/7240242757e24b9cae1b7fc62f6865ca","sid":"https://vaultname.vault.azure.net/secrets/cert96da121a/7240242757e24b9cae1b7fc62f6865ca","x5t":"hqL0zmKvvlru6i9lyfwY4XjDKXU","cer":"MIIDaDCCAlCgAwIBAgIQfLUuxjQ/TjGm+w0TSUCJwzANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJVtZ6aI18XvPHu3luahoTjw9GL+bMWI9m8pJaWRH41J4wJ6c9sf+DHZlWO6qvZMok5OR2XEl1dX662/gjE7kPgTMjfXVcQFbxae3pUji9wFxXShOJ4O1ZlsqARj40obXXjTFi/ntAilV5oqx2EtKsC6YSV2ot8LDgfSZXDjiCN24BS047Xtcm3GjZyWMK9+qg81tDyci/O59DZy3KTI88WsnUUXvfrcav8tiiOm4+AU8YrDV8IaSE6bMvuB5SBiFQEy0LobEaE+ctIISA/pSF29KdbiwogNeX+qGMFibh0umDzFWFZCeLMEr0BDwGgla+/zVPmI+lBo3pCcIVHyrt0CAwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLgYDVR0RBCcwJaAjBgorBgEEAYI3FAIDoBUME2pvaG4uZG9lQGRvbWFpbi5jb20wHwYDVR0jBBgwFoAUlrV9YQtHg3HLF1ykSHFcnmzmlckwHQYDVR0OBBYEFJa1fWELR4NxyxdcpEhxXJ5s5pXJMA0GCSqGSIb3DQEBCwUAA4IBAQANF32y8zIrLKNOlKHZEjd0JZspFkKLCNT/Ax6gM1duDRuwu2fiEh6Rc7ESZqV9GXrjEE1MJ/amTHi/RwZUNEfcWKqDGk0HlZuh/rzXkB3VlWcJzuqdG/LdXx7svO5/h+wJ5sP89dAKtJPfCW6nEg8Ai9xNh59/wQBMQCSeyE96ikj4xwMUWihFyIzoFk9ogjX+7oCRtzeon0bM7a34zRH7Au49OGDCwlFRFcZnjixYKvN58ZMgKMvg0hpUF+hl/IsnWh7c5JFAoKHuXcGTRxD+WDhxIgbqeLNqNyDa+T5qoh10IejcnrGFGq+/puevvyC66jZ2LtH9+OiF/SN5cWNa","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"upns":["john.doe@domain.com"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['2448']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2448'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/backup?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert96da121a/backup?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLktQOXZySzZfSmZBOGRKTG9mS3VHd1RYeU5uZnNSRlQ3NW15eS1pUXo4ejV2c3djcUp0d1NyUUJaM0htRGZ1bVZLbTMybVhlWnhlaGY3RTcyazBBZmgtN3FjTG9KYjhwdmNHUzVxRFZ2blYzaUxVTWZQSUxPbTFEMWZuYWZ3OGR5U29XOU9VdXd5dlAyVEx1aXBuOVZDaWxqbkUyQTNGY0xweEszSDRkVlZYWC1QZ0J1emNQejJSMXZoT2FEWjhWTUJ4a3hkQ0FUZHRXQ0R1VGpLSmdqRlVBQi1pNjRUM2RNaDJ0SUZJQ0J4YTE3RkluenZYZWs1cWN2VU02eWFyb3hpRlJxYk13MkluQU9WalE0MEFRb0hwNmRYcnh2Z2gtcmxBdkFySVJONEdiWFl6RVE1QWQ4bnZkMngtV2Z0S1VGTXNSMXRLcFFOS2M0X0k1OWJhbXpldy4xa3F4cGJoenhIMFJaQ3RMVGpoYm5BLkROcnpha1ZWZlRMTjBhTkNGaW9ZVFlYWUNJazd0OUc4TjJZSHpBaWJMajBsTUUxZXkyak1HQVpHcUZJSXJNQ0g1aWpmRXRLRHNPMElYWXc1cU5WMXUwcHU4V3NpdmhUY0lCTVRfOFg0TXZjOGNhdFBsYnhwdjZqZlZxQnI0RG56aDM3YU5CaXZRS2ktclBpVklSbThXQ3ZtaDU2LU9DUUpOZllYZVBqamR0cjlXNlZwVUViUmlFYWd5VEtYT25zTlhLYjlyX2FTX0licFJUMVVZSTA3bkhJZWw4TmpaN0RvVTIwUmVxNW1Lc2JuX1RlZFRrdl9JTFZqcFNhR3o3VFVhQjRyMTk4MlByb0hMWENTaWVNekliaXdhYmJjakVkS0pZUktqdjlQSEZjcWsta1h3WFJNY29rWllBOWdlRzBHS1o3VDc5MEhtTVdiNmVaUDBCRC1CU0tMdTZhcFZDZGxIZE1JWU5CcU12di0yck43TzVSOTlFb1NTUUFqM2ltQTYzazh2ZV9MclRyV0RHaG9XQkV0aHZENGJwaWFtQk0wRS16ZzIyTEt2STdQeGN4S0RNN0tlQWI0OUE3WXdrMlM3bVZlU215eFZsWGhMdTFPU2hSTVNaUlluaVJkcDI2X1EzRV9FWndFWWZrbnpJdlcxSm13U1hVeVVaN0taQWp2U3VZYVFkWlZHYWZLUjhsZ3hBR1JxRklsNkxtTUFjbExNLTJ3a0xybmpxajN4SWJaQUU0WHdMNXI1WDBmd1AzdU1tZzJiQkVCd1RwcEJEQmp1dS1HVlh4T2NmYnMwTmxleThjeVliNURUM0w4TTFvQWNSTm9ZLXB4RVhkYkMzZVBLM0hydlpMY2RGOFZJRjN1RFBaVWlxUTZYWVZCbDZLMkgwSHZKUkRaY2VXWTY1b09RaElwcWUzUGotNENzaG5XSHUxaXVfbHgyOW9fNUYyUFhPWHhDWXpSMzNCMVNXNDVPQTFob3Byb253bzROSmQ0dXZ0U3ZRcVhhU3E0OGV3VTVkUFZubjBnNXRqTS0wZWk3Y0s2MFhlWndHRjYwVm9GejlWc0pHM25aMnI0aUN1NHA2amJMMFpNRFFpR29kaXZGNEo4NkpXZTJJRUpDQ2NObGZndTRlaUs5M3JZTFRSb3U5azRTaFF5bHdBX0UwczNrOVpBVGtVSWdLbVl6dkQyUXBCQTNjbHRkamQ0VWZ0WHo1LVBJWWdaUzJKSUFvS1dRczFaUE80Xy1ZRGNRVk55VUNsRkxib0k1TlV3OExJdUpPZUpVdGpVUEg5WWs5dGI3V2Z5YjJnMHBlaGJ6eHM2cHZGX3FKS0JXTWlOaVdRSnVIal85Q3dzS0RoeE5HQUVVYWlfZXIxeUdWMUJrLU5CbUhnQ3lpX0szQjAzN1lDYmE3ODJ6NC0zblJEZkNSQTJubzlINS1LNkRPeUd1bGlEaUhsenNvZWVVaV9Vb2h5cVpVR0RkZXBZQW1GelBHaWFMUW1VemNza1FWaFdjZVpDbXIxVFNkbE5Gb05FV2ZsLUtoSHlyU3lENGFaMGJYZkQ5cERjSlhrdkRhTzkyQTJPQkNVYkFRZ2pmeXBJQ3lITWt2UUJzYnhmVkZqQ1NVazBfcE11VW9yR1RlY3p1UFhzdS1jajNGVV94d21MZTVqMDJkSGNxWmtfQlRneGFVTFJ2Z0w3Y0tFZDdkd3JKaGROQTl2bWprNExLa2hGdXQzQ2ZjWVktSElnVVFva3hIOFdMWWxtYWJKcmNNVE1YVnFENy1nWTh1dXF6NHhURUJxM1JrbzZScTQ2Wi1DWjFGdTJyc0I0YklJYkhIRkFnOWl0LVFMbUk1cm9FOFU2c2lNU2ZrSkZHSzJwbDMyT0otd0RQSUVoc3lObl9rT01DUU5pSWFFRWlkYkJ2MUI3VjJvUVNtNk1fYTVna05SWk9VclhTUkxIZ3VvYmxZcTNmYi1lTWVkWDFqUWhtcU44Rjg5N3dVeG5kVjE4eDlKdjUzQUhXOUwyMUlaMG01R2lEUmpONkV4WFFwaEVUUnBqblVacEUxYjRKNzIzdmtlMDhxU1phQnpNVzdpMzdZdzZUajNWdEFNVzRkdnpETkFQNEdOVjFETC1mSGR2UHlxaGptRHZ4SzdmUWxIUkJOcXVCUEZxLTZJdFIxNFpDS3NhanB5X0JDUzRBdnZEWHMzZ3RMNUJ1bzhCbVFoQ1lsMEQzZVhwM1Znd3JRV0w2RklSOVJQVGV0M0dBV0xuNzNTOFo2NXBRZ0ZrREQzM0Q4M2U2Y0tSVnhQN001S1ZWcUYyWVo2OTkzS3hZX2xHWFU2UF9RbnptOGRnUERqdWdkOTlfRGhqM2Z3Qmc3YnhlOUNDMkxCOXh4UTN3MnFtMU9OT25qUjMxb1l3N0w4bGRVZUxKVzRaYjF1RWpKMnhxd1lyMHp4MG5sb1pxbnQ3V2dEVnhrNEJOMjVTeVBULS1WZGhOUWdDTkhpU2g4WUFfSnZEcGVzT2d4VUVNNzczTV9LV1ExVzNpenJfZFFiZ0hqNUU0NmdKLXctcUtlMVBfWko4RF9yRDcwd2pZdEhIRWdKRkEzeDNCeU5HUDFQU0Y0NllRRWRMYzhfQ1FudndpV05Lb2hUbi1VVmlXTHZyUVVQbkw1MDM4NHI0bnowWjFOMWt4dThYb0w0R2pCY0Zpam4zSzVKRHh6MGZEdkwyVk1IdmI1RzBmMnR5WDltRjBtNDUwbmRRUDBBSTZnUlU5Z3JuT1k4VndmczhVVWdRa2twMGxvdDRfUENpNTlpeWo4b19XVmdIUzRKMG4wNUt4R3BPQmV0SFItdzQ5SktwX2dmR3FqVjlKb0pSTWRneGQ1U0VmeWhsa1Vydlc0RVBWTm9Cd2M5RU1UUWdZeE14SFlUN1g2TnY5aXNjTzBmRzFDWllIUHR5YkMzYnJ5V3VoblZjbkJneUJRbllKWUp5aEd1TEt4YTlwVkk4czJ3anU5eGtNQWxKS1B5LUthOXFoeFB2b0IxalY1MnBsSlcyZDVhcjZueXY1NkF2YW1YRTB5U2dCMVNtSFdRVmpORHl1aXJiZG9TMlNaZ1doMUFhdEVQdUFGQUFjeWFuUlB1VUZLVXg3cENhUkNnWmt6M0pPZlZaZmFEcWw2ekR0VmxQR2R1Ynd6ekxxZHppRW5RZE9pY1RscHVFTUhQNEJwYmtwN3h0bXlUSjYyNEFZdlFwOVJqb0VzU2ZyUzllMU5hVHB4bUhRempYLWJ5YWRtNkJKMmJuTmlPSE5tbmhCa2wzaHp2TTVnR2prRERlakNlSk05YUdEUWZTZzd3VlJqNGpCQ2lrcHJPMDhXNURBSGpXc04xNDlfU3ZsX00zdTIycDhYeEwwUTRkSWtlM1lEU1c0NjZLT09PR295cnBqaEVCY2YyelVYbmJxSl9ULTVabndyNldkcUFpU0xyRHJVd1lXZUZpSDdDaVFUQnR3aEVVdEFzb2UtcTQyREg0YV9IZ3BnM3ZGM0hRaWZlNXFKYy1OZF9yN0FUQ1p4TlRoUEx4eHJ4SkliZFAxNHI5VDZSYTV0cTVRN1NaUEJOM1duMWR4VjhPeXhXT3lETF8yWWJwSzBMcW1zekJTa1hpQTJ5c0dqaXR1VFN1TF9ISmR0ckJpbklYcWRSanY1WE1rMGh5UlZkOVozYzNzWTdwbW1WSFhNc3B6bU5IUnhJQVR6SWsxZlpuWlh5WlYxTjM5WWNSVW5fYTI5YXluNmFjVUhLcUhUTDJ1RnVoR0lGMTZTRUptYUFZOVRSSFF5ZHhxNE5RbG1JU0lxR2VvbEhsQjhHR2NLZzBmMWFLNlNBSmVpTWluNVhUdzk1N2t3SW1XZVYzNFVxdTFUeXJBZlpUeDRwWGU3Z1QyRy1CYWdqaldqX2pOd1ljenRiN29NTmtuM0JtV2xCYUp3cEtKSVRPcFMtdDUxSFo1Z0VjOUtwaWVZcVpUakJSdVRSUWpJTTdKQ1JCTEJ4Q0tTMjRYSDlIdjRmbm5HUlA4aEhpNFZkTW1mWDBJWkRIZ3g1UDRyNXMzb2lKSnoxcFRjaFBiOWlmX2w3eEJrZVQ2VDFGM0lFV0pJZHp3VThYQnVjU0JiVU9PNWJtbktGc052WGZPRUY2b2NhWGZWcHllRm1yWVZ6RHp5VmY2Z1hzQWJwcV93UklMNWxkQmtqZEhhTWhFMmI3ZGhLZHZVam9oR09meEZvVnJqdU5wdVB6LWV0RTUtTl81cUY5Rm9FX2JJTnlkVHlYLVczM3NWREotRFI0OEtnTENGWnBxdDRxV3gzNXFvN2tYQjB0YndjT0ZPMmpoa1ROcE81RlpPNWRISkVPODd3bEVvNU91b1BKOXF4WExMNF9jcHpJUHpwX0VmcmluakZPOEE3am1RbHpWb1RTQXI5ZDJnZlVQQzB0dk5oa3poNWpLNmFPTWtwc2xidktnU1NFVEVpVUQ4M1dYMC1LQURJZmlzZWJHUG1BZTEtbnJLelpfWTN5Y19lb0RMdU8yY3VNb0hhbzdRVW5tWUd2U3MwaWoyZHhqbFBYUno2NlJwaFBnTXNVdmpDZ2lqNHp1RjAwMFdoS3FpM093a0V6WWwzWGhiX1FHMVduVmtiTXpqV21tbzJMSWJWVVh0a2pyRHI2ejdXSUdTc0kydHJnYjFpMTlfYlpXdlFPT0g3R0ozelJhVkxoN2VyWnBXSV9BVTRENFc2cU1nYWdJWldlTENTdjltQmI1UnhmOFJPSDJ6d21NYlRvRkxBMEZKQUpkVjYyOWlyTllrc0NtdkVVUTVnY2UtX01zYTVrQmJEMWFIcWJZSXNmODNDYzh3YkpnZFlRRnBCMDFRcTBrbENHUVJtRUQxaDVGandiWVNvTXZ0VkF2MTQ3cmxUbHBzLVh2bTlyOVFrbTJzWW13YUFHZTNuN0lIQVUxSHFCd0RDZXhUZlhITmVWMVdsNGpEYl9NUkZRMlp4X21iR0lQUkJIanQ1aGVzc01TRjdSNkhwZUVzbVNrNE95U0xMbDNKVHZ5RWhKSnpqeXhPMEhfUGVSZWN3N2JRb25iSTVJa3RPU0RGS2pJT29lYzdVYWxvUHc1ZV9abWV5Vk40aGcwN1Q3RVBMcGlwV0wxMkdkQW1wSWVtMk4weFR6eVh3dEIzSUJUcS0wRDNwNlNDMjFjZWNTMFl4VHFrSkI3WC1NcFJOWkdaWF9ZZDVYZW5OalROV3pvY0RXLWpBT3pQS3dHNUxVemFfejVwSFVCaW9XYW1Cemh2a1UyRjcxQk13eXdLSVZNMTIzSVFhMEZ4QWoxQk5JeGtpU3RqQjJvcC00N0xDcWxReERsUFdndU9XOVhLZXk0VTZ6VzAzMmdiMVZhNkY5VkQ4TGdKZjUxSFc1eHFHVmRWNGdPX1FHMUZhRXdTdUtkM21GZ2RPaE4xT2c5a0huUXluRnlqY3pCaThUZ3YtMENEcDVRZEtDOG5QTV9tbjlvaXBQM3RRbnlfRmZ1SmwtNUNUVXNKQmtqeV9yS0t2NkFISUV5SlpmQ2doZFFRSG5WdlRyRUUwWm5jQUp1WXhTM3RFX2xDNHN5UmhKNGp5Q3B2dnRrOGpXbVR4ZEZhSXM0cXRZV0tuRHJiaHdRUllzSVdCVGdBMWc5UUhmallRRFZZVnh2U0YwckNmOVluNmpxTTdSYXRzS01faWxTX1JKWTBiaHpRQ1dUTkpqcXF0bGxoMUhqUG9PYWVyaDBWVnp0NGxWS0VsMEdvdllLcVUxT0VHcU91MzczdF9JcXcySmhTQlp3eG9sRHJoQjRCa2tWX3NWeWp4WFM1TElUQVdUU2lTODVOcFVWZmpyZXZiUE9hdTNMWlM1WlUyb0lGVm1yaGZ6RGdUc0Nia2RmcUVfdkdyLUtBMUFwM2ZNbmhzaHhpTHpVUzZMYVFPRnlYRnZvWS1XbUdla1FobFVUcE5BZHJQLWNLemVZNFpJRmRMR3I4RWlMOTlHb1l0SFY5NktZSkRJYWtobDhlOXloU3ZNekRfTl9BVVVQaUt3VDltZ0Y4OFVHQnZtRnRWLWkzdF82QzY1elpTem9ZUTlaVFgzQjhlbTFDMjRQWThXcnpDelpGSGhwWkJvOERTTkh1YlhyUWpCMUhDVGEtWE5HbU5weUpQUVFuZTNxVjZCcXRYZWl3Tm9ZNGpEeG5MQWdKZnNhX3k3cU5KbTlUVmlESDhWamh5YjMzY3djTTZSZ09CazZoU2hZMGVGTmozYklyMXNmcVBHb1FiaDBwZm01SktFZnMzWGpIOXA1SE5ISDBBZUpkMTkwbnNpSkl6RkVndGhsckdqVFFnMzl1aUhqR3lZS3NwOVRqZmUyVDNiYTNrWVlhQVVVTTVEYVl2TFpKZzJsQ0VjRXd1bGxyU3l2VmRybko4OG1OZHJ3VnZva1lERW9Cc21tUU5LNFNQcjlVWUYzcndGVmJLTEx5TzRvNHk4Q2ZqdVNfNlBPTS1pSzFiS09aVnhaTjd1S2dnWF9oYno5VnVsaEtGaEppMHVvbWpnTDdjbER3TVdnaUR4RGg3WGJYUGFidGVtNVRXeXdoX3B5cVJ6WElHOXFzRFdCeW1pTm1SODFMVmdLVGJncnJMZjUwenRYNGM1LUNkWnE0T25nMFMteTFyOWVQc3ZhMDVzakFnQ1RPTkdmNWJlTkNQQ1NTTi0tS0h1bEY3bEo2WG9naWJ5eHQzTGUwdWpWU0JpZlhGdFJZSXFtaWVGMW5mbHBaQTJYdy1memVMdWN4VDY2ZUFhRVFxZEZYc2FETlFHYUZackJ4QTY3bnYxM1owVXBkd1A3RmtaVVVSc004Y2t3ZlJsVGc3RGJ2dUN1NHJBclk5VllEc213bkFvMzVNTEZrWGtLdERyaXhNQmVkUzNSTG9SWFRhNkZGbENZQUpHNFNMaHFUOHBGTTk1MzVMT0hJQTFMcVg4WV91ZlZSNHZTc0lKR1ZqNmFtYW0xTEFjbjQyVG5BeEt0RkhVLXhqUTQtLW95eGVyUktMYW9DZWtnMVNwRVBlTHJYNlVtbllHUll2d29fR1pmRzdVMlpsZnBWT09IN1lSUFBpcnpxSVRvUWxMWW1lT2FWWF9jak4xOHo1dmRLMUFOeldQTFlmMFNFNzI4V09NTkp6REswM2dsV2tGUWRWQUlwVkdlNDd0YVVBX3Nldk5NbnJua1ZnYUVRN0t3d2I3eldrVWY2THpKcU1rVG91UXFwRDVqaTU5SFVaWVgxVV9LZHZaOGQ3bnlxT1pGMExReThsZkpQZ2dLTF9tLWtfaFNLUUhmNmVvYTUzMFYzVDdkajAyMURlX1hkQzVHOTBaTklHeFVRVExFU1pwNTBTTlIxdkM1QVJ0Q2J3bk9JVW9mVWZ2TUVHaVcxaDRuQ0VvNURBbFVQcEtxQ1NScVMwb0xPZ24zMmxiQ04yMnhEbV9NOWdHdFVoNGx6YmN3STc4OVpvMm1QQktYeTVqVThWUGZ0R1dueURpVFVZR3U0eGJzazRacVMtMXZsSkc1WjQ4UVdDblhPeDRkUmk0Y0hFbHg4MElpbTY5Uk1HWXQzVk5WbGlNRTg2d1VkZ0lSbXQwTEpzOG5OV2hPeDFmcHFJc0hCYm9HM1JFOUc3d1RKYS1mS0pOXzZjVVJmTlVuU1lIZ0xiTWstSUJMM1piX0pIWWhfVFRSRkZabFhUV3J2SjlaNVVKQUJ4ZGtBVXNsQnpUYVBwSnYyRFZNTGtmcWVwWGtKWW1heDZydnlOdmhUM1FpbXpUTGRvNzJncWpvbjFBLWUybDhTSWdZVTJJQWRuZm8wdDlCTGN5N1BpQ0ZHR0psbktzVUxtZEQxMDhudXhqVjUwZkN3a2hZMGxGUTJiTVgyMmZuajVsRlZabFg3dXEtWkQ3Tzc0clo4VGVVdXlTS3h1YkFoUHAxR1ZzQ09SUG5CZVlmNFdRTHZuQjVXa2xFRVlpYTZkSWJlTXRBcFo5YVVuQi0zdlJIVXZGeVdzN3YtSHJ2OWJ6X2ZLZHR6N2VlY0NmRXNuUXhpTjUzR0p6dXZhMjh2N0tpVW9pQVI3SnlaazhxWF9sT2VmeldRMG1kX3lPOW9qcDc5RnRWSEJrYWRWWDVidWZmNjJEeDZYeVZPbm0yZDA5ZmV6bkluX1IyVmNNQXl4T0FKM0J5VGJaZThrNDJkRkhrX1pObTVpXzVBM0gxdW1YMlVUamVZWmhITFl6eElqTHFtdGtFU21KUE1xaXphVk0zSFF2LVozNmtYTkFuZ3ZLRkxiaTZlcnpEeUxhZWJZZUwwQ0VpZUMtRXFwMlZNUmlpVU82ZDVUekd1R0M5Z2xXQ01Cbm5aNmdvVmhoQ1l3RlJONWhoR3hfRjNmUXBtV3lTZDFaV2lDd0ZTYjFyb25JSG9hbGRqcUVvLThod0hDQXI0UGJQQURzZDVwa3R2Zy0zSHladS02YmR0VEpucDItbElxejViOG5xc1U3bThraUpBTElTdjlkLUtvMDM0ZElidmNhbjdTVVAzM3BkaExoOHBNc1NNdVBmd3RrTUMxWVEzYW1KNUJRVHBRazZtSjBVYmpxdGJMTFczdXRiejlkUURPaXBobWVDSnFST1E2aUQzMk1WTUQ3NWt5alhlei11TEhwMlZrRzV2LXg3ZFRmdHRXTXhaYTh1WXVpQXY3djl6OXVkU3RNTTI2a0oyMjAxZnlSRmdZWEZ3SlN6MmVuNzFaNXA5LUZWejY4LVFycEIxM3JTRUJLMnRyNmpUay1OZ09TR2NQZUVnMEthMHVDUnZ1UTBiRWtEeVQyN1Ribi1pQ2UySUxaWFNsMmU5Q3poR29CS2hLckZHajE1WGJfMk5oa19lSlFCR1ZCelMtSzRHeGhBOWhJY0ZaU1BYQ2t4ZHBzMm5XWnZwekU1MUF6YzJTcEhtSmVaNVBlNzBNUHh2b2tTLUZVUjdwdVVqQ0U0RzhhN3plRDFTb1U0YTRhd1RlbWEyUEg4cm5lbUxqT2doVUFBaFlLNUZWLVRvdTk3Rm5wT3B1TGQ5RFR0S2dvWENHUnBTbVlXamZPYzI0UVJ0dm9hUlBtWGJyWVB2WTdlSU01d3U5T2VvMkxMQkFQcHhldnBtN1Nac1hObjBXWU9PeWdDdHg1UEllSXRmNkloZmtHZHlSbmc2dGNnRkhEbG1IcHl2Y0diRTV1MDlQa1gwU3FJaVNNdEVEUWRfZEJXbFphWXNRNF9iR2Qyd19venA5R21tOEE0NXVJMUxEZDdDZmM3a0tVSnVNQzhxNkJTTVVXVnFESC05V3Z3ZC15SHBGVnB4Y0JKV2FrQ3o3VnNpbERRX3FxOU9rSTRyV0tYZ21JRDRVSVozYksxdG1odlVtR0JqQXFVbEh6UGJxRUZ3ODRGR2ZnX1JGZ2syUEk4LXlXQ3RuVXR0VVBNbEVheVQtWHJJYzMwVjk0QkRIcmo4QTMwQ1lEMmlrb2MyaVJDa0pMbHN4Q0RJQU5neTg2YlpIT2hpWkgwM1RqVjBrcjJzUUk2UmN0dzlSVzRYMkxrcUhlR1k3eUI0UFVXbHlucUs1eUY2N2F0QUVoSmdnanVLbWNrcXVRTFdJRTYyejF1d2o5OEwtcFVxY3lFQVFZRU5pSjJhNjhWdVV1NVJla0syT3ZrV09fWEZldTJhcVNxcE9YWm9fV0ExNWZZZnhNeWhBQmNEUmRoR0MtaGFfd25jX080NDJNOXB3VktfLVktSlN4WG5zdlVZWm40eDlUVHU2SG1BT05veHAxRWNhTndYVFVZbDNsR0pORDNUZENCTEZLbU1FTnBBUElXWmlvOU5HM19yRzM5Tm1pTzYwNTJQUTduV19aQk1EaVBreENzNzRxamhVc1czMU5uaW05TUZMZ3NZLVE3Y2FBcDRJd1Y0cHR4MHlSYzltUWFqbDdId2daY3ZwdGlqMDc2cm5rVGpjRmRrQllnYldiTENkOGRSWm9qVTJHbGlnXzBzc2F0WlYxUnQ1VEkzSnF0VVJaSUdET21UZTl5anVLYnJ6cHhCTnFwYlp4Z3dLbEtHa1kzak5JWVNJdnRuOG9xSGhJQjlPQjRmeTZnZE1ERWJGLXltTVdDQ21CM0lqNnd1MkVtYlNudWZnYU9QVHFWcV9rYkVaUjl5cDJPMmE5UmxSbEpqMzN5WFpiZ1dIeEtEMy14T2JRbEpLeHhHSTJ3UkVudDVzMUwxV0NVWGJhMFhQVjI0V3owaGpuWmM5WVBoUVJ4WnhvUXlVR3g3RFpzVFFiWFFpY1EyLWdHYk4xd3A1Z29JZHpRSm05MEFKSmF4Wk96a0VkMWQza0ZLWWt6Z0x0ai1pUUtBSURsaFBMbzNGWjhncExrM0tfYTYwSkxIOGRJS1FkY2FaMzlDeEZyTGRESE5vcjB4dGNoN252R1M4U0tRYnRBa2hBdEVwblBXclNzdjJzZkpCVTY0eWdHZU1fdXlYYlNzclpWZjVqazFWb3JxaTM5c2JDSXBMYThZV3N3eDRUQ0c2V0R3V3ViX0pVWGxiNTNoUlZKTnJRREJiS0FTVXFmOTFmaGVZQzhuSHdNQjNUU3J5T3JBUDdIZVZMZFhCakgwdVNIQzRNWGNKQVFjOThMa0xaLTNvbEtORTBrb0Y3M3h2Q3VFTlNmVUtKV0YwVEQ4TFVqN1VGUnNONExyN2EySmFPZm5hWE1MWG9xTWcySlpVNWpjbl9KQ0VqUXoxNFNlZWd6cEQ2ZUQyZmI4M0U2QVBybS1yR1ZKaEJpaV9YdWstRlhRQ1A5WGhNTzVxSmhlcktXdVk1UTJrdHNXdlNBZHo3R3VmNnl3LUNiZWZERHc3ZlBJQUlZamxISGtnZmpzQ25ZTDBCalNOdmVvbUxCMnhkYnpqbWdYc2tfOGJERXk2alVPNVhMU1ZUMnRpNmtaMWk0amJ4STljUmNzVUJxdzh3VXlJRnNaRE5hcGR1ZVRrbmhQZnRWU1NGLVhlMTBjZnYyOHl5MDFPMjFET2xvM2RiRXdLQzNWWFV1RWpRaGRuWjRQSWdiY0RrUmwwcUtPOXFtVXVlN1puS204MTRra01sNTk4R2hQNGtpNEZQYUgzek5oV1JVaFBYaDRtUFdRYnlFWFhjNnNrdlFnMDE3MVRGT2dWTmhfbTFPdy1pN3JYU29kUTVpLVlnSU82bzN6Q2FtQ18yV0s4YmZmSDZKUHhhLTN6MVp2aHktUlFLa1NxamVOQU9QVnFBMUJweHRVUHRrMG80ejNUTlpRUVJJLTFXUlV4UUxwTjl6TGtrU1VqbE5oam1BVmtnVmtiRFJYSldyN1RaeU83RFJSX1FsNkhjVnU3NUltay1fZHRzZE9MYXRpVE9mNDVndTBWUmc5S1FFeTlzR1d1S2J2ZmIyNVB2bHJxSWYtYmhZTUltY1NaNmVqdmRaUkVENlQ3SGpXRHlRMlBpSVhLQzZKN1VZN0NVeFY3OVpFdXE1OHVSNWt6aUlWMVNyTEJlN3dMYjZybU1RTlZYclBSNVhXNnEycklia01zVkNSUUVYNTZwSGpSSjE1YUhXOUtZWXkxcXBlN2FpMS1lNkVLUzFfVHVJblVMVDVzd1BTSEt2cFJzQ0Y1Wkl3RHJiZkVMNnRWYXhJSTNtc2lhcEdHTDFYdi0wQ3FWUTZ0bENXd0VtNUNKTGJyamZhQ1B2WTR6ejl3SUJoRmJSN21NN2xCTmZHMm9VSXBmY0I1eGFvdlNycU53Mjd2OFBmXzM5Skh5SW1uejVDQ2QydmhLYVYycFJSN0FkZWVaZ09GZHFpcTQwYzN2VGJKMEpURkVkTTRVVktucGFLWnFMM2pTaHBybF9CT3oyZjFzS2lvb3dsaTR0MlVJSHhURWR5b24xRTlDNDNzOHFtb04talFWSy0zQWxaVUVzWjJVOGdpNGktVUFKSG0xMGRvMTd3RV9jTllWMlo2T0tKNzJkSzlleHhPRzdyUzRlZVRtWm1vd0dCeXV1c1lUUE9lVkg5OUlwUl8wTE5NQ3BxajhUUzB3T3MzU3dKRnhDZVk2Q0RldmdJcDYyTXR2SG9oZm1wYk5jYWxlbE4zcGhlZS1ldXliSnlVcnM5dC1EVFBJRUFzNmlyMktxWThvenA4TDF6X3VuczlUdGZ6U0twb2RjUHhKZHlxM0lvTld1bVBkWWU5cHhLNXE5ejBSVXlWMm5mN2h6NDhkMjZTLXlRVXhIR2tMWFJSVnpOZkpDVUZTTkFmOHRPeVJCT2pwZ1hfWURJTkxXT0NrSzh0RE5ld3VBVlFfSDlka2dnSUdadW9lR2NhYi1hTmI1anBraG9XU3Z5N0Z4aHBSOXMzbDQzV29aMW5LVmRKNmV4ZHVZWUw0dy00T1I0Wm5DNE1CUDM2S3dqOVgwazJEeW91ZjU4eGIzNGVka2txSVdvNzVTaTktOUs5MHUwVUhVTm5Uc1RIRlNSSXlJbEdqXzdhSjRUVTc2WGc0aGRpT1Rlck84emoyajB6cXBpVUFxeUprVllJa2NvN3M5M285QTI4MWhTY2ZidzBiN0RYRF9HeV9GSVp4NldxUWhfR1ZsQUtZandRU19fU18xSllOZ3V0YWh2NV9fSEJOM2NvR2RERTVxRmNwZThwekxmVXNrT0tDYlZUeHR1NDNOdVU2N19rVWVuNUZKcnc4NnoydXItVGo1aktIRm5LNUxZYnBHQlRyYnNJZFBqY3I4ZmFrOHJucFF1Tk1qUWFHdFRVdXY4Q3lrbGxQc1hEX3ZMSTV1Szc2SXlRVFdUS2p4X1Nqa3pfVk55R0lRUGl0VkFJZ3E0NzFDTGl1OTM0b05DbVk5a25WYk9RMlI2SncwV18zWHJ4OGhvRnFzdGZOU3BpSGRBRktUVFNIOUUzZEdGMGJSVTFLR284ZVR1S2xpMFVjaDZiZTZ3bk85UjdrX201YzhzRDlqaEpnRmZNMmhkaTFxaGtXYjBZRnBiU2NBVkZEOUZxcTdEazFhdGxOVVdkcFdnZTduWEllemZFRmtuS2dOcU9ERkN1dFhPaHBOTE85a0pIQndTWUl2aXB1b2tFWDBvdVV4TzVrU19Ta0ZldUxOdHg1a185ejE1QlpWcjJzc3ExRFNLQ2hfNzNENzh5ZmJzQ001TWJ2SEkyeElwLVo3enJIMTJsZVNGa1A4cEhzOWNzN2pkdWxWQkM0V1N5VVFLbGJhLXJ1czdQQTFXQWtQNm5XLTZUNmtIUU5waXJnU3N4aXQzcV9FdnFCV1Z6bU9laHZ4Ykt3c1B3bDRWeWk5UjhjNU40ZnphaW9JY19WZk9ubGRvNFNPWG9yM2M1QzlTdWxtbEcyNnltVWZTWm52RVc3eDM3WW9TZFpoYjFtYmVnWVB6R1FKaFNmYjFNOEtfaWk2d0FFZG16blZoak1od19JazZETVdQZEhXblk3cHViblNIQjBkbEdyWUJGMHdFV2xqVlYxVVRMVC1yeE9TRVV5c3h0N0pMbFE4UEtsaVZ3eHBQOVlXM0tFQ0lwaWxwMVRiRE9KX19nWU9IdExQR2Jvckg3OXJfYUNWTDZ6OWVpbmZtcExTdWhtaTBZa1pKVU1vMXlHVjJqQmk2R1FHeWZ3Mk43eG12cDNnN1hiY2Z2Tkx6dWFFdW9DZC15MnNDMlpyM0lESlNsb2k4RmZ2Y3hwUWt3WHhaSVE1TDh2QllOcmVUOVNBZ0ZxM1hDQkg5czNUVlh1OTdYYnpvdy0zSTg4em1aOWN5THNHWTZtQWxCbkc5dnpyaG1MTjE2eFNTamdWdjFLbDF0S2FWMmxyZW5EaWxOLXZvSjU2cmFzUXkweUxoeHpVam53bjdKR3ljUk9mVmREY29fOHBmcXVNbVlLUy1iYkZpcWJPMTFrR2tHaFZjc3JlWmJ6QXFSTEYzeGJwYVdTTXZMcjdSYkF4SDhURWgtY3UwSkdPUzJ0cFV6MDFkenlMbTU3NXNpd19UQWdwaW9tSlgtaUpsSHVudGRfNzRxOU43WG9ELVVtUmIxbURQODZMN3BEbDNQODB5S3M1MHd5WW9RamJNU1YzaGtna3RRZDVLOWNZeEtWRDBvLTh6d3Q4VmJUTnRzQmZFSElZUk9DRlMtelppNjgzRXBUSmVLSGltRkVwXzczTnFuUEJJWWhDU0wyTWN6aFMtRHVPVTRmNWI5UGZtMnZhc25NcDF0ZDBTMkJIY0dhTlQwMUI5MVFQZXhoeGlfVmpnbUdNSGY0c0pMQUJZQ1hlNENQN1NrY0pKVTFYb0h3TEtaOGtCNlZSMTkzNjRPSGVia0NOZHlhUHZYdG5QRDF2cXlSWjlaOWdwVmFqdWRScnNHRTlwZGh6X3JBZGRmYXhUR0lmcFNfYmdZNHNZdC1KME1TZy1QZFYyRHVmTjVEYUc4T3M5ODVoNUtOd1lmX1l2TVNvZGFtR1VDc1J5bE01MUxTSEZvdy10dG0zTHRfcjRqS09JeVVFVXRKRVNBV093NUVBTnFpamhDV2k0aTFLSnZoeVJJNjZvVEtuU1A1OUNENnZLdDBtSmRpR1NuQmdWU0szQW9XT3lROGVmLTN6MGlEMGNpWlVRX0FIalRXZlJVX05XcE01YmlaSWxJZ2s0Y2NpWm1yOEhONDk4aFMta0E5UW9hR1NFTUFpdmNmU2V0eGV5ekVQN0J3bC1GYnRvY3M5dHR4WGREMXNLMDNNVmU1T0JGdXMzdGJNbnNsZU05R2JaM0ZYTUtaakllX3hEV3dvMW53eGw0ODNrNUg1V01SVWRYYW9MREJUOWFHdFJybWNsYUFuYi1oVHJhQjBacm9sVlF3ZEE2bnBQNElhWWVzN25Jb3VTSWRYOWd1TWtoRjFUR3o4NXNUX0dtcTByNDZBZEdHdGZ2dkhsQk1tTWxYNTVOYUQ4dWQ2UEZ4dUNNOUtfOHlOUHFHRkxsRTJ1ZWFVYWp2Q2l3cXUwU3RwQnltMFVEV193bklhUU5VRnVJRE11ZDVabnhPNGNPbk51bEZiLTJxeUVJa3B5clZSTUhNczVMUFQ0MkJXYzllTGRmRHZLOFdjVWRxNC1LNlFvTkhyOE16MVNSSTdEalFyeF8tRV8zX2w5cHlnWG9oOERvbVU5TXdKdnJ3cGNBWi1SVjU2dFg1RXNvcFVHUTNNVXlUMC1iNE54WmswamxBc0JOdEdhS0JFWDQ4QkR2aGI2ZzYwN2xmYVBndk1VSlpOOG03b3ZWdmwtWldTbXlYNWpfSFB2LTN1cnQ3Zk1YNkRoUmRHaW4yQmtFVldFcnVQNTlDTVBnZEZqWFdnblF1dTItbnV5SlpYd3BZYXB1c1JQSTR1NU92ZHVFdWFkbWRnRmJub3hXdjBrUXdzRnVDOFlyZG44dldfVlNpcXh2NEhsLVZidkV5YVhOMjZoNmJtVGlEZDlKbGdZa2RzVTc0UlpORldPWWNOR2pyUmd2OHlYcWdMekZiMzFqSnZ5YXpXTkN3VkJ3N1ZBcVB2WEtlN09TYnFyTVp0R1hrSUZIZlhnMnA0MndfUnBuMVBGZ0JnYmFGS3lIZms3M054NUplVHIxaWJKZ0kwSHg0Mkt3MFVtWGpRLXBDTHVKcDJjcGI0NHpDZ21SVlRnOFIzYkhIVzIyazMwRllSektOMDhJNldtYmxNdjlGby1mRUJITFJmb01HbkJlU1lzWXFpbF93MXV0VldqRGt0THFjd0x1c2RUNkhCRVVXM09tcFVEeVdpUmU5VHc3c1NkUnJrdTZYY2M4MWFPVmRCaHNWOS1GYk1Uay1GVmxKck5VRkVRb2JCTEFJXzd0LTBGajhuQnktT01KaHRSWk9keFhkYUpGSHhCWGFaWjdub19VbUJobjhaQWVtYW04TFFaT21TX20zejloVm9sTV9UVkY1bDY5NmhNVXc4WTNOeWdZNkFZLWhvWnR4YWxOT1g2bzY4R1pZZzQzN0ttTW83NWY4bFU3RWY0aUlDVDcxeFdsZ0VaUTRGeHFjYjE3blJVUDMzLWJKNFVwaElfMVhiN3Vmc1Yxb3otYXIyR3FfQWVCSXQ0a1hRZElJNGNieTlYczRmUWNtVTgtanI1bFY1UWdWUEVfTENFRWhZa25JVHhhbnBiUXpOcjNMcE1MeXlfSzFUT0hBR3VRMkVUdFp3cm9FSVREWmVpWC1mM0VPemNxU3ZYcllQdkVsUDM0NzBnTXpSSERSd2pVNmo2MTN1WWM0eVlLS0EwOWVCdDU5RGRHdzFtbEFEdDc5a0pwZjB0NWpxR0paZDhZVGUzcjJSM2d3MEp6ZXFOOHczRUloVFJwVEU4Zm00X2w2dm14OWtLNVI4VjBMeV9NLWN2VnhCeHExN1p1QXJhSm1qd2NNZlNodzl6SXdkZ1FSSVNiWUhIc20xSmlpeW1tS2xQTGh3T2NYWWp3Y0VZbTlQdWJScG5lSUV6bTQtSjVnSHBGdG1BVERzbTl1U2JNTDY1SEdiZ01BYWxfTXJtQzAxdFd5X0dRSjhqRko4dW9vVnNXemg0dGVnanItcXVUNE02M19xWnppSHExQkVmdlR4U3NGVmRmRE4wM3B6ZDhkZUtzU3Q4WU13ZGQ5eGdoU2pCLS1DZG1kelN6eE9iWmlpOXFIREJsZ1pPQnp3LURBT29vanNaQV9SaFY5ZkRqMjczeVdfbHpyeV9rTU5LdmhiMndPdUNCVi1WX2VfdzBXSFJtQS0tSE93UnVKemNjenh4YTFXaHdjc2R6UGtoYnRTY0FIeElrY0VuUmluT3VEQzZEU085YW42bzlmNVFwVmZnZmtEa0ZQZktkZWsxbm1KSGNqbDRHbkdqbHFrNEhYUFYyRkZic25FWGR2cGExVWMwdXRGTHhwUEhvczFKYWVWYTNXWi1GazNxUnlRTEN2Snl2MzVGUU10OWJVend6ZG5hR0o2TlN2cFNzUThzODFRZ2RqQWlFdXZScHpnTXJEazAzOFRhUWxtRmFPZmd3RndSSUgwcWV1c2JZT3F0ZEhmVXdFTms3eGUyRDJNRkt3c3lVX3lKN2tTTzFTOTBIZ185bnd2czl4VGdUQy1yOGJ1MFBtTmN4SGlfcXRvMngxSWliSkRPckNBbS1QWEgtQ3MyN01XeVVXWFpLNE1sdE11cW82SUQyTzg1WDh5enRheDBnTnlaZUg0TDBlelFfdDljb0JqeWp4U3hIRHpuZEJ4RmhKaEFzSTQ2elBXeE55TUJ4cHZsd0VxNFU4R0YxaU44NHJMRTlqdm5uVWtRZklCMzlWNzlfNXEtR0Q1Q3JlRzl3bjRfR2dPZENkdEVRMlI1Mm13TkZwbVN3WmlFVVZHZkRuTkdSN3hKWjU0RjAxMkQ2bWZEVGRwb1k4OV9ILUsydGR4VlB1cU9XU2FiN0wtY0RBcW9mSHFoRDBjYS1DNnZ0RXZTOE1nNzdNZnB1TkItU0g1WVhVajlyTF9YNVBxWjlEeHVXMkxfclVKS2tsaVJfWXgtU2h4SnMtYVU0OExMRkFrdTBWSUM3cTVieHVWNktKNG1lMWs5TTBBeV9QYzRRWWtZb29kbVVCdjRJTXZxTjF6dU9mdnd6OFpidjNnWDVraFhqaW9aSThYOHhLaWVOajZSWFAwQ2g4SVFwSl9sTVZkUFNOcGlPUHFjY1c0VExocEdiU2tXd055Mk5scDllNlptZ2w2eWQ2cnpfaEpJWFFBX0IzQjMzclVOMjN4TXhlRURRbm5sQkc4anNwcUhwNnctNHhOdFVPaEw4NTZZM282YmNENUw2T1hNS2ZrTmlFOFdLN3FwUFF3RC1tWkpNc0RsZzlYSkFFekZIWHFyZEM1YUhvVTFMQWdXMzJzMGJGVEROclJnRnVjWmFseW5HZzhCRmIyOFgzN2NwM2taRXFZVzhJSExiaXNVXzF6eEJQaHdTd3hjRzNmTlVIb0czZ3VEbENsU29sQ0FBenJHajBuZmRpYlJ4c2s0OUpkNlVPVUR3MFZtUE5sSktSTWM4dXNSZ1dZOFRaOXZOUVZzakU4M3BpejFvM1NoVktSWWxhRDRCc1doaXJ2N2lyaG45RzJpdzExd2ZiYWNMXzVibGZ6Tk1BVEJqRnA3VHg5dlViOW1rQ0ZHM051UnZrVHpCYUVCRGdtcnBuN1ptbm5kUTRTakxBTjJkWDJHWUU2UkFqYlU2cVo0dkxmN2phYWtJbmpVV0pUOERKUEJzWEFCcDgzWmh2ZUtSdk1rdmV5UnJ6VlBhZ2dSZDQ1V1VCUmk5RUxOMjVTM3p6OTdGRV84c1VsUGt4VlFTWWVzNGd3eFM3cVY4anBROTFGV3o2X29kdXc0b1FtTWhTb0RyczAtOVQwc1NnLXd0SlVVWEJiV3gteE92NmpxX2ZZTzhjZW1uYlFpcWZSRUw5blQ5XzIyTUFySkxSaUU1bmhmSmNFcVk2ck81SWFfN3pPNXBmb0hNSGczQW5wV2c4QW1WR2JtZndTcVJKT2RBUlhYWEpXMnFNX0p6RE5DUzNTcFBJSU1QRHdHX1FkVldnWWpKY192ZlNCRGRrYTFQNTFJQmN5ek1lSlluMEhoTFVIVGpnc05GS2lXemVsaVZSeGVLVU1wcktnQmRIVnc4a2FHYkVlNlBKUmhvNTNobUY5VWtORnN3TjctQUZHZ0xuWldtRGRMQ0cxczRDVVNsdU9CZW14WUxMdXpwTjQ1VHFGNEJReGlwTHNnWlRqQllQdWlGVFVpb0tmVUN0LWdWbkpsWFdfTzVCbUlCRmFzRXVrZU9zRjlobm90UC0xQnlJNEpBbmZiSnNncGZiNVRKcW0tLVhpd0ptTU5ZRWdqY2RrZmdQSzhPLUdXZjdQams1TkkweVVLSmlEMjYtM21tYm5zdkRmN2J6YVMxLUFISzJtQTZ6WXM0SkF5SFdyVkxiWGw2R2gzeHlkSzhOeWNrNTV6dnFXWjZqVXJWVVhyWkhCOVlzYndIOWt4UGJLQkRNaS1wR0lkOHZaVzhCV2VkU29MZjZOY21pbVFjQ1B3YTFFS2RpaGVpaUUyWG9RdzUzV1V4ZExIM2xLMEk5QmV0T1BDTnhDSGFnbE1ORUczY2xVOHhJMi1YdTRxMjZkanJFM19CWkMwaHRTTU1GY2hOQnNFZ3JzOGlVdnJDR01xYjRjMGdMMHBBRko4REdFNDl3N2NaWG1wN0dORUFrU3cwemctQm1kVDU0Ymxtb1ZyUGt5T09WMHdSRWM1YU9iaWNOTmU3SFc3VC04LXJZQzdpSFZpWEpibklabGFrUERxN3owNVJCaWhrcGNaVzlOZy1pTU5qWVF6Q0VUQ3dyaDVYdnJUdE8tR1Nka1ptMmo0WTN1X193V003Mk1SU0k5dkF5YmNIT281V1cwZ0Z2TEpuUVl4a3NVMlhCUEJKR2FlbXZMMnZRLThtSWxzMEpZSnJHWXVKWnJPbC0xNF9GQnlqcElwbnp6dVg4VjJXQUltYXhCMVQ5WWwzZWtKSEdMOFc2bXVWVUtZOGt2d2FkUnY1TXlpQi1NYlFiMW41eEZvek82Sjh0RVJGTU1qaWFGNzBBd1NiX2k1WXFBYnV5clMyZVc5RVZnX0hYU0VQTm9OSXJCU0dXbk5hTHNyeXVBUERlUnVGUGRUSGNaaVhZaG5GWFZDSlhZZmpqYVNXM3haN01PcGJBLTFtenFSaWg1elYydTZIN3VEb1JQeEpWbDVudUtRbXg3R3lLSmFrclNIRUw5QXMzLTVfTHhVT3R0Y3RSd0pzM2RBZmhjYU9VN3Y1MFMwcWZ1Um1WMzRzcURXUGxzakwzVlU0NXVZX1FFVElsWV90RHJCZklyRnZIaVJsZFJ1cnY3ZlZvLVkxUGRSSk80LUk1c2dSU3d4MGk0bHo1aW9xSm1QeEhpaExBWGZvS25pQVc3X1VvRGI2RWVITTRaRUJxSk45a2I5RUFFeVhQR3dPVGNEQkVzRFFrM3lCbnZVdy13Qy10T1dLY2xLVWJ4cGhFQURoQUxQdkFURENWWmVlakQ1aGZmYTdObDVhUWthekctQUVXVVFuV19QRWhjaDl1ZGtONXNpcERxcjlFUWlETE13bjFkVWNmYTFqenlLaDBXd0JidGNHY2RVcFp0TVRnVXdhTzRPZ1BkWTVyS2VfVUhsYTV4N2Q5VlFuTXpPUFBfOFlMQUY5SEN5TU5CUC1VeDNiMGhhSXJ4MnZOMTBkZ0FSYWtCMDJlaG9QcmhfamxBQkYwcllBS2pnTGtGcTh5cUhaWjhOT1lQcnoxbzhZQ3djaTA1MnBvcXBPVHk5Vm5ma2Q5Rm1FSXVlVUFoRlFCN0VHNk9SWkJNZ3JIQlhHVXVRRmo0OTh0UE9qSFZVWUotTXU2SHB2MnR2QXFhQ3NSeVBLM0R6TnlWX0RuOTZEWGZrbElMLU1MN3JZVWViS01DSnVMZ0J3RzFrQko3QlhnQXVpdkNfNDkzWExCLU53QTNlVmZkbGFQZGRjU2MwUUppMmVVYlBaZzdQSGVpbDNVQ2hOQk9ETGhyV3JtWFRZSHZ0QjBKaVZVMGFabFhRRjdZMzEzOXY1bmJfRDY1aC1vNGZENlZZZFBwamNKcEJrbnFqT1NyLW9wWW5FRG1NcXBDVjhwZkwzQWpqMFRvZk1icjdFbUExUGlqV0tTdDh1X1RMRGo1WDQ3WVJfeU9LdTVLbEhMOUpGenM0SVF1RGJ3MWVSRVplZzVMM2g0X1BDOHQyeU5kVVFmbk1hODJKSGY4UkQ2eVc0aG1EeF9NaVFNdW1faE90VHMtbE1aeFI3a0c4WU5VcEVKeXR1eDRTN21HMXRuZWdzNllwblFkZ05fbDQtaXNUZl80TDNsc3gwSXJ5RnNWTWdMY3ZhWlgwLWtJM19ZVE9Ua1JNMkMySC1BRWdRMk1zYU1TNzNoTmc2QTRySW9BQnhnbVhFV1kwVC1GWDhjQ0JnMXFIU3pnQnBTQ2VDMlMtZlA2M1B4OTE4MV9ydGRKWURpdHpNZy10V0FJYjJ6alRjNTBxUzFNdThlQ0JpdGxWVHIyY3dPZ0xWN3VpWGU4cWNpMVktcDNWWXZqRWFiN053WjhNVWpOcWs0ajRjbE12dWxBSWRXSUhESm13OHBSYUVZTzFHZV8tREhLazNYUzhvNC1kT3d3SXEtZFduaWNKVzFtRVpaVzJ3ZUcwMkNZNFFrZ1JPcmk3eGFZUWcwbVBER3o0MC1PNkV2ZUc1M3JQT2VrRFo3SERGMTE1X052bmVWc3FtOGxGZnVVdmg2c1dNbDNWWWFXaVpVWS03cUFVZUZYbDhCNUNDWFU2WTdLT1RwVFNUV3l4WW5xT0pGM2VIWGJlcldiS0V1SlhPZG5QVm50VTR3Qkk0RFc4SlR6OUViOFdxTXVheVNmMzRkbXFXekxSN2I0cy1TVE5acmZNYlVuZXFfNmFydFZEUVU3QnJaRjNqNzMxTWgwbk9Qa2pPcVo5cjlYeEVtTWhESlNiNGJ0M2ZYZE9YMkNyTWdRVVRnUzBLUmtHQ1N4Z1lpb0F6WDFyQS1ta2dZT2lDSnhLYnVaX284Q1MwU0I5dUM0Z00zbmE4SS1wVlg4bVQwRk05X3RuTmFINXhoOGM4cnQ2OVpvai1RY09nTXp5b1BURWc2c0JUZEJldWFrdEZqQW5MOVlYYXNFTDYtNHBQSmdob0FPV2xrTzVIS0hmclZBV25NSzRsaUJKN1ZpLVdtMXdrUTJFZmMtNnZ1OU1pR3V0ejZMNjdpUWpqUUVBeUNJd2ZDaXJjN2pYRDNsRFlsUmdvOXJsNlhfTWVyVVN2TkQtc0ZUc1JXRGtkUUtxX3RZUl9BRVdnelBlLVM4U3Z6VjFWYlZ3ZVQ5Mnhoak5GVjBrUDM1SkxJelZONVVBUlVaSHhmenl1dzFNdzk1dzZOMmVkcUV5Nzl2ZlVOS1ExemVUUk11YmZVbFZleGVsZWhJanlVaVdYNHJ5MHlsdERzdGNtVkJkVklKVHZqRFBqbk12ZWN4MHg3TEFIel90LS0zbjZWUmxyb0FCeU5zVThibGU5ZkVyX3NCVUljVjZwanZvMkFaZThZTWN4UzhfNlN1Qk9SS1RnZmR0ck9HWjBOQ0pYcXhpdW5EdnJ2eU1SM0YweG1DemlHWS04Vk9qNmE4VWVvcTNmZEtNbFloU2ExaUI4UWJ2d0xpMmFKdVlibUREaFYwN3ZGODcxVjBRTUJQWmw1Z3lFRExBNzVFY3FobnhNblA2ZFpmN2ZpM3pNSzlZZjBzMlRSYldEZFgzZHc0Zm1rLXNNdFAzaHFfcXFudjVLdFBVNDlyLWVWUFR5MVBxeS1iOTFOV1Ywc09FNzQyMEFvUmFvOTF5MV9CSkctVlRudzBqcXVhel9DZ0NHeER4MVlOdEJ1cEtYNVFnZGZfSFdTbDhEbENSWEhtRGZYeE4xV18xR3l6ZXo1VGxXM3pXLVlGSE1TRDMtY2haWndWcVdKdkF0WmJkLS1fSDhlcHNtUnp4dnRmZEdLejJrLWpWSXhfRmpkUVpYZFNNZURfcXFuZVZON2xSaUFERzA5V19DSE5qRF9yTHBuMkJmeDYzM0U2TThUTF9ZVFdjNU5FcUJwM1BHc3RkOEZWaGxqYThkM1Rob254dzJDVWs3SW01RlJfSW4zMWlqN3hoTE55UEJlWVZrbV95WlZDZlB3eXVlRUd4ZXRuRVFmdDFQQUVUbVVud0xlSF9KMDYyZ2t1ZGZYT19zZTJjU2RaWVNNRkRWNWw2ZjVxSEI3YjU1MWdrRkhFdE5ScHBkTVlldXprb2l0eHgzd0Q1VzBkY3dyX2g2amFpU0swb2hZNHhhLUV1c2ZGekRkMkNISnY0cS1WSkdGdmw2WlMwQk1iWC1qbjJ0LVRrS1d4dWk2TldOUlVjS2VrR0xZcTRSNVhEd2pra3FlMHJnd05MS1pDS3JjVXJReWVsZ2E0SHR2OTRTRjBhMXA2LUFUVlBjbU9PMFVleFhBdGxhWTZLWkw3OTYxYnN2U1NBaXVEZ2EyY3VqcG14VW1WYUxFUjAyUXE1b21ycmNVWDBpUF9HZkMwYmFzX0Izbmp4d2NYMS13TG1vckwzd1VqcVlHejVPdmt2RHpLRzY1Q0VMdUpEVWY2ZHYtWm45MjVJR1Q4UEZPNVJUanlkclRmdkpjQ200LVNMaHpJeTktaVZGOWFfN1BzdXBiQ2tob09iVFBiam5kRHpvYXRQWGxBS2JlYUNNNTJhYW50Q3F5b29pSUNZUTNZT2dVZVYyVC0xZmptLXVxU1hHb1hPWUIza2xPcS02TFdORTBkN0NSMTB5ZVYzMi10MDFSTlVpNDJoekdqNXJsQWZFb0NKS1B6RlRUYjZyTmlHbmhENzgzS3BKZG5yZDdNRjFmajZRZjUxU1NPdU1RcnFHeWk5dTA0eHZzMV9kWlctcUlnX0o4c2JPcDFsby0za2YxTndWSlRlVnNQcS1DeTZzUDVaeXAzWFUxWmNHUWJncVhRX29mZnlCZVcyaUgwNEZHTVVPaXNfQnU3M3NDRnpsUFoxcGFrVXF2SmJvNUE0amZXV1dSa0paUmFjS3pTeXBnTWMtODZvS0NXajdSbHJHT2c4SHlyRkJkSVdNSmVsNzE2ajJqeVJZY2Q2WU1uejd0YVc3UHNRUWt6X25Ed2dzX2pweFA3MUdzU3VwTmpzaDY5M0pHRlUxWmpqRmJtbW9Mbmh2QnFJY0FPVVpUQlBWSkhoVG95Q3NWLTNXTkFob2NIck5Vejl2b1lpWVR6MGtOT3M1ZU1uN1FCX2xjbGtKZHdHSGxLa3NjaUtxWjR2WTNlbld4RDNmcmhzcU1vbXVJWlE3aHJIaGJMZGVrdGhXMFJyM05KYklGZWhONDQ3SzFhUmJESzhQaF82Nnl6aWlSZ2RqOHJERzhtVnFGb09yTXRORXdxaXp3S283OUhfX0kzTlZUVUs1djduWU56Z3hsRXNRbmxPUDJhQ1hGSzVXb09qUlRPdjRMamNEQ1ZybG55S1BmWUlIcmhsSVNxMERzZmgzZktOdTJ3ODU5Zi0wZTBiQWxSRWtCbWFJSEJybnFHUDVTWlBZXzRIWUVOVnZEQjAzT2JhUTlfb2MyNlJLOEFNdGpGbDNGLWZTZHJaSVJ2NVRqenhYa05oN1JfYnYtMXIwR2NGakFYWFVVWGdVNllzbERnS1BXakc4b3pILTBVaVZKSlNBSlFPbmdYLUNmYkdmVFRsXzJlMW82Zk9Ua05tWU1WMU5DOG81dktfaDAtZTVNTE81Z0JBcVo0QnJzaVJ1RVpVRUVyQTdLa3VoaEdqaHBsYWZSaWFCeE93b2VOdWxYTC1mU1ZYTGFxTkdzRlZCbG04ZnlWM1hwQmUzYkNveHg3NVhPSXdVNnl2U1lRUnBTTTVEQ01KMGdYQmhyYzUyZS1fMi1oWUxQZTZaank4VGloUjlubFlhQnYxbjVUcnFqakVGdVpkZ2pZMmRvZGwzQXA4M2VRUnVjcUlfU1VycnlZTnNTSW9KMG9nRFlDRFNwZUhTd1EyY1R5WkNTWUo0TGdGN19KTVozSzZGRlZMSXVaU2NiMUFFNUlNVE9FbUdvUGM1RGZwOE56ZV9ZWjhqSk9DcjA2amJjLVdidjVLRUxIYzJtQ09BTWVjRFY0UVRzc1JBSGdpMDNleUJVdUFLeXlxWmZ4WlB3MFotYjRKT2NKcW52MV95aXdZUkJwLVZ1LWR4Q3RXN2tPaVI5Zm1wWGxmSXNRVjNGVGpaMlJrM2NTMUtzLXJGY3B4V3ZiSlB3cUdlMWM2UkwtR2draVU0UVdtTmpJUmFyQlNFZTBUTldqdTRTa3NiV1AzNy1UUHFwalNRdjAxQ2lqRFh6NHFXMUl1TFBYRlNoczVtYzg0ZzJCSzlMS1h2MWJBaUdSWnBzUWo0VGdLQVRQWEYtSkd5STdUejlKdXBnWEhqTDljRmF2SE1PN0NOXzQzSDVFMUFRTUxBdlI5VGNaZHM1Uy1ZSGZkYXJ5cE5OazV5NDZRcEdsVkZNeHBTeVNzV25QTFNsQU9nM0RSdEN0SHlSQllocGNVUEQ1ZXhTWFRhTkNDemplZlpyYmdOY1lTWk04UFRZeUNrTElOSnBIQWpzRW13d0k3SEJuczRTQkJmajlOb2lyVXZWcDl0dXhjUk9VT25KR3pzaEtyYnVlb1hiWG1rcTRNbmlFY2FqcndHWWpYcXBtdW04UndkY0R1Uk9HdHFlcG9xbHpQY2l4ZnlsQnJDSG9IdFVUSWpmQy1tWGk3WVpXOUNtSllnLTlqZlViUEVMOUpIcVhVTV9VTTVKVHRqb0Z2dlBZRWhnYjdYN3FLQVYxTHlDdWkwTTgxcFdmZnQ0OEMySjNnMW9qLWZpZU51VDJMQ1hQcFRSM2ZYRlVhRFlEMWJZZFNWNVQxbkQxb3ZPdGlBQUFWb2h6NGYwX1hUZ0V1Q3djRWxIYzZYek11aU95djFEeDdySXNuVHJobHBFRl90U0xuU2hSRHhOT3V2TEJnTEt4c0dPM2diZTZIM0IxMmF1enlZaUxVTkFYbV9ZN1UyRFVuTGZYMW9hVHRQMHNpanFwZHVzamNSbE5jdGx5SVN0TWhSUUxqQWdWUVFMaUc5RWhrMlR4dnpGNXBPY1RiNnIwYVQ0U3E3bjFqSkZ5TGgwb0dMMUFVcFdnTTBXRnVjNmJUY2NMRjhzUHJ0dml2MDZuc3pCZ1ZsTEhZdDYzWlR6eHBrYy1UTF8takt0V1FVMV9JdlBGcHFkVTM0bnNqUTBYNWJIVEx6UWpDUzFhcHVaYUZzSm52bDdOSXhLdVdZVjhxQ0NPc2NELTl3MmF1RC1jTi11dEo1a2xGRVlSWFZfNVdnVGdDMEVXTmpHNXJKVkxQdE53SjF2RzR3NUlEcC1pSklrdzRyQUhsUmZsU3dpTWdYOFJSMzgzMTQxRl9rVFRXSzl6MzhrV2stcThWTGVtUUJtX2l4UjR4S3hJeVZyT3dsbU8zc3RiQThmVUJ3a0JrU2JEOXp4a19FUWRsX3duSmZQbWxtQ0x1TDdFT2NFY0M3MElxbl9UcGNMc1hKZlJhMDVSenlBQjgwLUxuM3VvdVhlTkJHQW9GaVc0UmxPNGtPa3lpOWhrS3BXN29LNk9mV3Vzc1pzQkxxdFJhWmx4WV9aWFgzbXdleWJpRXZ3QWQ5TFo0UzlTMXp4NU9LaGd5NXdpNThiSUt1dlNmejltSTNGc3hfcm5rOFZVelpZQlBpbUx3WDA5ZnZ3QnB5d05qaWFCc21ETzh4TWprRFpDZF9HdGZIZ0tjaGdaYzNGR1RSWTFOeUFsbkRGZDZaQWNhRWFQUFhmdEUxVktkMzIzMEQ4aDVNdEFxZTlZUHlaZHRPYjZKYS11SGhwT1hNVmRoa1FGck42Z0ZDSDVLUzF3clpOQXFvWTBVX3RBOXRPN0FsQWh2SUx3dDFDcWZGdDhhVVVLUGtwd0ZiM05mTkRDRGFrQnlPYW9rNGZ1ZmJpWFgwWkpWV21xTWlIcHlpNWwzYjV0bnNPLU1YSUZTZjNIWGlwMzMtdnJpX3I3T095TmF4NzdpMklmQVdMd1A3YkVRUDNpaTA3VnBlLVhaSXY5dS02aXE5Q3NaUlF5RTBqYnNuWmZzMHNrTXhENnRxeEx6bFBHVEcxRGtqNGp0VkhiTmdqc2hPNVlWT3I3WFU5Y20yWHF5V0FGLTNDR1pVSTVSZW5wT0Z3Ry1OVU9yeV9TM3pyTGxDWFhEMDh5bFgycUZOeF9EY0xpMmFvM1hTaVJSMHZtTnhMOGV0Y1dBaHR1WnRoNXliaDRUTVBJWDhOcHpsVzk5aXBmb01xUGxkOFVsWGZ0MzI4Y0lUQnJ6LXBJLWhQSjVwN05VNklSZzM1LU5BRE9BdnFNcnp0b1BvZ0FJMVVyenEyMFd5dE9QWkhSeFVlV1VmTU4zQUFGa0VJQkRoT0dOWkZPdS1vejR2TWxrZG1QTVJGT3VBdWl5cVN4aE9RY1lEQUh4dWo1NlhXV0FGcEJNTDRaU0NrV2dZWDhNY2thVDZNSFJvRVc3eUc5R0h6Y0tsY0I3cjNNSkpXRWtNZ3p5dG9zZ3JkNkNhUWNoa2dyV2pXRHNYcmhoc3M4QzZaZVJzMXdWazRWd2ExeEQ4dHZvVXVXaHJHUmRoUm9RZ1diX0dWcEJ5TzBjek5fWHNDTDdhMFgtOWVZenRlUHo3SmdfSmxDb0lWeFVYRS1fYVRGZHVEZGdLTi1oQldjVS00dVFmYWFBNUpPQ0pweFVLakN6Z0tRUTFQWWhJQUM0NThqajhFQmx3UzdNeXZlM3dvcVBpVDNNVWQwNWtxeERRa2tVdV9rZ2oxUmFxZ05HQ1NOWk5Ea1VrRGppMWFfbmxrSUZaNm1VZG1RMms5cV9RVTE5S0cxd1pOdFpnTTlwaERmZ1haTndKZzJfVDdLc0NLVVF0QVZCbEtENmg3SzA3R3hIakdJY25ZNXZfMjA2MlZ2blZCWjZXbmdSR0Z0ZnpKZHEtVHJfWG82R2xhMFNGaWx4YlVXR1F4bTV2bEh3MGJKSjk2eWFEU0xyNWVrOGJOX21COGx1ZmpURzRZX0swejU0eFBMQnpneGNHOEM1Q1NVYXU3M0NhLVlZUk9oR3RVVEtBc2RLcl9raVNLLWhDUkh5SktUR2RySjlpTm5xNjZUY2VfLWxoZ3Z4VDN1NE9MS0VsaEdBV2NvcEdhejZQS2FNaktFLTBIU1JkdE1MVDZIdXZkaGQ0XzBCeDBIWHZMWlFRNFRBNEwxTmpfTE5oNUhXUHlRbXJtR3puZ3pnZkU4VVVfT1p0ZHpGbmk1YXhuQ1AxQVBmYVEzbkxnUXd0UlN6czcxYll3amRycDJuY1ZNYWdpVXJaR2NiV0pkMjVFeld5STNYNTlTNVZZWkptOFc1VV8tUHhWQjc2cUV1Sm5nM3lnMkwzU3RGai03QVllNDRHX0ZnR0ctSnV6RFFNZEE4dzlLMFlrTWlNdHJBNWJPR3BoV2o4ZHF1T1JYQzBBc19mMTNuYVdHaWVFTkRrS3QydlNPWWptMWpidXliZE1YNklaemJOUFloWWtRbWNWZDVKdUpoOVRpcUw1OEF2RHFoTzR5ZU9CTEZyckE3TkVyMmdoY2M0b2dTVVlxSnJVZ0pPWW1PcnNQM0pKeTM1cE9Ud2gyMjB6NHpjZTFKVzdVU1AxV3pRTEk1LTB3MzhrbE9XWThqRm1UMV9HWWRkVFczSTV0NW9HTl82aFVfSkRpS1ktekI3eTM2UFhBeWstWW8wTnRoWUxDTU1SVnpFVmx6QzE5WFNVZTFfT2NPUVhXR2poM2JHc0FtWFM3djd3N0VYRzlmSXd6QVRrMGFWT3dNUWtqUG4tdHREUVB4VGFnZXM5blFOT2JQTF9RZTdDaS1UZWVaQzkzN2ZOdmcySXNhci1nWWRBMDhaUjhEQzBsU0xoM1RVRGFIV0w0aVpOZVJVbmVQcjFsNjlDeDRabHNkcUNvdXNULTdGWlI2cm1oUzFaVkQwQy1jRkNuRUQ0anJ3d202MXRYWUNEU0Y4dGlnQ0tfdVRIOVlkTExIQlZkNVhHTkJ3NkYtclpXVFNnQ19HS0UzNHh0X0RPVjFEYUt5MkEwSkpQWGFhUEZuMnB6VFpjUHZiSF9DbndfblhFSjVWcEdMaFZyV09rek55THdLTVZ4QW1rMm5NME1pdjBEcjNvNWJWLWlQWmY3bEVMUkJHZEIwVVBXMUJ2ZjBTVHZWRXF6WE5SR0V4NnRiZTViRGUtZFdYem1oS1NOSHVFU05QaWZna2NEMHc2TGdYbTBaeVMxNjZBYS1ZNzlnd0EwbGk4d2djckwwNlkzY1ozRldPck52ak5yQ3NrNWsyMmp0dWU4QVdYaHo2WDh2MjVEcDVMQzdlRl84cXphd1gyMExrdHhSSzU4a0VwWkw4RVRjY1dfdk1MTVA0Tk1HS3JkR2N1Z0paNDM2UDJqT203d3VqekxITE14YmhKSU5oQWE1WHA4aE1tRG9CT0hTaV81YzUyZHBURjVRVklyejkxV2VndDYyakVTN2czVW9oMUZNZWFmazJJRTVZaDhlaFJJaDFxNVYwU3RXQmtJUjllRUVJUml0MkQxSmRKT3BsVDVFdTlWc19xYU1NRGYxNjdVaWFGM3ZrVHd1NWxfY3hNOE5VNWx0UW45OTBBTkdLNmZKZGl4UUdWc3lYZGxNb2xRY2hqOHgtRGlPNTVLLVVnaXhvMWwxc3NOMkVxRHpEdFF2ZmVmUHY1WmhTaFZiMlBrQWJpaHI4NmRHOG9uSVJiMzdldTFud3VMS2lVc3VoWXdJNHVwVDFfaUZoUHJwd2xleVpzWE9NN05DbXREQVdmbE5VRTNRcG5mYlVwUW02MjF2VXBTaEZxaGxSbkUyU19IT2FXTHZ6SGU5bElDNkxzaV81Y3ZScDJZaUhhd29ydmxpRGNqYV9Vd05GN0p0QWNKTl9CVUZFYVpQQm82Tm1nQkpOdFgyRGF3R2RRSTZ2a2o1N1VfWHdySFlGOEhlbUIxM1R3eEszdmZHa1RXeUtURmlWZHM3aWJ5cm5GYnRKbkNaUHZrcjRFV2s2cVJ1aW85S3l2TVAyNmtta2hSR2Y0bXlmd2lIZFJRbW5PeG9Ia0FfUjhnc1Yzc3NMb0U3R2dlemVqTmFKdVNQdmZ6NFpDcDNhckkwdkNDdE95dzZFS2pnSUc0Yy1wQlRsRm5CbW8tM25aa3RPUkZERV9GMnIzRHc3N2RQcDhjTXZ3eHZQV04xUTVkOE9QYW9uQXpIaVZybXg2bTlYNzA1UThxZDJ5dnFHcExkcVUzTktNaF9qT1dNWlBXOVBGT0RJY2VVZXFxXzdIZEM5VTBXSFdPM2ZYSVNtRHJtaUREcVdXWHI1QzZyczlUZS0xY2VEU3l4bFp4YjFxRVhNcUlmQWFOLUZEWjRUaGRsZTlNQjlEekxfd1JNWEdHMDBoUFlXRzdrVVhKejlQOU1PdEpiVkRPenlQaExibjAzdkxmVFVVNFUteDk5RUdHRlpGbi1Yb3lEaEprczA5UXJOdWdTOWFPQmNSVUxndmRHcDI1RmJHNXNBTGROT2psc2VOYmozeUNFbnFTc1lLelV3MHdIdl9RREJYX2l0alNZWXlGaFBVNDdWVnZOaGVFdzI2SjVyVVhEanVNdXBZbHliajd6MHF5LWZCU2pYaVRTYk4tM3RudUJINWZqdmpzSFlCTkhrS21IS1ZuU2dJM2RxLWd2Rjc0Qi1fNmZKckRUSVh2NVI2T29pd0lpTXRwS1lIQWFzYzhraERIZW9lVnFIYmlCbDV6MENVVWJJTGNNSHhkdmNWZDU4UTJ3MGdoOVA3NU5YU0dXNzI3SmNaNkdxYVlqS2dSUWZTQ0xkeXBaR0M5a3FmSUtjV1lpdkgtYlFXRS1RWWM4WVF5czlORDJIUGRHdnI1amRINUxEWDctR1lyWjlkdVMxMUdJdnIxV3pybk1tcWF1Wkd5dGtfZi1kMDRzLUZBbU4zZ0N6WC1saGNKdHJvd0NYWjNLTlBVVVRPR1FORWgxOWZ6VXYyM2hfVDdIelc3MFlXSjZZWUhKSy1na1ZYUktMVC15c3NSZ2g0UHBWOWRLZTVNZ1JHUXJWM0wzWC1BRFp5Y1EzTGFjYUtqcFFnWUx1ajVmX253b09EYlEtY0Q1ZTdtY3BJN2hHWWREdURuTjU4MFVzWndvWk5iWXd5QUk1MDNSZ2RrSmlOd3BncTlSZnVUVFlCMERUUHJZTEtFOHQtenRZODExUjVoODBvLU9qYUZ4RXVYV21OV0RFMEwxRVZPRWpTWWZDQUctZ3dNUENnWFFIb0ZtVzFaQWxSbENDNGRPSzhiT2lrMHZjMWc0akdzN2QtTDZhOHNhRDZhbFh3QlFhQ0UxVlZKVUtXNTdCa29ldk9QVlRQWTNaSXYyOFV3SVdHY3hHT1Q4QVpKR0VtN0pNX3dsOUdZUU9EOHgtT2NZeTVBb3lLcmJlWGw3MXJJMVR4ZmVSRHlRUDVHZHVsbjhpSWFBbzV5eXZ3dDBZMXhOX0JtRlpNOVlsT1NkV1IwWU9FOEZOWEg5cXlPWmVOYkRmdGJBYms0SFFpSFN6ODE3c0lZWXNkWlYxajV1b0U2bURZdUhVV3cySEJmdnhnWHFOLXBHUlVTTGE3dm5TQzZTRUZoYlcwNDhFUUxTbENuY2pOZ3JMaV9kcnJUNjdSRE4zbThUSm9ESkwzYXQxYXJ6OEtKVEQ5MGlnRnhsM2lsdDFyRzBVaUQ3b0xRWnNRQ0FsNVh4VXRHanhUVV9jTW1ST25VeUZzRmtKSVJPbXgzVU9VRnNDRTRKeFBuT05lWl8zZmx2ZTRjVXUtbjFLR1VlZWRQQ0JWWmhjdVdTSGluTHFxRl9SVE5xWFdiVnZmcUpaTkRMcjVSdVR6WGE3eXg5T0xQVVFTdU5NVFpSSkV5eThJZmNqUzZ5TmRRYm1kMkg0RmV1MkgydWxOdjUwSEVmS3VuMk9MMTQ0N1NFMFBKb25YalBZYjI5dzhjWGh3aDZ4MUdhZENCelVhTWpHZ3c3YWtqZGlCb1Qxclh2OFJkOTZiZm0wT25nTFczUHdZcXg1TDFnMk84V1B0QXhJUHEwZUVydFBRN0gzbTE3R0FMM3RYMGdDcGFib0hudTlBWXZxaVFhTno5VDFmY1l3YjJhX0dxYlBJTjhoN09yVlMyWkFZdGloS0NjelkzRU90R1UyRk1vbUZkRzh6a2Q4V1BGQXBSUHhHeE8xTVBYSDF2SVlKOGQtWTF2ZmEzUmEzZnFXWWRlR3owUGVRd1FpU2hkRlFLMnJvVE9kSUwzeDhMd2RmeTk3U0VmRENnVVBTTHBSdTBEeEpYWWFTblg5UkJPR0RuNzV4aVFyMmxxLThXX2lHYWpEX19qQ3hWb1NVVkZOU005Q1owVzd2UEttaDVIVTJ1YnhQeHBQeXZRdlFqVkEzWVhMMXdnd0dJZy1PckVrcWZTdHkySG1jRGRpSUdmZVRndmh1djFrYnh3a25WaV9kdU81ckd1MVRPamxqMkNjZWoxa3N5TVk4dHRBcDBoakE3R1hKSzlVUjRVUWdLZXlnNkdYeTJmVmYyRi1ac2ViZXRlc1FxVHd0TmtQS3FWaV82SU5Zc1RlYk4zSXkxZmFEZTJ3Unl0TG9MVEphU3BVRlhVTUctc09aVXFORmtmLU81Qjd6VnpUT01HRTRSdjhfN2JzZ3dOTDhBVHNnc096OE5PSGUzc2Iwd29LN3lZRmZTVjZWQTcyaVRFMTBuWFlFWUFZQUZ3V2hpeU9ZNzlRYjRLMWtCektVT3hKc0E0NFJQc2gzX2hoYjJmR1ptTDVfa0wyOU5OR2d2aFZoLU80RWRLTlJQQkJwSkU2eEIwa01YSWx0ZTZkOWNOWjAyeEs1VEc2RHZwU0pMZjUwSm5pc1Q5UHpTUzlMQS1EOFBycFZONXhwUkFndEIyYUJ3WXRHT3VIWFhzMms1cjJ0akdodHhFMlNlQzlsaFFLQlJzTWZUc1B6TEwycW85RkNOaEJLT0JKLXdYUWZjUnM3ODFGdVVRQ1pvTEtwWFdlaFZzeDBuLU1vZUh0OC1GOHlVb1Q4SnpyWnMtamJsRjJISkxmaDkwb2NnTHhGSGVKWFpEbTZoeHhBTUZBM21XYmJHV3FqNndYYjUybmRCTm5EREtydFZDb0hDLXZXczlhaUNVYlVxM251X1ByLXJnWkY3bzZ3aS0tVjg5Tk0xc0RZRW1uMHpkUDlPVkFLWjZFUFE5czdBS0ZoTHluNmZ6Y3BuQ0V6TGNONXcwSlNNWWQtNW1ESlh4STdpcnpqdjRkNVFfdjJ5bUlzdnJ1eXU2MkRQZ3RkTnZRMjdYa0xpWHR4S0ozM1JBQmZyTEFYZ2VpaXU2TGZ3aUh0NG1MWWwxNDhJWEd5ZXhxS2t2ajRaNGRQVlRENVlHSjNTbU9mZjRMcXl5Qzd2a3VCeDJPNGY2R1d1dGhfMVdMSHhkY2lnSG5aY2REbk9iVTN2WVJrY2lEQTN4TmpNM0JQZkN4NXVBS0tYOGlZbEJCWlBLWGNzM2EzYmR2MmJzTGRpM0VTb2VqcHF6SWU3TTdSak5qdWQ0WGRBeXI0U1pPY1F6eEUxVEJMZkcxRlJESVU1Q1EzQ1VBRWVwSFNYMVF2bnlLbnFPZVZTYVQ1dlVxcFFYZ3k5Nm9wVXNSRE1ocmtlYldzejRkU1pMSW5YaDNkY2JKMFlnZnUtWVRVZnAyVzNwS2dQTXhlajdWZ1RhbEh5MHdLa092Z3FtUEtGNmViVklOeFZfdF9RTnVhWkxhMUoxeGF4TERhS2FseVBja09RYmRxVzBkRFZDWl9ZRTNnWFFHU1pOWmdxVmpRU2pfWmRUTWw1b3J0OXVEcEJ0Ulpmb3IxTElaa3JHZ00zbDl3X1hkak1ocVBUT2FvQ2gxd1dsaFdBLUFnZ0hWdDlFQmFaMVByQ0M3dWc1TkF6WVpLSWFGa2hPaXpkdVRfQ3dQaTZSN1VHYTNaZlVIV3pDZ3ZxMEVlUTN1SjlKWHVwcm1UOGRtWHBFekRmcWRzbG03YWtRX1pBcWprRlpoeUh2WHMtMm0yRXhOaWlRWG1DX1N0dmx2S2xaanRvMjdESzBHeW1hazdpTTNwZlBrNEwtV1ozUk5SaFVZNkdQNGtmLWJuNWRCLTFBR3lnTElRblhDYTA4ZlJwczYzWFFHVDZRWEdaRXYycVgzRlBxbWtwMDhiWWJ0RDRSMS1LckRnbWs0ZjhOYXpfQ2RBVk1UUmR0emtFSXVMMzZfNXhEdVV2eEdlcFZVdURZYW4zUzBfcjBNaXBOc2FMT2h0WTN4UWxXcEw5SEZxV3ZaS3JVN0drMjMzWnpTQmMyWExSeFJ6SDhRQldfZ2xyc21uWkNIZkVJb19OYmRTdjNXcjByMlQyTW9RckRvZWlFcTZCcGpMTjdRRXU1U1RDbmQ4UWQ1XzVpT1U2Um5qcEdXbklrclJ4dll3akZMWmp1QjZzbDZOQXRyb0dyRHp0cmdyTWh1aldPZW1TQW1GNEpTR3hXelpvZ21aU1NPUGQ4MlkxQkk0cVRVOXJEWUMyLUFfYmNwSjhEZ0hCVUh0NWdVZzFKZzEwNW0xSExtUzNvYktqVklxVXdVbXNLUzc1NGNnQ3B1RXdMOXJxTHRJU1RXS0p5d1MzNFpaclVEMFRZd3k0WFZXVW9rcDRKOV81Y2ZDQkdUY1EzbHcxbnF3MDlGemZ1SGtmOVlxVFNEZXFINkNfNXBJRzRQbnhuS2JDeFRDZHZFUGxYYjVLa1lpNlhWZWJXalFkRUpXMWVmLTdVSmNMSzZJRFlsMnlVSVhSUUVsbklXZUNoWWNWNzdSb3VPQktYNTk2LVowbmxhSF81ckNiOWFkaUxxdF9DQjRsd29XYVJWV2VrTDB4RGlIX0tIRElDUE9MZVd4Y1YzZG9qakVUeFl1bldCZ2lCQldSWHRaMjFDMDhZWjlFM0RVM0xoZnlEQWFqbFczNzdHa1dpc3JaUDRLZFlCeXJKVl9WTERiUC1WWHBaMy1NdzRIaEhUQ3dMWlNaekExenNQUXVVRE1SUDVraEtYd3Z0VlpwTF9Yb3hKbjY3UUdyVnEwamg5NEhBR1R3Rmw4MEpfa1Z4RW1IVDgyN216MzJkYkFydHA1Z0hhWVRHR09RQXR0UHg5YzVLTUlOY2hqTHBpdEREVGl6TXR2c3piVGZYREw2aGJNQldObTRBN1dKZnRXYnNVYUNtUVNXREtKWkhKdFIzLVd1MEhLYmstM055Tm4zeDVkU2NqWWtqRHFaYmtDc2pBc3FpVW5oTGh0a2JLS0RaTUtfQXBFVVc1b2x3NExfYVhkcWZPR3d0LWZuUXowU2ZaOXgzLWQ4MktYekU0UDZBT3lZMTVKWGwweWwyWDJmd1Y4Wjg1MlV0R2p5WkhleHpnbGhvZUhpUmY1aTExZ2FHc0RWRHVTaXRueW1BakNKcTdLSGwyODRpZU5nbWVpajhLbTNhaXdDX3VfNWJtVmNyZVc3aVpYS2haREUzVkxsS3lfcWNoclRZOEJ0STRKTXdqbG5fZno3MG96TDFETXNrU2JXclhEUE9QVGdTVzNpVTI5UGNPdlRtTGtFZGdnRFFLSERoYnhwQ2ZEU0hFeGhxeU1LYTRmV2JYQ3REZnNzelh0a09WaVpqVnpjaVVXMVRvSmo0ZlhmelJMQnRHeENidWFGZnBaajVtVjZ3QTFkSGlsTFVkbHVzMlNhQWdEOE9ibEtwcHl0SndmQ3NTaWJ3dkZ6MF9HYWF3cFIwb1RkUGRsRnBfaTlOVUNWOVpud09Zbm55T3hLZGJoVFhMd1FVUWE1aFBKbzRQVm13V0ZTTENYMzNVdzZqT0NDdUxQMDRkYmZadTEyMlhxQjl0Y3lUVkgzUS13TDhUYlBMYmFKVGJYYzhsUWJaRWYwVmZYd0VCcEViZTZtV2tmcnVhb09BTzRvX1RDaGREOHRJc3lxd2Z3WUk0aHNxZ3hRdE9SWF9WVHFKdVphcXdWLWxrNVpGLTVPMHlEbTFrYmIydUFwMzFFMzQ5dm1lNEpqWWwxV1UtN3FLLTBlcFlNRDJfWGpPN09oRU9PSnpRRlFjSHItc1kwN2hsTXRmV3FXVExka3ZWZl8xZTVEMHVocFRVWHViWXdnU0t3al9xUy1DSkFfbThaS0djYk80MVVsZ3AtWkVFQ2tkNFFfbkxJU1pOTVhhTHZLMFJ6QUlMQjNsMzd5VS1aWVJkYkZjZUdxTmd0NHdPZU9FNjAyN3dIQU9NY0p3bGJHT1hmeW1YQ2tMUjZwZHN1ZktNcmwyZEl5ZlJyenlLU0pNSHRMdXVnVzdXNVRMNF83b0FpSnRLT1pucHRTZHh6SWk2ZG04bmhEbE81Ui1LcWVZYkVnWng5YzRvVWVHeWJMd2d2YVFxUlNKOFVNcG5HeHRySDQ0SG80NHlycTVuZE9OTTFhRXpQcnp3OER6SDIyVDFpdkhvSVdtT3BRWTd4VkFDNDZMZjl1V2VEWFQ1dDk0VzZrekVhMXhaODNmaGVqZXl3X1pmUnhtSlRlV1dUN3hnSWZYaW9vTDN5XzJOOXBzVEtGTkEwMnRfRF9VYmNBMkZYWEtTa0tjcVpuZFNHM2xzcm0wZVNsOGdMWEpHbFlUYTFlY1dUczVnOVRaZGIwRmFUXzJ2LXZzTDBzX0stMkV5Z3ExemRNV3Q1SnZ1dzQ3SFkyYmVBZnVmU3hFak0xUG10b25VZGNXaFA5TjZja0N6c3AtQkZXVEJYQXFZR2dUM2xZY1ZHaGc2dXpVeFR5VEtuSWdtZXN2ZUVWNjVyVmlNejVVUzBpaG54eGRqMDVhUmxaTXlDNXh0LUhsRGp6LTZtUVNueUlJN3ZqazBwekhVaWVSMjFyQmo4Y3BTdzVoTTdLRG1BdEp3aG5EVXRpZlJFQkdISEdUQlJkUElNOElVQXJOek1mcVpVRkJ3LTN5Vm5ZYVNyWlQ2UlVJMVJiQTJId3RoYVVtNWlFVkZya2M1NzljMVRidlk4dDFhSUZhOGpQQlo2aksyaGlKSzJpLVdPYktzZzdhWS03TWVTeHF6WkE3Qm1YRnBEX0hneTZmYXV5NXFtMDh2Y1VyRHdOVUpYV2RHV1ZvYzFWRmF3VF9yM01KaTV0NmF3YTdSSzhUQWpwN3FkSkFNM1h5Z0NEVmZDdFBHX21EOEZub2RGLUFKa0RKNEdUMVhSLTZSWWJXdkJvRlpFSTJ5YWVQUVU0c3liS0pVbi1TRFR1M0JyNE1MSFIzM3d3clZTdjBmZmx1cll2Y2EtZkM3T2NsTm16MzctY1lRY3hKbUkwaFR4TmJUU0xnVlBpNXp2VWlURnl2Q05zdzJfcEJOVXdFTmNVQUhtMEJBS2FHakFuTTBMbGVWSmtFRm05NEU4Z0xTVXdGaTlNRWV1RnI3YWVuQkhZcll3a2g3MTFMQS1MaURLeGJyeTJJeVBCc3EtV00xSUtJQWl5Uk9JNlotTzZuQnRvVnk3aWpxY2k4ZldkVHd4MHViREZaYU8tM0JxUWxlT3F1ZlhfTHZOdlBnQ054S05qcDg0Y3RZMUlqRnZPc2xfR2V2Q3FkWjVkS2J1NFphS3dyaWdsbW12LXZYMWVXdDkyWDk2ZGRnVFRFUTMyT1RJOFRCYVdBdmV0eXN0MzdHOS1hVGFuS29tZHNXOTFWclpfQ2JoQXpYbWloSXJ6Yk9XemVlcjZxdVRsdFZOc051MU5FMkVlTUxnYXVYYU56cllfYXZNRGczdi1yRk84UFNDd3hjWlh1Skh5QUZGX1RuWjhqM2NZbWZ3RDAyX1hRaUpGY2ozeTE4YzROeUNCZUEtTHQxTnJxamJKRHJWMnBkbTl1VFlRWl8yTU5KM2ZBcVczREVrVERmTVpvc2RoOVo0V2pmRmdlMjRIandLOHV5X1RJbzcwQ2MwOVVBY3lvamNFbFVOSGc0a1ZWUEtUNVlLZnFtTXRnMFB2R0ExTVdtaWNTUTJyVWhhS3dGZTJpelQ3WTRrbzBMdzBEZnJWRUlqSUZuRUxNV2tpVmxTOW9TWEN2Q0lKMUZNcnhPSm5ZcFZseVFRN1hjcm1kYjdzMHhCMnVSSDhERnRISFVtVklTX2hhaUlpWmljNFRTbElnWEplTXFRaVMyZG9OT3d6Y2R6YklZeGRxX2p6d3AtYmZSQlhBa1VrUTZ2UzJiMS15YTlUUElwd1dpTjRhVnhWOXdBOEsxRWpyMmM0LTZXZ1ZUT3dHZlk3cUxCUmJaaGpmQU1neUhuRkNFTXd2NktiMzh2N1poUzBrWldNQnBzM0k1djdaSG9MWVZMdlRTX090aUR0Mmp3M1RvN0d4d1dtNzJnQmhOaUJxdmRZeXotME1qOThWTHBNOTR5N19SeE4xZUpJTjBuOFk3RTgtcW5KNjJyeVppd1cxZWcweTVVNWhGdVRlOFY5N1Jrc2hzalVfdXA2blZsUEdCT0JPUUpMekVYcU9qN2JVSlFWV1BGYlBfSmpzTkRJazBSamNmdl8taVh5dHpsSktLV1A5ZmFVckp2d3lkMFdnRkkxVU9tWDlOaGd4dGhYVnJhWVZRaDRBUHhWenE0ZFoyanBCVWJfYVlTZElheW9PVnY3WmRITFN2VGNvVnZQN1NxeE5WM3hTZTJvMFRnZWw4ZnIzMGxxbEJzOXM5TTJpSTBpV0ViS19oRzhfMWdraTE1eHNOQjJFT19lbFVzVzhXQzNvZE52Z0FValFORGJSRS12eGZWY1R4Q0lMZHdNMnl4dGpRbmR6SXpLX0tjRkdZOE11THAtU0JoWkJTbEtaV0R6OGRWRFVvNVVDd1pZWC1QYVRSUXp3WFpDcVZJc1dRTkIwVF9JNFQ2LXRyZGJ4Y3c5WDg0eTBFZEs4T1VWcWlzX0ZWNG9RU05IbGJGdUF4SHJWRDlzX3p0MjBFeXNQSjBXTkNkbUNObjc0Q0doM001ZVFTY09iVmZDRkQzN1o0eHVVTzQ0RElIZ3FINHpoRDlpMjRPRVQ1enhtTWNuNUNSelNnYmlaeC1VWUliY0p1Q0REa3hZRGJodTk5ZzVFazJLQTMtekx6QngwMV9LMjZBV05sc3BwTjE2T3Q4VlI1VVRNZWtOa25oUUQwaUs4emZRanI0OFFleW84QkpWNXlxMjM0RVZuOHhoM19HTkZQOHVjTll3LTdhZWtqNnRFeVlFSzB6TUFNdEJNZmswRkxpWUxMaThldTZtWHBJSXVuUmVlLWpOUWR4a1VGWVF0MU9CN0ptWEw3OWdPWkJ3Snluc2Y3WVUtb0JnaDJ6VWhaV0U5dXc0VW5XMEJ4NFlST0g2VEN1NDVlNkVUNzFpTmpUaGFzbzBXZVNyclQ1eENjN0RnTVFDS3ZnUVg1OWFmY3g1VzR4OEpMWENYc3d6R25PeTI4QXFTUnRGNzhURW5CNDU0ZWJPbnhyZm1wTmRPVVc3SUZXZmViZk9GbDl3bl9fTFhOTHNlZ3lRVDdybXpqb21sTXZQbHN3aEdKYUVTUllPclVlNjM1ckZTZnJQU2JBSmt6eThsMnZLZjZSS1dYbUJWUWVTekFaYkplcmhWcFhPOHhnTWFRNUVpNXdYNS01MEExRFZaeDFzMFY0akxRRUJrUndyRHJtdEpBVHRCR2t3RTZSRTlRbGVpS2UwM1lBMGFnXzN4b2xqTHI2TERPMHRXYjQ4SFlXTDV0ZEJvTDU5N3Y2S2R6M0hQQ2dyZGRwUkcxU2tMeUNiYk9ueFFHZVFHcGkxRGRRM1l5VGxwNDB4S2tHTXV5ZDV4MWVlS0RvcjU0Y21Pa3ZHMGpkSXdhVC1PVkozWk9md1FSTGh6SUczR2t6bDg3V1J4ZUxOZ0s0eVhPdUtRX3hyLWRwUlFIaXA4djBPWU9mY3ZZaHZEQ0NCeGE1anIwcWd1SUJxYWhJMEZGbFhPR2ctSGdXdlNVSi1Cak5KazV2RVVpWDhHYWNYZFlRbE8yeDEyXzZuQUpCU1pqWW5kVHZFbjRDUWpkNnpFamdBdlRiSHhNMGE3dlo2WHRtUlFuQ0VUdncySng1UW53YkxMYVB3U1lCZ0o5TGFwVEkya3VPR1RuUG44WUhGcmtyMFhjZE5lS3k1YW1tT0dyc3F2Q0RzaHI0NGFVMXpfNzFoNTZhNU1LX0JQYjFZT2d3VTNlTkdRU3dKTmtBR0JWZXJFZ243dDNGS2kwN1UyQnhZWDhiRjVNQkkwdmI0eXlmTDZxRWhQaFRVNkhyMG9Rb1ZJX0lucTRaZXU0c0hvZzVYaWhtc010cFdmbW1sbkFCUkoxQTJKc0lJSndLWGxYMk40a2lTTE9jQ21wNDFDZVVrYzBRRFJXRDM4RXQ2TmtKQ05QaktSSmdZa2tRZzRVT0UtQ0o3N1UzdGNQUkF5LTJpUkNfc0pMaS1TaldrQVA5WnhxZEhUd3loSUN4OXFjVnZvejdnXzF3dXF1d1kzSXFHdUVkRFBMTUw5Rl9VbUFHUzBmVUd4YnpoWS1qVkNjTGtmY2dvSE94YjdqMEd6V1FUVGZBQ3Q2dXdGYVcwWjJvV1pGeGRiUkZlMEU0bjJNWDhUUjRTTUVRZkxUWEdvQ0hocE5GYlU1Wl9MMnhJSkp6Njgtb0Jmc2RfeE1NQVFNNzJNekc3NzNZNzJ0LWcyZ1Z5OHBiT0tWeG80M0tGLUY5eWxhOTVzM0wxbkc5d1NBS3NfamRmenROQlJWQWx4OUpTM2MwVlM5a0VZR1p3WlhkdkZudWNmYW10aGZYWXNDcm54YWlZOXNjbkUzOHRCS1hLMjdsV3ZFYVlMNnBkb0R5Q3YtR1FMd1FkZXhEeG1ma01VZ2p0NWUtZ2ZiaTgwVFIwVVZNdjM5d1NBOXNqZ1FpczRFdjEzRWhoM0RfWFU1aFFUUFo1SWRMLXh3S0tEc2N1cDNrQV9oeHFoa1RWMDlDTW0xQ0ppTlFyNlJvQ3I0MndRZWtTVlR2aHhEblg4a2QwMTZtQk82UEhTR2tiRjlfeXVTVy1JMVI5MFVwcHBtaDAzZFVSS0t6WVUyelFCTGpxTURNY1F4MG53ODlweUx1ZUlYQjBjcTFVbkM2Tl9sS0ZObVJUTjJFeDZrcjlBQlVQQ3g0QTdyeHFqcU5sNzJyTjduWFJ0QnZGLWpCaTVNem9qSWh0VG1EV3ozOWlmNml3RXo5VGljWHh3U3BWS1hidkJaUnFod3dQaWU0V0hicHJjTlVqWENmNTRiY25nLW9QODBidXltcmI2bXdscDhWU09fNjhqNzVSVXloRnZtV09oaEFtNHhVdy1INk5nRWl5dWZoaDFrR2l5RWJMcTJLYkJSTVhYcHYydzY1TnVDeUc3RzZrUUc5NTVsLVFQc0RQNmRPY3FTNEtRam14S2MwY2R1Z2F4eDllLWpQdC1scjBDYnFWOXQzMFFqTjlJbHhuMHlTaGRTODBwQ1NIaUd2dVpMUFJyTWtwV2kzZFZYMzJuTzBpVnluTHZvU0piZFczWGozbF9fZGZoM1pydC0xRHVyRlM3QW44YXk2d0k4ak9kejd0alNXZzFBYjN6NGtLRU1tSy1tZXAxNXRkWVhOdDNIZldkQlg2UmdjS3VwOTc4eWh0cUMzMjkxWnRKZmFXcnBxLXZHM1o4TXZocTl2NS1hOXVVNE9WTWJuZ1J3ZDFfWWlSZE5LUDhrTmFUcml2WEhfemIxWWpud2lESktUZlRLaDZJTkQ4cEhxckxhME9YM0cyRF8zV0dQcGU1aWk2eWFtaE1xSGxiYnpzNWlvMDV2akl6d1J0WXNJLTZYSE43MWt2RHotUGFYZXRhMTVDa3gyVlRnbFBiWGVzcjNnYV9MdEZoWF9KRVl0c2h3UTA5Z3dyRzVlUEdWdDVjcmo0ckEySmVCdTFUVDZDeE1ld1NoSzZhRjZhMzRHVVZrNlJmZGJ5a29Za20zTFpDZm9zOE8yV3FEb0R5VlhqQXh6czJUcTBNRzF2VW5WQlBaR1pOSlhENU1TTVZkU1JWaHZqME5rWGlfdmZyMjVFUEhLN0Y4dzU4bnFUNGVXSkctNXR4WEpaYkhCR3FXU09YdjZ0R0I2V2liYXphOGVwa3FrSkFGQkR3cGQtQmc1UUxlNUpvdzV3ZWx5WWZsLVNlVDRwRllCRnc0cXd3c3RkTnRyZW82V2FEbDhmaGVVTGxuLUhZdGZobkhRTUt6TXVXNVgtU3ltUDhyLUJ5NG03bTIyaEdmLU12U1RaeDBSLWNnd05LdE95QzBUVEw4bnNBWFpwRGFVUTk0OExTbEdXdDZOamtHZnFMdGo3dUhDN1pYSFFDTWdYWG9RQ0lVbmRBdzlhb2RkT1JBU08tMVVOZGRrdFYwaGg5dXQwTl9tVUVKMlI2Z180QVhaVzhZZExFYm1ueXBvLUJEU2wwZ2wweVg1emU4OXRRd1hHVnUxRC11SzE3Zlc4Q2hvTlR4YVlvdkFld2Z0RE9BeEF2aEktZHVKTkx5T1BWbjRsTVcwUVNqTnlXd3d1eG5uLUNsVUxQWl90R1QxY3o3UE0tbUJ1S2RBWXVDbnIzN01SRXl0ajI2S0hOejNORzNZRm05ZE5LTjQzT2k3VHNsNHdNOVV3ZnY3VTVreGpRM1lPcGRya0ZjZTBEcHBhM0lHc1hsRTVrZWtCSVI1Ykx3NXUzb25rQzdGZUNQX0RVMmNPMzJVZVN5UGhBeWFzbFBITmExWkJDd0ZyckwtTmNYY0RXcUcwbXVhZk9GY3NwOHh5WUNweU5tZ1FmUklmN3pfSF9CaDZhR3NIb091WG9RTDIydFdCWHdIQ3FDVkd3XzJ6ZUpFbnNyNmJCQ3BVWkYtT09ucUJhTU9RX0NnSFlIeDhkdGxNOHY1ZnZnMEduZzJLcDVjX3RFOFFXY2pmLTM4M01UMmVlZDRkN1J5NlhaTGJDLTd4anlYb1FMMkYzbVlnZ1hTenB5b0hqUTBTR0EwRHNzdTlQck8zMXFOUy1ueDNXZmVWMFJELXBMRFVtWUJjdmJCbjVpT0Q3dUVpZXpieGlrd05QTjd2UEd5WG4zSmJJc2JXdVRjYVU0cDI3UHlGejg0RzZIaGo2ZmRqZ2RzXy1MQlI0MGVzdU9CWHFEa0g5bUVrVFZvMzdVMHVzblA2TEJ6UVdud1NRZm1ubUpwdGdJSVZycFpPT3ZXZm9aaW42enpBdGkxSDVVVjNuNHN1d1BvOTFtaWFlTmhkT3RyMmZDdFJsNHFGZGtxYWZOblIwOHFXTWF3OC1XQmpBbTZQVnVyWFVhX040OV9NYldzeHhLMXNLTWdqYkVrTU5ad1ZvbXBYaGxXLlh3SjBXVk0tUVpUV3hjcnZvdDFiTHc"}'}
    +    body:
    +      string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmk4YVBwVmdmc1ZoMUVCZzBqRC02VEJ2TklpUEFUWFFHRGY5ZnljZ1R0X2JPQV9OV3psSGlBS2ZPdS1wYUlZUFhaLVVCSzNNbEU4NDl0XzFpbXVsNGx4Y2E2RllqdHRreVdIWjFWVGx2cEtUX0JGNmVFekhzNVBuandGV0twRGcxbGstbHV6b2ZCem1Iel84NzlqSXJiZklYYndMRkhZLWZKUVo4UUlOUDFZdThKclpGVzFucUlheDdQYWRmeUJGMF9XWWU5WGY0bUxWcXpYbE5zZTA1ZWZuTkxRR1FXTy1CSnZ2RmhTajRtQnBWbUZwVkk4RUVfa2xfcE1STW5ydk9haUMwY21iYXczRTJlTjdxb09lMVpJd0lVY2hZZFRidzZPQUFZeEY0V0ZISUJoWEdkM1I2RV9GbHpCUFdHbTRjdkNIcXVfc0s0NkRoS1gxeVJDXzhpdy5OY3NoamhUTmc0NVNNWjFlc0s4cThnLm9wT1B0enZxSXRuWUM1aXQ2MU16RXhReE1xQlU0RmpIY21sclg0MjM4OUt6ZDNMUmdOYzdPRk15ZG51UmpTRHJFWmZtV0otaWZJYVd4bXppaFVWb19XeUpwRkpNUzlNLU14eEp3akRLZllPSWh0ZzFuUUxpMXRMaUpsS0tnYkZ1cXg0amlkMWFuLTRSMVY0bWNyQWlrOG9CQm1PS3JwaElnT1pWZ1VXOEIyVWhXTjdrUGQ3YjhlRjM5bUtHbmsydWFMSmxyQzJxdDlOelRMQUpxODE0cWFxUmdtcTNaQ1dlSmdxSDROQjZjZFhWWHRwYlBSZXFFdW5veGlkSEJVbVZTbGlIMTBsV2I4SzBfb3R1OW9SVHIzeEpPVTJRSTd5WVd2N3pUdVFWbEIxQURpSkZIUjA5a016YWcwd2VlR3VoRFdCRGhPRXFMbjNaeFZ2UVlnOC1IWDhnMGpIbGx4c0ltZFJGaVBhZDhfS1lWTXQtSUFpb3hjZGpkQmQ3WFFHUmtaMGZ3NE50U0RtV0dza1loV09IY3ZGZlJvdkFzOVU1eFA2ZUc5cWNtRWJLM21tVVhnMF96MEZ1Sng2d2dfZTFtcWNkR3BzbHh0enFuSS1kUVVESllkM01RX09oemtoaldHbENiZVQ0elFEYzBxV3lkbTU4NVpOU1lvVFpOeHhxd3ZTWVUwN1g2YUNTSm8tQVlja053VEtCMkE2ZlY5Z1N2SmViVnRwX3NSU0hNdkQtTkYzRU5fRWZmc2hNYXlQZTF6QTBnUi10Q2lyZUxVUF81dWVDWHFidWlZcExjVk9OaXlSNDlObHZ1NzdXZmE0dzRCZ2xHbHMwWUdUNXNuUXBfTlRsZlpqWFpZcE9lLWFvV2dQVXQ4cXB2SlZIbFplXzhmM3BwUEw4VnlRZ1hVeFVXd1dFclNtQkJpbENQNHhoUG1yWmc0cDA1MEIyMUdQY091STNpSkplQ1U2QVNuLU81RE44eTZUV1B5dEpUdmhsX3RqbHBWWFFQdmRhZ3lrVW5rbnlIdHdOQ3lpdDVwWVVGcWtKRjh2YmpKNkctbnZUVjkxU3J4N3BJMFlQTVNVeTliOVRXWVVtRWhvZm1Ea0FmQnhub0s0UC1ZYVJ2YVFreklZYUhmakhhUzNvVDZlSGJOUjJTWTBxaU5lUGxpRVFrbnp4M3RMbU9yazV0bkRaM3lEbVFmSUF0OGRwdTNXVmRlQWZuNGFqZHpQcWF2bGNnQTlrdDRkQmxGVkZrc3lZVG9BWTNUT2ZJZVFrelFjQ081MFF1bHljQ0o5YVBFZ1d4aEw2MHpla3hhS29ZaXFGaWxhWGZVNUdsTGRUb3cxcTVVSTVFZDJ5RE1fRDQ5dlR6VEhVTzB2QU13a1hGWG1KSFc5WF9EUlFyUlZxanNuOHY4d1NqRk9mWktibEs3WkQ1VHlxTWttYUZsYnRIVlhrajExUVNtLTItdHZXZzBEZ18ydG1QS1kxRm1IOXdCUnVZNjdNZnkwcmlzaldtcHdBdjdLbnExN096Y2JnQVNIaVJCbDJEYm9RU2Fqa1BuTnhwQmtIWU9Pbk9WVFRaVUwxVk9ybm8xZ0ZWQ1d0aVZZTk5WalhBT0NwbEJfRS1oTTVRNDJxRzZoLXROZHhJaDNoOWtpbHBDRjV6b2szZlJlb2d3dDF4U2M0Smw1dFJhWC0xRlMtbXVNaE5uT0lfa0NEaFN6N1pqb0F0VG51ZzkxdXRHeVdlNDZPcVJPcDQ0dUh4cXlUZkVMQndBWDRlZUVWc3Z6M1ZQV0EyTG9nSTRYZFVnMjNtN1V6MkZiOHI0WWZTRFdlSndUYTlyUzk5Wm9rb1JqS3Bic09QQkVTWWNWUHhFejNWUUw5aWdFLU41LWlvczctVldEbWlONFZDc2hiWFl3MHdESE0wUFNYNkpHbjhrQnM3MnRFcTZveHZMV2U4Y0luVjNzLXJ4NmtLNURicWxpbm9uT1U1X0dER3gxbGV5VWZ4Sk9lanphWi1reFg0YThtYzNHNzdzMk12YlVfTjNISVQ3blhxMG1MYVctanM1MTJXc3Z4WkhYekNHY1hjak0tamZPbXF0ZEk4bm9xbWNaNXdiRWtRbXZMdGpVS00tWnVkNWZSWHNMYWlGNURJVm9iWUM2YlFkTVNOd09kSUdOcV9sNTNWc0NjcmNBcENENlVOQXo1ZW54S2d4QTBnZnllbUhReF9QVy15SGhyMng1aGZTVlEzMXVPWFAyckppQnpEZFlDQWlUVUUyek9SV3RmWW5rUUdia2R5ZTl1UGRyZ3dIX3hqbTBJNzRTSnlaOFE2NGtyNnc2WU1tOXJMVllPR1B6S21lQk9pMGtnRms5WWEwVUdCUEZiWUd3WFotMGFEbF9sOTVna1NWRFN4b2xEMGJxYUJnQlozcTBxb2JrekZTNkZtaDlFeTNkOVBkcV9iN1RacWx3d3hEbWU5aUFFQU1lWktQdDVUNF9LQ3Yzdk95UW1nQ0FxTURMVGlDYjBkQlpnLThTMktyRkY1aHd5RHRkcTE4NEJ3WmRtcGl1V1VYMWpGdHJIV1QycV9yUVAxclJ3NUhvbUVpck1aa2N6aEpMV3E5ZmhjZ3BoMGcybnVRNDlyUXU1U1RaUWpCcklKQkI4bXRIVWxSM2x5UWphWVBWSmtScHZ1Snh0VG9qYWdYMFBvbEUtRzFRYXcxTU9qSHMtMVlpRGJsT3NKNnoxajdkWldLbFV1eXZHNFF6WDBnYVpiZkxncF9DRWxVRnhXX3dWUUZLSjlLc3dLbktOZVFscmpqWGZvRTlSZnpxMlRqSXpqVXNKa1ZHOUlTTlBGLWxwenFZVTlCWmZ2b3RXVEpYdkVGOXVRQ3J1MFcya1ZrNHZmQnUyNkhQZXR6eXpBdDV2dDkzN21WRVNRWDNHZ3hnRXVjeWFXYzlNSDcwc2hfc1VyZjlYVzJsREVFcWs0ZTJ1WUJjb01xVWZ4TFFqcUhnZVVCeExsWW9ONmlnSjJIQ3RnekNQZU90Z3FlWXpmYjhMYWtmN01vdWxBTWcyQ18yeHhObzNrck0wR3BOdThiX0RqYkxzM2RrT0huWklOQmMtZmdjendtSWNlaWZaTC1MMU9GNDdLTWt5S0ZDUDhyNTBzbGlfbVlhZ000LW9fdUFiMGJSczl5dWllSEtzMF9KNkY4NW5ZVl9vZVVxYTVUOTg0QklLNlpUcU9HVGxpUjE1VDBWQ1cxYnZuYWdLVU54TlkzV21YdUVCQVM2TUZHMFlMM21FQjVyY1BrTnlfTVZna0RNczUxN2ZvZnJKMWNVODRETjF2LXdaTnlCcTV5MW9PMGJDY1VzS3ZWUks5WFU5WHRYdjRIYVVrZmFOR1Vyemwwc0hsV3pfOElkY1ZJRlFiR18zYnpOcm41N2E1WFZlcGF1TVJ4TEdYMEZMNkY5Vm9BQmRYanhJejJKWmZOQTIwOWNnX2sycEwzODZjRG1uNHY1azJnVVNEbndOVHBjYXpmaUl0WVJ2TV8zZ0pyZ3ExWlpWQlB4aWhLdFJsckEwaldEaVJWU1F0eDJ1eWlFZUlNNXIxVUFCbkxDaE0xdW5TX3dQX0stZGluRG82aW5QZzkzMWZmdDhhTTN5UlBIaVMxc3hBVEdLdW5jU0t1dzhlQlNaYklTeUNEekRaYkJNZV80bU1LNFlVbXlkSDFzUzFob3Bua0NYWWFRSm1wTFZ3N3ExNE5YeThEeFZjalZIOUJUTTdENGpva3p2TzdrZ0NMdWQ5VjVHdWpJdlFKekJUUzFQcjVRUlJwQlp4V1N4Z2EySGlsdmljRGVuR0tNem1nQWRDTmxMZWgzYzYya19uSEVDZWRheDQ1RVdnbko5UUx0RUNyUlB6SHJIVDh1eU5BUGJMczZhVjNuT3ZrbHF2b21YcWI2U3hnQm4tNUhubTktQVJCbmRHQldXcWg2aWNlVlhHWEFuSFlIQ2Z3SzFWNlk2WUtnTmlqaUVaRlhtS0VaLWN3VzVXYUk4YzhUTVhTeGlpTk9zWnpkT2Q3VmFBeTEzQ09iM0NmMFBMbTdVTGRGaXJHZ3pSSURQRTJyUjJ6NGN4STNMNEdKcjhlRTRTVHRyZUZIMW9KSlB5b3pBcWVhN2FOZnFtU2VZR2c4RnFGV010d0VJcHp2S0JwZlk3YnZKTTZrWmZEaC0zTzVlanBsamZodUxLQkNxTVFiTm5laEZrRTBIYmFvaUhhS0hsczlTT3BLM3ZmX3RnWGR2Ymc0aXhaejFVdmJYbWpRdC1hRzZRNGg3SlBfMkNfMUpsdjJVV0xCRGNDMXloa2JNQXVRUU9kb2liRDhyN19VcVR2VXlyNDhBaUpTaWhNTm0zMDFpR2JtUDJmZHZ0Tzg0VmFoOFRWMDFRVnFNYjlZNkpJeXNXektvZE8yWkhmbXN2SUt3RXRlQndCbDJjN3hqazVUV090bkpFMnpKa21VUWFEUjRGTXJ2d0RGTF82bTkxcVh5dmladnFiTnR4Qy1jWXNLN1huSmNDcE1oMUdQNWt4VldVd1FxaUxFV2tZVUhaUlhNaVFjZm53RkYzODVtUk8xNW5SZEdrcF9Fb2RBaHpHbDRBSHVyUkdkazV3dlduT0pnSEs2V1pHMmtuZ0dYMnU5ZFAzZFNhRTZRSk5oNVBwbXlTYXhHX2pUMXFhX2VHc0lfZ0ZQTGdkZkdsd1QyemY3QU5rRUtydzJnOFozbU9pOVZqNnVxWS1icUNHcFNUNDJiVGtadXItVS1xMkFRTU9jaDQzcFpQOGJpVDNJblRUTVFBdHN5RlBDQXRtbk9wVDJpNnhRUWZObXR3eGgzeG53QUJNdTQ2dnRnY0J6THV4ZVJvT0NpN1BLcXFYZERVSmkxRVpmYllDS3lhZ2JDb0EyWnh2NHk5ZGZRckVDbzA0ckdtdlFYVU9JRDNUSHJTNW9ZcGstY1haZV9HdE5zQ2wtb2dlYk9hU3ZIN3R5XzZ6MmJSX2JZU05XUWVpODdrRmsyblA5cE9HLWYxd3JLU0JWTEo3c0hLUkcxT2ZVRXNpOVBkX1Yzdy1oTkp1Zkp5RXRsbVFjWE85OGJnX2VmSnRLdTZBZm5DQmhEWXFGVTh2ZzlWOTlFS2F4SFRpQVIwZHc2YnVOWUZvb09PSnVGVFdEazRnM0tXT1FqSGNuNFRzMExrT3hFOW9yMXZUbVZ5dTZPSG0telNmRll0dDBoNVVlUWktUmdZSnBQNXNMMEFvWjlGNnRKZ291V3pkYWxpNTk1bXRpS0wwMzVOdm5MNENCX1RNVkU1dlZNa2ZfSndxeHZWZGU1aktiR1JXTEJpVGllRWswb0drWEg2QmtPVWhiSVA0aGJkMjBnZUNfZUtQdFNqMmhFQnhGcUN0UjNEeVdxanU4aTZSUVNOTjNtSkJyVTBWeXNRcVkzakF4NG5DWXBranRMQkdmSzFFNUtRLVZscmNjTlBNa3JIaEY1RHlnVG5KVkFTRFNVbGRPNHFTZWlLeExCb1plQ2R4R2lZcXgwdkw3dmFkOVlIakZ1WUJhZGYwa1htM25lWVpMaEgwZ1dEb3Y0QWFvY1hJMXA2ZHF0eTRMaEt5Y2haZGl6Z3NJdWRqS0FQYjZPcHNJTzhsRGVDNlVacDgzRVEwek1NV0Fnc0Iya3hkUW5WYWViRXJtTGU5WjNVQmQxODlRamVDOXJGVG5TbHc4bHpOVF9QVnZNT09sMGp1Y29rVWlqcHRibG84RmxQREpMZGZVd1RUdzR4Ym5KdUVYbnhScEpEdXlDamFDRHk1OVBKZHVVb3NZb21Pa0NSbElFNmZxTFhIZUZNZGx4ZF9rX2s0WlAxVEJnelgxVGZIZ2FnSkR1Nl9VU3NwZk1QRGRTaFNhN2FMTEhidURkRnB1NlRZVjU0aEt0eTlVa1ptc2IxX1piRWVDb0lwUGRWUnJyZExUVThRdDNFMk1oUnlwSkMxcmgzZExlcklob25la3ZIM0JhdC1ZTDZPdWpGdWZkN3dUS0w5SjhhcWZVWnpBdi1yNm5UZnNjVTZpVlhWRzk4blBTNWxSNktzYkxXMW9sc1hkVlZ0ODBremZYUVNoZkplRk5XYkt4TXhlZkFxdXFLNGNNNFo5dEJvd2lVQVRya2JXa3BMYjRKemwzWmprcW9abmZucWwxTnVPdlJUbE5ucWVxNGdYakJ1WmFRTlRWUEczQndXUnVua0w3elNSQlpTUFFDUFJKbWkxdmljc25CWS1TanNrQjZKR3JoQmF3em9Jek5VdVJIWEJKSk84TjNFQVZKTDN1ZlpXSnBEVF9PLXdGQ2JjZzJKaDJzRkh6c2c3Y0FDTkxRUUpRamRhWnhBbkxsX2xSaVFLNDJwUDFFTkwtTE4zbHo3YlJqSWY0U0JqeVRfMV9FSG52TGpQZi1feUJwM1RNQUVaSHFmekwwcHFTN19TdHpkaWNOelB6UkxJR0V0dk1fNVJYS1NZNzg2WV92LTIzLU9hTFRVQVQteDVJRUpQMkpVUzI2bTh1cGoxNS1nekpUa0RQTUdzZWdCZ1BiMVNzRmZWUmxPaVVfLWExZk5neDBRMU5LSG1FR29leFZTTDdwck1pcmhVU2tXeVpGZTAxdzduOXVlOEllMl9LNno5Sjd3cUw1TDFKUEhqUTdrN2hiM2RfUWV0TVRxR1pZbXA0WnduR0kzQ3pqTl8xeXZ6UDNjaURyY2k4RklYUE5FdVhIOV8wTG01TnhYa3FodWprbTFQN19vVVRpRkUzbGd2SWtzZDVudEVycVRlTVZYWEpEOE1rcXF6NElIOVFVSXVkQXpGVmItNGVaeFZHRVF3aWw1STk4VmdBSmprTGlXZWE1akRsTjRzb1VrZXgzeXlsUGNuUXF0WEdqOWdHaDBPOERaOXcwOFVWaW1rcEhGck4wQWNWb0lKUEZFUGw1LVBhSnA2NE56X1BhNVhobHFZdFlacUZXMjJ4YVV5MHpDY3duM1MtOGxna3ZXdzdkQzhjc1Vaa0NMSk91RUxlSDd4VGR0Sm1iZVV1eFdJc2NINDI2ZGRPSDlGYzNfbTNKUVdsOFR1em1CTkJRTnR5WWFGTGREWHNxb0o5REZzM0c3aUZlS0R3UHRCMmtiYUhxWTN3c3V6elNDTjdfbHlsLTc4c1JXTk5VR3FKaTdYWG9uRmlqRlBtbGpRd3V0Y0hicXprVWZGMGxOMWNQTUlQeDZYblVvZ21fbDhVRGYwSlFETnVTWjlxTnNDS3FMcXhDZVlDY211R0dTZTRwdGhWQzZ0UWVOT3NEemp6SnJiWXFybDVNZEFZZGVVMWJxOUpkc0phcF9tQ3NIY3JxZUFheWdxTlhXOFE2RHc4QWtfdWFyUWJVQnFldndSa3I3MmE1Tm9SQTNTWEd1d2hULTZZTXdfcUhGdFFWZTlHQTMxcEMwbFEwbWlKdTRCc0toTTFCZkl6MWtZbmgtT0lqMGdZbzZrdzdwUXdxRUs5eVhxOXdqRFI3d3NLRTN3eHZ6UGxUcmNOYkNyUmgyNUw2NnBlRnA0SmR1a05yZnFRSkJUUG82N2FrSWZRZS1BdVVfcUVjVFFGbWhjNXhpbHhnd05RQUYzTTl5cUNMa2RDTUNZT3h0QjFkSGxrZE9ocHd3aFRpZkQ4U1RsN1JOeW1HVkhBbk9PSWIxY2Y2SThvMk9iR0tCMXRCUWhrWUtYaXRrWjhuRzVMbzZvYVM3TG8xM1phQVZkUGhvODZ0aGtGalNSTjFtMnU4bUVnbHhYc18wQ0xuYVFfNmdfMzVxSlRiaHJRZU00WDFJY3RlZm1JNHN1UTQ2X243T0lXMFQzM0hHQUh0RlVEX1paR1VRMUVpdkVGQ2Vmc0Y3bVQ1MU0xYTMxWlRMcE9FQXlqU2NPdkVaS3NnZ2hEVTZ5Ym5sYkhJTHVjRnR3RmRsY1Y4TmZUNTFlWjNDMFRPZHN2TWRxR25aNFdPU0w3V3A2WGg0NEVmNUt2U09YbHNZNVd6YWkwbkt1aHppbld4eUdNbDQzcW1LX2FlS3p3MTR6WkViVkJodDBUNDF6WnFCRVdFdWRtLVd2eTdIVkgyYmtqcXJkTkI1TWtlWXB4MFRCMk1MeS1mOG5LbVdwVmZoM3NveHFIY2tBd1JEdi1lRjE2Zk11a3o3b0ZQemVsOERmR3E3ekl5dXpvVHdnTDAtTWhwbHZPalRTX1ptQW1neUNaRWZUUnExenFMX3l2ZVV2REE5NGJUbC1uenJ3dUNfa05sUWpLQ2Jvdk1SS0ttdjhGc0NsUE40RUNoR3hxNnZxakVpV085eHRfS0tiMWdzMFQ4VzFIaDNzTTQwVXlCZmRseWpYR24yVjMwVVdpV3I5S3V0TFhuSkZvN2NoLWplcUtzMDNGNXQydHdJTWlQTG9ReVlfTUdJTFV6bjltU1JWQV9zNUk4TEZFS3o5elZiZmN6LW9RN0RsOVJuQnQ2MFhjMU1MQk42dUhGS0xPSjM1SU90aHh5RmxwaWN0ZnJRY3lZcmVNenZ4MFMzV0lZNXBqeFp4emVJbzlKa3ZZS3dCdTFhbkxEZlVXdS1IUFI3U3pkYkZzUzJMZ0loSlFuMFVsa2VRRlNKc29penlUZ1RVYU9nNE90ZzByZWN5TXpKSjFjXzY1cXgtMGcyZ1BWQzlZWjI4ZGF4QVlEUzNwMFFvYkExY2JiZHdZWGxqMnlCSzdfTnNVYVptRGRHUGEzbkVNMFFvVmV0T003OW9CN0V0WDZPZ1JQaFlJYmlPWWRacHBjQ2x0a0dzOE9fVDU3c2tmcWQ5VWllbGxPMjhjYWRmaE9vOE5WY1gyTkQ0S3liMVlYcXFYcTFnV3ZwdGtNbU5ORE9Lak5lZFJ1RVlkSTVMRDUzY0UwRUNhNjFrRkFxN3FCUEp4enhUSGJKMzRZaHJRc3BtUTB6bl85VGpqcFkyQW9aaG5sQTNDZmw4S0hWM2dIMUZ1TEd3Sml0YWJyNmxUUFRNSlNPUlkteXFKWGM2MWpmVHUzLTBHbWJONHE1NDk0NHlUUjBHeTI5TU0wSmk3SHNWM1NTZl9fdkoyajNXLTVjNEFwM1o0YV9JSmdyc05VT0tUQ2dHdHV3T3k3UlhxMVN4c29sZkRwVmtjdURha0lRNi1uSkxaTV91WE9KdTNRRnJObzgzWTcwUWRRQzZiNmt4M3J0NWRCanVYZ29sb3VlNTRzQ2locFRTenpGcVNhMWpWY0pNX1NLNjZwOEMyV0dUbDJaeTd2aXhUNWVreWFFSUJyY0R2T0p4TTl4UzRtajhEUHp0UEJROGJXeWotUllQeDM5NkdyT2hFSWltSmpWWXFfWGZDXy1sanhTQkR5a0pfb2lDTlJiOVZtczZ0N2hDYVhBTG95NVFNTThVMFdwUF9aMjc0T2ZhM3RDcTlqVVUtUUNpa0M5VDZDcDlXTVl6dEFza2k4MFBLOFNiamlkSFRBb3l6M0FPMTBtSEV4c1dkTWREQ1dJMkZ6akhmVkxoOTJJUnlqcWJjOFdUVHpSUmMzQmJadkE4Nm1kTDg0ZTNtaXZiNTZCR2taZDQwQklvSHd0dWRjcGN2XzNJSmtHc1p0QUZwOEFfMWNhRGxITUpUWkxRR25id0J3TUZvc2ZWSEU5RmRodGRZLVB2SjBGcFZYVGYxRWNVUnduYWNGMjBSZDhlSVFVMXZnUVdJcW9nX0MwaWFCVVNhVmpoVkZCWktVVG1NaFhYSGpjM3AxNVFxVDFlbzFPbmdsb0pYMkttV1QzSnBETi1OUjBDeklSSHg1R0hMRV9hdGVrWmZvbXdGQ00yYjNDb25ma05VakRIclo5bk9wYjFxRWdjb1VsMHNTbjN4amt5bUNWQW02TmhYSUdpdVVqUndHRkJPRU9fU2c4b0lsN1g2eWZ4QmdrZFNNSzlScHhlQWlaam1MWWZudko1UkpoYURvamxvMkFVdGpYSW9CUXQzZUpjcm5yY3ZReWtkbU9XNXRYMXR2TWg1Rm1MTHdhcGRsTzlweHl3Wi15NVpSX05POWg4SkFiQkRPbGZFUzE5WFFtQmVKTms1RFFlRjFLLTJnQ241cko4MVRKMkdmRHhtRUh1RE5LSGk2bkRBSjNCemxob0NLX3NuMVoyRUNSYXhNaFdrU18wZXV4d0dhRWJIZmpHZUtGMTEwZk8tUnRJdVo3US03TGgwYXczeTU0ZHMxYkJ0VnVpNWhvR2JwZVA3Rk9UY2ItRnNkVkpJeFNfbTBleFdWal9qbzlfN1U0cGlmRmVoNTJ4SmtCUHRWUGRwaDdSWHEwZE9tLU5VMURxRllnSEVsYjJiUDFtNkZpRTQwMmRSLUN3djBDckZhdFVhRi0ydTdfLUxEVUtWd3JiUEZsVkI5TGZWaFhfUkpjUlNGTE1HSjBzbnJVNzd6cmNqbjZlUGI1SmNoWDZ4QnRfOGlrRXNKVnNDemd0NjNrSWx0bVZLR1llRnNQRWl0VExwNkRLTDJzRXRCZHZkbHZXMXVYNjB6VjBBNmgxa2MxMlVWLWludHVCV3RBb1FBanJQTk55bFpXcXo5bFhFZVl1Zk9CUHpUUUhpcEhTMG1JdHJzTkRkVVF4dVdSQWdUUkV2UlFRbWRETGJ0blNPSlVQSFl2UXlWZ3pGX2ctZHBLZU1nVVNnaEJ4UlViekdodUllc09DejRKUVZBcXM3bWEtZ1Y3ZlVTMWtudWhMRkJJWmgyVWxVb1ZSSnRxWlhpNW9GVFNkVWVnNGV2Nkw4cDNVWjJKdGQxd1pWck4xdzhoZzB5QWt2d3Y2VWczUktvaUFfZWQyeG9hUWNjRi1XY0ZFRG5saFhMckY5SUF4YUFvNUpyVlpJdmhqNE9DQW5MUTY2a3FiWnR2MUdEMDg4OGhyWjdxQUQ2blA5U1dxZDljSXpfcUtvRFF5QU8zd3hBWVFsTG9HU0VQakdadFY0NFF3RWk0VFZSZjZqTF9PR014cHVYM1NUcmpWRzliWXVMcjVIQmd4dTduT3M3c1c1blJwNjUtVGZzNXdKbWpKTURZcTRUTjJzT2ItU1hYbHA1clh2dEM3RlprWXRVdkt3eGNZQy0yYUpsUDZCQkx4V2VaTFhVamcwN3BCVmpRVFo2bGlLNUcxanlpNm9PZ2N5Uk1TU1dKYWZSOHhwNEN2SjEtMWtKemljeTI4ZnMzUVoyUmdRS0NZRGliNjVHVFg4SWc1aUhGaUZNZGxING41elFySDh5Nnp6Q3BHaDBMTTBqaU1nSUhVWmZxNmdaXzFZOHZBWkFwbWFNcFhYR05fS2VwT21PTGlZLUtsMm1sM2dzd1dTZ3V2aFdtcDl3SFNCekdMRUh0WFoxRzhWNmtRRXVTUk9NRzFFTEVUUWNSWVYxTjhBYTBHb2xrbG5YdVZTM0s5Vkt4NlMzMzd1MFNETWdkVjhjNHl5Vy1SdjBCbWEtcDRZdnYtUnlkd2lmR0tWVi13WFBGaDlPV0pmQTRibTM5bV9BQlFGeG1WOWZVU1J1bElEdXRoUGl4Z1NjSVdPU3ozcEJpRGU1dTljeVVYZ1gwcUdaSGFoVmNsNEVZNkhrLWhWWkVDTWo4aUNtcVRBbDBVNTI4c24wNmxyWkR1LThsV2R5QUdSelVsQkNpMlJWemlWdFZyNHZJVVdjQmdTOHJNbUE2aWJEejRSc0FqUXN2Yy1HOG8wVXR4dlRFdXRxdHIxc2ctMVlfZmQ2eE1zdmlTRG5yVHI4eXlKUHdIcFJyQzBpNTRIMG81Q0xaMXZ3U0VUNzlsemwwZHQxakRMR1lwS1RseGVWSnQ4SHpJOWpXYmwyU25yS2ktWmNiTHkwRFdIWGV0RUh6RmVORkMzYW51V1VEVEhndWxjV0JiandxYXJrSUx1RHVkQlhOQWhvbmU4dWw5UGM2NlVnOUhQc2daaWVkaGFtbEo5Um5jS2luNGJLOXFicldKZnhJb0xJNjFqWk0yTW81ZU9kSU0yUmlqRlczV28xODZyTVdoejU2eUhXVWJXU25oLUFkanhUT0RBcndVR180SVhCY01lbkMzRGJlVTdqdlZDVkhQWW1xSTNWdGphOXZzQzZQdV9ENW8wVWJ3ZkpjQkhNOFlyenRZRWFPaVZKU0V2bnRRcWc3NHZDT3VfbXg0SzQzdlJ4RXlUV3BPT3llcWl2YVZHTFc0eUVLT0NaYllLUTZfWnJPeG5Hc2ZVZVpsRWlNUms0OU05NXpVWXdsOHI3YmoyVmllSWR1dnoxQWdlSVNEMHp3emlPRTVUUW5nOWtLQ2VMSFN5WDJBdTBEZm40NEtSMUZhNnlYTnhxck4yVExTU3QycEcydU03Q1p0ZmxYRnVsNGFYNHRTYnZDNkVnaFZ1eFJCZnlwVDhRcVlRQ2k5MVY5a3IzQk1Cb3FwRTFaVHpTaXVaSERRbWVubjFzcjd1WkVmWnVlRUNZWWFBUnlSWVVsV0p0N29NRmZjMHRJbWNzS0wyaVVCNGhMX2RNUkNLNWZPZmhMWFkxN0gtS1dCOHdKRWp2QkhoVlpvZGVTa2Y0cUFvRFoyN2Zxc0ZSRjZDQVFjS3JpeUdCTTdOX0tGTVlmOHFiLWk2bGdzVjhlak1HR1VvS3NRNW05NXFrbHMwSFZpMEhlV2MzcmhUMDAyZERpbnF2LTE0UHN4dUdWc3FqcHVKX2NYYU43WVhBcnVTdzU2bUFEcEtXX3FqUlZISlFrVWQ4VzJIUlhrYmI5aE9XWXViZzkzX1lKMl9ZNHpWUmR1ZGRIQVoyOHVPT2RpbC10dzY3Y1dla2hUWVROQm96cU5MUVpmbEM1am9rUlFhN21MaWRoU0g1VkhRdG1qeFJBbUVUM0MyZjZIdHRFb0I5eU91UUNwQVZiZjNSZzhuUU9KUzI5UDQyamlZLWZZbkpsSkFhOVV0aG8tMy1kYVh2WndhUEhOZjVYWXVOOU9xQTVFNF9IMUk2VVpxTXl2cjNXTjB1Vy1DY29PblJ6QzN3U0pXYkM4Q1pUSFRDNDNBNE9Yb04xMFo1Nl9vQ0JWNjRmck5zUGw3Nmw3b2RfN1RSODQ5anJ3N1FxRDNUQnF2aF9BckVHWDNWRUNFMmdTRk5kUDFIQV9HTjVHb2xsNWZBTkhrQTREOXRYUkozbTBjNFE0WGplWVBtOXJpSUM2ZzZwMWpRb3dBTzdLbmtaVW5LSDlHWkdXMjVqcklJOGMzY2sydE1NRWp1Vnk2dXlEbzdKb2UxakoxTWptR2VyOVNXV3YzXzdKRE5DY3YtZ0FkZTd0YUhQcWd6MHJxRUoyQU9FUEt2d1NFVThDNjhUclJ0RUVpc0xSb0ZqTGc4aEdxX0YwNk5oVV8yWll4R2gzRC1fa3lCMHVvM3Fvd1NWZmZPWkJfeTl3eUxlZGR5TFVwcmlHNHBabExVVVFWb1o5Z2Z3TFpVUjY3eE5iOUR4blN6MXJfdW90VExicHdnaFpRekpwUk9oQVVTaFpmWDRicHlvYXlxMUpaZFdFRDZLcFVSN3FSMnNLbEFyeWdEX19QdXFzUjNRUGZJY0pnYVpJaW1QdUlMeHpZTWZGejRBcTZwbkcxMmhhV0FGcTB6Q0RQVjA2ZWx3LUZDeU0xTjhrSkRHUS1WTm9SczdQc0x6Q2hpdjFneGFWMXlXal94Wlh1T0JvMFFHUU5iSmRobFRfVUZKS0NXa3dvSGNSMlU4NUV5emgzbmZSS0JoMWJZQ3RycmlUeGlVWVM2QlZhdEhmT0YybUxhc1VTOXE1djZuRWcwdjREU2RocGd2azhaUjJBWG56TTdhMzdaam5seVcxNm9Xb0xFOV9iYi1fcF9RdU1oeV9VMG5jc193ZWllVGkxUVZkMm9JRkE1Yng5WmNzLWZLd2hMZnQ1ajBmWE5VbksyMUlxcEF2dTNjdEk3bGRwLWxFX0d1Q3J1LWp6WlA1VUFMVTQ2SVN5NEtVU19DLWJ3NTNzcjVyQy00RFhXeVBfUkYxQmJGOW5icDNWeUQ0cnFxbWtBbGFsMWgtMkxEdzFUZWVQWGFDaUNDZ2w4U0lxbWplUlloWGcyc04zV0pDbDFGV0VLZWxHbE9CdVhFaEhKdmc1LWZsc3V0WkJ3SmxKWG9pdDN2N2VuMU1XZWw4V0dLZ081Z2FzQU5TX2t6a2hxTGQzR0xURVVDRkVZekdjS1NXNmNqMFVhQ1JWR2Q1dl95cHgwWE94QWdOZXpsNGE0dWNaZmxzb3pIZVBhMGJhYkw1OXJjR2p3UkVFaTgxT2t5cC03ajJEN01RTnd4enAwVVlvVVp3TVBDYzdoWHNCeFBpLWRVNGNiVU01UkhIdF8xQnNwem1TM3R0R3YxLVFyd19XTl9JbWRCdDExc1BiR2pmcVNxb19TM2c4cFlsWjlBeEdSU1BJTVJucmZWZU5hMkg0dllMQkg5dElYakFfVWFZZWw3eTFwcldpTmFGOXVuOFQzeFZLQXg1VXVOVlNqYmNJUVR2YnJ2OWZ4clR0MU90YWNNd2QzSmx4dVc0angzM2hxWWZzNFpzQTU4Mk5XdWtrQmJiTHg1NktCWW4ybUpPOHoxVFpFWDNiNWg2WnpNUWc5UDhtRVJLVnd1ZmNMVS0zSFduQ3l3VFBPa19KZ3RXWVBta0t2aWxMNl9mVnB6X1JDMlhkQU1RbDRMRGxsNnotVlFZRUkwTHdHU3BDMHUwRFZNeUxMZkZGYnlxaGExNjVFajQ4M0FvdlhZWUhNVlN2MmpkeGFROElBNllwZlpQbWtEQmhqRnBpSWYyUEQxNDBpU3d5VC15ZjRWRl83X1h6VXZyUG9NcVdEb09sSzFGU1hVSHVKSG11RXZ0NzlUb0pSd2l3YnhBMGpIY0J1b1lDS3BYaWU3eGc0TldMX3VKdmEybHlxSXRaTFV1aWkzdC1PWkZQTXVwZi1GVFVGOHVZZjBYUWFkcndYeFQta2hIU1ZIOS1WZlJJM3AxcnBQMld0WWRTbXhNNTZkWGVYTVBQczNzYjNzaGs3N2E2T0RiQ0RKbmhGN1RfaklzR29xa2xIXzM1Z3RmMU5NczNWbHZmd0s3LVg0a3NhTU1DbkNqLXI5ejBpMzRvdjVxVTk3RllLOTRFbnE2N2N6THR1c2k4Z3ZsTWVLb3E0X3M5VERYT1NDX2hBdjUxZ1BxNmJ3MEY0NWhldXVWY3kydlBnS2p5SEVsN2gzWmtDYWRnZ2RVb2w2X3k0UjA0YXJ5Y0U4Qk9ySWY4MHdsdVpuOWpMbEY4ZVF2WVczblNWc2J2NTJyZVFOa1h4V1BveGlaNDlZSW40UENHaGp0dWpuanc3UGRVS1ZQRUVPQ1FaRW9pcWhld0k2ZTNvWFNCX0YtQ1ZabS1iNkt6cUI3dGlRbWFGMjRIQ0o1WUl0UlNYT0I0d2tadzBGYWxtRUxQV3RMTjdiUVZBX01vbC1NOE9mdmZVLXU1dkY4eDNLQnF1TklReWJ0b1JuOUJ5Y0JqNGhUYzJ2Rk9KcGZNXzM1X0xDTWtuUFE1UnRwOFRkMTJBVmtoY0diUXZQLTVPYTJwOG1TRUxuLUJ1Q2tRdWZFc0lqOHlmWF9QNTdCMG50V3VDdG1BNDd5UkFvbk43VEg4UVd1WU9vbXNudUhDclZQbU1YM2F1cnQ2eGU0Y3ZrZEdmdmlGZnpXcEtBenhCY3p5dno4b1R6eTBLZDIyZXBXd2xkU1BZT1VRY1JZbklzS1BaRGRQNU9RajlVcDF1LTBocmoyeUJzbkk1TnI5V3hPZmtkMFJBVGhtd3ZINENWZU9hX25hNG9HakRxVVRuUUZPcnVyVlNKaVhqNk5BSmd1U2NIZzBVMEpTNk5hV2pSRVNHRWI0ZGJMcEYzbTVzWXp6UlhCS2MtMEhQckM3ZXFxSzh4S0tWb2c5bmMwSW50dmJOQVl5dk1RbmJqMDBORHVabVBzWHNpNWJqeXJoZUc0ZkQxaURUZ3lGNEtWbGN5ZnRFN0tBdGtYOHZwZC1xbEduWTczZEExWHpzTXRvZXZwUWw4ZzhER1JabXFaY1pfQ1VMaFloYkVlQzAyUmZsUlFPbFM2a0c2V1UyaVNiVGVYZGl0by1tS3hNcm5aNnJPNUMyTXg3TmR2TS0wYWlSUEp6OURTYjlsamYwbl9wVDRHeWljMTJoRV9Bd213TFNDTE1QZ2xodWlpcndkMWNhSng0U2x5U2FVbWl3eUliUHdDLUFBaVRQVU5ueHNOT09sUmpVZW1qcUpmMUMyRHpyWVc3OHFEakY5S3V3VmYtX3VCSUxkMEpvanFZVTZmYlZPQkFONm5fWlVmOFZNZjVlOWVNd2E5TF9zMzliUUNLZEtoRzJtVlBpTE5XRklGX2tvSnlWSm84VENhbk1QOTNUUUdUVVZwcXI0ODhrMHh2NzN2SXdhNkdaWXRWaUlFSTBWMVRiQ3pSLWFOZGlNTkhqN0RwRXJkdWFxTWlpM05YZ1lQZ0wtT0UxYWFwbmZ6OHJsZWk3dW05LXNTQ3ZGOW9hVEhYM0dKcXJOZl9VQnphU2RKRDFxWjFHTzRrRzFkTlFIbUlqelJaOU1PNk5Dcm1ESzBPYndKZXE4aE83YzdjVlNTQ1lWUFl5czR0bzRQeEpHM3VYTHd2WnItSUN1RkZMLXVmSFBqdUZvY2VrbDE0Q3V5Z2ZWaTI1eVZZMHlDNFR4Ymo5ZndvQTRFRHlEN240VUoyclFoODNoMmxTMk1kNUFYTmthVm5STW4zVUc5bU5lZEYzNmxnTXV1RUxDS2J3WFlEbDAtWFpncndRYjl1cElmVHBLNk9EV0Q4UWpnN25LYXFzaU5UQlllZHV6X0hnOXhLdnJQWm5vZnZQT2U0cDFXUEhUWGFHdWhST1FRUDMwVGozSl9nNVhIdkJYYkVJRXVRWXc5U09PM3dqT2lQOFpkQU9tTXUxSGFYZE1Va3Vkd2k3cVp0LXV5WmVKeEhZMXM1Ry1lNjllNUtCeTIwOTM0VVgxWkpNZVFkQXY5TGg4emU1dFAwUVlQQUQtZGtFaXprbVJXenZmQUtjOGdIc0hRQThrekJiX1RZUkRGV1VKTDVvdWJsdmk4dTE3Nk5RX1lab1l1eEkwVndiSzJXVFBIdHQtdlFWYk1rMmd3a29nRjRLcF9YZXI3bWFEZWVOSG4xQ2J4Z1dZOFRBeWZhanNYTFZUQ2tiTC1DQ09vdmxfVmc5V29OZmlFazFEb0Q0Z05PUnhTYWc0WTZUYl9ZTVNqYmRleURoLTJYeUIzQVdJNHNpS1h5VWJtUlRxcUZoVl80OFhMaUdlSzJuQlo0OWZjcm1GVGpXMGQxaVR5dnc3X2Uxa3lDVEZjUDE4NTZocmUwQ0pVcVhZdXdpaU8xYl9QaUh6dnE0UUVHOW1zeUVMQmJpU3ZhbXdnR3JPU2duQjNISHBFOElsTWlUZGo4clNCTEM4b1RrQU9jWTVxNFZ5T0pMZGJOUlFOZ0hZQlR3LTBQQ3paTlhfV3RoOUVlWG1VSG9wWVN0U2xnM2t0ZGtIZHZvb2tOZnVhUWdBUzNJYVpLVGFUYU5CV3B4SGhDMjJKdjFDNWEzX3ZfUUxqcndoM0hPQjhqWVdTQVNyS21MdXRIUnVkT2lPUVU0bGhiekRxaUpReGVVQmotRWw1QzUwWlpjN3hoWjJHMElrSVJCODA5Yzc0MXg2MGVyQ3dDcVRPdHF6eHNrZnBlRzM5N0FoeWF3M2FjUkllOGt5VEpuQnNuLUV5LXlTMVJ1NTJwM0dQQXJjRUN3WVBZcXgxM1V2VU1aTUxtWFdYN0NNRkZrVEQ2R3YzS1NXRFRkUW1TLXREd3p3TmpsNVpqejJQQnVwOVZhYjVlaW01cFdwMWlxbTF0RGdaZXF1RkFrNW1CaGo5OGhBbEo1Q2lMeUxJNm9xRlQ4TXk4dWk3bmg3U0lfUFZOcC1WYV93VjdmYkVPcHVja2hoNXJOQ2NPUmZGMmF3QVJ0U3J6MzB6aVVPOE9jQkl4ZzFIcDZ6S19JYm9JUEhZTnVoaUpNWWtBWE1uVHBsRGpOVU1fOVl2QThWbTlqMzgxcWdnS0JzRk9lZVBSMmFlekZpQ19Qcm9ld3dGU08wS0FEXzVzb093Skg0YjNkaDFtMGJVa1ZDX2JWVEVlNkhwbG1NWmhDS1FvTV9XNHJpUG90MHo5RXZHQWtNR3RtNmY2N0xueU5yS2hCT1d3NXVMaEQtVkNKdEZqdnQ4X1pMQXB1YXV3bjlyNGNPUEZhdXluTXNzRFNCT014LUx2QkVPcEh1N3Z3ZTJEX0QwYy1YLXBKNHc4a2JHQVRQZ05fdHluMHhTeGVyOFV6WHhtODBDY2d5elltWHg5X0kzalJYbFc0NXFfU3BqN1psRjdtX0N5Nk5UY2hhRjN1NU1HSmZsbTJrRXNKVjg2ZmlmQzJBSnF4WVBINkpsTGpldG1ma3RULUZSaTNYdkdtYjdwUnVkQ0tZVlBtYklHSDg2eWdkU0J5VDNpWTF5ZDEwN2NTSjQ4Mk5wVVlZLWZtRTl0VUxQWkJXXzc0aUFKWElOaElDb2RqWGlkN3ptRG13MFFQUHFGM0p2ZWhzSnJTVU10LWEwazlCRjRTa0xNcU9TRHE4OWF6WmkzWlFKTmpOSHY3V1NFRHoydkdUeWhRcDJLRHQzenlpNG9NOHlNMUlxQVBOby1LTWJBbFEyRVlHcjhYNHlFQmtELWJvbVRSMUpVd2lPLXEtTmRJVzJBcDdTeTRSazZoeG5fRWJHd3BCckRvZVhrNjZSUFFXcmVBMk5BT1ZQRjFpbGNSazZqMDJJLXBVX2oxNU1Qa0MtaTNPd0M2M1lFNHdCa2tlcHFINWdqY0dlem15TC0xT0k5YTV6S193ZVNnOU0tV0oyakVsdVFadTZnV3RrZUxPM3B4MmpwQ0JPRXBjZ1lTTmx5c0M4eWJjaTlDSHBiTGhKX2dORy1CNnFCNVhhSG95Nl9YVnZfZXRiM29KbFU2RjIxRVlEbndkaUFzQWdEeFl6WkNxaVlhRGR2T0thRzUyVFdQOTc3aU5keGtNZ0xleHY2a0VDelc1SkpKVDdCX0JZazZiWHBTNmd4NS11ek1tVkt0c2tMNWF0ZzJ1R1BxemFjVVlSZ1pBa2Fac2k2cVB5Y1FvcUpyMmJnNm52YjZ2R3N5aHJSb2R3MWh4NkZEZ2ZwSmFETWVMWThFNnJVWjdZcHhDQUZEZHd3OHBTYThqak4ySURsOWtVVGRVaXpQWUdLdmxOSW5aM1BNVW5KTEVsSm1VcG55Q3BlZ1h1SWktbThDRHBUbzR1aUp2T25CZ0Jaa2NKMU1LckpRX2RGbHd4V2p4TUpmMzNpRFpwUm9nTzltcWVOWVgtRzdsbXRFbV9CVFpIaVRQSFpqNDliR0V6MjJuNTd5bkp6SVRlYVU4clRsblRaRGZ4aEJhdWpCWlU2d0ZYMlJXT2liQlhmY29qT0x5ZWZ1NzhNeElzb09mN1UyZDZnRTRnTXZIbTJPY2pUZTNGdW8yUUZva1cwNExpZWRxbmNwZFV1Q1Z1aTFVcEREUDhPblZtTl9udHl4UEx5bzhuVjJUMWVNaXdIOUFqSFVubVBnUWVBRi1jVl9sV1o1VkJZWmdfclJic0F4VEZmalhVVlNIbVZnNTZLWE1xV3ZFUTBTWW1RVzN0Z09MUlkzakIxVzlvV1VYVHR2TDM2aUUzdmU0S3hOdHpWeF9DUVJJMXo1VGY5LS1SWG14Rkp0Mk5USUY2d2dNYW5pUER2Y0I2U1MybXd5bTZWQXlVX28tdk5QTWQ2c29sVnBLdnJZdHRHSTVSR251a2ZLVnRSaDAyNGFMUzhOajlmTUc0d2tzXzNuNzNQX1R5N2hRV1lIVlFQMWVyaEliZ2xmSkF2T3JNWGVEdFd4Tkh4RGtWNDlJSTktSTVHZ2JkWDN0Q2hYM1g3ek9VMTI5MEZhNVczYndaaGxIS3BVTlVsaGxMUlRSTThrYWxlSktVeEZvY3Y2MEYyZ0FfcmJHV2dGX2JBWWc2eUJDWXlPNGNTSHVQbUx4bFM3eTVqZGFDU0ZpaDFWNHNUYnNvZklYU09ydUF2REF5SW5sWXZHUzY5TUF4NGNIOHo5MXdKUlcxNndfRHRqU0JGQ1FzeWp5X0NuQ29NdktIQ1RFSS1ZN0MxU0huMmdnRWhlZmZZYkFZVTRCQXQwTmFwb1M2N3FwNU12cFMwcnFoWXdvYzVBNUVhZ0tROF9CZXRMbTlkbldsTzE4c05sRGgwQjctU2JHb1FKWmNfOUFkcFNSclNhdUdqalJIUEVwUkhJTU5jNVNBSmhlNzQzalpmal81SUdaRWRydkdkLWpBRXZHVnRMczY3STlQVWRoSHFxQTlyLWtZSUdUcUtoOEFoajRmUEZ5TW9xQTZBbmF4T1JlNDRUbEE5REtKRHlRMXdsNUx4Q3J4SkZEQzNSa1hRQVYxZEZnM2VLWFpnYlhWYnk5VnhaMFlhNFp1TkltcE5YMVQtYUNqTmczZGwtOUhoeEttcEtnRGoyWXZyOU5qWWpjaUNQSDgydVBuSnRsdVR1TmNVaDlMTTNaSDgxUVdSQi1ZQWRoWm5yOV9RRFVfQ0NheEFyMDZsTmoyXzNfcVByUEdCM0tqZW5GYUFtck5OUmdEMTFHaUhzdFVVTzY4bENiTW4zTHdkeTJlVW9EYTRSYzB5a2hvckdRUTlzLXg0eEoyVHJGb3hfbGZTZ182WDE2UE9ZNWxWMWRyX2V6Y1dhSDFxbEMtRVRJek5pb2dHdDFQN2g4b1RUb3dKRTJWOC11d1VXUUNaRExBcXNXY2ZKcElyNVk2MXlrQnAzV0xlRUt0SWZUeVJSWEEzazE1MkxXUXE2RUNVaFRQb1V2ZjRKZFUxdDd5SWJEakdHVzZUbVU0alhFbkpJV1dvOXJwZFRldTlrSHNYa08tQnRibzdRWUNFVFdlY2NvZ3lQWjZWMnRBVXFyVlVKVnphVWhPdy1QSVZQZGl5NDlxREhYSGRKVkNYTUE2ZUNOR3NNWDM4dWljRGl1S2ZleUdnQzhzb0QxV2xfNF9vTDZsY3I0Q0QzeVloSzdYQlR2VG9VM1g1LVRubVJ6RDJBdVh4bzJJNTR2UDRldmJ6NENKVFVDMnFYRmxGbjZmcU9lTHFUOGxqbUhHTnU3Q21mU2NSZXBfekRQNk5iOVYzNnVtRGJFOV9tTFl6eGFRR2JHdDU2d3NjOEhsQ0RzazJLNXRsRFFGNzJ4bWlUQmtiZ2NFWlhaVGJ6d1lTaTY4UUhnVGpyaWt6VDFQWk5idkVKNldTRFJUX0NvcEtCWkQ2U2pBOUx3VmVvWExGZEloVjBpRGJ1aHFlcE04b1JzYmd0WWxkQy12SWtheExpdWNnVzYyVlVfVFIzTUZGckMtZndlcUlodHR3N3E0ZFUxUXVmYk1FNXZqUVZ5WlFvZHdfcmRId2tKNFgwLXlYS2YzV3Rza0RTa0pBRGY0akUwT2g2SzRuRzl0d3Mwbk90UThXY0FVY2tLNWltZkxaZVR6NURIQkJUXzIwMkVqUG5zelNZc09Mb1RoYS1oeUpla19hd2ZDMW1JdnBJU05seUx4cG9jV09URDhyYy03MjRoM2FiaXpNWlBrejlWXy1zRzhkcEc4SDFVZ3I5dUtQM01Tc0FWcEY5bzk3bTJiSHRxRnhLa1J2bkRWR1dfRzNVTzBJWnZ4VUk5N0Q1RGQyRFNaOHJjN1B5RHlVNXVjY3pPTldhRFhTMTRoWHZHMWZkVXFVMmRYb1VqUTVTdEYxbV85a1poODhpZUhJQTlBWDlUbnVQd3BQV1hBX2MtZzdzSzdBajBQNGVDQWpYYk1hTWRPVFJqbWNzTkpIbVQxYzdEMGIxaDJwenMweVhEVi1kNHdQRUZ3ZkxOSXA4MkJqOHFvSFBreWxkTmo4ZG1VYV9ib2xqSkFpaTB4QUFybGYzbmNlSHpqX0NnM1owTnNRXy1xaEdWTjhleXpmU2lfcVRXNldEWlhBYTVIVzJ0Q25VSkpTek9DNXJ5QVF3OEcxRlVIM3A5MklESHd2VGZYVVl5clpWdnVYRWVBN2tYckhKYVEwd0hMOWFhYjB4ZDlfNmtIUlNVeXdXVmZ3eUhHTnp4eW1zR3lCTnlXaE9uVDBhaG9jcnpGczduT2xzRTVzZFotZjFybUtzemNUZXl1eWl4ajd5bXdpY2FRRTNBZnBUUS1TVnhBN2hTMzlwa0ROQXlOYVBfQ2M3aFA0R0w1NDNVaEd3c2U0T21uRkJNNmtEQW03VExGSjQ2azR2bGItY3lrQS1vYURldVJKUjJXN21IOUhWcVEtemNCbTB1aVU1N1NWT0w2VkZqNzAxZHdFSmdab3pLRThuZWgwWUtvdTVrOTBZWjdjZjRYTk9fLWZzd2NXWFV1ZjJKTXBlX19Ccmh3UVlKbTlBU2tLbFFhS1k0Yi05dmNRam5HVWdKNXk4LWNmQnJ6TUY3WHQ4U2szdUNFQTdvTnA2T21rUGNTTUlBRC0tdGg3eVJwdDVnOTFUU2FJQ2lQd3MxYzVGbU5COEZsZkM5MFMtb1JFeVVsTWZZRXMyNHl4RXBsa2FERXlDOHROVVlTWGJUZGFwNDNfMWhWQWktOV9YZ24wS2pZSGZWTnRCRm55T1MybXBXX2NpZ2RQeEVfQnNZeS14aGJETjViczQ1NGRVbUlSa3VoM1hlTDMzQmJwbTRzdGN0ZEJQeWxnLVRqRG9pTENaTm9jWlNxTXRYdXlPVlRHQ09fUjBvY2phUzVzMldSQjNIVXVXNTFHS0o0MHBmSkUzTUZqbmlpSlN5V2NweE5MckJZcEs2Qnd4SlhnZUFwaENiSGl0SHBCR0Y4V2trWUM5SURCQmJzV1FGTHQyVnU5Rk9sWXRzX2Jkc2VBNjJUSVQtbXRDSXJacFhOTGhMdkt6VXhIVXEyOExqS09MLUNycmlxd2JMc1VGc0hfUTdHQ2FhZEZGcW5YN3NOR2dnajU1NW53eUgtNmlMZlB5cG9hNC1BUlFjdVlNd01fSlZOdmpKUllneUFleHpjVHBoT0F4Tmo4UEZCWVlYZlotRDFVS2poOTh3WFo4Wl9wT1h4OWYxeWpQU1A5ekxaWXl2TkV6M1dKUHMwT0FKdy1qRjFnN194b3dDVV9NUXNuQ0VOSnl5OHVyZVNsZ2NPcVFGLXhnWHRPdGtUQ2pYMFZxTURKamRGZk5WaWM0YjhCcDVxamZDUjJHWlZQSXEwS3N6dDJrUXVJUWpIY0pUM1FmRE5ic0p3NnFmbWdqVVFFM1YtVHNUWG1XMWloWXhqTjdTZkl3UTBJSENTV1gzVjBWRVRzMERuQ1ROcWEtOWdHNE5pd1g1eGZybzFralJaRWV4OVZhNzR1Q0xUWjFEdk9KTUJsYTM4OGdCN1R4b1BqM3hsN1Z0SkpvWDJwZFl4ZUx3SVRzTVVxOUdpSHpLUVBUYklnUk5jTWhGOUNDazJOTWpEaXNXOUhJSTVFU2tlX3JkLWxIbkRGdnEwQzBBN3BvcXZmN0ZtTzRNVGN0UXhUM3pTT1N2U0F5WDJXRWxzV3FCMkJEYmJ3T0tadzlDYlhWNkVzNWRYV1liWWxqNVFXazBLZ2YxMVI3MDBlcGRZcDEtSEEwWVdiWUNpdmM1aTRYbDRVcTVuSTIxZ0pPd2pvSEt4TzJyNUM0MmpZMmR1MW02aExCZlk5c29kWlVzUHFvZ0tTWWxFVWZmRmRVOWZyRzlIejg4ZVJad19pMXBxWUE2T2taR0Z2a1Fzc1dPWHhtZWI0YmdRSzMwX2JzUGFxamVXakpaQ0prTDNmN0dINmFCazllWjVvX0dJNTU4dWpVcjdwb1RHc29wQU5OSW91Vnh3dm1wUkp3bE1yM19UbFQ2cndNcVZtYXgwLXpoX0dwc2VfalE4VVR1VWxWQ2k4WUpQX0dxTUk5bFlZOEZWeG5aTGd6ZWJrM1o1M1pTR1hTV1NWdndhMHpuMHdteUNhNS1UbVpHZlpGQW5mM1JSRkpjZEp1MWlXa3hKUjZPTjdhRFhCamxsREI1RldMV2xtLVBIV01aR3BZNkUyUWRteXdCUnJ2NktyTng2X3Y5T3M3SEE5UDJfWVpPU2d4QjBKSGtxYXg0amlZV3lQeW05R0c5ZXBLZE5adF9tcnJlSTNPcXdiQmdZc2xpcEFvTlVOZlN2LS03LW92WWpzNUZsRUZEMEk3akpHclhzSDZCX2xWbGFOdThtbHhfY0NqUzRRSzNyQkZvNktfaGNDczI5Y1RSS3RNUURPaWZieU15c1otZnFhOVhZcjliOWV2QjMwUDdETFNiUmZRRVItcENTMGl4QnV3Vks5Rm5JcUJFSk9wNnJHYnkxZnJSeGVpS2hWb21odGtWMmhoU1dWdndqdmIzVHVUb3FNdlpXU01LaTBKRkxWNklpaExmckxBbDRWLUdQUGZ6Y3dzUjdMdUR3NTg0WTdPcDVrRVllN2pRR1dQTXpuQl9oMTRBLWpFVDY1cEdWNDVGdE5JWlZtUXh4b0c0V2hkSkRPVnlJT1pWWV84Z0FTRXlmUUFydHNJZXRZVU5PLVBpUnlQSHJNNFdpZ2ZqLVZ3cG56YzFWTWRPS3RtczdvQ1dWSHZEMkVuTTZRWWQtNTgzenJtZlVqR3BRMU92b2pCRlhVNXlnLVVxTUhXVjJGRmVZQzZXXzB0bVphMmdaR1cwQ1hjamdaRGNUS01KSk5raHAyUkJSMXZta2ZDYVF2VExrUl9rdVI0d0Q3SnViM2p0WGI4WGpKOXJ6N1pBMnQxWGtWNWFRMXJXSGRjNWZjdVM5UUVTZVl0OUpRLWR6MzFNQWEyc0RZNVRFUkwtai1BN0I5S0pNdEl4Uk4wS20teE5KSTQ4U1VzRmhnMExUdHhzS1ZiSFhwbHFBS2ZpUU5nZ3Jaa1hQc3M2M3NBR19qa3BxbVNZdU51TDVQSVh1djdpdE9Na1BTelpfYnpWTnh0NUlQWkRFcDhnQWw4QzZCQm5sSGtsejBMS2k0bTBfSlptcXlyUzIzbnllb2tsbk5jOXl1S2M0UkJjMDhKVW1JWjMxUXpYOWphQ0FxQ25zb2hQSmFVVEh6ellUWjkyVDhlQ2V0d01yU3htbVYtMWoxQzJYR0ZTdW5ibkR1VTg4bWZnUFpKV0ZoRVVPUmFCOG1hbkpRMWhZejhkM2hCaHdDSnoxQjBTbkdJdDRkX0JITjZETjc3alBzMHZyenRaM2ZQZlFOTWRobXhQaGVvSldIOHZ3Ni00ajd1LXVqa1dTSVJjRUtIWWF5bzNHZzZYS1VpZ013N25IaWozcEVBQXMyWW1la05YdFFPU1p1ellMTDRpOXpUMTlkT1FrUWhvZG8xUXJETC1KQzJSWllJemJpUUR0aEtPT2NjMlZJdDdqZDQyNmdJcWdPVS11eG42dFJ1T0dFXzNJZGtsNTJZaU5SaXItZ3otQng5T1dMQ0dPUUhrbjRzWjJTZm9CZjc1RDdiVUZjZGNGdS1PX3hzX2xFZnFibTZndUJwVlZIc1NPZ18tTnh5MDFtSTJoZHdZRVZqekhLekYzS3FmbEhnQ3FSU3U4SkJXNjY2c3BDVHF4aF9FRndrTkFMVEd2LWRMa1NJemdFbnVVckZESXVjMmhHYzZ6ZkF1ZGZsYnZMZFpVb09WNFpOMGZYSmg0YnJrQnhoUUdQSndDM1JFaDZuWDhCaG9EOFpvTE1RRHJfbnZ2bW1McWxNNFdYYkQ5V25mOVgweENzWjB6eG5NNVdycmZ6X01ZY2taMUIyQWNFcDFpTklfRy1mcDJxc0FwUWRfRkpwcU9HcmdjRmtPWTBqYkdwN294T05VdEVDa24wQTBxczFoNTZZaFhQYl9xNVAzRWM5TmhPTVVvTmsxN0RUX082bVN4aHR5Zk5RUmFQS2xfcWdFcTB6bHU4STVTNFRtWGZ4aWR0QklQMmZzWDcwMDV6YkhXX0ZERUZBTVRKX3VpWUVIVTU4a2UtOUpHWjZKYjFUWGhnTUU2Y2NZMVRmYzY0QUNYQlhQdU1aemNmclB0akFzM3IxeG5wU2lZQ1MzTTdwZ1FUZ0EwNzRNd0tUWFVEWGRIZl9MeFFKdm8ycHR2U194S0JNejUyalhCcWFPN253TWRlclFiWmlsM25ET3JacWZha0Z0MU53WGFiODREcFJVRkR2cFVKaXBOMk9Nb3NqM0toUVlDcHdIYUYxTUVzVVFLSVdDak9jZlkwWFN3RUh3MmNycUNCVVRCWGFqd3lsUDVZOEFYYTFGTXRyTF9oXzdldkhtalJjREhrdjVGNXBrQ3g5ZkpHR01HZFdfVlJLMlNXblhqQWFsaF92QzZ5Z3JFWFUtU0tWanZ4QW5WeFZ1M3IzbEo1MXgyelhub3IxVVVQbGZsaEdWdEZxRTVDMXY5TXFIVzIzV29ILXk3NTJpdDB0alVHYjYtS3E2TDFkWHRhdThkZ05rdlZCRjdNd2poakhWUzZCd3l5YkVTYXpwY0tla29LbVNNTHFoRzQ4emYzUUw3cEFnV2hqRU5EX0wwTUdjaXkxcUxZLWMxRU13a0h4cUpvSVdhSENrY2hXZklWbXdfUkF4VnQ1NE5MZDJhcExCNVRjb2dFeGU3Yzc1TnlFTmFnRGJ3UXgybnd5b0JuYUctQTZJdDNSYVl1R0xlVllHN0NadFBmbFRVV3ZfcVgwR1VFMU42YXJEQUtka0VUUFdwRFVLT1hlUE5tMnFMTl9pejk4R2JJSzBjamRUbHFqRkdaM1pSOXRnaWtxNTdXWjAzd3ItMUtxbVljempIOEZEZWZWMVJ0N203cTgwUkRLUWZ2dmFjSDhwUlNRUEhsYWNuZW95dS1kd3psWVBiVkVqTzRsWjNiYkhVZXljemdaN3BqUWxQaEZGQ3U1ZF9TUnpHZHh0UFZhT0xXT0pkSXFDQm11MXFUcE5DQndSMUQ1THdpOUxQNVUzVWliRmtEUXlRWWhFc0Q3cXdkZThfVldDOV9wSnZzaUxiQkFDdEQ1akhQbjNiS05YalNudFI4cjh4TXJTdUp4S2dYbElJaXlWWW9rX1pNdmszR01sVUJ0YlBoeFd0T3RWNWRsSTlDaXhqZ2tBbU16aWh5aEJXbzlla1lnS29oUEFBcm5kaWJtb2E5cTlwQnNuenZSUm1VUHFaSjZiVW05UjF2R25JN2tleFF2cm1pZ0lfZ0VNcFlDOFRQUFRCM0xHQkdrejNBRThLQ3oyeG53VUk1dDF1WmV3WVdiSWR5WkNxamlFblpnUGJZYTN6VUpZSkhfVk1aTzc1MXIwWlI4eGFibDMwZG93a2lzb2RMRm9rVGtZTHNjRVp3bWdGMmZfckFuc1U5RTNfQTdrUzVwb1p5TnRIdUdJeGxnWS1VUTdyM3NaQ1BZZ3pIMkkzVW54WHhia0JwUjZyTE5vT0ZMWnhxOG5yUU9jd1BHT1M3T1dYYnJwbkFfTjVaWXJZaGFzU1hxTUtLbHdRUnJGWE1Rb25tTmdMNkp0MkVxRDdTZ0V4dE1XbmxmcDBRNnZPMjVZT2VNZVhJOHo5YWNtdU5FNzQ1TjJVT1JhRHRiREExWU14ZXRlMTRWdVpjQS1mU2NROUMxSkVQTk9SWklaUnEycEJ2a3N5UmpSXzdJdVhDc25Ld3lDUG1nanpRS3RXVzQ1bW4zdjA5d2Q1RjJNZkY4bVhsUlJ5WlpXd0NYeWVyZm9waEEwTzl3TElyc00zdU9haEZxN1VpUVFjNlFBQmlMMkFCeVNKTVhGMFRUbVllbUFDR0tOZ3h3dlc5NUc3ektsZ0FCVE5rLUhyeDRndWhWTGxaMWpGNndXTkdTOXhVYXRqN2xvYXpYNlZWUFNuTk5KSEVsN1NBY1R6bmtNT0IyMmJXeXBUU2JuMlAweXhQWFRUb2Y2NGJBOHhqVzQ5SHl5UkpVaFN3WEoxVjRPbDA2WGdVMk5YWVlxTW1yNFhOdVhZQldNRUcxVldpRFBhRHRHS1ptSXEtcldJOVhZcXo2SjVTWTlaWl9La3RmTjNldmpuQW5CRkFSeHNJX0MzbUtZazAycWFSaEtKT3Q3V3dqTG1sclN3QnhiMzhVcUNmaVotRUpURlBRV05UU1ZZaXNpWGdiVFlvd191dk8wNW1LZFBCWGo4ZDlvU3Fma2M5Tl93RDRTcEN0ckVQeXhaa01DLU1zeTB5dkZxUEhKMjViQVNWa3YtaFF1TDVwNXFGVm5ma1ctRkx3SDl3aW9sdkg3UEduVTV5REphenlDQkw0dVcyWlJmLXdzUnlVNXJITFFkM21tWERDb0JyNmxDV2lFUDJrelNGa2dmMVJVbjJ1ZjFIdTRkY29rbGtkV0dzUWJ0clE1T0dZTFk0MkFTclYwMEpIODlTd0hfWGNKZmxQZDZQb3JLcDQ1VnJGZXNkQV9yd1JZZXc1M3RrYzZOUm8ya3kxQ2p6SUVJMllfTkN2cHZUYkRLMlRLbV9MSlotODgzWmk3bzV0Qld6eWczamkwSGNQV3FjR1hDMEN6ZmFxbzdrVXhEYV9aWVBQcTVUMGV6RldFeEJZeVZ6blB2TF9vZXNIMkpURTFOMjNUeFlnbUl3QjFveWpxQU8wbkpERFFGOTdhNkNXNHoyMFpCN2V4WEFQN3ZXV0tUMEFjOWJSUlVoQ2d1NjEzWnlGMVJNNkZqdkpRbWlwWkF4aGFvMVZINWFreXE0ckxJUTE3N3ZCbm9wc2Z3MDZQSWZEbXowZGhjVVNnRDE3ak4wQk5CWDUySkd3ekxoanBGYVVjbkNzbGFYQjBLZ2ZPdVY0VGZ3bnh2MnZHd1hNcXdEYUdlNy0tUEpHZS1rQy1xRUVuSTd5TkRNdC1ac2VhaUE5bWNGdnFQaTR5RjBjbzhjQzNuYmtFb21JZ2FGS3prWG9GU1Z5bU5xd0F0dDdYTV8ySllydFBldDdxanU5S20xZ25ydDBnU19LN19DU1d1cy1CMkhRNGRFTk5HbnRKUjNVb001UzI4VWs4TGFJc1BSa1k0em41QjZGUnM1NjJQQzBOelEwZVhkX2hVRE5lbGlOOVpNc2ZuazF4RG9QV01jNy1JQ3FDWUp5N3RodDhNdGVnOTBGaU52MndFVjA1NFNBby16Vk9abkNCRExMRzFjZjdnZm1kWTFNY3d0N2lSOEhFeTVFY1MyUTBFWHVJWGl4S2FpZ1R5dmJSNTh1cWN3UEI4OURBeDZDLUhocklJUEFQRWhvOUV5Z2NHMExaemNwR1FDSk5yb0VQTk9UT2NKc0hZMV96OXEtQkc2eGdBaEZmUlZCRGJWUnMtS184aHIxMXNVOG8zWk5hRmpXa29jYkV1Zk15b0tWWk1tMjdMeHV1VHc1emtMVUdoZ2ZrRjlucmZoLUw4NE1uN3BUNFJORFNiVlBwdzNXWWNoeE8wS2xHVjNMdzNnTUdOLU1PMG9TUS0tbWE4OFhSNzFsdVR0cWxObkdJSmJORVFXNGlqRXRZcWVWVEMxX3Rza3JkaXJ1amZnZk5TLUdMeDdnaVU3ZnVOVWZ5RXVrSGppbDA2S2VvQTR1QWlGRktkcnFSTVpSeUNQOXB1YUFrN1dqMGQ0VUFDSWhfN2hiWk84bERBYlpyS3ZPYjN3a19QT0puZ05sVTJNYnY4ODRRVzZuQWQ1WlZQN05Za3JOc2tkT01HQ3dyMXJlTzZZMW1MNUEwY0V6UjA0Mjk0ejhwaTduMm1HbG0wamxsV2E3VUpBbzdzSEkzVjZ1UlRBakthQlZhYVl2QVEtRC1CU185ZWlDV3RPTms3LVNrZXdsQm9DTXU3dnhnb3lXUHU1UVhTeHNER1Y4dGpfXzFzMWhoZ3Q2Z3h2R3g3WWFlVXYwMmg1MnFMUTdkVVhLanc5M1FMZDF3dTVzQXVHY21vYXRyZ251VFFVR04zNGROMDhnei1QTW1IcHZGODFET25YQUNoOFIwRkdvVjZxbDQyR185UjFwNjNlQmt0SW0tQ2pJcXo1c1Z3U3pOY0p6c3lNcHU5b2E1U2VVbHNOb2o1OUhfVkdNcm9peGVGN0NsSDFQd0JKS3J4SzNKUmROcjRyd0ZzZV9SR3p4TlczU1FEaFV2dWRad0xmdmZZNjZrVzlzVWtyMkZKN1RCUVE5Sk1zcEl0dGJ4akR1SHUwNHktTDMxUGU5U1NxWkJ1Umw1Rk9va3BLaGIxZDdfbnRVdDIzckR2eEE4clQ5NDh0OWZNek9GTGNQM0xOLVIzVkhsa1NMdDdUN0RTckpBM3IyTTMza1ZQUVdGNld2MW9waUthN1dfNkQ5T2NweE4yZmx6ZUY3cFgtNmNFSHd4SmFWQnh6VWRtQmg1ejM4VS1Ia2xCTTNLZi1neVNyamFaN1c2aXVqbDE2czBlWnJxMFBDVHNBb2lYRHBIVm1tZDYzU2puRm5WT0VrYWY4V0R6NUVEZXlNMkxiOWNPTE9XUHd4MW5PM3BXNlFpWUN3WTJ5eFE3VjVNWVFoTFlnUDNxNmNoQ2d0SW10QVR0Q1RVYk1xUzAyOWZhSm5weHlJNERnRzltdkNRQjVHQ3NXV3k0dTFnelFaMGJrM2F2am1acDhUc2dMMVFES2ZOR3lrUDRPRVlkelFIc3B6ZnBjWVNER2ZCN0FJSWdkT201eFc2MWQ1SVhVOV9XYlF1YmszU3ZGRVlVNE5KRDVvaWVRY0RiaHQ1bVNUdXhiU1ktdUxHWXZfS3o0b1hNU2VDNno5MVNrVWlSZmhyOG1tTXBEdjNENHhBTzNnLXRoOTNURnBlSHJLY3V4X3RRU1lCUklzcjJZdGRXSHk5bG9aUXRXTjVXenZueDNpTWNlUHByMVB2bzhuWUxWUnZXSkdCVDczQzVWY2JUZEczUzdnVWpOTE55Q0xQaHc4RXp0aWhNZGNONlN5WkQtZDNocXdRZ2Y5UVZmOUN4Qi11ZjRuQ3J4V2RMZVM0akRvc3lxV0RiaXFuWE9JNnl1RHctQVNzZndWOHpGTXFFUUdrbmEyTVBCYVZqS3dtZlQ4MXNpR0pvWDBwSks0RE9HTno1MUVsNGJvRUVoaDhMdlYzODRRbmdXMkUwZ3VUUXl5LVJlVW9XVzhMZjhqTUplNDlwQXVBamwwczgwRC1FRjhLMnRoUVBNbzhJeC1sU29RQWtjTXU1bHJXQmJNaWpvRzNRWnhYX283a1JqN1RsSUszYXZqVkt4S05DTVZ4Q2Rjd3dkX2VXZnlZdzVhNlZ3VzNSZ3VrNmN2T1d4Tlg1LW5BZlg2NEVVRmxOV2JZaXhSUFg5bS03Vy1BVEtOWWMzZXAtS3JoLWRhUUdhY1g2aW9FQlFRUGtRUk5tc3NaR2ZhTm1uRWhieWpNb19TWHgtbk1sdXlPMmlqTDN0YVZiQlAxZS1hMlFZUW9Xb1dJRVFZVklmbXFvSjRwRjZJbWVmODUydFZsUUpTVEx5amxMdXBGOXJ6R3VKMVpSTmVYN3duelhPU21LNUFOTVF1aHRTVWZaRnJxbFhYVTZnSWp2amdfZEhubktVMGV2eDdBdUZUTHoyUl9BZExkaHg5WTZNM1BwTUxtMTJFYU9jOEVoLVlTd2pCbzctVFMtandjQkVNSHNFTUdJYjlrZjd3YVJSVGM1Z1pHczBNNHQ0ZThUdzhqUm9TYW1ZdWFzVDJpUXZnWTVUQlE3MGx5S2VkeTFZbFkyWlB4V09uQ1pSRTk2bUdVVzYxQWY1ZDBrcWdoSWtYWjRieXFWRmZ4WHlJbk0xNU5mSGJOV1RWTmNIaGlOSEZiekNBdzE3VEJtWjhNSzhMTG1DdGN2YThUTDdBVklvUktSa3luTEZjWW41SjM3cHBXN0gwNi10M2kzeUpoWHcxWVNkcExORVZ3NU1xekZwdlBIQ0czcVZvWVdyZDhkQzBIYnllN0Q3U1RGMFpuTnBBYWlPNmJKUTNDcEFIS3k1MWphOF9fOHBhMDhUMndBVV82YWQ0QjhDcm9nUjlNbU41V3J0Vkk2ZHBmeFFsNzlGcWNsZDhRXzJJamdNRTctMkM0c2xSSk5wZzhlejYtUjRTYzJuQjExZGFSeXplcVRHMDk2QWQ2YTdLamhTQVJsamZFdko2aW5KYmpJOW9GQ2c1b1lxc1RNaGEwZGlhX0lrZXB5Qlo0M0dFcmNvQnpUMXV5dkc3SkdnQXdRRy0zM1VrU1g3Ml9WcnVOWkp2dkUxYkROX1FmZW12X0ROZlVpOU9YOHJJcTRENGZCRnQ2NFZ3eEZWcTR3OWdpV0JBY3B5X2NPQXUzaDF2R3RTRU9MUzZmaXJHNnRlWnRaMjM4MzZMQmVBOGQ0ZWV1bE9NNWNyRWRYM3R1bFpyaV9weC1IMWdCMHN2Z21DUXhkUnhJdVBJaF8yZGRSUXdzcjhKa0NWSUpod1Rad0lzRm5XOEVsdVFlYW5oNXp6ZURLbzVpMFpLVXRRUkpKU2Zlalk5VThBd1puVFoyY1Z2eEw1T241VDBIZGlCZWY4VFNuMFBMRzB1RjZfZm9MVVItQTJJM0wxckR6UlAzRUlMaW5qOXh2OF9xVkVUSXRoTEhjWExaYUJSQXd6Wkx3bWZQeEFfVmJYMzZmR0hJekRxaEpRM1hVNk9BRFJicldPanI5Wks1ZDAxUjhXdThPaG1xbWh4R011WHhCdEV3bUNlblpBb1ZHc1RVQjlIWFhLUmFSajNGdzhVQjE1YUJhaDBqZzluaF9mS2NXT18wbGpVRzlHQl93Z1hpSUJoWmhYLTc1cTZGTG9paGw2TXFEZ0pCR2pXVVhNU0tRQTVCN1Z4M19sZm4xaWlXNklMRzItLWFMaWxvY1R1NVVvNFJza1RGWUJTWDloMUl4UXJBZ0xtaE12dXBYRUxqeExxb29Rc29yVXI5RmJrVjFsTWNMMUtnaUdHX1piV2N4bm9HaWN5R0VDREIzZzQ2cnQ3d29DcGQ4VGM5VldrMXlkY0l3bzJPb0Rqb1p6eWIxa2RtQW1MMkJjekY5Ulg4RTJlVlhYMlN6dDJjOFllTW5EVGU4OWR0Q1hvMkNOUDhDM0tiZGtwcFJDMEF4eTFEUVhmUUZSSmdzaENnd0x5a21IMV9ZN1REa1NUWkJ4RThIdGt1OUMxTVlkODdLSU5SNF9OdzYta3ZYTERSV3lXb2s4alpZYVBncGQzNGFoTk1NNWVheDlpTDBMelhyLTFDWWhQczVnRUpzd0ZSMDUzOENackk2MS10djRMcEJHLVowQ0h5Mk1MQUJ3NGFYc1VveW91c2Yyb09hVklWV2w2bFZuQWtMSENwRzhfQlh6eDNva194YTlyZ1hXR3ZVeGhYYzJfQUlFVi1RLUduNUhFaC1VUXJ2b1dnT3ZaQ1FIcHJLSVJHaWpmTERtSTNEa0gxYzhIWHNpVkFHZ2NFSTBjUkRUUkF4d3pucV8yck1QS1BxaDktUHZteHU5VXhVdmZ5QS1nVURkRTJmWDl1TGVzWlo1N3UtUDJ0OUl4TzhGMnU1Q2ZrUFNrWFRUcmpTai1xRDZwNFNKdUlkNVltNjNWRXBYZmVHRnBfOUJndm5mX1ZtUDFJMGNJTUJvRk1yVTRsVlBfeW9jMGt6YWF5cE1ldEVYRnYwdVVyTllJSmNDNVlwbU1LaExLN2IxZm5FMkFpaEo1bzk0TGowLXloQ1FJcnBUbUdzTUZ6TlZVYnZIVFJlVDFZZXBiUDZWYm1hQkxsOXlNNTNHczB0SVB1Q2dncVdUUTduSVh1NU5oVU84NFhvbXo5YXRiTnlOYkkzVFpOa2hWODdXS3NJZ0RScWtRa0Jqajg5VGM5VVgtOVR5RHREbDI3Zk9nRkZ4djhZVTc2Rl9HSUZlOVlkUkRJVWQ3U2o0S0poUkhqYjZ0WElpN3M2NTl5UWg5T0ZINURndE5uZl9aSWktejNEcmJFRHItRWFETUoxT1B1Z1VpUDhoTmYxNzVqSVpNaWVCT1ZDU3hUczlRb3BxQ1ZjOTRNY2ROSHNZT2tCVHROZjVvdldwazAwbTBLUEQ4dkJSbFpLU0Z1Tl8zc1NMREhhck5TcERibHktdTFoQklLRk5yNlNvc0xlZm5vdUctbnZGalVGZjQzdklFUWM0MUVLaEE0N0Q1YllTaS1IWkRpWE56a0Fza3czZERSakN6RVBIMnd1bVRBZDFxdHB4amU0T0tpNnVBZHl1WTZWSlc2dzBYYU5TWlZ3VXBsOHlZdGRWR01uS2REUHpORzhDNGJUUGNjVkZrOTZZWWl6OEtXMlRyUTJodUhTUGllZ3BXY0t2blFnTjhOU2RtbjVKZVRCWk9OeE5rdzBURjNxaFpsYTdaWjR5Qm1DWmJvSXY2d3p0QVd2dFo0ZzNyM0tJQmU1dUNwX1ZuZmZfRVFNM3VEUHdfQWNoVnVpT202U3lkdDhHcXo0aEU2RDdTdkh3NWdna196Q09YUjJzckU0YTBGajNCNFNvQnVKWThhRUVHamI2MkRqZmxBQnk5QjlLcHdxd3NCRlJIdzk0R0t0RHlHYjhHMU5iamtEQ1FnS21MZkxfVFVOdWZFNDNjekpvdm9QVUZ5Qk5mNTc1b2F4OWRtcmpVVS1xUTZ1WGdUUjNpQ1pxWDludnNqT0QzRGVkY2QzaEQ3VlphdFdnMURnek8wQ0dQY28zNGZVazF3WmtQYXZMWnB4WmZEUkFrT3l3eXJ3RFdzVkw0VWN4YnQ5Y1dyemZyNmNBRVNabmtFV1hpZU0yX3J0aHozRUNpMEVtNl9fRTg4ZTZCY0FQb0lyOV9xWjhFOVhHNmtNeFFwbU91U2VQSnFTVFpHS0EyT0JNQzc3eWcwVGRtVmJjN2pDVzZKS1duT2F2SzNmRUpHWVl0ZmZTV0ZjTHhXUnJLbnhzQ1pCNnhNaTQzc0lCNjl0YW9nRUVjUGF3eUw1NWRONURtX3Q2dHVBTGhmeWdCTTBOZTJyaUdrck9WSzc3YVdRc0lmblFCTWMwQzlKbXVBRU5IVjV0ZjNURlVOZ21TZEFQNWNVMFJSSWRLOW1pYU5nclNIeHhTTVAxZGY1X0dLckxOQ2tVWGFxZ3hTd1owNllqVVpzYWphS0FDTVNEYXBERk9RMXZ4X05CbjBrVngxMVdGRjhYcE9KeFhESmczdGJGek9pZFg1ckVtaWlXNnIxNjYtX1FNVWNYeU9zemFza1dMWVhRNTh3bm9LVXRTNkxDSXp4S003ZDVxdVR0ak9qLVA4dzl0U2RJR3hyTTVrdDhiNDA1TnRHRjljM2p3WnZGZVZVZklhSktxNkJLdUpuazhxOUg2X2NBQ2VFVldQUFhMT0U2N3FETklwZWZPdUVpMmkwN2x4MUlkc0dIbUF4amRIa2oxdGo4aHN5cDMwZHcwa2pWTUhEc2VKR0ZUME15VFNSSjhaMFk3RFRqOGVLT0NCLVNKcjd1aFcxV3JZUmlhbklXcndtRy1hcVh4X3UyT2ZLUzRvS013bVMyTnd2RjlOOFotWmZZU3pZQ1JFVnBLTTJTR285R1hIQ3llXzhhWVBCNmJUYjd3ekZqWFBwdFltQ1BfTjB3c2JaaVdoT19SQV9VQ3ZKU1FhR1JBQkw0bVlmcU5sT1Zrd3JOaklnM0VxZ3JrQUs3MGdIdzV3MWtweFFlWW11SzZRbVdGLURCbDF2REQ4OWhsQ2FoR0VibzFkNzNySW1FejVQdTJFMGNnbXAwelR2Nk84TUNlbkZTWkFMLUNqY1d0eWd0akswM1FTeUxoRXlvSVh0WlpTYkw3NC1DR2xJcWFlMzRrZmJNUzhuaFJYdUFPbWg0YkJoMUhMZlZ3QVFOY09ubjVGV1A0ejFQdlNhc2hTRWMzdlFrTmk4NW1MaFdZVnJjajE2bUhSTnh4U3k1NVY2SUE4UFBiRXF6RWsxVk5xb1dBYjBvdTJBU2lSNDV6Mmc5YXRkU2Y3V2JqMTFzYlpibTV0a292VDlJcVkteXB3Y0hNRXBfazA1ZlNYelFmaENDMU52bWxUWGcxREM4WXNicnlmeGc2Tk9MYlQ5Y1V6QUhfVXBwRHp4Z3ZHcVJvTUprb0t0ZmVDNU9pWmhsZ3NKS2J1UzJvYlp5d1RQa0lWcnBsNkdqUEFVN09lMm5ZS21TZVROcURfUkswSURIZTdqUmdVRDVJMGZ2S3F3aWdQNThOUWV4dDMzVk4tdXVDQ3dWX29iWXVMbVVOUTJTWjVrNVdKOFlWUVJLY1k2RkVtazJ1czI0RktLYjAwcGNveWdFR2ExWlVSaGtmODdHUENxVnlxQXdCbUlaVURaYW5RdHZCY0w0UEhNbVVjU2t2MF9wZF9Na3dRcy03ZHcxRDdYSG9LRkJRX1ZGNHNBaGF2WExVb2h3ZFRDWl80dm9MQVllTVZLaTRWaXJuRFJ5WWdrcmVGSEl6QVFqbU1vOWZpZWZIWURqeDNzMTVERTZSTlY5cFhvTE03MFdlcFRFRFNEWDdFNUpkOTYxYmFzUlpUSHFPSFpLZDliYjlLVF80RktoWi0yQVM4X0YyeHBnN0tRdGViUDZBLWhGQW5WUnZCWVNIRlJXbk9mSDZjMDZLQk1XcUFGNDdzYTZCRlEyM0w3Umlvbk03ejd1WUltTHAyMG8xd2tRU25zWTd1eWZjLVFoNmphbXdCSUVsVHZEWmtPcFBnVFhtWWpKV3JLb2d2cjVOVlVmU3JVdTM3MUVibnRLa0QwcHA0N3prMjBWaUV1VS04RlE0eXk5Z0otNkVIV1h3bXZMNzhRUWdZMTFLaXdqUlJRUGpKZHJjYksxVnM2WmJBekJjU0l0V21Vc1pSTG9Gc1ZTQTZHZ3VXbUdzZmhBQk1wMWxTOVItZW05d055RFdWUVdFLXBtMnE4cDBaaUF1b3NiYV9lYVVUU2JVMGxrWFZFUF8xWTF3dU52blE4UFRKRXVfcHFWeWJFQW5lM0s2ZmdoczcySllOUERaRVg1bng5TFFwLXkwdm9vVXBuS2l2bVFIUFdNSkstY0h6WXRHeFVOaDdwcm5IVlpHM3NsWXc4dlFOcUNTLUltUGZxamNQMUFvZTdIOG04c2pVVjAteEhSRDBjV2FBUzZGenN0WmdhcEh5Yi1LcHh2ZDZ6VzYyaFhJOV85VGdsbWJDUVRES1ZrRFBJc3lDVVMzMjNJQ01xd1NQVFFQRm9rRF95SjNIVnJmM3RTLWY1cGdheWJNTGF3dHFDSTNHZ2pzbWItTFNWTFFOTjA4X0o3WmRQd0pUS3JXbksySHY1LXA4eEMyLU5EX0VIUl9kSDNSY0oycGtwcWt0ZTZxQmVYb0I3SDhHZmJJM0ozQU9FR0w5eU91OTVoZE5GVEdvcmZ5bFVvdWhoVWhMSU5ZVm5NQkhCcWVySnpUZFQtQkVldWJobGNLZ0U5YVVscUllVjhHR1hILXBXaXBlZmFDVFd4Z05oOWNhdVJ0SkVtcXhETGhKMWU5dWZodTlERndwUkpwVG9LeWcwb3BHLXBrcjVicnZXNXI3RWNWMno4VDR4RnljYWZjZC1XTUJFV19mbE1pdEpKa19IclhCLW5OblVab1FEMjNQM2VSLXhoX24yVVYzMnphLTF1b3FaUmNRMl90NEl3eVlJT1FqdVpSQUZ0bFA4R2VmajFhOEdnZjRscFpZZl9oUnpBcWZ1OEZnNGNYcXh2YVVldnhOb2lydjlScVluT1dJcGlnOW1ORVJZZjBrZXExT05OSjNJQlBFUVpVSG9VM0JqcnBRVVdEQ3V6MlBlcGFqQm1MWk96Z2pWZ0VLM1BGM0gwVERXaW1mc0RWS3ppVXdJUTFOUzJpU1BINkd2YVZ4cEYzWTlXM2h2NzJOSVZRT1h1ZkRISDM5Y2ZKYVdxcFByWDVQOTA1YmFXREFKRm9JWjM0dWItUXVuNHBoSlBhU2FmV1haYzBvSlo0S2FMc2dlVEktZTBpeVc4YVhCTXlyX213Zi1FRE1XRnE1c1lJR1VUYXlCeEl4Q2FHbmtOdk1jNGpGclNRV2Noc3RYeDdabVlVVGlQVXhMYjU5Z2lNN2VZc3NZRzVnRG9ETVVDWkZMR3dyaVczNzlvSGlyR3g2S2ZzVGY5QXo0ZThnRDVXbjBncjVHOHFYcmZfTjFIZlBXSEYyVC11eHUtazZEY1pEX3RrZVhxcjV4am42X3NWaklCcG5CSVdmTExOcVNmTi1ZUUp1ODJCZDRIOG9fMDBPSlF0aWQta2tsb2RBY2JWbEx0Q1R1UnpiYnYwdldqY3BlZTB0SHRIM2h4ZWQweDVib1JGckt0a3h6U2h6UnpGYUptUG94YTZtZ0xkb0ZHSVRxUk5Zb2xVZmxpYkxzcW81UFZSalA2UHNEaUJTSmc2ZXdYbnV4cGl0bnh4ZGZYUHVpREN5TEZjMHp0dlpsQTNqelRucXpLSkV1WWNhV0VDcUxfRjFFT0ZibXZMUkcwb0RuVlYxUHlBbzEzczU3UlRWcVE0MGFFTzlMazl6UTZ6QXpkNFlHSEdxeTYzbk9NZnlCdHBkYkVIbTJybTdwX3VCVW43RVpFd1Y4N3JPRXU4NkNkemxkUkUtaGhNX2hiakpyZGxvcDJWRG9Sc2J5cDNmRUZYdHNuNXZMYjhfcHNkaW9UVHdLN21CN1NuVjFuZ2YzNUs4YTNaeUNrWm5SUTVmMEVCNlE4WlkyNktzaXBHLUZBMHd2OXlfNTlDRWxWZkhHbTBlQWhwWEZwdURjTzFwWlVCS1ZzRDhyNGY4VS03b2FBTDNIb0hZWkdhN3U5aFdtTmE4TERWbHhtSjFkSHJ4Mkxheld6V0o4V2cxOWZmMnZBY0trOTBfUUFoUlJxZnl2VlpudlhnWVVKdW9DcWhNT2tZVWRCNFBXbE1xaG5iQ1lqS3p1Rmx0VmwybWwxLVdwMHlVTC1CRHNHcFBrUl9HRFNCYmYzbTJ0LXJjS2ZFNEpaOUw0TjZMbVRDclNqTGEwQjY2bHB0eUFnRFlndzhiczNBWkFFQVFJNjc2MV9wQVlzRDZUaERRNnRiUG9odkR3WFVyZ1p1ZXBadk55ek1XajZQZWNXb3VvMHhvT3AzT29vdlJKbXdFMFVBeUhndFFabm1tX2lXUGpwdnpzOXJVbEg1WnU1alRabVM5dXZ4QTR6UEZxVzBYUFRNYUxONjdqaEJMTzBCcFFiQ3l5M3V5TlU2YzRmVXhfM3FwdVVIYUJnazRJbzEybjNJenZGMmNCSnJJVllyQ21ScHk0SEFLdTdsdEdGdFd0N3Z0cEE3ZW5DSmRfczNMNlpwdV9EQjlvRmZRVWc5RUlqNE0wdzNBNEZ5cHg5MWRkYWFNTFNnV0R6ZG1tcVNNaXE1WXh3QTZwaVFIQ0x4RVFteFVfTGZsT2RleUJON0dWU3hDSFpRNWRORm1yWmFPeXpIMVJCRlNPT1cwVzZvMGthNE1lQ2RDUUZPLXpjcXNnRWpWRWpjQVp5NDJ1Wkc1LWkwWUxFb29XekRYVE9sZFZ2a05yX2xDT2pRam01a1ZRMWNJVVB5WWtobzhoeXdGQTRlbEFGWmhyZUtKTElOeV9YX0ktWlVteFlXNGZYNWRINVZPWDJVY3dOeGZ4Tkk1TzdmeGNFZ3FZWmZkVWVfcjRETGZ3YXdaekpxVDlCNFlrOGNQX2o3THhFcjUyQkdyS3RRYkN4dXFVb0RRTlREcElCdHY5dFpRbHpmRVNMN21LZVExY0RySWRRM1FsS2Q3TXJmcHpzQkE4WTFYNmNGZXBnNEE0UThmYVhmX1JSUEM1MjJ3ZmxacVlqVXpvaTlUT2RBZ2xIWUxKbjBoNXAwQ3YzaXJ6UkhJd0lPamFnSFFISzg4U1c4cmVaSTdnTTJBSjRkbVk5STBfazdpc3JuM2ZCS1FqbW5SM0pVaHVPeElIR1hiWUJ1MmR1bHdVNkgwT05iMlVrUDdwZFh5akFPa2hOT2hPeTRLOXBxMEJFb2VWZDdsaHhNLVZoU0VTNzFQMndXbDBGOEFzMWNXOVpnNkNhMTY5dWR0OUpseG1rc3JkXy0yenh5V25Td1lERnFLODFjenozX19wWWxsUWdmbkIzNFRSZmxER1BQcXQyNWtoMVJ3eTBYRW9RcVhoNmNuMllWYU0tQzRfX3B1VGJXRUdqUFl1dmc1OHNTbkU3emplbVQ1STFBWHNhZjNKLXUxcl96U3RPMW9fRkxneUNqdkJXVUlEMkM1SV9OY0U1anBkTWJEbGJTVWh3elVYTGJraTN5MXhMMnJJbURMenNvenBmVk5ZNHZBSjhQSl82RDZxOUdQUlE4VnBpOG0xVlk5WjVqS3VZMnhZbTdROHlJSUxlaGR1Z2pSZGplM1pKc2RTS2t0dzdReEVBZzhqdGpXRnllYnVsV21TdEg4N0dDUkppVGljZnBuTXRkLXRzQldIdGF3ellnTzYxM05QakpCYW9NMmJ4WG1TNG5ERVRmOGJ0QS04VGxwUUZUU3dlb29sSXJKYUFTemkxOG5wckZ0WDN0dVBfNE5oemlKQ1M2enJ1cU1kWmtsbWhGaVhRbmdCbFNGWEs0OUkxbjFvSGs3cWZZWFZ0cE5SbGxoeTFKN1cxVng4Sk5vMzk2SmtRMGVwOHp6SFljTmhQbWQ4UmphVGVYOE5hQTdoZzhvaVREUzI2UFpzZXJpWXdhWE9zdndwNUlhSlpJeFAxWXlndVBtYTFuMGdYMGtaT3hpLXRHNjlNbEkyeVd0N2JSNlQ5TFVPTjhVYmhUaFJEVFl4YkhEZUVZb2o2d2wwbWFXdVJPUHR1ZExRODZBdzBBYWdHMjdxZENRR2F1VFJ3c2pQbUtoXzVYNFF3MExad0VLcjhWWUpaRlY4MnI4SlNqUjV1ejJMM3dRSF83QmI2VmR0WFZYZ2NRQ19oeHFJYXZOZTJxVGZBNmp2cGhFSXp1WWpBM3Q5Y3lxOHB6UHN5TGtUT2ZjSFE0Wl93WldESmFqWWJqS0pYTElaYXBUaEx5VHdzWGlNTmk2RWdmU0VTSXFlTGpvTDV3ZnVHbkRIdkF6UGEyR1djVGdWR3A4RWc0elRZcDNQOHYySktTbHBwX085c2ZZcXF5X3ZXYURGLVhPcWhtUVNPOGJHNE9HbEpjN3dfNTVud0ozMnltN1hlMmk1aGdhX0tTRXluVWxpSXJMemlnZXdxRnlRMlhtY0RRb09FYUFuRzA3UUhWQ05zdmtVZWEwN2JLVzRXR2s0LVoxRm1OZW4yN1RXa3ZkT1Q5X1JaUkZya1hBSXpCcDN0UUtYX0pNVlpZaU9ubFZ4UFRJQlVPWnRKRjF5dGpzNk5mbEotb3Q4X1o2eHU5amIwQ0xFanFFd2ExdGhHUmJ6ZTkwTVExVjBtSlVTV1VvT1BtalpEUU9Zd1RiT0JFODNOdlRrRmxoVFp2Z3FUeERQdkRVNTl1elk3TTlTTFFFNVhOQ1IyamJ0Nng4RDBXR0lOcjYxd0IydDVSRlluUmp3cVJVZnl0Q2wtUXdpUEdKZDUtblRqRm1Kd0I3OW9Hc1p1bmZRUVN5TnhqeXlTR0VhQWdOT3BZTkQ4MWwzeU5aMkVXSHAyUWZsMzZ6aE9ES3pmb29WTFZCRDdDRFBvMVFud1ZsMk05aUQtYlZFc0U0QWxVVHB5MUY0aGt1UG5xX01ja0RyZjBWUEFYOWg1QVhnWEd6dExJeEY3a3lxWVU4Rmx2UldScDJOUDlBZXpMMHU3d1EtbVlzTHpMSkktOFFCZF8wMjRyeUxtUDdNYndYUktrNGFRNmxkQk40RGNVN2NXaHVDdzRHakRNdWJtNDFzUV96aDVqQkFYcDVxbTNwQ2R6LU5XenZGSTBUQ3A0aVBPS1RBNDVVZVdXeFZEUzY5eTcxNi02MlU4YlRaUzFBbDI1V2lRWDQxaWNmU2J2Y0sxN21IcC1TeW1iRkFhQ3ZLRnNiaEhIM3ZiandrTmtpOVl6c09INm40SEVycEJLSXdacnBDZVJENjhVOGljb0VwVnVNYXdrYktxMENLUXNJRHBKM0pFMDhLR0lhM3RzUmJBbXVkVjFDRjk0VVBmN05odHBfZnc5ZF8tV2hBVnJtZW5jYnB6VVNhYzNaWUc5eF9rUE9IYkQ3eVhYd3l3Q29PNDFVZkFXdFhMbHhKeGxpZlliVWhZaERBQjkzZGZ5VVZlb2tsb2VpUFptLVpnYjh6R1ZhTTgtNlQ0MFFzRFRUNGtlaVUxdVFEMjNhd1VjTlJFTzJURFpaQzB5ZlZsay1uaVlRbmRVQ1RFLXRKc0Y0WWxfcmlLd2dzWkFZXzZGMm5mcWFZcDdUNm1YaVVacktRWGJfRjQzTlJzcWtRUUNLYnZpdWQtaWF3MlpfLURCYnNwVmVNa2hFNjVQWUc1bFRMbnpOSDdzU2tJU2Z6MDZTNENhbzI4UVNQdDJ2eEMyUWotZGd1ZHlSekpPM00wV1BYNERBbWZpVHY5X3pfc2FNV0VTTjRaTFpSS2lCQ242SlBOS2xveko2TFRlbkVKaFA3SzZmXzVsSk0yb0k0NXQyaGRjNVdGVHBiZ1NIb2hDaGJXSl9nclZFUWZWRGp6Q0xBeEhHcXE0RGVfU1pUQVV6bUtKZTFub0ZaZW55RlVtR0I0ZWNnenZzeTBuOE1jUDgtTUNxTC1xbThRdnBtMEtxODhMbi0xaDhvUC12d0Y0cXd5T00xb3lXaDBTNXV6NkpoU3dLWUlnbkNJaFpPSURmWnNxc1EzTDhmX25NY2ZQUUZIcm12Uk9nejduLURJdzBOU3UyRFVqcThyNkJmU2E1anRWVGhISnVfdVZqdjdtQk01dHFnaUpNczhPVzZmM0stOVd1ZFRQVXhMaHFlZVNRLmpvbmJQWjlTVkV4cFZUZVdkRFk0NlE"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['43403']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '43347'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/cert96da121a?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert96da121a?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/4ded11909844446da851716966700e94","kid":"https://vaultname.vault.azure.net/keys/cert96da121a/4ded11909844446da851716966700e94","sid":"https://vaultname.vault.azure.net/secrets/cert96da121a/4ded11909844446da851716966700e94","x5t":"lWUrAzM39YfWwwowyQ4opMUMjEs","cer":"MIIDaDCCAlCgAwIBAgIQPwNCMBbYTBily42E/YcDFTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDc0NloXDTIwMTIwNjIzNTc0NlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJOkvvshdrFa/DTXO4mSx8xmdr4DN9Mv4MpDC9riXobtKn2Lhg4rqrSZRFtupgnyl13AQgm3wyIvRzzjPZs5jvkgfQUxXotHXb7V/arMyCxmSX5KBE2xpGn09tMaFJEWieXMCW2XtGaCbT4C0g0LKdOBIj9poEC7ndpp3YOzlFwdCsy+8QZiHnwmmY86yx8upNeXstgckfTgvASNAoMsjTOk9wi9tlSG/LMr74GLf3k6MHXlEJyjRtr6fkK8Hhn4KGwI6ZwA6Zfqyj6ABBjHRgKQGETo8+yOU6wjElqJ/UJMa5LO6dDARDzxkf6OuGfu/cklyhTNX6gsU+yUHLErgZ0CAwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLgYDVR0RBCcwJaAjBgorBgEEAYI3FAIDoBUME2pvaG4uZG9lQGRvbWFpbi5jb20wHwYDVR0jBBgwFoAUcbh0fxdzGaaT1KU94N7TBkzhqiMwHQYDVR0OBBYEFHG4dH8Xcxmmk9SlPeDe0wZM4aojMA0GCSqGSIb3DQEBCwUAA4IBAQBwFE6XqtyC++LJBcrgE9BGOSwsTX9NizdRBgIKqJUBqUr6ad3JJUHppZ6QgXvQPjOQ5c989oWJCRJvfAogGFKSOwZgmJnZI+eCH9NkxZC6HziHIwuLozUWpSbfrHPN3wy3OBjjaaNux0TTVw++KT4++uFrmAa1slHhSVqg9u2N7ZmbmO95w51opjUn/9+qNwpLh9E2mRvke/cvDGzK0C9UabtjmBvmP2B+9AkPy1aO7WmGJ0iRbWxbW+hFPMKYj7I1NHkt9JNa69iJpDtVJdNYyFinaZCN4f+DOV6nyWP0EE32SXEDncZDZf/U2/X69cq6Lugaufos8A+ZjLFcUQt1","attributes":{"enabled":true,"nbf":1575676066,"exp":1607299066,"created":1575676666,"updated":1575676666,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"upns":["john.doe@domain.com"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676643,"updated":1575676643}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending"}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/7240242757e24b9cae1b7fc62f6865ca","kid":"https://vaultname.vault.azure.net/keys/cert96da121a/7240242757e24b9cae1b7fc62f6865ca","sid":"https://vaultname.vault.azure.net/secrets/cert96da121a/7240242757e24b9cae1b7fc62f6865ca","x5t":"hqL0zmKvvlru6i9lyfwY4XjDKXU","cer":"MIIDaDCCAlCgAwIBAgIQfLUuxjQ/TjGm+w0TSUCJwzANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJVtZ6aI18XvPHu3luahoTjw9GL+bMWI9m8pJaWRH41J4wJ6c9sf+DHZlWO6qvZMok5OR2XEl1dX662/gjE7kPgTMjfXVcQFbxae3pUji9wFxXShOJ4O1ZlsqARj40obXXjTFi/ntAilV5oqx2EtKsC6YSV2ot8LDgfSZXDjiCN24BS047Xtcm3GjZyWMK9+qg81tDyci/O59DZy3KTI88WsnUUXvfrcav8tiiOm4+AU8YrDV8IaSE6bMvuB5SBiFQEy0LobEaE+ctIISA/pSF29KdbiwogNeX+qGMFibh0umDzFWFZCeLMEr0BDwGgla+/zVPmI+lBo3pCcIVHyrt0CAwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLgYDVR0RBCcwJaAjBgorBgEEAYI3FAIDoBUME2pvaG4uZG9lQGRvbWFpbi5jb20wHwYDVR0jBBgwFoAUlrV9YQtHg3HLF1ykSHFcnmzmlckwHQYDVR0OBBYEFJa1fWELR4NxyxdcpEhxXJ5s5pXJMA0GCSqGSIb3DQEBCwUAA4IBAQANF32y8zIrLKNOlKHZEjd0JZspFkKLCNT/Ax6gM1duDRuwu2fiEh6Rc7ESZqV9GXrjEE1MJ/amTHi/RwZUNEfcWKqDGk0HlZuh/rzXkB3VlWcJzuqdG/LdXx7svO5/h+wJ5sP89dAKtJPfCW6nEg8Ai9xNh59/wQBMQCSeyE96ikj4xwMUWihFyIzoFk9ogjX+7oCRtzeon0bM7a34zRH7Au49OGDCwlFRFcZnjixYKvN58ZMgKMvg0hpUF+hl/IsnWh7c5JFAoKHuXcGTRxD+WDhxIgbqeLNqNyDa+T5qoh10IejcnrGFGq+/puevvyC66jZ2LtH9+OiF/SN5cWNa","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"upns":["john.doe@domain.com"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/pending"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['2448']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2448'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
    -    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLktQOXZySzZfSmZBOGRKTG9mS3VHd1RYeU5uZnNSRlQ3NW15eS1pUXo4ejV2c3djcUp0d1NyUUJaM0htRGZ1bVZLbTMybVhlWnhlaGY3RTcyazBBZmgtN3FjTG9KYjhwdmNHUzVxRFZ2blYzaUxVTWZQSUxPbTFEMWZuYWZ3OGR5U29XOU9VdXd5dlAyVEx1aXBuOVZDaWxqbkUyQTNGY0xweEszSDRkVlZYWC1QZ0J1emNQejJSMXZoT2FEWjhWTUJ4a3hkQ0FUZHRXQ0R1VGpLSmdqRlVBQi1pNjRUM2RNaDJ0SUZJQ0J4YTE3RkluenZYZWs1cWN2VU02eWFyb3hpRlJxYk13MkluQU9WalE0MEFRb0hwNmRYcnh2Z2gtcmxBdkFySVJONEdiWFl6RVE1QWQ4bnZkMngtV2Z0S1VGTXNSMXRLcFFOS2M0X0k1OWJhbXpldy4xa3F4cGJoenhIMFJaQ3RMVGpoYm5BLkROcnpha1ZWZlRMTjBhTkNGaW9ZVFlYWUNJazd0OUc4TjJZSHpBaWJMajBsTUUxZXkyak1HQVpHcUZJSXJNQ0g1aWpmRXRLRHNPMElYWXc1cU5WMXUwcHU4V3NpdmhUY0lCTVRfOFg0TXZjOGNhdFBsYnhwdjZqZlZxQnI0RG56aDM3YU5CaXZRS2ktclBpVklSbThXQ3ZtaDU2LU9DUUpOZllYZVBqamR0cjlXNlZwVUViUmlFYWd5VEtYT25zTlhLYjlyX2FTX0licFJUMVVZSTA3bkhJZWw4TmpaN0RvVTIwUmVxNW1Lc2JuX1RlZFRrdl9JTFZqcFNhR3o3VFVhQjRyMTk4MlByb0hMWENTaWVNekliaXdhYmJjakVkS0pZUktqdjlQSEZjcWsta1h3WFJNY29rWllBOWdlRzBHS1o3VDc5MEhtTVdiNmVaUDBCRC1CU0tMdTZhcFZDZGxIZE1JWU5CcU12di0yck43TzVSOTlFb1NTUUFqM2ltQTYzazh2ZV9MclRyV0RHaG9XQkV0aHZENGJwaWFtQk0wRS16ZzIyTEt2STdQeGN4S0RNN0tlQWI0OUE3WXdrMlM3bVZlU215eFZsWGhMdTFPU2hSTVNaUlluaVJkcDI2X1EzRV9FWndFWWZrbnpJdlcxSm13U1hVeVVaN0taQWp2U3VZYVFkWlZHYWZLUjhsZ3hBR1JxRklsNkxtTUFjbExNLTJ3a0xybmpxajN4SWJaQUU0WHdMNXI1WDBmd1AzdU1tZzJiQkVCd1RwcEJEQmp1dS1HVlh4T2NmYnMwTmxleThjeVliNURUM0w4TTFvQWNSTm9ZLXB4RVhkYkMzZVBLM0hydlpMY2RGOFZJRjN1RFBaVWlxUTZYWVZCbDZLMkgwSHZKUkRaY2VXWTY1b09RaElwcWUzUGotNENzaG5XSHUxaXVfbHgyOW9fNUYyUFhPWHhDWXpSMzNCMVNXNDVPQTFob3Byb253bzROSmQ0dXZ0U3ZRcVhhU3E0OGV3VTVkUFZubjBnNXRqTS0wZWk3Y0s2MFhlWndHRjYwVm9GejlWc0pHM25aMnI0aUN1NHA2amJMMFpNRFFpR29kaXZGNEo4NkpXZTJJRUpDQ2NObGZndTRlaUs5M3JZTFRSb3U5azRTaFF5bHdBX0UwczNrOVpBVGtVSWdLbVl6dkQyUXBCQTNjbHRkamQ0VWZ0WHo1LVBJWWdaUzJKSUFvS1dRczFaUE80Xy1ZRGNRVk55VUNsRkxib0k1TlV3OExJdUpPZUpVdGpVUEg5WWs5dGI3V2Z5YjJnMHBlaGJ6eHM2cHZGX3FKS0JXTWlOaVdRSnVIal85Q3dzS0RoeE5HQUVVYWlfZXIxeUdWMUJrLU5CbUhnQ3lpX0szQjAzN1lDYmE3ODJ6NC0zblJEZkNSQTJubzlINS1LNkRPeUd1bGlEaUhsenNvZWVVaV9Vb2h5cVpVR0RkZXBZQW1GelBHaWFMUW1VemNza1FWaFdjZVpDbXIxVFNkbE5Gb05FV2ZsLUtoSHlyU3lENGFaMGJYZkQ5cERjSlhrdkRhTzkyQTJPQkNVYkFRZ2pmeXBJQ3lITWt2UUJzYnhmVkZqQ1NVazBfcE11VW9yR1RlY3p1UFhzdS1jajNGVV94d21MZTVqMDJkSGNxWmtfQlRneGFVTFJ2Z0w3Y0tFZDdkd3JKaGROQTl2bWprNExLa2hGdXQzQ2ZjWVktSElnVVFva3hIOFdMWWxtYWJKcmNNVE1YVnFENy1nWTh1dXF6NHhURUJxM1JrbzZScTQ2Wi1DWjFGdTJyc0I0YklJYkhIRkFnOWl0LVFMbUk1cm9FOFU2c2lNU2ZrSkZHSzJwbDMyT0otd0RQSUVoc3lObl9rT01DUU5pSWFFRWlkYkJ2MUI3VjJvUVNtNk1fYTVna05SWk9VclhTUkxIZ3VvYmxZcTNmYi1lTWVkWDFqUWhtcU44Rjg5N3dVeG5kVjE4eDlKdjUzQUhXOUwyMUlaMG01R2lEUmpONkV4WFFwaEVUUnBqblVacEUxYjRKNzIzdmtlMDhxU1phQnpNVzdpMzdZdzZUajNWdEFNVzRkdnpETkFQNEdOVjFETC1mSGR2UHlxaGptRHZ4SzdmUWxIUkJOcXVCUEZxLTZJdFIxNFpDS3NhanB5X0JDUzRBdnZEWHMzZ3RMNUJ1bzhCbVFoQ1lsMEQzZVhwM1Znd3JRV0w2RklSOVJQVGV0M0dBV0xuNzNTOFo2NXBRZ0ZrREQzM0Q4M2U2Y0tSVnhQN001S1ZWcUYyWVo2OTkzS3hZX2xHWFU2UF9RbnptOGRnUERqdWdkOTlfRGhqM2Z3Qmc3YnhlOUNDMkxCOXh4UTN3MnFtMU9OT25qUjMxb1l3N0w4bGRVZUxKVzRaYjF1RWpKMnhxd1lyMHp4MG5sb1pxbnQ3V2dEVnhrNEJOMjVTeVBULS1WZGhOUWdDTkhpU2g4WUFfSnZEcGVzT2d4VUVNNzczTV9LV1ExVzNpenJfZFFiZ0hqNUU0NmdKLXctcUtlMVBfWko4RF9yRDcwd2pZdEhIRWdKRkEzeDNCeU5HUDFQU0Y0NllRRWRMYzhfQ1FudndpV05Lb2hUbi1VVmlXTHZyUVVQbkw1MDM4NHI0bnowWjFOMWt4dThYb0w0R2pCY0Zpam4zSzVKRHh6MGZEdkwyVk1IdmI1RzBmMnR5WDltRjBtNDUwbmRRUDBBSTZnUlU5Z3JuT1k4VndmczhVVWdRa2twMGxvdDRfUENpNTlpeWo4b19XVmdIUzRKMG4wNUt4R3BPQmV0SFItdzQ5SktwX2dmR3FqVjlKb0pSTWRneGQ1U0VmeWhsa1Vydlc0RVBWTm9Cd2M5RU1UUWdZeE14SFlUN1g2TnY5aXNjTzBmRzFDWllIUHR5YkMzYnJ5V3VoblZjbkJneUJRbllKWUp5aEd1TEt4YTlwVkk4czJ3anU5eGtNQWxKS1B5LUthOXFoeFB2b0IxalY1MnBsSlcyZDVhcjZueXY1NkF2YW1YRTB5U2dCMVNtSFdRVmpORHl1aXJiZG9TMlNaZ1doMUFhdEVQdUFGQUFjeWFuUlB1VUZLVXg3cENhUkNnWmt6M0pPZlZaZmFEcWw2ekR0VmxQR2R1Ynd6ekxxZHppRW5RZE9pY1RscHVFTUhQNEJwYmtwN3h0bXlUSjYyNEFZdlFwOVJqb0VzU2ZyUzllMU5hVHB4bUhRempYLWJ5YWRtNkJKMmJuTmlPSE5tbmhCa2wzaHp2TTVnR2prRERlakNlSk05YUdEUWZTZzd3VlJqNGpCQ2lrcHJPMDhXNURBSGpXc04xNDlfU3ZsX00zdTIycDhYeEwwUTRkSWtlM1lEU1c0NjZLT09PR295cnBqaEVCY2YyelVYbmJxSl9ULTVabndyNldkcUFpU0xyRHJVd1lXZUZpSDdDaVFUQnR3aEVVdEFzb2UtcTQyREg0YV9IZ3BnM3ZGM0hRaWZlNXFKYy1OZF9yN0FUQ1p4TlRoUEx4eHJ4SkliZFAxNHI5VDZSYTV0cTVRN1NaUEJOM1duMWR4VjhPeXhXT3lETF8yWWJwSzBMcW1zekJTa1hpQTJ5c0dqaXR1VFN1TF9ISmR0ckJpbklYcWRSanY1WE1rMGh5UlZkOVozYzNzWTdwbW1WSFhNc3B6bU5IUnhJQVR6SWsxZlpuWlh5WlYxTjM5WWNSVW5fYTI5YXluNmFjVUhLcUhUTDJ1RnVoR0lGMTZTRUptYUFZOVRSSFF5ZHhxNE5RbG1JU0lxR2VvbEhsQjhHR2NLZzBmMWFLNlNBSmVpTWluNVhUdzk1N2t3SW1XZVYzNFVxdTFUeXJBZlpUeDRwWGU3Z1QyRy1CYWdqaldqX2pOd1ljenRiN29NTmtuM0JtV2xCYUp3cEtKSVRPcFMtdDUxSFo1Z0VjOUtwaWVZcVpUakJSdVRSUWpJTTdKQ1JCTEJ4Q0tTMjRYSDlIdjRmbm5HUlA4aEhpNFZkTW1mWDBJWkRIZ3g1UDRyNXMzb2lKSnoxcFRjaFBiOWlmX2w3eEJrZVQ2VDFGM0lFV0pJZHp3VThYQnVjU0JiVU9PNWJtbktGc052WGZPRUY2b2NhWGZWcHllRm1yWVZ6RHp5VmY2Z1hzQWJwcV93UklMNWxkQmtqZEhhTWhFMmI3ZGhLZHZVam9oR09meEZvVnJqdU5wdVB6LWV0RTUtTl81cUY5Rm9FX2JJTnlkVHlYLVczM3NWREotRFI0OEtnTENGWnBxdDRxV3gzNXFvN2tYQjB0YndjT0ZPMmpoa1ROcE81RlpPNWRISkVPODd3bEVvNU91b1BKOXF4WExMNF9jcHpJUHpwX0VmcmluakZPOEE3am1RbHpWb1RTQXI5ZDJnZlVQQzB0dk5oa3poNWpLNmFPTWtwc2xidktnU1NFVEVpVUQ4M1dYMC1LQURJZmlzZWJHUG1BZTEtbnJLelpfWTN5Y19lb0RMdU8yY3VNb0hhbzdRVW5tWUd2U3MwaWoyZHhqbFBYUno2NlJwaFBnTXNVdmpDZ2lqNHp1RjAwMFdoS3FpM093a0V6WWwzWGhiX1FHMVduVmtiTXpqV21tbzJMSWJWVVh0a2pyRHI2ejdXSUdTc0kydHJnYjFpMTlfYlpXdlFPT0g3R0ozelJhVkxoN2VyWnBXSV9BVTRENFc2cU1nYWdJWldlTENTdjltQmI1UnhmOFJPSDJ6d21NYlRvRkxBMEZKQUpkVjYyOWlyTllrc0NtdkVVUTVnY2UtX01zYTVrQmJEMWFIcWJZSXNmODNDYzh3YkpnZFlRRnBCMDFRcTBrbENHUVJtRUQxaDVGandiWVNvTXZ0VkF2MTQ3cmxUbHBzLVh2bTlyOVFrbTJzWW13YUFHZTNuN0lIQVUxSHFCd0RDZXhUZlhITmVWMVdsNGpEYl9NUkZRMlp4X21iR0lQUkJIanQ1aGVzc01TRjdSNkhwZUVzbVNrNE95U0xMbDNKVHZ5RWhKSnpqeXhPMEhfUGVSZWN3N2JRb25iSTVJa3RPU0RGS2pJT29lYzdVYWxvUHc1ZV9abWV5Vk40aGcwN1Q3RVBMcGlwV0wxMkdkQW1wSWVtMk4weFR6eVh3dEIzSUJUcS0wRDNwNlNDMjFjZWNTMFl4VHFrSkI3WC1NcFJOWkdaWF9ZZDVYZW5OalROV3pvY0RXLWpBT3pQS3dHNUxVemFfejVwSFVCaW9XYW1Cemh2a1UyRjcxQk13eXdLSVZNMTIzSVFhMEZ4QWoxQk5JeGtpU3RqQjJvcC00N0xDcWxReERsUFdndU9XOVhLZXk0VTZ6VzAzMmdiMVZhNkY5VkQ4TGdKZjUxSFc1eHFHVmRWNGdPX1FHMUZhRXdTdUtkM21GZ2RPaE4xT2c5a0huUXluRnlqY3pCaThUZ3YtMENEcDVRZEtDOG5QTV9tbjlvaXBQM3RRbnlfRmZ1SmwtNUNUVXNKQmtqeV9yS0t2NkFISUV5SlpmQ2doZFFRSG5WdlRyRUUwWm5jQUp1WXhTM3RFX2xDNHN5UmhKNGp5Q3B2dnRrOGpXbVR4ZEZhSXM0cXRZV0tuRHJiaHdRUllzSVdCVGdBMWc5UUhmallRRFZZVnh2U0YwckNmOVluNmpxTTdSYXRzS01faWxTX1JKWTBiaHpRQ1dUTkpqcXF0bGxoMUhqUG9PYWVyaDBWVnp0NGxWS0VsMEdvdllLcVUxT0VHcU91MzczdF9JcXcySmhTQlp3eG9sRHJoQjRCa2tWX3NWeWp4WFM1TElUQVdUU2lTODVOcFVWZmpyZXZiUE9hdTNMWlM1WlUyb0lGVm1yaGZ6RGdUc0Nia2RmcUVfdkdyLUtBMUFwM2ZNbmhzaHhpTHpVUzZMYVFPRnlYRnZvWS1XbUdla1FobFVUcE5BZHJQLWNLemVZNFpJRmRMR3I4RWlMOTlHb1l0SFY5NktZSkRJYWtobDhlOXloU3ZNekRfTl9BVVVQaUt3VDltZ0Y4OFVHQnZtRnRWLWkzdF82QzY1elpTem9ZUTlaVFgzQjhlbTFDMjRQWThXcnpDelpGSGhwWkJvOERTTkh1YlhyUWpCMUhDVGEtWE5HbU5weUpQUVFuZTNxVjZCcXRYZWl3Tm9ZNGpEeG5MQWdKZnNhX3k3cU5KbTlUVmlESDhWamh5YjMzY3djTTZSZ09CazZoU2hZMGVGTmozYklyMXNmcVBHb1FiaDBwZm01SktFZnMzWGpIOXA1SE5ISDBBZUpkMTkwbnNpSkl6RkVndGhsckdqVFFnMzl1aUhqR3lZS3NwOVRqZmUyVDNiYTNrWVlhQVVVTTVEYVl2TFpKZzJsQ0VjRXd1bGxyU3l2VmRybko4OG1OZHJ3VnZva1lERW9Cc21tUU5LNFNQcjlVWUYzcndGVmJLTEx5TzRvNHk4Q2ZqdVNfNlBPTS1pSzFiS09aVnhaTjd1S2dnWF9oYno5VnVsaEtGaEppMHVvbWpnTDdjbER3TVdnaUR4RGg3WGJYUGFidGVtNVRXeXdoX3B5cVJ6WElHOXFzRFdCeW1pTm1SODFMVmdLVGJncnJMZjUwenRYNGM1LUNkWnE0T25nMFMteTFyOWVQc3ZhMDVzakFnQ1RPTkdmNWJlTkNQQ1NTTi0tS0h1bEY3bEo2WG9naWJ5eHQzTGUwdWpWU0JpZlhGdFJZSXFtaWVGMW5mbHBaQTJYdy1memVMdWN4VDY2ZUFhRVFxZEZYc2FETlFHYUZackJ4QTY3bnYxM1owVXBkd1A3RmtaVVVSc004Y2t3ZlJsVGc3RGJ2dUN1NHJBclk5VllEc213bkFvMzVNTEZrWGtLdERyaXhNQmVkUzNSTG9SWFRhNkZGbENZQUpHNFNMaHFUOHBGTTk1MzVMT0hJQTFMcVg4WV91ZlZSNHZTc0lKR1ZqNmFtYW0xTEFjbjQyVG5BeEt0RkhVLXhqUTQtLW95eGVyUktMYW9DZWtnMVNwRVBlTHJYNlVtbllHUll2d29fR1pmRzdVMlpsZnBWT09IN1lSUFBpcnpxSVRvUWxMWW1lT2FWWF9jak4xOHo1dmRLMUFOeldQTFlmMFNFNzI4V09NTkp6REswM2dsV2tGUWRWQUlwVkdlNDd0YVVBX3Nldk5NbnJua1ZnYUVRN0t3d2I3eldrVWY2THpKcU1rVG91UXFwRDVqaTU5SFVaWVgxVV9LZHZaOGQ3bnlxT1pGMExReThsZkpQZ2dLTF9tLWtfaFNLUUhmNmVvYTUzMFYzVDdkajAyMURlX1hkQzVHOTBaTklHeFVRVExFU1pwNTBTTlIxdkM1QVJ0Q2J3bk9JVW9mVWZ2TUVHaVcxaDRuQ0VvNURBbFVQcEtxQ1NScVMwb0xPZ24zMmxiQ04yMnhEbV9NOWdHdFVoNGx6YmN3STc4OVpvMm1QQktYeTVqVThWUGZ0R1dueURpVFVZR3U0eGJzazRacVMtMXZsSkc1WjQ4UVdDblhPeDRkUmk0Y0hFbHg4MElpbTY5Uk1HWXQzVk5WbGlNRTg2d1VkZ0lSbXQwTEpzOG5OV2hPeDFmcHFJc0hCYm9HM1JFOUc3d1RKYS1mS0pOXzZjVVJmTlVuU1lIZ0xiTWstSUJMM1piX0pIWWhfVFRSRkZabFhUV3J2SjlaNVVKQUJ4ZGtBVXNsQnpUYVBwSnYyRFZNTGtmcWVwWGtKWW1heDZydnlOdmhUM1FpbXpUTGRvNzJncWpvbjFBLWUybDhTSWdZVTJJQWRuZm8wdDlCTGN5N1BpQ0ZHR0psbktzVUxtZEQxMDhudXhqVjUwZkN3a2hZMGxGUTJiTVgyMmZuajVsRlZabFg3dXEtWkQ3Tzc0clo4VGVVdXlTS3h1YkFoUHAxR1ZzQ09SUG5CZVlmNFdRTHZuQjVXa2xFRVlpYTZkSWJlTXRBcFo5YVVuQi0zdlJIVXZGeVdzN3YtSHJ2OWJ6X2ZLZHR6N2VlY0NmRXNuUXhpTjUzR0p6dXZhMjh2N0tpVW9pQVI3SnlaazhxWF9sT2VmeldRMG1kX3lPOW9qcDc5RnRWSEJrYWRWWDVidWZmNjJEeDZYeVZPbm0yZDA5ZmV6bkluX1IyVmNNQXl4T0FKM0J5VGJaZThrNDJkRkhrX1pObTVpXzVBM0gxdW1YMlVUamVZWmhITFl6eElqTHFtdGtFU21KUE1xaXphVk0zSFF2LVozNmtYTkFuZ3ZLRkxiaTZlcnpEeUxhZWJZZUwwQ0VpZUMtRXFwMlZNUmlpVU82ZDVUekd1R0M5Z2xXQ01Cbm5aNmdvVmhoQ1l3RlJONWhoR3hfRjNmUXBtV3lTZDFaV2lDd0ZTYjFyb25JSG9hbGRqcUVvLThod0hDQXI0UGJQQURzZDVwa3R2Zy0zSHladS02YmR0VEpucDItbElxejViOG5xc1U3bThraUpBTElTdjlkLUtvMDM0ZElidmNhbjdTVVAzM3BkaExoOHBNc1NNdVBmd3RrTUMxWVEzYW1KNUJRVHBRazZtSjBVYmpxdGJMTFczdXRiejlkUURPaXBobWVDSnFST1E2aUQzMk1WTUQ3NWt5alhlei11TEhwMlZrRzV2LXg3ZFRmdHRXTXhaYTh1WXVpQXY3djl6OXVkU3RNTTI2a0oyMjAxZnlSRmdZWEZ3SlN6MmVuNzFaNXA5LUZWejY4LVFycEIxM3JTRUJLMnRyNmpUay1OZ09TR2NQZUVnMEthMHVDUnZ1UTBiRWtEeVQyN1Ribi1pQ2UySUxaWFNsMmU5Q3poR29CS2hLckZHajE1WGJfMk5oa19lSlFCR1ZCelMtSzRHeGhBOWhJY0ZaU1BYQ2t4ZHBzMm5XWnZwekU1MUF6YzJTcEhtSmVaNVBlNzBNUHh2b2tTLUZVUjdwdVVqQ0U0RzhhN3plRDFTb1U0YTRhd1RlbWEyUEg4cm5lbUxqT2doVUFBaFlLNUZWLVRvdTk3Rm5wT3B1TGQ5RFR0S2dvWENHUnBTbVlXamZPYzI0UVJ0dm9hUlBtWGJyWVB2WTdlSU01d3U5T2VvMkxMQkFQcHhldnBtN1Nac1hObjBXWU9PeWdDdHg1UEllSXRmNkloZmtHZHlSbmc2dGNnRkhEbG1IcHl2Y0diRTV1MDlQa1gwU3FJaVNNdEVEUWRfZEJXbFphWXNRNF9iR2Qyd19venA5R21tOEE0NXVJMUxEZDdDZmM3a0tVSnVNQzhxNkJTTVVXVnFESC05V3Z3ZC15SHBGVnB4Y0JKV2FrQ3o3VnNpbERRX3FxOU9rSTRyV0tYZ21JRDRVSVozYksxdG1odlVtR0JqQXFVbEh6UGJxRUZ3ODRGR2ZnX1JGZ2syUEk4LXlXQ3RuVXR0VVBNbEVheVQtWHJJYzMwVjk0QkRIcmo4QTMwQ1lEMmlrb2MyaVJDa0pMbHN4Q0RJQU5neTg2YlpIT2hpWkgwM1RqVjBrcjJzUUk2UmN0dzlSVzRYMkxrcUhlR1k3eUI0UFVXbHlucUs1eUY2N2F0QUVoSmdnanVLbWNrcXVRTFdJRTYyejF1d2o5OEwtcFVxY3lFQVFZRU5pSjJhNjhWdVV1NVJla0syT3ZrV09fWEZldTJhcVNxcE9YWm9fV0ExNWZZZnhNeWhBQmNEUmRoR0MtaGFfd25jX080NDJNOXB3VktfLVktSlN4WG5zdlVZWm40eDlUVHU2SG1BT05veHAxRWNhTndYVFVZbDNsR0pORDNUZENCTEZLbU1FTnBBUElXWmlvOU5HM19yRzM5Tm1pTzYwNTJQUTduV19aQk1EaVBreENzNzRxamhVc1czMU5uaW05TUZMZ3NZLVE3Y2FBcDRJd1Y0cHR4MHlSYzltUWFqbDdId2daY3ZwdGlqMDc2cm5rVGpjRmRrQllnYldiTENkOGRSWm9qVTJHbGlnXzBzc2F0WlYxUnQ1VEkzSnF0VVJaSUdET21UZTl5anVLYnJ6cHhCTnFwYlp4Z3dLbEtHa1kzak5JWVNJdnRuOG9xSGhJQjlPQjRmeTZnZE1ERWJGLXltTVdDQ21CM0lqNnd1MkVtYlNudWZnYU9QVHFWcV9rYkVaUjl5cDJPMmE5UmxSbEpqMzN5WFpiZ1dIeEtEMy14T2JRbEpLeHhHSTJ3UkVudDVzMUwxV0NVWGJhMFhQVjI0V3owaGpuWmM5WVBoUVJ4WnhvUXlVR3g3RFpzVFFiWFFpY1EyLWdHYk4xd3A1Z29JZHpRSm05MEFKSmF4Wk96a0VkMWQza0ZLWWt6Z0x0ai1pUUtBSURsaFBMbzNGWjhncExrM0tfYTYwSkxIOGRJS1FkY2FaMzlDeEZyTGRESE5vcjB4dGNoN252R1M4U0tRYnRBa2hBdEVwblBXclNzdjJzZkpCVTY0eWdHZU1fdXlYYlNzclpWZjVqazFWb3JxaTM5c2JDSXBMYThZV3N3eDRUQ0c2V0R3V3ViX0pVWGxiNTNoUlZKTnJRREJiS0FTVXFmOTFmaGVZQzhuSHdNQjNUU3J5T3JBUDdIZVZMZFhCakgwdVNIQzRNWGNKQVFjOThMa0xaLTNvbEtORTBrb0Y3M3h2Q3VFTlNmVUtKV0YwVEQ4TFVqN1VGUnNONExyN2EySmFPZm5hWE1MWG9xTWcySlpVNWpjbl9KQ0VqUXoxNFNlZWd6cEQ2ZUQyZmI4M0U2QVBybS1yR1ZKaEJpaV9YdWstRlhRQ1A5WGhNTzVxSmhlcktXdVk1UTJrdHNXdlNBZHo3R3VmNnl3LUNiZWZERHc3ZlBJQUlZamxISGtnZmpzQ25ZTDBCalNOdmVvbUxCMnhkYnpqbWdYc2tfOGJERXk2alVPNVhMU1ZUMnRpNmtaMWk0amJ4STljUmNzVUJxdzh3VXlJRnNaRE5hcGR1ZVRrbmhQZnRWU1NGLVhlMTBjZnYyOHl5MDFPMjFET2xvM2RiRXdLQzNWWFV1RWpRaGRuWjRQSWdiY0RrUmwwcUtPOXFtVXVlN1puS204MTRra01sNTk4R2hQNGtpNEZQYUgzek5oV1JVaFBYaDRtUFdRYnlFWFhjNnNrdlFnMDE3MVRGT2dWTmhfbTFPdy1pN3JYU29kUTVpLVlnSU82bzN6Q2FtQ18yV0s4YmZmSDZKUHhhLTN6MVp2aHktUlFLa1NxamVOQU9QVnFBMUJweHRVUHRrMG80ejNUTlpRUVJJLTFXUlV4UUxwTjl6TGtrU1VqbE5oam1BVmtnVmtiRFJYSldyN1RaeU83RFJSX1FsNkhjVnU3NUltay1fZHRzZE9MYXRpVE9mNDVndTBWUmc5S1FFeTlzR1d1S2J2ZmIyNVB2bHJxSWYtYmhZTUltY1NaNmVqdmRaUkVENlQ3SGpXRHlRMlBpSVhLQzZKN1VZN0NVeFY3OVpFdXE1OHVSNWt6aUlWMVNyTEJlN3dMYjZybU1RTlZYclBSNVhXNnEycklia01zVkNSUUVYNTZwSGpSSjE1YUhXOUtZWXkxcXBlN2FpMS1lNkVLUzFfVHVJblVMVDVzd1BTSEt2cFJzQ0Y1Wkl3RHJiZkVMNnRWYXhJSTNtc2lhcEdHTDFYdi0wQ3FWUTZ0bENXd0VtNUNKTGJyamZhQ1B2WTR6ejl3SUJoRmJSN21NN2xCTmZHMm9VSXBmY0I1eGFvdlNycU53Mjd2OFBmXzM5Skh5SW1uejVDQ2QydmhLYVYycFJSN0FkZWVaZ09GZHFpcTQwYzN2VGJKMEpURkVkTTRVVktucGFLWnFMM2pTaHBybF9CT3oyZjFzS2lvb3dsaTR0MlVJSHhURWR5b24xRTlDNDNzOHFtb04talFWSy0zQWxaVUVzWjJVOGdpNGktVUFKSG0xMGRvMTd3RV9jTllWMlo2T0tKNzJkSzlleHhPRzdyUzRlZVRtWm1vd0dCeXV1c1lUUE9lVkg5OUlwUl8wTE5NQ3BxajhUUzB3T3MzU3dKRnhDZVk2Q0RldmdJcDYyTXR2SG9oZm1wYk5jYWxlbE4zcGhlZS1ldXliSnlVcnM5dC1EVFBJRUFzNmlyMktxWThvenA4TDF6X3VuczlUdGZ6U0twb2RjUHhKZHlxM0lvTld1bVBkWWU5cHhLNXE5ejBSVXlWMm5mN2h6NDhkMjZTLXlRVXhIR2tMWFJSVnpOZkpDVUZTTkFmOHRPeVJCT2pwZ1hfWURJTkxXT0NrSzh0RE5ld3VBVlFfSDlka2dnSUdadW9lR2NhYi1hTmI1anBraG9XU3Z5N0Z4aHBSOXMzbDQzV29aMW5LVmRKNmV4ZHVZWUw0dy00T1I0Wm5DNE1CUDM2S3dqOVgwazJEeW91ZjU4eGIzNGVka2txSVdvNzVTaTktOUs5MHUwVUhVTm5Uc1RIRlNSSXlJbEdqXzdhSjRUVTc2WGc0aGRpT1Rlck84emoyajB6cXBpVUFxeUprVllJa2NvN3M5M285QTI4MWhTY2ZidzBiN0RYRF9HeV9GSVp4NldxUWhfR1ZsQUtZandRU19fU18xSllOZ3V0YWh2NV9fSEJOM2NvR2RERTVxRmNwZThwekxmVXNrT0tDYlZUeHR1NDNOdVU2N19rVWVuNUZKcnc4NnoydXItVGo1aktIRm5LNUxZYnBHQlRyYnNJZFBqY3I4ZmFrOHJucFF1Tk1qUWFHdFRVdXY4Q3lrbGxQc1hEX3ZMSTV1Szc2SXlRVFdUS2p4X1Nqa3pfVk55R0lRUGl0VkFJZ3E0NzFDTGl1OTM0b05DbVk5a25WYk9RMlI2SncwV18zWHJ4OGhvRnFzdGZOU3BpSGRBRktUVFNIOUUzZEdGMGJSVTFLR284ZVR1S2xpMFVjaDZiZTZ3bk85UjdrX201YzhzRDlqaEpnRmZNMmhkaTFxaGtXYjBZRnBiU2NBVkZEOUZxcTdEazFhdGxOVVdkcFdnZTduWEllemZFRmtuS2dOcU9ERkN1dFhPaHBOTE85a0pIQndTWUl2aXB1b2tFWDBvdVV4TzVrU19Ta0ZldUxOdHg1a185ejE1QlpWcjJzc3ExRFNLQ2hfNzNENzh5ZmJzQ001TWJ2SEkyeElwLVo3enJIMTJsZVNGa1A4cEhzOWNzN2pkdWxWQkM0V1N5VVFLbGJhLXJ1czdQQTFXQWtQNm5XLTZUNmtIUU5waXJnU3N4aXQzcV9FdnFCV1Z6bU9laHZ4Ykt3c1B3bDRWeWk5UjhjNU40ZnphaW9JY19WZk9ubGRvNFNPWG9yM2M1QzlTdWxtbEcyNnltVWZTWm52RVc3eDM3WW9TZFpoYjFtYmVnWVB6R1FKaFNmYjFNOEtfaWk2d0FFZG16blZoak1od19JazZETVdQZEhXblk3cHViblNIQjBkbEdyWUJGMHdFV2xqVlYxVVRMVC1yeE9TRVV5c3h0N0pMbFE4UEtsaVZ3eHBQOVlXM0tFQ0lwaWxwMVRiRE9KX19nWU9IdExQR2Jvckg3OXJfYUNWTDZ6OWVpbmZtcExTdWhtaTBZa1pKVU1vMXlHVjJqQmk2R1FHeWZ3Mk43eG12cDNnN1hiY2Z2Tkx6dWFFdW9DZC15MnNDMlpyM0lESlNsb2k4RmZ2Y3hwUWt3WHhaSVE1TDh2QllOcmVUOVNBZ0ZxM1hDQkg5czNUVlh1OTdYYnpvdy0zSTg4em1aOWN5THNHWTZtQWxCbkc5dnpyaG1MTjE2eFNTamdWdjFLbDF0S2FWMmxyZW5EaWxOLXZvSjU2cmFzUXkweUxoeHpVam53bjdKR3ljUk9mVmREY29fOHBmcXVNbVlLUy1iYkZpcWJPMTFrR2tHaFZjc3JlWmJ6QXFSTEYzeGJwYVdTTXZMcjdSYkF4SDhURWgtY3UwSkdPUzJ0cFV6MDFkenlMbTU3NXNpd19UQWdwaW9tSlgtaUpsSHVudGRfNzRxOU43WG9ELVVtUmIxbURQODZMN3BEbDNQODB5S3M1MHd5WW9RamJNU1YzaGtna3RRZDVLOWNZeEtWRDBvLTh6d3Q4VmJUTnRzQmZFSElZUk9DRlMtelppNjgzRXBUSmVLSGltRkVwXzczTnFuUEJJWWhDU0wyTWN6aFMtRHVPVTRmNWI5UGZtMnZhc25NcDF0ZDBTMkJIY0dhTlQwMUI5MVFQZXhoeGlfVmpnbUdNSGY0c0pMQUJZQ1hlNENQN1NrY0pKVTFYb0h3TEtaOGtCNlZSMTkzNjRPSGVia0NOZHlhUHZYdG5QRDF2cXlSWjlaOWdwVmFqdWRScnNHRTlwZGh6X3JBZGRmYXhUR0lmcFNfYmdZNHNZdC1KME1TZy1QZFYyRHVmTjVEYUc4T3M5ODVoNUtOd1lmX1l2TVNvZGFtR1VDc1J5bE01MUxTSEZvdy10dG0zTHRfcjRqS09JeVVFVXRKRVNBV093NUVBTnFpamhDV2k0aTFLSnZoeVJJNjZvVEtuU1A1OUNENnZLdDBtSmRpR1NuQmdWU0szQW9XT3lROGVmLTN6MGlEMGNpWlVRX0FIalRXZlJVX05XcE01YmlaSWxJZ2s0Y2NpWm1yOEhONDk4aFMta0E5UW9hR1NFTUFpdmNmU2V0eGV5ekVQN0J3bC1GYnRvY3M5dHR4WGREMXNLMDNNVmU1T0JGdXMzdGJNbnNsZU05R2JaM0ZYTUtaakllX3hEV3dvMW53eGw0ODNrNUg1V01SVWRYYW9MREJUOWFHdFJybWNsYUFuYi1oVHJhQjBacm9sVlF3ZEE2bnBQNElhWWVzN25Jb3VTSWRYOWd1TWtoRjFUR3o4NXNUX0dtcTByNDZBZEdHdGZ2dkhsQk1tTWxYNTVOYUQ4dWQ2UEZ4dUNNOUtfOHlOUHFHRkxsRTJ1ZWFVYWp2Q2l3cXUwU3RwQnltMFVEV193bklhUU5VRnVJRE11ZDVabnhPNGNPbk51bEZiLTJxeUVJa3B5clZSTUhNczVMUFQ0MkJXYzllTGRmRHZLOFdjVWRxNC1LNlFvTkhyOE16MVNSSTdEalFyeF8tRV8zX2w5cHlnWG9oOERvbVU5TXdKdnJ3cGNBWi1SVjU2dFg1RXNvcFVHUTNNVXlUMC1iNE54WmswamxBc0JOdEdhS0JFWDQ4QkR2aGI2ZzYwN2xmYVBndk1VSlpOOG03b3ZWdmwtWldTbXlYNWpfSFB2LTN1cnQ3Zk1YNkRoUmRHaW4yQmtFVldFcnVQNTlDTVBnZEZqWFdnblF1dTItbnV5SlpYd3BZYXB1c1JQSTR1NU92ZHVFdWFkbWRnRmJub3hXdjBrUXdzRnVDOFlyZG44dldfVlNpcXh2NEhsLVZidkV5YVhOMjZoNmJtVGlEZDlKbGdZa2RzVTc0UlpORldPWWNOR2pyUmd2OHlYcWdMekZiMzFqSnZ5YXpXTkN3VkJ3N1ZBcVB2WEtlN09TYnFyTVp0R1hrSUZIZlhnMnA0MndfUnBuMVBGZ0JnYmFGS3lIZms3M054NUplVHIxaWJKZ0kwSHg0Mkt3MFVtWGpRLXBDTHVKcDJjcGI0NHpDZ21SVlRnOFIzYkhIVzIyazMwRllSektOMDhJNldtYmxNdjlGby1mRUJITFJmb01HbkJlU1lzWXFpbF93MXV0VldqRGt0THFjd0x1c2RUNkhCRVVXM09tcFVEeVdpUmU5VHc3c1NkUnJrdTZYY2M4MWFPVmRCaHNWOS1GYk1Uay1GVmxKck5VRkVRb2JCTEFJXzd0LTBGajhuQnktT01KaHRSWk9keFhkYUpGSHhCWGFaWjdub19VbUJobjhaQWVtYW04TFFaT21TX20zejloVm9sTV9UVkY1bDY5NmhNVXc4WTNOeWdZNkFZLWhvWnR4YWxOT1g2bzY4R1pZZzQzN0ttTW83NWY4bFU3RWY0aUlDVDcxeFdsZ0VaUTRGeHFjYjE3blJVUDMzLWJKNFVwaElfMVhiN3Vmc1Yxb3otYXIyR3FfQWVCSXQ0a1hRZElJNGNieTlYczRmUWNtVTgtanI1bFY1UWdWUEVfTENFRWhZa25JVHhhbnBiUXpOcjNMcE1MeXlfSzFUT0hBR3VRMkVUdFp3cm9FSVREWmVpWC1mM0VPemNxU3ZYcllQdkVsUDM0NzBnTXpSSERSd2pVNmo2MTN1WWM0eVlLS0EwOWVCdDU5RGRHdzFtbEFEdDc5a0pwZjB0NWpxR0paZDhZVGUzcjJSM2d3MEp6ZXFOOHczRUloVFJwVEU4Zm00X2w2dm14OWtLNVI4VjBMeV9NLWN2VnhCeHExN1p1QXJhSm1qd2NNZlNodzl6SXdkZ1FSSVNiWUhIc20xSmlpeW1tS2xQTGh3T2NYWWp3Y0VZbTlQdWJScG5lSUV6bTQtSjVnSHBGdG1BVERzbTl1U2JNTDY1SEdiZ01BYWxfTXJtQzAxdFd5X0dRSjhqRko4dW9vVnNXemg0dGVnanItcXVUNE02M19xWnppSHExQkVmdlR4U3NGVmRmRE4wM3B6ZDhkZUtzU3Q4WU13ZGQ5eGdoU2pCLS1DZG1kelN6eE9iWmlpOXFIREJsZ1pPQnp3LURBT29vanNaQV9SaFY5ZkRqMjczeVdfbHpyeV9rTU5LdmhiMndPdUNCVi1WX2VfdzBXSFJtQS0tSE93UnVKemNjenh4YTFXaHdjc2R6UGtoYnRTY0FIeElrY0VuUmluT3VEQzZEU085YW42bzlmNVFwVmZnZmtEa0ZQZktkZWsxbm1KSGNqbDRHbkdqbHFrNEhYUFYyRkZic25FWGR2cGExVWMwdXRGTHhwUEhvczFKYWVWYTNXWi1GazNxUnlRTEN2Snl2MzVGUU10OWJVend6ZG5hR0o2TlN2cFNzUThzODFRZ2RqQWlFdXZScHpnTXJEazAzOFRhUWxtRmFPZmd3RndSSUgwcWV1c2JZT3F0ZEhmVXdFTms3eGUyRDJNRkt3c3lVX3lKN2tTTzFTOTBIZ185bnd2czl4VGdUQy1yOGJ1MFBtTmN4SGlfcXRvMngxSWliSkRPckNBbS1QWEgtQ3MyN01XeVVXWFpLNE1sdE11cW82SUQyTzg1WDh5enRheDBnTnlaZUg0TDBlelFfdDljb0JqeWp4U3hIRHpuZEJ4RmhKaEFzSTQ2elBXeE55TUJ4cHZsd0VxNFU4R0YxaU44NHJMRTlqdm5uVWtRZklCMzlWNzlfNXEtR0Q1Q3JlRzl3bjRfR2dPZENkdEVRMlI1Mm13TkZwbVN3WmlFVVZHZkRuTkdSN3hKWjU0RjAxMkQ2bWZEVGRwb1k4OV9ILUsydGR4VlB1cU9XU2FiN0wtY0RBcW9mSHFoRDBjYS1DNnZ0RXZTOE1nNzdNZnB1TkItU0g1WVhVajlyTF9YNVBxWjlEeHVXMkxfclVKS2tsaVJfWXgtU2h4SnMtYVU0OExMRkFrdTBWSUM3cTVieHVWNktKNG1lMWs5TTBBeV9QYzRRWWtZb29kbVVCdjRJTXZxTjF6dU9mdnd6OFpidjNnWDVraFhqaW9aSThYOHhLaWVOajZSWFAwQ2g4SVFwSl9sTVZkUFNOcGlPUHFjY1c0VExocEdiU2tXd055Mk5scDllNlptZ2w2eWQ2cnpfaEpJWFFBX0IzQjMzclVOMjN4TXhlRURRbm5sQkc4anNwcUhwNnctNHhOdFVPaEw4NTZZM282YmNENUw2T1hNS2ZrTmlFOFdLN3FwUFF3RC1tWkpNc0RsZzlYSkFFekZIWHFyZEM1YUhvVTFMQWdXMzJzMGJGVEROclJnRnVjWmFseW5HZzhCRmIyOFgzN2NwM2taRXFZVzhJSExiaXNVXzF6eEJQaHdTd3hjRzNmTlVIb0czZ3VEbENsU29sQ0FBenJHajBuZmRpYlJ4c2s0OUpkNlVPVUR3MFZtUE5sSktSTWM4dXNSZ1dZOFRaOXZOUVZzakU4M3BpejFvM1NoVktSWWxhRDRCc1doaXJ2N2lyaG45RzJpdzExd2ZiYWNMXzVibGZ6Tk1BVEJqRnA3VHg5dlViOW1rQ0ZHM051UnZrVHpCYUVCRGdtcnBuN1ptbm5kUTRTakxBTjJkWDJHWUU2UkFqYlU2cVo0dkxmN2phYWtJbmpVV0pUOERKUEJzWEFCcDgzWmh2ZUtSdk1rdmV5UnJ6VlBhZ2dSZDQ1V1VCUmk5RUxOMjVTM3p6OTdGRV84c1VsUGt4VlFTWWVzNGd3eFM3cVY4anBROTFGV3o2X29kdXc0b1FtTWhTb0RyczAtOVQwc1NnLXd0SlVVWEJiV3gteE92NmpxX2ZZTzhjZW1uYlFpcWZSRUw5blQ5XzIyTUFySkxSaUU1bmhmSmNFcVk2ck81SWFfN3pPNXBmb0hNSGczQW5wV2c4QW1WR2JtZndTcVJKT2RBUlhYWEpXMnFNX0p6RE5DUzNTcFBJSU1QRHdHX1FkVldnWWpKY192ZlNCRGRrYTFQNTFJQmN5ek1lSlluMEhoTFVIVGpnc05GS2lXemVsaVZSeGVLVU1wcktnQmRIVnc4a2FHYkVlNlBKUmhvNTNobUY5VWtORnN3TjctQUZHZ0xuWldtRGRMQ0cxczRDVVNsdU9CZW14WUxMdXpwTjQ1VHFGNEJReGlwTHNnWlRqQllQdWlGVFVpb0tmVUN0LWdWbkpsWFdfTzVCbUlCRmFzRXVrZU9zRjlobm90UC0xQnlJNEpBbmZiSnNncGZiNVRKcW0tLVhpd0ptTU5ZRWdqY2RrZmdQSzhPLUdXZjdQams1TkkweVVLSmlEMjYtM21tYm5zdkRmN2J6YVMxLUFISzJtQTZ6WXM0SkF5SFdyVkxiWGw2R2gzeHlkSzhOeWNrNTV6dnFXWjZqVXJWVVhyWkhCOVlzYndIOWt4UGJLQkRNaS1wR0lkOHZaVzhCV2VkU29MZjZOY21pbVFjQ1B3YTFFS2RpaGVpaUUyWG9RdzUzV1V4ZExIM2xLMEk5QmV0T1BDTnhDSGFnbE1ORUczY2xVOHhJMi1YdTRxMjZkanJFM19CWkMwaHRTTU1GY2hOQnNFZ3JzOGlVdnJDR01xYjRjMGdMMHBBRko4REdFNDl3N2NaWG1wN0dORUFrU3cwemctQm1kVDU0Ymxtb1ZyUGt5T09WMHdSRWM1YU9iaWNOTmU3SFc3VC04LXJZQzdpSFZpWEpibklabGFrUERxN3owNVJCaWhrcGNaVzlOZy1pTU5qWVF6Q0VUQ3dyaDVYdnJUdE8tR1Nka1ptMmo0WTN1X193V003Mk1SU0k5dkF5YmNIT281V1cwZ0Z2TEpuUVl4a3NVMlhCUEJKR2FlbXZMMnZRLThtSWxzMEpZSnJHWXVKWnJPbC0xNF9GQnlqcElwbnp6dVg4VjJXQUltYXhCMVQ5WWwzZWtKSEdMOFc2bXVWVUtZOGt2d2FkUnY1TXlpQi1NYlFiMW41eEZvek82Sjh0RVJGTU1qaWFGNzBBd1NiX2k1WXFBYnV5clMyZVc5RVZnX0hYU0VQTm9OSXJCU0dXbk5hTHNyeXVBUERlUnVGUGRUSGNaaVhZaG5GWFZDSlhZZmpqYVNXM3haN01PcGJBLTFtenFSaWg1elYydTZIN3VEb1JQeEpWbDVudUtRbXg3R3lLSmFrclNIRUw5QXMzLTVfTHhVT3R0Y3RSd0pzM2RBZmhjYU9VN3Y1MFMwcWZ1Um1WMzRzcURXUGxzakwzVlU0NXVZX1FFVElsWV90RHJCZklyRnZIaVJsZFJ1cnY3ZlZvLVkxUGRSSk80LUk1c2dSU3d4MGk0bHo1aW9xSm1QeEhpaExBWGZvS25pQVc3X1VvRGI2RWVITTRaRUJxSk45a2I5RUFFeVhQR3dPVGNEQkVzRFFrM3lCbnZVdy13Qy10T1dLY2xLVWJ4cGhFQURoQUxQdkFURENWWmVlakQ1aGZmYTdObDVhUWthekctQUVXVVFuV19QRWhjaDl1ZGtONXNpcERxcjlFUWlETE13bjFkVWNmYTFqenlLaDBXd0JidGNHY2RVcFp0TVRnVXdhTzRPZ1BkWTVyS2VfVUhsYTV4N2Q5VlFuTXpPUFBfOFlMQUY5SEN5TU5CUC1VeDNiMGhhSXJ4MnZOMTBkZ0FSYWtCMDJlaG9QcmhfamxBQkYwcllBS2pnTGtGcTh5cUhaWjhOT1lQcnoxbzhZQ3djaTA1MnBvcXBPVHk5Vm5ma2Q5Rm1FSXVlVUFoRlFCN0VHNk9SWkJNZ3JIQlhHVXVRRmo0OTh0UE9qSFZVWUotTXU2SHB2MnR2QXFhQ3NSeVBLM0R6TnlWX0RuOTZEWGZrbElMLU1MN3JZVWViS01DSnVMZ0J3RzFrQko3QlhnQXVpdkNfNDkzWExCLU53QTNlVmZkbGFQZGRjU2MwUUppMmVVYlBaZzdQSGVpbDNVQ2hOQk9ETGhyV3JtWFRZSHZ0QjBKaVZVMGFabFhRRjdZMzEzOXY1bmJfRDY1aC1vNGZENlZZZFBwamNKcEJrbnFqT1NyLW9wWW5FRG1NcXBDVjhwZkwzQWpqMFRvZk1icjdFbUExUGlqV0tTdDh1X1RMRGo1WDQ3WVJfeU9LdTVLbEhMOUpGenM0SVF1RGJ3MWVSRVplZzVMM2g0X1BDOHQyeU5kVVFmbk1hODJKSGY4UkQ2eVc0aG1EeF9NaVFNdW1faE90VHMtbE1aeFI3a0c4WU5VcEVKeXR1eDRTN21HMXRuZWdzNllwblFkZ05fbDQtaXNUZl80TDNsc3gwSXJ5RnNWTWdMY3ZhWlgwLWtJM19ZVE9Ua1JNMkMySC1BRWdRMk1zYU1TNzNoTmc2QTRySW9BQnhnbVhFV1kwVC1GWDhjQ0JnMXFIU3pnQnBTQ2VDMlMtZlA2M1B4OTE4MV9ydGRKWURpdHpNZy10V0FJYjJ6alRjNTBxUzFNdThlQ0JpdGxWVHIyY3dPZ0xWN3VpWGU4cWNpMVktcDNWWXZqRWFiN053WjhNVWpOcWs0ajRjbE12dWxBSWRXSUhESm13OHBSYUVZTzFHZV8tREhLazNYUzhvNC1kT3d3SXEtZFduaWNKVzFtRVpaVzJ3ZUcwMkNZNFFrZ1JPcmk3eGFZUWcwbVBER3o0MC1PNkV2ZUc1M3JQT2VrRFo3SERGMTE1X052bmVWc3FtOGxGZnVVdmg2c1dNbDNWWWFXaVpVWS03cUFVZUZYbDhCNUNDWFU2WTdLT1RwVFNUV3l4WW5xT0pGM2VIWGJlcldiS0V1SlhPZG5QVm50VTR3Qkk0RFc4SlR6OUViOFdxTXVheVNmMzRkbXFXekxSN2I0cy1TVE5acmZNYlVuZXFfNmFydFZEUVU3QnJaRjNqNzMxTWgwbk9Qa2pPcVo5cjlYeEVtTWhESlNiNGJ0M2ZYZE9YMkNyTWdRVVRnUzBLUmtHQ1N4Z1lpb0F6WDFyQS1ta2dZT2lDSnhLYnVaX284Q1MwU0I5dUM0Z00zbmE4SS1wVlg4bVQwRk05X3RuTmFINXhoOGM4cnQ2OVpvai1RY09nTXp5b1BURWc2c0JUZEJldWFrdEZqQW5MOVlYYXNFTDYtNHBQSmdob0FPV2xrTzVIS0hmclZBV25NSzRsaUJKN1ZpLVdtMXdrUTJFZmMtNnZ1OU1pR3V0ejZMNjdpUWpqUUVBeUNJd2ZDaXJjN2pYRDNsRFlsUmdvOXJsNlhfTWVyVVN2TkQtc0ZUc1JXRGtkUUtxX3RZUl9BRVdnelBlLVM4U3Z6VjFWYlZ3ZVQ5Mnhoak5GVjBrUDM1SkxJelZONVVBUlVaSHhmenl1dzFNdzk1dzZOMmVkcUV5Nzl2ZlVOS1ExemVUUk11YmZVbFZleGVsZWhJanlVaVdYNHJ5MHlsdERzdGNtVkJkVklKVHZqRFBqbk12ZWN4MHg3TEFIel90LS0zbjZWUmxyb0FCeU5zVThibGU5ZkVyX3NCVUljVjZwanZvMkFaZThZTWN4UzhfNlN1Qk9SS1RnZmR0ck9HWjBOQ0pYcXhpdW5EdnJ2eU1SM0YweG1DemlHWS04Vk9qNmE4VWVvcTNmZEtNbFloU2ExaUI4UWJ2d0xpMmFKdVlibUREaFYwN3ZGODcxVjBRTUJQWmw1Z3lFRExBNzVFY3FobnhNblA2ZFpmN2ZpM3pNSzlZZjBzMlRSYldEZFgzZHc0Zm1rLXNNdFAzaHFfcXFudjVLdFBVNDlyLWVWUFR5MVBxeS1iOTFOV1Ywc09FNzQyMEFvUmFvOTF5MV9CSkctVlRudzBqcXVhel9DZ0NHeER4MVlOdEJ1cEtYNVFnZGZfSFdTbDhEbENSWEhtRGZYeE4xV18xR3l6ZXo1VGxXM3pXLVlGSE1TRDMtY2haWndWcVdKdkF0WmJkLS1fSDhlcHNtUnp4dnRmZEdLejJrLWpWSXhfRmpkUVpYZFNNZURfcXFuZVZON2xSaUFERzA5V19DSE5qRF9yTHBuMkJmeDYzM0U2TThUTF9ZVFdjNU5FcUJwM1BHc3RkOEZWaGxqYThkM1Rob254dzJDVWs3SW01RlJfSW4zMWlqN3hoTE55UEJlWVZrbV95WlZDZlB3eXVlRUd4ZXRuRVFmdDFQQUVUbVVud0xlSF9KMDYyZ2t1ZGZYT19zZTJjU2RaWVNNRkRWNWw2ZjVxSEI3YjU1MWdrRkhFdE5ScHBkTVlldXprb2l0eHgzd0Q1VzBkY3dyX2g2amFpU0swb2hZNHhhLUV1c2ZGekRkMkNISnY0cS1WSkdGdmw2WlMwQk1iWC1qbjJ0LVRrS1d4dWk2TldOUlVjS2VrR0xZcTRSNVhEd2pra3FlMHJnd05MS1pDS3JjVXJReWVsZ2E0SHR2OTRTRjBhMXA2LUFUVlBjbU9PMFVleFhBdGxhWTZLWkw3OTYxYnN2U1NBaXVEZ2EyY3VqcG14VW1WYUxFUjAyUXE1b21ycmNVWDBpUF9HZkMwYmFzX0Izbmp4d2NYMS13TG1vckwzd1VqcVlHejVPdmt2RHpLRzY1Q0VMdUpEVWY2ZHYtWm45MjVJR1Q4UEZPNVJUanlkclRmdkpjQ200LVNMaHpJeTktaVZGOWFfN1BzdXBiQ2tob09iVFBiam5kRHpvYXRQWGxBS2JlYUNNNTJhYW50Q3F5b29pSUNZUTNZT2dVZVYyVC0xZmptLXVxU1hHb1hPWUIza2xPcS02TFdORTBkN0NSMTB5ZVYzMi10MDFSTlVpNDJoekdqNXJsQWZFb0NKS1B6RlRUYjZyTmlHbmhENzgzS3BKZG5yZDdNRjFmajZRZjUxU1NPdU1RcnFHeWk5dTA0eHZzMV9kWlctcUlnX0o4c2JPcDFsby0za2YxTndWSlRlVnNQcS1DeTZzUDVaeXAzWFUxWmNHUWJncVhRX29mZnlCZVcyaUgwNEZHTVVPaXNfQnU3M3NDRnpsUFoxcGFrVXF2SmJvNUE0amZXV1dSa0paUmFjS3pTeXBnTWMtODZvS0NXajdSbHJHT2c4SHlyRkJkSVdNSmVsNzE2ajJqeVJZY2Q2WU1uejd0YVc3UHNRUWt6X25Ed2dzX2pweFA3MUdzU3VwTmpzaDY5M0pHRlUxWmpqRmJtbW9Mbmh2QnFJY0FPVVpUQlBWSkhoVG95Q3NWLTNXTkFob2NIck5Vejl2b1lpWVR6MGtOT3M1ZU1uN1FCX2xjbGtKZHdHSGxLa3NjaUtxWjR2WTNlbld4RDNmcmhzcU1vbXVJWlE3aHJIaGJMZGVrdGhXMFJyM05KYklGZWhONDQ3SzFhUmJESzhQaF82Nnl6aWlSZ2RqOHJERzhtVnFGb09yTXRORXdxaXp3S283OUhfX0kzTlZUVUs1djduWU56Z3hsRXNRbmxPUDJhQ1hGSzVXb09qUlRPdjRMamNEQ1ZybG55S1BmWUlIcmhsSVNxMERzZmgzZktOdTJ3ODU5Zi0wZTBiQWxSRWtCbWFJSEJybnFHUDVTWlBZXzRIWUVOVnZEQjAzT2JhUTlfb2MyNlJLOEFNdGpGbDNGLWZTZHJaSVJ2NVRqenhYa05oN1JfYnYtMXIwR2NGakFYWFVVWGdVNllzbERnS1BXakc4b3pILTBVaVZKSlNBSlFPbmdYLUNmYkdmVFRsXzJlMW82Zk9Ua05tWU1WMU5DOG81dktfaDAtZTVNTE81Z0JBcVo0QnJzaVJ1RVpVRUVyQTdLa3VoaEdqaHBsYWZSaWFCeE93b2VOdWxYTC1mU1ZYTGFxTkdzRlZCbG04ZnlWM1hwQmUzYkNveHg3NVhPSXdVNnl2U1lRUnBTTTVEQ01KMGdYQmhyYzUyZS1fMi1oWUxQZTZaank4VGloUjlubFlhQnYxbjVUcnFqakVGdVpkZ2pZMmRvZGwzQXA4M2VRUnVjcUlfU1VycnlZTnNTSW9KMG9nRFlDRFNwZUhTd1EyY1R5WkNTWUo0TGdGN19KTVozSzZGRlZMSXVaU2NiMUFFNUlNVE9FbUdvUGM1RGZwOE56ZV9ZWjhqSk9DcjA2amJjLVdidjVLRUxIYzJtQ09BTWVjRFY0UVRzc1JBSGdpMDNleUJVdUFLeXlxWmZ4WlB3MFotYjRKT2NKcW52MV95aXdZUkJwLVZ1LWR4Q3RXN2tPaVI5Zm1wWGxmSXNRVjNGVGpaMlJrM2NTMUtzLXJGY3B4V3ZiSlB3cUdlMWM2UkwtR2draVU0UVdtTmpJUmFyQlNFZTBUTldqdTRTa3NiV1AzNy1UUHFwalNRdjAxQ2lqRFh6NHFXMUl1TFBYRlNoczVtYzg0ZzJCSzlMS1h2MWJBaUdSWnBzUWo0VGdLQVRQWEYtSkd5STdUejlKdXBnWEhqTDljRmF2SE1PN0NOXzQzSDVFMUFRTUxBdlI5VGNaZHM1Uy1ZSGZkYXJ5cE5OazV5NDZRcEdsVkZNeHBTeVNzV25QTFNsQU9nM0RSdEN0SHlSQllocGNVUEQ1ZXhTWFRhTkNDemplZlpyYmdOY1lTWk04UFRZeUNrTElOSnBIQWpzRW13d0k3SEJuczRTQkJmajlOb2lyVXZWcDl0dXhjUk9VT25KR3pzaEtyYnVlb1hiWG1rcTRNbmlFY2FqcndHWWpYcXBtdW04UndkY0R1Uk9HdHFlcG9xbHpQY2l4ZnlsQnJDSG9IdFVUSWpmQy1tWGk3WVpXOUNtSllnLTlqZlViUEVMOUpIcVhVTV9VTTVKVHRqb0Z2dlBZRWhnYjdYN3FLQVYxTHlDdWkwTTgxcFdmZnQ0OEMySjNnMW9qLWZpZU51VDJMQ1hQcFRSM2ZYRlVhRFlEMWJZZFNWNVQxbkQxb3ZPdGlBQUFWb2h6NGYwX1hUZ0V1Q3djRWxIYzZYek11aU95djFEeDdySXNuVHJobHBFRl90U0xuU2hSRHhOT3V2TEJnTEt4c0dPM2diZTZIM0IxMmF1enlZaUxVTkFYbV9ZN1UyRFVuTGZYMW9hVHRQMHNpanFwZHVzamNSbE5jdGx5SVN0TWhSUUxqQWdWUVFMaUc5RWhrMlR4dnpGNXBPY1RiNnIwYVQ0U3E3bjFqSkZ5TGgwb0dMMUFVcFdnTTBXRnVjNmJUY2NMRjhzUHJ0dml2MDZuc3pCZ1ZsTEhZdDYzWlR6eHBrYy1UTF8takt0V1FVMV9JdlBGcHFkVTM0bnNqUTBYNWJIVEx6UWpDUzFhcHVaYUZzSm52bDdOSXhLdVdZVjhxQ0NPc2NELTl3MmF1RC1jTi11dEo1a2xGRVlSWFZfNVdnVGdDMEVXTmpHNXJKVkxQdE53SjF2RzR3NUlEcC1pSklrdzRyQUhsUmZsU3dpTWdYOFJSMzgzMTQxRl9rVFRXSzl6MzhrV2stcThWTGVtUUJtX2l4UjR4S3hJeVZyT3dsbU8zc3RiQThmVUJ3a0JrU2JEOXp4a19FUWRsX3duSmZQbWxtQ0x1TDdFT2NFY0M3MElxbl9UcGNMc1hKZlJhMDVSenlBQjgwLUxuM3VvdVhlTkJHQW9GaVc0UmxPNGtPa3lpOWhrS3BXN29LNk9mV3Vzc1pzQkxxdFJhWmx4WV9aWFgzbXdleWJpRXZ3QWQ5TFo0UzlTMXp4NU9LaGd5NXdpNThiSUt1dlNmejltSTNGc3hfcm5rOFZVelpZQlBpbUx3WDA5ZnZ3QnB5d05qaWFCc21ETzh4TWprRFpDZF9HdGZIZ0tjaGdaYzNGR1RSWTFOeUFsbkRGZDZaQWNhRWFQUFhmdEUxVktkMzIzMEQ4aDVNdEFxZTlZUHlaZHRPYjZKYS11SGhwT1hNVmRoa1FGck42Z0ZDSDVLUzF3clpOQXFvWTBVX3RBOXRPN0FsQWh2SUx3dDFDcWZGdDhhVVVLUGtwd0ZiM05mTkRDRGFrQnlPYW9rNGZ1ZmJpWFgwWkpWV21xTWlIcHlpNWwzYjV0bnNPLU1YSUZTZjNIWGlwMzMtdnJpX3I3T095TmF4NzdpMklmQVdMd1A3YkVRUDNpaTA3VnBlLVhaSXY5dS02aXE5Q3NaUlF5RTBqYnNuWmZzMHNrTXhENnRxeEx6bFBHVEcxRGtqNGp0VkhiTmdqc2hPNVlWT3I3WFU5Y20yWHF5V0FGLTNDR1pVSTVSZW5wT0Z3Ry1OVU9yeV9TM3pyTGxDWFhEMDh5bFgycUZOeF9EY0xpMmFvM1hTaVJSMHZtTnhMOGV0Y1dBaHR1WnRoNXliaDRUTVBJWDhOcHpsVzk5aXBmb01xUGxkOFVsWGZ0MzI4Y0lUQnJ6LXBJLWhQSjVwN05VNklSZzM1LU5BRE9BdnFNcnp0b1BvZ0FJMVVyenEyMFd5dE9QWkhSeFVlV1VmTU4zQUFGa0VJQkRoT0dOWkZPdS1vejR2TWxrZG1QTVJGT3VBdWl5cVN4aE9RY1lEQUh4dWo1NlhXV0FGcEJNTDRaU0NrV2dZWDhNY2thVDZNSFJvRVc3eUc5R0h6Y0tsY0I3cjNNSkpXRWtNZ3p5dG9zZ3JkNkNhUWNoa2dyV2pXRHNYcmhoc3M4QzZaZVJzMXdWazRWd2ExeEQ4dHZvVXVXaHJHUmRoUm9RZ1diX0dWcEJ5TzBjek5fWHNDTDdhMFgtOWVZenRlUHo3SmdfSmxDb0lWeFVYRS1fYVRGZHVEZGdLTi1oQldjVS00dVFmYWFBNUpPQ0pweFVLakN6Z0tRUTFQWWhJQUM0NThqajhFQmx3UzdNeXZlM3dvcVBpVDNNVWQwNWtxeERRa2tVdV9rZ2oxUmFxZ05HQ1NOWk5Ea1VrRGppMWFfbmxrSUZaNm1VZG1RMms5cV9RVTE5S0cxd1pOdFpnTTlwaERmZ1haTndKZzJfVDdLc0NLVVF0QVZCbEtENmg3SzA3R3hIakdJY25ZNXZfMjA2MlZ2blZCWjZXbmdSR0Z0ZnpKZHEtVHJfWG82R2xhMFNGaWx4YlVXR1F4bTV2bEh3MGJKSjk2eWFEU0xyNWVrOGJOX21COGx1ZmpURzRZX0swejU0eFBMQnpneGNHOEM1Q1NVYXU3M0NhLVlZUk9oR3RVVEtBc2RLcl9raVNLLWhDUkh5SktUR2RySjlpTm5xNjZUY2VfLWxoZ3Z4VDN1NE9MS0VsaEdBV2NvcEdhejZQS2FNaktFLTBIU1JkdE1MVDZIdXZkaGQ0XzBCeDBIWHZMWlFRNFRBNEwxTmpfTE5oNUhXUHlRbXJtR3puZ3pnZkU4VVVfT1p0ZHpGbmk1YXhuQ1AxQVBmYVEzbkxnUXd0UlN6czcxYll3amRycDJuY1ZNYWdpVXJaR2NiV0pkMjVFeld5STNYNTlTNVZZWkptOFc1VV8tUHhWQjc2cUV1Sm5nM3lnMkwzU3RGai03QVllNDRHX0ZnR0ctSnV6RFFNZEE4dzlLMFlrTWlNdHJBNWJPR3BoV2o4ZHF1T1JYQzBBc19mMTNuYVdHaWVFTkRrS3QydlNPWWptMWpidXliZE1YNklaemJOUFloWWtRbWNWZDVKdUpoOVRpcUw1OEF2RHFoTzR5ZU9CTEZyckE3TkVyMmdoY2M0b2dTVVlxSnJVZ0pPWW1PcnNQM0pKeTM1cE9Ud2gyMjB6NHpjZTFKVzdVU1AxV3pRTEk1LTB3MzhrbE9XWThqRm1UMV9HWWRkVFczSTV0NW9HTl82aFVfSkRpS1ktekI3eTM2UFhBeWstWW8wTnRoWUxDTU1SVnpFVmx6QzE5WFNVZTFfT2NPUVhXR2poM2JHc0FtWFM3djd3N0VYRzlmSXd6QVRrMGFWT3dNUWtqUG4tdHREUVB4VGFnZXM5blFOT2JQTF9RZTdDaS1UZWVaQzkzN2ZOdmcySXNhci1nWWRBMDhaUjhEQzBsU0xoM1RVRGFIV0w0aVpOZVJVbmVQcjFsNjlDeDRabHNkcUNvdXNULTdGWlI2cm1oUzFaVkQwQy1jRkNuRUQ0anJ3d202MXRYWUNEU0Y4dGlnQ0tfdVRIOVlkTExIQlZkNVhHTkJ3NkYtclpXVFNnQ19HS0UzNHh0X0RPVjFEYUt5MkEwSkpQWGFhUEZuMnB6VFpjUHZiSF9DbndfblhFSjVWcEdMaFZyV09rek55THdLTVZ4QW1rMm5NME1pdjBEcjNvNWJWLWlQWmY3bEVMUkJHZEIwVVBXMUJ2ZjBTVHZWRXF6WE5SR0V4NnRiZTViRGUtZFdYem1oS1NOSHVFU05QaWZna2NEMHc2TGdYbTBaeVMxNjZBYS1ZNzlnd0EwbGk4d2djckwwNlkzY1ozRldPck52ak5yQ3NrNWsyMmp0dWU4QVdYaHo2WDh2MjVEcDVMQzdlRl84cXphd1gyMExrdHhSSzU4a0VwWkw4RVRjY1dfdk1MTVA0Tk1HS3JkR2N1Z0paNDM2UDJqT203d3VqekxITE14YmhKSU5oQWE1WHA4aE1tRG9CT0hTaV81YzUyZHBURjVRVklyejkxV2VndDYyakVTN2czVW9oMUZNZWFmazJJRTVZaDhlaFJJaDFxNVYwU3RXQmtJUjllRUVJUml0MkQxSmRKT3BsVDVFdTlWc19xYU1NRGYxNjdVaWFGM3ZrVHd1NWxfY3hNOE5VNWx0UW45OTBBTkdLNmZKZGl4UUdWc3lYZGxNb2xRY2hqOHgtRGlPNTVLLVVnaXhvMWwxc3NOMkVxRHpEdFF2ZmVmUHY1WmhTaFZiMlBrQWJpaHI4NmRHOG9uSVJiMzdldTFud3VMS2lVc3VoWXdJNHVwVDFfaUZoUHJwd2xleVpzWE9NN05DbXREQVdmbE5VRTNRcG5mYlVwUW02MjF2VXBTaEZxaGxSbkUyU19IT2FXTHZ6SGU5bElDNkxzaV81Y3ZScDJZaUhhd29ydmxpRGNqYV9Vd05GN0p0QWNKTl9CVUZFYVpQQm82Tm1nQkpOdFgyRGF3R2RRSTZ2a2o1N1VfWHdySFlGOEhlbUIxM1R3eEszdmZHa1RXeUtURmlWZHM3aWJ5cm5GYnRKbkNaUHZrcjRFV2s2cVJ1aW85S3l2TVAyNmtta2hSR2Y0bXlmd2lIZFJRbW5PeG9Ia0FfUjhnc1Yzc3NMb0U3R2dlemVqTmFKdVNQdmZ6NFpDcDNhckkwdkNDdE95dzZFS2pnSUc0Yy1wQlRsRm5CbW8tM25aa3RPUkZERV9GMnIzRHc3N2RQcDhjTXZ3eHZQV04xUTVkOE9QYW9uQXpIaVZybXg2bTlYNzA1UThxZDJ5dnFHcExkcVUzTktNaF9qT1dNWlBXOVBGT0RJY2VVZXFxXzdIZEM5VTBXSFdPM2ZYSVNtRHJtaUREcVdXWHI1QzZyczlUZS0xY2VEU3l4bFp4YjFxRVhNcUlmQWFOLUZEWjRUaGRsZTlNQjlEekxfd1JNWEdHMDBoUFlXRzdrVVhKejlQOU1PdEpiVkRPenlQaExibjAzdkxmVFVVNFUteDk5RUdHRlpGbi1Yb3lEaEprczA5UXJOdWdTOWFPQmNSVUxndmRHcDI1RmJHNXNBTGROT2psc2VOYmozeUNFbnFTc1lLelV3MHdIdl9RREJYX2l0alNZWXlGaFBVNDdWVnZOaGVFdzI2SjVyVVhEanVNdXBZbHliajd6MHF5LWZCU2pYaVRTYk4tM3RudUJINWZqdmpzSFlCTkhrS21IS1ZuU2dJM2RxLWd2Rjc0Qi1fNmZKckRUSVh2NVI2T29pd0lpTXRwS1lIQWFzYzhraERIZW9lVnFIYmlCbDV6MENVVWJJTGNNSHhkdmNWZDU4UTJ3MGdoOVA3NU5YU0dXNzI3SmNaNkdxYVlqS2dSUWZTQ0xkeXBaR0M5a3FmSUtjV1lpdkgtYlFXRS1RWWM4WVF5czlORDJIUGRHdnI1amRINUxEWDctR1lyWjlkdVMxMUdJdnIxV3pybk1tcWF1Wkd5dGtfZi1kMDRzLUZBbU4zZ0N6WC1saGNKdHJvd0NYWjNLTlBVVVRPR1FORWgxOWZ6VXYyM2hfVDdIelc3MFlXSjZZWUhKSy1na1ZYUktMVC15c3NSZ2g0UHBWOWRLZTVNZ1JHUXJWM0wzWC1BRFp5Y1EzTGFjYUtqcFFnWUx1ajVmX253b09EYlEtY0Q1ZTdtY3BJN2hHWWREdURuTjU4MFVzWndvWk5iWXd5QUk1MDNSZ2RrSmlOd3BncTlSZnVUVFlCMERUUHJZTEtFOHQtenRZODExUjVoODBvLU9qYUZ4RXVYV21OV0RFMEwxRVZPRWpTWWZDQUctZ3dNUENnWFFIb0ZtVzFaQWxSbENDNGRPSzhiT2lrMHZjMWc0akdzN2QtTDZhOHNhRDZhbFh3QlFhQ0UxVlZKVUtXNTdCa29ldk9QVlRQWTNaSXYyOFV3SVdHY3hHT1Q4QVpKR0VtN0pNX3dsOUdZUU9EOHgtT2NZeTVBb3lLcmJlWGw3MXJJMVR4ZmVSRHlRUDVHZHVsbjhpSWFBbzV5eXZ3dDBZMXhOX0JtRlpNOVlsT1NkV1IwWU9FOEZOWEg5cXlPWmVOYkRmdGJBYms0SFFpSFN6ODE3c0lZWXNkWlYxajV1b0U2bURZdUhVV3cySEJmdnhnWHFOLXBHUlVTTGE3dm5TQzZTRUZoYlcwNDhFUUxTbENuY2pOZ3JMaV9kcnJUNjdSRE4zbThUSm9ESkwzYXQxYXJ6OEtKVEQ5MGlnRnhsM2lsdDFyRzBVaUQ3b0xRWnNRQ0FsNVh4VXRHanhUVV9jTW1ST25VeUZzRmtKSVJPbXgzVU9VRnNDRTRKeFBuT05lWl8zZmx2ZTRjVXUtbjFLR1VlZWRQQ0JWWmhjdVdTSGluTHFxRl9SVE5xWFdiVnZmcUpaTkRMcjVSdVR6WGE3eXg5T0xQVVFTdU5NVFpSSkV5eThJZmNqUzZ5TmRRYm1kMkg0RmV1MkgydWxOdjUwSEVmS3VuMk9MMTQ0N1NFMFBKb25YalBZYjI5dzhjWGh3aDZ4MUdhZENCelVhTWpHZ3c3YWtqZGlCb1Qxclh2OFJkOTZiZm0wT25nTFczUHdZcXg1TDFnMk84V1B0QXhJUHEwZUVydFBRN0gzbTE3R0FMM3RYMGdDcGFib0hudTlBWXZxaVFhTno5VDFmY1l3YjJhX0dxYlBJTjhoN09yVlMyWkFZdGloS0NjelkzRU90R1UyRk1vbUZkRzh6a2Q4V1BGQXBSUHhHeE8xTVBYSDF2SVlKOGQtWTF2ZmEzUmEzZnFXWWRlR3owUGVRd1FpU2hkRlFLMnJvVE9kSUwzeDhMd2RmeTk3U0VmRENnVVBTTHBSdTBEeEpYWWFTblg5UkJPR0RuNzV4aVFyMmxxLThXX2lHYWpEX19qQ3hWb1NVVkZOU005Q1owVzd2UEttaDVIVTJ1YnhQeHBQeXZRdlFqVkEzWVhMMXdnd0dJZy1PckVrcWZTdHkySG1jRGRpSUdmZVRndmh1djFrYnh3a25WaV9kdU81ckd1MVRPamxqMkNjZWoxa3N5TVk4dHRBcDBoakE3R1hKSzlVUjRVUWdLZXlnNkdYeTJmVmYyRi1ac2ViZXRlc1FxVHd0TmtQS3FWaV82SU5Zc1RlYk4zSXkxZmFEZTJ3Unl0TG9MVEphU3BVRlhVTUctc09aVXFORmtmLU81Qjd6VnpUT01HRTRSdjhfN2JzZ3dOTDhBVHNnc096OE5PSGUzc2Iwd29LN3lZRmZTVjZWQTcyaVRFMTBuWFlFWUFZQUZ3V2hpeU9ZNzlRYjRLMWtCektVT3hKc0E0NFJQc2gzX2hoYjJmR1ptTDVfa0wyOU5OR2d2aFZoLU80RWRLTlJQQkJwSkU2eEIwa01YSWx0ZTZkOWNOWjAyeEs1VEc2RHZwU0pMZjUwSm5pc1Q5UHpTUzlMQS1EOFBycFZONXhwUkFndEIyYUJ3WXRHT3VIWFhzMms1cjJ0akdodHhFMlNlQzlsaFFLQlJzTWZUc1B6TEwycW85RkNOaEJLT0JKLXdYUWZjUnM3ODFGdVVRQ1pvTEtwWFdlaFZzeDBuLU1vZUh0OC1GOHlVb1Q4SnpyWnMtamJsRjJISkxmaDkwb2NnTHhGSGVKWFpEbTZoeHhBTUZBM21XYmJHV3FqNndYYjUybmRCTm5EREtydFZDb0hDLXZXczlhaUNVYlVxM251X1ByLXJnWkY3bzZ3aS0tVjg5Tk0xc0RZRW1uMHpkUDlPVkFLWjZFUFE5czdBS0ZoTHluNmZ6Y3BuQ0V6TGNONXcwSlNNWWQtNW1ESlh4STdpcnpqdjRkNVFfdjJ5bUlzdnJ1eXU2MkRQZ3RkTnZRMjdYa0xpWHR4S0ozM1JBQmZyTEFYZ2VpaXU2TGZ3aUh0NG1MWWwxNDhJWEd5ZXhxS2t2ajRaNGRQVlRENVlHSjNTbU9mZjRMcXl5Qzd2a3VCeDJPNGY2R1d1dGhfMVdMSHhkY2lnSG5aY2REbk9iVTN2WVJrY2lEQTN4TmpNM0JQZkN4NXVBS0tYOGlZbEJCWlBLWGNzM2EzYmR2MmJzTGRpM0VTb2VqcHF6SWU3TTdSak5qdWQ0WGRBeXI0U1pPY1F6eEUxVEJMZkcxRlJESVU1Q1EzQ1VBRWVwSFNYMVF2bnlLbnFPZVZTYVQ1dlVxcFFYZ3k5Nm9wVXNSRE1ocmtlYldzejRkU1pMSW5YaDNkY2JKMFlnZnUtWVRVZnAyVzNwS2dQTXhlajdWZ1RhbEh5MHdLa092Z3FtUEtGNmViVklOeFZfdF9RTnVhWkxhMUoxeGF4TERhS2FseVBja09RYmRxVzBkRFZDWl9ZRTNnWFFHU1pOWmdxVmpRU2pfWmRUTWw1b3J0OXVEcEJ0Ulpmb3IxTElaa3JHZ00zbDl3X1hkak1ocVBUT2FvQ2gxd1dsaFdBLUFnZ0hWdDlFQmFaMVByQ0M3dWc1TkF6WVpLSWFGa2hPaXpkdVRfQ3dQaTZSN1VHYTNaZlVIV3pDZ3ZxMEVlUTN1SjlKWHVwcm1UOGRtWHBFekRmcWRzbG03YWtRX1pBcWprRlpoeUh2WHMtMm0yRXhOaWlRWG1DX1N0dmx2S2xaanRvMjdESzBHeW1hazdpTTNwZlBrNEwtV1ozUk5SaFVZNkdQNGtmLWJuNWRCLTFBR3lnTElRblhDYTA4ZlJwczYzWFFHVDZRWEdaRXYycVgzRlBxbWtwMDhiWWJ0RDRSMS1LckRnbWs0ZjhOYXpfQ2RBVk1UUmR0emtFSXVMMzZfNXhEdVV2eEdlcFZVdURZYW4zUzBfcjBNaXBOc2FMT2h0WTN4UWxXcEw5SEZxV3ZaS3JVN0drMjMzWnpTQmMyWExSeFJ6SDhRQldfZ2xyc21uWkNIZkVJb19OYmRTdjNXcjByMlQyTW9RckRvZWlFcTZCcGpMTjdRRXU1U1RDbmQ4UWQ1XzVpT1U2Um5qcEdXbklrclJ4dll3akZMWmp1QjZzbDZOQXRyb0dyRHp0cmdyTWh1aldPZW1TQW1GNEpTR3hXelpvZ21aU1NPUGQ4MlkxQkk0cVRVOXJEWUMyLUFfYmNwSjhEZ0hCVUh0NWdVZzFKZzEwNW0xSExtUzNvYktqVklxVXdVbXNLUzc1NGNnQ3B1RXdMOXJxTHRJU1RXS0p5d1MzNFpaclVEMFRZd3k0WFZXVW9rcDRKOV81Y2ZDQkdUY1EzbHcxbnF3MDlGemZ1SGtmOVlxVFNEZXFINkNfNXBJRzRQbnhuS2JDeFRDZHZFUGxYYjVLa1lpNlhWZWJXalFkRUpXMWVmLTdVSmNMSzZJRFlsMnlVSVhSUUVsbklXZUNoWWNWNzdSb3VPQktYNTk2LVowbmxhSF81ckNiOWFkaUxxdF9DQjRsd29XYVJWV2VrTDB4RGlIX0tIRElDUE9MZVd4Y1YzZG9qakVUeFl1bldCZ2lCQldSWHRaMjFDMDhZWjlFM0RVM0xoZnlEQWFqbFczNzdHa1dpc3JaUDRLZFlCeXJKVl9WTERiUC1WWHBaMy1NdzRIaEhUQ3dMWlNaekExenNQUXVVRE1SUDVraEtYd3Z0VlpwTF9Yb3hKbjY3UUdyVnEwamg5NEhBR1R3Rmw4MEpfa1Z4RW1IVDgyN216MzJkYkFydHA1Z0hhWVRHR09RQXR0UHg5YzVLTUlOY2hqTHBpdEREVGl6TXR2c3piVGZYREw2aGJNQldObTRBN1dKZnRXYnNVYUNtUVNXREtKWkhKdFIzLVd1MEhLYmstM055Tm4zeDVkU2NqWWtqRHFaYmtDc2pBc3FpVW5oTGh0a2JLS0RaTUtfQXBFVVc1b2x3NExfYVhkcWZPR3d0LWZuUXowU2ZaOXgzLWQ4MktYekU0UDZBT3lZMTVKWGwweWwyWDJmd1Y4Wjg1MlV0R2p5WkhleHpnbGhvZUhpUmY1aTExZ2FHc0RWRHVTaXRueW1BakNKcTdLSGwyODRpZU5nbWVpajhLbTNhaXdDX3VfNWJtVmNyZVc3aVpYS2haREUzVkxsS3lfcWNoclRZOEJ0STRKTXdqbG5fZno3MG96TDFETXNrU2JXclhEUE9QVGdTVzNpVTI5UGNPdlRtTGtFZGdnRFFLSERoYnhwQ2ZEU0hFeGhxeU1LYTRmV2JYQ3REZnNzelh0a09WaVpqVnpjaVVXMVRvSmo0ZlhmelJMQnRHeENidWFGZnBaajVtVjZ3QTFkSGlsTFVkbHVzMlNhQWdEOE9ibEtwcHl0SndmQ3NTaWJ3dkZ6MF9HYWF3cFIwb1RkUGRsRnBfaTlOVUNWOVpud09Zbm55T3hLZGJoVFhMd1FVUWE1aFBKbzRQVm13V0ZTTENYMzNVdzZqT0NDdUxQMDRkYmZadTEyMlhxQjl0Y3lUVkgzUS13TDhUYlBMYmFKVGJYYzhsUWJaRWYwVmZYd0VCcEViZTZtV2tmcnVhb09BTzRvX1RDaGREOHRJc3lxd2Z3WUk0aHNxZ3hRdE9SWF9WVHFKdVphcXdWLWxrNVpGLTVPMHlEbTFrYmIydUFwMzFFMzQ5dm1lNEpqWWwxV1UtN3FLLTBlcFlNRDJfWGpPN09oRU9PSnpRRlFjSHItc1kwN2hsTXRmV3FXVExka3ZWZl8xZTVEMHVocFRVWHViWXdnU0t3al9xUy1DSkFfbThaS0djYk80MVVsZ3AtWkVFQ2tkNFFfbkxJU1pOTVhhTHZLMFJ6QUlMQjNsMzd5VS1aWVJkYkZjZUdxTmd0NHdPZU9FNjAyN3dIQU9NY0p3bGJHT1hmeW1YQ2tMUjZwZHN1ZktNcmwyZEl5ZlJyenlLU0pNSHRMdXVnVzdXNVRMNF83b0FpSnRLT1pucHRTZHh6SWk2ZG04bmhEbE81Ui1LcWVZYkVnWng5YzRvVWVHeWJMd2d2YVFxUlNKOFVNcG5HeHRySDQ0SG80NHlycTVuZE9OTTFhRXpQcnp3OER6SDIyVDFpdkhvSVdtT3BRWTd4VkFDNDZMZjl1V2VEWFQ1dDk0VzZrekVhMXhaODNmaGVqZXl3X1pmUnhtSlRlV1dUN3hnSWZYaW9vTDN5XzJOOXBzVEtGTkEwMnRfRF9VYmNBMkZYWEtTa0tjcVpuZFNHM2xzcm0wZVNsOGdMWEpHbFlUYTFlY1dUczVnOVRaZGIwRmFUXzJ2LXZzTDBzX0stMkV5Z3ExemRNV3Q1SnZ1dzQ3SFkyYmVBZnVmU3hFak0xUG10b25VZGNXaFA5TjZja0N6c3AtQkZXVEJYQXFZR2dUM2xZY1ZHaGc2dXpVeFR5VEtuSWdtZXN2ZUVWNjVyVmlNejVVUzBpaG54eGRqMDVhUmxaTXlDNXh0LUhsRGp6LTZtUVNueUlJN3ZqazBwekhVaWVSMjFyQmo4Y3BTdzVoTTdLRG1BdEp3aG5EVXRpZlJFQkdISEdUQlJkUElNOElVQXJOek1mcVpVRkJ3LTN5Vm5ZYVNyWlQ2UlVJMVJiQTJId3RoYVVtNWlFVkZya2M1NzljMVRidlk4dDFhSUZhOGpQQlo2aksyaGlKSzJpLVdPYktzZzdhWS03TWVTeHF6WkE3Qm1YRnBEX0hneTZmYXV5NXFtMDh2Y1VyRHdOVUpYV2RHV1ZvYzFWRmF3VF9yM01KaTV0NmF3YTdSSzhUQWpwN3FkSkFNM1h5Z0NEVmZDdFBHX21EOEZub2RGLUFKa0RKNEdUMVhSLTZSWWJXdkJvRlpFSTJ5YWVQUVU0c3liS0pVbi1TRFR1M0JyNE1MSFIzM3d3clZTdjBmZmx1cll2Y2EtZkM3T2NsTm16MzctY1lRY3hKbUkwaFR4TmJUU0xnVlBpNXp2VWlURnl2Q05zdzJfcEJOVXdFTmNVQUhtMEJBS2FHakFuTTBMbGVWSmtFRm05NEU4Z0xTVXdGaTlNRWV1RnI3YWVuQkhZcll3a2g3MTFMQS1MaURLeGJyeTJJeVBCc3EtV00xSUtJQWl5Uk9JNlotTzZuQnRvVnk3aWpxY2k4ZldkVHd4MHViREZaYU8tM0JxUWxlT3F1ZlhfTHZOdlBnQ054S05qcDg0Y3RZMUlqRnZPc2xfR2V2Q3FkWjVkS2J1NFphS3dyaWdsbW12LXZYMWVXdDkyWDk2ZGRnVFRFUTMyT1RJOFRCYVdBdmV0eXN0MzdHOS1hVGFuS29tZHNXOTFWclpfQ2JoQXpYbWloSXJ6Yk9XemVlcjZxdVRsdFZOc051MU5FMkVlTUxnYXVYYU56cllfYXZNRGczdi1yRk84UFNDd3hjWlh1Skh5QUZGX1RuWjhqM2NZbWZ3RDAyX1hRaUpGY2ozeTE4YzROeUNCZUEtTHQxTnJxamJKRHJWMnBkbTl1VFlRWl8yTU5KM2ZBcVczREVrVERmTVpvc2RoOVo0V2pmRmdlMjRIandLOHV5X1RJbzcwQ2MwOVVBY3lvamNFbFVOSGc0a1ZWUEtUNVlLZnFtTXRnMFB2R0ExTVdtaWNTUTJyVWhhS3dGZTJpelQ3WTRrbzBMdzBEZnJWRUlqSUZuRUxNV2tpVmxTOW9TWEN2Q0lKMUZNcnhPSm5ZcFZseVFRN1hjcm1kYjdzMHhCMnVSSDhERnRISFVtVklTX2hhaUlpWmljNFRTbElnWEplTXFRaVMyZG9OT3d6Y2R6YklZeGRxX2p6d3AtYmZSQlhBa1VrUTZ2UzJiMS15YTlUUElwd1dpTjRhVnhWOXdBOEsxRWpyMmM0LTZXZ1ZUT3dHZlk3cUxCUmJaaGpmQU1neUhuRkNFTXd2NktiMzh2N1poUzBrWldNQnBzM0k1djdaSG9MWVZMdlRTX090aUR0Mmp3M1RvN0d4d1dtNzJnQmhOaUJxdmRZeXotME1qOThWTHBNOTR5N19SeE4xZUpJTjBuOFk3RTgtcW5KNjJyeVppd1cxZWcweTVVNWhGdVRlOFY5N1Jrc2hzalVfdXA2blZsUEdCT0JPUUpMekVYcU9qN2JVSlFWV1BGYlBfSmpzTkRJazBSamNmdl8taVh5dHpsSktLV1A5ZmFVckp2d3lkMFdnRkkxVU9tWDlOaGd4dGhYVnJhWVZRaDRBUHhWenE0ZFoyanBCVWJfYVlTZElheW9PVnY3WmRITFN2VGNvVnZQN1NxeE5WM3hTZTJvMFRnZWw4ZnIzMGxxbEJzOXM5TTJpSTBpV0ViS19oRzhfMWdraTE1eHNOQjJFT19lbFVzVzhXQzNvZE52Z0FValFORGJSRS12eGZWY1R4Q0lMZHdNMnl4dGpRbmR6SXpLX0tjRkdZOE11THAtU0JoWkJTbEtaV0R6OGRWRFVvNVVDd1pZWC1QYVRSUXp3WFpDcVZJc1dRTkIwVF9JNFQ2LXRyZGJ4Y3c5WDg0eTBFZEs4T1VWcWlzX0ZWNG9RU05IbGJGdUF4SHJWRDlzX3p0MjBFeXNQSjBXTkNkbUNObjc0Q0doM001ZVFTY09iVmZDRkQzN1o0eHVVTzQ0RElIZ3FINHpoRDlpMjRPRVQ1enhtTWNuNUNSelNnYmlaeC1VWUliY0p1Q0REa3hZRGJodTk5ZzVFazJLQTMtekx6QngwMV9LMjZBV05sc3BwTjE2T3Q4VlI1VVRNZWtOa25oUUQwaUs4emZRanI0OFFleW84QkpWNXlxMjM0RVZuOHhoM19HTkZQOHVjTll3LTdhZWtqNnRFeVlFSzB6TUFNdEJNZmswRkxpWUxMaThldTZtWHBJSXVuUmVlLWpOUWR4a1VGWVF0MU9CN0ptWEw3OWdPWkJ3Snluc2Y3WVUtb0JnaDJ6VWhaV0U5dXc0VW5XMEJ4NFlST0g2VEN1NDVlNkVUNzFpTmpUaGFzbzBXZVNyclQ1eENjN0RnTVFDS3ZnUVg1OWFmY3g1VzR4OEpMWENYc3d6R25PeTI4QXFTUnRGNzhURW5CNDU0ZWJPbnhyZm1wTmRPVVc3SUZXZmViZk9GbDl3bl9fTFhOTHNlZ3lRVDdybXpqb21sTXZQbHN3aEdKYUVTUllPclVlNjM1ckZTZnJQU2JBSmt6eThsMnZLZjZSS1dYbUJWUWVTekFaYkplcmhWcFhPOHhnTWFRNUVpNXdYNS01MEExRFZaeDFzMFY0akxRRUJrUndyRHJtdEpBVHRCR2t3RTZSRTlRbGVpS2UwM1lBMGFnXzN4b2xqTHI2TERPMHRXYjQ4SFlXTDV0ZEJvTDU5N3Y2S2R6M0hQQ2dyZGRwUkcxU2tMeUNiYk9ueFFHZVFHcGkxRGRRM1l5VGxwNDB4S2tHTXV5ZDV4MWVlS0RvcjU0Y21Pa3ZHMGpkSXdhVC1PVkozWk9md1FSTGh6SUczR2t6bDg3V1J4ZUxOZ0s0eVhPdUtRX3hyLWRwUlFIaXA4djBPWU9mY3ZZaHZEQ0NCeGE1anIwcWd1SUJxYWhJMEZGbFhPR2ctSGdXdlNVSi1Cak5KazV2RVVpWDhHYWNYZFlRbE8yeDEyXzZuQUpCU1pqWW5kVHZFbjRDUWpkNnpFamdBdlRiSHhNMGE3dlo2WHRtUlFuQ0VUdncySng1UW53YkxMYVB3U1lCZ0o5TGFwVEkya3VPR1RuUG44WUhGcmtyMFhjZE5lS3k1YW1tT0dyc3F2Q0RzaHI0NGFVMXpfNzFoNTZhNU1LX0JQYjFZT2d3VTNlTkdRU3dKTmtBR0JWZXJFZ243dDNGS2kwN1UyQnhZWDhiRjVNQkkwdmI0eXlmTDZxRWhQaFRVNkhyMG9Rb1ZJX0lucTRaZXU0c0hvZzVYaWhtc010cFdmbW1sbkFCUkoxQTJKc0lJSndLWGxYMk40a2lTTE9jQ21wNDFDZVVrYzBRRFJXRDM4RXQ2TmtKQ05QaktSSmdZa2tRZzRVT0UtQ0o3N1UzdGNQUkF5LTJpUkNfc0pMaS1TaldrQVA5WnhxZEhUd3loSUN4OXFjVnZvejdnXzF3dXF1d1kzSXFHdUVkRFBMTUw5Rl9VbUFHUzBmVUd4YnpoWS1qVkNjTGtmY2dvSE94YjdqMEd6V1FUVGZBQ3Q2dXdGYVcwWjJvV1pGeGRiUkZlMEU0bjJNWDhUUjRTTUVRZkxUWEdvQ0hocE5GYlU1Wl9MMnhJSkp6Njgtb0Jmc2RfeE1NQVFNNzJNekc3NzNZNzJ0LWcyZ1Z5OHBiT0tWeG80M0tGLUY5eWxhOTVzM0wxbkc5d1NBS3NfamRmenROQlJWQWx4OUpTM2MwVlM5a0VZR1p3WlhkdkZudWNmYW10aGZYWXNDcm54YWlZOXNjbkUzOHRCS1hLMjdsV3ZFYVlMNnBkb0R5Q3YtR1FMd1FkZXhEeG1ma01VZ2p0NWUtZ2ZiaTgwVFIwVVZNdjM5d1NBOXNqZ1FpczRFdjEzRWhoM0RfWFU1aFFUUFo1SWRMLXh3S0tEc2N1cDNrQV9oeHFoa1RWMDlDTW0xQ0ppTlFyNlJvQ3I0MndRZWtTVlR2aHhEblg4a2QwMTZtQk82UEhTR2tiRjlfeXVTVy1JMVI5MFVwcHBtaDAzZFVSS0t6WVUyelFCTGpxTURNY1F4MG53ODlweUx1ZUlYQjBjcTFVbkM2Tl9sS0ZObVJUTjJFeDZrcjlBQlVQQ3g0QTdyeHFqcU5sNzJyTjduWFJ0QnZGLWpCaTVNem9qSWh0VG1EV3ozOWlmNml3RXo5VGljWHh3U3BWS1hidkJaUnFod3dQaWU0V0hicHJjTlVqWENmNTRiY25nLW9QODBidXltcmI2bXdscDhWU09fNjhqNzVSVXloRnZtV09oaEFtNHhVdy1INk5nRWl5dWZoaDFrR2l5RWJMcTJLYkJSTVhYcHYydzY1TnVDeUc3RzZrUUc5NTVsLVFQc0RQNmRPY3FTNEtRam14S2MwY2R1Z2F4eDllLWpQdC1scjBDYnFWOXQzMFFqTjlJbHhuMHlTaGRTODBwQ1NIaUd2dVpMUFJyTWtwV2kzZFZYMzJuTzBpVnluTHZvU0piZFczWGozbF9fZGZoM1pydC0xRHVyRlM3QW44YXk2d0k4ak9kejd0alNXZzFBYjN6NGtLRU1tSy1tZXAxNXRkWVhOdDNIZldkQlg2UmdjS3VwOTc4eWh0cUMzMjkxWnRKZmFXcnBxLXZHM1o4TXZocTl2NS1hOXVVNE9WTWJuZ1J3ZDFfWWlSZE5LUDhrTmFUcml2WEhfemIxWWpud2lESktUZlRLaDZJTkQ4cEhxckxhME9YM0cyRF8zV0dQcGU1aWk2eWFtaE1xSGxiYnpzNWlvMDV2akl6d1J0WXNJLTZYSE43MWt2RHotUGFYZXRhMTVDa3gyVlRnbFBiWGVzcjNnYV9MdEZoWF9KRVl0c2h3UTA5Z3dyRzVlUEdWdDVjcmo0ckEySmVCdTFUVDZDeE1ld1NoSzZhRjZhMzRHVVZrNlJmZGJ5a29Za20zTFpDZm9zOE8yV3FEb0R5VlhqQXh6czJUcTBNRzF2VW5WQlBaR1pOSlhENU1TTVZkU1JWaHZqME5rWGlfdmZyMjVFUEhLN0Y4dzU4bnFUNGVXSkctNXR4WEpaYkhCR3FXU09YdjZ0R0I2V2liYXphOGVwa3FrSkFGQkR3cGQtQmc1UUxlNUpvdzV3ZWx5WWZsLVNlVDRwRllCRnc0cXd3c3RkTnRyZW82V2FEbDhmaGVVTGxuLUhZdGZobkhRTUt6TXVXNVgtU3ltUDhyLUJ5NG03bTIyaEdmLU12U1RaeDBSLWNnd05LdE95QzBUVEw4bnNBWFpwRGFVUTk0OExTbEdXdDZOamtHZnFMdGo3dUhDN1pYSFFDTWdYWG9RQ0lVbmRBdzlhb2RkT1JBU08tMVVOZGRrdFYwaGg5dXQwTl9tVUVKMlI2Z180QVhaVzhZZExFYm1ueXBvLUJEU2wwZ2wweVg1emU4OXRRd1hHVnUxRC11SzE3Zlc4Q2hvTlR4YVlvdkFld2Z0RE9BeEF2aEktZHVKTkx5T1BWbjRsTVcwUVNqTnlXd3d1eG5uLUNsVUxQWl90R1QxY3o3UE0tbUJ1S2RBWXVDbnIzN01SRXl0ajI2S0hOejNORzNZRm05ZE5LTjQzT2k3VHNsNHdNOVV3ZnY3VTVreGpRM1lPcGRya0ZjZTBEcHBhM0lHc1hsRTVrZWtCSVI1Ykx3NXUzb25rQzdGZUNQX0RVMmNPMzJVZVN5UGhBeWFzbFBITmExWkJDd0ZyckwtTmNYY0RXcUcwbXVhZk9GY3NwOHh5WUNweU5tZ1FmUklmN3pfSF9CaDZhR3NIb091WG9RTDIydFdCWHdIQ3FDVkd3XzJ6ZUpFbnNyNmJCQ3BVWkYtT09ucUJhTU9RX0NnSFlIeDhkdGxNOHY1ZnZnMEduZzJLcDVjX3RFOFFXY2pmLTM4M01UMmVlZDRkN1J5NlhaTGJDLTd4anlYb1FMMkYzbVlnZ1hTenB5b0hqUTBTR0EwRHNzdTlQck8zMXFOUy1ueDNXZmVWMFJELXBMRFVtWUJjdmJCbjVpT0Q3dUVpZXpieGlrd05QTjd2UEd5WG4zSmJJc2JXdVRjYVU0cDI3UHlGejg0RzZIaGo2ZmRqZ2RzXy1MQlI0MGVzdU9CWHFEa0g5bUVrVFZvMzdVMHVzblA2TEJ6UVdud1NRZm1ubUpwdGdJSVZycFpPT3ZXZm9aaW42enpBdGkxSDVVVjNuNHN1d1BvOTFtaWFlTmhkT3RyMmZDdFJsNHFGZGtxYWZOblIwOHFXTWF3OC1XQmpBbTZQVnVyWFVhX040OV9NYldzeHhLMXNLTWdqYkVrTU5ad1ZvbXBYaGxXLlh3SjBXVk0tUVpUV3hjcnZvdDFiTHc"}'
    +    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmk4YVBwVmdmc1ZoMUVCZzBqRC02VEJ2TklpUEFUWFFHRGY5ZnljZ1R0X2JPQV9OV3psSGlBS2ZPdS1wYUlZUFhaLVVCSzNNbEU4NDl0XzFpbXVsNGx4Y2E2RllqdHRreVdIWjFWVGx2cEtUX0JGNmVFekhzNVBuandGV0twRGcxbGstbHV6b2ZCem1Iel84NzlqSXJiZklYYndMRkhZLWZKUVo4UUlOUDFZdThKclpGVzFucUlheDdQYWRmeUJGMF9XWWU5WGY0bUxWcXpYbE5zZTA1ZWZuTkxRR1FXTy1CSnZ2RmhTajRtQnBWbUZwVkk4RUVfa2xfcE1STW5ydk9haUMwY21iYXczRTJlTjdxb09lMVpJd0lVY2hZZFRidzZPQUFZeEY0V0ZISUJoWEdkM1I2RV9GbHpCUFdHbTRjdkNIcXVfc0s0NkRoS1gxeVJDXzhpdy5OY3NoamhUTmc0NVNNWjFlc0s4cThnLm9wT1B0enZxSXRuWUM1aXQ2MU16RXhReE1xQlU0RmpIY21sclg0MjM4OUt6ZDNMUmdOYzdPRk15ZG51UmpTRHJFWmZtV0otaWZJYVd4bXppaFVWb19XeUpwRkpNUzlNLU14eEp3akRLZllPSWh0ZzFuUUxpMXRMaUpsS0tnYkZ1cXg0amlkMWFuLTRSMVY0bWNyQWlrOG9CQm1PS3JwaElnT1pWZ1VXOEIyVWhXTjdrUGQ3YjhlRjM5bUtHbmsydWFMSmxyQzJxdDlOelRMQUpxODE0cWFxUmdtcTNaQ1dlSmdxSDROQjZjZFhWWHRwYlBSZXFFdW5veGlkSEJVbVZTbGlIMTBsV2I4SzBfb3R1OW9SVHIzeEpPVTJRSTd5WVd2N3pUdVFWbEIxQURpSkZIUjA5a016YWcwd2VlR3VoRFdCRGhPRXFMbjNaeFZ2UVlnOC1IWDhnMGpIbGx4c0ltZFJGaVBhZDhfS1lWTXQtSUFpb3hjZGpkQmQ3WFFHUmtaMGZ3NE50U0RtV0dza1loV09IY3ZGZlJvdkFzOVU1eFA2ZUc5cWNtRWJLM21tVVhnMF96MEZ1Sng2d2dfZTFtcWNkR3BzbHh0enFuSS1kUVVESllkM01RX09oemtoaldHbENiZVQ0elFEYzBxV3lkbTU4NVpOU1lvVFpOeHhxd3ZTWVUwN1g2YUNTSm8tQVlja053VEtCMkE2ZlY5Z1N2SmViVnRwX3NSU0hNdkQtTkYzRU5fRWZmc2hNYXlQZTF6QTBnUi10Q2lyZUxVUF81dWVDWHFidWlZcExjVk9OaXlSNDlObHZ1NzdXZmE0dzRCZ2xHbHMwWUdUNXNuUXBfTlRsZlpqWFpZcE9lLWFvV2dQVXQ4cXB2SlZIbFplXzhmM3BwUEw4VnlRZ1hVeFVXd1dFclNtQkJpbENQNHhoUG1yWmc0cDA1MEIyMUdQY091STNpSkplQ1U2QVNuLU81RE44eTZUV1B5dEpUdmhsX3RqbHBWWFFQdmRhZ3lrVW5rbnlIdHdOQ3lpdDVwWVVGcWtKRjh2YmpKNkctbnZUVjkxU3J4N3BJMFlQTVNVeTliOVRXWVVtRWhvZm1Ea0FmQnhub0s0UC1ZYVJ2YVFreklZYUhmakhhUzNvVDZlSGJOUjJTWTBxaU5lUGxpRVFrbnp4M3RMbU9yazV0bkRaM3lEbVFmSUF0OGRwdTNXVmRlQWZuNGFqZHpQcWF2bGNnQTlrdDRkQmxGVkZrc3lZVG9BWTNUT2ZJZVFrelFjQ081MFF1bHljQ0o5YVBFZ1d4aEw2MHpla3hhS29ZaXFGaWxhWGZVNUdsTGRUb3cxcTVVSTVFZDJ5RE1fRDQ5dlR6VEhVTzB2QU13a1hGWG1KSFc5WF9EUlFyUlZxanNuOHY4d1NqRk9mWktibEs3WkQ1VHlxTWttYUZsYnRIVlhrajExUVNtLTItdHZXZzBEZ18ydG1QS1kxRm1IOXdCUnVZNjdNZnkwcmlzaldtcHdBdjdLbnExN096Y2JnQVNIaVJCbDJEYm9RU2Fqa1BuTnhwQmtIWU9Pbk9WVFRaVUwxVk9ybm8xZ0ZWQ1d0aVZZTk5WalhBT0NwbEJfRS1oTTVRNDJxRzZoLXROZHhJaDNoOWtpbHBDRjV6b2szZlJlb2d3dDF4U2M0Smw1dFJhWC0xRlMtbXVNaE5uT0lfa0NEaFN6N1pqb0F0VG51ZzkxdXRHeVdlNDZPcVJPcDQ0dUh4cXlUZkVMQndBWDRlZUVWc3Z6M1ZQV0EyTG9nSTRYZFVnMjNtN1V6MkZiOHI0WWZTRFdlSndUYTlyUzk5Wm9rb1JqS3Bic09QQkVTWWNWUHhFejNWUUw5aWdFLU41LWlvczctVldEbWlONFZDc2hiWFl3MHdESE0wUFNYNkpHbjhrQnM3MnRFcTZveHZMV2U4Y0luVjNzLXJ4NmtLNURicWxpbm9uT1U1X0dER3gxbGV5VWZ4Sk9lanphWi1reFg0YThtYzNHNzdzMk12YlVfTjNISVQ3blhxMG1MYVctanM1MTJXc3Z4WkhYekNHY1hjak0tamZPbXF0ZEk4bm9xbWNaNXdiRWtRbXZMdGpVS00tWnVkNWZSWHNMYWlGNURJVm9iWUM2YlFkTVNOd09kSUdOcV9sNTNWc0NjcmNBcENENlVOQXo1ZW54S2d4QTBnZnllbUhReF9QVy15SGhyMng1aGZTVlEzMXVPWFAyckppQnpEZFlDQWlUVUUyek9SV3RmWW5rUUdia2R5ZTl1UGRyZ3dIX3hqbTBJNzRTSnlaOFE2NGtyNnc2WU1tOXJMVllPR1B6S21lQk9pMGtnRms5WWEwVUdCUEZiWUd3WFotMGFEbF9sOTVna1NWRFN4b2xEMGJxYUJnQlozcTBxb2JrekZTNkZtaDlFeTNkOVBkcV9iN1RacWx3d3hEbWU5aUFFQU1lWktQdDVUNF9LQ3Yzdk95UW1nQ0FxTURMVGlDYjBkQlpnLThTMktyRkY1aHd5RHRkcTE4NEJ3WmRtcGl1V1VYMWpGdHJIV1QycV9yUVAxclJ3NUhvbUVpck1aa2N6aEpMV3E5ZmhjZ3BoMGcybnVRNDlyUXU1U1RaUWpCcklKQkI4bXRIVWxSM2x5UWphWVBWSmtScHZ1Snh0VG9qYWdYMFBvbEUtRzFRYXcxTU9qSHMtMVlpRGJsT3NKNnoxajdkWldLbFV1eXZHNFF6WDBnYVpiZkxncF9DRWxVRnhXX3dWUUZLSjlLc3dLbktOZVFscmpqWGZvRTlSZnpxMlRqSXpqVXNKa1ZHOUlTTlBGLWxwenFZVTlCWmZ2b3RXVEpYdkVGOXVRQ3J1MFcya1ZrNHZmQnUyNkhQZXR6eXpBdDV2dDkzN21WRVNRWDNHZ3hnRXVjeWFXYzlNSDcwc2hfc1VyZjlYVzJsREVFcWs0ZTJ1WUJjb01xVWZ4TFFqcUhnZVVCeExsWW9ONmlnSjJIQ3RnekNQZU90Z3FlWXpmYjhMYWtmN01vdWxBTWcyQ18yeHhObzNrck0wR3BOdThiX0RqYkxzM2RrT0huWklOQmMtZmdjendtSWNlaWZaTC1MMU9GNDdLTWt5S0ZDUDhyNTBzbGlfbVlhZ000LW9fdUFiMGJSczl5dWllSEtzMF9KNkY4NW5ZVl9vZVVxYTVUOTg0QklLNlpUcU9HVGxpUjE1VDBWQ1cxYnZuYWdLVU54TlkzV21YdUVCQVM2TUZHMFlMM21FQjVyY1BrTnlfTVZna0RNczUxN2ZvZnJKMWNVODRETjF2LXdaTnlCcTV5MW9PMGJDY1VzS3ZWUks5WFU5WHRYdjRIYVVrZmFOR1Vyemwwc0hsV3pfOElkY1ZJRlFiR18zYnpOcm41N2E1WFZlcGF1TVJ4TEdYMEZMNkY5Vm9BQmRYanhJejJKWmZOQTIwOWNnX2sycEwzODZjRG1uNHY1azJnVVNEbndOVHBjYXpmaUl0WVJ2TV8zZ0pyZ3ExWlpWQlB4aWhLdFJsckEwaldEaVJWU1F0eDJ1eWlFZUlNNXIxVUFCbkxDaE0xdW5TX3dQX0stZGluRG82aW5QZzkzMWZmdDhhTTN5UlBIaVMxc3hBVEdLdW5jU0t1dzhlQlNaYklTeUNEekRaYkJNZV80bU1LNFlVbXlkSDFzUzFob3Bua0NYWWFRSm1wTFZ3N3ExNE5YeThEeFZjalZIOUJUTTdENGpva3p2TzdrZ0NMdWQ5VjVHdWpJdlFKekJUUzFQcjVRUlJwQlp4V1N4Z2EySGlsdmljRGVuR0tNem1nQWRDTmxMZWgzYzYya19uSEVDZWRheDQ1RVdnbko5UUx0RUNyUlB6SHJIVDh1eU5BUGJMczZhVjNuT3ZrbHF2b21YcWI2U3hnQm4tNUhubTktQVJCbmRHQldXcWg2aWNlVlhHWEFuSFlIQ2Z3SzFWNlk2WUtnTmlqaUVaRlhtS0VaLWN3VzVXYUk4YzhUTVhTeGlpTk9zWnpkT2Q3VmFBeTEzQ09iM0NmMFBMbTdVTGRGaXJHZ3pSSURQRTJyUjJ6NGN4STNMNEdKcjhlRTRTVHRyZUZIMW9KSlB5b3pBcWVhN2FOZnFtU2VZR2c4RnFGV010d0VJcHp2S0JwZlk3YnZKTTZrWmZEaC0zTzVlanBsamZodUxLQkNxTVFiTm5laEZrRTBIYmFvaUhhS0hsczlTT3BLM3ZmX3RnWGR2Ymc0aXhaejFVdmJYbWpRdC1hRzZRNGg3SlBfMkNfMUpsdjJVV0xCRGNDMXloa2JNQXVRUU9kb2liRDhyN19VcVR2VXlyNDhBaUpTaWhNTm0zMDFpR2JtUDJmZHZ0Tzg0VmFoOFRWMDFRVnFNYjlZNkpJeXNXektvZE8yWkhmbXN2SUt3RXRlQndCbDJjN3hqazVUV090bkpFMnpKa21VUWFEUjRGTXJ2d0RGTF82bTkxcVh5dmladnFiTnR4Qy1jWXNLN1huSmNDcE1oMUdQNWt4VldVd1FxaUxFV2tZVUhaUlhNaVFjZm53RkYzODVtUk8xNW5SZEdrcF9Fb2RBaHpHbDRBSHVyUkdkazV3dlduT0pnSEs2V1pHMmtuZ0dYMnU5ZFAzZFNhRTZRSk5oNVBwbXlTYXhHX2pUMXFhX2VHc0lfZ0ZQTGdkZkdsd1QyemY3QU5rRUtydzJnOFozbU9pOVZqNnVxWS1icUNHcFNUNDJiVGtadXItVS1xMkFRTU9jaDQzcFpQOGJpVDNJblRUTVFBdHN5RlBDQXRtbk9wVDJpNnhRUWZObXR3eGgzeG53QUJNdTQ2dnRnY0J6THV4ZVJvT0NpN1BLcXFYZERVSmkxRVpmYllDS3lhZ2JDb0EyWnh2NHk5ZGZRckVDbzA0ckdtdlFYVU9JRDNUSHJTNW9ZcGstY1haZV9HdE5zQ2wtb2dlYk9hU3ZIN3R5XzZ6MmJSX2JZU05XUWVpODdrRmsyblA5cE9HLWYxd3JLU0JWTEo3c0hLUkcxT2ZVRXNpOVBkX1Yzdy1oTkp1Zkp5RXRsbVFjWE85OGJnX2VmSnRLdTZBZm5DQmhEWXFGVTh2ZzlWOTlFS2F4SFRpQVIwZHc2YnVOWUZvb09PSnVGVFdEazRnM0tXT1FqSGNuNFRzMExrT3hFOW9yMXZUbVZ5dTZPSG0telNmRll0dDBoNVVlUWktUmdZSnBQNXNMMEFvWjlGNnRKZ291V3pkYWxpNTk1bXRpS0wwMzVOdm5MNENCX1RNVkU1dlZNa2ZfSndxeHZWZGU1aktiR1JXTEJpVGllRWswb0drWEg2QmtPVWhiSVA0aGJkMjBnZUNfZUtQdFNqMmhFQnhGcUN0UjNEeVdxanU4aTZSUVNOTjNtSkJyVTBWeXNRcVkzakF4NG5DWXBranRMQkdmSzFFNUtRLVZscmNjTlBNa3JIaEY1RHlnVG5KVkFTRFNVbGRPNHFTZWlLeExCb1plQ2R4R2lZcXgwdkw3dmFkOVlIakZ1WUJhZGYwa1htM25lWVpMaEgwZ1dEb3Y0QWFvY1hJMXA2ZHF0eTRMaEt5Y2haZGl6Z3NJdWRqS0FQYjZPcHNJTzhsRGVDNlVacDgzRVEwek1NV0Fnc0Iya3hkUW5WYWViRXJtTGU5WjNVQmQxODlRamVDOXJGVG5TbHc4bHpOVF9QVnZNT09sMGp1Y29rVWlqcHRibG84RmxQREpMZGZVd1RUdzR4Ym5KdUVYbnhScEpEdXlDamFDRHk1OVBKZHVVb3NZb21Pa0NSbElFNmZxTFhIZUZNZGx4ZF9rX2s0WlAxVEJnelgxVGZIZ2FnSkR1Nl9VU3NwZk1QRGRTaFNhN2FMTEhidURkRnB1NlRZVjU0aEt0eTlVa1ptc2IxX1piRWVDb0lwUGRWUnJyZExUVThRdDNFMk1oUnlwSkMxcmgzZExlcklob25la3ZIM0JhdC1ZTDZPdWpGdWZkN3dUS0w5SjhhcWZVWnpBdi1yNm5UZnNjVTZpVlhWRzk4blBTNWxSNktzYkxXMW9sc1hkVlZ0ODBremZYUVNoZkplRk5XYkt4TXhlZkFxdXFLNGNNNFo5dEJvd2lVQVRya2JXa3BMYjRKemwzWmprcW9abmZucWwxTnVPdlJUbE5ucWVxNGdYakJ1WmFRTlRWUEczQndXUnVua0w3elNSQlpTUFFDUFJKbWkxdmljc25CWS1TanNrQjZKR3JoQmF3em9Jek5VdVJIWEJKSk84TjNFQVZKTDN1ZlpXSnBEVF9PLXdGQ2JjZzJKaDJzRkh6c2c3Y0FDTkxRUUpRamRhWnhBbkxsX2xSaVFLNDJwUDFFTkwtTE4zbHo3YlJqSWY0U0JqeVRfMV9FSG52TGpQZi1feUJwM1RNQUVaSHFmekwwcHFTN19TdHpkaWNOelB6UkxJR0V0dk1fNVJYS1NZNzg2WV92LTIzLU9hTFRVQVQteDVJRUpQMkpVUzI2bTh1cGoxNS1nekpUa0RQTUdzZWdCZ1BiMVNzRmZWUmxPaVVfLWExZk5neDBRMU5LSG1FR29leFZTTDdwck1pcmhVU2tXeVpGZTAxdzduOXVlOEllMl9LNno5Sjd3cUw1TDFKUEhqUTdrN2hiM2RfUWV0TVRxR1pZbXA0WnduR0kzQ3pqTl8xeXZ6UDNjaURyY2k4RklYUE5FdVhIOV8wTG01TnhYa3FodWprbTFQN19vVVRpRkUzbGd2SWtzZDVudEVycVRlTVZYWEpEOE1rcXF6NElIOVFVSXVkQXpGVmItNGVaeFZHRVF3aWw1STk4VmdBSmprTGlXZWE1akRsTjRzb1VrZXgzeXlsUGNuUXF0WEdqOWdHaDBPOERaOXcwOFVWaW1rcEhGck4wQWNWb0lKUEZFUGw1LVBhSnA2NE56X1BhNVhobHFZdFlacUZXMjJ4YVV5MHpDY3duM1MtOGxna3ZXdzdkQzhjc1Vaa0NMSk91RUxlSDd4VGR0Sm1iZVV1eFdJc2NINDI2ZGRPSDlGYzNfbTNKUVdsOFR1em1CTkJRTnR5WWFGTGREWHNxb0o5REZzM0c3aUZlS0R3UHRCMmtiYUhxWTN3c3V6elNDTjdfbHlsLTc4c1JXTk5VR3FKaTdYWG9uRmlqRlBtbGpRd3V0Y0hicXprVWZGMGxOMWNQTUlQeDZYblVvZ21fbDhVRGYwSlFETnVTWjlxTnNDS3FMcXhDZVlDY211R0dTZTRwdGhWQzZ0UWVOT3NEemp6SnJiWXFybDVNZEFZZGVVMWJxOUpkc0phcF9tQ3NIY3JxZUFheWdxTlhXOFE2RHc4QWtfdWFyUWJVQnFldndSa3I3MmE1Tm9SQTNTWEd1d2hULTZZTXdfcUhGdFFWZTlHQTMxcEMwbFEwbWlKdTRCc0toTTFCZkl6MWtZbmgtT0lqMGdZbzZrdzdwUXdxRUs5eVhxOXdqRFI3d3NLRTN3eHZ6UGxUcmNOYkNyUmgyNUw2NnBlRnA0SmR1a05yZnFRSkJUUG82N2FrSWZRZS1BdVVfcUVjVFFGbWhjNXhpbHhnd05RQUYzTTl5cUNMa2RDTUNZT3h0QjFkSGxrZE9ocHd3aFRpZkQ4U1RsN1JOeW1HVkhBbk9PSWIxY2Y2SThvMk9iR0tCMXRCUWhrWUtYaXRrWjhuRzVMbzZvYVM3TG8xM1phQVZkUGhvODZ0aGtGalNSTjFtMnU4bUVnbHhYc18wQ0xuYVFfNmdfMzVxSlRiaHJRZU00WDFJY3RlZm1JNHN1UTQ2X243T0lXMFQzM0hHQUh0RlVEX1paR1VRMUVpdkVGQ2Vmc0Y3bVQ1MU0xYTMxWlRMcE9FQXlqU2NPdkVaS3NnZ2hEVTZ5Ym5sYkhJTHVjRnR3RmRsY1Y4TmZUNTFlWjNDMFRPZHN2TWRxR25aNFdPU0w3V3A2WGg0NEVmNUt2U09YbHNZNVd6YWkwbkt1aHppbld4eUdNbDQzcW1LX2FlS3p3MTR6WkViVkJodDBUNDF6WnFCRVdFdWRtLVd2eTdIVkgyYmtqcXJkTkI1TWtlWXB4MFRCMk1MeS1mOG5LbVdwVmZoM3NveHFIY2tBd1JEdi1lRjE2Zk11a3o3b0ZQemVsOERmR3E3ekl5dXpvVHdnTDAtTWhwbHZPalRTX1ptQW1neUNaRWZUUnExenFMX3l2ZVV2REE5NGJUbC1uenJ3dUNfa05sUWpLQ2Jvdk1SS0ttdjhGc0NsUE40RUNoR3hxNnZxakVpV085eHRfS0tiMWdzMFQ4VzFIaDNzTTQwVXlCZmRseWpYR24yVjMwVVdpV3I5S3V0TFhuSkZvN2NoLWplcUtzMDNGNXQydHdJTWlQTG9ReVlfTUdJTFV6bjltU1JWQV9zNUk4TEZFS3o5elZiZmN6LW9RN0RsOVJuQnQ2MFhjMU1MQk42dUhGS0xPSjM1SU90aHh5RmxwaWN0ZnJRY3lZcmVNenZ4MFMzV0lZNXBqeFp4emVJbzlKa3ZZS3dCdTFhbkxEZlVXdS1IUFI3U3pkYkZzUzJMZ0loSlFuMFVsa2VRRlNKc29penlUZ1RVYU9nNE90ZzByZWN5TXpKSjFjXzY1cXgtMGcyZ1BWQzlZWjI4ZGF4QVlEUzNwMFFvYkExY2JiZHdZWGxqMnlCSzdfTnNVYVptRGRHUGEzbkVNMFFvVmV0T003OW9CN0V0WDZPZ1JQaFlJYmlPWWRacHBjQ2x0a0dzOE9fVDU3c2tmcWQ5VWllbGxPMjhjYWRmaE9vOE5WY1gyTkQ0S3liMVlYcXFYcTFnV3ZwdGtNbU5ORE9Lak5lZFJ1RVlkSTVMRDUzY0UwRUNhNjFrRkFxN3FCUEp4enhUSGJKMzRZaHJRc3BtUTB6bl85VGpqcFkyQW9aaG5sQTNDZmw4S0hWM2dIMUZ1TEd3Sml0YWJyNmxUUFRNSlNPUlkteXFKWGM2MWpmVHUzLTBHbWJONHE1NDk0NHlUUjBHeTI5TU0wSmk3SHNWM1NTZl9fdkoyajNXLTVjNEFwM1o0YV9JSmdyc05VT0tUQ2dHdHV3T3k3UlhxMVN4c29sZkRwVmtjdURha0lRNi1uSkxaTV91WE9KdTNRRnJObzgzWTcwUWRRQzZiNmt4M3J0NWRCanVYZ29sb3VlNTRzQ2locFRTenpGcVNhMWpWY0pNX1NLNjZwOEMyV0dUbDJaeTd2aXhUNWVreWFFSUJyY0R2T0p4TTl4UzRtajhEUHp0UEJROGJXeWotUllQeDM5NkdyT2hFSWltSmpWWXFfWGZDXy1sanhTQkR5a0pfb2lDTlJiOVZtczZ0N2hDYVhBTG95NVFNTThVMFdwUF9aMjc0T2ZhM3RDcTlqVVUtUUNpa0M5VDZDcDlXTVl6dEFza2k4MFBLOFNiamlkSFRBb3l6M0FPMTBtSEV4c1dkTWREQ1dJMkZ6akhmVkxoOTJJUnlqcWJjOFdUVHpSUmMzQmJadkE4Nm1kTDg0ZTNtaXZiNTZCR2taZDQwQklvSHd0dWRjcGN2XzNJSmtHc1p0QUZwOEFfMWNhRGxITUpUWkxRR25id0J3TUZvc2ZWSEU5RmRodGRZLVB2SjBGcFZYVGYxRWNVUnduYWNGMjBSZDhlSVFVMXZnUVdJcW9nX0MwaWFCVVNhVmpoVkZCWktVVG1NaFhYSGpjM3AxNVFxVDFlbzFPbmdsb0pYMkttV1QzSnBETi1OUjBDeklSSHg1R0hMRV9hdGVrWmZvbXdGQ00yYjNDb25ma05VakRIclo5bk9wYjFxRWdjb1VsMHNTbjN4amt5bUNWQW02TmhYSUdpdVVqUndHRkJPRU9fU2c4b0lsN1g2eWZ4QmdrZFNNSzlScHhlQWlaam1MWWZudko1UkpoYURvamxvMkFVdGpYSW9CUXQzZUpjcm5yY3ZReWtkbU9XNXRYMXR2TWg1Rm1MTHdhcGRsTzlweHl3Wi15NVpSX05POWg4SkFiQkRPbGZFUzE5WFFtQmVKTms1RFFlRjFLLTJnQ241cko4MVRKMkdmRHhtRUh1RE5LSGk2bkRBSjNCemxob0NLX3NuMVoyRUNSYXhNaFdrU18wZXV4d0dhRWJIZmpHZUtGMTEwZk8tUnRJdVo3US03TGgwYXczeTU0ZHMxYkJ0VnVpNWhvR2JwZVA3Rk9UY2ItRnNkVkpJeFNfbTBleFdWal9qbzlfN1U0cGlmRmVoNTJ4SmtCUHRWUGRwaDdSWHEwZE9tLU5VMURxRllnSEVsYjJiUDFtNkZpRTQwMmRSLUN3djBDckZhdFVhRi0ydTdfLUxEVUtWd3JiUEZsVkI5TGZWaFhfUkpjUlNGTE1HSjBzbnJVNzd6cmNqbjZlUGI1SmNoWDZ4QnRfOGlrRXNKVnNDemd0NjNrSWx0bVZLR1llRnNQRWl0VExwNkRLTDJzRXRCZHZkbHZXMXVYNjB6VjBBNmgxa2MxMlVWLWludHVCV3RBb1FBanJQTk55bFpXcXo5bFhFZVl1Zk9CUHpUUUhpcEhTMG1JdHJzTkRkVVF4dVdSQWdUUkV2UlFRbWRETGJ0blNPSlVQSFl2UXlWZ3pGX2ctZHBLZU1nVVNnaEJ4UlViekdodUllc09DejRKUVZBcXM3bWEtZ1Y3ZlVTMWtudWhMRkJJWmgyVWxVb1ZSSnRxWlhpNW9GVFNkVWVnNGV2Nkw4cDNVWjJKdGQxd1pWck4xdzhoZzB5QWt2d3Y2VWczUktvaUFfZWQyeG9hUWNjRi1XY0ZFRG5saFhMckY5SUF4YUFvNUpyVlpJdmhqNE9DQW5MUTY2a3FiWnR2MUdEMDg4OGhyWjdxQUQ2blA5U1dxZDljSXpfcUtvRFF5QU8zd3hBWVFsTG9HU0VQakdadFY0NFF3RWk0VFZSZjZqTF9PR014cHVYM1NUcmpWRzliWXVMcjVIQmd4dTduT3M3c1c1blJwNjUtVGZzNXdKbWpKTURZcTRUTjJzT2ItU1hYbHA1clh2dEM3RlprWXRVdkt3eGNZQy0yYUpsUDZCQkx4V2VaTFhVamcwN3BCVmpRVFo2bGlLNUcxanlpNm9PZ2N5Uk1TU1dKYWZSOHhwNEN2SjEtMWtKemljeTI4ZnMzUVoyUmdRS0NZRGliNjVHVFg4SWc1aUhGaUZNZGxING41elFySDh5Nnp6Q3BHaDBMTTBqaU1nSUhVWmZxNmdaXzFZOHZBWkFwbWFNcFhYR05fS2VwT21PTGlZLUtsMm1sM2dzd1dTZ3V2aFdtcDl3SFNCekdMRUh0WFoxRzhWNmtRRXVTUk9NRzFFTEVUUWNSWVYxTjhBYTBHb2xrbG5YdVZTM0s5Vkt4NlMzMzd1MFNETWdkVjhjNHl5Vy1SdjBCbWEtcDRZdnYtUnlkd2lmR0tWVi13WFBGaDlPV0pmQTRibTM5bV9BQlFGeG1WOWZVU1J1bElEdXRoUGl4Z1NjSVdPU3ozcEJpRGU1dTljeVVYZ1gwcUdaSGFoVmNsNEVZNkhrLWhWWkVDTWo4aUNtcVRBbDBVNTI4c24wNmxyWkR1LThsV2R5QUdSelVsQkNpMlJWemlWdFZyNHZJVVdjQmdTOHJNbUE2aWJEejRSc0FqUXN2Yy1HOG8wVXR4dlRFdXRxdHIxc2ctMVlfZmQ2eE1zdmlTRG5yVHI4eXlKUHdIcFJyQzBpNTRIMG81Q0xaMXZ3U0VUNzlsemwwZHQxakRMR1lwS1RseGVWSnQ4SHpJOWpXYmwyU25yS2ktWmNiTHkwRFdIWGV0RUh6RmVORkMzYW51V1VEVEhndWxjV0JiandxYXJrSUx1RHVkQlhOQWhvbmU4dWw5UGM2NlVnOUhQc2daaWVkaGFtbEo5Um5jS2luNGJLOXFicldKZnhJb0xJNjFqWk0yTW81ZU9kSU0yUmlqRlczV28xODZyTVdoejU2eUhXVWJXU25oLUFkanhUT0RBcndVR180SVhCY01lbkMzRGJlVTdqdlZDVkhQWW1xSTNWdGphOXZzQzZQdV9ENW8wVWJ3ZkpjQkhNOFlyenRZRWFPaVZKU0V2bnRRcWc3NHZDT3VfbXg0SzQzdlJ4RXlUV3BPT3llcWl2YVZHTFc0eUVLT0NaYllLUTZfWnJPeG5Hc2ZVZVpsRWlNUms0OU05NXpVWXdsOHI3YmoyVmllSWR1dnoxQWdlSVNEMHp3emlPRTVUUW5nOWtLQ2VMSFN5WDJBdTBEZm40NEtSMUZhNnlYTnhxck4yVExTU3QycEcydU03Q1p0ZmxYRnVsNGFYNHRTYnZDNkVnaFZ1eFJCZnlwVDhRcVlRQ2k5MVY5a3IzQk1Cb3FwRTFaVHpTaXVaSERRbWVubjFzcjd1WkVmWnVlRUNZWWFBUnlSWVVsV0p0N29NRmZjMHRJbWNzS0wyaVVCNGhMX2RNUkNLNWZPZmhMWFkxN0gtS1dCOHdKRWp2QkhoVlpvZGVTa2Y0cUFvRFoyN2Zxc0ZSRjZDQVFjS3JpeUdCTTdOX0tGTVlmOHFiLWk2bGdzVjhlak1HR1VvS3NRNW05NXFrbHMwSFZpMEhlV2MzcmhUMDAyZERpbnF2LTE0UHN4dUdWc3FqcHVKX2NYYU43WVhBcnVTdzU2bUFEcEtXX3FqUlZISlFrVWQ4VzJIUlhrYmI5aE9XWXViZzkzX1lKMl9ZNHpWUmR1ZGRIQVoyOHVPT2RpbC10dzY3Y1dla2hUWVROQm96cU5MUVpmbEM1am9rUlFhN21MaWRoU0g1VkhRdG1qeFJBbUVUM0MyZjZIdHRFb0I5eU91UUNwQVZiZjNSZzhuUU9KUzI5UDQyamlZLWZZbkpsSkFhOVV0aG8tMy1kYVh2WndhUEhOZjVYWXVOOU9xQTVFNF9IMUk2VVpxTXl2cjNXTjB1Vy1DY29PblJ6QzN3U0pXYkM4Q1pUSFRDNDNBNE9Yb04xMFo1Nl9vQ0JWNjRmck5zUGw3Nmw3b2RfN1RSODQ5anJ3N1FxRDNUQnF2aF9BckVHWDNWRUNFMmdTRk5kUDFIQV9HTjVHb2xsNWZBTkhrQTREOXRYUkozbTBjNFE0WGplWVBtOXJpSUM2ZzZwMWpRb3dBTzdLbmtaVW5LSDlHWkdXMjVqcklJOGMzY2sydE1NRWp1Vnk2dXlEbzdKb2UxakoxTWptR2VyOVNXV3YzXzdKRE5DY3YtZ0FkZTd0YUhQcWd6MHJxRUoyQU9FUEt2d1NFVThDNjhUclJ0RUVpc0xSb0ZqTGc4aEdxX0YwNk5oVV8yWll4R2gzRC1fa3lCMHVvM3Fvd1NWZmZPWkJfeTl3eUxlZGR5TFVwcmlHNHBabExVVVFWb1o5Z2Z3TFpVUjY3eE5iOUR4blN6MXJfdW90VExicHdnaFpRekpwUk9oQVVTaFpmWDRicHlvYXlxMUpaZFdFRDZLcFVSN3FSMnNLbEFyeWdEX19QdXFzUjNRUGZJY0pnYVpJaW1QdUlMeHpZTWZGejRBcTZwbkcxMmhhV0FGcTB6Q0RQVjA2ZWx3LUZDeU0xTjhrSkRHUS1WTm9SczdQc0x6Q2hpdjFneGFWMXlXal94Wlh1T0JvMFFHUU5iSmRobFRfVUZKS0NXa3dvSGNSMlU4NUV5emgzbmZSS0JoMWJZQ3RycmlUeGlVWVM2QlZhdEhmT0YybUxhc1VTOXE1djZuRWcwdjREU2RocGd2azhaUjJBWG56TTdhMzdaam5seVcxNm9Xb0xFOV9iYi1fcF9RdU1oeV9VMG5jc193ZWllVGkxUVZkMm9JRkE1Yng5WmNzLWZLd2hMZnQ1ajBmWE5VbksyMUlxcEF2dTNjdEk3bGRwLWxFX0d1Q3J1LWp6WlA1VUFMVTQ2SVN5NEtVU19DLWJ3NTNzcjVyQy00RFhXeVBfUkYxQmJGOW5icDNWeUQ0cnFxbWtBbGFsMWgtMkxEdzFUZWVQWGFDaUNDZ2w4U0lxbWplUlloWGcyc04zV0pDbDFGV0VLZWxHbE9CdVhFaEhKdmc1LWZsc3V0WkJ3SmxKWG9pdDN2N2VuMU1XZWw4V0dLZ081Z2FzQU5TX2t6a2hxTGQzR0xURVVDRkVZekdjS1NXNmNqMFVhQ1JWR2Q1dl95cHgwWE94QWdOZXpsNGE0dWNaZmxzb3pIZVBhMGJhYkw1OXJjR2p3UkVFaTgxT2t5cC03ajJEN01RTnd4enAwVVlvVVp3TVBDYzdoWHNCeFBpLWRVNGNiVU01UkhIdF8xQnNwem1TM3R0R3YxLVFyd19XTl9JbWRCdDExc1BiR2pmcVNxb19TM2c4cFlsWjlBeEdSU1BJTVJucmZWZU5hMkg0dllMQkg5dElYakFfVWFZZWw3eTFwcldpTmFGOXVuOFQzeFZLQXg1VXVOVlNqYmNJUVR2YnJ2OWZ4clR0MU90YWNNd2QzSmx4dVc0angzM2hxWWZzNFpzQTU4Mk5XdWtrQmJiTHg1NktCWW4ybUpPOHoxVFpFWDNiNWg2WnpNUWc5UDhtRVJLVnd1ZmNMVS0zSFduQ3l3VFBPa19KZ3RXWVBta0t2aWxMNl9mVnB6X1JDMlhkQU1RbDRMRGxsNnotVlFZRUkwTHdHU3BDMHUwRFZNeUxMZkZGYnlxaGExNjVFajQ4M0FvdlhZWUhNVlN2MmpkeGFROElBNllwZlpQbWtEQmhqRnBpSWYyUEQxNDBpU3d5VC15ZjRWRl83X1h6VXZyUG9NcVdEb09sSzFGU1hVSHVKSG11RXZ0NzlUb0pSd2l3YnhBMGpIY0J1b1lDS3BYaWU3eGc0TldMX3VKdmEybHlxSXRaTFV1aWkzdC1PWkZQTXVwZi1GVFVGOHVZZjBYUWFkcndYeFQta2hIU1ZIOS1WZlJJM3AxcnBQMld0WWRTbXhNNTZkWGVYTVBQczNzYjNzaGs3N2E2T0RiQ0RKbmhGN1RfaklzR29xa2xIXzM1Z3RmMU5NczNWbHZmd0s3LVg0a3NhTU1DbkNqLXI5ejBpMzRvdjVxVTk3RllLOTRFbnE2N2N6THR1c2k4Z3ZsTWVLb3E0X3M5VERYT1NDX2hBdjUxZ1BxNmJ3MEY0NWhldXVWY3kydlBnS2p5SEVsN2gzWmtDYWRnZ2RVb2w2X3k0UjA0YXJ5Y0U4Qk9ySWY4MHdsdVpuOWpMbEY4ZVF2WVczblNWc2J2NTJyZVFOa1h4V1BveGlaNDlZSW40UENHaGp0dWpuanc3UGRVS1ZQRUVPQ1FaRW9pcWhld0k2ZTNvWFNCX0YtQ1ZabS1iNkt6cUI3dGlRbWFGMjRIQ0o1WUl0UlNYT0I0d2tadzBGYWxtRUxQV3RMTjdiUVZBX01vbC1NOE9mdmZVLXU1dkY4eDNLQnF1TklReWJ0b1JuOUJ5Y0JqNGhUYzJ2Rk9KcGZNXzM1X0xDTWtuUFE1UnRwOFRkMTJBVmtoY0diUXZQLTVPYTJwOG1TRUxuLUJ1Q2tRdWZFc0lqOHlmWF9QNTdCMG50V3VDdG1BNDd5UkFvbk43VEg4UVd1WU9vbXNudUhDclZQbU1YM2F1cnQ2eGU0Y3ZrZEdmdmlGZnpXcEtBenhCY3p5dno4b1R6eTBLZDIyZXBXd2xkU1BZT1VRY1JZbklzS1BaRGRQNU9RajlVcDF1LTBocmoyeUJzbkk1TnI5V3hPZmtkMFJBVGhtd3ZINENWZU9hX25hNG9HakRxVVRuUUZPcnVyVlNKaVhqNk5BSmd1U2NIZzBVMEpTNk5hV2pSRVNHRWI0ZGJMcEYzbTVzWXp6UlhCS2MtMEhQckM3ZXFxSzh4S0tWb2c5bmMwSW50dmJOQVl5dk1RbmJqMDBORHVabVBzWHNpNWJqeXJoZUc0ZkQxaURUZ3lGNEtWbGN5ZnRFN0tBdGtYOHZwZC1xbEduWTczZEExWHpzTXRvZXZwUWw4ZzhER1JabXFaY1pfQ1VMaFloYkVlQzAyUmZsUlFPbFM2a0c2V1UyaVNiVGVYZGl0by1tS3hNcm5aNnJPNUMyTXg3TmR2TS0wYWlSUEp6OURTYjlsamYwbl9wVDRHeWljMTJoRV9Bd213TFNDTE1QZ2xodWlpcndkMWNhSng0U2x5U2FVbWl3eUliUHdDLUFBaVRQVU5ueHNOT09sUmpVZW1qcUpmMUMyRHpyWVc3OHFEakY5S3V3VmYtX3VCSUxkMEpvanFZVTZmYlZPQkFONm5fWlVmOFZNZjVlOWVNd2E5TF9zMzliUUNLZEtoRzJtVlBpTE5XRklGX2tvSnlWSm84VENhbk1QOTNUUUdUVVZwcXI0ODhrMHh2NzN2SXdhNkdaWXRWaUlFSTBWMVRiQ3pSLWFOZGlNTkhqN0RwRXJkdWFxTWlpM05YZ1lQZ0wtT0UxYWFwbmZ6OHJsZWk3dW05LXNTQ3ZGOW9hVEhYM0dKcXJOZl9VQnphU2RKRDFxWjFHTzRrRzFkTlFIbUlqelJaOU1PNk5Dcm1ESzBPYndKZXE4aE83YzdjVlNTQ1lWUFl5czR0bzRQeEpHM3VYTHd2WnItSUN1RkZMLXVmSFBqdUZvY2VrbDE0Q3V5Z2ZWaTI1eVZZMHlDNFR4Ymo5ZndvQTRFRHlEN240VUoyclFoODNoMmxTMk1kNUFYTmthVm5STW4zVUc5bU5lZEYzNmxnTXV1RUxDS2J3WFlEbDAtWFpncndRYjl1cElmVHBLNk9EV0Q4UWpnN25LYXFzaU5UQlllZHV6X0hnOXhLdnJQWm5vZnZQT2U0cDFXUEhUWGFHdWhST1FRUDMwVGozSl9nNVhIdkJYYkVJRXVRWXc5U09PM3dqT2lQOFpkQU9tTXUxSGFYZE1Va3Vkd2k3cVp0LXV5WmVKeEhZMXM1Ry1lNjllNUtCeTIwOTM0VVgxWkpNZVFkQXY5TGg4emU1dFAwUVlQQUQtZGtFaXprbVJXenZmQUtjOGdIc0hRQThrekJiX1RZUkRGV1VKTDVvdWJsdmk4dTE3Nk5RX1lab1l1eEkwVndiSzJXVFBIdHQtdlFWYk1rMmd3a29nRjRLcF9YZXI3bWFEZWVOSG4xQ2J4Z1dZOFRBeWZhanNYTFZUQ2tiTC1DQ09vdmxfVmc5V29OZmlFazFEb0Q0Z05PUnhTYWc0WTZUYl9ZTVNqYmRleURoLTJYeUIzQVdJNHNpS1h5VWJtUlRxcUZoVl80OFhMaUdlSzJuQlo0OWZjcm1GVGpXMGQxaVR5dnc3X2Uxa3lDVEZjUDE4NTZocmUwQ0pVcVhZdXdpaU8xYl9QaUh6dnE0UUVHOW1zeUVMQmJpU3ZhbXdnR3JPU2duQjNISHBFOElsTWlUZGo4clNCTEM4b1RrQU9jWTVxNFZ5T0pMZGJOUlFOZ0hZQlR3LTBQQ3paTlhfV3RoOUVlWG1VSG9wWVN0U2xnM2t0ZGtIZHZvb2tOZnVhUWdBUzNJYVpLVGFUYU5CV3B4SGhDMjJKdjFDNWEzX3ZfUUxqcndoM0hPQjhqWVdTQVNyS21MdXRIUnVkT2lPUVU0bGhiekRxaUpReGVVQmotRWw1QzUwWlpjN3hoWjJHMElrSVJCODA5Yzc0MXg2MGVyQ3dDcVRPdHF6eHNrZnBlRzM5N0FoeWF3M2FjUkllOGt5VEpuQnNuLUV5LXlTMVJ1NTJwM0dQQXJjRUN3WVBZcXgxM1V2VU1aTUxtWFdYN0NNRkZrVEQ2R3YzS1NXRFRkUW1TLXREd3p3TmpsNVpqejJQQnVwOVZhYjVlaW01cFdwMWlxbTF0RGdaZXF1RkFrNW1CaGo5OGhBbEo1Q2lMeUxJNm9xRlQ4TXk4dWk3bmg3U0lfUFZOcC1WYV93VjdmYkVPcHVja2hoNXJOQ2NPUmZGMmF3QVJ0U3J6MzB6aVVPOE9jQkl4ZzFIcDZ6S19JYm9JUEhZTnVoaUpNWWtBWE1uVHBsRGpOVU1fOVl2QThWbTlqMzgxcWdnS0JzRk9lZVBSMmFlekZpQ19Qcm9ld3dGU08wS0FEXzVzb093Skg0YjNkaDFtMGJVa1ZDX2JWVEVlNkhwbG1NWmhDS1FvTV9XNHJpUG90MHo5RXZHQWtNR3RtNmY2N0xueU5yS2hCT1d3NXVMaEQtVkNKdEZqdnQ4X1pMQXB1YXV3bjlyNGNPUEZhdXluTXNzRFNCT014LUx2QkVPcEh1N3Z3ZTJEX0QwYy1YLXBKNHc4a2JHQVRQZ05fdHluMHhTeGVyOFV6WHhtODBDY2d5elltWHg5X0kzalJYbFc0NXFfU3BqN1psRjdtX0N5Nk5UY2hhRjN1NU1HSmZsbTJrRXNKVjg2ZmlmQzJBSnF4WVBINkpsTGpldG1ma3RULUZSaTNYdkdtYjdwUnVkQ0tZVlBtYklHSDg2eWdkU0J5VDNpWTF5ZDEwN2NTSjQ4Mk5wVVlZLWZtRTl0VUxQWkJXXzc0aUFKWElOaElDb2RqWGlkN3ptRG13MFFQUHFGM0p2ZWhzSnJTVU10LWEwazlCRjRTa0xNcU9TRHE4OWF6WmkzWlFKTmpOSHY3V1NFRHoydkdUeWhRcDJLRHQzenlpNG9NOHlNMUlxQVBOby1LTWJBbFEyRVlHcjhYNHlFQmtELWJvbVRSMUpVd2lPLXEtTmRJVzJBcDdTeTRSazZoeG5fRWJHd3BCckRvZVhrNjZSUFFXcmVBMk5BT1ZQRjFpbGNSazZqMDJJLXBVX2oxNU1Qa0MtaTNPd0M2M1lFNHdCa2tlcHFINWdqY0dlem15TC0xT0k5YTV6S193ZVNnOU0tV0oyakVsdVFadTZnV3RrZUxPM3B4MmpwQ0JPRXBjZ1lTTmx5c0M4eWJjaTlDSHBiTGhKX2dORy1CNnFCNVhhSG95Nl9YVnZfZXRiM29KbFU2RjIxRVlEbndkaUFzQWdEeFl6WkNxaVlhRGR2T0thRzUyVFdQOTc3aU5keGtNZ0xleHY2a0VDelc1SkpKVDdCX0JZazZiWHBTNmd4NS11ek1tVkt0c2tMNWF0ZzJ1R1BxemFjVVlSZ1pBa2Fac2k2cVB5Y1FvcUpyMmJnNm52YjZ2R3N5aHJSb2R3MWh4NkZEZ2ZwSmFETWVMWThFNnJVWjdZcHhDQUZEZHd3OHBTYThqak4ySURsOWtVVGRVaXpQWUdLdmxOSW5aM1BNVW5KTEVsSm1VcG55Q3BlZ1h1SWktbThDRHBUbzR1aUp2T25CZ0Jaa2NKMU1LckpRX2RGbHd4V2p4TUpmMzNpRFpwUm9nTzltcWVOWVgtRzdsbXRFbV9CVFpIaVRQSFpqNDliR0V6MjJuNTd5bkp6SVRlYVU4clRsblRaRGZ4aEJhdWpCWlU2d0ZYMlJXT2liQlhmY29qT0x5ZWZ1NzhNeElzb09mN1UyZDZnRTRnTXZIbTJPY2pUZTNGdW8yUUZva1cwNExpZWRxbmNwZFV1Q1Z1aTFVcEREUDhPblZtTl9udHl4UEx5bzhuVjJUMWVNaXdIOUFqSFVubVBnUWVBRi1jVl9sV1o1VkJZWmdfclJic0F4VEZmalhVVlNIbVZnNTZLWE1xV3ZFUTBTWW1RVzN0Z09MUlkzakIxVzlvV1VYVHR2TDM2aUUzdmU0S3hOdHpWeF9DUVJJMXo1VGY5LS1SWG14Rkp0Mk5USUY2d2dNYW5pUER2Y0I2U1MybXd5bTZWQXlVX28tdk5QTWQ2c29sVnBLdnJZdHRHSTVSR251a2ZLVnRSaDAyNGFMUzhOajlmTUc0d2tzXzNuNzNQX1R5N2hRV1lIVlFQMWVyaEliZ2xmSkF2T3JNWGVEdFd4Tkh4RGtWNDlJSTktSTVHZ2JkWDN0Q2hYM1g3ek9VMTI5MEZhNVczYndaaGxIS3BVTlVsaGxMUlRSTThrYWxlSktVeEZvY3Y2MEYyZ0FfcmJHV2dGX2JBWWc2eUJDWXlPNGNTSHVQbUx4bFM3eTVqZGFDU0ZpaDFWNHNUYnNvZklYU09ydUF2REF5SW5sWXZHUzY5TUF4NGNIOHo5MXdKUlcxNndfRHRqU0JGQ1FzeWp5X0NuQ29NdktIQ1RFSS1ZN0MxU0huMmdnRWhlZmZZYkFZVTRCQXQwTmFwb1M2N3FwNU12cFMwcnFoWXdvYzVBNUVhZ0tROF9CZXRMbTlkbldsTzE4c05sRGgwQjctU2JHb1FKWmNfOUFkcFNSclNhdUdqalJIUEVwUkhJTU5jNVNBSmhlNzQzalpmal81SUdaRWRydkdkLWpBRXZHVnRMczY3STlQVWRoSHFxQTlyLWtZSUdUcUtoOEFoajRmUEZ5TW9xQTZBbmF4T1JlNDRUbEE5REtKRHlRMXdsNUx4Q3J4SkZEQzNSa1hRQVYxZEZnM2VLWFpnYlhWYnk5VnhaMFlhNFp1TkltcE5YMVQtYUNqTmczZGwtOUhoeEttcEtnRGoyWXZyOU5qWWpjaUNQSDgydVBuSnRsdVR1TmNVaDlMTTNaSDgxUVdSQi1ZQWRoWm5yOV9RRFVfQ0NheEFyMDZsTmoyXzNfcVByUEdCM0tqZW5GYUFtck5OUmdEMTFHaUhzdFVVTzY4bENiTW4zTHdkeTJlVW9EYTRSYzB5a2hvckdRUTlzLXg0eEoyVHJGb3hfbGZTZ182WDE2UE9ZNWxWMWRyX2V6Y1dhSDFxbEMtRVRJek5pb2dHdDFQN2g4b1RUb3dKRTJWOC11d1VXUUNaRExBcXNXY2ZKcElyNVk2MXlrQnAzV0xlRUt0SWZUeVJSWEEzazE1MkxXUXE2RUNVaFRQb1V2ZjRKZFUxdDd5SWJEakdHVzZUbVU0alhFbkpJV1dvOXJwZFRldTlrSHNYa08tQnRibzdRWUNFVFdlY2NvZ3lQWjZWMnRBVXFyVlVKVnphVWhPdy1QSVZQZGl5NDlxREhYSGRKVkNYTUE2ZUNOR3NNWDM4dWljRGl1S2ZleUdnQzhzb0QxV2xfNF9vTDZsY3I0Q0QzeVloSzdYQlR2VG9VM1g1LVRubVJ6RDJBdVh4bzJJNTR2UDRldmJ6NENKVFVDMnFYRmxGbjZmcU9lTHFUOGxqbUhHTnU3Q21mU2NSZXBfekRQNk5iOVYzNnVtRGJFOV9tTFl6eGFRR2JHdDU2d3NjOEhsQ0RzazJLNXRsRFFGNzJ4bWlUQmtiZ2NFWlhaVGJ6d1lTaTY4UUhnVGpyaWt6VDFQWk5idkVKNldTRFJUX0NvcEtCWkQ2U2pBOUx3VmVvWExGZEloVjBpRGJ1aHFlcE04b1JzYmd0WWxkQy12SWtheExpdWNnVzYyVlVfVFIzTUZGckMtZndlcUlodHR3N3E0ZFUxUXVmYk1FNXZqUVZ5WlFvZHdfcmRId2tKNFgwLXlYS2YzV3Rza0RTa0pBRGY0akUwT2g2SzRuRzl0d3Mwbk90UThXY0FVY2tLNWltZkxaZVR6NURIQkJUXzIwMkVqUG5zelNZc09Mb1RoYS1oeUpla19hd2ZDMW1JdnBJU05seUx4cG9jV09URDhyYy03MjRoM2FiaXpNWlBrejlWXy1zRzhkcEc4SDFVZ3I5dUtQM01Tc0FWcEY5bzk3bTJiSHRxRnhLa1J2bkRWR1dfRzNVTzBJWnZ4VUk5N0Q1RGQyRFNaOHJjN1B5RHlVNXVjY3pPTldhRFhTMTRoWHZHMWZkVXFVMmRYb1VqUTVTdEYxbV85a1poODhpZUhJQTlBWDlUbnVQd3BQV1hBX2MtZzdzSzdBajBQNGVDQWpYYk1hTWRPVFJqbWNzTkpIbVQxYzdEMGIxaDJwenMweVhEVi1kNHdQRUZ3ZkxOSXA4MkJqOHFvSFBreWxkTmo4ZG1VYV9ib2xqSkFpaTB4QUFybGYzbmNlSHpqX0NnM1owTnNRXy1xaEdWTjhleXpmU2lfcVRXNldEWlhBYTVIVzJ0Q25VSkpTek9DNXJ5QVF3OEcxRlVIM3A5MklESHd2VGZYVVl5clpWdnVYRWVBN2tYckhKYVEwd0hMOWFhYjB4ZDlfNmtIUlNVeXdXVmZ3eUhHTnp4eW1zR3lCTnlXaE9uVDBhaG9jcnpGczduT2xzRTVzZFotZjFybUtzemNUZXl1eWl4ajd5bXdpY2FRRTNBZnBUUS1TVnhBN2hTMzlwa0ROQXlOYVBfQ2M3aFA0R0w1NDNVaEd3c2U0T21uRkJNNmtEQW03VExGSjQ2azR2bGItY3lrQS1vYURldVJKUjJXN21IOUhWcVEtemNCbTB1aVU1N1NWT0w2VkZqNzAxZHdFSmdab3pLRThuZWgwWUtvdTVrOTBZWjdjZjRYTk9fLWZzd2NXWFV1ZjJKTXBlX19Ccmh3UVlKbTlBU2tLbFFhS1k0Yi05dmNRam5HVWdKNXk4LWNmQnJ6TUY3WHQ4U2szdUNFQTdvTnA2T21rUGNTTUlBRC0tdGg3eVJwdDVnOTFUU2FJQ2lQd3MxYzVGbU5COEZsZkM5MFMtb1JFeVVsTWZZRXMyNHl4RXBsa2FERXlDOHROVVlTWGJUZGFwNDNfMWhWQWktOV9YZ24wS2pZSGZWTnRCRm55T1MybXBXX2NpZ2RQeEVfQnNZeS14aGJETjViczQ1NGRVbUlSa3VoM1hlTDMzQmJwbTRzdGN0ZEJQeWxnLVRqRG9pTENaTm9jWlNxTXRYdXlPVlRHQ09fUjBvY2phUzVzMldSQjNIVXVXNTFHS0o0MHBmSkUzTUZqbmlpSlN5V2NweE5MckJZcEs2Qnd4SlhnZUFwaENiSGl0SHBCR0Y4V2trWUM5SURCQmJzV1FGTHQyVnU5Rk9sWXRzX2Jkc2VBNjJUSVQtbXRDSXJacFhOTGhMdkt6VXhIVXEyOExqS09MLUNycmlxd2JMc1VGc0hfUTdHQ2FhZEZGcW5YN3NOR2dnajU1NW53eUgtNmlMZlB5cG9hNC1BUlFjdVlNd01fSlZOdmpKUllneUFleHpjVHBoT0F4Tmo4UEZCWVlYZlotRDFVS2poOTh3WFo4Wl9wT1h4OWYxeWpQU1A5ekxaWXl2TkV6M1dKUHMwT0FKdy1qRjFnN194b3dDVV9NUXNuQ0VOSnl5OHVyZVNsZ2NPcVFGLXhnWHRPdGtUQ2pYMFZxTURKamRGZk5WaWM0YjhCcDVxamZDUjJHWlZQSXEwS3N6dDJrUXVJUWpIY0pUM1FmRE5ic0p3NnFmbWdqVVFFM1YtVHNUWG1XMWloWXhqTjdTZkl3UTBJSENTV1gzVjBWRVRzMERuQ1ROcWEtOWdHNE5pd1g1eGZybzFralJaRWV4OVZhNzR1Q0xUWjFEdk9KTUJsYTM4OGdCN1R4b1BqM3hsN1Z0SkpvWDJwZFl4ZUx3SVRzTVVxOUdpSHpLUVBUYklnUk5jTWhGOUNDazJOTWpEaXNXOUhJSTVFU2tlX3JkLWxIbkRGdnEwQzBBN3BvcXZmN0ZtTzRNVGN0UXhUM3pTT1N2U0F5WDJXRWxzV3FCMkJEYmJ3T0tadzlDYlhWNkVzNWRYV1liWWxqNVFXazBLZ2YxMVI3MDBlcGRZcDEtSEEwWVdiWUNpdmM1aTRYbDRVcTVuSTIxZ0pPd2pvSEt4TzJyNUM0MmpZMmR1MW02aExCZlk5c29kWlVzUHFvZ0tTWWxFVWZmRmRVOWZyRzlIejg4ZVJad19pMXBxWUE2T2taR0Z2a1Fzc1dPWHhtZWI0YmdRSzMwX2JzUGFxamVXakpaQ0prTDNmN0dINmFCazllWjVvX0dJNTU4dWpVcjdwb1RHc29wQU5OSW91Vnh3dm1wUkp3bE1yM19UbFQ2cndNcVZtYXgwLXpoX0dwc2VfalE4VVR1VWxWQ2k4WUpQX0dxTUk5bFlZOEZWeG5aTGd6ZWJrM1o1M1pTR1hTV1NWdndhMHpuMHdteUNhNS1UbVpHZlpGQW5mM1JSRkpjZEp1MWlXa3hKUjZPTjdhRFhCamxsREI1RldMV2xtLVBIV01aR3BZNkUyUWRteXdCUnJ2NktyTng2X3Y5T3M3SEE5UDJfWVpPU2d4QjBKSGtxYXg0amlZV3lQeW05R0c5ZXBLZE5adF9tcnJlSTNPcXdiQmdZc2xpcEFvTlVOZlN2LS03LW92WWpzNUZsRUZEMEk3akpHclhzSDZCX2xWbGFOdThtbHhfY0NqUzRRSzNyQkZvNktfaGNDczI5Y1RSS3RNUURPaWZieU15c1otZnFhOVhZcjliOWV2QjMwUDdETFNiUmZRRVItcENTMGl4QnV3Vks5Rm5JcUJFSk9wNnJHYnkxZnJSeGVpS2hWb21odGtWMmhoU1dWdndqdmIzVHVUb3FNdlpXU01LaTBKRkxWNklpaExmckxBbDRWLUdQUGZ6Y3dzUjdMdUR3NTg0WTdPcDVrRVllN2pRR1dQTXpuQl9oMTRBLWpFVDY1cEdWNDVGdE5JWlZtUXh4b0c0V2hkSkRPVnlJT1pWWV84Z0FTRXlmUUFydHNJZXRZVU5PLVBpUnlQSHJNNFdpZ2ZqLVZ3cG56YzFWTWRPS3RtczdvQ1dWSHZEMkVuTTZRWWQtNTgzenJtZlVqR3BRMU92b2pCRlhVNXlnLVVxTUhXVjJGRmVZQzZXXzB0bVphMmdaR1cwQ1hjamdaRGNUS01KSk5raHAyUkJSMXZta2ZDYVF2VExrUl9rdVI0d0Q3SnViM2p0WGI4WGpKOXJ6N1pBMnQxWGtWNWFRMXJXSGRjNWZjdVM5UUVTZVl0OUpRLWR6MzFNQWEyc0RZNVRFUkwtai1BN0I5S0pNdEl4Uk4wS20teE5KSTQ4U1VzRmhnMExUdHhzS1ZiSFhwbHFBS2ZpUU5nZ3Jaa1hQc3M2M3NBR19qa3BxbVNZdU51TDVQSVh1djdpdE9Na1BTelpfYnpWTnh0NUlQWkRFcDhnQWw4QzZCQm5sSGtsejBMS2k0bTBfSlptcXlyUzIzbnllb2tsbk5jOXl1S2M0UkJjMDhKVW1JWjMxUXpYOWphQ0FxQ25zb2hQSmFVVEh6ellUWjkyVDhlQ2V0d01yU3htbVYtMWoxQzJYR0ZTdW5ibkR1VTg4bWZnUFpKV0ZoRVVPUmFCOG1hbkpRMWhZejhkM2hCaHdDSnoxQjBTbkdJdDRkX0JITjZETjc3alBzMHZyenRaM2ZQZlFOTWRobXhQaGVvSldIOHZ3Ni00ajd1LXVqa1dTSVJjRUtIWWF5bzNHZzZYS1VpZ013N25IaWozcEVBQXMyWW1la05YdFFPU1p1ellMTDRpOXpUMTlkT1FrUWhvZG8xUXJETC1KQzJSWllJemJpUUR0aEtPT2NjMlZJdDdqZDQyNmdJcWdPVS11eG42dFJ1T0dFXzNJZGtsNTJZaU5SaXItZ3otQng5T1dMQ0dPUUhrbjRzWjJTZm9CZjc1RDdiVUZjZGNGdS1PX3hzX2xFZnFibTZndUJwVlZIc1NPZ18tTnh5MDFtSTJoZHdZRVZqekhLekYzS3FmbEhnQ3FSU3U4SkJXNjY2c3BDVHF4aF9FRndrTkFMVEd2LWRMa1NJemdFbnVVckZESXVjMmhHYzZ6ZkF1ZGZsYnZMZFpVb09WNFpOMGZYSmg0YnJrQnhoUUdQSndDM1JFaDZuWDhCaG9EOFpvTE1RRHJfbnZ2bW1McWxNNFdYYkQ5V25mOVgweENzWjB6eG5NNVdycmZ6X01ZY2taMUIyQWNFcDFpTklfRy1mcDJxc0FwUWRfRkpwcU9HcmdjRmtPWTBqYkdwN294T05VdEVDa24wQTBxczFoNTZZaFhQYl9xNVAzRWM5TmhPTVVvTmsxN0RUX082bVN4aHR5Zk5RUmFQS2xfcWdFcTB6bHU4STVTNFRtWGZ4aWR0QklQMmZzWDcwMDV6YkhXX0ZERUZBTVRKX3VpWUVIVTU4a2UtOUpHWjZKYjFUWGhnTUU2Y2NZMVRmYzY0QUNYQlhQdU1aemNmclB0akFzM3IxeG5wU2lZQ1MzTTdwZ1FUZ0EwNzRNd0tUWFVEWGRIZl9MeFFKdm8ycHR2U194S0JNejUyalhCcWFPN253TWRlclFiWmlsM25ET3JacWZha0Z0MU53WGFiODREcFJVRkR2cFVKaXBOMk9Nb3NqM0toUVlDcHdIYUYxTUVzVVFLSVdDak9jZlkwWFN3RUh3MmNycUNCVVRCWGFqd3lsUDVZOEFYYTFGTXRyTF9oXzdldkhtalJjREhrdjVGNXBrQ3g5ZkpHR01HZFdfVlJLMlNXblhqQWFsaF92QzZ5Z3JFWFUtU0tWanZ4QW5WeFZ1M3IzbEo1MXgyelhub3IxVVVQbGZsaEdWdEZxRTVDMXY5TXFIVzIzV29ILXk3NTJpdDB0alVHYjYtS3E2TDFkWHRhdThkZ05rdlZCRjdNd2poakhWUzZCd3l5YkVTYXpwY0tla29LbVNNTHFoRzQ4emYzUUw3cEFnV2hqRU5EX0wwTUdjaXkxcUxZLWMxRU13a0h4cUpvSVdhSENrY2hXZklWbXdfUkF4VnQ1NE5MZDJhcExCNVRjb2dFeGU3Yzc1TnlFTmFnRGJ3UXgybnd5b0JuYUctQTZJdDNSYVl1R0xlVllHN0NadFBmbFRVV3ZfcVgwR1VFMU42YXJEQUtka0VUUFdwRFVLT1hlUE5tMnFMTl9pejk4R2JJSzBjamRUbHFqRkdaM1pSOXRnaWtxNTdXWjAzd3ItMUtxbVljempIOEZEZWZWMVJ0N203cTgwUkRLUWZ2dmFjSDhwUlNRUEhsYWNuZW95dS1kd3psWVBiVkVqTzRsWjNiYkhVZXljemdaN3BqUWxQaEZGQ3U1ZF9TUnpHZHh0UFZhT0xXT0pkSXFDQm11MXFUcE5DQndSMUQ1THdpOUxQNVUzVWliRmtEUXlRWWhFc0Q3cXdkZThfVldDOV9wSnZzaUxiQkFDdEQ1akhQbjNiS05YalNudFI4cjh4TXJTdUp4S2dYbElJaXlWWW9rX1pNdmszR01sVUJ0YlBoeFd0T3RWNWRsSTlDaXhqZ2tBbU16aWh5aEJXbzlla1lnS29oUEFBcm5kaWJtb2E5cTlwQnNuenZSUm1VUHFaSjZiVW05UjF2R25JN2tleFF2cm1pZ0lfZ0VNcFlDOFRQUFRCM0xHQkdrejNBRThLQ3oyeG53VUk1dDF1WmV3WVdiSWR5WkNxamlFblpnUGJZYTN6VUpZSkhfVk1aTzc1MXIwWlI4eGFibDMwZG93a2lzb2RMRm9rVGtZTHNjRVp3bWdGMmZfckFuc1U5RTNfQTdrUzVwb1p5TnRIdUdJeGxnWS1VUTdyM3NaQ1BZZ3pIMkkzVW54WHhia0JwUjZyTE5vT0ZMWnhxOG5yUU9jd1BHT1M3T1dYYnJwbkFfTjVaWXJZaGFzU1hxTUtLbHdRUnJGWE1Rb25tTmdMNkp0MkVxRDdTZ0V4dE1XbmxmcDBRNnZPMjVZT2VNZVhJOHo5YWNtdU5FNzQ1TjJVT1JhRHRiREExWU14ZXRlMTRWdVpjQS1mU2NROUMxSkVQTk9SWklaUnEycEJ2a3N5UmpSXzdJdVhDc25Ld3lDUG1nanpRS3RXVzQ1bW4zdjA5d2Q1RjJNZkY4bVhsUlJ5WlpXd0NYeWVyZm9waEEwTzl3TElyc00zdU9haEZxN1VpUVFjNlFBQmlMMkFCeVNKTVhGMFRUbVllbUFDR0tOZ3h3dlc5NUc3ektsZ0FCVE5rLUhyeDRndWhWTGxaMWpGNndXTkdTOXhVYXRqN2xvYXpYNlZWUFNuTk5KSEVsN1NBY1R6bmtNT0IyMmJXeXBUU2JuMlAweXhQWFRUb2Y2NGJBOHhqVzQ5SHl5UkpVaFN3WEoxVjRPbDA2WGdVMk5YWVlxTW1yNFhOdVhZQldNRUcxVldpRFBhRHRHS1ptSXEtcldJOVhZcXo2SjVTWTlaWl9La3RmTjNldmpuQW5CRkFSeHNJX0MzbUtZazAycWFSaEtKT3Q3V3dqTG1sclN3QnhiMzhVcUNmaVotRUpURlBRV05UU1ZZaXNpWGdiVFlvd191dk8wNW1LZFBCWGo4ZDlvU3Fma2M5Tl93RDRTcEN0ckVQeXhaa01DLU1zeTB5dkZxUEhKMjViQVNWa3YtaFF1TDVwNXFGVm5ma1ctRkx3SDl3aW9sdkg3UEduVTV5REphenlDQkw0dVcyWlJmLXdzUnlVNXJITFFkM21tWERDb0JyNmxDV2lFUDJrelNGa2dmMVJVbjJ1ZjFIdTRkY29rbGtkV0dzUWJ0clE1T0dZTFk0MkFTclYwMEpIODlTd0hfWGNKZmxQZDZQb3JLcDQ1VnJGZXNkQV9yd1JZZXc1M3RrYzZOUm8ya3kxQ2p6SUVJMllfTkN2cHZUYkRLMlRLbV9MSlotODgzWmk3bzV0Qld6eWczamkwSGNQV3FjR1hDMEN6ZmFxbzdrVXhEYV9aWVBQcTVUMGV6RldFeEJZeVZ6blB2TF9vZXNIMkpURTFOMjNUeFlnbUl3QjFveWpxQU8wbkpERFFGOTdhNkNXNHoyMFpCN2V4WEFQN3ZXV0tUMEFjOWJSUlVoQ2d1NjEzWnlGMVJNNkZqdkpRbWlwWkF4aGFvMVZINWFreXE0ckxJUTE3N3ZCbm9wc2Z3MDZQSWZEbXowZGhjVVNnRDE3ak4wQk5CWDUySkd3ekxoanBGYVVjbkNzbGFYQjBLZ2ZPdVY0VGZ3bnh2MnZHd1hNcXdEYUdlNy0tUEpHZS1rQy1xRUVuSTd5TkRNdC1ac2VhaUE5bWNGdnFQaTR5RjBjbzhjQzNuYmtFb21JZ2FGS3prWG9GU1Z5bU5xd0F0dDdYTV8ySllydFBldDdxanU5S20xZ25ydDBnU19LN19DU1d1cy1CMkhRNGRFTk5HbnRKUjNVb001UzI4VWs4TGFJc1BSa1k0em41QjZGUnM1NjJQQzBOelEwZVhkX2hVRE5lbGlOOVpNc2ZuazF4RG9QV01jNy1JQ3FDWUp5N3RodDhNdGVnOTBGaU52MndFVjA1NFNBby16Vk9abkNCRExMRzFjZjdnZm1kWTFNY3d0N2lSOEhFeTVFY1MyUTBFWHVJWGl4S2FpZ1R5dmJSNTh1cWN3UEI4OURBeDZDLUhocklJUEFQRWhvOUV5Z2NHMExaemNwR1FDSk5yb0VQTk9UT2NKc0hZMV96OXEtQkc2eGdBaEZmUlZCRGJWUnMtS184aHIxMXNVOG8zWk5hRmpXa29jYkV1Zk15b0tWWk1tMjdMeHV1VHc1emtMVUdoZ2ZrRjlucmZoLUw4NE1uN3BUNFJORFNiVlBwdzNXWWNoeE8wS2xHVjNMdzNnTUdOLU1PMG9TUS0tbWE4OFhSNzFsdVR0cWxObkdJSmJORVFXNGlqRXRZcWVWVEMxX3Rza3JkaXJ1amZnZk5TLUdMeDdnaVU3ZnVOVWZ5RXVrSGppbDA2S2VvQTR1QWlGRktkcnFSTVpSeUNQOXB1YUFrN1dqMGQ0VUFDSWhfN2hiWk84bERBYlpyS3ZPYjN3a19QT0puZ05sVTJNYnY4ODRRVzZuQWQ1WlZQN05Za3JOc2tkT01HQ3dyMXJlTzZZMW1MNUEwY0V6UjA0Mjk0ejhwaTduMm1HbG0wamxsV2E3VUpBbzdzSEkzVjZ1UlRBakthQlZhYVl2QVEtRC1CU185ZWlDV3RPTms3LVNrZXdsQm9DTXU3dnhnb3lXUHU1UVhTeHNER1Y4dGpfXzFzMWhoZ3Q2Z3h2R3g3WWFlVXYwMmg1MnFMUTdkVVhLanc5M1FMZDF3dTVzQXVHY21vYXRyZ251VFFVR04zNGROMDhnei1QTW1IcHZGODFET25YQUNoOFIwRkdvVjZxbDQyR185UjFwNjNlQmt0SW0tQ2pJcXo1c1Z3U3pOY0p6c3lNcHU5b2E1U2VVbHNOb2o1OUhfVkdNcm9peGVGN0NsSDFQd0JKS3J4SzNKUmROcjRyd0ZzZV9SR3p4TlczU1FEaFV2dWRad0xmdmZZNjZrVzlzVWtyMkZKN1RCUVE5Sk1zcEl0dGJ4akR1SHUwNHktTDMxUGU5U1NxWkJ1Umw1Rk9va3BLaGIxZDdfbnRVdDIzckR2eEE4clQ5NDh0OWZNek9GTGNQM0xOLVIzVkhsa1NMdDdUN0RTckpBM3IyTTMza1ZQUVdGNld2MW9waUthN1dfNkQ5T2NweE4yZmx6ZUY3cFgtNmNFSHd4SmFWQnh6VWRtQmg1ejM4VS1Ia2xCTTNLZi1neVNyamFaN1c2aXVqbDE2czBlWnJxMFBDVHNBb2lYRHBIVm1tZDYzU2puRm5WT0VrYWY4V0R6NUVEZXlNMkxiOWNPTE9XUHd4MW5PM3BXNlFpWUN3WTJ5eFE3VjVNWVFoTFlnUDNxNmNoQ2d0SW10QVR0Q1RVYk1xUzAyOWZhSm5weHlJNERnRzltdkNRQjVHQ3NXV3k0dTFnelFaMGJrM2F2am1acDhUc2dMMVFES2ZOR3lrUDRPRVlkelFIc3B6ZnBjWVNER2ZCN0FJSWdkT201eFc2MWQ1SVhVOV9XYlF1YmszU3ZGRVlVNE5KRDVvaWVRY0RiaHQ1bVNUdXhiU1ktdUxHWXZfS3o0b1hNU2VDNno5MVNrVWlSZmhyOG1tTXBEdjNENHhBTzNnLXRoOTNURnBlSHJLY3V4X3RRU1lCUklzcjJZdGRXSHk5bG9aUXRXTjVXenZueDNpTWNlUHByMVB2bzhuWUxWUnZXSkdCVDczQzVWY2JUZEczUzdnVWpOTE55Q0xQaHc4RXp0aWhNZGNONlN5WkQtZDNocXdRZ2Y5UVZmOUN4Qi11ZjRuQ3J4V2RMZVM0akRvc3lxV0RiaXFuWE9JNnl1RHctQVNzZndWOHpGTXFFUUdrbmEyTVBCYVZqS3dtZlQ4MXNpR0pvWDBwSks0RE9HTno1MUVsNGJvRUVoaDhMdlYzODRRbmdXMkUwZ3VUUXl5LVJlVW9XVzhMZjhqTUplNDlwQXVBamwwczgwRC1FRjhLMnRoUVBNbzhJeC1sU29RQWtjTXU1bHJXQmJNaWpvRzNRWnhYX283a1JqN1RsSUszYXZqVkt4S05DTVZ4Q2Rjd3dkX2VXZnlZdzVhNlZ3VzNSZ3VrNmN2T1d4Tlg1LW5BZlg2NEVVRmxOV2JZaXhSUFg5bS03Vy1BVEtOWWMzZXAtS3JoLWRhUUdhY1g2aW9FQlFRUGtRUk5tc3NaR2ZhTm1uRWhieWpNb19TWHgtbk1sdXlPMmlqTDN0YVZiQlAxZS1hMlFZUW9Xb1dJRVFZVklmbXFvSjRwRjZJbWVmODUydFZsUUpTVEx5amxMdXBGOXJ6R3VKMVpSTmVYN3duelhPU21LNUFOTVF1aHRTVWZaRnJxbFhYVTZnSWp2amdfZEhubktVMGV2eDdBdUZUTHoyUl9BZExkaHg5WTZNM1BwTUxtMTJFYU9jOEVoLVlTd2pCbzctVFMtandjQkVNSHNFTUdJYjlrZjd3YVJSVGM1Z1pHczBNNHQ0ZThUdzhqUm9TYW1ZdWFzVDJpUXZnWTVUQlE3MGx5S2VkeTFZbFkyWlB4V09uQ1pSRTk2bUdVVzYxQWY1ZDBrcWdoSWtYWjRieXFWRmZ4WHlJbk0xNU5mSGJOV1RWTmNIaGlOSEZiekNBdzE3VEJtWjhNSzhMTG1DdGN2YThUTDdBVklvUktSa3luTEZjWW41SjM3cHBXN0gwNi10M2kzeUpoWHcxWVNkcExORVZ3NU1xekZwdlBIQ0czcVZvWVdyZDhkQzBIYnllN0Q3U1RGMFpuTnBBYWlPNmJKUTNDcEFIS3k1MWphOF9fOHBhMDhUMndBVV82YWQ0QjhDcm9nUjlNbU41V3J0Vkk2ZHBmeFFsNzlGcWNsZDhRXzJJamdNRTctMkM0c2xSSk5wZzhlejYtUjRTYzJuQjExZGFSeXplcVRHMDk2QWQ2YTdLamhTQVJsamZFdko2aW5KYmpJOW9GQ2c1b1lxc1RNaGEwZGlhX0lrZXB5Qlo0M0dFcmNvQnpUMXV5dkc3SkdnQXdRRy0zM1VrU1g3Ml9WcnVOWkp2dkUxYkROX1FmZW12X0ROZlVpOU9YOHJJcTRENGZCRnQ2NFZ3eEZWcTR3OWdpV0JBY3B5X2NPQXUzaDF2R3RTRU9MUzZmaXJHNnRlWnRaMjM4MzZMQmVBOGQ0ZWV1bE9NNWNyRWRYM3R1bFpyaV9weC1IMWdCMHN2Z21DUXhkUnhJdVBJaF8yZGRSUXdzcjhKa0NWSUpod1Rad0lzRm5XOEVsdVFlYW5oNXp6ZURLbzVpMFpLVXRRUkpKU2Zlalk5VThBd1puVFoyY1Z2eEw1T241VDBIZGlCZWY4VFNuMFBMRzB1RjZfZm9MVVItQTJJM0wxckR6UlAzRUlMaW5qOXh2OF9xVkVUSXRoTEhjWExaYUJSQXd6Wkx3bWZQeEFfVmJYMzZmR0hJekRxaEpRM1hVNk9BRFJicldPanI5Wks1ZDAxUjhXdThPaG1xbWh4R011WHhCdEV3bUNlblpBb1ZHc1RVQjlIWFhLUmFSajNGdzhVQjE1YUJhaDBqZzluaF9mS2NXT18wbGpVRzlHQl93Z1hpSUJoWmhYLTc1cTZGTG9paGw2TXFEZ0pCR2pXVVhNU0tRQTVCN1Z4M19sZm4xaWlXNklMRzItLWFMaWxvY1R1NVVvNFJza1RGWUJTWDloMUl4UXJBZ0xtaE12dXBYRUxqeExxb29Rc29yVXI5RmJrVjFsTWNMMUtnaUdHX1piV2N4bm9HaWN5R0VDREIzZzQ2cnQ3d29DcGQ4VGM5VldrMXlkY0l3bzJPb0Rqb1p6eWIxa2RtQW1MMkJjekY5Ulg4RTJlVlhYMlN6dDJjOFllTW5EVGU4OWR0Q1hvMkNOUDhDM0tiZGtwcFJDMEF4eTFEUVhmUUZSSmdzaENnd0x5a21IMV9ZN1REa1NUWkJ4RThIdGt1OUMxTVlkODdLSU5SNF9OdzYta3ZYTERSV3lXb2s4alpZYVBncGQzNGFoTk1NNWVheDlpTDBMelhyLTFDWWhQczVnRUpzd0ZSMDUzOENackk2MS10djRMcEJHLVowQ0h5Mk1MQUJ3NGFYc1VveW91c2Yyb09hVklWV2w2bFZuQWtMSENwRzhfQlh6eDNva194YTlyZ1hXR3ZVeGhYYzJfQUlFVi1RLUduNUhFaC1VUXJ2b1dnT3ZaQ1FIcHJLSVJHaWpmTERtSTNEa0gxYzhIWHNpVkFHZ2NFSTBjUkRUUkF4d3pucV8yck1QS1BxaDktUHZteHU5VXhVdmZ5QS1nVURkRTJmWDl1TGVzWlo1N3UtUDJ0OUl4TzhGMnU1Q2ZrUFNrWFRUcmpTai1xRDZwNFNKdUlkNVltNjNWRXBYZmVHRnBfOUJndm5mX1ZtUDFJMGNJTUJvRk1yVTRsVlBfeW9jMGt6YWF5cE1ldEVYRnYwdVVyTllJSmNDNVlwbU1LaExLN2IxZm5FMkFpaEo1bzk0TGowLXloQ1FJcnBUbUdzTUZ6TlZVYnZIVFJlVDFZZXBiUDZWYm1hQkxsOXlNNTNHczB0SVB1Q2dncVdUUTduSVh1NU5oVU84NFhvbXo5YXRiTnlOYkkzVFpOa2hWODdXS3NJZ0RScWtRa0Jqajg5VGM5VVgtOVR5RHREbDI3Zk9nRkZ4djhZVTc2Rl9HSUZlOVlkUkRJVWQ3U2o0S0poUkhqYjZ0WElpN3M2NTl5UWg5T0ZINURndE5uZl9aSWktejNEcmJFRHItRWFETUoxT1B1Z1VpUDhoTmYxNzVqSVpNaWVCT1ZDU3hUczlRb3BxQ1ZjOTRNY2ROSHNZT2tCVHROZjVvdldwazAwbTBLUEQ4dkJSbFpLU0Z1Tl8zc1NMREhhck5TcERibHktdTFoQklLRk5yNlNvc0xlZm5vdUctbnZGalVGZjQzdklFUWM0MUVLaEE0N0Q1YllTaS1IWkRpWE56a0Fza3czZERSakN6RVBIMnd1bVRBZDFxdHB4amU0T0tpNnVBZHl1WTZWSlc2dzBYYU5TWlZ3VXBsOHlZdGRWR01uS2REUHpORzhDNGJUUGNjVkZrOTZZWWl6OEtXMlRyUTJodUhTUGllZ3BXY0t2blFnTjhOU2RtbjVKZVRCWk9OeE5rdzBURjNxaFpsYTdaWjR5Qm1DWmJvSXY2d3p0QVd2dFo0ZzNyM0tJQmU1dUNwX1ZuZmZfRVFNM3VEUHdfQWNoVnVpT202U3lkdDhHcXo0aEU2RDdTdkh3NWdna196Q09YUjJzckU0YTBGajNCNFNvQnVKWThhRUVHamI2MkRqZmxBQnk5QjlLcHdxd3NCRlJIdzk0R0t0RHlHYjhHMU5iamtEQ1FnS21MZkxfVFVOdWZFNDNjekpvdm9QVUZ5Qk5mNTc1b2F4OWRtcmpVVS1xUTZ1WGdUUjNpQ1pxWDludnNqT0QzRGVkY2QzaEQ3VlphdFdnMURnek8wQ0dQY28zNGZVazF3WmtQYXZMWnB4WmZEUkFrT3l3eXJ3RFdzVkw0VWN4YnQ5Y1dyemZyNmNBRVNabmtFV1hpZU0yX3J0aHozRUNpMEVtNl9fRTg4ZTZCY0FQb0lyOV9xWjhFOVhHNmtNeFFwbU91U2VQSnFTVFpHS0EyT0JNQzc3eWcwVGRtVmJjN2pDVzZKS1duT2F2SzNmRUpHWVl0ZmZTV0ZjTHhXUnJLbnhzQ1pCNnhNaTQzc0lCNjl0YW9nRUVjUGF3eUw1NWRONURtX3Q2dHVBTGhmeWdCTTBOZTJyaUdrck9WSzc3YVdRc0lmblFCTWMwQzlKbXVBRU5IVjV0ZjNURlVOZ21TZEFQNWNVMFJSSWRLOW1pYU5nclNIeHhTTVAxZGY1X0dLckxOQ2tVWGFxZ3hTd1owNllqVVpzYWphS0FDTVNEYXBERk9RMXZ4X05CbjBrVngxMVdGRjhYcE9KeFhESmczdGJGek9pZFg1ckVtaWlXNnIxNjYtX1FNVWNYeU9zemFza1dMWVhRNTh3bm9LVXRTNkxDSXp4S003ZDVxdVR0ak9qLVA4dzl0U2RJR3hyTTVrdDhiNDA1TnRHRjljM2p3WnZGZVZVZklhSktxNkJLdUpuazhxOUg2X2NBQ2VFVldQUFhMT0U2N3FETklwZWZPdUVpMmkwN2x4MUlkc0dIbUF4amRIa2oxdGo4aHN5cDMwZHcwa2pWTUhEc2VKR0ZUME15VFNSSjhaMFk3RFRqOGVLT0NCLVNKcjd1aFcxV3JZUmlhbklXcndtRy1hcVh4X3UyT2ZLUzRvS013bVMyTnd2RjlOOFotWmZZU3pZQ1JFVnBLTTJTR285R1hIQ3llXzhhWVBCNmJUYjd3ekZqWFBwdFltQ1BfTjB3c2JaaVdoT19SQV9VQ3ZKU1FhR1JBQkw0bVlmcU5sT1Zrd3JOaklnM0VxZ3JrQUs3MGdIdzV3MWtweFFlWW11SzZRbVdGLURCbDF2REQ4OWhsQ2FoR0VibzFkNzNySW1FejVQdTJFMGNnbXAwelR2Nk84TUNlbkZTWkFMLUNqY1d0eWd0akswM1FTeUxoRXlvSVh0WlpTYkw3NC1DR2xJcWFlMzRrZmJNUzhuaFJYdUFPbWg0YkJoMUhMZlZ3QVFOY09ubjVGV1A0ejFQdlNhc2hTRWMzdlFrTmk4NW1MaFdZVnJjajE2bUhSTnh4U3k1NVY2SUE4UFBiRXF6RWsxVk5xb1dBYjBvdTJBU2lSNDV6Mmc5YXRkU2Y3V2JqMTFzYlpibTV0a292VDlJcVkteXB3Y0hNRXBfazA1ZlNYelFmaENDMU52bWxUWGcxREM4WXNicnlmeGc2Tk9MYlQ5Y1V6QUhfVXBwRHp4Z3ZHcVJvTUprb0t0ZmVDNU9pWmhsZ3NKS2J1UzJvYlp5d1RQa0lWcnBsNkdqUEFVN09lMm5ZS21TZVROcURfUkswSURIZTdqUmdVRDVJMGZ2S3F3aWdQNThOUWV4dDMzVk4tdXVDQ3dWX29iWXVMbVVOUTJTWjVrNVdKOFlWUVJLY1k2RkVtazJ1czI0RktLYjAwcGNveWdFR2ExWlVSaGtmODdHUENxVnlxQXdCbUlaVURaYW5RdHZCY0w0UEhNbVVjU2t2MF9wZF9Na3dRcy03ZHcxRDdYSG9LRkJRX1ZGNHNBaGF2WExVb2h3ZFRDWl80dm9MQVllTVZLaTRWaXJuRFJ5WWdrcmVGSEl6QVFqbU1vOWZpZWZIWURqeDNzMTVERTZSTlY5cFhvTE03MFdlcFRFRFNEWDdFNUpkOTYxYmFzUlpUSHFPSFpLZDliYjlLVF80RktoWi0yQVM4X0YyeHBnN0tRdGViUDZBLWhGQW5WUnZCWVNIRlJXbk9mSDZjMDZLQk1XcUFGNDdzYTZCRlEyM0w3Umlvbk03ejd1WUltTHAyMG8xd2tRU25zWTd1eWZjLVFoNmphbXdCSUVsVHZEWmtPcFBnVFhtWWpKV3JLb2d2cjVOVlVmU3JVdTM3MUVibnRLa0QwcHA0N3prMjBWaUV1VS04RlE0eXk5Z0otNkVIV1h3bXZMNzhRUWdZMTFLaXdqUlJRUGpKZHJjYksxVnM2WmJBekJjU0l0V21Vc1pSTG9Gc1ZTQTZHZ3VXbUdzZmhBQk1wMWxTOVItZW05d055RFdWUVdFLXBtMnE4cDBaaUF1b3NiYV9lYVVUU2JVMGxrWFZFUF8xWTF3dU52blE4UFRKRXVfcHFWeWJFQW5lM0s2ZmdoczcySllOUERaRVg1bng5TFFwLXkwdm9vVXBuS2l2bVFIUFdNSkstY0h6WXRHeFVOaDdwcm5IVlpHM3NsWXc4dlFOcUNTLUltUGZxamNQMUFvZTdIOG04c2pVVjAteEhSRDBjV2FBUzZGenN0WmdhcEh5Yi1LcHh2ZDZ6VzYyaFhJOV85VGdsbWJDUVRES1ZrRFBJc3lDVVMzMjNJQ01xd1NQVFFQRm9rRF95SjNIVnJmM3RTLWY1cGdheWJNTGF3dHFDSTNHZ2pzbWItTFNWTFFOTjA4X0o3WmRQd0pUS3JXbksySHY1LXA4eEMyLU5EX0VIUl9kSDNSY0oycGtwcWt0ZTZxQmVYb0I3SDhHZmJJM0ozQU9FR0w5eU91OTVoZE5GVEdvcmZ5bFVvdWhoVWhMSU5ZVm5NQkhCcWVySnpUZFQtQkVldWJobGNLZ0U5YVVscUllVjhHR1hILXBXaXBlZmFDVFd4Z05oOWNhdVJ0SkVtcXhETGhKMWU5dWZodTlERndwUkpwVG9LeWcwb3BHLXBrcjVicnZXNXI3RWNWMno4VDR4RnljYWZjZC1XTUJFV19mbE1pdEpKa19IclhCLW5OblVab1FEMjNQM2VSLXhoX24yVVYzMnphLTF1b3FaUmNRMl90NEl3eVlJT1FqdVpSQUZ0bFA4R2VmajFhOEdnZjRscFpZZl9oUnpBcWZ1OEZnNGNYcXh2YVVldnhOb2lydjlScVluT1dJcGlnOW1ORVJZZjBrZXExT05OSjNJQlBFUVpVSG9VM0JqcnBRVVdEQ3V6MlBlcGFqQm1MWk96Z2pWZ0VLM1BGM0gwVERXaW1mc0RWS3ppVXdJUTFOUzJpU1BINkd2YVZ4cEYzWTlXM2h2NzJOSVZRT1h1ZkRISDM5Y2ZKYVdxcFByWDVQOTA1YmFXREFKRm9JWjM0dWItUXVuNHBoSlBhU2FmV1haYzBvSlo0S2FMc2dlVEktZTBpeVc4YVhCTXlyX213Zi1FRE1XRnE1c1lJR1VUYXlCeEl4Q2FHbmtOdk1jNGpGclNRV2Noc3RYeDdabVlVVGlQVXhMYjU5Z2lNN2VZc3NZRzVnRG9ETVVDWkZMR3dyaVczNzlvSGlyR3g2S2ZzVGY5QXo0ZThnRDVXbjBncjVHOHFYcmZfTjFIZlBXSEYyVC11eHUtazZEY1pEX3RrZVhxcjV4am42X3NWaklCcG5CSVdmTExOcVNmTi1ZUUp1ODJCZDRIOG9fMDBPSlF0aWQta2tsb2RBY2JWbEx0Q1R1UnpiYnYwdldqY3BlZTB0SHRIM2h4ZWQweDVib1JGckt0a3h6U2h6UnpGYUptUG94YTZtZ0xkb0ZHSVRxUk5Zb2xVZmxpYkxzcW81UFZSalA2UHNEaUJTSmc2ZXdYbnV4cGl0bnh4ZGZYUHVpREN5TEZjMHp0dlpsQTNqelRucXpLSkV1WWNhV0VDcUxfRjFFT0ZibXZMUkcwb0RuVlYxUHlBbzEzczU3UlRWcVE0MGFFTzlMazl6UTZ6QXpkNFlHSEdxeTYzbk9NZnlCdHBkYkVIbTJybTdwX3VCVW43RVpFd1Y4N3JPRXU4NkNkemxkUkUtaGhNX2hiakpyZGxvcDJWRG9Sc2J5cDNmRUZYdHNuNXZMYjhfcHNkaW9UVHdLN21CN1NuVjFuZ2YzNUs4YTNaeUNrWm5SUTVmMEVCNlE4WlkyNktzaXBHLUZBMHd2OXlfNTlDRWxWZkhHbTBlQWhwWEZwdURjTzFwWlVCS1ZzRDhyNGY4VS03b2FBTDNIb0hZWkdhN3U5aFdtTmE4TERWbHhtSjFkSHJ4Mkxheld6V0o4V2cxOWZmMnZBY0trOTBfUUFoUlJxZnl2VlpudlhnWVVKdW9DcWhNT2tZVWRCNFBXbE1xaG5iQ1lqS3p1Rmx0VmwybWwxLVdwMHlVTC1CRHNHcFBrUl9HRFNCYmYzbTJ0LXJjS2ZFNEpaOUw0TjZMbVRDclNqTGEwQjY2bHB0eUFnRFlndzhiczNBWkFFQVFJNjc2MV9wQVlzRDZUaERRNnRiUG9odkR3WFVyZ1p1ZXBadk55ek1XajZQZWNXb3VvMHhvT3AzT29vdlJKbXdFMFVBeUhndFFabm1tX2lXUGpwdnpzOXJVbEg1WnU1alRabVM5dXZ4QTR6UEZxVzBYUFRNYUxONjdqaEJMTzBCcFFiQ3l5M3V5TlU2YzRmVXhfM3FwdVVIYUJnazRJbzEybjNJenZGMmNCSnJJVllyQ21ScHk0SEFLdTdsdEdGdFd0N3Z0cEE3ZW5DSmRfczNMNlpwdV9EQjlvRmZRVWc5RUlqNE0wdzNBNEZ5cHg5MWRkYWFNTFNnV0R6ZG1tcVNNaXE1WXh3QTZwaVFIQ0x4RVFteFVfTGZsT2RleUJON0dWU3hDSFpRNWRORm1yWmFPeXpIMVJCRlNPT1cwVzZvMGthNE1lQ2RDUUZPLXpjcXNnRWpWRWpjQVp5NDJ1Wkc1LWkwWUxFb29XekRYVE9sZFZ2a05yX2xDT2pRam01a1ZRMWNJVVB5WWtobzhoeXdGQTRlbEFGWmhyZUtKTElOeV9YX0ktWlVteFlXNGZYNWRINVZPWDJVY3dOeGZ4Tkk1TzdmeGNFZ3FZWmZkVWVfcjRETGZ3YXdaekpxVDlCNFlrOGNQX2o3THhFcjUyQkdyS3RRYkN4dXFVb0RRTlREcElCdHY5dFpRbHpmRVNMN21LZVExY0RySWRRM1FsS2Q3TXJmcHpzQkE4WTFYNmNGZXBnNEE0UThmYVhmX1JSUEM1MjJ3ZmxacVlqVXpvaTlUT2RBZ2xIWUxKbjBoNXAwQ3YzaXJ6UkhJd0lPamFnSFFISzg4U1c4cmVaSTdnTTJBSjRkbVk5STBfazdpc3JuM2ZCS1FqbW5SM0pVaHVPeElIR1hiWUJ1MmR1bHdVNkgwT05iMlVrUDdwZFh5akFPa2hOT2hPeTRLOXBxMEJFb2VWZDdsaHhNLVZoU0VTNzFQMndXbDBGOEFzMWNXOVpnNkNhMTY5dWR0OUpseG1rc3JkXy0yenh5V25Td1lERnFLODFjenozX19wWWxsUWdmbkIzNFRSZmxER1BQcXQyNWtoMVJ3eTBYRW9RcVhoNmNuMllWYU0tQzRfX3B1VGJXRUdqUFl1dmc1OHNTbkU3emplbVQ1STFBWHNhZjNKLXUxcl96U3RPMW9fRkxneUNqdkJXVUlEMkM1SV9OY0U1anBkTWJEbGJTVWh3elVYTGJraTN5MXhMMnJJbURMenNvenBmVk5ZNHZBSjhQSl82RDZxOUdQUlE4VnBpOG0xVlk5WjVqS3VZMnhZbTdROHlJSUxlaGR1Z2pSZGplM1pKc2RTS2t0dzdReEVBZzhqdGpXRnllYnVsV21TdEg4N0dDUkppVGljZnBuTXRkLXRzQldIdGF3ellnTzYxM05QakpCYW9NMmJ4WG1TNG5ERVRmOGJ0QS04VGxwUUZUU3dlb29sSXJKYUFTemkxOG5wckZ0WDN0dVBfNE5oemlKQ1M2enJ1cU1kWmtsbWhGaVhRbmdCbFNGWEs0OUkxbjFvSGs3cWZZWFZ0cE5SbGxoeTFKN1cxVng4Sk5vMzk2SmtRMGVwOHp6SFljTmhQbWQ4UmphVGVYOE5hQTdoZzhvaVREUzI2UFpzZXJpWXdhWE9zdndwNUlhSlpJeFAxWXlndVBtYTFuMGdYMGtaT3hpLXRHNjlNbEkyeVd0N2JSNlQ5TFVPTjhVYmhUaFJEVFl4YkhEZUVZb2o2d2wwbWFXdVJPUHR1ZExRODZBdzBBYWdHMjdxZENRR2F1VFJ3c2pQbUtoXzVYNFF3MExad0VLcjhWWUpaRlY4MnI4SlNqUjV1ejJMM3dRSF83QmI2VmR0WFZYZ2NRQ19oeHFJYXZOZTJxVGZBNmp2cGhFSXp1WWpBM3Q5Y3lxOHB6UHN5TGtUT2ZjSFE0Wl93WldESmFqWWJqS0pYTElaYXBUaEx5VHdzWGlNTmk2RWdmU0VTSXFlTGpvTDV3ZnVHbkRIdkF6UGEyR1djVGdWR3A4RWc0elRZcDNQOHYySktTbHBwX085c2ZZcXF5X3ZXYURGLVhPcWhtUVNPOGJHNE9HbEpjN3dfNTVud0ozMnltN1hlMmk1aGdhX0tTRXluVWxpSXJMemlnZXdxRnlRMlhtY0RRb09FYUFuRzA3UUhWQ05zdmtVZWEwN2JLVzRXR2s0LVoxRm1OZW4yN1RXa3ZkT1Q5X1JaUkZya1hBSXpCcDN0UUtYX0pNVlpZaU9ubFZ4UFRJQlVPWnRKRjF5dGpzNk5mbEotb3Q4X1o2eHU5amIwQ0xFanFFd2ExdGhHUmJ6ZTkwTVExVjBtSlVTV1VvT1BtalpEUU9Zd1RiT0JFODNOdlRrRmxoVFp2Z3FUeERQdkRVNTl1elk3TTlTTFFFNVhOQ1IyamJ0Nng4RDBXR0lOcjYxd0IydDVSRlluUmp3cVJVZnl0Q2wtUXdpUEdKZDUtblRqRm1Kd0I3OW9Hc1p1bmZRUVN5TnhqeXlTR0VhQWdOT3BZTkQ4MWwzeU5aMkVXSHAyUWZsMzZ6aE9ES3pmb29WTFZCRDdDRFBvMVFud1ZsMk05aUQtYlZFc0U0QWxVVHB5MUY0aGt1UG5xX01ja0RyZjBWUEFYOWg1QVhnWEd6dExJeEY3a3lxWVU4Rmx2UldScDJOUDlBZXpMMHU3d1EtbVlzTHpMSkktOFFCZF8wMjRyeUxtUDdNYndYUktrNGFRNmxkQk40RGNVN2NXaHVDdzRHakRNdWJtNDFzUV96aDVqQkFYcDVxbTNwQ2R6LU5XenZGSTBUQ3A0aVBPS1RBNDVVZVdXeFZEUzY5eTcxNi02MlU4YlRaUzFBbDI1V2lRWDQxaWNmU2J2Y0sxN21IcC1TeW1iRkFhQ3ZLRnNiaEhIM3ZiandrTmtpOVl6c09INm40SEVycEJLSXdacnBDZVJENjhVOGljb0VwVnVNYXdrYktxMENLUXNJRHBKM0pFMDhLR0lhM3RzUmJBbXVkVjFDRjk0VVBmN05odHBfZnc5ZF8tV2hBVnJtZW5jYnB6VVNhYzNaWUc5eF9rUE9IYkQ3eVhYd3l3Q29PNDFVZkFXdFhMbHhKeGxpZlliVWhZaERBQjkzZGZ5VVZlb2tsb2VpUFptLVpnYjh6R1ZhTTgtNlQ0MFFzRFRUNGtlaVUxdVFEMjNhd1VjTlJFTzJURFpaQzB5ZlZsay1uaVlRbmRVQ1RFLXRKc0Y0WWxfcmlLd2dzWkFZXzZGMm5mcWFZcDdUNm1YaVVacktRWGJfRjQzTlJzcWtRUUNLYnZpdWQtaWF3MlpfLURCYnNwVmVNa2hFNjVQWUc1bFRMbnpOSDdzU2tJU2Z6MDZTNENhbzI4UVNQdDJ2eEMyUWotZGd1ZHlSekpPM00wV1BYNERBbWZpVHY5X3pfc2FNV0VTTjRaTFpSS2lCQ242SlBOS2xveko2TFRlbkVKaFA3SzZmXzVsSk0yb0k0NXQyaGRjNVdGVHBiZ1NIb2hDaGJXSl9nclZFUWZWRGp6Q0xBeEhHcXE0RGVfU1pUQVV6bUtKZTFub0ZaZW55RlVtR0I0ZWNnenZzeTBuOE1jUDgtTUNxTC1xbThRdnBtMEtxODhMbi0xaDhvUC12d0Y0cXd5T00xb3lXaDBTNXV6NkpoU3dLWUlnbkNJaFpPSURmWnNxc1EzTDhmX25NY2ZQUUZIcm12Uk9nejduLURJdzBOU3UyRFVqcThyNkJmU2E1anRWVGhISnVfdVZqdjdtQk01dHFnaUpNczhPVzZmM0stOVd1ZFRQVXhMaHFlZVNRLmpvbmJQWjlTVkV4cFZUZVdkRFk0NlE"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['43404']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '43348'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/restore?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/restore?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/4ded11909844446da851716966700e94","kid":"https://vaultname.vault.azure.net/keys/cert96da121a/4ded11909844446da851716966700e94","sid":"https://vaultname.vault.azure.net/secrets/cert96da121a/4ded11909844446da851716966700e94","x5t":"lWUrAzM39YfWwwowyQ4opMUMjEs","cer":"MIIDaDCCAlCgAwIBAgIQPwNCMBbYTBily42E/YcDFTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDc0NloXDTIwMTIwNjIzNTc0NlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJOkvvshdrFa/DTXO4mSx8xmdr4DN9Mv4MpDC9riXobtKn2Lhg4rqrSZRFtupgnyl13AQgm3wyIvRzzjPZs5jvkgfQUxXotHXb7V/arMyCxmSX5KBE2xpGn09tMaFJEWieXMCW2XtGaCbT4C0g0LKdOBIj9poEC7ndpp3YOzlFwdCsy+8QZiHnwmmY86yx8upNeXstgckfTgvASNAoMsjTOk9wi9tlSG/LMr74GLf3k6MHXlEJyjRtr6fkK8Hhn4KGwI6ZwA6Zfqyj6ABBjHRgKQGETo8+yOU6wjElqJ/UJMa5LO6dDARDzxkf6OuGfu/cklyhTNX6gsU+yUHLErgZ0CAwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLgYDVR0RBCcwJaAjBgorBgEEAYI3FAIDoBUME2pvaG4uZG9lQGRvbWFpbi5jb20wHwYDVR0jBBgwFoAUcbh0fxdzGaaT1KU94N7TBkzhqiMwHQYDVR0OBBYEFHG4dH8Xcxmmk9SlPeDe0wZM4aojMA0GCSqGSIb3DQEBCwUAA4IBAQBwFE6XqtyC++LJBcrgE9BGOSwsTX9NizdRBgIKqJUBqUr6ad3JJUHppZ6QgXvQPjOQ5c989oWJCRJvfAogGFKSOwZgmJnZI+eCH9NkxZC6HziHIwuLozUWpSbfrHPN3wy3OBjjaaNux0TTVw++KT4++uFrmAa1slHhSVqg9u2N7ZmbmO95w51opjUn/9+qNwpLh9E2mRvke/cvDGzK0C9UabtjmBvmP2B+9AkPy1aO7WmGJ0iRbWxbW+hFPMKYj7I1NHkt9JNa69iJpDtVJdNYyFinaZCN4f+DOV6nyWP0EE32SXEDncZDZf/U2/X69cq6Lugaufos8A+ZjLFcUQt1","attributes":{"enabled":true,"nbf":1575676066,"exp":1607299066,"created":1575676666,"updated":1575676666,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676643,"updated":1575676643}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/7240242757e24b9cae1b7fc62f6865ca","kid":"https://vaultname.vault.azure.net/keys/cert96da121a/7240242757e24b9cae1b7fc62f6865ca","sid":"https://vaultname.vault.azure.net/secrets/cert96da121a/7240242757e24b9cae1b7fc62f6865ca","x5t":"hqL0zmKvvlru6i9lyfwY4XjDKXU","cer":"MIIDaDCCAlCgAwIBAgIQfLUuxjQ/TjGm+w0TSUCJwzANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJVtZ6aI18XvPHu3luahoTjw9GL+bMWI9m8pJaWRH41J4wJ6c9sf+DHZlWO6qvZMok5OR2XEl1dX662/gjE7kPgTMjfXVcQFbxae3pUji9wFxXShOJ4O1ZlsqARj40obXXjTFi/ntAilV5oqx2EtKsC6YSV2ot8LDgfSZXDjiCN24BS047Xtcm3GjZyWMK9+qg81tDyci/O59DZy3KTI88WsnUUXvfrcav8tiiOm4+AU8YrDV8IaSE6bMvuB5SBiFQEy0LobEaE+ctIISA/pSF29KdbiwogNeX+qGMFibh0umDzFWFZCeLMEr0BDwGgla+/zVPmI+lBo3pCcIVHyrt0CAwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLgYDVR0RBCcwJaAjBgorBgEEAYI3FAIDoBUME2pvaG4uZG9lQGRvbWFpbi5jb20wHwYDVR0jBBgwFoAUlrV9YQtHg3HLF1ykSHFcnmzmlckwHQYDVR0OBBYEFJa1fWELR4NxyxdcpEhxXJ5s5pXJMA0GCSqGSIb3DQEBCwUAA4IBAQANF32y8zIrLKNOlKHZEjd0JZspFkKLCNT/Ax6gM1duDRuwu2fiEh6Rc7ESZqV9GXrjEE1MJ/amTHi/RwZUNEfcWKqDGk0HlZuh/rzXkB3VlWcJzuqdG/LdXx7svO5/h+wJ5sP89dAKtJPfCW6nEg8Ai9xNh59/wQBMQCSeyE96ikj4xwMUWihFyIzoFk9ogjX+7oCRtzeon0bM7a34zRH7Au49OGDCwlFRFcZnjixYKvN58ZMgKMvg0hpUF+hl/IsnWh7c5JFAoKHuXcGTRxD+WDhxIgbqeLNqNyDa+T5qoh10IejcnrGFGq+/puevvyC66jZ2LtH9+OiF/SN5cWNa","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert96da121a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['2306']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2306'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_crud_contacts.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_crud_contacts.yaml
    index 694d46cf56bf..6f6f3452dc53 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_crud_contacts.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_crud_contacts.yaml
    @@ -2,149 +2,260 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"contacts": [{"email": "admin@contoso.com", "name": "John Doe", "phone":
           "1111111111"}, {"email": "admin2@contoso.com", "name": "John Doe2", "phone":
           "2222222222"}]}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['166']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '166'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    -        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    +        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    -        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    +        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    -        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    +        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"ContactsNotFound","message":"Contacts not found"}}'}
    +    body:
    +      string: '{"error":{"code":"ContactsNotFound","message":"Contacts not found"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['68']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '68'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_crud_issuer.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_crud_issuer.yaml
    index 11be1b38924a..62fed94e7139 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_crud_issuer.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_crud_issuer.yaml
    @@ -2,235 +2,413 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"provider": "Test", "credentials": {"account_id": "keyvaultuser"}, "org_details":
           {"admin_details": [{"first_name": "John", "last_name": "Doe", "email": "admin@microsoft.com",
           "phone": "4255555555"}]}, "attributes": {"enabled": true}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['235']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '235'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676644,"updated":1575676644}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['352']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453253,"updated":1583453253}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '352'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676644,"updated":1575676644}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['352']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453253,"updated":1583453253}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '352'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"provider": "Test", "credentials": {"account_id": "keyvaultuser2"}, "org_details":
           {"admin_details": [{"first_name": "John", "last_name": "Doe", "email": "admin@microsoft.com",
           "phone": "4255555555"}]}, "attributes": {"enabled": true}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['236']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '236'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer2?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test","credentials":{"account_id":"keyvaultuser2"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676644,"updated":1575676644}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['354']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test","credentials":{"account_id":"keyvaultuser2"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453253,"updated":1583453253}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '354'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/issuers?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test"},{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test"}],"nextLink":null}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['236']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test"},{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test"}],"nextLink":null}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '236'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"org_details": {"admin_details": [{"first_name": "Jane", "last_name":
           "Doe", "email": "admin@microsoft.com", "phone": "4255555555"}]}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['135']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '135'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"Jane","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676644,"updated":1575676644}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['352']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"Jane","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453253,"updated":1583453254}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '352'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"Jane","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676644,"updated":1575676644}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['352']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"Jane","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453253,"updated":1583453254}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '352'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateIssuerNotFound","message":"Issuer
    -        not found"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['75']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"CertificateIssuerNotFound","message":"Issuer not
    +        found"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '75'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_crud_operations.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_crud_operations.yaml
    index 480785bdd6a2..c6fd82eaab7f 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_crud_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_crud_operations.yaml
    @@ -2,380 +2,1052 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:10:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"policy": {"x509_props": {"subject": "CN=DefaultPolicy", "sans": {}},
           "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['99']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '99'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKv4Q+wwY8+RIpUbl95MXlQ7jlU75zIbw6MiPLxlmJQ5HTiB7062T8s7CUoOiFvUCaakbuCjRZE+5P+oY5VuVNoX7VpmTp/LlaEai8KTTonbQULpmXqAhGiz1xWQofazTWv7gawlkSJ0SkN60k28c2m2UwuD/gzBr0ZxNQoTSrtXaMKn7q8o0c13HjqrOK+nlPoBEuUwSkW6fTdxXv2mOXL41b7lptE/2c0Ac/nUQPes/b7MPxVKVbRVl44A13+gDzTpAnEOdXcqliQYXroKV8gGyb7T7FRtvqAz6nmrMB4sEmE9CV0lAqtqyb1ViZV6IdAStxdGQ2G3K7HsGGA1HmMCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAh4lKWBNoAU1Cb0YqyLJmxs6m/m2M6+2Es9aI1FfjpXUTFz55fHRsObTymihR37/FRWsz+V3qLPEI951aLvhApsoReXGNR6zgv7nYkzPwVTJ7rwdaoLvS4GVANl1wmkLoFfvduTq1ZaTwV7K6q0HuFr9K12S9L/K8Vs3/MtAVy2tSVLB/mtnOLUgzmDLClp8s1/vlSxkUPTOQl+8oo1mty0pe8WxHFdDO/QEAeZ65CUTQHZxBSzw0RuGMjaewvf9QNixSXtFryUaOS1NvxlSomsqeVF816TDxbpD0YhvhPeenqnqG0bBo+MguE57Op/FhNPglLf6U9k+1MyRfvwwr1","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJilYWL2MFQuDbI1BXIiTqcaq3tNfUqxdMI/5Jc5PfDByI061cQXjO7GLgnA8PPzc09PzAKah6/dF0GUNBmSdR8aJql8lv7J4lF9P1mBVmFMtwlpbNt/jLEeyaLKW1XEHg9Rzz7d8Tbf6fuDvubTyqev9+C97mRw0biMW7dp8jepJo8vdKJBbZIVDk3MF5/TZkMN8bKIM7g0XdXCnQl2o0Za6cdQaVjAAoUmtRbs1onOrobACtNzdva9e6h7RqxPz9z5odz0fj/XryJwyhdnVI1lp5a/cK97IGzJ6rg3lC/IjTms0kxadG9YHR9SvCnOpJWmmturlyPjqU2b8tmDMrcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBeSkE6e5kt34shiEaM9sHAWLS0wCIrLdxllTHplzFpt1eQYY6OIwRhXdavm/9tPVNcZcDuyT7g2/ZOBGpSWE5s1u2l3rY/yVEfybt/d8kRHBdHEvVVR+7oBNgTeRQEvHBt5ZZfFNgsNnIvJBgMaPH6DIfIsVDlFqQFTImU62Ud6NPJjl2GruQNv5zH4VVSvafP+Odj6IfqJZ3PYHp/TmLL4TND35Y8x+NnZ1Q229CRKcYRY6ea0c+Aybo9S8E9lbWwYXCeCa51NrrTaExKmBKAv6pkf/kq2CmJ+tky5WhOQqj6AAamzWGAhsy969uzyPkHOd9rZmb0HYcbpispKdO4","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"2b5550e97b194d6686a794559dc1d281"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1302']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:10:44 GMT']
    -      expires: ['-1']
    -      location: ['https://vaultname.vault.azure.net/certificates/certaa0f1292/pending?api-version=7.0&request_id=2b5550e97b194d6686a794559dc1d281']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 202, message: Accepted}
    +        time based on the issuer provider. Please check again later.","request_id":"3e749b726eb149d99c5b65e77ebbeced"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1302'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://vaultname.vault.azure.net/certificates/certaa0f1292/pending?api-version=7.1-preview&request_id=3e749b726eb149d99c5b65e77ebbeced
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKv4Q+wwY8+RIpUbl95MXlQ7jlU75zIbw6MiPLxlmJQ5HTiB7062T8s7CUoOiFvUCaakbuCjRZE+5P+oY5VuVNoX7VpmTp/LlaEai8KTTonbQULpmXqAhGiz1xWQofazTWv7gawlkSJ0SkN60k28c2m2UwuD/gzBr0ZxNQoTSrtXaMKn7q8o0c13HjqrOK+nlPoBEuUwSkW6fTdxXv2mOXL41b7lptE/2c0Ac/nUQPes/b7MPxVKVbRVl44A13+gDzTpAnEOdXcqliQYXroKV8gGyb7T7FRtvqAz6nmrMB4sEmE9CV0lAqtqyb1ViZV6IdAStxdGQ2G3K7HsGGA1HmMCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAh4lKWBNoAU1Cb0YqyLJmxs6m/m2M6+2Es9aI1FfjpXUTFz55fHRsObTymihR37/FRWsz+V3qLPEI951aLvhApsoReXGNR6zgv7nYkzPwVTJ7rwdaoLvS4GVANl1wmkLoFfvduTq1ZaTwV7K6q0HuFr9K12S9L/K8Vs3/MtAVy2tSVLB/mtnOLUgzmDLClp8s1/vlSxkUPTOQl+8oo1mty0pe8WxHFdDO/QEAeZ65CUTQHZxBSzw0RuGMjaewvf9QNixSXtFryUaOS1NvxlSomsqeVF816TDxbpD0YhvhPeenqnqG0bBo+MguE57Op/FhNPglLf6U9k+1MyRfvwwr1","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJilYWL2MFQuDbI1BXIiTqcaq3tNfUqxdMI/5Jc5PfDByI061cQXjO7GLgnA8PPzc09PzAKah6/dF0GUNBmSdR8aJql8lv7J4lF9P1mBVmFMtwlpbNt/jLEeyaLKW1XEHg9Rzz7d8Tbf6fuDvubTyqev9+C97mRw0biMW7dp8jepJo8vdKJBbZIVDk3MF5/TZkMN8bKIM7g0XdXCnQl2o0Za6cdQaVjAAoUmtRbs1onOrobACtNzdva9e6h7RqxPz9z5odz0fj/XryJwyhdnVI1lp5a/cK97IGzJ6rg3lC/IjTms0kxadG9YHR9SvCnOpJWmmturlyPjqU2b8tmDMrcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBeSkE6e5kt34shiEaM9sHAWLS0wCIrLdxllTHplzFpt1eQYY6OIwRhXdavm/9tPVNcZcDuyT7g2/ZOBGpSWE5s1u2l3rY/yVEfybt/d8kRHBdHEvVVR+7oBNgTeRQEvHBt5ZZfFNgsNnIvJBgMaPH6DIfIsVDlFqQFTImU62Ud6NPJjl2GruQNv5zH4VVSvafP+Odj6IfqJZ3PYHp/TmLL4TND35Y8x+NnZ1Q229CRKcYRY6ea0c+Aybo9S8E9lbWwYXCeCa51NrrTaExKmBKAv6pkf/kq2CmJ+tky5WhOQqj6AAamzWGAhsy969uzyPkHOd9rZmb0HYcbpispKdO4","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"2b5550e97b194d6686a794559dc1d281"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1302']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:10:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"3e749b726eb149d99c5b65e77ebbeced"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1302'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKv4Q+wwY8+RIpUbl95MXlQ7jlU75zIbw6MiPLxlmJQ5HTiB7062T8s7CUoOiFvUCaakbuCjRZE+5P+oY5VuVNoX7VpmTp/LlaEai8KTTonbQULpmXqAhGiz1xWQofazTWv7gawlkSJ0SkN60k28c2m2UwuD/gzBr0ZxNQoTSrtXaMKn7q8o0c13HjqrOK+nlPoBEuUwSkW6fTdxXv2mOXL41b7lptE/2c0Ac/nUQPes/b7MPxVKVbRVl44A13+gDzTpAnEOdXcqliQYXroKV8gGyb7T7FRtvqAz6nmrMB4sEmE9CV0lAqtqyb1ViZV6IdAStxdGQ2G3K7HsGGA1HmMCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAh4lKWBNoAU1Cb0YqyLJmxs6m/m2M6+2Es9aI1FfjpXUTFz55fHRsObTymihR37/FRWsz+V3qLPEI951aLvhApsoReXGNR6zgv7nYkzPwVTJ7rwdaoLvS4GVANl1wmkLoFfvduTq1ZaTwV7K6q0HuFr9K12S9L/K8Vs3/MtAVy2tSVLB/mtnOLUgzmDLClp8s1/vlSxkUPTOQl+8oo1mty0pe8WxHFdDO/QEAeZ65CUTQHZxBSzw0RuGMjaewvf9QNixSXtFryUaOS1NvxlSomsqeVF816TDxbpD0YhvhPeenqnqG0bBo+MguE57Op/FhNPglLf6U9k+1MyRfvwwr1","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJilYWL2MFQuDbI1BXIiTqcaq3tNfUqxdMI/5Jc5PfDByI061cQXjO7GLgnA8PPzc09PzAKah6/dF0GUNBmSdR8aJql8lv7J4lF9P1mBVmFMtwlpbNt/jLEeyaLKW1XEHg9Rzz7d8Tbf6fuDvubTyqev9+C97mRw0biMW7dp8jepJo8vdKJBbZIVDk3MF5/TZkMN8bKIM7g0XdXCnQl2o0Za6cdQaVjAAoUmtRbs1onOrobACtNzdva9e6h7RqxPz9z5odz0fj/XryJwyhdnVI1lp5a/cK97IGzJ6rg3lC/IjTms0kxadG9YHR9SvCnOpJWmmturlyPjqU2b8tmDMrcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBeSkE6e5kt34shiEaM9sHAWLS0wCIrLdxllTHplzFpt1eQYY6OIwRhXdavm/9tPVNcZcDuyT7g2/ZOBGpSWE5s1u2l3rY/yVEfybt/d8kRHBdHEvVVR+7oBNgTeRQEvHBt5ZZfFNgsNnIvJBgMaPH6DIfIsVDlFqQFTImU62Ud6NPJjl2GruQNv5zH4VVSvafP+Odj6IfqJZ3PYHp/TmLL4TND35Y8x+NnZ1Q229CRKcYRY6ea0c+Aybo9S8E9lbWwYXCeCa51NrrTaExKmBKAv6pkf/kq2CmJ+tky5WhOQqj6AAamzWGAhsy969uzyPkHOd9rZmb0HYcbpispKdO4","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"2b5550e97b194d6686a794559dc1d281"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1302']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:10:55 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"3e749b726eb149d99c5b65e77ebbeced"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1302'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKv4Q+wwY8+RIpUbl95MXlQ7jlU75zIbw6MiPLxlmJQ5HTiB7062T8s7CUoOiFvUCaakbuCjRZE+5P+oY5VuVNoX7VpmTp/LlaEai8KTTonbQULpmXqAhGiz1xWQofazTWv7gawlkSJ0SkN60k28c2m2UwuD/gzBr0ZxNQoTSrtXaMKn7q8o0c13HjqrOK+nlPoBEuUwSkW6fTdxXv2mOXL41b7lptE/2c0Ac/nUQPes/b7MPxVKVbRVl44A13+gDzTpAnEOdXcqliQYXroKV8gGyb7T7FRtvqAz6nmrMB4sEmE9CV0lAqtqyb1ViZV6IdAStxdGQ2G3K7HsGGA1HmMCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAh4lKWBNoAU1Cb0YqyLJmxs6m/m2M6+2Es9aI1FfjpXUTFz55fHRsObTymihR37/FRWsz+V3qLPEI951aLvhApsoReXGNR6zgv7nYkzPwVTJ7rwdaoLvS4GVANl1wmkLoFfvduTq1ZaTwV7K6q0HuFr9K12S9L/K8Vs3/MtAVy2tSVLB/mtnOLUgzmDLClp8s1/vlSxkUPTOQl+8oo1mty0pe8WxHFdDO/QEAeZ65CUTQHZxBSzw0RuGMjaewvf9QNixSXtFryUaOS1NvxlSomsqeVF816TDxbpD0YhvhPeenqnqG0bBo+MguE57Op/FhNPglLf6U9k+1MyRfvwwr1","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"2b5550e97b194d6686a794559dc1d281"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1302']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:11:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJilYWL2MFQuDbI1BXIiTqcaq3tNfUqxdMI/5Jc5PfDByI061cQXjO7GLgnA8PPzc09PzAKah6/dF0GUNBmSdR8aJql8lv7J4lF9P1mBVmFMtwlpbNt/jLEeyaLKW1XEHg9Rzz7d8Tbf6fuDvubTyqev9+C97mRw0biMW7dp8jepJo8vdKJBbZIVDk3MF5/TZkMN8bKIM7g0XdXCnQl2o0Za6cdQaVjAAoUmtRbs1onOrobACtNzdva9e6h7RqxPz9z5odz0fj/XryJwyhdnVI1lp5a/cK97IGzJ6rg3lC/IjTms0kxadG9YHR9SvCnOpJWmmturlyPjqU2b8tmDMrcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBeSkE6e5kt34shiEaM9sHAWLS0wCIrLdxllTHplzFpt1eQYY6OIwRhXdavm/9tPVNcZcDuyT7g2/ZOBGpSWE5s1u2l3rY/yVEfybt/d8kRHBdHEvVVR+7oBNgTeRQEvHBt5ZZfFNgsNnIvJBgMaPH6DIfIsVDlFqQFTImU62Ud6NPJjl2GruQNv5zH4VVSvafP+Odj6IfqJZ3PYHp/TmLL4TND35Y8x+NnZ1Q229CRKcYRY6ea0c+Aybo9S8E9lbWwYXCeCa51NrrTaExKmBKAv6pkf/kq2CmJ+tky5WhOQqj6AAamzWGAhsy969uzyPkHOd9rZmb0HYcbpispKdO4","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certaa0f1292","request_id":"3e749b726eb149d99c5b65e77ebbeced"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1223'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKv4Q+wwY8+RIpUbl95MXlQ7jlU75zIbw6MiPLxlmJQ5HTiB7062T8s7CUoOiFvUCaakbuCjRZE+5P+oY5VuVNoX7VpmTp/LlaEai8KTTonbQULpmXqAhGiz1xWQofazTWv7gawlkSJ0SkN60k28c2m2UwuD/gzBr0ZxNQoTSrtXaMKn7q8o0c13HjqrOK+nlPoBEuUwSkW6fTdxXv2mOXL41b7lptE/2c0Ac/nUQPes/b7MPxVKVbRVl44A13+gDzTpAnEOdXcqliQYXroKV8gGyb7T7FRtvqAz6nmrMB4sEmE9CV0lAqtqyb1ViZV6IdAStxdGQ2G3K7HsGGA1HmMCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAh4lKWBNoAU1Cb0YqyLJmxs6m/m2M6+2Es9aI1FfjpXUTFz55fHRsObTymihR37/FRWsz+V3qLPEI951aLvhApsoReXGNR6zgv7nYkzPwVTJ7rwdaoLvS4GVANl1wmkLoFfvduTq1ZaTwV7K6q0HuFr9K12S9L/K8Vs3/MtAVy2tSVLB/mtnOLUgzmDLClp8s1/vlSxkUPTOQl+8oo1mty0pe8WxHFdDO/QEAeZ65CUTQHZxBSzw0RuGMjaewvf9QNixSXtFryUaOS1NvxlSomsqeVF816TDxbpD0YhvhPeenqnqG0bBo+MguE57Op/FhNPglLf6U9k+1MyRfvwwr1","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"2b5550e97b194d6686a794559dc1d281"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1302']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:11:15 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","kid":"https://vaultname.vault.azure.net/keys/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","sid":"https://vaultname.vault.azure.net/secrets/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","x5t":"M-sXGurzlQx7PG5USANCNyh6tlQ","cer":"MIIDNjCCAh6gAwIBAgIQRpYChGSeTsuXss63hzaRGTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJilYWL2MFQuDbI1BXIiTqcaq3tNfUqxdMI/5Jc5PfDByI061cQXjO7GLgnA8PPzc09PzAKah6/dF0GUNBmSdR8aJql8lv7J4lF9P1mBVmFMtwlpbNt/jLEeyaLKW1XEHg9Rzz7d8Tbf6fuDvubTyqev9+C97mRw0biMW7dp8jepJo8vdKJBbZIVDk3MF5/TZkMN8bKIM7g0XdXCnQl2o0Za6cdQaVjAAoUmtRbs1onOrobACtNzdva9e6h7RqxPz9z5odz0fj/XryJwyhdnVI1lp5a/cK97IGzJ6rg3lC/IjTms0kxadG9YHR9SvCnOpJWmmturlyPjqU2b8tmDMrcCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFGWnuzyvuFZ55CavQ899vPinxWLmMB0GA1UdDgQWBBRlp7s8r7hWeeQmr0PPfbz4p8Vi5jANBgkqhkiG9w0BAQsFAAOCAQEAJjpZjfu6axVNMD93Ke2mWrvWy88f8h8Fjcg90aDx76d9xN5G1wlTqNtqLUQZZCO2fwAHOSYEBXZEJPfNnRDQg3zQOk4wMfgN9RKJpZSxFgIQSoxpRZz1DedHyz/rMZ/wYARb4sFVpzszeaj/KoSHpFFDJhKBMt3lBgNVSamyw2uE6LV1/cYxtBJ4ORZPvbtDVklWBdUxG1G7E+yOzzrWE5yZe3O3pWRrIGc9yrMqv1S8CpX9dhZ3NdfFrBzIQ6It+52tOX0Se1Mfgq4DHd4k6NO/HeAIr+r1sYDY5m7CJyyoq4AaVfc3KGTGkJRnsRNYubfxjpqBJtySJeuLJCBf8w==","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453273,"updated":1583453273,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2366'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKv4Q+wwY8+RIpUbl95MXlQ7jlU75zIbw6MiPLxlmJQ5HTiB7062T8s7CUoOiFvUCaakbuCjRZE+5P+oY5VuVNoX7VpmTp/LlaEai8KTTonbQULpmXqAhGiz1xWQofazTWv7gawlkSJ0SkN60k28c2m2UwuD/gzBr0ZxNQoTSrtXaMKn7q8o0c13HjqrOK+nlPoBEuUwSkW6fTdxXv2mOXL41b7lptE/2c0Ac/nUQPes/b7MPxVKVbRVl44A13+gDzTpAnEOdXcqliQYXroKV8gGyb7T7FRtvqAz6nmrMB4sEmE9CV0lAqtqyb1ViZV6IdAStxdGQ2G3K7HsGGA1HmMCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAh4lKWBNoAU1Cb0YqyLJmxs6m/m2M6+2Es9aI1FfjpXUTFz55fHRsObTymihR37/FRWsz+V3qLPEI951aLvhApsoReXGNR6zgv7nYkzPwVTJ7rwdaoLvS4GVANl1wmkLoFfvduTq1ZaTwV7K6q0HuFr9K12S9L/K8Vs3/MtAVy2tSVLB/mtnOLUgzmDLClp8s1/vlSxkUPTOQl+8oo1mty0pe8WxHFdDO/QEAeZ65CUTQHZxBSzw0RuGMjaewvf9QNixSXtFryUaOS1NvxlSomsqeVF816TDxbpD0YhvhPeenqnqG0bBo+MguE57Op/FhNPglLf6U9k+1MyRfvwwr1","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certaa0f1292","request_id":"2b5550e97b194d6686a794559dc1d281"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1223']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:11:20 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJilYWL2MFQuDbI1BXIiTqcaq3tNfUqxdMI/5Jc5PfDByI061cQXjO7GLgnA8PPzc09PzAKah6/dF0GUNBmSdR8aJql8lv7J4lF9P1mBVmFMtwlpbNt/jLEeyaLKW1XEHg9Rzz7d8Tbf6fuDvubTyqev9+C97mRw0biMW7dp8jepJo8vdKJBbZIVDk3MF5/TZkMN8bKIM7g0XdXCnQl2o0Za6cdQaVjAAoUmtRbs1onOrobACtNzdva9e6h7RqxPz9z5odz0fj/XryJwyhdnVI1lp5a/cK97IGzJ6rg3lC/IjTms0kxadG9YHR9SvCnOpJWmmturlyPjqU2b8tmDMrcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBeSkE6e5kt34shiEaM9sHAWLS0wCIrLdxllTHplzFpt1eQYY6OIwRhXdavm/9tPVNcZcDuyT7g2/ZOBGpSWE5s1u2l3rY/yVEfybt/d8kRHBdHEvVVR+7oBNgTeRQEvHBt5ZZfFNgsNnIvJBgMaPH6DIfIsVDlFqQFTImU62Ud6NPJjl2GruQNv5zH4VVSvafP+Odj6IfqJZ3PYHp/TmLL4TND35Y8x+NnZ1Q229CRKcYRY6ea0c+Aybo9S8E9lbWwYXCeCa51NrrTaExKmBKAv6pkf/kq2CmJ+tky5WhOQqj6AAamzWGAhsy969uzyPkHOd9rZmb0HYcbpispKdO4","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certaa0f1292","request_id":"3e749b726eb149d99c5b65e77ebbeced"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1223'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6","kid":"https://vaultname.vault.azure.net/keys/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6","sid":"https://vaultname.vault.azure.net/secrets/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6","x5t":"X3KMQpSyPqldYp2iJGmrJJtKniI","cer":"MIIDNjCCAh6gAwIBAgIQRR00l8VHSAKj4UZZctlH6zANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNzAwMDExNloXDTIwMTIwNzAwMTExNlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKv4Q+wwY8+RIpUbl95MXlQ7jlU75zIbw6MiPLxlmJQ5HTiB7062T8s7CUoOiFvUCaakbuCjRZE+5P+oY5VuVNoX7VpmTp/LlaEai8KTTonbQULpmXqAhGiz1xWQofazTWv7gawlkSJ0SkN60k28c2m2UwuD/gzBr0ZxNQoTSrtXaMKn7q8o0c13HjqrOK+nlPoBEuUwSkW6fTdxXv2mOXL41b7lptE/2c0Ac/nUQPes/b7MPxVKVbRVl44A13+gDzTpAnEOdXcqliQYXroKV8gGyb7T7FRtvqAz6nmrMB4sEmE9CV0lAqtqyb1ViZV6IdAStxdGQ2G3K7HsGGA1HmMCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFK/FKt2KtxF2vOq17/4QNp8Cr5SYMB0GA1UdDgQWBBSvxSrdircRdrzqte/+EDafAq+UmDANBgkqhkiG9w0BAQsFAAOCAQEAQIBOSo87zGT/ESWExZQr2nzSrNtGJTdl8f+LI7sAWKZgrVBfrBXGRTmBGlCcA0Zw8iJd8WZ16+QS+3upO9SnHYaS60AocdgecMf3tEuz7ZG72h3x/t5rFPzRunr83DEZgFyTnmxVIwbNNlDH/+0KZBzAuhcueJBBDIu2bO1bG5bqMuKmJcjnONXcEaLUfYHa8i1+c9vTg0SfnwzCB5OZkOfpP5qhwdfvkqMQV+X9R7AvDv/DIcqI3NkL4qpc+lk5EUv+xxAe3OSya95yZgRTfnSsFhBvceLilAPUnvKgDKt7/BqJzu+6d8BbNqjAFrqRjCRSWl4wxmBEOM5+HbWBng==","attributes":{"enabled":true,"nbf":1575676876,"exp":1607299876,"created":1575677476,"updated":1575677476,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575677444,"updated":1575677444}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2354']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:11:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","kid":"https://vaultname.vault.azure.net/keys/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","sid":"https://vaultname.vault.azure.net/secrets/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","x5t":"M-sXGurzlQx7PG5USANCNyh6tlQ","cer":"MIIDNjCCAh6gAwIBAgIQRpYChGSeTsuXss63hzaRGTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJilYWL2MFQuDbI1BXIiTqcaq3tNfUqxdMI/5Jc5PfDByI061cQXjO7GLgnA8PPzc09PzAKah6/dF0GUNBmSdR8aJql8lv7J4lF9P1mBVmFMtwlpbNt/jLEeyaLKW1XEHg9Rzz7d8Tbf6fuDvubTyqev9+C97mRw0biMW7dp8jepJo8vdKJBbZIVDk3MF5/TZkMN8bKIM7g0XdXCnQl2o0Za6cdQaVjAAoUmtRbs1onOrobACtNzdva9e6h7RqxPz9z5odz0fj/XryJwyhdnVI1lp5a/cK97IGzJ6rg3lC/IjTms0kxadG9YHR9SvCnOpJWmmturlyPjqU2b8tmDMrcCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFGWnuzyvuFZ55CavQ899vPinxWLmMB0GA1UdDgQWBBRlp7s8r7hWeeQmr0PPfbz4p8Vi5jANBgkqhkiG9w0BAQsFAAOCAQEAJjpZjfu6axVNMD93Ke2mWrvWy88f8h8Fjcg90aDx76d9xN5G1wlTqNtqLUQZZCO2fwAHOSYEBXZEJPfNnRDQg3zQOk4wMfgN9RKJpZSxFgIQSoxpRZz1DedHyz/rMZ/wYARb4sFVpzszeaj/KoSHpFFDJhKBMt3lBgNVSamyw2uE6LV1/cYxtBJ4ORZPvbtDVklWBdUxG1G7E+yOzzrWE5yZe3O3pWRrIGc9yrMqv1S8CpX9dhZ3NdfFrBzIQ6It+52tOX0Se1Mfgq4DHd4k6NO/HeAIr+r1sYDY5m7CJyyoq4AaVfc3KGTGkJRnsRNYubfxjpqBJtySJeuLJCBf8w==","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453273,"updated":1583453273,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2366'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: '{"tags": {"tag1": "updated_value1"}}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '36'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: PATCH
    +    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","kid":"https://vaultname.vault.azure.net/keys/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","sid":"https://vaultname.vault.azure.net/secrets/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","x5t":"M-sXGurzlQx7PG5USANCNyh6tlQ","cer":"MIIDNjCCAh6gAwIBAgIQRpYChGSeTsuXss63hzaRGTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJilYWL2MFQuDbI1BXIiTqcaq3tNfUqxdMI/5Jc5PfDByI061cQXjO7GLgnA8PPzc09PzAKah6/dF0GUNBmSdR8aJql8lv7J4lF9P1mBVmFMtwlpbNt/jLEeyaLKW1XEHg9Rzz7d8Tbf6fuDvubTyqev9+C97mRw0biMW7dp8jepJo8vdKJBbZIVDk3MF5/TZkMN8bKIM7g0XdXCnQl2o0Za6cdQaVjAAoUmtRbs1onOrobACtNzdva9e6h7RqxPz9z5odz0fj/XryJwyhdnVI1lp5a/cK97IGzJ6rg3lC/IjTms0kxadG9YHR9SvCnOpJWmmturlyPjqU2b8tmDMrcCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFGWnuzyvuFZ55CavQ899vPinxWLmMB0GA1UdDgQWBBRlp7s8r7hWeeQmr0PPfbz4p8Vi5jANBgkqhkiG9w0BAQsFAAOCAQEAJjpZjfu6axVNMD93Ke2mWrvWy88f8h8Fjcg90aDx76d9xN5G1wlTqNtqLUQZZCO2fwAHOSYEBXZEJPfNnRDQg3zQOk4wMfgN9RKJpZSxFgIQSoxpRZz1DedHyz/rMZ/wYARb4sFVpzszeaj/KoSHpFFDJhKBMt3lBgNVSamyw2uE6LV1/cYxtBJ4ORZPvbtDVklWBdUxG1G7E+yOzzrWE5yZe3O3pWRrIGc9yrMqv1S8CpX9dhZ3NdfFrBzIQ6It+52tOX0Se1Mfgq4DHd4k6NO/HeAIr+r1sYDY5m7CJyyoq4AaVfc3KGTGkJRnsRNYubfxjpqBJtySJeuLJCBf8w==","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453273,"updated":1583453275,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"tag1":"updated_value1"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2399'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certaa0f1292","deletedDate":1583453275,"scheduledPurgeDate":1591229275,"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","kid":"https://vaultname.vault.azure.net/keys/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","sid":"https://vaultname.vault.azure.net/secrets/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","x5t":"M-sXGurzlQx7PG5USANCNyh6tlQ","cer":"MIIDNjCCAh6gAwIBAgIQRpYChGSeTsuXss63hzaRGTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJilYWL2MFQuDbI1BXIiTqcaq3tNfUqxdMI/5Jc5PfDByI061cQXjO7GLgnA8PPzc09PzAKah6/dF0GUNBmSdR8aJql8lv7J4lF9P1mBVmFMtwlpbNt/jLEeyaLKW1XEHg9Rzz7d8Tbf6fuDvubTyqev9+C97mRw0biMW7dp8jepJo8vdKJBbZIVDk3MF5/TZkMN8bKIM7g0XdXCnQl2o0Za6cdQaVjAAoUmtRbs1onOrobACtNzdva9e6h7RqxPz9z5odz0fj/XryJwyhdnVI1lp5a/cK97IGzJ6rg3lC/IjTms0kxadG9YHR9SvCnOpJWmmturlyPjqU2b8tmDMrcCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFGWnuzyvuFZ55CavQ899vPinxWLmMB0GA1UdDgQWBBRlp7s8r7hWeeQmr0PPfbz4p8Vi5jANBgkqhkiG9w0BAQsFAAOCAQEAJjpZjfu6axVNMD93Ke2mWrvWy88f8h8Fjcg90aDx76d9xN5G1wlTqNtqLUQZZCO2fwAHOSYEBXZEJPfNnRDQg3zQOk4wMfgN9RKJpZSxFgIQSoxpRZz1DedHyz/rMZ/wYARb4sFVpzszeaj/KoSHpFFDJhKBMt3lBgNVSamyw2uE6LV1/cYxtBJ4ORZPvbtDVklWBdUxG1G7E+yOzzrWE5yZe3O3pWRrIGc9yrMqv1S8CpX9dhZ3NdfFrBzIQ6It+52tOX0Se1Mfgq4DHd4k6NO/HeAIr+r1sYDY5m7CJyyoq4AaVfc3KGTGkJRnsRNYubfxjpqBJtySJeuLJCBf8w==","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453273,"updated":1583453275,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"tag1":"updated_value1"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2553'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certaa0f1292?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKv4Q+wwY8+RIpUbl95MXlQ7jlU75zIbw6MiPLxlmJQ5HTiB7062T8s7CUoOiFvUCaakbuCjRZE+5P+oY5VuVNoX7VpmTp/LlaEai8KTTonbQULpmXqAhGiz1xWQofazTWv7gawlkSJ0SkN60k28c2m2UwuD/gzBr0ZxNQoTSrtXaMKn7q8o0c13HjqrOK+nlPoBEuUwSkW6fTdxXv2mOXL41b7lptE/2c0Ac/nUQPes/b7MPxVKVbRVl44A13+gDzTpAnEOdXcqliQYXroKV8gGyb7T7FRtvqAz6nmrMB4sEmE9CV0lAqtqyb1ViZV6IdAStxdGQ2G3K7HsGGA1HmMCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAh4lKWBNoAU1Cb0YqyLJmxs6m/m2M6+2Es9aI1FfjpXUTFz55fHRsObTymihR37/FRWsz+V3qLPEI951aLvhApsoReXGNR6zgv7nYkzPwVTJ7rwdaoLvS4GVANl1wmkLoFfvduTq1ZaTwV7K6q0HuFr9K12S9L/K8Vs3/MtAVy2tSVLB/mtnOLUgzmDLClp8s1/vlSxkUPTOQl+8oo1mty0pe8WxHFdDO/QEAeZ65CUTQHZxBSzw0RuGMjaewvf9QNixSXtFryUaOS1NvxlSomsqeVF816TDxbpD0YhvhPeenqnqG0bBo+MguE57Op/FhNPglLf6U9k+1MyRfvwwr1","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certaa0f1292","request_id":"2b5550e97b194d6686a794559dc1d281"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1223']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:11:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certaa0f1292"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '96'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certaa0f1292?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6","kid":"https://vaultname.vault.azure.net/keys/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6","sid":"https://vaultname.vault.azure.net/secrets/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6","x5t":"X3KMQpSyPqldYp2iJGmrJJtKniI","cer":"MIIDNjCCAh6gAwIBAgIQRR00l8VHSAKj4UZZctlH6zANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNzAwMDExNloXDTIwMTIwNzAwMTExNlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKv4Q+wwY8+RIpUbl95MXlQ7jlU75zIbw6MiPLxlmJQ5HTiB7062T8s7CUoOiFvUCaakbuCjRZE+5P+oY5VuVNoX7VpmTp/LlaEai8KTTonbQULpmXqAhGiz1xWQofazTWv7gawlkSJ0SkN60k28c2m2UwuD/gzBr0ZxNQoTSrtXaMKn7q8o0c13HjqrOK+nlPoBEuUwSkW6fTdxXv2mOXL41b7lptE/2c0Ac/nUQPes/b7MPxVKVbRVl44A13+gDzTpAnEOdXcqliQYXroKV8gGyb7T7FRtvqAz6nmrMB4sEmE9CV0lAqtqyb1ViZV6IdAStxdGQ2G3K7HsGGA1HmMCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFK/FKt2KtxF2vOq17/4QNp8Cr5SYMB0GA1UdDgQWBBSvxSrdircRdrzqte/+EDafAq+UmDANBgkqhkiG9w0BAQsFAAOCAQEAQIBOSo87zGT/ESWExZQr2nzSrNtGJTdl8f+LI7sAWKZgrVBfrBXGRTmBGlCcA0Zw8iJd8WZ16+QS+3upO9SnHYaS60AocdgecMf3tEuz7ZG72h3x/t5rFPzRunr83DEZgFyTnmxVIwbNNlDH/+0KZBzAuhcueJBBDIu2bO1bG5bqMuKmJcjnONXcEaLUfYHa8i1+c9vTg0SfnwzCB5OZkOfpP5qhwdfvkqMQV+X9R7AvDv/DIcqI3NkL4qpc+lk5EUv+xxAe3OSya95yZgRTfnSsFhBvceLilAPUnvKgDKt7/BqJzu+6d8BbNqjAFrqRjCRSWl4wxmBEOM5+HbWBng==","attributes":{"enabled":true,"nbf":1575676876,"exp":1607299876,"created":1575677476,"updated":1575677476,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575677444,"updated":1575677444}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2354']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:11:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certaa0f1292"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '96'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
    -    body: '{"tags": {"tag1": "updated_value1"}}'
    +    body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['36']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: PATCH
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/?api-version=7.0
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certaa0f1292?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6","kid":"https://vaultname.vault.azure.net/keys/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6","sid":"https://vaultname.vault.azure.net/secrets/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6","x5t":"X3KMQpSyPqldYp2iJGmrJJtKniI","cer":"MIIDNjCCAh6gAwIBAgIQRR00l8VHSAKj4UZZctlH6zANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNzAwMDExNloXDTIwMTIwNzAwMTExNlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKv4Q+wwY8+RIpUbl95MXlQ7jlU75zIbw6MiPLxlmJQ5HTiB7062T8s7CUoOiFvUCaakbuCjRZE+5P+oY5VuVNoX7VpmTp/LlaEai8KTTonbQULpmXqAhGiz1xWQofazTWv7gawlkSJ0SkN60k28c2m2UwuD/gzBr0ZxNQoTSrtXaMKn7q8o0c13HjqrOK+nlPoBEuUwSkW6fTdxXv2mOXL41b7lptE/2c0Ac/nUQPes/b7MPxVKVbRVl44A13+gDzTpAnEOdXcqliQYXroKV8gGyb7T7FRtvqAz6nmrMB4sEmE9CV0lAqtqyb1ViZV6IdAStxdGQ2G3K7HsGGA1HmMCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFK/FKt2KtxF2vOq17/4QNp8Cr5SYMB0GA1UdDgQWBBSvxSrdircRdrzqte/+EDafAq+UmDANBgkqhkiG9w0BAQsFAAOCAQEAQIBOSo87zGT/ESWExZQr2nzSrNtGJTdl8f+LI7sAWKZgrVBfrBXGRTmBGlCcA0Zw8iJd8WZ16+QS+3upO9SnHYaS60AocdgecMf3tEuz7ZG72h3x/t5rFPzRunr83DEZgFyTnmxVIwbNNlDH/+0KZBzAuhcueJBBDIu2bO1bG5bqMuKmJcjnONXcEaLUfYHa8i1+c9vTg0SfnwzCB5OZkOfpP5qhwdfvkqMQV+X9R7AvDv/DIcqI3NkL4qpc+lk5EUv+xxAe3OSya95yZgRTfnSsFhBvceLilAPUnvKgDKt7/BqJzu+6d8BbNqjAFrqRjCRSWl4wxmBEOM5+HbWBng==","attributes":{"enabled":true,"nbf":1575676876,"exp":1607299876,"created":1575677476,"updated":1575677485,"recoveryLevel":"Purgeable"},"tags":{"tag1":"updated_value1"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575677444,"updated":1575677444}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2387']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:11:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certaa0f1292"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '96'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292?api-version=7.0
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certaa0f1292?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6","kid":"https://vaultname.vault.azure.net/keys/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6","sid":"https://vaultname.vault.azure.net/secrets/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6","x5t":"X3KMQpSyPqldYp2iJGmrJJtKniI","cer":"MIIDNjCCAh6gAwIBAgIQRR00l8VHSAKj4UZZctlH6zANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNzAwMDExNloXDTIwMTIwNzAwMTExNlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKv4Q+wwY8+RIpUbl95MXlQ7jlU75zIbw6MiPLxlmJQ5HTiB7062T8s7CUoOiFvUCaakbuCjRZE+5P+oY5VuVNoX7VpmTp/LlaEai8KTTonbQULpmXqAhGiz1xWQofazTWv7gawlkSJ0SkN60k28c2m2UwuD/gzBr0ZxNQoTSrtXaMKn7q8o0c13HjqrOK+nlPoBEuUwSkW6fTdxXv2mOXL41b7lptE/2c0Ac/nUQPes/b7MPxVKVbRVl44A13+gDzTpAnEOdXcqliQYXroKV8gGyb7T7FRtvqAz6nmrMB4sEmE9CV0lAqtqyb1ViZV6IdAStxdGQ2G3K7HsGGA1HmMCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFK/FKt2KtxF2vOq17/4QNp8Cr5SYMB0GA1UdDgQWBBSvxSrdircRdrzqte/+EDafAq+UmDANBgkqhkiG9w0BAQsFAAOCAQEAQIBOSo87zGT/ESWExZQr2nzSrNtGJTdl8f+LI7sAWKZgrVBfrBXGRTmBGlCcA0Zw8iJd8WZ16+QS+3upO9SnHYaS60AocdgecMf3tEuz7ZG72h3x/t5rFPzRunr83DEZgFyTnmxVIwbNNlDH/+0KZBzAuhcueJBBDIu2bO1bG5bqMuKmJcjnONXcEaLUfYHa8i1+c9vTg0SfnwzCB5OZkOfpP5qhwdfvkqMQV+X9R7AvDv/DIcqI3NkL4qpc+lk5EUv+xxAe3OSya95yZgRTfnSsFhBvceLilAPUnvKgDKt7/BqJzu+6d8BbNqjAFrqRjCRSWl4wxmBEOM5+HbWBng==","attributes":{"enabled":true,"nbf":1575676876,"exp":1607299876,"created":1575677476,"updated":1575677485,"recoveryLevel":"Purgeable"},"tags":{"tag1":"updated_value1"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575677444,"updated":1575677444}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2387']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:11:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certaa0f1292"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '96'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/c1b118b59cc0421b83ac767b0df677b6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certaa0f1292?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certaa0f1292/versions/c1b118b59cc0421b83ac767b0df677b6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['130']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:11:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certaa0f1292"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '96'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certaa0f1292?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certaa0f1292"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '96'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certaa0f1292?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certaa0f1292"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '96'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certaa0f1292?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certaa0f1292"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '96'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certaa0f1292?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certaa0f1292"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '96'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certaa0f1292?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certaa0f1292","deletedDate":1583453275,"scheduledPurgeDate":1591229275,"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","kid":"https://vaultname.vault.azure.net/keys/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","sid":"https://vaultname.vault.azure.net/secrets/certaa0f1292/2763592a847e48158ec3e59f2f521dd8","x5t":"M-sXGurzlQx7PG5USANCNyh6tlQ","cer":"MIIDNjCCAh6gAwIBAgIQRpYChGSeTsuXss63hzaRGTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJilYWL2MFQuDbI1BXIiTqcaq3tNfUqxdMI/5Jc5PfDByI061cQXjO7GLgnA8PPzc09PzAKah6/dF0GUNBmSdR8aJql8lv7J4lF9P1mBVmFMtwlpbNt/jLEeyaLKW1XEHg9Rzz7d8Tbf6fuDvubTyqev9+C97mRw0biMW7dp8jepJo8vdKJBbZIVDk3MF5/TZkMN8bKIM7g0XdXCnQl2o0Za6cdQaVjAAoUmtRbs1onOrobACtNzdva9e6h7RqxPz9z5odz0fj/XryJwyhdnVI1lp5a/cK97IGzJ6rg3lC/IjTms0kxadG9YHR9SvCnOpJWmmturlyPjqU2b8tmDMrcCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFGWnuzyvuFZ55CavQ899vPinxWLmMB0GA1UdDgQWBBRlp7s8r7hWeeQmr0PPfbz4p8Vi5jANBgkqhkiG9w0BAQsFAAOCAQEAJjpZjfu6axVNMD93Ke2mWrvWy88f8h8Fjcg90aDx76d9xN5G1wlTqNtqLUQZZCO2fwAHOSYEBXZEJPfNnRDQg3zQOk4wMfgN9RKJpZSxFgIQSoxpRZz1DedHyz/rMZ/wYARb4sFVpzszeaj/KoSHpFFDJhKBMt3lBgNVSamyw2uE6LV1/cYxtBJ4ORZPvbtDVklWBdUxG1G7E+yOzzrWE5yZe3O3pWRrIGc9yrMqv1S8CpX9dhZ3NdfFrBzIQ6It+52tOX0Se1Mfgq4DHd4k6NO/HeAIr+r1sYDY5m7CJyyoq4AaVfc3KGTGkJRnsRNYubfxjpqBJtySJeuLJCBf8w==","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453273,"updated":1583453275,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"tag1":"updated_value1"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certaa0f1292/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2553'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certaa0f1292/2763592a847e48158ec3e59f2f521dd8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certaa0f1292/versions/2763592a847e48158ec3e59f2f521dd8"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '130'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_get_pending_certificate_signing_request.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_get_pending_certificate_signing_request.yaml
    index e05636df10e6..4486522ee333 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_get_pending_certificate_signing_request.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_get_pending_certificate_signing_request.yaml
    @@ -2,265 +2,412 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"policy": {"x509_props": {"subject": "CN=DefaultPolicy", "sans": {}},
           "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['99']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '99'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtCobC1Vfs6wSzwcB+F0nVFnit5A+fzK44Pb7CEHWCGD2O55xF1Aj9E/rRRg10kLm09iKXv71PEevgoM8KeeTjCBTZSy73roAN6uP68xRSZ+9oBeth6GzXqPzgvI8O928JnDWKsf+Mvw7Ui5mwTv66M1Hriw9WstQE6Ik7WxhlmFmFU8iWNZ/o8pAsIB1Iar0op+uY63AiOmggaahKztHICdDEAjkQ+IRppcxucw35RMfqI1WgOAt9dHm/jdyyD8WuOWpCEMZfWsEI2Nu26GiY8qI4pezR4x+rJXy9PIOnXtlWW2WVsp0AiXDh+Mhfz+TViQkWLtSWRNCB8GvAFHFECAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCR6sT9JlwPPvi2IzWHlNssri1Jf0S2vXXVkdzLnpk3KQ5pG5UDuZbU4FjT6+Qk0OLUyWXLvyHhag4kApjPC5QHF94XLs+mH19zmUwOhh7VFFCMlTNXTC4ZmaP2ceAemuARSEVVvUZZR93zC3joPzOQthul1iL7fM30shL8ZMBc1d0Un3xrwdVgFkLSUyIKP9OmdKgbNC00MjI0GFsJBhUj8461im9KRnv1Dqn//Bsrw/Ijzh6bvoqiCSV4U6bSXnfw2QGZfH1goX7tEoQwaVqkc977g/h0YaEgIVwkWeWOgy05u45E4exky6+TIpX3EJMTTwwRGDDpOxawVgn07JvI","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALv4p4NW2CYzq/N/bHmraa/J+tbsVNsp6AhIEO0J1XcU1kpRROQOT7j8k1tgzR02r+oCs1RDBIHXvDG72GiSr9eVm1azRkeZhl69Dt9qD6zS5fEh8+2sIBI5U8Jta+Cd3GffUbMpryyvWzQeVhYkMnNDBv8PN6sI2OrsKZIqVojJUZl1+HnyRHzvL6tIBPYObxRVmyuzWlgyUYjDQauVjiK3PiGLMp+VcYxPR51dkYFf8Lwu+bEfoJUSBi5d+rNfo0X+nYk8dSJuw5A/G8beVgQnz8PuuQsKHHjbKMTCqcrP9y2NEzSiQinaMBWaaIz5JY7ha3R3q+n7JsIils/RU3kCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAD+pHDR/ZYrH1B0M7YGd8+uVP1dezBzN89iN45hdiN176iE/Ng8J/7DhYX7bQR3a3eJxQ2/+DZlrI8wc+sZgbWNtLLLhF5XXIw6zM3wLfzwTqbSsMyGixTiVVVGp6vMAkdmlRRFG4Mwr6hTT/Zk4xhf+bxy7lajycv3yUR0klgIZF+Qs8M9YS8QRAR/AnvZVMGR++DKrr5/DIbUr3gs+Q7SY7ZVXOXhdtHWb3Yjed70lUqnvE+fYBqi5jaA9vaKU06o4Swb3z19C+jOKG66GpBW0WgF2tvt2ddPN2zNKk+13adoV7/AZCG/uaXwS/w9hJR+8q6z8R70YPh/iBROa2V","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"de5a7f9dc08849a0832021605cb9576d"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"b79bf4b3aad449e8a3f78a84e7376780"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1307']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:24 GMT']
    -      expires: ['-1']
    -      location: ['https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0&request_id=de5a7f9dc08849a0832021605cb9576d']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 202, message: Accepted}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1307'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview&request_id=b79bf4b3aad449e8a3f78a84e7376780
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtCobC1Vfs6wSzwcB+F0nVFnit5A+fzK44Pb7CEHWCGD2O55xF1Aj9E/rRRg10kLm09iKXv71PEevgoM8KeeTjCBTZSy73roAN6uP68xRSZ+9oBeth6GzXqPzgvI8O928JnDWKsf+Mvw7Ui5mwTv66M1Hriw9WstQE6Ik7WxhlmFmFU8iWNZ/o8pAsIB1Iar0op+uY63AiOmggaahKztHICdDEAjkQ+IRppcxucw35RMfqI1WgOAt9dHm/jdyyD8WuOWpCEMZfWsEI2Nu26GiY8qI4pezR4x+rJXy9PIOnXtlWW2WVsp0AiXDh+Mhfz+TViQkWLtSWRNCB8GvAFHFECAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCR6sT9JlwPPvi2IzWHlNssri1Jf0S2vXXVkdzLnpk3KQ5pG5UDuZbU4FjT6+Qk0OLUyWXLvyHhag4kApjPC5QHF94XLs+mH19zmUwOhh7VFFCMlTNXTC4ZmaP2ceAemuARSEVVvUZZR93zC3joPzOQthul1iL7fM30shL8ZMBc1d0Un3xrwdVgFkLSUyIKP9OmdKgbNC00MjI0GFsJBhUj8461im9KRnv1Dqn//Bsrw/Ijzh6bvoqiCSV4U6bSXnfw2QGZfH1goX7tEoQwaVqkc977g/h0YaEgIVwkWeWOgy05u45E4exky6+TIpX3EJMTTwwRGDDpOxawVgn07JvI","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALv4p4NW2CYzq/N/bHmraa/J+tbsVNsp6AhIEO0J1XcU1kpRROQOT7j8k1tgzR02r+oCs1RDBIHXvDG72GiSr9eVm1azRkeZhl69Dt9qD6zS5fEh8+2sIBI5U8Jta+Cd3GffUbMpryyvWzQeVhYkMnNDBv8PN6sI2OrsKZIqVojJUZl1+HnyRHzvL6tIBPYObxRVmyuzWlgyUYjDQauVjiK3PiGLMp+VcYxPR51dkYFf8Lwu+bEfoJUSBi5d+rNfo0X+nYk8dSJuw5A/G8beVgQnz8PuuQsKHHjbKMTCqcrP9y2NEzSiQinaMBWaaIz5JY7ha3R3q+n7JsIils/RU3kCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAD+pHDR/ZYrH1B0M7YGd8+uVP1dezBzN89iN45hdiN176iE/Ng8J/7DhYX7bQR3a3eJxQ2/+DZlrI8wc+sZgbWNtLLLhF5XXIw6zM3wLfzwTqbSsMyGixTiVVVGp6vMAkdmlRRFG4Mwr6hTT/Zk4xhf+bxy7lajycv3yUR0klgIZF+Qs8M9YS8QRAR/AnvZVMGR++DKrr5/DIbUr3gs+Q7SY7ZVXOXhdtHWb3Yjed70lUqnvE+fYBqi5jaA9vaKU06o4Swb3z19C+jOKG66GpBW0WgF2tvt2ddPN2zNKk+13adoV7/AZCG/uaXwS/w9hJR+8q6z8R70YPh/iBROa2V","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"de5a7f9dc08849a0832021605cb9576d"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"b79bf4b3aad449e8a3f78a84e7376780"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1307']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1307'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtCobC1Vfs6wSzwcB+F0nVFnit5A+fzK44Pb7CEHWCGD2O55xF1Aj9E/rRRg10kLm09iKXv71PEevgoM8KeeTjCBTZSy73roAN6uP68xRSZ+9oBeth6GzXqPzgvI8O928JnDWKsf+Mvw7Ui5mwTv66M1Hriw9WstQE6Ik7WxhlmFmFU8iWNZ/o8pAsIB1Iar0op+uY63AiOmggaahKztHICdDEAjkQ+IRppcxucw35RMfqI1WgOAt9dHm/jdyyD8WuOWpCEMZfWsEI2Nu26GiY8qI4pezR4x+rJXy9PIOnXtlWW2WVsp0AiXDh+Mhfz+TViQkWLtSWRNCB8GvAFHFECAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCR6sT9JlwPPvi2IzWHlNssri1Jf0S2vXXVkdzLnpk3KQ5pG5UDuZbU4FjT6+Qk0OLUyWXLvyHhag4kApjPC5QHF94XLs+mH19zmUwOhh7VFFCMlTNXTC4ZmaP2ceAemuARSEVVvUZZR93zC3joPzOQthul1iL7fM30shL8ZMBc1d0Un3xrwdVgFkLSUyIKP9OmdKgbNC00MjI0GFsJBhUj8461im9KRnv1Dqn//Bsrw/Ijzh6bvoqiCSV4U6bSXnfw2QGZfH1goX7tEoQwaVqkc977g/h0YaEgIVwkWeWOgy05u45E4exky6+TIpX3EJMTTwwRGDDpOxawVgn07JvI","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALv4p4NW2CYzq/N/bHmraa/J+tbsVNsp6AhIEO0J1XcU1kpRROQOT7j8k1tgzR02r+oCs1RDBIHXvDG72GiSr9eVm1azRkeZhl69Dt9qD6zS5fEh8+2sIBI5U8Jta+Cd3GffUbMpryyvWzQeVhYkMnNDBv8PN6sI2OrsKZIqVojJUZl1+HnyRHzvL6tIBPYObxRVmyuzWlgyUYjDQauVjiK3PiGLMp+VcYxPR51dkYFf8Lwu+bEfoJUSBi5d+rNfo0X+nYk8dSJuw5A/G8beVgQnz8PuuQsKHHjbKMTCqcrP9y2NEzSiQinaMBWaaIz5JY7ha3R3q+n7JsIils/RU3kCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAD+pHDR/ZYrH1B0M7YGd8+uVP1dezBzN89iN45hdiN176iE/Ng8J/7DhYX7bQR3a3eJxQ2/+DZlrI8wc+sZgbWNtLLLhF5XXIw6zM3wLfzwTqbSsMyGixTiVVVGp6vMAkdmlRRFG4Mwr6hTT/Zk4xhf+bxy7lajycv3yUR0klgIZF+Qs8M9YS8QRAR/AnvZVMGR++DKrr5/DIbUr3gs+Q7SY7ZVXOXhdtHWb3Yjed70lUqnvE+fYBqi5jaA9vaKU06o4Swb3z19C+jOKG66GpBW0WgF2tvt2ddPN2zNKk+13adoV7/AZCG/uaXwS/w9hJR+8q6z8R70YPh/iBROa2V","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"de5a7f9dc08849a0832021605cb9576d"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"b79bf4b3aad449e8a3f78a84e7376780"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1307']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1307'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtCobC1Vfs6wSzwcB+F0nVFnit5A+fzK44Pb7CEHWCGD2O55xF1Aj9E/rRRg10kLm09iKXv71PEevgoM8KeeTjCBTZSy73roAN6uP68xRSZ+9oBeth6GzXqPzgvI8O928JnDWKsf+Mvw7Ui5mwTv66M1Hriw9WstQE6Ik7WxhlmFmFU8iWNZ/o8pAsIB1Iar0op+uY63AiOmggaahKztHICdDEAjkQ+IRppcxucw35RMfqI1WgOAt9dHm/jdyyD8WuOWpCEMZfWsEI2Nu26GiY8qI4pezR4x+rJXy9PIOnXtlWW2WVsp0AiXDh+Mhfz+TViQkWLtSWRNCB8GvAFHFECAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCR6sT9JlwPPvi2IzWHlNssri1Jf0S2vXXVkdzLnpk3KQ5pG5UDuZbU4FjT6+Qk0OLUyWXLvyHhag4kApjPC5QHF94XLs+mH19zmUwOhh7VFFCMlTNXTC4ZmaP2ceAemuARSEVVvUZZR93zC3joPzOQthul1iL7fM30shL8ZMBc1d0Un3xrwdVgFkLSUyIKP9OmdKgbNC00MjI0GFsJBhUj8461im9KRnv1Dqn//Bsrw/Ijzh6bvoqiCSV4U6bSXnfw2QGZfH1goX7tEoQwaVqkc977g/h0YaEgIVwkWeWOgy05u45E4exky6+TIpX3EJMTTwwRGDDpOxawVgn07JvI","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"de5a7f9dc08849a0832021605cb9576d"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1307']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtCobC1Vfs6wSzwcB+F0nVFnit5A+fzK44Pb7CEHWCGD2O55xF1Aj9E/rRRg10kLm09iKXv71PEevgoM8KeeTjCBTZSy73roAN6uP68xRSZ+9oBeth6GzXqPzgvI8O928JnDWKsf+Mvw7Ui5mwTv66M1Hriw9WstQE6Ik7WxhlmFmFU8iWNZ/o8pAsIB1Iar0op+uY63AiOmggaahKztHICdDEAjkQ+IRppcxucw35RMfqI1WgOAt9dHm/jdyyD8WuOWpCEMZfWsEI2Nu26GiY8qI4pezR4x+rJXy9PIOnXtlWW2WVsp0AiXDh+Mhfz+TViQkWLtSWRNCB8GvAFHFECAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCR6sT9JlwPPvi2IzWHlNssri1Jf0S2vXXVkdzLnpk3KQ5pG5UDuZbU4FjT6+Qk0OLUyWXLvyHhag4kApjPC5QHF94XLs+mH19zmUwOhh7VFFCMlTNXTC4ZmaP2ceAemuARSEVVvUZZR93zC3joPzOQthul1iL7fM30shL8ZMBc1d0Un3xrwdVgFkLSUyIKP9OmdKgbNC00MjI0GFsJBhUj8461im9KRnv1Dqn//Bsrw/Ijzh6bvoqiCSV4U6bSXnfw2QGZfH1goX7tEoQwaVqkc977g/h0YaEgIVwkWeWOgy05u45E4exky6+TIpX3EJMTTwwRGDDpOxawVgn07JvI","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert","request_id":"de5a7f9dc08849a0832021605cb9576d"}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALv4p4NW2CYzq/N/bHmraa/J+tbsVNsp6AhIEO0J1XcU1kpRROQOT7j8k1tgzR02r+oCs1RDBIHXvDG72GiSr9eVm1azRkeZhl69Dt9qD6zS5fEh8+2sIBI5U8Jta+Cd3GffUbMpryyvWzQeVhYkMnNDBv8PN6sI2OrsKZIqVojJUZl1+HnyRHzvL6tIBPYObxRVmyuzWlgyUYjDQauVjiK3PiGLMp+VcYxPR51dkYFf8Lwu+bEfoJUSBi5d+rNfo0X+nYk8dSJuw5A/G8beVgQnz8PuuQsKHHjbKMTCqcrP9y2NEzSiQinaMBWaaIz5JY7ha3R3q+n7JsIils/RU3kCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAD+pHDR/ZYrH1B0M7YGd8+uVP1dezBzN89iN45hdiN176iE/Ng8J/7DhYX7bQR3a3eJxQ2/+DZlrI8wc+sZgbWNtLLLhF5XXIw6zM3wLfzwTqbSsMyGixTiVVVGp6vMAkdmlRRFG4Mwr6hTT/Zk4xhf+bxy7lajycv3yUR0klgIZF+Qs8M9YS8QRAR/AnvZVMGR++DKrr5/DIbUr3gs+Q7SY7ZVXOXhdtHWb3Yjed70lUqnvE+fYBqi5jaA9vaKU06o4Swb3z19C+jOKG66GpBW0WgF2tvt2ddPN2zNKk+13adoV7/AZCG/uaXwS/w9hJR+8q6z8R70YPh/iBROa2V","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert","request_id":"b79bf4b3aad449e8a3f78a84e7376780"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1233']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:55 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1233'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/b75a1e7e64424423b213c717ef7d91da","kid":"https://vaultname.vault.azure.net/keys/unknownIssuerCert/b75a1e7e64424423b213c717ef7d91da","sid":"https://vaultname.vault.azure.net/secrets/unknownIssuerCert/b75a1e7e64424423b213c717ef7d91da","x5t":"5GCC0ICbnJzbcbPsCMSIozD7izA","cer":"MIIDNjCCAh6gAwIBAgIQeZB9syaLRP+v2ReTk2sVXjANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDc0NloXDTIwMTIwNjIzNTc0NlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtCobC1Vfs6wSzwcB+F0nVFnit5A+fzK44Pb7CEHWCGD2O55xF1Aj9E/rRRg10kLm09iKXv71PEevgoM8KeeTjCBTZSy73roAN6uP68xRSZ+9oBeth6GzXqPzgvI8O928JnDWKsf+Mvw7Ui5mwTv66M1Hriw9WstQE6Ik7WxhlmFmFU8iWNZ/o8pAsIB1Iar0op+uY63AiOmggaahKztHICdDEAjkQ+IRppcxucw35RMfqI1WgOAt9dHm/jdyyD8WuOWpCEMZfWsEI2Nu26GiY8qI4pezR4x+rJXy9PIOnXtlWW2WVsp0AiXDh+Mhfz+TViQkWLtSWRNCB8GvAFHFECAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFO7KbRRTrfHU5OxnR1IO8AivSidiMB0GA1UdDgQWBBTuym0UU63x1OTsZ0dSDvAIr0onYjANBgkqhkiG9w0BAQsFAAOCAQEAhUSlj33L9r5xPHZMyRFe6OG2TLzljPESz7C5VjPCh87Kb0wvdbKaGwSXkRFWsemzw9NaO8WP8UOHfIWOTk3peqh4M14u4fymx2ZwNQleAwMNcFeRRz1yK5yl/19/YT1uz8quv3EXw+ekjC7eEzsp+u6ChojryJj7T7+Db0uuLJ7Oye6IgiPHmZHRQflvcYJF7y2kLJu77RLhryFupFBiTiiEGUQnO+t8GN2keBVBC0jgZ7UyhFkrWTKe8q7MYcc859khpTBiGu9w5qBENPcvkRL60yEapafPY0vBYKwWVPP78G1Ycvs+rBshXM55MuWY2sDDcuZnGm9uZVHXAmjOmA==","attributes":{"enabled":true,"nbf":1575676066,"exp":1607299066,"created":1575676666,"updated":1575676666,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676644,"updated":1575676644}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending"}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/c59146294a054809827de8e035463494","kid":"https://vaultname.vault.azure.net/keys/unknownIssuerCert/c59146294a054809827de8e035463494","sid":"https://vaultname.vault.azure.net/secrets/unknownIssuerCert/c59146294a054809827de8e035463494","x5t":"oO-Thq79rk-zkLenfZgn_YB6Rtc","cer":"MIIDNjCCAh6gAwIBAgIQZYZSFdijQiGYlVvewXxRdjANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALv4p4NW2CYzq/N/bHmraa/J+tbsVNsp6AhIEO0J1XcU1kpRROQOT7j8k1tgzR02r+oCs1RDBIHXvDG72GiSr9eVm1azRkeZhl69Dt9qD6zS5fEh8+2sIBI5U8Jta+Cd3GffUbMpryyvWzQeVhYkMnNDBv8PN6sI2OrsKZIqVojJUZl1+HnyRHzvL6tIBPYObxRVmyuzWlgyUYjDQauVjiK3PiGLMp+VcYxPR51dkYFf8Lwu+bEfoJUSBi5d+rNfo0X+nYk8dSJuw5A/G8beVgQnz8PuuQsKHHjbKMTCqcrP9y2NEzSiQinaMBWaaIz5JY7ha3R3q+n7JsIils/RU3kCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFOHWLjs0FICdz7vyINaZ03cs+41XMB0GA1UdDgQWBBTh1i47NBSAnc+78iDWmdN3LPuNVzANBgkqhkiG9w0BAQsFAAOCAQEAD+P19kWkd+3139BKCRFGJyBwkjWdebplKgR4QRfVZ4JKI2h8w/VxGUK7hd2NR8cIDGNOO2GnLBpezanNgB7437cP3IeObLJYVWR+4KW7UCctu8EMVeToYrA2IOFfGqls371wT98IZzisPItvB2LVSEQi1Sw6LCq16Z1/zGaoiZfs8uWAXfSCb5lEiSRNshOtDCM/7CVPRKZaVC0vMPGcDpdybIVMonlRIQcrziq4cJAURslJUMVD3kKXlRnQVmuX9XDImv5eA7ZLenXIVCBqAqKR4mwFd9VoEB/Y02VG3YGOGQDbRrJ/YUzZKb9KRgikE8KYuHj8tm4oe328r9X6Ug==","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['2379']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2391'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtCobC1Vfs6wSzwcB+F0nVFnit5A+fzK44Pb7CEHWCGD2O55xF1Aj9E/rRRg10kLm09iKXv71PEevgoM8KeeTjCBTZSy73roAN6uP68xRSZ+9oBeth6GzXqPzgvI8O928JnDWKsf+Mvw7Ui5mwTv66M1Hriw9WstQE6Ik7WxhlmFmFU8iWNZ/o8pAsIB1Iar0op+uY63AiOmggaahKztHICdDEAjkQ+IRppcxucw35RMfqI1WgOAt9dHm/jdyyD8WuOWpCEMZfWsEI2Nu26GiY8qI4pezR4x+rJXy9PIOnXtlWW2WVsp0AiXDh+Mhfz+TViQkWLtSWRNCB8GvAFHFECAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCR6sT9JlwPPvi2IzWHlNssri1Jf0S2vXXVkdzLnpk3KQ5pG5UDuZbU4FjT6+Qk0OLUyWXLvyHhag4kApjPC5QHF94XLs+mH19zmUwOhh7VFFCMlTNXTC4ZmaP2ceAemuARSEVVvUZZR93zC3joPzOQthul1iL7fM30shL8ZMBc1d0Un3xrwdVgFkLSUyIKP9OmdKgbNC00MjI0GFsJBhUj8461im9KRnv1Dqn//Bsrw/Ijzh6bvoqiCSV4U6bSXnfw2QGZfH1goX7tEoQwaVqkc977g/h0YaEgIVwkWeWOgy05u45E4exky6+TIpX3EJMTTwwRGDDpOxawVgn07JvI","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert","request_id":"de5a7f9dc08849a0832021605cb9576d"}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALv4p4NW2CYzq/N/bHmraa/J+tbsVNsp6AhIEO0J1XcU1kpRROQOT7j8k1tgzR02r+oCs1RDBIHXvDG72GiSr9eVm1azRkeZhl69Dt9qD6zS5fEh8+2sIBI5U8Jta+Cd3GffUbMpryyvWzQeVhYkMnNDBv8PN6sI2OrsKZIqVojJUZl1+HnyRHzvL6tIBPYObxRVmyuzWlgyUYjDQauVjiK3PiGLMp+VcYxPR51dkYFf8Lwu+bEfoJUSBi5d+rNfo0X+nYk8dSJuw5A/G8beVgQnz8PuuQsKHHjbKMTCqcrP9y2NEzSiQinaMBWaaIz5JY7ha3R3q+n7JsIils/RU3kCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAD+pHDR/ZYrH1B0M7YGd8+uVP1dezBzN89iN45hdiN176iE/Ng8J/7DhYX7bQR3a3eJxQ2/+DZlrI8wc+sZgbWNtLLLhF5XXIw6zM3wLfzwTqbSsMyGixTiVVVGp6vMAkdmlRRFG4Mwr6hTT/Zk4xhf+bxy7lajycv3yUR0klgIZF+Qs8M9YS8QRAR/AnvZVMGR++DKrr5/DIbUr3gs+Q7SY7ZVXOXhdtHWb3Yjed70lUqnvE+fYBqi5jaA9vaKU06o4Swb3z19C+jOKG66GpBW0WgF2tvt2ddPN2zNKk+13adoV7/AZCG/uaXwS/w9hJR+8q6z8R70YPh/iBROa2V","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert","request_id":"b79bf4b3aad449e8a3f78a84e7376780"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1233']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1233'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtCobC1Vfs6wSzwcB+F0nVFnit5A+fzK44Pb7CEHWCGD2O55xF1Aj9E/rRRg10kLm09iKXv71PEevgoM8KeeTjCBTZSy73roAN6uP68xRSZ+9oBeth6GzXqPzgvI8O928JnDWKsf+Mvw7Ui5mwTv66M1Hriw9WstQE6Ik7WxhlmFmFU8iWNZ/o8pAsIB1Iar0op+uY63AiOmggaahKztHICdDEAjkQ+IRppcxucw35RMfqI1WgOAt9dHm/jdyyD8WuOWpCEMZfWsEI2Nu26GiY8qI4pezR4x+rJXy9PIOnXtlWW2WVsp0AiXDh+Mhfz+TViQkWLtSWRNCB8GvAFHFECAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCR6sT9JlwPPvi2IzWHlNssri1Jf0S2vXXVkdzLnpk3KQ5pG5UDuZbU4FjT6+Qk0OLUyWXLvyHhag4kApjPC5QHF94XLs+mH19zmUwOhh7VFFCMlTNXTC4ZmaP2ceAemuARSEVVvUZZR93zC3joPzOQthul1iL7fM30shL8ZMBc1d0Un3xrwdVgFkLSUyIKP9OmdKgbNC00MjI0GFsJBhUj8461im9KRnv1Dqn//Bsrw/Ijzh6bvoqiCSV4U6bSXnfw2QGZfH1goX7tEoQwaVqkc977g/h0YaEgIVwkWeWOgy05u45E4exky6+TIpX3EJMTTwwRGDDpOxawVgn07JvI","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert","request_id":"de5a7f9dc08849a0832021605cb9576d"}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALv4p4NW2CYzq/N/bHmraa/J+tbsVNsp6AhIEO0J1XcU1kpRROQOT7j8k1tgzR02r+oCs1RDBIHXvDG72GiSr9eVm1azRkeZhl69Dt9qD6zS5fEh8+2sIBI5U8Jta+Cd3GffUbMpryyvWzQeVhYkMnNDBv8PN6sI2OrsKZIqVojJUZl1+HnyRHzvL6tIBPYObxRVmyuzWlgyUYjDQauVjiK3PiGLMp+VcYxPR51dkYFf8Lwu+bEfoJUSBi5d+rNfo0X+nYk8dSJuw5A/G8beVgQnz8PuuQsKHHjbKMTCqcrP9y2NEzSiQinaMBWaaIz5JY7ha3R3q+n7JsIils/RU3kCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAD+pHDR/ZYrH1B0M7YGd8+uVP1dezBzN89iN45hdiN176iE/Ng8J/7DhYX7bQR3a3eJxQ2/+DZlrI8wc+sZgbWNtLLLhF5XXIw6zM3wLfzwTqbSsMyGixTiVVVGp6vMAkdmlRRFG4Mwr6hTT/Zk4xhf+bxy7lajycv3yUR0klgIZF+Qs8M9YS8QRAR/AnvZVMGR++DKrr5/DIbUr3gs+Q7SY7ZVXOXhdtHWb3Yjed70lUqnvE+fYBqi5jaA9vaKU06o4Swb3z19C+jOKG66GpBW0WgF2tvt2ddPN2zNKk+13adoV7/AZCG/uaXwS/w9hJR+8q6z8R70YPh/iBROa2V","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert","request_id":"b79bf4b3aad449e8a3f78a84e7376780"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1233']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1233'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_list.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_list.yaml
    index aa6b57487134..066fd391e812 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_list.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_list.yaml
    @@ -2,35 +2,59 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert0f5650dfd/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert0f5650dfd/import?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -38,32 +62,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert0f5650dfd/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert0f5650dfd/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert0f5650dfd/d1cb863e5b2b4a858fa4aa60177ad9d6","kid":"https://vaultname.vault.azure.net/keys/cert0f5650dfd/d1cb863e5b2b4a858fa4aa60177ad9d6","sid":"https://vaultname.vault.azure.net/secrets/cert0f5650dfd/d1cb863e5b2b4a858fa4aa60177ad9d6","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676644,"updated":1575676644,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert0f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676644,"updated":1575676644}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert0f5650dfd/3ecc3c4b090a498db9eea29a61a49cfe","kid":"https://vaultname.vault.azure.net/keys/cert0f5650dfd/3ecc3c4b090a498db9eea29a61a49cfe","sid":"https://vaultname.vault.azure.net/secrets/cert0f5650dfd/3ecc3c4b090a498db9eea29a61a49cfe","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453254,"updated":1583453254,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert0f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1831']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1843'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -71,32 +118,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert1f5650dfd/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert1f5650dfd/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert1f5650dfd/f6a0cfa4a9194c839007f4e6f62d9b8b","kid":"https://vaultname.vault.azure.net/keys/cert1f5650dfd/f6a0cfa4a9194c839007f4e6f62d9b8b","sid":"https://vaultname.vault.azure.net/secrets/cert1f5650dfd/f6a0cfa4a9194c839007f4e6f62d9b8b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676645,"updated":1575676645,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert1f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676645,"updated":1575676645}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert1f5650dfd/1e6d08d552804f48b30117b131c98f48","kid":"https://vaultname.vault.azure.net/keys/cert1f5650dfd/1e6d08d552804f48b30117b131c98f48","sid":"https://vaultname.vault.azure.net/secrets/cert1f5650dfd/1e6d08d552804f48b30117b131c98f48","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert1f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1831']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1843'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -104,32 +174,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert2f5650dfd/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert2f5650dfd/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert2f5650dfd/16d04f2bf75c4e62b504f434a486ee4d","kid":"https://vaultname.vault.azure.net/keys/cert2f5650dfd/16d04f2bf75c4e62b504f434a486ee4d","sid":"https://vaultname.vault.azure.net/secrets/cert2f5650dfd/16d04f2bf75c4e62b504f434a486ee4d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676645,"updated":1575676645,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert2f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676645,"updated":1575676645}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert2f5650dfd/ee94fec162e94b078debe879dfce9607","kid":"https://vaultname.vault.azure.net/keys/cert2f5650dfd/ee94fec162e94b078debe879dfce9607","sid":"https://vaultname.vault.azure.net/secrets/cert2f5650dfd/ee94fec162e94b078debe879dfce9607","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert2f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1831']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1843'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -137,32 +230,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert3f5650dfd/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert3f5650dfd/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert3f5650dfd/0ee8d03dee2d469995c806de43ef7182","kid":"https://vaultname.vault.azure.net/keys/cert3f5650dfd/0ee8d03dee2d469995c806de43ef7182","sid":"https://vaultname.vault.azure.net/secrets/cert3f5650dfd/0ee8d03dee2d469995c806de43ef7182","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676645,"updated":1575676645,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert3f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676645,"updated":1575676645}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert3f5650dfd/6918dd70a94f4f67ad5d1b0a0f3f7537","kid":"https://vaultname.vault.azure.net/keys/cert3f5650dfd/6918dd70a94f4f67ad5d1b0a0f3f7537","sid":"https://vaultname.vault.azure.net/secrets/cert3f5650dfd/6918dd70a94f4f67ad5d1b0a0f3f7537","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert3f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1831']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1843'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -170,32 +286,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert4f5650dfd/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert4f5650dfd/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert4f5650dfd/0570e7198e5540c789a74f357068f8f1","kid":"https://vaultname.vault.azure.net/keys/cert4f5650dfd/0570e7198e5540c789a74f357068f8f1","sid":"https://vaultname.vault.azure.net/secrets/cert4f5650dfd/0570e7198e5540c789a74f357068f8f1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676646,"updated":1575676646,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert4f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676646,"updated":1575676646}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert4f5650dfd/1146f628af914b17b73a3b254bf4cfc7","kid":"https://vaultname.vault.azure.net/keys/cert4f5650dfd/1146f628af914b17b73a3b254bf4cfc7","sid":"https://vaultname.vault.azure.net/secrets/cert4f5650dfd/1146f628af914b17b73a3b254bf4cfc7","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert4f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1831']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1843'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -203,32 +342,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert5f5650dfd/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert5f5650dfd/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert5f5650dfd/f16eb39052754059a3da4b6c281aa89d","kid":"https://vaultname.vault.azure.net/keys/cert5f5650dfd/f16eb39052754059a3da4b6c281aa89d","sid":"https://vaultname.vault.azure.net/secrets/cert5f5650dfd/f16eb39052754059a3da4b6c281aa89d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676646,"updated":1575676646,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert5f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676646,"updated":1575676646}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert5f5650dfd/70886f4a63ea4e7084c96c3897c20ca9","kid":"https://vaultname.vault.azure.net/keys/cert5f5650dfd/70886f4a63ea4e7084c96c3897c20ca9","sid":"https://vaultname.vault.azure.net/secrets/cert5f5650dfd/70886f4a63ea4e7084c96c3897c20ca9","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert5f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1831']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1843'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -236,84 +398,149 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert6f5650dfd/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert6f5650dfd/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert6f5650dfd/2b4a9611c29745f8bd22aea225cc7ae0","kid":"https://vaultname.vault.azure.net/keys/cert6f5650dfd/2b4a9611c29745f8bd22aea225cc7ae0","sid":"https://vaultname.vault.azure.net/secrets/cert6f5650dfd/2b4a9611c29745f8bd22aea225cc7ae0","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676646,"updated":1575676646,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert6f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676646,"updated":1575676646}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert6f5650dfd/f3a4877f7ca94f3a8cd9b7326b9340f6","kid":"https://vaultname.vault.azure.net/keys/cert6f5650dfd/f3a4877f7ca94f3a8cd9b7326b9340f6","sid":"https://vaultname.vault.azure.net/secrets/cert6f5650dfd/f3a4877f7ca94f3a8cd9b7326b9340f6","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453257,"updated":1583453257,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert6f5650dfd/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453257,"updated":1583453257}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1831']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1843'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates?maxresults=6&api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates?maxresults=6&api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/cert0f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676644,"updated":1575676644},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert1f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676645,"updated":1575676645},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert2f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676645,"updated":1575676645},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert3f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676645,"updated":1575676645},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert4f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676646,"updated":1575676646},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert5f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676646,"updated":1575676646},"subject":""}],"nextLink":"https://vaultname.vault.azure.net:443/certificates?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE5MiFNREF3TURJMUlXTmxjblJwWm1sallYUmxMME5GVWxRMlJqVTJOVEJFUmtRaE1EQXdNREk0SVRrNU9Ua3RNVEl0TXpGVU1qTTZOVGs2TlRrdU9UazVPVGs1T1ZvaCIsIlRhcmdldExvY2F0aW9uIjowfQ&maxresults=6"}'}
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/cert0f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453254,"updated":1583453254},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert1f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert2f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert3f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert4f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert5f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256},"subject":""}],"nextLink":"https://vaultname.vault.azure.net:443/certificates?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE5MiFNREF3TURJMUlXTmxjblJwWm1sallYUmxMME5GVWxRMlJqVTJOVEJFUmtRaE1EQXdNREk0SVRrNU9Ua3RNVEl0TXpGVU1qTTZOVGs2TlRrdU9UazVPVGs1T1ZvaCIsIlRhcmdldExvY2F0aW9uIjowfQ&maxresults=6"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1749']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1757'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE5MiFNREF3TURJMUlXTmxjblJwWm1sallYUmxMME5GVWxRMlJqVTJOVEJFUmtRaE1EQXdNREk0SVRrNU9Ua3RNVEl0TXpGVU1qTTZOVGs2TlRrdU9UazVPVGs1T1ZvaCIsIlRhcmdldExvY2F0aW9uIjowfQ&maxresults=6
    +    uri: https://vaultname.vault.azure.net/certificates?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE5MiFNREF3TURJMUlXTmxjblJwWm1sallYUmxMME5GVWxRMlJqVTJOVEJFUmtRaE1EQXdNREk0SVRrNU9Ua3RNVEl0TXpGVU1qTTZOVGs2TlRrdU9UazVPVGs1T1ZvaCIsIlRhcmdldExvY2F0aW9uIjowfQ&maxresults=6
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/cert6f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676646,"updated":1575676646},"subject":""}],"nextLink":null}'}
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/cert6f5650dfd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453257,"updated":1583453257},"subject":""}],"nextLink":null}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['267']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '267'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_list_certificate_versions.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_list_certificate_versions.yaml
    index 3b2f0fa2def1..7da3b4449462 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_list_certificate_versions.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_list_certificate_versions.yaml
    @@ -2,35 +2,59 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -38,32 +62,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/1d9f7d1c72e6412db2d86bbdada041a3","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/1d9f7d1c72e6412db2d86bbdada041a3","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/1d9f7d1c72e6412db2d86bbdada041a3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676643,"updated":1575676643,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676643,"updated":1575676643}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/8ba3a19af2f640c09fee17dbae43a652","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/8ba3a19af2f640c09fee17dbae43a652","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/8ba3a19af2f640c09fee17dbae43a652","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453259,"updated":1583453259,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453259,"updated":1583453259}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1839']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1851'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -71,32 +118,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/018ef871ba7340aab6ee7b66e554338c","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/018ef871ba7340aab6ee7b66e554338c","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/018ef871ba7340aab6ee7b66e554338c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676644,"updated":1575676644,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676643,"updated":1575676644}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/9cb6bf2eb6db4dc594265230c21117d0","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/9cb6bf2eb6db4dc594265230c21117d0","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/9cb6bf2eb6db4dc594265230c21117d0","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453260,"updated":1583453260,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453259,"updated":1583453260}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1839']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1851'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -104,32 +174,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/0a104bcddd454d42a4e8fca948fa702c","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/0a104bcddd454d42a4e8fca948fa702c","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/0a104bcddd454d42a4e8fca948fa702c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676644,"updated":1575676644,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676643,"updated":1575676644}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/d8c20f00bad8416d926a1a38ee7742a9","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/d8c20f00bad8416d926a1a38ee7742a9","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/d8c20f00bad8416d926a1a38ee7742a9","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453261,"updated":1583453261,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453259,"updated":1583453261}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1839']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1851'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -137,32 +230,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/3be4689c468c4ca983ea245192dc6ce9","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/3be4689c468c4ca983ea245192dc6ce9","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/3be4689c468c4ca983ea245192dc6ce9","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676644,"updated":1575676644,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676643,"updated":1575676644}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/d178a5806a284e8fb4a307a8fe22642b","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/d178a5806a284e8fb4a307a8fe22642b","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/d178a5806a284e8fb4a307a8fe22642b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453261,"updated":1583453261,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453259,"updated":1583453261}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1839']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1851'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -170,32 +286,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/eff0b2e488924906bdd5c83a7a0dc708","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/eff0b2e488924906bdd5c83a7a0dc708","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/eff0b2e488924906bdd5c83a7a0dc708","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676645,"updated":1575676645,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676643,"updated":1575676645}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/2be646108c644951a5d1ab0690b273e7","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/2be646108c644951a5d1ab0690b273e7","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/2be646108c644951a5d1ab0690b273e7","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453262,"updated":1583453262,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453259,"updated":1583453262}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1839']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1851'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -203,32 +342,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/0cb865b11cba4ace80ead5872380ed5e","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/0cb865b11cba4ace80ead5872380ed5e","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/0cb865b11cba4ace80ead5872380ed5e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676645,"updated":1575676645,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676643,"updated":1575676645}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/06498ec16d724d6ea4f8c26ea10f3162","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/06498ec16d724d6ea4f8c26ea10f3162","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/06498ec16d724d6ea4f8c26ea10f3162","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453262,"updated":1583453262,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453259,"updated":1583453262}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1839']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1851'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -236,84 +398,149 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/720d6119cedf4f548f964ed1511ca235","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/720d6119cedf4f548f964ed1511ca235","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/720d6119cedf4f548f964ed1511ca235","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676645,"updated":1575676645,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676643,"updated":1575676645}}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/3a4253484a6f48aa8bb2ff76761a6e68","kid":"https://vaultname.vault.azure.net/keys/certver79c016b7/3a4253484a6f48aa8bb2ff76761a6e68","sid":"https://vaultname.vault.azure.net/secrets/certver79c016b7/3a4253484a6f48aa8bb2ff76761a6e68","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453262,"updated":1583453262,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453259,"updated":1583453262}}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1839']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1851'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/versions?maxresults=6&api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/versions?maxresults=6&api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/018ef871ba7340aab6ee7b66e554338c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676644,"updated":1575676644},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/0a104bcddd454d42a4e8fca948fa702c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676644,"updated":1575676644},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/0cb865b11cba4ace80ead5872380ed5e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676645,"updated":1575676645},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/1d9f7d1c72e6412db2d86bbdada041a3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676643,"updated":1575676643},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/3be4689c468c4ca983ea245192dc6ce9","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676644,"updated":1575676644},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/720d6119cedf4f548f964ed1511ca235","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676645,"updated":1575676645},"subject":""}],"nextLink":"https://vaultname.vault.azure.net:443/certificates/certver79c016b7/versions?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExNTIhTURBd01EWTVJV05sY25ScFptbGpZWFJsTDBORlVsUldSVkkzT1VNd01UWkNOeTlXUlZKVFNVOU9VeTlGUmtZd1FqSkZORGc0T1RJME9UQTJRa1JFTlVNNE0wRTNRVEJFUXpjd09DRXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'}
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/06498ec16d724d6ea4f8c26ea10f3162","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453262,"updated":1583453262},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/2be646108c644951a5d1ab0690b273e7","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453262,"updated":1583453262},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/3a4253484a6f48aa8bb2ff76761a6e68","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453262,"updated":1583453262},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/8ba3a19af2f640c09fee17dbae43a652","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453259,"updated":1583453259},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/9cb6bf2eb6db4dc594265230c21117d0","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453260,"updated":1583453260},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/d178a5806a284e8fb4a307a8fe22642b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453261,"updated":1583453261},"subject":""}],"nextLink":"https://vaultname.vault.azure.net:443/certificates/certver79c016b7/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExNTIhTURBd01EWTVJV05sY25ScFptbGpZWFJsTDBORlVsUldSVkkzT1VNd01UWkNOeTlXUlZKVFNVOU9VeTlFT0VNeU1FWXdNRUpCUkRnME1UWkVPVEkyUVRGQk16aEZSVGMzTkRKQk9TRXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['2065']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2073'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/versions?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExNTIhTURBd01EWTVJV05sY25ScFptbGpZWFJsTDBORlVsUldSVkkzT1VNd01UWkNOeTlXUlZKVFNVOU9VeTlGUmtZd1FqSkZORGc0T1RJME9UQTJRa1JFTlVNNE0wRTNRVEJFUXpjd09DRXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
    +    uri: https://vaultname.vault.azure.net/certificates/certver79c016b7/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExNTIhTURBd01EWTVJV05sY25ScFptbGpZWFJsTDBORlVsUldSVkkzT1VNd01UWkNOeTlXUlZKVFNVOU9VeTlFT0VNeU1FWXdNRUpCUkRnME1UWkVPVEkyUVRGQk16aEZSVGMzTkRKQk9TRXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/eff0b2e488924906bdd5c83a7a0dc708","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676645,"updated":1575676645},"subject":""}],"nextLink":null}'}
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/certver79c016b7/d8c20f00bad8416d926a1a38ee7742a9","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453261,"updated":1583453261},"subject":""}],"nextLink":null}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['302']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '302'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_logging_disabled.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_logging_disabled.yaml
    index 1d2750c3930a..32c9b3af11d0 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_logging_disabled.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_logging_disabled.yaml
    @@ -2,62 +2,109 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"provider": "Test"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['20']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '20'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/cert-name","provider":"Test","attributes":{"enabled":true,"created":1575676643,"updated":1575676643}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/cert-name","provider":"Test","attributes":{"enabled":true,"created":1583453253,"updated":1583453253}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['178']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '178'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_logging_enabled.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_logging_enabled.yaml
    index 1d2750c3930a..af27df7c189a 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_logging_enabled.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_logging_enabled.yaml
    @@ -2,62 +2,109 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"provider": "Test"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['20']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '20'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/cert-name","provider":"Test","attributes":{"enabled":true,"created":1575676643,"updated":1575676643}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/cert-name","provider":"Test","attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['178']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '178'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_policy.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_policy.yaml
    index 56b545438444..82f81fa2d66b 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_policy.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_policy.yaml
    @@ -2,35 +2,59 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": true}, "secret_props": {"contentType": "application/x-pkcs12"},
    @@ -40,207 +64,309 @@ interactions:
           98}, "action": {"action_type": "EmailContacts"}}], "issuer": {"name": "Self",
           "cert_transparency": false}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['518']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '518'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8lfailCwnROuSu+hlasBYwOxoT/WYr5H5DeDTzi79GuTr/C5o3ozBKpWuvS5mK0ObOFbLObdvtXTmj8P1IfDWdikMsUd6GqHBUMD/1wECfviN9zJg/bed1Zyv2brmQ05rGcKR2RJ0uMGI3YQs36Z57SD4AcvwP4r3aXeDymztjC9KBSrQNcnNtmBfY9imEDsGawR4OIX/d3PuLTgVSHvwhfF72XPiq5XsAxJOgDGW9ms68PZZyhGZVKUaXZHBVGPP3eG3Rf4YDs5FRoaz/JeW4Lw8XZr7u+OiDnH0sbrY++usmT9rbhHm4u5e82pKVZbYSW6H7RQx5FchMKZaj0AMCAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAekercwbCmwKKbelHrUpNlNMqukjF778hkzaS7cboSM3cbyW7U2OO8t3E6koDADFgQlhsB2msawefZhk7VYyemebP+A1wW7TiR15yRuyJ0hQO+kdVhlZOM4xtWH1VjphHn++I8XTM9xJhNDV4xkDQ6/m5a2XESiMD8PN4IrG7eSy0uOzjJxqKVCpGC+2wJsZS3zYC5KERVtyz/Z59vfUW9W+1krOxZIrm3X2uW0F5w6L2jh2+GAvTTgeF33YkcF7jz1GTGGhC0151kUln9g3LyawQ1i34vLYKBDarLuHUE8M3EvEX81G0X5aE2mCGYwl1I+f+idFMH7wk9IKvlx1Muw==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKoM5BKZ5EIeoCKxfDcx0Ebp22j6CwkfExR4T+2iw7Dy3C5Jm3YCyyVBfl/KWhDi/LiQa9GFeMkrW+B9dpEE/oAn0Eoah9iZfx6qJkDDItBapgmT29nMASccKkWGBANBjCFvR4P2qVKW632/MlDlfxpj2Qx423qY5MbelY0zgSKR31NzO/3zys5F5kXiw5ltCxZ2U0s2kSmrRLrxsTkz+wa2M7j5n6hoFYHVSv2bcxE/QQqTaxOLO2Bu5wt499WQQ/bDiNAEibWXnTg332DEKlr3AcBXCR5LybfTdUwnFvA8N4tLR+okOELVCdH+wKsxJOofyHqR7Z+DNeiV94+/b+0CAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAHjwhKqumLuuNS/BzSAFEvovqlQoGy/p+EUDx8im/0ufaY1KfnzQokXojXGiFh5NFnh0l4htfKkcW7OUJcQowfY/qK/WfwKIAzfsR7xK+PzpAa7+Yt5RZj3ikbDReDoMrYWvW9E7/HlqJIsWyDShZJ4ufMbZqZSwsc3sj8j0E2h0UKkWA1xYuXFDWl3rN3PTMs8iq861xFKsmknYU8FSvohr+72f4W/KeGulr4+wqt9hbq7Irn9TKpkMfvxEukH8HA32B98HsNET9zgsQyKUT7zM3HhC6V8ebyzTs/rdd4MTBl2T6iwSfqehFfinhjXa+u4tMdliaBqk/8xwIbiuoUQ==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"ee4f0afd91984c71a7b1341c746dee83"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"c2562d9aca574295aef67a73ceb0597f"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1351']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      location: ['https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.0&request_id=ee4f0afd91984c71a7b1341c746dee83']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 202, message: Accepted}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1351'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.1-preview&request_id=c2562d9aca574295aef67a73ceb0597f
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8lfailCwnROuSu+hlasBYwOxoT/WYr5H5DeDTzi79GuTr/C5o3ozBKpWuvS5mK0ObOFbLObdvtXTmj8P1IfDWdikMsUd6GqHBUMD/1wECfviN9zJg/bed1Zyv2brmQ05rGcKR2RJ0uMGI3YQs36Z57SD4AcvwP4r3aXeDymztjC9KBSrQNcnNtmBfY9imEDsGawR4OIX/d3PuLTgVSHvwhfF72XPiq5XsAxJOgDGW9ms68PZZyhGZVKUaXZHBVGPP3eG3Rf4YDs5FRoaz/JeW4Lw8XZr7u+OiDnH0sbrY++usmT9rbhHm4u5e82pKVZbYSW6H7RQx5FchMKZaj0AMCAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAekercwbCmwKKbelHrUpNlNMqukjF778hkzaS7cboSM3cbyW7U2OO8t3E6koDADFgQlhsB2msawefZhk7VYyemebP+A1wW7TiR15yRuyJ0hQO+kdVhlZOM4xtWH1VjphHn++I8XTM9xJhNDV4xkDQ6/m5a2XESiMD8PN4IrG7eSy0uOzjJxqKVCpGC+2wJsZS3zYC5KERVtyz/Z59vfUW9W+1krOxZIrm3X2uW0F5w6L2jh2+GAvTTgeF33YkcF7jz1GTGGhC0151kUln9g3LyawQ1i34vLYKBDarLuHUE8M3EvEX81G0X5aE2mCGYwl1I+f+idFMH7wk9IKvlx1Muw==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKoM5BKZ5EIeoCKxfDcx0Ebp22j6CwkfExR4T+2iw7Dy3C5Jm3YCyyVBfl/KWhDi/LiQa9GFeMkrW+B9dpEE/oAn0Eoah9iZfx6qJkDDItBapgmT29nMASccKkWGBANBjCFvR4P2qVKW632/MlDlfxpj2Qx423qY5MbelY0zgSKR31NzO/3zys5F5kXiw5ltCxZ2U0s2kSmrRLrxsTkz+wa2M7j5n6hoFYHVSv2bcxE/QQqTaxOLO2Bu5wt499WQQ/bDiNAEibWXnTg332DEKlr3AcBXCR5LybfTdUwnFvA8N4tLR+okOELVCdH+wKsxJOofyHqR7Z+DNeiV94+/b+0CAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAHjwhKqumLuuNS/BzSAFEvovqlQoGy/p+EUDx8im/0ufaY1KfnzQokXojXGiFh5NFnh0l4htfKkcW7OUJcQowfY/qK/WfwKIAzfsR7xK+PzpAa7+Yt5RZj3ikbDReDoMrYWvW9E7/HlqJIsWyDShZJ4ufMbZqZSwsc3sj8j0E2h0UKkWA1xYuXFDWl3rN3PTMs8iq861xFKsmknYU8FSvohr+72f4W/KeGulr4+wqt9hbq7Irn9TKpkMfvxEukH8HA32B98HsNET9zgsQyKUT7zM3HhC6V8ebyzTs/rdd4MTBl2T6iwSfqehFfinhjXa+u4tMdliaBqk/8xwIbiuoUQ==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"ee4f0afd91984c71a7b1341c746dee83"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"c2562d9aca574295aef67a73ceb0597f"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1351']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1351'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8lfailCwnROuSu+hlasBYwOxoT/WYr5H5DeDTzi79GuTr/C5o3ozBKpWuvS5mK0ObOFbLObdvtXTmj8P1IfDWdikMsUd6GqHBUMD/1wECfviN9zJg/bed1Zyv2brmQ05rGcKR2RJ0uMGI3YQs36Z57SD4AcvwP4r3aXeDymztjC9KBSrQNcnNtmBfY9imEDsGawR4OIX/d3PuLTgVSHvwhfF72XPiq5XsAxJOgDGW9ms68PZZyhGZVKUaXZHBVGPP3eG3Rf4YDs5FRoaz/JeW4Lw8XZr7u+OiDnH0sbrY++usmT9rbhHm4u5e82pKVZbYSW6H7RQx5FchMKZaj0AMCAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAekercwbCmwKKbelHrUpNlNMqukjF778hkzaS7cboSM3cbyW7U2OO8t3E6koDADFgQlhsB2msawefZhk7VYyemebP+A1wW7TiR15yRuyJ0hQO+kdVhlZOM4xtWH1VjphHn++I8XTM9xJhNDV4xkDQ6/m5a2XESiMD8PN4IrG7eSy0uOzjJxqKVCpGC+2wJsZS3zYC5KERVtyz/Z59vfUW9W+1krOxZIrm3X2uW0F5w6L2jh2+GAvTTgeF33YkcF7jz1GTGGhC0151kUln9g3LyawQ1i34vLYKBDarLuHUE8M3EvEX81G0X5aE2mCGYwl1I+f+idFMH7wk9IKvlx1Muw==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKoM5BKZ5EIeoCKxfDcx0Ebp22j6CwkfExR4T+2iw7Dy3C5Jm3YCyyVBfl/KWhDi/LiQa9GFeMkrW+B9dpEE/oAn0Eoah9iZfx6qJkDDItBapgmT29nMASccKkWGBANBjCFvR4P2qVKW632/MlDlfxpj2Qx423qY5MbelY0zgSKR31NzO/3zys5F5kXiw5ltCxZ2U0s2kSmrRLrxsTkz+wa2M7j5n6hoFYHVSv2bcxE/QQqTaxOLO2Bu5wt499WQQ/bDiNAEibWXnTg332DEKlr3AcBXCR5LybfTdUwnFvA8N4tLR+okOELVCdH+wKsxJOofyHqR7Z+DNeiV94+/b+0CAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAHjwhKqumLuuNS/BzSAFEvovqlQoGy/p+EUDx8im/0ufaY1KfnzQokXojXGiFh5NFnh0l4htfKkcW7OUJcQowfY/qK/WfwKIAzfsR7xK+PzpAa7+Yt5RZj3ikbDReDoMrYWvW9E7/HlqJIsWyDShZJ4ufMbZqZSwsc3sj8j0E2h0UKkWA1xYuXFDWl3rN3PTMs8iq861xFKsmknYU8FSvohr+72f4W/KeGulr4+wqt9hbq7Irn9TKpkMfvxEukH8HA32B98HsNET9zgsQyKUT7zM3HhC6V8ebyzTs/rdd4MTBl2T6iwSfqehFfinhjXa+u4tMdliaBqk/8xwIbiuoUQ==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"ee4f0afd91984c71a7b1341c746dee83"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"c2562d9aca574295aef67a73ceb0597f"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1351']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1351'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      retry-after:
    +      - '10'
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8lfailCwnROuSu+hlasBYwOxoT/WYr5H5DeDTzi79GuTr/C5o3ozBKpWuvS5mK0ObOFbLObdvtXTmj8P1IfDWdikMsUd6GqHBUMD/1wECfviN9zJg/bed1Zyv2brmQ05rGcKR2RJ0uMGI3YQs36Z57SD4AcvwP4r3aXeDymztjC9KBSrQNcnNtmBfY9imEDsGawR4OIX/d3PuLTgVSHvwhfF72XPiq5XsAxJOgDGW9ms68PZZyhGZVKUaXZHBVGPP3eG3Rf4YDs5FRoaz/JeW4Lw8XZr7u+OiDnH0sbrY++usmT9rbhHm4u5e82pKVZbYSW6H7RQx5FchMKZaj0AMCAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAekercwbCmwKKbelHrUpNlNMqukjF778hkzaS7cboSM3cbyW7U2OO8t3E6koDADFgQlhsB2msawefZhk7VYyemebP+A1wW7TiR15yRuyJ0hQO+kdVhlZOM4xtWH1VjphHn++I8XTM9xJhNDV4xkDQ6/m5a2XESiMD8PN4IrG7eSy0uOzjJxqKVCpGC+2wJsZS3zYC5KERVtyz/Z59vfUW9W+1krOxZIrm3X2uW0F5w6L2jh2+GAvTTgeF33YkcF7jz1GTGGhC0151kUln9g3LyawQ1i34vLYKBDarLuHUE8M3EvEX81G0X5aE2mCGYwl1I+f+idFMH7wk9IKvlx1Muw==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"ee4f0afd91984c71a7b1341c746dee83"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1351']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      retry-after: ['10']
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8lfailCwnROuSu+hlasBYwOxoT/WYr5H5DeDTzi79GuTr/C5o3ozBKpWuvS5mK0ObOFbLObdvtXTmj8P1IfDWdikMsUd6GqHBUMD/1wECfviN9zJg/bed1Zyv2brmQ05rGcKR2RJ0uMGI3YQs36Z57SD4AcvwP4r3aXeDymztjC9KBSrQNcnNtmBfY9imEDsGawR4OIX/d3PuLTgVSHvwhfF72XPiq5XsAxJOgDGW9ms68PZZyhGZVKUaXZHBVGPP3eG3Rf4YDs5FRoaz/JeW4Lw8XZr7u+OiDnH0sbrY++usmT9rbhHm4u5e82pKVZbYSW6H7RQx5FchMKZaj0AMCAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAekercwbCmwKKbelHrUpNlNMqukjF778hkzaS7cboSM3cbyW7U2OO8t3E6koDADFgQlhsB2msawefZhk7VYyemebP+A1wW7TiR15yRuyJ0hQO+kdVhlZOM4xtWH1VjphHn++I8XTM9xJhNDV4xkDQ6/m5a2XESiMD8PN4IrG7eSy0uOzjJxqKVCpGC+2wJsZS3zYC5KERVtyz/Z59vfUW9W+1krOxZIrm3X2uW0F5w6L2jh2+GAvTTgeF33YkcF7jz1GTGGhC0151kUln9g3LyawQ1i34vLYKBDarLuHUE8M3EvEX81G0X5aE2mCGYwl1I+f+idFMH7wk9IKvlx1Muw==","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/policyCertificate","request_id":"ee4f0afd91984c71a7b1341c746dee83"}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKoM5BKZ5EIeoCKxfDcx0Ebp22j6CwkfExR4T+2iw7Dy3C5Jm3YCyyVBfl/KWhDi/LiQa9GFeMkrW+B9dpEE/oAn0Eoah9iZfx6qJkDDItBapgmT29nMASccKkWGBANBjCFvR4P2qVKW632/MlDlfxpj2Qx423qY5MbelY0zgSKR31NzO/3zys5F5kXiw5ltCxZ2U0s2kSmrRLrxsTkz+wa2M7j5n6hoFYHVSv2bcxE/QQqTaxOLO2Bu5wt499WQQ/bDiNAEibWXnTg332DEKlr3AcBXCR5LybfTdUwnFvA8N4tLR+okOELVCdH+wKsxJOofyHqR7Z+DNeiV94+/b+0CAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAHjwhKqumLuuNS/BzSAFEvovqlQoGy/p+EUDx8im/0ufaY1KfnzQokXojXGiFh5NFnh0l4htfKkcW7OUJcQowfY/qK/WfwKIAzfsR7xK+PzpAa7+Yt5RZj3ikbDReDoMrYWvW9E7/HlqJIsWyDShZJ4ufMbZqZSwsc3sj8j0E2h0UKkWA1xYuXFDWl3rN3PTMs8iq861xFKsmknYU8FSvohr+72f4W/KeGulr4+wqt9hbq7Irn9TKpkMfvxEukH8HA32B98HsNET9zgsQyKUT7zM3HhC6V8ebyzTs/rdd4MTBl2T6iwSfqehFfinhjXa+u4tMdliaBqk/8xwIbiuoUQ==","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/policyCertificate","request_id":"c2562d9aca574295aef67a73ceb0597f"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1277']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1277'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/a1dfb51e40e94011935373359b66048b","kid":"https://vaultname.vault.azure.net/keys/policyCertificate/a1dfb51e40e94011935373359b66048b","sid":"https://vaultname.vault.azure.net/secrets/policyCertificate/a1dfb51e40e94011935373359b66048b","x5t":"DlPX0R9kelhNF6gSAEAaw1V9J4E","cer":"MIIDVzCCAj+gAwIBAgIQO7imlu9SSBOKpihlbSjVOzANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDc0NloXDTIwMTIwNjIzNTc0NlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8lfailCwnROuSu+hlasBYwOxoT/WYr5H5DeDTzi79GuTr/C5o3ozBKpWuvS5mK0ObOFbLObdvtXTmj8P1IfDWdikMsUd6GqHBUMD/1wECfviN9zJg/bed1Zyv2brmQ05rGcKR2RJ0uMGI3YQs36Z57SD4AcvwP4r3aXeDymztjC9KBSrQNcnNtmBfY9imEDsGawR4OIX/d3PuLTgVSHvwhfF72XPiq5XsAxJOgDGW9ms68PZZyhGZVKUaXZHBVGPP3eG3Rf4YDs5FRoaz/JeW4Lw8XZr7u+OiDnH0sbrY++usmT9rbhHm4u5e82pKVZbYSW6H7RQx5FchMKZaj0AMCAwEAAaOBnDCBmTAPBgNVHQ8BAf8EBQMDBwCAMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFMqmw4Xuadma1hgTHk5AGSlh92AxMB0GA1UdDgQWBBTKpsOF7mnZmtYYEx5OQBkpYfdgMTANBgkqhkiG9w0BAQsFAAOCAQEAgI6erA+EwPDGWz1mprU+lZbDNTk9fW1LMuXyoz/wsVpnIQFc0ehJ9gRw+U/sm2BRvbdvoS1hWIFTcwk1glNwFJvF69ZutTFYalj1qp9AU+yu565jdjZzCv4xDmr9Si+FnRHxVcBpR8lKMaTLgzUt8SlwFXq1H9nK0MpgaATxHUaq7za064ZFAaLXKu9FnBjwSAzMAyrVbv35T5DixDURNzsvT3diqvT0a4FaqWeiNba9n4tuW4BdBIPK9s1lA2PfwpUdNxwtEQGVLOGdkmq4GRAtw0iSXoqqo2IaQSXUZ86oS5drayAop9qW3Vf78paek6M4MS7gEkhlZ00e0FT7TQ==","attributes":{"enabled":true,"nbf":1575676066,"exp":1607299066,"created":1575676666,"updated":1575676666,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":true},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["decipherOnly"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":98},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Self","cert_transparency":false},"attributes":{"enabled":true,"created":1575676643,"updated":1575676643}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending"}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/cbf7336fe13c43e2805221ae5493344d","kid":"https://vaultname.vault.azure.net/keys/policyCertificate/cbf7336fe13c43e2805221ae5493344d","sid":"https://vaultname.vault.azure.net/secrets/policyCertificate/cbf7336fe13c43e2805221ae5493344d","x5t":"26EUWwGdoVlfhXTWCWxw4w5_be0","cer":"MIIDVzCCAj+gAwIBAgIQBOft2MiBRfyE7KAc90J0PjANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKoM5BKZ5EIeoCKxfDcx0Ebp22j6CwkfExR4T+2iw7Dy3C5Jm3YCyyVBfl/KWhDi/LiQa9GFeMkrW+B9dpEE/oAn0Eoah9iZfx6qJkDDItBapgmT29nMASccKkWGBANBjCFvR4P2qVKW632/MlDlfxpj2Qx423qY5MbelY0zgSKR31NzO/3zys5F5kXiw5ltCxZ2U0s2kSmrRLrxsTkz+wa2M7j5n6hoFYHVSv2bcxE/QQqTaxOLO2Bu5wt499WQQ/bDiNAEibWXnTg332DEKlr3AcBXCR5LybfTdUwnFvA8N4tLR+okOELVCdH+wKsxJOofyHqR7Z+DNeiV94+/b+0CAwEAAaOBnDCBmTAPBgNVHQ8BAf8EBQMDBwCAMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFKcLNM7NVsjVXpzK3iQapl9+V1FJMB0GA1UdDgQWBBSnCzTOzVbI1V6cyt4kGqZffldRSTANBgkqhkiG9w0BAQsFAAOCAQEAS4zK+iBz3gcbiGbbj+/6Mnph/q4wXfc/R/bxb2OvWLqEMZcIrHlW7NLq3oWzGimtNoIrvfgqNCvTprK0tCmIP3X3GI0QtMu2dAyJyqIACcI6RpbMfwFgM5oAS/4rRgDYwcK5kOmOj9YkYWbI1OPWLGdPp2Kf+5DqVR1PuqCFxp2jRi3XvfNGtijVPpcdQnhJFqvpzFCmuJIfw40nyq55AJPVHpMKHw/7iwa98fF/F/K9PQLtDuXZSteCryUq0fVRtJIhVF++1UIPvFCo7p0cAkGSe3O9DKPSCUwGlf9cDM3WAGXAbNgWKqoKmFPsiewGHHEvB5jnanU0j/cXPTLn4Q==","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":true},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["decipherOnly"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":98},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Self","cert_transparency":false},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['2463']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2475'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/policy?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/policy?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":true},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["decipherOnly"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":98},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Self","cert_transparency":false},"attributes":{"enabled":true,"created":1575676643,"updated":1575676643}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":true},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["decipherOnly"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":98},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Self","cert_transparency":false},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['669']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '669'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"key_props": {"exportable": true, "kty": "EC", "key_size": 256, "reuse_key":
           true, "crv": "P-256"}, "secret_props": {"contentType": "application/x-pkcs12"},
    @@ -250,30 +376,53 @@ interactions:
           98}, "action": {"action_type": "EmailContacts"}}], "issuer": {"name": "Self",
           "cert_transparency": false}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['520']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '520'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/policy?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/policy?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/policy","key_props":{"exportable":true,"kty":"EC","key_size":256,"reuse_key":true,"crv":"P-256"},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["decipherOnly"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":98},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Self","cert_transparency":false},"attributes":{"enabled":true,"created":1575676643,"updated":1575676679}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/policy","key_props":{"exportable":true,"kty":"EC","key_size":256,"reuse_key":true,"crv":"P-256"},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["decipherOnly"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":98},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Self","cert_transparency":false},"attributes":{"enabled":true,"created":1583453254,"updated":1583453275}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['681']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '681'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_recover_and_purge.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_recover_and_purge.yaml
    index d8880e305a8d..557461627ec6 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_recover_and_purge.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client.test_recover_and_purge.yaml
    @@ -2,35 +2,59 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -38,32 +62,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","kid":"https://vaultname.vault.azure.net/keys/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","sid":"https://vaultname.vault.azure.net/secrets/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676716,"updated":1575676716,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676716,"updated":1575676716}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:36 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","kid":"https://vaultname.vault.azure.net/keys/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","sid":"https://vaultname.vault.azure.net/secrets/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453253,"updated":1583453253,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453253,"updated":1583453253}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -71,32 +118,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/2625dd2a57944654811d560043c0f419","kid":"https://vaultname.vault.azure.net/keys/certrec1cfef134b/2625dd2a57944654811d560043c0f419","sid":"https://vaultname.vault.azure.net/secrets/certrec1cfef134b/2625dd2a57944654811d560043c0f419","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","kid":"https://vaultname.vault.azure.net/keys/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","sid":"https://vaultname.vault.azure.net/secrets/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453254,"updated":1583453254,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -104,32 +174,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","kid":"https://vaultname.vault.azure.net/keys/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","sid":"https://vaultname.vault.azure.net/secrets/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","kid":"https://vaultname.vault.azure.net/keys/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","sid":"https://vaultname.vault.azure.net/secrets/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -137,32 +230,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","kid":"https://vaultname.vault.azure.net/keys/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","sid":"https://vaultname.vault.azure.net/secrets/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","kid":"https://vaultname.vault.azure.net/keys/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","sid":"https://vaultname.vault.azure.net/secrets/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -170,32 +286,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","kid":"https://vaultname.vault.azure.net/keys/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","sid":"https://vaultname.vault.azure.net/secrets/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","kid":"https://vaultname.vault.azure.net/keys/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","sid":"https://vaultname.vault.azure.net/secrets/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -203,32 +342,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","kid":"https://vaultname.vault.azure.net/keys/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","sid":"https://vaultname.vault.azure.net/secrets/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","kid":"https://vaultname.vault.azure.net/keys/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","sid":"https://vaultname.vault.azure.net/secrets/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -236,32 +398,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","kid":"https://vaultname.vault.azure.net/keys/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","sid":"https://vaultname.vault.azure.net/secrets/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","kid":"https://vaultname.vault.azure.net/keys/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","sid":"https://vaultname.vault.azure.net/secrets/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -269,32 +454,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg0cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b/21cd84f59eca4c938d54cc8afe9eb27f","kid":"https://vaultname.vault.azure.net/keys/certprg0cfef134b/21cd84f59eca4c938d54cc8afe9eb27f","sid":"https://vaultname.vault.azure.net/secrets/certprg0cfef134b/21cd84f59eca4c938d54cc8afe9eb27f","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certprg0cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b/75e72779fab840d79a32860b4083f525","kid":"https://vaultname.vault.azure.net/keys/certprg0cfef134b/75e72779fab840d79a32860b4083f525","sid":"https://vaultname.vault.azure.net/secrets/certprg0cfef134b/75e72779fab840d79a32860b4083f525","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453257,"updated":1583453257,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453257,"updated":1583453257}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -302,32 +510,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg1cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b/2de1b7e18879486f9eac8b85efb4251a","kid":"https://vaultname.vault.azure.net/keys/certprg1cfef134b/2de1b7e18879486f9eac8b85efb4251a","sid":"https://vaultname.vault.azure.net/secrets/certprg1cfef134b/2de1b7e18879486f9eac8b85efb4251a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certprg1cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b/6421da3d34f94c4a82b9f32108bb9430","kid":"https://vaultname.vault.azure.net/keys/certprg1cfef134b/6421da3d34f94c4a82b9f32108bb9430","sid":"https://vaultname.vault.azure.net/secrets/certprg1cfef134b/6421da3d34f94c4a82b9f32108bb9430","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453257,"updated":1583453257,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453257,"updated":1583453257}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -335,32 +566,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg2cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b/3a7348772d1f47c7b73b5c32695130af","kid":"https://vaultname.vault.azure.net/keys/certprg2cfef134b/3a7348772d1f47c7b73b5c32695130af","sid":"https://vaultname.vault.azure.net/secrets/certprg2cfef134b/3a7348772d1f47c7b73b5c32695130af","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certprg2cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b/daea53f4206941628500d64319ea529f","kid":"https://vaultname.vault.azure.net/keys/certprg2cfef134b/daea53f4206941628500d64319ea529f","sid":"https://vaultname.vault.azure.net/secrets/certprg2cfef134b/daea53f4206941628500d64319ea529f","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453258,"updated":1583453258,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453258,"updated":1583453258}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -368,32 +622,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg3cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b/d74b8953c2eb41eeb899dd8f6432afb7","kid":"https://vaultname.vault.azure.net/keys/certprg3cfef134b/d74b8953c2eb41eeb899dd8f6432afb7","sid":"https://vaultname.vault.azure.net/secrets/certprg3cfef134b/d74b8953c2eb41eeb899dd8f6432afb7","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certprg3cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b/bf82f96f89884b2c8ca82c6d0e80b4f6","kid":"https://vaultname.vault.azure.net/keys/certprg3cfef134b/bf82f96f89884b2c8ca82c6d0e80b4f6","sid":"https://vaultname.vault.azure.net/secrets/certprg3cfef134b/bf82f96f89884b2c8ca82c6d0e80b4f6","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453258,"updated":1583453258,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453258,"updated":1583453258}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -401,32 +678,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg4cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b/69c4cb81b6814b628555b5c5dc386881","kid":"https://vaultname.vault.azure.net/keys/certprg4cfef134b/69c4cb81b6814b628555b5c5dc386881","sid":"https://vaultname.vault.azure.net/secrets/certprg4cfef134b/69c4cb81b6814b628555b5c5dc386881","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certprg4cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b/d7bfccb6728f4e7899a4b2342adfb77d","kid":"https://vaultname.vault.azure.net/keys/certprg4cfef134b/d7bfccb6728f4e7899a4b2342adfb77d","sid":"https://vaultname.vault.azure.net/secrets/certprg4cfef134b/d7bfccb6728f4e7899a4b2342adfb77d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453258,"updated":1583453258,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453258,"updated":1583453258}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -434,32 +734,55 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg5cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b/0d929afcd54a45db86cea5f8073b5c26","kid":"https://vaultname.vault.azure.net/keys/certprg5cfef134b/0d929afcd54a45db86cea5f8073b5c26","sid":"https://vaultname.vault.azure.net/secrets/certprg5cfef134b/0d929afcd54a45db86cea5f8073b5c26","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/certificates/certprg5cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b/c8e352dd731f477aa2421035207991c1","kid":"https://vaultname.vault.azure.net/keys/certprg5cfef134b/c8e352dd731f477aa2421035207991c1","sid":"https://vaultname.vault.azure.net/secrets/certprg5cfef134b/c8e352dd731f477aa2421035207991c1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453259,"updated":1583453259,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453259,"updated":1583453259}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -467,6930 +790,15360 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg6cfef134b/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b/bcf8148bf10c4fbbbfca1ad3fef74425","kid":"https://vaultname.vault.azure.net/keys/certprg6cfef134b/bcf8148bf10c4fbbbfca1ad3fef74425","sid":"https://vaultname.vault.azure.net/secrets/certprg6cfef134b/bcf8148bf10c4fbbbfca1ad3fef74425","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certprg6cfef134b/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b/6bd96f03421847ecaac6f9a388f2c452","kid":"https://vaultname.vault.azure.net/keys/certprg6cfef134b/6bd96f03421847ecaac6f9a388f2c452","sid":"https://vaultname.vault.azure.net/secrets/certprg6cfef134b/6bd96f03421847ecaac6f9a388f2c452","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453260,"updated":1583453260,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453260,"updated":1583453260}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b","deletedDate":1575676722,"scheduledPurgeDate":1583452722,"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","kid":"https://vaultname.vault.azure.net/keys/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","sid":"https://vaultname.vault.azure.net/secrets/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676716,"updated":1575676716,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676716,"updated":1575676716}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:47 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:52 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:57 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b","deletedDate":1575676722,"scheduledPurgeDate":1583452722,"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","kid":"https://vaultname.vault.azure.net/keys/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","sid":"https://vaultname.vault.azure.net/secrets/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676716,"updated":1575676716,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676716,"updated":1575676716}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b","deletedDate":1583453260,"scheduledPurgeDate":1591229260,"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","kid":"https://vaultname.vault.azure.net/keys/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","sid":"https://vaultname.vault.azure.net/secrets/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453253,"updated":1583453253,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453253,"updated":1583453253}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:52 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:58 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b","deletedDate":1583453260,"scheduledPurgeDate":1591229260,"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","kid":"https://vaultname.vault.azure.net/keys/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","sid":"https://vaultname.vault.azure.net/secrets/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453253,"updated":1583453253,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453253,"updated":1583453253}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b","deletedDate":1575676751,"scheduledPurgeDate":1583452751,"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/2625dd2a57944654811d560043c0f419","kid":"https://vaultname.vault.azure.net/keys/certrec1cfef134b/2625dd2a57944654811d560043c0f419","sid":"https://vaultname.vault.azure.net/secrets/certrec1cfef134b/2625dd2a57944654811d560043c0f419","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:15 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:17 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:19 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b","deletedDate":1575676751,"scheduledPurgeDate":1583452751,"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/2625dd2a57944654811d560043c0f419","kid":"https://vaultname.vault.azure.net/keys/certrec1cfef134b/2625dd2a57944654811d560043c0f419","sid":"https://vaultname.vault.azure.net/secrets/certrec1cfef134b/2625dd2a57944654811d560043c0f419","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b","deletedDate":1583453294,"scheduledPurgeDate":1591229294,"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","kid":"https://vaultname.vault.azure.net/keys/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","sid":"https://vaultname.vault.azure.net/secrets/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453254,"updated":1583453254,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:24 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b","deletedDate":1583453294,"scheduledPurgeDate":1591229294,"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","kid":"https://vaultname.vault.azure.net/keys/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","sid":"https://vaultname.vault.azure.net/secrets/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453254,"updated":1583453254,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","kid":"https://vaultname.vault.azure.net/keys/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","sid":"https://vaultname.vault.azure.net/secrets/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:32 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:36 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:42 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","kid":"https://vaultname.vault.azure.net/keys/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","sid":"https://vaultname.vault.azure.net/secrets/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:48 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b","deletedDate":1583453321,"scheduledPurgeDate":1591229321,"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","kid":"https://vaultname.vault.azure.net/keys/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","sid":"https://vaultname.vault.azure.net/secrets/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:58 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b","deletedDate":1583453321,"scheduledPurgeDate":1591229321,"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","kid":"https://vaultname.vault.azure.net/keys/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","sid":"https://vaultname.vault.azure.net/secrets/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b","deletedDate":1575676791,"scheduledPurgeDate":1583452791,"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","kid":"https://vaultname.vault.azure.net/keys/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","sid":"https://vaultname.vault.azure.net/secrets/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:52 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:57 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b","deletedDate":1575676791,"scheduledPurgeDate":1583452791,"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","kid":"https://vaultname.vault.azure.net/keys/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","sid":"https://vaultname.vault.azure.net/secrets/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b","deletedDate":1583453345,"scheduledPurgeDate":1591229345,"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","kid":"https://vaultname.vault.azure.net/keys/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","sid":"https://vaultname.vault.azure.net/secrets/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:28 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b","deletedDate":1583453345,"scheduledPurgeDate":1591229345,"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","kid":"https://vaultname.vault.azure.net/keys/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","sid":"https://vaultname.vault.azure.net/secrets/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b","deletedDate":1575676812,"scheduledPurgeDate":1583452812,"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","kid":"https://vaultname.vault.azure.net/keys/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","sid":"https://vaultname.vault.azure.net/secrets/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:18 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:20 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b","deletedDate":1575676812,"scheduledPurgeDate":1583452812,"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","kid":"https://vaultname.vault.azure.net/keys/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","sid":"https://vaultname.vault.azure.net/secrets/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b","deletedDate":1583453370,"scheduledPurgeDate":1591229370,"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","kid":"https://vaultname.vault.azure.net/keys/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","sid":"https://vaultname.vault.azure.net/secrets/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b","deletedDate":1583453370,"scheduledPurgeDate":1591229370,"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","kid":"https://vaultname.vault.azure.net/keys/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","sid":"https://vaultname.vault.azure.net/secrets/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b","deletedDate":1575676829,"scheduledPurgeDate":1583452829,"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","kid":"https://vaultname.vault.azure.net/keys/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","sid":"https://vaultname.vault.azure.net/secrets/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:29 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:29 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:31 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:33 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:47 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b","deletedDate":1575676829,"scheduledPurgeDate":1583452829,"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","kid":"https://vaultname.vault.azure.net/keys/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","sid":"https://vaultname.vault.azure.net/secrets/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b","deletedDate":1583453398,"scheduledPurgeDate":1591229398,"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","kid":"https://vaultname.vault.azure.net/keys/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","sid":"https://vaultname.vault.azure.net/secrets/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b","deletedDate":1583453398,"scheduledPurgeDate":1591229398,"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","kid":"https://vaultname.vault.azure.net/keys/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","sid":"https://vaultname.vault.azure.net/secrets/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b","deletedDate":1575676852,"scheduledPurgeDate":1583452852,"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","kid":"https://vaultname.vault.azure.net/keys/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","sid":"https://vaultname.vault.azure.net/secrets/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:52 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:52 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:04 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:06 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:08 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b","deletedDate":1575676852,"scheduledPurgeDate":1583452852,"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","kid":"https://vaultname.vault.azure.net/keys/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","sid":"https://vaultname.vault.azure.net/secrets/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b","deletedDate":1583453421,"scheduledPurgeDate":1591229421,"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","kid":"https://vaultname.vault.azure.net/keys/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","sid":"https://vaultname.vault.azure.net/secrets/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b","deletedDate":1583453421,"scheduledPurgeDate":1591229421,"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","kid":"https://vaultname.vault.azure.net/keys/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","sid":"https://vaultname.vault.azure.net/secrets/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b","deletedDate":1575676873,"scheduledPurgeDate":1583452873,"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b/21cd84f59eca4c938d54cc8afe9eb27f","kid":"https://vaultname.vault.azure.net/keys/certprg0cfef134b/21cd84f59eca4c938d54cc8afe9eb27f","sid":"https://vaultname.vault.azure.net/secrets/certprg0cfef134b/21cd84f59eca4c938d54cc8afe9eb27f","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:12 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:12 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:19 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:21 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b","deletedDate":1575676873,"scheduledPurgeDate":1583452873,"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b/21cd84f59eca4c938d54cc8afe9eb27f","kid":"https://vaultname.vault.azure.net/keys/certprg0cfef134b/21cd84f59eca4c938d54cc8afe9eb27f","sid":"https://vaultname.vault.azure.net/secrets/certprg0cfef134b/21cd84f59eca4c938d54cc8afe9eb27f","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b","deletedDate":1583453447,"scheduledPurgeDate":1591229447,"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b/75e72779fab840d79a32860b4083f525","kid":"https://vaultname.vault.azure.net/keys/certprg0cfef134b/75e72779fab840d79a32860b4083f525","sid":"https://vaultname.vault.azure.net/secrets/certprg0cfef134b/75e72779fab840d79a32860b4083f525","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453257,"updated":1583453257,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453257,"updated":1583453257}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:58 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b","deletedDate":1583453447,"scheduledPurgeDate":1591229447,"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b/75e72779fab840d79a32860b4083f525","kid":"https://vaultname.vault.azure.net/keys/certprg0cfef134b/75e72779fab840d79a32860b4083f525","sid":"https://vaultname.vault.azure.net/secrets/certprg0cfef134b/75e72779fab840d79a32860b4083f525","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453257,"updated":1583453257,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453257,"updated":1583453257}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b","deletedDate":1575676890,"scheduledPurgeDate":1583452890,"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b/2de1b7e18879486f9eac8b85efb4251a","kid":"https://vaultname.vault.azure.net/keys/certprg1cfef134b/2de1b7e18879486f9eac8b85efb4251a","sid":"https://vaultname.vault.azure.net/secrets/certprg1cfef134b/2de1b7e18879486f9eac8b85efb4251a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:32 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:36 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:42 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:48 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b","deletedDate":1575676890,"scheduledPurgeDate":1583452890,"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b/2de1b7e18879486f9eac8b85efb4251a","kid":"https://vaultname.vault.azure.net/keys/certprg1cfef134b/2de1b7e18879486f9eac8b85efb4251a","sid":"https://vaultname.vault.azure.net/secrets/certprg1cfef134b/2de1b7e18879486f9eac8b85efb4251a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b","deletedDate":1583453472,"scheduledPurgeDate":1591229472,"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b/6421da3d34f94c4a82b9f32108bb9430","kid":"https://vaultname.vault.azure.net/keys/certprg1cfef134b/6421da3d34f94c4a82b9f32108bb9430","sid":"https://vaultname.vault.azure.net/secrets/certprg1cfef134b/6421da3d34f94c4a82b9f32108bb9430","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453257,"updated":1583453257,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453257,"updated":1583453257}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b","deletedDate":1583453472,"scheduledPurgeDate":1591229472,"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b/6421da3d34f94c4a82b9f32108bb9430","kid":"https://vaultname.vault.azure.net/keys/certprg1cfef134b/6421da3d34f94c4a82b9f32108bb9430","sid":"https://vaultname.vault.azure.net/secrets/certprg1cfef134b/6421da3d34f94c4a82b9f32108bb9430","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453257,"updated":1583453257,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453257,"updated":1583453257}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b","deletedDate":1575676913,"scheduledPurgeDate":1583452913,"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b/3a7348772d1f47c7b73b5c32695130af","kid":"https://vaultname.vault.azure.net/keys/certprg2cfef134b/3a7348772d1f47c7b73b5c32695130af","sid":"https://vaultname.vault.azure.net/secrets/certprg2cfef134b/3a7348772d1f47c7b73b5c32695130af","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:53 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:53 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:55 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:57 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b","deletedDate":1575676913,"scheduledPurgeDate":1583452913,"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b/3a7348772d1f47c7b73b5c32695130af","kid":"https://vaultname.vault.azure.net/keys/certprg2cfef134b/3a7348772d1f47c7b73b5c32695130af","sid":"https://vaultname.vault.azure.net/secrets/certprg2cfef134b/3a7348772d1f47c7b73b5c32695130af","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b","deletedDate":1583453498,"scheduledPurgeDate":1591229498,"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b/daea53f4206941628500d64319ea529f","kid":"https://vaultname.vault.azure.net/keys/certprg2cfef134b/daea53f4206941628500d64319ea529f","sid":"https://vaultname.vault.azure.net/secrets/certprg2cfef134b/daea53f4206941628500d64319ea529f","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453258,"updated":1583453258,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453258,"updated":1583453258}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:11:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b","deletedDate":1583453498,"scheduledPurgeDate":1591229498,"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b/daea53f4206941628500d64319ea529f","kid":"https://vaultname.vault.azure.net/keys/certprg2cfef134b/daea53f4206941628500d64319ea529f","sid":"https://vaultname.vault.azure.net/secrets/certprg2cfef134b/daea53f4206941628500d64319ea529f","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453258,"updated":1583453258,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453258,"updated":1583453258}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b","deletedDate":1575676934,"scheduledPurgeDate":1583452934,"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b/d74b8953c2eb41eeb899dd8f6432afb7","kid":"https://vaultname.vault.azure.net/keys/certprg3cfef134b/d74b8953c2eb41eeb899dd8f6432afb7","sid":"https://vaultname.vault.azure.net/secrets/certprg3cfef134b/d74b8953c2eb41eeb899dd8f6432afb7","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:18 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:20 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:27 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:32 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b","deletedDate":1575676934,"scheduledPurgeDate":1583452934,"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b/d74b8953c2eb41eeb899dd8f6432afb7","kid":"https://vaultname.vault.azure.net/keys/certprg3cfef134b/d74b8953c2eb41eeb899dd8f6432afb7","sid":"https://vaultname.vault.azure.net/secrets/certprg3cfef134b/d74b8953c2eb41eeb899dd8f6432afb7","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:36 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b","deletedDate":1583453522,"scheduledPurgeDate":1591229522,"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b/bf82f96f89884b2c8ca82c6d0e80b4f6","kid":"https://vaultname.vault.azure.net/keys/certprg3cfef134b/bf82f96f89884b2c8ca82c6d0e80b4f6","sid":"https://vaultname.vault.azure.net/secrets/certprg3cfef134b/bf82f96f89884b2c8ca82c6d0e80b4f6","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453258,"updated":1583453258,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453258,"updated":1583453258}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:24 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b","deletedDate":1583453522,"scheduledPurgeDate":1591229522,"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b/bf82f96f89884b2c8ca82c6d0e80b4f6","kid":"https://vaultname.vault.azure.net/keys/certprg3cfef134b/bf82f96f89884b2c8ca82c6d0e80b4f6","sid":"https://vaultname.vault.azure.net/secrets/certprg3cfef134b/bf82f96f89884b2c8ca82c6d0e80b4f6","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453258,"updated":1583453258,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453258,"updated":1583453258}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b","deletedDate":1575676958,"scheduledPurgeDate":1583452958,"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b/69c4cb81b6814b628555b5c5dc386881","kid":"https://vaultname.vault.azure.net/keys/certprg4cfef134b/69c4cb81b6814b628555b5c5dc386881","sid":"https://vaultname.vault.azure.net/secrets/certprg4cfef134b/69c4cb81b6814b628555b5c5dc386881","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:42 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:48 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:52 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b","deletedDate":1575676958,"scheduledPurgeDate":1583452958,"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b/69c4cb81b6814b628555b5c5dc386881","kid":"https://vaultname.vault.azure.net/keys/certprg4cfef134b/69c4cb81b6814b628555b5c5dc386881","sid":"https://vaultname.vault.azure.net/secrets/certprg4cfef134b/69c4cb81b6814b628555b5c5dc386881","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:57 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b","deletedDate":1583453552,"scheduledPurgeDate":1591229552,"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b/d7bfccb6728f4e7899a4b2342adfb77d","kid":"https://vaultname.vault.azure.net/keys/certprg4cfef134b/d7bfccb6728f4e7899a4b2342adfb77d","sid":"https://vaultname.vault.azure.net/secrets/certprg4cfef134b/d7bfccb6728f4e7899a4b2342adfb77d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453258,"updated":1583453258,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453258,"updated":1583453258}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b","deletedDate":1583453552,"scheduledPurgeDate":1591229552,"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b/d7bfccb6728f4e7899a4b2342adfb77d","kid":"https://vaultname.vault.azure.net/keys/certprg4cfef134b/d7bfccb6728f4e7899a4b2342adfb77d","sid":"https://vaultname.vault.azure.net/secrets/certprg4cfef134b/d7bfccb6728f4e7899a4b2342adfb77d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453258,"updated":1583453258,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453258,"updated":1583453258}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b","deletedDate":1575676979,"scheduledPurgeDate":1583452979,"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b/0d929afcd54a45db86cea5f8073b5c26","kid":"https://vaultname.vault.azure.net/keys/certprg5cfef134b/0d929afcd54a45db86cea5f8073b5c26","sid":"https://vaultname.vault.azure.net/secrets/certprg5cfef134b/0d929afcd54a45db86cea5f8073b5c26","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b","deletedDate":1575676979,"scheduledPurgeDate":1583452979,"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b/0d929afcd54a45db86cea5f8073b5c26","kid":"https://vaultname.vault.azure.net/keys/certprg5cfef134b/0d929afcd54a45db86cea5f8073b5c26","sid":"https://vaultname.vault.azure.net/secrets/certprg5cfef134b/0d929afcd54a45db86cea5f8073b5c26","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b","deletedDate":1583453575,"scheduledPurgeDate":1591229575,"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b/c8e352dd731f477aa2421035207991c1","kid":"https://vaultname.vault.azure.net/keys/certprg5cfef134b/c8e352dd731f477aa2421035207991c1","sid":"https://vaultname.vault.azure.net/secrets/certprg5cfef134b/c8e352dd731f477aa2421035207991c1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453259,"updated":1583453259,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453259,"updated":1583453259}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:12:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b","deletedDate":1583453575,"scheduledPurgeDate":1591229575,"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b/c8e352dd731f477aa2421035207991c1","kid":"https://vaultname.vault.azure.net/keys/certprg5cfef134b/c8e352dd731f477aa2421035207991c1","sid":"https://vaultname.vault.azure.net/secrets/certprg5cfef134b/c8e352dd731f477aa2421035207991c1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453259,"updated":1583453259,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453259,"updated":1583453259}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b","deletedDate":1575676996,"scheduledPurgeDate":1583452996,"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b/bcf8148bf10c4fbbbfca1ad3fef74425","kid":"https://vaultname.vault.azure.net/keys/certprg6cfef134b/bcf8148bf10c4fbbbfca1ad3fef74425","sid":"https://vaultname.vault.azure.net/secrets/certprg6cfef134b/bcf8148bf10c4fbbbfca1ad3fef74425","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:18 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:20 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['100']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:33 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b","deletedDate":1575676996,"scheduledPurgeDate":1583452996,"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b/bcf8148bf10c4fbbbfca1ad3fef74425","kid":"https://vaultname.vault.azure.net/keys/certprg6cfef134b/bcf8148bf10c4fbbbfca1ad3fef74425","sid":"https://vaultname.vault.azure.net/secrets/certprg6cfef134b/bcf8148bf10c4fbbbfca1ad3fef74425","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2013']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:36 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates?api-version=7.0
    -  response:
    -    body: {string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b","deletedDate":1575676873,"scheduledPurgeDate":1583452873,"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b","deletedDate":1575676890,"scheduledPurgeDate":1583452890,"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b","deletedDate":1575676913,"scheduledPurgeDate":1583452913,"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b","deletedDate":1575676934,"scheduledPurgeDate":1583452934,"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b","deletedDate":1575676958,"scheduledPurgeDate":1583452958,"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b","deletedDate":1575676979,"scheduledPurgeDate":1583452979,"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b","deletedDate":1575676996,"scheduledPurgeDate":1583452996,"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b","deletedDate":1575676722,"scheduledPurgeDate":1583452722,"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676716,"updated":1575676716,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b","deletedDate":1575676751,"scheduledPurgeDate":1583452751,"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b","deletedDate":1575676791,"scheduledPurgeDate":1583452791,"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b","deletedDate":1575676812,"scheduledPurgeDate":1583452812,"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b","deletedDate":1575676829,"scheduledPurgeDate":1583452829,"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b","deletedDate":1575676852,"scheduledPurgeDate":1583452852,"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['6019']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b","deletedDate":1583453599,"scheduledPurgeDate":1591229599,"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b/6bd96f03421847ecaac6f9a388f2c452","kid":"https://vaultname.vault.azure.net/keys/certprg6cfef134b/6bd96f03421847ecaac6f9a388f2c452","sid":"https://vaultname.vault.azure.net/secrets/certprg6cfef134b/6bd96f03421847ecaac6f9a388f2c452","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453260,"updated":1583453260,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453260,"updated":1583453260}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '100'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b","deletedDate":1583453599,"scheduledPurgeDate":1591229599,"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b/6bd96f03421847ecaac6f9a388f2c452","kid":"https://vaultname.vault.azure.net/keys/certprg6cfef134b/6bd96f03421847ecaac6f9a388f2c452","sid":"https://vaultname.vault.azure.net/secrets/certprg6cfef134b/6bd96f03421847ecaac6f9a388f2c452","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453260,"updated":1583453260,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453260,"updated":1583453260}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2013'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b","deletedDate":1583453447,"scheduledPurgeDate":1591229447,"id":"https://vaultname.vault.azure.net/certificates/certprg0cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453257,"updated":1583453257,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b","deletedDate":1583453472,"scheduledPurgeDate":1591229472,"id":"https://vaultname.vault.azure.net/certificates/certprg1cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453257,"updated":1583453257,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b","deletedDate":1583453498,"scheduledPurgeDate":1591229498,"id":"https://vaultname.vault.azure.net/certificates/certprg2cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453258,"updated":1583453258,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b","deletedDate":1583453522,"scheduledPurgeDate":1591229522,"id":"https://vaultname.vault.azure.net/certificates/certprg3cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453258,"updated":1583453258,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b","deletedDate":1583453552,"scheduledPurgeDate":1591229552,"id":"https://vaultname.vault.azure.net/certificates/certprg4cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453258,"updated":1583453258,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b","deletedDate":1583453575,"scheduledPurgeDate":1591229575,"id":"https://vaultname.vault.azure.net/certificates/certprg5cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453259,"updated":1583453259,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b","deletedDate":1583453599,"scheduledPurgeDate":1591229599,"id":"https://vaultname.vault.azure.net/certificates/certprg6cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453260,"updated":1583453260,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b","deletedDate":1583453260,"scheduledPurgeDate":1591229260,"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453253,"updated":1583453253,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b","deletedDate":1583453294,"scheduledPurgeDate":1591229294,"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453254,"updated":1583453254,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b","deletedDate":1583453321,"scheduledPurgeDate":1591229321,"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b","deletedDate":1583453345,"scheduledPurgeDate":1591229345,"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b","deletedDate":1583453370,"scheduledPurgeDate":1591229370,"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b","deletedDate":1583453398,"scheduledPurgeDate":1591229398,"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b","deletedDate":1583453421,"scheduledPurgeDate":1591229421,"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '6019'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","kid":"https://vaultname.vault.azure.net/keys/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","sid":"https://vaultname.vault.azure.net/secrets/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676716,"updated":1575676716,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676716,"updated":1575676716}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:47 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:51 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:53 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:55 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec0cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:03:57 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","kid":"https://vaultname.vault.azure.net/keys/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","sid":"https://vaultname.vault.azure.net/secrets/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676716,"updated":1575676716,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676716,"updated":1575676716}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec0cfef134b/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","kid":"https://vaultname.vault.azure.net/keys/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","sid":"https://vaultname.vault.azure.net/secrets/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453253,"updated":1583453253,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453253,"updated":1583453253}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:13:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec0cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","kid":"https://vaultname.vault.azure.net/keys/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","sid":"https://vaultname.vault.azure.net/secrets/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453253,"updated":1583453253,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453253,"updated":1583453253}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/2625dd2a57944654811d560043c0f419","kid":"https://vaultname.vault.azure.net/keys/certrec1cfef134b/2625dd2a57944654811d560043c0f419","sid":"https://vaultname.vault.azure.net/secrets/certrec1cfef134b/2625dd2a57944654811d560043c0f419","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:04 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:06 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:08 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:12 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec1cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:18 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/2625dd2a57944654811d560043c0f419","kid":"https://vaultname.vault.azure.net/keys/certrec1cfef134b/2625dd2a57944654811d560043c0f419","sid":"https://vaultname.vault.azure.net/secrets/certrec1cfef134b/2625dd2a57944654811d560043c0f419","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:20 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec1cfef134b/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","kid":"https://vaultname.vault.azure.net/keys/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","sid":"https://vaultname.vault.azure.net/secrets/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453254,"updated":1583453254,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec1cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","kid":"https://vaultname.vault.azure.net/keys/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","sid":"https://vaultname.vault.azure.net/secrets/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453254,"updated":1583453254,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","kid":"https://vaultname.vault.azure.net/keys/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","sid":"https://vaultname.vault.azure.net/secrets/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:27 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:29 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:32 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:36 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec2cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","kid":"https://vaultname.vault.azure.net/keys/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","sid":"https://vaultname.vault.azure.net/secrets/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:42 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec2cfef134b/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","kid":"https://vaultname.vault.azure.net/keys/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","sid":"https://vaultname.vault.azure.net/secrets/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec2cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:14:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","kid":"https://vaultname.vault.azure.net/keys/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","sid":"https://vaultname.vault.azure.net/secrets/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","kid":"https://vaultname.vault.azure.net/keys/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","sid":"https://vaultname.vault.azure.net/secrets/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:51 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:53 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:55 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:57 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:04:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec3cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","kid":"https://vaultname.vault.azure.net/keys/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","sid":"https://vaultname.vault.azure.net/secrets/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec3cfef134b/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","kid":"https://vaultname.vault.azure.net/keys/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","sid":"https://vaultname.vault.azure.net/secrets/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec3cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","kid":"https://vaultname.vault.azure.net/keys/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","sid":"https://vaultname.vault.azure.net/secrets/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","kid":"https://vaultname.vault.azure.net/keys/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","sid":"https://vaultname.vault.azure.net/secrets/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:18 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:20 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec4cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","kid":"https://vaultname.vault.azure.net/keys/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","sid":"https://vaultname.vault.azure.net/secrets/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec4cfef134b/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","kid":"https://vaultname.vault.azure.net/keys/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","sid":"https://vaultname.vault.azure.net/secrets/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec4cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","kid":"https://vaultname.vault.azure.net/keys/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","sid":"https://vaultname.vault.azure.net/secrets/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","kid":"https://vaultname.vault.azure.net/keys/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","sid":"https://vaultname.vault.azure.net/secrets/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:33 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec5cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","kid":"https://vaultname.vault.azure.net/keys/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","sid":"https://vaultname.vault.azure.net/secrets/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec5cfef134b/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","kid":"https://vaultname.vault.azure.net/keys/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","sid":"https://vaultname.vault.azure.net/secrets/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:15:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec5cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","kid":"https://vaultname.vault.azure.net/keys/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","sid":"https://vaultname.vault.azure.net/secrets/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","kid":"https://vaultname.vault.azure.net/keys/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","sid":"https://vaultname.vault.azure.net/secrets/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:48 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:48 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:52 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:05:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:06:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:06:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec6cfef134b"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['92']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:06:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","kid":"https://vaultname.vault.azure.net/keys/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","sid":"https://vaultname.vault.azure.net/secrets/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:06:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec6cfef134b/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","kid":"https://vaultname.vault.azure.net/keys/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","sid":"https://vaultname.vault.azure.net/secrets/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:24 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:28 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec6cfef134b"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '92'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","kid":"https://vaultname.vault.azure.net/keys/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","sid":"https://vaultname.vault.azure.net/secrets/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:16:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:06:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg0cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Fri, 06 Mar 2020 00:16:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:06:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg1cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Fri, 06 Mar 2020 00:16:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:06:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg2cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Fri, 06 Mar 2020 00:16:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:06:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg3cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Fri, 06 Mar 2020 00:16:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:06:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg4cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Fri, 06 Mar 2020 00:16:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:06:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg5cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Fri, 06 Mar 2020 00:16:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:06:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates?api-version=7.0
    -  response:
    -    body: {string: '{"value":[],"nextLink":null}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['28']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:07:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","kid":"https://vaultname.vault.azure.net/keys/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","sid":"https://vaultname.vault.azure.net/secrets/certrec0cfef134b/fc1de2c1491f4d579d4114991474c19c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676716,"updated":1575676716,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676716,"updated":1575676716}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:07:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/2625dd2a57944654811d560043c0f419","kid":"https://vaultname.vault.azure.net/keys/certrec1cfef134b/2625dd2a57944654811d560043c0f419","sid":"https://vaultname.vault.azure.net/secrets/certrec1cfef134b/2625dd2a57944654811d560043c0f419","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:07:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","kid":"https://vaultname.vault.azure.net/keys/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","sid":"https://vaultname.vault.azure.net/secrets/certrec2cfef134b/2ef1ef42aeec45cdadf1b1db62a8c46e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:07:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","kid":"https://vaultname.vault.azure.net/keys/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","sid":"https://vaultname.vault.azure.net/secrets/certrec3cfef134b/5a2c625760514bfaab32c1a0218d8364","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:07:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","kid":"https://vaultname.vault.azure.net/keys/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","sid":"https://vaultname.vault.azure.net/secrets/certrec4cfef134b/a16ab10423824176aeebad31fa8fa8a3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:07:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","kid":"https://vaultname.vault.azure.net/keys/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","sid":"https://vaultname.vault.azure.net/secrets/certrec5cfef134b/656b51fc931c4208a34c92b6de6b0a49","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:07:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","kid":"https://vaultname.vault.azure.net/keys/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","sid":"https://vaultname.vault.azure.net/secrets/certrec6cfef134b/9a676599f0dc418281344dbb76c80b42","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1855']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:07:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg6cfef134b?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Fri, 06 Mar 2020 00:16:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":[],"nextLink":null}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '28'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:17:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec0cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","kid":"https://vaultname.vault.azure.net/keys/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","sid":"https://vaultname.vault.azure.net/secrets/certrec0cfef134b/fdefc1d3fdcc4d2d893df05d11c2f19a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453253,"updated":1583453253,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec0cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453253,"updated":1583453253}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:17:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec1cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","kid":"https://vaultname.vault.azure.net/keys/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","sid":"https://vaultname.vault.azure.net/secrets/certrec1cfef134b/5c5700b510a04070abf26e680be5ab44","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453254,"updated":1583453254,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec1cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:17:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec2cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","kid":"https://vaultname.vault.azure.net/keys/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","sid":"https://vaultname.vault.azure.net/secrets/certrec2cfef134b/0f4f4b8640e744ff8658934362887f75","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec2cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:17:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec3cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","kid":"https://vaultname.vault.azure.net/keys/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","sid":"https://vaultname.vault.azure.net/secrets/certrec3cfef134b/e74134d866eb46c0a888e2d85205013c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453255,"updated":1583453255,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec3cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:17:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec4cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","kid":"https://vaultname.vault.azure.net/keys/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","sid":"https://vaultname.vault.azure.net/secrets/certrec4cfef134b/83c2f44d505e43d0b8d180da067f73a4","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec4cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:17:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec5cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","kid":"https://vaultname.vault.azure.net/keys/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","sid":"https://vaultname.vault.azure.net/secrets/certrec5cfef134b/225e8104261743738969dc5584dfd6e8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec5cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:17:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec6cfef134b/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","kid":"https://vaultname.vault.azure.net/keys/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","sid":"https://vaultname.vault.azure.net/secrets/certrec6cfef134b/ee12c5e6bc8d44298ac2ff5e5a6c6c1d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453256,"updated":1583453256,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec6cfef134b/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453256,"updated":1583453256}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1855'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:17:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_backup_restore.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_backup_restore.yaml
    index cc9fbbcda037..9f9ae04cb79c 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_backup_restore.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_backup_restore.yaml
    @@ -2,227 +2,455 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:59 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, q52u23bzaxdhsd5aluiscswa.vault.azure.net,
    -        /certificates/certcfa1497/create, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://wcmq7zsqkzfbhz4u3ffxf5hd.vault.azure.net/certificates/certcfa1497/create?api-version=7.1-preview
     - request:
         body: '{"policy": {"x509_props": {"subject": "CN=DefaultPolicy", "sans": {"upns":
           ["john.doe@domain.com"]}}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['130']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '130'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANZHCdkLJNctxQVdKdaqREVmUwhtBkii92b/hxtlbVEVBjFpGZCKlklJ4yZFJJeWdVRkaG42FU5uwI7op6cUdxlfnhg1YRkzlEl0zHxUDSah7+tF9zQcfUhH66usr9fmUEHLuFaJxxVMwnwh7Y0+CQTdO4Z/d35Bwq2F4YBLTZUCdlkCQAZy6pVLce3ksxAcS25PQSLklbzouIqdhoOCnVKo0ySszHSWfcImzmgWg766ouP/Z7e1ccZCzmRLTMqzjaB0AevLJMFxO0fsAM/5PImJFUjyLbMYL0KqEgWIY6fBTI6QeR3A2UcJWFUEe8Y5CsM0lDBOvpOe2m0naoAQTYUCAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQALo5e3mO3jULW/gOjebrX4Vf1fwhYbilOjo9svbwoS4pLmJnYVOYdbaFz5UwWQQbpiVMpFKlQOehYbellvDla1IOWCzKOTz+DPrW744erJ2fyoX+OBI5pOhII46KWSjIxFhd9FPYw6dLj4EHz/EhrW3pYHCu2L6ZUCgqN6uHCj2wKXeKT2YTbr4RVUNLgoIHw6lVohzGaBTt+LNURoZIJUzZMrkKpC++v8POlXdo5vYkXZTlUToh2ifKeSLhOvyde8gyLJl1dDos59vIzleDqef+3+1tBdavZ3o2u+2Y+INCmevKUhysTOxOpUaqwpKBgZf+KIQdODnUXdXWOmwQzb","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ9Ki4TUIlTe0engmOTrJ7isYMjpnOtvpp+PwZhvvgOkGQ4whTvxb9XFhrTPyeDcBXyIpnrOrklOzZuhcQuieiLg13iibvYtmaxu247mMmCo/vDO2FjMRBiXMjIjwj3aei4vBJURGAjnC4g4BDcl/PGdxoGP72CEhKqpmQfHo8e+tkCNtOyL1SKOWDTn/vnhGB6DMy+25yBz6zcwbdEriDPo375WqvuKejiVBGUWrSkH45frOLq1derjfGUC9orgDzhF54Ggv5FJHia/F7X5tqx4rygkqS8/jYcJV8Y/QYJAE2HOvpQlhNLmMa1I/jCyCQ46d53PKyLLwT6FDSJe5BcCAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBsHZMQLGkpVZ9FhzVXERtQ/PbKFK3FPX988n1JqWhgZnA2jaJlwhBai/YQrYEvQ3SqlS4tkkiGcuB05oPySFMiqlrYuSMaz8UddRF48sBLzALS5h7xOfu4nUJBuyN6nhlry/sb0RhHEU8I5rVMg//ouThIrBNiUXEfsXpFexCS3iYNx1oWxP/RDcQjNpZwblDVCS3NPedAhKTsTce/b6KPDnEY8rM8M774D5kGJUpS0yGhEEykHfz2AXajyaARDJF1D6Yo8RKapBGZEoPeCe9ObCtCe//iOxpwLlHT3XcS0YZtq7CBCivgrtdAGwi4AVhNUcNlrD/L1H8el1Qt7djJ","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"5e98e4874a7a4b00b4f21f993006e09b"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"05ec5ea749b04eba9e922282fe09966b"}'
         headers:
           cache-control: no-cache
           content-length: '1365'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:01 GMT
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
           expires: '-1'
    -      location: [h, t, t, p, s, ':', /, /, q, '5', '2', u, '2', '3', b, z, a, x, d,
    -        h, s, d, '5', a, l, u, i, s, c, s, w, a, ., v, a, u, l, t, ., a, z, u, r,
    -        e, ., n, e, t, /, c, e, r, t, i, f, i, c, a, t, e, s, /, c, e, r, t, c, f,
    -        a, '1', '4', '9', '7', /, p, e, n, d, i, n, g, '?', a, p, i, '-', v, e, r,
    -        s, i, o, n, '=', '7', ., '0', '&', r, e, q, u, e, s, t, _, i, d, '=', '5',
    -        e, '9', '8', e, '4', '8', '7', '4', a, '7', a, '4', b, '0', '0', b, '4', f,
    -        '2', '1', f, '9', '9', '3', '0', '0', '6', e, '0', '9', b]
    +      location:
    +      - h
    +      - t
    +      - t
    +      - p
    +      - s
    +      - ':'
    +      - /
    +      - /
    +      - w
    +      - c
    +      - m
    +      - q
    +      - '7'
    +      - z
    +      - s
    +      - q
    +      - k
    +      - z
    +      - f
    +      - b
    +      - h
    +      - z
    +      - '4'
    +      - u
    +      - '3'
    +      - f
    +      - f
    +      - x
    +      - f
    +      - '5'
    +      - h
    +      - d
    +      - .
    +      - v
    +      - a
    +      - u
    +      - l
    +      - t
    +      - .
    +      - a
    +      - z
    +      - u
    +      - r
    +      - e
    +      - .
    +      - n
    +      - e
    +      - t
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - s
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - c
    +      - f
    +      - a
    +      - '1'
    +      - '4'
    +      - '9'
    +      - '7'
    +      - /
    +      - p
    +      - e
    +      - n
    +      - d
    +      - i
    +      - n
    +      - g
    +      - '?'
    +      - a
    +      - p
    +      - i
    +      - '-'
    +      - v
    +      - e
    +      - r
    +      - s
    +      - i
    +      - o
    +      - n
    +      - '='
    +      - '7'
    +      - .
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
    +      - '&'
    +      - r
    +      - e
    +      - q
    +      - u
    +      - e
    +      - s
    +      - t
    +      - _
    +      - i
    +      - d
    +      - '='
    +      - '0'
    +      - '5'
    +      - e
    +      - c
    +      - '5'
    +      - e
    +      - a
    +      - '7'
    +      - '4'
    +      - '9'
    +      - b
    +      - '0'
    +      - '4'
    +      - e
    +      - b
    +      - a
    +      - '9'
    +      - e
    +      - '9'
    +      - '2'
    +      - '2'
    +      - '2'
    +      - '8'
    +      - '2'
    +      - f
    +      - e
    +      - '0'
    +      - '9'
    +      - '9'
    +      - '6'
    +      - '6'
    +      - b
           pragma: no-cache
           retry-after: '10'
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
    -    status: {code: 202, message: Accepted}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, q52u23bzaxdhsd5aluiscswa.vault.azure.net,
    -        /certificates/certcfa1497/create, api-version=7.0, '']
    +    status:
    +      code: 202
    +      message: Accepted
    +    url: https://wcmq7zsqkzfbhz4u3ffxf5hd.vault.azure.net/certificates/certcfa1497/create?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANZHCdkLJNctxQVdKdaqREVmUwhtBkii92b/hxtlbVEVBjFpGZCKlklJ4yZFJJeWdVRkaG42FU5uwI7op6cUdxlfnhg1YRkzlEl0zHxUDSah7+tF9zQcfUhH66usr9fmUEHLuFaJxxVMwnwh7Y0+CQTdO4Z/d35Bwq2F4YBLTZUCdlkCQAZy6pVLce3ksxAcS25PQSLklbzouIqdhoOCnVKo0ySszHSWfcImzmgWg766ouP/Z7e1ccZCzmRLTMqzjaB0AevLJMFxO0fsAM/5PImJFUjyLbMYL0KqEgWIY6fBTI6QeR3A2UcJWFUEe8Y5CsM0lDBOvpOe2m0naoAQTYUCAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQALo5e3mO3jULW/gOjebrX4Vf1fwhYbilOjo9svbwoS4pLmJnYVOYdbaFz5UwWQQbpiVMpFKlQOehYbellvDla1IOWCzKOTz+DPrW744erJ2fyoX+OBI5pOhII46KWSjIxFhd9FPYw6dLj4EHz/EhrW3pYHCu2L6ZUCgqN6uHCj2wKXeKT2YTbr4RVUNLgoIHw6lVohzGaBTt+LNURoZIJUzZMrkKpC++v8POlXdo5vYkXZTlUToh2ifKeSLhOvyde8gyLJl1dDos59vIzleDqef+3+1tBdavZ3o2u+2Y+INCmevKUhysTOxOpUaqwpKBgZf+KIQdODnUXdXWOmwQzb","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ9Ki4TUIlTe0engmOTrJ7isYMjpnOtvpp+PwZhvvgOkGQ4whTvxb9XFhrTPyeDcBXyIpnrOrklOzZuhcQuieiLg13iibvYtmaxu247mMmCo/vDO2FjMRBiXMjIjwj3aei4vBJURGAjnC4g4BDcl/PGdxoGP72CEhKqpmQfHo8e+tkCNtOyL1SKOWDTn/vnhGB6DMy+25yBz6zcwbdEriDPo375WqvuKejiVBGUWrSkH45frOLq1derjfGUC9orgDzhF54Ggv5FJHia/F7X5tqx4rygkqS8/jYcJV8Y/QYJAE2HOvpQlhNLmMa1I/jCyCQ46d53PKyLLwT6FDSJe5BcCAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBsHZMQLGkpVZ9FhzVXERtQ/PbKFK3FPX988n1JqWhgZnA2jaJlwhBai/YQrYEvQ3SqlS4tkkiGcuB05oPySFMiqlrYuSMaz8UddRF48sBLzALS5h7xOfu4nUJBuyN6nhlry/sb0RhHEU8I5rVMg//ouThIrBNiUXEfsXpFexCS3iYNx1oWxP/RDcQjNpZwblDVCS3NPedAhKTsTce/b6KPDnEY8rM8M774D5kGJUpS0yGhEEykHfz2AXajyaARDJF1D6Yo8RKapBGZEoPeCe9ObCtCe//iOxpwLlHT3XcS0YZtq7CBCivgrtdAGwi4AVhNUcNlrD/L1H8el1Qt7djJ","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"5e98e4874a7a4b00b4f21f993006e09b"}'}
    -    headers: {cache-control: no-cache, content-length: '1365', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:01 GMT', expires: '-1', pragma: no-cache,
    -      retry-after: '10', server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, q52u23bzaxdhsd5aluiscswa.vault.azure.net,
    -        /certificates/certcfa1497/pending, api-version=7.0, '']
    -- request:
    -    body: null
    +        time based on the issuer provider. Please check again later.","request_id":"05ec5ea749b04eba9e922282fe09966b"}'
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/pending?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANZHCdkLJNctxQVdKdaqREVmUwhtBkii92b/hxtlbVEVBjFpGZCKlklJ4yZFJJeWdVRkaG42FU5uwI7op6cUdxlfnhg1YRkzlEl0zHxUDSah7+tF9zQcfUhH66usr9fmUEHLuFaJxxVMwnwh7Y0+CQTdO4Z/d35Bwq2F4YBLTZUCdlkCQAZy6pVLce3ksxAcS25PQSLklbzouIqdhoOCnVKo0ySszHSWfcImzmgWg766ouP/Z7e1ccZCzmRLTMqzjaB0AevLJMFxO0fsAM/5PImJFUjyLbMYL0KqEgWIY6fBTI6QeR3A2UcJWFUEe8Y5CsM0lDBOvpOe2m0naoAQTYUCAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQALo5e3mO3jULW/gOjebrX4Vf1fwhYbilOjo9svbwoS4pLmJnYVOYdbaFz5UwWQQbpiVMpFKlQOehYbellvDla1IOWCzKOTz+DPrW744erJ2fyoX+OBI5pOhII46KWSjIxFhd9FPYw6dLj4EHz/EhrW3pYHCu2L6ZUCgqN6uHCj2wKXeKT2YTbr4RVUNLgoIHw6lVohzGaBTt+LNURoZIJUzZMrkKpC++v8POlXdo5vYkXZTlUToh2ifKeSLhOvyde8gyLJl1dDos59vIzleDqef+3+1tBdavZ3o2u+2Y+INCmevKUhysTOxOpUaqwpKBgZf+KIQdODnUXdXWOmwQzb","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"5e98e4874a7a4b00b4f21f993006e09b"}'}
    -    headers: {cache-control: no-cache, content-length: '1365', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:10 GMT', expires: '-1', pragma: no-cache,
    -      retry-after: '10', server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, q52u23bzaxdhsd5aluiscswa.vault.azure.net,
    -        /certificates/certcfa1497/pending, api-version=7.0, '']
    +      cache-control: no-cache
    +      content-length: '1365'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      retry-after: '10'
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wcmq7zsqkzfbhz4u3ffxf5hd.vault.azure.net/certificates/certcfa1497/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANZHCdkLJNctxQVdKdaqREVmUwhtBkii92b/hxtlbVEVBjFpGZCKlklJ4yZFJJeWdVRkaG42FU5uwI7op6cUdxlfnhg1YRkzlEl0zHxUDSah7+tF9zQcfUhH66usr9fmUEHLuFaJxxVMwnwh7Y0+CQTdO4Z/d35Bwq2F4YBLTZUCdlkCQAZy6pVLce3ksxAcS25PQSLklbzouIqdhoOCnVKo0ySszHSWfcImzmgWg766ouP/Z7e1ccZCzmRLTMqzjaB0AevLJMFxO0fsAM/5PImJFUjyLbMYL0KqEgWIY6fBTI6QeR3A2UcJWFUEe8Y5CsM0lDBOvpOe2m0naoAQTYUCAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQALo5e3mO3jULW/gOjebrX4Vf1fwhYbilOjo9svbwoS4pLmJnYVOYdbaFz5UwWQQbpiVMpFKlQOehYbellvDla1IOWCzKOTz+DPrW744erJ2fyoX+OBI5pOhII46KWSjIxFhd9FPYw6dLj4EHz/EhrW3pYHCu2L6ZUCgqN6uHCj2wKXeKT2YTbr4RVUNLgoIHw6lVohzGaBTt+LNURoZIJUzZMrkKpC++v8POlXdo5vYkXZTlUToh2ifKeSLhOvyde8gyLJl1dDos59vIzleDqef+3+1tBdavZ3o2u+2Y+INCmevKUhysTOxOpUaqwpKBgZf+KIQdODnUXdXWOmwQzb","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ9Ki4TUIlTe0engmOTrJ7isYMjpnOtvpp+PwZhvvgOkGQ4whTvxb9XFhrTPyeDcBXyIpnrOrklOzZuhcQuieiLg13iibvYtmaxu247mMmCo/vDO2FjMRBiXMjIjwj3aei4vBJURGAjnC4g4BDcl/PGdxoGP72CEhKqpmQfHo8e+tkCNtOyL1SKOWDTn/vnhGB6DMy+25yBz6zcwbdEriDPo375WqvuKejiVBGUWrSkH45frOLq1derjfGUC9orgDzhF54Ggv5FJHia/F7X5tqx4rygkqS8/jYcJV8Y/QYJAE2HOvpQlhNLmMa1I/jCyCQ46d53PKyLLwT6FDSJe5BcCAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBsHZMQLGkpVZ9FhzVXERtQ/PbKFK3FPX988n1JqWhgZnA2jaJlwhBai/YQrYEvQ3SqlS4tkkiGcuB05oPySFMiqlrYuSMaz8UddRF48sBLzALS5h7xOfu4nUJBuyN6nhlry/sb0RhHEU8I5rVMg//ouThIrBNiUXEfsXpFexCS3iYNx1oWxP/RDcQjNpZwblDVCS3NPedAhKTsTce/b6KPDnEY8rM8M774D5kGJUpS0yGhEEykHfz2AXajyaARDJF1D6Yo8RKapBGZEoPeCe9ObCtCe//iOxpwLlHT3XcS0YZtq7CBCivgrtdAGwi4AVhNUcNlrD/L1H8el1Qt7djJ","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"5e98e4874a7a4b00b4f21f993006e09b"}'}
    -    headers: {cache-control: no-cache, content-length: '1365', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:20 GMT', expires: '-1', pragma: no-cache,
    -      retry-after: '10', server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, q52u23bzaxdhsd5aluiscswa.vault.azure.net,
    -        /certificates/certcfa1497/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"05ec5ea749b04eba9e922282fe09966b"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1365'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      retry-after: '10'
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wcmq7zsqkzfbhz4u3ffxf5hd.vault.azure.net/certificates/certcfa1497/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANZHCdkLJNctxQVdKdaqREVmUwhtBkii92b/hxtlbVEVBjFpGZCKlklJ4yZFJJeWdVRkaG42FU5uwI7op6cUdxlfnhg1YRkzlEl0zHxUDSah7+tF9zQcfUhH66usr9fmUEHLuFaJxxVMwnwh7Y0+CQTdO4Z/d35Bwq2F4YBLTZUCdlkCQAZy6pVLce3ksxAcS25PQSLklbzouIqdhoOCnVKo0ySszHSWfcImzmgWg766ouP/Z7e1ccZCzmRLTMqzjaB0AevLJMFxO0fsAM/5PImJFUjyLbMYL0KqEgWIY6fBTI6QeR3A2UcJWFUEe8Y5CsM0lDBOvpOe2m0naoAQTYUCAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQALo5e3mO3jULW/gOjebrX4Vf1fwhYbilOjo9svbwoS4pLmJnYVOYdbaFz5UwWQQbpiVMpFKlQOehYbellvDla1IOWCzKOTz+DPrW744erJ2fyoX+OBI5pOhII46KWSjIxFhd9FPYw6dLj4EHz/EhrW3pYHCu2L6ZUCgqN6uHCj2wKXeKT2YTbr4RVUNLgoIHw6lVohzGaBTt+LNURoZIJUzZMrkKpC++v8POlXdo5vYkXZTlUToh2ifKeSLhOvyde8gyLJl1dDos59vIzleDqef+3+1tBdavZ3o2u+2Y+INCmevKUhysTOxOpUaqwpKBgZf+KIQdODnUXdXWOmwQzb","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certcfa1497","request_id":"5e98e4874a7a4b00b4f21f993006e09b"}'}
    -    headers: {cache-control: no-cache, content-length: '1285', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:31 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, q52u23bzaxdhsd5aluiscswa.vault.azure.net,
    -        /certificates/certcfa1497/pending, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending","issuer":{"name":"Self"},"csr":"MIIC2DCCAcACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ9Ki4TUIlTe0engmOTrJ7isYMjpnOtvpp+PwZhvvgOkGQ4whTvxb9XFhrTPyeDcBXyIpnrOrklOzZuhcQuieiLg13iibvYtmaxu247mMmCo/vDO2FjMRBiXMjIjwj3aei4vBJURGAjnC4g4BDcl/PGdxoGP72CEhKqpmQfHo8e+tkCNtOyL1SKOWDTn/vnhGB6DMy+25yBz6zcwbdEriDPo375WqvuKejiVBGUWrSkH45frOLq1derjfGUC9orgDzhF54Ggv5FJHia/F7X5tqx4rygkqS8/jYcJV8Y/QYJAE2HOvpQlhNLmMa1I/jCyCQ46d53PKyLLwT6FDSJe5BcCAwEAAaB7MHkGCSqGSIb3DQEJDjFsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTam9obi5kb2VAZG9tYWluLmNvbTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBsHZMQLGkpVZ9FhzVXERtQ/PbKFK3FPX988n1JqWhgZnA2jaJlwhBai/YQrYEvQ3SqlS4tkkiGcuB05oPySFMiqlrYuSMaz8UddRF48sBLzALS5h7xOfu4nUJBuyN6nhlry/sb0RhHEU8I5rVMg//ouThIrBNiUXEfsXpFexCS3iYNx1oWxP/RDcQjNpZwblDVCS3NPedAhKTsTce/b6KPDnEY8rM8M774D5kGJUpS0yGhEEykHfz2AXajyaARDJF1D6Yo8RKapBGZEoPeCe9ObCtCe//iOxpwLlHT3XcS0YZtq7CBCivgrtdAGwi4AVhNUcNlrD/L1H8el1Qt7djJ","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certcfa1497","request_id":"05ec5ea749b04eba9e922282fe09966b"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1285'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wcmq7zsqkzfbhz4u3ffxf5hd.vault.azure.net/certificates/certcfa1497/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/514b6fd501bf4593849a475309d951de","kid":"https://vaultname.vault.azure.net/keys/certcfa1497/514b6fd501bf4593849a475309d951de","sid":"https://vaultname.vault.azure.net/secrets/certcfa1497/514b6fd501bf4593849a475309d951de","x5t":"hMyN0O7TCp1O5sO5l4xyKuyImpY","cer":"MIIDaDCCAlCgAwIBAgIQKnbaAD66QgyQhoWWJGWhmTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDgyNVoXDTIwMTIwNjIzNTgyNVowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANZHCdkLJNctxQVdKdaqREVmUwhtBkii92b/hxtlbVEVBjFpGZCKlklJ4yZFJJeWdVRkaG42FU5uwI7op6cUdxlfnhg1YRkzlEl0zHxUDSah7+tF9zQcfUhH66usr9fmUEHLuFaJxxVMwnwh7Y0+CQTdO4Z/d35Bwq2F4YBLTZUCdlkCQAZy6pVLce3ksxAcS25PQSLklbzouIqdhoOCnVKo0ySszHSWfcImzmgWg766ouP/Z7e1ccZCzmRLTMqzjaB0AevLJMFxO0fsAM/5PImJFUjyLbMYL0KqEgWIY6fBTI6QeR3A2UcJWFUEe8Y5CsM0lDBOvpOe2m0naoAQTYUCAwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLgYDVR0RBCcwJaAjBgorBgEEAYI3FAIDoBUME2pvaG4uZG9lQGRvbWFpbi5jb20wHwYDVR0jBBgwFoAUqrcwXIbN8XZo+nbUtMo8dz6L+KYwHQYDVR0OBBYEFKq3MFyGzfF2aPp21LTKPHc+i/imMA0GCSqGSIb3DQEBCwUAA4IBAQCcRqwK2eVuJelH/bvv9ThymBDwqFkcD1Iddtn0MRy4KnZaRWc54IBN/4yUFCSJiug+S+H1WkbYKdZAiGnHJG3T3S5yHaQpN8zJMgyytdO2C66fz9JvDp+b20FFPpHOVFPCZ+tYdRUxjtq3m8x5KUkKQorongzbyHwlTyF0dfgCOghhZicdor6qoShifzydaE89L2RBB8RbWz2c6c74B4I9+TwZ0MK8Gl76qBpJ3SDKXpTlMsJWiM6z9n1UlXKRjSGapDsJvEVIkcHP5mFJ9MaqJJ7fUW1xWtsMWqICzE35hVhzorNUmLyBgUoa6+ChxOSM1Pb4EigMvqe9QcFfS4Ib","attributes":{"enabled":true,"nbf":1575676105,"exp":1607299105,"created":1575676705,"updated":1575676705,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"upns":["john.doe@domain.com"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676681,"updated":1575676681}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2443', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, q52u23bzaxdhsd5aluiscswa.vault.azure.net,
    -        /certificates/certcfa1497/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/9233a538f72540e0b186fb1ce27b91c1","kid":"https://vaultname.vault.azure.net/keys/certcfa1497/9233a538f72540e0b186fb1ce27b91c1","sid":"https://vaultname.vault.azure.net/secrets/certcfa1497/9233a538f72540e0b186fb1ce27b91c1","x5t":"ufhDPwlv0v2EaXDL-5VFzAAq4Uc","cer":"MIIDaDCCAlCgAwIBAgIQFE2jujVuQ6a0B6DGI1TWrDANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ9Ki4TUIlTe0engmOTrJ7isYMjpnOtvpp+PwZhvvgOkGQ4whTvxb9XFhrTPyeDcBXyIpnrOrklOzZuhcQuieiLg13iibvYtmaxu247mMmCo/vDO2FjMRBiXMjIjwj3aei4vBJURGAjnC4g4BDcl/PGdxoGP72CEhKqpmQfHo8e+tkCNtOyL1SKOWDTn/vnhGB6DMy+25yBz6zcwbdEriDPo375WqvuKejiVBGUWrSkH45frOLq1derjfGUC9orgDzhF54Ggv5FJHia/F7X5tqx4rygkqS8/jYcJV8Y/QYJAE2HOvpQlhNLmMa1I/jCyCQ46d53PKyLLwT6FDSJe5BcCAwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLgYDVR0RBCcwJaAjBgorBgEEAYI3FAIDoBUME2pvaG4uZG9lQGRvbWFpbi5jb20wHwYDVR0jBBgwFoAUWH5yFCZ0UG1k8Qc3KGQY+JLbbnQwHQYDVR0OBBYEFFh+chQmdFBtZPEHNyhkGPiS2250MA0GCSqGSIb3DQEBCwUAA4IBAQBt6R3bnV1dHbQE82SHAoPKaAuE1345rF6ajO6ToDTh/QWylflL8Hhjm/VmrwlXvKjjKrVLvC5Eb3HbQ6r3WBaza0ORzyWc6Nn1WWr7mt5aAX7H9SrkyIBRTGM7KHo7mRqh54zxnrgXL3x6h+Q5A0SvzoLya/7ANX5Rwt3IJr1ofJ1xNW5dX0WNdVsdJ7SmZy08ifgxO0VLvusDTaoPlZwCy4AbRQbPvRzDuLhItXHxHgj3L0kg7ylgaA++8RdpsBEtgwE06QmCUnYv8xhkH31lQxW0RcrwBKYhTKVE6zi6AS7bZee9daz/rM4wQ+GrtWy1QvxIJr9uLpUwijLqMCuk","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"upns":["john.doe@domain.com"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2443'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wcmq7zsqkzfbhz4u3ffxf5hd.vault.azure.net/certificates/certcfa1497/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/backup?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certcfa1497/backup?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmZKQ2JVRE5jU2EwUGY3eGxoZmJtU1JoNUdlQXdwd3ZWR05mWXVDTWdfMVgyVG9Hai10VEYxcE5tRHA4b1Q1cGhBTmJzR0tMWkttSTBpbU5xVWx0U3dodXBMcm14QXkxWWNBeDdvNm5LckRlUjNIdFlxNTViY2N4bno4d2EyS0FWTFJQdGI4bXVTZ1JPeXBVZkJuclB2QjBuNXhfR1M0aExQZ1NVajBJUUx1OFdCc19PZUY5aVE3Yk9fM2J3MzdLRkR5MklDT2IxS09fWlJXWXpOR1YyQ0NPSUwyaDE2eWJvQnpaenl6OElfTnpGOE41SVJkaHlCckplN2xKbjFac1hjWUI4dE5UU1dBNHFCVDV1MDVad2hJdFJhbHE3NWJ4RkxpSXBGVDVBQ1R1c0hxbl9BbGRJSHM2NFlNMEQ0THNZdjNMUzY0b0E4SDJRQXZHMU43QWxYQS42YzZNRHVjZjJjSXRSNDVuNkdkcGF3LnplS1g1RVZSY3V6SHZKS1VmVkpHR2NSR0dlSm5aRm4zQzM3bWkyWVVpRWdHelZxcHkxQVgza3BvMEQtUEY3dTJKZlctSzduWDFndnFQc0RkeUVRVk5ZNTl2N0RCd2hyUVg4MkVmSl9UXzJIMVlUbnBTRUJCcGlCYjByM0dCaDlyLXBFd3ZtekxmR3V0UGgxTTlkMEtENndjVzZXbHdFS01BSjNfc245MHhNYnlRM3NESEVQd3dnbzFsRnRuZktuMEFHWTd5ZlEySzNwZ2FNZUFPZWJaSDBQWGR4M19tcHBoRGhwMXU0RmRydWZZZFdQSXV0dWVIRDE1NXZybEpUMDdHTTdvdnN5ajBPTnRBeGJ1VFRPU0NxY3c5QlpzeWlucUI5VnhPd29nV2UxelhLMEd3RTJWVVRsUWpyb19oQzBUQ1lPemJhLW5vWVBDdFRVazVyRUI4NlNIbFFaLWh5RWdNd1hwVS1uRkE3VUM5UGlITllVTmFCQjJZNUM0SnhYQlR3RmNPUkc0SEZKQVV3b1FubVJJaU1KLW5tMGUyQ3lzTjVCdGozNk5KdDJpc29SVWh1dkh2Uk00amh6WjlyRlNNTmxDQ2luNGNHeFhZV09fRDJSZURmM0F6QTVWSWhpc2RIalNFbEVfTk90dHdZUTAtS1hkSjFhMnZtdy1uYXRGaTd2ZTN4bTE2a3Z0SWZOU0dqa3BNUXlYY0FPQjRFcW5zYVY3VUoxVkpYTzRnQVZpSnVXX2VPUXl6TXp5RzRZTmpsYXdfWTNFWV91eEJ5bE1KYVRua3ZjSUJ3Y0V5cDM5blFmY0Rsd0REbEUzVHFiMGc0UVdBMnRydUxLSWFIaHhFY1hqTXFmRElQVngtenRCcC1ic3AzT1VWeDRqaVFQQzB1SmVHcnRkTjYxMmJDNjdMQmpoQlNtNmFjYmNHOG9aUWxHMFF3bnBrNVpONGZ4ZE9hYTIyMVh0Rk9iWVpMenJscWJxTl9oQlFjVjMxNk9ENUtndFFCSHVmU0hlVjl3VFJUQUdPc01sSldhcGJLRHNnZHpaRHYyZkROVjhNQ2o0eHhULU9hMkl1bXBMdGp5czBxaHhoS0plTkNnT2hVeDl2anBEUHB3R01kTWc5YWJDZU1OV1VCczRWRlRPZ0ViT1BXNjBNRmJwSVZyV0preEtYSlE1XzVOVGtuazJPbThNS3kxcU5qbUhxckt1RDZ4WEJISlV1clVJUG9fSlo5ZkxvaDhra29nangwdnNGVExfbXM1N1lkOVVkTUs5eUsyM1pkM3dvTURjbUhCRTFkWDBMWmpPZ01sbWIzaGwyd3hXVllTVFFtNGJ2STJ3TEFKeEVWSTJyT1prbHZMb0JhamZnS0lkVmU2Yk1uQUdTak9KOU8zaVVHc3RZWWlZM3VGczA2anJSQ1A4R2xfcEYtZUcyY05QYlFpSjFtRk5yYkpUcEo5WEplZGdTQU00aEIzQ1lfbXN5NF9jQmRqUXZiaHQ4UlJIVld2RzBCWVVWc2FOb1BUY3VpLTVCN2lLX3dVN2l5aFlqTzBlaDBlRlZyS1BycmtvajBSUWFsZkNEa0lLS21EWlFVdjRIdkdobXF0ZV9QRXNpcm5ZOWI1cHUwWEladVZBSUNRc20wWU9qZWhvdjh2OGNjVmpGUzZUSktVTFAwZ1JPSzJhcHh3ZVBTNWZHSXZKYVVnMUpDa0dYaHptMGZMajlrM2FtWmZlNWpZN0hYa1RMa2lEY0NoVzlIR2RiVmw1WGZEZjFnZXdPVlhzZFRXUmZ3WTNObDloeERuRTlfWnZ5WDNiTEtBcTlvQmRMZ0R5OGppQ2stTjFtTFVvdEd4Vk44eVFwcTBtTHl6QkM3ZGZyRFpsNEdGSl85Z3hBVFYtYlpXTlVROE8tRXAzd29FMjV2eXlUczhXb0ZnM2NVRTZsX2VNeUFWaWkzSlhvemxia2duc2pwYk92UG11ckxEOTM4SS1INHJWYkxidmo5bmhNZkVpYTROUnJHY3dZZXZvY1AzOHBJNkt5ME1YbG02VDJiVXU4UUUydDc3WXE5TnIxZVVmRkhlcUE4bU9IVW96OTNTRUdvaURnQnpwa1ZMUEdPZG1qeUJiQUI4eFZBX2ZMZHRZR2xwb1JtZlk0TS1hcEoxZDhrWUFOamV5T3FPME1qem1tRVZ6ejhTZFBxdHRoOHhDS0g5aTEtOEN3TFJyek9UQUxFUE1aX2l3UExSaXhmeUxqRDhZR1VmazN3YXE4TmxSbHJKei16dFdpRHg1VmZ3U09yS3R3Rlp4M0tGV3lQRVRhajM5bHpJdFJRTzNoMnhuQ0JnOTlCRFotaVZrQzVRLVFuTHNmdDBPTDAyLXUtaUw1N3RpWTNtZFF3d2NULWdZWHd3Y0N1UjJScXhOX0tTZUVCSTc4amlpNEUydzRJVWh5SEx3cDhqcW4wSWtYc1JNZW5QQmExc2gyNW5wT3pBeGc4M2tIQnRreThidHd5a2NiZHlPd1JWWXZQYnJocm9SamJ0anBVRUdYaWpNRTN4QmpNSWdEZzctd3dqMjJwQldiSDA3UXkyeW54bVVycVdWTTVzWUt1czh6LXNLWnJCTHl4Rm1aZTJPV2MtSEx1WWwzQW1qZEcyNnU1UEFWNHlNV0Y4eHVTbXB4RDJlX3NBMFh0aFBXUFhYRDlYWENSZU1mQ1pvWjlGNTNIdjNKNGhpZDdXUnY1cjZUNHduSEtkX3B1bUE1Rk5WNmU5allIUHdZMDE5VWQ0WWVLem5Ha09PbzJfU3c5Mml4UHAzTmpUZzAzaXkwUXg2bWdDMXFKUHRtY2dCQkx2TlZWbThVUW1WRjVQZ0Z4OHJMQXdCTmJrZUNmcm1jMlkzR2FiWmdFNGRMZkRuMFdXdTlWNVNkMWM3ZkNwZGJkRGhRTXBLeWFCU0FBOUtMM05qUkZ0dlM3Z3AzX1ptZzRCd3pPR3BHZk5VbGxpVDBVdW5ILXZrTWJXSkJRdmo0SEl1d3NKdkxtSmttc2pFTk1XMVgxLUZQaTV1elR3bDlXNW1fVVdWUVlsaFQ1Z2luT09ZY2hFNlVCaUtvcHdjX1JTSHlZU09KR19nSkFLd2RoSGRTaWpnWmljNXRRYTRuVG1CZklFVW40NERUYXpNOTNyQzFpcnFzWWZoakhqdzB5aklCLXQ5cU93M3B5WFllVElxbnV5XzYwa2lEYzRBTmVLUl9HYnhmZXZ6X2I2cDN1TVNyeGFkd2FYa056cTJZLWl4bFE4YmdDVHpJTXVHOG1aMG9Xc2tkV2wyaTJ0d0xEcG9uT3JyNnhLdmRib2k4RWN0TGJKZEZWSXFFZ0pFSHhWM2J0bnFGX1JqUE5SaXR3dmJIdjV3M0wzTTBpbmQwYXRzNjRhN0FRR2EyTEdaTGZBNmthdzRGOTd5OE1QWVRHV0I2bzIyV1NQTzFHWDZmVUtSanliVkNPX09xOFpOdjNWbXJ5c2V6QjIyemNxRFVyUHcxaF9SWXlmdFNqNHpsSHFWc2hlcjRra3QwYjVEOGRxX0lVWGZ2c2g2NGtlVXdSNVNDUUNGYkdlbnR5Zkp3Z0FNb3k4R0tVTVJ2Z1d2bFFicF95YWpoVV9JZXNqNVE0T2xiSGFKXzVKTlZaMW5mMG9XLWFUZFFXbVZNOUF5Ujg2Y1pTQy0xODFZTll5NFBiTFNRZjBnMHlnS0dJbWxvTjlGWS05VnVSOG54WVNOR19PdWpGLTBhR1FZXzFFaXJBTE16UmZkaG9XekcxLW93QmhaREVVaFRaNDQxSlN1QkdPU3VvbWhqNlU2X1FlYmZ4M3hkWVhjUVFISE9NYmN3NnlfWmI2T1ROWnhOQ0lyM1NaQ2RyeUhRdE81dFpuTW1keExGWjVZNnQ0V0x0ZWVKTE1Pb1dyTXh2QThYX2VCcVAyUHFPWi1kNVh3dkF1T1AzckZkNXVuV0JKX29XZ1B0RFFtSlIzemlJakNzdmNsa2NpRk16XzlFWkdqR216a2xxdzlvYkNGS0RfUlRzZEVaY3NtNDItYV9yeVAyZGk4WHFrQURJTHVNcTc0UzVqb3FFNVY0bTZET2JReGFnQzctM2c0US12SjlaajB6ZmE1cXNXeU9CNUdOQUU1cE12eHc1Z0hXZGF2RmtvckdzSDJTeEVvbTdJeVJCYlNIU1ZTckVBWGgzN1lGaW5ObzRhTWUzZ1htT1dCdGxNejhPSUE4YklsTDBUNkFSMW50ckZ1ZDJvdUVDbDN6Rk1meHJPMThyWDQzTFJld2dBb1hlUGkwNXVEb3lpWENvcWhaZENJMDM4Um5qRDlQY0w2Sk1KZVh1d2ZaTW9BSFdfS0tVYVluNnlKcDVJZTQ4NXVocVhvUHFoVHpFV1BXLU9sNUNUcXMxbDYxa0FaVlZXYjlOMFpXakdTVkFOQnppREdqNnRtZ1ZZV253SWljUE1ucGI1V2NUXzV0OEYxWkc4Z0tWSHRmT2lHeWVNYVhPSWVQaW5BM3pMY3dnTU1rQ0J2dWxGZFFjXzBKaVJMaV92ZF9oQUMycllTV2hDTGV3T0NjRm44MlRkR3d2bC1QaHBFMUl2aFR5MW44T01YT3J0bmh6eWlCZGdZUWlIRXlqSjVXSWRveG4yZnlqRXlLSVJQbDJzbjhTc25DeFhPODNuZTg1VGxvX0lRYUphcFNwYzBIYkRqLTcyZk43TzBscVhDbEJyS2ZtWWZuNHdsemd5Tk1wc0RtQXF3WmxlWWUzbjhod1dEZTlpV0g3eDFWNEx3SnlFZVFobUZIV0NnX01XcUhlTzc0MF91V1VmTzV4M0tyQmVZZG41QjBXWk5VLVlfU08zWXlUVkdpbXlKeEl1VjJhbXpWOTJtVm1nNmxiMWhMVVpQcWRrX3JHdV9LQmNvLVhOVnJYWkZPVmlUUlBjUVl2WGxMSnZCNkxvNk0tQzNMTUFNQkhEZ2RMcEFxUTYzd2taTHdRUTl3N1BxMlJueTVNbGpwZkNuZW52blF6MGx0T3lYOVIxWXp3SXlUeDZmWTNpalFTWFU5OXBGSXRzYzJmdWl6bkE2ZUNweUZfRXFRRjdUYXdVX3ZXUjZYa0dfclpVZnZHVzczbTVSeFRYQ1pzVFJZUGRhazFhNXpZMU95dlBEclh0U1QwSWh2dy04QUtLalBDN3VfNGRzb3FZUnZ2TlFjQ0k0UnA2M0JRTnpQZXRlRThOb0ZOS1dFNE0wak9rNFR2dmRfaVBjMWx0OXg3WHp6X0RJazFybU91RXpGem10OHpyT1BsUXpxbDR0SGxoVFU2MXl6UWI3Q2ZuU005b1BjZUk5cDMzSWxyZUNIR0RXV3FJdV82VVRSZzRfdjNPbHg4S2xpQnEzTF8zOXNOcl9TNWpvei1XZ1JJRU9oc1dSYlFUaDEzMnBpcEFfbnoxU3g1U3VEMWcyRVlMbHZfa1FONVdiLWdBdHpXT3o2UUtxV2xTV01iSEVyRVNUZ1FMM3BCZnRmdFVZN0VYQU5QTTBjaGIya3JISmZyZWVSTEhDNUx5ZGlXd21vbU9jU3BGcjlUZGowNkQtMV92QkFwZzNGVmNCZE0zdENKSUxVaEJManlqMi13QUJyMENlNmlRaHFTbVN2UEZIbjN4VnlpR2Q0a1U3U1kxd0hUU2hyOGlOZ1g1WWRtYU9QTHNDUXVnSWctSVpWQ2wtRThQdVBmMnViZEJpMklKd0kxWGtMYmVnVVRwN0NFd21aS2dsRTJZSWNzaHVmbTk5Z3BTU2NZZ1RtRmZaS0tTWmVnRlNwSnpBNUpyQWg2MzJmQWlBWE5vNS1WVG9TVkt5ai1ONUZGbUlrYU51RG56cUV6WnVLa2NGeG8yT1VGRHh3c1VwU1pwWjQ4SW4yWHA1WnZoa0NDODdqRzdWdmtkWjczVFRhRUMxWG5rTE8xV2RMM1B2VllVMmhqQkdUMDF0cHVmWnk5c3ppQU05Q2w2aUlMM3VQR3FDZGxkV2c4RlM0UTB2S2ZURWZQNVVBZnVodFE4b2Vqeld2VlJtUUVweF9kQzVDM3VYQzRVek5CQ0lscGprZmZQTnZERWROblJtTzkzbkZzUlpuQVBabUZ0VzlzZFduMUhmY2UwV091ZHlvWnZJNEwyUjR3OGFfZnJablNhbXV0WU1sWTdlY1ljYjBHQWY2MkhPWjFXUUsyallReFhjYnNrOGotaEtsUmQ2czFiY1lSWHJFRl9qYWRLWWxvR052czRXQUZwT1JneFRRaE81RTZSZTNQMzFjQjhkaTV1NlZYazU4U1ptUjVOMmRSUlZ2NWxtbjIydXNFbTlaUDE3RnZRaEtzNUlQdWdrMG5Gb3NxMlJ3X2lidlcxWV9kdVVhMVdNR2JSVzlCeHFBN25CZUNPOGx0MEtMb19Ya0xteGFxR2JwWGN0RnZEa1Jtd0hEX1N4RThVX2ZwamtTWlZtV1czVUhUaXFWV0ZyMXFRdjRYS05oREIzczd0cXVFVS1vMzFQbUhiNlB1RHA0TGNkbEphVm54WUlaVWwyOVppYkwxWWJIajdsSWtsQUVMV01OU1AwZFlkeHVUWnNaRTlUOEJ4MFRubTZNSlc0Vjc0aVJZQi1HNE5lYmZ1NlAzWDl0UmZaSC1mVUJXQWhiWXQzYlNtQ1pyX3JnLTlVaWhPYXRIMVB3azhFVW04SkprdnplOUpmd21OSVNLQl83YnJkcXVfUGUyWURicF9CQlhpQUlEWHpGcjRzLWZ2dThnbXRxbVJNSXphSHZxM29mWTlVUEVqRkJZZGZiMEtrQzl3YXdhYnBKTFZKUEtvdV9wVWVUMEI4UmNwc2xiUEFCZUltdy0wekpTcnBZMm05Z3FOTnRSVGxhaVpGUkZmc1otZGxzcW9UNHVwcWZCTFdOWDlvLU13YTNzaHNvRHIxSWs0aEpLbGFSUlZCOWhtSnVxbWR2SWJSVGpzS0g0UlFNUE82T0FxNUJLQ2VOM2pSeUlPN3NFdGE5dzh5dlk4QnZRSVV4T3hpSmVKd3Vwa1ZORFFrS3N6emt6UlhET0pxaTU1eDRTSm1GUktUSkJWTDZDbGxsbjkzV0pVazBxX1dPUndHSXpMbF9fX3FHd05sR2VpQmFQZ3JxZHI1MVFnZXllY3hKcDdlay1KTDB6bk1sbFRjQzNNby1iNHRmZTFOcmdVeFRZbmlISTlrTzY4VGdTUVZkbGRsZGtXSDZIUmxhWTNsbGp2WEN4ZUhQMjBteGZHX0lySXhKRVVWSHdiMGcxeVJVdGd0MUtteEFqY2NneGpMUkJRdjQydF9meDBjd0hKekJBVGl0MzFCdUZVV3lldDZINkxpS0NnUUJLeTBHcmVNTC0zXzh1aEVqV29MaTQ5RS1IZmlPbWRHdXBaX0hmdEt3YUpDb2NXc01aVjlaZmxDeUpJQzhZbDRwMURadjR2eXJKSk1nSDFxS1dsV25qbGNDZ2t0ZklfamxxNExsZkN6Sl9HWHAwYVFRb2tENi1SUE9kOXJVdDV5aDZQMVJmZ3libEZiSzJWSGpERTJLSkxwQ2RLako5QnBxUTZiOU9VR0NWUzhweDR4WmhibC1nOG9QTElKNko0b3J0eFJuYkVjTVp6eFNXck15WHl4bGVBMDFLNnFGWFVNSVlNVkx6TTNDd0wtRVpSVGhRcWIwMDRRRFJNaVZXT09CclF0MGZYdFJqa3ZhdjliYTA0TXBBbzF3OVhGbEIwRHlSa3NaZlFXcHlpTTF0MXdUUGFyWlprQWMxUkhuWUtUeUs1UUhIbDJ6M3lodHY1RFBFdjU5VDMzTGxyaGZzdzZVeTh6WDY4Mk45M3FZcEdVVEFuZGlOcUVDM1VvZHA1OVk5OW5oMGRjdzkyWEdfSklJQnJ1aHRuSVUtYXlFc0hyNmFnTXhCeElXUDEyRi1YTEVQclJXbDZoMld2RnVRRHhTQlFidzJ6My1wcWNFUk5ob3F1RFlqYmNzUmlVY01HTHZpNEYtTmhWdGJHZ3pfZ0tTZ09CSHFoY25Hem01c2NrZUhIbEdfRENKYXlzakZEQkU3RmhkTWF3eGJlRlZwQWN0cXdHUWxvLVEyZlF0RE9sdlpWVGZKZ1BWOTlFNXozQzh2M2h3ZDRnUkI1UkFZdlNlbEgtMmtBbzdQaElaRFdqdm9Rd2pTQlpNdk14dS1xeWhqa1dXRmVDSUhzZFRfb28xNXhfRXZ0enppSTNnZTliX0RTMWNrQ3REVVVuWllMYldYVXZ6b2o3VkVZc0ZPZmp2V2ZfRUtYQ2JibXdpbVlxZzlNM0dQV2Foa2VsNFpENDQzeGtQcVNmQ0FMYUdaQ2RKejUwVk45djVyUkRwV1ZIS3VPZEFmN3QyWmpGS05RQ3d2TVJfLW1GaEpOY1d2Umc5UUdGUmttWGZ6NWJkM091VVZkaVdtOU5EU2FCbHNtOUxnTm9hS2NLQm1maTRqeG5vdTB6SUxVTWtZUVBnWmd2U0dtS3ZfZ09EdTFYaU9PcmFDN1JwTmxwNnRDR0lpQjJDTTNoYU85aTRfTVVpRF9faEpIQThZWmczcW5zQ0FXVTNPV213dW5nWnQ2WlpMVndXaFJ5NnFYZWdGcUdpU0N1akZUX1BTZFJZZDNkUERIU3AtUmlEWklqS3ByUjBsVFp0a3ZJamt3azNfbUE3TTkzNHNGR0xvRzRGSXR1Vm1LU2JfaS1kV1NaanVkSGx4WEs2ZGYyeUplMUNIbGZCYVpkVk13QVI1cnVaVTZKb0VLWjlPbFd4dngyeHZCWEZsRTJNUG8tVTU2YmY3aTVDZi1BUGp4SXlCMEw5dGNuYXotYXJTNnF0LU5yMjZfdVNqV1BOY1Njc1RFUUQyQWJYN25MMkxyNm9JZUdOTkF4V21oV2VobmRMdEpoX21kQlRWZzY0Tlo5S19JQWJUM3JpZ252QkdEb3h0N3FBTTJCY3RpOFB2OWRtdE9NaUNmRHZnX2c2X3pzTlJkM1l2VkRiVnR2OWZoLWtiWkxZZjNtSFAzNWo3enZtVmtmRjZndTFPZDEycldoTGNKclRiYXVkOXMyVXNIMzJod2xmOTdGNlo2RnQzZ0N1YjFCdGl4NTZKeUQtN0dmXzV5S1hWYm8yTzlPMDI3OFYwNUxIU3hUeEhNREdudEsxSTlhbHdob0xFWXZ5Z0pYdXk2d21QYWJZMUtXX1BWekRMQnlHOUExdUlYYk1YaFlZNGkwUkxkMjdwelFsMEdNM3lsM0ZQTDV1djFPYmlyTUpRMTNyZVBxQXdTcW9pTmJUTGt0bUwyWlZ2X0JHNlIxenJLbUJlSE9xWXczY2h3MFVnbUxIb21DaTJxWmJBaGpMSTk0dTdxbkNSRVNpX0lVdGZsdm1rdG1OS1hRcUp5amRRUzQtUE9WWkF5bFdpX0pmUHk1SG1kUk9rTkRNSUVmTGZnMWpqOTAxSFRzTXZJV2VUaHpjQ1BRQlZVU0VVaVNPbEc4dGpPcGtSSm9lbThhNjltMFlHdVc2S3p6MS1Vd3VsMTgyT2hNUTFrUkRHUFVzMk03MG4yclB4dTVDWWp6MzVIV3c1Y3BnR3duUXY2N0Mwc3ktMjAyenBULTc2b01uck84Q0hEUkFpaUF3LVYwOHlzdEp0aXlnM0tLTXpWZ2p1MEpTLW9IYVp6QnBIdDlnd1RDS1NPRjNWak1HZHE3U0l4MXhuU3dHREpyaXFPdlUtSGQzbWU5UVVGcnpLd3JMOFc0aXRhSzhndWcwSEhEV1liSEFJSjRnaDhXb1c1YVZIb3dqemJZcVdpUDVFTFEyeTk0eS1abUUwdmZHT0VNeXZ0aW0xa0VrUVpuTlVNMTQyeFNJbXlLa09yUklWdHZkS05mcmRQQVV3b0Y1SE1YNThaVHZBdzQyVGF3ZUxfbDVKeXZQR3lWZ3cwc014RXFrZGdyZjR5VDBvRW91OU83V3lvSjlVd0pLYUM1d0hDcG53VjJBLW1YX2d2QlFyc1N1czZ5QTJ1WEZscG4yV1psQUJJS21Fek1kRWRTcWtNeTIyV0FZQ29kdmtyVlVyenBzRmNrMGdVLUwtODRPaTRza0pGOTdvRDA5ZlZDUmdCdEZlWXBJTHZhQzc2dldidVJjbmlFOHB2OFRqcHhxc3RVVERmMmhjNVFzcTlxNlU0dXdVRnhOUmlsT29oY1Q5ckl4YmpkN29idjgwcjNOMFZCQWNvUmcxTm5NZHlTaTdzcnFxVHBkUkN1eU11U3BBaWRZa2FYMEhyWnRGcXFfQVpiRHU2aFBZa3hjc0xXUXVQMXJUZVI2eFFvREZDTmx6blpDXzg1cWJnZFVINmtJM3cwSGVpNlE5ZDZSa0ZXd0hVb0xxdzVQRHhCWjhkOUZkTXJqa3BOSGpDRHlxWEdaYXVHSXRlanFDc2dPVUdEdmM3T2k1Qzk2aW5OWW54WlowLU1kZ2QxU3dlRVVZSkI3UVBpcmJWRzFXcGlxM1Q2NzBFUHh4bHU1SUlRQVplRXQ2NGlJZ1A1bmxMTjByU2psWWZ1WjhGR1BOX0NfUTlaM3dIWExKZ3kwWUx2VjRvbTJINXZEc204Zmlhc04tVURoWENtZEZiNGdXU3VTcUpMNkhzOWV6bTd3a0VSTGc1c2p2T3hWcXJYTkxUN0FFTF9ldlpZb0RfREdOU2d3ZGJ6RUdsYmVDTXZKUHlNSXFqdHM3VXBMVmxWRmZFdktDU0JZNHctNFd5blo2UU1wSWhBMlB1TkI5LU9MQTR6NVQyc1lpQkgzLTRaaHhVV0REODNRZWlMX09uQjBIU1JmUWQ4eHdGYmVJdzg3YkQ4TC1lSTJxbGRfa1hJY1ZRaUtyS211V2hkQkpHVVpHbFZmTDRqQ2kwLUZ6VnR3bEVUUE5VcmJfQmdZUURhZGx2WTRHWHRrMnpEVkdDX0lBOFVqQl8yZnh6aFdRazBCZ2hiOVJ0TWhNeGVscHdwUEFadzhsNS1wZDNsZEllN0JVTkRNc3BoNG9uTlJMS3o5bnBVYmZkXy16UTR2RjFLdXMyOTZWZ0NVSEo1dVlWVnpUcHM2QTRIaElQS2JxUC05eW5HbjBzTVZLd2RDSV9UbXpadE1CVG8zUE5qX2V4djBjbE5mYXhrNmtHTVV1NG93TmpGRkRnRjFIQ1ZsbDF6b1BzRm84ZkVVVHFmRmNlUkdSZ3NsVG5ZQUR5UjdianR5VXBVdkFMQV9mWUtrR01lb3QwUHlRdHJSV2tzZDBmWU5raTd3SlVjWDRHandmd0ZodWZOVzh2Vl9sMjg2SGZPRkdNZHRrUTVMNkNqNEtUZ2lRN2Mza0FUVUs3Q1htLXh6cE5ldXRpZExaODNQSkhZeXVnekZiTUdvSF9sXzhnU01jWkt5bmxqRzNoU3hmRnVxaXByejZhanpOV3haMmVMRzNMbzY5czhLTWczSnNna1VaVlZvdUlmSm1DZVVtU3BCUXJhQUJoNlVOMmt4V2J5SnNqNHBfcExWQ2NfN3dLUDZuMm84TlVBdUJCbXNQM2FDTF96aUwxY0I0T2tFZEpnN09YOFpmTWZyalBrMVgzdmdNNWVwVjFIOVpZbk1wWkJObDhoLXZhekhmMjhrcmk2R3A2NDljM0lHclhnblVncGtYVjMxUXB6cEpPVVM5TDY1M29BV1FkeE03eFY5ei1kQ041ZUNfekJQRVFIUk1rOHBjcDFBa0RHcmJQRVVXV2FQZDdHMlBWRGVZNmlqSElFcFJEbjVVWkRFc3M4QklSaGVCMF9LbnBnR1J4cF9HREJUYXBBcmpaWk1XaUlDTlFhdnk0RlJQX0g1UU5laWF3aDNEMmNFVFpRVmc4WEtqeFY1RWV6TERWOE0yYWlTVXVhc3JiRzdidlZnSjZZazNoVUhJd3hpVmR5TmpJYXVKVnhCZ1Z0SHhtbzlXM3lUZUpOZ2xZOWt4NlhTMnZDTktNMlFray1LdVRMUFBiRjRaUGkzQ1NtZC01MjNBSm1EcTB2a3dpNFplakh6Y2dmUUE1OHRZY1plUWtnUnpqQUg0WGNBbnBzb0J1UzNaVzhhQm9QaU1hbUkxb1RocEFwNVQ3YTlOcGlLbERTNHN5ZGo3NHhDY0M4Y3duNDh4bU9WcmtoVkQ4bzN0d1EzQUpTQ1hBTFE3MGNTbHRCZWROUVNXbUV4VEdqVHpYalNpVk9ZZUxWYXViNkp1dXdBY2IwaHpfQ3I0enM0ZU9qWlVNQ1M0SVpQVDhrQWlFZ3pCenBNcE1XdzEzdGhaQ01rT2M1SF9BQVZzZlpuMWw3UlVGZFJhMkNjM1BZUVFtZE9jLVVNbVk3eWlqWnotYUJQR3BkR0VYSklHUmV2cW5rU0ViaFZ1RWlCaEpQNjhPdWQ3QXRpSlhEVFczS0Y3QVR0bHdxc2loVmxRLUlDVlItSVd1TV9PQlJMZ1FibTE2MHBTY3hzcVdad3AxVUxya2c5ZUlWeERvSXZIdzBURUw0V0prNGY0NVdDWDlGQ0xQcFk3bGE5WlRtT0c2Z29KVHg4WjE0TkxLaFQtZmtlUUdmTlBmcGdPRW1tYnk4V3hTQ0UzUmdaZl9UcUZhemZjVFZtVDZCcDF2NklUY2FTaFR3MFV0QXpOS2tqOG54SW5rYmpJMTBDanV6SDZHOXdnMXp2Vk9YektUVnNHWnd0Z3JHajYzazE4VmRQc2FIWGlZQU5Hd1pvblYzd3RIMGZoNUFzM3hRWDl4QS1QYzQtak5hMVYtV21LTF9qZzlKSHd1VEUyeG5ya2xTcWhXY2lrTFczU3pFaEI3c05QMGRGSkt3SnJJRk5zamNzelZtUjZoaURsMUJtajlvSjgzWHZ0Y3JkWl93dlBGU0Q3VnZpb0JXU29ZVHRLSlFnWkZPTWZsNXZFZHI5Rjlqc1lFZHFsTUhuWUJVOWgzNXBQblZiQ1ZuRllHQUJFNS1KLWxXaHJZWGpnSWFhRkFhMUxxaDIwN1laUWZmRkR4dWlZNU5FQ29QQWdvaFQ4X0hhbFRFWXl1c1l5YWt3bnNscld2QTRhVnZMaEJyV01UdDBOSGM5eXVaOGNfT2NpcXpqYnUtSmJZaGNiQ1dOanhBR0w4T0lmby1IOXI4QXRyYnRpel95M1ZaSVduVFpfNEJuRUxieGxfZEJ2ajlUdERySTd1Q3B0NkNpQ3RVbXVsWkd2VDVfVGpkZjI1M2I0VzNKSExZRlBDbzZwQnd1Y2ZuaWktNW5BWTh4bkVCY0NZcVBEQjREUUdYcko4WmtKeHRjb0xqRVZQemgyOFUyekFyZDhCNU53dGdFXzFLTWpvdGtnVWI1ZWxYaG9aNDJpXzFDWXhSZ1VUT29UU0x5c3R6bzdhajJZTG1UbEdqd1pRVFpoOGF3ZmpsdVJfNkszc1BiOXhERGJucFBCdW16eThPY0JsOVhPQ2xmVWxmV2gxbzE1OUVzM251NzhQYTdBMnQtOXlsZkdlaEVQU0JVN2UxSkdsU1h2MUZ4cUVFOFhFenFtaHVtVV9LcnBjT2Iya1pRNlFfYTRBVi1hTmo0RWpIQ2lsYzY2RnJXTHAtMkFKVGU0RGY0Zm94N3o1N0ZxZ0ExNjdSRjhROUpTTkdmaUFTNWVWVmNEMlNXTHZjMlhYRkpXWGRoQVJfWEVJTzhfai1LU1hSZ3pXVXJLeHd6TGJ4Rk9WbFdvNmtCYjRvRFFEZDhhSUprU0FNTGMwa3RzN2Vyc2ptMWNtSHpXYnJrc3hUNFczMkhwUmVONUJYVnBUd2lZVVlPSVkzY3BnN1Q1S3dLYjJjVGNyR1pYdW1Xdms0SjJCcnEyS0xrOVRuZElwa0tSM3VwUUJjZVNtMzhpeThlajZsMnRZYmVTN0pJMXYwNzVlYlNweVdHYVBjcTRSZVZvV1NQcnE0MVo3bzF3U0wtOHl1Y1daT3J5N3VEMTB2Yk5GN2tuQ29rTmVZb3JGLVlrVFJDcVVXeEhJRk5qeFhiUVVyUTJmOFk4RlJxMDQyaTIzTjJsd2V3NjJfUVlJNnkyNFFRNzJYMjFPUHBjc0xUR09nSjJnZU5RVTFZSC1EeG1oemNReWFrWjFRQnBrOC1neGFtT0xFelJtUG40NzBZZnd3SkFYTmlqT3BJaU9EMG9DMVFUMDd5MV9PVVdEZ0xPVUxNQzZtWmozUkRfZWlDTVVOUU1xcVBpRXh3NUEwTVVpY2NUYldZWHRDZlk5VlZ2Um90S3BLNlNQUV92VXJEUU1VY1ZxZmdFZHE0SnlDN183SFhLN2V0Q0RxTXRQLUJLSml3ZVFJU1FVdnNFZ285alduV3Z2MW1RR2R6WGxWdzFUemkxTVZvQVhURGxINXc3OTUzZjZCUFJUX0VtNkJ1eFM5N2R5NDZ4V3ctVjdlcHFfLUhVQ042N0k1RFZMRzNldXA5aGVUX193M3Z2eFpGVXdpZURzRl9NSHBTRjNOQ05IVzk2UkQtQVFDTEZXd204eDlBbTdIRF9oMVJXejZGekt4dmZNOFBCcURFWTRCWklNVWktOG82TDlHOG56ak1KS2tzS3ZEUGdwMndwZUNMMjd3NFdjVmNJRk1rMGwtcjJiaDlxUDZYWXRTTF9IR0VGVVFCbEE1UG9tQ0NsUTRRM3NOMWRDZmdpOVQ5cXdhUFl6NnFDUjRndUNlZUVUNzh6ejk2eGRSMV9BX3BjOGlOWGFpaTJBRjdBYzM0Ml9jbEMwdGRCZWJmLXRCenhFQnRIX2hyQmRrSzc1a0FmYW11SnpUdHROYWlJQUtWaFo4eFhFLVRZRFpyQzNCQ2pLT203Z2U4Zlg1cjdTcklVNG1nYTgwMnFqQjVEbjVBV0FYNjRrNWg2Zk1paWF6M0Y5SjliQkp0UE5BU21mSTZMXzJ3NXdnRmpsckxSdnJJb05YNjJIWUFwN21Zb2laVkZJQmI4bjNGSVhQVXhuaUtBT2VnYWJCUlhMbnFELUliZ2lmWHU3ZjFSa1d4RE9odk9TSERrZ1lOcl9UeFVuVmx4alhGeVpvQVRVNThaemZZWnRRSExSVEF2VGZxZUFjQ3pYejQtQ2pQNUVuQWFGZmZWbF9YSzZxN3hoVmFyQkhNbzZOeWo2VUZjZG96Mmp5TXpTUENNT2h4OHdFU2d3U3h4aFRNX1dZd3loZzN2STlIXzVzNEtFa1JqZDV1MG4xdlJ2TlVvaGZJUU1Vb29KcEs0d3pNMWt5ai0xWmxPS0xqVURfSTFoMm5wazlia3JnUzdxY2hqYWY2VGVUUG1nc1lZMFJFaXEtaXY5S3J4QVUxTlR3d0I5X2RsNTFfMVl1Z05BaTlNemxTaVlyclFkM1kwWWwtNWV5OXFidERBNWFfeHMwRkhSNTRPT2htdGltMkRGV0tTZmpKazVsRUUzZ3JnSkxYdG9tTW9EMXF0a0lfcXJRSVc5cll6dzFyeUtLc0c0Um1POENXYVRTaFpveXBEVDNMMzRManRfZ3hrejdJd1EyT1N5c05fZlBJQS1pR2lLSFA1M2VhM0xsMVhRUkpqZnkydGZSbDNYQ2Z5T1VmdHJJTU5BT3Q3dlpBMUhGTHotMkhlNGNPckt5SlNrSk9xbklibzdXdTlPVXZlQTdNT1pGSzZCQ3U4Z1l1WGE4d1dJalZGbktJcmlEeWtDSkFsYVlhSE5mZE5LTmYwX1ZzLXFHMFZLTE1MVlR3M256emlkdUZEQmhZSjMxSjA0b19wLTFETmhmOVhDbWxGT3pHRk9tVW5MLWx6VWRfTGZCdDVDNm54eDRSZ1Z0S01aLVoxVXE4djc0azlFOFZSNmg4LWhKMUlzdGw4NFlXUmUzNU5rMktxVC1iWnlIa2dvSWtHVm41UTc5VkRyWDZyek02OHp4V19vOWVQbkZGdHBQVWNmTmtXeDN5Q2dfNUhWWEZ0Q1RyOEhsSUFucWVTcEJpU1VnbjlKMTlxZHBoRW5Nc0Utb1lRZHRvelVCWEdsZ09QMlkxd2swWHpQVEVuVDBRRzFaSFg0T0xYaTNwUTdaZGRaV2F4cWVXQmtUUmxIVVZnNG5TUElnWHlCeWhhUzRBLTd2UExobnN5dFg1Y0dNYTBFWmVtTWFCYV9manlOajhtVG1MUmd1WDMybER0R1B6eHV6WFdGLUtxY0FVZjFJX0VYUG1mQ2NzQ1Awd2hUNHhfTnZwbEktMk9fZUItaHBHdW0xQnByU19jRTBGeU1VSmhMOWNRTWtpSC1XcUxVUWtmWVcxdnNhUEkwRFJlWlFLT3E1Sk45ZkpDV1FQMXhYd00tUWhCaG5nd2dCWHZjVWN6WWFKWTNiWWY3QlF2aEV6bm5RMmRjaDlIX19ZSlRyOEkwQjNNUzVGWVV5aktDX1BscGNtRlpLTlduaWdSS3RSTUdYM19TVVVMOVFZYmZBUDkwVEUwWWxoVzFTM2NaUEMtTmprSlRGUkt0LXdzQ0twLUJ3LXduU0xudUQ0NUlHZ0FYSFJRbXF1MHVLNlFjNXI3ODM5SWdYOF9ybERiUGVlUUlLR1NsVzNRZm5HeEo1YnN5MmpUaU1CeVN2d3QzRDBjd1Zwbk9PZk56bWNkaVFXbFFzUzVraEFnbDNFT3BWRUtMUkdQOEtKamJpTnpOc0dsTmMtYzA1VXlINW1qQll6Q2dJMFU3YzNiRHVKY2ZzN2ZtVVNMejc4M2dIQ3JDYmotVngtLTBOd3pSdjNRQUtFLVRjdW1NRlEtemNDZ2pMRE9fc3k3SzVOdlU4Y2s1al9femp5Z2EwSjJrLWlLcGZLNjFGOUhSNWtwaG11cjVMb1hWSDZTWU5jdy1wWEhyT1lUV0tJcmNkY3liR0NGaE5Vd090VnB5RWFWTE5vX0RVdjJQZXpSNk5PRExBM3VESElxd1huZURwV1VDTmhleVF0ajJPbzlpUDZrUVE5N19zQU9jLW9pOURpWE1hbEk2ZDYtUGVtb2tVWmdiN1BmaExNeXByZXFoc2tUX0FoSG1qWE1jd1ljUkY5TUVDdExKb2wzc05mdURnbUN0b3lrb3podHpIenNZaUktN2s2VnNxMWx4SHNHSDFYcDdIWDI4MG5UZjlxalZldURldHBCR09lcEVYRTJUSUYzZGdzc3ZVcC1rMkEtdWppc25JWnMya3h5TWRqRXhVbktuYS0zWnRvSWN4NDhsT2hrcGl2Y1gxSU9TN3N4Mko5OXE4T093RUl1TWYxWU1xcDhoYjNjS2RoTVhGaTUtVGhoRGU0RURnRkVvVUxUQmlRWXlVYk8yOS01R1pHeHN1Uk9XRGFGOW9NYndGN2JkZzRlZ2VlLWpNbEd0YjlEbWR2Y1dRY0hGclAtMGxqNC1uYzcyVFkyMHh2YWtUMFZzcWNteGl0MEdMWmNlQU12Yk1YRHhDX1RPbzJ6bm9DZk5iRjIyQThINENlM0FrU1ZsVTFuOUNrRjM5SFBrSEQxVEpRdXZfMGM4ZFNxX2FLbXQ2MHJtZ0VLY3gtMXZZaTFrem1FUkNGUG1iNGRqMmNyNUhXN1NDeGVnQUtqeWMtRWxoOXhmSWJWRTVVd3JrNGpFRzRlZ1JkbXpoSk5TcTM0akI1QzQ5eWoyUTBwdEdNQUQ1YlpPQ0VXQ1ZsUm5nM1g1Y1dUbTFoeVBpbEtoOGhwTGN3WlN3QnNvSXVEY2Y4QThHbURoR1RkNTBCMFltUGFITDJOMUhya0NmSGR4RlctT2xoejBqbVJQY0ZTS2luOUJ0WG9taEZsaG1DbjRCTDJ6YTAxMHYtRVU4ZlEwX0xxeVlKR3ROQksxbDMweWpGcEF2a1Rtb0hjazYycE5xMWNLN3MwcEJfTkRGRzNld2pwTE5WMTAxR2prT1dYME5reXY5Y3A4ekg0Y2xDdGdPYUtJcTNWQW9iM1VXa3pvbGpnUnNzbzZUd3pqYlhzR09wY0hOenlpb09GR0ZkQ0thQWI2TVpvejVjblFYNlBnekV5Qks4YUpIeUpNeHJQcVF6VzJhUUpETFJwdUZGZkxPZnd5b2NHV3htMTRiM1d6WlVnZTE4SWp2bFpNU1RYcVQzeF85UHd4OFdZdWVWVUs3VktWOVJLWDFJQnZPdG5DOEhhM3ZFRkd5d1N0UUNZQlJtWk01TUtiVzZJVmVseDkyaWk0OC01dmU3ZVVoYmZ0UG1HUE1UVFBEYTlVT01ZbU5DenRzb1Ewalg4SVI1SVV4LS0ycFdMUDJ2Q3dmVnVxZkNJcmxvZ0NGQ1ZxWWdpakY3WHV3cFJHRGdfVFZfWlBodThKLWJQbGY3eFZBWXcybnpFcGhCbDN6OHZRUmNmTVpKRWlMckRaSWg2RFI2MjEzU0ZPa0dZU2xRQnZkMFEwY21DeldKXzdqVzR5eW5vcmkySlg5alpHeE01M3Boa0kzVVhtaWp1VXFkYUVTUnlxQ3NLbmdlcUZHXzJYMnpPZlJidTM3RE1XZng0cmRrS2R4a2diUHJiOUxzLXhMZ01BbDlMOVhiYUtMV3ZHTHBuMlRRNFpEOTVsWU9rLU5XcnNScHJoa0xJYmpNZjJzTTZ3alV5NmtlTThWcE5xUm51S3l1ZzhlYjlhc2pRMFVwbVk2NDB4OWJ1ZnczSGI2bU1tUFd6d1RIcGxGR0l3eWtJQ3pUSUdNajEySWdrY0V0Vm9rYUE3WFM5RGRqQWY4UlJjdDVGbXF1SmJyakhXOVRjTmJpbTMxS251LS1QdW9ESG5KNE04eEJhRDNFbnZkMllyUURKWFhBVmMyLVpQTEhVaTU4S3FndkZnVGtocFFmaVlMYnh0T1UwRmx6cEVHbVRQb0JGYkktV3B1Z3NCenRfQzBVUWdVTkRidGtzc0wxREFELTVzekVYd01yel9OOUJXaGcwYjZJMmNMRzdEa3ZWeENSekdFd2xfYUhudXRvbzBpOTVqOVN2Nmo0UUlxSHl5Y0tsWWtHcTZERWg1VzJ1Zm9FUFpmUkpWamt0WWdaYTE1eWtzNm5scncwTWhrMDdzTFhfNG5sMlByNk1QWnJPSDVoQk0wZHBvM3h5Z0JYZUlfUkNqbXVqV3FWMjdlaVhlZmZnUFZrNjl3V3J6eUp4SjdMUVAtM1lvcl9LaVF6VmlYNGFvX3B1MXdVUmtZMFNTbE5QWU5id2hpOFdRakQtWGJmc3FNRDEyaTdROXdhMHZDTEFXRjQ1WUFjTElzZW90cVh4TW00UnZZU3U0WmNkTkhEYmw5Tnh3OEkwZWtVQ3hqUndrT2l5ZlJQaHBHT2JwZHNabTVWWVVtc0d1ZWJmRUJ0eFEtUk9IX2dPbHdjdW9oN3V2NDhoRGVkY0J3ZVB5cG1sMm1TRE9sQjhucmxwXzBwdHZIVWZMTXNydXpJZUxPLUpRdXBDLVFienpWNnhCMkZWOS1RVXU2Ml9sZ3lMWGZ0elJ6QlVEeU13TTR5Y3B3UWRoQlZiVGpMcDdyNWd0SFE2bTEwOTlDYXk4aTRHci1wd2VPQldKY3NwdDZLWDF6S3NjUXZrRkpOazhNMnNPaE5sVzNHVUhoWWRTMXNXQXBOTC12N0E2dFVmLWtlOGJCamNwVzhDdlhMdFhtaTFuY2tzYXdocHFsR3kyalR3QmhHVlJMRFFiNUl3bzNseExPU0pOc3BraGFjRHQ0VVNVV3ctX0djckpiM2Z5NERjS3ZVWHdoaFVKb0p5UXNrREtoUXRtdnRYWXZKZTR0OGhOQWtBTlRlNkZXZndULUd2SE9SYWVpcjJITjRIWmp2VmwwcEZ1VWl2UHRNX0R6YXdYYy1Cd2txTExTTC0yX2tKaVN3VmJjaHFJSUE0Y1NaYnVXVEU2TktaWmE1aUhLUlNCVTNiMGRKM2xLUUw4M1FZTFdHYzZJSmJzMWIzMGpoM2NJcVJ5aUdzaC1RaWJmMkxpRmR6Z19WdHppdDZCai1GV29GV2RlQTlWRmNqbjNaQ3hOaGVpR3lJNVhmN3djVVNIQkRqdHJhNEl0NV90eDFtaV9sMDR4aVBFSnA3clpsc3NRWDVxck93LU52LXZQRTRWR3pqbDVqYlVFX25mS3dxdE9vQWNEQnNoVnczMlNMekZ5c0N6UVBNMFNQbnVhRXVCXy1qcjhnMHZXYnIyLWJKVmlzRlFPVXhmclowRHRrREQ2VE1hTklrcG84bG4xdUktQTNtZ1dnMUQxSUtwNnh3a1d4bkhVLTl3cUlxWTl4M1hGNzdsQVo3YUVwWGZWRnBpaFhUUVppWUZMR2VJSlNIYzJhbEVyMnhudFN1NVlNZ2FERFdZeHd6R25uMWloVy1YMDJycHV3UGRWTkpSczg4UFVqSXhMMENhQ0Y0ZjVxYXZ4Z2pXdkhNclEzcTNNVFVKN2J0eUdodG4yXzNoellFYlIzU0x3YUtFV0FHQUtpRWE5SHoydEJfX29aanJJSHRLWTBvb0tYcXF0RXNtb3p2ZFkycjdhUzB4cTBIZFp2RzdUMmJDTGNGNndqS1c3bGxKdkFmbXZuQXpwOGgwbGNqX1lZUnJxTXhGNjRnbVF5ZVBTUGZUOFp6NWFFbVQ3MVJFbkI3eUk4V2U2Q0FUSzI1SzZYMV82WU5UM1RaTGZaOUo3bzRLdjdNY3g1dTJoS1A4eFBPTzJHa2taRlB5azZqUVRVaEJpVFZFSmxFazl0VEFDdmRyWUZYOUFzdnBUdThqcGlpd1NRZUlrRzNyVElXX0JCQWN3UV9TaDRqT2dGTEd4NnpCcnZKM3hhVlhUcGMzMElGYmdGbjU5bTU3ZTc0LVN3dnZ4dFVIcFZCd3NYay1FczZjenJpN2w0eVBPWm1GRVVHdXVyY3BGQko3Y2VqVnBpR29rSmpxYU4xbDFicGplaUJBTUV4NUozQ3lXeXlDWU1Udlg3SDZiazJIYTZqRXl6R1BhZk9QUHRnTXB4WkFSMk53VVpiYkxzNC0tUGgtR1NUQjhmUTk5V25vZGhKUjlRUm9oSnpGNm8td1BQc0hJbkFLbDA0Sm1UN291b180cDRqUGdBbXh2dTFmQk9UU0d4RTBpaW55SU1yUTdyMHk4Y0FUbzNLUkIxbEJlem5wZjQzRlFLcmtHc2ZwV18wa0JEVnE3UmxIR25jZkpoZVFybmsxTjN3NE1YQko3VVdqcnVLdWd6cVZMVklUTTdUSFlqMlRRbUlUTVhic1c3STQ1TDhkNnVkSklETUhKMXBYWGZCNk5RWE84c1cwbDZSMTVoWmlEYkpWVnJiQWpibWVuUXlNVzRuYjRaUnNwT2RXM3cxMFc1VHVla1FvRUEtTnVJRlhuYWFNTGxZT2NvTW9VVEp3MDFXcjZxc3R3OVZhR3RXSzNtbnEzZGN5Mzd2TUNSb1JrUEFrbFhGNkRCNk1qZmVPWW4tdE1aOXZFX2hvNEkta3NEZk1lemU2Ym0wXzVEZzNuZ1RZMGZKalZMT0tfZ3RIaHZNR0NjY2VIYTJpQUJkUkNNbjRsZXRmU25LRFFCeDFFTXVPRDBvWWpLQlVCbFNzTTA1dGp1T2w1ZkZTeFFNaWdLQWZtNG5jWnFvSlQtM1E2Z3BlbjdYRnh1VXZhRlFwY3haalBhZi1kYlVNSnZ1ZGxPQU1zR01FWnBkMnJiLW9LSjJURjdnVkRqdTFkWHRxU2JPWGU5OVBlMk00TDg1eE9rUUlZY2hNQ1FoNkQ0X3ZrQlNiZDUybHhYX1JRd01KT2Q3M1h1bExHUXFhU3AyUkllMzRVVm9XakZLUzVsczI3SWltb1BIbk9jODB6cFdhT0JnRmVfS0lLamVwbThYTUgzOGwzTVQyMGVZcWlIRHJqRDl6Y2lLa04xMjk4eGR1LWswV1h0c3FKMFBBVVdZWU9lNHJ4Tjk3REo2YWhMMUhCcmVERk1ucFNqcnd3MGg0VE1qNEJqbEJSbDIwSWYzbGZxRk40MDk4MlQzR1F2VHJUOTdqSUNNU1Z6b011eUZtQ1ItZUhkU3JiQUt3V2ZPc3RDT2E0d0pudVI0M0dnYUJPSWljbG9JeS1WV05NYVBfdkJjaHhONElxOGpsdWxWRmxKaFhzdWVROE5hTU51Tm1nNGlKRmpBT2U4dEdmZzBnYlRMRUM2UHZOZ0Vnc0JsSzV2NUFqRnY1aGNTaUJtalduaVJiWGpxLUwySzJZUUVHYU44WUlaTm5vY2YyMWZYR3AyVjhNUjFsRHBJYlFGSjFJRXAtOXVNZEE1U1JlQVBYTFpSUXUtRFctTVJJVEFOM2h2X05NU2ZRVUNuLWRvODRyX3d6ODdOMHJmV21HcnNNWVNEd2lGWU12Uks1ZDljTTE4ZjhsNUk2Qk9venBEVUQ5SlB4cVd2NWlIWFkwSkRscUt0ci10ck9lUS1fQ1lHd21NMV94Q0NETndUbThMcnlZUEh3ZFA1SG05OG1QcV9nZXVTOXZwMWVrZTdRMjVaOWZ2SjRrYmhjYUVBX1c0MWFtOFVPazIwMHJZbmV1TGZEeXZwRElMT3ZBXzBYYVpTT2ZlNlJ2bWVtVHNqQ09zWnFjYmxzczBFcE9wVVEzbTJwcFlTN3lXQ2dTQlZkX00yX2JLQnZfbmV0MG5RRXB6aW9seXo1M0JqZWZDU2RLb2R0MldXamdFQlRPbzFYSWhYaHN3bWVPZXVJYXUtakRYQ1dvUTlFLUNCSHBMS2ktZWw0eXlJZG82d2sxaDFLMTVPaTkxZEY0Nk9xWjFfQ1JQbURYdUVTa1NqaWVoN01Ud1hKVXY0ZkxEMkp0R19WVTNSY29uRVkwMTVSTU4waGVucXhUYWNDSUpXaGNiZFdjSVVybkx3VFh4U0plZUZzNVZMZ2ZmMDZHUVVZUXlQOXVPcVdsQ1JuYkw2bG9lQ293OC1CaUNRVGQ3ZGFhTGNKQ2hPdURiQVhhdjJWdTA3NmFDNHUzaUY1Wlhnbnk4U2J1dzNiYTRzMWFDNVhwMVNIdVFSOFZSX3BzTHpDNUpGb0FNNzFfa2tVdG8xMzY4U0ZEREdQWUcyelE0emlDQ2dwd2tpclJzTXpQUE81SXdXX2lwT2h6VEE2MFhTUDVLMDBHR2VwSkFrTkM4RDM3bmxvMEQzY1M3Q2FLRmhGN0JKakZYUkNmMmthaks5UVhEZDBVaGpqZ0FlMkVIMmRvRE95Y2xyY0o1dHBxLTRLZFBKdFBwNzN1V3cwbjE3YWFQa3l3SnRWczNwZDJ0aFByVnVxbmRPT3JuVUwwMnZCaUNMWFVVR19jVUpBN0pEQktxVkg0dUFaandyajV6NWpvZ0ZjRktybXV0VmhyTjJEVEtSWnJkU3RsR2lHZkEzeG1YWmx3YmRUZ2F3Z3JTQ1JTLVoyR0F0bzF4UWJuSnVEWTVmNEFVRG8wbFdUR3htSWh2X014dzFjelNzZGtEM25JeGtMQ1dDLUZRLUxHazZxbFdPS19GMm92MDFISWhfOEptOWNDWlNxRXBZcnFNUnNPQWQ1aDc3eE16Q09Pd3ZtaTIxWWJiajMxdmFHMUlVck1vdW9LamFSQ1RBek5hNThCY3MzR1lXdVNJa2xDcjhUZVhxOS1VeFRWay00YUJ2QTlSc0lic3kwQUpvOEV3ZVcxSWluNlUxM0RfLXZpVDk3Q3RTLWZCY1VMMEtOOUdTU0Rvd0dEMXczTUFJUGhWT3c3eC12eGFYZzhpVUZFREQyaWg3alg5SWhPMWtqbnNidGMyS2pZVGhDWUxKd2pKemlkdTdkQ2dxYXVaMmNhR1VaVE9VZE82Z0NQQnJEbEVhSm91WUhjdlhLbkhzVmdiZ1BvMmpqbG11WUk0akFiOGFSR0MxTEFEMzA0M1VscG1fRlR0ckk3cUVLQ0ZOOXhXTVRISHBGeGlEQnR4bVFUWVpfOEZJN3hpTkQ2WGFYb3BLVy1adlB3eE84dDE5YlBTZTg2SDdUZ2FWT29mbnQwODdGRVZERVFSYld6bHZOd0NQUWZzcVJzclEyQ3dlczRhMTFkdXNTSTdVQXJhdlcxbk9Wd2FGY3FxbjdmLXZjVkZueVJ4cHJrQmlNdGs0emdwNzVIdkhrajhDcUtxX0lRNmVpSGhRVkl5WGpIWjlRdXZZaTNJNmtJTXBsUzZKSFBxdS02d3BHc1Jqal90Y2hLdlVtY3VwMDZuYmVYLUIxVGd0cF83Yk1aT2NDV1NtdkxBekxJV1JZZGc5TFJHcnRoMjQzcDZ5WnFVVGZJMmpPODZnOF9PcXJCazU3dWd6cGFjTmZ1UHI3U2tBTWdQRnM3NW5IX3RUaFNnMXA2VlkzWFRBSXpNYWF4dFJpOGpUb244ai1YZEdLSXVjajBUdnVVQ0pwX1JsN05kMWhDcUV5ckJaN3V2cHNFbzVOTHo4SThWZmxnaS1ra3F1Rks4UmdsbUNxcnhqSzlndXBac01OZ0trUklhaGdockc4VUNrN1N2RjZzcHp4cEVkNV8zRV9LTlRkN3NBVFNZYkFCdkF4Tmt3UkdSNGJObGRzU09DX3VLWDhpd0ZSTlhmMk9LNC0yVHFwc0FoTGlsd3NTbGtJTFpRWEtMOTVIallyNlNQblRLUXN0WTlCZ2VhUnJJTEZ5LXZCRVlaNTl1MFAzTlllUUNRYUFHTW9PNDF5MGxTX0lvZktPSEV5cG1LZmRoSGlIZjFMVnoxYkQ4d1hrQjhyMTRSVHBadjJmV2hPUDd1QWEzYXVxZFd5YXFQWGFTVDJzLVJhN2hnWXRNWkJtLWxjbjR3UGJ1MW9zZHBhSl91MmYwem5JTHlIX2pXLTZLcFVhUUU0NDVicFNUSGxRU2hTUGYxWEQwZzdmTXlNaFh2ekJydVJmdDh0MmJROTFKY1hkR2x1MzFBV2lNenN3WWxSWHVaN2dQRXZFS3RreDJ0S21qanhEdGdLbjN0Vy02T0xqUzJiLXVsVURWeEsxRi1GMXlVUkRYVjBrRzlzSlItb1p3MWxfbHVDREp4SlQ4ZnZfRjNIRmc1N3Q0bHlUcjU2SnJUNk82Q2VTcGNHckJESGthZkJYb2Q0aURfTGJqN0pZQ1Y3eUdFSGluNU02QVRLSno4OWNGUEZDR3Z2bUdET1NOakVBOWtoWjVfQzU5eHNoYk9jNkJwSWVvTTBxYUNqS3lZbTgzaDFQRVZJWG1TY1NacURKY0RaYUd5a2ZidHVkREFHRS04Q041Mkp1cnlXVU5pYnlnLUNXVVU1V2tuU2s1czVDQnI4RThCY0d4SnFqNmQwOXdJb21Mdm5wcXgzY0JWbUhtS05yUk9JeHZ2cXhPRXIyQy1iS3NmdFB3bWljajFaSjVzSGNyVEJWNHlZNU5CaW5NaHBYVVBSeEZZSWFRRE9Sd0k5M1lNSl95WmVxVHlxalJTVTVvQm9ZYkNud1Zwa05Qbk1mNm5FdG5MR2JNSm9OSGUzYTZpRjRoNTBuOW5PMlNRamVMQ2l1cmZ5UmtGRXZuc3h5eEs1RmVKREtZV3Z5SVdwWFVCU0JIdkVFa2ZaNkJOWFNyUC16bHRkbC0xaWlaelVIWmxmMVk0SUt3WXNsbi16OUlqUV9QT3FELXdpQ2I0YTJucy14em1zVzBWckY2a2JRT2tZZWo4bnU5c0w3WDF5TlVhNzBIS0plakc2U3ZhRUJmbVNXWmQ2LTRHYWFFaEVVM3dET25mWFowTlFmVTRQU004bHh6UUE3Y1lyRkpVYzNMbURBUHdfSHBubUZhMlVzY2w4U21Nb0NDVVhDSTNxR0xSbEt1dF96Xy1KQ0N6YmZPaXlrUnBzOTVsQXBPQnZnNUU4YlBId0pPeUR0TUZKVXRZbFZMWVg1UTdJSV9sZTJqY28tOF9ZUmJPc3ExRWdKeUxpUGZabUh3cUVfVVZpWFhtTXZ0U21rZHp4aVo1WXhDWHZSa1lZcTc5Y1FGa05jOE9KdnlxbWF2a1ZtbTFPR3ZneG9aNkpCRERKSWNfclFGczFZazNRR2hTM2Z5eThXRW5tUG1Td3VJOG4yZ0o4aDRnLWRaT2RwMTAzcHkwbndLb2N2eUJQakZNMHZwMU5RdEgwVmdLX0ZJZGttdkhFMldBMTM4bWg0TElGWHZzSjhnamZPa1ZvVkI2X0hJTlFxSEF6MFdrVmVuczRlWE9nRzJGcTItdGRFZE1JUndPSlV4X3NyTVdRR0ZPSnpKZ3FtX1o0WG1fYmpRNDBXRHptdmlOOURua2pCaFYtZG42UUttQ2JQNXlXRFZjWHpHRGYtQ3NHUGttb0VvUXFxQjFXUmR6LUVyelJDTEs1QVZzbkNoQnFweWp1ZFZ5MG5TUTBRZnB3emdjZDhMdmR5NmR5SHIzMFBXckFQZlZmaklxQVpaM0xCRlJTRjJOSkpPQm1mS2JFcld3OGNydGl3UTgweXRNYl9IbDRjZEdJQThJM0VHcjU5Wk9RTF94N0lmSUhvdGxMdmk5SnhnZm83WloxbkVaSV9ENnBxcDNYdG0tcUNSVWJvbW1UdHFIQzAtOEpqM0lwU0JKekV2Wkp6ZUVDcUhfanpMek1XS0diUm1nMlNOaFN4RWY1eDZPOGtWQk9PSlRJWWlzYnZuLVdneWI2S0Z0X1A5MTBhbHRNUGZXanA3NTZJUUpVeDg5Q3RUZEpuNDZYVTI0aUREaXFGVldpdWh5WnBGenQyLXNsZEE5WkdiX3JWbWhERFJpRUF2djVJTVE3WjlmdVVGU3VLZkdjU0FRQXVWM2dzV2Z3YW50bThHSmNMakxNSTdFWkxMdTVvVVZzUWpnd0JuSmktMUtPTFNqUkdZdmRzczZmLVY0N3hoakZKRGdJd1MxdmU4UmhEOXUwMmJzdFBaejAtdmFuR0dBbDVVR2tpZ19yNnlrMWczbUR1LUo2MXFBZVNuaERmTDFlN2NhVE15TFFOZzBDLXZfSlg3ejQzMmVsZlA4cXhhTVBObHFOSkpQQ1QwQkdTVzlZd0cxQjNmLVZoVU05V3U2ekdFeE9kMkNldkxranBIdEVoTjFQM0oxYktlSWdTWVBaR1RPNVNkamFKZ2VxSndMdVB4MldReVpuTnkyM3duclhiUnpILTBTN0hIOWRBZFJSclJsNERIUkxrQ3Jxa1hfZGFjcWstclhWbWZjYkRJNkgyRU40c3FxQk81dmZXU09UYVcyV2t6QnB0ZHluZEZtZlItR2hJc0JQektzV3hsaGNzTThvUzduYTNBQ3oyS3lLdnpPaHRubmdsU1hydXhfZklhTjJ3REtrWlJCQU5DWm50SXJ5YjRtMkRNZmVWQV9PVVhGZG94N0VPOFB4dFZFelM3VHJueWQ4MExNcFpSMVFZUTR4c2czbFF3OFlmZzZhbEhaVG9ldERXS3ItOGFNM2Y0aHBfRGNYekY3QjZLd3hVU1NIOEc0QnQ1YWFvYmRqdkZXdmtUdEV5V3BrUmVxRmpOZ251TlMwOW9WWUo2ZFpHaUpFWkZ3WWx1d2U3SDdDMUFEbDU1RF9naUgzQTVoQWZuWU1ZRjhVS3hnUG1SdzJSZEUxVWIzV2tVM0xBeDRjN0s0d2d5YmdEUm5VSVM2aFZrNmo3VE1TQ0I5NnhvUU5yOTdEZVNmNTBWMXYteFdEMWtEakdCaW81WXNDVjE2aEJsTkV6Smp6NmNPZlhpZ1prb0hPUzhTaUJiYVpMVmh6UG85V2xzdk42aWhMZEJGdmdCM1VXdXAxLXRHb3JUMmJINkVyZ2oyNmQtUl9UQVpOWWNyZzBRR2NyampzbmVkdFJZOVlmcEpkd2ZobzZ0U0dMdlA2WkMyQ0Q1MkJ0ZmtqLUt3TXlsV0FTSmk1NEJIWldGRHB0QWhqVVM4Y0xuODJCeTVrRFZ2RnY2YXpFVjh5SWlCaTc0Ump3VjZwZFR5QW12azJOT2lPYllWUDFoQWQtdjJSWFpsbzRjVldfUHNXX0hkS1VJMzFiNk1fbmpwaDBVNEF4UGl0aGtHRGx2WDVKR190RUNJakFOMnFFUng0bnc1RF9pUW5qazZVZjlOSGhlYWtkZUJrSVNFTkZYUGdUaHIzSGJyYmZ4VE1IYmYxaG1MTWYxNGN3U24wRjZuOUtWUE5EcFhaRFV2dFJlQm9GeWpWN044VDZGQXZQVFNlbkZ5QTRMaDhVR2lzakZPeC1pcWpDQUlKTi1hWXdnQVUzOFA5NmpmTTRUMGVlMDkxZkJBNlNEM2xqSFFkeXU5YnFWU1BGejNhY0RDUGpwMjBUSzlzdDF4MUhNOWdQc0ZYaU9KMHVlTnZ0TkVEcFlIU2ttTmhpNko1bkpERmtNTzhIMnRxbHNzQXJka2lHNXBYU1V5aTBFLXlsWGp0b3JiUFZud3BfUURtMWF4V2R4VFFPUExuNEpOTmF4dEs4TGxrYWFlSHI4NnpCYmp3LVFYWThJNWhjX3RJQnQ1SkR6Y0phaVVNRW1FejlycDVOWDlHZzRBVVZWWlFCa3ZOb0F0ZHh2eXZ0WTY5SlBrMUpwVlZ1TUg3QmlScERtUjExZF9CaUhpNUU0NXlHbnVTeGdKdHczMXVVWVlzcFlreEhkc2hYUjItUEN4WjRfTmpId2VWWGNTUU5jakMtbW9LemNKSFhjWWdQSmlQelljcnlvbGVDcDVCb2NjRVpPLUU4S0lnN0FSYXVKTW85VUpqWFJTZkNoYlJVVjdrQTRtdHFYZEhpd3ZpWGgtR0pEYmJwamFqVFQ0SWxtNW5NWmdJQlhjZURqZXl6bFFDc19KazFxb1R1OEw4UEN5YVFsRDRDaDBXbjlWb0JnUWZXaExfeUY3ajhERXotS1NGQ2U2NEZQazM2dDhkTDRyRU5xd0YteWJnTmU2MnlLSXpjTDUwQy1sZHpZRHlCVmxrdTFHb0tpdE9NSV9MRW1BOU94bWM5YzZPalZpN0dKTFNFTDZPNTM1TmF0ZEdvZVBWeDM1ZVdkdmgwLTlwUGVYSWpxR0hXSmpCTDdoVXZDTEVnNVk0eE85RTFuUm1kMWs0NzNjTFpJZ2hzWkkwcUpISHl6d1BZdmNtd1d5RXVacVlJYmEyTTZmWTFuQjZaaE9EOGtETVJDS1dqdm1uTWQxbkxNZ3lCZGFOa0cwZ0JBVzhwY18wbkdteXVJYXVBWnRwSEZxS0FNOGhDMGlQdzQ0eDZYWTJoWGZLQUNzdTlzSTVwbEdqUl9IQkQ3QXlHYzVuNW5sdTlTLS1GWHNqSHF1RV80U240aGZNZlBLTUYwLTZ2ZXlFd1RhaEpYR0M5eE5BZUktRFJldlNtWl90bFFWWFVMN2xyRHotU3g0X1F1dUJRRTdtSXlUZE5YTzN6MnRxd3pXSjI0WGgwemRFUEgtQndEb0lqM05ZdGRKYnJGbjR1QmpzeVN2cXJHNU5SMUxKNXJKSWlrdzE4MXFxMTVheVA2cTZBMTQ5cDk3VlVYVDdtcW1feWw4MkdQQ2ZMZjZFWDZtandOal9LZnB0TnAzc2ZVMHVmY1JzX25SN1BFTkhuUUtSZEgtckJ4UVZ2UHdIN2ZSczRiRXd2eGlBTnFxejVOWGN6cG1jNXJBd1FVWVJIU0QzUWJBUWVudEpNcXdzVHpETk1SbTNCYUc1cDBzcFBsdmJjTEhITVk1MENUZU5HclM0NFZqUDRmX1FLQlllbUZXRzI3RzVLZndSWXdZeG9FdHAwTmJ4OVpYYjVlbTNOTGJNYk8zdnctZVJ6S3ZYX251THo1SWhWR1ZST2Y4ODZ0VEVHT2Fnc0Zyb3pCeDBha0ljYmRZVzdlYTg4VXNSM0RXd0dXNC1icjVQSldKYm5uLXhCR0pOekZjYjJ6V3pFenhqMHpldVpGelh0RnJaVkx4NTJHOG9VV005UENrVnpSYUtnRWxjM1F3NE5VQmJFQ2tBeWlhR1otNGRnR2JISjFXSmxoalBNcURWRnFocEhhTWNyLXdFZzlFRXFGVHNJai16Uzk3amZyUG05QXFMdEZSTWJwU054TUE1ZGtTS25GQ1dBSVU3WlNUTFdHZ0xYTFV4b19LTnlFOUhTQlM2eFM5NWRlYTRQbllOSnYzdmlWSEpia0tBSnd6b0NUSTR4azZ2V2NaN3JWLVZaWm56WS1nN1hKLWl2ZExBSnliaEVvNzdpOE45OHFCQnhDVE5vcnQ5el9XbV8ybk5aanFvZFRNNENmTWMzLWd5T3JFbGFwYUdUbXJ0Y1BLRllfb3NkTmpESWVwSXNBck1IelFNcElHdnVZR0hCY0JjMjNYTHl6RGh1bzVKRlRsV1FmYnRyMGRXX3lDeFpFcEo1dmZRanYzb1pkRThfUzJzRGpuLWczVF84NFcyUlliUVY3VkZwT2I4OGVuQkxRVlNqSnlmNlFHOEdPaDFXV0wwUk5NOFN6UTl4Y3dNR0ZmNHJnYkdKbzgxVWhvWmRlUkYtRndmcUZqR1dWUGpEUlhZVFl1MmRxY0N2ZzdqdUZiVVVPR0t3c2JmZEk2QmhuMTM5aG0tbmJ5TjBRRTlNb2k2UWo1cVNadnpwSnJ4U0duQjJLNVBjSVhHRURtRzl6V09nXzdJTkV3YVlVQXJEd0lSamtDSndUOXEzZ1diTHVkMzRXX1RSNTlNWHpDV2hDSGtmWmt5RGVvUTNUdjJHVmYwNEE1MUxwNFBhTVlxLUM5SXYzLW1QbHFUNy1RaWhJdFRkeFpleDNaWFJEcldmRllaQTlsMEtUSXN2V2k4bWhrNnFMWUc1UGVtU2V6SENxN3pkTzJIbG1yeUYtMU1Sakl6b1QyNUc3bEFaM3B2NmZRV2JPR040RTRUcWlFTkNiVm0zVnFXd1pCb3hhWVp2ZHhpU20ycFRmU0ZIeTh2N1pkNWp1N0Z0SFI1azFRWTY0MTBKbkFrMWNRaE5tclNIQm5YaHhKbEZfcWYxcERHajBSd0pIUHNYUGg4WWxkSzI1RFBPWW9oVFE3WVd4ZzR0ZngwV0R5T0w3dUp5cF9nWU00TlAyZ3R0UVZhRG93Yi1kOEt4LUZ6YjA1bWJ1VEJvaTduTmxfRXplZW1vbXdVeE1XdUVpMjZ4NW53azJLYW80OXltaGtOYnVDNkQwN2tmeVVSa2NkRnlJakhGWkRybXRRbFg1dHE0MjZyVEpSWkxNbG90RkJvRWlmNGtjbGNfRlJ2bG9ZM1d4YW9MY3hEMlI3M0xPXzdaRU1oa05GQXFadFFGZHdsZHBhcXFKZEhxVFNpYU4wVmFvYk1nRVZWVmFtQU1mOVlkMVdEU1R5OTE5UXB0Ml9XTE41OV9GRVZOS2FDd0g4ck9UUXhOV0FhRmNKOXVraXc1VUJXNHZHVktEQzAtay0yWTlDSFFrVzZTTnI0UDd4b3NoSzNUcjRNSk1sWGtqclJmVjY3YW5MM2RqSV95ZlRSakVOQ3ctMGJmT3djTFlyMW41X01mbHE5TjYyajZ0Vy1ZVS1pRXA1S3c2aXBzUjJORG5jTXNtQVJLZ3J2WmEza2R1SkU5NmJFMm1OMUI3MHNPT1JkbmZNNkk1N04zd05xZU9ET1RhYjNab3p6NV9ha3ZmazZ5bGlBRHY4SFJXOWlSVE9tRTBzSnhFOXZ1d21ZTFJERk96WVZEUk5Tby1TbFRTT0dCdlRzN2R2akl1Mmw3Tl90RDlTcUY3dFlEQkQ2UGI0NkZLM3NET2tPbkhuZnlEZ2w2RjEzRS03NjZqM1g1N3hhdzdhd2FNUnFEeEozRjZHVTVuOHhvUkR0NG9VQnVRMWxEc2FYQ0g0ZDBYTzdDRW5tVFdqX3NtZXd4eXRMcURLQTdZRTNuWUFQODVmTkdLUUc4eW5zN2MwYjNadkN2OVNQMS1sWUREQ29NX3cySU5PbE9RLVZLZnQ0RVJGMExxckNpNEhJdnhZT3lTanc5UU5DRDk1RU50WGx6cUNER0pmZ29jSFdpTnB2S1IwZUhVNkFwMkpoQ1JJVE9JMUJuZmRHWThQM2RyQjBDRFlfelNfOURnekQ5OFo2VFNUTjNaTTVVU1lKZjBtOXdEWGhjejZxY0loZ0lQQkptUkFxS0tLdzA5RlZ0c0dQR0RxS1hPQ2tOMUlxWm5kMkxoSS1NTmQ4UklKdUlRZzZHRmVpeHRVX0JxcndkakxTVmdtNFVaVVF5UTBwdThwTmlJM0NyS2NTOElKbngyOFFIdzJrYWVwSHpwY3RnNFpkWWVjQU1yVVJSQXNOMWJETEFLbGs5TjJaQTUtSzQ2blAzMEo2eEM0V3dhZndxUWVrVWduNUhTbjRZZzRWQUhSaFVfbC1qWnZKbGZFZVNJSXZtZk9Bb2FYSVZSS1hwUVNfcGVlc29pdXU1d0ItcnJxNEQ0TVVVZEdydDhfU2FKdzRrTFJvUkZzMnNTbnNBZVNJX1Z3bzRlakV2UExkbkgyZ0VmOG9ESDlQZlRrSk4tR2ptaEtLYmxtdnNaUXhwZENiQ0xsSEZzMWxyVkt3aVlTZ0VMY2Jwb2w3LUxybHQ5Y2NmbXFtNk1zczFBYVE0TzVzQl9sV3B3WjhmVDMzSE5wYnBEcVNDZEdxM2YwVWRzeXA5U3FIQm16QVVJcTNJd2tRVUgyTi0yTWFfRW5rM21melB5TE1WU0Y5cktwS2NPemYxT1UyRVZ0b29DVlBJUTlqbTE0OWhTWjR3bTREelhrY0tpWENBUGtKZGVVb1hOMjIycTZHZlNPNS1TYmpBT2NHTHBNMFNqTzl3WU9xRThsS05KV1RFNDNVN1BTZEFCdXpTSUVFbTg4a3lGWDZvbGRqQllwQ3RDdXlKSk1LbnViSXJ1cjA3MEJBMjN5M3VUeW55U3duTmxNN2lCLWJRVXgtV0dURGdBLTBRY19admlyaFFrWUFSSWV1dHh0MWlFSTFJckVxSFpkYmczbGZqWFJDMFlNTmhJOC01RnZvel9YMm9QdVBkSlQwLUdLeFFZQXM1ZnRYcU9hTzkxWmpkSkVGVGwyMWJNYUpoSTh1enEwclRkMXlUZl9fRWV2eFZ5WFVScjdlblFFck1YSVBkQWRvUHZ3eGJFS3h1M1lpX05janFkVXRpeGxjcjZlazZtSWplSjByeXBnVnRmOUFpdEJ6T3BucXhfMWhsc0djcmNlclQ3NVBTOTBwd1VEcUk4bjV1SHdsR2o5TUtiN01Mck1PcmFRblZxb2FHRXAtelZPaDB4N0w1VXhFeVcwZ05LaEQ2aHBuaTE5NkhlaXc4dkJQbm1QZTVYMzZEVUlHSUllcHdNNzdDXy03ZTZHX0JaRlM4cGFYYjF0R0E2S1UwNHFib01wNHp0OEJCTU90aHV0X2NPWWhWYWZNdDJRM1VtWHlKY1U4Slplc1I3ODJBLXBKcTFuRW1WVExvUjhWdnZpQ291R1g5RFlQdUVUSGdBTHd2V3kyX3ZPQVliTWNzR3AybGM2QndKOEpXNEJ1NXdZdTRMN1VDYkhyMDlER3lDU2JtRXplUkFKaEdEblQ3SWFUNFFOS0JLbm4tZXl3OHdQVmJ6TGZDRFl6aFk3UzQzSmp1a21aajJkbzlFc1h0R1NwY09PNlg0eDZ1TlVPVVE4NEtyM1E4enhQbXI0NW4yNkhES1pyeTR4YVlCVE9JSzg1MXdBUEY1STg5YUlRcW9QYVF6djc5R1lILXRid3VhRURKNlZraW8wbDhRUzVJTk1oTTJTeXFOSVpsNlRsVFkyTkNzUU5lV3owcWFvdjJDRXdsaEtETnpNSm1KMU5mYVpQRFM5a3pFSzhicDFoSkpkdW9Qa2t2YjE1ZGJRU2FZOG1md1BoU1c4b3ZBYVZaY19LLWwtUmxvdGlWSUtwN01kRjZVYkdOdGdmX2FfZDEzdHRZR05Uckt2ZGV4UGp3X2tJRW8wUHo3VmgtOWlaV3BfVXA5akc3VUxpOXVqWEN1X01EQnZEUHNyZmh5RE8xVTBIMEhZV1YzT0NIeFJENFlyNlI4WWRfZGVYc3U0RnphZW04cmk5aVM3UWFreGhSb2RvYWRxRXNkQXgtV3p6TkhpS0k5VHJ6QWNSWmJORjNTbFRBWVFRaWpYOVhQOVBTRjlFaWRqcVNTdjg1XzR6ZVhyeDY5bU96ZzhSS053Y0YyNUZWSnkzUGs2RFdjM2pQdHRTSV8tR1ZDem1KMkI2dVIzbUE5ODd6MTBsYnlfcWZtVGZpRXVkM2RuU1o3ekpfcGsxMUdhTDlXeWRRT3JHZUxLMXRUaUw0MU1sRjZOb2RWMHdTdE1YZEZLemFlVjhzNGg0bEhNay14b0VkVlNPWGdtSlVZWEpNYVFqMjJMZTRiLUs2ZFFXUm00emJxUFFSSUpyZU1mdl81eHB5RnlLSV82TUl2dFozbTdwalhaeU50M2kwb09hRjRuNWktTy1POVBHaFI3bTZ3Wjg3MnNleXM0enRadDlrN3hvYzNCWTJVc09NdElCRGViV0R1MVBDT3JxbjA0QUFvYWZVYXZKTURMZTVMdTgtZ0xuMkduNkFyQnBkYWlzc2xqQndWSDBxRmR1UUxLbFJuMXJybVJDZGlfTWZNZW1xcTRXQzRsQjY4MnNrcXBKa0pVV1dpcVd1OUpwODktcWN6R0lzU3VTaFRkZ3A2bWhON2pOWDF6d0NxQXRTOWdSSFBxaFZsZUVYM3hZaGVEVmRxcHgxNHl4Z0Zkb1ZmU3A0S1BqOGVNcWFaWUlIUzlUNjltT2ozeVdHeFd1N25hZTBxaVBoaVNab2RSUndGLXJQWDRlbTBkZnBlckotVTkwTVY0aV8zOGhpVllaVm5ES2Y2eWtUV0ticzBIWHRiTFNnNDJRYjJIcnFucHlKZ0NBU1dabU5MeHlyUTBNQVpyTW1KeFU1X09XeVQ3Z09RcFV3OGw0S1hoSkFaVG1zb1ZCZnJsVUtPS1RyYXNjWTZEa3lYUUJYS0R4a21kWWNWR0lSMkdINmZ6Ujc5S056V3ZQdjdsZFR1UzhiQ2x6Q29yOHhELVlONFVuNHB6RjEybXJjUlBVU2d2QkQ2bFV1WlZIVmZ4cnNXcjhGREwwX0ZqNEVRVlRIdFZYRmpaN1c0bnFqMjBfaDhOWEFxVXNDMkNzU3FWU1NjQ0pMbkxhUE04ZXRjVzFaaTdHbm9wbFBxR3dzWFcyS1RXbFFfYlp3X2NSbU5WemJJaXRKaUJQZVdwcUJzX3p6WUxraUJYM3J4T2VfUC04ZVRvRHdwU2Y2TlZnNUtjVW9jZ3lsUGMxRHFkOGxJeVktRnl4OGlyQjA3LThkOU9UMEhBd0E2WVJpdWF4N014TTM3WkZJSGNvVFZfMXplRmRJVXJXVUx1czRXWmZ1MTdYVjdDU3liaUFDclFVV0p2M0lFVGFYelE3SUtUaC1ZVVVhTktRdFFmOW4yS0YzRmVhOVc5Q05FclpxNUxMU3kyczlXSDM4QVlQY2ZKY09Zdk5oYkFlV3JlSjdxbE0zZlYzNlptNm93TE8zdWtHdXRsc0JhLWFBeGI2bmIzVmV2YUNFMWNkY1BYbDdXazczWXV1RTNQT0ppVFVHVkprNU9wd3NQVURmZUtUNzY4MGhhRnlLeXF1Y3AtaE5MRWRJRmsySnlZY001MG95emZick41WkZxcVVhU0R6UDR1UC1ZNlJlOEZYZWxDbllkbEdtTWloa2xzdmpIUGxfWXZWQXhLQVRTTlZMeWF1RFpwZVdUVjkzV1hSYzFzOE1rM2t6LTRRc3MtQ3g0c1hKQ1dqd2pxd2RRMnZwZ3lFVElwM2pjbHpYanVRVEZPZENodTI5MmhSMFY4ajYtbUNna0xTTFZWejFDTFVYUk9UZ0hia0Z6bnhycl9WbXkyT1A5ZDlRMHF3WkJ3cE5JeGt5VFZNYmdDZk1sbUd5eU4tODI4d3F1MnlUaC10MEhCQWx3QUI5LWpFSzNSYWZ3TjE0NzFnY1Vzc2gxNURnYmVMSk42ZmxRTDlYVGdVMzNTdWVfX0luSzM1RU9Rb2o3Q3E0amV0OEdjQ1ZrcFF0LXVWYjlLT0tQUkZlVTZHWThGM0p6dkV4aGVBSkdXSUFxQWR0OHZwS2d0WUJMeG1SSjdldGt2XzRvWm81bEFfMjBEbkxqX1FPbVd4cWx0cExKQ0xoVzg1UzBUYzRZNjFMQWxjY0hIbjl1c3BrMTZZX3ZlNU9pTVZ1OVFRMUlpZHYtck9uc1NSVXZINUpMQVlfdHVHQllDdTNQVDYwcUxoTE51VFF4S0FnbDNIdVU2QVh6VmxwS25QN3hrWWMwd2hsSjFNYS15QjA5Ym5CdDNXdkdicEJzemZCVWV5VGwzejR3OWtaV0xhZGs5NUJkemVUNTVpSVVjTnZtbDA1RDRHWlU0MFk0Vm5Xa2hSNWFEUDd3cjFYclRRaGlDdnhFY1dJcnRhaXhtT1QyclFTUGgxcDZVb1piWXJhSFlnY1dPQmNfMTZqTlRMMjh2azVDT3VaWjljeHJQODB2MVVIOGxWUjJUV0FVd2FGdVctU2d2Ri12eDlyUms3a2lHX1Yta3A1X0VGXzhIeWxxVUFqRGdyZ2U2S3I5ZTlURDYtZjVtZlZPZWNyWHIwQWZhdkY4U2x6ajN5ZkxFSEp6aHJ1SFNmSFpPWE1ZR0U1bXhyc0lOc0xiZnNpOTRKSWdCVXJtSUNvTHhZSmU3c01aaE9FZjZPaWp5di1ELVBlVlplUVBRZ0pndUw1MWw3dVFMUFF4RzdxaWlDYnZ0RC1tX2x3UjVGSG9VZ2hiSi1nMDY1V3BaV3hMdHBfNmhLdzJNSXRBWE9YSXdTeVJMT2JaQUhHeDV0ZHdtMkxLUVFTbDktal9iSFkwaXd0aDdWTEdrTUVmZmhDZ0NNYmFvaWlVMUlxeXRmNTVUTGpVQ1lQUC1GazZqT01SMlhiUnJsRzg1aVRZbEhlTGVHM0F5SnNwQmxFSTBIX3Jla3FNeUNRN3NXTmVoNUZQUTh0Zi1HZGdaeVZobXV5Y1BLTE5IQTkzTWxTcXY2em13WkUyWTNFREZJWENJV2ZkdnFHazdrN09tekZubXBZeDlqaDdOSUVWWi03ZWdfS3ZHT1NYRVR0bTJLWGhKeWNWN0pFM0dSSWdhTVUzZDZpOUVobkRGRHNRU0Jrc2lRTVlVaG9qVEQ2ZnFGeGdrQU1JOTJTZlB1czlrSTUwR2JTS2Nfd3hBN1Q2UEZMTHl3OTJubUhmTDliejZqNFN5WkpERkZIeC1sM3lycmpRRXhVQklsV25UUEV3WmYwYjcxbGhyYmNRVEF3dGF0VmtZT3RGT2dXaGJ4NTYtRVF3cldWdmhxel9HVkNRbzF6UDVsOTlFaS1HU3pBemlWT2NVdnAwMllFcTVUZ09Kc3ZuRVZscjNnbzNEQzF5Z1g3XzYzcXduYjloVjRJeVRNR09tQ3NGTXVtQU1jUHFzd055X3o0Zm1Kd1M1YzgtWXNmdGNtWEh0Q0ZKeUJWcmdmaktINzNlSVdHeWZwazdaXy1XSm0wQm83cE4xVk02d3g5elBFMUYwQ0hrNDNjd2xMb3Q1bFdFSkdiaVZSSFQ2ZVdYZUxBMGtEbUx4NmtoWDh2Y090TUlkX09CRktOZU9kNHVUQ1JDUkpuVGkxZGxqVnM3NEljWlZHUUNldUdWTkJSa0tFLXhIN3QyYy1GT1hpcFBleVIwaV9kYU9qb1EyMFpxZGdjVFB0RTJfRnF5SFExWVM1VzRqc0JvSGpfMXdiNU1OamZUbkRma1ctR1BkLVBUYXdOQ3RnWUsyNDhuVXZxUWRna3MxQXNQaklpSmpVQ2lya0YtTURJV1BGUXlUcnh5VVRlYUdCZjRYUGREVWZCeHVWeTVxODcxNVhYMUsxbjl5bl92QXdLMVZaY0pZbl9wSmVGd1ZCUHRZZ1ZYRjdmdS1SWXBrWG81SEtEN0J6RHJsdS1yOExMYW9iWUFmdjlldjhrazhIRER5dnlHWEtZTlNZYUNTaGRxUERkUjFzOW9iVzdKOUM5dndJb3RHYmp1eGlRSDQwSnB4eWtqZnZ3UEJpRmRybHR1NjR6aXI3cC1reHhRdWxMZTB1NXVNRlR4S1MxblI3azQ2MTg1TmlfMWlDeGxWTVFndFF3VXJkVUhaZklhUUJyRWhNWFJLNURXTXRFUEpnZXZuT255bmVKZF9GTUQ5ZEpKWXNseVpicjF0QVhUQnI1ZWRxYVZRdjMya2RlbHJ0eF9obGhmTzVsa2pkVDFGNjl0T1BjTERTQm9PWU5oME5EaUFSM3dQYUJNSHhsRmVsckllZW1WeFYwR0I2RTNnNWNyVnJjRnNHZ3VGdWQ1X0tocTloSW4xZWtOZGI4TFZ5MmFGaGI0NjNpYjByOUJFanlBVU5uNGNnOVYyWXFzeW9FaHNNVUVmNkhhT2VhMGhKenZtR1dZTGE4YXNnbFY1b1lBQVdsNU40cVVhemZLbGJadDZNMlEtWGNEQTRYOUFXVE5TQ1lZcWRDMk9FRnN4WkxoTnVzbl9TWjZKRXY3NUE5azcySWNDSnV0WEtFSmFOb0tVcUItS0pUUnpENndYZUk5ZnJhM1VhNVFaZC13aFczRFNQcE9JUXNSX2dMN0dYdENXZnRHdWgwQlJUTjAwbEJuUG03MUNNaTl1MmFiMUJwNnl6WVRFQmRINFBXWWlhdEVHTEc4dXdrYmhEdGp3d180YWVCOWRnT0pwR1IyVGpMaVY3WGlfNEpsSEtTeGZQNjdkYkl1OE9xcGQtM2t1TEpzVy1tWEtoUDBIWnJqamFNM2Q2dGVUN3ZTNHR3NG1KOHBfZkNlUWFDTTRMLXh6N3JjRVJucXh5Zl80MW9jRk8tQ0xHTml1eUJrLUVCTEpJeTJPbzRlb3JndFBqWEwzNG5scDlMYmdrUVhXWU9ZSmRCeXp5MWswaGFjVk9wd1R4NlJnRlFaNTNZRlVJeHdMZWhXVXllSHpqTlVGLTBBZU9VNE1oVFZIZ3VsX3pEbTZnOWkwUENaU1E5M210bXBHV1c4YXk3S2NpTjdydDRxdXhNc2ltRFVaRlpBZDNWN3BDdUtIZ1o2dDJBdEVOSnNFbzR1LVVteXd0NV9vWjFFWnk5TFNrdGE2Y0t6VEl6dEU3am1SYk5JLW1xRWc0cVdDUTNtMjlWRHlzTHZXNktQT2FfeVNhV2V5V1hCOU1fOXJ4T1VZMUpYS1lTcmt4eEVZZ3VjWGp3ME9XRVQyMTM1SHg0Z2huQ3RfR09yRTBwTFBnWUFrVFNrdHNJUlJDRTVxMUZmQ0ZpdzctcnRLWGNwcjhMaUl2WDdWSG9Kbm9aYmVoUXlVbVpCREhUVXVpZ3Y4eHY0Yi1MVW1YY2M5X1AyallVajdCMjlLWW1HTlFtUTFzbkhWUUFfTVU0NXJRbHdqcEYwUHc2SmdoMFJLT0ttNGh4emVPbG1EVUJabzZ3eDhjdjJZVUhYakY5aTJ3X0VSR25uT0VPSHMwTUVNcTVoLWRfTmZiSlZ6aTJycjZxSFhvZHJXVXFJZ0c2WUlMWFJzRFZKRmFLalpPRXQ3TUVQOU1MbUhPV25VV0t4ZGF0NFBfSGtEcG5ydkhRandDeDlIY2JYTUhGU1FFVldKQzl5U09vdFpRemdTNzNwdE5CSE10TkVUd3BBdHRmeFR6NmM4Q2dvRXdIeVFTNmd5TElNZzViaV9fOElrcUFHMVZza3pJNllhR3JBaDZ2Umx2a2NUQzYwVHJwRDA4T1g4eEotTWZySlhNZkN5TDkwdERQbUtRdERvaVc5UHFpQldpeFlsR1JEak1wNGVLTF83UC13ZG04LUgzNi1OVFV3VWxrM2lER0RPa0x3X1NaYzhJXzRRcXhJTVpNNGNSRU1JY2VPa3dqU0JQQzFjRTVnc01HSEZ0b1ItdTVvWE5zUllvZUJ1WFdpbzBmeEFvVHlSU01fSjkxNmJ5ZktJWTNvS2hYVllxSjlYbjZmbENNM1VvdjRja0hEcmxScW5OQUcwOHdHUEVYR3k4SkVqQWpwMXVubzYzOUZpU3ZKeHQ5T2s0eWNDd3V2c1R6TGRCNVZJcUtqdHBrSGNFc1hMVVBsVkpuMnRjVUZheDQ1aEIxRF95Z3VsNTI0Uk9DazIxaVNrX3ZpSTBwbm96Z2Y4NUJ6LXh2RktETkN3LTRqUnp0Yi1lMjMyMlV4UVpLTERmTWtpOVJmVTRad0tHcktBbUtjdTFhX0tQTFMtMF9DQzFQbkY4WVlGS25scF9kQnJoTDFMOGQ0dGZfbXJGYW50TG9zTmVkUmlsQXJhSHA5MjFPa29va1RLNnNJQ2t0ekVHaHpNdXlEbmxzckJ5Ykg4VDBnUXh5THJmOHRKd2IxenN3V3hMQUZ3b1dzbm1UYnFXMkJ5VlowQkduSjllck5YaTBUdzBPd1lMX1dVZm5hYlRBbzlyWkhGR3BQdXJ0bGZ0bk50bzh0aThVaUxFN2dKcFhodkQzRUk0UHlIS25sRGptc0xyaUtFYmcwY19rZ2s1dDdMVUM3d2dGYTZnMkZfZEpqTXJXMUtPTFhXU0JEdGs4MXNJa1R2a2UxSWV3MXFLOVVEazJGN0RsZHNocVhoclQ4NGpxQkhoNjBkR3ZtMmtJWkhsUjNvTXB3X1FvMTd6THBlc1VvbXRGeUZjWGY1blN3ZG9OcHVWekNWaS1PVGJKaURLV2xiX3JEczhYdHpxX2pCMUtXcWxSYWlwUGt3T3RTU1J6NkJXbTdOSmFzemh0RV9wQ3VkMnVBRGNUa3BqejVKR1ZUVmUzdlN2N1M0eWdCMldRRWk2dHNlN091amVIV3lHVE55MU1ZR2dXOXVER2U4Q3FwZU1fM2NWbWhVUEE2anpVR1RQRE56MEVETnZTaHJBYTk4eGZITzZZVXJpbk02bWlyZ2xtWkxDV05TcDhKUjBzc3JJTU9DOTFfbEwtNHo2Y2FINGt0cXFvMEh4MmpTOEhsdllUUGR2Sk5jSHBJWGRGNlFMYzZRcGhxcFVWaWh5cjlPVWY1YUtvMldlVlJUX2c1WUt4TFpsbnQ3M2Flc2NNR21ORE9fUWM5cUNibGNOdlRfeDNlcEducTZOLVBSVVdrOGFiYVVWUnZBMjFOOERIUlAzT1FoQlJ3WkhkamJYVUpwN2lxNWJDQ3RKNFNiNjhpdVFfN2hnQUpkdVJKYktMMVdRZUM4UzVpclpyOGF0UGV4d212X3h2WDFybnFYSEtMQ0dDQlJFZWpWWVN4bE1wdExWRmQ2cWk0TlJGSk1PTl9JNV82Y3RsR1BrRmxaWUxsYklBb3BTc0tGOWJkcmp1T05HalV1eWpnX0dwUE96cjlHWThkT2lEZl9VN202VmJFTTlaRDhqcUwwUnVrSktaT0hKYVhuTGhBR2ZtR2Y3dGk5ZzdhWVRBQ0Njcm5yVDdwa0ZoYU83NGFSakwxWThCemJPWjRCRWlRcWhJY21ZSHV1bFBLQ1VLR0xkM2dfMms4cl9ibFl2aENHVDk1OHlZc1VXZ1FzRVVmbzg5VEY4V0w2TDl3ajluZGF5dC1vclF6YTZYb1MwQVI4Ty1UdWZoUzE1YWRvaHdNZGd4MExtY1pzU2JNbGQ5WVJ1dDVOakp6WHR2VTdENWI3MjVBM1FkZU1hcng5SmlFQlVlWW5qU0hiZEYyR0d2Z2VHTndoTWlzUDJjbkl2dEdVZWstcFRWUE1hTHRSSTVBZEl2bDNTYThJamR0ZUhxM2VKV3VIYmpWcEpCUlhJcy11OVMySFFXcld2WUJqcGg3RjBfNjZxM0lvdzhPZ1IwZXg3Zng2S0lEMzlqTXNpOGtXQ1lBbkJkb3hWQTJWLVAzd3ZKWS1xVW5wMFo5S0hHSUNFNmtGQTl0dVd0a2ZTTFFNczh5a0IzR2VsREppdDlhbTFvWWN6NVUteW1HZnFIOGlQaTRJS3pFLW9NYzNjVTY0SS1xa2ZQZjY2WnNuNkNJaXJrcUVybXA5MFd0dTBieEppUi03dXFMeXF1b2lyRUxuVlp1ZnZidi1udVRnVHpKeS1RQ3JGUGlCMUJ5ME4yY1p4ZE9WSkhZYmRTSmxSVWVrS09zR0lZN3RDdFVoUlhacXZxSUI2eU1ZSU1nT0kxTjlzYjhzWE4wbDB4a19XNVJHU3ZPM3p5aHYtRlFJcDlKZFlydTNmVElqbktMSEd6UU5GVGszeHFON3pXUFBINmoyT2JHX1B3WGV0amQ2NEw0NlhmT3dERW4zVFpYd1NacmhCaW5ZUkFGZktxaS1GSWZ5bkFJbXNuRXBwdWJrZ0pHc2ZtWGdLTFdKY01uLU1KLUpJRms4TzlmYlMzd3J2RzY2NmtWQlZoSDBJS2N2azhxWHZzVE9UekprbTJsRHNEbHRpTlQ1Wjd6YkZuTjJTbUliNmRLd2hKNnRNRVhZbVhZd0xuUjB6dEN6cjFjVzZEYmRHa3BTMHhXVzd4MUJRZFBjV1haeHU5UjNSMnFtZGZLQTBNa1Y0Y2wtTkQ3cm9HZzh0S3l6UW5OU2lIQWZhc2FQSDM5eHNNd3NESHJVUlY3ZEFBaUd0dHlwZXE5dENxU1BJRHhwZy1qLVpzbzlVNFZUZnlLNUg4eUplR19rS1hHLUVkZHlmUVh5ZHV2UVdfRTBNTEdnWk5EU2RFR2hQTXk3b1M4TjZyMjdkd2tocDluTUJyRGVKNVVtWW1DeTEwdTZnMk1FNkd6QmhqNVc0N3JET2dvT3JwSmRRN1UxdUhVVUw5ckE1VjJWSU5NN1l0RFEwX1pkSy1PWmQ0NXJQSDdvbGxOS0VIS2dmeUhjZDlOdHYxbU9xcHZDN2lzcjk5cktfUWlrQXpkakZZWlctS2xkWDMyYXQyNGhCNF9YSlVYSXBjbGlSQUI1Vm8yQWtqOXl2X09GcGVDVGdGU1hjY0podm1hdGo4VXl1a3hFeXpwSjNIdG80UHRHT1dOSjRkSEtnaTBNeUEwV0hzLVlManVwcjhTeUhpTVVLZFdTelBVaHlFWEVGVVJMY2MyWlllMzhTczJmWnZrVUpScldfY1hXa1g5VnlkYk1OLVJTYllpTElETm1BLlFFQnpIUFFsS0R2Vy1GRWxOU0oxWnc"}'}
    -    headers: {cache-control: no-cache, content-length: '43375', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, q52u23bzaxdhsd5aluiscswa.vault.azure.net,
    -        /certificates/certcfa1497/backup, api-version=7.0, '']
    +    body:
    +      string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLm5EN3B4UVh5OXJPcFAxZlBzMGxQTUUybmdrRkE1dEpTTGlXdTA2aHR3cjNWVlZqcVFySEJxVl8wZ1JuWHFnQUZXWUpsNmQzckRfOUdYTTBDREU1WGYtQk1IRHVBSVpYcnlJU1FmcklqSTZCeTZEUExVX0FFa3R4bWsxUWswVmRzRk1nTVpjYlVIYm16WFR3amxFZnp2SXQzY212MkI1cll1UnpJVmRXdDUzZTVDSGFiRjJkSnFuRmdTZHFIOHVhQ2xLZGVhNlNCemI2OGJNSzg5YmZCWmdxSlZJM09lZ1BvQ19ZcnhyOEhYQWVnR2RtTEd3b3ExX1hLYmRHb2ZMSFhVR2laWk9MY0p2ckpEVkpsNVRGMnNxY3hzRXJ6Q09faFF2WDk0blJlM3Jic0p5RzZ0b1phS1lhWW10anQtb0UtdkRqejhxRXFwcDhGS0JXbnRSYlZjZy55ZXp6QzRWX2pkSVNjWlM4UWNXWHpRLm43aXcxVVU1TDg0MWlPRlJ1S1dmMzgtc3Bxd1pQRE1ZR19hcW12VGFJay1NSDMxX1lsV3hqZnFLc0xfV05nS2xmZy1zYkpsZ2d6R1Znd1ZYNHp0ZnpqLWVJeEo3UVRJRXRLdHBrc2ZzdDBiXzFsRFhZSTV6bU5xMnkzSXJadnhweXNyY2VuQkVSZ0F0WmFiS2xuWlhCVE1LX21OWHpoamZlY1o5RFNTa2pMUGZzVDZXYzl1eHJ1M25YQ0R3ci1RYldzSTczc1VIYUNmQVhUSm4zZy0zQVhXTnFfamVaV2hZS3h6YV81UGhkSGZtXzQzdXlPR3Q1N2FyYUZjdWd2bm5JUHlseXZyRDNyWGJ0akJaUEhVSjF2bk0yaE1YX1NfV1JyS09CYzRlMDdiaW1pZ1FlWVdYQS13X2ZvUy01T25tcjlVUEhYZ1NmOGV3V3NIT01IYjVKM3VDR1ozN3BtaENFUGtiS0xpMW9waEgyWkNFWGsweDhwelp5ekN3ZzBORHEyM1UzNXBiVnBzd01PSWNDQjJWbFVtYjBhcXh4Mk5EeGVXX1hkRzRRTFRfYjZ3R3VLT2hETlkydHQxeWtkcm40Z2Ixb2U4STh2bXd0dXJiTzQ1aHdFb1J1SFdnRmhqc2xzWXVWbWt0WDNyV2JRSGJFMHpfZmtpdWg3WXFuLUJTWWV6d2FLSWc2Z2RMYXZtQUVDWE1iVEpoVk5YMmxyOC1iX3dnQzdOSDIzZy1oQTJSZ040aEh4RXpGUWFJb1BTVVpYa09tOHJ3UEtEcUFFOGFQYkJFTDNadmlhQXc1bFNBQlNyRHJMOHAyRm83SXoyelNVQWxRWWVVeE1pajRCc05kRk04YjRJWThjZWJ1XzNCeUdWYXYyQnZMMWVCekt2RmU0RXBrU3FZMXhJTjM4cllZOVRhYnJfckJ0X1J5eHpiSGZUUnpLNC1JU1pDZjFKbzQwXzA5VTI0bUhXMllnZUc5UzdsRzR4TUUzcmZ5akVFaHB1RlRMVHRkT2o2VFRvS2t6MlFZTkxRVTBxQ3o0OVNGSHBEWGxZaW9zZk1meVdaOHhNMHJGbnpiUU11MHV5TUN5YlotQ3QwTW1JajlPbXdSMVY0eFZaWjFhRk1FanRhRWdRWmQwVnE1LXlDSE1lZmg3cjJ2Qm9VQS1QdDFpcnVHLVJVZUY1M2VmLV9MZkpxYWdIbVhwTlA2cW9QMVpXZkRPSXNFMkFIcmxXZ3JORVlHdmdTRlc2X2hZc3lrQ09GemJKcUsyVmU0dHhodHpaY3U5Q19tTkRHYlBiMWNQbDJUVURMVDY5TnNxS2d0a1V4SEQ5RFl0ZXRoeE1URVV4TUpYZ29xdllrWFhoeTZoaUtJMVZKUE1yN0RXYlNWeEM0c2VvUU82MGp1RGp1VzZHRmkzYUpFZklNY3NBOG04bHJITV9ZdFNGYlBVa01tMkRVTG91UmNMQ2tJOUFmaXBvVzNXUEZiSVJ6dXNFd3l5ZlppNTdHN180QlNHWjcyQWlwRnFRZnA2SjBRaFRUWVVnMzI3anpTWnpGdGxHT3dPUUFmYVlTalJBMEdvOTRhLVlVVjFJNlJDM3RJZGhucHd4cDlpS3lZMFpsSmV1TXg0dC1mcE9pQlo4QUplaUhMRFhZVjVCTTVBTmVOM0FRcUNBS0Z1VDI3YWZzVWs2NnpsRDBuYk5KNGZOb2ExXzgzSmNOR2hyMFJ0VGhQY0hjeWwxTmE1Nm9PeHFpbk5sNzhOdF92SVlpZmt4SElJM1Q3MUVDVVRncW52YnF0SjZ1SWNJRl8xTzg3ZVBZSlpqLS14UEs4ZGxsLXZNYjJrTTBIZUF0b0t3eFNXdVJJMzE2LTlXOWwwYlFiWlBXQnhkQTdrcDN5OUZjMzNXM2ZKVGpJX2l4V1lqSFdiWWhESG5zNVZEQlJXNE80cE0xMFQ3NU13aWdCZ1RHMkJrYmNRVkhQSTJVbTg5NlN6NFFUS1N6SVI1RXdUS1lpWFUxb3g0VXlkcUUyMGJuVGtDcFRyeUhTbFRpWFc0dXNlajBFX0FDblVvT1dXclV4MUp0Z0t0cWhjYm5mS0s3VUxyTUN2NGFuOHI3S0Qza3pWU3NBWENyY2NuYnRUMEVQTUVZNy05cHVSdDU4WFhRWTNabno1UXItRVVPYWc1RDVNQy1Nbl9pUE5QejlPOS03R041QWxPdWF2VFZsMUpmakhwNkU3S1dUQWlpdWc4RFYwRlVtcjBMMmI1YTVEYUZ2aW56cFpkN0J4ZTRnbmlTeWZZcmVJRjlyVVF5M0xWNFJlWTg0Q3FWbXhoZUhEcld1enNYR2hCMXp4QUhjamVvSjNoak13N0pJRi0xR3dFN0QxbUdKRXF0cDQwZWxWbWp5V1N3aV8zTFgzSnRIclJPSk4yTFlXVkE2em1EMGRtaDdYWVF6bjg5UjRNZVRDazZNa3FKeHZVakx1bHlta296WEV4UGM5NDlqcXJERlh4dHFrZnM3Y0U0cm50M3kzV3Rqc1gwbjBIQnY2NzVzdHhxNU5PeUxSaFoxQWl0MDFMM1lFUTRWMUYybTZJWUpNdkFZNXJaZXA5cU5YSExwOTkyTW1MS2NFbEFZZFVCVGo5NkFBTV82UjlwblFjTmR1c3VhUlBENURlUE5BbHdnQTZET000OHV3VTFLZWhyTWVBQ29XSTVFeFcwQnh2TWNHcXNmQlhldVM2V0FxWHJucmRIUThTUlE0ZlNkV2RmQktTcXpiVVhnX0ZXRGpkbDJSVHloRzRQLTlHaXFKX0RtbEUtSk81dFVYTUY1ZFVqNlh0cHR2anYtTUkySFNRTVV1UGNfWUNoOVFmUGNzdmFlUERXbjA4eVk4LTdUTkl4YUVvbTgzanRIOWJ5ZnZLVnRrT3VXWG1xaWZtNm50SmhPRWtNSk5SY0VQU0pIMGJfaFlScUZDdTJDN05xNWRaVEwwSTFkSjNpVTEzMzBXX1c0N2U4SGtEWVhFOUR5RXRFLUFGLUt6akUyaFRzR1pnaG5LT09wRnpFV1BVVEdJWmhFLWNXbUdkSUE5bTgyRTZKS29LdjYxbERwRTdtNnZBX1ZYTGRqSl8tOEtidjZEcXZBcVJaQ3JpMVp2Y3hfdW4tcEtpRy16c3BmdW13WWtja0VEVWJGZjZCSlhDSndsckMydzFsYzQ2Y01nLXFLXzh5Rm1zNVhweUtuNDB2UXpZTUFHQW41Tm9fRk5DbTZ6SGFXWWN5VXg4N1BEV0dXS3RsZlhjQXFadUFZZHlsTE9DRUdQYzdhNnYyM2plaHN6MnRpbktsdTc0MDYzcjJDQkttNmVNelhpZU9uUmFyZDBXLUxSYTFQakliOW81Wlo3QW8tbmhpazRMZjNmY2RCVnBMZjRmTFNSZVZHeTdFdktoSlhsOHZJWFF4WFhzV2RhbXF5djhBVUhyNUt0aDAwZVV1WXpaNmM3elVpblVpelJwZWdkVnU1QlV2aEJ5cWhjTUVKeURnZlBUaW9WUnB2ZHA1aUQyVGtqVEU2REd2Y2ZLd3pSeVBuMHBZRFpSNVpTM3ZZZXRSLXF1U3BZT3pOV2Faa0JaTnhlVmY2b0wxRGotaEdNZGtRZDJORnR0VlhqWnNBMWI4ZjhhcmJVSTlBcFI2ZmpvcWIxMzEwRVhmU0xpQ0tWS0s4ZEVpX1l2ZzI1Ukh2LUY0UGJJalRGZUs3b2pnakx4MTlBZDhCWXd4SlMzQ3hzbFh3ZkNjaTdlWGtXa1hCb3k3RjE1alhyVE9Ydk95QlV6c21VaGdKVDlGYjVQYndoU3BYMnE5ZW5Hb1l2WFMzU0RhUkdiU1hZN1lHWXc4azM2eFBZVnJGTENtMzlCR2R0Zlc2QUZJWUZFWEZsUWs2bUdiT1p2ZXNoVDUzd2JqWGFQcTF2NUNQUWtwclBMZjFTV1d6cTlJeS1kbTQwT2xBbDFBeVA3M3BaYnBGRzlnZkxCTVI4cWd5M1oyTm5TdV9xY3pxOVRmQkd2SkFtckJTaHVyX19FMG1xM0MtdUg3MVpKYVJ4Ql9SeTQ2YUk2NF8xa2NxdnZkLWZPalItOGxzWHpReEtWR3pMMFlPQk51aXViREVjZGhObHd5Y0pmOW5rRENpV2dVbDEtRlNybEVRRzRJcEZtd2ptWUI1RVBYZmJyRzduNFdNT2Y0dTdtSGh3ZG5tQlQwMnlWNVNYRlptR2tTbG14ejMzSGt3Z1ZkNzVJSWh3NzNnMjdHWFRSUmNZb3FlVlU5MEdOaE5XbzZ4OE9LbHdIRnFGRUxUSm9KOGpiWmNtOU9ROUgxWndNMFRGUEZyRTlGN3VKQmI0elUxb25jdlVuSlBjVUxWN3V5UktOaWNhdWROSllyTU95U1EzcEhjVG1yQUhPdm5URHUtVDUyUHdOWm9NQUxDb0VxSUVmdEl3VFZCOGZpblg1X2gzSGowNko1cHgzbXFHRkJOR2Fua1owcTJ2dTRjTmJnTHhYQ2Y2S3IzaURWVUJObVRWd0NVOWRiYUZ3bkhmNG5FY0Z0RFNmNTl3a2ZSZGJXa0M4VkxUT3FGaWt2aThVZjZGWXRMRk1KdUNtU01GR0VsYmtCM083RloyYnh1dmMyT193azdaN3JQZUIxYlZjN202emtfdXJsS19QSkE2RkVHdkUxNi1jT3ZYUVMzS0xUUXRyX3JPOHA3WHBGZER2bHNweG5nNFRITWZldTRvbWFnRUw5T0steTBVQUF6X3IzTmVjNEZ3VWp5bXNiMzZ0QS1fcnZOR1oyeHpSaTctMnZqazhlT3B3eWpvdVNaY3ZBekZuOFRqRzJwWVhEaVRBWFlPMWs0b3JwVzc5dDk2N0ZBM0lXTHQ0bkJkNm1ERmd2YXY5R0ZNeE84NXBHMTlTSUx0Nk1XcmdSOFpLcGlNNVBVV0ZTb2xidzdSdU4yV0tMR21VTDcyV0I2SmNKTkgxVnJpejV0c3NjSDgxWGpibWtqZlBxeHo5WW5jUDl4eW53dFN4RllmZU5icUw5dUFmWkpVY3VyV1NlWGZtQ09nT181VUZNeHRlRUFGZ2VzSW9meEc1VFp6dll3RlNGVTRvN1V0T2llU3RFNUpzUGlzcFFZMmJLUE1nb2RpQ014UmdES3p3eVZxX2kyV0R3MjdCX0JhVWE4a0w1WnlZRlM0bF9lNzdQRmtlX1g1MmhIR1hSU2g5LWRYMWs0YkRfNURNMERzZ0doa1Z0dHlRSENyY2F3Vm5Va3FPZ2hGVWZJc0NrbzJsN2ZJUzZIczlTN2dJMVNhNGxNNS16ZHdrUnRJQ1kwa1lKVFhDU0pLZDdBeEJRTXBlaHIwWHBhb0IxeVlnRVBIRnhKWWVZRzVRMEZqNXlmYjFweXp4R1JKNVJPY3NEMjhycVozTFZaTlUtZ1FOWVFnTFVFRWs0SHNJN1JLb243alpwQ0RJRG9JbmJKd2piUWJiOFZidDctWk1sNnc1OHp2TFdDYTcwM1ZPM00xNkIyeFgweXNTLW9GZFRQQjA4U2tHalc0YXZxc1RZWU4zZThLQWtQaklCZ0Nwa29qbHhMRHRmREhhMHpaSk9ILTlSZ1hQdjlUcjhWTEVNajNFYWR2QmttOGU2RUNIR3BYVW5FNVdOUnVfRV9PTXYwZzZadExnZmtUenhBRFotb19ia2t6TWl1RC1Pa1VYSUR4aFhjZDFHd2M2emJSenBhWHpWTmhrcktZUWZBQTdZaHAwbjFVQWNlZFRqOF9EY0ZoeE9sVENyRDhSMmFXLThUQkwtR1l6a1hxczVqd0FibTNVemM0TXMyN0x3T1NUUnU2dG1Ocmg0SnE5UTJiNFJEem5qejY1aG5sOFJSYmxsSVY3Tm5oQ292aW1SUHhaWkZHaEJzXzk3YmFoR0R2bmVSWW1TSEV0bU9FbGwwZ2NKT0c1OUVJRVBtMkZyMGE4X01rcWIwMThOSTRuUjc2a3VJZVpsaGxxUjFWLUtCRU1ZNVVSY0pEUFBoRWtJa1NUb285blFsUmJkLVVGeDRfdlUwUWp0d2ZnM2hONTViaF9zSU1VVURhcDViNFhFaUJiTnVGb1Z6cm5NRWRJTEhVcVpaMXRhR2FUTHE4TU5DQUw0SEtkTnpoUkdjcmRhT3dWdXl3b0YxUnVXYWkwU2VhUWo1aThoYlRyWm1QOUlmeHluOEtQVUI1Z2E0VlB5WlVSQVc3MlAzd01XenpZYnBUMi14bUNCTXRralpPR28zSUZGUFZVTFAwWHd1RHprcVlpMjVPcXRXQVFnazJxR0JqdXg5VHpxSmJKYnM5Z3JxTGxPb2RyVXQzbzVYV251SWNVTmhsN1ZYRUR6UlpZQkt5Zzh2YXR2NjJSUGxhMDVTeVY5YTBLdUkyLWZOMGJhUmlpb2d2ellLaUVTanRKZVFfNGgwY2l0Tld4LWltV3h4LVAzZ25uYmt3WjJiNGVnSWdGcUkyWXE1alpjUzhZeUZPMkZjSGNzWnhHMU00eGlpM2hBNVRsU3BlczdWRkhLa3JMYXlpb05zcE0yeWVEUlZLelJJUEl6U19xVlhXbWtpZUM1b1B5anYyX182MC1ub3JKeWFuSkNRa0xIeE5UcVRTb3N5RV9qVXBWZThPNzRzOXVMY0NFbmUwZkV0V1M5MzcyeXVOdmNWR2tKUHRzaG45WUNoV3NoRWMwVkZoX1o1Z1lRWDZhZEpXOFcwMGZ0ZGNxUUVPd3dsQlM2ejBfd0NkZ2piRnN0QWRkTmU3eUJzcXJ0emNLNG5mVmM1R0FhUk9Id2dKbHRRNkN6MkFJUGE5TUZ1bEJHTmJNTUdKcHZWcVJwMXFiTnRNaGwxTUhzN1lJc2Y0YjQxeU5uU2pWNG1mV19TVmJJcGQwNlBhTGlOX2hZdF80bXdFV1c3TTIwX3lseEhkNVMxS3BtN09pYWNLcFBHdWtFd0NKZFNYZll5TjVfOUUwT01wTjI3cGN6VkhkSzV3dlNfaTg0RjNvTDZQYmdjckMtSDBNYVUtTXpOblVidzNwOVRVbUhwYWtyQzdTd1pXQ09UWTFoOUJIcHVfMXI2TmZab1ZjWHVzYVRJb195VDVYeUpTU0lvTHVuVFhNM3BBZ01SNU1QZmVhN0ZBUkFibF9YM0dIQndDbmF0dnpDak4yNWhwSmgwbnFPUXRaazNNT0pucFB0YmdTc2dCSkExSUE1eVdPUG0xQlFsMHlOdm1JOUJRZXh6T0RYRENUY3NYeWMwMlRjcHlvRWUzQzhOUGFKZVlpZXc2aVFrVTJxcGJSVlU5RkwyTy05czQ5MTlRd254eEhJVXU0X293cU01RUZPaHAxN09uVF9hajRUQnJQWFZIRHBNeVo5V2cxY2JkNHY4MjZtTkVoRHNGRExVdDFNRko4bTN6bURxSV9DVS1wMUhQWmhkT2VDMjBzdVE5SjNSLTFZczRpN1dsNEkzdXhYSTFKQU4zX3NVR3dad1dHWTR0ZDkzY3hveEZ4ZlQtWnNhVXpsdEladlVFT21wNHAxTEdWOFBQaVY5NDJvR1RINlQzUmdDTkc2V205cHl4bWJ3MUtxLTlPdHY1UzBrbU9tRXhOZkwtY1NlRmR5Wk9KZ1U4OEZQaDZaLW9CeUhVanp0bWhHMGZHVmRULWVWMTN1dXJ6aHo3d0hYSFhDR2pqSXh0dkJmdkV6ZXdaNDVVSkhjMWp1VHhLMTYtdncxRTZ0N3BObThKQ0JiMk5zdkFQT2pSem13Y1ViZTFQMlpFdXA3SFNkV0VFY3lnSC1iTnlmQlp5WHF6YlR0bUxSNEhJUlU3dGd5MGk1STg4VmtabzRYVGVvenBlZmQzWTMzcVZEM0dzbGJ5NE16Q3VUd184T01KQ3N6RGFxdlJoZ1h4ZDlDcTg3bFJLRkZrZHB4Y1FwMWM3QS11NUNTTXV5N2FlTlNDNG80eUxNclJ0Y2tUeFpaWG1tU0t3aHgwcE1BQXFOTEtYYTI5eDFkTHltMXdqVV9Cemp4dkZDWFAyOXZXOFZOdy1udFhtRG5nX0VhWm5HVV9yY2lQZTR2VHVCTlhLSDNZeDBUZ0FNbV9IQU5zMmdOT3NOelVaRnRFVWg3ZklwZ1BtNGlNT19pMnhpQ2JqaFpHUDJUdXE2SlpRZVZMTzM5am5UX1BDdTNCR3RPeGdvUC1pbzZhaDRDVHBMMUJnOS1HWnFINGVpbHJ1aHBTelAyYUhkWFNMc0hLVGI4RU1NTWRlWlQ0djBuc2VLRGIzdFQtRkp5SS1qM0hqRWNHV1BKRkUtM2J5eTlYd0J3ekotUkZxWmpsUlJZRktuY2VzMEJIVFA5dFpQQi1FbUtWMUtBdW9SbUxqU0ZTTENsdkRGMDVSX0hYWDB5VmVyRXdSZERRSklkcDZMUkhQU1Uxamd3WW9rUTB3Wnk1VTV5SVlabWFNZnFMVGhlYmNwX0JEUFI3Y3BGWEVrQnNJU0N3Wk1waFdyQmxIdmRYaVdTUEZ6M3hPdnppcU1lcjhLUGhzX3F6TmtnT28yYU9lbG1oWXlFMU56dVI3aTdMVXVyWXpvZjdaUmZPSXhxLWdCNG5oVHFXZFhTMFd2SW5jeDRaNXZRX2JySUVCaXQ5NS01aTJUZXg0R0tYLTlfZ19GUGVRWjhpaHFWRmZqTmhSa2ZLVTdCaEhPRUhRNHVITEd4M0otZG9aVFBIZ0VibVdHZzBmMkJKT0hMNHRmc0g0c1lzM3NzNVFSdGNOSWJ5VWJQNTRJN0FzV0FfWHVpWnpBSW8yQ3gwX1R4VUtzbzRRZjEySGtOSVJtaXlXTkFJV2UzTmo0V0E1Vzc2RVZHWlVteTJpS1NSNXdFenVDZHgtemkyWlJiN3JvaHh3bEw1aHFNWlEzd29PZzhJLWRyTkxyd1RNQU9JRS1CcVhyWXc1dzBBWjRIeXZWQlRRQVZTMGl2RTNpbHNIWll2RHZjSlg1dV9xU3FQYVpUdW1heDFPVkl5VmZsYlMzcUxrLUZPSlNjRF91MWlkTWI0ZU5Ic3pJZmxUSlBFUVUzREQ4Q3BTclpRZVROZ2JHNUp4cDlsUDJBLXB1LU9qajNuZDg5QzJRdEZrVnBrSF95NFF5c0lUNVRmWjJpbFFVMFBhZzFIOHhlbzBKU2J4NGM1c3NvVFFUQVVjTjZrajRPVGFVb04tWEw4dzN1enFFejNDc1JmdE9qRnJwMHRvbFFRQWcyWVR2dzBuNVo4WmNwZkFoRnhlNlZyckNNUG4yV3VXc1g1X3ZWRnExd2VCODY0Q3dmelpIeGlqOEhOUWE4VWJVVG1TeTJVdURVRnNsWGtoN1dPOXNWN2p4aHRYRlp4d3BVd2I0OGZSOFFPU3B0UEtZMTdFQkV6OG5Ld2JVMWxGNW1PaU5DVnl3QTc3M3gxQ0xKYWJjQmlGa181ZnhtWC1mam5IaXVyaDRBYUNKdUFTXzJZVFAwY0dQdXBybHo4WVdMSXZDMWQ3WlZUWUFobU9CVTBiMDh6dHZqWGo0NWEyUkMtcW5OaG9TTXNqdTZhdjNxc0ZTU3ZPeFR3Zy1reGh4aV9CaDhYaGhqZ0dwSGNya1E2Wm5OMElyc1hFOVllVm1FYjJReUJHcjVhWDV6NmRJR3NDWUtDSmZFcHI1ek0wb1RzbnhVRkVZTUR5MnF5aS1WaW9zS1ltQXdNRF9kT29nTmQ2d3dLcVUtdk1USTVrandVSkMxSHFiX25kT2w5MkFoUG1SQ0tTUW9iTUVoX1R0ZUJBVjVwWEZyb211QnJUZ01KYmpNVE1mOVcwNHYzcUFGVU1jUUZlQTlkVXA0TENyOEVjVkpTRElRRlFXU3VCdTFXYlZoQTMwb3dvSHdaLVVLdTFxSGo0Zjd0TTcxcGRIcDJpN3Fmc21rSDdfM0wyS3dINlNXcE8yMllXMm1wdl9lUXU5aDYzS2hxajg2VG9DcXM2azN2Vnl0OUdOYkZaOEdhbzRsekRYODBiWXBrTDRBUEU3MVo1aFNaNUF1ZGg5ZklnZERINXBsTFBzWldKZUhFZEY3ZnZES05WVmZiQlFja0dES1RqYmZYY0RBQjZJTjRqUEJ2bnFUS2VIN0dqRnZSOHBoMG9CQVRub0lLU2JMWVRBNGE3dHFfTmFsdXNaNGpkLWpyUVk1eGhiSkV6YWZab0MzLVB0Y3QtcGMxcks1dGhkY09XakdBcjhUTFZndlpudE1IM3p6OFZ1Vms5YmtTNmoxWDk1SlMwMHRsbDI2OW0tYmVHMktjcGtSVHdSZDIxcndIWC1QTUpNTDJKMTRQN2VuYWtqWk1jb2ptcTZTQnZxbk1CUUJNMkdiTHZnaFJDRGx4Sm1kUEszMGwtamxKX211cF9JbWJKNE5uYjJnRXprZDU0bUhkb1ZkT2VoN2JaWHNUTnBPRnFPM21Pc3VfT0t1V1NZSTNSYnVSTEkyQ0NZaVhiN0tudUJZWUI4bjNEQWlySzhzWTFfYnJwcE05RVYyMmd4NWpoTjBNMVhVSU1XMlVnMGxFQnBIVUNUTmlCYVhjcmVBMzkxSWdhbDhwazFpaHpwMHVlUzh2ZXh1Ym1DcjduNDZSdU43UmNhQ00wQ0V0ZmZ4WmE3Q1FKR2NBYllBaVI0TmdCNzJORG44eDUyRkVCVnluSXJqNUhOUl81aVQ4bmE0MkZuay1lZFhHeDdHX0czSmpBVzl3WWxtMHRtSWI0SnM4dkFxV2JJS01EbTVKZ1hiSnY4MlRvb2d5RTYwcGlsU280MzBkN1hZNFBQelhGY3pEcF8xbjBFLUxDbWp5SUVTaTlFZlcyVmxZbFY1Y3p4VUZnTnpaUHF4YzBvQmI0eTE4WUlZU0tMRjdBUFBnZVZiVElDZk40MjhBRTF5QzFLT2hIaGZWdDd6eUVNakpBNHBRbXB5bGgwbncwUFp4Wk10UzV6VzBqUHRiU0NsOXRuLWc4d1NQZVRNZ1FmaDg4bkxTWG92blZoNjFsSjlyS05VOGZXNW9GR3h2MWFlNHRWc0xmMVIwRG5VV1dhb1d4ZHRVMk8ycklVQnc3SUdFVVlwaEJ3aTl4eHptY1pQUFMtRkk3YUtvb1Nka2xiOWFKNHdHZmZweVpIVFhyZlh3SUhmZjRVT0pvYWRXTkdTX0JZWnNOQlNoc0o5dUtJaUN0bzllN1U2OEQ3N2QzdUc2eE9Fa2ZzWEtzNXdGY016WWtHU18yQUNpQVdmVVg3TTZHVjU4SFd5SWdJeE1Nd2dyaGpWUU9tN1dtcUdqRW56MDdWcjRHT0NWQ29YTE13OW9DU3ozaEtiVnRNWFo1R1ZwX196NjEzeGEwZmpSV0h5RjV1X2FDUmZFSkl2ZVNxb2F6RVZVeFdjVE9fYzIwS0pVaVNNT0JCWUdrTGowZmwtNDJDSkF3LUxaZWJhejBFSHh4T2R0QnpFaUFUOFlzTlpPNkk0ZWpOWnJ2MC1CMTFKVkgxRGRkaGtMb1J6WlcxMnlnWm14SF8ybm5GTjZWMHdMTEl1c0lER2tJeVg1M1lTZU9udW8wWkpzbldpV0J1NElLWmE2ZGd6MjNKRVdCZnB3cTc5NWRmT2pyY1hFZkJUdnhyR0Z0TS0zM05wMzBiOFRmOGtlU21xVUZmTnE0QTJ2ZUYtY0ZVVTYyN1lUOGs0NmJMcmFseHpJNlRLMkhvNndyY1FQazYzV0E0RmxBQlQ4Tzg2Nm9HOFBNaS1CNkhrSzdYZ1FwczZEajFWc1Vac0RzZHh1SlRVa2F2b2JKd2ZsOEVWeTB3TWtDeVdUbEQ5MVFVVERDY0hnanpfNGtPQTRfU2ZNdktISkxTSzhzeGdBSEt4ODYwcFVLZlBEX19BM2dMS3FJd3ZraWZob3BFa0xtamRmVWdaSFJvcGp2WHc0a1VEU2s0LWlDalV2TXdVVFhCYW5jVU5wa1BDY29RZDJhRGl5VWNzc0xYTkQwV05Mc1RHaWxjejRCV0J3anBTalhnWlBKVDlPWlFmX0RLZUs5cGJVLUlyWEUxaTgzNkNsbUhNRVZwemlfQ0paa05uc2NQWHRyUHJqY2JnT2dYRnpGZnNtSkNXc0xnNEJlaEpyeHhEbGF0azlUTklTQmtTVjNuYnFDM21JMUg1d0djZzFVd2RVQWRtTGdPNHRmbThBNktqU2hRNVpXMzBHRHU3dG1SZWNpRDRQZ1Y3UUFHd3ZxYUQ1S1JPZ1BKV2RlMGhxUWtjY1BjbDY3OUNpY21JY2tOckpCNUYwaE1acnk5d0RUdmVRNlBBWjNRSlRDUnBqWG9TbGU4MzdoR25fYWxFS1k1bThxNHV0NVdtTUxmMnh3LXhCSTE5ck40bGtXOEgzYkNIYXVjaGdLZldFNUloSkdBWWlNYlhKeElxOWw3d1o5aXBjaE4xQXJ1c2NfQzB0d0RQU0hna1hxc2Z1RE9kbngtOE4wakZFdjMxNG5oLUhpM1FuSkpPSXlCLXY1ZmJIUUtVRnl2WjhUR1BsOERmc2tNX29sVk96M01qZHlEVXc3T3R3cHdseDFldlduQkNSblBFQi1ONS1MUEZUQXRpYTRJbWVWSDZ1d2xOc2dtWGNRXzk5RDRIYzJYVDNQN1lzT2YxTDJxQUk5U1FQbmpLYk12ckIwelJMTlhNOVk1ZDZTeEQtcUY4RVZRZ0VNVHh6YkwwQUVfRnhHSXZaS1U5YkNZbHdlUm8weWVTRXM3cGRERGNKbzgyalJpdDJacmYzYU1kZUNUM3poTTJkMjlsaXZJeTg3OXBrZ21WQ2ZMZ1gzU2xDZXJBaTYtSnpUdWVjTUx4NnZEUkhvRjRRNGotejJ0NFdvVk5qdGUzdS1ObGhDYXExQ19uS3M2cWxsVERJMTBodGpnYWdOODJsNlZWQ2lyYk1CcktCWmRQUjJiMVBEcmJ4dWZWNnRPRUJwRWVmV2dQb0gtVFVoUVhyQ1hpMWd2d1NReE5EZzY1T3JRQjItc2xuVGpGRTZxMEVwVm82aG1QMDdRRXVyZDI4dGx1MjZxckN5V0Q0Z3NYNHJfUWRqb2ljZDlRZjFHQ0E0VWFjc19yVmhjZTkwakhneko5U09LWHhMdzlIOHQ0WXZyaU96RXc4YUdPaWxXUEVNWXc1dzM5dTI5V1ZMRXdhT0paRm85SFhSUDNBTXBuWUcwWGRZakR6Y1JMZEtWX0oxTjlKUjNkdjNqdDFLb3JuV3pIWGZJUEZyREJHakpPMm5WMkZtTDNjYkg4QjgxdVhyS005UVRLdUtkYzk3UTdZdndsNlpDbTlKN3FPTG8wTFpWRURST2tORHpsdnZ4TXFkVTJ2aEVOc2t3bzFDQ25hbTdPZERhb1F5NS1VY2JzaE5uaFFvQW42VjJlcUpDUUs5M1BLZkpSOVJuTHU4aWRpbzdKLWVxMGU0OEpaQm5LNk56enRqSlB1dktOdDhLR1BIVDJPanVtUlJ4YzVRWFVCcmdmek1pMmEtcGxrUHEycWdSM3RhTEs5ZFdYc2dacnZtTEE0dXhKY09RVWtPN2JvaWhJalR6TWk1MUtxZkRQUTZlZk9NWTBMZkdNSWViMERrNnRyOU12V1hxTWdMSmV3aXFOQ0xiVjJJWVZIdXlRU2R2OUZhekQ3QmFTZmZVSTZ3SVlqUDZzYWNEeFhzQVhjV1NvODhhbVkxTEEwNlU3ZUJ5ZVlHXzM5R1FkbFluX1NRQ3F3dlk2M2hWSi1MaS0tM25oMkdzU01rZFJIclg4QnQ4bUJwT195T2F3SmtISWl5UWhxaU00NHZWcHVVc1dpbnY2UTdzX0JXeE5KbFJTSEUtZ0huNnV6LTN1cTJUSVdMWVMxeGM4MkRneWFob0dZOHllb0JHR1NISTM4ZVBYMWRiMjZaRzFVV0xSbXJDVW5zTjVWY0dtZk9tZ2h6Z1dJaURnNTM5NGlGd2hlSllFajVULTNJZnR4TUx4N0tnZng4MVlRbEdsa2FpNV9OeFFsYmVDVjl6bld0ZXRCdy1BSklwTFZTM1VmVXM1TTIxSGlfLUt5Qkt4WnduWnJzMTgxYm84SEs3OU5TOWJuWmxRSXRKXzNDUS1WajNqeHJMVzJWemF4V3dSemFyaVpDQnAzNXRqMXhmM29hSC1nNmY0NFpET1JIajY1OTVPaHJBTUQwY3dyU25ZVUVqaUZ5WjFDbEZaVkUtLVZLSExiSGhyRWJwQUliMGxyaHJxWTRsN2JPMEZMbnBQdV9vaGQ4MEFZQlhCbTJwSklQa2JpM2M3Q2QtWExUSjRndDNjNU1CMzlXUzNVWDFveFowWGttYzRJdUUyWGxhM2VzSGZGRmdsQU5fZFJqV0lZRmlIcUtoMXRIMjdPNG9NRkJnYWo2LUowbTctZkM2bzZQRUJJSUJiTHdWWm4xUmozcWVQMjg4Skg1RnlodTVBREM4bVlGVUcwUnZWX2VJZ2Jod0VnckJwdmp6X2t6Vmp5NUpqWEpGOTNFQjdIY2ptWjktekRzNUdpRFo5ejc3WWxJR0R5em9sMXoxSDNRbGl2aTJaNVk1UlpQeDlIRjMwU1BLTU9PeWVYeE9iMm5fTEV5Yk0yMWRkWnlzTE1rQTBVMDcxYnlCQkVyTVhpbkh5MXBXSlYwSVd3ajhIMWpBcXgxbVJFWlFjenRJRXpSeExva19qZ2hTS3dxdVlsaUxWTl8yN1pNY1RjWkVtQXh1WGI5VlhjOHZlWXNISFhxMU8xajU0R09vUGY3aEdvdXJ4cFROVTRfLTBUaTZURXl2bVU1d09FOWZZMkFOTUdVdDgzMndLNHBKZjVaWVhtWXVuek9XTnZHNUxzUm1NQk1FeGNqT0NUU0xxajFEZjhnWmtXdW9tdlB1aTNuTWFPUU9ueEhnVk91bTZYbWNxLVh4Z0hnNHJsc08yUWR4MlVkZ1hGM1FtTElBVDRxR1g1QWtGNEdlOXRlS0VuaW1Lb1lZVi1aYVJBZUE1b21xSUFLNlR0Ui0wM0VLcVVWYlpnSll2ejhrVEdPajhRZVhGRUdmRmhxNEZXbDU0X3lncFVsLWVCYUJ3VU1vNEhKenVnekMxcmpHYXNENU9pZ2xRM181ZnpyMmVIcENuNTdLY3hka0g2Qks0UnJlaTNlR3JCWlJkY0F0azFvb1RUd0JQUF80Nm5IVkR2Z0NOSU52TThHZ21BdEtaamw4MmlzWG1hZnAzOTRIRHRqVHotUnR1YmM2dEtFYXJaZG5JVmRZQko5SlFLRXFuRi1kb0FmR3FPdFo5aGJUUnVfZGR0RTg4a0pGeG9KRW9hb0drSEZWaW5Fa1lxc0JMLThjSEc3VGl4WjFnU3YwV3hRODBpbXY2blNPdGlwUkw0RWFDQ21BRFdyTElJeFNLZTEtTm8yemljRkR4WVY5TDB3S3NGZk11S20zanJIZ2hFajNQSzBiazhna2d6QmRCYklkSGk2MzZIN3A4S2NLa0Y2c0tpeG5KaGRIajB5dmdBaWwzWFZfUU9sdHFvSnZZblMxc2dUb1ZNaGt1el8xWGl2Ym5hN2xIbS1jWjJydWg2WnFqLWRBa1M0d3lCd25hN1pRNUFnek5YX2dJV3JpZmp3U29PR19VRWJtWXJrdEdDOEVjX29qQ3JKN1RWM2Z6R2N5X082amMyOG8weENETUdRb29hUE8zZWN0dTRJWHV5ZHRTREhJR0JSRmpoTjBhYmhYN1NfaUxKZ1RzV1h4TzNBQV9RM1ZucnBqd0tTZVhUbkFfdWRRWUNYQmlRZDQ0eWR6aThTZ25xOW5zckpDckp0eGJfVk1tMTJFd2xxUkViX3RKaXptUktXSnNoa2F6UHFBLVJBN3doT3NkZ0VFbk9YdDFTQmkwM0E5OVZsR1VvdVdSNGwwSFpYZEpvYk81TVlQN29vaTlKU01HSldIZm1MdHdGbGJwMS1KblM5d3pxaktPODI5NFdibVF6VFp5RUMwMlpMc2ZpYVFUTkdzcG9mc1FGQUIxSExyZzJuMUlxeng1SUJBTWNaRzRNY0FYSjFRelp6NWVHSnlYYkF0c1lFQUZXZEdZXzhUbUw5MkdRSk8yZ1E4cWpWVHdhS0dYVDMwX01rQ0dzTDhrUjZzQUZBS3NJV2o0V1JKWW9Ca2x0T3BWeGFjMGRfNzQ4T01FVVJlRmc5djJhakRPdVZqblV3cFFQeVdvYXFmanB6a2ZXM25DblJoTmpYNWpRdVp2d3pWRGhydUZBMWhxcmx6b2xiTGphdXhjTzZ5Q1ZzMkJvY2FKdG1hZFRfSHBveWFXaS1hbzZXRFJ2OVl4QkYyb3BIdU1RT3ZmV3Njb2w5SmVENzdpWkUwLXl2aF94ZXktSi1EZVBRb2dOU2FPNkJsLVZqT0l2Z3R5aXo3NFhPMF96TmpSNWlMVTVxNVpMSnlHQTNLaEtsUUdmU1JNSWN5cGVPUlNvYndlbWNIMDRBRmlFZUhnLXlqMG8tWDk2UEU2MjdqRXk2UUp4S09TQV9kcDBXNkN4NXpMQXJseGhHU2RvYWYxZ01iVmZPTFdhdXdwMGdpRGFXWFRCdzFITUlSX2lCcjRjaGtJR1NjLWozR1pGVlZlbHM5VjVpcTZkUnZwMGFOS1ljYUF1RXZab2ZPamo2VElta3ZUWVY1cWNIUHg5Z3pkWmwzSEN5Q05HQ2NNdXpFWk5MOHVLa0w4ai1tR1BHcnpSTWdXSnotV29ydFlYQWNzbktqai10QU1yckM5U09EZnhZWVlWWTVJVWhIeE5OcUZRWnFDdmhqZ05oUFZseVNpVG5BOThsUnU0YUFVc19udHBnaUEtNFZlMDBpSC00UTJMbl9odTdtVHV4dXNETExOUzhOVjdhY3VyUHBGRGxxdW9NZzg5MjNwLUY1S2RGWHpxN2pkWGpnSXpkeVFfMVpyaE56UzRJcU9SYl8tVUhScWlNNkZ1Mm15cFY1aWE5eGJqVWNQQ2FuSDRvbjdMU3ZlT0hrYkV3NmZKSFlhcnhvYTg5bEZFOUxrRUNSN2w5R1ZkSTZWdGpRWi1PZjJaY0xmd1RmbWRQYzFia0R5YWZNUkI2Z1FrM1lTaDA1QmVCaG1zSE1lOWwxOGxiamx0dGstcnNMc3VXR21KV2VsM0hBcHJXQXBiNm1KV3hrcm8wcmJGa2R2MW4wSVFmNnNLRFRySm1MYlU4cUJiNUpfUEpEWU1iRzZabFdrQXl1MWw2LWZhYThpaWxMQnk2M0dfMklhQUFtRWNnaHh2ajNMc2xZdGxiVnRkdGNRbG9zZzdJOHUzTUxFT3U3RVNZejZOcWFhWGc1V3NxNmROc2xxTEtmVWs4eHhCdFJHY1ZuSDJLTC1za1hZLUxNWnhaeHpZSWpvZExELWZxc04zVS16WUhNX1VXSXBXVmRvamd2cm5TenV3NUdyV3NmTk1QZVd1bUdLN2lRQzQ5Nnhka2JrMkgwQlVxV1NNSDd1OW1ZUFY5b1Q2aGFOemUzX2NaSU1KbnhNSXA5MjI4cERiZm11UHRXdkF6YXdhVzdQaWJlZHdaUVNIN1dRV3JfTVVDbk5VQS0ybG5KeDBLTjIwZVNCbzdhVHNnNzQ5aEN2U2RjZ2x1cG5FcENzb05WS3pNSkVCb2pkay1saUp2SDVhMDdZN21iam5xZzF2YnQ5RndzUHluaXJSVUdlV09xaGFueGotaThRNHFDVy10VFpIbFdwRHp5VVhUMV9PbDhoM3RTSVh6NnQyTDZYdFhfLVo3aGdOX1V2dHJjelh6VXg5clNVNFdQckI3TmtwZFloUEFTeXZiN0tLTGJ6cGg3YXlSQTZ1YWVZdjN2T2c1dFV2T0RVbG1naVBVSE1sT3pha2NSTlZzUC1pdTBjTE1PU3NRU29aUmUyRVNNcmN4YXVTb1lfMHQ5SXVvM2p6ZU1rQkFaR21pSFR4Y3N5bFViYWV0RXY2eENJRmdxNHN5N2VRaTdwbmQxSEw1UG9ZamVNdmVkWExWUF81bzhGYW44a2ZFN0dDaUtrVFFXNW5Xc1l3Wmt5bUk4VExoQ2hPaWNUN25uT0JTOVFXWUwyUFpHa0RCbmFDR3FvQy1hZHVodmZ6S1M2QUVoWGVOemlOWEJwSUs4d1lrOXlzRkpCY0FUU0xVZGZPM1dWQmc5VVMwOE5QazFOZk0tVnRIU2tPYVZ1WlpURldrSXhKR201TDZlYVpsUk13OTZNOXphME9RU0NSSk9sSGdPQlpYOGZ0SkRMV0VjSUZ5VkFLb3hUVlozeGlPczYzYzlodVE1aHlPYlNwUEtDYjJscHVPQl94M1psR1pWTzJJVmdwRF9KVkRkUDA5V0JBNGY1UlpacC1uRkl0d1JTS25sa3dTcDBuUUhkbF9nZDE4TVowZDZGZFhQTDZyZHdqV0tCbGUyX2QxT0hNUnNsZDFuS2FKZGRYaW5KaGZ0SjZlekJiYjdSWlRSNVRidmwtRWNmT1RjdUc4ektFbEdrcXZON2R6cHF5VHFkTnVlVXVYbVhrNEsxYUoxazFEY0VndTZsMktVcDNTYnYwczJBeGl5QzY5SWxjRHFVdG5BUGRtVkZya1NkSmhOaW1tSlRvamFOVHlYUDdFeG9lWlBmNFhsTFpCdFozcVR4VnpGQVc2NkFPSHBYQlhnRDUxdjc3aXFCRjNKaDczckZ3V2V4N1RZOTF3TVJxbUxXVGZBV3hMNWNVbXRVVzliNnBzbDg5bmJtSVJWLUVybHVyTUludlZZNGpySkNBVHlkQlhaQktKeTI2OC1zM1JmbDh4V2V2dzA5TU9ubU55Q1RkMDUwZmdjZ2ZtMGRfaEcxTU1PUGQ0WFRMUGNPbzR0TTVHNm1FcVNneE8zc25qeW5zT2JwaHREYzMtY20tNW5WR0xTYUhja3JpTnRCdDlrMU1maWRrTHdtWVNRUWJpbWVfOF9iTjl0TmJxNm9NczZSOE9BRVlfOWh4SEI1U0xTT1NNWHo2OTR0TzJNZDNfTVdUN1JyM1dPX0dmUVlvY2ZRZVpwSlZJYjNBT1gwQlI1SVBRMi1HRDIyUzBqZTdXN1g4WHBrWmYtQVZxR2Fpanh2VV8ySWlRaDY2enBOQmFOUW9PNFJzZGRGTXN2aktlYUJmSi10S0Q1a1liTnBHMTFRTkpjZlFFR3ctTjZyTXVETjlfeTJ5czF0d3pKMlVoZnlJWFN0dzBRQS03Qkl1WDVfc1VUeWpvVE9CY01lMFVJT0NUR2poRDFncDJKU3JUZDlBX1l0c29QRllsZlE1bUw2YXpSWmpRaFpRTU1CdW15UElwMTFWbzZxNHJhT2xWSzVYeTE0T25WR2l4NGNzc1JFU0EzX0d3cUhpWUwwZVppZ2EzZFhiTkV1X1NkQkFUUTZrcV9nNUR2Q2RkRWN3YU9mc0Q0U0sxXzgxNldmbloxTUttUGdiNjF4Q0VwV04zT25jOFdMQW1fMUNXNWlSVnl4Y0h5TWxlVWVqRFBhTmNmRnZiaWFOX1l1ZDhLZTFRMWYtQWNCSzRZUzdsZFlzdER2aEphWnNERktuNmVIQUc3Q1p0OFlJeEhveDh0Z1FhTmZuaFZhcHFUazQ2dlVuUFZBVVo2LVhSS2xMSXFmYTlPamVONzFFQ3NjWDJQakZqVGVUYW0wRU9ZMFpObkw5QWhxVldwTFR3OFVuM2hMNmVUZE1CMjI4TGlTOFhpb2ZfMkVrQUZNSElPUWtEaGo4THd2N1FVcHJjTGF3SnpIR21ZU1M0eXJJYnFYd2xfN21Gak4xQzJnbFctU1hHZTJJSEZ2VUJJUFY4S1FNOVZDWXVvMmFaVGtCRlNWQ0drWUVXNWRXcVIwdFhOblRvYk01VTRQTjQ1cUtaNGVUTktaemdEQ2p3cDNsTU51cHE1UjNRYTZEa08zdWU5ZXdWcDhnSUNvUnl4UHFnYkMySWZRTVd0NWt6UUw4eW1raWlfdTNHWDZBdVlCeGpsY3JOWkFGU2lOaHJRaEwyZjlZY3REUTVib21feTRLbDNlUXNQQWo2X21wUExoR2hYX2szSXNSdWRfME9Ed1h6UTFKeEVTa2RIbmZWSVJ1VW80U1JHMUFTaEt1U0k5ekFlX21pc1NzU0ZqTEprOWhKTTU1WlZtWkR1ZEQ3bTZYZkxVZUFqTkJidGNzdjhQczJBV1dfMlM5SGM1emsxNkp2Z1BDWFRzNXpWWFJBOVY2ekFoNGpXVTItSVgyamlIUXJodGFZR1U5aDNvbklWVmRhV1ZVeFhycFhTbzJ2Mkg0TV9ncUJTYTdRTTJoSkNQRmlDejd0Yk5Cd09GTWxlS0V2SDBKSFkzOVFfYWwtNlRTTElsWkZ6d0x1Vmg5ZndRZlRJU0pHLVJ3MU9aSGgwdXdWd2haNV93NWNjdHNJczdXZlZfcUFIMjdEU0RMRXpWcm95Tld1cks1NDVCc2R0OHJPb2NpTy1BMy1FWnpRU3N6ZmlsT3lrTWVxU3FxV0txXzVoQkVtbFdBaExqaWlxaFhRVzZTVm5Wck1UMXZEeFNJMWVjT29kd2NSRWNCOXgtMlJFLVFqYlhpT3VkbWtzajRhbloyWnpXT2lhVVFyb3hlUC1XMWs0YjlRMy0tamZsdVo0UWhPQlRzMjVxdjFwSENHS015RTUxZUlQQnhfMVZMZTRoRk1BcW9TaUUzaGc0OGtReGh2Y3g1eHJremlqaF9vTklHQTJXZG1mOGNWSVlHN2hoY1FiLWFkbmQ0Sml5WktKMW5ZakFIb09nMkNmZGFFS2lSdkNTbXZSYURyaGdGNDc0am5lUmN6M0RyMnZWbU84MXBMMm8zVVZpN3dvel9pM1pWUnBOZzhoQWhhY292MGFvLWotdDh6djI0d3d6cmJQY2JJNi1hTHVjVmR5MklFckxlaFU0cTZQQ2Z5T1VIbklqWW03bTNMRlJNQ0Q4akxIZW9fVWt3bmVqeGl6NkstWGQtZEhHTW1WYjNMV09EMVpRRUtYYVhWMzRqZGFaMEduWVRsQmN0OFhBblpCc21BandMN3dCZVpnWklpT1k3TW9DMXRJRWpiSDBSSlo1WEF0M0ZQZlREeEFaQnQxWXBiMkt0VDlXdXZlbkloRjdiWm5CMVBuSkZ2QVM2STU2SGNJM1g4MGtLTDU0TWVDaWN5b05KTlp2RTZaT1hBdERtaHBKenFvRnhRbktmN3RfWTdKREtzWUJGcTlIaU9DV0l5bFBNRGFhWUlITkJvbkd4TEZNVFQ0VDhfeXl0dHFDRmpSMHdwWFRibmNxUHpod2RLUkE0WXhRSG80SFZqSVhEZzZIc1NxUk1mTFh3WFAxZE95bXlfMlZFTkNtRWkwRTRTbklpeldIeUkwN19tdmJtWHZMbWN5SzAybElXbmdUZzNyRmU0aVBJZUJ5cmRMNktycldiZnF6ZTZDVnM5RVlFb3hDc0NFNnB3UjJ3bjdoS0hQV1pRVHAxVExjVXhvcGl0blZ4MzExeUhCeWFJZTEwekxuVGZkOFJRbV9UckZoWXFzanZuYlJzXzUxcWxrblFUb3pzNVY3dlRiQnozbUVVRkZ5V1dDbTRKZjhhbnpyYnFiMGIyWi1xX1RGTEFueUxBamViYk9WaGlWQk9kdGV5UjFqVlRQWGlYeE9aSTlNMGwtcVFjcVhDc25hLXNOVEpEa0xPWVlFazZfeTdNMlpMV1R6SXlrdkxKVjcwVWtORWlXdnpQalplaThQS1d5YzJwZHlreG1YTUM2aU1JWjJPMS1wVk51Y01wRjlRZnNrejlNS2ZweUJiS19TelVlTS1sbTNFYVZUMDlGR2Z0ZFBrYjVxbWdLRzVBS3R0Snpsb2dXcFQ5akVoYUhrU0NhS21WVjROZklzbUdiT2tLSG5lY2doM2xhMjhra1pZV0l3VUQ2NzRwZ082clVFMjJwczJlN011YlpZMG5sT3c5WXQzOHJOZWNXaUVGdHpyay0yZlJrSWktTThtdktYbWg4c0tHeUNaQ2J4aExfYXR0NTdqczRPdnV4WFI4VS1YMjRfR3dteEpJc2Fjc2NyV3JDRHpfYlFCNk5kaE1kVnFQYTNnaFB5V001ZXEtdWRSMjFjWGtVaFFTNEZUbnlzVV9LSFppUHNkUnU1ZlAzay04c1U4NlFQZzVPaEpITlZib0JHMFNhaHBTSFVLaVp0NEpqTWkzbWtnbERTWjUwLUEydzVFVGd2Q25WY25GTmhNZEJQTXdpelJPNXVHbFdSS2FvX1AyV0YyRG5YM0FoU2E4eEZSQXZ3N0k2TzRtN255WW5LSXJXdTBJUVljWHp6ZFFmcGZRRWNEUU0tNUdSYWpHdGRZOUJNNDgtUG5VNFktc2o2NXlMSG5xanNia09GQlo3YnBvN1hkWUU2SU5tSGZJUnZXdWZWYmt6Sjl5VHppWUdMMDBhWEVsLVpwNDcyV0VmR3FRWloyY0xmZWNlZzVXUy1RS2xnaXp2RzUwNHVMZTRiOVpUOV9SRmhQYi0xemNXYTk2LUZzY0lxcS1VU0hZbUZ1N0hfMVFWSHJvZHh4MlZyeVFVYWoxV09JYWsyaE9QMzBwUDF5ZzByMUFWTXZzZTJLSXVGUnloT2QzQ0ZCS214N3ZFd0x2NVliYmJSb3B1SDVlMjJVYXhLM1VVTmt5MzRZWEtYdFVlSnVuOFZNZzc0czRHX0FVYmR3ckFuX3NHclBvTUFla3Q3SUozT0RUT083MnA4eUxxX3NjNWpjZ0YxU0JPVGNVRmRRa3drVjUzYlFGb3k2QXZrT0hNemkwM1ZockkxbzkxQnZCOVM0N1VOa1ljMDVTMXhnRTZ6LTBnTGlBWG5WQWM3UmhaLWxjOWJzOU1XY1BMYTRtTzI2emxBVDVHMUFrSWFqQ05rR3FYZlcxcDBlX1d1SG1ad3hTdFBidDh5dDc3R293LXkwUjJwLU1xVVVhNFdGWGZaVEFabVdLV0NPbDF6Z2xydlpIWDVweUVhNnRaZmdiSXdDa25wUEpvN2ZRT3hnRDE2OGp1SThfZ3ZPY3FtblQ1Mm9pY0ZJS3F3eGRMVGxROHl6ZlNHTDM4WnB4b3FBU1hFb19wVTk0Q3dzcTlibzNfaVpSZENDVnNwcC15aUlVcXJUT19jUFNFNWgyMDRkZlhZa3pDVXN4OXN2ZXAyb09KTGUzdTMwX3BSV0phb1hlTFhDR0FkVWMzUU9CZENvamNtd1F4YnBpUmRWZk1naEN2RDZ1U3I3Umx6VzZBejZJYnBteEhBYm83WWNDR2w3MGI3SHhKX3p0dGJTdDYxVnEzbFFDQjdFd0xZTXRKYmZCYUJlR1NpM1Y1bERLTzRPdHlzbnBHOE9VeXNwOUNsbEJfQTJVWmVaaGN2OGQxaGhaYlpGaDBxRks5bUpJY0tfYTd2aU9kQ1k4MG1WbEQ0dW1oZDNVREltQTI1aDV2Mm5nS1psdm5UOThEX3FnVFVDZ1F0ZUV4MW1BUmVOVGxjeXRBZ1lZbklUTVNuVWIzVVNKOTZvNjh4QXU0eVBkbk1xSHhadklUcTgxTWFwS2gwa1VkTF8yUVpUMXFlc2JhYk45THpwWV85VFc0T3BoSTd2ZjhQelFpenBKa25WeURnYlZlYUVObDMtSUdjTC1Janh0UmRCektTSHVBZzN4VF9sYXRIajY2NVRhZ1UxbEo1UEtsbExGcnZZMGpmU0U3QUZXd3kxcjFQYnNVekJDalpGM05YLVVBazhIak1EWmNRWUo5RGhjeVgtY3otTWZFcGdlb3VKMEJKT3FyMFE4RmpxdEF3b193bHc4amhTWkVZSFdkRmhIaWFzQWVPMTZXN25yTGlTYzRBR0pkZHZEMFRVX2wxVkJRQ2hPM2hIYmtLVXBCcklqVjEwQjdWTV8zYXp1cVl4dHB2WW9Fa1diNjNKdlhCS20tNkpybzcwcjNsOTNEOUkwYlJrcy1nV2ZFa3pZTDRNYkV5VW1YVjBHOGdOd2xNcmtqTUZzWUdveDctdUgtdURNM2tvd28xb3lFR0lHWmJFUV9kdU5rMG42U2lTaDRmS1F4SGxCSWhFcTlMaG5wRHJ1UW1yM1BnX3lnWDJWTThFelBLbE1ZcHlkTXZ1UlNVWG5PWlp5YkJEc3VDeVdoVHRweGRyajRYUGhBM0hjUXNvZXc3NUxoT0R3M0w4amRFa1pPVG9mbEhJbjJEa2ZaeTJTanFMUVRFRTg3S0tFYWdvYTlaSUVZTEczTkNlekl4TWRSdUxhMl9DQWlMOEx2bHNRTG5ZOVdhdjloM0V6cUNaaWhjZUQ1ZFBral9yVGxvbjdsbVQ3VjQzNUpwT2tqRVBtMDQ1V1hYLV9BM1RmTVNpdllSQ2pqZkJqQjNNZWRVUG43dmdadDZlMVVJZzFyWVdxUWVwZW5fZXlTSnFISzEzejllQnRXRG5pUGV2Rm0wbm9FOWNtOUNBRmIyU0d1dUMzclotdXNScVhuWFNkR2toUXdIZXEzSnpBYVVPdGdqUk5mdFloVlktUFZ0MEoxdUdsUkdiSVFOTEpLVC1iOThIaWFGbTJ0Z1RqMV8yS3lrTWxSb3VaQzdmU1l5OE5fTU5ydEFYazM3blctLVpFOHJaQVZULTVfODJyN2M0NXNQUGpiSUg5Ymk5VW1rUHpZRlpZUXdwc0s1eTRIbjRQWG1tbzl6TUxqU25JVW5wbkVOZmprUGZBVExCVEpsanR4c1Y0TXE5eUVzSlh3NUZBdnNHNVJibWYyOUFPd2VBd2lIaDJkekN6YWlDdHBRQ1NLUUZMamctcnpDT21qcHNyOHhZT3g0WjZoLTNKTk1aVjQ3N2RyUDYybGlibTVHUzZOVzJuMDZlQTVqbzc3SjJ2SGRuY1h2T000d3J0cUltd2V6QnVsdUhqaHU0RFNaRHBBTkFfN3ZGTWRnbG9tUmFxUTY2V2ZtSVhONnpVeGRiU2YtYkhPQmRVempqSUJUUWxkUzZzRFBNVUYwWUhleFphaGNJY19XVHBCa210bUIxb285Qi1KMm9ia0d0dWxXazZnYjIwdkJfcS11cGpuY21Rd0hxbnNOTjRaQVlYeGJLOGI5UFNocE9KYm1EZnNUR0x2TmF3Z2U0Q2ZOM1RKbnN1XzVSWVgyRFVISnFpVFVxZHFGUzRoNEFPRUhjM1BybmJUN2h6eXlac21weDB5OGZtVTF3ZWVXTWdlMTNDWlNFTjR2aGhqTlNmSUNxcGtIRC1zUTNCRDRXWXF4aV9jS1dEckFUQ1NvSjFWN2ZIVDJHV3Iycmt2SE96a0dNTUdqWHlpUEdZM2trRXBETVo0a3hTVGtRby1yUXIyWmtpSllUOHB0MkRhRDNxMUdtVjRiay04Ti1wSnJNVWgyQk9ONUVOOUF2azJBYUlXSzVQSUVMb1o3SmNDTkNLY0xWYWJjeHE4RlluR0ZXTmM2X3JpeFFwOTVNX0lpSkVkcUVjV0xpazRnNFhsLTJ6QmhQanhZQ1N1Z2RWZUVVVHZpWkdaLThYNDRyUndNbjFDM3FQWlFUN28tNzdwR0VKYm5yLWRlZnJjRnp6QXZVY01Wa2dKc2lfaDI1QVFDZ0JESUdCR0ZpQUNrTFUwMWk5ZVpicmt3cU1mYkh4MGJTMDI3c1B2TDg1Q0hoSE8xajA0WUNfWTBlakZiV01YTzJJc3IyVm01b3JYMWpYRXVZUWRFeUYxTUdpT2QtUlVKM2RqMURGOVBlZVlLcm02X0s1MWZLbnRxdjF2WUhFZDJkQ3NmRkJJOG1IVmpCc1plNDdFRUUtaVpRVnhKdFdrTUNxWTMyYUpMVmZFdGZwOUlnc3A2V1dTSXQ3azItZnFUdURtbzNGNlZ3QTRjX3E4a3FJRjJaWjRHejBOS042MjdJX0Q4Q0NISk1UU29tWGhpQUVfZzFtVko0bWR5MTI5Wm93TEJNVHpnbkJpZUI0eVU5VFpNSFVnaEZCelZHdHRZVGo2bDdHanlSMUNjalNWOGRQUXd6T2Njb1BGLXdYNG5QR2NrcjF2bGNHLWl1ajNVN3dGRGlaRnZlX3ZhSHFSRGFYUEJBVkEzSjI5ZTdIWDRLVlN4ekxmTUdYSkxWQlMwTjJkYnJuVDdkZFZyR1FUVmRPVXZYTzhicmVvVnAwVXRFQ2QzbXlIQnVCQXVnTndaNTh6dGtWU1lRN0VCVzQ1Vzh4UkFIRzR5dGlvcS1KcmhPYnhoMFhpZmU5QThJNzBUekJoX1Qza0RCNFNiR0FEMlBHUkJiTjNkSE9WYWcweEU5aExSejVNOXVsemVLZjhHOGJWMC1tTjhzZlE2Qks1aExaV0RCNlhyNENDR0RQMEJqRmZtMjU1R0JIWWhFMW5tRDNndFR1ZThTZC1OTUFmUGJNTEtJN1g0VllfZk94clJQQzNJQkhCd3V1NTRiTWFTUERrdmhlM2RPeUUzS0VJTklwcWhJWDJLVllFZTRYcTk0S1lxd2JHREVKNDhndHEwVHFHV1pCVXctSVJybTdGVWhSbzU2WVZ0Y0VGOTctTVMxQ0JDLUJPb0VYUWpLWUhtSGx4eWRrdXVJbDFud0VKaXdDMXh0TUJ4bl9mQVZRVDBqektoQ3FHckxTbS12NFNTbWZCeUNlb2hWX0I2LXQxZDh4eWRVR01RRmtBZjY5MXpJUTZPTXlyellndks4ZS1vU0dzbHF2NFRSdUs0Q1ZJaTRTZGVCbEJPb0lHODJzWnNzMlNtYzBuZlcybUZqNlI2OGotQU1GeDBKaUJ0cENPYm5keXdyTTBKQWFuXzY2NnJZM3ZIaF95dDZ5UTdwUDFhMmJEbG1PNTRwQ0twSlU3bkl1RTBlV1N3UzQzYnh4Ul85ZHBiME5WM0J1N3lTNHNuaGdKYV9HOVFIaHZWYXd6UnI5TnhtcWl2NnBicUtXSDlyNzJ4TF9hcms5dW11WGt4REo0NXkyQUNNZUszV0xiTHBVTXFhUEdWSERuOGdMaEtibFNKUk9xM3JmUmo4d0dpY1pqOUFseGtnMEdzN1JQd0dMcF9Vbl9sWWFwdkxBUXNBalBCckhOMlRCNTZEUnNNSXItN04tcGNsS0Fpajl1X1R2Z0xlVlpBVm1BR2ZLRlVPM21Day0xVnBHR19MWnNZX3NPeDdERVRnZDBIeXBxUHh5Sm03cy1wYXFXRXdCUkMwQVpReVhYM3g5cnV4QlNnVzd5SHYtZ2VwLXZVWlIxSjNTMThWbUJtRXFyU25RYzR3RE1oR2M5V1RqY194cW15OEF6MWZDcGxrTGZsTmRxTWdraHFJM19qTTVnSFlIV2dMNnBSS3NvS0Vqa0lUSkh0UDNDUFhxOF9ZdnBEWGJ2b2lvOHdIYnZQMGRLMXRTX1JHdGp1SGJPdmFfVFlWRFJDM1RSR1JtUnpGUExiQnh5cVhvZ3Y1akZfLXpTSnZEdXBUMElxZWJkNHNTM3lGR3UxTHNRU0dZdkFSSWM5cnFaRHVzb2tfQWpQdmxPck53ZnU1X01va0ZjUC0yTzgza2xyZEpaajlLaVF3WnY3bE1URGR2WFpyZDFOZVhST0toR3NuTXFPMWtWVGJLQjJLS25BSC1TZTRHMmZWckszVXlGVkNEZC1Xam04RXRjR05qWlpsNl84WnhYVjVGX0NnY0I0YUVmajI1LVpqU0I1allwSURaNzZySHY4VDZDcktIVU1YWEV1MDZlVVdRWWlVVlJpcGdQblJsbFVYdms4cFFscTZJd2JGWU9UOG5WTG9udTFPRldYdjF4ZUhwdDRWWnhmMm92WHdvbkxzTU45RTA3Z3YzTmpkZks2VDZibWhxZl9HTnJ6eDQzR0VjYkEtZ2tSYURvaldQSld0LWJGV1c4OEhXYmp0THp3Y2pSTG1WeWpJR3p4UTJGTnpzWUgwNXM2TVhKRy1lVXdReVpzVTNOd3B1QUZQd043MGhwYlRrdTlYWmNYM19SZHNabktOdDU0ZDZ3dnptZWZnRTRaQXRyYlp3TGh2Mm8yY1JweWxCMTJEdkp0bzhwS0wxZkduSUZPaUFoYVAzNlRaMTdXV2xUc3I4NTNmWGRwazgtTTFfZHpjdTRNWENjeHZMSlFmb3lXSDZ1R2RFZmtNV3c3MnRwN1BSVmpvT1RqOGVVLXk0R1I3YXpfeUEtZ3JyYVNtMTBld0ZUbzBPTjg2cDg5LXBZNVlSWXExcnZCRUI1WV9wc0NwMGdwLXlfWTdfalEzMmU2Q050UncwNDB1cWxqOE50NEpwWXRyU2pjRHlRdWhXNnFoSVUxZUM3azFxOWdhS1BZWmNJWmxYMEtKeHV4dDRkWGZIT3JVbGJXREdYcHhLbUNNZ2JkelBoblpaMy1uNmJfMnNCSXhrZnpzZjFyaUFZSWplYkxETEVoZ0lXXzhYZ294UHk0VEZCVWtEdExxMHhhU1hNVk5JWm1SNVNXRXBublVHZkZmeC0yeDgwOWlHTzJHdmItRzB6TWdiVU41cFB3d1ZrbmwxVDNrQktOYXNwTTdBa283TmowX29VeU1fa19pSkVMNTVTTXY4X1BMRy0ySWtvVXowbENuVVBNYTgzUXNjbklseVJfd0RCMzNGay1SOXkzbVE1WWZEck5KWHhsSjhVdUd3SXRTSnBsTTIxYlZnTXU1NWRoektBVmRmeGtWT2x6QU9sZkI4dG1GX1ZYam9mWUFTYk5ickJuY1daaktwMUo3UXZUNWJZTXBWeGpwU29seUp3ZklZX3JIU0F2V2dkdG9xc3I4Q1M3cUdVNDF5NGxDSVRMLXowSEM5R0E2YTVWVi1EZXZjNWNGSnpCYUhyeExCRldOc01SZE1mRkZzQ2J0SmhUa256YVpqU19fbWx0NlJXMTI1Zll5WFV4aW5Jc1FlMG9FbC1HZlYxNGZtdFlQS0dERUlxdjhWajhwSnVLazVXSkhJRDlTU3BKcG1XbTRrOVZ3aXZGclJMNXpqTUtUM3BTR3hDb2w4T09GSUwyc2t6OG1MMHhSSFdjakl1T0pyOVVIZ2F6dnFxWUZJZ0R0SlE5NXV3Z0ZFUFFOUEJmWHE2UEtaVkFsazNiMWlZbDdsbzZtRmNNbUxzTWJWcUJHTHViWXhYQi1kaGJDM0YwUmI3Sk9jTl9aVHJTRmV5QWFMQTFwLWp1UWpzX1FpOGVDSHJkcFlZQ0NPZGE0U21ZU1AxaGczU3ZTbzkxcENiX2NRTFlSOEVzUGZwNGRva0ZKcEx6REYyVkRqT1B5QkNucm0wLWloNUo4Y3U3ZUw5SDVKTnowb3RCa2tHYzN6N2QxcGw0M1BtSFZZVXBIMkpoZk5UOVBYVTVlbU1oZGRSMU1mX2N6V3ludFhMVkRqVk40QTdxdWNHVXk1eU9RRFBObkR2OWhjRlpGemZ0b1h3VzRVT1ZuWWIzdmM3N1MxbFhMRU4yU000b2d1clpoWmtQX3dGRnh6OTZ6bVNya1lUWUMyTFUzb1hPMnZTc21Pc3JXS0RvWFhOOXh1TnMxTzkxbEhldXd6WTNyeGF6NV9OSHlGRGtXa2xHYjAzV2NXTndPaVc0MC1VR3BXSWh2VzZjanA5Z0xES1B6NmJUaGVsc09jVC1FczlSREpaZWlLSG9PTklnLXRnZTlIT1R5WFEyd3lkOWlpb2w5UERYelA5bGVQZ09LbGl1N3VSN1JxZF9Ta2tXS2Rrb2FLM09QZ2w0bXJtdzBHRDBYVHIzekpTcnpKWnpac1JrSWI5UnpURm9PbGJxcnRQaGNzR2RTNVRBNk5reTlfcjVJZ0FyX3Q2UkdyXzJkNW9xTE9SdjVMTXh1NFFzM1lPSzFJNHJFaTdMcWx3NGdVLUJSX3cyS09NY3dJRmtzVTZxdGltY1M3bi1sMWpHVDRZM01RdVF2aHFoVG84MEttSHNDTGVtQXhlTEhGS3FzV1NCak5JaUY3NEcyWHFHZkVTaml1bE5KaHJmTEtsVFhxMzBFMFlZN3hxYy1fM002RUcteTBicF93NWlseGx2YzBndm5EczVHUWVseUJuMGdNZTY2V0pSRUdxMXdIQVpta1lib201QmJPYnFoS2ZscnU4cXRjd24tRmttUlRpWFNQWlV3S3VZd3FQWkhlZ2ItMEpiSW5uVXJfTm5vdlYzUGE3ZkJ2ekd6cnZuZVRLUVZUMXJqbUJMdjZMWnFwaTdMWnNvTEZ6bGlCNUJyM1M2anN1a0I2Z3hpcm9CUzFLOTF4eE1Lc2t4MHlXTzdkOFQ2RnRwZ0IyWmQ4bkFoaHJSQ0o5cnh3ZnQ0LUFmQ1UyTUlndzB0bGhwTm8zSDhZb1kxak1pb2Rfenc1eGV1MFFRcnRYd0thSFRKc2ZzR0d4NTNMck05TWkzSmw1VEt1bEd3VkpsWS1DWF9YZmZuRlVtUHIycGdwT3JwODN3MHFGbW5TVVk4VV80akJxOVRpTF9xbGVkRFZpdzd1ZzRTZmNtWmc2c0daSHBENFF5c1o2ZnotVWRZanJlTHl5Z2N4Z2Q0MDRYc3NfWkFENjg4emdxMDNTTlJUenNFSEhmd1RpY1BxcVFRZnh5aXkxWFpSNGpPZTc5OVNjMWF0UVVoendyVUxTWnU0VzNRb2R4cVR1b2VhY0tMYnRMN3lpZFlxcmZyMlU0ekZ0Z0FqVV92N1lFVVBiUV9HZ3FEelI5aXUzVDM4eHlUbXRUUW43QjEzRWI5R2hjWFhfXzJKckZzRVYtQUJnYVlfYklyM0dncjNVZUZndktjSWQ5em1Nb0RydmJoOW1EZ2xlNFdoM0pNeVMxbkZldGZ0OTJJYlpHRVJHX1lKQmRxc2VidzlxdWw2YTJhNFZjTEVJZy04VExiTTg0b2RYSWlxUzNIS01ScEp0Z3IyRGVpOWFKVnZWck5md3N0cWZwdDBoUnhib3REMDMteTZrTmE0QWEtTGZCYjB2SjBXaksxb3hVVE8wTEJiUXdmS0ZTNHQ1UUlhWVlZYk1qUm5weDNLYjVfT1FZN2pwakN6OGItTkVOR1FWX1hZRzV2ekVXck56TEU4M29fODROTEo3ZjBUSlRiSXUxaFN0dVg3SWJReWNmZzVxYjZvMGdybk9UdGx2M1VsMF9ueW10ZWhlN1NoTkVJVVN5SUJZTVNuVFE1b1g5WWV2T2JYQnpUNVRQaXFUY0NzOExSLXU3OUlTU2MyRlZOUGEwVUhzQnlzeC1HODdtd2NBQ1B4aFhxMWxOaFVmS1dWQkVnWVVMTUc1TUVkNFZTcXlKcUVhNjRzRUZ4NF9vNUswZlVXd0tBVjVSelNwaHJ5SE80SHNqQ2V2aDE3MzBENGVNTzN4OTlJN0k1ZXlacE84NHJUOEltZWdJdGkxVDVMN0ZxbHEwSm5wSTdoOFFXTTVsSGdpbExKRGFta0d1cWlGNi13cGtUWGJadTRoeW1palhhVmh0X0w5NjZNY2otd2dWRFFXQnRUd1V4M2lKa2dRZ2J4RkJud2R1VGNYUG5oNVdLMmpBbHlneTJnUTctb19xM2tQS0xYelowTFhOUERnSGdZSzk5SnZsUnpxUmhZOE9PSVpmN1hsSTlQUDNLbk4xSkViaXpnRWR1ZkdMaXl4cTBGdU5sMndMU0V1Q2R6LU0wZ21aNW1LeXJqUExabmoyZHdEU3JsNlY0c1RvVjR1Tkp5SnA3VlQtcXE5OXJPWFV5dDN3VTRaUHExTFd3c2xncXRIeDFrZm1LNFIxSU83czNwR2RCQjRJQnJJMXVlZ2tqdUl4cnduQ3JadVhYeGF6NTdneFdUa0JieWx3NjBDdnVSVF80RzNGNXc0XzJFaWZ5Wng3Y3ZqLVFfclhZU2VVdGJCWkJ2UmdvWkdtbVZvMGtuUFFpWGVJaVE0VkhFdDBPak1GLUVDb3EtUEluUUFITUZHcXhfWlJtNFkxdjVtQUwyZVpVbEhKeS1YSkdZVHhMYVl6SUhxM0M5M3BXdzBFSGJCWjZhekJ2SzQxQ3lKS0VyNUk4Vlh3NTlwUkg5R19jY1pLTDBQQjJvbEVwOEkxSWltZ09FakxIRXBkSldVRF9iWVhnbVhXanByZ0tvTHBWT3gtaFpwNUFBX3kxaTRueHBqdjB1dTZIYWVVY09uSGRSbUxJbl82dmEzV2RjQkhqM2tKX0k0bHVCRVBpY0tfMDc1elRfaEI5MnNsdHJXMDJBcnFIc29QcUp6WW5LUzJjNXVMRjN3U1F6QnByS21oemhFMkpFVG1sQTVSSm9DTTJwTHRSSFZjM3huc2hYOEpBUHUwODRMZzB6M2RZZGZEejdTeFpYRW9ORy1qVE5HVWdLb2x1bUtKRmIycy1LUlNPZFNIVFZJTE1NbjN3bEpYdWZhWVhtU1lvWHJpUG5sZ1REOVBpRHZNQS1uaEY3b2xuY3UyTEEtMlQ0LVphT0wwdkk2TWN3UHhmN25jQzZ2N0dMY2FOTUtjNk5BNUJiVHh4TlJNWHNjNVA0dWhHYkY3anlDQnNZWXhiU1IwT2pOcFJpQV90WnNHMXRXMXVzY0R0NE1nS3BIZmxHOGdyUVpDRUhPdF9PRXpsT0VCeUFtbDFraDE4VVEtUXJYMzlpWVRZTzN6RF9jVjZVczRIdXNqa1Vfa0dvaUV2SVVOdTNNQ25BS1V1MlU3cUt4cWJ2LWk1VlBlaE9WSkNjMWdmSTh5WWp2cVhQRnhmZEFTNlB0cF9vU2QzOFRfT0ZMSmlzX0tlb1Y5NkxDY2Rid1huNjh6Y3RMT3J2ZTdxWU16R3hHZFFUaHFTck9PYUhvSXp0bGNQU0U5UWRWM2pqUUVEc2tRX2twUUdMWWl1UWQ2Qi1naTZYMl9ZUVNnOWJOZlRwT3o4YlFGTDFLTUJaaWlTVnVsS3YxTUt2clNwaW5wZ0ljbW4tdWRjY3NUTDdfSE13dGFjTU5nSDJieG5LVXhmdkRwVHpzSUhueVp2Z2RqT2NxQktiWE9FRXQ0bHZrQjRHQnJMQV90U2Z5N0hXbkJ0Y210S0ZLTkhobTRqRWhtOW9iUS1jdHZvT0ZTSkMyeDdfZWxzbVB2TElZTGRhWVZxcU5LSl9CU3dTaXhGck1PVDZETmxaUmEzTk5DVlk4Q2hBaGdHU1BRRWRHUWN1VzhFVWJBeDJOSi1GdlJ0TWhkZkJJRGUxU1NGbjBTUzBDVDFDM3JJVnU4bDNHV0ZfclI5THhodktxMGVnelVsUnhyOW9xX0ViTTlrVXJXaFRjTk1wSUlXSGsyaUttWWkzd05wTzg1THhFLUhZenB2QllwNjBIOHBtOTgwazdybVByeXBjdEc2cVhTX0tBdUhoVzBxOUl3X2RERng1bjFjVlF0Wl9EYlpQWENXMzFUYW5Remp5TndMdEwtbTJPUE5vOFFjSTJYa2hZRVF2YklqXzNoNXNqN3pRdjZiakxGLXhESnNoZlFydVJjQkIycy1EWHd4QVdybHQ0R2IyRFJvMTBIVzl4REZNcnl1Qi1ucjNtMHpsWUtYRGNoMlVjUU9TSlJNaHd2N2laM0c5blpWcWlfUXBueVZyVVRJUUhiSzZwQXZYNmRicG1uR0ZBQ19YLXl3QzZTLS02TVlSMVB1VkVocTFlT2xwZDJxVnE1Wk03X0p0OFRPa3ZZeklMOFJFMlpUNU9HWGFGSXFzU2pZMlJQWnF1TG1hbmI4b1JMLWI4VGZiZzNlZ0hmbE16QTFuT3hKYjRHbEJJTWNsX1ZOWVgzalM1bzNPeDFrQ01LVVpsOHl2Z01wYTBOa0g4TGtWZElabTNFVzBuMDR3YjlwMlNRbnRkMGE4U3ExOG00NXVuWlA5OC1QYlpYanpKUF9VM1pzeWJKQ1ZmRHQ2NjBmNXlXdEpTektFZ2NleDZpeWlMRE91VXRiUlN2R1F2Y2J1MEhLcHp1Z19iQ3hMdUx1U01VdmdETmhwaW1ZNG5LUHVsenhrM1VCR1dfT3NiaUdENXA0N2VjVnU4dVBfalpPQ3Q0bUVlS2RXR0E2dzE1dFJHTHhCLTVINnJWN2VNanh5TGZ1d2o1SnlQc21tRVdDMlRRYXZmWjkzdEw3dEdQbDdjTGZndGIwUktvTHlUVWptMmp5TXdqMTBLellQakcwZ3FMNnlzZmhpc1VZSGZ1S1A1Tzd6Wmt0cVp2YnM3LWRUR1JidDNBVUtpMjlMdnBYZkY4RVZ2YlJOdzdHakRqZm5OLTA4bHR2ZERsS0MtUGFxRU1XeXJUTS00dTlDa1R1R3F1Q2xnUXhTOGNvb3ByaUJrYWNIeFlibzZ3RGRodDZBWTBNNEQwVE1rcXdzNE8zd21KMmV1SlE2N0RGa2pWUDVsQk1WSlZkVHJqN3A0Nmp3RWZxMW45N3hKa2o5YVY2RzZNZ0NXa0J5eDlSajk1V1hXQ2JZSXJPZUwxV0R3aVZjUlpVakZLdXhncGVDOUNVWG5NanFJN09qblNBZURMbTgwRUgtNFF0SUg0OEJLb25SbG92TW41Rm5LTktiQXEtMHVucDdXekphSlU1OFh4bWliNElib2Zzbk5kaDNzMThsZkNHeUQxSzFHNUowRkRGSHNqWjB3VGdPX0tYMUtfWXFCZUoxS0pubDNMaFRLTThyUUUtZmx3VGswNU5wT3Y1R1MySktmWnRJQldqY3V5LXNJck0zcnhrUDd5MXhYQzBGRkVqcTN2QklsM3Z1VVJEbTZVN1U2eFEzMlllNWRGSW8zcjJJNmNlMXcySC1kcjFzTWxyX09Xd3MxcHVQRXZsRTduQXh4WDhPcUNJS2JKSGJKX2ZSWEtoc1JpSENYOVRvNWtBWGQtdXNVTW5JMDNDSFRhVEdJN1d2OVcxZW12dVZidUdIVm1Kdy1JdkhKeFhaejNIV1hMRTFiaWZWa21jU0owbVFYT0x1Nm9pTG5DQVZVckpaMHh2d1ZQMWdnYzFxTlV6U0pkblpPR3lJNm9RZmItYm8ycm5iWml0bG02dExjdjFjYnlTMHNQeDJ1Q01XaGpZM0hkeGx1OVhlTWhSb1pQM3FIUnpCajNUNzRUSlRFVVVQb3o5RzUxNlo5MDNndlczYWhNLXBkZ01YU0ZiT1lwUndMcEQ4NEluRnVYclVvNWROY3FZcTdjYW8yZVFXWHRFSWsxT2RSQmdZb0xzWjViN09IY3JGNnZXb25kWHpSMnJVUXpuSjZUM2hrajVYbmd3TzZSYllVNmRIeEVBMU1JQ3JHR3dSV1F1U3VadWstNlBCRWhUc2tqRHZDaUNUVjRFNFhlaU1DRmhLdUJUTEV2ZGVsS2h1WHpBMVJjVklqUVNaeE82T2MycldEbkdZeHE2dlQ5dVpnR0xyZ3NiVFBnblVGUnpXdk16cGZqZ1Jic2l0MTZ5Rm5JeVQzWVZxdXhoSF9kMEJEUVJwZkg4eEVvWlM2MXlMMlQ0bE04eGdxT1hBRU5KSk1Bdk5MUW5DWE5hTWJ0NHlzdkh6QlkwaGd0M3JSRHNZbFpnbWFvSmtIQUs3dXYxVE5ZRGZSbXVPVFF4WDdWcldmSWpkamtwSkVia2RYQU5maFR6SWdPNERTZlYwT3NlSF9mcXJtb3cxMmVwSDVMWFhWOW5XWTk5STFtMWtRTUw5cS1XSjVQMmNhc2hkRFVDRlEtMTFCYVpDMGVhZGthUGVwMmFPWG5HRnJteU5hVHYtVUxMVGRKQ2E3RnFZemlaU0hvNU9QTFVybEIzNDRMRzh6OFh4UWFDOG13d1FQQUl0ZDM5ZmlpMXpFTi10RUVlakREeTA0VlNreGdSMXFOYi0ya0hjbXBPSHFlWVMwZmZ3ck9HWDliSUtvbFQzdV8tSnlyODhPVnA0RGg5SzhXeEVYN1Ffa3ZjUG12azUxZEhiN19KVGM0YUV3OXRfZHRTSURMWGJLR3RZcWFqRmN5QTZNdUtfVWlnWC1pMUNJR01lcnZxek1qNGo5UWM3b1pYOWlaaDZyWVFnNEQ3WGFUQjZtM3BOMGJxM0MwZEs2RzFmODZGMUNXc1ptU3Y3TnZLM1VyNjNDc0xRQjdfTV9KeWpWUU1xelJud2NhRnBtd1JPaXJsT2VJOXJiODI2Tk1QMEZDbWxwWFRtSF8tUGZIN1FLVVppcXRSSXROa0tQWmI0RW13TTF5QmhaU2VpeFAwdFF3cnBmS2hDNVQwZlB0d2Y2M2RqTTc4aGEtbUdWV05ROFZjX1NBZWpIbEMxRUNLQ3JRaXlGSGhRY3VxeXFVM1NpX2tJX1lBREEzYnNIWmVZWHY0bGtOUzB5RUM3am92MXlqQnBWR1kzanF0dzR6cEtsZWZFa2NnR2hxWWdoQlJvV2xGeXRJS21ENDg5N2FQQ085RXJITHhpbUJRc2c5Q09CY3o5WVBYV2JWMXdlRllrbHZ5cXhVUDNEeEZlWHktRXhqY1Y4MG02VERqS2xxZU8yZ095bFAyREpNZlVDVDlfY0JvbmhWMXlFbzNZUzdwbC1HQ05jRkZuOHhHa1AzdkM2dTZDdV9iaHhmY0ZqN1VEU2JaUFdrdUpPYXc2NVc5bThqTEFiR3FVOXdLM1ZpenFvWGRsTXlZb2JNVDZpUmx0NUwzR2JFdV92OHk0OGY1Z1g4SEtxVjVEVjZpdlRTaGdEZlVKQ0U5b3pBNmJobnk0a3BmME5XcVpjcHRQN2pMSW1DOVRJOXNnb01WRERpXzVzaGJBT2tESVIxVm9mX1dnOWxHdFhSSDBMR3IxSUxXNmJmSUp0ZVQ1U3hUdVVabmF6MjFyVFZxNmdWeDgyaWpGR0RXODdlcnRKeVRUUnl4eEZxcmRvMHBITWRrQjMtWnk4d09oOWQwcUc0UTNYWHFiSGttT3VEeTBYOGdCR2FOZGNTMUh4RmdRY29VbjJVN0RPMjUyTGZrZ25RVU8wLU1OdXZ0SlMtRVp5emZHRUFsVzUtY3Y3SDBBQWR6ak0tWk1JUXk2dkxPYldYOHRxQzFSaW5aQmEwOGp5Y2JRSnR6VWtKZ3plamlodFlHNS1IQTJXRVctX09HQjk5UkVJQnBfR2lnV0hxN3JMVTZVV1J2ZldqMUxaSzVCT2VRQWdpZjhuWTdHYjdaQUpReVVfb2JIUlprVEZITERpV3pXZWdnWUlZNmFwQzQ0V09abFB3WWtOQzg2U2oxckNuZVlpbjgxTzV4YmR5MW9QVmUyWXZaS2lJY3NoeW54TU9COHRUemZEb3Q0V3g3REFmc3hUYmZXYzJRcEZGRnNUSDhkdGEwWFVYZVU5SnBfOUVxQ2NRWW1UaF9JTWJ4YWJEekxWd1hyWjBMLUp4dzFjSGZpZWduTFl5RUFVS1ZKVHdpRXRQMk53LURJb25kcXRHblhmUmNqYWo2T1h5YzVpSXlzSnltdk5WbFpVdDh5b1g5QWthVlBmZWFTRUJ5UDNkSXF5MVNCdjRyWFBMclF4dnk4T0ctTnRFaUJxa3pfSzBvMmVURkU3eGN4VUtkS1dLbXk3YnNBSDRsakUzYTZxQTh1Rk81d2VyVlRMNmdlcTl2WFlldDVyMDd6V2VuejYwcTZ6RUlPVjRDckRvNE92S2dCZXpzSGI1MnExSVlmZjZnSEk2RkNCUGFyeTkwQVpULTVycXZoYjlnMkpHVTdwa05kRjBPZXY1cW1ONlVRQWRvblVOM0N6MVRqOHZaRGtIb1Ixc0tLdnU2dnlJWDRFZHVWNEQwdEc4ZGllTURNWjlLR0ZqVXVvdl82MVliekZxVm9QdDlLYUpjUEdBRnZHSThNT3hSV3FnZDNJNF9FVU1BWnZjbGs2RUtsdXR4TlhpQlJFQWpUMmlFbW9qT2s3c0ZhTzhOT1lLQTRpVjBYSDlyZDJJVEhDRkpleGxhRjl4aFBLck9heGlacE1ITU1JU1NCMm44NW9rcWJGNXlOQTdlWXZLckwzZE5GSlNLWjRTcFpkd1ZWbGhDcEVsaFNlejQ0cHktSEc3aWp0MUtNT1E1VGZDd3FXdkR5QTRjd2ZyX1dtRmhNZU1ocXFVdGx4bE91a01EZ2ctb0I2QmsxUi1LQmxDTnlVaFlMYzYtQ09qNjhWZkg5YXFycllWd3I4X1NJaGp4RGRkSkpxeGZrS2EyNlIxcFVXTTRkTFE0RkNQY1NOTFpTUzhGSDV0d1MxZ1g0NFJ2RVpkdmVwelJRUHlWdDRtdFg3VzFxR2dseGs0VVc5MXJJTFpCRzVGMV9McUtCdkx2V0xhbF9YZWpGcEZxa2ZNNE5QY25zcHRXenJ5OWN0S01mMXVWTnh0eTJJU2l4V3JtTmJCTXZRVzRyM1dtZ0xneml2WXBISkYyLWF3WVgyQXFSRTJaM0JTWXZqamt4a09KUE54bmYzUldEUlZ4X3pGU19NS2lRci1YaEJ3Ty1vVm1xOVVpVDN4RGlGTnRMNU5fWmN2REtmUFc2ZmxfUWRkWU5ISEtTU1BnMjVPRVRsaUp4RzB5bFJUNUg4NHVEaGU3ZGprY0ZReHlLaXNVMk5oRTNESGZfTUVuVU1NU20zSGljMDkyN3NRc0Z5TGk0WHRSUi1KRURZdkI2MVdQQ0NPVWJmaXVZd0xON1dST2xzcWV1RVN3UHBVcVpaOXVLUlE5NDdmUGdYam1xQUh0RTh6cTZqUGMyMXE0UWc3Y1MycEJ3eUlsOC1FUm11SFhmNlRqR2xTYnRHY1c0YS1pbDlxWjBPUVJrbXIxOHM2a1VITml0eXlkcll0V3JEQk5oOFgtdDFWeTBxOFdPNWtFZE05VVdTRjQ3MFIzZXZPWHhhNDYtUFpwemw5cWhSTmlteEsyZWJPa3lRMTJvUTRKUVFvUFA1NDlCNGxTNXNWX1pVQ2RDZ3hHS3M4NTRMUnU5TWtRb2pzUEdEcWZsUUtKQXpFVFpCQklPQ2xXa0Vhd1RINnZEUHc3Q0h3VnFHY1c2RUhPZ3d5ZUYtdXhxZGdSbjdULUJLY1FMMGxaQm1fZzJScDhySmFxQThFeV9lRkdaeFpPTVNnd1dIWmlqZnp3M0c1aW5hOUhjT0NDUEhjQUViVWdXUFFoQ3BXeS1LS2RJSjVuemdIZ05UXzc3Ml85SmlMLTdCdXFKQ2t0MXFVZ1hkTXd0V2VwS1hscFVHek0tLVFaa0NJVlJHc0VPdC04VTdEd2JoSFpQdS1tckd3RmVYUjZlZlhlMzQ2Smt1RF9BNjRTS2FKR0RnR0o3MjZZWld6bkJCYkYwWC04U1pjTTlIMmVxX09PNGdBbjFlMmUzTVFkeUsxXzczbUZXRENQWlhCQzg3Rm1VdnJFNV9yNEhORXRWY1VtanFhT2dOTmVNRzk1LWdXM3FPNTBJdEtmSVcxV2Jkc1A5azBGM2VfYWxaQjNoNEF5aTdqRWVBT0hvVnNrVTdnNmJ1VW5aSnM4ejR1N0pLcld4cllzYUltZXpzX2k1VFNOTXZ4aTgwQjJLVThsSzBENGdjaUxmWHFoejZpLUt3Y0lBS2g3ZXUxSVJnMGhRNlhnaFU4V0xOV1RFSkU5UEl2NE4wWk1CaU1rVnJuWnZRVVItNXZEWFVsbDI5YnZxY1lPRWNnZ0RGRmNlUWZ6NXRBcHBwcGk4dGpTUW13bHlTZ3ZHdm5jdzVMYkktWFRXUmxmRVgzZ0ZwbTk4M3pqbVczblhnX0VSWVFGVkttSDk3Tzc1QjQ4b2g0cVR6VmlPZkRBWGhka0l5RlFOeEIwemxFWTdHR0duLVlwMm1YaUtTWGhrWlNFbnY2ZDNVeTBLeFk0YzFMT25LTHhzR2pyRllVdmlVSHRKbmk5ZGZQVjBjdmJrWVBic09xMU9TY3hiZHRKWHM0a1d0ZFZYanJCMlAtT2x6Q2Rnb3lyZzhxVWliZGk1cTBjNXJUQlJiSVZaNzh3SkJaRHpXWUpkSDQxeldZelQ2MWdhYjlobWhfbFdIazdsU203YnZnQXdLczF1ZU95T2J3bzRWWTRuaFdqal9NRklpM21aTDd5YUtlZWU4eVZxUFB4Rk9jdThtY0ltU3E4WEdzc2xYTl9Eb3ZBUEZWcWRIOWRxRGYzM051M1dWWkhzY21lVmJvUUc2RUVlWDFsQy1weDloa0VaSGxWWTRyaGt2SkgtbkVsbzNfM3pXVjVMdjcySHNRU1FqMU1hY0RfSGo5dkRubmdyMDkzT3Q4d3poOTR1TkJHZnJrX19jMTczVFg5VHpyaDRtVDlaeTNYQkNHMDlWdk9zX2VfT2RhUW9nUDJzcFN1bXZOZHBYWjMzd3MzeV9lSHNyUUZHSVNLcXJRbE5yWTI5VUtoUWxyUVF1Qmg1Wjl1VklXWHJ2ZU5zZjVLX2ZzWm1iYVZDYUs5N1RyUHkzZEVpQnhrZWctSmVkZjBmN3dyQTRVQWx1bjhmVUVsTUFCdWFQeTJWM0M5R3NXVG1yOExTOTJDTkpFbW9uYUx5MjdFekpUb3Boa1daOU1aVFQyampoc3RYRFNJLUo1bmlvVjU4R0F0V3B2d09nUVlrbHViUHVvZWREMjE4NG5aYlNIdFFrRGgtNl9CUWhZNWFIQlppWUJJYkdZTFhDNjMyWVhtNXAyNkxWbmZRdTRPemc5WGtnVm1lTEUxejhvdjhJNElOZE9nSGhjNkpHT1dSY3VyWGR0UWJkdFJhcUQtTy1WdWhTZWdfQWtNckJZam9JbEF4LVp4WEpmYXdwMGt3S1dOQW1BcktCb2pWLXNwbENFWVNGcFl5U2txMl9JRGU5UXd1U3hOdFZNTUlaWjkwYzVPUUltUWZVZTJVOVBuei1tRGtyVzFSRkd0R0RqcGRMODR3TmF0LUp3eVQycjBFb3NJOElRZ3hjY3ZPYkRVcnRaRWJyOGxWQjRFaWJjT2liSlNubndVQTdYQ2J5VGtyRkdVSG1VNVRJdndnVVZOQXI1aG1zaU10d0w5YmZCVWdqOXc4am1PWjJveHk1OVV0SmVpQjJHbkxHR09Nd3V3ZEFnRTJBdTBLcGU5cXlLNUJMMldXV0tnZV9scFhoR0UzMTJLaG1jOTNVaHB1QVBQMHJiNDAyRV9lOXNmRHZMU3Fld0xEb3JGTlc4VEJiQVc4S05lY0RVRFpxWWE0aENFOXR2cHhkTWtGMWZlTDY2Wkl2a3ZINm1IbTJhbHRFYXVLS2UwTnJDZU5OYVhQZTFPeXVSLVAyQnNfREhiemotQ21xLWV4bHNqUWRBYi1SUmxsRTVRZ2VTM3V5NndLbE1OR29ZUy1fUi1yQ0hXOE9EZ0U1anQyMDhFTWRwWTNZSExzblV2Z085MnY1dDlBX2w5Rmk2ZzRZUzQ1VmtrTTVZcEpZRk8wekRNaHNvMmxOTGtmNDdfWThqaU5OajdMM3htX1F5eC1NZXBvSWhoVmhBcVFWaDJla1d3ZEtScU1PWnc1RUhqcDZLbjROT2ZacHh0X2ZpS1ZJVzZQQ1hITzdYekt5WldKWmszakVwV2lyak43Mmo3V2tza0dib0kyZk5DX1dZNXlqVDZuWGNZam50a292N1ZEQ1A3WVVuYnJkQlBkZGNrLUxNaFRoRWZBV0RsalRmeWJtbzlwTnFNMndGTXBsSDgyMlduNTdaZHZJTlVLX0pXWHFuMVYtNkg5QU1wQlZQU3MzWjg2WllTU04tSnFWNkdGd3E4dXB5NWMtWC15OG1WSnlnSTQ3RXljSFNWM0E5NU92UDRLQ0dCMF9DVTFQWlNLalFGaVRzb2l2UlJaeW5fU0xjbzA4aGtockNOZUtDWVZsaTFpVFJuZ25LYjVadXV1bjVkTE1qdVBhVml6V1VwM2ZZZFRNZ3ZaRVlIQzFaemdraXFHSzRHZFlQQlpobk5SNHJvVUhvdHdkWDFYcXptRk91ZjhOYnlaZnNGejNNMm8tVXY5S2NzSTNwWm1YTE05eE1IcXlpQ3ppSmY2Z0pNbm0yWGFEX1k3Y2RyN2FXSmgyVWNsWWtEUUpGa25vV05vMVlieTRqX1RLblFBZFE5cWM4T3hzYUh6ZU1VTGtxT0Q3YmNDR3Vlc1lWMVhac09yQ2Z4bWRwZng3RlgtX3h1bmlaMnc3X09xTHloZG9mUi1ZdjBGdlF2aWxOVUotdWF6bXZFQWREcXVBY1NMRVZCd213V25LRjRqcF8wVjdod3oxMVZJeXJET0JMRzUydUFtTWprcGQtZjItbG9KdXM0bnFJMGFybG9rRm43bWVlbWNacXpydzRxeFhKdnFoakE1M0ZNNUlrZEhGS0I5SkFsOVBSSkF5UXN3d3lSdGNnLW5vVmtBazhmU19tSHdzTkJCMjB6YUFjQmwweUtDLUtaZWF2Vkg3TFZwNHFvbTItT3IxNk5pZ282SHM1ZGhkbWNIN00wbUZXQlFzSk5xLUc5MERaOUgzUVIxQ2Y0S2NBUmprdUMxNUVIT3daTWFqNldnekV4QnRDSll4ZG10emE0LXdhaDFnNzUwSTM0WWJYN2E0aVY4VUJXUjN0dmxjN2xtblAyQU9iWWo3dl91NDNYenZpV3RuYmhDRTQ1bkhCbDdMNFc4anVpM3MtbHoxVzBNcGFJSW9zUXQtbkVFVDd1YTh1ZEVzX1IxWHUxd3cxYnRETW41d216VWdaQXd5b0JubnFzQzQxZTh2TWRCTWwzOHFLa1lFYmxlSElSbEpfdklrR3FXZk9iV0J1OVhmeE1DbWFiMkhFRUpPYlBKOXZBLTF6bC1JWDdBLWhTRlBsRFZlTklpd2wzLVBoclJSV0t1R2VZcVdITjdtLXVtSWtnaGZyQVlxYUZOejU1RDlQUjkweDBTd3ZWWG5MdUVZRDlWRWhRaF9Zd05VVzJyUUdBa09vRFVtejBxbHdCb3Bxd3B5cHlqWEc4V0hHb1pnV2l4Ym1BZHRFZUpMaDJMVGpGRm0xY1M1YVVuRXJ5OEhkclNBYXF3VTdSTW44aDhxWFRVbnpVWGdxenNRTEpDdlBqeUtMd180ZGprOWNtS0pqRXFBVWY5Rlp1SmhfYzdBUXQ2bVRqT1ltbmJhTG5HMlN3LjV5NXVJMDcxX1pfZHBiSGdaV0Q0SFE"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '43347'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wcmq7zsqkzfbhz4u3ffxf5hd.vault.azure.net/certificates/certcfa1497/backup?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certcfa1497?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certcfa1497?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/514b6fd501bf4593849a475309d951de","kid":"https://vaultname.vault.azure.net/keys/certcfa1497/514b6fd501bf4593849a475309d951de","sid":"https://vaultname.vault.azure.net/secrets/certcfa1497/514b6fd501bf4593849a475309d951de","x5t":"hMyN0O7TCp1O5sO5l4xyKuyImpY","cer":"MIIDaDCCAlCgAwIBAgIQKnbaAD66QgyQhoWWJGWhmTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDgyNVoXDTIwMTIwNjIzNTgyNVowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANZHCdkLJNctxQVdKdaqREVmUwhtBkii92b/hxtlbVEVBjFpGZCKlklJ4yZFJJeWdVRkaG42FU5uwI7op6cUdxlfnhg1YRkzlEl0zHxUDSah7+tF9zQcfUhH66usr9fmUEHLuFaJxxVMwnwh7Y0+CQTdO4Z/d35Bwq2F4YBLTZUCdlkCQAZy6pVLce3ksxAcS25PQSLklbzouIqdhoOCnVKo0ySszHSWfcImzmgWg766ouP/Z7e1ccZCzmRLTMqzjaB0AevLJMFxO0fsAM/5PImJFUjyLbMYL0KqEgWIY6fBTI6QeR3A2UcJWFUEe8Y5CsM0lDBOvpOe2m0naoAQTYUCAwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLgYDVR0RBCcwJaAjBgorBgEEAYI3FAIDoBUME2pvaG4uZG9lQGRvbWFpbi5jb20wHwYDVR0jBBgwFoAUqrcwXIbN8XZo+nbUtMo8dz6L+KYwHQYDVR0OBBYEFKq3MFyGzfF2aPp21LTKPHc+i/imMA0GCSqGSIb3DQEBCwUAA4IBAQCcRqwK2eVuJelH/bvv9ThymBDwqFkcD1Iddtn0MRy4KnZaRWc54IBN/4yUFCSJiug+S+H1WkbYKdZAiGnHJG3T3S5yHaQpN8zJMgyytdO2C66fz9JvDp+b20FFPpHOVFPCZ+tYdRUxjtq3m8x5KUkKQorongzbyHwlTyF0dfgCOghhZicdor6qoShifzydaE89L2RBB8RbWz2c6c74B4I9+TwZ0MK8Gl76qBpJ3SDKXpTlMsJWiM6z9n1UlXKRjSGapDsJvEVIkcHP5mFJ9MaqJJ7fUW1xWtsMWqICzE35hVhzorNUmLyBgUoa6+ChxOSM1Pb4EigMvqe9QcFfS4Ib","attributes":{"enabled":true,"nbf":1575676105,"exp":1607299105,"created":1575676705,"updated":1575676705,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"upns":["john.doe@domain.com"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676681,"updated":1575676681}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2443', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, q52u23bzaxdhsd5aluiscswa.vault.azure.net,
    -        /certificates/certcfa1497, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/9233a538f72540e0b186fb1ce27b91c1","kid":"https://vaultname.vault.azure.net/keys/certcfa1497/9233a538f72540e0b186fb1ce27b91c1","sid":"https://vaultname.vault.azure.net/secrets/certcfa1497/9233a538f72540e0b186fb1ce27b91c1","x5t":"ufhDPwlv0v2EaXDL-5VFzAAq4Uc","cer":"MIIDaDCCAlCgAwIBAgIQFE2jujVuQ6a0B6DGI1TWrDANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ9Ki4TUIlTe0engmOTrJ7isYMjpnOtvpp+PwZhvvgOkGQ4whTvxb9XFhrTPyeDcBXyIpnrOrklOzZuhcQuieiLg13iibvYtmaxu247mMmCo/vDO2FjMRBiXMjIjwj3aei4vBJURGAjnC4g4BDcl/PGdxoGP72CEhKqpmQfHo8e+tkCNtOyL1SKOWDTn/vnhGB6DMy+25yBz6zcwbdEriDPo375WqvuKejiVBGUWrSkH45frOLq1derjfGUC9orgDzhF54Ggv5FJHia/F7X5tqx4rygkqS8/jYcJV8Y/QYJAE2HOvpQlhNLmMa1I/jCyCQ46d53PKyLLwT6FDSJe5BcCAwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLgYDVR0RBCcwJaAjBgorBgEEAYI3FAIDoBUME2pvaG4uZG9lQGRvbWFpbi5jb20wHwYDVR0jBBgwFoAUWH5yFCZ0UG1k8Qc3KGQY+JLbbnQwHQYDVR0OBBYEFFh+chQmdFBtZPEHNyhkGPiS2250MA0GCSqGSIb3DQEBCwUAA4IBAQBt6R3bnV1dHbQE82SHAoPKaAuE1345rF6ajO6ToDTh/QWylflL8Hhjm/VmrwlXvKjjKrVLvC5Eb3HbQ6r3WBaza0ORzyWc6Nn1WWr7mt5aAX7H9SrkyIBRTGM7KHo7mRqh54zxnrgXL3x6h+Q5A0SvzoLya/7ANX5Rwt3IJr1ofJ1xNW5dX0WNdVsdJ7SmZy08ifgxO0VLvusDTaoPlZwCy4AbRQbPvRzDuLhItXHxHgj3L0kg7ylgaA++8RdpsBEtgwE06QmCUnYv8xhkH31lQxW0RcrwBKYhTKVE6zi6AS7bZee9daz/rM4wQ+GrtWy1QvxIJr9uLpUwijLqMCuk","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"upns":["john.doe@domain.com"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2443'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wcmq7zsqkzfbhz4u3ffxf5hd.vault.azure.net/certificates/certcfa1497?api-version=7.1-preview
     - request:
    -    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmZKQ2JVRE5jU2EwUGY3eGxoZmJtU1JoNUdlQXdwd3ZWR05mWXVDTWdfMVgyVG9Hai10VEYxcE5tRHA4b1Q1cGhBTmJzR0tMWkttSTBpbU5xVWx0U3dodXBMcm14QXkxWWNBeDdvNm5LckRlUjNIdFlxNTViY2N4bno4d2EyS0FWTFJQdGI4bXVTZ1JPeXBVZkJuclB2QjBuNXhfR1M0aExQZ1NVajBJUUx1OFdCc19PZUY5aVE3Yk9fM2J3MzdLRkR5MklDT2IxS09fWlJXWXpOR1YyQ0NPSUwyaDE2eWJvQnpaenl6OElfTnpGOE41SVJkaHlCckplN2xKbjFac1hjWUI4dE5UU1dBNHFCVDV1MDVad2hJdFJhbHE3NWJ4RkxpSXBGVDVBQ1R1c0hxbl9BbGRJSHM2NFlNMEQ0THNZdjNMUzY0b0E4SDJRQXZHMU43QWxYQS42YzZNRHVjZjJjSXRSNDVuNkdkcGF3LnplS1g1RVZSY3V6SHZKS1VmVkpHR2NSR0dlSm5aRm4zQzM3bWkyWVVpRWdHelZxcHkxQVgza3BvMEQtUEY3dTJKZlctSzduWDFndnFQc0RkeUVRVk5ZNTl2N0RCd2hyUVg4MkVmSl9UXzJIMVlUbnBTRUJCcGlCYjByM0dCaDlyLXBFd3ZtekxmR3V0UGgxTTlkMEtENndjVzZXbHdFS01BSjNfc245MHhNYnlRM3NESEVQd3dnbzFsRnRuZktuMEFHWTd5ZlEySzNwZ2FNZUFPZWJaSDBQWGR4M19tcHBoRGhwMXU0RmRydWZZZFdQSXV0dWVIRDE1NXZybEpUMDdHTTdvdnN5ajBPTnRBeGJ1VFRPU0NxY3c5QlpzeWlucUI5VnhPd29nV2UxelhLMEd3RTJWVVRsUWpyb19oQzBUQ1lPemJhLW5vWVBDdFRVazVyRUI4NlNIbFFaLWh5RWdNd1hwVS1uRkE3VUM5UGlITllVTmFCQjJZNUM0SnhYQlR3RmNPUkc0SEZKQVV3b1FubVJJaU1KLW5tMGUyQ3lzTjVCdGozNk5KdDJpc29SVWh1dkh2Uk00amh6WjlyRlNNTmxDQ2luNGNHeFhZV09fRDJSZURmM0F6QTVWSWhpc2RIalNFbEVfTk90dHdZUTAtS1hkSjFhMnZtdy1uYXRGaTd2ZTN4bTE2a3Z0SWZOU0dqa3BNUXlYY0FPQjRFcW5zYVY3VUoxVkpYTzRnQVZpSnVXX2VPUXl6TXp5RzRZTmpsYXdfWTNFWV91eEJ5bE1KYVRua3ZjSUJ3Y0V5cDM5blFmY0Rsd0REbEUzVHFiMGc0UVdBMnRydUxLSWFIaHhFY1hqTXFmRElQVngtenRCcC1ic3AzT1VWeDRqaVFQQzB1SmVHcnRkTjYxMmJDNjdMQmpoQlNtNmFjYmNHOG9aUWxHMFF3bnBrNVpONGZ4ZE9hYTIyMVh0Rk9iWVpMenJscWJxTl9oQlFjVjMxNk9ENUtndFFCSHVmU0hlVjl3VFJUQUdPc01sSldhcGJLRHNnZHpaRHYyZkROVjhNQ2o0eHhULU9hMkl1bXBMdGp5czBxaHhoS0plTkNnT2hVeDl2anBEUHB3R01kTWc5YWJDZU1OV1VCczRWRlRPZ0ViT1BXNjBNRmJwSVZyV0preEtYSlE1XzVOVGtuazJPbThNS3kxcU5qbUhxckt1RDZ4WEJISlV1clVJUG9fSlo5ZkxvaDhra29nangwdnNGVExfbXM1N1lkOVVkTUs5eUsyM1pkM3dvTURjbUhCRTFkWDBMWmpPZ01sbWIzaGwyd3hXVllTVFFtNGJ2STJ3TEFKeEVWSTJyT1prbHZMb0JhamZnS0lkVmU2Yk1uQUdTak9KOU8zaVVHc3RZWWlZM3VGczA2anJSQ1A4R2xfcEYtZUcyY05QYlFpSjFtRk5yYkpUcEo5WEplZGdTQU00aEIzQ1lfbXN5NF9jQmRqUXZiaHQ4UlJIVld2RzBCWVVWc2FOb1BUY3VpLTVCN2lLX3dVN2l5aFlqTzBlaDBlRlZyS1BycmtvajBSUWFsZkNEa0lLS21EWlFVdjRIdkdobXF0ZV9QRXNpcm5ZOWI1cHUwWEladVZBSUNRc20wWU9qZWhvdjh2OGNjVmpGUzZUSktVTFAwZ1JPSzJhcHh3ZVBTNWZHSXZKYVVnMUpDa0dYaHptMGZMajlrM2FtWmZlNWpZN0hYa1RMa2lEY0NoVzlIR2RiVmw1WGZEZjFnZXdPVlhzZFRXUmZ3WTNObDloeERuRTlfWnZ5WDNiTEtBcTlvQmRMZ0R5OGppQ2stTjFtTFVvdEd4Vk44eVFwcTBtTHl6QkM3ZGZyRFpsNEdGSl85Z3hBVFYtYlpXTlVROE8tRXAzd29FMjV2eXlUczhXb0ZnM2NVRTZsX2VNeUFWaWkzSlhvemxia2duc2pwYk92UG11ckxEOTM4SS1INHJWYkxidmo5bmhNZkVpYTROUnJHY3dZZXZvY1AzOHBJNkt5ME1YbG02VDJiVXU4UUUydDc3WXE5TnIxZVVmRkhlcUE4bU9IVW96OTNTRUdvaURnQnpwa1ZMUEdPZG1qeUJiQUI4eFZBX2ZMZHRZR2xwb1JtZlk0TS1hcEoxZDhrWUFOamV5T3FPME1qem1tRVZ6ejhTZFBxdHRoOHhDS0g5aTEtOEN3TFJyek9UQUxFUE1aX2l3UExSaXhmeUxqRDhZR1VmazN3YXE4TmxSbHJKei16dFdpRHg1VmZ3U09yS3R3Rlp4M0tGV3lQRVRhajM5bHpJdFJRTzNoMnhuQ0JnOTlCRFotaVZrQzVRLVFuTHNmdDBPTDAyLXUtaUw1N3RpWTNtZFF3d2NULWdZWHd3Y0N1UjJScXhOX0tTZUVCSTc4amlpNEUydzRJVWh5SEx3cDhqcW4wSWtYc1JNZW5QQmExc2gyNW5wT3pBeGc4M2tIQnRreThidHd5a2NiZHlPd1JWWXZQYnJocm9SamJ0anBVRUdYaWpNRTN4QmpNSWdEZzctd3dqMjJwQldiSDA3UXkyeW54bVVycVdWTTVzWUt1czh6LXNLWnJCTHl4Rm1aZTJPV2MtSEx1WWwzQW1qZEcyNnU1UEFWNHlNV0Y4eHVTbXB4RDJlX3NBMFh0aFBXUFhYRDlYWENSZU1mQ1pvWjlGNTNIdjNKNGhpZDdXUnY1cjZUNHduSEtkX3B1bUE1Rk5WNmU5allIUHdZMDE5VWQ0WWVLem5Ha09PbzJfU3c5Mml4UHAzTmpUZzAzaXkwUXg2bWdDMXFKUHRtY2dCQkx2TlZWbThVUW1WRjVQZ0Z4OHJMQXdCTmJrZUNmcm1jMlkzR2FiWmdFNGRMZkRuMFdXdTlWNVNkMWM3ZkNwZGJkRGhRTXBLeWFCU0FBOUtMM05qUkZ0dlM3Z3AzX1ptZzRCd3pPR3BHZk5VbGxpVDBVdW5ILXZrTWJXSkJRdmo0SEl1d3NKdkxtSmttc2pFTk1XMVgxLUZQaTV1elR3bDlXNW1fVVdWUVlsaFQ1Z2luT09ZY2hFNlVCaUtvcHdjX1JTSHlZU09KR19nSkFLd2RoSGRTaWpnWmljNXRRYTRuVG1CZklFVW40NERUYXpNOTNyQzFpcnFzWWZoakhqdzB5aklCLXQ5cU93M3B5WFllVElxbnV5XzYwa2lEYzRBTmVLUl9HYnhmZXZ6X2I2cDN1TVNyeGFkd2FYa056cTJZLWl4bFE4YmdDVHpJTXVHOG1aMG9Xc2tkV2wyaTJ0d0xEcG9uT3JyNnhLdmRib2k4RWN0TGJKZEZWSXFFZ0pFSHhWM2J0bnFGX1JqUE5SaXR3dmJIdjV3M0wzTTBpbmQwYXRzNjRhN0FRR2EyTEdaTGZBNmthdzRGOTd5OE1QWVRHV0I2bzIyV1NQTzFHWDZmVUtSanliVkNPX09xOFpOdjNWbXJ5c2V6QjIyemNxRFVyUHcxaF9SWXlmdFNqNHpsSHFWc2hlcjRra3QwYjVEOGRxX0lVWGZ2c2g2NGtlVXdSNVNDUUNGYkdlbnR5Zkp3Z0FNb3k4R0tVTVJ2Z1d2bFFicF95YWpoVV9JZXNqNVE0T2xiSGFKXzVKTlZaMW5mMG9XLWFUZFFXbVZNOUF5Ujg2Y1pTQy0xODFZTll5NFBiTFNRZjBnMHlnS0dJbWxvTjlGWS05VnVSOG54WVNOR19PdWpGLTBhR1FZXzFFaXJBTE16UmZkaG9XekcxLW93QmhaREVVaFRaNDQxSlN1QkdPU3VvbWhqNlU2X1FlYmZ4M3hkWVhjUVFISE9NYmN3NnlfWmI2T1ROWnhOQ0lyM1NaQ2RyeUhRdE81dFpuTW1keExGWjVZNnQ0V0x0ZWVKTE1Pb1dyTXh2QThYX2VCcVAyUHFPWi1kNVh3dkF1T1AzckZkNXVuV0JKX29XZ1B0RFFtSlIzemlJakNzdmNsa2NpRk16XzlFWkdqR216a2xxdzlvYkNGS0RfUlRzZEVaY3NtNDItYV9yeVAyZGk4WHFrQURJTHVNcTc0UzVqb3FFNVY0bTZET2JReGFnQzctM2c0US12SjlaajB6ZmE1cXNXeU9CNUdOQUU1cE12eHc1Z0hXZGF2RmtvckdzSDJTeEVvbTdJeVJCYlNIU1ZTckVBWGgzN1lGaW5ObzRhTWUzZ1htT1dCdGxNejhPSUE4YklsTDBUNkFSMW50ckZ1ZDJvdUVDbDN6Rk1meHJPMThyWDQzTFJld2dBb1hlUGkwNXVEb3lpWENvcWhaZENJMDM4Um5qRDlQY0w2Sk1KZVh1d2ZaTW9BSFdfS0tVYVluNnlKcDVJZTQ4NXVocVhvUHFoVHpFV1BXLU9sNUNUcXMxbDYxa0FaVlZXYjlOMFpXakdTVkFOQnppREdqNnRtZ1ZZV253SWljUE1ucGI1V2NUXzV0OEYxWkc4Z0tWSHRmT2lHeWVNYVhPSWVQaW5BM3pMY3dnTU1rQ0J2dWxGZFFjXzBKaVJMaV92ZF9oQUMycllTV2hDTGV3T0NjRm44MlRkR3d2bC1QaHBFMUl2aFR5MW44T01YT3J0bmh6eWlCZGdZUWlIRXlqSjVXSWRveG4yZnlqRXlLSVJQbDJzbjhTc25DeFhPODNuZTg1VGxvX0lRYUphcFNwYzBIYkRqLTcyZk43TzBscVhDbEJyS2ZtWWZuNHdsemd5Tk1wc0RtQXF3WmxlWWUzbjhod1dEZTlpV0g3eDFWNEx3SnlFZVFobUZIV0NnX01XcUhlTzc0MF91V1VmTzV4M0tyQmVZZG41QjBXWk5VLVlfU08zWXlUVkdpbXlKeEl1VjJhbXpWOTJtVm1nNmxiMWhMVVpQcWRrX3JHdV9LQmNvLVhOVnJYWkZPVmlUUlBjUVl2WGxMSnZCNkxvNk0tQzNMTUFNQkhEZ2RMcEFxUTYzd2taTHdRUTl3N1BxMlJueTVNbGpwZkNuZW52blF6MGx0T3lYOVIxWXp3SXlUeDZmWTNpalFTWFU5OXBGSXRzYzJmdWl6bkE2ZUNweUZfRXFRRjdUYXdVX3ZXUjZYa0dfclpVZnZHVzczbTVSeFRYQ1pzVFJZUGRhazFhNXpZMU95dlBEclh0U1QwSWh2dy04QUtLalBDN3VfNGRzb3FZUnZ2TlFjQ0k0UnA2M0JRTnpQZXRlRThOb0ZOS1dFNE0wak9rNFR2dmRfaVBjMWx0OXg3WHp6X0RJazFybU91RXpGem10OHpyT1BsUXpxbDR0SGxoVFU2MXl6UWI3Q2ZuU005b1BjZUk5cDMzSWxyZUNIR0RXV3FJdV82VVRSZzRfdjNPbHg4S2xpQnEzTF8zOXNOcl9TNWpvei1XZ1JJRU9oc1dSYlFUaDEzMnBpcEFfbnoxU3g1U3VEMWcyRVlMbHZfa1FONVdiLWdBdHpXT3o2UUtxV2xTV01iSEVyRVNUZ1FMM3BCZnRmdFVZN0VYQU5QTTBjaGIya3JISmZyZWVSTEhDNUx5ZGlXd21vbU9jU3BGcjlUZGowNkQtMV92QkFwZzNGVmNCZE0zdENKSUxVaEJManlqMi13QUJyMENlNmlRaHFTbVN2UEZIbjN4VnlpR2Q0a1U3U1kxd0hUU2hyOGlOZ1g1WWRtYU9QTHNDUXVnSWctSVpWQ2wtRThQdVBmMnViZEJpMklKd0kxWGtMYmVnVVRwN0NFd21aS2dsRTJZSWNzaHVmbTk5Z3BTU2NZZ1RtRmZaS0tTWmVnRlNwSnpBNUpyQWg2MzJmQWlBWE5vNS1WVG9TVkt5ai1ONUZGbUlrYU51RG56cUV6WnVLa2NGeG8yT1VGRHh3c1VwU1pwWjQ4SW4yWHA1WnZoa0NDODdqRzdWdmtkWjczVFRhRUMxWG5rTE8xV2RMM1B2VllVMmhqQkdUMDF0cHVmWnk5c3ppQU05Q2w2aUlMM3VQR3FDZGxkV2c4RlM0UTB2S2ZURWZQNVVBZnVodFE4b2Vqeld2VlJtUUVweF9kQzVDM3VYQzRVek5CQ0lscGprZmZQTnZERWROblJtTzkzbkZzUlpuQVBabUZ0VzlzZFduMUhmY2UwV091ZHlvWnZJNEwyUjR3OGFfZnJablNhbXV0WU1sWTdlY1ljYjBHQWY2MkhPWjFXUUsyallReFhjYnNrOGotaEtsUmQ2czFiY1lSWHJFRl9qYWRLWWxvR052czRXQUZwT1JneFRRaE81RTZSZTNQMzFjQjhkaTV1NlZYazU4U1ptUjVOMmRSUlZ2NWxtbjIydXNFbTlaUDE3RnZRaEtzNUlQdWdrMG5Gb3NxMlJ3X2lidlcxWV9kdVVhMVdNR2JSVzlCeHFBN25CZUNPOGx0MEtMb19Ya0xteGFxR2JwWGN0RnZEa1Jtd0hEX1N4RThVX2ZwamtTWlZtV1czVUhUaXFWV0ZyMXFRdjRYS05oREIzczd0cXVFVS1vMzFQbUhiNlB1RHA0TGNkbEphVm54WUlaVWwyOVppYkwxWWJIajdsSWtsQUVMV01OU1AwZFlkeHVUWnNaRTlUOEJ4MFRubTZNSlc0Vjc0aVJZQi1HNE5lYmZ1NlAzWDl0UmZaSC1mVUJXQWhiWXQzYlNtQ1pyX3JnLTlVaWhPYXRIMVB3azhFVW04SkprdnplOUpmd21OSVNLQl83YnJkcXVfUGUyWURicF9CQlhpQUlEWHpGcjRzLWZ2dThnbXRxbVJNSXphSHZxM29mWTlVUEVqRkJZZGZiMEtrQzl3YXdhYnBKTFZKUEtvdV9wVWVUMEI4UmNwc2xiUEFCZUltdy0wekpTcnBZMm05Z3FOTnRSVGxhaVpGUkZmc1otZGxzcW9UNHVwcWZCTFdOWDlvLU13YTNzaHNvRHIxSWs0aEpLbGFSUlZCOWhtSnVxbWR2SWJSVGpzS0g0UlFNUE82T0FxNUJLQ2VOM2pSeUlPN3NFdGE5dzh5dlk4QnZRSVV4T3hpSmVKd3Vwa1ZORFFrS3N6emt6UlhET0pxaTU1eDRTSm1GUktUSkJWTDZDbGxsbjkzV0pVazBxX1dPUndHSXpMbF9fX3FHd05sR2VpQmFQZ3JxZHI1MVFnZXllY3hKcDdlay1KTDB6bk1sbFRjQzNNby1iNHRmZTFOcmdVeFRZbmlISTlrTzY4VGdTUVZkbGRsZGtXSDZIUmxhWTNsbGp2WEN4ZUhQMjBteGZHX0lySXhKRVVWSHdiMGcxeVJVdGd0MUtteEFqY2NneGpMUkJRdjQydF9meDBjd0hKekJBVGl0MzFCdUZVV3lldDZINkxpS0NnUUJLeTBHcmVNTC0zXzh1aEVqV29MaTQ5RS1IZmlPbWRHdXBaX0hmdEt3YUpDb2NXc01aVjlaZmxDeUpJQzhZbDRwMURadjR2eXJKSk1nSDFxS1dsV25qbGNDZ2t0ZklfamxxNExsZkN6Sl9HWHAwYVFRb2tENi1SUE9kOXJVdDV5aDZQMVJmZ3libEZiSzJWSGpERTJLSkxwQ2RLako5QnBxUTZiOU9VR0NWUzhweDR4WmhibC1nOG9QTElKNko0b3J0eFJuYkVjTVp6eFNXck15WHl4bGVBMDFLNnFGWFVNSVlNVkx6TTNDd0wtRVpSVGhRcWIwMDRRRFJNaVZXT09CclF0MGZYdFJqa3ZhdjliYTA0TXBBbzF3OVhGbEIwRHlSa3NaZlFXcHlpTTF0MXdUUGFyWlprQWMxUkhuWUtUeUs1UUhIbDJ6M3lodHY1RFBFdjU5VDMzTGxyaGZzdzZVeTh6WDY4Mk45M3FZcEdVVEFuZGlOcUVDM1VvZHA1OVk5OW5oMGRjdzkyWEdfSklJQnJ1aHRuSVUtYXlFc0hyNmFnTXhCeElXUDEyRi1YTEVQclJXbDZoMld2RnVRRHhTQlFidzJ6My1wcWNFUk5ob3F1RFlqYmNzUmlVY01HTHZpNEYtTmhWdGJHZ3pfZ0tTZ09CSHFoY25Hem01c2NrZUhIbEdfRENKYXlzakZEQkU3RmhkTWF3eGJlRlZwQWN0cXdHUWxvLVEyZlF0RE9sdlpWVGZKZ1BWOTlFNXozQzh2M2h3ZDRnUkI1UkFZdlNlbEgtMmtBbzdQaElaRFdqdm9Rd2pTQlpNdk14dS1xeWhqa1dXRmVDSUhzZFRfb28xNXhfRXZ0enppSTNnZTliX0RTMWNrQ3REVVVuWllMYldYVXZ6b2o3VkVZc0ZPZmp2V2ZfRUtYQ2JibXdpbVlxZzlNM0dQV2Foa2VsNFpENDQzeGtQcVNmQ0FMYUdaQ2RKejUwVk45djVyUkRwV1ZIS3VPZEFmN3QyWmpGS05RQ3d2TVJfLW1GaEpOY1d2Umc5UUdGUmttWGZ6NWJkM091VVZkaVdtOU5EU2FCbHNtOUxnTm9hS2NLQm1maTRqeG5vdTB6SUxVTWtZUVBnWmd2U0dtS3ZfZ09EdTFYaU9PcmFDN1JwTmxwNnRDR0lpQjJDTTNoYU85aTRfTVVpRF9faEpIQThZWmczcW5zQ0FXVTNPV213dW5nWnQ2WlpMVndXaFJ5NnFYZWdGcUdpU0N1akZUX1BTZFJZZDNkUERIU3AtUmlEWklqS3ByUjBsVFp0a3ZJamt3azNfbUE3TTkzNHNGR0xvRzRGSXR1Vm1LU2JfaS1kV1NaanVkSGx4WEs2ZGYyeUplMUNIbGZCYVpkVk13QVI1cnVaVTZKb0VLWjlPbFd4dngyeHZCWEZsRTJNUG8tVTU2YmY3aTVDZi1BUGp4SXlCMEw5dGNuYXotYXJTNnF0LU5yMjZfdVNqV1BOY1Njc1RFUUQyQWJYN25MMkxyNm9JZUdOTkF4V21oV2VobmRMdEpoX21kQlRWZzY0Tlo5S19JQWJUM3JpZ252QkdEb3h0N3FBTTJCY3RpOFB2OWRtdE9NaUNmRHZnX2c2X3pzTlJkM1l2VkRiVnR2OWZoLWtiWkxZZjNtSFAzNWo3enZtVmtmRjZndTFPZDEycldoTGNKclRiYXVkOXMyVXNIMzJod2xmOTdGNlo2RnQzZ0N1YjFCdGl4NTZKeUQtN0dmXzV5S1hWYm8yTzlPMDI3OFYwNUxIU3hUeEhNREdudEsxSTlhbHdob0xFWXZ5Z0pYdXk2d21QYWJZMUtXX1BWekRMQnlHOUExdUlYYk1YaFlZNGkwUkxkMjdwelFsMEdNM3lsM0ZQTDV1djFPYmlyTUpRMTNyZVBxQXdTcW9pTmJUTGt0bUwyWlZ2X0JHNlIxenJLbUJlSE9xWXczY2h3MFVnbUxIb21DaTJxWmJBaGpMSTk0dTdxbkNSRVNpX0lVdGZsdm1rdG1OS1hRcUp5amRRUzQtUE9WWkF5bFdpX0pmUHk1SG1kUk9rTkRNSUVmTGZnMWpqOTAxSFRzTXZJV2VUaHpjQ1BRQlZVU0VVaVNPbEc4dGpPcGtSSm9lbThhNjltMFlHdVc2S3p6MS1Vd3VsMTgyT2hNUTFrUkRHUFVzMk03MG4yclB4dTVDWWp6MzVIV3c1Y3BnR3duUXY2N0Mwc3ktMjAyenBULTc2b01uck84Q0hEUkFpaUF3LVYwOHlzdEp0aXlnM0tLTXpWZ2p1MEpTLW9IYVp6QnBIdDlnd1RDS1NPRjNWak1HZHE3U0l4MXhuU3dHREpyaXFPdlUtSGQzbWU5UVVGcnpLd3JMOFc0aXRhSzhndWcwSEhEV1liSEFJSjRnaDhXb1c1YVZIb3dqemJZcVdpUDVFTFEyeTk0eS1abUUwdmZHT0VNeXZ0aW0xa0VrUVpuTlVNMTQyeFNJbXlLa09yUklWdHZkS05mcmRQQVV3b0Y1SE1YNThaVHZBdzQyVGF3ZUxfbDVKeXZQR3lWZ3cwc014RXFrZGdyZjR5VDBvRW91OU83V3lvSjlVd0pLYUM1d0hDcG53VjJBLW1YX2d2QlFyc1N1czZ5QTJ1WEZscG4yV1psQUJJS21Fek1kRWRTcWtNeTIyV0FZQ29kdmtyVlVyenBzRmNrMGdVLUwtODRPaTRza0pGOTdvRDA5ZlZDUmdCdEZlWXBJTHZhQzc2dldidVJjbmlFOHB2OFRqcHhxc3RVVERmMmhjNVFzcTlxNlU0dXdVRnhOUmlsT29oY1Q5ckl4YmpkN29idjgwcjNOMFZCQWNvUmcxTm5NZHlTaTdzcnFxVHBkUkN1eU11U3BBaWRZa2FYMEhyWnRGcXFfQVpiRHU2aFBZa3hjc0xXUXVQMXJUZVI2eFFvREZDTmx6blpDXzg1cWJnZFVINmtJM3cwSGVpNlE5ZDZSa0ZXd0hVb0xxdzVQRHhCWjhkOUZkTXJqa3BOSGpDRHlxWEdaYXVHSXRlanFDc2dPVUdEdmM3T2k1Qzk2aW5OWW54WlowLU1kZ2QxU3dlRVVZSkI3UVBpcmJWRzFXcGlxM1Q2NzBFUHh4bHU1SUlRQVplRXQ2NGlJZ1A1bmxMTjByU2psWWZ1WjhGR1BOX0NfUTlaM3dIWExKZ3kwWUx2VjRvbTJINXZEc204Zmlhc04tVURoWENtZEZiNGdXU3VTcUpMNkhzOWV6bTd3a0VSTGc1c2p2T3hWcXJYTkxUN0FFTF9ldlpZb0RfREdOU2d3ZGJ6RUdsYmVDTXZKUHlNSXFqdHM3VXBMVmxWRmZFdktDU0JZNHctNFd5blo2UU1wSWhBMlB1TkI5LU9MQTR6NVQyc1lpQkgzLTRaaHhVV0REODNRZWlMX09uQjBIU1JmUWQ4eHdGYmVJdzg3YkQ4TC1lSTJxbGRfa1hJY1ZRaUtyS211V2hkQkpHVVpHbFZmTDRqQ2kwLUZ6VnR3bEVUUE5VcmJfQmdZUURhZGx2WTRHWHRrMnpEVkdDX0lBOFVqQl8yZnh6aFdRazBCZ2hiOVJ0TWhNeGVscHdwUEFadzhsNS1wZDNsZEllN0JVTkRNc3BoNG9uTlJMS3o5bnBVYmZkXy16UTR2RjFLdXMyOTZWZ0NVSEo1dVlWVnpUcHM2QTRIaElQS2JxUC05eW5HbjBzTVZLd2RDSV9UbXpadE1CVG8zUE5qX2V4djBjbE5mYXhrNmtHTVV1NG93TmpGRkRnRjFIQ1ZsbDF6b1BzRm84ZkVVVHFmRmNlUkdSZ3NsVG5ZQUR5UjdianR5VXBVdkFMQV9mWUtrR01lb3QwUHlRdHJSV2tzZDBmWU5raTd3SlVjWDRHandmd0ZodWZOVzh2Vl9sMjg2SGZPRkdNZHRrUTVMNkNqNEtUZ2lRN2Mza0FUVUs3Q1htLXh6cE5ldXRpZExaODNQSkhZeXVnekZiTUdvSF9sXzhnU01jWkt5bmxqRzNoU3hmRnVxaXByejZhanpOV3haMmVMRzNMbzY5czhLTWczSnNna1VaVlZvdUlmSm1DZVVtU3BCUXJhQUJoNlVOMmt4V2J5SnNqNHBfcExWQ2NfN3dLUDZuMm84TlVBdUJCbXNQM2FDTF96aUwxY0I0T2tFZEpnN09YOFpmTWZyalBrMVgzdmdNNWVwVjFIOVpZbk1wWkJObDhoLXZhekhmMjhrcmk2R3A2NDljM0lHclhnblVncGtYVjMxUXB6cEpPVVM5TDY1M29BV1FkeE03eFY5ei1kQ041ZUNfekJQRVFIUk1rOHBjcDFBa0RHcmJQRVVXV2FQZDdHMlBWRGVZNmlqSElFcFJEbjVVWkRFc3M4QklSaGVCMF9LbnBnR1J4cF9HREJUYXBBcmpaWk1XaUlDTlFhdnk0RlJQX0g1UU5laWF3aDNEMmNFVFpRVmc4WEtqeFY1RWV6TERWOE0yYWlTVXVhc3JiRzdidlZnSjZZazNoVUhJd3hpVmR5TmpJYXVKVnhCZ1Z0SHhtbzlXM3lUZUpOZ2xZOWt4NlhTMnZDTktNMlFray1LdVRMUFBiRjRaUGkzQ1NtZC01MjNBSm1EcTB2a3dpNFplakh6Y2dmUUE1OHRZY1plUWtnUnpqQUg0WGNBbnBzb0J1UzNaVzhhQm9QaU1hbUkxb1RocEFwNVQ3YTlOcGlLbERTNHN5ZGo3NHhDY0M4Y3duNDh4bU9WcmtoVkQ4bzN0d1EzQUpTQ1hBTFE3MGNTbHRCZWROUVNXbUV4VEdqVHpYalNpVk9ZZUxWYXViNkp1dXdBY2IwaHpfQ3I0enM0ZU9qWlVNQ1M0SVpQVDhrQWlFZ3pCenBNcE1XdzEzdGhaQ01rT2M1SF9BQVZzZlpuMWw3UlVGZFJhMkNjM1BZUVFtZE9jLVVNbVk3eWlqWnotYUJQR3BkR0VYSklHUmV2cW5rU0ViaFZ1RWlCaEpQNjhPdWQ3QXRpSlhEVFczS0Y3QVR0bHdxc2loVmxRLUlDVlItSVd1TV9PQlJMZ1FibTE2MHBTY3hzcVdad3AxVUxya2c5ZUlWeERvSXZIdzBURUw0V0prNGY0NVdDWDlGQ0xQcFk3bGE5WlRtT0c2Z29KVHg4WjE0TkxLaFQtZmtlUUdmTlBmcGdPRW1tYnk4V3hTQ0UzUmdaZl9UcUZhemZjVFZtVDZCcDF2NklUY2FTaFR3MFV0QXpOS2tqOG54SW5rYmpJMTBDanV6SDZHOXdnMXp2Vk9YektUVnNHWnd0Z3JHajYzazE4VmRQc2FIWGlZQU5Hd1pvblYzd3RIMGZoNUFzM3hRWDl4QS1QYzQtak5hMVYtV21LTF9qZzlKSHd1VEUyeG5ya2xTcWhXY2lrTFczU3pFaEI3c05QMGRGSkt3SnJJRk5zamNzelZtUjZoaURsMUJtajlvSjgzWHZ0Y3JkWl93dlBGU0Q3VnZpb0JXU29ZVHRLSlFnWkZPTWZsNXZFZHI5Rjlqc1lFZHFsTUhuWUJVOWgzNXBQblZiQ1ZuRllHQUJFNS1KLWxXaHJZWGpnSWFhRkFhMUxxaDIwN1laUWZmRkR4dWlZNU5FQ29QQWdvaFQ4X0hhbFRFWXl1c1l5YWt3bnNscld2QTRhVnZMaEJyV01UdDBOSGM5eXVaOGNfT2NpcXpqYnUtSmJZaGNiQ1dOanhBR0w4T0lmby1IOXI4QXRyYnRpel95M1ZaSVduVFpfNEJuRUxieGxfZEJ2ajlUdERySTd1Q3B0NkNpQ3RVbXVsWkd2VDVfVGpkZjI1M2I0VzNKSExZRlBDbzZwQnd1Y2ZuaWktNW5BWTh4bkVCY0NZcVBEQjREUUdYcko4WmtKeHRjb0xqRVZQemgyOFUyekFyZDhCNU53dGdFXzFLTWpvdGtnVWI1ZWxYaG9aNDJpXzFDWXhSZ1VUT29UU0x5c3R6bzdhajJZTG1UbEdqd1pRVFpoOGF3ZmpsdVJfNkszc1BiOXhERGJucFBCdW16eThPY0JsOVhPQ2xmVWxmV2gxbzE1OUVzM251NzhQYTdBMnQtOXlsZkdlaEVQU0JVN2UxSkdsU1h2MUZ4cUVFOFhFenFtaHVtVV9LcnBjT2Iya1pRNlFfYTRBVi1hTmo0RWpIQ2lsYzY2RnJXTHAtMkFKVGU0RGY0Zm94N3o1N0ZxZ0ExNjdSRjhROUpTTkdmaUFTNWVWVmNEMlNXTHZjMlhYRkpXWGRoQVJfWEVJTzhfai1LU1hSZ3pXVXJLeHd6TGJ4Rk9WbFdvNmtCYjRvRFFEZDhhSUprU0FNTGMwa3RzN2Vyc2ptMWNtSHpXYnJrc3hUNFczMkhwUmVONUJYVnBUd2lZVVlPSVkzY3BnN1Q1S3dLYjJjVGNyR1pYdW1Xdms0SjJCcnEyS0xrOVRuZElwa0tSM3VwUUJjZVNtMzhpeThlajZsMnRZYmVTN0pJMXYwNzVlYlNweVdHYVBjcTRSZVZvV1NQcnE0MVo3bzF3U0wtOHl1Y1daT3J5N3VEMTB2Yk5GN2tuQ29rTmVZb3JGLVlrVFJDcVVXeEhJRk5qeFhiUVVyUTJmOFk4RlJxMDQyaTIzTjJsd2V3NjJfUVlJNnkyNFFRNzJYMjFPUHBjc0xUR09nSjJnZU5RVTFZSC1EeG1oemNReWFrWjFRQnBrOC1neGFtT0xFelJtUG40NzBZZnd3SkFYTmlqT3BJaU9EMG9DMVFUMDd5MV9PVVdEZ0xPVUxNQzZtWmozUkRfZWlDTVVOUU1xcVBpRXh3NUEwTVVpY2NUYldZWHRDZlk5VlZ2Um90S3BLNlNQUV92VXJEUU1VY1ZxZmdFZHE0SnlDN183SFhLN2V0Q0RxTXRQLUJLSml3ZVFJU1FVdnNFZ285alduV3Z2MW1RR2R6WGxWdzFUemkxTVZvQVhURGxINXc3OTUzZjZCUFJUX0VtNkJ1eFM5N2R5NDZ4V3ctVjdlcHFfLUhVQ042N0k1RFZMRzNldXA5aGVUX193M3Z2eFpGVXdpZURzRl9NSHBTRjNOQ05IVzk2UkQtQVFDTEZXd204eDlBbTdIRF9oMVJXejZGekt4dmZNOFBCcURFWTRCWklNVWktOG82TDlHOG56ak1KS2tzS3ZEUGdwMndwZUNMMjd3NFdjVmNJRk1rMGwtcjJiaDlxUDZYWXRTTF9IR0VGVVFCbEE1UG9tQ0NsUTRRM3NOMWRDZmdpOVQ5cXdhUFl6NnFDUjRndUNlZUVUNzh6ejk2eGRSMV9BX3BjOGlOWGFpaTJBRjdBYzM0Ml9jbEMwdGRCZWJmLXRCenhFQnRIX2hyQmRrSzc1a0FmYW11SnpUdHROYWlJQUtWaFo4eFhFLVRZRFpyQzNCQ2pLT203Z2U4Zlg1cjdTcklVNG1nYTgwMnFqQjVEbjVBV0FYNjRrNWg2Zk1paWF6M0Y5SjliQkp0UE5BU21mSTZMXzJ3NXdnRmpsckxSdnJJb05YNjJIWUFwN21Zb2laVkZJQmI4bjNGSVhQVXhuaUtBT2VnYWJCUlhMbnFELUliZ2lmWHU3ZjFSa1d4RE9odk9TSERrZ1lOcl9UeFVuVmx4alhGeVpvQVRVNThaemZZWnRRSExSVEF2VGZxZUFjQ3pYejQtQ2pQNUVuQWFGZmZWbF9YSzZxN3hoVmFyQkhNbzZOeWo2VUZjZG96Mmp5TXpTUENNT2h4OHdFU2d3U3h4aFRNX1dZd3loZzN2STlIXzVzNEtFa1JqZDV1MG4xdlJ2TlVvaGZJUU1Vb29KcEs0d3pNMWt5ai0xWmxPS0xqVURfSTFoMm5wazlia3JnUzdxY2hqYWY2VGVUUG1nc1lZMFJFaXEtaXY5S3J4QVUxTlR3d0I5X2RsNTFfMVl1Z05BaTlNemxTaVlyclFkM1kwWWwtNWV5OXFidERBNWFfeHMwRkhSNTRPT2htdGltMkRGV0tTZmpKazVsRUUzZ3JnSkxYdG9tTW9EMXF0a0lfcXJRSVc5cll6dzFyeUtLc0c0Um1POENXYVRTaFpveXBEVDNMMzRManRfZ3hrejdJd1EyT1N5c05fZlBJQS1pR2lLSFA1M2VhM0xsMVhRUkpqZnkydGZSbDNYQ2Z5T1VmdHJJTU5BT3Q3dlpBMUhGTHotMkhlNGNPckt5SlNrSk9xbklibzdXdTlPVXZlQTdNT1pGSzZCQ3U4Z1l1WGE4d1dJalZGbktJcmlEeWtDSkFsYVlhSE5mZE5LTmYwX1ZzLXFHMFZLTE1MVlR3M256emlkdUZEQmhZSjMxSjA0b19wLTFETmhmOVhDbWxGT3pHRk9tVW5MLWx6VWRfTGZCdDVDNm54eDRSZ1Z0S01aLVoxVXE4djc0azlFOFZSNmg4LWhKMUlzdGw4NFlXUmUzNU5rMktxVC1iWnlIa2dvSWtHVm41UTc5VkRyWDZyek02OHp4V19vOWVQbkZGdHBQVWNmTmtXeDN5Q2dfNUhWWEZ0Q1RyOEhsSUFucWVTcEJpU1VnbjlKMTlxZHBoRW5Nc0Utb1lRZHRvelVCWEdsZ09QMlkxd2swWHpQVEVuVDBRRzFaSFg0T0xYaTNwUTdaZGRaV2F4cWVXQmtUUmxIVVZnNG5TUElnWHlCeWhhUzRBLTd2UExobnN5dFg1Y0dNYTBFWmVtTWFCYV9manlOajhtVG1MUmd1WDMybER0R1B6eHV6WFdGLUtxY0FVZjFJX0VYUG1mQ2NzQ1Awd2hUNHhfTnZwbEktMk9fZUItaHBHdW0xQnByU19jRTBGeU1VSmhMOWNRTWtpSC1XcUxVUWtmWVcxdnNhUEkwRFJlWlFLT3E1Sk45ZkpDV1FQMXhYd00tUWhCaG5nd2dCWHZjVWN6WWFKWTNiWWY3QlF2aEV6bm5RMmRjaDlIX19ZSlRyOEkwQjNNUzVGWVV5aktDX1BscGNtRlpLTlduaWdSS3RSTUdYM19TVVVMOVFZYmZBUDkwVEUwWWxoVzFTM2NaUEMtTmprSlRGUkt0LXdzQ0twLUJ3LXduU0xudUQ0NUlHZ0FYSFJRbXF1MHVLNlFjNXI3ODM5SWdYOF9ybERiUGVlUUlLR1NsVzNRZm5HeEo1YnN5MmpUaU1CeVN2d3QzRDBjd1Zwbk9PZk56bWNkaVFXbFFzUzVraEFnbDNFT3BWRUtMUkdQOEtKamJpTnpOc0dsTmMtYzA1VXlINW1qQll6Q2dJMFU3YzNiRHVKY2ZzN2ZtVVNMejc4M2dIQ3JDYmotVngtLTBOd3pSdjNRQUtFLVRjdW1NRlEtemNDZ2pMRE9fc3k3SzVOdlU4Y2s1al9femp5Z2EwSjJrLWlLcGZLNjFGOUhSNWtwaG11cjVMb1hWSDZTWU5jdy1wWEhyT1lUV0tJcmNkY3liR0NGaE5Vd090VnB5RWFWTE5vX0RVdjJQZXpSNk5PRExBM3VESElxd1huZURwV1VDTmhleVF0ajJPbzlpUDZrUVE5N19zQU9jLW9pOURpWE1hbEk2ZDYtUGVtb2tVWmdiN1BmaExNeXByZXFoc2tUX0FoSG1qWE1jd1ljUkY5TUVDdExKb2wzc05mdURnbUN0b3lrb3podHpIenNZaUktN2s2VnNxMWx4SHNHSDFYcDdIWDI4MG5UZjlxalZldURldHBCR09lcEVYRTJUSUYzZGdzc3ZVcC1rMkEtdWppc25JWnMya3h5TWRqRXhVbktuYS0zWnRvSWN4NDhsT2hrcGl2Y1gxSU9TN3N4Mko5OXE4T093RUl1TWYxWU1xcDhoYjNjS2RoTVhGaTUtVGhoRGU0RURnRkVvVUxUQmlRWXlVYk8yOS01R1pHeHN1Uk9XRGFGOW9NYndGN2JkZzRlZ2VlLWpNbEd0YjlEbWR2Y1dRY0hGclAtMGxqNC1uYzcyVFkyMHh2YWtUMFZzcWNteGl0MEdMWmNlQU12Yk1YRHhDX1RPbzJ6bm9DZk5iRjIyQThINENlM0FrU1ZsVTFuOUNrRjM5SFBrSEQxVEpRdXZfMGM4ZFNxX2FLbXQ2MHJtZ0VLY3gtMXZZaTFrem1FUkNGUG1iNGRqMmNyNUhXN1NDeGVnQUtqeWMtRWxoOXhmSWJWRTVVd3JrNGpFRzRlZ1JkbXpoSk5TcTM0akI1QzQ5eWoyUTBwdEdNQUQ1YlpPQ0VXQ1ZsUm5nM1g1Y1dUbTFoeVBpbEtoOGhwTGN3WlN3QnNvSXVEY2Y4QThHbURoR1RkNTBCMFltUGFITDJOMUhya0NmSGR4RlctT2xoejBqbVJQY0ZTS2luOUJ0WG9taEZsaG1DbjRCTDJ6YTAxMHYtRVU4ZlEwX0xxeVlKR3ROQksxbDMweWpGcEF2a1Rtb0hjazYycE5xMWNLN3MwcEJfTkRGRzNld2pwTE5WMTAxR2prT1dYME5reXY5Y3A4ekg0Y2xDdGdPYUtJcTNWQW9iM1VXa3pvbGpnUnNzbzZUd3pqYlhzR09wY0hOenlpb09GR0ZkQ0thQWI2TVpvejVjblFYNlBnekV5Qks4YUpIeUpNeHJQcVF6VzJhUUpETFJwdUZGZkxPZnd5b2NHV3htMTRiM1d6WlVnZTE4SWp2bFpNU1RYcVQzeF85UHd4OFdZdWVWVUs3VktWOVJLWDFJQnZPdG5DOEhhM3ZFRkd5d1N0UUNZQlJtWk01TUtiVzZJVmVseDkyaWk0OC01dmU3ZVVoYmZ0UG1HUE1UVFBEYTlVT01ZbU5DenRzb1Ewalg4SVI1SVV4LS0ycFdMUDJ2Q3dmVnVxZkNJcmxvZ0NGQ1ZxWWdpakY3WHV3cFJHRGdfVFZfWlBodThKLWJQbGY3eFZBWXcybnpFcGhCbDN6OHZRUmNmTVpKRWlMckRaSWg2RFI2MjEzU0ZPa0dZU2xRQnZkMFEwY21DeldKXzdqVzR5eW5vcmkySlg5alpHeE01M3Boa0kzVVhtaWp1VXFkYUVTUnlxQ3NLbmdlcUZHXzJYMnpPZlJidTM3RE1XZng0cmRrS2R4a2diUHJiOUxzLXhMZ01BbDlMOVhiYUtMV3ZHTHBuMlRRNFpEOTVsWU9rLU5XcnNScHJoa0xJYmpNZjJzTTZ3alV5NmtlTThWcE5xUm51S3l1ZzhlYjlhc2pRMFVwbVk2NDB4OWJ1ZnczSGI2bU1tUFd6d1RIcGxGR0l3eWtJQ3pUSUdNajEySWdrY0V0Vm9rYUE3WFM5RGRqQWY4UlJjdDVGbXF1SmJyakhXOVRjTmJpbTMxS251LS1QdW9ESG5KNE04eEJhRDNFbnZkMllyUURKWFhBVmMyLVpQTEhVaTU4S3FndkZnVGtocFFmaVlMYnh0T1UwRmx6cEVHbVRQb0JGYkktV3B1Z3NCenRfQzBVUWdVTkRidGtzc0wxREFELTVzekVYd01yel9OOUJXaGcwYjZJMmNMRzdEa3ZWeENSekdFd2xfYUhudXRvbzBpOTVqOVN2Nmo0UUlxSHl5Y0tsWWtHcTZERWg1VzJ1Zm9FUFpmUkpWamt0WWdaYTE1eWtzNm5scncwTWhrMDdzTFhfNG5sMlByNk1QWnJPSDVoQk0wZHBvM3h5Z0JYZUlfUkNqbXVqV3FWMjdlaVhlZmZnUFZrNjl3V3J6eUp4SjdMUVAtM1lvcl9LaVF6VmlYNGFvX3B1MXdVUmtZMFNTbE5QWU5id2hpOFdRakQtWGJmc3FNRDEyaTdROXdhMHZDTEFXRjQ1WUFjTElzZW90cVh4TW00UnZZU3U0WmNkTkhEYmw5Tnh3OEkwZWtVQ3hqUndrT2l5ZlJQaHBHT2JwZHNabTVWWVVtc0d1ZWJmRUJ0eFEtUk9IX2dPbHdjdW9oN3V2NDhoRGVkY0J3ZVB5cG1sMm1TRE9sQjhucmxwXzBwdHZIVWZMTXNydXpJZUxPLUpRdXBDLVFienpWNnhCMkZWOS1RVXU2Ml9sZ3lMWGZ0elJ6QlVEeU13TTR5Y3B3UWRoQlZiVGpMcDdyNWd0SFE2bTEwOTlDYXk4aTRHci1wd2VPQldKY3NwdDZLWDF6S3NjUXZrRkpOazhNMnNPaE5sVzNHVUhoWWRTMXNXQXBOTC12N0E2dFVmLWtlOGJCamNwVzhDdlhMdFhtaTFuY2tzYXdocHFsR3kyalR3QmhHVlJMRFFiNUl3bzNseExPU0pOc3BraGFjRHQ0VVNVV3ctX0djckpiM2Z5NERjS3ZVWHdoaFVKb0p5UXNrREtoUXRtdnRYWXZKZTR0OGhOQWtBTlRlNkZXZndULUd2SE9SYWVpcjJITjRIWmp2VmwwcEZ1VWl2UHRNX0R6YXdYYy1Cd2txTExTTC0yX2tKaVN3VmJjaHFJSUE0Y1NaYnVXVEU2TktaWmE1aUhLUlNCVTNiMGRKM2xLUUw4M1FZTFdHYzZJSmJzMWIzMGpoM2NJcVJ5aUdzaC1RaWJmMkxpRmR6Z19WdHppdDZCai1GV29GV2RlQTlWRmNqbjNaQ3hOaGVpR3lJNVhmN3djVVNIQkRqdHJhNEl0NV90eDFtaV9sMDR4aVBFSnA3clpsc3NRWDVxck93LU52LXZQRTRWR3pqbDVqYlVFX25mS3dxdE9vQWNEQnNoVnczMlNMekZ5c0N6UVBNMFNQbnVhRXVCXy1qcjhnMHZXYnIyLWJKVmlzRlFPVXhmclowRHRrREQ2VE1hTklrcG84bG4xdUktQTNtZ1dnMUQxSUtwNnh3a1d4bkhVLTl3cUlxWTl4M1hGNzdsQVo3YUVwWGZWRnBpaFhUUVppWUZMR2VJSlNIYzJhbEVyMnhudFN1NVlNZ2FERFdZeHd6R25uMWloVy1YMDJycHV3UGRWTkpSczg4UFVqSXhMMENhQ0Y0ZjVxYXZ4Z2pXdkhNclEzcTNNVFVKN2J0eUdodG4yXzNoellFYlIzU0x3YUtFV0FHQUtpRWE5SHoydEJfX29aanJJSHRLWTBvb0tYcXF0RXNtb3p2ZFkycjdhUzB4cTBIZFp2RzdUMmJDTGNGNndqS1c3bGxKdkFmbXZuQXpwOGgwbGNqX1lZUnJxTXhGNjRnbVF5ZVBTUGZUOFp6NWFFbVQ3MVJFbkI3eUk4V2U2Q0FUSzI1SzZYMV82WU5UM1RaTGZaOUo3bzRLdjdNY3g1dTJoS1A4eFBPTzJHa2taRlB5azZqUVRVaEJpVFZFSmxFazl0VEFDdmRyWUZYOUFzdnBUdThqcGlpd1NRZUlrRzNyVElXX0JCQWN3UV9TaDRqT2dGTEd4NnpCcnZKM3hhVlhUcGMzMElGYmdGbjU5bTU3ZTc0LVN3dnZ4dFVIcFZCd3NYay1FczZjenJpN2w0eVBPWm1GRVVHdXVyY3BGQko3Y2VqVnBpR29rSmpxYU4xbDFicGplaUJBTUV4NUozQ3lXeXlDWU1Udlg3SDZiazJIYTZqRXl6R1BhZk9QUHRnTXB4WkFSMk53VVpiYkxzNC0tUGgtR1NUQjhmUTk5V25vZGhKUjlRUm9oSnpGNm8td1BQc0hJbkFLbDA0Sm1UN291b180cDRqUGdBbXh2dTFmQk9UU0d4RTBpaW55SU1yUTdyMHk4Y0FUbzNLUkIxbEJlem5wZjQzRlFLcmtHc2ZwV18wa0JEVnE3UmxIR25jZkpoZVFybmsxTjN3NE1YQko3VVdqcnVLdWd6cVZMVklUTTdUSFlqMlRRbUlUTVhic1c3STQ1TDhkNnVkSklETUhKMXBYWGZCNk5RWE84c1cwbDZSMTVoWmlEYkpWVnJiQWpibWVuUXlNVzRuYjRaUnNwT2RXM3cxMFc1VHVla1FvRUEtTnVJRlhuYWFNTGxZT2NvTW9VVEp3MDFXcjZxc3R3OVZhR3RXSzNtbnEzZGN5Mzd2TUNSb1JrUEFrbFhGNkRCNk1qZmVPWW4tdE1aOXZFX2hvNEkta3NEZk1lemU2Ym0wXzVEZzNuZ1RZMGZKalZMT0tfZ3RIaHZNR0NjY2VIYTJpQUJkUkNNbjRsZXRmU25LRFFCeDFFTXVPRDBvWWpLQlVCbFNzTTA1dGp1T2w1ZkZTeFFNaWdLQWZtNG5jWnFvSlQtM1E2Z3BlbjdYRnh1VXZhRlFwY3haalBhZi1kYlVNSnZ1ZGxPQU1zR01FWnBkMnJiLW9LSjJURjdnVkRqdTFkWHRxU2JPWGU5OVBlMk00TDg1eE9rUUlZY2hNQ1FoNkQ0X3ZrQlNiZDUybHhYX1JRd01KT2Q3M1h1bExHUXFhU3AyUkllMzRVVm9XakZLUzVsczI3SWltb1BIbk9jODB6cFdhT0JnRmVfS0lLamVwbThYTUgzOGwzTVQyMGVZcWlIRHJqRDl6Y2lLa04xMjk4eGR1LWswV1h0c3FKMFBBVVdZWU9lNHJ4Tjk3REo2YWhMMUhCcmVERk1ucFNqcnd3MGg0VE1qNEJqbEJSbDIwSWYzbGZxRk40MDk4MlQzR1F2VHJUOTdqSUNNU1Z6b011eUZtQ1ItZUhkU3JiQUt3V2ZPc3RDT2E0d0pudVI0M0dnYUJPSWljbG9JeS1WV05NYVBfdkJjaHhONElxOGpsdWxWRmxKaFhzdWVROE5hTU51Tm1nNGlKRmpBT2U4dEdmZzBnYlRMRUM2UHZOZ0Vnc0JsSzV2NUFqRnY1aGNTaUJtalduaVJiWGpxLUwySzJZUUVHYU44WUlaTm5vY2YyMWZYR3AyVjhNUjFsRHBJYlFGSjFJRXAtOXVNZEE1U1JlQVBYTFpSUXUtRFctTVJJVEFOM2h2X05NU2ZRVUNuLWRvODRyX3d6ODdOMHJmV21HcnNNWVNEd2lGWU12Uks1ZDljTTE4ZjhsNUk2Qk9venBEVUQ5SlB4cVd2NWlIWFkwSkRscUt0ci10ck9lUS1fQ1lHd21NMV94Q0NETndUbThMcnlZUEh3ZFA1SG05OG1QcV9nZXVTOXZwMWVrZTdRMjVaOWZ2SjRrYmhjYUVBX1c0MWFtOFVPazIwMHJZbmV1TGZEeXZwRElMT3ZBXzBYYVpTT2ZlNlJ2bWVtVHNqQ09zWnFjYmxzczBFcE9wVVEzbTJwcFlTN3lXQ2dTQlZkX00yX2JLQnZfbmV0MG5RRXB6aW9seXo1M0JqZWZDU2RLb2R0MldXamdFQlRPbzFYSWhYaHN3bWVPZXVJYXUtakRYQ1dvUTlFLUNCSHBMS2ktZWw0eXlJZG82d2sxaDFLMTVPaTkxZEY0Nk9xWjFfQ1JQbURYdUVTa1NqaWVoN01Ud1hKVXY0ZkxEMkp0R19WVTNSY29uRVkwMTVSTU4waGVucXhUYWNDSUpXaGNiZFdjSVVybkx3VFh4U0plZUZzNVZMZ2ZmMDZHUVVZUXlQOXVPcVdsQ1JuYkw2bG9lQ293OC1CaUNRVGQ3ZGFhTGNKQ2hPdURiQVhhdjJWdTA3NmFDNHUzaUY1Wlhnbnk4U2J1dzNiYTRzMWFDNVhwMVNIdVFSOFZSX3BzTHpDNUpGb0FNNzFfa2tVdG8xMzY4U0ZEREdQWUcyelE0emlDQ2dwd2tpclJzTXpQUE81SXdXX2lwT2h6VEE2MFhTUDVLMDBHR2VwSkFrTkM4RDM3bmxvMEQzY1M3Q2FLRmhGN0JKakZYUkNmMmthaks5UVhEZDBVaGpqZ0FlMkVIMmRvRE95Y2xyY0o1dHBxLTRLZFBKdFBwNzN1V3cwbjE3YWFQa3l3SnRWczNwZDJ0aFByVnVxbmRPT3JuVUwwMnZCaUNMWFVVR19jVUpBN0pEQktxVkg0dUFaandyajV6NWpvZ0ZjRktybXV0VmhyTjJEVEtSWnJkU3RsR2lHZkEzeG1YWmx3YmRUZ2F3Z3JTQ1JTLVoyR0F0bzF4UWJuSnVEWTVmNEFVRG8wbFdUR3htSWh2X014dzFjelNzZGtEM25JeGtMQ1dDLUZRLUxHazZxbFdPS19GMm92MDFISWhfOEptOWNDWlNxRXBZcnFNUnNPQWQ1aDc3eE16Q09Pd3ZtaTIxWWJiajMxdmFHMUlVck1vdW9LamFSQ1RBek5hNThCY3MzR1lXdVNJa2xDcjhUZVhxOS1VeFRWay00YUJ2QTlSc0lic3kwQUpvOEV3ZVcxSWluNlUxM0RfLXZpVDk3Q3RTLWZCY1VMMEtOOUdTU0Rvd0dEMXczTUFJUGhWT3c3eC12eGFYZzhpVUZFREQyaWg3alg5SWhPMWtqbnNidGMyS2pZVGhDWUxKd2pKemlkdTdkQ2dxYXVaMmNhR1VaVE9VZE82Z0NQQnJEbEVhSm91WUhjdlhLbkhzVmdiZ1BvMmpqbG11WUk0akFiOGFSR0MxTEFEMzA0M1VscG1fRlR0ckk3cUVLQ0ZOOXhXTVRISHBGeGlEQnR4bVFUWVpfOEZJN3hpTkQ2WGFYb3BLVy1adlB3eE84dDE5YlBTZTg2SDdUZ2FWT29mbnQwODdGRVZERVFSYld6bHZOd0NQUWZzcVJzclEyQ3dlczRhMTFkdXNTSTdVQXJhdlcxbk9Wd2FGY3FxbjdmLXZjVkZueVJ4cHJrQmlNdGs0emdwNzVIdkhrajhDcUtxX0lRNmVpSGhRVkl5WGpIWjlRdXZZaTNJNmtJTXBsUzZKSFBxdS02d3BHc1Jqal90Y2hLdlVtY3VwMDZuYmVYLUIxVGd0cF83Yk1aT2NDV1NtdkxBekxJV1JZZGc5TFJHcnRoMjQzcDZ5WnFVVGZJMmpPODZnOF9PcXJCazU3dWd6cGFjTmZ1UHI3U2tBTWdQRnM3NW5IX3RUaFNnMXA2VlkzWFRBSXpNYWF4dFJpOGpUb244ai1YZEdLSXVjajBUdnVVQ0pwX1JsN05kMWhDcUV5ckJaN3V2cHNFbzVOTHo4SThWZmxnaS1ra3F1Rks4UmdsbUNxcnhqSzlndXBac01OZ0trUklhaGdockc4VUNrN1N2RjZzcHp4cEVkNV8zRV9LTlRkN3NBVFNZYkFCdkF4Tmt3UkdSNGJObGRzU09DX3VLWDhpd0ZSTlhmMk9LNC0yVHFwc0FoTGlsd3NTbGtJTFpRWEtMOTVIallyNlNQblRLUXN0WTlCZ2VhUnJJTEZ5LXZCRVlaNTl1MFAzTlllUUNRYUFHTW9PNDF5MGxTX0lvZktPSEV5cG1LZmRoSGlIZjFMVnoxYkQ4d1hrQjhyMTRSVHBadjJmV2hPUDd1QWEzYXVxZFd5YXFQWGFTVDJzLVJhN2hnWXRNWkJtLWxjbjR3UGJ1MW9zZHBhSl91MmYwem5JTHlIX2pXLTZLcFVhUUU0NDVicFNUSGxRU2hTUGYxWEQwZzdmTXlNaFh2ekJydVJmdDh0MmJROTFKY1hkR2x1MzFBV2lNenN3WWxSWHVaN2dQRXZFS3RreDJ0S21qanhEdGdLbjN0Vy02T0xqUzJiLXVsVURWeEsxRi1GMXlVUkRYVjBrRzlzSlItb1p3MWxfbHVDREp4SlQ4ZnZfRjNIRmc1N3Q0bHlUcjU2SnJUNk82Q2VTcGNHckJESGthZkJYb2Q0aURfTGJqN0pZQ1Y3eUdFSGluNU02QVRLSno4OWNGUEZDR3Z2bUdET1NOakVBOWtoWjVfQzU5eHNoYk9jNkJwSWVvTTBxYUNqS3lZbTgzaDFQRVZJWG1TY1NacURKY0RaYUd5a2ZidHVkREFHRS04Q041Mkp1cnlXVU5pYnlnLUNXVVU1V2tuU2s1czVDQnI4RThCY0d4SnFqNmQwOXdJb21Mdm5wcXgzY0JWbUhtS05yUk9JeHZ2cXhPRXIyQy1iS3NmdFB3bWljajFaSjVzSGNyVEJWNHlZNU5CaW5NaHBYVVBSeEZZSWFRRE9Sd0k5M1lNSl95WmVxVHlxalJTVTVvQm9ZYkNud1Zwa05Qbk1mNm5FdG5MR2JNSm9OSGUzYTZpRjRoNTBuOW5PMlNRamVMQ2l1cmZ5UmtGRXZuc3h5eEs1RmVKREtZV3Z5SVdwWFVCU0JIdkVFa2ZaNkJOWFNyUC16bHRkbC0xaWlaelVIWmxmMVk0SUt3WXNsbi16OUlqUV9QT3FELXdpQ2I0YTJucy14em1zVzBWckY2a2JRT2tZZWo4bnU5c0w3WDF5TlVhNzBIS0plakc2U3ZhRUJmbVNXWmQ2LTRHYWFFaEVVM3dET25mWFowTlFmVTRQU004bHh6UUE3Y1lyRkpVYzNMbURBUHdfSHBubUZhMlVzY2w4U21Nb0NDVVhDSTNxR0xSbEt1dF96Xy1KQ0N6YmZPaXlrUnBzOTVsQXBPQnZnNUU4YlBId0pPeUR0TUZKVXRZbFZMWVg1UTdJSV9sZTJqY28tOF9ZUmJPc3ExRWdKeUxpUGZabUh3cUVfVVZpWFhtTXZ0U21rZHp4aVo1WXhDWHZSa1lZcTc5Y1FGa05jOE9KdnlxbWF2a1ZtbTFPR3ZneG9aNkpCRERKSWNfclFGczFZazNRR2hTM2Z5eThXRW5tUG1Td3VJOG4yZ0o4aDRnLWRaT2RwMTAzcHkwbndLb2N2eUJQakZNMHZwMU5RdEgwVmdLX0ZJZGttdkhFMldBMTM4bWg0TElGWHZzSjhnamZPa1ZvVkI2X0hJTlFxSEF6MFdrVmVuczRlWE9nRzJGcTItdGRFZE1JUndPSlV4X3NyTVdRR0ZPSnpKZ3FtX1o0WG1fYmpRNDBXRHptdmlOOURua2pCaFYtZG42UUttQ2JQNXlXRFZjWHpHRGYtQ3NHUGttb0VvUXFxQjFXUmR6LUVyelJDTEs1QVZzbkNoQnFweWp1ZFZ5MG5TUTBRZnB3emdjZDhMdmR5NmR5SHIzMFBXckFQZlZmaklxQVpaM0xCRlJTRjJOSkpPQm1mS2JFcld3OGNydGl3UTgweXRNYl9IbDRjZEdJQThJM0VHcjU5Wk9RTF94N0lmSUhvdGxMdmk5SnhnZm83WloxbkVaSV9ENnBxcDNYdG0tcUNSVWJvbW1UdHFIQzAtOEpqM0lwU0JKekV2Wkp6ZUVDcUhfanpMek1XS0diUm1nMlNOaFN4RWY1eDZPOGtWQk9PSlRJWWlzYnZuLVdneWI2S0Z0X1A5MTBhbHRNUGZXanA3NTZJUUpVeDg5Q3RUZEpuNDZYVTI0aUREaXFGVldpdWh5WnBGenQyLXNsZEE5WkdiX3JWbWhERFJpRUF2djVJTVE3WjlmdVVGU3VLZkdjU0FRQXVWM2dzV2Z3YW50bThHSmNMakxNSTdFWkxMdTVvVVZzUWpnd0JuSmktMUtPTFNqUkdZdmRzczZmLVY0N3hoakZKRGdJd1MxdmU4UmhEOXUwMmJzdFBaejAtdmFuR0dBbDVVR2tpZ19yNnlrMWczbUR1LUo2MXFBZVNuaERmTDFlN2NhVE15TFFOZzBDLXZfSlg3ejQzMmVsZlA4cXhhTVBObHFOSkpQQ1QwQkdTVzlZd0cxQjNmLVZoVU05V3U2ekdFeE9kMkNldkxranBIdEVoTjFQM0oxYktlSWdTWVBaR1RPNVNkamFKZ2VxSndMdVB4MldReVpuTnkyM3duclhiUnpILTBTN0hIOWRBZFJSclJsNERIUkxrQ3Jxa1hfZGFjcWstclhWbWZjYkRJNkgyRU40c3FxQk81dmZXU09UYVcyV2t6QnB0ZHluZEZtZlItR2hJc0JQektzV3hsaGNzTThvUzduYTNBQ3oyS3lLdnpPaHRubmdsU1hydXhfZklhTjJ3REtrWlJCQU5DWm50SXJ5YjRtMkRNZmVWQV9PVVhGZG94N0VPOFB4dFZFelM3VHJueWQ4MExNcFpSMVFZUTR4c2czbFF3OFlmZzZhbEhaVG9ldERXS3ItOGFNM2Y0aHBfRGNYekY3QjZLd3hVU1NIOEc0QnQ1YWFvYmRqdkZXdmtUdEV5V3BrUmVxRmpOZ251TlMwOW9WWUo2ZFpHaUpFWkZ3WWx1d2U3SDdDMUFEbDU1RF9naUgzQTVoQWZuWU1ZRjhVS3hnUG1SdzJSZEUxVWIzV2tVM0xBeDRjN0s0d2d5YmdEUm5VSVM2aFZrNmo3VE1TQ0I5NnhvUU5yOTdEZVNmNTBWMXYteFdEMWtEakdCaW81WXNDVjE2aEJsTkV6Smp6NmNPZlhpZ1prb0hPUzhTaUJiYVpMVmh6UG85V2xzdk42aWhMZEJGdmdCM1VXdXAxLXRHb3JUMmJINkVyZ2oyNmQtUl9UQVpOWWNyZzBRR2NyampzbmVkdFJZOVlmcEpkd2ZobzZ0U0dMdlA2WkMyQ0Q1MkJ0ZmtqLUt3TXlsV0FTSmk1NEJIWldGRHB0QWhqVVM4Y0xuODJCeTVrRFZ2RnY2YXpFVjh5SWlCaTc0Ump3VjZwZFR5QW12azJOT2lPYllWUDFoQWQtdjJSWFpsbzRjVldfUHNXX0hkS1VJMzFiNk1fbmpwaDBVNEF4UGl0aGtHRGx2WDVKR190RUNJakFOMnFFUng0bnc1RF9pUW5qazZVZjlOSGhlYWtkZUJrSVNFTkZYUGdUaHIzSGJyYmZ4VE1IYmYxaG1MTWYxNGN3U24wRjZuOUtWUE5EcFhaRFV2dFJlQm9GeWpWN044VDZGQXZQVFNlbkZ5QTRMaDhVR2lzakZPeC1pcWpDQUlKTi1hWXdnQVUzOFA5NmpmTTRUMGVlMDkxZkJBNlNEM2xqSFFkeXU5YnFWU1BGejNhY0RDUGpwMjBUSzlzdDF4MUhNOWdQc0ZYaU9KMHVlTnZ0TkVEcFlIU2ttTmhpNko1bkpERmtNTzhIMnRxbHNzQXJka2lHNXBYU1V5aTBFLXlsWGp0b3JiUFZud3BfUURtMWF4V2R4VFFPUExuNEpOTmF4dEs4TGxrYWFlSHI4NnpCYmp3LVFYWThJNWhjX3RJQnQ1SkR6Y0phaVVNRW1FejlycDVOWDlHZzRBVVZWWlFCa3ZOb0F0ZHh2eXZ0WTY5SlBrMUpwVlZ1TUg3QmlScERtUjExZF9CaUhpNUU0NXlHbnVTeGdKdHczMXVVWVlzcFlreEhkc2hYUjItUEN4WjRfTmpId2VWWGNTUU5jakMtbW9LemNKSFhjWWdQSmlQelljcnlvbGVDcDVCb2NjRVpPLUU4S0lnN0FSYXVKTW85VUpqWFJTZkNoYlJVVjdrQTRtdHFYZEhpd3ZpWGgtR0pEYmJwamFqVFQ0SWxtNW5NWmdJQlhjZURqZXl6bFFDc19KazFxb1R1OEw4UEN5YVFsRDRDaDBXbjlWb0JnUWZXaExfeUY3ajhERXotS1NGQ2U2NEZQazM2dDhkTDRyRU5xd0YteWJnTmU2MnlLSXpjTDUwQy1sZHpZRHlCVmxrdTFHb0tpdE9NSV9MRW1BOU94bWM5YzZPalZpN0dKTFNFTDZPNTM1TmF0ZEdvZVBWeDM1ZVdkdmgwLTlwUGVYSWpxR0hXSmpCTDdoVXZDTEVnNVk0eE85RTFuUm1kMWs0NzNjTFpJZ2hzWkkwcUpISHl6d1BZdmNtd1d5RXVacVlJYmEyTTZmWTFuQjZaaE9EOGtETVJDS1dqdm1uTWQxbkxNZ3lCZGFOa0cwZ0JBVzhwY18wbkdteXVJYXVBWnRwSEZxS0FNOGhDMGlQdzQ0eDZYWTJoWGZLQUNzdTlzSTVwbEdqUl9IQkQ3QXlHYzVuNW5sdTlTLS1GWHNqSHF1RV80U240aGZNZlBLTUYwLTZ2ZXlFd1RhaEpYR0M5eE5BZUktRFJldlNtWl90bFFWWFVMN2xyRHotU3g0X1F1dUJRRTdtSXlUZE5YTzN6MnRxd3pXSjI0WGgwemRFUEgtQndEb0lqM05ZdGRKYnJGbjR1QmpzeVN2cXJHNU5SMUxKNXJKSWlrdzE4MXFxMTVheVA2cTZBMTQ5cDk3VlVYVDdtcW1feWw4MkdQQ2ZMZjZFWDZtandOal9LZnB0TnAzc2ZVMHVmY1JzX25SN1BFTkhuUUtSZEgtckJ4UVZ2UHdIN2ZSczRiRXd2eGlBTnFxejVOWGN6cG1jNXJBd1FVWVJIU0QzUWJBUWVudEpNcXdzVHpETk1SbTNCYUc1cDBzcFBsdmJjTEhITVk1MENUZU5HclM0NFZqUDRmX1FLQlllbUZXRzI3RzVLZndSWXdZeG9FdHAwTmJ4OVpYYjVlbTNOTGJNYk8zdnctZVJ6S3ZYX251THo1SWhWR1ZST2Y4ODZ0VEVHT2Fnc0Zyb3pCeDBha0ljYmRZVzdlYTg4VXNSM0RXd0dXNC1icjVQSldKYm5uLXhCR0pOekZjYjJ6V3pFenhqMHpldVpGelh0RnJaVkx4NTJHOG9VV005UENrVnpSYUtnRWxjM1F3NE5VQmJFQ2tBeWlhR1otNGRnR2JISjFXSmxoalBNcURWRnFocEhhTWNyLXdFZzlFRXFGVHNJai16Uzk3amZyUG05QXFMdEZSTWJwU054TUE1ZGtTS25GQ1dBSVU3WlNUTFdHZ0xYTFV4b19LTnlFOUhTQlM2eFM5NWRlYTRQbllOSnYzdmlWSEpia0tBSnd6b0NUSTR4azZ2V2NaN3JWLVZaWm56WS1nN1hKLWl2ZExBSnliaEVvNzdpOE45OHFCQnhDVE5vcnQ5el9XbV8ybk5aanFvZFRNNENmTWMzLWd5T3JFbGFwYUdUbXJ0Y1BLRllfb3NkTmpESWVwSXNBck1IelFNcElHdnVZR0hCY0JjMjNYTHl6RGh1bzVKRlRsV1FmYnRyMGRXX3lDeFpFcEo1dmZRanYzb1pkRThfUzJzRGpuLWczVF84NFcyUlliUVY3VkZwT2I4OGVuQkxRVlNqSnlmNlFHOEdPaDFXV0wwUk5NOFN6UTl4Y3dNR0ZmNHJnYkdKbzgxVWhvWmRlUkYtRndmcUZqR1dWUGpEUlhZVFl1MmRxY0N2ZzdqdUZiVVVPR0t3c2JmZEk2QmhuMTM5aG0tbmJ5TjBRRTlNb2k2UWo1cVNadnpwSnJ4U0duQjJLNVBjSVhHRURtRzl6V09nXzdJTkV3YVlVQXJEd0lSamtDSndUOXEzZ1diTHVkMzRXX1RSNTlNWHpDV2hDSGtmWmt5RGVvUTNUdjJHVmYwNEE1MUxwNFBhTVlxLUM5SXYzLW1QbHFUNy1RaWhJdFRkeFpleDNaWFJEcldmRllaQTlsMEtUSXN2V2k4bWhrNnFMWUc1UGVtU2V6SENxN3pkTzJIbG1yeUYtMU1Sakl6b1QyNUc3bEFaM3B2NmZRV2JPR040RTRUcWlFTkNiVm0zVnFXd1pCb3hhWVp2ZHhpU20ycFRmU0ZIeTh2N1pkNWp1N0Z0SFI1azFRWTY0MTBKbkFrMWNRaE5tclNIQm5YaHhKbEZfcWYxcERHajBSd0pIUHNYUGg4WWxkSzI1RFBPWW9oVFE3WVd4ZzR0ZngwV0R5T0w3dUp5cF9nWU00TlAyZ3R0UVZhRG93Yi1kOEt4LUZ6YjA1bWJ1VEJvaTduTmxfRXplZW1vbXdVeE1XdUVpMjZ4NW53azJLYW80OXltaGtOYnVDNkQwN2tmeVVSa2NkRnlJakhGWkRybXRRbFg1dHE0MjZyVEpSWkxNbG90RkJvRWlmNGtjbGNfRlJ2bG9ZM1d4YW9MY3hEMlI3M0xPXzdaRU1oa05GQXFadFFGZHdsZHBhcXFKZEhxVFNpYU4wVmFvYk1nRVZWVmFtQU1mOVlkMVdEU1R5OTE5UXB0Ml9XTE41OV9GRVZOS2FDd0g4ck9UUXhOV0FhRmNKOXVraXc1VUJXNHZHVktEQzAtay0yWTlDSFFrVzZTTnI0UDd4b3NoSzNUcjRNSk1sWGtqclJmVjY3YW5MM2RqSV95ZlRSakVOQ3ctMGJmT3djTFlyMW41X01mbHE5TjYyajZ0Vy1ZVS1pRXA1S3c2aXBzUjJORG5jTXNtQVJLZ3J2WmEza2R1SkU5NmJFMm1OMUI3MHNPT1JkbmZNNkk1N04zd05xZU9ET1RhYjNab3p6NV9ha3ZmazZ5bGlBRHY4SFJXOWlSVE9tRTBzSnhFOXZ1d21ZTFJERk96WVZEUk5Tby1TbFRTT0dCdlRzN2R2akl1Mmw3Tl90RDlTcUY3dFlEQkQ2UGI0NkZLM3NET2tPbkhuZnlEZ2w2RjEzRS03NjZqM1g1N3hhdzdhd2FNUnFEeEozRjZHVTVuOHhvUkR0NG9VQnVRMWxEc2FYQ0g0ZDBYTzdDRW5tVFdqX3NtZXd4eXRMcURLQTdZRTNuWUFQODVmTkdLUUc4eW5zN2MwYjNadkN2OVNQMS1sWUREQ29NX3cySU5PbE9RLVZLZnQ0RVJGMExxckNpNEhJdnhZT3lTanc5UU5DRDk1RU50WGx6cUNER0pmZ29jSFdpTnB2S1IwZUhVNkFwMkpoQ1JJVE9JMUJuZmRHWThQM2RyQjBDRFlfelNfOURnekQ5OFo2VFNUTjNaTTVVU1lKZjBtOXdEWGhjejZxY0loZ0lQQkptUkFxS0tLdzA5RlZ0c0dQR0RxS1hPQ2tOMUlxWm5kMkxoSS1NTmQ4UklKdUlRZzZHRmVpeHRVX0JxcndkakxTVmdtNFVaVVF5UTBwdThwTmlJM0NyS2NTOElKbngyOFFIdzJrYWVwSHpwY3RnNFpkWWVjQU1yVVJSQXNOMWJETEFLbGs5TjJaQTUtSzQ2blAzMEo2eEM0V3dhZndxUWVrVWduNUhTbjRZZzRWQUhSaFVfbC1qWnZKbGZFZVNJSXZtZk9Bb2FYSVZSS1hwUVNfcGVlc29pdXU1d0ItcnJxNEQ0TVVVZEdydDhfU2FKdzRrTFJvUkZzMnNTbnNBZVNJX1Z3bzRlakV2UExkbkgyZ0VmOG9ESDlQZlRrSk4tR2ptaEtLYmxtdnNaUXhwZENiQ0xsSEZzMWxyVkt3aVlTZ0VMY2Jwb2w3LUxybHQ5Y2NmbXFtNk1zczFBYVE0TzVzQl9sV3B3WjhmVDMzSE5wYnBEcVNDZEdxM2YwVWRzeXA5U3FIQm16QVVJcTNJd2tRVUgyTi0yTWFfRW5rM21melB5TE1WU0Y5cktwS2NPemYxT1UyRVZ0b29DVlBJUTlqbTE0OWhTWjR3bTREelhrY0tpWENBUGtKZGVVb1hOMjIycTZHZlNPNS1TYmpBT2NHTHBNMFNqTzl3WU9xRThsS05KV1RFNDNVN1BTZEFCdXpTSUVFbTg4a3lGWDZvbGRqQllwQ3RDdXlKSk1LbnViSXJ1cjA3MEJBMjN5M3VUeW55U3duTmxNN2lCLWJRVXgtV0dURGdBLTBRY19admlyaFFrWUFSSWV1dHh0MWlFSTFJckVxSFpkYmczbGZqWFJDMFlNTmhJOC01RnZvel9YMm9QdVBkSlQwLUdLeFFZQXM1ZnRYcU9hTzkxWmpkSkVGVGwyMWJNYUpoSTh1enEwclRkMXlUZl9fRWV2eFZ5WFVScjdlblFFck1YSVBkQWRvUHZ3eGJFS3h1M1lpX05janFkVXRpeGxjcjZlazZtSWplSjByeXBnVnRmOUFpdEJ6T3BucXhfMWhsc0djcmNlclQ3NVBTOTBwd1VEcUk4bjV1SHdsR2o5TUtiN01Mck1PcmFRblZxb2FHRXAtelZPaDB4N0w1VXhFeVcwZ05LaEQ2aHBuaTE5NkhlaXc4dkJQbm1QZTVYMzZEVUlHSUllcHdNNzdDXy03ZTZHX0JaRlM4cGFYYjF0R0E2S1UwNHFib01wNHp0OEJCTU90aHV0X2NPWWhWYWZNdDJRM1VtWHlKY1U4Slplc1I3ODJBLXBKcTFuRW1WVExvUjhWdnZpQ291R1g5RFlQdUVUSGdBTHd2V3kyX3ZPQVliTWNzR3AybGM2QndKOEpXNEJ1NXdZdTRMN1VDYkhyMDlER3lDU2JtRXplUkFKaEdEblQ3SWFUNFFOS0JLbm4tZXl3OHdQVmJ6TGZDRFl6aFk3UzQzSmp1a21aajJkbzlFc1h0R1NwY09PNlg0eDZ1TlVPVVE4NEtyM1E4enhQbXI0NW4yNkhES1pyeTR4YVlCVE9JSzg1MXdBUEY1STg5YUlRcW9QYVF6djc5R1lILXRid3VhRURKNlZraW8wbDhRUzVJTk1oTTJTeXFOSVpsNlRsVFkyTkNzUU5lV3owcWFvdjJDRXdsaEtETnpNSm1KMU5mYVpQRFM5a3pFSzhicDFoSkpkdW9Qa2t2YjE1ZGJRU2FZOG1md1BoU1c4b3ZBYVZaY19LLWwtUmxvdGlWSUtwN01kRjZVYkdOdGdmX2FfZDEzdHRZR05Uckt2ZGV4UGp3X2tJRW8wUHo3VmgtOWlaV3BfVXA5akc3VUxpOXVqWEN1X01EQnZEUHNyZmh5RE8xVTBIMEhZV1YzT0NIeFJENFlyNlI4WWRfZGVYc3U0RnphZW04cmk5aVM3UWFreGhSb2RvYWRxRXNkQXgtV3p6TkhpS0k5VHJ6QWNSWmJORjNTbFRBWVFRaWpYOVhQOVBTRjlFaWRqcVNTdjg1XzR6ZVhyeDY5bU96ZzhSS053Y0YyNUZWSnkzUGs2RFdjM2pQdHRTSV8tR1ZDem1KMkI2dVIzbUE5ODd6MTBsYnlfcWZtVGZpRXVkM2RuU1o3ekpfcGsxMUdhTDlXeWRRT3JHZUxLMXRUaUw0MU1sRjZOb2RWMHdTdE1YZEZLemFlVjhzNGg0bEhNay14b0VkVlNPWGdtSlVZWEpNYVFqMjJMZTRiLUs2ZFFXUm00emJxUFFSSUpyZU1mdl81eHB5RnlLSV82TUl2dFozbTdwalhaeU50M2kwb09hRjRuNWktTy1POVBHaFI3bTZ3Wjg3MnNleXM0enRadDlrN3hvYzNCWTJVc09NdElCRGViV0R1MVBDT3JxbjA0QUFvYWZVYXZKTURMZTVMdTgtZ0xuMkduNkFyQnBkYWlzc2xqQndWSDBxRmR1UUxLbFJuMXJybVJDZGlfTWZNZW1xcTRXQzRsQjY4MnNrcXBKa0pVV1dpcVd1OUpwODktcWN6R0lzU3VTaFRkZ3A2bWhON2pOWDF6d0NxQXRTOWdSSFBxaFZsZUVYM3hZaGVEVmRxcHgxNHl4Z0Zkb1ZmU3A0S1BqOGVNcWFaWUlIUzlUNjltT2ozeVdHeFd1N25hZTBxaVBoaVNab2RSUndGLXJQWDRlbTBkZnBlckotVTkwTVY0aV8zOGhpVllaVm5ES2Y2eWtUV0ticzBIWHRiTFNnNDJRYjJIcnFucHlKZ0NBU1dabU5MeHlyUTBNQVpyTW1KeFU1X09XeVQ3Z09RcFV3OGw0S1hoSkFaVG1zb1ZCZnJsVUtPS1RyYXNjWTZEa3lYUUJYS0R4a21kWWNWR0lSMkdINmZ6Ujc5S056V3ZQdjdsZFR1UzhiQ2x6Q29yOHhELVlONFVuNHB6RjEybXJjUlBVU2d2QkQ2bFV1WlZIVmZ4cnNXcjhGREwwX0ZqNEVRVlRIdFZYRmpaN1c0bnFqMjBfaDhOWEFxVXNDMkNzU3FWU1NjQ0pMbkxhUE04ZXRjVzFaaTdHbm9wbFBxR3dzWFcyS1RXbFFfYlp3X2NSbU5WemJJaXRKaUJQZVdwcUJzX3p6WUxraUJYM3J4T2VfUC04ZVRvRHdwU2Y2TlZnNUtjVW9jZ3lsUGMxRHFkOGxJeVktRnl4OGlyQjA3LThkOU9UMEhBd0E2WVJpdWF4N014TTM3WkZJSGNvVFZfMXplRmRJVXJXVUx1czRXWmZ1MTdYVjdDU3liaUFDclFVV0p2M0lFVGFYelE3SUtUaC1ZVVVhTktRdFFmOW4yS0YzRmVhOVc5Q05FclpxNUxMU3kyczlXSDM4QVlQY2ZKY09Zdk5oYkFlV3JlSjdxbE0zZlYzNlptNm93TE8zdWtHdXRsc0JhLWFBeGI2bmIzVmV2YUNFMWNkY1BYbDdXazczWXV1RTNQT0ppVFVHVkprNU9wd3NQVURmZUtUNzY4MGhhRnlLeXF1Y3AtaE5MRWRJRmsySnlZY001MG95emZick41WkZxcVVhU0R6UDR1UC1ZNlJlOEZYZWxDbllkbEdtTWloa2xzdmpIUGxfWXZWQXhLQVRTTlZMeWF1RFpwZVdUVjkzV1hSYzFzOE1rM2t6LTRRc3MtQ3g0c1hKQ1dqd2pxd2RRMnZwZ3lFVElwM2pjbHpYanVRVEZPZENodTI5MmhSMFY4ajYtbUNna0xTTFZWejFDTFVYUk9UZ0hia0Z6bnhycl9WbXkyT1A5ZDlRMHF3WkJ3cE5JeGt5VFZNYmdDZk1sbUd5eU4tODI4d3F1MnlUaC10MEhCQWx3QUI5LWpFSzNSYWZ3TjE0NzFnY1Vzc2gxNURnYmVMSk42ZmxRTDlYVGdVMzNTdWVfX0luSzM1RU9Rb2o3Q3E0amV0OEdjQ1ZrcFF0LXVWYjlLT0tQUkZlVTZHWThGM0p6dkV4aGVBSkdXSUFxQWR0OHZwS2d0WUJMeG1SSjdldGt2XzRvWm81bEFfMjBEbkxqX1FPbVd4cWx0cExKQ0xoVzg1UzBUYzRZNjFMQWxjY0hIbjl1c3BrMTZZX3ZlNU9pTVZ1OVFRMUlpZHYtck9uc1NSVXZINUpMQVlfdHVHQllDdTNQVDYwcUxoTE51VFF4S0FnbDNIdVU2QVh6VmxwS25QN3hrWWMwd2hsSjFNYS15QjA5Ym5CdDNXdkdicEJzemZCVWV5VGwzejR3OWtaV0xhZGs5NUJkemVUNTVpSVVjTnZtbDA1RDRHWlU0MFk0Vm5Xa2hSNWFEUDd3cjFYclRRaGlDdnhFY1dJcnRhaXhtT1QyclFTUGgxcDZVb1piWXJhSFlnY1dPQmNfMTZqTlRMMjh2azVDT3VaWjljeHJQODB2MVVIOGxWUjJUV0FVd2FGdVctU2d2Ri12eDlyUms3a2lHX1Yta3A1X0VGXzhIeWxxVUFqRGdyZ2U2S3I5ZTlURDYtZjVtZlZPZWNyWHIwQWZhdkY4U2x6ajN5ZkxFSEp6aHJ1SFNmSFpPWE1ZR0U1bXhyc0lOc0xiZnNpOTRKSWdCVXJtSUNvTHhZSmU3c01aaE9FZjZPaWp5di1ELVBlVlplUVBRZ0pndUw1MWw3dVFMUFF4RzdxaWlDYnZ0RC1tX2x3UjVGSG9VZ2hiSi1nMDY1V3BaV3hMdHBfNmhLdzJNSXRBWE9YSXdTeVJMT2JaQUhHeDV0ZHdtMkxLUVFTbDktal9iSFkwaXd0aDdWTEdrTUVmZmhDZ0NNYmFvaWlVMUlxeXRmNTVUTGpVQ1lQUC1GazZqT01SMlhiUnJsRzg1aVRZbEhlTGVHM0F5SnNwQmxFSTBIX3Jla3FNeUNRN3NXTmVoNUZQUTh0Zi1HZGdaeVZobXV5Y1BLTE5IQTkzTWxTcXY2em13WkUyWTNFREZJWENJV2ZkdnFHazdrN09tekZubXBZeDlqaDdOSUVWWi03ZWdfS3ZHT1NYRVR0bTJLWGhKeWNWN0pFM0dSSWdhTVUzZDZpOUVobkRGRHNRU0Jrc2lRTVlVaG9qVEQ2ZnFGeGdrQU1JOTJTZlB1czlrSTUwR2JTS2Nfd3hBN1Q2UEZMTHl3OTJubUhmTDliejZqNFN5WkpERkZIeC1sM3lycmpRRXhVQklsV25UUEV3WmYwYjcxbGhyYmNRVEF3dGF0VmtZT3RGT2dXaGJ4NTYtRVF3cldWdmhxel9HVkNRbzF6UDVsOTlFaS1HU3pBemlWT2NVdnAwMllFcTVUZ09Kc3ZuRVZscjNnbzNEQzF5Z1g3XzYzcXduYjloVjRJeVRNR09tQ3NGTXVtQU1jUHFzd055X3o0Zm1Kd1M1YzgtWXNmdGNtWEh0Q0ZKeUJWcmdmaktINzNlSVdHeWZwazdaXy1XSm0wQm83cE4xVk02d3g5elBFMUYwQ0hrNDNjd2xMb3Q1bFdFSkdiaVZSSFQ2ZVdYZUxBMGtEbUx4NmtoWDh2Y090TUlkX09CRktOZU9kNHVUQ1JDUkpuVGkxZGxqVnM3NEljWlZHUUNldUdWTkJSa0tFLXhIN3QyYy1GT1hpcFBleVIwaV9kYU9qb1EyMFpxZGdjVFB0RTJfRnF5SFExWVM1VzRqc0JvSGpfMXdiNU1OamZUbkRma1ctR1BkLVBUYXdOQ3RnWUsyNDhuVXZxUWRna3MxQXNQaklpSmpVQ2lya0YtTURJV1BGUXlUcnh5VVRlYUdCZjRYUGREVWZCeHVWeTVxODcxNVhYMUsxbjl5bl92QXdLMVZaY0pZbl9wSmVGd1ZCUHRZZ1ZYRjdmdS1SWXBrWG81SEtEN0J6RHJsdS1yOExMYW9iWUFmdjlldjhrazhIRER5dnlHWEtZTlNZYUNTaGRxUERkUjFzOW9iVzdKOUM5dndJb3RHYmp1eGlRSDQwSnB4eWtqZnZ3UEJpRmRybHR1NjR6aXI3cC1reHhRdWxMZTB1NXVNRlR4S1MxblI3azQ2MTg1TmlfMWlDeGxWTVFndFF3VXJkVUhaZklhUUJyRWhNWFJLNURXTXRFUEpnZXZuT255bmVKZF9GTUQ5ZEpKWXNseVpicjF0QVhUQnI1ZWRxYVZRdjMya2RlbHJ0eF9obGhmTzVsa2pkVDFGNjl0T1BjTERTQm9PWU5oME5EaUFSM3dQYUJNSHhsRmVsckllZW1WeFYwR0I2RTNnNWNyVnJjRnNHZ3VGdWQ1X0tocTloSW4xZWtOZGI4TFZ5MmFGaGI0NjNpYjByOUJFanlBVU5uNGNnOVYyWXFzeW9FaHNNVUVmNkhhT2VhMGhKenZtR1dZTGE4YXNnbFY1b1lBQVdsNU40cVVhemZLbGJadDZNMlEtWGNEQTRYOUFXVE5TQ1lZcWRDMk9FRnN4WkxoTnVzbl9TWjZKRXY3NUE5azcySWNDSnV0WEtFSmFOb0tVcUItS0pUUnpENndYZUk5ZnJhM1VhNVFaZC13aFczRFNQcE9JUXNSX2dMN0dYdENXZnRHdWgwQlJUTjAwbEJuUG03MUNNaTl1MmFiMUJwNnl6WVRFQmRINFBXWWlhdEVHTEc4dXdrYmhEdGp3d180YWVCOWRnT0pwR1IyVGpMaVY3WGlfNEpsSEtTeGZQNjdkYkl1OE9xcGQtM2t1TEpzVy1tWEtoUDBIWnJqamFNM2Q2dGVUN3ZTNHR3NG1KOHBfZkNlUWFDTTRMLXh6N3JjRVJucXh5Zl80MW9jRk8tQ0xHTml1eUJrLUVCTEpJeTJPbzRlb3JndFBqWEwzNG5scDlMYmdrUVhXWU9ZSmRCeXp5MWswaGFjVk9wd1R4NlJnRlFaNTNZRlVJeHdMZWhXVXllSHpqTlVGLTBBZU9VNE1oVFZIZ3VsX3pEbTZnOWkwUENaU1E5M210bXBHV1c4YXk3S2NpTjdydDRxdXhNc2ltRFVaRlpBZDNWN3BDdUtIZ1o2dDJBdEVOSnNFbzR1LVVteXd0NV9vWjFFWnk5TFNrdGE2Y0t6VEl6dEU3am1SYk5JLW1xRWc0cVdDUTNtMjlWRHlzTHZXNktQT2FfeVNhV2V5V1hCOU1fOXJ4T1VZMUpYS1lTcmt4eEVZZ3VjWGp3ME9XRVQyMTM1SHg0Z2huQ3RfR09yRTBwTFBnWUFrVFNrdHNJUlJDRTVxMUZmQ0ZpdzctcnRLWGNwcjhMaUl2WDdWSG9Kbm9aYmVoUXlVbVpCREhUVXVpZ3Y4eHY0Yi1MVW1YY2M5X1AyallVajdCMjlLWW1HTlFtUTFzbkhWUUFfTVU0NXJRbHdqcEYwUHc2SmdoMFJLT0ttNGh4emVPbG1EVUJabzZ3eDhjdjJZVUhYakY5aTJ3X0VSR25uT0VPSHMwTUVNcTVoLWRfTmZiSlZ6aTJycjZxSFhvZHJXVXFJZ0c2WUlMWFJzRFZKRmFLalpPRXQ3TUVQOU1MbUhPV25VV0t4ZGF0NFBfSGtEcG5ydkhRandDeDlIY2JYTUhGU1FFVldKQzl5U09vdFpRemdTNzNwdE5CSE10TkVUd3BBdHRmeFR6NmM4Q2dvRXdIeVFTNmd5TElNZzViaV9fOElrcUFHMVZza3pJNllhR3JBaDZ2Umx2a2NUQzYwVHJwRDA4T1g4eEotTWZySlhNZkN5TDkwdERQbUtRdERvaVc5UHFpQldpeFlsR1JEak1wNGVLTF83UC13ZG04LUgzNi1OVFV3VWxrM2lER0RPa0x3X1NaYzhJXzRRcXhJTVpNNGNSRU1JY2VPa3dqU0JQQzFjRTVnc01HSEZ0b1ItdTVvWE5zUllvZUJ1WFdpbzBmeEFvVHlSU01fSjkxNmJ5ZktJWTNvS2hYVllxSjlYbjZmbENNM1VvdjRja0hEcmxScW5OQUcwOHdHUEVYR3k4SkVqQWpwMXVubzYzOUZpU3ZKeHQ5T2s0eWNDd3V2c1R6TGRCNVZJcUtqdHBrSGNFc1hMVVBsVkpuMnRjVUZheDQ1aEIxRF95Z3VsNTI0Uk9DazIxaVNrX3ZpSTBwbm96Z2Y4NUJ6LXh2RktETkN3LTRqUnp0Yi1lMjMyMlV4UVpLTERmTWtpOVJmVTRad0tHcktBbUtjdTFhX0tQTFMtMF9DQzFQbkY4WVlGS25scF9kQnJoTDFMOGQ0dGZfbXJGYW50TG9zTmVkUmlsQXJhSHA5MjFPa29va1RLNnNJQ2t0ekVHaHpNdXlEbmxzckJ5Ykg4VDBnUXh5THJmOHRKd2IxenN3V3hMQUZ3b1dzbm1UYnFXMkJ5VlowQkduSjllck5YaTBUdzBPd1lMX1dVZm5hYlRBbzlyWkhGR3BQdXJ0bGZ0bk50bzh0aThVaUxFN2dKcFhodkQzRUk0UHlIS25sRGptc0xyaUtFYmcwY19rZ2s1dDdMVUM3d2dGYTZnMkZfZEpqTXJXMUtPTFhXU0JEdGs4MXNJa1R2a2UxSWV3MXFLOVVEazJGN0RsZHNocVhoclQ4NGpxQkhoNjBkR3ZtMmtJWkhsUjNvTXB3X1FvMTd6THBlc1VvbXRGeUZjWGY1blN3ZG9OcHVWekNWaS1PVGJKaURLV2xiX3JEczhYdHpxX2pCMUtXcWxSYWlwUGt3T3RTU1J6NkJXbTdOSmFzemh0RV9wQ3VkMnVBRGNUa3BqejVKR1ZUVmUzdlN2N1M0eWdCMldRRWk2dHNlN091amVIV3lHVE55MU1ZR2dXOXVER2U4Q3FwZU1fM2NWbWhVUEE2anpVR1RQRE56MEVETnZTaHJBYTk4eGZITzZZVXJpbk02bWlyZ2xtWkxDV05TcDhKUjBzc3JJTU9DOTFfbEwtNHo2Y2FINGt0cXFvMEh4MmpTOEhsdllUUGR2Sk5jSHBJWGRGNlFMYzZRcGhxcFVWaWh5cjlPVWY1YUtvMldlVlJUX2c1WUt4TFpsbnQ3M2Flc2NNR21ORE9fUWM5cUNibGNOdlRfeDNlcEducTZOLVBSVVdrOGFiYVVWUnZBMjFOOERIUlAzT1FoQlJ3WkhkamJYVUpwN2lxNWJDQ3RKNFNiNjhpdVFfN2hnQUpkdVJKYktMMVdRZUM4UzVpclpyOGF0UGV4d212X3h2WDFybnFYSEtMQ0dDQlJFZWpWWVN4bE1wdExWRmQ2cWk0TlJGSk1PTl9JNV82Y3RsR1BrRmxaWUxsYklBb3BTc0tGOWJkcmp1T05HalV1eWpnX0dwUE96cjlHWThkT2lEZl9VN202VmJFTTlaRDhqcUwwUnVrSktaT0hKYVhuTGhBR2ZtR2Y3dGk5ZzdhWVRBQ0Njcm5yVDdwa0ZoYU83NGFSakwxWThCemJPWjRCRWlRcWhJY21ZSHV1bFBLQ1VLR0xkM2dfMms4cl9ibFl2aENHVDk1OHlZc1VXZ1FzRVVmbzg5VEY4V0w2TDl3ajluZGF5dC1vclF6YTZYb1MwQVI4Ty1UdWZoUzE1YWRvaHdNZGd4MExtY1pzU2JNbGQ5WVJ1dDVOakp6WHR2VTdENWI3MjVBM1FkZU1hcng5SmlFQlVlWW5qU0hiZEYyR0d2Z2VHTndoTWlzUDJjbkl2dEdVZWstcFRWUE1hTHRSSTVBZEl2bDNTYThJamR0ZUhxM2VKV3VIYmpWcEpCUlhJcy11OVMySFFXcld2WUJqcGg3RjBfNjZxM0lvdzhPZ1IwZXg3Zng2S0lEMzlqTXNpOGtXQ1lBbkJkb3hWQTJWLVAzd3ZKWS1xVW5wMFo5S0hHSUNFNmtGQTl0dVd0a2ZTTFFNczh5a0IzR2VsREppdDlhbTFvWWN6NVUteW1HZnFIOGlQaTRJS3pFLW9NYzNjVTY0SS1xa2ZQZjY2WnNuNkNJaXJrcUVybXA5MFd0dTBieEppUi03dXFMeXF1b2lyRUxuVlp1ZnZidi1udVRnVHpKeS1RQ3JGUGlCMUJ5ME4yY1p4ZE9WSkhZYmRTSmxSVWVrS09zR0lZN3RDdFVoUlhacXZxSUI2eU1ZSU1nT0kxTjlzYjhzWE4wbDB4a19XNVJHU3ZPM3p5aHYtRlFJcDlKZFlydTNmVElqbktMSEd6UU5GVGszeHFON3pXUFBINmoyT2JHX1B3WGV0amQ2NEw0NlhmT3dERW4zVFpYd1NacmhCaW5ZUkFGZktxaS1GSWZ5bkFJbXNuRXBwdWJrZ0pHc2ZtWGdLTFdKY01uLU1KLUpJRms4TzlmYlMzd3J2RzY2NmtWQlZoSDBJS2N2azhxWHZzVE9UekprbTJsRHNEbHRpTlQ1Wjd6YkZuTjJTbUliNmRLd2hKNnRNRVhZbVhZd0xuUjB6dEN6cjFjVzZEYmRHa3BTMHhXVzd4MUJRZFBjV1haeHU5UjNSMnFtZGZLQTBNa1Y0Y2wtTkQ3cm9HZzh0S3l6UW5OU2lIQWZhc2FQSDM5eHNNd3NESHJVUlY3ZEFBaUd0dHlwZXE5dENxU1BJRHhwZy1qLVpzbzlVNFZUZnlLNUg4eUplR19rS1hHLUVkZHlmUVh5ZHV2UVdfRTBNTEdnWk5EU2RFR2hQTXk3b1M4TjZyMjdkd2tocDluTUJyRGVKNVVtWW1DeTEwdTZnMk1FNkd6QmhqNVc0N3JET2dvT3JwSmRRN1UxdUhVVUw5ckE1VjJWSU5NN1l0RFEwX1pkSy1PWmQ0NXJQSDdvbGxOS0VIS2dmeUhjZDlOdHYxbU9xcHZDN2lzcjk5cktfUWlrQXpkakZZWlctS2xkWDMyYXQyNGhCNF9YSlVYSXBjbGlSQUI1Vm8yQWtqOXl2X09GcGVDVGdGU1hjY0podm1hdGo4VXl1a3hFeXpwSjNIdG80UHRHT1dOSjRkSEtnaTBNeUEwV0hzLVlManVwcjhTeUhpTVVLZFdTelBVaHlFWEVGVVJMY2MyWlllMzhTczJmWnZrVUpScldfY1hXa1g5VnlkYk1OLVJTYllpTElETm1BLlFFQnpIUFFsS0R2Vy1GRWxOU0oxWnc"}'
    +    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLm5EN3B4UVh5OXJPcFAxZlBzMGxQTUUybmdrRkE1dEpTTGlXdTA2aHR3cjNWVlZqcVFySEJxVl8wZ1JuWHFnQUZXWUpsNmQzckRfOUdYTTBDREU1WGYtQk1IRHVBSVpYcnlJU1FmcklqSTZCeTZEUExVX0FFa3R4bWsxUWswVmRzRk1nTVpjYlVIYm16WFR3amxFZnp2SXQzY212MkI1cll1UnpJVmRXdDUzZTVDSGFiRjJkSnFuRmdTZHFIOHVhQ2xLZGVhNlNCemI2OGJNSzg5YmZCWmdxSlZJM09lZ1BvQ19ZcnhyOEhYQWVnR2RtTEd3b3ExX1hLYmRHb2ZMSFhVR2laWk9MY0p2ckpEVkpsNVRGMnNxY3hzRXJ6Q09faFF2WDk0blJlM3Jic0p5RzZ0b1phS1lhWW10anQtb0UtdkRqejhxRXFwcDhGS0JXbnRSYlZjZy55ZXp6QzRWX2pkSVNjWlM4UWNXWHpRLm43aXcxVVU1TDg0MWlPRlJ1S1dmMzgtc3Bxd1pQRE1ZR19hcW12VGFJay1NSDMxX1lsV3hqZnFLc0xfV05nS2xmZy1zYkpsZ2d6R1Znd1ZYNHp0ZnpqLWVJeEo3UVRJRXRLdHBrc2ZzdDBiXzFsRFhZSTV6bU5xMnkzSXJadnhweXNyY2VuQkVSZ0F0WmFiS2xuWlhCVE1LX21OWHpoamZlY1o5RFNTa2pMUGZzVDZXYzl1eHJ1M25YQ0R3ci1RYldzSTczc1VIYUNmQVhUSm4zZy0zQVhXTnFfamVaV2hZS3h6YV81UGhkSGZtXzQzdXlPR3Q1N2FyYUZjdWd2bm5JUHlseXZyRDNyWGJ0akJaUEhVSjF2bk0yaE1YX1NfV1JyS09CYzRlMDdiaW1pZ1FlWVdYQS13X2ZvUy01T25tcjlVUEhYZ1NmOGV3V3NIT01IYjVKM3VDR1ozN3BtaENFUGtiS0xpMW9waEgyWkNFWGsweDhwelp5ekN3ZzBORHEyM1UzNXBiVnBzd01PSWNDQjJWbFVtYjBhcXh4Mk5EeGVXX1hkRzRRTFRfYjZ3R3VLT2hETlkydHQxeWtkcm40Z2Ixb2U4STh2bXd0dXJiTzQ1aHdFb1J1SFdnRmhqc2xzWXVWbWt0WDNyV2JRSGJFMHpfZmtpdWg3WXFuLUJTWWV6d2FLSWc2Z2RMYXZtQUVDWE1iVEpoVk5YMmxyOC1iX3dnQzdOSDIzZy1oQTJSZ040aEh4RXpGUWFJb1BTVVpYa09tOHJ3UEtEcUFFOGFQYkJFTDNadmlhQXc1bFNBQlNyRHJMOHAyRm83SXoyelNVQWxRWWVVeE1pajRCc05kRk04YjRJWThjZWJ1XzNCeUdWYXYyQnZMMWVCekt2RmU0RXBrU3FZMXhJTjM4cllZOVRhYnJfckJ0X1J5eHpiSGZUUnpLNC1JU1pDZjFKbzQwXzA5VTI0bUhXMllnZUc5UzdsRzR4TUUzcmZ5akVFaHB1RlRMVHRkT2o2VFRvS2t6MlFZTkxRVTBxQ3o0OVNGSHBEWGxZaW9zZk1meVdaOHhNMHJGbnpiUU11MHV5TUN5YlotQ3QwTW1JajlPbXdSMVY0eFZaWjFhRk1FanRhRWdRWmQwVnE1LXlDSE1lZmg3cjJ2Qm9VQS1QdDFpcnVHLVJVZUY1M2VmLV9MZkpxYWdIbVhwTlA2cW9QMVpXZkRPSXNFMkFIcmxXZ3JORVlHdmdTRlc2X2hZc3lrQ09GemJKcUsyVmU0dHhodHpaY3U5Q19tTkRHYlBiMWNQbDJUVURMVDY5TnNxS2d0a1V4SEQ5RFl0ZXRoeE1URVV4TUpYZ29xdllrWFhoeTZoaUtJMVZKUE1yN0RXYlNWeEM0c2VvUU82MGp1RGp1VzZHRmkzYUpFZklNY3NBOG04bHJITV9ZdFNGYlBVa01tMkRVTG91UmNMQ2tJOUFmaXBvVzNXUEZiSVJ6dXNFd3l5ZlppNTdHN180QlNHWjcyQWlwRnFRZnA2SjBRaFRUWVVnMzI3anpTWnpGdGxHT3dPUUFmYVlTalJBMEdvOTRhLVlVVjFJNlJDM3RJZGhucHd4cDlpS3lZMFpsSmV1TXg0dC1mcE9pQlo4QUplaUhMRFhZVjVCTTVBTmVOM0FRcUNBS0Z1VDI3YWZzVWs2NnpsRDBuYk5KNGZOb2ExXzgzSmNOR2hyMFJ0VGhQY0hjeWwxTmE1Nm9PeHFpbk5sNzhOdF92SVlpZmt4SElJM1Q3MUVDVVRncW52YnF0SjZ1SWNJRl8xTzg3ZVBZSlpqLS14UEs4ZGxsLXZNYjJrTTBIZUF0b0t3eFNXdVJJMzE2LTlXOWwwYlFiWlBXQnhkQTdrcDN5OUZjMzNXM2ZKVGpJX2l4V1lqSFdiWWhESG5zNVZEQlJXNE80cE0xMFQ3NU13aWdCZ1RHMkJrYmNRVkhQSTJVbTg5NlN6NFFUS1N6SVI1RXdUS1lpWFUxb3g0VXlkcUUyMGJuVGtDcFRyeUhTbFRpWFc0dXNlajBFX0FDblVvT1dXclV4MUp0Z0t0cWhjYm5mS0s3VUxyTUN2NGFuOHI3S0Qza3pWU3NBWENyY2NuYnRUMEVQTUVZNy05cHVSdDU4WFhRWTNabno1UXItRVVPYWc1RDVNQy1Nbl9pUE5QejlPOS03R041QWxPdWF2VFZsMUpmakhwNkU3S1dUQWlpdWc4RFYwRlVtcjBMMmI1YTVEYUZ2aW56cFpkN0J4ZTRnbmlTeWZZcmVJRjlyVVF5M0xWNFJlWTg0Q3FWbXhoZUhEcld1enNYR2hCMXp4QUhjamVvSjNoak13N0pJRi0xR3dFN0QxbUdKRXF0cDQwZWxWbWp5V1N3aV8zTFgzSnRIclJPSk4yTFlXVkE2em1EMGRtaDdYWVF6bjg5UjRNZVRDazZNa3FKeHZVakx1bHlta296WEV4UGM5NDlqcXJERlh4dHFrZnM3Y0U0cm50M3kzV3Rqc1gwbjBIQnY2NzVzdHhxNU5PeUxSaFoxQWl0MDFMM1lFUTRWMUYybTZJWUpNdkFZNXJaZXA5cU5YSExwOTkyTW1MS2NFbEFZZFVCVGo5NkFBTV82UjlwblFjTmR1c3VhUlBENURlUE5BbHdnQTZET000OHV3VTFLZWhyTWVBQ29XSTVFeFcwQnh2TWNHcXNmQlhldVM2V0FxWHJucmRIUThTUlE0ZlNkV2RmQktTcXpiVVhnX0ZXRGpkbDJSVHloRzRQLTlHaXFKX0RtbEUtSk81dFVYTUY1ZFVqNlh0cHR2anYtTUkySFNRTVV1UGNfWUNoOVFmUGNzdmFlUERXbjA4eVk4LTdUTkl4YUVvbTgzanRIOWJ5ZnZLVnRrT3VXWG1xaWZtNm50SmhPRWtNSk5SY0VQU0pIMGJfaFlScUZDdTJDN05xNWRaVEwwSTFkSjNpVTEzMzBXX1c0N2U4SGtEWVhFOUR5RXRFLUFGLUt6akUyaFRzR1pnaG5LT09wRnpFV1BVVEdJWmhFLWNXbUdkSUE5bTgyRTZKS29LdjYxbERwRTdtNnZBX1ZYTGRqSl8tOEtidjZEcXZBcVJaQ3JpMVp2Y3hfdW4tcEtpRy16c3BmdW13WWtja0VEVWJGZjZCSlhDSndsckMydzFsYzQ2Y01nLXFLXzh5Rm1zNVhweUtuNDB2UXpZTUFHQW41Tm9fRk5DbTZ6SGFXWWN5VXg4N1BEV0dXS3RsZlhjQXFadUFZZHlsTE9DRUdQYzdhNnYyM2plaHN6MnRpbktsdTc0MDYzcjJDQkttNmVNelhpZU9uUmFyZDBXLUxSYTFQakliOW81Wlo3QW8tbmhpazRMZjNmY2RCVnBMZjRmTFNSZVZHeTdFdktoSlhsOHZJWFF4WFhzV2RhbXF5djhBVUhyNUt0aDAwZVV1WXpaNmM3elVpblVpelJwZWdkVnU1QlV2aEJ5cWhjTUVKeURnZlBUaW9WUnB2ZHA1aUQyVGtqVEU2REd2Y2ZLd3pSeVBuMHBZRFpSNVpTM3ZZZXRSLXF1U3BZT3pOV2Faa0JaTnhlVmY2b0wxRGotaEdNZGtRZDJORnR0VlhqWnNBMWI4ZjhhcmJVSTlBcFI2ZmpvcWIxMzEwRVhmU0xpQ0tWS0s4ZEVpX1l2ZzI1Ukh2LUY0UGJJalRGZUs3b2pnakx4MTlBZDhCWXd4SlMzQ3hzbFh3ZkNjaTdlWGtXa1hCb3k3RjE1alhyVE9Ydk95QlV6c21VaGdKVDlGYjVQYndoU3BYMnE5ZW5Hb1l2WFMzU0RhUkdiU1hZN1lHWXc4azM2eFBZVnJGTENtMzlCR2R0Zlc2QUZJWUZFWEZsUWs2bUdiT1p2ZXNoVDUzd2JqWGFQcTF2NUNQUWtwclBMZjFTV1d6cTlJeS1kbTQwT2xBbDFBeVA3M3BaYnBGRzlnZkxCTVI4cWd5M1oyTm5TdV9xY3pxOVRmQkd2SkFtckJTaHVyX19FMG1xM0MtdUg3MVpKYVJ4Ql9SeTQ2YUk2NF8xa2NxdnZkLWZPalItOGxzWHpReEtWR3pMMFlPQk51aXViREVjZGhObHd5Y0pmOW5rRENpV2dVbDEtRlNybEVRRzRJcEZtd2ptWUI1RVBYZmJyRzduNFdNT2Y0dTdtSGh3ZG5tQlQwMnlWNVNYRlptR2tTbG14ejMzSGt3Z1ZkNzVJSWh3NzNnMjdHWFRSUmNZb3FlVlU5MEdOaE5XbzZ4OE9LbHdIRnFGRUxUSm9KOGpiWmNtOU9ROUgxWndNMFRGUEZyRTlGN3VKQmI0elUxb25jdlVuSlBjVUxWN3V5UktOaWNhdWROSllyTU95U1EzcEhjVG1yQUhPdm5URHUtVDUyUHdOWm9NQUxDb0VxSUVmdEl3VFZCOGZpblg1X2gzSGowNko1cHgzbXFHRkJOR2Fua1owcTJ2dTRjTmJnTHhYQ2Y2S3IzaURWVUJObVRWd0NVOWRiYUZ3bkhmNG5FY0Z0RFNmNTl3a2ZSZGJXa0M4VkxUT3FGaWt2aThVZjZGWXRMRk1KdUNtU01GR0VsYmtCM083RloyYnh1dmMyT193azdaN3JQZUIxYlZjN202emtfdXJsS19QSkE2RkVHdkUxNi1jT3ZYUVMzS0xUUXRyX3JPOHA3WHBGZER2bHNweG5nNFRITWZldTRvbWFnRUw5T0steTBVQUF6X3IzTmVjNEZ3VWp5bXNiMzZ0QS1fcnZOR1oyeHpSaTctMnZqazhlT3B3eWpvdVNaY3ZBekZuOFRqRzJwWVhEaVRBWFlPMWs0b3JwVzc5dDk2N0ZBM0lXTHQ0bkJkNm1ERmd2YXY5R0ZNeE84NXBHMTlTSUx0Nk1XcmdSOFpLcGlNNVBVV0ZTb2xidzdSdU4yV0tMR21VTDcyV0I2SmNKTkgxVnJpejV0c3NjSDgxWGpibWtqZlBxeHo5WW5jUDl4eW53dFN4RllmZU5icUw5dUFmWkpVY3VyV1NlWGZtQ09nT181VUZNeHRlRUFGZ2VzSW9meEc1VFp6dll3RlNGVTRvN1V0T2llU3RFNUpzUGlzcFFZMmJLUE1nb2RpQ014UmdES3p3eVZxX2kyV0R3MjdCX0JhVWE4a0w1WnlZRlM0bF9lNzdQRmtlX1g1MmhIR1hSU2g5LWRYMWs0YkRfNURNMERzZ0doa1Z0dHlRSENyY2F3Vm5Va3FPZ2hGVWZJc0NrbzJsN2ZJUzZIczlTN2dJMVNhNGxNNS16ZHdrUnRJQ1kwa1lKVFhDU0pLZDdBeEJRTXBlaHIwWHBhb0IxeVlnRVBIRnhKWWVZRzVRMEZqNXlmYjFweXp4R1JKNVJPY3NEMjhycVozTFZaTlUtZ1FOWVFnTFVFRWs0SHNJN1JLb243alpwQ0RJRG9JbmJKd2piUWJiOFZidDctWk1sNnc1OHp2TFdDYTcwM1ZPM00xNkIyeFgweXNTLW9GZFRQQjA4U2tHalc0YXZxc1RZWU4zZThLQWtQaklCZ0Nwa29qbHhMRHRmREhhMHpaSk9ILTlSZ1hQdjlUcjhWTEVNajNFYWR2QmttOGU2RUNIR3BYVW5FNVdOUnVfRV9PTXYwZzZadExnZmtUenhBRFotb19ia2t6TWl1RC1Pa1VYSUR4aFhjZDFHd2M2emJSenBhWHpWTmhrcktZUWZBQTdZaHAwbjFVQWNlZFRqOF9EY0ZoeE9sVENyRDhSMmFXLThUQkwtR1l6a1hxczVqd0FibTNVemM0TXMyN0x3T1NUUnU2dG1Ocmg0SnE5UTJiNFJEem5qejY1aG5sOFJSYmxsSVY3Tm5oQ292aW1SUHhaWkZHaEJzXzk3YmFoR0R2bmVSWW1TSEV0bU9FbGwwZ2NKT0c1OUVJRVBtMkZyMGE4X01rcWIwMThOSTRuUjc2a3VJZVpsaGxxUjFWLUtCRU1ZNVVSY0pEUFBoRWtJa1NUb285blFsUmJkLVVGeDRfdlUwUWp0d2ZnM2hONTViaF9zSU1VVURhcDViNFhFaUJiTnVGb1Z6cm5NRWRJTEhVcVpaMXRhR2FUTHE4TU5DQUw0SEtkTnpoUkdjcmRhT3dWdXl3b0YxUnVXYWkwU2VhUWo1aThoYlRyWm1QOUlmeHluOEtQVUI1Z2E0VlB5WlVSQVc3MlAzd01XenpZYnBUMi14bUNCTXRralpPR28zSUZGUFZVTFAwWHd1RHprcVlpMjVPcXRXQVFnazJxR0JqdXg5VHpxSmJKYnM5Z3JxTGxPb2RyVXQzbzVYV251SWNVTmhsN1ZYRUR6UlpZQkt5Zzh2YXR2NjJSUGxhMDVTeVY5YTBLdUkyLWZOMGJhUmlpb2d2ellLaUVTanRKZVFfNGgwY2l0Tld4LWltV3h4LVAzZ25uYmt3WjJiNGVnSWdGcUkyWXE1alpjUzhZeUZPMkZjSGNzWnhHMU00eGlpM2hBNVRsU3BlczdWRkhLa3JMYXlpb05zcE0yeWVEUlZLelJJUEl6U19xVlhXbWtpZUM1b1B5anYyX182MC1ub3JKeWFuSkNRa0xIeE5UcVRTb3N5RV9qVXBWZThPNzRzOXVMY0NFbmUwZkV0V1M5MzcyeXVOdmNWR2tKUHRzaG45WUNoV3NoRWMwVkZoX1o1Z1lRWDZhZEpXOFcwMGZ0ZGNxUUVPd3dsQlM2ejBfd0NkZ2piRnN0QWRkTmU3eUJzcXJ0emNLNG5mVmM1R0FhUk9Id2dKbHRRNkN6MkFJUGE5TUZ1bEJHTmJNTUdKcHZWcVJwMXFiTnRNaGwxTUhzN1lJc2Y0YjQxeU5uU2pWNG1mV19TVmJJcGQwNlBhTGlOX2hZdF80bXdFV1c3TTIwX3lseEhkNVMxS3BtN09pYWNLcFBHdWtFd0NKZFNYZll5TjVfOUUwT01wTjI3cGN6VkhkSzV3dlNfaTg0RjNvTDZQYmdjckMtSDBNYVUtTXpOblVidzNwOVRVbUhwYWtyQzdTd1pXQ09UWTFoOUJIcHVfMXI2TmZab1ZjWHVzYVRJb195VDVYeUpTU0lvTHVuVFhNM3BBZ01SNU1QZmVhN0ZBUkFibF9YM0dIQndDbmF0dnpDak4yNWhwSmgwbnFPUXRaazNNT0pucFB0YmdTc2dCSkExSUE1eVdPUG0xQlFsMHlOdm1JOUJRZXh6T0RYRENUY3NYeWMwMlRjcHlvRWUzQzhOUGFKZVlpZXc2aVFrVTJxcGJSVlU5RkwyTy05czQ5MTlRd254eEhJVXU0X293cU01RUZPaHAxN09uVF9hajRUQnJQWFZIRHBNeVo5V2cxY2JkNHY4MjZtTkVoRHNGRExVdDFNRko4bTN6bURxSV9DVS1wMUhQWmhkT2VDMjBzdVE5SjNSLTFZczRpN1dsNEkzdXhYSTFKQU4zX3NVR3dad1dHWTR0ZDkzY3hveEZ4ZlQtWnNhVXpsdEladlVFT21wNHAxTEdWOFBQaVY5NDJvR1RINlQzUmdDTkc2V205cHl4bWJ3MUtxLTlPdHY1UzBrbU9tRXhOZkwtY1NlRmR5Wk9KZ1U4OEZQaDZaLW9CeUhVanp0bWhHMGZHVmRULWVWMTN1dXJ6aHo3d0hYSFhDR2pqSXh0dkJmdkV6ZXdaNDVVSkhjMWp1VHhLMTYtdncxRTZ0N3BObThKQ0JiMk5zdkFQT2pSem13Y1ViZTFQMlpFdXA3SFNkV0VFY3lnSC1iTnlmQlp5WHF6YlR0bUxSNEhJUlU3dGd5MGk1STg4VmtabzRYVGVvenBlZmQzWTMzcVZEM0dzbGJ5NE16Q3VUd184T01KQ3N6RGFxdlJoZ1h4ZDlDcTg3bFJLRkZrZHB4Y1FwMWM3QS11NUNTTXV5N2FlTlNDNG80eUxNclJ0Y2tUeFpaWG1tU0t3aHgwcE1BQXFOTEtYYTI5eDFkTHltMXdqVV9Cemp4dkZDWFAyOXZXOFZOdy1udFhtRG5nX0VhWm5HVV9yY2lQZTR2VHVCTlhLSDNZeDBUZ0FNbV9IQU5zMmdOT3NOelVaRnRFVWg3ZklwZ1BtNGlNT19pMnhpQ2JqaFpHUDJUdXE2SlpRZVZMTzM5am5UX1BDdTNCR3RPeGdvUC1pbzZhaDRDVHBMMUJnOS1HWnFINGVpbHJ1aHBTelAyYUhkWFNMc0hLVGI4RU1NTWRlWlQ0djBuc2VLRGIzdFQtRkp5SS1qM0hqRWNHV1BKRkUtM2J5eTlYd0J3ekotUkZxWmpsUlJZRktuY2VzMEJIVFA5dFpQQi1FbUtWMUtBdW9SbUxqU0ZTTENsdkRGMDVSX0hYWDB5VmVyRXdSZERRSklkcDZMUkhQU1Uxamd3WW9rUTB3Wnk1VTV5SVlabWFNZnFMVGhlYmNwX0JEUFI3Y3BGWEVrQnNJU0N3Wk1waFdyQmxIdmRYaVdTUEZ6M3hPdnppcU1lcjhLUGhzX3F6TmtnT28yYU9lbG1oWXlFMU56dVI3aTdMVXVyWXpvZjdaUmZPSXhxLWdCNG5oVHFXZFhTMFd2SW5jeDRaNXZRX2JySUVCaXQ5NS01aTJUZXg0R0tYLTlfZ19GUGVRWjhpaHFWRmZqTmhSa2ZLVTdCaEhPRUhRNHVITEd4M0otZG9aVFBIZ0VibVdHZzBmMkJKT0hMNHRmc0g0c1lzM3NzNVFSdGNOSWJ5VWJQNTRJN0FzV0FfWHVpWnpBSW8yQ3gwX1R4VUtzbzRRZjEySGtOSVJtaXlXTkFJV2UzTmo0V0E1Vzc2RVZHWlVteTJpS1NSNXdFenVDZHgtemkyWlJiN3JvaHh3bEw1aHFNWlEzd29PZzhJLWRyTkxyd1RNQU9JRS1CcVhyWXc1dzBBWjRIeXZWQlRRQVZTMGl2RTNpbHNIWll2RHZjSlg1dV9xU3FQYVpUdW1heDFPVkl5VmZsYlMzcUxrLUZPSlNjRF91MWlkTWI0ZU5Ic3pJZmxUSlBFUVUzREQ4Q3BTclpRZVROZ2JHNUp4cDlsUDJBLXB1LU9qajNuZDg5QzJRdEZrVnBrSF95NFF5c0lUNVRmWjJpbFFVMFBhZzFIOHhlbzBKU2J4NGM1c3NvVFFUQVVjTjZrajRPVGFVb04tWEw4dzN1enFFejNDc1JmdE9qRnJwMHRvbFFRQWcyWVR2dzBuNVo4WmNwZkFoRnhlNlZyckNNUG4yV3VXc1g1X3ZWRnExd2VCODY0Q3dmelpIeGlqOEhOUWE4VWJVVG1TeTJVdURVRnNsWGtoN1dPOXNWN2p4aHRYRlp4d3BVd2I0OGZSOFFPU3B0UEtZMTdFQkV6OG5Ld2JVMWxGNW1PaU5DVnl3QTc3M3gxQ0xKYWJjQmlGa181ZnhtWC1mam5IaXVyaDRBYUNKdUFTXzJZVFAwY0dQdXBybHo4WVdMSXZDMWQ3WlZUWUFobU9CVTBiMDh6dHZqWGo0NWEyUkMtcW5OaG9TTXNqdTZhdjNxc0ZTU3ZPeFR3Zy1reGh4aV9CaDhYaGhqZ0dwSGNya1E2Wm5OMElyc1hFOVllVm1FYjJReUJHcjVhWDV6NmRJR3NDWUtDSmZFcHI1ek0wb1RzbnhVRkVZTUR5MnF5aS1WaW9zS1ltQXdNRF9kT29nTmQ2d3dLcVUtdk1USTVrandVSkMxSHFiX25kT2w5MkFoUG1SQ0tTUW9iTUVoX1R0ZUJBVjVwWEZyb211QnJUZ01KYmpNVE1mOVcwNHYzcUFGVU1jUUZlQTlkVXA0TENyOEVjVkpTRElRRlFXU3VCdTFXYlZoQTMwb3dvSHdaLVVLdTFxSGo0Zjd0TTcxcGRIcDJpN3Fmc21rSDdfM0wyS3dINlNXcE8yMllXMm1wdl9lUXU5aDYzS2hxajg2VG9DcXM2azN2Vnl0OUdOYkZaOEdhbzRsekRYODBiWXBrTDRBUEU3MVo1aFNaNUF1ZGg5ZklnZERINXBsTFBzWldKZUhFZEY3ZnZES05WVmZiQlFja0dES1RqYmZYY0RBQjZJTjRqUEJ2bnFUS2VIN0dqRnZSOHBoMG9CQVRub0lLU2JMWVRBNGE3dHFfTmFsdXNaNGpkLWpyUVk1eGhiSkV6YWZab0MzLVB0Y3QtcGMxcks1dGhkY09XakdBcjhUTFZndlpudE1IM3p6OFZ1Vms5YmtTNmoxWDk1SlMwMHRsbDI2OW0tYmVHMktjcGtSVHdSZDIxcndIWC1QTUpNTDJKMTRQN2VuYWtqWk1jb2ptcTZTQnZxbk1CUUJNMkdiTHZnaFJDRGx4Sm1kUEszMGwtamxKX211cF9JbWJKNE5uYjJnRXprZDU0bUhkb1ZkT2VoN2JaWHNUTnBPRnFPM21Pc3VfT0t1V1NZSTNSYnVSTEkyQ0NZaVhiN0tudUJZWUI4bjNEQWlySzhzWTFfYnJwcE05RVYyMmd4NWpoTjBNMVhVSU1XMlVnMGxFQnBIVUNUTmlCYVhjcmVBMzkxSWdhbDhwazFpaHpwMHVlUzh2ZXh1Ym1DcjduNDZSdU43UmNhQ00wQ0V0ZmZ4WmE3Q1FKR2NBYllBaVI0TmdCNzJORG44eDUyRkVCVnluSXJqNUhOUl81aVQ4bmE0MkZuay1lZFhHeDdHX0czSmpBVzl3WWxtMHRtSWI0SnM4dkFxV2JJS01EbTVKZ1hiSnY4MlRvb2d5RTYwcGlsU280MzBkN1hZNFBQelhGY3pEcF8xbjBFLUxDbWp5SUVTaTlFZlcyVmxZbFY1Y3p4VUZnTnpaUHF4YzBvQmI0eTE4WUlZU0tMRjdBUFBnZVZiVElDZk40MjhBRTF5QzFLT2hIaGZWdDd6eUVNakpBNHBRbXB5bGgwbncwUFp4Wk10UzV6VzBqUHRiU0NsOXRuLWc4d1NQZVRNZ1FmaDg4bkxTWG92blZoNjFsSjlyS05VOGZXNW9GR3h2MWFlNHRWc0xmMVIwRG5VV1dhb1d4ZHRVMk8ycklVQnc3SUdFVVlwaEJ3aTl4eHptY1pQUFMtRkk3YUtvb1Nka2xiOWFKNHdHZmZweVpIVFhyZlh3SUhmZjRVT0pvYWRXTkdTX0JZWnNOQlNoc0o5dUtJaUN0bzllN1U2OEQ3N2QzdUc2eE9Fa2ZzWEtzNXdGY016WWtHU18yQUNpQVdmVVg3TTZHVjU4SFd5SWdJeE1Nd2dyaGpWUU9tN1dtcUdqRW56MDdWcjRHT0NWQ29YTE13OW9DU3ozaEtiVnRNWFo1R1ZwX196NjEzeGEwZmpSV0h5RjV1X2FDUmZFSkl2ZVNxb2F6RVZVeFdjVE9fYzIwS0pVaVNNT0JCWUdrTGowZmwtNDJDSkF3LUxaZWJhejBFSHh4T2R0QnpFaUFUOFlzTlpPNkk0ZWpOWnJ2MC1CMTFKVkgxRGRkaGtMb1J6WlcxMnlnWm14SF8ybm5GTjZWMHdMTEl1c0lER2tJeVg1M1lTZU9udW8wWkpzbldpV0J1NElLWmE2ZGd6MjNKRVdCZnB3cTc5NWRmT2pyY1hFZkJUdnhyR0Z0TS0zM05wMzBiOFRmOGtlU21xVUZmTnE0QTJ2ZUYtY0ZVVTYyN1lUOGs0NmJMcmFseHpJNlRLMkhvNndyY1FQazYzV0E0RmxBQlQ4Tzg2Nm9HOFBNaS1CNkhrSzdYZ1FwczZEajFWc1Vac0RzZHh1SlRVa2F2b2JKd2ZsOEVWeTB3TWtDeVdUbEQ5MVFVVERDY0hnanpfNGtPQTRfU2ZNdktISkxTSzhzeGdBSEt4ODYwcFVLZlBEX19BM2dMS3FJd3ZraWZob3BFa0xtamRmVWdaSFJvcGp2WHc0a1VEU2s0LWlDalV2TXdVVFhCYW5jVU5wa1BDY29RZDJhRGl5VWNzc0xYTkQwV05Mc1RHaWxjejRCV0J3anBTalhnWlBKVDlPWlFmX0RLZUs5cGJVLUlyWEUxaTgzNkNsbUhNRVZwemlfQ0paa05uc2NQWHRyUHJqY2JnT2dYRnpGZnNtSkNXc0xnNEJlaEpyeHhEbGF0azlUTklTQmtTVjNuYnFDM21JMUg1d0djZzFVd2RVQWRtTGdPNHRmbThBNktqU2hRNVpXMzBHRHU3dG1SZWNpRDRQZ1Y3UUFHd3ZxYUQ1S1JPZ1BKV2RlMGhxUWtjY1BjbDY3OUNpY21JY2tOckpCNUYwaE1acnk5d0RUdmVRNlBBWjNRSlRDUnBqWG9TbGU4MzdoR25fYWxFS1k1bThxNHV0NVdtTUxmMnh3LXhCSTE5ck40bGtXOEgzYkNIYXVjaGdLZldFNUloSkdBWWlNYlhKeElxOWw3d1o5aXBjaE4xQXJ1c2NfQzB0d0RQU0hna1hxc2Z1RE9kbngtOE4wakZFdjMxNG5oLUhpM1FuSkpPSXlCLXY1ZmJIUUtVRnl2WjhUR1BsOERmc2tNX29sVk96M01qZHlEVXc3T3R3cHdseDFldlduQkNSblBFQi1ONS1MUEZUQXRpYTRJbWVWSDZ1d2xOc2dtWGNRXzk5RDRIYzJYVDNQN1lzT2YxTDJxQUk5U1FQbmpLYk12ckIwelJMTlhNOVk1ZDZTeEQtcUY4RVZRZ0VNVHh6YkwwQUVfRnhHSXZaS1U5YkNZbHdlUm8weWVTRXM3cGRERGNKbzgyalJpdDJacmYzYU1kZUNUM3poTTJkMjlsaXZJeTg3OXBrZ21WQ2ZMZ1gzU2xDZXJBaTYtSnpUdWVjTUx4NnZEUkhvRjRRNGotejJ0NFdvVk5qdGUzdS1ObGhDYXExQ19uS3M2cWxsVERJMTBodGpnYWdOODJsNlZWQ2lyYk1CcktCWmRQUjJiMVBEcmJ4dWZWNnRPRUJwRWVmV2dQb0gtVFVoUVhyQ1hpMWd2d1NReE5EZzY1T3JRQjItc2xuVGpGRTZxMEVwVm82aG1QMDdRRXVyZDI4dGx1MjZxckN5V0Q0Z3NYNHJfUWRqb2ljZDlRZjFHQ0E0VWFjc19yVmhjZTkwakhneko5U09LWHhMdzlIOHQ0WXZyaU96RXc4YUdPaWxXUEVNWXc1dzM5dTI5V1ZMRXdhT0paRm85SFhSUDNBTXBuWUcwWGRZakR6Y1JMZEtWX0oxTjlKUjNkdjNqdDFLb3JuV3pIWGZJUEZyREJHakpPMm5WMkZtTDNjYkg4QjgxdVhyS005UVRLdUtkYzk3UTdZdndsNlpDbTlKN3FPTG8wTFpWRURST2tORHpsdnZ4TXFkVTJ2aEVOc2t3bzFDQ25hbTdPZERhb1F5NS1VY2JzaE5uaFFvQW42VjJlcUpDUUs5M1BLZkpSOVJuTHU4aWRpbzdKLWVxMGU0OEpaQm5LNk56enRqSlB1dktOdDhLR1BIVDJPanVtUlJ4YzVRWFVCcmdmek1pMmEtcGxrUHEycWdSM3RhTEs5ZFdYc2dacnZtTEE0dXhKY09RVWtPN2JvaWhJalR6TWk1MUtxZkRQUTZlZk9NWTBMZkdNSWViMERrNnRyOU12V1hxTWdMSmV3aXFOQ0xiVjJJWVZIdXlRU2R2OUZhekQ3QmFTZmZVSTZ3SVlqUDZzYWNEeFhzQVhjV1NvODhhbVkxTEEwNlU3ZUJ5ZVlHXzM5R1FkbFluX1NRQ3F3dlk2M2hWSi1MaS0tM25oMkdzU01rZFJIclg4QnQ4bUJwT195T2F3SmtISWl5UWhxaU00NHZWcHVVc1dpbnY2UTdzX0JXeE5KbFJTSEUtZ0huNnV6LTN1cTJUSVdMWVMxeGM4MkRneWFob0dZOHllb0JHR1NISTM4ZVBYMWRiMjZaRzFVV0xSbXJDVW5zTjVWY0dtZk9tZ2h6Z1dJaURnNTM5NGlGd2hlSllFajVULTNJZnR4TUx4N0tnZng4MVlRbEdsa2FpNV9OeFFsYmVDVjl6bld0ZXRCdy1BSklwTFZTM1VmVXM1TTIxSGlfLUt5Qkt4WnduWnJzMTgxYm84SEs3OU5TOWJuWmxRSXRKXzNDUS1WajNqeHJMVzJWemF4V3dSemFyaVpDQnAzNXRqMXhmM29hSC1nNmY0NFpET1JIajY1OTVPaHJBTUQwY3dyU25ZVUVqaUZ5WjFDbEZaVkUtLVZLSExiSGhyRWJwQUliMGxyaHJxWTRsN2JPMEZMbnBQdV9vaGQ4MEFZQlhCbTJwSklQa2JpM2M3Q2QtWExUSjRndDNjNU1CMzlXUzNVWDFveFowWGttYzRJdUUyWGxhM2VzSGZGRmdsQU5fZFJqV0lZRmlIcUtoMXRIMjdPNG9NRkJnYWo2LUowbTctZkM2bzZQRUJJSUJiTHdWWm4xUmozcWVQMjg4Skg1RnlodTVBREM4bVlGVUcwUnZWX2VJZ2Jod0VnckJwdmp6X2t6Vmp5NUpqWEpGOTNFQjdIY2ptWjktekRzNUdpRFo5ejc3WWxJR0R5em9sMXoxSDNRbGl2aTJaNVk1UlpQeDlIRjMwU1BLTU9PeWVYeE9iMm5fTEV5Yk0yMWRkWnlzTE1rQTBVMDcxYnlCQkVyTVhpbkh5MXBXSlYwSVd3ajhIMWpBcXgxbVJFWlFjenRJRXpSeExva19qZ2hTS3dxdVlsaUxWTl8yN1pNY1RjWkVtQXh1WGI5VlhjOHZlWXNISFhxMU8xajU0R09vUGY3aEdvdXJ4cFROVTRfLTBUaTZURXl2bVU1d09FOWZZMkFOTUdVdDgzMndLNHBKZjVaWVhtWXVuek9XTnZHNUxzUm1NQk1FeGNqT0NUU0xxajFEZjhnWmtXdW9tdlB1aTNuTWFPUU9ueEhnVk91bTZYbWNxLVh4Z0hnNHJsc08yUWR4MlVkZ1hGM1FtTElBVDRxR1g1QWtGNEdlOXRlS0VuaW1Lb1lZVi1aYVJBZUE1b21xSUFLNlR0Ui0wM0VLcVVWYlpnSll2ejhrVEdPajhRZVhGRUdmRmhxNEZXbDU0X3lncFVsLWVCYUJ3VU1vNEhKenVnekMxcmpHYXNENU9pZ2xRM181ZnpyMmVIcENuNTdLY3hka0g2Qks0UnJlaTNlR3JCWlJkY0F0azFvb1RUd0JQUF80Nm5IVkR2Z0NOSU52TThHZ21BdEtaamw4MmlzWG1hZnAzOTRIRHRqVHotUnR1YmM2dEtFYXJaZG5JVmRZQko5SlFLRXFuRi1kb0FmR3FPdFo5aGJUUnVfZGR0RTg4a0pGeG9KRW9hb0drSEZWaW5Fa1lxc0JMLThjSEc3VGl4WjFnU3YwV3hRODBpbXY2blNPdGlwUkw0RWFDQ21BRFdyTElJeFNLZTEtTm8yemljRkR4WVY5TDB3S3NGZk11S20zanJIZ2hFajNQSzBiazhna2d6QmRCYklkSGk2MzZIN3A4S2NLa0Y2c0tpeG5KaGRIajB5dmdBaWwzWFZfUU9sdHFvSnZZblMxc2dUb1ZNaGt1el8xWGl2Ym5hN2xIbS1jWjJydWg2WnFqLWRBa1M0d3lCd25hN1pRNUFnek5YX2dJV3JpZmp3U29PR19VRWJtWXJrdEdDOEVjX29qQ3JKN1RWM2Z6R2N5X082amMyOG8weENETUdRb29hUE8zZWN0dTRJWHV5ZHRTREhJR0JSRmpoTjBhYmhYN1NfaUxKZ1RzV1h4TzNBQV9RM1ZucnBqd0tTZVhUbkFfdWRRWUNYQmlRZDQ0eWR6aThTZ25xOW5zckpDckp0eGJfVk1tMTJFd2xxUkViX3RKaXptUktXSnNoa2F6UHFBLVJBN3doT3NkZ0VFbk9YdDFTQmkwM0E5OVZsR1VvdVdSNGwwSFpYZEpvYk81TVlQN29vaTlKU01HSldIZm1MdHdGbGJwMS1KblM5d3pxaktPODI5NFdibVF6VFp5RUMwMlpMc2ZpYVFUTkdzcG9mc1FGQUIxSExyZzJuMUlxeng1SUJBTWNaRzRNY0FYSjFRelp6NWVHSnlYYkF0c1lFQUZXZEdZXzhUbUw5MkdRSk8yZ1E4cWpWVHdhS0dYVDMwX01rQ0dzTDhrUjZzQUZBS3NJV2o0V1JKWW9Ca2x0T3BWeGFjMGRfNzQ4T01FVVJlRmc5djJhakRPdVZqblV3cFFQeVdvYXFmanB6a2ZXM25DblJoTmpYNWpRdVp2d3pWRGhydUZBMWhxcmx6b2xiTGphdXhjTzZ5Q1ZzMkJvY2FKdG1hZFRfSHBveWFXaS1hbzZXRFJ2OVl4QkYyb3BIdU1RT3ZmV3Njb2w5SmVENzdpWkUwLXl2aF94ZXktSi1EZVBRb2dOU2FPNkJsLVZqT0l2Z3R5aXo3NFhPMF96TmpSNWlMVTVxNVpMSnlHQTNLaEtsUUdmU1JNSWN5cGVPUlNvYndlbWNIMDRBRmlFZUhnLXlqMG8tWDk2UEU2MjdqRXk2UUp4S09TQV9kcDBXNkN4NXpMQXJseGhHU2RvYWYxZ01iVmZPTFdhdXdwMGdpRGFXWFRCdzFITUlSX2lCcjRjaGtJR1NjLWozR1pGVlZlbHM5VjVpcTZkUnZwMGFOS1ljYUF1RXZab2ZPamo2VElta3ZUWVY1cWNIUHg5Z3pkWmwzSEN5Q05HQ2NNdXpFWk5MOHVLa0w4ai1tR1BHcnpSTWdXSnotV29ydFlYQWNzbktqai10QU1yckM5U09EZnhZWVlWWTVJVWhIeE5OcUZRWnFDdmhqZ05oUFZseVNpVG5BOThsUnU0YUFVc19udHBnaUEtNFZlMDBpSC00UTJMbl9odTdtVHV4dXNETExOUzhOVjdhY3VyUHBGRGxxdW9NZzg5MjNwLUY1S2RGWHpxN2pkWGpnSXpkeVFfMVpyaE56UzRJcU9SYl8tVUhScWlNNkZ1Mm15cFY1aWE5eGJqVWNQQ2FuSDRvbjdMU3ZlT0hrYkV3NmZKSFlhcnhvYTg5bEZFOUxrRUNSN2w5R1ZkSTZWdGpRWi1PZjJaY0xmd1RmbWRQYzFia0R5YWZNUkI2Z1FrM1lTaDA1QmVCaG1zSE1lOWwxOGxiamx0dGstcnNMc3VXR21KV2VsM0hBcHJXQXBiNm1KV3hrcm8wcmJGa2R2MW4wSVFmNnNLRFRySm1MYlU4cUJiNUpfUEpEWU1iRzZabFdrQXl1MWw2LWZhYThpaWxMQnk2M0dfMklhQUFtRWNnaHh2ajNMc2xZdGxiVnRkdGNRbG9zZzdJOHUzTUxFT3U3RVNZejZOcWFhWGc1V3NxNmROc2xxTEtmVWs4eHhCdFJHY1ZuSDJLTC1za1hZLUxNWnhaeHpZSWpvZExELWZxc04zVS16WUhNX1VXSXBXVmRvamd2cm5TenV3NUdyV3NmTk1QZVd1bUdLN2lRQzQ5Nnhka2JrMkgwQlVxV1NNSDd1OW1ZUFY5b1Q2aGFOemUzX2NaSU1KbnhNSXA5MjI4cERiZm11UHRXdkF6YXdhVzdQaWJlZHdaUVNIN1dRV3JfTVVDbk5VQS0ybG5KeDBLTjIwZVNCbzdhVHNnNzQ5aEN2U2RjZ2x1cG5FcENzb05WS3pNSkVCb2pkay1saUp2SDVhMDdZN21iam5xZzF2YnQ5RndzUHluaXJSVUdlV09xaGFueGotaThRNHFDVy10VFpIbFdwRHp5VVhUMV9PbDhoM3RTSVh6NnQyTDZYdFhfLVo3aGdOX1V2dHJjelh6VXg5clNVNFdQckI3TmtwZFloUEFTeXZiN0tLTGJ6cGg3YXlSQTZ1YWVZdjN2T2c1dFV2T0RVbG1naVBVSE1sT3pha2NSTlZzUC1pdTBjTE1PU3NRU29aUmUyRVNNcmN4YXVTb1lfMHQ5SXVvM2p6ZU1rQkFaR21pSFR4Y3N5bFViYWV0RXY2eENJRmdxNHN5N2VRaTdwbmQxSEw1UG9ZamVNdmVkWExWUF81bzhGYW44a2ZFN0dDaUtrVFFXNW5Xc1l3Wmt5bUk4VExoQ2hPaWNUN25uT0JTOVFXWUwyUFpHa0RCbmFDR3FvQy1hZHVodmZ6S1M2QUVoWGVOemlOWEJwSUs4d1lrOXlzRkpCY0FUU0xVZGZPM1dWQmc5VVMwOE5QazFOZk0tVnRIU2tPYVZ1WlpURldrSXhKR201TDZlYVpsUk13OTZNOXphME9RU0NSSk9sSGdPQlpYOGZ0SkRMV0VjSUZ5VkFLb3hUVlozeGlPczYzYzlodVE1aHlPYlNwUEtDYjJscHVPQl94M1psR1pWTzJJVmdwRF9KVkRkUDA5V0JBNGY1UlpacC1uRkl0d1JTS25sa3dTcDBuUUhkbF9nZDE4TVowZDZGZFhQTDZyZHdqV0tCbGUyX2QxT0hNUnNsZDFuS2FKZGRYaW5KaGZ0SjZlekJiYjdSWlRSNVRidmwtRWNmT1RjdUc4ektFbEdrcXZON2R6cHF5VHFkTnVlVXVYbVhrNEsxYUoxazFEY0VndTZsMktVcDNTYnYwczJBeGl5QzY5SWxjRHFVdG5BUGRtVkZya1NkSmhOaW1tSlRvamFOVHlYUDdFeG9lWlBmNFhsTFpCdFozcVR4VnpGQVc2NkFPSHBYQlhnRDUxdjc3aXFCRjNKaDczckZ3V2V4N1RZOTF3TVJxbUxXVGZBV3hMNWNVbXRVVzliNnBzbDg5bmJtSVJWLUVybHVyTUludlZZNGpySkNBVHlkQlhaQktKeTI2OC1zM1JmbDh4V2V2dzA5TU9ubU55Q1RkMDUwZmdjZ2ZtMGRfaEcxTU1PUGQ0WFRMUGNPbzR0TTVHNm1FcVNneE8zc25qeW5zT2JwaHREYzMtY20tNW5WR0xTYUhja3JpTnRCdDlrMU1maWRrTHdtWVNRUWJpbWVfOF9iTjl0TmJxNm9NczZSOE9BRVlfOWh4SEI1U0xTT1NNWHo2OTR0TzJNZDNfTVdUN1JyM1dPX0dmUVlvY2ZRZVpwSlZJYjNBT1gwQlI1SVBRMi1HRDIyUzBqZTdXN1g4WHBrWmYtQVZxR2Fpanh2VV8ySWlRaDY2enBOQmFOUW9PNFJzZGRGTXN2aktlYUJmSi10S0Q1a1liTnBHMTFRTkpjZlFFR3ctTjZyTXVETjlfeTJ5czF0d3pKMlVoZnlJWFN0dzBRQS03Qkl1WDVfc1VUeWpvVE9CY01lMFVJT0NUR2poRDFncDJKU3JUZDlBX1l0c29QRllsZlE1bUw2YXpSWmpRaFpRTU1CdW15UElwMTFWbzZxNHJhT2xWSzVYeTE0T25WR2l4NGNzc1JFU0EzX0d3cUhpWUwwZVppZ2EzZFhiTkV1X1NkQkFUUTZrcV9nNUR2Q2RkRWN3YU9mc0Q0U0sxXzgxNldmbloxTUttUGdiNjF4Q0VwV04zT25jOFdMQW1fMUNXNWlSVnl4Y0h5TWxlVWVqRFBhTmNmRnZiaWFOX1l1ZDhLZTFRMWYtQWNCSzRZUzdsZFlzdER2aEphWnNERktuNmVIQUc3Q1p0OFlJeEhveDh0Z1FhTmZuaFZhcHFUazQ2dlVuUFZBVVo2LVhSS2xMSXFmYTlPamVONzFFQ3NjWDJQakZqVGVUYW0wRU9ZMFpObkw5QWhxVldwTFR3OFVuM2hMNmVUZE1CMjI4TGlTOFhpb2ZfMkVrQUZNSElPUWtEaGo4THd2N1FVcHJjTGF3SnpIR21ZU1M0eXJJYnFYd2xfN21Gak4xQzJnbFctU1hHZTJJSEZ2VUJJUFY4S1FNOVZDWXVvMmFaVGtCRlNWQ0drWUVXNWRXcVIwdFhOblRvYk01VTRQTjQ1cUtaNGVUTktaemdEQ2p3cDNsTU51cHE1UjNRYTZEa08zdWU5ZXdWcDhnSUNvUnl4UHFnYkMySWZRTVd0NWt6UUw4eW1raWlfdTNHWDZBdVlCeGpsY3JOWkFGU2lOaHJRaEwyZjlZY3REUTVib21feTRLbDNlUXNQQWo2X21wUExoR2hYX2szSXNSdWRfME9Ed1h6UTFKeEVTa2RIbmZWSVJ1VW80U1JHMUFTaEt1U0k5ekFlX21pc1NzU0ZqTEprOWhKTTU1WlZtWkR1ZEQ3bTZYZkxVZUFqTkJidGNzdjhQczJBV1dfMlM5SGM1emsxNkp2Z1BDWFRzNXpWWFJBOVY2ekFoNGpXVTItSVgyamlIUXJodGFZR1U5aDNvbklWVmRhV1ZVeFhycFhTbzJ2Mkg0TV9ncUJTYTdRTTJoSkNQRmlDejd0Yk5Cd09GTWxlS0V2SDBKSFkzOVFfYWwtNlRTTElsWkZ6d0x1Vmg5ZndRZlRJU0pHLVJ3MU9aSGgwdXdWd2haNV93NWNjdHNJczdXZlZfcUFIMjdEU0RMRXpWcm95Tld1cks1NDVCc2R0OHJPb2NpTy1BMy1FWnpRU3N6ZmlsT3lrTWVxU3FxV0txXzVoQkVtbFdBaExqaWlxaFhRVzZTVm5Wck1UMXZEeFNJMWVjT29kd2NSRWNCOXgtMlJFLVFqYlhpT3VkbWtzajRhbloyWnpXT2lhVVFyb3hlUC1XMWs0YjlRMy0tamZsdVo0UWhPQlRzMjVxdjFwSENHS015RTUxZUlQQnhfMVZMZTRoRk1BcW9TaUUzaGc0OGtReGh2Y3g1eHJremlqaF9vTklHQTJXZG1mOGNWSVlHN2hoY1FiLWFkbmQ0Sml5WktKMW5ZakFIb09nMkNmZGFFS2lSdkNTbXZSYURyaGdGNDc0am5lUmN6M0RyMnZWbU84MXBMMm8zVVZpN3dvel9pM1pWUnBOZzhoQWhhY292MGFvLWotdDh6djI0d3d6cmJQY2JJNi1hTHVjVmR5MklFckxlaFU0cTZQQ2Z5T1VIbklqWW03bTNMRlJNQ0Q4akxIZW9fVWt3bmVqeGl6NkstWGQtZEhHTW1WYjNMV09EMVpRRUtYYVhWMzRqZGFaMEduWVRsQmN0OFhBblpCc21BandMN3dCZVpnWklpT1k3TW9DMXRJRWpiSDBSSlo1WEF0M0ZQZlREeEFaQnQxWXBiMkt0VDlXdXZlbkloRjdiWm5CMVBuSkZ2QVM2STU2SGNJM1g4MGtLTDU0TWVDaWN5b05KTlp2RTZaT1hBdERtaHBKenFvRnhRbktmN3RfWTdKREtzWUJGcTlIaU9DV0l5bFBNRGFhWUlITkJvbkd4TEZNVFQ0VDhfeXl0dHFDRmpSMHdwWFRibmNxUHpod2RLUkE0WXhRSG80SFZqSVhEZzZIc1NxUk1mTFh3WFAxZE95bXlfMlZFTkNtRWkwRTRTbklpeldIeUkwN19tdmJtWHZMbWN5SzAybElXbmdUZzNyRmU0aVBJZUJ5cmRMNktycldiZnF6ZTZDVnM5RVlFb3hDc0NFNnB3UjJ3bjdoS0hQV1pRVHAxVExjVXhvcGl0blZ4MzExeUhCeWFJZTEwekxuVGZkOFJRbV9UckZoWXFzanZuYlJzXzUxcWxrblFUb3pzNVY3dlRiQnozbUVVRkZ5V1dDbTRKZjhhbnpyYnFiMGIyWi1xX1RGTEFueUxBamViYk9WaGlWQk9kdGV5UjFqVlRQWGlYeE9aSTlNMGwtcVFjcVhDc25hLXNOVEpEa0xPWVlFazZfeTdNMlpMV1R6SXlrdkxKVjcwVWtORWlXdnpQalplaThQS1d5YzJwZHlreG1YTUM2aU1JWjJPMS1wVk51Y01wRjlRZnNrejlNS2ZweUJiS19TelVlTS1sbTNFYVZUMDlGR2Z0ZFBrYjVxbWdLRzVBS3R0Snpsb2dXcFQ5akVoYUhrU0NhS21WVjROZklzbUdiT2tLSG5lY2doM2xhMjhra1pZV0l3VUQ2NzRwZ082clVFMjJwczJlN011YlpZMG5sT3c5WXQzOHJOZWNXaUVGdHpyay0yZlJrSWktTThtdktYbWg4c0tHeUNaQ2J4aExfYXR0NTdqczRPdnV4WFI4VS1YMjRfR3dteEpJc2Fjc2NyV3JDRHpfYlFCNk5kaE1kVnFQYTNnaFB5V001ZXEtdWRSMjFjWGtVaFFTNEZUbnlzVV9LSFppUHNkUnU1ZlAzay04c1U4NlFQZzVPaEpITlZib0JHMFNhaHBTSFVLaVp0NEpqTWkzbWtnbERTWjUwLUEydzVFVGd2Q25WY25GTmhNZEJQTXdpelJPNXVHbFdSS2FvX1AyV0YyRG5YM0FoU2E4eEZSQXZ3N0k2TzRtN255WW5LSXJXdTBJUVljWHp6ZFFmcGZRRWNEUU0tNUdSYWpHdGRZOUJNNDgtUG5VNFktc2o2NXlMSG5xanNia09GQlo3YnBvN1hkWUU2SU5tSGZJUnZXdWZWYmt6Sjl5VHppWUdMMDBhWEVsLVpwNDcyV0VmR3FRWloyY0xmZWNlZzVXUy1RS2xnaXp2RzUwNHVMZTRiOVpUOV9SRmhQYi0xemNXYTk2LUZzY0lxcS1VU0hZbUZ1N0hfMVFWSHJvZHh4MlZyeVFVYWoxV09JYWsyaE9QMzBwUDF5ZzByMUFWTXZzZTJLSXVGUnloT2QzQ0ZCS214N3ZFd0x2NVliYmJSb3B1SDVlMjJVYXhLM1VVTmt5MzRZWEtYdFVlSnVuOFZNZzc0czRHX0FVYmR3ckFuX3NHclBvTUFla3Q3SUozT0RUT083MnA4eUxxX3NjNWpjZ0YxU0JPVGNVRmRRa3drVjUzYlFGb3k2QXZrT0hNemkwM1ZockkxbzkxQnZCOVM0N1VOa1ljMDVTMXhnRTZ6LTBnTGlBWG5WQWM3UmhaLWxjOWJzOU1XY1BMYTRtTzI2emxBVDVHMUFrSWFqQ05rR3FYZlcxcDBlX1d1SG1ad3hTdFBidDh5dDc3R293LXkwUjJwLU1xVVVhNFdGWGZaVEFabVdLV0NPbDF6Z2xydlpIWDVweUVhNnRaZmdiSXdDa25wUEpvN2ZRT3hnRDE2OGp1SThfZ3ZPY3FtblQ1Mm9pY0ZJS3F3eGRMVGxROHl6ZlNHTDM4WnB4b3FBU1hFb19wVTk0Q3dzcTlibzNfaVpSZENDVnNwcC15aUlVcXJUT19jUFNFNWgyMDRkZlhZa3pDVXN4OXN2ZXAyb09KTGUzdTMwX3BSV0phb1hlTFhDR0FkVWMzUU9CZENvamNtd1F4YnBpUmRWZk1naEN2RDZ1U3I3Umx6VzZBejZJYnBteEhBYm83WWNDR2w3MGI3SHhKX3p0dGJTdDYxVnEzbFFDQjdFd0xZTXRKYmZCYUJlR1NpM1Y1bERLTzRPdHlzbnBHOE9VeXNwOUNsbEJfQTJVWmVaaGN2OGQxaGhaYlpGaDBxRks5bUpJY0tfYTd2aU9kQ1k4MG1WbEQ0dW1oZDNVREltQTI1aDV2Mm5nS1psdm5UOThEX3FnVFVDZ1F0ZUV4MW1BUmVOVGxjeXRBZ1lZbklUTVNuVWIzVVNKOTZvNjh4QXU0eVBkbk1xSHhadklUcTgxTWFwS2gwa1VkTF8yUVpUMXFlc2JhYk45THpwWV85VFc0T3BoSTd2ZjhQelFpenBKa25WeURnYlZlYUVObDMtSUdjTC1Janh0UmRCektTSHVBZzN4VF9sYXRIajY2NVRhZ1UxbEo1UEtsbExGcnZZMGpmU0U3QUZXd3kxcjFQYnNVekJDalpGM05YLVVBazhIak1EWmNRWUo5RGhjeVgtY3otTWZFcGdlb3VKMEJKT3FyMFE4RmpxdEF3b193bHc4amhTWkVZSFdkRmhIaWFzQWVPMTZXN25yTGlTYzRBR0pkZHZEMFRVX2wxVkJRQ2hPM2hIYmtLVXBCcklqVjEwQjdWTV8zYXp1cVl4dHB2WW9Fa1diNjNKdlhCS20tNkpybzcwcjNsOTNEOUkwYlJrcy1nV2ZFa3pZTDRNYkV5VW1YVjBHOGdOd2xNcmtqTUZzWUdveDctdUgtdURNM2tvd28xb3lFR0lHWmJFUV9kdU5rMG42U2lTaDRmS1F4SGxCSWhFcTlMaG5wRHJ1UW1yM1BnX3lnWDJWTThFelBLbE1ZcHlkTXZ1UlNVWG5PWlp5YkJEc3VDeVdoVHRweGRyajRYUGhBM0hjUXNvZXc3NUxoT0R3M0w4amRFa1pPVG9mbEhJbjJEa2ZaeTJTanFMUVRFRTg3S0tFYWdvYTlaSUVZTEczTkNlekl4TWRSdUxhMl9DQWlMOEx2bHNRTG5ZOVdhdjloM0V6cUNaaWhjZUQ1ZFBral9yVGxvbjdsbVQ3VjQzNUpwT2tqRVBtMDQ1V1hYLV9BM1RmTVNpdllSQ2pqZkJqQjNNZWRVUG43dmdadDZlMVVJZzFyWVdxUWVwZW5fZXlTSnFISzEzejllQnRXRG5pUGV2Rm0wbm9FOWNtOUNBRmIyU0d1dUMzclotdXNScVhuWFNkR2toUXdIZXEzSnpBYVVPdGdqUk5mdFloVlktUFZ0MEoxdUdsUkdiSVFOTEpLVC1iOThIaWFGbTJ0Z1RqMV8yS3lrTWxSb3VaQzdmU1l5OE5fTU5ydEFYazM3blctLVpFOHJaQVZULTVfODJyN2M0NXNQUGpiSUg5Ymk5VW1rUHpZRlpZUXdwc0s1eTRIbjRQWG1tbzl6TUxqU25JVW5wbkVOZmprUGZBVExCVEpsanR4c1Y0TXE5eUVzSlh3NUZBdnNHNVJibWYyOUFPd2VBd2lIaDJkekN6YWlDdHBRQ1NLUUZMamctcnpDT21qcHNyOHhZT3g0WjZoLTNKTk1aVjQ3N2RyUDYybGlibTVHUzZOVzJuMDZlQTVqbzc3SjJ2SGRuY1h2T000d3J0cUltd2V6QnVsdUhqaHU0RFNaRHBBTkFfN3ZGTWRnbG9tUmFxUTY2V2ZtSVhONnpVeGRiU2YtYkhPQmRVempqSUJUUWxkUzZzRFBNVUYwWUhleFphaGNJY19XVHBCa210bUIxb285Qi1KMm9ia0d0dWxXazZnYjIwdkJfcS11cGpuY21Rd0hxbnNOTjRaQVlYeGJLOGI5UFNocE9KYm1EZnNUR0x2TmF3Z2U0Q2ZOM1RKbnN1XzVSWVgyRFVISnFpVFVxZHFGUzRoNEFPRUhjM1BybmJUN2h6eXlac21weDB5OGZtVTF3ZWVXTWdlMTNDWlNFTjR2aGhqTlNmSUNxcGtIRC1zUTNCRDRXWXF4aV9jS1dEckFUQ1NvSjFWN2ZIVDJHV3Iycmt2SE96a0dNTUdqWHlpUEdZM2trRXBETVo0a3hTVGtRby1yUXIyWmtpSllUOHB0MkRhRDNxMUdtVjRiay04Ti1wSnJNVWgyQk9ONUVOOUF2azJBYUlXSzVQSUVMb1o3SmNDTkNLY0xWYWJjeHE4RlluR0ZXTmM2X3JpeFFwOTVNX0lpSkVkcUVjV0xpazRnNFhsLTJ6QmhQanhZQ1N1Z2RWZUVVVHZpWkdaLThYNDRyUndNbjFDM3FQWlFUN28tNzdwR0VKYm5yLWRlZnJjRnp6QXZVY01Wa2dKc2lfaDI1QVFDZ0JESUdCR0ZpQUNrTFUwMWk5ZVpicmt3cU1mYkh4MGJTMDI3c1B2TDg1Q0hoSE8xajA0WUNfWTBlakZiV01YTzJJc3IyVm01b3JYMWpYRXVZUWRFeUYxTUdpT2QtUlVKM2RqMURGOVBlZVlLcm02X0s1MWZLbnRxdjF2WUhFZDJkQ3NmRkJJOG1IVmpCc1plNDdFRUUtaVpRVnhKdFdrTUNxWTMyYUpMVmZFdGZwOUlnc3A2V1dTSXQ3azItZnFUdURtbzNGNlZ3QTRjX3E4a3FJRjJaWjRHejBOS042MjdJX0Q4Q0NISk1UU29tWGhpQUVfZzFtVko0bWR5MTI5Wm93TEJNVHpnbkJpZUI0eVU5VFpNSFVnaEZCelZHdHRZVGo2bDdHanlSMUNjalNWOGRQUXd6T2Njb1BGLXdYNG5QR2NrcjF2bGNHLWl1ajNVN3dGRGlaRnZlX3ZhSHFSRGFYUEJBVkEzSjI5ZTdIWDRLVlN4ekxmTUdYSkxWQlMwTjJkYnJuVDdkZFZyR1FUVmRPVXZYTzhicmVvVnAwVXRFQ2QzbXlIQnVCQXVnTndaNTh6dGtWU1lRN0VCVzQ1Vzh4UkFIRzR5dGlvcS1KcmhPYnhoMFhpZmU5QThJNzBUekJoX1Qza0RCNFNiR0FEMlBHUkJiTjNkSE9WYWcweEU5aExSejVNOXVsemVLZjhHOGJWMC1tTjhzZlE2Qks1aExaV0RCNlhyNENDR0RQMEJqRmZtMjU1R0JIWWhFMW5tRDNndFR1ZThTZC1OTUFmUGJNTEtJN1g0VllfZk94clJQQzNJQkhCd3V1NTRiTWFTUERrdmhlM2RPeUUzS0VJTklwcWhJWDJLVllFZTRYcTk0S1lxd2JHREVKNDhndHEwVHFHV1pCVXctSVJybTdGVWhSbzU2WVZ0Y0VGOTctTVMxQ0JDLUJPb0VYUWpLWUhtSGx4eWRrdXVJbDFud0VKaXdDMXh0TUJ4bl9mQVZRVDBqektoQ3FHckxTbS12NFNTbWZCeUNlb2hWX0I2LXQxZDh4eWRVR01RRmtBZjY5MXpJUTZPTXlyellndks4ZS1vU0dzbHF2NFRSdUs0Q1ZJaTRTZGVCbEJPb0lHODJzWnNzMlNtYzBuZlcybUZqNlI2OGotQU1GeDBKaUJ0cENPYm5keXdyTTBKQWFuXzY2NnJZM3ZIaF95dDZ5UTdwUDFhMmJEbG1PNTRwQ0twSlU3bkl1RTBlV1N3UzQzYnh4Ul85ZHBiME5WM0J1N3lTNHNuaGdKYV9HOVFIaHZWYXd6UnI5TnhtcWl2NnBicUtXSDlyNzJ4TF9hcms5dW11WGt4REo0NXkyQUNNZUszV0xiTHBVTXFhUEdWSERuOGdMaEtibFNKUk9xM3JmUmo4d0dpY1pqOUFseGtnMEdzN1JQd0dMcF9Vbl9sWWFwdkxBUXNBalBCckhOMlRCNTZEUnNNSXItN04tcGNsS0Fpajl1X1R2Z0xlVlpBVm1BR2ZLRlVPM21Day0xVnBHR19MWnNZX3NPeDdERVRnZDBIeXBxUHh5Sm03cy1wYXFXRXdCUkMwQVpReVhYM3g5cnV4QlNnVzd5SHYtZ2VwLXZVWlIxSjNTMThWbUJtRXFyU25RYzR3RE1oR2M5V1RqY194cW15OEF6MWZDcGxrTGZsTmRxTWdraHFJM19qTTVnSFlIV2dMNnBSS3NvS0Vqa0lUSkh0UDNDUFhxOF9ZdnBEWGJ2b2lvOHdIYnZQMGRLMXRTX1JHdGp1SGJPdmFfVFlWRFJDM1RSR1JtUnpGUExiQnh5cVhvZ3Y1akZfLXpTSnZEdXBUMElxZWJkNHNTM3lGR3UxTHNRU0dZdkFSSWM5cnFaRHVzb2tfQWpQdmxPck53ZnU1X01va0ZjUC0yTzgza2xyZEpaajlLaVF3WnY3bE1URGR2WFpyZDFOZVhST0toR3NuTXFPMWtWVGJLQjJLS25BSC1TZTRHMmZWckszVXlGVkNEZC1Xam04RXRjR05qWlpsNl84WnhYVjVGX0NnY0I0YUVmajI1LVpqU0I1allwSURaNzZySHY4VDZDcktIVU1YWEV1MDZlVVdRWWlVVlJpcGdQblJsbFVYdms4cFFscTZJd2JGWU9UOG5WTG9udTFPRldYdjF4ZUhwdDRWWnhmMm92WHdvbkxzTU45RTA3Z3YzTmpkZks2VDZibWhxZl9HTnJ6eDQzR0VjYkEtZ2tSYURvaldQSld0LWJGV1c4OEhXYmp0THp3Y2pSTG1WeWpJR3p4UTJGTnpzWUgwNXM2TVhKRy1lVXdReVpzVTNOd3B1QUZQd043MGhwYlRrdTlYWmNYM19SZHNabktOdDU0ZDZ3dnptZWZnRTRaQXRyYlp3TGh2Mm8yY1JweWxCMTJEdkp0bzhwS0wxZkduSUZPaUFoYVAzNlRaMTdXV2xUc3I4NTNmWGRwazgtTTFfZHpjdTRNWENjeHZMSlFmb3lXSDZ1R2RFZmtNV3c3MnRwN1BSVmpvT1RqOGVVLXk0R1I3YXpfeUEtZ3JyYVNtMTBld0ZUbzBPTjg2cDg5LXBZNVlSWXExcnZCRUI1WV9wc0NwMGdwLXlfWTdfalEzMmU2Q050UncwNDB1cWxqOE50NEpwWXRyU2pjRHlRdWhXNnFoSVUxZUM3azFxOWdhS1BZWmNJWmxYMEtKeHV4dDRkWGZIT3JVbGJXREdYcHhLbUNNZ2JkelBoblpaMy1uNmJfMnNCSXhrZnpzZjFyaUFZSWplYkxETEVoZ0lXXzhYZ294UHk0VEZCVWtEdExxMHhhU1hNVk5JWm1SNVNXRXBublVHZkZmeC0yeDgwOWlHTzJHdmItRzB6TWdiVU41cFB3d1ZrbmwxVDNrQktOYXNwTTdBa283TmowX29VeU1fa19pSkVMNTVTTXY4X1BMRy0ySWtvVXowbENuVVBNYTgzUXNjbklseVJfd0RCMzNGay1SOXkzbVE1WWZEck5KWHhsSjhVdUd3SXRTSnBsTTIxYlZnTXU1NWRoektBVmRmeGtWT2x6QU9sZkI4dG1GX1ZYam9mWUFTYk5ickJuY1daaktwMUo3UXZUNWJZTXBWeGpwU29seUp3ZklZX3JIU0F2V2dkdG9xc3I4Q1M3cUdVNDF5NGxDSVRMLXowSEM5R0E2YTVWVi1EZXZjNWNGSnpCYUhyeExCRldOc01SZE1mRkZzQ2J0SmhUa256YVpqU19fbWx0NlJXMTI1Zll5WFV4aW5Jc1FlMG9FbC1HZlYxNGZtdFlQS0dERUlxdjhWajhwSnVLazVXSkhJRDlTU3BKcG1XbTRrOVZ3aXZGclJMNXpqTUtUM3BTR3hDb2w4T09GSUwyc2t6OG1MMHhSSFdjakl1T0pyOVVIZ2F6dnFxWUZJZ0R0SlE5NXV3Z0ZFUFFOUEJmWHE2UEtaVkFsazNiMWlZbDdsbzZtRmNNbUxzTWJWcUJHTHViWXhYQi1kaGJDM0YwUmI3Sk9jTl9aVHJTRmV5QWFMQTFwLWp1UWpzX1FpOGVDSHJkcFlZQ0NPZGE0U21ZU1AxaGczU3ZTbzkxcENiX2NRTFlSOEVzUGZwNGRva0ZKcEx6REYyVkRqT1B5QkNucm0wLWloNUo4Y3U3ZUw5SDVKTnowb3RCa2tHYzN6N2QxcGw0M1BtSFZZVXBIMkpoZk5UOVBYVTVlbU1oZGRSMU1mX2N6V3ludFhMVkRqVk40QTdxdWNHVXk1eU9RRFBObkR2OWhjRlpGemZ0b1h3VzRVT1ZuWWIzdmM3N1MxbFhMRU4yU000b2d1clpoWmtQX3dGRnh6OTZ6bVNya1lUWUMyTFUzb1hPMnZTc21Pc3JXS0RvWFhOOXh1TnMxTzkxbEhldXd6WTNyeGF6NV9OSHlGRGtXa2xHYjAzV2NXTndPaVc0MC1VR3BXSWh2VzZjanA5Z0xES1B6NmJUaGVsc09jVC1FczlSREpaZWlLSG9PTklnLXRnZTlIT1R5WFEyd3lkOWlpb2w5UERYelA5bGVQZ09LbGl1N3VSN1JxZF9Ta2tXS2Rrb2FLM09QZ2w0bXJtdzBHRDBYVHIzekpTcnpKWnpac1JrSWI5UnpURm9PbGJxcnRQaGNzR2RTNVRBNk5reTlfcjVJZ0FyX3Q2UkdyXzJkNW9xTE9SdjVMTXh1NFFzM1lPSzFJNHJFaTdMcWx3NGdVLUJSX3cyS09NY3dJRmtzVTZxdGltY1M3bi1sMWpHVDRZM01RdVF2aHFoVG84MEttSHNDTGVtQXhlTEhGS3FzV1NCak5JaUY3NEcyWHFHZkVTaml1bE5KaHJmTEtsVFhxMzBFMFlZN3hxYy1fM002RUcteTBicF93NWlseGx2YzBndm5EczVHUWVseUJuMGdNZTY2V0pSRUdxMXdIQVpta1lib201QmJPYnFoS2ZscnU4cXRjd24tRmttUlRpWFNQWlV3S3VZd3FQWkhlZ2ItMEpiSW5uVXJfTm5vdlYzUGE3ZkJ2ekd6cnZuZVRLUVZUMXJqbUJMdjZMWnFwaTdMWnNvTEZ6bGlCNUJyM1M2anN1a0I2Z3hpcm9CUzFLOTF4eE1Lc2t4MHlXTzdkOFQ2RnRwZ0IyWmQ4bkFoaHJSQ0o5cnh3ZnQ0LUFmQ1UyTUlndzB0bGhwTm8zSDhZb1kxak1pb2Rfenc1eGV1MFFRcnRYd0thSFRKc2ZzR0d4NTNMck05TWkzSmw1VEt1bEd3VkpsWS1DWF9YZmZuRlVtUHIycGdwT3JwODN3MHFGbW5TVVk4VV80akJxOVRpTF9xbGVkRFZpdzd1ZzRTZmNtWmc2c0daSHBENFF5c1o2ZnotVWRZanJlTHl5Z2N4Z2Q0MDRYc3NfWkFENjg4emdxMDNTTlJUenNFSEhmd1RpY1BxcVFRZnh5aXkxWFpSNGpPZTc5OVNjMWF0UVVoendyVUxTWnU0VzNRb2R4cVR1b2VhY0tMYnRMN3lpZFlxcmZyMlU0ekZ0Z0FqVV92N1lFVVBiUV9HZ3FEelI5aXUzVDM4eHlUbXRUUW43QjEzRWI5R2hjWFhfXzJKckZzRVYtQUJnYVlfYklyM0dncjNVZUZndktjSWQ5em1Nb0RydmJoOW1EZ2xlNFdoM0pNeVMxbkZldGZ0OTJJYlpHRVJHX1lKQmRxc2VidzlxdWw2YTJhNFZjTEVJZy04VExiTTg0b2RYSWlxUzNIS01ScEp0Z3IyRGVpOWFKVnZWck5md3N0cWZwdDBoUnhib3REMDMteTZrTmE0QWEtTGZCYjB2SjBXaksxb3hVVE8wTEJiUXdmS0ZTNHQ1UUlhWVlZYk1qUm5weDNLYjVfT1FZN2pwakN6OGItTkVOR1FWX1hZRzV2ekVXck56TEU4M29fODROTEo3ZjBUSlRiSXUxaFN0dVg3SWJReWNmZzVxYjZvMGdybk9UdGx2M1VsMF9ueW10ZWhlN1NoTkVJVVN5SUJZTVNuVFE1b1g5WWV2T2JYQnpUNVRQaXFUY0NzOExSLXU3OUlTU2MyRlZOUGEwVUhzQnlzeC1HODdtd2NBQ1B4aFhxMWxOaFVmS1dWQkVnWVVMTUc1TUVkNFZTcXlKcUVhNjRzRUZ4NF9vNUswZlVXd0tBVjVSelNwaHJ5SE80SHNqQ2V2aDE3MzBENGVNTzN4OTlJN0k1ZXlacE84NHJUOEltZWdJdGkxVDVMN0ZxbHEwSm5wSTdoOFFXTTVsSGdpbExKRGFta0d1cWlGNi13cGtUWGJadTRoeW1palhhVmh0X0w5NjZNY2otd2dWRFFXQnRUd1V4M2lKa2dRZ2J4RkJud2R1VGNYUG5oNVdLMmpBbHlneTJnUTctb19xM2tQS0xYelowTFhOUERnSGdZSzk5SnZsUnpxUmhZOE9PSVpmN1hsSTlQUDNLbk4xSkViaXpnRWR1ZkdMaXl4cTBGdU5sMndMU0V1Q2R6LU0wZ21aNW1LeXJqUExabmoyZHdEU3JsNlY0c1RvVjR1Tkp5SnA3VlQtcXE5OXJPWFV5dDN3VTRaUHExTFd3c2xncXRIeDFrZm1LNFIxSU83czNwR2RCQjRJQnJJMXVlZ2tqdUl4cnduQ3JadVhYeGF6NTdneFdUa0JieWx3NjBDdnVSVF80RzNGNXc0XzJFaWZ5Wng3Y3ZqLVFfclhZU2VVdGJCWkJ2UmdvWkdtbVZvMGtuUFFpWGVJaVE0VkhFdDBPak1GLUVDb3EtUEluUUFITUZHcXhfWlJtNFkxdjVtQUwyZVpVbEhKeS1YSkdZVHhMYVl6SUhxM0M5M3BXdzBFSGJCWjZhekJ2SzQxQ3lKS0VyNUk4Vlh3NTlwUkg5R19jY1pLTDBQQjJvbEVwOEkxSWltZ09FakxIRXBkSldVRF9iWVhnbVhXanByZ0tvTHBWT3gtaFpwNUFBX3kxaTRueHBqdjB1dTZIYWVVY09uSGRSbUxJbl82dmEzV2RjQkhqM2tKX0k0bHVCRVBpY0tfMDc1elRfaEI5MnNsdHJXMDJBcnFIc29QcUp6WW5LUzJjNXVMRjN3U1F6QnByS21oemhFMkpFVG1sQTVSSm9DTTJwTHRSSFZjM3huc2hYOEpBUHUwODRMZzB6M2RZZGZEejdTeFpYRW9ORy1qVE5HVWdLb2x1bUtKRmIycy1LUlNPZFNIVFZJTE1NbjN3bEpYdWZhWVhtU1lvWHJpUG5sZ1REOVBpRHZNQS1uaEY3b2xuY3UyTEEtMlQ0LVphT0wwdkk2TWN3UHhmN25jQzZ2N0dMY2FOTUtjNk5BNUJiVHh4TlJNWHNjNVA0dWhHYkY3anlDQnNZWXhiU1IwT2pOcFJpQV90WnNHMXRXMXVzY0R0NE1nS3BIZmxHOGdyUVpDRUhPdF9PRXpsT0VCeUFtbDFraDE4VVEtUXJYMzlpWVRZTzN6RF9jVjZVczRIdXNqa1Vfa0dvaUV2SVVOdTNNQ25BS1V1MlU3cUt4cWJ2LWk1VlBlaE9WSkNjMWdmSTh5WWp2cVhQRnhmZEFTNlB0cF9vU2QzOFRfT0ZMSmlzX0tlb1Y5NkxDY2Rid1huNjh6Y3RMT3J2ZTdxWU16R3hHZFFUaHFTck9PYUhvSXp0bGNQU0U5UWRWM2pqUUVEc2tRX2twUUdMWWl1UWQ2Qi1naTZYMl9ZUVNnOWJOZlRwT3o4YlFGTDFLTUJaaWlTVnVsS3YxTUt2clNwaW5wZ0ljbW4tdWRjY3NUTDdfSE13dGFjTU5nSDJieG5LVXhmdkRwVHpzSUhueVp2Z2RqT2NxQktiWE9FRXQ0bHZrQjRHQnJMQV90U2Z5N0hXbkJ0Y210S0ZLTkhobTRqRWhtOW9iUS1jdHZvT0ZTSkMyeDdfZWxzbVB2TElZTGRhWVZxcU5LSl9CU3dTaXhGck1PVDZETmxaUmEzTk5DVlk4Q2hBaGdHU1BRRWRHUWN1VzhFVWJBeDJOSi1GdlJ0TWhkZkJJRGUxU1NGbjBTUzBDVDFDM3JJVnU4bDNHV0ZfclI5THhodktxMGVnelVsUnhyOW9xX0ViTTlrVXJXaFRjTk1wSUlXSGsyaUttWWkzd05wTzg1THhFLUhZenB2QllwNjBIOHBtOTgwazdybVByeXBjdEc2cVhTX0tBdUhoVzBxOUl3X2RERng1bjFjVlF0Wl9EYlpQWENXMzFUYW5Remp5TndMdEwtbTJPUE5vOFFjSTJYa2hZRVF2YklqXzNoNXNqN3pRdjZiakxGLXhESnNoZlFydVJjQkIycy1EWHd4QVdybHQ0R2IyRFJvMTBIVzl4REZNcnl1Qi1ucjNtMHpsWUtYRGNoMlVjUU9TSlJNaHd2N2laM0c5blpWcWlfUXBueVZyVVRJUUhiSzZwQXZYNmRicG1uR0ZBQ19YLXl3QzZTLS02TVlSMVB1VkVocTFlT2xwZDJxVnE1Wk03X0p0OFRPa3ZZeklMOFJFMlpUNU9HWGFGSXFzU2pZMlJQWnF1TG1hbmI4b1JMLWI4VGZiZzNlZ0hmbE16QTFuT3hKYjRHbEJJTWNsX1ZOWVgzalM1bzNPeDFrQ01LVVpsOHl2Z01wYTBOa0g4TGtWZElabTNFVzBuMDR3YjlwMlNRbnRkMGE4U3ExOG00NXVuWlA5OC1QYlpYanpKUF9VM1pzeWJKQ1ZmRHQ2NjBmNXlXdEpTektFZ2NleDZpeWlMRE91VXRiUlN2R1F2Y2J1MEhLcHp1Z19iQ3hMdUx1U01VdmdETmhwaW1ZNG5LUHVsenhrM1VCR1dfT3NiaUdENXA0N2VjVnU4dVBfalpPQ3Q0bUVlS2RXR0E2dzE1dFJHTHhCLTVINnJWN2VNanh5TGZ1d2o1SnlQc21tRVdDMlRRYXZmWjkzdEw3dEdQbDdjTGZndGIwUktvTHlUVWptMmp5TXdqMTBLellQakcwZ3FMNnlzZmhpc1VZSGZ1S1A1Tzd6Wmt0cVp2YnM3LWRUR1JidDNBVUtpMjlMdnBYZkY4RVZ2YlJOdzdHakRqZm5OLTA4bHR2ZERsS0MtUGFxRU1XeXJUTS00dTlDa1R1R3F1Q2xnUXhTOGNvb3ByaUJrYWNIeFlibzZ3RGRodDZBWTBNNEQwVE1rcXdzNE8zd21KMmV1SlE2N0RGa2pWUDVsQk1WSlZkVHJqN3A0Nmp3RWZxMW45N3hKa2o5YVY2RzZNZ0NXa0J5eDlSajk1V1hXQ2JZSXJPZUwxV0R3aVZjUlpVakZLdXhncGVDOUNVWG5NanFJN09qblNBZURMbTgwRUgtNFF0SUg0OEJLb25SbG92TW41Rm5LTktiQXEtMHVucDdXekphSlU1OFh4bWliNElib2Zzbk5kaDNzMThsZkNHeUQxSzFHNUowRkRGSHNqWjB3VGdPX0tYMUtfWXFCZUoxS0pubDNMaFRLTThyUUUtZmx3VGswNU5wT3Y1R1MySktmWnRJQldqY3V5LXNJck0zcnhrUDd5MXhYQzBGRkVqcTN2QklsM3Z1VVJEbTZVN1U2eFEzMlllNWRGSW8zcjJJNmNlMXcySC1kcjFzTWxyX09Xd3MxcHVQRXZsRTduQXh4WDhPcUNJS2JKSGJKX2ZSWEtoc1JpSENYOVRvNWtBWGQtdXNVTW5JMDNDSFRhVEdJN1d2OVcxZW12dVZidUdIVm1Kdy1JdkhKeFhaejNIV1hMRTFiaWZWa21jU0owbVFYT0x1Nm9pTG5DQVZVckpaMHh2d1ZQMWdnYzFxTlV6U0pkblpPR3lJNm9RZmItYm8ycm5iWml0bG02dExjdjFjYnlTMHNQeDJ1Q01XaGpZM0hkeGx1OVhlTWhSb1pQM3FIUnpCajNUNzRUSlRFVVVQb3o5RzUxNlo5MDNndlczYWhNLXBkZ01YU0ZiT1lwUndMcEQ4NEluRnVYclVvNWROY3FZcTdjYW8yZVFXWHRFSWsxT2RSQmdZb0xzWjViN09IY3JGNnZXb25kWHpSMnJVUXpuSjZUM2hrajVYbmd3TzZSYllVNmRIeEVBMU1JQ3JHR3dSV1F1U3VadWstNlBCRWhUc2tqRHZDaUNUVjRFNFhlaU1DRmhLdUJUTEV2ZGVsS2h1WHpBMVJjVklqUVNaeE82T2MycldEbkdZeHE2dlQ5dVpnR0xyZ3NiVFBnblVGUnpXdk16cGZqZ1Jic2l0MTZ5Rm5JeVQzWVZxdXhoSF9kMEJEUVJwZkg4eEVvWlM2MXlMMlQ0bE04eGdxT1hBRU5KSk1Bdk5MUW5DWE5hTWJ0NHlzdkh6QlkwaGd0M3JSRHNZbFpnbWFvSmtIQUs3dXYxVE5ZRGZSbXVPVFF4WDdWcldmSWpkamtwSkVia2RYQU5maFR6SWdPNERTZlYwT3NlSF9mcXJtb3cxMmVwSDVMWFhWOW5XWTk5STFtMWtRTUw5cS1XSjVQMmNhc2hkRFVDRlEtMTFCYVpDMGVhZGthUGVwMmFPWG5HRnJteU5hVHYtVUxMVGRKQ2E3RnFZemlaU0hvNU9QTFVybEIzNDRMRzh6OFh4UWFDOG13d1FQQUl0ZDM5ZmlpMXpFTi10RUVlakREeTA0VlNreGdSMXFOYi0ya0hjbXBPSHFlWVMwZmZ3ck9HWDliSUtvbFQzdV8tSnlyODhPVnA0RGg5SzhXeEVYN1Ffa3ZjUG12azUxZEhiN19KVGM0YUV3OXRfZHRTSURMWGJLR3RZcWFqRmN5QTZNdUtfVWlnWC1pMUNJR01lcnZxek1qNGo5UWM3b1pYOWlaaDZyWVFnNEQ3WGFUQjZtM3BOMGJxM0MwZEs2RzFmODZGMUNXc1ptU3Y3TnZLM1VyNjNDc0xRQjdfTV9KeWpWUU1xelJud2NhRnBtd1JPaXJsT2VJOXJiODI2Tk1QMEZDbWxwWFRtSF8tUGZIN1FLVVppcXRSSXROa0tQWmI0RW13TTF5QmhaU2VpeFAwdFF3cnBmS2hDNVQwZlB0d2Y2M2RqTTc4aGEtbUdWV05ROFZjX1NBZWpIbEMxRUNLQ3JRaXlGSGhRY3VxeXFVM1NpX2tJX1lBREEzYnNIWmVZWHY0bGtOUzB5RUM3am92MXlqQnBWR1kzanF0dzR6cEtsZWZFa2NnR2hxWWdoQlJvV2xGeXRJS21ENDg5N2FQQ085RXJITHhpbUJRc2c5Q09CY3o5WVBYV2JWMXdlRllrbHZ5cXhVUDNEeEZlWHktRXhqY1Y4MG02VERqS2xxZU8yZ095bFAyREpNZlVDVDlfY0JvbmhWMXlFbzNZUzdwbC1HQ05jRkZuOHhHa1AzdkM2dTZDdV9iaHhmY0ZqN1VEU2JaUFdrdUpPYXc2NVc5bThqTEFiR3FVOXdLM1ZpenFvWGRsTXlZb2JNVDZpUmx0NUwzR2JFdV92OHk0OGY1Z1g4SEtxVjVEVjZpdlRTaGdEZlVKQ0U5b3pBNmJobnk0a3BmME5XcVpjcHRQN2pMSW1DOVRJOXNnb01WRERpXzVzaGJBT2tESVIxVm9mX1dnOWxHdFhSSDBMR3IxSUxXNmJmSUp0ZVQ1U3hUdVVabmF6MjFyVFZxNmdWeDgyaWpGR0RXODdlcnRKeVRUUnl4eEZxcmRvMHBITWRrQjMtWnk4d09oOWQwcUc0UTNYWHFiSGttT3VEeTBYOGdCR2FOZGNTMUh4RmdRY29VbjJVN0RPMjUyTGZrZ25RVU8wLU1OdXZ0SlMtRVp5emZHRUFsVzUtY3Y3SDBBQWR6ak0tWk1JUXk2dkxPYldYOHRxQzFSaW5aQmEwOGp5Y2JRSnR6VWtKZ3plamlodFlHNS1IQTJXRVctX09HQjk5UkVJQnBfR2lnV0hxN3JMVTZVV1J2ZldqMUxaSzVCT2VRQWdpZjhuWTdHYjdaQUpReVVfb2JIUlprVEZITERpV3pXZWdnWUlZNmFwQzQ0V09abFB3WWtOQzg2U2oxckNuZVlpbjgxTzV4YmR5MW9QVmUyWXZaS2lJY3NoeW54TU9COHRUemZEb3Q0V3g3REFmc3hUYmZXYzJRcEZGRnNUSDhkdGEwWFVYZVU5SnBfOUVxQ2NRWW1UaF9JTWJ4YWJEekxWd1hyWjBMLUp4dzFjSGZpZWduTFl5RUFVS1ZKVHdpRXRQMk53LURJb25kcXRHblhmUmNqYWo2T1h5YzVpSXlzSnltdk5WbFpVdDh5b1g5QWthVlBmZWFTRUJ5UDNkSXF5MVNCdjRyWFBMclF4dnk4T0ctTnRFaUJxa3pfSzBvMmVURkU3eGN4VUtkS1dLbXk3YnNBSDRsakUzYTZxQTh1Rk81d2VyVlRMNmdlcTl2WFlldDVyMDd6V2VuejYwcTZ6RUlPVjRDckRvNE92S2dCZXpzSGI1MnExSVlmZjZnSEk2RkNCUGFyeTkwQVpULTVycXZoYjlnMkpHVTdwa05kRjBPZXY1cW1ONlVRQWRvblVOM0N6MVRqOHZaRGtIb1Ixc0tLdnU2dnlJWDRFZHVWNEQwdEc4ZGllTURNWjlLR0ZqVXVvdl82MVliekZxVm9QdDlLYUpjUEdBRnZHSThNT3hSV3FnZDNJNF9FVU1BWnZjbGs2RUtsdXR4TlhpQlJFQWpUMmlFbW9qT2s3c0ZhTzhOT1lLQTRpVjBYSDlyZDJJVEhDRkpleGxhRjl4aFBLck9heGlacE1ITU1JU1NCMm44NW9rcWJGNXlOQTdlWXZLckwzZE5GSlNLWjRTcFpkd1ZWbGhDcEVsaFNlejQ0cHktSEc3aWp0MUtNT1E1VGZDd3FXdkR5QTRjd2ZyX1dtRmhNZU1ocXFVdGx4bE91a01EZ2ctb0I2QmsxUi1LQmxDTnlVaFlMYzYtQ09qNjhWZkg5YXFycllWd3I4X1NJaGp4RGRkSkpxeGZrS2EyNlIxcFVXTTRkTFE0RkNQY1NOTFpTUzhGSDV0d1MxZ1g0NFJ2RVpkdmVwelJRUHlWdDRtdFg3VzFxR2dseGs0VVc5MXJJTFpCRzVGMV9McUtCdkx2V0xhbF9YZWpGcEZxa2ZNNE5QY25zcHRXenJ5OWN0S01mMXVWTnh0eTJJU2l4V3JtTmJCTXZRVzRyM1dtZ0xneml2WXBISkYyLWF3WVgyQXFSRTJaM0JTWXZqamt4a09KUE54bmYzUldEUlZ4X3pGU19NS2lRci1YaEJ3Ty1vVm1xOVVpVDN4RGlGTnRMNU5fWmN2REtmUFc2ZmxfUWRkWU5ISEtTU1BnMjVPRVRsaUp4RzB5bFJUNUg4NHVEaGU3ZGprY0ZReHlLaXNVMk5oRTNESGZfTUVuVU1NU20zSGljMDkyN3NRc0Z5TGk0WHRSUi1KRURZdkI2MVdQQ0NPVWJmaXVZd0xON1dST2xzcWV1RVN3UHBVcVpaOXVLUlE5NDdmUGdYam1xQUh0RTh6cTZqUGMyMXE0UWc3Y1MycEJ3eUlsOC1FUm11SFhmNlRqR2xTYnRHY1c0YS1pbDlxWjBPUVJrbXIxOHM2a1VITml0eXlkcll0V3JEQk5oOFgtdDFWeTBxOFdPNWtFZE05VVdTRjQ3MFIzZXZPWHhhNDYtUFpwemw5cWhSTmlteEsyZWJPa3lRMTJvUTRKUVFvUFA1NDlCNGxTNXNWX1pVQ2RDZ3hHS3M4NTRMUnU5TWtRb2pzUEdEcWZsUUtKQXpFVFpCQklPQ2xXa0Vhd1RINnZEUHc3Q0h3VnFHY1c2RUhPZ3d5ZUYtdXhxZGdSbjdULUJLY1FMMGxaQm1fZzJScDhySmFxQThFeV9lRkdaeFpPTVNnd1dIWmlqZnp3M0c1aW5hOUhjT0NDUEhjQUViVWdXUFFoQ3BXeS1LS2RJSjVuemdIZ05UXzc3Ml85SmlMLTdCdXFKQ2t0MXFVZ1hkTXd0V2VwS1hscFVHek0tLVFaa0NJVlJHc0VPdC04VTdEd2JoSFpQdS1tckd3RmVYUjZlZlhlMzQ2Smt1RF9BNjRTS2FKR0RnR0o3MjZZWld6bkJCYkYwWC04U1pjTTlIMmVxX09PNGdBbjFlMmUzTVFkeUsxXzczbUZXRENQWlhCQzg3Rm1VdnJFNV9yNEhORXRWY1VtanFhT2dOTmVNRzk1LWdXM3FPNTBJdEtmSVcxV2Jkc1A5azBGM2VfYWxaQjNoNEF5aTdqRWVBT0hvVnNrVTdnNmJ1VW5aSnM4ejR1N0pLcld4cllzYUltZXpzX2k1VFNOTXZ4aTgwQjJLVThsSzBENGdjaUxmWHFoejZpLUt3Y0lBS2g3ZXUxSVJnMGhRNlhnaFU4V0xOV1RFSkU5UEl2NE4wWk1CaU1rVnJuWnZRVVItNXZEWFVsbDI5YnZxY1lPRWNnZ0RGRmNlUWZ6NXRBcHBwcGk4dGpTUW13bHlTZ3ZHdm5jdzVMYkktWFRXUmxmRVgzZ0ZwbTk4M3pqbVczblhnX0VSWVFGVkttSDk3Tzc1QjQ4b2g0cVR6VmlPZkRBWGhka0l5RlFOeEIwemxFWTdHR0duLVlwMm1YaUtTWGhrWlNFbnY2ZDNVeTBLeFk0YzFMT25LTHhzR2pyRllVdmlVSHRKbmk5ZGZQVjBjdmJrWVBic09xMU9TY3hiZHRKWHM0a1d0ZFZYanJCMlAtT2x6Q2Rnb3lyZzhxVWliZGk1cTBjNXJUQlJiSVZaNzh3SkJaRHpXWUpkSDQxeldZelQ2MWdhYjlobWhfbFdIazdsU203YnZnQXdLczF1ZU95T2J3bzRWWTRuaFdqal9NRklpM21aTDd5YUtlZWU4eVZxUFB4Rk9jdThtY0ltU3E4WEdzc2xYTl9Eb3ZBUEZWcWRIOWRxRGYzM051M1dWWkhzY21lVmJvUUc2RUVlWDFsQy1weDloa0VaSGxWWTRyaGt2SkgtbkVsbzNfM3pXVjVMdjcySHNRU1FqMU1hY0RfSGo5dkRubmdyMDkzT3Q4d3poOTR1TkJHZnJrX19jMTczVFg5VHpyaDRtVDlaeTNYQkNHMDlWdk9zX2VfT2RhUW9nUDJzcFN1bXZOZHBYWjMzd3MzeV9lSHNyUUZHSVNLcXJRbE5yWTI5VUtoUWxyUVF1Qmg1Wjl1VklXWHJ2ZU5zZjVLX2ZzWm1iYVZDYUs5N1RyUHkzZEVpQnhrZWctSmVkZjBmN3dyQTRVQWx1bjhmVUVsTUFCdWFQeTJWM0M5R3NXVG1yOExTOTJDTkpFbW9uYUx5MjdFekpUb3Boa1daOU1aVFQyampoc3RYRFNJLUo1bmlvVjU4R0F0V3B2d09nUVlrbHViUHVvZWREMjE4NG5aYlNIdFFrRGgtNl9CUWhZNWFIQlppWUJJYkdZTFhDNjMyWVhtNXAyNkxWbmZRdTRPemc5WGtnVm1lTEUxejhvdjhJNElOZE9nSGhjNkpHT1dSY3VyWGR0UWJkdFJhcUQtTy1WdWhTZWdfQWtNckJZam9JbEF4LVp4WEpmYXdwMGt3S1dOQW1BcktCb2pWLXNwbENFWVNGcFl5U2txMl9JRGU5UXd1U3hOdFZNTUlaWjkwYzVPUUltUWZVZTJVOVBuei1tRGtyVzFSRkd0R0RqcGRMODR3TmF0LUp3eVQycjBFb3NJOElRZ3hjY3ZPYkRVcnRaRWJyOGxWQjRFaWJjT2liSlNubndVQTdYQ2J5VGtyRkdVSG1VNVRJdndnVVZOQXI1aG1zaU10d0w5YmZCVWdqOXc4am1PWjJveHk1OVV0SmVpQjJHbkxHR09Nd3V3ZEFnRTJBdTBLcGU5cXlLNUJMMldXV0tnZV9scFhoR0UzMTJLaG1jOTNVaHB1QVBQMHJiNDAyRV9lOXNmRHZMU3Fld0xEb3JGTlc4VEJiQVc4S05lY0RVRFpxWWE0aENFOXR2cHhkTWtGMWZlTDY2Wkl2a3ZINm1IbTJhbHRFYXVLS2UwTnJDZU5OYVhQZTFPeXVSLVAyQnNfREhiemotQ21xLWV4bHNqUWRBYi1SUmxsRTVRZ2VTM3V5NndLbE1OR29ZUy1fUi1yQ0hXOE9EZ0U1anQyMDhFTWRwWTNZSExzblV2Z085MnY1dDlBX2w5Rmk2ZzRZUzQ1VmtrTTVZcEpZRk8wekRNaHNvMmxOTGtmNDdfWThqaU5OajdMM3htX1F5eC1NZXBvSWhoVmhBcVFWaDJla1d3ZEtScU1PWnc1RUhqcDZLbjROT2ZacHh0X2ZpS1ZJVzZQQ1hITzdYekt5WldKWmszakVwV2lyak43Mmo3V2tza0dib0kyZk5DX1dZNXlqVDZuWGNZam50a292N1ZEQ1A3WVVuYnJkQlBkZGNrLUxNaFRoRWZBV0RsalRmeWJtbzlwTnFNMndGTXBsSDgyMlduNTdaZHZJTlVLX0pXWHFuMVYtNkg5QU1wQlZQU3MzWjg2WllTU04tSnFWNkdGd3E4dXB5NWMtWC15OG1WSnlnSTQ3RXljSFNWM0E5NU92UDRLQ0dCMF9DVTFQWlNLalFGaVRzb2l2UlJaeW5fU0xjbzA4aGtockNOZUtDWVZsaTFpVFJuZ25LYjVadXV1bjVkTE1qdVBhVml6V1VwM2ZZZFRNZ3ZaRVlIQzFaemdraXFHSzRHZFlQQlpobk5SNHJvVUhvdHdkWDFYcXptRk91ZjhOYnlaZnNGejNNMm8tVXY5S2NzSTNwWm1YTE05eE1IcXlpQ3ppSmY2Z0pNbm0yWGFEX1k3Y2RyN2FXSmgyVWNsWWtEUUpGa25vV05vMVlieTRqX1RLblFBZFE5cWM4T3hzYUh6ZU1VTGtxT0Q3YmNDR3Vlc1lWMVhac09yQ2Z4bWRwZng3RlgtX3h1bmlaMnc3X09xTHloZG9mUi1ZdjBGdlF2aWxOVUotdWF6bXZFQWREcXVBY1NMRVZCd213V25LRjRqcF8wVjdod3oxMVZJeXJET0JMRzUydUFtTWprcGQtZjItbG9KdXM0bnFJMGFybG9rRm43bWVlbWNacXpydzRxeFhKdnFoakE1M0ZNNUlrZEhGS0I5SkFsOVBSSkF5UXN3d3lSdGNnLW5vVmtBazhmU19tSHdzTkJCMjB6YUFjQmwweUtDLUtaZWF2Vkg3TFZwNHFvbTItT3IxNk5pZ282SHM1ZGhkbWNIN00wbUZXQlFzSk5xLUc5MERaOUgzUVIxQ2Y0S2NBUmprdUMxNUVIT3daTWFqNldnekV4QnRDSll4ZG10emE0LXdhaDFnNzUwSTM0WWJYN2E0aVY4VUJXUjN0dmxjN2xtblAyQU9iWWo3dl91NDNYenZpV3RuYmhDRTQ1bkhCbDdMNFc4anVpM3MtbHoxVzBNcGFJSW9zUXQtbkVFVDd1YTh1ZEVzX1IxWHUxd3cxYnRETW41d216VWdaQXd5b0JubnFzQzQxZTh2TWRCTWwzOHFLa1lFYmxlSElSbEpfdklrR3FXZk9iV0J1OVhmeE1DbWFiMkhFRUpPYlBKOXZBLTF6bC1JWDdBLWhTRlBsRFZlTklpd2wzLVBoclJSV0t1R2VZcVdITjdtLXVtSWtnaGZyQVlxYUZOejU1RDlQUjkweDBTd3ZWWG5MdUVZRDlWRWhRaF9Zd05VVzJyUUdBa09vRFVtejBxbHdCb3Bxd3B5cHlqWEc4V0hHb1pnV2l4Ym1BZHRFZUpMaDJMVGpGRm0xY1M1YVVuRXJ5OEhkclNBYXF3VTdSTW44aDhxWFRVbnpVWGdxenNRTEpDdlBqeUtMd180ZGprOWNtS0pqRXFBVWY5Rlp1SmhfYzdBUXQ2bVRqT1ltbmJhTG5HMlN3LjV5NXVJMDcxX1pfZHBiSGdaV0Q0SFE"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['43376']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '43348'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/restore?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/restore?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/514b6fd501bf4593849a475309d951de","kid":"https://vaultname.vault.azure.net/keys/certcfa1497/514b6fd501bf4593849a475309d951de","sid":"https://vaultname.vault.azure.net/secrets/certcfa1497/514b6fd501bf4593849a475309d951de","x5t":"hMyN0O7TCp1O5sO5l4xyKuyImpY","cer":"MIIDaDCCAlCgAwIBAgIQKnbaAD66QgyQhoWWJGWhmTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDgyNVoXDTIwMTIwNjIzNTgyNVowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANZHCdkLJNctxQVdKdaqREVmUwhtBkii92b/hxtlbVEVBjFpGZCKlklJ4yZFJJeWdVRkaG42FU5uwI7op6cUdxlfnhg1YRkzlEl0zHxUDSah7+tF9zQcfUhH66usr9fmUEHLuFaJxxVMwnwh7Y0+CQTdO4Z/d35Bwq2F4YBLTZUCdlkCQAZy6pVLce3ksxAcS25PQSLklbzouIqdhoOCnVKo0ySszHSWfcImzmgWg766ouP/Z7e1ccZCzmRLTMqzjaB0AevLJMFxO0fsAM/5PImJFUjyLbMYL0KqEgWIY6fBTI6QeR3A2UcJWFUEe8Y5CsM0lDBOvpOe2m0naoAQTYUCAwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLgYDVR0RBCcwJaAjBgorBgEEAYI3FAIDoBUME2pvaG4uZG9lQGRvbWFpbi5jb20wHwYDVR0jBBgwFoAUqrcwXIbN8XZo+nbUtMo8dz6L+KYwHQYDVR0OBBYEFKq3MFyGzfF2aPp21LTKPHc+i/imMA0GCSqGSIb3DQEBCwUAA4IBAQCcRqwK2eVuJelH/bvv9ThymBDwqFkcD1Iddtn0MRy4KnZaRWc54IBN/4yUFCSJiug+S+H1WkbYKdZAiGnHJG3T3S5yHaQpN8zJMgyytdO2C66fz9JvDp+b20FFPpHOVFPCZ+tYdRUxjtq3m8x5KUkKQorongzbyHwlTyF0dfgCOghhZicdor6qoShifzydaE89L2RBB8RbWz2c6c74B4I9+TwZ0MK8Gl76qBpJ3SDKXpTlMsJWiM6z9n1UlXKRjSGapDsJvEVIkcHP5mFJ9MaqJJ7fUW1xWtsMWqICzE35hVhzorNUmLyBgUoa6+ChxOSM1Pb4EigMvqe9QcFfS4Ib","attributes":{"enabled":true,"nbf":1575676105,"exp":1607299105,"created":1575676705,"updated":1575676705,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676681,"updated":1575676681}}}'}
    -    headers: {cache-control: no-cache, content-length: '2302', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, q52u23bzaxdhsd5aluiscswa.vault.azure.net,
    -        /certificates/restore, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/9233a538f72540e0b186fb1ce27b91c1","kid":"https://vaultname.vault.azure.net/keys/certcfa1497/9233a538f72540e0b186fb1ce27b91c1","sid":"https://vaultname.vault.azure.net/secrets/certcfa1497/9233a538f72540e0b186fb1ce27b91c1","x5t":"ufhDPwlv0v2EaXDL-5VFzAAq4Uc","cer":"MIIDaDCCAlCgAwIBAgIQFE2jujVuQ6a0B6DGI1TWrDANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ9Ki4TUIlTe0engmOTrJ7isYMjpnOtvpp+PwZhvvgOkGQ4whTvxb9XFhrTPyeDcBXyIpnrOrklOzZuhcQuieiLg13iibvYtmaxu247mMmCo/vDO2FjMRBiXMjIjwj3aei4vBJURGAjnC4g4BDcl/PGdxoGP72CEhKqpmQfHo8e+tkCNtOyL1SKOWDTn/vnhGB6DMy+25yBz6zcwbdEriDPo375WqvuKejiVBGUWrSkH45frOLq1derjfGUC9orgDzhF54Ggv5FJHia/F7X5tqx4rygkqS8/jYcJV8Y/QYJAE2HOvpQlhNLmMa1I/jCyCQ46d53PKyLLwT6FDSJe5BcCAwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLgYDVR0RBCcwJaAjBgorBgEEAYI3FAIDoBUME2pvaG4uZG9lQGRvbWFpbi5jb20wHwYDVR0jBBgwFoAUWH5yFCZ0UG1k8Qc3KGQY+JLbbnQwHQYDVR0OBBYEFFh+chQmdFBtZPEHNyhkGPiS2250MA0GCSqGSIb3DQEBCwUAA4IBAQBt6R3bnV1dHbQE82SHAoPKaAuE1345rF6ajO6ToDTh/QWylflL8Hhjm/VmrwlXvKjjKrVLvC5Eb3HbQ6r3WBaza0ORzyWc6Nn1WWr7mt5aAX7H9SrkyIBRTGM7KHo7mRqh54zxnrgXL3x6h+Q5A0SvzoLya/7ANX5Rwt3IJr1ofJ1xNW5dX0WNdVsdJ7SmZy08ifgxO0VLvusDTaoPlZwCy4AbRQbPvRzDuLhItXHxHgj3L0kg7ylgaA++8RdpsBEtgwE06QmCUnYv8xhkH31lQxW0RcrwBKYhTKVE6zi6AS7bZee9daz/rM4wQ+GrtWy1QvxIJr9uLpUwijLqMCuk","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certcfa1497/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2302'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wcmq7zsqkzfbhz4u3ffxf5hd.vault.azure.net/certificates/restore?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_crud_contacts.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_crud_contacts.yaml
    index 2ad1670bd409..4eb5ed0deca7 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_crud_contacts.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_crud_contacts.yaml
    @@ -2,108 +2,172 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, kirylnamuvpnjcaowuyr5jrb.vault.azure.net,
    -        /certificates/contacts, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://jw75xaixormztyjhrv4q7rbr.vault.azure.net/certificates/contacts?api-version=7.1-preview
     - request:
         body: '{"contacts": [{"email": "admin@contoso.com", "name": "John Doe", "phone":
           "1111111111"}, {"email": "admin2@contoso.com", "name": "John Doe2", "phone":
           "2222222222"}]}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['166']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '166'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    -        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, kirylnamuvpnjcaowuyr5jrb.vault.azure.net,
    -        /certificates/contacts, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    +        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://jw75xaixormztyjhrv4q7rbr.vault.azure.net/certificates/contacts?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    -        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, kirylnamuvpnjcaowuyr5jrb.vault.azure.net,
    -        /certificates/contacts, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    +        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://jw75xaixormztyjhrv4q7rbr.vault.azure.net/certificates/contacts?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    -        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, kirylnamuvpnjcaowuyr5jrb.vault.azure.net,
    -        /certificates/contacts, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    +        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://jw75xaixormztyjhrv4q7rbr.vault.azure.net/certificates/contacts?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"ContactsNotFound","message":"Contacts not found"}}'}
    -    headers: {cache-control: no-cache, content-length: '68', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, kirylnamuvpnjcaowuyr5jrb.vault.azure.net,
    -        /certificates/contacts, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"ContactsNotFound","message":"Contacts not found"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '68'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://jw75xaixormztyjhrv4q7rbr.vault.azure.net/certificates/contacts?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_crud_issuer.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_crud_issuer.yaml
    index 096127434ced..7313dc8651f7 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_crud_issuer.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_crud_issuer.yaml
    @@ -2,170 +2,274 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i4sztlwwpvq62k57zngqlinu.vault.azure.net,
    -        /certificates/issuers/issuer, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://khuwh6fskmtx2bzoky4udt2j.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
     - request:
         body: '{"provider": "Test", "credentials": {"account_id": "keyvaultuser"}, "org_details":
           {"admin_details": [{"first_name": "John", "last_name": "Doe", "email": "admin@microsoft.com",
           "phone": "4255555555"}]}, "attributes": {"enabled": true}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['235']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '235'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676654,"updated":1575676654}}'}
    -    headers: {cache-control: no-cache, content-length: '352', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i4sztlwwpvq62k57zngqlinu.vault.azure.net,
    -        /certificates/issuers/issuer, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453253,"updated":1583453253}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '352'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://khuwh6fskmtx2bzoky4udt2j.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676654,"updated":1575676654}}'}
    -    headers: {cache-control: no-cache, content-length: '352', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i4sztlwwpvq62k57zngqlinu.vault.azure.net,
    -        /certificates/issuers/issuer, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453253,"updated":1583453253}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '352'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://khuwh6fskmtx2bzoky4udt2j.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
     - request:
         body: '{"provider": "Test", "credentials": {"account_id": "keyvaultuser2"}, "org_details":
           {"admin_details": [{"first_name": "John", "last_name": "Doe", "email": "admin@microsoft.com",
           "phone": "4255555555"}]}, "attributes": {"enabled": true}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['236']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '236'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer2?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test","credentials":{"account_id":"keyvaultuser2"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676655,"updated":1575676655}}'}
    -    headers: {cache-control: no-cache, content-length: '354', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i4sztlwwpvq62k57zngqlinu.vault.azure.net,
    -        /certificates/issuers/issuer2, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test","credentials":{"account_id":"keyvaultuser2"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '354'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://khuwh6fskmtx2bzoky4udt2j.vault.azure.net/certificates/issuers/issuer2?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/issuers?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test"},{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test"}],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '236', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i4sztlwwpvq62k57zngqlinu.vault.azure.net,
    -        /certificates/issuers, api-version=7.0, '']
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test"},{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test"}],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '236'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://khuwh6fskmtx2bzoky4udt2j.vault.azure.net/certificates/issuers?api-version=7.1-preview
     - request:
         body: '{"org_details": {"admin_details": [{"first_name": "Jane", "last_name":
           "Doe", "email": "admin@microsoft.com", "phone": "4255555555"}]}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['135']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '135'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"Jane","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676654,"updated":1575676655}}'}
    -    headers: {cache-control: no-cache, content-length: '352', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i4sztlwwpvq62k57zngqlinu.vault.azure.net,
    -        /certificates/issuers/issuer, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"Jane","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453253,"updated":1583453254}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '352'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://khuwh6fskmtx2bzoky4udt2j.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"Jane","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676654,"updated":1575676655}}'}
    -    headers: {cache-control: no-cache, content-length: '352', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i4sztlwwpvq62k57zngqlinu.vault.azure.net,
    -        /certificates/issuers/issuer, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"Jane","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453253,"updated":1583453254}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '352'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://khuwh6fskmtx2bzoky4udt2j.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateIssuerNotFound","message":"Issuer
    -        not found"}}'}
    -    headers: {cache-control: no-cache, content-length: '75', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i4sztlwwpvq62k57zngqlinu.vault.azure.net,
    -        /certificates/issuers/issuer, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateIssuerNotFound","message":"Issuer not
    +        found"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '75'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://khuwh6fskmtx2bzoky4udt2j.vault.azure.net/certificates/issuers/issuer?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_crud_operations.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_crud_operations.yaml
    index 7d3258500a40..4dee8efcdaa2 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_crud_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_crud_operations.yaml
    @@ -2,246 +2,838 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/create?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tqpkwzpvpr2hjgfe6bzzo2ux.vault.azure.net,
    -        /certificates/cert22ac150f/create, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/create?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/certificates/cert22ac150f/create?api-version=7.1-preview
     - request:
         body: '{"policy": {"x509_props": {"subject": "CN=DefaultPolicy", "sans": {}},
           "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['99']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '99'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALfbVZrELqX7MUQ/+hRfBTXHsrLZfGwbnlEAe1m84iDcw7jfzVO0xkURkqWeEZ9L2My/q3oU+ozksqdddHFcHHaaDE8ZZkpPor3fg/RqPhsmdG/3EsmO7s6jXPIni45W73cFnUpsA/4YVywVXgE2B1pJ8OSX5Dq2f5sxrFfo8il4lL18ojidFtaye93AN6wRqDyEkfblRizormOE6Ci9dhOf0xPCLLXOa/JxZWzxLiYR1etoPVOLaQzgHlNkqG+Oc9nymojBAOg2Q4DMQMdqBmapLAVGbGfcdnSU+Dr32+802MohYFKZv+jQQtu/JWeJlK4ChM1ZRadEx53s9RDyaEsCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAxTOnQZclWOBFWJyrdkSHgLfIizkneo4ppOVyKTM6I2nDQjrDVFyvG0Rwts/Yc/RPO7zwf2l28padM1eVMkOpbKKefI/PEb9sVbDe7ycJGVfBhQTh2t9t0BIbmvOcV0OZiSeum7OH64+LK0ORrGV5D55WN1+1SxREWcy2aaiQzKhmYWFLaMVql87PGJKhvjMNJs8EH+D+FsAB8DUUEYRUEKU6Wg4RQ/YRvKkO4dUnTCFqcmWgGiPw9mnx4sXNCsoHF9QEiHZ+sMXJzhl6jyXfDipUDhXdukdLBUoUPWAaFAKv2WHC/jgfZds/6ji+B+vrIliUBMb77J2eYIWWII3Oi","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpioertyFdBUdJ0yO68/VTPrEiSayV618M9hfZWG1+8kk3hk+FZQOe6Qk5THxBUAXf6uFfeno4d6Q25+omfxUDI1ooMfLy0ygco5vEBD/eE6GG2iczm3GH9oGD4OEsY/Kldgw8mogOzYKwKqBNhsnbteIoos+N71qZGCfN3HVR2qAlE4U4ybgVuKdh9py6JuAVixRCkALW3n9Chs/JK/XRaQgtJTzHlh06hsE9TuwKwz/QH9gw8MPcn8T6206KjcR9Y+ej6tpCO8oq9+CUU2gu0+EQJlhzVGmy6Lu1bOLsUoHdEialugKfzgridWGP3MlT32IulPmsH0RRy9Hf1qVkCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBPvtzM4YCpjwO28mGO+ZiBpl9QiZBBsjnrP0RTQP06kpdTiiZelf/3Bo+4d5ezIy3tbMQCfmntTZhYYZxMcPYXEgnGpAZZoSviSTuK5frnentMRaR86C2MFHrWbc4QukuLAr5tSMjLtFDAQR+LAMLMpXLx+WlY50YlkpWqHPDSomRAH36DzO+GzFIcyLGiAkpGN9nEz+HEZnDoTIhHzIyRGtFo7uvSffSRS4gLd/Y4ahcL1pb7gNeKHF2raB67kSDTpJqZNxaAts8Ur3xqDD7KtoAoNIWar7y64RT25m6duU9DurqRdUiduzxZxDMfhLeaGy8GpdzhUCrapH0FmSN8","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"4bd8d739b87f4c2a8f1de03cda3d1482"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"8f94f016a7cc4c508b87d950e39c7e31"}'
         headers:
           cache-control: no-cache
           content-length: '1302'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:37 GMT
    +      date: Fri, 06 Mar 2020 00:07:34 GMT
           expires: '-1'
    -      location: [h, t, t, p, s, ':', /, /, t, q, p, k, w, z, p, v, p, r, '2', h, j,
    -        g, f, e, '6', b, z, z, o, '2', u, x, ., v, a, u, l, t, ., a, z, u, r, e, .,
    -        n, e, t, /, c, e, r, t, i, f, i, c, a, t, e, s, /, c, e, r, t, '2', '2', a,
    -        c, '1', '5', '0', f, /, p, e, n, d, i, n, g, '?', a, p, i, '-', v, e, r, s,
    -        i, o, n, '=', '7', ., '0', '&', r, e, q, u, e, s, t, _, i, d, '=', '4', b,
    -        d, '8', d, '7', '3', '9', b, '8', '7', f, '4', c, '2', a, '8', f, '1', d,
    -        e, '0', '3', c, d, a, '3', d, '1', '4', '8', '2']
    +      location:
    +      - h
    +      - t
    +      - t
    +      - p
    +      - s
    +      - ':'
    +      - /
    +      - /
    +      - w
    +      - g
    +      - x
    +      - x
    +      - n
    +      - '7'
    +      - '4'
    +      - m
    +      - h
    +      - x
    +      - a
    +      - s
    +      - g
    +      - l
    +      - k
    +      - x
    +      - '4'
    +      - b
    +      - y
    +      - b
    +      - r
    +      - s
    +      - q
    +      - u
    +      - .
    +      - v
    +      - a
    +      - u
    +      - l
    +      - t
    +      - .
    +      - a
    +      - z
    +      - u
    +      - r
    +      - e
    +      - .
    +      - n
    +      - e
    +      - t
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - s
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - '2'
    +      - '2'
    +      - a
    +      - c
    +      - '1'
    +      - '5'
    +      - '0'
    +      - f
    +      - /
    +      - p
    +      - e
    +      - n
    +      - d
    +      - i
    +      - n
    +      - g
    +      - '?'
    +      - a
    +      - p
    +      - i
    +      - '-'
    +      - v
    +      - e
    +      - r
    +      - s
    +      - i
    +      - o
    +      - n
    +      - '='
    +      - '7'
    +      - .
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
    +      - '&'
    +      - r
    +      - e
    +      - q
    +      - u
    +      - e
    +      - s
    +      - t
    +      - _
    +      - i
    +      - d
    +      - '='
    +      - '8'
    +      - f
    +      - '9'
    +      - '4'
    +      - f
    +      - '0'
    +      - '1'
    +      - '6'
    +      - a
    +      - '7'
    +      - c
    +      - c
    +      - '4'
    +      - c
    +      - '5'
    +      - '0'
    +      - '8'
    +      - b
    +      - '8'
    +      - '7'
    +      - d
    +      - '9'
    +      - '5'
    +      - '0'
    +      - e
    +      - '3'
    +      - '9'
    +      - c
    +      - '7'
    +      - e
    +      - '3'
    +      - '1'
           pragma: no-cache
           retry-after: '10'
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
    -    status: {code: 202, message: Accepted}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tqpkwzpvpr2hjgfe6bzzo2ux.vault.azure.net,
    -        /certificates/cert22ac150f/create, api-version=7.0, '']
    +    status:
    +      code: 202
    +      message: Accepted
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/certificates/cert22ac150f/create?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALfbVZrELqX7MUQ/+hRfBTXHsrLZfGwbnlEAe1m84iDcw7jfzVO0xkURkqWeEZ9L2My/q3oU+ozksqdddHFcHHaaDE8ZZkpPor3fg/RqPhsmdG/3EsmO7s6jXPIni45W73cFnUpsA/4YVywVXgE2B1pJ8OSX5Dq2f5sxrFfo8il4lL18ojidFtaye93AN6wRqDyEkfblRizormOE6Ci9dhOf0xPCLLXOa/JxZWzxLiYR1etoPVOLaQzgHlNkqG+Oc9nymojBAOg2Q4DMQMdqBmapLAVGbGfcdnSU+Dr32+802MohYFKZv+jQQtu/JWeJlK4ChM1ZRadEx53s9RDyaEsCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAxTOnQZclWOBFWJyrdkSHgLfIizkneo4ppOVyKTM6I2nDQjrDVFyvG0Rwts/Yc/RPO7zwf2l28padM1eVMkOpbKKefI/PEb9sVbDe7ycJGVfBhQTh2t9t0BIbmvOcV0OZiSeum7OH64+LK0ORrGV5D55WN1+1SxREWcy2aaiQzKhmYWFLaMVql87PGJKhvjMNJs8EH+D+FsAB8DUUEYRUEKU6Wg4RQ/YRvKkO4dUnTCFqcmWgGiPw9mnx4sXNCsoHF9QEiHZ+sMXJzhl6jyXfDipUDhXdukdLBUoUPWAaFAKv2WHC/jgfZds/6ji+B+vrIliUBMb77J2eYIWWII3Oi","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpioertyFdBUdJ0yO68/VTPrEiSayV618M9hfZWG1+8kk3hk+FZQOe6Qk5THxBUAXf6uFfeno4d6Q25+omfxUDI1ooMfLy0ygco5vEBD/eE6GG2iczm3GH9oGD4OEsY/Kldgw8mogOzYKwKqBNhsnbteIoos+N71qZGCfN3HVR2qAlE4U4ybgVuKdh9py6JuAVixRCkALW3n9Chs/JK/XRaQgtJTzHlh06hsE9TuwKwz/QH9gw8MPcn8T6206KjcR9Y+ej6tpCO8oq9+CUU2gu0+EQJlhzVGmy6Lu1bOLsUoHdEialugKfzgridWGP3MlT32IulPmsH0RRy9Hf1qVkCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBPvtzM4YCpjwO28mGO+ZiBpl9QiZBBsjnrP0RTQP06kpdTiiZelf/3Bo+4d5ezIy3tbMQCfmntTZhYYZxMcPYXEgnGpAZZoSviSTuK5frnentMRaR86C2MFHrWbc4QukuLAr5tSMjLtFDAQR+LAMLMpXLx+WlY50YlkpWqHPDSomRAH36DzO+GzFIcyLGiAkpGN9nEz+HEZnDoTIhHzIyRGtFo7uvSffSRS4gLd/Y4ahcL1pb7gNeKHF2raB67kSDTpJqZNxaAts8Ur3xqDD7KtoAoNIWar7y64RT25m6duU9DurqRdUiduzxZxDMfhLeaGy8GpdzhUCrapH0FmSN8","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"4bd8d739b87f4c2a8f1de03cda3d1482"}'}
    -    headers: {cache-control: no-cache, content-length: '1302', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:37 GMT', expires: '-1', pragma: no-cache,
    -      retry-after: '10', server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tqpkwzpvpr2hjgfe6bzzo2ux.vault.azure.net,
    -        /certificates/cert22ac150f/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"8f94f016a7cc4c508b87d950e39c7e31"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1302'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      retry-after: '10'
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/certificates/cert22ac150f/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALfbVZrELqX7MUQ/+hRfBTXHsrLZfGwbnlEAe1m84iDcw7jfzVO0xkURkqWeEZ9L2My/q3oU+ozksqdddHFcHHaaDE8ZZkpPor3fg/RqPhsmdG/3EsmO7s6jXPIni45W73cFnUpsA/4YVywVXgE2B1pJ8OSX5Dq2f5sxrFfo8il4lL18ojidFtaye93AN6wRqDyEkfblRizormOE6Ci9dhOf0xPCLLXOa/JxZWzxLiYR1etoPVOLaQzgHlNkqG+Oc9nymojBAOg2Q4DMQMdqBmapLAVGbGfcdnSU+Dr32+802MohYFKZv+jQQtu/JWeJlK4ChM1ZRadEx53s9RDyaEsCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAxTOnQZclWOBFWJyrdkSHgLfIizkneo4ppOVyKTM6I2nDQjrDVFyvG0Rwts/Yc/RPO7zwf2l28padM1eVMkOpbKKefI/PEb9sVbDe7ycJGVfBhQTh2t9t0BIbmvOcV0OZiSeum7OH64+LK0ORrGV5D55WN1+1SxREWcy2aaiQzKhmYWFLaMVql87PGJKhvjMNJs8EH+D+FsAB8DUUEYRUEKU6Wg4RQ/YRvKkO4dUnTCFqcmWgGiPw9mnx4sXNCsoHF9QEiHZ+sMXJzhl6jyXfDipUDhXdukdLBUoUPWAaFAKv2WHC/jgfZds/6ji+B+vrIliUBMb77J2eYIWWII3Oi","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpioertyFdBUdJ0yO68/VTPrEiSayV618M9hfZWG1+8kk3hk+FZQOe6Qk5THxBUAXf6uFfeno4d6Q25+omfxUDI1ooMfLy0ygco5vEBD/eE6GG2iczm3GH9oGD4OEsY/Kldgw8mogOzYKwKqBNhsnbteIoos+N71qZGCfN3HVR2qAlE4U4ybgVuKdh9py6JuAVixRCkALW3n9Chs/JK/XRaQgtJTzHlh06hsE9TuwKwz/QH9gw8MPcn8T6206KjcR9Y+ej6tpCO8oq9+CUU2gu0+EQJlhzVGmy6Lu1bOLsUoHdEialugKfzgridWGP3MlT32IulPmsH0RRy9Hf1qVkCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBPvtzM4YCpjwO28mGO+ZiBpl9QiZBBsjnrP0RTQP06kpdTiiZelf/3Bo+4d5ezIy3tbMQCfmntTZhYYZxMcPYXEgnGpAZZoSviSTuK5frnentMRaR86C2MFHrWbc4QukuLAr5tSMjLtFDAQR+LAMLMpXLx+WlY50YlkpWqHPDSomRAH36DzO+GzFIcyLGiAkpGN9nEz+HEZnDoTIhHzIyRGtFo7uvSffSRS4gLd/Y4ahcL1pb7gNeKHF2raB67kSDTpJqZNxaAts8Ur3xqDD7KtoAoNIWar7y64RT25m6duU9DurqRdUiduzxZxDMfhLeaGy8GpdzhUCrapH0FmSN8","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"4bd8d739b87f4c2a8f1de03cda3d1482"}'}
    -    headers: {cache-control: no-cache, content-length: '1302', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:47 GMT', expires: '-1', pragma: no-cache,
    -      retry-after: '10', server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tqpkwzpvpr2hjgfe6bzzo2ux.vault.azure.net,
    -        /certificates/cert22ac150f/pending, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/pending?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALfbVZrELqX7MUQ/+hRfBTXHsrLZfGwbnlEAe1m84iDcw7jfzVO0xkURkqWeEZ9L2My/q3oU+ozksqdddHFcHHaaDE8ZZkpPor3fg/RqPhsmdG/3EsmO7s6jXPIni45W73cFnUpsA/4YVywVXgE2B1pJ8OSX5Dq2f5sxrFfo8il4lL18ojidFtaye93AN6wRqDyEkfblRizormOE6Ci9dhOf0xPCLLXOa/JxZWzxLiYR1etoPVOLaQzgHlNkqG+Oc9nymojBAOg2Q4DMQMdqBmapLAVGbGfcdnSU+Dr32+802MohYFKZv+jQQtu/JWeJlK4ChM1ZRadEx53s9RDyaEsCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAxTOnQZclWOBFWJyrdkSHgLfIizkneo4ppOVyKTM6I2nDQjrDVFyvG0Rwts/Yc/RPO7zwf2l28padM1eVMkOpbKKefI/PEb9sVbDe7ycJGVfBhQTh2t9t0BIbmvOcV0OZiSeum7OH64+LK0ORrGV5D55WN1+1SxREWcy2aaiQzKhmYWFLaMVql87PGJKhvjMNJs8EH+D+FsAB8DUUEYRUEKU6Wg4RQ/YRvKkO4dUnTCFqcmWgGiPw9mnx4sXNCsoHF9QEiHZ+sMXJzhl6jyXfDipUDhXdukdLBUoUPWAaFAKv2WHC/jgfZds/6ji+B+vrIliUBMb77J2eYIWWII3Oi","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert22ac150f","request_id":"4bd8d739b87f4c2a8f1de03cda3d1482"}'}
    -    headers: {cache-control: no-cache, content-length: '1223', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:57 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tqpkwzpvpr2hjgfe6bzzo2ux.vault.azure.net,
    -        /certificates/cert22ac150f/pending, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92","kid":"https://vaultname.vault.azure.net/keys/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92","sid":"https://vaultname.vault.azure.net/secrets/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92","x5t":"c0wUUX0AjF-WN_GtyI79TQUagY0","cer":"MIIDNjCCAh6gAwIBAgIQS+kna5WITi6x95XIxSdO/DANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDg0N1oXDTIwMTIwNjIzNTg0N1owGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALfbVZrELqX7MUQ/+hRfBTXHsrLZfGwbnlEAe1m84iDcw7jfzVO0xkURkqWeEZ9L2My/q3oU+ozksqdddHFcHHaaDE8ZZkpPor3fg/RqPhsmdG/3EsmO7s6jXPIni45W73cFnUpsA/4YVywVXgE2B1pJ8OSX5Dq2f5sxrFfo8il4lL18ojidFtaye93AN6wRqDyEkfblRizormOE6Ci9dhOf0xPCLLXOa/JxZWzxLiYR1etoPVOLaQzgHlNkqG+Oc9nymojBAOg2Q4DMQMdqBmapLAVGbGfcdnSU+Dr32+802MohYFKZv+jQQtu/JWeJlK4ChM1ZRadEx53s9RDyaEsCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFPOXp0gaozGZdEOxMZk7dYmaHBTkMB0GA1UdDgQWBBTzl6dIGqMxmXRDsTGZO3WJmhwU5DANBgkqhkiG9w0BAQsFAAOCAQEAawwjtCdjJcwrPOiBxznsLgiNxP5a6oMbRu9f8S4jTiWBwcB4VbIRbd3oQ7ZcmVeaCtCrPFAmdEo93VtOvVgT0mynRaTWgf2eOJpHjXX3/JQFm2pKu7t+zVjs6oBDimP7QtVQHoHeT3/xhz8ZCtpWHe1vjls+EClG9IXtjKDNuj1Tc71SiGtSQQkajF1Gi99ALwsK/5AwROILlQWZ/yE/8UaLtr5nL5Y1tVZsYBl0jDS9J1EmZUhRrCXIlbupNbTvxxPyXW//qVPYYGXourvm9laBhKv4nL8AKC3D0s6czuNM/bf0ZRyMQZv9Yv3zLnf2OKqHv/V1Vqj02IYr1vxZKw==","attributes":{"enabled":true,"nbf":1575676127,"exp":1607299127,"created":1575676727,"updated":1575676727,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2354', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tqpkwzpvpr2hjgfe6bzzo2ux.vault.azure.net,
    -        /certificates/cert22ac150f/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/pending?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALfbVZrELqX7MUQ/+hRfBTXHsrLZfGwbnlEAe1m84iDcw7jfzVO0xkURkqWeEZ9L2My/q3oU+ozksqdddHFcHHaaDE8ZZkpPor3fg/RqPhsmdG/3EsmO7s6jXPIni45W73cFnUpsA/4YVywVXgE2B1pJ8OSX5Dq2f5sxrFfo8il4lL18ojidFtaye93AN6wRqDyEkfblRizormOE6Ci9dhOf0xPCLLXOa/JxZWzxLiYR1etoPVOLaQzgHlNkqG+Oc9nymojBAOg2Q4DMQMdqBmapLAVGbGfcdnSU+Dr32+802MohYFKZv+jQQtu/JWeJlK4ChM1ZRadEx53s9RDyaEsCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAxTOnQZclWOBFWJyrdkSHgLfIizkneo4ppOVyKTM6I2nDQjrDVFyvG0Rwts/Yc/RPO7zwf2l28padM1eVMkOpbKKefI/PEb9sVbDe7ycJGVfBhQTh2t9t0BIbmvOcV0OZiSeum7OH64+LK0ORrGV5D55WN1+1SxREWcy2aaiQzKhmYWFLaMVql87PGJKhvjMNJs8EH+D+FsAB8DUUEYRUEKU6Wg4RQ/YRvKkO4dUnTCFqcmWgGiPw9mnx4sXNCsoHF9QEiHZ+sMXJzhl6jyXfDipUDhXdukdLBUoUPWAaFAKv2WHC/jgfZds/6ji+B+vrIliUBMb77J2eYIWWII3Oi","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert22ac150f","request_id":"4bd8d739b87f4c2a8f1de03cda3d1482"}'}
    -    headers: {cache-control: no-cache, content-length: '1223', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tqpkwzpvpr2hjgfe6bzzo2ux.vault.azure.net,
    -        /certificates/cert22ac150f/pending, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92","kid":"https://vaultname.vault.azure.net/keys/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92","sid":"https://vaultname.vault.azure.net/secrets/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92","x5t":"c0wUUX0AjF-WN_GtyI79TQUagY0","cer":"MIIDNjCCAh6gAwIBAgIQS+kna5WITi6x95XIxSdO/DANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDg0N1oXDTIwMTIwNjIzNTg0N1owGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALfbVZrELqX7MUQ/+hRfBTXHsrLZfGwbnlEAe1m84iDcw7jfzVO0xkURkqWeEZ9L2My/q3oU+ozksqdddHFcHHaaDE8ZZkpPor3fg/RqPhsmdG/3EsmO7s6jXPIni45W73cFnUpsA/4YVywVXgE2B1pJ8OSX5Dq2f5sxrFfo8il4lL18ojidFtaye93AN6wRqDyEkfblRizormOE6Ci9dhOf0xPCLLXOa/JxZWzxLiYR1etoPVOLaQzgHlNkqG+Oc9nymojBAOg2Q4DMQMdqBmapLAVGbGfcdnSU+Dr32+802MohYFKZv+jQQtu/JWeJlK4ChM1ZRadEx53s9RDyaEsCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFPOXp0gaozGZdEOxMZk7dYmaHBTkMB0GA1UdDgQWBBTzl6dIGqMxmXRDsTGZO3WJmhwU5DANBgkqhkiG9w0BAQsFAAOCAQEAawwjtCdjJcwrPOiBxznsLgiNxP5a6oMbRu9f8S4jTiWBwcB4VbIRbd3oQ7ZcmVeaCtCrPFAmdEo93VtOvVgT0mynRaTWgf2eOJpHjXX3/JQFm2pKu7t+zVjs6oBDimP7QtVQHoHeT3/xhz8ZCtpWHe1vjls+EClG9IXtjKDNuj1Tc71SiGtSQQkajF1Gi99ALwsK/5AwROILlQWZ/yE/8UaLtr5nL5Y1tVZsYBl0jDS9J1EmZUhRrCXIlbupNbTvxxPyXW//qVPYYGXourvm9laBhKv4nL8AKC3D0s6czuNM/bf0ZRyMQZv9Yv3zLnf2OKqHv/V1Vqj02IYr1vxZKw==","attributes":{"enabled":true,"nbf":1575676127,"exp":1607299127,"created":1575676727,"updated":1575676727,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2354', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tqpkwzpvpr2hjgfe6bzzo2ux.vault.azure.net,
    -        /certificates/cert22ac150f/, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"8f94f016a7cc4c508b87d950e39c7e31"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1302'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      retry-after: '10'
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/certificates/cert22ac150f/pending?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/pending?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpioertyFdBUdJ0yO68/VTPrEiSayV618M9hfZWG1+8kk3hk+FZQOe6Qk5THxBUAXf6uFfeno4d6Q25+omfxUDI1ooMfLy0ygco5vEBD/eE6GG2iczm3GH9oGD4OEsY/Kldgw8mogOzYKwKqBNhsnbteIoos+N71qZGCfN3HVR2qAlE4U4ybgVuKdh9py6JuAVixRCkALW3n9Chs/JK/XRaQgtJTzHlh06hsE9TuwKwz/QH9gw8MPcn8T6206KjcR9Y+ej6tpCO8oq9+CUU2gu0+EQJlhzVGmy6Lu1bOLsUoHdEialugKfzgridWGP3MlT32IulPmsH0RRy9Hf1qVkCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBPvtzM4YCpjwO28mGO+ZiBpl9QiZBBsjnrP0RTQP06kpdTiiZelf/3Bo+4d5ezIy3tbMQCfmntTZhYYZxMcPYXEgnGpAZZoSviSTuK5frnentMRaR86C2MFHrWbc4QukuLAr5tSMjLtFDAQR+LAMLMpXLx+WlY50YlkpWqHPDSomRAH36DzO+GzFIcyLGiAkpGN9nEz+HEZnDoTIhHzIyRGtFo7uvSffSRS4gLd/Y4ahcL1pb7gNeKHF2raB67kSDTpJqZNxaAts8Ur3xqDD7KtoAoNIWar7y64RT25m6duU9DurqRdUiduzxZxDMfhLeaGy8GpdzhUCrapH0FmSN8","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert22ac150f","request_id":"8f94f016a7cc4c508b87d950e39c7e31"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1223'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/certificates/cert22ac150f/pending?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","kid":"https://vaultname.vault.azure.net/keys/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","sid":"https://vaultname.vault.azure.net/secrets/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","x5t":"_RMP-IRarcLrRwUN_NKnJA1L0YY","cer":"MIIDNjCCAh6gAwIBAgIQRgsk933sSg2j/1dVq/i+3DANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpioertyFdBUdJ0yO68/VTPrEiSayV618M9hfZWG1+8kk3hk+FZQOe6Qk5THxBUAXf6uFfeno4d6Q25+omfxUDI1ooMfLy0ygco5vEBD/eE6GG2iczm3GH9oGD4OEsY/Kldgw8mogOzYKwKqBNhsnbteIoos+N71qZGCfN3HVR2qAlE4U4ybgVuKdh9py6JuAVixRCkALW3n9Chs/JK/XRaQgtJTzHlh06hsE9TuwKwz/QH9gw8MPcn8T6206KjcR9Y+ej6tpCO8oq9+CUU2gu0+EQJlhzVGmy6Lu1bOLsUoHdEialugKfzgridWGP3MlT32IulPmsH0RRy9Hf1qVkCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFBr4fgRoVrBazW3KSc7NvA+iD50IMB0GA1UdDgQWBBQa+H4EaFawWs1tyknOzbwPog+dCDANBgkqhkiG9w0BAQsFAAOCAQEABFRHFUr6DCOZ4XqA9tuN8Zm3yhQPM+TYS/oD4xJXq+4Jez2yNiaLaJBUIRHMZ+ChdBH25o1Ehd+dYfqksZpDkx1F9JQwxhbASSNi5R7xB5PsL8hc+ASGlzJeWzavlyq0CMNd1D6IAsy/QcQ1jCiWfcOzHneczIheJJ4hmAzSGn68iz5lM/Z6Y+yk07ZHNNM2+FfyzcKLCdhKAcqNQxzaj+OtmPy1cAbf7YNOyOK5y0BIbRCrT1/cuAp43KVVcDSNRggRzx9zurt432DgCZouiRi/don9ayfFKtnz+wXd/eF34dMF4/RbtrlOLZu7MyN42w55UARUT+OzG8Pe7HmnVA==","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2366'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/certificates/cert22ac150f/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/pending?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpioertyFdBUdJ0yO68/VTPrEiSayV618M9hfZWG1+8kk3hk+FZQOe6Qk5THxBUAXf6uFfeno4d6Q25+omfxUDI1ooMfLy0ygco5vEBD/eE6GG2iczm3GH9oGD4OEsY/Kldgw8mogOzYKwKqBNhsnbteIoos+N71qZGCfN3HVR2qAlE4U4ybgVuKdh9py6JuAVixRCkALW3n9Chs/JK/XRaQgtJTzHlh06hsE9TuwKwz/QH9gw8MPcn8T6206KjcR9Y+ej6tpCO8oq9+CUU2gu0+EQJlhzVGmy6Lu1bOLsUoHdEialugKfzgridWGP3MlT32IulPmsH0RRy9Hf1qVkCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBPvtzM4YCpjwO28mGO+ZiBpl9QiZBBsjnrP0RTQP06kpdTiiZelf/3Bo+4d5ezIy3tbMQCfmntTZhYYZxMcPYXEgnGpAZZoSviSTuK5frnentMRaR86C2MFHrWbc4QukuLAr5tSMjLtFDAQR+LAMLMpXLx+WlY50YlkpWqHPDSomRAH36DzO+GzFIcyLGiAkpGN9nEz+HEZnDoTIhHzIyRGtFo7uvSffSRS4gLd/Y4ahcL1pb7gNeKHF2raB67kSDTpJqZNxaAts8Ur3xqDD7KtoAoNIWar7y64RT25m6duU9DurqRdUiduzxZxDMfhLeaGy8GpdzhUCrapH0FmSN8","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert22ac150f","request_id":"8f94f016a7cc4c508b87d950e39c7e31"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1223'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/certificates/cert22ac150f/pending?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","kid":"https://vaultname.vault.azure.net/keys/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","sid":"https://vaultname.vault.azure.net/secrets/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","x5t":"_RMP-IRarcLrRwUN_NKnJA1L0YY","cer":"MIIDNjCCAh6gAwIBAgIQRgsk933sSg2j/1dVq/i+3DANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpioertyFdBUdJ0yO68/VTPrEiSayV618M9hfZWG1+8kk3hk+FZQOe6Qk5THxBUAXf6uFfeno4d6Q25+omfxUDI1ooMfLy0ygco5vEBD/eE6GG2iczm3GH9oGD4OEsY/Kldgw8mogOzYKwKqBNhsnbteIoos+N71qZGCfN3HVR2qAlE4U4ybgVuKdh9py6JuAVixRCkALW3n9Chs/JK/XRaQgtJTzHlh06hsE9TuwKwz/QH9gw8MPcn8T6206KjcR9Y+ej6tpCO8oq9+CUU2gu0+EQJlhzVGmy6Lu1bOLsUoHdEialugKfzgridWGP3MlT32IulPmsH0RRy9Hf1qVkCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFBr4fgRoVrBazW3KSc7NvA+iD50IMB0GA1UdDgQWBBQa+H4EaFawWs1tyknOzbwPog+dCDANBgkqhkiG9w0BAQsFAAOCAQEABFRHFUr6DCOZ4XqA9tuN8Zm3yhQPM+TYS/oD4xJXq+4Jez2yNiaLaJBUIRHMZ+ChdBH25o1Ehd+dYfqksZpDkx1F9JQwxhbASSNi5R7xB5PsL8hc+ASGlzJeWzavlyq0CMNd1D6IAsy/QcQ1jCiWfcOzHneczIheJJ4hmAzSGn68iz5lM/Z6Y+yk07ZHNNM2+FfyzcKLCdhKAcqNQxzaj+OtmPy1cAbf7YNOyOK5y0BIbRCrT1/cuAp43KVVcDSNRggRzx9zurt432DgCZouiRi/don9ayfFKtnz+wXd/eF34dMF4/RbtrlOLZu7MyN42w55UARUT+OzG8Pe7HmnVA==","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2366'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/certificates/cert22ac150f/?api-version=7.1-preview
     - request:
         body: '{"tags": {"tag1": "updated_value1"}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['36']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '36'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92","kid":"https://vaultname.vault.azure.net/keys/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92","sid":"https://vaultname.vault.azure.net/secrets/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92","x5t":"c0wUUX0AjF-WN_GtyI79TQUagY0","cer":"MIIDNjCCAh6gAwIBAgIQS+kna5WITi6x95XIxSdO/DANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDg0N1oXDTIwMTIwNjIzNTg0N1owGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALfbVZrELqX7MUQ/+hRfBTXHsrLZfGwbnlEAe1m84iDcw7jfzVO0xkURkqWeEZ9L2My/q3oU+ozksqdddHFcHHaaDE8ZZkpPor3fg/RqPhsmdG/3EsmO7s6jXPIni45W73cFnUpsA/4YVywVXgE2B1pJ8OSX5Dq2f5sxrFfo8il4lL18ojidFtaye93AN6wRqDyEkfblRizormOE6Ci9dhOf0xPCLLXOa/JxZWzxLiYR1etoPVOLaQzgHlNkqG+Oc9nymojBAOg2Q4DMQMdqBmapLAVGbGfcdnSU+Dr32+802MohYFKZv+jQQtu/JWeJlK4ChM1ZRadEx53s9RDyaEsCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFPOXp0gaozGZdEOxMZk7dYmaHBTkMB0GA1UdDgQWBBTzl6dIGqMxmXRDsTGZO3WJmhwU5DANBgkqhkiG9w0BAQsFAAOCAQEAawwjtCdjJcwrPOiBxznsLgiNxP5a6oMbRu9f8S4jTiWBwcB4VbIRbd3oQ7ZcmVeaCtCrPFAmdEo93VtOvVgT0mynRaTWgf2eOJpHjXX3/JQFm2pKu7t+zVjs6oBDimP7QtVQHoHeT3/xhz8ZCtpWHe1vjls+EClG9IXtjKDNuj1Tc71SiGtSQQkajF1Gi99ALwsK/5AwROILlQWZ/yE/8UaLtr5nL5Y1tVZsYBl0jDS9J1EmZUhRrCXIlbupNbTvxxPyXW//qVPYYGXourvm9laBhKv4nL8AKC3D0s6czuNM/bf0ZRyMQZv9Yv3zLnf2OKqHv/V1Vqj02IYr1vxZKw==","attributes":{"enabled":true,"nbf":1575676127,"exp":1607299127,"created":1575676727,"updated":1575676743,"recoveryLevel":"Purgeable"},"tags":{"tag1":"updated_value1"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2387', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tqpkwzpvpr2hjgfe6bzzo2ux.vault.azure.net,
    -        /certificates/cert22ac150f/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","kid":"https://vaultname.vault.azure.net/keys/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","sid":"https://vaultname.vault.azure.net/secrets/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","x5t":"_RMP-IRarcLrRwUN_NKnJA1L0YY","cer":"MIIDNjCCAh6gAwIBAgIQRgsk933sSg2j/1dVq/i+3DANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpioertyFdBUdJ0yO68/VTPrEiSayV618M9hfZWG1+8kk3hk+FZQOe6Qk5THxBUAXf6uFfeno4d6Q25+omfxUDI1ooMfLy0ygco5vEBD/eE6GG2iczm3GH9oGD4OEsY/Kldgw8mogOzYKwKqBNhsnbteIoos+N71qZGCfN3HVR2qAlE4U4ybgVuKdh9py6JuAVixRCkALW3n9Chs/JK/XRaQgtJTzHlh06hsE9TuwKwz/QH9gw8MPcn8T6206KjcR9Y+ej6tpCO8oq9+CUU2gu0+EQJlhzVGmy6Lu1bOLsUoHdEialugKfzgridWGP3MlT32IulPmsH0RRy9Hf1qVkCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFBr4fgRoVrBazW3KSc7NvA+iD50IMB0GA1UdDgQWBBQa+H4EaFawWs1tyknOzbwPog+dCDANBgkqhkiG9w0BAQsFAAOCAQEABFRHFUr6DCOZ4XqA9tuN8Zm3yhQPM+TYS/oD4xJXq+4Jez2yNiaLaJBUIRHMZ+ChdBH25o1Ehd+dYfqksZpDkx1F9JQwxhbASSNi5R7xB5PsL8hc+ASGlzJeWzavlyq0CMNd1D6IAsy/QcQ1jCiWfcOzHneczIheJJ4hmAzSGn68iz5lM/Z6Y+yk07ZHNNM2+FfyzcKLCdhKAcqNQxzaj+OtmPy1cAbf7YNOyOK5y0BIbRCrT1/cuAp43KVVcDSNRggRzx9zurt432DgCZouiRi/don9ayfFKtnz+wXd/eF34dMF4/RbtrlOLZu7MyN42w55UARUT+OzG8Pe7HmnVA==","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453275,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"tag1":"updated_value1"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2399'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/certificates/cert22ac150f/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92","kid":"https://vaultname.vault.azure.net/keys/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92","sid":"https://vaultname.vault.azure.net/secrets/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92","x5t":"c0wUUX0AjF-WN_GtyI79TQUagY0","cer":"MIIDNjCCAh6gAwIBAgIQS+kna5WITi6x95XIxSdO/DANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDg0N1oXDTIwMTIwNjIzNTg0N1owGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALfbVZrELqX7MUQ/+hRfBTXHsrLZfGwbnlEAe1m84iDcw7jfzVO0xkURkqWeEZ9L2My/q3oU+ozksqdddHFcHHaaDE8ZZkpPor3fg/RqPhsmdG/3EsmO7s6jXPIni45W73cFnUpsA/4YVywVXgE2B1pJ8OSX5Dq2f5sxrFfo8il4lL18ojidFtaye93AN6wRqDyEkfblRizormOE6Ci9dhOf0xPCLLXOa/JxZWzxLiYR1etoPVOLaQzgHlNkqG+Oc9nymojBAOg2Q4DMQMdqBmapLAVGbGfcdnSU+Dr32+802MohYFKZv+jQQtu/JWeJlK4ChM1ZRadEx53s9RDyaEsCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFPOXp0gaozGZdEOxMZk7dYmaHBTkMB0GA1UdDgQWBBTzl6dIGqMxmXRDsTGZO3WJmhwU5DANBgkqhkiG9w0BAQsFAAOCAQEAawwjtCdjJcwrPOiBxznsLgiNxP5a6oMbRu9f8S4jTiWBwcB4VbIRbd3oQ7ZcmVeaCtCrPFAmdEo93VtOvVgT0mynRaTWgf2eOJpHjXX3/JQFm2pKu7t+zVjs6oBDimP7QtVQHoHeT3/xhz8ZCtpWHe1vjls+EClG9IXtjKDNuj1Tc71SiGtSQQkajF1Gi99ALwsK/5AwROILlQWZ/yE/8UaLtr5nL5Y1tVZsYBl0jDS9J1EmZUhRrCXIlbupNbTvxxPyXW//qVPYYGXourvm9laBhKv4nL8AKC3D0s6czuNM/bf0ZRyMQZv9Yv3zLnf2OKqHv/V1Vqj02IYr1vxZKw==","attributes":{"enabled":true,"nbf":1575676127,"exp":1607299127,"created":1575676727,"updated":1575676743,"recoveryLevel":"Purgeable"},"tags":{"tag1":"updated_value1"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2387', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tqpkwzpvpr2hjgfe6bzzo2ux.vault.azure.net,
    -        /certificates/cert22ac150f, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: cert22ac150f/versions/e4ca9c20beb5427980ce0961c7fe7d92"}}'}
    -    headers: {cache-control: no-cache, content-length: '130', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tqpkwzpvpr2hjgfe6bzzo2ux.vault.azure.net,
    -        /certificates/cert22ac150f/e4ca9c20beb5427980ce0961c7fe7d92, api-version=7.0,
    -        '']
    +    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert22ac150f","deletedDate":1583453275,"scheduledPurgeDate":1591229275,"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","kid":"https://vaultname.vault.azure.net/keys/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","sid":"https://vaultname.vault.azure.net/secrets/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","x5t":"_RMP-IRarcLrRwUN_NKnJA1L0YY","cer":"MIIDNjCCAh6gAwIBAgIQRgsk933sSg2j/1dVq/i+3DANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpioertyFdBUdJ0yO68/VTPrEiSayV618M9hfZWG1+8kk3hk+FZQOe6Qk5THxBUAXf6uFfeno4d6Q25+omfxUDI1ooMfLy0ygco5vEBD/eE6GG2iczm3GH9oGD4OEsY/Kldgw8mogOzYKwKqBNhsnbteIoos+N71qZGCfN3HVR2qAlE4U4ybgVuKdh9py6JuAVixRCkALW3n9Chs/JK/XRaQgtJTzHlh06hsE9TuwKwz/QH9gw8MPcn8T6206KjcR9Y+ej6tpCO8oq9+CUU2gu0+EQJlhzVGmy6Lu1bOLsUoHdEialugKfzgridWGP3MlT32IulPmsH0RRy9Hf1qVkCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFBr4fgRoVrBazW3KSc7NvA+iD50IMB0GA1UdDgQWBBQa+H4EaFawWs1tyknOzbwPog+dCDANBgkqhkiG9w0BAQsFAAOCAQEABFRHFUr6DCOZ4XqA9tuN8Zm3yhQPM+TYS/oD4xJXq+4Jez2yNiaLaJBUIRHMZ+ChdBH25o1Ehd+dYfqksZpDkx1F9JQwxhbASSNi5R7xB5PsL8hc+ASGlzJeWzavlyq0CMNd1D6IAsy/QcQ1jCiWfcOzHneczIheJJ4hmAzSGn68iz5lM/Z6Y+yk07ZHNNM2+FfyzcKLCdhKAcqNQxzaj+OtmPy1cAbf7YNOyOK5y0BIbRCrT1/cuAp43KVVcDSNRggRzx9zurt432DgCZouiRi/don9ayfFKtnz+wXd/eF34dMF4/RbtrlOLZu7MyN42w55UARUT+OzG8Pe7HmnVA==","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453275,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"tag1":"updated_value1"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2553'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/certificates/cert22ac150f?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert22ac150f"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '96'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert22ac150f"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '96'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert22ac150f"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '96'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert22ac150f"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '96'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert22ac150f"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '96'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:03 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert22ac150f"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '96'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert22ac150f"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '96'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:07 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert22ac150f"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '96'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert22ac150f"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '96'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert22ac150f","deletedDate":1583453275,"scheduledPurgeDate":1591229275,"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","kid":"https://vaultname.vault.azure.net/keys/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","sid":"https://vaultname.vault.azure.net/secrets/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7","x5t":"_RMP-IRarcLrRwUN_NKnJA1L0YY","cer":"MIIDNjCCAh6gAwIBAgIQRgsk933sSg2j/1dVq/i+3DANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1MloXDTIxMDMwNjAwMDc1MlowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpioertyFdBUdJ0yO68/VTPrEiSayV618M9hfZWG1+8kk3hk+FZQOe6Qk5THxBUAXf6uFfeno4d6Q25+omfxUDI1ooMfLy0ygco5vEBD/eE6GG2iczm3GH9oGD4OEsY/Kldgw8mogOzYKwKqBNhsnbteIoos+N71qZGCfN3HVR2qAlE4U4ybgVuKdh9py6JuAVixRCkALW3n9Chs/JK/XRaQgtJTzHlh06hsE9TuwKwz/QH9gw8MPcn8T6206KjcR9Y+ej6tpCO8oq9+CUU2gu0+EQJlhzVGmy6Lu1bOLsUoHdEialugKfzgridWGP3MlT32IulPmsH0RRy9Hf1qVkCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFBr4fgRoVrBazW3KSc7NvA+iD50IMB0GA1UdDgQWBBQa+H4EaFawWs1tyknOzbwPog+dCDANBgkqhkiG9w0BAQsFAAOCAQEABFRHFUr6DCOZ4XqA9tuN8Zm3yhQPM+TYS/oD4xJXq+4Jez2yNiaLaJBUIRHMZ+ChdBH25o1Ehd+dYfqksZpDkx1F9JQwxhbASSNi5R7xB5PsL8hc+ASGlzJeWzavlyq0CMNd1D6IAsy/QcQ1jCiWfcOzHneczIheJJ4hmAzSGn68iz5lM/Z6Y+yk07ZHNNM2+FfyzcKLCdhKAcqNQxzaj+OtmPy1cAbf7YNOyOK5y0BIbRCrT1/cuAp43KVVcDSNRggRzx9zurt432DgCZouiRi/don9ayfFKtnz+wXd/eF34dMF4/RbtrlOLZu7MyN42w55UARUT+OzG8Pe7HmnVA==","attributes":{"enabled":true,"nbf":1583452672,"exp":1614989272,"created":1583453272,"updated":1583453275,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"tag1":"updated_value1"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert22ac150f/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2553'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/deletedcertificates/cert22ac150f?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert22ac150f/versions/324119b847be4f22b204d4a8f3bb0dd7"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '130'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://wgxxn74mhxasglkx4bybrsqu.vault.azure.net/certificates/cert22ac150f/324119b847be4f22b204d4a8f3bb0dd7?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_get_pending_certificate_signing_request.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_get_pending_certificate_signing_request.yaml
    index 2a7dcdf183f6..5264cb5b86c1 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_get_pending_certificate_signing_request.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_get_pending_certificate_signing_request.yaml
    @@ -2,206 +2,426 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, hsqtj2kqoyug5mggrm527mbz.vault.azure.net,
    -        /certificates/unknownIssuerCert/create, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://uobflncfdbix4ketdm6je2me.vault.azure.net/certificates/unknownIssuerCert/create?api-version=7.1-preview
     - request:
         body: '{"policy": {"x509_props": {"subject": "CN=DefaultPolicy", "sans": {}},
           "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['99']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '99'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKakev7PLiczRsVQ/c3JCRDuP3eGhnUp0mdYQQDh7nAazUstuYPbC9RNTZD9eMvjrF1tcDDPNa++tZAKIZ4Ne9dmXSI6/YuvnhuhXlN5zTjtEKZHbGuTKhW1nku0MvZ9sLz94+G0f7992TeKUS7zuOODOhfg+wpV9w5ClNmDjSPwfrDMhtNjx27XuKEtB01T9OlCFBSOAx4+hhEWitAw4hkK5AD5aTQFRJxiXp8MWYKt7PBbB/vbL2C/82hqbm6mQgZEQEYdG5EiV5+OOC1BBAUrxHMHiV6H/TFB1+mh/tWRjXJqCR7gDNp5tIhOsyz+PKuUGH4dCS68SzLzGSPoDzcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQB+nzeKQA4hek5F8VtvI11zRH8AfCD93Fj0HhVZkd+mEA1xOu0PJ/+wLWUJ3ckbNP7ZORgJRzeWypCosM39tzpWjV5R/PjfkLDD2xKknfA7wff2PPZJtzKXr75m8TycW3iT7eOI2hLGmvGrOrn7DcjvwIsdUOqeo2P9ghD13HuMYPfDJvGQo+eHpNqVe6VolmdK7bSjI0yxHKBCiW4NKnffd6tDWXU2DnfgeSn/C9ziR4KOZVKL9aTvbmpQl2RNeOhF8M2MWBMqRSxvS6gddWkSqqpqOyE4YUQ15O1qdmFfklHZDLomEDxhB9kpnIZc/50UIrlRE1qEE5hh17dUj27s","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTwyf02qiJ47sjp4s+lXgaK2bTXkXmyT8U49UDkY+9c8uHGwF3pNPMw4GdMV+v0ofYZzo/4G6udgcgzTRPco2TcvyrUumcyAYi3SM4YiB0q+RDQD0vBaPu+qQSERiu+d30acXuIMzzuxpf408kf2J80GlBdCBv9j97WKg6+rpn/53rsRmGzytd+HAkHDtJXXLE2CpaTkAg1SRxNhuNktfEyHoTJFOoxfjb+AvqlVENy+PWOaa82t+XQJD4q4CJ+GZCVTVe2r1bbt10B/wWmPmh/X3z7kle9TouKMmf5/9ZeMzFfqCJ1buS4LbQqMS6p08Q8oEX+D3VPjnxda+bBedUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBc0WGbFObsF29eshzt0RngYQ7DILAciKoi1WCOMCLRoggBPcoroOi20RJmL+WeDugbB9MihxLfVFn/SSwl5I8mJQ57nBAZmVu4zO3kiKiCPB/RMAbT0joFOHpsto5ea5yu2xv7/bV+NdFCQrezWWuFHyQLZELHU8yqpVk7vfGsXCgdOOHJU57ncZqX82X2xuUW+YmGsO3oz/Kk9BnquRRP/d8pYrjOIzUrRqkaryDyW3Y98jr8qiGo20L+M1rIDc+k0SOBYJDVjqXbbgLyKGd2bGg2reYewtpfmidTBqQEY5Z8WJ30X60TChA+0+qTFpa5TP/LDAjuNyNOUOO/d412","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"5170a7aad9ce494fba3c4c2bbe645d13"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"18313fdff76546d19320083619722326"}'
         headers:
           cache-control: no-cache
           content-length: '1307'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:04 GMT
    +      date: Fri, 06 Mar 2020 00:07:35 GMT
           expires: '-1'
    -      location: [h, t, t, p, s, ':', /, /, h, s, q, t, j, '2', k, q, o, y, u, g, '5',
    -        m, g, g, r, m, '5', '2', '7', m, b, z, ., v, a, u, l, t, ., a, z, u, r, e,
    -        ., n, e, t, /, c, e, r, t, i, f, i, c, a, t, e, s, /, u, n, k, n, o, w, n,
    -        I, s, s, u, e, r, C, e, r, t, /, p, e, n, d, i, n, g, '?', a, p, i, '-', v,
    -        e, r, s, i, o, n, '=', '7', ., '0', '&', r, e, q, u, e, s, t, _, i, d, '=',
    -        '5', '1', '7', '0', a, '7', a, a, d, '9', c, e, '4', '9', '4', f, b, a, '3',
    -        c, '4', c, '2', b, b, e, '6', '4', '5', d, '1', '3']
    +      location:
    +      - h
    +      - t
    +      - t
    +      - p
    +      - s
    +      - ':'
    +      - /
    +      - /
    +      - u
    +      - o
    +      - b
    +      - f
    +      - l
    +      - n
    +      - c
    +      - f
    +      - d
    +      - b
    +      - i
    +      - x
    +      - '4'
    +      - k
    +      - e
    +      - t
    +      - d
    +      - m
    +      - '6'
    +      - j
    +      - e
    +      - '2'
    +      - m
    +      - e
    +      - .
    +      - v
    +      - a
    +      - u
    +      - l
    +      - t
    +      - .
    +      - a
    +      - z
    +      - u
    +      - r
    +      - e
    +      - .
    +      - n
    +      - e
    +      - t
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - s
    +      - /
    +      - u
    +      - n
    +      - k
    +      - n
    +      - o
    +      - w
    +      - n
    +      - I
    +      - s
    +      - s
    +      - u
    +      - e
    +      - r
    +      - C
    +      - e
    +      - r
    +      - t
    +      - /
    +      - p
    +      - e
    +      - n
    +      - d
    +      - i
    +      - n
    +      - g
    +      - '?'
    +      - a
    +      - p
    +      - i
    +      - '-'
    +      - v
    +      - e
    +      - r
    +      - s
    +      - i
    +      - o
    +      - n
    +      - '='
    +      - '7'
    +      - .
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
    +      - '&'
    +      - r
    +      - e
    +      - q
    +      - u
    +      - e
    +      - s
    +      - t
    +      - _
    +      - i
    +      - d
    +      - '='
    +      - '1'
    +      - '8'
    +      - '3'
    +      - '1'
    +      - '3'
    +      - f
    +      - d
    +      - f
    +      - f
    +      - '7'
    +      - '6'
    +      - '5'
    +      - '4'
    +      - '6'
    +      - d
    +      - '1'
    +      - '9'
    +      - '3'
    +      - '2'
    +      - '0'
    +      - '0'
    +      - '8'
    +      - '3'
    +      - '6'
    +      - '1'
    +      - '9'
    +      - '7'
    +      - '2'
    +      - '2'
    +      - '3'
    +      - '2'
    +      - '6'
           pragma: no-cache
           retry-after: '10'
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
    -    status: {code: 202, message: Accepted}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, hsqtj2kqoyug5mggrm527mbz.vault.azure.net,
    -        /certificates/unknownIssuerCert/create, api-version=7.0, '']
    +    status:
    +      code: 202
    +      message: Accepted
    +    url: https://uobflncfdbix4ketdm6je2me.vault.azure.net/certificates/unknownIssuerCert/create?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKakev7PLiczRsVQ/c3JCRDuP3eGhnUp0mdYQQDh7nAazUstuYPbC9RNTZD9eMvjrF1tcDDPNa++tZAKIZ4Ne9dmXSI6/YuvnhuhXlN5zTjtEKZHbGuTKhW1nku0MvZ9sLz94+G0f7992TeKUS7zuOODOhfg+wpV9w5ClNmDjSPwfrDMhtNjx27XuKEtB01T9OlCFBSOAx4+hhEWitAw4hkK5AD5aTQFRJxiXp8MWYKt7PBbB/vbL2C/82hqbm6mQgZEQEYdG5EiV5+OOC1BBAUrxHMHiV6H/TFB1+mh/tWRjXJqCR7gDNp5tIhOsyz+PKuUGH4dCS68SzLzGSPoDzcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQB+nzeKQA4hek5F8VtvI11zRH8AfCD93Fj0HhVZkd+mEA1xOu0PJ/+wLWUJ3ckbNP7ZORgJRzeWypCosM39tzpWjV5R/PjfkLDD2xKknfA7wff2PPZJtzKXr75m8TycW3iT7eOI2hLGmvGrOrn7DcjvwIsdUOqeo2P9ghD13HuMYPfDJvGQo+eHpNqVe6VolmdK7bSjI0yxHKBCiW4NKnffd6tDWXU2DnfgeSn/C9ziR4KOZVKL9aTvbmpQl2RNeOhF8M2MWBMqRSxvS6gddWkSqqpqOyE4YUQ15O1qdmFfklHZDLomEDxhB9kpnIZc/50UIrlRE1qEE5hh17dUj27s","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTwyf02qiJ47sjp4s+lXgaK2bTXkXmyT8U49UDkY+9c8uHGwF3pNPMw4GdMV+v0ofYZzo/4G6udgcgzTRPco2TcvyrUumcyAYi3SM4YiB0q+RDQD0vBaPu+qQSERiu+d30acXuIMzzuxpf408kf2J80GlBdCBv9j97WKg6+rpn/53rsRmGzytd+HAkHDtJXXLE2CpaTkAg1SRxNhuNktfEyHoTJFOoxfjb+AvqlVENy+PWOaa82t+XQJD4q4CJ+GZCVTVe2r1bbt10B/wWmPmh/X3z7kle9TouKMmf5/9ZeMzFfqCJ1buS4LbQqMS6p08Q8oEX+D3VPjnxda+bBedUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBc0WGbFObsF29eshzt0RngYQ7DILAciKoi1WCOMCLRoggBPcoroOi20RJmL+WeDugbB9MihxLfVFn/SSwl5I8mJQ57nBAZmVu4zO3kiKiCPB/RMAbT0joFOHpsto5ea5yu2xv7/bV+NdFCQrezWWuFHyQLZELHU8yqpVk7vfGsXCgdOOHJU57ncZqX82X2xuUW+YmGsO3oz/Kk9BnquRRP/d8pYrjOIzUrRqkaryDyW3Y98jr8qiGo20L+M1rIDc+k0SOBYJDVjqXbbgLyKGd2bGg2reYewtpfmidTBqQEY5Z8WJ30X60TChA+0+qTFpa5TP/LDAjuNyNOUOO/d412","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"5170a7aad9ce494fba3c4c2bbe645d13"}'}
    -    headers: {cache-control: no-cache, content-length: '1307', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:04 GMT', expires: '-1', pragma: no-cache,
    -      retry-after: '10', server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, hsqtj2kqoyug5mggrm527mbz.vault.azure.net,
    -        /certificates/unknownIssuerCert/pending, api-version=7.0, '']
    -- request:
    -    body: null
    +        time based on the issuer provider. Please check again later.","request_id":"18313fdff76546d19320083619722326"}'
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKakev7PLiczRsVQ/c3JCRDuP3eGhnUp0mdYQQDh7nAazUstuYPbC9RNTZD9eMvjrF1tcDDPNa++tZAKIZ4Ne9dmXSI6/YuvnhuhXlN5zTjtEKZHbGuTKhW1nku0MvZ9sLz94+G0f7992TeKUS7zuOODOhfg+wpV9w5ClNmDjSPwfrDMhtNjx27XuKEtB01T9OlCFBSOAx4+hhEWitAw4hkK5AD5aTQFRJxiXp8MWYKt7PBbB/vbL2C/82hqbm6mQgZEQEYdG5EiV5+OOC1BBAUrxHMHiV6H/TFB1+mh/tWRjXJqCR7gDNp5tIhOsyz+PKuUGH4dCS68SzLzGSPoDzcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQB+nzeKQA4hek5F8VtvI11zRH8AfCD93Fj0HhVZkd+mEA1xOu0PJ/+wLWUJ3ckbNP7ZORgJRzeWypCosM39tzpWjV5R/PjfkLDD2xKknfA7wff2PPZJtzKXr75m8TycW3iT7eOI2hLGmvGrOrn7DcjvwIsdUOqeo2P9ghD13HuMYPfDJvGQo+eHpNqVe6VolmdK7bSjI0yxHKBCiW4NKnffd6tDWXU2DnfgeSn/C9ziR4KOZVKL9aTvbmpQl2RNeOhF8M2MWBMqRSxvS6gddWkSqqpqOyE4YUQ15O1qdmFfklHZDLomEDxhB9kpnIZc/50UIrlRE1qEE5hh17dUj27s","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"5170a7aad9ce494fba3c4c2bbe645d13"}'}
    -    headers: {cache-control: no-cache, content-length: '1307', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:14 GMT', expires: '-1', pragma: no-cache,
    -      retry-after: '10', server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, hsqtj2kqoyug5mggrm527mbz.vault.azure.net,
    -        /certificates/unknownIssuerCert/pending, api-version=7.0, '']
    +      cache-control: no-cache
    +      content-length: '1307'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      retry-after: '10'
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://uobflncfdbix4ketdm6je2me.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKakev7PLiczRsVQ/c3JCRDuP3eGhnUp0mdYQQDh7nAazUstuYPbC9RNTZD9eMvjrF1tcDDPNa++tZAKIZ4Ne9dmXSI6/YuvnhuhXlN5zTjtEKZHbGuTKhW1nku0MvZ9sLz94+G0f7992TeKUS7zuOODOhfg+wpV9w5ClNmDjSPwfrDMhtNjx27XuKEtB01T9OlCFBSOAx4+hhEWitAw4hkK5AD5aTQFRJxiXp8MWYKt7PBbB/vbL2C/82hqbm6mQgZEQEYdG5EiV5+OOC1BBAUrxHMHiV6H/TFB1+mh/tWRjXJqCR7gDNp5tIhOsyz+PKuUGH4dCS68SzLzGSPoDzcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQB+nzeKQA4hek5F8VtvI11zRH8AfCD93Fj0HhVZkd+mEA1xOu0PJ/+wLWUJ3ckbNP7ZORgJRzeWypCosM39tzpWjV5R/PjfkLDD2xKknfA7wff2PPZJtzKXr75m8TycW3iT7eOI2hLGmvGrOrn7DcjvwIsdUOqeo2P9ghD13HuMYPfDJvGQo+eHpNqVe6VolmdK7bSjI0yxHKBCiW4NKnffd6tDWXU2DnfgeSn/C9ziR4KOZVKL9aTvbmpQl2RNeOhF8M2MWBMqRSxvS6gddWkSqqpqOyE4YUQ15O1qdmFfklHZDLomEDxhB9kpnIZc/50UIrlRE1qEE5hh17dUj27s","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTwyf02qiJ47sjp4s+lXgaK2bTXkXmyT8U49UDkY+9c8uHGwF3pNPMw4GdMV+v0ofYZzo/4G6udgcgzTRPco2TcvyrUumcyAYi3SM4YiB0q+RDQD0vBaPu+qQSERiu+d30acXuIMzzuxpf408kf2J80GlBdCBv9j97WKg6+rpn/53rsRmGzytd+HAkHDtJXXLE2CpaTkAg1SRxNhuNktfEyHoTJFOoxfjb+AvqlVENy+PWOaa82t+XQJD4q4CJ+GZCVTVe2r1bbt10B/wWmPmh/X3z7kle9TouKMmf5/9ZeMzFfqCJ1buS4LbQqMS6p08Q8oEX+D3VPjnxda+bBedUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBc0WGbFObsF29eshzt0RngYQ7DILAciKoi1WCOMCLRoggBPcoroOi20RJmL+WeDugbB9MihxLfVFn/SSwl5I8mJQ57nBAZmVu4zO3kiKiCPB/RMAbT0joFOHpsto5ea5yu2xv7/bV+NdFCQrezWWuFHyQLZELHU8yqpVk7vfGsXCgdOOHJU57ncZqX82X2xuUW+YmGsO3oz/Kk9BnquRRP/d8pYrjOIzUrRqkaryDyW3Y98jr8qiGo20L+M1rIDc+k0SOBYJDVjqXbbgLyKGd2bGg2reYewtpfmidTBqQEY5Z8WJ30X60TChA+0+qTFpa5TP/LDAjuNyNOUOO/d412","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"5170a7aad9ce494fba3c4c2bbe645d13"}'}
    -    headers: {cache-control: no-cache, content-length: '1307', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:24 GMT', expires: '-1', pragma: no-cache,
    -      retry-after: '10', server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, hsqtj2kqoyug5mggrm527mbz.vault.azure.net,
    -        /certificates/unknownIssuerCert/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"18313fdff76546d19320083619722326"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1307'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      retry-after: '10'
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://uobflncfdbix4ketdm6je2me.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKakev7PLiczRsVQ/c3JCRDuP3eGhnUp0mdYQQDh7nAazUstuYPbC9RNTZD9eMvjrF1tcDDPNa++tZAKIZ4Ne9dmXSI6/YuvnhuhXlN5zTjtEKZHbGuTKhW1nku0MvZ9sLz94+G0f7992TeKUS7zuOODOhfg+wpV9w5ClNmDjSPwfrDMhtNjx27XuKEtB01T9OlCFBSOAx4+hhEWitAw4hkK5AD5aTQFRJxiXp8MWYKt7PBbB/vbL2C/82hqbm6mQgZEQEYdG5EiV5+OOC1BBAUrxHMHiV6H/TFB1+mh/tWRjXJqCR7gDNp5tIhOsyz+PKuUGH4dCS68SzLzGSPoDzcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQB+nzeKQA4hek5F8VtvI11zRH8AfCD93Fj0HhVZkd+mEA1xOu0PJ/+wLWUJ3ckbNP7ZORgJRzeWypCosM39tzpWjV5R/PjfkLDD2xKknfA7wff2PPZJtzKXr75m8TycW3iT7eOI2hLGmvGrOrn7DcjvwIsdUOqeo2P9ghD13HuMYPfDJvGQo+eHpNqVe6VolmdK7bSjI0yxHKBCiW4NKnffd6tDWXU2DnfgeSn/C9ziR4KOZVKL9aTvbmpQl2RNeOhF8M2MWBMqRSxvS6gddWkSqqpqOyE4YUQ15O1qdmFfklHZDLomEDxhB9kpnIZc/50UIrlRE1qEE5hh17dUj27s","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert","request_id":"5170a7aad9ce494fba3c4c2bbe645d13"}'}
    -    headers: {cache-control: no-cache, content-length: '1233', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, hsqtj2kqoyug5mggrm527mbz.vault.azure.net,
    -        /certificates/unknownIssuerCert/pending, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTwyf02qiJ47sjp4s+lXgaK2bTXkXmyT8U49UDkY+9c8uHGwF3pNPMw4GdMV+v0ofYZzo/4G6udgcgzTRPco2TcvyrUumcyAYi3SM4YiB0q+RDQD0vBaPu+qQSERiu+d30acXuIMzzuxpf408kf2J80GlBdCBv9j97WKg6+rpn/53rsRmGzytd+HAkHDtJXXLE2CpaTkAg1SRxNhuNktfEyHoTJFOoxfjb+AvqlVENy+PWOaa82t+XQJD4q4CJ+GZCVTVe2r1bbt10B/wWmPmh/X3z7kle9TouKMmf5/9ZeMzFfqCJ1buS4LbQqMS6p08Q8oEX+D3VPjnxda+bBedUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBc0WGbFObsF29eshzt0RngYQ7DILAciKoi1WCOMCLRoggBPcoroOi20RJmL+WeDugbB9MihxLfVFn/SSwl5I8mJQ57nBAZmVu4zO3kiKiCPB/RMAbT0joFOHpsto5ea5yu2xv7/bV+NdFCQrezWWuFHyQLZELHU8yqpVk7vfGsXCgdOOHJU57ncZqX82X2xuUW+YmGsO3oz/Kk9BnquRRP/d8pYrjOIzUrRqkaryDyW3Y98jr8qiGo20L+M1rIDc+k0SOBYJDVjqXbbgLyKGd2bGg2reYewtpfmidTBqQEY5Z8WJ30X60TChA+0+qTFpa5TP/LDAjuNyNOUOO/d412","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert","request_id":"18313fdff76546d19320083619722326"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1233'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://uobflncfdbix4ketdm6je2me.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/a9978df1dbc745ffb8ccdbdd88c21a8e","kid":"https://vaultname.vault.azure.net/keys/unknownIssuerCert/a9978df1dbc745ffb8ccdbdd88c21a8e","sid":"https://vaultname.vault.azure.net/secrets/unknownIssuerCert/a9978df1dbc745ffb8ccdbdd88c21a8e","x5t":"DLDPQBDb04S3O0r9mrB0Mvzo-Hk","cer":"MIIDNjCCAh6gAwIBAgIQBmeRHXDFRi+Z9n8QcS+u2jANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDgyNVoXDTIwMTIwNjIzNTgyNVowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKakev7PLiczRsVQ/c3JCRDuP3eGhnUp0mdYQQDh7nAazUstuYPbC9RNTZD9eMvjrF1tcDDPNa++tZAKIZ4Ne9dmXSI6/YuvnhuhXlN5zTjtEKZHbGuTKhW1nku0MvZ9sLz94+G0f7992TeKUS7zuOODOhfg+wpV9w5ClNmDjSPwfrDMhtNjx27XuKEtB01T9OlCFBSOAx4+hhEWitAw4hkK5AD5aTQFRJxiXp8MWYKt7PBbB/vbL2C/82hqbm6mQgZEQEYdG5EiV5+OOC1BBAUrxHMHiV6H/TFB1+mh/tWRjXJqCR7gDNp5tIhOsyz+PKuUGH4dCS68SzLzGSPoDzcCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFPeaHWjXVklWizsNkSrMk4Iv0SWnMB0GA1UdDgQWBBT3mh1o11ZJVos7DZEqzJOCL9ElpzANBgkqhkiG9w0BAQsFAAOCAQEAJUcF+nVIGWDurf8ewedR552mq5TAuPQ2EdQ/aU2AOvadV8Mirm1HsFiNUoYu3sF0m9DPEoDDHIaPFDu7u28N8oreTqUUvb/zZdmRXdOoKlSOGyefVtA5t12IIgpBl8DD4xBavyq786JZ874DfnSCukWpdPq1cF+p/e5AkOXZp+b9q1R/EidPgDpLLaA6KaKdMfiXFyYnXUM9RQHmcfQbRJ4WKCVW9qipy7xnCaQs889noTv0dexkAiSZhJOHrbWPoSD3ex67jiGNyCcrKTjcreS7uLQTetplak/47oH+Z3/jZfWnoHjKQ1jxszZah90MDNSP0BxNbHEd/7s5LgLhIg==","attributes":{"enabled":true,"nbf":1575676105,"exp":1607299105,"created":1575676705,"updated":1575676705,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676684,"updated":1575676684}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2379', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, hsqtj2kqoyug5mggrm527mbz.vault.azure.net,
    -        /certificates/unknownIssuerCert/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/4d829a92f4654157aea469d39f9cd3b8","kid":"https://vaultname.vault.azure.net/keys/unknownIssuerCert/4d829a92f4654157aea469d39f9cd3b8","sid":"https://vaultname.vault.azure.net/secrets/unknownIssuerCert/4d829a92f4654157aea469d39f9cd3b8","x5t":"O5AWGHOfBa9iADnjGs8DJm0_iPE","cer":"MIIDNjCCAh6gAwIBAgIQQavYO/3oQTy4PjUbC4jCpDANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTc1M1oXDTIxMDMwNjAwMDc1M1owGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTwyf02qiJ47sjp4s+lXgaK2bTXkXmyT8U49UDkY+9c8uHGwF3pNPMw4GdMV+v0ofYZzo/4G6udgcgzTRPco2TcvyrUumcyAYi3SM4YiB0q+RDQD0vBaPu+qQSERiu+d30acXuIMzzuxpf408kf2J80GlBdCBv9j97WKg6+rpn/53rsRmGzytd+HAkHDtJXXLE2CpaTkAg1SRxNhuNktfEyHoTJFOoxfjb+AvqlVENy+PWOaa82t+XQJD4q4CJ+GZCVTVe2r1bbt10B/wWmPmh/X3z7kle9TouKMmf5/9ZeMzFfqCJ1buS4LbQqMS6p08Q8oEX+D3VPjnxda+bBedUCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFDHpWdThP6inwVJYgX/CVDCMnt4BMB0GA1UdDgQWBBQx6VnU4T+op8FSWIF/wlQwjJ7eATANBgkqhkiG9w0BAQsFAAOCAQEAo/HtwIs3wUFGJAsLvMdqiPq9yEiU9LJBAYluEVMjwhpAiGMRzBa3cXsCe6s7TgJzfl4UICG5aD+rm8I/fuOb3wuxWQKAo7CnTslBhtHwJ5NqIXCGkJbMKGmuPaXXwZoYyq5LEPxg8Yl7luylRxEP31sEXXp4wpuokFndJdV8t+EXP2gi0DzDSkzdweKL4+frQB/OmPQeWuKhRtoJwBGI0ooXQsUzleQmSEnmB6ZBbo0YH8BapSK+Kz/83kL8od47dtAMB9kT5y2zZb8XGpP3KtrjNKAhv1QxrTu/1NoO9ZOE2NWryrdZTzSO/X3/tJDfkrPxX267EbhRRzv3hBQDaw==","attributes":{"enabled":true,"nbf":1583452673,"exp":1614989273,"created":1583453273,"updated":1583453273,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453255,"updated":1583453255}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2391'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://uobflncfdbix4ketdm6je2me.vault.azure.net/certificates/unknownIssuerCert/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKakev7PLiczRsVQ/c3JCRDuP3eGhnUp0mdYQQDh7nAazUstuYPbC9RNTZD9eMvjrF1tcDDPNa++tZAKIZ4Ne9dmXSI6/YuvnhuhXlN5zTjtEKZHbGuTKhW1nku0MvZ9sLz94+G0f7992TeKUS7zuOODOhfg+wpV9w5ClNmDjSPwfrDMhtNjx27XuKEtB01T9OlCFBSOAx4+hhEWitAw4hkK5AD5aTQFRJxiXp8MWYKt7PBbB/vbL2C/82hqbm6mQgZEQEYdG5EiV5+OOC1BBAUrxHMHiV6H/TFB1+mh/tWRjXJqCR7gDNp5tIhOsyz+PKuUGH4dCS68SzLzGSPoDzcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQB+nzeKQA4hek5F8VtvI11zRH8AfCD93Fj0HhVZkd+mEA1xOu0PJ/+wLWUJ3ckbNP7ZORgJRzeWypCosM39tzpWjV5R/PjfkLDD2xKknfA7wff2PPZJtzKXr75m8TycW3iT7eOI2hLGmvGrOrn7DcjvwIsdUOqeo2P9ghD13HuMYPfDJvGQo+eHpNqVe6VolmdK7bSjI0yxHKBCiW4NKnffd6tDWXU2DnfgeSn/C9ziR4KOZVKL9aTvbmpQl2RNeOhF8M2MWBMqRSxvS6gddWkSqqpqOyE4YUQ15O1qdmFfklHZDLomEDxhB9kpnIZc/50UIrlRE1qEE5hh17dUj27s","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert","request_id":"5170a7aad9ce494fba3c4c2bbe645d13"}'}
    -    headers: {cache-control: no-cache, content-length: '1233', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, hsqtj2kqoyug5mggrm527mbz.vault.azure.net,
    -        /certificates/unknownIssuerCert/pending, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTwyf02qiJ47sjp4s+lXgaK2bTXkXmyT8U49UDkY+9c8uHGwF3pNPMw4GdMV+v0ofYZzo/4G6udgcgzTRPco2TcvyrUumcyAYi3SM4YiB0q+RDQD0vBaPu+qQSERiu+d30acXuIMzzuxpf408kf2J80GlBdCBv9j97WKg6+rpn/53rsRmGzytd+HAkHDtJXXLE2CpaTkAg1SRxNhuNktfEyHoTJFOoxfjb+AvqlVENy+PWOaa82t+XQJD4q4CJ+GZCVTVe2r1bbt10B/wWmPmh/X3z7kle9TouKMmf5/9ZeMzFfqCJ1buS4LbQqMS6p08Q8oEX+D3VPjnxda+bBedUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBc0WGbFObsF29eshzt0RngYQ7DILAciKoi1WCOMCLRoggBPcoroOi20RJmL+WeDugbB9MihxLfVFn/SSwl5I8mJQ57nBAZmVu4zO3kiKiCPB/RMAbT0joFOHpsto5ea5yu2xv7/bV+NdFCQrezWWuFHyQLZELHU8yqpVk7vfGsXCgdOOHJU57ncZqX82X2xuUW+YmGsO3oz/Kk9BnquRRP/d8pYrjOIzUrRqkaryDyW3Y98jr8qiGo20L+M1rIDc+k0SOBYJDVjqXbbgLyKGd2bGg2reYewtpfmidTBqQEY5Z8WJ30X60TChA+0+qTFpa5TP/LDAjuNyNOUOO/d412","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert","request_id":"18313fdff76546d19320083619722326"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1233'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://uobflncfdbix4ketdm6je2me.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKakev7PLiczRsVQ/c3JCRDuP3eGhnUp0mdYQQDh7nAazUstuYPbC9RNTZD9eMvjrF1tcDDPNa++tZAKIZ4Ne9dmXSI6/YuvnhuhXlN5zTjtEKZHbGuTKhW1nku0MvZ9sLz94+G0f7992TeKUS7zuOODOhfg+wpV9w5ClNmDjSPwfrDMhtNjx27XuKEtB01T9OlCFBSOAx4+hhEWitAw4hkK5AD5aTQFRJxiXp8MWYKt7PBbB/vbL2C/82hqbm6mQgZEQEYdG5EiV5+OOC1BBAUrxHMHiV6H/TFB1+mh/tWRjXJqCR7gDNp5tIhOsyz+PKuUGH4dCS68SzLzGSPoDzcCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQB+nzeKQA4hek5F8VtvI11zRH8AfCD93Fj0HhVZkd+mEA1xOu0PJ/+wLWUJ3ckbNP7ZORgJRzeWypCosM39tzpWjV5R/PjfkLDD2xKknfA7wff2PPZJtzKXr75m8TycW3iT7eOI2hLGmvGrOrn7DcjvwIsdUOqeo2P9ghD13HuMYPfDJvGQo+eHpNqVe6VolmdK7bSjI0yxHKBCiW4NKnffd6tDWXU2DnfgeSn/C9ziR4KOZVKL9aTvbmpQl2RNeOhF8M2MWBMqRSxvS6gddWkSqqpqOyE4YUQ15O1qdmFfklHZDLomEDxhB9kpnIZc/50UIrlRE1qEE5hh17dUj27s","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert","request_id":"5170a7aad9ce494fba3c4c2bbe645d13"}'}
    -    headers: {cache-control: no-cache, content-length: '1233', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, hsqtj2kqoyug5mggrm527mbz.vault.azure.net,
    -        /certificates/unknownIssuerCert/pending, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert/pending","issuer":{"name":"Self"},"csr":"MIICqDCCAZACAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTwyf02qiJ47sjp4s+lXgaK2bTXkXmyT8U49UDkY+9c8uHGwF3pNPMw4GdMV+v0ofYZzo/4G6udgcgzTRPco2TcvyrUumcyAYi3SM4YiB0q+RDQD0vBaPu+qQSERiu+d30acXuIMzzuxpf408kf2J80GlBdCBv9j97WKg6+rpn/53rsRmGzytd+HAkHDtJXXLE2CpaTkAg1SRxNhuNktfEyHoTJFOoxfjb+AvqlVENy+PWOaa82t+XQJD4q4CJ+GZCVTVe2r1bbt10B/wWmPmh/X3z7kle9TouKMmf5/9ZeMzFfqCJ1buS4LbQqMS6p08Q8oEX+D3VPjnxda+bBedUCAwEAAaBLMEkGCSqGSIb3DQEJDjE8MDowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBc0WGbFObsF29eshzt0RngYQ7DILAciKoi1WCOMCLRoggBPcoroOi20RJmL+WeDugbB9MihxLfVFn/SSwl5I8mJQ57nBAZmVu4zO3kiKiCPB/RMAbT0joFOHpsto5ea5yu2xv7/bV+NdFCQrezWWuFHyQLZELHU8yqpVk7vfGsXCgdOOHJU57ncZqX82X2xuUW+YmGsO3oz/Kk9BnquRRP/d8pYrjOIzUrRqkaryDyW3Y98jr8qiGo20L+M1rIDc+k0SOBYJDVjqXbbgLyKGd2bGg2reYewtpfmidTBqQEY5Z8WJ30X60TChA+0+qTFpa5TP/LDAjuNyNOUOO/d412","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/unknownIssuerCert","request_id":"18313fdff76546d19320083619722326"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1233'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:07:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://uobflncfdbix4ketdm6je2me.vault.azure.net/certificates/unknownIssuerCert/pending?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_list.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_list.yaml
    index 3ae99d222158..797276f4ed13 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_list.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_list.yaml
    @@ -2,27 +2,41 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert052a3107a/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert052a3107a/import?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, muku3tshvpshofvxdxujwdux.vault.azure.net,
    -        /certificates/cert052a3107a/import, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://grilakhvxzxbolxbxrcpxxkg.vault.azure.net/certificates/cert052a3107a/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -30,24 +44,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert052a3107a/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert052a3107a/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert052a3107a/c8a45a5a60514eddbb722bc0f21a3d3a","kid":"https://vaultname.vault.azure.net/keys/cert052a3107a/c8a45a5a60514eddbb722bc0f21a3d3a","sid":"https://vaultname.vault.azure.net/secrets/cert052a3107a/c8a45a5a60514eddbb722bc0f21a3d3a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676683,"updated":1575676683,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert052a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676683,"updated":1575676683}}}'}
    -    headers: {cache-control: no-cache, content-length: '1831', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, muku3tshvpshofvxdxujwdux.vault.azure.net,
    -        /certificates/cert052a3107a/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert052a3107a/253f1d0b855f4badb4567ee3a8419284","kid":"https://vaultname.vault.azure.net/keys/cert052a3107a/253f1d0b855f4badb4567ee3a8419284","sid":"https://vaultname.vault.azure.net/secrets/cert052a3107a/253f1d0b855f4badb4567ee3a8419284","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453331,"updated":1583453331,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert052a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453331,"updated":1583453331}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1843'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://grilakhvxzxbolxbxrcpxxkg.vault.azure.net/certificates/cert052a3107a/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -55,24 +83,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert152a3107a/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert152a3107a/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert152a3107a/c830b52a5b3b433eb1a1d9341fbf4f3d","kid":"https://vaultname.vault.azure.net/keys/cert152a3107a/c830b52a5b3b433eb1a1d9341fbf4f3d","sid":"https://vaultname.vault.azure.net/secrets/cert152a3107a/c830b52a5b3b433eb1a1d9341fbf4f3d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676683,"updated":1575676683,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert152a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676683,"updated":1575676683}}}'}
    -    headers: {cache-control: no-cache, content-length: '1831', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, muku3tshvpshofvxdxujwdux.vault.azure.net,
    -        /certificates/cert152a3107a/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert152a3107a/3e7f6b7c35de4ec7a045bcd6ffaced29","kid":"https://vaultname.vault.azure.net/keys/cert152a3107a/3e7f6b7c35de4ec7a045bcd6ffaced29","sid":"https://vaultname.vault.azure.net/secrets/cert152a3107a/3e7f6b7c35de4ec7a045bcd6ffaced29","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453333,"updated":1583453333,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert152a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453333,"updated":1583453333}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1843'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://grilakhvxzxbolxbxrcpxxkg.vault.azure.net/certificates/cert152a3107a/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -80,24 +122,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert252a3107a/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert252a3107a/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert252a3107a/55cb2121589f4d8fb7fb6557a85719b5","kid":"https://vaultname.vault.azure.net/keys/cert252a3107a/55cb2121589f4d8fb7fb6557a85719b5","sid":"https://vaultname.vault.azure.net/secrets/cert252a3107a/55cb2121589f4d8fb7fb6557a85719b5","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676684,"updated":1575676684,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert252a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676684,"updated":1575676684}}}'}
    -    headers: {cache-control: no-cache, content-length: '1831', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, muku3tshvpshofvxdxujwdux.vault.azure.net,
    -        /certificates/cert252a3107a/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert252a3107a/df3dfc5a3d864d31aeb30c77c0cd06e2","kid":"https://vaultname.vault.azure.net/keys/cert252a3107a/df3dfc5a3d864d31aeb30c77c0cd06e2","sid":"https://vaultname.vault.azure.net/secrets/cert252a3107a/df3dfc5a3d864d31aeb30c77c0cd06e2","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453333,"updated":1583453333,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert252a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453333,"updated":1583453333}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1843'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://grilakhvxzxbolxbxrcpxxkg.vault.azure.net/certificates/cert252a3107a/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -105,24 +161,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert352a3107a/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert352a3107a/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert352a3107a/522acbf5544543ee93d70ba39a3b9296","kid":"https://vaultname.vault.azure.net/keys/cert352a3107a/522acbf5544543ee93d70ba39a3b9296","sid":"https://vaultname.vault.azure.net/secrets/cert352a3107a/522acbf5544543ee93d70ba39a3b9296","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676684,"updated":1575676684,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert352a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676684,"updated":1575676684}}}'}
    -    headers: {cache-control: no-cache, content-length: '1831', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, muku3tshvpshofvxdxujwdux.vault.azure.net,
    -        /certificates/cert352a3107a/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert352a3107a/0dc3a30f825b453f9adcca06b57323f8","kid":"https://vaultname.vault.azure.net/keys/cert352a3107a/0dc3a30f825b453f9adcca06b57323f8","sid":"https://vaultname.vault.azure.net/secrets/cert352a3107a/0dc3a30f825b453f9adcca06b57323f8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453334,"updated":1583453334,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert352a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453334,"updated":1583453334}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1843'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://grilakhvxzxbolxbxrcpxxkg.vault.azure.net/certificates/cert352a3107a/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -130,24 +200,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert452a3107a/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert452a3107a/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert452a3107a/1bd67c2af9424962b5681e29272b53fb","kid":"https://vaultname.vault.azure.net/keys/cert452a3107a/1bd67c2af9424962b5681e29272b53fb","sid":"https://vaultname.vault.azure.net/secrets/cert452a3107a/1bd67c2af9424962b5681e29272b53fb","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676684,"updated":1575676684,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert452a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676684,"updated":1575676684}}}'}
    -    headers: {cache-control: no-cache, content-length: '1831', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, muku3tshvpshofvxdxujwdux.vault.azure.net,
    -        /certificates/cert452a3107a/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert452a3107a/dcf902b50e4047a7a10bab13ccf45951","kid":"https://vaultname.vault.azure.net/keys/cert452a3107a/dcf902b50e4047a7a10bab13ccf45951","sid":"https://vaultname.vault.azure.net/secrets/cert452a3107a/dcf902b50e4047a7a10bab13ccf45951","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453334,"updated":1583453334,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert452a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453334,"updated":1583453334}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1843'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://grilakhvxzxbolxbxrcpxxkg.vault.azure.net/certificates/cert452a3107a/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -155,24 +239,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert552a3107a/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert552a3107a/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert552a3107a/c97c39f71cc944b8b228b68773f39da0","kid":"https://vaultname.vault.azure.net/keys/cert552a3107a/c97c39f71cc944b8b228b68773f39da0","sid":"https://vaultname.vault.azure.net/secrets/cert552a3107a/c97c39f71cc944b8b228b68773f39da0","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676685,"updated":1575676685,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert552a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676685,"updated":1575676685}}}'}
    -    headers: {cache-control: no-cache, content-length: '1831', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, muku3tshvpshofvxdxujwdux.vault.azure.net,
    -        /certificates/cert552a3107a/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert552a3107a/e1e2ecce4bc2405f84e72cc38dfd0940","kid":"https://vaultname.vault.azure.net/keys/cert552a3107a/e1e2ecce4bc2405f84e72cc38dfd0940","sid":"https://vaultname.vault.azure.net/secrets/cert552a3107a/e1e2ecce4bc2405f84e72cc38dfd0940","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453334,"updated":1583453334,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert552a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453334,"updated":1583453334}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1843'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://grilakhvxzxbolxbxrcpxxkg.vault.azure.net/certificates/cert552a3107a/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -180,61 +278,98 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert652a3107a/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert652a3107a/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert652a3107a/2201a272cf28468a87a77170dca266c7","kid":"https://vaultname.vault.azure.net/keys/cert652a3107a/2201a272cf28468a87a77170dca266c7","sid":"https://vaultname.vault.azure.net/secrets/cert652a3107a/2201a272cf28468a87a77170dca266c7","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676685,"updated":1575676685,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert652a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676685,"updated":1575676685}}}'}
    -    headers: {cache-control: no-cache, content-length: '1831', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, muku3tshvpshofvxdxujwdux.vault.azure.net,
    -        /certificates/cert652a3107a/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert652a3107a/0446b6ca418f4a6cbd357ab0c064e17e","kid":"https://vaultname.vault.azure.net/keys/cert652a3107a/0446b6ca418f4a6cbd357ab0c064e17e","sid":"https://vaultname.vault.azure.net/secrets/cert652a3107a/0446b6ca418f4a6cbd357ab0c064e17e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453335,"updated":1583453335,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert652a3107a/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453335,"updated":1583453335}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1843'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://grilakhvxzxbolxbxrcpxxkg.vault.azure.net/certificates/cert652a3107a/import?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates?maxresults=6&api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates?maxresults=6&api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/cert052a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676683,"updated":1575676683},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert152a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676683,"updated":1575676683},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert252a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676684,"updated":1575676684},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert352a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676684,"updated":1575676684},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert452a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676684,"updated":1575676684},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert552a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676685,"updated":1575676685},"subject":""}],"nextLink":"https://vaultname.vault.azure.net:443/certificates?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE5MiFNREF3TURJMUlXTmxjblJwWm1sallYUmxMME5GVWxRMk5USkJNekV3TjBFaE1EQXdNREk0SVRrNU9Ua3RNVEl0TXpGVU1qTTZOVGs2TlRrdU9UazVPVGs1T1ZvaCIsIlRhcmdldExvY2F0aW9uIjowfQ&maxresults=6"}'}
    -    headers: {cache-control: no-cache, content-length: '1749', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, muku3tshvpshofvxdxujwdux.vault.azure.net,
    -        /certificates, maxresults=6&api-version=7.0, '']
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/cert052a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453331,"updated":1583453331},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert152a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453333,"updated":1583453333},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert252a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453333,"updated":1583453333},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert352a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453334,"updated":1583453334},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert452a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453334,"updated":1583453334},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/cert552a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453334,"updated":1583453334},"subject":""}],"nextLink":"https://vaultname.vault.azure.net:443/certificates?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE5MiFNREF3TURJMUlXTmxjblJwWm1sallYUmxMME5GVWxRMk5USkJNekV3TjBFaE1EQXdNREk0SVRrNU9Ua3RNVEl0TXpGVU1qTTZOVGs2TlRrdU9UazVPVGs1T1ZvaCIsIlRhcmdldExvY2F0aW9uIjowfQ&maxresults=6"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1757'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://grilakhvxzxbolxbxrcpxxkg.vault.azure.net/certificates?maxresults=6&api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net:443/certificates?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE5MiFNREF3TURJMUlXTmxjblJwWm1sallYUmxMME5GVWxRMk5USkJNekV3TjBFaE1EQXdNREk0SVRrNU9Ua3RNVEl0TXpGVU1qTTZOVGs2TlRrdU9UazVPVGs1T1ZvaCIsIlRhcmdldExvY2F0aW9uIjowfQ&maxresults=6
    +    uri: https://vaultname.vault.azure.net:443/certificates?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE5MiFNREF3TURJMUlXTmxjblJwWm1sallYUmxMME5GVWxRMk5USkJNekV3TjBFaE1EQXdNREk0SVRrNU9Ua3RNVEl0TXpGVU1qTTZOVGs2TlRrdU9UazVPVGs1T1ZvaCIsIlRhcmdldExvY2F0aW9uIjowfQ&maxresults=6
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/cert652a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676685,"updated":1575676685},"subject":""}],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '267', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, 'muku3tshvpshofvxdxujwdux.vault.azure.net:443',
    -        /certificates, api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE5MiFNREF3TURJMUlXTmxjblJwWm1sallYUmxMME5GVWxRMk5USkJNekV3TjBFaE1EQXdNREk0SVRrNU9Ua3RNVEl0TXpGVU1qTTZOVGs2TlRrdU9UazVPVGs1T1ZvaCIsIlRhcmdldExvY2F0aW9uIjowfQ&maxresults=6,
    -        '']
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/cert652a3107a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453335,"updated":1583453335},"subject":""}],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '267'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://grilakhvxzxbolxbxrcpxxkg.vault.azure.net:443/certificates?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE5MiFNREF3TURJMUlXTmxjblJwWm1sallYUmxMME5GVWxRMk5USkJNekV3TjBFaE1EQXdNREk0SVRrNU9Ua3RNVEl0TXpGVU1qTTZOVGs2TlRrdU9UazVPVGs1T1ZvaCIsIlRhcmdldExvY2F0aW9uIjowfQ&maxresults=6
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_list_certificate_versions.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_list_certificate_versions.yaml
    index 819c5149650c..8c1bb7e48cd0 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_list_certificate_versions.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_list_certificate_versions.yaml
    @@ -2,27 +2,41 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, n7juhxkcr3x56qwuyqay3toj.vault.azure.net,
    -        /certificates/certverb3f1934/import, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://p5xigwg7rhq4nbqa6usu3bz3.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -30,24 +44,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/263fae4dc2494770838c38fb5461a5af","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/263fae4dc2494770838c38fb5461a5af","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/263fae4dc2494770838c38fb5461a5af","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676680,"updated":1575676680,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676680,"updated":1575676680}}}'}
    -    headers: {cache-control: no-cache, content-length: '1835', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, n7juhxkcr3x56qwuyqay3toj.vault.azure.net,
    -        /certificates/certverb3f1934/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/b2d49e610d2a4b36ab6cb8d787c3b5cd","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/b2d49e610d2a4b36ab6cb8d787c3b5cd","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/b2d49e610d2a4b36ab6cb8d787c3b5cd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1847'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://p5xigwg7rhq4nbqa6usu3bz3.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -55,24 +83,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/ef574ad2c6754b1fb0dd0ba4c8d4186d","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/ef574ad2c6754b1fb0dd0ba4c8d4186d","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/ef574ad2c6754b1fb0dd0ba4c8d4186d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676681,"updated":1575676681,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676680,"updated":1575676681}}}'}
    -    headers: {cache-control: no-cache, content-length: '1835', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, n7juhxkcr3x56qwuyqay3toj.vault.azure.net,
    -        /certificates/certverb3f1934/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/85161827ae8e428c92bdb9095140fb65","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/85161827ae8e428c92bdb9095140fb65","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/85161827ae8e428c92bdb9095140fb65","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453315}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1847'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://p5xigwg7rhq4nbqa6usu3bz3.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -80,24 +122,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/3840ba9b4b434e8686cdf871544fa24e","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/3840ba9b4b434e8686cdf871544fa24e","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/3840ba9b4b434e8686cdf871544fa24e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676682,"updated":1575676682,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676680,"updated":1575676682}}}'}
    -    headers: {cache-control: no-cache, content-length: '1835', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, n7juhxkcr3x56qwuyqay3toj.vault.azure.net,
    -        /certificates/certverb3f1934/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/97a06fa678314728a231ed6aed8a2dd5","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/97a06fa678314728a231ed6aed8a2dd5","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/97a06fa678314728a231ed6aed8a2dd5","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453315}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1847'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://p5xigwg7rhq4nbqa6usu3bz3.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -105,24 +161,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/a57420eddc5a4935adc974be80a3b6ab","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/a57420eddc5a4935adc974be80a3b6ab","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/a57420eddc5a4935adc974be80a3b6ab","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676682,"updated":1575676682,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676680,"updated":1575676682}}}'}
    -    headers: {cache-control: no-cache, content-length: '1835', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, n7juhxkcr3x56qwuyqay3toj.vault.azure.net,
    -        /certificates/certverb3f1934/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/c2ebef5cd64f462b981fa6fd8bab28d0","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/c2ebef5cd64f462b981fa6fd8bab28d0","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/c2ebef5cd64f462b981fa6fd8bab28d0","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453315}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1847'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://p5xigwg7rhq4nbqa6usu3bz3.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -130,24 +200,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/cedf7f5e9db842f89c0565f3c2da3a54","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/cedf7f5e9db842f89c0565f3c2da3a54","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/cedf7f5e9db842f89c0565f3c2da3a54","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676683,"updated":1575676683,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676680,"updated":1575676683}}}'}
    -    headers: {cache-control: no-cache, content-length: '1835', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, n7juhxkcr3x56qwuyqay3toj.vault.azure.net,
    -        /certificates/certverb3f1934/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/de801593e6c74602856768edc486a77d","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/de801593e6c74602856768edc486a77d","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/de801593e6c74602856768edc486a77d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453316}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1847'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://p5xigwg7rhq4nbqa6usu3bz3.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -155,24 +239,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/e5ba01c231734167bdd7ba59f256af9a","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/e5ba01c231734167bdd7ba59f256af9a","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/e5ba01c231734167bdd7ba59f256af9a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676683,"updated":1575676683,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676680,"updated":1575676683}}}'}
    -    headers: {cache-control: no-cache, content-length: '1835', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, n7juhxkcr3x56qwuyqay3toj.vault.azure.net,
    -        /certificates/certverb3f1934/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/069baaafa5094ccb8663f28a0dea590c","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/069baaafa5094ccb8663f28a0dea590c","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/069baaafa5094ccb8663f28a0dea590c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453316}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1847'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://p5xigwg7rhq4nbqa6usu3bz3.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -180,61 +278,98 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/f8c69eb2c7f7459495c34a7ed5cad9fb","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/f8c69eb2c7f7459495c34a7ed5cad9fb","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/f8c69eb2c7f7459495c34a7ed5cad9fb","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676684,"updated":1575676684,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676680,"updated":1575676684}}}'}
    -    headers: {cache-control: no-cache, content-length: '1835', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, n7juhxkcr3x56qwuyqay3toj.vault.azure.net,
    -        /certificates/certverb3f1934/import, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/40095ce3118d4e3a8b5c5c9f9c47995a","kid":"https://vaultname.vault.azure.net/keys/certverb3f1934/40095ce3118d4e3a8b5c5c9f9c47995a","sid":"https://vaultname.vault.azure.net/secrets/certverb3f1934/40095ce3118d4e3a8b5c5c9f9c47995a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453317}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1847'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://p5xigwg7rhq4nbqa6usu3bz3.vault.azure.net/certificates/certverb3f1934/import?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/versions?maxresults=6&api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certverb3f1934/versions?maxresults=6&api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/263fae4dc2494770838c38fb5461a5af","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676680,"updated":1575676680},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/3840ba9b4b434e8686cdf871544fa24e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676682,"updated":1575676682},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/a57420eddc5a4935adc974be80a3b6ab","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676682,"updated":1575676682},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/cedf7f5e9db842f89c0565f3c2da3a54","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676683,"updated":1575676683},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/e5ba01c231734167bdd7ba59f256af9a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676683,"updated":1575676683},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/ef574ad2c6754b1fb0dd0ba4c8d4186d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676681,"updated":1575676681},"subject":""}],"nextLink":"https://vaultname.vault.azure.net:443/certificates/certverb3f1934/versions?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExNTIhTURBd01EWTRJV05sY25ScFptbGpZWFJsTDBORlVsUldSVkpDTTBZeE9UTTBMMVpGVWxOSlQwNVRMMFk0UXpZNVJVSXlRemRHTnpRMU9UUTVOVU16TkVFM1JVUTFRMEZFT1VaQ0lUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'}
    -    headers: {cache-control: no-cache, content-length: '2058', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, n7juhxkcr3x56qwuyqay3toj.vault.azure.net,
    -        /certificates/certverb3f1934/versions, maxresults=6&api-version=7.0, '']
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/069baaafa5094ccb8663f28a0dea590c","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/40095ce3118d4e3a8b5c5c9f9c47995a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/85161827ae8e428c92bdb9095140fb65","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/97a06fa678314728a231ed6aed8a2dd5","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/b2d49e610d2a4b36ab6cb8d787c3b5cd","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/c2ebef5cd64f462b981fa6fd8bab28d0","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315},"subject":""}],"nextLink":"https://vaultname.vault.azure.net:443/certificates/certverb3f1934/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExNTIhTURBd01EWTRJV05sY25ScFptbGpZWFJsTDBORlVsUldSVkpDTTBZeE9UTTBMMVpGVWxOSlQwNVRMMFJGT0RBeE5Ua3pSVFpETnpRMk1ESTROVFkzTmpoRlJFTTBPRFpCTnpkRUlUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2066'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://p5xigwg7rhq4nbqa6usu3bz3.vault.azure.net/certificates/certverb3f1934/versions?maxresults=6&api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net:443/certificates/certverb3f1934/versions?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExNTIhTURBd01EWTRJV05sY25ScFptbGpZWFJsTDBORlVsUldSVkpDTTBZeE9UTTBMMVpGVWxOSlQwNVRMMFk0UXpZNVJVSXlRemRHTnpRMU9UUTVOVU16TkVFM1JVUTFRMEZFT1VaQ0lUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
    +    uri: https://vaultname.vault.azure.net:443/certificates/certverb3f1934/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExNTIhTURBd01EWTRJV05sY25ScFptbGpZWFJsTDBORlVsUldSVkpDTTBZeE9UTTBMMVpGVWxOSlQwNVRMMFJGT0RBeE5Ua3pSVFpETnpRMk1ESTROVFkzTmpoRlJFTTBPRFpCTnpkRUlUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/f8c69eb2c7f7459495c34a7ed5cad9fb","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676684,"updated":1575676684},"subject":""}],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '301', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, 'n7juhxkcr3x56qwuyqay3toj.vault.azure.net:443',
    -        /certificates/certverb3f1934/versions, api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExNTIhTURBd01EWTRJV05sY25ScFptbGpZWFJsTDBORlVsUldSVkpDTTBZeE9UTTBMMVpGVWxOSlQwNVRMMFk0UXpZNVJVSXlRemRHTnpRMU9UUTVOVU16TkVFM1JVUTFRMEZFT1VaQ0lUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6,
    -        '']
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/certverb3f1934/de801593e6c74602856768edc486a77d","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316},"subject":""}],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '301'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://p5xigwg7rhq4nbqa6usu3bz3.vault.azure.net:443/certificates/certverb3f1934/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExNTIhTURBd01EWTRJV05sY25ScFptbGpZWFJsTDBORlVsUldSVkpDTTBZeE9UTTBMMVpGVWxOSlQwNVRMMFJGT0RBeE5Ua3pSVFpETnpRMk1ESTROVFkzTmpoRlJFTTBPRFpCTnpkRUlUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_logging_disabled.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_logging_disabled.yaml
    index b8cc5caf6496..df9893031d55 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_logging_disabled.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_logging_disabled.yaml
    @@ -2,46 +2,74 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tww6waie4pqvu4tl6hkz3tma.vault.azure.net,
    -        /certificates/issuers/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:10 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://bkhyvmyr6j7sxkgyviidmdqt.vault.azure.net/certificates/issuers/cert-name?api-version=7.1-preview
     - request:
         body: '{"provider": "Test"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['20']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '20'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/cert-name","provider":"Test","attributes":{"enabled":true,"created":1575676680,"updated":1575676680}}'}
    -    headers: {cache-control: no-cache, content-length: '178', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tww6waie4pqvu4tl6hkz3tma.vault.azure.net,
    -        /certificates/issuers/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/cert-name","provider":"Test","attributes":{"enabled":true,"created":1583453291,"updated":1583453291}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '178'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://bkhyvmyr6j7sxkgyviidmdqt.vault.azure.net/certificates/issuers/cert-name?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_logging_enabled.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_logging_enabled.yaml
    index e25dbb75d06d..f42cc2a4376d 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_logging_enabled.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_logging_enabled.yaml
    @@ -2,46 +2,74 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:31 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, c5rkjn6utaxf4fxwwlq6dnus.vault.azure.net,
    -        /certificates/issuers/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:10 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://hxyhcqzbbu2f5n4tygexmwf5.vault.azure.net/certificates/issuers/cert-name?api-version=7.1-preview
     - request:
         body: '{"provider": "Test"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['20']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '20'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/cert-name","provider":"Test","attributes":{"enabled":true,"created":1575676712,"updated":1575676712}}'}
    -    headers: {cache-control: no-cache, content-length: '178', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:31 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, c5rkjn6utaxf4fxwwlq6dnus.vault.azure.net,
    -        /certificates/issuers/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/cert-name","provider":"Test","attributes":{"enabled":true,"created":1583453291,"updated":1583453291}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '178'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://hxyhcqzbbu2f5n4tygexmwf5.vault.azure.net/certificates/issuers/cert-name?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_policy.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_policy.yaml
    index 13ed2a1ba775..b6bca9cabaff 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_policy.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_policy.yaml
    @@ -2,27 +2,41 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i2a3m5xdyaxqisjmp236iagj.vault.azure.net,
    -        /certificates/policyCertificate/create, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://wkxocguxsebzanim2z2ekqxo.vault.azure.net/certificates/policyCertificate/create?api-version=7.1-preview
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": true}, "secret_props": {"contentType": "application/x-pkcs12"},
    @@ -32,143 +46,358 @@ interactions:
           98}, "action": {"action_type": "EmailContacts"}}], "issuer": {"name": "Self",
           "cert_transparency": false}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['518']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '518'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKjfCyoAn2mx2WkByWTyghV9qr0TseNnAS3QNYbagHeK67GdFHbpgdBXrla73dCA4fkHE618Z8ECWA7mwqSZYM+NnOwKfhPAAfB4t+5E0D14rxmYB4IWuH/eVASxDvr2tLXe1lI3Z9pRZxnoNUpod1Y5fL85G/IHvBNRKRWN54IwAiLYIfaA1+uSvAhfDiI2xyvYexbBtz4svdp/fxKZGThJzTeiFChEBpzfir4Ux8Mad2s4/dspmz91VXatX0ukUI1ZiXodGFk5dV2rzcYKS5IOuxlHAkkorbgj/dmIhajGhD3Iztm8C0+CEh5E/QIqVv3jcZQ09uUeN540EgRW/mMCAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAnBVEreOpXZg7F6GlpK5+dKbYyFrQXm10oRBzLX+ViKbvWO1jb4Los6g8A8zvGVrRygie2WxaVnC8Wd2toWITz6pDJ8otMKTrNM6NtNKpMmNq3yZgYfpkXHJkeVPt7zT+Qm0Gi96a8v67nAPjM6tuzKbgo9ml485jFVreU8/JvakJtBDzOR+Zm4IWkLKbxyDX4W3JxUQzvgwVmxxfHN6LSeFgoa0mkH10k//jDo/rJ6IASCTqM9pvhkWNeUhgr5uiVDQWXjJ+f+lTkJRMbTLr+cSRqrsOq9qsdQ6Ck2RhnUi1i+Uyjx44kcdtH6R4wv+/LrhXjIFVK2BV4APFWrcHKA==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3DHGZOUv04OSb92Xpct9MBHuyJhRic3vIvPtmaEyfHRgH9L/dgOHDBGxiTWe8xEUSccy6QTxZ2AAmTrRU8d6nqvR30vjnGT9rZ6JsshOF3enhJJSdstKq+Gz4tya6Mbvt+jEjN6EJ0XgxuMGmR2IJX9/6kZjbC+hMBkd1UXv3vkfDbpyslrjLmSMNWxyoV+QSv/NyIFctWbn1t3BkdjM7yv3kwzZ+uYtcNIvBUVaVz4Smr6FXnSt4odgeGXHRiL1xgyWRnSInalxEBJjMAKCgaSdDlpMZVzKSBWXbDPB+KutblgylcvK5hbE8VHTPF4pxD7/5WTZU4EtM1c6Cdl8CAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAFbiL+dD7u1cm8rfZ1/wXP+a4FlYh5ZawiiL6ZXUvpBW2lUG+Zhuzxxi+2I6tE6BvegbVuL1mS/P+hdKhKXClqmdJUXytUQmTd7HwsTBVUA9aNOzdnOfYA2gK0BO7C4rohgunag1AZZuezlo5emTNMHRjXcSIXFSe+C6wjVv9ei/C4Xt+QA/k6qZ147fFe+9rXr37KEBuRNgbfGDvZ9DmuLcYJBwymAwBRYm5uJmUw3+ov6MSenhD8jvLTBxcMGyWStpwCM+d0zFpa42nOW5rqd8S4S46azzoNXe9PjaUh2G3uBjcBlqg40dEqiA7LHay/CSvYuRakpikmttq5MSDAw==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"27b449d5e85442d7845a18161e89cc50"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"a65464f8c2684caeae223057ffd6d446"}'
         headers:
           cache-control: no-cache
           content-length: '1351'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:11 GMT
    +      date: Fri, 06 Mar 2020 00:08:52 GMT
           expires: '-1'
    -      location: [h, t, t, p, s, ':', /, /, i, '2', a, '3', m, '5', x, d, y, a, x,
    -        q, i, s, j, m, p, '2', '3', '6', i, a, g, j, ., v, a, u, l, t, ., a, z, u,
    -        r, e, ., n, e, t, /, c, e, r, t, i, f, i, c, a, t, e, s, /, p, o, l, i, c,
    -        y, C, e, r, t, i, f, i, c, a, t, e, /, p, e, n, d, i, n, g, '?', a, p, i,
    -        '-', v, e, r, s, i, o, n, '=', '7', ., '0', '&', r, e, q, u, e, s, t, _, i,
    -        d, '=', '2', '7', b, '4', '4', '9', d, '5', e, '8', '5', '4', '4', '2', d,
    -        '7', '8', '4', '5', a, '1', '8', '1', '6', '1', e, '8', '9', c, c, '5', '0']
    +      location:
    +      - h
    +      - t
    +      - t
    +      - p
    +      - s
    +      - ':'
    +      - /
    +      - /
    +      - w
    +      - k
    +      - x
    +      - o
    +      - c
    +      - g
    +      - u
    +      - x
    +      - s
    +      - e
    +      - b
    +      - z
    +      - a
    +      - n
    +      - i
    +      - m
    +      - '2'
    +      - z
    +      - '2'
    +      - e
    +      - k
    +      - q
    +      - x
    +      - o
    +      - .
    +      - v
    +      - a
    +      - u
    +      - l
    +      - t
    +      - .
    +      - a
    +      - z
    +      - u
    +      - r
    +      - e
    +      - .
    +      - n
    +      - e
    +      - t
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - s
    +      - /
    +      - p
    +      - o
    +      - l
    +      - i
    +      - c
    +      - y
    +      - C
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - /
    +      - p
    +      - e
    +      - n
    +      - d
    +      - i
    +      - n
    +      - g
    +      - '?'
    +      - a
    +      - p
    +      - i
    +      - '-'
    +      - v
    +      - e
    +      - r
    +      - s
    +      - i
    +      - o
    +      - n
    +      - '='
    +      - '7'
    +      - .
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
    +      - '&'
    +      - r
    +      - e
    +      - q
    +      - u
    +      - e
    +      - s
    +      - t
    +      - _
    +      - i
    +      - d
    +      - '='
    +      - a
    +      - '6'
    +      - '5'
    +      - '4'
    +      - '6'
    +      - '4'
    +      - f
    +      - '8'
    +      - c
    +      - '2'
    +      - '6'
    +      - '8'
    +      - '4'
    +      - c
    +      - a
    +      - e
    +      - a
    +      - e
    +      - '2'
    +      - '2'
    +      - '3'
    +      - '0'
    +      - '5'
    +      - '7'
    +      - f
    +      - f
    +      - d
    +      - '6'
    +      - d
    +      - '4'
    +      - '4'
    +      - '6'
           pragma: no-cache
           retry-after: '10'
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
    -    status: {code: 202, message: Accepted}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i2a3m5xdyaxqisjmp236iagj.vault.azure.net,
    -        /certificates/policyCertificate/create, api-version=7.0, '']
    +    status:
    +      code: 202
    +      message: Accepted
    +    url: https://wkxocguxsebzanim2z2ekqxo.vault.azure.net/certificates/policyCertificate/create?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKjfCyoAn2mx2WkByWTyghV9qr0TseNnAS3QNYbagHeK67GdFHbpgdBXrla73dCA4fkHE618Z8ECWA7mwqSZYM+NnOwKfhPAAfB4t+5E0D14rxmYB4IWuH/eVASxDvr2tLXe1lI3Z9pRZxnoNUpod1Y5fL85G/IHvBNRKRWN54IwAiLYIfaA1+uSvAhfDiI2xyvYexbBtz4svdp/fxKZGThJzTeiFChEBpzfir4Ux8Mad2s4/dspmz91VXatX0ukUI1ZiXodGFk5dV2rzcYKS5IOuxlHAkkorbgj/dmIhajGhD3Iztm8C0+CEh5E/QIqVv3jcZQ09uUeN540EgRW/mMCAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAnBVEreOpXZg7F6GlpK5+dKbYyFrQXm10oRBzLX+ViKbvWO1jb4Los6g8A8zvGVrRygie2WxaVnC8Wd2toWITz6pDJ8otMKTrNM6NtNKpMmNq3yZgYfpkXHJkeVPt7zT+Qm0Gi96a8v67nAPjM6tuzKbgo9ml485jFVreU8/JvakJtBDzOR+Zm4IWkLKbxyDX4W3JxUQzvgwVmxxfHN6LSeFgoa0mkH10k//jDo/rJ6IASCTqM9pvhkWNeUhgr5uiVDQWXjJ+f+lTkJRMbTLr+cSRqrsOq9qsdQ6Ck2RhnUi1i+Uyjx44kcdtH6R4wv+/LrhXjIFVK2BV4APFWrcHKA==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3DHGZOUv04OSb92Xpct9MBHuyJhRic3vIvPtmaEyfHRgH9L/dgOHDBGxiTWe8xEUSccy6QTxZ2AAmTrRU8d6nqvR30vjnGT9rZ6JsshOF3enhJJSdstKq+Gz4tya6Mbvt+jEjN6EJ0XgxuMGmR2IJX9/6kZjbC+hMBkd1UXv3vkfDbpyslrjLmSMNWxyoV+QSv/NyIFctWbn1t3BkdjM7yv3kwzZ+uYtcNIvBUVaVz4Smr6FXnSt4odgeGXHRiL1xgyWRnSInalxEBJjMAKCgaSdDlpMZVzKSBWXbDPB+KutblgylcvK5hbE8VHTPF4pxD7/5WTZU4EtM1c6Cdl8CAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAFbiL+dD7u1cm8rfZ1/wXP+a4FlYh5ZawiiL6ZXUvpBW2lUG+Zhuzxxi+2I6tE6BvegbVuL1mS/P+hdKhKXClqmdJUXytUQmTd7HwsTBVUA9aNOzdnOfYA2gK0BO7C4rohgunag1AZZuezlo5emTNMHRjXcSIXFSe+C6wjVv9ei/C4Xt+QA/k6qZ147fFe+9rXr37KEBuRNgbfGDvZ9DmuLcYJBwymAwBRYm5uJmUw3+ov6MSenhD8jvLTBxcMGyWStpwCM+d0zFpa42nOW5rqd8S4S46azzoNXe9PjaUh2G3uBjcBlqg40dEqiA7LHay/CSvYuRakpikmttq5MSDAw==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"27b449d5e85442d7845a18161e89cc50"}'}
    -    headers: {cache-control: no-cache, content-length: '1351', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:11 GMT', expires: '-1', pragma: no-cache,
    -      retry-after: '10', server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i2a3m5xdyaxqisjmp236iagj.vault.azure.net,
    -        /certificates/policyCertificate/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"a65464f8c2684caeae223057ffd6d446"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1351'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      retry-after: '10'
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wkxocguxsebzanim2z2ekqxo.vault.azure.net/certificates/policyCertificate/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKjfCyoAn2mx2WkByWTyghV9qr0TseNnAS3QNYbagHeK67GdFHbpgdBXrla73dCA4fkHE618Z8ECWA7mwqSZYM+NnOwKfhPAAfB4t+5E0D14rxmYB4IWuH/eVASxDvr2tLXe1lI3Z9pRZxnoNUpod1Y5fL85G/IHvBNRKRWN54IwAiLYIfaA1+uSvAhfDiI2xyvYexbBtz4svdp/fxKZGThJzTeiFChEBpzfir4Ux8Mad2s4/dspmz91VXatX0ukUI1ZiXodGFk5dV2rzcYKS5IOuxlHAkkorbgj/dmIhajGhD3Iztm8C0+CEh5E/QIqVv3jcZQ09uUeN540EgRW/mMCAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAnBVEreOpXZg7F6GlpK5+dKbYyFrQXm10oRBzLX+ViKbvWO1jb4Los6g8A8zvGVrRygie2WxaVnC8Wd2toWITz6pDJ8otMKTrNM6NtNKpMmNq3yZgYfpkXHJkeVPt7zT+Qm0Gi96a8v67nAPjM6tuzKbgo9ml485jFVreU8/JvakJtBDzOR+Zm4IWkLKbxyDX4W3JxUQzvgwVmxxfHN6LSeFgoa0mkH10k//jDo/rJ6IASCTqM9pvhkWNeUhgr5uiVDQWXjJ+f+lTkJRMbTLr+cSRqrsOq9qsdQ6Ck2RhnUi1i+Uyjx44kcdtH6R4wv+/LrhXjIFVK2BV4APFWrcHKA==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3DHGZOUv04OSb92Xpct9MBHuyJhRic3vIvPtmaEyfHRgH9L/dgOHDBGxiTWe8xEUSccy6QTxZ2AAmTrRU8d6nqvR30vjnGT9rZ6JsshOF3enhJJSdstKq+Gz4tya6Mbvt+jEjN6EJ0XgxuMGmR2IJX9/6kZjbC+hMBkd1UXv3vkfDbpyslrjLmSMNWxyoV+QSv/NyIFctWbn1t3BkdjM7yv3kwzZ+uYtcNIvBUVaVz4Smr6FXnSt4odgeGXHRiL1xgyWRnSInalxEBJjMAKCgaSdDlpMZVzKSBWXbDPB+KutblgylcvK5hbE8VHTPF4pxD7/5WTZU4EtM1c6Cdl8CAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAFbiL+dD7u1cm8rfZ1/wXP+a4FlYh5ZawiiL6ZXUvpBW2lUG+Zhuzxxi+2I6tE6BvegbVuL1mS/P+hdKhKXClqmdJUXytUQmTd7HwsTBVUA9aNOzdnOfYA2gK0BO7C4rohgunag1AZZuezlo5emTNMHRjXcSIXFSe+C6wjVv9ei/C4Xt+QA/k6qZ147fFe+9rXr37KEBuRNgbfGDvZ9DmuLcYJBwymAwBRYm5uJmUw3+ov6MSenhD8jvLTBxcMGyWStpwCM+d0zFpa42nOW5rqd8S4S46azzoNXe9PjaUh2G3uBjcBlqg40dEqiA7LHay/CSvYuRakpikmttq5MSDAw==","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"27b449d5e85442d7845a18161e89cc50"}'}
    -    headers: {cache-control: no-cache, content-length: '1351', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:21 GMT', expires: '-1', pragma: no-cache,
    -      retry-after: '10', server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i2a3m5xdyaxqisjmp236iagj.vault.azure.net,
    -        /certificates/policyCertificate/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"a65464f8c2684caeae223057ffd6d446"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1351'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      retry-after: '10'
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wkxocguxsebzanim2z2ekqxo.vault.azure.net/certificates/policyCertificate/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKjfCyoAn2mx2WkByWTyghV9qr0TseNnAS3QNYbagHeK67GdFHbpgdBXrla73dCA4fkHE618Z8ECWA7mwqSZYM+NnOwKfhPAAfB4t+5E0D14rxmYB4IWuH/eVASxDvr2tLXe1lI3Z9pRZxnoNUpod1Y5fL85G/IHvBNRKRWN54IwAiLYIfaA1+uSvAhfDiI2xyvYexbBtz4svdp/fxKZGThJzTeiFChEBpzfir4Ux8Mad2s4/dspmz91VXatX0ukUI1ZiXodGFk5dV2rzcYKS5IOuxlHAkkorbgj/dmIhajGhD3Iztm8C0+CEh5E/QIqVv3jcZQ09uUeN540EgRW/mMCAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAnBVEreOpXZg7F6GlpK5+dKbYyFrQXm10oRBzLX+ViKbvWO1jb4Los6g8A8zvGVrRygie2WxaVnC8Wd2toWITz6pDJ8otMKTrNM6NtNKpMmNq3yZgYfpkXHJkeVPt7zT+Qm0Gi96a8v67nAPjM6tuzKbgo9ml485jFVreU8/JvakJtBDzOR+Zm4IWkLKbxyDX4W3JxUQzvgwVmxxfHN6LSeFgoa0mkH10k//jDo/rJ6IASCTqM9pvhkWNeUhgr5uiVDQWXjJ+f+lTkJRMbTLr+cSRqrsOq9qsdQ6Ck2RhnUi1i+Uyjx44kcdtH6R4wv+/LrhXjIFVK2BV4APFWrcHKA==","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/policyCertificate","request_id":"27b449d5e85442d7845a18161e89cc50"}'}
    -    headers: {cache-control: no-cache, content-length: '1277', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i2a3m5xdyaxqisjmp236iagj.vault.azure.net,
    -        /certificates/policyCertificate/pending, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending","issuer":{"name":"Self"},"csr":"MIICxzCCAa8CAQAwGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3DHGZOUv04OSb92Xpct9MBHuyJhRic3vIvPtmaEyfHRgH9L/dgOHDBGxiTWe8xEUSccy6QTxZ2AAmTrRU8d6nqvR30vjnGT9rZ6JsshOF3enhJJSdstKq+Gz4tya6Mbvt+jEjN6EJ0XgxuMGmR2IJX9/6kZjbC+hMBkd1UXv3vkfDbpyslrjLmSMNWxyoV+QSv/NyIFctWbn1t3BkdjM7yv3kwzZ+uYtcNIvBUVaVz4Smr6FXnSt4odgeGXHRiL1xgyWRnSInalxEBJjMAKCgaSdDlpMZVzKSBWXbDPB+KutblgylcvK5hbE8VHTPF4pxD7/5WTZU4EtM1c6Cdl8CAwEAAaBqMGgGCSqGSIb3DQEJDjFbMFkwDwYDVR0PAQH/BAUDAwcAgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRc2RrLmF6dXJlLWludC5uZXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAFbiL+dD7u1cm8rfZ1/wXP+a4FlYh5ZawiiL6ZXUvpBW2lUG+Zhuzxxi+2I6tE6BvegbVuL1mS/P+hdKhKXClqmdJUXytUQmTd7HwsTBVUA9aNOzdnOfYA2gK0BO7C4rohgunag1AZZuezlo5emTNMHRjXcSIXFSe+C6wjVv9ei/C4Xt+QA/k6qZ147fFe+9rXr37KEBuRNgbfGDvZ9DmuLcYJBwymAwBRYm5uJmUw3+ov6MSenhD8jvLTBxcMGyWStpwCM+d0zFpa42nOW5rqd8S4S46azzoNXe9PjaUh2G3uBjcBlqg40dEqiA7LHay/CSvYuRakpikmttq5MSDAw==","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/policyCertificate","request_id":"a65464f8c2684caeae223057ffd6d446"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1277'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wkxocguxsebzanim2z2ekqxo.vault.azure.net/certificates/policyCertificate/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/293d4573b3854c068d53eff7df50e151","kid":"https://vaultname.vault.azure.net/keys/policyCertificate/293d4573b3854c068d53eff7df50e151","sid":"https://vaultname.vault.azure.net/secrets/policyCertificate/293d4573b3854c068d53eff7df50e151","x5t":"whtNUSYWaYSXh0Zavzh1PUaphj8","cer":"MIIDVzCCAj+gAwIBAgIQVex8rSONRzGtEXotGqv2MDANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTE5MTIwNjIzNDgyNVoXDTIwMTIwNjIzNTgyNVowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKjfCyoAn2mx2WkByWTyghV9qr0TseNnAS3QNYbagHeK67GdFHbpgdBXrla73dCA4fkHE618Z8ECWA7mwqSZYM+NnOwKfhPAAfB4t+5E0D14rxmYB4IWuH/eVASxDvr2tLXe1lI3Z9pRZxnoNUpod1Y5fL85G/IHvBNRKRWN54IwAiLYIfaA1+uSvAhfDiI2xyvYexbBtz4svdp/fxKZGThJzTeiFChEBpzfir4Ux8Mad2s4/dspmz91VXatX0ukUI1ZiXodGFk5dV2rzcYKS5IOuxlHAkkorbgj/dmIhajGhD3Iztm8C0+CEh5E/QIqVv3jcZQ09uUeN540EgRW/mMCAwEAAaOBnDCBmTAPBgNVHQ8BAf8EBQMDBwCAMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFHbzQH7PVI5HN3DdBCPJcbVaeYWcMB0GA1UdDgQWBBR280B+z1SORzdw3QQjyXG1WnmFnDANBgkqhkiG9w0BAQsFAAOCAQEAmp6HxXxC5d+bbz1PIQ625pZ34g2ZlNpcElLzrZG5fiErNnyojsUCRSirJasJFE9SgUWAiXFT9hor63Zs2Qsvh0YRmeCCyT+NnrJPKBDxyh1TteX8qapDZHynSdy5xxgHOXhkqrtOkDfmMI5bsf9yS8+NOrSp/0I/nv0s1e/FMZYC85xIK0x3wPUp2PrXPtpdQ/yh/fmx/942yNfVkczn3RMg/yfS22QvyOyLGSfAifBUxH6b5jTRp0KwZBIhWqWz0HpmnrZtnzZer3vcCcULSMxvc6Qk98Y6r3hMRtIY+V3YMfgcRhpNEG7gGWSEJKsD7/RbhAHaO2UEBl7Al8zKKw==","attributes":{"enabled":true,"nbf":1575676105,"exp":1607299105,"created":1575676705,"updated":1575676705,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":true},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["decipherOnly"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":98},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Self","cert_transparency":false},"attributes":{"enabled":true,"created":1575676691,"updated":1575676691}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2463', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i2a3m5xdyaxqisjmp236iagj.vault.azure.net,
    -        /certificates/policyCertificate/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/e702870afe2e43a9b8ddf8c37f69b1f6","kid":"https://vaultname.vault.azure.net/keys/policyCertificate/e702870afe2e43a9b8ddf8c37f69b1f6","sid":"https://vaultname.vault.azure.net/secrets/policyCertificate/e702870afe2e43a9b8ddf8c37f69b1f6","x5t":"bqJSGJa6M5wHRjYcxG1LqNZmUYM","cer":"MIIDVzCCAj+gAwIBAgIQOX8MlX0gTTGabSqORNeqfzANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1EZWZhdWx0UG9saWN5MB4XDTIwMDMwNTIzNTkwNFoXDTIxMDMwNjAwMDkwNFowGDEWMBQGA1UEAxMNRGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3DHGZOUv04OSb92Xpct9MBHuyJhRic3vIvPtmaEyfHRgH9L/dgOHDBGxiTWe8xEUSccy6QTxZ2AAmTrRU8d6nqvR30vjnGT9rZ6JsshOF3enhJJSdstKq+Gz4tya6Mbvt+jEjN6EJ0XgxuMGmR2IJX9/6kZjbC+hMBkd1UXv3vkfDbpyslrjLmSMNWxyoV+QSv/NyIFctWbn1t3BkdjM7yv3kwzZ+uYtcNIvBUVaVz4Smr6FXnSt4odgeGXHRiL1xgyWRnSInalxEBJjMAKCgaSdDlpMZVzKSBWXbDPB+KutblgylcvK5hbE8VHTPF4pxD7/5WTZU4EtM1c6Cdl8CAwEAAaOBnDCBmTAPBgNVHQ8BAf8EBQMDBwCAMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFJ2YtPr9LeaLoxOQNo4bfmEPCP0AMB0GA1UdDgQWBBSdmLT6/S3mi6MTkDaOG35hDwj9ADANBgkqhkiG9w0BAQsFAAOCAQEACMoWLc/P9P5EqGzu0w15iInrTaDCmJBNqC1lW2/4EKhQQYPDdQr+Kyf4q1eF7mmGITSynRNKlB8DHBuDMq115v13RQcIsROFPMrBJmpQrm/tK3PdYWOZlvBpeD1NVggyeNGRZTlWN2vXQQ2k1aBzjfERGmEgz+cwEmQoA7rniQIHPjIBwnkaO5VjNjNo8jLhwRF9ifOXR41uIlbvEBAv94urLCNmasoFZqq218QcnoPuSBBbF4mhXNcsgWzhZ9c4XlkkWGz9VTzH1sxqFxBCxBddIAy6C08a6+e1fColIXMmP12rTTjLsUyR3JLh78xdkM0eD6IBKXvBYd1u6FvSkw==","attributes":{"enabled":true,"nbf":1583452744,"exp":1614989344,"created":1583453345,"updated":1583453345,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":true},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["decipherOnly"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":98},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Self","cert_transparency":false},"attributes":{"enabled":true,"created":1583453331,"updated":1583453331}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2475'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wkxocguxsebzanim2z2ekqxo.vault.azure.net/certificates/policyCertificate/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/policy?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/policy?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":true},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["decipherOnly"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":98},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Self","cert_transparency":false},"attributes":{"enabled":true,"created":1575676691,"updated":1575676691}}'}
    -    headers: {cache-control: no-cache, content-length: '669', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i2a3m5xdyaxqisjmp236iagj.vault.azure.net,
    -        /certificates/policyCertificate/policy, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":true},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["decipherOnly"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":98},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Self","cert_transparency":false},"attributes":{"enabled":true,"created":1583453331,"updated":1583453331}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '669'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wkxocguxsebzanim2z2ekqxo.vault.azure.net/certificates/policyCertificate/policy?api-version=7.1-preview
     - request:
         body: '{"key_props": {"exportable": true, "kty": "EC", "key_size": 256, "reuse_key":
           true, "crv": "P-256"}, "secret_props": {"contentType": "application/x-pkcs12"},
    @@ -178,22 +407,36 @@ interactions:
           98}, "action": {"action_type": "EmailContacts"}}], "issuer": {"name": "Self",
           "cert_transparency": false}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['520']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '520'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/policy?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/policyCertificate/policy?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/policy","key_props":{"exportable":true,"kty":"EC","key_size":256,"reuse_key":true,"crv":"P-256"},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["decipherOnly"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":98},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Self","cert_transparency":false},"attributes":{"enabled":true,"created":1575676691,"updated":1575676717}}'}
    -    headers: {cache-control: no-cache, content-length: '681', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, i2a3m5xdyaxqisjmp236iagj.vault.azure.net,
    -        /certificates/policyCertificate/policy, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/policyCertificate/policy","key_props":{"exportable":true,"kty":"EC","key_size":256,"reuse_key":true,"crv":"P-256"},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=DefaultPolicy","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["decipherOnly"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":98},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Self","cert_transparency":false},"attributes":{"enabled":true,"created":1583453331,"updated":1583453352}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '681'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://wkxocguxsebzanim2z2ekqxo.vault.azure.net/certificates/policyCertificate/policy?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_recover_and_purge.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_recover_and_purge.yaml
    index 8ba7d9a0e000..4e169f4c07a1 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_recover_and_purge.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_certificates_client_async.test_recover_and_purge.yaml
    @@ -2,27 +2,41 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -30,24 +44,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","kid":"https://vaultname.vault.azure.net/keys/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","sid":"https://vaultname.vault.azure.net/secrets/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","kid":"https://vaultname.vault.azure.net/keys/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","sid":"https://vaultname.vault.azure.net/secrets/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453312,"updated":1583453312,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453312,"updated":1583453312}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -55,24 +83,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","kid":"https://vaultname.vault.azure.net/keys/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","sid":"https://vaultname.vault.azure.net/secrets/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/21e31574b3474131af556f037343e276","kid":"https://vaultname.vault.azure.net/keys/certrec14d8615c8/21e31574b3474131af556f037343e276","sid":"https://vaultname.vault.azure.net/secrets/certrec14d8615c8/21e31574b3474131af556f037343e276","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -80,24 +122,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","kid":"https://vaultname.vault.azure.net/keys/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","sid":"https://vaultname.vault.azure.net/secrets/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","kid":"https://vaultname.vault.azure.net/keys/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","sid":"https://vaultname.vault.azure.net/secrets/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -105,24 +161,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","kid":"https://vaultname.vault.azure.net/keys/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","sid":"https://vaultname.vault.azure.net/secrets/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","kid":"https://vaultname.vault.azure.net/keys/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","sid":"https://vaultname.vault.azure.net/secrets/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -130,24 +200,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","kid":"https://vaultname.vault.azure.net/keys/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","sid":"https://vaultname.vault.azure.net/secrets/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","kid":"https://vaultname.vault.azure.net/keys/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","sid":"https://vaultname.vault.azure.net/secrets/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -155,24 +239,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","kid":"https://vaultname.vault.azure.net/keys/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","sid":"https://vaultname.vault.azure.net/secrets/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec54d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","kid":"https://vaultname.vault.azure.net/keys/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","sid":"https://vaultname.vault.azure.net/secrets/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -180,24 +278,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","kid":"https://vaultname.vault.azure.net/keys/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","sid":"https://vaultname.vault.azure.net/secrets/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:39 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","kid":"https://vaultname.vault.azure.net/keys/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","sid":"https://vaultname.vault.azure.net/secrets/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453315,"updated":1583453315}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -205,24 +317,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg04d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8/2b148065d06e464192dc5e7b9bbc9e6a","kid":"https://vaultname.vault.azure.net/keys/certprg04d8615c8/2b148065d06e464192dc5e7b9bbc9e6a","sid":"https://vaultname.vault.azure.net/secrets/certprg04d8615c8/2b148065d06e464192dc5e7b9bbc9e6a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:39 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg04d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certprg04d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8/e133bb3dbedf4c0daa560e16470fb6b2","kid":"https://vaultname.vault.azure.net/keys/certprg04d8615c8/e133bb3dbedf4c0daa560e16470fb6b2","sid":"https://vaultname.vault.azure.net/secrets/certprg04d8615c8/e133bb3dbedf4c0daa560e16470fb6b2","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453315,"updated":1583453315}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg04d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -230,24 +356,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg14d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8/9a165fb8e3a04ebfa88b4ea8caf5e389","kid":"https://vaultname.vault.azure.net/keys/certprg14d8615c8/9a165fb8e3a04ebfa88b4ea8caf5e389","sid":"https://vaultname.vault.azure.net/secrets/certprg14d8615c8/9a165fb8e3a04ebfa88b4ea8caf5e389","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:39 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg14d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certprg14d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8/89a452ac4d4b45ed94f149dc01e984b8","kid":"https://vaultname.vault.azure.net/keys/certprg14d8615c8/89a452ac4d4b45ed94f149dc01e984b8","sid":"https://vaultname.vault.azure.net/secrets/certprg14d8615c8/89a452ac4d4b45ed94f149dc01e984b8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453316,"updated":1583453316}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg14d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -255,24 +395,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg24d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8/a2e91ecbbf4844b18dbe215834cfb3b3","kid":"https://vaultname.vault.azure.net/keys/certprg24d8615c8/a2e91ecbbf4844b18dbe215834cfb3b3","sid":"https://vaultname.vault.azure.net/secrets/certprg24d8615c8/a2e91ecbbf4844b18dbe215834cfb3b3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg24d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certprg24d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8/183450fb64084352add599be41f02579","kid":"https://vaultname.vault.azure.net/keys/certprg24d8615c8/183450fb64084352add599be41f02579","sid":"https://vaultname.vault.azure.net/secrets/certprg24d8615c8/183450fb64084352add599be41f02579","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453316,"updated":1583453316}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg24d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -280,24 +434,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg34d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8/9d39f94620db42c791cf9cdc035cc7d8","kid":"https://vaultname.vault.azure.net/keys/certprg34d8615c8/9d39f94620db42c791cf9cdc035cc7d8","sid":"https://vaultname.vault.azure.net/secrets/certprg34d8615c8/9d39f94620db42c791cf9cdc035cc7d8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg34d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certprg34d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8/adbcc7422ad34946a238d0bbcfe220e3","kid":"https://vaultname.vault.azure.net/keys/certprg34d8615c8/adbcc7422ad34946a238d0bbcfe220e3","sid":"https://vaultname.vault.azure.net/secrets/certprg34d8615c8/adbcc7422ad34946a238d0bbcfe220e3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453316,"updated":1583453316}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg34d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -305,24 +473,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg44d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8/896c8df2c2a4499f9501a343233e7683","kid":"https://vaultname.vault.azure.net/keys/certprg44d8615c8/896c8df2c2a4499f9501a343233e7683","sid":"https://vaultname.vault.azure.net/secrets/certprg44d8615c8/896c8df2c2a4499f9501a343233e7683","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg44d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certprg44d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8/853f74e0189a467e88c6965256d814f7","kid":"https://vaultname.vault.azure.net/keys/certprg44d8615c8/853f74e0189a467e88c6965256d814f7","sid":"https://vaultname.vault.azure.net/secrets/certprg44d8615c8/853f74e0189a467e88c6965256d814f7","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453317,"updated":1583453317}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg44d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -330,24 +512,38 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg54d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8/65ffdbaf53df404fa7fd2f5d703533fc","kid":"https://vaultname.vault.azure.net/keys/certprg54d8615c8/65ffdbaf53df404fa7fd2f5d703533fc","sid":"https://vaultname.vault.azure.net/secrets/certprg54d8615c8/65ffdbaf53df404fa7fd2f5d703533fc","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg54d8615c8/import, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/certprg54d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8/00c2dee591454652a22b0c020dd6012e","kid":"https://vaultname.vault.azure.net/keys/certprg54d8615c8/00c2dee591454652a22b0c020dd6012e","sid":"https://vaultname.vault.azure.net/secrets/certprg54d8615c8/00c2dee591454652a22b0c020dd6012e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453317,"updated":1583453317}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg54d8615c8/import?api-version=7.1-preview
     - request:
         body: '{"value": "MIIJOwIBAzCCCPcGCSqGSIb3DQEHAaCCCOgEggjkMIII4DCCBgkGCSqGSIb3DQEHAaCCBfoEggX2MIIF8jCCBe4GCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAj15YH9pOE58AICB9AEggTYLrI+SAru2dBZRQRlJY7XQ3LeLkah2FcRR3dATDshZ2h0IA2oBrkQIdsLyAAWZ32qYR1qkWxLHn9AqXgu27AEbOk35+pITZaiy63YYBkkpR+pDdngZt19Z0PWrGwHEq5z6BHS2GLyyN8SSOCbdzCz7blj3+7IZYoMj4WOPgOm/tQ6U44SFWek46QwN2zeA4i97v7ftNNns27ms52jqfhOvTA9c/wyfZKAY4aKJfYYUmycKjnnRl012ldS2lOkASFt+lu4QCa72IY6ePtRudPCvmzRv2pkLYS6z3cI7omT8nHP3DymNOqLbFqr5O2M1ZYaLC63Q3xt3eVvbcPh3N08D1hHkhz/KDTvkRAQpvrW8ISKmgDdmzN55Pe55xHfSWGB7gPw8sZea57IxFzWHTK2yvTslooWoosmGxanYY2IG/no3EbPOWDKjPZ4ilYJe5JJ2immlxPz+2e2EOCKpDI+7fzQcRz3PTd3BK+budZ8aXX8aW/lOgKS8WmxZoKnOJBNWeTNWQFugmktXfdPHAdxMhjUXqeGQd8wTvZ4EzQNNafovwkI7IV/ZYoa++RGofVR3ZbRSiBNF6TDj/qXFt0wN/CQnsGAmQAGNiN+D4mY7i25dtTu/Jc7OxLdhAUFpHyJpyrYWLfvOiS5WYBeEDHkiPUa/8eZSPA3MXWZR1RiuDvuNqMjct1SSwdXADTtF68l/US1ksU657+XSC+6ly1A/upz+X71+C4Ho6W0751j5ZMT6xKjGh5pee7MVuduxIzXjWIy3YSd0fIT3U0A5NLEvJ9rfkx6JiHjRLx6V1tqsrtT6BsGtmCQR1UCJPLqsKVDvAINx3cPA/CGqr5OX2BGZlAihGmN6n7gv8w4O0k0LPTAe5YefgXN3m9pE867N31GtHVZaJ/UVgDNYS2jused4rw76ZWN41akx2QN0JSeMJqHXqVz6AKfz8ICS/dFnEGyBNpXiMRxrY/QPKi/wONwqsbDxRW7vZRVKs78pBkE0ksaShlZk5GkeayDWC/7Hi/NqUFtIloK9XB3paLxo1DGu5qqaF34jZdktzkXp0uZqpp+FfKZaiovMjt8F7yHCPk+LYpRsU2Cyc9DVoDA6rIgf+uEP4jppgehsxyT0lJHax2t869R2jYdsXwYUXjgwHIV0voj7bJYPGFlFjXOp6ZW86scsHM5xfsGQoK2Fp838VT34SHE1ZXU/puM7rviREHYW72pfpgGZUILQMohuTPnd8tFtAkbrmjLDo+k9xx7HUvgoFTiNNWuq/cRjr70FKNguMMTIrid+HwfmbRoaxENWdLcOTNeascER2a+37UQolKD5ksrPJG6RdNA7O2pzp3micDYRs/+s28cCIxO//J/d4nsgHp6RTuCu4+Jm9k0YTw2Xg75b2cWKrxGnDUgyIlvNPaZTB5QbMid4x44/lE0LLi9kcPQhRgrK07OnnrMgZvVGjt1CLGhKUv7KFc3xV1r1rwKkosxnoG99oCoTQtregcX5rIMjHgkc1IdflGJkZzaWMkYVFOJ4Weynz008i4ddkske5vabZs37Lb8iggUYNBYZyGzalruBgnQyK4fz38Fae4nWYjyildVfgyo/fCePR2ovOfphx9OQJi+M9BoFmPrAg+8ARDZ+R+5yzYuEc9ZoVX7nkp7LTGB3DANBgkrBgEEAYI3EQIxADATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGEAOAAwAGQAZgBmADgANgAtAGUAOQA2AGUALQA0ADIAMgA0AC0AYQBhADEAMQAtAGIAZAAxADkANABkADUAYQA2AGIANwA3MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAHQAcgBvAG4AZwAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIwggLPBgkqhkiG9w0BBwagggLAMIICvAIBADCCArUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECNX+VL2MxzzWAgIH0ICCAojmRBO+CPfVNUO0s+BVuwhOzikAGNBmQHNChmJ/pyzPbMUbx7tO63eIVSc67iERda2WCEmVwPigaVQkPaumsfp8+L6iV/BMf5RKlyRXcwh0vUdu2Qa7qadD+gFQ2kngf4Dk6vYo2/2HxayuIf6jpwe8vql4ca3ZtWXfuRix2fwgltM0bMz1g59d7x/glTfNqxNlsty0A/rWrPJjNbOPRU2XykLuc3AtlTtYsQ32Zsmu67A7UNBw6tVtkEXlFDqhavEhUEO3dvYqMY+QLxzpZhA0q44ZZ9/ex0X6QAFNK5wuWxCbupHWsgxRwKftrxyszMHsAvNoNcTlqcctee+ecNwTJQa1/MDbnhO6/qHA7cfG1qYDq8Th635vGNMW1w3sVS7l0uEvdayAsBHWTcOC2tlMa5bfHrhY8OEIqj5bN5H9RdFy8G/W239tjDu1OYjBDydiBqzBn8HG1DSj1Pjc0kd/82d4ZU0308KFTC3yGcRad0GnEH0Oi3iEJ9HbriUbfVMbXNHOF+MktWiDVqzndGMKmuJSdfTBKvGFvejAWVO5E4mgLvoaMmbchc3BO7sLeraHnJN5hvMBaLcQI38N86mUfTR8AP6AJ9c2k514KaDLclm4z6J8dMz60nUeo5D3YD09G6BavFHxSvJ8MF0Lu5zOFzEePDRFm9mH8W0N/sFlIaYfD/GWU/w44mQucjaBk95YtqOGRIj58tGDWr8iUdHwaYKGqU24zGeRae9DhFXPzZshV1ZGsBQFRaoYkyLAwdJWIXTi+c37YaC8FRSEnnNmS79Dou1Kc3BvK4EYKAD2KxjtUebrV174gD0Q+9YuJ0GXOTspBvCFd5VT2Rw5zDNrA/J3F5fMCk4wOzAfMAcGBSsOAwIaBBSxgh2xyF+88V4vAffBmZXv8Txt4AQU4O/NX4MjxSodbE7ApNAMIvrtREwCAgfQ",
           "pwd": "123", "policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
    @@ -355,4990 +551,9870 @@ interactions:
           "x509_props": {"subject": "CN=DefaultPolicy", "sans": {}, "key_usage": ["digitalSignature",
           "keyEncipherment"], "validity_months": 12}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['3503']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '3503'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certprg64d8615c8/import?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8/0ce10d30773f49c282dfc4c530d90b16","kid":"https://vaultname.vault.azure.net/keys/certprg64d8615c8/0ce10d30773f49c282dfc4c530d90b16","sid":"https://vaultname.vault.azure.net/secrets/certprg64d8615c8/0ce10d30773f49c282dfc4c530d90b16","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676722,"updated":1575676722,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676722,"updated":1575676722}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg64d8615c8/import, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8","deletedDate":1575676722,"scheduledPurgeDate":1583452722,"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","kid":"https://vaultname.vault.azure.net/keys/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","sid":"https://vaultname.vault.azure.net/secrets/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:48 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:52 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:54 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:56 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:06 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8","deletedDate":1575676722,"scheduledPurgeDate":1583452722,"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","kid":"https://vaultname.vault.azure.net/keys/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","sid":"https://vaultname.vault.azure.net/secrets/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:08 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8","deletedDate":1575676751,"scheduledPurgeDate":1583452751,"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","kid":"https://vaultname.vault.azure.net/keys/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","sid":"https://vaultname.vault.azure.net/secrets/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:15 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:17 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:19 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:21 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8","deletedDate":1575676751,"scheduledPurgeDate":1583452751,"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","kid":"https://vaultname.vault.azure.net/keys/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","sid":"https://vaultname.vault.azure.net/secrets/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:25 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8","deletedDate":1575676767,"scheduledPurgeDate":1583452767,"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","kid":"https://vaultname.vault.azure.net/keys/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","sid":"https://vaultname.vault.azure.net/secrets/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:27 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:27 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:29 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:31 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:33 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8","deletedDate":1575676767,"scheduledPurgeDate":1583452767,"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","kid":"https://vaultname.vault.azure.net/keys/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","sid":"https://vaultname.vault.azure.net/secrets/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:48 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8","deletedDate":1575676790,"scheduledPurgeDate":1583452790,"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","kid":"https://vaultname.vault.azure.net/keys/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","sid":"https://vaultname.vault.azure.net/secrets/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:52 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:54 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:56 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:06 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:08 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8","deletedDate":1575676790,"scheduledPurgeDate":1583452790,"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","kid":"https://vaultname.vault.azure.net/keys/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","sid":"https://vaultname.vault.azure.net/secrets/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8","deletedDate":1575676813,"scheduledPurgeDate":1583452813,"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","kid":"https://vaultname.vault.azure.net/keys/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","sid":"https://vaultname.vault.azure.net/secrets/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:15 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:17 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:19 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:21 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8","deletedDate":1575676813,"scheduledPurgeDate":1583452813,"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","kid":"https://vaultname.vault.azure.net/keys/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","sid":"https://vaultname.vault.azure.net/secrets/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:25 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8","deletedDate":1575676828,"scheduledPurgeDate":1583452828,"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","kid":"https://vaultname.vault.azure.net/keys/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","sid":"https://vaultname.vault.azure.net/secrets/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:27 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:27 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:29 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:31 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:33 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:39 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:41 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:43 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:45 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8","deletedDate":1575676828,"scheduledPurgeDate":1583452828,"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","kid":"https://vaultname.vault.azure.net/keys/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","sid":"https://vaultname.vault.azure.net/secrets/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:48 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8","deletedDate":1575676850,"scheduledPurgeDate":1583452850,"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","kid":"https://vaultname.vault.azure.net/keys/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","sid":"https://vaultname.vault.azure.net/secrets/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:52 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:57 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:59 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:09 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8","deletedDate":1575676850,"scheduledPurgeDate":1583452850,"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","kid":"https://vaultname.vault.azure.net/keys/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","sid":"https://vaultname.vault.azure.net/secrets/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8","deletedDate":1575676873,"scheduledPurgeDate":1583452873,"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8/2b148065d06e464192dc5e7b9bbc9e6a","kid":"https://vaultname.vault.azure.net/keys/certprg04d8615c8/2b148065d06e464192dc5e7b9bbc9e6a","sid":"https://vaultname.vault.azure.net/secrets/certprg04d8615c8/2b148065d06e464192dc5e7b9bbc9e6a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:15 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:17 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:19 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:21 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:25 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8","deletedDate":1575676873,"scheduledPurgeDate":1583452873,"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8/2b148065d06e464192dc5e7b9bbc9e6a","kid":"https://vaultname.vault.azure.net/keys/certprg04d8615c8/2b148065d06e464192dc5e7b9bbc9e6a","sid":"https://vaultname.vault.azure.net/secrets/certprg04d8615c8/2b148065d06e464192dc5e7b9bbc9e6a","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:27 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8","deletedDate":1575676890,"scheduledPurgeDate":1583452890,"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8/9a165fb8e3a04ebfa88b4ea8caf5e389","kid":"https://vaultname.vault.azure.net/keys/certprg14d8615c8/9a165fb8e3a04ebfa88b4ea8caf5e389","sid":"https://vaultname.vault.azure.net/secrets/certprg14d8615c8/9a165fb8e3a04ebfa88b4ea8caf5e389","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:29 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:49 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8","deletedDate":1575676890,"scheduledPurgeDate":1583452890,"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8/9a165fb8e3a04ebfa88b4ea8caf5e389","kid":"https://vaultname.vault.azure.net/keys/certprg14d8615c8/9a165fb8e3a04ebfa88b4ea8caf5e389","sid":"https://vaultname.vault.azure.net/secrets/certprg14d8615c8/9a165fb8e3a04ebfa88b4ea8caf5e389","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:51 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8","deletedDate":1575676913,"scheduledPurgeDate":1583452913,"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8/a2e91ecbbf4844b18dbe215834cfb3b3","kid":"https://vaultname.vault.azure.net/keys/certprg24d8615c8/a2e91ecbbf4844b18dbe215834cfb3b3","sid":"https://vaultname.vault.azure.net/secrets/certprg24d8615c8/a2e91ecbbf4844b18dbe215834cfb3b3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:53 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:53 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:57 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:59 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:09 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8","deletedDate":1575676913,"scheduledPurgeDate":1583452913,"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8/a2e91ecbbf4844b18dbe215834cfb3b3","kid":"https://vaultname.vault.azure.net/keys/certprg24d8615c8/a2e91ecbbf4844b18dbe215834cfb3b3","sid":"https://vaultname.vault.azure.net/secrets/certprg24d8615c8/a2e91ecbbf4844b18dbe215834cfb3b3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8","deletedDate":1575676934,"scheduledPurgeDate":1583452934,"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8/9d39f94620db42c791cf9cdc035cc7d8","kid":"https://vaultname.vault.azure.net/keys/certprg34d8615c8/9d39f94620db42c791cf9cdc035cc7d8","sid":"https://vaultname.vault.azure.net/secrets/certprg34d8615c8/9d39f94620db42c791cf9cdc035cc7d8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:15 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:18 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:20 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:22 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8","deletedDate":1575676934,"scheduledPurgeDate":1583452934,"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8/9d39f94620db42c791cf9cdc035cc7d8","kid":"https://vaultname.vault.azure.net/keys/certprg34d8615c8/9d39f94620db42c791cf9cdc035cc7d8","sid":"https://vaultname.vault.azure.net/secrets/certprg34d8615c8/9d39f94620db42c791cf9cdc035cc7d8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8","deletedDate":1575676957,"scheduledPurgeDate":1583452957,"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8/896c8df2c2a4499f9501a343233e7683","kid":"https://vaultname.vault.azure.net/keys/certprg44d8615c8/896c8df2c2a4499f9501a343233e7683","sid":"https://vaultname.vault.azure.net/secrets/certprg44d8615c8/896c8df2c2a4499f9501a343233e7683","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:43 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:45 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:49 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:51 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:53 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8","deletedDate":1575676957,"scheduledPurgeDate":1583452957,"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8/896c8df2c2a4499f9501a343233e7683","kid":"https://vaultname.vault.azure.net/keys/certprg44d8615c8/896c8df2c2a4499f9501a343233e7683","sid":"https://vaultname.vault.azure.net/secrets/certprg44d8615c8/896c8df2c2a4499f9501a343233e7683","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:57 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8","deletedDate":1575676980,"scheduledPurgeDate":1583452980,"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8/65ffdbaf53df404fa7fd2f5d703533fc","kid":"https://vaultname.vault.azure.net/keys/certprg54d8615c8/65ffdbaf53df404fa7fd2f5d703533fc","sid":"https://vaultname.vault.azure.net/secrets/certprg54d8615c8/65ffdbaf53df404fa7fd2f5d703533fc","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:59 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:59 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8","deletedDate":1575676980,"scheduledPurgeDate":1583452980,"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8/65ffdbaf53df404fa7fd2f5d703533fc","kid":"https://vaultname.vault.azure.net/keys/certprg54d8615c8/65ffdbaf53df404fa7fd2f5d703533fc","sid":"https://vaultname.vault.azure.net/secrets/certprg54d8615c8/65ffdbaf53df404fa7fd2f5d703533fc","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676721,"updated":1575676721}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/certprg64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8","deletedDate":1575676996,"scheduledPurgeDate":1583452996,"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8/0ce10d30773f49c282dfc4c530d90b16","kid":"https://vaultname.vault.azure.net/keys/certprg64d8615c8/0ce10d30773f49c282dfc4c530d90b16","sid":"https://vaultname.vault.azure.net/secrets/certprg64d8615c8/0ce10d30773f49c282dfc4c530d90b16","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676722,"updated":1575676722,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676722,"updated":1575676722}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:16 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certprg64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:16 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:18 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:20 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:22 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: certprg64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '100', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:33 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8","deletedDate":1575676996,"scheduledPurgeDate":1583452996,"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8/0ce10d30773f49c282dfc4c530d90b16","kid":"https://vaultname.vault.azure.net/keys/certprg64d8615c8/0ce10d30773f49c282dfc4c530d90b16","sid":"https://vaultname.vault.azure.net/secrets/certprg64d8615c8/0ce10d30773f49c282dfc4c530d90b16","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676722,"updated":1575676722,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676722,"updated":1575676722}}}'}
    -    headers: {cache-control: no-cache, content-length: '2013', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates?api-version=7.0
    -  response:
    -    body: {string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8","deletedDate":1575676873,"scheduledPurgeDate":1583452873,"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8","deletedDate":1575676890,"scheduledPurgeDate":1583452890,"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8","deletedDate":1575676913,"scheduledPurgeDate":1583452913,"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676720,"updated":1575676720,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8","deletedDate":1575676934,"scheduledPurgeDate":1583452934,"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8","deletedDate":1575676957,"scheduledPurgeDate":1583452957,"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8","deletedDate":1575676980,"scheduledPurgeDate":1583452980,"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676721,"updated":1575676721,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8","deletedDate":1575676996,"scheduledPurgeDate":1583452996,"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676722,"updated":1575676722,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8","deletedDate":1575676722,"scheduledPurgeDate":1583452722,"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8","deletedDate":1575676751,"scheduledPurgeDate":1583452751,"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8","deletedDate":1575676767,"scheduledPurgeDate":1583452767,"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8","deletedDate":1575676790,"scheduledPurgeDate":1583452790,"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8","deletedDate":1575676813,"scheduledPurgeDate":1583452813,"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8","deletedDate":1575676828,"scheduledPurgeDate":1583452828,"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8","deletedDate":1575676850,"scheduledPurgeDate":1583452850,"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '6019', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","kid":"https://vaultname.vault.azure.net/keys/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","sid":"https://vaultname.vault.azure.net/secrets/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec04d8615c8/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:48 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:52 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:54 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:56 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec04d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","kid":"https://vaultname.vault.azure.net/keys/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","sid":"https://vaultname.vault.azure.net/secrets/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","kid":"https://vaultname.vault.azure.net/keys/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","sid":"https://vaultname.vault.azure.net/secrets/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec14d8615c8/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:09 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:15 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:17 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec14d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:19 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","kid":"https://vaultname.vault.azure.net/keys/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","sid":"https://vaultname.vault.azure.net/secrets/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:21 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","kid":"https://vaultname.vault.azure.net/keys/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","sid":"https://vaultname.vault.azure.net/secrets/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec24d8615c8/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:25 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:27 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:29 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:31 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:33 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:39 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec24d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:41 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","kid":"https://vaultname.vault.azure.net/keys/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","sid":"https://vaultname.vault.azure.net/secrets/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:43 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","kid":"https://vaultname.vault.azure.net/keys/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","sid":"https://vaultname.vault.azure.net/secrets/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:45 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec34d8615c8/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:45 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:49 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:51 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:53 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:57 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:04:59 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec34d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","kid":"https://vaultname.vault.azure.net/keys/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","sid":"https://vaultname.vault.azure.net/secrets/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/certificates/certprg64d8615c8/import?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8/09361964b7974f6394516ac772f22fb1","kid":"https://vaultname.vault.azure.net/keys/certprg64d8615c8/09361964b7974f6394516ac772f22fb1","sid":"https://vaultname.vault.azure.net/secrets/certprg64d8615c8/09361964b7974f6394516ac772f22fb1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453317,"updated":1583453317}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg64d8615c8/import?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8","deletedDate":1583453318,"scheduledPurgeDate":1591229318,"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","kid":"https://vaultname.vault.azure.net/keys/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","sid":"https://vaultname.vault.azure.net/secrets/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453312,"updated":1583453312,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453312,"updated":1583453312}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8","deletedDate":1583453318,"scheduledPurgeDate":1591229318,"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","kid":"https://vaultname.vault.azure.net/keys/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","sid":"https://vaultname.vault.azure.net/secrets/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453312,"updated":1583453312,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453312,"updated":1583453312}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8","deletedDate":1583453345,"scheduledPurgeDate":1591229345,"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/21e31574b3474131af556f037343e276","kid":"https://vaultname.vault.azure.net/keys/certrec14d8615c8/21e31574b3474131af556f037343e276","sid":"https://vaultname.vault.azure.net/secrets/certrec14d8615c8/21e31574b3474131af556f037343e276","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:07 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:19 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8","deletedDate":1583453345,"scheduledPurgeDate":1591229345,"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/21e31574b3474131af556f037343e276","kid":"https://vaultname.vault.azure.net/keys/certrec14d8615c8/21e31574b3474131af556f037343e276","sid":"https://vaultname.vault.azure.net/secrets/certrec14d8615c8/21e31574b3474131af556f037343e276","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8","deletedDate":1583453370,"scheduledPurgeDate":1591229370,"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","kid":"https://vaultname.vault.azure.net/keys/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","sid":"https://vaultname.vault.azure.net/secrets/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8","deletedDate":1583453370,"scheduledPurgeDate":1591229370,"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","kid":"https://vaultname.vault.azure.net/keys/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","sid":"https://vaultname.vault.azure.net/secrets/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8","deletedDate":1583453397,"scheduledPurgeDate":1591229397,"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","kid":"https://vaultname.vault.azure.net/keys/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","sid":"https://vaultname.vault.azure.net/secrets/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:10 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8","deletedDate":1583453397,"scheduledPurgeDate":1591229397,"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","kid":"https://vaultname.vault.azure.net/keys/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","sid":"https://vaultname.vault.azure.net/secrets/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8","deletedDate":1583453423,"scheduledPurgeDate":1591229423,"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","kid":"https://vaultname.vault.azure.net/keys/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","sid":"https://vaultname.vault.azure.net/secrets/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:28 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8","deletedDate":1583453423,"scheduledPurgeDate":1591229423,"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","kid":"https://vaultname.vault.azure.net/keys/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","sid":"https://vaultname.vault.azure.net/secrets/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8","deletedDate":1583453448,"scheduledPurgeDate":1591229448,"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","kid":"https://vaultname.vault.azure.net/keys/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","sid":"https://vaultname.vault.azure.net/secrets/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:10 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8","deletedDate":1583453448,"scheduledPurgeDate":1591229448,"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","kid":"https://vaultname.vault.azure.net/keys/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","sid":"https://vaultname.vault.azure.net/secrets/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8","deletedDate":1583453473,"scheduledPurgeDate":1591229473,"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","kid":"https://vaultname.vault.azure.net/keys/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","sid":"https://vaultname.vault.azure.net/secrets/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453315,"updated":1583453315}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:17 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:19 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:28 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8","deletedDate":1583453473,"scheduledPurgeDate":1591229473,"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","kid":"https://vaultname.vault.azure.net/keys/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","sid":"https://vaultname.vault.azure.net/secrets/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453315,"updated":1583453315}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8","deletedDate":1583453499,"scheduledPurgeDate":1591229499,"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8/e133bb3dbedf4c0daa560e16470fb6b2","kid":"https://vaultname.vault.azure.net/keys/certprg04d8615c8/e133bb3dbedf4c0daa560e16470fb6b2","sid":"https://vaultname.vault.azure.net/secrets/certprg04d8615c8/e133bb3dbedf4c0daa560e16470fb6b2","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453315,"updated":1583453315}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:47 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8","deletedDate":1583453499,"scheduledPurgeDate":1591229499,"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8/e133bb3dbedf4c0daa560e16470fb6b2","kid":"https://vaultname.vault.azure.net/keys/certprg04d8615c8/e133bb3dbedf4c0daa560e16470fb6b2","sid":"https://vaultname.vault.azure.net/secrets/certprg04d8615c8/e133bb3dbedf4c0daa560e16470fb6b2","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453315,"updated":1583453315}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8","deletedDate":1583453522,"scheduledPurgeDate":1591229522,"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8/89a452ac4d4b45ed94f149dc01e984b8","kid":"https://vaultname.vault.azure.net/keys/certprg14d8615c8/89a452ac4d4b45ed94f149dc01e984b8","sid":"https://vaultname.vault.azure.net/secrets/certprg14d8615c8/89a452ac4d4b45ed94f149dc01e984b8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453316,"updated":1583453316}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:17 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:19 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8","deletedDate":1583453522,"scheduledPurgeDate":1591229522,"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8/89a452ac4d4b45ed94f149dc01e984b8","kid":"https://vaultname.vault.azure.net/keys/certprg14d8615c8/89a452ac4d4b45ed94f149dc01e984b8","sid":"https://vaultname.vault.azure.net/secrets/certprg14d8615c8/89a452ac4d4b45ed94f149dc01e984b8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453316,"updated":1583453316}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8","deletedDate":1583453550,"scheduledPurgeDate":1591229550,"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8/183450fb64084352add599be41f02579","kid":"https://vaultname.vault.azure.net/keys/certprg24d8615c8/183450fb64084352add599be41f02579","sid":"https://vaultname.vault.azure.net/secrets/certprg24d8615c8/183450fb64084352add599be41f02579","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453316,"updated":1583453316}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8","deletedDate":1583453550,"scheduledPurgeDate":1591229550,"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8/183450fb64084352add599be41f02579","kid":"https://vaultname.vault.azure.net/keys/certprg24d8615c8/183450fb64084352add599be41f02579","sid":"https://vaultname.vault.azure.net/secrets/certprg24d8615c8/183450fb64084352add599be41f02579","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453316,"updated":1583453316}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8","deletedDate":1583453575,"scheduledPurgeDate":1591229575,"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8/adbcc7422ad34946a238d0bbcfe220e3","kid":"https://vaultname.vault.azure.net/keys/certprg34d8615c8/adbcc7422ad34946a238d0bbcfe220e3","sid":"https://vaultname.vault.azure.net/secrets/certprg34d8615c8/adbcc7422ad34946a238d0bbcfe220e3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453316,"updated":1583453316}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:03 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:07 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8","deletedDate":1583453575,"scheduledPurgeDate":1591229575,"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8/adbcc7422ad34946a238d0bbcfe220e3","kid":"https://vaultname.vault.azure.net/keys/certprg34d8615c8/adbcc7422ad34946a238d0bbcfe220e3","sid":"https://vaultname.vault.azure.net/secrets/certprg34d8615c8/adbcc7422ad34946a238d0bbcfe220e3","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453316,"updated":1583453316}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8","deletedDate":1583453600,"scheduledPurgeDate":1591229600,"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8/853f74e0189a467e88c6965256d814f7","kid":"https://vaultname.vault.azure.net/keys/certprg44d8615c8/853f74e0189a467e88c6965256d814f7","sid":"https://vaultname.vault.azure.net/secrets/certprg44d8615c8/853f74e0189a467e88c6965256d814f7","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453317,"updated":1583453317}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:28 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8","deletedDate":1583453600,"scheduledPurgeDate":1591229600,"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8/853f74e0189a467e88c6965256d814f7","kid":"https://vaultname.vault.azure.net/keys/certprg44d8615c8/853f74e0189a467e88c6965256d814f7","sid":"https://vaultname.vault.azure.net/secrets/certprg44d8615c8/853f74e0189a467e88c6965256d814f7","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453317,"updated":1583453317}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8","deletedDate":1583453624,"scheduledPurgeDate":1591229624,"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8/00c2dee591454652a22b0c020dd6012e","kid":"https://vaultname.vault.azure.net/keys/certprg54d8615c8/00c2dee591454652a22b0c020dd6012e","sid":"https://vaultname.vault.azure.net/secrets/certprg54d8615c8/00c2dee591454652a22b0c020dd6012e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453317,"updated":1583453317}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:13:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8","deletedDate":1583453624,"scheduledPurgeDate":1591229624,"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8/00c2dee591454652a22b0c020dd6012e","kid":"https://vaultname.vault.azure.net/keys/certprg54d8615c8/00c2dee591454652a22b0c020dd6012e","sid":"https://vaultname.vault.azure.net/secrets/certprg54d8615c8/00c2dee591454652a22b0c020dd6012e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453317,"updated":1583453317}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:10 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/certificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8","deletedDate":1583453651,"scheduledPurgeDate":1591229651,"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8/09361964b7974f6394516ac772f22fb1","kid":"https://vaultname.vault.azure.net/keys/certprg64d8615c8/09361964b7974f6394516ac772f22fb1","sid":"https://vaultname.vault.azure.net/secrets/certprg64d8615c8/09361964b7974f6394516ac772f22fb1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453317,"updated":1583453317}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:19 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:28 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: certprg64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '100'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8","deletedDate":1583453651,"scheduledPurgeDate":1591229651,"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8/09361964b7974f6394516ac772f22fb1","kid":"https://vaultname.vault.azure.net/keys/certprg64d8615c8/09361964b7974f6394516ac772f22fb1","sid":"https://vaultname.vault.azure.net/secrets/certprg64d8615c8/09361964b7974f6394516ac772f22fb1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453317,"updated":1583453317}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2013'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8","deletedDate":1583453499,"scheduledPurgeDate":1591229499,"id":"https://vaultname.vault.azure.net/certificates/certprg04d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8","deletedDate":1583453522,"scheduledPurgeDate":1591229522,"id":"https://vaultname.vault.azure.net/certificates/certprg14d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8","deletedDate":1583453550,"scheduledPurgeDate":1591229550,"id":"https://vaultname.vault.azure.net/certificates/certprg24d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8","deletedDate":1583453575,"scheduledPurgeDate":1591229575,"id":"https://vaultname.vault.azure.net/certificates/certprg34d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453316,"updated":1583453316,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8","deletedDate":1583453600,"scheduledPurgeDate":1591229600,"id":"https://vaultname.vault.azure.net/certificates/certprg44d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8","deletedDate":1583453624,"scheduledPurgeDate":1591229624,"id":"https://vaultname.vault.azure.net/certificates/certprg54d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8","deletedDate":1583453651,"scheduledPurgeDate":1591229651,"id":"https://vaultname.vault.azure.net/certificates/certprg64d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453317,"updated":1583453317,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8","deletedDate":1583453318,"scheduledPurgeDate":1591229318,"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453312,"updated":1583453312,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8","deletedDate":1583453345,"scheduledPurgeDate":1591229345,"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8","deletedDate":1583453370,"scheduledPurgeDate":1591229370,"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8","deletedDate":1583453397,"scheduledPurgeDate":1591229397,"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8","deletedDate":1583453423,"scheduledPurgeDate":1591229423,"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8","deletedDate":1583453448,"scheduledPurgeDate":1591229448,"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8","deletedDate":1583453473,"scheduledPurgeDate":1591229473,"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '6019'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","kid":"https://vaultname.vault.azure.net/keys/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","sid":"https://vaultname.vault.azure.net/secrets/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:09 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec44d8615c8/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:09 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:16 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:18 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:20 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:22 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec44d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","kid":"https://vaultname.vault.azure.net/keys/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","sid":"https://vaultname.vault.azure.net/secrets/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec04d8615c8/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","kid":"https://vaultname.vault.azure.net/keys/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","sid":"https://vaultname.vault.azure.net/secrets/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453312,"updated":1583453312,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453312,"updated":1583453312}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec04d8615c8/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:47 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:14:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec04d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","kid":"https://vaultname.vault.azure.net/keys/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","sid":"https://vaultname.vault.azure.net/secrets/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453312,"updated":1583453312,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453312,"updated":1583453312}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","kid":"https://vaultname.vault.azure.net/keys/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","sid":"https://vaultname.vault.azure.net/secrets/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec54d8615c8/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec54d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec54d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec54d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec54d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec54d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec54d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec54d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec54d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec54d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","kid":"https://vaultname.vault.azure.net/keys/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","sid":"https://vaultname.vault.azure.net/secrets/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec54d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec14d8615c8/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/21e31574b3474131af556f037343e276","kid":"https://vaultname.vault.azure.net/keys/certrec14d8615c8/21e31574b3474131af556f037343e276","sid":"https://vaultname.vault.azure.net/secrets/certrec14d8615c8/21e31574b3474131af556f037343e276","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec14d8615c8/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:17 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:19 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec14d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/21e31574b3474131af556f037343e276","kid":"https://vaultname.vault.azure.net/keys/certrec14d8615c8/21e31574b3474131af556f037343e276","sid":"https://vaultname.vault.azure.net/secrets/certrec14d8615c8/21e31574b3474131af556f037343e276","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","kid":"https://vaultname.vault.azure.net/keys/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","sid":"https://vaultname.vault.azure.net/secrets/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certrec64d8615c8/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:52 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:54 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:56 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:05:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:06:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:06:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:06:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: certrec64d8615c8"}}'}
    -    headers: {cache-control: no-cache, content-length: '92', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:06:06 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","kid":"https://vaultname.vault.azure.net/keys/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","sid":"https://vaultname.vault.azure.net/secrets/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:06:08 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec24d8615c8/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","kid":"https://vaultname.vault.azure.net/keys/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","sid":"https://vaultname.vault.azure.net/secrets/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec24d8615c8/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:28 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec24d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","kid":"https://vaultname.vault.azure.net/keys/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","sid":"https://vaultname.vault.azure.net/secrets/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: POST
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec34d8615c8/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","kid":"https://vaultname.vault.azure.net/keys/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","sid":"https://vaultname.vault.azure.net/secrets/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec34d8615c8/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:15:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:03 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:10 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec34d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","kid":"https://vaultname.vault.azure.net/keys/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","sid":"https://vaultname.vault.azure.net/secrets/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: POST
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec44d8615c8/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","kid":"https://vaultname.vault.azure.net/keys/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","sid":"https://vaultname.vault.azure.net/secrets/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec44d8615c8/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec44d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","kid":"https://vaultname.vault.azure.net/keys/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","sid":"https://vaultname.vault.azure.net/secrets/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: POST
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec54d8615c8/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","kid":"https://vaultname.vault.azure.net/keys/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","sid":"https://vaultname.vault.azure.net/secrets/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec54d8615c8/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:16:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec54d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","kid":"https://vaultname.vault.azure.net/keys/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","sid":"https://vaultname.vault.azure.net/secrets/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: POST
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certrec64d8615c8/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","kid":"https://vaultname.vault.azure.net/keys/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","sid":"https://vaultname.vault.azure.net/secrets/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453315,"updated":1583453315}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certrec64d8615c8/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:10 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:17 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:19 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:28 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        certrec64d8615c8"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '92'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","kid":"https://vaultname.vault.azure.net/keys/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","sid":"https://vaultname.vault.azure.net/secrets/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453315,"updated":1583453315}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:17:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:06:10 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg04d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Fri, 06 Mar 2020 00:17:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg04d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:06:10 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg14d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Fri, 06 Mar 2020 00:17:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg14d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:06:10 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg24d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Fri, 06 Mar 2020 00:17:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg24d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:06:11 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg34d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Fri, 06 Mar 2020 00:17:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg34d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:06:11 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg44d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Fri, 06 Mar 2020 00:17:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg44d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:06:11 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg54d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Fri, 06 Mar 2020 00:17:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg54d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:06:11 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates/certprg64d8615c8, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates?api-version=7.0
    -  response:
    -    body: {string: '{"value":[],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '28', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:07:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /deletedcertificates, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","kid":"https://vaultname.vault.azure.net/keys/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","sid":"https://vaultname.vault.azure.net/secrets/certrec04d8615c8/95d73eb44edc4568af98afe8f7f4b34e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676717,"updated":1575676717,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:07:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec04d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","kid":"https://vaultname.vault.azure.net/keys/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","sid":"https://vaultname.vault.azure.net/secrets/certrec14d8615c8/368d13e0132c42108f2d5af4b271291f","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:07:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec14d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","kid":"https://vaultname.vault.azure.net/keys/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","sid":"https://vaultname.vault.azure.net/secrets/certrec24d8615c8/679e437c4bac4c338a320228e134e64b","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:07:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec24d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","kid":"https://vaultname.vault.azure.net/keys/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","sid":"https://vaultname.vault.azure.net/secrets/certrec34d8615c8/751d8c22641345c29445dccdfd75194e","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676718,"updated":1575676718,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676718,"updated":1575676718}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:07:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec34d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","kid":"https://vaultname.vault.azure.net/keys/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","sid":"https://vaultname.vault.azure.net/secrets/certrec44d8615c8/a78159f52277408ca057c7be1c4fafa0","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:07:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec44d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","kid":"https://vaultname.vault.azure.net/keys/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","sid":"https://vaultname.vault.azure.net/secrets/certrec54d8615c8/5fe5781dfdba424b95218369e5e02295","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:07:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec54d8615c8/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","kid":"https://vaultname.vault.azure.net/keys/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","sid":"https://vaultname.vault.azure.net/secrets/certrec64d8615c8/2ab05fdb4c0545f696d67b4812a3d848","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1575676719,"updated":1575676719,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676719,"updated":1575676719}}}'}
    -    headers: {cache-control: no-cache, content-length: '1855', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:07:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, tbxyit7qdez7hdabapjoo7mm.vault.azure.net,
    -        /certificates/certrec64d8615c8/, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Fri, 06 Mar 2020 00:17:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates/certprg64d8615c8?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":[],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '28'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:18:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/deletedcertificates?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","kid":"https://vaultname.vault.azure.net/keys/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","sid":"https://vaultname.vault.azure.net/secrets/certrec04d8615c8/37d0f49dca0146bca0a49faf00001551","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453312,"updated":1583453312,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec04d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453312,"updated":1583453312}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:18:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec04d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/21e31574b3474131af556f037343e276","kid":"https://vaultname.vault.azure.net/keys/certrec14d8615c8/21e31574b3474131af556f037343e276","sid":"https://vaultname.vault.azure.net/secrets/certrec14d8615c8/21e31574b3474131af556f037343e276","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec14d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:18:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec14d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","kid":"https://vaultname.vault.azure.net/keys/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","sid":"https://vaultname.vault.azure.net/secrets/certrec24d8615c8/5b64a6cd63fa4505b6cf6a0ff4d4a687","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453313,"updated":1583453313,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec24d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:18:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec24d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","kid":"https://vaultname.vault.azure.net/keys/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","sid":"https://vaultname.vault.azure.net/secrets/certrec34d8615c8/23355ca3b1444c4abe8aa573a50e89da","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec34d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:18:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec34d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","kid":"https://vaultname.vault.azure.net/keys/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","sid":"https://vaultname.vault.azure.net/secrets/certrec44d8615c8/ddce686f08c04067bf3501fc6a804d34","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec44d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:18:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec44d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","kid":"https://vaultname.vault.azure.net/keys/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","sid":"https://vaultname.vault.azure.net/secrets/certrec54d8615c8/15db388c82494bdc8c4c58f86af3c7d1","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453314,"updated":1583453314,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec54d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:18:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec54d8615c8/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","kid":"https://vaultname.vault.azure.net/keys/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","sid":"https://vaultname.vault.azure.net/secrets/certrec64d8615c8/da598ce033c84ddf978fec7608c104b2","x5t":"fLi3U52HunIVNXubkEnf8tP6Wbo","cer":"MIICODCCAeagAwIBAgIQqHmpBAv+CY9IJFoUhlbziTAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTE1MDQyOTIxNTM0MVoXDTM5MTIzMTIzNTk1OVowFzEVMBMGA1UEAxMMS2V5VmF1bHRUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5bVAT73zr4+N4WVv2+SvTunAw08ksS4BrJW/nNliz3S9XuzMBMXvmYzU5HJ8TtEgluBiZZYd5qsMJD+OXHSNbsLdmMhni0jYX09h3XlC2VJw2sGKeYF+xEaavXm337aZZaZyjrFBrrUl51UePaN+kVFXNlBb3N3TYpqa7KokXenJQuR+i9Gv9a77c0UsSsDSryxppYhKK7HvTZCpKrhVtulF5iPMswWe9np3uggfMamyIsK/0L7X9w9B2qN7993RR0A00nOk4H6CnkuwO77dSsD0KJsk6FyAoZBzRXDZh9+d9R76zCL506NcQy/jl0lCiQYwsUX73PG5pxOh02OwKwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBAGqIjo2geVagzuzaZOe1ClGKhZeiCKfWAxklaGN+qlGUbVS4IN4V1lot3VKnzabasmkEHeNxPwLn1qvSD0cX9CE=","attributes":{"enabled":true,"nbf":1430344421,"exp":2208988799,"created":1583453315,"updated":1583453315,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certrec64d8615c8/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=KeyVaultTest","ekus":[],"key_usage":[],"validity_months":297,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453315,"updated":1583453315}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1855'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:18:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rdmomfphkxcdnncqfymxywz3.vault.azure.net/certificates/certrec64d8615c8/?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_backup_restore.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_backup_restore.yaml
    index 696169dc75d2..3ff3cffec687 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_backup_restore.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_backup_restore.yaml
    @@ -2,236 +2,464 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqEj4qPUY8UVqbRKocd8D7aXQhzgEcxsLSPoQbcUF3EUCJomMwkSXFnQV+STZsKoxNdX39E6mKZplqsacaM1uP90Ar/nUngcYnUGLfUiRuZJzarBoYcGvQ2v/az8W+5cVZH2VshE/y2wyzXEkpO4UQ4arY5VtsLptGFviVnGMYgCqz2quG2QVM4Qa7jPl2+FLG9Vj1oDsHcRtA6DRFAGu99Nz3bpQvOcCgIt2CZC3tZaYKc/LX6kryC+OBl3g87y6Iif3uYLF7++DD465pWnXt45UwQraGFtX0hcvWp2YkIjNNaNGom4w5gkFMyR4IZRvkRwa6m+NUtcUvQsSRc0CYwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAJzaQggofvl6ZkXTKzkDAzz8PM8dZL+1aYJgYeHhPu8YFHueRN8aaFEPkjGrpYHHv03aiqp2/c6UA4hkzO/meYFkoT7jJNy9ix2bb28MfQceCbDfsW9MbNkyOz6zoBsoqesIgFj97fSDbzIxTYI19AJgPHIbSjlrzdunw0GvUmKyyZ+bZq8n40LCcW3aFMXy8PvVc2fALAez3MXqxd73YbVg2KnkM8sFNxAKVORAtjIS8HWdf9G+IlqQOCR4H78HRQoxqJRsIDT3vChbE4GbqDjgua1q3G6+l9BfMZEGV2f48uTfq/es8iRvRo99o4nfn6Un7B02Etx6+1fiuijl/wQ=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Certificate request is in progress. This may take some
    +        time based on the issuer provider. Please check again later.","request_id":"dc9abd0fc27d4e268345dc676bd86cfb"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview&request_id=dc9abd0fc27d4e268345dc676bd86cfb
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsktPmWCDtHBn86LEL97cdbpOzNmaPEiUbBjQmRhYrWgfXei5TBly29hAtCXngom57x0GLQ3jAv4uPeolmHXB78znYC820W64PiDks5B6Mrv/aUhViSixUdxRdGerqjH3Iqho7nexKVcsAoYrhUftgW7h6UzY46R7uq3aQ44zQ3ILX/9WmFMvViX/LPkvenQOhidCetpDKlM8Jn8HcZC7ps1+8PxsuDn08lMYmmOnR0W/dzyoIjxbrXICp1dOWomLTDKTLQQyoqRiZAUOWBrLNdS8bPpTRkIK25jGK4M7ygxMxrlkQ9fUDgdKXWYqRXgZjRg3mZTE24b+KIEjaVKEfQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAH93qLFhpxspN/MKz+bBxZCnuHfYxXE2ukT2RtLh3IF0GI5152LCHWDTCyuehYOGFvA13bfyJlvyC3y6DXpqGB7Gglnj2fgcvOFUjI7xyOmJz4vsPeK+q6+/rPBNiH55EqoMiIInuoOiBVhghrGMfBQASKmyVBhLBLEkvWERMXmbAqFziFNE3gcWupxebL2JRUVKxgfrfGT1BJha6k1r2CLOcxx9hnoKxmUaQTXwKylO2356JClXXLAbdXz8gS0ZzG+n4hFvvpPZyBueUfbWmhDWHjPHPDDk/pFLOzzGE6hMJ88LUExzrDwl3ycP8qQNTuYrzSGDKyS7e/Jl4kNenAA=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqEj4qPUY8UVqbRKocd8D7aXQhzgEcxsLSPoQbcUF3EUCJomMwkSXFnQV+STZsKoxNdX39E6mKZplqsacaM1uP90Ar/nUngcYnUGLfUiRuZJzarBoYcGvQ2v/az8W+5cVZH2VshE/y2wyzXEkpO4UQ4arY5VtsLptGFviVnGMYgCqz2quG2QVM4Qa7jPl2+FLG9Vj1oDsHcRtA6DRFAGu99Nz3bpQvOcCgIt2CZC3tZaYKc/LX6kryC+OBl3g87y6Iif3uYLF7++DD465pWnXt45UwQraGFtX0hcvWp2YkIjNNaNGom4w5gkFMyR4IZRvkRwa6m+NUtcUvQsSRc0CYwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAJzaQggofvl6ZkXTKzkDAzz8PM8dZL+1aYJgYeHhPu8YFHueRN8aaFEPkjGrpYHHv03aiqp2/c6UA4hkzO/meYFkoT7jJNy9ix2bb28MfQceCbDfsW9MbNkyOz6zoBsoqesIgFj97fSDbzIxTYI19AJgPHIbSjlrzdunw0GvUmKyyZ+bZq8n40LCcW3aFMXy8PvVc2fALAez3MXqxd73YbVg2KnkM8sFNxAKVORAtjIS8HWdf9G+IlqQOCR4H78HRQoxqJRsIDT3vChbE4GbqDjgua1q3G6+l9BfMZEGV2f48uTfq/es8iRvRo99o4nfn6Un7B02Etx6+1fiuijl/wQ=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"1ba869212a6043848f3b4ad82bb3197c"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1343']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:39 GMT']
    -      expires: ['-1']
    -      location: ['https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0&request_id=1ba869212a6043848f3b4ad82bb3197c']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 202, message: Accepted}
    +        time based on the issuer provider. Please check again later.","request_id":"dc9abd0fc27d4e268345dc676bd86cfb"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsktPmWCDtHBn86LEL97cdbpOzNmaPEiUbBjQmRhYrWgfXei5TBly29hAtCXngom57x0GLQ3jAv4uPeolmHXB78znYC820W64PiDks5B6Mrv/aUhViSixUdxRdGerqjH3Iqho7nexKVcsAoYrhUftgW7h6UzY46R7uq3aQ44zQ3ILX/9WmFMvViX/LPkvenQOhidCetpDKlM8Jn8HcZC7ps1+8PxsuDn08lMYmmOnR0W/dzyoIjxbrXICp1dOWomLTDKTLQQyoqRiZAUOWBrLNdS8bPpTRkIK25jGK4M7ygxMxrlkQ9fUDgdKXWYqRXgZjRg3mZTE24b+KIEjaVKEfQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAH93qLFhpxspN/MKz+bBxZCnuHfYxXE2ukT2RtLh3IF0GI5152LCHWDTCyuehYOGFvA13bfyJlvyC3y6DXpqGB7Gglnj2fgcvOFUjI7xyOmJz4vsPeK+q6+/rPBNiH55EqoMiIInuoOiBVhghrGMfBQASKmyVBhLBLEkvWERMXmbAqFziFNE3gcWupxebL2JRUVKxgfrfGT1BJha6k1r2CLOcxx9hnoKxmUaQTXwKylO2356JClXXLAbdXz8gS0ZzG+n4hFvvpPZyBueUfbWmhDWHjPHPDDk/pFLOzzGE6hMJ88LUExzrDwl3ycP8qQNTuYrzSGDKyS7e/Jl4kNenAA=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqEj4qPUY8UVqbRKocd8D7aXQhzgEcxsLSPoQbcUF3EUCJomMwkSXFnQV+STZsKoxNdX39E6mKZplqsacaM1uP90Ar/nUngcYnUGLfUiRuZJzarBoYcGvQ2v/az8W+5cVZH2VshE/y2wyzXEkpO4UQ4arY5VtsLptGFviVnGMYgCqz2quG2QVM4Qa7jPl2+FLG9Vj1oDsHcRtA6DRFAGu99Nz3bpQvOcCgIt2CZC3tZaYKc/LX6kryC+OBl3g87y6Iif3uYLF7++DD465pWnXt45UwQraGFtX0hcvWp2YkIjNNaNGom4w5gkFMyR4IZRvkRwa6m+NUtcUvQsSRc0CYwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAJzaQggofvl6ZkXTKzkDAzz8PM8dZL+1aYJgYeHhPu8YFHueRN8aaFEPkjGrpYHHv03aiqp2/c6UA4hkzO/meYFkoT7jJNy9ix2bb28MfQceCbDfsW9MbNkyOz6zoBsoqesIgFj97fSDbzIxTYI19AJgPHIbSjlrzdunw0GvUmKyyZ+bZq8n40LCcW3aFMXy8PvVc2fALAez3MXqxd73YbVg2KnkM8sFNxAKVORAtjIS8HWdf9G+IlqQOCR4H78HRQoxqJRsIDT3vChbE4GbqDjgua1q3G6+l9BfMZEGV2f48uTfq/es8iRvRo99o4nfn6Un7B02Etx6+1fiuijl/wQ=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"1ba869212a6043848f3b4ad82bb3197c"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1343']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"dc9abd0fc27d4e268345dc676bd86cfb"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsktPmWCDtHBn86LEL97cdbpOzNmaPEiUbBjQmRhYrWgfXei5TBly29hAtCXngom57x0GLQ3jAv4uPeolmHXB78znYC820W64PiDks5B6Mrv/aUhViSixUdxRdGerqjH3Iqho7nexKVcsAoYrhUftgW7h6UzY46R7uq3aQ44zQ3ILX/9WmFMvViX/LPkvenQOhidCetpDKlM8Jn8HcZC7ps1+8PxsuDn08lMYmmOnR0W/dzyoIjxbrXICp1dOWomLTDKTLQQyoqRiZAUOWBrLNdS8bPpTRkIK25jGK4M7ygxMxrlkQ9fUDgdKXWYqRXgZjRg3mZTE24b+KIEjaVKEfQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAH93qLFhpxspN/MKz+bBxZCnuHfYxXE2ukT2RtLh3IF0GI5152LCHWDTCyuehYOGFvA13bfyJlvyC3y6DXpqGB7Gglnj2fgcvOFUjI7xyOmJz4vsPeK+q6+/rPBNiH55EqoMiIInuoOiBVhghrGMfBQASKmyVBhLBLEkvWERMXmbAqFziFNE3gcWupxebL2JRUVKxgfrfGT1BJha6k1r2CLOcxx9hnoKxmUaQTXwKylO2356JClXXLAbdXz8gS0ZzG+n4hFvvpPZyBueUfbWmhDWHjPHPDDk/pFLOzzGE6hMJ88LUExzrDwl3ycP8qQNTuYrzSGDKyS7e/Jl4kNenAA=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert-name","request_id":"1ba869212a6043848f3b4ad82bb3197c"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1261']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqEj4qPUY8UVqbRKocd8D7aXQhzgEcxsLSPoQbcUF3EUCJomMwkSXFnQV+STZsKoxNdX39E6mKZplqsacaM1uP90Ar/nUngcYnUGLfUiRuZJzarBoYcGvQ2v/az8W+5cVZH2VshE/y2wyzXEkpO4UQ4arY5VtsLptGFviVnGMYgCqz2quG2QVM4Qa7jPl2+FLG9Vj1oDsHcRtA6DRFAGu99Nz3bpQvOcCgIt2CZC3tZaYKc/LX6kryC+OBl3g87y6Iif3uYLF7++DD465pWnXt45UwQraGFtX0hcvWp2YkIjNNaNGom4w5gkFMyR4IZRvkRwa6m+NUtcUvQsSRc0CYwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAJzaQggofvl6ZkXTKzkDAzz8PM8dZL+1aYJgYeHhPu8YFHueRN8aaFEPkjGrpYHHv03aiqp2/c6UA4hkzO/meYFkoT7jJNy9ix2bb28MfQceCbDfsW9MbNkyOz6zoBsoqesIgFj97fSDbzIxTYI19AJgPHIbSjlrzdunw0GvUmKyyZ+bZq8n40LCcW3aFMXy8PvVc2fALAez3MXqxd73YbVg2KnkM8sFNxAKVORAtjIS8HWdf9G+IlqQOCR4H78HRQoxqJRsIDT3vChbE4GbqDjgua1q3G6+l9BfMZEGV2f48uTfq/es8iRvRo99o4nfn6Un7B02Etx6+1fiuijl/wQ=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert-name","request_id":"dc9abd0fc27d4e268345dc676bd86cfb"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1261'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/ecc00e33f5684151bc5f9441bb5f33c4","kid":"https://vaultname.vault.azure.net/keys/cert-name/ecc00e33f5684151bc5f9441bb5f33c4","sid":"https://vaultname.vault.azure.net/secrets/cert-name/ecc00e33f5684151bc5f9441bb5f33c4","x5t":"2vs9p4v5OygfSXaDl52GnNjHMqY","cer":"MIIDWjCCAkKgAwIBAgIQYOOVzyRsRM2eW70s21uVBzANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0OTQ3WhcNMjExMjA2MjM1OTQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCyS0+ZYIO0cGfzosQv3tx1uk7M2Zo8SJRsGNCZGFitaB9d6LlMGXLb2EC0JeeCibnvHQYtDeMC/i496iWYdcHvzOdgLzbRbrg+IOSzkHoyu/9pSFWJKLFR3FF0Z6uqMfciqGjud7EpVywChiuFR+2BbuHpTNjjpHu6rdpDjjNDcgtf/1aYUy9WJf8s+S96dA6GJ0J62kMqUzwmfwdxkLumzX7w/Gy4OfTyUxiaY6dHRb93PKgiPFutcgKnV05aiYtMMpMtBDKipGJkBQ5YGss11Lxs+lNGQgrbmMYrgzvKDEzGuWRD19QOB0pdZipFeBmNGDeZlMTbhv4ogSNpUoR9AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFM6uo8gjCy1NdtZEX40Nh/36qMXqMB0GA1UdDgQWBBTOrqPIIwstTXbWRF+NDYf9+qjF6jANBgkqhkiG9w0BAQsFAAOCAQEAcS8R8XlFDGjFCqw0gCKlCPTIL0Cm5GvlfeZk2uDHYsSp5SD+byG4LIv2ZfHw9whpvO50wR4k0LsJ/yXWQBJaOTQva9791vw/kVQHNNM0KOh6rKN8tWfOqAL6hcXqiVbWWSqdljqswK3SDn0kgUeKreJZsKQs7sTwxyjlrxREp8VyucDhZKlU6B5enMnYmkEHEYsjmXIM6p9kXk3X9P+GBRk5QmlLcLTsE5yXc2DZyB0suXVsgUIAyfOHHdgFesImZSJJFXmvQS+tn98VTJhS1OSYiQzwUNO0HhEoMj2beUDRECSR06XRKr3kQnWh/Kc6n+jDVMi2JO+ggm/iEvBR5w==","attributes":{"enabled":true,"nbf":1575676187,"exp":1638835187,"created":1575676787,"updated":1575676787,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676779,"updated":1575676779}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2422']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/bb3c9a546a90407685aa34c7dc2af34f","kid":"https://vaultname.vault.azure.net/keys/cert-name/bb3c9a546a90407685aa34c7dc2af34f","sid":"https://vaultname.vault.azure.net/secrets/cert-name/bb3c9a546a90407685aa34c7dc2af34f","x5t":"-a8CWR7INdL8UUmsgI7oxSOW0jw","cer":"MIIDWjCCAkKgAwIBAgIQYALbXqN2SCuxIbPmBBt5tDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1NzUyWhcNMjIwMzA2MDAwNzUyWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCoSPio9RjxRWptEqhx3wPtpdCHOARzGwtI+hBtxQXcRQImiYzCRJcWdBX5JNmwqjE11ff0TqYpmmWqxpxozW4/3QCv+dSeBxidQYt9SJG5knNqsGhhwa9Da/9rPxb7lxVkfZWyET/LbDLNcSSk7hRDhqtjlW2wum0YW+JWcYxiAKrPaq4bZBUzhBruM+Xb4Usb1WPWgOwdxG0DoNEUAa7303PdulC85wKAi3YJkLe1lpgpz8tfqSvIL44GXeDzvLoiJ/e5gsXv74MPjrmlade3jlTBCtoYW1fSFy9anZiQiM01o0aibjDmCQUzJHghlG+RHBrqb41S1xS9CxJFzQJjAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFIhZBouOQjohmU6Z91vEdqn/FpWLMB0GA1UdDgQWBBSIWQaLjkI6IZlOmfdbxHap/xaVizANBgkqhkiG9w0BAQsFAAOCAQEAZn8ZXNyaStDGuewLYXhODKzl9W7p8WlHTiMp9srVv8e28UpJ33fUtxDYqrNPa2+nLk6ruitm2EogHSpwJEA2BvGL2jOF8aiBtpw/uz0Wms3P9Cw4UARC9L80jnQUjbDqs7wQG2ISuJCrk4CpvoF65t3fb5QkmlXD6WXnSWk8EUscP4Qxd+MaxEijftHjBEobO5vz7BJS5bTo7zm0qJ8qs1bT/3eZ063rFQEIlAufvHeQ7yqsX5VvAweN59eDYFLuwYypxusLfdfmWR48rbPPaV9Pt4KNsKP4FCr4uBZRCmBwehpR1nCRo4q5gUZL1jcRWbNKRSqJdrb4TliifiKF+g==","attributes":{"enabled":true,"nbf":1583452672,"exp":1646525272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2422'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/backup?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/backup?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLlZKaklwLVBRVjNUQ25PUmF0SFZxZlpYMEFIMHY5MnNkU1g5YmxuNUdZNkZXamRwM2V4bksyUW81bndHS05keXBsYnlCSDc1c1hkUEgxeGdfTE0xRjVTQ3JPRkNiTzd6ajdGRDl1TUZTZ09vRmJ3dzk0aFdybkV6VEZVVjBuNXcwMmNkaDIzVDBTVEhsS08xeHpXOEpFN1BoQWUtNmVGTVNBeWQ5SmctdzBUdExfRy1JMGNlaFhBS1h6LUg4MmtUVm1uQkd4V1pLMG1GUHYxa0JkX2ZCcWFkdktpT3NPMzU1RVgyN2s1UU9yS2kzTWRvcWJIOUpUaWFYQ1ZHX3pIYkxWY3kwbElJRHJ1T1VzVUtqTWVZYU84d2RmRGwyV2tOUklUeEd1aWhPTFlMSHMzM2lJU002TVljVFJsTGYzVDJMRHFaZFczNWdxQU05RFNCNG1Ya1Bsdy4xSTUtaWNYcC1JbmE5aVVKZ3o2aHlRLkVmVmNDdlFxeFhXMEM4d3BhQzF5ZFFMc290bU0zTGcwaDFsX0EwRkJ0VGZYY0NIeUwtaEl0RVF6QzlpNVNneXZXc3lwQmFpOFJfaFJUT3JHNzFGdEFBU0tzdUx2SXFHbEs4RUtSZzU0NTQ0NVhzSDRCT2Ntdno3T1l5ZktwSXJLX01mNEx0WG43bzFmdGxfdUFEcnJXcjc3Nzk1SE42NDdHWlNVYUlFa0dvQUw4OHcycUR4TkhQbTQwRkh2ajBjY2JKUER1Y05ySFBicVJDVklFc2ZCU1lUdmVScXlYWEdydklUMUt5VmE1dk9XcVBYMFFqQXcxS2pGRk5MQVEtbFZISWpCYTI3UGpXTmZBTXJTU1h6VmtYcU5PM0JneGpjbEtKaFM4ekx4RGY4V1dPcExGaHhmTm9uZ21HM3RYcFNqZzFXV2l6dmxCWmJWZUpkU1Fua1NlRk1udUl6bDRoaUM5NmVCeWJTbkFwTDNqeG5nT0lqYW1sd21jSnhFSWtaY1lBUVZtY1hTXzB1RXlDQk9wWkVWY3hTM01xcUNzeDdLMlh3NUJFLWdENXdkdVdGamVja1I2ZmR6c0tERk9TQWdEand1OFpBNWpDTkRnYTRPOXd4dzY0d2hxTklUMlRTQ2ZZN2hWXzBWQVVfSmpQMFRPX2E2LTJHMVlYLS1meFZieS1GUllwTUlnaUVGbFdiZ1JNMkNSLUxwU2dsR01DcVNfSUtWdTh6dGR3MjVTeDZsRE1KVEd1MHFZQkNJV1NTS0VwdmFRYUk1QnNjVHpSVnpqem9kZEpRRGxia3oyUmZwUG03UkUzLTNRUEgwMGpReXM5T0E2RmhUTi0xb2VjbGZwVjhzZ1ZweklvM2VQMDNQZjZKN3lkcWQySTZHY2wzQi02V1JoOU5XMWlMTHIxNUtoZld4MW4yQzhTWFB3Vk1ZUloxRU1yOWtqQm9MOFNZcTNqaFg2RHl5ODRvS0hrTHpKYjVTLXhkXy04Z0dfZ3VBNXlrdGstNHlEemI3dDV2YVdYM2lJS09TOFFmbFhfYzZlX0o5aE5rWE50cXAxemQyQXpqaWdwMG11SVZ3YkhYeHp3aVFhNEdlMGR5dUtHSC0wSWQzUTJXazB2VGtqaEJadWxiYmMwSThDM0RiV2ItVTloR2RqX05qN1kwZUhNclY1cHRBZXoxaTdOWGNGc3FpRzdxZ25HSHNwd0tRaXA4SFU3aV9FdVFpSUtYTDNXc2pleU9tVGpDTS1WNVBlczJrZjhONnltSVU0UmxXUll1ZzlMMDRaOEFnd2V1T3I0dW1UQ0ZMRHFCQ2xHQ2VNWUpldWc0OVVSMG40OTQtQ1BEUmhZUFhJUUV5QU04MHNhTG1mcTdpeFVOVFNZX1RVa2ZfZ0xBUGdkRzAtbEQyaEtSbEpJOG03U29oLTdyTXQ5SHY5MkVGanExRWpSSUswNXBSSzRMX2twSGt0RXdNbzcxN1AtWmZkY3VlcUE2MHExa2cxMU5Sb01HbWR2SUlzUXp5Vm1yMXZhaHRGUG84eW5jSERmOUo5VkhyZmhQWWZkSWZuQ2RzSXJJbTFTeVBQOHFVOEZuOUxrVnRKX3MtbFFaWUpXczJPZmFIVVFWR3VlYmg2bExyTTgtbGVhRGZ1NG1rNW5UVUNGcTd0X2VNVzdlTFJuNllVWW5qRXBzR0s1UEZQYWdZeFZpVkZCdGZycWZjbnR5Uk1hTkFQbkYtaDRQZGJzU1J3eDVNMkdTRHFkam1DdDJuaG1QTGlsdldLSW1PTGZEcS1NQlBDamN5NlRUSEhpWlVFMUtycko2VEU4emlLZVMwOWlqVW1rcmVVMzA4YlpGRGwwVkh6MFNuWTB3ZjZ5eVYyX3poQUtXbUhpdUhMRnp0cHJjdzdvQWdvTGpTMXBmbzZ4aS10NFZjUzZmSTE3djdMQ1pyYnpRNkYtQVp2TzFLc1ptWkExTk42bm44NG1tdmNwRFJpWm92dFZlNi01bk5qOEs5WWw5eENiOHN2Wlp0WFh1ejRJeGdSZnVEQ1hpaGZRU3c4bXhDSHR3YVU1QXI2Qi1SSWpldFZ3bmtMUFB3Y0t0S2NERzQya1Zxakl2eHFyMFJ5eTNUbEh2S2UwRlVnYUR3X1JkRVBlZURNWHRPaS1WRVhMOXVJY1J0Z0hQMEdoa1AwTUFpYldqbDF4NzBxcm1Ld2MtUFRESEYzcFVwTXZweDN3cTBlY1pqdk5jSTJQV25IMWJhWkdFeG5hTTFrVjhRRXozVEoxWmY2SjJhaHBDTDFkRVVnS2xoTC1TbGVfVVpKN19NMUlKeDlkd0NaSDlVTlY2STBRN2Y1aXM5R2NjQmN5Rm1OWjdhMHNmZWJQOWR1Szd4bVlCeGxqUEpBUm53OWt1ckNDRC1qbjF3SHlHMEtBZXlaQS1HREZIQzZKam1WaVlicFVPNzZkeGkyc3F3WlNGOEs1dzhfMG5EVEgxWlU4WjIyQ3h4UV8xV1dkSDVjWUpnc2xucDFKOVVJalgzbzQtb2V5WUJFOWhTWXpxWkxIWlR3QlRIRU52S2NTZ3RaZkswU2dxSmJTYW9Cci1yTXZHNUU4RDg2THloUkZBSm1EREU0ZFNaU3lTNTdPeFVjMDNjb3RKX2tQVzYzOUx4eHk0d196UzhkWmRVT1BwV2g1OFZoWkpSdmcxdHBkaDBSMlRMMnV3ZVl2Z0oxMzFhUjh3OXBQbEJaS1BuOEhsYlZzcFdvaGFnYlhHY2xkRENNTU9TOXhxZ3BRc0FrZFNIR3dpc2lNVTUxcTNkZDdGbGZGTjVYYmJ5a3RTaHlKQ0FXLUZzc19BNjlpb1FlRk1BTzhzbFFfVi1nNE1TTTJJVWJ4MHZIX0t6c1BpdmJ6emhvUVA4YmNjVlRLeElFdldvYjZTUlpkN0pYZ0xwT2FkUkVnSnNPT2w5OFR1U2hRT2VvY2trMEFxejdmMjRmM3VWYzBpREZrUUNpWGNYRXBteFZtMldTZGJFMjBRdWR1c29BN3JCNW5ySC10dEkySjRCaExkRkJ1SlNQMi1WQnI2NDU4Z0drTUNZRHlJVGtWSUxKRk41cEtFMTNWc0ZRZndQZ2J0a3ZGeFltbzhWWFh5bkdCOFk2dEJOTE9IdkNBblhqVENZak1Ka1F6RDF2dVdSbGxqVjc5ZHpRQ3I2Z1RJV0FTQkd1cWZhMlh0TFkyYk0xSy1LbmpYcEtsaHJZbmJKenItRFlTa1FqSGVSN2VVVTZvdDhYVlV4ZzlFeUg2VUxFNktNaTdzbHFkWFBUTlVESm1IMVQtRzdsdTM0N3pIdzJKVlFsRGFDV1g0YjZEaVFpZzlnMS1sNF93OGdXZE9EYVhDQUttc1UtMWVqRHhvZHRjM2ZYYV9wMTd6WmpqcWRBand4dHkzTXR2ZlozRm9rNU5yWjVKSkJuUWUzVTFJMnZySTdpZkd2Tjl6Ql9Fc3FwRmU2U0YtMDAyR2dTVUU2eHZMZjJrOVI1WGxIZDVZTElZY01lNnliclFRSDJsV2FqNktaa3lERlJjUTFlczBuUGlQclJ1TXNTQ09zeGpsQTZSdURuWVlQZjRXVVBucmt0MVREVVRmeW5MZTlPLUJMUXd6SFNKelRUcnRVZU9vb0wzenE2WjRRbGVaUHU3VjlRczNXTVJVcXVvS0NUM21sZEJRVk81bTZsblVfT3BReFpJNml2NkRSMzZzUUU1eWRFaGZHcnpLSGsyX243bnk5SjFHSDFkOER2bTFtTk5rWTc2X0JRdDFvSy1CRW9CLVJ3T3d1dHpUV3pvTmMxRjlHT0hzWlJMbVRBSGRHSXY2MFU4ckc3d01pNktUeEZYQ09EeVRCMXQyOHZoRXNFdWZZUXRaQnE2X0ZHQ05CYXdtcHp6N0RGNnlFMHBqajc4amdmWlBtTzVGVml3YlcyR2g1eG1jZVZvcXVWaDUzYTl6UktGMGJqV1R4Ri16dklPUzN4MmVWYV9xSURsU1ZfVjFaZ2Q3STdQdXZBdWlCY2dvSk5FS2RzMTBQdU1UQ1pEY0puNGRRa0VWd0tGTjh5d1dFYmJHSnpFNGxEbVFlOFBSakhWVUR1dHJXaE51SlV6OTdpMWxCbnNwdy1uWXFXd21sWkpYVVh0c0wyUGtBSnpWeG5NaVdqMzFvQU1PX0loQmZ6YnUxQlZEZUFOcExCMHdtY3Y3eVlQTk5fWGI3U2cwRzlMNTRlWndyV3ozWmlIdGtEbmJNTWxSVWJ2UmVydXRMVHJZbjZyZHo5QUVDc0VGcU9yeS02MjZmVmpJM3FqZEIwUUZWUlBTSDJUNTBJR3hJal9ZMWFJamJXOFoyR3VnNXJBa2M3OUJGRjVrd01jRzdxb3BDNkw5ZjRtOF9wM25adkFvd0NiVTJQM2ZTVDk4eE9wUE1nYzFZMHgtUUpDZnNpVEw5TXBzQURGaW16THZhdXhBRFI2ZUl1aFo1aGJMejVBM0FfX29yUFZYalVYMWpzVnVrSjN2NDJZSERxS0x2cmpyZ1lQOWVHMjJmMldIWkFibDlxT3h0RXhESHRDVkRBcVJWS3Jvb1BScTNnWFFEV0txS1ctQXdfVG5PVk1DZmtvTDZaZ29hRThpNXVFYVFNYnZsMTZnaWJpS3ExSE5VY2VKYVZsdTdqbERpZzVRSG13WVpvdERMb285WjRmZy1FMkJLN1JEMHVmZGJfdmxjQ1k4ZmlaUHpKNjJKZVFSTGFUczVMVnlESG10bkRUUTVNU3V2OVhQWVRlb0xKdW10Qll1NjlmZDlxUU1sd3BTRkZZNmhRT3BET0dtVGpSLUtIM1g3MGtxbThOSGUyNEVDV01lSVRLMGd3STZONVRfVGRLWjZVdmU2a1E3LUc4VUxpeU11TE5NTVNXTkI5cDMwaE1Xek1rNXV2RVNaNWt4WTdFTndBNG9HdUpiaGJYNElyVG5JSENEMlVyRXpxOUR6NENfMmwtWGhXandxT0FFWVBUUHdrNElDWU5tckhhdVBBRlZMcWVSUXA3MzlKWWhfb3lyd3RTSlhlNTBLZDNySVFIdjI3M1k1a3MxMEJRMTAzM0txNlFmNVF5YnFPVUQ5MHJSb2ViVFk5OS12Z3p3NlFBTmJYWmhPNXluVVdCMlRhNEZlZHl1dWg3VVkyMDB3UUt5djl5dlpyeEVKOE42RlFSZjQtMzF0UXBPUy1VM0FLQ2hOUE1OSDN3dXhvVVNiQXlIN2hKWjVhZjhoaHVhTXlKMGRUaGtaVXRFQ0M1YUp6bXVxNG9Sd2VPSkdEWjV4X3EzOV9HLTNGTE1qY0JNaEdpTW92SE85bWdQVjJNODNlLXlPWEt2WkViNjNTUVBuZEY3UWZFNXJ5TElia19Ob3A3RHhPbV85VmNDNHhhazJPbHlkazVpYkQzd09GSXVzcWtXSmU4bGxMSldFcnQ4bEFxdVNua29XWEdfVTNDQmlWNE5hcVVwSkFtS0RjN0xZaE8zOUlFUTdDUFhnN0RUNWVtZUdxR2hFMzc3VnVrLWVjM2tqc0pZZjZ3RUI2YndMeEtDdGp5Z1pkVHRWLWo4NHZBTmMxdXBrRnlMOHRZTnlfbzRFU0FlaUJDNHFDUS11VkpiVEFtOVZpbHdVU2QyR0NhMThTakNCZkNLM3ljek1HbUZUTTdKZGVfZUliRnY4Wklndi15a3d1SEg3bUliSVNIbW9kWEViZ21EVnp4cHcwNU5OLWJwZ2c0bDlsMXFkaWh4LXJoNGFXM01hN2NHS2d5cWVQdHB0ZTItSWxGbFN0Q0d4NkR3dTl5Qm05QnJDVDIya2dwOXRiU29zT2Y4d01YVDNpZTY1SXhYSHFtQWNYSjNpQ2JKcnNZaVlybUpYYmwxZ0ljeGRJVDMzejF5T2ZwdS10YUdKbWhTV1BuN1JweTBIS0RWS0g0RWphZEs1WnNfMHhHemRDb05mVE1YaDlQa3otUlhCV3ZRYWVBM1lkRUs2YV9RR3d2ZnEtNlFTUFR6bW9CejFwLW1sbmN5Q1VVZThvV3U0UjBuSDEzM2k4NG0temllaXU3d3doVEtKeVBmTGhNR1ZtX2kzQy1NYVBnMl9CeUxrdHlTVG1YOEsyQ0k4UjVtMDg2dGJxaWNBYnd2b3ZTWk51dmhuOGJGano4dkVTdU9ZeHYzaEE2ZlhaQUNXYVlwajMyREt5MXNmdGRhallld1ZzUEU1SzU3S1l4NHJiaFEtZlA0ampoRlg5c0RSMFBzUWZzalowbFVwMEllNnZMTWtkLV85Q1VLd01qYTJUY2pnaWltRS1PZTBJS2g4YWdlNXNiSXd6TEZSN19Sa240ZXRXM29MUm8ya1pPQnNyeExkUDJtdlZUVVNPMENYZHVHYU0zcVNfcWdDZlA1aU9MNy1rYW1pcGw5bG5wd3phWE1hOTFkYUpTTlVXbWM0M3JnYW9wMDh1R2JsY0tIRU5fUXJ4SXMyaVcwMUJSdmJPYk4ybllVQlU4RDY5SEloZ29jVG41WmdZdTVLX1cyeEJjRUg3TmtBVkNwRmEySXhlekJmSU8zcnVDcGowZlhzMV9WNHAwa1RBMzNRRUxQVnhFUXZrSk9lekxmSDhpUGJuN0E0bFZXbnEyTTB2VERqREZ1MGhPSjBMVXF6UE9nZG5TZnhQVUpfbmZyOENacHlBOWRTOU5NdTF1MVpRVHMyN0xmRldXWl85TTRjZmFyMzN0c2hGNmxNYXhOY0FLYUZBWlZVNmhWa2N0QjlaZHo4VU0yU01GeXVveHhud3NVVHE0U0FLWEpYNDI4RHdCT1BYUEJxbEozUGI5V25jWVBndzVoMEFveXdQY3BGamZvQ0EyemFsVmM0cDlkV203eUF5Y1N3aWtualBIUFFsNjdubUo4bVU5Unp4WGlwaFhaeEJ5UlRIc3M4aEozX3lFWXNZQUtERU96clR2Y0RHMG03MjVfT29PWUMzd3lDVG80YkdlRzRRMjNnR1lfQWRGZ000ejlCQ0FsbVJZcnlldEpRcFBGQWxGVmtSOUVCQW5ILWVpRXdfdFZadnVMOHlXclZtQmYwamhKWVF4Z29NeU5XbmQ2YjFPUmZhWEZIZHVSRmRxZGFwOTJ1enYtUE1tb0tIT3JVaG5uckJLeHZ6cVFpSE1BQm9nazJ0bTRxS1dIMlZyd3dVbXNSTFRHNHRRRFV4LWV5b05jSzRrQ3dOc2IyRUJMWU5zOWd3aDh0bFozOGZpWTltUkhFVWVFeTQ4dWgycF9PUFA0d1VmQVJLZUNmVkdQNzk5NFRCemw1aTJrdlJHb1NwYVQtRVNJTTY5Mzc5ekpRT1ZsQUVNOGMyckNiWHhXZVpCSE1KM1dvU2pRaVVqUjIyNDZhRWF4UXhsVGxiSmh0ZExZTVdUSW1ENjF3eGZnNEVDcEFKeWRoTXB0VGdtdWxfVkMxRWVNVTRRb3pWUkFnN3ZrRjZENHBJcTVCYXkxRzlOUXA4d3lTdFBJcFpGdXFoekxBeUZIUGE1NHc0cktManp2bjlQN2ZHS0Q1TEc4cjhKSFhmZHZ6TExaeElCMFlYV2JVVmd6WDFlOUIwT0hMc2Y1bVl5X0hvMXc3dnBfYjJRcDkzanJOY3JqOERfQzZXU0pYSjlLVkczaFpWd1RrN3hoX1dKTnhBU0RqQ3FwQlNfX0dUUmVGNkVnbVNwTWF6b2l6SUlWOHRCb3pLRWliNUxhcHdCLXZjeGVEajRiZk9YZ3ZOQXE3aWFKRlh4anBubnA4YjM4OWFKb1RwbjhYYjYwNlprd0loVFFFSnJ2UFA5eDRSbk9tVHNrMGI1VVZnbGp3SWIxemVXSW5SakRNRDI0VTcxRDBhQ0Z4NHZGUS1xWWVNRjFnYmQteGU0NVdlcTBxSXhweTl3SUZ2NU5aM1lfTWZMSVNKQzg1bEZ2eEVRYzNJQ0hTS0s5NzF6STJ3V3lGb2FNNm42RVdTYjFfZVVXME1aQS1hb3Ntc2ROc2pYTmJLU2t0ZzA4QTRrRi1sX0lXVmc5R2k0ekxQYUFmcHdxaExMQVFoVFNYaUhpbklwWmFtV0tqd3Bjdnk3MktWZGFRNWhyQkIzUXUxS1VLay14enhkc3drV3hpRzFDeWZFS3pJSG1keEhDTTNsck1oQ3o3Y0Z1V0dRN09YaDdzMExHUW9aalJYQVhYY1pmSXBNeXNyY2JNaUhPaG9Ga2p6aGVSQnBINXR6UDFjWGxWX29SQi1ObmVYQ1dfTUNid3hCU0ZxWmFVM3lqZGctLURuZ1JaZy1MalMyaE5kQUxLUXlZeFZ1SXlHSE54eEFObkhhdDBET0NiOERvOGVwYm9PekxjTDNrRGQ2eEIyMFhxVkdDSzJINkZheWVzaTdSRENETURjV3UwaG9fc0J3NGNjSnU5NlRZRVRUSDE5SDhhSlFFY1NlWl9nTHh2ZUpnUHRCMFV1NFlYeXhUaXMyTUNJc2dxV1A4SVc4dXFBbHlYTERtTlJXS2xSSUlYOGo4aUNkUnQ1QWJWRzZpUFRKMVgycGFoamlGaTNOUS1NRUpkQXpTS3NQSnAzanV6c1M0OUJuUnhJNUMyRzVwR0lXWXlIWEdtYW16dFZDX0RleGU0a0xJbG53RTQzSnQ1OEtNTTlSSE9paFE5c1lmZFpBdTUxbVM3WDkwMEZ2RkZpcURDMERUeEwySzJxVGhUMTdaOTZWbzNxTWtZbVhJS3JSTHZOdzVWTzhnWGJ0RWktQnRSNEZYcXpQLURWR296WmEweG56bWdqdHZTYUFoWjJrS1l2QXRsc3JTYUlWbzNwWXdRMHJFM3hseHBBaUxrOUxfRlRoX0JTaUgwLUMtSE81VHlFM1l6eUd6b19jV1J2WU9kOWFPdGN6NnpIUDNZT1pvWE5SZkNlNUdEbTRtc1Vnbm9ybUpQdnQ4azk0S2FzSk5wVXFnZzN4eE84VXhabjdXaXdzblpUWFBobkFLblE4Q2VIWldIZjN1djVkX0dZdXQ1WEpHSHZ3M3k4bTFKYjZSek1ONmNTQVhaRnZZSTZWZnlMMmw2cWZIbkNPZHZFc2dRTnpsVGhpbV9iWHV3SXJVRlJKVEFab3E3elBxTk9tbU9zT2FsWDR0ODY0cjJhSjN6NXhIUzMxSmxRVXdFeHMyd0NOVklsX0lrRGlnWGhKb1JSenFWR0Q3akl0a2pXYllQMi1YcFZidmR3X0dQajhTcHJpdzF4c1B6OEQxamgyaHF0MG5ub0sxNlNyRGs2SWZEY0xIQ21fa0J6WVl1MF9LU3Vvb3ROQVZRQ0RhNkVtMm52N1UtVlZBWjBmSXZ4X1NaOXNMZEtoUmdhcEFJNVpOUlBXeUNwNGNBdGhoWUVuV0JYZUQwTk5uYURqZ1otS0d4MU1qN1VLOXdiLTJweWhOZ3BmcWNvUkNYR193SS1laXg5YUJSZVFuZkxVcVZvd1U1Rk9PSW5KWFloNjZ1QWtGX3V1OXk3MEpfRUJJTEhyWF9rQkR5bjN6M0ZDUlRfUW1yaGc2QlZIU3l4S3FaQWdISFk2NExFeEdtQkgtbkI0dXZZUTRUOW82Qk9kTTE5VGRDY2xxWFJSdUVmM19kVjhjN2VtblBYV25TTzhVYWdydE5TTld2TG5MNThwdFVvMExlY2Q5X1BuY3JoREZHWXJNcWNNRmtKUGdoY21pQjNCR1pRN3lhUTc5T3pxejZkZkdWVng3VGFZOEpRWG94OWwzNk1QZEZIbzVaT3pENkxYWkhVd1pwcFhYeHVob3RJUGNuLW40RHlGOUlodTJUdUxENVphNkM3cy1USUlkajhHRVBlelZmZ2dGY0EyY3J4Zlk3akQzWFRsaEtCOVhla25QR0RoQm5WR1JHRHJCOFB4MUxjQlBhd2h0Ulg3Y1pMRXJsRFFja045QWxvdFcxd1dyVmpndHl3a3J0X0h2Z0x3bG1SaGhEZlJOMkJJVWQtd2lwUjVaN2M5YlNuREZiTnpuTW5NLUJYTFZ6U3k2UEVNdnY1NklHMFRxUWw4a3N6YS1UNGxENHotXzlfMGwyYjlXcXVDVWpYd05fZUFhOURSeWliZEZmaDVLRU5YaG50bzZFNXNzWmItU0FjcXpJUG5zY3g5X0lxelUzTkMtdnhhc2pLN3BXZGFiOWdvM3dpaTQ3RnV1NTQzMXlHUUJjXzZhTENIQlBrWnZEaGpXekVCczZlR1hIVGkzRTd4dk9LV2NkWV9xUTEzaHpvWERvU0NRTEVfWkZEOXdKTHR0WlpFVlVORE1kZDdkUGtFX2xISzdLaktyUzc5RmE3TkxGZWxabUFmenBTUFNTSjA1YV80YzBWa2tQZ042Y0tHQkpiS19xMVU5bUxmRy1ELUx6ZFVTVkdfX3VySTJHS2t2UURXZWpLRDNCM3lxLTlBRjY2TUI4VjFUR1BGeUVDcHBsMnFlbXh0M2MtNllsTl9TZVdWMEFMZmNpV2hTSVJIVnFCY0FlbElwR256ZHZfeksyTUlkbnJTM1B3S1VlUzdBWWMtNGQ1NTRsSWM0VU5LdHVTVVlsLUJDYkRid0FGOFNEeVJrV0wtUl9QRnVSRU9lbDktb1JZdGhwTGg2b1JiWHFnMjJieWJPTzNjdzBRX0tCWmoxRUw3MGxuQzZtODJRczJvTDlSNmNNZTFZM09VVVJ0YWFVam1ndTZYcHNacXFVM1FNQUw4ZVlVOWpfZUF3Z19GU1BBZlhaRWlzd2ExTWxSZzRBUEcyOGZLMEkxS25TQkVPYjNKN0htc1FkeVBSRjg4NHhoZWJ4aEJBSW1KWmRLcll1b2ZMOVM5cTVCN1ZfdnRLZHZIbk1fRWd0RVNlSUhra0RnUTNsalh5ZkdIb1lJMlhZeF9ZVlZVYkJ2cXR1MWotYUpXU3RIVFVZaWVJd0xadndTaDk1OTR5LUFRYmpfUm9pZEp1VDBYZ0g1R25XU3MxeTgyX2pDczJfSUhUXzVpOUpqMXd2dGVCX3FyMjZNQ01iWkFYLUJWQTRLcVBOM0o3NHBYZUJ3Q0R5TkhtTVZzYV9Ja1hyUVlNS2ZJWlh4dXZSc0xTVEV5OG5lemhReThXNDNLdXlMdUJaMERLQlVmc0tZbW93UXNUYTlPZkwzb2JRalI5VzhNZlREY3NJZkN2eWJvdmhnOHZ2NmdVdFE1NkloSElVMVRwb2YtVHBLTkc0SlhWcTYzcGJuT1FmSUFmTnBDdWUtZC11YjFSOWFaM1Y5UDd4RXJPbkRObk91My0zM0NDRFcwYW1lbXc3RnVHbEpoMlVMVjdjYWxSQUpuS2JHSTYyMm9YeHpUeDdjdUhiS2RJUEF4Y3gzd2VLRlNscnBsRVg1dEpSZ0FZQ1NZem8zeWRVVFZrdWFlQ3RjQnhZTUwybS1rVXFiNGdVTkh2cVktTlBiU3dwV0xOcExrQWxHMjRHanlnR29zUWxmd25WbEVBM2ZYVXZ6VXNrZTBPTnZhMlR6eGxSek9tb195ZDFKeUJ4U29mRlcxbnQ4ajR0OTk3dXdtNE1yVThJLXgzWl96OGppbDFBZjBLMHVYN1ZWMXhVWXVIYmFUcnVtbVJreHVOcUtCUHlfazg3QUZ4R1lDdnFYUDNacFBNN045TzJZMHR2YTE5OW9jSHg0MDRfZDlCYUtuREVpVl9GSlJ1Q1F6cWh2RWhleF8wcFFzejdMdXJFdng2VVY2d3BTVHpocW0tRlBCWjM1Tm1saWZTV0JFejVHQ0IwQlB4cmtjTEkwa0s1b1g2eVpQWVlOcXpuamowOUR0VGwwU1cxR25wRUpzYTVhN05kck10M1h3YktvWVh3enIzTndZQlVFa1FfRjJjamhycVZ3Vllhdi12YWMzNjVKX0YzZ21uZktfUjNTUXNlbUp4T28yT3BaT3cwSUJSOXV6RklPcFNPZGVNalVsTGxNeEpsN3ZQT0N4WkFZU2VFSGdiUFZ5ZEZkSWVLTTVBTWY1OWszTUFfM3dwYnVzN3hyZ1BfWnVPWWtHdm1FVkhXMWlLS1NYSDN6Yk82OTlQMGFKWC1XVkxDeWMxWDFVVHBVWU5WYnBvUWk0RUhWMkZ3R0g1Q3pva25kUFRPc3V6ZXhBZDlfTzM5RW1CYk5ZMGR5RnZDWlpjT0pYTmxEM0dId0J3enRvOUdsT1BXMVNZNXlCaTYtcUJZLXliSUlzNkJKLTZUZXEzdElaZjZyUTBKdjJQR3ZvRmNCOTByVlhoT3hCOGZJZHFqUVV4ZTNxOHpNcEt1dXFLM2tXeUFNZHZrME5nWk5ZZWhuWjVfTlNNOXFfa2dqSjhJeGw4X3NGRnl3cVA1VFdvamN2SGlkSzRtNXJMZFQxR3hSMjdXVVpaZk14X1I5NGs0SUpucmlYVVNVR1pEMDYtcDZwZExjNlFzMVdpb1lCbGNoWElReG9kMXpZcHRUZ3hrLTNpRWNnMWdBMkhDejVYR1llaHVVUFZNcE9MWWI3N2tnNlFHMFVIVTd4djk4NUhiTTY2bFF3Z1dwZFk2dkNaOWlIRHdZNW1ybDZGWnJVOTF2a1BaQUFzQW9lRXY5bXIzRFlzRVFsUGdQcHdKaFJNXy12WU9ZNHU4cXBOX3NYSkpTR0EtZkNxSUxLWGgwVXJaN043eTJNenhyVjYxbzZDUjRZYlQ1NVZuY2ZWV2k3U2h4YVZfMURaYjRUTEdXSDd6dVJGZDZReG0wM1Vzc3VaZGFyZG9ZdVFNWGQtVndRb0ljNHdQVTluRkI5b2tjd2pMR0c3bl8yVXRKNnB0eFBxTTRWT2Z3UVZzUE4yX05jVkFRU090MFlQYS1NUk41QWVmb1ZoN3lBNkt2ektreHVwY0RyLXJ3S1dRYk81NzgzQTlfR0ZHc2xIS1g5R2ltdENoWmdiSDhZQlNXczFSRHJwYjdVeTNwLTVKQTFXcVZlNV9lUDJPWEFrT3VKZUxCZnMyeWpXMjY0ems0eHAyTmtpUGVycE95NURUYXZjdVFGZzIyaDRtSzN3RE1LYVQybXRLMkpHemo1ZGNteEpJbEMxMnRTTDg4LTdsblE3S29lRTJhSkUzNlpVVXhrT2Q2aGQ1LUhobkxxSmVQM1M1REtLYUpxVzJkWE44S2tpNXRsc2NfSVZmMFVHRUFXX2ZaRWpYNWIyZkxDR0ZwYUd5UmNneGZ6c003eGloSjBZdEk4TElSSzlhOU1LTWZVbWh3RmREOTRzcUZ6YzNYUHYxclNwclNwSzUxbTVaX09FdHRfZG10ZnBuTm1xSFFjTWJORnAta3hvYm1ZZHZGTWtzVXc2bjVWckk4b3c5NzZHVHFTcDlmNjAyNHluSnVIcDl0VzhqNzdENXFadGsyQU95am5lWm96OHA0Q3pyYzlLNXZiYlBzUHhRLXJwUEp1WVlDUmZlZDFGWXpjdFRHdXRqVlVEX1lLaWU3Qkc5b2NVb1hhQ3M2UGhsX3dueS1qUmJGbFpvSS1ZeTZZUExtc05GVzVSOHYzbzAxMldBU203Q1NoY1BnTW5ZSnhyN1UzWHdnNW5HeFNEQl9fR0VNSU9yNkdmSVlRdE1YdWxackpmM3g0Y29HNFEyTzRMU0hyREY4U3ZvLTBxWlhaQ3EyLXRuRWNDYUExM2hiZHo2UUlVVmk3QlNDU3JhRVFsTHVEb3NISk1WMHYwTy1JRlRXVjYweExYYy1xZFRHMU1rSklfUGY3dmVPUGVZNmpSa0Q5NWFPdjBSaC1iMF9SNTlLN0VGODV0SGlNblJmQTRkdjdYdFlnY2FSYW5WNXF0Ny1hZ2VuMUVwei1Rd2tyTkVxMXRyVG5zV3p4aTJxZThaWFlEQzNWRXJPLWI4QnRRX2ktT2VPd0tIS2lJWEhLbVFxeWNLWDc0MmlHOFlTOGE2Uk1STTlKd0J5c1JBVDhVa3R6MkRVY0ZaX2hMdHJWSjBSZWlNcVB5aHBIQjA4TXNSYXFTTDZWT19MM2FNVUh5LTZkZXFlc2xtWXFWcF9XcjRoVmwtSTZDTjhpSFFmMzJ3Q1pSbVZWaUFBYkg5N3V5dS1za09JZkRPQWxvR2FEZXA4ZXVXZzF3UDh3T3FvWDZKeVVlaWlpQ3FEY0M1N1hQWVJxOUEwNldiWFFIRXFXVkNIOVl6R2RTaG1fVDYwazV5VWhJbzVfekpiZm5tcmlZNGVhaFl5TDFIQkY5LUxsRGd1VF96WFF6T1duclEzdjF2R05pbUp0ZkpIbWVrVzBoTllRcGxmaTMxMF9KdTZCUnhYak5LcWpBNTRrVzQ2cFlVMTV2WlJ4SnJGaHVzQ1VGVTlpM2cwZHdsN3hIck9rSDFfNU5UTVFHS2RUbzFqam9ULVI4OG82bmhnWkV3cktRY3JmYjBxWE9tM2tvWEdwYlB5dkhxbGlURzJaM2d4dlllNlpxT1I1QVZLS1g4YXlidmpGbktxQV8tc1FrODN0WUl1aFBmbXBnMXNHaW1jek5YdWp5dnpmOWxjdjMzMEoyZHpxUVJDZU9JVGlQU0ROZnQtcmJubFhGSTlLVW1ycXhkeHpoS3MzUUZ2Nk9YNWo4YkxyRE9GckFlNy1QY3JpY2x4MXN4R1R1WVI3TnVHVnhPTUdTMVBsWkJJTW5PYS1hRV9RbFBEcHJ1dk5uYmJLQzFBMXlEdkFTNFh2bml3MmJ5eXY5enNJcDVsRFNMbTFrTkxOUURxd29PR3hLbGU2d1dXbU5ERU0xOXpQZVV4OHFLeVZYRGZ1dTNlcG9YSS1WY3J1SENBQjI0aTY4N1FORW5FN05TNEVpN0MtUnBvczZDdTBoaHZhU1k0NUJfbTJkQTlWTlRzSzR4Q2E3cTBSbTZ3Rm40YVVPQlN4MVRvUElfT1ZKYUU5bEVtbTJoTzAyaVlxUjdDZG9VMVdjMkc5d2s5WlhDQ1ZKMmsyWnU2TllQUXlBX3I2LUxWRDRaNHRFVGZlaHJ1ejU3RUFNdXZhb0RWZlhlUWdSLUFRSkFlWk14YnpidmtGUGctejNudjVHME1GUkdxSlM2QTcwQUFsQVNSY2xwNGc5XzJrZG9qSWdUVlhyYVJfZHJOb05kWjZyQmZ5NVFwd3ByMnR2UW10N2ZwNldhVGdPZ2RQdm5SOTgweG5IYm5CTEZWeG9HRVBrWnhnU1RHZjRrc0NIOGFDM0tpb21IT1BnekhoblBiU2p4MldHTXdmTk9EWE1nVFlLcE5Sa3VUQlM0OGVZYmxCbmRoTVZCUWlsSDh5Wk92ZVYyOExIZUZKRGt3dGdXaFlheTE0aDdfN0lnX0t2UmtGcy0wdFRFTWpGQ01LMnFwRjFTbmZGbG01R096M1VvUHFWNkphWWpZYzdGcUhvZWFFa2hFMzZ3QmxlSUFKcWFNeDBhS1lGU1pRQ1otQ09VSGR5SHJYTlJmaFlFdUxEN0NDaGlncEV1c0FiNldTZ213Y0Y1b28wSHl6X2pOTHJZRmFsQ2NpZHl0VkZjUlp5ZlNqalZzczVyS29VcmkyX3UxVVF6Vk1zaWcwU21JaEI0bVE1SmpSRVVJUkZRQXFTQm9YWGEwbzBfTmNCWU1jQURZM0ZqU3ZTZm5ERzlHTjNSWGN4R0NUSkw0NmU4eHdLOE9qcmxWRmRkSGx2R1BGb3VDQVNuZ1M3WE80MExIZjBwSnp5cXI4MThTZzBXcVBObFFMcWEtay1rYTBRUWxFMmx6a1NEcWtiRTJ4YnkzSUJaMVNXYUF2RTJacWloNGZraTRjR3FQdGVHM0dwVUUyN1ZONG5iejBpWllRUUtwLU1ocmJwRWNWVGJBTVhYLTc3ZFBKY3lMVzVLRTI4QmU4R2lsTVBZV0d0M1Zod3lDdVpYWFZ6SXN6TGx0d203aktqcnpBYVNWNmpjX3J5WTdiUndzcVNaTDZRa3B2cTZIR3Y0RkhhOEpUdHAtd3MyS0Jvem5TR3JRU216Z0p0ZFAxNTN0S1NyNnNZSWN3aEVNc1B0M253VU9UNXFZd25DcjlaX0JjdTZmVVR6WkY0eHJhd01DN2YzUzM0WDNRdVI4Q2FXZDRsZDMwdDBlbEpDV2VTZEZHbXBtQVNZN0Q2eVpteFptRF9zZFJGZWpPNll1OHNodFI4UGdBM3BCS0JjVkQwSkxDWElJVnk4TWVRUDNxQ2JvWWhEV1FQLTRFNHljd3ZyX1k4RTl2LWdmVlJXVUdtTGZscXZNSHRzWm9OOVlkM0c4ZnNCa3lnTWQ3ZWpOOGtLakhTeHlBVkg3Tmduc3JUWTZScTREVXNSTWRRN2JDYjV3SG1Hd29ieGpfeWM4dGhTWXA3RWo1aWRoTExlajRmblgwRVhPU28zOWRnV1pTOUp1clZaUVpDV29WUkZ2VXhPdFRadUpHVmhaWkhQSTNDNWV0QTIwLU00M0RjbE5KS1hnR2xubi16ZWtSdGRHOGdaX2NuVnB6NUxsWWkzZE8ya0k4c3NNQTJwM1JGcEo0MkxIcTJtTHRJTDdnVXFnamJ2NjB1NnJOVlBaLWFBRE0xelZIY014c2VsVF8ydXEtcmh1bTRySWFuYXhjU2RWbExOMnJMeXh3R0VMZWozV2JWTi1UblVtQVZjSmFUdkF0MWNKRUQ5LXdndmItcjJoSVN2MlRFWFZpdUNfekdNSGdxQ3UzWVRENi04dklFTDN0dDBMSjgtRV9FeHBPUGdiS1pLWmRzNVFZbzV4VnpFLWUyZFpzRXRtVXNHMXIxWWlqN2djbDNhMjRBR0s4elp3T2ZIaG5RSVVsTHp3aVdrSV9nVDU4RXBRQlQtNldIRTJZNjdUVUxxZDBncG5pYXV3YVlJV1dJM3hJNTJJTF9lYkdTeWYxRUp4c1FSZVQtSnItd1JZcW95dWxZZlJtTjlMdEpVYUVxSW9yb1VtYjhQemw3QjBYQWRJTU1XVjdBUl9Qel9LdHJhckRiMEo5eWtGZXdCQ01hZEh6WnFDbV9jcThZaEFEazJxZ0hyQlQ0WXBIM19fV2ZUTTBESVI4VEt4NWpGb3d2T0oyekpXMzFad2RYb0NQbkMweC1ISGd1MFdSYzNDRUhlNlM5SGZwaEtnb1NZV1lObkFTRFN1WTJ3ZmZtdHNlSGx3ZkRyQXVFWGxnNW9maUM0eGgwVGU2cDlENzY2bTZlMXhlNWRNQjg2a1QtX0dZY0plNEt0Rzc5OVBxVGJJd2RhZGhZb0piSFRaWFhKMVJNaEJab29SZEMwWEJGUWxRWGQ3WjdDZDhwRzRTUEdrTjAxcUp1SGVRNHFfTGFjMDdGWnFlQnkxVUVYTDRsNTdLbDJsM0NNTm5pdDMzUFNXUThmVWJVcHBMWFl0MzFreWhfZ25aRUZVQ2FxWk9MY0NtckhJd2trbk1JMVQyZkVuN0QwdUZ4RV9qZ3A3NGZWNU5KMDBzejgyc0lUT0VLejBqTWFoNGRfSm93cGxEN3BnUVdVN25rcnlEUXNlS1A0c2FGU2Q3Zml1MVI2SzNHdVhHdzI1Sy1TcWctLUZrTk5aQ3VuUUVHNS1CNVFER2J1Yk95aDRlSklHdUdyUmozX1RwekxzSDhKa1FDOU9vb1o3ZzdPeHY3Ul9FYTY4dk16RG55aGRDaHR2LUhNaFdZcnBTOGNYdVg1TW1jcG1UUUxMMTYycXpBS3FwR19adnpMUG5wRUt4ZlBpdkMwZFZUSXN0OG4yR3hFeVEwNTBTTDJsaVVDRUcwYk52eUFxU3ZSUGxXcm1VQmZsckYyY25TLVBNQWFaWk9iTTVBNDNsRzJrdVRaWWN2MmdhRkZ3WGU3WFp0Z2RVM3pQWkpBam9aYnpyNnVBUHBqdlA1UWtBS0xYQ043dENUSGlLR0VLQjNKTVRmdzdGUVlqTkV6TFZ6bWlIa0J3bnZaOFdpdmlOQTU0UlNHQmtFUEphM2hwX3NnZ215aVVtSXVsdjgxNThQMVh5TlJKdnpPR2wyamhTalFYSlJ3OGNaX2dSZUdnaUc0TXViTlR0SGx0aGc5ZldSb1VzNFk3eXZYYmV0S0hQVDJJbHB0VFBIV3dhTmxQVWJqX0pzUjlxSlBodk1PYTk0MHd4M0NpRzBSMDY3UmFQdFVYUkQ1VHhTZ3VDZUUyX2k0VmlROExHTzA1ODR1aFdlMWx3R0c4T3g1VW1PRmJHNmlPZXVicHhkR0hWbzY3ckYtNHJBUVlQYXhaTG1wUlQ5TVpQeTc1X3plTG80RzhMOG1HZFB1eDNoMXpjYkVXWC11Qk9Za0d1UG5WWGcxZzRWSGFOR1dCMHAtZU9yWHo4RG5HR3RuV1Q5c3ZQdGZ5R2xPdXVYYTJUUl9xcnlJMmN6Vks1dVMwUVNxanBtQXdtZk03N1JWbmJ4bVV4bDg4MmJab0hqWVVVUG8xTFkyVklkQU4xSjhLeVJMVUJfQ1pGS3JzUWRMNzRMYlpkOHd2WDlITTFWMS04Q3dkVkhudmxwWVdNbXZVYUxmVUIzT0FCX21GblJsb2pHT3ZDdE1acHJkNWl4czZNVjZrMlFOaHVLNHMzZTBrSDBwN0N2aE5YOFJDZkpydWFmOUlJWmExaWR5cDljTGszT0Z2cm9kREpORk01V0dsbmpjT3NTcmJCMzVsbnMxZDJuZzVRTHdhR2F6Yi1HWkZSM19qaUZ1a3YwZHhndTVUYkNLaC14NHpSOE9MSkkyNWdWUlRFbDJROWVnRC1zRVFXbTZRVTR2TkVDU1BySWQ0UUVxR1A4aUdFMlNueGZOX3NiT1JsSWJmTExHdVNPWFp6RVVTZnFDRUJDT1JTUHBJemRfNUNaLVJhcG8yTlVteVk1Y1JtZ1pYeTIwYnoyOWZtUzNHWkNwOThCeU1nNW1aOWFYbVp1UkozWUZzc29meVRXVlJ6VjNnSjRpWVp0Z2hZWFdYUlZoTEFUUG83dnhScWVXejRybXhkdzlKbm5TYzNnbWhFM01RZUo0X1FXWDlCMXpMTFpScGZkTFU3ZFVSaDE0RHlVRHhFYUllcl9vRVktclVNODlhSTM1WFV3MlU5Mzc0VTdQN1lLaS1NclgzY1p0R2x6MllVd01sZlVlR3JKZ3ItYnFrczVCRFE5QVpWLXlRNUpaNGl3ZHpYVGRoX1BEVmgzcWh5WEFqMlMzRlFITHhOUnRMc1VwSm9CSUw3ajJQVDN2OFNKd3hPakxHU1ZkaXg2Qjk5VGs3LW9vM0VQWE1uM1ZlYXBBNk9YdUFjQzhGMkRjanhWWUtlOVo0d3FlTlJSMW1iY2U4Rnhsb0NxLWtrNjhrcUpiWE8zOHRvSDJKWTIxam5hNW1CWHJud3JnanRyZDB6c3p6UEtOQnZsclFZNnkwM2dOS08zcElIdXAwclgwWFFEU2ktVnJ6a0tSYlFuT3N4SVR2R2I0VjhTWHZ0N2c0M2xJV242cnBwSWVydGZmQ010RnZJdVczOHBBejRfVUJiZGRCTW1LQjNkYzhYVUd0bGF1Ri05TGx3WnQyeVMzTlJMZGZCRkpKNm9RSWowNEZiWXJZdVE1dnpXWGZsdVphc05zWjBKWXF0Z0tuSjcwRmlDcWtRS3hseVNUWTJadDV2NVFCdEdoWlg3T1R4cXBfUGUtZUt1blUxX2tEd0diem10MmRiWkVQbzl5R2c1cEtRVWxHRXVlNGJSdWlnbnVWeXN0R0h0ZVlJRFgzWVBlOEpERVFzN3JMWTItSzk4RkZxWWwwUVgyZVJBd3dpTGhTdkNnU04yU1IzSFpZUVBWS2VuYlRoU2lRMmF5TDlzVVY5ak9VVkFrOHN6M3FfdWxyMTl1MGVNaWtrdUhQMlRwWFU5Yk43Z3lkNG1SOUtNdXJOdVBhQzNhaGFFNlVhUG43UmF2cWJZY3l3YTlONnptQV9GU3IzV1lzcXZYbTdTOTBQMl9EY0N3TXdFVGg3bm5oTXdfTkkyRl9kYkdlMVVoVDZodndvbHRheUNIVUdyUHM5X3FOR2pqZEhpNWdLSmRyN0V2V2EzWU5TV3Y1Qmd0QUUxZGdRcEFPWlVvcmtZUm16dW5JeUdub09hTlUwal8zeV9KZl9FSGNOTGNxQ2VSMUJnbVNYeVFKSTJFSXg1VVhjM00tM1hsSlhQeFlkTXRpTXcxbXhDNUpRX19SNXBsb29fclRHTXc4VURrWnFwQ3dwLUJFVVZlSzBpdk1wNkZTRGxNbVRWX01WaXR2TldvaTJCaFg5NEZfdERlSUthanVMQUxDcWxjdk1rXzU4TTdXUGdfLTZBcmR5MEhwbFJldWtMdDZUNXVzaUFCQkhGSm5VS19OUUlBcDljbEJnMy1GSXhPRWdOQk5xWUMtdmg3UlNESHlaVnB3NkhxTTRQeG5IZlBhZ1R4WFZHdVpwSml1bDFRVXpJMThnamRTMDRvVEVMMnNGQTlUaENNTTFabzhzYm1aX253cUJrZWp0QWNCMlFmVXcxVC03SWlqdDdoTzNWTUdnM09ERU01ZURnb05KWlEwS0ZSTUJfd0MzeEtZd0pCMGM3bjF4Tzk1UEFWQ0JPcmZQVndJak56NkVDQmtWaVF3VXZlUkpXcTFjUVFpMGZpc1d5T3dZTjhaUWtNbXN6MmF4Rmp3OHNFamtJS1ExWWlsam9iUlFBbUs2ZlBMd3NWWHpzOWdEVmFxOERLWjJ4Z1dZTzlFUi1sTjUyRnhIU1MySGxTNG1XT25mZ01iS2s3aGozb3VXdTVNTGYyZzFWa1AzRm9Da1dQTVlJWFVVSTRhOVJoN0E4SU55OURfeEphM0ozZjAxN3R3QnFCamJaeV8tQTJLUkMtazRRRTdhYmpEYmk4NHFFZklyazJybzZsRDRxRmFlZWN6dmwyYmN6Ul9mMFFjTG9XenpEWGNobEZZR094RFA5Q2EzMzZPNDN4R1MzS2pTbl9mQnZkR0gyZGh5TmtnMzFSTDlGZU1ZRGFMdi1sZDRBbU5MVmNtdy1jSTIyb2xIMmozNVdLX0VjOFdvZ1RXNnZRZDRiNnJFMjdNdS1wZ1o2MEJQbHlYSFlCUnhsRUthSWxudnZrWHdPNFltNEE4UmNRU2w1RzQxQVhuRzFCVWF1X2dZekN4amdmMXZiVlB4SDNzT1B5cEU1dlhjSTRadGUyd3hkRV9ZV25GX2l5OHhoRVJEbkZOZUlWUmlfMlB4MkFPQ3NYR2s5Zk41dFFpUGYzS2NCU3J5c1o5Q29NRWVPdi1jV2dDaGhxdVZ6N0F6UHdwUy1MRVowZjBfMFVHRGd0SlB3andnQTNDLVlCWWdWSHFtX2NWRWRwcWcwY1JCM1o4M1JpUlJWR0tfOVZPcV9PTzNLUzNiQjhfaFgwYVZ5OURFNldHLURmRmRDQ1hvaDA4R3RLZ2VqLUc5N1VRUk0wV0t3SnAzOF9VT0NLVkJNdVZEVGdTU0xfOW9kdFFJek5tcmhmOGRiMFVDWjlydzZfN3c3cWJzQ1k5Z09pUlJQNnhwSHRzX2FfeFpUWk5YNFBDamduS24yQlNNR0ViSE5iWFRpZFVRV0ZrSjdKMVZwRWpWdXZCOV8xX3pBdU5SdmM4T1UtM2xnUWhkMFUtYWlpTjJ2R1BUa3YtNHlCbVlvMlBWQW5XOXlRUUphVDJ4Y2I2dS1xVWdQLXZ4NVpSbnpCZWN4SF9Zb1g5aUk5aklBdGxubjZzenZiWkRUaWVOVFRQeU4zSkdEU2llb1pQRG1STzB1MkEzYzlSS0xnZjhLaVFjeVBmeXRpV0ZWd085cHEtWHNtWmVrbEd3UU5GTDlpMGpwdTdUbWFFWWQ3UDRTOGZzcnEyN1JyMHhwcG5ZZDI0RUtQeWhJZnlNaHVIWjVSbTEzS2RrRWZpWEtPcmxYZDkzVU9wVVRFa081ZlN4MkZvWDR0RFlHeEF3V0pRMlg2RkFsMldNWE1oV1diQllaVk9pa0x4NkRFWURuWFhKLVJyY0lVUzlRR1R4b2J4Rk5CQW1UQ0tVV2JMRW01bnlERFBSanprR3VnTkt0bU9KYUk4QldtTG1lV3lIcTNHVXR6czdBa0s4RHZyZHo4eGtQcWoyM0hPekhSZnVRN25xSDJxRnhNa1dzWmJFUWY4VmFMS1ZMVWxySzV5UEZUUWtyemJJUnlVdU9OdGtMREdFSFh5ZnRXU21lR0ZSZ3luRUpqWVBiOTRVbTVEbUVVWGYtWENENmpXdlFqcjl6a2FxSUNqclBuUzlVelU2aTFDWUd6bFBrd2dHTVlnNDZJc0xIS09NS3VydWMwbW41b0pKeWt2aWpiR1phbkd0UVJhaTlKOFBYYXJwOXc4OC1nZUVRcExQdGlfS1V0RlBrR0w2b2dOV0lmVGVlQ3ptWWRXQzl0YzNmelVqNmI3Z2tmeDkxTUdMR040RzlldkpUOGYtN1hoenVZOTZlOEpZaW1fUXo3b3Y2STJVaDFSRm1rVkczeUVLZERIVVlNdW9Samd3VnNIZWRaMElZeWo0VzFDejloc0VkOUFXaDJPOE8yXzk4WDhLWkxIUDZ0U2RHS0kwUXNXTnJZU0N6dWpva0kzRjYxT3BQNHN6cC11ZEQ1OXdBVnh1TUhyVmYtOHRLN1lfVTdqS2NDbTFfbkxxY0Y4R2RZWkVrVkZBdk45VG13bTJqdTUzMHI4dW1DaVJjRFFsMHRJWTR2VWo5RHRNRWxURm8tUVpEempnQW5lcmpZZS1SN092a0ZRTjZja2RRNjJNZzZPWEtaYlg0MURFRjd2TzNQOEVZbFdfVG1JVjV3bVVfZnF1eTNiNm05TENEbER0Mk1WQVNkRXF3ZTA0NndfaEpwTTBfZU1IcHhIeDROS2VnOHowNzBMaUxzSWpvNHV1US0tNkUzeDBrYW15YkRGNUtNUGdzUFVrbFB3OURKSDV6aWNwZ1NOMy04VndpZ2hHVnJKWVp4NmFFU25sRXBtTC1QT1hQOWNLbU9jNEtBYXo0aHFjTWhYNF83ZWExMzZNM0JWYjBWX2dJalF5RXRWdnl2dVlpam81U3VKcFhCb0RpYnJxRXRBODMySjVObVdDdllWemtfR19HN1U3TWtuX29QLVk4dGdqRmhsN2pKNXZqamtLTEZfZi1JWlFYNjduYzhCZkJPMVhzcmExdFZTMmI3emJOU1ZJQ1RONm1ndG5IdzB4aUpubV9PWXcwaldsSTdoYTEwdV96MTZSS0Frbjl6bmZTamlkUmhjSl9ZeFpmVjNPTVY2NDBmUllmbVQyM0t0OUk0WHVyRHhGOVlDWE5PQlV1clF0ZXhESmRtRW1jWmhyU1NxQnZ1dkxEbzhwWGZLY3MxVHpMUHh3cDhmLURjQWd0YTV4M0ZkNVAtTEFVb3NIa05fQ2R1alRLYXhEeFc3UW8tdGxLM3Z2QXZOdFA4WmVIUWZ4VElOb0FWRml5U0dhSnc0QTlPU2ttMlAwbElHUXlCSUpzVGFjcXRVbTh4V3Y5SUFRZDdSR2Q3UEZRelJZNEl2eU95bEp1NDcxZS1Pa3VXNGFSNTQzbUxmUlBkM005Mm1zVWkxUVpQbVFtdWJxc2drQWd1LXhyT25La1k0bV9wSGZUbklTMFJ0Nk51bmxjVTZBS3kwRDFrNGpnUDFGelQtcWpGMWhTMHBKRWtnbmVqQVU2NmlweHAyQjc2ck4tcGxmeDdJZjNtc0NjR20xZk83VFFPMnA1Mkk3UU5admhESjJfa05JV3l5VjduaGE0WkFDb3R0a21VUVRlYWN2VWhUeUlTNUYtYzhDT3pLWklacUtyZUdxMGtxM1VpZ1Vub3phdHRYT2ZRZFRfN0FzZ3ZlWTAtRGJVZkFNYU5sZDBBa3dXQ0NYZktYeHUxVmNTUVBXNXhyRmNRMUxyalEwaHJtVk9GZlRFRlNVZ3JYOThwTnlIa1I2YTBBX19nVHBGVDBDcFJSVFR6bmFNeWxpMXpMTWtvdkVXb1ZkaG5wamlOamJFQzlfbHFoX05Xc3lBM0JMbGhFaWdjaHl2VHpCMHdOZlhFN3pLMWZOY0pfWnd1ME1RUzNhemoxMm1qTTI1OHRYMDZoZVJNelQ0UUpiSG1XcF8zcWZ6eWRKVG11Z0dOVDFhQnNhQ2ZIUmhvaFN0RVRBcnpjSTYzM2lKX1BxLXJFRTZhanpXbV91bDEzRnlwQ0VGRWt2SHVONUx2a0l6V1BqbkdNVDY3bEVwOUZ0NkYtZU1zaDlVejZFVldtUXc1VFNQdHZFWmw2b3hRY2lqNk5ZT3BTc3lpYzFpbTY5VmtuUGhQZWp3Q2w3dm1zWUYyVTZuX25XeU1vZEtnb05jT2w1dUlRVjB4aDlfeVNncmhSSXROZGd0aXVaYnk2bjZjNXlyVC1BZW9TQTVfaDZuXzkxUkJiaHQxVkhHS21tVXIzYjZMRkZmdjN0d201R21tQmtUa1B3NUFOU0F6bGVCMHI2YU15VE1CbERFazJCeE1ieE84eE5vTTNwRzFTXzMxVWZUa3NZcTZodDJDaEUzZlpVSVFINjB5WjR5ZGlQQlhNSG1ndlNPS0VuMTFEMXdpanA0bnFxNzAyVGJkbkp1Snp6eklIbS1sVXNSNnktaVE4M0Vwd3RreHN6ckJZSmZOZHh1WUFSMkxCbWpkRU1aTHNfZ1FLeXV2YUxpNHNQMktianhWWUU5SzVjN2xiNXJlQ1dIUURiOUJ3cmRjTl9NU2llRVZXM0xqcG1BQ3hOV3YzSzlVNE1VendqZnJlTE9QRVdlWjJ2WmQyTXI5SGZ4ODVTRU9NaFRXcVdnMXM3SkdVRlFCTnZOS0tRWlc4X1ZveVJnYVNXM0VITXJmMGlxZWYyRXdjOHRSM2lvSl9SbHdncnBCcVdGTVNwcU5ONmZBdzJqbGEtdHYwdEJSZ0VRV1A2SHJIdVUtRlRzZWdGVnZza1oyRzAtTTQ2bllRc3Q2SVBvaDVqeUt6SUpnVGYxcWE3QWt5dzRrdm9pWXJDYUQzM0FWclBxZFpmN3V2Qzd2VTVRX1FYZnoyUG56by1ybnJ6Wll5SUlXQ05pdlF0NzNoZnpoOGtZaV9HOS0yLW9jX19IX2VuTE1lU2VFY2haWFhtODlIZ2ZjOWQ3b3FMOGF5TU5fRmRuVU02eHRGUU5VMFBGWWNxOXN4TTdKM3ZiSnBRX21YeDBBV1R5Wnl3Vk85ME5acmk3Rm1BSGdDUmhHcl83NmppN2xlZ0lFXzVuSnZPa3U5VkY2bzkwNG9CNnhiSTdUNUduaV92X204TVdNY2R6dG1YUkVnNUhlc19KTjVQWlpIWTV6MnI1RzhBOFJJMkR0MkRobDZ4eFlFVWl5VTljTkxsdzV5WERLNkdwbTZYaWtWWjBfR2FuWVBONjkxYURMNTBKd1BYLUpUS21reWk3a2lPMThxZjNNc3pfTlNaQ0NWM3JDR1dUOFRsSVlrZ2NxYUNBbmUwY1RvSFRpbmJBWXdnTWN6QlR4Ry1peWFKU1hxbS0wdFN4c29RVF9uQmZsR29idTRPYUJybmZwN3Y0NzdlOFVpZWRqYmZqakM0T043MDlaMTg3V1pybG1QVnF3WlE0UlpVeEVxOFFpRHNkNjRSUGprc0I3SnNHbUJQeTJrRU9sZTFSdVhCQXkzSENXMkNXVnlMOEtnczVuOU5udGozcXR0eGllWXJtNnByM3F1Y3pZOG9ZanUzRXVsOEpFd0g5bUhQWDBES0lpSmVGNVYzdkFrN2xSUDA3VTFyMG1nalVrUUFZMmpVWlg0cFc3ZlkzSDVZOGppbFhDMThjN3VhcVpxRzFCOWZDaDNLM2ZySWs3Umx0YjNzRmQ5aFJTVkFQLWxPeFc3Qi1RWUltTW5Wak01NjlJaHJ0Ym1zV1c4NzVzX0RzcWpZdkVKUXl3VHJaUDctbDNWR2JwbjZ5YTFRcTVMRUNwU1hUOUVIckl2TENPdjZQdnRWWHNTWnNrZHgtMWUzZG1ZOVJuSnFOcHJxQXFJXzJzRnJ6eXB1RmJ3dEp5Qm1uX0dfYkVvQ3RGdEhPeVd5YlBHMi1JRWQxZVpyY3hrTmZoUzJuZDBaaG0tYUF4RnUzOVVEc01MSDh3ZDcyajk3a3B0cmlzYmJlNG5ab2pWeWVCVUxfY2tNM3pIX3VtWTd6c0dTN042Ty1tS2tIQ0d0UEQ2R2RUb0FEZUxEaTZRUV9lRVVSUTZqTXJnN2l1QUtiRWdhTEZ0MFJ5YmRxUU0xeGgxM1AxekxHYlhIV3QtWGJ1VUFsT2xqcHVHZ2N4eFdsUDRsZ0tUNTdxdmVxc1dZN1AydzRnSVJnVmtTR1p4YWNsVnMycTZ3dlBsTlJoMmFLQWJvNng2R2MtSFZJX0lXYzlxUlo0eWlWQ2NEbXBfckRfTnU3ZmxSbGJMMVI1LTAyMllqNlVWOEtZemxLWkdPZkV4cUNoQ0lhbldtaGpXemJ1UFlTTGRoQ0VxazlBaHVQSkh2NEw1QlVEd1pfMWxZMlRKQnVvOEV4RUR4UmhuZlFsb0dQejRwT3c5V0Vzd1FkeVZPZXpzWnExTVc1ZE9zZmZhYXFwTkd6TjRIQkZrQmN6b2hCc2ZYYUJEUkYtcFl2dXdSQXBvS2dHNUJDZElTS0U2aEFOOHlzcGc1NHVENHdXQVlzU3VJeGlIRENWVzA3QzBTZ3Jyb1VLNGhmRXI4RkdiMThSZXpDRVdWdFVyajRzN3BfN25tWWk5NkthYVZNYkRIY1diM0tRaXVjSGhfWVI2UWY3aWhxVVp5SzkzZkpxZ2RKS1ZfY0Fnbk51WVpiazJaQ1hMdHFzM1k3UF9nMGFRaDZNMnRQUEs2Zk9WblUzSWI2Z1lvNGQta0hWZFJmZ0NlaEtwVGhERm5UTjhvczZjZ1lMVnRUaXZVajFWU2JpckdvYlphOHVBNzZTSmR6cHRyRG0yUFE1Ml9VRmw1SFNfU0syODNCdzFMendhT3FLcXJYTnlPYjdFUkV1d2RGM2RycHBxWC1zQUVXNi1BZDZtR2NTQmhRaGsxVkJuWjRLeERPZzRKYkZ1SkY3dE0wanlicTRUVHdNRXZKaGdPTFd6MS14YjYxbVJ6ZDhZWjJNY2oyVlpmY0ZZNF95Wi1IQmJuUXVWU1ZDb1Q1aFlWZkhmYmdtNDg2OExwQ05XV1ZOYzIyVDBXRWFsT1RFeXp6YkNxSllwQWZPVDhEV2c5OVVoQVY2N1FwMmk0ZTFOQlVVY3pHODJVc0thWGUzbUtoUVlGUGJCRGs4V214SktfQ1B3bzMteUc5bVVHOUFDMHd4ZU1LbHJ1eFJsaUhLOElsVmR1eDhqamFvcXNqTGpfQ256Q2prWlFMTWVlRGtiZHJhaW5LN0JTR09JaVR0SkNtS2dsejUzbUtISHVDRWszM010MjU5MHV2X2VHSzZHM3JKdTdUM19ZdDZDcE5IRnN4QVFORDlWLU02SUVMY0JKNDlXSS1RYk10TnZwNGNTUnoyNGR1bWxMaHhRTEphTHkxM2pycUppVmRlaHRxNFpoYTFKMDhKXzk2aklIUjJkRDhUaHdDbzRLckh6Uk00MVZZTlBMenpXdGRiQWJtQ0lKVWlmdFB1ajJ4UnhmMVU2QXdRMlhjYzRBTHIwUDlaWVJaMjVrQjA5TE9vMTRCSTE5QU9SQUJ3MGxlYTdVWTExR1N6anZNTkQ2SmR0bHhNLXZCWGxtUHlkWEJTS0NDZEp5Nnk0ZWxISHBWM0FRR3E1Z0Y0T0JJM0dyQkNLamVYVDBIaTVacHNMQjNFcFVsNF81ajBIZThVdDhfa0h0eVN2akwtUTBSQnZ0NnFOa1NycnFKUjVlSVVpNGxmMzliTVdZeUVOb0dBSFBEeVNEam5RZWZGM1NBOVdBYzEtbTJkWnJNVW81UzdfZGpfeWNZdEhiTWE5bElnQjZVUllMeVNmQXFJUUVLWXJGMGhwZzVMcWh3Y3lnaDYtSEhqcGxiMjdqQnJ5WUN1WE5pYTUtRnd4eHdwWExadnFJMXAzOTBzQUViQV9jVkJiR2M4M3dYOW5VQ0c4d3JGZ2xjeU1GSlNiaXc5TTgxc3gzekljSU1wcVNRbUdEeXQ2TGxvOE9lNldYR2MzR1lzV25SVHU2ejIyOFBwVG45WDNSemhUaGloMnVuT2k2REdIa3dvYzVwU0lObGhJemtFbldBMGl6S0NfN3ZtUG9zdVJ2Rjk0S28zSFBJenJIRHcwWVRzM05WQjBsUTVNMmpVSnpkWXI5TnFpRFYyZ2tDZ19sR0VPRWZkUWxUYjJDdUZsYUxiVDV3aEpHWXpVeGxRNTlZb3pKNlFWUVIzLWwwVnFjalpLdWI2cE5oNlREUDQxb2dyZ1o0WjR5SnAwOTZ4R0tWYVNNVXNtRlpDdF94MTZWUkszWXhvamh4YnlFdFJxcFd4dmRCRTFwZ2Z3aXNnOHN2NkR2THdBVDhrakxxbU83YUdJT05vc1c4OWRCUHJ3dlJqaWVSeWw0TzFCMk9sbi1WR2QxenVOR09kTVo4OV8tVHV3M3d3MTZ1dl9JUGNrS2VjdlcyejY1eXlDUjNKS25Fc191bl8zWS1vak54Q1pJSWRXSFJZaTYzdjZnRWY1VWR6N3RZVWZQQ25ZaXlhLW9fX1FmNVdoY0NIN3JmRlBzZENSNzZWTUd4aFlxZktWNlFrYjFwemRaTnhBeTE4dzlEcWlXYlgybVA4MFVDTUdYWmhqeGQ5ck96OE56TG0yWGMtY2JfNmx5VFR3UTZjZE95ZXMxNl9xNnFnaW5uc0x3ZTRvMmViY3lxbGFfTlhpWXlxUVlJd0wtM0JqZENlS28tOEN4Wm4wNDdvRDBva0xXWGxoWlRyYXN3ajRUWlVpUGt0ajlDN1ExZU5VTGNQT1BUdEg1aHFySGtKN0xib3pDVlZzM2VoaHhHX2VUNkVBM3RKd1NRZTgyUXI1WWNnOGZiU0ttMVZCLVh1aU9DLXQ1N0xKUWZzaFE3dEhORUc1Zy1FeTlKWWdTVU14S1MtVEI0S0dVTU5pV1VPS1psbmlCR1I3VFF6aDdGeW5HZVZWQ1JnS0dtR18wVEZiZF9ROXQ4UzlwY0dSbURKeEFiZ1dueDVXM3M0UzUyVTY2XzczbVBFcnNWclExQmhhVFBFbkc4V3VOaXZNcTE5ak9aeDl2R2h4ejViMXB1S0J6OTVwTk9PWmVGRjFxQmFZWU1ramlTc1JaVXM4TmRMUnBFN3JESmRLdGg1ZzJXamhMUGZ0dGVkVUU0UG0wYjdLQzhmQ05UbnY3NHNfNVdoLW9DaTNzeXh6Q2E3VlJEV1lzM3ptZllROFVyelgtR1NZdG1HZkF3MTlfZ0lQQ3k1SEMtaEpQWlZ6YmdWTExnOW1qb1ljZEZSQjZjZkFSRnVKbjVxNG1iSFVzSkhRWnFFdE9sUnZtM3F1WlNmV0xraDF0T05RcDdjbkQybUZnUGM0cmp3YmhkOHowa1ZBWFlQdlp2Z3VTWG14OUxEOGp0V3pWdUNQNEotck0tODFVWE9uWnZJWEtVa01WREhPYnhNWXJZb0Z5dHo0S1lMVTVGbjhWWl9IVTNVM1FSc1VzUUNHZURHeWx6V1J1aEdGSnBYQ3QxUS1rVFFXbjA3X1V0UUVDbjI0ZEw0cjVuckd6eHpvQ2dWaW03MVZOdmc3YVB1VG9UNGdXLXJ6R0FPd1FMUlExU2JuaU92dXc0bFlTMThUczZ5YWJHUERCa0RxOTh5LWg0Zmt2Tmp0UmxQMDgxdzJkVGhScHdOOENKcXA4MXB2Y1ZhN3NyX1JzUUZKOW1icmhGeEFnM1E4RzBNSVprcVMwOGJSNGVqNjZydGVFbk5GenVhV2NjUjJxMUE0U2xxZW1kNXhYdFNLRUdVVXZGOHhZdnMxX2RWQ3FxWnd4d1ZHTG9oM3pheWRuZjV1UDFDbVAwN1VLanktZXVDcDBocllwRmFaTDBwOWpRLU11Vmw0OF85RjQtSGw5Um9Denk3NHZhdk1RTjlxU0toSEJBODU3VUlSVDFuVG1ZdU5fa1V1MkFuTFdmUGlvUFgxc2ZpMVhxMExaMXk4ZlB3bDJ0RlprYWk3VEVfeVdhbXVlUmw4enB2cVpEcmRpeVc5YW51MTdtM2k1eTNFTWQ4UkJQbWxEcmlDbFh2ZXpNSkh2amt1aXhTbzc2ekZVTl82NHF4X2x4b0JFdk1DeWRaS0szRTlfUENXa01mQVQ4SF80cUFrbXZwaDYtM1l6THNPRDFEWlp1VUtXRmUxS0xjQ1pzSUhCQ0NfX2NHMk1RSlBpUmx4bUt5LU5RLXJQU2ZKZGpCeGhWb05mV000c2laSXc3OElPa1ZlNk1SSjV4OEhqNXhkMmhheUs2NXVEb2M1amRQdVE5eEtGM2Z6eWstX3A3eDJMVGw3Z0g0LXJ3MjJzY083VHJLSGFPTjN5bzFNMGNwUEVkazZZTzlnYm5uWDhvOXBvV0tTZEFEUlMwbElSSlVHWkc5LTZTVUxxYUhTYjhSWEpQVVBuaXh5ZVRlbGZ3dnIyV3FjRUo3cEVTb3VueFJkTVJzaThhMU1WUXN5SHlDUjhlMUVtV3l0Q1hIVVpKZk1xcHVCeHVkaTk2OHViTVZEcXRwM1pYLWtPaWZMdk9nSDBsSkwzb2Z4VzJuSm9aOEl1elpOb3UxSFhWMVR1cHE2d1lrMlhQWUxJclV2dVZRaVRHc1YwRXY1UGlTVW5YZGJGREhMaXBUQk12M3UybndYZE1tRUFHYVpmZXdLeHdGQ05kdGRYZXlLeWw0MTlxenlmS2txN2x6MEtvUUFRYndocGp5dzRtU0d6MmJXWDgtdUJEM2NBVWFtcWU1bWhLOEhpSFM3M1FYNkl3T0hpbE1FTHZfbm5ZUkk5RHM4djFlT1RKMnRjUHZxVjBHMUJ0MFFYZTREUzlDZjZFdVZqb0Z6WlVxaDg3M0tCNmlpRFAwSGcyTkdTeVVoZm15NjdrUUd3eHI0OGhpX2d0Y2RyYlJxLWM3dGwwVTlfYldVaGdpUTdrRHFOeUZkMjFaLWw0MFBOekxaOWxMM0ZxY2M4XzF4akpkMzNtOUVhVVl1MXN6ZmZScFhjdHFUWVMwYkNiTWhzbDVTbEY2Nl9QOTNwQV9qQk83cUZ2bEhpYUpCN2tpSUJuNFF4ZHJGZ2NpMEV6R2JfajlUX2hTUE9BaHkydVhyUnktU3U3NU13SU5sd2JsSDYzUWw1Z29KX0g3WWh6c0FITVgwNUQtcWR2N2phMEdmXzJRM041MFBiWHphcGlmT09LTXYtRU0tTjZuMjJfY0ctUlZaRWVRSENoaFBUaWU1ZmhoeVJGSkxwZGo4VUZua0ZBTl9JWWZ1XzhLNjFzRklySGlyMkZMd1VjZFlwQ2ZSMklkMWZGWWd3dW9wTFdNYTNMam45WWxLVnZickNUWTlEOVBmMFlvYkxaOTRKUEZwY3dvU0JHdHBwblpLT2l0cE9RdVU3dDB5ODlGODNwdkllTlBuT1dLblE2bTUtckVITFJ0VURBVHdxczJFZTFoc1J2Uk50SlNCMnN4TEdhVW4yVjhtRUdBZDZKOE1mNVNzV2xaMlVsNGpaVGFpZmdXZjJlRWgyOWg4cWwtOXVqV1JST2pveFF3eTU0UkM4ZFRRTkUwZUdaQzdQcFVrei1wOC1oZzllWTVVOEFfOEJHelJEQUV4NVdLYldnYjlJdDZCemRCcXFmQ0lERGJrQ2U0T1RudE5IMVZZNHlQQmRXVElEVzJkVzlya0x3ZjM4eS03U1Q2aUQ3dnRwVURwTVNZQ2pKbm1IYnVVTUtXYlJhODFvT2ZPNjFfaE9aUWdpTlhNci1BUGdvdjl4Q2hwZGp3SXBmcU85ZjdFTXptN24yakVqYTRpQ1VMaUc4enhQWDV4WHppVkp1Mks5RjZvODhHcFlzbHU3VjBEbzUwclk2ZlFOR1RjbThhZmtnWXMxMG9Hem5jYmYwYlhkXzZTeERKX0VsMktjWF9nZGpCYVBYd0lTQllWRGxUWjFNQlJ1c3JNQUY0RzBVekhTeVNac1pNS3VzZHJxSHRiRkVYMnlRS3BkX0FFUGR3cWhrUjl2YVJTWi12aEowUkN0ZnctbTVOTDcyRjF2MVQ4dFJFUEJiN1JPNjRubVRsd0pBMmQ1S3J5SEhEMjByNEkwWWRURDJoUW55LU9RZlRjekFYcG9icllOZzFLUEk5X2U5QnVXbDJ3eTNhYjNycmJWZ254b2x5SzBxaTUwWV9KcWd2VGlMVW50dDJib1lJNF9Ia0dyMmlzaWRvMVlNOUwtN2NkR1BldDZ6UzBQWGMxQkdLeER3NmVLV19NMUxwaTBUTGtDeHZTbmlXRTByRHNIRW1UVkR4eW92eVl5Q2kwSVVZa0VHc1ZuLUFwZ2s3SzF4M1NfdEpJek1OenBiUmo1elJLNWNueUlOZ0FmZ1UtM0tJYkh3RE1BZjY4Ulp0TGduRlFZWE9uUTNNTEphOGpRTk5ST1B5MF9NN2VNQlg5VjlCeFBLQlZuTVBmUjVyWS1zeVRNemRkZmJlZEx3UUN3VFVMc255ckFLRUl2RGZ3RExMUTB6MXVfaGVrN1YtMmFJcEl1T0gyMC1WWXVFclFXNllTREFNeEZKQ0FoaFVsdExUYllObGdDdDQtZC1kb2hPTmpOOUV0bEdjck85cGhnMHA5eFBZczMxOE1aWjBQYjFsZXFXVzRzQkFyQzBfVzlYcGNsVjBXSkdzVGxmTmdQS0xFTms5dlpzUjBaby10b1hfVUc4RzBhZThobllUbnB6eko4MHVpXzZWc0xIV1ZWUTd6eHdra0Y0ZmNNY183NnJKazU0ZHhJcXh2b3FtMEo3R1E0RTNkZjdvTjAxNUFJUkFtWU9NVGlWSDVQLWdPY0hKdlM5S1NDeUI0d0UyYlZlMHpqTnlxN2xIUFdHczBpa00wWVZ0Z0VkcTJqRFZQeS1zYkI2LWQ2Vjc4S3p1M210VVEtdlBrMFRVTHNqdzd6OTdCUWxxWUVQemRvcEZlY3U2cE5iQlVwR0EwWVc3bE1RRHRTZE13N2lFakNSSWRMcFBTZnNocXh6djA0amxnT3lkRlFtcnJDQ2ZZdkJUcE1kVjdfOVNjY1VwZWJuUmV4RmNBM1JKS3N5MHJMa1ozWlRKcUVpNEhHZlI5dXBLaXp0VUo5OUpBSERhVnlCM1E4WU56ZExjYzhaNFVyb3FMZTUwVWN0cW5iOTlXYkU3MVdDdl9MbzJfYVY3ejYyLW9YWFdqV0NTMzJlY0RYUlE4SW45V1Rpc0F1V2tHVmdsYlBTSWpYOVREbm5TMFJlTUk2YmJuem9WOEdUd2l5bDdSUkZuSWVFeXQyQWRBTjNQQ29XQlVXZENZVVlnOVB0eEI1cV9JTGZMZm5iYWU0UUlGOUszTlNjeGVQT0F4WWVGSFNTSmFSRWRNSFRreG5uaUc3WHRqT0VWOTMxZEFOSFR2NXN0anVxbjZUendyc1hlWG9fX2taSjY2TjhWck9lNmtMb2tjS1Vjam42Tmo2eEIxc05mOTQ4TTVEV3NneWppMmd0SzVEdU9UMUl6SlNJOGlGeTB5YzJYZXZLcVNhMWR4Qkt5cE9rVWNxZE5WY3ZUZE44N2JZWmpRUTYwY243OUVmQUh3N1VGemNxamw4MzFmY2IyYnM5dkxjcXhxS3F5VEduZE01TjQyTGMzM1JMSmRiOEhZbkFZZnJZbVJFRFpnVTFwMC1HTjI3ckZxajhTMk9nbHJWSExzTERobzZYUmNrRWdObzZBSEttaWxuRG1FejIyUjMxZlhIUlBzanVNTllyQmQ4X1dyZk13UkJWSzZXODBPUURtVERKdVNfV1JlcngwV0dKUG9FbXJveTlYaEhaaWFLTGxtT0J3SXM5Z2JocDR4b2F5YjlkQVRkTHljTFpVUmJWZldNcjdsTFR6VFRSaExYcWxQRS0xZ211YXZZZ1JaaGdGSUl0THZ3X09JLVlIN19IOEVBbHo5dGhqclZVMzdWeVdIUmlkejIyVTF3VlNSUndlbVVtdmpac1hlNWVTeHRlSF9fY1RTdW9lZVRVeTZwSTk4R3Y5a3MwWkg4V3h4NExiMTF3WkdDUXEtbGNvZHVyeFBHYlg2NFRaN0UtYmZodnUwUTc3RmZLck9NdzhCNWx4Y2M1UlhHUEhvdGlFVHVIdU44dVdWaEZPajMtTl9wT3hpem13c1FXMEkyUFE4RENOaXRMYU5rQ1g1NFpOQklPRlNiZWlvdHRVTndIMVVRcDRrNVAwQ0YzMkRwM1VoOS05Q2xkWXB6cEFnUndvSDF3ZVFTZjBKNldGWDA1VGlEdnNhMWRWTng1c3c4OWsyOFRLUHE2M2YxLVpqbVUyY2dHOGtqVTJhRTBJalFBVkZ2NW04YkN5Q2FzNWVkOVdwVDVBdW5BcUFJUXpqWVVrRXFMVENkUDlrdi1FN01LV2djcklmNzFxTE8zUDFETlhMMUhvcTY3SXhJWjdrUGJodm9sUFlPYnE5UEFkN1hPYXpIa1cxVDc4OHVJSXVDZUVSQ29CcjR3RV9yTjdSZ08zVHpXRDVET2ZHTGN0cHItYk5lR05LdXhkN3lIZWU3c2dveDI2MmxFZ1FIaTJzYXR1MUN5M05ZZjNfdzZLSzFfRkpOdm9fYjZOZmVyT3VnVDdMZ1VONmFDdmhyaFRWUWlZZnNDSWdfYnE2N094Rkx5blBDX29tOWlRN0V4V0dHb0ExUXV1eXJDMndWWmFTQjBwNEhKUFkwVUpsQVlqcDFFV3BNTldpeEdJNkFJdmZOcGppWFhVdWFrTm52MEFBdkZGNi1NUDh6YTI3MF9BTGRnNGFSY2lpLWQ4WktDUlgzSzFMNldRd3IwWnFvYy1EdENKSmYzZW5qczM5ZS10VlY2ZVNWamRqMGFWekMxRHQtQnljRzBDaG10VjhsNHRRNFowYUJGMGNoZV9pRDBkZFU0VzZ6aHRtUlF6SjFERUw0UHBjS3dWNG9wMFNCaXdRMlpxUzZrWEE4NXlYaEFKekRvaTQ2TjAwN0plN1pVZGNoUnctSzZoeFA5MWJsX2JfaHJjR1UtaVEtQXJJNndLMjdqbzgtNENhbnRjZjZCNDExbXRYejNfSFUzTW10MWRGUkc0QjRaa2liYnl6anZQRTVzWVRIN2R1M3lFMzZyNXd6NVBOYUxKMTRwN2lYenRnbmE5VXRsZlY0cXZsRFhzSmFMX0d5R1dacHhzcDFkeEpDcnBxWGtZWWZFSkhOU1ZaZ1B6QkV4ZC1vTDBxY04xZEU2dEVWOWk2UlhVQnZmVTdCRlQ5enR5bnZ3Ym1sNl9HVlV6VTdra3RxeDB6UTdsdUJNaGRKVUpFdnkzNHZUUUJUQk9Lb25UQkU5NEtYNEFUNV9McXFEb1RTY2NRVzJCZ2RZblR5TVhqWDlSa2tYU0g0QVhyMTJGUjFrVHJNVDlsWUJZb1oyQnZ0WFh4UjhTT01XQ3J6SjBWZ2RaWHM2LWJHcVFOaG1TbzRVeUVQc2l2X1RUWDZfYnZ0S2cyc19HUHI4ZUtXdzdmQWJtMnR2YlR1T3o1aHdsMWVnaWtpLTJoVlh2MTN0TGFhRTE2OTNUZnlfWjVxM3RxcTJlX0tQeURTWjQxSUd1TGY4UFNRMXFNRXk4c1dkY1pQUWpONk1fYTljRFdmc0hNeFk0d0pfNk5ob1lqRmxGLUFBUlJCLVZRYUg3emtvUUJ6a09rX09mQjd1cm80VnZYNnBVWjd0OGhhd1BWSy1JY0w3Zkl4YzA2clp4UXlRakRoR3BoY2UtOWpEQW5UVDdRVloyTnhmdXI1MTlFaTlDNEpXYnd6VEZVR2JTbEViOEtZQkpDTXlQWl8wajIzYXZ3TkFlcG80SUd5WTUzVHhENE8ydFNmUFhmRTBSRnA4UkVxdjExRzVXdnRCRWt4ZGhxMzVacmhsMHFDR0YyNWJyZU1uVXhGeVoyM0d3dFpicHlvMGhiR0RVOGIwckpyNG1ZNHVoX1FPazBoMWRvLThiNFE3aU5keVY1d09uVFJYc3MtYUdrWjRqQU80V0h2aThsNDF1YkJTYTdFWXZ6OFJQZkVpcks3MU5BLXhENUlWZ3hIU2F4d1JQUTEyZkpNRWFxQWlGQ3o0RTZaV1VPZ2xCNE5MRktVNW50Wkd6N0p1Ukd2bkpSMm5DYlhKQ0hiSGxaYzBtWkNCRWJpYTRuUlpOWkFmczA4T3d2WS1VeUxiZkZfV1dfbFBodVk4SzRFVzlUMzRlajFpMGZmT3E5THZ2dnF2SVJyX04yWUY2bU8xdlZHcWxsWUxFS2g2U1NtVDVSRkFBMHBIVVk2dVRGdW54TThfVWhPZTYySk56NFJUZEd4aUViOTBfa2VZMHpKRnkyTDBRcjBWNzl4SVFuWjRkV2wwdTFFOWdyaXlEWFhDcTFlSnI0MExPNHB3cEJSblFRSEpLY2NlTjdXOHZGMjV4ZDVkX2h3bHJfd1BvdmF3NTVndHFiOFhmV19VTjNmQ2JHdFYwR2ljS0F2V0sxWGFxOGlLTTFYSDFGZkM2ZndaeXhSeGN2OXhmcTRHM0w1NFM3M3lUNkhPaTh6ekw2LU9NLTFTOG9vLU9OMDBlR3VGNExqcmt1dTRmVjZYTE9wS1d0a0hBWTBnUkhwdUpGSUQ2ZklhRUJ5cERkVmpEQnZiSE9NbnpSRDRIRVNqRHdRWGtWOU5ldGU3bkIwank1dW8tQVhIc3VPc0VhMl8wb0R4X1dMWlF1WXJobFhscEJTNklNeGFDS1hKZ0xGX2podnRPczBVQnlnWlZaelRFaEl1aFBKcXlPQ2cxLXpLbmcyVXpNVTdfU2M2VC11ZEpIVEhXTGhXdW1OTXIwTGRwd2dDVTNtZmtVUDh6WkM3Mm5lWml6WWFWNXpqUnBmWHhNZUNLNDFGbmJ2V3hJd1pYLUNna3BNVzQ4NHc4YzgzYVlkSUl4a3Q4R1JqSHN1Z1pXRUNIZEFQOGdrZkNjWFd0dk9yN0tzQlFJVnc5MmN3cFEtS1h3ak12MjM2ZEhNQm44UkVmM0s0X2htS255bWhUMHpWa0liSWg5V1c1ZVMwUzQ5MkRQY29aYjFYR1JpbC1LRlF4b04xMlZ6aDRsTkFLUzBldTlOejBRa1ZRa0h2UnRoZ256cm1pT0N6NThNZWlaWjJOWUlwZjZac0dZcGVMd1BIM1dWNm9ZTGduUVVza0ZxVk51QkxsRVNIbk9nQ1V6TE5mMkxydlhDSWFYNmNfYzZyWXA1Q1diZzN0ZFlYUE8wZlNDN0t6bE9YRm4zNVJGMEJ0QzROem1EaEY5aWxkTVFMcnNCREVWZEk0MlYxbU8yTTFTN1FtcTkzQ28yZHFVZXhsY2hkOUZmNGIzOGowaUszcldHZDNFaHBTbWVJRmpJb285NXg3SXNrckVlVTRwVHNkN0ZuYjZvOVNYWEx4U29EdU1nNGZsSUtONldKTnFOUlpTTUZzQUtqb0JocUY0VEZPc2pUQXVVa3FiRDJERHplVDNFUlRVYmJtS1ViUDJlck1ES2gycFRjM3B4QmlabmJJNmFCUEQ4MjZLTWpVU0daTjNDclB6NEVtRDh2YTk3ajJ1MWMxYzNJc3Q1QldPSmhIRk82RER2NWkwRFI0ZVN3UVg4SkNGSl9vRUdpWndSZV9PV0pFMklOYnlGbF8wekxwVVNwVWRhWk13RS1EcHRENUVQMVR4Y0dPbXFaYXZTZExpUzg2ano3VkpoWXdXeWw2R1U0czVGRURzNWxaMnRRT0poaEhyTE90a1hmdG1HQ3hWUDJabWxNdllZcTJmYW1zX2JjWm83b0haOTh2OFZHRU5BaEUwTUsxYWdpUW85NExmR25zQTY0T0FMcnkwWmpTLUJuV09ldk9TY0F1Nk15dDhSQ2NQN3U5UkFYeDUtRExHNURWZEZraHQwdHlCQkhHY3VfcjJZWGhoOUN1NmgzR0RwZW94WTlzWUhJUEluVlFqdjE5TXd1cml3UEhzU2NvOXA4QTBybEpWVmpWcm1Uci1Rek5wOHA3bEtvd2RrSzRZSVozN1p5T01QcEljMnZXT2VJX1RRMmZaZDc1WS0weUMxSElGd09pNUV2bGptYURPeXFKX1NyNmwxLWJEdzctR2JHZzZEblFCLUEzS1ZUVk15MTEtUEpacmc3LUpteU1VUGZrb0RZcXV6T1hNZEF4LUtTVHBhYkM4bUN4NmpBQTZQdXVFZEVNX3NKMktJQjhwd2JNb0U5N04xUjdIYUJSNGNrYkg3SFNVMUVCMW5kdEJKXzRVc3JLYUFTajRnbGJyaE1sOUExQ0Q3bFkwc242a1RaUnVuNzAzV2VvQWwzNDB1VkxnaVFnbXJqVVp4ZXNHSmVYLXMyR2VPMXJka0Q4bkdfNmpWN3d4QW1sQk5uYkZaOHhuVHBYN09ldU5tMzQ0dHAwQkVuODVscF9rbHBORzlUWFJjU0RqRWJsMzBzOVVJeWFVMWZPbWNfemQ4Ym91WEFyUWU1TVhDRkVVdlNNb2xRcndFOUR6WUQta3h6VUFhaDV3ZmpPMzd1aUp5N0pQWDVoeEY4d3hhdlRsNVo5N2E5cjQzaUFkTnQ0TF9Na2R5Mi1xRS04Q05PX3J0R1k2U1RxdzlNWWJoeDJxMDllOGxDZ3E0MDhOdDFxUlI3ZWFaMzU0bDBCQUM5U0pZLWs1djZvZTVkcnp0M3oxOS0wTVhWQmFlQkI2MTBueWJNZVdiVmRSb0drbjloRTZjcGJGb1UzSS1OY3pweUxBSW1JbXk1UnI5Nl9YNVIybFR6aGMyQUx5cjVHTFVmX2I1Q3paUWxDSWxlWVprX3FQU2FjcGhmdjY0a2R3WkhBWTEtT1I3ZFY0cXBERVF6cVVKLTJzTUxGVkdfYUEwM3c3STlQRVh5b2x5VWdKLVNIYVJ2NUF4THV3YmdRaUZDVDlzOEZ6Q2hRNmRCT0FBRVdkakptVktyVVZiZXJ0ZnR0Yi1mbVk2Njh6WW56QVkyLURfajlXU0tKWWlFb0hNQTFoaV9xV3N2bUFrM19iVEdUNlNicUFMS1JweTdrQU1RRmJDZmVnNkVDZkxsZWxqblVueFRpVnotR09FQXppZzA1TGtZRjRFa2FhclRvYWFUMVFRSC1YaThVX3dEZEVJcFU5TlFqSEFreWlrYlo0elhGWXR0REZaS1pvSU90dnZ4WGllVWJEM1pZUFVzSGx5MXJsQzZMRmR2MGNIZ2JMY25RZDBXV2ZXR1k4RVBEQmdsTlVONGlEV2JXME5xYXl2UzZ0VUMxaGNUdnZvekdxTjZoVDJjWFVPZXBhUTJWLTJHQm0zNFRHRTdxYVRFYkl1Tm1sMElrNDBFR0xTeVJrMXhJX014N0lsOUhyOVRzbzI3clF2aVpDeXBKbXdHY1kwUlVLanhDM0l4bDZ1T0NYblhLSUVTWEs4WDdTc1JwUEIzd1FTUkl5V3NPTXI0RUs4SE1RbUdjbmZ6dFBQc05melNRSnZEYzV1N0VqMzh4MU5nZVFLbTZaNndNSDRMSGJjN3N1LVpqT29KTmpkV0pHdmRnM3hEYnhaQUN2SXAzb01sNFhvV1YyNnZSWlQ2QzQzSks2c1h2NXJqLVI4UnlzaU01T2pxVzAteklURmh0cjlZWUpYZWpIaDVPVFF6eUJ0MGtfdmVYYVo2T2FQbjBKZGNpcXpQcW9RT1pxZFFJc0dqN1NHRU9XaG8zZHlvUG04ZFhqTExIVHJnbVJ6dlBtSFFuYV9FTUNGUlVxZE5acURZWmM2RGNteWlfZlpCbHlLSVFyekRRTkV6SGc3RFVOcE1lVklGclNZSG5VZjloM1QwdGp6dE41S085ZXVEZ2U4NlpscU5waHVuNzh0TGxrWEppdEY2TFd6aE1GdE5OMFhaY0dsYU03ZEp3QUw0VEdvMklsNzlaV3p3Z2pWSVVJYnpHQkVQS0g2VmhLWnFKUUs3ZFNhLVJYZjNkT1ZhOFhCakVrOHBuVGZLQlFfY3h3T0Zwa19jZzJzZU1PUWZHWWRJOGtMRWZmWGExYWhVNGZpb2VKbV9aN3NPTEx0QkhydzR2SC00TldzcjdmNTJRbkQ0ZUxRMExJZEVWNHZGMnhrMmlHbW1BV2JsMFdUaENodVBHaTBoNHFsV1dmWWVVS3lLMjJ5M2FoN2JZeDExbzc3UDFRNWZ3M1IwbW9sb1NvQy03VFNwRkljUTdxcWk3ZzRFODN4Q1N0LWRoeUd5LVlreEhncVNtWDNzYkJocWI3dzdKc08xZHF6alo4YnJITFdnMmM1aXdvZ1h1ak94dzJWeHc3NHdzMmljaVNJZW9ZQ3g2QmpsLTB1a200SVZEOGM2cGJsY1dQLWl1Vk9MQ2lINXF4SDE2eU5lZVlYZkY2LXM2bnVWb19pTnpjeG9LNVR4Rm9HUXJEd0tpaHJaN3dRaVQ5WlZISW93dUg1SUZKTGRRM05yT2ZfNnR2NzdjUWsycmR2cDVScmw5Z1V3aWhtUGt1UWhjRkMzVEMxQTM4Zzd4Q0xCekplZk8yZW9xMHV5aXByV1JoWWdjZTRGVzhjejZ0bTdsaE5XYUtWQ1FnTTNHbEM4VjJnMHpvaGJFanFJR0w4Z3NmT0ZxV0VIbnU5bXE5RXZiRlhwWHgybnZ3QjFpRE1rSkRvQnFaQ0F3ZkNJMDBVX2x3Z29NQjhhWUVacEx0WWw0VDhCZmN4YWlsN1ozM3BxRkxRUFB3Qk15VXk3SnFYcVJNaVEzRnUtZU5QUjBDM3BYVkxQZnB3MksteFZLMVBfZTY5OVFJXzI0eDVDaVRMVEdUUTBCUmxEajdEZjVXT2lRZkFxNmNBQkg2dC1MZl90LXFGaHBnd0FwbUJCOUg3QmF5WjRCMFBocWVxMko5dUt2NVhLeGpCSF9JN3R4UDhfN3pSYlpMTk5iZ0JPdlhrUkZYQjlGbktOOEpqQ09YM0loTi1KdEtUMXNjY1F6cUo3aDM5MHJRWEhobURfb3Q4MGoyM2ltYjRBbDZ0R3hOV3JKdTdIMXMtejhpX1N2OGFsa204Wkw4V1FhR09rZHdtR01WZlpQVDZCdG9VTmotVlZua3FFRE1fZ21FekltZzNQby1nTFBqOTVVeFRfLW5FOEh1SDJ4RkExcVQ5bXp5OWk4blotQk1yS1VBOUlnU0VzSWt0ODZ5TFlFSzI5WWtpT0tmUXdueUxIOEVQdDRYYkswbTlnaVBHYndDZkp0STA2VWdnUW16NGI3UGxhVmhKM29fdWJ4N2RWNktLa0tlVW0ycXI2R2ttcHNSMzgydmFTcndINmxJX0xfSFpHOVQ4c1NJMDNiODZWSGlTV2hrb2t2Z2poS0wwY1ZPS0RYU2ppSlRYWVRBV1paM1BtWE5mWGs1QzNjU0d3SUxMOS04ZzVxU2FLZDB6RFMxNjMyWi1jQzJBbllrN0dFM1RMOEZ6ODIzbW52dEo3c2VIWndOVU1lRHFWYWFXbEhiS2xwRk1ndGZUQ1FtVU1DOFVMTDJkN1dJWXFha2tNY05JUnR3SUE3YmdpaTVMTmpRSXp1b0wxLXUwXzhfSHNfbXJmQVlQaEVQTW5xUjlnRXFia1FZMlVmWFE5ckthZ0VjUm5NR2NVWWZmTWZsTFl4T2RWTzZ3VklSdkxMZU1rZ0NQdFpaZ2g1TEZWY2xDbVI5dVVUU01nYUFnT2xJV2E0RzZqbThmc2tuRmhrempWQnQ5R01yNGxrbmh4X2phV3FHVUNaMWFtbmdWU0hXNldPWHh2LTlvVVBrLV9JYWl0SWhsNlczZTNSbHg4QnViaFdjd1Bkdk5Zek1YbFROajktNXNrdXV6Rzc5TktsdHROY1dYWGUwOXhwcU5OZl9fNy1EM19wcTVNY0RRdGZoOXpZZnVZOEVVZHIxSm1QQlJzY0ZsN2cxdWdtSW13aURTd2R0Z2dIWldNYl9tbDRrcjNmNHhHY3FnNnRBdzV3TjBWLWN6V1BrRmQyRXdxaVFNR2RjN28tSnNQaUM2elFLVEVEaVRRV3BSWUdWSDBITkF0cGY5UXF1UmR3b05WbC1vRGgzcDJFUFFBM0VRMGlBU0ZGMDVmNGVPaHhRSXZlQ1NUaWpod1kzUzM3ekRDLTRkUE1WaGkzRXV5cUpXU1Nna0hwcThELUJjVXRfYjBQbGVmSnplRkM2T195ZXBoTGd0aU9Ta0NsMU53elpubi1GYUdBU0xXaEFzTmZ3SmcwMklHRWEyanRsbmdkMGd2V2JEWGZMTXVQUzRlY3lBbUhBV2tUeFhUY0RZUktYT29LMkp3SHFzTnZWVnBhM3ZZaC1pY0dRWUNzMkhPTGJoeXRybG5SUUFKZTB6M21oLUlIMHFQakRoVXhhNjl2dDdfRkJEVHdoS0JIb19MSU5ULUNFVzBCbms3RlFPV28xdU5GNVBxUVBoWmc3RGRXbHMwN1FZMjRvNDlXQUtjXzNMX0RKUDZOVXkwTy1oZ1E0V0hkXzdYYlJwUTV2bTVpbndrNkNKU1hOVi1NZ2lvUVZZc2VCLWgyWlpzNWhZR25kS3ZNNmtQTUhZTnJLaUpmWXozSWxpMDMteEN2YmZIZkt2ejZOUDN5R1pKX3F2dFZ5OExYRElxWHNpckl3TE9UM3NOTVdTcnNpR1JZMVhpSzYyRS1kaUEtOEJfYTJPejVTZy03WjMxX2tRMXdwTTJFeFp6dHI2enJOX1ktbEV2ZUtLRTRUX0VoLjI0RDRlU1d4Q21NUWMwTkdDVTEtS1E"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['43147']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLkhWWmozSVQ2WFBpUmVNYzNfRC1lWlZEckd3OG82YVFaZjZvMk1kRWo5eXJHQ1VnMEFRcmd1bHVTZl9IUjduUE5UbUREOC1weXZoRVhVQjU0Q3pqY0o3c3MyWGpvUGRGSXAtTHc3dkFJVlBhVFhNMFlmNXRldlRfczhkVUh2SXg0ZU5HWHRNS05jVkV3bm5UMk5JTG9qY09fVFQxbTNzYjlIZGtHRU14LUlNZXRQREhSLVpOcGVKX1Nzb21fNHBZQm83MjJpS0pVajhHSTd6aUxZaXUtWklEZEtCSl8wMmh1aDN4OC1ITWVaVlFGMEJVS0Nyd3F1MVg5Z1VnLXFZaTdKTFRhd005Y0tpdmFtYnlEMmdac2R6bTdDRWptOWZfZGpVOUl1NnRqSDk3el9XaGxGdkgwWndkWHIyRzltS0NoYkswUVQ0ME9PRjJlTDZaNXIyRDM0Zy5TRXowNGlSbExIZGc3VndHNUttTjZnLmpmMTJRMm9EZWxobkd2SFZTMG5Pai1sV1JBdzhIZjN6NFFVanRIUWlvRFhUSXZqM3djWmtmNXhERTBKMFVxenJlV2R1V2RaR2x4cEh5Q1czeW9MV2dmUTRabnkyT29rUklyajlEUDhiWDVJTnFaR0VCZXkzUmtIa0k4c3JjY1c4cTh1Um81T1Q2dS1jQjF3eW1ZMUs4ZHpNYWNkZ1RfbFRhT2dBVS1aWUJJdTNMZnp2S1FfdVpjRDFlQWYzdUFSTjhFc09nNzVWTjRtRlBEYkM5dXI4M1piclZmbERVaWdoODBtZjNQaUZnMUxsRDlyZkdTcHd5ZFcyLWVSZkpwQkY0MUl0eWFPLTJFeWxveEw0aWVENndRSV9iaWFpQll4STd1M2JlMFhhSXVjQ1dzZ09SdE5HV0R4Z19wQVJJZ1Q1bzBkRGZDLVVDa2UzWE44eGpPSlhaaHlHdElaamZOU0FxNndJUmYwbWpkNGtQQW0zRFdBc01jN0EwQXlCcHhoMzB6eVR0c0pNVXNHM19KWDJFdjVhMUpSRVllNUNEbjhLU3dZTXFCTXRVOVc3em1MTDB1UVE5Q0dreXBUQ04zZURrTUtfVHpNeVllREFkYlZHNk1ESjdSdmVESXhpOTY5ZURtcXdhRFIxWGVlSlJVM181clpJa29KMW4yOHhFWmpGc0FnWTYyYkVoR2NYX0l0WFRHMVlCNDNwVllQWFN2b1FqMzhQZXZETWZwOFpvOG1iQmQtYWVnTll1TnZER25XUnFGWXd2Mkh4QUlWeVBTb2tkQ3hJZGVZZXl2X2RTODlEeVpJVVBuR2F6LTIxeFA3dXZlZmlxZklmdmpqVkVKaUlXdF9Gd1ZIdGZNMkRvclJ6NWxjNnhMS0RCTmJpZUtDaTV5dkc5NURrUE1UcUkyVDNYZmVYS1d1V3FyYlhRb0RUa2pIUE1XaGZwOTRzSUJUWWhqblBOTzlFenNOYmZESmJ2dDdtTDBSeWk5YjBWREhYV2lValUtcU14SFFqdmRBYjQ2dEdCYlpkdW5YLWVLUUhCWG5IeGFKZjYtSVpCTGczS1VHUGNxTWM3WlBNNXdRci0zbjc4RUVhcHdoU2hqWDVEVzBaZjNaQ29UWWNWdXJVN3BPZ0xEM0NCS2Y5M1RFUUJxZXJrc3FLMWY5NFdKR3FMVnBObmJOY0dqLVlEamlkV3Q5ckRFTlhiTnFSTzBVb0Yxdy0zXzBodXRQSjRsa0ZlSWp3M3RWcmpueExoQ3dpVko1OTVnUnRQd0ZodmVJblpiRGt1c1NWQ3BWNmNxLXExQzBZaDZwa0cxR1VpOFY0Z21FZHR4MW1zNDdiYWJaUjhZWm1abVhGbzRKSUE1WHlTTGxNdUNVcUt0a2tBaEJ3NE53cUIyV2ZSM0E2cGNveF85RGtuNE5JUHk1OWNCMDQ2c2d5TWZNOTExT0tINXNoeENhT1RRd2ZvQWJnRDcxMVZLUWw2YjZfcXBWXzNpdXB1Wk40M2d5M1k3aGp1NXgzQU1Pc0NwSmpHMTljZmdOUjlxa1E4UmxoMmxJcUo0d1pmTjdLMVJ3Q2diZVA2Sl96NXZ3UUFuQnlpb2Fta09iaWtqM2l6d1NaTjhUWFZheDBYbTMzTFlwYk9zS2M4NDc0RFgwaTF4UVZ1ZXVoMzNrTk9yeDM0YUhZT3hUX3p5aFBfcE9RZ25jZmtIRk1ZSmdiUE11NWl0YUR4UTlOZFkyNV9qSnlfWlZhM1BRWnJjWmdBUVRrM3B1Z19zYkFzSlFCS0lZRG5VZTkyRVlYOTFNcEFmS0RKVXNWanc5emRpdnpraEYxdDU2bS1rZWZuSjFHTmJydVdwai1ZaVI4RGxEU1k2ZTItUGtKMURVWkRIdHZVSzNTWFNzVmI1My1sY3NfMXVIQjB1WkxrZGoycXFNZ0tka0VfTTU5RElISUcyMVBzNkc4NGN5aXlBeVVRbkJRUTZsWHpCOUYzT05NelZ5dUVqNTZ3UDczNDdyZnV6bnVsbVN6QkhMM252MEtTUkxRc0JaSUJCdXpvNjhWWWNBWTYwdEUyWlU3MFR0VzJxbEhsNlhlQS0xNmlhSlR2ekc3UkNPV042OE5MdEV1U3ZVUEU2cUVBQWVrbTNCRERaOTVxUG5GVzlVSkl1MGVzYUVUeVo5NlprSkpYTXh3UWpGMWp1eHNhei1qa0JGT0VuTWJZbjY5V09lOEI2QVI5dVEydmZlWkhNOHBSNnMxMDFaVWdzSm9zQXRBUnJKMWRVVC1EMWxUTW1hRjZ0M3ByYmdCYVRFNnlNa2U0Q0p4SzZDdGlIb3NSUmFlTkg0VGFORndnZkJWMjJaTUUzSEpLdEIxUnlJTkxSYWVoVHBmRWtNbEM3MFNzRGVmNGlrZmZzODdrQi1NOVViRndUXy1WRTQ2LWRPdXhCbmdUczhMMTN4RHVLMTZJU0d3ajVqS0xDWTJVRHRJNWpOQW1ZYmxoRWw4WWR2NEEwT1RRVWdFdjJVakp2RHB1V3NyZFdPc0E2ZmQ4aktDeGtwUjZWM08zUmVHdXAwcTBlYl85ODk4SGRTbG1TeTVtOTNtbmhGeVBzQlpzTUtqTGZUel9PSE9hRzJiRGwzcHZuWFp2c296NEVlaXI2N3VEcWhNdlhPMWlvaGoxdmduYmU2WlVUSWQ4LWxNaFJTTmFKWmNYVnJoM3RNSWMyRVRhSzZ6WW1kemZUS0o1ZWdPbmZvVF9RSG9aeGFxdUgwU2ZUT2pZRUJFY3ptaWwxOHFKUnRlT0o0b1dnWVRLMVk1TWNUZkR6eG9mQ21ud2dqY1pUYWpVVzZValVBM0J5TllITnJJLUdCY3g5YlluemFEZnVSWWRveVNWbzJsY3d3SHpaSE51Y0F5YlJIYTl5TEdjVmloLXFCM1FkVFhMTS1zU1FqNF9JRkZqUUpCbmFyMm1TT3Jza09xMzN1QWFISHAyODNwaUkyRGthc3pVbjRqV2J3MzQ0ekRITlc4bDFVVG9rY1hJNFVkbVVxaVZSaDgyRFRKZGJnLV9pQ2M3aTV3N1dwaG9qaHJ6ZFlxN3l4TzBOX2pzRjBoOTF5LXV5WlFXaUVFSy12akRWWjFTcHhjUndMZXE4c3VlcWgxNGVVdGc5S3Yyb1NkR2twMlNCajJPclEtOXhZRWRtcFBIRmVXQThkb0VhRlhmUWtrdHFCTnZiTTZDUHlydFJ5SUg5MHJqSjNqWkl6QmE0SEd6UTA1ekxDYng5dEttNVZmalZxTm41dzVMTzYyUWREV0NBUmE2Q3pyZzRhdHhfTDh6aUFVRUlBUnpIUDFLY2JTU21TVkYwZUpOdFNZc3JVVVU0bWZzd1lVRmxMbVhuYXA5cTllVDJBTURXbHNNVEdDWFhVUVdINGc3WUVCb3dSa0lWci15a0RobW5TeFJuYUg5NmFtTkRjaFBUTkxnRkM5anl6NG1TaE1ORzZjcl9idHozSmR4djkwZWJVWEhKZ3hCYkMxZDdlSzRlbHhmMmplVDFyMGdOVkZjbkU0SUVnSjMyRDlXV0xTUFVveXNkQ3AtVXhaSTN4cU5RR0JZZGpFQXhSeWFSc0dHRkFYYkRNWmxBTkMzbDhuTmtTakY2V1huUlhKTk9KRkJ0UTBFOENDNmNIWTE0ei0yd3lvN05xaTBPS3M0b193elJuODE0ZlRvUTNQLThaMWZPTWNHSGJNOFRnMGp5ZHNZMjUtU1JTRE5TSVF0QWJxNFlaeV8zZDBHcjVNMHYza2ZnNl9ZMlBEVEw5TW5DZWp2MTRLZHhmV3FxLUdVT24ydkZrb3pUb3BUWUpjVWVIODVmYjhWRjIycWZyQ0hWUmh0WE9oZjU4U3RjbFdNdnV0eHlJWEpPSGpKTmN5MzQ5WTNNR0JCekc2WWVfX2lLazhjcjF6TXNtZlU3TGVDV3QxQUxtMFhZWkN2dlI3b3BRMExFdTFnUV9vNnJlSGs1N0NnSnJZenA0WnF3VHN5VGNwY1pEakNUclZ4Ykx1cEtfSW9HZnVkZTlTZ1pPOVFWYjVzTTJWbXAxcVVLVXo4aVY1ZGNWbWQ3WHgzX2JWV2hkaFI5N0RBREhxSHlucWNFMkk0RlpaYzdFaVhfeXV5MXVkX00yQldLNEtqQXFPcjFPTXVOcDgtVmNWX1pvcnNaRkdKWXNNZzJyRElNWkJCWkRFWXpXaFY2M3o0Z2o4czZmLXA2OE5uMGhnSUZvVWdxYzV5Vy1xNGdmWTh3WmdNQzA3U3lORmYyMWxlN0xSMWxQME5wUF9fYmpJb09XODRwLURQZEkza2ZDbmVad2NtLWJsV3RrSnFNWWJVUUliQ0RhZmYwNXNuamFwclJBVjN1clZueFJLZ3NxU01DMjlYaUo0MTVmTlpET3NTTGxoQk5BRGoyMnFBOEVCbEs5WlotUWRFQWFOeEJheXE2Y0FjcmZSVzJtaV94TkpfMjV6X0prdlhFbjAxdDJONDdQMUM1bF82UFFjVlJIODlhNkdzTl9kTDFfZVdCS2dObnM2OFJib1ZGVDZtd3YzWTEybWRNRVlvWmFhOXcycEo4Slc3UkdFZlFsbDRISmhxNkZtcnYwdFlYSDBQc0FFSnZDd2F6QVRpUERkSDQwdzh6ak5rN19sMHhMN0JtNU85ejdHQWtBREV1SG9tdG1YcDNCaWxVRjlMVTlvd1pyUEJ2Rm02MFIzaEd3OGxWbTdDaUZaaTBLdGtIVFJlNmw4WG5RVy1uTy01a0xiWDBlTnRFelJlOFRhUmxLTDFwNmVuUmhfcWlGSEVaOEszNG9GOVRQZDZNWHRLR1IwZEZSSjZqMzhOeEE5X29sMlJvdU5vRzZPOEJXRFRQQzR6T1o4OVN5RC1XTnZEVk1HSzN4WTJwdFBheDVSYm9ibnlVeXB1bklkb3piYklIcl9jOE1aaTRmNUlRUjZTWFMwZXBhTGxMeWo0Yl9KbXpCdDdSVGRxR2JkUnphbkUzS1N1elBfMTI3THJLOTBmY2h6Y2tqc0JkZmR2NTB0V3k1YlBOd3hlR0RYdnJqa3NwM01fd0tldF9BUkYtdjJ6cUpqeXhVcGtQRE45ZktHOFVjblJqZkQzT2taWVB2d0l4ekN6VEg1VkM3LWtfdm1Wd2R5YzRMTVNSU0NDSHlJdkVWRlhWcEhMQXRxQmV1bmlxRGNWZGhMR244MkV6RHhqSHpzendSRF84VlQyQkhrSWU2X081aVRDMkFfQ1dqWUdMcW93UEpXWjZWU0V4N1dqYXkzVVgzTXV6NWh6T1FVTTZMenVpOVlxRVJBLXhlZDZPS0g0ZlFGZXNWaE93bFVQT2lLclJ5VlZyeDNFek9KX082Nm44a24yR2ptZV9YamxkckM1amRfVXhBQlhIY1JZNlVDUzJtcmZlUFdMTFgzQU9TUDFHYkNUWlBDMG1iNHpibjhCR3FnX2lodjRxMzBXRjFWbDBtS1RaZkpVY241N0JUNS04M0ROZGFUcTVhaFA5Qi16MWNWdlowQ1V2emtpYkpGcXhRMDlDRjZnYlhxZTBTblJpOUg5amc1ZExxLXE2TXJTZVAySkhxdjhBSTVhcVpRTnBSNmVBTk5CeEpTMzJHQVpSSDA4VFpEbzNSR2dMYXc1cUhCU3RLc3ZCcGNaeXZBMDliTFdzU28xTmFreGxSeGRvMWVSUDlUTVBNYm43SGFBeVhzNmVNU1F4RDByZVkxRFVfUENVLTlLYjc5NC01VjRSR21TOHFlYlE5LTUzX0ltMmN5cS1JM3FhSnBhbm1OcW9pVXQyX1dxanROYUFsdWIwNkpHUEtBdDZUajVlbjZQQmFCN2ZUZHVZMHBHb19XdEprYjlra00yeGtwaUhkdTJKUExDNDJ3ZUVLMmpPclJtcWtqOVN2RHB1NDdzd2tyUDluRWRZRHB2ckE1UGR1elNkMmdPa2k2VUhLRUdBWXlGbF9qWFpHOXBHRFBRRi1NeVlHd3ZOT1N6Skx6Z2RvMmpNZ2VlT19oaE5ibUNHNDJsdEVPX3c1YzlLM3ZKQkFZTkk3VnJZVW9TWHlvY3daRUxfNVdSYTg0SVBCam5JeUtKM0tfQThhTks4UjctMld3aTBob1pleEg4aDQ5cGVjMjdybzdfVnlwZVc2LXkzbkhRRS1oNFFpa2ZfanBrMjZvQmRNNHYyR1hLUVhCVjNoVU9BRjlNUG5na09jMnFzeEwtbzU4YTlBREZfeC1JNWtLZlBUM3dsUEkxckhQR2MyVFMzZ0VYMWlmWUlfRXpiSjJYZWpWcl8xOUpSRVQzTVFHUnhhQ0xpaHFLb0MyZUo4RUFsV2NFZ1NfSklYNnZUZWhxc1lQR29Db1lUSU9CeGRROEUwQkF6X3ZzSVptN1NFOTR0WkJaUUNrUU9ORUpleGRNRFF5TGRPaWl6M3NFU2RGTkNQNWdKV1lzS0RqZFRKSUc3YkY3XzJweWdWVnNPQkhwSHlSdGw0UDBHQVFLa05zRnBZRjdTdVBzeW80TER4UmNiQkVfZWlYazVMY0NabnpFdUtlZlEzQVpLZk43WHNBNnYtejhuWWEzTWg5NDgtdmRaNXVQYXVWNXRlVmVabE84cmZuRTZwWEhCZ0wwNXFhVjhybDRfb2dlZnJVQ21CWHZMR0s2VE5WRGVjSXAtSnZEMzlKb3Q1TWRKSVgzVWxsdEdxR2lvS0dQN2pHMDdMSlBhVWxTcXg0dFFEbUo4UDRmZ1JfaVhwSU5Pb1VCMlphb0IwQ1o3ak1ZQllXUVBOaFZjVk8wSjR5Z3ZOTGNUTFB6bEkzUGVxS1FOOVNKZ2VqQ05Eak9mNXljOW1VcTBMN3FDSmZJRDVkSE5OREdSY3ZWQ09oY3BVWktIUDROSGpVZWtNb3lmeGFIcnBGWXh4dl9vUUFDXzVkV2ttdFY3azkzNE5nczFaMDRGYTBNbXRWZ3oyVUtZR2RGNFpxTno3OTFhd0w0QXpjUkFyZ2dEYWFKN1lKa0lXTVRwTXBnV2lwZGlIalhjU1pfR2xXRGg4dnFFNDYyYTJ1NVVWR0V1c09wT1NPWkVnWUdaME5MdEVxenN5Tm5Fc0x0YjZObDhaQllPZmw2QnV6OEg4VE5fNG41TlA5XzFYUjFrN3pIMWNfRF8wOWNXZGJGTWxpY1ZUWEdLT2tyMUdzWGRlR1VWYXBQRjZ0d1ZpdGtGSE1aRjU3RTczaDZvOGFVbUItM2U4ZDdYLUVTckR4dnV6eDFSU3NZbTBJUHFZcUplVUVsUzE2X2RwbWVtZ19ycHRUV21RRkE4Vl9RMU4ySGN6OE9Gam9nUlYyenFUU2prSnNJa1BVdTh3R043enpMZzZhODctQ2ZUNHlhRDUxOVNnRzB5U0hjWWdSaFlhUHl6QktIZ2tTNTlhckIyUVhhUHVYaWJJb2tXMWlzRktBQWFid1VIVnhLWGpNYTJPT0RBRmx3ZDNFN1lQYmZ3elQ5LXB0QkYxWkNNTDlqaks1NjNhSFFDTS16TlhSbzNtOW9MQ2pIVUJXdHhDTmtNSGlzdHVkSC13YVFreVNhNVkyNjBmcUVCOV9ScGlDNUx1eGpLb1R6VTVEMEhkNkpCTVVFQnZoY0I3SHgyczU1X1JYaTkyVERlZHZSclYweF9pbFJ4LXA3OHppQlIwVndpRzZydmg3NDJrLXFma2piaU43enV6QzJoWTd6QmNNdnNGeGNzMGNNUVlTTWNwU0FxYzh4TUJUUDc0VGkxZVhTM2JfUXJHNjUzN0FWUEFSemQzM1h4ZmpFVDgyMk9xOEE0NGk0eGJrN1NmS0Y1MUxoOURPMm5BNGEtRDZyZ0IyU3VxUVBRbTZqcVBNTTlDMm1pTmI5cTd5WnJsanBLN2FrcjU2endWV1gydkU5T0o3VUtfbTJOMjQ5TE5UYnl5YThoM0dVNkktRnNoSWw0bVVnYWplejhhd19YQjhnbmdnc0g1Z3h1R3F5Y0VBV3JTWnVOR3FzYXdpTjJUMUxNMGFSY3NtLUhHTlJPU21TdHJJX3FqdHlHelV3MWFBVVd4Q0hKbHFndlExVWZuQlEzeW9CcXBpSjhBQ1d4QVFfRXFnOVNLVF84NlBQdDUteENKb3ZHa3F2Ukh1aDF5VFR4bjRORTBaY3AydVJ4bW1PRUdvaXhmaEZ3Szc5aVYxWEhpb3BxLUFKWmRRMkh0TDJsS3diOXB4dlJCM0Z2cGRNSnp5QkJOaEROT3RjMnpEektxVm1YTmVqbTlwQ0Y1OVpxanNRamdrTkQ5UnVJUGFkTlVwV1hQemRDUElkTnBFcFhraDlDV0RaYUF1S1FscDlnT195bHJ6VURoZFpTZHNsRWpjLVZlLWlPTUd5Um11SzI3MGFHcGsxZ283WFh5TzM5NTFhejA2SjJZU2RNTWVmNlJhRHpPckpPckZvNFRZUFZ3TVY3ODFINko3ODd1QTBqMHUtQ0RycTl4Sm4tQnhHOWNsZFpncW1LeU5fd0RkcGpNMjBnV2RqU0c3Xzd5Si1raHNidm81OWJwdmhBSi1URlBXNVZiRDZ6bW5aeGcyVXI2LVRDYUlmcjlJWEpQSDgyVzhjSzZESkx3X1dDNC1qcDM0UEhaMGNRR082bFdTdXZiM2pDX280UWk5cHhjYnVDTU9ScjBsOGl2b1BZVGt5Y2VjWE1XMWJuMnFGbXFPUFRnWmpDazg2TkJMbWc2ZjU2T1BubHFoV0lLMklHcWRmNmJ3WUM0X0hKalotdEZibHhFdHlvcG9wOTkwc2JJaGtCN0NVX1N0Tmh3b19qakdsSThCTXpiMWRFMVJ4WEtDMk5oNlVUZTh1QjdWQnM4YVUxbmE2YTVqOXc4QjJ0QjRLbHdWNzNrUlc1V09LYWEwMUJaT2R1MTFaV01nemVERmZhSFNPblR6dFlHbldhUmN6RS1oUkFEOEZlVzhYbGN4ZG5ZekFsLWl4Z2oyd2twVTFWbGxXd3BsTV9qbWg1VjczbHpvSDVVemUyeDhnTWUzMUxsT1FYVGh1aDV2S25feEViTUxZUkZDOURFRUxjRGFGTW8yUkUyRFhaZmxwVnJIUmJKZ0VGN0IyWGxVeXVqR0kyMXhoMjhBUGxNVHdfODRLUnV3ZGduWE9DQlRwc1pPN3d3ZkgwMk1mME9KWmN0M2M0REFESVBULWJkdGlyVzRDTkN2YXNWaW9YVFpTSkJLUkhMR0F0Rzk4d01nbFBUWFBNZHlzSENHNXo3ejlFSE9sYUxfYW95YUNuTGQzazQ2eDAxZW03a1pKYXNEcDZEREVWb3pmUE5qRXJRcFdCODJ6N1NjSFFMc25qZEZvU092R19xUzVDSG1DRjdhTnY0TWdKMklwU3prOXlEZWtKTUw0MzhGZ016M1dEYm8tUTFjQU9fT3YxdEl2UnFZWTlIb2NZTm04N0FmT2pVdDRTZnpRdndESlctWXN6dEYzWnFIR2l2emhPa0ZZQlM2QXIybmZ1SENqejA5cHE0cmRyckdJQXhOUzBacU5oUXd0R3V3YlBnWlBLOUt5Q3lCZjhiWW5mQTd0RVd0bFAzTnhwWU9Kck9tQkpuZjIxOWxjWVFMdEdKY2xjSW5EaG1hYmlHNkdRd2VudWxmejVSSkVUT1VpTUpJcUFmbldrNWdfQW5DVzBtNFJ4UEpzc1NzbU93OVdLZmNmMnEzSUhRUldqYVJ1WUZJb2NGSmZSdmNwTkc3eTdGZlRNTkdPWEZzSTdjdnNJUUJrRkItbzhqanpXaG1nOVl6TGxEOVFWY3JjTFFuSlBtOGVxT0dGcThSNDRfdFRmTWNtUnRNVVQ4d1QwZkprTWhXNUpKWGxSQTIwbmU5UXFpNm9YSmFCa2RKLWpXZ0tGMS04R3lmbHM1RkdhTk5waWtSV2liTXYwZlJxZEdJc0hRMk5RZFFNV2FpUjM1ZTRhY05oUEc2enZPQTNYb21jMGp5SzdZMzlMVW13WlliYUV0WmlvekE1aHluX2t2VE9nOHdaOWxpaFRzQzQzUWY2UlNlM1dkNXNjZnJLM2p4cDNGMkw0R01KMm1ac2FXeXZPRS04ZHNYdzRMUm84TWtJTncwbzVGZi1lSHRpZm9zakZSa05aa3ZQY1lYMVFOdWxrVkI3R29ybnRsTHhUT1VDVlpGdWFSdGw0WFBEX0tscnk4WlExN1YzZmphY1p0U1o3RmpuT2pXRTU0cWpnMGl4blNVdGZzdmZjRmdhV18yNDJnQ1pyQUxQejA5YkFneGRkVjNFenFpUmdJLWxiSnpDZUwyT25UTTVnbzNfWGk3cXBjOUQzQ2ttUkQzSmR4bDB6bGYzRzFZelFWMVdwQVJES3Zla0xia0ZBb2xRVWZyR3YybDI5VzE3dmY5Tnc4dEVveGhnQTEtYTh2RFVzR29KeUJSRlFiQ2wxblEzbUNoVTJNX0tlc2t1VUx2cWh5aVE0ZHQ3c3pqR1pIX2RQUEpEdVI0QU1ERmU3YUV4eTE0bUtEVHVLLVV4WGJWN1dOdW5iVDVrQTVuUXlBZ2xJdkJzaEtEejVnNlNUZmRjWmFWX2kxQkJLcUdhSTFCM1BmdkZFdWFMZVg0Yld1TklSQTcxSTBHUTltMkJvMHFwakx1dEduaFNJLU1RT1RHRURHSVR0NmQ5ZzNZX2FqbkJsUWl6RURsek0wSkdmOG9kbGNFelE4OEV1T0dtZmVVSmJ3WTBxbHAxMDA1VVV2UnhSUnY2ZnFNamFHc3A4Q2VRSGIxUnNjUzFMQ0JjbEl1ZlJUZVpoOFVMRlp0Q084QUFqdTY3SUVwZk5JQm5RMWt3YXZSSHIzUUM5VTVmOTVOMWw2NGtpZlRJMGtIdmdvaFQ1MGJFQnYwNVJwZDF2dmxjckFkakZpdkRFLUNJQ1BzQXBxejZwMzJTVXlHeGlvU1VXTXZBNFFFdDQwVFNXYV9XOTMzcTZ6dkt3ZVRQYlY2UUE4X3FGSkw2Q0p2WTB2Z2sxU1JQNGY2UVNabXE3WnY1Z01ISzNRU2E2VWg1ZUFnb3JBYzdaSmpFY1IxNXBVVGZwY0pxbzlXNWRualFqSzRpRW5zcUlzX2NpMkJBOXN4Umw5QS1DQ25KS1lPNVU5bDRDOWxqMTRXeTA5NHk5M2hDWGJoYWNMTldrZjRhck5GNUpzeGFPcl9pbWwyNzJNVkNkWVRhdmF6WXF0d2VnSEYta0tuUVpkbDFCOWF3Vm5fTlB5WFhjNnRfQVVfM1VXQ2xtZ1hDRUQwZG9ORWRzeW1FaV9KXzBjaGs5eGhWeEdRQkdwX0hONlpXaldxMkJuTXBIVkhHUnFZNjVfVlRTWFlOWFZJRzQ3QzN3YUQwcWNYSUJxUHkwNEFycGpGMVdCZVA3NVlNV3AtWW0xWXZFRERiNzI4R01SVWd1MllCeTJjWXhDZ2xRb1g2UHdMUW1KTVRaaHJRYTFic2JkcG1jM19TNEZHWDdEVzB5ODAyTEFtejlxckNYNlQtTGdBYlBHcDVnM0trZm9NcFZfeUVMRTBiaVRETFRac3hNQVAwekFVYUt0SjNZeTliZEYyWFFOSlRpNmx4OU1VQS1GTVFEdms3LXAwajY0LXV4RUJXMWgwVE5oSkVoZmlhVVFIUVNycFdMX1FIQkxPQ3BXemxVV3lzaUhYZXIzc3lWc0xMbHZMT01BRkJOWTZYQjlEcVVDTXBrcUdhb1d3bGFNVkJMNWtPRmdnVjAxZkxxMHg2V0M1YVhaVjBKZE1MQTg3UmRIZ0lCamczOWRwV2VCZ2luM0J2b1FuYVpvOThVcnN6S2dZeHFnZEVVUDF5Wnl6aGptWWpTTVVGbnMwa3dGQjdPUmh6LUR6U2FxNXRSS09KTTZ6SVlwUXktcnp6aVNabTNNSnpRbi1URzdyR0d3TTc5WlR0ZDYwZzJVZnRHSGc3aXc3bUtCY1dxTnVYSy1DNnpKcktOYVQ1dE9jT2lib01ueU83cmg0dkNsMlRvdlZaZlVKd0lIYVJXV2hZancwRDJaUjVscjRGLVBudmdIV08wNy1veVZrTERQY0lqbHpkd3M2bUdYeGRMUzF0aTQzUFJDbVZnNTVYbjJRNWdHR1phbW80SENzaGJOZjlLckhfVDVhRlNtVS1LVy1haEpWd0lWQUstMFE1YlRwaUlFMGVSN1l3T2tEemJ5VEJFZkxEWVV6MHdFUW9TVnNwVktfeXRBcEt2QkdPeEFqLVFlNkVCSkhiVVFMU3FqQk9oaDc2OTZiWm1SeFJpUFkyUTVMazhsV2EydndrdExHUzdORVp0djBDN2gwZ0xvaEoxRWtRblB3WjdiQTd3NUJGR012ZlRQbTJXeFJzQ19IY3VKTEdLT3lJN2wxSmxETGhtY1ViaU4tWGlwMTJKUktBZTFmcWxoUkZld293Q1k2MDNMVWJ2Z3lXV0hFRDBPRjZkR0VaN1hqVjd5YW5mcXd5b1B5bnVGTi1HLTVsakJxOWl6V3AyVXhyTzN2MlN2bW1xemcxVHlEY2VuYUp4eDhVX01idUlUTXdnNUpmSVUtUFptM3N5Y1JycjR2Nkx3NFZ3TWVadU1CdXdqYWY0Vm10bVczREhiWl9wNlc5RVFwU215anJaNjllWHF4RGswa1lfWGdMODc0SWxqUkdWaWhDaGk3eEhJNFdLWGx1NzhoOUNlam9ET2RUMGdxMnA1YWNJbURQczlmeUMyTkQxSkU1S19UeV92bnQ5SUlaM29NYU9WQl82QklYbE9YWHZqT0d4T1Z0WHJ1Y1dnU2ZDTGlaODJXbW1RZVBZVENtRVc1ZEpZcUFQSFkzTzl0allPSlF6ZGxkbnNIbUV6ZkdBc1gxOHg5SWhMamhIenZoSHBuenhjY1RzZ0dEZFlVM2p4akp1bFliOU55QjlUX2x0Q29ENW13U2RwN28yY3Q5N241S0ZleEVFU2Utekh2X0t0Rko2WG5pcWt3bm5JcEJrWWZDSzhzWVgtYUdHczJSODF0Vm9CRGJ1dFM3eGV1ZmMtX1U4M292UjIybWU0NFg5aHl5WnZzdTNxSzBDTmZFQmFRV1NKMDN2cm1yenlvMGJMcE90ZzlMMUFkaWdyV1pBZFowTzhCbml4X2tmQzU4Q3VYa3FzYkxpak81UWg1OHBmbkR0RVZIMjFUeW9TeVU0UE5zaGVrQS16N0hIMFRKOURwek1yWmpuUi1WVFpxRzFEZG5OTnJZejEyMjAyem9BelEyOHNtMjQxakVGUTRabVJuT1Ezc0VzRXhtTmI3WVN4cnJSWmpjVVhvM21oNWRqdFVveUFxWWY5RTlvM3JnT2xFc2ZMY2NGQmEtMTk0LTRhUVMtSXRvOU5ucGdKTENsQUVlWEI3RmVjeWYtcWxtSDR0SWYyeFR0TGdUc24wTlhNUUswVWxMLVVWOERmUnFqaVBXT2kzZ05vNGEwMnJJSUxqcGE3ZnNzaGExYkpuSXBQYW1sNTRyNmZzY3NkMV9UbHg0Q2N1MDhsM0VpMkljcXprRE9oaFJpdnhwa3gxTXRfWDFUcmFwWVU5OFBSNFlDY1dfajIzTXFsRHFuNFRWMnZHejNRUFZneFFFRmk1RC0ycjZmeF9tMjllUEJVYnRyLXp6VU5LVi02dzFFb25JcTBFd29MMlZOY09hVDdacnRrZDNIak9DV2tldEZUUFJtbERPVzdfak5wQXpJbUZCYjJKRC1RNVFIMmI2NzFMQzk0S3BZMzdPTldLcmNrRWJsVGU0a1JfZVM3dDVPMk1HUkgwNkdpMEtOSjdnbUxuR0RXd0RwcDdyTmo1T0MyOHdIQ1hKaHNjbGNKbFY0aEh3U0N4WkY0ZWozdzNBX21TYVdHSENwaEljREViTlZUcWJ0NUdDY0tyMjRVVnNuTWh5SEs3SDc1d0FqUGZCajJQQlRXUHNJUmFrSkRPTFpCRG1xNmJwVmNucDdwajVHUXh3di04ZlNfcDdoVFJFd2UwYXhfTDhfVzE2dDVwMmRUZi0yYTRkeGRoV00wd2dwUk1TZUxGUTdRQUREUTl6SFNZS1BFNG84dXRUcmNQWUp4VDJjZF9xeG1qbVE5anJmeXg4bmpyOFZ2R252MVNJaUh6cE9GME9ZWXZxMWc1UmpvS2NRTDhaclVhVDlTZm9RaS1JS2FpT2dMd19yQVdPZ2hkZGk1RHpaZkxGZFZQMlY3YnplYjZCMXFCS1VWRldOUHJENnBwQUwtbjQwTEdHZmJCWmJPUEFZSmhLV1pvbGstcjE1dkl0Y29wUFZzQzhlRnF3Z0ItRU1JdnhHMWd3ai1kZnlnZF9LYllZck40NURpQUFNV2dxaXNMNmt3ampSbzF2ZjlEWi1GcFVnVU42Q1VEOHFpdjM3ZFp3eDEtNENod1c3Z0xoeXFDdDVvSkFZam9IZkpvV0FUempScGRqNXJ0T2JDTi1vd3JFYzFrS3RqdEh6eVBZOWltei15TS13UW1GWXd3SzlzRHA0dktaNVNNWUJCZHFhTDE2Q3FWOTZOMTZobW4wUXdQVmRJeHl3NjJVX05qQ0lPMXJEWmt4bXBLWHAwMHdJX243ZkdvZzROSFUwWmM5cHF1MFBjYjRtVDhrVElIZndOLUJ5bnBaVGw2WXpNcUJ5bWE5VUtYZTN4cHI0LVMxdTdRMkowZjRrVm1SRndzWmlocGpPN3VfNUVNMlprWlNfbEFHX2pIRFd4OUU4MG4wZVNqNS1VMWV3ZjJkREtOaHBlQjIxandvdWZGTmQzZjFGN3Mtck9LR1dnR0p6SEctV3BGV1ZwdXlpNGg3cjJKcUdvNHZzcEJscjdscDZKQTczdFc4S3ViMnpqSnVmOU5DeUhlVkprY0oxRXNhTFA5SW13dG12aDFTMzJyeXpXVVVvM2lsR2hxbXoxNGpMazFSQnhfcHVadWVlMndadmJpLWZZVHBCc2F6czFnQmJ2QWpFamxZTmo3NGl1ZXVTMmwtM09LQkxtVVpzR1pMU0FScDh4MGpWdnZnODg2VnFpQ0VUSkZ5V1ZUNHZPeEJVSzVvY05DMUpvNXlwNzl3aHlkemNOUEF4aFRUbDZ3aDZxUzBHSHlnMFNqZ1MyTUFHZnNOZ3gtRTJ0OGt5Q2pPNWFJY3BkOHE0UkVmWEpWdE5xdHhwY0tyc05pbk53Z1JvVmFDaDJKV2VLdzBBaVVWS1F5MFVhN0ZCYjVSX1Fzb2t3Nmo4Zm9ZSXpQd1BabHc4SC0tSGI4SlYxSXYxSG9nY3V0NmpOTVFyMDdEa080eGtDdG1iODgyMXJSRndxSHdIejB3elRxV0Y2VGp2VHoxM3JsRlYtX2JnTkl3Z3E4ZUFDeE5NZmptNXhmZmhZRmxYeE5BSDRHdjNtdk5DVjFzcldfQl9ZS2JyeS01VWVaV0x6a0JCeUFnV2xVOS1URUZxYjlVX0tKNVI0QVJIOUNsUm9UZWtNZG5HdGNWY1dHdGZhR2g0b00wSzktc0JJVUw2cEVXWGU5T2w4a0x1c3c5M09rWXFFVkNUMl9CNXRDSkpJM3JFU09lU1hYeEZ0bl9BT2hWbk82d0cyRTB4dTdKVzFib09TRFpleGl1YW50ZHlZOGFHTm5TM3IyaU1LX1FiTzVQbXB0WEl4TlBxekN1c2RjRlAzblFudGp1bEZiN1Zlb3llcWV5SFBKNGF3QnQtVk5uRlNPWFI4MV9DWlNHVjB3YjhMd0xQS1RDclhpR1gwTmhCaVI2T2FTM3pIcE9JQk5rTHJvakVWU2Z3cGNZQzl4NmFxSWhOTmJCOTFPdFhSYTNsU3FhY0oxTnJTSm1uVzR6OV81N3ZLbFZEeHdmVnFqcHdBSUVFNUhyaE8yWkRFNDgwLUN2emtCODdQOW1PbnNPZ0hIWGxvcjZtc2s0RmgxdVV3eGVpRkRJdldOX2g3WkZmRERGbFhGdUs1VC05RWNPdjY3dDF2ektXS0F0ZldCQ3NfRnViVUJqTHJqOGw5NFpybnJVZFNHNW9NWXNZdFUweGlQVW0zODR6dkU3Vl9OVUVQMjIxVzR2ZFpXTWpvTFdBR3c3OE5vVmczYlJsejA3S3I0UVU2eUtzc3E4eU9LbGZrZlp3QzRTMDJtUmpLYm1fLXBpYlJqSmJwRER2NTh5ZHUwakNrUnN4ejlIc2lxX284TDBHSHc4SnpaN0VQR0hzbXhZRFpNREl3NXJnc2pNTFdXa1I1STl2T2Vrc29YNHpxY3AxSldoRXdpc1dULXFhenhIOTlwb1ZtLTBXeFBubGxJUVNtT3pzRnB3NUdlQWpEQnFSck9jNnkzWGVOX2FLcDZVRl9YZjU0cGs5U2R3R2JqTGRQR2lrMmo4eTRndTVUdlhpcTJyWmxGSTRSRnY2ZTgzUnQtYjBubWRYai0zd01yNkJGTy1PLUw4dkc2VTZza0kxRWJHOWtGXzF2SU95WFlacUVzQVJUdVR5TVA4anBpcGwtMm8yYUkwLTVPdjViMzBYV0hYNjdXWW5ueURHQjJ6M0swUE5vcDhnc2ZOWVBnOWp0bnBzNVVZQWszRXF6TWlDT09abE16U1EtTklyZWdVR0pHdVlmcGdYMGVxTl84eHcyRkRIQS1XTGNBYW55Vldlc2g1OUU1OGpvYUtQcnZqRHM1RmpOSVljeWNqeG11Ni01dlk1cXl3TmVjZFJodndwMDJtRFYzSmo1V3puTnhadXBmeXVmN2tIWll2WjZOaDNhejRRSWQyMjF2TU5SUWNqc0hwbmFfU3ZUZzNUbVdFT0JQV3JYdWJKX2NMUFpzdW53cWhGQ0gzdEpPNTd2WS1fZzhGUTFpUDhnNm85dGJqOU9memlFc2p5WlpKYlRqWGN3b0RveXVwSGNiWUh0RG1EQ29ySXM5TlI1bmlYdkdBTGo5Z2w2d1dVZEY1NWdMX2lnRTYwVkpCTWhpUmxsaGFPT2N5SEdjTnZacXBUS3JjV3RTazNqYmpBdUZFMW00czZjR1Yyb1FuLXZLUGo5LS1pZUcwMTQ2ZU9POUI2aDlnQTF1LWJGeVRiZGVmVWdyRFZDR05JR196UlNVMkpGalBkYU5DWGd3Yk4zdHJKUWxiVHZqSExidjFlbHBNMDhWbVhucldOVXBzY0VhVnUtMXotaVdtTFZxT053ZzFFaG53SFV3TUlLQ3EzVHc2bFk0bHMyU29DRjQtNVhCc2N6OWNySGNzcl9TMGRZN3FneDFGMTV2SFBuSTNUYXpEMmpYYWpLc3JBNmdTaXZnczRZSnR6Q2d4dC1WTjgzTWlvZ0RINVZPOTlKWTYwY0dheG0tbHNhX3Q3V1hVVS00RXp6cTlIdVlIcDg1RFdJVThtaEI1YkZNVmFoQ2xoR3FveDBaQ3JaMlVZT2NUU3VFWnBrdk93REZYem5VMkY5UHdzaHlNbzNmUzdYRG1VYV9IeEV6UEVINFFTYUpDU2lkUVZoak9aQXlaSTdmeUs5dGZPc0RHM0hZLXgxMUdubVhsWVN4MWQ3Z0pQS2Jzby1tS280TVA5ZUJTRUEzMFMyb0F4eWx1RVRTaERMQjZfSmphMWttcjc2c3hvWFd5Y2p0LS1hbVdobDBlZWNSeUszd2J5SDZtSmw3N3pFdFVVM2pqTnc4LVNXZC1MN0Z2dVByYTRjOFBYSmpoS3pNbmNoRTFYVzNnQUpfTW1ndXkwbVlsX1JycFpnLWk3MU1TVmpCMUVFMXZzUzFqNHhRSXBZWjJvUG96NU9XclQtLU5Mank2MnYtUGVxeEtTVktDSzRXc1ZVdU1jOTZlLVBnSV9hTnNKTnRhZS1DVFp0cGU4djRUYUU1RlcxbzFiV2FBRHFMeFRFVm5hRW1MUmFrOGFkMHNxZG94YlJEd0JCZTFZYjJ0WXVSeWR1T05mcThrV2lZSUJnbTRQaUVFUU1MWFBpYkN4SzZPUWtiRGNnR3l2R181Mmp0VjhJaFU0eUFPVGFCdE56MFJ1ZGZ6RmM1anNMcTRjYU94LUphZ18yaFhSZ1V1RXM5dFo5WnRjMC1iNkg5ZGhBamRTTnNqbGh6MmN0b3FjMkV5WTNnb1R6ZFYwLXJXZW5zNTZvanRDdnh6NmVITVM4WVA3bU1PdFZTNG4xSDB5YWloOGw2Z1lKdDdsU3JyR280QjN1VEtKQ2FXVWFpNUluREYwc3U3X0hMUFZRNEpLYzRkOXExYWpSNlFMUEVZSkMzTE5tOXNOOWhjeTdwV1RFOW41T2xvNXZ1aHRFY0RjWGxNY01SVi1RQ3RncDhNazJheG0zcWpfYnVPTm5ESE9CVzFub2RCQzF3NHF0QnRqWmJsSUxhTDJYS1Nvd1lGblFEa0tVbEpqTTRjWE9paHhObmdMU0FZZUZlX2xRYzhVRWliTW5icjdfU1hpRUJYc3dLcFUtWVV2UFRnbWlSSGlwVmEyMDUwTmJ2enk3SG1fMjFTM3ZneFBHR090SWdWcFpnT0NIRkZuSTlOWlcwcUc3UDVUZkZCLVkxRWVDeFJxRFVHaDlYZXpteXRCTnJuX25qTVpYVVBmWF9JOU84Z0FZc3A1aUNZbEtCTVJxSjBoTXEwRERPLVR6eW9ORGRHQmFuLVhfenl6WmVBUk1nbmlEWFpxdG9Ebl9fcVVJS2U1ZHZHTzY5UkVlYi1qVy1ab0U4cVA0YlRVU0k2NktUSXpRYW9pSUlDeWV4S2c3WThQZUh0clp6UTdJWnJQc250UVc2eFRqcGpLbTRnSW53MGdpNWxEa3dCUFU5OGtDdllWYjh0Znh4aExFUDQ3X1QzU2t2Sjg2clZtSTgwQjRLcVkzSXVpRDAyTTVSNWJIcDFZdy10clU4UHF5V29xWGlVVGJZUUZJNWp4S2t1QzB4by03SkJiMl9IX29CTmZhaXJMQXhlQnN1YXA4cWFudkRxRnRXUmJ1N3NOaTZtNDZGM29pRi1LaHctN2daay1FSlBaM0lVdU5mS21uVk1OWUo0cERxRnRtYUlGM2l3YVlHX25YdzRzVXJlQkFyME1NX3FSM0wzM1hBM3hKdVZubmJLOWJuZGR0aDNEbWNYSzg0OFQtVjhPUDhpMmwyc2F5OU9SeHgzRlQ4YWtUb3E5dlFhM3NURXhBblhSNmVwZlFHaFdjUU9qNVlfY2NkUExmdHZWY0JHSnk0Wm5uX29RV2NYQ2w4RkFoT3pmbWhzdmgyaDZDMkFqSUtuOE9Fa1MzVkkzdW0ybGRyWXlwc3BaQXpLZHBwNnV1dXlpbm92bWdCdVVmMVpLQlc2MlNnMFdRUzZ2UE1lczdFYnVlc2xGQ0lyMHoxRDZKZlNTVEZLcmhpY29FWFlCczdjZTFhLVZYSWE4X2JkSXRkMnN3YWhxNU53UGJzWWE0VkxXTHhLNkdyaEtrbTEtYWZlaTVPQmFPYXM3eTVrY21hY3EwUmF0U2huN0w3T3Y5Zzd1MFkxX2Z0NkJjX3d5a2NrSTdjWEk2c2t2MnUxVnh2ZnQxZnEtbTB1aFNJVTNoQ1hGYkJpMEh2RVZZMVNyVExUbVZtc1dXSW8wWFlBYWJfZU5Kck9HYkNLTHhzdnZOUVJMNTJiWnlkR2d4WGl2aTJkSXhRLUNuN21PUEhZY1NzQ0syZUxseENPMnYzOHlZZFY3aElHaTJFNkNUa2tSUlRqY3p1UnJKd3FkZXE5VVN3Sk9pamNhRnlsSVJUU0hrM2RYYy03djNPRGI5b0o5QnNrQk1BWUpXY3NvMG1oT1h3VUpSN1lMd0Vnc0lEZlQ3dENoN1FSUVQ5dnhjMThxU1FNalJ4VzF4NkJLN3RCRU9OX1lZRmdIUmJCc0dJODAyR0RLZ3YzWHJkV1RIODBuRF9BaWZXclVRNGRPOU1aLXBxMndvZlRCcjhtZWFxaDBQSmxsMWJTMnZKczR6NkphWlNqZ05ZOGRYV0dHTVRIVms4NXdfbUh5LWxWMmFoRTRCcTdMZldvRFNIYlFUR1ZtUWQ4UUEzNGRHcDNwcnZTZzVCVHhzYW1QWWcyYlJvSTcwTU9aUWlGTHMyYUxXalMwRVNBR0xWdzZ5d0EtRXZQTXc3RFkzbV9ZSHRwaGJsMG1TMjRBcUM3UzFJQi1xWFdZUzdtT3hzRHA2M09zTU1HNTRpNXhiSERhblRIU0RqRHhfZWJOS3YwdVdzdjdWcGp0WFdrQ0RZVVJBWjFCUkk4UWpKekRIaHNzMzFiRjM0VW1DaVgybExTYWo4RUphR2YzRm5vYW5lMVp0MXhQZHB4RXhWN01Rd21JVktZZFhCYkFQU3lWMjdzNVdFZERjTnhrYnVsaklHeG9RNkkzaWw3UXhlYXFhb3o5WlhoYS1SX0s3TnJLdFYtamJDUHhmXzdGMFlFQ1d6REV3UngwYlRIcjR1V1NEWHhoN3kwU3laYU5naXFva21QZ1VHenFlTmxjZVhHeUQwVnVmb2NNSHh2dmFJdUF6VGpMZi1ILVN2R0dISEloLXNTcUFxaE1uZEFUNWFkTDVudFhwdXZRUHNvZWpkZlFKZUQ5OVBqMXJHaEdia0VyT0hfNzYta0FSN1lnbXFKMDFuR1hOOVozWjR4cTBRTzR0OS1NbUZQSDNkOWhPN2hicV9xRFBuYkNBODZsNUhiM0htSzM4MXhrTFFmRlpZT0p0NlhsUVdJNnN6a0dGUTVlcWVadmVXYjVCbDMwZEl5djEyRktLUTZmR3MwaUVuU0RsMnVqSkJuS3FBakU4N0VZMEZud3RBS3pZeGNubDhDR3ZSanpJZWFldVpZWVN5b0NrUE1BMUlMZ3F4WGVHMV96UW1TTjI4OG1LWXFJd3dYWDRpQ1htN1RvNkV6YWRWWHA5djBvVnZtRWs1d3NUanh5T2FmNkJWNE00a0RnZkM0YnhaUWI0WFVnUHVWbkpheHhPbENpVGZTVU9oTlUxQUc0cUhVZXRjZWNMTEI2SlViVTNpYUhGZWtkd1lVT2VwWE5DZVVYU240RFlvNVdHVlhSMkxRUTY0cUdiU0NBMmxKRlU3UE8xajNxTWZPTkkzOFNQZXBmenZJZHFja0hkekY4MU42ZzJoOFNnbVJRNjRpTlNQeUJHNkkzdFFlVW9vYTVsUVFWenZaSkpYaVRjSzQzdENoN3ZNdDJ0ZGVSdm9RR203WXZNU1Z1cm1qenhjX0hJVEUyZ2hWelBKU0V0OTN5NGIyU1VNOXZtaUdPMWtfYTVIZDNNVDFDOVIxZ2s2UG8yOC1QYlRzb0RHbHMtRXJESTJGZ2VnVGVKSFlxNE1NczlfQTRsaExTc0VOdUdpZE9OUEpvV1lSSkpVbWJTc1pUUEV4SWtLdklydExCMVY0NV9BQjJ1Ym1LYmFnTE8yVjJTMGM2eXF2N0l1RnhKaU5FWHdaYmFQN0VCUXlNeTZfVVRRa1J0UUsxNnJRNEttTU5zaXNQR3BvZGljakxlTDFhUFl6RjhacThGRm9RRVJlRUhWOW9KVU10LW1nUXozazF6bG96QlgwZDdjMERRZ2tUZFZvTGpGNC1ET0tnaGpyMDlnOXd5QlRybzBDbUxvaXZsRkZtRW01OXRFRVktM1NsRk1XcHc1NnJXVjhGcDB2bUJHUnNfNW1ySjE4YVNVTG53REpNaV85TUp2X1I1NjJlZ0ZtWFZ2Y0Z5TWdhUDY3MFptV3dTS2FHd1lTN2pYeFMxUEFST21wdWNEc0FEX1pKX09fazFidWZtZlJHY3RURkoxMXA3ajdBbDFmM1d0ZV9TMHFvQWtZVGttT3RiSW9rdzdvOWJBRElRZzc3UVI1c3JacHlwWlp3X3RhNDByM3cxczQzSU5fZ1FCRXF3eWoyWHlCWXpNbmxpSkptXzlKRUNWRUEycnBRXzRKc3VzRm1MR0hPOFJqQjhSYzluUko4dXJTeXlNX2dHVVFwU1FScDY1OFUyOHZHTUQ2alhBTkl2cDVWRFVCSzNwcVcxaXg1YTVqYzZCMnZmbzFUWFo4M0dvbVdDeVRxa05DVTZ1SWxweE9DY1BHNTJVOUJVRl9oX2tGTU0xWmh0SWllb3hlcVdTMXNteS1lRGlXQ01BQWJFWHlVX3IwclIxTDQ4M0ljZTdGYzN1cG1kRDlMNUZrRmlaaGJnQVB0ZzJ0S1h1ODFUUWZTMzRnNHROczdqNDQ1U2ZvUkszNkpCQzhkbW5NQ09aN0QyS0s3RXRvUlZFM1RsSG5OejZVM3dRTkVWMUtNS2tFcWtxOVpYT1VpblM1WFozMFB6bU5zLWIyTmZfcVlLYkhGYTl1eFp1V1dHeDFhaFhqSy1KcUdYSm5GaUVOTEF4WUQteXBtbFcxemxjQ1VhS0hYWW1wXzNpQTZ4eDdtQzBLcF9KbVpRZnFtRjhSV2JJaFpvR1FwSWh4dkpqcHNJYnpMQmFUc2ZhR21pbXZnQVNzVEo3RERnU2ozTGRhMDFuUy1iTk9BZ09lTEU1di1NYWNNU2RrQnJHOXBsYTZnWFE0NUtYOEJzaUVHczduNlBmSFhNaUhYYVR1Z2d5QW1xT2ctel94NzAtc0ctODAtNFptSGdLeXFPdS1DeVR4X3dlNFJ3MW1UZFo0aG5zSDdvWDF1dUNQOHdVQkhhZlE3R0xRZ1dfS0VsVjV4R1J0SmxWeGhyREktbXh3N1ZZTy03dkllb0ZvU3VKbXhfQ0lsZWZWWDczOWdUYzFINjhJNWdaWnBzNkdjSTlhbFd0dVFxLUVnNEM3RzhwRUVobUI4WTZWaTlLcEFMQjN6WkxzSk1xOENoRjVsUmNiOHBMMlBuNGRpVmo5X0cyd2hCQlNJOXZ3MEJwWHEzTHdFQ2taLXNvWGhWTGkwNUtCdHd2R0pHbTdnOUgzWXhtUW5lTmgxdmRYT0VlVEg2d09najBxNnZBazhMY0hYdnc4SlYwbW9SbDl6dmc4eVQzY0syMHBVUkQ5RTRjaTRUWWFiUXlOZUNTclFzbVEtUWJLNE5Od3h6TVQ2NW92ZG5aQ2NqSzMxRERqaVBzVDcwNzh4VHpNMTI2VFFtX3VyeHZiMEZ6RVJxY3RoTDFEYVcyVVZIbnp4dHpYYV9IUjhMVnhPQWRXQ1RDUURNRmZzanlQQlR0OW5zZ2lLc3pfYlJKUHJ4TDNYY2d5WGJVRVota1lSNndaUFItd3lMbGxuRXoxZnQ0Tk9RQ1BNRlpWbjN4dnVuMGhaTEJoQ1ZrdDlMY1NPZTloY0JjVGxmVEZlY2FTYWtLSllKWlZYZ3VWYlkwVG9MS3FpcnpfNndaRENTSUllSER3aTdfbEsxcEZ2RmlEWkFDNkdFVnpwUkZVRGVrRFdyNS13a3hDbjZRYk91VDlaYklvZGdXdXBraVZJeTRYMDVLcGdqX2xBdzJ5bS1jMGVKNDRQQ3pLVWlHYk5hR05HQ3VReWI5bktlSTJMOGs0WFJrUGtFcjJTbFFTc0V0VndNdmlrWDNHb25pNGNRY0JySE5KN2Y0bTBQb3c0OXhOTmEtYmV6VWVaSld2NzI0YTcwTnlFSG91ZlJpcHhtYXNIbXdfSE4zWUdtdG84THFxUWdUREVfMWdZNWNrNXgyLXh2VFR2WVd4enJBYmtJbldTLXd3YmJTWG9BV0Y5TjF3dzd4QjdqT1k0NDBkcmhydC1uMTlUYjV4dWlFcl94c05VSVk1VEdSMExmMWc0ZXFRdlQzT09uUVRzcmhNNkdkQUNMOGF6bXE1NlkyMlptT2xtS1NtRHBmX3lDVFV6dHRPaXl2b3FSOXpGbG9UcWVlRWJrZFhfUTZ0OGFZMVJBLTc5aWxGVXZMTHl0QURQS0VsQmFrb2lpMWlyYmM1Qm5CQTh2NUdzQ2tCRHR2WHdTSjNHRDY0TUxOVHhwMkpXaHUweUV5MmlmNWMzVW56Y1VjY2ZQUktTQUtwdnVSTUVxdnlOQWw1dFVkNkVtTGVYV1o3YWhKX012SW1rNmRjdVlvOGJoOVU2amZCbFFLLUZCUVBkNG1VNW1pXzc3MTE3NWJKWE5weEpRbDVnRDE4NVIzTm8zNFVGdXNNSUk0NjBnQ01Vemt1S3pFSW1yQ1ROZ1BER0pXRjlQODNveHJVTmtyVDFBdXJjbnlLamd4SlI0YnExQXJkVURjUG43d0RmX1ZZOENxUmI5QVRwT2xOSjBEZ00xeDlRQlBiN0x6SGFzaTNRWXNFQV9aT1ZaUzFJbDd2NVB0V0s1MldWaTFOZTFUQlAwVFFPTDkyRVRmT1F5TFZpMUlmOWpvT3d5eTZwcHdvdWc2bzFzek93UHFyNTRXRDVXZ2NlODR6ZFZBaDNHNVowWmEtbDlfalVnYUZFWkVkMWNKRkFPSXlIYklTeFZwbzlsb2pJRk14R2V1eTUta19Yd0pJdjB0SUtiY3FEUGlGQnJuUE44bU93eGt5bjl5UlpoT3Z4aWRjaXBwZl8zZm5sQTdPcG9sTG5pYS13LW1KN2w1WU9yTlNHdUdtZno4azVfWTFPSWhOWnFmaUxpWkZ1bXhIekthQ0hrY092cmJxbzNVUFdiSzFoVERXazY0NGpySlVZeUl1UEh6NFM5VWR0Ml9hdkhDSHh6OTk4SUg3ZVpZTHlpMFJpTG9GdjY5MjhNNXJBM3dxdldTeUhCRkxkNkNKcDJoNVhURGJJYlZjS0dLR010aU5hWTZ6TkZYdW1IOFNSVVAyQ3d2MThlTEYtQWVuR3YxVlpVcFo0V2gyN2RQSFRUNU9GSEo1eWI3X3pKOTAwc3RsWWtEN0NfVkZLdzJqRE5BOVE5WDJxUHhIbTIyWlIwVkNGVmZLSkQ0V05VZWpzOHJzNXgwZVhoek5FR1Ixc2J5bXlFNFFDNGRjUlV6d3B0aUVIWUtmN3NnaGU3Z2xVOFBsejVaS0Etd1ZXWmR3cGNfX3NWMnd3WDRNSXVHV3B0SlJjaU1tNFJtN0tmX0daYW5JUnNqcWVoWkRtZHNabnhfSGdrNVJzWmthTzBKX3pQc1RzeTNLQU1nZW42OXVHME5HODhmT0tiM2QwZzJCMVpkcUltRFk2NC1NWDRheTJwVXhaMHUydjBHMmdpZFk2NGlLRlVnUzY0alJoWWtnUlR4aFJ1LXlSbXBXR0s2eEp4d2JfdWhHVjhyYTNzekN4N3Z6NWxTcXMyTEZJRTlGeDJmc1dDZUVPZEpicGh0eFVXcTQ0Q0czN0o3UnFMU0locDdBNWZCTEVZeWFZREhLOWhyLTFWWjNrdkE5c3NJUG8ycllvVDNXV3NPX3lEQ1ZJSlJqcHRadXRyS0NDU0tfY0RjUnIwMmo3QmdnUnRYZUFvd0ZKMHNrMkFyM0JYWXBzc3MtTVEtQURBZ09rR3RyTGZaTUpIcHNORndmM1lxdUhQdFFGZE1VWUNiR084YTNxVTl3WGNCT3Zhd0U5TmdsQXprNk9nSVlGdzNoYXNFbExNWVdQLVVWa1Q2bGNpSmNmQ2xGWV9TZUxma0JrbUxaM2Z3eVc5am55TThKc1pmSXpGa1JwcHpSM2IxMUFTajZxYVJkZURNSVRXcEN4TS14eDdnZlhyLWpNUVdWRVdUTXBLVDBNLUJjM25PYkNpcy1jdnR6eWNHeTRFdk9fYnVMNWgtZ0RtUURYR1pudVJjQWJBbDF3Y3lOVXIwOVN3eDlwYjVtUDIzWFpESmtvNUl3ZWlEVFFQemt4dFo3ajZSTVZHVEFGaHBnRjMtcXVlSnJnMVRUNEU3b0YzYkUtelkzSGstMzM0R3dLaEVsWnhuT1c4T0E3amRDazF6WW91MUc5cnJJai1XYXM1R1R2UmRMaG5uVlNMSDRDZ2xmMFZqZ2MyV3A3UkFmaVdhdTByS2t1SWtsRnNELVNFNEZaUUk5eXM1UEVLMWxzaVRGaDJ4YTdSZFVEbFIxdHpWQjBjSnNfRUtyR1JKZ1NzSmhpWW9UUDA1NXN2LWNwbUJoM0ZYbHpkd0k3UmxXdF9KaWRpZnB4d3Roelk3ZWUwNDVnUTBweHhXZ1I3VjU2dWV6WWszRXFhbXBRSEJZajRSQ2NWSGFvSkhSLUpydWtKaEVwNnR6am12ZS12cExPZlphRk43QzdNT1Y0b3Q3MExZNjFUQUhvbEZnYjdEUVZmQUpJN0ZmZFA1Qm90ZmVkMjVQZVd2UDgxbGhlYkF4dUdrMy0yM2c4RGJjTkdIZXdJRnNRcDZoZnk1N29Wbl9NbGRGcVZDS3p1bnNlZW5QVDZEQlBfU0xiNGJta0VrT25tck1PSGVaS2xQaDZnbXJ6U004NklIQ3hONTdWWHZBRVF6ZmRxaTZ3Tnp4eDVRR0tVNC1zWjE2ajJYek8wNWdwakNQdktwWFRCaFd4dEhDTmdHb3drRlFGODJZVms4NFJWby1iSHdVeTNqRkNGUXdOS1JVSlZZTTFYOEttRExCd1NEa3lDeUU4ZENfRFZtX1JwUDIyMTdLNm1mOC15ZTBxbV9Ud2E2SF9vX29SSFNrVFZNenBfb1FNTzFiQ1ZZRGNKTzlWNDRuQnhMRGJZWVlWOU5qM3hVUHVkaDUtcGlNTGJHZThDYjRCZ3NuSzhIb1BvS01fRjJkWlM5RWg0ZmxYbVNZMzRySm5kM0QtblhBUzhtYWdTSlFPZ1NSOEVaR3RDSVhzazJwaUpXSG1oR3VHaFNhMVJURzBkOFV4NlNVZDAwZEhoZFFwN1l5OERHaGdtM0tENVhSQ2Q1T090b3BMV1dDdlZQUWEyMXc5bzBXQlFmT3ZGQ3BWTEJKZzNhTnc3MVhYZ1dHVVVZdGFLcVZPRF9zZDFkMWh1MlNZYkpCVThyU3pKY1pReGZZT2RNUEFRU0VOVnVCTWNEUDFkOF9TdjQtNUh4czJnTDByM0FpQVhpRmNlVUx1RndYOWJUV1R4eXRIWU9la296LUFoQ09IaXVaaFdVYmtZUTVEdHJRT0o5MVFEVnJSYUNfT3BJbnZIaGxYbVRrZDdiN0lwWktNQUROWjVtYWdvWS1VaXhpY0pIbm1WdlYtSTlxTlMtRTVoaWIzd2xHRVpMSjBCbXgzRjhQaWhEQURVRU0yRTNlVnNlWWlhMHRZNHVpWHU2UEdSRGhCdmdONERIRlpndnNRbkJqXzhvRnNLbVpJWEZTSDlYQlBIVGRLQTU4S0kxTURMS2s3Wkw1Rk1Gdmx3Y0xON01sVjFvZkJwSkJtMkJhcDc3bjB6UXdYbFVfYjFwaDY4ZkxKZkNQWTAzUzZHZkE3b19mcFdfdGxZRm9mVGdRR1lOd1lSR29ZOUdTNUNGdW1Rb0JRZHNpdi1jeDRZMHBKQWlpcHBRQ1ZwMWdyS3J6cUozRVdwa3BzQ1Q2OTdfREMzb29OLXBOdGFHTWNKREpsaHZZdzNoVkQxTnFWd1hmcmpKLWd3anJVZkhWWnpRNXZUZjdhMFM3Wk5sd0RiZjlUMnV6c0I1R1c0VTFvWVE5Zl9lTWFfQzdWMmpLZGtsTWcxekVwRjVWZFB3bFY4VzJVQlJNbkJ2VTNDdkY0TXFXYlgyZS1pdmJ3NlRBdUdocmVveWtaQlZqU2JNWjVQSmlNWHAzNnFFRVp4U0M4MnlKZkFxeWMxV285a1E2QkVzNkRKUHVlak1qZ2tZdmVBTmVURGNxTzFmajhJMGFGRmlhTTU4TUc4LWU1SG4yVnN0NHJENDJrdnlmVFFYSnNTTzRndnlMMTY2RXdORkNnY3JPUnhTYllBWnlvcXhhU1NMTjJNb00ycGoxTFVZS3VXcDNjU3pBOU9CanJBUnNpeXRiT1ZYYUpkOWw0ZFE0ZDZUQmZ1UmNPMzVEcmVpOGxlNmNrd0dwYTIxRFhNbnNiVnBlbXUzRXpsdjJsS1RlRGhyMlBVdzhRMGF3SldLVnZOY3RxMkkzMGxSOTVvbTFkeXFGTkJUMDJ3Z2ZTTTE0TURoZi02eXdsS1ZRWEZhaEdFM1pjYTJKMW9wVm1udEJjSjBPTDQtQ2xldjVGdnlIdzRMNVFqNVAwVENzSzJyVjJkMUVXeUQzZXZBbms4dkktQW1ReHBNcUhjY0J4bWd3a0ZkRzZyLXhvZmJtbEY4Mmc5ZXJIOGZjb2E1bnJycTZXc2NLZzJXaE5CaDE3TWFuM0hZWF8zVFJTd2RHalBqUk83bndXbmM4d0FqUkxxcG9xLXhRZWg5bWx5RmJUcmdxcE9WUERHenUta2J4dlFOTGx2aVd2aGhoOG5VSUFLMHZRRUZleXpyaFZVUGF6RTdwcnFhQjVjQ3BjbW9mc1VrYTNET2FPNTc3LTE5cGFWQUVCOWRMX3hpTWdwTjZOWGRycld4dG1KS01sZlhwVXJFQ0owX2NobU1NaHZrallJU2tNa2dUZVRITFhLTWpuZDNVVjI0NjFwVG9JcTMxa091QlllblJKZWYxS3RnMXRuYTR1WnNJYzkyYWNSTm85UWwxMFlrbXU0aDVlV2tTWWdCQlNfb1pHWEdTakhhclF2a1FiQkhoMlEzZGRJVXJYY2lvZ1BRYjk5TlpFXzdfd18ya29MM0NmZkF0T0R1QWg2V19hMHNYZDR6eTJwdk5VWmxNQ2xJUE9fMmxIaG9PQk13RmxUdkVSYm1SalZ3VVY2Um42NDluM09zaW9Sd0VDbVJLdXk3QXlDNldfcDI5czEwX3VWLTk1a0RORVVKc2lBMndxbzhMQzc0UW5VTTB5UDJseUprOGRoSmY3WjN6OUxVYXJZZElqYjRZT3UxTG52YThiWmtuSUNIS19rTFBrMVk5Y21xOFh6dzRMTUtkbXBIaE13cE44eHpSOUIzY29nT0NWZDhSelFqV2ljSjFvQlpXRUllWkJmWkw3LXZ5a3FXdVBzUk8xWncxMXRHMTNfUXRfcGZLd0N1b3pEdWtMRmVka2kwNFNLNXFXbzZFLVVnUmFfR180WkRUSWxYWGRhcWtPbnJXQUl6UHQwcjA3ZHY0Q0hwT0kwcDZUQzNYRklDYVNNNWJqWGVSeEZBalJVSmNJOF9UcFAyQ1AtaURKeU9oMmxKTTZtWkkxV0VGSUVlNi1ZSHdHSDVtQS1jdEVscGNoaUtROFY1RnloTlFNMmNCY0F4bl9lMjExc0JQc0pXdTBrd0tkMmRrcUVZN2FicEktZ3NLVjRZRHU1X2hoeDNCLTVvS3JMU2Z6ZVFPQ2ZCX21kR3pvZmdoQjJSNjdMNl9mYllxS1p6WE1IWU1oOUFnZnlfWVhvSmFQR0c5U0Z3SkVsOVdnUEpBY0xMRDJBOXJqcV9qZWZUOGdTckN1VDNpLTFDRW5tRHhMckNfM2JocFdaUFlRcDJTQjBIRGlsdXBtbzEwbXluZFlqRU0xamY2OUIxQzZPRlVqYUdaRktxWWhDYWFVcTllNDY0RmNfS0hKRE1nQW5NcVFwYXBadms3WGFyWk12Z1Z6eWZBWFlfbkdoRC1NeUdiY3VFRE5yUmxWN2RKT1FqNG1xMm5tc3dSbGhrT2dMUXF1bXB5R2FvWmRiXzI5NTQ4OHcxT1c0ZXdQYi0zRGNXMHI1dmJYUG9DZUR1T1VmVWpfSEJxa0tOYVE1Qlk1SW5CMjJTV1dRMm01cDBlMndzaHFwWFcyLXFpYndwS3VIYzNOOVVCanJuM2pPUWZSTmNIRmctMHU5WUZrZjViTHFiajJMcVppS0lLS2xoR2tibTVyTC1FeXVrbWs4dkptTlZ1RHlWb2otWVFleGV3M0hLV0xSR1o2bWNjYWpacFk5SlVzNHJMWWxaOF81RlVqNUlsdEY1SFhnSHliX1JEd1BGd2R4enBud0gzMFdTQTVEa3d1RjNDYmpsZEFpQ0NLazYweWZKWkVzQjdCbk5Bc192X3JFdFN4WUFfX1ZxaUhickcwUlpKYmNIMXFreXdNR3l0NXo3cDNmY1k3aWNaZ1F6SnZrWDVKUTdrc1VNR2x6NkFyU1NvV2VzcnpLdG9JV3pMcWZFVEw1WEpwMUVpMzk2ZkNsbmhSRXhma05ZV3h6N0JnVHh6b0EtdzlVczJMYmtDdDlud1h0Y1hmODZKSjM1ZmdENmxFTlhVUDJJWGRqQmNQaGN5aVNZRkZsSXAyeFUzbDdNMzdaNVl6QmpUd3MzbzZTSEt5VEdadXZwelJhbGd0MzNXQlRsQW9pR0k1X3hHNlBleXhNb3BHMEJjSVZjd3oxdWZQeDRDazhxQW1JVEotMDF5QmhHa0VDRUJ6WDZCTHRXT21NNERpUjdjZ3Q0ejZvdGhpQ1dVclktSzFPazNtaWJNc29VWmw0QmRJV1k2eUJRYVJSQlN0b0hZbkhESEo2N0ZubHVZb1AzY2hlclpxLUp6a290NVhMZkpsNUM0SC00MmtmRGF6a0FBSjV4cXVfWHFaLWxaMGlOYU92aUhMNTVKZ1FiZjlpcUhVdXlUaDRscU1MZHdqd3V3OEk1a25adWZmWnZEcHlCdWtEaC1wellGUXU5YUc4Q1ZTVUVBRW1DTzlOM3N6anJEVGthZ2JvaGRVcTVEdDhRUW1fOVptSm9SYUpJRkpBejZTRVJJWFgzemMzMGQxQzNRTzZKMFR4Y1ZJc0tWVTIwdUN0amhROGpSc3JwS0JSM1lhZnhSWHN3SWRPZDRteHp0R29NMzF4dnFad1JHbWlveXdmYjVZNWRKSDdHVF9QbkZ6WEdkM25QRzZWYjh1VElqcWs4b2VtR3dDeDNyVXVwd3RoTkFwc2R0dVQ1MW5hRi1qb21vcDZwd01nb3EtamNHV1hvdXBEVEFBRVFDdFJtRmp5RDl2OERNQTBHU2FSY0RHSVNEX1JLRVJicDN5dVkycldNUjZwY0pmRWFpUElkbV9aU1VhT05qeWhKeEkwa3NuOE9hUm5uTmpoeDVDV0lrT2lIS19BOEs2MEJaWWFKMnNWNVB0bGV6MnhZOHpEYl9EZUdhZ0RiLThGSWJfVzEyM1FFU1BwcHFyU3RHRE5pWENnWmRZSVZmdkwyc1BoSmhfaUNiekJDNVlMS2lSaEZ2LVJheXlEMmU0UW56MnNPVk9kOVJwdXQ3a0N3N01jRUFhZWFDTVZ2aC1wUExkQ2pua3FuUnQ0RHZ0RmNOS2w4NWtSUUtCWDN2WjlqSnRGUlhVdElNaUNrVFJwZGZUTF9BVnZTMFFPX0NmSnExNFg2N1pQTGhCb1BOT3lZMG1Lb3hqbGpGTFBaNkxIM1Zlb3VVTS1jVUhRRGpfLU1jdkpLOXg0cHB2Y25Wd1NVcnBKVWMzOHZzTG1yUzMxX2YwQjRrcjFQLVRMNld5NG5WQ0xhVWdKaGNUTDF6aDNiSU5HWUlBWlJfZ2F5Y3lhX0c5ejJUclJOZVFYaFVPcWFwLXg2aklCaHdqR2VyVlRuV0xkUXZLdGxxakplT3RhcDhlbk1PWmxqZGZZbk5neEtCakNDRW53b3N0R1BFUnVJVW5XejJfUjNuVUM0cmluRW53LUdYc2Z3YWg1QTduLTZPUHplNGVSR2hEdGNLMW1pcUFOUU1QUzZGbjNjbGM3NjQ5OE1uanJXM1doSzhKeW8xdXZ0akVVWGZiNnJzcnFWd1JNNE0xdzVTSHoxeWkxQlJHTTk0WV90c2JJV1JlSlpnaUlVNDRvcFNtcURCRWVpSUZFbmRhU0pITjRRWWc5MENHNnRldC1BNU1vTFh0czRqQW85SHhwbUxsV051TDBiS3RCTzZ5WTJJc2FEU3ZVaXpyOVVXXzdZa2FKbk1KSXhGWjdJRTdUaDNHVEQ4cVJidm9EM1pHZ1l4TGhRemVGQ2NfUDl1QUZBX2lDVkNpcUxVNDk1S2lwekNfWVVmZVBzWmp1LWZEd2laclAwNm9DVVdNZXF0cXVjQ2J5UkV0djY1b2FOMVg1X1BVd2xMQlN5ZXFST3hQRXJSQjljb1hxZTV5QlRNUVJlMnBsVk9ldHlfMjhFMTh1bG5YLVFseEhWSVFpbDZmQWtRUmFMT3Z2MjZPdmdkMEU4R1kyTnZsYXdpV3JfVTl1Q0FpUTJIeXVEa19pTUYzN2pKa1Q4aC1FSFoxTU5kMDFYSzhlQWZDR01xUVhDU2NMV3pXX3FmQnRFNUxLTC02Q2V3WnpCSlNQUzcxc3o2UFQ0eUVmazV2Z21OTEVMbmhWUEp6VGk0OWdyUDRzaDVpOTMtLTJqZDMzN0N6d29jWmhwSV9USDR2bld2RVdiZGdCZzJNMmFuRFg0cEFXVTEyNXpxNG9LcVM1TWdZZVVJbXU0dE5fLTRyb3V2M0R3VkxIODR5MlBMTzNHSkFNc09RNW41YjM5QzFmRm5XOGE4ZDBBR2JGdUdPc1lJb1hxUHR2VUFfcF94SkpRNEpWR3M1REQ2ZXpQWnpYS21haUtXNDQ3ZzM2bTlGYjkxQTRwcFB2TVRyd1Q0X282S2MzTWhYVVFFdXBycDZ6X3puLThEM2lSaks2YzhaZ3I4YUNkTFF5bzBEeUxZbHF0RlNya2U1bkItbW04MFlRd0tiX3ROSnZKSVVZZ1VFemt3NXBNU2Q1YjItV2dmY3pQUzBJbUcxNFY2R3hWUkZTTmhMSTBEWjRTUHBXWTRwQ1oycjRSX1h5TVJZa1B0UTBrUmZCUFljVE90MUYtOWtvZVQxZmIyMGJUSWl6OE5BRVdNRXlOYmRNSWhRaFh0elhXcGc5TEdPWDNUcUZyWnJLeWtxNFFoRWNhUXVXVzEtSk9kVV9WUmxKdE9fbGNfeDVac0ZJZ1JsOGRwdFUyNVZRalcwUDdjdHgxVlBKbEhpNXpMd0oxSFpwVW1XMkxWUWp6Z205Z1hTRWVMWWZBYktENG1qcU1ILWNIdmtJVkhrb3ZIcEFuaGJFaVFaX1ladVQ4c1MtVWp3bGE1RDVQYm9Bc3NpbXhQMlh4UU42UmV3bFdqc21KZ1VEWkYxR1kzVnhkQncwRmI0ZmRHRGFNUlh3N0M3a1Q5VGpYaUI2THlPUWdrSjVWMDJNZW9Tbm1hb1lGVjBlTW94VEg3TlJmZjRtTmdwbm44Tnk2VFFZcXVubFNqQWJSWWFvbGdzTzJCRnNnLW5LYkswd0lHZTltTC13eS1WNFNmRzI2ZmFZMEg1WUotMy00MlA1eXNSVWNrbVhCejlmRGU0amRqR0N0aHpxUTh2M1JRU2xDcEtjXzFvQkhFX3QydVZqN3B2Ni16XzZ5VjFjQVZDdEFZazE5OHcyNm1QejJvUWJHaElPam1LRUlPWTM3MVhyX01KOTFTLWt3TTNrY2tva2pBYnBKSzVnSkNHZXVqWFlsRHU2OGs2V3VGZVEySU1oZXMtbUoybDVfSDhzdC1Ea2lpOXVGWm45aVVsd0VpMWlLY2kyRDNVNjhtRG1PLTVGMFNwX25CYjVoRWFaMk9qdjYxaWNWV1FXNl92cEFDTzJIaFF2blowbm9ESFJVcmVVSWdhM2FhT1V4T09vLVQ3Xy04bnhheDk3SzlwRC02cXdTWXpfaE81bThBOTF4ZXZWRTUtSUMxTDBvUTFUWXJQVGNVdFNHdGJTNWg1UmY5SU5fX3lMN1Eza0dndzBPVFFjUDAyZ2dGaW5FYmVPOHctemZONGN5djduRk9sXzl3VVlTeWQ4SW9FeGpxUGNWVGk1UXpVRmdwN3RRY0dobnZXWl8xOWdDc0RPZWpZUUx3MnhKWU5IZEFlTWV1OF9FX2dITHMtWlROdERDYVl4Z0VRc0xsSWdDRjlnMW94YWl0STExazE1ZXlFejJzbkEzSmNKYW02aUpLRTR3cXVwMlAyLW5IMFpOWUE0bEFZakQwVHU1bjJoTVlrZ3A4VWlMNTFaNVl6bHYtSlFic1FuLWd2YVlJN3p3MUpHMXhGelBLSVYxZ1I5Nms0TC1KZ2hwUXhPbVF0X2FUSVJsYWlrVlZYTEVvX1hKSFAtV1ZxdG95c1NZb29Qa0JUU1RzSGFvUWF2ZXBBZkptSlZVem00UTJ1WGJZZkREYTV0Q1lTb3BfSzRIYkljMDdYRnlpR2trTU15TlYtVGhuRFFCMTZadEhPbWNBU1c3bW1BNURoQVFHREFocXUwWF81WXhaTnFvSUFGaEVFWEJFWTdVOXJQYjdIMnBqWm9CSktDTFVIZ3ZpQUUxenhTT0EtVnJ3MTdEQmtnYnBnbzAtQUNNQ0l4anAzUEpZX3RFWXhVQ3pHZ3JoSDdSTjRwN0pwYTJRSnFkdlE5TjNxR1FmamRJbWZJaTh0eEZhUTRoRko3OERiODVHSU1UUmJYSlY0eHQ3VXlCckJSQm96WU9EOU9DMHR6eDJGOFVac3pQRWtzbUtGdjZBQnMyMW5Id3d1Smc2VXg2ZllqamVJWWdrSEg2UzZEVnVHQVRlQWluczZVY2tNSy1YRnJRWS1naTNmT0FPUVpJTzBzMVlLdEFybUZjcldwZDJHdGNKX096a3cxbDBPVkI2SUdKN0V5R05CNmJ3S3pQSUxSb3BmSnZPMXFJbDZfY3JmV2o4d2N2aEstQWY2OUstWDd0bnJVdVhNUDhMN1hNTDFPbjFacm5jaENyTnByZVlHWEtYYzFTU3JXZ0FGM2llcHFtakxIU0lLTllWZEdIMXNMWlM4RURmVC05VlRISHNla1p2ZkpjYndfTW1jU1NWb3kyUEFNVjVYLTdwaXExcmk4TUtaR1BNRFBoRC1oOEM0NFJRdzM1OGU3UXIzazhwdW5VV3ZIRWtHYjNIODNnQkh1SV9kTllKcjRVWEZRQ0ZFNjRNLVZXQ0Q2UVAxMnBjdk1mTUdUdU5jSjdYMkotS0pudXVlSGtXb0U0VEd2SVBMeW5TdWVXT04tYURqR0RDaW00M2dqaktxSzQwV1EwTnM2bWpCajZrME5WWUdCcnE5Mks2TngtT0k2dUlmOWFpVGZCc0xxX05NWWp3NFhzOV81TV9jWWRyb1dZZTYwX0QtbGlxN19rSUhHbzFCX0JIaW5jSnUtXzZaY2VoZnpEUWJCOHhxNURJek4yem5LYnhYdnFQYjNER3NPR3Z5bV8wWVBrU1lqcndNaGJvZ0RPNHNtSjVCVEJHbU9ObzJRbTRJVHdYY01MelR1QTZvcWtQTVdlSE9LOVBnbDRWdWJoMVRUaHM1Qlc0ZGZkSWc2NWxZNW9yVlJ4T2E1R2lRa19pWS03SnF1QkNMQnY4XzVTVndxdk9ud2Z4OWs3d0hiaDUyV0NhaExMTVNrWkZmMXIwVzFLMzRCYlltZG5seEp4a2JtcElId0otZkljTXNyZldKelo4RDBIODg1V3JlRkFVdU1uQWcyNy00WlM4TVVrdmJRbUpmOHJCdVNfTjc5SXRIT1pOVTZOcGpxX2d5VEQ0QU9VUF9KcXlOSGVVeGdaSW5JdUxUWFE3RWpzSm96VjRxTEJ4V3N1bHFxWjNUMlJibHM0N1VwOERaTGRjNTdCcUNwX0NMMUM3UG9nVDJFMWtPdmF6UFd3Xzh3V3BZMGJQWURwLTZqUWgwUWV5b0pCNmdGUzR0cVdZaTZYLWs5OXI3U3REc2IwOEZyUDR6VTAzYmJTN1dPS3REbWY2Rmx2d1J0eXNWNklES1ExaVdDcU53MzNYMEM4Z2hmV2czU2tMV3Q2UFVWdzBUN1RiNTVza3FMUUhLSmk1X1hIVjNPTUtWakFoa3Q4MFFWZFprQ2RYRG5mbzZ0Nm9OTDY1T1YyY3BaTW5wVUhtcnMwa1BFNkJUSDhiaTlzQ2JKM3ktT1gwaVB2bEVhaXdvdjlqcnFPR09NQlpWYTFVcU04cjhPWllaLVZMV0x3YVlRWjBteW1tZFVzWUJaaXRtYjM0eEVfdHhmZF95WWhWM3dISDlhX2NMR2E2cFFsOURJZkJCRE9fcmY1eWhpaVRHNElUUThXdml1MXhjeDRrWU84cHZ0Q01KRkNoRXpQZmJVTmloUWFaMURHM2J2aE8weEduYV9hQjQzWE9kQUEwT2hpVDZTcWJyektqdUg1bWJDck42Zk1OOVJ5SW9ocTZqZlJrYzByZGYwNWU5UWkzbXR5R3JQdW1MWU15YmFiWUtBbGlxN21hWXcwV1MzMEtsUi1IYUkxSFZhN2E0VTNxUE8xMGVybzJ1aE5qeXowX0hXT1BsbFZEdUZ6dkpibXFDTVE2RmRXS3doWEpLUDg5cjRxeEZvWjFlNkxXVnRfZWR6OU1NNnZUb21fU2NxSTlHU29hUlRrOWhsb3Y3M2wxYy1CVnN6S29oZGcxdXRBb2o3T0QwWE9Nb2NzYXJRSmFkbWpKTllkU200QzE4dHhSVS1lVFM1RWMzN1pvVHhmZmw0eVJ0eUE5endNQmU1cFZRZkt2STljaWhwd3lZYTdnU1pZV2ZTaExSaVNSSW52ellLbVZzSTcwOFBoTXdWY2ZXaHc5bUhJX2hTVGhsdUtFbjQ2eGxHcTZ2RmVyWHNQZnFQLXVFM3RCa0YwbkRxQnQ1Mm1uRDdQRVMtVktTVVQ1Rng5M1NkRWpMaktUenhXVmRERmpPa2I3RnpWemxQVnNycVJ2a0pmVWNNQzVEYXgwS0VoYzk2ZUxFc0R2dDBDbi1GeXotMEJlOHBjQ1pNVXo2aE03WW95aXRJS2RhSi1QVXZQRnd0dVh3c21GYlhEWVFzM3kyUll2SUxvakZpUzhQdmNrMnpkZlg1WTBoSENzWG9BSTFLS1ZhQnBFZ0VQZXd2Y1k5X0hSWFdXVzUyaDBYZ3A3UVBYYy1xTmpiSEhmNmYwOHpBMFJhNlkyd0ZqMXMyQ3FYTGh5VElOT0RVLW44X2FyZGxXc1cxWXQtME5XUlRQblRHZkxaZ2tlcGhncHRIMktiV3hMWUJLRi1SbWxWUDF2WVRLdkJyMGswQkJEN29MaDN6WGJpNjZobnZHb19VT3RsbDhCWWhZYkRwUGx6eUhSalRBUlVWTjNIT3hLSzdGYS14cFJNNEsweUtoMEdNSGZPY1hGTlNEQW9PaGhkMUNyQ2ZBWHdqeVg2QUZCQ094TUdHNFM1eXhHVlZrVzVPalAtZ2pPdzM0eEphSExVOUNQY05BQloxMWh5WXdNQWg2TVhxdzVMbVBlRzVkSzBva2RBcm9PaG1CNWVMbk1hZS1Eak5fTURMTFpLd0RObnpWUHJhanB3MlB6eFVXQ290SHRoeDQ0SGZ0ZVhGSXB2WU1UVTlpWlFvMS1lOEpTZ3ZFWnlRTWl3blBybnVlREhTcWlCRVJkZElTNE8xQW1wcnN3WkdLZTFQZ2VMRnZFMWp6S1RoWlBsNEwyNmNFSWRILWZGY3Z0WDFNS3dxUE11STJONDZQOXM2UUJwRkxoSlN0UEI5aGxjMnFQbEtSSmx3YjZPaXRpV2ZVckxWYnUtelQ3RjZ2VjFuQUhCVy1yUVlsV0VzNmFKVjJ6RDMyWVFfdXNQampGNW0wdk9qVFhLS0ZlM1EtdHhBNmlpTFg0dzcwT3NqeEtJbWtSU0ozZ19lTVlDc2pwUWlnYnQxSWg5MGFiYmlVWVphYUNGck80ZW0xbXdiNTVxQVRkWHNLSEU4UGd3dVJYZ0V3aGN6LVdXRGRnVFpRTGkwQnk3N2ZuVVVaUHlSNmVqbXVFUkhqb0Jrd0d5aTh6ZkdFcDRyREQ0T29EZ0J4T01XTUFQN1cyS1Vfbk1tSVJYdkQ0Yl95dFpfTmoxbDM5VXlqWThJUXhGVHM1Z2tTYk1lbVZzRG1iSDI3cEgyWWZ6cG9jU2JBVS1PLVVrWC1waW5md0pyY1NWNXVCWXJqVDZtdzktMTRYU3pZNVg3WlNXcHNLMDVoM2lHZHVGemZCemF0Tmw4VUhSQ3dLMzVKUHMweG8zbXlLaDVzU215Q0FEQzBwTzhvMF9IcnY5LUUyZFkzdXRYTUZZUUo1Wkc2RFlNNXNZd0xwWTU5eHVYbjUxUWJ0TmY1dGt5alZjYWxiR2o5VjJoNTdTdXZaclBaTU01SFZsa2ZCOHNFSTRpMnhoTGVUV3V3Ri1kb0wxWThybW9vaXdnRzZ4eWxDMTNrWGsySkZDRTNKQW5Sa1VQVUl4SWZZVjdFVzBybl9Bcm1EUVJqdlRMN0NlWlhKOFV1aEJfU0JRUC1XMlc1YmJQZTFldjRwTjlvcnNsQTQtX25OeVBRUm5MMjBXUEZ2RTZwaFZNVFk5SVlMcmFJZlZONkg1cEkwazRteHMwUXpKT2NfUTFKXzdTWndaM0VUb3BJd01kT0FGZUt0bjRNYWh0S1h6TGo2ZnoyeXZYNU1uTlZ4MDRjT25LTTduelU2LTdtTlFzeWZXam54UnNwNzRkbGp2UlQyckxJZUs0R3dQMnZ6a2YzakZvbVNZRTVZelJJYzl4cW5oVVJiX1ROc1pkWU96QzJFbnZpMFhBT0xiTk5zbFJiSzVfYjVveDJNMlFMOWxJTk5HTDZRVVc4bjV2dmgwWUxnaTFoMTlFX2gxaTJ0TlhGay15RE1KcFJ5Ymo3cHo1M2dNWktZZFVRRXVvbG5WRWF4VUN3Z3h6LUx3bFRfRHVZX0lKVHktTzNGZ0o5LTVuSE50ZzROMU55X1dLWUlVR0xESmZZamdWYWF1VTRtZkpOVDh4VHA2YUhBNDZ4S1NSV2pXMmtYMzJyNU52TXc5UjhZQ0IzMlV2aUc4MFhuQ0hESkVkWEpsS3FTZTVpbGlMRzJFWGpkUW42bVRQc01SOVp2V2JBaE9wOVFQdE9OSy1WVVF0aktXaGhEMjVfdkM3VHpSN0s2V1dVeG9HUThvSlVEOTlva2RobVRPemdLNlI1YlZpanFhQ182NV91V2dTUzZCMV9kTHBUOXJSaUhXaXdKQXRudkRGeGktT3llaHFZNUs4TmhFcEkwbER0TmgyQTBxQUN4MEIzOVJWZ3VNblFaUnhmWmhUdHhXSUh4a09TTlk0WkRNZ0R3ZFFPZmwxdFJNeHFYbjVqV0NmMmlNLXNKMHJJMmtGMUVWdHNlYXdZSTk1M0oyUlJIdjJ2czIzUzdvbmlfZDNvTlB4MnJ2V0lWbHllSDdKYXAwYmtMbU1SalZLOWs1c1FEdXFTZ2NJakV6R2FvTzY2TjdsWU5xV0xtRGlGdE9MV3dCVjh5cERmZVJMTl9kdmszeE9SWGlYUFFCTkxnNlYwMzEtVF9KdVp2YmZhRlZFNXVKQjJQTlE4MFB5NUxfbHJ3ZzRCWVE3N2pfUnkxSjd5RkR2NXVoaEZIS2l0bXRuVVhpb0NNdHRTVlNENlNCZkhwUlN0SEtEYnBWX1UwQzVRSEdPOFlQRWNXRGtjWVlncGZXZGtzd1VtaVZmUXVYQlJBTV94V3JqTVNvaUNIWi1OUklqWlJRamIyNGwxTE04TnVOQnhTSjRGWDdIUjRmZzd3NUgwbDNDcVBQWFJ5aEZ4M0VqZ1pMT1VIbGVNcFNCWWFCLVJXQ21UcmhGM3dEM05vcTlXNkp4SVVTQTBrajR1SldlYVk5OHo3RmJBbDk0Q190ZkxJU2phcmpINnNUWmZFMnptcnRsMThvNmFacDdOYW9qNmt1SFBobmh5Rk1qbUZKSUNtQ21Sd0R0V1lRVHdvR0kzSmtadWpUMTMxN1hRbmF2S1R6dk82eDJ6SW0wSXdiZzVRNmdwRXVhOFJSVzIyQzJuZ2tPSTVWVVRsLUpFZS1iM1JoaEtlOFJkcUlwZmNPWnR1ZEJsZ1J6MzRmbTZoR3ZCdUIzRXhicWl4QzBvLS1kMXlSOUhXalM5QlVQMzBJOXZXXzhLMDRfS0N6ZW85c0VqcjVVanROSjdINTRtWG5BbWJHMVNXRHVZdGZLcEpuZFhkdmJlT1RuTUVjT28wRkNMLXhlRlBmRUZ4WWZoMzNmeUJSVWl2QzlBSmpNcTZ6NHV1RnRvZWVFdHU4b1RQZjM3UHFMZm5GTFRUUTZ0V2hVMnRCdzJtR0U3UE9kaDBsTzhnQVNDak0tSVFlYzctQjBTVHFCMUVvdi16b1RvNjhDcUhaeUpJWlJJOWxrYTIwUUQyNXk2WTRRUHFnQ2JBdWY5amRneWpVLWNLcjlOUFBtTUVrVjVoNURaU2hVNzNKV2VxNm1UTzczakhfTGNVT3paWFZ3ZzBCWWgyQVpyUS12em91V3V0Q2hBM2ZGSUFWN0NYZl8xcmR6ajRhUWxZUU5zb3ZyT2ZTT3NzT1cxdmdFLXAxY1k5Sk5qWE1UZXNNYnhXYmFycXU5aHFxX2ZNSXVRV2dNYUVqTG5Ca1NhSV9HYWRFM0g5VXU1Q1p1LVh1OEdWOURmQnowUi1LMk1ET0hPTjdhNUhnNk1IZllkLXhKWnJwS0xwWFpqd1BMeUY3OWYySzd2Wk9pRHJMNWJWcXlXSi1SR1RmVUI1ZU1XWWlwQ2I1NE5BOGlMZGxsLWxGTTBrT1BzaENYa1hvdHlRdGpjNU5MWmtCUl9QbC1kSTZwVnNNNE9KU1d1TlRveEZKN2RxQzdZNnRjNGk2Mm5ZU1JsLUNhYl9XdU1IanRUcVZ6cXNrMkpnYXZXbXhSV1JDN0YwR2VqaF9ucXMtdUxDNHhKSkI1dHhsTEktQ2d4bVBWZDlRdmNiVTlUdnd1LU9jNkRlWmg5LVE2a0szd25DZkYwQlk2cHdSMzRPeTBXLXprekp2ZXJTc1VoZGsyQnliUElBenRqeWNmN0YwYkNNMzB6NzlNWE42ZVFtZFEzejN2SnRqelNaUnlOTndENXphNG5nUE5vaHV2SURweHhlZ3dGQ01MTTJ2ZGdCMTNkMGRHcmRWZXFOYmhCS21uVG90b3RvMldwT19pbHg5X3hvY1dxei1LaGNOWFUwY0ladl9QSE1xYTY4RjVBNy0xSzhyMkgtSF9kQmVUaHhBSVhFU2pZRDFjTEZ5Slg2M2oyNzJDRXptSGpuTUU5OVBVN0pZWnl2RlR6S0thUzNTcnpIaHZwbWxWRGJ2TmIzMHRQU2tkN3FBVnpBX2syYmxMSjE0R3pHTWllOXkwRWVCaGlCZV9IM2tGLVFTUGhBQWthamVvb1RHcDZPdUttWnlUazRyTW9MX1FhbzU3am1Yd0pPemdkbUVkUFpfZzBOZFZ4WHZjMGVKUUpZQzRKOEdLOUZPQXRTX2hkT29RQVY0U0lSS3M1YXZiUkVuS21pQjVKZWl0aVR1bXpDMEFHQlhUUVJwRXpDX0MtRklvTGdZQkZjY25sVllDU04tai1KV2h5NjNzazJVSmZCbnF6bzQ0MktnSzJJUGJ3Tm1tOTRoRVFzMmo3aW1zNUhNOUw0SXYxQUJGVmQxWjdRaE9SbjJKTjRJanpNTUFKU1R5RHp6X1dubGNPSjhCNkdZWHcwQXZfdDE4SWJSWlpEVDg1djU4NnEzTFdRMmhMSGdGSVAxaVV5X01KQjFCczNfMHMtYm5MUkVSQ3ZnY1ctSjVQRVZMZXlVNXZrWmlNcVZoQ3JJclhIRExZMU5uMEl3bzVrOFBOWE9DbFNHeTY0ZGJBM1VQNExKWG5YdWdnYTdoNEI0QVZzelpzR01zaGNtdEIwbmt5MjktZG9lTkZLUHJ1X09IUlhnckJYYTZVb1RvdmE4c2NfQXhuWmc0Tk1maVhfdllGUUdhMHplNGY1VW5od3daM0FQZXpUZGd6LWhva0dMSVFBRmc0Uk5aQ0dKbVU3VUhyekh5U1ZCaC1JaVMyRldkYldId0h5b3R0b3FwWF9PWHlWUGNlY0FKbzAxTk9CVWFscjV3aVJfb1lHV2hFemdaZmJaUFNWUUlycGROMnZmbEhoODVNY3VRSXVra2tUMXpsNDdjcHdHWEwxbnBuY0EwdEhqRmV2NG5nbXFVM0ZaQVNSb1RiUGV3MnJHVHRtbjBpRDBOVHZkM20tcEJ2VnVEa1MtLXMzMi1NNFQ0eUQzNzBEbFV5bEQ4LWtQN0Rqd2F4N3NyWmZZVnNYSk9ScHdQSVUwb1p0Vzk1MlJOcnhTaW5yM1ZWVk4tV1RKNFpFSEtLR05PbGpZZzZkeXB4dy1PaHNSRUZQLU1lYkVJZGVqQWExREVBWFpnbjVMRHgwUjlfY2ZzMDNWZGdNQmV5bG5rYVZCMlJvN3hQUVhnNkc3ZlBtcUsycUxJbjZCQW1XZDQwblc5Y0JLQV9uQnJ6aWFuZHoyUE5lTjV2X2Q0M1p2eFhVUk5wNXR0SG1iY3NPNUx6QUxYNndZaVJIWmI4bjd0UHo4bHExQl9FN0lGbXl3NHFxUk1kaW1rcXRDV1FzODNHRnFjekFGanRzUW5VLXpzbUJJdFdjWUU1WElMcmNhdjByRXY4SVFKeGkwWE51blVWMi1DZVpTR0RFZVdTVlIydnN2Z3hOakh1b1lUZl8xdXBmNnlqUWtvSWE1NjV2WTRjRzcya0ZjWlh6Vlg0ejlxdVJpWVdMaTRzcGxobG14N2ltUmN4YlU5TWRjTWtfeERTaTdVMGZKTWJLcXQ1dk5GemZpbkF0ZkF4c1B0ZzRwdW9yMTZ1emRtakV5ZVJscDFWV3lZRzZPUUQ0ZWxjUEVfRVVYc0t4VENlX1FIZWdZNUJtNFc0QndkVEJnR3plUnptZ2M4dFQ5LTJQWVAtcnFJT1NwR0k3NkVrU3hwMHNMamRJQ25lQlVNU2t2UEdCTGxJMU9qT1RGQmFBQ0VKbzlnR2ppZDcybERFUzh5UUJvQ205Q0dLSF84NWFJT0ZQVENHSGVib1dEZl9TUnQyblZsY243NzNIbkFITkVJM3pzZ0ZQRXkxelE2Z0xXTVlwQ29ZY19XVmNVZUt1T3NILUMzc09GX0NfVmZFLUsxbmhyR3BBbDFKLkxmeWNoRUh4U1pVNEJNa3c3U3QwS2c"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '43147'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/ecc00e33f5684151bc5f9441bb5f33c4","kid":"https://vaultname.vault.azure.net/keys/cert-name/ecc00e33f5684151bc5f9441bb5f33c4","sid":"https://vaultname.vault.azure.net/secrets/cert-name/ecc00e33f5684151bc5f9441bb5f33c4","x5t":"2vs9p4v5OygfSXaDl52GnNjHMqY","cer":"MIIDWjCCAkKgAwIBAgIQYOOVzyRsRM2eW70s21uVBzANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0OTQ3WhcNMjExMjA2MjM1OTQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCyS0+ZYIO0cGfzosQv3tx1uk7M2Zo8SJRsGNCZGFitaB9d6LlMGXLb2EC0JeeCibnvHQYtDeMC/i496iWYdcHvzOdgLzbRbrg+IOSzkHoyu/9pSFWJKLFR3FF0Z6uqMfciqGjud7EpVywChiuFR+2BbuHpTNjjpHu6rdpDjjNDcgtf/1aYUy9WJf8s+S96dA6GJ0J62kMqUzwmfwdxkLumzX7w/Gy4OfTyUxiaY6dHRb93PKgiPFutcgKnV05aiYtMMpMtBDKipGJkBQ5YGss11Lxs+lNGQgrbmMYrgzvKDEzGuWRD19QOB0pdZipFeBmNGDeZlMTbhv4ogSNpUoR9AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFM6uo8gjCy1NdtZEX40Nh/36qMXqMB0GA1UdDgQWBBTOrqPIIwstTXbWRF+NDYf9+qjF6jANBgkqhkiG9w0BAQsFAAOCAQEAcS8R8XlFDGjFCqw0gCKlCPTIL0Cm5GvlfeZk2uDHYsSp5SD+byG4LIv2ZfHw9whpvO50wR4k0LsJ/yXWQBJaOTQva9791vw/kVQHNNM0KOh6rKN8tWfOqAL6hcXqiVbWWSqdljqswK3SDn0kgUeKreJZsKQs7sTwxyjlrxREp8VyucDhZKlU6B5enMnYmkEHEYsjmXIM6p9kXk3X9P+GBRk5QmlLcLTsE5yXc2DZyB0suXVsgUIAyfOHHdgFesImZSJJFXmvQS+tn98VTJhS1OSYiQzwUNO0HhEoMj2beUDRECSR06XRKr3kQnWh/Kc6n+jDVMi2JO+ggm/iEvBR5w==","attributes":{"enabled":true,"nbf":1575676187,"exp":1638835187,"created":1575676787,"updated":1575676787,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676779,"updated":1575676779}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2422']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/bb3c9a546a90407685aa34c7dc2af34f","kid":"https://vaultname.vault.azure.net/keys/cert-name/bb3c9a546a90407685aa34c7dc2af34f","sid":"https://vaultname.vault.azure.net/secrets/cert-name/bb3c9a546a90407685aa34c7dc2af34f","x5t":"-a8CWR7INdL8UUmsgI7oxSOW0jw","cer":"MIIDWjCCAkKgAwIBAgIQYALbXqN2SCuxIbPmBBt5tDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1NzUyWhcNMjIwMzA2MDAwNzUyWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCoSPio9RjxRWptEqhx3wPtpdCHOARzGwtI+hBtxQXcRQImiYzCRJcWdBX5JNmwqjE11ff0TqYpmmWqxpxozW4/3QCv+dSeBxidQYt9SJG5knNqsGhhwa9Da/9rPxb7lxVkfZWyET/LbDLNcSSk7hRDhqtjlW2wum0YW+JWcYxiAKrPaq4bZBUzhBruM+Xb4Usb1WPWgOwdxG0DoNEUAa7303PdulC85wKAi3YJkLe1lpgpz8tfqSvIL44GXeDzvLoiJ/e5gsXv74MPjrmlade3jlTBCtoYW1fSFy9anZiQiM01o0aibjDmCQUzJHghlG+RHBrqb41S1xS9CxJFzQJjAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFIhZBouOQjohmU6Z91vEdqn/FpWLMB0GA1UdDgQWBBSIWQaLjkI6IZlOmfdbxHap/xaVizANBgkqhkiG9w0BAQsFAAOCAQEAZn8ZXNyaStDGuewLYXhODKzl9W7p8WlHTiMp9srVv8e28UpJ33fUtxDYqrNPa2+nLk6ruitm2EogHSpwJEA2BvGL2jOF8aiBtpw/uz0Wms3P9Cw4UARC9L80jnQUjbDqs7wQG2ISuJCrk4CpvoF65t3fb5QkmlXD6WXnSWk8EUscP4Qxd+MaxEijftHjBEobO5vz7BJS5bTo7zm0qJ8qs1bT/3eZ063rFQEIlAufvHeQ7yqsX5VvAweN59eDYFLuwYypxusLfdfmWR48rbPPaV9Pt4KNsKP4FCr4uBZRCmBwehpR1nCRo4q5gUZL1jcRWbNKRSqJdrb4TliifiKF+g==","attributes":{"enabled":true,"nbf":1583452672,"exp":1646525272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2422'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
    -    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLlZKaklwLVBRVjNUQ25PUmF0SFZxZlpYMEFIMHY5MnNkU1g5YmxuNUdZNkZXamRwM2V4bksyUW81bndHS05keXBsYnlCSDc1c1hkUEgxeGdfTE0xRjVTQ3JPRkNiTzd6ajdGRDl1TUZTZ09vRmJ3dzk0aFdybkV6VEZVVjBuNXcwMmNkaDIzVDBTVEhsS08xeHpXOEpFN1BoQWUtNmVGTVNBeWQ5SmctdzBUdExfRy1JMGNlaFhBS1h6LUg4MmtUVm1uQkd4V1pLMG1GUHYxa0JkX2ZCcWFkdktpT3NPMzU1RVgyN2s1UU9yS2kzTWRvcWJIOUpUaWFYQ1ZHX3pIYkxWY3kwbElJRHJ1T1VzVUtqTWVZYU84d2RmRGwyV2tOUklUeEd1aWhPTFlMSHMzM2lJU002TVljVFJsTGYzVDJMRHFaZFczNWdxQU05RFNCNG1Ya1Bsdy4xSTUtaWNYcC1JbmE5aVVKZ3o2aHlRLkVmVmNDdlFxeFhXMEM4d3BhQzF5ZFFMc290bU0zTGcwaDFsX0EwRkJ0VGZYY0NIeUwtaEl0RVF6QzlpNVNneXZXc3lwQmFpOFJfaFJUT3JHNzFGdEFBU0tzdUx2SXFHbEs4RUtSZzU0NTQ0NVhzSDRCT2Ntdno3T1l5ZktwSXJLX01mNEx0WG43bzFmdGxfdUFEcnJXcjc3Nzk1SE42NDdHWlNVYUlFa0dvQUw4OHcycUR4TkhQbTQwRkh2ajBjY2JKUER1Y05ySFBicVJDVklFc2ZCU1lUdmVScXlYWEdydklUMUt5VmE1dk9XcVBYMFFqQXcxS2pGRk5MQVEtbFZISWpCYTI3UGpXTmZBTXJTU1h6VmtYcU5PM0JneGpjbEtKaFM4ekx4RGY4V1dPcExGaHhmTm9uZ21HM3RYcFNqZzFXV2l6dmxCWmJWZUpkU1Fua1NlRk1udUl6bDRoaUM5NmVCeWJTbkFwTDNqeG5nT0lqYW1sd21jSnhFSWtaY1lBUVZtY1hTXzB1RXlDQk9wWkVWY3hTM01xcUNzeDdLMlh3NUJFLWdENXdkdVdGamVja1I2ZmR6c0tERk9TQWdEand1OFpBNWpDTkRnYTRPOXd4dzY0d2hxTklUMlRTQ2ZZN2hWXzBWQVVfSmpQMFRPX2E2LTJHMVlYLS1meFZieS1GUllwTUlnaUVGbFdiZ1JNMkNSLUxwU2dsR01DcVNfSUtWdTh6dGR3MjVTeDZsRE1KVEd1MHFZQkNJV1NTS0VwdmFRYUk1QnNjVHpSVnpqem9kZEpRRGxia3oyUmZwUG03UkUzLTNRUEgwMGpReXM5T0E2RmhUTi0xb2VjbGZwVjhzZ1ZweklvM2VQMDNQZjZKN3lkcWQySTZHY2wzQi02V1JoOU5XMWlMTHIxNUtoZld4MW4yQzhTWFB3Vk1ZUloxRU1yOWtqQm9MOFNZcTNqaFg2RHl5ODRvS0hrTHpKYjVTLXhkXy04Z0dfZ3VBNXlrdGstNHlEemI3dDV2YVdYM2lJS09TOFFmbFhfYzZlX0o5aE5rWE50cXAxemQyQXpqaWdwMG11SVZ3YkhYeHp3aVFhNEdlMGR5dUtHSC0wSWQzUTJXazB2VGtqaEJadWxiYmMwSThDM0RiV2ItVTloR2RqX05qN1kwZUhNclY1cHRBZXoxaTdOWGNGc3FpRzdxZ25HSHNwd0tRaXA4SFU3aV9FdVFpSUtYTDNXc2pleU9tVGpDTS1WNVBlczJrZjhONnltSVU0UmxXUll1ZzlMMDRaOEFnd2V1T3I0dW1UQ0ZMRHFCQ2xHQ2VNWUpldWc0OVVSMG40OTQtQ1BEUmhZUFhJUUV5QU04MHNhTG1mcTdpeFVOVFNZX1RVa2ZfZ0xBUGdkRzAtbEQyaEtSbEpJOG03U29oLTdyTXQ5SHY5MkVGanExRWpSSUswNXBSSzRMX2twSGt0RXdNbzcxN1AtWmZkY3VlcUE2MHExa2cxMU5Sb01HbWR2SUlzUXp5Vm1yMXZhaHRGUG84eW5jSERmOUo5VkhyZmhQWWZkSWZuQ2RzSXJJbTFTeVBQOHFVOEZuOUxrVnRKX3MtbFFaWUpXczJPZmFIVVFWR3VlYmg2bExyTTgtbGVhRGZ1NG1rNW5UVUNGcTd0X2VNVzdlTFJuNllVWW5qRXBzR0s1UEZQYWdZeFZpVkZCdGZycWZjbnR5Uk1hTkFQbkYtaDRQZGJzU1J3eDVNMkdTRHFkam1DdDJuaG1QTGlsdldLSW1PTGZEcS1NQlBDamN5NlRUSEhpWlVFMUtycko2VEU4emlLZVMwOWlqVW1rcmVVMzA4YlpGRGwwVkh6MFNuWTB3ZjZ5eVYyX3poQUtXbUhpdUhMRnp0cHJjdzdvQWdvTGpTMXBmbzZ4aS10NFZjUzZmSTE3djdMQ1pyYnpRNkYtQVp2TzFLc1ptWkExTk42bm44NG1tdmNwRFJpWm92dFZlNi01bk5qOEs5WWw5eENiOHN2Wlp0WFh1ejRJeGdSZnVEQ1hpaGZRU3c4bXhDSHR3YVU1QXI2Qi1SSWpldFZ3bmtMUFB3Y0t0S2NERzQya1Zxakl2eHFyMFJ5eTNUbEh2S2UwRlVnYUR3X1JkRVBlZURNWHRPaS1WRVhMOXVJY1J0Z0hQMEdoa1AwTUFpYldqbDF4NzBxcm1Ld2MtUFRESEYzcFVwTXZweDN3cTBlY1pqdk5jSTJQV25IMWJhWkdFeG5hTTFrVjhRRXozVEoxWmY2SjJhaHBDTDFkRVVnS2xoTC1TbGVfVVpKN19NMUlKeDlkd0NaSDlVTlY2STBRN2Y1aXM5R2NjQmN5Rm1OWjdhMHNmZWJQOWR1Szd4bVlCeGxqUEpBUm53OWt1ckNDRC1qbjF3SHlHMEtBZXlaQS1HREZIQzZKam1WaVlicFVPNzZkeGkyc3F3WlNGOEs1dzhfMG5EVEgxWlU4WjIyQ3h4UV8xV1dkSDVjWUpnc2xucDFKOVVJalgzbzQtb2V5WUJFOWhTWXpxWkxIWlR3QlRIRU52S2NTZ3RaZkswU2dxSmJTYW9Cci1yTXZHNUU4RDg2THloUkZBSm1EREU0ZFNaU3lTNTdPeFVjMDNjb3RKX2tQVzYzOUx4eHk0d196UzhkWmRVT1BwV2g1OFZoWkpSdmcxdHBkaDBSMlRMMnV3ZVl2Z0oxMzFhUjh3OXBQbEJaS1BuOEhsYlZzcFdvaGFnYlhHY2xkRENNTU9TOXhxZ3BRc0FrZFNIR3dpc2lNVTUxcTNkZDdGbGZGTjVYYmJ5a3RTaHlKQ0FXLUZzc19BNjlpb1FlRk1BTzhzbFFfVi1nNE1TTTJJVWJ4MHZIX0t6c1BpdmJ6emhvUVA4YmNjVlRLeElFdldvYjZTUlpkN0pYZ0xwT2FkUkVnSnNPT2w5OFR1U2hRT2VvY2trMEFxejdmMjRmM3VWYzBpREZrUUNpWGNYRXBteFZtMldTZGJFMjBRdWR1c29BN3JCNW5ySC10dEkySjRCaExkRkJ1SlNQMi1WQnI2NDU4Z0drTUNZRHlJVGtWSUxKRk41cEtFMTNWc0ZRZndQZ2J0a3ZGeFltbzhWWFh5bkdCOFk2dEJOTE9IdkNBblhqVENZak1Ka1F6RDF2dVdSbGxqVjc5ZHpRQ3I2Z1RJV0FTQkd1cWZhMlh0TFkyYk0xSy1LbmpYcEtsaHJZbmJKenItRFlTa1FqSGVSN2VVVTZvdDhYVlV4ZzlFeUg2VUxFNktNaTdzbHFkWFBUTlVESm1IMVQtRzdsdTM0N3pIdzJKVlFsRGFDV1g0YjZEaVFpZzlnMS1sNF93OGdXZE9EYVhDQUttc1UtMWVqRHhvZHRjM2ZYYV9wMTd6WmpqcWRBand4dHkzTXR2ZlozRm9rNU5yWjVKSkJuUWUzVTFJMnZySTdpZkd2Tjl6Ql9Fc3FwRmU2U0YtMDAyR2dTVUU2eHZMZjJrOVI1WGxIZDVZTElZY01lNnliclFRSDJsV2FqNktaa3lERlJjUTFlczBuUGlQclJ1TXNTQ09zeGpsQTZSdURuWVlQZjRXVVBucmt0MVREVVRmeW5MZTlPLUJMUXd6SFNKelRUcnRVZU9vb0wzenE2WjRRbGVaUHU3VjlRczNXTVJVcXVvS0NUM21sZEJRVk81bTZsblVfT3BReFpJNml2NkRSMzZzUUU1eWRFaGZHcnpLSGsyX243bnk5SjFHSDFkOER2bTFtTk5rWTc2X0JRdDFvSy1CRW9CLVJ3T3d1dHpUV3pvTmMxRjlHT0hzWlJMbVRBSGRHSXY2MFU4ckc3d01pNktUeEZYQ09EeVRCMXQyOHZoRXNFdWZZUXRaQnE2X0ZHQ05CYXdtcHp6N0RGNnlFMHBqajc4amdmWlBtTzVGVml3YlcyR2g1eG1jZVZvcXVWaDUzYTl6UktGMGJqV1R4Ri16dklPUzN4MmVWYV9xSURsU1ZfVjFaZ2Q3STdQdXZBdWlCY2dvSk5FS2RzMTBQdU1UQ1pEY0puNGRRa0VWd0tGTjh5d1dFYmJHSnpFNGxEbVFlOFBSakhWVUR1dHJXaE51SlV6OTdpMWxCbnNwdy1uWXFXd21sWkpYVVh0c0wyUGtBSnpWeG5NaVdqMzFvQU1PX0loQmZ6YnUxQlZEZUFOcExCMHdtY3Y3eVlQTk5fWGI3U2cwRzlMNTRlWndyV3ozWmlIdGtEbmJNTWxSVWJ2UmVydXRMVHJZbjZyZHo5QUVDc0VGcU9yeS02MjZmVmpJM3FqZEIwUUZWUlBTSDJUNTBJR3hJal9ZMWFJamJXOFoyR3VnNXJBa2M3OUJGRjVrd01jRzdxb3BDNkw5ZjRtOF9wM25adkFvd0NiVTJQM2ZTVDk4eE9wUE1nYzFZMHgtUUpDZnNpVEw5TXBzQURGaW16THZhdXhBRFI2ZUl1aFo1aGJMejVBM0FfX29yUFZYalVYMWpzVnVrSjN2NDJZSERxS0x2cmpyZ1lQOWVHMjJmMldIWkFibDlxT3h0RXhESHRDVkRBcVJWS3Jvb1BScTNnWFFEV0txS1ctQXdfVG5PVk1DZmtvTDZaZ29hRThpNXVFYVFNYnZsMTZnaWJpS3ExSE5VY2VKYVZsdTdqbERpZzVRSG13WVpvdERMb285WjRmZy1FMkJLN1JEMHVmZGJfdmxjQ1k4ZmlaUHpKNjJKZVFSTGFUczVMVnlESG10bkRUUTVNU3V2OVhQWVRlb0xKdW10Qll1NjlmZDlxUU1sd3BTRkZZNmhRT3BET0dtVGpSLUtIM1g3MGtxbThOSGUyNEVDV01lSVRLMGd3STZONVRfVGRLWjZVdmU2a1E3LUc4VUxpeU11TE5NTVNXTkI5cDMwaE1Xek1rNXV2RVNaNWt4WTdFTndBNG9HdUpiaGJYNElyVG5JSENEMlVyRXpxOUR6NENfMmwtWGhXandxT0FFWVBUUHdrNElDWU5tckhhdVBBRlZMcWVSUXA3MzlKWWhfb3lyd3RTSlhlNTBLZDNySVFIdjI3M1k1a3MxMEJRMTAzM0txNlFmNVF5YnFPVUQ5MHJSb2ViVFk5OS12Z3p3NlFBTmJYWmhPNXluVVdCMlRhNEZlZHl1dWg3VVkyMDB3UUt5djl5dlpyeEVKOE42RlFSZjQtMzF0UXBPUy1VM0FLQ2hOUE1OSDN3dXhvVVNiQXlIN2hKWjVhZjhoaHVhTXlKMGRUaGtaVXRFQ0M1YUp6bXVxNG9Sd2VPSkdEWjV4X3EzOV9HLTNGTE1qY0JNaEdpTW92SE85bWdQVjJNODNlLXlPWEt2WkViNjNTUVBuZEY3UWZFNXJ5TElia19Ob3A3RHhPbV85VmNDNHhhazJPbHlkazVpYkQzd09GSXVzcWtXSmU4bGxMSldFcnQ4bEFxdVNua29XWEdfVTNDQmlWNE5hcVVwSkFtS0RjN0xZaE8zOUlFUTdDUFhnN0RUNWVtZUdxR2hFMzc3VnVrLWVjM2tqc0pZZjZ3RUI2YndMeEtDdGp5Z1pkVHRWLWo4NHZBTmMxdXBrRnlMOHRZTnlfbzRFU0FlaUJDNHFDUS11VkpiVEFtOVZpbHdVU2QyR0NhMThTakNCZkNLM3ljek1HbUZUTTdKZGVfZUliRnY4Wklndi15a3d1SEg3bUliSVNIbW9kWEViZ21EVnp4cHcwNU5OLWJwZ2c0bDlsMXFkaWh4LXJoNGFXM01hN2NHS2d5cWVQdHB0ZTItSWxGbFN0Q0d4NkR3dTl5Qm05QnJDVDIya2dwOXRiU29zT2Y4d01YVDNpZTY1SXhYSHFtQWNYSjNpQ2JKcnNZaVlybUpYYmwxZ0ljeGRJVDMzejF5T2ZwdS10YUdKbWhTV1BuN1JweTBIS0RWS0g0RWphZEs1WnNfMHhHemRDb05mVE1YaDlQa3otUlhCV3ZRYWVBM1lkRUs2YV9RR3d2ZnEtNlFTUFR6bW9CejFwLW1sbmN5Q1VVZThvV3U0UjBuSDEzM2k4NG0temllaXU3d3doVEtKeVBmTGhNR1ZtX2kzQy1NYVBnMl9CeUxrdHlTVG1YOEsyQ0k4UjVtMDg2dGJxaWNBYnd2b3ZTWk51dmhuOGJGano4dkVTdU9ZeHYzaEE2ZlhaQUNXYVlwajMyREt5MXNmdGRhallld1ZzUEU1SzU3S1l4NHJiaFEtZlA0ampoRlg5c0RSMFBzUWZzalowbFVwMEllNnZMTWtkLV85Q1VLd01qYTJUY2pnaWltRS1PZTBJS2g4YWdlNXNiSXd6TEZSN19Sa240ZXRXM29MUm8ya1pPQnNyeExkUDJtdlZUVVNPMENYZHVHYU0zcVNfcWdDZlA1aU9MNy1rYW1pcGw5bG5wd3phWE1hOTFkYUpTTlVXbWM0M3JnYW9wMDh1R2JsY0tIRU5fUXJ4SXMyaVcwMUJSdmJPYk4ybllVQlU4RDY5SEloZ29jVG41WmdZdTVLX1cyeEJjRUg3TmtBVkNwRmEySXhlekJmSU8zcnVDcGowZlhzMV9WNHAwa1RBMzNRRUxQVnhFUXZrSk9lekxmSDhpUGJuN0E0bFZXbnEyTTB2VERqREZ1MGhPSjBMVXF6UE9nZG5TZnhQVUpfbmZyOENacHlBOWRTOU5NdTF1MVpRVHMyN0xmRldXWl85TTRjZmFyMzN0c2hGNmxNYXhOY0FLYUZBWlZVNmhWa2N0QjlaZHo4VU0yU01GeXVveHhud3NVVHE0U0FLWEpYNDI4RHdCT1BYUEJxbEozUGI5V25jWVBndzVoMEFveXdQY3BGamZvQ0EyemFsVmM0cDlkV203eUF5Y1N3aWtualBIUFFsNjdubUo4bVU5Unp4WGlwaFhaeEJ5UlRIc3M4aEozX3lFWXNZQUtERU96clR2Y0RHMG03MjVfT29PWUMzd3lDVG80YkdlRzRRMjNnR1lfQWRGZ000ejlCQ0FsbVJZcnlldEpRcFBGQWxGVmtSOUVCQW5ILWVpRXdfdFZadnVMOHlXclZtQmYwamhKWVF4Z29NeU5XbmQ2YjFPUmZhWEZIZHVSRmRxZGFwOTJ1enYtUE1tb0tIT3JVaG5uckJLeHZ6cVFpSE1BQm9nazJ0bTRxS1dIMlZyd3dVbXNSTFRHNHRRRFV4LWV5b05jSzRrQ3dOc2IyRUJMWU5zOWd3aDh0bFozOGZpWTltUkhFVWVFeTQ4dWgycF9PUFA0d1VmQVJLZUNmVkdQNzk5NFRCemw1aTJrdlJHb1NwYVQtRVNJTTY5Mzc5ekpRT1ZsQUVNOGMyckNiWHhXZVpCSE1KM1dvU2pRaVVqUjIyNDZhRWF4UXhsVGxiSmh0ZExZTVdUSW1ENjF3eGZnNEVDcEFKeWRoTXB0VGdtdWxfVkMxRWVNVTRRb3pWUkFnN3ZrRjZENHBJcTVCYXkxRzlOUXA4d3lTdFBJcFpGdXFoekxBeUZIUGE1NHc0cktManp2bjlQN2ZHS0Q1TEc4cjhKSFhmZHZ6TExaeElCMFlYV2JVVmd6WDFlOUIwT0hMc2Y1bVl5X0hvMXc3dnBfYjJRcDkzanJOY3JqOERfQzZXU0pYSjlLVkczaFpWd1RrN3hoX1dKTnhBU0RqQ3FwQlNfX0dUUmVGNkVnbVNwTWF6b2l6SUlWOHRCb3pLRWliNUxhcHdCLXZjeGVEajRiZk9YZ3ZOQXE3aWFKRlh4anBubnA4YjM4OWFKb1RwbjhYYjYwNlprd0loVFFFSnJ2UFA5eDRSbk9tVHNrMGI1VVZnbGp3SWIxemVXSW5SakRNRDI0VTcxRDBhQ0Z4NHZGUS1xWWVNRjFnYmQteGU0NVdlcTBxSXhweTl3SUZ2NU5aM1lfTWZMSVNKQzg1bEZ2eEVRYzNJQ0hTS0s5NzF6STJ3V3lGb2FNNm42RVdTYjFfZVVXME1aQS1hb3Ntc2ROc2pYTmJLU2t0ZzA4QTRrRi1sX0lXVmc5R2k0ekxQYUFmcHdxaExMQVFoVFNYaUhpbklwWmFtV0tqd3Bjdnk3MktWZGFRNWhyQkIzUXUxS1VLay14enhkc3drV3hpRzFDeWZFS3pJSG1keEhDTTNsck1oQ3o3Y0Z1V0dRN09YaDdzMExHUW9aalJYQVhYY1pmSXBNeXNyY2JNaUhPaG9Ga2p6aGVSQnBINXR6UDFjWGxWX29SQi1ObmVYQ1dfTUNid3hCU0ZxWmFVM3lqZGctLURuZ1JaZy1MalMyaE5kQUxLUXlZeFZ1SXlHSE54eEFObkhhdDBET0NiOERvOGVwYm9PekxjTDNrRGQ2eEIyMFhxVkdDSzJINkZheWVzaTdSRENETURjV3UwaG9fc0J3NGNjSnU5NlRZRVRUSDE5SDhhSlFFY1NlWl9nTHh2ZUpnUHRCMFV1NFlYeXhUaXMyTUNJc2dxV1A4SVc4dXFBbHlYTERtTlJXS2xSSUlYOGo4aUNkUnQ1QWJWRzZpUFRKMVgycGFoamlGaTNOUS1NRUpkQXpTS3NQSnAzanV6c1M0OUJuUnhJNUMyRzVwR0lXWXlIWEdtYW16dFZDX0RleGU0a0xJbG53RTQzSnQ1OEtNTTlSSE9paFE5c1lmZFpBdTUxbVM3WDkwMEZ2RkZpcURDMERUeEwySzJxVGhUMTdaOTZWbzNxTWtZbVhJS3JSTHZOdzVWTzhnWGJ0RWktQnRSNEZYcXpQLURWR296WmEweG56bWdqdHZTYUFoWjJrS1l2QXRsc3JTYUlWbzNwWXdRMHJFM3hseHBBaUxrOUxfRlRoX0JTaUgwLUMtSE81VHlFM1l6eUd6b19jV1J2WU9kOWFPdGN6NnpIUDNZT1pvWE5SZkNlNUdEbTRtc1Vnbm9ybUpQdnQ4azk0S2FzSk5wVXFnZzN4eE84VXhabjdXaXdzblpUWFBobkFLblE4Q2VIWldIZjN1djVkX0dZdXQ1WEpHSHZ3M3k4bTFKYjZSek1ONmNTQVhaRnZZSTZWZnlMMmw2cWZIbkNPZHZFc2dRTnpsVGhpbV9iWHV3SXJVRlJKVEFab3E3elBxTk9tbU9zT2FsWDR0ODY0cjJhSjN6NXhIUzMxSmxRVXdFeHMyd0NOVklsX0lrRGlnWGhKb1JSenFWR0Q3akl0a2pXYllQMi1YcFZidmR3X0dQajhTcHJpdzF4c1B6OEQxamgyaHF0MG5ub0sxNlNyRGs2SWZEY0xIQ21fa0J6WVl1MF9LU3Vvb3ROQVZRQ0RhNkVtMm52N1UtVlZBWjBmSXZ4X1NaOXNMZEtoUmdhcEFJNVpOUlBXeUNwNGNBdGhoWUVuV0JYZUQwTk5uYURqZ1otS0d4MU1qN1VLOXdiLTJweWhOZ3BmcWNvUkNYR193SS1laXg5YUJSZVFuZkxVcVZvd1U1Rk9PSW5KWFloNjZ1QWtGX3V1OXk3MEpfRUJJTEhyWF9rQkR5bjN6M0ZDUlRfUW1yaGc2QlZIU3l4S3FaQWdISFk2NExFeEdtQkgtbkI0dXZZUTRUOW82Qk9kTTE5VGRDY2xxWFJSdUVmM19kVjhjN2VtblBYV25TTzhVYWdydE5TTld2TG5MNThwdFVvMExlY2Q5X1BuY3JoREZHWXJNcWNNRmtKUGdoY21pQjNCR1pRN3lhUTc5T3pxejZkZkdWVng3VGFZOEpRWG94OWwzNk1QZEZIbzVaT3pENkxYWkhVd1pwcFhYeHVob3RJUGNuLW40RHlGOUlodTJUdUxENVphNkM3cy1USUlkajhHRVBlelZmZ2dGY0EyY3J4Zlk3akQzWFRsaEtCOVhla25QR0RoQm5WR1JHRHJCOFB4MUxjQlBhd2h0Ulg3Y1pMRXJsRFFja045QWxvdFcxd1dyVmpndHl3a3J0X0h2Z0x3bG1SaGhEZlJOMkJJVWQtd2lwUjVaN2M5YlNuREZiTnpuTW5NLUJYTFZ6U3k2UEVNdnY1NklHMFRxUWw4a3N6YS1UNGxENHotXzlfMGwyYjlXcXVDVWpYd05fZUFhOURSeWliZEZmaDVLRU5YaG50bzZFNXNzWmItU0FjcXpJUG5zY3g5X0lxelUzTkMtdnhhc2pLN3BXZGFiOWdvM3dpaTQ3RnV1NTQzMXlHUUJjXzZhTENIQlBrWnZEaGpXekVCczZlR1hIVGkzRTd4dk9LV2NkWV9xUTEzaHpvWERvU0NRTEVfWkZEOXdKTHR0WlpFVlVORE1kZDdkUGtFX2xISzdLaktyUzc5RmE3TkxGZWxabUFmenBTUFNTSjA1YV80YzBWa2tQZ042Y0tHQkpiS19xMVU5bUxmRy1ELUx6ZFVTVkdfX3VySTJHS2t2UURXZWpLRDNCM3lxLTlBRjY2TUI4VjFUR1BGeUVDcHBsMnFlbXh0M2MtNllsTl9TZVdWMEFMZmNpV2hTSVJIVnFCY0FlbElwR256ZHZfeksyTUlkbnJTM1B3S1VlUzdBWWMtNGQ1NTRsSWM0VU5LdHVTVVlsLUJDYkRid0FGOFNEeVJrV0wtUl9QRnVSRU9lbDktb1JZdGhwTGg2b1JiWHFnMjJieWJPTzNjdzBRX0tCWmoxRUw3MGxuQzZtODJRczJvTDlSNmNNZTFZM09VVVJ0YWFVam1ndTZYcHNacXFVM1FNQUw4ZVlVOWpfZUF3Z19GU1BBZlhaRWlzd2ExTWxSZzRBUEcyOGZLMEkxS25TQkVPYjNKN0htc1FkeVBSRjg4NHhoZWJ4aEJBSW1KWmRLcll1b2ZMOVM5cTVCN1ZfdnRLZHZIbk1fRWd0RVNlSUhra0RnUTNsalh5ZkdIb1lJMlhZeF9ZVlZVYkJ2cXR1MWotYUpXU3RIVFVZaWVJd0xadndTaDk1OTR5LUFRYmpfUm9pZEp1VDBYZ0g1R25XU3MxeTgyX2pDczJfSUhUXzVpOUpqMXd2dGVCX3FyMjZNQ01iWkFYLUJWQTRLcVBOM0o3NHBYZUJ3Q0R5TkhtTVZzYV9Ja1hyUVlNS2ZJWlh4dXZSc0xTVEV5OG5lemhReThXNDNLdXlMdUJaMERLQlVmc0tZbW93UXNUYTlPZkwzb2JRalI5VzhNZlREY3NJZkN2eWJvdmhnOHZ2NmdVdFE1NkloSElVMVRwb2YtVHBLTkc0SlhWcTYzcGJuT1FmSUFmTnBDdWUtZC11YjFSOWFaM1Y5UDd4RXJPbkRObk91My0zM0NDRFcwYW1lbXc3RnVHbEpoMlVMVjdjYWxSQUpuS2JHSTYyMm9YeHpUeDdjdUhiS2RJUEF4Y3gzd2VLRlNscnBsRVg1dEpSZ0FZQ1NZem8zeWRVVFZrdWFlQ3RjQnhZTUwybS1rVXFiNGdVTkh2cVktTlBiU3dwV0xOcExrQWxHMjRHanlnR29zUWxmd25WbEVBM2ZYVXZ6VXNrZTBPTnZhMlR6eGxSek9tb195ZDFKeUJ4U29mRlcxbnQ4ajR0OTk3dXdtNE1yVThJLXgzWl96OGppbDFBZjBLMHVYN1ZWMXhVWXVIYmFUcnVtbVJreHVOcUtCUHlfazg3QUZ4R1lDdnFYUDNacFBNN045TzJZMHR2YTE5OW9jSHg0MDRfZDlCYUtuREVpVl9GSlJ1Q1F6cWh2RWhleF8wcFFzejdMdXJFdng2VVY2d3BTVHpocW0tRlBCWjM1Tm1saWZTV0JFejVHQ0IwQlB4cmtjTEkwa0s1b1g2eVpQWVlOcXpuamowOUR0VGwwU1cxR25wRUpzYTVhN05kck10M1h3YktvWVh3enIzTndZQlVFa1FfRjJjamhycVZ3Vllhdi12YWMzNjVKX0YzZ21uZktfUjNTUXNlbUp4T28yT3BaT3cwSUJSOXV6RklPcFNPZGVNalVsTGxNeEpsN3ZQT0N4WkFZU2VFSGdiUFZ5ZEZkSWVLTTVBTWY1OWszTUFfM3dwYnVzN3hyZ1BfWnVPWWtHdm1FVkhXMWlLS1NYSDN6Yk82OTlQMGFKWC1XVkxDeWMxWDFVVHBVWU5WYnBvUWk0RUhWMkZ3R0g1Q3pva25kUFRPc3V6ZXhBZDlfTzM5RW1CYk5ZMGR5RnZDWlpjT0pYTmxEM0dId0J3enRvOUdsT1BXMVNZNXlCaTYtcUJZLXliSUlzNkJKLTZUZXEzdElaZjZyUTBKdjJQR3ZvRmNCOTByVlhoT3hCOGZJZHFqUVV4ZTNxOHpNcEt1dXFLM2tXeUFNZHZrME5nWk5ZZWhuWjVfTlNNOXFfa2dqSjhJeGw4X3NGRnl3cVA1VFdvamN2SGlkSzRtNXJMZFQxR3hSMjdXVVpaZk14X1I5NGs0SUpucmlYVVNVR1pEMDYtcDZwZExjNlFzMVdpb1lCbGNoWElReG9kMXpZcHRUZ3hrLTNpRWNnMWdBMkhDejVYR1llaHVVUFZNcE9MWWI3N2tnNlFHMFVIVTd4djk4NUhiTTY2bFF3Z1dwZFk2dkNaOWlIRHdZNW1ybDZGWnJVOTF2a1BaQUFzQW9lRXY5bXIzRFlzRVFsUGdQcHdKaFJNXy12WU9ZNHU4cXBOX3NYSkpTR0EtZkNxSUxLWGgwVXJaN043eTJNenhyVjYxbzZDUjRZYlQ1NVZuY2ZWV2k3U2h4YVZfMURaYjRUTEdXSDd6dVJGZDZReG0wM1Vzc3VaZGFyZG9ZdVFNWGQtVndRb0ljNHdQVTluRkI5b2tjd2pMR0c3bl8yVXRKNnB0eFBxTTRWT2Z3UVZzUE4yX05jVkFRU090MFlQYS1NUk41QWVmb1ZoN3lBNkt2ektreHVwY0RyLXJ3S1dRYk81NzgzQTlfR0ZHc2xIS1g5R2ltdENoWmdiSDhZQlNXczFSRHJwYjdVeTNwLTVKQTFXcVZlNV9lUDJPWEFrT3VKZUxCZnMyeWpXMjY0ems0eHAyTmtpUGVycE95NURUYXZjdVFGZzIyaDRtSzN3RE1LYVQybXRLMkpHemo1ZGNteEpJbEMxMnRTTDg4LTdsblE3S29lRTJhSkUzNlpVVXhrT2Q2aGQ1LUhobkxxSmVQM1M1REtLYUpxVzJkWE44S2tpNXRsc2NfSVZmMFVHRUFXX2ZaRWpYNWIyZkxDR0ZwYUd5UmNneGZ6c003eGloSjBZdEk4TElSSzlhOU1LTWZVbWh3RmREOTRzcUZ6YzNYUHYxclNwclNwSzUxbTVaX09FdHRfZG10ZnBuTm1xSFFjTWJORnAta3hvYm1ZZHZGTWtzVXc2bjVWckk4b3c5NzZHVHFTcDlmNjAyNHluSnVIcDl0VzhqNzdENXFadGsyQU95am5lWm96OHA0Q3pyYzlLNXZiYlBzUHhRLXJwUEp1WVlDUmZlZDFGWXpjdFRHdXRqVlVEX1lLaWU3Qkc5b2NVb1hhQ3M2UGhsX3dueS1qUmJGbFpvSS1ZeTZZUExtc05GVzVSOHYzbzAxMldBU203Q1NoY1BnTW5ZSnhyN1UzWHdnNW5HeFNEQl9fR0VNSU9yNkdmSVlRdE1YdWxackpmM3g0Y29HNFEyTzRMU0hyREY4U3ZvLTBxWlhaQ3EyLXRuRWNDYUExM2hiZHo2UUlVVmk3QlNDU3JhRVFsTHVEb3NISk1WMHYwTy1JRlRXVjYweExYYy1xZFRHMU1rSklfUGY3dmVPUGVZNmpSa0Q5NWFPdjBSaC1iMF9SNTlLN0VGODV0SGlNblJmQTRkdjdYdFlnY2FSYW5WNXF0Ny1hZ2VuMUVwei1Rd2tyTkVxMXRyVG5zV3p4aTJxZThaWFlEQzNWRXJPLWI4QnRRX2ktT2VPd0tIS2lJWEhLbVFxeWNLWDc0MmlHOFlTOGE2Uk1STTlKd0J5c1JBVDhVa3R6MkRVY0ZaX2hMdHJWSjBSZWlNcVB5aHBIQjA4TXNSYXFTTDZWT19MM2FNVUh5LTZkZXFlc2xtWXFWcF9XcjRoVmwtSTZDTjhpSFFmMzJ3Q1pSbVZWaUFBYkg5N3V5dS1za09JZkRPQWxvR2FEZXA4ZXVXZzF3UDh3T3FvWDZKeVVlaWlpQ3FEY0M1N1hQWVJxOUEwNldiWFFIRXFXVkNIOVl6R2RTaG1fVDYwazV5VWhJbzVfekpiZm5tcmlZNGVhaFl5TDFIQkY5LUxsRGd1VF96WFF6T1duclEzdjF2R05pbUp0ZkpIbWVrVzBoTllRcGxmaTMxMF9KdTZCUnhYak5LcWpBNTRrVzQ2cFlVMTV2WlJ4SnJGaHVzQ1VGVTlpM2cwZHdsN3hIck9rSDFfNU5UTVFHS2RUbzFqam9ULVI4OG82bmhnWkV3cktRY3JmYjBxWE9tM2tvWEdwYlB5dkhxbGlURzJaM2d4dlllNlpxT1I1QVZLS1g4YXlidmpGbktxQV8tc1FrODN0WUl1aFBmbXBnMXNHaW1jek5YdWp5dnpmOWxjdjMzMEoyZHpxUVJDZU9JVGlQU0ROZnQtcmJubFhGSTlLVW1ycXhkeHpoS3MzUUZ2Nk9YNWo4YkxyRE9GckFlNy1QY3JpY2x4MXN4R1R1WVI3TnVHVnhPTUdTMVBsWkJJTW5PYS1hRV9RbFBEcHJ1dk5uYmJLQzFBMXlEdkFTNFh2bml3MmJ5eXY5enNJcDVsRFNMbTFrTkxOUURxd29PR3hLbGU2d1dXbU5ERU0xOXpQZVV4OHFLeVZYRGZ1dTNlcG9YSS1WY3J1SENBQjI0aTY4N1FORW5FN05TNEVpN0MtUnBvczZDdTBoaHZhU1k0NUJfbTJkQTlWTlRzSzR4Q2E3cTBSbTZ3Rm40YVVPQlN4MVRvUElfT1ZKYUU5bEVtbTJoTzAyaVlxUjdDZG9VMVdjMkc5d2s5WlhDQ1ZKMmsyWnU2TllQUXlBX3I2LUxWRDRaNHRFVGZlaHJ1ejU3RUFNdXZhb0RWZlhlUWdSLUFRSkFlWk14YnpidmtGUGctejNudjVHME1GUkdxSlM2QTcwQUFsQVNSY2xwNGc5XzJrZG9qSWdUVlhyYVJfZHJOb05kWjZyQmZ5NVFwd3ByMnR2UW10N2ZwNldhVGdPZ2RQdm5SOTgweG5IYm5CTEZWeG9HRVBrWnhnU1RHZjRrc0NIOGFDM0tpb21IT1BnekhoblBiU2p4MldHTXdmTk9EWE1nVFlLcE5Sa3VUQlM0OGVZYmxCbmRoTVZCUWlsSDh5Wk92ZVYyOExIZUZKRGt3dGdXaFlheTE0aDdfN0lnX0t2UmtGcy0wdFRFTWpGQ01LMnFwRjFTbmZGbG01R096M1VvUHFWNkphWWpZYzdGcUhvZWFFa2hFMzZ3QmxlSUFKcWFNeDBhS1lGU1pRQ1otQ09VSGR5SHJYTlJmaFlFdUxEN0NDaGlncEV1c0FiNldTZ213Y0Y1b28wSHl6X2pOTHJZRmFsQ2NpZHl0VkZjUlp5ZlNqalZzczVyS29VcmkyX3UxVVF6Vk1zaWcwU21JaEI0bVE1SmpSRVVJUkZRQXFTQm9YWGEwbzBfTmNCWU1jQURZM0ZqU3ZTZm5ERzlHTjNSWGN4R0NUSkw0NmU4eHdLOE9qcmxWRmRkSGx2R1BGb3VDQVNuZ1M3WE80MExIZjBwSnp5cXI4MThTZzBXcVBObFFMcWEtay1rYTBRUWxFMmx6a1NEcWtiRTJ4YnkzSUJaMVNXYUF2RTJacWloNGZraTRjR3FQdGVHM0dwVUUyN1ZONG5iejBpWllRUUtwLU1ocmJwRWNWVGJBTVhYLTc3ZFBKY3lMVzVLRTI4QmU4R2lsTVBZV0d0M1Zod3lDdVpYWFZ6SXN6TGx0d203aktqcnpBYVNWNmpjX3J5WTdiUndzcVNaTDZRa3B2cTZIR3Y0RkhhOEpUdHAtd3MyS0Jvem5TR3JRU216Z0p0ZFAxNTN0S1NyNnNZSWN3aEVNc1B0M253VU9UNXFZd25DcjlaX0JjdTZmVVR6WkY0eHJhd01DN2YzUzM0WDNRdVI4Q2FXZDRsZDMwdDBlbEpDV2VTZEZHbXBtQVNZN0Q2eVpteFptRF9zZFJGZWpPNll1OHNodFI4UGdBM3BCS0JjVkQwSkxDWElJVnk4TWVRUDNxQ2JvWWhEV1FQLTRFNHljd3ZyX1k4RTl2LWdmVlJXVUdtTGZscXZNSHRzWm9OOVlkM0c4ZnNCa3lnTWQ3ZWpOOGtLakhTeHlBVkg3Tmduc3JUWTZScTREVXNSTWRRN2JDYjV3SG1Hd29ieGpfeWM4dGhTWXA3RWo1aWRoTExlajRmblgwRVhPU28zOWRnV1pTOUp1clZaUVpDV29WUkZ2VXhPdFRadUpHVmhaWkhQSTNDNWV0QTIwLU00M0RjbE5KS1hnR2xubi16ZWtSdGRHOGdaX2NuVnB6NUxsWWkzZE8ya0k4c3NNQTJwM1JGcEo0MkxIcTJtTHRJTDdnVXFnamJ2NjB1NnJOVlBaLWFBRE0xelZIY014c2VsVF8ydXEtcmh1bTRySWFuYXhjU2RWbExOMnJMeXh3R0VMZWozV2JWTi1UblVtQVZjSmFUdkF0MWNKRUQ5LXdndmItcjJoSVN2MlRFWFZpdUNfekdNSGdxQ3UzWVRENi04dklFTDN0dDBMSjgtRV9FeHBPUGdiS1pLWmRzNVFZbzV4VnpFLWUyZFpzRXRtVXNHMXIxWWlqN2djbDNhMjRBR0s4elp3T2ZIaG5RSVVsTHp3aVdrSV9nVDU4RXBRQlQtNldIRTJZNjdUVUxxZDBncG5pYXV3YVlJV1dJM3hJNTJJTF9lYkdTeWYxRUp4c1FSZVQtSnItd1JZcW95dWxZZlJtTjlMdEpVYUVxSW9yb1VtYjhQemw3QjBYQWRJTU1XVjdBUl9Qel9LdHJhckRiMEo5eWtGZXdCQ01hZEh6WnFDbV9jcThZaEFEazJxZ0hyQlQ0WXBIM19fV2ZUTTBESVI4VEt4NWpGb3d2T0oyekpXMzFad2RYb0NQbkMweC1ISGd1MFdSYzNDRUhlNlM5SGZwaEtnb1NZV1lObkFTRFN1WTJ3ZmZtdHNlSGx3ZkRyQXVFWGxnNW9maUM0eGgwVGU2cDlENzY2bTZlMXhlNWRNQjg2a1QtX0dZY0plNEt0Rzc5OVBxVGJJd2RhZGhZb0piSFRaWFhKMVJNaEJab29SZEMwWEJGUWxRWGQ3WjdDZDhwRzRTUEdrTjAxcUp1SGVRNHFfTGFjMDdGWnFlQnkxVUVYTDRsNTdLbDJsM0NNTm5pdDMzUFNXUThmVWJVcHBMWFl0MzFreWhfZ25aRUZVQ2FxWk9MY0NtckhJd2trbk1JMVQyZkVuN0QwdUZ4RV9qZ3A3NGZWNU5KMDBzejgyc0lUT0VLejBqTWFoNGRfSm93cGxEN3BnUVdVN25rcnlEUXNlS1A0c2FGU2Q3Zml1MVI2SzNHdVhHdzI1Sy1TcWctLUZrTk5aQ3VuUUVHNS1CNVFER2J1Yk95aDRlSklHdUdyUmozX1RwekxzSDhKa1FDOU9vb1o3ZzdPeHY3Ul9FYTY4dk16RG55aGRDaHR2LUhNaFdZcnBTOGNYdVg1TW1jcG1UUUxMMTYycXpBS3FwR19adnpMUG5wRUt4ZlBpdkMwZFZUSXN0OG4yR3hFeVEwNTBTTDJsaVVDRUcwYk52eUFxU3ZSUGxXcm1VQmZsckYyY25TLVBNQWFaWk9iTTVBNDNsRzJrdVRaWWN2MmdhRkZ3WGU3WFp0Z2RVM3pQWkpBam9aYnpyNnVBUHBqdlA1UWtBS0xYQ043dENUSGlLR0VLQjNKTVRmdzdGUVlqTkV6TFZ6bWlIa0J3bnZaOFdpdmlOQTU0UlNHQmtFUEphM2hwX3NnZ215aVVtSXVsdjgxNThQMVh5TlJKdnpPR2wyamhTalFYSlJ3OGNaX2dSZUdnaUc0TXViTlR0SGx0aGc5ZldSb1VzNFk3eXZYYmV0S0hQVDJJbHB0VFBIV3dhTmxQVWJqX0pzUjlxSlBodk1PYTk0MHd4M0NpRzBSMDY3UmFQdFVYUkQ1VHhTZ3VDZUUyX2k0VmlROExHTzA1ODR1aFdlMWx3R0c4T3g1VW1PRmJHNmlPZXVicHhkR0hWbzY3ckYtNHJBUVlQYXhaTG1wUlQ5TVpQeTc1X3plTG80RzhMOG1HZFB1eDNoMXpjYkVXWC11Qk9Za0d1UG5WWGcxZzRWSGFOR1dCMHAtZU9yWHo4RG5HR3RuV1Q5c3ZQdGZ5R2xPdXVYYTJUUl9xcnlJMmN6Vks1dVMwUVNxanBtQXdtZk03N1JWbmJ4bVV4bDg4MmJab0hqWVVVUG8xTFkyVklkQU4xSjhLeVJMVUJfQ1pGS3JzUWRMNzRMYlpkOHd2WDlITTFWMS04Q3dkVkhudmxwWVdNbXZVYUxmVUIzT0FCX21GblJsb2pHT3ZDdE1acHJkNWl4czZNVjZrMlFOaHVLNHMzZTBrSDBwN0N2aE5YOFJDZkpydWFmOUlJWmExaWR5cDljTGszT0Z2cm9kREpORk01V0dsbmpjT3NTcmJCMzVsbnMxZDJuZzVRTHdhR2F6Yi1HWkZSM19qaUZ1a3YwZHhndTVUYkNLaC14NHpSOE9MSkkyNWdWUlRFbDJROWVnRC1zRVFXbTZRVTR2TkVDU1BySWQ0UUVxR1A4aUdFMlNueGZOX3NiT1JsSWJmTExHdVNPWFp6RVVTZnFDRUJDT1JTUHBJemRfNUNaLVJhcG8yTlVteVk1Y1JtZ1pYeTIwYnoyOWZtUzNHWkNwOThCeU1nNW1aOWFYbVp1UkozWUZzc29meVRXVlJ6VjNnSjRpWVp0Z2hZWFdYUlZoTEFUUG83dnhScWVXejRybXhkdzlKbm5TYzNnbWhFM01RZUo0X1FXWDlCMXpMTFpScGZkTFU3ZFVSaDE0RHlVRHhFYUllcl9vRVktclVNODlhSTM1WFV3MlU5Mzc0VTdQN1lLaS1NclgzY1p0R2x6MllVd01sZlVlR3JKZ3ItYnFrczVCRFE5QVpWLXlRNUpaNGl3ZHpYVGRoX1BEVmgzcWh5WEFqMlMzRlFITHhOUnRMc1VwSm9CSUw3ajJQVDN2OFNKd3hPakxHU1ZkaXg2Qjk5VGs3LW9vM0VQWE1uM1ZlYXBBNk9YdUFjQzhGMkRjanhWWUtlOVo0d3FlTlJSMW1iY2U4Rnhsb0NxLWtrNjhrcUpiWE8zOHRvSDJKWTIxam5hNW1CWHJud3JnanRyZDB6c3p6UEtOQnZsclFZNnkwM2dOS08zcElIdXAwclgwWFFEU2ktVnJ6a0tSYlFuT3N4SVR2R2I0VjhTWHZ0N2c0M2xJV242cnBwSWVydGZmQ010RnZJdVczOHBBejRfVUJiZGRCTW1LQjNkYzhYVUd0bGF1Ri05TGx3WnQyeVMzTlJMZGZCRkpKNm9RSWowNEZiWXJZdVE1dnpXWGZsdVphc05zWjBKWXF0Z0tuSjcwRmlDcWtRS3hseVNUWTJadDV2NVFCdEdoWlg3T1R4cXBfUGUtZUt1blUxX2tEd0diem10MmRiWkVQbzl5R2c1cEtRVWxHRXVlNGJSdWlnbnVWeXN0R0h0ZVlJRFgzWVBlOEpERVFzN3JMWTItSzk4RkZxWWwwUVgyZVJBd3dpTGhTdkNnU04yU1IzSFpZUVBWS2VuYlRoU2lRMmF5TDlzVVY5ak9VVkFrOHN6M3FfdWxyMTl1MGVNaWtrdUhQMlRwWFU5Yk43Z3lkNG1SOUtNdXJOdVBhQzNhaGFFNlVhUG43UmF2cWJZY3l3YTlONnptQV9GU3IzV1lzcXZYbTdTOTBQMl9EY0N3TXdFVGg3bm5oTXdfTkkyRl9kYkdlMVVoVDZodndvbHRheUNIVUdyUHM5X3FOR2pqZEhpNWdLSmRyN0V2V2EzWU5TV3Y1Qmd0QUUxZGdRcEFPWlVvcmtZUm16dW5JeUdub09hTlUwal8zeV9KZl9FSGNOTGNxQ2VSMUJnbVNYeVFKSTJFSXg1VVhjM00tM1hsSlhQeFlkTXRpTXcxbXhDNUpRX19SNXBsb29fclRHTXc4VURrWnFwQ3dwLUJFVVZlSzBpdk1wNkZTRGxNbVRWX01WaXR2TldvaTJCaFg5NEZfdERlSUthanVMQUxDcWxjdk1rXzU4TTdXUGdfLTZBcmR5MEhwbFJldWtMdDZUNXVzaUFCQkhGSm5VS19OUUlBcDljbEJnMy1GSXhPRWdOQk5xWUMtdmg3UlNESHlaVnB3NkhxTTRQeG5IZlBhZ1R4WFZHdVpwSml1bDFRVXpJMThnamRTMDRvVEVMMnNGQTlUaENNTTFabzhzYm1aX253cUJrZWp0QWNCMlFmVXcxVC03SWlqdDdoTzNWTUdnM09ERU01ZURnb05KWlEwS0ZSTUJfd0MzeEtZd0pCMGM3bjF4Tzk1UEFWQ0JPcmZQVndJak56NkVDQmtWaVF3VXZlUkpXcTFjUVFpMGZpc1d5T3dZTjhaUWtNbXN6MmF4Rmp3OHNFamtJS1ExWWlsam9iUlFBbUs2ZlBMd3NWWHpzOWdEVmFxOERLWjJ4Z1dZTzlFUi1sTjUyRnhIU1MySGxTNG1XT25mZ01iS2s3aGozb3VXdTVNTGYyZzFWa1AzRm9Da1dQTVlJWFVVSTRhOVJoN0E4SU55OURfeEphM0ozZjAxN3R3QnFCamJaeV8tQTJLUkMtazRRRTdhYmpEYmk4NHFFZklyazJybzZsRDRxRmFlZWN6dmwyYmN6Ul9mMFFjTG9XenpEWGNobEZZR094RFA5Q2EzMzZPNDN4R1MzS2pTbl9mQnZkR0gyZGh5TmtnMzFSTDlGZU1ZRGFMdi1sZDRBbU5MVmNtdy1jSTIyb2xIMmozNVdLX0VjOFdvZ1RXNnZRZDRiNnJFMjdNdS1wZ1o2MEJQbHlYSFlCUnhsRUthSWxudnZrWHdPNFltNEE4UmNRU2w1RzQxQVhuRzFCVWF1X2dZekN4amdmMXZiVlB4SDNzT1B5cEU1dlhjSTRadGUyd3hkRV9ZV25GX2l5OHhoRVJEbkZOZUlWUmlfMlB4MkFPQ3NYR2s5Zk41dFFpUGYzS2NCU3J5c1o5Q29NRWVPdi1jV2dDaGhxdVZ6N0F6UHdwUy1MRVowZjBfMFVHRGd0SlB3andnQTNDLVlCWWdWSHFtX2NWRWRwcWcwY1JCM1o4M1JpUlJWR0tfOVZPcV9PTzNLUzNiQjhfaFgwYVZ5OURFNldHLURmRmRDQ1hvaDA4R3RLZ2VqLUc5N1VRUk0wV0t3SnAzOF9VT0NLVkJNdVZEVGdTU0xfOW9kdFFJek5tcmhmOGRiMFVDWjlydzZfN3c3cWJzQ1k5Z09pUlJQNnhwSHRzX2FfeFpUWk5YNFBDamduS24yQlNNR0ViSE5iWFRpZFVRV0ZrSjdKMVZwRWpWdXZCOV8xX3pBdU5SdmM4T1UtM2xnUWhkMFUtYWlpTjJ2R1BUa3YtNHlCbVlvMlBWQW5XOXlRUUphVDJ4Y2I2dS1xVWdQLXZ4NVpSbnpCZWN4SF9Zb1g5aUk5aklBdGxubjZzenZiWkRUaWVOVFRQeU4zSkdEU2llb1pQRG1STzB1MkEzYzlSS0xnZjhLaVFjeVBmeXRpV0ZWd085cHEtWHNtWmVrbEd3UU5GTDlpMGpwdTdUbWFFWWQ3UDRTOGZzcnEyN1JyMHhwcG5ZZDI0RUtQeWhJZnlNaHVIWjVSbTEzS2RrRWZpWEtPcmxYZDkzVU9wVVRFa081ZlN4MkZvWDR0RFlHeEF3V0pRMlg2RkFsMldNWE1oV1diQllaVk9pa0x4NkRFWURuWFhKLVJyY0lVUzlRR1R4b2J4Rk5CQW1UQ0tVV2JMRW01bnlERFBSanprR3VnTkt0bU9KYUk4QldtTG1lV3lIcTNHVXR6czdBa0s4RHZyZHo4eGtQcWoyM0hPekhSZnVRN25xSDJxRnhNa1dzWmJFUWY4VmFMS1ZMVWxySzV5UEZUUWtyemJJUnlVdU9OdGtMREdFSFh5ZnRXU21lR0ZSZ3luRUpqWVBiOTRVbTVEbUVVWGYtWENENmpXdlFqcjl6a2FxSUNqclBuUzlVelU2aTFDWUd6bFBrd2dHTVlnNDZJc0xIS09NS3VydWMwbW41b0pKeWt2aWpiR1phbkd0UVJhaTlKOFBYYXJwOXc4OC1nZUVRcExQdGlfS1V0RlBrR0w2b2dOV0lmVGVlQ3ptWWRXQzl0YzNmelVqNmI3Z2tmeDkxTUdMR040RzlldkpUOGYtN1hoenVZOTZlOEpZaW1fUXo3b3Y2STJVaDFSRm1rVkczeUVLZERIVVlNdW9Samd3VnNIZWRaMElZeWo0VzFDejloc0VkOUFXaDJPOE8yXzk4WDhLWkxIUDZ0U2RHS0kwUXNXTnJZU0N6dWpva0kzRjYxT3BQNHN6cC11ZEQ1OXdBVnh1TUhyVmYtOHRLN1lfVTdqS2NDbTFfbkxxY0Y4R2RZWkVrVkZBdk45VG13bTJqdTUzMHI4dW1DaVJjRFFsMHRJWTR2VWo5RHRNRWxURm8tUVpEempnQW5lcmpZZS1SN092a0ZRTjZja2RRNjJNZzZPWEtaYlg0MURFRjd2TzNQOEVZbFdfVG1JVjV3bVVfZnF1eTNiNm05TENEbER0Mk1WQVNkRXF3ZTA0NndfaEpwTTBfZU1IcHhIeDROS2VnOHowNzBMaUxzSWpvNHV1US0tNkUzeDBrYW15YkRGNUtNUGdzUFVrbFB3OURKSDV6aWNwZ1NOMy04VndpZ2hHVnJKWVp4NmFFU25sRXBtTC1QT1hQOWNLbU9jNEtBYXo0aHFjTWhYNF83ZWExMzZNM0JWYjBWX2dJalF5RXRWdnl2dVlpam81U3VKcFhCb0RpYnJxRXRBODMySjVObVdDdllWemtfR19HN1U3TWtuX29QLVk4dGdqRmhsN2pKNXZqamtLTEZfZi1JWlFYNjduYzhCZkJPMVhzcmExdFZTMmI3emJOU1ZJQ1RONm1ndG5IdzB4aUpubV9PWXcwaldsSTdoYTEwdV96MTZSS0Frbjl6bmZTamlkUmhjSl9ZeFpmVjNPTVY2NDBmUllmbVQyM0t0OUk0WHVyRHhGOVlDWE5PQlV1clF0ZXhESmRtRW1jWmhyU1NxQnZ1dkxEbzhwWGZLY3MxVHpMUHh3cDhmLURjQWd0YTV4M0ZkNVAtTEFVb3NIa05fQ2R1alRLYXhEeFc3UW8tdGxLM3Z2QXZOdFA4WmVIUWZ4VElOb0FWRml5U0dhSnc0QTlPU2ttMlAwbElHUXlCSUpzVGFjcXRVbTh4V3Y5SUFRZDdSR2Q3UEZRelJZNEl2eU95bEp1NDcxZS1Pa3VXNGFSNTQzbUxmUlBkM005Mm1zVWkxUVpQbVFtdWJxc2drQWd1LXhyT25La1k0bV9wSGZUbklTMFJ0Nk51bmxjVTZBS3kwRDFrNGpnUDFGelQtcWpGMWhTMHBKRWtnbmVqQVU2NmlweHAyQjc2ck4tcGxmeDdJZjNtc0NjR20xZk83VFFPMnA1Mkk3UU5admhESjJfa05JV3l5VjduaGE0WkFDb3R0a21VUVRlYWN2VWhUeUlTNUYtYzhDT3pLWklacUtyZUdxMGtxM1VpZ1Vub3phdHRYT2ZRZFRfN0FzZ3ZlWTAtRGJVZkFNYU5sZDBBa3dXQ0NYZktYeHUxVmNTUVBXNXhyRmNRMUxyalEwaHJtVk9GZlRFRlNVZ3JYOThwTnlIa1I2YTBBX19nVHBGVDBDcFJSVFR6bmFNeWxpMXpMTWtvdkVXb1ZkaG5wamlOamJFQzlfbHFoX05Xc3lBM0JMbGhFaWdjaHl2VHpCMHdOZlhFN3pLMWZOY0pfWnd1ME1RUzNhemoxMm1qTTI1OHRYMDZoZVJNelQ0UUpiSG1XcF8zcWZ6eWRKVG11Z0dOVDFhQnNhQ2ZIUmhvaFN0RVRBcnpjSTYzM2lKX1BxLXJFRTZhanpXbV91bDEzRnlwQ0VGRWt2SHVONUx2a0l6V1BqbkdNVDY3bEVwOUZ0NkYtZU1zaDlVejZFVldtUXc1VFNQdHZFWmw2b3hRY2lqNk5ZT3BTc3lpYzFpbTY5VmtuUGhQZWp3Q2w3dm1zWUYyVTZuX25XeU1vZEtnb05jT2w1dUlRVjB4aDlfeVNncmhSSXROZGd0aXVaYnk2bjZjNXlyVC1BZW9TQTVfaDZuXzkxUkJiaHQxVkhHS21tVXIzYjZMRkZmdjN0d201R21tQmtUa1B3NUFOU0F6bGVCMHI2YU15VE1CbERFazJCeE1ieE84eE5vTTNwRzFTXzMxVWZUa3NZcTZodDJDaEUzZlpVSVFINjB5WjR5ZGlQQlhNSG1ndlNPS0VuMTFEMXdpanA0bnFxNzAyVGJkbkp1Snp6eklIbS1sVXNSNnktaVE4M0Vwd3RreHN6ckJZSmZOZHh1WUFSMkxCbWpkRU1aTHNfZ1FLeXV2YUxpNHNQMktianhWWUU5SzVjN2xiNXJlQ1dIUURiOUJ3cmRjTl9NU2llRVZXM0xqcG1BQ3hOV3YzSzlVNE1VendqZnJlTE9QRVdlWjJ2WmQyTXI5SGZ4ODVTRU9NaFRXcVdnMXM3SkdVRlFCTnZOS0tRWlc4X1ZveVJnYVNXM0VITXJmMGlxZWYyRXdjOHRSM2lvSl9SbHdncnBCcVdGTVNwcU5ONmZBdzJqbGEtdHYwdEJSZ0VRV1A2SHJIdVUtRlRzZWdGVnZza1oyRzAtTTQ2bllRc3Q2SVBvaDVqeUt6SUpnVGYxcWE3QWt5dzRrdm9pWXJDYUQzM0FWclBxZFpmN3V2Qzd2VTVRX1FYZnoyUG56by1ybnJ6Wll5SUlXQ05pdlF0NzNoZnpoOGtZaV9HOS0yLW9jX19IX2VuTE1lU2VFY2haWFhtODlIZ2ZjOWQ3b3FMOGF5TU5fRmRuVU02eHRGUU5VMFBGWWNxOXN4TTdKM3ZiSnBRX21YeDBBV1R5Wnl3Vk85ME5acmk3Rm1BSGdDUmhHcl83NmppN2xlZ0lFXzVuSnZPa3U5VkY2bzkwNG9CNnhiSTdUNUduaV92X204TVdNY2R6dG1YUkVnNUhlc19KTjVQWlpIWTV6MnI1RzhBOFJJMkR0MkRobDZ4eFlFVWl5VTljTkxsdzV5WERLNkdwbTZYaWtWWjBfR2FuWVBONjkxYURMNTBKd1BYLUpUS21reWk3a2lPMThxZjNNc3pfTlNaQ0NWM3JDR1dUOFRsSVlrZ2NxYUNBbmUwY1RvSFRpbmJBWXdnTWN6QlR4Ry1peWFKU1hxbS0wdFN4c29RVF9uQmZsR29idTRPYUJybmZwN3Y0NzdlOFVpZWRqYmZqakM0T043MDlaMTg3V1pybG1QVnF3WlE0UlpVeEVxOFFpRHNkNjRSUGprc0I3SnNHbUJQeTJrRU9sZTFSdVhCQXkzSENXMkNXVnlMOEtnczVuOU5udGozcXR0eGllWXJtNnByM3F1Y3pZOG9ZanUzRXVsOEpFd0g5bUhQWDBES0lpSmVGNVYzdkFrN2xSUDA3VTFyMG1nalVrUUFZMmpVWlg0cFc3ZlkzSDVZOGppbFhDMThjN3VhcVpxRzFCOWZDaDNLM2ZySWs3Umx0YjNzRmQ5aFJTVkFQLWxPeFc3Qi1RWUltTW5Wak01NjlJaHJ0Ym1zV1c4NzVzX0RzcWpZdkVKUXl3VHJaUDctbDNWR2JwbjZ5YTFRcTVMRUNwU1hUOUVIckl2TENPdjZQdnRWWHNTWnNrZHgtMWUzZG1ZOVJuSnFOcHJxQXFJXzJzRnJ6eXB1RmJ3dEp5Qm1uX0dfYkVvQ3RGdEhPeVd5YlBHMi1JRWQxZVpyY3hrTmZoUzJuZDBaaG0tYUF4RnUzOVVEc01MSDh3ZDcyajk3a3B0cmlzYmJlNG5ab2pWeWVCVUxfY2tNM3pIX3VtWTd6c0dTN042Ty1tS2tIQ0d0UEQ2R2RUb0FEZUxEaTZRUV9lRVVSUTZqTXJnN2l1QUtiRWdhTEZ0MFJ5YmRxUU0xeGgxM1AxekxHYlhIV3QtWGJ1VUFsT2xqcHVHZ2N4eFdsUDRsZ0tUNTdxdmVxc1dZN1AydzRnSVJnVmtTR1p4YWNsVnMycTZ3dlBsTlJoMmFLQWJvNng2R2MtSFZJX0lXYzlxUlo0eWlWQ2NEbXBfckRfTnU3ZmxSbGJMMVI1LTAyMllqNlVWOEtZemxLWkdPZkV4cUNoQ0lhbldtaGpXemJ1UFlTTGRoQ0VxazlBaHVQSkh2NEw1QlVEd1pfMWxZMlRKQnVvOEV4RUR4UmhuZlFsb0dQejRwT3c5V0Vzd1FkeVZPZXpzWnExTVc1ZE9zZmZhYXFwTkd6TjRIQkZrQmN6b2hCc2ZYYUJEUkYtcFl2dXdSQXBvS2dHNUJDZElTS0U2aEFOOHlzcGc1NHVENHdXQVlzU3VJeGlIRENWVzA3QzBTZ3Jyb1VLNGhmRXI4RkdiMThSZXpDRVdWdFVyajRzN3BfN25tWWk5NkthYVZNYkRIY1diM0tRaXVjSGhfWVI2UWY3aWhxVVp5SzkzZkpxZ2RKS1ZfY0Fnbk51WVpiazJaQ1hMdHFzM1k3UF9nMGFRaDZNMnRQUEs2Zk9WblUzSWI2Z1lvNGQta0hWZFJmZ0NlaEtwVGhERm5UTjhvczZjZ1lMVnRUaXZVajFWU2JpckdvYlphOHVBNzZTSmR6cHRyRG0yUFE1Ml9VRmw1SFNfU0syODNCdzFMendhT3FLcXJYTnlPYjdFUkV1d2RGM2RycHBxWC1zQUVXNi1BZDZtR2NTQmhRaGsxVkJuWjRLeERPZzRKYkZ1SkY3dE0wanlicTRUVHdNRXZKaGdPTFd6MS14YjYxbVJ6ZDhZWjJNY2oyVlpmY0ZZNF95Wi1IQmJuUXVWU1ZDb1Q1aFlWZkhmYmdtNDg2OExwQ05XV1ZOYzIyVDBXRWFsT1RFeXp6YkNxSllwQWZPVDhEV2c5OVVoQVY2N1FwMmk0ZTFOQlVVY3pHODJVc0thWGUzbUtoUVlGUGJCRGs4V214SktfQ1B3bzMteUc5bVVHOUFDMHd4ZU1LbHJ1eFJsaUhLOElsVmR1eDhqamFvcXNqTGpfQ256Q2prWlFMTWVlRGtiZHJhaW5LN0JTR09JaVR0SkNtS2dsejUzbUtISHVDRWszM010MjU5MHV2X2VHSzZHM3JKdTdUM19ZdDZDcE5IRnN4QVFORDlWLU02SUVMY0JKNDlXSS1RYk10TnZwNGNTUnoyNGR1bWxMaHhRTEphTHkxM2pycUppVmRlaHRxNFpoYTFKMDhKXzk2aklIUjJkRDhUaHdDbzRLckh6Uk00MVZZTlBMenpXdGRiQWJtQ0lKVWlmdFB1ajJ4UnhmMVU2QXdRMlhjYzRBTHIwUDlaWVJaMjVrQjA5TE9vMTRCSTE5QU9SQUJ3MGxlYTdVWTExR1N6anZNTkQ2SmR0bHhNLXZCWGxtUHlkWEJTS0NDZEp5Nnk0ZWxISHBWM0FRR3E1Z0Y0T0JJM0dyQkNLamVYVDBIaTVacHNMQjNFcFVsNF81ajBIZThVdDhfa0h0eVN2akwtUTBSQnZ0NnFOa1NycnFKUjVlSVVpNGxmMzliTVdZeUVOb0dBSFBEeVNEam5RZWZGM1NBOVdBYzEtbTJkWnJNVW81UzdfZGpfeWNZdEhiTWE5bElnQjZVUllMeVNmQXFJUUVLWXJGMGhwZzVMcWh3Y3lnaDYtSEhqcGxiMjdqQnJ5WUN1WE5pYTUtRnd4eHdwWExadnFJMXAzOTBzQUViQV9jVkJiR2M4M3dYOW5VQ0c4d3JGZ2xjeU1GSlNiaXc5TTgxc3gzekljSU1wcVNRbUdEeXQ2TGxvOE9lNldYR2MzR1lzV25SVHU2ejIyOFBwVG45WDNSemhUaGloMnVuT2k2REdIa3dvYzVwU0lObGhJemtFbldBMGl6S0NfN3ZtUG9zdVJ2Rjk0S28zSFBJenJIRHcwWVRzM05WQjBsUTVNMmpVSnpkWXI5TnFpRFYyZ2tDZ19sR0VPRWZkUWxUYjJDdUZsYUxiVDV3aEpHWXpVeGxRNTlZb3pKNlFWUVIzLWwwVnFjalpLdWI2cE5oNlREUDQxb2dyZ1o0WjR5SnAwOTZ4R0tWYVNNVXNtRlpDdF94MTZWUkszWXhvamh4YnlFdFJxcFd4dmRCRTFwZ2Z3aXNnOHN2NkR2THdBVDhrakxxbU83YUdJT05vc1c4OWRCUHJ3dlJqaWVSeWw0TzFCMk9sbi1WR2QxenVOR09kTVo4OV8tVHV3M3d3MTZ1dl9JUGNrS2VjdlcyejY1eXlDUjNKS25Fc191bl8zWS1vak54Q1pJSWRXSFJZaTYzdjZnRWY1VWR6N3RZVWZQQ25ZaXlhLW9fX1FmNVdoY0NIN3JmRlBzZENSNzZWTUd4aFlxZktWNlFrYjFwemRaTnhBeTE4dzlEcWlXYlgybVA4MFVDTUdYWmhqeGQ5ck96OE56TG0yWGMtY2JfNmx5VFR3UTZjZE95ZXMxNl9xNnFnaW5uc0x3ZTRvMmViY3lxbGFfTlhpWXlxUVlJd0wtM0JqZENlS28tOEN4Wm4wNDdvRDBva0xXWGxoWlRyYXN3ajRUWlVpUGt0ajlDN1ExZU5VTGNQT1BUdEg1aHFySGtKN0xib3pDVlZzM2VoaHhHX2VUNkVBM3RKd1NRZTgyUXI1WWNnOGZiU0ttMVZCLVh1aU9DLXQ1N0xKUWZzaFE3dEhORUc1Zy1FeTlKWWdTVU14S1MtVEI0S0dVTU5pV1VPS1psbmlCR1I3VFF6aDdGeW5HZVZWQ1JnS0dtR18wVEZiZF9ROXQ4UzlwY0dSbURKeEFiZ1dueDVXM3M0UzUyVTY2XzczbVBFcnNWclExQmhhVFBFbkc4V3VOaXZNcTE5ak9aeDl2R2h4ejViMXB1S0J6OTVwTk9PWmVGRjFxQmFZWU1ramlTc1JaVXM4TmRMUnBFN3JESmRLdGg1ZzJXamhMUGZ0dGVkVUU0UG0wYjdLQzhmQ05UbnY3NHNfNVdoLW9DaTNzeXh6Q2E3VlJEV1lzM3ptZllROFVyelgtR1NZdG1HZkF3MTlfZ0lQQ3k1SEMtaEpQWlZ6YmdWTExnOW1qb1ljZEZSQjZjZkFSRnVKbjVxNG1iSFVzSkhRWnFFdE9sUnZtM3F1WlNmV0xraDF0T05RcDdjbkQybUZnUGM0cmp3YmhkOHowa1ZBWFlQdlp2Z3VTWG14OUxEOGp0V3pWdUNQNEotck0tODFVWE9uWnZJWEtVa01WREhPYnhNWXJZb0Z5dHo0S1lMVTVGbjhWWl9IVTNVM1FSc1VzUUNHZURHeWx6V1J1aEdGSnBYQ3QxUS1rVFFXbjA3X1V0UUVDbjI0ZEw0cjVuckd6eHpvQ2dWaW03MVZOdmc3YVB1VG9UNGdXLXJ6R0FPd1FMUlExU2JuaU92dXc0bFlTMThUczZ5YWJHUERCa0RxOTh5LWg0Zmt2Tmp0UmxQMDgxdzJkVGhScHdOOENKcXA4MXB2Y1ZhN3NyX1JzUUZKOW1icmhGeEFnM1E4RzBNSVprcVMwOGJSNGVqNjZydGVFbk5GenVhV2NjUjJxMUE0U2xxZW1kNXhYdFNLRUdVVXZGOHhZdnMxX2RWQ3FxWnd4d1ZHTG9oM3pheWRuZjV1UDFDbVAwN1VLanktZXVDcDBocllwRmFaTDBwOWpRLU11Vmw0OF85RjQtSGw5Um9Denk3NHZhdk1RTjlxU0toSEJBODU3VUlSVDFuVG1ZdU5fa1V1MkFuTFdmUGlvUFgxc2ZpMVhxMExaMXk4ZlB3bDJ0RlprYWk3VEVfeVdhbXVlUmw4enB2cVpEcmRpeVc5YW51MTdtM2k1eTNFTWQ4UkJQbWxEcmlDbFh2ZXpNSkh2amt1aXhTbzc2ekZVTl82NHF4X2x4b0JFdk1DeWRaS0szRTlfUENXa01mQVQ4SF80cUFrbXZwaDYtM1l6THNPRDFEWlp1VUtXRmUxS0xjQ1pzSUhCQ0NfX2NHMk1RSlBpUmx4bUt5LU5RLXJQU2ZKZGpCeGhWb05mV000c2laSXc3OElPa1ZlNk1SSjV4OEhqNXhkMmhheUs2NXVEb2M1amRQdVE5eEtGM2Z6eWstX3A3eDJMVGw3Z0g0LXJ3MjJzY083VHJLSGFPTjN5bzFNMGNwUEVkazZZTzlnYm5uWDhvOXBvV0tTZEFEUlMwbElSSlVHWkc5LTZTVUxxYUhTYjhSWEpQVVBuaXh5ZVRlbGZ3dnIyV3FjRUo3cEVTb3VueFJkTVJzaThhMU1WUXN5SHlDUjhlMUVtV3l0Q1hIVVpKZk1xcHVCeHVkaTk2OHViTVZEcXRwM1pYLWtPaWZMdk9nSDBsSkwzb2Z4VzJuSm9aOEl1elpOb3UxSFhWMVR1cHE2d1lrMlhQWUxJclV2dVZRaVRHc1YwRXY1UGlTVW5YZGJGREhMaXBUQk12M3UybndYZE1tRUFHYVpmZXdLeHdGQ05kdGRYZXlLeWw0MTlxenlmS2txN2x6MEtvUUFRYndocGp5dzRtU0d6MmJXWDgtdUJEM2NBVWFtcWU1bWhLOEhpSFM3M1FYNkl3T0hpbE1FTHZfbm5ZUkk5RHM4djFlT1RKMnRjUHZxVjBHMUJ0MFFYZTREUzlDZjZFdVZqb0Z6WlVxaDg3M0tCNmlpRFAwSGcyTkdTeVVoZm15NjdrUUd3eHI0OGhpX2d0Y2RyYlJxLWM3dGwwVTlfYldVaGdpUTdrRHFOeUZkMjFaLWw0MFBOekxaOWxMM0ZxY2M4XzF4akpkMzNtOUVhVVl1MXN6ZmZScFhjdHFUWVMwYkNiTWhzbDVTbEY2Nl9QOTNwQV9qQk83cUZ2bEhpYUpCN2tpSUJuNFF4ZHJGZ2NpMEV6R2JfajlUX2hTUE9BaHkydVhyUnktU3U3NU13SU5sd2JsSDYzUWw1Z29KX0g3WWh6c0FITVgwNUQtcWR2N2phMEdmXzJRM041MFBiWHphcGlmT09LTXYtRU0tTjZuMjJfY0ctUlZaRWVRSENoaFBUaWU1ZmhoeVJGSkxwZGo4VUZua0ZBTl9JWWZ1XzhLNjFzRklySGlyMkZMd1VjZFlwQ2ZSMklkMWZGWWd3dW9wTFdNYTNMam45WWxLVnZickNUWTlEOVBmMFlvYkxaOTRKUEZwY3dvU0JHdHBwblpLT2l0cE9RdVU3dDB5ODlGODNwdkllTlBuT1dLblE2bTUtckVITFJ0VURBVHdxczJFZTFoc1J2Uk50SlNCMnN4TEdhVW4yVjhtRUdBZDZKOE1mNVNzV2xaMlVsNGpaVGFpZmdXZjJlRWgyOWg4cWwtOXVqV1JST2pveFF3eTU0UkM4ZFRRTkUwZUdaQzdQcFVrei1wOC1oZzllWTVVOEFfOEJHelJEQUV4NVdLYldnYjlJdDZCemRCcXFmQ0lERGJrQ2U0T1RudE5IMVZZNHlQQmRXVElEVzJkVzlya0x3ZjM4eS03U1Q2aUQ3dnRwVURwTVNZQ2pKbm1IYnVVTUtXYlJhODFvT2ZPNjFfaE9aUWdpTlhNci1BUGdvdjl4Q2hwZGp3SXBmcU85ZjdFTXptN24yakVqYTRpQ1VMaUc4enhQWDV4WHppVkp1Mks5RjZvODhHcFlzbHU3VjBEbzUwclk2ZlFOR1RjbThhZmtnWXMxMG9Hem5jYmYwYlhkXzZTeERKX0VsMktjWF9nZGpCYVBYd0lTQllWRGxUWjFNQlJ1c3JNQUY0RzBVekhTeVNac1pNS3VzZHJxSHRiRkVYMnlRS3BkX0FFUGR3cWhrUjl2YVJTWi12aEowUkN0ZnctbTVOTDcyRjF2MVQ4dFJFUEJiN1JPNjRubVRsd0pBMmQ1S3J5SEhEMjByNEkwWWRURDJoUW55LU9RZlRjekFYcG9icllOZzFLUEk5X2U5QnVXbDJ3eTNhYjNycmJWZ254b2x5SzBxaTUwWV9KcWd2VGlMVW50dDJib1lJNF9Ia0dyMmlzaWRvMVlNOUwtN2NkR1BldDZ6UzBQWGMxQkdLeER3NmVLV19NMUxwaTBUTGtDeHZTbmlXRTByRHNIRW1UVkR4eW92eVl5Q2kwSVVZa0VHc1ZuLUFwZ2s3SzF4M1NfdEpJek1OenBiUmo1elJLNWNueUlOZ0FmZ1UtM0tJYkh3RE1BZjY4Ulp0TGduRlFZWE9uUTNNTEphOGpRTk5ST1B5MF9NN2VNQlg5VjlCeFBLQlZuTVBmUjVyWS1zeVRNemRkZmJlZEx3UUN3VFVMc255ckFLRUl2RGZ3RExMUTB6MXVfaGVrN1YtMmFJcEl1T0gyMC1WWXVFclFXNllTREFNeEZKQ0FoaFVsdExUYllObGdDdDQtZC1kb2hPTmpOOUV0bEdjck85cGhnMHA5eFBZczMxOE1aWjBQYjFsZXFXVzRzQkFyQzBfVzlYcGNsVjBXSkdzVGxmTmdQS0xFTms5dlpzUjBaby10b1hfVUc4RzBhZThobllUbnB6eko4MHVpXzZWc0xIV1ZWUTd6eHdra0Y0ZmNNY183NnJKazU0ZHhJcXh2b3FtMEo3R1E0RTNkZjdvTjAxNUFJUkFtWU9NVGlWSDVQLWdPY0hKdlM5S1NDeUI0d0UyYlZlMHpqTnlxN2xIUFdHczBpa00wWVZ0Z0VkcTJqRFZQeS1zYkI2LWQ2Vjc4S3p1M210VVEtdlBrMFRVTHNqdzd6OTdCUWxxWUVQemRvcEZlY3U2cE5iQlVwR0EwWVc3bE1RRHRTZE13N2lFakNSSWRMcFBTZnNocXh6djA0amxnT3lkRlFtcnJDQ2ZZdkJUcE1kVjdfOVNjY1VwZWJuUmV4RmNBM1JKS3N5MHJMa1ozWlRKcUVpNEhHZlI5dXBLaXp0VUo5OUpBSERhVnlCM1E4WU56ZExjYzhaNFVyb3FMZTUwVWN0cW5iOTlXYkU3MVdDdl9MbzJfYVY3ejYyLW9YWFdqV0NTMzJlY0RYUlE4SW45V1Rpc0F1V2tHVmdsYlBTSWpYOVREbm5TMFJlTUk2YmJuem9WOEdUd2l5bDdSUkZuSWVFeXQyQWRBTjNQQ29XQlVXZENZVVlnOVB0eEI1cV9JTGZMZm5iYWU0UUlGOUszTlNjeGVQT0F4WWVGSFNTSmFSRWRNSFRreG5uaUc3WHRqT0VWOTMxZEFOSFR2NXN0anVxbjZUendyc1hlWG9fX2taSjY2TjhWck9lNmtMb2tjS1Vjam42Tmo2eEIxc05mOTQ4TTVEV3NneWppMmd0SzVEdU9UMUl6SlNJOGlGeTB5YzJYZXZLcVNhMWR4Qkt5cE9rVWNxZE5WY3ZUZE44N2JZWmpRUTYwY243OUVmQUh3N1VGemNxamw4MzFmY2IyYnM5dkxjcXhxS3F5VEduZE01TjQyTGMzM1JMSmRiOEhZbkFZZnJZbVJFRFpnVTFwMC1HTjI3ckZxajhTMk9nbHJWSExzTERobzZYUmNrRWdObzZBSEttaWxuRG1FejIyUjMxZlhIUlBzanVNTllyQmQ4X1dyZk13UkJWSzZXODBPUURtVERKdVNfV1JlcngwV0dKUG9FbXJveTlYaEhaaWFLTGxtT0J3SXM5Z2JocDR4b2F5YjlkQVRkTHljTFpVUmJWZldNcjdsTFR6VFRSaExYcWxQRS0xZ211YXZZZ1JaaGdGSUl0THZ3X09JLVlIN19IOEVBbHo5dGhqclZVMzdWeVdIUmlkejIyVTF3VlNSUndlbVVtdmpac1hlNWVTeHRlSF9fY1RTdW9lZVRVeTZwSTk4R3Y5a3MwWkg4V3h4NExiMTF3WkdDUXEtbGNvZHVyeFBHYlg2NFRaN0UtYmZodnUwUTc3RmZLck9NdzhCNWx4Y2M1UlhHUEhvdGlFVHVIdU44dVdWaEZPajMtTl9wT3hpem13c1FXMEkyUFE4RENOaXRMYU5rQ1g1NFpOQklPRlNiZWlvdHRVTndIMVVRcDRrNVAwQ0YzMkRwM1VoOS05Q2xkWXB6cEFnUndvSDF3ZVFTZjBKNldGWDA1VGlEdnNhMWRWTng1c3c4OWsyOFRLUHE2M2YxLVpqbVUyY2dHOGtqVTJhRTBJalFBVkZ2NW04YkN5Q2FzNWVkOVdwVDVBdW5BcUFJUXpqWVVrRXFMVENkUDlrdi1FN01LV2djcklmNzFxTE8zUDFETlhMMUhvcTY3SXhJWjdrUGJodm9sUFlPYnE5UEFkN1hPYXpIa1cxVDc4OHVJSXVDZUVSQ29CcjR3RV9yTjdSZ08zVHpXRDVET2ZHTGN0cHItYk5lR05LdXhkN3lIZWU3c2dveDI2MmxFZ1FIaTJzYXR1MUN5M05ZZjNfdzZLSzFfRkpOdm9fYjZOZmVyT3VnVDdMZ1VONmFDdmhyaFRWUWlZZnNDSWdfYnE2N094Rkx5blBDX29tOWlRN0V4V0dHb0ExUXV1eXJDMndWWmFTQjBwNEhKUFkwVUpsQVlqcDFFV3BNTldpeEdJNkFJdmZOcGppWFhVdWFrTm52MEFBdkZGNi1NUDh6YTI3MF9BTGRnNGFSY2lpLWQ4WktDUlgzSzFMNldRd3IwWnFvYy1EdENKSmYzZW5qczM5ZS10VlY2ZVNWamRqMGFWekMxRHQtQnljRzBDaG10VjhsNHRRNFowYUJGMGNoZV9pRDBkZFU0VzZ6aHRtUlF6SjFERUw0UHBjS3dWNG9wMFNCaXdRMlpxUzZrWEE4NXlYaEFKekRvaTQ2TjAwN0plN1pVZGNoUnctSzZoeFA5MWJsX2JfaHJjR1UtaVEtQXJJNndLMjdqbzgtNENhbnRjZjZCNDExbXRYejNfSFUzTW10MWRGUkc0QjRaa2liYnl6anZQRTVzWVRIN2R1M3lFMzZyNXd6NVBOYUxKMTRwN2lYenRnbmE5VXRsZlY0cXZsRFhzSmFMX0d5R1dacHhzcDFkeEpDcnBxWGtZWWZFSkhOU1ZaZ1B6QkV4ZC1vTDBxY04xZEU2dEVWOWk2UlhVQnZmVTdCRlQ5enR5bnZ3Ym1sNl9HVlV6VTdra3RxeDB6UTdsdUJNaGRKVUpFdnkzNHZUUUJUQk9Lb25UQkU5NEtYNEFUNV9McXFEb1RTY2NRVzJCZ2RZblR5TVhqWDlSa2tYU0g0QVhyMTJGUjFrVHJNVDlsWUJZb1oyQnZ0WFh4UjhTT01XQ3J6SjBWZ2RaWHM2LWJHcVFOaG1TbzRVeUVQc2l2X1RUWDZfYnZ0S2cyc19HUHI4ZUtXdzdmQWJtMnR2YlR1T3o1aHdsMWVnaWtpLTJoVlh2MTN0TGFhRTE2OTNUZnlfWjVxM3RxcTJlX0tQeURTWjQxSUd1TGY4UFNRMXFNRXk4c1dkY1pQUWpONk1fYTljRFdmc0hNeFk0d0pfNk5ob1lqRmxGLUFBUlJCLVZRYUg3emtvUUJ6a09rX09mQjd1cm80VnZYNnBVWjd0OGhhd1BWSy1JY0w3Zkl4YzA2clp4UXlRakRoR3BoY2UtOWpEQW5UVDdRVloyTnhmdXI1MTlFaTlDNEpXYnd6VEZVR2JTbEViOEtZQkpDTXlQWl8wajIzYXZ3TkFlcG80SUd5WTUzVHhENE8ydFNmUFhmRTBSRnA4UkVxdjExRzVXdnRCRWt4ZGhxMzVacmhsMHFDR0YyNWJyZU1uVXhGeVoyM0d3dFpicHlvMGhiR0RVOGIwckpyNG1ZNHVoX1FPazBoMWRvLThiNFE3aU5keVY1d09uVFJYc3MtYUdrWjRqQU80V0h2aThsNDF1YkJTYTdFWXZ6OFJQZkVpcks3MU5BLXhENUlWZ3hIU2F4d1JQUTEyZkpNRWFxQWlGQ3o0RTZaV1VPZ2xCNE5MRktVNW50Wkd6N0p1Ukd2bkpSMm5DYlhKQ0hiSGxaYzBtWkNCRWJpYTRuUlpOWkFmczA4T3d2WS1VeUxiZkZfV1dfbFBodVk4SzRFVzlUMzRlajFpMGZmT3E5THZ2dnF2SVJyX04yWUY2bU8xdlZHcWxsWUxFS2g2U1NtVDVSRkFBMHBIVVk2dVRGdW54TThfVWhPZTYySk56NFJUZEd4aUViOTBfa2VZMHpKRnkyTDBRcjBWNzl4SVFuWjRkV2wwdTFFOWdyaXlEWFhDcTFlSnI0MExPNHB3cEJSblFRSEpLY2NlTjdXOHZGMjV4ZDVkX2h3bHJfd1BvdmF3NTVndHFiOFhmV19VTjNmQ2JHdFYwR2ljS0F2V0sxWGFxOGlLTTFYSDFGZkM2ZndaeXhSeGN2OXhmcTRHM0w1NFM3M3lUNkhPaTh6ekw2LU9NLTFTOG9vLU9OMDBlR3VGNExqcmt1dTRmVjZYTE9wS1d0a0hBWTBnUkhwdUpGSUQ2ZklhRUJ5cERkVmpEQnZiSE9NbnpSRDRIRVNqRHdRWGtWOU5ldGU3bkIwank1dW8tQVhIc3VPc0VhMl8wb0R4X1dMWlF1WXJobFhscEJTNklNeGFDS1hKZ0xGX2podnRPczBVQnlnWlZaelRFaEl1aFBKcXlPQ2cxLXpLbmcyVXpNVTdfU2M2VC11ZEpIVEhXTGhXdW1OTXIwTGRwd2dDVTNtZmtVUDh6WkM3Mm5lWml6WWFWNXpqUnBmWHhNZUNLNDFGbmJ2V3hJd1pYLUNna3BNVzQ4NHc4YzgzYVlkSUl4a3Q4R1JqSHN1Z1pXRUNIZEFQOGdrZkNjWFd0dk9yN0tzQlFJVnc5MmN3cFEtS1h3ak12MjM2ZEhNQm44UkVmM0s0X2htS255bWhUMHpWa0liSWg5V1c1ZVMwUzQ5MkRQY29aYjFYR1JpbC1LRlF4b04xMlZ6aDRsTkFLUzBldTlOejBRa1ZRa0h2UnRoZ256cm1pT0N6NThNZWlaWjJOWUlwZjZac0dZcGVMd1BIM1dWNm9ZTGduUVVza0ZxVk51QkxsRVNIbk9nQ1V6TE5mMkxydlhDSWFYNmNfYzZyWXA1Q1diZzN0ZFlYUE8wZlNDN0t6bE9YRm4zNVJGMEJ0QzROem1EaEY5aWxkTVFMcnNCREVWZEk0MlYxbU8yTTFTN1FtcTkzQ28yZHFVZXhsY2hkOUZmNGIzOGowaUszcldHZDNFaHBTbWVJRmpJb285NXg3SXNrckVlVTRwVHNkN0ZuYjZvOVNYWEx4U29EdU1nNGZsSUtONldKTnFOUlpTTUZzQUtqb0JocUY0VEZPc2pUQXVVa3FiRDJERHplVDNFUlRVYmJtS1ViUDJlck1ES2gycFRjM3B4QmlabmJJNmFCUEQ4MjZLTWpVU0daTjNDclB6NEVtRDh2YTk3ajJ1MWMxYzNJc3Q1QldPSmhIRk82RER2NWkwRFI0ZVN3UVg4SkNGSl9vRUdpWndSZV9PV0pFMklOYnlGbF8wekxwVVNwVWRhWk13RS1EcHRENUVQMVR4Y0dPbXFaYXZTZExpUzg2ano3VkpoWXdXeWw2R1U0czVGRURzNWxaMnRRT0poaEhyTE90a1hmdG1HQ3hWUDJabWxNdllZcTJmYW1zX2JjWm83b0haOTh2OFZHRU5BaEUwTUsxYWdpUW85NExmR25zQTY0T0FMcnkwWmpTLUJuV09ldk9TY0F1Nk15dDhSQ2NQN3U5UkFYeDUtRExHNURWZEZraHQwdHlCQkhHY3VfcjJZWGhoOUN1NmgzR0RwZW94WTlzWUhJUEluVlFqdjE5TXd1cml3UEhzU2NvOXA4QTBybEpWVmpWcm1Uci1Rek5wOHA3bEtvd2RrSzRZSVozN1p5T01QcEljMnZXT2VJX1RRMmZaZDc1WS0weUMxSElGd09pNUV2bGptYURPeXFKX1NyNmwxLWJEdzctR2JHZzZEblFCLUEzS1ZUVk15MTEtUEpacmc3LUpteU1VUGZrb0RZcXV6T1hNZEF4LUtTVHBhYkM4bUN4NmpBQTZQdXVFZEVNX3NKMktJQjhwd2JNb0U5N04xUjdIYUJSNGNrYkg3SFNVMUVCMW5kdEJKXzRVc3JLYUFTajRnbGJyaE1sOUExQ0Q3bFkwc242a1RaUnVuNzAzV2VvQWwzNDB1VkxnaVFnbXJqVVp4ZXNHSmVYLXMyR2VPMXJka0Q4bkdfNmpWN3d4QW1sQk5uYkZaOHhuVHBYN09ldU5tMzQ0dHAwQkVuODVscF9rbHBORzlUWFJjU0RqRWJsMzBzOVVJeWFVMWZPbWNfemQ4Ym91WEFyUWU1TVhDRkVVdlNNb2xRcndFOUR6WUQta3h6VUFhaDV3ZmpPMzd1aUp5N0pQWDVoeEY4d3hhdlRsNVo5N2E5cjQzaUFkTnQ0TF9Na2R5Mi1xRS04Q05PX3J0R1k2U1RxdzlNWWJoeDJxMDllOGxDZ3E0MDhOdDFxUlI3ZWFaMzU0bDBCQUM5U0pZLWs1djZvZTVkcnp0M3oxOS0wTVhWQmFlQkI2MTBueWJNZVdiVmRSb0drbjloRTZjcGJGb1UzSS1OY3pweUxBSW1JbXk1UnI5Nl9YNVIybFR6aGMyQUx5cjVHTFVmX2I1Q3paUWxDSWxlWVprX3FQU2FjcGhmdjY0a2R3WkhBWTEtT1I3ZFY0cXBERVF6cVVKLTJzTUxGVkdfYUEwM3c3STlQRVh5b2x5VWdKLVNIYVJ2NUF4THV3YmdRaUZDVDlzOEZ6Q2hRNmRCT0FBRVdkakptVktyVVZiZXJ0ZnR0Yi1mbVk2Njh6WW56QVkyLURfajlXU0tKWWlFb0hNQTFoaV9xV3N2bUFrM19iVEdUNlNicUFMS1JweTdrQU1RRmJDZmVnNkVDZkxsZWxqblVueFRpVnotR09FQXppZzA1TGtZRjRFa2FhclRvYWFUMVFRSC1YaThVX3dEZEVJcFU5TlFqSEFreWlrYlo0elhGWXR0REZaS1pvSU90dnZ4WGllVWJEM1pZUFVzSGx5MXJsQzZMRmR2MGNIZ2JMY25RZDBXV2ZXR1k4RVBEQmdsTlVONGlEV2JXME5xYXl2UzZ0VUMxaGNUdnZvekdxTjZoVDJjWFVPZXBhUTJWLTJHQm0zNFRHRTdxYVRFYkl1Tm1sMElrNDBFR0xTeVJrMXhJX014N0lsOUhyOVRzbzI3clF2aVpDeXBKbXdHY1kwUlVLanhDM0l4bDZ1T0NYblhLSUVTWEs4WDdTc1JwUEIzd1FTUkl5V3NPTXI0RUs4SE1RbUdjbmZ6dFBQc05melNRSnZEYzV1N0VqMzh4MU5nZVFLbTZaNndNSDRMSGJjN3N1LVpqT29KTmpkV0pHdmRnM3hEYnhaQUN2SXAzb01sNFhvV1YyNnZSWlQ2QzQzSks2c1h2NXJqLVI4UnlzaU01T2pxVzAteklURmh0cjlZWUpYZWpIaDVPVFF6eUJ0MGtfdmVYYVo2T2FQbjBKZGNpcXpQcW9RT1pxZFFJc0dqN1NHRU9XaG8zZHlvUG04ZFhqTExIVHJnbVJ6dlBtSFFuYV9FTUNGUlVxZE5acURZWmM2RGNteWlfZlpCbHlLSVFyekRRTkV6SGc3RFVOcE1lVklGclNZSG5VZjloM1QwdGp6dE41S085ZXVEZ2U4NlpscU5waHVuNzh0TGxrWEppdEY2TFd6aE1GdE5OMFhaY0dsYU03ZEp3QUw0VEdvMklsNzlaV3p3Z2pWSVVJYnpHQkVQS0g2VmhLWnFKUUs3ZFNhLVJYZjNkT1ZhOFhCakVrOHBuVGZLQlFfY3h3T0Zwa19jZzJzZU1PUWZHWWRJOGtMRWZmWGExYWhVNGZpb2VKbV9aN3NPTEx0QkhydzR2SC00TldzcjdmNTJRbkQ0ZUxRMExJZEVWNHZGMnhrMmlHbW1BV2JsMFdUaENodVBHaTBoNHFsV1dmWWVVS3lLMjJ5M2FoN2JZeDExbzc3UDFRNWZ3M1IwbW9sb1NvQy03VFNwRkljUTdxcWk3ZzRFODN4Q1N0LWRoeUd5LVlreEhncVNtWDNzYkJocWI3dzdKc08xZHF6alo4YnJITFdnMmM1aXdvZ1h1ak94dzJWeHc3NHdzMmljaVNJZW9ZQ3g2QmpsLTB1a200SVZEOGM2cGJsY1dQLWl1Vk9MQ2lINXF4SDE2eU5lZVlYZkY2LXM2bnVWb19pTnpjeG9LNVR4Rm9HUXJEd0tpaHJaN3dRaVQ5WlZISW93dUg1SUZKTGRRM05yT2ZfNnR2NzdjUWsycmR2cDVScmw5Z1V3aWhtUGt1UWhjRkMzVEMxQTM4Zzd4Q0xCekplZk8yZW9xMHV5aXByV1JoWWdjZTRGVzhjejZ0bTdsaE5XYUtWQ1FnTTNHbEM4VjJnMHpvaGJFanFJR0w4Z3NmT0ZxV0VIbnU5bXE5RXZiRlhwWHgybnZ3QjFpRE1rSkRvQnFaQ0F3ZkNJMDBVX2x3Z29NQjhhWUVacEx0WWw0VDhCZmN4YWlsN1ozM3BxRkxRUFB3Qk15VXk3SnFYcVJNaVEzRnUtZU5QUjBDM3BYVkxQZnB3MksteFZLMVBfZTY5OVFJXzI0eDVDaVRMVEdUUTBCUmxEajdEZjVXT2lRZkFxNmNBQkg2dC1MZl90LXFGaHBnd0FwbUJCOUg3QmF5WjRCMFBocWVxMko5dUt2NVhLeGpCSF9JN3R4UDhfN3pSYlpMTk5iZ0JPdlhrUkZYQjlGbktOOEpqQ09YM0loTi1KdEtUMXNjY1F6cUo3aDM5MHJRWEhobURfb3Q4MGoyM2ltYjRBbDZ0R3hOV3JKdTdIMXMtejhpX1N2OGFsa204Wkw4V1FhR09rZHdtR01WZlpQVDZCdG9VTmotVlZua3FFRE1fZ21FekltZzNQby1nTFBqOTVVeFRfLW5FOEh1SDJ4RkExcVQ5bXp5OWk4blotQk1yS1VBOUlnU0VzSWt0ODZ5TFlFSzI5WWtpT0tmUXdueUxIOEVQdDRYYkswbTlnaVBHYndDZkp0STA2VWdnUW16NGI3UGxhVmhKM29fdWJ4N2RWNktLa0tlVW0ycXI2R2ttcHNSMzgydmFTcndINmxJX0xfSFpHOVQ4c1NJMDNiODZWSGlTV2hrb2t2Z2poS0wwY1ZPS0RYU2ppSlRYWVRBV1paM1BtWE5mWGs1QzNjU0d3SUxMOS04ZzVxU2FLZDB6RFMxNjMyWi1jQzJBbllrN0dFM1RMOEZ6ODIzbW52dEo3c2VIWndOVU1lRHFWYWFXbEhiS2xwRk1ndGZUQ1FtVU1DOFVMTDJkN1dJWXFha2tNY05JUnR3SUE3YmdpaTVMTmpRSXp1b0wxLXUwXzhfSHNfbXJmQVlQaEVQTW5xUjlnRXFia1FZMlVmWFE5ckthZ0VjUm5NR2NVWWZmTWZsTFl4T2RWTzZ3VklSdkxMZU1rZ0NQdFpaZ2g1TEZWY2xDbVI5dVVUU01nYUFnT2xJV2E0RzZqbThmc2tuRmhrempWQnQ5R01yNGxrbmh4X2phV3FHVUNaMWFtbmdWU0hXNldPWHh2LTlvVVBrLV9JYWl0SWhsNlczZTNSbHg4QnViaFdjd1Bkdk5Zek1YbFROajktNXNrdXV6Rzc5TktsdHROY1dYWGUwOXhwcU5OZl9fNy1EM19wcTVNY0RRdGZoOXpZZnVZOEVVZHIxSm1QQlJzY0ZsN2cxdWdtSW13aURTd2R0Z2dIWldNYl9tbDRrcjNmNHhHY3FnNnRBdzV3TjBWLWN6V1BrRmQyRXdxaVFNR2RjN28tSnNQaUM2elFLVEVEaVRRV3BSWUdWSDBITkF0cGY5UXF1UmR3b05WbC1vRGgzcDJFUFFBM0VRMGlBU0ZGMDVmNGVPaHhRSXZlQ1NUaWpod1kzUzM3ekRDLTRkUE1WaGkzRXV5cUpXU1Nna0hwcThELUJjVXRfYjBQbGVmSnplRkM2T195ZXBoTGd0aU9Ta0NsMU53elpubi1GYUdBU0xXaEFzTmZ3SmcwMklHRWEyanRsbmdkMGd2V2JEWGZMTXVQUzRlY3lBbUhBV2tUeFhUY0RZUktYT29LMkp3SHFzTnZWVnBhM3ZZaC1pY0dRWUNzMkhPTGJoeXRybG5SUUFKZTB6M21oLUlIMHFQakRoVXhhNjl2dDdfRkJEVHdoS0JIb19MSU5ULUNFVzBCbms3RlFPV28xdU5GNVBxUVBoWmc3RGRXbHMwN1FZMjRvNDlXQUtjXzNMX0RKUDZOVXkwTy1oZ1E0V0hkXzdYYlJwUTV2bTVpbndrNkNKU1hOVi1NZ2lvUVZZc2VCLWgyWlpzNWhZR25kS3ZNNmtQTUhZTnJLaUpmWXozSWxpMDMteEN2YmZIZkt2ejZOUDN5R1pKX3F2dFZ5OExYRElxWHNpckl3TE9UM3NOTVdTcnNpR1JZMVhpSzYyRS1kaUEtOEJfYTJPejVTZy03WjMxX2tRMXdwTTJFeFp6dHI2enJOX1ktbEV2ZUtLRTRUX0VoLjI0RDRlU1d4Q21NUWMwTkdDVTEtS1E"}'
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['43148']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLkhWWmozSVQ2WFBpUmVNYzNfRC1lWlZEckd3OG82YVFaZjZvMk1kRWo5eXJHQ1VnMEFRcmd1bHVTZl9IUjduUE5UbUREOC1weXZoRVhVQjU0Q3pqY0o3c3MyWGpvUGRGSXAtTHc3dkFJVlBhVFhNMFlmNXRldlRfczhkVUh2SXg0ZU5HWHRNS05jVkV3bm5UMk5JTG9qY09fVFQxbTNzYjlIZGtHRU14LUlNZXRQREhSLVpOcGVKX1Nzb21fNHBZQm83MjJpS0pVajhHSTd6aUxZaXUtWklEZEtCSl8wMmh1aDN4OC1ITWVaVlFGMEJVS0Nyd3F1MVg5Z1VnLXFZaTdKTFRhd005Y0tpdmFtYnlEMmdac2R6bTdDRWptOWZfZGpVOUl1NnRqSDk3el9XaGxGdkgwWndkWHIyRzltS0NoYkswUVQ0ME9PRjJlTDZaNXIyRDM0Zy5TRXowNGlSbExIZGc3VndHNUttTjZnLmpmMTJRMm9EZWxobkd2SFZTMG5Pai1sV1JBdzhIZjN6NFFVanRIUWlvRFhUSXZqM3djWmtmNXhERTBKMFVxenJlV2R1V2RaR2x4cEh5Q1czeW9MV2dmUTRabnkyT29rUklyajlEUDhiWDVJTnFaR0VCZXkzUmtIa0k4c3JjY1c4cTh1Um81T1Q2dS1jQjF3eW1ZMUs4ZHpNYWNkZ1RfbFRhT2dBVS1aWUJJdTNMZnp2S1FfdVpjRDFlQWYzdUFSTjhFc09nNzVWTjRtRlBEYkM5dXI4M1piclZmbERVaWdoODBtZjNQaUZnMUxsRDlyZkdTcHd5ZFcyLWVSZkpwQkY0MUl0eWFPLTJFeWxveEw0aWVENndRSV9iaWFpQll4STd1M2JlMFhhSXVjQ1dzZ09SdE5HV0R4Z19wQVJJZ1Q1bzBkRGZDLVVDa2UzWE44eGpPSlhaaHlHdElaamZOU0FxNndJUmYwbWpkNGtQQW0zRFdBc01jN0EwQXlCcHhoMzB6eVR0c0pNVXNHM19KWDJFdjVhMUpSRVllNUNEbjhLU3dZTXFCTXRVOVc3em1MTDB1UVE5Q0dreXBUQ04zZURrTUtfVHpNeVllREFkYlZHNk1ESjdSdmVESXhpOTY5ZURtcXdhRFIxWGVlSlJVM181clpJa29KMW4yOHhFWmpGc0FnWTYyYkVoR2NYX0l0WFRHMVlCNDNwVllQWFN2b1FqMzhQZXZETWZwOFpvOG1iQmQtYWVnTll1TnZER25XUnFGWXd2Mkh4QUlWeVBTb2tkQ3hJZGVZZXl2X2RTODlEeVpJVVBuR2F6LTIxeFA3dXZlZmlxZklmdmpqVkVKaUlXdF9Gd1ZIdGZNMkRvclJ6NWxjNnhMS0RCTmJpZUtDaTV5dkc5NURrUE1UcUkyVDNYZmVYS1d1V3FyYlhRb0RUa2pIUE1XaGZwOTRzSUJUWWhqblBOTzlFenNOYmZESmJ2dDdtTDBSeWk5YjBWREhYV2lValUtcU14SFFqdmRBYjQ2dEdCYlpkdW5YLWVLUUhCWG5IeGFKZjYtSVpCTGczS1VHUGNxTWM3WlBNNXdRci0zbjc4RUVhcHdoU2hqWDVEVzBaZjNaQ29UWWNWdXJVN3BPZ0xEM0NCS2Y5M1RFUUJxZXJrc3FLMWY5NFdKR3FMVnBObmJOY0dqLVlEamlkV3Q5ckRFTlhiTnFSTzBVb0Yxdy0zXzBodXRQSjRsa0ZlSWp3M3RWcmpueExoQ3dpVko1OTVnUnRQd0ZodmVJblpiRGt1c1NWQ3BWNmNxLXExQzBZaDZwa0cxR1VpOFY0Z21FZHR4MW1zNDdiYWJaUjhZWm1abVhGbzRKSUE1WHlTTGxNdUNVcUt0a2tBaEJ3NE53cUIyV2ZSM0E2cGNveF85RGtuNE5JUHk1OWNCMDQ2c2d5TWZNOTExT0tINXNoeENhT1RRd2ZvQWJnRDcxMVZLUWw2YjZfcXBWXzNpdXB1Wk40M2d5M1k3aGp1NXgzQU1Pc0NwSmpHMTljZmdOUjlxa1E4UmxoMmxJcUo0d1pmTjdLMVJ3Q2diZVA2Sl96NXZ3UUFuQnlpb2Fta09iaWtqM2l6d1NaTjhUWFZheDBYbTMzTFlwYk9zS2M4NDc0RFgwaTF4UVZ1ZXVoMzNrTk9yeDM0YUhZT3hUX3p5aFBfcE9RZ25jZmtIRk1ZSmdiUE11NWl0YUR4UTlOZFkyNV9qSnlfWlZhM1BRWnJjWmdBUVRrM3B1Z19zYkFzSlFCS0lZRG5VZTkyRVlYOTFNcEFmS0RKVXNWanc5emRpdnpraEYxdDU2bS1rZWZuSjFHTmJydVdwai1ZaVI4RGxEU1k2ZTItUGtKMURVWkRIdHZVSzNTWFNzVmI1My1sY3NfMXVIQjB1WkxrZGoycXFNZ0tka0VfTTU5RElISUcyMVBzNkc4NGN5aXlBeVVRbkJRUTZsWHpCOUYzT05NelZ5dUVqNTZ3UDczNDdyZnV6bnVsbVN6QkhMM252MEtTUkxRc0JaSUJCdXpvNjhWWWNBWTYwdEUyWlU3MFR0VzJxbEhsNlhlQS0xNmlhSlR2ekc3UkNPV042OE5MdEV1U3ZVUEU2cUVBQWVrbTNCRERaOTVxUG5GVzlVSkl1MGVzYUVUeVo5NlprSkpYTXh3UWpGMWp1eHNhei1qa0JGT0VuTWJZbjY5V09lOEI2QVI5dVEydmZlWkhNOHBSNnMxMDFaVWdzSm9zQXRBUnJKMWRVVC1EMWxUTW1hRjZ0M3ByYmdCYVRFNnlNa2U0Q0p4SzZDdGlIb3NSUmFlTkg0VGFORndnZkJWMjJaTUUzSEpLdEIxUnlJTkxSYWVoVHBmRWtNbEM3MFNzRGVmNGlrZmZzODdrQi1NOVViRndUXy1WRTQ2LWRPdXhCbmdUczhMMTN4RHVLMTZJU0d3ajVqS0xDWTJVRHRJNWpOQW1ZYmxoRWw4WWR2NEEwT1RRVWdFdjJVakp2RHB1V3NyZFdPc0E2ZmQ4aktDeGtwUjZWM08zUmVHdXAwcTBlYl85ODk4SGRTbG1TeTVtOTNtbmhGeVBzQlpzTUtqTGZUel9PSE9hRzJiRGwzcHZuWFp2c296NEVlaXI2N3VEcWhNdlhPMWlvaGoxdmduYmU2WlVUSWQ4LWxNaFJTTmFKWmNYVnJoM3RNSWMyRVRhSzZ6WW1kemZUS0o1ZWdPbmZvVF9RSG9aeGFxdUgwU2ZUT2pZRUJFY3ptaWwxOHFKUnRlT0o0b1dnWVRLMVk1TWNUZkR6eG9mQ21ud2dqY1pUYWpVVzZValVBM0J5TllITnJJLUdCY3g5YlluemFEZnVSWWRveVNWbzJsY3d3SHpaSE51Y0F5YlJIYTl5TEdjVmloLXFCM1FkVFhMTS1zU1FqNF9JRkZqUUpCbmFyMm1TT3Jza09xMzN1QWFISHAyODNwaUkyRGthc3pVbjRqV2J3MzQ0ekRITlc4bDFVVG9rY1hJNFVkbVVxaVZSaDgyRFRKZGJnLV9pQ2M3aTV3N1dwaG9qaHJ6ZFlxN3l4TzBOX2pzRjBoOTF5LXV5WlFXaUVFSy12akRWWjFTcHhjUndMZXE4c3VlcWgxNGVVdGc5S3Yyb1NkR2twMlNCajJPclEtOXhZRWRtcFBIRmVXQThkb0VhRlhmUWtrdHFCTnZiTTZDUHlydFJ5SUg5MHJqSjNqWkl6QmE0SEd6UTA1ekxDYng5dEttNVZmalZxTm41dzVMTzYyUWREV0NBUmE2Q3pyZzRhdHhfTDh6aUFVRUlBUnpIUDFLY2JTU21TVkYwZUpOdFNZc3JVVVU0bWZzd1lVRmxMbVhuYXA5cTllVDJBTURXbHNNVEdDWFhVUVdINGc3WUVCb3dSa0lWci15a0RobW5TeFJuYUg5NmFtTkRjaFBUTkxnRkM5anl6NG1TaE1ORzZjcl9idHozSmR4djkwZWJVWEhKZ3hCYkMxZDdlSzRlbHhmMmplVDFyMGdOVkZjbkU0SUVnSjMyRDlXV0xTUFVveXNkQ3AtVXhaSTN4cU5RR0JZZGpFQXhSeWFSc0dHRkFYYkRNWmxBTkMzbDhuTmtTakY2V1huUlhKTk9KRkJ0UTBFOENDNmNIWTE0ei0yd3lvN05xaTBPS3M0b193elJuODE0ZlRvUTNQLThaMWZPTWNHSGJNOFRnMGp5ZHNZMjUtU1JTRE5TSVF0QWJxNFlaeV8zZDBHcjVNMHYza2ZnNl9ZMlBEVEw5TW5DZWp2MTRLZHhmV3FxLUdVT24ydkZrb3pUb3BUWUpjVWVIODVmYjhWRjIycWZyQ0hWUmh0WE9oZjU4U3RjbFdNdnV0eHlJWEpPSGpKTmN5MzQ5WTNNR0JCekc2WWVfX2lLazhjcjF6TXNtZlU3TGVDV3QxQUxtMFhZWkN2dlI3b3BRMExFdTFnUV9vNnJlSGs1N0NnSnJZenA0WnF3VHN5VGNwY1pEakNUclZ4Ykx1cEtfSW9HZnVkZTlTZ1pPOVFWYjVzTTJWbXAxcVVLVXo4aVY1ZGNWbWQ3WHgzX2JWV2hkaFI5N0RBREhxSHlucWNFMkk0RlpaYzdFaVhfeXV5MXVkX00yQldLNEtqQXFPcjFPTXVOcDgtVmNWX1pvcnNaRkdKWXNNZzJyRElNWkJCWkRFWXpXaFY2M3o0Z2o4czZmLXA2OE5uMGhnSUZvVWdxYzV5Vy1xNGdmWTh3WmdNQzA3U3lORmYyMWxlN0xSMWxQME5wUF9fYmpJb09XODRwLURQZEkza2ZDbmVad2NtLWJsV3RrSnFNWWJVUUliQ0RhZmYwNXNuamFwclJBVjN1clZueFJLZ3NxU01DMjlYaUo0MTVmTlpET3NTTGxoQk5BRGoyMnFBOEVCbEs5WlotUWRFQWFOeEJheXE2Y0FjcmZSVzJtaV94TkpfMjV6X0prdlhFbjAxdDJONDdQMUM1bF82UFFjVlJIODlhNkdzTl9kTDFfZVdCS2dObnM2OFJib1ZGVDZtd3YzWTEybWRNRVlvWmFhOXcycEo4Slc3UkdFZlFsbDRISmhxNkZtcnYwdFlYSDBQc0FFSnZDd2F6QVRpUERkSDQwdzh6ak5rN19sMHhMN0JtNU85ejdHQWtBREV1SG9tdG1YcDNCaWxVRjlMVTlvd1pyUEJ2Rm02MFIzaEd3OGxWbTdDaUZaaTBLdGtIVFJlNmw4WG5RVy1uTy01a0xiWDBlTnRFelJlOFRhUmxLTDFwNmVuUmhfcWlGSEVaOEszNG9GOVRQZDZNWHRLR1IwZEZSSjZqMzhOeEE5X29sMlJvdU5vRzZPOEJXRFRQQzR6T1o4OVN5RC1XTnZEVk1HSzN4WTJwdFBheDVSYm9ibnlVeXB1bklkb3piYklIcl9jOE1aaTRmNUlRUjZTWFMwZXBhTGxMeWo0Yl9KbXpCdDdSVGRxR2JkUnphbkUzS1N1elBfMTI3THJLOTBmY2h6Y2tqc0JkZmR2NTB0V3k1YlBOd3hlR0RYdnJqa3NwM01fd0tldF9BUkYtdjJ6cUpqeXhVcGtQRE45ZktHOFVjblJqZkQzT2taWVB2d0l4ekN6VEg1VkM3LWtfdm1Wd2R5YzRMTVNSU0NDSHlJdkVWRlhWcEhMQXRxQmV1bmlxRGNWZGhMR244MkV6RHhqSHpzendSRF84VlQyQkhrSWU2X081aVRDMkFfQ1dqWUdMcW93UEpXWjZWU0V4N1dqYXkzVVgzTXV6NWh6T1FVTTZMenVpOVlxRVJBLXhlZDZPS0g0ZlFGZXNWaE93bFVQT2lLclJ5VlZyeDNFek9KX082Nm44a24yR2ptZV9YamxkckM1amRfVXhBQlhIY1JZNlVDUzJtcmZlUFdMTFgzQU9TUDFHYkNUWlBDMG1iNHpibjhCR3FnX2lodjRxMzBXRjFWbDBtS1RaZkpVY241N0JUNS04M0ROZGFUcTVhaFA5Qi16MWNWdlowQ1V2emtpYkpGcXhRMDlDRjZnYlhxZTBTblJpOUg5amc1ZExxLXE2TXJTZVAySkhxdjhBSTVhcVpRTnBSNmVBTk5CeEpTMzJHQVpSSDA4VFpEbzNSR2dMYXc1cUhCU3RLc3ZCcGNaeXZBMDliTFdzU28xTmFreGxSeGRvMWVSUDlUTVBNYm43SGFBeVhzNmVNU1F4RDByZVkxRFVfUENVLTlLYjc5NC01VjRSR21TOHFlYlE5LTUzX0ltMmN5cS1JM3FhSnBhbm1OcW9pVXQyX1dxanROYUFsdWIwNkpHUEtBdDZUajVlbjZQQmFCN2ZUZHVZMHBHb19XdEprYjlra00yeGtwaUhkdTJKUExDNDJ3ZUVLMmpPclJtcWtqOVN2RHB1NDdzd2tyUDluRWRZRHB2ckE1UGR1elNkMmdPa2k2VUhLRUdBWXlGbF9qWFpHOXBHRFBRRi1NeVlHd3ZOT1N6Skx6Z2RvMmpNZ2VlT19oaE5ibUNHNDJsdEVPX3c1YzlLM3ZKQkFZTkk3VnJZVW9TWHlvY3daRUxfNVdSYTg0SVBCam5JeUtKM0tfQThhTks4UjctMld3aTBob1pleEg4aDQ5cGVjMjdybzdfVnlwZVc2LXkzbkhRRS1oNFFpa2ZfanBrMjZvQmRNNHYyR1hLUVhCVjNoVU9BRjlNUG5na09jMnFzeEwtbzU4YTlBREZfeC1JNWtLZlBUM3dsUEkxckhQR2MyVFMzZ0VYMWlmWUlfRXpiSjJYZWpWcl8xOUpSRVQzTVFHUnhhQ0xpaHFLb0MyZUo4RUFsV2NFZ1NfSklYNnZUZWhxc1lQR29Db1lUSU9CeGRROEUwQkF6X3ZzSVptN1NFOTR0WkJaUUNrUU9ORUpleGRNRFF5TGRPaWl6M3NFU2RGTkNQNWdKV1lzS0RqZFRKSUc3YkY3XzJweWdWVnNPQkhwSHlSdGw0UDBHQVFLa05zRnBZRjdTdVBzeW80TER4UmNiQkVfZWlYazVMY0NabnpFdUtlZlEzQVpLZk43WHNBNnYtejhuWWEzTWg5NDgtdmRaNXVQYXVWNXRlVmVabE84cmZuRTZwWEhCZ0wwNXFhVjhybDRfb2dlZnJVQ21CWHZMR0s2VE5WRGVjSXAtSnZEMzlKb3Q1TWRKSVgzVWxsdEdxR2lvS0dQN2pHMDdMSlBhVWxTcXg0dFFEbUo4UDRmZ1JfaVhwSU5Pb1VCMlphb0IwQ1o3ak1ZQllXUVBOaFZjVk8wSjR5Z3ZOTGNUTFB6bEkzUGVxS1FOOVNKZ2VqQ05Eak9mNXljOW1VcTBMN3FDSmZJRDVkSE5OREdSY3ZWQ09oY3BVWktIUDROSGpVZWtNb3lmeGFIcnBGWXh4dl9vUUFDXzVkV2ttdFY3azkzNE5nczFaMDRGYTBNbXRWZ3oyVUtZR2RGNFpxTno3OTFhd0w0QXpjUkFyZ2dEYWFKN1lKa0lXTVRwTXBnV2lwZGlIalhjU1pfR2xXRGg4dnFFNDYyYTJ1NVVWR0V1c09wT1NPWkVnWUdaME5MdEVxenN5Tm5Fc0x0YjZObDhaQllPZmw2QnV6OEg4VE5fNG41TlA5XzFYUjFrN3pIMWNfRF8wOWNXZGJGTWxpY1ZUWEdLT2tyMUdzWGRlR1VWYXBQRjZ0d1ZpdGtGSE1aRjU3RTczaDZvOGFVbUItM2U4ZDdYLUVTckR4dnV6eDFSU3NZbTBJUHFZcUplVUVsUzE2X2RwbWVtZ19ycHRUV21RRkE4Vl9RMU4ySGN6OE9Gam9nUlYyenFUU2prSnNJa1BVdTh3R043enpMZzZhODctQ2ZUNHlhRDUxOVNnRzB5U0hjWWdSaFlhUHl6QktIZ2tTNTlhckIyUVhhUHVYaWJJb2tXMWlzRktBQWFid1VIVnhLWGpNYTJPT0RBRmx3ZDNFN1lQYmZ3elQ5LXB0QkYxWkNNTDlqaks1NjNhSFFDTS16TlhSbzNtOW9MQ2pIVUJXdHhDTmtNSGlzdHVkSC13YVFreVNhNVkyNjBmcUVCOV9ScGlDNUx1eGpLb1R6VTVEMEhkNkpCTVVFQnZoY0I3SHgyczU1X1JYaTkyVERlZHZSclYweF9pbFJ4LXA3OHppQlIwVndpRzZydmg3NDJrLXFma2piaU43enV6QzJoWTd6QmNNdnNGeGNzMGNNUVlTTWNwU0FxYzh4TUJUUDc0VGkxZVhTM2JfUXJHNjUzN0FWUEFSemQzM1h4ZmpFVDgyMk9xOEE0NGk0eGJrN1NmS0Y1MUxoOURPMm5BNGEtRDZyZ0IyU3VxUVBRbTZqcVBNTTlDMm1pTmI5cTd5WnJsanBLN2FrcjU2endWV1gydkU5T0o3VUtfbTJOMjQ5TE5UYnl5YThoM0dVNkktRnNoSWw0bVVnYWplejhhd19YQjhnbmdnc0g1Z3h1R3F5Y0VBV3JTWnVOR3FzYXdpTjJUMUxNMGFSY3NtLUhHTlJPU21TdHJJX3FqdHlHelV3MWFBVVd4Q0hKbHFndlExVWZuQlEzeW9CcXBpSjhBQ1d4QVFfRXFnOVNLVF84NlBQdDUteENKb3ZHa3F2Ukh1aDF5VFR4bjRORTBaY3AydVJ4bW1PRUdvaXhmaEZ3Szc5aVYxWEhpb3BxLUFKWmRRMkh0TDJsS3diOXB4dlJCM0Z2cGRNSnp5QkJOaEROT3RjMnpEektxVm1YTmVqbTlwQ0Y1OVpxanNRamdrTkQ5UnVJUGFkTlVwV1hQemRDUElkTnBFcFhraDlDV0RaYUF1S1FscDlnT195bHJ6VURoZFpTZHNsRWpjLVZlLWlPTUd5Um11SzI3MGFHcGsxZ283WFh5TzM5NTFhejA2SjJZU2RNTWVmNlJhRHpPckpPckZvNFRZUFZ3TVY3ODFINko3ODd1QTBqMHUtQ0RycTl4Sm4tQnhHOWNsZFpncW1LeU5fd0RkcGpNMjBnV2RqU0c3Xzd5Si1raHNidm81OWJwdmhBSi1URlBXNVZiRDZ6bW5aeGcyVXI2LVRDYUlmcjlJWEpQSDgyVzhjSzZESkx3X1dDNC1qcDM0UEhaMGNRR082bFdTdXZiM2pDX280UWk5cHhjYnVDTU9ScjBsOGl2b1BZVGt5Y2VjWE1XMWJuMnFGbXFPUFRnWmpDazg2TkJMbWc2ZjU2T1BubHFoV0lLMklHcWRmNmJ3WUM0X0hKalotdEZibHhFdHlvcG9wOTkwc2JJaGtCN0NVX1N0Tmh3b19qakdsSThCTXpiMWRFMVJ4WEtDMk5oNlVUZTh1QjdWQnM4YVUxbmE2YTVqOXc4QjJ0QjRLbHdWNzNrUlc1V09LYWEwMUJaT2R1MTFaV01nemVERmZhSFNPblR6dFlHbldhUmN6RS1oUkFEOEZlVzhYbGN4ZG5ZekFsLWl4Z2oyd2twVTFWbGxXd3BsTV9qbWg1VjczbHpvSDVVemUyeDhnTWUzMUxsT1FYVGh1aDV2S25feEViTUxZUkZDOURFRUxjRGFGTW8yUkUyRFhaZmxwVnJIUmJKZ0VGN0IyWGxVeXVqR0kyMXhoMjhBUGxNVHdfODRLUnV3ZGduWE9DQlRwc1pPN3d3ZkgwMk1mME9KWmN0M2M0REFESVBULWJkdGlyVzRDTkN2YXNWaW9YVFpTSkJLUkhMR0F0Rzk4d01nbFBUWFBNZHlzSENHNXo3ejlFSE9sYUxfYW95YUNuTGQzazQ2eDAxZW03a1pKYXNEcDZEREVWb3pmUE5qRXJRcFdCODJ6N1NjSFFMc25qZEZvU092R19xUzVDSG1DRjdhTnY0TWdKMklwU3prOXlEZWtKTUw0MzhGZ016M1dEYm8tUTFjQU9fT3YxdEl2UnFZWTlIb2NZTm04N0FmT2pVdDRTZnpRdndESlctWXN6dEYzWnFIR2l2emhPa0ZZQlM2QXIybmZ1SENqejA5cHE0cmRyckdJQXhOUzBacU5oUXd0R3V3YlBnWlBLOUt5Q3lCZjhiWW5mQTd0RVd0bFAzTnhwWU9Kck9tQkpuZjIxOWxjWVFMdEdKY2xjSW5EaG1hYmlHNkdRd2VudWxmejVSSkVUT1VpTUpJcUFmbldrNWdfQW5DVzBtNFJ4UEpzc1NzbU93OVdLZmNmMnEzSUhRUldqYVJ1WUZJb2NGSmZSdmNwTkc3eTdGZlRNTkdPWEZzSTdjdnNJUUJrRkItbzhqanpXaG1nOVl6TGxEOVFWY3JjTFFuSlBtOGVxT0dGcThSNDRfdFRmTWNtUnRNVVQ4d1QwZkprTWhXNUpKWGxSQTIwbmU5UXFpNm9YSmFCa2RKLWpXZ0tGMS04R3lmbHM1RkdhTk5waWtSV2liTXYwZlJxZEdJc0hRMk5RZFFNV2FpUjM1ZTRhY05oUEc2enZPQTNYb21jMGp5SzdZMzlMVW13WlliYUV0WmlvekE1aHluX2t2VE9nOHdaOWxpaFRzQzQzUWY2UlNlM1dkNXNjZnJLM2p4cDNGMkw0R01KMm1ac2FXeXZPRS04ZHNYdzRMUm84TWtJTncwbzVGZi1lSHRpZm9zakZSa05aa3ZQY1lYMVFOdWxrVkI3R29ybnRsTHhUT1VDVlpGdWFSdGw0WFBEX0tscnk4WlExN1YzZmphY1p0U1o3RmpuT2pXRTU0cWpnMGl4blNVdGZzdmZjRmdhV18yNDJnQ1pyQUxQejA5YkFneGRkVjNFenFpUmdJLWxiSnpDZUwyT25UTTVnbzNfWGk3cXBjOUQzQ2ttUkQzSmR4bDB6bGYzRzFZelFWMVdwQVJES3Zla0xia0ZBb2xRVWZyR3YybDI5VzE3dmY5Tnc4dEVveGhnQTEtYTh2RFVzR29KeUJSRlFiQ2wxblEzbUNoVTJNX0tlc2t1VUx2cWh5aVE0ZHQ3c3pqR1pIX2RQUEpEdVI0QU1ERmU3YUV4eTE0bUtEVHVLLVV4WGJWN1dOdW5iVDVrQTVuUXlBZ2xJdkJzaEtEejVnNlNUZmRjWmFWX2kxQkJLcUdhSTFCM1BmdkZFdWFMZVg0Yld1TklSQTcxSTBHUTltMkJvMHFwakx1dEduaFNJLU1RT1RHRURHSVR0NmQ5ZzNZX2FqbkJsUWl6RURsek0wSkdmOG9kbGNFelE4OEV1T0dtZmVVSmJ3WTBxbHAxMDA1VVV2UnhSUnY2ZnFNamFHc3A4Q2VRSGIxUnNjUzFMQ0JjbEl1ZlJUZVpoOFVMRlp0Q084QUFqdTY3SUVwZk5JQm5RMWt3YXZSSHIzUUM5VTVmOTVOMWw2NGtpZlRJMGtIdmdvaFQ1MGJFQnYwNVJwZDF2dmxjckFkakZpdkRFLUNJQ1BzQXBxejZwMzJTVXlHeGlvU1VXTXZBNFFFdDQwVFNXYV9XOTMzcTZ6dkt3ZVRQYlY2UUE4X3FGSkw2Q0p2WTB2Z2sxU1JQNGY2UVNabXE3WnY1Z01ISzNRU2E2VWg1ZUFnb3JBYzdaSmpFY1IxNXBVVGZwY0pxbzlXNWRualFqSzRpRW5zcUlzX2NpMkJBOXN4Umw5QS1DQ25KS1lPNVU5bDRDOWxqMTRXeTA5NHk5M2hDWGJoYWNMTldrZjRhck5GNUpzeGFPcl9pbWwyNzJNVkNkWVRhdmF6WXF0d2VnSEYta0tuUVpkbDFCOWF3Vm5fTlB5WFhjNnRfQVVfM1VXQ2xtZ1hDRUQwZG9ORWRzeW1FaV9KXzBjaGs5eGhWeEdRQkdwX0hONlpXaldxMkJuTXBIVkhHUnFZNjVfVlRTWFlOWFZJRzQ3QzN3YUQwcWNYSUJxUHkwNEFycGpGMVdCZVA3NVlNV3AtWW0xWXZFRERiNzI4R01SVWd1MllCeTJjWXhDZ2xRb1g2UHdMUW1KTVRaaHJRYTFic2JkcG1jM19TNEZHWDdEVzB5ODAyTEFtejlxckNYNlQtTGdBYlBHcDVnM0trZm9NcFZfeUVMRTBiaVRETFRac3hNQVAwekFVYUt0SjNZeTliZEYyWFFOSlRpNmx4OU1VQS1GTVFEdms3LXAwajY0LXV4RUJXMWgwVE5oSkVoZmlhVVFIUVNycFdMX1FIQkxPQ3BXemxVV3lzaUhYZXIzc3lWc0xMbHZMT01BRkJOWTZYQjlEcVVDTXBrcUdhb1d3bGFNVkJMNWtPRmdnVjAxZkxxMHg2V0M1YVhaVjBKZE1MQTg3UmRIZ0lCamczOWRwV2VCZ2luM0J2b1FuYVpvOThVcnN6S2dZeHFnZEVVUDF5Wnl6aGptWWpTTVVGbnMwa3dGQjdPUmh6LUR6U2FxNXRSS09KTTZ6SVlwUXktcnp6aVNabTNNSnpRbi1URzdyR0d3TTc5WlR0ZDYwZzJVZnRHSGc3aXc3bUtCY1dxTnVYSy1DNnpKcktOYVQ1dE9jT2lib01ueU83cmg0dkNsMlRvdlZaZlVKd0lIYVJXV2hZancwRDJaUjVscjRGLVBudmdIV08wNy1veVZrTERQY0lqbHpkd3M2bUdYeGRMUzF0aTQzUFJDbVZnNTVYbjJRNWdHR1phbW80SENzaGJOZjlLckhfVDVhRlNtVS1LVy1haEpWd0lWQUstMFE1YlRwaUlFMGVSN1l3T2tEemJ5VEJFZkxEWVV6MHdFUW9TVnNwVktfeXRBcEt2QkdPeEFqLVFlNkVCSkhiVVFMU3FqQk9oaDc2OTZiWm1SeFJpUFkyUTVMazhsV2EydndrdExHUzdORVp0djBDN2gwZ0xvaEoxRWtRblB3WjdiQTd3NUJGR012ZlRQbTJXeFJzQ19IY3VKTEdLT3lJN2wxSmxETGhtY1ViaU4tWGlwMTJKUktBZTFmcWxoUkZld293Q1k2MDNMVWJ2Z3lXV0hFRDBPRjZkR0VaN1hqVjd5YW5mcXd5b1B5bnVGTi1HLTVsakJxOWl6V3AyVXhyTzN2MlN2bW1xemcxVHlEY2VuYUp4eDhVX01idUlUTXdnNUpmSVUtUFptM3N5Y1JycjR2Nkx3NFZ3TWVadU1CdXdqYWY0Vm10bVczREhiWl9wNlc5RVFwU215anJaNjllWHF4RGswa1lfWGdMODc0SWxqUkdWaWhDaGk3eEhJNFdLWGx1NzhoOUNlam9ET2RUMGdxMnA1YWNJbURQczlmeUMyTkQxSkU1S19UeV92bnQ5SUlaM29NYU9WQl82QklYbE9YWHZqT0d4T1Z0WHJ1Y1dnU2ZDTGlaODJXbW1RZVBZVENtRVc1ZEpZcUFQSFkzTzl0allPSlF6ZGxkbnNIbUV6ZkdBc1gxOHg5SWhMamhIenZoSHBuenhjY1RzZ0dEZFlVM2p4akp1bFliOU55QjlUX2x0Q29ENW13U2RwN28yY3Q5N241S0ZleEVFU2Utekh2X0t0Rko2WG5pcWt3bm5JcEJrWWZDSzhzWVgtYUdHczJSODF0Vm9CRGJ1dFM3eGV1ZmMtX1U4M292UjIybWU0NFg5aHl5WnZzdTNxSzBDTmZFQmFRV1NKMDN2cm1yenlvMGJMcE90ZzlMMUFkaWdyV1pBZFowTzhCbml4X2tmQzU4Q3VYa3FzYkxpak81UWg1OHBmbkR0RVZIMjFUeW9TeVU0UE5zaGVrQS16N0hIMFRKOURwek1yWmpuUi1WVFpxRzFEZG5OTnJZejEyMjAyem9BelEyOHNtMjQxakVGUTRabVJuT1Ezc0VzRXhtTmI3WVN4cnJSWmpjVVhvM21oNWRqdFVveUFxWWY5RTlvM3JnT2xFc2ZMY2NGQmEtMTk0LTRhUVMtSXRvOU5ucGdKTENsQUVlWEI3RmVjeWYtcWxtSDR0SWYyeFR0TGdUc24wTlhNUUswVWxMLVVWOERmUnFqaVBXT2kzZ05vNGEwMnJJSUxqcGE3ZnNzaGExYkpuSXBQYW1sNTRyNmZzY3NkMV9UbHg0Q2N1MDhsM0VpMkljcXprRE9oaFJpdnhwa3gxTXRfWDFUcmFwWVU5OFBSNFlDY1dfajIzTXFsRHFuNFRWMnZHejNRUFZneFFFRmk1RC0ycjZmeF9tMjllUEJVYnRyLXp6VU5LVi02dzFFb25JcTBFd29MMlZOY09hVDdacnRrZDNIak9DV2tldEZUUFJtbERPVzdfak5wQXpJbUZCYjJKRC1RNVFIMmI2NzFMQzk0S3BZMzdPTldLcmNrRWJsVGU0a1JfZVM3dDVPMk1HUkgwNkdpMEtOSjdnbUxuR0RXd0RwcDdyTmo1T0MyOHdIQ1hKaHNjbGNKbFY0aEh3U0N4WkY0ZWozdzNBX21TYVdHSENwaEljREViTlZUcWJ0NUdDY0tyMjRVVnNuTWh5SEs3SDc1d0FqUGZCajJQQlRXUHNJUmFrSkRPTFpCRG1xNmJwVmNucDdwajVHUXh3di04ZlNfcDdoVFJFd2UwYXhfTDhfVzE2dDVwMmRUZi0yYTRkeGRoV00wd2dwUk1TZUxGUTdRQUREUTl6SFNZS1BFNG84dXRUcmNQWUp4VDJjZF9xeG1qbVE5anJmeXg4bmpyOFZ2R252MVNJaUh6cE9GME9ZWXZxMWc1UmpvS2NRTDhaclVhVDlTZm9RaS1JS2FpT2dMd19yQVdPZ2hkZGk1RHpaZkxGZFZQMlY3YnplYjZCMXFCS1VWRldOUHJENnBwQUwtbjQwTEdHZmJCWmJPUEFZSmhLV1pvbGstcjE1dkl0Y29wUFZzQzhlRnF3Z0ItRU1JdnhHMWd3ai1kZnlnZF9LYllZck40NURpQUFNV2dxaXNMNmt3ampSbzF2ZjlEWi1GcFVnVU42Q1VEOHFpdjM3ZFp3eDEtNENod1c3Z0xoeXFDdDVvSkFZam9IZkpvV0FUempScGRqNXJ0T2JDTi1vd3JFYzFrS3RqdEh6eVBZOWltei15TS13UW1GWXd3SzlzRHA0dktaNVNNWUJCZHFhTDE2Q3FWOTZOMTZobW4wUXdQVmRJeHl3NjJVX05qQ0lPMXJEWmt4bXBLWHAwMHdJX243ZkdvZzROSFUwWmM5cHF1MFBjYjRtVDhrVElIZndOLUJ5bnBaVGw2WXpNcUJ5bWE5VUtYZTN4cHI0LVMxdTdRMkowZjRrVm1SRndzWmlocGpPN3VfNUVNMlprWlNfbEFHX2pIRFd4OUU4MG4wZVNqNS1VMWV3ZjJkREtOaHBlQjIxandvdWZGTmQzZjFGN3Mtck9LR1dnR0p6SEctV3BGV1ZwdXlpNGg3cjJKcUdvNHZzcEJscjdscDZKQTczdFc4S3ViMnpqSnVmOU5DeUhlVkprY0oxRXNhTFA5SW13dG12aDFTMzJyeXpXVVVvM2lsR2hxbXoxNGpMazFSQnhfcHVadWVlMndadmJpLWZZVHBCc2F6czFnQmJ2QWpFamxZTmo3NGl1ZXVTMmwtM09LQkxtVVpzR1pMU0FScDh4MGpWdnZnODg2VnFpQ0VUSkZ5V1ZUNHZPeEJVSzVvY05DMUpvNXlwNzl3aHlkemNOUEF4aFRUbDZ3aDZxUzBHSHlnMFNqZ1MyTUFHZnNOZ3gtRTJ0OGt5Q2pPNWFJY3BkOHE0UkVmWEpWdE5xdHhwY0tyc05pbk53Z1JvVmFDaDJKV2VLdzBBaVVWS1F5MFVhN0ZCYjVSX1Fzb2t3Nmo4Zm9ZSXpQd1BabHc4SC0tSGI4SlYxSXYxSG9nY3V0NmpOTVFyMDdEa080eGtDdG1iODgyMXJSRndxSHdIejB3elRxV0Y2VGp2VHoxM3JsRlYtX2JnTkl3Z3E4ZUFDeE5NZmptNXhmZmhZRmxYeE5BSDRHdjNtdk5DVjFzcldfQl9ZS2JyeS01VWVaV0x6a0JCeUFnV2xVOS1URUZxYjlVX0tKNVI0QVJIOUNsUm9UZWtNZG5HdGNWY1dHdGZhR2g0b00wSzktc0JJVUw2cEVXWGU5T2w4a0x1c3c5M09rWXFFVkNUMl9CNXRDSkpJM3JFU09lU1hYeEZ0bl9BT2hWbk82d0cyRTB4dTdKVzFib09TRFpleGl1YW50ZHlZOGFHTm5TM3IyaU1LX1FiTzVQbXB0WEl4TlBxekN1c2RjRlAzblFudGp1bEZiN1Zlb3llcWV5SFBKNGF3QnQtVk5uRlNPWFI4MV9DWlNHVjB3YjhMd0xQS1RDclhpR1gwTmhCaVI2T2FTM3pIcE9JQk5rTHJvakVWU2Z3cGNZQzl4NmFxSWhOTmJCOTFPdFhSYTNsU3FhY0oxTnJTSm1uVzR6OV81N3ZLbFZEeHdmVnFqcHdBSUVFNUhyaE8yWkRFNDgwLUN2emtCODdQOW1PbnNPZ0hIWGxvcjZtc2s0RmgxdVV3eGVpRkRJdldOX2g3WkZmRERGbFhGdUs1VC05RWNPdjY3dDF2ektXS0F0ZldCQ3NfRnViVUJqTHJqOGw5NFpybnJVZFNHNW9NWXNZdFUweGlQVW0zODR6dkU3Vl9OVUVQMjIxVzR2ZFpXTWpvTFdBR3c3OE5vVmczYlJsejA3S3I0UVU2eUtzc3E4eU9LbGZrZlp3QzRTMDJtUmpLYm1fLXBpYlJqSmJwRER2NTh5ZHUwakNrUnN4ejlIc2lxX284TDBHSHc4SnpaN0VQR0hzbXhZRFpNREl3NXJnc2pNTFdXa1I1STl2T2Vrc29YNHpxY3AxSldoRXdpc1dULXFhenhIOTlwb1ZtLTBXeFBubGxJUVNtT3pzRnB3NUdlQWpEQnFSck9jNnkzWGVOX2FLcDZVRl9YZjU0cGs5U2R3R2JqTGRQR2lrMmo4eTRndTVUdlhpcTJyWmxGSTRSRnY2ZTgzUnQtYjBubWRYai0zd01yNkJGTy1PLUw4dkc2VTZza0kxRWJHOWtGXzF2SU95WFlacUVzQVJUdVR5TVA4anBpcGwtMm8yYUkwLTVPdjViMzBYV0hYNjdXWW5ueURHQjJ6M0swUE5vcDhnc2ZOWVBnOWp0bnBzNVVZQWszRXF6TWlDT09abE16U1EtTklyZWdVR0pHdVlmcGdYMGVxTl84eHcyRkRIQS1XTGNBYW55Vldlc2g1OUU1OGpvYUtQcnZqRHM1RmpOSVljeWNqeG11Ni01dlk1cXl3TmVjZFJodndwMDJtRFYzSmo1V3puTnhadXBmeXVmN2tIWll2WjZOaDNhejRRSWQyMjF2TU5SUWNqc0hwbmFfU3ZUZzNUbVdFT0JQV3JYdWJKX2NMUFpzdW53cWhGQ0gzdEpPNTd2WS1fZzhGUTFpUDhnNm85dGJqOU9memlFc2p5WlpKYlRqWGN3b0RveXVwSGNiWUh0RG1EQ29ySXM5TlI1bmlYdkdBTGo5Z2w2d1dVZEY1NWdMX2lnRTYwVkpCTWhpUmxsaGFPT2N5SEdjTnZacXBUS3JjV3RTazNqYmpBdUZFMW00czZjR1Yyb1FuLXZLUGo5LS1pZUcwMTQ2ZU9POUI2aDlnQTF1LWJGeVRiZGVmVWdyRFZDR05JR196UlNVMkpGalBkYU5DWGd3Yk4zdHJKUWxiVHZqSExidjFlbHBNMDhWbVhucldOVXBzY0VhVnUtMXotaVdtTFZxT053ZzFFaG53SFV3TUlLQ3EzVHc2bFk0bHMyU29DRjQtNVhCc2N6OWNySGNzcl9TMGRZN3FneDFGMTV2SFBuSTNUYXpEMmpYYWpLc3JBNmdTaXZnczRZSnR6Q2d4dC1WTjgzTWlvZ0RINVZPOTlKWTYwY0dheG0tbHNhX3Q3V1hVVS00RXp6cTlIdVlIcDg1RFdJVThtaEI1YkZNVmFoQ2xoR3FveDBaQ3JaMlVZT2NUU3VFWnBrdk93REZYem5VMkY5UHdzaHlNbzNmUzdYRG1VYV9IeEV6UEVINFFTYUpDU2lkUVZoak9aQXlaSTdmeUs5dGZPc0RHM0hZLXgxMUdubVhsWVN4MWQ3Z0pQS2Jzby1tS280TVA5ZUJTRUEzMFMyb0F4eWx1RVRTaERMQjZfSmphMWttcjc2c3hvWFd5Y2p0LS1hbVdobDBlZWNSeUszd2J5SDZtSmw3N3pFdFVVM2pqTnc4LVNXZC1MN0Z2dVByYTRjOFBYSmpoS3pNbmNoRTFYVzNnQUpfTW1ndXkwbVlsX1JycFpnLWk3MU1TVmpCMUVFMXZzUzFqNHhRSXBZWjJvUG96NU9XclQtLU5Mank2MnYtUGVxeEtTVktDSzRXc1ZVdU1jOTZlLVBnSV9hTnNKTnRhZS1DVFp0cGU4djRUYUU1RlcxbzFiV2FBRHFMeFRFVm5hRW1MUmFrOGFkMHNxZG94YlJEd0JCZTFZYjJ0WXVSeWR1T05mcThrV2lZSUJnbTRQaUVFUU1MWFBpYkN4SzZPUWtiRGNnR3l2R181Mmp0VjhJaFU0eUFPVGFCdE56MFJ1ZGZ6RmM1anNMcTRjYU94LUphZ18yaFhSZ1V1RXM5dFo5WnRjMC1iNkg5ZGhBamRTTnNqbGh6MmN0b3FjMkV5WTNnb1R6ZFYwLXJXZW5zNTZvanRDdnh6NmVITVM4WVA3bU1PdFZTNG4xSDB5YWloOGw2Z1lKdDdsU3JyR280QjN1VEtKQ2FXVWFpNUluREYwc3U3X0hMUFZRNEpLYzRkOXExYWpSNlFMUEVZSkMzTE5tOXNOOWhjeTdwV1RFOW41T2xvNXZ1aHRFY0RjWGxNY01SVi1RQ3RncDhNazJheG0zcWpfYnVPTm5ESE9CVzFub2RCQzF3NHF0QnRqWmJsSUxhTDJYS1Nvd1lGblFEa0tVbEpqTTRjWE9paHhObmdMU0FZZUZlX2xRYzhVRWliTW5icjdfU1hpRUJYc3dLcFUtWVV2UFRnbWlSSGlwVmEyMDUwTmJ2enk3SG1fMjFTM3ZneFBHR090SWdWcFpnT0NIRkZuSTlOWlcwcUc3UDVUZkZCLVkxRWVDeFJxRFVHaDlYZXpteXRCTnJuX25qTVpYVVBmWF9JOU84Z0FZc3A1aUNZbEtCTVJxSjBoTXEwRERPLVR6eW9ORGRHQmFuLVhfenl6WmVBUk1nbmlEWFpxdG9Ebl9fcVVJS2U1ZHZHTzY5UkVlYi1qVy1ab0U4cVA0YlRVU0k2NktUSXpRYW9pSUlDeWV4S2c3WThQZUh0clp6UTdJWnJQc250UVc2eFRqcGpLbTRnSW53MGdpNWxEa3dCUFU5OGtDdllWYjh0Znh4aExFUDQ3X1QzU2t2Sjg2clZtSTgwQjRLcVkzSXVpRDAyTTVSNWJIcDFZdy10clU4UHF5V29xWGlVVGJZUUZJNWp4S2t1QzB4by03SkJiMl9IX29CTmZhaXJMQXhlQnN1YXA4cWFudkRxRnRXUmJ1N3NOaTZtNDZGM29pRi1LaHctN2daay1FSlBaM0lVdU5mS21uVk1OWUo0cERxRnRtYUlGM2l3YVlHX25YdzRzVXJlQkFyME1NX3FSM0wzM1hBM3hKdVZubmJLOWJuZGR0aDNEbWNYSzg0OFQtVjhPUDhpMmwyc2F5OU9SeHgzRlQ4YWtUb3E5dlFhM3NURXhBblhSNmVwZlFHaFdjUU9qNVlfY2NkUExmdHZWY0JHSnk0Wm5uX29RV2NYQ2w4RkFoT3pmbWhzdmgyaDZDMkFqSUtuOE9Fa1MzVkkzdW0ybGRyWXlwc3BaQXpLZHBwNnV1dXlpbm92bWdCdVVmMVpLQlc2MlNnMFdRUzZ2UE1lczdFYnVlc2xGQ0lyMHoxRDZKZlNTVEZLcmhpY29FWFlCczdjZTFhLVZYSWE4X2JkSXRkMnN3YWhxNU53UGJzWWE0VkxXTHhLNkdyaEtrbTEtYWZlaTVPQmFPYXM3eTVrY21hY3EwUmF0U2huN0w3T3Y5Zzd1MFkxX2Z0NkJjX3d5a2NrSTdjWEk2c2t2MnUxVnh2ZnQxZnEtbTB1aFNJVTNoQ1hGYkJpMEh2RVZZMVNyVExUbVZtc1dXSW8wWFlBYWJfZU5Kck9HYkNLTHhzdnZOUVJMNTJiWnlkR2d4WGl2aTJkSXhRLUNuN21PUEhZY1NzQ0syZUxseENPMnYzOHlZZFY3aElHaTJFNkNUa2tSUlRqY3p1UnJKd3FkZXE5VVN3Sk9pamNhRnlsSVJUU0hrM2RYYy03djNPRGI5b0o5QnNrQk1BWUpXY3NvMG1oT1h3VUpSN1lMd0Vnc0lEZlQ3dENoN1FSUVQ5dnhjMThxU1FNalJ4VzF4NkJLN3RCRU9OX1lZRmdIUmJCc0dJODAyR0RLZ3YzWHJkV1RIODBuRF9BaWZXclVRNGRPOU1aLXBxMndvZlRCcjhtZWFxaDBQSmxsMWJTMnZKczR6NkphWlNqZ05ZOGRYV0dHTVRIVms4NXdfbUh5LWxWMmFoRTRCcTdMZldvRFNIYlFUR1ZtUWQ4UUEzNGRHcDNwcnZTZzVCVHhzYW1QWWcyYlJvSTcwTU9aUWlGTHMyYUxXalMwRVNBR0xWdzZ5d0EtRXZQTXc3RFkzbV9ZSHRwaGJsMG1TMjRBcUM3UzFJQi1xWFdZUzdtT3hzRHA2M09zTU1HNTRpNXhiSERhblRIU0RqRHhfZWJOS3YwdVdzdjdWcGp0WFdrQ0RZVVJBWjFCUkk4UWpKekRIaHNzMzFiRjM0VW1DaVgybExTYWo4RUphR2YzRm5vYW5lMVp0MXhQZHB4RXhWN01Rd21JVktZZFhCYkFQU3lWMjdzNVdFZERjTnhrYnVsaklHeG9RNkkzaWw3UXhlYXFhb3o5WlhoYS1SX0s3TnJLdFYtamJDUHhmXzdGMFlFQ1d6REV3UngwYlRIcjR1V1NEWHhoN3kwU3laYU5naXFva21QZ1VHenFlTmxjZVhHeUQwVnVmb2NNSHh2dmFJdUF6VGpMZi1ILVN2R0dISEloLXNTcUFxaE1uZEFUNWFkTDVudFhwdXZRUHNvZWpkZlFKZUQ5OVBqMXJHaEdia0VyT0hfNzYta0FSN1lnbXFKMDFuR1hOOVozWjR4cTBRTzR0OS1NbUZQSDNkOWhPN2hicV9xRFBuYkNBODZsNUhiM0htSzM4MXhrTFFmRlpZT0p0NlhsUVdJNnN6a0dGUTVlcWVadmVXYjVCbDMwZEl5djEyRktLUTZmR3MwaUVuU0RsMnVqSkJuS3FBakU4N0VZMEZud3RBS3pZeGNubDhDR3ZSanpJZWFldVpZWVN5b0NrUE1BMUlMZ3F4WGVHMV96UW1TTjI4OG1LWXFJd3dYWDRpQ1htN1RvNkV6YWRWWHA5djBvVnZtRWs1d3NUanh5T2FmNkJWNE00a0RnZkM0YnhaUWI0WFVnUHVWbkpheHhPbENpVGZTVU9oTlUxQUc0cUhVZXRjZWNMTEI2SlViVTNpYUhGZWtkd1lVT2VwWE5DZVVYU240RFlvNVdHVlhSMkxRUTY0cUdiU0NBMmxKRlU3UE8xajNxTWZPTkkzOFNQZXBmenZJZHFja0hkekY4MU42ZzJoOFNnbVJRNjRpTlNQeUJHNkkzdFFlVW9vYTVsUVFWenZaSkpYaVRjSzQzdENoN3ZNdDJ0ZGVSdm9RR203WXZNU1Z1cm1qenhjX0hJVEUyZ2hWelBKU0V0OTN5NGIyU1VNOXZtaUdPMWtfYTVIZDNNVDFDOVIxZ2s2UG8yOC1QYlRzb0RHbHMtRXJESTJGZ2VnVGVKSFlxNE1NczlfQTRsaExTc0VOdUdpZE9OUEpvV1lSSkpVbWJTc1pUUEV4SWtLdklydExCMVY0NV9BQjJ1Ym1LYmFnTE8yVjJTMGM2eXF2N0l1RnhKaU5FWHdaYmFQN0VCUXlNeTZfVVRRa1J0UUsxNnJRNEttTU5zaXNQR3BvZGljakxlTDFhUFl6RjhacThGRm9RRVJlRUhWOW9KVU10LW1nUXozazF6bG96QlgwZDdjMERRZ2tUZFZvTGpGNC1ET0tnaGpyMDlnOXd5QlRybzBDbUxvaXZsRkZtRW01OXRFRVktM1NsRk1XcHc1NnJXVjhGcDB2bUJHUnNfNW1ySjE4YVNVTG53REpNaV85TUp2X1I1NjJlZ0ZtWFZ2Y0Z5TWdhUDY3MFptV3dTS2FHd1lTN2pYeFMxUEFST21wdWNEc0FEX1pKX09fazFidWZtZlJHY3RURkoxMXA3ajdBbDFmM1d0ZV9TMHFvQWtZVGttT3RiSW9rdzdvOWJBRElRZzc3UVI1c3JacHlwWlp3X3RhNDByM3cxczQzSU5fZ1FCRXF3eWoyWHlCWXpNbmxpSkptXzlKRUNWRUEycnBRXzRKc3VzRm1MR0hPOFJqQjhSYzluUko4dXJTeXlNX2dHVVFwU1FScDY1OFUyOHZHTUQ2alhBTkl2cDVWRFVCSzNwcVcxaXg1YTVqYzZCMnZmbzFUWFo4M0dvbVdDeVRxa05DVTZ1SWxweE9DY1BHNTJVOUJVRl9oX2tGTU0xWmh0SWllb3hlcVdTMXNteS1lRGlXQ01BQWJFWHlVX3IwclIxTDQ4M0ljZTdGYzN1cG1kRDlMNUZrRmlaaGJnQVB0ZzJ0S1h1ODFUUWZTMzRnNHROczdqNDQ1U2ZvUkszNkpCQzhkbW5NQ09aN0QyS0s3RXRvUlZFM1RsSG5OejZVM3dRTkVWMUtNS2tFcWtxOVpYT1VpblM1WFozMFB6bU5zLWIyTmZfcVlLYkhGYTl1eFp1V1dHeDFhaFhqSy1KcUdYSm5GaUVOTEF4WUQteXBtbFcxemxjQ1VhS0hYWW1wXzNpQTZ4eDdtQzBLcF9KbVpRZnFtRjhSV2JJaFpvR1FwSWh4dkpqcHNJYnpMQmFUc2ZhR21pbXZnQVNzVEo3RERnU2ozTGRhMDFuUy1iTk9BZ09lTEU1di1NYWNNU2RrQnJHOXBsYTZnWFE0NUtYOEJzaUVHczduNlBmSFhNaUhYYVR1Z2d5QW1xT2ctel94NzAtc0ctODAtNFptSGdLeXFPdS1DeVR4X3dlNFJ3MW1UZFo0aG5zSDdvWDF1dUNQOHdVQkhhZlE3R0xRZ1dfS0VsVjV4R1J0SmxWeGhyREktbXh3N1ZZTy03dkllb0ZvU3VKbXhfQ0lsZWZWWDczOWdUYzFINjhJNWdaWnBzNkdjSTlhbFd0dVFxLUVnNEM3RzhwRUVobUI4WTZWaTlLcEFMQjN6WkxzSk1xOENoRjVsUmNiOHBMMlBuNGRpVmo5X0cyd2hCQlNJOXZ3MEJwWHEzTHdFQ2taLXNvWGhWTGkwNUtCdHd2R0pHbTdnOUgzWXhtUW5lTmgxdmRYT0VlVEg2d09najBxNnZBazhMY0hYdnc4SlYwbW9SbDl6dmc4eVQzY0syMHBVUkQ5RTRjaTRUWWFiUXlOZUNTclFzbVEtUWJLNE5Od3h6TVQ2NW92ZG5aQ2NqSzMxRERqaVBzVDcwNzh4VHpNMTI2VFFtX3VyeHZiMEZ6RVJxY3RoTDFEYVcyVVZIbnp4dHpYYV9IUjhMVnhPQWRXQ1RDUURNRmZzanlQQlR0OW5zZ2lLc3pfYlJKUHJ4TDNYY2d5WGJVRVota1lSNndaUFItd3lMbGxuRXoxZnQ0Tk9RQ1BNRlpWbjN4dnVuMGhaTEJoQ1ZrdDlMY1NPZTloY0JjVGxmVEZlY2FTYWtLSllKWlZYZ3VWYlkwVG9MS3FpcnpfNndaRENTSUllSER3aTdfbEsxcEZ2RmlEWkFDNkdFVnpwUkZVRGVrRFdyNS13a3hDbjZRYk91VDlaYklvZGdXdXBraVZJeTRYMDVLcGdqX2xBdzJ5bS1jMGVKNDRQQ3pLVWlHYk5hR05HQ3VReWI5bktlSTJMOGs0WFJrUGtFcjJTbFFTc0V0VndNdmlrWDNHb25pNGNRY0JySE5KN2Y0bTBQb3c0OXhOTmEtYmV6VWVaSld2NzI0YTcwTnlFSG91ZlJpcHhtYXNIbXdfSE4zWUdtdG84THFxUWdUREVfMWdZNWNrNXgyLXh2VFR2WVd4enJBYmtJbldTLXd3YmJTWG9BV0Y5TjF3dzd4QjdqT1k0NDBkcmhydC1uMTlUYjV4dWlFcl94c05VSVk1VEdSMExmMWc0ZXFRdlQzT09uUVRzcmhNNkdkQUNMOGF6bXE1NlkyMlptT2xtS1NtRHBmX3lDVFV6dHRPaXl2b3FSOXpGbG9UcWVlRWJrZFhfUTZ0OGFZMVJBLTc5aWxGVXZMTHl0QURQS0VsQmFrb2lpMWlyYmM1Qm5CQTh2NUdzQ2tCRHR2WHdTSjNHRDY0TUxOVHhwMkpXaHUweUV5MmlmNWMzVW56Y1VjY2ZQUktTQUtwdnVSTUVxdnlOQWw1dFVkNkVtTGVYV1o3YWhKX012SW1rNmRjdVlvOGJoOVU2amZCbFFLLUZCUVBkNG1VNW1pXzc3MTE3NWJKWE5weEpRbDVnRDE4NVIzTm8zNFVGdXNNSUk0NjBnQ01Vemt1S3pFSW1yQ1ROZ1BER0pXRjlQODNveHJVTmtyVDFBdXJjbnlLamd4SlI0YnExQXJkVURjUG43d0RmX1ZZOENxUmI5QVRwT2xOSjBEZ00xeDlRQlBiN0x6SGFzaTNRWXNFQV9aT1ZaUzFJbDd2NVB0V0s1MldWaTFOZTFUQlAwVFFPTDkyRVRmT1F5TFZpMUlmOWpvT3d5eTZwcHdvdWc2bzFzek93UHFyNTRXRDVXZ2NlODR6ZFZBaDNHNVowWmEtbDlfalVnYUZFWkVkMWNKRkFPSXlIYklTeFZwbzlsb2pJRk14R2V1eTUta19Yd0pJdjB0SUtiY3FEUGlGQnJuUE44bU93eGt5bjl5UlpoT3Z4aWRjaXBwZl8zZm5sQTdPcG9sTG5pYS13LW1KN2w1WU9yTlNHdUdtZno4azVfWTFPSWhOWnFmaUxpWkZ1bXhIekthQ0hrY092cmJxbzNVUFdiSzFoVERXazY0NGpySlVZeUl1UEh6NFM5VWR0Ml9hdkhDSHh6OTk4SUg3ZVpZTHlpMFJpTG9GdjY5MjhNNXJBM3dxdldTeUhCRkxkNkNKcDJoNVhURGJJYlZjS0dLR010aU5hWTZ6TkZYdW1IOFNSVVAyQ3d2MThlTEYtQWVuR3YxVlpVcFo0V2gyN2RQSFRUNU9GSEo1eWI3X3pKOTAwc3RsWWtEN0NfVkZLdzJqRE5BOVE5WDJxUHhIbTIyWlIwVkNGVmZLSkQ0V05VZWpzOHJzNXgwZVhoek5FR1Ixc2J5bXlFNFFDNGRjUlV6d3B0aUVIWUtmN3NnaGU3Z2xVOFBsejVaS0Etd1ZXWmR3cGNfX3NWMnd3WDRNSXVHV3B0SlJjaU1tNFJtN0tmX0daYW5JUnNqcWVoWkRtZHNabnhfSGdrNVJzWmthTzBKX3pQc1RzeTNLQU1nZW42OXVHME5HODhmT0tiM2QwZzJCMVpkcUltRFk2NC1NWDRheTJwVXhaMHUydjBHMmdpZFk2NGlLRlVnUzY0alJoWWtnUlR4aFJ1LXlSbXBXR0s2eEp4d2JfdWhHVjhyYTNzekN4N3Z6NWxTcXMyTEZJRTlGeDJmc1dDZUVPZEpicGh0eFVXcTQ0Q0czN0o3UnFMU0locDdBNWZCTEVZeWFZREhLOWhyLTFWWjNrdkE5c3NJUG8ycllvVDNXV3NPX3lEQ1ZJSlJqcHRadXRyS0NDU0tfY0RjUnIwMmo3QmdnUnRYZUFvd0ZKMHNrMkFyM0JYWXBzc3MtTVEtQURBZ09rR3RyTGZaTUpIcHNORndmM1lxdUhQdFFGZE1VWUNiR084YTNxVTl3WGNCT3Zhd0U5TmdsQXprNk9nSVlGdzNoYXNFbExNWVdQLVVWa1Q2bGNpSmNmQ2xGWV9TZUxma0JrbUxaM2Z3eVc5am55TThKc1pmSXpGa1JwcHpSM2IxMUFTajZxYVJkZURNSVRXcEN4TS14eDdnZlhyLWpNUVdWRVdUTXBLVDBNLUJjM25PYkNpcy1jdnR6eWNHeTRFdk9fYnVMNWgtZ0RtUURYR1pudVJjQWJBbDF3Y3lOVXIwOVN3eDlwYjVtUDIzWFpESmtvNUl3ZWlEVFFQemt4dFo3ajZSTVZHVEFGaHBnRjMtcXVlSnJnMVRUNEU3b0YzYkUtelkzSGstMzM0R3dLaEVsWnhuT1c4T0E3amRDazF6WW91MUc5cnJJai1XYXM1R1R2UmRMaG5uVlNMSDRDZ2xmMFZqZ2MyV3A3UkFmaVdhdTByS2t1SWtsRnNELVNFNEZaUUk5eXM1UEVLMWxzaVRGaDJ4YTdSZFVEbFIxdHpWQjBjSnNfRUtyR1JKZ1NzSmhpWW9UUDA1NXN2LWNwbUJoM0ZYbHpkd0k3UmxXdF9KaWRpZnB4d3Roelk3ZWUwNDVnUTBweHhXZ1I3VjU2dWV6WWszRXFhbXBRSEJZajRSQ2NWSGFvSkhSLUpydWtKaEVwNnR6am12ZS12cExPZlphRk43QzdNT1Y0b3Q3MExZNjFUQUhvbEZnYjdEUVZmQUpJN0ZmZFA1Qm90ZmVkMjVQZVd2UDgxbGhlYkF4dUdrMy0yM2c4RGJjTkdIZXdJRnNRcDZoZnk1N29Wbl9NbGRGcVZDS3p1bnNlZW5QVDZEQlBfU0xiNGJta0VrT25tck1PSGVaS2xQaDZnbXJ6U004NklIQ3hONTdWWHZBRVF6ZmRxaTZ3Tnp4eDVRR0tVNC1zWjE2ajJYek8wNWdwakNQdktwWFRCaFd4dEhDTmdHb3drRlFGODJZVms4NFJWby1iSHdVeTNqRkNGUXdOS1JVSlZZTTFYOEttRExCd1NEa3lDeUU4ZENfRFZtX1JwUDIyMTdLNm1mOC15ZTBxbV9Ud2E2SF9vX29SSFNrVFZNenBfb1FNTzFiQ1ZZRGNKTzlWNDRuQnhMRGJZWVlWOU5qM3hVUHVkaDUtcGlNTGJHZThDYjRCZ3NuSzhIb1BvS01fRjJkWlM5RWg0ZmxYbVNZMzRySm5kM0QtblhBUzhtYWdTSlFPZ1NSOEVaR3RDSVhzazJwaUpXSG1oR3VHaFNhMVJURzBkOFV4NlNVZDAwZEhoZFFwN1l5OERHaGdtM0tENVhSQ2Q1T090b3BMV1dDdlZQUWEyMXc5bzBXQlFmT3ZGQ3BWTEJKZzNhTnc3MVhYZ1dHVVVZdGFLcVZPRF9zZDFkMWh1MlNZYkpCVThyU3pKY1pReGZZT2RNUEFRU0VOVnVCTWNEUDFkOF9TdjQtNUh4czJnTDByM0FpQVhpRmNlVUx1RndYOWJUV1R4eXRIWU9la296LUFoQ09IaXVaaFdVYmtZUTVEdHJRT0o5MVFEVnJSYUNfT3BJbnZIaGxYbVRrZDdiN0lwWktNQUROWjVtYWdvWS1VaXhpY0pIbm1WdlYtSTlxTlMtRTVoaWIzd2xHRVpMSjBCbXgzRjhQaWhEQURVRU0yRTNlVnNlWWlhMHRZNHVpWHU2UEdSRGhCdmdONERIRlpndnNRbkJqXzhvRnNLbVpJWEZTSDlYQlBIVGRLQTU4S0kxTURMS2s3Wkw1Rk1Gdmx3Y0xON01sVjFvZkJwSkJtMkJhcDc3bjB6UXdYbFVfYjFwaDY4ZkxKZkNQWTAzUzZHZkE3b19mcFdfdGxZRm9mVGdRR1lOd1lSR29ZOUdTNUNGdW1Rb0JRZHNpdi1jeDRZMHBKQWlpcHBRQ1ZwMWdyS3J6cUozRVdwa3BzQ1Q2OTdfREMzb29OLXBOdGFHTWNKREpsaHZZdzNoVkQxTnFWd1hmcmpKLWd3anJVZkhWWnpRNXZUZjdhMFM3Wk5sd0RiZjlUMnV6c0I1R1c0VTFvWVE5Zl9lTWFfQzdWMmpLZGtsTWcxekVwRjVWZFB3bFY4VzJVQlJNbkJ2VTNDdkY0TXFXYlgyZS1pdmJ3NlRBdUdocmVveWtaQlZqU2JNWjVQSmlNWHAzNnFFRVp4U0M4MnlKZkFxeWMxV285a1E2QkVzNkRKUHVlak1qZ2tZdmVBTmVURGNxTzFmajhJMGFGRmlhTTU4TUc4LWU1SG4yVnN0NHJENDJrdnlmVFFYSnNTTzRndnlMMTY2RXdORkNnY3JPUnhTYllBWnlvcXhhU1NMTjJNb00ycGoxTFVZS3VXcDNjU3pBOU9CanJBUnNpeXRiT1ZYYUpkOWw0ZFE0ZDZUQmZ1UmNPMzVEcmVpOGxlNmNrd0dwYTIxRFhNbnNiVnBlbXUzRXpsdjJsS1RlRGhyMlBVdzhRMGF3SldLVnZOY3RxMkkzMGxSOTVvbTFkeXFGTkJUMDJ3Z2ZTTTE0TURoZi02eXdsS1ZRWEZhaEdFM1pjYTJKMW9wVm1udEJjSjBPTDQtQ2xldjVGdnlIdzRMNVFqNVAwVENzSzJyVjJkMUVXeUQzZXZBbms4dkktQW1ReHBNcUhjY0J4bWd3a0ZkRzZyLXhvZmJtbEY4Mmc5ZXJIOGZjb2E1bnJycTZXc2NLZzJXaE5CaDE3TWFuM0hZWF8zVFJTd2RHalBqUk83bndXbmM4d0FqUkxxcG9xLXhRZWg5bWx5RmJUcmdxcE9WUERHenUta2J4dlFOTGx2aVd2aGhoOG5VSUFLMHZRRUZleXpyaFZVUGF6RTdwcnFhQjVjQ3BjbW9mc1VrYTNET2FPNTc3LTE5cGFWQUVCOWRMX3hpTWdwTjZOWGRycld4dG1KS01sZlhwVXJFQ0owX2NobU1NaHZrallJU2tNa2dUZVRITFhLTWpuZDNVVjI0NjFwVG9JcTMxa091QlllblJKZWYxS3RnMXRuYTR1WnNJYzkyYWNSTm85UWwxMFlrbXU0aDVlV2tTWWdCQlNfb1pHWEdTakhhclF2a1FiQkhoMlEzZGRJVXJYY2lvZ1BRYjk5TlpFXzdfd18ya29MM0NmZkF0T0R1QWg2V19hMHNYZDR6eTJwdk5VWmxNQ2xJUE9fMmxIaG9PQk13RmxUdkVSYm1SalZ3VVY2Um42NDluM09zaW9Sd0VDbVJLdXk3QXlDNldfcDI5czEwX3VWLTk1a0RORVVKc2lBMndxbzhMQzc0UW5VTTB5UDJseUprOGRoSmY3WjN6OUxVYXJZZElqYjRZT3UxTG52YThiWmtuSUNIS19rTFBrMVk5Y21xOFh6dzRMTUtkbXBIaE13cE44eHpSOUIzY29nT0NWZDhSelFqV2ljSjFvQlpXRUllWkJmWkw3LXZ5a3FXdVBzUk8xWncxMXRHMTNfUXRfcGZLd0N1b3pEdWtMRmVka2kwNFNLNXFXbzZFLVVnUmFfR180WkRUSWxYWGRhcWtPbnJXQUl6UHQwcjA3ZHY0Q0hwT0kwcDZUQzNYRklDYVNNNWJqWGVSeEZBalJVSmNJOF9UcFAyQ1AtaURKeU9oMmxKTTZtWkkxV0VGSUVlNi1ZSHdHSDVtQS1jdEVscGNoaUtROFY1RnloTlFNMmNCY0F4bl9lMjExc0JQc0pXdTBrd0tkMmRrcUVZN2FicEktZ3NLVjRZRHU1X2hoeDNCLTVvS3JMU2Z6ZVFPQ2ZCX21kR3pvZmdoQjJSNjdMNl9mYllxS1p6WE1IWU1oOUFnZnlfWVhvSmFQR0c5U0Z3SkVsOVdnUEpBY0xMRDJBOXJqcV9qZWZUOGdTckN1VDNpLTFDRW5tRHhMckNfM2JocFdaUFlRcDJTQjBIRGlsdXBtbzEwbXluZFlqRU0xamY2OUIxQzZPRlVqYUdaRktxWWhDYWFVcTllNDY0RmNfS0hKRE1nQW5NcVFwYXBadms3WGFyWk12Z1Z6eWZBWFlfbkdoRC1NeUdiY3VFRE5yUmxWN2RKT1FqNG1xMm5tc3dSbGhrT2dMUXF1bXB5R2FvWmRiXzI5NTQ4OHcxT1c0ZXdQYi0zRGNXMHI1dmJYUG9DZUR1T1VmVWpfSEJxa0tOYVE1Qlk1SW5CMjJTV1dRMm01cDBlMndzaHFwWFcyLXFpYndwS3VIYzNOOVVCanJuM2pPUWZSTmNIRmctMHU5WUZrZjViTHFiajJMcVppS0lLS2xoR2tibTVyTC1FeXVrbWs4dkptTlZ1RHlWb2otWVFleGV3M0hLV0xSR1o2bWNjYWpacFk5SlVzNHJMWWxaOF81RlVqNUlsdEY1SFhnSHliX1JEd1BGd2R4enBud0gzMFdTQTVEa3d1RjNDYmpsZEFpQ0NLazYweWZKWkVzQjdCbk5Bc192X3JFdFN4WUFfX1ZxaUhickcwUlpKYmNIMXFreXdNR3l0NXo3cDNmY1k3aWNaZ1F6SnZrWDVKUTdrc1VNR2x6NkFyU1NvV2VzcnpLdG9JV3pMcWZFVEw1WEpwMUVpMzk2ZkNsbmhSRXhma05ZV3h6N0JnVHh6b0EtdzlVczJMYmtDdDlud1h0Y1hmODZKSjM1ZmdENmxFTlhVUDJJWGRqQmNQaGN5aVNZRkZsSXAyeFUzbDdNMzdaNVl6QmpUd3MzbzZTSEt5VEdadXZwelJhbGd0MzNXQlRsQW9pR0k1X3hHNlBleXhNb3BHMEJjSVZjd3oxdWZQeDRDazhxQW1JVEotMDF5QmhHa0VDRUJ6WDZCTHRXT21NNERpUjdjZ3Q0ejZvdGhpQ1dVclktSzFPazNtaWJNc29VWmw0QmRJV1k2eUJRYVJSQlN0b0hZbkhESEo2N0ZubHVZb1AzY2hlclpxLUp6a290NVhMZkpsNUM0SC00MmtmRGF6a0FBSjV4cXVfWHFaLWxaMGlOYU92aUhMNTVKZ1FiZjlpcUhVdXlUaDRscU1MZHdqd3V3OEk1a25adWZmWnZEcHlCdWtEaC1wellGUXU5YUc4Q1ZTVUVBRW1DTzlOM3N6anJEVGthZ2JvaGRVcTVEdDhRUW1fOVptSm9SYUpJRkpBejZTRVJJWFgzemMzMGQxQzNRTzZKMFR4Y1ZJc0tWVTIwdUN0amhROGpSc3JwS0JSM1lhZnhSWHN3SWRPZDRteHp0R29NMzF4dnFad1JHbWlveXdmYjVZNWRKSDdHVF9QbkZ6WEdkM25QRzZWYjh1VElqcWs4b2VtR3dDeDNyVXVwd3RoTkFwc2R0dVQ1MW5hRi1qb21vcDZwd01nb3EtamNHV1hvdXBEVEFBRVFDdFJtRmp5RDl2OERNQTBHU2FSY0RHSVNEX1JLRVJicDN5dVkycldNUjZwY0pmRWFpUElkbV9aU1VhT05qeWhKeEkwa3NuOE9hUm5uTmpoeDVDV0lrT2lIS19BOEs2MEJaWWFKMnNWNVB0bGV6MnhZOHpEYl9EZUdhZ0RiLThGSWJfVzEyM1FFU1BwcHFyU3RHRE5pWENnWmRZSVZmdkwyc1BoSmhfaUNiekJDNVlMS2lSaEZ2LVJheXlEMmU0UW56MnNPVk9kOVJwdXQ3a0N3N01jRUFhZWFDTVZ2aC1wUExkQ2pua3FuUnQ0RHZ0RmNOS2w4NWtSUUtCWDN2WjlqSnRGUlhVdElNaUNrVFJwZGZUTF9BVnZTMFFPX0NmSnExNFg2N1pQTGhCb1BOT3lZMG1Lb3hqbGpGTFBaNkxIM1Zlb3VVTS1jVUhRRGpfLU1jdkpLOXg0cHB2Y25Wd1NVcnBKVWMzOHZzTG1yUzMxX2YwQjRrcjFQLVRMNld5NG5WQ0xhVWdKaGNUTDF6aDNiSU5HWUlBWlJfZ2F5Y3lhX0c5ejJUclJOZVFYaFVPcWFwLXg2aklCaHdqR2VyVlRuV0xkUXZLdGxxakplT3RhcDhlbk1PWmxqZGZZbk5neEtCakNDRW53b3N0R1BFUnVJVW5XejJfUjNuVUM0cmluRW53LUdYc2Z3YWg1QTduLTZPUHplNGVSR2hEdGNLMW1pcUFOUU1QUzZGbjNjbGM3NjQ5OE1uanJXM1doSzhKeW8xdXZ0akVVWGZiNnJzcnFWd1JNNE0xdzVTSHoxeWkxQlJHTTk0WV90c2JJV1JlSlpnaUlVNDRvcFNtcURCRWVpSUZFbmRhU0pITjRRWWc5MENHNnRldC1BNU1vTFh0czRqQW85SHhwbUxsV051TDBiS3RCTzZ5WTJJc2FEU3ZVaXpyOVVXXzdZa2FKbk1KSXhGWjdJRTdUaDNHVEQ4cVJidm9EM1pHZ1l4TGhRemVGQ2NfUDl1QUZBX2lDVkNpcUxVNDk1S2lwekNfWVVmZVBzWmp1LWZEd2laclAwNm9DVVdNZXF0cXVjQ2J5UkV0djY1b2FOMVg1X1BVd2xMQlN5ZXFST3hQRXJSQjljb1hxZTV5QlRNUVJlMnBsVk9ldHlfMjhFMTh1bG5YLVFseEhWSVFpbDZmQWtRUmFMT3Z2MjZPdmdkMEU4R1kyTnZsYXdpV3JfVTl1Q0FpUTJIeXVEa19pTUYzN2pKa1Q4aC1FSFoxTU5kMDFYSzhlQWZDR01xUVhDU2NMV3pXX3FmQnRFNUxLTC02Q2V3WnpCSlNQUzcxc3o2UFQ0eUVmazV2Z21OTEVMbmhWUEp6VGk0OWdyUDRzaDVpOTMtLTJqZDMzN0N6d29jWmhwSV9USDR2bld2RVdiZGdCZzJNMmFuRFg0cEFXVTEyNXpxNG9LcVM1TWdZZVVJbXU0dE5fLTRyb3V2M0R3VkxIODR5MlBMTzNHSkFNc09RNW41YjM5QzFmRm5XOGE4ZDBBR2JGdUdPc1lJb1hxUHR2VUFfcF94SkpRNEpWR3M1REQ2ZXpQWnpYS21haUtXNDQ3ZzM2bTlGYjkxQTRwcFB2TVRyd1Q0X282S2MzTWhYVVFFdXBycDZ6X3puLThEM2lSaks2YzhaZ3I4YUNkTFF5bzBEeUxZbHF0RlNya2U1bkItbW04MFlRd0tiX3ROSnZKSVVZZ1VFemt3NXBNU2Q1YjItV2dmY3pQUzBJbUcxNFY2R3hWUkZTTmhMSTBEWjRTUHBXWTRwQ1oycjRSX1h5TVJZa1B0UTBrUmZCUFljVE90MUYtOWtvZVQxZmIyMGJUSWl6OE5BRVdNRXlOYmRNSWhRaFh0elhXcGc5TEdPWDNUcUZyWnJLeWtxNFFoRWNhUXVXVzEtSk9kVV9WUmxKdE9fbGNfeDVac0ZJZ1JsOGRwdFUyNVZRalcwUDdjdHgxVlBKbEhpNXpMd0oxSFpwVW1XMkxWUWp6Z205Z1hTRWVMWWZBYktENG1qcU1ILWNIdmtJVkhrb3ZIcEFuaGJFaVFaX1ladVQ4c1MtVWp3bGE1RDVQYm9Bc3NpbXhQMlh4UU42UmV3bFdqc21KZ1VEWkYxR1kzVnhkQncwRmI0ZmRHRGFNUlh3N0M3a1Q5VGpYaUI2THlPUWdrSjVWMDJNZW9Tbm1hb1lGVjBlTW94VEg3TlJmZjRtTmdwbm44Tnk2VFFZcXVubFNqQWJSWWFvbGdzTzJCRnNnLW5LYkswd0lHZTltTC13eS1WNFNmRzI2ZmFZMEg1WUotMy00MlA1eXNSVWNrbVhCejlmRGU0amRqR0N0aHpxUTh2M1JRU2xDcEtjXzFvQkhFX3QydVZqN3B2Ni16XzZ5VjFjQVZDdEFZazE5OHcyNm1QejJvUWJHaElPam1LRUlPWTM3MVhyX01KOTFTLWt3TTNrY2tva2pBYnBKSzVnSkNHZXVqWFlsRHU2OGs2V3VGZVEySU1oZXMtbUoybDVfSDhzdC1Ea2lpOXVGWm45aVVsd0VpMWlLY2kyRDNVNjhtRG1PLTVGMFNwX25CYjVoRWFaMk9qdjYxaWNWV1FXNl92cEFDTzJIaFF2blowbm9ESFJVcmVVSWdhM2FhT1V4T09vLVQ3Xy04bnhheDk3SzlwRC02cXdTWXpfaE81bThBOTF4ZXZWRTUtSUMxTDBvUTFUWXJQVGNVdFNHdGJTNWg1UmY5SU5fX3lMN1Eza0dndzBPVFFjUDAyZ2dGaW5FYmVPOHctemZONGN5djduRk9sXzl3VVlTeWQ4SW9FeGpxUGNWVGk1UXpVRmdwN3RRY0dobnZXWl8xOWdDc0RPZWpZUUx3MnhKWU5IZEFlTWV1OF9FX2dITHMtWlROdERDYVl4Z0VRc0xsSWdDRjlnMW94YWl0STExazE1ZXlFejJzbkEzSmNKYW02aUpLRTR3cXVwMlAyLW5IMFpOWUE0bEFZakQwVHU1bjJoTVlrZ3A4VWlMNTFaNVl6bHYtSlFic1FuLWd2YVlJN3p3MUpHMXhGelBLSVYxZ1I5Nms0TC1KZ2hwUXhPbVF0X2FUSVJsYWlrVlZYTEVvX1hKSFAtV1ZxdG95c1NZb29Qa0JUU1RzSGFvUWF2ZXBBZkptSlZVem00UTJ1WGJZZkREYTV0Q1lTb3BfSzRIYkljMDdYRnlpR2trTU15TlYtVGhuRFFCMTZadEhPbWNBU1c3bW1BNURoQVFHREFocXUwWF81WXhaTnFvSUFGaEVFWEJFWTdVOXJQYjdIMnBqWm9CSktDTFVIZ3ZpQUUxenhTT0EtVnJ3MTdEQmtnYnBnbzAtQUNNQ0l4anAzUEpZX3RFWXhVQ3pHZ3JoSDdSTjRwN0pwYTJRSnFkdlE5TjNxR1FmamRJbWZJaTh0eEZhUTRoRko3OERiODVHSU1UUmJYSlY0eHQ3VXlCckJSQm96WU9EOU9DMHR6eDJGOFVac3pQRWtzbUtGdjZBQnMyMW5Id3d1Smc2VXg2ZllqamVJWWdrSEg2UzZEVnVHQVRlQWluczZVY2tNSy1YRnJRWS1naTNmT0FPUVpJTzBzMVlLdEFybUZjcldwZDJHdGNKX096a3cxbDBPVkI2SUdKN0V5R05CNmJ3S3pQSUxSb3BmSnZPMXFJbDZfY3JmV2o4d2N2aEstQWY2OUstWDd0bnJVdVhNUDhMN1hNTDFPbjFacm5jaENyTnByZVlHWEtYYzFTU3JXZ0FGM2llcHFtakxIU0lLTllWZEdIMXNMWlM4RURmVC05VlRISHNla1p2ZkpjYndfTW1jU1NWb3kyUEFNVjVYLTdwaXExcmk4TUtaR1BNRFBoRC1oOEM0NFJRdzM1OGU3UXIzazhwdW5VV3ZIRWtHYjNIODNnQkh1SV9kTllKcjRVWEZRQ0ZFNjRNLVZXQ0Q2UVAxMnBjdk1mTUdUdU5jSjdYMkotS0pudXVlSGtXb0U0VEd2SVBMeW5TdWVXT04tYURqR0RDaW00M2dqaktxSzQwV1EwTnM2bWpCajZrME5WWUdCcnE5Mks2TngtT0k2dUlmOWFpVGZCc0xxX05NWWp3NFhzOV81TV9jWWRyb1dZZTYwX0QtbGlxN19rSUhHbzFCX0JIaW5jSnUtXzZaY2VoZnpEUWJCOHhxNURJek4yem5LYnhYdnFQYjNER3NPR3Z5bV8wWVBrU1lqcndNaGJvZ0RPNHNtSjVCVEJHbU9ObzJRbTRJVHdYY01MelR1QTZvcWtQTVdlSE9LOVBnbDRWdWJoMVRUaHM1Qlc0ZGZkSWc2NWxZNW9yVlJ4T2E1R2lRa19pWS03SnF1QkNMQnY4XzVTVndxdk9ud2Z4OWs3d0hiaDUyV0NhaExMTVNrWkZmMXIwVzFLMzRCYlltZG5seEp4a2JtcElId0otZkljTXNyZldKelo4RDBIODg1V3JlRkFVdU1uQWcyNy00WlM4TVVrdmJRbUpmOHJCdVNfTjc5SXRIT1pOVTZOcGpxX2d5VEQ0QU9VUF9KcXlOSGVVeGdaSW5JdUxUWFE3RWpzSm96VjRxTEJ4V3N1bHFxWjNUMlJibHM0N1VwOERaTGRjNTdCcUNwX0NMMUM3UG9nVDJFMWtPdmF6UFd3Xzh3V3BZMGJQWURwLTZqUWgwUWV5b0pCNmdGUzR0cVdZaTZYLWs5OXI3U3REc2IwOEZyUDR6VTAzYmJTN1dPS3REbWY2Rmx2d1J0eXNWNklES1ExaVdDcU53MzNYMEM4Z2hmV2czU2tMV3Q2UFVWdzBUN1RiNTVza3FMUUhLSmk1X1hIVjNPTUtWakFoa3Q4MFFWZFprQ2RYRG5mbzZ0Nm9OTDY1T1YyY3BaTW5wVUhtcnMwa1BFNkJUSDhiaTlzQ2JKM3ktT1gwaVB2bEVhaXdvdjlqcnFPR09NQlpWYTFVcU04cjhPWllaLVZMV0x3YVlRWjBteW1tZFVzWUJaaXRtYjM0eEVfdHhmZF95WWhWM3dISDlhX2NMR2E2cFFsOURJZkJCRE9fcmY1eWhpaVRHNElUUThXdml1MXhjeDRrWU84cHZ0Q01KRkNoRXpQZmJVTmloUWFaMURHM2J2aE8weEduYV9hQjQzWE9kQUEwT2hpVDZTcWJyektqdUg1bWJDck42Zk1OOVJ5SW9ocTZqZlJrYzByZGYwNWU5UWkzbXR5R3JQdW1MWU15YmFiWUtBbGlxN21hWXcwV1MzMEtsUi1IYUkxSFZhN2E0VTNxUE8xMGVybzJ1aE5qeXowX0hXT1BsbFZEdUZ6dkpibXFDTVE2RmRXS3doWEpLUDg5cjRxeEZvWjFlNkxXVnRfZWR6OU1NNnZUb21fU2NxSTlHU29hUlRrOWhsb3Y3M2wxYy1CVnN6S29oZGcxdXRBb2o3T0QwWE9Nb2NzYXJRSmFkbWpKTllkU200QzE4dHhSVS1lVFM1RWMzN1pvVHhmZmw0eVJ0eUE5endNQmU1cFZRZkt2STljaWhwd3lZYTdnU1pZV2ZTaExSaVNSSW52ellLbVZzSTcwOFBoTXdWY2ZXaHc5bUhJX2hTVGhsdUtFbjQ2eGxHcTZ2RmVyWHNQZnFQLXVFM3RCa0YwbkRxQnQ1Mm1uRDdQRVMtVktTVVQ1Rng5M1NkRWpMaktUenhXVmRERmpPa2I3RnpWemxQVnNycVJ2a0pmVWNNQzVEYXgwS0VoYzk2ZUxFc0R2dDBDbi1GeXotMEJlOHBjQ1pNVXo2aE03WW95aXRJS2RhSi1QVXZQRnd0dVh3c21GYlhEWVFzM3kyUll2SUxvakZpUzhQdmNrMnpkZlg1WTBoSENzWG9BSTFLS1ZhQnBFZ0VQZXd2Y1k5X0hSWFdXVzUyaDBYZ3A3UVBYYy1xTmpiSEhmNmYwOHpBMFJhNlkyd0ZqMXMyQ3FYTGh5VElOT0RVLW44X2FyZGxXc1cxWXQtME5XUlRQblRHZkxaZ2tlcGhncHRIMktiV3hMWUJLRi1SbWxWUDF2WVRLdkJyMGswQkJEN29MaDN6WGJpNjZobnZHb19VT3RsbDhCWWhZYkRwUGx6eUhSalRBUlVWTjNIT3hLSzdGYS14cFJNNEsweUtoMEdNSGZPY1hGTlNEQW9PaGhkMUNyQ2ZBWHdqeVg2QUZCQ094TUdHNFM1eXhHVlZrVzVPalAtZ2pPdzM0eEphSExVOUNQY05BQloxMWh5WXdNQWg2TVhxdzVMbVBlRzVkSzBva2RBcm9PaG1CNWVMbk1hZS1Eak5fTURMTFpLd0RObnpWUHJhanB3MlB6eFVXQ290SHRoeDQ0SGZ0ZVhGSXB2WU1UVTlpWlFvMS1lOEpTZ3ZFWnlRTWl3blBybnVlREhTcWlCRVJkZElTNE8xQW1wcnN3WkdLZTFQZ2VMRnZFMWp6S1RoWlBsNEwyNmNFSWRILWZGY3Z0WDFNS3dxUE11STJONDZQOXM2UUJwRkxoSlN0UEI5aGxjMnFQbEtSSmx3YjZPaXRpV2ZVckxWYnUtelQ3RjZ2VjFuQUhCVy1yUVlsV0VzNmFKVjJ6RDMyWVFfdXNQampGNW0wdk9qVFhLS0ZlM1EtdHhBNmlpTFg0dzcwT3NqeEtJbWtSU0ozZ19lTVlDc2pwUWlnYnQxSWg5MGFiYmlVWVphYUNGck80ZW0xbXdiNTVxQVRkWHNLSEU4UGd3dVJYZ0V3aGN6LVdXRGRnVFpRTGkwQnk3N2ZuVVVaUHlSNmVqbXVFUkhqb0Jrd0d5aTh6ZkdFcDRyREQ0T29EZ0J4T01XTUFQN1cyS1Vfbk1tSVJYdkQ0Yl95dFpfTmoxbDM5VXlqWThJUXhGVHM1Z2tTYk1lbVZzRG1iSDI3cEgyWWZ6cG9jU2JBVS1PLVVrWC1waW5md0pyY1NWNXVCWXJqVDZtdzktMTRYU3pZNVg3WlNXcHNLMDVoM2lHZHVGemZCemF0Tmw4VUhSQ3dLMzVKUHMweG8zbXlLaDVzU215Q0FEQzBwTzhvMF9IcnY5LUUyZFkzdXRYTUZZUUo1Wkc2RFlNNXNZd0xwWTU5eHVYbjUxUWJ0TmY1dGt5alZjYWxiR2o5VjJoNTdTdXZaclBaTU01SFZsa2ZCOHNFSTRpMnhoTGVUV3V3Ri1kb0wxWThybW9vaXdnRzZ4eWxDMTNrWGsySkZDRTNKQW5Sa1VQVUl4SWZZVjdFVzBybl9Bcm1EUVJqdlRMN0NlWlhKOFV1aEJfU0JRUC1XMlc1YmJQZTFldjRwTjlvcnNsQTQtX25OeVBRUm5MMjBXUEZ2RTZwaFZNVFk5SVlMcmFJZlZONkg1cEkwazRteHMwUXpKT2NfUTFKXzdTWndaM0VUb3BJd01kT0FGZUt0bjRNYWh0S1h6TGo2ZnoyeXZYNU1uTlZ4MDRjT25LTTduelU2LTdtTlFzeWZXam54UnNwNzRkbGp2UlQyckxJZUs0R3dQMnZ6a2YzakZvbVNZRTVZelJJYzl4cW5oVVJiX1ROc1pkWU96QzJFbnZpMFhBT0xiTk5zbFJiSzVfYjVveDJNMlFMOWxJTk5HTDZRVVc4bjV2dmgwWUxnaTFoMTlFX2gxaTJ0TlhGay15RE1KcFJ5Ymo3cHo1M2dNWktZZFVRRXVvbG5WRWF4VUN3Z3h6LUx3bFRfRHVZX0lKVHktTzNGZ0o5LTVuSE50ZzROMU55X1dLWUlVR0xESmZZamdWYWF1VTRtZkpOVDh4VHA2YUhBNDZ4S1NSV2pXMmtYMzJyNU52TXc5UjhZQ0IzMlV2aUc4MFhuQ0hESkVkWEpsS3FTZTVpbGlMRzJFWGpkUW42bVRQc01SOVp2V2JBaE9wOVFQdE9OSy1WVVF0aktXaGhEMjVfdkM3VHpSN0s2V1dVeG9HUThvSlVEOTlva2RobVRPemdLNlI1YlZpanFhQ182NV91V2dTUzZCMV9kTHBUOXJSaUhXaXdKQXRudkRGeGktT3llaHFZNUs4TmhFcEkwbER0TmgyQTBxQUN4MEIzOVJWZ3VNblFaUnhmWmhUdHhXSUh4a09TTlk0WkRNZ0R3ZFFPZmwxdFJNeHFYbjVqV0NmMmlNLXNKMHJJMmtGMUVWdHNlYXdZSTk1M0oyUlJIdjJ2czIzUzdvbmlfZDNvTlB4MnJ2V0lWbHllSDdKYXAwYmtMbU1SalZLOWs1c1FEdXFTZ2NJakV6R2FvTzY2TjdsWU5xV0xtRGlGdE9MV3dCVjh5cERmZVJMTl9kdmszeE9SWGlYUFFCTkxnNlYwMzEtVF9KdVp2YmZhRlZFNXVKQjJQTlE4MFB5NUxfbHJ3ZzRCWVE3N2pfUnkxSjd5RkR2NXVoaEZIS2l0bXRuVVhpb0NNdHRTVlNENlNCZkhwUlN0SEtEYnBWX1UwQzVRSEdPOFlQRWNXRGtjWVlncGZXZGtzd1VtaVZmUXVYQlJBTV94V3JqTVNvaUNIWi1OUklqWlJRamIyNGwxTE04TnVOQnhTSjRGWDdIUjRmZzd3NUgwbDNDcVBQWFJ5aEZ4M0VqZ1pMT1VIbGVNcFNCWWFCLVJXQ21UcmhGM3dEM05vcTlXNkp4SVVTQTBrajR1SldlYVk5OHo3RmJBbDk0Q190ZkxJU2phcmpINnNUWmZFMnptcnRsMThvNmFacDdOYW9qNmt1SFBobmh5Rk1qbUZKSUNtQ21Sd0R0V1lRVHdvR0kzSmtadWpUMTMxN1hRbmF2S1R6dk82eDJ6SW0wSXdiZzVRNmdwRXVhOFJSVzIyQzJuZ2tPSTVWVVRsLUpFZS1iM1JoaEtlOFJkcUlwZmNPWnR1ZEJsZ1J6MzRmbTZoR3ZCdUIzRXhicWl4QzBvLS1kMXlSOUhXalM5QlVQMzBJOXZXXzhLMDRfS0N6ZW85c0VqcjVVanROSjdINTRtWG5BbWJHMVNXRHVZdGZLcEpuZFhkdmJlT1RuTUVjT28wRkNMLXhlRlBmRUZ4WWZoMzNmeUJSVWl2QzlBSmpNcTZ6NHV1RnRvZWVFdHU4b1RQZjM3UHFMZm5GTFRUUTZ0V2hVMnRCdzJtR0U3UE9kaDBsTzhnQVNDak0tSVFlYzctQjBTVHFCMUVvdi16b1RvNjhDcUhaeUpJWlJJOWxrYTIwUUQyNXk2WTRRUHFnQ2JBdWY5amRneWpVLWNLcjlOUFBtTUVrVjVoNURaU2hVNzNKV2VxNm1UTzczakhfTGNVT3paWFZ3ZzBCWWgyQVpyUS12em91V3V0Q2hBM2ZGSUFWN0NYZl8xcmR6ajRhUWxZUU5zb3ZyT2ZTT3NzT1cxdmdFLXAxY1k5Sk5qWE1UZXNNYnhXYmFycXU5aHFxX2ZNSXVRV2dNYUVqTG5Ca1NhSV9HYWRFM0g5VXU1Q1p1LVh1OEdWOURmQnowUi1LMk1ET0hPTjdhNUhnNk1IZllkLXhKWnJwS0xwWFpqd1BMeUY3OWYySzd2Wk9pRHJMNWJWcXlXSi1SR1RmVUI1ZU1XWWlwQ2I1NE5BOGlMZGxsLWxGTTBrT1BzaENYa1hvdHlRdGpjNU5MWmtCUl9QbC1kSTZwVnNNNE9KU1d1TlRveEZKN2RxQzdZNnRjNGk2Mm5ZU1JsLUNhYl9XdU1IanRUcVZ6cXNrMkpnYXZXbXhSV1JDN0YwR2VqaF9ucXMtdUxDNHhKSkI1dHhsTEktQ2d4bVBWZDlRdmNiVTlUdnd1LU9jNkRlWmg5LVE2a0szd25DZkYwQlk2cHdSMzRPeTBXLXprekp2ZXJTc1VoZGsyQnliUElBenRqeWNmN0YwYkNNMzB6NzlNWE42ZVFtZFEzejN2SnRqelNaUnlOTndENXphNG5nUE5vaHV2SURweHhlZ3dGQ01MTTJ2ZGdCMTNkMGRHcmRWZXFOYmhCS21uVG90b3RvMldwT19pbHg5X3hvY1dxei1LaGNOWFUwY0ladl9QSE1xYTY4RjVBNy0xSzhyMkgtSF9kQmVUaHhBSVhFU2pZRDFjTEZ5Slg2M2oyNzJDRXptSGpuTUU5OVBVN0pZWnl2RlR6S0thUzNTcnpIaHZwbWxWRGJ2TmIzMHRQU2tkN3FBVnpBX2syYmxMSjE0R3pHTWllOXkwRWVCaGlCZV9IM2tGLVFTUGhBQWthamVvb1RHcDZPdUttWnlUazRyTW9MX1FhbzU3am1Yd0pPemdkbUVkUFpfZzBOZFZ4WHZjMGVKUUpZQzRKOEdLOUZPQXRTX2hkT29RQVY0U0lSS3M1YXZiUkVuS21pQjVKZWl0aVR1bXpDMEFHQlhUUVJwRXpDX0MtRklvTGdZQkZjY25sVllDU04tai1KV2h5NjNzazJVSmZCbnF6bzQ0MktnSzJJUGJ3Tm1tOTRoRVFzMmo3aW1zNUhNOUw0SXYxQUJGVmQxWjdRaE9SbjJKTjRJanpNTUFKU1R5RHp6X1dubGNPSjhCNkdZWHcwQXZfdDE4SWJSWlpEVDg1djU4NnEzTFdRMmhMSGdGSVAxaVV5X01KQjFCczNfMHMtYm5MUkVSQ3ZnY1ctSjVQRVZMZXlVNXZrWmlNcVZoQ3JJclhIRExZMU5uMEl3bzVrOFBOWE9DbFNHeTY0ZGJBM1VQNExKWG5YdWdnYTdoNEI0QVZzelpzR01zaGNtdEIwbmt5MjktZG9lTkZLUHJ1X09IUlhnckJYYTZVb1RvdmE4c2NfQXhuWmc0Tk1maVhfdllGUUdhMHplNGY1VW5od3daM0FQZXpUZGd6LWhva0dMSVFBRmc0Uk5aQ0dKbVU3VUhyekh5U1ZCaC1JaVMyRldkYldId0h5b3R0b3FwWF9PWHlWUGNlY0FKbzAxTk9CVWFscjV3aVJfb1lHV2hFemdaZmJaUFNWUUlycGROMnZmbEhoODVNY3VRSXVra2tUMXpsNDdjcHdHWEwxbnBuY0EwdEhqRmV2NG5nbXFVM0ZaQVNSb1RiUGV3MnJHVHRtbjBpRDBOVHZkM20tcEJ2VnVEa1MtLXMzMi1NNFQ0eUQzNzBEbFV5bEQ4LWtQN0Rqd2F4N3NyWmZZVnNYSk9ScHdQSVUwb1p0Vzk1MlJOcnhTaW5yM1ZWVk4tV1RKNFpFSEtLR05PbGpZZzZkeXB4dy1PaHNSRUZQLU1lYkVJZGVqQWExREVBWFpnbjVMRHgwUjlfY2ZzMDNWZGdNQmV5bG5rYVZCMlJvN3hQUVhnNkc3ZlBtcUsycUxJbjZCQW1XZDQwblc5Y0JLQV9uQnJ6aWFuZHoyUE5lTjV2X2Q0M1p2eFhVUk5wNXR0SG1iY3NPNUx6QUxYNndZaVJIWmI4bjd0UHo4bHExQl9FN0lGbXl3NHFxUk1kaW1rcXRDV1FzODNHRnFjekFGanRzUW5VLXpzbUJJdFdjWUU1WElMcmNhdjByRXY4SVFKeGkwWE51blVWMi1DZVpTR0RFZVdTVlIydnN2Z3hOakh1b1lUZl8xdXBmNnlqUWtvSWE1NjV2WTRjRzcya0ZjWlh6Vlg0ejlxdVJpWVdMaTRzcGxobG14N2ltUmN4YlU5TWRjTWtfeERTaTdVMGZKTWJLcXQ1dk5GemZpbkF0ZkF4c1B0ZzRwdW9yMTZ1emRtakV5ZVJscDFWV3lZRzZPUUQ0ZWxjUEVfRVVYc0t4VENlX1FIZWdZNUJtNFc0QndkVEJnR3plUnptZ2M4dFQ5LTJQWVAtcnFJT1NwR0k3NkVrU3hwMHNMamRJQ25lQlVNU2t2UEdCTGxJMU9qT1RGQmFBQ0VKbzlnR2ppZDcybERFUzh5UUJvQ205Q0dLSF84NWFJT0ZQVENHSGVib1dEZl9TUnQyblZsY243NzNIbkFITkVJM3pzZ0ZQRXkxelE2Z0xXTVlwQ29ZY19XVmNVZUt1T3NILUMzc09GX0NfVmZFLUsxbmhyR3BBbDFKLkxmeWNoRUh4U1pVNEJNa3c3U3QwS2c"}'
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '43148'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/restore?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/restore?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/ecc00e33f5684151bc5f9441bb5f33c4","kid":"https://vaultname.vault.azure.net/keys/cert-name/ecc00e33f5684151bc5f9441bb5f33c4","sid":"https://vaultname.vault.azure.net/secrets/cert-name/ecc00e33f5684151bc5f9441bb5f33c4","x5t":"2vs9p4v5OygfSXaDl52GnNjHMqY","cer":"MIIDWjCCAkKgAwIBAgIQYOOVzyRsRM2eW70s21uVBzANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0OTQ3WhcNMjExMjA2MjM1OTQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCyS0+ZYIO0cGfzosQv3tx1uk7M2Zo8SJRsGNCZGFitaB9d6LlMGXLb2EC0JeeCibnvHQYtDeMC/i496iWYdcHvzOdgLzbRbrg+IOSzkHoyu/9pSFWJKLFR3FF0Z6uqMfciqGjud7EpVywChiuFR+2BbuHpTNjjpHu6rdpDjjNDcgtf/1aYUy9WJf8s+S96dA6GJ0J62kMqUzwmfwdxkLumzX7w/Gy4OfTyUxiaY6dHRb93PKgiPFutcgKnV05aiYtMMpMtBDKipGJkBQ5YGss11Lxs+lNGQgrbmMYrgzvKDEzGuWRD19QOB0pdZipFeBmNGDeZlMTbhv4ogSNpUoR9AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFM6uo8gjCy1NdtZEX40Nh/36qMXqMB0GA1UdDgQWBBTOrqPIIwstTXbWRF+NDYf9+qjF6jANBgkqhkiG9w0BAQsFAAOCAQEAcS8R8XlFDGjFCqw0gCKlCPTIL0Cm5GvlfeZk2uDHYsSp5SD+byG4LIv2ZfHw9whpvO50wR4k0LsJ/yXWQBJaOTQva9791vw/kVQHNNM0KOh6rKN8tWfOqAL6hcXqiVbWWSqdljqswK3SDn0kgUeKreJZsKQs7sTwxyjlrxREp8VyucDhZKlU6B5enMnYmkEHEYsjmXIM6p9kXk3X9P+GBRk5QmlLcLTsE5yXc2DZyB0suXVsgUIAyfOHHdgFesImZSJJFXmvQS+tn98VTJhS1OSYiQzwUNO0HhEoMj2beUDRECSR06XRKr3kQnWh/Kc6n+jDVMi2JO+ggm/iEvBR5w==","attributes":{"enabled":true,"nbf":1575676187,"exp":1638835187,"created":1575676787,"updated":1575676787,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676779,"updated":1575676779}}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2280']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:55 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/bb3c9a546a90407685aa34c7dc2af34f","kid":"https://vaultname.vault.azure.net/keys/cert-name/bb3c9a546a90407685aa34c7dc2af34f","sid":"https://vaultname.vault.azure.net/secrets/cert-name/bb3c9a546a90407685aa34c7dc2af34f","x5t":"-a8CWR7INdL8UUmsgI7oxSOW0jw","cer":"MIIDWjCCAkKgAwIBAgIQYALbXqN2SCuxIbPmBBt5tDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1NzUyWhcNMjIwMzA2MDAwNzUyWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCoSPio9RjxRWptEqhx3wPtpdCHOARzGwtI+hBtxQXcRQImiYzCRJcWdBX5JNmwqjE11ff0TqYpmmWqxpxozW4/3QCv+dSeBxidQYt9SJG5knNqsGhhwa9Da/9rPxb7lxVkfZWyET/LbDLNcSSk7hRDhqtjlW2wum0YW+JWcYxiAKrPaq4bZBUzhBruM+Xb4Usb1WPWgOwdxG0DoNEUAa7303PdulC85wKAi3YJkLe1lpgpz8tfqSvIL44GXeDzvLoiJ/e5gsXv74MPjrmlade3jlTBCtoYW1fSFy9anZiQiM01o0aibjDmCQUzJHghlG+RHBrqb41S1xS9CxJFzQJjAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFIhZBouOQjohmU6Z91vEdqn/FpWLMB0GA1UdDgQWBBSIWQaLjkI6IZlOmfdbxHap/xaVizANBgkqhkiG9w0BAQsFAAOCAQEAZn8ZXNyaStDGuewLYXhODKzl9W7p8WlHTiMp9srVv8e28UpJ33fUtxDYqrNPa2+nLk6ruitm2EogHSpwJEA2BvGL2jOF8aiBtpw/uz0Wms3P9Cw4UARC9L80jnQUjbDqs7wQG2ISuJCrk4CpvoF65t3fb5QkmlXD6WXnSWk8EUscP4Qxd+MaxEijftHjBEobO5vz7BJS5bTo7zm0qJ8qs1bT/3eZ063rFQEIlAufvHeQ7yqsX5VvAweN59eDYFLuwYypxusLfdfmWR48rbPPaV9Pt4KNsKP4FCr4uBZRCmBwehpR1nCRo4q5gUZL1jcRWbNKRSqJdrb4TliifiKF+g==","attributes":{"enabled":true,"nbf":1583452672,"exp":1646525272,"created":1583453272,"updated":1583453272,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453254,"updated":1583453254}}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2280'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:07:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_crud_operations.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_crud_operations.yaml
    index d8569ab1d684..e657da985972 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_crud_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_crud_operations.yaml
    @@ -2,266 +2,564 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtL7jNTA9mZcMSFqAv0oOteQCQqHTzh61fyAPYOdvG1m/oiybNks2VAnfJ/jPuzONG71Eg0lDSSCYCnM5buBEJnI2qi9ya8V+MPT84v0h7doGSky0CHyHYrGdtYsISL7uJy7/qWizwxCux14+m8ApdpNHkCbpUwvfzpzSV3LnxXxueCNBUbf0lAGg6hsq4+CvusjodYhtarP8lmvmHu5nACKCxFaXpwH9Geexe8FDUGUosI0bvfC+EeuX2t27N+dSeOFYoEyKdMoNfnJKDmvAqEkG+MEGCeCsFn28GcSQGvcJI5UTPSy3E18CmMUyJ7JhSVQwITBpFqFuQCZW3nFH2wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAIWxZL2IQ1Ac6G9V0Nn9F/ibAKsHq7akoLwO117UA2TaIJGBu4oQmdmYCCeMEoHaW9tuEWLneN5RATT/70s+zxSyG9f6qabnwz1hCLG04eK+dIs1F3bujD/Ll+NUtJzNUKJhd6ilDNtf0AejIerpIuBlxUjfAUlvRqQdXIuHmp/DrBQ5+Mdzvj3ZTmalfs0X2LhC4t7w2lCUeG2r3JYqEdnRB/jxjaZWEDRGR64jD5dS8QuYnmwu99ol1hTI8uZ6QzUOtxJ8N9kH6S0QdLjjEtjIc1818t2/QpRRb9WpK3wxQYozgwhthgcuFiOSWSzTkClh5PvPo0/7hvaFkq7cjlk=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6QYUJLr2B/XLKk1JvpLhErlq147j/DGDvtxXGMSyDkqs3nXqx8lqUjmNCiaQ9ktWCgRzIb/yAQplYedcZUpG7/BHRqZ6qRDXuQFDl5hDEKnUdTLccxzvGI2dpdTABRZqxzoXl8YcrSfqjCZTd94kPpEbCnQ1uhkpdnFRoVOKl9beHH999ZycXqh7FEsF6JbwCkHDZi5wjC0P9Kwpjdhi/MTN6qwgxwVUhbc6SjjCO5z33u41csD1WaLm0As38vKeISBSbY6DrPIMb/LgBgiJcXwZSE0Escu9a3HpufmOqg6pRa4KZ8rtwwifZz3eFW2PhUvb1ioTL8v8qehPX/LV+wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHPbutcD3R2hDq11Rh67R4VhjizT6WVeKPxMIsuoYJbmYVaPo8vdCvzGuAGpHW/hyxU726V378TBTnUygh3M+E8yspHZp2mAJIY6sL6fQKElMnxpHHjk9yuDw8r16+oBR8/1SNt+KkyCNn5B/Yru6R3Us5ly1IZGSayC9IOdp8/GND5zfGqPz8Ijq7aHqevYvyGXNDE6KkvTdroYQrP4SKRzHXX5cHnPs+jtjqsLV9meq9NRCwgrAnLVGM27SKLUsaJl6pQsLD3RpnCXB2cJdJfHO6MJrwZpLKFUeOdAqx/GVaN5dr071KxJ8jsd+ST9uKXCd9pIQaiNMNhwIYjrMA4=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"887f7930088a410892c7331474191c66"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"b90f1763c04540e5b1ce5e16cbb43264"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1343']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:35 GMT']
    -      expires: ['-1']
    -      location: ['https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0&request_id=887f7930088a410892c7331474191c66']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 202, message: Accepted}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:33 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview&request_id=b90f1763c04540e5b1ce5e16cbb43264
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtL7jNTA9mZcMSFqAv0oOteQCQqHTzh61fyAPYOdvG1m/oiybNks2VAnfJ/jPuzONG71Eg0lDSSCYCnM5buBEJnI2qi9ya8V+MPT84v0h7doGSky0CHyHYrGdtYsISL7uJy7/qWizwxCux14+m8ApdpNHkCbpUwvfzpzSV3LnxXxueCNBUbf0lAGg6hsq4+CvusjodYhtarP8lmvmHu5nACKCxFaXpwH9Geexe8FDUGUosI0bvfC+EeuX2t27N+dSeOFYoEyKdMoNfnJKDmvAqEkG+MEGCeCsFn28GcSQGvcJI5UTPSy3E18CmMUyJ7JhSVQwITBpFqFuQCZW3nFH2wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAIWxZL2IQ1Ac6G9V0Nn9F/ibAKsHq7akoLwO117UA2TaIJGBu4oQmdmYCCeMEoHaW9tuEWLneN5RATT/70s+zxSyG9f6qabnwz1hCLG04eK+dIs1F3bujD/Ll+NUtJzNUKJhd6ilDNtf0AejIerpIuBlxUjfAUlvRqQdXIuHmp/DrBQ5+Mdzvj3ZTmalfs0X2LhC4t7w2lCUeG2r3JYqEdnRB/jxjaZWEDRGR64jD5dS8QuYnmwu99ol1hTI8uZ6QzUOtxJ8N9kH6S0QdLjjEtjIc1818t2/QpRRb9WpK3wxQYozgwhthgcuFiOSWSzTkClh5PvPo0/7hvaFkq7cjlk=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6QYUJLr2B/XLKk1JvpLhErlq147j/DGDvtxXGMSyDkqs3nXqx8lqUjmNCiaQ9ktWCgRzIb/yAQplYedcZUpG7/BHRqZ6qRDXuQFDl5hDEKnUdTLccxzvGI2dpdTABRZqxzoXl8YcrSfqjCZTd94kPpEbCnQ1uhkpdnFRoVOKl9beHH999ZycXqh7FEsF6JbwCkHDZi5wjC0P9Kwpjdhi/MTN6qwgxwVUhbc6SjjCO5z33u41csD1WaLm0As38vKeISBSbY6DrPIMb/LgBgiJcXwZSE0Escu9a3HpufmOqg6pRa4KZ8rtwwifZz3eFW2PhUvb1ioTL8v8qehPX/LV+wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHPbutcD3R2hDq11Rh67R4VhjizT6WVeKPxMIsuoYJbmYVaPo8vdCvzGuAGpHW/hyxU726V378TBTnUygh3M+E8yspHZp2mAJIY6sL6fQKElMnxpHHjk9yuDw8r16+oBR8/1SNt+KkyCNn5B/Yru6R3Us5ly1IZGSayC9IOdp8/GND5zfGqPz8Ijq7aHqevYvyGXNDE6KkvTdroYQrP4SKRzHXX5cHnPs+jtjqsLV9meq9NRCwgrAnLVGM27SKLUsaJl6pQsLD3RpnCXB2cJdJfHO6MJrwZpLKFUeOdAqx/GVaN5dr071KxJ8jsd+ST9uKXCd9pIQaiNMNhwIYjrMA4=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"887f7930088a410892c7331474191c66"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"b90f1763c04540e5b1ce5e16cbb43264"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1343']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtL7jNTA9mZcMSFqAv0oOteQCQqHTzh61fyAPYOdvG1m/oiybNks2VAnfJ/jPuzONG71Eg0lDSSCYCnM5buBEJnI2qi9ya8V+MPT84v0h7doGSky0CHyHYrGdtYsISL7uJy7/qWizwxCux14+m8ApdpNHkCbpUwvfzpzSV3LnxXxueCNBUbf0lAGg6hsq4+CvusjodYhtarP8lmvmHu5nACKCxFaXpwH9Geexe8FDUGUosI0bvfC+EeuX2t27N+dSeOFYoEyKdMoNfnJKDmvAqEkG+MEGCeCsFn28GcSQGvcJI5UTPSy3E18CmMUyJ7JhSVQwITBpFqFuQCZW3nFH2wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAIWxZL2IQ1Ac6G9V0Nn9F/ibAKsHq7akoLwO117UA2TaIJGBu4oQmdmYCCeMEoHaW9tuEWLneN5RATT/70s+zxSyG9f6qabnwz1hCLG04eK+dIs1F3bujD/Ll+NUtJzNUKJhd6ilDNtf0AejIerpIuBlxUjfAUlvRqQdXIuHmp/DrBQ5+Mdzvj3ZTmalfs0X2LhC4t7w2lCUeG2r3JYqEdnRB/jxjaZWEDRGR64jD5dS8QuYnmwu99ol1hTI8uZ6QzUOtxJ8N9kH6S0QdLjjEtjIc1818t2/QpRRb9WpK3wxQYozgwhthgcuFiOSWSzTkClh5PvPo0/7hvaFkq7cjlk=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6QYUJLr2B/XLKk1JvpLhErlq147j/DGDvtxXGMSyDkqs3nXqx8lqUjmNCiaQ9ktWCgRzIb/yAQplYedcZUpG7/BHRqZ6qRDXuQFDl5hDEKnUdTLccxzvGI2dpdTABRZqxzoXl8YcrSfqjCZTd94kPpEbCnQ1uhkpdnFRoVOKl9beHH999ZycXqh7FEsF6JbwCkHDZi5wjC0P9Kwpjdhi/MTN6qwgxwVUhbc6SjjCO5z33u41csD1WaLm0As38vKeISBSbY6DrPIMb/LgBgiJcXwZSE0Escu9a3HpufmOqg6pRa4KZ8rtwwifZz3eFW2PhUvb1ioTL8v8qehPX/LV+wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHPbutcD3R2hDq11Rh67R4VhjizT6WVeKPxMIsuoYJbmYVaPo8vdCvzGuAGpHW/hyxU726V378TBTnUygh3M+E8yspHZp2mAJIY6sL6fQKElMnxpHHjk9yuDw8r16+oBR8/1SNt+KkyCNn5B/Yru6R3Us5ly1IZGSayC9IOdp8/GND5zfGqPz8Ijq7aHqevYvyGXNDE6KkvTdroYQrP4SKRzHXX5cHnPs+jtjqsLV9meq9NRCwgrAnLVGM27SKLUsaJl6pQsLD3RpnCXB2cJdJfHO6MJrwZpLKFUeOdAqx/GVaN5dr071KxJ8jsd+ST9uKXCd9pIQaiNMNhwIYjrMA4=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"887f7930088a410892c7331474191c66"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"b90f1763c04540e5b1ce5e16cbb43264"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1343']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtL7jNTA9mZcMSFqAv0oOteQCQqHTzh61fyAPYOdvG1m/oiybNks2VAnfJ/jPuzONG71Eg0lDSSCYCnM5buBEJnI2qi9ya8V+MPT84v0h7doGSky0CHyHYrGdtYsISL7uJy7/qWizwxCux14+m8ApdpNHkCbpUwvfzpzSV3LnxXxueCNBUbf0lAGg6hsq4+CvusjodYhtarP8lmvmHu5nACKCxFaXpwH9Geexe8FDUGUosI0bvfC+EeuX2t27N+dSeOFYoEyKdMoNfnJKDmvAqEkG+MEGCeCsFn28GcSQGvcJI5UTPSy3E18CmMUyJ7JhSVQwITBpFqFuQCZW3nFH2wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAIWxZL2IQ1Ac6G9V0Nn9F/ibAKsHq7akoLwO117UA2TaIJGBu4oQmdmYCCeMEoHaW9tuEWLneN5RATT/70s+zxSyG9f6qabnwz1hCLG04eK+dIs1F3bujD/Ll+NUtJzNUKJhd6ilDNtf0AejIerpIuBlxUjfAUlvRqQdXIuHmp/DrBQ5+Mdzvj3ZTmalfs0X2LhC4t7w2lCUeG2r3JYqEdnRB/jxjaZWEDRGR64jD5dS8QuYnmwu99ol1hTI8uZ6QzUOtxJ8N9kH6S0QdLjjEtjIc1818t2/QpRRb9WpK3wxQYozgwhthgcuFiOSWSzTkClh5PvPo0/7hvaFkq7cjlk=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert-name","request_id":"887f7930088a410892c7331474191c66"}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6QYUJLr2B/XLKk1JvpLhErlq147j/DGDvtxXGMSyDkqs3nXqx8lqUjmNCiaQ9ktWCgRzIb/yAQplYedcZUpG7/BHRqZ6qRDXuQFDl5hDEKnUdTLccxzvGI2dpdTABRZqxzoXl8YcrSfqjCZTd94kPpEbCnQ1uhkpdnFRoVOKl9beHH999ZycXqh7FEsF6JbwCkHDZi5wjC0P9Kwpjdhi/MTN6qwgxwVUhbc6SjjCO5z33u41csD1WaLm0As38vKeISBSbY6DrPIMb/LgBgiJcXwZSE0Escu9a3HpufmOqg6pRa4KZ8rtwwifZz3eFW2PhUvb1ioTL8v8qehPX/LV+wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHPbutcD3R2hDq11Rh67R4VhjizT6WVeKPxMIsuoYJbmYVaPo8vdCvzGuAGpHW/hyxU726V378TBTnUygh3M+E8yspHZp2mAJIY6sL6fQKElMnxpHHjk9yuDw8r16+oBR8/1SNt+KkyCNn5B/Yru6R3Us5ly1IZGSayC9IOdp8/GND5zfGqPz8Ijq7aHqevYvyGXNDE6KkvTdroYQrP4SKRzHXX5cHnPs+jtjqsLV9meq9NRCwgrAnLVGM27SKLUsaJl6pQsLD3RpnCXB2cJdJfHO6MJrwZpLKFUeOdAqx/GVaN5dr071KxJ8jsd+ST9uKXCd9pIQaiNMNhwIYjrMA4=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Certificate request is in progress. This may take some
    +        time based on the issuer provider. Please check again later.","request_id":"b90f1763c04540e5b1ce5e16cbb43264"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6QYUJLr2B/XLKk1JvpLhErlq147j/DGDvtxXGMSyDkqs3nXqx8lqUjmNCiaQ9ktWCgRzIb/yAQplYedcZUpG7/BHRqZ6qRDXuQFDl5hDEKnUdTLccxzvGI2dpdTABRZqxzoXl8YcrSfqjCZTd94kPpEbCnQ1uhkpdnFRoVOKl9beHH999ZycXqh7FEsF6JbwCkHDZi5wjC0P9Kwpjdhi/MTN6qwgxwVUhbc6SjjCO5z33u41csD1WaLm0As38vKeISBSbY6DrPIMb/LgBgiJcXwZSE0Escu9a3HpufmOqg6pRa4KZ8rtwwifZz3eFW2PhUvb1ioTL8v8qehPX/LV+wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHPbutcD3R2hDq11Rh67R4VhjizT6WVeKPxMIsuoYJbmYVaPo8vdCvzGuAGpHW/hyxU726V378TBTnUygh3M+E8yspHZp2mAJIY6sL6fQKElMnxpHHjk9yuDw8r16+oBR8/1SNt+KkyCNn5B/Yru6R3Us5ly1IZGSayC9IOdp8/GND5zfGqPz8Ijq7aHqevYvyGXNDE6KkvTdroYQrP4SKRzHXX5cHnPs+jtjqsLV9meq9NRCwgrAnLVGM27SKLUsaJl6pQsLD3RpnCXB2cJdJfHO6MJrwZpLKFUeOdAqx/GVaN5dr071KxJ8jsd+ST9uKXCd9pIQaiNMNhwIYjrMA4=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Certificate request is in progress. This may take some
    +        time based on the issuer provider. Please check again later.","request_id":"b90f1763c04540e5b1ce5e16cbb43264"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6QYUJLr2B/XLKk1JvpLhErlq147j/DGDvtxXGMSyDkqs3nXqx8lqUjmNCiaQ9ktWCgRzIb/yAQplYedcZUpG7/BHRqZ6qRDXuQFDl5hDEKnUdTLccxzvGI2dpdTABRZqxzoXl8YcrSfqjCZTd94kPpEbCnQ1uhkpdnFRoVOKl9beHH999ZycXqh7FEsF6JbwCkHDZi5wjC0P9Kwpjdhi/MTN6qwgxwVUhbc6SjjCO5z33u41csD1WaLm0As38vKeISBSbY6DrPIMb/LgBgiJcXwZSE0Escu9a3HpufmOqg6pRa4KZ8rtwwifZz3eFW2PhUvb1ioTL8v8qehPX/LV+wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHPbutcD3R2hDq11Rh67R4VhjizT6WVeKPxMIsuoYJbmYVaPo8vdCvzGuAGpHW/hyxU726V378TBTnUygh3M+E8yspHZp2mAJIY6sL6fQKElMnxpHHjk9yuDw8r16+oBR8/1SNt+KkyCNn5B/Yru6R3Us5ly1IZGSayC9IOdp8/GND5zfGqPz8Ijq7aHqevYvyGXNDE6KkvTdroYQrP4SKRzHXX5cHnPs+jtjqsLV9meq9NRCwgrAnLVGM27SKLUsaJl6pQsLD3RpnCXB2cJdJfHO6MJrwZpLKFUeOdAqx/GVaN5dr071KxJ8jsd+ST9uKXCd9pIQaiNMNhwIYjrMA4=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert-name","request_id":"b90f1763c04540e5b1ce5e16cbb43264"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1261']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1261'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/f4ece992dcc9440d9de3ce86722c5544","kid":"https://vaultname.vault.azure.net/keys/cert-name/f4ece992dcc9440d9de3ce86722c5544","sid":"https://vaultname.vault.azure.net/secrets/cert-name/f4ece992dcc9440d9de3ce86722c5544","x5t":"aQ6Qqwa-JNBMCABRi4x16_qudx8","cer":"MIIDWjCCAkKgAwIBAgIQY0F8O3+MTd2UnBa3YPvz8zANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0ODQ3WhcNMjExMjA2MjM1ODQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0vuM1MD2ZlwxIWoC/Sg615AJCodPOHrV/IA9g528bWb+iLJs2SzZUCd8n+M+7M40bvUSDSUNJIJgKczlu4EQmcjaqL3JrxX4w9Pzi/SHt2gZKTLQIfIdisZ21iwhIvu4nLv+paLPDEK7HXj6bwCl2k0eQJulTC9/OnNJXcufFfG54I0FRt/SUAaDqGyrj4K+6yOh1iG1qs/yWa+Ye7mcAIoLEVpenAf0Z57F7wUNQZSiwjRu98L4R65fa3bs351J44VigTIp0yg1+ckoOa8CoSQb4wQYJ4KwWfbwZxJAa9wkjlRM9LLcTXwKYxTInsmFJVDAhMGkWoW5AJlbecUfbAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLQz3P2CN/OcHBXbh8XLfaH8/qA1MB0GA1UdDgQWBBS0M9z9gjfznBwV24fFy32h/P6gNTANBgkqhkiG9w0BAQsFAAOCAQEAHihcAABBhHzMh5MqiQ2D4kFF2S2Dv2Wmr7u1pZ/62HNweSlz0RLfwCipGAwixiP72Z6X3yh8mJNMSsKPE7N9lt9wo7GN/s/6N41b6wKglHdFiMBKsmwKnga9dIRhdE8Zf2bGjQc+wTQ2Qp5hJi6GRIqzJQjD48UIRpZX47SpBQbrgDDGTSxTZbrrA+w4oLFEoa02cd2I56SvdqlCVoKxxhSJy0THcOHiCeZ8OkpFRfoQF6ztz7Q3Ni8Nr7qlmqpeuQW58mPzb7pswhfZf4IOhdmIr5KZEmWGs5SNL8CqKhiK/KIpLb22esX4xA9FKB0YQ/R4VnE8moYrhEETB2Ujyg==","attributes":{"enabled":true,"nbf":1575676127,"exp":1638835127,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676716,"updated":1575676716}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/2506b58c661544aca3392979bb8babe5","kid":"https://vaultname.vault.azure.net/keys/cert-name/2506b58c661544aca3392979bb8babe5","sid":"https://vaultname.vault.azure.net/secrets/cert-name/2506b58c661544aca3392979bb8babe5","x5t":"z6KK0kZGE5g3N2uE3O2csAghI0A","cer":"MIIDWjCCAkKgAwIBAgIQD1IVWFqASI2Iw/QYY9IjJTANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTA0WhcNMjIwMzA2MDAwOTA0WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDpBhQkuvYH9csqTUm+kuESuWrXjuP8MYO+3FcYxLIOSqzederHyWpSOY0KJpD2S1YKBHMhv/IBCmVh51xlSkbv8EdGpnqpENe5AUOXmEMQqdR1MtxzHO8YjZ2l1MAFFmrHOheXxhytJ+qMJlN33iQ+kRsKdDW6GSl2cVGhU4qX1t4cf331nJxeqHsUSwXolvAKQcNmLnCMLQ/0rCmN2GL8xM3qrCDHBVSFtzpKOMI7nPfe7jVywPVZoubQCzfy8p4hIFJtjoOs8gxv8uAGCIlxfBlITQSxy71rcem5+Y6qDqlFrgpnyu3DCJ9nPd4VbY+FS9vWKhMvy/yp6E9f8tX7AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFOXDPUGN5Yh971yGYvAs7WjOWQgaMB0GA1UdDgQWBBTlwz1BjeWIfe9chmLwLO1ozlkIGjANBgkqhkiG9w0BAQsFAAOCAQEAFl35tNJ2Pp1eUYEqTW0CHmu9HibImZNsOxF4stSrwyEPRIECkyyHWgKzsjBQVKRWbkEFQE2+mZnHCzqknRWI2OrGFOzg9b202jsS5YAiutfVFBvWZxV064MSsDOKR2eUF7M89NMmUsxVU1VUvdWJT0XLnQMBG1iGhZiAZnJyXcDVqT7dr6eu4SvUpkJjNXOo31nZFvv8hhtV+mNK77VXPTZuWKVah/ofos4Qet8UDzbc4OIHBOTWl8sZ9gJrendFy+6fxz0TPH49TQctpcT69bpz35CACJtEVPAnqisD2xjUgS7lRjoPu0Ia1pimNKrAihI8NBBn9xx38UB7rQ0V5w==","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453344,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['2434']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2434'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/f4ece992dcc9440d9de3ce86722c5544","kid":"https://vaultname.vault.azure.net/keys/cert-name/f4ece992dcc9440d9de3ce86722c5544","sid":"https://vaultname.vault.azure.net/secrets/cert-name/f4ece992dcc9440d9de3ce86722c5544","x5t":"aQ6Qqwa-JNBMCABRi4x16_qudx8","cer":"MIIDWjCCAkKgAwIBAgIQY0F8O3+MTd2UnBa3YPvz8zANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0ODQ3WhcNMjExMjA2MjM1ODQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0vuM1MD2ZlwxIWoC/Sg615AJCodPOHrV/IA9g528bWb+iLJs2SzZUCd8n+M+7M40bvUSDSUNJIJgKczlu4EQmcjaqL3JrxX4w9Pzi/SHt2gZKTLQIfIdisZ21iwhIvu4nLv+paLPDEK7HXj6bwCl2k0eQJulTC9/OnNJXcufFfG54I0FRt/SUAaDqGyrj4K+6yOh1iG1qs/yWa+Ye7mcAIoLEVpenAf0Z57F7wUNQZSiwjRu98L4R65fa3bs351J44VigTIp0yg1+ckoOa8CoSQb4wQYJ4KwWfbwZxJAa9wkjlRM9LLcTXwKYxTInsmFJVDAhMGkWoW5AJlbecUfbAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLQz3P2CN/OcHBXbh8XLfaH8/qA1MB0GA1UdDgQWBBS0M9z9gjfznBwV24fFy32h/P6gNTANBgkqhkiG9w0BAQsFAAOCAQEAHihcAABBhHzMh5MqiQ2D4kFF2S2Dv2Wmr7u1pZ/62HNweSlz0RLfwCipGAwixiP72Z6X3yh8mJNMSsKPE7N9lt9wo7GN/s/6N41b6wKglHdFiMBKsmwKnga9dIRhdE8Zf2bGjQc+wTQ2Qp5hJi6GRIqzJQjD48UIRpZX47SpBQbrgDDGTSxTZbrrA+w4oLFEoa02cd2I56SvdqlCVoKxxhSJy0THcOHiCeZ8OkpFRfoQF6ztz7Q3Ni8Nr7qlmqpeuQW58mPzb7pswhfZf4IOhdmIr5KZEmWGs5SNL8CqKhiK/KIpLb22esX4xA9FKB0YQ/R4VnE8moYrhEETB2Ujyg==","attributes":{"enabled":true,"nbf":1575676127,"exp":1638835127,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676716,"updated":1575676716}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/2506b58c661544aca3392979bb8babe5","kid":"https://vaultname.vault.azure.net/keys/cert-name/2506b58c661544aca3392979bb8babe5","sid":"https://vaultname.vault.azure.net/secrets/cert-name/2506b58c661544aca3392979bb8babe5","x5t":"z6KK0kZGE5g3N2uE3O2csAghI0A","cer":"MIIDWjCCAkKgAwIBAgIQD1IVWFqASI2Iw/QYY9IjJTANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTA0WhcNMjIwMzA2MDAwOTA0WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDpBhQkuvYH9csqTUm+kuESuWrXjuP8MYO+3FcYxLIOSqzederHyWpSOY0KJpD2S1YKBHMhv/IBCmVh51xlSkbv8EdGpnqpENe5AUOXmEMQqdR1MtxzHO8YjZ2l1MAFFmrHOheXxhytJ+qMJlN33iQ+kRsKdDW6GSl2cVGhU4qX1t4cf331nJxeqHsUSwXolvAKQcNmLnCMLQ/0rCmN2GL8xM3qrCDHBVSFtzpKOMI7nPfe7jVywPVZoubQCzfy8p4hIFJtjoOs8gxv8uAGCIlxfBlITQSxy71rcem5+Y6qDqlFrgpnyu3DCJ9nPd4VbY+FS9vWKhMvy/yp6E9f8tX7AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFOXDPUGN5Yh971yGYvAs7WjOWQgaMB0GA1UdDgQWBBTlwz1BjeWIfe9chmLwLO1ozlkIGjANBgkqhkiG9w0BAQsFAAOCAQEAFl35tNJ2Pp1eUYEqTW0CHmu9HibImZNsOxF4stSrwyEPRIECkyyHWgKzsjBQVKRWbkEFQE2+mZnHCzqknRWI2OrGFOzg9b202jsS5YAiutfVFBvWZxV064MSsDOKR2eUF7M89NMmUsxVU1VUvdWJT0XLnQMBG1iGhZiAZnJyXcDVqT7dr6eu4SvUpkJjNXOo31nZFvv8hhtV+mNK77VXPTZuWKVah/ofos4Qet8UDzbc4OIHBOTWl8sZ9gJrendFy+6fxz0TPH49TQctpcT69bpz35CACJtEVPAnqisD2xjUgS7lRjoPu0Ia1pimNKrAihI8NBBn9xx38UB7rQ0V5w==","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453344,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['2434']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2434'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"tags": {"foo": "updated tag"}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['32']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '32'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/f4ece992dcc9440d9de3ce86722c5544","kid":"https://vaultname.vault.azure.net/keys/cert-name/f4ece992dcc9440d9de3ce86722c5544","sid":"https://vaultname.vault.azure.net/secrets/cert-name/f4ece992dcc9440d9de3ce86722c5544","x5t":"aQ6Qqwa-JNBMCABRi4x16_qudx8","cer":"MIIDWjCCAkKgAwIBAgIQY0F8O3+MTd2UnBa3YPvz8zANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0ODQ3WhcNMjExMjA2MjM1ODQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0vuM1MD2ZlwxIWoC/Sg615AJCodPOHrV/IA9g528bWb+iLJs2SzZUCd8n+M+7M40bvUSDSUNJIJgKczlu4EQmcjaqL3JrxX4w9Pzi/SHt2gZKTLQIfIdisZ21iwhIvu4nLv+paLPDEK7HXj6bwCl2k0eQJulTC9/OnNJXcufFfG54I0FRt/SUAaDqGyrj4K+6yOh1iG1qs/yWa+Ye7mcAIoLEVpenAf0Z57F7wUNQZSiwjRu98L4R65fa3bs351J44VigTIp0yg1+ckoOa8CoSQb4wQYJ4KwWfbwZxJAa9wkjlRM9LLcTXwKYxTInsmFJVDAhMGkWoW5AJlbecUfbAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLQz3P2CN/OcHBXbh8XLfaH8/qA1MB0GA1UdDgQWBBS0M9z9gjfznBwV24fFy32h/P6gNTANBgkqhkiG9w0BAQsFAAOCAQEAHihcAABBhHzMh5MqiQ2D4kFF2S2Dv2Wmr7u1pZ/62HNweSlz0RLfwCipGAwixiP72Z6X3yh8mJNMSsKPE7N9lt9wo7GN/s/6N41b6wKglHdFiMBKsmwKnga9dIRhdE8Zf2bGjQc+wTQ2Qp5hJi6GRIqzJQjD48UIRpZX47SpBQbrgDDGTSxTZbrrA+w4oLFEoa02cd2I56SvdqlCVoKxxhSJy0THcOHiCeZ8OkpFRfoQF6ztz7Q3Ni8Nr7qlmqpeuQW58mPzb7pswhfZf4IOhdmIr5KZEmWGs5SNL8CqKhiK/KIpLb22esX4xA9FKB0YQ/R4VnE8moYrhEETB2Ujyg==","attributes":{"enabled":true,"nbf":1575676127,"exp":1638835127,"created":1575676727,"updated":1575676742,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    -        tag"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676716,"updated":1575676716}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/2506b58c661544aca3392979bb8babe5","kid":"https://vaultname.vault.azure.net/keys/cert-name/2506b58c661544aca3392979bb8babe5","sid":"https://vaultname.vault.azure.net/secrets/cert-name/2506b58c661544aca3392979bb8babe5","x5t":"z6KK0kZGE5g3N2uE3O2csAghI0A","cer":"MIIDWjCCAkKgAwIBAgIQD1IVWFqASI2Iw/QYY9IjJTANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTA0WhcNMjIwMzA2MDAwOTA0WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDpBhQkuvYH9csqTUm+kuESuWrXjuP8MYO+3FcYxLIOSqzederHyWpSOY0KJpD2S1YKBHMhv/IBCmVh51xlSkbv8EdGpnqpENe5AUOXmEMQqdR1MtxzHO8YjZ2l1MAFFmrHOheXxhytJ+qMJlN33iQ+kRsKdDW6GSl2cVGhU4qX1t4cf331nJxeqHsUSwXolvAKQcNmLnCMLQ/0rCmN2GL8xM3qrCDHBVSFtzpKOMI7nPfe7jVywPVZoubQCzfy8p4hIFJtjoOs8gxv8uAGCIlxfBlITQSxy71rcem5+Y6qDqlFrgpnyu3DCJ9nPd4VbY+FS9vWKhMvy/yp6E9f8tX7AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFOXDPUGN5Yh971yGYvAs7WjOWQgaMB0GA1UdDgQWBBTlwz1BjeWIfe9chmLwLO1ozlkIGjANBgkqhkiG9w0BAQsFAAOCAQEAFl35tNJ2Pp1eUYEqTW0CHmu9HibImZNsOxF4stSrwyEPRIECkyyHWgKzsjBQVKRWbkEFQE2+mZnHCzqknRWI2OrGFOzg9b202jsS5YAiutfVFBvWZxV064MSsDOKR2eUF7M89NMmUsxVU1VUvdWJT0XLnQMBG1iGhZiAZnJyXcDVqT7dr6eu4SvUpkJjNXOo31nZFvv8hhtV+mNK77VXPTZuWKVah/ofos4Qet8UDzbc4OIHBOTWl8sZ9gJrendFy+6fxz0TPH49TQctpcT69bpz35CACJtEVPAnqisD2xjUgS7lRjoPu0Ia1pimNKrAihI8NBBn9xx38UB7rQ0V5w==","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453349,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['2463']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2463'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1575676742,"scheduledPurgeDate":1583452742,"id":"https://vaultname.vault.azure.net/certificates/cert-name/f4ece992dcc9440d9de3ce86722c5544","kid":"https://vaultname.vault.azure.net/keys/cert-name/f4ece992dcc9440d9de3ce86722c5544","sid":"https://vaultname.vault.azure.net/secrets/cert-name/f4ece992dcc9440d9de3ce86722c5544","x5t":"aQ6Qqwa-JNBMCABRi4x16_qudx8","cer":"MIIDWjCCAkKgAwIBAgIQY0F8O3+MTd2UnBa3YPvz8zANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0ODQ3WhcNMjExMjA2MjM1ODQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0vuM1MD2ZlwxIWoC/Sg615AJCodPOHrV/IA9g528bWb+iLJs2SzZUCd8n+M+7M40bvUSDSUNJIJgKczlu4EQmcjaqL3JrxX4w9Pzi/SHt2gZKTLQIfIdisZ21iwhIvu4nLv+paLPDEK7HXj6bwCl2k0eQJulTC9/OnNJXcufFfG54I0FRt/SUAaDqGyrj4K+6yOh1iG1qs/yWa+Ye7mcAIoLEVpenAf0Z57F7wUNQZSiwjRu98L4R65fa3bs351J44VigTIp0yg1+ckoOa8CoSQb4wQYJ4KwWfbwZxJAa9wkjlRM9LLcTXwKYxTInsmFJVDAhMGkWoW5AJlbecUfbAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLQz3P2CN/OcHBXbh8XLfaH8/qA1MB0GA1UdDgQWBBS0M9z9gjfznBwV24fFy32h/P6gNTANBgkqhkiG9w0BAQsFAAOCAQEAHihcAABBhHzMh5MqiQ2D4kFF2S2Dv2Wmr7u1pZ/62HNweSlz0RLfwCipGAwixiP72Z6X3yh8mJNMSsKPE7N9lt9wo7GN/s/6N41b6wKglHdFiMBKsmwKnga9dIRhdE8Zf2bGjQc+wTQ2Qp5hJi6GRIqzJQjD48UIRpZX47SpBQbrgDDGTSxTZbrrA+w4oLFEoa02cd2I56SvdqlCVoKxxhSJy0THcOHiCeZ8OkpFRfoQF6ztz7Q3Ni8Nr7qlmqpeuQW58mPzb7pswhfZf4IOhdmIr5KZEmWGs5SNL8CqKhiK/KIpLb22esX4xA9FKB0YQ/R4VnE8moYrhEETB2Ujyg==","attributes":{"enabled":true,"nbf":1575676127,"exp":1638835127,"created":1575676727,"updated":1575676742,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    -        tag"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676716,"updated":1575676716}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1583453350,"scheduledPurgeDate":1591229350,"id":"https://vaultname.vault.azure.net/certificates/cert-name/2506b58c661544aca3392979bb8babe5","kid":"https://vaultname.vault.azure.net/keys/cert-name/2506b58c661544aca3392979bb8babe5","sid":"https://vaultname.vault.azure.net/secrets/cert-name/2506b58c661544aca3392979bb8babe5","x5t":"z6KK0kZGE5g3N2uE3O2csAghI0A","cer":"MIIDWjCCAkKgAwIBAgIQD1IVWFqASI2Iw/QYY9IjJTANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTA0WhcNMjIwMzA2MDAwOTA0WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDpBhQkuvYH9csqTUm+kuESuWrXjuP8MYO+3FcYxLIOSqzederHyWpSOY0KJpD2S1YKBHMhv/IBCmVh51xlSkbv8EdGpnqpENe5AUOXmEMQqdR1MtxzHO8YjZ2l1MAFFmrHOheXxhytJ+qMJlN33iQ+kRsKdDW6GSl2cVGhU4qX1t4cf331nJxeqHsUSwXolvAKQcNmLnCMLQ/0rCmN2GL8xM3qrCDHBVSFtzpKOMI7nPfe7jVywPVZoubQCzfy8p4hIFJtjoOs8gxv8uAGCIlxfBlITQSxy71rcem5+Y6qDqlFrgpnyu3DCJ9nPd4VbY+FS9vWKhMvy/yp6E9f8tX7AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFOXDPUGN5Yh971yGYvAs7WjOWQgaMB0GA1UdDgQWBBTlwz1BjeWIfe9chmLwLO1ozlkIGjANBgkqhkiG9w0BAQsFAAOCAQEAFl35tNJ2Pp1eUYEqTW0CHmu9HibImZNsOxF4stSrwyEPRIECkyyHWgKzsjBQVKRWbkEFQE2+mZnHCzqknRWI2OrGFOzg9b202jsS5YAiutfVFBvWZxV064MSsDOKR2eUF7M89NMmUsxVU1VUvdWJT0XLnQMBG1iGhZiAZnJyXcDVqT7dr6eu4SvUpkJjNXOo31nZFvv8hhtV+mNK77VXPTZuWKVah/ofos4Qet8UDzbc4OIHBOTWl8sZ9gJrendFy+6fxz0TPH49TQctpcT69bpz35CACJtEVPAnqisD2xjUgS7lRjoPu0Ia1pimNKrAihI8NBBn9xx38UB7rQ0V5w==","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453349,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['2614']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2614'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_list_operations.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_list_operations.yaml
    index 86cacd81f14c..0fc1cd7823dd 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_list_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_list_operations.yaml
    @@ -2,731 +2,1371 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1ZwvndgZJGmL+vjE0RFazQTuz8R7I7SUSe48hVrVojYqbIxao8sKP4kNtVR3ovk1sKF8QUgOl9P5srebHnF9pCl/c/bvz8YTyFOF+/LFvWsiZ5ZjPl3vqmyfIWZHdb7LtQOmRsBDn2zlynzoSb/1eabyAMJh6TcHwiESlogHWb4gBvJY8MkHBXaqJUJn12xq+qf5/n+/uTiEtJTXTuP1rtV3trBM14Hv6jqPlYkzhYB6y53nUZI/zfry+6qSOnW/Gzy5CBz9OO5ynahRYeGmf3qc+SGM4/M3HeFLMqjHkeIdfinOQ9mO46F14Uo9DOXG5VuPHQSiODQ8V0q92vkswIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAMlt2sCkUAPcf2YxjGtqPdfjru4NmbPqak+MM9IfYf38mBVdiaoH1KjrtgzzPHHoVdygY1EkAjtfrmn0bDB0d1rLVg3qaOQPfMp+woFibcSmNSwU9LEhtKL7yegsHQN0MuF4PU8TxBU7JdFTzchavbFjUHX4PA+X5MngGtb2eCS21iIG3TsT86tFJuhYJDfba6GdOrR/axgYcwUQmRsOIJNP67X0pHea1B3GDhrxmM5Cae0pFIfDXzxzQNFAXTundBlY6jZilCnCtQrFC/LU7O/0CWelQyyjmNHWgIp7whA3Lo1SHc9MHlVHsMCmz0yz5nHwKzyXCCuqby+7leFuuZg=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwFLHk2KIlzPyLzVV2ZnV/dferUOFcwM7Vq2z3uVkma+y8lzRcZuWtj8TEveVw7oowlKXPFX4fa0ENJqx7fXZNRK4Fy7V9/i0GxBf+t55+ccdO8VSDWQVVY5wwB4lK+KXI/ygJtVg8KOSDuGcmmWfnXMEPcIkfwNDhbGdxOv90gND5CdnPPBIsOP3ELI/vRf5NRM2r8o1wuio81vIaP/FNWm1Z5oIM8u+Hq6FxNtvoU0Wtk1JKmTUiddba9h94P9PdcMoE+wnncL/xXWEHjc/7tvpLc28zwtgxBFkqK50Md0e+CeoudxB520p+I1KqcMfY3p46E7VDI0j872B+MjOTwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADElXERwBiOFhkpNGxP4x+NLkahE1M1kd/hRfMoEoRuhWMTXQv6x5D/ZjJhdrNB0pr8ebL+Qp7dS2M1IcF8W///lgcNLFYVWbVyOf51vcXad46xfQuzELSbsUC5xeRyXlyJB0TGLSI9f8y3qLfQwOeTbs6ZzlKdJsJwNcUc2ujISUWATt5SJc0zLR/tKfEGvgYR2vbHF+yT9bDZdpDjyN0c4h6/NalBLzpjIQwRydruDdHCQpmhEQEyrspp3eaJVAh318a+3sVwYG/uWkFEKUACZ3tVaeICsW6gPhyTCOlwxcCLId9l+BJmS4qFi+6s7JL7gG5UgBoPqajEtbii9qsw=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"ffbcb6e215854214aa3fca7e8ca5efa2"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:03 GMT']
    -      expires: ['-1']
    -      location: ['https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.0&request_id=ffbcb6e215854214aa3fca7e8ca5efa2']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 202, message: Accepted}
    +        time based on the issuer provider. Please check again later.","request_id":"725fafeb0ef54138bfcb57290c03a051"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:12 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview&request_id=725fafeb0ef54138bfcb57290c03a051
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1ZwvndgZJGmL+vjE0RFazQTuz8R7I7SUSe48hVrVojYqbIxao8sKP4kNtVR3ovk1sKF8QUgOl9P5srebHnF9pCl/c/bvz8YTyFOF+/LFvWsiZ5ZjPl3vqmyfIWZHdb7LtQOmRsBDn2zlynzoSb/1eabyAMJh6TcHwiESlogHWb4gBvJY8MkHBXaqJUJn12xq+qf5/n+/uTiEtJTXTuP1rtV3trBM14Hv6jqPlYkzhYB6y53nUZI/zfry+6qSOnW/Gzy5CBz9OO5ynahRYeGmf3qc+SGM4/M3HeFLMqjHkeIdfinOQ9mO46F14Uo9DOXG5VuPHQSiODQ8V0q92vkswIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAMlt2sCkUAPcf2YxjGtqPdfjru4NmbPqak+MM9IfYf38mBVdiaoH1KjrtgzzPHHoVdygY1EkAjtfrmn0bDB0d1rLVg3qaOQPfMp+woFibcSmNSwU9LEhtKL7yegsHQN0MuF4PU8TxBU7JdFTzchavbFjUHX4PA+X5MngGtb2eCS21iIG3TsT86tFJuhYJDfba6GdOrR/axgYcwUQmRsOIJNP67X0pHea1B3GDhrxmM5Cae0pFIfDXzxzQNFAXTundBlY6jZilCnCtQrFC/LU7O/0CWelQyyjmNHWgIp7whA3Lo1SHc9MHlVHsMCmz0yz5nHwKzyXCCuqby+7leFuuZg=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwFLHk2KIlzPyLzVV2ZnV/dferUOFcwM7Vq2z3uVkma+y8lzRcZuWtj8TEveVw7oowlKXPFX4fa0ENJqx7fXZNRK4Fy7V9/i0GxBf+t55+ccdO8VSDWQVVY5wwB4lK+KXI/ygJtVg8KOSDuGcmmWfnXMEPcIkfwNDhbGdxOv90gND5CdnPPBIsOP3ELI/vRf5NRM2r8o1wuio81vIaP/FNWm1Z5oIM8u+Hq6FxNtvoU0Wtk1JKmTUiddba9h94P9PdcMoE+wnncL/xXWEHjc/7tvpLc28zwtgxBFkqK50Md0e+CeoudxB520p+I1KqcMfY3p46E7VDI0j872B+MjOTwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADElXERwBiOFhkpNGxP4x+NLkahE1M1kd/hRfMoEoRuhWMTXQv6x5D/ZjJhdrNB0pr8ebL+Qp7dS2M1IcF8W///lgcNLFYVWbVyOf51vcXad46xfQuzELSbsUC5xeRyXlyJB0TGLSI9f8y3qLfQwOeTbs6ZzlKdJsJwNcUc2ujISUWATt5SJc0zLR/tKfEGvgYR2vbHF+yT9bDZdpDjyN0c4h6/NalBLzpjIQwRydruDdHCQpmhEQEyrspp3eaJVAh318a+3sVwYG/uWkFEKUACZ3tVaeICsW6gPhyTCOlwxcCLId9l+BJmS4qFi+6s7JL7gG5UgBoPqajEtbii9qsw=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"ffbcb6e215854214aa3fca7e8ca5efa2"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:04 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"725fafeb0ef54138bfcb57290c03a051"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1ZwvndgZJGmL+vjE0RFazQTuz8R7I7SUSe48hVrVojYqbIxao8sKP4kNtVR3ovk1sKF8QUgOl9P5srebHnF9pCl/c/bvz8YTyFOF+/LFvWsiZ5ZjPl3vqmyfIWZHdb7LtQOmRsBDn2zlynzoSb/1eabyAMJh6TcHwiESlogHWb4gBvJY8MkHBXaqJUJn12xq+qf5/n+/uTiEtJTXTuP1rtV3trBM14Hv6jqPlYkzhYB6y53nUZI/zfry+6qSOnW/Gzy5CBz9OO5ynahRYeGmf3qc+SGM4/M3HeFLMqjHkeIdfinOQ9mO46F14Uo9DOXG5VuPHQSiODQ8V0q92vkswIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAMlt2sCkUAPcf2YxjGtqPdfjru4NmbPqak+MM9IfYf38mBVdiaoH1KjrtgzzPHHoVdygY1EkAjtfrmn0bDB0d1rLVg3qaOQPfMp+woFibcSmNSwU9LEhtKL7yegsHQN0MuF4PU8TxBU7JdFTzchavbFjUHX4PA+X5MngGtb2eCS21iIG3TsT86tFJuhYJDfba6GdOrR/axgYcwUQmRsOIJNP67X0pHea1B3GDhrxmM5Cae0pFIfDXzxzQNFAXTundBlY6jZilCnCtQrFC/LU7O/0CWelQyyjmNHWgIp7whA3Lo1SHc9MHlVHsMCmz0yz5nHwKzyXCCuqby+7leFuuZg=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwFLHk2KIlzPyLzVV2ZnV/dferUOFcwM7Vq2z3uVkma+y8lzRcZuWtj8TEveVw7oowlKXPFX4fa0ENJqx7fXZNRK4Fy7V9/i0GxBf+t55+ccdO8VSDWQVVY5wwB4lK+KXI/ygJtVg8KOSDuGcmmWfnXMEPcIkfwNDhbGdxOv90gND5CdnPPBIsOP3ELI/vRf5NRM2r8o1wuio81vIaP/FNWm1Z5oIM8u+Hq6FxNtvoU0Wtk1JKmTUiddba9h94P9PdcMoE+wnncL/xXWEHjc/7tvpLc28zwtgxBFkqK50Md0e+CeoudxB520p+I1KqcMfY3p46E7VDI0j872B+MjOTwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADElXERwBiOFhkpNGxP4x+NLkahE1M1kd/hRfMoEoRuhWMTXQv6x5D/ZjJhdrNB0pr8ebL+Qp7dS2M1IcF8W///lgcNLFYVWbVyOf51vcXad46xfQuzELSbsUC5xeRyXlyJB0TGLSI9f8y3qLfQwOeTbs6ZzlKdJsJwNcUc2ujISUWATt5SJc0zLR/tKfEGvgYR2vbHF+yT9bDZdpDjyN0c4h6/NalBLzpjIQwRydruDdHCQpmhEQEyrspp3eaJVAh318a+3sVwYG/uWkFEKUACZ3tVaeICsW6gPhyTCOlwxcCLId9l+BJmS4qFi+6s7JL7gG5UgBoPqajEtbii9qsw=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"ffbcb6e215854214aa3fca7e8ca5efa2"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:15 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"725fafeb0ef54138bfcb57290c03a051"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1ZwvndgZJGmL+vjE0RFazQTuz8R7I7SUSe48hVrVojYqbIxao8sKP4kNtVR3ovk1sKF8QUgOl9P5srebHnF9pCl/c/bvz8YTyFOF+/LFvWsiZ5ZjPl3vqmyfIWZHdb7LtQOmRsBDn2zlynzoSb/1eabyAMJh6TcHwiESlogHWb4gBvJY8MkHBXaqJUJn12xq+qf5/n+/uTiEtJTXTuP1rtV3trBM14Hv6jqPlYkzhYB6y53nUZI/zfry+6qSOnW/Gzy5CBz9OO5ynahRYeGmf3qc+SGM4/M3HeFLMqjHkeIdfinOQ9mO46F14Uo9DOXG5VuPHQSiODQ8V0q92vkswIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAMlt2sCkUAPcf2YxjGtqPdfjru4NmbPqak+MM9IfYf38mBVdiaoH1KjrtgzzPHHoVdygY1EkAjtfrmn0bDB0d1rLVg3qaOQPfMp+woFibcSmNSwU9LEhtKL7yegsHQN0MuF4PU8TxBU7JdFTzchavbFjUHX4PA+X5MngGtb2eCS21iIG3TsT86tFJuhYJDfba6GdOrR/axgYcwUQmRsOIJNP67X0pHea1B3GDhrxmM5Cae0pFIfDXzxzQNFAXTundBlY6jZilCnCtQrFC/LU7O/0CWelQyyjmNHWgIp7whA3Lo1SHc9MHlVHsMCmz0yz5nHwKzyXCCuqby+7leFuuZg=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwFLHk2KIlzPyLzVV2ZnV/dferUOFcwM7Vq2z3uVkma+y8lzRcZuWtj8TEveVw7oowlKXPFX4fa0ENJqx7fXZNRK4Fy7V9/i0GxBf+t55+ccdO8VSDWQVVY5wwB4lK+KXI/ygJtVg8KOSDuGcmmWfnXMEPcIkfwNDhbGdxOv90gND5CdnPPBIsOP3ELI/vRf5NRM2r8o1wuio81vIaP/FNWm1Z5oIM8u+Hq6FxNtvoU0Wtk1JKmTUiddba9h94P9PdcMoE+wnncL/xXWEHjc/7tvpLc28zwtgxBFkqK50Md0e+CeoudxB520p+I1KqcMfY3p46E7VDI0j872B+MjOTwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADElXERwBiOFhkpNGxP4x+NLkahE1M1kd/hRfMoEoRuhWMTXQv6x5D/ZjJhdrNB0pr8ebL+Qp7dS2M1IcF8W///lgcNLFYVWbVyOf51vcXad46xfQuzELSbsUC5xeRyXlyJB0TGLSI9f8y3qLfQwOeTbs6ZzlKdJsJwNcUc2ujISUWATt5SJc0zLR/tKfEGvgYR2vbHF+yT9bDZdpDjyN0c4h6/NalBLzpjIQwRydruDdHCQpmhEQEyrspp3eaJVAh318a+3sVwYG/uWkFEKUACZ3tVaeICsW6gPhyTCOlwxcCLId9l+BJmS4qFi+6s7JL7gG5UgBoPqajEtbii9qsw=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"ffbcb6e215854214aa3fca7e8ca5efa2"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"725fafeb0ef54138bfcb57290c03a051"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1ZwvndgZJGmL+vjE0RFazQTuz8R7I7SUSe48hVrVojYqbIxao8sKP4kNtVR3ovk1sKF8QUgOl9P5srebHnF9pCl/c/bvz8YTyFOF+/LFvWsiZ5ZjPl3vqmyfIWZHdb7LtQOmRsBDn2zlynzoSb/1eabyAMJh6TcHwiESlogHWb4gBvJY8MkHBXaqJUJn12xq+qf5/n+/uTiEtJTXTuP1rtV3trBM14Hv6jqPlYkzhYB6y53nUZI/zfry+6qSOnW/Gzy5CBz9OO5ynahRYeGmf3qc+SGM4/M3HeFLMqjHkeIdfinOQ9mO46F14Uo9DOXG5VuPHQSiODQ8V0q92vkswIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAMlt2sCkUAPcf2YxjGtqPdfjru4NmbPqak+MM9IfYf38mBVdiaoH1KjrtgzzPHHoVdygY1EkAjtfrmn0bDB0d1rLVg3qaOQPfMp+woFibcSmNSwU9LEhtKL7yegsHQN0MuF4PU8TxBU7JdFTzchavbFjUHX4PA+X5MngGtb2eCS21iIG3TsT86tFJuhYJDfba6GdOrR/axgYcwUQmRsOIJNP67X0pHea1B3GDhrxmM5Cae0pFIfDXzxzQNFAXTundBlY6jZilCnCtQrFC/LU7O/0CWelQyyjmNHWgIp7whA3Lo1SHc9MHlVHsMCmz0yz5nHwKzyXCCuqby+7leFuuZg=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate0","request_id":"ffbcb6e215854214aa3fca7e8ca5efa2"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1267']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwFLHk2KIlzPyLzVV2ZnV/dferUOFcwM7Vq2z3uVkma+y8lzRcZuWtj8TEveVw7oowlKXPFX4fa0ENJqx7fXZNRK4Fy7V9/i0GxBf+t55+ccdO8VSDWQVVY5wwB4lK+KXI/ygJtVg8KOSDuGcmmWfnXMEPcIkfwNDhbGdxOv90gND5CdnPPBIsOP3ELI/vRf5NRM2r8o1wuio81vIaP/FNWm1Z5oIM8u+Hq6FxNtvoU0Wtk1JKmTUiddba9h94P9PdcMoE+wnncL/xXWEHjc/7tvpLc28zwtgxBFkqK50Md0e+CeoudxB520p+I1KqcMfY3p46E7VDI0j872B+MjOTwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADElXERwBiOFhkpNGxP4x+NLkahE1M1kd/hRfMoEoRuhWMTXQv6x5D/ZjJhdrNB0pr8ebL+Qp7dS2M1IcF8W///lgcNLFYVWbVyOf51vcXad46xfQuzELSbsUC5xeRyXlyJB0TGLSI9f8y3qLfQwOeTbs6ZzlKdJsJwNcUc2ujISUWATt5SJc0zLR/tKfEGvgYR2vbHF+yT9bDZdpDjyN0c4h6/NalBLzpjIQwRydruDdHCQpmhEQEyrspp3eaJVAh318a+3sVwYG/uWkFEKUACZ3tVaeICsW6gPhyTCOlwxcCLId9l+BJmS4qFi+6s7JL7gG5UgBoPqajEtbii9qsw=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate0","request_id":"725fafeb0ef54138bfcb57290c03a051"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1267'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/fa19861a81494b60a6e076dbb179bc1b","kid":"https://vaultname.vault.azure.net/keys/certificate0/fa19861a81494b60a6e076dbb179bc1b","sid":"https://vaultname.vault.azure.net/secrets/certificate0/fa19861a81494b60a6e076dbb179bc1b","x5t":"7Oz-_X_eLUXy52OiCBfRGIDev9M","cer":"MIIDWjCCAkKgAwIBAgIQD7a8d3TESLGI9tR8KkjYYjANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1MDI1WhcNMjExMjA3MDAwMDI1WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPVnC+d2BkkaYv6+MTREVrNBO7PxHsjtJRJ7jyFWtWiNipsjFqjywo/iQ21VHei+TWwoXxBSA6X0/myt5secX2kKX9z9u/PxhPIU4X78sW9ayJnlmM+Xe+qbJ8hZkd1vsu1A6ZGwEOfbOXKfOhJv/V5pvIAwmHpNwfCIRKWiAdZviAG8ljwyQcFdqolQmfXbGr6p/n+f7+5OIS0lNdO4/Wu1Xe2sEzXge/qOo+ViTOFgHrLnedRkj/N+vL7qpI6db8bPLkIHP047nKdqFFh4aZ/epz5IYzj8zcd4UsyqMeR4h1+Kc5D2Y7joXXhSj0M5cblW48dBKI4NDxXSr3a+SzAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFNXiN5u3TWefldbsdBilfFlMV2OlMB0GA1UdDgQWBBTV4jebt01nn5XW7HQYpXxZTFdjpTANBgkqhkiG9w0BAQsFAAOCAQEARi4K/qPVeQfme4cnw25yJLu6oKMkCCwc/mDAWbirZ3duaRoOBgujvKZbpkkpyDfRfWfZ0z81nN0k6L2QwC9WtDp7Nd1jShOFOp3ykwKTbsJszjxfWTWv+2XCFhTJeuM1j7R4DExC+kccsayP/Vwv9dRZs3qNj8x7vadEk2v5nu1n6uBhRcVoT2ojXLVhQtyJKRbDidajkRMZdVi1SwBowTzs1XCFJruO+4IqakjwNcGWSln1nfAh1yTtqZfbKhfDzoQvfroCGiZnCSrQBatGauk5xJrH9c8J4JhZklZzDcOR+6ng3mcZBXQayz8SJgg9agSVu1wVTBGH4TbpgFfuwQ==","attributes":{"enabled":true,"nbf":1575676225,"exp":1638835225,"created":1575676825,"updated":1575676825,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate0/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676804,"updated":1575676804}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2449']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/a310fd9eb2af4a23b3e6537e40b4d99e","kid":"https://vaultname.vault.azure.net/keys/certificate0/a310fd9eb2af4a23b3e6537e40b4d99e","sid":"https://vaultname.vault.azure.net/secrets/certificate0/a310fd9eb2af4a23b3e6537e40b4d99e","x5t":"gy17olot0BV7OJXhOHa8Xr2yRIo","cer":"MIIDWjCCAkKgAwIBAgIQRAzh76EkSKSv0wm43AMQYzANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1ODM5WhcNMjIwMzA2MDAwODM5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAUseTYoiXM/IvNVXZmdX9196tQ4VzAztWrbPe5WSZr7LyXNFxm5a2PxMS95XDuijCUpc8Vfh9rQQ0mrHt9dk1ErgXLtX3+LQbEF/63nn5xx07xVINZBVVjnDAHiUr4pcj/KAm1WDwo5IO4ZyaZZ+dcwQ9wiR/A0OFsZ3E6/3SA0PkJ2c88Eiw4/cQsj+9F/k1EzavyjXC6KjzW8ho/8U1abVnmggzy74eroXE22+hTRa2TUkqZNSJ11tr2H3g/091wygT7Cedwv/FdYQeNz/u2+ktzbzPC2DEEWSornQx3R74J6i53EHnbSn4jUqpwx9jenjoTtUMjSPzvYH4yM5PAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFOFigIF9IUEOPCeeLZ9RjXSAB4RGMB0GA1UdDgQWBBThYoCBfSFBDjwnni2fUY10gAeERjANBgkqhkiG9w0BAQsFAAOCAQEATebPSrHTtu/a6GVyAL5PGPNogvt8KsIVFUsPfxWPchtP1g8sXH+1c1ZlTSFJEv2NlNhn+jJan3vMYN7Ypu8VRxO0AIujpQcGxOZ/DyG/gOb8SzEmzRpiorw81TNByoj+nQGxbIHlZesMdAvnphAZuss5+UbSjw8oD8nzx8vuqvpSnOZ6vLr/66tf3YXpzqafEfal0z7wvL9C+cBW3B6gz4Vga8KiFZofbcdeun02NSGI68VRdG5SZKLDMgMc9mFcFjjJ/GU/8cCtTH+iEjjRBRAhBXJ9+jUvtEmWYljJUjAvuUXwVmXaaD0ZAPu6M49X7ftAr0ZrdbibZ1Rr7eWswA==","attributes":{"enabled":true,"nbf":1583452719,"exp":1646525319,"created":1583453319,"updated":1583453319,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate0/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453292,"updated":1583453292}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2449'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certificate1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate1/create?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzqU+quGgR5hh/HJ0uid+iU3+imY/XNCG8gfAtrTc/7NohmIe0bDHmXvjVQ4LT+YcCCE14imVeW4er165J4IYvqJYhht5f+dOubZ4NDn2eHa90VhnNdEX/EONPvcSF4nb/oTvDrxmTJWZ+PSGzrSlc/+PNv7s0o0v7xObZa9w5KCJ19T/2N+yu0WgkxSxhBENSQU6lggfPyQWvNS+vC3B1lTsrE7CmLC5yX7lZJ+IqgpAz0lnwfMr/OPIIOQBJJ6nj/5izxTKAXkHOcrl6oJv5ZIprwfH8jrWHgbxO67fKIzu5ZJna7Y9ykIfxMvlqKe8Stwd8xm62988o0Xr72kK1wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAFUC4fxaqB5YTjVVLiswLu0sZyJmzjKXAx7nQNddvlIPJfezhV6CR58MjQ06NklsMCZRulsZqLsiQdQ4s/lOK1Lot4J7buyBNT/vYlGvI5kp1J2CLpAZOA4Nsv6xZZLP10dXuGQ6/R5YalT/BIaQV+EQs8abK8Q+lpY2SyKrfPykCZgTnhhHyke/ahIPdYklbaaEpWeSOAUyyGoT6T3jFXB9p/qcNUazU7zEhyCNfG72Thi6yFM1QWFMfuFx8pzZxKFGjGXbx53Y2YwDiPOjO99776CqcNxXItXll9898sYx46n5XPPswY6+fEvCCA18A2Mu2GqmGZVOIOEbhT+flsw=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Certificate request is in progress. This may take some
    +        time based on the issuer provider. Please check again later.","request_id":"2c11eadd29994551a2cc819a8f873d2e"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:42 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview&request_id=2c11eadd29994551a2cc819a8f873d2e
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsk1HtgeHFzUQ3CWa0eKiB3igLw8R/TA34+BPOcn39jQUTrByIoFutvb8hSWd+OwKAZuuWaJifz+qDb3XyOI14Y+bSiAODSTtonFXgyrS7xgOtyrGmPdqMRSsQkfs9+ym4K3n5ITGRrCJNUmzGaQfWsgEPsDasr6gP1GD7g38eNmYYXcdGmHDL9RN8Rdo4lopzoP65VByYew5Igjcqn7j1wA7xseSBWEh5JRLsekcLufofa91Sf9OhjNhKGJhbf3ifvBdQ6qD8UGSg64eFtvQq+ar93s9NaOOGLyOScJiOhJbdTrKVH9r99FybqyhdcQ+zWHkvJR5qPCGCkbmROpLHQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAKWNqDgZsWQIVrIhv3cu/U5I4/3D2hXdBVOh2RJNWmeR1DHPp8jckUAkAd+uMQHCsLAIg4uyLDhTRdhv2LRrR24W0Z+sPWo480HAtnzE8onPp9E9CVBljcVuXHY/gx5Nb2MertNfnCpmpcrACuJp40WwbVbLXIKBEq7zLwYM0QO9bPWr5PgjJqkQrOub1W381LXW7a+SD1Qc/CRBT1V/qUDKQahHsEJUtONmD6aEn7ypOumuZa9m0GfXrSJweYbpxNP9Vwq7r/SpjuJH2MwPkDAkdZydqdweJRLaB0x90HVGKyD/sJrlStnZqfDixgb67NM/i7mq7mh+hHZmNdh4VFg=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzqU+quGgR5hh/HJ0uid+iU3+imY/XNCG8gfAtrTc/7NohmIe0bDHmXvjVQ4LT+YcCCE14imVeW4er165J4IYvqJYhht5f+dOubZ4NDn2eHa90VhnNdEX/EONPvcSF4nb/oTvDrxmTJWZ+PSGzrSlc/+PNv7s0o0v7xObZa9w5KCJ19T/2N+yu0WgkxSxhBENSQU6lggfPyQWvNS+vC3B1lTsrE7CmLC5yX7lZJ+IqgpAz0lnwfMr/OPIIOQBJJ6nj/5izxTKAXkHOcrl6oJv5ZIprwfH8jrWHgbxO67fKIzu5ZJna7Y9ykIfxMvlqKe8Stwd8xm62988o0Xr72kK1wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAFUC4fxaqB5YTjVVLiswLu0sZyJmzjKXAx7nQNddvlIPJfezhV6CR58MjQ06NklsMCZRulsZqLsiQdQ4s/lOK1Lot4J7buyBNT/vYlGvI5kp1J2CLpAZOA4Nsv6xZZLP10dXuGQ6/R5YalT/BIaQV+EQs8abK8Q+lpY2SyKrfPykCZgTnhhHyke/ahIPdYklbaaEpWeSOAUyyGoT6T3jFXB9p/qcNUazU7zEhyCNfG72Thi6yFM1QWFMfuFx8pzZxKFGjGXbx53Y2YwDiPOjO99776CqcNxXItXll9898sYx46n5XPPswY6+fEvCCA18A2Mu2GqmGZVOIOEbhT+flsw=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"ba4530a4de4e4bf6b688ddab12fb96c0"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:40 GMT']
    -      expires: ['-1']
    -      location: ['https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.0&request_id=ba4530a4de4e4bf6b688ddab12fb96c0']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 202, message: Accepted}
    +        time based on the issuer provider. Please check again later.","request_id":"2c11eadd29994551a2cc819a8f873d2e"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsk1HtgeHFzUQ3CWa0eKiB3igLw8R/TA34+BPOcn39jQUTrByIoFutvb8hSWd+OwKAZuuWaJifz+qDb3XyOI14Y+bSiAODSTtonFXgyrS7xgOtyrGmPdqMRSsQkfs9+ym4K3n5ITGRrCJNUmzGaQfWsgEPsDasr6gP1GD7g38eNmYYXcdGmHDL9RN8Rdo4lopzoP65VByYew5Igjcqn7j1wA7xseSBWEh5JRLsekcLufofa91Sf9OhjNhKGJhbf3ifvBdQ6qD8UGSg64eFtvQq+ar93s9NaOOGLyOScJiOhJbdTrKVH9r99FybqyhdcQ+zWHkvJR5qPCGCkbmROpLHQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAKWNqDgZsWQIVrIhv3cu/U5I4/3D2hXdBVOh2RJNWmeR1DHPp8jckUAkAd+uMQHCsLAIg4uyLDhTRdhv2LRrR24W0Z+sPWo480HAtnzE8onPp9E9CVBljcVuXHY/gx5Nb2MertNfnCpmpcrACuJp40WwbVbLXIKBEq7zLwYM0QO9bPWr5PgjJqkQrOub1W381LXW7a+SD1Qc/CRBT1V/qUDKQahHsEJUtONmD6aEn7ypOumuZa9m0GfXrSJweYbpxNP9Vwq7r/SpjuJH2MwPkDAkdZydqdweJRLaB0x90HVGKyD/sJrlStnZqfDixgb67NM/i7mq7mh+hHZmNdh4VFg=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzqU+quGgR5hh/HJ0uid+iU3+imY/XNCG8gfAtrTc/7NohmIe0bDHmXvjVQ4LT+YcCCE14imVeW4er165J4IYvqJYhht5f+dOubZ4NDn2eHa90VhnNdEX/EONPvcSF4nb/oTvDrxmTJWZ+PSGzrSlc/+PNv7s0o0v7xObZa9w5KCJ19T/2N+yu0WgkxSxhBENSQU6lggfPyQWvNS+vC3B1lTsrE7CmLC5yX7lZJ+IqgpAz0lnwfMr/OPIIOQBJJ6nj/5izxTKAXkHOcrl6oJv5ZIprwfH8jrWHgbxO67fKIzu5ZJna7Y9ykIfxMvlqKe8Stwd8xm62988o0Xr72kK1wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAFUC4fxaqB5YTjVVLiswLu0sZyJmzjKXAx7nQNddvlIPJfezhV6CR58MjQ06NklsMCZRulsZqLsiQdQ4s/lOK1Lot4J7buyBNT/vYlGvI5kp1J2CLpAZOA4Nsv6xZZLP10dXuGQ6/R5YalT/BIaQV+EQs8abK8Q+lpY2SyKrfPykCZgTnhhHyke/ahIPdYklbaaEpWeSOAUyyGoT6T3jFXB9p/qcNUazU7zEhyCNfG72Thi6yFM1QWFMfuFx8pzZxKFGjGXbx53Y2YwDiPOjO99776CqcNxXItXll9898sYx46n5XPPswY6+fEvCCA18A2Mu2GqmGZVOIOEbhT+flsw=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"ba4530a4de4e4bf6b688ddab12fb96c0"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"2c11eadd29994551a2cc819a8f873d2e"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsk1HtgeHFzUQ3CWa0eKiB3igLw8R/TA34+BPOcn39jQUTrByIoFutvb8hSWd+OwKAZuuWaJifz+qDb3XyOI14Y+bSiAODSTtonFXgyrS7xgOtyrGmPdqMRSsQkfs9+ym4K3n5ITGRrCJNUmzGaQfWsgEPsDasr6gP1GD7g38eNmYYXcdGmHDL9RN8Rdo4lopzoP65VByYew5Igjcqn7j1wA7xseSBWEh5JRLsekcLufofa91Sf9OhjNhKGJhbf3ifvBdQ6qD8UGSg64eFtvQq+ar93s9NaOOGLyOScJiOhJbdTrKVH9r99FybqyhdcQ+zWHkvJR5qPCGCkbmROpLHQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAKWNqDgZsWQIVrIhv3cu/U5I4/3D2hXdBVOh2RJNWmeR1DHPp8jckUAkAd+uMQHCsLAIg4uyLDhTRdhv2LRrR24W0Z+sPWo480HAtnzE8onPp9E9CVBljcVuXHY/gx5Nb2MertNfnCpmpcrACuJp40WwbVbLXIKBEq7zLwYM0QO9bPWr5PgjJqkQrOub1W381LXW7a+SD1Qc/CRBT1V/qUDKQahHsEJUtONmD6aEn7ypOumuZa9m0GfXrSJweYbpxNP9Vwq7r/SpjuJH2MwPkDAkdZydqdweJRLaB0x90HVGKyD/sJrlStnZqfDixgb67NM/i7mq7mh+hHZmNdh4VFg=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate1","request_id":"ba4530a4de4e4bf6b688ddab12fb96c0"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1267']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzqU+quGgR5hh/HJ0uid+iU3+imY/XNCG8gfAtrTc/7NohmIe0bDHmXvjVQ4LT+YcCCE14imVeW4er165J4IYvqJYhht5f+dOubZ4NDn2eHa90VhnNdEX/EONPvcSF4nb/oTvDrxmTJWZ+PSGzrSlc/+PNv7s0o0v7xObZa9w5KCJ19T/2N+yu0WgkxSxhBENSQU6lggfPyQWvNS+vC3B1lTsrE7CmLC5yX7lZJ+IqgpAz0lnwfMr/OPIIOQBJJ6nj/5izxTKAXkHOcrl6oJv5ZIprwfH8jrWHgbxO67fKIzu5ZJna7Y9ykIfxMvlqKe8Stwd8xm62988o0Xr72kK1wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAFUC4fxaqB5YTjVVLiswLu0sZyJmzjKXAx7nQNddvlIPJfezhV6CR58MjQ06NklsMCZRulsZqLsiQdQ4s/lOK1Lot4J7buyBNT/vYlGvI5kp1J2CLpAZOA4Nsv6xZZLP10dXuGQ6/R5YalT/BIaQV+EQs8abK8Q+lpY2SyKrfPykCZgTnhhHyke/ahIPdYklbaaEpWeSOAUyyGoT6T3jFXB9p/qcNUazU7zEhyCNfG72Thi6yFM1QWFMfuFx8pzZxKFGjGXbx53Y2YwDiPOjO99776CqcNxXItXll9898sYx46n5XPPswY6+fEvCCA18A2Mu2GqmGZVOIOEbhT+flsw=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Certificate request is in progress. This may take some
    +        time based on the issuer provider. Please check again later.","request_id":"2c11eadd29994551a2cc819a8f873d2e"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/a04ab1a505d64653b6c00bea79b811ea","kid":"https://vaultname.vault.azure.net/keys/certificate1/a04ab1a505d64653b6c00bea79b811ea","sid":"https://vaultname.vault.azure.net/secrets/certificate1/a04ab1a505d64653b6c00bea79b811ea","x5t":"imAnJokSekBs5IGSiNseILn_ACw","cer":"MIIDWjCCAkKgAwIBAgIQdqjvhqCERyWaS8SdVPtjgDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1MDQ4WhcNMjExMjA3MDAwMDQ4WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCyTUe2B4cXNRDcJZrR4qIHeKAvDxH9MDfj4E85yff2NBROsHIigW629vyFJZ347AoBm65ZomJ/P6oNvdfI4jXhj5tKIA4NJO2icVeDKtLvGA63KsaY92oxFKxCR+z37KbgrefkhMZGsIk1SbMZpB9ayAQ+wNqyvqA/UYPuDfx42Zhhdx0aYcMv1E3xF2jiWinOg/rlUHJh7DkiCNyqfuPXADvGx5IFYSHklEux6Rwu5+h9r3VJ/06GM2EoYmFt/eJ+8F1DqoPxQZKDrh4W29Cr5qv3ez01o44YvI5JwmI6Elt1OspUf2v30XJurKF1xD7NYeS8lHmo8IYKRuZE6ksdAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFGOVMIA+JeZXfqK/6RAmGUuMCZpeMB0GA1UdDgQWBBRjlTCAPiXmV36iv+kQJhlLjAmaXjANBgkqhkiG9w0BAQsFAAOCAQEAgDt4invotNlNhAZ3PKRLPgyHCgwAhhmVqRRGP0oddugizZ9r9J4KMaBUwRkcSdfhLSqRgYjRY5AMMGG+zci4lmjhN+Pg0aM7iJTUt5ffaM9cSntZZbEFh1viZa6gJz5oEz7i0mTaxOwbQFyCEVOKHiNHeQkHNbax+cfnfEKEmdIeovtCKncEVmvFCa6/lzIklo417idBmy38xsVMZkIxPaEiqJbbhoILDx96ekFSe4AsKRMIyT0UO+RFhZUUNkSPpTGeIcWpPdd8hUrsXph+V7uEHMHme93NqB+Ht4Lg0GKYloX2KF3ngI+hB7bJQ+zvKr0KuDj2mlCUI9VrGbOQ7w==","attributes":{"enabled":true,"nbf":1575676248,"exp":1638835248,"created":1575676848,"updated":1575676848,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate1/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676840,"updated":1575676840}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2449']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzqU+quGgR5hh/HJ0uid+iU3+imY/XNCG8gfAtrTc/7NohmIe0bDHmXvjVQ4LT+YcCCE14imVeW4er165J4IYvqJYhht5f+dOubZ4NDn2eHa90VhnNdEX/EONPvcSF4nb/oTvDrxmTJWZ+PSGzrSlc/+PNv7s0o0v7xObZa9w5KCJ19T/2N+yu0WgkxSxhBENSQU6lggfPyQWvNS+vC3B1lTsrE7CmLC5yX7lZJ+IqgpAz0lnwfMr/OPIIOQBJJ6nj/5izxTKAXkHOcrl6oJv5ZIprwfH8jrWHgbxO67fKIzu5ZJna7Y9ykIfxMvlqKe8Stwd8xm62988o0Xr72kK1wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAFUC4fxaqB5YTjVVLiswLu0sZyJmzjKXAx7nQNddvlIPJfezhV6CR58MjQ06NklsMCZRulsZqLsiQdQ4s/lOK1Lot4J7buyBNT/vYlGvI5kp1J2CLpAZOA4Nsv6xZZLP10dXuGQ6/R5YalT/BIaQV+EQs8abK8Q+lpY2SyKrfPykCZgTnhhHyke/ahIPdYklbaaEpWeSOAUyyGoT6T3jFXB9p/qcNUazU7zEhyCNfG72Thi6yFM1QWFMfuFx8pzZxKFGjGXbx53Y2YwDiPOjO99776CqcNxXItXll9898sYx46n5XPPswY6+fEvCCA18A2Mu2GqmGZVOIOEbhT+flsw=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate1","request_id":"2c11eadd29994551a2cc819a8f873d2e"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1267'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certificate1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/fdd2e30be1b24a5cb97623c29e0edd22","kid":"https://vaultname.vault.azure.net/keys/certificate1/fdd2e30be1b24a5cb97623c29e0edd22","sid":"https://vaultname.vault.azure.net/secrets/certificate1/fdd2e30be1b24a5cb97623c29e0edd22","x5t":"dZ2aA1SjRZ_jpz5SlV5Gk-W7c-c","cer":"MIIDWjCCAkKgAwIBAgIQATWMBDUsRc6UgHsucuG85TANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTA0WhcNMjIwMzA2MDAwOTA0WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDOpT6q4aBHmGH8cnS6J36JTf6KZj9c0IbyB8C2tNz/s2iGYh7RsMeZe+NVDgtP5hwIITXiKZV5bh6vXrknghi+oliGG3l/5065tng0OfZ4dr3RWGc10Rf8Q40+9xIXidv+hO8OvGZMlZn49IbOtKVz/482/uzSjS/vE5tlr3DkoInX1P/Y37K7RaCTFLGEEQ1JBTqWCB8/JBa81L68LcHWVOysTsKYsLnJfuVkn4iqCkDPSWfB8yv848gg5AEknqeP/mLPFMoBeQc5yuXqgm/lkimvB8fyOtYeBvE7rt8ojO7lkmdrtj3KQh/Ey+Wop7xK3B3zGbrb3zyjRevvaQrXAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFNQBG2AeNcj7USSum6d3m4L9zhzKMB0GA1UdDgQWBBTUARtgHjXI+1Ekrpund5uC/c4cyjANBgkqhkiG9w0BAQsFAAOCAQEAJWakIT0C7JNju0GPggQ/45sxWZvsStG1GSdo4lIoOOUnyy9gWK+d+FnLC681hsqIdGoMX9uaaMMuge3hUE7ofyphC9Ve+2BqPFieOAWfSBniv7ROYj7arC3PrAPrKoUoQGpfhtRYXyUhmFfsycVP9Niu9szQR88ofhIK2Bngh7HNmDiMH9jZGd+6eB3tgkSVNcTjysoRgNJ0l/RRe22N29HADkQyCW4BKjE4tPBLVw9Upj8MagFrLb3YwKuxNPhuyyn6iBZuvasgI5ET4IhyGwOOtV4HTqOM4rBVkTD9esx2ybm35ajgh2VYo80MMorIzhFM+bxpLptql83AAInynQ==","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453344,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate1/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453323,"updated":1583453323}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2449'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certificate2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate2/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA10RWeF8wYLnYapcy/8LYoOXs34xa/uG9VNxz+HaUuJKW5nIPK9qMglxkw53JI5LH4vPHvrC2bhwPuube85VM/5Ahyvy5RIfnxDGdS87OPN90gxbfZf+CcIn0Hl7NZ3lvwpik+radsBuW7T8u57RIsuohSGePCxp9aWTuLkZYkhpNvevg7o7JW0qrF/Fr9R6t3L3b/NZDIAWnKGzibYbOzhMZXHVGPnfKTa2jSNDAM84g7B5SlXao/FT8MnkcwGqZh+YAz0IV8/GMzqKxC273jlzVfeCAXvcwcRjE3uiDPqILcv1nCDbjsJSDedgYH1s5IC+6pHXZ88DATgdxG6eOewIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAA8aXn77BccSfxUrTfzou9Wt34dOQpia5637H4m1xkFCCsy6rMRTzcoDuCU7bkPTgygBOVeU5cXFqK6LZWNv0YGjtvh+d6uONLuZhT2F8n2biddMoCjK/Luqs2PcJMF7kh+GogEyaLczJxhxI0VkvJwD9UgiRXVQAZA1kOh23gVYYAlV1Jxii0erXWqrebBmejQgOrr/KUQYW8frhuAQZPlHSi12j0VlLYr7mUrYOhawtc+mSuOw/y2hiiBbLAQ5cyNkI2MKARE5xRo2GEydpYM/XN1Sb6RV7g/C8esa7QzQ6YDfgmjWsMpUTbFH3eyA+B/diWacPUrXff6lHhQbBHo=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1S0Ya0E4CUJBuwKNHA/t3pket7F4wP3ZvzTX8ssguzU/L5ndMqOPQ/VCjJ7dQKgUoT54e5EvFmerq5VrfCVQWfXmdhgzgyyWAv3qGkedd9IW+Il/n5YTRK1FBjog3aJn54h2HOcvCCiP3EaT1JLK/LZxE7I7wX9aFhl8BeXgxlQblNk9s6klOryPCGiPJklNDmW7cXapQxX/oANlwBL0kIDQqp8c1WGtRdxX6NhPHZQrQBSTsbapYDSB1o9i9woX76BGOKoU+oY6lsNiOc1/hdYizmPPUh94LFDkxRHMgAe7D21ICQeoFiSMenpgCoC665LEjqV9Wv7c+NIXak/o6wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADKc50u5ZbSLuZOB69uSiZPwbb82a6gASN7X9FhvfKSPzKGk7hxtAeMYbwJFmjRxOgh/fiLP+3989FMyu0zvYMGOhv0ZYkdwi1/sss8nzZUT3O2ILWkv0feVjcNDNYz4u0We6/cKX+SEclGkDKznt3Igq0MRulhPbT8zImOKzbbcS1JPf84jxiuA4oe2U424RCt1gW2t6r4K+5Zfki6Pm3oVwx5JsNO5zm+s0GyNSG3TVCmeu+Ih7FN8MYaFovemwaFs6wCTA3W4rPLnK/aLbdELUMSJrThIwGVIdgTPWFVUOhaVsvN3X7q0I9/RxslvBgzGwjgO47GW4onUYGQswbs=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"65d492ddea0c42c2a5291adefa1634de"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:56 GMT']
    -      expires: ['-1']
    -      location: ['https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.0&request_id=65d492ddea0c42c2a5291adefa1634de']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 202, message: Accepted}
    +        time based on the issuer provider. Please check again later.","request_id":"c262bd0030d1472ab0b91e6765fe18ed"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:14 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.1-preview&request_id=c262bd0030d1472ab0b91e6765fe18ed
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA10RWeF8wYLnYapcy/8LYoOXs34xa/uG9VNxz+HaUuJKW5nIPK9qMglxkw53JI5LH4vPHvrC2bhwPuube85VM/5Ahyvy5RIfnxDGdS87OPN90gxbfZf+CcIn0Hl7NZ3lvwpik+radsBuW7T8u57RIsuohSGePCxp9aWTuLkZYkhpNvevg7o7JW0qrF/Fr9R6t3L3b/NZDIAWnKGzibYbOzhMZXHVGPnfKTa2jSNDAM84g7B5SlXao/FT8MnkcwGqZh+YAz0IV8/GMzqKxC273jlzVfeCAXvcwcRjE3uiDPqILcv1nCDbjsJSDedgYH1s5IC+6pHXZ88DATgdxG6eOewIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAA8aXn77BccSfxUrTfzou9Wt34dOQpia5637H4m1xkFCCsy6rMRTzcoDuCU7bkPTgygBOVeU5cXFqK6LZWNv0YGjtvh+d6uONLuZhT2F8n2biddMoCjK/Luqs2PcJMF7kh+GogEyaLczJxhxI0VkvJwD9UgiRXVQAZA1kOh23gVYYAlV1Jxii0erXWqrebBmejQgOrr/KUQYW8frhuAQZPlHSi12j0VlLYr7mUrYOhawtc+mSuOw/y2hiiBbLAQ5cyNkI2MKARE5xRo2GEydpYM/XN1Sb6RV7g/C8esa7QzQ6YDfgmjWsMpUTbFH3eyA+B/diWacPUrXff6lHhQbBHo=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1S0Ya0E4CUJBuwKNHA/t3pket7F4wP3ZvzTX8ssguzU/L5ndMqOPQ/VCjJ7dQKgUoT54e5EvFmerq5VrfCVQWfXmdhgzgyyWAv3qGkedd9IW+Il/n5YTRK1FBjog3aJn54h2HOcvCCiP3EaT1JLK/LZxE7I7wX9aFhl8BeXgxlQblNk9s6klOryPCGiPJklNDmW7cXapQxX/oANlwBL0kIDQqp8c1WGtRdxX6NhPHZQrQBSTsbapYDSB1o9i9woX76BGOKoU+oY6lsNiOc1/hdYizmPPUh94LFDkxRHMgAe7D21ICQeoFiSMenpgCoC665LEjqV9Wv7c+NIXak/o6wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADKc50u5ZbSLuZOB69uSiZPwbb82a6gASN7X9FhvfKSPzKGk7hxtAeMYbwJFmjRxOgh/fiLP+3989FMyu0zvYMGOhv0ZYkdwi1/sss8nzZUT3O2ILWkv0feVjcNDNYz4u0We6/cKX+SEclGkDKznt3Igq0MRulhPbT8zImOKzbbcS1JPf84jxiuA4oe2U424RCt1gW2t6r4K+5Zfki6Pm3oVwx5JsNO5zm+s0GyNSG3TVCmeu+Ih7FN8MYaFovemwaFs6wCTA3W4rPLnK/aLbdELUMSJrThIwGVIdgTPWFVUOhaVsvN3X7q0I9/RxslvBgzGwjgO47GW4onUYGQswbs=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"65d492ddea0c42c2a5291adefa1634de"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"c262bd0030d1472ab0b91e6765fe18ed"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA10RWeF8wYLnYapcy/8LYoOXs34xa/uG9VNxz+HaUuJKW5nIPK9qMglxkw53JI5LH4vPHvrC2bhwPuube85VM/5Ahyvy5RIfnxDGdS87OPN90gxbfZf+CcIn0Hl7NZ3lvwpik+radsBuW7T8u57RIsuohSGePCxp9aWTuLkZYkhpNvevg7o7JW0qrF/Fr9R6t3L3b/NZDIAWnKGzibYbOzhMZXHVGPnfKTa2jSNDAM84g7B5SlXao/FT8MnkcwGqZh+YAz0IV8/GMzqKxC273jlzVfeCAXvcwcRjE3uiDPqILcv1nCDbjsJSDedgYH1s5IC+6pHXZ88DATgdxG6eOewIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAA8aXn77BccSfxUrTfzou9Wt34dOQpia5637H4m1xkFCCsy6rMRTzcoDuCU7bkPTgygBOVeU5cXFqK6LZWNv0YGjtvh+d6uONLuZhT2F8n2biddMoCjK/Luqs2PcJMF7kh+GogEyaLczJxhxI0VkvJwD9UgiRXVQAZA1kOh23gVYYAlV1Jxii0erXWqrebBmejQgOrr/KUQYW8frhuAQZPlHSi12j0VlLYr7mUrYOhawtc+mSuOw/y2hiiBbLAQ5cyNkI2MKARE5xRo2GEydpYM/XN1Sb6RV7g/C8esa7QzQ6YDfgmjWsMpUTbFH3eyA+B/diWacPUrXff6lHhQbBHo=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1S0Ya0E4CUJBuwKNHA/t3pket7F4wP3ZvzTX8ssguzU/L5ndMqOPQ/VCjJ7dQKgUoT54e5EvFmerq5VrfCVQWfXmdhgzgyyWAv3qGkedd9IW+Il/n5YTRK1FBjog3aJn54h2HOcvCCiP3EaT1JLK/LZxE7I7wX9aFhl8BeXgxlQblNk9s6klOryPCGiPJklNDmW7cXapQxX/oANlwBL0kIDQqp8c1WGtRdxX6NhPHZQrQBSTsbapYDSB1o9i9woX76BGOKoU+oY6lsNiOc1/hdYizmPPUh94LFDkxRHMgAe7D21ICQeoFiSMenpgCoC665LEjqV9Wv7c+NIXak/o6wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADKc50u5ZbSLuZOB69uSiZPwbb82a6gASN7X9FhvfKSPzKGk7hxtAeMYbwJFmjRxOgh/fiLP+3989FMyu0zvYMGOhv0ZYkdwi1/sss8nzZUT3O2ILWkv0feVjcNDNYz4u0We6/cKX+SEclGkDKznt3Igq0MRulhPbT8zImOKzbbcS1JPf84jxiuA4oe2U424RCt1gW2t6r4K+5Zfki6Pm3oVwx5JsNO5zm+s0GyNSG3TVCmeu+Ih7FN8MYaFovemwaFs6wCTA3W4rPLnK/aLbdELUMSJrThIwGVIdgTPWFVUOhaVsvN3X7q0I9/RxslvBgzGwjgO47GW4onUYGQswbs=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"65d492ddea0c42c2a5291adefa1634de"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:06 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"c262bd0030d1472ab0b91e6765fe18ed"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:24 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA10RWeF8wYLnYapcy/8LYoOXs34xa/uG9VNxz+HaUuJKW5nIPK9qMglxkw53JI5LH4vPHvrC2bhwPuube85VM/5Ahyvy5RIfnxDGdS87OPN90gxbfZf+CcIn0Hl7NZ3lvwpik+radsBuW7T8u57RIsuohSGePCxp9aWTuLkZYkhpNvevg7o7JW0qrF/Fr9R6t3L3b/NZDIAWnKGzibYbOzhMZXHVGPnfKTa2jSNDAM84g7B5SlXao/FT8MnkcwGqZh+YAz0IV8/GMzqKxC273jlzVfeCAXvcwcRjE3uiDPqILcv1nCDbjsJSDedgYH1s5IC+6pHXZ88DATgdxG6eOewIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAA8aXn77BccSfxUrTfzou9Wt34dOQpia5637H4m1xkFCCsy6rMRTzcoDuCU7bkPTgygBOVeU5cXFqK6LZWNv0YGjtvh+d6uONLuZhT2F8n2biddMoCjK/Luqs2PcJMF7kh+GogEyaLczJxhxI0VkvJwD9UgiRXVQAZA1kOh23gVYYAlV1Jxii0erXWqrebBmejQgOrr/KUQYW8frhuAQZPlHSi12j0VlLYr7mUrYOhawtc+mSuOw/y2hiiBbLAQ5cyNkI2MKARE5xRo2GEydpYM/XN1Sb6RV7g/C8esa7QzQ6YDfgmjWsMpUTbFH3eyA+B/diWacPUrXff6lHhQbBHo=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate2","request_id":"65d492ddea0c42c2a5291adefa1634de"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1267']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1S0Ya0E4CUJBuwKNHA/t3pket7F4wP3ZvzTX8ssguzU/L5ndMqOPQ/VCjJ7dQKgUoT54e5EvFmerq5VrfCVQWfXmdhgzgyyWAv3qGkedd9IW+Il/n5YTRK1FBjog3aJn54h2HOcvCCiP3EaT1JLK/LZxE7I7wX9aFhl8BeXgxlQblNk9s6klOryPCGiPJklNDmW7cXapQxX/oANlwBL0kIDQqp8c1WGtRdxX6NhPHZQrQBSTsbapYDSB1o9i9woX76BGOKoU+oY6lsNiOc1/hdYizmPPUh94LFDkxRHMgAe7D21ICQeoFiSMenpgCoC665LEjqV9Wv7c+NIXak/o6wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADKc50u5ZbSLuZOB69uSiZPwbb82a6gASN7X9FhvfKSPzKGk7hxtAeMYbwJFmjRxOgh/fiLP+3989FMyu0zvYMGOhv0ZYkdwi1/sss8nzZUT3O2ILWkv0feVjcNDNYz4u0We6/cKX+SEclGkDKznt3Igq0MRulhPbT8zImOKzbbcS1JPf84jxiuA4oe2U424RCt1gW2t6r4K+5Zfki6Pm3oVwx5JsNO5zm+s0GyNSG3TVCmeu+Ih7FN8MYaFovemwaFs6wCTA3W4rPLnK/aLbdELUMSJrThIwGVIdgTPWFVUOhaVsvN3X7q0I9/RxslvBgzGwjgO47GW4onUYGQswbs=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate2","request_id":"c262bd0030d1472ab0b91e6765fe18ed"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1267'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate2/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate2/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/f0832a0401a04949a523c1183e0151f0","kid":"https://vaultname.vault.azure.net/keys/certificate2/f0832a0401a04949a523c1183e0151f0","sid":"https://vaultname.vault.azure.net/secrets/certificate2/f0832a0401a04949a523c1183e0151f0","x5t":"lVSDr-Z9X6RBBhDH4XGoR_JKBus","cer":"MIIDWjCCAkKgAwIBAgIQUUxRRlMtSNCAETWAixnEuDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1MTEwWhcNMjExMjA3MDAwMTEwWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDXRFZ4XzBgudhqlzL/wtig5ezfjFr+4b1U3HP4dpS4kpbmcg8r2oyCXGTDnckjksfi88e+sLZuHA+65t7zlUz/kCHK/LlEh+fEMZ1Lzs4833SDFt9l/4JwifQeXs1neW/CmKT6tp2wG5btPy7ntEiy6iFIZ48LGn1pZO4uRliSGk296+DujslbSqsX8Wv1Hq3cvdv81kMgBacobOJths7OExlcdUY+d8pNraNI0MAzziDsHlKVdqj8VPwyeRzAapmH5gDPQhXz8YzOorELbveOXNV94IBe9zBxGMTe6IM+ogty/WcINuOwlIN52BgfWzkgL7qkddnzwMBOB3Ebp457AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFPRWQyDyJsotVTFvhVS5g8ctwlzFMB0GA1UdDgQWBBT0VkMg8ibKLVUxb4VUuYPHLcJcxTANBgkqhkiG9w0BAQsFAAOCAQEAUdeP4XFITRtRuVLToDwKCfqRu7Mi9lY8JiI9Yv49714fkmsO7zJjeNHFrLHyPEl7djU8nxqW/YIwBKsD4m4wD/FDpeiVtPfmk1v/AobthmxiGx3sM6HQ+LKSpQgqtKLzuNIfVDxP5H/UTujKIHOWQoZgH3wmBUDJox7KTdKYRuYUHL1bLZrjj+tNCu/RjTkfXIC9dIecNTmN+yGGqUQXJiqpH2/EHH7rFOuEYw6qSlpa//kAq4CPpLo9Tcbq7p8adGvku/HcdFerXEkSQeOP3PzY0GnB+Vjxkb8ql+2A+LpNK5lrfFx7O3FKe5Upm8qu1e6icIK2WWDr//UMHYMldg==","attributes":{"enabled":true,"nbf":1575676270,"exp":1638835270,"created":1575676870,"updated":1575676870,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate2/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676856,"updated":1575676856}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2449']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:21 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/3794876c928b494485806318c06a10be","kid":"https://vaultname.vault.azure.net/keys/certificate2/3794876c928b494485806318c06a10be","sid":"https://vaultname.vault.azure.net/secrets/certificate2/3794876c928b494485806318c06a10be","x5t":"WagTdeRzWdfoVX8Vxaoe6wQqlDM","cer":"MIIDWjCCAkKgAwIBAgIQOL7hjgyqTSSX60ODc2X5EjANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTMwWhcNMjIwMzA2MDAwOTMwWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVLRhrQTgJQkG7Ao0cD+3emR63sXjA/dm/NNfyyyC7NT8vmd0yo49D9UKMnt1AqBShPnh7kS8WZ6urlWt8JVBZ9eZ2GDODLJYC/eoaR5130hb4iX+flhNErUUGOiDdomfniHYc5y8IKI/cRpPUksr8tnETsjvBf1oWGXwF5eDGVBuU2T2zqSU6vI8IaI8mSU0OZbtxdqlDFf+gA2XAEvSQgNCqnxzVYa1F3Ffo2E8dlCtAFJOxtqlgNIHWj2L3ChfvoEY4qhT6hjqWw2I5zX+F1iLOY89SH3gsUOTFEcyAB7sPbUgJB6gWJIx6emAKgLrrksSOpX1a/tz40hdqT+jrAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFON+k0jQEf/qBBATQmY0tft10n8fMB0GA1UdDgQWBBTjfpNI0BH/6gQQE0JmNLX7ddJ/HzANBgkqhkiG9w0BAQsFAAOCAQEAe5M2+7uMiEPblUN0KaGBa0pPuTnmrwywboo0CDh7LL/gZ8nFRha9DMmhe23XFKCPdgyh8SuijTTdFfjMnkkq4FdGn6uilF9PlaTcUfV/pte26oOW+/H70GZqA/JphjJc2qiYAZfIZExLQFcgTR7upoAwXhXos3K7fdeN8uI955fguz2n+hQJHtxJylQ8AhsSpcb8vxJj040DXq1GXU0fi9lL0BIze0mvUuB3WYHBTxU2hDbcFGS9gmGBX8hbR9uWhrwZBELCMUPSP4v9Pg91SBMjMBENQ96SGaCZjtFNagaekgYw63gDRFjf1Op6tcMIGYSAg7NQmBmm05uHnhDrdw==","attributes":{"enabled":true,"nbf":1583452770,"exp":1646525370,"created":1583453370,"updated":1583453370,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate2/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453354,"updated":1583453354}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2449'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certificate3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate3/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyo9Wm2LdyXqllLXlKq8vwIbFumbKWyLE+cu9qEOA+ZlXVKdhBtFyujkT/1H/V0UJ1rNPywNb+vS2R/qqOMlJRtLWJNquC42gKqbMJ4n4zL+Bren0OTuaPlektBxRHFhln3W8ZKvoaHZ2a+K/dfJiG1avZfLMrQzBN/moSK1KDhD6hgvU7FCHuM6ajCr87tGfcDq2pge/XwnP9f11L3mgrNrb/5Xycnn0jj98g7eOFoYErX3ZwmudjVUY7ruMEyxoBEASx1hempc61aS3yGBj0L2PkeAmKtkyTnmy1eckktG3GFKS3f/QfbGZ8IC51epdkOGdM7F/bZh8Q3PEX7SpXwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAEd6dM8wqXzsSaIfHwGqrYr0yMJw1ecf5l2hbJMmpDJBnmGE5IVyBYrhbCzRb1VoqAEnunrreH4o1gtJMgfx5+iBddvZjmIRA7g5JvhGRgBGZwI2dfnAZ2GcAAIIe5j80MEpjhdclxqxS9bJbMlmfOPDtWpg/9YXNjbLGVNwPz+4KP2H5q4aJ/aTpGTn/wl6j8Ch1xlUzkGvX3c9dqaZ6fbDgoDlbslSpJqiGWmbN6GwFGQxeeg7bW3TbZT/99E/1/E1CUYpkRkQ8z99AXqKKnm17oeSL6Y7npFJV4s6GiAn5UvmDCz3XiAht55kGikLi9YPtcwjQUHTUGcULJN6Xew=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAreaRHSNid38C+6JGDwKAv7pyJvMYCpglU2+XJRtMgKreYqxP2zuWlbRR9TegT7jBMVGjel9yHGgjEu3hgaNzWrOnoeAg2UyNsbEX1u8f1lqSR4xNoLkNgY5+Tjzl713qrRcJQ/qL/cYbH0+u81YNhc5kkiVIIQbnNDQkDhKzRhVAb6KI1F2HrNgKkegvfi8M4DC31eziNvjxyjzJnWqu4X9YrhdYNE0omDoWnLZU5ZQpaHBMA3p85SDw7I2l0iIf1GwVHzq4vyVPqvOfWRVYFchOFukEGLUhfgIf0mvHgqLbWw6b+/+9htBaFYO7rPreBUPj841fhfOPb80G9QLd6QIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAGwV84Qs1X/GHGcdmg3gJLwekj0elGXYbGTa8PF7bli6WZHE0RGSI9PbfkLB8ksA05BBhoXuHlbx9n0+NKH2RynbEkAj7NeDZbIkOeS5KindZnc1NYfLOGNXxqRATQoyTSMqbrZeYRo2OuBQ0GJEx74saVFDF9MBmvRKFflEpAzbgrcsB4CxMkyj2yxmRVLyH1xUyFx1Uq6svlidyjOrhni6h5tWy2V2xik6MgnFMoTNZYVvkWwSZAdH6izkYMSQPFEcm2+RQ7noguZ4EQ2H32v0NaVruP4ChzAIQooN3xMzI2klzSOZgQb89CRAtZUXKxp3QLefotrJwhQTX8/jhk8=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"09aadba2bde84fdeaba95c55750eac66"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:22 GMT']
    -      expires: ['-1']
    -      location: ['https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.0&request_id=09aadba2bde84fdeaba95c55750eac66']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 202, message: Accepted}
    +        time based on the issuer provider. Please check again later.","request_id":"4a14e1d409104aff9209b647f52eee90"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:35 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview&request_id=4a14e1d409104aff9209b647f52eee90
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyo9Wm2LdyXqllLXlKq8vwIbFumbKWyLE+cu9qEOA+ZlXVKdhBtFyujkT/1H/V0UJ1rNPywNb+vS2R/qqOMlJRtLWJNquC42gKqbMJ4n4zL+Bren0OTuaPlektBxRHFhln3W8ZKvoaHZ2a+K/dfJiG1avZfLMrQzBN/moSK1KDhD6hgvU7FCHuM6ajCr87tGfcDq2pge/XwnP9f11L3mgrNrb/5Xycnn0jj98g7eOFoYErX3ZwmudjVUY7ruMEyxoBEASx1hempc61aS3yGBj0L2PkeAmKtkyTnmy1eckktG3GFKS3f/QfbGZ8IC51epdkOGdM7F/bZh8Q3PEX7SpXwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAEd6dM8wqXzsSaIfHwGqrYr0yMJw1ecf5l2hbJMmpDJBnmGE5IVyBYrhbCzRb1VoqAEnunrreH4o1gtJMgfx5+iBddvZjmIRA7g5JvhGRgBGZwI2dfnAZ2GcAAIIe5j80MEpjhdclxqxS9bJbMlmfOPDtWpg/9YXNjbLGVNwPz+4KP2H5q4aJ/aTpGTn/wl6j8Ch1xlUzkGvX3c9dqaZ6fbDgoDlbslSpJqiGWmbN6GwFGQxeeg7bW3TbZT/99E/1/E1CUYpkRkQ8z99AXqKKnm17oeSL6Y7npFJV4s6GiAn5UvmDCz3XiAht55kGikLi9YPtcwjQUHTUGcULJN6Xew=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAreaRHSNid38C+6JGDwKAv7pyJvMYCpglU2+XJRtMgKreYqxP2zuWlbRR9TegT7jBMVGjel9yHGgjEu3hgaNzWrOnoeAg2UyNsbEX1u8f1lqSR4xNoLkNgY5+Tjzl713qrRcJQ/qL/cYbH0+u81YNhc5kkiVIIQbnNDQkDhKzRhVAb6KI1F2HrNgKkegvfi8M4DC31eziNvjxyjzJnWqu4X9YrhdYNE0omDoWnLZU5ZQpaHBMA3p85SDw7I2l0iIf1GwVHzq4vyVPqvOfWRVYFchOFukEGLUhfgIf0mvHgqLbWw6b+/+9htBaFYO7rPreBUPj841fhfOPb80G9QLd6QIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAGwV84Qs1X/GHGcdmg3gJLwekj0elGXYbGTa8PF7bli6WZHE0RGSI9PbfkLB8ksA05BBhoXuHlbx9n0+NKH2RynbEkAj7NeDZbIkOeS5KindZnc1NYfLOGNXxqRATQoyTSMqbrZeYRo2OuBQ0GJEx74saVFDF9MBmvRKFflEpAzbgrcsB4CxMkyj2yxmRVLyH1xUyFx1Uq6svlidyjOrhni6h5tWy2V2xik6MgnFMoTNZYVvkWwSZAdH6izkYMSQPFEcm2+RQ7noguZ4EQ2H32v0NaVruP4ChzAIQooN3xMzI2klzSOZgQb89CRAtZUXKxp3QLefotrJwhQTX8/jhk8=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"09aadba2bde84fdeaba95c55750eac66"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"4a14e1d409104aff9209b647f52eee90"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyo9Wm2LdyXqllLXlKq8vwIbFumbKWyLE+cu9qEOA+ZlXVKdhBtFyujkT/1H/V0UJ1rNPywNb+vS2R/qqOMlJRtLWJNquC42gKqbMJ4n4zL+Bren0OTuaPlektBxRHFhln3W8ZKvoaHZ2a+K/dfJiG1avZfLMrQzBN/moSK1KDhD6hgvU7FCHuM6ajCr87tGfcDq2pge/XwnP9f11L3mgrNrb/5Xycnn0jj98g7eOFoYErX3ZwmudjVUY7ruMEyxoBEASx1hempc61aS3yGBj0L2PkeAmKtkyTnmy1eckktG3GFKS3f/QfbGZ8IC51epdkOGdM7F/bZh8Q3PEX7SpXwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAEd6dM8wqXzsSaIfHwGqrYr0yMJw1ecf5l2hbJMmpDJBnmGE5IVyBYrhbCzRb1VoqAEnunrreH4o1gtJMgfx5+iBddvZjmIRA7g5JvhGRgBGZwI2dfnAZ2GcAAIIe5j80MEpjhdclxqxS9bJbMlmfOPDtWpg/9YXNjbLGVNwPz+4KP2H5q4aJ/aTpGTn/wl6j8Ch1xlUzkGvX3c9dqaZ6fbDgoDlbslSpJqiGWmbN6GwFGQxeeg7bW3TbZT/99E/1/E1CUYpkRkQ8z99AXqKKnm17oeSL6Y7npFJV4s6GiAn5UvmDCz3XiAht55kGikLi9YPtcwjQUHTUGcULJN6Xew=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAreaRHSNid38C+6JGDwKAv7pyJvMYCpglU2+XJRtMgKreYqxP2zuWlbRR9TegT7jBMVGjel9yHGgjEu3hgaNzWrOnoeAg2UyNsbEX1u8f1lqSR4xNoLkNgY5+Tjzl713qrRcJQ/qL/cYbH0+u81YNhc5kkiVIIQbnNDQkDhKzRhVAb6KI1F2HrNgKkegvfi8M4DC31eziNvjxyjzJnWqu4X9YrhdYNE0omDoWnLZU5ZQpaHBMA3p85SDw7I2l0iIf1GwVHzq4vyVPqvOfWRVYFchOFukEGLUhfgIf0mvHgqLbWw6b+/+9htBaFYO7rPreBUPj841fhfOPb80G9QLd6QIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAGwV84Qs1X/GHGcdmg3gJLwekj0elGXYbGTa8PF7bli6WZHE0RGSI9PbfkLB8ksA05BBhoXuHlbx9n0+NKH2RynbEkAj7NeDZbIkOeS5KindZnc1NYfLOGNXxqRATQoyTSMqbrZeYRo2OuBQ0GJEx74saVFDF9MBmvRKFflEpAzbgrcsB4CxMkyj2yxmRVLyH1xUyFx1Uq6svlidyjOrhni6h5tWy2V2xik6MgnFMoTNZYVvkWwSZAdH6izkYMSQPFEcm2+RQ7noguZ4EQ2H32v0NaVruP4ChzAIQooN3xMzI2klzSOZgQb89CRAtZUXKxp3QLefotrJwhQTX8/jhk8=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"09aadba2bde84fdeaba95c55750eac66"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:32 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"4a14e1d409104aff9209b647f52eee90"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyo9Wm2LdyXqllLXlKq8vwIbFumbKWyLE+cu9qEOA+ZlXVKdhBtFyujkT/1H/V0UJ1rNPywNb+vS2R/qqOMlJRtLWJNquC42gKqbMJ4n4zL+Bren0OTuaPlektBxRHFhln3W8ZKvoaHZ2a+K/dfJiG1avZfLMrQzBN/moSK1KDhD6hgvU7FCHuM6ajCr87tGfcDq2pge/XwnP9f11L3mgrNrb/5Xycnn0jj98g7eOFoYErX3ZwmudjVUY7ruMEyxoBEASx1hempc61aS3yGBj0L2PkeAmKtkyTnmy1eckktG3GFKS3f/QfbGZ8IC51epdkOGdM7F/bZh8Q3PEX7SpXwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAEd6dM8wqXzsSaIfHwGqrYr0yMJw1ecf5l2hbJMmpDJBnmGE5IVyBYrhbCzRb1VoqAEnunrreH4o1gtJMgfx5+iBddvZjmIRA7g5JvhGRgBGZwI2dfnAZ2GcAAIIe5j80MEpjhdclxqxS9bJbMlmfOPDtWpg/9YXNjbLGVNwPz+4KP2H5q4aJ/aTpGTn/wl6j8Ch1xlUzkGvX3c9dqaZ6fbDgoDlbslSpJqiGWmbN6GwFGQxeeg7bW3TbZT/99E/1/E1CUYpkRkQ8z99AXqKKnm17oeSL6Y7npFJV4s6GiAn5UvmDCz3XiAht55kGikLi9YPtcwjQUHTUGcULJN6Xew=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAreaRHSNid38C+6JGDwKAv7pyJvMYCpglU2+XJRtMgKreYqxP2zuWlbRR9TegT7jBMVGjel9yHGgjEu3hgaNzWrOnoeAg2UyNsbEX1u8f1lqSR4xNoLkNgY5+Tjzl713qrRcJQ/qL/cYbH0+u81YNhc5kkiVIIQbnNDQkDhKzRhVAb6KI1F2HrNgKkegvfi8M4DC31eziNvjxyjzJnWqu4X9YrhdYNE0omDoWnLZU5ZQpaHBMA3p85SDw7I2l0iIf1GwVHzq4vyVPqvOfWRVYFchOFukEGLUhfgIf0mvHgqLbWw6b+/+9htBaFYO7rPreBUPj841fhfOPb80G9QLd6QIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAGwV84Qs1X/GHGcdmg3gJLwekj0elGXYbGTa8PF7bli6WZHE0RGSI9PbfkLB8ksA05BBhoXuHlbx9n0+NKH2RynbEkAj7NeDZbIkOeS5KindZnc1NYfLOGNXxqRATQoyTSMqbrZeYRo2OuBQ0GJEx74saVFDF9MBmvRKFflEpAzbgrcsB4CxMkyj2yxmRVLyH1xUyFx1Uq6svlidyjOrhni6h5tWy2V2xik6MgnFMoTNZYVvkWwSZAdH6izkYMSQPFEcm2+RQ7noguZ4EQ2H32v0NaVruP4ChzAIQooN3xMzI2klzSOZgQb89CRAtZUXKxp3QLefotrJwhQTX8/jhk8=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"09aadba2bde84fdeaba95c55750eac66"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1346']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"4a14e1d409104aff9209b647f52eee90"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyo9Wm2LdyXqllLXlKq8vwIbFumbKWyLE+cu9qEOA+ZlXVKdhBtFyujkT/1H/V0UJ1rNPywNb+vS2R/qqOMlJRtLWJNquC42gKqbMJ4n4zL+Bren0OTuaPlektBxRHFhln3W8ZKvoaHZ2a+K/dfJiG1avZfLMrQzBN/moSK1KDhD6hgvU7FCHuM6ajCr87tGfcDq2pge/XwnP9f11L3mgrNrb/5Xycnn0jj98g7eOFoYErX3ZwmudjVUY7ruMEyxoBEASx1hempc61aS3yGBj0L2PkeAmKtkyTnmy1eckktG3GFKS3f/QfbGZ8IC51epdkOGdM7F/bZh8Q3PEX7SpXwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAEd6dM8wqXzsSaIfHwGqrYr0yMJw1ecf5l2hbJMmpDJBnmGE5IVyBYrhbCzRb1VoqAEnunrreH4o1gtJMgfx5+iBddvZjmIRA7g5JvhGRgBGZwI2dfnAZ2GcAAIIe5j80MEpjhdclxqxS9bJbMlmfOPDtWpg/9YXNjbLGVNwPz+4KP2H5q4aJ/aTpGTn/wl6j8Ch1xlUzkGvX3c9dqaZ6fbDgoDlbslSpJqiGWmbN6GwFGQxeeg7bW3TbZT/99E/1/E1CUYpkRkQ8z99AXqKKnm17oeSL6Y7npFJV4s6GiAn5UvmDCz3XiAht55kGikLi9YPtcwjQUHTUGcULJN6Xew=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate3","request_id":"09aadba2bde84fdeaba95c55750eac66"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1267']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:53 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAreaRHSNid38C+6JGDwKAv7pyJvMYCpglU2+XJRtMgKreYqxP2zuWlbRR9TegT7jBMVGjel9yHGgjEu3hgaNzWrOnoeAg2UyNsbEX1u8f1lqSR4xNoLkNgY5+Tjzl713qrRcJQ/qL/cYbH0+u81YNhc5kkiVIIQbnNDQkDhKzRhVAb6KI1F2HrNgKkegvfi8M4DC31eziNvjxyjzJnWqu4X9YrhdYNE0omDoWnLZU5ZQpaHBMA3p85SDw7I2l0iIf1GwVHzq4vyVPqvOfWRVYFchOFukEGLUhfgIf0mvHgqLbWw6b+/+9htBaFYO7rPreBUPj841fhfOPb80G9QLd6QIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAGwV84Qs1X/GHGcdmg3gJLwekj0elGXYbGTa8PF7bli6WZHE0RGSI9PbfkLB8ksA05BBhoXuHlbx9n0+NKH2RynbEkAj7NeDZbIkOeS5KindZnc1NYfLOGNXxqRATQoyTSMqbrZeYRo2OuBQ0GJEx74saVFDF9MBmvRKFflEpAzbgrcsB4CxMkyj2yxmRVLyH1xUyFx1Uq6svlidyjOrhni6h5tWy2V2xik6MgnFMoTNZYVvkWwSZAdH6izkYMSQPFEcm2+RQ7noguZ4EQ2H32v0NaVruP4ChzAIQooN3xMzI2klzSOZgQb89CRAtZUXKxp3QLefotrJwhQTX8/jhk8=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate3","request_id":"4a14e1d409104aff9209b647f52eee90"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1267'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate3/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/b460a7caaa424541a58d5b3fe24f9c2e","kid":"https://vaultname.vault.azure.net/keys/certificate3/b460a7caaa424541a58d5b3fe24f9c2e","sid":"https://vaultname.vault.azure.net/secrets/certificate3/b460a7caaa424541a58d5b3fe24f9c2e","x5t":"OsuehzYF8V0hgHsT2iaC1Y9uckQ","cer":"MIIDWjCCAkKgAwIBAgIQGZ0r7Iw4TkKSipWiEvdyCTANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1MTQ5WhcNMjExMjA3MDAwMTQ5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKj1abYt3JeqWUteUqry/AhsW6ZspbIsT5y72oQ4D5mVdUp2EG0XK6ORP/Uf9XRQnWs0/LA1v69LZH+qo4yUlG0tYk2q4LjaAqpswnifjMv4Gt6fQ5O5o+V6S0HFEcWGWfdbxkq+hodnZr4r918mIbVq9l8sytDME3+ahIrUoOEPqGC9TsUIe4zpqMKvzu0Z9wOramB79fCc/1/XUveaCs2tv/lfJyefSOP3yDt44WhgStfdnCa52NVRjuu4wTLGgEQBLHWF6alzrVpLfIYGPQvY+R4CYq2TJOebLV5ySS0bcYUpLd/9B9sZnwgLnV6l2Q4Z0zsX9tmHxDc8RftKlfAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFBUT5fYLj39DbprrdP8uMvG7TfbQMB0GA1UdDgQWBBQVE+X2C49/Q26a63T/LjLxu0320DANBgkqhkiG9w0BAQsFAAOCAQEAr3VZuUekeIYFKnc8q4F5j03nGn97BSJ1rPARipIDwnkh7CnB4mxmrwMyBA1PL34gtkdxQfjRlDwfiWRgBmMyh+VA4itRW9cKs8qGsds8LD5J7oPclt5+ua9Sa901P/9ZdCMOLLNULceK3zznW7lb0tFZmt2nWxgJmtiCMlfwIYA952f2Ke2VeaeafLWmIZAuCoDDWHGlx+7rkdRLklsh9bELYZzboyiuZncGU8I+aDqFNIhPr1fU3l85Z+vhNhDKMQ+d24hCuhfRWrNsvJ8s4xCnobYz4YwRRvab82NiMPpK5ZOuDnHrmMRbK3/Yz3nhhk4Fj410U/Ro+OQ7OBAOsQ==","attributes":{"enabled":true,"nbf":1575676309,"exp":1638835309,"created":1575676910,"updated":1575676910,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate3/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676882,"updated":1575676882}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2449']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/f76e2bb1ee4247b4be1f2356ca948899","kid":"https://vaultname.vault.azure.net/keys/certificate3/f76e2bb1ee4247b4be1f2356ca948899","sid":"https://vaultname.vault.azure.net/secrets/certificate3/f76e2bb1ee4247b4be1f2356ca948899","x5t":"K9LsPFrb0-STD314cCJkqa3etQ0","cer":"MIIDWjCCAkKgAwIBAgIQFJGuGDM8TfeVKEOxJ4L60jANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTU2WhcNMjIwMzA2MDAwOTU2WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCt5pEdI2J3fwL7okYPAoC/unIm8xgKmCVTb5clG0yAqt5irE/bO5aVtFH1N6BPuMExUaN6X3IcaCMS7eGBo3Nas6eh4CDZTI2xsRfW7x/WWpJHjE2guQ2Bjn5OPOXvXeqtFwlD+ov9xhsfT67zVg2FzmSSJUghBuc0NCQOErNGFUBvoojUXYes2AqR6C9+LwzgMLfV7OI2+PHKPMmdaq7hf1iuF1g0TSiYOhactlTllClocEwDenzlIPDsjaXSIh/UbBUfOri/JU+q859ZFVgVyE4W6QQYtSF+Ah/Sa8eCottbDpv7/72G0FoVg7us+t4FQ+PzjV+F849vzQb1At3pAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFA63zhu/tQ/5MTvB8MxJoNV/Qr4OMB0GA1UdDgQWBBQOt84bv7UP+TE7wfDMSaDVf0K+DjANBgkqhkiG9w0BAQsFAAOCAQEAZ8ba+K7afT3JBvFQ1F98eYPlCuhE9Y3FaKNNqp8thWqJbK353UZ/8seNN8B1II6LyKjUXQN7QhOoOFkkwHZhd1pGdPebLZTnfEQT34LAs/fyoUZrYFBoJL1JAqOMLTVUEdgrNjEmZH2aBok0fXv/atuCGLqgK2v6uhg5mAdxkMue6fwCk1YAG2WOK4LLsvbNQR5OdPOWmnPLuu7AJEochr1eocmBD3bhWr8cAqOo67+d/DD3HrKxTiVIvitU0ldZkoentEwsHP0elRid/BQPlwI3e91gQ542E8EpK0ixrKXZv5VtwdNr2wUT+r1XP/rYil4HT3mvxCJl4w6ABdLoTg==","attributes":{"enabled":true,"nbf":1583452796,"exp":1646525396,"created":1583453396,"updated":1583453396,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate3/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453375,"updated":1583453375}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2449'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/certificate0","x5t":"7Oz-_X_eLUXy52OiCBfRGIDev9M","attributes":{"enabled":true,"nbf":1575676225,"exp":1638835225,"created":1575676825,"updated":1575676825},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certificate1","x5t":"imAnJokSekBs5IGSiNseILn_ACw","attributes":{"enabled":true,"nbf":1575676248,"exp":1638835248,"created":1575676848,"updated":1575676848},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certificate2","x5t":"lVSDr-Z9X6RBBhDH4XGoR_JKBus","attributes":{"enabled":true,"nbf":1575676270,"exp":1638835270,"created":1575676870,"updated":1575676870},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certificate3","x5t":"OsuehzYF8V0hgHsT2iaC1Y9uckQ","attributes":{"enabled":true,"nbf":1575676309,"exp":1638835309,"created":1575676910,"updated":1575676910},"subject":""}],"nextLink":null}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['983']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/certificate0","x5t":"gy17olot0BV7OJXhOHa8Xr2yRIo","attributes":{"enabled":true,"nbf":1583452719,"exp":1646525319,"created":1583453319,"updated":1583453319},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certificate1","x5t":"dZ2aA1SjRZ_jpz5SlV5Gk-W7c-c","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453344},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certificate2","x5t":"WagTdeRzWdfoVX8Vxaoe6wQqlDM","attributes":{"enabled":true,"nbf":1583452770,"exp":1646525370,"created":1583453370,"updated":1583453370},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certificate3","x5t":"K9LsPFrb0-STD314cCJkqa3etQ0","attributes":{"enabled":true,"nbf":1583452796,"exp":1646525396,"created":1583453396,"updated":1583453396},"subject":""}],"nextLink":null}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '983'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate-name/versions?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate-name/versions?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[],"nextLink":null}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['28']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"value":[],"nextLink":null}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '28'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[],"nextLink":null}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['28']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"value":[],"nextLink":null}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '28'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:10:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_recover.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_recover.yaml
    index 0d104d8a7b5d..2f99daa926ae 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_recover.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_certificate_recover.yaml
    @@ -2,515 +2,1147 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAql6mR7D5OLo+JwvxQLVDMYcECQm4vIF14GxQy0WSfMKEVO1Nluo6HcnXvvx1WaRXPGF1O8LgprTW5HJgEha1jgkBuWfvzwyZHbfaJsSsY8bpG+8xodbm3PbPb1+PIevihA6GcpBM4hBluIWCv7qMQG4cXh6kvQ0i33Y0YzHPUpBDgnX5nbZBkBLefPe8L48uJZP5Awm5DxZDfHogQX11HUunMoUCIrpq87sP1IBfix0IP3M/Qibx0wwk5X4w/N10X/EaxrtcbtNjKEAW7HOwmQ9VSCwyq9UK1h9Y/4btkspw2BbyYpACzLBj8fvz8P3bQ7U3svDwXqO7pIxPGyVGNQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAAFh+gPVIMNK+HHKDvNEJJUQFHac+dcfqPOf0gNzOIcU+UdcpfYDlawDomnE8dcw+zpu4TWKGcwsfnVSSm/7t6FD2Bm4+c5iSyjglHFwYbo17yibjNNsFb2+/KV5K2yzmlRr6B/PfAHoAjWupSP4BVH4Rn3z6LXuXWBTUodGwFK8yy5N5NwbFb4vN5T/oToh+vyr79Yw9uD5QIIC8YjuzQoHmVvQrfouluXaRznwUWKGIAAzbkAFXXW46ra2ZZlP4JQM11cHElEk9SpKGwxXOywrl2UkZITnbEqZ0aDpN+514KZuYFdyy1ABaO9jSkgYgtpAPQNPeiBJFN9CZdHPjBE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2GrF1e6AOO2fO8QE0HZatZ0Uvv1ae7s9y7P9BdwWq8btvIheeOUDMSqto748J/K7UOsNDZvrB7zmwGfbnS+aY0huEBwrGkrqTKLK3i+C+DkWEDxj81FvvNJSPl3UZtDgwN11PkhfoJR/M0Jf0HB73OL13Sr6iRRYHxKeLOWdehoBDHSMBV69A8Nw0ne9xzglYzcHKaJI6vAaH39vUWHyIoeKNrovtnTLOT1gCMzOA0MxZoiMit7knv9Lvk3t83nx8vM6pR3NbdYoAcd1bJa58367Cr1xz6UDGdRrd3l9sqVUJEW2NtTkMJglg6Euasg9oDndci+hL4IDKV1Kx4R+rQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHX6jBftMUn8mFo25ZAOtBo8rr83PMdZN27LhI721swhLszKdN5Q0YzEZlPRsssyy9jfH9iJmoOR/Q1QXSfvHYEz/2SoQG1bOywBIygVNdsSorWrkyrlbz1q37jjpQxpRndAMcXiVrziN0FmG5vWP2M5OUM2ayd9/BIdbBayKaz3qQha7oVO94PdtTzxRY+w7Bljnw9qOJNrEUO1JUOPASI9QwVJ97TDJIAhRxIBhZB6tjEYYTxmYFMs+77iCnwDSEBqF7vdiWUgtdUWbPbTnS4sDZ1Sy6JzYHxilRkFlQBRFNrQQ6GELnhPF8uw28psxX0lqCWh+WXE3gfaU2y6Unc=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"e694f0569cea4c878b06b31f32dcf18d"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1343']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:06 GMT']
    -      expires: ['-1']
    -      location: ['https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0&request_id=e694f0569cea4c878b06b31f32dcf18d']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 202, message: Accepted}
    +        time based on the issuer provider. Please check again later.","request_id":"24a4997bc8314f9e864f7dba1082c31e"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:31 GMT
    +      expires:
    +      - '-1'
    +      location:
    +      - https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview&request_id=24a4997bc8314f9e864f7dba1082c31e
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAql6mR7D5OLo+JwvxQLVDMYcECQm4vIF14GxQy0WSfMKEVO1Nluo6HcnXvvx1WaRXPGF1O8LgprTW5HJgEha1jgkBuWfvzwyZHbfaJsSsY8bpG+8xodbm3PbPb1+PIevihA6GcpBM4hBluIWCv7qMQG4cXh6kvQ0i33Y0YzHPUpBDgnX5nbZBkBLefPe8L48uJZP5Awm5DxZDfHogQX11HUunMoUCIrpq87sP1IBfix0IP3M/Qibx0wwk5X4w/N10X/EaxrtcbtNjKEAW7HOwmQ9VSCwyq9UK1h9Y/4btkspw2BbyYpACzLBj8fvz8P3bQ7U3svDwXqO7pIxPGyVGNQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAAFh+gPVIMNK+HHKDvNEJJUQFHac+dcfqPOf0gNzOIcU+UdcpfYDlawDomnE8dcw+zpu4TWKGcwsfnVSSm/7t6FD2Bm4+c5iSyjglHFwYbo17yibjNNsFb2+/KV5K2yzmlRr6B/PfAHoAjWupSP4BVH4Rn3z6LXuXWBTUodGwFK8yy5N5NwbFb4vN5T/oToh+vyr79Yw9uD5QIIC8YjuzQoHmVvQrfouluXaRznwUWKGIAAzbkAFXXW46ra2ZZlP4JQM11cHElEk9SpKGwxXOywrl2UkZITnbEqZ0aDpN+514KZuYFdyy1ABaO9jSkgYgtpAPQNPeiBJFN9CZdHPjBE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2GrF1e6AOO2fO8QE0HZatZ0Uvv1ae7s9y7P9BdwWq8btvIheeOUDMSqto748J/K7UOsNDZvrB7zmwGfbnS+aY0huEBwrGkrqTKLK3i+C+DkWEDxj81FvvNJSPl3UZtDgwN11PkhfoJR/M0Jf0HB73OL13Sr6iRRYHxKeLOWdehoBDHSMBV69A8Nw0ne9xzglYzcHKaJI6vAaH39vUWHyIoeKNrovtnTLOT1gCMzOA0MxZoiMit7knv9Lvk3t83nx8vM6pR3NbdYoAcd1bJa58367Cr1xz6UDGdRrd3l9sqVUJEW2NtTkMJglg6Euasg9oDndci+hL4IDKV1Kx4R+rQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHX6jBftMUn8mFo25ZAOtBo8rr83PMdZN27LhI721swhLszKdN5Q0YzEZlPRsssyy9jfH9iJmoOR/Q1QXSfvHYEz/2SoQG1bOywBIygVNdsSorWrkyrlbz1q37jjpQxpRndAMcXiVrziN0FmG5vWP2M5OUM2ayd9/BIdbBayKaz3qQha7oVO94PdtTzxRY+w7Bljnw9qOJNrEUO1JUOPASI9QwVJ97TDJIAhRxIBhZB6tjEYYTxmYFMs+77iCnwDSEBqF7vdiWUgtdUWbPbTnS4sDZ1Sy6JzYHxilRkFlQBRFNrQQ6GELnhPF8uw28psxX0lqCWh+WXE3gfaU2y6Unc=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"e694f0569cea4c878b06b31f32dcf18d"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1343']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:06 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"24a4997bc8314f9e864f7dba1082c31e"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAql6mR7D5OLo+JwvxQLVDMYcECQm4vIF14GxQy0WSfMKEVO1Nluo6HcnXvvx1WaRXPGF1O8LgprTW5HJgEha1jgkBuWfvzwyZHbfaJsSsY8bpG+8xodbm3PbPb1+PIevihA6GcpBM4hBluIWCv7qMQG4cXh6kvQ0i33Y0YzHPUpBDgnX5nbZBkBLefPe8L48uJZP5Awm5DxZDfHogQX11HUunMoUCIrpq87sP1IBfix0IP3M/Qibx0wwk5X4w/N10X/EaxrtcbtNjKEAW7HOwmQ9VSCwyq9UK1h9Y/4btkspw2BbyYpACzLBj8fvz8P3bQ7U3svDwXqO7pIxPGyVGNQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAAFh+gPVIMNK+HHKDvNEJJUQFHac+dcfqPOf0gNzOIcU+UdcpfYDlawDomnE8dcw+zpu4TWKGcwsfnVSSm/7t6FD2Bm4+c5iSyjglHFwYbo17yibjNNsFb2+/KV5K2yzmlRr6B/PfAHoAjWupSP4BVH4Rn3z6LXuXWBTUodGwFK8yy5N5NwbFb4vN5T/oToh+vyr79Yw9uD5QIIC8YjuzQoHmVvQrfouluXaRznwUWKGIAAzbkAFXXW46ra2ZZlP4JQM11cHElEk9SpKGwxXOywrl2UkZITnbEqZ0aDpN+514KZuYFdyy1ABaO9jSkgYgtpAPQNPeiBJFN9CZdHPjBE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2GrF1e6AOO2fO8QE0HZatZ0Uvv1ae7s9y7P9BdwWq8btvIheeOUDMSqto748J/K7UOsNDZvrB7zmwGfbnS+aY0huEBwrGkrqTKLK3i+C+DkWEDxj81FvvNJSPl3UZtDgwN11PkhfoJR/M0Jf0HB73OL13Sr6iRRYHxKeLOWdehoBDHSMBV69A8Nw0ne9xzglYzcHKaJI6vAaH39vUWHyIoeKNrovtnTLOT1gCMzOA0MxZoiMit7knv9Lvk3t83nx8vM6pR3NbdYoAcd1bJa58367Cr1xz6UDGdRrd3l9sqVUJEW2NtTkMJglg6Euasg9oDndci+hL4IDKV1Kx4R+rQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHX6jBftMUn8mFo25ZAOtBo8rr83PMdZN27LhI721swhLszKdN5Q0YzEZlPRsssyy9jfH9iJmoOR/Q1QXSfvHYEz/2SoQG1bOywBIygVNdsSorWrkyrlbz1q37jjpQxpRndAMcXiVrziN0FmG5vWP2M5OUM2ayd9/BIdbBayKaz3qQha7oVO94PdtTzxRY+w7Bljnw9qOJNrEUO1JUOPASI9QwVJ97TDJIAhRxIBhZB6tjEYYTxmYFMs+77iCnwDSEBqF7vdiWUgtdUWbPbTnS4sDZ1Sy6JzYHxilRkFlQBRFNrQQ6GELnhPF8uw28psxX0lqCWh+WXE3gfaU2y6Unc=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"e694f0569cea4c878b06b31f32dcf18d"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1343']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"24a4997bc8314f9e864f7dba1082c31e"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAql6mR7D5OLo+JwvxQLVDMYcECQm4vIF14GxQy0WSfMKEVO1Nluo6HcnXvvx1WaRXPGF1O8LgprTW5HJgEha1jgkBuWfvzwyZHbfaJsSsY8bpG+8xodbm3PbPb1+PIevihA6GcpBM4hBluIWCv7qMQG4cXh6kvQ0i33Y0YzHPUpBDgnX5nbZBkBLefPe8L48uJZP5Awm5DxZDfHogQX11HUunMoUCIrpq87sP1IBfix0IP3M/Qibx0wwk5X4w/N10X/EaxrtcbtNjKEAW7HOwmQ9VSCwyq9UK1h9Y/4btkspw2BbyYpACzLBj8fvz8P3bQ7U3svDwXqO7pIxPGyVGNQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAAFh+gPVIMNK+HHKDvNEJJUQFHac+dcfqPOf0gNzOIcU+UdcpfYDlawDomnE8dcw+zpu4TWKGcwsfnVSSm/7t6FD2Bm4+c5iSyjglHFwYbo17yibjNNsFb2+/KV5K2yzmlRr6B/PfAHoAjWupSP4BVH4Rn3z6LXuXWBTUodGwFK8yy5N5NwbFb4vN5T/oToh+vyr79Yw9uD5QIIC8YjuzQoHmVvQrfouluXaRznwUWKGIAAzbkAFXXW46ra2ZZlP4JQM11cHElEk9SpKGwxXOywrl2UkZITnbEqZ0aDpN+514KZuYFdyy1ABaO9jSkgYgtpAPQNPeiBJFN9CZdHPjBE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2GrF1e6AOO2fO8QE0HZatZ0Uvv1ae7s9y7P9BdwWq8btvIheeOUDMSqto748J/K7UOsNDZvrB7zmwGfbnS+aY0huEBwrGkrqTKLK3i+C+DkWEDxj81FvvNJSPl3UZtDgwN11PkhfoJR/M0Jf0HB73OL13Sr6iRRYHxKeLOWdehoBDHSMBV69A8Nw0ne9xzglYzcHKaJI6vAaH39vUWHyIoeKNrovtnTLOT1gCMzOA0MxZoiMit7knv9Lvk3t83nx8vM6pR3NbdYoAcd1bJa58367Cr1xz6UDGdRrd3l9sqVUJEW2NtTkMJglg6Euasg9oDndci+hL4IDKV1Kx4R+rQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHX6jBftMUn8mFo25ZAOtBo8rr83PMdZN27LhI721swhLszKdN5Q0YzEZlPRsssyy9jfH9iJmoOR/Q1QXSfvHYEz/2SoQG1bOywBIygVNdsSorWrkyrlbz1q37jjpQxpRndAMcXiVrziN0FmG5vWP2M5OUM2ayd9/BIdbBayKaz3qQha7oVO94PdtTzxRY+w7Bljnw9qOJNrEUO1JUOPASI9QwVJ97TDJIAhRxIBhZB6tjEYYTxmYFMs+77iCnwDSEBqF7vdiWUgtdUWbPbTnS4sDZ1Sy6JzYHxilRkFlQBRFNrQQ6GELnhPF8uw28psxX0lqCWh+WXE3gfaU2y6Unc=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"e694f0569cea4c878b06b31f32dcf18d"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1343']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +        time based on the issuer provider. Please check again later.","request_id":"24a4997bc8314f9e864f7dba1082c31e"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAql6mR7D5OLo+JwvxQLVDMYcECQm4vIF14GxQy0WSfMKEVO1Nluo6HcnXvvx1WaRXPGF1O8LgprTW5HJgEha1jgkBuWfvzwyZHbfaJsSsY8bpG+8xodbm3PbPb1+PIevihA6GcpBM4hBluIWCv7qMQG4cXh6kvQ0i33Y0YzHPUpBDgnX5nbZBkBLefPe8L48uJZP5Awm5DxZDfHogQX11HUunMoUCIrpq87sP1IBfix0IP3M/Qibx0wwk5X4w/N10X/EaxrtcbtNjKEAW7HOwmQ9VSCwyq9UK1h9Y/4btkspw2BbyYpACzLBj8fvz8P3bQ7U3svDwXqO7pIxPGyVGNQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAAFh+gPVIMNK+HHKDvNEJJUQFHac+dcfqPOf0gNzOIcU+UdcpfYDlawDomnE8dcw+zpu4TWKGcwsfnVSSm/7t6FD2Bm4+c5iSyjglHFwYbo17yibjNNsFb2+/KV5K2yzmlRr6B/PfAHoAjWupSP4BVH4Rn3z6LXuXWBTUodGwFK8yy5N5NwbFb4vN5T/oToh+vyr79Yw9uD5QIIC8YjuzQoHmVvQrfouluXaRznwUWKGIAAzbkAFXXW46ra2ZZlP4JQM11cHElEk9SpKGwxXOywrl2UkZITnbEqZ0aDpN+514KZuYFdyy1ABaO9jSkgYgtpAPQNPeiBJFN9CZdHPjBE=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert-name","request_id":"e694f0569cea4c878b06b31f32dcf18d"}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['1261']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2GrF1e6AOO2fO8QE0HZatZ0Uvv1ae7s9y7P9BdwWq8btvIheeOUDMSqto748J/K7UOsNDZvrB7zmwGfbnS+aY0huEBwrGkrqTKLK3i+C+DkWEDxj81FvvNJSPl3UZtDgwN11PkhfoJR/M0Jf0HB73OL13Sr6iRRYHxKeLOWdehoBDHSMBV69A8Nw0ne9xzglYzcHKaJI6vAaH39vUWHyIoeKNrovtnTLOT1gCMzOA0MxZoiMit7knv9Lvk3t83nx8vM6pR3NbdYoAcd1bJa58367Cr1xz6UDGdRrd3l9sqVUJEW2NtTkMJglg6Euasg9oDndci+hL4IDKV1Kx4R+rQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHX6jBftMUn8mFo25ZAOtBo8rr83PMdZN27LhI721swhLszKdN5Q0YzEZlPRsssyy9jfH9iJmoOR/Q1QXSfvHYEz/2SoQG1bOywBIygVNdsSorWrkyrlbz1q37jjpQxpRndAMcXiVrziN0FmG5vWP2M5OUM2ayd9/BIdbBayKaz3qQha7oVO94PdtTzxRY+w7Bljnw9qOJNrEUO1JUOPASI9QwVJ97TDJIAhRxIBhZB6tjEYYTxmYFMs+77iCnwDSEBqF7vdiWUgtdUWbPbTnS4sDZ1Sy6JzYHxilRkFlQBRFNrQQ6GELnhPF8uw28psxX0lqCWh+WXE3gfaU2y6Unc=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Certificate request is in progress. This may take some
    +        time based on the issuer provider. Please check again later.","request_id":"24a4997bc8314f9e864f7dba1082c31e"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1343'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/61eb00920df84600b51ac1f6008200f8","kid":"https://vaultname.vault.azure.net/keys/cert-name/61eb00920df84600b51ac1f6008200f8","sid":"https://vaultname.vault.azure.net/secrets/cert-name/61eb00920df84600b51ac1f6008200f8","x5t":"yMD2RCau9Vu0bStG7V9gh4SntRE","cer":"MIIDWjCCAkKgAwIBAgIQUYRshTT7RiaThs71y5lViDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1ODI5WhcNMjExMjA3MDAwODI5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqXqZHsPk4uj4nC/FAtUMxhwQJCbi8gXXgbFDLRZJ8woRU7U2W6jodyde+/HVZpFc8YXU7wuCmtNbkcmASFrWOCQG5Z+/PDJkdt9omxKxjxukb7zGh1ubc9s9vX48h6+KEDoZykEziEGW4hYK/uoxAbhxeHqS9DSLfdjRjMc9SkEOCdfmdtkGQEt5897wvjy4lk/kDCbkPFkN8eiBBfXUdS6cyhQIiumrzuw/UgF+LHQg/cz9CJvHTDCTlfjD83XRf8RrGu1xu02MoQBbsc7CZD1VILDKr1QrWH1j/hu2SynDYFvJikALMsGPx+/Pw/dtDtTey8PBeo7ukjE8bJUY1AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFHnFr/Sbz3WFXpJjJgABZZDvrbtpMB0GA1UdDgQWBBR5xa/0m891hV6SYyYAAWWQ7627aTANBgkqhkiG9w0BAQsFAAOCAQEAQgytqZjB+Hadrs8rT1DLYXWgV91fNZNPb4NG3mfZOUaL2Mk+IOexiAAfIzctlVEJ+LSWBvrEauXi1+AHY7Tia1YV4PR1pTZn3pQc96jhPaVVsJ9VUrj+GnZAfZR1lH+IdTPq5R14xmZwFN6zjmtULTZs1AUYxt/5K09o9XYCnev0IieUUU5syTmdG1jT0GLQpBK4wBj/KA/Ub2unfdd659orHBAA+R6V4sfLiaur3U18TsRHLBXI54lr9tMKgjnYGtz4OOPtPOsMRUOImUFUk+oqG8hyOiXq2VNLuvkQcB+pCJVJqVkFMxp/je1QvfbietIB2z62ZJZFtAAkA4dx0Q==","attributes":{"enabled":true,"nbf":1575676709,"exp":1638835709,"created":1575677309,"updated":1575677309,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575677285,"updated":1575677285}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2434']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2GrF1e6AOO2fO8QE0HZatZ0Uvv1ae7s9y7P9BdwWq8btvIheeOUDMSqto748J/K7UOsNDZvrB7zmwGfbnS+aY0huEBwrGkrqTKLK3i+C+DkWEDxj81FvvNJSPl3UZtDgwN11PkhfoJR/M0Jf0HB73OL13Sr6iRRYHxKeLOWdehoBDHSMBV69A8Nw0ne9xzglYzcHKaJI6vAaH39vUWHyIoeKNrovtnTLOT1gCMzOA0MxZoiMit7knv9Lvk3t83nx8vM6pR3NbdYoAcd1bJa58367Cr1xz6UDGdRrd3l9sqVUJEW2NtTkMJglg6Euasg9oDndci+hL4IDKV1Kx4R+rQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHX6jBftMUn8mFo25ZAOtBo8rr83PMdZN27LhI721swhLszKdN5Q0YzEZlPRsssyy9jfH9iJmoOR/Q1QXSfvHYEz/2SoQG1bOywBIygVNdsSorWrkyrlbz1q37jjpQxpRndAMcXiVrziN0FmG5vWP2M5OUM2ayd9/BIdbBayKaz3qQha7oVO94PdtTzxRY+w7Bljnw9qOJNrEUO1JUOPASI9QwVJ97TDJIAhRxIBhZB6tjEYYTxmYFMs+77iCnwDSEBqF7vdiWUgtdUWbPbTnS4sDZ1Sy6JzYHxilRkFlQBRFNrQQ6GELnhPF8uw28psxX0lqCWh+WXE3gfaU2y6Unc=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert-name","request_id":"24a4997bc8314f9e864f7dba1082c31e"}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1261'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/220d527d333f442e9213b485dbf4700c","kid":"https://vaultname.vault.azure.net/keys/cert-name/220d527d333f442e9213b485dbf4700c","sid":"https://vaultname.vault.azure.net/secrets/cert-name/220d527d333f442e9213b485dbf4700c","x5t":"Insdiwsw7KQtyS0V2m--URB8zh0","cer":"MIIDWjCCAkKgAwIBAgIQR1OeJF2zRcSt6xWprl5B1DANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTAzWhcNMjIwMzA2MDAwOTAzWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYasXV7oA47Z87xATQdlq1nRS+/Vp7uz3Ls/0F3Barxu28iF545QMxKq2jvjwn8rtQ6w0Nm+sHvObAZ9udL5pjSG4QHCsaSupMosreL4L4ORYQPGPzUW+80lI+XdRm0ODA3XU+SF+glH8zQl/QcHvc4vXdKvqJFFgfEp4s5Z16GgEMdIwFXr0Dw3DSd73HOCVjNwcpokjq8Boff29RYfIih4o2ui+2dMs5PWAIzM4DQzFmiIyK3uSe/0u+Te3zefHy8zqlHc1t1igBx3VslrnzfrsKvXHPpQMZ1Gt3eX2ypVQkRbY21OQwmCWDoS5qyD2gOd1yL6EvggMpXUrHhH6tAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLNGbXv8WIMnoqIGTrdgGaYuTsiDMB0GA1UdDgQWBBSzRm17/FiDJ6KiBk63YBmmLk7IgzANBgkqhkiG9w0BAQsFAAOCAQEAh3cv9DiRPmhYZTkEZZeVdhRZQ+sLdzXIFyex12CsJOxn9QS/vBT4lHjQAq/gO/oXD+o5fjNBEtDNFYZtvq62qjyHMxSWnwk87dTpSzHaxj37B3fZkFDM9D0Y8yfBHMkMd8M8wGPQMLKgDH8xMvfGAqSb/p2n6/6PcJeCExtN4O/5pRN+Sjkmy10NLwqGWtwq9g1SaapiBPM7sbEL4yAVT9Sg1KYqbvJUXy8FMCowRZwUMCzfeiFysJYSMP3VBl2L0l42mnIwVR4BsT2C3HCMzwohTHeiY9O5Kx0U6FMI8+MP0yT4H1g1Oyr5HsATKvs2EcQ5ga+m4XNgry16NfP/Rw==","attributes":{"enabled":true,"nbf":1583452743,"exp":1646525343,"created":1583453344,"updated":1583453344,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453311,"updated":1583453311}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2434'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1575677321,"scheduledPurgeDate":1583453321,"id":"https://vaultname.vault.azure.net/certificates/cert-name/61eb00920df84600b51ac1f6008200f8","kid":"https://vaultname.vault.azure.net/keys/cert-name/61eb00920df84600b51ac1f6008200f8","sid":"https://vaultname.vault.azure.net/secrets/cert-name/61eb00920df84600b51ac1f6008200f8","x5t":"yMD2RCau9Vu0bStG7V9gh4SntRE","cer":"MIIDWjCCAkKgAwIBAgIQUYRshTT7RiaThs71y5lViDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1ODI5WhcNMjExMjA3MDAwODI5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqXqZHsPk4uj4nC/FAtUMxhwQJCbi8gXXgbFDLRZJ8woRU7U2W6jodyde+/HVZpFc8YXU7wuCmtNbkcmASFrWOCQG5Z+/PDJkdt9omxKxjxukb7zGh1ubc9s9vX48h6+KEDoZykEziEGW4hYK/uoxAbhxeHqS9DSLfdjRjMc9SkEOCdfmdtkGQEt5897wvjy4lk/kDCbkPFkN8eiBBfXUdS6cyhQIiumrzuw/UgF+LHQg/cz9CJvHTDCTlfjD83XRf8RrGu1xu02MoQBbsc7CZD1VILDKr1QrWH1j/hu2SynDYFvJikALMsGPx+/Pw/dtDtTey8PBeo7ukjE8bJUY1AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFHnFr/Sbz3WFXpJjJgABZZDvrbtpMB0GA1UdDgQWBBR5xa/0m891hV6SYyYAAWWQ7627aTANBgkqhkiG9w0BAQsFAAOCAQEAQgytqZjB+Hadrs8rT1DLYXWgV91fNZNPb4NG3mfZOUaL2Mk+IOexiAAfIzctlVEJ+LSWBvrEauXi1+AHY7Tia1YV4PR1pTZn3pQc96jhPaVVsJ9VUrj+GnZAfZR1lH+IdTPq5R14xmZwFN6zjmtULTZs1AUYxt/5K09o9XYCnev0IieUUU5syTmdG1jT0GLQpBK4wBj/KA/Ub2unfdd659orHBAA+R6V4sfLiaur3U18TsRHLBXI54lr9tMKgjnYGtz4OOPtPOsMRUOImUFUk+oqG8hyOiXq2VNLuvkQcB+pCJVJqVkFMxp/je1QvfbietIB2z62ZJZFtAAkA4dx0Q==","attributes":{"enabled":true,"nbf":1575676709,"exp":1638835709,"created":1575677309,"updated":1575677309,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575677285,"updated":1575677285}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2585']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1583453347,"scheduledPurgeDate":1591229347,"id":"https://vaultname.vault.azure.net/certificates/cert-name/220d527d333f442e9213b485dbf4700c","kid":"https://vaultname.vault.azure.net/keys/cert-name/220d527d333f442e9213b485dbf4700c","sid":"https://vaultname.vault.azure.net/secrets/cert-name/220d527d333f442e9213b485dbf4700c","x5t":"Insdiwsw7KQtyS0V2m--URB8zh0","cer":"MIIDWjCCAkKgAwIBAgIQR1OeJF2zRcSt6xWprl5B1DANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTAzWhcNMjIwMzA2MDAwOTAzWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYasXV7oA47Z87xATQdlq1nRS+/Vp7uz3Ls/0F3Barxu28iF545QMxKq2jvjwn8rtQ6w0Nm+sHvObAZ9udL5pjSG4QHCsaSupMosreL4L4ORYQPGPzUW+80lI+XdRm0ODA3XU+SF+glH8zQl/QcHvc4vXdKvqJFFgfEp4s5Z16GgEMdIwFXr0Dw3DSd73HOCVjNwcpokjq8Boff29RYfIih4o2ui+2dMs5PWAIzM4DQzFmiIyK3uSe/0u+Te3zefHy8zqlHc1t1igBx3VslrnzfrsKvXHPpQMZ1Gt3eX2ypVQkRbY21OQwmCWDoS5qyD2gOd1yL6EvggMpXUrHhH6tAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLNGbXv8WIMnoqIGTrdgGaYuTsiDMB0GA1UdDgQWBBSzRm17/FiDJ6KiBk63YBmmLk7IgzANBgkqhkiG9w0BAQsFAAOCAQEAh3cv9DiRPmhYZTkEZZeVdhRZQ+sLdzXIFyex12CsJOxn9QS/vBT4lHjQAq/gO/oXD+o5fjNBEtDNFYZtvq62qjyHMxSWnwk87dTpSzHaxj37B3fZkFDM9D0Y8yfBHMkMd8M8wGPQMLKgDH8xMvfGAqSb/p2n6/6PcJeCExtN4O/5pRN+Sjkmy10NLwqGWtwq9g1SaapiBPM7sbEL4yAVT9Sg1KYqbvJUXy8FMCowRZwUMCzfeiFysJYSMP3VBl2L0l42mnIwVR4BsT2C3HCMzwohTHeiY9O5Kx0U6FMI8+MP0yT4H1g1Oyr5HsATKvs2EcQ5ga+m4XNgry16NfP/Rw==","attributes":{"enabled":true,"nbf":1583452743,"exp":1646525343,"created":1583453344,"updated":1583453344,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453311,"updated":1583453311}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2585'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['93']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '93'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['93']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '93'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['93']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '93'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['93']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:48 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '93'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['93']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '93'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['93']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:52 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '93'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['93']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '93'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1575677321,"scheduledPurgeDate":1583453321,"id":"https://vaultname.vault.azure.net/certificates/cert-name/61eb00920df84600b51ac1f6008200f8","kid":"https://vaultname.vault.azure.net/keys/cert-name/61eb00920df84600b51ac1f6008200f8","sid":"https://vaultname.vault.azure.net/secrets/cert-name/61eb00920df84600b51ac1f6008200f8","x5t":"yMD2RCau9Vu0bStG7V9gh4SntRE","cer":"MIIDWjCCAkKgAwIBAgIQUYRshTT7RiaThs71y5lViDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1ODI5WhcNMjExMjA3MDAwODI5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqXqZHsPk4uj4nC/FAtUMxhwQJCbi8gXXgbFDLRZJ8woRU7U2W6jodyde+/HVZpFc8YXU7wuCmtNbkcmASFrWOCQG5Z+/PDJkdt9omxKxjxukb7zGh1ubc9s9vX48h6+KEDoZykEziEGW4hYK/uoxAbhxeHqS9DSLfdjRjMc9SkEOCdfmdtkGQEt5897wvjy4lk/kDCbkPFkN8eiBBfXUdS6cyhQIiumrzuw/UgF+LHQg/cz9CJvHTDCTlfjD83XRf8RrGu1xu02MoQBbsc7CZD1VILDKr1QrWH1j/hu2SynDYFvJikALMsGPx+/Pw/dtDtTey8PBeo7ukjE8bJUY1AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFHnFr/Sbz3WFXpJjJgABZZDvrbtpMB0GA1UdDgQWBBR5xa/0m891hV6SYyYAAWWQ7627aTANBgkqhkiG9w0BAQsFAAOCAQEAQgytqZjB+Hadrs8rT1DLYXWgV91fNZNPb4NG3mfZOUaL2Mk+IOexiAAfIzctlVEJ+LSWBvrEauXi1+AHY7Tia1YV4PR1pTZn3pQc96jhPaVVsJ9VUrj+GnZAfZR1lH+IdTPq5R14xmZwFN6zjmtULTZs1AUYxt/5K09o9XYCnev0IieUUU5syTmdG1jT0GLQpBK4wBj/KA/Ub2unfdd659orHBAA+R6V4sfLiaur3U18TsRHLBXI54lr9tMKgjnYGtz4OOPtPOsMRUOImUFUk+oqG8hyOiXq2VNLuvkQcB+pCJVJqVkFMxp/je1QvfbietIB2z62ZJZFtAAkA4dx0Q==","attributes":{"enabled":true,"nbf":1575676709,"exp":1638835709,"created":1575677309,"updated":1575677309,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575677285,"updated":1575677285}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2585']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '93'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1575677321,"scheduledPurgeDate":1583453321,"id":"https://vaultname.vault.azure.net/certificates/cert-name/61eb00920df84600b51ac1f6008200f8","kid":"https://vaultname.vault.azure.net/keys/cert-name/61eb00920df84600b51ac1f6008200f8","sid":"https://vaultname.vault.azure.net/secrets/cert-name/61eb00920df84600b51ac1f6008200f8","x5t":"yMD2RCau9Vu0bStG7V9gh4SntRE","cer":"MIIDWjCCAkKgAwIBAgIQUYRshTT7RiaThs71y5lViDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1ODI5WhcNMjExMjA3MDAwODI5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqXqZHsPk4uj4nC/FAtUMxhwQJCbi8gXXgbFDLRZJ8woRU7U2W6jodyde+/HVZpFc8YXU7wuCmtNbkcmASFrWOCQG5Z+/PDJkdt9omxKxjxukb7zGh1ubc9s9vX48h6+KEDoZykEziEGW4hYK/uoxAbhxeHqS9DSLfdjRjMc9SkEOCdfmdtkGQEt5897wvjy4lk/kDCbkPFkN8eiBBfXUdS6cyhQIiumrzuw/UgF+LHQg/cz9CJvHTDCTlfjD83XRf8RrGu1xu02MoQBbsc7CZD1VILDKr1QrWH1j/hu2SynDYFvJikALMsGPx+/Pw/dtDtTey8PBeo7ukjE8bJUY1AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFHnFr/Sbz3WFXpJjJgABZZDvrbtpMB0GA1UdDgQWBBR5xa/0m891hV6SYyYAAWWQ7627aTANBgkqhkiG9w0BAQsFAAOCAQEAQgytqZjB+Hadrs8rT1DLYXWgV91fNZNPb4NG3mfZOUaL2Mk+IOexiAAfIzctlVEJ+LSWBvrEauXi1+AHY7Tia1YV4PR1pTZn3pQc96jhPaVVsJ9VUrj+GnZAfZR1lH+IdTPq5R14xmZwFN6zjmtULTZs1AUYxt/5K09o9XYCnev0IieUUU5syTmdG1jT0GLQpBK4wBj/KA/Ub2unfdd659orHBAA+R6V4sfLiaur3U18TsRHLBXI54lr9tMKgjnYGtz4OOPtPOsMRUOImUFUk+oqG8hyOiXq2VNLuvkQcB+pCJVJqVkFMxp/je1QvfbietIB2z62ZJZFtAAkA4dx0Q==","attributes":{"enabled":true,"nbf":1575676709,"exp":1638835709,"created":1575677309,"updated":1575677309,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575677285,"updated":1575677285}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2585']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '93'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '93'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '93'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1583453347,"scheduledPurgeDate":1591229347,"id":"https://vaultname.vault.azure.net/certificates/cert-name/220d527d333f442e9213b485dbf4700c","kid":"https://vaultname.vault.azure.net/keys/cert-name/220d527d333f442e9213b485dbf4700c","sid":"https://vaultname.vault.azure.net/secrets/cert-name/220d527d333f442e9213b485dbf4700c","x5t":"Insdiwsw7KQtyS0V2m--URB8zh0","cer":"MIIDWjCCAkKgAwIBAgIQR1OeJF2zRcSt6xWprl5B1DANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTAzWhcNMjIwMzA2MDAwOTAzWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYasXV7oA47Z87xATQdlq1nRS+/Vp7uz3Ls/0F3Barxu28iF545QMxKq2jvjwn8rtQ6w0Nm+sHvObAZ9udL5pjSG4QHCsaSupMosreL4L4ORYQPGPzUW+80lI+XdRm0ODA3XU+SF+glH8zQl/QcHvc4vXdKvqJFFgfEp4s5Z16GgEMdIwFXr0Dw3DSd73HOCVjNwcpokjq8Boff29RYfIih4o2ui+2dMs5PWAIzM4DQzFmiIyK3uSe/0u+Te3zefHy8zqlHc1t1igBx3VslrnzfrsKvXHPpQMZ1Gt3eX2ypVQkRbY21OQwmCWDoS5qyD2gOd1yL6EvggMpXUrHhH6tAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLNGbXv8WIMnoqIGTrdgGaYuTsiDMB0GA1UdDgQWBBSzRm17/FiDJ6KiBk63YBmmLk7IgzANBgkqhkiG9w0BAQsFAAOCAQEAh3cv9DiRPmhYZTkEZZeVdhRZQ+sLdzXIFyex12CsJOxn9QS/vBT4lHjQAq/gO/oXD+o5fjNBEtDNFYZtvq62qjyHMxSWnwk87dTpSzHaxj37B3fZkFDM9D0Y8yfBHMkMd8M8wGPQMLKgDH8xMvfGAqSb/p2n6/6PcJeCExtN4O/5pRN+Sjkmy10NLwqGWtwq9g1SaapiBPM7sbEL4yAVT9Sg1KYqbvJUXy8FMCowRZwUMCzfeiFysJYSMP3VBl2L0l42mnIwVR4BsT2C3HCMzwohTHeiY9O5Kx0U6FMI8+MP0yT4H1g1Oyr5HsATKvs2EcQ5ga+m4XNgry16NfP/Rw==","attributes":{"enabled":true,"nbf":1583452743,"exp":1646525343,"created":1583453344,"updated":1583453344,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453311,"updated":1583453311}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2585'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1583453347,"scheduledPurgeDate":1591229347,"id":"https://vaultname.vault.azure.net/certificates/cert-name/220d527d333f442e9213b485dbf4700c","kid":"https://vaultname.vault.azure.net/keys/cert-name/220d527d333f442e9213b485dbf4700c","sid":"https://vaultname.vault.azure.net/secrets/cert-name/220d527d333f442e9213b485dbf4700c","x5t":"Insdiwsw7KQtyS0V2m--URB8zh0","cer":"MIIDWjCCAkKgAwIBAgIQR1OeJF2zRcSt6xWprl5B1DANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTAzWhcNMjIwMzA2MDAwOTAzWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYasXV7oA47Z87xATQdlq1nRS+/Vp7uz3Ls/0F3Barxu28iF545QMxKq2jvjwn8rtQ6w0Nm+sHvObAZ9udL5pjSG4QHCsaSupMosreL4L4ORYQPGPzUW+80lI+XdRm0ODA3XU+SF+glH8zQl/QcHvc4vXdKvqJFFgfEp4s5Z16GgEMdIwFXr0Dw3DSd73HOCVjNwcpokjq8Boff29RYfIih4o2ui+2dMs5PWAIzM4DQzFmiIyK3uSe/0u+Te3zefHy8zqlHc1t1igBx3VslrnzfrsKvXHPpQMZ1Gt3eX2ypVQkRbY21OQwmCWDoS5qyD2gOd1yL6EvggMpXUrHhH6tAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLNGbXv8WIMnoqIGTrdgGaYuTsiDMB0GA1UdDgQWBBSzRm17/FiDJ6KiBk63YBmmLk7IgzANBgkqhkiG9w0BAQsFAAOCAQEAh3cv9DiRPmhYZTkEZZeVdhRZQ+sLdzXIFyex12CsJOxn9QS/vBT4lHjQAq/gO/oXD+o5fjNBEtDNFYZtvq62qjyHMxSWnwk87dTpSzHaxj37B3fZkFDM9D0Y8yfBHMkMd8M8wGPQMLKgDH8xMvfGAqSb/p2n6/6PcJeCExtN4O/5pRN+Sjkmy10NLwqGWtwq9g1SaapiBPM7sbEL4yAVT9Sg1KYqbvJUXy8FMCowRZwUMCzfeiFysJYSMP3VBl2L0l42mnIwVR4BsT2C3HCMzwohTHeiY9O5Kx0U6FMI8+MP0yT4H1g1Oyr5HsATKvs2EcQ5ga+m4XNgry16NfP/Rw==","attributes":{"enabled":true,"nbf":1583452743,"exp":1646525343,"created":1583453344,"updated":1583453344,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453311,"updated":1583453311}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2585'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name/recover?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/61eb00920df84600b51ac1f6008200f8","kid":"https://vaultname.vault.azure.net/keys/cert-name/61eb00920df84600b51ac1f6008200f8","sid":"https://vaultname.vault.azure.net/secrets/cert-name/61eb00920df84600b51ac1f6008200f8","x5t":"yMD2RCau9Vu0bStG7V9gh4SntRE","cer":"MIIDWjCCAkKgAwIBAgIQUYRshTT7RiaThs71y5lViDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1ODI5WhcNMjExMjA3MDAwODI5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqXqZHsPk4uj4nC/FAtUMxhwQJCbi8gXXgbFDLRZJ8woRU7U2W6jodyde+/HVZpFc8YXU7wuCmtNbkcmASFrWOCQG5Z+/PDJkdt9omxKxjxukb7zGh1ubc9s9vX48h6+KEDoZykEziEGW4hYK/uoxAbhxeHqS9DSLfdjRjMc9SkEOCdfmdtkGQEt5897wvjy4lk/kDCbkPFkN8eiBBfXUdS6cyhQIiumrzuw/UgF+LHQg/cz9CJvHTDCTlfjD83XRf8RrGu1xu02MoQBbsc7CZD1VILDKr1QrWH1j/hu2SynDYFvJikALMsGPx+/Pw/dtDtTey8PBeo7ukjE8bJUY1AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFHnFr/Sbz3WFXpJjJgABZZDvrbtpMB0GA1UdDgQWBBR5xa/0m891hV6SYyYAAWWQ7627aTANBgkqhkiG9w0BAQsFAAOCAQEAQgytqZjB+Hadrs8rT1DLYXWgV91fNZNPb4NG3mfZOUaL2Mk+IOexiAAfIzctlVEJ+LSWBvrEauXi1+AHY7Tia1YV4PR1pTZn3pQc96jhPaVVsJ9VUrj+GnZAfZR1lH+IdTPq5R14xmZwFN6zjmtULTZs1AUYxt/5K09o9XYCnev0IieUUU5syTmdG1jT0GLQpBK4wBj/KA/Ub2unfdd659orHBAA+R6V4sfLiaur3U18TsRHLBXI54lr9tMKgjnYGtz4OOPtPOsMRUOImUFUk+oqG8hyOiXq2VNLuvkQcB+pCJVJqVkFMxp/je1QvfbietIB2z62ZJZFtAAkA4dx0Q==","attributes":{"enabled":true,"nbf":1575676709,"exp":1638835709,"created":1575677309,"updated":1575677309,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575677285,"updated":1575677285}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2434']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/220d527d333f442e9213b485dbf4700c","kid":"https://vaultname.vault.azure.net/keys/cert-name/220d527d333f442e9213b485dbf4700c","sid":"https://vaultname.vault.azure.net/secrets/cert-name/220d527d333f442e9213b485dbf4700c","x5t":"Insdiwsw7KQtyS0V2m--URB8zh0","cer":"MIIDWjCCAkKgAwIBAgIQR1OeJF2zRcSt6xWprl5B1DANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTAzWhcNMjIwMzA2MDAwOTAzWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYasXV7oA47Z87xATQdlq1nRS+/Vp7uz3Ls/0F3Barxu28iF545QMxKq2jvjwn8rtQ6w0Nm+sHvObAZ9udL5pjSG4QHCsaSupMosreL4L4ORYQPGPzUW+80lI+XdRm0ODA3XU+SF+glH8zQl/QcHvc4vXdKvqJFFgfEp4s5Z16GgEMdIwFXr0Dw3DSd73HOCVjNwcpokjq8Boff29RYfIih4o2ui+2dMs5PWAIzM4DQzFmiIyK3uSe/0u+Te3zefHy8zqlHc1t1igBx3VslrnzfrsKvXHPpQMZ1Gt3eX2ypVQkRbY21OQwmCWDoS5qyD2gOd1yL6EvggMpXUrHhH6tAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLNGbXv8WIMnoqIGTrdgGaYuTsiDMB0GA1UdDgQWBBSzRm17/FiDJ6KiBk63YBmmLk7IgzANBgkqhkiG9w0BAQsFAAOCAQEAh3cv9DiRPmhYZTkEZZeVdhRZQ+sLdzXIFyex12CsJOxn9QS/vBT4lHjQAq/gO/oXD+o5fjNBEtDNFYZtvq62qjyHMxSWnwk87dTpSzHaxj37B3fZkFDM9D0Y8yfBHMkMd8M8wGPQMLKgDH8xMvfGAqSb/p2n6/6PcJeCExtN4O/5pRN+Sjkmy10NLwqGWtwq9g1SaapiBPM7sbEL4yAVT9Sg1KYqbvJUXy8FMCowRZwUMCzfeiFysJYSMP3VBl2L0l42mnIwVR4BsT2C3HCMzwohTHeiY9O5Kx0U6FMI8+MP0yT4H1g1Oyr5HsATKvs2EcQ5ga+m4XNgry16NfP/Rw==","attributes":{"enabled":true,"nbf":1583452743,"exp":1646525343,"created":1583453344,"updated":1583453344,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453311,"updated":1583453311}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2434'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:09:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_contacts.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_contacts.yaml
    index 7cb1183bed12..386f9ff9cd9e 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_contacts.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_contacts.yaml
    @@ -2,122 +2,212 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"contacts": [{"email": "admin@contoso.com", "name": "John Doe", "phone":
           "1111111111"}, {"email": "admin2@contoso.com", "name": "John Doe2", "phone":
           "2222222222"}]}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['166']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '166'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    -        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    +        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    -        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    +        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    -        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    +        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:08:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_issuers.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_issuers.yaml
    index 9659eb8065f0..b3de8e16b308 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_issuers.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates.test_example_issuers.yaml
    @@ -2,176 +2,310 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:36 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"provider": "Test", "credentials": {"account_id": "keyvaultuser"}, "org_details":
           {"admin_details": [{"first_name": "John", "last_name": "Doe", "email": "admin@microsoft.com",
           "phone": "4255555555"}]}, "attributes": {"enabled": true}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['235']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '235'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['353']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '353'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['353']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '353'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"provider": "Test", "credentials": {"account_id": "keyvaultuser"}, "attributes":
           {"enabled": true}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['100']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '100'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer2?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test","credentials":{"account_id":"keyvaultuser"},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test","credentials":{"account_id":"keyvaultuser"},"attributes":{"enabled":true,"created":1583453314,"updated":1583453314}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['220']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '220'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/issuers?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test"},{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test"}],"nextLink":null}'}
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test"},{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test"}],"nextLink":null}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['237']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '237'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676717,"updated":1575676717}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453313,"updated":1583453313}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['353']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '353'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Fri, 06 Mar 2020 00:08:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_backup_restore.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_backup_restore.yaml
    index 34b16968ec68..0130ba3dc4e5 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_backup_restore.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_backup_restore.yaml
    @@ -2,186 +2,518 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:39 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, npwphfv27zygrslti374af3g.vault.azure.net,
    -        /certificates/cert-name/create, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://ki6l2kuxwvj3y6cdzuebj5yy.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApTbZgsd6GUM6GFVuZpKbOLdzDA2ghYMw7b66NlNM36ZLBSgrf3rNj2FYa5GdJHre4OLF34E/51evW4Cmng6mt8t6o4CIlMxTk6twXLQIP+PdtGdfsVrdLvRKsyWSBpjW/3p6pxcKi/MpowLq5hbbRykYlDEIjLu60hp9bGd4s4p2LkTIepPQRHRE6b4H7oVkU+uv1LPoEpBnNToow2qeEYdFD5FZr7387wA7oWCHlm+5cNHzxDvXfoA3h+xoq+OCG3opsATy8JfKdQIsrkCZzciE0N/tY2Nt5ErD7j5kpZFZoonpy/m7bmfbiA0KXdszlUg048cRqR/J8SGiV7pzDwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADi0r8i9wU+Gs94SDhpuoem/6k6xN/eMAkor8RhXlq/i01UfCxdSEcsUTYDwqcaQKEmZvFjNzrOMiwPFUTIY9PVOJo35WorR+wZa59nO+gcXQpu9SI0CtLFDD/NpX1sr2KZ15b7pvNqXmDRR2PpAuhDJ5wfEFJmX2Wavj7w7fB+SUTLnSkka+5kme5yX8ULGKL6N6jGx02eoSem0axYKvmCuH9aQ6LMGRQq66HjlErITOI4LRIqWVG4IToE+ilIdP5EUxQkMtZwNpYaxvhXi2cDbQomkYniS3O4nuoVN1g/nUFbVKrRb1blOF/3ygDus4H5Lq0QrGbPFf8tmKHRxEN0=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Certificate request is in progress. This may take some
    +        time based on the issuer provider. Please check again later.","request_id":"6366a09824344235ad1d24f8b7f7e4b7"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1343'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:13 GMT
    +      expires: '-1'
    +      location:
    +      - h
    +      - t
    +      - t
    +      - p
    +      - s
    +      - ':'
    +      - /
    +      - /
    +      - k
    +      - i
    +      - '6'
    +      - l
    +      - '2'
    +      - k
    +      - u
    +      - x
    +      - w
    +      - v
    +      - j
    +      - '3'
    +      - y
    +      - '6'
    +      - c
    +      - d
    +      - z
    +      - u
    +      - e
    +      - b
    +      - j
    +      - '5'
    +      - y
    +      - y
    +      - .
    +      - v
    +      - a
    +      - u
    +      - l
    +      - t
    +      - .
    +      - a
    +      - z
    +      - u
    +      - r
    +      - e
    +      - .
    +      - n
    +      - e
    +      - t
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - s
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - '-'
    +      - n
    +      - a
    +      - m
    +      - e
    +      - /
    +      - p
    +      - e
    +      - n
    +      - d
    +      - i
    +      - n
    +      - g
    +      - '?'
    +      - a
    +      - p
    +      - i
    +      - '-'
    +      - v
    +      - e
    +      - r
    +      - s
    +      - i
    +      - o
    +      - n
    +      - '='
    +      - '7'
    +      - .
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
    +      - '&'
    +      - r
    +      - e
    +      - q
    +      - u
    +      - e
    +      - s
    +      - t
    +      - _
    +      - i
    +      - d
    +      - '='
    +      - '6'
    +      - '3'
    +      - '6'
    +      - '6'
    +      - a
    +      - '0'
    +      - '9'
    +      - '8'
    +      - '2'
    +      - '4'
    +      - '3'
    +      - '4'
    +      - '4'
    +      - '2'
    +      - '3'
    +      - '5'
    +      - a
    +      - d
    +      - '1'
    +      - d
    +      - '2'
    +      - '4'
    +      - f
    +      - '8'
    +      - b
    +      - '7'
    +      - f
    +      - '7'
    +      - e
    +      - '4'
    +      - b
    +      - '7'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 202
    +      message: Accepted
    +    url: https://ki6l2kuxwvj3y6cdzuebj5yy.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApTbZgsd6GUM6GFVuZpKbOLdzDA2ghYMw7b66NlNM36ZLBSgrf3rNj2FYa5GdJHre4OLF34E/51evW4Cmng6mt8t6o4CIlMxTk6twXLQIP+PdtGdfsVrdLvRKsyWSBpjW/3p6pxcKi/MpowLq5hbbRykYlDEIjLu60hp9bGd4s4p2LkTIepPQRHRE6b4H7oVkU+uv1LPoEpBnNToow2qeEYdFD5FZr7387wA7oWCHlm+5cNHzxDvXfoA3h+xoq+OCG3opsATy8JfKdQIsrkCZzciE0N/tY2Nt5ErD7j5kpZFZoonpy/m7bmfbiA0KXdszlUg048cRqR/J8SGiV7pzDwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADi0r8i9wU+Gs94SDhpuoem/6k6xN/eMAkor8RhXlq/i01UfCxdSEcsUTYDwqcaQKEmZvFjNzrOMiwPFUTIY9PVOJo35WorR+wZa59nO+gcXQpu9SI0CtLFDD/NpX1sr2KZ15b7pvNqXmDRR2PpAuhDJ5wfEFJmX2Wavj7w7fB+SUTLnSkka+5kme5yX8ULGKL6N6jGx02eoSem0axYKvmCuH9aQ6LMGRQq66HjlErITOI4LRIqWVG4IToE+ilIdP5EUxQkMtZwNpYaxvhXi2cDbQomkYniS3O4nuoVN1g/nUFbVKrRb1blOF/3ygDus4H5Lq0QrGbPFf8tmKHRxEN0=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Certificate request is in progress. This may take some
    +        time based on the issuer provider. Please check again later.","request_id":"6366a09824344235ad1d24f8b7f7e4b7"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1343'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ki6l2kuxwvj3y6cdzuebj5yy.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1Qo9yP7vuIrsJcOAamSxH1wHly+4l/mNNyZSFOyOUIYrO4a5PUrxM1KoxTVR6ueKzMZ4Gnco7F1BDe8RbEQMQiA+lchiFC9qUYLTOI1q4nep1ijf/ud+5bD3M5oAJk2EWSRFXpZl1E663oAi+oFuRXUdQX82nFfuF5FABJPE9F8zOVjJEWJBarLqhoegfP7c/wbqwsZgrAzKAPgiE54eCuZykhVpRJBHSOGx6Uz9pjVV9AvztArONmTrYAVSq1aeuY6ZeKx5AzDbQVTj/3aWpP0N8Pp7bmVkJAzOe1RsvXTQHJJiKYhlaL/3w8Uyyazg3NBKpEMz7AUDqay9Azh2wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAMGbnIeiof6TKGammA62iR5iT5TJbAVfKz0eQOtsJSgWxfCZSJyf9cwzwm/6mHGtQQ7/lUZGNaGZub9EHqoMurQuCT0gFKMLP854Ovl6Poo6xJR2Pw/7348iWX7Lmtu8bv4UCrVc2T9HE8g4L2S3V/mYZMQBdyFw35jUbd5tX+lY7VC9DK+FluifXoKNRuKCjHo0mcVzFFUDacmHskmVwl0vh8GQ5DR5m8F7PvhLTc9dpmiKfUgsGi8/CKeCJ7C5/49r1oEk0iiIdKbXsBx71t5fHu2w8Il02iQf8uTYfUxcO4Cp4rAqcXBZVUkN0jko9RZU6W2bT11qsLKE9i5er18=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApTbZgsd6GUM6GFVuZpKbOLdzDA2ghYMw7b66NlNM36ZLBSgrf3rNj2FYa5GdJHre4OLF34E/51evW4Cmng6mt8t6o4CIlMxTk6twXLQIP+PdtGdfsVrdLvRKsyWSBpjW/3p6pxcKi/MpowLq5hbbRykYlDEIjLu60hp9bGd4s4p2LkTIepPQRHRE6b4H7oVkU+uv1LPoEpBnNToow2qeEYdFD5FZr7387wA7oWCHlm+5cNHzxDvXfoA3h+xoq+OCG3opsATy8JfKdQIsrkCZzciE0N/tY2Nt5ErD7j5kpZFZoonpy/m7bmfbiA0KXdszlUg048cRqR/J8SGiV7pzDwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADi0r8i9wU+Gs94SDhpuoem/6k6xN/eMAkor8RhXlq/i01UfCxdSEcsUTYDwqcaQKEmZvFjNzrOMiwPFUTIY9PVOJo35WorR+wZa59nO+gcXQpu9SI0CtLFDD/NpX1sr2KZ15b7pvNqXmDRR2PpAuhDJ5wfEFJmX2Wavj7w7fB+SUTLnSkka+5kme5yX8ULGKL6N6jGx02eoSem0axYKvmCuH9aQ6LMGRQq66HjlErITOI4LRIqWVG4IToE+ilIdP5EUxQkMtZwNpYaxvhXi2cDbQomkYniS3O4nuoVN1g/nUFbVKrRb1blOF/3ygDus4H5Lq0QrGbPFf8tmKHRxEN0=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"3869ad998ae849f1a22d118609555709"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"6366a09824344235ad1d24f8b7f7e4b7"}'
         headers:
           cache-control: no-cache
           content-length: '1343'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:40 GMT
    +      date: Fri, 06 Mar 2020 00:10:24 GMT
           expires: '-1'
    -      location: [h, t, t, p, s, ':', /, /, n, p, w, p, h, f, v, '2', '7', z, y, g,
    -        r, s, l, t, i, '3', '7', '4', a, f, '3', g, ., v, a, u, l, t, ., a, z, u,
    -        r, e, ., n, e, t, /, c, e, r, t, i, f, i, c, a, t, e, s, /, c, e, r, t, '-',
    -        n, a, m, e, /, p, e, n, d, i, n, g, '?', a, p, i, '-', v, e, r, s, i, o, n,
    -        '=', '7', ., '0', '&', r, e, q, u, e, s, t, _, i, d, '=', '3', '8', '6', '9',
    -        a, d, '9', '9', '8', a, e, '8', '4', '9', f, '1', a, '2', '2', d, '1', '1',
    -        '8', '6', '0', '9', '5', '5', '5', '7', '0', '9']
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
    -    status: {code: 202, message: Accepted}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, npwphfv27zygrslti374af3g.vault.azure.net,
    -        /certificates/cert-name/create, api-version=7.0, '']
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ki6l2kuxwvj3y6cdzuebj5yy.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1Qo9yP7vuIrsJcOAamSxH1wHly+4l/mNNyZSFOyOUIYrO4a5PUrxM1KoxTVR6ueKzMZ4Gnco7F1BDe8RbEQMQiA+lchiFC9qUYLTOI1q4nep1ijf/ud+5bD3M5oAJk2EWSRFXpZl1E663oAi+oFuRXUdQX82nFfuF5FABJPE9F8zOVjJEWJBarLqhoegfP7c/wbqwsZgrAzKAPgiE54eCuZykhVpRJBHSOGx6Uz9pjVV9AvztArONmTrYAVSq1aeuY6ZeKx5AzDbQVTj/3aWpP0N8Pp7bmVkJAzOe1RsvXTQHJJiKYhlaL/3w8Uyyazg3NBKpEMz7AUDqay9Azh2wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAMGbnIeiof6TKGammA62iR5iT5TJbAVfKz0eQOtsJSgWxfCZSJyf9cwzwm/6mHGtQQ7/lUZGNaGZub9EHqoMurQuCT0gFKMLP854Ovl6Poo6xJR2Pw/7348iWX7Lmtu8bv4UCrVc2T9HE8g4L2S3V/mYZMQBdyFw35jUbd5tX+lY7VC9DK+FluifXoKNRuKCjHo0mcVzFFUDacmHskmVwl0vh8GQ5DR5m8F7PvhLTc9dpmiKfUgsGi8/CKeCJ7C5/49r1oEk0iiIdKbXsBx71t5fHu2w8Il02iQf8uTYfUxcO4Cp4rAqcXBZVUkN0jko9RZU6W2bT11qsLKE9i5er18=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApTbZgsd6GUM6GFVuZpKbOLdzDA2ghYMw7b66NlNM36ZLBSgrf3rNj2FYa5GdJHre4OLF34E/51evW4Cmng6mt8t6o4CIlMxTk6twXLQIP+PdtGdfsVrdLvRKsyWSBpjW/3p6pxcKi/MpowLq5hbbRykYlDEIjLu60hp9bGd4s4p2LkTIepPQRHRE6b4H7oVkU+uv1LPoEpBnNToow2qeEYdFD5FZr7387wA7oWCHlm+5cNHzxDvXfoA3h+xoq+OCG3opsATy8JfKdQIsrkCZzciE0N/tY2Nt5ErD7j5kpZFZoonpy/m7bmfbiA0KXdszlUg048cRqR/J8SGiV7pzDwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADi0r8i9wU+Gs94SDhpuoem/6k6xN/eMAkor8RhXlq/i01UfCxdSEcsUTYDwqcaQKEmZvFjNzrOMiwPFUTIY9PVOJo35WorR+wZa59nO+gcXQpu9SI0CtLFDD/NpX1sr2KZ15b7pvNqXmDRR2PpAuhDJ5wfEFJmX2Wavj7w7fB+SUTLnSkka+5kme5yX8ULGKL6N6jGx02eoSem0axYKvmCuH9aQ6LMGRQq66HjlErITOI4LRIqWVG4IToE+ilIdP5EUxQkMtZwNpYaxvhXi2cDbQomkYniS3O4nuoVN1g/nUFbVKrRb1blOF/3ygDus4H5Lq0QrGbPFf8tmKHRxEN0=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"3869ad998ae849f1a22d118609555709"}'}
    -    headers: {cache-control: no-cache, content-length: '1343', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, npwphfv27zygrslti374af3g.vault.azure.net,
    -        /certificates/cert-name/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"6366a09824344235ad1d24f8b7f7e4b7"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1343'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ki6l2kuxwvj3y6cdzuebj5yy.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApTbZgsd6GUM6GFVuZpKbOLdzDA2ghYMw7b66NlNM36ZLBSgrf3rNj2FYa5GdJHre4OLF34E/51evW4Cmng6mt8t6o4CIlMxTk6twXLQIP+PdtGdfsVrdLvRKsyWSBpjW/3p6pxcKi/MpowLq5hbbRykYlDEIjLu60hp9bGd4s4p2LkTIepPQRHRE6b4H7oVkU+uv1LPoEpBnNToow2qeEYdFD5FZr7387wA7oWCHlm+5cNHzxDvXfoA3h+xoq+OCG3opsATy8JfKdQIsrkCZzciE0N/tY2Nt5ErD7j5kpZFZoonpy/m7bmfbiA0KXdszlUg048cRqR/J8SGiV7pzDwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADi0r8i9wU+Gs94SDhpuoem/6k6xN/eMAkor8RhXlq/i01UfCxdSEcsUTYDwqcaQKEmZvFjNzrOMiwPFUTIY9PVOJo35WorR+wZa59nO+gcXQpu9SI0CtLFDD/NpX1sr2KZ15b7pvNqXmDRR2PpAuhDJ5wfEFJmX2Wavj7w7fB+SUTLnSkka+5kme5yX8ULGKL6N6jGx02eoSem0axYKvmCuH9aQ6LMGRQq66HjlErITOI4LRIqWVG4IToE+ilIdP5EUxQkMtZwNpYaxvhXi2cDbQomkYniS3O4nuoVN1g/nUFbVKrRb1blOF/3ygDus4H5Lq0QrGbPFf8tmKHRxEN0=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Certificate request is in progress. This may take some
    +        time based on the issuer provider. Please check again later.","request_id":"6366a09824344235ad1d24f8b7f7e4b7"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1343'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ki6l2kuxwvj3y6cdzuebj5yy.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1Qo9yP7vuIrsJcOAamSxH1wHly+4l/mNNyZSFOyOUIYrO4a5PUrxM1KoxTVR6ueKzMZ4Gnco7F1BDe8RbEQMQiA+lchiFC9qUYLTOI1q4nep1ijf/ud+5bD3M5oAJk2EWSRFXpZl1E663oAi+oFuRXUdQX82nFfuF5FABJPE9F8zOVjJEWJBarLqhoegfP7c/wbqwsZgrAzKAPgiE54eCuZykhVpRJBHSOGx6Uz9pjVV9AvztArONmTrYAVSq1aeuY6ZeKx5AzDbQVTj/3aWpP0N8Pp7bmVkJAzOe1RsvXTQHJJiKYhlaL/3w8Uyyazg3NBKpEMz7AUDqay9Azh2wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAMGbnIeiof6TKGammA62iR5iT5TJbAVfKz0eQOtsJSgWxfCZSJyf9cwzwm/6mHGtQQ7/lUZGNaGZub9EHqoMurQuCT0gFKMLP854Ovl6Poo6xJR2Pw/7348iWX7Lmtu8bv4UCrVc2T9HE8g4L2S3V/mYZMQBdyFw35jUbd5tX+lY7VC9DK+FluifXoKNRuKCjHo0mcVzFFUDacmHskmVwl0vh8GQ5DR5m8F7PvhLTc9dpmiKfUgsGi8/CKeCJ7C5/49r1oEk0iiIdKbXsBx71t5fHu2w8Il02iQf8uTYfUxcO4Cp4rAqcXBZVUkN0jko9RZU6W2bT11qsLKE9i5er18=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert-name","request_id":"3869ad998ae849f1a22d118609555709"}'}
    -    headers: {cache-control: no-cache, content-length: '1261', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, npwphfv27zygrslti374af3g.vault.azure.net,
    -        /certificates/cert-name/pending, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApTbZgsd6GUM6GFVuZpKbOLdzDA2ghYMw7b66NlNM36ZLBSgrf3rNj2FYa5GdJHre4OLF34E/51evW4Cmng6mt8t6o4CIlMxTk6twXLQIP+PdtGdfsVrdLvRKsyWSBpjW/3p6pxcKi/MpowLq5hbbRykYlDEIjLu60hp9bGd4s4p2LkTIepPQRHRE6b4H7oVkU+uv1LPoEpBnNToow2qeEYdFD5FZr7387wA7oWCHlm+5cNHzxDvXfoA3h+xoq+OCG3opsATy8JfKdQIsrkCZzciE0N/tY2Nt5ErD7j5kpZFZoonpy/m7bmfbiA0KXdszlUg048cRqR/J8SGiV7pzDwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADi0r8i9wU+Gs94SDhpuoem/6k6xN/eMAkor8RhXlq/i01UfCxdSEcsUTYDwqcaQKEmZvFjNzrOMiwPFUTIY9PVOJo35WorR+wZa59nO+gcXQpu9SI0CtLFDD/NpX1sr2KZ15b7pvNqXmDRR2PpAuhDJ5wfEFJmX2Wavj7w7fB+SUTLnSkka+5kme5yX8ULGKL6N6jGx02eoSem0axYKvmCuH9aQ6LMGRQq66HjlErITOI4LRIqWVG4IToE+ilIdP5EUxQkMtZwNpYaxvhXi2cDbQomkYniS3O4nuoVN1g/nUFbVKrRb1blOF/3ygDus4H5Lq0QrGbPFf8tmKHRxEN0=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert-name","request_id":"6366a09824344235ad1d24f8b7f7e4b7"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1261'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ki6l2kuxwvj3y6cdzuebj5yy.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/324da9b48a4647c1b1bf2e5d1a28e49d","kid":"https://vaultname.vault.azure.net/keys/cert-name/324da9b48a4647c1b1bf2e5d1a28e49d","sid":"https://vaultname.vault.azure.net/secrets/cert-name/324da9b48a4647c1b1bf2e5d1a28e49d","x5t":"_RinqfVarhtw4EXsyGF07u0-Kto","cer":"MIIDWjCCAkKgAwIBAgIQPNN4zPkaTzCgrm5j+D2PKTANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0ODQ3WhcNMjExMjA2MjM1ODQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPVCj3I/u+4iuwlw4BqZLEfXAeXL7iX+Y03JlIU7I5Qhis7hrk9SvEzUqjFNVHq54rMxngadyjsXUEN7xFsRAxCID6VyGIUL2pRgtM4jWrid6nWKN/+537lsPczmgAmTYRZJEVelmXUTrregCL6gW5FdR1BfzacV+4XkUAEk8T0XzM5WMkRYkFqsuqGh6B8/tz/BurCxmCsDMoA+CITnh4K5nKSFWlEkEdI4bHpTP2mNVX0C/O0Cs42ZOtgBVKrVp65jpl4rHkDMNtBVOP/dpak/Q3w+ntuZWQkDM57VGy9dNAckmIpiGVov/fDxTLJrODc0EqkQzPsBQOprL0DOHbAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFCHuT2L8BOHpD2cCc3XPNwLJF492MB0GA1UdDgQWBBQh7k9i/ATh6Q9nAnN1zzcCyRePdjANBgkqhkiG9w0BAQsFAAOCAQEAE6lf/W3cnmQzyTDWC2Endr6QA+cVLBqA7VRrRwsR0WqrcP0Tmhhye6hDe01P73DnSc9p6bfEcRP+deyxgBTG9hE9DmvY+Ylc9TINLOmqiVpnY6ehfjLRlhOsTRWjrACK//wL+jU8wc1sYUjW/QzeiDnOu6AnbsTsLc0KhRlCBUqNB5L4XdZWAtktFg3VKa0P+DmBciGJfXINHOTFwFgEkb5izeNVO+Vx12+8EwPqk1kkdoLGY/Eq0P6iVVoTncyI/hGwrhiAcQDJRYzRoqLiwOnXj912jbUHOxtjjGdexNUF1gOu1v95yPdn8qyKfhAatH74bO8AWH3ueS8KkY/E/A==","attributes":{"enabled":true,"nbf":1575676127,"exp":1638835127,"created":1575676727,"updated":1575676727,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2422', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, npwphfv27zygrslti374af3g.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/ac1adaee1ebb4c9faf48a1beed498346","kid":"https://vaultname.vault.azure.net/keys/cert-name/ac1adaee1ebb4c9faf48a1beed498346","sid":"https://vaultname.vault.azure.net/secrets/cert-name/ac1adaee1ebb4c9faf48a1beed498346","x5t":"qLxF3hvD102HIr288uwzPnIBLlE","cer":"MIIDWjCCAkKgAwIBAgIQeGxYSNumQ0il07U8vgIpXTANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA2MDAwMDQ3WhcNMjIwMzA2MDAxMDQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQClNtmCx3oZQzoYVW5mkps4t3MMDaCFgzDtvro2U0zfpksFKCt/es2PYVhrkZ0ket7g4sXfgT/nV69bgKaeDqa3y3qjgIiUzFOTq3BctAg/4920Z1+xWt0u9EqzJZIGmNb/enqnFwqL8ymjAurmFttHKRiUMQiMu7rSGn1sZ3izinYuRMh6k9BEdETpvgfuhWRT66/Us+gSkGc1OijDap4Rh0UPkVmvvfzvADuhYIeWb7lw0fPEO9d+gDeH7Gir44IbeimwBPLwl8p1AiyuQJnNyITQ3+1jY23kSsPuPmSlkVmiienL+btuZ9uIDQpd2zOVSDTjxxGpH8nxIaJXunMPAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLAU+8HE/ncF5Yb86YY3hfqEYPiuMB0GA1UdDgQWBBSwFPvBxP53BeWG/OmGN4X6hGD4rjANBgkqhkiG9w0BAQsFAAOCAQEAXKqdQzFnkQes3WiIIUGIZoxGY4hwk/7cfySmYSOx3TSN1KZc4kpX4xCFhwlLdHCB/ycmt1ni3VMaoFnu+TO5Gr6brAcm3qXKpHECv/2eJxxU/EskqhiIDy8XEDMN1cDFiiup1woR2da0AuO2zODjcSsazZgPnt916YWCJlhp3hEfId7u6mcn4sDgaRWrZUkZKHvcdH+Vm7Eh/TUgdfwR/Av4l0Lww80KKzvbq9E0wU8+skzrq2v7TbXF8WxXasQmGAJWhk1Rghp6rL6WWTdjQ85M3H+rtLhXR8moTZfnLJJxnUH5xhB+RsEx5NInJQgUvBMeSecme11wtnUjqy+MCQ==","attributes":{"enabled":true,"nbf":1583452847,"exp":1646525447,"created":1583453447,"updated":1583453447,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453413,"updated":1583453413}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2422'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ki6l2kuxwvj3y6cdzuebj5yy.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/backup?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/backup?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLnBMN1NGcUJjYzdNMnAzdVEyX0pXUWlUQ25pNDNORXJVTDRWUTNETFU3NnIzRHl5UmN4c0duN3U4MXJyOU96TGpoR2h4dGVSTlBrT0F6Rm54ZUhHbWpLc2hXYkw5TzBrTkdGeHZKc1dmaDBlOXd4Z0VfYWIwQ0ZSNVZHZW1HZmY3T1BqRGotRW5LQUttNk1MamNCRlBfM2ZXWS1td2lkWlNEcWhyakRlenhmczliMnBLcFZZUzhoY1p1ZEZGa18tMS10bkc5dERxM0Rja1pER1FvMFp4bmZ1X0F5a1pleVhzMk05M1ViWE5QbVJ5cF9jdUlmNTJWbEFubXR2a0Y5Q01DMGtQZWhGYmNqWkpDY2FwSlcyWmEzMTI1YmxrLVlqbmw5MDRMUllEZU40RmdlOV96RlNqUi1GRnEwem9rUnhFdmFKaUNzWk1JNlQ2UzZoZGNPYXUxdy52M1NqVlpxU2N0U0VEMlIwRWk0TUVnLk82NHdidXZkMzZ4T0k1NktmS0t2YzZJWEJJYVpyV28zM3R6S21PSjF5b3JsV0h5WWd1V1JKWlhvUlFZdU5ZVHIyN0ExbEw4ekd1RGZ2eFpUMmJrOE94cS1fb3pSZkZUVDJtaE1ReDNMNHpjTXhDNm1xNWFnT2ZPNE14d2NNMEh0SHpmZU1lU01RZjRIdnc3SFhDeXJaN3FIR1VUbU5CUVNzaHdCbEFFYjgzRjEteW9IZkozOF9qOHhUUVZTaTFoZ2dwTjR1MUVyWXZyR3lXX2ExSUVCWk5GRjlQeks5dGhiTzJVcVlPTzRVUGRyU0R5aXlScHZmSXJUX0dhZEMtcnhqZDJyVktRNjNPX2ZENFk5ZjN5M1F4TlhCNUZnbWlXZWZvZUpvZVZ2NXJIY09ucHpHNno1enJGYzRlR25DTng0RUwtMGVtb1hpT0RTZk9rRFUta182NjB4RTVMN0lyTURaLWdVbTY0Mkx0WGV1RExWTjJmbXl2SF9yb19ORWNmN3BwaXhJOG5fRll5QWVvM0JpenRFbjNwcWJ3alJERWhrUlFaV0JXSVV5dFpOSzU1ZzdYeWFuMDdlRVdXMTl6bk5jalNFY0xnRHU0WUFuZUNiLWQwZFNkaklpUWRMaU5nSW5MYVRkcVA1clhwbFo3cTlfN3RlZDByWC1oWkEtd0ZoTUxKWFZ0WXNPQnFkck9qNzJNZng4NHl5MnhwUXdsVGZPOUcyMzhJalBiQ3FJMjBydllDRlFLbGFpSGtqUE1zdkRNZEhHY0RLbzdSTDBSTV95YUtxRFhldTkwX29tRWhodWlkZ3loWGlseGpyZjBoSURDOTdNbkQ4TlRNT0tXNXpZN0JqOGJSS3JPNGRTWHRLQ1pWMDY3cFRUbDY0dldORk9IckFJeUJFdnEwN19TRnA1MWs4WS1ZNUhDTjRod1BiOXdBZElnV1VfZG40eU85TlZ0cS1WRW1UeHpEaENobkY1ekVLU0IwN0lLUGxUOW0ySGJFdUZsYzkyalBtd0J2UEhqa2RNa0syWXkxUUNTNDdFMTlQQ2d1SmpEcnFxb1pFTmk0X3JxUDFMZG5iS181aDRZYU85NFBsbmdUOWpjX0JDaVo5NHBtQmZwT2hjZEZRd3pUc2xiQWg0VndGcmlGN1hCU3VxM0RDcWhuV2Y4RUdTNmhhSkVNNjJjUnpmZjRaWFhLNUpjTERHQU1LMkJjZmFJUEhTcmpSQUNfM1VuYnhUNkJGVk9UbWZyOENod3RXTEF1SE5HeDBCdS1sRG5rSEo0RkREX2ltREtTTTQ0aEpQa3RTazlHTzNQSTJxYWdxWGVmRHRZU1BrN2VTS0hyeTRuaHlBb3ZUMUstY2hYSlk5TlUxT0V0YnAxNF9qeHJvOTVZa2F4dlRQdmtmSWZJMmJwdlctZ0g3ckhreWVXajUtaHMxSTBEZGVHTkV1YVlMSGVESTZYbldGX1lZc1ZnMHJDbWl5amI4VC1QaU9LWmRIZ08xMzFhZTVRY2tPbll4Z0VuUkZUalVDSnp3cFBNeHh3NUJUZkJPdWhJX2Y5V2djYmZZWk9fbHlsTzdYbzFSSzljTTBpaEk0VXJFUWJlblJlX0pLNDlhdVRUa01hMFd6Z3oxY1REMktKdHkyNDFsbkVDNFhGY1hRQnVybVJNWDZ0a3kwQ3FOMkZRaURhLWkzeUpCRlUxTkJhUFVmZTZzSHZ4SlRnSWVfM3l0SzFZTThwakh4cG8wbXBHQnktTUlGQ0FlMTRPLTY1c2s0azUtcXNrZV9YcnNkYnVWVExxTWhHcXB4T2RRNkJNZC1BOXB4cFVmd1dVZXBUTm9tdzZfS2dzblhMLXpUUVRQNENSMmFLa3FabU1ialFVdEc1VHdaaVNBekFZelJnMHJmWkthTDVzUXRRbHVJMXFBdE1UbnZ0S0VDNkNVRHM1NzNmbmxFQUpaR25RMHFvVHB0cmtvVXF6cHRxbnJqNV9fWUpvUGNaMVp1ci1taXMzZkdkWFVjazFQbkFJUmZsNmdIR3FjTTdSSmw2cVpwNzFxdDlHd0Q0bkNzWi0zbzNHbWR3UW9tOFdrRkdVaG5vRlY3NXJlNFNqSGZYWEFDXzRLQ3NXdjB2bDhUR1lwUEtTNWdFNDRBQXZlM3FSbU5kOVdvT194dzhCdVZKcHctY2lNeDdCUWFBQlg1NGZqbFpfdXR3RXRQdlZrQ1FyNzhzRERFWFlXNTFPVXUzS1o5QkI2Q3VpY3VySlRTbWtNU01vTGV4Rmw1LVhDYVAwQkE3UzVFaUp1SnhFR1QtS0JBYnV3M1NaSG1naWpXbVVmMVRncUxEcUQtZFVQbEp6NHNWUF9PQjlUV1BRU1B6eF9kenVpYzJXcDRPNUdRX1hGT2ZwM2U3QWNJRjNoZzduRHc4LVh2eW5pcTFiUVc2UVA3RHcyUUlCbFl1Tmd3TldzQ1p2Zmd0M0RoVkEtWlZIYUJNaVNHNTNQa2M1cFN0WEZpSlVza0ZqY01Kc3JlRlRRZTMyR0MtYzFjOFVwSkJlM2pWQmw5N1k0aHRzV1RVdzNYRFdBWmRkM3BZdWd5WEh1b0w2VzRfZVlnajFEai13ZzRDdFhOYzV0TWpfRXUya25acUd1dlVnUGtJR2xlU1UycWF2WmtMMHBDZkp3VDYwNXNxOGNtVVk3djRxZWYzRDdxZjJHSFJ2SFUzTTJzQ3NWYTdTU0hxVzBSbzRtQ3hXZ3hhajRad0hrcDg4OVZ1OWRTQUQ2WnExU3dQZ2hqYUlvaWFQOUhHWWEtdVNfZWRDQmxhOXlWVGE2emNFVk9JSzRidG05OEQ3REV5d1ZzYllIeEROalJDb0NHY0tWdGdpOTd4cVVpTEtJWjcySzN4SXNpS2JIQWlUd3hodTQ3WTVMRURFdk10UWRXT2lqZV9TTHlWdE9pdWhncXcxV2R2bncxejlaN2NfSXlLS1dQQV91S19salI4TjRVV0NPeG9iNlY2S2xJVVNpNUFIakVwemhRMmJVQWxlQUFsUHhhOHRtTlpmV1hCTUtHT3lRVUlLcm8xMWFsSGZleC11M1lzcUhHd1JVaWxGQ21HQTFDRHhFLS1nRUkzeG9fZC0ydG93Q2NhRGZheW1VV3MtRlR4RHo0UGRBUkRNS2duMFZrZnVBd29fSVJWSndTVklCdTlaR3ktc251d01BcVVUWVJfclNMTFJYUkJzbno4eDFWRmp0M1daZGVlVzBDdW5FalNvUUxiYVFKc0ZNNVJ3MWVuTXFLUFBXQzNPWEoyQkVRRUQ1QnZkaGFZdVhRZERoTU1DOWE0aXZTSlJrNC1acDdnSVhqbUVBeFBudFVlTENyeFhUU2xoa211bnlDOFZzb3c4M0ZwcGJla0NyZVBKeVhuajRMM0h3cHpHbWh1ekVld3pvaXVsb0FRSk9VdHNKcU1GTmpEX2gwZlRRbHcwOURZRWo0ZmJ6NVhGX3dCTlgzNFh4bHNmLWdsVW13XzBSNWxodG1FZW95ZnFYRWM4OWhjbHktUi02RHg2QnoxQTJQRVNwbWluQV9EcWI2Q1BoOGhCNFh5dWFOOHI1eVRCNnUwY3JDMDYzcFpxcHQtTVhFRFluYzh4U2V2VTVWaW9XMWNud2NDTzh4eWtwNXlSZldUU05QcUdWbGFyV3pHZ2U1OFpkcUNOVW5aa29rNHFpenN0bDNWZmR5M2lGTmh2RFowNmFzYVJZNGRzRUVULWRJTC11RmE5UXRVbGZUekxWd0VYUzFpZlRsN0ZaOWV3clRfN2RxTXBkUk9LUGp2SmFKZkM3am1OZ0hFQzJjTUhPc0xOVHhhSzJIaW1ZaFN3czNUYmFCY1F6SVhEQTVPZWE4WU5TdnBMbGdPS2pmNkdNOVZyNGN6SnNtWFd2M3V6WkZLMnZCVm1sYWRBRTRrc3cwLXBfREtTTWJxRmZTaWxGN2tac28zOWEtQjdYaFVZbWlFS2h1MDZkS3AyXzVfbmtGMmNKNXVIalFMZWZFdmlNOG9jRVFsVzBwSkdNN210a0REdEhod3g0c0JkZDF3Z0g0OWxmNy01VlpuUW1jdzIwSm5fMW5rM2NuTTB0M1hRYTZ6V0ZoWHBEd1JnbkNWVThubXBlVTJrWUd5a1pkdXhhZFV5VlBYaUk1RG04SXVhNEE3eHM4bW1lMWFTRURvR0JlZFd4SzFvaVRhWWJoOEVISTRTcGNqWEJQd21FV3Ewb2taOE5iSXJHd2UwX2NqYVd1Z215T282Z09MMm1FT256M2RPSm92LU8tTjdvRldocld5LXNvVEVxV2tXSEF5TlVETUNIY2gwLTZqUkJ1cVZTaC1wXzNvMi0wbk5yaGFLamVoX3dwNkdJOFJlOVpWZ0g4VEhHMHg5bmpyYWNrdG9ZbHQzbFdWbkRNaGROcWJhWlZFQTBvLWhabXVPdjVDVUNlT2U3R0pROTNFZXF4MUVmc3lMTjBuV21iblhlMU9rUm9mUFlIY0dfV2Y5a1N2Mi1qWTYzc1FOUE9VXzhTUWR4bHFhT0RjeTZDcVJkY29WQ3pXdmFlcUdWaVZaOTdXaEtQNzVEVW0zSThxdU1EVFZSdldiLVBEVFkyUWhQV29aZ0IzYnRTVTlpT0FFMHpMNTV5RmdMMEc1S0RtVE82N2p1T2h0Wm1HMHNVdDRXV1VHd1pLZTB1UTFkX1JDd3pjQmxQamNSOEdTVElSN2NLOE5xbFhrallnX0FwWWFoT1dIS3AwUnRncGNyYzhPRDltNlNfdkVid3lWZXdxdzlCOFd3ZkNLaExpejFlY3I0Q1E4SkxqMlZVR0gyT3lzRGF6SEU3UGQtWXRSV1pBMnBSNWd6SzhXTEVqaE5NbDhOWDFCVmtFamVQZG0yemgtZVdGN1NkeWRoSm9sbm5kd1pDS29abFJNbnpKMEx4bTFUaUtTb1JPS05IQ0dUdWc2SU9YRFhiNVhXY2RaTjdPNFdpQXVMVGtQUTI4c0hVc2JPUzMyMXBCdzhlaTZSeGtQUEViNmxyaVNMY0M5bUdpMUVOR1ZJRzdRd01kRUFVbnpBWWIxc2MxQlN3RzlZUWhVX0lYNjUzWVJiSTYydFBoZjVuaWw4cVBMZ1dXUjA2OGUyOWNnNzdHZEVKNWlFZ0M4TnZDNG9VaVZzX1M4b0V1WXNBX3BIZGs0blRJemMxSjZhazFNMlE4bTJlak1VMjZ5OC0taEhYVnZiX093X3BfaFpGOGY4NVQwVE9kaWMxUHYtSnBGUEZVOFFNSW5lcjNITl9nQnNXNlItRnczRUQ3ZmVYcV9xZm9ZcmZseFNkWlhjRkNIQXg1Rmt6Q0FFM2J5MkRrMXh2UXJseVRVU002R0lTZDdUQXdNUWpJenF1Vzl0d2x4cG9KdF9TaTFzdmotdW1xM04yeUxBYmExUGRWVXlVNjZTWHJlczVHRDJoemI5OTM0TXhhWlg3VG5TNi0wTlZoUFZsWkpkVUZhLU1BNlJ3UGVpd29lUzdtd2FCTzFpaXRObU43TzM4UHdzSVM4aTRGcm9rLUFPREM4aVdJNTNUaGNBaGNSU2JJZk9UNmw2Q3dncWNTU1I3VmttNGw0NWNlSVRKY2psU3pVUy1Nb01SSUlFbEkweWVxU3J0VktnLWhldHlCN3VIWVRsLWIyVWlhUWFXY0EzVURHMWpFV0lCTU5henV3d1Vxb1drZEwxOVVyUUdoUHY1OThvaFZPLVZHdnhraE8wZHM4TnNXSnhZaGVMRWkySEg4SmxiZml5Tnpuc0p6STdGSkpWSS00NmEwbEdKajh0THpNb3lXaW5jMS1ldnZEOUU3VWxNTnpnQmRsQm1kZmhHN3E3T2VESFh5OEFQVkl5RFItdHhhUjdRaERGaUR6bjVuX3QzNXhBTnMzTzZ3dnJuRDlxd2VnQVZacmtobXJFNkNXTjI5ZjZUaFFyMUlrVEtnT0o3TWZQRkJBMl9YcjhlajNoNl9HUGw5Vy14SDQ2Q3REWHY5bjBfREdHRkVNM3B2OWpJY3p1Y2NmNExPTDVUbjBnTG9IQjdFRF9zRmNmM1lOV0VXOGtqd3k0Z1FZMFJUTXVwMUc5U2tWTVFiV2pTZ0hRUTZuRFhvS2xkd1A1TENrTUU5VHlWaG9jelktUTZ2QzFjcDYyRktIa0F0TlhwQ1U2LWtXYXY0YzAxcGdiT0tyTUZrSlpTU3JOYjFhT1VUSWNtMmVBWVozSUVZdFhUU2JfNDBLVllDcGx6QmVGVDlTaVlHTkUybU1kWlJHVWJselhGS1hXdS1GT3dkYlpGRXpkaVhkOXZKSXpsdWQxNlVySThrVmMwd2gtS044aXplenpwbmJNbzY2S0ZlbTg3c1NMdFZNaTNxcTZCMVQyX2t4S3pqbGppSndORHVKMFRVbnJtZk1VdXh5R1lDQUk5M3NKdHNfU29uLTcyYXBnZXFpUl9jUnNXS2drc1dfbmljaEZzckZIVDY5cmp2TXNySlR1MVZ1ZG5EMWFVdW96SkxIYzVoVDgxQ2x2UzJEVDJFbDE5V2RZX2JHVlhtbG5VOFllakV3MDE2R05rY21nQkw4TFF0aEU5cVpmMWh0akRoVGVPRHZMeWZYX2Ruek0wQUtDTVFTcnNwTVhHWEptbkFfbDRiRUZ5VG04YTZROElGNEpnek5WdWNING12dlJFUzIwakdWMVdjX29Xckh1U2x6ZW5SZVdzM2FqS2c0NjZfYkFZSlBmT0tJMGZnUWQ0NTY3a3FZZ3NGVElvY0pLRmNZcjNDd21iMWxSZE5WNDluZzUwNlFHMjF5TDJzb3A0ajJaREhZOFZRVVlpOER4STdlb0pOVGo1OHptcWxTOXZoVURuS2FDU3BTbmZSc28yTjBQM0hWN0FTaTJVbE81cVFUdUJYYVZINHQzR0R1RDRJbmxmRmxEclVQc2dIMkg3VzFvS3kwTTFrUFIzejk1aWVMcEJOMmhPU3NGdTJ0SXhwVnhBaGpBMzhHUVZCV1R0cE5pejNmLXl2TUxSRVl1V2FUNzJ6TGVqWWw5Ml96U25kOWQ1SUVyX2d2ZGc2VENOMWp4ZmpjblNfNG13ZUdFWUdJUzZrZkx2d3hTdHM3ZkxoQllCQ3RLZWpnY3Q0UW5aTkowTzBMdnljQzZPM19kOW5vNVl5Z3p2MkNRUFpDdDNHd0dVVk45aFkyT2hMNjNoSlgydXBBQWVDMXBJWEtOT29mUHpPaEZTZ1lFT2pDOG53dmEzVU5pV3M3dHpXUnpRc0w4aXQxQ0Z3WXFacTVlS0dwREJZd1B0Wjg4X3owbjBpeVlhN1dCZkdRTmcwampneV9GMGxmWDQtQzgtTW90UXJDZ2lBWXdRNVptcGJyTW1zeWxTb012TjJwdUtMR25FOXZJZHVpSkZiZ3RxUk5oV053UW0zMnZ0eGs2V0R3QWFUTzBQVEN4R2VCZUxnT3ktVVNPOFlVMzRDSHdFbzl6NGJ3LUltOElzRHM0OGEtQ2M4VnN0eTdQRzJQT3diX3ByX1VqZmd5bGZBQi13NURMYVQ0YXNnZUl2WlU2VkZPNDdidjk2YUNZbndFbGVXVXRlandYUnVWRGN0U0hSblIyMFVhcXFfMWlURDY3VWRINGc0NjBaTDFYZDBvV1hKWFFGUFBTZkNwZTMwaWQxeG1GeDRGZTJITFNhOVk1SVhlUFVKRFhhMlFycmw4N0hvcVdtbGFSS0pHbURJZHYwVkUzSWxiWVJjTDNLOE1Lb1R4YWxWVERVU2dRUF9Ja2F0c1k3ei00Z09zem9odElsSExYZlpMX0RNWjluTC1wUlJvYmMyUVBmRkJnSHc0Rk84RmppbGZKVFhFLVJFZW96QnNPQ184cDdyejV4cXdaNnRsTTM3NjhvdTI0NkZLcXpxTGpFR3Y0YzhnNEJTSndtRVhpS2VWRElSRk9hY3hXNTY4REltYTg4TmNjVkxlb3hObmE1a1R2c21reVZiV2YyNU9kbjhBWmotNFA1bEpOclhUbEpnVVNla0RxNGFoa3JmRk0xMHF6RVJxWWtZcWl0X3gzWjNWVVFHUnJJQmhiSkpxNVNfWm9zcDNfMXhYZ2p2RTh6VE5lMnJJOWZQdlc5NGFfc2g5bDlMSHBaZW1UNVFJLU5HMC1ZRzFSZ3JIOE9VNy1IelVmRlhmMV9iQ1dKNXBUM0ZZTHdNVGVQOE1CaVFtSWthcnVzNXRJTHhNWFJPVzNRNDlVQ0RjSEo4c010bVI1WTJTWnhScTl6S005anRranZ0MHVkbnhLczFvZS1hQnNUTzNnNU51ejBFU1FSYkprVWlSR2hXTEszOGpGOWMzcFRUZWRqa1haWGlpVDFEbGNxcVFuRzdkZTN6TThadDRSTkRqRGNPanZCclotNUNBSDdmMWExbU56X2wwRjdEdFgtMElXRXlYb0FFMFUxdGlwTGVielhOZ2Nmc2FQNzNiNDBRYUFhWGkwRnlhdFU0TlZuRERuR2JyLWMwdE1fZWUtdVVhR0tYR0tpMXliMVhhM25mWDA2YVdpTm9JRWoxWjdaYmFZam9uYlJRVjVhbVdRWnJkMGFjTzBlTlQ5Vld2MlFkT1JNdl9xdDF0ZUVyZUpaaXRLTFYtYjhJd1BQT01fN1ZlOVhQVUlIQUpyenF6VjAxTTM4eFF5TGJ3UmMwMlBBTzhOai1zeEJWRW1KWHVvTjlhTWJGTXp2cDRBbDR5YVhBRWluZGtvU0xoR3QtZFhvVWxYTmVlM1Uzb0NMQ0RoN0ZNaE13TnJKVl9sZGcyM1JVZmdhRW42TWR5OUc0YmpfTjloWnQ5dUFjdlhIUlV2NTFjcWtKd3NJZDdHdWtreWxBV3JzOWpCc0VLRHM5N1BjNG1sQ0VKcmlnRG52ZjhKMlhlaTJibUIxejBjYTZPNFQ2dURmNTVSZk05aUN5dk1SRDBTMDdGanBYdkFMM1gzSkRDYkYxN1FHS0JJSGtWQmsxbHUzNmhJaTdxVFo3cXFyR1RxNjhrbVZGbW5GY2ptREhmdHdKRTFaUmhrOGhadkVRTFhqV0YxdTAzckthS3pmeVFTeDAwQm16ZDhSVDF1UV93NWdCYVg4RlAzZGdyc01hVGpwWjdjOWxqMkxhTlBNNWhhNXdBYzhiU2V3R3JjNEJyeXhxNW1SNTJ2cFpYNVZfRFg4c1g1QzhxQ0pEbnJya3RqRmduVG1RTjBaODdsZDB5ajhBUmRhcnBJMGlTYW1Ld3AwTlRkTm9zaHoxc21WSDBlOTE0WDY4OUNfdi1LUzJTZmFOLVhrVUJUc2dCblF5S1BQRXFYTGxOcDVzcExnY0hIWEVnR3VldkpoNUc1UWpfWmpTbFk5czlYUlRjZFY1aXRyS2RNOEQ1SFBsNXBKeXpuTk9CaGhPbnVxT3NXUXFEbjhWekdGVE1hZTNLNVNxNFRndXhwUmtva0E0ZnNmRFRqd21NXzBUNml1dW42ZTdFTGJLa0ZJZXNoWkxjZjUwcFBaRW9obVZOcU1kbHptMFQ3WGNsSVhzRnNNNnpod3diRUhydl94dUpXaG1zbmZIWjk4bGVCZDZnWHdpdGtwVGx4ZlNrWEp0M0d3S0xoZmNucXBCQjE2V0JYbU9WM2RreXF2RGJKdzRJNlJ4bmZEakNKTS1GYW16dVpFSlRfM0pQWlEtMzlMUjE0Vnk1Q3JMZnB2aFQ5V2d2QTNjTjBhOFBfVnB3eURWQmkwUTMzSWJIaElNQWUtMGhydUFnSENNU0s5ODhjakpMS1FkM1NQRmdldjlRVk8zc2NVa3N3RzJXcmk4dVUwek9jLWJuSlhXSG5yRFVpME5PQ3lxUnB5LU4tamtneEtRMWw2dVVBeE96ZUlhSUx3b28yMElVX2J0RGRBUDZ4T1N6amdIdGQzd0dxOF9xMTQwdk1NN2NDOTJtSXpaUnpkU1dUSmFBSGJ2c1hSSHF4UU9hTV9KLVg0dC1LeWF6MktnajhoRVYtamdnVGxOSF9LbDgtOE1yd2RMZzhuSElMYy04RFBRVEluWW9OUnZjMUEyaFBPZG5fYVVsRHRIYWUxU280VUdpSGtNM2dMbHRFWWJoaTdIOGhmbkp1LWM1VUFGQzRodFYxWGlwdDRHdjFFOWllbWpqMGtvX01vZ0lCd1MyZ2xXcXZrbXY2QmNobUJjeXo0TloxT0JOY1ptN291OS1qRWZ3UWNWWGVlUVk3eFN4ZG9NZ1d0cmxILXRET2Z6UExvZFZmUWphQ3FEZDBLWkdIUlZyMWl5RWVZc1hqY0FmZmZpWjRibk1lSzlUblpwYlZtZktUX2NPcW5iTVdPYVJHcWZKRWJubVJCZHJYWHBRWi15RklkYjhzRVZsaS1yMHdWRHlhNEJVbUkxaUFsZ2JCZHMzQzJmYlN5NXVUMlNDenplamM5N0hYM1ZHSHRyMUxseXJVRFBkbHc2S2JZMi1DQzRHbzAxUE9xV0prYTQ0V19rMDJ1U1hkdWVzQlVEajF2YV9jRXpVR2c0WXFxNmtUMXd5MVJqT3cwa2hpMi0yNjhuVVVseFdNNHhLUVN1dEJROWdVcUFobzJvLV8tUjJnUzl6Q2UwNzI2S0FBYXI2MmNFSkpXRE1FaU1HaHp0QVpqTnhtN29PWGhWSG05MWNhOUI4dmVLcVYzWU9ZTTlEN3BnSEdiLTRSMFZKemY0NlJXRVJLWjJlc1lpSHBxRWpQaGdJc0FCTndUdFBPWTg2QmVTYzV4aDR6aW1UT2FCSnZFT24wZ2RQSFhvbHgxbVBzTnhVMXpoYkVhckdzdFdFS1VKaXhPSlhKeElEdVV2b2NaXzgtWjFaZUJTamxxWDVDNHBrWXVnQmR6ZlRWZ2RaU0dPOExLZ2FTVW14N3dlVVJSUmIxb2F0QnpuaEtvWnZwajNZd2JENjBjcHlDZEZ1c1pOUjFGT0c2WjFTdUoxNldZZUNHQzJpSC10Q0NpaTVQTy1Rd0JSZ2d1eHdKNW9fYVZnYlBTMDc3cEh3Y0UyQm56aWhDZFNZNGVQSzdzcHBuNXdiREozV1FXekJ5NmlJUzUtaDAtMWcwelJXaTdvek1GX1FjNG9WUzNqXzE0WVlvZmM2SXRDd0g4d2lpUHg2cmtlQnNKdF8zaGwtR3RJclhyOVlLenNWQWx3S1VfR0w5N0hhNGRrdlZVWnpOWE9rMEVTREZLeC1qLWZKYjQ3NEpBRGxqSkNoZ3pURUd5N2cxMUpzZkF1bjJZd3VJS01GMUhfenVVTEJ1N3liV3R6LVZvWGp6bUoyeF82VWU4UUF4eFBsLVY4ZzF6YVEtVWtDMktvaF9GTzhUTmsyY3FyWWNkaUR2Y0djaFdxcG1SRlpwcU5QczhWZUJ4SktiWUE2ODd2c3NGdzRpTG55ZGJBN0FzTnI0MWhzUTRGMjUwV0xydC1Ta2tOa2l5R2p3WDF1NEJVbld1V0MwVUU5VzFSU1N2dFdQREpaR19HdURYa05LRGdiVmZRTUFhUWV1djRLX0xxZ25vUHJLRW43TGR6QXVPY0NOdWpLclM2cWt5ZmFVLW1TX0w5a3piOHRHOVg0MzZaeGFQYWEzTHI0UFdub1R6OFlvblVYbHhhSzV6dlZBOXlWZ01Yc1hMVEhBaUdtZEdxTkpjY05LZm90Q2ljeWtUeFlEX2ZDWjlFckUtd0FqMzl6SzV5TDE4ZF9wUk5jN3lQTHlOUVRiQ1J3dE5IdnFjWndULUpDUXU1bndKSnFhbGFEWGktamtqYjQ2NHZVWWxadXlIZzA3WHVmMHNsU0d5aWxZaTh0X0t1RER6cXh0UGZWVWlNUmU2SnVIam00aE9EQU1mS1B1WUVEY0JLTnZybUdIaE15SldVeENjVi1IWDdaamJZSDNESDBEcnpDUVJLR1BfR255bi0yU3dqSmhMVjkzcDJ1aEpHUGwtc1JDUmdXYzFIeTZWelVXYW5iN3JUZ0pKTDRsQzZlVzVMOEpkQU5kVnlRX2tIVlp1OUVCb0o2UE1lMlVpczNISWxobEFKNXV3azAwV3ByWFBKclpUa0N1UkkwQlV2cVlPek5WQVZiVjNDbHp2djlpZ1JReUh6UXpfazNHTVZhcW9qVU01M0pwUVpBMlZQMWdaal9VUE1SNjB6VjZXdVpGMVFCeEJHVFp6bnoxNk5kenRMSW9pYU95c1NFZWRhZ2VIcGgxb184ZUVYTXN1Q19paVY4dElFbWFPbi1jSmZDTXZYVVVDOXJqQ2Y5T3ZQYTdtbWxUbktPdzZTRmQ3TFBYSk5DSVVmZ1NYLWZrckNSbF91XzFNbTRDNy1Wc3gyTW5yNE1Oa0RIN0hackZxUVlCMkdvNDZIbERlWGxpZDNTV0xuaTNkcmZKb1NDNEVYd083Zl9hWFBMb3VQbkNJZ2k3OHQ4emFYQ0NSMXhSdndWa1BxRUZERVNGdjN0VkpPVVA0UGdleTZFTzFMcUpKQnhQNHo0Y0lNQXlpVUdqVkZOT3RQWWdib0REZF9VSFZST3BPNU1yZ2VaUFY1ZHpNSWFvTnR6bERYVF9UQ01yaGdHTndua2V5TTJqWTRXNktGLW5ERzRXaGhPRHJERklMT2hMSWxGdlpUTDBkNmFpc3BLa1hOQ19WUHduNWxmRWhQNjJjSFFRZC1GcnJ6U0F5YTNUSmFPV0hOaHNxdlJqUzMwVlNPcmg2R2RyMWZfSzBWajdJN3FlX0sybHFQUzJnM3hSUlZpYUR2N1U4bGZwLWVIeHpxUkxrT1RxaW9OVFJ3Q1hKdnZ5NHlxZUQ2QzNuRE9wWjRSQ20yQjN4U0h5MWFGX2lVcE5PQ3h3cm5nM3ZmcjVzY19wQnBjU0JkYmhZVmxrb0tfaElqcU1TUDE2aVNDY1c4QjNqTEtRUTJsRzlNamRBLS1QWjZudkp2Rl9zeFFQOWpPU2ROU0VodmJ3bFJiYWlpOVlFTkdxRlBxYll1OXc1Sms3MmJLeEtDbDJDcEI1NEUzLUhtdkpiZzd5ZHByRzI4Z0xoeEdTVTQwR3B6VFdWTXhHWWdjNzBnTXUzMW1Nb2xHemt1NGMycTh5MkJ0bzNGVXYwcFE3R0VHWUNVdHNPdG01R2dnY2pJdy1VdkZCMU5HTG0tX09zX2djejhhTE01aVVrWXM5elJyX0QtMDNEUzlKS1VCUy1mMzA3SnNSU0VYeDlFUzdyVTk3a09wcUxBaWhESW9RbjhON1pBVnpLWUstZHBwZVlVWkFUME02ZHZLU2Z4N1hSdEdGMEoyOXFzOW4tc21zLXUzbmhndmNiY1FUNUdObU94YjdaemFrZDMxNVlRV19tck5iaUNlSXlwaTc5dlVnY3h4dFVsdXFQX1NrckFCb3JIRlR2Y190SldmbU9nZzhnVWc2a0d4N1lrQ0VtM2FYRFdCOS1VVVpLeWN5aGZkNXhFeERSUWdaMHJHdlVVdjV5LU1JTkU3Y2FQYnVJTm5XaURTVW5NOTJWTC1YVUdlYVdtTkQxMS1rZXBDd1VOb1FOQzFXakRDSE5HWWZFVFBmWFZneXprTHlXNV9LUVZhQ09fcGFqbmhqQmtBVmNIdEZCbEVoYWRGMzhuXzRmck45bTI4WW8tT1B3enlTOEJQVGNoWDBsRXFHRy13bk85NDJ6ZEJ0VzAybFFleDFSNE5rS096NzFsYWV2MmhERTJPdjNyX3JlM1gwak05cjlBRWVsQnhqbFphWDkyY1o2Z0FSZVUxUHYzeDRMMGw3OGZPYkY1MzV1Zzh5Q0VHUmgyZHViZFJpZzlHb1d2VlV1OWZXcmdzTXFGWV9yWGF3YlpLNzBMdWtVSnh0NktSQWNvZ3drdDVybTlMM0ttcTdUUjc2XzU0WjVrVnRmZkg5bU8wQWxqVnlEZGptMlpKc3RGTGxnRnJqbmFaWjZOWGM2NjV5QnBvOGd2bWE5QVBsRkkxRFp2OHZxU09HVXo2MUk2Q3hHcE4xLUxENXA5cmFrVmpCbnJlTDJVWVVXdkVBRmM4RG0xeFk5TERhbk5RRlhmb25IczlieU93VXZUREZXN1VYZllCSXYxSWdfM29Rb2lKNTZDeVp4VFRvQldQOWJVLU5QRnkyOHRTTWZyNXdFNmkySjNmeml3VzVQLVBnS3lDUTZtc2pqZEJjVGFBMGt0S2ZEUTZudHczc1lOWWhncWR6bnBxVDhNeTlmYWpET3BCVFpyWk5sZ2hWLW13dlpwUXVJa0VKV0s1TklRU3JoQ1BFZjRrekZaa1BwdmVYd1J5emJvMnVrNGhVbVViS1YxZVU3MENPZU12QkV0QWJidjRIM0x0ZFNLZ3pjREtfREVZN3g0ZnBnZEFhNUd3NnMwcDBwUXJqdUVvVEFVbVZiTFFkdW5WcmNDNXNMUnFRSUE2RjNXSXpHRjNucGx3VExiR0lhRzR0MFd2Sllrc3pvY05SSXoxOHVIQkdUdWJGMkVMXzdmcTJTQjBreVV6dnJtcmN3R2VWSExfUDJaX1NlWklSWVEyVWI4d0NNbmxNM3kwYS1odjNnR29DbS1ZcXNPZ2tLeG9TS2FkcjZjYlJvVkVpcXdSQ3lPYjNfTlZwSjA3cjhYT0lYQ2tvZjFlOUNQa0RRbUZJYWplYldvMlJxNW85bFpFbWNuRTIzM2ZUVExfU1lwS09xbmZoSzh0SlFKUXE1VkFBbUNQbXg0Q3dFTnRRTHliYlFEYWdCRXdMOEx5TjZfd0RvenBLOUkwU1dJcWJLWWpOVEpHdVRZYzZFTWlCOU5mNS01OTVXejJURWdhV2s2VVY3cE5pczR6amtFMjd3b1BBM3o4djRSV3Zna2hzX1BzZjlYSVlLMEJtYVl3R0YzV1BxQnI4VXU4RTV1NlJ4d2V0RUREMUJPd1lTVnMyV1EzSnRrdEE5OXpuRDlLUUxyalMzRWFUZ2s4U095c0Ztb2oyWjBzWUNWSVZTajZnczdQQXR1eWFFcm8taHA2bzRDckxNM0hOZnl0X2Rkajc3c0pGNkREZUU5NUd2eU1NSU9SN1J2c2hMbUZHdml4RzR4cHdLNlliZ09wNGpCcUdKVWZRWkFmYUZqRGlGTEpGVjJ1UzJDRVFuNmlOVnV5RjIwZmdpb1VoRS1Da3NnTEtkN1A5dV9tM2h1a0hqbGc3ZDc4QmYwcno2Nl9FVTFKcm1jcUVmOXhSa3NmODlLaTcyVE0zdkdsN083TjR5NUx4SWxDOHcwZkRtc2ttb3hIUldWV2NpamJFNWhLVXBmU3lhdFNMWkhsd1k2M1kxQ3dRSFo2WkZNMllYS2dqWG9VTm1ZdXZhWFhlVVM5b2NtQUhtNy1ubl9LaVdrVWxNb0VIRGhYTVVlSVJUd2N3RHVqbUh4ZHhycGpTMXRXRnJDNGlYa1ZDX2FuSHFOZ1M2MGhQa2xsZ0REb2hucHV6UTBpbTgzVkVCWmZJUGlieXNVZVV3eWpPaU1nNWZEVXAyZS1lcUNRbzdYanc4aDdySmR1UW9lall6UTcwZURnMTN6NmN3SzVKX3JqUkg2YVpvTGJmYjhyWXpLQlo4RWZUY1JTMWhmaVpYZHpwQkFoT2E0c2xnYkV2RXZ5YnlRWmtuc3Q3b01lT2tnd1NQS0k2MjBHeVZoNm11cVRLdy01NFlrZkxrSWVVSlpCdWdnR2U2VkxBc0ZyWnZqcUtfVWFEbldqNnhWakNrMjlUT2s2Ym81MlFvNG92TWNQaF9Td1hQckd5d1k2QklYZHhJLThBMEkxd2VTSm5aM0FlU3pEVXFjRzAwdXlIQ1AzWjF1bVJudFM5UTQ3VmFXZ0dhZDFxYlcwWTlvS2kxdDZDSzlFblZJWVFBNDZyWU5QX3pjRFhKbXVlc3FTRHpNa0FGTlg4MzdKdkpKYnhvU1dnSHlNRWlheTU1ODBYcXVSNk1faG53N0Q0MzA0UXFhSWU1aFNCVW96SzhXNVNBbDlya3lZQmE2ZlVMd0oyYnVoX184b3VFV3pTMnRaczRwMFZQNDV6azRzTlpIRjFTLWFRczE2bktROS1ib1lKRVZsVVE2ZDRPTzBaV1ZXOWlkRXVHOXdYNG4zdnQ0b3Zwa2FVN29wS2FzUThTd0ptX293RFQ1TE1NYk1xX1k3UmtSMmZfX3p0U0wxT0VoRF95dElERmlod0RzVTdpVV96a2JMY3VVNnJ3RVFDaHFabktWdHJUaTFUOFRyZFhmWlFvMTdSY21VSno5eFpZTktkM1BCWC00N1MzQ3Jwb3BlSWRxQ0N0dGxQVDBsQVVPS2E3eENISEJzT0tBYXBMX3I3MlFUdFlnVFZKVnNwQjF2RXBlVFQwT3FfVWt6X3hQSXFiVVdVeTQ0eDZuYzJpWkw5elhtMnF3bGxTTWJ0aEJ6c2MyS2IxNHBoMG1QdG91QnRKVVNtdlNna1NzUW13UU8wOWNMeVN6RTZyTWljRmlJVGlvZzZVcG9MSC15dVozYlJadVNJZm9lUjNqb0poNFJTTU5DQVIwRy00b2djb1E2a2hNZnZ1Q0FNd21vdWVxcUMyNlNGUWE5S1N4Tzh5V3J0VG4yZUhRczZKZjFFZW1fbGx1a3lIRjZlcUVzUlRnc3pyRTEtZkVqRWxmTGY2Q3E5UWUxQnRlOENJaHJKZUtBcVlidVRFTzhlVXl6ZnFtVUFvcDI4UmlRekNfekdEdDlYRllRUDhsY2llVWl6UGRzR3hoYmNrR3BZUXdsY05yNk9RYkg2dkg5US1JaXoxYmdVZk1YUFRRQzE5Ty1ZUXk0R1Q1MUVNU1VpbEtEU0w1Mkl1WkJHWFJXZ0lWaTBYcUFxeGlIWW5EdlVUVTBtNzRfQ3hyYjR1OHB2QlMzVHFPMzJsUkdxRkt1UzFVbGJ3VHF3S1h6TGV6UG1DVjhHOFRoc2xrQkxXNndNeFpscnlsQzZ0UFRkX05BN2FnTS1JZGpvLU96RlZLaE1mLVozVjQzbnNxQmxXSEU4dEVqa3VaWjZMSWNrcGtERTVfUU9EMnJoNVhodnVkdndZbmxmUVJzcHd1NFpUeHpwMzNTNGFQUmZIS1RHamJWYTRvcF83cTFqZlcyaFlTNjU2VFZscTRvblJsdmpiTG9UdUhzMl9oSGdSS1VDbkhDVWtZSWNocUZpdFpmSnBhU3NPSW1YNElYU3lBVXVQMi1VRWFvTVBBNlI3aFhleGh2WVJLRE5ZSW42ZHF3dmdTaUtEZnF1QW0tdzBsVzhFWXZlMEYySTZzOTV6eVhSN3BQUy03ZnIyWGRnWGc5NHdZamszU09DbjlaMVk4LTRVeXhOMnVJOVgyRXZ0bjAzcFF0X3o1VlAtSWVrOUNvbjk5c2tMM2xHOHFIWW1UMHM1cGc4VEZMcnhacFh1Uk8tcnFQT3haWTVSaEl3ZURyT294VnJ6aVFTM09YRWc1bC15dTZ0Z09Kbi1QbnVoVVljZlo4QS1vZDZWRXlOQW1rOU9zbF9EbXhoeVJ4RWx2aV9KS3liRXd0RTZ1T2tkZXJQNWRral9FMnFtWTVvQW55cmxlaXVpNDVNS3AwcE9FY1AwbmdEZ1lWTVdJcVlNMnRZZG0xeXVZbm1NLVk0ZUlsNFlvODREd0o5SkdKWE1yTDRvZDROdmlPQzdLazRfS2pWcXBweTMzYVcyY2RrYV9SVmVacnkxQ3FDZ1lkaTIzNUNtbm43cXR0RWVRZmhMUzRGYWdHMHo5czdlZ2RtbXVFb2lxRjdBd3ZRNU1Sdm5nS212bnAzWWJuQURMODRic0dhYkNfbF9sUEt2NW90S0NwZzBsaUI5NVZqRWRma29Yd28yR3dLV1pXeVV5MzNIeW1renZGWG1IQ1d6ZjI3ek1Tb1VDT0xoYzZaSVB3MTRBaG5lQ1Fzb2RaOC1yclFWcjBkWHEwWkoycjVYUEJESkNuU3pmTFdSMHpRX2pqczFsSG5obklLb2pyMXdhWE1ZbEI0ZDNmWHM4LU0wa2NPaUs5eDh5TXl4U2h6VllFRzZqMHA5UjFqQy12V2tBRWpDcWU1SkktQUNlaF9SSFBTWjIyMkJqWmdONDRVSG9DdjFRZ3BBbDJWRUZfenNBSTFqZXhqSDNGdk1SNm1DaEw2MFhXTWRfNGhDUmpCX19NdVNtTzZHeVdsSVdERVFrRFpmX01sdUxGSkpPX1B2UjdOUWhZYlppMVQtRUg0UW9OSEJsN1hHa3dibi1Lb3lEa3Qwc00xQXdZZFBIbHlzMWRqR1RIY01XdVlHNURVb1pXWGVYMWhvdVZuZ0ltS0tKYi1waXhOdmd6QWp5anRTSS15dzZHNjNMWmFodGtYNUhFWXN6NWdlSG1XUnNBMDlsaDUwVDllUXdoNmNydmNuSHJRaHZPZTdWSW1VeklNUG01NWYzWWZfSlVzZXIzaGtkTGYzRmlvampBVVhNOHlVTVZCa29GZGxUZ1JSZEpuRDNiMm9QWlZ0SXk2V1JZTElFUWNtQ19TZzBfRjFKZmJ4cGNBTkRTUVNDQUJDdnBwLURRQ1pIOGQ5TnRQeHdJOXZBU2VBX0ZRT0t3anBXaGk3bDFLejJUcnNZVFpmQ0R2dVZzRVlSSlBVSm1DT3VVYy0taUtmVldISUdtZUljSDRzSEVlcnF6d2xPLWZuRlBHLURNLWlMdElMQU80R01tN1NxcDRZVUZyTEtjd090VkVPU2hsNzE1R3puRkpDWkJWTlJIV3IyOEprSWZSaU4xT1VOZ2dXejBWX2I0SGZtcEVWVF90VFhqZ3B2VTN4MG5fNWMxazVRUDRoUFp3MFBEbWVyTFhtOVlEa0x1c0lfcElRWHJreEV6MHZSOXIxZzBVWFRBTUxoOWpYejhtTDRMX3kxSk9TX3NfbnF2dWxuclZvQlJRQllpb2JsSU1FcWFjQks5WUpXNXktTlFLNDNaM093Qks3M05jVmlONWJXTDJmNWpSY2hJNjRGWXlWN3hOUTgtN1Y4Y0xRaWdXZGVwbVlrN285cG1QbWllTGg0c1lqYnNmZVRfeU5kbnEyZGRYdFdKWGkza2poYjlrckdUV0sxQlRodzBkWlB0c1VpOEFXZVRBMmxJRUFlTl9JdXZ3VTNuSWJGQ0pxQmQxODhXaUkwNkpOeFZ1akFuVVFXelpXYWowQUducE1LZ0JBcGVULXJxV25qQjRuOGUzbGhKa2E1UmRlMEpVWHp6OGtvYWJyTm9fbkNjVDRFTE5CclQtaE94RlVyT2EzRDFtLVVlbzF2Vnp3WGd5c1Z5SXlkazRJa043RjBnX2l4enI4RlBtVnF1emZraDZLMFkxUndVbHduY2Fvam56aU53THM5Mm5RRFRfYl8xNktiRHpqcHp1dGpJUU04TVNLbHNoWlAxVWFUT3o4Tmx4QXlwU3Z1Tnh5Yi1aSElDNWtqdUduVWRGUFRaNVhzS1lZdm1rMUJoY1BzamhDOTVRRlZfOUdVcTNWaVhxZmdZNGxueGpkZVpRMmRodF9tcDFzcV9LcmtvQmQ4T0lzbzVjTnFMN0lvSmNZdmdMb3NXbzRrdXRacUR6bTJKSmhxcnJJeXBUaVItMmRFeVR5SVhYTXRJeUU4RlQxeXdtdTZDSnNwTGJ4aDlBeklRN0VnSy1zdGVfaVRreDBrbXl5V1ZMYVFWMWNrMW5CSWVRRmJ6RzAwT1NMU0VJUDhWVk5WcHkxSFdNUXY4NEJxTk5rSnIyN0hsYmlBY19iR3AzdTk5YjdlTHBaRkFUNEZsaGdGSGVKeWxpdGstWG5zVUxPdjAzeFJLSzFlTm1jOWtlaVBDMzdnSUc5WGJidUhsQTExU1I0TGx6Yl9zdFFMS1Y0cDBOSXlWc25pbFE1cnczck02UGQ2R3RMVmRvZDJSNHJwUXVzbjJxb2tiQVRJcFVMb1AxZ3ZwcEpfOWJQTEN0T1YwNHo3enBSTTFrNkxLUVVReUUxX3M2a3RZVG5wMHUxX3VfT1UxX3ZYLUdOOWJKQV9yOEZkYUVsaHR6SG5jNzJfc2RoaUxjeTI4NXNjNVJoQkV1cHN1ejFTZkpYX1B0dTI1WHRkeUpSN1pqcHNudkRQQkFfQ2JjSkxSS0dQNjF5eXV0MlA2UjNIdGk0VnpPSnVXcFotLUUxaVdFa09oajVZQVZOZ2k4X0thcU9vZlZOR0VVNEVIYnpJNl8tb0ViSzJIclMzZ3Y1VWVBaU9ob0F4aEstaWxqR3ByMjhCM0ZtOThjZmY0Ykc5TjBSdVJIZmtTUWJRTFFsVWZnM3lGN2VqYWVWaVhfdV95TUxmQmtjRTFIeEp0UnUydllYY2o2SUl4WERPRkV6Y2hRWlVMMlA5T09HNWNUNXpSUEZQbFc5VW9LMWx0ZnBDcEt5UG1aa05QcEhhZnhrNlVLM1BxZU1PbE9XbUpiTWZ1cUNxS2otenlhcnAyZ1NqTGI3T2hOTHUySWlxSWpkWW90LXZTN3FXTFJjTlZMZlF6cmxIQzZWaUJLbTFPX2VFTzJLRHBUWHlkTG5sWDcwWVRWOEhqWGJZbmZYQ2dkb2dsS2xHd2VkVTZvUEdXVEQ2RzlUeURReFRnMGoxeWoxaW8tdTY0R2dJZEFqWmE4MTFnNm1DZlBrUTRJUTZ5c2p4cDd3TjJwX0xmd0Y5Y2RlYnJvcXRaWW9vSDBjRUhZcGdJYk9hYTlTWk1RZlhoSXotS0g3T1p6ck1HT284aHRaOE5Obks1bDNyV1cyNGlkb3NHYnowSGJhcjR6d2Z0SHZNc0llVlVsdzRpWGV6a3RfN2tlU3RPVGFSWlpDczVTTFlzMzd1U1FadWp1VW1LVUl5bElhZ3pyOURSenBZcTJFeENlSGFEY25LakNEMjJhcHZNUjR1WklIU0xIN3BMYnhGNUZHUUtaOTZPREZDeUZLd3dJSlBZai1MMGpkZ2JGejFDVW9QY1FMNEVIcUxGWkt4aDVKTVFhZ29vSHVBdC14RjRoQkxRRVpCV0hpS2M0dUsyYmd3TElKZjdtMTRUMHVlVjVhSlMxeUs4bXAwY0pHT0hUbVZXTlVDVnZBWE96S0I4dG9qd0s4U1ZHS3dLR0U1WGhXbkZjWWY3bG1KUndrT3BFbXhpTUk4YkdjaHJYSGFnZDlIazhDdUxFVUlzYWxxc0J4WkJ1T0lzUG9PNjlmcFROYTRUR1MxMmkta3NEbktUYVJBcFBHWkdaRkM1Zm1ubVhkTGdEa1k5VllIN0tnbDlxNGJIelJReURYUUN5T0N0X1lSZ2gxMFg0bm1RTGZiel9ZX0dKbHBDV1NpbDQ3M0lpd01La2FseHlJWmlJZ0pKNmdZeFo1VjEtTlpfVWI4ZUdXNDFWeVhKTjdwV1dIbU9TdExrdURYeEYzTmZzcjZxWHVPcDZ1REVHVW1GVkdmZGg5OGlYRTEwclIzRFN2TWVxNEZZb2JIQnFnYkxiQlNTeTF0b2pTa1kyNkFZRWdtckduQ3RCN29DQVE4TGhkTXU1d01CVEw3Y3hQMk5yZkl5dVBZTUFoV2k0RXN2bU4tSXJfeXdrbm9uRHZLUUpjaUpsdW5uWEtKRzZqal9OYkhOZ2tmYWJuOUEwLUlLWko0VEhiTGRnR1JTa2Zkb25MOG1MYTZRak9zZk1pdVhKYkdtQWthVXJ6Z1BWdkJfVTdOM05qSlFfUVA4TDJGSFBJcXhBcUY1d3VsN2kzQjVSMEdxdzZHUjlMSERmY1ZJZHFxUGZCZEd5dUtRaWVEQkJvZGctSURwTXRWdFpialVnZnJoYVF4NkcyR3B4TWNjalNxNkpqNzJsNWprRHFZWnhIMXotZmd6TlFuOFoyZm83bmZoTE12MXZOTXRzOGM3dVlEVGVHNTc3NVpFcGRxcXdwRmdvSWlJVW1saDRzOW95VkxoX1JiYm00R1hSbmpibXdIWk4tRFlWaWJNOXhJN01fc2NiS3phSmZicnlsTGhNQjVFcmpwYXBxNVhlSW5OODFITXdmQjM1SVRVNDNIbURPZXRBT3Z5Z2lOOWNveG5tTWJuRlZGVGp1NUNxVVZwRGNxZFVjVV9Kd2U5Zzc4Zzc2aWItUnpKaG5VbzhUODU0RWZRanFXM2JwdFFjQTllemZQMjRIZkV3YnFDZzdJbDJkcmVfRDVyTVJaWjRoaGN2cUxBUW1TYXJNamZDUnBubi05M1NzaVVNM2I5a1BqYnlIMzFMaFNPNmNib1BFMHA3azZBMGktWDdTY20tM3hmMHlxcXNsUlhTVk5nRGoxYjdWS0xNbE95NlZ5TGNDTDg2SW16UFZIa2lFTEhBTm53cF82V0I3TGVYaFFUb2JKcUNGNE1zdDBuYmtCbUVhY0JRN1FpUS11ZEw0M2ZTUzd4ZXgtay1EWngzSzg0ZVpCSVFxM0pJeTJZblo2Q3JMbF80b1hJWHdlNTZhaWVCSHhEQ0pCOGNkVVVId0Y3a3BMXzZCZDRaWl9FVzhMc0tqZjJOLU9vd0k2NV9PdnZ4NW44Z1FpN2xra0lBUnhkNmNka25PMXlkTThZRmhEYWtNMXBmTEYtR2dDTzVrdkVNbzJBRWMtT0w2bDhCS3dvVm9uM3M1blRhNjdWNVplRHJJSVdDdE9hY0NTeEZzeWZYaHludUtFUFJHTy1kRE1HZUFOSF9BQ1FWUzV2UUVaV1NNRTkybDZQQ3JXbmZPRFBIMmw2TU51WUtxbjRySVpwZnd1MXdlMDh1cWJSZVFMTXQtUWZzLTNDS0RCVGJJbFAybTd4aExKdm9TUHZPQkZtc2lvWlc3MkVLM2p6dHJENE5wNFJKQ1lNSUdUeXE3eU1VaGhhaG52dXRpbGE4bFljRGRTazNYYXpkYXFfY3A2X2l1MXAtUG45cFA3WVp2MFQyaVExNDRuVnEwX191aHA4ZmRqeUxZV0VTajFFMkpnRlFEUjVtZ3FGeENTQTd0Qy1XRUFoMTR3V09iMjFnekl3ano3LW55cmpYU2lDbjBPZDhHenFnVUtRMWhZXy10c1pLN3pFbEx4eWpVVVRXUWJzQ0FVSFRyajRDVmJLZGFPYzZwQVQyRzRpVG5HWXhHRVh4S3pybURmaGhUNzdJZWJIQ1I0YVRlYlJET1NSZHBrNmthNjNCLXJzS2Zwb1BfbWNlemk2akpMNmNmVklkbWJVUTBPM0ZwajdfZEdBU09jWnhhYjdSNXVNVDN1QngtOTJXYzNlT2NkNVVsV2VUNzVvMjVSX1JEakliVkJJSUlaVS1Xc1R0WXNiMzhkYXdsTFB0VjBXSS1mX1J0engzRk5ERjIyVm53XzgwQUVFdXhiYk5PX1dSRTd2eTRxaUYwd2w4YmhoQ093c1NMYjlBeF9pYzFsV29WNEZINmlQRDhYWlRna3ctWE8zSExuaVZsNzY1d2Z0cGJqcm5FYldrNmdDbjNrWV9ESmZyWmZ0RHBHbXptN29TMWlHVi1LM2hHV19IbGdEUUdwTVBGSWV3MENOVVRQU0dUYmdQdjVvZzdyX1hfYzNqbFJEZVhLbVJvNWlGNGtNZUV4VDlwSktUOHQxVFZ2YTVzaUVQZ0Juem9LM3NVLU5OZHhzc0JTZ2x3OHlLejRxazNhb0VkSWZRNnpXdXQyTHNxTnhDb3dUcTk2aTFtSTkyRTUtT1g5ZWROQ2dfTHRjOHRaMXlLUDVaWXhBWFFxdXNienNSbU5IZnJ1bklMQzNVem01aVJvdXZuTmczVFVrcjlKM0lXc2QzWFY3X0ZLcUtUY09ZQjZFVkhZZUVha1E2V2RqQlVlMllEQm5iUW9oY0NWbzBtSGs2QlRHdEo3Q2kySzhaWi0wVnIxc3RZWlAyNU9ONVUyeUlfY0FWZXRjMGFwbjF1VjdRbGFOVUp6MmltdUNXNXBQY1Itd05GMGNPUjlVSDItUklaXzV5WmZCZGozaW9oVkIzSWxkb1E4Uk43UE9pRk4xUV9pTUl2cG1zVjlLNkV0YjZJV2pSdUZSYkt5Q1hoS1daRi1QSXR1clZSblVmT1M2MWdKaVVrQV90eEh2YlFVd3c4ejJNVVNfbUoyek9oeWR6Vy1RZzl1a010NFlfV1VKQmNldG5NbWZ1NE5HU3luMDRmcm9LMDRMRGJ4T1pDRnlxN0lzWmIxNTNFOFlyckxldE9BLUNZb0NaX2R4X3EtTE1XNnV6c2o1SnFRblJsSUY3eVphT1dMMGQzdzU4VW8xY3M2aFVyblNVN3QzUTNkOGkyWUlENXBoeGRwb29XcGRldEtiUlZNNGZaNTZ3Y3BLd0NlYXNXbGtoMWZWeWhvZ3hvaURtb2lrdnhDVmJuWGdPTTJnZ0xyc1lxb0t4OE5IajJGeUVoaUJGOGc1WFRkcFhwbEZjaENuZXB0Tnh3M3ZldktqYzhod2FlOWJoMUtsdGJrOUU3bHlGVzRkZFM3Y2IwX2dxUXpENXp0NnJIV3VDR2ZjcVppNHM3QjgwRXpTc2ljREhhd3JQRjhjYjdMY2RpQ0JzWEZheFZ5bTBpdjBIVEVkQTZveU00ZmhHVENISk1vSFdZd0ZKR19rTXpraUhIRHRTbmpEVXo2OVRlN0lRUk1OMVJlSWpWd2doSmxHSEo0ckU5VzdsMm5WMlRpQkFEWkJLbmNEUnZkTllDdUlGLTBRM2ZTQWdFNkVaSGw1dXgwV09VTHJxZm1qV0s3Zm92MGhfNkhnSV92MVV3amg3MHVXMU16SHdXbXpmelpMeERJUjdjRkstWnIzdm9WZDdaalpJTzJjNUg2Q2FORGt5QWVoRkpfM2wyWERQMU9vXzhZRF9pMHZKNzlkSExRUkN5VHFBTWhtWk5oVXRQWDRvLU5aT0ZZa3dvbWE2TURTZEJVSHFaakNBMlFGUTdhSDZubDlvbzl6b1hpQnl4OFlVa0JzTS1wbl8xZm1qUmVhMUlIcVpQbjNERzIxUlZqVTRERlpKaGcwLXpSR2hVSWFxRkYzQ3k5cHBXWmVDdlFYdWxSeDNmRkdxeDlmTUxYRUQzM0lMMmJJRXJJZ3hzUWtqTXBuMzJfMkVfdnhyOXNRbXlibkFIMFh5cVVIbTFYSGZ5aF9qd3V1VmdMRnh5UXdVTl9BeG5BUXd3RWlzQUkya0hBTmF5SlhLMUhYcFpLYmp0dFliMFdtSkRVWll6Nk5wQVlsN0xfc1N5TUFXS3FDb2o1NHFFSkZfWHNWY0NUU3Z1VU5kLUg3UU1mRklheTFrWnl1aXhHaUpPTnJQRmhjUHBvZndlQVlFd1RRRV9lYTNrVDlRM0tjVWF4ZTg4a2VmZUE3ZGU2NjF2cW9KMHY0ZlJ5Z296NFFzWXdrcmtock95UjVPcTlxZzNpVnB0YWd6eUVGNl9HM3o3Tkc0REM1bEZFX0I1X1Z0WEpNWl9mRDgyQ3A5d1JTQ1pEcnlyeExSNzNWTVdTLWJ2SFItRXF6VGRGcGtOdG9IbUlFYXlNWjdTMUtHMXVOUkRrNFNBUjJ2MXJZWWxTb25nM0gxRTI2cTlWMlJ6RDZMRk5YdDNoT3VURmNUOFNrWXNzSDBWZmItREFnd21lRWZ2WVpkbXhBa1FhYllZTGwyOS1yV2F1c1kxWHJiTkZYV0lsUk00UVN6eFQ4OGxZdG5vZW80a2pwT0x2aGxiODdpNjBzdzRSQjRDMHVDUG12UjBvZ2o5azVuZWZMMlNuRFhCX2VMTjRaVVdVTkxXZ3lvUlZCNGMtYVNqVmNUa19fQWJ1dWhrT0dfNkNhek5JTkF3aEFmUXpuUUFPdjNQcklUdkNfSXFldVhkaGJhT05ETkt0ODhvemtISmVlUm5nbC1JNWxJWUlWRWNyOGl5ZEdwRThBbHZsLWpWLVpPS1B4ejl2YnFiOUhfYW9fLW9SY21UZDRBeFdlUWdqQ3drT2RlUTlGTTAxQU5ZZ0FYTzdKaDFXTWE0NXZRWkRGYkVNb1dTNUdxOEs1bWRXWmlyRjZXWVJ2TVdnUTRpTV80dXU2U3ZfX1FoYmZFdGRBbWpjeFM5SEFRM1dkSWdkT2hiSmQ2NkhsQk8xTUNkcU9nbnE3enRXbThEWFF1a3RfaWlvNHZPSnZ2eWpDRjVVeTJmMXkyRDVuMllubnV3RTFtNF9JQzltcE9IV0ZCR29na2FpcTZBazdva1RheTNVaGdIbWZtb3plVFpjcE8yWlpzZXNqOHRpOUJ5TXdQdHE2c1FnWG1WSXRveWdLYlJWVWNBbHp1TkFnXzRDaGJYUkxnTXlaMGJ0MVdLVnRydC02enFoNXpwQkx0ZTI2Unp1RVdoZFlUeEdQRTdQU2JKNjc3WUR2ZFNDUGJyRDhFOUhzR0lNYmxVOHZXUngzTTN2Tk9lZkRYWWVXRWc4dUZ5S05CTzFyWElWdXNXMnI0ZWZxWmdFYkNOcF8wRGh6aXZKbWhTZkF2QnBQbmRuaDJzSVo5Qi1zRjVLQjFaWG9VVWJYREFUY3BDajNJQnRhalVsZW1wdkZDeElodTJwaDNHOEhaYVVJQ1JZRjJkVUUwTkpmRUxVcHJaZXp4SG9qVDNxUHdJM20wc3hYZ2ZtYzdnaDdGYVQwQ05HSkNzYmxGLUlQOXoyVTBhUmJwNXM3MVhVb3dFTGdaWnRYU2dmV1J3RWhCX3NfOXJ1c1pDbW5VMlM4clhsRjJmYV93TXdpQ3pacG4tcTBpY1BzSkdBaWtIUkZXcGZ2NkVWMmItVk1UcXlxRElMYURERFBqRzJuWXVRTG5IU3ZheGZYQTViajh0WnJZRW51VTJGTHpNOWRaQjFDUDcxYm1melE0UU5aQzhrWVlsaTY2SGdnck1vREtoMWR3MmZpTThnQWhxeFhFNE8yd0lKQzNYdWhsOUVTQ1pCNkctd1hucmRxbHFrTHJrS0NTRVBDVF9IR3dzUjhxbUNNSGs3VHM1cTNwbmlsbUpTMFJEUkpDekNwS1hGTkZEeE4wY2xTR3dLRVZ1bU9OWGJkNmsyejR5WFlsQUo4YTlHNEt3c21MTFZiN2xlV01fQ0lYbkgzdW1tQ0Z4bnotS2Z5M296OERrem5iZFBDRTYwSThUOE9GdDhrb1lKOThPRVBXbEVVNmpJelBWVFExcEw0WmxxT0tNU3NESXlVVUgyRGh2SW5xelNpYmNtYjl4UU81Vk1aUllDdWo2dmw3T2lkX0VEdHRLOGhLazVNb1h6cjZ2a3I2UjhHUV9xaWt0S1RtSEdqNXNlUlJlN25pUHJNbEo2SUUxUnh0MWg2cTI0RTBEaXhyazh1cjctRDBHby1YVVZZUkloLVpCRXFRck9Lay1lU0hsTi1IaWNVQkpOMkkwemdDTGpTMzFRcU1JcGl3S3Z5LXlGOEVEaUFQTy1EV0JSYkdfLVpxZTJ2MkhHeHBNR2hjV25qdVZROFVWNlhZT3g4NXFtRXZEbmxfZDFVNjctNmE1WHptOFpSaFpnYmphWVY1bzhJQVhNLXFmMlpOMEhFd2xBY1V3WTlXeWpPRzJ4T2JMY1RZZlVqX3lEOWZrSE5yc2F1ZG9hWnpyTFEwRlpjZVhiRG93MU1GZ3lsQnlQQ2lxdG9lUWYwMl9ob0p2aEttYU5ET2R6ZmVCQVNVLUZVTGJOLVp2cldramhodk9fcFhjb1M0Ulo3eUM1aFJzTFBfb2lVZWs0SllFLXhLS0c1TnAycmFkQnZRcUhqUEo4THg4M1k3X3puYUdBWjl5MXJKWGR2RjEyRjRRZGNtY084WWVBRW10SWF5ZlFUZFRhc0dWcTlMRjZzY1VqUGRhd0k4NVRFRm1JMVBtTmNsM0cyQV9wQzRobUg4SlBHdHh4ajJBWlRzbnd3RXUwTmVJTkpIUWw2MHJJbFFydnNpWEQyaV9SNWhCYnRYVW92UTdfRUV1TlA0bmNsM3dmcHRwclFNM2RNM1p4SWhUMXRtQzJLdkpDMFN0T2VMMndGLV9RRXBZWThIZ3lWR196dDdIYjhpZU9rMEgzdDluN1RNT3cxMXdXMC1ZT0FqNGF4Vmt4NFNGczNiNGhQQTMwdXl6QkdFdENzZFAtTEphMVFxNzJWRGxSSVk2dVF2LU5Od0RFNkVKalZOaDBhbVFQSlBpOG1kbnkyaU5mUEtFRGdtMzRhS3RwY19ZSFdLdmwzWEZVSmdjTlJOeHFZcERZWjUtdE1OaGdKQkJkbUJJaUcxa1RseE5Sek5Bai1EbmxqaEo4M3M4V2VkbktTZTAwcS1aSE5UbHFmUjVnNzBVZDgzRzhHVGZ6ZG5tTm9IcmxucmZZT3ZXVkxlYmN2TDN5cEdxa3YyTFlveTlSWV95em45TjQ1RFBiTGs5bVQ4OXowX3RRUEpEWjFYa2NTOVVWR3RHQTE3cmdmSWVWdExVNzkwSWFFbklXV29PUHdDTmVVVFc1WVdxN0hZbkw5TVlRb1NPZDdzc1lDRm5aQXpDSktEVUlCcVNxaVV6UVNMSXNzMmlTcjE0WGVsaTdWYllYaEZ3eHQ5RC1ZZVBFUDRZeHNrYnloTFRpUTR4cE9USmdVU2lOZi04ZDRzSC1jM1lpbnhjZmxqUEc3YmlRakxBbjJJb215UTNvTUFqMHAzMVJzU0Nwc2hJeVhLQ016ZXB2TVREUl9jZkw3UU1VRWVzSE9sTkdIX2ZLbGczc0JPYWVLRDE0Ymh1WTZGdVFKZGxqN0t5ZEhyUmlhMXVESlBUMV90LWg5LXhUYkxjSndVdURSdUNxN0tNcWVUXzBUWUlqNkU5cEs2eTdwQmlxZmJPUG4za0d3SHJLWGV1REFDS0RpMHBVdGNXRG5tbHQ1d21pMVZGanNxc01saXNLTUhhX0FIUFh0UF84dE1LNTdaaU4zMDNheEFzckotMHNkb1JtdG45NVN1TVR4dnJ6RTUxVE5qT0xXTjJjU1FDX2ZrTzZ2YS1tcmhMTERwcGhkU3o1LWJNaVctY2RGTmdoLW42dF9zODhzSkpBZTBxQUZOZXc0dG5ZLWpha05CX3ljTWczMkhGM3pUakJQb2k3V3N4WldNMjlYLXpkcmFJN2t3SWY1RnlxYmNXRm5ZZGhyVkdlbFRiSDhvRGpKVHE0M2gwdnlOTC1HVjRNVV9UMDdOTkRrOW8zN0JvNllwaDVnTWtTWTJSVDM5TlFxMzdEQmZGQkxkWW9YSTBPSFFNbndZam5ZRmdZeHNyTVhqX0F2MDJ1S2s2OVFSVXVaMjliNndyel9YeUZxT0hPYzcyQmdfM2w2WnFlZFN4NnB4WE9MWFhvU1h4TFZrWHVZM2NSV21PNnRMQm1lZzdOSXpwY1E1ODgxc1d3U3BDNmJGaUxmNWdNNEpGMHp3dU4xTy1RU0RFNWRaZEF2WHFPSlhGUF9VcW9UNlZKeWdIUy1PWXZSTDZqelp0d29ONnYzSE5Kek42SWdpeFNUbnhRbWFSWGEyUHZkV21CNlVwRUF2SlRwTmdaMW00LWtQclVUZC1UU2hjVTBRQ1RuWXhVdjY0bkRKVm5oT0c5X2R6QWMwNXZ4cUoyTHZwTGxnYjZiYm1PNXFtSGtpcXQzRE5ydHl0cHRDMDBmNUE0Tkhmdkl1VVFNMVhSQjVVZ0pkdDVHcWVaVTNoamI1UFlGRE5BeUhUaHR4dER4UFpNU3g3a1gtWDNXWWJRUUFsdnJfckNVMHhWZlpqMm80SGYxQWI4S3pMTl9Ia2VNMWlQOTl2U3pCeUI5S0VQbWd2cF9tR3dQbDk2Y3hRN0lDYjAxVk9iMWhySkdqZkpIUTQ4dlNYamRsUlVvVTR1aURpODR3Nnk0eUJ0eTlWMDU3dWk4NWdGYzdmLXdHOV9XY1Z2b1pOQkE5eWF6bVBqZmdhQlpid1F3QnB6NUNiemR6aXg3cHo1T1EzNDRob1Q2NXdadnhpamktVERuUXRmREo4Q3Z4TDlBazFvMW9aNHNoZkQ1M0lKOUR4bWUyRUEzMTFWdjg2Sm9meXZnb0Z6ZURLOWdKOU1VSTJ1NlZmU25fUlZLcGI1Y19ueWZ6TXNpS2dmSVFCX3dIYmRkWlQ5TzdPUm1VRGotOXVhUEFmeGFzS0ttdTg1NHFDa2xqc1lZd1NneHMtU082UXJtX1RwVUNLZjVQMUJVMEctaXk4MUpTdWtSQTduUzQ0a1EwbkwxOFA2bzJxcDktcU1HczdYVlp1NEhaM1otUDJrVHNFZXBBME9KcE9lWnRJdkFSZm5MVWFBY01RMUtwUlV4MTdPckhOdEZMTk5nOXVITUE4dTlGaTR6MFlpQ2JCWm1GcUVldWlIbUtTcEJPcGxBY2EyRDlENl8xRG9SdDhjOWtHLWFvVzJCRGVYUzhhX3pGWXZ6by1ZZmFydWxxaGcyX3ZKdFFjc2pWdldNZ2k1WmJubEVteVoxMGFQOW15VXBWZFpaaHU0TTJtbW5uUUh2aGwwalNNLXp1amtsU2hIclVuc1l6Y2RNdVp2WlQyQ1pac0pXUWxETERNWDZmalhfbmhVNW5KREY4Uko1dHVvTnJtNzFpYWQtc3dDNzhqT3I0bXRaVTZmTHVmNjFXblV3WF9nWkJfVVFPU2laZmRoTmxwR3lHR2xyQXU0MW9TaDlQbXBsbEFkOWVTT01mNWFrZWZVa2xjN3FkOE5KVHdEOUtXNFY5VHp2OFFlUmxPTDZlSENXY1loN2dHMDFUSkF5dUZkU010T0VmQlhaU1VuTXpkclZsNUs2OEYtX3BNLWNpdXI2YlRQOEJhd0lJRmFVcDVpamFrMU5VZ2NXaThVRmNBWWpJZ053RDhocC1kQ1hfV3p4ZVEzVUxRYW04TERvU0F0WTBFUmNqaHlZSF94V0NJOUM0bFh3YjdJTWVFM3hnVWR1X1JoaGNHYm1OMzczWkFwODlxYU9GLVFlVEpLSlEtbUk1Zk1ZUGhrempsREl0QXh0UVVvV21kbEpyV2IxT2E2cHd1aHpleDVBQ1lVbWs0RW56MlEtdVkxUkxYUUQ5TWl0Q1JUZ1VYVm9aOHc1X1JUWS1TUUV2ZzZFSFhHZ2hQZm1aWk4tTTNmaWNzd3ZNTnNTRGRQRzZqeDhBNXlqM0RuYlRURFQ5U2tzV1RBc1lqY1cwSHVYZk1pVlh4bHZzdFFqUGs1ZGNFTFJfSlFkNElaOHhYNVJGQlFlVXl3ZjdsbERJSDVZVTRrSk9URmdHV1Vjd0VNd29WUHJEaEpvdFhoaUdsOEx2WFlLc2JBZlYtcm5ycWtoOHZEYlNmZGlBTXVIUmw1RC1HblQtaVEyOWpHSDNmUnpfZlZyaHBUeDB3QV94ZWFkVlg2RWlqMmNqRENVaExHTzdlWDBvYlVNS0pZNEc5dEowdjhvN0dzWlUxTUhDN1F0bUFFRlNMOWJjRlEzMW1ob0t0NUVZNHNKcFVxNTVhOWpVcjRuNHdpMjNuMU5pYjFRdDk0VnFqYzZqVlRYZl80X09vUnk4SHZNeDZOYV9GeVltNkR0VlNQRjEyYUV3czdFSGNGRE50U3NfSHZSTFNiWHJkakVUeWZXbHVLWW5zcDF6VndvVTVPN0RGVFRXUjFHZGlGSzkyUzJGcF95bFpLempvN3g1ZjY5WHNkZEFSMzlHdktLdkZ4ZmdKTzV3Z0UwUmdRWDN1enRBX2hkR2YyX1lybzVoM3BKNmxOZFpEa0xxYWd0bjBIWHZMMk5tcUdVODJuY1dsd0trai02TkZubE0wa29CTDVQN0ZlaG5VRFNuWVNncjBLa2dyMFBKbUxUV21DNFNWYXI4aDI1WE5hWWJDeHkyUHVNZEt3MFVyMEYxWWFaWFpKRFMtZFBtWHVvbDdPd0tkQUdFQjNKWUlnM0tBZVF0VHRTRVU3TTRsNVNzZi1QaGlFZE9qRi0yT0tjcmxzenVkcmIwa0gxdExIMUVmTnRMUnZ5cks0YnMtWGJJRFhUXzFJMUZMV2dDZ2lOaWVSRWN6QzZjV3pma2pFeTRQODB1R05veTBMWFlQMnltWjhzVjVadzVLX2s3OE5FS19JZ0VjZnhoczBIYzFkcmtUWXVZTi14QnpMNG54OV9Hb09QVUxYdlF2WWlYSHZZZ0pjNEpXeHBRcS1lc2tPZ1ZiVW56Vm5NUjFpZGRObXhtODJSV3NUTnJuUV91YmtWdjdSV205dlhoWkJQSmxtVE95bEp1REF6ZmFPUzRrV0d1eDh0QnNZY0k1ZTdMZmJIdnVpTlpsREN1bTlfZi11VmVHT3RaMThhMkwxM0RJbUFfSFMxMGllS2xObl9jaWV4dElkd1VVblZOY0hqZmVTVDlhSXJqeVFEMC10aTJqYmhyRGpnSDA2WGRFSDFIenlvT2RCSTFRUUZINTVQY3Q3X1UxaE9uRUZCdmtIMW52UFFvZjhUT2hZTTV3ZFkyVkN6aGlOMXo3SUdiQlVUSndpQ3ZfUkMxaHpUeG5NajFwTEZnZ25wRjh3Y0ROZUNYSTNsQnhyV19hMTc1a2Z2NGl4NDFxMXdyMGpKd25ic25UMVZQZngxVGI2MlRFTjNEVWRZSVZ5SENTajQ1TFVHRTdoeXI0d0lRYXM4cnJxLTN0eE9PWTZQbVFFSGRRcmpzeEdBMi1GWWtfNEZ1dWxla1VRTjMtTjVFa2lIdkMtcHpVQkZhampGRm5nQW8wSmljeEtYcUZPSnA1cVcwNW55b0dMbml4QjI2TjV4UGotNGZ6TTNPbVhCQTJXOU9DbWlsWXdRVG9pV1R3WjNRdHRfUmM5RHA1MFB5N21RUnpFUGNiX0hGRjRlSmo0R1VXRG4zMmVQUGhuMEdpLUNtbVhST0daN3JXa1JlTHdQMFR4bkpnMVc3SXhkS2x4YnRPQnh5VzdfZ2FwX3E3YXduZHl5bXB3ZEE2bEo4dFBCT0xIR25ibElwanZ3dXpSUWdpem9UczFXd0JReXlVY25hMHRtbUdIQ3I3b2ZCR2JSUll3UllaX2xDT0hHcGx2SmxDQXZEajFSUW9kYmJrSURtMUtzUzk3NF9qWEJ0VDB6WjZ6SkQ2Y09QdXpHSEdiQWRhaThyTHlNRkJUVzlzcjVLWXhWdDRzZXFIUkVpamZMNWZ6VENhdmJGMkV2QklUbzVvN1dRMl9TdF9oY0FfVVNlOTdMdVI2WGZmamhhRTlNbFgtRHlZU2RaSVV5Ny16VGxWdXZJWEpmbE53YlRvdjNFc2s0TWFPS1hMdE9vN0hsSU1OOWZxTG5Xd3RUUEtOZkt1UnpXSjNIdWxoVlpscGVPaXZtejFrWHVIazMzOEM4ZE9vczlKbVI4aEJSekJnYnd1N2pqeW1WTkZBbkE0bXpfSXdOZnRkWnVaT0VkNEN3aGgwMVFpSkxINVBxSG5IUzhaQWotLXVTNS0xRjhQWlJ4aGtldThJakg3akVXeVN5QllER2MtQ2EyVmlrcEsxNkFHalZVeXNHemw5bDR6RC1MbzFyXzYtVWEzenNtOXBla2RjRm1FNVJCUWxwdS1sQ2lkZGRVelViam1VNUFUSW9IUHFKRjRBelNGTEVuRmRZVWlFejVzMlkxbWVMNTRVSTRxeWZCQ1dUdmx2WU5TSnpLYW44LU9zeFVLalFVeFk1Q1VRc2tzaW5qMDJmU0E3U3puUzJQVFVJejNYX2swbVpvSV90MVpQQUJER3NJMDBuRGdkeVpjQndxZEJxN090aEZaejRoSW5XTUZfN1VyRHZRX0FwQnFBcUJ1bU55R1lNSXlnYktIYWRZOHNEa2VfUGZBSWxyWFJ2UDFUZEFQWkFvMlZtWXlTTGhLMldSTDZXcGx6bENvVHlaQllCNlBNU2FmSzJFVy0xTG5hOVNqTmV5RzB0dVZBR0daSWhiVTQtbVlVODgtcXBBVkhrdU1FWXRLUEk0bVpiSVIxZ0o0VExYSWRPN0lVeVNSdGV3ZjR5RnhyUHpmNGVVMWs2SUxTQkMyT0hKMGstYUVCT2R4VklGRGFFbUdFTU82UVg5LXlYbW5wOHdMZVZEYWRiQUw0MkNmeU1jRzIxYnIxeFdLTHhzSWlSYmJhWFNTdTNNemxuOUF5V3Y0SUw2R2l5aTFSZkJvUkpjREtvTXRUbHJhUzM2M1czc29oeDhOT0UwUzBRbzZJQ0pTZEdqNUtSNTBVZXdyNzA3SmlBNXlhZ3lnbkZoam9fQnl2VEFscmNPUnVEWGFHaDRmQVduSnBBNEt6dmtMcjJrZ3MwSGw4QjNUeHZOSXEwMUhNT0hJekI1cS1fTEZvM3ZxaXQ1WXNMcWozd0NqcHFKWllLRVlmZ3FqbUo1LTJIYUxwVkpkbHBJb3BsSWlKcmctTjR6eDRZZW54ckR4eUN1d084MWJ1SFI1SzNKR0RFeU8xMzFiN2FVbWFncUZmMnFlbnhDZndDYnpxb29oZlZIWFB6WlpVTVNhMWZlRVVIUmdmMEwxcmZENm5wMWZ5VDgzbEllOFJUS1pIZXhXSVptbUF6RGp6dER2Z0dwU3JOVi1NNjFuQ3JhSnlqQ1RZVUNOVnctTmpKT3RSUG1RYmI1N2lyeFQzNDBtUXhaTzNLMDhzQmVSTy0xQ05yODR3dE4wSFpvUmN5UEU4T3JQMmhrR2phLWJ0eC1CWXAxM2l0MGJKSWwyaWpYdlI2Z0o2WG9qT2tXMHM2YlA1RzVNNUl3QlpaWDlPelpac01Ecks2bmVUWlA2YTFXZnQwdmdRVVBiVXc1dE1LYW8yU1dZU3BRUEdiaDZQLWExbkNibjRhV0FEQ0ktZlBsMjdTcGM4Z1JoSUY3VmVYSE14TzVvR1h3aTFDMTJlRlVrcGZTa0x0R05VeFM2VjM0bkN4dlE1ZHYtUjdqY1dFVkhwUG05akphSXJKcXliRjJCTVhYcFFIbm5mOTd4aGxaczdlZFNaYU1USXU0WVFNLXB2czRzR2FCdU1Bd184bHNsWHYxbl9jaDcwejdSZzE5OUFUcVQtMEtULWV2bE9wWFBicDl5UGRmNzdKSEU4Z1NJNmRzLWtxTE1SZHBqVXN3TVZkS1IzM19aWW1EeFNydmxKS1E2NF9VSVBqV3N5WlRGN0o2T2p5RW5pSjFnU2NVSUFGc2tjU1RLZTFKTnhOeGVHLUNub2ZPTmlUcUpQWjV5QXBjN3p6RUhQeUtHekxKbUdyRDNCdm5UaU9Gd25oeWhyTVd6UkZwQWo0bnBpOTVGbG5vVm96WlhJUDRZRnIyS1J0UnViSmNoQUx3cENBNXNVbEVmQi1UazZwMmgwM2poTk43VlIxY1hPcDNNTXI2S21FWHhPMm1ManBPYVZIcV9qOHlQcGRwQU0yQk5jbDJ3eHJ4dlJ0bjRJMFAyYk45bC0yTHZWNW50U2RmbVZOdDg2SzBJbmZKWE5jOFRCNmdRMWNaT1pLeVRvTEcwaHhBeDJPMEJrZHpFa2lGeUp0d1kxS1pqbFEwNk95WWZJZ3d1Y3FVMWUxR2JhbG9qR0RtRlZ2UW9rRGNTSXZ3YWZ3cUtHSURKYS1pekozSkdtR1cxM2JDaHRLT3VSaHYzNFVVMVEwcDYyZGV2dXJzWEp4Q1NtZWUtMnEtbUtBQy1hR2ZEVHQ3VllJNlJHcng4ZEJmeXVFVjZJSUthMVFENEZ4OTd4TmhNQ2JBZnNTQmk0Rm5KcVJJZlhaM2JHc2R5a3NjUnBKRWRwUTVWd09MMEctaXNBOUVLbEZ1U1cwY0dPVjhmUW9PLWpiVEg4b2J2NUVVcXpGMzNCQVc3NUZDaWxPTG5DV1d6QVNUd1JiclFEdE05TzFjUVJRaXAtQzlLYldhN2wyX3g5aG4xM09wTklIQTFJc1lkcjNHQndDWUtGVXFYY0gtLUl1bmdnRFppalh4cFlJckNRR1FuUG1UakNjdVZ3anlLa1VYWUJHbFNOYXZ6dlU4Q3RpWERIS1B5bWl6R1BiWENqX215OWdleUhEV2w4STIwcTdJVDdWN19oTlNhMGdEOElIOWVic2RDZ3hhU2liVzdUdjlFQThPZzNRMEpvSFRYeFhmWVRpRW9yM2RjejBycHl5OE9iTFMzUzk2VktGNlJOU3V3REduNzNXdlgwYXB6NkxYdkRFenhhWDNJbExoWDdiX0dhMTNldXlaNDIxdDF2TkNaaE5pcjI0aUVlOXRlclpPSURlM3JRRGYxd2JqWktBX3pQS1VWc2FFekJ4dDNpdWw2RlBvWjZENEtwWHpFTGNSMDRsNTZTSWcyREdoWWd5QWZxckd6TDRsSHZqSU1LblZHSVdzbDM0TlRUdkxSMlFNeWx6alhGY0t2T29LXzRkQ1F5clRwTVVGYjdBMnlod2NaWk10ZkphdEpnXzkyQUpvcnI5ZWhRVVptbGJFVGw0WEtNeHA1QTBVVlhkcjAwaE53TkgtNm96RU54encyb3NfcjBDTW1MN0hRcnFydHA2T3Q4YzI4YUVZSGRiMVhZakdWanU1VngtYWhMeGhkblhHWHpzYVQ4RVBET0lxcXlJSHNhZWFaakxXemJvRExUNXlld0tDT0xiMmo5TEFHXy1CQU90aTFTemU5bDNnRFlxQ09lUVFWQld5UmhpTHRSaUk5WnYyUXdYWldpVzFMMU9NeHROZVpYc1ItRXZMaU9KYWYwZTYyb3lpeEo1alVObjZSSmJmaVd4LUJBMmgwS2UxSkJVdnR2ZUZmeW9GaTVCVWwwOUNrVlB4Qlo3dFNzdEVPbzE5UENISGdYcmQtbUhpNlV6QkRCZTcycGtqNkgxUjgzb1k5ZnZjdzBoUW1FZ2ZWanExbVJ0QUZXcFkyZnltNzJ0Z0IySmdBaklfVzdOWlRxNGtSUk11eEwtWnFJLXVrcDlSb2p2VkN4Sm92YlZWMDhWS3VyU1RycXpQaE5RbDJ0X04tRmZPVEZ3VUVCN3pGaXlmbTBKRmswTDc0ZG95SzJheGd5RG9Gblhoekc1Z3VSYVFRNFg4eHRuRVRRMENfeFBRZ2dQOWQ5THE1WjFqWEJ4ZU5SNERwaWh5QTJKVVNsR3JUV3o3cmZaMmdIUnl4WmplLVZ3a0ktWmN6eTEwUUo4Y0xqdEV4T25FbHlpRm9mZ3VCWThjS19aTWU3QlpIOWhOanJFMVJJeVd0SlpXTGptZ2J0RHpaV0Z3TFRYTS01elpjLXowNFZ3Tzd2UXAtcFBnZXRwRG9UZHV0RnN0QUNCdWtUeTNRQVRiaVJqeVk5bmJNY1JMZmx5Uk1CaTRHNll2Zm82SXEyUFVSblQ1OHdpRmN3anJET2hhUHFHcGVvR2RjTjEtUkVjQU5ZNGZHQkR4SkxLSVpTc3dYQmxDaHBfdFMwUzlOMkhHMmQzeFVGTmQ4cV8zVTR6eUU2RWV5SnVJOGdtUUVYUXlkTjVBYUc1UEZxSGhieTVRRWhFRWRQU3lSTldYaW00SFpVQ2ZubEdLSkF4dUZnQkZvLTNzMmFOVGx4X2U2WTJYRXAyR1NucV9fVndJTjR1N1MtbnJPQkRjRld2RzdVNnhNX1ZOTEtlTkF3bHdBdEY4bHZMSF9EY0lpUDIxZmxweUd4SkprVmVhbjhPaThWM2I1R0VqY0ZSSmtRZENlRDNWX1VWN3BTMGkyMjN3M09mWmFVZERwdDhJQktCLTVIVUl3MlNvQTVNdlYwRTJfaFd4RzBUWnZzT2FhVHpIb2tOSFBiYVIwRlZKQXlfWjBvS2pTSnI2bDBwMFZ6Z1ZLS0laRmJXd2JsQmlDMkZreElNRmx3M3dvakM5VzlyelctNnplMjVKQUFfVFZJN1BCRjU2enQySWU2Y2diUjFiQ3Z1YzBWM1owcV9WMzctTGFsZThLbUhiSGx3SDhRUFNndTc4a0txejJ4NHFHVWJFX1FtUEY2QWNLMmRuUHpCYThyOHU0N1hvd09RVFBnaDZvczNSVEFjYVUza2ZlTkszbWNaeUY2d2VhQ29ISmctcEFtM2FfT0JRMmhNSlpXd2o4NS1CbTA3Qy04WEJ3SzVsLV8ycGQ3UzMzOTJ1X18zUXQ5TF9vS05JdnR0cF9qM0haVFM3OVFMVnRaZzhVb094amMwbkN6MFg3MU1pdzlqdlBnT2hnZEY3YjZyTUFLRkdoSjd1cjktbVlEcjdJWFhBcFdiM3d4OG50LVVLWVRWa21DNGs3UlR4UHhEcWsyVWhVbG5CTDZVZmZDNWJGUjBsa3docmt2N1UyWTJ0YUxvaFZsZDYzbHVOTFFJTVBkYlhLOEdWdTdFUmtBMTRzZUxscU9vLUl2SGwxdW5VLTMyN1YzWWxzanlpazhXV0lUcE5URTlEQXAxUnUxUmZicVRwSnlFZER0Y3htYXF2REhrVWt4Zjd2UU1icFdNMlVibGxBOHVwR0h2ekJUbkNmcW9BVTAyRW50S0pXMDhhSFF5Q3JOUDNGY1JycXhiV0FTX3BvMGRRUEJleHhReGNjdTY2VWVnU1hKbmpoZ0ZyMldJWURWclZfcWZJV05leXRTb3dvTVhvaUIxV2NKcWxrb0sta2VzanZ4R0VkbWRicFg4TEpST2huclJrUTFFNEtLM1p0UnBTX1JIdDdlRXE4UFRtTFVkaGN6cUZTTDBtb2NJbGN4Um44MkNCZ1RvdnJzUkNmUFR6T19FVXRiWHBZWEd5R3ZjSnBaT25FZ0Z6bzdSeVlZMGV4YnJoLU5SVS1Lc0s1THBfZkhWcmpCaktRNk9IUUcxQmhSZVU5OGMyY1h3X1BIRG1XUDBDczlYdEEzS3FkXzc2RVpZa2xheDEwVlBKUi1yYldlaHNnT2kyOEw2Z1ktb21TajUtVTQ2X09LSFNRcVNGQnlYRlJRRnU1TVVWcHlITlNIOG5INmlKLUZUSW1NNzktYVlyczZVQXBMY25EYUZfNmh0MzBNMmhDbzQ3a05NVDBxLVE2b2oyX3dxalVWcWY3cG5HWlhTU0FyRTdUQjVQU3NvU0ZNMUQ5dUVZRGh0aHRDc01zYk5Oamk5dE9nR29pRVpXUmF3N0xSOUlWZmNRUk1zQ0dnYllSbEpmMVdsLW9zSXJEU0o1d3VQUUR0Y0xwTUlDdGRrZkdtMlFWbWM5V29zWEo3R2ZyVWgwOEZCYjlGNUM3UjZDVExCUlJNVU1GYzJ5Z3dUSFNQTnNMdWJtdERlWXJUVlQ5MFlyT2FPaXVtYTBPelNDUjJISXg0RXdPS01BbnduR2xyZlAtZ3VfZ1RiS0w0Sml0MFZERWxNMzU0cUFKcTRPdTAzdmNKNnV0QkpSTzhEOUdORjczWnduZVRHTkVhUG9OQVl2SVZpUlUtUVJnTTQ3WFB5TGQ3MWVvVFN0T3A0Mmt3TGp1SUxDLWE2bkZhZnFIamRLWXhzaXhvYy1mVjZ1amdaRzZvMDJja21heEFNeGZ4N2JTZC1fTDZGOU5vUlJRZDl1dFlMdnJCTU50NHR4S3ZTeTQ3cVBWUENuUVNNWXFKOGxBMjJXdEx5dThlVF91YUhqdVoyNGNXN29faC1WazdiZ1NyZkVLMkM3UkF6dGNoT2dlSU9TUXNXWXJyc3lPMVpBWW45a256VXR2Mi0tU2VLZmRyTU5zTnVSOXhkZUhRaUN3dGd1QS1qbGhMSS1XdExSVGJudVlKRE54SUU1aHdLSjhWSG5qbmljbDdJMTRyWDRoNmV5Z0tTTEhzaVpmcTk1NFVMYmFJWW9fNWJSR3pHR3R6eFJLd1Fud1MyYkEtRU5JelY1dUFnTTFZTjZZT1FCS0ZFLVQ2UnBVVGRiZ05NRFo1d2EyYUdiamUydzFWMTVFVEw0NkNsY1pLRWJsODV0cWIyenRkTEFYaUtTNTlqMm1xb1J1X3A4dFpBOWIzUXUtNDZpM2I4ZnVEalFocGpZamhoTVcxOV94bS1kZHc3NUNuR1JYUWlCTzllMjJ3MVozTkJTdW9NaUtqdlI0c3ItWFo1Vk9GeDZ3cWg1ZE85dFFPR1ZyVGs0TU51WEpXcDJwZWVJX083RlRza3Npd3h5ejdZNEtCTXNBWENNUFZtUldPbFNSLVp2LV9kcTdLeE45bFhIcDdTS21oN0tDbzJBVXk1S0VxTE12MUxiQUFHSUFfTVRNNE52cUQ5U0VtMUFKQU5jZnZGbE42T1Uzc3lZTGUyWUlpZDhSTVFhRUpEREtLQ0RNWkE2c3I3aGFZRnRTd0doNzFsZVFiYmdUZndWUjE1NEJaRmdZNS10Z2pZYmk4ei1neUdzZ1pwR2p3NWp1cEpfSWk1dW5WUWZUSGxaOHBrZ083T0kxRnpMU0Zib0U2VTRLb3FGeVBtYmtsaERqbXFzbWRQNkRPcWhsbzZ3TF9EcEhQSmxBR29OWFJfRHBIVnJ2cjNZLUphQ0RlZTlUbG5xU09EX21pbG9mUVB0RVVhdWtkUkxyZDFOR1JkN2ZmUE1Oa1ZrSDJmYWFhUm5ySUF1aEZlWmxwTnR2MUkyRDRwb29ZX3FwSm9VcGhEMGtwNmFrTkp1RzdYbHpKaXZVM0tzeTdYUVFMdkhEX1RkRDMxM1ZXNkMzVHNUeFk3dUJaSVlMVXp0Njc3eUVvTGthdUI4QlpSS19DSFNld3dpSVRZbjFnS1I1d3Uwai1TTFNFUHRKZ1NXWEFRSFRrY2hGdHRBdWFvRUJNQklTN0ZsOE55VzI2d05jMmsydlVvT1cybzN5VEMyVEpLa0hGUTlGOWx3emdnTEZRRHY3Umt2ZlZyX09pVlFnRm9VUF9aV0NvWENRaXdxUXhxbXJKMlBNLXNxME9SZnM0Tm1idFF2ak5FNHM4VWNyM0p5NXAxSUdTZ0hBVlF0cTJEN2o2NmlGM0Z4ZE5JRUpoTnNKUU9mRTBNVzlneEpKSlNvODlGbWNLOTE4eS1WWGYwcTliT2ZKTzVtejdIYWp3em8xNUxHSUJOY0ZFY0VsZkVWZ3pNZGhoTGpwWTM3WnR1UTFSSE84WW1oQ3R0VTkzRHNodXV2SGhYMHRhRFFLTnppZkV6TXhEN2VHZnpzUE0zc1NJcldkVkhyR2lOUEZBeUMxM0lsT3FVbFBnMTZ1SklreUQ2ZHlFaVR2dVN5RV9HTDBubGNVcG1GQThsWEViNEw5TDc4aUcxOWJjb3hDZ3R1cXlraEkyUDdESGt2WUtoZVFlclpoU2tHSHY1c1pKZVB0WkhiZDgxcEptYmVmNF9pZVFSRjZGTUQ3QUNTRnUxaUF1bm1OTkM5VnRVQy1TeDRSWXhQVlJFcm1reER4Y0JNbTQ5Ui1zdHNmemR6TEJNdXFQVmxlc05zU01fdWNqOUJ6QmVEUWNSUnRjZ0RibWN6dGV6TzRVdUJLY3E0Vlh1UEpHdUN6WTJ3V01IaVFHN0hMUGRTYjJ4SDhlWkYtMmxiUTRkZmpub0hUazZlV3VPanhySWtWX1R4LTNvVzV4b09HcERlaDVmQWxBWFZmV1V1S05NWEhEdEtYYUlSOHduNkM5WmV3cHRtN092YXlmT3RwVlRzX2RGRFU0cTRxOVZUVXZwTHYwLUZJZGRpZ25MNnhtdVBfNzlhbHlUNkJUN1BUVDNFZE5UT2gwcnU2VjVVcl9MV09ZdkhreDdJYk0yS2F5UmVvQXJpWEV5bXdObmoxd0tpY3JrNW9XOFlFWFBDT2x6THJGVXFkU2x6Yk5PNjZ0VDRjT0JMRXJDaU5GTGFDNkl3WFl1Ny1WNVNsclRkOS1hakllSk5TM3JjZU4zNHA0T2c1NUtGZUxlVEc5MmZLYlQ3X2hrMTAtc3JzRWJickpxeUtDZUZTaEVyWFdXSjUzeWxVeXF1cjI0T04yYllIdW1MYTdtN0dDdUJvRGhyanhVWkxUbGJjcFRzMmNZMFBDaFBwRDdvTHpHaVJBSFRGS285N2RDLWE0NHJfRm9RaURncGJuaE1LTnhDTE9UUU1HTWdldEg2QzNPOGJwUFRxXzRieUJnVDNkN2UyV1luRUpsOHI4U3dONW5Fal9wMHY5WkcyY1dFSTQ1UXYtYjdoN1h4VkdDTGFncjZOVnBGWGpOREpPb3c1VXRBamx6R09BaDl5Nm5scDAtM0ZycVBpTmxnbmxWcjRGTWlsZWszYVhuWUNqbi1DVzR1Njh1RzE5OWpBV1R4VS1xOW1pMmFwV19LMl80ZURZQjIwOVpGLVA1dDBua1RKMmtqcGdWT2F5MXNNRlVjMnBFM2hzRUdGQTZJS2RnYjljekpnbTNadVdvMWVHT29vOFo5eUZPR2R3d2ZWNG9FVFRxcXpTaUp2aXRzTGZ3X1VfUV9mMkJKWW9WUjZSMkljNTUzMGlnTkRiS251NFJlWTdpZHVvNmp6bmczbi02TlNJRmJpdkp4V3M5aC1TZ01ISWxnbkF5Wm5KMGJLYjJLQnNfRDRFR1hfZEhKQ0E5ZlAySERrRXgxcFhlaG9sMlQ2SjVJME5rbUt1WjdKTDBfOVpCeDlxcUZaS255WkZwazNVQnQ1Y3NiWVRzM0JheW5NTDY2OWNOM3VfX21TQmQ4Ykh0SVNPd1ByY1luU292Q1I2VXNOTW1yUGlhRGVZaDVhdUdRYnhrRzRBcEVKdFh0MEU1eEN3SDZtTDRwbG5CdXJFMnd2QlpiWWI4bXJVdUg4X1BIT3NHaVB1amRFU05iTmlwX1dUV2tZWUg0X0MyTU1UVEJyTXBVNTFjZ3JsYU1YREFhRUROV2daWUN3N0VZR2t4Q1RWcVlnRHZLeXRlWno1NGhpNFZSbmpGWXZWRncwQXAzRXZLREZlWnVfRXpoT3lLU1BvUEZSZWpmVE5fNWtwOG53THByRUhSTFhpXzNMNWJwLjRSWE9remlvc2hJN2FPLV9LM2p4NkE"}'}
    -    headers: {cache-control: no-cache, content-length: '43147', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, npwphfv27zygrslti374af3g.vault.azure.net,
    -        /certificates/cert-name/backup, api-version=7.0, '']
    +    body:
    +      string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmVjRkVJLXFtWkNHenE4cFNpU214TUVENXU4TlNUUkJTamRsX1V0VHF2aU83UFBXVjlQZndLY0lYZ3VEU3JPVzFhZEI0Q2RNSFRKbnB2QTM0TzVycFZZSEx0Q3ZSU25BVmctZ2hFdXdDVnJyNlZQZTBkT0lQazZOLVI2ZlBaQnNsR2JEWjMxV3hWSnJjVXNKblFpZS11ZXNEQkNVOTNUeUxxYTdOaFNrLXVhN2dRVUEwVTRzNjNiRjR2elFqSVFZTnNsS1FyU0RvTEhDTklJRGR4OThibVI0UDA2ZXRfVkFXRmFETWVGay1ZNFd5RHpKOXlIY1BWeGdwMHZZWmpEcF9aR3B4eXFjZVBHTXc5M201YUxSTEhCb3hpSWZ6MUYtal9QaHpTZkJYVVk3ZTJyQWtBbVE1TVkyaHA1dmFGUkFZMnpRQnFJYk1NQS1Tc08tX0tpTkc2dy4tUnBIcVVLdWNCR0tmSzMtaVM4QTJRLmZVQ2QzUHlTX183ZC1iTjZRWjRucWFab05RUjg3dFlwakFzT3RMenBPd3Y3ZTZsa3NaZ0hyLTdFN21hdmt0ekNlUXdCMTBuZV81c2hVbWQ0UXpQNjhkZGJkVk02VjZGa09vU1JEajRRTUNuM0RLTWxyNUEwUlNsQmtqWUJtdEtKYU5HZ2o4WEMtNVl3V0EzLWRjeTk3aGZMNjRZYU5RcWRBR3ZKemRGLWRQd1BWbWxadlg3LWt4VTB2SElXYmVHX3hKTVlYbjhPZjlaRk1UMDBoZC1vMVZkVnM3bjhSTDU5bHpmV2F6bmtVY0p1U09SWHRxcTUyaGhmbGQ3d3Z1SmdWWkdTN2tjM293RW80ajlVdmpBekNjVFNBcW1uLXpnVURiM05NOENMeDM5S2lCYnVBcGRBd1hVYmFocnZLVUlyYWFkOERTM1dYTDM1SDJqei1kN1ZtYlY3RDlYUlZ6U2xJVW9wWkcxQ01FdGExMEFBS210cV9qX25ObnZzNUM4bVM1aU5jSnRMUUktYkxDSWkxWm9ldUJQQVJsVS1Rc0lEeFFXRVJ1cEVCVzdVVFV3bnVZYm4tV2xTcUFPQUFLdFIzeHJxay1kOXRPT243ZHFxaGtxaGJTV1J1dm5HbHZpcy0wQTVFcVhOaXJiR2NQWWtETlc3YW1HcEpTbUgtNm1CengtVmNmY1NHd1ozbmlZN2VYdGtub1NGdzdsaVlLbHRHdnNPMDg5YVJycVkycGhZdnl6cU1zQ2I2NzVLNk9LUndFb0RETWcyck1IUGg3SlUtX19ETVhwRjFVZm1qVHExOHoxTDJiWEt6NVFSUDg2dkIxS1V6MVUtRlptTWdsa0hxQUtoU1F2LUhnUnc4dUFvQ2dsZFl0MW9BV0JUT2RCV0o3ckJndmExeEVGblNOVUd6ckVzb3oxRXlwWjVNcDRTVUNzYlNFSlhqSVBiSXE1dlo2cEF2RmNRM0xsOTNOTHBBYS04TElYQTEzdk0xTVM0ZVFWV3d3eE9FeXJIT1BJRFEteGVNajVjbEtjRDBrQ2gxNnpMVDc3MDUtX3ZkcWduSEFycjUtc2RFS2NaaWNVanRhckk5MENxVmhYTjY0dGVVZUYzY2x1cEdNZUhCN084QksyUFVOVXJ6ZkZkb0NoODNRelF4YXVaN1F0TVIwbGxSUFViSEptY2Rfa1ZaZWd5SUNsUHNlaWpTQUp1eU9HV2xLc0VlWGpNOGUzV1FQOEFuVUJqcEpQbDZnTXpXQWk0V0JJcDg0blh6bVktZFZSQkxGSDZkT3dHTmpiX215RzM5bVNvWHZsMGhfcmdXQjNtM25WMzZ2MmRHWHgySEVTVU1KRjBtanZ0YjZiZFg4aU9ZRnFQY0lTUG45bTRhSFBXa3NXZ1ZQcnpqZzhSb0dFR05aOS01T2Y0Y2hid3ZDeUdXRkdNMHY5SU44SlR0U29QXzVHZkFXOWJaWTBpUUFZdC0yN0RkeTF3LU5vN3NYczdJYUR0TUZ0NkVtdUthWEZyV0FJMjN5VEZWRE1fdzh4RnVvaXRTTFFkcVNQQl8ydFA3bkp6TGNodEZTb2dPU3FqNVR4NXdZX1lQbC1IYW1DOU1tX2hPbW9Rczc5TEJjbTVQbUFyS3VtTTJZZXY0U1BlTzZOUzFwVEhjT0hiTHp5OFJBNFFNM05VTEFFcEJtWHJxa0ZJelppYkdrSGFFX3dONjEzSk5EaGdhZTNNVTBGZXFtWTUwbVRBNmVmUU53WVhYT0toTmQ0VFA3dVVKR29adnNaMEh1RVhYQVdhTWdLN1k1cFk1cVlEYi1uQXhpT1ZKS2lueThRMTdrb05ORDM3cms2NG5yS25kOU1kV0ROcVdlMXBFTVl0MEc0LVlSUkM1YXpQZzc3Wl80bGtESUJqbnhDNDV5MXpPanlKbWNOQTZGcHNsUW1veXNnSGQtLXdrU2RlNENhZUU5UC1LcGk1OTBEdjgtNzcxLVB0VDZVVWhLbmZ6MHBWSGprYUZjc1N1aThoTk5jdmdTVHZkd2pMcUFya09CcG14aTZxQWE3TlNaOXNJaGViQnpmN2pHckhEb0loWFY3QUp4T2hmNHFMbGJUdExicS1iQmVCQi1ZVElSVmhqUDlOSnRUWVBCeDFMS0ZZUFk5UmJXdWt3VFBaLU44V0hxZnRnYlpSX010X3JiS0VPMEdKekRfNXVnMFdpWDc1QUN4dEhDYW83bTJCZGpsNlpyVVJwWjA3NndCTFZxTFBjUUJzUWNnUTVwcGVIVFpMbG5YNl9VelJKdjdNcEdMTE1iRDlEdm5LVmY2TVFfV2tZMXJIOHJVT1A5aVZGbWdqZ2hZekhSWFhYZUR3UXlkOU5UOElFV1pfck9lZmcySEVEd1BScDNiN2pQUW1IUVB0U25qb1dsOWRDSEEzYTI1V29NNmx6Z1c0ZXkxM1JNSEs1Rm90b3JSd1VpRmtNZUZIck9yaDRQQlFzdEhiUTFnUTZzTGJLV0RzV25aelZObGVmQWlvLTFIb1BVSzREdWJWYnJhSVE2LVhrUFRMbEEzd3B2dmgza25tUzZsV0dTc202MlhHYUF5VFN5aEFSbUJwRzRQNFVyTkNLRndodGs3YUlIM0c1eE4tNXVCRWl0WmctX2ZPUlFyM2pJQ2prQy1pU3pYUmpLdUNvY2ROY212a3NmakdvRTYxMW9RLVI1RzVKcnpFZHloTURrb0FmYVVCX1Bwa09fRHk2MU5DOTdUbHo1VGozbXcwa0hhMU9sYU1XTS1tVXZEajlFdVZsRFJaX0RFWUVEVDRzQjdKS0VNMEJkQXhkYXlvSkpCdVZUTWY2NTZ4RXZ4a25pSDdVSjJaMTlhR0xZY3VyRHcya3RZMXBHdW5DQnlvNHNkZV9wYm1YazJqN1FtbFVxMXJBWVlDUXJ3NHUtOXMzWmV1RDVPWEdwOGJaMldGVXo2ZzgyazBDZFFQMnl3ejNDTkU5V0I4MFM3NW9vRHdjZ0s5MjExekZrQldIV1Ntb2FkTEtld2o2THgtUTVuN2NmT2tDVlNkb18yaEhkTm1feWZyaHl4WG1Ka0JYSHp3Wno3REhqeEdGd1ZpQUtmMkc2WWZ4US1yWDRsTXhyWkhqVGc5aU5kRHVDREZid3J0MmZ4NDNMTGQ5ZWQtaUxhdllvMnBVN3ZyMk5FeGlEMjVndnNKa3lLMzR0X052X1p3d291YUZ5ckdZMTN3UGlFUEEzb2NqdmhjZkR4N20tSlM0V1FQLVp1ZEZyUmVsSWFHTDB1WlI5TXdTZnFMOTZZYjVQMDNnODZXMWdJWnZFSElfalg0Ym01MXF5dW4tUDVWSWdFOTlGVVZZY016NE9yZ1g5eEotUDNYejNLaGYtb3l0S2E3ZEhDQ0V3V2lzb2QySll5cUJ3dWlRMnZCQjBKblFKMEV5OHdQVGtUalQxaUtGblNHR1Z6by1iN21sQk1hN3UtMmd1Wldpb1VYUXdkbjU4bWhZY2J0cGlOS2N5U1JyS1l1bTdzMmN1WDd1eTRFWlNTeW1EYTlsUC1jQVFEOC1oaVZWb05MdjdjZW5GVGI5a3Z0S25vT2wzY2VocXFmY215cWNiTTRUWlRqQXVDTk13Nmdhc0JYc3IzQ2JKR1BXVll5V0pvZmtpV1B1SHNmdlVId1J6M2ZYMU1tQ3RrMUhWV3J1ZExyZDE5STQ1Ri1tOHVYTUVmMnNMRXJ3djZMaUlaUy1vRDR6bmZQZTJkaEI3Y095VC1OdjBueDB3VTZ3TWVueGZ6dkk3NWQxVVBCcTI4NTN1R09uazh5YllIWU1iODd4T3RkcnZMOU1vZTJfWG5ta2pfSC1JS040bDQ3NF9tQVJNcThTc3FBSFZBc0VNV3ZfcFJocXVoSHhEY3QtbjRaVEtnN2NBd0RKVGRWR3BWbWxLa1ZIcUtGQi1rV0lwWGNJY0s0bldaUW43djBiOGk5a0hpeFBxMXkxNEhGejl3WjU4Q0gtWG1GVldSWGd4dTVTdWp6WnRGMzJEMTZaTlZUWUhubkhSdHNLWWlhNURybzhOMW5sUUNUaHRZbnozYzNRM1pocVRocndna1pNQkhMY0JTcUx3Wmo5VGdvZk9PQTl5Y1pQOUprdkVpSVk1dU4ya3lKSzV0RHdmTGltSzVkVkg3R1RUOE0yb1RYRU90UlQ4cXBGeEdWRXY5NkVwOTFETklwbE1tNEJpeXA4ZlZOOG4wc3F2SV8xMmpMclJoMEdMYUVVbHFSb2NYTDBJU0g3YlEwTTFNaEZEckNfa3drU3FuMU9Ebi1WM2hwQ2FEZF8zUlJ4bmZyUm1sd29jZ2tha1FuaFM1aHdHbTlITUlLRVNDcjM5UzdqWWNnbGsyb0ZpbUdDaUVpX09iVlAxV2VDSm52ZERIR1JrZDlmN21ndmhzMG4yajBzamZHc09hRV9seVBjYXNTRi1pY2VaQmdNN2ZrNGRVWjEtM2VIUlllaGtiZEtRckllU2RDZ2wwUXBvb3VrNE1SNTVLWFdTY2x0YUx5OWw1Rm13WEV5UzhpS2tUcXRCUFV6R1JMUWVXYm5vM2VjdnpSRzdpQmp2R29LSFpaUWtaOWRJQlQzQlg1dUl2NFJFSTE0bkt0VGZPRGFfUmFCTkNqa1RiVzlMUEV1OWF6b0hwNC1taHFHb2JQb1RtZnlEM3VhMmhYZnBUMDl5UVU5NDlzcHl2OTFXNjRJcGYyRFMzb182N1llR0d4dWttalIxaXp5YWtJNXFVSndGWC15SjVQdmE5bjFnT1JTQVgyNFJUOFJFMlI0U3p2eWdpbW1oR3VSM2o0WG8tUThZWERiek1fQWF4dWh1anNxX3AwMGdybWJyaUN6RDQtaUNrN3NOU2ZYaU1TeEE2eWszSGVodXh1cnFGRU40SWd1TkhPb3gxcW9PazkwZU41MEFrVFc4UlZUVzh6RDMzLWp2WEVFa3JkTnA3c1E5a1A5TGdQWjMyXzA1YlVpNlFya0R6ZXk0UVZFUFQ2czNmelQydU1TUUM2RHFKS3l4NE5PeHRUTWZ5b0kxcnQxMEIxdlU1N2NpQVpndnpqVC04T3YtTzMyODN5REp4SGNZbElzSXIzSUR2akhXTWFmbXBjTERMbVo1dnh1RjdfaTJnRldHcXVYNmMxdVY5NWFzSjhjcktYWEZwNDJ2UDAyMlhHa0RzWGF0TEN0R29jLUYwejFwcjF5NE9WSXNtbF8zZHlQLVlObGlKOTdxeXNPbjBhTngweW50SjFFdGoySHQ2eXZxM05LdF9SdUZSWVROQXlGdkQ2MHBuUFVGSWZXVlhlOTRMOTFrUzk0MTdoalNYQ3RyU2JQajN3UVdJdFZBQ2l5RGdueS00RVhpUEphZEZnMTk3eDR3UmdqbmdMQ1ZmdnloUXA5c2FDbUh1SUJMSXpSOVNZalBjbHU3aTlvT2xoSngxUC1Wc0JuVUFfZEZWUDhoZUl2ZlJHZjZMaS1iTWFoZTMtWUFFWjJzNDk2dElNMTRDdDR5akNCQkV5OXpCQzlrTGZVdmhPa3oyUG1ORVpReEZGR0ZUMzNPZ0JsVFEtT0tqaUV3cF9KLVd5Q1M2WVVuRjNQNTViM3lBT1htUVJTU0tZYzRNbzFUSkJWdUFJeXRZVDVkR2pZSFItaGtsWl9SdkVzbTJEcDMzUFZNVzExdzl4ZXhpWEotY1BvQzZlMDhjOTlaWFFxQzUyem1xRi1LX2ZNR1d4TklHNF8waUlraXFwcmw3dGNUek53MUZmaVhWT0lfM05XZWI3c1prQzZMdlE2X1Q3dTF0S0p4cUxqMEF2ME8zSnlnb1Y1TlRWaEx3OURLZXBuRzRhcE1mMU9zeWxTQnFZeVVGcE9sTWJPdjU3aFJqcW4zNUJOQ2J5NjRTUTVpTFR3UC1NbnprMjVMdks5MWtQTjYwWHlaSDFWcnM0UVBJOURlVTFGdV9WUXdVUE5nWG9nR21jS2FNa3JkOGlYUTM0UThzYm5jay12T2ZGMG9pbnFET2NFazJobXQzdnU4amxSam9KOXVUWno4YkhRWVdfRFN6UngzTG94bzFXbENnTlBpWmJBbHF6YzVhbkFBUTdtZDR1Mi1rYUEzS3g4OXNheC1EXzJQOW1FTERjSWRkWVRHYnpMY3dsUjRDb1RSclQyM2xZUlpCVkhUd1QtUUh4c3puVjN4R3FNYnV1NnVDYlg3elhuek9GeUtrSmNJMVZNV3JwTHROZHRjR052eFIyb2RITzVqam82UEZtcDk5WWtkWk5aV0ZtLU5CTHotdElSbDVLY253Nk8yQzQ3UnNCYlJIZlBDNklVanRpVEFBNjQ2SEMzV0tZcXUwWWQwXzl1WU9MSWdtdW9RRl9mSVRkazlHOFhnMm1WcWdhV3Z3c3RCRFhZcFRFNEVnd082dmFPZmNNQi10SUxvaGNvaHp3NnM1cFhLSmxpcVd6UUVaZzhQQ3dpd2dCU1BkVlZtZ19JdWYwVXZXR2xHNllkU2VreWpTdXUzMVRuRUxWclRwZGhiVUdfbi1BWGhCR3l2aVVKdlFvSkpPcE1IOWVScER0ZnFTQnF5V0h2R1pKWWc5ZTBlQ3RuUmRZcmhhY3lfb3NnYk5RNi0yLVhaQzdYWlFuRWhkVGFDR3RNY3ZxWWF5UHhieEl2OXkyREE4UTc3aWRsbi1fNExZS0FfOTFtbE14cy1pME13ZjdBS2xJZzZNbWdPWUJqTEs5Ri1FYnpvWmlHVnQxaHkzRHE3QkJJbEtTWkY4UXdPV083U2RwQkJHZzZVcTJXNHd6NFZiR0x4dkdmSWE3TmE3Ym9nNWFVeGJNNGRkd3VDNHotMHlVNDhhQWxYQnpSVjNwSGZDcHNxcFN2RWxjRmtnR3o5cE5vV1ZzMEc3aEhwdDF4c2FiNnk5NjM5ekUtMU9YV2V3d1JYSGxKRVpJQ2ROUjVHLV9GTndfdWlvS29QajhuY0lTUUR5MzR2Zzd1VU5JWGZCc1R5V3hTYUFnNDhGSE5EWkdFZ1JZWk4tVGtTVVBta1BQc0tGbnhvWGFVTXd0dFpiZ3JkbUo2Rl9Qdy1scHMweTdOd3NmZVdxaEVvd2dCVTRPak8zcjhGTDBWX2Zvb0RlRm5CWGVtQ1lwQU9OZHpIUXJQSWU1NFVielhhRmdyX0kzaFFFZnQyUTBfeXN6WDZnTHRsa05xVWtLWWFFWGl2am9XVjN3RXNfdk41aEp1eUZLS0Zob0ViWXluVVBpcFdWVi1TY09QRlFhWWZWcGF1cVcyY29HbWo2S2VpS2lybmdXRnRPa05kNmloYmMwRnlvRnRNOWtwTEpRSFdIRVF3UU40YjlNSFRrcXpiVFc0bEZ2ZVhxZ0VPcGE0OGROYUdvN3h4QTA2WWtaMFNWVjZ4VC1XdUVMajQyYUtnYVMyUDFFSHZsZTZ3eTRkRnU5clQxQ3QxMl9RVHVmanpXQW42SDZNdXFPX2szcmFuNmc5Qm9qbnhMYmQtdlVraEhxTzFHd09TTHhVVVJreHQzcnpvR0NLMzlnRGc5dkZrdHZmNFpGREhiNTB6QkptcFhFOTd4S0Y4Y3FSci12X1FndGZySWU4ODlyaHVPdzR0MTdEU1N0ZmZUSkVmN3J4d1l1NDB0Q1dzOVVlVXJpb2YtNE5zVUJIb0JWaHZVekR6TEdCajVJVmlJUzZ0RHdDU0Fwc0lQX3AwbDBHdjM3TER3Y2MydUpodFBGLU0zSUMxa0tGcGNBZktHQ3hUdVRfSzNuMm1weF9ZVWtQYWxYNldtb055MHZBSU40eVVkQzdJTG5oTmF3cVdfY25WSWl0MXpPRnd4QVNNbU80dXRtQ0tlemZyczlwR0Z3ZUVCMlJlS3JGWXBNNjU4QXM2eHZjZkR0OEM5RXRKQWVHcGNTM3NJcm56aXMxSHd6dWQyNGtjVHpOX01Eel9qQkZJQmVfeEc3eU1BanF4ajdqUks1UnBjVlJCYTh3SHBvLXFTcDk0azQtUFVvNlEyR3NKSWYwTU1pQS05Ml9fWVdCczctTmhYM0VpRFktR0lud28yZlM2TWtJOXVuak9CMlpKaFFmTTRxZHNOMDRaTjJaQ1FWMEdvaG9QOFZpMFJGVFVxR2tFUmNFM28tY3NwUTZpMVZrZGxrMk4tTFUtMEMwRTNicXhmTjlZYVAxdm05bk94dmI5cmVndXFCZmpySE92MURIaDBFczk5RVBKck1IUTlKODE4Mmdxdl9PWFM0UFhTV2hKWFhHTkw0dmk4bnJINE4tcjhrZlFobHI5TnVabXZMdEk4T05iZUo5dG5HMWp1Sm1KNnZkeHF5YTBGTDM3UTVLcUxHbElCa0F5X3dIVzZadVF3Tk5lbzZOQTVuV0U4cm1ON1otZER0MFJNakJGWU5MSGNFYVNFOXlmUHBrZW9tZnpNcl9TRHlHaFkwdG1KM1FkbVpFc0FhOWJsQVRuZWFBVHRyVWt6bWVTSS1LR1E3Ung5Nk9wMHVxVHYtVlYyRFMtZXhndk55VFZNNXkxVWVuQVF2b3lkMzJIME1nUzZiYU53YXRkcTM0UGJOck1wdGdDT1luV2lhWXlXOVdjUEpCUndiTU5YTzdqSl9ONEYxRFlIdjRKaWJkLUtoVjlCVUdzQVp1R3h2VU1KX1lpNW9DYjVyel9QTHlRTmFyTC1VMWxOMzNSX2o3Sy1UUWtyMFZvcEdVTldvbS1TaUJqamdWUGp4REFBN1Y4ekN5NUZlRm4wcUFwY0ljWFdGdDZHbktKNFI5bmM3ckZuQWlmMlpsUGtqZ0lETFQtQkh3MEVOX2stODVySGQ1dnl5WDcyamduSEN6NHpKWlRiMDY1QS1yZU9ob3hBaVp1MlJzVUVqQkg0Y2JnaDl5dE4tV3otWFpsYnB4cnpRNUxJamhnN2oxWExIM3FvSDhRRWZFNm10bXlXMVU2eEpEMlhYeEpGa1c0VGM0MG5HOXZlY3htTVNxekFPN1VaVGR6VC01M20tVGJTZC1heTBKX1ItTjBYVFh4azZTWlZ2eHgzZW92TGw2MXVLUnBHMGFubHlwUHFGZU1WNV9ndzBSY2tBZTBmUnpTLTh6U2NzSWNsaDBWTmxZLXc5MWdaYVlSUnJoRktuS1pINl9GeWJ3ZTZOWjRGUGs1a1RuWUxRc1dSRzNabU9ReW4wVUpnbzBKU3l5NXdLT0FuYW93YTAzYV9pbi1tNlR6WTBFSUVOY2E5WE1fWGN4SlhDR3hFQkR6ckVSN3M3bWxTSTNPbFoxOHUySEVNRU9oRmJhX1VBR0dFaUhzX3lLQUJMRzhGNFZsNktBVkFqRm53WVU1NVI4UHBLQlgwYmV5SVdnQzI3WUdDSDZvWDNyR3dyOHFYck90THI0eEFhcTlNWUxTVFRqZF84S1M2NUVEZVo1a0dPcnVwZ0xITnF2WU5ockRQRVhsSldsd0hFWS1oLXp3RExTWW1tS25jR2ZiQURQWWRTajFxOXBwZjVmeGJMRTI0ZWQ1ZV9keGhIcjAtRElpNXJMQlFqNnZia3NySTRDZG5WdXZ6TFhleVVpSVhKb25hS0M4QXg4Rk9NNU5KbUdKY29lTERfNlVrQ2ttVVJxcVRHY2h4ZEJHM09tWnJfdm00anJfR2FrSVk1TnRLa2VsSGpQSWIydEk5WFZWdG1uQ1NqT19OVnpoLWQ2Y2lINWpKZFBmX21qV3dBZ0NpRTRDQU5oQlhLd1gtTjRZRWh3N2NydUVkb0xfZ3Uydmw3OE1OdWlGb19EdUl5MXB0RG1HR09LbjRwWS00OGRFUVMwNDNLX19rUTVwUU1NdmljbDczNWtqb1F3LS11QmZ4cjhFal9fWEJra0t5dFBwUXdSVmVuUEhmN00wUVo4MW9NV3RhVnZ5NGFLdG1GVEFyVEpmSjJVekVJNi1PR2FnWWRSS012bktCOVNRR1cwNm5Gd3NFR01zUEtweWRMUnlmdkNPTGt1X3JLdTAxVm00N1VDeHl1d0Z4S0VxLVV4Nnd1LVdlczhROXlBOVFfS3F0bGstUnRLOTlfbVZvTlhoUzhqVldTalVRbDhJcUdDUGxRRGMzRWR3ZGx0bmRXYUtRdzlXOWFlRlA3WHVGWk1ncG1oRUxhbzJ4bWNtQkZJaTZ4dFRIRGdnRFd1VmxiMHIzT1UxTk5EcXFhZkFUTzFfS2I3X2hfT29UVjJCeVRQYjh6U3owOUpHUEJMSGJZTkR0WFUtckJxN0ZjVEUtaUNueTRPS2pDMkdNQ0R5MjRBUE1zM0dQUXhJZnZqWlZSZmxfT0JYd25hMXZqWHo2TmdkQzVqYlFjSFVaRUlyVkhuZmV2bWFOdzV6MEhIX25QSl9fUnpXTk5SNFdocXF3T1ZOa2VsYTVaQm9QMjYwWnUySXhqN1ltYVhHRUtDdy11bE1iUlExUzdlTzhqSFR3TGJfY2JxdEd2UW1LcWpCVGljNXVJTjhPVFVHYmRMWnlPcEpsUENQSkVQeS1XUlA2YnBpTGFNNFkyVTNIMTRaNXctN1cxNzZEODdhS3JWZG4tSkxoMm5xbDZScFdIUTBORU9ELU5QdnV4ZXFMLXk5eXZxOWEwRU9tV2RPbnJxRF84T1h4SVdNMm9aWXhiM0pPSFp6dVFOdFJiREgxSmpBR3NfWGZGSkdHaUViTUJodS16NW1rUkNxME1lTWpPLVRxeTRkUGY5SUpWODIwMldTOGNHS1VxUXMzU2ZWX3RiMUl1VnNyV3ZzaGhZVDdVdXIxcTZ6T2Z1MjZ4UlNrU3JuQ2RDZHJZclVBbUZBMnpEdHEySm5vSXdaTlVmQ1pyN1J1NzhOMkZOd0VRMmxhWDRDMDktZHVUdmNNTEdpNWRVdEpDOTlZak1YQU9oVmNzNlBrTm9HZFBfY0hxaVB1Z01kNXBhY1h0TDJzNzhDekRCS0VQVmxNR3FVczZncnlsX1NlUzBNTkhPQURINlE4U0lRc0ViajFhNjZUb0Y2bDhDbFdjMkdnemxUZl9xQzY3R1FJWkdZMk1mZjFFNFNObGRQYlozYi1XeHNIX3g0WVJwdDZWRGJuRXJfS2tfSHdBTGhuZGdVdC1YYjhlQWp0cVBoLW44TFZfNmN6SlM0Rl9RQUpsSWc4ZFV3R2JBRGJCRGljb2ZQRS1tU0lyNzA5V3dEMi1TOG9WQ0FiY29FcHJvUEZ2YUUtZWVONk5UQTBUNVdPbjB5MHMzUE14UnVTaVkwazBKdml3ZXAzYlZEMjVqWnRXYjRaRFJSUjh4bXMxZTlkNUNicDNJaWowM1hoTGZsWDJjaFAxY0IxMXp4ZDYxVjFHVUVWMEJ2R2o2SGRnNGVmQVR1aWlGQzBrSW05REpIa2J3RTVKZzJyWENTVkw3dVJYMnVQSHVKTVgzVlhWenM4YVNJa2NDSUFnVHFzS0Vaa0hiMGs5UkVpczFoZU9QMG1KS044dXB4V1c1YUNwMWpuSzkzUG9tNW0zMHBXamp3STZneXA5alRiU1pKS29TNTVSMEFxME5BcTdsbFUyYnZhXzBpR2xNOEhVdFBSQTh4ME8yaWJoUUxxTGQtYUtiWGZveGlXNkM1elNBSXR4ODBCa3hZWFpweVlPZVdRMm5mVk9ZM1J5UDdWaEZTMnVhb0M5YzJNMHB6aHJVcjJ4R25SdnFncUVpVlE1U2lhOW9JNmotWm1wTnpVQVpDNmtSUUxLRE5pWDdiUm02cGhfaHdmRjY4OEJ6dHZ2NXAyb1hLNWFCWHU4ZTdNTmJDd1ZKMHpTek5nR1p6OWxMaEZ5MmVYYVRSc0tfT2xWVlBmclJ1M2JwSFBIc1ZfOHFaWEhnWTRsU0FwOUxuaElQRjhtUXdQQjRGcVhWNzk2LXZRSnVYZlFXeEh0WVc3RnNPRTVjRE92cmRfc0NBOUNiXzlzc0x1cVdobGlDbkdXSXNHU0RDVm9qa1NJWmFyRnAtNUg1RC1yS1h6bWRtalpOUlVQTllQdmd4YlowSW1tcFdoRXpoX3BiYW1ISnF1SGNEX2hack9ucVhoNnlIbzF6Z3FTZXdHT01Odm5ubUdHbVVlUXBQeDMtUWctamt4c3BNTkRVODBRSFFkT3JYMGhoaEJjN0lqbXhkeHBDV0ZObzFqZmdjYmNEamthY2tLazdVRnhXTDYzNjhfdlhWckFQbFNESm5maTZlTHhvWnJqV0RkMFVJMUhnSVBNbEZXS3Z6Z3lKRUxEbFpjLWhCQ01QMVJYU0szSTY0SWtOWHlEZ1NpSXE0ZUdrMU5xWDFfLW5oeTdSWVBXazhaNVRDM1g2RlJJOVlYa3JEVzhZOEl4LVJDTEZ4YXR0dmZBam1tTjJDNGN6LWI5ODdocmZXXzNEcnNRQXZoaTNmWTAzVDZLc1AzakFkb25JWjRuVUpkaGhGN2lHbUJsWnBDN2dsbWJRNHZJb3cwQnBWQ1J1bFdlekV4Nl9aNlAxRU9zX0VzemZWRWpXLUJBQzNaUjBKNDRuXzV6dmZXV0haRVZEOG1lMUFCQ2Zoa2I5Mkg0dGg5SF84bHQwRzhLRElTLWVzVXgzY3hYRlFpei1JZ2VacnBfRWNqSUpaTkRfY3ptSkZXYkdITHBVVFI4dHA4X0E5d2Z2Q0ZpWkVCSWJ0cVBBS1RqTi04VWoxQjRBRkpQQmJqbzRpbnQ2OEQwVVBKSG9yVk5kZlUwT3VYQ1MxV3lfZDAwQkNJLWpic0VGRU5iSktrOW9xR3BXd3VXaW54Y3dhSHBGa19NM2JYcnUwN1FYa0F4VEdsZV9XRXJrM1NjTExJYVhZZlZtdi1hOHpnNHpLZzI5OFNmZDdrR2tfMTlDeUpjc2cyZzVnV3R2d1ZWUHFFNWxPSXN0Zi1HUzdnNTBJZ25HVlVHR0E5RExvMFowT3RiaGU3X09GSUtpWFhMZEhZWEJNYjhlWGNpbkFpSDJ0dWJlcFUyVkRESWw3LTc3VEgzNkw2R3l0ZmtubHUwc1hqckFNNGZZc01STDdLSXFUZ2tuNWdDSVpuZGs4dU1wN0Z2WEJoWFNIYm5yemhpQXctUU5NWnZURVpqZXFOVHJUQTlSUTRzdnVka2drWUF4RV9aMGRTOC1DSnVCelFNZFJtdXB1dlQ4ci14dGcxSmFKVTlqZHh1d2ttVmJ1RWR5WXFsblg3M0ltempkT3dRSG9sazNmMnRmNDBPVEJiSmJZRFN2MVE5VU5xdUxsYVRLZmxNRG5CMnlzM3BwTThnaTl4Z2pzMm9wSVV4Y0o0TE5EQm1mNG5oYmpyUi1weTY5OV9UbEo0ejNtSUIxS2VuNm03OXhwVWl1V2xTbm1USjNGYlhwLUszX2ZRUVhXdlJCUE50bmFJQ0Q3X1JLYXBOUHJwM1BKc2gyYU1hV1l4bWx3RFZhcFlTWmQ4YTVfNDZuN1lqYVlqS05EeTQweElaNEFGVWdCOEE0N1RYWjZLeGhWNGJEWjZxVlNTWVpnUnduT19HU1l0b3V6Z3Bfd3VUVEFhVFlJWmRjdnpkNHRmeU1ES0c1WlpnN3Y0ZzV1dlJDVHo1ay1pb3Q3UFVSTG91NFprM1NoNVJYNGlaeDZXVTItcEJpTE1NVmxqVHFOUE1aUnJEVW40M0ZTWXRxMTVoTWVoZzdOZVhCSVhsVm41ekhUTEZJVmJ6TW9xWGdYelo4Ui02SUlvUWxlNURYQnU1bUhMMFY4R01mbmtmamlONGNRV2xDTkdYMW8zbHdRS0poaU1MZlpLVldONlc2bnZ0NlpmTGhTWC1lOWNDdW0zM0J1S0xDOUZZUTNNMEQyV3J6LUcybFZYSnU4RndzQWloN3lCRTZuaUN0Ry1naDFVSHJrNjlROHc3c01LOVRPM25zWmJWR2phd1NCcmZMQXlMWTJXZGJJWl8taERxaV9OcWxYMzMyRExic2VQZ1llLVhTdXJWRF9MOVc3THZWZzlJLUZFdnlSa2xEOE1SbTYtTUNfY2Q0OW42aER4Rm50MFhtbWk0STM2eGNaanNNeXI2Z3hrVkhYNU0tRlUzQkR3cERUdlFSS1JiaE5wb19WcDhIaWVwQ0hMaGJoVFVwazRhMmlMdWtaSEVwQkZOOXdYV1dlNjcxTlZmM0RJYVl5LVF4Sm5jWTR0Ti1oYXMxcnc2YXBrUnoxY1JDdW1QOXRvX0dIOG9uTm9TLUtKeThDbEJWVWRPTkxhLUxmR0RsVnZ0T3ctWjRGRm0ybUk5eWFlRU94NHZWbmdYemtnVVpTNmpfcDlrWVQ4c3N2dHp3NmhQWFRxZ0F3ZXJzTVpoSUNvdnR2WHF3X3g4Wkw1ekN4ZWhkeE5FdEg5eU5kOEc0UUk0ZzdHbXViaTBVV3ZobnJBYWx2dlBxYU04RnBTMnpmTWxOeUN5VVFBNU4zRERxNnpZa3VJSWlpOHNMa25jaFZQSjZGcnRNTG9SdTF3MUViTDFuemIzLVkyZ3hPbkRDLUNDb2dTSFhQMmNqdFpvdUVlM2Rnb0R2M3pKelp1T2t4bzg3RXFsUWU0Y3FUc3htR0RpcWlVVGFzYkxUQTl5a3FBcHhRWjN4UVdFdF8xa2dnd2wtSEZUYmF2M21IekxVcUx5X1Jkb3o2UnBycXZQcTFWdTlKRjFvS1FlbFg1NkoxVE5DQW9YaG5QNl9PZDlMb1BpR2RhSHFBX05vajR3SVpYcElGYlE1bTM2N1NURUJncXNwTEJhaS1ZNmI5M0xtOVZlb2twTGV0Sk0tLVlSSjdjZUNmU0ZOVW40Q2V5MUVISlJESVVOQmUza3VLWnpTaWpYUmN1RjVSVE1PemdnOU5WZGNFMGhrUGJtb3FQNjlKT1UybzZ5cm5RT3F1ajVnNWxQVER5QUtVSFRpOUhjNk1ETzljUFpjVGxWYUFNeHBPdzRqZHlma1ByT3hDdGNMWjNaay0zRmM2emhwejZpemtoYW1laGFKU3Y0OURoNU9MbHlpalY2YzVfRlhPUVBkS2dPa3pjUEtwLXo1bE1pbTk2elpMeUdqaFROOWhiWTFwU1pzWTZ4bFZSMUNCUGdKNUpVOGZOYlRCd0NiT3Q0RGt3ZzI5RkVzSV84YXNCbjRqZ2UwbGcxdUFZMklkMGlvNjdvYmpSMzY1eUxBYlZpaDZsajlGS0w0c0Y3TnB0Z3FPZFN6Sl9UVnp4aE9JT0lEM0xqN2FzT2NZVmZkWE5EUl81NnVBMUVoVWk1d0MzTHF6MjRvXzZpS3BhRExZcEZlWXZrWXR1TVVXOE5HUjg2NXNCS3U1RW1PbjRUQ1lkOW5BY0F0bUlrOGxkZV9VQ2ZXWlBFUW5RSERjTTdpTnpKRmppVGdrRFlGeUowNTVnRFBrQTNyZGo5aWk1TWYwbndRYUxpOXVSMEFFYS1NaDVRMkR5bjU3Yy1kRkJGTlVhTk1CTlAzT1hDaVF6OHBEb0JGLWlwQ0lVOUxNUmprRmJyc3pNMWllWW1FMmNseVNsdFQ4YnpvWFJSLUs1b1FsY2p0MmZZRUpuc1VOV2JENzJ0UDR0X0R4dnFrOGk2Mm1aZE51THVLV3NEN1lNaldBdE11d0Q2M2F3Z1FqMDNzOEl4Y01hZU03YVdyaEk1TERQbFhnbDZYcU53RkxwUl9HanBmNU5Ja3ZKSjJwQTJ1aW1sR3ctVzhsU2dLZzZRdFhWYjNNdDZyblFtb0RsS1ZxMW11djd4UlZRdmgwTlhzSjhfeTBpa0FZUklZYXluLWZYUG9jajRYSTZYam1lVGl2MmNUVUs0c2xwbGt1Zl9CaFFGSDVUUTYzeXJ2ODFMeWcwVW9jcG55ZlB5UXV3ZWRkWEthaEdNVDFHYndQaDgwVklKRzB0aEhfZ0FwOTRCOEtxb3ppbEhWR0otYU5HMUJ0MU9IZE5ySzdGZGNkaUxNQTJVSDgtMTdtTzhCX0w4d2ktci1QZGtSNkQyXzdBWTVNb2tpZG9lM3VmaFo0a2MtWWluRnJoT2lmdzhBbWN6MmtqTDVrNVhEejN5RTNIT3dFdGZYUDV1cW5BMnI0YmFvTzdYTTBjWlFybFM0QzBfMXVWUS1keXYtbm05bjhEeTZFT2VUcWxxUV9QeTEwTE9raS1lS0xRYWZyQllzQVI1WG8tTDFIWEFKTm4xOTZFaFp1S2Zld2IzSEUzbllhZy01aEJWdmNRUGFnSnZMNlhtS2VQZmNybl9wNE9weHlRdGx1NTM5dXYyU2tVUzk3bDYxOEczYWd6aTN4V2VoZVBBaG5rNnRnckRyTHR2MEFoa2RPdmVEUGk1QktwSWdNSVFqZGFKVXBuOHpwaXhWcmVRSjFDTF9sMDlSRnVhRFFsSUVyaFlOamIwZzBYaFFkbkxSczV4RWRUR2trT1J3d3I1aHk5TUlTNnZ1a05QaGJSajVWTnpDNS12VGR3S1BDTG1TU0NENzlQLUdVaThYSWVacGt2VXV1UkFLN29VV1pEdFYxWlNPalVvaDNQekxZQkhyR0JnS05FQW9ZSHVJalp3VWc3MVZKZlp2ekVQSERvcnJWaWFDOGVYRlNsNTUtM0Qyd25NenNnTmgwdTVxclhST1ZvUm5KZGxXeUdESDdhd1hUSnhYNF9QOVNBWXhnRXp3S3B2TUpTTlNlT2xUVFJFV3JXT1FGVWVCSEpPTzBCVTZjeGNrVkozTG9zVEVyeW9QeGNDZWJkVzFhMndBVHlqNHZhYmFmUWNPNzgwbzJVaUh4Rng3eDJPQXVfaG03NDM4ZnA2LVRMa09yUDNzNnpsNExOMmprQUU2b19BTXFySVU0MEVTYzNBVndIMHFQWlBJMVZ6UXlvalpDLWxOMDFET0dmU2ZWY1ZYY1lWbHlramtUb252Nk5xZjJPZFJwMnVhOENiTHhGWEp2QzlJUExPNVVGZm9fc0ExY2MwWklnTXEtZGVYaVIyV2lidXBtZlZWek8yY3NyelZuM3JCbzBhUERHd2tEQ2x1dE1PR2hMbTJfSEpneU5sWktsZXR4QTR4YnNMc0NpR1ZNanJWendFaXo4Qlp0cW93ODJlVG84aDE3dl9xRVJ1aHgtVzM4SlhMWkpieXNETVg1X2hkd3VfLWMzcHdscTk5LUtjTUlwMlNkT2k5SWxNb1pqU1hIWFZOZFRTd2poWTM2QkNzOXcyNXhOZzY0d04wNUplWE9nR3hQV2Q1bzBTMGZSYnNLOGN0amp3QkxwQTlBU2tCb05xMkhTcXNUV0FhWjgxdllUOE9pRVB3Y2JrbHI1MUZYdGwyeW5Fc21MbXRMQWNtbkxDV1VhcTlWVE51MkhUWmtuYXpLWXM1czBHQVItMXlwZkhVekZ0bFNfQkZWWURNTWtNbC15VUlMT2FlNjEyMUs0aTFtQlRkcjgweXR3SS1zV2t0ZzlyNXdPVUozYmtWeWo0MmRuQmxBY0FMUWt1Nm5hUm0zU29BZFp0T2NCdVZjUUgteVNDeHpsdWQ0aXhXek94QTNGX2VzV2VPTkNsNXIxc1NBaUgyR2FwQUR4RUpwQVRfR1RHTW00ZzlzcVpOcElkcXI0WDg4Z0wxZ1k4c0lwQ3JDd1IyenhjMFUyenpmVF9MQTNVOFFwVl9FVGEyV0pQdWQ1cThMSm1rYXJMTlV3Ymhla2kxaGc0Y3lWQnI1QzBWQVJXdS1NWkZYdUY3MnNfTTQ4cUpuU3pfMTV6Y25WaGU1RUpxa3o1Z3lGSkhKLVJjWG1CdU4ydVd5MnNOcjA5QUFUaWRhdzZPQVZaeFlUTUx3akE1cm1iZlNPQy1BVVhkUnRjUjJRTEhPSUVPbk1jZG9NVktMSjlDdkVlTmk0bC1ickloLUM1SDg4S3Zua05Jb0ZaRWgyZXNGQzE2ZnV4WDlXb0kyM1JDVnBvNk5ZeHgxQXJqLWhqMEhyV3h3RThZdi1RZURSdXFlSkJJXzVHYXRYdlJON1ZCUGpCTEkwMDducjdrVmlFVlZSYlk4MjBJZm5BRWFZNTNyby1rUkdwbFpFd1AyWXlfNjFjVmppS24wcmR5OGZxSV9vLXpEaWI0Z3N3dXZoaVQxZ1FXbU1GWnRQcFRVYUsxNllRT0FNRjNCWTBNZlhqb2JzaGFscS1oN0ZWMTJMbUw5SzkweGhsdVhVZEZEb0FXYWtpLTV1NGl5UGhrOWlRNzNvaFM5S0Y0NVBlMzFsZFFqXy1OMlo1MXhMd0l0cEVNWDBSNjh6NFBXeldBMTBqSko0VXpIV1I0Q3UtUkZhSV9Ock82Z2JVd3RQSHJOcWh2bTZocnNScGNhWlJfVWJfY2RsZjY5T2haUlVJVlJkREoySzNLZjBsZnoyRGt6TFAyZjhSa2t3RmZkZl9RSEs0OFAxZEJCTkctQUJmNVczbUdUSWhYTUpVU2xnZ25IcUJZS29oOUR4d2p4Y2xtVnAzSTVLbkkzbm44ZjFsLWxKeThjc1dObS1HaW16TklwaEkydzRQTmxwOGN1dHJuLVZWZTRHZjJTZV9QOGZHUkMwRC1Lb2xuRlgtZC1kUWpaN0gzNVVDWXlVd1RaNlM1MDBkdHpPU2FjSzVnYUREZDBsZm5sVTZEZ2RodTVRY3owclFjWV9NSUpNLTVBV1JseUtOdm5lMmp0WnRsRmxzTEdaWlRrdDJYNVJTWU9jSTBXMWNKdDY1aWJOeTB2TllfWDMxTFdPbkJRVWtlbkw1cUxYTHkzUTRrWXg0cHRPRk8td1l6aXNkR2Z5TE1nZk9JLTN2NHl2WWY0aWZucTQ1b2NGMVVaSnMzMkpmSTFXOWdyOWd6TDlINjBabFY5VklLZDlJZGVfOTNaOGFkUkZnZ3ZfbUx3eVAtenVoeUh4eEtvNEdiNDUyWC1NTGwzSGtWbldJcHpNVUIwNEZSeTRHTjRNTzRFd05Hdmt5emdVVFZvN2s1MTE3X1RnazlzUDk1X0p4blhzbFduYUliLVczOGFvUlVUMEpFWksya2R1VUVvcWNCWFhaTUFybDhSWjdmaS1NRlNkZ2l1NmI4U3gzZ0puZkZDLU82Q21kT3RlT094X01GbDM3YkpaMUNHa1FSNUo3VEZvdU1nVXl5eTVLdllycjgtUERPVERCMC1NcWdyb3pJdU53aHh2dENMbDRyNHNQZnhkekdlM01TNHpSVWN5cW15ekNlcmUydUN5TTdWaHNvY3o4b0RsaE5NTHhSM01TRkNaaGtaeTNxM3JNTzhKTnRSSWp3OG9RbldIYklSeG0ybFM4d2hWWEVvMk1kLWdNYUdpUlFWTzVfcVFhaHpwN1h1RVlpOTBMYlVDaE5FMWJRalF2c0tFUUNQUXVyRDctNHFTM2dWRWV3NS0tbGZ0enFNZm5UczZvX1czZU5WMDVJNjhTVUJpWmIzcU9QSS1lcUg3WFd5aVdxOFlPSlVXUVFPX1RsWnpPcVNqT2NsbTdpWi1heHpRVHBseUhPN0ZPaC04Umc2WE5BbElRWFRVOUEyRE5hQUpYQ1UtelFkZGczdXduY3g0VWxRNW9Ob1VOaXJma0hJczJxbXhoX1NhRGM0RlRYVXRHeVBGYVFmYjdmWlVYR3FERnJneGV6TVNSYlRSNEJoTlpHZE1KOE84VUN5WTc2TkhZMDIxYWdwWERQQWhZRzZuS2dxWXFQSmdKeFdQZTBxX0d4b2ZUWjFMR3VxX1RBemNPVUNPZlNsUm1leEx4c185RjF5VGhDdUxfMC1xR3kwcWxVVFNPTGhYbUE2RTRKZjdXck9nZm9ZcG1HN25ranE3LTMtTFlReWJjY01VamUtQnhSM2lrVG1lUmpJVTdVT0lxSGI3OVF5ejJjVHQ1UUxSU1YwNk0tY2VOelQ1MXJpOUFvVl9nQ0NLaDdLQ3FTbTJRWWcxeThlYVZvYU1sdF8tTmlVSl9zdzhUb3pBVFozN0VIeUszaUZtdTU3dUFZLXZuQkVmaGk1djdMeUU4SVUzNktBM3JYM1NXY2VtZHVFWENTRFBlN3BtakhfaDNfQnZjSlRTTjQ4R2ZmeUdUOFpzajhYU0FGSldjU3lIU3d0U3lHcVBmUWNJUEZMc2psbVdUSG90X1FVc2VlV1dvdFpIMXA3aTlTbjV2a1Fud29BbHV3dHhRRTNCWV9tZmhLZXE3RG1Nd2UwQjhyOU1qMkIxTUdqNV82dmhCYi1LbXh4bWJaZ0FvdjVWUDhLT1BLTDVPSnQycW1ta2cwUkJoQVVWYUFVNWRMOV83Y3owYkhBVFZlSVJJQzNHaHA0Z3ktVDM4eFZ5UzhCeFhrWGtCTmkzVEhoMlBjRV8zRGRVa1BEM2RoaEJYZGNxclpzOUNfQ0N1NUJIRDhZVEpIaDNiby12WEFXd1p5UkpKRjZvQjRtVVgtX3N1aGdULXN5TTdMX1UzTXZ2Z25heEFVa1ZuXzVXZ29mTmpFZW5MWENfOUdZRWlFVng5ejl2SEJfWlZNTDMyNklOWTVsR2RyalpkcmhkU3BCUklPd1hjQk1MMFAtazVYbW14SW0xdDRzbEdocGxhZ293QnBQcUI2dmV4bnJBcVF5ajliZWlLbExuc2Q3Vk9fSW1IcUxtRkN3TWo0aG1tcTllQ1JDSDBWYjVhSnVoRVRoSTAzNWZXV29SUFktWEpETDhFOGRyU2pyQTJkdHdRU1EyQlRzVHJXem00R1M1amFYRTdJbmVzeE9NWHhrT3dfRXpTTEhiWWd6V0FYSzBWY2g4aGd6NzFxNWN1bW5VQzFpRm1kZTNKbUd4bmdyS1I4QmFvQ2NWeUJCWEtXMWZmdi1NdE5PZElUWUtFeExqanBaV3lndTFiTDZiYkdiVGlIZF9wRTdBdlNaWTJfdHdnT0NZQ1hvS0d2bDFjWGhoeWQ2WlNaR0VxSGZza0dhU3hnZEFwRHNVd2cybmNSdGM5cFZCVTdwMGR6SE00UTRybWcydG9vLXcyaUtRbUduTC1wT3VzSHFFb2UwZERGNzBDWk9oLXlZMjF5M0ZiVXVpX09CbS1PdmtBVk9ON3l5bldIMVB6d1ZCWVhPeFNla3laSUM1THR5dC16N0lSSlZLZFhIWWlEQXRHVXN4OUcwUF84cTZ1QllxTi1PTEVQRm1TNXJZT21uSlktM0JtRUQ3N2I2cWdyYlROQ1VSWi1pc0ZZSUczRFVjY2VsZlBhbWZIMFdLcjdROWNtcXl0cktUQkRrcnpTc1VKVG1QWGxBSFpfZzdkRk5JVUNfdnpIRVJIN0FqZFFGb3QzVkx3eWpDdmU1RlJhU2RnUV9jaEkzMUQ0Zm9XVE04eWZUSTN4SnB1MjNLaTQzM09xSWZmbXBaRzhKSEVJMThTVXV6Yk5zZDhiejR6VTZFTWhXMG8ybzRfc2RSd1daajlBWGdHNVVmTXJmMGpOWXd6LS1HNVlIVHhCdmlzbEF3djhscVNhM0NQcFhEcVU1a3UtZXpQeGFPNHZXclotZGo3bkQzOEdQcmE3OVYtYzhuX19pMjlPYm1hOWlnT2piTHMtTUlfVklnMnEzY3lNdGhTS0FvWlhxQkZFaGNzNmVlSzdhM0Ffc0JtNm5FSGtNM29KY04wdXpGNGdUYVZJNkVrRXg2SjlpM2pwQXM2dV9NUEdpMkwzME5XWlAyRFk2YURrYVlkelllMU5BSXg5Vzlsb2ttN0FEMHNUYnZ1ZDlmR0lUSW02dFk4ZWVzcTZOZ0Vxd0lIZFJHZGhsdmRMaVNvYnpUcGhNc3lLdXNxRU8zVFJzWF9nQ3BsaDVDMm1NNkI1anJrZG5aT1R0Z0V5RTZvSF9rdlBKWk5oeDlDN1J3bDhkaVlVN0hVLUkzT3JOUVNqWEFkMzY4eE0ta2RZUlRvOWZVb3FjaFFRTG1MNU9Mb19pMHRnYS1wTW5PQkM0MEtxR3lQWFk3OGNkUGJnWm1GZmR1ZWltdllid0ZJcm1iS2pzWDdscTE3ZjRpdFZXN2hjUkRfQmF3Q3RZd3lRNml1RmViQUpmaVUzNUFzcHFPQ3JNX29qRXYtZlN2MW9zRk5GWTZmZzU4NkctZVF1V0lLWENaQUxNQWpOLVdUQTQ2bW1zMFp6cXZ0c1VaRkh6S1YxbFNuU3MzMVhTWVVNanhPLU9tNi1DcVpFWXJEcmVzUHFacE4ybHd6Rk4ybGRLeW9rOXRpU1BwQTFwWEpMdVRfS1hNVnhzV2dYSlEtekItaFlocFRpcVJqZkhBTnhqQ3pZSHBMUnpmYV9ibjR6c0c4Vk5xQkVnd2U2NENUN0ZaM1l5ODFuRlhENWxIT0JqVUZERkZJMmhUaTRIdWkwNzdtcGhMSG9SYVZLZEpOUmJaTUUwbWw1Yk5RMHNibS0xbVRlOVAxVDZISVFCUG1DdU5fZkNiWldIWFFhR2FETkZJM05hR3lXaDE0cWZEU1p6QkVmaGdpSDBiQlA0ME9KQVpnMldvVnZIOTEyeTBBb3B6NVNUUWs2bkhjbGpvN01hNGFla3JBWlg0a1ZYYXR1TFBDTWNXN0x0UktLeDBGcW12LUlJWjZfRmwzUjl2TmxBNjNVcVNLcVhTYVU2bEtrQmVsQ28ybFdvazExRnYwbjBtaEZoQ29XeGhBTFFqN2ZycHlwSWhkTDNLV1ExaW1LdVVwZUctdk5IdjlBMkprNFFtcTlIUUxxOUh6eFlmV1BWcnUwbjQ2N3lLb1p6aDFpRTlIWHBOYjR5QU1qQ20yTGtkLXJTMHhNWk9WcGMyQkZlVUQ1c29xUDhiZW0yMzR6UW1kRkFqdzZjMUJxcm9FUl9YTkxVWU9NdDFGUlh3d1ZENmE5S3lVclhnY2pWZ2NSZnB4bzZTYVBXY2ktNEhBQVRkeWpIOTg1Sy0tZFdUYUNQUXhxSGRfU0pCVW1acWlTR2haVEtVNi1wZDhZQlVVZ2YtdkxkRzlmNC1TYnozcGl6OXB3UXFZeHRYcVF0RXNCcndXQVFxSlBLN3lUbnNfUThMN3FoOHhnaUhuYlpfSXZNVzdWa2lUYnB1QV9uRGFwTEdfb1lkVDFKTmxBYXM5T1pzaEtMU3hhcVI5RGpqVW5jUUdra3ZkXzdYX2RULWVxODNQWVg1akNsU0xQLXc4S2FOaUYxSV9DdkhkRTNkc0VUcTNlQ1JlMGxRUGNBaGpkUjkzaVZwNkZ2MENFYXpudHNGbDZtSEs2RXIyZ0NDMTF0Q1VBQTlxa3RhSUJrYmsxTEJ5bkhJT2c3Qng2QWllUGpIbk1sZnNnVlR4UTFxQXNPUjk1SnpoT283UzdZR3pwRlZEWXV3NXI1Zk5faXdUVktfbzZEZS1XVjkwblZMSVNYRHJQenQtWW5XSEU5Y3dVOHZJbUFQN205b0xod2s3M2Naa3c3TGhUVHJIZGFCUW81SW9nc2VoUjRveXVaQlEtRS1ubWNuWE9IUFFTNGZybDJTWWcxMzVZWUNMM2ZFSHk0M2lFcXZGaW5nZnlQeEcyVHFQY1kxWi1Zb0FramtTeXE2VUZNbnlMalh0TTk0SmlxVWVadXpVczEwWV9SeHpSR0RsdzRSQ1ByYVhjYXY1OW1rRWdkcTFETjl1eUV2MTdaS1AwV0ZmdUJienBtSTd2NDF6c1pFNGJxbWdWUW8zRkN2NHRpTjlWM0NhTTd2WnEtRHdfOXkyallxN2FpLW90N3V5bVFqNEdtMDJMa3ZMdGxmM1Rwanpra3dHRExKQVBNX3o3TjFRbXZ1MnByXzZxZXBUQldUSEJIeExvWXM4eHZSdXNqTUVjbFhnMGR6RHk2ZjBTNWQ3UUJhT1NhNWpDUTUzcTZjdURQU1hlbElKSGVaeWw5MEpnbUctY3hnQ3RNLU1TS0VkUGRkR1ViYjE0SXFsYTBVWHc0dncyWVVKRi10SkRid2d2TTdXdkRmSl9sM1duSnp2Rl9hOUIwWkxjNHRYN1BpTTV4Mllrc3dac0lwNHVUQkVlVHFjSkF1WGQwRW9mVjZ0OGJ0VHYtNEJRaFd5VGUwTnIya3A5QmFXaDVyVVN2NzR6M1pISGtYbVdjcHV1Mi1Rall6aGNIVkdEMXpQZnBKby1XWnNiSjlPRV9WUXB2enR4NF9pRm05bktPeXUtMHRjWTZyZ00xTk9xQjBDTG5uc2RSNHBEOHJXVWJTblBjSmgydi1RMFVNN0lUZHlkZmoxYy0yLW95UVkxWEJCTFFyX3l4ZEVoazh0SndVVmJjLW9iME9xODFybjVUQWhLV3ZVZXAxWDJiLW1JX1J2Vm5PbU1iejZ4dXBETEZUREI0cW9iT3ZUZG5Gbkl4LUpiajVUckk5cW16VlphRU54MndiTzVDcTFDUU9aVFZjYThaTUtEQWthZXlZVWZfZ0VvbGM2cHozblpGRlNTaGxNQmwyRzZXVExGTXJUYXFMa1p3MDdhQXR2Q21Vdjd2RjZ4Und1UV9rX2xsWktoanBIdnhQV0FwQ3pJei1LTTl2WWxRM0RVTC1Ob3RidWlBSUIyeUVVc0tMdlMyVl9iOERzZkxxTnFacG9kU2ZScUJIeXRvQ2YxY2VLMnE0THA1QTRmMkZHR0lFd3RITGxfR2txeFdqV1NXeUswOEtwdjlpUlcwSzBFaDk0WS14Y051N3ZKVUxJZThfNVQzR3ZGRUlhaFZza1ItSmVXRmF5bXAxU0k4QVJZWXdpMlZPRjd1WGQwUmxUVXAtSmFrTnNxbmhpcUhfa0ozZ3kydGpVQUxzRTV5bnJnbUptODViV1FhUkEzT1F2dlZwVThFLXdUYXAxNTRKeWtKU3FEWWFlem9nY0RFTmVDRzVyOWFtLS1LaGhkclJpTlZBY2lzMEpVcmJsTFRwR3Y4Z3M5dU1fUWgwUF9ZbzA3ajdMLUlfS2tTZEl2ZG5JdU1Zam1JVkU0eWZxQXZGbVhrQWtHSVg0RGdxOFJFLVFtVXZfSjdidUpFU1BCcjAxSTRBZVVhLVF5UnRhdU93dDI0dEw4WDFsclVzU2djQnp0c29vSUtSYno1MWRTMm9nMXpkS2hRcENoVDdhWTcwWkpiSFVGdmZUNkZta1ROa2Y4MzhPZWxQbC1XLWlWQm9qWkRDYXFsSUlOWUFmb0pabm96NzNSYy0yQmJ5MElwR1RpVWRJQ19rVmhaT3p4dG00QjcwMEQ3Wk5JNU1kcEJOM3JzeXk3dVplSDRydDhMRktPaHBYOXlyaFRyQUFwWmR4YzdBcVdjQWpHWjNmSko2NjdnY2pPR2NJQzZsa0dLdTB4ZEZSVlNpWUpJeFVHVm9xNHYxcVFxYkdXckt5b3VpMHN2ZGNVeFh6dW1pSEcxd1ZVajVpREtwY0t0bWIzVVB4b1JpWnVKZEJQR1lDQnY5am1oWWx1UlI5dlF5UUFlRU04TDBKcjMxdXpENHlMd2F1aGhWcW15WnNod0JCSXhiMUU0M2RTa2lOaDNhLUFxYVJSSUJaRklKTGVsVC1pZEt6RDQ0bFNqRFpmc2dqcUVoS1ZlbkVZYUliSFlKNklvUWdTWS1jYUZHZ01MQ2N6MXRRY3Y4NmhMc1k3bUhnVUUzdndzM3NkR201X1A3WmRRazRSbXB2WGtGNmNWVFdGQXFUdUFQME1kZTg0N2Y0Rm9LMWMzQnE5a2llV0s0Y1lQS0cyUXNUSk52dEdMZ29aUG9IRkxUbGRVdjlQWDFpcm9jYVc3ODVSM2lpM0FTcDdvUXFTZWt0X1M3YmZhVGlLV0JUMlB1UFhQdXI4VlNmNG82QndqNm1JQmZOY3lZM1VmTHk1b05MaHIwWFg4QlhGYnhUQmxacUEwZ001Mmp3dTBMSkZZcVFqc0pGUHcxSnV2R2hQRFd3bFRWMmdDOTVlbU1BZU1nTjZpN211M2t5YmdBckZlcDFzcXZ4UXp6bnVUTVJ5SWpscUxOVWlDZklpeTVFSnlrd00tMzI2SXBxai01YWhVMFJBb2Ftd1cyMmV5Y0dQTm4tODhYWWV6R19Pb3k5bGhOMnZQY0xZVVNaZ1FnVEVnWXBNR0xEclFSWUJmbDVjRHd2Nk9NS0w2MFpnOFZTc2k4azZRSU1ZbmU4RVZSNHZlWUVVSUl2TGVGZ0JyY1RSTzZFNTZRa3pyWlBsZEE3ZWJDdVJSVkJPMUNjcDRuX0RPOWhGUWRfdUFvTFoxcnRTRC1ILXYtWXk2R3ZDT0JyYWktVXlmTm5DQmJtdHZtZjRycEdPcEctRjFBUjg2WHBUVjNubktlRFlGNUlLMi1Gb2NlQUF4ZzM1eUtKcEVtVlJINWJyVmxYcVVsNzhmWXRaZFBtaGh0SzRVYVptYUxNOFBhMm5oa3JGVjU4eERhN1hQQVhjd3Y4ZlNla1BUTjFRZGxQSUItU0VxY1dVVmFWZUcyV1BDajVHbER6bjRLQ3ZUYUVvVzV4bEZQREVvZUE1LXNrbmJGV0Z6dk82cGtXeHh1RXJhSEY2QnI4T25uYTZfNkJrQVNqRm02X1J3MVExTHYzRUxWXzNzVWdSbXB4a3VIdENmXzU0TGEwU3F3dFRCRmtOUDctX0M0eWE3bVAwbUYydzZvTmROZThxNXR3RGEzVFo0YmRWWTlSc19vTXp3eERiMUlzSklodlViSG1LSC1BUVZhY3R1SmYzeEhTOGRtRUNNbTZhTG94R0dOSkdJWUp3cnRYdGNEa2ZCVm5ocV9Sc2wyc29mdVJBbTA5M0lySzFrYmR2WHdReEdtWXRINFNhdkFTTDZ3SnM1NFNzakt4bkVxckYzcDRqVU1SLWtIcVFKYlk4Qm4tOURfVENoN3BGcEJ4cVZCZURLMmhIb0h4U294amVhUTNBcGlXbk9TVXZQb255YTVaQUhOWWFya2tBaGJJTElqd1hLZWZKRGZZX3NQZVdpV01DcmdrWGZJWE52bTZPakhSMTg5bVdYdktkdWkyWU45SlZCOFJ1N2UtNDE3ZDI1c1EtQS1zQllTRHlRWk1CQUdFYlRYV3pfYTY1cE5wa1BxdC1GWUREbVdaMjVpY0hpQmk1Zzd5YVFxZ3ZqY0wxRjhkTXZIXzd6a0x0QU15djhpWUFkY2hxMkIzNXF5eVQ3YWdSZjlVaGRGM2o2dnhoQzVQS3FRVEFhV0M1OVVkaXg1Zlh5SWNSeFBrRnp2azRvamhHX0FreTFVM2JUbWlGbDhjOWJkQzhxbzEyRkRZZEtlMjh5UkQxUTNnbXllRkJHcnNUVGQ4aVFqNTE2NGR4X3VKM0FoWVZDTU82REM4VDhNWFJ4Rl91UkR2alRRT1A3c3lNMEtYR05Ib05WbWRzV1E4eFQtTldXQXdOY0I2RG9GWkM3U29xT3otUklWdm5QeGdNWE5tT0FQb0pueFEySm93Q0FOZ09aNDN5YnI2dHJIOTJYVWFfZF90eVhGWHRWSWJZOTRKZG9Oa3VIYU5pRndmVkU2LTZUVXZMcFNoeVYyWGw1NUktbWwwY3JpZTFHcVdIMmE5VDRlSG5WSkQ5cXdudHhDVHpaVkRSV2UxRTdKUDVDdzZmOGpSem9rUElDVWtOYVhnb0c1R0VCMjRyVkFQOU1uVWtfMWMwZURWN01XNmQ3YmktOTVEZGIyUm80NFBIYTRoQ1dfUmhhM19xYTZVQU92NTYwZjR4R25tYVF2LTJJSF90Y2dhVFpJVGdKNTc4eDZyLUZIY3ZQa1pLSlZGcUVYUHQzWjNzdk9CelI0QnVUWFR0TERtTGt4WGctQVNwbWZxazJ6bF9tR1UzdFNmRXpJY1RQZ1hQelN2QW1WS2ZiWURTT2llSHlGdjJaaEFwWm5pdWVMQ3M1NEpBZHg1UE43S3JIQ0pGcmlXaEFJd0FhNkh0M1luSHFCUURYNktBZ3Y4WlJ1VVdtc0dLbm1RY0Qwb3MzN3hLUGhqdWt3V3RDMHVRUzNFUFBXZGNwRHA2N200cG5acm9LX01yOWdZREJpa0FrejdMU2hOUDUtZkhyd250Q1hYdnBjSVZaSTFWOXBmWWd0THJ5cWNUZ1FUeVl3Sl9tbUJvSU9yZXZkNHpOX3hMUWNwREluSmlJeTRaMVBpMEE2b1dXSTBGQzFjMGFfdHFlRk80SS01blA5emd5c1ZMc3ZFenExd0FNZENwVGg0Y0t5czh6TDREU21FRzRMaVFsR3BjVHJxbXdwcWhYM1F6WklETS1SX3h4QTlSdDcxSFRkak9iekVTSldQRzJSMXZHbjFmZEZxWC11TnotTTh6cEJSLTViS1QzcFRvZ2hPeDhiTzN1cjExbTU4N2tTOUU1T3dfNVlpa1pYcV9jQ0hTYjMtRy1tSExwZDlic093WksybEh1MklJSFNxOHpaWGYyQmNXU1JSMmkyRzdDckgtQmdsRVRyempfM3B1TkdiSmdBWWtrVS1UeEZxWjdheUtVRGptbHFEVmR3eEhuYmRyQjVwOC13bllDeTJFWjhoMXdWdWxUT2lNal85WExqUVBDeW05dmZkNVo2Q01SbDEzMERmOGdoMTU4NUx4UVBCVW55UVEzbDl3MWVkSG1HbERXVy1ESER3Tl9qRlVjR0hudlpscTFBNzA5bS1LckVuYVUwaEVfM0RndllsQXJBeFhPdjVwdGgwWHNJcHNyRWV2LWhuSkJBaXBsQUFRaWFuMnI1V0F0clRvbXpod25SYVpJVGdRTy1yTWZYU0lRX3NrdWhrZEFJcWxiRHh2cDlnSnRVNGxJT2RZOVVIbHBnaDgzRDFUN29BY21ZTlZMa2VQY0hnc19scXRvZGlNM2dueDRwR24zekxPZ2hWa2hVVEd6SjJYN2lDNDYwUTFZOFhaMmZjSXBYZDZuOHBCQkVzQWFiTV91a0MwUlJhcmFNcngwcmdFVm1rdnRFekJOVVBpYTg4dEJfdHhsOVNjbHNZdGkxYnVCckJkRXc5N1VFdlBJd2RuWE93NnpJdHlxSEwyWG5kMDM1YWRXN3c2Z1l6cm93MElPcEZMVENVY3ptcndsUWVuTnVqa0FRanVKemlzYnN0LXpJVUNRRXloM1dGa2E2RXlKblJ0aGk3N2p0OGVMcWJwOFZVX0Y1aWNEZGZOMWZzOFpveVFteXBOelpnNG9QTjlRZVMzdF9oNF9NSzZOX3VfTlpQOXEyRi1PRndZS0VSQTVwNlBDLWk5UGVqNHcxZUtJTlA4RXR3YVJZV0c0XzhGZGlac3plRTE2SmVDVjVNX3VjU0I1VDhObzB3eFdrU2lwUWtpem5DNnFzbGpSazVqTWpNZUp2dGJMa25CTC1KNWotLXRmcTZWMW1FN0M4YmJwa1MxYnJsenhJZVlabmRNZ2tNdTZrZXRRODRFSFM2dnJHbGlLTW1Ybkx1UFN4SXJQWDN1TmdzcktiemxPOS1idlB0Wk5TTmFxQXhjODlVTUxNNDA4ZXJOZ3hMYWR0N2JDbGVEZDVaYmZiRDJjU1M0VGtDMHduN3BlQk9pOXNxUkt1SG5zV3R6cDUySER1U3J4cWQwX0xBX0Z0WlF0VXRUNU5MY1N1T2p3WVFpV1pUendSSWNGUEN4R3V2RDZJVVhZZXZlY29rUlg5akFTNi1aTzEtMnp5cnlPMnBNbi01NFhoWjE4ek1odnk5NmpaYUlkSEtMejhmLTU1aFZDOW00R1RZY1FGQks0MXR5dkdSVWhabjIwakE5V1l0VGNaam9Zd3hxVzVsbkpndF8yWkxYcUhiMG5GQU5nci12cUhTYWk2RGdKMWZneGV5V0t3cHpzSDZVQlEwSFFmWmI3RXNQQ2FiT1VmWGdscXhsUG0xSzZBZG82OEpZcXNLUmJtSVRLS21vRml1TXNIY1lQR2xSTzBwUkx4LUlkVFI0Q2F2cWs1NmZueWlYVE9zanJKNGE5RWtIS29saVZYS3pxb3ZfczlhNHF0ZEZ3OERMUC1QVVFVenhMSkhkZUFFTkFJYU1LZi0yNmdTZmZjSnhyNXFGMnhtM0ZWWXNNZTVERVVXSXZWaENyclFYaEc2SWt3aUR5eXYwZnpWMFJSSHp5ekdac0x6LXNwWUptZUZiZjd4OGN2RG5ZVk1tUnh5Rm0xMHFKdXZSNl9RQS1sMnlxZUJjZVhBdlBLSGNEUDFSNXBoWnRLRUx0RnYxTE5zX08wNHFNYzJXeVpTblJGQU0zNk9xQ1NuMFUzaXU4RlNtZVVuODhpa3UtSk4zck00Z1EyQ24xTVdGVUU3WGpmS3RyMzY3cm1pM0hPZHN2QlBfbmZIV29vU1E3dFBkVzdhcmZ0bllBNnVnTDJFU3BtTkFvVUlVSTYteWtqTmpZeWF0TmtSSFpIbU5JOFVIaHpkR0ZQd09HaEhibWlCbERxRF9Pa0I1ZmRnbXFwS3BQdVJKdDQtZ0tfSUJvaU5XLWlRazdSWjliREtzWklteE82dnE4UUdWRml6d0tSd3llNFp3NkFrWWFoNFo5dGxmOE1xWXMxSzN6M09Td3c5aEpKVE5mQjRwNFVteEQ3c0lTbFMzZmlzTnRSMzVRZm5rZ3pLbDVRY1pTbENaMWlrSzZSN2kyQUNlbEVsRi1PRDNjTjFKbnhUZmNLQzlkVTZvQlZYZWZpM2t6Y2M2YlpNNDdNR3N5dTJFM1BzZjdNLWI5ZExYT1VRdFl3LVlIbkl1Qm5yTFRvbzVZZHNPRUpMMEEwZHEyZTgwNmVHOGxxWEdNZGwyTWZHX0szQThxcHVKOXRiNkdwMVNEcVpzVVIyRHUyS3VFZkduZEVXVDlYNXhsblpWbmt3UlRDSkVjNGR3ZGtrbDMyaUZRbllWd21SYlRtcktfSGJBeWNZZmF6M0dqUlB3ekZ3UkhQcC1xN1UtQllRbFNJSExxTS1fSk5TQmcwM0ZtZmdrM3NFRnR4X3RJZTdxejJicVBhX21xZ0hFbk9JTjZrRVVIQWJoTXllOGVSZGV3bEpvYnlWLVVMTUpILW1lZXlRS09RYVpDRFlwUzF2MXBlNGwyanZacU0tcWN5eXhUZXlrSDc0czFYclhnT0NVZC1MRnpWRkxwU3Z2cUk5WmEzX0hTcEx5OXJ3bmtEbThtOFl1eGJJNkpTOEFtWHoxbG8tcHhwNnpDQVJteGdmUXYxeVdkTm9MRkVYbFNRWGhnaEN6UVl2U2pRTTl4YkhJSlJmbTZWZ1VqcmU1eVJMa3ZiQWJNVk9rMG1CMjVnRjVzT3ZGYnRkWXlJSlRkSk82NmZVRXJ3MUQzaVNhM1RuVHdLVGRIUldFWGk4a19nZVlRUmxoQjlWV3MtOWgxT0dDMFJuZUtpQVNxWHRRSjliMUx0SDRfWmVJc0lqM2dWRXB6azB3TE4zTDIwbkNyR1ZSRS0zY2UtOG12UGFGTFo0OVZueG9zdkpJZkRSUklFZ1ItcDIxVnV2WXhmajhfWnNScldDeTVUU3NVblhBTVNFemhOVnlMUzVONUlhdG80dERnSGt1Q3RjV0ZMLTliRy1TbEZZRngxY2xTdzBCYVU4QlVqSy15eTF6alN5WXJOeVRsV2h4bmVoQTBUdWVYS0ozVjZOWVRyTVBEUzRQZEgxY0FjRDY3eG91VnEybVlVMUplRGJjTG5xV2hCakFjdjM4WC0yOFVQbzlNenVEOHVoeWdRVWhzeGszaFZBa21RTFdQSFNYaWRSZkMxX1JkakdHQkprWkZxSXppNm1pMWV1WE9qTDNJS3hmUzB3MGRscTdNLVFvRE01cnRRclZxLXN6LUpxc3NIQngzQVN3dExLMjZCendmaWxZNFkzcElXaFBsbFdXVGprWXNLSW01azJUS3FIRFN0ejhmLTVsMi1VRkk5YXJpQi1BaEJrRmw3WTZqbFZQNi1DMVFHV1VnSzI2Y0xPcTdzRGVveV96MFNNcWF4UDRoaEpfTmFYMi1pczJjeDkwTlJ4dXQ0TFBEdXdXY0gxRWNsMWs4cFhJQld0MEN5c2pidFM5RzJ6cTJOZ0dicHp4cG5tZWt1T0RVMzdCcDVHSWg4aFd4dWtKdnB1bEFpRHlTanZlaUZnVFY1cG95QnFlc1RaWUVfX1lxODYtQldQZ0Vwa05hdjdockJ0aFBDMUZGM3JaTlk5ZjJMbkcyY19IMUZaQ1FFa1RwV2lGZWp3QWlSZmw2c1RNT3BMTkNGTXRoVDBvd1RnLXRMci04YTBZaHlzMnEyRHpIVldwcHJ5MEphZkMtdlIzNUw4ZTVndF9pMzBxWW01UlZGMXdOMzNOY2xYSzIwQ0k1TF85LWZES3JuX3R4VzdfSWVOMEVTV05xSzduRWhjME1MdW1XXzM3ZTA1Y1duSEZQREpPVm5yMTJYdmJLUllNZnNkQUppM2hQWWkzWjNXQ1lUQTQ0VEVSenJOVW5sQ0ktSGR2Q2xQZWJpUElDdm1CWVIzMFYzWEQ2SnQ2Y0xxT2hYajlEMmc1R3NQeVZSZm9RdGw5RWZNN0d2ajRZS1hTLWctdFAybFZWNEdxbU9uSDhSbTJtd3JxbG1uSDI1RE56aGQ1SjhWNGg1YUZ6bTE4bU5lbElTUXVyVHA3LTl4MmczbmxidmpfMDFxVjlVVndmck53OXFLcDFqOERqdUdzWDFEUUVPRkp4cUp6NW9KOC1UcklKX1RwTGhMLUM1Y01BSHZMR1pjN25kaTZ4dktZVWc4OXBwSmVCTWhQaWVVZDNLcVZzVWdDN194Q0ZVTlNiVVJUM1RiQ09vdmt5ZlZIMTlKRjJoX0ZyR0c1Ym9UOVJXZXRoRGs2NjBKLUlRSTBhX043c1R5emREVXVHd2M2TXZYTk9RM3dIbTkzUl9mbThHV2lzU3UyVzF5RDdxOVJwS192T1NtR0RIMVBLRTRwbzBNX3V5UWhYUy1aZ2RyQlNGSEpkZFVqQVhJTU5DQi1SSXoyWFB4YnlKUVN6Nml2eWFsRTR0VDRlb1kwWkJFSElwSzE4dFFqNFF0d1BOQm9qMFl2WTg1cFFIWXhMZ1BmcTBoLUprdUhzN3BGRTJ2WHJOc2lyZjBuSHZ1ZHFwOV9VTzVsTHhfZVQ2X2RpTXduVkh4UF9PLVJvTFN1Ny1LTFZrMldsam01MXVmT0VNbnR4UU41Umhvc3kyWlBXWTA3S1BzQWVHOTNrOFZFZk9WSEtuYk1sOXdrb0tObkVGWUNkalQzVjJ1aW9UOXhNdDFqaV9rcmhuaGFqTVNjSG5vb2VESnVqaGlfMlVpODU0NGVqWDFHNjIyWjFBZ2l5aWZlRXhkbGd3QWg5Szl1LUYtXy0xazhfbFhob0ExX3FyMlFyUWdKZEJ6LXpSakdWWVNuUU0wUnRWWGc2d1VVaG5LRl9lajBseFV2cmhUNkRPckQyVzh1MDdPSG5vQlpVNmhVVjlYYWlWeWlaYnYwMl9sN2o1N1d5UnNWeEFVS29JVWhGaWFjcHBLSGtzcmZLUnZmN3U4WkFGYzM0bFM0ZTNUUVNQbkVBMTZZN2xwbHloZUxZcVFER0tob2xPT1VVYkNzZ3J3VFEzNUpiV1NpUFhaZ3lTYWxtT1BYeHBVTk9QRVctNGpQYUd6ZW9Cak9ONDZ6SzAtcDdPSnYwMHhfeFlXT0laQkFNZG9WOHFycjBLMVh6bUxpajBwMDVlN3NKYUQzX0RialJqQnZrN2g4M2FGb3JEU3hVcjlBMm1CT3NwLWtuN2NBMTFlZFBQMDY5emx3MS0tYWtoTjVjYV95RHcwMUVCY1ppWTAyRXRfS2ZvVW1OZnBuTHQwN2Z6aUZtT1BUc1FfVWdlQ1BCLWhuNERRREhXVkhKLTBjY3RHYy1BemdIWkNXXzJiVmw0Szl3M3c3VEt3VERxeUNZa1F0X2Q2UjJGZ3RONjVucFBrOG5UTE5xLW9HV21udHN5dmtLVkhhdl81bzNLaFFzUnRBVHdBTnllVTFXMDd2eEo2bTAxY1g1aDFseXAtTFI4UUVFM252bFNSUDZGY3ZzczhhMmdjVUpocmFGTmhrSjlQODFZMW9YX051OHZQalVHMU9TV3dVRkpKZkVwSWh4em1pUG94RXBVVFJhTGg2dExTT3lzRzlCa3p3QnlRV3RCR3B1VUloUUtEM3RiXzhuODEwODN6ZU1DY3l1SXF1amo0NlJZUTdSSzNuaUhqSkxNRzN0VEpOamVjbDd3b1A0OF9ROXdycWpzM1RYS1FTWlAtVjN0dWtSc2xDNFhpamY4Nl9OLXZlRGdsVmtIWnZFZFJvbV92SnZmMTZ1SEVUXzd3RGhTTVBPZVM5eHpxbl9ocHlUeFJKVHl0R1E4d1FhV0N5Q3dCRHFIa3hHTkxKamN1OWJ3TUVWaDNucFpEaVNfcjVfSHV1VXoxbVZURU9XVXZxZHBtWmxDblNvNnM0TnkycGlQX0Z2allkRC1fVUlvY3h4ekVSQWVsNzZFWWx4RVhpcGEtUGZjRWZMbVZvb2VFcUo2YVR4TEhNRjFKa1RZeUtxcEFOSXhlNHNqQXZLMlpQbWRUM3pFX3lBMGdHWVF0YnB2TFNzU2lmVHN4SERYMG45ZDVhSXRaelMwU2FjODF4cVMxY1Njb1JXV0tPbk0wNWN1NTBWZ19ueTlVYVE4d3NkXzV3dW1ITVNKS1FPQlNRT2xKbnRQZ0V2TTNhV0VOWGptRlJXbFhrNTgwd0VEUDM1MWRCSXhOdXZMQTZxZGhqVnlFbk9fZk85RDZEcjhqNWN6SFBnRnlLdWgwNndVRmRaZGRZaDJsQnBMd2d0YzMxQ3poQTYyOUtkOGJNLUN6RHg4TmZ0OWVzanBJN01XUmJzbmVSb3UxUWZtMWsycjZ5N1h1Qmx5alJWbmV5UWdCcm1pRV9PNTU2b3p1M0wxMldIUENDX0t0cWNzaUVkZUZYNWJxanRBZVdBelFEVDlUYmRTRWlXbWRpcnBZZHczXy1JQ3FhdVM3T0g4bll6LTE5YVdwZG5QNmJMS3BqLXVqYkhabFpFX1llajB1anFHZnpDSlJxUFRXU2xsdS0tQThiY1dNaEoyN3g1aTBNOW14T29kbWpUbXZPZS1nVzNRRUMwYlhzZFR0Uk9hbmxHd1gyb05tTHJTVjNKMkJ0blEtUGdOLVB6cllvUlFlLUVISFVKak1RZ3hLNzRrZUItTUFjZHBtUWNUQnNhd1Y0cnBselRURnFFc05LazE5MENta3NlMVFveGZteDVVcFBWZHY0eXZLbkpJSi1DUWRNcEx6UEw0VDl3NUpWN21ldjRqbndtOUQtWWpiX0xCbHIzT2hnNm5Gd2ZLWnBZSFM2TGdnMDVCY1F4cElIY1YtdF9YMVRlSy1tQ1I4QmNYTzhIeFNNU3k1NHlTallJSW55NHIzSWdFVWdkSUF5UkFXWkE5RjhhOHQ3VkZvMkxtMTIzeUExeFphSXhVSE50R05DVUcxaEtHSlgwNFpjRjdMSWhfUU1XMHp1QmJvaEdOSTVpSDNRZzAycXA4OUpQRWtoUXY0amxwbWhCdzNFLTVvelB5V1pySjRyNDFKLUlYTlFiVTFmY2tIR04zUnd6Sk1wNzhCV2xadzExUlpkV0Ffd2wwVF9aVV9jcGVnbVhIYm82alQzb3l6ZkZGYVMwRDBvQjRHZi1DY3FBSVNldFBFbTJ4Vjhmd3B2UlJEel9CMXBRWVF5TjBlSWd4bXY3ekZkOEMzaUhOdkRfWjRLZl8wVEI3MktsQkZtVE15aGNPcjhyTDMya21mLV9mQ1NFQ3ctMlI4VnhjNlBGLV9rblZXUlNUbzdrN01TeXBuM1V3VnRxMzY5eUpvR3llcWRXUmU1d1ExejByMVk4Y1owVVJrZ0lLdEtKQ0RPNWkzemN2d0syVTJKRmdFc3VuOFVRRS1CUVhVNHJpNlpuMkpoeDE2ZE5jbXR5RmFiNDBZczBZaVhhQUxiTVJxYnNrT2pCRlZjYldnRGs2Ykg2eGFwb2tpVC1NOG93S1pwa1B4Vk4tdW5KdUFKTlJlLTI2OGhCeTFXVFdOZi15Z1Q5cnR0MWtJVnZib2RyU0tfUlVkSEZ4OHF6MGpIUzNabEpkN3BuOXc5TFAyOGNIeE1xWXQ2aG9BX0d5ZkpaaG9yQWlINFotQzlCVThtSGdDanFYX3hDMS02WnRZb1FpVjdIRFhHaDhvMkJXWmozS3k0Q2tyTHRqZmVNcWRKTUpkd2xYcV9hcDdtX2V1N3FtcWYwMlVYTWViLWwxRWhXYjNRUzZ1Y09qSTRodEhVMUJhRTg0QjZIOC1aMEdtNGpZdGQ5YUFkdW1tdjhOa3ljOGw5WGpnbUVUdkItX0M0Y3dBODdTVkpVcHI5dzBMMkh5ZWRWeWdZOGRoWU55ZERHWnNmTDNfcGZLOUJUNGR2UHdjQmFiTzlrNHJrZ2kyYTNSRUdxYW00Z3RJdkdiQWNpVnJ4c2R0M0ZwUEh4X0tTWGhGdlZaZVBXd2gwQjJ3b2JLRVFPcy1neFBVbXM5V0NuMTdydzd3aXRNNlBza0ZiNThESGNlX3RNR2hudDJhQmhRWEh6QlNiSWFuSEcwM0hvTlRsWnlLNGlmWnU2dTl0bHpSM05rMXQwOWNMZFNxQWdRUXBGWnJfZDVSVUlMSGx1VWVnXzNPQ3lCV0VlcGlRbjhuNEdYVi11SWtwTEZEWjJZclZ5QWc3cWRxTU5FMzQxdGJGdlhETDg3eWFDamJCeXlBUnh5a253UnJzbExaSWV4cFE4X1BSaEJQT3oxaHpqc2t3cFJZUHh2WDB4SllKalJjMWdMX2ZybzJBNkZCekw2cW5wczUtZVZvZGxOazF5SXFJaXNST1N0UzZESUE2ZEMwalM2UWszVGdlNnFZSFZ6OFB1QVphM1VkbkRmalR1d3ctcUVTWlVRRGdBYzdhREFkSUM4NGdUdHRoUmZOemxlTGFSeUNuaDJOZFVfOXJ1aVlzTjRvTHFLVnlseG01SFNFbkVOVVBldEVHMWNYQWVjVHJqLVUtdjdoNzZOMVZYMUFXdXgwVDdMUEhXc3QtWGF5TzYtWkZDOGVpaTZjbkZsLTd3TXhDTjUybmNlSDBuSDloSHFlWGxzQ3lhQkFLMi0zZGZZZ05PZWJNTUdHTFRCR29fUG9oZDdNeWJxQ0ptaHpWUGdfVTNhY1BrSXAtUndjN1dnV0k3Ry1tZWhONjNWQ2lySW9VQTQtampBYUdtZnZGQUtTdnFsMWZlZDRvNFJHLTh0T1c0cDlwNTZ3RFMzMTNScEdLZU1CRnRxaUgtZVQtOWx3c3lCX3VCd09MeHQ0Z0xlZTNKSkZQYmpDT3lrb3VQREFCVmp2UjlWaW1kMzMyLVRod0RXUV8ySTBLME9KNkN3cUlGVExWRk1wUVRiV3lkbzJDUElBQ2Mwb3NVaGsxRWgxTGE1VUVRMlNnN28tQ0hvWmZWUUtoOUJBUnNhNFNVaGpxOGJtOVU5Q19iZW9VS3Z6b09aQVdGbThLQVlfLVdDVXRfM3U5T0NRWWVzYXY4eF83MHR3c0hlQ0R2ZkRCOC1CYmFEVERVTFZKaGdhM2Z0cnh4NFlCWlVsZUs5UFM5VWM2RUhwZFpEalI3S3hsVWg2dWo3MG5zaFNYY1FfVkM4dWE4MHhaWFBLa2VNTHVCb3I0enBsbHdsSlZlNVRobFVFanB3a0k5SnVSemYxRlpkanhIV1BFZWRWSFJBRFBwNUZEME1XZmF6VFYxdkZ2QlNjNTZnc3pLZWJVcGVZcWM2N1BpeUhaOW9Vel9SUE10M2NjeDFRVWItNzBDVW5DVS05NUNmVmZ5YVYzU05Zd1drVlFCTkRjU3NxYkEzZm53Mlp1OVhMaWZrZ0VDVy0wOVB3MkZBc2EzS2lvd0ZENjZOTk5QdGY3azZ5czBpa2M4Q2U0aWs0clJjakNod1pXSDljaHJ2MjhFZnZydlNnTERvcTYxXy0wTUM0ZjVEaGI5R2dBdkdCLXk1SlBYV2xxdndCZXFsZWFfTkFXWDBHREpXNHNua1FTalNLT0YwX3YtTTRyR1E4QmNDSklGUmZkOXZMNEpLN2VnZVZ1MmpFM2RIak9VRE9aRktKT0pXb3oyTzhrTnVzNVJETnZWQXIwbjQzQlJfb0tNWFZ4WFNnSGozUWlGaUdHUm1tNVR6cjFaWmNRU1NyRkJDeks1bWliOG5NU0t2ZlliOXVkUy1GU0ZUQUViWjRSajNmb2V4WFRtQklyTnN2N3c1U2hpUW5heUN6a0lrU0dUZGRURVVPdnNHNU1qMko1OGhvQmhpZjNPUGxDc1BVX2ltd090QTFKMlppQzBsdFJnMldlV2JpcVRlN0NCQnZlajBVTmIxNVNGZFhId1Q3Q2k3VjhJcGxRQjFZYk8tTzN4blgzaVVTcUlBTG8xWDZZaGs2Q2FSdENZMWhEUWgyby1Yc2FmZkJ5NmdoNk9qaXNmQmVTVWUtOTZxYmM3ME1qaU1ad3J4SXVDdXBjejRBZ0VROUJ3NTk1MDlST21VSnlqT3ItclpmWGk1bkdHUEw1OHR3LXd3MHdmSmYtZFh5Rmc4ejgwbm1tazBUcDJZTnJVYlg0TkcwSTRKdzdGUTNEVS1mcVpJNVZfRmxraVd3bC1MNFdXVVgwZGxBdUlUWnJUaXJDb1VweGNOeUxQUU1WSTdVZnBKTm5JWWRxYWEwQWkzWFVKNl9EeE5VcGhkOUFvdmFiSzdqRkNObU83MUpySzNJWGx1RC1NWTctNkhXeWF6UloyMW9CZE1mQzlvaWRiVWE5TWhKbTdRb1E1bHlWOFV1UUVqa19BSUpQenM1M2o2a1VQLVJrTl9aVjRDendXT25NQnpFVXRaRW9Jd2dLQ0hnV3dVdGhTLWxUOVhhak04OWxreXd2Nk12b1NYS19ZNUt1cDQyRWFWbnBMQmZzblBWVUtTVlNCcldmckN5VWdlNlhPUm9wQThNQjVyYi1vNzNWeEhDWmVYMDVkT19RRG1Dc0thMVlkQzB5SktQY3BDV3dNbmxYZjRyXzIxNENDV2tPQXBFRnRxX3dIR3B1T2ZfRmY3Mkh4WjJ0ZjVLY3hSRllpanUzVG4wSFYtTDZNXzRIVzFBVXdQUkZuZUVkekRqc3hQVnhpMGpSVC1tRXd0SC03WkhpRWRuX2hGOXlySEoyZGtKMXZrdjZrSFdKZ1hUX2plMmhtaERJX3FhVW1DZmlNRzk2V0dqOHpYZnlkc3M0Q2oxNFBCU05ZcmVqS2tJVllaTHJXNmFvRWk4NEVGRmdrY185VFNkYlRKYWFWMFpLRjJxUVAwSVpCYmFoYWRmamRwX3pNMjhfT0lxdGxFdk1KdW9zc0JlRmI2cy1XVFgtSVBvNUgyZWxRbWIwOFNWNVItUGVFMUttc1haS0JWQ0d4Ymx2LU5BNnVMSVIyeUVFa21HSGthcE1JZlMtYjNCMDRJekYzb2sxZlZ1V0JKNWRTVlF5bmFfRmxZVVE0NXl5cnhsUGJLTDVEb3hYcXJ5Um9Ma0QyUkZkTVN1OXhzeEFCTnVYT01YS3UxWUQ0eWtRajR6aG5BV1ZzNVpScGtYVTNHQXJZelBUNVFLWDhNM2NJUGFDNVlzaElUQUxySzUybGcwTGlON2hkNXR5TXRZc3l6MGZxaVdnTlZHUjJ4a2xKUDBNZlNqWVRldTFSTjlTQ0hCdERRT3hWWGZscG5pLUktWEgtOTJLQjAtRzNwVWZXWjRRb1JLaksyV05OVlItclRPeTcyQ0F0NGFPd1lWNlpNeEgyRVFGZXY2dGFTVERnenpjTHVvSDZsN1F6dktBOGxDZXVFakp1OVZLaUtVMlF5RWFMNlhyVGlrMXF3VXJnZGdTcDJBUFVrbFZRREJha1hEeUM1UkFCeUp3MkFHSDQ1Zk5LS1l1SEVWa2hMTDd3Rk9nNGdyZGg0SmVkTTZwTHNuMTFtUTdKVGNwMXNtdTFfT2pYZ1l1cGx0c0tpeXdPNmRWN19VVzFfZDR6bk5zX2xkRnQ4SWRSdHhBSThlTjBFaGIzRmMzWkFXdVhEcU5fTzZlOF9OZ2s2cHhZRzN4T2xrS1Nia3Z3elM0ZEpTd2V5NTdCbXBjQmJ6c1Z4SDhDU3VTcXFIcDhWNENXc05YdEpFX3JiV1JfZUZIc3MtOGt5ajR4ZjlfekplZWUwdklMSW5BRnlkTHhreEZLbmpKYzUxMHBEd0ZHZ3hscFMtbHJ1SUxCTTNXRDNtX2c4VGNQbDd6ZnFsNW5TaC1ubXlSempBbWZQeTktYVZYdWRWLU5hQVNQNDYtQkFZY01yVU5oUEFzQ1RaSWw3V3hRbUpMT19LOElKNkxHWnNoRVR6VFpZcHBURXVXRTJOVi0tX0dRQjF0X3lUZjRzTElXZGpRV3RDQWd1OEJ5LTJnd19Va2JrLVpndDJ4bGQ5WGV2Smk4NUtkNjRuQUFDTXFXV0o3QThGMXhGRjZyZG9xMnB3NEd3Zl9EY2hJbExNdGxqMTRkeG8ybXhaVVo3LUkxOGxWMGtFczI0NUFhc1o5N1VJSkVsRU5NX2FYSXMxeml5dkhvaDNiTXhFMXNCQnJkYXp4Y3J1Q0RxSzU0RTJhYkJPSENtMEtJc1pDNEJESUtZY2g2WDFFaGxSRG5ENWpiYXVZTV9DenlVTzN6LTU2ZTVpUU1FZzFsd3F1ZUhRajk0cjY5UkFvX1lpcVhmYkZsa2tZN1psNDI2RDd4SXZnWWNmWUFidlJITndGRHBPX1JIaXV3RmxXbHRWclVvMjJWMzRBcDJ5dnJHcFNQRWw0R2hHV1BWMVNVSmd1Y0xQMTlpNGFOX0JxUzJLT1V3R25wcUFWNDdGZGktbFdURnhyOVY5ZjNOeDRnZUd5TURqaE5CYzdsSTczejZsT21WREFmOFh1YlcyUkZXV1NidE4zSWVFbTlJZFViaG55QnlRQ2xNbHdaUVh6Qzl4SHZJMml2dXc1ckd5TnNnRmVtZ2JkMjlpbl95QmlUS2dUZGNHdU1hLXNOcndXeGdGczhSRDE5aWs2cUtyc0syZWVyeXA0a2F6c2FjN3pnUTB0LUFNeV8zMERDbU1jaml5UmJvZ1Y4VlRaM0JpRXpDWGJLQV9WQ3pGN21vTnl2TzZRWEFsLURqVE1WcVFTSHc2dHc3UHAtS0dlRDlJT2VEZXpKMm9lZFBaWDhWcUVsaGpBaWNsWDhiaGwtZ3pHS0FTMFlhSnRVcU5KODFSM1NsVjEwUGN3YmVlaDFocWtfX3JmTWJFY3hHeUcwdGM3VnpUU1lSXzVkOXhvWjFVNFZ1cnJUb2FGYTZmMXFJMHBUY1FOTjY4dUI3eElPUl9mLXVieVdObWR2d0dodFp1N0xKTnJ0bVdmZWMzTDdjWmRYNW1LdXM3SHhLUWZBRDBRMmZ2MTBGUzBZWU5NWWpVeVdNcHV3OVNnNWQweVNBQmZ2UVYxNVl5YjZLbnUxM21fZ2ptS0J4TUtTOG1kR3U4ZEdjeUVudm9EVEVtUE5jU3lEVDVmUWluTGI3NG5JenlsV1dnaDZiQUgzekpNeEctWGJndmN0RXdwMGhkeEpwdDBGa2h4UXZxdDB6aGMzdEp5UlNYSlRXQXRvcDR3WFFBbWlpWmp2V3lXdXowUXAzZWZRMk96Ty05LWVzTXo3aGpOQkxfNW4xQUFFeWw4M0pTc010ZHF6MkU1RG00SXpfNjdseXdKX2Q1S0ctWm82OXQ5U0l4Qmlsd294VEl1S1REMkEtTlVQbGZwakFNZzdiZGFjcXlSNldTYm1DUjRCWmZydnVHOEtJNE9iSFhTWGVBZlBSUnZTanZoNU5YVy03SmV3TU9PNU10NHBkSjhST24wd0ltbW02d1Y1NVFpZHZ4NXhBeEZadk1WQ2h4bktieUc4SFJPbnVvbGZJb3hqS2s0bzhBX3lINl9CSXpET0laR1ZVOGFYMG5YYWx1d1loUWxna0c1TUFSYzl0SDBiamhTT1hUTjF2QVVzbmJkMmJsN3ByUHVSRGhlVUVzQUpFQ2ZfSVVCUW9CeVRNbDMtcTE2c2o4dS12UHV0Sk1GUmd0VlhVVWJNR1BwVHd3NG4wendlSDZOSzJ0Nmg0SUd1T3JMQW1xTmtvZ0FLaDRoVldyMFNNcnJrU25uSnZwNk9aWVlsSXJjTWhNdFp6UG9uMkhNaDJZS0xMR0htV1NXZDRtaV81ZFQzLWY1UURCc1ZTMjZaRmpRUWkzMFF2dWNRUlZRTnZTdHFmamtQX3k5MTNaaTF4N0RQME9sd293ZFZUT1BhZVZWbzZ0NE9NSGpxbENMR1NMVUU4LVp0YnVyNEVxN3VIMGlXbndhOXo3UXVDR2JNanl3R1ZVaDIyRE1IUzdCYThsd3dZeEU4c2toY3ZWRnplSXlXNXF0cjZnRWN6LV9YQTlHRGFjYTJRVFEtem1nQ0trem9UNy1QR1hZU0lnNlZxbGdET1lralRtM0plU2o2cVBIaWZZYmNVS0ZzZHo4S3pQU0tybnR0eUFHOV9Yc3BqQ3NZMDhnX0h3UVVBV0NGZWxTNTA2dng3Z09yMzNBeEFtMjMycE9sV09DanVKcHp1ekM1dHl4OUpHTlRleENPNDhmUy1sc29abkNnYjNjZGtJN3ZMUm1MWVNyMUJ1X2phbDdWUkVES0Znb2VxYTBnU1AtcURiRHNZYlMtbHhUT2RwblRsS1dGUERwYjdsVnNHQXVoM01maGl6eXZRMExQdjEyelAtVmlpNlRiaG0xUmFFSnFCTE9CWmQtaFZDZmpIM2I5QXVnYUQtNF9tZy1BT3V4cnZKdlB0MzhJV1Q3dXBPQWpyVE9WcHc0VVY3LmoxX3phM3Yyc0JuaWZhem9qMFZUQlE"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '43147'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ki6l2kuxwvj3y6cdzuebj5yy.vault.azure.net/certificates/cert-name/backup?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/324da9b48a4647c1b1bf2e5d1a28e49d","kid":"https://vaultname.vault.azure.net/keys/cert-name/324da9b48a4647c1b1bf2e5d1a28e49d","sid":"https://vaultname.vault.azure.net/secrets/cert-name/324da9b48a4647c1b1bf2e5d1a28e49d","x5t":"_RinqfVarhtw4EXsyGF07u0-Kto","cer":"MIIDWjCCAkKgAwIBAgIQPNN4zPkaTzCgrm5j+D2PKTANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0ODQ3WhcNMjExMjA2MjM1ODQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPVCj3I/u+4iuwlw4BqZLEfXAeXL7iX+Y03JlIU7I5Qhis7hrk9SvEzUqjFNVHq54rMxngadyjsXUEN7xFsRAxCID6VyGIUL2pRgtM4jWrid6nWKN/+537lsPczmgAmTYRZJEVelmXUTrregCL6gW5FdR1BfzacV+4XkUAEk8T0XzM5WMkRYkFqsuqGh6B8/tz/BurCxmCsDMoA+CITnh4K5nKSFWlEkEdI4bHpTP2mNVX0C/O0Cs42ZOtgBVKrVp65jpl4rHkDMNtBVOP/dpak/Q3w+ntuZWQkDM57VGy9dNAckmIpiGVov/fDxTLJrODc0EqkQzPsBQOprL0DOHbAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFCHuT2L8BOHpD2cCc3XPNwLJF492MB0GA1UdDgQWBBQh7k9i/ATh6Q9nAnN1zzcCyRePdjANBgkqhkiG9w0BAQsFAAOCAQEAE6lf/W3cnmQzyTDWC2Endr6QA+cVLBqA7VRrRwsR0WqrcP0Tmhhye6hDe01P73DnSc9p6bfEcRP+deyxgBTG9hE9DmvY+Ylc9TINLOmqiVpnY6ehfjLRlhOsTRWjrACK//wL+jU8wc1sYUjW/QzeiDnOu6AnbsTsLc0KhRlCBUqNB5L4XdZWAtktFg3VKa0P+DmBciGJfXINHOTFwFgEkb5izeNVO+Vx12+8EwPqk1kkdoLGY/Eq0P6iVVoTncyI/hGwrhiAcQDJRYzRoqLiwOnXj912jbUHOxtjjGdexNUF1gOu1v95yPdn8qyKfhAatH74bO8AWH3ueS8KkY/E/A==","attributes":{"enabled":true,"nbf":1575676127,"exp":1638835127,"created":1575676727,"updated":1575676727,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2422', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, npwphfv27zygrslti374af3g.vault.azure.net,
    -        /certificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/ac1adaee1ebb4c9faf48a1beed498346","kid":"https://vaultname.vault.azure.net/keys/cert-name/ac1adaee1ebb4c9faf48a1beed498346","sid":"https://vaultname.vault.azure.net/secrets/cert-name/ac1adaee1ebb4c9faf48a1beed498346","x5t":"qLxF3hvD102HIr288uwzPnIBLlE","cer":"MIIDWjCCAkKgAwIBAgIQeGxYSNumQ0il07U8vgIpXTANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA2MDAwMDQ3WhcNMjIwMzA2MDAxMDQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQClNtmCx3oZQzoYVW5mkps4t3MMDaCFgzDtvro2U0zfpksFKCt/es2PYVhrkZ0ket7g4sXfgT/nV69bgKaeDqa3y3qjgIiUzFOTq3BctAg/4920Z1+xWt0u9EqzJZIGmNb/enqnFwqL8ymjAurmFttHKRiUMQiMu7rSGn1sZ3izinYuRMh6k9BEdETpvgfuhWRT66/Us+gSkGc1OijDap4Rh0UPkVmvvfzvADuhYIeWb7lw0fPEO9d+gDeH7Gir44IbeimwBPLwl8p1AiyuQJnNyITQ3+1jY23kSsPuPmSlkVmiienL+btuZ9uIDQpd2zOVSDTjxxGpH8nxIaJXunMPAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLAU+8HE/ncF5Yb86YY3hfqEYPiuMB0GA1UdDgQWBBSwFPvBxP53BeWG/OmGN4X6hGD4rjANBgkqhkiG9w0BAQsFAAOCAQEAXKqdQzFnkQes3WiIIUGIZoxGY4hwk/7cfySmYSOx3TSN1KZc4kpX4xCFhwlLdHCB/ycmt1ni3VMaoFnu+TO5Gr6brAcm3qXKpHECv/2eJxxU/EskqhiIDy8XEDMN1cDFiiup1woR2da0AuO2zODjcSsazZgPnt916YWCJlhp3hEfId7u6mcn4sDgaRWrZUkZKHvcdH+Vm7Eh/TUgdfwR/Av4l0Lww80KKzvbq9E0wU8+skzrq2v7TbXF8WxXasQmGAJWhk1Rghp6rL6WWTdjQ85M3H+rtLhXR8moTZfnLJJxnUH5xhB+RsEx5NInJQgUvBMeSecme11wtnUjqy+MCQ==","attributes":{"enabled":true,"nbf":1583452847,"exp":1646525447,"created":1583453447,"updated":1583453447,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453413,"updated":1583453413}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2422'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ki6l2kuxwvj3y6cdzuebj5yy.vault.azure.net/certificates/cert-name?api-version=7.1-preview
     - request:
    -    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLnBMN1NGcUJjYzdNMnAzdVEyX0pXUWlUQ25pNDNORXJVTDRWUTNETFU3NnIzRHl5UmN4c0duN3U4MXJyOU96TGpoR2h4dGVSTlBrT0F6Rm54ZUhHbWpLc2hXYkw5TzBrTkdGeHZKc1dmaDBlOXd4Z0VfYWIwQ0ZSNVZHZW1HZmY3T1BqRGotRW5LQUttNk1MamNCRlBfM2ZXWS1td2lkWlNEcWhyakRlenhmczliMnBLcFZZUzhoY1p1ZEZGa18tMS10bkc5dERxM0Rja1pER1FvMFp4bmZ1X0F5a1pleVhzMk05M1ViWE5QbVJ5cF9jdUlmNTJWbEFubXR2a0Y5Q01DMGtQZWhGYmNqWkpDY2FwSlcyWmEzMTI1YmxrLVlqbmw5MDRMUllEZU40RmdlOV96RlNqUi1GRnEwem9rUnhFdmFKaUNzWk1JNlQ2UzZoZGNPYXUxdy52M1NqVlpxU2N0U0VEMlIwRWk0TUVnLk82NHdidXZkMzZ4T0k1NktmS0t2YzZJWEJJYVpyV28zM3R6S21PSjF5b3JsV0h5WWd1V1JKWlhvUlFZdU5ZVHIyN0ExbEw4ekd1RGZ2eFpUMmJrOE94cS1fb3pSZkZUVDJtaE1ReDNMNHpjTXhDNm1xNWFnT2ZPNE14d2NNMEh0SHpmZU1lU01RZjRIdnc3SFhDeXJaN3FIR1VUbU5CUVNzaHdCbEFFYjgzRjEteW9IZkozOF9qOHhUUVZTaTFoZ2dwTjR1MUVyWXZyR3lXX2ExSUVCWk5GRjlQeks5dGhiTzJVcVlPTzRVUGRyU0R5aXlScHZmSXJUX0dhZEMtcnhqZDJyVktRNjNPX2ZENFk5ZjN5M1F4TlhCNUZnbWlXZWZvZUpvZVZ2NXJIY09ucHpHNno1enJGYzRlR25DTng0RUwtMGVtb1hpT0RTZk9rRFUta182NjB4RTVMN0lyTURaLWdVbTY0Mkx0WGV1RExWTjJmbXl2SF9yb19ORWNmN3BwaXhJOG5fRll5QWVvM0JpenRFbjNwcWJ3alJERWhrUlFaV0JXSVV5dFpOSzU1ZzdYeWFuMDdlRVdXMTl6bk5jalNFY0xnRHU0WUFuZUNiLWQwZFNkaklpUWRMaU5nSW5MYVRkcVA1clhwbFo3cTlfN3RlZDByWC1oWkEtd0ZoTUxKWFZ0WXNPQnFkck9qNzJNZng4NHl5MnhwUXdsVGZPOUcyMzhJalBiQ3FJMjBydllDRlFLbGFpSGtqUE1zdkRNZEhHY0RLbzdSTDBSTV95YUtxRFhldTkwX29tRWhodWlkZ3loWGlseGpyZjBoSURDOTdNbkQ4TlRNT0tXNXpZN0JqOGJSS3JPNGRTWHRLQ1pWMDY3cFRUbDY0dldORk9IckFJeUJFdnEwN19TRnA1MWs4WS1ZNUhDTjRod1BiOXdBZElnV1VfZG40eU85TlZ0cS1WRW1UeHpEaENobkY1ekVLU0IwN0lLUGxUOW0ySGJFdUZsYzkyalBtd0J2UEhqa2RNa0syWXkxUUNTNDdFMTlQQ2d1SmpEcnFxb1pFTmk0X3JxUDFMZG5iS181aDRZYU85NFBsbmdUOWpjX0JDaVo5NHBtQmZwT2hjZEZRd3pUc2xiQWg0VndGcmlGN1hCU3VxM0RDcWhuV2Y4RUdTNmhhSkVNNjJjUnpmZjRaWFhLNUpjTERHQU1LMkJjZmFJUEhTcmpSQUNfM1VuYnhUNkJGVk9UbWZyOENod3RXTEF1SE5HeDBCdS1sRG5rSEo0RkREX2ltREtTTTQ0aEpQa3RTazlHTzNQSTJxYWdxWGVmRHRZU1BrN2VTS0hyeTRuaHlBb3ZUMUstY2hYSlk5TlUxT0V0YnAxNF9qeHJvOTVZa2F4dlRQdmtmSWZJMmJwdlctZ0g3ckhreWVXajUtaHMxSTBEZGVHTkV1YVlMSGVESTZYbldGX1lZc1ZnMHJDbWl5amI4VC1QaU9LWmRIZ08xMzFhZTVRY2tPbll4Z0VuUkZUalVDSnp3cFBNeHh3NUJUZkJPdWhJX2Y5V2djYmZZWk9fbHlsTzdYbzFSSzljTTBpaEk0VXJFUWJlblJlX0pLNDlhdVRUa01hMFd6Z3oxY1REMktKdHkyNDFsbkVDNFhGY1hRQnVybVJNWDZ0a3kwQ3FOMkZRaURhLWkzeUpCRlUxTkJhUFVmZTZzSHZ4SlRnSWVfM3l0SzFZTThwakh4cG8wbXBHQnktTUlGQ0FlMTRPLTY1c2s0azUtcXNrZV9YcnNkYnVWVExxTWhHcXB4T2RRNkJNZC1BOXB4cFVmd1dVZXBUTm9tdzZfS2dzblhMLXpUUVRQNENSMmFLa3FabU1ialFVdEc1VHdaaVNBekFZelJnMHJmWkthTDVzUXRRbHVJMXFBdE1UbnZ0S0VDNkNVRHM1NzNmbmxFQUpaR25RMHFvVHB0cmtvVXF6cHRxbnJqNV9fWUpvUGNaMVp1ci1taXMzZkdkWFVjazFQbkFJUmZsNmdIR3FjTTdSSmw2cVpwNzFxdDlHd0Q0bkNzWi0zbzNHbWR3UW9tOFdrRkdVaG5vRlY3NXJlNFNqSGZYWEFDXzRLQ3NXdjB2bDhUR1lwUEtTNWdFNDRBQXZlM3FSbU5kOVdvT194dzhCdVZKcHctY2lNeDdCUWFBQlg1NGZqbFpfdXR3RXRQdlZrQ1FyNzhzRERFWFlXNTFPVXUzS1o5QkI2Q3VpY3VySlRTbWtNU01vTGV4Rmw1LVhDYVAwQkE3UzVFaUp1SnhFR1QtS0JBYnV3M1NaSG1naWpXbVVmMVRncUxEcUQtZFVQbEp6NHNWUF9PQjlUV1BRU1B6eF9kenVpYzJXcDRPNUdRX1hGT2ZwM2U3QWNJRjNoZzduRHc4LVh2eW5pcTFiUVc2UVA3RHcyUUlCbFl1Tmd3TldzQ1p2Zmd0M0RoVkEtWlZIYUJNaVNHNTNQa2M1cFN0WEZpSlVza0ZqY01Kc3JlRlRRZTMyR0MtYzFjOFVwSkJlM2pWQmw5N1k0aHRzV1RVdzNYRFdBWmRkM3BZdWd5WEh1b0w2VzRfZVlnajFEai13ZzRDdFhOYzV0TWpfRXUya25acUd1dlVnUGtJR2xlU1UycWF2WmtMMHBDZkp3VDYwNXNxOGNtVVk3djRxZWYzRDdxZjJHSFJ2SFUzTTJzQ3NWYTdTU0hxVzBSbzRtQ3hXZ3hhajRad0hrcDg4OVZ1OWRTQUQ2WnExU3dQZ2hqYUlvaWFQOUhHWWEtdVNfZWRDQmxhOXlWVGE2emNFVk9JSzRidG05OEQ3REV5d1ZzYllIeEROalJDb0NHY0tWdGdpOTd4cVVpTEtJWjcySzN4SXNpS2JIQWlUd3hodTQ3WTVMRURFdk10UWRXT2lqZV9TTHlWdE9pdWhncXcxV2R2bncxejlaN2NfSXlLS1dQQV91S19salI4TjRVV0NPeG9iNlY2S2xJVVNpNUFIakVwemhRMmJVQWxlQUFsUHhhOHRtTlpmV1hCTUtHT3lRVUlLcm8xMWFsSGZleC11M1lzcUhHd1JVaWxGQ21HQTFDRHhFLS1nRUkzeG9fZC0ydG93Q2NhRGZheW1VV3MtRlR4RHo0UGRBUkRNS2duMFZrZnVBd29fSVJWSndTVklCdTlaR3ktc251d01BcVVUWVJfclNMTFJYUkJzbno4eDFWRmp0M1daZGVlVzBDdW5FalNvUUxiYVFKc0ZNNVJ3MWVuTXFLUFBXQzNPWEoyQkVRRUQ1QnZkaGFZdVhRZERoTU1DOWE0aXZTSlJrNC1acDdnSVhqbUVBeFBudFVlTENyeFhUU2xoa211bnlDOFZzb3c4M0ZwcGJla0NyZVBKeVhuajRMM0h3cHpHbWh1ekVld3pvaXVsb0FRSk9VdHNKcU1GTmpEX2gwZlRRbHcwOURZRWo0ZmJ6NVhGX3dCTlgzNFh4bHNmLWdsVW13XzBSNWxodG1FZW95ZnFYRWM4OWhjbHktUi02RHg2QnoxQTJQRVNwbWluQV9EcWI2Q1BoOGhCNFh5dWFOOHI1eVRCNnUwY3JDMDYzcFpxcHQtTVhFRFluYzh4U2V2VTVWaW9XMWNud2NDTzh4eWtwNXlSZldUU05QcUdWbGFyV3pHZ2U1OFpkcUNOVW5aa29rNHFpenN0bDNWZmR5M2lGTmh2RFowNmFzYVJZNGRzRUVULWRJTC11RmE5UXRVbGZUekxWd0VYUzFpZlRsN0ZaOWV3clRfN2RxTXBkUk9LUGp2SmFKZkM3am1OZ0hFQzJjTUhPc0xOVHhhSzJIaW1ZaFN3czNUYmFCY1F6SVhEQTVPZWE4WU5TdnBMbGdPS2pmNkdNOVZyNGN6SnNtWFd2M3V6WkZLMnZCVm1sYWRBRTRrc3cwLXBfREtTTWJxRmZTaWxGN2tac28zOWEtQjdYaFVZbWlFS2h1MDZkS3AyXzVfbmtGMmNKNXVIalFMZWZFdmlNOG9jRVFsVzBwSkdNN210a0REdEhod3g0c0JkZDF3Z0g0OWxmNy01VlpuUW1jdzIwSm5fMW5rM2NuTTB0M1hRYTZ6V0ZoWHBEd1JnbkNWVThubXBlVTJrWUd5a1pkdXhhZFV5VlBYaUk1RG04SXVhNEE3eHM4bW1lMWFTRURvR0JlZFd4SzFvaVRhWWJoOEVISTRTcGNqWEJQd21FV3Ewb2taOE5iSXJHd2UwX2NqYVd1Z215T282Z09MMm1FT256M2RPSm92LU8tTjdvRldocld5LXNvVEVxV2tXSEF5TlVETUNIY2gwLTZqUkJ1cVZTaC1wXzNvMi0wbk5yaGFLamVoX3dwNkdJOFJlOVpWZ0g4VEhHMHg5bmpyYWNrdG9ZbHQzbFdWbkRNaGROcWJhWlZFQTBvLWhabXVPdjVDVUNlT2U3R0pROTNFZXF4MUVmc3lMTjBuV21iblhlMU9rUm9mUFlIY0dfV2Y5a1N2Mi1qWTYzc1FOUE9VXzhTUWR4bHFhT0RjeTZDcVJkY29WQ3pXdmFlcUdWaVZaOTdXaEtQNzVEVW0zSThxdU1EVFZSdldiLVBEVFkyUWhQV29aZ0IzYnRTVTlpT0FFMHpMNTV5RmdMMEc1S0RtVE82N2p1T2h0Wm1HMHNVdDRXV1VHd1pLZTB1UTFkX1JDd3pjQmxQamNSOEdTVElSN2NLOE5xbFhrallnX0FwWWFoT1dIS3AwUnRncGNyYzhPRDltNlNfdkVid3lWZXdxdzlCOFd3ZkNLaExpejFlY3I0Q1E4SkxqMlZVR0gyT3lzRGF6SEU3UGQtWXRSV1pBMnBSNWd6SzhXTEVqaE5NbDhOWDFCVmtFamVQZG0yemgtZVdGN1NkeWRoSm9sbm5kd1pDS29abFJNbnpKMEx4bTFUaUtTb1JPS05IQ0dUdWc2SU9YRFhiNVhXY2RaTjdPNFdpQXVMVGtQUTI4c0hVc2JPUzMyMXBCdzhlaTZSeGtQUEViNmxyaVNMY0M5bUdpMUVOR1ZJRzdRd01kRUFVbnpBWWIxc2MxQlN3RzlZUWhVX0lYNjUzWVJiSTYydFBoZjVuaWw4cVBMZ1dXUjA2OGUyOWNnNzdHZEVKNWlFZ0M4TnZDNG9VaVZzX1M4b0V1WXNBX3BIZGs0blRJemMxSjZhazFNMlE4bTJlak1VMjZ5OC0taEhYVnZiX093X3BfaFpGOGY4NVQwVE9kaWMxUHYtSnBGUEZVOFFNSW5lcjNITl9nQnNXNlItRnczRUQ3ZmVYcV9xZm9ZcmZseFNkWlhjRkNIQXg1Rmt6Q0FFM2J5MkRrMXh2UXJseVRVU002R0lTZDdUQXdNUWpJenF1Vzl0d2x4cG9KdF9TaTFzdmotdW1xM04yeUxBYmExUGRWVXlVNjZTWHJlczVHRDJoemI5OTM0TXhhWlg3VG5TNi0wTlZoUFZsWkpkVUZhLU1BNlJ3UGVpd29lUzdtd2FCTzFpaXRObU43TzM4UHdzSVM4aTRGcm9rLUFPREM4aVdJNTNUaGNBaGNSU2JJZk9UNmw2Q3dncWNTU1I3VmttNGw0NWNlSVRKY2psU3pVUy1Nb01SSUlFbEkweWVxU3J0VktnLWhldHlCN3VIWVRsLWIyVWlhUWFXY0EzVURHMWpFV0lCTU5henV3d1Vxb1drZEwxOVVyUUdoUHY1OThvaFZPLVZHdnhraE8wZHM4TnNXSnhZaGVMRWkySEg4SmxiZml5Tnpuc0p6STdGSkpWSS00NmEwbEdKajh0THpNb3lXaW5jMS1ldnZEOUU3VWxNTnpnQmRsQm1kZmhHN3E3T2VESFh5OEFQVkl5RFItdHhhUjdRaERGaUR6bjVuX3QzNXhBTnMzTzZ3dnJuRDlxd2VnQVZacmtobXJFNkNXTjI5ZjZUaFFyMUlrVEtnT0o3TWZQRkJBMl9YcjhlajNoNl9HUGw5Vy14SDQ2Q3REWHY5bjBfREdHRkVNM3B2OWpJY3p1Y2NmNExPTDVUbjBnTG9IQjdFRF9zRmNmM1lOV0VXOGtqd3k0Z1FZMFJUTXVwMUc5U2tWTVFiV2pTZ0hRUTZuRFhvS2xkd1A1TENrTUU5VHlWaG9jelktUTZ2QzFjcDYyRktIa0F0TlhwQ1U2LWtXYXY0YzAxcGdiT0tyTUZrSlpTU3JOYjFhT1VUSWNtMmVBWVozSUVZdFhUU2JfNDBLVllDcGx6QmVGVDlTaVlHTkUybU1kWlJHVWJselhGS1hXdS1GT3dkYlpGRXpkaVhkOXZKSXpsdWQxNlVySThrVmMwd2gtS044aXplenpwbmJNbzY2S0ZlbTg3c1NMdFZNaTNxcTZCMVQyX2t4S3pqbGppSndORHVKMFRVbnJtZk1VdXh5R1lDQUk5M3NKdHNfU29uLTcyYXBnZXFpUl9jUnNXS2drc1dfbmljaEZzckZIVDY5cmp2TXNySlR1MVZ1ZG5EMWFVdW96SkxIYzVoVDgxQ2x2UzJEVDJFbDE5V2RZX2JHVlhtbG5VOFllakV3MDE2R05rY21nQkw4TFF0aEU5cVpmMWh0akRoVGVPRHZMeWZYX2Ruek0wQUtDTVFTcnNwTVhHWEptbkFfbDRiRUZ5VG04YTZROElGNEpnek5WdWNING12dlJFUzIwakdWMVdjX29Xckh1U2x6ZW5SZVdzM2FqS2c0NjZfYkFZSlBmT0tJMGZnUWQ0NTY3a3FZZ3NGVElvY0pLRmNZcjNDd21iMWxSZE5WNDluZzUwNlFHMjF5TDJzb3A0ajJaREhZOFZRVVlpOER4STdlb0pOVGo1OHptcWxTOXZoVURuS2FDU3BTbmZSc28yTjBQM0hWN0FTaTJVbE81cVFUdUJYYVZINHQzR0R1RDRJbmxmRmxEclVQc2dIMkg3VzFvS3kwTTFrUFIzejk1aWVMcEJOMmhPU3NGdTJ0SXhwVnhBaGpBMzhHUVZCV1R0cE5pejNmLXl2TUxSRVl1V2FUNzJ6TGVqWWw5Ml96U25kOWQ1SUVyX2d2ZGc2VENOMWp4ZmpjblNfNG13ZUdFWUdJUzZrZkx2d3hTdHM3ZkxoQllCQ3RLZWpnY3Q0UW5aTkowTzBMdnljQzZPM19kOW5vNVl5Z3p2MkNRUFpDdDNHd0dVVk45aFkyT2hMNjNoSlgydXBBQWVDMXBJWEtOT29mUHpPaEZTZ1lFT2pDOG53dmEzVU5pV3M3dHpXUnpRc0w4aXQxQ0Z3WXFacTVlS0dwREJZd1B0Wjg4X3owbjBpeVlhN1dCZkdRTmcwampneV9GMGxmWDQtQzgtTW90UXJDZ2lBWXdRNVptcGJyTW1zeWxTb012TjJwdUtMR25FOXZJZHVpSkZiZ3RxUk5oV053UW0zMnZ0eGs2V0R3QWFUTzBQVEN4R2VCZUxnT3ktVVNPOFlVMzRDSHdFbzl6NGJ3LUltOElzRHM0OGEtQ2M4VnN0eTdQRzJQT3diX3ByX1VqZmd5bGZBQi13NURMYVQ0YXNnZUl2WlU2VkZPNDdidjk2YUNZbndFbGVXVXRlandYUnVWRGN0U0hSblIyMFVhcXFfMWlURDY3VWRINGc0NjBaTDFYZDBvV1hKWFFGUFBTZkNwZTMwaWQxeG1GeDRGZTJITFNhOVk1SVhlUFVKRFhhMlFycmw4N0hvcVdtbGFSS0pHbURJZHYwVkUzSWxiWVJjTDNLOE1Lb1R4YWxWVERVU2dRUF9Ja2F0c1k3ei00Z09zem9odElsSExYZlpMX0RNWjluTC1wUlJvYmMyUVBmRkJnSHc0Rk84RmppbGZKVFhFLVJFZW96QnNPQ184cDdyejV4cXdaNnRsTTM3NjhvdTI0NkZLcXpxTGpFR3Y0YzhnNEJTSndtRVhpS2VWRElSRk9hY3hXNTY4REltYTg4TmNjVkxlb3hObmE1a1R2c21reVZiV2YyNU9kbjhBWmotNFA1bEpOclhUbEpnVVNla0RxNGFoa3JmRk0xMHF6RVJxWWtZcWl0X3gzWjNWVVFHUnJJQmhiSkpxNVNfWm9zcDNfMXhYZ2p2RTh6VE5lMnJJOWZQdlc5NGFfc2g5bDlMSHBaZW1UNVFJLU5HMC1ZRzFSZ3JIOE9VNy1IelVmRlhmMV9iQ1dKNXBUM0ZZTHdNVGVQOE1CaVFtSWthcnVzNXRJTHhNWFJPVzNRNDlVQ0RjSEo4c010bVI1WTJTWnhScTl6S005anRranZ0MHVkbnhLczFvZS1hQnNUTzNnNU51ejBFU1FSYkprVWlSR2hXTEszOGpGOWMzcFRUZWRqa1haWGlpVDFEbGNxcVFuRzdkZTN6TThadDRSTkRqRGNPanZCclotNUNBSDdmMWExbU56X2wwRjdEdFgtMElXRXlYb0FFMFUxdGlwTGVielhOZ2Nmc2FQNzNiNDBRYUFhWGkwRnlhdFU0TlZuRERuR2JyLWMwdE1fZWUtdVVhR0tYR0tpMXliMVhhM25mWDA2YVdpTm9JRWoxWjdaYmFZam9uYlJRVjVhbVdRWnJkMGFjTzBlTlQ5Vld2MlFkT1JNdl9xdDF0ZUVyZUpaaXRLTFYtYjhJd1BQT01fN1ZlOVhQVUlIQUpyenF6VjAxTTM4eFF5TGJ3UmMwMlBBTzhOai1zeEJWRW1KWHVvTjlhTWJGTXp2cDRBbDR5YVhBRWluZGtvU0xoR3QtZFhvVWxYTmVlM1Uzb0NMQ0RoN0ZNaE13TnJKVl9sZGcyM1JVZmdhRW42TWR5OUc0YmpfTjloWnQ5dUFjdlhIUlV2NTFjcWtKd3NJZDdHdWtreWxBV3JzOWpCc0VLRHM5N1BjNG1sQ0VKcmlnRG52ZjhKMlhlaTJibUIxejBjYTZPNFQ2dURmNTVSZk05aUN5dk1SRDBTMDdGanBYdkFMM1gzSkRDYkYxN1FHS0JJSGtWQmsxbHUzNmhJaTdxVFo3cXFyR1RxNjhrbVZGbW5GY2ptREhmdHdKRTFaUmhrOGhadkVRTFhqV0YxdTAzckthS3pmeVFTeDAwQm16ZDhSVDF1UV93NWdCYVg4RlAzZGdyc01hVGpwWjdjOWxqMkxhTlBNNWhhNXdBYzhiU2V3R3JjNEJyeXhxNW1SNTJ2cFpYNVZfRFg4c1g1QzhxQ0pEbnJya3RqRmduVG1RTjBaODdsZDB5ajhBUmRhcnBJMGlTYW1Ld3AwTlRkTm9zaHoxc21WSDBlOTE0WDY4OUNfdi1LUzJTZmFOLVhrVUJUc2dCblF5S1BQRXFYTGxOcDVzcExnY0hIWEVnR3VldkpoNUc1UWpfWmpTbFk5czlYUlRjZFY1aXRyS2RNOEQ1SFBsNXBKeXpuTk9CaGhPbnVxT3NXUXFEbjhWekdGVE1hZTNLNVNxNFRndXhwUmtva0E0ZnNmRFRqd21NXzBUNml1dW42ZTdFTGJLa0ZJZXNoWkxjZjUwcFBaRW9obVZOcU1kbHptMFQ3WGNsSVhzRnNNNnpod3diRUhydl94dUpXaG1zbmZIWjk4bGVCZDZnWHdpdGtwVGx4ZlNrWEp0M0d3S0xoZmNucXBCQjE2V0JYbU9WM2RreXF2RGJKdzRJNlJ4bmZEakNKTS1GYW16dVpFSlRfM0pQWlEtMzlMUjE0Vnk1Q3JMZnB2aFQ5V2d2QTNjTjBhOFBfVnB3eURWQmkwUTMzSWJIaElNQWUtMGhydUFnSENNU0s5ODhjakpMS1FkM1NQRmdldjlRVk8zc2NVa3N3RzJXcmk4dVUwek9jLWJuSlhXSG5yRFVpME5PQ3lxUnB5LU4tamtneEtRMWw2dVVBeE96ZUlhSUx3b28yMElVX2J0RGRBUDZ4T1N6amdIdGQzd0dxOF9xMTQwdk1NN2NDOTJtSXpaUnpkU1dUSmFBSGJ2c1hSSHF4UU9hTV9KLVg0dC1LeWF6MktnajhoRVYtamdnVGxOSF9LbDgtOE1yd2RMZzhuSElMYy04RFBRVEluWW9OUnZjMUEyaFBPZG5fYVVsRHRIYWUxU280VUdpSGtNM2dMbHRFWWJoaTdIOGhmbkp1LWM1VUFGQzRodFYxWGlwdDRHdjFFOWllbWpqMGtvX01vZ0lCd1MyZ2xXcXZrbXY2QmNobUJjeXo0TloxT0JOY1ptN291OS1qRWZ3UWNWWGVlUVk3eFN4ZG9NZ1d0cmxILXRET2Z6UExvZFZmUWphQ3FEZDBLWkdIUlZyMWl5RWVZc1hqY0FmZmZpWjRibk1lSzlUblpwYlZtZktUX2NPcW5iTVdPYVJHcWZKRWJubVJCZHJYWHBRWi15RklkYjhzRVZsaS1yMHdWRHlhNEJVbUkxaUFsZ2JCZHMzQzJmYlN5NXVUMlNDenplamM5N0hYM1ZHSHRyMUxseXJVRFBkbHc2S2JZMi1DQzRHbzAxUE9xV0prYTQ0V19rMDJ1U1hkdWVzQlVEajF2YV9jRXpVR2c0WXFxNmtUMXd5MVJqT3cwa2hpMi0yNjhuVVVseFdNNHhLUVN1dEJROWdVcUFobzJvLV8tUjJnUzl6Q2UwNzI2S0FBYXI2MmNFSkpXRE1FaU1HaHp0QVpqTnhtN29PWGhWSG05MWNhOUI4dmVLcVYzWU9ZTTlEN3BnSEdiLTRSMFZKemY0NlJXRVJLWjJlc1lpSHBxRWpQaGdJc0FCTndUdFBPWTg2QmVTYzV4aDR6aW1UT2FCSnZFT24wZ2RQSFhvbHgxbVBzTnhVMXpoYkVhckdzdFdFS1VKaXhPSlhKeElEdVV2b2NaXzgtWjFaZUJTamxxWDVDNHBrWXVnQmR6ZlRWZ2RaU0dPOExLZ2FTVW14N3dlVVJSUmIxb2F0QnpuaEtvWnZwajNZd2JENjBjcHlDZEZ1c1pOUjFGT0c2WjFTdUoxNldZZUNHQzJpSC10Q0NpaTVQTy1Rd0JSZ2d1eHdKNW9fYVZnYlBTMDc3cEh3Y0UyQm56aWhDZFNZNGVQSzdzcHBuNXdiREozV1FXekJ5NmlJUzUtaDAtMWcwelJXaTdvek1GX1FjNG9WUzNqXzE0WVlvZmM2SXRDd0g4d2lpUHg2cmtlQnNKdF8zaGwtR3RJclhyOVlLenNWQWx3S1VfR0w5N0hhNGRrdlZVWnpOWE9rMEVTREZLeC1qLWZKYjQ3NEpBRGxqSkNoZ3pURUd5N2cxMUpzZkF1bjJZd3VJS01GMUhfenVVTEJ1N3liV3R6LVZvWGp6bUoyeF82VWU4UUF4eFBsLVY4ZzF6YVEtVWtDMktvaF9GTzhUTmsyY3FyWWNkaUR2Y0djaFdxcG1SRlpwcU5QczhWZUJ4SktiWUE2ODd2c3NGdzRpTG55ZGJBN0FzTnI0MWhzUTRGMjUwV0xydC1Ta2tOa2l5R2p3WDF1NEJVbld1V0MwVUU5VzFSU1N2dFdQREpaR19HdURYa05LRGdiVmZRTUFhUWV1djRLX0xxZ25vUHJLRW43TGR6QXVPY0NOdWpLclM2cWt5ZmFVLW1TX0w5a3piOHRHOVg0MzZaeGFQYWEzTHI0UFdub1R6OFlvblVYbHhhSzV6dlZBOXlWZ01Yc1hMVEhBaUdtZEdxTkpjY05LZm90Q2ljeWtUeFlEX2ZDWjlFckUtd0FqMzl6SzV5TDE4ZF9wUk5jN3lQTHlOUVRiQ1J3dE5IdnFjWndULUpDUXU1bndKSnFhbGFEWGktamtqYjQ2NHZVWWxadXlIZzA3WHVmMHNsU0d5aWxZaTh0X0t1RER6cXh0UGZWVWlNUmU2SnVIam00aE9EQU1mS1B1WUVEY0JLTnZybUdIaE15SldVeENjVi1IWDdaamJZSDNESDBEcnpDUVJLR1BfR255bi0yU3dqSmhMVjkzcDJ1aEpHUGwtc1JDUmdXYzFIeTZWelVXYW5iN3JUZ0pKTDRsQzZlVzVMOEpkQU5kVnlRX2tIVlp1OUVCb0o2UE1lMlVpczNISWxobEFKNXV3azAwV3ByWFBKclpUa0N1UkkwQlV2cVlPek5WQVZiVjNDbHp2djlpZ1JReUh6UXpfazNHTVZhcW9qVU01M0pwUVpBMlZQMWdaal9VUE1SNjB6VjZXdVpGMVFCeEJHVFp6bnoxNk5kenRMSW9pYU95c1NFZWRhZ2VIcGgxb184ZUVYTXN1Q19paVY4dElFbWFPbi1jSmZDTXZYVVVDOXJqQ2Y5T3ZQYTdtbWxUbktPdzZTRmQ3TFBYSk5DSVVmZ1NYLWZrckNSbF91XzFNbTRDNy1Wc3gyTW5yNE1Oa0RIN0hackZxUVlCMkdvNDZIbERlWGxpZDNTV0xuaTNkcmZKb1NDNEVYd083Zl9hWFBMb3VQbkNJZ2k3OHQ4emFYQ0NSMXhSdndWa1BxRUZERVNGdjN0VkpPVVA0UGdleTZFTzFMcUpKQnhQNHo0Y0lNQXlpVUdqVkZOT3RQWWdib0REZF9VSFZST3BPNU1yZ2VaUFY1ZHpNSWFvTnR6bERYVF9UQ01yaGdHTndua2V5TTJqWTRXNktGLW5ERzRXaGhPRHJERklMT2hMSWxGdlpUTDBkNmFpc3BLa1hOQ19WUHduNWxmRWhQNjJjSFFRZC1GcnJ6U0F5YTNUSmFPV0hOaHNxdlJqUzMwVlNPcmg2R2RyMWZfSzBWajdJN3FlX0sybHFQUzJnM3hSUlZpYUR2N1U4bGZwLWVIeHpxUkxrT1RxaW9OVFJ3Q1hKdnZ5NHlxZUQ2QzNuRE9wWjRSQ20yQjN4U0h5MWFGX2lVcE5PQ3h3cm5nM3ZmcjVzY19wQnBjU0JkYmhZVmxrb0tfaElqcU1TUDE2aVNDY1c4QjNqTEtRUTJsRzlNamRBLS1QWjZudkp2Rl9zeFFQOWpPU2ROU0VodmJ3bFJiYWlpOVlFTkdxRlBxYll1OXc1Sms3MmJLeEtDbDJDcEI1NEUzLUhtdkpiZzd5ZHByRzI4Z0xoeEdTVTQwR3B6VFdWTXhHWWdjNzBnTXUzMW1Nb2xHemt1NGMycTh5MkJ0bzNGVXYwcFE3R0VHWUNVdHNPdG01R2dnY2pJdy1VdkZCMU5HTG0tX09zX2djejhhTE01aVVrWXM5elJyX0QtMDNEUzlKS1VCUy1mMzA3SnNSU0VYeDlFUzdyVTk3a09wcUxBaWhESW9RbjhON1pBVnpLWUstZHBwZVlVWkFUME02ZHZLU2Z4N1hSdEdGMEoyOXFzOW4tc21zLXUzbmhndmNiY1FUNUdObU94YjdaemFrZDMxNVlRV19tck5iaUNlSXlwaTc5dlVnY3h4dFVsdXFQX1NrckFCb3JIRlR2Y190SldmbU9nZzhnVWc2a0d4N1lrQ0VtM2FYRFdCOS1VVVpLeWN5aGZkNXhFeERSUWdaMHJHdlVVdjV5LU1JTkU3Y2FQYnVJTm5XaURTVW5NOTJWTC1YVUdlYVdtTkQxMS1rZXBDd1VOb1FOQzFXakRDSE5HWWZFVFBmWFZneXprTHlXNV9LUVZhQ09fcGFqbmhqQmtBVmNIdEZCbEVoYWRGMzhuXzRmck45bTI4WW8tT1B3enlTOEJQVGNoWDBsRXFHRy13bk85NDJ6ZEJ0VzAybFFleDFSNE5rS096NzFsYWV2MmhERTJPdjNyX3JlM1gwak05cjlBRWVsQnhqbFphWDkyY1o2Z0FSZVUxUHYzeDRMMGw3OGZPYkY1MzV1Zzh5Q0VHUmgyZHViZFJpZzlHb1d2VlV1OWZXcmdzTXFGWV9yWGF3YlpLNzBMdWtVSnh0NktSQWNvZ3drdDVybTlMM0ttcTdUUjc2XzU0WjVrVnRmZkg5bU8wQWxqVnlEZGptMlpKc3RGTGxnRnJqbmFaWjZOWGM2NjV5QnBvOGd2bWE5QVBsRkkxRFp2OHZxU09HVXo2MUk2Q3hHcE4xLUxENXA5cmFrVmpCbnJlTDJVWVVXdkVBRmM4RG0xeFk5TERhbk5RRlhmb25IczlieU93VXZUREZXN1VYZllCSXYxSWdfM29Rb2lKNTZDeVp4VFRvQldQOWJVLU5QRnkyOHRTTWZyNXdFNmkySjNmeml3VzVQLVBnS3lDUTZtc2pqZEJjVGFBMGt0S2ZEUTZudHczc1lOWWhncWR6bnBxVDhNeTlmYWpET3BCVFpyWk5sZ2hWLW13dlpwUXVJa0VKV0s1TklRU3JoQ1BFZjRrekZaa1BwdmVYd1J5emJvMnVrNGhVbVViS1YxZVU3MENPZU12QkV0QWJidjRIM0x0ZFNLZ3pjREtfREVZN3g0ZnBnZEFhNUd3NnMwcDBwUXJqdUVvVEFVbVZiTFFkdW5WcmNDNXNMUnFRSUE2RjNXSXpHRjNucGx3VExiR0lhRzR0MFd2Sllrc3pvY05SSXoxOHVIQkdUdWJGMkVMXzdmcTJTQjBreVV6dnJtcmN3R2VWSExfUDJaX1NlWklSWVEyVWI4d0NNbmxNM3kwYS1odjNnR29DbS1ZcXNPZ2tLeG9TS2FkcjZjYlJvVkVpcXdSQ3lPYjNfTlZwSjA3cjhYT0lYQ2tvZjFlOUNQa0RRbUZJYWplYldvMlJxNW85bFpFbWNuRTIzM2ZUVExfU1lwS09xbmZoSzh0SlFKUXE1VkFBbUNQbXg0Q3dFTnRRTHliYlFEYWdCRXdMOEx5TjZfd0RvenBLOUkwU1dJcWJLWWpOVEpHdVRZYzZFTWlCOU5mNS01OTVXejJURWdhV2s2VVY3cE5pczR6amtFMjd3b1BBM3o4djRSV3Zna2hzX1BzZjlYSVlLMEJtYVl3R0YzV1BxQnI4VXU4RTV1NlJ4d2V0RUREMUJPd1lTVnMyV1EzSnRrdEE5OXpuRDlLUUxyalMzRWFUZ2s4U095c0Ztb2oyWjBzWUNWSVZTajZnczdQQXR1eWFFcm8taHA2bzRDckxNM0hOZnl0X2Rkajc3c0pGNkREZUU5NUd2eU1NSU9SN1J2c2hMbUZHdml4RzR4cHdLNlliZ09wNGpCcUdKVWZRWkFmYUZqRGlGTEpGVjJ1UzJDRVFuNmlOVnV5RjIwZmdpb1VoRS1Da3NnTEtkN1A5dV9tM2h1a0hqbGc3ZDc4QmYwcno2Nl9FVTFKcm1jcUVmOXhSa3NmODlLaTcyVE0zdkdsN083TjR5NUx4SWxDOHcwZkRtc2ttb3hIUldWV2NpamJFNWhLVXBmU3lhdFNMWkhsd1k2M1kxQ3dRSFo2WkZNMllYS2dqWG9VTm1ZdXZhWFhlVVM5b2NtQUhtNy1ubl9LaVdrVWxNb0VIRGhYTVVlSVJUd2N3RHVqbUh4ZHhycGpTMXRXRnJDNGlYa1ZDX2FuSHFOZ1M2MGhQa2xsZ0REb2hucHV6UTBpbTgzVkVCWmZJUGlieXNVZVV3eWpPaU1nNWZEVXAyZS1lcUNRbzdYanc4aDdySmR1UW9lall6UTcwZURnMTN6NmN3SzVKX3JqUkg2YVpvTGJmYjhyWXpLQlo4RWZUY1JTMWhmaVpYZHpwQkFoT2E0c2xnYkV2RXZ5YnlRWmtuc3Q3b01lT2tnd1NQS0k2MjBHeVZoNm11cVRLdy01NFlrZkxrSWVVSlpCdWdnR2U2VkxBc0ZyWnZqcUtfVWFEbldqNnhWakNrMjlUT2s2Ym81MlFvNG92TWNQaF9Td1hQckd5d1k2QklYZHhJLThBMEkxd2VTSm5aM0FlU3pEVXFjRzAwdXlIQ1AzWjF1bVJudFM5UTQ3VmFXZ0dhZDFxYlcwWTlvS2kxdDZDSzlFblZJWVFBNDZyWU5QX3pjRFhKbXVlc3FTRHpNa0FGTlg4MzdKdkpKYnhvU1dnSHlNRWlheTU1ODBYcXVSNk1faG53N0Q0MzA0UXFhSWU1aFNCVW96SzhXNVNBbDlya3lZQmE2ZlVMd0oyYnVoX184b3VFV3pTMnRaczRwMFZQNDV6azRzTlpIRjFTLWFRczE2bktROS1ib1lKRVZsVVE2ZDRPTzBaV1ZXOWlkRXVHOXdYNG4zdnQ0b3Zwa2FVN29wS2FzUThTd0ptX293RFQ1TE1NYk1xX1k3UmtSMmZfX3p0U0wxT0VoRF95dElERmlod0RzVTdpVV96a2JMY3VVNnJ3RVFDaHFabktWdHJUaTFUOFRyZFhmWlFvMTdSY21VSno5eFpZTktkM1BCWC00N1MzQ3Jwb3BlSWRxQ0N0dGxQVDBsQVVPS2E3eENISEJzT0tBYXBMX3I3MlFUdFlnVFZKVnNwQjF2RXBlVFQwT3FfVWt6X3hQSXFiVVdVeTQ0eDZuYzJpWkw5elhtMnF3bGxTTWJ0aEJ6c2MyS2IxNHBoMG1QdG91QnRKVVNtdlNna1NzUW13UU8wOWNMeVN6RTZyTWljRmlJVGlvZzZVcG9MSC15dVozYlJadVNJZm9lUjNqb0poNFJTTU5DQVIwRy00b2djb1E2a2hNZnZ1Q0FNd21vdWVxcUMyNlNGUWE5S1N4Tzh5V3J0VG4yZUhRczZKZjFFZW1fbGx1a3lIRjZlcUVzUlRnc3pyRTEtZkVqRWxmTGY2Q3E5UWUxQnRlOENJaHJKZUtBcVlidVRFTzhlVXl6ZnFtVUFvcDI4UmlRekNfekdEdDlYRllRUDhsY2llVWl6UGRzR3hoYmNrR3BZUXdsY05yNk9RYkg2dkg5US1JaXoxYmdVZk1YUFRRQzE5Ty1ZUXk0R1Q1MUVNU1VpbEtEU0w1Mkl1WkJHWFJXZ0lWaTBYcUFxeGlIWW5EdlVUVTBtNzRfQ3hyYjR1OHB2QlMzVHFPMzJsUkdxRkt1UzFVbGJ3VHF3S1h6TGV6UG1DVjhHOFRoc2xrQkxXNndNeFpscnlsQzZ0UFRkX05BN2FnTS1JZGpvLU96RlZLaE1mLVozVjQzbnNxQmxXSEU4dEVqa3VaWjZMSWNrcGtERTVfUU9EMnJoNVhodnVkdndZbmxmUVJzcHd1NFpUeHpwMzNTNGFQUmZIS1RHamJWYTRvcF83cTFqZlcyaFlTNjU2VFZscTRvblJsdmpiTG9UdUhzMl9oSGdSS1VDbkhDVWtZSWNocUZpdFpmSnBhU3NPSW1YNElYU3lBVXVQMi1VRWFvTVBBNlI3aFhleGh2WVJLRE5ZSW42ZHF3dmdTaUtEZnF1QW0tdzBsVzhFWXZlMEYySTZzOTV6eVhSN3BQUy03ZnIyWGRnWGc5NHdZamszU09DbjlaMVk4LTRVeXhOMnVJOVgyRXZ0bjAzcFF0X3o1VlAtSWVrOUNvbjk5c2tMM2xHOHFIWW1UMHM1cGc4VEZMcnhacFh1Uk8tcnFQT3haWTVSaEl3ZURyT294VnJ6aVFTM09YRWc1bC15dTZ0Z09Kbi1QbnVoVVljZlo4QS1vZDZWRXlOQW1rOU9zbF9EbXhoeVJ4RWx2aV9KS3liRXd0RTZ1T2tkZXJQNWRral9FMnFtWTVvQW55cmxlaXVpNDVNS3AwcE9FY1AwbmdEZ1lWTVdJcVlNMnRZZG0xeXVZbm1NLVk0ZUlsNFlvODREd0o5SkdKWE1yTDRvZDROdmlPQzdLazRfS2pWcXBweTMzYVcyY2RrYV9SVmVacnkxQ3FDZ1lkaTIzNUNtbm43cXR0RWVRZmhMUzRGYWdHMHo5czdlZ2RtbXVFb2lxRjdBd3ZRNU1Sdm5nS212bnAzWWJuQURMODRic0dhYkNfbF9sUEt2NW90S0NwZzBsaUI5NVZqRWRma29Yd28yR3dLV1pXeVV5MzNIeW1renZGWG1IQ1d6ZjI3ek1Tb1VDT0xoYzZaSVB3MTRBaG5lQ1Fzb2RaOC1yclFWcjBkWHEwWkoycjVYUEJESkNuU3pmTFdSMHpRX2pqczFsSG5obklLb2pyMXdhWE1ZbEI0ZDNmWHM4LU0wa2NPaUs5eDh5TXl4U2h6VllFRzZqMHA5UjFqQy12V2tBRWpDcWU1SkktQUNlaF9SSFBTWjIyMkJqWmdONDRVSG9DdjFRZ3BBbDJWRUZfenNBSTFqZXhqSDNGdk1SNm1DaEw2MFhXTWRfNGhDUmpCX19NdVNtTzZHeVdsSVdERVFrRFpmX01sdUxGSkpPX1B2UjdOUWhZYlppMVQtRUg0UW9OSEJsN1hHa3dibi1Lb3lEa3Qwc00xQXdZZFBIbHlzMWRqR1RIY01XdVlHNURVb1pXWGVYMWhvdVZuZ0ltS0tKYi1waXhOdmd6QWp5anRTSS15dzZHNjNMWmFodGtYNUhFWXN6NWdlSG1XUnNBMDlsaDUwVDllUXdoNmNydmNuSHJRaHZPZTdWSW1VeklNUG01NWYzWWZfSlVzZXIzaGtkTGYzRmlvampBVVhNOHlVTVZCa29GZGxUZ1JSZEpuRDNiMm9QWlZ0SXk2V1JZTElFUWNtQ19TZzBfRjFKZmJ4cGNBTkRTUVNDQUJDdnBwLURRQ1pIOGQ5TnRQeHdJOXZBU2VBX0ZRT0t3anBXaGk3bDFLejJUcnNZVFpmQ0R2dVZzRVlSSlBVSm1DT3VVYy0taUtmVldISUdtZUljSDRzSEVlcnF6d2xPLWZuRlBHLURNLWlMdElMQU80R01tN1NxcDRZVUZyTEtjd090VkVPU2hsNzE1R3puRkpDWkJWTlJIV3IyOEprSWZSaU4xT1VOZ2dXejBWX2I0SGZtcEVWVF90VFhqZ3B2VTN4MG5fNWMxazVRUDRoUFp3MFBEbWVyTFhtOVlEa0x1c0lfcElRWHJreEV6MHZSOXIxZzBVWFRBTUxoOWpYejhtTDRMX3kxSk9TX3NfbnF2dWxuclZvQlJRQllpb2JsSU1FcWFjQks5WUpXNXktTlFLNDNaM093Qks3M05jVmlONWJXTDJmNWpSY2hJNjRGWXlWN3hOUTgtN1Y4Y0xRaWdXZGVwbVlrN285cG1QbWllTGg0c1lqYnNmZVRfeU5kbnEyZGRYdFdKWGkza2poYjlrckdUV0sxQlRodzBkWlB0c1VpOEFXZVRBMmxJRUFlTl9JdXZ3VTNuSWJGQ0pxQmQxODhXaUkwNkpOeFZ1akFuVVFXelpXYWowQUducE1LZ0JBcGVULXJxV25qQjRuOGUzbGhKa2E1UmRlMEpVWHp6OGtvYWJyTm9fbkNjVDRFTE5CclQtaE94RlVyT2EzRDFtLVVlbzF2Vnp3WGd5c1Z5SXlkazRJa043RjBnX2l4enI4RlBtVnF1emZraDZLMFkxUndVbHduY2Fvam56aU53THM5Mm5RRFRfYl8xNktiRHpqcHp1dGpJUU04TVNLbHNoWlAxVWFUT3o4Tmx4QXlwU3Z1Tnh5Yi1aSElDNWtqdUduVWRGUFRaNVhzS1lZdm1rMUJoY1BzamhDOTVRRlZfOUdVcTNWaVhxZmdZNGxueGpkZVpRMmRodF9tcDFzcV9LcmtvQmQ4T0lzbzVjTnFMN0lvSmNZdmdMb3NXbzRrdXRacUR6bTJKSmhxcnJJeXBUaVItMmRFeVR5SVhYTXRJeUU4RlQxeXdtdTZDSnNwTGJ4aDlBeklRN0VnSy1zdGVfaVRreDBrbXl5V1ZMYVFWMWNrMW5CSWVRRmJ6RzAwT1NMU0VJUDhWVk5WcHkxSFdNUXY4NEJxTk5rSnIyN0hsYmlBY19iR3AzdTk5YjdlTHBaRkFUNEZsaGdGSGVKeWxpdGstWG5zVUxPdjAzeFJLSzFlTm1jOWtlaVBDMzdnSUc5WGJidUhsQTExU1I0TGx6Yl9zdFFMS1Y0cDBOSXlWc25pbFE1cnczck02UGQ2R3RMVmRvZDJSNHJwUXVzbjJxb2tiQVRJcFVMb1AxZ3ZwcEpfOWJQTEN0T1YwNHo3enBSTTFrNkxLUVVReUUxX3M2a3RZVG5wMHUxX3VfT1UxX3ZYLUdOOWJKQV9yOEZkYUVsaHR6SG5jNzJfc2RoaUxjeTI4NXNjNVJoQkV1cHN1ejFTZkpYX1B0dTI1WHRkeUpSN1pqcHNudkRQQkFfQ2JjSkxSS0dQNjF5eXV0MlA2UjNIdGk0VnpPSnVXcFotLUUxaVdFa09oajVZQVZOZ2k4X0thcU9vZlZOR0VVNEVIYnpJNl8tb0ViSzJIclMzZ3Y1VWVBaU9ob0F4aEstaWxqR3ByMjhCM0ZtOThjZmY0Ykc5TjBSdVJIZmtTUWJRTFFsVWZnM3lGN2VqYWVWaVhfdV95TUxmQmtjRTFIeEp0UnUydllYY2o2SUl4WERPRkV6Y2hRWlVMMlA5T09HNWNUNXpSUEZQbFc5VW9LMWx0ZnBDcEt5UG1aa05QcEhhZnhrNlVLM1BxZU1PbE9XbUpiTWZ1cUNxS2otenlhcnAyZ1NqTGI3T2hOTHUySWlxSWpkWW90LXZTN3FXTFJjTlZMZlF6cmxIQzZWaUJLbTFPX2VFTzJLRHBUWHlkTG5sWDcwWVRWOEhqWGJZbmZYQ2dkb2dsS2xHd2VkVTZvUEdXVEQ2RzlUeURReFRnMGoxeWoxaW8tdTY0R2dJZEFqWmE4MTFnNm1DZlBrUTRJUTZ5c2p4cDd3TjJwX0xmd0Y5Y2RlYnJvcXRaWW9vSDBjRUhZcGdJYk9hYTlTWk1RZlhoSXotS0g3T1p6ck1HT284aHRaOE5Obks1bDNyV1cyNGlkb3NHYnowSGJhcjR6d2Z0SHZNc0llVlVsdzRpWGV6a3RfN2tlU3RPVGFSWlpDczVTTFlzMzd1U1FadWp1VW1LVUl5bElhZ3pyOURSenBZcTJFeENlSGFEY25LakNEMjJhcHZNUjR1WklIU0xIN3BMYnhGNUZHUUtaOTZPREZDeUZLd3dJSlBZai1MMGpkZ2JGejFDVW9QY1FMNEVIcUxGWkt4aDVKTVFhZ29vSHVBdC14RjRoQkxRRVpCV0hpS2M0dUsyYmd3TElKZjdtMTRUMHVlVjVhSlMxeUs4bXAwY0pHT0hUbVZXTlVDVnZBWE96S0I4dG9qd0s4U1ZHS3dLR0U1WGhXbkZjWWY3bG1KUndrT3BFbXhpTUk4YkdjaHJYSGFnZDlIazhDdUxFVUlzYWxxc0J4WkJ1T0lzUG9PNjlmcFROYTRUR1MxMmkta3NEbktUYVJBcFBHWkdaRkM1Zm1ubVhkTGdEa1k5VllIN0tnbDlxNGJIelJReURYUUN5T0N0X1lSZ2gxMFg0bm1RTGZiel9ZX0dKbHBDV1NpbDQ3M0lpd01La2FseHlJWmlJZ0pKNmdZeFo1VjEtTlpfVWI4ZUdXNDFWeVhKTjdwV1dIbU9TdExrdURYeEYzTmZzcjZxWHVPcDZ1REVHVW1GVkdmZGg5OGlYRTEwclIzRFN2TWVxNEZZb2JIQnFnYkxiQlNTeTF0b2pTa1kyNkFZRWdtckduQ3RCN29DQVE4TGhkTXU1d01CVEw3Y3hQMk5yZkl5dVBZTUFoV2k0RXN2bU4tSXJfeXdrbm9uRHZLUUpjaUpsdW5uWEtKRzZqal9OYkhOZ2tmYWJuOUEwLUlLWko0VEhiTGRnR1JTa2Zkb25MOG1MYTZRak9zZk1pdVhKYkdtQWthVXJ6Z1BWdkJfVTdOM05qSlFfUVA4TDJGSFBJcXhBcUY1d3VsN2kzQjVSMEdxdzZHUjlMSERmY1ZJZHFxUGZCZEd5dUtRaWVEQkJvZGctSURwTXRWdFpialVnZnJoYVF4NkcyR3B4TWNjalNxNkpqNzJsNWprRHFZWnhIMXotZmd6TlFuOFoyZm83bmZoTE12MXZOTXRzOGM3dVlEVGVHNTc3NVpFcGRxcXdwRmdvSWlJVW1saDRzOW95VkxoX1JiYm00R1hSbmpibXdIWk4tRFlWaWJNOXhJN01fc2NiS3phSmZicnlsTGhNQjVFcmpwYXBxNVhlSW5OODFITXdmQjM1SVRVNDNIbURPZXRBT3Z5Z2lOOWNveG5tTWJuRlZGVGp1NUNxVVZwRGNxZFVjVV9Kd2U5Zzc4Zzc2aWItUnpKaG5VbzhUODU0RWZRanFXM2JwdFFjQTllemZQMjRIZkV3YnFDZzdJbDJkcmVfRDVyTVJaWjRoaGN2cUxBUW1TYXJNamZDUnBubi05M1NzaVVNM2I5a1BqYnlIMzFMaFNPNmNib1BFMHA3azZBMGktWDdTY20tM3hmMHlxcXNsUlhTVk5nRGoxYjdWS0xNbE95NlZ5TGNDTDg2SW16UFZIa2lFTEhBTm53cF82V0I3TGVYaFFUb2JKcUNGNE1zdDBuYmtCbUVhY0JRN1FpUS11ZEw0M2ZTUzd4ZXgtay1EWngzSzg0ZVpCSVFxM0pJeTJZblo2Q3JMbF80b1hJWHdlNTZhaWVCSHhEQ0pCOGNkVVVId0Y3a3BMXzZCZDRaWl9FVzhMc0tqZjJOLU9vd0k2NV9PdnZ4NW44Z1FpN2xra0lBUnhkNmNka25PMXlkTThZRmhEYWtNMXBmTEYtR2dDTzVrdkVNbzJBRWMtT0w2bDhCS3dvVm9uM3M1blRhNjdWNVplRHJJSVdDdE9hY0NTeEZzeWZYaHludUtFUFJHTy1kRE1HZUFOSF9BQ1FWUzV2UUVaV1NNRTkybDZQQ3JXbmZPRFBIMmw2TU51WUtxbjRySVpwZnd1MXdlMDh1cWJSZVFMTXQtUWZzLTNDS0RCVGJJbFAybTd4aExKdm9TUHZPQkZtc2lvWlc3MkVLM2p6dHJENE5wNFJKQ1lNSUdUeXE3eU1VaGhhaG52dXRpbGE4bFljRGRTazNYYXpkYXFfY3A2X2l1MXAtUG45cFA3WVp2MFQyaVExNDRuVnEwX191aHA4ZmRqeUxZV0VTajFFMkpnRlFEUjVtZ3FGeENTQTd0Qy1XRUFoMTR3V09iMjFnekl3ano3LW55cmpYU2lDbjBPZDhHenFnVUtRMWhZXy10c1pLN3pFbEx4eWpVVVRXUWJzQ0FVSFRyajRDVmJLZGFPYzZwQVQyRzRpVG5HWXhHRVh4S3pybURmaGhUNzdJZWJIQ1I0YVRlYlJET1NSZHBrNmthNjNCLXJzS2Zwb1BfbWNlemk2akpMNmNmVklkbWJVUTBPM0ZwajdfZEdBU09jWnhhYjdSNXVNVDN1QngtOTJXYzNlT2NkNVVsV2VUNzVvMjVSX1JEakliVkJJSUlaVS1Xc1R0WXNiMzhkYXdsTFB0VjBXSS1mX1J0engzRk5ERjIyVm53XzgwQUVFdXhiYk5PX1dSRTd2eTRxaUYwd2w4YmhoQ093c1NMYjlBeF9pYzFsV29WNEZINmlQRDhYWlRna3ctWE8zSExuaVZsNzY1d2Z0cGJqcm5FYldrNmdDbjNrWV9ESmZyWmZ0RHBHbXptN29TMWlHVi1LM2hHV19IbGdEUUdwTVBGSWV3MENOVVRQU0dUYmdQdjVvZzdyX1hfYzNqbFJEZVhLbVJvNWlGNGtNZUV4VDlwSktUOHQxVFZ2YTVzaUVQZ0Juem9LM3NVLU5OZHhzc0JTZ2x3OHlLejRxazNhb0VkSWZRNnpXdXQyTHNxTnhDb3dUcTk2aTFtSTkyRTUtT1g5ZWROQ2dfTHRjOHRaMXlLUDVaWXhBWFFxdXNienNSbU5IZnJ1bklMQzNVem01aVJvdXZuTmczVFVrcjlKM0lXc2QzWFY3X0ZLcUtUY09ZQjZFVkhZZUVha1E2V2RqQlVlMllEQm5iUW9oY0NWbzBtSGs2QlRHdEo3Q2kySzhaWi0wVnIxc3RZWlAyNU9ONVUyeUlfY0FWZXRjMGFwbjF1VjdRbGFOVUp6MmltdUNXNXBQY1Itd05GMGNPUjlVSDItUklaXzV5WmZCZGozaW9oVkIzSWxkb1E4Uk43UE9pRk4xUV9pTUl2cG1zVjlLNkV0YjZJV2pSdUZSYkt5Q1hoS1daRi1QSXR1clZSblVmT1M2MWdKaVVrQV90eEh2YlFVd3c4ejJNVVNfbUoyek9oeWR6Vy1RZzl1a010NFlfV1VKQmNldG5NbWZ1NE5HU3luMDRmcm9LMDRMRGJ4T1pDRnlxN0lzWmIxNTNFOFlyckxldE9BLUNZb0NaX2R4X3EtTE1XNnV6c2o1SnFRblJsSUY3eVphT1dMMGQzdzU4VW8xY3M2aFVyblNVN3QzUTNkOGkyWUlENXBoeGRwb29XcGRldEtiUlZNNGZaNTZ3Y3BLd0NlYXNXbGtoMWZWeWhvZ3hvaURtb2lrdnhDVmJuWGdPTTJnZ0xyc1lxb0t4OE5IajJGeUVoaUJGOGc1WFRkcFhwbEZjaENuZXB0Tnh3M3ZldktqYzhod2FlOWJoMUtsdGJrOUU3bHlGVzRkZFM3Y2IwX2dxUXpENXp0NnJIV3VDR2ZjcVppNHM3QjgwRXpTc2ljREhhd3JQRjhjYjdMY2RpQ0JzWEZheFZ5bTBpdjBIVEVkQTZveU00ZmhHVENISk1vSFdZd0ZKR19rTXpraUhIRHRTbmpEVXo2OVRlN0lRUk1OMVJlSWpWd2doSmxHSEo0ckU5VzdsMm5WMlRpQkFEWkJLbmNEUnZkTllDdUlGLTBRM2ZTQWdFNkVaSGw1dXgwV09VTHJxZm1qV0s3Zm92MGhfNkhnSV92MVV3amg3MHVXMU16SHdXbXpmelpMeERJUjdjRkstWnIzdm9WZDdaalpJTzJjNUg2Q2FORGt5QWVoRkpfM2wyWERQMU9vXzhZRF9pMHZKNzlkSExRUkN5VHFBTWhtWk5oVXRQWDRvLU5aT0ZZa3dvbWE2TURTZEJVSHFaakNBMlFGUTdhSDZubDlvbzl6b1hpQnl4OFlVa0JzTS1wbl8xZm1qUmVhMUlIcVpQbjNERzIxUlZqVTRERlpKaGcwLXpSR2hVSWFxRkYzQ3k5cHBXWmVDdlFYdWxSeDNmRkdxeDlmTUxYRUQzM0lMMmJJRXJJZ3hzUWtqTXBuMzJfMkVfdnhyOXNRbXlibkFIMFh5cVVIbTFYSGZ5aF9qd3V1VmdMRnh5UXdVTl9BeG5BUXd3RWlzQUkya0hBTmF5SlhLMUhYcFpLYmp0dFliMFdtSkRVWll6Nk5wQVlsN0xfc1N5TUFXS3FDb2o1NHFFSkZfWHNWY0NUU3Z1VU5kLUg3UU1mRklheTFrWnl1aXhHaUpPTnJQRmhjUHBvZndlQVlFd1RRRV9lYTNrVDlRM0tjVWF4ZTg4a2VmZUE3ZGU2NjF2cW9KMHY0ZlJ5Z296NFFzWXdrcmtock95UjVPcTlxZzNpVnB0YWd6eUVGNl9HM3o3Tkc0REM1bEZFX0I1X1Z0WEpNWl9mRDgyQ3A5d1JTQ1pEcnlyeExSNzNWTVdTLWJ2SFItRXF6VGRGcGtOdG9IbUlFYXlNWjdTMUtHMXVOUkRrNFNBUjJ2MXJZWWxTb25nM0gxRTI2cTlWMlJ6RDZMRk5YdDNoT3VURmNUOFNrWXNzSDBWZmItREFnd21lRWZ2WVpkbXhBa1FhYllZTGwyOS1yV2F1c1kxWHJiTkZYV0lsUk00UVN6eFQ4OGxZdG5vZW80a2pwT0x2aGxiODdpNjBzdzRSQjRDMHVDUG12UjBvZ2o5azVuZWZMMlNuRFhCX2VMTjRaVVdVTkxXZ3lvUlZCNGMtYVNqVmNUa19fQWJ1dWhrT0dfNkNhek5JTkF3aEFmUXpuUUFPdjNQcklUdkNfSXFldVhkaGJhT05ETkt0ODhvemtISmVlUm5nbC1JNWxJWUlWRWNyOGl5ZEdwRThBbHZsLWpWLVpPS1B4ejl2YnFiOUhfYW9fLW9SY21UZDRBeFdlUWdqQ3drT2RlUTlGTTAxQU5ZZ0FYTzdKaDFXTWE0NXZRWkRGYkVNb1dTNUdxOEs1bWRXWmlyRjZXWVJ2TVdnUTRpTV80dXU2U3ZfX1FoYmZFdGRBbWpjeFM5SEFRM1dkSWdkT2hiSmQ2NkhsQk8xTUNkcU9nbnE3enRXbThEWFF1a3RfaWlvNHZPSnZ2eWpDRjVVeTJmMXkyRDVuMllubnV3RTFtNF9JQzltcE9IV0ZCR29na2FpcTZBazdva1RheTNVaGdIbWZtb3plVFpjcE8yWlpzZXNqOHRpOUJ5TXdQdHE2c1FnWG1WSXRveWdLYlJWVWNBbHp1TkFnXzRDaGJYUkxnTXlaMGJ0MVdLVnRydC02enFoNXpwQkx0ZTI2Unp1RVdoZFlUeEdQRTdQU2JKNjc3WUR2ZFNDUGJyRDhFOUhzR0lNYmxVOHZXUngzTTN2Tk9lZkRYWWVXRWc4dUZ5S05CTzFyWElWdXNXMnI0ZWZxWmdFYkNOcF8wRGh6aXZKbWhTZkF2QnBQbmRuaDJzSVo5Qi1zRjVLQjFaWG9VVWJYREFUY3BDajNJQnRhalVsZW1wdkZDeElodTJwaDNHOEhaYVVJQ1JZRjJkVUUwTkpmRUxVcHJaZXp4SG9qVDNxUHdJM20wc3hYZ2ZtYzdnaDdGYVQwQ05HSkNzYmxGLUlQOXoyVTBhUmJwNXM3MVhVb3dFTGdaWnRYU2dmV1J3RWhCX3NfOXJ1c1pDbW5VMlM4clhsRjJmYV93TXdpQ3pacG4tcTBpY1BzSkdBaWtIUkZXcGZ2NkVWMmItVk1UcXlxRElMYURERFBqRzJuWXVRTG5IU3ZheGZYQTViajh0WnJZRW51VTJGTHpNOWRaQjFDUDcxYm1melE0UU5aQzhrWVlsaTY2SGdnck1vREtoMWR3MmZpTThnQWhxeFhFNE8yd0lKQzNYdWhsOUVTQ1pCNkctd1hucmRxbHFrTHJrS0NTRVBDVF9IR3dzUjhxbUNNSGs3VHM1cTNwbmlsbUpTMFJEUkpDekNwS1hGTkZEeE4wY2xTR3dLRVZ1bU9OWGJkNmsyejR5WFlsQUo4YTlHNEt3c21MTFZiN2xlV01fQ0lYbkgzdW1tQ0Z4bnotS2Z5M296OERrem5iZFBDRTYwSThUOE9GdDhrb1lKOThPRVBXbEVVNmpJelBWVFExcEw0WmxxT0tNU3NESXlVVUgyRGh2SW5xelNpYmNtYjl4UU81Vk1aUllDdWo2dmw3T2lkX0VEdHRLOGhLazVNb1h6cjZ2a3I2UjhHUV9xaWt0S1RtSEdqNXNlUlJlN25pUHJNbEo2SUUxUnh0MWg2cTI0RTBEaXhyazh1cjctRDBHby1YVVZZUkloLVpCRXFRck9Lay1lU0hsTi1IaWNVQkpOMkkwemdDTGpTMzFRcU1JcGl3S3Z5LXlGOEVEaUFQTy1EV0JSYkdfLVpxZTJ2MkhHeHBNR2hjV25qdVZROFVWNlhZT3g4NXFtRXZEbmxfZDFVNjctNmE1WHptOFpSaFpnYmphWVY1bzhJQVhNLXFmMlpOMEhFd2xBY1V3WTlXeWpPRzJ4T2JMY1RZZlVqX3lEOWZrSE5yc2F1ZG9hWnpyTFEwRlpjZVhiRG93MU1GZ3lsQnlQQ2lxdG9lUWYwMl9ob0p2aEttYU5ET2R6ZmVCQVNVLUZVTGJOLVp2cldramhodk9fcFhjb1M0Ulo3eUM1aFJzTFBfb2lVZWs0SllFLXhLS0c1TnAycmFkQnZRcUhqUEo4THg4M1k3X3puYUdBWjl5MXJKWGR2RjEyRjRRZGNtY084WWVBRW10SWF5ZlFUZFRhc0dWcTlMRjZzY1VqUGRhd0k4NVRFRm1JMVBtTmNsM0cyQV9wQzRobUg4SlBHdHh4ajJBWlRzbnd3RXUwTmVJTkpIUWw2MHJJbFFydnNpWEQyaV9SNWhCYnRYVW92UTdfRUV1TlA0bmNsM3dmcHRwclFNM2RNM1p4SWhUMXRtQzJLdkpDMFN0T2VMMndGLV9RRXBZWThIZ3lWR196dDdIYjhpZU9rMEgzdDluN1RNT3cxMXdXMC1ZT0FqNGF4Vmt4NFNGczNiNGhQQTMwdXl6QkdFdENzZFAtTEphMVFxNzJWRGxSSVk2dVF2LU5Od0RFNkVKalZOaDBhbVFQSlBpOG1kbnkyaU5mUEtFRGdtMzRhS3RwY19ZSFdLdmwzWEZVSmdjTlJOeHFZcERZWjUtdE1OaGdKQkJkbUJJaUcxa1RseE5Sek5Bai1EbmxqaEo4M3M4V2VkbktTZTAwcS1aSE5UbHFmUjVnNzBVZDgzRzhHVGZ6ZG5tTm9IcmxucmZZT3ZXVkxlYmN2TDN5cEdxa3YyTFlveTlSWV95em45TjQ1RFBiTGs5bVQ4OXowX3RRUEpEWjFYa2NTOVVWR3RHQTE3cmdmSWVWdExVNzkwSWFFbklXV29PUHdDTmVVVFc1WVdxN0hZbkw5TVlRb1NPZDdzc1lDRm5aQXpDSktEVUlCcVNxaVV6UVNMSXNzMmlTcjE0WGVsaTdWYllYaEZ3eHQ5RC1ZZVBFUDRZeHNrYnloTFRpUTR4cE9USmdVU2lOZi04ZDRzSC1jM1lpbnhjZmxqUEc3YmlRakxBbjJJb215UTNvTUFqMHAzMVJzU0Nwc2hJeVhLQ016ZXB2TVREUl9jZkw3UU1VRWVzSE9sTkdIX2ZLbGczc0JPYWVLRDE0Ymh1WTZGdVFKZGxqN0t5ZEhyUmlhMXVESlBUMV90LWg5LXhUYkxjSndVdURSdUNxN0tNcWVUXzBUWUlqNkU5cEs2eTdwQmlxZmJPUG4za0d3SHJLWGV1REFDS0RpMHBVdGNXRG5tbHQ1d21pMVZGanNxc01saXNLTUhhX0FIUFh0UF84dE1LNTdaaU4zMDNheEFzckotMHNkb1JtdG45NVN1TVR4dnJ6RTUxVE5qT0xXTjJjU1FDX2ZrTzZ2YS1tcmhMTERwcGhkU3o1LWJNaVctY2RGTmdoLW42dF9zODhzSkpBZTBxQUZOZXc0dG5ZLWpha05CX3ljTWczMkhGM3pUakJQb2k3V3N4WldNMjlYLXpkcmFJN2t3SWY1RnlxYmNXRm5ZZGhyVkdlbFRiSDhvRGpKVHE0M2gwdnlOTC1HVjRNVV9UMDdOTkRrOW8zN0JvNllwaDVnTWtTWTJSVDM5TlFxMzdEQmZGQkxkWW9YSTBPSFFNbndZam5ZRmdZeHNyTVhqX0F2MDJ1S2s2OVFSVXVaMjliNndyel9YeUZxT0hPYzcyQmdfM2w2WnFlZFN4NnB4WE9MWFhvU1h4TFZrWHVZM2NSV21PNnRMQm1lZzdOSXpwY1E1ODgxc1d3U3BDNmJGaUxmNWdNNEpGMHp3dU4xTy1RU0RFNWRaZEF2WHFPSlhGUF9VcW9UNlZKeWdIUy1PWXZSTDZqelp0d29ONnYzSE5Kek42SWdpeFNUbnhRbWFSWGEyUHZkV21CNlVwRUF2SlRwTmdaMW00LWtQclVUZC1UU2hjVTBRQ1RuWXhVdjY0bkRKVm5oT0c5X2R6QWMwNXZ4cUoyTHZwTGxnYjZiYm1PNXFtSGtpcXQzRE5ydHl0cHRDMDBmNUE0Tkhmdkl1VVFNMVhSQjVVZ0pkdDVHcWVaVTNoamI1UFlGRE5BeUhUaHR4dER4UFpNU3g3a1gtWDNXWWJRUUFsdnJfckNVMHhWZlpqMm80SGYxQWI4S3pMTl9Ia2VNMWlQOTl2U3pCeUI5S0VQbWd2cF9tR3dQbDk2Y3hRN0lDYjAxVk9iMWhySkdqZkpIUTQ4dlNYamRsUlVvVTR1aURpODR3Nnk0eUJ0eTlWMDU3dWk4NWdGYzdmLXdHOV9XY1Z2b1pOQkE5eWF6bVBqZmdhQlpid1F3QnB6NUNiemR6aXg3cHo1T1EzNDRob1Q2NXdadnhpamktVERuUXRmREo4Q3Z4TDlBazFvMW9aNHNoZkQ1M0lKOUR4bWUyRUEzMTFWdjg2Sm9meXZnb0Z6ZURLOWdKOU1VSTJ1NlZmU25fUlZLcGI1Y19ueWZ6TXNpS2dmSVFCX3dIYmRkWlQ5TzdPUm1VRGotOXVhUEFmeGFzS0ttdTg1NHFDa2xqc1lZd1NneHMtU082UXJtX1RwVUNLZjVQMUJVMEctaXk4MUpTdWtSQTduUzQ0a1EwbkwxOFA2bzJxcDktcU1HczdYVlp1NEhaM1otUDJrVHNFZXBBME9KcE9lWnRJdkFSZm5MVWFBY01RMUtwUlV4MTdPckhOdEZMTk5nOXVITUE4dTlGaTR6MFlpQ2JCWm1GcUVldWlIbUtTcEJPcGxBY2EyRDlENl8xRG9SdDhjOWtHLWFvVzJCRGVYUzhhX3pGWXZ6by1ZZmFydWxxaGcyX3ZKdFFjc2pWdldNZ2k1WmJubEVteVoxMGFQOW15VXBWZFpaaHU0TTJtbW5uUUh2aGwwalNNLXp1amtsU2hIclVuc1l6Y2RNdVp2WlQyQ1pac0pXUWxETERNWDZmalhfbmhVNW5KREY4Uko1dHVvTnJtNzFpYWQtc3dDNzhqT3I0bXRaVTZmTHVmNjFXblV3WF9nWkJfVVFPU2laZmRoTmxwR3lHR2xyQXU0MW9TaDlQbXBsbEFkOWVTT01mNWFrZWZVa2xjN3FkOE5KVHdEOUtXNFY5VHp2OFFlUmxPTDZlSENXY1loN2dHMDFUSkF5dUZkU010T0VmQlhaU1VuTXpkclZsNUs2OEYtX3BNLWNpdXI2YlRQOEJhd0lJRmFVcDVpamFrMU5VZ2NXaThVRmNBWWpJZ053RDhocC1kQ1hfV3p4ZVEzVUxRYW04TERvU0F0WTBFUmNqaHlZSF94V0NJOUM0bFh3YjdJTWVFM3hnVWR1X1JoaGNHYm1OMzczWkFwODlxYU9GLVFlVEpLSlEtbUk1Zk1ZUGhrempsREl0QXh0UVVvV21kbEpyV2IxT2E2cHd1aHpleDVBQ1lVbWs0RW56MlEtdVkxUkxYUUQ5TWl0Q1JUZ1VYVm9aOHc1X1JUWS1TUUV2ZzZFSFhHZ2hQZm1aWk4tTTNmaWNzd3ZNTnNTRGRQRzZqeDhBNXlqM0RuYlRURFQ5U2tzV1RBc1lqY1cwSHVYZk1pVlh4bHZzdFFqUGs1ZGNFTFJfSlFkNElaOHhYNVJGQlFlVXl3ZjdsbERJSDVZVTRrSk9URmdHV1Vjd0VNd29WUHJEaEpvdFhoaUdsOEx2WFlLc2JBZlYtcm5ycWtoOHZEYlNmZGlBTXVIUmw1RC1HblQtaVEyOWpHSDNmUnpfZlZyaHBUeDB3QV94ZWFkVlg2RWlqMmNqRENVaExHTzdlWDBvYlVNS0pZNEc5dEowdjhvN0dzWlUxTUhDN1F0bUFFRlNMOWJjRlEzMW1ob0t0NUVZNHNKcFVxNTVhOWpVcjRuNHdpMjNuMU5pYjFRdDk0VnFqYzZqVlRYZl80X09vUnk4SHZNeDZOYV9GeVltNkR0VlNQRjEyYUV3czdFSGNGRE50U3NfSHZSTFNiWHJkakVUeWZXbHVLWW5zcDF6VndvVTVPN0RGVFRXUjFHZGlGSzkyUzJGcF95bFpLempvN3g1ZjY5WHNkZEFSMzlHdktLdkZ4ZmdKTzV3Z0UwUmdRWDN1enRBX2hkR2YyX1lybzVoM3BKNmxOZFpEa0xxYWd0bjBIWHZMMk5tcUdVODJuY1dsd0trai02TkZubE0wa29CTDVQN0ZlaG5VRFNuWVNncjBLa2dyMFBKbUxUV21DNFNWYXI4aDI1WE5hWWJDeHkyUHVNZEt3MFVyMEYxWWFaWFpKRFMtZFBtWHVvbDdPd0tkQUdFQjNKWUlnM0tBZVF0VHRTRVU3TTRsNVNzZi1QaGlFZE9qRi0yT0tjcmxzenVkcmIwa0gxdExIMUVmTnRMUnZ5cks0YnMtWGJJRFhUXzFJMUZMV2dDZ2lOaWVSRWN6QzZjV3pma2pFeTRQODB1R05veTBMWFlQMnltWjhzVjVadzVLX2s3OE5FS19JZ0VjZnhoczBIYzFkcmtUWXVZTi14QnpMNG54OV9Hb09QVUxYdlF2WWlYSHZZZ0pjNEpXeHBRcS1lc2tPZ1ZiVW56Vm5NUjFpZGRObXhtODJSV3NUTnJuUV91YmtWdjdSV205dlhoWkJQSmxtVE95bEp1REF6ZmFPUzRrV0d1eDh0QnNZY0k1ZTdMZmJIdnVpTlpsREN1bTlfZi11VmVHT3RaMThhMkwxM0RJbUFfSFMxMGllS2xObl9jaWV4dElkd1VVblZOY0hqZmVTVDlhSXJqeVFEMC10aTJqYmhyRGpnSDA2WGRFSDFIenlvT2RCSTFRUUZINTVQY3Q3X1UxaE9uRUZCdmtIMW52UFFvZjhUT2hZTTV3ZFkyVkN6aGlOMXo3SUdiQlVUSndpQ3ZfUkMxaHpUeG5NajFwTEZnZ25wRjh3Y0ROZUNYSTNsQnhyV19hMTc1a2Z2NGl4NDFxMXdyMGpKd25ic25UMVZQZngxVGI2MlRFTjNEVWRZSVZ5SENTajQ1TFVHRTdoeXI0d0lRYXM4cnJxLTN0eE9PWTZQbVFFSGRRcmpzeEdBMi1GWWtfNEZ1dWxla1VRTjMtTjVFa2lIdkMtcHpVQkZhampGRm5nQW8wSmljeEtYcUZPSnA1cVcwNW55b0dMbml4QjI2TjV4UGotNGZ6TTNPbVhCQTJXOU9DbWlsWXdRVG9pV1R3WjNRdHRfUmM5RHA1MFB5N21RUnpFUGNiX0hGRjRlSmo0R1VXRG4zMmVQUGhuMEdpLUNtbVhST0daN3JXa1JlTHdQMFR4bkpnMVc3SXhkS2x4YnRPQnh5VzdfZ2FwX3E3YXduZHl5bXB3ZEE2bEo4dFBCT0xIR25ibElwanZ3dXpSUWdpem9UczFXd0JReXlVY25hMHRtbUdIQ3I3b2ZCR2JSUll3UllaX2xDT0hHcGx2SmxDQXZEajFSUW9kYmJrSURtMUtzUzk3NF9qWEJ0VDB6WjZ6SkQ2Y09QdXpHSEdiQWRhaThyTHlNRkJUVzlzcjVLWXhWdDRzZXFIUkVpamZMNWZ6VENhdmJGMkV2QklUbzVvN1dRMl9TdF9oY0FfVVNlOTdMdVI2WGZmamhhRTlNbFgtRHlZU2RaSVV5Ny16VGxWdXZJWEpmbE53YlRvdjNFc2s0TWFPS1hMdE9vN0hsSU1OOWZxTG5Xd3RUUEtOZkt1UnpXSjNIdWxoVlpscGVPaXZtejFrWHVIazMzOEM4ZE9vczlKbVI4aEJSekJnYnd1N2pqeW1WTkZBbkE0bXpfSXdOZnRkWnVaT0VkNEN3aGgwMVFpSkxINVBxSG5IUzhaQWotLXVTNS0xRjhQWlJ4aGtldThJakg3akVXeVN5QllER2MtQ2EyVmlrcEsxNkFHalZVeXNHemw5bDR6RC1MbzFyXzYtVWEzenNtOXBla2RjRm1FNVJCUWxwdS1sQ2lkZGRVelViam1VNUFUSW9IUHFKRjRBelNGTEVuRmRZVWlFejVzMlkxbWVMNTRVSTRxeWZCQ1dUdmx2WU5TSnpLYW44LU9zeFVLalFVeFk1Q1VRc2tzaW5qMDJmU0E3U3puUzJQVFVJejNYX2swbVpvSV90MVpQQUJER3NJMDBuRGdkeVpjQndxZEJxN090aEZaejRoSW5XTUZfN1VyRHZRX0FwQnFBcUJ1bU55R1lNSXlnYktIYWRZOHNEa2VfUGZBSWxyWFJ2UDFUZEFQWkFvMlZtWXlTTGhLMldSTDZXcGx6bENvVHlaQllCNlBNU2FmSzJFVy0xTG5hOVNqTmV5RzB0dVZBR0daSWhiVTQtbVlVODgtcXBBVkhrdU1FWXRLUEk0bVpiSVIxZ0o0VExYSWRPN0lVeVNSdGV3ZjR5RnhyUHpmNGVVMWs2SUxTQkMyT0hKMGstYUVCT2R4VklGRGFFbUdFTU82UVg5LXlYbW5wOHdMZVZEYWRiQUw0MkNmeU1jRzIxYnIxeFdLTHhzSWlSYmJhWFNTdTNNemxuOUF5V3Y0SUw2R2l5aTFSZkJvUkpjREtvTXRUbHJhUzM2M1czc29oeDhOT0UwUzBRbzZJQ0pTZEdqNUtSNTBVZXdyNzA3SmlBNXlhZ3lnbkZoam9fQnl2VEFscmNPUnVEWGFHaDRmQVduSnBBNEt6dmtMcjJrZ3MwSGw4QjNUeHZOSXEwMUhNT0hJekI1cS1fTEZvM3ZxaXQ1WXNMcWozd0NqcHFKWllLRVlmZ3FqbUo1LTJIYUxwVkpkbHBJb3BsSWlKcmctTjR6eDRZZW54ckR4eUN1d084MWJ1SFI1SzNKR0RFeU8xMzFiN2FVbWFncUZmMnFlbnhDZndDYnpxb29oZlZIWFB6WlpVTVNhMWZlRVVIUmdmMEwxcmZENm5wMWZ5VDgzbEllOFJUS1pIZXhXSVptbUF6RGp6dER2Z0dwU3JOVi1NNjFuQ3JhSnlqQ1RZVUNOVnctTmpKT3RSUG1RYmI1N2lyeFQzNDBtUXhaTzNLMDhzQmVSTy0xQ05yODR3dE4wSFpvUmN5UEU4T3JQMmhrR2phLWJ0eC1CWXAxM2l0MGJKSWwyaWpYdlI2Z0o2WG9qT2tXMHM2YlA1RzVNNUl3QlpaWDlPelpac01Ecks2bmVUWlA2YTFXZnQwdmdRVVBiVXc1dE1LYW8yU1dZU3BRUEdiaDZQLWExbkNibjRhV0FEQ0ktZlBsMjdTcGM4Z1JoSUY3VmVYSE14TzVvR1h3aTFDMTJlRlVrcGZTa0x0R05VeFM2VjM0bkN4dlE1ZHYtUjdqY1dFVkhwUG05akphSXJKcXliRjJCTVhYcFFIbm5mOTd4aGxaczdlZFNaYU1USXU0WVFNLXB2czRzR2FCdU1Bd184bHNsWHYxbl9jaDcwejdSZzE5OUFUcVQtMEtULWV2bE9wWFBicDl5UGRmNzdKSEU4Z1NJNmRzLWtxTE1SZHBqVXN3TVZkS1IzM19aWW1EeFNydmxKS1E2NF9VSVBqV3N5WlRGN0o2T2p5RW5pSjFnU2NVSUFGc2tjU1RLZTFKTnhOeGVHLUNub2ZPTmlUcUpQWjV5QXBjN3p6RUhQeUtHekxKbUdyRDNCdm5UaU9Gd25oeWhyTVd6UkZwQWo0bnBpOTVGbG5vVm96WlhJUDRZRnIyS1J0UnViSmNoQUx3cENBNXNVbEVmQi1UazZwMmgwM2poTk43VlIxY1hPcDNNTXI2S21FWHhPMm1ManBPYVZIcV9qOHlQcGRwQU0yQk5jbDJ3eHJ4dlJ0bjRJMFAyYk45bC0yTHZWNW50U2RmbVZOdDg2SzBJbmZKWE5jOFRCNmdRMWNaT1pLeVRvTEcwaHhBeDJPMEJrZHpFa2lGeUp0d1kxS1pqbFEwNk95WWZJZ3d1Y3FVMWUxR2JhbG9qR0RtRlZ2UW9rRGNTSXZ3YWZ3cUtHSURKYS1pekozSkdtR1cxM2JDaHRLT3VSaHYzNFVVMVEwcDYyZGV2dXJzWEp4Q1NtZWUtMnEtbUtBQy1hR2ZEVHQ3VllJNlJHcng4ZEJmeXVFVjZJSUthMVFENEZ4OTd4TmhNQ2JBZnNTQmk0Rm5KcVJJZlhaM2JHc2R5a3NjUnBKRWRwUTVWd09MMEctaXNBOUVLbEZ1U1cwY0dPVjhmUW9PLWpiVEg4b2J2NUVVcXpGMzNCQVc3NUZDaWxPTG5DV1d6QVNUd1JiclFEdE05TzFjUVJRaXAtQzlLYldhN2wyX3g5aG4xM09wTklIQTFJc1lkcjNHQndDWUtGVXFYY0gtLUl1bmdnRFppalh4cFlJckNRR1FuUG1UakNjdVZ3anlLa1VYWUJHbFNOYXZ6dlU4Q3RpWERIS1B5bWl6R1BiWENqX215OWdleUhEV2w4STIwcTdJVDdWN19oTlNhMGdEOElIOWVic2RDZ3hhU2liVzdUdjlFQThPZzNRMEpvSFRYeFhmWVRpRW9yM2RjejBycHl5OE9iTFMzUzk2VktGNlJOU3V3REduNzNXdlgwYXB6NkxYdkRFenhhWDNJbExoWDdiX0dhMTNldXlaNDIxdDF2TkNaaE5pcjI0aUVlOXRlclpPSURlM3JRRGYxd2JqWktBX3pQS1VWc2FFekJ4dDNpdWw2RlBvWjZENEtwWHpFTGNSMDRsNTZTSWcyREdoWWd5QWZxckd6TDRsSHZqSU1LblZHSVdzbDM0TlRUdkxSMlFNeWx6alhGY0t2T29LXzRkQ1F5clRwTVVGYjdBMnlod2NaWk10ZkphdEpnXzkyQUpvcnI5ZWhRVVptbGJFVGw0WEtNeHA1QTBVVlhkcjAwaE53TkgtNm96RU54encyb3NfcjBDTW1MN0hRcnFydHA2T3Q4YzI4YUVZSGRiMVhZakdWanU1VngtYWhMeGhkblhHWHpzYVQ4RVBET0lxcXlJSHNhZWFaakxXemJvRExUNXlld0tDT0xiMmo5TEFHXy1CQU90aTFTemU5bDNnRFlxQ09lUVFWQld5UmhpTHRSaUk5WnYyUXdYWldpVzFMMU9NeHROZVpYc1ItRXZMaU9KYWYwZTYyb3lpeEo1alVObjZSSmJmaVd4LUJBMmgwS2UxSkJVdnR2ZUZmeW9GaTVCVWwwOUNrVlB4Qlo3dFNzdEVPbzE5UENISGdYcmQtbUhpNlV6QkRCZTcycGtqNkgxUjgzb1k5ZnZjdzBoUW1FZ2ZWanExbVJ0QUZXcFkyZnltNzJ0Z0IySmdBaklfVzdOWlRxNGtSUk11eEwtWnFJLXVrcDlSb2p2VkN4Sm92YlZWMDhWS3VyU1RycXpQaE5RbDJ0X04tRmZPVEZ3VUVCN3pGaXlmbTBKRmswTDc0ZG95SzJheGd5RG9Gblhoekc1Z3VSYVFRNFg4eHRuRVRRMENfeFBRZ2dQOWQ5THE1WjFqWEJ4ZU5SNERwaWh5QTJKVVNsR3JUV3o3cmZaMmdIUnl4WmplLVZ3a0ktWmN6eTEwUUo4Y0xqdEV4T25FbHlpRm9mZ3VCWThjS19aTWU3QlpIOWhOanJFMVJJeVd0SlpXTGptZ2J0RHpaV0Z3TFRYTS01elpjLXowNFZ3Tzd2UXAtcFBnZXRwRG9UZHV0RnN0QUNCdWtUeTNRQVRiaVJqeVk5bmJNY1JMZmx5Uk1CaTRHNll2Zm82SXEyUFVSblQ1OHdpRmN3anJET2hhUHFHcGVvR2RjTjEtUkVjQU5ZNGZHQkR4SkxLSVpTc3dYQmxDaHBfdFMwUzlOMkhHMmQzeFVGTmQ4cV8zVTR6eUU2RWV5SnVJOGdtUUVYUXlkTjVBYUc1UEZxSGhieTVRRWhFRWRQU3lSTldYaW00SFpVQ2ZubEdLSkF4dUZnQkZvLTNzMmFOVGx4X2U2WTJYRXAyR1NucV9fVndJTjR1N1MtbnJPQkRjRld2RzdVNnhNX1ZOTEtlTkF3bHdBdEY4bHZMSF9EY0lpUDIxZmxweUd4SkprVmVhbjhPaThWM2I1R0VqY0ZSSmtRZENlRDNWX1VWN3BTMGkyMjN3M09mWmFVZERwdDhJQktCLTVIVUl3MlNvQTVNdlYwRTJfaFd4RzBUWnZzT2FhVHpIb2tOSFBiYVIwRlZKQXlfWjBvS2pTSnI2bDBwMFZ6Z1ZLS0laRmJXd2JsQmlDMkZreElNRmx3M3dvakM5VzlyelctNnplMjVKQUFfVFZJN1BCRjU2enQySWU2Y2diUjFiQ3Z1YzBWM1owcV9WMzctTGFsZThLbUhiSGx3SDhRUFNndTc4a0txejJ4NHFHVWJFX1FtUEY2QWNLMmRuUHpCYThyOHU0N1hvd09RVFBnaDZvczNSVEFjYVUza2ZlTkszbWNaeUY2d2VhQ29ISmctcEFtM2FfT0JRMmhNSlpXd2o4NS1CbTA3Qy04WEJ3SzVsLV8ycGQ3UzMzOTJ1X18zUXQ5TF9vS05JdnR0cF9qM0haVFM3OVFMVnRaZzhVb094amMwbkN6MFg3MU1pdzlqdlBnT2hnZEY3YjZyTUFLRkdoSjd1cjktbVlEcjdJWFhBcFdiM3d4OG50LVVLWVRWa21DNGs3UlR4UHhEcWsyVWhVbG5CTDZVZmZDNWJGUjBsa3docmt2N1UyWTJ0YUxvaFZsZDYzbHVOTFFJTVBkYlhLOEdWdTdFUmtBMTRzZUxscU9vLUl2SGwxdW5VLTMyN1YzWWxzanlpazhXV0lUcE5URTlEQXAxUnUxUmZicVRwSnlFZER0Y3htYXF2REhrVWt4Zjd2UU1icFdNMlVibGxBOHVwR0h2ekJUbkNmcW9BVTAyRW50S0pXMDhhSFF5Q3JOUDNGY1JycXhiV0FTX3BvMGRRUEJleHhReGNjdTY2VWVnU1hKbmpoZ0ZyMldJWURWclZfcWZJV05leXRTb3dvTVhvaUIxV2NKcWxrb0sta2VzanZ4R0VkbWRicFg4TEpST2huclJrUTFFNEtLM1p0UnBTX1JIdDdlRXE4UFRtTFVkaGN6cUZTTDBtb2NJbGN4Um44MkNCZ1RvdnJzUkNmUFR6T19FVXRiWHBZWEd5R3ZjSnBaT25FZ0Z6bzdSeVlZMGV4YnJoLU5SVS1Lc0s1THBfZkhWcmpCaktRNk9IUUcxQmhSZVU5OGMyY1h3X1BIRG1XUDBDczlYdEEzS3FkXzc2RVpZa2xheDEwVlBKUi1yYldlaHNnT2kyOEw2Z1ktb21TajUtVTQ2X09LSFNRcVNGQnlYRlJRRnU1TVVWcHlITlNIOG5INmlKLUZUSW1NNzktYVlyczZVQXBMY25EYUZfNmh0MzBNMmhDbzQ3a05NVDBxLVE2b2oyX3dxalVWcWY3cG5HWlhTU0FyRTdUQjVQU3NvU0ZNMUQ5dUVZRGh0aHRDc01zYk5Oamk5dE9nR29pRVpXUmF3N0xSOUlWZmNRUk1zQ0dnYllSbEpmMVdsLW9zSXJEU0o1d3VQUUR0Y0xwTUlDdGRrZkdtMlFWbWM5V29zWEo3R2ZyVWgwOEZCYjlGNUM3UjZDVExCUlJNVU1GYzJ5Z3dUSFNQTnNMdWJtdERlWXJUVlQ5MFlyT2FPaXVtYTBPelNDUjJISXg0RXdPS01BbnduR2xyZlAtZ3VfZ1RiS0w0Sml0MFZERWxNMzU0cUFKcTRPdTAzdmNKNnV0QkpSTzhEOUdORjczWnduZVRHTkVhUG9OQVl2SVZpUlUtUVJnTTQ3WFB5TGQ3MWVvVFN0T3A0Mmt3TGp1SUxDLWE2bkZhZnFIamRLWXhzaXhvYy1mVjZ1amdaRzZvMDJja21heEFNeGZ4N2JTZC1fTDZGOU5vUlJRZDl1dFlMdnJCTU50NHR4S3ZTeTQ3cVBWUENuUVNNWXFKOGxBMjJXdEx5dThlVF91YUhqdVoyNGNXN29faC1WazdiZ1NyZkVLMkM3UkF6dGNoT2dlSU9TUXNXWXJyc3lPMVpBWW45a256VXR2Mi0tU2VLZmRyTU5zTnVSOXhkZUhRaUN3dGd1QS1qbGhMSS1XdExSVGJudVlKRE54SUU1aHdLSjhWSG5qbmljbDdJMTRyWDRoNmV5Z0tTTEhzaVpmcTk1NFVMYmFJWW9fNWJSR3pHR3R6eFJLd1Fud1MyYkEtRU5JelY1dUFnTTFZTjZZT1FCS0ZFLVQ2UnBVVGRiZ05NRFo1d2EyYUdiamUydzFWMTVFVEw0NkNsY1pLRWJsODV0cWIyenRkTEFYaUtTNTlqMm1xb1J1X3A4dFpBOWIzUXUtNDZpM2I4ZnVEalFocGpZamhoTVcxOV94bS1kZHc3NUNuR1JYUWlCTzllMjJ3MVozTkJTdW9NaUtqdlI0c3ItWFo1Vk9GeDZ3cWg1ZE85dFFPR1ZyVGs0TU51WEpXcDJwZWVJX083RlRza3Npd3h5ejdZNEtCTXNBWENNUFZtUldPbFNSLVp2LV9kcTdLeE45bFhIcDdTS21oN0tDbzJBVXk1S0VxTE12MUxiQUFHSUFfTVRNNE52cUQ5U0VtMUFKQU5jZnZGbE42T1Uzc3lZTGUyWUlpZDhSTVFhRUpEREtLQ0RNWkE2c3I3aGFZRnRTd0doNzFsZVFiYmdUZndWUjE1NEJaRmdZNS10Z2pZYmk4ei1neUdzZ1pwR2p3NWp1cEpfSWk1dW5WUWZUSGxaOHBrZ083T0kxRnpMU0Zib0U2VTRLb3FGeVBtYmtsaERqbXFzbWRQNkRPcWhsbzZ3TF9EcEhQSmxBR29OWFJfRHBIVnJ2cjNZLUphQ0RlZTlUbG5xU09EX21pbG9mUVB0RVVhdWtkUkxyZDFOR1JkN2ZmUE1Oa1ZrSDJmYWFhUm5ySUF1aEZlWmxwTnR2MUkyRDRwb29ZX3FwSm9VcGhEMGtwNmFrTkp1RzdYbHpKaXZVM0tzeTdYUVFMdkhEX1RkRDMxM1ZXNkMzVHNUeFk3dUJaSVlMVXp0Njc3eUVvTGthdUI4QlpSS19DSFNld3dpSVRZbjFnS1I1d3Uwai1TTFNFUHRKZ1NXWEFRSFRrY2hGdHRBdWFvRUJNQklTN0ZsOE55VzI2d05jMmsydlVvT1cybzN5VEMyVEpLa0hGUTlGOWx3emdnTEZRRHY3Umt2ZlZyX09pVlFnRm9VUF9aV0NvWENRaXdxUXhxbXJKMlBNLXNxME9SZnM0Tm1idFF2ak5FNHM4VWNyM0p5NXAxSUdTZ0hBVlF0cTJEN2o2NmlGM0Z4ZE5JRUpoTnNKUU9mRTBNVzlneEpKSlNvODlGbWNLOTE4eS1WWGYwcTliT2ZKTzVtejdIYWp3em8xNUxHSUJOY0ZFY0VsZkVWZ3pNZGhoTGpwWTM3WnR1UTFSSE84WW1oQ3R0VTkzRHNodXV2SGhYMHRhRFFLTnppZkV6TXhEN2VHZnpzUE0zc1NJcldkVkhyR2lOUEZBeUMxM0lsT3FVbFBnMTZ1SklreUQ2ZHlFaVR2dVN5RV9HTDBubGNVcG1GQThsWEViNEw5TDc4aUcxOWJjb3hDZ3R1cXlraEkyUDdESGt2WUtoZVFlclpoU2tHSHY1c1pKZVB0WkhiZDgxcEptYmVmNF9pZVFSRjZGTUQ3QUNTRnUxaUF1bm1OTkM5VnRVQy1TeDRSWXhQVlJFcm1reER4Y0JNbTQ5Ui1zdHNmemR6TEJNdXFQVmxlc05zU01fdWNqOUJ6QmVEUWNSUnRjZ0RibWN6dGV6TzRVdUJLY3E0Vlh1UEpHdUN6WTJ3V01IaVFHN0hMUGRTYjJ4SDhlWkYtMmxiUTRkZmpub0hUazZlV3VPanhySWtWX1R4LTNvVzV4b09HcERlaDVmQWxBWFZmV1V1S05NWEhEdEtYYUlSOHduNkM5WmV3cHRtN092YXlmT3RwVlRzX2RGRFU0cTRxOVZUVXZwTHYwLUZJZGRpZ25MNnhtdVBfNzlhbHlUNkJUN1BUVDNFZE5UT2gwcnU2VjVVcl9MV09ZdkhreDdJYk0yS2F5UmVvQXJpWEV5bXdObmoxd0tpY3JrNW9XOFlFWFBDT2x6THJGVXFkU2x6Yk5PNjZ0VDRjT0JMRXJDaU5GTGFDNkl3WFl1Ny1WNVNsclRkOS1hakllSk5TM3JjZU4zNHA0T2c1NUtGZUxlVEc5MmZLYlQ3X2hrMTAtc3JzRWJickpxeUtDZUZTaEVyWFdXSjUzeWxVeXF1cjI0T04yYllIdW1MYTdtN0dDdUJvRGhyanhVWkxUbGJjcFRzMmNZMFBDaFBwRDdvTHpHaVJBSFRGS285N2RDLWE0NHJfRm9RaURncGJuaE1LTnhDTE9UUU1HTWdldEg2QzNPOGJwUFRxXzRieUJnVDNkN2UyV1luRUpsOHI4U3dONW5Fal9wMHY5WkcyY1dFSTQ1UXYtYjdoN1h4VkdDTGFncjZOVnBGWGpOREpPb3c1VXRBamx6R09BaDl5Nm5scDAtM0ZycVBpTmxnbmxWcjRGTWlsZWszYVhuWUNqbi1DVzR1Njh1RzE5OWpBV1R4VS1xOW1pMmFwV19LMl80ZURZQjIwOVpGLVA1dDBua1RKMmtqcGdWT2F5MXNNRlVjMnBFM2hzRUdGQTZJS2RnYjljekpnbTNadVdvMWVHT29vOFo5eUZPR2R3d2ZWNG9FVFRxcXpTaUp2aXRzTGZ3X1VfUV9mMkJKWW9WUjZSMkljNTUzMGlnTkRiS251NFJlWTdpZHVvNmp6bmczbi02TlNJRmJpdkp4V3M5aC1TZ01ISWxnbkF5Wm5KMGJLYjJLQnNfRDRFR1hfZEhKQ0E5ZlAySERrRXgxcFhlaG9sMlQ2SjVJME5rbUt1WjdKTDBfOVpCeDlxcUZaS255WkZwazNVQnQ1Y3NiWVRzM0JheW5NTDY2OWNOM3VfX21TQmQ4Ykh0SVNPd1ByY1luU292Q1I2VXNOTW1yUGlhRGVZaDVhdUdRYnhrRzRBcEVKdFh0MEU1eEN3SDZtTDRwbG5CdXJFMnd2QlpiWWI4bXJVdUg4X1BIT3NHaVB1amRFU05iTmlwX1dUV2tZWUg0X0MyTU1UVEJyTXBVNTFjZ3JsYU1YREFhRUROV2daWUN3N0VZR2t4Q1RWcVlnRHZLeXRlWno1NGhpNFZSbmpGWXZWRncwQXAzRXZLREZlWnVfRXpoT3lLU1BvUEZSZWpmVE5fNWtwOG53THByRUhSTFhpXzNMNWJwLjRSWE9remlvc2hJN2FPLV9LM2p4NkE"}'
    +    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmVjRkVJLXFtWkNHenE4cFNpU214TUVENXU4TlNUUkJTamRsX1V0VHF2aU83UFBXVjlQZndLY0lYZ3VEU3JPVzFhZEI0Q2RNSFRKbnB2QTM0TzVycFZZSEx0Q3ZSU25BVmctZ2hFdXdDVnJyNlZQZTBkT0lQazZOLVI2ZlBaQnNsR2JEWjMxV3hWSnJjVXNKblFpZS11ZXNEQkNVOTNUeUxxYTdOaFNrLXVhN2dRVUEwVTRzNjNiRjR2elFqSVFZTnNsS1FyU0RvTEhDTklJRGR4OThibVI0UDA2ZXRfVkFXRmFETWVGay1ZNFd5RHpKOXlIY1BWeGdwMHZZWmpEcF9aR3B4eXFjZVBHTXc5M201YUxSTEhCb3hpSWZ6MUYtal9QaHpTZkJYVVk3ZTJyQWtBbVE1TVkyaHA1dmFGUkFZMnpRQnFJYk1NQS1Tc08tX0tpTkc2dy4tUnBIcVVLdWNCR0tmSzMtaVM4QTJRLmZVQ2QzUHlTX183ZC1iTjZRWjRucWFab05RUjg3dFlwakFzT3RMenBPd3Y3ZTZsa3NaZ0hyLTdFN21hdmt0ekNlUXdCMTBuZV81c2hVbWQ0UXpQNjhkZGJkVk02VjZGa09vU1JEajRRTUNuM0RLTWxyNUEwUlNsQmtqWUJtdEtKYU5HZ2o4WEMtNVl3V0EzLWRjeTk3aGZMNjRZYU5RcWRBR3ZKemRGLWRQd1BWbWxadlg3LWt4VTB2SElXYmVHX3hKTVlYbjhPZjlaRk1UMDBoZC1vMVZkVnM3bjhSTDU5bHpmV2F6bmtVY0p1U09SWHRxcTUyaGhmbGQ3d3Z1SmdWWkdTN2tjM293RW80ajlVdmpBekNjVFNBcW1uLXpnVURiM05NOENMeDM5S2lCYnVBcGRBd1hVYmFocnZLVUlyYWFkOERTM1dYTDM1SDJqei1kN1ZtYlY3RDlYUlZ6U2xJVW9wWkcxQ01FdGExMEFBS210cV9qX25ObnZzNUM4bVM1aU5jSnRMUUktYkxDSWkxWm9ldUJQQVJsVS1Rc0lEeFFXRVJ1cEVCVzdVVFV3bnVZYm4tV2xTcUFPQUFLdFIzeHJxay1kOXRPT243ZHFxaGtxaGJTV1J1dm5HbHZpcy0wQTVFcVhOaXJiR2NQWWtETlc3YW1HcEpTbUgtNm1CengtVmNmY1NHd1ozbmlZN2VYdGtub1NGdzdsaVlLbHRHdnNPMDg5YVJycVkycGhZdnl6cU1zQ2I2NzVLNk9LUndFb0RETWcyck1IUGg3SlUtX19ETVhwRjFVZm1qVHExOHoxTDJiWEt6NVFSUDg2dkIxS1V6MVUtRlptTWdsa0hxQUtoU1F2LUhnUnc4dUFvQ2dsZFl0MW9BV0JUT2RCV0o3ckJndmExeEVGblNOVUd6ckVzb3oxRXlwWjVNcDRTVUNzYlNFSlhqSVBiSXE1dlo2cEF2RmNRM0xsOTNOTHBBYS04TElYQTEzdk0xTVM0ZVFWV3d3eE9FeXJIT1BJRFEteGVNajVjbEtjRDBrQ2gxNnpMVDc3MDUtX3ZkcWduSEFycjUtc2RFS2NaaWNVanRhckk5MENxVmhYTjY0dGVVZUYzY2x1cEdNZUhCN084QksyUFVOVXJ6ZkZkb0NoODNRelF4YXVaN1F0TVIwbGxSUFViSEptY2Rfa1ZaZWd5SUNsUHNlaWpTQUp1eU9HV2xLc0VlWGpNOGUzV1FQOEFuVUJqcEpQbDZnTXpXQWk0V0JJcDg0blh6bVktZFZSQkxGSDZkT3dHTmpiX215RzM5bVNvWHZsMGhfcmdXQjNtM25WMzZ2MmRHWHgySEVTVU1KRjBtanZ0YjZiZFg4aU9ZRnFQY0lTUG45bTRhSFBXa3NXZ1ZQcnpqZzhSb0dFR05aOS01T2Y0Y2hid3ZDeUdXRkdNMHY5SU44SlR0U29QXzVHZkFXOWJaWTBpUUFZdC0yN0RkeTF3LU5vN3NYczdJYUR0TUZ0NkVtdUthWEZyV0FJMjN5VEZWRE1fdzh4RnVvaXRTTFFkcVNQQl8ydFA3bkp6TGNodEZTb2dPU3FqNVR4NXdZX1lQbC1IYW1DOU1tX2hPbW9Rczc5TEJjbTVQbUFyS3VtTTJZZXY0U1BlTzZOUzFwVEhjT0hiTHp5OFJBNFFNM05VTEFFcEJtWHJxa0ZJelppYkdrSGFFX3dONjEzSk5EaGdhZTNNVTBGZXFtWTUwbVRBNmVmUU53WVhYT0toTmQ0VFA3dVVKR29adnNaMEh1RVhYQVdhTWdLN1k1cFk1cVlEYi1uQXhpT1ZKS2lueThRMTdrb05ORDM3cms2NG5yS25kOU1kV0ROcVdlMXBFTVl0MEc0LVlSUkM1YXpQZzc3Wl80bGtESUJqbnhDNDV5MXpPanlKbWNOQTZGcHNsUW1veXNnSGQtLXdrU2RlNENhZUU5UC1LcGk1OTBEdjgtNzcxLVB0VDZVVWhLbmZ6MHBWSGprYUZjc1N1aThoTk5jdmdTVHZkd2pMcUFya09CcG14aTZxQWE3TlNaOXNJaGViQnpmN2pHckhEb0loWFY3QUp4T2hmNHFMbGJUdExicS1iQmVCQi1ZVElSVmhqUDlOSnRUWVBCeDFMS0ZZUFk5UmJXdWt3VFBaLU44V0hxZnRnYlpSX010X3JiS0VPMEdKekRfNXVnMFdpWDc1QUN4dEhDYW83bTJCZGpsNlpyVVJwWjA3NndCTFZxTFBjUUJzUWNnUTVwcGVIVFpMbG5YNl9VelJKdjdNcEdMTE1iRDlEdm5LVmY2TVFfV2tZMXJIOHJVT1A5aVZGbWdqZ2hZekhSWFhYZUR3UXlkOU5UOElFV1pfck9lZmcySEVEd1BScDNiN2pQUW1IUVB0U25qb1dsOWRDSEEzYTI1V29NNmx6Z1c0ZXkxM1JNSEs1Rm90b3JSd1VpRmtNZUZIck9yaDRQQlFzdEhiUTFnUTZzTGJLV0RzV25aelZObGVmQWlvLTFIb1BVSzREdWJWYnJhSVE2LVhrUFRMbEEzd3B2dmgza25tUzZsV0dTc202MlhHYUF5VFN5aEFSbUJwRzRQNFVyTkNLRndodGs3YUlIM0c1eE4tNXVCRWl0WmctX2ZPUlFyM2pJQ2prQy1pU3pYUmpLdUNvY2ROY212a3NmakdvRTYxMW9RLVI1RzVKcnpFZHloTURrb0FmYVVCX1Bwa09fRHk2MU5DOTdUbHo1VGozbXcwa0hhMU9sYU1XTS1tVXZEajlFdVZsRFJaX0RFWUVEVDRzQjdKS0VNMEJkQXhkYXlvSkpCdVZUTWY2NTZ4RXZ4a25pSDdVSjJaMTlhR0xZY3VyRHcya3RZMXBHdW5DQnlvNHNkZV9wYm1YazJqN1FtbFVxMXJBWVlDUXJ3NHUtOXMzWmV1RDVPWEdwOGJaMldGVXo2ZzgyazBDZFFQMnl3ejNDTkU5V0I4MFM3NW9vRHdjZ0s5MjExekZrQldIV1Ntb2FkTEtld2o2THgtUTVuN2NmT2tDVlNkb18yaEhkTm1feWZyaHl4WG1Ka0JYSHp3Wno3REhqeEdGd1ZpQUtmMkc2WWZ4US1yWDRsTXhyWkhqVGc5aU5kRHVDREZid3J0MmZ4NDNMTGQ5ZWQtaUxhdllvMnBVN3ZyMk5FeGlEMjVndnNKa3lLMzR0X052X1p3d291YUZ5ckdZMTN3UGlFUEEzb2NqdmhjZkR4N20tSlM0V1FQLVp1ZEZyUmVsSWFHTDB1WlI5TXdTZnFMOTZZYjVQMDNnODZXMWdJWnZFSElfalg0Ym01MXF5dW4tUDVWSWdFOTlGVVZZY016NE9yZ1g5eEotUDNYejNLaGYtb3l0S2E3ZEhDQ0V3V2lzb2QySll5cUJ3dWlRMnZCQjBKblFKMEV5OHdQVGtUalQxaUtGblNHR1Z6by1iN21sQk1hN3UtMmd1Wldpb1VYUXdkbjU4bWhZY2J0cGlOS2N5U1JyS1l1bTdzMmN1WDd1eTRFWlNTeW1EYTlsUC1jQVFEOC1oaVZWb05MdjdjZW5GVGI5a3Z0S25vT2wzY2VocXFmY215cWNiTTRUWlRqQXVDTk13Nmdhc0JYc3IzQ2JKR1BXVll5V0pvZmtpV1B1SHNmdlVId1J6M2ZYMU1tQ3RrMUhWV3J1ZExyZDE5STQ1Ri1tOHVYTUVmMnNMRXJ3djZMaUlaUy1vRDR6bmZQZTJkaEI3Y095VC1OdjBueDB3VTZ3TWVueGZ6dkk3NWQxVVBCcTI4NTN1R09uazh5YllIWU1iODd4T3RkcnZMOU1vZTJfWG5ta2pfSC1JS040bDQ3NF9tQVJNcThTc3FBSFZBc0VNV3ZfcFJocXVoSHhEY3QtbjRaVEtnN2NBd0RKVGRWR3BWbWxLa1ZIcUtGQi1rV0lwWGNJY0s0bldaUW43djBiOGk5a0hpeFBxMXkxNEhGejl3WjU4Q0gtWG1GVldSWGd4dTVTdWp6WnRGMzJEMTZaTlZUWUhubkhSdHNLWWlhNURybzhOMW5sUUNUaHRZbnozYzNRM1pocVRocndna1pNQkhMY0JTcUx3Wmo5VGdvZk9PQTl5Y1pQOUprdkVpSVk1dU4ya3lKSzV0RHdmTGltSzVkVkg3R1RUOE0yb1RYRU90UlQ4cXBGeEdWRXY5NkVwOTFETklwbE1tNEJpeXA4ZlZOOG4wc3F2SV8xMmpMclJoMEdMYUVVbHFSb2NYTDBJU0g3YlEwTTFNaEZEckNfa3drU3FuMU9Ebi1WM2hwQ2FEZF8zUlJ4bmZyUm1sd29jZ2tha1FuaFM1aHdHbTlITUlLRVNDcjM5UzdqWWNnbGsyb0ZpbUdDaUVpX09iVlAxV2VDSm52ZERIR1JrZDlmN21ndmhzMG4yajBzamZHc09hRV9seVBjYXNTRi1pY2VaQmdNN2ZrNGRVWjEtM2VIUlllaGtiZEtRckllU2RDZ2wwUXBvb3VrNE1SNTVLWFdTY2x0YUx5OWw1Rm13WEV5UzhpS2tUcXRCUFV6R1JMUWVXYm5vM2VjdnpSRzdpQmp2R29LSFpaUWtaOWRJQlQzQlg1dUl2NFJFSTE0bkt0VGZPRGFfUmFCTkNqa1RiVzlMUEV1OWF6b0hwNC1taHFHb2JQb1RtZnlEM3VhMmhYZnBUMDl5UVU5NDlzcHl2OTFXNjRJcGYyRFMzb182N1llR0d4dWttalIxaXp5YWtJNXFVSndGWC15SjVQdmE5bjFnT1JTQVgyNFJUOFJFMlI0U3p2eWdpbW1oR3VSM2o0WG8tUThZWERiek1fQWF4dWh1anNxX3AwMGdybWJyaUN6RDQtaUNrN3NOU2ZYaU1TeEE2eWszSGVodXh1cnFGRU40SWd1TkhPb3gxcW9PazkwZU41MEFrVFc4UlZUVzh6RDMzLWp2WEVFa3JkTnA3c1E5a1A5TGdQWjMyXzA1YlVpNlFya0R6ZXk0UVZFUFQ2czNmelQydU1TUUM2RHFKS3l4NE5PeHRUTWZ5b0kxcnQxMEIxdlU1N2NpQVpndnpqVC04T3YtTzMyODN5REp4SGNZbElzSXIzSUR2akhXTWFmbXBjTERMbVo1dnh1RjdfaTJnRldHcXVYNmMxdVY5NWFzSjhjcktYWEZwNDJ2UDAyMlhHa0RzWGF0TEN0R29jLUYwejFwcjF5NE9WSXNtbF8zZHlQLVlObGlKOTdxeXNPbjBhTngweW50SjFFdGoySHQ2eXZxM05LdF9SdUZSWVROQXlGdkQ2MHBuUFVGSWZXVlhlOTRMOTFrUzk0MTdoalNYQ3RyU2JQajN3UVdJdFZBQ2l5RGdueS00RVhpUEphZEZnMTk3eDR3UmdqbmdMQ1ZmdnloUXA5c2FDbUh1SUJMSXpSOVNZalBjbHU3aTlvT2xoSngxUC1Wc0JuVUFfZEZWUDhoZUl2ZlJHZjZMaS1iTWFoZTMtWUFFWjJzNDk2dElNMTRDdDR5akNCQkV5OXpCQzlrTGZVdmhPa3oyUG1ORVpReEZGR0ZUMzNPZ0JsVFEtT0tqaUV3cF9KLVd5Q1M2WVVuRjNQNTViM3lBT1htUVJTU0tZYzRNbzFUSkJWdUFJeXRZVDVkR2pZSFItaGtsWl9SdkVzbTJEcDMzUFZNVzExdzl4ZXhpWEotY1BvQzZlMDhjOTlaWFFxQzUyem1xRi1LX2ZNR1d4TklHNF8waUlraXFwcmw3dGNUek53MUZmaVhWT0lfM05XZWI3c1prQzZMdlE2X1Q3dTF0S0p4cUxqMEF2ME8zSnlnb1Y1TlRWaEx3OURLZXBuRzRhcE1mMU9zeWxTQnFZeVVGcE9sTWJPdjU3aFJqcW4zNUJOQ2J5NjRTUTVpTFR3UC1NbnprMjVMdks5MWtQTjYwWHlaSDFWcnM0UVBJOURlVTFGdV9WUXdVUE5nWG9nR21jS2FNa3JkOGlYUTM0UThzYm5jay12T2ZGMG9pbnFET2NFazJobXQzdnU4amxSam9KOXVUWno4YkhRWVdfRFN6UngzTG94bzFXbENnTlBpWmJBbHF6YzVhbkFBUTdtZDR1Mi1rYUEzS3g4OXNheC1EXzJQOW1FTERjSWRkWVRHYnpMY3dsUjRDb1RSclQyM2xZUlpCVkhUd1QtUUh4c3puVjN4R3FNYnV1NnVDYlg3elhuek9GeUtrSmNJMVZNV3JwTHROZHRjR052eFIyb2RITzVqam82UEZtcDk5WWtkWk5aV0ZtLU5CTHotdElSbDVLY253Nk8yQzQ3UnNCYlJIZlBDNklVanRpVEFBNjQ2SEMzV0tZcXUwWWQwXzl1WU9MSWdtdW9RRl9mSVRkazlHOFhnMm1WcWdhV3Z3c3RCRFhZcFRFNEVnd082dmFPZmNNQi10SUxvaGNvaHp3NnM1cFhLSmxpcVd6UUVaZzhQQ3dpd2dCU1BkVlZtZ19JdWYwVXZXR2xHNllkU2VreWpTdXUzMVRuRUxWclRwZGhiVUdfbi1BWGhCR3l2aVVKdlFvSkpPcE1IOWVScER0ZnFTQnF5V0h2R1pKWWc5ZTBlQ3RuUmRZcmhhY3lfb3NnYk5RNi0yLVhaQzdYWlFuRWhkVGFDR3RNY3ZxWWF5UHhieEl2OXkyREE4UTc3aWRsbi1fNExZS0FfOTFtbE14cy1pME13ZjdBS2xJZzZNbWdPWUJqTEs5Ri1FYnpvWmlHVnQxaHkzRHE3QkJJbEtTWkY4UXdPV083U2RwQkJHZzZVcTJXNHd6NFZiR0x4dkdmSWE3TmE3Ym9nNWFVeGJNNGRkd3VDNHotMHlVNDhhQWxYQnpSVjNwSGZDcHNxcFN2RWxjRmtnR3o5cE5vV1ZzMEc3aEhwdDF4c2FiNnk5NjM5ekUtMU9YV2V3d1JYSGxKRVpJQ2ROUjVHLV9GTndfdWlvS29QajhuY0lTUUR5MzR2Zzd1VU5JWGZCc1R5V3hTYUFnNDhGSE5EWkdFZ1JZWk4tVGtTVVBta1BQc0tGbnhvWGFVTXd0dFpiZ3JkbUo2Rl9Qdy1scHMweTdOd3NmZVdxaEVvd2dCVTRPak8zcjhGTDBWX2Zvb0RlRm5CWGVtQ1lwQU9OZHpIUXJQSWU1NFVielhhRmdyX0kzaFFFZnQyUTBfeXN6WDZnTHRsa05xVWtLWWFFWGl2am9XVjN3RXNfdk41aEp1eUZLS0Zob0ViWXluVVBpcFdWVi1TY09QRlFhWWZWcGF1cVcyY29HbWo2S2VpS2lybmdXRnRPa05kNmloYmMwRnlvRnRNOWtwTEpRSFdIRVF3UU40YjlNSFRrcXpiVFc0bEZ2ZVhxZ0VPcGE0OGROYUdvN3h4QTA2WWtaMFNWVjZ4VC1XdUVMajQyYUtnYVMyUDFFSHZsZTZ3eTRkRnU5clQxQ3QxMl9RVHVmanpXQW42SDZNdXFPX2szcmFuNmc5Qm9qbnhMYmQtdlVraEhxTzFHd09TTHhVVVJreHQzcnpvR0NLMzlnRGc5dkZrdHZmNFpGREhiNTB6QkptcFhFOTd4S0Y4Y3FSci12X1FndGZySWU4ODlyaHVPdzR0MTdEU1N0ZmZUSkVmN3J4d1l1NDB0Q1dzOVVlVXJpb2YtNE5zVUJIb0JWaHZVekR6TEdCajVJVmlJUzZ0RHdDU0Fwc0lQX3AwbDBHdjM3TER3Y2MydUpodFBGLU0zSUMxa0tGcGNBZktHQ3hUdVRfSzNuMm1weF9ZVWtQYWxYNldtb055MHZBSU40eVVkQzdJTG5oTmF3cVdfY25WSWl0MXpPRnd4QVNNbU80dXRtQ0tlemZyczlwR0Z3ZUVCMlJlS3JGWXBNNjU4QXM2eHZjZkR0OEM5RXRKQWVHcGNTM3NJcm56aXMxSHd6dWQyNGtjVHpOX01Eel9qQkZJQmVfeEc3eU1BanF4ajdqUks1UnBjVlJCYTh3SHBvLXFTcDk0azQtUFVvNlEyR3NKSWYwTU1pQS05Ml9fWVdCczctTmhYM0VpRFktR0lud28yZlM2TWtJOXVuak9CMlpKaFFmTTRxZHNOMDRaTjJaQ1FWMEdvaG9QOFZpMFJGVFVxR2tFUmNFM28tY3NwUTZpMVZrZGxrMk4tTFUtMEMwRTNicXhmTjlZYVAxdm05bk94dmI5cmVndXFCZmpySE92MURIaDBFczk5RVBKck1IUTlKODE4Mmdxdl9PWFM0UFhTV2hKWFhHTkw0dmk4bnJINE4tcjhrZlFobHI5TnVabXZMdEk4T05iZUo5dG5HMWp1Sm1KNnZkeHF5YTBGTDM3UTVLcUxHbElCa0F5X3dIVzZadVF3Tk5lbzZOQTVuV0U4cm1ON1otZER0MFJNakJGWU5MSGNFYVNFOXlmUHBrZW9tZnpNcl9TRHlHaFkwdG1KM1FkbVpFc0FhOWJsQVRuZWFBVHRyVWt6bWVTSS1LR1E3Ung5Nk9wMHVxVHYtVlYyRFMtZXhndk55VFZNNXkxVWVuQVF2b3lkMzJIME1nUzZiYU53YXRkcTM0UGJOck1wdGdDT1luV2lhWXlXOVdjUEpCUndiTU5YTzdqSl9ONEYxRFlIdjRKaWJkLUtoVjlCVUdzQVp1R3h2VU1KX1lpNW9DYjVyel9QTHlRTmFyTC1VMWxOMzNSX2o3Sy1UUWtyMFZvcEdVTldvbS1TaUJqamdWUGp4REFBN1Y4ekN5NUZlRm4wcUFwY0ljWFdGdDZHbktKNFI5bmM3ckZuQWlmMlpsUGtqZ0lETFQtQkh3MEVOX2stODVySGQ1dnl5WDcyamduSEN6NHpKWlRiMDY1QS1yZU9ob3hBaVp1MlJzVUVqQkg0Y2JnaDl5dE4tV3otWFpsYnB4cnpRNUxJamhnN2oxWExIM3FvSDhRRWZFNm10bXlXMVU2eEpEMlhYeEpGa1c0VGM0MG5HOXZlY3htTVNxekFPN1VaVGR6VC01M20tVGJTZC1heTBKX1ItTjBYVFh4azZTWlZ2eHgzZW92TGw2MXVLUnBHMGFubHlwUHFGZU1WNV9ndzBSY2tBZTBmUnpTLTh6U2NzSWNsaDBWTmxZLXc5MWdaYVlSUnJoRktuS1pINl9GeWJ3ZTZOWjRGUGs1a1RuWUxRc1dSRzNabU9ReW4wVUpnbzBKU3l5NXdLT0FuYW93YTAzYV9pbi1tNlR6WTBFSUVOY2E5WE1fWGN4SlhDR3hFQkR6ckVSN3M3bWxTSTNPbFoxOHUySEVNRU9oRmJhX1VBR0dFaUhzX3lLQUJMRzhGNFZsNktBVkFqRm53WVU1NVI4UHBLQlgwYmV5SVdnQzI3WUdDSDZvWDNyR3dyOHFYck90THI0eEFhcTlNWUxTVFRqZF84S1M2NUVEZVo1a0dPcnVwZ0xITnF2WU5ockRQRVhsSldsd0hFWS1oLXp3RExTWW1tS25jR2ZiQURQWWRTajFxOXBwZjVmeGJMRTI0ZWQ1ZV9keGhIcjAtRElpNXJMQlFqNnZia3NySTRDZG5WdXZ6TFhleVVpSVhKb25hS0M4QXg4Rk9NNU5KbUdKY29lTERfNlVrQ2ttVVJxcVRHY2h4ZEJHM09tWnJfdm00anJfR2FrSVk1TnRLa2VsSGpQSWIydEk5WFZWdG1uQ1NqT19OVnpoLWQ2Y2lINWpKZFBmX21qV3dBZ0NpRTRDQU5oQlhLd1gtTjRZRWh3N2NydUVkb0xfZ3Uydmw3OE1OdWlGb19EdUl5MXB0RG1HR09LbjRwWS00OGRFUVMwNDNLX19rUTVwUU1NdmljbDczNWtqb1F3LS11QmZ4cjhFal9fWEJra0t5dFBwUXdSVmVuUEhmN00wUVo4MW9NV3RhVnZ5NGFLdG1GVEFyVEpmSjJVekVJNi1PR2FnWWRSS012bktCOVNRR1cwNm5Gd3NFR01zUEtweWRMUnlmdkNPTGt1X3JLdTAxVm00N1VDeHl1d0Z4S0VxLVV4Nnd1LVdlczhROXlBOVFfS3F0bGstUnRLOTlfbVZvTlhoUzhqVldTalVRbDhJcUdDUGxRRGMzRWR3ZGx0bmRXYUtRdzlXOWFlRlA3WHVGWk1ncG1oRUxhbzJ4bWNtQkZJaTZ4dFRIRGdnRFd1VmxiMHIzT1UxTk5EcXFhZkFUTzFfS2I3X2hfT29UVjJCeVRQYjh6U3owOUpHUEJMSGJZTkR0WFUtckJxN0ZjVEUtaUNueTRPS2pDMkdNQ0R5MjRBUE1zM0dQUXhJZnZqWlZSZmxfT0JYd25hMXZqWHo2TmdkQzVqYlFjSFVaRUlyVkhuZmV2bWFOdzV6MEhIX25QSl9fUnpXTk5SNFdocXF3T1ZOa2VsYTVaQm9QMjYwWnUySXhqN1ltYVhHRUtDdy11bE1iUlExUzdlTzhqSFR3TGJfY2JxdEd2UW1LcWpCVGljNXVJTjhPVFVHYmRMWnlPcEpsUENQSkVQeS1XUlA2YnBpTGFNNFkyVTNIMTRaNXctN1cxNzZEODdhS3JWZG4tSkxoMm5xbDZScFdIUTBORU9ELU5QdnV4ZXFMLXk5eXZxOWEwRU9tV2RPbnJxRF84T1h4SVdNMm9aWXhiM0pPSFp6dVFOdFJiREgxSmpBR3NfWGZGSkdHaUViTUJodS16NW1rUkNxME1lTWpPLVRxeTRkUGY5SUpWODIwMldTOGNHS1VxUXMzU2ZWX3RiMUl1VnNyV3ZzaGhZVDdVdXIxcTZ6T2Z1MjZ4UlNrU3JuQ2RDZHJZclVBbUZBMnpEdHEySm5vSXdaTlVmQ1pyN1J1NzhOMkZOd0VRMmxhWDRDMDktZHVUdmNNTEdpNWRVdEpDOTlZak1YQU9oVmNzNlBrTm9HZFBfY0hxaVB1Z01kNXBhY1h0TDJzNzhDekRCS0VQVmxNR3FVczZncnlsX1NlUzBNTkhPQURINlE4U0lRc0ViajFhNjZUb0Y2bDhDbFdjMkdnemxUZl9xQzY3R1FJWkdZMk1mZjFFNFNObGRQYlozYi1XeHNIX3g0WVJwdDZWRGJuRXJfS2tfSHdBTGhuZGdVdC1YYjhlQWp0cVBoLW44TFZfNmN6SlM0Rl9RQUpsSWc4ZFV3R2JBRGJCRGljb2ZQRS1tU0lyNzA5V3dEMi1TOG9WQ0FiY29FcHJvUEZ2YUUtZWVONk5UQTBUNVdPbjB5MHMzUE14UnVTaVkwazBKdml3ZXAzYlZEMjVqWnRXYjRaRFJSUjh4bXMxZTlkNUNicDNJaWowM1hoTGZsWDJjaFAxY0IxMXp4ZDYxVjFHVUVWMEJ2R2o2SGRnNGVmQVR1aWlGQzBrSW05REpIa2J3RTVKZzJyWENTVkw3dVJYMnVQSHVKTVgzVlhWenM4YVNJa2NDSUFnVHFzS0Vaa0hiMGs5UkVpczFoZU9QMG1KS044dXB4V1c1YUNwMWpuSzkzUG9tNW0zMHBXamp3STZneXA5alRiU1pKS29TNTVSMEFxME5BcTdsbFUyYnZhXzBpR2xNOEhVdFBSQTh4ME8yaWJoUUxxTGQtYUtiWGZveGlXNkM1elNBSXR4ODBCa3hZWFpweVlPZVdRMm5mVk9ZM1J5UDdWaEZTMnVhb0M5YzJNMHB6aHJVcjJ4R25SdnFncUVpVlE1U2lhOW9JNmotWm1wTnpVQVpDNmtSUUxLRE5pWDdiUm02cGhfaHdmRjY4OEJ6dHZ2NXAyb1hLNWFCWHU4ZTdNTmJDd1ZKMHpTek5nR1p6OWxMaEZ5MmVYYVRSc0tfT2xWVlBmclJ1M2JwSFBIc1ZfOHFaWEhnWTRsU0FwOUxuaElQRjhtUXdQQjRGcVhWNzk2LXZRSnVYZlFXeEh0WVc3RnNPRTVjRE92cmRfc0NBOUNiXzlzc0x1cVdobGlDbkdXSXNHU0RDVm9qa1NJWmFyRnAtNUg1RC1yS1h6bWRtalpOUlVQTllQdmd4YlowSW1tcFdoRXpoX3BiYW1ISnF1SGNEX2hack9ucVhoNnlIbzF6Z3FTZXdHT01Odm5ubUdHbVVlUXBQeDMtUWctamt4c3BNTkRVODBRSFFkT3JYMGhoaEJjN0lqbXhkeHBDV0ZObzFqZmdjYmNEamthY2tLazdVRnhXTDYzNjhfdlhWckFQbFNESm5maTZlTHhvWnJqV0RkMFVJMUhnSVBNbEZXS3Z6Z3lKRUxEbFpjLWhCQ01QMVJYU0szSTY0SWtOWHlEZ1NpSXE0ZUdrMU5xWDFfLW5oeTdSWVBXazhaNVRDM1g2RlJJOVlYa3JEVzhZOEl4LVJDTEZ4YXR0dmZBam1tTjJDNGN6LWI5ODdocmZXXzNEcnNRQXZoaTNmWTAzVDZLc1AzakFkb25JWjRuVUpkaGhGN2lHbUJsWnBDN2dsbWJRNHZJb3cwQnBWQ1J1bFdlekV4Nl9aNlAxRU9zX0VzemZWRWpXLUJBQzNaUjBKNDRuXzV6dmZXV0haRVZEOG1lMUFCQ2Zoa2I5Mkg0dGg5SF84bHQwRzhLRElTLWVzVXgzY3hYRlFpei1JZ2VacnBfRWNqSUpaTkRfY3ptSkZXYkdITHBVVFI4dHA4X0E5d2Z2Q0ZpWkVCSWJ0cVBBS1RqTi04VWoxQjRBRkpQQmJqbzRpbnQ2OEQwVVBKSG9yVk5kZlUwT3VYQ1MxV3lfZDAwQkNJLWpic0VGRU5iSktrOW9xR3BXd3VXaW54Y3dhSHBGa19NM2JYcnUwN1FYa0F4VEdsZV9XRXJrM1NjTExJYVhZZlZtdi1hOHpnNHpLZzI5OFNmZDdrR2tfMTlDeUpjc2cyZzVnV3R2d1ZWUHFFNWxPSXN0Zi1HUzdnNTBJZ25HVlVHR0E5RExvMFowT3RiaGU3X09GSUtpWFhMZEhZWEJNYjhlWGNpbkFpSDJ0dWJlcFUyVkRESWw3LTc3VEgzNkw2R3l0ZmtubHUwc1hqckFNNGZZc01STDdLSXFUZ2tuNWdDSVpuZGs4dU1wN0Z2WEJoWFNIYm5yemhpQXctUU5NWnZURVpqZXFOVHJUQTlSUTRzdnVka2drWUF4RV9aMGRTOC1DSnVCelFNZFJtdXB1dlQ4ci14dGcxSmFKVTlqZHh1d2ttVmJ1RWR5WXFsblg3M0ltempkT3dRSG9sazNmMnRmNDBPVEJiSmJZRFN2MVE5VU5xdUxsYVRLZmxNRG5CMnlzM3BwTThnaTl4Z2pzMm9wSVV4Y0o0TE5EQm1mNG5oYmpyUi1weTY5OV9UbEo0ejNtSUIxS2VuNm03OXhwVWl1V2xTbm1USjNGYlhwLUszX2ZRUVhXdlJCUE50bmFJQ0Q3X1JLYXBOUHJwM1BKc2gyYU1hV1l4bWx3RFZhcFlTWmQ4YTVfNDZuN1lqYVlqS05EeTQweElaNEFGVWdCOEE0N1RYWjZLeGhWNGJEWjZxVlNTWVpnUnduT19HU1l0b3V6Z3Bfd3VUVEFhVFlJWmRjdnpkNHRmeU1ES0c1WlpnN3Y0ZzV1dlJDVHo1ay1pb3Q3UFVSTG91NFprM1NoNVJYNGlaeDZXVTItcEJpTE1NVmxqVHFOUE1aUnJEVW40M0ZTWXRxMTVoTWVoZzdOZVhCSVhsVm41ekhUTEZJVmJ6TW9xWGdYelo4Ui02SUlvUWxlNURYQnU1bUhMMFY4R01mbmtmamlONGNRV2xDTkdYMW8zbHdRS0poaU1MZlpLVldONlc2bnZ0NlpmTGhTWC1lOWNDdW0zM0J1S0xDOUZZUTNNMEQyV3J6LUcybFZYSnU4RndzQWloN3lCRTZuaUN0Ry1naDFVSHJrNjlROHc3c01LOVRPM25zWmJWR2phd1NCcmZMQXlMWTJXZGJJWl8taERxaV9OcWxYMzMyRExic2VQZ1llLVhTdXJWRF9MOVc3THZWZzlJLUZFdnlSa2xEOE1SbTYtTUNfY2Q0OW42aER4Rm50MFhtbWk0STM2eGNaanNNeXI2Z3hrVkhYNU0tRlUzQkR3cERUdlFSS1JiaE5wb19WcDhIaWVwQ0hMaGJoVFVwazRhMmlMdWtaSEVwQkZOOXdYV1dlNjcxTlZmM0RJYVl5LVF4Sm5jWTR0Ti1oYXMxcnc2YXBrUnoxY1JDdW1QOXRvX0dIOG9uTm9TLUtKeThDbEJWVWRPTkxhLUxmR0RsVnZ0T3ctWjRGRm0ybUk5eWFlRU94NHZWbmdYemtnVVpTNmpfcDlrWVQ4c3N2dHp3NmhQWFRxZ0F3ZXJzTVpoSUNvdnR2WHF3X3g4Wkw1ekN4ZWhkeE5FdEg5eU5kOEc0UUk0ZzdHbXViaTBVV3ZobnJBYWx2dlBxYU04RnBTMnpmTWxOeUN5VVFBNU4zRERxNnpZa3VJSWlpOHNMa25jaFZQSjZGcnRNTG9SdTF3MUViTDFuemIzLVkyZ3hPbkRDLUNDb2dTSFhQMmNqdFpvdUVlM2Rnb0R2M3pKelp1T2t4bzg3RXFsUWU0Y3FUc3htR0RpcWlVVGFzYkxUQTl5a3FBcHhRWjN4UVdFdF8xa2dnd2wtSEZUYmF2M21IekxVcUx5X1Jkb3o2UnBycXZQcTFWdTlKRjFvS1FlbFg1NkoxVE5DQW9YaG5QNl9PZDlMb1BpR2RhSHFBX05vajR3SVpYcElGYlE1bTM2N1NURUJncXNwTEJhaS1ZNmI5M0xtOVZlb2twTGV0Sk0tLVlSSjdjZUNmU0ZOVW40Q2V5MUVISlJESVVOQmUza3VLWnpTaWpYUmN1RjVSVE1PemdnOU5WZGNFMGhrUGJtb3FQNjlKT1UybzZ5cm5RT3F1ajVnNWxQVER5QUtVSFRpOUhjNk1ETzljUFpjVGxWYUFNeHBPdzRqZHlma1ByT3hDdGNMWjNaay0zRmM2emhwejZpemtoYW1laGFKU3Y0OURoNU9MbHlpalY2YzVfRlhPUVBkS2dPa3pjUEtwLXo1bE1pbTk2elpMeUdqaFROOWhiWTFwU1pzWTZ4bFZSMUNCUGdKNUpVOGZOYlRCd0NiT3Q0RGt3ZzI5RkVzSV84YXNCbjRqZ2UwbGcxdUFZMklkMGlvNjdvYmpSMzY1eUxBYlZpaDZsajlGS0w0c0Y3TnB0Z3FPZFN6Sl9UVnp4aE9JT0lEM0xqN2FzT2NZVmZkWE5EUl81NnVBMUVoVWk1d0MzTHF6MjRvXzZpS3BhRExZcEZlWXZrWXR1TVVXOE5HUjg2NXNCS3U1RW1PbjRUQ1lkOW5BY0F0bUlrOGxkZV9VQ2ZXWlBFUW5RSERjTTdpTnpKRmppVGdrRFlGeUowNTVnRFBrQTNyZGo5aWk1TWYwbndRYUxpOXVSMEFFYS1NaDVRMkR5bjU3Yy1kRkJGTlVhTk1CTlAzT1hDaVF6OHBEb0JGLWlwQ0lVOUxNUmprRmJyc3pNMWllWW1FMmNseVNsdFQ4YnpvWFJSLUs1b1FsY2p0MmZZRUpuc1VOV2JENzJ0UDR0X0R4dnFrOGk2Mm1aZE51THVLV3NEN1lNaldBdE11d0Q2M2F3Z1FqMDNzOEl4Y01hZU03YVdyaEk1TERQbFhnbDZYcU53RkxwUl9HanBmNU5Ja3ZKSjJwQTJ1aW1sR3ctVzhsU2dLZzZRdFhWYjNNdDZyblFtb0RsS1ZxMW11djd4UlZRdmgwTlhzSjhfeTBpa0FZUklZYXluLWZYUG9jajRYSTZYam1lVGl2MmNUVUs0c2xwbGt1Zl9CaFFGSDVUUTYzeXJ2ODFMeWcwVW9jcG55ZlB5UXV3ZWRkWEthaEdNVDFHYndQaDgwVklKRzB0aEhfZ0FwOTRCOEtxb3ppbEhWR0otYU5HMUJ0MU9IZE5ySzdGZGNkaUxNQTJVSDgtMTdtTzhCX0w4d2ktci1QZGtSNkQyXzdBWTVNb2tpZG9lM3VmaFo0a2MtWWluRnJoT2lmdzhBbWN6MmtqTDVrNVhEejN5RTNIT3dFdGZYUDV1cW5BMnI0YmFvTzdYTTBjWlFybFM0QzBfMXVWUS1keXYtbm05bjhEeTZFT2VUcWxxUV9QeTEwTE9raS1lS0xRYWZyQllzQVI1WG8tTDFIWEFKTm4xOTZFaFp1S2Zld2IzSEUzbllhZy01aEJWdmNRUGFnSnZMNlhtS2VQZmNybl9wNE9weHlRdGx1NTM5dXYyU2tVUzk3bDYxOEczYWd6aTN4V2VoZVBBaG5rNnRnckRyTHR2MEFoa2RPdmVEUGk1QktwSWdNSVFqZGFKVXBuOHpwaXhWcmVRSjFDTF9sMDlSRnVhRFFsSUVyaFlOamIwZzBYaFFkbkxSczV4RWRUR2trT1J3d3I1aHk5TUlTNnZ1a05QaGJSajVWTnpDNS12VGR3S1BDTG1TU0NENzlQLUdVaThYSWVacGt2VXV1UkFLN29VV1pEdFYxWlNPalVvaDNQekxZQkhyR0JnS05FQW9ZSHVJalp3VWc3MVZKZlp2ekVQSERvcnJWaWFDOGVYRlNsNTUtM0Qyd25NenNnTmgwdTVxclhST1ZvUm5KZGxXeUdESDdhd1hUSnhYNF9QOVNBWXhnRXp3S3B2TUpTTlNlT2xUVFJFV3JXT1FGVWVCSEpPTzBCVTZjeGNrVkozTG9zVEVyeW9QeGNDZWJkVzFhMndBVHlqNHZhYmFmUWNPNzgwbzJVaUh4Rng3eDJPQXVfaG03NDM4ZnA2LVRMa09yUDNzNnpsNExOMmprQUU2b19BTXFySVU0MEVTYzNBVndIMHFQWlBJMVZ6UXlvalpDLWxOMDFET0dmU2ZWY1ZYY1lWbHlramtUb252Nk5xZjJPZFJwMnVhOENiTHhGWEp2QzlJUExPNVVGZm9fc0ExY2MwWklnTXEtZGVYaVIyV2lidXBtZlZWek8yY3NyelZuM3JCbzBhUERHd2tEQ2x1dE1PR2hMbTJfSEpneU5sWktsZXR4QTR4YnNMc0NpR1ZNanJWendFaXo4Qlp0cW93ODJlVG84aDE3dl9xRVJ1aHgtVzM4SlhMWkpieXNETVg1X2hkd3VfLWMzcHdscTk5LUtjTUlwMlNkT2k5SWxNb1pqU1hIWFZOZFRTd2poWTM2QkNzOXcyNXhOZzY0d04wNUplWE9nR3hQV2Q1bzBTMGZSYnNLOGN0amp3QkxwQTlBU2tCb05xMkhTcXNUV0FhWjgxdllUOE9pRVB3Y2JrbHI1MUZYdGwyeW5Fc21MbXRMQWNtbkxDV1VhcTlWVE51MkhUWmtuYXpLWXM1czBHQVItMXlwZkhVekZ0bFNfQkZWWURNTWtNbC15VUlMT2FlNjEyMUs0aTFtQlRkcjgweXR3SS1zV2t0ZzlyNXdPVUozYmtWeWo0MmRuQmxBY0FMUWt1Nm5hUm0zU29BZFp0T2NCdVZjUUgteVNDeHpsdWQ0aXhXek94QTNGX2VzV2VPTkNsNXIxc1NBaUgyR2FwQUR4RUpwQVRfR1RHTW00ZzlzcVpOcElkcXI0WDg4Z0wxZ1k4c0lwQ3JDd1IyenhjMFUyenpmVF9MQTNVOFFwVl9FVGEyV0pQdWQ1cThMSm1rYXJMTlV3Ymhla2kxaGc0Y3lWQnI1QzBWQVJXdS1NWkZYdUY3MnNfTTQ4cUpuU3pfMTV6Y25WaGU1RUpxa3o1Z3lGSkhKLVJjWG1CdU4ydVd5MnNOcjA5QUFUaWRhdzZPQVZaeFlUTUx3akE1cm1iZlNPQy1BVVhkUnRjUjJRTEhPSUVPbk1jZG9NVktMSjlDdkVlTmk0bC1ickloLUM1SDg4S3Zua05Jb0ZaRWgyZXNGQzE2ZnV4WDlXb0kyM1JDVnBvNk5ZeHgxQXJqLWhqMEhyV3h3RThZdi1RZURSdXFlSkJJXzVHYXRYdlJON1ZCUGpCTEkwMDducjdrVmlFVlZSYlk4MjBJZm5BRWFZNTNyby1rUkdwbFpFd1AyWXlfNjFjVmppS24wcmR5OGZxSV9vLXpEaWI0Z3N3dXZoaVQxZ1FXbU1GWnRQcFRVYUsxNllRT0FNRjNCWTBNZlhqb2JzaGFscS1oN0ZWMTJMbUw5SzkweGhsdVhVZEZEb0FXYWtpLTV1NGl5UGhrOWlRNzNvaFM5S0Y0NVBlMzFsZFFqXy1OMlo1MXhMd0l0cEVNWDBSNjh6NFBXeldBMTBqSko0VXpIV1I0Q3UtUkZhSV9Ock82Z2JVd3RQSHJOcWh2bTZocnNScGNhWlJfVWJfY2RsZjY5T2haUlVJVlJkREoySzNLZjBsZnoyRGt6TFAyZjhSa2t3RmZkZl9RSEs0OFAxZEJCTkctQUJmNVczbUdUSWhYTUpVU2xnZ25IcUJZS29oOUR4d2p4Y2xtVnAzSTVLbkkzbm44ZjFsLWxKeThjc1dObS1HaW16TklwaEkydzRQTmxwOGN1dHJuLVZWZTRHZjJTZV9QOGZHUkMwRC1Lb2xuRlgtZC1kUWpaN0gzNVVDWXlVd1RaNlM1MDBkdHpPU2FjSzVnYUREZDBsZm5sVTZEZ2RodTVRY3owclFjWV9NSUpNLTVBV1JseUtOdm5lMmp0WnRsRmxzTEdaWlRrdDJYNVJTWU9jSTBXMWNKdDY1aWJOeTB2TllfWDMxTFdPbkJRVWtlbkw1cUxYTHkzUTRrWXg0cHRPRk8td1l6aXNkR2Z5TE1nZk9JLTN2NHl2WWY0aWZucTQ1b2NGMVVaSnMzMkpmSTFXOWdyOWd6TDlINjBabFY5VklLZDlJZGVfOTNaOGFkUkZnZ3ZfbUx3eVAtenVoeUh4eEtvNEdiNDUyWC1NTGwzSGtWbldJcHpNVUIwNEZSeTRHTjRNTzRFd05Hdmt5emdVVFZvN2s1MTE3X1RnazlzUDk1X0p4blhzbFduYUliLVczOGFvUlVUMEpFWksya2R1VUVvcWNCWFhaTUFybDhSWjdmaS1NRlNkZ2l1NmI4U3gzZ0puZkZDLU82Q21kT3RlT094X01GbDM3YkpaMUNHa1FSNUo3VEZvdU1nVXl5eTVLdllycjgtUERPVERCMC1NcWdyb3pJdU53aHh2dENMbDRyNHNQZnhkekdlM01TNHpSVWN5cW15ekNlcmUydUN5TTdWaHNvY3o4b0RsaE5NTHhSM01TRkNaaGtaeTNxM3JNTzhKTnRSSWp3OG9RbldIYklSeG0ybFM4d2hWWEVvMk1kLWdNYUdpUlFWTzVfcVFhaHpwN1h1RVlpOTBMYlVDaE5FMWJRalF2c0tFUUNQUXVyRDctNHFTM2dWRWV3NS0tbGZ0enFNZm5UczZvX1czZU5WMDVJNjhTVUJpWmIzcU9QSS1lcUg3WFd5aVdxOFlPSlVXUVFPX1RsWnpPcVNqT2NsbTdpWi1heHpRVHBseUhPN0ZPaC04Umc2WE5BbElRWFRVOUEyRE5hQUpYQ1UtelFkZGczdXduY3g0VWxRNW9Ob1VOaXJma0hJczJxbXhoX1NhRGM0RlRYVXRHeVBGYVFmYjdmWlVYR3FERnJneGV6TVNSYlRSNEJoTlpHZE1KOE84VUN5WTc2TkhZMDIxYWdwWERQQWhZRzZuS2dxWXFQSmdKeFdQZTBxX0d4b2ZUWjFMR3VxX1RBemNPVUNPZlNsUm1leEx4c185RjF5VGhDdUxfMC1xR3kwcWxVVFNPTGhYbUE2RTRKZjdXck9nZm9ZcG1HN25ranE3LTMtTFlReWJjY01VamUtQnhSM2lrVG1lUmpJVTdVT0lxSGI3OVF5ejJjVHQ1UUxSU1YwNk0tY2VOelQ1MXJpOUFvVl9nQ0NLaDdLQ3FTbTJRWWcxeThlYVZvYU1sdF8tTmlVSl9zdzhUb3pBVFozN0VIeUszaUZtdTU3dUFZLXZuQkVmaGk1djdMeUU4SVUzNktBM3JYM1NXY2VtZHVFWENTRFBlN3BtakhfaDNfQnZjSlRTTjQ4R2ZmeUdUOFpzajhYU0FGSldjU3lIU3d0U3lHcVBmUWNJUEZMc2psbVdUSG90X1FVc2VlV1dvdFpIMXA3aTlTbjV2a1Fud29BbHV3dHhRRTNCWV9tZmhLZXE3RG1Nd2UwQjhyOU1qMkIxTUdqNV82dmhCYi1LbXh4bWJaZ0FvdjVWUDhLT1BLTDVPSnQycW1ta2cwUkJoQVVWYUFVNWRMOV83Y3owYkhBVFZlSVJJQzNHaHA0Z3ktVDM4eFZ5UzhCeFhrWGtCTmkzVEhoMlBjRV8zRGRVa1BEM2RoaEJYZGNxclpzOUNfQ0N1NUJIRDhZVEpIaDNiby12WEFXd1p5UkpKRjZvQjRtVVgtX3N1aGdULXN5TTdMX1UzTXZ2Z25heEFVa1ZuXzVXZ29mTmpFZW5MWENfOUdZRWlFVng5ejl2SEJfWlZNTDMyNklOWTVsR2RyalpkcmhkU3BCUklPd1hjQk1MMFAtazVYbW14SW0xdDRzbEdocGxhZ293QnBQcUI2dmV4bnJBcVF5ajliZWlLbExuc2Q3Vk9fSW1IcUxtRkN3TWo0aG1tcTllQ1JDSDBWYjVhSnVoRVRoSTAzNWZXV29SUFktWEpETDhFOGRyU2pyQTJkdHdRU1EyQlRzVHJXem00R1M1amFYRTdJbmVzeE9NWHhrT3dfRXpTTEhiWWd6V0FYSzBWY2g4aGd6NzFxNWN1bW5VQzFpRm1kZTNKbUd4bmdyS1I4QmFvQ2NWeUJCWEtXMWZmdi1NdE5PZElUWUtFeExqanBaV3lndTFiTDZiYkdiVGlIZF9wRTdBdlNaWTJfdHdnT0NZQ1hvS0d2bDFjWGhoeWQ2WlNaR0VxSGZza0dhU3hnZEFwRHNVd2cybmNSdGM5cFZCVTdwMGR6SE00UTRybWcydG9vLXcyaUtRbUduTC1wT3VzSHFFb2UwZERGNzBDWk9oLXlZMjF5M0ZiVXVpX09CbS1PdmtBVk9ON3l5bldIMVB6d1ZCWVhPeFNla3laSUM1THR5dC16N0lSSlZLZFhIWWlEQXRHVXN4OUcwUF84cTZ1QllxTi1PTEVQRm1TNXJZT21uSlktM0JtRUQ3N2I2cWdyYlROQ1VSWi1pc0ZZSUczRFVjY2VsZlBhbWZIMFdLcjdROWNtcXl0cktUQkRrcnpTc1VKVG1QWGxBSFpfZzdkRk5JVUNfdnpIRVJIN0FqZFFGb3QzVkx3eWpDdmU1RlJhU2RnUV9jaEkzMUQ0Zm9XVE04eWZUSTN4SnB1MjNLaTQzM09xSWZmbXBaRzhKSEVJMThTVXV6Yk5zZDhiejR6VTZFTWhXMG8ybzRfc2RSd1daajlBWGdHNVVmTXJmMGpOWXd6LS1HNVlIVHhCdmlzbEF3djhscVNhM0NQcFhEcVU1a3UtZXpQeGFPNHZXclotZGo3bkQzOEdQcmE3OVYtYzhuX19pMjlPYm1hOWlnT2piTHMtTUlfVklnMnEzY3lNdGhTS0FvWlhxQkZFaGNzNmVlSzdhM0Ffc0JtNm5FSGtNM29KY04wdXpGNGdUYVZJNkVrRXg2SjlpM2pwQXM2dV9NUEdpMkwzME5XWlAyRFk2YURrYVlkelllMU5BSXg5Vzlsb2ttN0FEMHNUYnZ1ZDlmR0lUSW02dFk4ZWVzcTZOZ0Vxd0lIZFJHZGhsdmRMaVNvYnpUcGhNc3lLdXNxRU8zVFJzWF9nQ3BsaDVDMm1NNkI1anJrZG5aT1R0Z0V5RTZvSF9rdlBKWk5oeDlDN1J3bDhkaVlVN0hVLUkzT3JOUVNqWEFkMzY4eE0ta2RZUlRvOWZVb3FjaFFRTG1MNU9Mb19pMHRnYS1wTW5PQkM0MEtxR3lQWFk3OGNkUGJnWm1GZmR1ZWltdllid0ZJcm1iS2pzWDdscTE3ZjRpdFZXN2hjUkRfQmF3Q3RZd3lRNml1RmViQUpmaVUzNUFzcHFPQ3JNX29qRXYtZlN2MW9zRk5GWTZmZzU4NkctZVF1V0lLWENaQUxNQWpOLVdUQTQ2bW1zMFp6cXZ0c1VaRkh6S1YxbFNuU3MzMVhTWVVNanhPLU9tNi1DcVpFWXJEcmVzUHFacE4ybHd6Rk4ybGRLeW9rOXRpU1BwQTFwWEpMdVRfS1hNVnhzV2dYSlEtekItaFlocFRpcVJqZkhBTnhqQ3pZSHBMUnpmYV9ibjR6c0c4Vk5xQkVnd2U2NENUN0ZaM1l5ODFuRlhENWxIT0JqVUZERkZJMmhUaTRIdWkwNzdtcGhMSG9SYVZLZEpOUmJaTUUwbWw1Yk5RMHNibS0xbVRlOVAxVDZISVFCUG1DdU5fZkNiWldIWFFhR2FETkZJM05hR3lXaDE0cWZEU1p6QkVmaGdpSDBiQlA0ME9KQVpnMldvVnZIOTEyeTBBb3B6NVNUUWs2bkhjbGpvN01hNGFla3JBWlg0a1ZYYXR1TFBDTWNXN0x0UktLeDBGcW12LUlJWjZfRmwzUjl2TmxBNjNVcVNLcVhTYVU2bEtrQmVsQ28ybFdvazExRnYwbjBtaEZoQ29XeGhBTFFqN2ZycHlwSWhkTDNLV1ExaW1LdVVwZUctdk5IdjlBMkprNFFtcTlIUUxxOUh6eFlmV1BWcnUwbjQ2N3lLb1p6aDFpRTlIWHBOYjR5QU1qQ20yTGtkLXJTMHhNWk9WcGMyQkZlVUQ1c29xUDhiZW0yMzR6UW1kRkFqdzZjMUJxcm9FUl9YTkxVWU9NdDFGUlh3d1ZENmE5S3lVclhnY2pWZ2NSZnB4bzZTYVBXY2ktNEhBQVRkeWpIOTg1Sy0tZFdUYUNQUXhxSGRfU0pCVW1acWlTR2haVEtVNi1wZDhZQlVVZ2YtdkxkRzlmNC1TYnozcGl6OXB3UXFZeHRYcVF0RXNCcndXQVFxSlBLN3lUbnNfUThMN3FoOHhnaUhuYlpfSXZNVzdWa2lUYnB1QV9uRGFwTEdfb1lkVDFKTmxBYXM5T1pzaEtMU3hhcVI5RGpqVW5jUUdra3ZkXzdYX2RULWVxODNQWVg1akNsU0xQLXc4S2FOaUYxSV9DdkhkRTNkc0VUcTNlQ1JlMGxRUGNBaGpkUjkzaVZwNkZ2MENFYXpudHNGbDZtSEs2RXIyZ0NDMTF0Q1VBQTlxa3RhSUJrYmsxTEJ5bkhJT2c3Qng2QWllUGpIbk1sZnNnVlR4UTFxQXNPUjk1SnpoT283UzdZR3pwRlZEWXV3NXI1Zk5faXdUVktfbzZEZS1XVjkwblZMSVNYRHJQenQtWW5XSEU5Y3dVOHZJbUFQN205b0xod2s3M2Naa3c3TGhUVHJIZGFCUW81SW9nc2VoUjRveXVaQlEtRS1ubWNuWE9IUFFTNGZybDJTWWcxMzVZWUNMM2ZFSHk0M2lFcXZGaW5nZnlQeEcyVHFQY1kxWi1Zb0FramtTeXE2VUZNbnlMalh0TTk0SmlxVWVadXpVczEwWV9SeHpSR0RsdzRSQ1ByYVhjYXY1OW1rRWdkcTFETjl1eUV2MTdaS1AwV0ZmdUJienBtSTd2NDF6c1pFNGJxbWdWUW8zRkN2NHRpTjlWM0NhTTd2WnEtRHdfOXkyallxN2FpLW90N3V5bVFqNEdtMDJMa3ZMdGxmM1Rwanpra3dHRExKQVBNX3o3TjFRbXZ1MnByXzZxZXBUQldUSEJIeExvWXM4eHZSdXNqTUVjbFhnMGR6RHk2ZjBTNWQ3UUJhT1NhNWpDUTUzcTZjdURQU1hlbElKSGVaeWw5MEpnbUctY3hnQ3RNLU1TS0VkUGRkR1ViYjE0SXFsYTBVWHc0dncyWVVKRi10SkRid2d2TTdXdkRmSl9sM1duSnp2Rl9hOUIwWkxjNHRYN1BpTTV4Mllrc3dac0lwNHVUQkVlVHFjSkF1WGQwRW9mVjZ0OGJ0VHYtNEJRaFd5VGUwTnIya3A5QmFXaDVyVVN2NzR6M1pISGtYbVdjcHV1Mi1Rall6aGNIVkdEMXpQZnBKby1XWnNiSjlPRV9WUXB2enR4NF9pRm05bktPeXUtMHRjWTZyZ00xTk9xQjBDTG5uc2RSNHBEOHJXVWJTblBjSmgydi1RMFVNN0lUZHlkZmoxYy0yLW95UVkxWEJCTFFyX3l4ZEVoazh0SndVVmJjLW9iME9xODFybjVUQWhLV3ZVZXAxWDJiLW1JX1J2Vm5PbU1iejZ4dXBETEZUREI0cW9iT3ZUZG5Gbkl4LUpiajVUckk5cW16VlphRU54MndiTzVDcTFDUU9aVFZjYThaTUtEQWthZXlZVWZfZ0VvbGM2cHozblpGRlNTaGxNQmwyRzZXVExGTXJUYXFMa1p3MDdhQXR2Q21Vdjd2RjZ4Und1UV9rX2xsWktoanBIdnhQV0FwQ3pJei1LTTl2WWxRM0RVTC1Ob3RidWlBSUIyeUVVc0tMdlMyVl9iOERzZkxxTnFacG9kU2ZScUJIeXRvQ2YxY2VLMnE0THA1QTRmMkZHR0lFd3RITGxfR2txeFdqV1NXeUswOEtwdjlpUlcwSzBFaDk0WS14Y051N3ZKVUxJZThfNVQzR3ZGRUlhaFZza1ItSmVXRmF5bXAxU0k4QVJZWXdpMlZPRjd1WGQwUmxUVXAtSmFrTnNxbmhpcUhfa0ozZ3kydGpVQUxzRTV5bnJnbUptODViV1FhUkEzT1F2dlZwVThFLXdUYXAxNTRKeWtKU3FEWWFlem9nY0RFTmVDRzVyOWFtLS1LaGhkclJpTlZBY2lzMEpVcmJsTFRwR3Y4Z3M5dU1fUWgwUF9ZbzA3ajdMLUlfS2tTZEl2ZG5JdU1Zam1JVkU0eWZxQXZGbVhrQWtHSVg0RGdxOFJFLVFtVXZfSjdidUpFU1BCcjAxSTRBZVVhLVF5UnRhdU93dDI0dEw4WDFsclVzU2djQnp0c29vSUtSYno1MWRTMm9nMXpkS2hRcENoVDdhWTcwWkpiSFVGdmZUNkZta1ROa2Y4MzhPZWxQbC1XLWlWQm9qWkRDYXFsSUlOWUFmb0pabm96NzNSYy0yQmJ5MElwR1RpVWRJQ19rVmhaT3p4dG00QjcwMEQ3Wk5JNU1kcEJOM3JzeXk3dVplSDRydDhMRktPaHBYOXlyaFRyQUFwWmR4YzdBcVdjQWpHWjNmSko2NjdnY2pPR2NJQzZsa0dLdTB4ZEZSVlNpWUpJeFVHVm9xNHYxcVFxYkdXckt5b3VpMHN2ZGNVeFh6dW1pSEcxd1ZVajVpREtwY0t0bWIzVVB4b1JpWnVKZEJQR1lDQnY5am1oWWx1UlI5dlF5UUFlRU04TDBKcjMxdXpENHlMd2F1aGhWcW15WnNod0JCSXhiMUU0M2RTa2lOaDNhLUFxYVJSSUJaRklKTGVsVC1pZEt6RDQ0bFNqRFpmc2dqcUVoS1ZlbkVZYUliSFlKNklvUWdTWS1jYUZHZ01MQ2N6MXRRY3Y4NmhMc1k3bUhnVUUzdndzM3NkR201X1A3WmRRazRSbXB2WGtGNmNWVFdGQXFUdUFQME1kZTg0N2Y0Rm9LMWMzQnE5a2llV0s0Y1lQS0cyUXNUSk52dEdMZ29aUG9IRkxUbGRVdjlQWDFpcm9jYVc3ODVSM2lpM0FTcDdvUXFTZWt0X1M3YmZhVGlLV0JUMlB1UFhQdXI4VlNmNG82QndqNm1JQmZOY3lZM1VmTHk1b05MaHIwWFg4QlhGYnhUQmxacUEwZ001Mmp3dTBMSkZZcVFqc0pGUHcxSnV2R2hQRFd3bFRWMmdDOTVlbU1BZU1nTjZpN211M2t5YmdBckZlcDFzcXZ4UXp6bnVUTVJ5SWpscUxOVWlDZklpeTVFSnlrd00tMzI2SXBxai01YWhVMFJBb2Ftd1cyMmV5Y0dQTm4tODhYWWV6R19Pb3k5bGhOMnZQY0xZVVNaZ1FnVEVnWXBNR0xEclFSWUJmbDVjRHd2Nk9NS0w2MFpnOFZTc2k4azZRSU1ZbmU4RVZSNHZlWUVVSUl2TGVGZ0JyY1RSTzZFNTZRa3pyWlBsZEE3ZWJDdVJSVkJPMUNjcDRuX0RPOWhGUWRfdUFvTFoxcnRTRC1ILXYtWXk2R3ZDT0JyYWktVXlmTm5DQmJtdHZtZjRycEdPcEctRjFBUjg2WHBUVjNubktlRFlGNUlLMi1Gb2NlQUF4ZzM1eUtKcEVtVlJINWJyVmxYcVVsNzhmWXRaZFBtaGh0SzRVYVptYUxNOFBhMm5oa3JGVjU4eERhN1hQQVhjd3Y4ZlNla1BUTjFRZGxQSUItU0VxY1dVVmFWZUcyV1BDajVHbER6bjRLQ3ZUYUVvVzV4bEZQREVvZUE1LXNrbmJGV0Z6dk82cGtXeHh1RXJhSEY2QnI4T25uYTZfNkJrQVNqRm02X1J3MVExTHYzRUxWXzNzVWdSbXB4a3VIdENmXzU0TGEwU3F3dFRCRmtOUDctX0M0eWE3bVAwbUYydzZvTmROZThxNXR3RGEzVFo0YmRWWTlSc19vTXp3eERiMUlzSklodlViSG1LSC1BUVZhY3R1SmYzeEhTOGRtRUNNbTZhTG94R0dOSkdJWUp3cnRYdGNEa2ZCVm5ocV9Sc2wyc29mdVJBbTA5M0lySzFrYmR2WHdReEdtWXRINFNhdkFTTDZ3SnM1NFNzakt4bkVxckYzcDRqVU1SLWtIcVFKYlk4Qm4tOURfVENoN3BGcEJ4cVZCZURLMmhIb0h4U294amVhUTNBcGlXbk9TVXZQb255YTVaQUhOWWFya2tBaGJJTElqd1hLZWZKRGZZX3NQZVdpV01DcmdrWGZJWE52bTZPakhSMTg5bVdYdktkdWkyWU45SlZCOFJ1N2UtNDE3ZDI1c1EtQS1zQllTRHlRWk1CQUdFYlRYV3pfYTY1cE5wa1BxdC1GWUREbVdaMjVpY0hpQmk1Zzd5YVFxZ3ZqY0wxRjhkTXZIXzd6a0x0QU15djhpWUFkY2hxMkIzNXF5eVQ3YWdSZjlVaGRGM2o2dnhoQzVQS3FRVEFhV0M1OVVkaXg1Zlh5SWNSeFBrRnp2azRvamhHX0FreTFVM2JUbWlGbDhjOWJkQzhxbzEyRkRZZEtlMjh5UkQxUTNnbXllRkJHcnNUVGQ4aVFqNTE2NGR4X3VKM0FoWVZDTU82REM4VDhNWFJ4Rl91UkR2alRRT1A3c3lNMEtYR05Ib05WbWRzV1E4eFQtTldXQXdOY0I2RG9GWkM3U29xT3otUklWdm5QeGdNWE5tT0FQb0pueFEySm93Q0FOZ09aNDN5YnI2dHJIOTJYVWFfZF90eVhGWHRWSWJZOTRKZG9Oa3VIYU5pRndmVkU2LTZUVXZMcFNoeVYyWGw1NUktbWwwY3JpZTFHcVdIMmE5VDRlSG5WSkQ5cXdudHhDVHpaVkRSV2UxRTdKUDVDdzZmOGpSem9rUElDVWtOYVhnb0c1R0VCMjRyVkFQOU1uVWtfMWMwZURWN01XNmQ3YmktOTVEZGIyUm80NFBIYTRoQ1dfUmhhM19xYTZVQU92NTYwZjR4R25tYVF2LTJJSF90Y2dhVFpJVGdKNTc4eDZyLUZIY3ZQa1pLSlZGcUVYUHQzWjNzdk9CelI0QnVUWFR0TERtTGt4WGctQVNwbWZxazJ6bF9tR1UzdFNmRXpJY1RQZ1hQelN2QW1WS2ZiWURTT2llSHlGdjJaaEFwWm5pdWVMQ3M1NEpBZHg1UE43S3JIQ0pGcmlXaEFJd0FhNkh0M1luSHFCUURYNktBZ3Y4WlJ1VVdtc0dLbm1RY0Qwb3MzN3hLUGhqdWt3V3RDMHVRUzNFUFBXZGNwRHA2N200cG5acm9LX01yOWdZREJpa0FrejdMU2hOUDUtZkhyd250Q1hYdnBjSVZaSTFWOXBmWWd0THJ5cWNUZ1FUeVl3Sl9tbUJvSU9yZXZkNHpOX3hMUWNwREluSmlJeTRaMVBpMEE2b1dXSTBGQzFjMGFfdHFlRk80SS01blA5emd5c1ZMc3ZFenExd0FNZENwVGg0Y0t5czh6TDREU21FRzRMaVFsR3BjVHJxbXdwcWhYM1F6WklETS1SX3h4QTlSdDcxSFRkak9iekVTSldQRzJSMXZHbjFmZEZxWC11TnotTTh6cEJSLTViS1QzcFRvZ2hPeDhiTzN1cjExbTU4N2tTOUU1T3dfNVlpa1pYcV9jQ0hTYjMtRy1tSExwZDlic093WksybEh1MklJSFNxOHpaWGYyQmNXU1JSMmkyRzdDckgtQmdsRVRyempfM3B1TkdiSmdBWWtrVS1UeEZxWjdheUtVRGptbHFEVmR3eEhuYmRyQjVwOC13bllDeTJFWjhoMXdWdWxUT2lNal85WExqUVBDeW05dmZkNVo2Q01SbDEzMERmOGdoMTU4NUx4UVBCVW55UVEzbDl3MWVkSG1HbERXVy1ESER3Tl9qRlVjR0hudlpscTFBNzA5bS1LckVuYVUwaEVfM0RndllsQXJBeFhPdjVwdGgwWHNJcHNyRWV2LWhuSkJBaXBsQUFRaWFuMnI1V0F0clRvbXpod25SYVpJVGdRTy1yTWZYU0lRX3NrdWhrZEFJcWxiRHh2cDlnSnRVNGxJT2RZOVVIbHBnaDgzRDFUN29BY21ZTlZMa2VQY0hnc19scXRvZGlNM2dueDRwR24zekxPZ2hWa2hVVEd6SjJYN2lDNDYwUTFZOFhaMmZjSXBYZDZuOHBCQkVzQWFiTV91a0MwUlJhcmFNcngwcmdFVm1rdnRFekJOVVBpYTg4dEJfdHhsOVNjbHNZdGkxYnVCckJkRXc5N1VFdlBJd2RuWE93NnpJdHlxSEwyWG5kMDM1YWRXN3c2Z1l6cm93MElPcEZMVENVY3ptcndsUWVuTnVqa0FRanVKemlzYnN0LXpJVUNRRXloM1dGa2E2RXlKblJ0aGk3N2p0OGVMcWJwOFZVX0Y1aWNEZGZOMWZzOFpveVFteXBOelpnNG9QTjlRZVMzdF9oNF9NSzZOX3VfTlpQOXEyRi1PRndZS0VSQTVwNlBDLWk5UGVqNHcxZUtJTlA4RXR3YVJZV0c0XzhGZGlac3plRTE2SmVDVjVNX3VjU0I1VDhObzB3eFdrU2lwUWtpem5DNnFzbGpSazVqTWpNZUp2dGJMa25CTC1KNWotLXRmcTZWMW1FN0M4YmJwa1MxYnJsenhJZVlabmRNZ2tNdTZrZXRRODRFSFM2dnJHbGlLTW1Ybkx1UFN4SXJQWDN1TmdzcktiemxPOS1idlB0Wk5TTmFxQXhjODlVTUxNNDA4ZXJOZ3hMYWR0N2JDbGVEZDVaYmZiRDJjU1M0VGtDMHduN3BlQk9pOXNxUkt1SG5zV3R6cDUySER1U3J4cWQwX0xBX0Z0WlF0VXRUNU5MY1N1T2p3WVFpV1pUendSSWNGUEN4R3V2RDZJVVhZZXZlY29rUlg5akFTNi1aTzEtMnp5cnlPMnBNbi01NFhoWjE4ek1odnk5NmpaYUlkSEtMejhmLTU1aFZDOW00R1RZY1FGQks0MXR5dkdSVWhabjIwakE5V1l0VGNaam9Zd3hxVzVsbkpndF8yWkxYcUhiMG5GQU5nci12cUhTYWk2RGdKMWZneGV5V0t3cHpzSDZVQlEwSFFmWmI3RXNQQ2FiT1VmWGdscXhsUG0xSzZBZG82OEpZcXNLUmJtSVRLS21vRml1TXNIY1lQR2xSTzBwUkx4LUlkVFI0Q2F2cWs1NmZueWlYVE9zanJKNGE5RWtIS29saVZYS3pxb3ZfczlhNHF0ZEZ3OERMUC1QVVFVenhMSkhkZUFFTkFJYU1LZi0yNmdTZmZjSnhyNXFGMnhtM0ZWWXNNZTVERVVXSXZWaENyclFYaEc2SWt3aUR5eXYwZnpWMFJSSHp5ekdac0x6LXNwWUptZUZiZjd4OGN2RG5ZVk1tUnh5Rm0xMHFKdXZSNl9RQS1sMnlxZUJjZVhBdlBLSGNEUDFSNXBoWnRLRUx0RnYxTE5zX08wNHFNYzJXeVpTblJGQU0zNk9xQ1NuMFUzaXU4RlNtZVVuODhpa3UtSk4zck00Z1EyQ24xTVdGVUU3WGpmS3RyMzY3cm1pM0hPZHN2QlBfbmZIV29vU1E3dFBkVzdhcmZ0bllBNnVnTDJFU3BtTkFvVUlVSTYteWtqTmpZeWF0TmtSSFpIbU5JOFVIaHpkR0ZQd09HaEhibWlCbERxRF9Pa0I1ZmRnbXFwS3BQdVJKdDQtZ0tfSUJvaU5XLWlRazdSWjliREtzWklteE82dnE4UUdWRml6d0tSd3llNFp3NkFrWWFoNFo5dGxmOE1xWXMxSzN6M09Td3c5aEpKVE5mQjRwNFVteEQ3c0lTbFMzZmlzTnRSMzVRZm5rZ3pLbDVRY1pTbENaMWlrSzZSN2kyQUNlbEVsRi1PRDNjTjFKbnhUZmNLQzlkVTZvQlZYZWZpM2t6Y2M2YlpNNDdNR3N5dTJFM1BzZjdNLWI5ZExYT1VRdFl3LVlIbkl1Qm5yTFRvbzVZZHNPRUpMMEEwZHEyZTgwNmVHOGxxWEdNZGwyTWZHX0szQThxcHVKOXRiNkdwMVNEcVpzVVIyRHUyS3VFZkduZEVXVDlYNXhsblpWbmt3UlRDSkVjNGR3ZGtrbDMyaUZRbllWd21SYlRtcktfSGJBeWNZZmF6M0dqUlB3ekZ3UkhQcC1xN1UtQllRbFNJSExxTS1fSk5TQmcwM0ZtZmdrM3NFRnR4X3RJZTdxejJicVBhX21xZ0hFbk9JTjZrRVVIQWJoTXllOGVSZGV3bEpvYnlWLVVMTUpILW1lZXlRS09RYVpDRFlwUzF2MXBlNGwyanZacU0tcWN5eXhUZXlrSDc0czFYclhnT0NVZC1MRnpWRkxwU3Z2cUk5WmEzX0hTcEx5OXJ3bmtEbThtOFl1eGJJNkpTOEFtWHoxbG8tcHhwNnpDQVJteGdmUXYxeVdkTm9MRkVYbFNRWGhnaEN6UVl2U2pRTTl4YkhJSlJmbTZWZ1VqcmU1eVJMa3ZiQWJNVk9rMG1CMjVnRjVzT3ZGYnRkWXlJSlRkSk82NmZVRXJ3MUQzaVNhM1RuVHdLVGRIUldFWGk4a19nZVlRUmxoQjlWV3MtOWgxT0dDMFJuZUtpQVNxWHRRSjliMUx0SDRfWmVJc0lqM2dWRXB6azB3TE4zTDIwbkNyR1ZSRS0zY2UtOG12UGFGTFo0OVZueG9zdkpJZkRSUklFZ1ItcDIxVnV2WXhmajhfWnNScldDeTVUU3NVblhBTVNFemhOVnlMUzVONUlhdG80dERnSGt1Q3RjV0ZMLTliRy1TbEZZRngxY2xTdzBCYVU4QlVqSy15eTF6alN5WXJOeVRsV2h4bmVoQTBUdWVYS0ozVjZOWVRyTVBEUzRQZEgxY0FjRDY3eG91VnEybVlVMUplRGJjTG5xV2hCakFjdjM4WC0yOFVQbzlNenVEOHVoeWdRVWhzeGszaFZBa21RTFdQSFNYaWRSZkMxX1JkakdHQkprWkZxSXppNm1pMWV1WE9qTDNJS3hmUzB3MGRscTdNLVFvRE01cnRRclZxLXN6LUpxc3NIQngzQVN3dExLMjZCendmaWxZNFkzcElXaFBsbFdXVGprWXNLSW01azJUS3FIRFN0ejhmLTVsMi1VRkk5YXJpQi1BaEJrRmw3WTZqbFZQNi1DMVFHV1VnSzI2Y0xPcTdzRGVveV96MFNNcWF4UDRoaEpfTmFYMi1pczJjeDkwTlJ4dXQ0TFBEdXdXY0gxRWNsMWs4cFhJQld0MEN5c2pidFM5RzJ6cTJOZ0dicHp4cG5tZWt1T0RVMzdCcDVHSWg4aFd4dWtKdnB1bEFpRHlTanZlaUZnVFY1cG95QnFlc1RaWUVfX1lxODYtQldQZ0Vwa05hdjdockJ0aFBDMUZGM3JaTlk5ZjJMbkcyY19IMUZaQ1FFa1RwV2lGZWp3QWlSZmw2c1RNT3BMTkNGTXRoVDBvd1RnLXRMci04YTBZaHlzMnEyRHpIVldwcHJ5MEphZkMtdlIzNUw4ZTVndF9pMzBxWW01UlZGMXdOMzNOY2xYSzIwQ0k1TF85LWZES3JuX3R4VzdfSWVOMEVTV05xSzduRWhjME1MdW1XXzM3ZTA1Y1duSEZQREpPVm5yMTJYdmJLUllNZnNkQUppM2hQWWkzWjNXQ1lUQTQ0VEVSenJOVW5sQ0ktSGR2Q2xQZWJpUElDdm1CWVIzMFYzWEQ2SnQ2Y0xxT2hYajlEMmc1R3NQeVZSZm9RdGw5RWZNN0d2ajRZS1hTLWctdFAybFZWNEdxbU9uSDhSbTJtd3JxbG1uSDI1RE56aGQ1SjhWNGg1YUZ6bTE4bU5lbElTUXVyVHA3LTl4MmczbmxidmpfMDFxVjlVVndmck53OXFLcDFqOERqdUdzWDFEUUVPRkp4cUp6NW9KOC1UcklKX1RwTGhMLUM1Y01BSHZMR1pjN25kaTZ4dktZVWc4OXBwSmVCTWhQaWVVZDNLcVZzVWdDN194Q0ZVTlNiVVJUM1RiQ09vdmt5ZlZIMTlKRjJoX0ZyR0c1Ym9UOVJXZXRoRGs2NjBKLUlRSTBhX043c1R5emREVXVHd2M2TXZYTk9RM3dIbTkzUl9mbThHV2lzU3UyVzF5RDdxOVJwS192T1NtR0RIMVBLRTRwbzBNX3V5UWhYUy1aZ2RyQlNGSEpkZFVqQVhJTU5DQi1SSXoyWFB4YnlKUVN6Nml2eWFsRTR0VDRlb1kwWkJFSElwSzE4dFFqNFF0d1BOQm9qMFl2WTg1cFFIWXhMZ1BmcTBoLUprdUhzN3BGRTJ2WHJOc2lyZjBuSHZ1ZHFwOV9VTzVsTHhfZVQ2X2RpTXduVkh4UF9PLVJvTFN1Ny1LTFZrMldsam01MXVmT0VNbnR4UU41Umhvc3kyWlBXWTA3S1BzQWVHOTNrOFZFZk9WSEtuYk1sOXdrb0tObkVGWUNkalQzVjJ1aW9UOXhNdDFqaV9rcmhuaGFqTVNjSG5vb2VESnVqaGlfMlVpODU0NGVqWDFHNjIyWjFBZ2l5aWZlRXhkbGd3QWg5Szl1LUYtXy0xazhfbFhob0ExX3FyMlFyUWdKZEJ6LXpSakdWWVNuUU0wUnRWWGc2d1VVaG5LRl9lajBseFV2cmhUNkRPckQyVzh1MDdPSG5vQlpVNmhVVjlYYWlWeWlaYnYwMl9sN2o1N1d5UnNWeEFVS29JVWhGaWFjcHBLSGtzcmZLUnZmN3U4WkFGYzM0bFM0ZTNUUVNQbkVBMTZZN2xwbHloZUxZcVFER0tob2xPT1VVYkNzZ3J3VFEzNUpiV1NpUFhaZ3lTYWxtT1BYeHBVTk9QRVctNGpQYUd6ZW9Cak9ONDZ6SzAtcDdPSnYwMHhfeFlXT0laQkFNZG9WOHFycjBLMVh6bUxpajBwMDVlN3NKYUQzX0RialJqQnZrN2g4M2FGb3JEU3hVcjlBMm1CT3NwLWtuN2NBMTFlZFBQMDY5emx3MS0tYWtoTjVjYV95RHcwMUVCY1ppWTAyRXRfS2ZvVW1OZnBuTHQwN2Z6aUZtT1BUc1FfVWdlQ1BCLWhuNERRREhXVkhKLTBjY3RHYy1BemdIWkNXXzJiVmw0Szl3M3c3VEt3VERxeUNZa1F0X2Q2UjJGZ3RONjVucFBrOG5UTE5xLW9HV21udHN5dmtLVkhhdl81bzNLaFFzUnRBVHdBTnllVTFXMDd2eEo2bTAxY1g1aDFseXAtTFI4UUVFM252bFNSUDZGY3ZzczhhMmdjVUpocmFGTmhrSjlQODFZMW9YX051OHZQalVHMU9TV3dVRkpKZkVwSWh4em1pUG94RXBVVFJhTGg2dExTT3lzRzlCa3p3QnlRV3RCR3B1VUloUUtEM3RiXzhuODEwODN6ZU1DY3l1SXF1amo0NlJZUTdSSzNuaUhqSkxNRzN0VEpOamVjbDd3b1A0OF9ROXdycWpzM1RYS1FTWlAtVjN0dWtSc2xDNFhpamY4Nl9OLXZlRGdsVmtIWnZFZFJvbV92SnZmMTZ1SEVUXzd3RGhTTVBPZVM5eHpxbl9ocHlUeFJKVHl0R1E4d1FhV0N5Q3dCRHFIa3hHTkxKamN1OWJ3TUVWaDNucFpEaVNfcjVfSHV1VXoxbVZURU9XVXZxZHBtWmxDblNvNnM0TnkycGlQX0Z2allkRC1fVUlvY3h4ekVSQWVsNzZFWWx4RVhpcGEtUGZjRWZMbVZvb2VFcUo2YVR4TEhNRjFKa1RZeUtxcEFOSXhlNHNqQXZLMlpQbWRUM3pFX3lBMGdHWVF0YnB2TFNzU2lmVHN4SERYMG45ZDVhSXRaelMwU2FjODF4cVMxY1Njb1JXV0tPbk0wNWN1NTBWZ19ueTlVYVE4d3NkXzV3dW1ITVNKS1FPQlNRT2xKbnRQZ0V2TTNhV0VOWGptRlJXbFhrNTgwd0VEUDM1MWRCSXhOdXZMQTZxZGhqVnlFbk9fZk85RDZEcjhqNWN6SFBnRnlLdWgwNndVRmRaZGRZaDJsQnBMd2d0YzMxQ3poQTYyOUtkOGJNLUN6RHg4TmZ0OWVzanBJN01XUmJzbmVSb3UxUWZtMWsycjZ5N1h1Qmx5alJWbmV5UWdCcm1pRV9PNTU2b3p1M0wxMldIUENDX0t0cWNzaUVkZUZYNWJxanRBZVdBelFEVDlUYmRTRWlXbWRpcnBZZHczXy1JQ3FhdVM3T0g4bll6LTE5YVdwZG5QNmJMS3BqLXVqYkhabFpFX1llajB1anFHZnpDSlJxUFRXU2xsdS0tQThiY1dNaEoyN3g1aTBNOW14T29kbWpUbXZPZS1nVzNRRUMwYlhzZFR0Uk9hbmxHd1gyb05tTHJTVjNKMkJ0blEtUGdOLVB6cllvUlFlLUVISFVKak1RZ3hLNzRrZUItTUFjZHBtUWNUQnNhd1Y0cnBselRURnFFc05LazE5MENta3NlMVFveGZteDVVcFBWZHY0eXZLbkpJSi1DUWRNcEx6UEw0VDl3NUpWN21ldjRqbndtOUQtWWpiX0xCbHIzT2hnNm5Gd2ZLWnBZSFM2TGdnMDVCY1F4cElIY1YtdF9YMVRlSy1tQ1I4QmNYTzhIeFNNU3k1NHlTallJSW55NHIzSWdFVWdkSUF5UkFXWkE5RjhhOHQ3VkZvMkxtMTIzeUExeFphSXhVSE50R05DVUcxaEtHSlgwNFpjRjdMSWhfUU1XMHp1QmJvaEdOSTVpSDNRZzAycXA4OUpQRWtoUXY0amxwbWhCdzNFLTVvelB5V1pySjRyNDFKLUlYTlFiVTFmY2tIR04zUnd6Sk1wNzhCV2xadzExUlpkV0Ffd2wwVF9aVV9jcGVnbVhIYm82alQzb3l6ZkZGYVMwRDBvQjRHZi1DY3FBSVNldFBFbTJ4Vjhmd3B2UlJEel9CMXBRWVF5TjBlSWd4bXY3ekZkOEMzaUhOdkRfWjRLZl8wVEI3MktsQkZtVE15aGNPcjhyTDMya21mLV9mQ1NFQ3ctMlI4VnhjNlBGLV9rblZXUlNUbzdrN01TeXBuM1V3VnRxMzY5eUpvR3llcWRXUmU1d1ExejByMVk4Y1owVVJrZ0lLdEtKQ0RPNWkzemN2d0syVTJKRmdFc3VuOFVRRS1CUVhVNHJpNlpuMkpoeDE2ZE5jbXR5RmFiNDBZczBZaVhhQUxiTVJxYnNrT2pCRlZjYldnRGs2Ykg2eGFwb2tpVC1NOG93S1pwa1B4Vk4tdW5KdUFKTlJlLTI2OGhCeTFXVFdOZi15Z1Q5cnR0MWtJVnZib2RyU0tfUlVkSEZ4OHF6MGpIUzNabEpkN3BuOXc5TFAyOGNIeE1xWXQ2aG9BX0d5ZkpaaG9yQWlINFotQzlCVThtSGdDanFYX3hDMS02WnRZb1FpVjdIRFhHaDhvMkJXWmozS3k0Q2tyTHRqZmVNcWRKTUpkd2xYcV9hcDdtX2V1N3FtcWYwMlVYTWViLWwxRWhXYjNRUzZ1Y09qSTRodEhVMUJhRTg0QjZIOC1aMEdtNGpZdGQ5YUFkdW1tdjhOa3ljOGw5WGpnbUVUdkItX0M0Y3dBODdTVkpVcHI5dzBMMkh5ZWRWeWdZOGRoWU55ZERHWnNmTDNfcGZLOUJUNGR2UHdjQmFiTzlrNHJrZ2kyYTNSRUdxYW00Z3RJdkdiQWNpVnJ4c2R0M0ZwUEh4X0tTWGhGdlZaZVBXd2gwQjJ3b2JLRVFPcy1neFBVbXM5V0NuMTdydzd3aXRNNlBza0ZiNThESGNlX3RNR2hudDJhQmhRWEh6QlNiSWFuSEcwM0hvTlRsWnlLNGlmWnU2dTl0bHpSM05rMXQwOWNMZFNxQWdRUXBGWnJfZDVSVUlMSGx1VWVnXzNPQ3lCV0VlcGlRbjhuNEdYVi11SWtwTEZEWjJZclZ5QWc3cWRxTU5FMzQxdGJGdlhETDg3eWFDamJCeXlBUnh5a253UnJzbExaSWV4cFE4X1BSaEJQT3oxaHpqc2t3cFJZUHh2WDB4SllKalJjMWdMX2ZybzJBNkZCekw2cW5wczUtZVZvZGxOazF5SXFJaXNST1N0UzZESUE2ZEMwalM2UWszVGdlNnFZSFZ6OFB1QVphM1VkbkRmalR1d3ctcUVTWlVRRGdBYzdhREFkSUM4NGdUdHRoUmZOemxlTGFSeUNuaDJOZFVfOXJ1aVlzTjRvTHFLVnlseG01SFNFbkVOVVBldEVHMWNYQWVjVHJqLVUtdjdoNzZOMVZYMUFXdXgwVDdMUEhXc3QtWGF5TzYtWkZDOGVpaTZjbkZsLTd3TXhDTjUybmNlSDBuSDloSHFlWGxzQ3lhQkFLMi0zZGZZZ05PZWJNTUdHTFRCR29fUG9oZDdNeWJxQ0ptaHpWUGdfVTNhY1BrSXAtUndjN1dnV0k3Ry1tZWhONjNWQ2lySW9VQTQtampBYUdtZnZGQUtTdnFsMWZlZDRvNFJHLTh0T1c0cDlwNTZ3RFMzMTNScEdLZU1CRnRxaUgtZVQtOWx3c3lCX3VCd09MeHQ0Z0xlZTNKSkZQYmpDT3lrb3VQREFCVmp2UjlWaW1kMzMyLVRod0RXUV8ySTBLME9KNkN3cUlGVExWRk1wUVRiV3lkbzJDUElBQ2Mwb3NVaGsxRWgxTGE1VUVRMlNnN28tQ0hvWmZWUUtoOUJBUnNhNFNVaGpxOGJtOVU5Q19iZW9VS3Z6b09aQVdGbThLQVlfLVdDVXRfM3U5T0NRWWVzYXY4eF83MHR3c0hlQ0R2ZkRCOC1CYmFEVERVTFZKaGdhM2Z0cnh4NFlCWlVsZUs5UFM5VWM2RUhwZFpEalI3S3hsVWg2dWo3MG5zaFNYY1FfVkM4dWE4MHhaWFBLa2VNTHVCb3I0enBsbHdsSlZlNVRobFVFanB3a0k5SnVSemYxRlpkanhIV1BFZWRWSFJBRFBwNUZEME1XZmF6VFYxdkZ2QlNjNTZnc3pLZWJVcGVZcWM2N1BpeUhaOW9Vel9SUE10M2NjeDFRVWItNzBDVW5DVS05NUNmVmZ5YVYzU05Zd1drVlFCTkRjU3NxYkEzZm53Mlp1OVhMaWZrZ0VDVy0wOVB3MkZBc2EzS2lvd0ZENjZOTk5QdGY3azZ5czBpa2M4Q2U0aWs0clJjakNod1pXSDljaHJ2MjhFZnZydlNnTERvcTYxXy0wTUM0ZjVEaGI5R2dBdkdCLXk1SlBYV2xxdndCZXFsZWFfTkFXWDBHREpXNHNua1FTalNLT0YwX3YtTTRyR1E4QmNDSklGUmZkOXZMNEpLN2VnZVZ1MmpFM2RIak9VRE9aRktKT0pXb3oyTzhrTnVzNVJETnZWQXIwbjQzQlJfb0tNWFZ4WFNnSGozUWlGaUdHUm1tNVR6cjFaWmNRU1NyRkJDeks1bWliOG5NU0t2ZlliOXVkUy1GU0ZUQUViWjRSajNmb2V4WFRtQklyTnN2N3c1U2hpUW5heUN6a0lrU0dUZGRURVVPdnNHNU1qMko1OGhvQmhpZjNPUGxDc1BVX2ltd090QTFKMlppQzBsdFJnMldlV2JpcVRlN0NCQnZlajBVTmIxNVNGZFhId1Q3Q2k3VjhJcGxRQjFZYk8tTzN4blgzaVVTcUlBTG8xWDZZaGs2Q2FSdENZMWhEUWgyby1Yc2FmZkJ5NmdoNk9qaXNmQmVTVWUtOTZxYmM3ME1qaU1ad3J4SXVDdXBjejRBZ0VROUJ3NTk1MDlST21VSnlqT3ItclpmWGk1bkdHUEw1OHR3LXd3MHdmSmYtZFh5Rmc4ejgwbm1tazBUcDJZTnJVYlg0TkcwSTRKdzdGUTNEVS1mcVpJNVZfRmxraVd3bC1MNFdXVVgwZGxBdUlUWnJUaXJDb1VweGNOeUxQUU1WSTdVZnBKTm5JWWRxYWEwQWkzWFVKNl9EeE5VcGhkOUFvdmFiSzdqRkNObU83MUpySzNJWGx1RC1NWTctNkhXeWF6UloyMW9CZE1mQzlvaWRiVWE5TWhKbTdRb1E1bHlWOFV1UUVqa19BSUpQenM1M2o2a1VQLVJrTl9aVjRDendXT25NQnpFVXRaRW9Jd2dLQ0hnV3dVdGhTLWxUOVhhak04OWxreXd2Nk12b1NYS19ZNUt1cDQyRWFWbnBMQmZzblBWVUtTVlNCcldmckN5VWdlNlhPUm9wQThNQjVyYi1vNzNWeEhDWmVYMDVkT19RRG1Dc0thMVlkQzB5SktQY3BDV3dNbmxYZjRyXzIxNENDV2tPQXBFRnRxX3dIR3B1T2ZfRmY3Mkh4WjJ0ZjVLY3hSRllpanUzVG4wSFYtTDZNXzRIVzFBVXdQUkZuZUVkekRqc3hQVnhpMGpSVC1tRXd0SC03WkhpRWRuX2hGOXlySEoyZGtKMXZrdjZrSFdKZ1hUX2plMmhtaERJX3FhVW1DZmlNRzk2V0dqOHpYZnlkc3M0Q2oxNFBCU05ZcmVqS2tJVllaTHJXNmFvRWk4NEVGRmdrY185VFNkYlRKYWFWMFpLRjJxUVAwSVpCYmFoYWRmamRwX3pNMjhfT0lxdGxFdk1KdW9zc0JlRmI2cy1XVFgtSVBvNUgyZWxRbWIwOFNWNVItUGVFMUttc1haS0JWQ0d4Ymx2LU5BNnVMSVIyeUVFa21HSGthcE1JZlMtYjNCMDRJekYzb2sxZlZ1V0JKNWRTVlF5bmFfRmxZVVE0NXl5cnhsUGJLTDVEb3hYcXJ5Um9Ma0QyUkZkTVN1OXhzeEFCTnVYT01YS3UxWUQ0eWtRajR6aG5BV1ZzNVpScGtYVTNHQXJZelBUNVFLWDhNM2NJUGFDNVlzaElUQUxySzUybGcwTGlON2hkNXR5TXRZc3l6MGZxaVdnTlZHUjJ4a2xKUDBNZlNqWVRldTFSTjlTQ0hCdERRT3hWWGZscG5pLUktWEgtOTJLQjAtRzNwVWZXWjRRb1JLaksyV05OVlItclRPeTcyQ0F0NGFPd1lWNlpNeEgyRVFGZXY2dGFTVERnenpjTHVvSDZsN1F6dktBOGxDZXVFakp1OVZLaUtVMlF5RWFMNlhyVGlrMXF3VXJnZGdTcDJBUFVrbFZRREJha1hEeUM1UkFCeUp3MkFHSDQ1Zk5LS1l1SEVWa2hMTDd3Rk9nNGdyZGg0SmVkTTZwTHNuMTFtUTdKVGNwMXNtdTFfT2pYZ1l1cGx0c0tpeXdPNmRWN19VVzFfZDR6bk5zX2xkRnQ4SWRSdHhBSThlTjBFaGIzRmMzWkFXdVhEcU5fTzZlOF9OZ2s2cHhZRzN4T2xrS1Nia3Z3elM0ZEpTd2V5NTdCbXBjQmJ6c1Z4SDhDU3VTcXFIcDhWNENXc05YdEpFX3JiV1JfZUZIc3MtOGt5ajR4ZjlfekplZWUwdklMSW5BRnlkTHhreEZLbmpKYzUxMHBEd0ZHZ3hscFMtbHJ1SUxCTTNXRDNtX2c4VGNQbDd6ZnFsNW5TaC1ubXlSempBbWZQeTktYVZYdWRWLU5hQVNQNDYtQkFZY01yVU5oUEFzQ1RaSWw3V3hRbUpMT19LOElKNkxHWnNoRVR6VFpZcHBURXVXRTJOVi0tX0dRQjF0X3lUZjRzTElXZGpRV3RDQWd1OEJ5LTJnd19Va2JrLVpndDJ4bGQ5WGV2Smk4NUtkNjRuQUFDTXFXV0o3QThGMXhGRjZyZG9xMnB3NEd3Zl9EY2hJbExNdGxqMTRkeG8ybXhaVVo3LUkxOGxWMGtFczI0NUFhc1o5N1VJSkVsRU5NX2FYSXMxeml5dkhvaDNiTXhFMXNCQnJkYXp4Y3J1Q0RxSzU0RTJhYkJPSENtMEtJc1pDNEJESUtZY2g2WDFFaGxSRG5ENWpiYXVZTV9DenlVTzN6LTU2ZTVpUU1FZzFsd3F1ZUhRajk0cjY5UkFvX1lpcVhmYkZsa2tZN1psNDI2RDd4SXZnWWNmWUFidlJITndGRHBPX1JIaXV3RmxXbHRWclVvMjJWMzRBcDJ5dnJHcFNQRWw0R2hHV1BWMVNVSmd1Y0xQMTlpNGFOX0JxUzJLT1V3R25wcUFWNDdGZGktbFdURnhyOVY5ZjNOeDRnZUd5TURqaE5CYzdsSTczejZsT21WREFmOFh1YlcyUkZXV1NidE4zSWVFbTlJZFViaG55QnlRQ2xNbHdaUVh6Qzl4SHZJMml2dXc1ckd5TnNnRmVtZ2JkMjlpbl95QmlUS2dUZGNHdU1hLXNOcndXeGdGczhSRDE5aWs2cUtyc0syZWVyeXA0a2F6c2FjN3pnUTB0LUFNeV8zMERDbU1jaml5UmJvZ1Y4VlRaM0JpRXpDWGJLQV9WQ3pGN21vTnl2TzZRWEFsLURqVE1WcVFTSHc2dHc3UHAtS0dlRDlJT2VEZXpKMm9lZFBaWDhWcUVsaGpBaWNsWDhiaGwtZ3pHS0FTMFlhSnRVcU5KODFSM1NsVjEwUGN3YmVlaDFocWtfX3JmTWJFY3hHeUcwdGM3VnpUU1lSXzVkOXhvWjFVNFZ1cnJUb2FGYTZmMXFJMHBUY1FOTjY4dUI3eElPUl9mLXVieVdObWR2d0dodFp1N0xKTnJ0bVdmZWMzTDdjWmRYNW1LdXM3SHhLUWZBRDBRMmZ2MTBGUzBZWU5NWWpVeVdNcHV3OVNnNWQweVNBQmZ2UVYxNVl5YjZLbnUxM21fZ2ptS0J4TUtTOG1kR3U4ZEdjeUVudm9EVEVtUE5jU3lEVDVmUWluTGI3NG5JenlsV1dnaDZiQUgzekpNeEctWGJndmN0RXdwMGhkeEpwdDBGa2h4UXZxdDB6aGMzdEp5UlNYSlRXQXRvcDR3WFFBbWlpWmp2V3lXdXowUXAzZWZRMk96Ty05LWVzTXo3aGpOQkxfNW4xQUFFeWw4M0pTc010ZHF6MkU1RG00SXpfNjdseXdKX2Q1S0ctWm82OXQ5U0l4Qmlsd294VEl1S1REMkEtTlVQbGZwakFNZzdiZGFjcXlSNldTYm1DUjRCWmZydnVHOEtJNE9iSFhTWGVBZlBSUnZTanZoNU5YVy03SmV3TU9PNU10NHBkSjhST24wd0ltbW02d1Y1NVFpZHZ4NXhBeEZadk1WQ2h4bktieUc4SFJPbnVvbGZJb3hqS2s0bzhBX3lINl9CSXpET0laR1ZVOGFYMG5YYWx1d1loUWxna0c1TUFSYzl0SDBiamhTT1hUTjF2QVVzbmJkMmJsN3ByUHVSRGhlVUVzQUpFQ2ZfSVVCUW9CeVRNbDMtcTE2c2o4dS12UHV0Sk1GUmd0VlhVVWJNR1BwVHd3NG4wendlSDZOSzJ0Nmg0SUd1T3JMQW1xTmtvZ0FLaDRoVldyMFNNcnJrU25uSnZwNk9aWVlsSXJjTWhNdFp6UG9uMkhNaDJZS0xMR0htV1NXZDRtaV81ZFQzLWY1UURCc1ZTMjZaRmpRUWkzMFF2dWNRUlZRTnZTdHFmamtQX3k5MTNaaTF4N0RQME9sd293ZFZUT1BhZVZWbzZ0NE9NSGpxbENMR1NMVUU4LVp0YnVyNEVxN3VIMGlXbndhOXo3UXVDR2JNanl3R1ZVaDIyRE1IUzdCYThsd3dZeEU4c2toY3ZWRnplSXlXNXF0cjZnRWN6LV9YQTlHRGFjYTJRVFEtem1nQ0trem9UNy1QR1hZU0lnNlZxbGdET1lralRtM0plU2o2cVBIaWZZYmNVS0ZzZHo4S3pQU0tybnR0eUFHOV9Yc3BqQ3NZMDhnX0h3UVVBV0NGZWxTNTA2dng3Z09yMzNBeEFtMjMycE9sV09DanVKcHp1ekM1dHl4OUpHTlRleENPNDhmUy1sc29abkNnYjNjZGtJN3ZMUm1MWVNyMUJ1X2phbDdWUkVES0Znb2VxYTBnU1AtcURiRHNZYlMtbHhUT2RwblRsS1dGUERwYjdsVnNHQXVoM01maGl6eXZRMExQdjEyelAtVmlpNlRiaG0xUmFFSnFCTE9CWmQtaFZDZmpIM2I5QXVnYUQtNF9tZy1BT3V4cnZKdlB0MzhJV1Q3dXBPQWpyVE9WcHc0VVY3LmoxX3phM3Yyc0JuaWZhem9qMFZUQlE"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['43148']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '43148'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/restore?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/restore?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/324da9b48a4647c1b1bf2e5d1a28e49d","kid":"https://vaultname.vault.azure.net/keys/cert-name/324da9b48a4647c1b1bf2e5d1a28e49d","sid":"https://vaultname.vault.azure.net/secrets/cert-name/324da9b48a4647c1b1bf2e5d1a28e49d","x5t":"_RinqfVarhtw4EXsyGF07u0-Kto","cer":"MIIDWjCCAkKgAwIBAgIQPNN4zPkaTzCgrm5j+D2PKTANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0ODQ3WhcNMjExMjA2MjM1ODQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPVCj3I/u+4iuwlw4BqZLEfXAeXL7iX+Y03JlIU7I5Qhis7hrk9SvEzUqjFNVHq54rMxngadyjsXUEN7xFsRAxCID6VyGIUL2pRgtM4jWrid6nWKN/+537lsPczmgAmTYRZJEVelmXUTrregCL6gW5FdR1BfzacV+4XkUAEk8T0XzM5WMkRYkFqsuqGh6B8/tz/BurCxmCsDMoA+CITnh4K5nKSFWlEkEdI4bHpTP2mNVX0C/O0Cs42ZOtgBVKrVp65jpl4rHkDMNtBVOP/dpak/Q3w+ntuZWQkDM57VGy9dNAckmIpiGVov/fDxTLJrODc0EqkQzPsBQOprL0DOHbAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFCHuT2L8BOHpD2cCc3XPNwLJF492MB0GA1UdDgQWBBQh7k9i/ATh6Q9nAnN1zzcCyRePdjANBgkqhkiG9w0BAQsFAAOCAQEAE6lf/W3cnmQzyTDWC2Endr6QA+cVLBqA7VRrRwsR0WqrcP0Tmhhye6hDe01P73DnSc9p6bfEcRP+deyxgBTG9hE9DmvY+Ylc9TINLOmqiVpnY6ehfjLRlhOsTRWjrACK//wL+jU8wc1sYUjW/QzeiDnOu6AnbsTsLc0KhRlCBUqNB5L4XdZWAtktFg3VKa0P+DmBciGJfXINHOTFwFgEkb5izeNVO+Vx12+8EwPqk1kkdoLGY/Eq0P6iVVoTncyI/hGwrhiAcQDJRYzRoqLiwOnXj912jbUHOxtjjGdexNUF1gOu1v95yPdn8qyKfhAatH74bO8AWH3ueS8KkY/E/A==","attributes":{"enabled":true,"nbf":1575676127,"exp":1638835127,"created":1575676727,"updated":1575676727,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676720,"updated":1575676720}}}'}
    -    headers: {cache-control: no-cache, content-length: '2280', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:56 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, npwphfv27zygrslti374af3g.vault.azure.net,
    -        /certificates/restore, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/ac1adaee1ebb4c9faf48a1beed498346","kid":"https://vaultname.vault.azure.net/keys/cert-name/ac1adaee1ebb4c9faf48a1beed498346","sid":"https://vaultname.vault.azure.net/secrets/cert-name/ac1adaee1ebb4c9faf48a1beed498346","x5t":"qLxF3hvD102HIr288uwzPnIBLlE","cer":"MIIDWjCCAkKgAwIBAgIQeGxYSNumQ0il07U8vgIpXTANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA2MDAwMDQ3WhcNMjIwMzA2MDAxMDQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQClNtmCx3oZQzoYVW5mkps4t3MMDaCFgzDtvro2U0zfpksFKCt/es2PYVhrkZ0ket7g4sXfgT/nV69bgKaeDqa3y3qjgIiUzFOTq3BctAg/4920Z1+xWt0u9EqzJZIGmNb/enqnFwqL8ymjAurmFttHKRiUMQiMu7rSGn1sZ3izinYuRMh6k9BEdETpvgfuhWRT66/Us+gSkGc1OijDap4Rh0UPkVmvvfzvADuhYIeWb7lw0fPEO9d+gDeH7Gir44IbeimwBPLwl8p1AiyuQJnNyITQ3+1jY23kSsPuPmSlkVmiienL+btuZ9uIDQpd2zOVSDTjxxGpH8nxIaJXunMPAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLAU+8HE/ncF5Yb86YY3hfqEYPiuMB0GA1UdDgQWBBSwFPvBxP53BeWG/OmGN4X6hGD4rjANBgkqhkiG9w0BAQsFAAOCAQEAXKqdQzFnkQes3WiIIUGIZoxGY4hwk/7cfySmYSOx3TSN1KZc4kpX4xCFhwlLdHCB/ycmt1ni3VMaoFnu+TO5Gr6brAcm3qXKpHECv/2eJxxU/EskqhiIDy8XEDMN1cDFiiup1woR2da0AuO2zODjcSsazZgPnt916YWCJlhp3hEfId7u6mcn4sDgaRWrZUkZKHvcdH+Vm7Eh/TUgdfwR/Av4l0Lww80KKzvbq9E0wU8+skzrq2v7TbXF8WxXasQmGAJWhk1Rghp6rL6WWTdjQ85M3H+rtLhXR8moTZfnLJJxnUH5xhB+RsEx5NInJQgUvBMeSecme11wtnUjqy+MCQ==","attributes":{"enabled":true,"nbf":1583452847,"exp":1646525447,"created":1583453447,"updated":1583453447,"recoveryLevel":"Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453413,"updated":1583453413}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2280'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ki6l2kuxwvj3y6cdzuebj5yy.vault.azure.net/certificates/restore?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_crud_operations.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_crud_operations.yaml
    index 755f104d6b1c..3ff139fa7c69 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_crud_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_crud_operations.yaml
    @@ -2,349 +2,838 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:31 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /certificates/cert-name/create, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4U/WgO6xC6nd2lsEd9GNUv/NwfIm50L7bVpI8nE65jtTTp2RwhH0yduFAiqG9SACTpUDsBu+6JX85U1A5Cr5XWeGrtl9D7pTnkS/QMfVBNkxS7ro7VUbcYy5/qLbwe8mLT7Kaql1MnYe9ffYeTyGBZ9LKpqHoseqhoVyetpXp7YqWWrgJz/5bUmvFI25aXiOOZOJa9yNHpWHB0hNHXaveLCE17Vvf4Lr/bzz2Oa0yu2mXgpug47UntMJ91Qz3tKqzTrHnJ/Gpcv6bqgpQ7jpx5O2JFC3480rb2BEpgnMVGy8s0LCzWHuAma9B6U8JKRvxrwZrdEDlQBpbMZ2xQx3EQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBABnnRIp95VNK+TSIo7GyIUUHIw/nroFuFWEZGDxOVjytNQ0qvzvxLpdUrniExG/F/7cp8bnwrOP6ppSfRwaPppPAiranQEGO7zPr9X/FK527sag7swpGjgxq6WUo5/Ig926jgspd9i81mKq7dWc8SKDmM/9J3jQ/QSxQGUX+11aSX8zk17sgsxSB0HM0MQOrWdpzOeU/OqCeC5EDUjCgj/3cDCvRLX12jEfIpGm2zQYalSYDoe3nDjlVj8y9tpy16mM1/HKoHNkoQPc0X3SsK/qcplpNLjKaCepHwgCr+O5VB8lFJ+Ngg+689sZPAIC+sd4FUoN3xeE0rMV9jzasU/Y=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApOWi96NA8ZVLCOKshWVfLP+JSfVY2neNdLKK2I9UHa6AO5m0iSvnqq0YS1HobBw0eOlxYJwR9h5Mc/1IQ7GHienEMKDQeJGC9UvVjxjP3P9GkVBA1QMVpQLxsQ9MBW5Xv8SGDl6PfTLDImUTPItyhI92qkK0RbM+1FDWH6DC1dUL4i/6C7hZXI6ieHdBLQqG1A9bC2nF3MkRB118reEfHp/UPxefyMrJTdYTZkNdZdbVJLLzcgraxbMBzH6vdZd/wirdf+agFduaW2G6UOnP7Dh65Z4rnWuopjDxGuR1BYC2KtF1MJBvapdF+RwyJVemg+JKe60ySPCIg0i74pQtWwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAGbKZRBsQJvCzLvt4f6tfHTmfjee5Hj9xMpaT0Z75aPtyLUBSbKYXgQ98IvaQXtYnzlPkazniVMAoNgBRxiR8wyLw8vFmQW8u9IN8TJ9u2+JFOVrKKmdPhlOGrD5+dj9yqURqy0svUlifCOjX7+0zKn1taypj1oy/vPHsqG/7zznk1dwK8ajsu4DQeEG9onuw8eDYvrHiflF0KtYZa+VjOENZlHtx9O9OYA2NeBsXMp4Jgyq2XSvfm6qhjAz098NnOIQjQW+D5qkjndQJbndyLumtun044FoZ3IYBH13qa6ZJuARjGL7+Q6wMTgWeDjIog7ss/lelg4fFG/tUi06CLs=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"4448800bf6d243488b770ccf9dbaecfb"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"53be2af888ca40cbb877effb0b2566c8"}'
         headers:
           cache-control: no-cache
           content-length: '1343'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:32 GMT
    +      date: Fri, 06 Mar 2020 00:08:48 GMT
           expires: '-1'
    -      location: [h, t, t, p, s, ':', /, /, n, t, z, j, a, g, '5', '7', k, y, f, f,
    -        c, v, b, '6', v, h, u, i, t, '7', g, g, ., v, a, u, l, t, ., a, z, u, r, e,
    -        ., n, e, t, /, c, e, r, t, i, f, i, c, a, t, e, s, /, c, e, r, t, '-', n,
    -        a, m, e, /, p, e, n, d, i, n, g, '?', a, p, i, '-', v, e, r, s, i, o, n, '=',
    -        '7', ., '0', '&', r, e, q, u, e, s, t, _, i, d, '=', '4', '4', '4', '8', '8',
    -        '0', '0', b, f, '6', d, '2', '4', '3', '4', '8', '8', b, '7', '7', '0', c,
    -        c, f, '9', d, b, a, e, c, f, b]
    +      location:
    +      - h
    +      - t
    +      - t
    +      - p
    +      - s
    +      - ':'
    +      - /
    +      - /
    +      - h
    +      - p
    +      - d
    +      - y
    +      - o
    +      - '6'
    +      - s
    +      - e
    +      - e
    +      - '7'
    +      - v
    +      - y
    +      - t
    +      - s
    +      - n
    +      - a
    +      - '5'
    +      - s
    +      - p
    +      - j
    +      - q
    +      - s
    +      - h
    +      - f
    +      - .
    +      - v
    +      - a
    +      - u
    +      - l
    +      - t
    +      - .
    +      - a
    +      - z
    +      - u
    +      - r
    +      - e
    +      - .
    +      - n
    +      - e
    +      - t
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - s
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - '-'
    +      - n
    +      - a
    +      - m
    +      - e
    +      - /
    +      - p
    +      - e
    +      - n
    +      - d
    +      - i
    +      - n
    +      - g
    +      - '?'
    +      - a
    +      - p
    +      - i
    +      - '-'
    +      - v
    +      - e
    +      - r
    +      - s
    +      - i
    +      - o
    +      - n
    +      - '='
    +      - '7'
    +      - .
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
    +      - '&'
    +      - r
    +      - e
    +      - q
    +      - u
    +      - e
    +      - s
    +      - t
    +      - _
    +      - i
    +      - d
    +      - '='
    +      - '5'
    +      - '3'
    +      - b
    +      - e
    +      - '2'
    +      - a
    +      - f
    +      - '8'
    +      - '8'
    +      - '8'
    +      - c
    +      - a
    +      - '4'
    +      - '0'
    +      - c
    +      - b
    +      - b
    +      - '8'
    +      - '7'
    +      - '7'
    +      - e
    +      - f
    +      - f
    +      - b
    +      - '0'
    +      - b
    +      - '2'
    +      - '5'
    +      - '6'
    +      - '6'
    +      - c
    +      - '8'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
    -    status: {code: 202, message: Accepted}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /certificates/cert-name/create, api-version=7.0, '']
    +    status:
    +      code: 202
    +      message: Accepted
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4U/WgO6xC6nd2lsEd9GNUv/NwfIm50L7bVpI8nE65jtTTp2RwhH0yduFAiqG9SACTpUDsBu+6JX85U1A5Cr5XWeGrtl9D7pTnkS/QMfVBNkxS7ro7VUbcYy5/qLbwe8mLT7Kaql1MnYe9ffYeTyGBZ9LKpqHoseqhoVyetpXp7YqWWrgJz/5bUmvFI25aXiOOZOJa9yNHpWHB0hNHXaveLCE17Vvf4Lr/bzz2Oa0yu2mXgpug47UntMJ91Qz3tKqzTrHnJ/Gpcv6bqgpQ7jpx5O2JFC3480rb2BEpgnMVGy8s0LCzWHuAma9B6U8JKRvxrwZrdEDlQBpbMZ2xQx3EQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBABnnRIp95VNK+TSIo7GyIUUHIw/nroFuFWEZGDxOVjytNQ0qvzvxLpdUrniExG/F/7cp8bnwrOP6ppSfRwaPppPAiranQEGO7zPr9X/FK527sag7swpGjgxq6WUo5/Ig926jgspd9i81mKq7dWc8SKDmM/9J3jQ/QSxQGUX+11aSX8zk17sgsxSB0HM0MQOrWdpzOeU/OqCeC5EDUjCgj/3cDCvRLX12jEfIpGm2zQYalSYDoe3nDjlVj8y9tpy16mM1/HKoHNkoQPc0X3SsK/qcplpNLjKaCepHwgCr+O5VB8lFJ+Ngg+689sZPAIC+sd4FUoN3xeE0rMV9jzasU/Y=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApOWi96NA8ZVLCOKshWVfLP+JSfVY2neNdLKK2I9UHa6AO5m0iSvnqq0YS1HobBw0eOlxYJwR9h5Mc/1IQ7GHienEMKDQeJGC9UvVjxjP3P9GkVBA1QMVpQLxsQ9MBW5Xv8SGDl6PfTLDImUTPItyhI92qkK0RbM+1FDWH6DC1dUL4i/6C7hZXI6ieHdBLQqG1A9bC2nF3MkRB118reEfHp/UPxefyMrJTdYTZkNdZdbVJLLzcgraxbMBzH6vdZd/wirdf+agFduaW2G6UOnP7Dh65Z4rnWuopjDxGuR1BYC2KtF1MJBvapdF+RwyJVemg+JKe60ySPCIg0i74pQtWwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAGbKZRBsQJvCzLvt4f6tfHTmfjee5Hj9xMpaT0Z75aPtyLUBSbKYXgQ98IvaQXtYnzlPkazniVMAoNgBRxiR8wyLw8vFmQW8u9IN8TJ9u2+JFOVrKKmdPhlOGrD5+dj9yqURqy0svUlifCOjX7+0zKn1taypj1oy/vPHsqG/7zznk1dwK8ajsu4DQeEG9onuw8eDYvrHiflF0KtYZa+VjOENZlHtx9O9OYA2NeBsXMp4Jgyq2XSvfm6qhjAz098NnOIQjQW+D5qkjndQJbndyLumtun044FoZ3IYBH13qa6ZJuARjGL7+Q6wMTgWeDjIog7ss/lelg4fFG/tUi06CLs=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"4448800bf6d243488b770ccf9dbaecfb"}'}
    -    headers: {cache-control: no-cache, content-length: '1343', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /certificates/cert-name/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"53be2af888ca40cbb877effb0b2566c8"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1343'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4U/WgO6xC6nd2lsEd9GNUv/NwfIm50L7bVpI8nE65jtTTp2RwhH0yduFAiqG9SACTpUDsBu+6JX85U1A5Cr5XWeGrtl9D7pTnkS/QMfVBNkxS7ro7VUbcYy5/qLbwe8mLT7Kaql1MnYe9ffYeTyGBZ9LKpqHoseqhoVyetpXp7YqWWrgJz/5bUmvFI25aXiOOZOJa9yNHpWHB0hNHXaveLCE17Vvf4Lr/bzz2Oa0yu2mXgpug47UntMJ91Qz3tKqzTrHnJ/Gpcv6bqgpQ7jpx5O2JFC3480rb2BEpgnMVGy8s0LCzWHuAma9B6U8JKRvxrwZrdEDlQBpbMZ2xQx3EQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBABnnRIp95VNK+TSIo7GyIUUHIw/nroFuFWEZGDxOVjytNQ0qvzvxLpdUrniExG/F/7cp8bnwrOP6ppSfRwaPppPAiranQEGO7zPr9X/FK527sag7swpGjgxq6WUo5/Ig926jgspd9i81mKq7dWc8SKDmM/9J3jQ/QSxQGUX+11aSX8zk17sgsxSB0HM0MQOrWdpzOeU/OqCeC5EDUjCgj/3cDCvRLX12jEfIpGm2zQYalSYDoe3nDjlVj8y9tpy16mM1/HKoHNkoQPc0X3SsK/qcplpNLjKaCepHwgCr+O5VB8lFJ+Ngg+689sZPAIC+sd4FUoN3xeE0rMV9jzasU/Y=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApOWi96NA8ZVLCOKshWVfLP+JSfVY2neNdLKK2I9UHa6AO5m0iSvnqq0YS1HobBw0eOlxYJwR9h5Mc/1IQ7GHienEMKDQeJGC9UvVjxjP3P9GkVBA1QMVpQLxsQ9MBW5Xv8SGDl6PfTLDImUTPItyhI92qkK0RbM+1FDWH6DC1dUL4i/6C7hZXI6ieHdBLQqG1A9bC2nF3MkRB118reEfHp/UPxefyMrJTdYTZkNdZdbVJLLzcgraxbMBzH6vdZd/wirdf+agFduaW2G6UOnP7Dh65Z4rnWuopjDxGuR1BYC2KtF1MJBvapdF+RwyJVemg+JKe60ySPCIg0i74pQtWwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAGbKZRBsQJvCzLvt4f6tfHTmfjee5Hj9xMpaT0Z75aPtyLUBSbKYXgQ98IvaQXtYnzlPkazniVMAoNgBRxiR8wyLw8vFmQW8u9IN8TJ9u2+JFOVrKKmdPhlOGrD5+dj9yqURqy0svUlifCOjX7+0zKn1taypj1oy/vPHsqG/7zznk1dwK8ajsu4DQeEG9onuw8eDYvrHiflF0KtYZa+VjOENZlHtx9O9OYA2NeBsXMp4Jgyq2XSvfm6qhjAz098NnOIQjQW+D5qkjndQJbndyLumtun044FoZ3IYBH13qa6ZJuARjGL7+Q6wMTgWeDjIog7ss/lelg4fFG/tUi06CLs=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"4448800bf6d243488b770ccf9dbaecfb"}'}
    -    headers: {cache-control: no-cache, content-length: '1343', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /certificates/cert-name/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"53be2af888ca40cbb877effb0b2566c8"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1343'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4U/WgO6xC6nd2lsEd9GNUv/NwfIm50L7bVpI8nE65jtTTp2RwhH0yduFAiqG9SACTpUDsBu+6JX85U1A5Cr5XWeGrtl9D7pTnkS/QMfVBNkxS7ro7VUbcYy5/qLbwe8mLT7Kaql1MnYe9ffYeTyGBZ9LKpqHoseqhoVyetpXp7YqWWrgJz/5bUmvFI25aXiOOZOJa9yNHpWHB0hNHXaveLCE17Vvf4Lr/bzz2Oa0yu2mXgpug47UntMJ91Qz3tKqzTrHnJ/Gpcv6bqgpQ7jpx5O2JFC3480rb2BEpgnMVGy8s0LCzWHuAma9B6U8JKRvxrwZrdEDlQBpbMZ2xQx3EQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBABnnRIp95VNK+TSIo7GyIUUHIw/nroFuFWEZGDxOVjytNQ0qvzvxLpdUrniExG/F/7cp8bnwrOP6ppSfRwaPppPAiranQEGO7zPr9X/FK527sag7swpGjgxq6WUo5/Ig926jgspd9i81mKq7dWc8SKDmM/9J3jQ/QSxQGUX+11aSX8zk17sgsxSB0HM0MQOrWdpzOeU/OqCeC5EDUjCgj/3cDCvRLX12jEfIpGm2zQYalSYDoe3nDjlVj8y9tpy16mM1/HKoHNkoQPc0X3SsK/qcplpNLjKaCepHwgCr+O5VB8lFJ+Ngg+689sZPAIC+sd4FUoN3xeE0rMV9jzasU/Y=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert-name","request_id":"4448800bf6d243488b770ccf9dbaecfb"}'}
    -    headers: {cache-control: no-cache, content-length: '1261', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:53 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /certificates/cert-name/pending, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApOWi96NA8ZVLCOKshWVfLP+JSfVY2neNdLKK2I9UHa6AO5m0iSvnqq0YS1HobBw0eOlxYJwR9h5Mc/1IQ7GHienEMKDQeJGC9UvVjxjP3P9GkVBA1QMVpQLxsQ9MBW5Xv8SGDl6PfTLDImUTPItyhI92qkK0RbM+1FDWH6DC1dUL4i/6C7hZXI6ieHdBLQqG1A9bC2nF3MkRB118reEfHp/UPxefyMrJTdYTZkNdZdbVJLLzcgraxbMBzH6vdZd/wirdf+agFduaW2G6UOnP7Dh65Z4rnWuopjDxGuR1BYC2KtF1MJBvapdF+RwyJVemg+JKe60ySPCIg0i74pQtWwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAGbKZRBsQJvCzLvt4f6tfHTmfjee5Hj9xMpaT0Z75aPtyLUBSbKYXgQ98IvaQXtYnzlPkazniVMAoNgBRxiR8wyLw8vFmQW8u9IN8TJ9u2+JFOVrKKmdPhlOGrD5+dj9yqURqy0svUlifCOjX7+0zKn1taypj1oy/vPHsqG/7zznk1dwK8ajsu4DQeEG9onuw8eDYvrHiflF0KtYZa+VjOENZlHtx9O9OYA2NeBsXMp4Jgyq2XSvfm6qhjAz098NnOIQjQW+D5qkjndQJbndyLumtun044FoZ3IYBH13qa6ZJuARjGL7+Q6wMTgWeDjIog7ss/lelg4fFG/tUi06CLs=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert-name","request_id":"53be2af888ca40cbb877effb0b2566c8"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1261'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/caba64cfda9a4fdebdd270c043e0f075","kid":"https://vaultname.vault.azure.net/keys/cert-name/caba64cfda9a4fdebdd270c043e0f075","sid":"https://vaultname.vault.azure.net/secrets/cert-name/caba64cfda9a4fdebdd270c043e0f075","x5t":"qKqbaMBVJry4_zHGwpQzsLHsfgs","cer":"MIIDWjCCAkKgAwIBAgIQAXs1rveFTl+ONCam93EpITANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0OTQ3WhcNMjExMjA2MjM1OTQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhT9aA7rELqd3aWwR30Y1S/83B8ibnQvttWkjycTrmO1NOnZHCEfTJ24UCKob1IAJOlQOwG77olfzlTUDkKvldZ4au2X0PulOeRL9Ax9UE2TFLuujtVRtxjLn+otvB7yYtPspqqXUydh7199h5PIYFn0sqmoeix6qGhXJ62lentipZauAnP/ltSa8UjblpeI45k4lr3I0elYcHSE0ddq94sITXtW9/guv9vPPY5rTK7aZeCm6DjtSe0wn3VDPe0qrNOsecn8aly/puqClDuOnHk7YkULfjzStvYESmCcxUbLyzQsLNYe4CZr0HpTwkpG/GvBmt0QOVAGlsxnbFDHcRAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFPmZszjVzP57uDIKa0XiQulfQg6HMB0GA1UdDgQWBBT5mbM41cz+e7gyCmtF4kLpX0IOhzANBgkqhkiG9w0BAQsFAAOCAQEATpE3XFTpYs+Nc4fa2OQJf4sw4HoKpYWP8gyzvmUic/hSCbNNOqWn7R+BPBpm/i7KFCApPQRaLkjTv/kCMgd8GWTg9Bx7ud6yAi4+P++up6eqBnBco3FZjDsB+4LVRQSu3iXIO388EIfpx5QlvJ5aHyrOIzCpLSkf/Spk9/a6DcuYoVPnwylNLSDs1zQI55v1YYKx3UAUIvHW3CnQ+FBteMKwnXidGZjQumKqCKB7tetopZUxPSGMZfbXT+4w6ezUCwUnQAr2snoxKpfIGqBukiMPJVWun2a4ZiCZkA72xIPPB3yOGAqoLZU21dW6GWNQGJ0m/WoJOMjZguF3Qzu/Rw==","attributes":{"enabled":true,"nbf":1575676187,"exp":1638835187,"created":1575676787,"updated":1575676787,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676773,"updated":1575676773}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2434', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/f875c3fd78f7418dadb4d138f4a571de","kid":"https://vaultname.vault.azure.net/keys/cert-name/f875c3fd78f7418dadb4d138f4a571de","sid":"https://vaultname.vault.azure.net/secrets/cert-name/f875c3fd78f7418dadb4d138f4a571de","x5t":"epClt1O0gXruWdK2haNNBPlnCd8","cer":"MIIDWjCCAkKgAwIBAgIQbtG688m6RReY95eDhFAo8zANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTA0WhcNMjIwMzA2MDAwOTA0WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCk5aL3o0DxlUsI4qyFZV8s/4lJ9Vjad410sorYj1QdroA7mbSJK+eqrRhLUehsHDR46XFgnBH2Hkxz/UhDsYeJ6cQwoNB4kYL1S9WPGM/c/0aRUEDVAxWlAvGxD0wFble/xIYOXo99MsMiZRM8i3KEj3aqQrRFsz7UUNYfoMLV1QviL/oLuFlcjqJ4d0EtCobUD1sLacXcyREHXXyt4R8en9Q/F5/IyslN1hNmQ11l1tUksvNyCtrFswHMfq91l3/CKt1/5qAV25pbYbpQ6c/sOHrlniuda6imMPEa5HUFgLYq0XUwkG9ql0X5HDIlV6aD4kp7rTJI8IiDSLvilC1bAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFGsJ+hfvic9UPDQg9ePOSnZAGfTuMB0GA1UdDgQWBBRrCfoX74nPVDw0IPXjzkp2QBn07jANBgkqhkiG9w0BAQsFAAOCAQEATvhsUV9mXzK5OGPztwHKle9zvxsUGdI1W6l40OcD1ky+kIenyM9R/WEIdBSCF26Ky7jKfsUuUtbMy4f3EoOGJVKXLkxtQ/JmJDN0San9xVATz5Pwnjj7BR1pHJLsyaow7T4K9LrvEjamjQ604nmWUybwbItrneHkzMF3gXarTSdz/FeqR9tctf79zUKhz4c1PkgyM/YvCS5WQGaf+RM174JyTnTHNalo7ftE3CIF92yXoSwYMjsZ/4WMGdny4bNVQ+5IBAgSFri9rph+GsYYAsWv9dy88uWMiBDZmjxZGtgXPCF02dD4Bxr+8DEuClhQJJloo7kCif/YOyBv405LFg==","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453344,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453328,"updated":1583453328}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2434'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/caba64cfda9a4fdebdd270c043e0f075","kid":"https://vaultname.vault.azure.net/keys/cert-name/caba64cfda9a4fdebdd270c043e0f075","sid":"https://vaultname.vault.azure.net/secrets/cert-name/caba64cfda9a4fdebdd270c043e0f075","x5t":"qKqbaMBVJry4_zHGwpQzsLHsfgs","cer":"MIIDWjCCAkKgAwIBAgIQAXs1rveFTl+ONCam93EpITANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0OTQ3WhcNMjExMjA2MjM1OTQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhT9aA7rELqd3aWwR30Y1S/83B8ibnQvttWkjycTrmO1NOnZHCEfTJ24UCKob1IAJOlQOwG77olfzlTUDkKvldZ4au2X0PulOeRL9Ax9UE2TFLuujtVRtxjLn+otvB7yYtPspqqXUydh7199h5PIYFn0sqmoeix6qGhXJ62lentipZauAnP/ltSa8UjblpeI45k4lr3I0elYcHSE0ddq94sITXtW9/guv9vPPY5rTK7aZeCm6DjtSe0wn3VDPe0qrNOsecn8aly/puqClDuOnHk7YkULfjzStvYESmCcxUbLyzQsLNYe4CZr0HpTwkpG/GvBmt0QOVAGlsxnbFDHcRAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFPmZszjVzP57uDIKa0XiQulfQg6HMB0GA1UdDgQWBBT5mbM41cz+e7gyCmtF4kLpX0IOhzANBgkqhkiG9w0BAQsFAAOCAQEATpE3XFTpYs+Nc4fa2OQJf4sw4HoKpYWP8gyzvmUic/hSCbNNOqWn7R+BPBpm/i7KFCApPQRaLkjTv/kCMgd8GWTg9Bx7ud6yAi4+P++up6eqBnBco3FZjDsB+4LVRQSu3iXIO388EIfpx5QlvJ5aHyrOIzCpLSkf/Spk9/a6DcuYoVPnwylNLSDs1zQI55v1YYKx3UAUIvHW3CnQ+FBteMKwnXidGZjQumKqCKB7tetopZUxPSGMZfbXT+4w6ezUCwUnQAr2snoxKpfIGqBukiMPJVWun2a4ZiCZkA72xIPPB3yOGAqoLZU21dW6GWNQGJ0m/WoJOMjZguF3Qzu/Rw==","attributes":{"enabled":true,"nbf":1575676187,"exp":1638835187,"created":1575676787,"updated":1575676787,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676773,"updated":1575676773}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2434', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/f875c3fd78f7418dadb4d138f4a571de","kid":"https://vaultname.vault.azure.net/keys/cert-name/f875c3fd78f7418dadb4d138f4a571de","sid":"https://vaultname.vault.azure.net/secrets/cert-name/f875c3fd78f7418dadb4d138f4a571de","x5t":"epClt1O0gXruWdK2haNNBPlnCd8","cer":"MIIDWjCCAkKgAwIBAgIQbtG688m6RReY95eDhFAo8zANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTA0WhcNMjIwMzA2MDAwOTA0WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCk5aL3o0DxlUsI4qyFZV8s/4lJ9Vjad410sorYj1QdroA7mbSJK+eqrRhLUehsHDR46XFgnBH2Hkxz/UhDsYeJ6cQwoNB4kYL1S9WPGM/c/0aRUEDVAxWlAvGxD0wFble/xIYOXo99MsMiZRM8i3KEj3aqQrRFsz7UUNYfoMLV1QviL/oLuFlcjqJ4d0EtCobUD1sLacXcyREHXXyt4R8en9Q/F5/IyslN1hNmQ11l1tUksvNyCtrFswHMfq91l3/CKt1/5qAV25pbYbpQ6c/sOHrlniuda6imMPEa5HUFgLYq0XUwkG9ql0X5HDIlV6aD4kp7rTJI8IiDSLvilC1bAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFGsJ+hfvic9UPDQg9ePOSnZAGfTuMB0GA1UdDgQWBBRrCfoX74nPVDw0IPXjzkp2QBn07jANBgkqhkiG9w0BAQsFAAOCAQEATvhsUV9mXzK5OGPztwHKle9zvxsUGdI1W6l40OcD1ky+kIenyM9R/WEIdBSCF26Ky7jKfsUuUtbMy4f3EoOGJVKXLkxtQ/JmJDN0San9xVATz5Pwnjj7BR1pHJLsyaow7T4K9LrvEjamjQ604nmWUybwbItrneHkzMF3gXarTSdz/FeqR9tctf79zUKhz4c1PkgyM/YvCS5WQGaf+RM174JyTnTHNalo7ftE3CIF92yXoSwYMjsZ/4WMGdny4bNVQ+5IBAgSFri9rph+GsYYAsWv9dy88uWMiBDZmjxZGtgXPCF02dD4Bxr+8DEuClhQJJloo7kCif/YOyBv405LFg==","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453344,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453328,"updated":1583453328}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2434'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: '{"tags": {"foo": "updated tag"}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['32']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '32'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/caba64cfda9a4fdebdd270c043e0f075","kid":"https://vaultname.vault.azure.net/keys/cert-name/caba64cfda9a4fdebdd270c043e0f075","sid":"https://vaultname.vault.azure.net/secrets/cert-name/caba64cfda9a4fdebdd270c043e0f075","x5t":"qKqbaMBVJry4_zHGwpQzsLHsfgs","cer":"MIIDWjCCAkKgAwIBAgIQAXs1rveFTl+ONCam93EpITANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0OTQ3WhcNMjExMjA2MjM1OTQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhT9aA7rELqd3aWwR30Y1S/83B8ibnQvttWkjycTrmO1NOnZHCEfTJ24UCKob1IAJOlQOwG77olfzlTUDkKvldZ4au2X0PulOeRL9Ax9UE2TFLuujtVRtxjLn+otvB7yYtPspqqXUydh7199h5PIYFn0sqmoeix6qGhXJ62lentipZauAnP/ltSa8UjblpeI45k4lr3I0elYcHSE0ddq94sITXtW9/guv9vPPY5rTK7aZeCm6DjtSe0wn3VDPe0qrNOsecn8aly/puqClDuOnHk7YkULfjzStvYESmCcxUbLyzQsLNYe4CZr0HpTwkpG/GvBmt0QOVAGlsxnbFDHcRAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFPmZszjVzP57uDIKa0XiQulfQg6HMB0GA1UdDgQWBBT5mbM41cz+e7gyCmtF4kLpX0IOhzANBgkqhkiG9w0BAQsFAAOCAQEATpE3XFTpYs+Nc4fa2OQJf4sw4HoKpYWP8gyzvmUic/hSCbNNOqWn7R+BPBpm/i7KFCApPQRaLkjTv/kCMgd8GWTg9Bx7ud6yAi4+P++up6eqBnBco3FZjDsB+4LVRQSu3iXIO388EIfpx5QlvJ5aHyrOIzCpLSkf/Spk9/a6DcuYoVPnwylNLSDs1zQI55v1YYKx3UAUIvHW3CnQ+FBteMKwnXidGZjQumKqCKB7tetopZUxPSGMZfbXT+4w6ezUCwUnQAr2snoxKpfIGqBukiMPJVWun2a4ZiCZkA72xIPPB3yOGAqoLZU21dW6GWNQGJ0m/WoJOMjZguF3Qzu/Rw==","attributes":{"enabled":true,"nbf":1575676187,"exp":1638835187,"created":1575676787,"updated":1575676798,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    -        tag"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676773,"updated":1575676773}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2463', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/f875c3fd78f7418dadb4d138f4a571de","kid":"https://vaultname.vault.azure.net/keys/cert-name/f875c3fd78f7418dadb4d138f4a571de","sid":"https://vaultname.vault.azure.net/secrets/cert-name/f875c3fd78f7418dadb4d138f4a571de","x5t":"epClt1O0gXruWdK2haNNBPlnCd8","cer":"MIIDWjCCAkKgAwIBAgIQbtG688m6RReY95eDhFAo8zANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTA0WhcNMjIwMzA2MDAwOTA0WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCk5aL3o0DxlUsI4qyFZV8s/4lJ9Vjad410sorYj1QdroA7mbSJK+eqrRhLUehsHDR46XFgnBH2Hkxz/UhDsYeJ6cQwoNB4kYL1S9WPGM/c/0aRUEDVAxWlAvGxD0wFble/xIYOXo99MsMiZRM8i3KEj3aqQrRFsz7UUNYfoMLV1QviL/oLuFlcjqJ4d0EtCobUD1sLacXcyREHXXyt4R8en9Q/F5/IyslN1hNmQ11l1tUksvNyCtrFswHMfq91l3/CKt1/5qAV25pbYbpQ6c/sOHrlniuda6imMPEa5HUFgLYq0XUwkG9ql0X5HDIlV6aD4kp7rTJI8IiDSLvilC1bAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFGsJ+hfvic9UPDQg9ePOSnZAGfTuMB0GA1UdDgQWBBRrCfoX74nPVDw0IPXjzkp2QBn07jANBgkqhkiG9w0BAQsFAAOCAQEATvhsUV9mXzK5OGPztwHKle9zvxsUGdI1W6l40OcD1ky+kIenyM9R/WEIdBSCF26Ky7jKfsUuUtbMy4f3EoOGJVKXLkxtQ/JmJDN0San9xVATz5Pwnjj7BR1pHJLsyaow7T4K9LrvEjamjQ604nmWUybwbItrneHkzMF3gXarTSdz/FeqR9tctf79zUKhz4c1PkgyM/YvCS5WQGaf+RM174JyTnTHNalo7ftE3CIF92yXoSwYMjsZ/4WMGdny4bNVQ+5IBAgSFri9rph+GsYYAsWv9dy88uWMiBDZmjxZGtgXPCF02dD4Bxr+8DEuClhQJJloo7kCif/YOyBv405LFg==","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453349,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453328,"updated":1583453328}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2463'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1575676798,"scheduledPurgeDate":1583452798,"id":"https://vaultname.vault.azure.net/certificates/cert-name/caba64cfda9a4fdebdd270c043e0f075","kid":"https://vaultname.vault.azure.net/keys/cert-name/caba64cfda9a4fdebdd270c043e0f075","sid":"https://vaultname.vault.azure.net/secrets/cert-name/caba64cfda9a4fdebdd270c043e0f075","x5t":"qKqbaMBVJry4_zHGwpQzsLHsfgs","cer":"MIIDWjCCAkKgAwIBAgIQAXs1rveFTl+ONCam93EpITANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0OTQ3WhcNMjExMjA2MjM1OTQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhT9aA7rELqd3aWwR30Y1S/83B8ibnQvttWkjycTrmO1NOnZHCEfTJ24UCKob1IAJOlQOwG77olfzlTUDkKvldZ4au2X0PulOeRL9Ax9UE2TFLuujtVRtxjLn+otvB7yYtPspqqXUydh7199h5PIYFn0sqmoeix6qGhXJ62lentipZauAnP/ltSa8UjblpeI45k4lr3I0elYcHSE0ddq94sITXtW9/guv9vPPY5rTK7aZeCm6DjtSe0wn3VDPe0qrNOsecn8aly/puqClDuOnHk7YkULfjzStvYESmCcxUbLyzQsLNYe4CZr0HpTwkpG/GvBmt0QOVAGlsxnbFDHcRAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFPmZszjVzP57uDIKa0XiQulfQg6HMB0GA1UdDgQWBBT5mbM41cz+e7gyCmtF4kLpX0IOhzANBgkqhkiG9w0BAQsFAAOCAQEATpE3XFTpYs+Nc4fa2OQJf4sw4HoKpYWP8gyzvmUic/hSCbNNOqWn7R+BPBpm/i7KFCApPQRaLkjTv/kCMgd8GWTg9Bx7ud6yAi4+P++up6eqBnBco3FZjDsB+4LVRQSu3iXIO388EIfpx5QlvJ5aHyrOIzCpLSkf/Spk9/a6DcuYoVPnwylNLSDs1zQI55v1YYKx3UAUIvHW3CnQ+FBteMKwnXidGZjQumKqCKB7tetopZUxPSGMZfbXT+4w6ezUCwUnQAr2snoxKpfIGqBukiMPJVWun2a4ZiCZkA72xIPPB3yOGAqoLZU21dW6GWNQGJ0m/WoJOMjZguF3Qzu/Rw==","attributes":{"enabled":true,"nbf":1575676187,"exp":1638835187,"created":1575676787,"updated":1575676798,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    -        tag"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676773,"updated":1575676773}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2614', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /certificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1583453349,"scheduledPurgeDate":1591229349,"id":"https://vaultname.vault.azure.net/certificates/cert-name/f875c3fd78f7418dadb4d138f4a571de","kid":"https://vaultname.vault.azure.net/keys/cert-name/f875c3fd78f7418dadb4d138f4a571de","sid":"https://vaultname.vault.azure.net/secrets/cert-name/f875c3fd78f7418dadb4d138f4a571de","x5t":"epClt1O0gXruWdK2haNNBPlnCd8","cer":"MIIDWjCCAkKgAwIBAgIQbtG688m6RReY95eDhFAo8zANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTA0WhcNMjIwMzA2MDAwOTA0WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCk5aL3o0DxlUsI4qyFZV8s/4lJ9Vjad410sorYj1QdroA7mbSJK+eqrRhLUehsHDR46XFgnBH2Hkxz/UhDsYeJ6cQwoNB4kYL1S9WPGM/c/0aRUEDVAxWlAvGxD0wFble/xIYOXo99MsMiZRM8i3KEj3aqQrRFsz7UUNYfoMLV1QviL/oLuFlcjqJ4d0EtCobUD1sLacXcyREHXXyt4R8en9Q/F5/IyslN1hNmQ11l1tUksvNyCtrFswHMfq91l3/CKt1/5qAV25pbYbpQ6c/sOHrlniuda6imMPEa5HUFgLYq0XUwkG9ql0X5HDIlV6aD4kp7rTJI8IiDSLvilC1bAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFGsJ+hfvic9UPDQg9ePOSnZAGfTuMB0GA1UdDgQWBBRrCfoX74nPVDw0IPXjzkp2QBn07jANBgkqhkiG9w0BAQsFAAOCAQEATvhsUV9mXzK5OGPztwHKle9zvxsUGdI1W6l40OcD1ky+kIenyM9R/WEIdBSCF26Ky7jKfsUuUtbMy4f3EoOGJVKXLkxtQ/JmJDN0San9xVATz5Pwnjj7BR1pHJLsyaow7T4K9LrvEjamjQ604nmWUybwbItrneHkzMF3gXarTSdz/FeqR9tctf79zUKhz4c1PkgyM/YvCS5WQGaf+RM174JyTnTHNalo7ftE3CIF92yXoSwYMjsZ/4WMGdny4bNVQ+5IBAgSFri9rph+GsYYAsWv9dy88uWMiBDZmjxZGtgXPCF02dD4Bxr+8DEuClhQJJloo7kCif/YOyBv405LFg==","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453349,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453328,"updated":1583453328}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2614'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/certificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:06 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:17 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:19 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:08 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1575676798,"scheduledPurgeDate":1583452798,"id":"https://vaultname.vault.azure.net/certificates/cert-name/caba64cfda9a4fdebdd270c043e0f075","kid":"https://vaultname.vault.azure.net/keys/cert-name/caba64cfda9a4fdebdd270c043e0f075","sid":"https://vaultname.vault.azure.net/secrets/cert-name/caba64cfda9a4fdebdd270c043e0f075","x5t":"qKqbaMBVJry4_zHGwpQzsLHsfgs","cer":"MIIDWjCCAkKgAwIBAgIQAXs1rveFTl+ONCam93EpITANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0OTQ3WhcNMjExMjA2MjM1OTQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhT9aA7rELqd3aWwR30Y1S/83B8ibnQvttWkjycTrmO1NOnZHCEfTJ24UCKob1IAJOlQOwG77olfzlTUDkKvldZ4au2X0PulOeRL9Ax9UE2TFLuujtVRtxjLn+otvB7yYtPspqqXUydh7199h5PIYFn0sqmoeix6qGhXJ62lentipZauAnP/ltSa8UjblpeI45k4lr3I0elYcHSE0ddq94sITXtW9/guv9vPPY5rTK7aZeCm6DjtSe0wn3VDPe0qrNOsecn8aly/puqClDuOnHk7YkULfjzStvYESmCcxUbLyzQsLNYe4CZr0HpTwkpG/GvBmt0QOVAGlsxnbFDHcRAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFPmZszjVzP57uDIKa0XiQulfQg6HMB0GA1UdDgQWBBT5mbM41cz+e7gyCmtF4kLpX0IOhzANBgkqhkiG9w0BAQsFAAOCAQEATpE3XFTpYs+Nc4fa2OQJf4sw4HoKpYWP8gyzvmUic/hSCbNNOqWn7R+BPBpm/i7KFCApPQRaLkjTv/kCMgd8GWTg9Bx7ud6yAi4+P++up6eqBnBco3FZjDsB+4LVRQSu3iXIO388EIfpx5QlvJ5aHyrOIzCpLSkf/Spk9/a6DcuYoVPnwylNLSDs1zQI55v1YYKx3UAUIvHW3CnQ+FBteMKwnXidGZjQumKqCKB7tetopZUxPSGMZfbXT+4w6ezUCwUnQAr2snoxKpfIGqBukiMPJVWun2a4ZiCZkA72xIPPB3yOGAqoLZU21dW6GWNQGJ0m/WoJOMjZguF3Qzu/Rw==","attributes":{"enabled":true,"nbf":1575676187,"exp":1638835187,"created":1575676787,"updated":1575676798,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    -        tag"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676773,"updated":1575676773}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2614', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ntzjag57kyffcvb6vhuit7gg.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1583453349,"scheduledPurgeDate":1591229349,"id":"https://vaultname.vault.azure.net/certificates/cert-name/f875c3fd78f7418dadb4d138f4a571de","kid":"https://vaultname.vault.azure.net/keys/cert-name/f875c3fd78f7418dadb4d138f4a571de","sid":"https://vaultname.vault.azure.net/secrets/cert-name/f875c3fd78f7418dadb4d138f4a571de","x5t":"epClt1O0gXruWdK2haNNBPlnCd8","cer":"MIIDWjCCAkKgAwIBAgIQbtG688m6RReY95eDhFAo8zANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTA0WhcNMjIwMzA2MDAwOTA0WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCk5aL3o0DxlUsI4qyFZV8s/4lJ9Vjad410sorYj1QdroA7mbSJK+eqrRhLUehsHDR46XFgnBH2Hkxz/UhDsYeJ6cQwoNB4kYL1S9WPGM/c/0aRUEDVAxWlAvGxD0wFble/xIYOXo99MsMiZRM8i3KEj3aqQrRFsz7UUNYfoMLV1QviL/oLuFlcjqJ4d0EtCobUD1sLacXcyREHXXyt4R8en9Q/F5/IyslN1hNmQ11l1tUksvNyCtrFswHMfq91l3/CKt1/5qAV25pbYbpQ6c/sOHrlniuda6imMPEa5HUFgLYq0XUwkG9ql0X5HDIlV6aD4kp7rTJI8IiDSLvilC1bAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFGsJ+hfvic9UPDQg9ePOSnZAGfTuMB0GA1UdDgQWBBRrCfoX74nPVDw0IPXjzkp2QBn07jANBgkqhkiG9w0BAQsFAAOCAQEATvhsUV9mXzK5OGPztwHKle9zvxsUGdI1W6l40OcD1ky+kIenyM9R/WEIdBSCF26Ky7jKfsUuUtbMy4f3EoOGJVKXLkxtQ/JmJDN0San9xVATz5Pwnjj7BR1pHJLsyaow7T4K9LrvEjamjQ604nmWUybwbItrneHkzMF3gXarTSdz/FeqR9tctf79zUKhz4c1PkgyM/YvCS5WQGaf+RM174JyTnTHNalo7ftE3CIF92yXoSwYMjsZ/4WMGdny4bNVQ+5IBAgSFri9rph+GsYYAsWv9dy88uWMiBDZmjxZGtgXPCF02dD4Bxr+8DEuClhQJJloo7kCif/YOyBv405LFg==","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453349,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453328,"updated":1583453328}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2614'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://hpdyo6see7vytsna5spjqshf.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_list_operations.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_list_operations.yaml
    index 1fdb22b1c480..1584a4812eaf 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_list_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_list_operations.yaml
    @@ -2,595 +2,1507 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/create?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate0/create, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate0/create?api-version=7.1-preview
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtWiwWqlM2wwDng7GyBZKfIEa1Kzqyd6GHzIra0kCRPqwlM3OPQjJaFTZp8abrAqBKZw16KTa1Gq8baSuQGRvgdYCtWt3qCLKB0qCFnlUQ/bIUiQ1E208DIiUFphVvqrhsAmgwPRIVdwiCyrEJPud499AG0nwKi7G+6YMcY/2rPHg27DrD67xs9SWR3vtx8ApLjdRuibQl1Tb1CH8rcsHPJKQIkhlodAWfCLKdYDwhvZAJNQyMvDRtFoD8ptw/31Ih5uNkAEk7sD3TYvSTH/TVQpP27PA41cwz2MPGyMU8B0rq0VP8J8pOlBZicB34M0dkZJFSxiLVEP3CYbLdEwqFwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHPY3NKeZ+7S0qZtnW/lNdIQX9prIvYId56Zkg2cGIyROwujFpf4lMGipSDxCOImtSgYUWA1jDbykCk5VsAqffEL7LUPeRWcqURf6PctvSI/Rc7uhzkJj/F7efjZhlnPkDD2To3wqcJQX7IE4xo7536sGI6D1Lt4j+0UuKNVM56HgKDLhZbJSHJhJJTZxwbdstGWhGwUi0Zo3qrw1tTQkcuK0YDr7iXq0qnY5s8SRTOl3raRVH3t8JOcQbEi5Y2Uh9oBEOCotSQc3c+52Nz7kBQuLtTWPU0zL12EY3tPvGaUU8VPMVBaS12MGJKeK7CsIe14gOY73FL+gedctajOEkM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtqSm9ntpNJGosUpxv+CAD3k2E04hwO5ZHs8GBmGBEp8ptKNbDbH6cjy78YnLSOrDekrmadVVN607xId+H+gOMKbmKP+PMa0bR1EBm1T3F0l1vqo61vX9ghgX4i8vCM3qmE3JdTi8nX9CM5iSW4dLlwIvyGfAjpCaaK1u+oDj/m3L1UoHoaSVpeFzOudTMn1e9BmHMOKCXoKXVxK6q5ArT3cVmx7sfvMWK+Enrtqq0aseDvFpFGlfn0JO5qt82Tm7Qh3Be5zCg0IpfW85FV5oyH2RYsLZYNur8j0/6x7fJJBJos8dLC16rcgGq/yiUO8ZtjB/4d3MRVU5Zn0YFC7bKQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACoSPZpOm5/MgdI3hS0xDg2dgdIT4KAJ6gRKHAkDBYqKwvQS44PSI+Lp2lt2wcWc/YgOdXzCvee+RGXOeU0/IYN+f2Gf9l7pQ77j2VKKX7fL2styZ6lDPcnkYfqmUBFG8Y6vrv4rXd1xMC6PtVYbX+sm8PH2KQd6x/9LdlGJWx9BBeOpnoAqEJbsYqMyBdKUGzkqKKx73cLY2Sr3vCmpSvWUw49bKaxSUcr5kSO7YCR0IG/mRkSRhc8C6TR/DuezHsoaOM+G6347YPb/hDYE18i5Y/B68KqdtC2CaKOzIFBRP5vcC41ELCwFmiPetbC/YZpWREQpKkB8i+2q6wZx6tk=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"d61262b8fc224aa5a2c50e8a90b32a2a"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"f15e7ec4a5eb450c9432436ab4f451a2"}'
         headers:
           cache-control: no-cache
           content-length: '1346'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:43 GMT
    +      date: Fri, 06 Mar 2020 00:08:11 GMT
           expires: '-1'
    -      location: [h, t, t, p, s, ':', /, /, m, x, z, y, f, m, h, g, s, '3', p, w, h,
    -        '2', z, e, b, c, z, b, g, r, w, v, ., v, a, u, l, t, ., a, z, u, r, e, .,
    -        n, e, t, /, c, e, r, t, i, f, i, c, a, t, e, s, /, c, e, r, t, i, f, i, c,
    -        a, t, e, '0', /, p, e, n, d, i, n, g, '?', a, p, i, '-', v, e, r, s, i, o,
    -        n, '=', '7', ., '0', '&', r, e, q, u, e, s, t, _, i, d, '=', d, '6', '1',
    -        '2', '6', '2', b, '8', f, c, '2', '2', '4', a, a, '5', a, '2', c, '5', '0',
    -        e, '8', a, '9', '0', b, '3', '2', a, '2', a]
    +      location:
    +      - h
    +      - t
    +      - t
    +      - p
    +      - s
    +      - ':'
    +      - /
    +      - /
    +      - r
    +      - z
    +      - '2'
    +      - g
    +      - '3'
    +      - x
    +      - o
    +      - '6'
    +      - '6'
    +      - e
    +      - '6'
    +      - n
    +      - l
    +      - '5'
    +      - f
    +      - o
    +      - k
    +      - q
    +      - x
    +      - '3'
    +      - k
    +      - m
    +      - m
    +      - q
    +      - .
    +      - v
    +      - a
    +      - u
    +      - l
    +      - t
    +      - .
    +      - a
    +      - z
    +      - u
    +      - r
    +      - e
    +      - .
    +      - n
    +      - e
    +      - t
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - s
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - '0'
    +      - /
    +      - p
    +      - e
    +      - n
    +      - d
    +      - i
    +      - n
    +      - g
    +      - '?'
    +      - a
    +      - p
    +      - i
    +      - '-'
    +      - v
    +      - e
    +      - r
    +      - s
    +      - i
    +      - o
    +      - n
    +      - '='
    +      - '7'
    +      - .
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
    +      - '&'
    +      - r
    +      - e
    +      - q
    +      - u
    +      - e
    +      - s
    +      - t
    +      - _
    +      - i
    +      - d
    +      - '='
    +      - f
    +      - '1'
    +      - '5'
    +      - e
    +      - '7'
    +      - e
    +      - c
    +      - '4'
    +      - a
    +      - '5'
    +      - e
    +      - b
    +      - '4'
    +      - '5'
    +      - '0'
    +      - c
    +      - '9'
    +      - '4'
    +      - '3'
    +      - '2'
    +      - '4'
    +      - '3'
    +      - '6'
    +      - a
    +      - b
    +      - '4'
    +      - f
    +      - '4'
    +      - '5'
    +      - '1'
    +      - a
    +      - '2'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
    -    status: {code: 202, message: Accepted}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate0/create, api-version=7.0, '']
    +    status:
    +      code: 202
    +      message: Accepted
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate0/create?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtWiwWqlM2wwDng7GyBZKfIEa1Kzqyd6GHzIra0kCRPqwlM3OPQjJaFTZp8abrAqBKZw16KTa1Gq8baSuQGRvgdYCtWt3qCLKB0qCFnlUQ/bIUiQ1E208DIiUFphVvqrhsAmgwPRIVdwiCyrEJPud499AG0nwKi7G+6YMcY/2rPHg27DrD67xs9SWR3vtx8ApLjdRuibQl1Tb1CH8rcsHPJKQIkhlodAWfCLKdYDwhvZAJNQyMvDRtFoD8ptw/31Ih5uNkAEk7sD3TYvSTH/TVQpP27PA41cwz2MPGyMU8B0rq0VP8J8pOlBZicB34M0dkZJFSxiLVEP3CYbLdEwqFwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHPY3NKeZ+7S0qZtnW/lNdIQX9prIvYId56Zkg2cGIyROwujFpf4lMGipSDxCOImtSgYUWA1jDbykCk5VsAqffEL7LUPeRWcqURf6PctvSI/Rc7uhzkJj/F7efjZhlnPkDD2To3wqcJQX7IE4xo7536sGI6D1Lt4j+0UuKNVM56HgKDLhZbJSHJhJJTZxwbdstGWhGwUi0Zo3qrw1tTQkcuK0YDr7iXq0qnY5s8SRTOl3raRVH3t8JOcQbEi5Y2Uh9oBEOCotSQc3c+52Nz7kBQuLtTWPU0zL12EY3tPvGaUU8VPMVBaS12MGJKeK7CsIe14gOY73FL+gedctajOEkM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtqSm9ntpNJGosUpxv+CAD3k2E04hwO5ZHs8GBmGBEp8ptKNbDbH6cjy78YnLSOrDekrmadVVN607xId+H+gOMKbmKP+PMa0bR1EBm1T3F0l1vqo61vX9ghgX4i8vCM3qmE3JdTi8nX9CM5iSW4dLlwIvyGfAjpCaaK1u+oDj/m3L1UoHoaSVpeFzOudTMn1e9BmHMOKCXoKXVxK6q5ArT3cVmx7sfvMWK+Enrtqq0aseDvFpFGlfn0JO5qt82Tm7Qh3Be5zCg0IpfW85FV5oyH2RYsLZYNur8j0/6x7fJJBJos8dLC16rcgGq/yiUO8ZtjB/4d3MRVU5Zn0YFC7bKQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACoSPZpOm5/MgdI3hS0xDg2dgdIT4KAJ6gRKHAkDBYqKwvQS44PSI+Lp2lt2wcWc/YgOdXzCvee+RGXOeU0/IYN+f2Gf9l7pQ77j2VKKX7fL2styZ6lDPcnkYfqmUBFG8Y6vrv4rXd1xMC6PtVYbX+sm8PH2KQd6x/9LdlGJWx9BBeOpnoAqEJbsYqMyBdKUGzkqKKx73cLY2Sr3vCmpSvWUw49bKaxSUcr5kSO7YCR0IG/mRkSRhc8C6TR/DuezHsoaOM+G6347YPb/hDYE18i5Y/B68KqdtC2CaKOzIFBRP5vcC41ELCwFmiPetbC/YZpWREQpKkB8i+2q6wZx6tk=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"d61262b8fc224aa5a2c50e8a90b32a2a"}'}
    -    headers: {cache-control: no-cache, content-length: '1346', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:43 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate0/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"f15e7ec4a5eb450c9432436ab4f451a2"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1346'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtWiwWqlM2wwDng7GyBZKfIEa1Kzqyd6GHzIra0kCRPqwlM3OPQjJaFTZp8abrAqBKZw16KTa1Gq8baSuQGRvgdYCtWt3qCLKB0qCFnlUQ/bIUiQ1E208DIiUFphVvqrhsAmgwPRIVdwiCyrEJPud499AG0nwKi7G+6YMcY/2rPHg27DrD67xs9SWR3vtx8ApLjdRuibQl1Tb1CH8rcsHPJKQIkhlodAWfCLKdYDwhvZAJNQyMvDRtFoD8ptw/31Ih5uNkAEk7sD3TYvSTH/TVQpP27PA41cwz2MPGyMU8B0rq0VP8J8pOlBZicB34M0dkZJFSxiLVEP3CYbLdEwqFwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHPY3NKeZ+7S0qZtnW/lNdIQX9prIvYId56Zkg2cGIyROwujFpf4lMGipSDxCOImtSgYUWA1jDbykCk5VsAqffEL7LUPeRWcqURf6PctvSI/Rc7uhzkJj/F7efjZhlnPkDD2To3wqcJQX7IE4xo7536sGI6D1Lt4j+0UuKNVM56HgKDLhZbJSHJhJJTZxwbdstGWhGwUi0Zo3qrw1tTQkcuK0YDr7iXq0qnY5s8SRTOl3raRVH3t8JOcQbEi5Y2Uh9oBEOCotSQc3c+52Nz7kBQuLtTWPU0zL12EY3tPvGaUU8VPMVBaS12MGJKeK7CsIe14gOY73FL+gedctajOEkM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtqSm9ntpNJGosUpxv+CAD3k2E04hwO5ZHs8GBmGBEp8ptKNbDbH6cjy78YnLSOrDekrmadVVN607xId+H+gOMKbmKP+PMa0bR1EBm1T3F0l1vqo61vX9ghgX4i8vCM3qmE3JdTi8nX9CM5iSW4dLlwIvyGfAjpCaaK1u+oDj/m3L1UoHoaSVpeFzOudTMn1e9BmHMOKCXoKXVxK6q5ArT3cVmx7sfvMWK+Enrtqq0aseDvFpFGlfn0JO5qt82Tm7Qh3Be5zCg0IpfW85FV5oyH2RYsLZYNur8j0/6x7fJJBJos8dLC16rcgGq/yiUO8ZtjB/4d3MRVU5Zn0YFC7bKQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACoSPZpOm5/MgdI3hS0xDg2dgdIT4KAJ6gRKHAkDBYqKwvQS44PSI+Lp2lt2wcWc/YgOdXzCvee+RGXOeU0/IYN+f2Gf9l7pQ77j2VKKX7fL2styZ6lDPcnkYfqmUBFG8Y6vrv4rXd1xMC6PtVYbX+sm8PH2KQd6x/9LdlGJWx9BBeOpnoAqEJbsYqMyBdKUGzkqKKx73cLY2Sr3vCmpSvWUw49bKaxSUcr5kSO7YCR0IG/mRkSRhc8C6TR/DuezHsoaOM+G6347YPb/hDYE18i5Y/B68KqdtC2CaKOzIFBRP5vcC41ELCwFmiPetbC/YZpWREQpKkB8i+2q6wZx6tk=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"d61262b8fc224aa5a2c50e8a90b32a2a"}'}
    -    headers: {cache-control: no-cache, content-length: '1346', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:53 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate0/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"f15e7ec4a5eb450c9432436ab4f451a2"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1346'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtWiwWqlM2wwDng7GyBZKfIEa1Kzqyd6GHzIra0kCRPqwlM3OPQjJaFTZp8abrAqBKZw16KTa1Gq8baSuQGRvgdYCtWt3qCLKB0qCFnlUQ/bIUiQ1E208DIiUFphVvqrhsAmgwPRIVdwiCyrEJPud499AG0nwKi7G+6YMcY/2rPHg27DrD67xs9SWR3vtx8ApLjdRuibQl1Tb1CH8rcsHPJKQIkhlodAWfCLKdYDwhvZAJNQyMvDRtFoD8ptw/31Ih5uNkAEk7sD3TYvSTH/TVQpP27PA41cwz2MPGyMU8B0rq0VP8J8pOlBZicB34M0dkZJFSxiLVEP3CYbLdEwqFwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHPY3NKeZ+7S0qZtnW/lNdIQX9prIvYId56Zkg2cGIyROwujFpf4lMGipSDxCOImtSgYUWA1jDbykCk5VsAqffEL7LUPeRWcqURf6PctvSI/Rc7uhzkJj/F7efjZhlnPkDD2To3wqcJQX7IE4xo7536sGI6D1Lt4j+0UuKNVM56HgKDLhZbJSHJhJJTZxwbdstGWhGwUi0Zo3qrw1tTQkcuK0YDr7iXq0qnY5s8SRTOl3raRVH3t8JOcQbEi5Y2Uh9oBEOCotSQc3c+52Nz7kBQuLtTWPU0zL12EY3tPvGaUU8VPMVBaS12MGJKeK7CsIe14gOY73FL+gedctajOEkM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtqSm9ntpNJGosUpxv+CAD3k2E04hwO5ZHs8GBmGBEp8ptKNbDbH6cjy78YnLSOrDekrmadVVN607xId+H+gOMKbmKP+PMa0bR1EBm1T3F0l1vqo61vX9ghgX4i8vCM3qmE3JdTi8nX9CM5iSW4dLlwIvyGfAjpCaaK1u+oDj/m3L1UoHoaSVpeFzOudTMn1e9BmHMOKCXoKXVxK6q5ArT3cVmx7sfvMWK+Enrtqq0aseDvFpFGlfn0JO5qt82Tm7Qh3Be5zCg0IpfW85FV5oyH2RYsLZYNur8j0/6x7fJJBJos8dLC16rcgGq/yiUO8ZtjB/4d3MRVU5Zn0YFC7bKQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACoSPZpOm5/MgdI3hS0xDg2dgdIT4KAJ6gRKHAkDBYqKwvQS44PSI+Lp2lt2wcWc/YgOdXzCvee+RGXOeU0/IYN+f2Gf9l7pQ77j2VKKX7fL2styZ6lDPcnkYfqmUBFG8Y6vrv4rXd1xMC6PtVYbX+sm8PH2KQd6x/9LdlGJWx9BBeOpnoAqEJbsYqMyBdKUGzkqKKx73cLY2Sr3vCmpSvWUw49bKaxSUcr5kSO7YCR0IG/mRkSRhc8C6TR/DuezHsoaOM+G6347YPb/hDYE18i5Y/B68KqdtC2CaKOzIFBRP5vcC41ELCwFmiPetbC/YZpWREQpKkB8i+2q6wZx6tk=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"d61262b8fc224aa5a2c50e8a90b32a2a"}'}
    -    headers: {cache-control: no-cache, content-length: '1346', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate0/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"f15e7ec4a5eb450c9432436ab4f451a2"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1346'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtWiwWqlM2wwDng7GyBZKfIEa1Kzqyd6GHzIra0kCRPqwlM3OPQjJaFTZp8abrAqBKZw16KTa1Gq8baSuQGRvgdYCtWt3qCLKB0qCFnlUQ/bIUiQ1E208DIiUFphVvqrhsAmgwPRIVdwiCyrEJPud499AG0nwKi7G+6YMcY/2rPHg27DrD67xs9SWR3vtx8ApLjdRuibQl1Tb1CH8rcsHPJKQIkhlodAWfCLKdYDwhvZAJNQyMvDRtFoD8ptw/31Ih5uNkAEk7sD3TYvSTH/TVQpP27PA41cwz2MPGyMU8B0rq0VP8J8pOlBZicB34M0dkZJFSxiLVEP3CYbLdEwqFwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHPY3NKeZ+7S0qZtnW/lNdIQX9prIvYId56Zkg2cGIyROwujFpf4lMGipSDxCOImtSgYUWA1jDbykCk5VsAqffEL7LUPeRWcqURf6PctvSI/Rc7uhzkJj/F7efjZhlnPkDD2To3wqcJQX7IE4xo7536sGI6D1Lt4j+0UuKNVM56HgKDLhZbJSHJhJJTZxwbdstGWhGwUi0Zo3qrw1tTQkcuK0YDr7iXq0qnY5s8SRTOl3raRVH3t8JOcQbEi5Y2Uh9oBEOCotSQc3c+52Nz7kBQuLtTWPU0zL12EY3tPvGaUU8VPMVBaS12MGJKeK7CsIe14gOY73FL+gedctajOEkM=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate0","request_id":"d61262b8fc224aa5a2c50e8a90b32a2a"}'}
    -    headers: {cache-control: no-cache, content-length: '1267', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate0/pending, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtqSm9ntpNJGosUpxv+CAD3k2E04hwO5ZHs8GBmGBEp8ptKNbDbH6cjy78YnLSOrDekrmadVVN607xId+H+gOMKbmKP+PMa0bR1EBm1T3F0l1vqo61vX9ghgX4i8vCM3qmE3JdTi8nX9CM5iSW4dLlwIvyGfAjpCaaK1u+oDj/m3L1UoHoaSVpeFzOudTMn1e9BmHMOKCXoKXVxK6q5ArT3cVmx7sfvMWK+Enrtqq0aseDvFpFGlfn0JO5qt82Tm7Qh3Be5zCg0IpfW85FV5oyH2RYsLZYNur8j0/6x7fJJBJos8dLC16rcgGq/yiUO8ZtjB/4d3MRVU5Zn0YFC7bKQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACoSPZpOm5/MgdI3hS0xDg2dgdIT4KAJ6gRKHAkDBYqKwvQS44PSI+Lp2lt2wcWc/YgOdXzCvee+RGXOeU0/IYN+f2Gf9l7pQ77j2VKKX7fL2styZ6lDPcnkYfqmUBFG8Y6vrv4rXd1xMC6PtVYbX+sm8PH2KQd6x/9LdlGJWx9BBeOpnoAqEJbsYqMyBdKUGzkqKKx73cLY2Sr3vCmpSvWUw49bKaxSUcr5kSO7YCR0IG/mRkSRhc8C6TR/DuezHsoaOM+G6347YPb/hDYE18i5Y/B68KqdtC2CaKOzIFBRP5vcC41ELCwFmiPetbC/YZpWREQpKkB8i+2q6wZx6tk=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate0","request_id":"f15e7ec4a5eb450c9432436ab4f451a2"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1267'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate0/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate0/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/eb3936db56c744eba3bf4dbb73639e97","kid":"https://vaultname.vault.azure.net/keys/certificate0/eb3936db56c744eba3bf4dbb73639e97","sid":"https://vaultname.vault.azure.net/secrets/certificate0/eb3936db56c744eba3bf4dbb73639e97","x5t":"zH015G_fF80Oa4LDTKlEjI5f-n4","cer":"MIIDWjCCAkKgAwIBAgIQBWjdtjDzShS5N4i5d3s9UDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0OTA5WhcNMjExMjA2MjM1OTA5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1aLBaqUzbDAOeDsbIFkp8gRrUrOrJ3oYfMitrSQJE+rCUzc49CMloVNmnxpusCoEpnDXopNrUarxtpK5AZG+B1gK1a3eoIsoHSoIWeVRD9shSJDUTbTwMiJQWmFW+quGwCaDA9EhV3CILKsQk+53j30AbSfAqLsb7pgxxj/as8eDbsOsPrvGz1JZHe+3HwCkuN1G6JtCXVNvUIfytywc8kpAiSGWh0BZ8Isp1gPCG9kAk1DIy8NG0WgPym3D/fUiHm42QASTuwPdNi9JMf9NVCk/bs8DjVzDPYw8bIxTwHSurRU/wnyk6UFmJwHfgzR2RkkVLGItUQ/cJhst0TCoXAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFCASWMDzipVqU4QZmsJ8o48VuKK6MB0GA1UdDgQWBBQgEljA84qValOEGZrCfKOPFbiiujANBgkqhkiG9w0BAQsFAAOCAQEASY7m81HzE5juY615eHsiGLR1edPQfmWRAwRu7SPGpFsGJuYNdMdnB9oGurB7lag1rJfgc8ybxkBIVsdNsyzORCy5YfD/dZdwLlOL4/4H0pVr5MQVhBooO30j6X+1loh4SBXXlzDnpYH/093K6soo20pfTZY+l0g+gM/U/bey3m7Pu03Bnm3Ov2HjRmBb0j/EegRFcvD45+jVj59pRKhaOV0fzmhx36ho541cXdXJJzeXsdtO842QJvkmv5IAZv0tpc+iA0MTtATDCjsLJpZYydLzuKVjtMOQgRCjTPBQmI1ZePyvGYHSFJVU82KeM0YukVdnZ4j/lRNvMOXI33rsLA==","attributes":{"enabled":true,"nbf":1575676149,"exp":1638835149,"created":1575676749,"updated":1575676749,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate0/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676723,"updated":1575676723}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2449', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:19 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate0/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate0/e5e4ad64bb984791a41d61a76aa7a833","kid":"https://vaultname.vault.azure.net/keys/certificate0/e5e4ad64bb984791a41d61a76aa7a833","sid":"https://vaultname.vault.azure.net/secrets/certificate0/e5e4ad64bb984791a41d61a76aa7a833","x5t":"0aNPEESznAQwnGfNAV7ZIjS5AAM","cer":"MIIDWjCCAkKgAwIBAgIQAs1LzyuYQaejAuXPEaxl2zANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1ODM5WhcNMjIwMzA2MDAwODM5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2pKb2e2k0kaixSnG/4IAPeTYTTiHA7lkezwYGYYESnym0o1sNsfpyPLvxictI6sN6SuZp1VU3rTvEh34f6A4wpuYo/48xrRtHUQGbVPcXSXW+qjrW9f2CGBfiLy8IzeqYTcl1OLydf0IzmJJbh0uXAi/IZ8COkJporW76gOP+bcvVSgehpJWl4XM651MyfV70GYcw4oJegpdXErqrkCtPdxWbHux+8xYr4Seu2qrRqx4O8WkUaV+fQk7mq3zZObtCHcF7nMKDQil9bzkVXmjIfZFiwtlg26vyPT/rHt8kkEmizx0sLXqtyAar/KJQ7xm2MH/h3cxFVTlmfRgULtspAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFN/WYubENJQ7FYdKUcFkJA2viOR0MB0GA1UdDgQWBBTf1mLmxDSUOxWHSlHBZCQNr4jkdDANBgkqhkiG9w0BAQsFAAOCAQEAD1dXpLz9grJGulQ7pvmntbDE/MJhMnArf3AZmxfiZai5mIxpZJWPcbqyYixVficgyXOD3C/clVYH2uFkMZaC/p3saKC1QNK11Y20qK0cHlEarp0uJ8Eayy4plcVFJ+FeLB1EzlNVzC8ejlxRj1RLfyGTnBk5brlff2+qsScdB25QZGiLMDSrzkQyQyENiGjkO5uhV6EfZTY5T3M3e9vzphNT1FiNtEqyPP0xeVGG2LHGmCQwGPYErY5lNGo9wyIDu2SO4SRQj3vf8f4teL1zsCLuiFYtK5/1fnxturEGoIazlXgIWEdFPg4MEJrsBnr6TzCSLgHp0l8FTDYKNsc6qg==","attributes":{"enabled":true,"nbf":1583452719,"exp":1646525319,"created":1583453319,"updated":1583453319,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate0/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453291,"updated":1583453291}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate0/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2449'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate0/?api-version=7.1-preview
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certificate1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate1/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp/aKGp7vBn02cFJC5huCyiG/htQOUZb+jk8rrkO6fQsQJwmSYF/j5SiQfSXL4dnmAoqdpCidHk30KcnwcW9KpYKQCTErldKNxPy/4ggwm79PetCzbTMA4tUszEnme84OsLj0mDWh2dI5Xmk0i+Se9f/A/ItU6/TdpzjRQpGS/Rk3lwNxA91JTzPFp+CaRX8uN8Q2rvIf3QVM2iPRgJsDiblY97dZJbTeYZtY4ICCvKIXwq1NnSIcqX8ZebyffraYb4OpusTnGe1BEjgpkfstd8QarZDVBr6r1O/hoTkIlgxxpyrn/Agvao4VW5tOAeFtxrTajfEkYFAceYGIKAIp7wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAF50sEVt1+KD4ztKyp6mFClcmifyPVUSuG+gJA0ywoITJtuu3W2AJ3odX2/XVWy0eLTlHP9GzplHK7wPR8bU5IZc7dT8LqUe0EQu5SU8tMquSX8SyEFtVGnuiW89SSJSbHFT3PmxMeycJSxqAsgTftXlLXyhjjDstif9viXWFAJZGXCHRFUlaVrFciDXlaK5VsBu3o4Rt0Mvt6q4VDcyHoZ84JDBdwhZ+GswwN/gyY8lL/zKn3n7d2kwNj+IWq9Q8QoTJ1G8StehU6Z9e/399BP9VMotrgtfDmA1dYPR1mwk/IJGhXcYvkZD1dfc85OxbKwsBW0YTpy+WXF/lsZjEbM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA73oESMrZdU+A0l82ZCPEOsA/nRWul9cwdHfbrLN2DqnUf2aAvKl91YKh50E9DpDWJm0fw+ryXjrAV8fpXb34ERUl5B7GlJzgrnwoN6RRU4raaoHd8vk7PYPKbcFQf6rkuiz7HZTNGhIIUttwR/QkzevpGUNyyuWWBRS/UVVzhV9zQWG1Lnw3y3ZYpOS+/tJTvW6XglTjLXzYVrF6fAstkm/4CRNdjIPT7b/V5B6iwYFhUjW3FqR5esnooKE72FosZTJETE8lCMWBrdXGYlUF09X5P8GHns8EXn4cVmi/6P6lZV+1kIPVfBxzqCrqiltOrW3ZAjUHJonPbvRQbTefgwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHlvUQUJsFmzngF52GQqRK0jh8/35bbbqtK6zTu33SzA5u3YDTMoo8MJrKoetoxvMOP+NEIWLKASe4mJ7ICdLb6o4mmX8rHMSlk4z7Asv4zw8MBuFwFZDQ4z0wzLHJg9oD4rN3YMHyJeH0n4UDE2HJJqlDMh3Kh4/WkjhvQ9/PpZv/oTqQD0y6gU49gXuJ2urEBud56LCTiCOGxLI1Y0UlcvewX5DkgoK9JQxRyddeMZHD5WAk6mwCuSa4U7mP7EX1CBmhTdPKFu6mDe8mAFuVpp36/6fUbJMpUwTjpe1CSWfrFlpKbY8spq+VWQ69X0PGfELEyL1FD2M5ejvWKRFs0=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"3a4481d064f141beaf84ac469c9c044c"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"fca3402bbcf440049befe1f9731733dc"}'
         headers:
           cache-control: no-cache
           content-length: '1346'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:19 GMT
    +      date: Fri, 06 Mar 2020 00:08:42 GMT
           expires: '-1'
    -      location: [h, t, t, p, s, ':', /, /, m, x, z, y, f, m, h, g, s, '3', p, w, h,
    -        '2', z, e, b, c, z, b, g, r, w, v, ., v, a, u, l, t, ., a, z, u, r, e, .,
    -        n, e, t, /, c, e, r, t, i, f, i, c, a, t, e, s, /, c, e, r, t, i, f, i, c,
    -        a, t, e, '1', /, p, e, n, d, i, n, g, '?', a, p, i, '-', v, e, r, s, i, o,
    -        n, '=', '7', ., '0', '&', r, e, q, u, e, s, t, _, i, d, '=', '3', a, '4',
    -        '4', '8', '1', d, '0', '6', '4', f, '1', '4', '1', b, e, a, f, '8', '4', a,
    -        c, '4', '6', '9', c, '9', c, '0', '4', '4', c]
    +      location:
    +      - h
    +      - t
    +      - t
    +      - p
    +      - s
    +      - ':'
    +      - /
    +      - /
    +      - r
    +      - z
    +      - '2'
    +      - g
    +      - '3'
    +      - x
    +      - o
    +      - '6'
    +      - '6'
    +      - e
    +      - '6'
    +      - n
    +      - l
    +      - '5'
    +      - f
    +      - o
    +      - k
    +      - q
    +      - x
    +      - '3'
    +      - k
    +      - m
    +      - m
    +      - q
    +      - .
    +      - v
    +      - a
    +      - u
    +      - l
    +      - t
    +      - .
    +      - a
    +      - z
    +      - u
    +      - r
    +      - e
    +      - .
    +      - n
    +      - e
    +      - t
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - s
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - '1'
    +      - /
    +      - p
    +      - e
    +      - n
    +      - d
    +      - i
    +      - n
    +      - g
    +      - '?'
    +      - a
    +      - p
    +      - i
    +      - '-'
    +      - v
    +      - e
    +      - r
    +      - s
    +      - i
    +      - o
    +      - n
    +      - '='
    +      - '7'
    +      - .
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
    +      - '&'
    +      - r
    +      - e
    +      - q
    +      - u
    +      - e
    +      - s
    +      - t
    +      - _
    +      - i
    +      - d
    +      - '='
    +      - f
    +      - c
    +      - a
    +      - '3'
    +      - '4'
    +      - '0'
    +      - '2'
    +      - b
    +      - b
    +      - c
    +      - f
    +      - '4'
    +      - '4'
    +      - '0'
    +      - '0'
    +      - '4'
    +      - '9'
    +      - b
    +      - e
    +      - f
    +      - e
    +      - '1'
    +      - f
    +      - '9'
    +      - '7'
    +      - '3'
    +      - '1'
    +      - '7'
    +      - '3'
    +      - '3'
    +      - d
    +      - c
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
    -    status: {code: 202, message: Accepted}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate1/create, api-version=7.0, '']
    +    status:
    +      code: 202
    +      message: Accepted
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate1/create?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp/aKGp7vBn02cFJC5huCyiG/htQOUZb+jk8rrkO6fQsQJwmSYF/j5SiQfSXL4dnmAoqdpCidHk30KcnwcW9KpYKQCTErldKNxPy/4ggwm79PetCzbTMA4tUszEnme84OsLj0mDWh2dI5Xmk0i+Se9f/A/ItU6/TdpzjRQpGS/Rk3lwNxA91JTzPFp+CaRX8uN8Q2rvIf3QVM2iPRgJsDiblY97dZJbTeYZtY4ICCvKIXwq1NnSIcqX8ZebyffraYb4OpusTnGe1BEjgpkfstd8QarZDVBr6r1O/hoTkIlgxxpyrn/Agvao4VW5tOAeFtxrTajfEkYFAceYGIKAIp7wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAF50sEVt1+KD4ztKyp6mFClcmifyPVUSuG+gJA0ywoITJtuu3W2AJ3odX2/XVWy0eLTlHP9GzplHK7wPR8bU5IZc7dT8LqUe0EQu5SU8tMquSX8SyEFtVGnuiW89SSJSbHFT3PmxMeycJSxqAsgTftXlLXyhjjDstif9viXWFAJZGXCHRFUlaVrFciDXlaK5VsBu3o4Rt0Mvt6q4VDcyHoZ84JDBdwhZ+GswwN/gyY8lL/zKn3n7d2kwNj+IWq9Q8QoTJ1G8StehU6Z9e/399BP9VMotrgtfDmA1dYPR1mwk/IJGhXcYvkZD1dfc85OxbKwsBW0YTpy+WXF/lsZjEbM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA73oESMrZdU+A0l82ZCPEOsA/nRWul9cwdHfbrLN2DqnUf2aAvKl91YKh50E9DpDWJm0fw+ryXjrAV8fpXb34ERUl5B7GlJzgrnwoN6RRU4raaoHd8vk7PYPKbcFQf6rkuiz7HZTNGhIIUttwR/QkzevpGUNyyuWWBRS/UVVzhV9zQWG1Lnw3y3ZYpOS+/tJTvW6XglTjLXzYVrF6fAstkm/4CRNdjIPT7b/V5B6iwYFhUjW3FqR5esnooKE72FosZTJETE8lCMWBrdXGYlUF09X5P8GHns8EXn4cVmi/6P6lZV+1kIPVfBxzqCrqiltOrW3ZAjUHJonPbvRQbTefgwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHlvUQUJsFmzngF52GQqRK0jh8/35bbbqtK6zTu33SzA5u3YDTMoo8MJrKoetoxvMOP+NEIWLKASe4mJ7ICdLb6o4mmX8rHMSlk4z7Asv4zw8MBuFwFZDQ4z0wzLHJg9oD4rN3YMHyJeH0n4UDE2HJJqlDMh3Kh4/WkjhvQ9/PpZv/oTqQD0y6gU49gXuJ2urEBud56LCTiCOGxLI1Y0UlcvewX5DkgoK9JQxRyddeMZHD5WAk6mwCuSa4U7mP7EX1CBmhTdPKFu6mDe8mAFuVpp36/6fUbJMpUwTjpe1CSWfrFlpKbY8spq+VWQ69X0PGfELEyL1FD2M5ejvWKRFs0=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"3a4481d064f141beaf84ac469c9c044c"}'}
    -    headers: {cache-control: no-cache, content-length: '1346', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:19 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate1/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"fca3402bbcf440049befe1f9731733dc"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1346'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp/aKGp7vBn02cFJC5huCyiG/htQOUZb+jk8rrkO6fQsQJwmSYF/j5SiQfSXL4dnmAoqdpCidHk30KcnwcW9KpYKQCTErldKNxPy/4ggwm79PetCzbTMA4tUszEnme84OsLj0mDWh2dI5Xmk0i+Se9f/A/ItU6/TdpzjRQpGS/Rk3lwNxA91JTzPFp+CaRX8uN8Q2rvIf3QVM2iPRgJsDiblY97dZJbTeYZtY4ICCvKIXwq1NnSIcqX8ZebyffraYb4OpusTnGe1BEjgpkfstd8QarZDVBr6r1O/hoTkIlgxxpyrn/Agvao4VW5tOAeFtxrTajfEkYFAceYGIKAIp7wIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAF50sEVt1+KD4ztKyp6mFClcmifyPVUSuG+gJA0ywoITJtuu3W2AJ3odX2/XVWy0eLTlHP9GzplHK7wPR8bU5IZc7dT8LqUe0EQu5SU8tMquSX8SyEFtVGnuiW89SSJSbHFT3PmxMeycJSxqAsgTftXlLXyhjjDstif9viXWFAJZGXCHRFUlaVrFciDXlaK5VsBu3o4Rt0Mvt6q4VDcyHoZ84JDBdwhZ+GswwN/gyY8lL/zKn3n7d2kwNj+IWq9Q8QoTJ1G8StehU6Z9e/399BP9VMotrgtfDmA1dYPR1mwk/IJGhXcYvkZD1dfc85OxbKwsBW0YTpy+WXF/lsZjEbM=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate1","request_id":"3a4481d064f141beaf84ac469c9c044c"}'}
    -    headers: {cache-control: no-cache, content-length: '1267', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:29 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate1/pending, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA73oESMrZdU+A0l82ZCPEOsA/nRWul9cwdHfbrLN2DqnUf2aAvKl91YKh50E9DpDWJm0fw+ryXjrAV8fpXb34ERUl5B7GlJzgrnwoN6RRU4raaoHd8vk7PYPKbcFQf6rkuiz7HZTNGhIIUttwR/QkzevpGUNyyuWWBRS/UVVzhV9zQWG1Lnw3y3ZYpOS+/tJTvW6XglTjLXzYVrF6fAstkm/4CRNdjIPT7b/V5B6iwYFhUjW3FqR5esnooKE72FosZTJETE8lCMWBrdXGYlUF09X5P8GHns8EXn4cVmi/6P6lZV+1kIPVfBxzqCrqiltOrW3ZAjUHJonPbvRQbTefgwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHlvUQUJsFmzngF52GQqRK0jh8/35bbbqtK6zTu33SzA5u3YDTMoo8MJrKoetoxvMOP+NEIWLKASe4mJ7ICdLb6o4mmX8rHMSlk4z7Asv4zw8MBuFwFZDQ4z0wzLHJg9oD4rN3YMHyJeH0n4UDE2HJJqlDMh3Kh4/WkjhvQ9/PpZv/oTqQD0y6gU49gXuJ2urEBud56LCTiCOGxLI1Y0UlcvewX5DkgoK9JQxRyddeMZHD5WAk6mwCuSa4U7mP7EX1CBmhTdPKFu6mDe8mAFuVpp36/6fUbJMpUwTjpe1CSWfrFlpKbY8spq+VWQ69X0PGfELEyL1FD2M5ejvWKRFs0=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Certificate request is in progress. This may take some
    +        time based on the issuer provider. Please check again later.","request_id":"fca3402bbcf440049befe1f9731733dc"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1346'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/97ff3e5427594e2eb0e358e88e5a6de4","kid":"https://vaultname.vault.azure.net/keys/certificate1/97ff3e5427594e2eb0e358e88e5a6de4","sid":"https://vaultname.vault.azure.net/secrets/certificate1/97ff3e5427594e2eb0e358e88e5a6de4","x5t":"41HTUrSJqP-xwF_cW1pV1Ta-OYE","cer":"MIIDWjCCAkKgAwIBAgIQaDCkgiSkRSyjRumXuVBMtDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0OTI2WhcNMjExMjA2MjM1OTI2WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCn9ooanu8GfTZwUkLmG4LKIb+G1A5Rlv6OTyuuQ7p9CxAnCZJgX+PlKJB9Jcvh2eYCip2kKJ0eTfQpyfBxb0qlgpAJMSuV0o3E/L/iCDCbv0960LNtMwDi1SzMSeZ7zg6wuPSYNaHZ0jleaTSL5J71/8D8i1Tr9N2nONFCkZL9GTeXA3ED3UlPM8Wn4JpFfy43xDau8h/dBUzaI9GAmwOJuVj3t1kltN5hm1jggIK8ohfCrU2dIhypfxl5vJ9+tphvg6m6xOcZ7UESOCmR+y13xBqtkNUGvqvU7+GhOQiWDHGnKuf8CC9qjhVbm04B4W3GtNqN8SRgUBx5gYgoAinvAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFCkZK0fDImo7toU5J9mcDex6pKXKMB0GA1UdDgQWBBQpGStHwyJqO7aFOSfZnA3seqSlyjANBgkqhkiG9w0BAQsFAAOCAQEAXylQ+PoHWGGWOjDKVGvirgG44JsWrgyBMKxURj4+9Iljyjy/iZ/+08zhM3DLYO/rgiS2sgWhdP+r0eBP6JSKpmBiND9mS7qLwdpzKQJnMJI3gLjrlAIjOFwok9THP1PddNMbG8IrqCoDZVY+QxBUdDyO5XU6XB8MBhBgToJwWpNDe+xyGdxRpcuqw6B4H159fSfy+9vqHYIQWgPdu2sRuAH4xbIRzI8wSb4eib40HU3nyhhwJ9aDrq1tE4bMH5JW/LwR7/Hgovo950MRn0z6RNE5u1jvSvIzFnDaWtl7Heq7jEZPzGK228Fecvc9LU1GIkRiQukg7zAHofhCnBbMog==","attributes":{"enabled":true,"nbf":1575676166,"exp":1638835166,"created":1575676766,"updated":1575676766,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate1/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676759,"updated":1575676759}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2449', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate1/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA73oESMrZdU+A0l82ZCPEOsA/nRWul9cwdHfbrLN2DqnUf2aAvKl91YKh50E9DpDWJm0fw+ryXjrAV8fpXb34ERUl5B7GlJzgrnwoN6RRU4raaoHd8vk7PYPKbcFQf6rkuiz7HZTNGhIIUttwR/QkzevpGUNyyuWWBRS/UVVzhV9zQWG1Lnw3y3ZYpOS+/tJTvW6XglTjLXzYVrF6fAstkm/4CRNdjIPT7b/V5B6iwYFhUjW3FqR5esnooKE72FosZTJETE8lCMWBrdXGYlUF09X5P8GHns8EXn4cVmi/6P6lZV+1kIPVfBxzqCrqiltOrW3ZAjUHJonPbvRQbTefgwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHlvUQUJsFmzngF52GQqRK0jh8/35bbbqtK6zTu33SzA5u3YDTMoo8MJrKoetoxvMOP+NEIWLKASe4mJ7ICdLb6o4mmX8rHMSlk4z7Asv4zw8MBuFwFZDQ4z0wzLHJg9oD4rN3YMHyJeH0n4UDE2HJJqlDMh3Kh4/WkjhvQ9/PpZv/oTqQD0y6gU49gXuJ2urEBud56LCTiCOGxLI1Y0UlcvewX5DkgoK9JQxRyddeMZHD5WAk6mwCuSa4U7mP7EX1CBmhTdPKFu6mDe8mAFuVpp36/6fUbJMpUwTjpe1CSWfrFlpKbY8spq+VWQ69X0PGfELEyL1FD2M5ejvWKRFs0=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Certificate request is in progress. This may take some
    +        time based on the issuer provider. Please check again later.","request_id":"fca3402bbcf440049befe1f9731733dc"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1346'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA73oESMrZdU+A0l82ZCPEOsA/nRWul9cwdHfbrLN2DqnUf2aAvKl91YKh50E9DpDWJm0fw+ryXjrAV8fpXb34ERUl5B7GlJzgrnwoN6RRU4raaoHd8vk7PYPKbcFQf6rkuiz7HZTNGhIIUttwR/QkzevpGUNyyuWWBRS/UVVzhV9zQWG1Lnw3y3ZYpOS+/tJTvW6XglTjLXzYVrF6fAstkm/4CRNdjIPT7b/V5B6iwYFhUjW3FqR5esnooKE72FosZTJETE8lCMWBrdXGYlUF09X5P8GHns8EXn4cVmi/6P6lZV+1kIPVfBxzqCrqiltOrW3ZAjUHJonPbvRQbTefgwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHlvUQUJsFmzngF52GQqRK0jh8/35bbbqtK6zTu33SzA5u3YDTMoo8MJrKoetoxvMOP+NEIWLKASe4mJ7ICdLb6o4mmX8rHMSlk4z7Asv4zw8MBuFwFZDQ4z0wzLHJg9oD4rN3YMHyJeH0n4UDE2HJJqlDMh3Kh4/WkjhvQ9/PpZv/oTqQD0y6gU49gXuJ2urEBud56LCTiCOGxLI1Y0UlcvewX5DkgoK9JQxRyddeMZHD5WAk6mwCuSa4U7mP7EX1CBmhTdPKFu6mDe8mAFuVpp36/6fUbJMpUwTjpe1CSWfrFlpKbY8spq+VWQ69X0PGfELEyL1FD2M5ejvWKRFs0=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate1","request_id":"fca3402bbcf440049befe1f9731733dc"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1267'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate1/pending?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/certificate1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate1/b3d5623f40e4460c90473c3c06884931","kid":"https://vaultname.vault.azure.net/keys/certificate1/b3d5623f40e4460c90473c3c06884931","sid":"https://vaultname.vault.azure.net/secrets/certificate1/b3d5623f40e4460c90473c3c06884931","x5t":"4t3hsrKarW9FRFXE3vsQcV97pYo","cer":"MIIDWjCCAkKgAwIBAgIQJBS+biKVR7OKcDAKiVOqWDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTA0WhcNMjIwMzA2MDAwOTA0WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvegRIytl1T4DSXzZkI8Q6wD+dFa6X1zB0d9uss3YOqdR/ZoC8qX3VgqHnQT0OkNYmbR/D6vJeOsBXx+ldvfgRFSXkHsaUnOCufCg3pFFTitpqgd3y+Ts9g8ptwVB/quS6LPsdlM0aEghS23BH9CTN6+kZQ3LK5ZYFFL9RVXOFX3NBYbUufDfLdlik5L7+0lO9bpeCVOMtfNhWsXp8Cy2Sb/gJE12Mg9Ptv9XkHqLBgWFSNbcWpHl6yeigoTvYWixlMkRMTyUIxYGt1cZiVQXT1fk/wYeezwRefhxWaL/o/qVlX7WQg9V8HHOoKuqKW06tbdkCNQcmic9u9FBtN5+DAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFEE+UdjLUWGKS830dnhOhYT7v160MB0GA1UdDgQWBBRBPlHYy1FhikvN9HZ4ToWE+79etDANBgkqhkiG9w0BAQsFAAOCAQEAuurQnd4wvHMySjp9thJ8Ntx/5xGaRl6XurU6xV/p0LNDJaZjOLO5Hpin8Xp8QzLw6VtSxKFw8gshVdChF577ArqEOxFnTpS8APSFX5Mxgtx+EC4p7KozDz+r0vSjcFZysYoeiOdgRDE1leoer9i7j7ISQueFxR5ySoh1XUry9qZ5+kSIT5OliXDuCImWWnd3KgeUqOEuUr0420q1E3+3dLFgpsS9s1V8cHS1CmHfCRsSRZYYm5Jx3ZkznqipS0b0VC0aNGPCx+P25uhzeCQTIXJjfebLTUQpDky1G1mPdofaCp1ZWEEOt2bClU/7f724SR84qSXweAxSjbLv7oTVog==","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453344,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate1/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453322,"updated":1583453322}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate1/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2449'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate1/?api-version=7.1-preview
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certificate2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate2/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAryClE4pAbTQ9H6pUanym55/GbSxFnEjB8ijLFEhwigdwxc9m//fm5Bepu9CW0aKVaxDdKTjgAvSKGzmQSt8VdcwxSYsaAO2pL4IRTPJsf0mUtNjvuLEKIJDsVLhCAeil0sKQmerPCDzhKeBEZZm8psOJCCz4N90v1NxgQgzkmrPD+GJB1bpUEFWHk+ZoR8dSde8tSJt1Op3U+ZfdO7yk9xe9oYwOXJsffyPWPvNZqL49/hDourgfXsnhSq8Gk/BY/5yapmh3Td3uMcUP5IP6Itn6XSyT62LVh2TS7kNLSalFOHsBMBZ5TwTaq2GjTdyjQCF8G4VPmdcldfg0jYy5ZQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAEWBG0CVTXqen/knlypNjBuAzPhPsEqxvXTnwzwpRiOPklCgi/Cnbx8IA19/Dk7aPwkFHw3AJqELAWlfN4XNia32BxkipHnzM/ELt7AI/sRXt5+hkIISURgbXUbEYHjR69njLCdT1NTCUainTrE2rnFV6gpKRcJ/MrKXxY8zD486KBH43C+kFlm3BCKxR0H5S+c5tkLJHELwfLlBvpgPdXkTQrAZ/gG+E4WeazxIh9vlgLAPynpdoJttPG+iV45I5h2VFULZNtrhrETsXGbZ4JllIeb0s9NOfR+wOJ+G49707gGmiXOCh8xwhu/7PnyENTZJsXOztMO9V/cyGOtjsjM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0plAGROp0p9OyFcpOCP0htPvUGRVb+XUuA6/vqpzbrIAdA1lw+veebA38ZGQkI+OEzMBHM99Mfakamx4RzZu7t/5/wQwIg3lr47XWAtDa+ZRr7RQUBAbrfNbDRiGOkcHXLuurSRuceKuQTlzyEBgAU5cza/zqibyRZG+fk/gh0Lgr1rZ74tV0fXz5XAbAJJneeormDkAMmBv5+bQsVvEPh6fmM0HBE5BhTUzIDTN+KqqX5P3Cy+1C1tmfdzUxtiKz5Q37X/3GUJgc3Cqp+zrlc3qoyS4vJDN1nFsg0yrqNcItWpmP3rJAGMctLPM1SSSYqA4DH7XWBf9Vhkk7KcBjwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHszwyRedqGmvP6nT2DW2T9oP4v+KWinOfzb1ASqeMLT9yxQ7XGZt5ua6/yd3wQb5S4ZKYi5WWUgyQg83/a5gFwQZtjbjhJgm1uaZmvpo3a8AgkdUjcUh13BvQYdga1ebe1gXrQh5HwHlkiHDnvIOzl15oUomdNiFrb00hH5sxd/PBWBKQDRLdDqoC6RN0Fdvo/DMUYNdpyc1xcIsXncRRw/vEoDi14o4SrVfQ8xledpIrWDwEi0fGE+7K50zjrBHSIAkfbnuQYGjZAZ195MqVBhXJqzhqdfxCY7pAkP1lkYnLt2151dojUi90B0w3nCQyke6LXKsvGkogTC7cDDZm0=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"a961577c75d4481f810334cfa940780a"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"53e81374558e404bbf5540e67947937c"}'
         headers:
           cache-control: no-cache
           content-length: '1346'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:34 GMT
    +      date: Fri, 06 Mar 2020 00:09:13 GMT
           expires: '-1'
    -      location: [h, t, t, p, s, ':', /, /, m, x, z, y, f, m, h, g, s, '3', p, w, h,
    -        '2', z, e, b, c, z, b, g, r, w, v, ., v, a, u, l, t, ., a, z, u, r, e, .,
    -        n, e, t, /, c, e, r, t, i, f, i, c, a, t, e, s, /, c, e, r, t, i, f, i, c,
    -        a, t, e, '2', /, p, e, n, d, i, n, g, '?', a, p, i, '-', v, e, r, s, i, o,
    -        n, '=', '7', ., '0', '&', r, e, q, u, e, s, t, _, i, d, '=', a, '9', '6',
    -        '1', '5', '7', '7', c, '7', '5', d, '4', '4', '8', '1', f, '8', '1', '0',
    -        '3', '3', '4', c, f, a, '9', '4', '0', '7', '8', '0', a]
    +      location:
    +      - h
    +      - t
    +      - t
    +      - p
    +      - s
    +      - ':'
    +      - /
    +      - /
    +      - r
    +      - z
    +      - '2'
    +      - g
    +      - '3'
    +      - x
    +      - o
    +      - '6'
    +      - '6'
    +      - e
    +      - '6'
    +      - n
    +      - l
    +      - '5'
    +      - f
    +      - o
    +      - k
    +      - q
    +      - x
    +      - '3'
    +      - k
    +      - m
    +      - m
    +      - q
    +      - .
    +      - v
    +      - a
    +      - u
    +      - l
    +      - t
    +      - .
    +      - a
    +      - z
    +      - u
    +      - r
    +      - e
    +      - .
    +      - n
    +      - e
    +      - t
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - s
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - '2'
    +      - /
    +      - p
    +      - e
    +      - n
    +      - d
    +      - i
    +      - n
    +      - g
    +      - '?'
    +      - a
    +      - p
    +      - i
    +      - '-'
    +      - v
    +      - e
    +      - r
    +      - s
    +      - i
    +      - o
    +      - n
    +      - '='
    +      - '7'
    +      - .
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
    +      - '&'
    +      - r
    +      - e
    +      - q
    +      - u
    +      - e
    +      - s
    +      - t
    +      - _
    +      - i
    +      - d
    +      - '='
    +      - '5'
    +      - '3'
    +      - e
    +      - '8'
    +      - '1'
    +      - '3'
    +      - '7'
    +      - '4'
    +      - '5'
    +      - '5'
    +      - '8'
    +      - e
    +      - '4'
    +      - '0'
    +      - '4'
    +      - b
    +      - b
    +      - f
    +      - '5'
    +      - '5'
    +      - '4'
    +      - '0'
    +      - e
    +      - '6'
    +      - '7'
    +      - '9'
    +      - '4'
    +      - '7'
    +      - '9'
    +      - '3'
    +      - '7'
    +      - c
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
    -    status: {code: 202, message: Accepted}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate2/create, api-version=7.0, '']
    +    status:
    +      code: 202
    +      message: Accepted
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate2/create?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAryClE4pAbTQ9H6pUanym55/GbSxFnEjB8ijLFEhwigdwxc9m//fm5Bepu9CW0aKVaxDdKTjgAvSKGzmQSt8VdcwxSYsaAO2pL4IRTPJsf0mUtNjvuLEKIJDsVLhCAeil0sKQmerPCDzhKeBEZZm8psOJCCz4N90v1NxgQgzkmrPD+GJB1bpUEFWHk+ZoR8dSde8tSJt1Op3U+ZfdO7yk9xe9oYwOXJsffyPWPvNZqL49/hDourgfXsnhSq8Gk/BY/5yapmh3Td3uMcUP5IP6Itn6XSyT62LVh2TS7kNLSalFOHsBMBZ5TwTaq2GjTdyjQCF8G4VPmdcldfg0jYy5ZQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAEWBG0CVTXqen/knlypNjBuAzPhPsEqxvXTnwzwpRiOPklCgi/Cnbx8IA19/Dk7aPwkFHw3AJqELAWlfN4XNia32BxkipHnzM/ELt7AI/sRXt5+hkIISURgbXUbEYHjR69njLCdT1NTCUainTrE2rnFV6gpKRcJ/MrKXxY8zD486KBH43C+kFlm3BCKxR0H5S+c5tkLJHELwfLlBvpgPdXkTQrAZ/gG+E4WeazxIh9vlgLAPynpdoJttPG+iV45I5h2VFULZNtrhrETsXGbZ4JllIeb0s9NOfR+wOJ+G49707gGmiXOCh8xwhu/7PnyENTZJsXOztMO9V/cyGOtjsjM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0plAGROp0p9OyFcpOCP0htPvUGRVb+XUuA6/vqpzbrIAdA1lw+veebA38ZGQkI+OEzMBHM99Mfakamx4RzZu7t/5/wQwIg3lr47XWAtDa+ZRr7RQUBAbrfNbDRiGOkcHXLuurSRuceKuQTlzyEBgAU5cza/zqibyRZG+fk/gh0Lgr1rZ74tV0fXz5XAbAJJneeormDkAMmBv5+bQsVvEPh6fmM0HBE5BhTUzIDTN+KqqX5P3Cy+1C1tmfdzUxtiKz5Q37X/3GUJgc3Cqp+zrlc3qoyS4vJDN1nFsg0yrqNcItWpmP3rJAGMctLPM1SSSYqA4DH7XWBf9Vhkk7KcBjwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHszwyRedqGmvP6nT2DW2T9oP4v+KWinOfzb1ASqeMLT9yxQ7XGZt5ua6/yd3wQb5S4ZKYi5WWUgyQg83/a5gFwQZtjbjhJgm1uaZmvpo3a8AgkdUjcUh13BvQYdga1ebe1gXrQh5HwHlkiHDnvIOzl15oUomdNiFrb00hH5sxd/PBWBKQDRLdDqoC6RN0Fdvo/DMUYNdpyc1xcIsXncRRw/vEoDi14o4SrVfQ8xledpIrWDwEi0fGE+7K50zjrBHSIAkfbnuQYGjZAZ195MqVBhXJqzhqdfxCY7pAkP1lkYnLt2151dojUi90B0w3nCQyke6LXKsvGkogTC7cDDZm0=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"a961577c75d4481f810334cfa940780a"}'}
    -    headers: {cache-control: no-cache, content-length: '1346', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate2/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"53e81374558e404bbf5540e67947937c"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1346'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate2/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAryClE4pAbTQ9H6pUanym55/GbSxFnEjB8ijLFEhwigdwxc9m//fm5Bepu9CW0aKVaxDdKTjgAvSKGzmQSt8VdcwxSYsaAO2pL4IRTPJsf0mUtNjvuLEKIJDsVLhCAeil0sKQmerPCDzhKeBEZZm8psOJCCz4N90v1NxgQgzkmrPD+GJB1bpUEFWHk+ZoR8dSde8tSJt1Op3U+ZfdO7yk9xe9oYwOXJsffyPWPvNZqL49/hDourgfXsnhSq8Gk/BY/5yapmh3Td3uMcUP5IP6Itn6XSyT62LVh2TS7kNLSalFOHsBMBZ5TwTaq2GjTdyjQCF8G4VPmdcldfg0jYy5ZQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAEWBG0CVTXqen/knlypNjBuAzPhPsEqxvXTnwzwpRiOPklCgi/Cnbx8IA19/Dk7aPwkFHw3AJqELAWlfN4XNia32BxkipHnzM/ELt7AI/sRXt5+hkIISURgbXUbEYHjR69njLCdT1NTCUainTrE2rnFV6gpKRcJ/MrKXxY8zD486KBH43C+kFlm3BCKxR0H5S+c5tkLJHELwfLlBvpgPdXkTQrAZ/gG+E4WeazxIh9vlgLAPynpdoJttPG+iV45I5h2VFULZNtrhrETsXGbZ4JllIeb0s9NOfR+wOJ+G49707gGmiXOCh8xwhu/7PnyENTZJsXOztMO9V/cyGOtjsjM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0plAGROp0p9OyFcpOCP0htPvUGRVb+XUuA6/vqpzbrIAdA1lw+veebA38ZGQkI+OEzMBHM99Mfakamx4RzZu7t/5/wQwIg3lr47XWAtDa+ZRr7RQUBAbrfNbDRiGOkcHXLuurSRuceKuQTlzyEBgAU5cza/zqibyRZG+fk/gh0Lgr1rZ74tV0fXz5XAbAJJneeormDkAMmBv5+bQsVvEPh6fmM0HBE5BhTUzIDTN+KqqX5P3Cy+1C1tmfdzUxtiKz5Q37X/3GUJgc3Cqp+zrlc3qoyS4vJDN1nFsg0yrqNcItWpmP3rJAGMctLPM1SSSYqA4DH7XWBf9Vhkk7KcBjwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHszwyRedqGmvP6nT2DW2T9oP4v+KWinOfzb1ASqeMLT9yxQ7XGZt5ua6/yd3wQb5S4ZKYi5WWUgyQg83/a5gFwQZtjbjhJgm1uaZmvpo3a8AgkdUjcUh13BvQYdga1ebe1gXrQh5HwHlkiHDnvIOzl15oUomdNiFrb00hH5sxd/PBWBKQDRLdDqoC6RN0Fdvo/DMUYNdpyc1xcIsXncRRw/vEoDi14o4SrVfQ8xledpIrWDwEi0fGE+7K50zjrBHSIAkfbnuQYGjZAZ195MqVBhXJqzhqdfxCY7pAkP1lkYnLt2151dojUi90B0w3nCQyke6LXKsvGkogTC7cDDZm0=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"a961577c75d4481f810334cfa940780a"}'}
    -    headers: {cache-control: no-cache, content-length: '1346', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:45 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate2/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"53e81374558e404bbf5540e67947937c"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1346'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate2/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate2/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAryClE4pAbTQ9H6pUanym55/GbSxFnEjB8ijLFEhwigdwxc9m//fm5Bepu9CW0aKVaxDdKTjgAvSKGzmQSt8VdcwxSYsaAO2pL4IRTPJsf0mUtNjvuLEKIJDsVLhCAeil0sKQmerPCDzhKeBEZZm8psOJCCz4N90v1NxgQgzkmrPD+GJB1bpUEFWHk+ZoR8dSde8tSJt1Op3U+ZfdO7yk9xe9oYwOXJsffyPWPvNZqL49/hDourgfXsnhSq8Gk/BY/5yapmh3Td3uMcUP5IP6Itn6XSyT62LVh2TS7kNLSalFOHsBMBZ5TwTaq2GjTdyjQCF8G4VPmdcldfg0jYy5ZQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAEWBG0CVTXqen/knlypNjBuAzPhPsEqxvXTnwzwpRiOPklCgi/Cnbx8IA19/Dk7aPwkFHw3AJqELAWlfN4XNia32BxkipHnzM/ELt7AI/sRXt5+hkIISURgbXUbEYHjR69njLCdT1NTCUainTrE2rnFV6gpKRcJ/MrKXxY8zD486KBH43C+kFlm3BCKxR0H5S+c5tkLJHELwfLlBvpgPdXkTQrAZ/gG+E4WeazxIh9vlgLAPynpdoJttPG+iV45I5h2VFULZNtrhrETsXGbZ4JllIeb0s9NOfR+wOJ+G49707gGmiXOCh8xwhu/7PnyENTZJsXOztMO9V/cyGOtjsjM=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate2","request_id":"a961577c75d4481f810334cfa940780a"}'}
    -    headers: {cache-control: no-cache, content-length: '1267', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate2/pending, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0plAGROp0p9OyFcpOCP0htPvUGRVb+XUuA6/vqpzbrIAdA1lw+veebA38ZGQkI+OEzMBHM99Mfakamx4RzZu7t/5/wQwIg3lr47XWAtDa+ZRr7RQUBAbrfNbDRiGOkcHXLuurSRuceKuQTlzyEBgAU5cza/zqibyRZG+fk/gh0Lgr1rZ74tV0fXz5XAbAJJneeormDkAMmBv5+bQsVvEPh6fmM0HBE5BhTUzIDTN+KqqX5P3Cy+1C1tmfdzUxtiKz5Q37X/3GUJgc3Cqp+zrlc3qoyS4vJDN1nFsg0yrqNcItWpmP3rJAGMctLPM1SSSYqA4DH7XWBf9Vhkk7KcBjwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAHszwyRedqGmvP6nT2DW2T9oP4v+KWinOfzb1ASqeMLT9yxQ7XGZt5ua6/yd3wQb5S4ZKYi5WWUgyQg83/a5gFwQZtjbjhJgm1uaZmvpo3a8AgkdUjcUh13BvQYdga1ebe1gXrQh5HwHlkiHDnvIOzl15oUomdNiFrb00hH5sxd/PBWBKQDRLdDqoC6RN0Fdvo/DMUYNdpyc1xcIsXncRRw/vEoDi14o4SrVfQ8xledpIrWDwEi0fGE+7K50zjrBHSIAkfbnuQYGjZAZ195MqVBhXJqzhqdfxCY7pAkP1lkYnLt2151dojUi90B0w3nCQyke6LXKsvGkogTC7cDDZm0=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate2","request_id":"53e81374558e404bbf5540e67947937c"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1267'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate2/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate2/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate2/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/bb1e9de988bf4d129bb8207c4b8ec779","kid":"https://vaultname.vault.azure.net/keys/certificate2/bb1e9de988bf4d129bb8207c4b8ec779","sid":"https://vaultname.vault.azure.net/secrets/certificate2/bb1e9de988bf4d129bb8207c4b8ec779","x5t":"0R8jfPPE3xCrG8tOhVTINb5MSUE","cer":"MIIDWjCCAkKgAwIBAgIQK5wTtPOSRJuvTsWW1yiB1TANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM0OTQ3WhcNMjExMjA2MjM1OTQ3WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvIKUTikBtND0fqlRqfKbnn8ZtLEWcSMHyKMsUSHCKB3DFz2b/9+bkF6m70JbRopVrEN0pOOAC9IobOZBK3xV1zDFJixoA7akvghFM8mx/SZS02O+4sQogkOxUuEIB6KXSwpCZ6s8IPOEp4ERlmbymw4kILPg33S/U3GBCDOSas8P4YkHVulQQVYeT5mhHx1J17y1Im3U6ndT5l907vKT3F72hjA5cmx9/I9Y+81movj3+EOi6uB9eyeFKrwaT8Fj/nJqmaHdN3e4xxQ/kg/oi2fpdLJPrYtWHZNLuQ0tJqUU4ewEwFnlPBNqrYaNN3KNAIXwbhU+Z1yV1+DSNjLllAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFNFktHjbxxPlzIUuyVMx9QyFB9H5MB0GA1UdDgQWBBTRZLR428cT5cyFLslTMfUMhQfR+TANBgkqhkiG9w0BAQsFAAOCAQEAg1E+sDjNM4XwJe/6L8KTgD83TaiBffJ4m+FRZHu8Z/G7Cfv528tdvb6BN1da0OgF5QGDGFzVv/BEH6Rqn3DwsLEOEfCej80gttK3Cevc0XWkd2TNNmTjy2nlF9M3CWcmziv0kbjCJ3fNnetPXEi87ZgQ0gS3hPoUmpbZB01fKKFMycol08zSzKkAqAeyBx5wWUrulSlQCE3Rvi2Ml7Kzfj4LZgcTQxob2LV/FDu/5sJh/ccLev1+ZyBj3QVmBVV06JJ+I3QWEUFPqgGdjC3li2i6SqlEYg6aFdqXxsw7YhMRPg5xLn2l9sK8ADku1xVmuFL6kuY0aEIFLHu4MEF/aw==","attributes":{"enabled":true,"nbf":1575676187,"exp":1638835187,"created":1575676787,"updated":1575676787,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate2/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676775,"updated":1575676775}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2449', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate2/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate2/62ae9c4094e9473d9216c964be82437f","kid":"https://vaultname.vault.azure.net/keys/certificate2/62ae9c4094e9473d9216c964be82437f","sid":"https://vaultname.vault.azure.net/secrets/certificate2/62ae9c4094e9473d9216c964be82437f","x5t":"ZSPH9U1LnVfD_2gvqG2879dGfE4","cer":"MIIDWjCCAkKgAwIBAgIQC9SgiRirSqOTzQQYMsvmZjANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTMwWhcNMjIwMzA2MDAwOTMwWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSmUAZE6nSn07IVyk4I/SG0+9QZFVv5dS4Dr++qnNusgB0DWXD6955sDfxkZCQj44TMwEcz30x9qRqbHhHNm7u3/n/BDAiDeWvjtdYC0Nr5lGvtFBQEBut81sNGIY6Rwdcu66tJG5x4q5BOXPIQGABTlzNr/OqJvJFkb5+T+CHQuCvWtnvi1XR9fPlcBsAkmd56iuYOQAyYG/n5tCxW8Q+Hp+YzQcETkGFNTMgNM34qqpfk/cLL7ULW2Z93NTG2IrPlDftf/cZQmBzcKqn7OuVzeqjJLi8kM3WcWyDTKuo1wi1amY/eskAYxy0s8zVJJJioDgMftdYF/1WGSTspwGPAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFL2TtUr9CKdTsc64LWXFK4gh9/SXMB0GA1UdDgQWBBS9k7VK/QinU7HOuC1lxSuIIff0lzANBgkqhkiG9w0BAQsFAAOCAQEAUvU4n98/cTK0Rj0xvSy5lVfqtf4D+tyrQY2IXqFZkSneBAO13GDZvjEkuXim0XewgJRNhRmL4BnYwLn7/dgWlWD1n11bxRNdGXUcN4g6c1hnlj/lLnd9Xw5R0ShrzO0bb4f9EDYbyP4eqh3wOwpmSetAB/0rEXn8YoWrER0lEild5STOvzwuqT2RmcfbVBBAffBuVzANGCrs32P1YnLo3FsJrP3cIIe2xAI6UqGUxy+dxkL8GDObQjQ2+4eFt6W1D0sKppMLwTSTuSp0nJUieuMvMD3NDsb8gHkqszvqXHrUuz5lMS+7u7GZey1V47rmWDBGDTzjN16lffnnjz9Tdw==","attributes":{"enabled":true,"nbf":1583452770,"exp":1646525370,"created":1583453370,"updated":1583453370,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate2/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453353,"updated":1583453353}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate2/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2449'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate2/?api-version=7.1-preview
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/certificate3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate3/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjkcyOIqLZfpa7T59eBGxMh1+PMV/irovwUjdTSGOWbsEzeoMPOFMUn6gw58clfr8KIcdGpRnMjL3wSEXmdKnF6sGaJOmrVjApkD7qxrVAUD3ih2ct/7NfBxp0qQVma3HRT3IHdfOnASWkjDG62X78Hc8Cup7sN/WxWJSAnqm1QE7FKoYS78k8TMJbZYKGAz6Sc3hXctFg2W2o5MaR5FZQoi6r5pmUKI/7SKq6CD6xRUufuH81uoZhDPx9Xq1fBZwJXdXO8aLsum8T/SE2vYWD7on1bMLjrrTGHPEzf3mCHxHp3vX77XXggHktyrqjJK8hK2oPbuKZHluNA3BdOiXNwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACPPLxFUWIyju6OLg9vz7fh3Pgt/X1OYIIFJjvTV1ZzM9eSmpXZcvSPt8YenwkHl1GCoTAu0UYgYKkvq978BdCUCDTIkhuT014K05Ywxr1+tipA9dbfU2eHuN1UzMWYDYlAzF4Yel1QY/kQ1EcMhzNbh7bRLXxdP526UH5ys72fKcheWEQes+cecg6vzLEKl0dlXei/QPwa0IogLr3yqEHRWtUsDe5iWV1Ha1Lk4VU38gcIegveR2NfZ0z8LdQaILPm1dIZXoh6hNKQg7t85L/7ralSmqLoo/VCJh6uFyCUYnqiKJiTVA5CYIfiq/oWa4c+P8E5eYD1LkMCnlT/vWDs=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtBjsbHbYZI5qrrV1cjKtW6zH1IT/QF93WawzUbLF8CFxHLxlfCNGUoBNHjiNDz+LGCn3pqkSWYoDHdwbqH7PQ7JVB+pche2EOr1kD2bCQsfSszsV3af4RlF87xLCjWOyi3UHaxl07aOwSkA1Tpxw7X1CBZpaq+aesDFBs2Zbd6gRWGPosdONjnADLz6IEJIZx1/XNKnxQ0HZAuPlHUklRKoNKCb2VYt/Op533eSpQGTgovufyB0e9653dlR4E+7AV+Ue8+gBT9lO1Ud1284E9duHhlJ076z8UICliw4XP+x34cblKv6YmPkhxaB+l3cnFI2Esjqx+Mj69K3B4xPyRQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAJFejUa224rJzkVJwSQHxdbA1PgJlV2fqDUx4eLO8T3gJnxk4xIDIf+/V8WUbUdBhwvxRMfembYiqedtKrwV1bHi/P+WxKfIWrXwTHoAYhZebflVJiYMAGPiF0SWDzw1h367UAVckPde7nzyBV6LgRvyt69XK6lraCmeWV/L8Lmi/NnBbwk0hnQWYvLM5Pq3pPi5QHQZuJZ/E42Azu0d36ujh7HOOCGsbktdmEnv+E1m49oYM7bmdZUzCgAH0h3pU3fLD7qMDOqeX6/OFdxJzETqAcn8iDvShcb5SEfsO48yFuLtm1uuGqNun8ExWYaPe2lP9F2f0ucIkIOeGedkjsE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"149e9ae963bf4397bb81baf8e36875ef"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"00bb928773084ef286584e0a42e5d12a"}'
         headers:
           cache-control: no-cache
           content-length: '1346'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:01 GMT
    +      date: Fri, 06 Mar 2020 00:09:34 GMT
           expires: '-1'
    -      location: [h, t, t, p, s, ':', /, /, m, x, z, y, f, m, h, g, s, '3', p, w, h,
    -        '2', z, e, b, c, z, b, g, r, w, v, ., v, a, u, l, t, ., a, z, u, r, e, .,
    -        n, e, t, /, c, e, r, t, i, f, i, c, a, t, e, s, /, c, e, r, t, i, f, i, c,
    -        a, t, e, '3', /, p, e, n, d, i, n, g, '?', a, p, i, '-', v, e, r, s, i, o,
    -        n, '=', '7', ., '0', '&', r, e, q, u, e, s, t, _, i, d, '=', '1', '4', '9',
    -        e, '9', a, e, '9', '6', '3', b, f, '4', '3', '9', '7', b, b, '8', '1', b,
    -        a, f, '8', e, '3', '6', '8', '7', '5', e, f]
    +      location:
    +      - h
    +      - t
    +      - t
    +      - p
    +      - s
    +      - ':'
    +      - /
    +      - /
    +      - r
    +      - z
    +      - '2'
    +      - g
    +      - '3'
    +      - x
    +      - o
    +      - '6'
    +      - '6'
    +      - e
    +      - '6'
    +      - n
    +      - l
    +      - '5'
    +      - f
    +      - o
    +      - k
    +      - q
    +      - x
    +      - '3'
    +      - k
    +      - m
    +      - m
    +      - q
    +      - .
    +      - v
    +      - a
    +      - u
    +      - l
    +      - t
    +      - .
    +      - a
    +      - z
    +      - u
    +      - r
    +      - e
    +      - .
    +      - n
    +      - e
    +      - t
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - s
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - '3'
    +      - /
    +      - p
    +      - e
    +      - n
    +      - d
    +      - i
    +      - n
    +      - g
    +      - '?'
    +      - a
    +      - p
    +      - i
    +      - '-'
    +      - v
    +      - e
    +      - r
    +      - s
    +      - i
    +      - o
    +      - n
    +      - '='
    +      - '7'
    +      - .
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
    +      - '&'
    +      - r
    +      - e
    +      - q
    +      - u
    +      - e
    +      - s
    +      - t
    +      - _
    +      - i
    +      - d
    +      - '='
    +      - '0'
    +      - '0'
    +      - b
    +      - b
    +      - '9'
    +      - '2'
    +      - '8'
    +      - '7'
    +      - '7'
    +      - '3'
    +      - '0'
    +      - '8'
    +      - '4'
    +      - e
    +      - f
    +      - '2'
    +      - '8'
    +      - '6'
    +      - '5'
    +      - '8'
    +      - '4'
    +      - e
    +      - '0'
    +      - a
    +      - '4'
    +      - '2'
    +      - e
    +      - '5'
    +      - d
    +      - '1'
    +      - '2'
    +      - a
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
    -    status: {code: 202, message: Accepted}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate3/create, api-version=7.0, '']
    +    status:
    +      code: 202
    +      message: Accepted
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate3/create?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjkcyOIqLZfpa7T59eBGxMh1+PMV/irovwUjdTSGOWbsEzeoMPOFMUn6gw58clfr8KIcdGpRnMjL3wSEXmdKnF6sGaJOmrVjApkD7qxrVAUD3ih2ct/7NfBxp0qQVma3HRT3IHdfOnASWkjDG62X78Hc8Cup7sN/WxWJSAnqm1QE7FKoYS78k8TMJbZYKGAz6Sc3hXctFg2W2o5MaR5FZQoi6r5pmUKI/7SKq6CD6xRUufuH81uoZhDPx9Xq1fBZwJXdXO8aLsum8T/SE2vYWD7on1bMLjrrTGHPEzf3mCHxHp3vX77XXggHktyrqjJK8hK2oPbuKZHluNA3BdOiXNwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACPPLxFUWIyju6OLg9vz7fh3Pgt/X1OYIIFJjvTV1ZzM9eSmpXZcvSPt8YenwkHl1GCoTAu0UYgYKkvq978BdCUCDTIkhuT014K05Ywxr1+tipA9dbfU2eHuN1UzMWYDYlAzF4Yel1QY/kQ1EcMhzNbh7bRLXxdP526UH5ys72fKcheWEQes+cecg6vzLEKl0dlXei/QPwa0IogLr3yqEHRWtUsDe5iWV1Ha1Lk4VU38gcIegveR2NfZ0z8LdQaILPm1dIZXoh6hNKQg7t85L/7ralSmqLoo/VCJh6uFyCUYnqiKJiTVA5CYIfiq/oWa4c+P8E5eYD1LkMCnlT/vWDs=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtBjsbHbYZI5qrrV1cjKtW6zH1IT/QF93WawzUbLF8CFxHLxlfCNGUoBNHjiNDz+LGCn3pqkSWYoDHdwbqH7PQ7JVB+pche2EOr1kD2bCQsfSszsV3af4RlF87xLCjWOyi3UHaxl07aOwSkA1Tpxw7X1CBZpaq+aesDFBs2Zbd6gRWGPosdONjnADLz6IEJIZx1/XNKnxQ0HZAuPlHUklRKoNKCb2VYt/Op533eSpQGTgovufyB0e9653dlR4E+7AV+Ue8+gBT9lO1Ud1284E9duHhlJ076z8UICliw4XP+x34cblKv6YmPkhxaB+l3cnFI2Esjqx+Mj69K3B4xPyRQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAJFejUa224rJzkVJwSQHxdbA1PgJlV2fqDUx4eLO8T3gJnxk4xIDIf+/V8WUbUdBhwvxRMfembYiqedtKrwV1bHi/P+WxKfIWrXwTHoAYhZebflVJiYMAGPiF0SWDzw1h367UAVckPde7nzyBV6LgRvyt69XK6lraCmeWV/L8Lmi/NnBbwk0hnQWYvLM5Pq3pPi5QHQZuJZ/E42Azu0d36ujh7HOOCGsbktdmEnv+E1m49oYM7bmdZUzCgAH0h3pU3fLD7qMDOqeX6/OFdxJzETqAcn8iDvShcb5SEfsO48yFuLtm1uuGqNun8ExWYaPe2lP9F2f0ucIkIOeGedkjsE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"149e9ae963bf4397bb81baf8e36875ef"}'}
    -    headers: {cache-control: no-cache, content-length: '1346', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate3/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"00bb928773084ef286584e0a42e5d12a"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1346'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjkcyOIqLZfpa7T59eBGxMh1+PMV/irovwUjdTSGOWbsEzeoMPOFMUn6gw58clfr8KIcdGpRnMjL3wSEXmdKnF6sGaJOmrVjApkD7qxrVAUD3ih2ct/7NfBxp0qQVma3HRT3IHdfOnASWkjDG62X78Hc8Cup7sN/WxWJSAnqm1QE7FKoYS78k8TMJbZYKGAz6Sc3hXctFg2W2o5MaR5FZQoi6r5pmUKI/7SKq6CD6xRUufuH81uoZhDPx9Xq1fBZwJXdXO8aLsum8T/SE2vYWD7on1bMLjrrTGHPEzf3mCHxHp3vX77XXggHktyrqjJK8hK2oPbuKZHluNA3BdOiXNwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACPPLxFUWIyju6OLg9vz7fh3Pgt/X1OYIIFJjvTV1ZzM9eSmpXZcvSPt8YenwkHl1GCoTAu0UYgYKkvq978BdCUCDTIkhuT014K05Ywxr1+tipA9dbfU2eHuN1UzMWYDYlAzF4Yel1QY/kQ1EcMhzNbh7bRLXxdP526UH5ys72fKcheWEQes+cecg6vzLEKl0dlXei/QPwa0IogLr3yqEHRWtUsDe5iWV1Ha1Lk4VU38gcIegveR2NfZ0z8LdQaILPm1dIZXoh6hNKQg7t85L/7ralSmqLoo/VCJh6uFyCUYnqiKJiTVA5CYIfiq/oWa4c+P8E5eYD1LkMCnlT/vWDs=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtBjsbHbYZI5qrrV1cjKtW6zH1IT/QF93WawzUbLF8CFxHLxlfCNGUoBNHjiNDz+LGCn3pqkSWYoDHdwbqH7PQ7JVB+pche2EOr1kD2bCQsfSszsV3af4RlF87xLCjWOyi3UHaxl07aOwSkA1Tpxw7X1CBZpaq+aesDFBs2Zbd6gRWGPosdONjnADLz6IEJIZx1/XNKnxQ0HZAuPlHUklRKoNKCb2VYt/Op533eSpQGTgovufyB0e9653dlR4E+7AV+Ue8+gBT9lO1Ud1284E9duHhlJ076z8UICliw4XP+x34cblKv6YmPkhxaB+l3cnFI2Esjqx+Mj69K3B4xPyRQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAJFejUa224rJzkVJwSQHxdbA1PgJlV2fqDUx4eLO8T3gJnxk4xIDIf+/V8WUbUdBhwvxRMfembYiqedtKrwV1bHi/P+WxKfIWrXwTHoAYhZebflVJiYMAGPiF0SWDzw1h367UAVckPde7nzyBV6LgRvyt69XK6lraCmeWV/L8Lmi/NnBbwk0hnQWYvLM5Pq3pPi5QHQZuJZ/E42Azu0d36ujh7HOOCGsbktdmEnv+E1m49oYM7bmdZUzCgAH0h3pU3fLD7qMDOqeX6/OFdxJzETqAcn8iDvShcb5SEfsO48yFuLtm1uuGqNun8ExWYaPe2lP9F2f0ucIkIOeGedkjsE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"149e9ae963bf4397bb81baf8e36875ef"}'}
    -    headers: {cache-control: no-cache, content-length: '1346', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate3/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"00bb928773084ef286584e0a42e5d12a"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1346'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjkcyOIqLZfpa7T59eBGxMh1+PMV/irovwUjdTSGOWbsEzeoMPOFMUn6gw58clfr8KIcdGpRnMjL3wSEXmdKnF6sGaJOmrVjApkD7qxrVAUD3ih2ct/7NfBxp0qQVma3HRT3IHdfOnASWkjDG62X78Hc8Cup7sN/WxWJSAnqm1QE7FKoYS78k8TMJbZYKGAz6Sc3hXctFg2W2o5MaR5FZQoi6r5pmUKI/7SKq6CD6xRUufuH81uoZhDPx9Xq1fBZwJXdXO8aLsum8T/SE2vYWD7on1bMLjrrTGHPEzf3mCHxHp3vX77XXggHktyrqjJK8hK2oPbuKZHluNA3BdOiXNwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACPPLxFUWIyju6OLg9vz7fh3Pgt/X1OYIIFJjvTV1ZzM9eSmpXZcvSPt8YenwkHl1GCoTAu0UYgYKkvq978BdCUCDTIkhuT014K05Ywxr1+tipA9dbfU2eHuN1UzMWYDYlAzF4Yel1QY/kQ1EcMhzNbh7bRLXxdP526UH5ys72fKcheWEQes+cecg6vzLEKl0dlXei/QPwa0IogLr3yqEHRWtUsDe5iWV1Ha1Lk4VU38gcIegveR2NfZ0z8LdQaILPm1dIZXoh6hNKQg7t85L/7ralSmqLoo/VCJh6uFyCUYnqiKJiTVA5CYIfiq/oWa4c+P8E5eYD1LkMCnlT/vWDs=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtBjsbHbYZI5qrrV1cjKtW6zH1IT/QF93WawzUbLF8CFxHLxlfCNGUoBNHjiNDz+LGCn3pqkSWYoDHdwbqH7PQ7JVB+pche2EOr1kD2bCQsfSszsV3af4RlF87xLCjWOyi3UHaxl07aOwSkA1Tpxw7X1CBZpaq+aesDFBs2Zbd6gRWGPosdONjnADLz6IEJIZx1/XNKnxQ0HZAuPlHUklRKoNKCb2VYt/Op533eSpQGTgovufyB0e9653dlR4E+7AV+Ue8+gBT9lO1Ud1284E9duHhlJ076z8UICliw4XP+x34cblKv6YmPkhxaB+l3cnFI2Esjqx+Mj69K3B4xPyRQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAJFejUa224rJzkVJwSQHxdbA1PgJlV2fqDUx4eLO8T3gJnxk4xIDIf+/V8WUbUdBhwvxRMfembYiqedtKrwV1bHi/P+WxKfIWrXwTHoAYhZebflVJiYMAGPiF0SWDzw1h367UAVckPde7nzyBV6LgRvyt69XK6lraCmeWV/L8Lmi/NnBbwk0hnQWYvLM5Pq3pPi5QHQZuJZ/E42Azu0d36ujh7HOOCGsbktdmEnv+E1m49oYM7bmdZUzCgAH0h3pU3fLD7qMDOqeX6/OFdxJzETqAcn8iDvShcb5SEfsO48yFuLtm1uuGqNun8ExWYaPe2lP9F2f0ucIkIOeGedkjsE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"149e9ae963bf4397bb81baf8e36875ef"}'}
    -    headers: {cache-control: no-cache, content-length: '1346', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:21 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate3/pending, api-version=7.0, '']
    +        time based on the issuer provider. Please check again later.","request_id":"00bb928773084ef286584e0a42e5d12a"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1346'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:09:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjkcyOIqLZfpa7T59eBGxMh1+PMV/irovwUjdTSGOWbsEzeoMPOFMUn6gw58clfr8KIcdGpRnMjL3wSEXmdKnF6sGaJOmrVjApkD7qxrVAUD3ih2ct/7NfBxp0qQVma3HRT3IHdfOnASWkjDG62X78Hc8Cup7sN/WxWJSAnqm1QE7FKoYS78k8TMJbZYKGAz6Sc3hXctFg2W2o5MaR5FZQoi6r5pmUKI/7SKq6CD6xRUufuH81uoZhDPx9Xq1fBZwJXdXO8aLsum8T/SE2vYWD7on1bMLjrrTGHPEzf3mCHxHp3vX77XXggHktyrqjJK8hK2oPbuKZHluNA3BdOiXNwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACPPLxFUWIyju6OLg9vz7fh3Pgt/X1OYIIFJjvTV1ZzM9eSmpXZcvSPt8YenwkHl1GCoTAu0UYgYKkvq978BdCUCDTIkhuT014K05Ywxr1+tipA9dbfU2eHuN1UzMWYDYlAzF4Yel1QY/kQ1EcMhzNbh7bRLXxdP526UH5ys72fKcheWEQes+cecg6vzLEKl0dlXei/QPwa0IogLr3yqEHRWtUsDe5iWV1Ha1Lk4VU38gcIegveR2NfZ0z8LdQaILPm1dIZXoh6hNKQg7t85L/7ralSmqLoo/VCJh6uFyCUYnqiKJiTVA5CYIfiq/oWa4c+P8E5eYD1LkMCnlT/vWDs=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate3","request_id":"149e9ae963bf4397bb81baf8e36875ef"}'}
    -    headers: {cache-control: no-cache, content-length: '1267', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:31 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate3/pending, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtBjsbHbYZI5qrrV1cjKtW6zH1IT/QF93WawzUbLF8CFxHLxlfCNGUoBNHjiNDz+LGCn3pqkSWYoDHdwbqH7PQ7JVB+pche2EOr1kD2bCQsfSszsV3af4RlF87xLCjWOyi3UHaxl07aOwSkA1Tpxw7X1CBZpaq+aesDFBs2Zbd6gRWGPosdONjnADLz6IEJIZx1/XNKnxQ0HZAuPlHUklRKoNKCb2VYt/Op533eSpQGTgovufyB0e9653dlR4E+7AV+Ue8+gBT9lO1Ud1284E9duHhlJ076z8UICliw4XP+x34cblKv6YmPkhxaB+l3cnFI2Esjqx+Mj69K3B4xPyRQIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAJFejUa224rJzkVJwSQHxdbA1PgJlV2fqDUx4eLO8T3gJnxk4xIDIf+/V8WUbUdBhwvxRMfembYiqedtKrwV1bHi/P+WxKfIWrXwTHoAYhZebflVJiYMAGPiF0SWDzw1h367UAVckPde7nzyBV6LgRvyt69XK6lraCmeWV/L8Lmi/NnBbwk0hnQWYvLM5Pq3pPi5QHQZuJZ/E42Azu0d36ujh7HOOCGsbktdmEnv+E1m49oYM7bmdZUzCgAH0h3pU3fLD7qMDOqeX6/OFdxJzETqAcn8iDvShcb5SEfsO48yFuLtm1uuGqNun8ExWYaPe2lP9F2f0ucIkIOeGedkjsE=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/certificate3","request_id":"00bb928773084ef286584e0a42e5d12a"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1267'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate3/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/certificate3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/certificate3/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/8cc50d6b208742cfb5f8a5fe5ad4f5b3","kid":"https://vaultname.vault.azure.net/keys/certificate3/8cc50d6b208742cfb5f8a5fe5ad4f5b3","sid":"https://vaultname.vault.azure.net/secrets/certificate3/8cc50d6b208742cfb5f8a5fe5ad4f5b3","x5t":"0gcgEGJB8SCnCEsmYxXoG8hJisA","cer":"MIIDWjCCAkKgAwIBAgIQXOm2Bl93TYKREnT2cEttHDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1MDI2WhcNMjExMjA3MDAwMDI2WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCORzI4iotl+lrtPn14EbEyHX48xX+Kui/BSN1NIY5ZuwTN6gw84UxSfqDDnxyV+vwohx0alGcyMvfBIReZ0qcXqwZok6atWMCmQPurGtUBQPeKHZy3/s18HGnSpBWZrcdFPcgd186cBJaSMMbrZfvwdzwK6nuw39bFYlICeqbVATsUqhhLvyTxMwltlgoYDPpJzeFdy0WDZbajkxpHkVlCiLqvmmZQoj/tIqroIPrFFS5+4fzW6hmEM/H1erV8FnAld1c7xouy6bxP9ITa9hYPuifVswuOutMYc8TN/eYIfEene9fvtdeCAeS3KuqMkryErag9u4pkeW40DcF06Jc3AgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFAaQEaacDDTfEgTFgkzCrIwhGVBxMB0GA1UdDgQWBBQGkBGmnAw03xIExYJMwqyMIRlQcTANBgkqhkiG9w0BAQsFAAOCAQEAe2O2UhxVl3z6yNAJyIYs26BV39Gs2orbMk8pRTXUEIggdtlRLCQFaiRXVsqPZW1jnv1v3apUDfdBuKzkEOEjIg+pjbzQKP6M6wtUxhEXXhOQdmsKVo1rDIuZwihBZzXwRyv9Wel/jfOSRqZgeUCovRq84ZdwFI19AN6+R724CprAMntwJWQTuoRFzsDmXJKDtMibzIrrsazksqnHt+rgKRp7uk3ECMMXatYazfS3S+HXDlItmv7XxYes8SqB5rIEsYaKiKT8WFHVNTXfrsb2zwrVmvnuKUT3RJqkFIjCPT4D7MEzEsMxyiT7NDnlIEz8/rhHyOM4fV8FDZVMvf/NCw==","attributes":{"enabled":true,"nbf":1575676226,"exp":1638835226,"created":1575676826,"updated":1575676826,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate3/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676801,"updated":1575676801}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2449', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/certificate3/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/certificate3/4a08cce097d74633adafe129c1aa2ec6","kid":"https://vaultname.vault.azure.net/keys/certificate3/4a08cce097d74633adafe129c1aa2ec6","sid":"https://vaultname.vault.azure.net/secrets/certificate3/4a08cce097d74633adafe129c1aa2ec6","x5t":"zdpGWX18pt9F-rodf33VOajYeMc","cer":"MIIDWjCCAkKgAwIBAgIQbjpEozMNSOWnfa3XGltdODANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA1MjM1OTU2WhcNMjIwMzA2MDAwOTU2WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0GOxsdthkjmqutXVyMq1brMfUhP9AX3dZrDNRssXwIXEcvGV8I0ZSgE0eOI0PP4sYKfemqRJZigMd3Buofs9DslUH6lyF7YQ6vWQPZsJCx9KzOxXdp/hGUXzvEsKNY7KLdQdrGXTto7BKQDVOnHDtfUIFmlqr5p6wMUGzZlt3qBFYY+ix042OcAMvPogQkhnHX9c0qfFDQdkC4+UdSSVEqg0oJvZVi386nnfd5KlAZOCi+5/IHR73rnd2VHgT7sBX5R7z6AFP2U7VR3XbzgT124eGUnTvrPxQgKWLDhc/7HfhxuUq/piY+SHFoH6XdycUjYSyOrH4yPr0rcHjE/JFAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFAaRr2jVyM6G+AnYc0/8S75WsruPMB0GA1UdDgQWBBQGka9o1cjOhvgJ2HNP/Eu+VrK7jzANBgkqhkiG9w0BAQsFAAOCAQEAsQ3T+Y8ps73sVeA+0NE8QFBssgu44gdg2ByHiM8/ZV+Ykr7c30N5nLTp+h0MzUYEC7ECofEZANXAPIBlPjJaouWJJPDBIl3jtn8rpSFDE9IrqnNuWm0jGe0c6sM9rBWRxrdXC33WRJLmEM05I4FoeKjU64EqpEUWet0IH5fuZhn1Aap182NfdX80WEEPUo1JLcrPX9I0rWmwGrbfoo49fe+XiHARJjNHe8VeDvqgSnef/qrY4GiBSRsxMCwhcQq6bRKoSE0PX97WSUT+EzpTNXPU2RtSabM7aBU003tjiqoJe23RD8AW/OmGoxAz/0Ha7hUvCWx1xck7sFkjpqTqfA==","attributes":{"enabled":true,"nbf":1583452796,"exp":1646525396,"created":1583453396,"updated":1583453396,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/certificate3/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453374,"updated":1583453374}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/certificate3/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2449'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/certificate3/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/certificate0","x5t":"zH015G_fF80Oa4LDTKlEjI5f-n4","attributes":{"enabled":true,"nbf":1575676149,"exp":1638835149,"created":1575676749,"updated":1575676749},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certificate1","x5t":"41HTUrSJqP-xwF_cW1pV1Ta-OYE","attributes":{"enabled":true,"nbf":1575676166,"exp":1638835166,"created":1575676766,"updated":1575676766},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certificate2","x5t":"0R8jfPPE3xCrG8tOhVTINb5MSUE","attributes":{"enabled":true,"nbf":1575676187,"exp":1638835187,"created":1575676787,"updated":1575676787},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certificate3","x5t":"0gcgEGJB8SCnCEsmYxXoG8hJisA","attributes":{"enabled":true,"nbf":1575676226,"exp":1638835226,"created":1575676826,"updated":1575676826},"subject":""}],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '983', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates, api-version=7.0, '']
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/certificate0","x5t":"0aNPEESznAQwnGfNAV7ZIjS5AAM","attributes":{"enabled":true,"nbf":1583452719,"exp":1646525319,"created":1583453319,"updated":1583453319},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certificate1","x5t":"4t3hsrKarW9FRFXE3vsQcV97pYo","attributes":{"enabled":true,"nbf":1583452744,"exp":1646525344,"created":1583453344,"updated":1583453344},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certificate2","x5t":"ZSPH9U1LnVfD_2gvqG2879dGfE4","attributes":{"enabled":true,"nbf":1583452770,"exp":1646525370,"created":1583453370,"updated":1583453370},"subject":""},{"id":"https://vaultname.vault.azure.net/certificates/certificate3","x5t":"zdpGWX18pt9F-rodf33VOajYeMc","attributes":{"enabled":true,"nbf":1583452796,"exp":1646525396,"created":1583453396,"updated":1583453396},"subject":""}],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '983'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/versions?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/versions?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '28', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /certificates/cert-name/versions, api-version=7.0, '']
    +    body:
    +      string: '{"value":[],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '28'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/certificates/cert-name/versions?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '28', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mxzyfmhgs3pwh2zebczbgrwv.vault.azure.net,
    -        /deletedcertificates, api-version=7.0, '']
    +    body:
    +      string: '{"value":[],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '28'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rz2g3xo66e6nl5fokqx3kmmq.vault.azure.net/deletedcertificates?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_recover.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_recover.yaml
    index 2f6bd5caa260..320de1ab7bc2 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_recover.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_certificate_recover.yaml
    @@ -2,603 +2,1278 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/create, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
     - request:
         body: '{"policy": {"key_props": {"exportable": true, "kty": "RSA", "key_size":
           2048, "reuse_key": false}, "secret_props": {"contentType": "application/x-pkcs12"},
           "x509_props": {"subject": "CN=*.microsoft.com", "sans": {"dns_names": ["sdk.azure-int.net"]},
           "validity_months": 24}, "issuer": {"name": "Self"}}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['302']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '302'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3bfeTfjKGsWzww7ec1exJhsuKIwYB1Sl149hbTlyN8jg3ZeMGXARiZXF7kmV2fZO71du7CkIe6KFwahsuQuxZZWqgDciyciXBqLFfwuz/O8ACxq+RL85XrJ6GtE4UCXQxC82oZC8rI/7aGfi2h6CD+UgAkXpEL0Xu9N1i4aDNYam2yJAbHZndo+zHngVOxeh3k+vr5ml4Zf1jZ7/u/PZj4IMqvOeuyzGmscnk0KglqC3g6TtMczpwlv0cv230DLID+gcQ6Nx/d1XtmNZJ1CKtdrYaP972V5t5ZmYf9XPkaxpo0+SDoq6PqvBIxTHQDaSP6nMCB1EQq4cGCtZCtt6LwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAI0adbQb98LCG4pYfB+I8hB4kmfPfIwn0wOuNrfl92sX2hcyKNoGI9XT7hZ2+8zGsk3uKEWsMMe2osHlJy4SSb95CcyPyDpW7amutyLJt/VZd7QNDPAZZNW0FMW4L+bRQW9kbkIvRFPSlALcKdXdzR0lfOCCltByP05mxI1jrzIwllJPvPLi7c1xZfuOKhDYOqh+EJtudS+5EEewoQIv0MdYqH/1gXFbvcoloIXeGOnK4g5jFph8XXql1cGLst6wbOsazDIpzSJkK5RRHTyAaPEh4p8aRYtFqIsG+sorEjaHM4at3P/CqcnP7BhXR43M8rcDM1+aGlYS+UP1z5zglNI=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAog1ikf8i+rctsMW1M6/N9PUVfUjdt98GzaDhe8TeWoLg082MdLvxDFlfozyfWvmTV33kX2eqXQOo9zFf/aYa+7iZzufDDDgVxRSNU29jVLvp1kfuuLrkHcVXFN7dcBzhzK8SQ2X7MCLb66BO2c2A99brY/SzzjkZ63Yv2GaU85q/kisEz7VnAMdXyElCyB7Y9Q+1ZEbisq0B1X6BMXpaiMhB4bdtOnbqG18FhVQhI5JS5Ms3T0Fj9yyEVzoCDeP3ZdIBlLRRNG0rd5V6bjo+0TPj9qWN1Rbr8Ol7lzJqZFDW62c6vJubwc8B4/Zyp+Qd58HvgVboGmzaPO41I6gPcwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADHdoIqeSBK76D12uZUzK/E4AUvNtq0TsK4LDeDK5stsscAhfq8mU8iKPuZz3KSIaCLUyG5wkZ6tbvmCce3/HEym84Cg6xNGJ/oqByrJThcf9dIfejGnf3/8zqM5CgBT1Lyb1ae3tf+1WgOgUihmJkxZbmzmTPworxJJ2qu9zI+IlKWer5v3CY3gbglRdXp5kEhj0D9SP79gMwr5e8oBDCEJ0I/GoqYy97pLQEtrnaws3DFdcQX6c8/5ZOlpyIQkDTpiZaQLaL48WzUqGC6yWO8vUhpms7ZwVd45e9EqePoiUSTjgr2UppoPgBfff1F7N/8L/wnUd4WzVtLyscrIXzw=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"442a5a4c6a1b44dca9f5a31d9b555033"}'}
    +        time based on the issuer provider. Please check again later.","request_id":"2d8ef76de6f84968800b0a67ea4e036e"}'
         headers:
           cache-control: no-cache
           content-length: '1343'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:30 GMT
    +      date: Fri, 06 Mar 2020 00:10:52 GMT
           expires: '-1'
    -      location: [h, t, t, p, s, ':', /, /, m, x, '5', f, o, z, j, i, e, '5', l, r,
    -        y, h, '4', '4', f, o, x, '5', a, y, k, k, ., v, a, u, l, t, ., a, z, u, r,
    -        e, ., n, e, t, /, c, e, r, t, i, f, i, c, a, t, e, s, /, c, e, r, t, '-',
    -        n, a, m, e, /, p, e, n, d, i, n, g, '?', a, p, i, '-', v, e, r, s, i, o, n,
    -        '=', '7', ., '0', '&', r, e, q, u, e, s, t, _, i, d, '=', '4', '4', '2', a,
    -        '5', a, '4', c, '6', a, '1', b, '4', '4', d, c, a, '9', f, '5', a, '3', '1',
    -        d, '9', b, '5', '5', '5', '0', '3', '3']
    +      location:
    +      - h
    +      - t
    +      - t
    +      - p
    +      - s
    +      - ':'
    +      - /
    +      - /
    +      - r
    +      - r
    +      - m
    +      - b
    +      - f
    +      - v
    +      - q
    +      - x
    +      - '6'
    +      - z
    +      - y
    +      - x
    +      - q
    +      - a
    +      - a
    +      - '5'
    +      - w
    +      - '4'
    +      - k
    +      - v
    +      - n
    +      - l
    +      - n
    +      - c
    +      - .
    +      - v
    +      - a
    +      - u
    +      - l
    +      - t
    +      - .
    +      - a
    +      - z
    +      - u
    +      - r
    +      - e
    +      - .
    +      - n
    +      - e
    +      - t
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - i
    +      - f
    +      - i
    +      - c
    +      - a
    +      - t
    +      - e
    +      - s
    +      - /
    +      - c
    +      - e
    +      - r
    +      - t
    +      - '-'
    +      - n
    +      - a
    +      - m
    +      - e
    +      - /
    +      - p
    +      - e
    +      - n
    +      - d
    +      - i
    +      - n
    +      - g
    +      - '?'
    +      - a
    +      - p
    +      - i
    +      - '-'
    +      - v
    +      - e
    +      - r
    +      - s
    +      - i
    +      - o
    +      - n
    +      - '='
    +      - '7'
    +      - .
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
    +      - '&'
    +      - r
    +      - e
    +      - q
    +      - u
    +      - e
    +      - s
    +      - t
    +      - _
    +      - i
    +      - d
    +      - '='
    +      - '2'
    +      - d
    +      - '8'
    +      - e
    +      - f
    +      - '7'
    +      - '6'
    +      - d
    +      - e
    +      - '6'
    +      - f
    +      - '8'
    +      - '4'
    +      - '9'
    +      - '6'
    +      - '8'
    +      - '8'
    +      - '0'
    +      - '0'
    +      - b
    +      - '0'
    +      - a
    +      - '6'
    +      - '7'
    +      - e
    +      - a
    +      - '4'
    +      - e
    +      - '0'
    +      - '3'
    +      - '6'
    +      - e
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
    -    status: {code: 202, message: Accepted}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/create, api-version=7.0, '']
    +    status:
    +      code: 202
    +      message: Accepted
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/create?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3bfeTfjKGsWzww7ec1exJhsuKIwYB1Sl149hbTlyN8jg3ZeMGXARiZXF7kmV2fZO71du7CkIe6KFwahsuQuxZZWqgDciyciXBqLFfwuz/O8ACxq+RL85XrJ6GtE4UCXQxC82oZC8rI/7aGfi2h6CD+UgAkXpEL0Xu9N1i4aDNYam2yJAbHZndo+zHngVOxeh3k+vr5ml4Zf1jZ7/u/PZj4IMqvOeuyzGmscnk0KglqC3g6TtMczpwlv0cv230DLID+gcQ6Nx/d1XtmNZJ1CKtdrYaP972V5t5ZmYf9XPkaxpo0+SDoq6PqvBIxTHQDaSP6nMCB1EQq4cGCtZCtt6LwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAI0adbQb98LCG4pYfB+I8hB4kmfPfIwn0wOuNrfl92sX2hcyKNoGI9XT7hZ2+8zGsk3uKEWsMMe2osHlJy4SSb95CcyPyDpW7amutyLJt/VZd7QNDPAZZNW0FMW4L+bRQW9kbkIvRFPSlALcKdXdzR0lfOCCltByP05mxI1jrzIwllJPvPLi7c1xZfuOKhDYOqh+EJtudS+5EEewoQIv0MdYqH/1gXFbvcoloIXeGOnK4g5jFph8XXql1cGLst6wbOsazDIpzSJkK5RRHTyAaPEh4p8aRYtFqIsG+sorEjaHM4at3P/CqcnP7BhXR43M8rcDM1+aGlYS+UP1z5zglNI=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAog1ikf8i+rctsMW1M6/N9PUVfUjdt98GzaDhe8TeWoLg082MdLvxDFlfozyfWvmTV33kX2eqXQOo9zFf/aYa+7iZzufDDDgVxRSNU29jVLvp1kfuuLrkHcVXFN7dcBzhzK8SQ2X7MCLb66BO2c2A99brY/SzzjkZ63Yv2GaU85q/kisEz7VnAMdXyElCyB7Y9Q+1ZEbisq0B1X6BMXpaiMhB4bdtOnbqG18FhVQhI5JS5Ms3T0Fj9yyEVzoCDeP3ZdIBlLRRNG0rd5V6bjo+0TPj9qWN1Rbr8Ol7lzJqZFDW62c6vJubwc8B4/Zyp+Qd58HvgVboGmzaPO41I6gPcwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADHdoIqeSBK76D12uZUzK/E4AUvNtq0TsK4LDeDK5stsscAhfq8mU8iKPuZz3KSIaCLUyG5wkZ6tbvmCce3/HEym84Cg6xNGJ/oqByrJThcf9dIfejGnf3/8zqM5CgBT1Lyb1ae3tf+1WgOgUihmJkxZbmzmTPworxJJ2qu9zI+IlKWer5v3CY3gbglRdXp5kEhj0D9SP79gMwr5e8oBDCEJ0I/GoqYy97pLQEtrnaws3DFdcQX6c8/5ZOlpyIQkDTpiZaQLaL48WzUqGC6yWO8vUhpms7ZwVd45e9EqePoiUSTjgr2UppoPgBfff1F7N/8L/wnUd4WzVtLyscrIXzw=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"442a5a4c6a1b44dca9f5a31d9b555033"}'}
    -    headers: {cache-control: no-cache, content-length: '1343', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/pending, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +        time based on the issuer provider. Please check again later.","request_id":"2d8ef76de6f84968800b0a67ea4e036e"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1343'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:10:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3bfeTfjKGsWzww7ec1exJhsuKIwYB1Sl149hbTlyN8jg3ZeMGXARiZXF7kmV2fZO71du7CkIe6KFwahsuQuxZZWqgDciyciXBqLFfwuz/O8ACxq+RL85XrJ6GtE4UCXQxC82oZC8rI/7aGfi2h6CD+UgAkXpEL0Xu9N1i4aDNYam2yJAbHZndo+zHngVOxeh3k+vr5ml4Zf1jZ7/u/PZj4IMqvOeuyzGmscnk0KglqC3g6TtMczpwlv0cv230DLID+gcQ6Nx/d1XtmNZJ1CKtdrYaP972V5t5ZmYf9XPkaxpo0+SDoq6PqvBIxTHQDaSP6nMCB1EQq4cGCtZCtt6LwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAI0adbQb98LCG4pYfB+I8hB4kmfPfIwn0wOuNrfl92sX2hcyKNoGI9XT7hZ2+8zGsk3uKEWsMMe2osHlJy4SSb95CcyPyDpW7amutyLJt/VZd7QNDPAZZNW0FMW4L+bRQW9kbkIvRFPSlALcKdXdzR0lfOCCltByP05mxI1jrzIwllJPvPLi7c1xZfuOKhDYOqh+EJtudS+5EEewoQIv0MdYqH/1gXFbvcoloIXeGOnK4g5jFph8XXql1cGLst6wbOsazDIpzSJkK5RRHTyAaPEh4p8aRYtFqIsG+sorEjaHM4at3P/CqcnP7BhXR43M8rcDM1+aGlYS+UP1z5zglNI=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAog1ikf8i+rctsMW1M6/N9PUVfUjdt98GzaDhe8TeWoLg082MdLvxDFlfozyfWvmTV33kX2eqXQOo9zFf/aYa+7iZzufDDDgVxRSNU29jVLvp1kfuuLrkHcVXFN7dcBzhzK8SQ2X7MCLb66BO2c2A99brY/SzzjkZ63Yv2GaU85q/kisEz7VnAMdXyElCyB7Y9Q+1ZEbisq0B1X6BMXpaiMhB4bdtOnbqG18FhVQhI5JS5Ms3T0Fj9yyEVzoCDeP3ZdIBlLRRNG0rd5V6bjo+0TPj9qWN1Rbr8Ol7lzJqZFDW62c6vJubwc8B4/Zyp+Qd58HvgVboGmzaPO41I6gPcwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADHdoIqeSBK76D12uZUzK/E4AUvNtq0TsK4LDeDK5stsscAhfq8mU8iKPuZz3KSIaCLUyG5wkZ6tbvmCce3/HEym84Cg6xNGJ/oqByrJThcf9dIfejGnf3/8zqM5CgBT1Lyb1ae3tf+1WgOgUihmJkxZbmzmTPworxJJ2qu9zI+IlKWer5v3CY3gbglRdXp5kEhj0D9SP79gMwr5e8oBDCEJ0I/GoqYy97pLQEtrnaws3DFdcQX6c8/5ZOlpyIQkDTpiZaQLaL48WzUqGC6yWO8vUhpms7ZwVd45e9EqePoiUSTjgr2UppoPgBfff1F7N/8L/wnUd4WzVtLyscrIXzw=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
             certificate created. Certificate request is in progress. This may take some
    -        time based on the issuer provider. Please check again later.","request_id":"442a5a4c6a1b44dca9f5a31d9b555033"}'}
    -    headers: {cache-control: no-cache, content-length: '1343', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:39 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/pending, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +        time based on the issuer provider. Please check again later.","request_id":"2d8ef76de6f84968800b0a67ea4e036e"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1343'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3bfeTfjKGsWzww7ec1exJhsuKIwYB1Sl149hbTlyN8jg3ZeMGXARiZXF7kmV2fZO71du7CkIe6KFwahsuQuxZZWqgDciyciXBqLFfwuz/O8ACxq+RL85XrJ6GtE4UCXQxC82oZC8rI/7aGfi2h6CD+UgAkXpEL0Xu9N1i4aDNYam2yJAbHZndo+zHngVOxeh3k+vr5ml4Zf1jZ7/u/PZj4IMqvOeuyzGmscnk0KglqC3g6TtMczpwlv0cv230DLID+gcQ6Nx/d1XtmNZJ1CKtdrYaP972V5t5ZmYf9XPkaxpo0+SDoq6PqvBIxTHQDaSP6nMCB1EQq4cGCtZCtt6LwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAI0adbQb98LCG4pYfB+I8hB4kmfPfIwn0wOuNrfl92sX2hcyKNoGI9XT7hZ2+8zGsk3uKEWsMMe2osHlJy4SSb95CcyPyDpW7amutyLJt/VZd7QNDPAZZNW0FMW4L+bRQW9kbkIvRFPSlALcKdXdzR0lfOCCltByP05mxI1jrzIwllJPvPLi7c1xZfuOKhDYOqh+EJtudS+5EEewoQIv0MdYqH/1gXFbvcoloIXeGOnK4g5jFph8XXql1cGLst6wbOsazDIpzSJkK5RRHTyAaPEh4p8aRYtFqIsG+sorEjaHM4at3P/CqcnP7BhXR43M8rcDM1+aGlYS+UP1z5zglNI=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert-name","request_id":"442a5a4c6a1b44dca9f5a31d9b555033"}'}
    -    headers: {cache-control: no-cache, content-length: '1261', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/pending, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending","issuer":{"name":"Self"},"csr":"MIICyDCCAbACAQAwGjEYMBYGA1UEAwwPKi5taWNyb3NvZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAog1ikf8i+rctsMW1M6/N9PUVfUjdt98GzaDhe8TeWoLg082MdLvxDFlfozyfWvmTV33kX2eqXQOo9zFf/aYa+7iZzufDDDgVxRSNU29jVLvp1kfuuLrkHcVXFN7dcBzhzK8SQ2X7MCLb66BO2c2A99brY/SzzjkZ63Yv2GaU85q/kisEz7VnAMdXyElCyB7Y9Q+1ZEbisq0B1X6BMXpaiMhB4bdtOnbqG18FhVQhI5JS5Ms3T0Fj9yyEVzoCDeP3ZdIBlLRRNG0rd5V6bjo+0TPj9qWN1Rbr8Ol7lzJqZFDW62c6vJubwc8B4/Zyp+Qd58HvgVboGmzaPO41I6gPcwIDAQABoGkwZwYJKoZIhvcNAQkOMVowWDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBADHdoIqeSBK76D12uZUzK/E4AUvNtq0TsK4LDeDK5stsscAhfq8mU8iKPuZz3KSIaCLUyG5wkZ6tbvmCce3/HEym84Cg6xNGJ/oqByrJThcf9dIfejGnf3/8zqM5CgBT1Lyb1ae3tf+1WgOgUihmJkxZbmzmTPworxJJ2qu9zI+IlKWer5v3CY3gbglRdXp5kEhj0D9SP79gMwr5e8oBDCEJ0I/GoqYy97pLQEtrnaws3DFdcQX6c8/5ZOlpyIQkDTpiZaQLaL48WzUqGC6yWO8vUhpms7ZwVd45e9EqePoiUSTjgr2UppoPgBfff1F7N/8L/wnUd4WzVtLyscrIXzw=","cancellation_requested":false,"status":"completed","target":"https://vaultname.vault.azure.net/certificates/cert-name","request_id":"2d8ef76de6f84968800b0a67ea4e036e"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1261'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","kid":"https://vaultname.vault.azure.net/keys/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","sid":"https://vaultname.vault.azure.net/secrets/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","x5t":"TCVH41OBRHll5bU1MbaF4gMxVPM","cer":"MIIDWjCCAkKgAwIBAgIQTI1Y3k+uT+6geEprjmGltzANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1MTQ5WhcNMjExMjA3MDAwMTQ5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdt95N+MoaxbPDDt5zV7EmGy4ojBgHVKXXj2FtOXI3yODdl4wZcBGJlcXuSZXZ9k7vV27sKQh7ooXBqGy5C7FllaqANyLJyJcGosV/C7P87wALGr5Evzlesnoa0ThQJdDELzahkLysj/toZ+LaHoIP5SACRekQvRe703WLhoM1hqbbIkBsdmd2j7MeeBU7F6HeT6+vmaXhl/WNnv+789mPggyq8567LMaaxyeTQqCWoLeDpO0xzOnCW/Ry/bfQMsgP6BxDo3H93Ve2Y1knUIq12tho/3vZXm3lmZh/1c+RrGmjT5IOiro+q8EjFMdANpI/qcwIHURCrhwYK1kK23ovAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLGXBTpSIbFCpMf0740An5sDC9UYMB0GA1UdDgQWBBSxlwU6UiGxQqTH9O+NAJ+bAwvVGDANBgkqhkiG9w0BAQsFAAOCAQEAvHQJP3IG5+DWZoy3e2Ce9WL6zX7Mq43A0dR0v4cSh7bikvpN5ILFDoRF38xo3ElAbWOhhkK+Vt0RqdRA8JnzV3vjUhk4h//pdk1EqQCq9ieeY7N4sfa9QSVlhFbjwVorF5ErO7veefSjAcycJshnrpqvL3t/QBus6qi1/FVGVHn4s65SyhytLvqqP7iXGl4vtTga5bZ+0w7HxDouU602QQmIkOK8uVvWUAq0NQMAQjDId4yNfn8DsZkQsNQbMZLa78hXOV5ZgowGRLPQFRnOYmqQzP/PqrKwtJkUhKrBlm0S+7cu6y7DhWPJvmBHi2t9nmkbdxdqZZv0KgYWdJT1zw==","attributes":{"enabled":true,"nbf":1575676309,"exp":1638835309,"created":1575676910,"updated":1575676910,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676889,"updated":1575676889}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2434', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/746495e8ab104ca3b8356264128311ad","kid":"https://vaultname.vault.azure.net/keys/cert-name/746495e8ab104ca3b8356264128311ad","sid":"https://vaultname.vault.azure.net/secrets/cert-name/746495e8ab104ca3b8356264128311ad","x5t":"GYaWu-pw-qtfa_2h4vatGZNwUR4","cer":"MIIDWjCCAkKgAwIBAgIQSiqyUTVSSHSbzElmrEZJgjANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA2MDAwMTEyWhcNMjIwMzA2MDAxMTEyWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiDWKR/yL6ty2wxbUzr8309RV9SN233wbNoOF7xN5aguDTzYx0u/EMWV+jPJ9a+ZNXfeRfZ6pdA6j3MV/9phr7uJnO58MMOBXFFI1Tb2NUu+nWR+64uuQdxVcU3t1wHOHMrxJDZfswItvroE7ZzYD31utj9LPOORnrdi/YZpTzmr+SKwTPtWcAx1fISULIHtj1D7VkRuKyrQHVfoExelqIyEHht206duobXwWFVCEjklLkyzdPQWP3LIRXOgIN4/dl0gGUtFE0bSt3lXpuOj7RM+P2pY3VFuvw6XuXMmpkUNbrZzq8m5vBzwHj9nKn5B3nwe+BVugabNo87jUjqA9zAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFHTxN/5AWF1VcBDG5M8xlB3FMRjCMB0GA1UdDgQWBBR08Tf+QFhdVXAQxuTPMZQdxTEYwjANBgkqhkiG9w0BAQsFAAOCAQEAG5zaL9+RjDvV7X6ap9pmQMuMvDeMeQSSp89s4gWyNwLobo56ftYahiecHJI4ir47d0WrPYsRZwpnFIpKbz6Ho5MF9T/gqfRfGwaXtg27/35iIjHlsmGXlfJX9ScXe3Gyxs/tXj6rT91Fx1gTc0y6qIQN94cZ89zNFJUeN+3g+J/mrz0NElxrnhD+8mXMBpmggHrIvTIwJdc8TokeDAV+ZV9vNXQ4Pq8GCYcZXkuHlFM79OqxRfRiXvmjlwADC76XY/2Pu3LUoz1remTtnu/x+ncvWnqOSA5xqQ1POwyXpFYQizvxJlRea8E0y8vVuoUOh8oB8wSAnY10LQbNtVj/ZA==","attributes":{"enabled":true,"nbf":1583452872,"exp":1646525472,"created":1583453472,"updated":1583453472,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453452,"updated":1583453452}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2434'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1575676916,"scheduledPurgeDate":1583452916,"id":"https://vaultname.vault.azure.net/certificates/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","kid":"https://vaultname.vault.azure.net/keys/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","sid":"https://vaultname.vault.azure.net/secrets/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","x5t":"TCVH41OBRHll5bU1MbaF4gMxVPM","cer":"MIIDWjCCAkKgAwIBAgIQTI1Y3k+uT+6geEprjmGltzANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1MTQ5WhcNMjExMjA3MDAwMTQ5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdt95N+MoaxbPDDt5zV7EmGy4ojBgHVKXXj2FtOXI3yODdl4wZcBGJlcXuSZXZ9k7vV27sKQh7ooXBqGy5C7FllaqANyLJyJcGosV/C7P87wALGr5Evzlesnoa0ThQJdDELzahkLysj/toZ+LaHoIP5SACRekQvRe703WLhoM1hqbbIkBsdmd2j7MeeBU7F6HeT6+vmaXhl/WNnv+789mPggyq8567LMaaxyeTQqCWoLeDpO0xzOnCW/Ry/bfQMsgP6BxDo3H93Ve2Y1knUIq12tho/3vZXm3lmZh/1c+RrGmjT5IOiro+q8EjFMdANpI/qcwIHURCrhwYK1kK23ovAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLGXBTpSIbFCpMf0740An5sDC9UYMB0GA1UdDgQWBBSxlwU6UiGxQqTH9O+NAJ+bAwvVGDANBgkqhkiG9w0BAQsFAAOCAQEAvHQJP3IG5+DWZoy3e2Ce9WL6zX7Mq43A0dR0v4cSh7bikvpN5ILFDoRF38xo3ElAbWOhhkK+Vt0RqdRA8JnzV3vjUhk4h//pdk1EqQCq9ieeY7N4sfa9QSVlhFbjwVorF5ErO7veefSjAcycJshnrpqvL3t/QBus6qi1/FVGVHn4s65SyhytLvqqP7iXGl4vtTga5bZ+0w7HxDouU602QQmIkOK8uVvWUAq0NQMAQjDId4yNfn8DsZkQsNQbMZLa78hXOV5ZgowGRLPQFRnOYmqQzP/PqrKwtJkUhKrBlm0S+7cu6y7DhWPJvmBHi2t9nmkbdxdqZZv0KgYWdJT1zw==","attributes":{"enabled":true,"nbf":1575676309,"exp":1638835309,"created":1575676910,"updated":1575676910,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676889,"updated":1575676889}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2585', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1583453473,"scheduledPurgeDate":1591229473,"id":"https://vaultname.vault.azure.net/certificates/cert-name/746495e8ab104ca3b8356264128311ad","kid":"https://vaultname.vault.azure.net/keys/cert-name/746495e8ab104ca3b8356264128311ad","sid":"https://vaultname.vault.azure.net/secrets/cert-name/746495e8ab104ca3b8356264128311ad","x5t":"GYaWu-pw-qtfa_2h4vatGZNwUR4","cer":"MIIDWjCCAkKgAwIBAgIQSiqyUTVSSHSbzElmrEZJgjANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA2MDAwMTEyWhcNMjIwMzA2MDAxMTEyWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiDWKR/yL6ty2wxbUzr8309RV9SN233wbNoOF7xN5aguDTzYx0u/EMWV+jPJ9a+ZNXfeRfZ6pdA6j3MV/9phr7uJnO58MMOBXFFI1Tb2NUu+nWR+64uuQdxVcU3t1wHOHMrxJDZfswItvroE7ZzYD31utj9LPOORnrdi/YZpTzmr+SKwTPtWcAx1fISULIHtj1D7VkRuKyrQHVfoExelqIyEHht206duobXwWFVCEjklLkyzdPQWP3LIRXOgIN4/dl0gGUtFE0bSt3lXpuOj7RM+P2pY3VFuvw6XuXMmpkUNbrZzq8m5vBzwHj9nKn5B3nwe+BVugabNo87jUjqA9zAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFHTxN/5AWF1VcBDG5M8xlB3FMRjCMB0GA1UdDgQWBBR08Tf+QFhdVXAQxuTPMZQdxTEYwjANBgkqhkiG9w0BAQsFAAOCAQEAG5zaL9+RjDvV7X6ap9pmQMuMvDeMeQSSp89s4gWyNwLobo56ftYahiecHJI4ir47d0WrPYsRZwpnFIpKbz6Ho5MF9T/gqfRfGwaXtg27/35iIjHlsmGXlfJX9ScXe3Gyxs/tXj6rT91Fx1gTc0y6qIQN94cZ89zNFJUeN+3g+J/mrz0NElxrnhD+8mXMBpmggHrIvTIwJdc8TokeDAV+ZV9vNXQ4Pq8GCYcZXkuHlFM79OqxRfRiXvmjlwADC76XY/2Pu3LUoz1remTtnu/x+ncvWnqOSA5xqQ1POwyXpFYQizvxJlRea8E0y8vVuoUOh8oB8wSAnY10LQbNtVj/ZA==","attributes":{"enabled":true,"nbf":1583452872,"exp":1646525472,"created":1583453472,"updated":1583453472,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453452,"updated":1583453452}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2585'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:06 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:08 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:28 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '93', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Deleted Certificate
    +        not found: cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '93'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1575676916,"scheduledPurgeDate":1583452916,"id":"https://vaultname.vault.azure.net/certificates/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","kid":"https://vaultname.vault.azure.net/keys/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","sid":"https://vaultname.vault.azure.net/secrets/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","x5t":"TCVH41OBRHll5bU1MbaF4gMxVPM","cer":"MIIDWjCCAkKgAwIBAgIQTI1Y3k+uT+6geEprjmGltzANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1MTQ5WhcNMjExMjA3MDAwMTQ5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdt95N+MoaxbPDDt5zV7EmGy4ojBgHVKXXj2FtOXI3yODdl4wZcBGJlcXuSZXZ9k7vV27sKQh7ooXBqGy5C7FllaqANyLJyJcGosV/C7P87wALGr5Evzlesnoa0ThQJdDELzahkLysj/toZ+LaHoIP5SACRekQvRe703WLhoM1hqbbIkBsdmd2j7MeeBU7F6HeT6+vmaXhl/WNnv+789mPggyq8567LMaaxyeTQqCWoLeDpO0xzOnCW/Ry/bfQMsgP6BxDo3H93Ve2Y1knUIq12tho/3vZXm3lmZh/1c+RrGmjT5IOiro+q8EjFMdANpI/qcwIHURCrhwYK1kK23ovAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLGXBTpSIbFCpMf0740An5sDC9UYMB0GA1UdDgQWBBSxlwU6UiGxQqTH9O+NAJ+bAwvVGDANBgkqhkiG9w0BAQsFAAOCAQEAvHQJP3IG5+DWZoy3e2Ce9WL6zX7Mq43A0dR0v4cSh7bikvpN5ILFDoRF38xo3ElAbWOhhkK+Vt0RqdRA8JnzV3vjUhk4h//pdk1EqQCq9ieeY7N4sfa9QSVlhFbjwVorF5ErO7veefSjAcycJshnrpqvL3t/QBus6qi1/FVGVHn4s65SyhytLvqqP7iXGl4vtTga5bZ+0w7HxDouU602QQmIkOK8uVvWUAq0NQMAQjDId4yNfn8DsZkQsNQbMZLa78hXOV5ZgowGRLPQFRnOYmqQzP/PqrKwtJkUhKrBlm0S+7cu6y7DhWPJvmBHi2t9nmkbdxdqZZv0KgYWdJT1zw==","attributes":{"enabled":true,"nbf":1575676309,"exp":1638835309,"created":1575676910,"updated":1575676910,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676889,"updated":1575676889}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2585', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1583453473,"scheduledPurgeDate":1591229473,"id":"https://vaultname.vault.azure.net/certificates/cert-name/746495e8ab104ca3b8356264128311ad","kid":"https://vaultname.vault.azure.net/keys/cert-name/746495e8ab104ca3b8356264128311ad","sid":"https://vaultname.vault.azure.net/secrets/cert-name/746495e8ab104ca3b8356264128311ad","x5t":"GYaWu-pw-qtfa_2h4vatGZNwUR4","cer":"MIIDWjCCAkKgAwIBAgIQSiqyUTVSSHSbzElmrEZJgjANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA2MDAwMTEyWhcNMjIwMzA2MDAxMTEyWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiDWKR/yL6ty2wxbUzr8309RV9SN233wbNoOF7xN5aguDTzYx0u/EMWV+jPJ9a+ZNXfeRfZ6pdA6j3MV/9phr7uJnO58MMOBXFFI1Tb2NUu+nWR+64uuQdxVcU3t1wHOHMrxJDZfswItvroE7ZzYD31utj9LPOORnrdi/YZpTzmr+SKwTPtWcAx1fISULIHtj1D7VkRuKyrQHVfoExelqIyEHht206duobXwWFVCEjklLkyzdPQWP3LIRXOgIN4/dl0gGUtFE0bSt3lXpuOj7RM+P2pY3VFuvw6XuXMmpkUNbrZzq8m5vBzwHj9nKn5B3nwe+BVugabNo87jUjqA9zAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFHTxN/5AWF1VcBDG5M8xlB3FMRjCMB0GA1UdDgQWBBR08Tf+QFhdVXAQxuTPMZQdxTEYwjANBgkqhkiG9w0BAQsFAAOCAQEAG5zaL9+RjDvV7X6ap9pmQMuMvDeMeQSSp89s4gWyNwLobo56ftYahiecHJI4ir47d0WrPYsRZwpnFIpKbz6Ho5MF9T/gqfRfGwaXtg27/35iIjHlsmGXlfJX9ScXe3Gyxs/tXj6rT91Fx1gTc0y6qIQN94cZ89zNFJUeN+3g+J/mrz0NElxrnhD+8mXMBpmggHrIvTIwJdc8TokeDAV+ZV9vNXQ4Pq8GCYcZXkuHlFM79OqxRfRiXvmjlwADC76XY/2Pu3LUoz1remTtnu/x+ncvWnqOSA5xqQ1POwyXpFYQizvxJlRea8E0y8vVuoUOh8oB8wSAnY10LQbNtVj/ZA==","attributes":{"enabled":true,"nbf":1583452872,"exp":1646525472,"created":1583453472,"updated":1583453472,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453452,"updated":1583453452}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2585'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1575676916,"scheduledPurgeDate":1583452916,"id":"https://vaultname.vault.azure.net/certificates/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","kid":"https://vaultname.vault.azure.net/keys/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","sid":"https://vaultname.vault.azure.net/secrets/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","x5t":"TCVH41OBRHll5bU1MbaF4gMxVPM","cer":"MIIDWjCCAkKgAwIBAgIQTI1Y3k+uT+6geEprjmGltzANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1MTQ5WhcNMjExMjA3MDAwMTQ5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdt95N+MoaxbPDDt5zV7EmGy4ojBgHVKXXj2FtOXI3yODdl4wZcBGJlcXuSZXZ9k7vV27sKQh7ooXBqGy5C7FllaqANyLJyJcGosV/C7P87wALGr5Evzlesnoa0ThQJdDELzahkLysj/toZ+LaHoIP5SACRekQvRe703WLhoM1hqbbIkBsdmd2j7MeeBU7F6HeT6+vmaXhl/WNnv+789mPggyq8567LMaaxyeTQqCWoLeDpO0xzOnCW/Ry/bfQMsgP6BxDo3H93Ve2Y1knUIq12tho/3vZXm3lmZh/1c+RrGmjT5IOiro+q8EjFMdANpI/qcwIHURCrhwYK1kK23ovAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLGXBTpSIbFCpMf0740An5sDC9UYMB0GA1UdDgQWBBSxlwU6UiGxQqTH9O+NAJ+bAwvVGDANBgkqhkiG9w0BAQsFAAOCAQEAvHQJP3IG5+DWZoy3e2Ce9WL6zX7Mq43A0dR0v4cSh7bikvpN5ILFDoRF38xo3ElAbWOhhkK+Vt0RqdRA8JnzV3vjUhk4h//pdk1EqQCq9ieeY7N4sfa9QSVlhFbjwVorF5ErO7veefSjAcycJshnrpqvL3t/QBus6qi1/FVGVHn4s65SyhytLvqqP7iXGl4vtTga5bZ+0w7HxDouU602QQmIkOK8uVvWUAq0NQMAQjDId4yNfn8DsZkQsNQbMZLa78hXOV5ZgowGRLPQFRnOYmqQzP/PqrKwtJkUhKrBlm0S+7cu6y7DhWPJvmBHi2t9nmkbdxdqZZv0KgYWdJT1zw==","attributes":{"enabled":true,"nbf":1575676309,"exp":1638835309,"created":1575676910,"updated":1575676910,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676889,"updated":1575676889}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2585', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /deletedcertificates/cert-name, api-version=7.0, '']
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedcertificates/cert-name","deletedDate":1583453473,"scheduledPurgeDate":1591229473,"id":"https://vaultname.vault.azure.net/certificates/cert-name/746495e8ab104ca3b8356264128311ad","kid":"https://vaultname.vault.azure.net/keys/cert-name/746495e8ab104ca3b8356264128311ad","sid":"https://vaultname.vault.azure.net/secrets/cert-name/746495e8ab104ca3b8356264128311ad","x5t":"GYaWu-pw-qtfa_2h4vatGZNwUR4","cer":"MIIDWjCCAkKgAwIBAgIQSiqyUTVSSHSbzElmrEZJgjANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA2MDAwMTEyWhcNMjIwMzA2MDAxMTEyWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiDWKR/yL6ty2wxbUzr8309RV9SN233wbNoOF7xN5aguDTzYx0u/EMWV+jPJ9a+ZNXfeRfZ6pdA6j3MV/9phr7uJnO58MMOBXFFI1Tb2NUu+nWR+64uuQdxVcU3t1wHOHMrxJDZfswItvroE7ZzYD31utj9LPOORnrdi/YZpTzmr+SKwTPtWcAx1fISULIHtj1D7VkRuKyrQHVfoExelqIyEHht206duobXwWFVCEjklLkyzdPQWP3LIRXOgIN4/dl0gGUtFE0bSt3lXpuOj7RM+P2pY3VFuvw6XuXMmpkUNbrZzq8m5vBzwHj9nKn5B3nwe+BVugabNo87jUjqA9zAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFHTxN/5AWF1VcBDG5M8xlB3FMRjCMB0GA1UdDgQWBBR08Tf+QFhdVXAQxuTPMZQdxTEYwjANBgkqhkiG9w0BAQsFAAOCAQEAG5zaL9+RjDvV7X6ap9pmQMuMvDeMeQSSp89s4gWyNwLobo56ftYahiecHJI4ir47d0WrPYsRZwpnFIpKbz6Ho5MF9T/gqfRfGwaXtg27/35iIjHlsmGXlfJX9ScXe3Gyxs/tXj6rT91Fx1gTc0y6qIQN94cZ89zNFJUeN+3g+J/mrz0NElxrnhD+8mXMBpmggHrIvTIwJdc8TokeDAV+ZV9vNXQ4Pq8GCYcZXkuHlFM79OqxRfRiXvmjlwADC76XY/2Pu3LUoz1remTtnu/x+ncvWnqOSA5xqQ1POwyXpFYQizvxJlRea8E0y8vVuoUOh8oB8wSAnY10LQbNtVj/ZA==","attributes":{"enabled":true,"nbf":1583452872,"exp":1646525472,"created":1583453472,"updated":1583453472,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453452,"updated":1583453452}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2585'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedcertificates/cert-name/recover?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","kid":"https://vaultname.vault.azure.net/keys/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","sid":"https://vaultname.vault.azure.net/secrets/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","x5t":"TCVH41OBRHll5bU1MbaF4gMxVPM","cer":"MIIDWjCCAkKgAwIBAgIQTI1Y3k+uT+6geEprjmGltzANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1MTQ5WhcNMjExMjA3MDAwMTQ5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdt95N+MoaxbPDDt5zV7EmGy4ojBgHVKXXj2FtOXI3yODdl4wZcBGJlcXuSZXZ9k7vV27sKQh7ooXBqGy5C7FllaqANyLJyJcGosV/C7P87wALGr5Evzlesnoa0ThQJdDELzahkLysj/toZ+LaHoIP5SACRekQvRe703WLhoM1hqbbIkBsdmd2j7MeeBU7F6HeT6+vmaXhl/WNnv+789mPggyq8567LMaaxyeTQqCWoLeDpO0xzOnCW/Ry/bfQMsgP6BxDo3H93Ve2Y1knUIq12tho/3vZXm3lmZh/1c+RrGmjT5IOiro+q8EjFMdANpI/qcwIHURCrhwYK1kK23ovAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLGXBTpSIbFCpMf0740An5sDC9UYMB0GA1UdDgQWBBSxlwU6UiGxQqTH9O+NAJ+bAwvVGDANBgkqhkiG9w0BAQsFAAOCAQEAvHQJP3IG5+DWZoy3e2Ce9WL6zX7Mq43A0dR0v4cSh7bikvpN5ILFDoRF38xo3ElAbWOhhkK+Vt0RqdRA8JnzV3vjUhk4h//pdk1EqQCq9ieeY7N4sfa9QSVlhFbjwVorF5ErO7veefSjAcycJshnrpqvL3t/QBus6qi1/FVGVHn4s65SyhytLvqqP7iXGl4vtTga5bZ+0w7HxDouU602QQmIkOK8uVvWUAq0NQMAQjDId4yNfn8DsZkQsNQbMZLa78hXOV5ZgowGRLPQFRnOYmqQzP/PqrKwtJkUhKrBlm0S+7cu6y7DhWPJvmBHi2t9nmkbdxdqZZv0KgYWdJT1zw==","attributes":{"enabled":true,"nbf":1575676309,"exp":1638835309,"created":1575676910,"updated":1575676910,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676889,"updated":1575676889}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2434', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /deletedcertificates/cert-name/recover, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/746495e8ab104ca3b8356264128311ad","kid":"https://vaultname.vault.azure.net/keys/cert-name/746495e8ab104ca3b8356264128311ad","sid":"https://vaultname.vault.azure.net/secrets/cert-name/746495e8ab104ca3b8356264128311ad","x5t":"GYaWu-pw-qtfa_2h4vatGZNwUR4","cer":"MIIDWjCCAkKgAwIBAgIQSiqyUTVSSHSbzElmrEZJgjANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA2MDAwMTEyWhcNMjIwMzA2MDAxMTEyWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiDWKR/yL6ty2wxbUzr8309RV9SN233wbNoOF7xN5aguDTzYx0u/EMWV+jPJ9a+ZNXfeRfZ6pdA6j3MV/9phr7uJnO58MMOBXFFI1Tb2NUu+nWR+64uuQdxVcU3t1wHOHMrxJDZfswItvroE7ZzYD31utj9LPOORnrdi/YZpTzmr+SKwTPtWcAx1fISULIHtj1D7VkRuKyrQHVfoExelqIyEHht206duobXwWFVCEjklLkyzdPQWP3LIRXOgIN4/dl0gGUtFE0bSt3lXpuOj7RM+P2pY3VFuvw6XuXMmpkUNbrZzq8m5vBzwHj9nKn5B3nwe+BVugabNo87jUjqA9zAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFHTxN/5AWF1VcBDG5M8xlB3FMRjCMB0GA1UdDgQWBBR08Tf+QFhdVXAQxuTPMZQdxTEYwjANBgkqhkiG9w0BAQsFAAOCAQEAG5zaL9+RjDvV7X6ap9pmQMuMvDeMeQSSp89s4gWyNwLobo56ftYahiecHJI4ir47d0WrPYsRZwpnFIpKbz6Ho5MF9T/gqfRfGwaXtg27/35iIjHlsmGXlfJX9ScXe3Gyxs/tXj6rT91Fx1gTc0y6qIQN94cZ89zNFJUeN+3g+J/mrz0NElxrnhD+8mXMBpmggHrIvTIwJdc8TokeDAV+ZV9vNXQ4Pq8GCYcZXkuHlFM79OqxRfRiXvmjlwADC76XY/2Pu3LUoz1remTtnu/x+ncvWnqOSA5xqQ1POwyXpFYQizvxJlRea8E0y8vVuoUOh8oB8wSAnY10LQbNtVj/ZA==","attributes":{"enabled":true,"nbf":1583452872,"exp":1646525472,"created":1583453472,"updated":1583453472,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453452,"updated":1583453452}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2434'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/deletedcertificates/cert-name/recover?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:16 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:18 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:20 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:22 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"CertificateNotFound","message":"Certificate
    -        not found: cert-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:33 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:11:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","kid":"https://vaultname.vault.azure.net/keys/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","sid":"https://vaultname.vault.azure.net/secrets/cert-name/40b8a053e2644b73a5ab4b14e7ada66e","x5t":"TCVH41OBRHll5bU1MbaF4gMxVPM","cer":"MIIDWjCCAkKgAwIBAgIQTI1Y3k+uT+6geEprjmGltzANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMTkxMjA2MjM1MTQ5WhcNMjExMjA3MDAwMTQ5WjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdt95N+MoaxbPDDt5zV7EmGy4ojBgHVKXXj2FtOXI3yODdl4wZcBGJlcXuSZXZ9k7vV27sKQh7ooXBqGy5C7FllaqANyLJyJcGosV/C7P87wALGr5Evzlesnoa0ThQJdDELzahkLysj/toZ+LaHoIP5SACRekQvRe703WLhoM1hqbbIkBsdmd2j7MeeBU7F6HeT6+vmaXhl/WNnv+789mPggyq8567LMaaxyeTQqCWoLeDpO0xzOnCW/Ry/bfQMsgP6BxDo3H93Ve2Y1knUIq12tho/3vZXm3lmZh/1c+RrGmjT5IOiro+q8EjFMdANpI/qcwIHURCrhwYK1kK23ovAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFLGXBTpSIbFCpMf0740An5sDC9UYMB0GA1UdDgQWBBSxlwU6UiGxQqTH9O+NAJ+bAwvVGDANBgkqhkiG9w0BAQsFAAOCAQEAvHQJP3IG5+DWZoy3e2Ce9WL6zX7Mq43A0dR0v4cSh7bikvpN5ILFDoRF38xo3ElAbWOhhkK+Vt0RqdRA8JnzV3vjUhk4h//pdk1EqQCq9ieeY7N4sfa9QSVlhFbjwVorF5ErO7veefSjAcycJshnrpqvL3t/QBus6qi1/FVGVHn4s65SyhytLvqqP7iXGl4vtTga5bZ+0w7HxDouU602QQmIkOK8uVvWUAq0NQMAQjDId4yNfn8DsZkQsNQbMZLa78hXOV5ZgowGRLPQFRnOYmqQzP/PqrKwtJkUhKrBlm0S+7cu6y7DhWPJvmBHi2t9nmkbdxdqZZv0KgYWdJT1zw==","attributes":{"enabled":true,"nbf":1575676309,"exp":1638835309,"created":1575676910,"updated":1575676910,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1575676889,"updated":1575676889}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'}
    -    headers: {cache-control: no-cache, content-length: '2434', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, mx5fozjie5lryh44fox5aykk.vault.azure.net,
    -        /certificates/cert-name/, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"CertificateNotFound","message":"Certificate not found:
    +        cert-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/cert-name/746495e8ab104ca3b8356264128311ad","kid":"https://vaultname.vault.azure.net/keys/cert-name/746495e8ab104ca3b8356264128311ad","sid":"https://vaultname.vault.azure.net/secrets/cert-name/746495e8ab104ca3b8356264128311ad","x5t":"GYaWu-pw-qtfa_2h4vatGZNwUR4","cer":"MIIDWjCCAkKgAwIBAgIQSiqyUTVSSHSbzElmrEZJgjANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wHhcNMjAwMzA2MDAwMTEyWhcNMjIwMzA2MDAxMTEyWjAaMRgwFgYDVQQDDA8qLm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiDWKR/yL6ty2wxbUzr8309RV9SN233wbNoOF7xN5aguDTzYx0u/EMWV+jPJ9a+ZNXfeRfZ6pdA6j3MV/9phr7uJnO58MMOBXFFI1Tb2NUu+nWR+64uuQdxVcU3t1wHOHMrxJDZfswItvroE7ZzYD31utj9LPOORnrdi/YZpTzmr+SKwTPtWcAx1fISULIHtj1D7VkRuKyrQHVfoExelqIyEHht206duobXwWFVCEjklLkyzdPQWP3LIRXOgIN4/dl0gGUtFE0bSt3lXpuOj7RM+P2pY3VFuvw6XuXMmpkUNbrZzq8m5vBzwHj9nKn5B3nwe+BVugabNo87jUjqA9zAgMBAAGjgZswgZgwDgYDVR0PAQH/BAQDAgWgMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBwGA1UdEQQVMBOCEXNkay5henVyZS1pbnQubmV0MB8GA1UdIwQYMBaAFHTxN/5AWF1VcBDG5M8xlB3FMRjCMB0GA1UdDgQWBBR08Tf+QFhdVXAQxuTPMZQdxTEYwjANBgkqhkiG9w0BAQsFAAOCAQEAG5zaL9+RjDvV7X6ap9pmQMuMvDeMeQSSp89s4gWyNwLobo56ftYahiecHJI4ir47d0WrPYsRZwpnFIpKbz6Ho5MF9T/gqfRfGwaXtg27/35iIjHlsmGXlfJX9ScXe3Gyxs/tXj6rT91Fx1gTc0y6qIQN94cZ89zNFJUeN+3g+J/mrz0NElxrnhD+8mXMBpmggHrIvTIwJdc8TokeDAV+ZV9vNXQ4Pq8GCYcZXkuHlFM79OqxRfRiXvmjlwADC76XY/2Pu3LUoz1remTtnu/x+ncvWnqOSA5xqQ1POwyXpFYQizvxJlRea8E0y8vVuoUOh8oB8wSAnY10LQbNtVj/ZA==","attributes":{"enabled":true,"nbf":1583452872,"exp":1646525472,"created":1583453472,"updated":1583453472,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=*.microsoft.com","sans":{"dns_names":["sdk.azure-int.net"]},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":24,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"AutoRenew"}}],"issuer":{"name":"Self"},"attributes":{"enabled":true,"created":1583453452,"updated":1583453452}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/cert-name/pending"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2434'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:12:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://rrmbfvqx6zyxqaa5w4kvnlnc.vault.azure.net/certificates/cert-name/?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_contacts.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_contacts.yaml
    index fbb7ad60daae..1f2582f772b2 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_contacts.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_contacts.yaml
    @@ -2,89 +2,141 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ce3wia4vdmpouo4damt7ki62.vault.azure.net,
    -        /certificates/contacts, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://bdtltjmgojkiikb5rgvkpxsq.vault.azure.net/certificates/contacts?api-version=7.1-preview
     - request:
         body: '{"contacts": [{"email": "admin@contoso.com", "name": "John Doe", "phone":
           "1111111111"}, {"email": "admin2@contoso.com", "name": "John Doe2", "phone":
           "2222222222"}]}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['166']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '166'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    -        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ce3wia4vdmpouo4damt7ki62.vault.azure.net,
    -        /certificates/contacts, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    +        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://bdtltjmgojkiikb5rgvkpxsq.vault.azure.net/certificates/contacts?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    -        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ce3wia4vdmpouo4damt7ki62.vault.azure.net,
    -        /certificates/contacts, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    +        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://bdtltjmgojkiikb5rgvkpxsq.vault.azure.net/certificates/contacts?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/contacts?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    -        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, ce3wia4vdmpouo4damt7ki62.vault.azure.net,
    -        /certificates/contacts, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/contacts","contacts":[{"email":"admin@contoso.com","name":"John
    +        Doe","phone":"1111111111"},{"email":"admin2@contoso.com","name":"John Doe2","phone":"2222222222"}]}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://bdtltjmgojkiikb5rgvkpxsq.vault.azure.net/certificates/contacts?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_issuers.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_issuers.yaml
    index a0e0cd363929..54ffa7d54f39 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_issuers.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_examples_certificates_async.test_example_issuers.yaml
    @@ -2,127 +2,205 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:43 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cdphtnezu4cs2af4lh3c5oab.vault.azure.net,
    -        /certificates/issuers/issuer1, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://qdxv6s4xi4lspeatyvt222c2.vault.azure.net/certificates/issuers/issuer1?api-version=7.1-preview
     - request:
         body: '{"provider": "Test", "credentials": {"account_id": "keyvaultuser"}, "org_details":
           {"admin_details": [{"first_name": "John", "last_name": "Doe", "email": "admin@microsoft.com",
           "phone": "4255555555"}]}, "attributes": {"enabled": true}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['235']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '235'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676784,"updated":1575676784}}'}
    -    headers: {cache-control: no-cache, content-length: '353', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cdphtnezu4cs2af4lh3c5oab.vault.azure.net,
    -        /certificates/issuers/issuer1, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453293,"updated":1583453293}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '353'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qdxv6s4xi4lspeatyvt222c2.vault.azure.net/certificates/issuers/issuer1?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676784,"updated":1575676784}}'}
    -    headers: {cache-control: no-cache, content-length: '353', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cdphtnezu4cs2af4lh3c5oab.vault.azure.net,
    -        /certificates/issuers/issuer1, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453293,"updated":1583453293}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '353'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qdxv6s4xi4lspeatyvt222c2.vault.azure.net/certificates/issuers/issuer1?api-version=7.1-preview
     - request:
         body: '{"provider": "Test", "credentials": {"account_id": "keyvaultuser"}, "attributes":
           {"enabled": true}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['100']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '100'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer2?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test","credentials":{"account_id":"keyvaultuser"},"attributes":{"enabled":true,"created":1575676784,"updated":1575676784}}'}
    -    headers: {cache-control: no-cache, content-length: '220', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cdphtnezu4cs2af4lh3c5oab.vault.azure.net,
    -        /certificates/issuers/issuer2, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test","credentials":{"account_id":"keyvaultuser"},"attributes":{"enabled":true,"created":1583453293,"updated":1583453293}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '220'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qdxv6s4xi4lspeatyvt222c2.vault.azure.net/certificates/issuers/issuer2?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/issuers?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test"},{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test"}],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '237', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cdphtnezu4cs2af4lh3c5oab.vault.azure.net,
    -        /certificates/issuers, api-version=7.0, '']
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test"},{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer2","provider":"Test"}],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '237'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qdxv6s4xi4lspeatyvt222c2.vault.azure.net/certificates/issuers?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-certificates/4.0.0b6 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/issuers/issuer1?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1575676784,"updated":1575676784}}'}
    -    headers: {cache-control: no-cache, content-length: '353', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cdphtnezu4cs2af4lh3c5oab.vault.azure.net,
    -        /certificates/issuers/issuer1, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/issuers/issuer1","provider":"Test","credentials":{"account_id":"keyvaultuser"},"org_details":{"zip":0,"admin_details":[{"first_name":"John","last_name":"Doe","email":"admin@microsoft.com","phone":"4255555555"}]},"attributes":{"enabled":true,"created":1583453293,"updated":1583453293}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '353'
    +      content-type: application/json; charset=utf-8
    +      date: Fri, 06 Mar 2020 00:08:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qdxv6s4xi4lspeatyvt222c2.vault.azure.net/certificates/issuers/issuer1?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_merge_certificate.test_merge_certificate.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_merge_certificate.test_merge_certificate.yaml
    index ab2c3dafd57e..231f3c7c6a81 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_merge_certificate.test_merge_certificate.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_merge_certificate.test_merge_certificate.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Thu, 13 Feb 2020 20:39:06 GMT
    +      - Fri, 06 Mar 2020 00:08:49 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.893
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -70,13 +70,13 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2VEoQAL/DWd1gymRalm7WR47/qfTcJznu1Ou7gyyEPnVTEl87zZ8Dv8Z6BaMWzZYNZELoYacpVz8Osit8fuACd6uht0iCaT9cPf3JrS/5ftMmobBIWDAdEQyKtXTqnObt2ydkIdjPPcDzH8O836k1VsGwJPeNwWU/VTmMv5EExfPUZYaHJ5gIGb8VgVGggxcJSKkE7vRZAI539u2KCLLkzNDhglbymVracrj40hIkt84fwakYqTFvpd7yY52CumcqQxNKOruEgpqbqBSh+rOq8lhRZqkVEDnNP0vSa/SzOSm8FLMTZQ9tOhibCR7jJHsAvtSsq6XS37HrLzEHSSAwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAA3fxBEiUvCA9Iv7uPe/i6CnftASkd5MWH2e1QNNv+hTM6IFg44mAjwYc6q4v8mS0ox9b9LJlaqeFgGnHWGjoECOOTQfbcp/ByHghlJslBdEyQydWBGWVHHW8Lq3a08fMHtG3X/rqlmqGfxhfwQvzPMlamdq2lRcx6DcZ8kYxhowS/qyA92+qlICrcm+jOk/1j4mpwdLGngZeSzjMJWWPaanymBPjQWh/oeIRL8Eb1MD0+j0FZZNIXi6DksAZCkWazrjoeKlWe2QWeVhpjhvbINPlLcI/77SvfjXSbRziLCND7nTKRYova2MQcIoPbkhrEGcu5OCA/js31+58HgNXhM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Please Perform Merge to complete the request.","request_id":"6e083c863ce24551ba0ee33e122f6233"}'
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzxb1qLyDGQisP+AiD8EgeWoKYSFKZd6HeqV0v+z7YsGF26YbntKJV4gpk88gw6LjLo5IVTbnuGS2O+xxz5SSpx/zQPdI6WuAimKWXItd0Gnk/geUtDdxum9equLKOTl7pSUZy5AqKE+1zWAWQopfKDxbhRehi9yDyL+cEhZe04yR+JUo4g6tqJNiBRgPz4P2LJxhMiZz7g/H16Ne8pYdxLHei9oeg6q5ATimE85YksEIVaqEZSk+S9mPFYgwSQ/vZZoJ5QMnAxSC4KtkoTS0CywDGslwx6bACLCcTyZMEOfFLT5+rPJyMfENr/NooH27Z/ojWdEv8j8x4tzP+NTtYwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACTjxJF3oUfNCeVNQwQO6rEZqVXpCM2JskavYfCzf++06jXbY87kYutJBzUuY4YUM7zpG53SgqzXxnpj5wsNC8xoIGs3p+pZRx1/6N1EyenTxahfs6aw+lf3ml4HwZ79A1b9z1i/tih5ftPSIAvXdVTC6E3bBNDJTOrbZp5ig+BN/I7rwDHgQBk0d6EMr4w2ej+ctdQjc5nMWA0azYBYq8dz+855kvLm425KIiUYxrzBOz35/rPiVDZkx9WEG7I4dqgqDTRwuozut/fn/Iiq2UKvflWrvf2OXhb1mLGqApLUJacTugkIjuNbaY+iHeiDVtEIsX9z/qZmUwu3gTJeYkI=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Please Perform Merge to complete the request.","request_id":"a35fbd1495eb4323859cae25a0ffc3d7"}'
         headers:
           cache-control:
           - no-cache
    @@ -85,11 +85,11 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Thu, 13 Feb 2020 20:39:07 GMT
    +      - Fri, 06 Mar 2020 00:08:50 GMT
           expires:
           - '-1'
           location:
    -      - https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0&request_id=6e083c863ce24551ba0ee33e122f6233
    +      - https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview&request_id=a35fbd1495eb4323859cae25a0ffc3d7
           pragma:
           - no-cache
           server:
    @@ -101,11 +101,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.893
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -121,13 +121,13 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview
       response:
         body:
    -      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2VEoQAL/DWd1gymRalm7WR47/qfTcJznu1Ou7gyyEPnVTEl87zZ8Dv8Z6BaMWzZYNZELoYacpVz8Osit8fuACd6uht0iCaT9cPf3JrS/5ftMmobBIWDAdEQyKtXTqnObt2ydkIdjPPcDzH8O836k1VsGwJPeNwWU/VTmMv5EExfPUZYaHJ5gIGb8VgVGggxcJSKkE7vRZAI539u2KCLLkzNDhglbymVracrj40hIkt84fwakYqTFvpd7yY52CumcqQxNKOruEgpqbqBSh+rOq8lhRZqkVEDnNP0vSa/SzOSm8FLMTZQ9tOhibCR7jJHsAvtSsq6XS37HrLzEHSSAwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAA3fxBEiUvCA9Iv7uPe/i6CnftASkd5MWH2e1QNNv+hTM6IFg44mAjwYc6q4v8mS0ox9b9LJlaqeFgGnHWGjoECOOTQfbcp/ByHghlJslBdEyQydWBGWVHHW8Lq3a08fMHtG3X/rqlmqGfxhfwQvzPMlamdq2lRcx6DcZ8kYxhowS/qyA92+qlICrcm+jOk/1j4mpwdLGngZeSzjMJWWPaanymBPjQWh/oeIRL8Eb1MD0+j0FZZNIXi6DksAZCkWazrjoeKlWe2QWeVhpjhvbINPlLcI/77SvfjXSbRziLCND7nTKRYova2MQcIoPbkhrEGcu5OCA/js31+58HgNXhM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Please Perform Merge to complete the request.","request_id":"6e083c863ce24551ba0ee33e122f6233"}'
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzxb1qLyDGQisP+AiD8EgeWoKYSFKZd6HeqV0v+z7YsGF26YbntKJV4gpk88gw6LjLo5IVTbnuGS2O+xxz5SSpx/zQPdI6WuAimKWXItd0Gnk/geUtDdxum9equLKOTl7pSUZy5AqKE+1zWAWQopfKDxbhRehi9yDyL+cEhZe04yR+JUo4g6tqJNiBRgPz4P2LJxhMiZz7g/H16Ne8pYdxLHei9oeg6q5ATimE85YksEIVaqEZSk+S9mPFYgwSQ/vZZoJ5QMnAxSC4KtkoTS0CywDGslwx6bACLCcTyZMEOfFLT5+rPJyMfENr/NooH27Z/ojWdEv8j8x4tzP+NTtYwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACTjxJF3oUfNCeVNQwQO6rEZqVXpCM2JskavYfCzf++06jXbY87kYutJBzUuY4YUM7zpG53SgqzXxnpj5wsNC8xoIGs3p+pZRx1/6N1EyenTxahfs6aw+lf3ml4HwZ79A1b9z1i/tih5ftPSIAvXdVTC6E3bBNDJTOrbZp5ig+BN/I7rwDHgQBk0d6EMr4w2ej+ctdQjc5nMWA0azYBYq8dz+855kvLm425KIiUYxrzBOz35/rPiVDZkx9WEG7I4dqgqDTRwuozut/fn/Iiq2UKvflWrvf2OXhb1mLGqApLUJacTugkIjuNbaY+iHeiDVtEIsX9z/qZmUwu3gTJeYkI=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Please Perform Merge to complete the request.","request_id":"a35fbd1495eb4323859cae25a0ffc3d7"}'
         headers:
           cache-control:
           - no-cache
    @@ -136,7 +136,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Thu, 13 Feb 2020 20:39:07 GMT
    +      - Fri, 06 Mar 2020 00:08:50 GMT
           expires:
           - '-1'
           pragma:
    @@ -150,11 +150,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.893
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -170,13 +170,13 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview
       response:
         body:
    -      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2VEoQAL/DWd1gymRalm7WR47/qfTcJznu1Ou7gyyEPnVTEl87zZ8Dv8Z6BaMWzZYNZELoYacpVz8Osit8fuACd6uht0iCaT9cPf3JrS/5ftMmobBIWDAdEQyKtXTqnObt2ydkIdjPPcDzH8O836k1VsGwJPeNwWU/VTmMv5EExfPUZYaHJ5gIGb8VgVGggxcJSKkE7vRZAI539u2KCLLkzNDhglbymVracrj40hIkt84fwakYqTFvpd7yY52CumcqQxNKOruEgpqbqBSh+rOq8lhRZqkVEDnNP0vSa/SzOSm8FLMTZQ9tOhibCR7jJHsAvtSsq6XS37HrLzEHSSAwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAA3fxBEiUvCA9Iv7uPe/i6CnftASkd5MWH2e1QNNv+hTM6IFg44mAjwYc6q4v8mS0ox9b9LJlaqeFgGnHWGjoECOOTQfbcp/ByHghlJslBdEyQydWBGWVHHW8Lq3a08fMHtG3X/rqlmqGfxhfwQvzPMlamdq2lRcx6DcZ8kYxhowS/qyA92+qlICrcm+jOk/1j4mpwdLGngZeSzjMJWWPaanymBPjQWh/oeIRL8Eb1MD0+j0FZZNIXi6DksAZCkWazrjoeKlWe2QWeVhpjhvbINPlLcI/77SvfjXSbRziLCND7nTKRYova2MQcIoPbkhrEGcu5OCA/js31+58HgNXhM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Please Perform Merge to complete the request.","request_id":"6e083c863ce24551ba0ee33e122f6233"}'
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzxb1qLyDGQisP+AiD8EgeWoKYSFKZd6HeqV0v+z7YsGF26YbntKJV4gpk88gw6LjLo5IVTbnuGS2O+xxz5SSpx/zQPdI6WuAimKWXItd0Gnk/geUtDdxum9equLKOTl7pSUZy5AqKE+1zWAWQopfKDxbhRehi9yDyL+cEhZe04yR+JUo4g6tqJNiBRgPz4P2LJxhMiZz7g/H16Ne8pYdxLHei9oeg6q5ATimE85YksEIVaqEZSk+S9mPFYgwSQ/vZZoJ5QMnAxSC4KtkoTS0CywDGslwx6bACLCcTyZMEOfFLT5+rPJyMfENr/NooH27Z/ojWdEv8j8x4tzP+NTtYwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACTjxJF3oUfNCeVNQwQO6rEZqVXpCM2JskavYfCzf++06jXbY87kYutJBzUuY4YUM7zpG53SgqzXxnpj5wsNC8xoIGs3p+pZRx1/6N1EyenTxahfs6aw+lf3ml4HwZ79A1b9z1i/tih5ftPSIAvXdVTC6E3bBNDJTOrbZp5ig+BN/I7rwDHgQBk0d6EMr4w2ej+ctdQjc5nMWA0azYBYq8dz+855kvLm425KIiUYxrzBOz35/rPiVDZkx9WEG7I4dqgqDTRwuozut/fn/Iiq2UKvflWrvf2OXhb1mLGqApLUJacTugkIjuNbaY+iHeiDVtEIsX9z/qZmUwu3gTJeYkI=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Please Perform Merge to complete the request.","request_id":"a35fbd1495eb4323859cae25a0ffc3d7"}'
         headers:
           cache-control:
           - no-cache
    @@ -185,7 +185,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Thu, 13 Feb 2020 20:39:18 GMT
    +      - Fri, 06 Mar 2020 00:09:01 GMT
           expires:
           - '-1'
           pragma:
    @@ -199,11 +199,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.893
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -219,13 +219,13 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview
       response:
         body:
    -      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2VEoQAL/DWd1gymRalm7WR47/qfTcJznu1Ou7gyyEPnVTEl87zZ8Dv8Z6BaMWzZYNZELoYacpVz8Osit8fuACd6uht0iCaT9cPf3JrS/5ftMmobBIWDAdEQyKtXTqnObt2ydkIdjPPcDzH8O836k1VsGwJPeNwWU/VTmMv5EExfPUZYaHJ5gIGb8VgVGggxcJSKkE7vRZAI539u2KCLLkzNDhglbymVracrj40hIkt84fwakYqTFvpd7yY52CumcqQxNKOruEgpqbqBSh+rOq8lhRZqkVEDnNP0vSa/SzOSm8FLMTZQ9tOhibCR7jJHsAvtSsq6XS37HrLzEHSSAwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAA3fxBEiUvCA9Iv7uPe/i6CnftASkd5MWH2e1QNNv+hTM6IFg44mAjwYc6q4v8mS0ox9b9LJlaqeFgGnHWGjoECOOTQfbcp/ByHghlJslBdEyQydWBGWVHHW8Lq3a08fMHtG3X/rqlmqGfxhfwQvzPMlamdq2lRcx6DcZ8kYxhowS/qyA92+qlICrcm+jOk/1j4mpwdLGngZeSzjMJWWPaanymBPjQWh/oeIRL8Eb1MD0+j0FZZNIXi6DksAZCkWazrjoeKlWe2QWeVhpjhvbINPlLcI/77SvfjXSbRziLCND7nTKRYova2MQcIoPbkhrEGcu5OCA/js31+58HgNXhM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Please Perform Merge to complete the request.","request_id":"6e083c863ce24551ba0ee33e122f6233"}'
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzxb1qLyDGQisP+AiD8EgeWoKYSFKZd6HeqV0v+z7YsGF26YbntKJV4gpk88gw6LjLo5IVTbnuGS2O+xxz5SSpx/zQPdI6WuAimKWXItd0Gnk/geUtDdxum9equLKOTl7pSUZy5AqKE+1zWAWQopfKDxbhRehi9yDyL+cEhZe04yR+JUo4g6tqJNiBRgPz4P2LJxhMiZz7g/H16Ne8pYdxLHei9oeg6q5ATimE85YksEIVaqEZSk+S9mPFYgwSQ/vZZoJ5QMnAxSC4KtkoTS0CywDGslwx6bACLCcTyZMEOfFLT5+rPJyMfENr/NooH27Z/ojWdEv8j8x4tzP+NTtYwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACTjxJF3oUfNCeVNQwQO6rEZqVXpCM2JskavYfCzf++06jXbY87kYutJBzUuY4YUM7zpG53SgqzXxnpj5wsNC8xoIGs3p+pZRx1/6N1EyenTxahfs6aw+lf3ml4HwZ79A1b9z1i/tih5ftPSIAvXdVTC6E3bBNDJTOrbZp5ig+BN/I7rwDHgQBk0d6EMr4w2ej+ctdQjc5nMWA0azYBYq8dz+855kvLm425KIiUYxrzBOz35/rPiVDZkx9WEG7I4dqgqDTRwuozut/fn/Iiq2UKvflWrvf2OXhb1mLGqApLUJacTugkIjuNbaY+iHeiDVtEIsX9z/qZmUwu3gTJeYkI=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Please Perform Merge to complete the request.","request_id":"a35fbd1495eb4323859cae25a0ffc3d7"}'
         headers:
           cache-control:
           - no-cache
    @@ -234,7 +234,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Thu, 13 Feb 2020 20:39:28 GMT
    +      - Fri, 06 Mar 2020 00:09:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -248,11 +248,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.893
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -268,13 +268,13 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview
       response:
         body:
    -      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2VEoQAL/DWd1gymRalm7WR47/qfTcJznu1Ou7gyyEPnVTEl87zZ8Dv8Z6BaMWzZYNZELoYacpVz8Osit8fuACd6uht0iCaT9cPf3JrS/5ftMmobBIWDAdEQyKtXTqnObt2ydkIdjPPcDzH8O836k1VsGwJPeNwWU/VTmMv5EExfPUZYaHJ5gIGb8VgVGggxcJSKkE7vRZAI539u2KCLLkzNDhglbymVracrj40hIkt84fwakYqTFvpd7yY52CumcqQxNKOruEgpqbqBSh+rOq8lhRZqkVEDnNP0vSa/SzOSm8FLMTZQ9tOhibCR7jJHsAvtSsq6XS37HrLzEHSSAwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAA3fxBEiUvCA9Iv7uPe/i6CnftASkd5MWH2e1QNNv+hTM6IFg44mAjwYc6q4v8mS0ox9b9LJlaqeFgGnHWGjoECOOTQfbcp/ByHghlJslBdEyQydWBGWVHHW8Lq3a08fMHtG3X/rqlmqGfxhfwQvzPMlamdq2lRcx6DcZ8kYxhowS/qyA92+qlICrcm+jOk/1j4mpwdLGngZeSzjMJWWPaanymBPjQWh/oeIRL8Eb1MD0+j0FZZNIXi6DksAZCkWazrjoeKlWe2QWeVhpjhvbINPlLcI/77SvfjXSbRziLCND7nTKRYova2MQcIoPbkhrEGcu5OCA/js31+58HgNXhM=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Please Perform Merge to complete the request.","request_id":"6e083c863ce24551ba0ee33e122f6233"}'
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzxb1qLyDGQisP+AiD8EgeWoKYSFKZd6HeqV0v+z7YsGF26YbntKJV4gpk88gw6LjLo5IVTbnuGS2O+xxz5SSpx/zQPdI6WuAimKWXItd0Gnk/geUtDdxum9equLKOTl7pSUZy5AqKE+1zWAWQopfKDxbhRehi9yDyL+cEhZe04yR+JUo4g6tqJNiBRgPz4P2LJxhMiZz7g/H16Ne8pYdxLHei9oeg6q5ATimE85YksEIVaqEZSk+S9mPFYgwSQ/vZZoJ5QMnAxSC4KtkoTS0CywDGslwx6bACLCcTyZMEOfFLT5+rPJyMfENr/NooH27Z/ojWdEv8j8x4tzP+NTtYwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACTjxJF3oUfNCeVNQwQO6rEZqVXpCM2JskavYfCzf++06jXbY87kYutJBzUuY4YUM7zpG53SgqzXxnpj5wsNC8xoIGs3p+pZRx1/6N1EyenTxahfs6aw+lf3ml4HwZ79A1b9z1i/tih5ftPSIAvXdVTC6E3bBNDJTOrbZp5ig+BN/I7rwDHgQBk0d6EMr4w2ej+ctdQjc5nMWA0azYBYq8dz+855kvLm425KIiUYxrzBOz35/rPiVDZkx9WEG7I4dqgqDTRwuozut/fn/Iiq2UKvflWrvf2OXhb1mLGqApLUJacTugkIjuNbaY+iHeiDVtEIsX9z/qZmUwu3gTJeYkI=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Please Perform Merge to complete the request.","request_id":"a35fbd1495eb4323859cae25a0ffc3d7"}'
         headers:
           cache-control:
           - no-cache
    @@ -283,7 +283,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Thu, 13 Feb 2020 20:39:38 GMT
    +      - Fri, 06 Mar 2020 00:09:21 GMT
           expires:
           - '-1'
           pragma:
    @@ -297,18 +297,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.893
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"x5c": ["TUlJQ3lqQ0NBYklDQVFFd0RRWUpLb1pJaHZjTkFRRUxCUUF3UlRFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVkJBZ01DbE52YldVdFUzUmhkR1V4SVRBZkJnTlZCQW9NR0VsdWRHVnlibVYwSUZkcFpHZHBkSE1nVUhSNUlFeDBaREFlRncweU1EQXlNVE15TURNNU16aGFGdzB5TURBeU1UTXlNRFF3TXpoYU1CRXhEekFOQmdOVkJBTVRCazE1UTJWeWREQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUw5bFJLRUFDL3cxbmRZTXBrV3BadTFrZU8vNm4wM0NjNTd0VHJ1NE1zaEQ1MVV4SmZPODJmQTcvR2VnV2pGczJXRFdSQzZHR25LVmMvRHJJcmZIN2dBbmVyb2JkSWdtay9YRDM5eWEwditYN1RKcUd3U0Znd0hSRU1pclYwNnB6bTdkc25aQ0hZenozQTh4L0R2TitwTlZiQnNDVDNqY0ZsUDFVNWpMK1JCTVh6MUdXR2h5ZVlDQm0vRllGUm9JTVhDVWlwQk83MFdRQ09kL2J0aWdpeTVNelE0WUpXOHBsYTJuSzQrTklTSkxmT0g4R3BHS2t4YjZYZThtT2RncnBuS2tNVFNqcTdoSUthbTZnVW9mcXpxdkpZVVdhcEZSQTV6VDlMMG12MHN6a3B2QlN6RTJVUGJUb1ltd2tlNHlSN0FMN1VyS3VsMHQreDZ5OHhCMGtnTUNBd0VBQVRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQXN1c0lVUENFdWhnL2NqZ3BYWitwMldwczQxU25xUDNSSnhycmIvZ0JTVjdwSzFObWFsbGp2TnBFV3J6ZktLSGJUU1VOZjcxYVE0UnBPMmhYUk9INjZrUHM1NFJSdU8yYnAxTmdXbHU0am9vQnQzK1ZxajlzN0tTamV5WkI4b09YWm5SS2JyTFpybkZ5R0g5bW1UTGhmVFQ3YldZaS90b3VyTjFOVlZ1OWgrMituOG40L01xTGZWbk5DMUh4R0JMbGl6clZpdHVEcHBiSFl0dmQrOU4rNVg3MjBYamlLZFhIaGllYjZBSEJiOFdSdkVQdlV1V0QxQmNxTE9TSjNGTUladE11VjZsN1B0NmpnUnZGYkFLb0ZsYXhKWVRBWm1nMVoyUEk2YStxZTFESkNyemVaVjJyRXJ2N3NMTG8vdjhpbmtOS21kUWJwM29Fa2ZkSC80WFpmZz09"]}'
    +    body: '{"x5c": ["TUlJQ3lqQ0NBYklDQVFFd0RRWUpLb1pJaHZjTkFRRUxCUUF3UlRFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVkJBZ01DbE52YldVdFUzUmhkR1V4SVRBZkJnTlZCQW9NR0VsdWRHVnlibVYwSUZkcFpHZHBkSE1nVUhSNUlFeDBaREFlRncweU1EQXpNRFl3TURBNU1qQmFGdzB5TURBek1EWXdNREV3TWpCYU1CRXhEekFOQmdOVkJBTVRCazE1UTJWeWREQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU04VzlhaThneGtJckQvZ0lnL0JJSGxxQ21FaFNtWGVoM3FsZEwvcysyTEJoZHVtRzU3U2lWZUlLWlBQSU1PaTR5Nk9TRlUyNTdoa3RqdnNjYytVa3FjZjgwRDNTT2xyZ0lwaWxseUxYZEJwNVA0SGxMUTNjYnB2WHFyaXlqazVlNlVsR2N1UUtpaFB0YzFnRmtLS1h5ZzhXNFVYb1l2Y2c4aS9uQklXWHRPTWtmaVZLT0lPcmFpVFlnVVlEOCtEOWl5Y1lUSW1jKzRQeDllalh2S1dIY1N4M292YUhvT3F1UUU0cGhQT1dKTEJDRldxaEdVcFBrdlpqeFdJTUVrUDcyV2FDZVVESndNVWd1Q3JaS0UwdEFzc0F4ckpjTWVtd0Fpd25FOG1UQkRueFMwK2Zxenljakh4RGEvemFLQjl1MmY2STFuUkwvSS9NZUxjei9qVTdXTUNBd0VBQVRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQVE1VEFFNVlYZEtWS0pqNytUcVQ0Qzc0RkxPMDYzNWg4WXkyWnY0VnZFanB4UTIyMUdnK0FDTUxXa3JGTlhZbEVqQk1hTmdYUDVTYk1UNmo1U0ppa2NKWVN0ZmJobmloSU5lV1F5N3pGUjBPUTc4Sm5KMmV5eml2YUJRVEEzWE1aMm9QZDhXMTFoUmVFMjBOaGJ3REVZMFJpKzNkdUw1Tk0wSkhBRzYrUVhUQ0VORzAzd2NCZ0VBcE5yeVR4cXIrSFkwc2NpeEc2RVZ1eExHME9yd3k2QmZqNGYvejllejZ2dGUzMU5WMEVZRTRuMXZ4RVJXR0w0QnRDV1NCWWpiQUdBRTVtclBjZWlhYmlxZVUya08wM3JWK3ZxTHZpZUtXNDIwa2Jnd3FhM1M1NVN6dW9rTm14dkFGU3Yrb2ovKytFUDlRazFkdTFpaHhIZENRdHFBYU8zZz09"]}'
         headers:
           Accept:
           - application/json
    @@ -321,25 +321,25 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending/merge?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending/merge?api-version=7.1-preview
       response:
         body:
    -      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/649158b4980c47c18359d55d585c3d43","kid":"https://vaultname.vault.azure.net/keys/mergeCertificate/649158b4980c47c18359d55d585c3d43","sid":"https://vaultname.vault.azure.net/secrets/mergeCertificate/649158b4980c47c18359d55d585c3d43","x5t":"c2tXCMPT36D-BOsMbTKrCgOsnOM","cer":"MIICyjCCAbICAQEwDQYJKoZIhvcNAQELBQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMDAyMTMyMDM5MzhaFw0yMDAyMTMyMDQwMzhaMBExDzANBgNVBAMTBk15Q2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9lRKEAC/w1ndYMpkWpZu1keO/6n03Cc57tTru4MshD51UxJfO82fA7/GegWjFs2WDWRC6GGnKVc/DrIrfH7gAnerobdIgmk/XD39ya0v+X7TJqGwSFgwHREMirV06pzm7dsnZCHYzz3A8x/DvN+pNVbBsCT3jcFlP1U5jL+RBMXz1GWGhyeYCBm/FYFRoIMXCUipBO70WQCOd/btigiy5MzQ4YJW8pla2nK4+NISJLfOH8GpGKkxb6Xe8mOdgrpnKkMTSjq7hIKam6gUofqzqvJYUWapFRA5zT9L0mv0szkpvBSzE2UPbToYmwke4yR7AL7UrKul0t+x6y8xB0kgMCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAsusIUPCEuhg/cjgpXZ+p2Wps41SnqP3RJxrrb/gBSV7pK1NmalljvNpEWrzfKKHbTSUNf71aQ4RpO2hXROH66kPs54RRuO2bp1NgWlu4jooBt3+Vqj9s7KSjeyZB8oOXZnRKbrLZrnFyGH9mmTLhfTT7bWYi/tourN1NVVu9h+2+n8n4/MqLfVnNC1HxGBLlizrVituDppbHYtvd+9N+5X720XjiKdXHhieb6AHBb8WRvEPvUuWD1BcqLOSJ3FMIZtMuV6l7Pt6jgRvFbAKoFlaxJYTAZmg1Z2PI6a+qe1DJCrzeZV2rErv7sLLo/v8inkNKmdQbp3oEkfdH/4XZfg==","attributes":{"enabled":true,"nbf":1581626378,"exp":1581626438,"created":1581626378,"updated":1581626378,"recoveryLevel":"Recoverable+Purgeable","recoverableDays":90},"policy":{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=MyCert","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Unknown","cert_transparency":false},"attributes":{"enabled":true,"created":1581626347,"updated":1581626347}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending"}}'
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/eb2db5d0bc644835acbd17c99aade3a3","kid":"https://vaultname.vault.azure.net/keys/mergeCertificate/eb2db5d0bc644835acbd17c99aade3a3","sid":"https://vaultname.vault.azure.net/secrets/mergeCertificate/eb2db5d0bc644835acbd17c99aade3a3","x5t":"ctAd5bC1XFoa7LyKP6g_kBxVreI","cer":"MIICyjCCAbICAQEwDQYJKoZIhvcNAQELBQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMDAzMDYwMDA5MjBaFw0yMDAzMDYwMDEwMjBaMBExDzANBgNVBAMTBk15Q2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8W9ai8gxkIrD/gIg/BIHlqCmEhSmXeh3qldL/s+2LBhdumG57SiVeIKZPPIMOi4y6OSFU257hktjvscc+Ukqcf80D3SOlrgIpillyLXdBp5P4HlLQ3cbpvXqriyjk5e6UlGcuQKihPtc1gFkKKXyg8W4UXoYvcg8i/nBIWXtOMkfiVKOIOraiTYgUYD8+D9iycYTImc+4Px9ejXvKWHcSx3ovaHoOquQE4phPOWJLBCFWqhGUpPkvZjxWIMEkP72WaCeUDJwMUguCrZKE0tAssAxrJcMemwAiwnE8mTBDnxS0+fqzycjHxDa/zaKB9u2f6I1nRL/I/MeLcz/jU7WMCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAQ5TAE5YXdKVKJj7+TqT4C74FLO0635h8Yy2Zv4VvEjpxQ221Gg+ACMLWkrFNXYlEjBMaNgXP5SbMT6j5SJikcJYStfbhnihINeWQy7zFR0OQ78JnJ2eyzivaBQTA3XMZ2oPd8W11hReE20NhbwDEY0Ri+3duL5NM0JHAG6+QXTCENG03wcBgEApNryTxqr+HY0scixG6EVuxLG0Orwy6Bfj4f/z9ez6vte31NV0EYE4n1vxERWGL4BtCWSBYjbAGAE5mrPceiabiqeU2kO03rV+vqLvieKW420kbgwqa3S55SzuokNmxvAFSv+oj/++EP9Qk1du1ihxHdCQtqAaO3g==","attributes":{"enabled":true,"nbf":1583453360,"exp":1583453420,"created":1583453362,"updated":1583453362,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=MyCert","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Unknown","cert_transparency":false},"attributes":{"enabled":true,"created":1583453331,"updated":1583453331}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '2289'
    +      - '2268'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Thu, 13 Feb 2020 20:39:38 GMT
    +      - Fri, 06 Mar 2020 00:09:22 GMT
           expires:
           - '-1'
           location:
    -      - https://vaultname.vault.azure.net/certificates/mergeCertificate?api-version=7.0
    +      - https://vaultname.vault.azure.net/certificates/mergeCertificate?api-version=7.1-preview
           pragma:
           - no-cache
           server:
    @@ -351,11 +351,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.893
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_merge_certificate_async.test_merge_certificate.yaml b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_merge_certificate_async.test_merge_certificate.yaml
    index 27491c540c87..32dba490c8c5 100644
    --- a/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_merge_certificate_async.test_merge_certificate.yaml
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/recordings/test_merge_certificate_async.test_merge_certificate.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Thu, 13 Feb 2020 20:36:34 GMT
    +      date: Fri, 06 Mar 2020 00:10:52 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,14 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.893
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: https://bid4uiywoz74agpzfxgsp7fm.vault.azure.net/certificates/mergeCertificate/create?api-version=7.0
    +    url: https://jnh32pnzee3y75cxxv3i43bs.vault.azure.net/certificates/mergeCertificate/create?api-version=7.1-preview
     - request:
         body: '{"policy": {"x509_props": {"subject": "CN=MyCert", "sans": {}}, "issuer":
           {"name": "Unknown", "cert_transparency": false}}}'
    @@ -48,18 +48,18 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt5MqTtkG9kd2mHkhSn+/MRR6iUbESsgpSEjjxCJ0DR3pdmiEUJbfUBPkNBt20x7sMAl18unzqHOTI497CsrCqJo2++fkgNYWnzcjtm03/KJ9/7FzRLaJzXLkndRLYIJ+hLizLDnSE3kgTFTNzcJ2WzpH6kuSIyDq7GfKvFGAG53Xor4uLCyGm2IbBSvg47a9PvuDoqr9gYrZg8cAQm2Pacd8AwVZtK0xSQ2U7mXPBBVmoeeXPXC367P+HvD43FgH6LbiGEG12q5hTveP1mIP0nfiIt5YlfRl2ZZQVcpbm9sQQ1sFHenx6jfP7U1JC8wylAh3fR+YcPrbWzoIsq+kOwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAC5v96kBuxs5poFx2PJ+MvEWD4h96ub/Jnp5Q+rAUnkVfJF7nPhoEI1+q9Y19z4YEc+4SxACv6N8hWRc34ElP8CkWk43kEDsf5bah7+2uQQR3bjPsJ9rR4oZjulRtSLYZzifC9TO7QME8lgk4VOiNA/Hoec2BvNFL/m6RVVeGEt322czOQReNSY2Lbib8GiudQK2o6w8NHAoa235+XncXCfW5kqXG4AlMPiaTj8TYvjVZqtogkx+pGoyr0Oyr2pIHvoPBfkGCvO6GZ3MJT69YazFBkfBwagQBIk8+sfQDbHM2BHWJc+PoR0sv97Z+NDOnA4AV0J1jTRqo+iTiAVhAzE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Please Perform Merge to complete the request.","request_id":"096c9dc00cf0473d943cad3471160bda"}'
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWNvirzYoiegN6GO+uKfj+8wbXWh3ov3UrWck7gtHqKZ8HDJSHBZxMufmrR3sLL4IocZ7PaizZK9cg+Rig+0XTT2kZUwwmfYSYzM7VHph60QcHqSYynhnWaoYiJEmlM6eEX7lMmrduuqhI4b4c4gOsS6uYgBDcLEVrh9+lm6ga+KolvGRBaeVPtNdE3k5Evj3Tdrik3akfIhiHyM4AI1hjLmmYvTU3zIyR+A/h+Zk8EN/keqdBNTle/AHNr5CROF4Tzfj4yZO268vIpO3Hz2qH3aOVDnvhKoD9McX92DS3LdxiyO2CcvtZUd/pPjH7jXC2hW1bqkxllkjqOBIBPmDQIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAFUVTprHUXNkgnh5mcUmPgEOkcP0z3fOAXyOtTVGmZe2uz6i1IM2gTvDqI4hqMsJpnXj/fEUKN6gApIuCpsegzlAjNtTUKpc749WXmDu0wEjKtQtItqgLOXwp20OZbevuIwPl+9a1TKQz9eb6xemuPhPAHKR6AU3xqN+WzkF5PvZ+izvsXDQToNhV+4Yu9v9XrCFLK/U7sPg/Me+wjbl34+vdxbOZyLB2uPbFltfjPC5S1/qU2+SuoAIEXa1KCpcxsxjSbf7VhV/AJsQc8xdqnWtN1JLDdVlBZ1jfcs9pyM7ZOv/vbObyPxCN3qUgEH5p8g554RZUh6nlHvNFvKmE6A=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Please Perform Merge to complete the request.","request_id":"da6207e8504f4d868954dd9fc46d7180"}'
         headers:
           cache-control: no-cache
           content-length: '1231'
           content-type: application/json; charset=utf-8
    -      date: Thu, 13 Feb 2020 20:36:35 GMT
    +      date: Fri, 06 Mar 2020 00:10:53 GMT
           expires: '-1'
           location:
           - h
    @@ -70,30 +70,30 @@ interactions:
           - ':'
           - /
           - /
    -      - b
    -      - i
    -      - d
    -      - '4'
    -      - u
    -      - i
    -      - y
    -      - w
    -      - o
    -      - z
    -      - '7'
    -      - '4'
    -      - a
    -      - g
    +      - j
    +      - n
    +      - h
    +      - '3'
    +      - '2'
           - p
    +      - n
           - z
    -      - f
    +      - e
    +      - e
    +      - '3'
    +      - y
    +      - '7'
    +      - '5'
    +      - c
           - x
    -      - g
    +      - x
    +      - v
    +      - '3'
    +      - i
    +      - '4'
    +      - '3'
    +      - b
           - s
    -      - p
    -      - '7'
    -      - f
    -      - m
           - .
           - v
           - a
    @@ -163,7 +163,15 @@ interactions:
           - '='
           - '7'
           - .
    -      - '0'
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
           - '&'
           - r
           - e
    @@ -176,181 +184,181 @@ interactions:
           - i
           - d
           - '='
    -      - '0'
    -      - '9'
    -      - '6'
    -      - c
    -      - '9'
           - d
    -      - c
    +      - a
    +      - '6'
    +      - '2'
           - '0'
    +      - '7'
    +      - e
    +      - '8'
    +      - '5'
           - '0'
    -      - c
    +      - '4'
           - f
    -      - '0'
           - '4'
    -      - '7'
    -      - '3'
           - d
    +      - '8'
    +      - '6'
    +      - '8'
           - '9'
    +      - '5'
           - '4'
    -      - '3'
    -      - c
    -      - a
           - d
    -      - '3'
    +      - d
    +      - '9'
    +      - f
    +      - c
           - '4'
    +      - '6'
    +      - d
           - '7'
           - '1'
    -      - '1'
    -      - '6'
    +      - '8'
           - '0'
    -      - b
    -      - d
    -      - a
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.893
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 202
           message: Accepted
    -    url: https://bid4uiywoz74agpzfxgsp7fm.vault.azure.net/certificates/mergeCertificate/create?api-version=7.0
    +    url: https://jnh32pnzee3y75cxxv3i43bs.vault.azure.net/certificates/mergeCertificate/create?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview
       response:
         body:
    -      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt5MqTtkG9kd2mHkhSn+/MRR6iUbESsgpSEjjxCJ0DR3pdmiEUJbfUBPkNBt20x7sMAl18unzqHOTI497CsrCqJo2++fkgNYWnzcjtm03/KJ9/7FzRLaJzXLkndRLYIJ+hLizLDnSE3kgTFTNzcJ2WzpH6kuSIyDq7GfKvFGAG53Xor4uLCyGm2IbBSvg47a9PvuDoqr9gYrZg8cAQm2Pacd8AwVZtK0xSQ2U7mXPBBVmoeeXPXC367P+HvD43FgH6LbiGEG12q5hTveP1mIP0nfiIt5YlfRl2ZZQVcpbm9sQQ1sFHenx6jfP7U1JC8wylAh3fR+YcPrbWzoIsq+kOwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAC5v96kBuxs5poFx2PJ+MvEWD4h96ub/Jnp5Q+rAUnkVfJF7nPhoEI1+q9Y19z4YEc+4SxACv6N8hWRc34ElP8CkWk43kEDsf5bah7+2uQQR3bjPsJ9rR4oZjulRtSLYZzifC9TO7QME8lgk4VOiNA/Hoec2BvNFL/m6RVVeGEt322czOQReNSY2Lbib8GiudQK2o6w8NHAoa235+XncXCfW5kqXG4AlMPiaTj8TYvjVZqtogkx+pGoyr0Oyr2pIHvoPBfkGCvO6GZ3MJT69YazFBkfBwagQBIk8+sfQDbHM2BHWJc+PoR0sv97Z+NDOnA4AV0J1jTRqo+iTiAVhAzE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Please Perform Merge to complete the request.","request_id":"096c9dc00cf0473d943cad3471160bda"}'
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWNvirzYoiegN6GO+uKfj+8wbXWh3ov3UrWck7gtHqKZ8HDJSHBZxMufmrR3sLL4IocZ7PaizZK9cg+Rig+0XTT2kZUwwmfYSYzM7VHph60QcHqSYynhnWaoYiJEmlM6eEX7lMmrduuqhI4b4c4gOsS6uYgBDcLEVrh9+lm6ga+KolvGRBaeVPtNdE3k5Evj3Tdrik3akfIhiHyM4AI1hjLmmYvTU3zIyR+A/h+Zk8EN/keqdBNTle/AHNr5CROF4Tzfj4yZO268vIpO3Hz2qH3aOVDnvhKoD9McX92DS3LdxiyO2CcvtZUd/pPjH7jXC2hW1bqkxllkjqOBIBPmDQIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAFUVTprHUXNkgnh5mcUmPgEOkcP0z3fOAXyOtTVGmZe2uz6i1IM2gTvDqI4hqMsJpnXj/fEUKN6gApIuCpsegzlAjNtTUKpc749WXmDu0wEjKtQtItqgLOXwp20OZbevuIwPl+9a1TKQz9eb6xemuPhPAHKR6AU3xqN+WzkF5PvZ+izvsXDQToNhV+4Yu9v9XrCFLK/U7sPg/Me+wjbl34+vdxbOZyLB2uPbFltfjPC5S1/qU2+SuoAIEXa1KCpcxsxjSbf7VhV/AJsQc8xdqnWtN1JLDdVlBZ1jfcs9pyM7ZOv/vbObyPxCN3qUgEH5p8g554RZUh6nlHvNFvKmE6A=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Please Perform Merge to complete the request.","request_id":"da6207e8504f4d868954dd9fc46d7180"}'
         headers:
           cache-control: no-cache
           content-length: '1231'
           content-type: application/json; charset=utf-8
    -      date: Thu, 13 Feb 2020 20:36:35 GMT
    +      date: Fri, 06 Mar 2020 00:10:53 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.893
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://bid4uiywoz74agpzfxgsp7fm.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0
    +    url: https://jnh32pnzee3y75cxxv3i43bs.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview
       response:
         body:
    -      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt5MqTtkG9kd2mHkhSn+/MRR6iUbESsgpSEjjxCJ0DR3pdmiEUJbfUBPkNBt20x7sMAl18unzqHOTI497CsrCqJo2++fkgNYWnzcjtm03/KJ9/7FzRLaJzXLkndRLYIJ+hLizLDnSE3kgTFTNzcJ2WzpH6kuSIyDq7GfKvFGAG53Xor4uLCyGm2IbBSvg47a9PvuDoqr9gYrZg8cAQm2Pacd8AwVZtK0xSQ2U7mXPBBVmoeeXPXC367P+HvD43FgH6LbiGEG12q5hTveP1mIP0nfiIt5YlfRl2ZZQVcpbm9sQQ1sFHenx6jfP7U1JC8wylAh3fR+YcPrbWzoIsq+kOwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAC5v96kBuxs5poFx2PJ+MvEWD4h96ub/Jnp5Q+rAUnkVfJF7nPhoEI1+q9Y19z4YEc+4SxACv6N8hWRc34ElP8CkWk43kEDsf5bah7+2uQQR3bjPsJ9rR4oZjulRtSLYZzifC9TO7QME8lgk4VOiNA/Hoec2BvNFL/m6RVVeGEt322czOQReNSY2Lbib8GiudQK2o6w8NHAoa235+XncXCfW5kqXG4AlMPiaTj8TYvjVZqtogkx+pGoyr0Oyr2pIHvoPBfkGCvO6GZ3MJT69YazFBkfBwagQBIk8+sfQDbHM2BHWJc+PoR0sv97Z+NDOnA4AV0J1jTRqo+iTiAVhAzE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Please Perform Merge to complete the request.","request_id":"096c9dc00cf0473d943cad3471160bda"}'
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWNvirzYoiegN6GO+uKfj+8wbXWh3ov3UrWck7gtHqKZ8HDJSHBZxMufmrR3sLL4IocZ7PaizZK9cg+Rig+0XTT2kZUwwmfYSYzM7VHph60QcHqSYynhnWaoYiJEmlM6eEX7lMmrduuqhI4b4c4gOsS6uYgBDcLEVrh9+lm6ga+KolvGRBaeVPtNdE3k5Evj3Tdrik3akfIhiHyM4AI1hjLmmYvTU3zIyR+A/h+Zk8EN/keqdBNTle/AHNr5CROF4Tzfj4yZO268vIpO3Hz2qH3aOVDnvhKoD9McX92DS3LdxiyO2CcvtZUd/pPjH7jXC2hW1bqkxllkjqOBIBPmDQIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAFUVTprHUXNkgnh5mcUmPgEOkcP0z3fOAXyOtTVGmZe2uz6i1IM2gTvDqI4hqMsJpnXj/fEUKN6gApIuCpsegzlAjNtTUKpc749WXmDu0wEjKtQtItqgLOXwp20OZbevuIwPl+9a1TKQz9eb6xemuPhPAHKR6AU3xqN+WzkF5PvZ+izvsXDQToNhV+4Yu9v9XrCFLK/U7sPg/Me+wjbl34+vdxbOZyLB2uPbFltfjPC5S1/qU2+SuoAIEXa1KCpcxsxjSbf7VhV/AJsQc8xdqnWtN1JLDdVlBZ1jfcs9pyM7ZOv/vbObyPxCN3qUgEH5p8g554RZUh6nlHvNFvKmE6A=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Please Perform Merge to complete the request.","request_id":"da6207e8504f4d868954dd9fc46d7180"}'
         headers:
           cache-control: no-cache
           content-length: '1231'
           content-type: application/json; charset=utf-8
    -      date: Thu, 13 Feb 2020 20:36:45 GMT
    +      date: Fri, 06 Mar 2020 00:11:02 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.893
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://bid4uiywoz74agpzfxgsp7fm.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0
    +    url: https://jnh32pnzee3y75cxxv3i43bs.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview
       response:
         body:
    -      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt5MqTtkG9kd2mHkhSn+/MRR6iUbESsgpSEjjxCJ0DR3pdmiEUJbfUBPkNBt20x7sMAl18unzqHOTI497CsrCqJo2++fkgNYWnzcjtm03/KJ9/7FzRLaJzXLkndRLYIJ+hLizLDnSE3kgTFTNzcJ2WzpH6kuSIyDq7GfKvFGAG53Xor4uLCyGm2IbBSvg47a9PvuDoqr9gYrZg8cAQm2Pacd8AwVZtK0xSQ2U7mXPBBVmoeeXPXC367P+HvD43FgH6LbiGEG12q5hTveP1mIP0nfiIt5YlfRl2ZZQVcpbm9sQQ1sFHenx6jfP7U1JC8wylAh3fR+YcPrbWzoIsq+kOwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAC5v96kBuxs5poFx2PJ+MvEWD4h96ub/Jnp5Q+rAUnkVfJF7nPhoEI1+q9Y19z4YEc+4SxACv6N8hWRc34ElP8CkWk43kEDsf5bah7+2uQQR3bjPsJ9rR4oZjulRtSLYZzifC9TO7QME8lgk4VOiNA/Hoec2BvNFL/m6RVVeGEt322czOQReNSY2Lbib8GiudQK2o6w8NHAoa235+XncXCfW5kqXG4AlMPiaTj8TYvjVZqtogkx+pGoyr0Oyr2pIHvoPBfkGCvO6GZ3MJT69YazFBkfBwagQBIk8+sfQDbHM2BHWJc+PoR0sv97Z+NDOnA4AV0J1jTRqo+iTiAVhAzE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Please Perform Merge to complete the request.","request_id":"096c9dc00cf0473d943cad3471160bda"}'
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWNvirzYoiegN6GO+uKfj+8wbXWh3ov3UrWck7gtHqKZ8HDJSHBZxMufmrR3sLL4IocZ7PaizZK9cg+Rig+0XTT2kZUwwmfYSYzM7VHph60QcHqSYynhnWaoYiJEmlM6eEX7lMmrduuqhI4b4c4gOsS6uYgBDcLEVrh9+lm6ga+KolvGRBaeVPtNdE3k5Evj3Tdrik3akfIhiHyM4AI1hjLmmYvTU3zIyR+A/h+Zk8EN/keqdBNTle/AHNr5CROF4Tzfj4yZO268vIpO3Hz2qH3aOVDnvhKoD9McX92DS3LdxiyO2CcvtZUd/pPjH7jXC2hW1bqkxllkjqOBIBPmDQIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAFUVTprHUXNkgnh5mcUmPgEOkcP0z3fOAXyOtTVGmZe2uz6i1IM2gTvDqI4hqMsJpnXj/fEUKN6gApIuCpsegzlAjNtTUKpc749WXmDu0wEjKtQtItqgLOXwp20OZbevuIwPl+9a1TKQz9eb6xemuPhPAHKR6AU3xqN+WzkF5PvZ+izvsXDQToNhV+4Yu9v9XrCFLK/U7sPg/Me+wjbl34+vdxbOZyLB2uPbFltfjPC5S1/qU2+SuoAIEXa1KCpcxsxjSbf7VhV/AJsQc8xdqnWtN1JLDdVlBZ1jfcs9pyM7ZOv/vbObyPxCN3qUgEH5p8g554RZUh6nlHvNFvKmE6A=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Please Perform Merge to complete the request.","request_id":"da6207e8504f4d868954dd9fc46d7180"}'
         headers:
           cache-control: no-cache
           content-length: '1231'
           content-type: application/json; charset=utf-8
    -      date: Thu, 13 Feb 2020 20:36:55 GMT
    +      date: Fri, 06 Mar 2020 00:11:12 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.893
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://bid4uiywoz74agpzfxgsp7fm.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0
    +    url: https://jnh32pnzee3y75cxxv3i43bs.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview
       response:
         body:
    -      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt5MqTtkG9kd2mHkhSn+/MRR6iUbESsgpSEjjxCJ0DR3pdmiEUJbfUBPkNBt20x7sMAl18unzqHOTI497CsrCqJo2++fkgNYWnzcjtm03/KJ9/7FzRLaJzXLkndRLYIJ+hLizLDnSE3kgTFTNzcJ2WzpH6kuSIyDq7GfKvFGAG53Xor4uLCyGm2IbBSvg47a9PvuDoqr9gYrZg8cAQm2Pacd8AwVZtK0xSQ2U7mXPBBVmoeeXPXC367P+HvD43FgH6LbiGEG12q5hTveP1mIP0nfiIt5YlfRl2ZZQVcpbm9sQQ1sFHenx6jfP7U1JC8wylAh3fR+YcPrbWzoIsq+kOwIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAC5v96kBuxs5poFx2PJ+MvEWD4h96ub/Jnp5Q+rAUnkVfJF7nPhoEI1+q9Y19z4YEc+4SxACv6N8hWRc34ElP8CkWk43kEDsf5bah7+2uQQR3bjPsJ9rR4oZjulRtSLYZzifC9TO7QME8lgk4VOiNA/Hoec2BvNFL/m6RVVeGEt322czOQReNSY2Lbib8GiudQK2o6w8NHAoa235+XncXCfW5kqXG4AlMPiaTj8TYvjVZqtogkx+pGoyr0Oyr2pIHvoPBfkGCvO6GZ3MJT69YazFBkfBwagQBIk8+sfQDbHM2BHWJc+PoR0sv97Z+NDOnA4AV0J1jTRqo+iTiAVhAzE=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    -        certificate created. Please Perform Merge to complete the request.","request_id":"096c9dc00cf0473d943cad3471160bda"}'
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending","issuer":{"name":"Unknown"},"csr":"MIICoTCCAYkCAQAwETEPMA0GA1UEAxMGTXlDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWNvirzYoiegN6GO+uKfj+8wbXWh3ov3UrWck7gtHqKZ8HDJSHBZxMufmrR3sLL4IocZ7PaizZK9cg+Rig+0XTT2kZUwwmfYSYzM7VHph60QcHqSYynhnWaoYiJEmlM6eEX7lMmrduuqhI4b4c4gOsS6uYgBDcLEVrh9+lm6ga+KolvGRBaeVPtNdE3k5Evj3Tdrik3akfIhiHyM4AI1hjLmmYvTU3zIyR+A/h+Zk8EN/keqdBNTle/AHNr5CROF4Tzfj4yZO268vIpO3Hz2qH3aOVDnvhKoD9McX92DS3LdxiyO2CcvtZUd/pPjH7jXC2hW1bqkxllkjqOBIBPmDQIDAQABoEswSQYJKoZIhvcNAQkOMTwwOjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAFUVTprHUXNkgnh5mcUmPgEOkcP0z3fOAXyOtTVGmZe2uz6i1IM2gTvDqI4hqMsJpnXj/fEUKN6gApIuCpsegzlAjNtTUKpc749WXmDu0wEjKtQtItqgLOXwp20OZbevuIwPl+9a1TKQz9eb6xemuPhPAHKR6AU3xqN+WzkF5PvZ+izvsXDQToNhV+4Yu9v9XrCFLK/U7sPg/Me+wjbl34+vdxbOZyLB2uPbFltfjPC5S1/qU2+SuoAIEXa1KCpcxsxjSbf7VhV/AJsQc8xdqnWtN1JLDdVlBZ1jfcs9pyM7ZOv/vbObyPxCN3qUgEH5p8g554RZUh6nlHvNFvKmE6A=","cancellation_requested":false,"status":"inProgress","status_details":"Pending
    +        certificate created. Please Perform Merge to complete the request.","request_id":"da6207e8504f4d868954dd9fc46d7180"}'
         headers:
           cache-control: no-cache
           content-length: '1231'
           content-type: application/json; charset=utf-8
    -      date: Thu, 13 Feb 2020 20:37:06 GMT
    +      date: Fri, 06 Mar 2020 00:11:22 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.893
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://bid4uiywoz74agpzfxgsp7fm.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.0
    +    url: https://jnh32pnzee3y75cxxv3i43bs.vault.azure.net/certificates/mergeCertificate/pending?api-version=7.1-preview
     - request:
    -    body: '{"x5c": ["TUlJQ3lqQ0NBYklDQVFFd0RRWUpLb1pJaHZjTkFRRUxCUUF3UlRFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVkJBZ01DbE52YldVdFUzUmhkR1V4SVRBZkJnTlZCQW9NR0VsdWRHVnlibVYwSUZkcFpHZHBkSE1nVUhSNUlFeDBaREFlRncweU1EQXlNVE15TURNM01EWmFGdzB5TURBeU1UTXlNRE00TURaYU1CRXhEekFOQmdOVkJBTVRCazE1UTJWeWREQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUxlVEtrN1pCdlpIZHBoNUlVcC92ekVVZW9sR3hFcklLVWhJNDhRaWRBMGQ2WFpvaEZDVzMxQVQ1RFFiZHRNZTdEQUpkZkxwODZoemt5T1Bld3JLd3FpYU52dm41SURXRnA4M0k3WnROL3lpZmYreGMwUzJpYzF5NUozVVMyQ0Nmb1M0c3l3NTBoTjVJRXhVemMzQ2RsczZSK3BMa2lNZzZ1eG55cnhSZ0J1ZDE2SytMaXdzaHB0aUd3VXI0T08ydlQ3N2c2S3EvWUdLMllQSEFFSnRqMm5IZkFNRldiU3RNVWtObE81bHp3UVZacUhubHoxd3QrdXovaDd3K054WUIraTI0aGhCdGRxdVlVNzNqOVppRDlKMzRpTGVXSlgwWmRtV1VGWEtXNXZiRUVOYkJSM3A4ZW8zeisxTlNRdk1NcFFJZDMwZm1IRDYyMXM2Q0xLdnBEc0NBd0VBQVRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWczOUp2Wk5CT1hIZUNFcC83T2FYd3pCalNMTjEzVUN6TmRWanh2bXUwL0xVelZnVGJ6UzhBamw0b3R6V3ZNZGtQNVFPL3ZjMVROS0JpMWhMVEkvNm5hUDIxSnJDalU3TW81K1Vpcks3UWhkUnQ0NVJnOVpHdzJvRmFpNWY3OFNuN0JjTzkwaE0xbzFUODA4WGtpdHJEc3gwZWpNTE1Ed1o5d1ZaS0Y1d2FERXFENkFJRnN1SGx6VzJBbE0xay9QQVQwUU4vQ0hUclp4VCtsVnJ4ZXZCSzN6ZkI3ZlRJOWoydUVLUzNVR2RpOEpPRGVkakZ2bHQzTlJXVnE2WVFFMFNFYVBEcE90dDhEV1BMTHpJU2E0ckR5Um5tRGZZZDVicDNZeGFmK1I5VXBBcitqcVJKMS9OSzRsem1MODliV3k1SitpcWh3MHQ0NmgxZmkvRUpBSWNidz09"]}'
    +    body: '{"x5c": ["TUlJQ3lqQ0NBYklDQVFFd0RRWUpLb1pJaHZjTkFRRUxCUUF3UlRFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVkJBZ01DbE52YldVdFUzUmhkR1V4SVRBZkJnTlZCQW9NR0VsdWRHVnlibVYwSUZkcFpHZHBkSE1nVUhSNUlFeDBaREFlRncweU1EQXpNRFl3TURFeE1qSmFGdzB5TURBek1EWXdNREV5TWpKYU1CRXhEekFOQmdOVkJBTVRCazE1UTJWeWREQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUxsamI0cTgyS0lub0RlaGp2cmluNC92TUcxMW9kNkw5MUsxbkpPNExSNmltZkJ3eVVod1djVExuNXEwZDdDeStDS0hHZXoyb3MyU3ZYSVBrWW9QdEYwMDlwR1ZNTUpuMkVtTXpPMVI2WWV0RUhCNmttTXA0WjFtcUdJaVJKcFRPbmhGKzVUSnEzYnJxb1NPRytIT0lEckV1cm1JQVEzQ3hGYTRmZnBadW9HdmlxSmJ4a1FXbmxUN1RYUk41T1JMNDkwM2E0cE4ycEh5SVloOGpPQUNOWVl5NXBtTDAxTjh5TWtmZ1A0Zm1aUEJEZjVIcW5RVFU1WHZ3QnphK1FrVGhlRTgzNCtNbVR0dXZMeUtUdHg4OXFoOTJqbFE1NzRTcUEvVEhGL2RnMHR5M2NZc2p0Z25MN1dWSGY2VDR4KzQxd3RvVnRXNnBNWlpaSTZqZ1NBVDVnMENBd0VBQVRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWgyY1dLZGtva09POVJsYmZUQlU3ZENoVU9Ccy9aRVFoaktlQmpTZlBDK2dIZDhxRXpnOEpRSWIrNEQ2RlV5dHFCdk1UZmRjcTFyVkxEb0RWTm4zcS84Y1pMVlA4UjBoVFozWGVjbGF2Q3ZUdC92bkJiYnFydHJaVHBHekc5VndUQ05yOW9NRmNsZnRQbWhGb1RjR0t3UWJqL1R5SG5mM2MzSjNPamVxOTBvUFNuYmQ4NmE4ZXBsMjJoOWs4eGRzS2tjMjdRNis5bTl3MUhqNnFtazhsanZidWRHWW54UmdnSWE2N29wN1lldkphZ25uSWRaYnFwUVpnZ2o1TlJoMHVuNFFtKzJhR1pVVnArOHVjSnNwMFhTVzFMWk0zMEdKT25rSGhMTmo2Q0dNUmt1TWRmMGxNeDFjTWJZQys2c3dWcytTbWRFR1lnYWFjT0MvbU10akUzUT09"]}'
         headers:
           Accept:
           - application/json
    @@ -359,17 +367,17 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-certificates/4.0.1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-certificates/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending/merge?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/certificates/mergeCertificate/pending/merge?api-version=7.1-preview
       response:
         body:
    -      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/fe5214ed7bd9409bb47110bc3c802bc7","kid":"https://vaultname.vault.azure.net/keys/mergeCertificate/fe5214ed7bd9409bb47110bc3c802bc7","sid":"https://vaultname.vault.azure.net/secrets/mergeCertificate/fe5214ed7bd9409bb47110bc3c802bc7","x5t":"D98DouQfRW5sqypfV3aJZHX14ko","cer":"MIICyjCCAbICAQEwDQYJKoZIhvcNAQELBQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMDAyMTMyMDM3MDZaFw0yMDAyMTMyMDM4MDZaMBExDzANBgNVBAMTBk15Q2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALeTKk7ZBvZHdph5IUp/vzEUeolGxErIKUhI48QidA0d6XZohFCW31AT5DQbdtMe7DAJdfLp86hzkyOPewrKwqiaNvvn5IDWFp83I7ZtN/yiff+xc0S2ic1y5J3US2CCfoS4syw50hN5IExUzc3Cdls6R+pLkiMg6uxnyrxRgBud16K+LiwshptiGwUr4OO2vT77g6Kq/YGK2YPHAEJtj2nHfAMFWbStMUkNlO5lzwQVZqHnlz1wt+uz/h7w+NxYB+i24hhBtdquYU73j9ZiD9J34iLeWJX0ZdmWUFXKW5vbEENbBR3p8eo3z+1NSQvMMpQId30fmHD621s6CLKvpDsCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAg39JvZNBOXHeCEp/7OaXwzBjSLN13UCzNdVjxvmu0/LUzVgTbzS8Ajl4otzWvMdkP5QO/vc1TNKBi1hLTI/6naP21JrCjU7Mo5+UirK7QhdRt45Rg9ZGw2oFai5f78Sn7BcO90hM1o1T808XkitrDsx0ejMLMDwZ9wVZKF5waDEqD6AIFsuHlzW2AlM1k/PAT0QN/CHTrZxT+lVrxevBK3zfB7fTI9j2uEKS3UGdi8JODedjFvlt3NRWVq6YQE0SEaPDpOtt8DWPLLzISa4rDyRnmDfYd5bp3Yxaf+R9UpAr+jqRJ1/NK4lzmL89bWy5J+iqhw0t46h1fi/EJAIcbw==","attributes":{"enabled":true,"nbf":1581626226,"exp":1581626286,"created":1581626226,"updated":1581626226,"recoveryLevel":"Recoverable+Purgeable","recoverableDays":90},"policy":{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=MyCert","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Unknown","cert_transparency":false},"attributes":{"enabled":true,"created":1581626195,"updated":1581626195}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending"}}'
    +      string: '{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/93ab808e4b0742ce8b6ae7e2879b8461","kid":"https://vaultname.vault.azure.net/keys/mergeCertificate/93ab808e4b0742ce8b6ae7e2879b8461","sid":"https://vaultname.vault.azure.net/secrets/mergeCertificate/93ab808e4b0742ce8b6ae7e2879b8461","x5t":"6Rp-tClVXNTfkW9q0q0lE7DlKgU","cer":"MIICyjCCAbICAQEwDQYJKoZIhvcNAQELBQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMDAzMDYwMDExMjJaFw0yMDAzMDYwMDEyMjJaMBExDzANBgNVBAMTBk15Q2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALljb4q82KInoDehjvrin4/vMG11od6L91K1nJO4LR6imfBwyUhwWcTLn5q0d7Cy+CKHGez2os2SvXIPkYoPtF009pGVMMJn2EmMzO1R6YetEHB6kmMp4Z1mqGIiRJpTOnhF+5TJq3brqoSOG+HOIDrEurmIAQ3CxFa4ffpZuoGviqJbxkQWnlT7TXRN5ORL4903a4pN2pHyIYh8jOACNYYy5pmL01N8yMkfgP4fmZPBDf5HqnQTU5XvwBza+QkTheE834+MmTtuvLyKTtx89qh92jlQ574SqA/THF/dg0ty3cYsjtgnL7WVHf6T4x+41wtoVtW6pMZZZI6jgSAT5g0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAh2cWKdkokOO9RlbfTBU7dChUOBs/ZEQhjKeBjSfPC+gHd8qEzg8JQIb+4D6FUytqBvMTfdcq1rVLDoDVNn3q/8cZLVP8R0hTZ3XeclavCvTt/vnBbbqrtrZTpGzG9VwTCNr9oMFclftPmhFoTcGKwQbj/TyHnf3c3J3Ojeq90oPSnbd86a8epl22h9k8xdsKkc27Q6+9m9w1Hj6qmk8ljvbudGYnxRggIa67op7YevJagnnIdZbqpQZggj5NRh0un4Qm+2aGZUVp+8ucJsp0XSW1LZM30GJOnkHhLNj6CGMRkuMdf0lMx1cMbYC+6swVs+SmdEGYgaacOC/mMtjE3Q==","attributes":{"enabled":true,"nbf":1583453482,"exp":1583453542,"created":1583453483,"updated":1583453483,"recoveryLevel":"Recoverable+Purgeable"},"policy":{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/policy","key_props":{"exportable":true,"kty":"RSA","key_size":2048,"reuse_key":false},"secret_props":{"contentType":"application/x-pkcs12"},"x509_props":{"subject":"CN=MyCert","sans":{},"ekus":["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2"],"key_usage":["digitalSignature","keyEncipherment"],"validity_months":12,"basic_constraints":{"ca":false}},"lifetime_actions":[{"trigger":{"lifetime_percentage":80},"action":{"action_type":"EmailContacts"}}],"issuer":{"name":"Unknown","cert_transparency":false},"attributes":{"enabled":true,"created":1583453453,"updated":1583453453}},"pending":{"id":"https://vaultname.vault.azure.net/certificates/mergeCertificate/pending"}}'
         headers:
           cache-control: no-cache
    -      content-length: '2289'
    +      content-length: '2268'
           content-type: application/json; charset=utf-8
    -      date: Thu, 13 Feb 2020 20:37:07 GMT
    +      date: Fri, 06 Mar 2020 00:11:23 GMT
           expires: '-1'
           location:
           - h
    @@ -380,30 +388,30 @@ interactions:
           - ':'
           - /
           - /
    -      - b
    -      - i
    -      - d
    -      - '4'
    -      - u
    -      - i
    -      - y
    -      - w
    -      - o
    -      - z
    -      - '7'
    -      - '4'
    -      - a
    -      - g
    +      - j
    +      - n
    +      - h
    +      - '3'
    +      - '2'
           - p
    +      - n
           - z
    -      - f
    +      - e
    +      - e
    +      - '3'
    +      - y
    +      - '7'
    +      - '5'
    +      - c
           - x
    -      - g
    +      - x
    +      - v
    +      - '3'
    +      - i
    +      - '4'
    +      - '3'
    +      - b
           - s
    -      - p
    -      - '7'
    -      - f
    -      - m
           - .
           - v
           - a
    @@ -465,18 +473,26 @@ interactions:
           - '='
           - '7'
           - .
    -      - '0'
    +      - '1'
    +      - '-'
    +      - p
    +      - r
    +      - e
    +      - v
    +      - i
    +      - e
    +      - w
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.251;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.893
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 201
           message: Created
    -    url: https://bid4uiywoz74agpzfxgsp7fm.vault.azure.net/certificates/mergeCertificate/pending/merge?api-version=7.0
    +    url: https://jnh32pnzee3y75cxxv3i43bs.vault.azure.net/certificates/mergeCertificate/pending/merge?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/test_multi_api.py b/sdk/keyvault/azure-keyvault-certificates/tests/test_multi_api.py
    new file mode 100644
    index 000000000000..da41d17c96ca
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-certificates/tests/test_multi_api.py
    @@ -0,0 +1,21 @@
    +# ------------------------------------
    +# Copyright (c) Microsoft Corporation.
    +# Licensed under the MIT License.
    +# -------------------------------------
    +from azure.keyvault.certificates import ApiVersion, CertificateClient
    +import pytest
    +
    +
    +@pytest.mark.parametrize("version", ApiVersion)
    +def test_supported_version(version):
    +    """The client should be able to load generated code for every supported API version"""
    +
    +    CertificateClient("https://localhost", credential=object(), api_version=version)
    +
    +
    +def test_unsupported_version():
    +    """When given an unsupported API version, the client should raise an error listing supported versions"""
    +
    +    with pytest.raises(NotImplementedError) as ex:
    +        client = CertificateClient("https://localhost", credential=object(), api_version="nonsense")
    +    assert all(version.value in str(ex.value) for version in ApiVersion)
    diff --git a/sdk/keyvault/azure-keyvault-keys/CHANGELOG.md b/sdk/keyvault/azure-keyvault-keys/CHANGELOG.md
    index e7c1d52d2662..6900c1d1ada0 100644
    --- a/sdk/keyvault/azure-keyvault-keys/CHANGELOG.md
    +++ b/sdk/keyvault/azure-keyvault-keys/CHANGELOG.md
    @@ -1,5 +1,15 @@
     # Release History
     
    +## 4.2.0b2 (Unreleased)
    +
    +
    +## 4.2.0b1 (2020-03-10)
    +- Support for Key Vault API version 7.1-preview
    +([#10124](https://github.com/Azure/azure-sdk-for-python/pull/10124))
    +  - Added `import_key` to `KeyOperation`
    +  - Added `recoverable_days` to `CertificateProperties`
    +  - Added `ApiVersion` enum identifying Key Vault versions supported by this package
    +
     ## 4.1.0 (2020-03-10)
     - `KeyClient` instances have a `close` method which closes opened sockets. Used
     as a context manager, a `KeyClient` closes opened sockets on exit.
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/__init__.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/__init__.py
    index b83549e64f49..2b5ce7cb2a68 100644
    --- a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/__init__.py
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/__init__.py
    @@ -3,10 +3,12 @@
     # Licensed under the MIT License.
     # -------------------------------------
     from ._enums import KeyCurveName, KeyOperation, KeyType
    +from ._shared.multi_api import ApiVersion
     from ._models import DeletedKey, JsonWebKey, KeyProperties, KeyVaultKey
     from ._client import KeyClient
     
     __all__ = [
    +    "ApiVersion",
         "KeyClient",
         "JsonWebKey",
         "KeyVaultKey",
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_client.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_client.py
    index 23d805d00629..728a63a4ee39 100644
    --- a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_client.py
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_client.py
    @@ -29,7 +29,8 @@ class KeyClient(KeyVaultClientBase):
         :param str vault_url: URL of the vault the client will access. This is also called the vault's "DNS Name".
         :param credential: An object which can provide an access token for the vault, such as a credential from
             :mod:`azure.identity`
    -    :keyword str api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :keyword api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :paramtype api_version: ~azure.keyvault.keys.ApiVersion
         :keyword transport: transport to use. Defaults to :class:`~azure.core.pipeline.transport.RequestsTransport`.
         :paramtype transport: ~azure.core.pipeline.transport.HttpTransport
     
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_enums.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_enums.py
    index 89137e7e0231..ea97f09eb803 100644
    --- a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_enums.py
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_enums.py
    @@ -19,6 +19,7 @@ class KeyOperation(str, Enum):
     
         encrypt = "encrypt"
         decrypt = "decrypt"
    +    import_key = "import"
         sign = "sign"
         verify = "verify"
         wrap_key = "wrapKey"
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_models.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_models.py
    index f3ecea01f4f7..03b8015ee428 100644
    --- a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_models.py
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_models.py
    @@ -171,6 +171,18 @@ def vault_url(self):
             """
             return self._vault_id.vault_url
     
    +    @property
    +    def recoverable_days(self):
    +        # type: () -> Optional[int]
    +        """The number of days the key is retained before being deleted from a soft-delete enabled Key Vault.
    +
    +        :rtype: int
    +        """
    +        # recoverable_days was added in 7.1-preview
    +        if self._attributes and hasattr(self._attributes, "recoverable_days"):
    +            return self._attributes.recoverable_days
    +        return None
    +
         @property
         def recovery_level(self):
             # type: () -> str
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/__init__.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/__init__.py
    new file mode 100644
    index 000000000000..e913d4cf6c46
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/__init__.py
    @@ -0,0 +1,18 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._key_vault_client import KeyVaultClient
    +__all__ = ['KeyVaultClient']
    +
    +from .version import VERSION
    +
    +__version__ = VERSION
    +
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/_configuration.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/_configuration.py
    new file mode 100644
    index 000000000000..68d6f5b6bd2c
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/_configuration.py
    @@ -0,0 +1,47 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +from azure.core.configuration import Configuration
    +from azure.core.pipeline import policies
    +
    +from .version import VERSION
    +
    +
    +class KeyVaultClientConfiguration(Configuration):
    +    """Configuration for KeyVaultClient
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    """
    +
    +    def __init__(self, credentials, **kwargs):
    +
    +        if credentials is None:
    +            raise ValueError("Parameter 'credentials' must not be None.")
    +
    +        super(KeyVaultClientConfiguration, self).__init__(**kwargs)
    +        self._configure(**kwargs)
    +
    +        self.user_agent_policy.add_user_agent('azsdk-python-azure-keyvault/{}'.format(VERSION))
    +        self.generate_client_request_id = True
    +
    +        self.credentials = credentials
    +
    +    def _configure(self, **kwargs):
    +        self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs)
    +        self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs)
    +        self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
    +        self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
    +        self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs)
    +        self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
    +        self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs)
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/_key_vault_client.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/_key_vault_client.py
    new file mode 100644
    index 000000000000..f380f67e0a87
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/_key_vault_client.py
    @@ -0,0 +1,48 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core import PipelineClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration import KeyVaultClientConfiguration
    +from .operations import KeyVaultClientOperationsMixin
    +from . import models
    +
    +
    +class KeyVaultClient(KeyVaultClientOperationsMixin):
    +    """The key vault client performs cryptographic key operations and vault operations against the Key Vault service.
    +
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    """
    +
    +    def __init__(
    +            self, credentials, **kwargs):
    +
    +        base_url = '{vaultBaseUrl}'
    +        self._config = KeyVaultClientConfiguration(credentials, **kwargs)
    +        self._client = PipelineClient(base_url=base_url, config=self._config, **kwargs)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '7.1-preview'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +
    +    def close(self):
    +        self._client.close()
    +    def __enter__(self):
    +        self._client.__enter__()
    +        return self
    +    def __exit__(self, *exc_details):
    +        self._client.__exit__(*exc_details)
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/__init__.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/__init__.py
    new file mode 100644
    index 000000000000..fb2e6c3866fd
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/__init__.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._key_vault_client_async import KeyVaultClient
    +__all__ = ['KeyVaultClient']
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/_configuration_async.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/_configuration_async.py
    new file mode 100644
    index 000000000000..fb961bb4bd2d
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/_configuration_async.py
    @@ -0,0 +1,47 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +from azure.core.configuration import Configuration
    +from azure.core.pipeline import policies
    +
    +from ..version import VERSION
    +
    +
    +class KeyVaultClientConfiguration(Configuration):
    +    """Configuration for KeyVaultClient
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    """
    +
    +    def __init__(self, credentials, **kwargs):
    +
    +        if credentials is None:
    +            raise ValueError("Parameter 'credentials' must not be None.")
    +
    +        super(KeyVaultClientConfiguration, self).__init__(**kwargs)
    +        self._configure(**kwargs)
    +
    +        self.user_agent_policy.add_user_agent('azsdk-python-azure-keyvault/{}'.format(VERSION))
    +        self.generate_client_request_id = True
    +
    +        self.credentials = credentials
    +
    +    def _configure(self, **kwargs):
    +        self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs)
    +        self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs)
    +        self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
    +        self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
    +        self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs)
    +        self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
    +        self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs)
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/_key_vault_client_async.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/_key_vault_client_async.py
    new file mode 100644
    index 000000000000..b2b908c4a757
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/_key_vault_client_async.py
    @@ -0,0 +1,48 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core import AsyncPipelineClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration_async import KeyVaultClientConfiguration
    +from .operations_async import KeyVaultClientOperationsMixin
    +from .. import models
    +
    +
    +class KeyVaultClient(KeyVaultClientOperationsMixin):
    +    """The key vault client performs cryptographic key operations and vault operations against the Key Vault service.
    +
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    """
    +
    +    def __init__(
    +            self, credentials, **kwargs):
    +
    +        base_url = '{vaultBaseUrl}'
    +        self._config = KeyVaultClientConfiguration(credentials, **kwargs)
    +        self._client = AsyncPipelineClient(base_url=base_url, config=self._config, **kwargs)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '7.1-preview'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +
    +    async def close(self):
    +        await self._client.close()
    +    async def __aenter__(self):
    +        await self._client.__aenter__()
    +        return self
    +    async def __aexit__(self, *exc_details):
    +        await self._client.__aexit__(*exc_details)
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/operations_async/__init__.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/operations_async/__init__.py
    new file mode 100644
    index 000000000000..771a17ceb80d
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/operations_async/__init__.py
    @@ -0,0 +1,16 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._key_vault_client_operations_async import KeyVaultClientOperationsMixin
    +
    +__all__ = [
    +    'KeyVaultClientOperationsMixin',
    +]
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/operations_async/_key_vault_client_operations_async.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/operations_async/_key_vault_client_operations_async.py
    new file mode 100644
    index 000000000000..5701d4354d9b
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/aio/operations_async/_key_vault_client_operations_async.py
    @@ -0,0 +1,5224 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +from azure.core.async_paging import AsyncItemPaged, AsyncList
    +from ... import models
    +import uuid
    +
    +
    +class KeyVaultClientOperationsMixin:
    +
    +    def get_certificates(
    +            self, vault_base_url, maxresults=None, include_pending=None, *, cls=None, **kwargs):
    +        """List certificates in a specified key vault.
    +
    +        The GetCertificates operation returns the set of certificates resources
    +        in the specified key vault. This operation requires the
    +        certificates/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :param include_pending: Specifies whether to include certificates
    +         which are not completely provisioned.
    +        :type include_pending: bool
    +        :return: An iterator like instance of CertificateItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.CertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificates.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                if include_pending is not None:
    +                    query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('CertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_certificates.metadata = {'url': '/certificates'}
    +
    +    async def delete_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Deletes a certificate from a specified key vault.
    +
    +        Deletes all versions of a certificate object along with its associated
    +        policy. Delete certificate cannot be used to remove individual versions
    +        of a certificate object. This operation requires the
    +        certificates/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedCertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedCertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedCertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate.metadata = {'url': '/certificates/{certificate-name}'}
    +
    +    async def set_certificate_contacts(self, vault_base_url, contact_list=None, *, cls=None, **kwargs):
    +        """Sets the certificate contacts for the specified key vault.
    +
    +        Sets the certificate contacts for the specified key vault. This
    +        operation requires the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param contact_list: The contact list for the vault certificates.
    +        :type contact_list: list[~azure.keyvault.v7_1.models.Contact]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        contacts = models.Contacts(contact_list=contact_list)
    +
    +        # Construct URL
    +        url = self.set_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(contacts, 'Contacts')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    async def get_certificate_contacts(self, vault_base_url, *, cls=None, **kwargs):
    +        """Lists the certificate contacts for a specified key vault.
    +
    +        The GetCertificateContacts operation returns the set of certificate
    +        contact resources in the specified key vault. This operation requires
    +        the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    async def delete_certificate_contacts(self, vault_base_url, *, cls=None, **kwargs):
    +        """Deletes the certificate contacts for a specified key vault.
    +
    +        Deletes the certificate contacts for a specified key vault certificate.
    +        This operation requires the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    def get_certificate_issuers(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """List certificate issuers for a specified key vault.
    +
    +        The GetCertificateIssuers operation returns the set of certificate
    +        issuer resources in the specified key vault. This operation requires
    +        the certificates/manageissuers/getissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of CertificateIssuerItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.CertificateIssuerItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificate_issuers.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('CertificateIssuerListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_certificate_issuers.metadata = {'url': '/certificates/issuers'}
    +
    +    async def set_certificate_issuer(self, vault_base_url, issuer_name, provider, credentials=None, organization_details=None, attributes=None, *, cls=None, **kwargs):
    +        """Sets the specified certificate issuer.
    +
    +        The SetCertificateIssuer operation adds or updates the specified
    +        certificate issuer. This operation requires the certificates/setissuers
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param provider: The issuer provider.
    +        :type provider: str
    +        :param credentials: The credentials to be used for the issuer.
    +        :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +        :param organization_details: Details of the organization as provided
    +         to the issuer.
    +        :type organization_details:
    +         ~azure.keyvault.v7_1.models.OrganizationDetails
    +        :param attributes: Attributes of the issuer object.
    +        :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameter = models.CertificateIssuerSetParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes)
    +
    +        # Construct URL
    +        url = self.set_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameter, 'CertificateIssuerSetParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    async def update_certificate_issuer(self, vault_base_url, issuer_name, provider=None, credentials=None, organization_details=None, attributes=None, *, cls=None, **kwargs):
    +        """Updates the specified certificate issuer.
    +
    +        The UpdateCertificateIssuer operation performs an update on the
    +        specified certificate issuer entity. This operation requires the
    +        certificates/setissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param provider: The issuer provider.
    +        :type provider: str
    +        :param credentials: The credentials to be used for the issuer.
    +        :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +        :param organization_details: Details of the organization as provided
    +         to the issuer.
    +        :type organization_details:
    +         ~azure.keyvault.v7_1.models.OrganizationDetails
    +        :param attributes: Attributes of the issuer object.
    +        :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameter = models.CertificateIssuerUpdateParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes)
    +
    +        # Construct URL
    +        url = self.update_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameter, 'CertificateIssuerUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    async def get_certificate_issuer(self, vault_base_url, issuer_name, *, cls=None, **kwargs):
    +        """Lists the specified certificate issuer.
    +
    +        The GetCertificateIssuer operation returns the specified certificate
    +        issuer resources in the specified key vault. This operation requires
    +        the certificates/manageissuers/getissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    async def delete_certificate_issuer(self, vault_base_url, issuer_name, *, cls=None, **kwargs):
    +        """Deletes the specified certificate issuer.
    +
    +        The DeleteCertificateIssuer operation permanently removes the specified
    +        certificate issuer from the vault. This operation requires the
    +        certificates/manageissuers/deleteissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    async def create_certificate(self, vault_base_url, certificate_name, certificate_policy=None, certificate_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Creates a new certificate.
    +
    +        If this is the first version, the certificate resource is created. This
    +        operation requires the certificates/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateCreateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.create_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 202:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    create_certificate.metadata = {'url': '/certificates/{certificate-name}/create'}
    +
    +    async def import_certificate(self, vault_base_url, certificate_name, base64_encoded_certificate, password=None, certificate_policy=None, certificate_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Imports a certificate into a specified key vault.
    +
    +        Imports an existing valid certificate, containing a private key, into
    +        Azure Key Vault. The certificate to be imported can be in either PFX or
    +        PEM format. If the certificate is in PEM format the PEM file must
    +        contain the key as well as x509 certificates. This operation requires
    +        the certificates/import permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param base64_encoded_certificate: Base64 encoded representation of
    +         the certificate object to import. This certificate needs to contain
    +         the private key.
    +        :type base64_encoded_certificate: str
    +        :param password: If the private key in base64EncodedCertificate is
    +         encrypted, the password used for encryption.
    +        :type password: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateImportParameters(base64_encoded_certificate=base64_encoded_certificate, password=password, certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.import_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateImportParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    import_certificate.metadata = {'url': '/certificates/{certificate-name}/import'}
    +
    +    def get_certificate_versions(
    +            self, vault_base_url, certificate_name, maxresults=None, *, cls=None, **kwargs):
    +        """List the versions of a certificate.
    +
    +        The GetCertificateVersions operation returns the versions of a
    +        certificate in the specified key vault. This operation requires the
    +        certificates/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of CertificateItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.CertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificate_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('CertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_certificate_versions.metadata = {'url': '/certificates/{certificate-name}/versions'}
    +
    +    async def get_certificate_policy(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Lists the policy for a certificate.
    +
    +        The GetCertificatePolicy operation returns the specified certificate
    +        policy resources in the specified key vault. This operation requires
    +        the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in a given key
    +         vault.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificatePolicy or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_policy.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificatePolicy', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}
    +
    +    async def update_certificate_policy(self, vault_base_url, certificate_name, certificate_policy, *, cls=None, **kwargs):
    +        """Updates the policy for a certificate.
    +
    +        Set specified members in the certificate policy. Leave others as null.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_policy: The policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificatePolicy or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.update_certificate_policy.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_policy, 'CertificatePolicy')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificatePolicy', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}
    +
    +    async def update_certificate(self, vault_base_url, certificate_name, certificate_version, certificate_policy=None, certificate_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given certificate.
    +
    +        The UpdateCertificate operation applies the specified update on the
    +        given certificate; the only elements updated are the certificate's
    +        attributes. This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given key
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_version: The version of the certificate.
    +        :type certificate_version: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateUpdateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
    +            'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}
    +
    +    async def get_certificate(self, vault_base_url, certificate_name, certificate_version, *, cls=None, **kwargs):
    +        """Gets information about a certificate.
    +
    +        Gets information about a specific certificate. This operation requires
    +        the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_version: The version of the certificate.
    +        :type certificate_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
    +            'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}
    +
    +    async def update_certificate_operation(self, vault_base_url, certificate_name, cancellation_requested, *, cls=None, **kwargs):
    +        """Updates a certificate operation.
    +
    +        Updates a certificate creation operation that is already in progress.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param cancellation_requested: Indicates if cancellation was requested
    +         on the certificate operation.
    +        :type cancellation_requested: bool
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        certificate_operation = models.CertificateOperationUpdateParameter(cancellation_requested=cancellation_requested)
    +
    +        # Construct URL
    +        url = self.update_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_operation, 'CertificateOperationUpdateParameter')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    async def get_certificate_operation(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Gets the creation operation of a certificate.
    +
    +        Gets the creation operation associated with a specified certificate.
    +        This operation requires the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    async def delete_certificate_operation(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Deletes the creation operation for a specific certificate.
    +
    +        Deletes the creation operation for a specified certificate that is in
    +        the process of being created. The certificate is no longer created.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    async def merge_certificate(self, vault_base_url, certificate_name, x509_certificates, certificate_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Merges a certificate or a certificate chain with a key pair existing on
    +        the server.
    +
    +        The MergeCertificate operation performs the merging of a certificate or
    +        certificate chain with a key pair currently available in the service.
    +        This operation requires the certificates/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param x509_certificates: The certificate or the certificate chain to
    +         merge.
    +        :type x509_certificates: list[bytearray]
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateMergeParameters(x509_certificates=x509_certificates, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.merge_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateMergeParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    merge_certificate.metadata = {'url': '/certificates/{certificate-name}/pending/merge'}
    +
    +    async def backup_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Backs up the specified certificate.
    +
    +        Requests that a backup of the specified certificate be downloaded to
    +        the client. All versions of the certificate will be downloaded. This
    +        operation requires the certificates/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupCertificateResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupCertificateResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupCertificateResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_certificate.metadata = {'url': '/certificates/{certificate-name}/backup'}
    +
    +    async def restore_certificate(self, vault_base_url, certificate_bundle_backup, *, cls=None, **kwargs):
    +        """Restores a backed up certificate to a vault.
    +
    +        Restores a backed up certificate, and all its versions, to a vault.
    +        This operation requires the certificates/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_bundle_backup: The backup blob associated with a
    +         certificate bundle.
    +        :type certificate_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateRestoreParameters(certificate_bundle_backup=certificate_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_certificate.metadata = {'url': '/certificates/restore'}
    +
    +    def get_deleted_certificates(
    +            self, vault_base_url, maxresults=None, include_pending=None, *, cls=None, **kwargs):
    +        """Lists the deleted certificates in the specified vault currently
    +        available for recovery.
    +
    +        The GetDeletedCertificates operation retrieves the certificates in the
    +        current vault which are in a deleted state and ready for recovery or
    +        purging. This operation includes deletion-specific information. This
    +        operation requires the certificates/get/list permission. This operation
    +        can only be enabled on soft-delete enabled vaults.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :param include_pending: Specifies whether to include certificates
    +         which are not completely provisioned.
    +        :type include_pending: bool
    +        :return: An iterator like instance of DeletedCertificateItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedCertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_certificates.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                if include_pending is not None:
    +                    query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedCertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_certificates.metadata = {'url': '/deletedcertificates'}
    +
    +    async def get_deleted_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Retrieves information about the specified deleted certificate.
    +
    +        The GetDeletedCertificate operation retrieves the deleted certificate
    +        information plus its attributes, such as retention interval, scheduled
    +        permanent deletion and the current deletion recovery level. This
    +        operation requires the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedCertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedCertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedCertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}
    +
    +    async def purge_deleted_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Permanently deletes the specified deleted certificate.
    +
    +        The PurgeDeletedCertificate operation performs an irreversible deletion
    +        of the specified certificate, without possibility for recovery. The
    +        operation is not available if the recovery level does not specify
    +        'Purgeable'. This operation requires the certificate/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}
    +
    +    async def recover_deleted_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Recovers the deleted certificate back to its current version under
    +        /certificates.
    +
    +        The RecoverDeletedCertificate operation performs the reversal of the
    +        Delete operation. The operation is applicable in vaults enabled for
    +        soft-delete, and must be issued during the retention interval
    +        (available in the deleted certificate's attributes). This operation
    +        requires the certificates/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the deleted certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}/recover'}
    +
    +    async def create_key(self, vault_base_url, key_name, kty, key_size=None, key_ops=None, key_attributes=None, tags=None, curve=None, *, cls=None, **kwargs):
    +        """Creates a new key, stores it, then returns key parameters and
    +        attributes to the client.
    +
    +        The create key operation can be used to create any key type in Azure
    +        Key Vault. If the named key already exists, Azure Key Vault creates a
    +        new version of the key. It requires the keys/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name for the new key. The system will generate
    +         the version name for the new key.
    +        :type key_name: str
    +        :param kty: The type of key to create. For valid values, see
    +         JsonWebKeyType. Possible values include: 'EC', 'EC-HSM', 'RSA',
    +         'RSA-HSM', 'oct'
    +        :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +        :param key_size: The key size in bits. For example: 2048, 3072, or
    +         4096 for RSA.
    +        :type key_size: int
    +        :param key_ops:
    +        :type key_ops: list[str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +        :param key_attributes:
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param curve: Elliptic curve name. For valid values, see
    +         JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384',
    +         'P-521', 'P-256K'
    +        :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyCreateParameters(kty=kty, key_size=key_size, key_ops=key_ops, key_attributes=key_attributes, tags=tags, curve=curve)
    +
    +        # Construct URL
    +        url = self.create_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    create_key.metadata = {'url': '/keys/{key-name}/create'}
    +
    +    async def import_key(self, vault_base_url, key_name, key, hsm=None, key_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Imports an externally created key, stores it, and returns key
    +        parameters and attributes to the client.
    +
    +        The import key operation may be used to import any key type into an
    +        Azure Key Vault. If the named key already exists, Azure Key Vault
    +        creates a new version of the key. This operation requires the
    +        keys/import permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: Name for the imported key.
    +        :type key_name: str
    +        :param key: The Json web key
    +        :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +        :param hsm: Whether to import as a hardware key (HSM) or software key.
    +        :type hsm: bool
    +        :param key_attributes: The key management attributes.
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyImportParameters(hsm=hsm, key=key, key_attributes=key_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.import_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyImportParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    import_key.metadata = {'url': '/keys/{key-name}'}
    +
    +    async def delete_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Deletes a key of any type from storage in Azure Key Vault.
    +
    +        The delete key operation cannot be used to remove individual versions
    +        of a key. This operation removes the cryptographic material associated
    +        with the key, which means the key is not usable for Sign/Verify,
    +        Wrap/Unwrap or Encrypt/Decrypt operations. This operation requires the
    +        keys/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key to delete.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedKeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedKeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedKeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_key.metadata = {'url': '/keys/{key-name}'}
    +
    +    async def update_key(self, vault_base_url, key_name, key_version, key_ops=None, key_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """The update key operation changes specified attributes of a stored key
    +        and can be applied to any key type and key version stored in Azure Key
    +        Vault.
    +
    +        In order to perform this operation, the key must already exist in the
    +        Key Vault. Note: The cryptographic material of a key itself cannot be
    +        changed. This operation requires the keys/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of key to update.
    +        :type key_name: str
    +        :param key_version: The version of the key to update.
    +        :type key_version: str
    +        :param key_ops: Json web key operations. For more information on
    +         possible key operations, see JsonWebKeyOperation.
    +        :type key_ops: list[str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +        :param key_attributes:
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyUpdateParameters(key_ops=key_ops, key_attributes=key_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_key.metadata = {'url': '/keys/{key-name}/{key-version}'}
    +
    +    async def get_key(self, vault_base_url, key_name, key_version, *, cls=None, **kwargs):
    +        """Gets the public part of a stored key.
    +
    +        The get key operation is applicable to all key types. If the requested
    +        key is symmetric, then no key material is released in the response.
    +        This operation requires the keys/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key to get.
    +        :type key_name: str
    +        :param key_version: Adding the version parameter retrieves a specific
    +         version of a key.
    +        :type key_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_key.metadata = {'url': '/keys/{key-name}/{key-version}'}
    +
    +    def get_key_versions(
    +            self, vault_base_url, key_name, maxresults=None, *, cls=None, **kwargs):
    +        """Retrieves a list of individual key versions with the same key name.
    +
    +        The full key identifier, attributes, and tags are provided in the
    +        response. This operation requires the keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of KeyItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.KeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_key_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'key-name': self._serialize.url("key_name", key_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'key-name': self._serialize.url("key_name", key_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('KeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_key_versions.metadata = {'url': '/keys/{key-name}/versions'}
    +
    +    def get_keys(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """List keys in the specified vault.
    +
    +        Retrieves a list of the keys in the Key Vault as JSON Web Key
    +        structures that contain the public part of a stored key. The LIST
    +        operation is applicable to all key types, however only the base key
    +        identifier, attributes, and tags are provided in the response.
    +        Individual versions of a key are not listed in the response. This
    +        operation requires the keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of KeyItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.KeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_keys.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('KeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_keys.metadata = {'url': '/keys'}
    +
    +    async def backup_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Requests that a backup of the specified key be downloaded to the
    +        client.
    +
    +        The Key Backup operation exports a key from Azure Key Vault in a
    +        protected form. Note that this operation does NOT return key material
    +        in a form that can be used outside the Azure Key Vault system, the
    +        returned key material is either protected to a Azure Key Vault HSM or
    +        to Azure Key Vault itself. The intent of this operation is to allow a
    +        client to GENERATE a key in one Azure Key Vault instance, BACKUP the
    +        key, and then RESTORE it into another Azure Key Vault instance. The
    +        BACKUP operation may be used to export, in protected form, any key type
    +        from Azure Key Vault. Individual versions of a key cannot be backed up.
    +        BACKUP / RESTORE can be performed within geographical boundaries only;
    +        meaning that a BACKUP from one geographical area cannot be restored to
    +        another geographical area. For example, a backup from the US
    +        geographical area cannot be restored in an EU geographical area. This
    +        operation requires the key/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupKeyResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupKeyResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupKeyResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_key.metadata = {'url': '/keys/{key-name}/backup'}
    +
    +    async def restore_key(self, vault_base_url, key_bundle_backup, *, cls=None, **kwargs):
    +        """Restores a backed up key to a vault.
    +
    +        Imports a previously backed up key into Azure Key Vault, restoring the
    +        key, its key identifier, attributes and access control policies. The
    +        RESTORE operation may be used to import a previously backed up key.
    +        Individual versions of a key cannot be restored. The key is restored in
    +        its entirety with the same key name as it had when it was backed up. If
    +        the key name is not available in the target Key Vault, the RESTORE
    +        operation will be rejected. While the key name is retained during
    +        restore, the final key identifier will change if the key is restored to
    +        a different vault. Restore will restore all versions and preserve
    +        version identifiers. The RESTORE operation is subject to security
    +        constraints: The target Key Vault must be owned by the same Microsoft
    +        Azure Subscription as the source Key Vault The user must have RESTORE
    +        permission in the target Key Vault. This operation requires the
    +        keys/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_bundle_backup: The backup blob associated with a key
    +         bundle.
    +        :type key_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyRestoreParameters(key_bundle_backup=key_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_key.metadata = {'url': '/keys/restore'}
    +
    +    async def encrypt(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Encrypts an arbitrary sequence of bytes using an encryption key that is
    +        stored in a key vault.
    +
    +        The ENCRYPT operation encrypts an arbitrary sequence of bytes using an
    +        encryption key that is stored in Azure Key Vault. Note that the ENCRYPT
    +        operation only supports a single block of data, the size of which is
    +        dependent on the target key and the encryption algorithm to be used.
    +        The ENCRYPT operation is only strictly necessary for symmetric keys
    +        stored in Azure Key Vault since protection with an asymmetric key can
    +        be performed using public portion of the key. This operation is
    +        supported for asymmetric keys as a convenience for callers that have a
    +        key-reference but do not have access to the public key material. This
    +        operation requires the keys/encrypt permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.encrypt.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    encrypt.metadata = {'url': '/keys/{key-name}/{key-version}/encrypt'}
    +
    +    async def decrypt(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Decrypts a single block of encrypted data.
    +
    +        The DECRYPT operation decrypts a well-formed block of ciphertext using
    +        the target encryption key and specified algorithm. This operation is
    +        the reverse of the ENCRYPT operation; only a single block of data may
    +        be decrypted, the size of this block is dependent on the target key and
    +        the algorithm to be used. The DECRYPT operation applies to asymmetric
    +        and symmetric keys stored in Azure Key Vault since it uses the private
    +        portion of the key. This operation requires the keys/decrypt
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.decrypt.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    decrypt.metadata = {'url': '/keys/{key-name}/{key-version}/decrypt'}
    +
    +    async def sign(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Creates a signature from a digest using the specified key.
    +
    +        The SIGN operation is applicable to asymmetric and symmetric keys
    +        stored in Azure Key Vault since this operation uses the private portion
    +        of the key. This operation requires the keys/sign permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: The signing/verification algorithm identifier. For
    +         more information on possible algorithm types, see
    +         JsonWebKeySignatureAlgorithm. Possible values include: 'PS256',
    +         'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256',
    +         'ES384', 'ES512', 'ES256K'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeySignParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.sign.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeySignParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    sign.metadata = {'url': '/keys/{key-name}/{key-version}/sign'}
    +
    +    async def verify(self, vault_base_url, key_name, key_version, algorithm, digest, signature, *, cls=None, **kwargs):
    +        """Verifies a signature using a specified key.
    +
    +        The VERIFY operation is applicable to symmetric keys stored in Azure
    +        Key Vault. VERIFY is not strictly necessary for asymmetric keys stored
    +        in Azure Key Vault since signature verification can be performed using
    +        the public portion of the key but this operation is supported as a
    +        convenience for callers that only have a key-reference and not the
    +        public portion of the key. This operation requires the keys/verify
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: The signing/verification algorithm. For more
    +         information on possible algorithm types, see
    +         JsonWebKeySignatureAlgorithm. Possible values include: 'PS256',
    +         'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256',
    +         'ES384', 'ES512', 'ES256K'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +        :param digest: The digest used for signing.
    +        :type digest: bytes
    +        :param signature: The signature to be verified.
    +        :type signature: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyVerifyResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyVerifyResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyVerifyParameters(algorithm=algorithm, digest=digest, signature=signature)
    +
    +        # Construct URL
    +        url = self.verify.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyVerifyParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyVerifyResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    verify.metadata = {'url': '/keys/{key-name}/{key-version}/verify'}
    +
    +    async def wrap_key(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Wraps a symmetric key using a specified key.
    +
    +        The WRAP operation supports encryption of a symmetric key using a key
    +        encryption key that has previously been stored in an Azure Key Vault.
    +        The WRAP operation is only strictly necessary for symmetric keys stored
    +        in Azure Key Vault since protection with an asymmetric key can be
    +        performed using the public portion of the key. This operation is
    +        supported for asymmetric keys as a convenience for callers that have a
    +        key-reference but do not have access to the public key material. This
    +        operation requires the keys/wrapKey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.wrap_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    wrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/wrapkey'}
    +
    +    async def unwrap_key(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Unwraps a symmetric key using the specified key that was initially used
    +        for wrapping that key.
    +
    +        The UNWRAP operation supports decryption of a symmetric key using the
    +        target key encryption key. This operation is the reverse of the WRAP
    +        operation. The UNWRAP operation applies to asymmetric and symmetric
    +        keys stored in Azure Key Vault since it uses the private portion of the
    +        key. This operation requires the keys/unwrapKey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.unwrap_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    unwrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/unwrapkey'}
    +
    +    def get_deleted_keys(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """Lists the deleted keys in the specified vault.
    +
    +        Retrieves a list of the keys in the Key Vault as JSON Web Key
    +        structures that contain the public part of a deleted key. This
    +        operation includes deletion-specific information. The Get Deleted Keys
    +        operation is applicable for vaults enabled for soft-delete. While the
    +        operation can be invoked on any vault, it will return an error if
    +        invoked on a non soft-delete enabled vault. This operation requires the
    +        keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedKeyItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedKeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_keys.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedKeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_keys.metadata = {'url': '/deletedkeys'}
    +
    +    async def get_deleted_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Gets the public part of a deleted key.
    +
    +        The Get Deleted Key operation is applicable for soft-delete enabled
    +        vaults. While the operation can be invoked on any vault, it will return
    +        an error if invoked on a non soft-delete enabled vault. This operation
    +        requires the keys/get permission. .
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedKeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedKeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedKeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}
    +
    +    async def purge_deleted_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Permanently deletes the specified key.
    +
    +        The Purge Deleted Key operation is applicable for soft-delete enabled
    +        vaults. While the operation can be invoked on any vault, it will return
    +        an error if invoked on a non soft-delete enabled vault. This operation
    +        requires the keys/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}
    +
    +    async def recover_deleted_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Recovers the deleted key to its latest version.
    +
    +        The Recover Deleted Key operation is applicable for deleted keys in
    +        soft-delete enabled vaults. It recovers the deleted key back to its
    +        latest version under /keys. An attempt to recover an non-deleted key
    +        will return an error. Consider this the inverse of the delete operation
    +        on soft-delete enabled vaults. This operation requires the keys/recover
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the deleted key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_key.metadata = {'url': '/deletedkeys/{key-name}/recover'}
    +
    +    async def set_secret(self, vault_base_url, secret_name, value, tags=None, content_type=None, secret_attributes=None, *, cls=None, **kwargs):
    +        """Sets a secret in a specified key vault.
    +
    +        The SET operation adds a secret to the Azure Key Vault. If the named
    +        secret already exists, Azure Key Vault creates a new version of that
    +        secret. This operation requires the secrets/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param value: The value of the secret.
    +        :type value: str
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param content_type: Type of the secret value such as a password.
    +        :type content_type: str
    +        :param secret_attributes: The secret management attributes.
    +        :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretSetParameters(value=value, tags=tags, content_type=content_type, secret_attributes=secret_attributes)
    +
    +        # Construct URL
    +        url = self.set_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretSetParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_secret.metadata = {'url': '/secrets/{secret-name}'}
    +
    +    async def delete_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Deletes a secret from a specified key vault.
    +
    +        The DELETE operation applies to any secret stored in Azure Key Vault.
    +        DELETE cannot be applied to an individual version of a secret. This
    +        operation requires the secrets/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_secret.metadata = {'url': '/secrets/{secret-name}'}
    +
    +    async def update_secret(self, vault_base_url, secret_name, secret_version, content_type=None, secret_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Updates the attributes associated with a specified secret in a given
    +        key vault.
    +
    +        The UPDATE operation changes specified attributes of an existing stored
    +        secret. Attributes that are not specified in the request are left
    +        unchanged. The value of a secret itself cannot be changed. This
    +        operation requires the secrets/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param secret_version: The version of the secret.
    +        :type secret_version: str
    +        :param content_type: Type of the secret value such as a password.
    +        :type content_type: str
    +        :param secret_attributes: The secret management attributes.
    +        :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretUpdateParameters(content_type=content_type, secret_attributes=secret_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
    +            'secret-version': self._serialize.url("secret_version", secret_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}
    +
    +    async def get_secret(self, vault_base_url, secret_name, secret_version, *, cls=None, **kwargs):
    +        """Get a specified secret from a given key vault.
    +
    +        The GET operation is applicable to any secret stored in Azure Key
    +        Vault. This operation requires the secrets/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param secret_version: The version of the secret.
    +        :type secret_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
    +            'secret-version': self._serialize.url("secret_version", secret_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}
    +
    +    def get_secrets(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """List secrets in a specified key vault.
    +
    +        The Get Secrets operation is applicable to the entire vault. However,
    +        only the base secret identifier and its attributes are provided in the
    +        response. Individual secret versions are not listed in the response.
    +        This operation requires the secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified, the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SecretItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.SecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_secrets.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('SecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_secrets.metadata = {'url': '/secrets'}
    +
    +    def get_secret_versions(
    +            self, vault_base_url, secret_name, maxresults=None, *, cls=None, **kwargs):
    +        """List all versions of the specified secret.
    +
    +        The full secret identifier and attributes are provided in the response.
    +        No values are returned for the secrets. This operations requires the
    +        secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified, the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SecretItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.SecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_secret_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('SecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_secret_versions.metadata = {'url': '/secrets/{secret-name}/versions'}
    +
    +    def get_deleted_secrets(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """Lists deleted secrets for the specified vault.
    +
    +        The Get Deleted Secrets operation returns the secrets that have been
    +        deleted for a vault enabled for soft-delete. This operation requires
    +        the secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedSecretItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedSecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_secrets.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedSecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_secrets.metadata = {'url': '/deletedsecrets'}
    +
    +    async def get_deleted_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Gets the specified deleted secret.
    +
    +        The Get Deleted Secret operation returns the specified deleted secret
    +        along with its attributes. This operation requires the secrets/get
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}
    +
    +    async def purge_deleted_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Permanently deletes the specified secret.
    +
    +        The purge deleted secret operation removes the secret permanently,
    +        without the possibility of recovery. This operation can only be enabled
    +        on a soft-delete enabled vault. This operation requires the
    +        secrets/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}
    +
    +    async def recover_deleted_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Recovers the deleted secret to the latest version.
    +
    +        Recovers the deleted secret in the specified vault. This operation can
    +        only be performed on a soft-delete enabled vault. This operation
    +        requires the secrets/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the deleted secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}/recover'}
    +
    +    async def backup_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Backs up the specified secret.
    +
    +        Requests that a backup of the specified secret be downloaded to the
    +        client. All versions of the secret will be downloaded. This operation
    +        requires the secrets/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupSecretResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupSecretResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupSecretResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_secret.metadata = {'url': '/secrets/{secret-name}/backup'}
    +
    +    async def restore_secret(self, vault_base_url, secret_bundle_backup, *, cls=None, **kwargs):
    +        """Restores a backed up secret to a vault.
    +
    +        Restores a backed up secret, and all its versions, to a vault. This
    +        operation requires the secrets/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_bundle_backup: The backup blob associated with a secret
    +         bundle.
    +        :type secret_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretRestoreParameters(secret_bundle_backup=secret_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_secret.metadata = {'url': '/secrets/restore'}
    +
    +    def get_storage_accounts(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """List storage accounts managed by the specified key vault. This
    +        operation requires the storage/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of StorageAccountItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.StorageAccountItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_storage_accounts.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('StorageListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_storage_accounts.metadata = {'url': '/storage'}
    +
    +    def get_deleted_storage_accounts(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """Lists deleted storage accounts for the specified vault.
    +
    +        The Get Deleted Storage Accounts operation returns the storage accounts
    +        that have been deleted for a vault enabled for soft-delete. This
    +        operation requires the storage/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedStorageAccountItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedStorageAccountItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_storage_accounts.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedStorageListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_storage_accounts.metadata = {'url': '/deletedstorage'}
    +
    +    async def get_deleted_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Gets the specified deleted storage account.
    +
    +        The Get Deleted Storage Account operation returns the specified deleted
    +        storage account along with its attributes. This operation requires the
    +        storage/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedStorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedStorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedStorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}
    +
    +    async def purge_deleted_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Permanently deletes the specified storage account.
    +
    +        The purge deleted storage account operation removes the secret
    +        permanently, without the possibility of recovery. This operation can
    +        only be performed on a soft-delete enabled vault. This operation
    +        requires the storage/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}
    +
    +    async def recover_deleted_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Recovers the deleted storage account.
    +
    +        Recovers the deleted storage account in the specified vault. This
    +        operation can only be performed on a soft-delete enabled vault. This
    +        operation requires the storage/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}/recover'}
    +
    +    async def backup_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Backs up the specified storage account.
    +
    +        Requests that a backup of the specified storage account be downloaded
    +        to the client. This operation requires the storage/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupStorageResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupStorageResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupStorageResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_storage_account.metadata = {'url': '/storage/{storage-account-name}/backup'}
    +
    +    async def restore_storage_account(self, vault_base_url, storage_bundle_backup, *, cls=None, **kwargs):
    +        """Restores a backed up storage account to a vault.
    +
    +        Restores a backed up storage account to a vault. This operation
    +        requires the storage/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_bundle_backup: The backup blob associated with a
    +         storage account.
    +        :type storage_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageRestoreParameters(storage_bundle_backup=storage_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_storage_account.metadata = {'url': '/storage/restore'}
    +
    +    async def delete_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Deletes a storage account. This operation requires the storage/delete
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedStorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedStorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedStorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    async def get_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Gets information about a specified storage account. This operation
    +        requires the storage/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    async def set_storage_account(self, vault_base_url, storage_account_name, resource_id, active_key_name, auto_regenerate_key, regeneration_period=None, storage_account_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Creates or updates a new storage account. This operation requires the
    +        storage/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param resource_id: Storage account resource id.
    +        :type resource_id: str
    +        :param active_key_name: Current active storage account key name.
    +        :type active_key_name: str
    +        :param auto_regenerate_key: whether keyvault should manage the storage
    +         account for the user.
    +        :type auto_regenerate_key: bool
    +        :param regeneration_period: The key regeneration time duration
    +         specified in ISO-8601 format.
    +        :type regeneration_period: str
    +        :param storage_account_attributes: The attributes of the storage
    +         account.
    +        :type storage_account_attributes:
    +         ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountCreateParameters(resource_id=resource_id, active_key_name=active_key_name, auto_regenerate_key=auto_regenerate_key, regeneration_period=regeneration_period, storage_account_attributes=storage_account_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.set_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    async def update_storage_account(self, vault_base_url, storage_account_name, active_key_name=None, auto_regenerate_key=None, regeneration_period=None, storage_account_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given storage
    +        account. This operation requires the storage/set/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param active_key_name: The current active storage account key name.
    +        :type active_key_name: str
    +        :param auto_regenerate_key: whether keyvault should manage the storage
    +         account for the user.
    +        :type auto_regenerate_key: bool
    +        :param regeneration_period: The key regeneration time duration
    +         specified in ISO-8601 format.
    +        :type regeneration_period: str
    +        :param storage_account_attributes: The attributes of the storage
    +         account.
    +        :type storage_account_attributes:
    +         ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountUpdateParameters(active_key_name=active_key_name, auto_regenerate_key=auto_regenerate_key, regeneration_period=regeneration_period, storage_account_attributes=storage_account_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    async def regenerate_storage_account_key(self, vault_base_url, storage_account_name, key_name, *, cls=None, **kwargs):
    +        """Regenerates the specified key value for the given storage account. This
    +        operation requires the storage/regeneratekey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param key_name: The storage account key name.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountRegenerteKeyParameters(key_name=key_name)
    +
    +        # Construct URL
    +        url = self.regenerate_storage_account_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountRegenerteKeyParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    regenerate_storage_account_key.metadata = {'url': '/storage/{storage-account-name}/regeneratekey'}
    +
    +    def get_sas_definitions(
    +            self, vault_base_url, storage_account_name, maxresults=None, *, cls=None, **kwargs):
    +        """List storage SAS definitions for the given storage account. This
    +        operation requires the storage/listsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SasDefinitionItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.SasDefinitionItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_sas_definitions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('SasDefinitionListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_sas_definitions.metadata = {'url': '/storage/{storage-account-name}/sas'}
    +
    +    def get_deleted_sas_definitions(
    +            self, vault_base_url, storage_account_name, maxresults=None, *, cls=None, **kwargs):
    +        """Lists deleted SAS definitions for the specified vault and storage
    +        account.
    +
    +        The Get Deleted Sas Definitions operation returns the SAS definitions
    +        that have been deleted for a vault enabled for soft-delete. This
    +        operation requires the storage/listsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedSasDefinitionItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedSasDefinitionItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_sas_definitions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedSasDefinitionListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_sas_definitions.metadata = {'url': '/deletedstorage/{storage-account-name}/sas'}
    +
    +    async def get_deleted_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, *, cls=None, **kwargs):
    +        """Gets the specified deleted sas definition.
    +
    +        The Get Deleted SAS Definition operation returns the specified deleted
    +        SAS definition along with its attributes. This operation requires the
    +        storage/getsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    async def recover_deleted_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, *, cls=None, **kwargs):
    +        """Recovers the deleted SAS definition.
    +
    +        Recovers the deleted SAS definition for the specified storage account.
    +        This operation can only be performed on a soft-delete enabled vault.
    +        This operation requires the storage/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}/recover'}
    +
    +    async def delete_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, *, cls=None, **kwargs):
    +        """Deletes a SAS definition from a specified storage account. This
    +        operation requires the storage/deletesas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    async def get_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, *, cls=None, **kwargs):
    +        """Gets information about a SAS definition for the specified storage
    +        account. This operation requires the storage/getsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    async def set_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, template_uri, sas_type, validity_period, sas_definition_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Creates or updates a new SAS definition for the specified storage
    +        account. This operation requires the storage/setsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param template_uri: The SAS definition token template signed with an
    +         arbitrary key.  Tokens created according to the SAS definition will
    +         have the same properties as the template.
    +        :type template_uri: str
    +        :param sas_type: The type of SAS token the SAS definition will create.
    +         Possible values include: 'account', 'service'
    +        :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +        :param validity_period: The validity period of SAS tokens created
    +         according to the SAS definition.
    +        :type validity_period: str
    +        :param sas_definition_attributes: The attributes of the SAS
    +         definition.
    +        :type sas_definition_attributes:
    +         ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SasDefinitionCreateParameters(template_uri=template_uri, sas_type=sas_type, validity_period=validity_period, sas_definition_attributes=sas_definition_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.set_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SasDefinitionCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    async def update_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, template_uri=None, sas_type=None, validity_period=None, sas_definition_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given SAS
    +        definition. This operation requires the storage/setsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param template_uri: The SAS definition token template signed with an
    +         arbitrary key.  Tokens created according to the SAS definition will
    +         have the same properties as the template.
    +        :type template_uri: str
    +        :param sas_type: The type of SAS token the SAS definition will create.
    +         Possible values include: 'account', 'service'
    +        :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +        :param validity_period: The validity period of SAS tokens created
    +         according to the SAS definition.
    +        :type validity_period: str
    +        :param sas_definition_attributes: The attributes of the SAS
    +         definition.
    +        :type sas_definition_attributes:
    +         ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SasDefinitionUpdateParameters(template_uri=template_uri, sas_type=sas_type, validity_period=validity_period, sas_definition_attributes=sas_definition_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SasDefinitionUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/models/__init__.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/models/__init__.py
    new file mode 100644
    index 000000000000..68ccf6d2e5f5
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/models/__init__.py
    @@ -0,0 +1,303 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +try:
    +    from ._models_py3 import Action
    +    from ._models_py3 import AdministratorDetails
    +    from ._models_py3 import Attributes
    +    from ._models_py3 import BackupCertificateResult
    +    from ._models_py3 import BackupKeyResult
    +    from ._models_py3 import BackupSecretResult
    +    from ._models_py3 import BackupStorageResult
    +    from ._models_py3 import CertificateAttributes
    +    from ._models_py3 import CertificateBundle
    +    from ._models_py3 import CertificateCreateParameters
    +    from ._models_py3 import CertificateImportParameters
    +    from ._models_py3 import CertificateIssuerItem
    +    from ._models_py3 import CertificateIssuerListResult
    +    from ._models_py3 import CertificateIssuerSetParameters
    +    from ._models_py3 import CertificateIssuerUpdateParameters
    +    from ._models_py3 import CertificateItem
    +    from ._models_py3 import CertificateListResult
    +    from ._models_py3 import CertificateMergeParameters
    +    from ._models_py3 import CertificateOperation
    +    from ._models_py3 import CertificateOperationUpdateParameter
    +    from ._models_py3 import CertificatePolicy
    +    from ._models_py3 import CertificateRestoreParameters
    +    from ._models_py3 import CertificateUpdateParameters
    +    from ._models_py3 import Contact
    +    from ._models_py3 import Contacts
    +    from ._models_py3 import DeletedCertificateBundle
    +    from ._models_py3 import DeletedCertificateItem
    +    from ._models_py3 import DeletedCertificateListResult
    +    from ._models_py3 import DeletedKeyBundle
    +    from ._models_py3 import DeletedKeyItem
    +    from ._models_py3 import DeletedKeyListResult
    +    from ._models_py3 import DeletedSasDefinitionBundle
    +    from ._models_py3 import DeletedSasDefinitionItem
    +    from ._models_py3 import DeletedSasDefinitionListResult
    +    from ._models_py3 import DeletedSecretBundle
    +    from ._models_py3 import DeletedSecretItem
    +    from ._models_py3 import DeletedSecretListResult
    +    from ._models_py3 import DeletedStorageAccountItem
    +    from ._models_py3 import DeletedStorageBundle
    +    from ._models_py3 import DeletedStorageListResult
    +    from ._models_py3 import Error
    +    from ._models_py3 import IssuerAttributes
    +    from ._models_py3 import IssuerBundle
    +    from ._models_py3 import IssuerCredentials
    +    from ._models_py3 import IssuerParameters
    +    from ._models_py3 import JsonWebKey
    +    from ._models_py3 import KeyAttributes
    +    from ._models_py3 import KeyBundle
    +    from ._models_py3 import KeyCreateParameters
    +    from ._models_py3 import KeyImportParameters
    +    from ._models_py3 import KeyItem
    +    from ._models_py3 import KeyListResult
    +    from ._models_py3 import KeyOperationResult
    +    from ._models_py3 import KeyOperationsParameters
    +    from ._models_py3 import KeyProperties
    +    from ._models_py3 import KeyRestoreParameters
    +    from ._models_py3 import KeySignParameters
    +    from ._models_py3 import KeyUpdateParameters
    +    from ._models_py3 import KeyVaultError, KeyVaultErrorException
    +    from ._models_py3 import KeyVerifyParameters
    +    from ._models_py3 import KeyVerifyResult
    +    from ._models_py3 import LifetimeAction
    +    from ._models_py3 import OrganizationDetails
    +    from ._models_py3 import PendingCertificateSigningRequestResult
    +    from ._models_py3 import SasDefinitionAttributes
    +    from ._models_py3 import SasDefinitionBundle
    +    from ._models_py3 import SasDefinitionCreateParameters
    +    from ._models_py3 import SasDefinitionItem
    +    from ._models_py3 import SasDefinitionListResult
    +    from ._models_py3 import SasDefinitionUpdateParameters
    +    from ._models_py3 import SecretAttributes
    +    from ._models_py3 import SecretBundle
    +    from ._models_py3 import SecretItem
    +    from ._models_py3 import SecretListResult
    +    from ._models_py3 import SecretProperties
    +    from ._models_py3 import SecretRestoreParameters
    +    from ._models_py3 import SecretSetParameters
    +    from ._models_py3 import SecretUpdateParameters
    +    from ._models_py3 import StorageAccountAttributes
    +    from ._models_py3 import StorageAccountCreateParameters
    +    from ._models_py3 import StorageAccountItem
    +    from ._models_py3 import StorageAccountRegenerteKeyParameters
    +    from ._models_py3 import StorageAccountUpdateParameters
    +    from ._models_py3 import StorageBundle
    +    from ._models_py3 import StorageListResult
    +    from ._models_py3 import StorageRestoreParameters
    +    from ._models_py3 import SubjectAlternativeNames
    +    from ._models_py3 import Trigger
    +    from ._models_py3 import X509CertificateProperties
    +except (SyntaxError, ImportError):
    +    from ._models import Action
    +    from ._models import AdministratorDetails
    +    from ._models import Attributes
    +    from ._models import BackupCertificateResult
    +    from ._models import BackupKeyResult
    +    from ._models import BackupSecretResult
    +    from ._models import BackupStorageResult
    +    from ._models import CertificateAttributes
    +    from ._models import CertificateBundle
    +    from ._models import CertificateCreateParameters
    +    from ._models import CertificateImportParameters
    +    from ._models import CertificateIssuerItem
    +    from ._models import CertificateIssuerListResult
    +    from ._models import CertificateIssuerSetParameters
    +    from ._models import CertificateIssuerUpdateParameters
    +    from ._models import CertificateItem
    +    from ._models import CertificateListResult
    +    from ._models import CertificateMergeParameters
    +    from ._models import CertificateOperation
    +    from ._models import CertificateOperationUpdateParameter
    +    from ._models import CertificatePolicy
    +    from ._models import CertificateRestoreParameters
    +    from ._models import CertificateUpdateParameters
    +    from ._models import Contact
    +    from ._models import Contacts
    +    from ._models import DeletedCertificateBundle
    +    from ._models import DeletedCertificateItem
    +    from ._models import DeletedCertificateListResult
    +    from ._models import DeletedKeyBundle
    +    from ._models import DeletedKeyItem
    +    from ._models import DeletedKeyListResult
    +    from ._models import DeletedSasDefinitionBundle
    +    from ._models import DeletedSasDefinitionItem
    +    from ._models import DeletedSasDefinitionListResult
    +    from ._models import DeletedSecretBundle
    +    from ._models import DeletedSecretItem
    +    from ._models import DeletedSecretListResult
    +    from ._models import DeletedStorageAccountItem
    +    from ._models import DeletedStorageBundle
    +    from ._models import DeletedStorageListResult
    +    from ._models import Error
    +    from ._models import IssuerAttributes
    +    from ._models import IssuerBundle
    +    from ._models import IssuerCredentials
    +    from ._models import IssuerParameters
    +    from ._models import JsonWebKey
    +    from ._models import KeyAttributes
    +    from ._models import KeyBundle
    +    from ._models import KeyCreateParameters
    +    from ._models import KeyImportParameters
    +    from ._models import KeyItem
    +    from ._models import KeyListResult
    +    from ._models import KeyOperationResult
    +    from ._models import KeyOperationsParameters
    +    from ._models import KeyProperties
    +    from ._models import KeyRestoreParameters
    +    from ._models import KeySignParameters
    +    from ._models import KeyUpdateParameters
    +    from ._models import KeyVaultError, KeyVaultErrorException
    +    from ._models import KeyVerifyParameters
    +    from ._models import KeyVerifyResult
    +    from ._models import LifetimeAction
    +    from ._models import OrganizationDetails
    +    from ._models import PendingCertificateSigningRequestResult
    +    from ._models import SasDefinitionAttributes
    +    from ._models import SasDefinitionBundle
    +    from ._models import SasDefinitionCreateParameters
    +    from ._models import SasDefinitionItem
    +    from ._models import SasDefinitionListResult
    +    from ._models import SasDefinitionUpdateParameters
    +    from ._models import SecretAttributes
    +    from ._models import SecretBundle
    +    from ._models import SecretItem
    +    from ._models import SecretListResult
    +    from ._models import SecretProperties
    +    from ._models import SecretRestoreParameters
    +    from ._models import SecretSetParameters
    +    from ._models import SecretUpdateParameters
    +    from ._models import StorageAccountAttributes
    +    from ._models import StorageAccountCreateParameters
    +    from ._models import StorageAccountItem
    +    from ._models import StorageAccountRegenerteKeyParameters
    +    from ._models import StorageAccountUpdateParameters
    +    from ._models import StorageBundle
    +    from ._models import StorageListResult
    +    from ._models import StorageRestoreParameters
    +    from ._models import SubjectAlternativeNames
    +    from ._models import Trigger
    +    from ._models import X509CertificateProperties
    +from ._key_vault_client_enums import (
    +    DeletionRecoveryLevel,
    +    JsonWebKeyType,
    +    JsonWebKeyCurveName,
    +    KeyUsageType,
    +    ActionType,
    +    JsonWebKeyOperation,
    +    JsonWebKeyEncryptionAlgorithm,
    +    JsonWebKeySignatureAlgorithm,
    +    SasTokenType,
    +)
    +
    +__all__ = [
    +    'Action',
    +    'AdministratorDetails',
    +    'Attributes',
    +    'BackupCertificateResult',
    +    'BackupKeyResult',
    +    'BackupSecretResult',
    +    'BackupStorageResult',
    +    'CertificateAttributes',
    +    'CertificateBundle',
    +    'CertificateCreateParameters',
    +    'CertificateImportParameters',
    +    'CertificateIssuerItem',
    +    'CertificateIssuerListResult',
    +    'CertificateIssuerSetParameters',
    +    'CertificateIssuerUpdateParameters',
    +    'CertificateItem',
    +    'CertificateListResult',
    +    'CertificateMergeParameters',
    +    'CertificateOperation',
    +    'CertificateOperationUpdateParameter',
    +    'CertificatePolicy',
    +    'CertificateRestoreParameters',
    +    'CertificateUpdateParameters',
    +    'Contact',
    +    'Contacts',
    +    'DeletedCertificateBundle',
    +    'DeletedCertificateItem',
    +    'DeletedCertificateListResult',
    +    'DeletedKeyBundle',
    +    'DeletedKeyItem',
    +    'DeletedKeyListResult',
    +    'DeletedSasDefinitionBundle',
    +    'DeletedSasDefinitionItem',
    +    'DeletedSasDefinitionListResult',
    +    'DeletedSecretBundle',
    +    'DeletedSecretItem',
    +    'DeletedSecretListResult',
    +    'DeletedStorageAccountItem',
    +    'DeletedStorageBundle',
    +    'DeletedStorageListResult',
    +    'Error',
    +    'IssuerAttributes',
    +    'IssuerBundle',
    +    'IssuerCredentials',
    +    'IssuerParameters',
    +    'JsonWebKey',
    +    'KeyAttributes',
    +    'KeyBundle',
    +    'KeyCreateParameters',
    +    'KeyImportParameters',
    +    'KeyItem',
    +    'KeyListResult',
    +    'KeyOperationResult',
    +    'KeyOperationsParameters',
    +    'KeyProperties',
    +    'KeyRestoreParameters',
    +    'KeySignParameters',
    +    'KeyUpdateParameters',
    +    'KeyVaultError', 'KeyVaultErrorException',
    +    'KeyVerifyParameters',
    +    'KeyVerifyResult',
    +    'LifetimeAction',
    +    'OrganizationDetails',
    +    'PendingCertificateSigningRequestResult',
    +    'SasDefinitionAttributes',
    +    'SasDefinitionBundle',
    +    'SasDefinitionCreateParameters',
    +    'SasDefinitionItem',
    +    'SasDefinitionListResult',
    +    'SasDefinitionUpdateParameters',
    +    'SecretAttributes',
    +    'SecretBundle',
    +    'SecretItem',
    +    'SecretListResult',
    +    'SecretProperties',
    +    'SecretRestoreParameters',
    +    'SecretSetParameters',
    +    'SecretUpdateParameters',
    +    'StorageAccountAttributes',
    +    'StorageAccountCreateParameters',
    +    'StorageAccountItem',
    +    'StorageAccountRegenerteKeyParameters',
    +    'StorageAccountUpdateParameters',
    +    'StorageBundle',
    +    'StorageListResult',
    +    'StorageRestoreParameters',
    +    'SubjectAlternativeNames',
    +    'Trigger',
    +    'X509CertificateProperties',
    +    'DeletionRecoveryLevel',
    +    'JsonWebKeyType',
    +    'JsonWebKeyCurveName',
    +    'KeyUsageType',
    +    'ActionType',
    +    'JsonWebKeyOperation',
    +    'JsonWebKeyEncryptionAlgorithm',
    +    'JsonWebKeySignatureAlgorithm',
    +    'SasTokenType',
    +]
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/models/_key_vault_client_enums.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/models/_key_vault_client_enums.py
    new file mode 100644
    index 000000000000..936353e5bb83
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/models/_key_vault_client_enums.py
    @@ -0,0 +1,98 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from enum import Enum
    +
    +
    +class DeletionRecoveryLevel(str, Enum):
    +
    +    purgeable = "Purgeable"
    +    recoverable_purgeable = "Recoverable+Purgeable"
    +    recoverable = "Recoverable"
    +    recoverable_protected_subscription = "Recoverable+ProtectedSubscription"
    +    customized_recoverable_purgeable = "CustomizedRecoverable+Purgeable"
    +    customized_recoverable = "CustomizedRecoverable"
    +    customized_recoverable_protected_subscription = "CustomizedRecoverable+ProtectedSubscription"
    +
    +
    +class JsonWebKeyType(str, Enum):
    +
    +    ec = "EC"
    +    ec_hsm = "EC-HSM"
    +    rsa = "RSA"
    +    rsa_hsm = "RSA-HSM"
    +    oct = "oct"
    +
    +
    +class JsonWebKeyCurveName(str, Enum):
    +
    +    p_256 = "P-256"
    +    p_384 = "P-384"
    +    p_521 = "P-521"
    +    p_256_k = "P-256K"
    +
    +
    +class KeyUsageType(str, Enum):
    +
    +    digital_signature = "digitalSignature"
    +    non_repudiation = "nonRepudiation"
    +    key_encipherment = "keyEncipherment"
    +    data_encipherment = "dataEncipherment"
    +    key_agreement = "keyAgreement"
    +    key_cert_sign = "keyCertSign"
    +    c_rl_sign = "cRLSign"
    +    encipher_only = "encipherOnly"
    +    decipher_only = "decipherOnly"
    +
    +
    +class ActionType(str, Enum):
    +
    +    email_contacts = "EmailContacts"
    +    auto_renew = "AutoRenew"
    +
    +
    +class JsonWebKeyOperation(str, Enum):
    +
    +    encrypt = "encrypt"
    +    decrypt = "decrypt"
    +    sign = "sign"
    +    verify = "verify"
    +    wrap_key = "wrapKey"
    +    unwrap_key = "unwrapKey"
    +    import_enum = "import"
    +
    +
    +class JsonWebKeyEncryptionAlgorithm(str, Enum):
    +
    +    rsa_oaep = "RSA-OAEP"
    +    rsa_oaep_256 = "RSA-OAEP-256"
    +    rsa1_5 = "RSA1_5"
    +
    +
    +class JsonWebKeySignatureAlgorithm(str, Enum):
    +
    +    ps256 = "PS256"  #: RSASSA-PSS using SHA-256 and MGF1 with SHA-256, as described in https://tools.ietf.org/html/rfc7518
    +    ps384 = "PS384"  #: RSASSA-PSS using SHA-384 and MGF1 with SHA-384, as described in https://tools.ietf.org/html/rfc7518
    +    ps512 = "PS512"  #: RSASSA-PSS using SHA-512 and MGF1 with SHA-512, as described in https://tools.ietf.org/html/rfc7518
    +    rs256 = "RS256"  #: RSASSA-PKCS1-v1_5 using SHA-256, as described in https://tools.ietf.org/html/rfc7518
    +    rs384 = "RS384"  #: RSASSA-PKCS1-v1_5 using SHA-384, as described in https://tools.ietf.org/html/rfc7518
    +    rs512 = "RS512"  #: RSASSA-PKCS1-v1_5 using SHA-512, as described in https://tools.ietf.org/html/rfc7518
    +    rsnull = "RSNULL"  #: Reserved
    +    es256 = "ES256"  #: ECDSA using P-256 and SHA-256, as described in https://tools.ietf.org/html/rfc7518.
    +    es384 = "ES384"  #: ECDSA using P-384 and SHA-384, as described in https://tools.ietf.org/html/rfc7518
    +    es512 = "ES512"  #: ECDSA using P-521 and SHA-512, as described in https://tools.ietf.org/html/rfc7518
    +    es256_k = "ES256K"  #: ECDSA using P-256K and SHA-256, as described in https://tools.ietf.org/html/rfc7518
    +
    +
    +class SasTokenType(str, Enum):
    +
    +    account = "account"
    +    service = "service"
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/models/_models.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/models/_models.py
    new file mode 100644
    index 000000000000..ea5379c44cc0
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/models/_models.py
    @@ -0,0 +1,3244 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from azure.core.exceptions import HttpResponseError
    +
    +
    +class Action(Model):
    +    """The action that will be executed.
    +
    +    :param action_type: The type of the action. Possible values include:
    +     'EmailContacts', 'AutoRenew'
    +    :type action_type: str or ~azure.keyvault.v7_1.models.ActionType
    +    """
    +
    +    _attribute_map = {
    +        'action_type': {'key': 'action_type', 'type': 'ActionType'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Action, self).__init__(**kwargs)
    +        self.action_type = kwargs.get('action_type', None)
    +
    +
    +class AdministratorDetails(Model):
    +    """Details of the organization administrator of the certificate issuer.
    +
    +    :param first_name: First name.
    +    :type first_name: str
    +    :param last_name: Last name.
    +    :type last_name: str
    +    :param email_address: Email address.
    +    :type email_address: str
    +    :param phone: Phone number.
    +    :type phone: str
    +    """
    +
    +    _attribute_map = {
    +        'first_name': {'key': 'first_name', 'type': 'str'},
    +        'last_name': {'key': 'last_name', 'type': 'str'},
    +        'email_address': {'key': 'email', 'type': 'str'},
    +        'phone': {'key': 'phone', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AdministratorDetails, self).__init__(**kwargs)
    +        self.first_name = kwargs.get('first_name', None)
    +        self.last_name = kwargs.get('last_name', None)
    +        self.email_address = kwargs.get('email_address', None)
    +        self.phone = kwargs.get('phone', None)
    +
    +
    +class Attributes(Model):
    +    """The object attributes managed by the KeyVault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Attributes, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.not_before = kwargs.get('not_before', None)
    +        self.expires = kwargs.get('expires', None)
    +        self.created = None
    +        self.updated = None
    +
    +
    +class BackupCertificateResult(Model):
    +    """The backup certificate result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up certificate.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BackupCertificateResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupKeyResult(Model):
    +    """The backup key result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up key.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BackupKeyResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupSecretResult(Model):
    +    """The backup secret result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up secret.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BackupSecretResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupStorageResult(Model):
    +    """The backup storage result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up storage account.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BackupStorageResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class CertificateAttributes(Attributes):
    +    """The certificate management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for certificates in the current vault. If it contains 'Purgeable',
    +     the certificate can be permanently deleted by a privileged user;
    +     otherwise, only the system can purge the certificate, at the end of the
    +     retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateAttributes, self).__init__(**kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class CertificateBundle(Model):
    +    """A certificate bundle consists of a certificate (X509) plus its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :ivar kid: The key id.
    +    :vartype kid: str
    +    :ivar sid: The secret id.
    +    :vartype sid: str
    +    :ivar x509_thumbprint: Thumbprint of the certificate.
    +    :vartype x509_thumbprint: bytes
    +    :ivar policy: The management policy.
    +    :vartype policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param cer: CER contents of x509 certificate.
    +    :type cer: bytearray
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'kid': {'readonly': True},
    +        'sid': {'readonly': True},
    +        'x509_thumbprint': {'readonly': True},
    +        'policy': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'sid': {'key': 'sid', 'type': 'str'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'cer': {'key': 'cer', 'type': 'bytearray'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.kid = None
    +        self.sid = None
    +        self.x509_thumbprint = None
    +        self.policy = None
    +        self.cer = kwargs.get('cer', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CertificateCreateParameters(Model):
    +    """The certificate create parameters.
    +
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateCreateParameters, self).__init__(**kwargs)
    +        self.certificate_policy = kwargs.get('certificate_policy', None)
    +        self.certificate_attributes = kwargs.get('certificate_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CertificateImportParameters(Model):
    +    """The certificate import parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param base64_encoded_certificate: Required. Base64 encoded representation
    +     of the certificate object to import. This certificate needs to contain the
    +     private key.
    +    :type base64_encoded_certificate: str
    +    :param password: If the private key in base64EncodedCertificate is
    +     encrypted, the password used for encryption.
    +    :type password: str
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'base64_encoded_certificate': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'base64_encoded_certificate': {'key': 'value', 'type': 'str'},
    +        'password': {'key': 'pwd', 'type': 'str'},
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateImportParameters, self).__init__(**kwargs)
    +        self.base64_encoded_certificate = kwargs.get('base64_encoded_certificate', None)
    +        self.password = kwargs.get('password', None)
    +        self.certificate_policy = kwargs.get('certificate_policy', None)
    +        self.certificate_attributes = kwargs.get('certificate_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CertificateIssuerItem(Model):
    +    """The certificate issuer item containing certificate issuer metadata.
    +
    +    :param id: Certificate Identifier.
    +    :type id: str
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'provider': {'key': 'provider', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateIssuerItem, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.provider = kwargs.get('provider', None)
    +
    +
    +class CertificateIssuerListResult(Model):
    +    """The certificate issuer list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of certificate issuers
    +     in the key vault along with a link to the next page of certificate
    +     issuers.
    +    :vartype value: list[~azure.keyvault.v7_1.models.CertificateIssuerItem]
    +    :ivar next_link: The URL to get the next set of certificate issuers.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateIssuerItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateIssuerListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class CertificateIssuerSetParameters(Model):
    +    """The certificate issuer set parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param provider: Required. The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _validation = {
    +        'provider': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateIssuerSetParameters, self).__init__(**kwargs)
    +        self.provider = kwargs.get('provider', None)
    +        self.credentials = kwargs.get('credentials', None)
    +        self.organization_details = kwargs.get('organization_details', None)
    +        self.attributes = kwargs.get('attributes', None)
    +
    +
    +class CertificateIssuerUpdateParameters(Model):
    +    """The certificate issuer update parameters.
    +
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateIssuerUpdateParameters, self).__init__(**kwargs)
    +        self.provider = kwargs.get('provider', None)
    +        self.credentials = kwargs.get('credentials', None)
    +        self.organization_details = kwargs.get('organization_details', None)
    +        self.attributes = kwargs.get('attributes', None)
    +
    +
    +class CertificateItem(Model):
    +    """The certificate item containing certificate metadata.
    +
    +    :param id: Certificate identifier.
    +    :type id: str
    +    :param attributes: The certificate management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param x509_thumbprint: Thumbprint of the certificate.
    +    :type x509_thumbprint: bytes
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateItem, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.x509_thumbprint = kwargs.get('x509_thumbprint', None)
    +
    +
    +class CertificateListResult(Model):
    +    """The certificate list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of certificates in the
    +     key vault along with a link to the next page of certificates.
    +    :vartype value: list[~azure.keyvault.v7_1.models.CertificateItem]
    +    :ivar next_link: The URL to get the next set of certificates.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class CertificateMergeParameters(Model):
    +    """The certificate merge parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param x509_certificates: Required. The certificate or the certificate
    +     chain to merge.
    +    :type x509_certificates: list[bytearray]
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'x509_certificates': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'x509_certificates': {'key': 'x5c', 'type': '[bytearray]'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateMergeParameters, self).__init__(**kwargs)
    +        self.x509_certificates = kwargs.get('x509_certificates', None)
    +        self.certificate_attributes = kwargs.get('certificate_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CertificateOperation(Model):
    +    """A certificate operation is returned in case of asynchronous requests.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :param issuer_parameters: Parameters for the issuer of the X509 component
    +     of a certificate.
    +    :type issuer_parameters: ~azure.keyvault.v7_1.models.IssuerParameters
    +    :param csr: The certificate signing request (CSR) that is being used in
    +     the certificate operation.
    +    :type csr: bytearray
    +    :param cancellation_requested: Indicates if cancellation was requested on
    +     the certificate operation.
    +    :type cancellation_requested: bool
    +    :param status: Status of the certificate operation.
    +    :type status: str
    +    :param status_details: The status details of the certificate operation.
    +    :type status_details: str
    +    :param error: Error encountered, if any, during the certificate operation.
    +    :type error: ~azure.keyvault.v7_1.models.Error
    +    :param target: Location which contains the result of the certificate
    +     operation.
    +    :type target: str
    +    :param request_id: Identifier for the certificate operation.
    +    :type request_id: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'},
    +        'csr': {'key': 'csr', 'type': 'bytearray'},
    +        'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'},
    +        'status': {'key': 'status', 'type': 'str'},
    +        'status_details': {'key': 'status_details', 'type': 'str'},
    +        'error': {'key': 'error', 'type': 'Error'},
    +        'target': {'key': 'target', 'type': 'str'},
    +        'request_id': {'key': 'request_id', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateOperation, self).__init__(**kwargs)
    +        self.id = None
    +        self.issuer_parameters = kwargs.get('issuer_parameters', None)
    +        self.csr = kwargs.get('csr', None)
    +        self.cancellation_requested = kwargs.get('cancellation_requested', None)
    +        self.status = kwargs.get('status', None)
    +        self.status_details = kwargs.get('status_details', None)
    +        self.error = kwargs.get('error', None)
    +        self.target = kwargs.get('target', None)
    +        self.request_id = kwargs.get('request_id', None)
    +
    +
    +class CertificateOperationUpdateParameter(Model):
    +    """The certificate operation update parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param cancellation_requested: Required. Indicates if cancellation was
    +     requested on the certificate operation.
    +    :type cancellation_requested: bool
    +    """
    +
    +    _validation = {
    +        'cancellation_requested': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateOperationUpdateParameter, self).__init__(**kwargs)
    +        self.cancellation_requested = kwargs.get('cancellation_requested', None)
    +
    +
    +class CertificatePolicy(Model):
    +    """Management policy for a certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :param key_properties: Properties of the key backing a certificate.
    +    :type key_properties: ~azure.keyvault.v7_1.models.KeyProperties
    +    :param secret_properties: Properties of the secret backing a certificate.
    +    :type secret_properties: ~azure.keyvault.v7_1.models.SecretProperties
    +    :param x509_certificate_properties: Properties of the X509 component of a
    +     certificate.
    +    :type x509_certificate_properties:
    +     ~azure.keyvault.v7_1.models.X509CertificateProperties
    +    :param lifetime_actions: Actions that will be performed by Key Vault over
    +     the lifetime of a certificate.
    +    :type lifetime_actions: list[~azure.keyvault.v7_1.models.LifetimeAction]
    +    :param issuer_parameters: Parameters for the issuer of the X509 component
    +     of a certificate.
    +    :type issuer_parameters: ~azure.keyvault.v7_1.models.IssuerParameters
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'key_properties': {'key': 'key_props', 'type': 'KeyProperties'},
    +        'secret_properties': {'key': 'secret_props', 'type': 'SecretProperties'},
    +        'x509_certificate_properties': {'key': 'x509_props', 'type': 'X509CertificateProperties'},
    +        'lifetime_actions': {'key': 'lifetime_actions', 'type': '[LifetimeAction]'},
    +        'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificatePolicy, self).__init__(**kwargs)
    +        self.id = None
    +        self.key_properties = kwargs.get('key_properties', None)
    +        self.secret_properties = kwargs.get('secret_properties', None)
    +        self.x509_certificate_properties = kwargs.get('x509_certificate_properties', None)
    +        self.lifetime_actions = kwargs.get('lifetime_actions', None)
    +        self.issuer_parameters = kwargs.get('issuer_parameters', None)
    +        self.attributes = kwargs.get('attributes', None)
    +
    +
    +class CertificateRestoreParameters(Model):
    +    """The certificate restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param certificate_bundle_backup: Required. The backup blob associated
    +     with a certificate bundle.
    +    :type certificate_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'certificate_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'certificate_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateRestoreParameters, self).__init__(**kwargs)
    +        self.certificate_bundle_backup = kwargs.get('certificate_bundle_backup', None)
    +
    +
    +class CertificateUpdateParameters(Model):
    +    """The certificate update parameters.
    +
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateUpdateParameters, self).__init__(**kwargs)
    +        self.certificate_policy = kwargs.get('certificate_policy', None)
    +        self.certificate_attributes = kwargs.get('certificate_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class Contact(Model):
    +    """The contact information for the vault certificates.
    +
    +    :param email_address: Email address.
    +    :type email_address: str
    +    :param name: Name.
    +    :type name: str
    +    :param phone: Phone number.
    +    :type phone: str
    +    """
    +
    +    _attribute_map = {
    +        'email_address': {'key': 'email', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'phone': {'key': 'phone', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Contact, self).__init__(**kwargs)
    +        self.email_address = kwargs.get('email_address', None)
    +        self.name = kwargs.get('name', None)
    +        self.phone = kwargs.get('phone', None)
    +
    +
    +class Contacts(Model):
    +    """The contacts for the vault certificates.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Identifier for the contacts collection.
    +    :vartype id: str
    +    :param contact_list: The contact list for the vault certificates.
    +    :type contact_list: list[~azure.keyvault.v7_1.models.Contact]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'contact_list': {'key': 'contacts', 'type': '[Contact]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Contacts, self).__init__(**kwargs)
    +        self.id = None
    +        self.contact_list = kwargs.get('contact_list', None)
    +
    +
    +class DeletedCertificateBundle(CertificateBundle):
    +    """A Deleted Certificate consisting of its previous id, attributes and its
    +    tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :ivar kid: The key id.
    +    :vartype kid: str
    +    :ivar sid: The secret id.
    +    :vartype sid: str
    +    :ivar x509_thumbprint: Thumbprint of the certificate.
    +    :vartype x509_thumbprint: bytes
    +    :ivar policy: The management policy.
    +    :vartype policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param cer: CER contents of x509 certificate.
    +    :type cer: bytearray
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs
    +    :type tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted certificate.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the certificate is scheduled to
    +     be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the certificate was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'kid': {'readonly': True},
    +        'sid': {'readonly': True},
    +        'x509_thumbprint': {'readonly': True},
    +        'policy': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'sid': {'key': 'sid', 'type': 'str'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'cer': {'key': 'cer', 'type': 'bytearray'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedCertificateBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedCertificateItem(CertificateItem):
    +    """The deleted certificate item containing metadata about the deleted
    +    certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Certificate identifier.
    +    :type id: str
    +    :param attributes: The certificate management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param x509_thumbprint: Thumbprint of the certificate.
    +    :type x509_thumbprint: bytes
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted certificate.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the certificate is scheduled to
    +     be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the certificate was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedCertificateItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedCertificateListResult(Model):
    +    """A list of certificates that have been deleted in this vault.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of deleted certificates
    +     in the vault along with a link to the next page of deleted certificates
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedCertificateItem]
    +    :ivar next_link: The URL to get the next set of deleted certificates.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedCertificateItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedCertificateListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class KeyBundle(Model):
    +    """A KeyBundle consisting of a WebKey plus its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param key: The Json web key.
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyBundle, self).__init__(**kwargs)
    +        self.key = kwargs.get('key', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.managed = None
    +
    +
    +class DeletedKeyBundle(KeyBundle):
    +    """A DeletedKeyBundle consisting of a WebKey plus its Attributes and deletion
    +    info.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param key: The Json web key.
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted key.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the key is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the key was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedKeyBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class KeyItem(Model):
    +    """The key item containing key metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyItem, self).__init__(**kwargs)
    +        self.kid = kwargs.get('kid', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.managed = None
    +
    +
    +class DeletedKeyItem(KeyItem):
    +    """The deleted key item containing the deleted key metadata and information
    +    about deletion.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted key.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the key is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the key was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedKeyItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedKeyListResult(Model):
    +    """A list of keys that have been deleted in this vault.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of deleted keys in the
    +     vault along with a link to the next page of deleted keys
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedKeyItem]
    +    :ivar next_link: The URL to get the next set of deleted keys.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedKeyItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedKeyListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SasDefinitionBundle(Model):
    +    """A SAS definition bundle consists of key vault SAS definition details plus
    +    its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The SAS definition id.
    +    :vartype id: str
    +    :ivar secret_id: Storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :vartype template_uri: str
    +    :ivar sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :vartype sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :ivar validity_period: The validity period of SAS tokens created according
    +     to the SAS definition.
    +    :vartype validity_period: str
    +    :ivar attributes: The SAS definition attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'template_uri': {'readonly': True},
    +        'sas_type': {'readonly': True},
    +        'validity_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.secret_id = None
    +        self.template_uri = None
    +        self.sas_type = None
    +        self.validity_period = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedSasDefinitionBundle(SasDefinitionBundle):
    +    """A deleted SAS definition bundle consisting of its previous id, attributes
    +    and its tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The SAS definition id.
    +    :vartype id: str
    +    :ivar secret_id: Storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :vartype template_uri: str
    +    :ivar sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :vartype sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :ivar validity_period: The validity period of SAS tokens created according
    +     to the SAS definition.
    +    :vartype validity_period: str
    +    :ivar attributes: The SAS definition attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted SAS definition.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the SAS definition is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the SAS definition was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'template_uri': {'readonly': True},
    +        'sas_type': {'readonly': True},
    +        'validity_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSasDefinitionBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class SasDefinitionItem(Model):
    +    """The SAS definition item containing storage SAS definition metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage SAS identifier.
    +    :vartype id: str
    +    :ivar secret_id: The storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar attributes: The SAS definition management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionItem, self).__init__(**kwargs)
    +        self.id = None
    +        self.secret_id = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedSasDefinitionItem(SasDefinitionItem):
    +    """The deleted SAS definition item containing metadata about the deleted SAS
    +    definition.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage SAS identifier.
    +    :vartype id: str
    +    :ivar secret_id: The storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar attributes: The SAS definition management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted SAS definition.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the SAS definition is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the SAS definition was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSasDefinitionItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedSasDefinitionListResult(Model):
    +    """The deleted SAS definition list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted SAS
    +     definitions in the vault along with a link to the next page of deleted sas
    +     definitions
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedSasDefinitionItem]
    +    :ivar next_link: The URL to get the next set of deleted SAS definitions.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedSasDefinitionItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSasDefinitionListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SecretBundle(Model):
    +    """A secret consisting of a value, id and its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value: The secret value.
    +    :type value: str
    +    :param id: The secret id.
    +    :type id: str
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar kid: If this is a secret backing a KV certificate, then this field
    +     specifies the corresponding key backing the KV certificate.
    +    :vartype kid: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a secret backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretBundle, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.id = kwargs.get('id', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.kid = None
    +        self.managed = None
    +
    +
    +class DeletedSecretBundle(SecretBundle):
    +    """A Deleted Secret consisting of its previous id, attributes and its tags, as
    +    well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value: The secret value.
    +    :type value: str
    +    :param id: The secret id.
    +    :type id: str
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar kid: If this is a secret backing a KV certificate, then this field
    +     specifies the corresponding key backing the KV certificate.
    +    :vartype kid: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a secret backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted secret.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the secret is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the secret was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSecretBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class SecretItem(Model):
    +    """The secret item containing secret metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Secret identifier.
    +    :type id: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretItem, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.managed = None
    +
    +
    +class DeletedSecretItem(SecretItem):
    +    """The deleted secret item containing metadata about the deleted secret.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Secret identifier.
    +    :type id: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted secret.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the secret is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the secret was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSecretItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedSecretListResult(Model):
    +    """The deleted secret list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted secrets
    +     in the vault along with a link to the next page of deleted secrets
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedSecretItem]
    +    :ivar next_link: The URL to get the next set of deleted secrets.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedSecretItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSecretListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class StorageAccountItem(Model):
    +    """The storage account item containing storage account metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Storage identifier.
    +    :vartype id: str
    +    :ivar resource_id: Storage account resource Id.
    +    :vartype resource_id: str
    +    :ivar attributes: The storage account management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountItem, self).__init__(**kwargs)
    +        self.id = None
    +        self.resource_id = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedStorageAccountItem(StorageAccountItem):
    +    """The deleted storage account item containing metadata about the deleted
    +    storage account.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Storage identifier.
    +    :vartype id: str
    +    :ivar resource_id: Storage account resource Id.
    +    :vartype resource_id: str
    +    :ivar attributes: The storage account management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted storage account.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the storage account is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the storage account was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedStorageAccountItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class StorageBundle(Model):
    +    """A Storage account bundle consists of key vault storage account details plus
    +    its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage account id.
    +    :vartype id: str
    +    :ivar resource_id: The storage account resource id.
    +    :vartype resource_id: str
    +    :ivar active_key_name: The current active storage account key name.
    +    :vartype active_key_name: str
    +    :ivar auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :vartype auto_regenerate_key: bool
    +    :ivar regeneration_period: The key regeneration time duration specified in
    +     ISO-8601 format.
    +    :vartype regeneration_period: str
    +    :ivar attributes: The storage account attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'active_key_name': {'readonly': True},
    +        'auto_regenerate_key': {'readonly': True},
    +        'regeneration_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.resource_id = None
    +        self.active_key_name = None
    +        self.auto_regenerate_key = None
    +        self.regeneration_period = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedStorageBundle(StorageBundle):
    +    """A deleted storage account bundle consisting of its previous id, attributes
    +    and its tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage account id.
    +    :vartype id: str
    +    :ivar resource_id: The storage account resource id.
    +    :vartype resource_id: str
    +    :ivar active_key_name: The current active storage account key name.
    +    :vartype active_key_name: str
    +    :ivar auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :vartype auto_regenerate_key: bool
    +    :ivar regeneration_period: The key regeneration time duration specified in
    +     ISO-8601 format.
    +    :vartype regeneration_period: str
    +    :ivar attributes: The storage account attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted storage account.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the storage account is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the storage account was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'active_key_name': {'readonly': True},
    +        'auto_regenerate_key': {'readonly': True},
    +        'regeneration_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedStorageBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedStorageListResult(Model):
    +    """The deleted storage account list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted storage
    +     accounts in the vault along with a link to the next page of deleted
    +     storage accounts
    +    :vartype value:
    +     list[~azure.keyvault.v7_1.models.DeletedStorageAccountItem]
    +    :ivar next_link: The URL to get the next set of deleted storage accounts.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedStorageAccountItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedStorageListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class Error(Model):
    +    """The key vault server error.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: The error code.
    +    :vartype code: str
    +    :ivar message: The error message.
    +    :vartype message: str
    +    :ivar inner_error:
    +    :vartype inner_error: ~azure.keyvault.v7_1.models.Error
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'inner_error': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'inner_error': {'key': 'innererror', 'type': 'Error'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Error, self).__init__(**kwargs)
    +        self.code = None
    +        self.message = None
    +        self.inner_error = None
    +
    +
    +class IssuerAttributes(Model):
    +    """The attributes of an issuer managed by the Key Vault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the issuer is enabled.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IssuerAttributes, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.created = None
    +        self.updated = None
    +
    +
    +class IssuerBundle(Model):
    +    """The issuer for Key Vault certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Identifier for the issuer object.
    +    :vartype id: str
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IssuerBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.provider = kwargs.get('provider', None)
    +        self.credentials = kwargs.get('credentials', None)
    +        self.organization_details = kwargs.get('organization_details', None)
    +        self.attributes = kwargs.get('attributes', None)
    +
    +
    +class IssuerCredentials(Model):
    +    """The credentials to be used for the certificate issuer.
    +
    +    :param account_id: The user name/account name/account id.
    +    :type account_id: str
    +    :param password: The password/secret/account key.
    +    :type password: str
    +    """
    +
    +    _attribute_map = {
    +        'account_id': {'key': 'account_id', 'type': 'str'},
    +        'password': {'key': 'pwd', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IssuerCredentials, self).__init__(**kwargs)
    +        self.account_id = kwargs.get('account_id', None)
    +        self.password = kwargs.get('password', None)
    +
    +
    +class IssuerParameters(Model):
    +    """Parameters for the issuer of the X509 component of a certificate.
    +
    +    :param name: Name of the referenced issuer object or reserved names; for
    +     example, 'Self' or 'Unknown'.
    +    :type name: str
    +    :param certificate_type: Certificate type as supported by the provider
    +     (optional); for example 'OV-SSL', 'EV-SSL'
    +    :type certificate_type: str
    +    :param certificate_transparency: Indicates if the certificates generated
    +     under this policy should be published to certificate transparency logs.
    +    :type certificate_transparency: bool
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'certificate_type': {'key': 'cty', 'type': 'str'},
    +        'certificate_transparency': {'key': 'cert_transparency', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IssuerParameters, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.certificate_type = kwargs.get('certificate_type', None)
    +        self.certificate_transparency = kwargs.get('certificate_transparency', None)
    +
    +
    +class JsonWebKey(Model):
    +    """As of http://tools.ietf.org/html/draft-ietf-jose-json-web-key-18.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param kty: JsonWebKey Key Type (kty), as defined in
    +     https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40.
    +     Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'
    +    :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_ops:
    +    :type key_ops: list[str]
    +    :param n: RSA modulus.
    +    :type n: bytes
    +    :param e: RSA public exponent.
    +    :type e: bytes
    +    :param d: RSA private exponent, or the D component of an EC private key.
    +    :type d: bytes
    +    :param dp: RSA private key parameter.
    +    :type dp: bytes
    +    :param dq: RSA private key parameter.
    +    :type dq: bytes
    +    :param qi: RSA private key parameter.
    +    :type qi: bytes
    +    :param p: RSA secret prime.
    +    :type p: bytes
    +    :param q: RSA secret prime, with p < q.
    +    :type q: bytes
    +    :param k: Symmetric key.
    +    :type k: bytes
    +    :param t: HSM Token, used with 'Bring Your Own Key'.
    +    :type t: bytes
    +    :param crv: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type crv: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    :param x: X component of an EC public key.
    +    :type x: bytes
    +    :param y: Y component of an EC public key.
    +    :type y: bytes
    +    """
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'kty': {'key': 'kty', 'type': 'str'},
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'n': {'key': 'n', 'type': 'base64'},
    +        'e': {'key': 'e', 'type': 'base64'},
    +        'd': {'key': 'd', 'type': 'base64'},
    +        'dp': {'key': 'dp', 'type': 'base64'},
    +        'dq': {'key': 'dq', 'type': 'base64'},
    +        'qi': {'key': 'qi', 'type': 'base64'},
    +        'p': {'key': 'p', 'type': 'base64'},
    +        'q': {'key': 'q', 'type': 'base64'},
    +        'k': {'key': 'k', 'type': 'base64'},
    +        't': {'key': 'key_hsm', 'type': 'base64'},
    +        'crv': {'key': 'crv', 'type': 'str'},
    +        'x': {'key': 'x', 'type': 'base64'},
    +        'y': {'key': 'y', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(JsonWebKey, self).__init__(**kwargs)
    +        self.kid = kwargs.get('kid', None)
    +        self.kty = kwargs.get('kty', None)
    +        self.key_ops = kwargs.get('key_ops', None)
    +        self.n = kwargs.get('n', None)
    +        self.e = kwargs.get('e', None)
    +        self.d = kwargs.get('d', None)
    +        self.dp = kwargs.get('dp', None)
    +        self.dq = kwargs.get('dq', None)
    +        self.qi = kwargs.get('qi', None)
    +        self.p = kwargs.get('p', None)
    +        self.q = kwargs.get('q', None)
    +        self.k = kwargs.get('k', None)
    +        self.t = kwargs.get('t', None)
    +        self.crv = kwargs.get('crv', None)
    +        self.x = kwargs.get('x', None)
    +        self.y = kwargs.get('y', None)
    +
    +
    +class KeyAttributes(Attributes):
    +    """The attributes of a key managed by the key vault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for keys in the current vault. If it contains 'Purgeable' the key
    +     can be permanently deleted by a privileged user; otherwise, only the
    +     system can purge the key, at the end of the retention interval. Possible
    +     values include: 'Purgeable', 'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyAttributes, self).__init__(**kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class KeyCreateParameters(Model):
    +    """The key create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param kty: Required. The type of key to create. For valid values, see
    +     JsonWebKeyType. Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM',
    +     'oct'
    +    :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_size: The key size in bits. For example: 2048, 3072, or 4096
    +     for RSA.
    +    :type key_size: int
    +    :param key_ops:
    +    :type key_ops: list[str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +    :param key_attributes:
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param curve: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    """
    +
    +    _validation = {
    +        'kty': {'required': True, 'min_length': 1},
    +    }
    +
    +    _attribute_map = {
    +        'kty': {'key': 'kty', 'type': 'str'},
    +        'key_size': {'key': 'key_size', 'type': 'int'},
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'curve': {'key': 'crv', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyCreateParameters, self).__init__(**kwargs)
    +        self.kty = kwargs.get('kty', None)
    +        self.key_size = kwargs.get('key_size', None)
    +        self.key_ops = kwargs.get('key_ops', None)
    +        self.key_attributes = kwargs.get('key_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.curve = kwargs.get('curve', None)
    +
    +
    +class KeyImportParameters(Model):
    +    """The key import parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param hsm: Whether to import as a hardware key (HSM) or software key.
    +    :type hsm: bool
    +    :param key: Required. The Json web key
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param key_attributes: The key management attributes.
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'key': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'hsm': {'key': 'Hsm', 'type': 'bool'},
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyImportParameters, self).__init__(**kwargs)
    +        self.hsm = kwargs.get('hsm', None)
    +        self.key = kwargs.get('key', None)
    +        self.key_attributes = kwargs.get('key_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class KeyListResult(Model):
    +    """The key list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of keys in the key vault
    +     along with a link to the next page of keys.
    +    :vartype value: list[~azure.keyvault.v7_1.models.KeyItem]
    +    :ivar next_link: The URL to get the next set of keys.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[KeyItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class KeyOperationResult(Model):
    +    """The key operation result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar kid: Key identifier
    +    :vartype kid: str
    +    :ivar result:
    +    :vartype result: bytes
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'result': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'result': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyOperationResult, self).__init__(**kwargs)
    +        self.kid = None
    +        self.result = None
    +
    +
    +class KeyOperationsParameters(Model):
    +    """The key operations parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. algorithm identifier. Possible values include:
    +     'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +    :param value: Required.
    +    :type value: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyOperationsParameters, self).__init__(**kwargs)
    +        self.algorithm = kwargs.get('algorithm', None)
    +        self.value = kwargs.get('value', None)
    +
    +
    +class KeyProperties(Model):
    +    """Properties of the key pair backing a certificate.
    +
    +    :param exportable: Indicates if the private key can be exported.
    +    :type exportable: bool
    +    :param key_type: The type of key pair to be used for the certificate.
    +     Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'
    +    :type key_type: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_size: The key size in bits. For example: 2048, 3072, or 4096
    +     for RSA.
    +    :type key_size: int
    +    :param reuse_key: Indicates if the same key pair will be used on
    +     certificate renewal.
    +    :type reuse_key: bool
    +    :param curve: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    """
    +
    +    _attribute_map = {
    +        'exportable': {'key': 'exportable', 'type': 'bool'},
    +        'key_type': {'key': 'kty', 'type': 'str'},
    +        'key_size': {'key': 'key_size', 'type': 'int'},
    +        'reuse_key': {'key': 'reuse_key', 'type': 'bool'},
    +        'curve': {'key': 'crv', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyProperties, self).__init__(**kwargs)
    +        self.exportable = kwargs.get('exportable', None)
    +        self.key_type = kwargs.get('key_type', None)
    +        self.key_size = kwargs.get('key_size', None)
    +        self.reuse_key = kwargs.get('reuse_key', None)
    +        self.curve = kwargs.get('curve', None)
    +
    +
    +class KeyRestoreParameters(Model):
    +    """The key restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_bundle_backup: Required. The backup blob associated with a key
    +     bundle.
    +    :type key_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'key_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyRestoreParameters, self).__init__(**kwargs)
    +        self.key_bundle_backup = kwargs.get('key_bundle_backup', None)
    +
    +
    +class KeySignParameters(Model):
    +    """The key operations parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. The signing/verification algorithm identifier.
    +     For more information on possible algorithm types, see
    +     JsonWebKeySignatureAlgorithm. Possible values include: 'PS256', 'PS384',
    +     'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256', 'ES384', 'ES512',
    +     'ES256K'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +    :param value: Required.
    +    :type value: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeySignParameters, self).__init__(**kwargs)
    +        self.algorithm = kwargs.get('algorithm', None)
    +        self.value = kwargs.get('value', None)
    +
    +
    +class KeyUpdateParameters(Model):
    +    """The key update parameters.
    +
    +    :param key_ops: Json web key operations. For more information on possible
    +     key operations, see JsonWebKeyOperation.
    +    :type key_ops: list[str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +    :param key_attributes:
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyUpdateParameters, self).__init__(**kwargs)
    +        self.key_ops = kwargs.get('key_ops', None)
    +        self.key_attributes = kwargs.get('key_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class KeyVaultError(Model):
    +    """The key vault error exception.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar error:
    +    :vartype error: ~azure.keyvault.v7_1.models.Error
    +    """
    +
    +    _validation = {
    +        'error': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'Error'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyVaultError, self).__init__(**kwargs)
    +        self.error = None
    +
    +
    +class KeyVaultErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'KeyVaultError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'KeyVaultError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(KeyVaultErrorException, self).__init__(response=response)
    +
    +
    +class KeyVerifyParameters(Model):
    +    """The key verify parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. The signing/verification algorithm. For more
    +     information on possible algorithm types, see JsonWebKeySignatureAlgorithm.
    +     Possible values include: 'PS256', 'PS384', 'PS512', 'RS256', 'RS384',
    +     'RS512', 'RSNULL', 'ES256', 'ES384', 'ES512', 'ES256K'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +    :param digest: Required. The digest used for signing.
    +    :type digest: bytes
    +    :param signature: Required. The signature to be verified.
    +    :type signature: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'digest': {'required': True},
    +        'signature': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'digest': {'key': 'digest', 'type': 'base64'},
    +        'signature': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyVerifyParameters, self).__init__(**kwargs)
    +        self.algorithm = kwargs.get('algorithm', None)
    +        self.digest = kwargs.get('digest', None)
    +        self.signature = kwargs.get('signature', None)
    +
    +
    +class KeyVerifyResult(Model):
    +    """The key verify result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: True if the signature is verified, otherwise false.
    +    :vartype value: bool
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyVerifyResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class LifetimeAction(Model):
    +    """Action and its trigger that will be performed by Key Vault over the
    +    lifetime of a certificate.
    +
    +    :param trigger: The condition that will execute the action.
    +    :type trigger: ~azure.keyvault.v7_1.models.Trigger
    +    :param action: The action that will be executed.
    +    :type action: ~azure.keyvault.v7_1.models.Action
    +    """
    +
    +    _attribute_map = {
    +        'trigger': {'key': 'trigger', 'type': 'Trigger'},
    +        'action': {'key': 'action', 'type': 'Action'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(LifetimeAction, self).__init__(**kwargs)
    +        self.trigger = kwargs.get('trigger', None)
    +        self.action = kwargs.get('action', None)
    +
    +
    +class OrganizationDetails(Model):
    +    """Details of the organization of the certificate issuer.
    +
    +    :param id: Id of the organization.
    +    :type id: str
    +    :param admin_details: Details of the organization administrator.
    +    :type admin_details:
    +     list[~azure.keyvault.v7_1.models.AdministratorDetails]
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'admin_details': {'key': 'admin_details', 'type': '[AdministratorDetails]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(OrganizationDetails, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.admin_details = kwargs.get('admin_details', None)
    +
    +
    +class PendingCertificateSigningRequestResult(Model):
    +    """The pending certificate signing request result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The pending certificate signing request as Base64 encoded
    +     string.
    +    :vartype value: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PendingCertificateSigningRequestResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class SasDefinitionAttributes(Model):
    +    """The SAS definition management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: the enabled state of the object.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for SAS definitions in the current vault. If it contains
    +     'Purgeable' the SAS definition can be permanently deleted by a privileged
    +     user; otherwise, only the system can purge the SAS definition, at the end
    +     of the retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionAttributes, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.created = None
    +        self.updated = None
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class SasDefinitionCreateParameters(Model):
    +    """The SAS definition create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param template_uri: Required. The SAS definition token template signed
    +     with an arbitrary key.  Tokens created according to the SAS definition
    +     will have the same properties as the template.
    +    :type template_uri: str
    +    :param sas_type: Required. The type of SAS token the SAS definition will
    +     create. Possible values include: 'account', 'service'
    +    :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :param validity_period: Required. The validity period of SAS tokens
    +     created according to the SAS definition.
    +    :type validity_period: str
    +    :param sas_definition_attributes: The attributes of the SAS definition.
    +    :type sas_definition_attributes:
    +     ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'template_uri': {'required': True},
    +        'sas_type': {'required': True},
    +        'validity_period': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'sas_definition_attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionCreateParameters, self).__init__(**kwargs)
    +        self.template_uri = kwargs.get('template_uri', None)
    +        self.sas_type = kwargs.get('sas_type', None)
    +        self.validity_period = kwargs.get('validity_period', None)
    +        self.sas_definition_attributes = kwargs.get('sas_definition_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class SasDefinitionListResult(Model):
    +    """The storage account SAS definition list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of SAS definitions along
    +     with a link to the next page of SAS definitions.
    +    :vartype value: list[~azure.keyvault.v7_1.models.SasDefinitionItem]
    +    :ivar next_link: The URL to get the next set of SAS definitions.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SasDefinitionItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SasDefinitionUpdateParameters(Model):
    +    """The SAS definition update parameters.
    +
    +    :param template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :type template_uri: str
    +    :param sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :param validity_period: The validity period of SAS tokens created
    +     according to the SAS definition.
    +    :type validity_period: str
    +    :param sas_definition_attributes: The attributes of the SAS definition.
    +    :type sas_definition_attributes:
    +     ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'sas_definition_attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionUpdateParameters, self).__init__(**kwargs)
    +        self.template_uri = kwargs.get('template_uri', None)
    +        self.sas_type = kwargs.get('sas_type', None)
    +        self.validity_period = kwargs.get('validity_period', None)
    +        self.sas_definition_attributes = kwargs.get('sas_definition_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class SecretAttributes(Attributes):
    +    """The secret management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for secrets in the current vault. If it contains 'Purgeable', the
    +     secret can be permanently deleted by a privileged user; otherwise, only
    +     the system can purge the secret, at the end of the retention interval.
    +     Possible values include: 'Purgeable', 'Recoverable+Purgeable',
    +     'Recoverable', 'Recoverable+ProtectedSubscription',
    +     'CustomizedRecoverable+Purgeable', 'CustomizedRecoverable',
    +     'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretAttributes, self).__init__(**kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class SecretListResult(Model):
    +    """The secret list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of secrets in the key
    +     vault along with a link to the next page of secrets.
    +    :vartype value: list[~azure.keyvault.v7_1.models.SecretItem]
    +    :ivar next_link: The URL to get the next set of secrets.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SecretItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SecretProperties(Model):
    +    """Properties of the key backing a certificate.
    +
    +    :param content_type: The media type (MIME type).
    +    :type content_type: str
    +    """
    +
    +    _attribute_map = {
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretProperties, self).__init__(**kwargs)
    +        self.content_type = kwargs.get('content_type', None)
    +
    +
    +class SecretRestoreParameters(Model):
    +    """The secret restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param secret_bundle_backup: Required. The backup blob associated with a
    +     secret bundle.
    +    :type secret_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'secret_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'secret_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretRestoreParameters, self).__init__(**kwargs)
    +        self.secret_bundle_backup = kwargs.get('secret_bundle_backup', None)
    +
    +
    +class SecretSetParameters(Model):
    +    """The secret set parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param value: Required. The value of the secret.
    +    :type value: str
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :param secret_attributes: The secret management attributes.
    +    :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    """
    +
    +    _validation = {
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretSetParameters, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.secret_attributes = kwargs.get('secret_attributes', None)
    +
    +
    +class SecretUpdateParameters(Model):
    +    """The secret update parameters.
    +
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :param secret_attributes: The secret management attributes.
    +    :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretUpdateParameters, self).__init__(**kwargs)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.secret_attributes = kwargs.get('secret_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class StorageAccountAttributes(Model):
    +    """The storage account management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: the enabled state of the object.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for storage accounts in the current vault. If it contains
    +     'Purgeable' the storage account can be permanently deleted by a privileged
    +     user; otherwise, only the system can purge the storage account, at the end
    +     of the retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountAttributes, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.created = None
    +        self.updated = None
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class StorageAccountCreateParameters(Model):
    +    """The storage account create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param resource_id: Required. Storage account resource id.
    +    :type resource_id: str
    +    :param active_key_name: Required. Current active storage account key name.
    +    :type active_key_name: str
    +    :param auto_regenerate_key: Required. whether keyvault should manage the
    +     storage account for the user.
    +    :type auto_regenerate_key: bool
    +    :param regeneration_period: The key regeneration time duration specified
    +     in ISO-8601 format.
    +    :type regeneration_period: str
    +    :param storage_account_attributes: The attributes of the storage account.
    +    :type storage_account_attributes:
    +     ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'resource_id': {'required': True},
    +        'active_key_name': {'required': True},
    +        'auto_regenerate_key': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'storage_account_attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountCreateParameters, self).__init__(**kwargs)
    +        self.resource_id = kwargs.get('resource_id', None)
    +        self.active_key_name = kwargs.get('active_key_name', None)
    +        self.auto_regenerate_key = kwargs.get('auto_regenerate_key', None)
    +        self.regeneration_period = kwargs.get('regeneration_period', None)
    +        self.storage_account_attributes = kwargs.get('storage_account_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class StorageAccountRegenerteKeyParameters(Model):
    +    """The storage account key regenerate parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_name: Required. The storage account key name.
    +    :type key_name: str
    +    """
    +
    +    _validation = {
    +        'key_name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_name': {'key': 'keyName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountRegenerteKeyParameters, self).__init__(**kwargs)
    +        self.key_name = kwargs.get('key_name', None)
    +
    +
    +class StorageAccountUpdateParameters(Model):
    +    """The storage account update parameters.
    +
    +    :param active_key_name: The current active storage account key name.
    +    :type active_key_name: str
    +    :param auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :type auto_regenerate_key: bool
    +    :param regeneration_period: The key regeneration time duration specified
    +     in ISO-8601 format.
    +    :type regeneration_period: str
    +    :param storage_account_attributes: The attributes of the storage account.
    +    :type storage_account_attributes:
    +     ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'storage_account_attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountUpdateParameters, self).__init__(**kwargs)
    +        self.active_key_name = kwargs.get('active_key_name', None)
    +        self.auto_regenerate_key = kwargs.get('auto_regenerate_key', None)
    +        self.regeneration_period = kwargs.get('regeneration_period', None)
    +        self.storage_account_attributes = kwargs.get('storage_account_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class StorageListResult(Model):
    +    """The storage accounts list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of storage accounts in
    +     the key vault along with a link to the next page of storage accounts.
    +    :vartype value: list[~azure.keyvault.v7_1.models.StorageAccountItem]
    +    :ivar next_link: The URL to get the next set of storage accounts.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[StorageAccountItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class StorageRestoreParameters(Model):
    +    """The secret restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param storage_bundle_backup: Required. The backup blob associated with a
    +     storage account.
    +    :type storage_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'storage_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'storage_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageRestoreParameters, self).__init__(**kwargs)
    +        self.storage_bundle_backup = kwargs.get('storage_bundle_backup', None)
    +
    +
    +class SubjectAlternativeNames(Model):
    +    """The subject alternate names of a X509 object.
    +
    +    :param emails: Email addresses.
    +    :type emails: list[str]
    +    :param dns_names: Domain names.
    +    :type dns_names: list[str]
    +    :param upns: User principal names.
    +    :type upns: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'emails': {'key': 'emails', 'type': '[str]'},
    +        'dns_names': {'key': 'dns_names', 'type': '[str]'},
    +        'upns': {'key': 'upns', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SubjectAlternativeNames, self).__init__(**kwargs)
    +        self.emails = kwargs.get('emails', None)
    +        self.dns_names = kwargs.get('dns_names', None)
    +        self.upns = kwargs.get('upns', None)
    +
    +
    +class Trigger(Model):
    +    """A condition to be satisfied for an action to be executed.
    +
    +    :param lifetime_percentage: Percentage of lifetime at which to trigger.
    +     Value should be between 1 and 99.
    +    :type lifetime_percentage: int
    +    :param days_before_expiry: Days before expiry to attempt renewal. Value
    +     should be between 1 and validity_in_months multiplied by 27. If
    +     validity_in_months is 36, then value should be between 1 and 972 (36 *
    +     27).
    +    :type days_before_expiry: int
    +    """
    +
    +    _validation = {
    +        'lifetime_percentage': {'maximum': 99, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lifetime_percentage': {'key': 'lifetime_percentage', 'type': 'int'},
    +        'days_before_expiry': {'key': 'days_before_expiry', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Trigger, self).__init__(**kwargs)
    +        self.lifetime_percentage = kwargs.get('lifetime_percentage', None)
    +        self.days_before_expiry = kwargs.get('days_before_expiry', None)
    +
    +
    +class X509CertificateProperties(Model):
    +    """Properties of the X509 component of a certificate.
    +
    +    :param subject: The subject name. Should be a valid X509 distinguished
    +     Name.
    +    :type subject: str
    +    :param ekus: The enhanced key usage.
    +    :type ekus: list[str]
    +    :param subject_alternative_names: The subject alternative names.
    +    :type subject_alternative_names:
    +     ~azure.keyvault.v7_1.models.SubjectAlternativeNames
    +    :param key_usage: List of key usages.
    +    :type key_usage: list[str or ~azure.keyvault.v7_1.models.KeyUsageType]
    +    :param validity_in_months: The duration that the certificate is valid in
    +     months.
    +    :type validity_in_months: int
    +    """
    +
    +    _validation = {
    +        'validity_in_months': {'minimum': 0},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'ekus': {'key': 'ekus', 'type': '[str]'},
    +        'subject_alternative_names': {'key': 'sans', 'type': 'SubjectAlternativeNames'},
    +        'key_usage': {'key': 'key_usage', 'type': '[str]'},
    +        'validity_in_months': {'key': 'validity_months', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(X509CertificateProperties, self).__init__(**kwargs)
    +        self.subject = kwargs.get('subject', None)
    +        self.ekus = kwargs.get('ekus', None)
    +        self.subject_alternative_names = kwargs.get('subject_alternative_names', None)
    +        self.key_usage = kwargs.get('key_usage', None)
    +        self.validity_in_months = kwargs.get('validity_in_months', None)
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/models/_models_py3.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/models/_models_py3.py
    new file mode 100644
    index 000000000000..b57835037d85
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/models/_models_py3.py
    @@ -0,0 +1,3244 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from azure.core.exceptions import HttpResponseError
    +
    +
    +class Action(Model):
    +    """The action that will be executed.
    +
    +    :param action_type: The type of the action. Possible values include:
    +     'EmailContacts', 'AutoRenew'
    +    :type action_type: str or ~azure.keyvault.v7_1.models.ActionType
    +    """
    +
    +    _attribute_map = {
    +        'action_type': {'key': 'action_type', 'type': 'ActionType'},
    +    }
    +
    +    def __init__(self, *, action_type=None, **kwargs) -> None:
    +        super(Action, self).__init__(**kwargs)
    +        self.action_type = action_type
    +
    +
    +class AdministratorDetails(Model):
    +    """Details of the organization administrator of the certificate issuer.
    +
    +    :param first_name: First name.
    +    :type first_name: str
    +    :param last_name: Last name.
    +    :type last_name: str
    +    :param email_address: Email address.
    +    :type email_address: str
    +    :param phone: Phone number.
    +    :type phone: str
    +    """
    +
    +    _attribute_map = {
    +        'first_name': {'key': 'first_name', 'type': 'str'},
    +        'last_name': {'key': 'last_name', 'type': 'str'},
    +        'email_address': {'key': 'email', 'type': 'str'},
    +        'phone': {'key': 'phone', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, first_name: str=None, last_name: str=None, email_address: str=None, phone: str=None, **kwargs) -> None:
    +        super(AdministratorDetails, self).__init__(**kwargs)
    +        self.first_name = first_name
    +        self.last_name = last_name
    +        self.email_address = email_address
    +        self.phone = phone
    +
    +
    +class Attributes(Model):
    +    """The object attributes managed by the KeyVault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, not_before=None, expires=None, **kwargs) -> None:
    +        super(Attributes, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.not_before = not_before
    +        self.expires = expires
    +        self.created = None
    +        self.updated = None
    +
    +
    +class BackupCertificateResult(Model):
    +    """The backup certificate result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up certificate.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(BackupCertificateResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupKeyResult(Model):
    +    """The backup key result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up key.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(BackupKeyResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupSecretResult(Model):
    +    """The backup secret result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up secret.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(BackupSecretResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupStorageResult(Model):
    +    """The backup storage result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up storage account.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(BackupStorageResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class CertificateAttributes(Attributes):
    +    """The certificate management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for certificates in the current vault. If it contains 'Purgeable',
    +     the certificate can be permanently deleted by a privileged user;
    +     otherwise, only the system can purge the certificate, at the end of the
    +     retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, not_before=None, expires=None, **kwargs) -> None:
    +        super(CertificateAttributes, self).__init__(enabled=enabled, not_before=not_before, expires=expires, **kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class CertificateBundle(Model):
    +    """A certificate bundle consists of a certificate (X509) plus its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :ivar kid: The key id.
    +    :vartype kid: str
    +    :ivar sid: The secret id.
    +    :vartype sid: str
    +    :ivar x509_thumbprint: Thumbprint of the certificate.
    +    :vartype x509_thumbprint: bytes
    +    :ivar policy: The management policy.
    +    :vartype policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param cer: CER contents of x509 certificate.
    +    :type cer: bytearray
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'kid': {'readonly': True},
    +        'sid': {'readonly': True},
    +        'x509_thumbprint': {'readonly': True},
    +        'policy': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'sid': {'key': 'sid', 'type': 'str'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'cer': {'key': 'cer', 'type': 'bytearray'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, cer: bytearray=None, content_type: str=None, attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.kid = None
    +        self.sid = None
    +        self.x509_thumbprint = None
    +        self.policy = None
    +        self.cer = cer
    +        self.content_type = content_type
    +        self.attributes = attributes
    +        self.tags = tags
    +
    +
    +class CertificateCreateParameters(Model):
    +    """The certificate create parameters.
    +
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, certificate_policy=None, certificate_attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateCreateParameters, self).__init__(**kwargs)
    +        self.certificate_policy = certificate_policy
    +        self.certificate_attributes = certificate_attributes
    +        self.tags = tags
    +
    +
    +class CertificateImportParameters(Model):
    +    """The certificate import parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param base64_encoded_certificate: Required. Base64 encoded representation
    +     of the certificate object to import. This certificate needs to contain the
    +     private key.
    +    :type base64_encoded_certificate: str
    +    :param password: If the private key in base64EncodedCertificate is
    +     encrypted, the password used for encryption.
    +    :type password: str
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'base64_encoded_certificate': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'base64_encoded_certificate': {'key': 'value', 'type': 'str'},
    +        'password': {'key': 'pwd', 'type': 'str'},
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, base64_encoded_certificate: str, password: str=None, certificate_policy=None, certificate_attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateImportParameters, self).__init__(**kwargs)
    +        self.base64_encoded_certificate = base64_encoded_certificate
    +        self.password = password
    +        self.certificate_policy = certificate_policy
    +        self.certificate_attributes = certificate_attributes
    +        self.tags = tags
    +
    +
    +class CertificateIssuerItem(Model):
    +    """The certificate issuer item containing certificate issuer metadata.
    +
    +    :param id: Certificate Identifier.
    +    :type id: str
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'provider': {'key': 'provider', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, id: str=None, provider: str=None, **kwargs) -> None:
    +        super(CertificateIssuerItem, self).__init__(**kwargs)
    +        self.id = id
    +        self.provider = provider
    +
    +
    +class CertificateIssuerListResult(Model):
    +    """The certificate issuer list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of certificate issuers
    +     in the key vault along with a link to the next page of certificate
    +     issuers.
    +    :vartype value: list[~azure.keyvault.v7_1.models.CertificateIssuerItem]
    +    :ivar next_link: The URL to get the next set of certificate issuers.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateIssuerItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(CertificateIssuerListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class CertificateIssuerSetParameters(Model):
    +    """The certificate issuer set parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param provider: Required. The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _validation = {
    +        'provider': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, *, provider: str, credentials=None, organization_details=None, attributes=None, **kwargs) -> None:
    +        super(CertificateIssuerSetParameters, self).__init__(**kwargs)
    +        self.provider = provider
    +        self.credentials = credentials
    +        self.organization_details = organization_details
    +        self.attributes = attributes
    +
    +
    +class CertificateIssuerUpdateParameters(Model):
    +    """The certificate issuer update parameters.
    +
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, *, provider: str=None, credentials=None, organization_details=None, attributes=None, **kwargs) -> None:
    +        super(CertificateIssuerUpdateParameters, self).__init__(**kwargs)
    +        self.provider = provider
    +        self.credentials = credentials
    +        self.organization_details = organization_details
    +        self.attributes = attributes
    +
    +
    +class CertificateItem(Model):
    +    """The certificate item containing certificate metadata.
    +
    +    :param id: Certificate identifier.
    +    :type id: str
    +    :param attributes: The certificate management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param x509_thumbprint: Thumbprint of the certificate.
    +    :type x509_thumbprint: bytes
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, id: str=None, attributes=None, tags=None, x509_thumbprint: bytes=None, **kwargs) -> None:
    +        super(CertificateItem, self).__init__(**kwargs)
    +        self.id = id
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.x509_thumbprint = x509_thumbprint
    +
    +
    +class CertificateListResult(Model):
    +    """The certificate list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of certificates in the
    +     key vault along with a link to the next page of certificates.
    +    :vartype value: list[~azure.keyvault.v7_1.models.CertificateItem]
    +    :ivar next_link: The URL to get the next set of certificates.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(CertificateListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class CertificateMergeParameters(Model):
    +    """The certificate merge parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param x509_certificates: Required. The certificate or the certificate
    +     chain to merge.
    +    :type x509_certificates: list[bytearray]
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'x509_certificates': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'x509_certificates': {'key': 'x5c', 'type': '[bytearray]'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, x509_certificates, certificate_attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateMergeParameters, self).__init__(**kwargs)
    +        self.x509_certificates = x509_certificates
    +        self.certificate_attributes = certificate_attributes
    +        self.tags = tags
    +
    +
    +class CertificateOperation(Model):
    +    """A certificate operation is returned in case of asynchronous requests.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :param issuer_parameters: Parameters for the issuer of the X509 component
    +     of a certificate.
    +    :type issuer_parameters: ~azure.keyvault.v7_1.models.IssuerParameters
    +    :param csr: The certificate signing request (CSR) that is being used in
    +     the certificate operation.
    +    :type csr: bytearray
    +    :param cancellation_requested: Indicates if cancellation was requested on
    +     the certificate operation.
    +    :type cancellation_requested: bool
    +    :param status: Status of the certificate operation.
    +    :type status: str
    +    :param status_details: The status details of the certificate operation.
    +    :type status_details: str
    +    :param error: Error encountered, if any, during the certificate operation.
    +    :type error: ~azure.keyvault.v7_1.models.Error
    +    :param target: Location which contains the result of the certificate
    +     operation.
    +    :type target: str
    +    :param request_id: Identifier for the certificate operation.
    +    :type request_id: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'},
    +        'csr': {'key': 'csr', 'type': 'bytearray'},
    +        'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'},
    +        'status': {'key': 'status', 'type': 'str'},
    +        'status_details': {'key': 'status_details', 'type': 'str'},
    +        'error': {'key': 'error', 'type': 'Error'},
    +        'target': {'key': 'target', 'type': 'str'},
    +        'request_id': {'key': 'request_id', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, issuer_parameters=None, csr: bytearray=None, cancellation_requested: bool=None, status: str=None, status_details: str=None, error=None, target: str=None, request_id: str=None, **kwargs) -> None:
    +        super(CertificateOperation, self).__init__(**kwargs)
    +        self.id = None
    +        self.issuer_parameters = issuer_parameters
    +        self.csr = csr
    +        self.cancellation_requested = cancellation_requested
    +        self.status = status
    +        self.status_details = status_details
    +        self.error = error
    +        self.target = target
    +        self.request_id = request_id
    +
    +
    +class CertificateOperationUpdateParameter(Model):
    +    """The certificate operation update parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param cancellation_requested: Required. Indicates if cancellation was
    +     requested on the certificate operation.
    +    :type cancellation_requested: bool
    +    """
    +
    +    _validation = {
    +        'cancellation_requested': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, cancellation_requested: bool, **kwargs) -> None:
    +        super(CertificateOperationUpdateParameter, self).__init__(**kwargs)
    +        self.cancellation_requested = cancellation_requested
    +
    +
    +class CertificatePolicy(Model):
    +    """Management policy for a certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :param key_properties: Properties of the key backing a certificate.
    +    :type key_properties: ~azure.keyvault.v7_1.models.KeyProperties
    +    :param secret_properties: Properties of the secret backing a certificate.
    +    :type secret_properties: ~azure.keyvault.v7_1.models.SecretProperties
    +    :param x509_certificate_properties: Properties of the X509 component of a
    +     certificate.
    +    :type x509_certificate_properties:
    +     ~azure.keyvault.v7_1.models.X509CertificateProperties
    +    :param lifetime_actions: Actions that will be performed by Key Vault over
    +     the lifetime of a certificate.
    +    :type lifetime_actions: list[~azure.keyvault.v7_1.models.LifetimeAction]
    +    :param issuer_parameters: Parameters for the issuer of the X509 component
    +     of a certificate.
    +    :type issuer_parameters: ~azure.keyvault.v7_1.models.IssuerParameters
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'key_properties': {'key': 'key_props', 'type': 'KeyProperties'},
    +        'secret_properties': {'key': 'secret_props', 'type': 'SecretProperties'},
    +        'x509_certificate_properties': {'key': 'x509_props', 'type': 'X509CertificateProperties'},
    +        'lifetime_actions': {'key': 'lifetime_actions', 'type': '[LifetimeAction]'},
    +        'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +    }
    +
    +    def __init__(self, *, key_properties=None, secret_properties=None, x509_certificate_properties=None, lifetime_actions=None, issuer_parameters=None, attributes=None, **kwargs) -> None:
    +        super(CertificatePolicy, self).__init__(**kwargs)
    +        self.id = None
    +        self.key_properties = key_properties
    +        self.secret_properties = secret_properties
    +        self.x509_certificate_properties = x509_certificate_properties
    +        self.lifetime_actions = lifetime_actions
    +        self.issuer_parameters = issuer_parameters
    +        self.attributes = attributes
    +
    +
    +class CertificateRestoreParameters(Model):
    +    """The certificate restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param certificate_bundle_backup: Required. The backup blob associated
    +     with a certificate bundle.
    +    :type certificate_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'certificate_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'certificate_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, certificate_bundle_backup: bytes, **kwargs) -> None:
    +        super(CertificateRestoreParameters, self).__init__(**kwargs)
    +        self.certificate_bundle_backup = certificate_bundle_backup
    +
    +
    +class CertificateUpdateParameters(Model):
    +    """The certificate update parameters.
    +
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, certificate_policy=None, certificate_attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateUpdateParameters, self).__init__(**kwargs)
    +        self.certificate_policy = certificate_policy
    +        self.certificate_attributes = certificate_attributes
    +        self.tags = tags
    +
    +
    +class Contact(Model):
    +    """The contact information for the vault certificates.
    +
    +    :param email_address: Email address.
    +    :type email_address: str
    +    :param name: Name.
    +    :type name: str
    +    :param phone: Phone number.
    +    :type phone: str
    +    """
    +
    +    _attribute_map = {
    +        'email_address': {'key': 'email', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'phone': {'key': 'phone', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, email_address: str=None, name: str=None, phone: str=None, **kwargs) -> None:
    +        super(Contact, self).__init__(**kwargs)
    +        self.email_address = email_address
    +        self.name = name
    +        self.phone = phone
    +
    +
    +class Contacts(Model):
    +    """The contacts for the vault certificates.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Identifier for the contacts collection.
    +    :vartype id: str
    +    :param contact_list: The contact list for the vault certificates.
    +    :type contact_list: list[~azure.keyvault.v7_1.models.Contact]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'contact_list': {'key': 'contacts', 'type': '[Contact]'},
    +    }
    +
    +    def __init__(self, *, contact_list=None, **kwargs) -> None:
    +        super(Contacts, self).__init__(**kwargs)
    +        self.id = None
    +        self.contact_list = contact_list
    +
    +
    +class DeletedCertificateBundle(CertificateBundle):
    +    """A Deleted Certificate consisting of its previous id, attributes and its
    +    tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :ivar kid: The key id.
    +    :vartype kid: str
    +    :ivar sid: The secret id.
    +    :vartype sid: str
    +    :ivar x509_thumbprint: Thumbprint of the certificate.
    +    :vartype x509_thumbprint: bytes
    +    :ivar policy: The management policy.
    +    :vartype policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param cer: CER contents of x509 certificate.
    +    :type cer: bytearray
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs
    +    :type tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted certificate.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the certificate is scheduled to
    +     be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the certificate was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'kid': {'readonly': True},
    +        'sid': {'readonly': True},
    +        'x509_thumbprint': {'readonly': True},
    +        'policy': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'sid': {'key': 'sid', 'type': 'str'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'cer': {'key': 'cer', 'type': 'bytearray'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, cer: bytearray=None, content_type: str=None, attributes=None, tags=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedCertificateBundle, self).__init__(cer=cer, content_type=content_type, attributes=attributes, tags=tags, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedCertificateItem(CertificateItem):
    +    """The deleted certificate item containing metadata about the deleted
    +    certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Certificate identifier.
    +    :type id: str
    +    :param attributes: The certificate management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param x509_thumbprint: Thumbprint of the certificate.
    +    :type x509_thumbprint: bytes
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted certificate.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the certificate is scheduled to
    +     be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the certificate was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, id: str=None, attributes=None, tags=None, x509_thumbprint: bytes=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedCertificateItem, self).__init__(id=id, attributes=attributes, tags=tags, x509_thumbprint=x509_thumbprint, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedCertificateListResult(Model):
    +    """A list of certificates that have been deleted in this vault.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of deleted certificates
    +     in the vault along with a link to the next page of deleted certificates
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedCertificateItem]
    +    :ivar next_link: The URL to get the next set of deleted certificates.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedCertificateItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedCertificateListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class KeyBundle(Model):
    +    """A KeyBundle consisting of a WebKey plus its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param key: The Json web key.
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, key=None, attributes=None, tags=None, **kwargs) -> None:
    +        super(KeyBundle, self).__init__(**kwargs)
    +        self.key = key
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.managed = None
    +
    +
    +class DeletedKeyBundle(KeyBundle):
    +    """A DeletedKeyBundle consisting of a WebKey plus its Attributes and deletion
    +    info.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param key: The Json web key.
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted key.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the key is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the key was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, key=None, attributes=None, tags=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedKeyBundle, self).__init__(key=key, attributes=attributes, tags=tags, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class KeyItem(Model):
    +    """The key item containing key metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, kid: str=None, attributes=None, tags=None, **kwargs) -> None:
    +        super(KeyItem, self).__init__(**kwargs)
    +        self.kid = kid
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.managed = None
    +
    +
    +class DeletedKeyItem(KeyItem):
    +    """The deleted key item containing the deleted key metadata and information
    +    about deletion.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted key.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the key is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the key was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, kid: str=None, attributes=None, tags=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedKeyItem, self).__init__(kid=kid, attributes=attributes, tags=tags, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedKeyListResult(Model):
    +    """A list of keys that have been deleted in this vault.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of deleted keys in the
    +     vault along with a link to the next page of deleted keys
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedKeyItem]
    +    :ivar next_link: The URL to get the next set of deleted keys.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedKeyItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedKeyListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SasDefinitionBundle(Model):
    +    """A SAS definition bundle consists of key vault SAS definition details plus
    +    its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The SAS definition id.
    +    :vartype id: str
    +    :ivar secret_id: Storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :vartype template_uri: str
    +    :ivar sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :vartype sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :ivar validity_period: The validity period of SAS tokens created according
    +     to the SAS definition.
    +    :vartype validity_period: str
    +    :ivar attributes: The SAS definition attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'template_uri': {'readonly': True},
    +        'sas_type': {'readonly': True},
    +        'validity_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(SasDefinitionBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.secret_id = None
    +        self.template_uri = None
    +        self.sas_type = None
    +        self.validity_period = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedSasDefinitionBundle(SasDefinitionBundle):
    +    """A deleted SAS definition bundle consisting of its previous id, attributes
    +    and its tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The SAS definition id.
    +    :vartype id: str
    +    :ivar secret_id: Storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :vartype template_uri: str
    +    :ivar sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :vartype sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :ivar validity_period: The validity period of SAS tokens created according
    +     to the SAS definition.
    +    :vartype validity_period: str
    +    :ivar attributes: The SAS definition attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted SAS definition.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the SAS definition is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the SAS definition was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'template_uri': {'readonly': True},
    +        'sas_type': {'readonly': True},
    +        'validity_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedSasDefinitionBundle, self).__init__(**kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class SasDefinitionItem(Model):
    +    """The SAS definition item containing storage SAS definition metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage SAS identifier.
    +    :vartype id: str
    +    :ivar secret_id: The storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar attributes: The SAS definition management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(SasDefinitionItem, self).__init__(**kwargs)
    +        self.id = None
    +        self.secret_id = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedSasDefinitionItem(SasDefinitionItem):
    +    """The deleted SAS definition item containing metadata about the deleted SAS
    +    definition.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage SAS identifier.
    +    :vartype id: str
    +    :ivar secret_id: The storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar attributes: The SAS definition management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted SAS definition.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the SAS definition is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the SAS definition was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedSasDefinitionItem, self).__init__(**kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedSasDefinitionListResult(Model):
    +    """The deleted SAS definition list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted SAS
    +     definitions in the vault along with a link to the next page of deleted sas
    +     definitions
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedSasDefinitionItem]
    +    :ivar next_link: The URL to get the next set of deleted SAS definitions.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedSasDefinitionItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedSasDefinitionListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SecretBundle(Model):
    +    """A secret consisting of a value, id and its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value: The secret value.
    +    :type value: str
    +    :param id: The secret id.
    +    :type id: str
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar kid: If this is a secret backing a KV certificate, then this field
    +     specifies the corresponding key backing the KV certificate.
    +    :vartype kid: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a secret backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, value: str=None, id: str=None, content_type: str=None, attributes=None, tags=None, **kwargs) -> None:
    +        super(SecretBundle, self).__init__(**kwargs)
    +        self.value = value
    +        self.id = id
    +        self.content_type = content_type
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.kid = None
    +        self.managed = None
    +
    +
    +class DeletedSecretBundle(SecretBundle):
    +    """A Deleted Secret consisting of its previous id, attributes and its tags, as
    +    well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value: The secret value.
    +    :type value: str
    +    :param id: The secret id.
    +    :type id: str
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar kid: If this is a secret backing a KV certificate, then this field
    +     specifies the corresponding key backing the KV certificate.
    +    :vartype kid: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a secret backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted secret.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the secret is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the secret was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, value: str=None, id: str=None, content_type: str=None, attributes=None, tags=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedSecretBundle, self).__init__(value=value, id=id, content_type=content_type, attributes=attributes, tags=tags, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class SecretItem(Model):
    +    """The secret item containing secret metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Secret identifier.
    +    :type id: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, id: str=None, attributes=None, tags=None, content_type: str=None, **kwargs) -> None:
    +        super(SecretItem, self).__init__(**kwargs)
    +        self.id = id
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.content_type = content_type
    +        self.managed = None
    +
    +
    +class DeletedSecretItem(SecretItem):
    +    """The deleted secret item containing metadata about the deleted secret.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Secret identifier.
    +    :type id: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted secret.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the secret is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the secret was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, id: str=None, attributes=None, tags=None, content_type: str=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedSecretItem, self).__init__(id=id, attributes=attributes, tags=tags, content_type=content_type, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedSecretListResult(Model):
    +    """The deleted secret list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted secrets
    +     in the vault along with a link to the next page of deleted secrets
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedSecretItem]
    +    :ivar next_link: The URL to get the next set of deleted secrets.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedSecretItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedSecretListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class StorageAccountItem(Model):
    +    """The storage account item containing storage account metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Storage identifier.
    +    :vartype id: str
    +    :ivar resource_id: Storage account resource Id.
    +    :vartype resource_id: str
    +    :ivar attributes: The storage account management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(StorageAccountItem, self).__init__(**kwargs)
    +        self.id = None
    +        self.resource_id = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedStorageAccountItem(StorageAccountItem):
    +    """The deleted storage account item containing metadata about the deleted
    +    storage account.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Storage identifier.
    +    :vartype id: str
    +    :ivar resource_id: Storage account resource Id.
    +    :vartype resource_id: str
    +    :ivar attributes: The storage account management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted storage account.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the storage account is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the storage account was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedStorageAccountItem, self).__init__(**kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class StorageBundle(Model):
    +    """A Storage account bundle consists of key vault storage account details plus
    +    its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage account id.
    +    :vartype id: str
    +    :ivar resource_id: The storage account resource id.
    +    :vartype resource_id: str
    +    :ivar active_key_name: The current active storage account key name.
    +    :vartype active_key_name: str
    +    :ivar auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :vartype auto_regenerate_key: bool
    +    :ivar regeneration_period: The key regeneration time duration specified in
    +     ISO-8601 format.
    +    :vartype regeneration_period: str
    +    :ivar attributes: The storage account attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'active_key_name': {'readonly': True},
    +        'auto_regenerate_key': {'readonly': True},
    +        'regeneration_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(StorageBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.resource_id = None
    +        self.active_key_name = None
    +        self.auto_regenerate_key = None
    +        self.regeneration_period = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedStorageBundle(StorageBundle):
    +    """A deleted storage account bundle consisting of its previous id, attributes
    +    and its tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage account id.
    +    :vartype id: str
    +    :ivar resource_id: The storage account resource id.
    +    :vartype resource_id: str
    +    :ivar active_key_name: The current active storage account key name.
    +    :vartype active_key_name: str
    +    :ivar auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :vartype auto_regenerate_key: bool
    +    :ivar regeneration_period: The key regeneration time duration specified in
    +     ISO-8601 format.
    +    :vartype regeneration_period: str
    +    :ivar attributes: The storage account attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted storage account.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the storage account is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the storage account was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'active_key_name': {'readonly': True},
    +        'auto_regenerate_key': {'readonly': True},
    +        'regeneration_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedStorageBundle, self).__init__(**kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedStorageListResult(Model):
    +    """The deleted storage account list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted storage
    +     accounts in the vault along with a link to the next page of deleted
    +     storage accounts
    +    :vartype value:
    +     list[~azure.keyvault.v7_1.models.DeletedStorageAccountItem]
    +    :ivar next_link: The URL to get the next set of deleted storage accounts.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedStorageAccountItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedStorageListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class Error(Model):
    +    """The key vault server error.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: The error code.
    +    :vartype code: str
    +    :ivar message: The error message.
    +    :vartype message: str
    +    :ivar inner_error:
    +    :vartype inner_error: ~azure.keyvault.v7_1.models.Error
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'inner_error': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'inner_error': {'key': 'innererror', 'type': 'Error'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(Error, self).__init__(**kwargs)
    +        self.code = None
    +        self.message = None
    +        self.inner_error = None
    +
    +
    +class IssuerAttributes(Model):
    +    """The attributes of an issuer managed by the Key Vault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the issuer is enabled.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
    +        super(IssuerAttributes, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.created = None
    +        self.updated = None
    +
    +
    +class IssuerBundle(Model):
    +    """The issuer for Key Vault certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Identifier for the issuer object.
    +    :vartype id: str
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, *, provider: str=None, credentials=None, organization_details=None, attributes=None, **kwargs) -> None:
    +        super(IssuerBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.provider = provider
    +        self.credentials = credentials
    +        self.organization_details = organization_details
    +        self.attributes = attributes
    +
    +
    +class IssuerCredentials(Model):
    +    """The credentials to be used for the certificate issuer.
    +
    +    :param account_id: The user name/account name/account id.
    +    :type account_id: str
    +    :param password: The password/secret/account key.
    +    :type password: str
    +    """
    +
    +    _attribute_map = {
    +        'account_id': {'key': 'account_id', 'type': 'str'},
    +        'password': {'key': 'pwd', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, account_id: str=None, password: str=None, **kwargs) -> None:
    +        super(IssuerCredentials, self).__init__(**kwargs)
    +        self.account_id = account_id
    +        self.password = password
    +
    +
    +class IssuerParameters(Model):
    +    """Parameters for the issuer of the X509 component of a certificate.
    +
    +    :param name: Name of the referenced issuer object or reserved names; for
    +     example, 'Self' or 'Unknown'.
    +    :type name: str
    +    :param certificate_type: Certificate type as supported by the provider
    +     (optional); for example 'OV-SSL', 'EV-SSL'
    +    :type certificate_type: str
    +    :param certificate_transparency: Indicates if the certificates generated
    +     under this policy should be published to certificate transparency logs.
    +    :type certificate_transparency: bool
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'certificate_type': {'key': 'cty', 'type': 'str'},
    +        'certificate_transparency': {'key': 'cert_transparency', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, name: str=None, certificate_type: str=None, certificate_transparency: bool=None, **kwargs) -> None:
    +        super(IssuerParameters, self).__init__(**kwargs)
    +        self.name = name
    +        self.certificate_type = certificate_type
    +        self.certificate_transparency = certificate_transparency
    +
    +
    +class JsonWebKey(Model):
    +    """As of http://tools.ietf.org/html/draft-ietf-jose-json-web-key-18.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param kty: JsonWebKey Key Type (kty), as defined in
    +     https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40.
    +     Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'
    +    :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_ops:
    +    :type key_ops: list[str]
    +    :param n: RSA modulus.
    +    :type n: bytes
    +    :param e: RSA public exponent.
    +    :type e: bytes
    +    :param d: RSA private exponent, or the D component of an EC private key.
    +    :type d: bytes
    +    :param dp: RSA private key parameter.
    +    :type dp: bytes
    +    :param dq: RSA private key parameter.
    +    :type dq: bytes
    +    :param qi: RSA private key parameter.
    +    :type qi: bytes
    +    :param p: RSA secret prime.
    +    :type p: bytes
    +    :param q: RSA secret prime, with p < q.
    +    :type q: bytes
    +    :param k: Symmetric key.
    +    :type k: bytes
    +    :param t: HSM Token, used with 'Bring Your Own Key'.
    +    :type t: bytes
    +    :param crv: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type crv: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    :param x: X component of an EC public key.
    +    :type x: bytes
    +    :param y: Y component of an EC public key.
    +    :type y: bytes
    +    """
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'kty': {'key': 'kty', 'type': 'str'},
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'n': {'key': 'n', 'type': 'base64'},
    +        'e': {'key': 'e', 'type': 'base64'},
    +        'd': {'key': 'd', 'type': 'base64'},
    +        'dp': {'key': 'dp', 'type': 'base64'},
    +        'dq': {'key': 'dq', 'type': 'base64'},
    +        'qi': {'key': 'qi', 'type': 'base64'},
    +        'p': {'key': 'p', 'type': 'base64'},
    +        'q': {'key': 'q', 'type': 'base64'},
    +        'k': {'key': 'k', 'type': 'base64'},
    +        't': {'key': 'key_hsm', 'type': 'base64'},
    +        'crv': {'key': 'crv', 'type': 'str'},
    +        'x': {'key': 'x', 'type': 'base64'},
    +        'y': {'key': 'y', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, kid: str=None, kty=None, key_ops=None, n: bytes=None, e: bytes=None, d: bytes=None, dp: bytes=None, dq: bytes=None, qi: bytes=None, p: bytes=None, q: bytes=None, k: bytes=None, t: bytes=None, crv=None, x: bytes=None, y: bytes=None, **kwargs) -> None:
    +        super(JsonWebKey, self).__init__(**kwargs)
    +        self.kid = kid
    +        self.kty = kty
    +        self.key_ops = key_ops
    +        self.n = n
    +        self.e = e
    +        self.d = d
    +        self.dp = dp
    +        self.dq = dq
    +        self.qi = qi
    +        self.p = p
    +        self.q = q
    +        self.k = k
    +        self.t = t
    +        self.crv = crv
    +        self.x = x
    +        self.y = y
    +
    +
    +class KeyAttributes(Attributes):
    +    """The attributes of a key managed by the key vault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for keys in the current vault. If it contains 'Purgeable' the key
    +     can be permanently deleted by a privileged user; otherwise, only the
    +     system can purge the key, at the end of the retention interval. Possible
    +     values include: 'Purgeable', 'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, not_before=None, expires=None, **kwargs) -> None:
    +        super(KeyAttributes, self).__init__(enabled=enabled, not_before=not_before, expires=expires, **kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class KeyCreateParameters(Model):
    +    """The key create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param kty: Required. The type of key to create. For valid values, see
    +     JsonWebKeyType. Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM',
    +     'oct'
    +    :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_size: The key size in bits. For example: 2048, 3072, or 4096
    +     for RSA.
    +    :type key_size: int
    +    :param key_ops:
    +    :type key_ops: list[str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +    :param key_attributes:
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param curve: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    """
    +
    +    _validation = {
    +        'kty': {'required': True, 'min_length': 1},
    +    }
    +
    +    _attribute_map = {
    +        'kty': {'key': 'kty', 'type': 'str'},
    +        'key_size': {'key': 'key_size', 'type': 'int'},
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'curve': {'key': 'crv', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, kty, key_size: int=None, key_ops=None, key_attributes=None, tags=None, curve=None, **kwargs) -> None:
    +        super(KeyCreateParameters, self).__init__(**kwargs)
    +        self.kty = kty
    +        self.key_size = key_size
    +        self.key_ops = key_ops
    +        self.key_attributes = key_attributes
    +        self.tags = tags
    +        self.curve = curve
    +
    +
    +class KeyImportParameters(Model):
    +    """The key import parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param hsm: Whether to import as a hardware key (HSM) or software key.
    +    :type hsm: bool
    +    :param key: Required. The Json web key
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param key_attributes: The key management attributes.
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'key': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'hsm': {'key': 'Hsm', 'type': 'bool'},
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, key, hsm: bool=None, key_attributes=None, tags=None, **kwargs) -> None:
    +        super(KeyImportParameters, self).__init__(**kwargs)
    +        self.hsm = hsm
    +        self.key = key
    +        self.key_attributes = key_attributes
    +        self.tags = tags
    +
    +
    +class KeyListResult(Model):
    +    """The key list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of keys in the key vault
    +     along with a link to the next page of keys.
    +    :vartype value: list[~azure.keyvault.v7_1.models.KeyItem]
    +    :ivar next_link: The URL to get the next set of keys.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[KeyItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(KeyListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class KeyOperationResult(Model):
    +    """The key operation result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar kid: Key identifier
    +    :vartype kid: str
    +    :ivar result:
    +    :vartype result: bytes
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'result': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'result': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(KeyOperationResult, self).__init__(**kwargs)
    +        self.kid = None
    +        self.result = None
    +
    +
    +class KeyOperationsParameters(Model):
    +    """The key operations parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. algorithm identifier. Possible values include:
    +     'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +    :param value: Required.
    +    :type value: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, algorithm, value: bytes, **kwargs) -> None:
    +        super(KeyOperationsParameters, self).__init__(**kwargs)
    +        self.algorithm = algorithm
    +        self.value = value
    +
    +
    +class KeyProperties(Model):
    +    """Properties of the key pair backing a certificate.
    +
    +    :param exportable: Indicates if the private key can be exported.
    +    :type exportable: bool
    +    :param key_type: The type of key pair to be used for the certificate.
    +     Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'
    +    :type key_type: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_size: The key size in bits. For example: 2048, 3072, or 4096
    +     for RSA.
    +    :type key_size: int
    +    :param reuse_key: Indicates if the same key pair will be used on
    +     certificate renewal.
    +    :type reuse_key: bool
    +    :param curve: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    """
    +
    +    _attribute_map = {
    +        'exportable': {'key': 'exportable', 'type': 'bool'},
    +        'key_type': {'key': 'kty', 'type': 'str'},
    +        'key_size': {'key': 'key_size', 'type': 'int'},
    +        'reuse_key': {'key': 'reuse_key', 'type': 'bool'},
    +        'curve': {'key': 'crv', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, exportable: bool=None, key_type=None, key_size: int=None, reuse_key: bool=None, curve=None, **kwargs) -> None:
    +        super(KeyProperties, self).__init__(**kwargs)
    +        self.exportable = exportable
    +        self.key_type = key_type
    +        self.key_size = key_size
    +        self.reuse_key = reuse_key
    +        self.curve = curve
    +
    +
    +class KeyRestoreParameters(Model):
    +    """The key restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_bundle_backup: Required. The backup blob associated with a key
    +     bundle.
    +    :type key_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'key_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, key_bundle_backup: bytes, **kwargs) -> None:
    +        super(KeyRestoreParameters, self).__init__(**kwargs)
    +        self.key_bundle_backup = key_bundle_backup
    +
    +
    +class KeySignParameters(Model):
    +    """The key operations parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. The signing/verification algorithm identifier.
    +     For more information on possible algorithm types, see
    +     JsonWebKeySignatureAlgorithm. Possible values include: 'PS256', 'PS384',
    +     'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256', 'ES384', 'ES512',
    +     'ES256K'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +    :param value: Required.
    +    :type value: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, algorithm, value: bytes, **kwargs) -> None:
    +        super(KeySignParameters, self).__init__(**kwargs)
    +        self.algorithm = algorithm
    +        self.value = value
    +
    +
    +class KeyUpdateParameters(Model):
    +    """The key update parameters.
    +
    +    :param key_ops: Json web key operations. For more information on possible
    +     key operations, see JsonWebKeyOperation.
    +    :type key_ops: list[str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +    :param key_attributes:
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, key_ops=None, key_attributes=None, tags=None, **kwargs) -> None:
    +        super(KeyUpdateParameters, self).__init__(**kwargs)
    +        self.key_ops = key_ops
    +        self.key_attributes = key_attributes
    +        self.tags = tags
    +
    +
    +class KeyVaultError(Model):
    +    """The key vault error exception.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar error:
    +    :vartype error: ~azure.keyvault.v7_1.models.Error
    +    """
    +
    +    _validation = {
    +        'error': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'Error'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(KeyVaultError, self).__init__(**kwargs)
    +        self.error = None
    +
    +
    +class KeyVaultErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'KeyVaultError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'KeyVaultError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(KeyVaultErrorException, self).__init__(response=response)
    +
    +
    +class KeyVerifyParameters(Model):
    +    """The key verify parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. The signing/verification algorithm. For more
    +     information on possible algorithm types, see JsonWebKeySignatureAlgorithm.
    +     Possible values include: 'PS256', 'PS384', 'PS512', 'RS256', 'RS384',
    +     'RS512', 'RSNULL', 'ES256', 'ES384', 'ES512', 'ES256K'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +    :param digest: Required. The digest used for signing.
    +    :type digest: bytes
    +    :param signature: Required. The signature to be verified.
    +    :type signature: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'digest': {'required': True},
    +        'signature': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'digest': {'key': 'digest', 'type': 'base64'},
    +        'signature': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, algorithm, digest: bytes, signature: bytes, **kwargs) -> None:
    +        super(KeyVerifyParameters, self).__init__(**kwargs)
    +        self.algorithm = algorithm
    +        self.digest = digest
    +        self.signature = signature
    +
    +
    +class KeyVerifyResult(Model):
    +    """The key verify result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: True if the signature is verified, otherwise false.
    +    :vartype value: bool
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(KeyVerifyResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class LifetimeAction(Model):
    +    """Action and its trigger that will be performed by Key Vault over the
    +    lifetime of a certificate.
    +
    +    :param trigger: The condition that will execute the action.
    +    :type trigger: ~azure.keyvault.v7_1.models.Trigger
    +    :param action: The action that will be executed.
    +    :type action: ~azure.keyvault.v7_1.models.Action
    +    """
    +
    +    _attribute_map = {
    +        'trigger': {'key': 'trigger', 'type': 'Trigger'},
    +        'action': {'key': 'action', 'type': 'Action'},
    +    }
    +
    +    def __init__(self, *, trigger=None, action=None, **kwargs) -> None:
    +        super(LifetimeAction, self).__init__(**kwargs)
    +        self.trigger = trigger
    +        self.action = action
    +
    +
    +class OrganizationDetails(Model):
    +    """Details of the organization of the certificate issuer.
    +
    +    :param id: Id of the organization.
    +    :type id: str
    +    :param admin_details: Details of the organization administrator.
    +    :type admin_details:
    +     list[~azure.keyvault.v7_1.models.AdministratorDetails]
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'admin_details': {'key': 'admin_details', 'type': '[AdministratorDetails]'},
    +    }
    +
    +    def __init__(self, *, id: str=None, admin_details=None, **kwargs) -> None:
    +        super(OrganizationDetails, self).__init__(**kwargs)
    +        self.id = id
    +        self.admin_details = admin_details
    +
    +
    +class PendingCertificateSigningRequestResult(Model):
    +    """The pending certificate signing request result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The pending certificate signing request as Base64 encoded
    +     string.
    +    :vartype value: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(PendingCertificateSigningRequestResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class SasDefinitionAttributes(Model):
    +    """The SAS definition management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: the enabled state of the object.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for SAS definitions in the current vault. If it contains
    +     'Purgeable' the SAS definition can be permanently deleted by a privileged
    +     user; otherwise, only the system can purge the SAS definition, at the end
    +     of the retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
    +        super(SasDefinitionAttributes, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.created = None
    +        self.updated = None
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class SasDefinitionCreateParameters(Model):
    +    """The SAS definition create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param template_uri: Required. The SAS definition token template signed
    +     with an arbitrary key.  Tokens created according to the SAS definition
    +     will have the same properties as the template.
    +    :type template_uri: str
    +    :param sas_type: Required. The type of SAS token the SAS definition will
    +     create. Possible values include: 'account', 'service'
    +    :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :param validity_period: Required. The validity period of SAS tokens
    +     created according to the SAS definition.
    +    :type validity_period: str
    +    :param sas_definition_attributes: The attributes of the SAS definition.
    +    :type sas_definition_attributes:
    +     ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'template_uri': {'required': True},
    +        'sas_type': {'required': True},
    +        'validity_period': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'sas_definition_attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, template_uri: str, sas_type, validity_period: str, sas_definition_attributes=None, tags=None, **kwargs) -> None:
    +        super(SasDefinitionCreateParameters, self).__init__(**kwargs)
    +        self.template_uri = template_uri
    +        self.sas_type = sas_type
    +        self.validity_period = validity_period
    +        self.sas_definition_attributes = sas_definition_attributes
    +        self.tags = tags
    +
    +
    +class SasDefinitionListResult(Model):
    +    """The storage account SAS definition list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of SAS definitions along
    +     with a link to the next page of SAS definitions.
    +    :vartype value: list[~azure.keyvault.v7_1.models.SasDefinitionItem]
    +    :ivar next_link: The URL to get the next set of SAS definitions.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SasDefinitionItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(SasDefinitionListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SasDefinitionUpdateParameters(Model):
    +    """The SAS definition update parameters.
    +
    +    :param template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :type template_uri: str
    +    :param sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :param validity_period: The validity period of SAS tokens created
    +     according to the SAS definition.
    +    :type validity_period: str
    +    :param sas_definition_attributes: The attributes of the SAS definition.
    +    :type sas_definition_attributes:
    +     ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'sas_definition_attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, template_uri: str=None, sas_type=None, validity_period: str=None, sas_definition_attributes=None, tags=None, **kwargs) -> None:
    +        super(SasDefinitionUpdateParameters, self).__init__(**kwargs)
    +        self.template_uri = template_uri
    +        self.sas_type = sas_type
    +        self.validity_period = validity_period
    +        self.sas_definition_attributes = sas_definition_attributes
    +        self.tags = tags
    +
    +
    +class SecretAttributes(Attributes):
    +    """The secret management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for secrets in the current vault. If it contains 'Purgeable', the
    +     secret can be permanently deleted by a privileged user; otherwise, only
    +     the system can purge the secret, at the end of the retention interval.
    +     Possible values include: 'Purgeable', 'Recoverable+Purgeable',
    +     'Recoverable', 'Recoverable+ProtectedSubscription',
    +     'CustomizedRecoverable+Purgeable', 'CustomizedRecoverable',
    +     'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, not_before=None, expires=None, **kwargs) -> None:
    +        super(SecretAttributes, self).__init__(enabled=enabled, not_before=not_before, expires=expires, **kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class SecretListResult(Model):
    +    """The secret list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of secrets in the key
    +     vault along with a link to the next page of secrets.
    +    :vartype value: list[~azure.keyvault.v7_1.models.SecretItem]
    +    :ivar next_link: The URL to get the next set of secrets.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SecretItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(SecretListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SecretProperties(Model):
    +    """Properties of the key backing a certificate.
    +
    +    :param content_type: The media type (MIME type).
    +    :type content_type: str
    +    """
    +
    +    _attribute_map = {
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, content_type: str=None, **kwargs) -> None:
    +        super(SecretProperties, self).__init__(**kwargs)
    +        self.content_type = content_type
    +
    +
    +class SecretRestoreParameters(Model):
    +    """The secret restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param secret_bundle_backup: Required. The backup blob associated with a
    +     secret bundle.
    +    :type secret_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'secret_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'secret_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, secret_bundle_backup: bytes, **kwargs) -> None:
    +        super(SecretRestoreParameters, self).__init__(**kwargs)
    +        self.secret_bundle_backup = secret_bundle_backup
    +
    +
    +class SecretSetParameters(Model):
    +    """The secret set parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param value: Required. The value of the secret.
    +    :type value: str
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :param secret_attributes: The secret management attributes.
    +    :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    """
    +
    +    _validation = {
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +    }
    +
    +    def __init__(self, *, value: str, tags=None, content_type: str=None, secret_attributes=None, **kwargs) -> None:
    +        super(SecretSetParameters, self).__init__(**kwargs)
    +        self.value = value
    +        self.tags = tags
    +        self.content_type = content_type
    +        self.secret_attributes = secret_attributes
    +
    +
    +class SecretUpdateParameters(Model):
    +    """The secret update parameters.
    +
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :param secret_attributes: The secret management attributes.
    +    :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, content_type: str=None, secret_attributes=None, tags=None, **kwargs) -> None:
    +        super(SecretUpdateParameters, self).__init__(**kwargs)
    +        self.content_type = content_type
    +        self.secret_attributes = secret_attributes
    +        self.tags = tags
    +
    +
    +class StorageAccountAttributes(Model):
    +    """The storage account management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: the enabled state of the object.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for storage accounts in the current vault. If it contains
    +     'Purgeable' the storage account can be permanently deleted by a privileged
    +     user; otherwise, only the system can purge the storage account, at the end
    +     of the retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
    +        super(StorageAccountAttributes, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.created = None
    +        self.updated = None
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class StorageAccountCreateParameters(Model):
    +    """The storage account create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param resource_id: Required. Storage account resource id.
    +    :type resource_id: str
    +    :param active_key_name: Required. Current active storage account key name.
    +    :type active_key_name: str
    +    :param auto_regenerate_key: Required. whether keyvault should manage the
    +     storage account for the user.
    +    :type auto_regenerate_key: bool
    +    :param regeneration_period: The key regeneration time duration specified
    +     in ISO-8601 format.
    +    :type regeneration_period: str
    +    :param storage_account_attributes: The attributes of the storage account.
    +    :type storage_account_attributes:
    +     ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'resource_id': {'required': True},
    +        'active_key_name': {'required': True},
    +        'auto_regenerate_key': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'storage_account_attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, resource_id: str, active_key_name: str, auto_regenerate_key: bool, regeneration_period: str=None, storage_account_attributes=None, tags=None, **kwargs) -> None:
    +        super(StorageAccountCreateParameters, self).__init__(**kwargs)
    +        self.resource_id = resource_id
    +        self.active_key_name = active_key_name
    +        self.auto_regenerate_key = auto_regenerate_key
    +        self.regeneration_period = regeneration_period
    +        self.storage_account_attributes = storage_account_attributes
    +        self.tags = tags
    +
    +
    +class StorageAccountRegenerteKeyParameters(Model):
    +    """The storage account key regenerate parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_name: Required. The storage account key name.
    +    :type key_name: str
    +    """
    +
    +    _validation = {
    +        'key_name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_name': {'key': 'keyName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, key_name: str, **kwargs) -> None:
    +        super(StorageAccountRegenerteKeyParameters, self).__init__(**kwargs)
    +        self.key_name = key_name
    +
    +
    +class StorageAccountUpdateParameters(Model):
    +    """The storage account update parameters.
    +
    +    :param active_key_name: The current active storage account key name.
    +    :type active_key_name: str
    +    :param auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :type auto_regenerate_key: bool
    +    :param regeneration_period: The key regeneration time duration specified
    +     in ISO-8601 format.
    +    :type regeneration_period: str
    +    :param storage_account_attributes: The attributes of the storage account.
    +    :type storage_account_attributes:
    +     ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'storage_account_attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, active_key_name: str=None, auto_regenerate_key: bool=None, regeneration_period: str=None, storage_account_attributes=None, tags=None, **kwargs) -> None:
    +        super(StorageAccountUpdateParameters, self).__init__(**kwargs)
    +        self.active_key_name = active_key_name
    +        self.auto_regenerate_key = auto_regenerate_key
    +        self.regeneration_period = regeneration_period
    +        self.storage_account_attributes = storage_account_attributes
    +        self.tags = tags
    +
    +
    +class StorageListResult(Model):
    +    """The storage accounts list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of storage accounts in
    +     the key vault along with a link to the next page of storage accounts.
    +    :vartype value: list[~azure.keyvault.v7_1.models.StorageAccountItem]
    +    :ivar next_link: The URL to get the next set of storage accounts.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[StorageAccountItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(StorageListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class StorageRestoreParameters(Model):
    +    """The secret restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param storage_bundle_backup: Required. The backup blob associated with a
    +     storage account.
    +    :type storage_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'storage_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'storage_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, storage_bundle_backup: bytes, **kwargs) -> None:
    +        super(StorageRestoreParameters, self).__init__(**kwargs)
    +        self.storage_bundle_backup = storage_bundle_backup
    +
    +
    +class SubjectAlternativeNames(Model):
    +    """The subject alternate names of a X509 object.
    +
    +    :param emails: Email addresses.
    +    :type emails: list[str]
    +    :param dns_names: Domain names.
    +    :type dns_names: list[str]
    +    :param upns: User principal names.
    +    :type upns: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'emails': {'key': 'emails', 'type': '[str]'},
    +        'dns_names': {'key': 'dns_names', 'type': '[str]'},
    +        'upns': {'key': 'upns', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, *, emails=None, dns_names=None, upns=None, **kwargs) -> None:
    +        super(SubjectAlternativeNames, self).__init__(**kwargs)
    +        self.emails = emails
    +        self.dns_names = dns_names
    +        self.upns = upns
    +
    +
    +class Trigger(Model):
    +    """A condition to be satisfied for an action to be executed.
    +
    +    :param lifetime_percentage: Percentage of lifetime at which to trigger.
    +     Value should be between 1 and 99.
    +    :type lifetime_percentage: int
    +    :param days_before_expiry: Days before expiry to attempt renewal. Value
    +     should be between 1 and validity_in_months multiplied by 27. If
    +     validity_in_months is 36, then value should be between 1 and 972 (36 *
    +     27).
    +    :type days_before_expiry: int
    +    """
    +
    +    _validation = {
    +        'lifetime_percentage': {'maximum': 99, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lifetime_percentage': {'key': 'lifetime_percentage', 'type': 'int'},
    +        'days_before_expiry': {'key': 'days_before_expiry', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, lifetime_percentage: int=None, days_before_expiry: int=None, **kwargs) -> None:
    +        super(Trigger, self).__init__(**kwargs)
    +        self.lifetime_percentage = lifetime_percentage
    +        self.days_before_expiry = days_before_expiry
    +
    +
    +class X509CertificateProperties(Model):
    +    """Properties of the X509 component of a certificate.
    +
    +    :param subject: The subject name. Should be a valid X509 distinguished
    +     Name.
    +    :type subject: str
    +    :param ekus: The enhanced key usage.
    +    :type ekus: list[str]
    +    :param subject_alternative_names: The subject alternative names.
    +    :type subject_alternative_names:
    +     ~azure.keyvault.v7_1.models.SubjectAlternativeNames
    +    :param key_usage: List of key usages.
    +    :type key_usage: list[str or ~azure.keyvault.v7_1.models.KeyUsageType]
    +    :param validity_in_months: The duration that the certificate is valid in
    +     months.
    +    :type validity_in_months: int
    +    """
    +
    +    _validation = {
    +        'validity_in_months': {'minimum': 0},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'ekus': {'key': 'ekus', 'type': '[str]'},
    +        'subject_alternative_names': {'key': 'sans', 'type': 'SubjectAlternativeNames'},
    +        'key_usage': {'key': 'key_usage', 'type': '[str]'},
    +        'validity_in_months': {'key': 'validity_months', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, subject: str=None, ekus=None, subject_alternative_names=None, key_usage=None, validity_in_months: int=None, **kwargs) -> None:
    +        super(X509CertificateProperties, self).__init__(**kwargs)
    +        self.subject = subject
    +        self.ekus = ekus
    +        self.subject_alternative_names = subject_alternative_names
    +        self.key_usage = key_usage
    +        self.validity_in_months = validity_in_months
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/operations/__init__.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/operations/__init__.py
    new file mode 100644
    index 000000000000..603e37d3ee07
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/operations/__init__.py
    @@ -0,0 +1,16 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._key_vault_client_operations import KeyVaultClientOperationsMixin
    +
    +__all__ = [
    +    'KeyVaultClientOperationsMixin',
    +]
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/operations/_key_vault_client_operations.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/operations/_key_vault_client_operations.py
    new file mode 100644
    index 000000000000..449c73af3bb1
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/operations/_key_vault_client_operations.py
    @@ -0,0 +1,5224 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +from azure.core.paging import ItemPaged
    +from .. import models
    +import uuid
    +
    +
    +class KeyVaultClientOperationsMixin(object):
    +
    +    def get_certificates(
    +            self, vault_base_url, maxresults=None, include_pending=None, cls=None, **kwargs):
    +        """List certificates in a specified key vault.
    +
    +        The GetCertificates operation returns the set of certificates resources
    +        in the specified key vault. This operation requires the
    +        certificates/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :param include_pending: Specifies whether to include certificates
    +         which are not completely provisioned.
    +        :type include_pending: bool
    +        :return: An iterator like instance of CertificateItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.CertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificates.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                if include_pending is not None:
    +                    query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('CertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_certificates.metadata = {'url': '/certificates'}
    +
    +    def delete_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Deletes a certificate from a specified key vault.
    +
    +        Deletes all versions of a certificate object along with its associated
    +        policy. Delete certificate cannot be used to remove individual versions
    +        of a certificate object. This operation requires the
    +        certificates/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedCertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedCertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedCertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate.metadata = {'url': '/certificates/{certificate-name}'}
    +
    +    def set_certificate_contacts(self, vault_base_url, contact_list=None, cls=None, **kwargs):
    +        """Sets the certificate contacts for the specified key vault.
    +
    +        Sets the certificate contacts for the specified key vault. This
    +        operation requires the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param contact_list: The contact list for the vault certificates.
    +        :type contact_list: list[~azure.keyvault.v7_1.models.Contact]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        contacts = models.Contacts(contact_list=contact_list)
    +
    +        # Construct URL
    +        url = self.set_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(contacts, 'Contacts')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    def get_certificate_contacts(self, vault_base_url, cls=None, **kwargs):
    +        """Lists the certificate contacts for a specified key vault.
    +
    +        The GetCertificateContacts operation returns the set of certificate
    +        contact resources in the specified key vault. This operation requires
    +        the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    def delete_certificate_contacts(self, vault_base_url, cls=None, **kwargs):
    +        """Deletes the certificate contacts for a specified key vault.
    +
    +        Deletes the certificate contacts for a specified key vault certificate.
    +        This operation requires the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    def get_certificate_issuers(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """List certificate issuers for a specified key vault.
    +
    +        The GetCertificateIssuers operation returns the set of certificate
    +        issuer resources in the specified key vault. This operation requires
    +        the certificates/manageissuers/getissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of CertificateIssuerItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.CertificateIssuerItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificate_issuers.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('CertificateIssuerListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_certificate_issuers.metadata = {'url': '/certificates/issuers'}
    +
    +    def set_certificate_issuer(self, vault_base_url, issuer_name, provider, credentials=None, organization_details=None, attributes=None, cls=None, **kwargs):
    +        """Sets the specified certificate issuer.
    +
    +        The SetCertificateIssuer operation adds or updates the specified
    +        certificate issuer. This operation requires the certificates/setissuers
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param provider: The issuer provider.
    +        :type provider: str
    +        :param credentials: The credentials to be used for the issuer.
    +        :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +        :param organization_details: Details of the organization as provided
    +         to the issuer.
    +        :type organization_details:
    +         ~azure.keyvault.v7_1.models.OrganizationDetails
    +        :param attributes: Attributes of the issuer object.
    +        :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameter = models.CertificateIssuerSetParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes)
    +
    +        # Construct URL
    +        url = self.set_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameter, 'CertificateIssuerSetParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    def update_certificate_issuer(self, vault_base_url, issuer_name, provider=None, credentials=None, organization_details=None, attributes=None, cls=None, **kwargs):
    +        """Updates the specified certificate issuer.
    +
    +        The UpdateCertificateIssuer operation performs an update on the
    +        specified certificate issuer entity. This operation requires the
    +        certificates/setissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param provider: The issuer provider.
    +        :type provider: str
    +        :param credentials: The credentials to be used for the issuer.
    +        :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +        :param organization_details: Details of the organization as provided
    +         to the issuer.
    +        :type organization_details:
    +         ~azure.keyvault.v7_1.models.OrganizationDetails
    +        :param attributes: Attributes of the issuer object.
    +        :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameter = models.CertificateIssuerUpdateParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes)
    +
    +        # Construct URL
    +        url = self.update_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameter, 'CertificateIssuerUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    def get_certificate_issuer(self, vault_base_url, issuer_name, cls=None, **kwargs):
    +        """Lists the specified certificate issuer.
    +
    +        The GetCertificateIssuer operation returns the specified certificate
    +        issuer resources in the specified key vault. This operation requires
    +        the certificates/manageissuers/getissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    def delete_certificate_issuer(self, vault_base_url, issuer_name, cls=None, **kwargs):
    +        """Deletes the specified certificate issuer.
    +
    +        The DeleteCertificateIssuer operation permanently removes the specified
    +        certificate issuer from the vault. This operation requires the
    +        certificates/manageissuers/deleteissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    def create_certificate(self, vault_base_url, certificate_name, certificate_policy=None, certificate_attributes=None, tags=None, cls=None, **kwargs):
    +        """Creates a new certificate.
    +
    +        If this is the first version, the certificate resource is created. This
    +        operation requires the certificates/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateCreateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.create_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 202:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    create_certificate.metadata = {'url': '/certificates/{certificate-name}/create'}
    +
    +    def import_certificate(self, vault_base_url, certificate_name, base64_encoded_certificate, password=None, certificate_policy=None, certificate_attributes=None, tags=None, cls=None, **kwargs):
    +        """Imports a certificate into a specified key vault.
    +
    +        Imports an existing valid certificate, containing a private key, into
    +        Azure Key Vault. The certificate to be imported can be in either PFX or
    +        PEM format. If the certificate is in PEM format the PEM file must
    +        contain the key as well as x509 certificates. This operation requires
    +        the certificates/import permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param base64_encoded_certificate: Base64 encoded representation of
    +         the certificate object to import. This certificate needs to contain
    +         the private key.
    +        :type base64_encoded_certificate: str
    +        :param password: If the private key in base64EncodedCertificate is
    +         encrypted, the password used for encryption.
    +        :type password: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateImportParameters(base64_encoded_certificate=base64_encoded_certificate, password=password, certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.import_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateImportParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    import_certificate.metadata = {'url': '/certificates/{certificate-name}/import'}
    +
    +    def get_certificate_versions(
    +            self, vault_base_url, certificate_name, maxresults=None, cls=None, **kwargs):
    +        """List the versions of a certificate.
    +
    +        The GetCertificateVersions operation returns the versions of a
    +        certificate in the specified key vault. This operation requires the
    +        certificates/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of CertificateItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.CertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificate_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('CertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_certificate_versions.metadata = {'url': '/certificates/{certificate-name}/versions'}
    +
    +    def get_certificate_policy(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Lists the policy for a certificate.
    +
    +        The GetCertificatePolicy operation returns the specified certificate
    +        policy resources in the specified key vault. This operation requires
    +        the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in a given key
    +         vault.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificatePolicy or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_policy.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificatePolicy', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}
    +
    +    def update_certificate_policy(self, vault_base_url, certificate_name, certificate_policy, cls=None, **kwargs):
    +        """Updates the policy for a certificate.
    +
    +        Set specified members in the certificate policy. Leave others as null.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_policy: The policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificatePolicy or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.update_certificate_policy.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_policy, 'CertificatePolicy')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificatePolicy', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}
    +
    +    def update_certificate(self, vault_base_url, certificate_name, certificate_version, certificate_policy=None, certificate_attributes=None, tags=None, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given certificate.
    +
    +        The UpdateCertificate operation applies the specified update on the
    +        given certificate; the only elements updated are the certificate's
    +        attributes. This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given key
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_version: The version of the certificate.
    +        :type certificate_version: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateUpdateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
    +            'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}
    +
    +    def get_certificate(self, vault_base_url, certificate_name, certificate_version, cls=None, **kwargs):
    +        """Gets information about a certificate.
    +
    +        Gets information about a specific certificate. This operation requires
    +        the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_version: The version of the certificate.
    +        :type certificate_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
    +            'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}
    +
    +    def update_certificate_operation(self, vault_base_url, certificate_name, cancellation_requested, cls=None, **kwargs):
    +        """Updates a certificate operation.
    +
    +        Updates a certificate creation operation that is already in progress.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param cancellation_requested: Indicates if cancellation was requested
    +         on the certificate operation.
    +        :type cancellation_requested: bool
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        certificate_operation = models.CertificateOperationUpdateParameter(cancellation_requested=cancellation_requested)
    +
    +        # Construct URL
    +        url = self.update_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_operation, 'CertificateOperationUpdateParameter')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    def get_certificate_operation(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Gets the creation operation of a certificate.
    +
    +        Gets the creation operation associated with a specified certificate.
    +        This operation requires the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    def delete_certificate_operation(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Deletes the creation operation for a specific certificate.
    +
    +        Deletes the creation operation for a specified certificate that is in
    +        the process of being created. The certificate is no longer created.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    def merge_certificate(self, vault_base_url, certificate_name, x509_certificates, certificate_attributes=None, tags=None, cls=None, **kwargs):
    +        """Merges a certificate or a certificate chain with a key pair existing on
    +        the server.
    +
    +        The MergeCertificate operation performs the merging of a certificate or
    +        certificate chain with a key pair currently available in the service.
    +        This operation requires the certificates/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param x509_certificates: The certificate or the certificate chain to
    +         merge.
    +        :type x509_certificates: list[bytearray]
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateMergeParameters(x509_certificates=x509_certificates, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.merge_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateMergeParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    merge_certificate.metadata = {'url': '/certificates/{certificate-name}/pending/merge'}
    +
    +    def backup_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Backs up the specified certificate.
    +
    +        Requests that a backup of the specified certificate be downloaded to
    +        the client. All versions of the certificate will be downloaded. This
    +        operation requires the certificates/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupCertificateResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupCertificateResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupCertificateResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_certificate.metadata = {'url': '/certificates/{certificate-name}/backup'}
    +
    +    def restore_certificate(self, vault_base_url, certificate_bundle_backup, cls=None, **kwargs):
    +        """Restores a backed up certificate to a vault.
    +
    +        Restores a backed up certificate, and all its versions, to a vault.
    +        This operation requires the certificates/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_bundle_backup: The backup blob associated with a
    +         certificate bundle.
    +        :type certificate_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateRestoreParameters(certificate_bundle_backup=certificate_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_certificate.metadata = {'url': '/certificates/restore'}
    +
    +    def get_deleted_certificates(
    +            self, vault_base_url, maxresults=None, include_pending=None, cls=None, **kwargs):
    +        """Lists the deleted certificates in the specified vault currently
    +        available for recovery.
    +
    +        The GetDeletedCertificates operation retrieves the certificates in the
    +        current vault which are in a deleted state and ready for recovery or
    +        purging. This operation includes deletion-specific information. This
    +        operation requires the certificates/get/list permission. This operation
    +        can only be enabled on soft-delete enabled vaults.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :param include_pending: Specifies whether to include certificates
    +         which are not completely provisioned.
    +        :type include_pending: bool
    +        :return: An iterator like instance of DeletedCertificateItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedCertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_certificates.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                if include_pending is not None:
    +                    query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedCertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_certificates.metadata = {'url': '/deletedcertificates'}
    +
    +    def get_deleted_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Retrieves information about the specified deleted certificate.
    +
    +        The GetDeletedCertificate operation retrieves the deleted certificate
    +        information plus its attributes, such as retention interval, scheduled
    +        permanent deletion and the current deletion recovery level. This
    +        operation requires the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedCertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedCertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedCertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}
    +
    +    def purge_deleted_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Permanently deletes the specified deleted certificate.
    +
    +        The PurgeDeletedCertificate operation performs an irreversible deletion
    +        of the specified certificate, without possibility for recovery. The
    +        operation is not available if the recovery level does not specify
    +        'Purgeable'. This operation requires the certificate/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}
    +
    +    def recover_deleted_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Recovers the deleted certificate back to its current version under
    +        /certificates.
    +
    +        The RecoverDeletedCertificate operation performs the reversal of the
    +        Delete operation. The operation is applicable in vaults enabled for
    +        soft-delete, and must be issued during the retention interval
    +        (available in the deleted certificate's attributes). This operation
    +        requires the certificates/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the deleted certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}/recover'}
    +
    +    def create_key(self, vault_base_url, key_name, kty, key_size=None, key_ops=None, key_attributes=None, tags=None, curve=None, cls=None, **kwargs):
    +        """Creates a new key, stores it, then returns key parameters and
    +        attributes to the client.
    +
    +        The create key operation can be used to create any key type in Azure
    +        Key Vault. If the named key already exists, Azure Key Vault creates a
    +        new version of the key. It requires the keys/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name for the new key. The system will generate
    +         the version name for the new key.
    +        :type key_name: str
    +        :param kty: The type of key to create. For valid values, see
    +         JsonWebKeyType. Possible values include: 'EC', 'EC-HSM', 'RSA',
    +         'RSA-HSM', 'oct'
    +        :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +        :param key_size: The key size in bits. For example: 2048, 3072, or
    +         4096 for RSA.
    +        :type key_size: int
    +        :param key_ops:
    +        :type key_ops: list[str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +        :param key_attributes:
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param curve: Elliptic curve name. For valid values, see
    +         JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384',
    +         'P-521', 'P-256K'
    +        :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyCreateParameters(kty=kty, key_size=key_size, key_ops=key_ops, key_attributes=key_attributes, tags=tags, curve=curve)
    +
    +        # Construct URL
    +        url = self.create_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    create_key.metadata = {'url': '/keys/{key-name}/create'}
    +
    +    def import_key(self, vault_base_url, key_name, key, hsm=None, key_attributes=None, tags=None, cls=None, **kwargs):
    +        """Imports an externally created key, stores it, and returns key
    +        parameters and attributes to the client.
    +
    +        The import key operation may be used to import any key type into an
    +        Azure Key Vault. If the named key already exists, Azure Key Vault
    +        creates a new version of the key. This operation requires the
    +        keys/import permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: Name for the imported key.
    +        :type key_name: str
    +        :param key: The Json web key
    +        :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +        :param hsm: Whether to import as a hardware key (HSM) or software key.
    +        :type hsm: bool
    +        :param key_attributes: The key management attributes.
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyImportParameters(hsm=hsm, key=key, key_attributes=key_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.import_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyImportParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    import_key.metadata = {'url': '/keys/{key-name}'}
    +
    +    def delete_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Deletes a key of any type from storage in Azure Key Vault.
    +
    +        The delete key operation cannot be used to remove individual versions
    +        of a key. This operation removes the cryptographic material associated
    +        with the key, which means the key is not usable for Sign/Verify,
    +        Wrap/Unwrap or Encrypt/Decrypt operations. This operation requires the
    +        keys/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key to delete.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedKeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedKeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedKeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_key.metadata = {'url': '/keys/{key-name}'}
    +
    +    def update_key(self, vault_base_url, key_name, key_version, key_ops=None, key_attributes=None, tags=None, cls=None, **kwargs):
    +        """The update key operation changes specified attributes of a stored key
    +        and can be applied to any key type and key version stored in Azure Key
    +        Vault.
    +
    +        In order to perform this operation, the key must already exist in the
    +        Key Vault. Note: The cryptographic material of a key itself cannot be
    +        changed. This operation requires the keys/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of key to update.
    +        :type key_name: str
    +        :param key_version: The version of the key to update.
    +        :type key_version: str
    +        :param key_ops: Json web key operations. For more information on
    +         possible key operations, see JsonWebKeyOperation.
    +        :type key_ops: list[str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +        :param key_attributes:
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyUpdateParameters(key_ops=key_ops, key_attributes=key_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_key.metadata = {'url': '/keys/{key-name}/{key-version}'}
    +
    +    def get_key(self, vault_base_url, key_name, key_version, cls=None, **kwargs):
    +        """Gets the public part of a stored key.
    +
    +        The get key operation is applicable to all key types. If the requested
    +        key is symmetric, then no key material is released in the response.
    +        This operation requires the keys/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key to get.
    +        :type key_name: str
    +        :param key_version: Adding the version parameter retrieves a specific
    +         version of a key.
    +        :type key_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_key.metadata = {'url': '/keys/{key-name}/{key-version}'}
    +
    +    def get_key_versions(
    +            self, vault_base_url, key_name, maxresults=None, cls=None, **kwargs):
    +        """Retrieves a list of individual key versions with the same key name.
    +
    +        The full key identifier, attributes, and tags are provided in the
    +        response. This operation requires the keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of KeyItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.KeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_key_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'key-name': self._serialize.url("key_name", key_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'key-name': self._serialize.url("key_name", key_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('KeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_key_versions.metadata = {'url': '/keys/{key-name}/versions'}
    +
    +    def get_keys(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """List keys in the specified vault.
    +
    +        Retrieves a list of the keys in the Key Vault as JSON Web Key
    +        structures that contain the public part of a stored key. The LIST
    +        operation is applicable to all key types, however only the base key
    +        identifier, attributes, and tags are provided in the response.
    +        Individual versions of a key are not listed in the response. This
    +        operation requires the keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of KeyItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.KeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_keys.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('KeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_keys.metadata = {'url': '/keys'}
    +
    +    def backup_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Requests that a backup of the specified key be downloaded to the
    +        client.
    +
    +        The Key Backup operation exports a key from Azure Key Vault in a
    +        protected form. Note that this operation does NOT return key material
    +        in a form that can be used outside the Azure Key Vault system, the
    +        returned key material is either protected to a Azure Key Vault HSM or
    +        to Azure Key Vault itself. The intent of this operation is to allow a
    +        client to GENERATE a key in one Azure Key Vault instance, BACKUP the
    +        key, and then RESTORE it into another Azure Key Vault instance. The
    +        BACKUP operation may be used to export, in protected form, any key type
    +        from Azure Key Vault. Individual versions of a key cannot be backed up.
    +        BACKUP / RESTORE can be performed within geographical boundaries only;
    +        meaning that a BACKUP from one geographical area cannot be restored to
    +        another geographical area. For example, a backup from the US
    +        geographical area cannot be restored in an EU geographical area. This
    +        operation requires the key/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupKeyResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupKeyResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupKeyResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_key.metadata = {'url': '/keys/{key-name}/backup'}
    +
    +    def restore_key(self, vault_base_url, key_bundle_backup, cls=None, **kwargs):
    +        """Restores a backed up key to a vault.
    +
    +        Imports a previously backed up key into Azure Key Vault, restoring the
    +        key, its key identifier, attributes and access control policies. The
    +        RESTORE operation may be used to import a previously backed up key.
    +        Individual versions of a key cannot be restored. The key is restored in
    +        its entirety with the same key name as it had when it was backed up. If
    +        the key name is not available in the target Key Vault, the RESTORE
    +        operation will be rejected. While the key name is retained during
    +        restore, the final key identifier will change if the key is restored to
    +        a different vault. Restore will restore all versions and preserve
    +        version identifiers. The RESTORE operation is subject to security
    +        constraints: The target Key Vault must be owned by the same Microsoft
    +        Azure Subscription as the source Key Vault The user must have RESTORE
    +        permission in the target Key Vault. This operation requires the
    +        keys/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_bundle_backup: The backup blob associated with a key
    +         bundle.
    +        :type key_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyRestoreParameters(key_bundle_backup=key_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_key.metadata = {'url': '/keys/restore'}
    +
    +    def encrypt(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Encrypts an arbitrary sequence of bytes using an encryption key that is
    +        stored in a key vault.
    +
    +        The ENCRYPT operation encrypts an arbitrary sequence of bytes using an
    +        encryption key that is stored in Azure Key Vault. Note that the ENCRYPT
    +        operation only supports a single block of data, the size of which is
    +        dependent on the target key and the encryption algorithm to be used.
    +        The ENCRYPT operation is only strictly necessary for symmetric keys
    +        stored in Azure Key Vault since protection with an asymmetric key can
    +        be performed using public portion of the key. This operation is
    +        supported for asymmetric keys as a convenience for callers that have a
    +        key-reference but do not have access to the public key material. This
    +        operation requires the keys/encrypt permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.encrypt.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    encrypt.metadata = {'url': '/keys/{key-name}/{key-version}/encrypt'}
    +
    +    def decrypt(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Decrypts a single block of encrypted data.
    +
    +        The DECRYPT operation decrypts a well-formed block of ciphertext using
    +        the target encryption key and specified algorithm. This operation is
    +        the reverse of the ENCRYPT operation; only a single block of data may
    +        be decrypted, the size of this block is dependent on the target key and
    +        the algorithm to be used. The DECRYPT operation applies to asymmetric
    +        and symmetric keys stored in Azure Key Vault since it uses the private
    +        portion of the key. This operation requires the keys/decrypt
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.decrypt.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    decrypt.metadata = {'url': '/keys/{key-name}/{key-version}/decrypt'}
    +
    +    def sign(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Creates a signature from a digest using the specified key.
    +
    +        The SIGN operation is applicable to asymmetric and symmetric keys
    +        stored in Azure Key Vault since this operation uses the private portion
    +        of the key. This operation requires the keys/sign permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: The signing/verification algorithm identifier. For
    +         more information on possible algorithm types, see
    +         JsonWebKeySignatureAlgorithm. Possible values include: 'PS256',
    +         'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256',
    +         'ES384', 'ES512', 'ES256K'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeySignParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.sign.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeySignParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    sign.metadata = {'url': '/keys/{key-name}/{key-version}/sign'}
    +
    +    def verify(self, vault_base_url, key_name, key_version, algorithm, digest, signature, cls=None, **kwargs):
    +        """Verifies a signature using a specified key.
    +
    +        The VERIFY operation is applicable to symmetric keys stored in Azure
    +        Key Vault. VERIFY is not strictly necessary for asymmetric keys stored
    +        in Azure Key Vault since signature verification can be performed using
    +        the public portion of the key but this operation is supported as a
    +        convenience for callers that only have a key-reference and not the
    +        public portion of the key. This operation requires the keys/verify
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: The signing/verification algorithm. For more
    +         information on possible algorithm types, see
    +         JsonWebKeySignatureAlgorithm. Possible values include: 'PS256',
    +         'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256',
    +         'ES384', 'ES512', 'ES256K'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +        :param digest: The digest used for signing.
    +        :type digest: bytes
    +        :param signature: The signature to be verified.
    +        :type signature: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyVerifyResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyVerifyResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyVerifyParameters(algorithm=algorithm, digest=digest, signature=signature)
    +
    +        # Construct URL
    +        url = self.verify.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyVerifyParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyVerifyResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    verify.metadata = {'url': '/keys/{key-name}/{key-version}/verify'}
    +
    +    def wrap_key(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Wraps a symmetric key using a specified key.
    +
    +        The WRAP operation supports encryption of a symmetric key using a key
    +        encryption key that has previously been stored in an Azure Key Vault.
    +        The WRAP operation is only strictly necessary for symmetric keys stored
    +        in Azure Key Vault since protection with an asymmetric key can be
    +        performed using the public portion of the key. This operation is
    +        supported for asymmetric keys as a convenience for callers that have a
    +        key-reference but do not have access to the public key material. This
    +        operation requires the keys/wrapKey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.wrap_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    wrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/wrapkey'}
    +
    +    def unwrap_key(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Unwraps a symmetric key using the specified key that was initially used
    +        for wrapping that key.
    +
    +        The UNWRAP operation supports decryption of a symmetric key using the
    +        target key encryption key. This operation is the reverse of the WRAP
    +        operation. The UNWRAP operation applies to asymmetric and symmetric
    +        keys stored in Azure Key Vault since it uses the private portion of the
    +        key. This operation requires the keys/unwrapKey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.unwrap_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    unwrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/unwrapkey'}
    +
    +    def get_deleted_keys(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """Lists the deleted keys in the specified vault.
    +
    +        Retrieves a list of the keys in the Key Vault as JSON Web Key
    +        structures that contain the public part of a deleted key. This
    +        operation includes deletion-specific information. The Get Deleted Keys
    +        operation is applicable for vaults enabled for soft-delete. While the
    +        operation can be invoked on any vault, it will return an error if
    +        invoked on a non soft-delete enabled vault. This operation requires the
    +        keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedKeyItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedKeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_keys.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedKeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_keys.metadata = {'url': '/deletedkeys'}
    +
    +    def get_deleted_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Gets the public part of a deleted key.
    +
    +        The Get Deleted Key operation is applicable for soft-delete enabled
    +        vaults. While the operation can be invoked on any vault, it will return
    +        an error if invoked on a non soft-delete enabled vault. This operation
    +        requires the keys/get permission. .
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedKeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedKeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedKeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}
    +
    +    def purge_deleted_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Permanently deletes the specified key.
    +
    +        The Purge Deleted Key operation is applicable for soft-delete enabled
    +        vaults. While the operation can be invoked on any vault, it will return
    +        an error if invoked on a non soft-delete enabled vault. This operation
    +        requires the keys/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}
    +
    +    def recover_deleted_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Recovers the deleted key to its latest version.
    +
    +        The Recover Deleted Key operation is applicable for deleted keys in
    +        soft-delete enabled vaults. It recovers the deleted key back to its
    +        latest version under /keys. An attempt to recover an non-deleted key
    +        will return an error. Consider this the inverse of the delete operation
    +        on soft-delete enabled vaults. This operation requires the keys/recover
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the deleted key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_key.metadata = {'url': '/deletedkeys/{key-name}/recover'}
    +
    +    def set_secret(self, vault_base_url, secret_name, value, tags=None, content_type=None, secret_attributes=None, cls=None, **kwargs):
    +        """Sets a secret in a specified key vault.
    +
    +        The SET operation adds a secret to the Azure Key Vault. If the named
    +        secret already exists, Azure Key Vault creates a new version of that
    +        secret. This operation requires the secrets/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param value: The value of the secret.
    +        :type value: str
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param content_type: Type of the secret value such as a password.
    +        :type content_type: str
    +        :param secret_attributes: The secret management attributes.
    +        :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretSetParameters(value=value, tags=tags, content_type=content_type, secret_attributes=secret_attributes)
    +
    +        # Construct URL
    +        url = self.set_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretSetParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_secret.metadata = {'url': '/secrets/{secret-name}'}
    +
    +    def delete_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Deletes a secret from a specified key vault.
    +
    +        The DELETE operation applies to any secret stored in Azure Key Vault.
    +        DELETE cannot be applied to an individual version of a secret. This
    +        operation requires the secrets/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_secret.metadata = {'url': '/secrets/{secret-name}'}
    +
    +    def update_secret(self, vault_base_url, secret_name, secret_version, content_type=None, secret_attributes=None, tags=None, cls=None, **kwargs):
    +        """Updates the attributes associated with a specified secret in a given
    +        key vault.
    +
    +        The UPDATE operation changes specified attributes of an existing stored
    +        secret. Attributes that are not specified in the request are left
    +        unchanged. The value of a secret itself cannot be changed. This
    +        operation requires the secrets/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param secret_version: The version of the secret.
    +        :type secret_version: str
    +        :param content_type: Type of the secret value such as a password.
    +        :type content_type: str
    +        :param secret_attributes: The secret management attributes.
    +        :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretUpdateParameters(content_type=content_type, secret_attributes=secret_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
    +            'secret-version': self._serialize.url("secret_version", secret_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}
    +
    +    def get_secret(self, vault_base_url, secret_name, secret_version, cls=None, **kwargs):
    +        """Get a specified secret from a given key vault.
    +
    +        The GET operation is applicable to any secret stored in Azure Key
    +        Vault. This operation requires the secrets/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param secret_version: The version of the secret.
    +        :type secret_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
    +            'secret-version': self._serialize.url("secret_version", secret_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}
    +
    +    def get_secrets(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """List secrets in a specified key vault.
    +
    +        The Get Secrets operation is applicable to the entire vault. However,
    +        only the base secret identifier and its attributes are provided in the
    +        response. Individual secret versions are not listed in the response.
    +        This operation requires the secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified, the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SecretItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.SecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_secrets.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('SecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_secrets.metadata = {'url': '/secrets'}
    +
    +    def get_secret_versions(
    +            self, vault_base_url, secret_name, maxresults=None, cls=None, **kwargs):
    +        """List all versions of the specified secret.
    +
    +        The full secret identifier and attributes are provided in the response.
    +        No values are returned for the secrets. This operations requires the
    +        secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified, the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SecretItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.SecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_secret_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('SecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_secret_versions.metadata = {'url': '/secrets/{secret-name}/versions'}
    +
    +    def get_deleted_secrets(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """Lists deleted secrets for the specified vault.
    +
    +        The Get Deleted Secrets operation returns the secrets that have been
    +        deleted for a vault enabled for soft-delete. This operation requires
    +        the secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedSecretItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedSecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_secrets.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedSecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_secrets.metadata = {'url': '/deletedsecrets'}
    +
    +    def get_deleted_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Gets the specified deleted secret.
    +
    +        The Get Deleted Secret operation returns the specified deleted secret
    +        along with its attributes. This operation requires the secrets/get
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}
    +
    +    def purge_deleted_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Permanently deletes the specified secret.
    +
    +        The purge deleted secret operation removes the secret permanently,
    +        without the possibility of recovery. This operation can only be enabled
    +        on a soft-delete enabled vault. This operation requires the
    +        secrets/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}
    +
    +    def recover_deleted_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Recovers the deleted secret to the latest version.
    +
    +        Recovers the deleted secret in the specified vault. This operation can
    +        only be performed on a soft-delete enabled vault. This operation
    +        requires the secrets/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the deleted secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}/recover'}
    +
    +    def backup_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Backs up the specified secret.
    +
    +        Requests that a backup of the specified secret be downloaded to the
    +        client. All versions of the secret will be downloaded. This operation
    +        requires the secrets/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupSecretResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupSecretResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupSecretResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_secret.metadata = {'url': '/secrets/{secret-name}/backup'}
    +
    +    def restore_secret(self, vault_base_url, secret_bundle_backup, cls=None, **kwargs):
    +        """Restores a backed up secret to a vault.
    +
    +        Restores a backed up secret, and all its versions, to a vault. This
    +        operation requires the secrets/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_bundle_backup: The backup blob associated with a secret
    +         bundle.
    +        :type secret_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretRestoreParameters(secret_bundle_backup=secret_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_secret.metadata = {'url': '/secrets/restore'}
    +
    +    def get_storage_accounts(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """List storage accounts managed by the specified key vault. This
    +        operation requires the storage/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of StorageAccountItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.StorageAccountItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_storage_accounts.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('StorageListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_storage_accounts.metadata = {'url': '/storage'}
    +
    +    def get_deleted_storage_accounts(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """Lists deleted storage accounts for the specified vault.
    +
    +        The Get Deleted Storage Accounts operation returns the storage accounts
    +        that have been deleted for a vault enabled for soft-delete. This
    +        operation requires the storage/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedStorageAccountItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedStorageAccountItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_storage_accounts.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedStorageListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_storage_accounts.metadata = {'url': '/deletedstorage'}
    +
    +    def get_deleted_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Gets the specified deleted storage account.
    +
    +        The Get Deleted Storage Account operation returns the specified deleted
    +        storage account along with its attributes. This operation requires the
    +        storage/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedStorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedStorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedStorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}
    +
    +    def purge_deleted_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Permanently deletes the specified storage account.
    +
    +        The purge deleted storage account operation removes the secret
    +        permanently, without the possibility of recovery. This operation can
    +        only be performed on a soft-delete enabled vault. This operation
    +        requires the storage/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}
    +
    +    def recover_deleted_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Recovers the deleted storage account.
    +
    +        Recovers the deleted storage account in the specified vault. This
    +        operation can only be performed on a soft-delete enabled vault. This
    +        operation requires the storage/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}/recover'}
    +
    +    def backup_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Backs up the specified storage account.
    +
    +        Requests that a backup of the specified storage account be downloaded
    +        to the client. This operation requires the storage/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupStorageResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupStorageResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupStorageResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_storage_account.metadata = {'url': '/storage/{storage-account-name}/backup'}
    +
    +    def restore_storage_account(self, vault_base_url, storage_bundle_backup, cls=None, **kwargs):
    +        """Restores a backed up storage account to a vault.
    +
    +        Restores a backed up storage account to a vault. This operation
    +        requires the storage/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_bundle_backup: The backup blob associated with a
    +         storage account.
    +        :type storage_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageRestoreParameters(storage_bundle_backup=storage_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_storage_account.metadata = {'url': '/storage/restore'}
    +
    +    def delete_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Deletes a storage account. This operation requires the storage/delete
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedStorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedStorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedStorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    def get_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Gets information about a specified storage account. This operation
    +        requires the storage/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    def set_storage_account(self, vault_base_url, storage_account_name, resource_id, active_key_name, auto_regenerate_key, regeneration_period=None, storage_account_attributes=None, tags=None, cls=None, **kwargs):
    +        """Creates or updates a new storage account. This operation requires the
    +        storage/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param resource_id: Storage account resource id.
    +        :type resource_id: str
    +        :param active_key_name: Current active storage account key name.
    +        :type active_key_name: str
    +        :param auto_regenerate_key: whether keyvault should manage the storage
    +         account for the user.
    +        :type auto_regenerate_key: bool
    +        :param regeneration_period: The key regeneration time duration
    +         specified in ISO-8601 format.
    +        :type regeneration_period: str
    +        :param storage_account_attributes: The attributes of the storage
    +         account.
    +        :type storage_account_attributes:
    +         ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountCreateParameters(resource_id=resource_id, active_key_name=active_key_name, auto_regenerate_key=auto_regenerate_key, regeneration_period=regeneration_period, storage_account_attributes=storage_account_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.set_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    def update_storage_account(self, vault_base_url, storage_account_name, active_key_name=None, auto_regenerate_key=None, regeneration_period=None, storage_account_attributes=None, tags=None, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given storage
    +        account. This operation requires the storage/set/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param active_key_name: The current active storage account key name.
    +        :type active_key_name: str
    +        :param auto_regenerate_key: whether keyvault should manage the storage
    +         account for the user.
    +        :type auto_regenerate_key: bool
    +        :param regeneration_period: The key regeneration time duration
    +         specified in ISO-8601 format.
    +        :type regeneration_period: str
    +        :param storage_account_attributes: The attributes of the storage
    +         account.
    +        :type storage_account_attributes:
    +         ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountUpdateParameters(active_key_name=active_key_name, auto_regenerate_key=auto_regenerate_key, regeneration_period=regeneration_period, storage_account_attributes=storage_account_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    def regenerate_storage_account_key(self, vault_base_url, storage_account_name, key_name, cls=None, **kwargs):
    +        """Regenerates the specified key value for the given storage account. This
    +        operation requires the storage/regeneratekey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param key_name: The storage account key name.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountRegenerteKeyParameters(key_name=key_name)
    +
    +        # Construct URL
    +        url = self.regenerate_storage_account_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountRegenerteKeyParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    regenerate_storage_account_key.metadata = {'url': '/storage/{storage-account-name}/regeneratekey'}
    +
    +    def get_sas_definitions(
    +            self, vault_base_url, storage_account_name, maxresults=None, cls=None, **kwargs):
    +        """List storage SAS definitions for the given storage account. This
    +        operation requires the storage/listsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SasDefinitionItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.SasDefinitionItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_sas_definitions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('SasDefinitionListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_sas_definitions.metadata = {'url': '/storage/{storage-account-name}/sas'}
    +
    +    def get_deleted_sas_definitions(
    +            self, vault_base_url, storage_account_name, maxresults=None, cls=None, **kwargs):
    +        """Lists deleted SAS definitions for the specified vault and storage
    +        account.
    +
    +        The Get Deleted Sas Definitions operation returns the SAS definitions
    +        that have been deleted for a vault enabled for soft-delete. This
    +        operation requires the storage/listsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedSasDefinitionItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedSasDefinitionItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_sas_definitions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedSasDefinitionListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_sas_definitions.metadata = {'url': '/deletedstorage/{storage-account-name}/sas'}
    +
    +    def get_deleted_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, cls=None, **kwargs):
    +        """Gets the specified deleted sas definition.
    +
    +        The Get Deleted SAS Definition operation returns the specified deleted
    +        SAS definition along with its attributes. This operation requires the
    +        storage/getsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    def recover_deleted_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, cls=None, **kwargs):
    +        """Recovers the deleted SAS definition.
    +
    +        Recovers the deleted SAS definition for the specified storage account.
    +        This operation can only be performed on a soft-delete enabled vault.
    +        This operation requires the storage/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}/recover'}
    +
    +    def delete_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, cls=None, **kwargs):
    +        """Deletes a SAS definition from a specified storage account. This
    +        operation requires the storage/deletesas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    def get_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, cls=None, **kwargs):
    +        """Gets information about a SAS definition for the specified storage
    +        account. This operation requires the storage/getsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    def set_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, template_uri, sas_type, validity_period, sas_definition_attributes=None, tags=None, cls=None, **kwargs):
    +        """Creates or updates a new SAS definition for the specified storage
    +        account. This operation requires the storage/setsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param template_uri: The SAS definition token template signed with an
    +         arbitrary key.  Tokens created according to the SAS definition will
    +         have the same properties as the template.
    +        :type template_uri: str
    +        :param sas_type: The type of SAS token the SAS definition will create.
    +         Possible values include: 'account', 'service'
    +        :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +        :param validity_period: The validity period of SAS tokens created
    +         according to the SAS definition.
    +        :type validity_period: str
    +        :param sas_definition_attributes: The attributes of the SAS
    +         definition.
    +        :type sas_definition_attributes:
    +         ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SasDefinitionCreateParameters(template_uri=template_uri, sas_type=sas_type, validity_period=validity_period, sas_definition_attributes=sas_definition_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.set_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SasDefinitionCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    def update_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, template_uri=None, sas_type=None, validity_period=None, sas_definition_attributes=None, tags=None, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given SAS
    +        definition. This operation requires the storage/setsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param template_uri: The SAS definition token template signed with an
    +         arbitrary key.  Tokens created according to the SAS definition will
    +         have the same properties as the template.
    +        :type template_uri: str
    +        :param sas_type: The type of SAS token the SAS definition will create.
    +         Possible values include: 'account', 'service'
    +        :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +        :param validity_period: The validity period of SAS tokens created
    +         according to the SAS definition.
    +        :type validity_period: str
    +        :param sas_definition_attributes: The attributes of the SAS
    +         definition.
    +        :type sas_definition_attributes:
    +         ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SasDefinitionUpdateParameters(template_uri=template_uri, sas_type=sas_type, validity_period=validity_period, sas_definition_attributes=sas_definition_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SasDefinitionUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/version.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/version.py
    new file mode 100644
    index 000000000000..d92d63667368
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/_generated/v7_1_preview/version.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "7.1-preview"
    +
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/multi_api.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/multi_api.py
    index 8c8b343047fe..15cb1b2186e5 100644
    --- a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/multi_api.py
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/multi_api.py
    @@ -3,29 +3,64 @@
     # Licensed under the MIT License.
     # ------------------------------------
     from collections import namedtuple
    +from enum import Enum
    +from typing import TYPE_CHECKING
     
    +from ._generated.v7_1_preview.version import VERSION as V7_1_PREVIEW_VERSION
     from ._generated.v7_0.version import VERSION as V7_0_VERSION
     from ._generated.v2016_10_01.version import VERSION as V2016_10_01_VERSION
     
    -SUPPORTED_VERSIONS = (V7_0_VERSION, V2016_10_01_VERSION)
    -DEFAULT_VERSION = V7_0_VERSION
    +if TYPE_CHECKING:
    +    from typing import Union
    +
    +
    +class ApiVersion(Enum):
    +    """Key Vault API versions supported by this package"""
    +
    +    #: this is the default version
    +    V7_1_preview = V7_1_PREVIEW_VERSION
    +    V7_0 = V7_0_VERSION
    +    V2016_10_01 = V2016_10_01_VERSION
    +
    +
    +DEFAULT_VERSION = ApiVersion.V7_1_preview
     
     GeneratedApi = namedtuple("GeneratedApi", ("models", "client_cls", "config_cls"))
     
     
     def load_generated_api(api_version, aio=False):
    -    # type: (str, bool) -> GeneratedApi
    +    # type: (Union[ApiVersion, str], bool) -> GeneratedApi
         api_version = api_version or DEFAULT_VERSION
    -    if api_version == V7_0_VERSION:
    -        from ._generated.v7_0 import models
    +    try:
    +        # api_version could be a string; map it to an instance of ApiVersion
    +        # (this is a no-op if it's already an instance of ApiVersion)
    +        api_version = ApiVersion(api_version)
    +    except ValueError:
    +        # api_version is unknown to ApiVersion
    +        raise NotImplementedError(
    +            "This package doesn't support API version '{}'. ".format(api_version)
    +            + "Supported versions: {}".format(", ".join(v.value for v in ApiVersion))
    +        )
    +
    +    if api_version == ApiVersion.V7_1_preview:
    +        from ._generated.v7_1_preview import models
    +
    +        if aio:
    +            from ._generated.v7_1_preview.aio import KeyVaultClient
    +            from ._generated.v7_1_preview.aio._configuration_async import KeyVaultClientConfiguration
    +        else:
    +            from ._generated.v7_1_preview import KeyVaultClient  # type: ignore
    +            from ._generated.v7_1_preview._configuration import KeyVaultClientConfiguration  # type: ignore
    +    elif api_version == ApiVersion.V7_0:
    +        from ._generated.v7_0 import models  # type: ignore
     
             if aio:
    -            from ._generated.v7_0.aio import KeyVaultClient
    -            from ._generated.v7_0.aio._configuration_async import KeyVaultClientConfiguration
    +            from ._generated.v7_0.aio import KeyVaultClient  # type: ignore
    +            from ._generated.v7_0.aio._configuration_async import KeyVaultClientConfiguration  # type: ignore
             else:
                 from ._generated.v7_0 import KeyVaultClient  # type: ignore
                 from ._generated.v7_0._configuration import KeyVaultClientConfiguration  # type: ignore
    -    elif api_version == V2016_10_01_VERSION:
    +    elif api_version == ApiVersion.V2016_10_01:
             from ._generated.v2016_10_01 import models  # type: ignore
     
             if aio:
    @@ -34,10 +69,5 @@ def load_generated_api(api_version, aio=False):
             else:
                 from ._generated.v2016_10_01 import KeyVaultClient  # type: ignore
                 from ._generated.v2016_10_01._configuration import KeyVaultClientConfiguration  # type: ignore
    -    else:
    -        raise NotImplementedError(
    -            "This package doesn't support API version '{}'. ".format(api_version)
    -            + "Supported versions: {}".format(", ".join(SUPPORTED_VERSIONS))
    -        )
     
         return GeneratedApi(models=models, client_cls=KeyVaultClient, config_cls=KeyVaultClientConfiguration)
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_version.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_version.py
    index f16e7f347a3e..669c806c6fdb 100644
    --- a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_version.py
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_version.py
    @@ -3,4 +3,4 @@
     # Licensed under the MIT License.
     # ------------------------------------
     
    -VERSION = "4.1.0"
    +VERSION = "4.2.0b2"
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/aio/_client.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/aio/_client.py
    index 1ca0191daa57..df2d77b36b1a 100644
    --- a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/aio/_client.py
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/aio/_client.py
    @@ -26,7 +26,8 @@ class KeyClient(AsyncKeyVaultClientBase):
         :param str vault_url: URL of the vault the client will access
         :param credential: An object which can provide an access token for the vault, such as a credential from
             :mod:`azure.identity.aio`
    -    :keyword str api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :keyword api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :paramtype api_version: ~azure.keyvault.keys.ApiVersion
         :keyword transport: transport to use. Defaults to
          :class:`~azure.core.pipeline.transport.AioHttpTransport`.
         :paramtype transport: ~azure.core.pipeline.transport.AsyncHttpTransport
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/crypto/_client.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/crypto/_client.py
    index 899904e7e783..f41cb3cc8dc5 100644
    --- a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/crypto/_client.py
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/crypto/_client.py
    @@ -34,7 +34,8 @@ class CryptographyClient(KeyVaultClientBase):
         :type key: str or :class:`~azure.keyvault.keys.KeyVaultKey`
         :param credential: An object which can provide an access token for the vault, such as a credential from
             :mod:`azure.identity`
    -    :keyword str api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :keyword api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :paramtype api_version: ~azure.keyvault.keys.ApiVersion
         :keyword transport: transport to use. Defaults to :class:`~azure.core.pipeline.transport.RequestsTransport`.
         :paramtype transport: ~azure.core.pipeline.transport.HttpTransport
     
    diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/crypto/aio/_client.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/crypto/aio/_client.py
    index 28de7c8324fe..e0f8d3467dbf 100644
    --- a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/crypto/aio/_client.py
    +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/crypto/aio/_client.py
    @@ -33,7 +33,8 @@ class CryptographyClient(AsyncKeyVaultClientBase):
         :type key: str or :class:`~azure.keyvault.keys.KeyVaultKey`
         :param credential: An object which can provide an access token for the vault, such as a credential from
             :mod:`azure.identity.aio`
    -    :keyword str api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :keyword api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :paramtype api_version: ~azure.keyvault.keys.ApiVersion
         :keyword transport: transport to use. Defaults to :class:`~azure.core.pipeline.transport.AioHttpTransport`.
         :paramtype transport: ~azure.core.pipeline.transport.AsyncHttpTransport
     
    diff --git a/sdk/keyvault/azure-keyvault-keys/setup.py b/sdk/keyvault/azure-keyvault-keys/setup.py
    index 96b7f303066e..d752a4f1646a 100644
    --- a/sdk/keyvault/azure-keyvault-keys/setup.py
    +++ b/sdk/keyvault/azure-keyvault-keys/setup.py
    @@ -58,7 +58,7 @@
         author_email="azurekeyvault@microsoft.com",
         url="https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-keyvault-keys",
         classifiers=[
    -        "Development Status :: 5 - Production/Stable",
    +        "Development Status :: 4 - Beta",
             "Programming Language :: Python",
             "Programming Language :: Python :: 2",
             "Programming Language :: Python :: 2.7",
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_ec_verify_local.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_ec_verify_local.yaml
    index 6f4c157fa9bc..1de7d797e937 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_ec_verify_local.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_ec_verify_local.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Wed, 22 Jan 2020 19:14:50 GMT
    +      - Thu, 05 Mar 2020 23:16:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.891
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,21 +69,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256/8790e36e9659494e9571616f271de8ba","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"ZOV0wkSxEFNJDCM5VqXho1fRdHQKa_vBZKsLrMluPEM","y":"fprVETOwkDHgTUBxSLD0XWxdiNqd1Zq8nkPSD9nic08"},"attributes":{"enabled":true,"created":1579720491,"updated":1579720491,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256/4c8c1ee7110a40099262ae4f948545d1","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"tNcCLps_1kQrPMPy3oVx-6jXQZan_ZDBwPZXzFQ2ack","y":"IksEUKSX2SaxbVFUVaqZ0eTbQgSlO8l2x8O54UaGrzE"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '373'
    +      - '385'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Wed, 22 Jan 2020 19:14:50 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.891
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -121,12 +121,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256/8790e36e9659494e9571616f271de8ba/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256/4c8c1ee7110a40099262ae4f948545d1/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256/8790e36e9659494e9571616f271de8ba","value":"ppPFyGmSYvinkIWaZ-oo4ucGYJ-81NSiJUnfANogH7pAop2sKL3dzqOhJTJT7M7XymY0oSElqtIf6em-lmahuQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256/4c8c1ee7110a40099262ae4f948545d1","value":"gbD5u1VGfQ5d6pl0A0SrBpAIKOOjQFtqmeaDjcpeB2f3YJ45OvWZwZfmBWTKrBJaX1d7DK3tiBkua316zTuYLA"}'
         headers:
           cache-control:
           - no-cache
    @@ -135,7 +135,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Wed, 22 Jan 2020 19:14:50 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,11 +149,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.891
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -173,21 +173,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256K/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256K/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256K/9baba6a2776e4a7487b19747614bf91f","kty":"EC","key_ops":["sign","verify"],"crv":"P-256K","x":"yzPxzqweo3nq6IPzOF7nTRY-XKW2iMyWnrjiPQnGmXQ","y":"qTJwSgFYfC4QdRlz55usJo0chHgxO3xZGQdxjX92XVc"},"attributes":{"enabled":true,"created":1579720491,"updated":1579720491,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256K/7de3aade9d854687a2e52580c0f99937","kty":"EC","key_ops":["sign","verify"],"crv":"P-256K","x":"1Va6yNORZCSNTvpzRTV9vZD3RmSPJmj1F_5sUyLx7RQ","y":"gOZ6ZMtWVnwk_93n3hSNSCcEawzJBgXlf2G2RuNd5Pk"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '375'
    +      - '387'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Wed, 22 Jan 2020 19:14:51 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -201,11 +201,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.891
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -225,12 +225,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256K/9baba6a2776e4a7487b19747614bf91f/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256K/7de3aade9d854687a2e52580c0f99937/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256K/9baba6a2776e4a7487b19747614bf91f","value":"K7McIuZ5zMSct49LvB8YavfYcDmyRtPy6m1EF-NoaB2zdOy0DkHKtCsMowz-VHCdfIUGxNQFQeZiqE0Ng5_Jsw"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256K/7de3aade9d854687a2e52580c0f99937","value":"PZMhA0imgC4MUE-H1oMpJpT3o-3xnx6YiHONKrQ9nzJigrFEdtUGD1DWldEoLbeJWERGfTU3Ya3rKV7PFNIz_w"}'
         headers:
           cache-control:
           - no-cache
    @@ -239,7 +239,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Wed, 22 Jan 2020 19:14:50 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -253,11 +253,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.891
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -277,21 +277,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-384/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-384/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-384/71216ab2fae7463fa073be63efe50d42","kty":"EC","key_ops":["sign","verify"],"crv":"P-384","x":"NvtmnQhICToJEMa6y5UimWTgXB9dSzx_uzeLmnLbe_2JqhJUFAz7jwssncBDL6dG","y":"Jb09pcPx8gkg4ORJPDix0Ll2jffg4qfAlDjXyK95sd2OKi7daXuRBtjRNZ7zgRxP"},"attributes":{"enabled":true,"created":1579720491,"updated":1579720491,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-384/e6c0b7d0bc1544848c56addf0f20da63","kty":"EC","key_ops":["sign","verify"],"crv":"P-384","x":"dLWfPlhrpn4pBNDIUIEZZlwKTjHROXTwyAVWeWjk_Kc6qavj-OM9LGKayUW70iOy","y":"GL3ZG1hg9rOAjnNb_aq5jLeYR8JWo6e6jdBd7nUBcZo_Iwy4RrrVokIX5g-WLf7k"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '415'
    +      - '427'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Wed, 22 Jan 2020 19:14:51 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -305,11 +305,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.891
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -329,12 +329,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-384/71216ab2fae7463fa073be63efe50d42/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-384/e6c0b7d0bc1544848c56addf0f20da63/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-384/71216ab2fae7463fa073be63efe50d42","value":"AwxqSLABmB6yy_wNdk8eTrkMSKStbzozL8pCagIDlLlVthYpMLFvCjXl1CnnYjNLeXE3p-GdUAswlhhtlUjdRRRFZ4NSdmcB96gtmWbqOkZuYUBUBqouqEJ85N3V2Fkp"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-384/e6c0b7d0bc1544848c56addf0f20da63","value":"-pncbu9GABhzvmAIvTq91j4f5TrFNx_IahyBN0aa6Dd2j-JrWVZU0JYzc9Nenl5pTFMoHIp9Y8EHimYaqhgWPT-i79t2vU1vPH38je823xyDtRUKMLccx0KUhM_Iu43c"}'
         headers:
           cache-control:
           - no-cache
    @@ -343,7 +343,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Wed, 22 Jan 2020 19:14:51 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -357,11 +357,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.891
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -381,21 +381,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-521/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-521/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-521/a75d649e3f9344e79da1dcbad7f6240d","kty":"EC","key_ops":["sign","verify"],"crv":"P-521","x":"AVhP5Des3kGiI7IW0xUpBxzSkWHu9AdriOpdkyjhDVCPa-52AczeP558paXSSoikSY_EEufyiZhjJpXCJ6sXX3Nd","y":"AeasI9OFsH9fbo6wbwy1jCeH-9lVPPkclVInllNRjeye8DAWTUTT4yhPuPurqzjMgTrNhunsU3qQfOebvA8-VDCe"},"attributes":{"enabled":true,"created":1579720492,"updated":1579720492,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-521/b737d52b3fa04f6b97f90c23cc6cce92","kty":"EC","key_ops":["sign","verify"],"crv":"P-521","x":"AXt3UJ1ccDv71wFeAxdZ8ESbAnoDSoI2kwBZt63GTc4QuHBEcFHKZJoceqGLoAT1U1tvHGsmVQLrHIkpzvD7vpiX","y":"ANx8n0zYND_N0qijtvfVwL_7JEur5iHdaO5qm1YSAFIq76a1lXRbfzyB9X5cw14sKR1NFA7-ud84ZpyczJt_m-HS"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '463'
    +      - '475'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Wed, 22 Jan 2020 19:14:51 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -409,11 +409,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.891
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -433,12 +433,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-521/a75d649e3f9344e79da1dcbad7f6240d/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-521/b737d52b3fa04f6b97f90c23cc6cce92/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-521/a75d649e3f9344e79da1dcbad7f6240d","value":"AHvYuiDYcVYKiOGyOusm4UUDIibltMzIpsuSS_dMlSAqkZoi6V6tQOdzmUlHGbnGbDUgu8dxnIRgKWJSoDcTG4YBAYRA-ogShVHQ17Xlp0jS7AQXu0sECQMVlkfID5DWMNZ-Ss_CjnCPFrLT_O0czzT1FzH9LW9xuz0RUmApi4I3Pl3I"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-521/b737d52b3fa04f6b97f90c23cc6cce92","value":"AOy6PoxwwjE98GNN4kEf3x_s0JN-1tzm24UcbdNecJeikkZx4UB1i9pM1WSDufptmYmcbnAUuJw6Yk0aTeeR8676AE9DN50a5xpSW4S9BBvnxKpsD2zgisHOL4GbKnUt3g7hEz5zm860DPYR5flcxUGp5dIlifE9hQPe-qBFiaSpaI2g"}'
         headers:
           cache-control:
           - no-cache
    @@ -447,7 +447,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Wed, 22 Jan 2020 19:14:51 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -461,11 +461,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.891
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_encrypt_and_decrypt.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_encrypt_and_decrypt.yaml
    index 9a2c743f60f7..ad3b63f79e41 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_encrypt_and_decrypt.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_encrypt_and_decrypt.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/keys/keycrypt899e11dd?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keycrypt899e11dd?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:35 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,25 +45,25 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 401
           message: Unauthorized
     - request:
    -    body: '{"key": {"key_ops": ["encrypt", "decrypt", "sign", "verify", "wrapKey",
    -      "unwrapKey"], "n": "AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU",
    -      "qi": "AJ_nrkLpK8BPzVeARkvSHQyKwMWZ-a8CD95qsKfn0dOZAvXY-2xhQYTEwbED-0bpTNEKbIpA-ZkaHygmnzJkNbbFAnb9pkkzU8ZQqDP3JNgMfVIroWx58Oth9nJza2j7i-MkPRCUPEq3Ao0J52z7WJIiLji8TTVYW_NaiM1oxzsH",
    -      "e": "AQAB", "q": "AMPcZrZBqbc82DO8Q5zTT8ZXRGWrW36KktMllaIk1W2RHnRiQiW0jBWmcCgqUcQNHa1LwumjyNqwx28QBS37BTvG7ULGUoio6LrOeoiBGEMj-U19sX6m37plEhj5Mak7j3OPPY_T9rohjTW5aGGg9YSwq4jdz0RrmBX00ofYOjI3",
    +    body: '{"key": {"kty": "RSA", "key_ops": ["encrypt", "decrypt", "sign", "verify",
    +      "wrapKey", "unwrapKey"], "n": "AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU",
    +      "e": "AQAB", "d": "Ynx9JGaBSP4iUsf6ZJ6opantRNdcdmzaQrKbZg6ZQE8Ohi1FYabJWvaoPSE-CiJEsDzShXZHMhUHN4X7Bn8BXaGQhK3p9HXgiwQKmix7oAJTu4ElUIyd8UC3UWHSZr40el4PaQD-HYu_eMzCXus34MnRiNbh_BUWm6T-Eidhk9d3kNIyaSi9YNDQHW6tjWrEhhq63O7JU1j9ZonFChZxpKk20jdkQKQURVAdpOdL-5j4I70ZxFuU6wHZj8DS8oRQfwGOvZKbgYDb5jgf3UNL_7eACqq92XPVX56vm7iKbqeyjCqAIx5y3hrSRIJtZlWCwjYnYQGd4unxDLi8wmJWSQ",
           "dp": "AMmhWb5yZcu6vJr8xJZ-t0_likxJRUMZAtEULaWZt2DgODj4y9JrZDJP6mvckzhQP0WXk2NuWbU2HR5pUeCN2wieG1B76VKoH76vfnaJDqT1NuJVBcP2SLHog3ffwZtMME5zjfygchG3kihqOSpwTQ9ETAqAJTkRC38fEhwAz_Cp",
    -      "kty": "RSA", "p": "ANHerI1o3dLB_VLVmZZVss8VZSYN5SaeQ_0qhfOSgOFwj__waCFmy2EG7l6l6f_Z-Y0L7Mn_LNov68lyWSFa2EuQUeVj4UoFHc5Di8ZUGiSsTwFM-XMtNuv8HmGgDYLL5BIJD3eTz71LdgW-Ez38OZH34b7VeG8zfeUDb8Hi30zz",
    -      "d": "Ynx9JGaBSP4iUsf6ZJ6opantRNdcdmzaQrKbZg6ZQE8Ohi1FYabJWvaoPSE-CiJEsDzShXZHMhUHN4X7Bn8BXaGQhK3p9HXgiwQKmix7oAJTu4ElUIyd8UC3UWHSZr40el4PaQD-HYu_eMzCXus34MnRiNbh_BUWm6T-Eidhk9d3kNIyaSi9YNDQHW6tjWrEhhq63O7JU1j9ZonFChZxpKk20jdkQKQURVAdpOdL-5j4I70ZxFuU6wHZj8DS8oRQfwGOvZKbgYDb5jgf3UNL_7eACqq92XPVX56vm7iKbqeyjCqAIx5y3hrSRIJtZlWCwjYnYQGd4unxDLi8wmJWSQ",
    -      "dq": "AKC9TAo9n2RDaggjdLXK8kiLrBVoaWFTpqXkzYXRhtsx4vWPAkxhfSnze05rVMl6HiXv7FnE0f0wYawzUJzoyuXBH0zS6D9BqCZPeF543AmWB27iPf38Q9Z8Rjr6oBgMSnGDV_mm8nDVQkeaDyE4cOZh-5UKvKShTKKQVwunmDNH"}}'
    +      "dq": "AKC9TAo9n2RDaggjdLXK8kiLrBVoaWFTpqXkzYXRhtsx4vWPAkxhfSnze05rVMl6HiXv7FnE0f0wYawzUJzoyuXBH0zS6D9BqCZPeF543AmWB27iPf38Q9Z8Rjr6oBgMSnGDV_mm8nDVQkeaDyE4cOZh-5UKvKShTKKQVwunmDNH",
    +      "qi": "AJ_nrkLpK8BPzVeARkvSHQyKwMWZ-a8CD95qsKfn0dOZAvXY-2xhQYTEwbED-0bpTNEKbIpA-ZkaHygmnzJkNbbFAnb9pkkzU8ZQqDP3JNgMfVIroWx58Oth9nJza2j7i-MkPRCUPEq3Ao0J52z7WJIiLji8TTVYW_NaiM1oxzsH",
    +      "p": "ANHerI1o3dLB_VLVmZZVss8VZSYN5SaeQ_0qhfOSgOFwj__waCFmy2EG7l6l6f_Z-Y0L7Mn_LNov68lyWSFa2EuQUeVj4UoFHc5Di8ZUGiSsTwFM-XMtNuv8HmGgDYLL5BIJD3eTz71LdgW-Ez38OZH34b7VeG8zfeUDb8Hi30zz",
    +      "q": "AMPcZrZBqbc82DO8Q5zTT8ZXRGWrW36KktMllaIk1W2RHnRiQiW0jBWmcCgqUcQNHa1LwumjyNqwx28QBS37BTvG7ULGUoio6LrOeoiBGEMj-U19sX6m37plEhj5Mak7j3OPPY_T9rohjTW5aGGg9YSwq4jdz0RrmBX00ofYOjI3"}}'
         headers:
           Accept:
           - application/json
    @@ -76,21 +76,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/keys/keycrypt899e11dd?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keycrypt899e11dd?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keycrypt899e11dd/a41683f487864f6ab95c972d9e2efd29","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB"},"attributes":{"enabled":true,"created":1575676531,"updated":1575676531,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keycrypt899e11dd/1b31841bed8b4b0594dc855e0c661242","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB"},"attributes":{"enabled":true,"created":1583450196,"updated":1583450196,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '664'
    +      - '676'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:35 GMT
           expires:
           - '-1'
           pragma:
    @@ -104,11 +104,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -124,13 +124,13 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/keycrypt899e11dd/a41683f487864f6ab95c972d9e2efd29?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keycrypt899e11dd/1b31841bed8b4b0594dc855e0c661242?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Forbidden","message":"Operation is not allowed.\r\nOperation:
    -        \"get\"\r\nCaller: appid=3640fa99-2ed4-4816-92c9-3c61066adca2;oid=00000000-0000-0000-0000-000000000000;numgroups=0;iss=https://sts.windows.net/00000000-0000-0000-0000-000000000000/\r\nVault:
    +        \"get\"\r\nCaller: appid=3525c2f5-9605-4d01-b30b-59272b48be7f;oid=00000000-0000-0000-0000-000000000000;numgroups=0;iss=https://sts.windows.net/00000000-0000-0000-0000-000000000000/\r\nVault:
             vaultname;location=westus","innererror":{"code":"ForbiddenByPolicy"}}}'
         headers:
           cache-control:
    @@ -140,7 +140,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:31 GMT
    +      - Thu, 05 Mar 2020 23:16:36 GMT
           expires:
           - '-1'
           pragma:
    @@ -154,11 +154,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -178,12 +178,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keycrypt899e11dd/a41683f487864f6ab95c972d9e2efd29/encrypt?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keycrypt899e11dd/1b31841bed8b4b0594dc855e0c661242/encrypt?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/keycrypt899e11dd/a41683f487864f6ab95c972d9e2efd29","value":"BB4tjF5G1pSnV6gei42S8-nbHMGOFLAPbIiIkpDUD_rLuDiLQ_E0DrQvESndNw5zvH3vUdvdVWL7URb35_IZHpKibcFwSkbDdoQaGsNB06lGkZpEwcujIfouxaAYex3EP1IHhuzNzcFQ9DoCfOy_VoC6C84w32kaL78uebXdy8-7c_UC81saRmd9iXglGgJ1p0B5QGtaEZIVj6jJn0q-jOlbKHteY2z_wPlWKJV5SACY1_D1Zv9-v_Ah-qUZKdDFrD3sds3E0epWEre3tce-DjRykWdP3gW7nKVnehFGTtmD0mcHqhwQZP5Kn0Jn7IpVFHDHUzNwOVhjFdJMCzHMeA"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/keycrypt899e11dd/1b31841bed8b4b0594dc855e0c661242","value":"mKCfofLrsb8OsXOmStlkVpMMSFiL2yKsLah7g-Ly86ZVzsLLaaybHbN4SHLb2yEnOfEYG0dMG6umUXTaBzcUewc5B6rmhAjNVrNqSXTVthXKy7InICopL5Elg42uZDbYeVyEOhZ6cQkf3CSl73S4R_N24KIVP77jU6OwZYuVqvrKIsYH2j7EWFYtbR-4Ckjb3aNJcVjCkgE46b0pG7p2FKrpG8zScHyP1HqEo1oBCO8k93kCil-pq-xBodvHGMmSXYtH3GLBHT-QxoWCgjrU5WiHW-AptGIL7YzReQo9gcUftkyIXiQyWWsvbIyjIqeKomSODA7o0xOAOZIDnMbdHw"}'
         headers:
           cache-control:
           - no-cache
    @@ -192,7 +192,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:31 GMT
    +      - Thu, 05 Mar 2020 23:16:36 GMT
           expires:
           - '-1'
           pragma:
    @@ -206,18 +206,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"alg": "RSA-OAEP", "value": "BB4tjF5G1pSnV6gei42S8-nbHMGOFLAPbIiIkpDUD_rLuDiLQ_E0DrQvESndNw5zvH3vUdvdVWL7URb35_IZHpKibcFwSkbDdoQaGsNB06lGkZpEwcujIfouxaAYex3EP1IHhuzNzcFQ9DoCfOy_VoC6C84w32kaL78uebXdy8-7c_UC81saRmd9iXglGgJ1p0B5QGtaEZIVj6jJn0q-jOlbKHteY2z_wPlWKJV5SACY1_D1Zv9-v_Ah-qUZKdDFrD3sds3E0epWEre3tce-DjRykWdP3gW7nKVnehFGTtmD0mcHqhwQZP5Kn0Jn7IpVFHDHUzNwOVhjFdJMCzHMeA"}'
    +    body: '{"alg": "RSA-OAEP", "value": "mKCfofLrsb8OsXOmStlkVpMMSFiL2yKsLah7g-Ly86ZVzsLLaaybHbN4SHLb2yEnOfEYG0dMG6umUXTaBzcUewc5B6rmhAjNVrNqSXTVthXKy7InICopL5Elg42uZDbYeVyEOhZ6cQkf3CSl73S4R_N24KIVP77jU6OwZYuVqvrKIsYH2j7EWFYtbR-4Ckjb3aNJcVjCkgE46b0pG7p2FKrpG8zScHyP1HqEo1oBCO8k93kCil-pq-xBodvHGMmSXYtH3GLBHT-QxoWCgjrU5WiHW-AptGIL7YzReQo9gcUftkyIXiQyWWsvbIyjIqeKomSODA7o0xOAOZIDnMbdHw"}'
         headers:
           Accept:
           - application/json
    @@ -230,12 +230,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keycrypt899e11dd/a41683f487864f6ab95c972d9e2efd29/decrypt?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keycrypt899e11dd/1b31841bed8b4b0594dc855e0c661242/decrypt?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/keycrypt899e11dd/a41683f487864f6ab95c972d9e2efd29","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/keycrypt899e11dd/1b31841bed8b4b0594dc855e0c661242","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control:
           - no-cache
    @@ -244,7 +244,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:31 GMT
    +      - Thu, 05 Mar 2020 23:16:36 GMT
           expires:
           - '-1'
           pragma:
    @@ -258,11 +258,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_encrypt_local.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_encrypt_local.yaml
    index b2d06ba1817e..808d5d4c7377 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_encrypt_local.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_encrypt_local.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/encrypt-local/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/encrypt-local/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:27 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,18 +45,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 401
           message: Unauthorized
     - request:
    -    body: '{"key_size": 4096, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 4096}'
         headers:
           Accept:
           - application/json
    @@ -69,21 +69,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/encrypt-local/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/encrypt-local/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/03df12cc67a846d08084a40fa827c986","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"yNn5BbXE1eE1UFp2FCq2Ru7RSrXL0tQZX9o8nc5rsF46ZNAMSnWndoDoxyKdaCBR2HbE_KLpyt6p9HIzGT91_QVP-dY13v0_F9sUB4JU4ZGybxQ_MDie8Rs_IFZHF-rAeUGfN7RFlSFkaEGsm7X0LmSimgybZmTKuyFuDIXjWPiG2ffL0pcIx7BOqK9xWeeAzOouwgdPlAV42r9IuDrezhqm0z8Hgtxrj3dSHNI5VfSC9rBBBwnUWXViqviNdwMSDwWjkn6otSKrtq5UrAOdkU0mS6qiAhXLN7x9_hPdcFiRcEFDNvEID9P9mLMIEDGeT4cbvMWWL0ltEFEF2FluUbncAhVMBMj4drHJFJMZXsEnPlx4jBCfsPwq_WWJiDiCJ4-PK2ylNWK8-QLy3fa4HifNwm8VBBZUF7K3Tf8mFapAdf5Mlfscj2TjVdGDFx7zIUgIquBq0EnaWvybZO48o171X83zsrXV8CauL6oaypwxxMUiOc0EPubPGd9DCYF2xEC3YDTQDwNc7TWcCxW17ejIlRJ9D8YX7ze1mvYlGho0AABrt3s_W5nDL_FQ6cWTCrADY83HMVOSWawUuxGl5qmjgViRmDFdvmbnV9_nuXJb9dKhuIGbTLxWffKEk59ZmcxbbYxIyNdMaqLWHIQa47tBdQ61DKC9KIZSkMPDMpk","e":"AQAB"},"attributes":{"enabled":true,"created":1575676531,"updated":1575676531,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/c573f85e49064ee6b3f84a6b70c1733a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nsozwvAvQAdEFvBVAzarc3ibjzYJ6rzQ9pkqAtFeJU-WSXug7rmtH1fMqPbpkiJ7GgDYH4aL6SHAsUQtnkiOtYuytybmZNE4lTOeUVmsLxwqH7j7onRgWpnmxZFncLnDzM6HFAbjFn4IZ-i1T3t3BE4fZi4R3WjqWDrW0RGxx8I4ra5ChUeMJgSWLL-AG_8owd7Og3Pm-Bjuxc9IQ-yJy1lSXLmDb6MjKIjEF481-SzISeKw2KxSVpgwPvGFCez3aiGm1PEzTJFGs4cW5-dXCDKuFbvqNYXsh3VMQqkjdi_tSOn3tsmx91AsnfAcLT330ONc5N4XdTTJoE1LSf-aSdUR2V6gOuWbU61-CPimQFe5I9oi4OyY8e8SRBNtw-BZWeIzoiQZLhMvBaNuaM81AE20bSLmGfOAhLWzzjki224w-pygb41aJthFfK2WtLx_6zPfpkoNkbuEmR4d4v2iOFMcfBqdtRoIwHEw8tflEH8JIHcXon-Ulp5WQe5G9G35-weddxPsSRfynoAB8ZcnXeeA6sLoOhhixagFuZYpoDIWFEHqemwbvSlAryegY-6IOWrnsW2_6D-gsvnWVwgTbbAYalprnj2Rv06GNnu5ALotXNFy9FmSP_lD-g9YC67kFfXa2N44yG-AE__w2KIyw9KFufHN2GpwIwzwESdBMi8","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1001'
    +      - '1013'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:31 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,18 +97,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"alg": "RSA-OAEP", "value": "bY_4PpOtYlesbtn_teS9RT0puSGcVbd0GS8WaSdkBM-9L2JlPzO8xNw9gbd0EX7hLL1lmxICzaqlyTz3EnR4SqNabB-b_ssgMEO-AP0RBL3QmlNReY69pKfqvAh2fhRfl0GZdfemShycmsJRdCLSqtKFVut5jYkF5S3GTU4HVBQiNk_4-h8v9Kk5A-2sleCjaHY_VW7IW-sM1AGun1rUBLagjQGICKJwfe9yogmfUerM76YI8gN2LGNiEooHF8fRadIEM3aUrJ1hEUuozceQSyTLZ3zct0UD6BEBwoINz33D_i7AE3UD59mmT79MNN8o5FpH1ycCYDC--DRLDRI2pQoY-oBxZBLJsZp_q0HCbkqdz3bna4OBZJ8m08-f448lEbx8UH3MC8uxQBJIq6xih5d5rZrrIXLmK9kzQfcxghgrewnMn0uf_ocdeq32bBdix8Y4plrMR0G9uyb9nQNyMs7qTLN6VHoiMlQ_nt6WajkDpNgyYHAvECBl3O8x0IcQeBGkaQNA3i19qiuUUuQTEZjthLFbuX3heGuboBaC1ohoBb86nCGUFn_NFJCwMuqq4lq0jY_NplprMKdcQ8dZYeqa0NfCHSwUOn09w3g9ZRt0PTST250RLVs9rwjUIkmnAYCjGKXGnBENp6QQX6GdTD1aa8uSr8gH0Iprl7rOwmc"}'
    +    body: '{"alg": "RSA-OAEP", "value": "F6pLgm9brkXY8TqfuqDUKkz7gTfk_UQ-kC5Oj3_pjo7Fzp-X8JkDeEYhCeod1Dplc8WJjF0ohQQOpSHD8Exp9XC77V8nEFELNsPYIr3Cz5aTYngXG79sdsrE5rBe2aMNdZjjM1TugXy0RxqKjDPTYWcJqIS2jMWP6EMwoBMqecDErwUj_0oaVVuF1TSXu41G7yQDW5h2Cgkub_1Ruh5Y9GqusdGqu9RIUbfendYn1a766TJtcbjJPQ1U2UuYiphfE1lAlvmhs5ZzYaCvWCaBbVty00g-4sqhuLIogWt4Ur5VPIwX1RbyZXVV1DLhoBgHPokXCDrVlTOEsdOCo5AuhQEFVs3xcsZYIJ-spnS0vCajCkU1RM6KofaubR7ZJJIOCDCIo6ug20lQoXqXkGNsRckb7tYETb3vk2KsJP5PpLzxR2bPbP6Y5pQimyWa4bT3341118zxyX-W9NEaNqBs0hb3nXGsFHH7RoFUKbOXRoG34yuM7mddqLjD_LspY7WZsDNFFid7FU4qcVLiruw3uV9bbYTD40OcZ4B4yAOj4jWc8EbhX0KD5gQNdt193qGY102ofKUJOEPNy82hq5wr6C90kwNfUKThT-k3atGLROtT9OOZAcGnOUN9qm4GOkMtVLIpHLqK8OkcA63O0VhPySyH5LlNptkGh2fIFJixYoo"}'
         headers:
           Accept:
           - application/json
    @@ -121,12 +121,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/encrypt-local/03df12cc67a846d08084a40fa827c986/decrypt?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/encrypt-local/c573f85e49064ee6b3f84a6b70c1733a/decrypt?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/03df12cc67a846d08084a40fa827c986","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/c573f85e49064ee6b3f84a6b70c1733a","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control:
           - no-cache
    @@ -135,7 +135,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,18 +149,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"alg": "RSA-OAEP-256", "value": "T--kpdOmNodiNbZm3ji2CHANYZN7KyKXoWXurweagpVtHP-oW55obg3lGxIfbKWBYdWMOxlkoXnVwPJaIuUsfx65JQzjX_VxgIDJoo7PiTZsElnAqQRWyibzBkOqy9BiaOhcXNjXdzUZGM8whPgX_wjGYhb06PUG6kg8Bq5k9rmGXKef8n-S7-9T4mW8Jh9MsZWJu5LIyghaF92z2gZwLF78_p5K3Z19RZ4a_5-9T7HiaOy6ZwmTg-5HmjwhOJzF-ZCiLnOkivLeHLkr7xiiRbKw1z32Om356vl8MiLtghzD5nEMqcgug9AUcR0Xbps_k7eKU0fAdH7wDTCtxzyUNK76v7fPITEYeKQFO2nOziU-ynMnmjJYehsx3suBd_KtQWcGSGpNLDV8fFaf4Y3yQNkrdhhvOyxhmQVZNaECAS6ETq3ELz0tcNRhrxjf-uofZjIDRtG6Ev_x7dNZR5Jek5ysNa5FhDsEPmTHiOUCAYYWQCpOz_-mDnvo6KM2B8fGDiV5ySI4-SeMJmM7UwegNqrH43R796HfunAIkbltdP7ZacYivGTGJ9saDXMBDC0pLM6i73mMZFPXb1tzjVMJhk8sTQQCdg5kK6u7H1_a2aYAS0oFWeAF_WmYX3HNbnEAniMuMSVXCdjgGuqFwPJ3df8ATRALnIK6PF6zCipvN8c"}'
    +    body: '{"alg": "RSA-OAEP-256", "value": "A7gIU3DNDG3w4Hc44dPQTu6vQdgPosrKbDMfHmaxeuSoG5TxcA4zynh_WAA_eWwkrZdau8kBrQ9p6mXT41SFvl_eNrNpV-JHbjRYlIDRqgR2pq5Ex8XAvWrEqMnUz7olTXgOwqXhJ76dC6-XpewtUQT7mg4LgA06b1U8z1jQafpFs7_EkPxHI1F2Rf5lPBtwDxi5U5ToDYf_0W4hORmJ1hjgWhIA0CwG8zjn3LMAbIBCrjrNy3mNZ526LauS3S61e9TTsT3lscok8Y81XcdtKgmOg_YwynErZHaW2lJBiCm9QEBFaTDlEFVRXTehOokR46nW-w0bb2sES6LWbB4uAEgSq0EK3u6lMsAl6tb7y4cASD7qoQqVXycYHbFt_gKrFpc4yVo4jy785g1J1vTVMc3vh_-sylZLXGKT_U12xxvwehMlmHlAfFT2rlYxPFJT8osv-gKZ7RzgpyPXxZOn0Ny4XcDZF8INf4FfglvgUGOL9P78_jLQSO76KGf0SiOzaXNCTo1iK_wAbbKOHUPLX0Mcuhjy7TSDUVHgEP7fvLOJf3oxCR1Kbd8WSKXiLpa9BEjlDPN1KlJuxV5JEYOrr8mC9cgOh64WRc_z0yxruSIMetfA6NSP5xzdVVb_BtVzW4LUqLEFtRNcjM5FBVjWKlbVSp04H2nSGI2msaG1y6c"}'
         headers:
           Accept:
           - application/json
    @@ -173,12 +173,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/encrypt-local/03df12cc67a846d08084a40fa827c986/decrypt?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/encrypt-local/c573f85e49064ee6b3f84a6b70c1733a/decrypt?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/03df12cc67a846d08084a40fa827c986","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/c573f85e49064ee6b3f84a6b70c1733a","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control:
           - no-cache
    @@ -187,7 +187,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -201,18 +201,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"alg": "RSA1_5", "value": "QEIrU8_7KpVdrfw9wF7JXUsxoBCki0hnlCGgiUkn74Fflcd5Iestmkf1pjYFkHeOhaKLsQmAhVseGGY1yODhR0BeDqNl4MrAPwC-Q858rnQ7nqeAwLD9KLg6QwrQTY-A6C-4Ba_b5sUK6ZaYsj9P0ERcBsUlKRcdqvIIgTE5-agwuMzZrTX3vwiK3KMaGEynjUpzAm0rSRJ8bIKTYriUFAMytzJ-YLzOsNUpzkv3YkpRgGcuS6iIO5b4N-9aNakHBnj1Dumx_ZS-cDYtxxMwITP57ekP39jU696eyHxD87cnIvAh3eBBvbJN47k51qJjITg4jK6mickV1QmUJ_apsCbvZ1VFX0tCrrVGnygKOKXewwKvijXkKZ4qwHxpUBv7d_gvwmmmD1y2Bsq88gQihtMGDLEMwhuJe-LvOWe5BKjWWegf99kVLhfBweVHk7Z1MsVr9flQuXEUpMTz3ZgeuH8imHsaHnxJKdQHqrGCDU75soTjnItgAM7ZjKXSJmhBVrnP8nlZDLl23WLoagFDJc8UY3JBcePWZtjEyjGNxXQdf9oeZSroFvVoFVe_kME8iMDm_oRlAjHkXvRkAi13n5S0B2GVjZSQ33QUdlVZbS306mc3Swxdg3CIcoWY0tw4CLYSDczaplG1deE-3lhms9ePUf9jmlTRNvRwCtlsYwc"}'
    +    body: '{"alg": "RSA1_5", "value": "W7fX5WFo-YPkARX3MrXqANd-qbeVgpQiHmPoWKEwLz5NHpzdUxGyBuSJtIrq65RdZhBLIRiNiivTEDYhJD3M2h1FwMEtqAfxn8a_EcDtlpAPlbSgQsShDvKSAGVxGrNgixOeuKfGplwQnKmrL57eF7Mih_x7sdRCbnRdvOZ6h8tGeAorxEHVVq2FVG32OxrBQExqPsBs04v1eBniV2fvptmVJMDL3bTexBV7uVbv2tEQCQAgIi0hqk2DwDXZXy1RUPTek621wDs4-6zkLv-I-0pXBhR2TuvO3aW0i8veiJs5OOikJwFP6MvfEtFWNWMHVD817skY-CIqgCeYKjlQzfDw905u9FL981zeNwIWIuDcwjh6VZg-4ibLHeXgXXcDnUdyezi0aoyQ-Z6OtAPhdcXJTX29BEi9Hdpb0WH4_cCqpQJcbe-gJuUFboXl1gqxVsjZuAfQe4N5wUFoZT7Zs0Uq08Au8TjW6gfY1ozI2TU62shBLyDp7bNEqzOhNROCNsBj9QjZw9zm3oVM-0nUrZHQoAIhKRXUX9bBflOofLPbxHYLFVFglZLe0f4MtImewW3ds0hq3BvTNYcyXsbQr1yk82dCs3CsmRtF1HUUjfzIFOF7Y9B3VOj3CtNOdyBwZT5CqP5jAKY1_akpeYvw163vgimdp8gW_IkqGKzIegA"}'
         headers:
           Accept:
           - application/json
    @@ -225,12 +225,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/encrypt-local/03df12cc67a846d08084a40fa827c986/decrypt?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/encrypt-local/c573f85e49064ee6b3f84a6b70c1733a/decrypt?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/03df12cc67a846d08084a40fa827c986","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/c573f85e49064ee6b3f84a6b70c1733a","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control:
           - no-cache
    @@ -239,7 +239,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -253,11 +253,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_rsa_verify_local.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_rsa_verify_local.yaml
    index 7f2fe9d41b1b..48988207405e 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_rsa_verify_local.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_rsa_verify_local.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:46:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,18 +45,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 401
           message: Unauthorized
     - request:
    -    body: '{"key_size": 2048, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 2048}'
         headers:
           Accept:
           - application/json
    @@ -69,21 +69,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"j-gjuN2XSJWsuhViC9vPfFQ8-Bqi205UDcWlTgqPgN66fTyQehuV4SObBcF2DUQ-Iz81UCJ5kwpOZJxrX3-cvg3q0CcsNDiSPAYQpctg4qj0SPT1EDOs1Lk2Xmffj_4vmxTyRtxjsQHabv84YbAsh83Kqsz2jXGW-DCZLma8cVAek9U7kdI1xJVmqWv6tpxKD_BriJcLF-AKNBLfB_3JtetpXQKsb4CbrWv2lZ8jMxgiuCgADOiMbIJ_KLdW5Gj7zZwQnRPyfjoVunLBpgjDSB-volnnBwAZGO5oGcAOlMEt4n8Oe21rZ6hYA53cGxuW4YgVJ6QhaMp-_Mh2LCBZVw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676531,"updated":1575676531,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"uIGFtCybY-Wf6cZZi3VhSEWm2iAkvaLJId2yJK0qEP-TYns7yTAVZMVbu1tjaeSJtggUaUWFjcjY5dPF7y4Tk0J8kB9Ae4MImvLnduaUunH5_VPO2LciyJAyIBPAqpDFfO9hpIMH2TeGibOe2SvAVcLAzW_1LEelLFr3Kym5qNQl3PvEJhI3Yci_uTCndx2QlwumGr9kn6qbN9wnOEWVFrFa6bgIJLeO7HQsatnmH6d648NYIE_cWD577JBnnI4BCvyw29AhLJhGSqYZrBgkhNHTcDi4PnicGyUTEybM-f2A23nfkZT_WrOajGMsWRijkYWcexuqb7l-kaYtZ9L3Zw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '662'
    +      - '674'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -121,12 +121,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7","value":"h1i71QYCkQjwGXpC_QVWtYfQcE8yWYFfeu3HrXrC86JMXjWBhIvsDwh0QadtE_UYZREdaX5eLqnm-rz5Ej5nnOB6y9cnvlioNx-S7kjBXgb4OtExKkQfif6nmRt6k2BjhKaIYXchA4g9P9FmRXnMSgwykOYyJB9dLJ91Abwvir0Q2HEMtYGDmsPBZMY4QZ_7pIglLnjzlqpbdja6KWMvZZz5IYweAVZ4VtySD_DLeuZ9pKRMkRpA4fw2YzbtkvaimRN-LeKCOnFGSGg8f4_7hk9H528wS3taclsw4s6s16nQgpN1ZlXvt_q553n13-vok3_PPufbWzgEAGgnuHIRbA"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a","value":"Lpt4BBRO_DtSRU3c1pg43Ef0EquEgnur_M7ebtgaZMID_OolQEWURpjUQVix2ezhNAYu2a3vf1JOngKh0jTAro3Oyy-jFKK7YOXZPlSjno43Wyjq9_-XAMijxv5dBMCzpXiyVhat68f0ela0cxHuLiZOkFq5xi0HfbAGVWaB96-gl_I33j2tUbtk3OyXb-VlDX4B5PJnWYU9m5F2dJBKf3RHha6aFa0JyDssFEtnN_9Kltt2sHJuj8E5AtoiMSFwpXbR57n-w9_HzuGw00eWcykjOHx09nZfZAmomEEcBSy0nyAA8nb4b2OSvEMvJBn2JMvH9YpSLsdBHXZE_5X24A"}'
         headers:
           cache-control:
           - no-cache
    @@ -135,7 +135,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,11 +149,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -173,12 +173,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7","value":"cWJDYuh_EuqI47THf19Ahg1Pw1uFSZYAYN-4A0bT632qlbGeGyTiw3IdEJb-CDbhOM_bgj72gycvPahAI2nf5TKuL0OuoMfSHzKFvJjPMWzw6SvZ5zG04DdH58QifoClAnpc9CibuwWy2STTNET7ZvmtV3XNCY8ftJAcYNsFeo8q6O1VyJPdb1tkaRJEoSCwMWFPcPagnQF89eQOpB8Gib6KVWZQSG-rniYlhE5N1Iqv33Zn5vdxNwtBU-aTQTsatJVDArXHrY3_RugBzW7tJPY14V6D5NAND83aYEeWiLHx117CY5b7BzGGaZ6g-dZobc8xg7YF7wt3dMJY7guLog"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a","value":"LCIG43VA6cmmHUnCy4K0KV-478joCJXA6lkF3OOcOS1ExefYHXurlh-7OsYlLbQYxmxo41Jr1bzkUJ3vN77iVIYWoxPGGOTi5v3vDvt-eUGRkZ4s5bWZKToFiVykV5Sh7wpz4Ngg4QYZa5seOYrAYvM6ac0tQq3e0SwUO68aYDNe6N2hcd01J-S_pB9jxVD6XcXDRnsE7WbtwWX8Pb_GYa2NDGSMaMK1ZLe--QAVdtxg-GJAElGMFxRCQy5kYYZ9YLCaA66GBEj-YDGKykhQcwXJWMNcP7XivuGZ1VJlV4-YMBciy-MeAJUoo-p6RZg4qRCLq6rM5CO62PNNGHDhzw"}'
         headers:
           cache-control:
           - no-cache
    @@ -187,7 +187,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -201,11 +201,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -225,12 +225,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7","value":"dzdibCXvjBUGpvHYEew9YTZj_0qM_9MaJCvRuHEYiTBqKZKeRfHCHM3Rr-HUW3Ka8z1OrHSGfQAan3Ns02sCDshQ-Iy0aakA1010yzr7K2Kf6YiIZ4Etutu4Y0I3UYlZbQzG4jsOrFtlUoGi90OMk_k4qnauO8rclk6iJ_IXPGRYnN75zoUvvQ-GdAvU5NpGcZWWlIE8r1IcFZZX8enWCiKBuBRzWHO-hrQmmSYxOrHEG7s1ylRoPBo4xa5SujV557UBrRWGOTeIqElgszC04YLQ41dMhpThEEjxgpU2wTbzOHjgI0bKSOSz2MkgH5iS-Ge3axCFFaMGdu31PKcPTw"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a","value":"nsWLfkTDNLzSxOxGSIfJEY-492Lu_XUNfRtp8wzf9c4iPO0NPpbRYuyRpgYXViUXvVSL8jaR1DIT0srnAQmONonobk_bjf5AwVCjFNTKydkYove3plSxzFoQJJviutrw8iIfx29zuAYjRmWBLW0w-5t44YnRTys2AY4xRpIzZGDP0tj0pdQwMYpv1ye5ktps-nM-pBlkgzUveLo_rlgfxa9wuU9qAJPs81QjYQejn4aIKOHsyd5bkkYO_y6zArIcTfDxcb8Y0pNbVzI1mFnOweyKjxXl7XJu-OkO_A_GSXmIha8aybfnXvJvlcUInHQ7oUBnZ1CEDnY_Sz_cnOSaNw"}'
         headers:
           cache-control:
           - no-cache
    @@ -239,7 +239,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -253,11 +253,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -277,12 +277,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7","value":"N0-xaSMsc3AxfcJKNAoy1FqVAek34CDkX_P9wXPrFWdgvl8p66_m_O8Xpi9t1C0sAoEvJPz-zgaXJpsYZYwaSDs9mnMIGzOUAD22PcwfuSOjk1HS0cfmspuOIRxRcRIhAKClOPqTGJOR1fVirSOI_qq6v_8cstv4cMGJXjeeMykxymGGoEqb4bHWux3b7qoKLd5-267r21zXhM7yixE9Mv_6WvOGwUgNYem7C1xoOyMa7E3z4Gknpqdh_DedVDZZUy5BkcC77VgFV2SduBHBGlLhPfdz7NCiHJZG2hq5icF6CSkFUEPArfXW3SyLYKx_u5qQZEd088YORTe8dY-FmA"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a","value":"Raz5dO8zk1AyL1N-lQsgHpx0kI2THyfdco2lWYLUXSxrVtOBzU-GL1qdWqV0RzrPkv4sV7hNp0KEl_rXxD-OjrgIcja-hpwz7Aexaxmtofw4DEA0YUd8ix8-D8hF41cdgQzpfLAY8IIXPzDNrGN0PaOpdYFAQm7F_YJDubE4-kkwbuEqnQw8n1E8d-v-SSFXyueaWACamIne_6U_b-N-VUywBfZpRKz9csfPuTI3LWK-dErdVlX0kahsKvBjIvFBANoRv8ZzJXrHG2TLEe60DlU4pjbsM8XIax4RIGLaLW86cwJbg3bK9748s7jVEYU4IVCuvB8JHp5WeDPkwnOlCg"}'
         headers:
           cache-control:
           - no-cache
    @@ -291,7 +291,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -305,11 +305,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -329,12 +329,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7","value":"e7rKh6d-CTJE-bLdYDkLpOCWljsh_qhOckYrkqxeXKW1GxzO55RZ6yTARuIbx0zXAvKn1FPKCj3Q8EFsL51JbuY_RXdLqpLV7f1l5qVg-8eo7fhxDCV_YEI7mzmPT0XMqEl3w_fHZLSrf3hIM1AKOSr3lKUQOSw1y_hgW9vQb_OvSumJ3IGm18Y5a6ZKnJRNGaHo1tKvAUu-fEzQbU9OdOOlzWnViRWfw5ckPN6i14ieHKbcqSYrmKEsGlcUFPqpWmFKLSYCF21UN-2aO0oBKtoXJReF3AbdgyuoZBD-u1uYg_vBP53Pc0AzH5mUSArbb8Bv1MWk4ec785q_VXBWwA"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a","value":"bhu1HMWTAD4c4f5QksFOt857fH8Pxwned6-I3jIIo8-5AxrF3PtEqRWBhVBSSc2lOi5i7t__L8UdjmAabzKN-3A31JzK1dBZvRse3oyztL2u8GDLQG-E16aQHZ2Avd9j6UL70oA9aPn5zrwjDJiyPcxDgLEt30adCuenqAZu9zrGTuh5MSmrWd8i2hI7QVvOK0gbu3L6ClGx9WHBsXtSskZITTkTE9zNNhScyi5oahMCYv_RemXp4yu1nMkN7umNGbJSxsnNzLzlz2fxmZu2AzrvpwYCz7lIDPeHsnGGNNSwQ110AMbB_EvyFfuoIixMUmb6qkKJ0Mtc0WQ_LsSNAQ"}'
         headers:
           cache-control:
           - no-cache
    @@ -343,7 +343,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -357,11 +357,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -381,12 +381,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/b3f38ecada70480f827ab1235ef344d7","value":"WdQfN5CNZ-YhAfy5djx8oiKxvBmKjrn_ni99a3XKv1bBjh-l-b4MVIfJBsl1exG06w4RpYrj4xVZI3MO34VPNbqTOUT8HJvS07So9vno9c_CGOpgA9KK69kdi_J45rbqpv24s9Yg0HJwjSEBkSfzCClgnBUVw1Q0HsH253PH-mBDdtETwsSG5EZfoknmFgks5uz3UjxNyNiZ0XqN_65NeYS3eEsePkq0pSMYtV2PFfyHobuMKYhIbLiswsWn3d5d36r21-mac9tdsU9rDKhQuMyiFdstuW3_BjAJe6oznIw96m0lEsz_aOHKmBqQ68MuzEeO2nLAqY41LkNJ_zUYAw"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/73d61d9ba2024a399e67d03164bd896a","value":"Jn8qPXbJ4KAp_L2fZ4ot9Hch9RDYoicBlj62sx-aaXhnALxv2qhcfn_i3RFSoHaApX9g-IJP4E4xtBiCQ8WMR5HSqmwXD8EQAejAHyLoySDjUugdNyJ0758JelYekZ5aw0hVT2bWbzf6whvFS6PV7VHIwdgGOCWQP1y44K2oWw-Hcj9NV3eXC9tu0e84LfN0GlKSmts1FnH5oNWS_Fj1y_TiepzeZHzCnkcqEu68IPsfMNiR5XVYWATS8zzAvj73eFyNuHU4aRNXWGkrIHz_LCGFXT1J9JtmghK0dEbyHh7CpOsTxMwJ9viZmGs4N7THRzsoKidzffN8R95n9K9kuQ"}'
         headers:
           cache-control:
           - no-cache
    @@ -395,7 +395,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -409,18 +409,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"key_size": 3072, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 3072}'
         headers:
           Accept:
           - application/json
    @@ -433,21 +433,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tabcTsdxWZOkurX6K5wGvBJ0leIFoJ7VeLJAI8AJ-S2JAES64QjGP1PuRvFSu16Momy6KvSdBsv0Z4-P_VH_fI4LoH2mYgUC3ARn_EN9ww5Fh-yuDxypCbfaBWBJgFKsHOmtWbHZlFTa1qV3x1OcGUsIvuJOyMym3tQkCpFbeCRjpn5A8jUqotHlHagQQHYt6TuJFujKn_UPY0XtWP0g1zeBPMsdZNdaxcj0aLVV_6Bt3Anf7hvBl9EC8eOI7KG_iwi53uxHdhuPd64AOE6TFdOBJQf_McDAE4081gXbPdcClbEifnAiZSt54pBaFlofL3gWHq2_KolINiDjDGNM6rDcBpHkkHmVd5Va3VAWgFXZBo4f7Sg3h9blVjMsLQaUqpw6jBo9aDk-7VfxlTZrTT7CDUncrUljHxn1xsk2lBnktWrzBANJjg_qeF3Y8TGNFVuXY8gW8JSTQEgRdqkvXkmfwYOswnZcm8Iofrn_mVydV72A6MK1uUtJmdIund1v","e":"AQAB"},"attributes":{"enabled":true,"created":1575676531,"updated":1575676531,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"p-sWGONTmsEAf5jcKFa5NNeDc-GKCm54O-TAuSSg8iTHjI7dwfhOujiJpI9CMqnSTJs4Hv2sA99EwuH9OY_bcxwhNZ5UQKu1IaXQ6ouzRqjVvrSZVSWn4yNlG6R7PMRwYAGseNDUKmEoBWI6YA1obum9r7Y6-D5ehvERNNqaya0wgyVttktyY7cf-1Cw8MzR2v0sxq0VcY_JrFrNBoM5dIYKK8gnIw1ggt40kj1b7iZlsDI4yWQR23idjJSHosB94gcds6bcqAWKCdek3auLCiaG2bdMwSTimkkzNQQl9IZZ2DY7LzcLQchBiz2cPZgozzDt_d9Oa0QXKGl23DvUdl0LPA-LXaHEWgQm8uM8s3vrOAH_YSqagRUrG50iaoxVs8gmfzzR8Ftm3KcK823FabkD7ZGHfQ4JokBqEw8EPcxxTpZKv4AqMXdTLDKYq8GG1NXE0pExfpzp5uyjPKijdxVpO4vsGNYhQFPToqyOIaTe-45WixRhTjneHlq1V74J","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '832'
    +      - '844'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:31 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -461,11 +461,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -485,12 +485,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be","value":"SuhmyO_3EvKK1EwpReA41SRBK6mMvtUvCd3JFdysvzKNjTS8tRTCQenh5xehpM6hWThWfBBAd8tYa7fF8p7Xx4zcpmMceENBdlJu7YXiaUvmQY1sDhA1lkB_EkVXXYjCjUD4K6A0YM5ZaEWemrvukLy_tfFL04vMzKmW4uYPnE0sgh-3iczS3uEKMOwD_SUrQxjaA7VNMHCfEUehjwT5kFfAI_SXMPBZpyRtNG1AzCah6SlnmewWZaCqx6ByHACYyREqJYSWHqPIjRfac2CRGut_ez1iua_GuwUOzhC7tqCWbUHWX5XKosc4-nYVU4L_Z-TkYAF46HLFQ4MZwl-gUK7pAC0oWvTEmTIym8V-flH8-hybiq0Pt_UGzhgUZUtiXr0IzsVXTBw2PU-wgOqsdYdQ3eFku9BngiBjBVsmdUa5Q-V_COWQ3PcvXyekcrCdZ64-UYkqShdfO8u5CU79fnCroCYIq0_luYb-JlWuQexcJ7V5wTH3jEDSrF_OFqLn"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be","value":"H3UlxNhgAiRkvvGcJix28VkYBHXcGBlSq_BMlXBvbfusdURxjx0kYdcu7ybyhHU-9k6UcxePKvM7SkFWB-JmPwzBlHepPXG_RQgmItV5N2AUJZjFM4bgkqt14vumUYQT5uz9GGQxZl_Je6pCXARkuVF_NyTlACxlF35eyc2bXd9sgU8Gk5ZL4rkmuw7Be-5KT4DvwTGZStyHj3kYpBKEcQFRPjfKP500JhoLz6JS-icZdm5ofnZ0qQkTc59YySdbfcQqlqaIdBmG318y18FS7KEH8qwObg9EGpj24cp1-57xe8aTwTbvNJr5vd2ABFK1AHOQfYoOCVepmRm3u2fseQGsEY0N08oWsdR20uKfW938iyv5iK1EiJaemQLUr3vvhZsRdYLt5jc0P3nIu1tiBVQsLcHy2-br-nvH6eWtKUXhWVUeRsiYLyeszGraAtp-WqMCS5-N5g7IkwEDrsEMOLEY5AYRhvL9oVwlJSVFC2fJh4U4-bf6ROt3E0PHcoh7"}'
         headers:
           cache-control:
           - no-cache
    @@ -499,7 +499,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:31 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -513,11 +513,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -537,12 +537,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be","value":"qDMq37uOTic3Q8U4Re-nyW_yZhJEJvPBYyijgIiZorwk-jBCFifjPhetezHvUCiPBkJHRnwu2eMW_ISfF7ZOKr4Y2x1JaZKSsbgdVZo8NsfA_tMJCV8dLYjlENZwkyMs7qcibjtepUA6FJKgwJnq-mWHt8q8xR-vjFOvz_lV_12qeZ_LfLDpXZw7Q843AL9OzP84S9fN-wziob2UJCO8h8FBWrjNdu2rkUPKCy38E5NT_tGDmTZhbjSDjTs2pzER8od3VKooxfE_w4r_wyyR8jDp7jiqjg5sjnHyVvLxWoOcZvoiPeqrVxyHmf5pJB34fcVcKlOBy4Rj_w2OQcqZ8XATmL623pnNb_LTZxDYd9sQq00lJTxz04vs-PDnx9MxbjHGJg9-ExwQk9Pf5IMwqj-mqaD8pJzeLtZiMKE32mTR8N28G3bfNTqMaDDK6TrMt_kw0UflacqS-FqAqYb6v5iX7XL8_bGyJHLPmRDN6LHJJuwDBJKtSoIm80rv4j2W"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be","value":"XEgkkgsSuDpF-dpRHQKM6AUwMRc39fAKI2gDwG9a8MyhPFsuXgUWI8Lqe4rMwY--3_Oi0_gIGaXIsRF5BVsxPbyoukEB53xHNROPntvC4i1NkyqbluXZqXDQ9aj6R9KWt2UMaNG6kTc7JqzbslAxJv1ikGdTc3x-AN3LqGsWgR2oNWrasVwlm5nmaKm81taVtP0rXofqqpRwAbPiwxHERsDgt-_-cpR-2q_uPWizIwonVmSnLrgkxfi4-MMt0cf30BO9HC8vd75oNd4GbQOXLcKepbETLLGo4NZnG7NFJ171NAUCFxzi4jbui6gNzcrarEzY-YmIde3Q61BVkvR-4kt3oUVgFp7xsmRffDzoNd4Unz27Ep3t99TWquIY5gocO2yMsOl7y-0MVFCAV8V2O6ciFZjCp7gz_FVBNbHpeWk0XNLwTC6tmD1E36jfeiFssEFGR3lx3cVBzSDY5tIB6Wk-xaW9u6-ItU8754wCsABN-Eq0mz-crL9a-KayL_d_"}'
         headers:
           cache-control:
           - no-cache
    @@ -551,7 +551,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:31 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -565,11 +565,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -589,12 +589,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be","value":"EA7TrF-njN1NIUFjOD6khSH4kDNE00IxTBOYn27iR5QCpUFWPSx6y7ZVbQgcEUtHjt38_Xp5eGUIMB2kOnwqnYVyhwZlboWsqRAxFwGsejbeZhG8cOByqcAYVb-A0CoFKzeBsl9iIDe4YxWRYnPgbuNwbhYzaaF8cl61xd06LlQl2IDOEdqA9VLweHB1aN6az5NRsBPkOgfaoh2mnAKJQAlKMiAOHWG2zKa3wqls18O4mlv5LMeXuO4HzLhcVNYZV3jGUM1FbP1n3eJlpz2SO4ynKl_wh_5NCcclG8EKufhLdr9Y6TzF22ZlRg69HF0i5MCeem__3JJBO7r85xk2SBRlCXTA4Xj19QLQeC-pmgZPQTRjye_jBg5ddR7PBE0lSyY9JRst_XI__9hg_JYeqH6KBkFZsskxeYV7m9hMEzaH8X_fTfyc1eTZSlt1XerrpCK_0QPSGR2P9xc42eHfZ-H47zXT03xvfmc1sJ5Y5CKhHn41rLvjLXpfJGXmWiBa"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be","value":"b8J9XNXoyPfzCRCpR6PLwa5OI8mmQRefjB-mcwmRbxh3_VJXjktrPHQ78SDs3uslIbywfStEgvantcP06FrNwpG1uCiHOl4ksI1hxWBEizMZYauFlihEQfRRPh4ASeMC8QcMFfTaw45oMwZNIjDXmFCb3jpEMpi1b-zCd8PgHoH0F3uQbIz8t8aJbx18r1yFJGLdl5IurHV7s86N3daHxhS15elDqItZP2EMgIBFTynnvHEgDtokUswUKUiBQDVIe8jstelkvI7ovL-NmOkMU15vMUqAFXClJ1hLrzuRGgAY3pzzecOgNTE7vNcTqX2vXKvxZvccaK-FPQNllUfdnVbEC2JvvSiiOHPcRGaBot09by_GVjBcCAly4_wbY3tGoEjljbWN7Zul9AsEHQppqpDFsDiHPKd4T1oCmSnCMDQ3cUgZBlH-E9BIbwRHWyeM67YH_xjVu5rLKLCWPL-5XggyGidkK4U7kp3EiMYAA3XT44FDBU8p-CeOfPBanv5j"}'
         headers:
           cache-control:
           - no-cache
    @@ -603,7 +603,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:31 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -617,11 +617,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -641,12 +641,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be","value":"ZVlxE-EV9WeHC3bnYrnaHZUbNLV4pzc9IPTkHgRT-a3Gc2DTT2-aA9zHxGDqjilq3YFZ2nBnkG5qRx8zCTCgIxYtWbd3dk8aoOrasCI_72Uc_oy0X0UK7nHNYJdEPTsuOmVf1ZhFVgj4aYyupQQ17DZ7lB1_qGL4bXLjVnfD2olvnHSsOkC_bBUOaeSi9EvxSeFBbELp_3xcX0MvEj7iv39LeI6psr1WbBZFdIvIK8ArRS1AcFeIWMyus1lmNLEsp-vnfeLIYe8NpdBPxood6QLs8Y34kcxrQFwlXBZ3NbNNIdGUgsgM5D01bzkegvJsUljdH42vURXS5-ZmulMN1xn1reGQwasR0Yn-TL1SnZqJzBxoHvygAIY8k-TYbQFG9buSUOTFPSsO1sv_qlIxmJOWmcWbxOJSkWia_4Fu7XL57irYl6TYaPU3BoWram7czi-1N00VYlIXfBJyiX3slxoZYqMwYecsm9GOSYkBhaxc9g1Zp1hooBuCLuHiEmks"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be","value":"UnYZMXbSLz991C1Rx6A_0RFgd4KUONb7SeuumbU13DSChlo-wnzUMMqqArPxPiPujvYiP-tca7ft-STsSPvq7qdexBJn8AL6OZZDL595aX4-AXYkwbZyNfowVwlgJWxnRlZ9N6lA5Xdhkdu0l8ANwjHblaby3_aD3TBl_fVzMMJIEZIzKXioARuEbw0fLhWVJqDi1RVhlIk2W_g1PVmUk4yBo9Qo0K41DE3bBb5u58qA922sOArBqpz0ZlRQIhiSFaiL0HBSb8tKa08rfkdD8QfOc-VyTziZJv36xzwjsitbCRbgMcQ0O1AD_M0Y2nni2KOHddlA37v7hqgYuS8HtQS9KcPBr7aOrzm4HCJw1htnJnIjAdEelxDb2VN6I7y1V8GKxR5hpfD12kMJ9XkHDuj-DvdbtPgoYjFTaIlH2U59WHUIeW5nGqE-Yj7ScP4FyFbFuZoemEPbvvIg7_eTYco7n_LYqBarjVkf_Pr3_Qe97v1ffNveUz11cFuw2qpq"}'
         headers:
           cache-control:
           - no-cache
    @@ -655,7 +655,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:31 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -669,11 +669,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -693,12 +693,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be","value":"KBD9LnERV-nOo-_QxcYF2e1omquWdZFkLRmTJbj1CctyrUih4sn8xOrBZ07LH6FdZib5sQymYBVEPJK91NO9_Qv8Kk9WcX8Nr-r2n9yB3baYMGbndHIcazbPA7ternKoONpisBv4MDgOZ0K8VtHkV0mAHLw86jK-b__dhEVjhyJLDxzQg6KgJwNIYnz2dK0XIdFichALAAUCgXfwB3pgYVf3FmLDNSAR3kkrdgPQY2K3piUc7TsE_kHM5NU7_LteFTEHRuhXE3kthMsJSVJdrKEv31nHYRCciaB4ONYRxXsGab1Lt-Lec9cJEA6TcyRlwDlSvdpJBHeaXeVhMVQhMGoS-NzQbyNm758Iy-3O8l-lHpxG-l6jDRmn538wgjTtzggIcnpTNkQ3MPlwbiK7xWlh7O0dIDbYhzXNppozjqrYiMdzfEhwRfCobwVGzYX8GZb5u2vYw-vR1mDG9iFZqeCWLUkXPF2Rc7WMzu4Dcrn0e3MumrI4zndt_5WXVPiB"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be","value":"RTL0ddz-ymodDZN-SOG-BgUhJ-KlKcprRgsY7Vq9oHW5LfQXa5efvtlqLyzNl1CLFDPcDHBG1AmGEHcGxQHuMWDhJ1Kt1PD3GN7Z2CQYGtd8J5eYCV7BPpHM2BAVWtGGGBjvoVN56Ll1-1sXE7ipTd72_9qdZVBbIysbRpo03ovQU8klkoMVntyt05Ltz5wgBOBChsmkhxNgOk0WgWkiZD-E8NaHNninGgAsti9RgN_IsnnqCJ6reDcVVjK4pko0bppPqxPLQThSfvGqezAl6ARwaogR9e5obX6VtvrOk09ynOyXZrhVwjFoMZDJKXi_BtOOQ6O3zCkv_zSVT-kLXIoSujNHjyvcwjz3kxtGYzQ_qp1hws-TkIDtwf0sn0uFRNOZBnt49NzBhSC9X7kTsVDq36Q0kLjQy71nCpNW9S2bqW6BiTYtZIixVYgQ5syp5LMMMXc1er2e0hq-Au2ENP-F24iKcluvoMFLNks0dqyS5PGVPTL5l0VY3OrhZpfP"}'
         headers:
           cache-control:
           - no-cache
    @@ -707,7 +707,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:31 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -721,11 +721,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -745,12 +745,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/31713281172345c48b0b814cb7dc75be","value":"BAurzWvCecvTfOjBRv5wSezbH4qN8-AERrbLsZCSkDMoq0jDzqz-ddSfW4xT44Ea702-sdK5ZPVYmJWQ2NgNgUxi-cJUoQd8uycmJ-6kSAAeuh4_C_tXO3qLIjNBrTJC2yCBVktAJzPMVFmpFdMaPCN0ClLnlEQQ_Ir_bPN8dXXfsGFJm8cVJetQr_oOL_Qu579rhATVSfxw6PkWRb9IN9UiBljVxK3ulmDoOEGEuI6vSWb9AnE3lhmUuWm-8amEyl0p6dXQx42hMPUfmAdLK9o_RJ_2YPpbXmKPwli8jsPmivHDSnf_eN6-3Cez_DvgK8U219zZ7jkZNu1M7-l0y0hsDPsBEqMOymp7mjm4sgMw3rDH7CtdZarqu7Ljnb3UTQ9PhB3NsdWlXZ4ueEPDsFYy71cI2rFumzXjf3cTmTLXNy4m3wOAvnr1bCYXh-5nVj4Ha-AzuyXNktW94wZB-ReO2KE_rzYV9IR54YvbdOzTNfIZzxs26uPVvnoJYWk2"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/2848129fb531459dafa3b9acb7c506be","value":"T9mkOuodwKq5-oO7qd-hh-sfseNs1l5OEwIWrFqxvddTTAsDO9C6jIyrVfQn9GHH5SgfeJBSnO2n9Ixl2i4GZD6cYhiJrI4cOe_S9No1I0ckOWYxluo7ciiD_OPqFd_NyQtUvY9W2F5fgmB67UOM7QdHNqqB_54nC2bN-j9tei2NuDCwXeM38VTf2ZKP4UxPfHJr_t73xr7r9X5eKdScjSbn-4k9xYputbji4MQ0Ar_3K_LmjYpAvC55SiO6qvl_v4vYTD8_rBZ11Oy-NB7Pnyr94QpWu-Gs9W3ReqyQOAyKEbsft83dEQvIlKVgDtUA2xJbEhaceb7lPVFzgiBWbShIvIFNMRMQOif0shIT9r3rT0TDDL2Z4re_nNZuCPMz5ZyM-G_qYPkYN6QN0MGSsbUUf_BzYldiPAftFwKpMRdd_BmAz3xM61epATZ7KX9gr2m366esjqh28Y_8UPGO-RYH-MBkI7ez3dLfwoG1OENvCtHiBUC5UQTT0ycFWA1a"}'
         headers:
           cache-control:
           - no-cache
    @@ -759,7 +759,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:31 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -773,18 +773,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"key_size": 4096, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 4096}'
         headers:
           Accept:
           - application/json
    @@ -797,21 +797,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"yWLn8gkXxJx4bxuYYSK-PtCQGV-4F4p5JtUyp1A2rop0V0X--4n9ec0wQ4LtWdafe7u5Iq4T1NEUt_jxg33LOw7hFQl0SXHjCkRNuD95_f-SdyxtX-fl9pXx8yEZ6Gr8pd-BBmgd_amyGK-Naz-wWgmwGkNRMYtCn3z3eueTV01_Dj427RZbRTlsnz2C_pEK1SXn9bhKa53MlrraW0fFwRk9uGV2hFHPQ3RtIHCn2gqws-6NBLOY-KSXBcGKO4xN-LmBiMbKwBZUIXukC_aXtn4U2H8Sg66B2wAynOBVQ7gEs_YPhM1sCNq0wHVElIM7fJcTLPu_NgxOZ7HINLEozrsctyFTou7ElwFHNM6kyearzg_1G76QbcPhFzvstfw2BwhptZ1vxkql4mXLlNyfVx7AWGPO6E7MO_2yfnHG8h_deG1BME_3dqSb8_EwEq7tCL3fpazTkl9Uz_2CqcGTf2Zoe_SNCJZeI4kabdSQnI6XWiekzcpr206h_GMXstCez_lV7WQ2OOTwbgk3MpcJF0w8D2bE32lHnz2AK5aVhCumyahrbVgkmWajLs4aoEjgQ1I7bxR3ujL1H7grKODEDcSuAqYTaJ9qhIHmglsV1g5l9zQHGMAd_AKvM6WgZy2-agIMjPsOvAQ6a4AltcvSCmrqIltHpt_XHdrmptYEny0","e":"AQAB"},"attributes":{"enabled":true,"created":1575676533,"updated":1575676533,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"zD5XEeVfuaFEwNDOXSD5Zyp6E_IXJMY0lSkra5HV1_8KRojVFgj_WH_6CJt9JsRC5LwBlta0mA-5Gpx6q_W7q77DIP49P5gYzLVEUarUA30wHlltVKXRr1uQXlHJuZrRKcbij47JHm3Byej3kgmNV38PgV-RNBrl_400hugvpkRh5JaPVA8n7I9Z3sAAIOYCgYFDoIyRe3OYHANP9cpH6dgFPTzMQQrIXWIlZDaPzo5Pb0q2AY36YocN_ReI-ptIsvu_ZqJyktGQnystyphUGd5GtyWsDKQftWLfRY55As2p6C0BS7IMSs6wMmW1kNWovkj1A-IPvaNSL-mWx9sIEMk4PgXwFYWhkrxEZFfgIrAQGcGkXf7E6DWXt9sEwHo7OAXqpjDiFGiq5_v0HQ6W0CDnAm9S9JmmcLd2ysBvgmdx7JKMRDkyPxFKA8h18pcxkO_Zg71wNd556dvYpu6k9scyMq4WUh9g2FnQSzTM57KlvzWblc901WTz4rDEbHaW4QS5eVuL_2uDqbrYAjMLxSs6kmC_qAvudFZmsszTTuNqK79PpCd75UHMaDzdUuJD5N1GML9F1-zKDye0nEKuoQ2R2idjrc_YlwlziDDWLfF7sDLYvl0TJ-f77laqu8SujT1LO0_lkdCpoe3LZxG2GvjaOATAetfV3-WW6FReku0","e":"AQAB"},"attributes":{"enabled":true,"created":1583451973,"updated":1583451973,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1003'
    +      - '1015'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:33 GMT
    +      - Thu, 05 Mar 2020 23:46:13 GMT
           expires:
           - '-1'
           pragma:
    @@ -825,11 +825,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -849,12 +849,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46","value":"uzHPnhVbn8IRC8lMP6wih2NhCGRLtCDxI23FdXmVXbnXDWk3Ang6LT_pojr927JoBK46YDT1U6ApcgFfVbsj_AwEJRqWAhKYwstR-E00JhZXIyTNZgoZv3hrP5NKucPdhk6AfhYMn0PUVMDlGYlH9LngQ0LL_2qLydZP3rFf6NWcw_vIg9A7F7CYquMHLwMDH8omLJVYLSSfS08szrPk7XRDV_Y_jCEAqMAxIBQigLrWDHsF5XADEWNB6Sg7fklpQC3tDTCpfQFRJI_RpM3_967msSVNb62GHwZnm2gNDx6b_6kqcdbxbX_kKZ2kCduJXRuE9gRZzfdKLp5dfX_5JJEzZ7igtVuSG60S_eYa3FsHgbIkf413QCQHYkntR5LYUOpNedt62qP9DWVkbFaJDktYdSfldjs8pb7t5680akXzDRKSyICj-DYlEtamDBT-sUtPut5GfiwQuQOPTB71sauWtCGgX1Ip3l2tCOjSJg--334AmQK9Ad_mt6dQaRSAz5wuN-xRO6ZgEJ3lKIedmQdAUJpeyoZR2_2_aaJvGJITc7SPmiwaIo8nhJF5v83SG4wD_H4_BweVeRBidgZGRi6Ck77znxo08VeMXqhGcwOrV_J1UR2RScAN39kn6A4ibvhf28dDEXMxAM7ep9_RXknOT_BzBN_Qsj_VzeaU7kg"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409","value":"TFNNYgyK-lF9jogVsGIRdM1pDNP4VK7DIf7KRMwQmDu3Ettf8IGtXoDQ_4iB1Ctcg5rfi87vRmj9a_hOM-f6sJJhYTwVAnfXWWCNIdP1msrKMColkr9lDHGsDzA8Q3AE2BSjWg9UfCOt2Ph3vcuNSmgnejQ78bGvZwV2sSqUAhzNh9ChN05zmCbcYAbDW-JxCihzamEdalcJwVPOM7oPe1wEc9o6F_4hxeKRei6oCkzANKbdJ-C1GflUWZ2edZytAGxEZdxQ_ZHFyV10OGGpI7TjJfcdH32X3Czfn2cVm7M0IXLskIt2i11cPm-9PtG6qFdGMrwRIPQV5rULCKYYyq0hqLFVvxqQMvGgzq4Rz3_BJAkPOjRAANRHxyitAv8841mPp39DvhLSgbjkmVOsHqaaLW0f1mLWRmVbz25RxAXdKYuklMIYUn8_HVzlO2atkTy6JAFrM7PYghlKgFj1qi1vyFLP3nUf_GyjlT0SZxhbQT7mp_0VMytz735ft9MiHqS5b9boBNNBwWgPU3K6I2JUDkKICFzpRGQb-qcOpIllJD0oeeJvdr1gRy5TIz-dSODuQ3Ps5_X36ZGoW87Bl_Be1jYowZImwB-Ja1Ik9px7GHbzG2Lbpd5qab0UGq2Wb2PaUyXt0uhmQwFXYl_1G-bs0uaqCdVey0gvavbye2I"}'
         headers:
           cache-control:
           - no-cache
    @@ -863,7 +863,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:32 GMT
    +      - Thu, 05 Mar 2020 23:46:13 GMT
           expires:
           - '-1'
           pragma:
    @@ -877,11 +877,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -901,12 +901,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46","value":"qE1eyTAraFRWETEI6XDVd5vYFW7jzdptv3cepeQdqay8UC5P1vQgenfNv_l_rlLRV7WXCkCJ2tqbaEff5yWp3KAC0HsslUiafJlZcFf0imDRG2MTfQshCLTEDWct9V3cDZDV6NdCjAqhauEPR5Je7CnwHzS1ZV5BNmcL1YpQPQ2IAAcw0dL9Z6HS9YVr9iTGvDsQ8GYrcnN_wWJTmOjEMpUgeROHqkfiojbdRxITyo5Ow8aVPfidSl9IFNtqRvg11N7drAg9DFOqzw6Izh8af6-3TIOfNg1nhuo7QQO6bOcB-UviEk2b3tqVEh1nLsi_tTTlbihcTw8ROwPY5plVsd8ztXRvpYBNhHM9W4s97OgfuWibjlfIYngY7Rn2AH-7yj1fqV19C9mvFv_ndmMa6uD8iXvaMLRWd7l6tB_NsNxLSovaC5mcAZMh05vjNNlfCW4VGd54i3_HWzVzBMd8yJYaqCpQQBqEsQ1BRpWNLHqOjxURWM1tTa8tXF0B088POoueE_W0kce9Qj_kLU3Pm8645cPyrV4YUNAeRwkdM8n5yk26BlOvHA32o_UGJaG0BaNI3fZRGFewb4wEHe950vUaKOvA-TcLaL6fb29bT7C3wJ-J-pvqejtSoIGeju2zOx2CiTW1kCFKQDRKZr-OQkhbWIDi4l8nxVATCVS-rBg"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409","value":"o8XzI6DENpkuXPZ6nPpmKbXM4C6l0HrO3zNsDVfLWIYGSoG7UpUvgdvpMSyUtlquA4BpRXyFajMxFbdavrzyY9Zyl3eWi4yLb4E7mGDAM_DZa_LYzgRg6uh2349cOaOnuY75pIMcbjFUareKsrHIIsYZRjWM1t7nxNFwvTjMWaLiPk1Kk6THhSNKUlfns6TiUL8RD43lgogcgS3CZgmVOu4rF__9df0BaRpR1e2H5ysTaWrmaqQ4RupQsuQpRmRa8NoVC60NtDT26vVelCM-zoNB59l8YH-cKII8vnO6wJ6pQLoQZN9y2jyqc5KgfEGmXllwWAjO5Dc5WL3IdhNVqeWXvKCZcGDsMNdqkgQtNeETNS0XkB7n_Fi0jlyfa8H1KlcqN2rQBCMN4A0P_zmsTudmZZkl9SY9ocsCk-wxZWL3XO9Ek-O6p5VGn84u0FtG8OfzFA7u_kgIYJsTk4jLJMDoIb3YLmyynZPjni2qlYd3zDEEnVjdcr4dTTCLUpTYMlufwavgGmEZcpFlreShFT47rTIF6xxUm3vOSrpRtX8xwninygLbxhrn2Ot-rgtGa85gXz3YK8lcSgQTVZkZcWFubVJV8hl0CWSJSPFGbZ6H8NdnWDrbkl2cABpFOk4Pj1nZHu5bgN3Ixg6tCLIQAZxasz223PiU8JbSlCCXH14"}'
         headers:
           cache-control:
           - no-cache
    @@ -915,7 +915,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:32 GMT
    +      - Thu, 05 Mar 2020 23:46:13 GMT
           expires:
           - '-1'
           pragma:
    @@ -929,11 +929,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -953,12 +953,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46","value":"Vr1OizikCAxypQ3TxZbX40OqVdOX7r3yqGApXOjqeGvCUP3szts28vDJhsXYCW6jp-0c5IceR8K47nctcszA-O3dTrb-OdMWyzqNG5eoSjKXsnaxBUp6qxwP6ETkmz0nKJxs8xX6UNFFm2yXOuytul7Ixyoz33lMureiRTeRq_ht_cqaKUPHFM2SAM1PfRjq3-VTdxgY5J3uu6sWwW2kLJFFULLN4A3AxwIRz66rd9NHreRwM_IbcTv9VZnvyaaCymJ_fAfYhrnSvWxzv2RUeU70mrByikNn0AzXB7PeofaAxR0L3LQFoiayzYX7IrAYyGY9ZawNZ0ePgaM2327FozFYuQXU6mQcsG-8UVsD1JcqzczJbkscEPOXWtGBwzCIOirHG0pW-mQnwvGYPaEg44QTiGPHTbB5eIGnJD0l9Xqc6uIIx7WewdIW94umMTn8krCLzwBcA-DmvmFUjC-bjoHVKSsn7xYaWbpKTFxtFvA2CUHGxQd2gGGFc4R4TjFYp4s_ycWcjUSwSGjjkI0G4gcqWzMl268wCBYmlxvRxVaq7iZkKW9EH-b1rO7Q6AeR0dtipuFQznyBC7gTB4uriVTFARs0kn0-wko8TSjt8JlVSServ2spHoYTMl1WZvPiEH18aW1_6c8zoT9PVXeIfwNGZfrMEL3t_J69f_MAtRM"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409","value":"W1i7qlQFcHNzCpg7fCZgN6_6lrcE75-4MS8uuCeyYbxKeTxOZsTBrccCUdpwrMoYH_xaMeWItHO3uc_95sw_Y000nRd3wzwtjy1BCBT46m0JJV1478GoVvULf3zca6-vIqKY1C3PkSaPMJU1MP0mS1rOAUqlhOa9Eu_OeIXGuIU07T5efLWWCvkHuiv6-7pIZGtwTvRW_KvPIMCq-uag73Mf5-e5cEXkA56sH3zXn3Tu28eDthPVw-zCHJ_gBPqxaepzh5y7YXotU0DspSTv5K0ryhkz-KEufgM7Bct9idAa_Nh7eC20rIns42CmcHV3svszwe6bBNEwPHRQS3qb6USGGUvYb7iC-p7HCXww8UyP-FoPc-SSuFQ3GSfQ1jefpPNeitXvBGa41yVYDOSop730HGv4O9FTiO2f6CUvoPu3DmY2y-0C2x_acB7rN3ftLly4i2QkXV7ufBRDN00udF9oJ8-QAyqFYAmObPv6Eourtl11cVd9P9is4Oeegd4i5jOhY4O6C-J004LpngWON4UOu-UGEnPV0H69AtDEV4VVz4MNIYOKr11l9pNDT01Jju3wD64WFFzgmi1vaWN_75am9bCdOEo9xjxyxMYor5dbJCylqZ3BLSNBHth24D3sAFBZmE5dGISOYMeb3V2Soe3biGmhZevqmN324ivEh2U"}'
         headers:
           cache-control:
           - no-cache
    @@ -967,7 +967,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:33 GMT
    +      - Thu, 05 Mar 2020 23:46:13 GMT
           expires:
           - '-1'
           pragma:
    @@ -981,11 +981,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1005,12 +1005,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46","value":"Xi-esRUgsj_UOJio677kCxHs7sft_vuobjhmWuyw1zFUJ9gDw3jJxdKX5whSQk2iN4JvRe0OCcJZ1NaB4sIjS8-zpMneaEfz_Jdj4lwD8R_LR-reY0y6hsFNUhFIdd7tqb-p0h73wbX0TiEndHHJF5zI8aT_qXv8CoRrkn7WGYWZo978KdJra2c8hngPylHvfdUp113YIUsCLs2sn-YVO_vIHWxgXwb58vhsatL311Ld3r1HiKbW6kObL-eTJW7_enRLxkTg1SLFdJS0oc2Bb0J7tm_ZY63VWEL73wjLBR4qBUzw6l7eb7wVRlb0JkgnE6JxoaWyAxS-_SGYQnUZi8UL0Ri5vtVCTqDXO80flCE01Qy46gdI5SQ5imqPc0o9wNHcw141EvCoZavBH7m669Z8etJXVIw8wxIXZLNmFRFSxIBldw93H-XAf4foMa8ImsvxgyIxu-7sDVq9zyM7wE3bFFUCtci5RgPi2MfZfdHL-7xrUrmKIDfA0aKQ3oQ2muQ5SfUT8FTU9VkIphDftUudrz9lyw9NJ46Lhu7BNn6RwgVDItMrolgiUSOyKsr_Vvig0ml0QPe2jbcEXFH_luQnE74ChJFvSuGj6pgCGWTkCdlUSjrUoHFONW8SEjA829JSkWbTASuvpYD-0Z3CtQzv6BM1jZtWPVtT7cF7OEg"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409","value":"m22viZM7Eeif3pJ2iQnhLxZM0MeSKb18aiNc3FkRi5V10_0uTZnEIPYFXjh86VktQD8dR75xz4oh_rzu4qboMag7x4odRn3kaW-yr4UFJ12Vnxea7tDpb0v2rCuRi99q_s7_yx62KIkP8ZBxFpJ5QlK_qxetyQ5GaDzB2Re2huNm0409nwVLsPJJDTe8F5FTP3__eLGie81WutabC4JcawMK_PAI15ReFoG5vDA8gbA0edvq6ay7CRuBWoQvIcOzsS7cVnlvZ-yN3bHAMxm4rYAOLn6xYZZKE5dO0hsviPDx8B2Ox9hQSP920_WendPq1rpyghYn2jhO49-xzIXH2CqWL8x2dawegWGsnCE_YEFVvZdoadx6YeShBqptENmtPqUhdRbjLEeVveUdYxz0k9H3ss04czPqwOuAWICp_obQKiHfqJ7Zc317I7QQgITdP6SPMaueytj03l0ySBNmUOYAghHjLjNFBHA05dEgGaOL3toSYnafesVwlKxUcIC01_qSbEhekn8PYUUuZEXdQLZUzfKm6HmoSJGd2OMNfpyKNwkWQhqva5PnteVfqpQiEyAdVJo2Jh3aZSeA3KTjvvunw5bao_it9JU2qQmWN1Adjqsiq1euhdEhUYqPb2ot9YmbI9D5yrfyLHqgLFWf7pjy5DdZJgUebZfj_Qys4_k"}'
         headers:
           cache-control:
           - no-cache
    @@ -1019,7 +1019,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:33 GMT
    +      - Thu, 05 Mar 2020 23:46:13 GMT
           expires:
           - '-1'
           pragma:
    @@ -1033,11 +1033,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1057,12 +1057,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46","value":"vZufGU7vNzFqhMdlJCgT6KHzYdQtva1Ntduq-sZejwDKUiRURBvKA_RQ70k8-XaKp3Ds0AWwSIXpN7-xitkTSdSjbIXWBopHwH1OkeARdbmwVw0qP39plGvd_dtYAO0Y0nJwYMiZ8hJ8jcW5CiGBPlC1P26YsSVe43KxZBoc6yz4wDe_wekWfdX9XPS1I730LN6lhXa36qoo-KE42_VbQtJfCh4zAGk9vYP-v3KJq8k4hG6SWD1Q7zUhBJc_4kKGBZWdANVNpCNyYFwFnDQbtq98UyG3VlOhl-GrT4K__drdgKIxIiShWxyT3IBDwoTf0u5ML9U5xIFAQXrd2_ntE697EKqHa9-hAC6yBVCHJ-BXC6IVi5BDIwGbBX7cXb-ulm_K6frxW7J77qDs7aQxFujT0b36skzjQFdE_SFjwYhrpeuoi6K5V2dsNiDv3J5qMz3SigRlQW5NdyRoUT2533ZuSwZbtHO_MZZhqzSMO8C_03LOQ8ABmWGPBqZlbOKqtU7hCIRcPCrH1NuDVZ-WyJ3-yEyBJlWzkDwMqF9tdapObaGpR9cgz8HXESvV-t72sTxOPmrtkNp20Xq77P_Cx7Dw_dLIICn3cKyNtljWYX8YJVoCCaZuqXWLEUh-gkYNWhW37ZnyGZyhpHhC-vbWpeS5IGItxi30vCiyGq0lVT8"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409","value":"qCCN5JJElOgyluaok67hVrUKTMysF0dUQFSUIOPiQUcsdFzL_iBasglZj0oRYnC-1AO01xbKz7Snd21nOZXTJqF3TIdCGfCgog2YQT7J1SDEdyJbBvVX6t-VxCk145TgN_PUYStciq52fUoV0mh_QxhA5T4_BtBu-wlif6euKDpdJNsCnRUVt1RzD-0zcJxz81-rSKlbMKj1IXheyaY8U4BtWI6oSojoPP_EXaQIAUsHZNpx68RHisYIE-WIpeHpM--oqt2GMF7Bx3EGncBzHw2p6A3LcZal6kh09vPQDSToLk85aZZAFAsqj0zQd3V2MFb6-yrJzCYhWS5N1NGbtxgC1ByoSdDfhPonxjz17eo0mMCmQ0YSqrogUsFOySWy105LJv6rI4Yf_cftvS2SD_w42EVPm6C4KHHW9htcdkMrbWHpQyA5iPNQbvaWbUJuNtOJvIT-S6rUN_crCRK_gujVVjS3y95Au8pqP8xO3PDbGkaGpcIhtE1NC-j_5QJXiaNV1FZjKNM31lVB-ddznJI1sEzYoRgFC7z9nFd9lDogWp-7dfRaqHaWomiDz2DJue9DiyArfmHImIc35FRZImBT1Q2CR8Tp_q-enhJ9Q9xbvo4S5xVeJCuC2nL_nOykzR1f10Yati9YMsEx-7xWZE_avilvdn2flF_iVh9S5FU"}'
         headers:
           cache-control:
           - no-cache
    @@ -1071,7 +1071,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:33 GMT
    +      - Thu, 05 Mar 2020 23:46:13 GMT
           expires:
           - '-1'
           pragma:
    @@ -1085,11 +1085,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1109,12 +1109,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/19fb80ec18cb469585f0ae4115315c46","value":"H6_CZVoSobM9Yi0nYHlawiXza6Wzz1FmpVJUuSwvFPtrMiPqh5XEwj2W8Ip8IWYuXO6EaBEiRvLsgis3XbWI6zSj_4n1LR7NhF2PGN3a4Pp9ChwsLX8D1qvbh3VCk444T70ghOcICtzeG5_ZwjZ-R5sRtbzdc1NpPeN0fMB0m848L3a4Yxa-EYebsVK9knwff9tfqll0i81OFMr40D4aFHuVH3SBUkFcp56v8ZpYqjU_k0isrpb5r0OmLYnxkZ77mxUqRMrMWk3bvHB3w5aNCSc805xxO64SkZiOAhLC5lqN6C1BiU2qR_FTsX2Gk1H8JEO2ZQwzQ2YCb3pLCzKm75mi-t2oc_azzxdMbYza5gUwYShovM_V4tWn9pCPuwxLYh4uxm8AOKdlAcR0L8JaqwTw4G6Mo7VmnRegkAYSydeYPIqE7utL_uqBmOi-Y7dEFiHwbNu9D-1WLTz_yCTP963nq7ru6QeTXO1q5XZss_RGi_POu5jAYtE-HM_TS0AN8quPNzF5cb6yHUSShaOhiQ-S_cd1rrXTLS6Iyd-g5gbweXk4k8qb3acvEdUuN8HBxX7rADnpAaWmO58-wq9IdEcE0tVoBQAEiyr2TrWPt8n2QNcVBins9UJZGeUVCm5BPRv5MS-mG6vLHUEQWR5Au5cF3P61C4t5ezQBo3TEDYQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/e8f3ce55e2ba49629a52205d8b88c409","value":"g2BcADP7PqLtlvvBdazw2IyzUJLHqgaypI6rxiJB3HoxqocuBLPx_UKkw4lsCDWhpX9wbbjRGmMBIhkjWJntbz7heKQmfbWm6LAbTgurBRI4exe2XeKRpMs9h_jmC23lt5hyo_9gq4DzlLQJ0P16eZp32vTShqiBbdBuA2K6d9MuQk9PVBmhiT_f5ij4TTlf5p3NRFDYVM8P6UnJ3tu_eXsUAewg4SjYQ00_iT4uIPdLHOfltYWMkvuI0kIVTrNb2OocC1Ff8m0rkbxjlc8FqYlQdsumigL6VsNm0FKTZRNzZdyoyOLawVSW5PIYDVrhP3vD7i_DOcDoSMV9_D8kXBMvERXhhl0X3Hs1ynBjgZ-AxnAsaQDaokFuivuehSl6CJ0UJ1h-n4yRVbHLlAtVgsVLErr5QdqC_UfsX6DcM8ysTD8ezho3ENuK3z8YQLFE26BsBgmVExBiDHrmKR9SF7dV4ktEw5f2q-sEoEHYMoMt3_2uS4lPSt8asKLvN6wwxVkcJBs1-qkAp1uOgya2J8AtGYyg_Uf-f5BADl3dRs9drgZHMSa0FOvXej4LFdqThniThqJe0R85MBxcieLYLDaVT9q1tvGw20cVEL6K5moUj-8JmqXcsmt25iFBhsMmfNHoDIxJc7yoeRaYkQeiUJPaZH7ZTNRfSLE6eek4jWw"}'
         headers:
           cache-control:
           - no-cache
    @@ -1123,7 +1123,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:33 GMT
    +      - Thu, 05 Mar 2020 23:46:13 GMT
           expires:
           - '-1'
           pragma:
    @@ -1137,11 +1137,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_sign_and_verify.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_sign_and_verify.yaml
    index c4868b7897ce..fbbf6b96272e 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_sign_and_verify.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_sign_and_verify.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/keys/keysign44471023?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keysign44471023?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:29 GMT
    +      - Thu, 05 Mar 2020 23:16:27 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,25 +45,25 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 401
           message: Unauthorized
     - request:
    -    body: '{"key": {"key_ops": ["encrypt", "decrypt", "sign", "verify", "wrapKey",
    -      "unwrapKey"], "n": "AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU",
    -      "qi": "AJ_nrkLpK8BPzVeARkvSHQyKwMWZ-a8CD95qsKfn0dOZAvXY-2xhQYTEwbED-0bpTNEKbIpA-ZkaHygmnzJkNbbFAnb9pkkzU8ZQqDP3JNgMfVIroWx58Oth9nJza2j7i-MkPRCUPEq3Ao0J52z7WJIiLji8TTVYW_NaiM1oxzsH",
    -      "e": "AQAB", "q": "AMPcZrZBqbc82DO8Q5zTT8ZXRGWrW36KktMllaIk1W2RHnRiQiW0jBWmcCgqUcQNHa1LwumjyNqwx28QBS37BTvG7ULGUoio6LrOeoiBGEMj-U19sX6m37plEhj5Mak7j3OPPY_T9rohjTW5aGGg9YSwq4jdz0RrmBX00ofYOjI3",
    +    body: '{"key": {"kty": "RSA", "key_ops": ["encrypt", "decrypt", "sign", "verify",
    +      "wrapKey", "unwrapKey"], "n": "AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU",
    +      "e": "AQAB", "d": "Ynx9JGaBSP4iUsf6ZJ6opantRNdcdmzaQrKbZg6ZQE8Ohi1FYabJWvaoPSE-CiJEsDzShXZHMhUHN4X7Bn8BXaGQhK3p9HXgiwQKmix7oAJTu4ElUIyd8UC3UWHSZr40el4PaQD-HYu_eMzCXus34MnRiNbh_BUWm6T-Eidhk9d3kNIyaSi9YNDQHW6tjWrEhhq63O7JU1j9ZonFChZxpKk20jdkQKQURVAdpOdL-5j4I70ZxFuU6wHZj8DS8oRQfwGOvZKbgYDb5jgf3UNL_7eACqq92XPVX56vm7iKbqeyjCqAIx5y3hrSRIJtZlWCwjYnYQGd4unxDLi8wmJWSQ",
           "dp": "AMmhWb5yZcu6vJr8xJZ-t0_likxJRUMZAtEULaWZt2DgODj4y9JrZDJP6mvckzhQP0WXk2NuWbU2HR5pUeCN2wieG1B76VKoH76vfnaJDqT1NuJVBcP2SLHog3ffwZtMME5zjfygchG3kihqOSpwTQ9ETAqAJTkRC38fEhwAz_Cp",
    -      "kty": "RSA", "p": "ANHerI1o3dLB_VLVmZZVss8VZSYN5SaeQ_0qhfOSgOFwj__waCFmy2EG7l6l6f_Z-Y0L7Mn_LNov68lyWSFa2EuQUeVj4UoFHc5Di8ZUGiSsTwFM-XMtNuv8HmGgDYLL5BIJD3eTz71LdgW-Ez38OZH34b7VeG8zfeUDb8Hi30zz",
    -      "d": "Ynx9JGaBSP4iUsf6ZJ6opantRNdcdmzaQrKbZg6ZQE8Ohi1FYabJWvaoPSE-CiJEsDzShXZHMhUHN4X7Bn8BXaGQhK3p9HXgiwQKmix7oAJTu4ElUIyd8UC3UWHSZr40el4PaQD-HYu_eMzCXus34MnRiNbh_BUWm6T-Eidhk9d3kNIyaSi9YNDQHW6tjWrEhhq63O7JU1j9ZonFChZxpKk20jdkQKQURVAdpOdL-5j4I70ZxFuU6wHZj8DS8oRQfwGOvZKbgYDb5jgf3UNL_7eACqq92XPVX56vm7iKbqeyjCqAIx5y3hrSRIJtZlWCwjYnYQGd4unxDLi8wmJWSQ",
    -      "dq": "AKC9TAo9n2RDaggjdLXK8kiLrBVoaWFTpqXkzYXRhtsx4vWPAkxhfSnze05rVMl6HiXv7FnE0f0wYawzUJzoyuXBH0zS6D9BqCZPeF543AmWB27iPf38Q9Z8Rjr6oBgMSnGDV_mm8nDVQkeaDyE4cOZh-5UKvKShTKKQVwunmDNH"}}'
    +      "dq": "AKC9TAo9n2RDaggjdLXK8kiLrBVoaWFTpqXkzYXRhtsx4vWPAkxhfSnze05rVMl6HiXv7FnE0f0wYawzUJzoyuXBH0zS6D9BqCZPeF543AmWB27iPf38Q9Z8Rjr6oBgMSnGDV_mm8nDVQkeaDyE4cOZh-5UKvKShTKKQVwunmDNH",
    +      "qi": "AJ_nrkLpK8BPzVeARkvSHQyKwMWZ-a8CD95qsKfn0dOZAvXY-2xhQYTEwbED-0bpTNEKbIpA-ZkaHygmnzJkNbbFAnb9pkkzU8ZQqDP3JNgMfVIroWx58Oth9nJza2j7i-MkPRCUPEq3Ao0J52z7WJIiLji8TTVYW_NaiM1oxzsH",
    +      "p": "ANHerI1o3dLB_VLVmZZVss8VZSYN5SaeQ_0qhfOSgOFwj__waCFmy2EG7l6l6f_Z-Y0L7Mn_LNov68lyWSFa2EuQUeVj4UoFHc5Di8ZUGiSsTwFM-XMtNuv8HmGgDYLL5BIJD3eTz71LdgW-Ez38OZH34b7VeG8zfeUDb8Hi30zz",
    +      "q": "AMPcZrZBqbc82DO8Q5zTT8ZXRGWrW36KktMllaIk1W2RHnRiQiW0jBWmcCgqUcQNHa1LwumjyNqwx28QBS37BTvG7ULGUoio6LrOeoiBGEMj-U19sX6m37plEhj5Mak7j3OPPY_T9rohjTW5aGGg9YSwq4jdz0RrmBX00ofYOjI3"}}'
         headers:
           Accept:
           - application/json
    @@ -76,21 +76,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/keys/keysign44471023?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keysign44471023?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keysign44471023/607d1560975042d8a0540c5ce8ed0a51","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB"},"attributes":{"enabled":true,"created":1575676530,"updated":1575676530,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keysign44471023/f1868887f0d94390ad1cb60db3ed3fd6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '663'
    +      - '675'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -104,11 +104,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -128,12 +128,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keysign44471023/607d1560975042d8a0540c5ce8ed0a51/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keysign44471023/f1868887f0d94390ad1cb60db3ed3fd6/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/keysign44471023/607d1560975042d8a0540c5ce8ed0a51","value":"YX0IOuHlYW7IEVboW0c8M_geUfp2pKoCw7ujVZfXZOy0890603_QcjCSzuw_qUWehJ8IYVlfaXeF3Ebu36oB6cD8oG8OfI6rLM9BKQUR2KE5VoCBKAGit7FxhAnLRFGP69dF6gyO_wv_-zCJnXLIOg1Pu0K80WVSYkj6Wzczj35OQHEptDqRmxdwQoDYoEk5iYcb3JOeWC1frcGVEf9qs0yzwx1AbgkAOPElweovZZlleS6MALP0HTt7L5zJg7kjnCsuksVsEfM2R0_Mzt8nT24LczCNyZac50hHVkCepaZDRs26KodYnSs3doFlYOUJpCu8sxil7VBTEtFY38dENg"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/keysign44471023/f1868887f0d94390ad1cb60db3ed3fd6","value":"YX0IOuHlYW7IEVboW0c8M_geUfp2pKoCw7ujVZfXZOy0890603_QcjCSzuw_qUWehJ8IYVlfaXeF3Ebu36oB6cD8oG8OfI6rLM9BKQUR2KE5VoCBKAGit7FxhAnLRFGP69dF6gyO_wv_-zCJnXLIOg1Pu0K80WVSYkj6Wzczj35OQHEptDqRmxdwQoDYoEk5iYcb3JOeWC1frcGVEf9qs0yzwx1AbgkAOPElweovZZlleS6MALP0HTt7L5zJg7kjnCsuksVsEfM2R0_Mzt8nT24LczCNyZac50hHVkCepaZDRs26KodYnSs3doFlYOUJpCu8sxil7VBTEtFY38dENg"}'
         headers:
           cache-control:
           - no-cache
    @@ -142,7 +142,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -156,11 +156,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -176,13 +176,13 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/keysign44471023/607d1560975042d8a0540c5ce8ed0a51?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keysign44471023/f1868887f0d94390ad1cb60db3ed3fd6?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Forbidden","message":"Operation is not allowed.\r\nOperation:
    -        \"get\"\r\nCaller: appid=3640fa99-2ed4-4816-92c9-3c61066adca2;oid=00000000-0000-0000-0000-000000000000;numgroups=0;iss=https://sts.windows.net/00000000-0000-0000-0000-000000000000/\r\nVault:
    +        \"get\"\r\nCaller: appid=3525c2f5-9605-4d01-b30b-59272b48be7f;oid=00000000-0000-0000-0000-000000000000;numgroups=0;iss=https://sts.windows.net/00000000-0000-0000-0000-000000000000/\r\nVault:
             vaultname;location=westus","innererror":{"code":"ForbiddenByPolicy"}}}'
         headers:
           cache-control:
    @@ -192,7 +192,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -206,19 +206,19 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 403
           message: Forbidden
     - request:
    -    body: '{"alg": "RS256", "value": "YX0IOuHlYW7IEVboW0c8M_geUfp2pKoCw7ujVZfXZOy0890603_QcjCSzuw_qUWehJ8IYVlfaXeF3Ebu36oB6cD8oG8OfI6rLM9BKQUR2KE5VoCBKAGit7FxhAnLRFGP69dF6gyO_wv_-zCJnXLIOg1Pu0K80WVSYkj6Wzczj35OQHEptDqRmxdwQoDYoEk5iYcb3JOeWC1frcGVEf9qs0yzwx1AbgkAOPElweovZZlleS6MALP0HTt7L5zJg7kjnCsuksVsEfM2R0_Mzt8nT24LczCNyZac50hHVkCepaZDRs26KodYnSs3doFlYOUJpCu8sxil7VBTEtFY38dENg",
    -      "digest": "vgZc0NQUb6WMKX___V2JntcFRO_vszKwSAj7R2rL1zg"}'
    +    body: '{"alg": "RS256", "digest": "vgZc0NQUb6WMKX___V2JntcFRO_vszKwSAj7R2rL1zg",
    +      "value": "YX0IOuHlYW7IEVboW0c8M_geUfp2pKoCw7ujVZfXZOy0890603_QcjCSzuw_qUWehJ8IYVlfaXeF3Ebu36oB6cD8oG8OfI6rLM9BKQUR2KE5VoCBKAGit7FxhAnLRFGP69dF6gyO_wv_-zCJnXLIOg1Pu0K80WVSYkj6Wzczj35OQHEptDqRmxdwQoDYoEk5iYcb3JOeWC1frcGVEf9qs0yzwx1AbgkAOPElweovZZlleS6MALP0HTt7L5zJg7kjnCsuksVsEfM2R0_Mzt8nT24LczCNyZac50hHVkCepaZDRs26KodYnSs3doFlYOUJpCu8sxil7VBTEtFY38dENg"}'
         headers:
           Accept:
           - application/json
    @@ -231,9 +231,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keysign44471023/607d1560975042d8a0540c5ce8ed0a51/verify?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keysign44471023/f1868887f0d94390ad1cb60db3ed3fd6/verify?api-version=7.1-preview
       response:
         body:
           string: '{"value":true}'
    @@ -245,7 +245,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -259,11 +259,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_wrap_and_unwrap.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_wrap_and_unwrap.yaml
    index a69ab6987854..e58d59761cfe 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_wrap_and_unwrap.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_wrap_and_unwrap.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keywrap450e1034/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keywrap450e1034/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:29 GMT
    +      - Thu, 05 Mar 2020 23:16:47 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,21 +69,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keywrap450e1034/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keywrap450e1034/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keywrap450e1034/a4b9a642a251400d8bf3ed53acd760dc","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"z6Yx2QvIzu360P0fOxtW5tItv5hMjVd6bvehVKvpzmY0fc3P9GmES3JUGbp9nB21I2rcmhl5hMX71MreI1rvMlGaW56uK8oFnOOj5oggVayycirYanDqtbuVxzpPdiHYEyLtyyGBjIlj6dZ6P-9448AjLcZNLKinJwNV7RpiKdpDlH_497JiY6S2M5zsE4xwqRNI9lklOHigXpvkv3y2bIyhzIdRSbvkWxUR9kOZ0DjFAxSx7zosl8tCx-7CGg4V81LZ2pIDoV8CyTlJT9tPLCH7zwACKv39q2rqw_lzcs6ULSqo7fbKdButejyVY42mIQFKWJiFCU7AHAZrQbppJw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676530,"updated":1575676530,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keywrap450e1034/bec9d21f19b6477997819b1578329948","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"l95wfS_DbdRxNlgOuruJ93OOnWknVPwcxgDxFkt1KsWLgv21FO2jbw0CFib--Bsw4iYN351Wj90AwtC1CXIIBNHDtvZVJhVMaGjcYL__hFr-7TO8ZWtuMyxhKi7mDnIT2DIwbf6TjdAQMaQPa_SrLuhNFD0AfOndUg25bYiMnFEFVCqN48fo-vSrfPi4qNCkGetol0QPDH174JumETGpDYx3a2J3LDtZgqTWPAo3vkbtgU0m2dWbLztwHDi3cB0NhFXn820KtkpPtSo-iu6NvJo7sY7KZ5X3hkApCssZx4wsCqdQummHqhb1VhKNNBnL7dAbtzedJd0ibOJ-quYtow","e":"AQAB"},"attributes":{"enabled":true,"created":1583450208,"updated":1583450208,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '662'
    +      - '674'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:48 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -117,13 +117,13 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/keywrap450e1034/a4b9a642a251400d8bf3ed53acd760dc?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keywrap450e1034/bec9d21f19b6477997819b1578329948?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Forbidden","message":"Operation is not allowed.\r\nOperation:
    -        \"get\"\r\nCaller: appid=3640fa99-2ed4-4816-92c9-3c61066adca2;oid=00000000-0000-0000-0000-000000000000;numgroups=0;iss=https://sts.windows.net/00000000-0000-0000-0000-000000000000/\r\nVault:
    +        \"get\"\r\nCaller: appid=3525c2f5-9605-4d01-b30b-59272b48be7f;oid=00000000-0000-0000-0000-000000000000;numgroups=0;iss=https://sts.windows.net/00000000-0000-0000-0000-000000000000/\r\nVault:
             vaultname;location=westus","innererror":{"code":"ForbiddenByPolicy"}}}'
         headers:
           cache-control:
    @@ -133,7 +133,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:48 GMT
           expires:
           - '-1'
           pragma:
    @@ -147,11 +147,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -171,12 +171,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keywrap450e1034/a4b9a642a251400d8bf3ed53acd760dc/wrapkey?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keywrap450e1034/bec9d21f19b6477997819b1578329948/wrapkey?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/keywrap450e1034/a4b9a642a251400d8bf3ed53acd760dc","value":"oFo3I4zAHab0R1uK7SGJSF4mqPtG0LezVovL7ZKEWmW7frJ-y1lHoh5Q9vFEF-llvMpxyQtzhG6Tu9FPZ5p-KwopJzo1gzRvxv9e27hPp1uWO_2dm8GTyPPMw82eVEcgXl8ET6zwWC2q0PVglxKMsJPpfTVpWXEglCLIhywj5BU_XrPW0iTW8U6iKkuVOY6NP00O3vsitinO13YWGI5hq_pu_vZIsYmxHHtWJILwHG8HEw7hZk10UV0d1pcAjuwITpo1k62NibKuw49MsnPPIqZbb9qTgYDAJjd8PlVbnLT0iR_eLNPRPKWb0L_fth2LTsRy40ADf-t24h-yRirbEA"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/keywrap450e1034/bec9d21f19b6477997819b1578329948","value":"cTlD03J4HCFcpUjX9ydfIlosjiTJsH66L4BiybLFQPOqUZJgC1wKlaC9XeDDEH1qWcFK2JKWJHSDxaxcxKiDW4NpFxwqC8sqlYEdt76WGWCowbFo-vZJSj80XgpNmAKZJ6uE7P0TPOhOl4kfmMDNGN-QLzSYkWS2Sze1YujizkJhhjk2DbbDTkvPdQgzyvSqggxKIjCCuQsxYIZ9gK_EePBs2zxt0-qSjNaHNG3ZYvp19317nbIoovSAsQGQfiSE4jNjdV_KmZwr4MA1G8hin_zqW9rsZsD23YrcdOrLqfQjgbLmzBqrXa3ubSO-vwE2fOv5t0e0ZP0ogDJN6YxBig"}'
         headers:
           cache-control:
           - no-cache
    @@ -185,7 +185,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:48 GMT
           expires:
           - '-1'
           pragma:
    @@ -199,18 +199,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"alg": "RSA-OAEP", "value": "oFo3I4zAHab0R1uK7SGJSF4mqPtG0LezVovL7ZKEWmW7frJ-y1lHoh5Q9vFEF-llvMpxyQtzhG6Tu9FPZ5p-KwopJzo1gzRvxv9e27hPp1uWO_2dm8GTyPPMw82eVEcgXl8ET6zwWC2q0PVglxKMsJPpfTVpWXEglCLIhywj5BU_XrPW0iTW8U6iKkuVOY6NP00O3vsitinO13YWGI5hq_pu_vZIsYmxHHtWJILwHG8HEw7hZk10UV0d1pcAjuwITpo1k62NibKuw49MsnPPIqZbb9qTgYDAJjd8PlVbnLT0iR_eLNPRPKWb0L_fth2LTsRy40ADf-t24h-yRirbEA"}'
    +    body: '{"alg": "RSA-OAEP", "value": "cTlD03J4HCFcpUjX9ydfIlosjiTJsH66L4BiybLFQPOqUZJgC1wKlaC9XeDDEH1qWcFK2JKWJHSDxaxcxKiDW4NpFxwqC8sqlYEdt76WGWCowbFo-vZJSj80XgpNmAKZJ6uE7P0TPOhOl4kfmMDNGN-QLzSYkWS2Sze1YujizkJhhjk2DbbDTkvPdQgzyvSqggxKIjCCuQsxYIZ9gK_EePBs2zxt0-qSjNaHNG3ZYvp19317nbIoovSAsQGQfiSE4jNjdV_KmZwr4MA1G8hin_zqW9rsZsD23YrcdOrLqfQjgbLmzBqrXa3ubSO-vwE2fOv5t0e0ZP0ogDJN6YxBig"}'
         headers:
           Accept:
           - application/json
    @@ -223,12 +223,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keywrap450e1034/a4b9a642a251400d8bf3ed53acd760dc/unwrapkey?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keywrap450e1034/bec9d21f19b6477997819b1578329948/unwrapkey?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/keywrap450e1034/a4b9a642a251400d8bf3ed53acd760dc","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/keywrap450e1034/bec9d21f19b6477997819b1578329948","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control:
           - no-cache
    @@ -237,7 +237,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:48 GMT
           expires:
           - '-1'
           pragma:
    @@ -251,11 +251,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_wrap_local.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_wrap_local.yaml
    index cfd0508d45b0..66737c80eaa9 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_wrap_local.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client.test_wrap_local.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/wrap-local/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/wrap-local/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:46:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,18 +45,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 401
           message: Unauthorized
     - request:
    -    body: '{"key_size": 4096, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 4096}'
         headers:
           Accept:
           - application/json
    @@ -69,21 +69,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/wrap-local/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/wrap-local/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/12af7a9914a144a4b2cdd7f8114ef361","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"uHLp4oY7W0LwCBZDRh4xBkS_tBOW1QFuHONTz3ZO6TcFDwhP2Cnx77__Wt5YZ_gHvs-b6oDu1hSTIlG1mFD4tdxhYr3zrg9Z6V5VYm48CvxA2ynl97txve-Rrkcd_7iJMv0QSlLNgGECLWY4f5_JN9k8xCQMvFQR1QDkMnXME0T9Rg-AaXjQSiGddfhjitJ0a3m4VpJtbNZCqAFXdRAGUQ-IvnBnrinrMcpwtua7sFOASo3R-43Ka9n1KRCRESzHEX9R9vuimqgc808yhs9OArSlvBIXlaDvEScBcB0cyaaevzShi-MS7vnJhpOwVdWVJ_PzI2hLDUDEWCjhlPwQyNKDcHv1KaPR1xBl3A7Sxr6QCsJ3H4_jQIMwJwIMg7ubM_nTLhLvMC3CBhL5Zg1ADUF-2tfrkdkGYcG1a0APJo9VoKlRBfYj4gOAG5V1bJNQ3062HT8_bZYkogBuDOfz-M9IX16UY5U1_ZLy3FpzuM7BpvYOE4iNwaexZZT_MboeVqc-W19av4hos2n30YHF2EqXTAiA2NX-sW87dWg42d1VW9FeSlERmpuBmh3rq4fnFHLIGuwLZ8WVT98rCBrJ3zYxkm3BjjLBaS9QSvQS7ehEXGNzdYAJEjcK7rC2DrZ3TdliYLoWUaJyk0hju__vvlFpeYhZJtiC3Lz0wqpL310","e":"AQAB"},"attributes":{"enabled":true,"created":1575676532,"updated":1575676532,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/8ec7b81640724242aee8186a80428827","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0LJMQk1GuG4mcDWAwFGZEpDedzHKJmuGsjKfJZdAprRpm77Bq8MoUraQFCe_ZhHrCgHcPMs5a7geVFV3UyeMNmbHcWiRvofkl5Va19pCF1dlTqavU6DbJAIWBqVxiDSJAMn1Ki2g05SqwvuY_wkloQVZcYycyGt_EAtZlN5l3eU3XY-u-zdfouq0L21Yh5VqnrVQ5aQNUPYv8UtLS3AhIUyaK9ps0j7r4-MSFGt4FWVJ1Jq6j-YhzaXr8n-RLAK36oiI3bjNNLyZrIAa4wlEgbcpYxnXqVv_N7GvAQk1PTEO63-I7L93iKpwBuvDdTgwGa5tCa5mssS9dNRC7WkDsUTUsU3LtLMyQ-Qa2I4AnJUnDqqabUlAHbhj7iPFjuwKbz4iFU6DyA2X5aX7uBkvgqyhokGQhphC3ZV4pgGBG5upH0NpOJSkqn7222d_w_GPmKZn2fVd6hevQYrTOnU19XW3L7fhQFp51jVh8gLQMKAdD48jIZl4SPN32ZiX4DWFWEQXstmw2ZD5RxcVL-rTHUOG3y8xXa2C0rtWE00PIiF5HRbXpzQvZMQxDeF_K5GhLA-d7ixj065HrH6A63xKx8QaB1iBP26cqqUfa5tO4ESRNRgiCWPgYXPqf9uzJ_T6euTnj0kI9KqHUrENQW1odTKaa_yX4Q-HVBR5PsvFySs","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '998'
    +      - '1010'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:31 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,18 +97,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"alg": "RSA-OAEP", "value": "e0VXp5cS4bs5p619h_TVupSZzxhCEBjeJAio1yMq--Z0gXsIDzUKpI8DHrxxvSrM6Xl_PN83pQDn6GDliUFXoNtU6CzF8n5T3ZC9uAQw-852sr5fIs5OzFyhuYHgx5taNO_v5eyHipr_2FiA-q1-ygIx5PclfS62Z6s_ikfIOs-lBswlQc-WxQrnh_jQp0USeLaEengOupBZt1gEgxq9FVyP8tVdsTK0HNU683WashpkTAKo1GC6d2RvS7gXgk1kbt7A7IjvqgIjZI4f2gKZDtqy_f4FounBqkhoPOMQPcktK5vZkRSYdUYWxklrMRYuPLxPEqFvXofG2nh0w5HjYhCodEJGWIH1CjvUT9iTDhOiFtb1_h7sskCU3rwoSyp-L_IEcX-j_nxMde0wj44BAfn59hoG47VcOlWE2_v5FwX5bqjG93kbEy8thILo8nCcUu6TCJ5cJ7uJfSJqa7rq-DTdMWea0jNulL3rvCGeh_RJvd7o_utXqHyQ3N_gwn3I-vtT74BQXl4nMj-W2yL6G0Wn5RvT2t0JIvRnmCCVMSc-n4rgRWBlChc9mrZo1t1Xp-zsdK3k8mwmy2W8jQ1Yq6pHb_gSaJ4sWDm9FJFCdNsZmZFgxaG0CkK9f350DF_miaVh5W-63oZAtqJyjvP--4fapVvw__iBvsNDKKMGujM"}'
    +    body: '{"alg": "RSA-OAEP", "value": "Q4rveKQ7OGHBtIg6TerS5A2tvb2aRdR3mIt_828UHolybOx2E5zs4O8ZCwHvnUBkulp3Rk-HVTAP7CjJu4lMzK42GEa6WwWZUT9BztufJfFAVfTzHjHTWG_Mn0idaPXpWOJ-QoTg0IhxUBRBWbi3W9HQCPcAbJ-LPd0P0y-Yte_gb-Vh9DeV8vcGqaQ4KHhNYyr7tBFLChe-nIuXGtYzmKOZiuOc5bwm9rzaH9Aby_FtTB37rAJXyyC3E_SQ44t_3bV7h_2_U06g3FlVctdI7WvK230GhJM1hi0wtrAw6NNWqIXJyamNM_Dxt8GUIcSl7L-q8s_bkZl7QtcB_mNs2Ag7Mqwlnha7hY4OT7dDgkpoqDEInsWdH0-rk7ZzZ9Q_QgIZY9ocppy5L2-USaI463W4ixUyVkyw-mwc0R8LJ9xp-JmfTMWvuCmiu3CuY7lkIUFQuUXfDRQjLTJPhJFfyM8c_2y2MJOkwJlNuD41BSwJ8D-scQp1YjdrV_3MdNvRo0qfT6MnPqWzwHYNS_RIbS-FZtXqZmME_VGtBQtn6uZFlveO_URCYMiInRU-TTUIFxjpemhgbao8f5cjGysNRYouTOWlCUVLrJQ68DgfNuFTvpASLgX-8863eo2syoEWy_axcM3LIooUoisgNdb3MDGpfmMksA7sQhWRLDNSOCM"}'
         headers:
           Accept:
           - application/json
    @@ -121,12 +121,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/wrap-local/12af7a9914a144a4b2cdd7f8114ef361/unwrapkey?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/wrap-local/8ec7b81640724242aee8186a80428827/unwrapkey?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/12af7a9914a144a4b2cdd7f8114ef361","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/8ec7b81640724242aee8186a80428827","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control:
           - no-cache
    @@ -135,7 +135,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:32 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,18 +149,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"alg": "RSA-OAEP-256", "value": "agAnB1HdgyAUzXBQmcGDzjRcRBxuez-uksVVuiKgjOPV1lweuFOH12vgeM56u5_AAbUoFTsix8gXVO-Lys6Y7OG0ThpoEY-3_FbWB8YyRLJaKkK4k2vBa28dp5UlL-U5oIlxsuLoOje4if2M6CU3jquemYoJcsYG3WOqEzQlmHmpYbwD9qU8eJSAiC-S5pGRSU1sQ49abwATWm_fiFV8c5NaVYYk9P8lKtB4hGcTqRgGaEf_LhSQLax_N9sGp56Kz0z7FE1JEKo0I6-oXbzOWSau6s90BCEZqgHbdA-eJCQWQXGnNfW9NBo_PMoXmS1sDRBXN32s2CcS8EhySc1wJY42w4wM80oWt1aBdf9DrBrCvXosv80QfZ1R4N-8p2zf6Y1_o28UrEu3QB3apGKnnTATpkzk3M8yA3befJvUJzt2Irm9ofaDK1NiMKaVj7W9Bn14Rr8BKuopISS2mD86KLwD4yRmnhLpm9fmm8mLlvvOUT6ENyOamxyvvcJkSa3-ax3zWvZZv2vur0KQtzwLtckG-qASkOXLQTTvcXPkv94kCsUSGXlYe48JlUgl_MjhpR0YgM4a-i7ZtwgQXi14WJOM26z1rYcwjYzUCIvr297wDeo-1FQG0FFJGtfWXaMqAXeFCUHSwO7jihL7-zGeiBVZDX9eLJzmGKT9a4QLVu4"}'
    +    body: '{"alg": "RSA-OAEP-256", "value": "CNikisLevC0rx3uAgpFlZmdrev5FZ-XjZ-DVgTVQf9AlDXPGMDJUjAfCg9vCS2838ckpoFTHWTTnnxpN8FdbTt3E8zjfCdcj3Cc8wldVNks8lhQETn9dAxM_gorqwaSzuQhU1u4crvwE1tMIcQ7JfHRTf5aOUeamXF8o6LMM7AFE0iwzeA1ozuzSox8DVVkylliTQocEubT4nwcCNa1EP8AKk7GfcDRf8WY8p2lEfi0uQd9-4kuSWsP8rBY1_6Ox3CUTEns4Yi9WwDomF7RUtA1S3grMrE2rZcb3pdYIJARfZFmTLbtEsA28K9OKEDMcCC5CjKbERUlxLeSs5q-lLLbLJNzETnFEc_VJnTOswXQCc3mSfHOh2-aPZOfr1SqjNWndtDc-qYGNkNGWThRGthuGH7ObbbgqCIYPb37AAMVreMBM2zRGGkbvT6_FHP-cpKFa-vBVXukCuNcM_pOLKP10N4s1Ahql3Ev0iw-MiKOBh2TId89Am89rCcFN4tddjPJEDubAHdaOK3tEsrcjXQBVKh8cH83cWXcRZ7EB-MV2LUSfrqPYqRQVCMiEhTeU9gI3VIU9FtGimvwlSoTga_iVeuTqmT5YWTxzEqzGeHAoE_Jz2pQksA5ZR8uW3qteY248lzKOlSQqFRfpZ5kHrVV8C5_67Za06HO8Vkuteag"}'
         headers:
           Accept:
           - application/json
    @@ -173,12 +173,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/wrap-local/12af7a9914a144a4b2cdd7f8114ef361/unwrapkey?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/wrap-local/8ec7b81640724242aee8186a80428827/unwrapkey?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/12af7a9914a144a4b2cdd7f8114ef361","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/8ec7b81640724242aee8186a80428827","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control:
           - no-cache
    @@ -187,7 +187,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:32 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -201,18 +201,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"alg": "RSA1_5", "value": "QOFs2AbdgpnAw_zSlsdixvBlGzuVsTROPfB4-r8UegGtzt53a1tOPVzorKI8FNbNE_IercovTahJbAqFfUBa7ohMcl3hWpJrOqvlYb2qhU4oPFAXPMU42VO0dC3poKYJju-MhDqQ_uMWUGVipKS3Laj7mCtzUjIpRfzRaWXd_8uWFzUUHHgV2VuCqH9uCcAtV8XOG-yDnAxBJOUJVZziML8_Re_oFmTRcoETLeB68S_JlTUwJoq0eAQYFpyzrtf6ZphQCnou6DDIjRoAUaPOOwRI_D-oK3DPEADwRSHSkOvsE2HtJ343LKSvnFICQW3DwM2ClBMNH2hL0k7zBUx67LpwHg13_gI2JlNEguWhUJRbfO2uYUXhNQ_HJCgkacNHFSBzjPb7Lxl1FMoBN8aw2eXMv7_3h288snTEopUkF_5q0jJeSD6q7pfBkt6mpYpKBcK5aay25H-ofqxQHPiEJx4QkTn_Hnvn35Rsih2ev6OTqoXVrdJwOqTgDOmj90HVMQOJ0dF1T6OJY1cbpe-YXU0WO-q-o7eyBm1yodgBhS8T2iH4b_-mhwj7RUQv91H6RSSQP7OJ8tZWPyTBXTu5xRd-LRnrq3cI4eHksOK5X6UJkpezMw70yg0YDGXy5zhBT8q712Yst7apR4TEzXPt_scQHiQ9OlEbcqeWKB2FsXk"}'
    +    body: '{"alg": "RSA1_5", "value": "CdPA33GsLe-n4LTLmiF63E9xuMb8RYawf6QlYEzNlqzyF0Y06uuM8ASurKCT-i6gQojkDT_UB2PT3M3DO_39FzxORZuHthWDvYXft36Xa_ypdWcB_jC4kVfxSD4_lOGiFV3eTSakzoHDHXJS_otMlZNrxzEEvNGMJbfSAE9iiuFzvHN4TZnN_o23-ywu9-OSR_5cPgnfyt-gC2TGfoFMFDrptVYRXR7BA6exsgEj2_7s5C77RH7iCgc_RSnkHCBnjtAVSPrOa0bk2_6QmE5s2-mEopb_Dn7C9clUXWAjdRwBj6ZfNnmmmNiIWojaYq_G3rlsHcApRDmy_34kqeu6e-oxJ-vc_ArpvC6OW_cCPNDaXkZOTffSgCuRbIBvG6ap8bOwTqnXcPSxLREklKHGnMTyK5V1XLwfYwz0Lt395lnS4-Z8k3jF9_fJu0OyY1x-T44JZZPzx5OqDFv4VdUfO_h20ipBuz2CQoBzFFWBh-jkIv5lihocUk_VqCCYEJWijuNYe04l5w_Fiuofj-RL_t50097LfPqUDG5gvr6QV70sh6EyHFynKTQfPUdyYDwaIRfPT6K25hjYdb0oCKRv0mvGZsrQHMgBYgn2YCjeoEecMMlbh5z6ciU81DikJ9L994pm0vzG7uuWxCfOU8sYXoBpgJR8l2R5YIHtYv7dFQw"}'
         headers:
           Accept:
           - application/json
    @@ -225,12 +225,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/wrap-local/12af7a9914a144a4b2cdd7f8114ef361/unwrapkey?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/wrap-local/8ec7b81640724242aee8186a80428827/unwrapkey?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/12af7a9914a144a4b2cdd7f8114ef361","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/8ec7b81640724242aee8186a80428827","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control:
           - no-cache
    @@ -239,7 +239,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:32 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -253,11 +253,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_ec_verify_local.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_ec_verify_local.yaml
    index b0034d52a513..c3b44247f227 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_ec_verify_local.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_ec_verify_local.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Wed, 22 Jan 2020 23:02:34 GMT
    +      date: Thu, 05 Mar 2020 23:16:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,14 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: https://bpkne4fbj6xagkn5kplxnkzo.vault.azure.net/keys/ec-verify-P-256/create?api-version=7.0
    +    url: https://jme7red62btavktnt46tjrh7.vault.azure.net/keys/ec-verify-P-256/create?api-version=7.1-preview
     - request:
         body: '{"kty": "EC", "crv": "P-256"}'
         headers:
    @@ -47,31 +47,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256/5f45347fbb4b4b6faca835a743876196","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"nPz6Sg0p6QhUOyh9AOHA-garbQjYPsdba30BuXKbY1U","y":"jgPyADec_lLws6PwXatJ5ATpeECAy7L31n-b6vfaT7Y"},"attributes":{"enabled":true,"created":1579734155,"updated":1579734155,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256/75bbde3be3ce4e6c8b0cb909fa670748","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"CJEx5kEPwtbsR1N3v81tk8xwe8g1tlvM_r5YMgEdGkI","y":"yige7enjwjHVMJnvjgqBtLq2H3KHUpWSxxJbvKqXvRk"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '373'
    +      content-length: '385'
           content-type: application/json; charset=utf-8
    -      date: Wed, 22 Jan 2020 23:02:35 GMT
    +      date: Thu, 05 Mar 2020 23:16:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://bpkne4fbj6xagkn5kplxnkzo.vault.azure.net/keys/ec-verify-P-256/create?api-version=7.0
    +    url: https://jme7red62btavktnt46tjrh7.vault.azure.net/keys/ec-verify-P-256/create?api-version=7.1-preview
     - request:
         body: '{"alg": "ES256", "value": "vgZc0NQUb6WMKX___V2JntcFRO_vszKwSAj7R2rL1zg"}'
         headers:
    @@ -82,31 +82,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256/5f45347fbb4b4b6faca835a743876196/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256/75bbde3be3ce4e6c8b0cb909fa670748/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256/5f45347fbb4b4b6faca835a743876196","value":"BmDdrahLHI15kO3ss0WruiwRF4e37xta2Sz-Hgt_rxCI-JheoHGSfYpsOZDmxNZcjyB4BfDoSzs2NB4tsirK4A"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256/75bbde3be3ce4e6c8b0cb909fa670748","value":"0jmpAxYSjE_tlAv4gR1hCnoPQxV3MrrP3V0C4utZoT8YgPPmx0tqypxhLrAm9PXvYNSjA52fUWSoaZLC65ygKw"}'
         headers:
           cache-control: no-cache
           content-length: '209'
           content-type: application/json; charset=utf-8
    -      date: Wed, 22 Jan 2020 23:02:35 GMT
    +      date: Thu, 05 Mar 2020 23:16:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://bpkne4fbj6xagkn5kplxnkzo.vault.azure.net/keys/ec-verify-P-256/5f45347fbb4b4b6faca835a743876196/sign?api-version=7.0
    +    url: https://jme7red62btavktnt46tjrh7.vault.azure.net/keys/ec-verify-P-256/75bbde3be3ce4e6c8b0cb909fa670748/sign?api-version=7.1-preview
     - request:
         body: '{"kty": "EC", "crv": "P-256K"}'
         headers:
    @@ -117,31 +117,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256K/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256K/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256K/32aa946ea40841768fbf7f45bbd11c22","kty":"EC","key_ops":["sign","verify"],"crv":"P-256K","x":"YFD8XabrFd-itdGKR0J4vaj69qPkSQ5hO8qjZMYXzgE","y":"z2UEh1vy_JGAHzcgE8PKdBRVjxVdBrW4QCxc1A83g_I"},"attributes":{"enabled":true,"created":1579734155,"updated":1579734155,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256K/86a0f0fa942d432da57b1fa54afd4b79","kty":"EC","key_ops":["sign","verify"],"crv":"P-256K","x":"8_vIY0OLGGQtmHMaUsSEnQEhIkT1Q1MhQfKv-l-4FE8","y":"JgSSbee4wDrNVttxMtMqMGbs1zCuWdk8FDXuqaNqJqo"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '375'
    +      content-length: '387'
           content-type: application/json; charset=utf-8
    -      date: Wed, 22 Jan 2020 23:02:35 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://bpkne4fbj6xagkn5kplxnkzo.vault.azure.net/keys/ec-verify-P-256K/create?api-version=7.0
    +    url: https://jme7red62btavktnt46tjrh7.vault.azure.net/keys/ec-verify-P-256K/create?api-version=7.1-preview
     - request:
         body: '{"alg": "ES256K", "value": "vgZc0NQUb6WMKX___V2JntcFRO_vszKwSAj7R2rL1zg"}'
         headers:
    @@ -152,31 +152,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256K/32aa946ea40841768fbf7f45bbd11c22/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-256K/86a0f0fa942d432da57b1fa54afd4b79/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256K/32aa946ea40841768fbf7f45bbd11c22","value":"J3Dgodd-wKn49g5A2nUFV5AUhfVh9fhARTbZtNkK7bQ6arUFBg39t3mtM4CecIICymINf9LwQ36dnls79M-aoA"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-256K/86a0f0fa942d432da57b1fa54afd4b79","value":"loTBEpFbbMY2KzcLaoJ-ssz4vbfXJ5dDhqsX8ctI5L0OBAfFUr7DJ1KLGkMFdv4dSVoNrFuVU9bb9wAQwRxgOQ"}'
         headers:
           cache-control: no-cache
           content-length: '210'
           content-type: application/json; charset=utf-8
    -      date: Wed, 22 Jan 2020 23:02:35 GMT
    +      date: Thu, 05 Mar 2020 23:16:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://bpkne4fbj6xagkn5kplxnkzo.vault.azure.net/keys/ec-verify-P-256K/32aa946ea40841768fbf7f45bbd11c22/sign?api-version=7.0
    +    url: https://jme7red62btavktnt46tjrh7.vault.azure.net/keys/ec-verify-P-256K/86a0f0fa942d432da57b1fa54afd4b79/sign?api-version=7.1-preview
     - request:
         body: '{"kty": "EC", "crv": "P-384"}'
         headers:
    @@ -187,31 +187,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-384/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-384/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-384/821081dd416e4dc095af12b61fb1e616","kty":"EC","key_ops":["sign","verify"],"crv":"P-384","x":"-5__0c8g4W-6Xopt1uAB972OEbpHhKW1bol8JrKKz0yVYFMcpNFcuGVG6s_voU_c","y":"XLyQdItNQkYjcm9ho3texyP3wJumvvQ3-xnwvjdcn1ghTq029BbVbc78JpUap8He"},"attributes":{"enabled":true,"created":1579734156,"updated":1579734156,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-384/fdd6f9a1879d4de3abb4bbdfcb8e662b","kty":"EC","key_ops":["sign","verify"],"crv":"P-384","x":"OjxHYoV8iUZVlZghdgQlFd27RSGZjEt_eZYJcK5v-l9wNyAUG_z7qVgwPXVuSIcN","y":"epNez_ya5FQtWQUUFAAD0sY-HySFnrAej1mH2M6wuteevflDM5dD8FRyfpuu3vbm"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '415'
    +      content-length: '427'
           content-type: application/json; charset=utf-8
    -      date: Wed, 22 Jan 2020 23:02:35 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://bpkne4fbj6xagkn5kplxnkzo.vault.azure.net/keys/ec-verify-P-384/create?api-version=7.0
    +    url: https://jme7red62btavktnt46tjrh7.vault.azure.net/keys/ec-verify-P-384/create?api-version=7.1-preview
     - request:
         body: '{"alg": "ES384", "value": "OnZY76NXJ8_MBkjnc9b9RiaL5OYscmrTal040wQuLFlRrnLvJFecIvZl2KjXqwVB"}'
         headers:
    @@ -222,31 +222,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-384/821081dd416e4dc095af12b61fb1e616/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-384/fdd6f9a1879d4de3abb4bbdfcb8e662b/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-384/821081dd416e4dc095af12b61fb1e616","value":"R3jk4DuuFEQhnrFBdn5tWTqkJT5S9cK_rc6awgoosa3bqSjbAUAct79cRrcLnTusBGg4SWFaT_oni7zfnNbKI2bXZ9M_nVpo-V3APxKYZYuhX3ScOzSaW3Bg1fgIgBrj"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-384/fdd6f9a1879d4de3abb4bbdfcb8e662b","value":"SZ9cOjU-lWCEO0FCR4LYaYQY8T4fdsWwSuQoeEiwDfHw3QyOpymYfIE2wgr5LIKZaildCdG8udwyRnXmiRLCXH9vlEkAXR4Jq5l2j9kRcxhQze3W6ZJrI4K1OOcQP5dN"}'
         headers:
           cache-control: no-cache
           content-length: '251'
           content-type: application/json; charset=utf-8
    -      date: Wed, 22 Jan 2020 23:02:36 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://bpkne4fbj6xagkn5kplxnkzo.vault.azure.net/keys/ec-verify-P-384/821081dd416e4dc095af12b61fb1e616/sign?api-version=7.0
    +    url: https://jme7red62btavktnt46tjrh7.vault.azure.net/keys/ec-verify-P-384/fdd6f9a1879d4de3abb4bbdfcb8e662b/sign?api-version=7.1-preview
     - request:
         body: '{"kty": "EC", "crv": "P-521"}'
         headers:
    @@ -257,31 +257,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-521/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-521/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-521/572a62c11a8544ee9d159629ad54e3c3","kty":"EC","key_ops":["sign","verify"],"crv":"P-521","x":"AGQWayLgz45lEsgEF52H_sbyH8DmpjcKOdxS01HZ0DrEwROns9pDxJAytUmU9XozuBymjLV_1WsAHrF4jVAnQiGI","y":"AfNq_pfAmhtYylwkHQ3e_Wi-PikTIwJms9n-nPEKv1zx33g9KDyY5wwRCyf7WqKISYVU5jDWTiMuAdi3x-1rWMn6"},"attributes":{"enabled":true,"created":1579734156,"updated":1579734156,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-521/2c6640e9b26749738e9b6bb89d796b1c","kty":"EC","key_ops":["sign","verify"],"crv":"P-521","x":"ADqLI9hi8qJ-wu2EzddWdCafe9KWG0ZqtYYnd6i-odWhiA28baQXNuluHJWGZM9YaPLMpNZroyyDieiVrT1HmDPH","y":"ACcJoE9OncOAzOvcupOXo9_PxLhKtErH1IQR6_qpmMftHI1LgS4BGuxM21ZqvlLSz4CNNWCX9bzP5zhCxPl6CkdA"},"attributes":{"enabled":true,"created":1583450194,"updated":1583450194,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '463'
    +      content-length: '475'
           content-type: application/json; charset=utf-8
    -      date: Wed, 22 Jan 2020 23:02:36 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://bpkne4fbj6xagkn5kplxnkzo.vault.azure.net/keys/ec-verify-P-521/create?api-version=7.0
    +    url: https://jme7red62btavktnt46tjrh7.vault.azure.net/keys/ec-verify-P-521/create?api-version=7.1-preview
     - request:
         body: '{"alg": "ES512", "value": "zZyL-eOHDnnq34aZaWgBMobx4x2Pm3mPRo4eqnRmLK6sE0jsXZFOFhMXaTcvILQxovTsMMh9JupeojYCnDvfrQ"}'
         headers:
    @@ -292,29 +292,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-521/572a62c11a8544ee9d159629ad54e3c3/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/ec-verify-P-521/2c6640e9b26749738e9b6bb89d796b1c/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-521/572a62c11a8544ee9d159629ad54e3c3","value":"AJHRHWBrb8AWfVXPcwv7E_2vv3rpA51_6OR0t1PghnjAd1TSSeIPLCPRoz1TgcpRb7w6tzneG0xNMT2_sAOSCJsxANnc30P3Ikq4KHBtXURa9YDpJZSJvki-cOHDG9FLqqGea0pB7KPDfMFKo7aMcW6BugGFuc3bgVW1faViWGdGPlr9"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/ec-verify-P-521/2c6640e9b26749738e9b6bb89d796b1c","value":"AKtdM2WdjU8Wn9Lc_OlBg5F7vbjMwzfps-R-ebqwA39eJt3Jwhh-V4Pa5GRyil5776o0po9A5xCCd1QhN5sPEmmAAJQuJYFamYYlkcxJclo5D7rJkdmTGfYpID-4K1KkiFGeAloCDl4LbFKiJ7CNJSGmMMFaFbthhm4nTGpA1wC5GeDH"}'
         headers:
           cache-control: no-cache
           content-length: '299'
           content-type: application/json; charset=utf-8
    -      date: Wed, 22 Jan 2020 23:02:36 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://bpkne4fbj6xagkn5kplxnkzo.vault.azure.net/keys/ec-verify-P-521/572a62c11a8544ee9d159629ad54e3c3/sign?api-version=7.0
    +    url: https://jme7red62btavktnt46tjrh7.vault.azure.net/keys/ec-verify-P-521/2c6640e9b26749738e9b6bb89d796b1c/sign?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_encrypt_and_decrypt.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_encrypt_and_decrypt.yaml
    index f5d5af33c9ed..b7dc03d78eda 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_encrypt_and_decrypt.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_encrypt_and_decrypt.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/keys/keycryptfe22145a?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keycryptfe22145a?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Wed, 05 Feb 2020 23:07:19 GMT
    +      date: Thu, 05 Mar 2020 23:16:31 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,14 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: https://fc67dotadktd4ooeq4ilhapp.vault.azure.net/keys/keycryptfe22145a?api-version=7.0
    +    url: https://lub3gx2fo6mtw5ut4bkrcq47.vault.azure.net/keys/keycryptfe22145a?api-version=7.1-preview
     - request:
         body: '{"key": {"kty": "RSA", "key_ops": ["encrypt", "decrypt", "sign", "verify",
           "wrapKey", "unwrapKey"], "n": "AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU",
    @@ -54,40 +54,40 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/keys/keycryptfe22145a?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keycryptfe22145a?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keycryptfe22145a/59d100dce0a940b68248d1057987e351","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB"},"attributes":{"enabled":true,"created":1580944040,"updated":1580944040,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keycryptfe22145a/a5d9ece1d9cd4c3eaf968daf161b373a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '664'
    +      content-length: '676'
           content-type: application/json; charset=utf-8
    -      date: Wed, 05 Feb 2020 23:07:20 GMT
    +      date: Thu, 05 Mar 2020 23:16:31 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://fc67dotadktd4ooeq4ilhapp.vault.azure.net/keys/keycryptfe22145a?api-version=7.0
    +    url: https://lub3gx2fo6mtw5ut4bkrcq47.vault.azure.net/keys/keycryptfe22145a?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/keycryptfe22145a/59d100dce0a940b68248d1057987e351?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keycryptfe22145a/a5d9ece1d9cd4c3eaf968daf161b373a?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Forbidden","message":"Operation is not allowed.\r\nOperation:
    @@ -97,21 +97,21 @@ interactions:
           cache-control: no-cache
           content-length: '356'
           content-type: application/json; charset=utf-8
    -      date: Wed, 05 Feb 2020 23:07:19 GMT
    +      date: Thu, 05 Mar 2020 23:16:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 403
           message: Forbidden
    -    url: https://fc67dotadktd4ooeq4ilhapp.vault.azure.net/keys/keycryptfe22145a/59d100dce0a940b68248d1057987e351?api-version=7.0
    +    url: https://lub3gx2fo6mtw5ut4bkrcq47.vault.azure.net/keys/keycryptfe22145a/a5d9ece1d9cd4c3eaf968daf161b373a?api-version=7.1-preview
     - request:
         body: '{"alg": "RSA-OAEP", "value": "NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
    @@ -122,33 +122,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keycryptfe22145a/59d100dce0a940b68248d1057987e351/encrypt?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keycryptfe22145a/a5d9ece1d9cd4c3eaf968daf161b373a/encrypt?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/keycryptfe22145a/59d100dce0a940b68248d1057987e351","value":"lcMWdgsCtW-DHGZI9fwUUCcm8vVcoZhHGkeQd_fCe4c3QNEvNpOe8JaS7U-zCkyIlkwm1JaEMINGJx4Y2KbwX-oSJCAS-4eS2w_oBn4kU0LKpZ6FR8Q0PKJjmptGdDRX1kstF1hUyZXO213ey2b_QuoMyi7ogaHtFMTkZfFHUCuOuM3WAnZh6vbXg12v7NEab1eNN5bk-HSMIiP2Y2oxhnExwY1Q5N0CTN889OxkHrUG9VplMXP7h8izVHevQYzp3JR-nU6aU_5XivJZSBT-YDq-9RtAgPgClW6Ah0q1DpKKYQyBUheds5BNHyvz4VqAnsoS85vmT7qWyzBK04JCQQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/keycryptfe22145a/a5d9ece1d9cd4c3eaf968daf161b373a","value":"H5S0aERh53W588w75_-i-tT5bXqAs23HrhT_LS4RmBP_mtRudpiJ7pdXk_jjENrHnptITQdfLfZMM6TLMxaHO2Zo7ttoLipOVA5BA0VtKk_nPpSeg5mEyVLdP-Lm1cHkvn9sKgKe7SWZETTqvq-o1FU9jSIuBsn_qn9oWqKmaF_5az51KlSxEC4OjsRFzz6p8vX-z83Sc1cswrVcncE2o7-bU_nkZ6vYV-eo9Dx31bw-J2afcy62_N_L_oV9wS_VqyQcysoOZnx1TNtCoRwRLseey7WeVMck_K1msbTQQAGdzLE4xO8Em1AJWdTSebTojCekOXz6zLrTrBh88pPfBA"}'
         headers:
           cache-control: no-cache
           content-length: '466'
           content-type: application/json; charset=utf-8
    -      date: Wed, 05 Feb 2020 23:07:19 GMT
    +      date: Thu, 05 Mar 2020 23:16:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://fc67dotadktd4ooeq4ilhapp.vault.azure.net/keys/keycryptfe22145a/59d100dce0a940b68248d1057987e351/encrypt?api-version=7.0
    +    url: https://lub3gx2fo6mtw5ut4bkrcq47.vault.azure.net/keys/keycryptfe22145a/a5d9ece1d9cd4c3eaf968daf161b373a/encrypt?api-version=7.1-preview
     - request:
    -    body: '{"alg": "RSA-OAEP", "value": "lcMWdgsCtW-DHGZI9fwUUCcm8vVcoZhHGkeQd_fCe4c3QNEvNpOe8JaS7U-zCkyIlkwm1JaEMINGJx4Y2KbwX-oSJCAS-4eS2w_oBn4kU0LKpZ6FR8Q0PKJjmptGdDRX1kstF1hUyZXO213ey2b_QuoMyi7ogaHtFMTkZfFHUCuOuM3WAnZh6vbXg12v7NEab1eNN5bk-HSMIiP2Y2oxhnExwY1Q5N0CTN889OxkHrUG9VplMXP7h8izVHevQYzp3JR-nU6aU_5XivJZSBT-YDq-9RtAgPgClW6Ah0q1DpKKYQyBUheds5BNHyvz4VqAnsoS85vmT7qWyzBK04JCQQ"}'
    +    body: '{"alg": "RSA-OAEP", "value": "H5S0aERh53W588w75_-i-tT5bXqAs23HrhT_LS4RmBP_mtRudpiJ7pdXk_jjENrHnptITQdfLfZMM6TLMxaHO2Zo7ttoLipOVA5BA0VtKk_nPpSeg5mEyVLdP-Lm1cHkvn9sKgKe7SWZETTqvq-o1FU9jSIuBsn_qn9oWqKmaF_5az51KlSxEC4OjsRFzz6p8vX-z83Sc1cswrVcncE2o7-bU_nkZ6vYV-eo9Dx31bw-J2afcy62_N_L_oV9wS_VqyQcysoOZnx1TNtCoRwRLseey7WeVMck_K1msbTQQAGdzLE4xO8Em1AJWdTSebTojCekOXz6zLrTrBh88pPfBA"}'
         headers:
           Accept:
           - application/json
    @@ -157,29 +157,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keycryptfe22145a/59d100dce0a940b68248d1057987e351/decrypt?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keycryptfe22145a/a5d9ece1d9cd4c3eaf968daf161b373a/decrypt?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/keycryptfe22145a/59d100dce0a940b68248d1057987e351","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/keycryptfe22145a/a5d9ece1d9cd4c3eaf968daf161b373a","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control: no-cache
           content-length: '391'
           content-type: application/json; charset=utf-8
    -      date: Wed, 05 Feb 2020 23:07:19 GMT
    +      date: Thu, 05 Mar 2020 23:16:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://fc67dotadktd4ooeq4ilhapp.vault.azure.net/keys/keycryptfe22145a/59d100dce0a940b68248d1057987e351/decrypt?api-version=7.0
    +    url: https://lub3gx2fo6mtw5ut4bkrcq47.vault.azure.net/keys/keycryptfe22145a/a5d9ece1d9cd4c3eaf968daf161b373a/decrypt?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_encrypt_local.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_encrypt_local.yaml
    index 58891b728899..630b594ea260 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_encrypt_local.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_encrypt_local.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/encrypt-local/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/encrypt-local/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:31 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,23 +29,16 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - npglulliq7mw4jjlfdx57gnz.vault.azure.net
    -        - /keys/encrypt-local/create
    -        - api-version=7.0
    -        - ''
    +    url: https://y5tgheup64gtxnio3olfunm2.vault.azure.net/keys/encrypt-local/create?api-version=7.1-preview
     - request:
    -    body: '{"key_size": 4096, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 4096}'
         headers:
           Accept:
           - application/json
    @@ -54,40 +47,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/encrypt-local/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/encrypt-local/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/bb0d48c28224412e9dd9f699c9a871d2","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4ax7aHpaG9jA9U4ElT676fqTRtaow0ohWzqRfKf4l2LIOw2Kj_Nuatj2vLTAiaWbojQmOtLFLJjAhB__WugGODs3PUO710CaI5L0ob1xZl3sgF00_6ffzPO4miOibvdH7lchA61GAZyiPt-kU2M-XgVGXi4nHGcFk-4bw8YXb4CYoF7gLmzFCaC7bdDLU1BzCDYq40cWQ9uCti0JSNkAF-jqR8-YT5PO60NW67mdZBItdicrfG_5ymoj9RmIJ1m18oFbKPVgsLKB4R1_897TQ-bE1QnicMF08m1PT1xcjEAO7U2V_JsJsU6mhnCMRkwmONyerqX-XNCn3YB1OL0c3ouiGKmcUznjEI1Ce93b7SC83LwHPZ1Qi_6Uz_zZenJAQk9_nchzlkxq2weFv8hvzQgZ8d7IDYiA6X7qexM97YrqqmWuf66csgWdimpKLrmlfvQ8EnckKP8UlAjpGGJLb73l5FsFSOo7wx4Zx6PeqHmDuBpRlKoFZbK3D4GiCice08qzhw0mHDxWsJpB2EtNcDERE38edGy4G7hTuXHI0Sn29LkdkNPuHFwH5bBF6Z2zD2xCyUiNzKt7XwcZFfJ7RjKZTyHUoBUkRrZv8w5RHqIxThNEwNR7l7jqPdGsYBslnmdIg--llBTjKgAcmpYq2o6RX8xfUa43uc7d_79fMwk","e":"AQAB"},"attributes":{"enabled":true,"created":1575676532,"updated":1575676532,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/c83761cf029c459aa82994f036a8e4b2","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nOLiXUGegs7Gk3wz12kTHErdvVUbAG00hhNF1Y1Wj931XEz2ynWX81D_eUFb6EmXOGJMVko-4O1RO_S0VgpcNtOPcdEQpG_7xa1IFskVMKdHaS-tu_6Y0FyynGM6tOC-ji7UI71aCYd9o-cokRE7mlK50Ns-TWayfWyJgifjwe04EkSd_4D6ZzI1vo9v4kioCpQeLh27Lk6LPfLXh2UfOGfFeYSMtGwBb2WgDKLI2rjxQ3QWidokg5SNC-fzc_LXbwqUwZVbmMtPml0IECEhHfzar2X4Jtdd_L3XQvslYwNq2Yv1tgx-vNuzVFZvzpAFjixY96CuU0I3XFJAX5Q6YgE-lgQEy9RiZx2UB0MPVPehTwzCsvJJmj89I98XZus04sAdKs5jQSK0CXk2F_BCrF2P7XQ1UtO0yjXN8sDAQ107TgmE2HrXlpd6GFszNzoLSGm45R7iuNLz-RbRpydJ7Of7TwCBXx7L0LQVFcCAa54aWCBo0V25xK2J2EvusTeXsKmnrrT72CvLWNvP8goq2Bf8E3bhAzhDDBtYM_N_uYrl1ZF4zw10FqGjG2khTFo8qT4_MVAPZKDQQpPrbagk7SkJBYqKMOU1KKkd6ahvRQ5P9qQQievLXywDyol4cazH8ng7S3_34PZzsZF2lzDGptljr0MBcuWhcuCh0V2U7-c","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '1001'
    +      content-length: '1013'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:32 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - npglulliq7mw4jjlfdx57gnz.vault.azure.net
    -        - /keys/encrypt-local/create
    -        - api-version=7.0
    -        - ''
    +    url: https://y5tgheup64gtxnio3olfunm2.vault.azure.net/keys/encrypt-local/create?api-version=7.1-preview
     - request:
    -    body: '{"alg": "RSA-OAEP", "value": "lYi2Ki-_v-iZQZFsUiwSh6KcZUTUxfbbvfP-UzHBGwGVwmMp0U1-tfDBoDrKS6q_5ASkj_mDGHnD1aCeqqDyeQo_N4m4pHWZ0YSfFCUIrCwZdZjG2NfWRxShssfIBmG-cC8GcA4phQfY0M6txh9P3q6aoVx1y4T-hSXwPEbSUInU0dysYoX6F1Yfz975NEuj3pNBu7SIz9UJqQrGbIlaXE5Fz-U33Ip5uxV6j6bDN-6dWmwVDo5ciDTLXho845JGroLBFs2tjEldBNeSxWFUdl_fQeIiubEOwzPmFzbhnLEhvLYZmTuf7ZDw3q4TR6ZZMTbANvBzR1BMI3nt4zn4z3YpjEYXJyJmPcG8vZvBS7KNPEmQmfqun50dunB83yNoT7t00pKUOuX90QxTjALbvMIaw3sVyZmrdNXjSQ2GKLdLYjvgjzKy8uJyO-_tShxr-rexq46tUQGUpcO-HaotpjIJNj-LDlNbJ9e8mllZ_PyuIIk3JtJZ4N8oBM45lNC9yK1k3Qcv_fIb1EsH3dq4Xyg6tCKhusOiMF0CQvreQGjiWzwQglBhZFBQhXrkXIAo4twf12re-1pHt3rMmc4UiVXWiFjbmt2Opir5Z28_xYM-NsYoIBilIl9OqjYMvtYsfUTHt7yuuEhrGKUMyua3ccgOtuYzSqhA6cljAajmTGk"}'
    +    body: '{"alg": "RSA-OAEP", "value": "QXcqhec8kn5AyAH1Q0OYwks1NBDc5eIKEXiXfekI9XKHCyNUHduJQYrLWB-lqHe29ZtpRNi0qPnB6VnMs-RSbdnmjcaOIymFNLy2PydbV4weRsmRHt2Hi6Aj3hflXEAK5C8YGf4vJIAGLcQT-S0u0tIiDSV6B7MYgfKFxrqzJM-Ztmrz89ka9vUAx0FWDfIAjlyEaoV011ntIC-e85PW4gKyl4T00glTcdLyiv_a9tnW0DFdDJhOme1UdbQXSRADWCyxprk54A33i8oNJo3F_Y7ZUyI5MT7Rcw_28W7fjmwnnM3cfwU0wJSSgP0Mlox-6jxu-C85bsuZfpcnhfeNS4YWDveyPgI4A3qebyRcrhexa50A5Lb6IKIiklYUVG8HyfQ2c0Ojqk73HQogq9zpHcFpibesJIh7OUn25pHJvzfm9Q5Dr7Pu7_yM1pkI5LVJRs9nHdjlCYy0m5JBCyaxtZ2w_HugM0yorkTFrdBlsObh5xaJx-S4KNJFahETwxYHxeKyTi30tMzDb1BiJBLh6ziiDB_YQBOzraPWi-snn_L87-QA61zO_C7Id-wUfgwKeclk-0iJ7gQTDXYFt-H5ca-xLo_ASsZtIo9L3Zxja2hUYMndoyoozLdad1qJhGEF6JRlqFoz7B7U_qjiIGyvP_E1yhIr7GASkXdmL3i5elE"}'
         headers:
           Accept:
           - application/json
    @@ -96,40 +82,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/encrypt-local/bb0d48c28224412e9dd9f699c9a871d2/decrypt?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/encrypt-local/c83761cf029c459aa82994f036a8e4b2/decrypt?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/bb0d48c28224412e9dd9f699c9a871d2","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/c83761cf029c459aa82994f036a8e4b2","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control: no-cache
           content-length: '388'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:31 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - npglulliq7mw4jjlfdx57gnz.vault.azure.net
    -        - /keys/encrypt-local/bb0d48c28224412e9dd9f699c9a871d2/decrypt
    -        - api-version=7.0
    -        - ''
    +    url: https://y5tgheup64gtxnio3olfunm2.vault.azure.net/keys/encrypt-local/c83761cf029c459aa82994f036a8e4b2/decrypt?api-version=7.1-preview
     - request:
    -    body: '{"alg": "RSA-OAEP-256", "value": "057efCtkcuqaY2zZPCFtuffKlibUU6zK0Xe64W-N--tsELti7oiWRLtxA37GJeOkxEuw8664sc9nSQwTYxr1nQ-DAaTv1rzdMQCQNTHaB4SHBDmqbYpnhI0TALX0AHhx370xs26L1d45Ub90ZdA7MC4wXA6axU1nM3LaOkvThb44etAzSFbP-qCWmGENTZtg-0HrHfWFGVOR9rQpbxVKCQsOcNVN-8KkDWZ61u0GqldCii1Coz1hmjUei_4b4BNTA2M7562FJwMhnioW5C6jzijZpNmF_GBsGWnjUsNCHFDnkOmSseMhnUo1R0du_Q7P_7EBOpgXYCa7A5WStMmqmJB77gPUFKqm2AiG42842QD9rZ3T1qkxakB_PyJ57APynZ1aOniObiAP90DsSm8931Oqugr97L7-r0a3ZdjnfY9RofscPqTfW4-yYHw3hCaKOwHRDummxjRIZSfQ0KF7yvICrwCXvI91iAppiV3LwY3N0VVKR_5Xr2IaSk2CxjpJrDmiWoOH-gZqETGn3EMec7hv4Q3ZRTiz4zGAQQjiPVHcK25lIiEqmaMgf0RoX-fqoZklLK58ONBe5TGdp0gZVUbuJW0sw29MAeNpOsYUi4DGyXJjsXgMZ-X8SK03-PwEmYMMtopYGmKlLm-lILpuMqpnLvlCNNcqklDBaulDx2c"}'
    +    body: '{"alg": "RSA-OAEP-256", "value": "a6-4lPXV59uDR3QTlsFVdWWl4-gxzJ_rlc-it0CCytBm-OFS-puULy465VIpYt4O66MRUrHoCqeJaXRz9-VcNWBdXPGnfxexy93TN0Peg1YOa_BJfG_fK0pmQhVXcX2Abla9-2unIv5ZqxkRwmHjr9c50xHY26mEvU4vp0m2JGFPz1z-XEUs-p081fENpYtmmliR-4jVV0gSYP1VthOrNaSW8me7yv9cMWptPPHDj2ihG1-5zHLcrZRXpYB-p0BYnGGaOC3_NEE3t1hkX4kBvEh2r3DEOvtMxqcgoygo9Wxc6SV6YTJBgI6puOBHU3WOMsaMXITtrEZxO8atSjUXVxA2z_A0VmiZqArRhzVjnN8nZLPaZhk8VhobFZD32eEbKRy39ASWS2liK_p8BKF-OCXw-bGzDEhN3eRcd6gwiJ7oEKzrXWTXfwQLgvoULQeQ-CA8VQLt30CJWkfnyENt-KXQzK_w_pa53E5L0O2p6akCX-WRQM00IKjMlDk8Em_sLYzhesbq7YlT-LJOOrqHSo0F_CuTH24Rp6rS08Qr66wO_A3d0C1eHXo94_5w4Vyq-R7vWg6ju5RXSpD1dspNtOnoNBqNlZ-_yS_ObHNUuM5IN0lG6BQKPQUoaxKL14oa9Lwpp8ywUDPas6-wrkwnbZIC0riWTCkX5G46NoKHLg4"}'
         headers:
           Accept:
           - application/json
    @@ -138,40 +117,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/encrypt-local/bb0d48c28224412e9dd9f699c9a871d2/decrypt?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/encrypt-local/c83761cf029c459aa82994f036a8e4b2/decrypt?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/bb0d48c28224412e9dd9f699c9a871d2","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/c83761cf029c459aa82994f036a8e4b2","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control: no-cache
           content-length: '388'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:31 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - npglulliq7mw4jjlfdx57gnz.vault.azure.net
    -        - /keys/encrypt-local/bb0d48c28224412e9dd9f699c9a871d2/decrypt
    -        - api-version=7.0
    -        - ''
    +    url: https://y5tgheup64gtxnio3olfunm2.vault.azure.net/keys/encrypt-local/c83761cf029c459aa82994f036a8e4b2/decrypt?api-version=7.1-preview
     - request:
    -    body: '{"alg": "RSA1_5", "value": "VIwzvcfMYc9Uc4Y23v1wGdjlWo9FuUpSVC93Y_DgIRNnp2a74WnfF3ydM6D8jRV65LmewCOheXQQoZPS2r6joxpeg8Gy2cpJ2U7xQ7FC9CB5e1sKqFLwJ_GFkvh4elRGODnmcZl-Yf701Pj1iPneUvXEDB9uCWc4RMF4FJv0OqSMKg4tGSLoRtFR7ByWACJ_NnILmyg4FYsMcm_slSYjhEsphNso0hjwKbH5-zrXSvSqZvx0nZWAS9K9DR7UPK9dwQ3uAi5EG9pLGxpgymPTCxhM17lfuW2JO7kC1Pq-PwKRLutKnDbaIE51qXljpkY_qQ3awG-rzRTi-f46inwphWOYcsPx6prGeNqeh1kMR9hMufzuHwm3AVNAyzedZqrVXrOoXEXbKscRsMaTrU4UrB1Tq-X1Ck5GYpUdGBHMs5wnBxXhWocSz6bbnKiXZxySs9xGkitNj9hhIXg1DyiLdwmD39T0gcwIse5KkUORkflkNz4akRMv1qd-OafxhgzsulGFeeQik_HhrxkO5YMD5Kf00Baub29HN0a3zbiyUSvXbre_f-DGsM_KdYNUBTq0AciooFWMaceKMaz4uoWtHp1B3EjpzFyHn_Ds5QyNSCdy3uCEx1D1Wd6q61Fh-kyS0l_S8lry5r3EdkuJz0aX_qEpqxSanU4PlI3FANS4ZU0"}'
    +    body: '{"alg": "RSA1_5", "value": "Gi_7jc56W58xhvNUa64zqwNNRx0bQ7EWJysV2-a3IqVnvDI8NgZpGXwCDLzMnSg_q3FgRiNnASj7dbvYU0q5KXCwcIJYRLK0LJId9x-Fb-irGUZLFR372M3_yXM_-_Rn4joQFPfeGrqDGXXGbYveR8p6mY6Dk-qWboTQnFn3rWxY88kq0M8f1eZz6QCTsVsrdd6uwb_dgVnqa1BByDT3977tcMYhx-6D2s5bRhDITY6gfly2Z8aB9OFqDNOkX4j6PmdiRtay31j0r_tq8HSH996ZyYNPCXiIrhmrSSGYNEUNIflE15VvdBRqobMkTpIopPDFxeJsQXnn74oJaDFFiwdYDmr9snmT_9ot_-ggcSLQd8FLrygG7CSBXM308t9k5_LwYU5H_X_rsYl0otMBZzuUg6pHwxhWqWMMa7XuqMrrWRMUhTnzG4hTfsLdEYidhNo-il3MXBktgUyFm_rZLtrOJrRy_Q5gDF_X7Yemwe5r2c16KMg83xOXS0i7w7se86oQeGbo88HHWJvWHvhXAbe4dx_fy6T4LCNvcP8gCLo3qwUKdzx4Mrj-Db3XroxyuLb1sQdW9DY_DZ6tWCrspQhELzpoUq_-sjbRup6e-uddvaiUnw3k8ST-XiPAVLw4d7TRRq3AdLg5gMZ1xdPrZ0jKJIKbZTY1Tx4PrJZhZS0"}'
         headers:
           Accept:
           - application/json
    @@ -180,36 +152,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/encrypt-local/bb0d48c28224412e9dd9f699c9a871d2/decrypt?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/encrypt-local/c83761cf029c459aa82994f036a8e4b2/decrypt?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/bb0d48c28224412e9dd9f699c9a871d2","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/encrypt-local/c83761cf029c459aa82994f036a8e4b2","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control: no-cache
           content-length: '388'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:32 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - npglulliq7mw4jjlfdx57gnz.vault.azure.net
    -        - /keys/encrypt-local/bb0d48c28224412e9dd9f699c9a871d2/decrypt
    -        - api-version=7.0
    -        - ''
    +    url: https://y5tgheup64gtxnio3olfunm2.vault.azure.net/keys/encrypt-local/c83761cf029c459aa82994f036a8e4b2/decrypt?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_rsa_verify_local.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_rsa_verify_local.yaml
    index d38b5395c672..83ed991c3775 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_rsa_verify_local.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_rsa_verify_local.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:30 GMT
    +      date: Thu, 05 Mar 2020 23:46:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,23 +29,16 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-2048/create
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-2048/create?api-version=7.1-preview
     - request:
    -    body: '{"key_size": 2048, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 2048}'
         headers:
           Accept:
           - application/json
    @@ -54,38 +47,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"1tqshZcKiyL93BdfMavmbAbVrTerm-CrMehLdMtb_MBiRoWk9hqeoHwckRHRYU4Yx9BzCsBWTv6JmebVOFdLBbos4robd4K7eEZU4ebwXEzykntaR3OnWKBDEcEAvaEo9VGMh5F4hy0njZ1J9cwsClscgJwJ7wZ7B2g5bz0JTl-NDTHjwmJkG5n2uGDXtDYvBjrYpUNL_Xg9HBK9zDbCRiUjwbiGYJl2D8sI8aXQitQv5cruX7UtqVGpCPEfRtQOof8Ha8ozQvA0m89DnBql9cz9syHjo5ooAVD7kCb5wfwU6gpRTRgiI894tyhqsLUBYfflsUOZqWCLagPF-rkvBQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676531,"updated":1575676531,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"v7qZxdv6q-kpW_YVKqYZIqm3CDLnQK5FJgSOLAOsg_6g9pjgNpI6CIs1qq9KqnUcBkDz7en516cXAIa9DFj3E41XtDatZx9f58J9kRR9xj4wMkRWEU11B0CpT0Qppg33wRQHaEW9kiVjop4EMAaakxCNckOLk_FFQzyfChQsLzm8F2tN1WWLhJKGIzPc8xfBm2NL7B4zLbCFeqeXK7qK-WjhqNNAMS-kTw-Pv3UP2YZPVHayvBCr2pwf-2A0byqIZCU4iwo_Dm1-59aikjTPRoFExymhP4gSumyT4_UcKg7WO3H3k3OQSv-lo0cAcL9fb5aE62d-T0qj__ule__FDw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '662'
    +      content-length: '674'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:31 GMT
    +      date: Thu, 05 Mar 2020 23:46:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-2048/create
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-2048/create?api-version=7.1-preview
     - request:
         body: '{"alg": "PS256", "value": "vgZc0NQUb6WMKX___V2JntcFRO_vszKwSAj7R2rL1zg"}'
         headers:
    @@ -96,38 +82,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302","value":"XiNmIhYIj-reuEqAinfSYD2xpqs2IFtlGdfHwPsoIF0j28UB6OhyYWIKeyzY0-YLI0P-pCZ73DhBq86oV0sorORMBhVHN3lZ81kEE0v8BsOdH0ojgNcxQGJOMtb38Ul1nHWL_R6_34L5Qy3wNof5_-4XRR9BkTVAz_LKUcmm7MqOJpP5Ou5TWx1Y6f7AEZJVC5hTDjCK8Xhio98C5cOAH5QzFT-AxtNcPTkfz2miU6LozfrL3xh8iMBie_sxDfVIexCQi0bUNVKR8tkfh2JoJ4Bh25eJIxJDV8mbN8SgshCsUL5PH4N5fqfzyekRMQGdqfrpUquFcPa6K0SZyrO19Q"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788","value":"jbTIxIQg3JN2b0fldUB5m65RbJERO_VxH1y2gpHYIgiXGr2u59wCmpbWrBSeKYKkyZtanWgr7HFEbxLtV82FBumi07_QzLfqIgvesYe0xsuZrC2pHwCQJlDrDjBdBBDXQfabG2AdKDIrduh_b0xsJZseD8T9Agih0h9YCLqWOJ7aZV8dasyLdWt2cxZAsYvnZTQJntiZADHB6tuAdDUoRUaUEqt8wp33DaSC2OgtjGwbX8hgUMce6tMn0-HVbFJPKv3OojQokxvkJb-0FNfDVk6aW1HAchp4ZmXhOfCdqbEkwVYzUBvb8YyNLjayXiZRWHMD-QCYHrbAQchuQ0M5mA"}'
         headers:
           cache-control: no-cache
           content-length: '465'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:31 GMT
    +      date: Thu, 05 Mar 2020 23:46:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "PS384", "value": "OnZY76NXJ8_MBkjnc9b9RiaL5OYscmrTal040wQuLFlRrnLvJFecIvZl2KjXqwVB"}'
         headers:
    @@ -138,38 +117,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302","value":"hmJ4Exw5tr6Qin3aRTNEd_7fJ3oyY5L4bbz4NTYto_XJO-WoLRDBgH7APEv8bZvy3xaiCfDZKVV_T0QeXkSsgZ4ZIm8h4d5qH6Xj6blezywQRiceBVSsii8FXgRjAUKBE__voGuTdIQpOoKWNVJwa3TwXBMTP5gTs4vSEQ9aw7oqcFbUuEkVhfBt35UC3-jA2Bu1CD7qtoGd9u2pJUcsottq4wjzgXtSSC78TC0PvPjINt1iyeiC0q3H6OghBKM0PCQozlQQUOkh5yXIDrO8jR3viU0t-g8YYO5hqDDqR6l6EPNCbwAJ4OlbTCT8_qUsSOAkSUiiy3lF6VaFKyLQpw"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788","value":"azXZhKz5oGdeQVgerzCgawQDeONQWKRjwXItyRgLK46oBzQGNbmhzGB3r6tR4u82BRkxQLiVkSHzvTXZ7Uerxdc76yZ9j1qz3a0JLnbrKo2rH7XeRBArMY9G98MGsp9aXgwsa1-DgHH-vHOdiV9dkvGI3wUBVXPRFAbpb2FWs2COndRXQFbtI8w_pdFx7xilHLii4rovzfeAcElRuyDyDURRZ9RO8RYOdTCFQtkG_dtZtikPYOZ9nfFcrqYMjmEmIyZo12EN3JaXw08hmv1V71s6opPKMWg2uReAFYX_OGIzhExsB79zewp2AkXt_mZx5bLbqTteKHxqvFymL1ukkQ"}'
         headers:
           cache-control: no-cache
           content-length: '465'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:31 GMT
    +      date: Thu, 05 Mar 2020 23:46:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "PS512", "value": "zZyL-eOHDnnq34aZaWgBMobx4x2Pm3mPRo4eqnRmLK6sE0jsXZFOFhMXaTcvILQxovTsMMh9JupeojYCnDvfrQ"}'
         headers:
    @@ -180,38 +152,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302","value":"Yn4SnnF_YhOCUNu66BRllrwVM-CLGX2gmOodT8f9zoK10Xgs_tpwOGiiIPV8AU3F4Ib1Y0mRT7FHyZiPPSTBJQ2ILS0nLhkz_F0VBFMEJolD8RTFh77qs-hWCKdky4kiKPYUVewY364omvRUpZFOm2VS6p2D4_fw_fbh9GHHka0aNIx2h0w91z1NJqFtW2Kh9nZAU7DBbw-0pCLLws0n_-yr0mwFTeaZoiaPhonDeO3oZFLSlEXWT-TvIPAiAOXIiFVVCI2hYu5Mz5-PDKkd5KlVoQjH3HZlcmbS1buBNcnjX6zZIuVT3u4bYWO4Ce8HdQMn7m1YtPLMlEPfivqGXw"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788","value":"GOyTJJH5zDwIflZIIQvbhQE4iEqBcKYvDg42zd9Xu8p3TRoXhr-ej9SQtk8vQgga8ry5LKYuMdRLV9NJlugoQ7kl0POI8NyWsElICtoKF1vhX_c5CaDfJnRr_q8dQzxtSSUzGoM3_GZCxLOxRjQtelY9AW0ZyJlG7nX_MF2XIujPRAClDRTUTHwmjhPZOYdUFjSIoiuEnOJSJ6hGaIw9PQrSZsEIin1I5Q-zrn4JtHRPgsOvAhdi-E4PzMYqtL5OYkgiSQZvOLYidfzoA2NAUJDAvLqHsQIIoLMcAAHGQQlcpGALjraVqsx1l74jmKMAgjeoDukcy4X1X0put7rhKA"}'
         headers:
           cache-control: no-cache
           content-length: '465'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:31 GMT
    +      date: Thu, 05 Mar 2020 23:46:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "RS256", "value": "vgZc0NQUb6WMKX___V2JntcFRO_vszKwSAj7R2rL1zg"}'
         headers:
    @@ -222,38 +187,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302","value":"Z4x-Tw3vLV1Rewhd3kvNUwkbdEt9V-J47UjydlsB-vfX_mwPug1R41rXcC6FR1x7qPM7xLH3ZqS54AwbufvtOkj_qdzyImcJ6nYvcPZ-gW_QoqCwMeMLndaRkLO98YsncKWEO6urVFDW0bb1I3t9bFOcYiPEMzU7g8UGmlul34zOBhURW2QLQ3i0jgIVBxyNa5YVjZZajSbhxPVgidH9S23tgcOWLs7ee6ikfeEe5yYwn78hfIMrF6xjDwhQ1dO6_m-tWIazae2AsorPfEBYpjodNdBVmIWr5u2psIowxH7kZAksTdk9RC6qAL2gGjHPlHZSZjTWH4DIlZZgmK7ddQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788","value":"rsGn-RBTaTdyGNpgEZbx4DBgEtTSiN6IVmfEFQDd4b4q2IdwVrjB_K05IsZ_KAvEvGCT2opLbKYs3vrMApZm9O-GW-fU1evqeHw2Mpq5PmYWNe5GsodCmONvugLwovlb8urrAzTXcvyYhaSxdo0ZttmMeKBc_8F3MyCoFKehW2y_r94XwGqhAEirfDXTfgNuZjB-EL0sUnzNcR0IjM1O0yll4CA27W1BlgFgiplOhMnyDI0-myDXiz9189C5bMG3J6lZqSyK0tUQ6sN9n0K8i5Q5jeS8qRkXaA3vSuW7agWUghSaok4Ey-CUsKkkbiKwcGUembP1hiFKTQutR_2DDA"}'
         headers:
           cache-control: no-cache
           content-length: '465'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:31 GMT
    +      date: Thu, 05 Mar 2020 23:46:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "RS384", "value": "OnZY76NXJ8_MBkjnc9b9RiaL5OYscmrTal040wQuLFlRrnLvJFecIvZl2KjXqwVB"}'
         headers:
    @@ -264,38 +222,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302","value":"R3gF-9Gmx75FXt9rzoOMVw-vqz5oWrl9_KBBXtz1uS6UxiMWUGaE3Itj5wGDfsieSDsQfQl9RGar8uicTTfqLfEj7BadPd1ZnepiQ3qNjsw0N12ywOoF3U9tv21vWPwdiBmuotG2RyV0XbQ5eET67R0DQZL2HOGDRf2rLzPln8mt54w0WZ2EGXLNFUYrtoRrLzjAsPsJTAkUSvRPDp0Nn6-Kzfx_DsxAU8gYCBlW2HimzuUKK82dSWwv5Qv_oQ8HkhejR7vr3qEm6wnVamD--wbWe305Arsf3toVkBDwVbMd4m5cUhxIHFgo5fch9h6LnbXyYOpTExsISi-7RPdXug"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788","value":"dJa53EaUuuPTU3s218sGvvkq0HZ9uRLEBNt0ILbuIdmy97L2cGqIYqopZFiZO6UECVqCL4iNHlOGy_5ZLi64xFPFmXP-bTtgWHGaPAmgBLZp7zRRhgSFnAlnLagTQAYrXyJtaWnMbeRWvfh83fDQyco4T20OMuu40mdL79aNkypfQG7NghtvH61U2STHIkr1Ex507ieCxURytCZvIxIpK6pIiJIgi9JxFtZKZ5eDA3UcLLOofskUb4vamgBPPbP7hLaj8_6ueXweVBomz1ohKBSs25cIH2F2-U8xYxWnI5dyDvq31JTHrAxUBnJrdKgsiFRVTwSWPaH2UUruGjknSQ"}'
         headers:
           cache-control: no-cache
           content-length: '465'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:31 GMT
    +      date: Thu, 05 Mar 2020 23:46:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "RS512", "value": "zZyL-eOHDnnq34aZaWgBMobx4x2Pm3mPRo4eqnRmLK6sE0jsXZFOFhMXaTcvILQxovTsMMh9JupeojYCnDvfrQ"}'
         headers:
    @@ -306,40 +257,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302","value":"eYNu5R4VW8o89e78lhcgJt86GzjbWlBRetaNXEjcpCMO4wDgN1WTbrTEN0P3joRBvTyqTJNCa_jTuVyB78OUoPATfm-XILASUfojtM5ASGjHJRGRTNdsSZ92X19MHrcBKrkMnrBt52mBz9vO1RSuwSBKk1e764bdvJbDpAbmMPdXdk7ijEhoiaomq4EAe82JNjHkIf5LogI7wgnXcstXHcZSWMmuaFFWw5L6j5ZVkgrjwdRN5He8SHBIbwVWOKHhB88iHCKz1A5DMtrYmZtsSORePn8m24Be2iFaK5yhJqHvmuxPnF4ffji7NuB0KaTs5uxuWRaOPEJhLWjh46WkBw"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788","value":"RrTLrNOXy741vf-XVW_4O_Guo9ETm84QGHH5_4PvQHLdsq4B70TVBsrFGwwiOwEL99rZ2o-RTOsE-LN2MCgmqo9XWpL4Vt4AxHrFQf7R4GJ_lmyy_ju5AEG4VWIWR1ZcL_aBLKSHJ8QTieCjlswxyUoFgFCfNFxLv8-uOkxkgxfD4k1PV1CrHHO-utQ4me-F9-fTrweGEE5uuuW6H46ZSJgPfULddl4z4FWZIAC8Yrqa-0mOMqYjn_ivRYRUQy-Hb4m8qaUqdWLqgDonet7ZRk5VvzqVybOkENKomTq20wKa4Zdex_sstLwUkmxC7gvhpxe0LB7EmVmkN3NbfvMrSw"}'
         headers:
           cache-control: no-cache
           content-length: '465'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:31 GMT
    +      date: Thu, 05 Mar 2020 23:46:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-2048/7122167d1b4b4d98b5b0c27f0699b302/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-2048/94a4c00660754d3ba5a66f3076425788/sign?api-version=7.1-preview
     - request:
    -    body: '{"key_size": 3072, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 3072}'
         headers:
           Accept:
           - application/json
    @@ -348,38 +292,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"jhaFzjLye544Jdtn_tVqLd6Vs7Z_Pemurqci9s_n2IBq7NhsWWPf0TEP4qZouxGXUbVjaX4ZCX-bjs-6VO0B6kmpTlYGUKHKqBqYvOBUnu4VS9j8o1V15BzGEF-wTalqjvZmDoHk3bxFHK12BPPzFRZJC7P4yXYi9I30hKrDHTG2tZw_eBGWjF7thQ_pK293PFBmD4DB5Pbj1q3CcUZwla7oRExDShom9F8hZ3IwiNXl64mCWlY_9tNAlCrV_p1Opb5UkIBqC6jLIn0IgKHY0kbGQZqaezyvM5h7M0INbNigrYuOcqfU2kS3vs9LjkLFxa0Nx0MDNE5_xWt9CrYXRzlhSl4z0_nh1KI6OZTUoE7QLHEv2zxdresLE7Bp4kN-hIqrGzBc6plxZAb6PY1ek8BHzYgtOGkwQ10XIx6wVvHO6FOLhgB_wDVtvonx-bG2BkAz4KoLhstD8ENsKHZsWeTSxmk8ixzk18c_PrywPWYVEELLTSgRmYbTfZCR2jT5","e":"AQAB"},"attributes":{"enabled":true,"created":1575676532,"updated":1575676532,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qeN7JGuUhptL-n8LOzPIb4LPmFNFN5HxY1BFxB3fuu8YZPEybZUFfMI69Y9Eqte5vYW-hKmBvQyO3C3ogd-JAPdtfhTfXJgVoTDv8ID16MDZu-1niky55bwIt8gIQTfA-BPhfJ_9OvFYiUU1mNkqK74ipLgWMyQ34x29dgrI4eyvSXlzvvD0AAKPv_B1z3XkPpbdw8ICJprJpLh8twvGQ3BPqEoROm75i3ESB3HPSOQbqwMO5my74oS84BIadkHBfLjlmMrgwuiwBOZSTDkfPEY6Yd9RuAtB4AonsU8Bc3HeCE6VR_SF9Gfr2xeT-lVxqlgIKCLRxMzv8zvCWshOsXInhTPeI5cWP5-9IH3C7qtduaJKJxZ6todXlUWuKKx8f4YQMFkxR8GJf01RSTnnub5YcFRw1YtiAX3Cxjoxua-_sh99TPsAhkr0c9dLIBJJoFlL2g4AJMogllrxEoD4zeKXQe7HkVD81jXY4VzAHKXELqRx_0X_4t0LNkkm5Q9H","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '832'
    +      content-length: '844'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:32 GMT
    +      date: Thu, 05 Mar 2020 23:46:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-3072/create
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-3072/create?api-version=7.1-preview
     - request:
         body: '{"alg": "PS256", "value": "vgZc0NQUb6WMKX___V2JntcFRO_vszKwSAj7R2rL1zg"}'
         headers:
    @@ -390,38 +327,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c","value":"RjbE3H8ScLyhkFg1eochkG4ip5-z1xCS_dXvuLiuR1EDw2y1UD1oLGruZp7Wiey9hL8727R3UWZvUgGdImjpxfEF6bFyHTbVyt6LsZVz-cQK0roLmHPYc2JWygTzBfhLSND1eYyHte2A_Zpd-BsdyZkx-kUNWIa5zAb7XxhRQ1diRJtlEzFBLZ6HnysNXiYHn0xVjpNYZkPVbAROqi8dQC0pHZk_FVEYT1PZEsTDABrUmvzbpPAG-I2C0iopUJODxI0c87plBqgg63rLzcmpvmYCaYhPdHKs-oycZjOaPdgyW5406-dUjselqTNfLNWmKG-seDmfppWRy1KEza8GtUv1DBwVJQ6WEa4yDV3rjKUw0fhv0YiGixjMJm5V0DreF9f6uIx6cOnEVOndgFgUdF12cGKZCZfPVkkHYTrtTpn-fsIbrTqiIO9DBN-5tuN1yLUDGSGMZ9A6CGXwekt-NDYdGEkI3JsyKMRHlpliOugmkqSNXPjXeQodqWOp40ms"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041","value":"H0XAX4oq3KNUtPuXUROT61oqMz71K9h3vVxzgwlM91YjiNOp05-Q2NtuEn3BLmH1D61V6tqZSavg__OzmeIU_rdUoqDKTy53F9HaNbQQ_wKl3HxUBaj0GC0JcNwJriHo_FwHuUYCdSF1JsybwZwXhHUPvJx--jVXRPRO0mrc2rNxIQSyqQJbYSDDWMolO6BTBjNmpOhC5CZyFG7URR2bFX6CDh0TGtjYAEBYfHZCdTJ-meO8GrU7LNmo2pGwLBcVNTReuEZUjR2oeBeVQJNGWPEQsGxbZwRYVIUoe7CSFKrjTUpxxw133jWVrCI8ELZeJjg3MTFWvXWa58b4KPeDc4B_OXskLWZQGVcJSh-vusr-L_1biZWxD8Gq2dXgMr0fLuuJlkHlYH8dhNJNaf87Qd7fNuPsOJsGhiYUFJKs5oo7nseH6TYQaKfutHzy-AZovex0AxwVlZbmQWN01w8xh89Mbg8KLTzFPGcYQS0ASEtQiVJOiZLgV-f7-CRcWqCG"}'
         headers:
           cache-control: no-cache
           content-length: '635'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:32 GMT
    +      date: Thu, 05 Mar 2020 23:46:12 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "PS384", "value": "OnZY76NXJ8_MBkjnc9b9RiaL5OYscmrTal040wQuLFlRrnLvJFecIvZl2KjXqwVB"}'
         headers:
    @@ -432,38 +362,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c","value":"Xz9CbnNmETJAhWVzhkNk_zg_XHG2Vgo7M4pCs2g7X1oqK8DISO4xoAZ-6jVX2QaGdCwoWF-IjuJ8_kpODKdqwLGtgb_2VN5x9ohYndy3HkwKiOZa7YBCm8owJRTqXbSo5262ZUQVWe-4CYKU8iOOhOMelbOLCcn3__i1kC1ILbtEjQFKmTc4i7p3HoHbBkr-0aSZ_ru-bXPW7XDXClZ756yLUW45REXg62vTQrm0fhVOb4nWmKu66MEsbIzixya-cMUt_CRETBunBzTcBhg0X1LprbX558xNA0zlZQzK0UmRUMlHjDQcEmJ_wc1FBFfVy81KrUdqjBTYZ9pXSfciEQcCJZK54BiAkzsfkM9c_C1vDQgewdeguK-N4Y2Lj2WvFQC8jKnlXNwIpPMB1AjWIPfyjk0BapT2-7TXXW157zGFKh1Ksm_f08LEv23As_yKv-DstVRHb5ZFGO7-I1sAbYSaBhlyWYFvDXAzhw9cb26K8A4BDJSufgbxRITFL-95"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041","value":"fagnvlQpV_l4Hr5cU95HxSGaqvXlxplQ8mFOq9rqBdkQSRMrgZ158OqUaHVxZDB8XGP9s2PueVSwFjeUz8QLvMwkG2MZBkDb2-9X3jyQmEyHqiOUXwaHL74WlNLLHd7yHfVlgb-pRPKKPG4rRqXAnAOyp5eaFfAg--UyfuhJlNvw_H_QZcZAlPmpK3K_Zxqca9-94-c3LUFFmMwS5RAcSWpyhFgEHKY0VU0d0shrzBN6iUJ6o2w3Jwg4XyaXCbxBB6v1kEouImzt4OiIaeNxPike4F1laKYW2viW46fQXSb8lfhH2XdgvJ7kGAMfksMaReWJ_6slensUQjx9PPs1xpnP3ww4FUut__FDzSJztb4ZZldZOpWEtqUX6WUhegUkfVorf2Nu1rD9ia1_3Ge7CSlbnqZt-YJfuWpDtwqC5nXQzoHf0hOrIbB9o3eBHnxU-5rNE4Fqor82Pg5D7nE7PbYv5oButdK8vSaAxhUjS-z5K13HuEUO0ptzuiJFi6Kh"}'
         headers:
           cache-control: no-cache
           content-length: '635'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:32 GMT
    +      date: Thu, 05 Mar 2020 23:46:12 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "PS512", "value": "zZyL-eOHDnnq34aZaWgBMobx4x2Pm3mPRo4eqnRmLK6sE0jsXZFOFhMXaTcvILQxovTsMMh9JupeojYCnDvfrQ"}'
         headers:
    @@ -474,38 +397,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c","value":"OCfuL0aEEiFz-dMFxshmXRa_n-hoS2erK2nqbZtgc-PhIE30FQtSh2EQE16i-E3xFVfoYReJsCqXFtP5Ti7XyZhqhoU-bz6OHVaxqJeMWWHLfOS7WdPiYlkxIboHiJIBSPUCWYXj2P-sE-21UcjRrzVt1KZnJOY8uHyBiAokigtqyCAgM1p94r8zIgwgjZ3w1nxgpCblE3k-YCI4pPORiXocQxjk9eJAC_ijP5hcFG8WzdqhUTLij4zfj18M8KL13U-JKLK_ksjvI8gl0lvcQL9uMiYk3wY40q6GFOt58oAzigQ1Hbu6NIWVDlf7ywlnZXJvSNM8aZk2iU-GzgYBJH_XHtk5iFt_oV0C-iTj9Lu1IP3Dni_MYBBLpGE3jeViASSn13eGcJdkJ1Ful3jFLLAdW1jzzS3hbQ0QMGNBoqujOs3sAuoE5dVX4Gf3M3FXnL17BaYsP8LKmIn65D6prdTlto-LgbjgFCwTxFAgz3bLHQk-9YVyELm8TA9qRoTx"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041","value":"m9m2XR2LbS14DP-DaCTObSr3orFlZgGHHFfveFqxxzw0H05SJ0RIh6IfTfMxURWEb2u9Rg5F0w66r5oGrdovdjkt1XTL4WcNE7CP0Lx3566bR--PKC6kk8lboFM2g6Q4P4HIT8pQ_1LIfoOTaFQTYP1Dv1SF4oenT4SfzvCuSqUbT0IcWoB7XDXFpid72Rci_gJe9-mSXJBBTfo13AD1qLJ0uuVcD_wSlsTY9GKqEsHHphnOIi7HTPyvERm77nC1AfCtA7UyxvElic1LLXAGd7goXd3QO7gG5fD6q_t5SHCh9BWi4PsrIbY_TJ9n4iGaGAMbjcH6X5s4X8DUhgkH_LUEE-C4g-_11NmwN-18yf1ZJujwy-qHZRhLih-1dIS4lpcfIx82LVJoXJOltgy95Gh3kqKRcxgEuB74zIEANMSEjoJDAfLy3znEtq4cUPh4ChNrvtP87zD0cWyT_XUzVOCTGRzbpiN5p6c5Vm80-5nktrbHpiU6k0rj95TuVALK"}'
         headers:
           cache-control: no-cache
           content-length: '635'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:32 GMT
    +      date: Thu, 05 Mar 2020 23:46:12 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "RS256", "value": "vgZc0NQUb6WMKX___V2JntcFRO_vszKwSAj7R2rL1zg"}'
         headers:
    @@ -516,38 +432,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c","value":"bk76XVdAs6o5mGsKE7VCiimWg7u-9XgPkX9rGpdBaIe4pUSuQFhgJ4Rui1s-w446UhZAS-KzXYYfrXkar8pMW_iaAnNyukNA7gtMt5hGMIKynrK_cfuitlMzLxDHcu4FFju4MEHgCWOuGy6RPewhAWV4u4ha6yOTLEUfsdivi7nZqDMLgaLt5ckt1Ag-6At3OCaDLGG_V7-VgGT_V7dN_lVvB6Rwi52cz2ujvLcsyw7lgSVLc5BOE8-Fn-Rn-xUdZpxKgL73JxS511lPzhJTrd6lAfQRYH9TjCn1ge62x2eFYaP11oUaxgQcq1u5vhmjL_NTOoSGSs3vj2sviSjV0eNjUhKnyFv64WWzLIEHAXNOrrj1bEypZkbE9GWlYTlr7NmhVhBWPWH5IaZxlHx0yAg064KINBWMjKeozEwiQA4yLQSazHp51kTfpo5mN6Rx9_-KmVjrEU9N_3LJ4ALp1j96FjSms-ZcLc37iQZ3ObpItQ0fExMTW7_Z4c9S3Jwg"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041","value":"a-x-0t8cIgHTVjYk2R405XbRDYyXUWnJQe8wJGZXWAuZpLLweCHjzlqwBKlHGIzrTExqREeyHN5JrrTYZToQgfSPSxClg7AxDZ3mPzFUWGciVMVRXRVJ3xPrrrejVAKnsTnoSTvGYen2XxCFYZ4wiMWRn614vbx4wiS0D0qZB97CLnn8Y_LOqIlgv73Vpc46vkJt8UN1_KhSofusg-Tm_eum_vTPreiEuhZ9fA6twyi1tTdswjSwEbxOM2_Clh-c5T-5bl0IqdTz5jMbLwfvgX7KYPBcYPvJ9m8FEBtBtOj39zzEOO4rtonnXsXocGGwFtMgUshq8dvRqFVwxX0GXbAwGhVKgJHrysizCAbYu4mwWyKzhEpt-YAYWgfYqxycHa4PHZRZdV29STGN7asq_aQq03-hD24pKi0zdk8uFZa3jrh6vVEcSye5eijz0InQ0cVgVn_NJXa88eFhOEvEk6MmFdQhnsfCi9DFjRQvbAlb9Lt9QjELs3Dm6EuJzt2Y"}'
         headers:
           cache-control: no-cache
           content-length: '635'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:32 GMT
    +      date: Thu, 05 Mar 2020 23:46:12 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "RS384", "value": "OnZY76NXJ8_MBkjnc9b9RiaL5OYscmrTal040wQuLFlRrnLvJFecIvZl2KjXqwVB"}'
         headers:
    @@ -558,38 +467,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c","value":"MtC4LS_C0xRK2_UORezr2YlmudOmnBrzLmhV8uMEo8-ZXhAP1ZWwIsC2VsgKQGA6tFK4lAqP5V7ZVO4nufPoIgdC1LzhxOqgklLi0WG_udSvFsvvqtGHn5kNmZgX0PBmwvKSLqxhvtk0338GaHG8D-9CampVBhT4Nfys6Y4qT266Aj6drc6Ma40JRO7lnvtEhfgoTuMYEOhYmXbQZ1wdy5FT-5gaL9S5LxRVVGUq7oAPStrNU_ADG6UR2TQcoyi03VmBmRpsXG_y-ciJCu04qsZYBkysdJNcAfzAHcDkQDAgbm-e_KJn0YCqpbplS7FNju35ZDpYh79ZV93OSJU0-w5wsZDkz2s3BjTXsJeKxYjxiYkVqd8rBrP68y2wmi6XejBnvtVb0IoYyQt1OAWEydF2F4IypbQOPQcPOuJkp8NnzzYQ9aBP0r-MnNaR159-sj7HJuXl8O-lE5dxFJtKVQrW21dh9SxtEF00Z0_P-Wv_zcNFG7Fgx6djNRGYLoXF"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041","value":"YGwjZGEAU_2xPcclfevF7mWUrzco5uuQbiAMlpiSbVAZdhCrYp4XYomzSteXJXBf3gWebtT9xMBIOiPF2tMlHtTHUWAer5GWYUS412aHfPIaT0RIVS-KYf2mtjljdlLR8QhoHHPUyKChuacvE9yer4zBMfP_Auyke5ByLGBCuFUMYBpaoBt3v6EfReQqXXsv8El4PMURJxrTurTXVl31wNdFYQhrX7vpO7Jhzhl0qBEwdka5tW_FKg5LI2Fx84J74iS6P3L_tXWl3HtFCZAML03tSsN2ak6UN-eTym9ZRemVDolDrVli96QPzoB7rXsTA4MZ5cfx716PXRKMYGa3zIBrQMs2hIHlVcKwRzC0DRQKYoBWzDsNOfSZng_xJEhBOQxZpnizMFCPeczkDHb4oYm4_Ux-dU5iYDi88Hwv-bsCVtihQUx3_77pFNFEbpm5UAWnxXd_95opdngCM2K9I-BTmq7V4K1gg0Hww2ewzLnMakker7n7HSYHdgsUkT3m"}'
         headers:
           cache-control: no-cache
           content-length: '635'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:32 GMT
    +      date: Thu, 05 Mar 2020 23:46:12 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "RS512", "value": "zZyL-eOHDnnq34aZaWgBMobx4x2Pm3mPRo4eqnRmLK6sE0jsXZFOFhMXaTcvILQxovTsMMh9JupeojYCnDvfrQ"}'
         headers:
    @@ -600,40 +502,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c","value":"RZhnvILsI7xHrH8-bDSTjJfI4PpW25ibYJBeAsTISDVhQBbD3ImEYGY3FK05k3hWZu44tHp_GMZGkvN1XcGpBcV6IFVxr3rPz-XDHg6leaVs19K2CSnkv5jo2LlzTc1x2d_2qwukGNEaQC1i9-pDAhccAIVhwmKAp09IpS5Oj-RDE9PapTAPmJUkzQ-P6JZ_brgcINr6Ow33dnWehLRFEKVPY-Lj6jYrZr5GHdlS1jrwSuU1NaMFPvXTD8rCMu4fY0xapy0_JwWjNP39pXXV8c3zPO4SpmZzmLY4Qwofj8MDkq2iHddRPn_xM85L7vgiN3993-B0Tx7N8Redp8AqEv2w_B44EDIjpcvHBPmVar4H8cbAibiJUAOHNy0YfQtYUcCsTCCT_1uiAmTb0zgBrzhHeinqt3f20EnxlGADQyqRG76KL9Bnl4hJvW201j_peX565lefIrx0xRZw3ODNpDb3eJNPEpznLCVter4kfpwXB2uJvJT18u3m27myqYZ2"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041","value":"SHfJ7fk6Z_EwUBjl_bpihH8rARUPOaG0-dLQSQy7TEQkfeaknsWWpqPrnvAkZKtiRO_ijxIy7JM-cJUX_SMH-Ztx9QKFKekHtL6zvPEylQCvEQiIonDSuLtBe7GgZ8CZ-rVEh9iK2HNFUExH-Bl_1kdhwVciFMxUytzOoY0KUNNB0caBbD3f5qdBtWTkY2IjtS_p5tThhPQ2MVsnyapiwt4rL1QDsjVXwYheFQMSDBlfK0GYNYk1KHbzHi7oHOyNQeSsT69kUDeE_caudY6Nx2lnAniNymA4T9YsBUMIa_yApvRG6NR4OXiPNVZwTcXwBTHmOQRcg3hmUqz_-mgZ7cK4xPo6ijrGSb8fd6ao68q3xdJ4uEx0J1HuzPrR9mV_4LjyLjDlyzojA5g5AleSpX0QC2ilihksGMnAeq9tEsAep1oA5SF2pe5_8ZYZNA2XSsuzGqxSaRFLuIfDLlHyXfTcWB49pG_jy8-eALJSDu7PE2-vt_gASmWUkOLw-6Oe"}'
         headers:
           cache-control: no-cache
           content-length: '635'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:32 GMT
    +      date: Thu, 05 Mar 2020 23:46:12 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-3072/669ba35601ad4a42bacc1418a0e2283c/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-3072/585c25f1e73a400699e10d9b7b372041/sign?api-version=7.1-preview
     - request:
    -    body: '{"key_size": 4096, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 4096}'
         headers:
           Accept:
           - application/json
    @@ -642,38 +537,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wjciitggVVfoTq_AXHcrP9e3rK98WbxOpVFP6Ahc_e02Z1f1P5nEi7-o9J9XPh4j9o399rbV1rEV1tvQbrespoSB0KIR0FiZwRLcFpCDY0ITuFBkj9ma2jWA8jC2iLdK_epnnVR2bGSJkr_Lahb6BWinkoQqVNwZJA-HxArRKq6KtmCOywk4_wjhF3eaJn0aaJDepn5lLz42Tdie1m5AKkK7sH64s6L4foxTPNyIBlWxS6i7en9cQCcNlojXJaWdTAnnvRFR6fcPb4zjOaXu-zZDidPHFXQVuCxGZ-xwgIFzDZbF2l5XPOcFD6ok3qBYctRUdzXgTJMEsQH1Yj7S1djlax9JsMIrKYLjuUYn00wmIV1GygDcYO-gaKnuBH8-z0cmhfgWk5heSCAV6XMcO-57q_MTXINmwQzwIPIJGbG9Si1opOqsJLBONJqLTbpQXo6vqYl8UsFgkBQKAdPhRnkTgdx4_FEmR8oytSSQsXjU1ylk9G7L86w3OTJKk01-8kssBfrZJGMR-ue6o2VO0-kfpuF1Y3LvJXT-pCX-_-JkhWTeEbf1kCoIS5HWD0ZkgZQRcjgfEmCRLZqRK3lLBuK908DC90uM-pP9VqFvhLdglpgrTfEQW_0Tv1bLyKQfNVS8laeLpwwPTFDIrV_46JQOphfgbHkobS1hYmsDKfc","e":"AQAB"},"attributes":{"enabled":true,"created":1575676534,"updated":1575676534,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"woflJmLwQ-LyX4D9XABcQCqTUnkgQ8L6LXLM2iQTFQq1T1X4swnJ95VD1m6CP2DLZyWiQXujIuXmIcjchIqaKsklVEx9SiMlq-L5lxAIM9vl9h9EugM0tJeicIEMG8vrAohynDHa6oRHqZY9d0wKwWkwyjzL5bXK9siIXtKQe99__SM64G_C7_Wa7sW17TdwzurpVAeAlwFkoq-Iu0UBAEF-eXywJmGQIFSKbZRnKOoYSfSvwWjkwY9Jo5yzo1sP6IIRy_aYNeMHBbfVKzrxHi3U3hb8xdEGPVHAIdJdI6cUkRrMXLKqMyhYu3eHHY0Kl6Gj4o4A-aK_qA--G80RKWTukF2wYfNGVuvP5ecatke9IauBz-57lxG3R9gT0j_z1A6K34WmGJTqPR9NdLIw_ksKa5B9Nq8vl5at6xAoVVa01H7PaJhTZuyYwoa26W9lK3Mac2s5E2FrHdhULCTsAmKHFAStfCcB75Ez9Ul5cwos0252SS0OHOTQRIVZYYWPGs1mu8kNBVZF0kfXzLfsD2pF7UthSpJY7T6l99TtyljU9Ri7_PJF3x4mhH8cvSmpZL7SqqTViV8njUTZyh_wDUjTxnu2bun-dKMWAAHTWSodiQedqR6VMQszZq8cg5iCKB8tVipbBB8StBek5cXF24OKLBcwN88cJulNAU-5VtM","e":"AQAB"},"attributes":{"enabled":true,"created":1583451973,"updated":1583451973,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '1003'
    +      content-length: '1015'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:33 GMT
    +      date: Thu, 05 Mar 2020 23:46:13 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-4096/create
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-4096/create?api-version=7.1-preview
     - request:
         body: '{"alg": "PS256", "value": "vgZc0NQUb6WMKX___V2JntcFRO_vszKwSAj7R2rL1zg"}'
         headers:
    @@ -684,38 +572,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043","value":"Wmuvc1L7C4ixcx4Pq3ATAHbycFFzvuMB7tPLz6_G9Riz0wsvZyGjZQj42IRsEbbEnUBt3NCUDPjtyPvYCeIJZzq_M0THS6xqFzucRLKRSFsnZdgD49Omr9zamMaNaKeT2zF9OGnUX6wqKSq1LmuR8SW00ZWT_XidPw-mhLKYptI0XNnkLd1O1YKXfzxXlNDbqsUlotPQgoh2N1fH1Ktyhwrtv_glYF52Nx4PmB_Vdj0bpmjDsIaYTLjcN0pkmp3M_UEa0tG3vw81V_sWdN56GCNMTVU-uMQ8tpo0i__m_YY4ryByJHwD0gzWq6K3hA8EvZ6o59j2k_yDbcHYoOqF9UzdFCZkGZA52UGwsv28jOHWA7qvFqxOEby_O-Qw_tXzVjrR4HRxZTDrnaKh70996EoxXZri1vpSBoXAS9ARJLhnjKd7j72ZaKVnQFB-M8pBLwLTAvM94-IGaJBVwsNepT4xUcFnLwi_auf7ULBv-r6VcPVxeB0MiCk-syBB8aSCBL7-rzT7c3KThSiPM31N5OxHwa2kpG3I5AtclDcVZhqmoAmBkXCVHO9VfwkYQyGFyX9K7OzAxSKd9bArRhb4yCwiTX8SX9ipvWogLNLL5JfUO_xRXi8nNtwPvOU9mr4bV0sYh6uSqnKA68h8rzaMI7JTErX5QN1lPN5U3VnMt_o"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a","value":"Eo7dOeWnGx3NmgHHEOZ3TWBWGkHj-lqvAVNw_jW2CW-0OsLNfabHa16wibj_VNpQWig9apOohArhoqeu1MOfTrlerQISs5GHFLMDjbGIcFz76-6flcptXWzIxg_PEZOD2s5GMjFkFJtx4njiRW2QDRF2DnIZhqPcReMtVDpElXNDdjCTHlQckZ5OnlbLLMFY41Wfjw3yr4Gp5MBEflviT9jgq0plJD7R9UEMjtPw3RkWotuKmi4O03mOOQYlvM2jZG5XoJeREW3kS5tkXAMIl8l5W4IQE0ZDaOvIztJ36AnxgW9kE1mjDnckZrqTCckzEuUakhRkUcOE4XxYvOnO0zvSDilxOMs-YrIBXnPUMnsDuGEorSQgSxoMmCTbsuYlUt4cJ3al44U88HVnE8lLbt9tp65qdAD-_4mznH505ubTP6ghPjb3GXT5Smbg5V6_KI1AYam6NC7PhS8DM5TOFm7pq1R6a1eI-ooyLMHwrCY5NkVdgKSFUeoYWia_GkZqM-bMSuMSdCLpY3XhHnDpK3jk-DEvn5oTIw_gi-IDgXu_ifsuK5g9AONFck2H5ayE1P1NqHodE_Pn3W-2DTAsxmShs_VrZMsHBbNBEl7Z71UAegyFPTrK6jRv4s--3uH5ARKg6V1-xBOiWoZXj1_8foERW5Wy4rByMr-qlZtd8dI"}'
         headers:
           cache-control: no-cache
           content-length: '806'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:34 GMT
    +      date: Thu, 05 Mar 2020 23:46:13 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "PS384", "value": "OnZY76NXJ8_MBkjnc9b9RiaL5OYscmrTal040wQuLFlRrnLvJFecIvZl2KjXqwVB"}'
         headers:
    @@ -726,38 +607,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043","value":"otN8u0wJzyLecdf8-Qs3ijzjrbNjGFrJF_gupuj-_zJORBS6ySSUZ8nusLvq6-YzZ-rYDGybtNICwS4o1QJeaeOx3Vytl0Jlmvme9rLR35d_oRHcVfe64pd6UWWKKiq8zQXM5r-3f_F9YwTc-7_kn39anMFuB8GwmjyXzqjQH7F0OWtY3gqEEVrq5NAibblcShbuuDzJTqVsMWO3Sac970KZDwZ0Rxiy4Gon_CLCRw6-YqBR_0WO85CMMj9GwxrPDmj_QVdzyqupqHpEAJU_Lz3m2GBYPnuU5Z5QAqhfhinPRQBna3SOiSqaPYexScwhdR1JqJmpIx3EMDV5nD3B17zawRh0vUCnKNj8jEe75vGXGRG55Rj5SsL3_AzDuquCdSH2MQsElvBeUhQGv_NbpZ-jc3mF90RjmPAypAZQILDtaUk3UhfqpKQC6EITWGRhf9lbNpTnzbuwqh3HmYPvmImjz6H8slnYbq-5VDN0YIYlTgnO4TsNC1YXps-jnf3ULgZIMW3RVNgmi7Qu4-Voeb7hn2w3ZeAH8tNNY-_YnpY0CkDv1GTINR5pmr5rWsiqjjOQ1TpW-p7Xrd8mIP1Quut6xVzvu5yehgma7vt-7o03bF1rqxFUpeD_rxDTbR8QLSuuKkdSvLzoqZStjjeyLbN2QIAJ_BDJEFxm6ngGYBM"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a","value":"gr8TfraY31I4PNs8AITXAchpGPU41oWOx6be1WP9LTirXqvezneWi3oL9JuEVHIkSzDlKS3ri3Kpo-3qCqmW_pAeG_4EMnuWKaX93l-FDCcG5bOW36uF9BnIwIEtgFJKHnjpZIPDQTCOpx_pefMMRYD1khVL1gD6-0sdRQZMptohhYf3-LG2vql_AZGQaJu0UL0uuU8Xbii-OUb08WmXbR7ftdKzMcq1golrYxvJ6INdqtLqEqgvpk4vBjnM7zSDiqEldfuxYeeiTg3xh1fU-aRZ5G5AtARD9sKn9fh51SYM1BxMhXRWtf8mKDRyAu-J2N_Mt7em5zDGdAEBWstGE3K8vWnlM3OrZfW-ir01Y4r92GPT83SY7kKHDmN7eQXPzKjOBIJTygVhfobtB_NODaaPdZBTagi8BUB-JpqtlazjWrz28Z_1ZavPk4A-m3fhSvhhCnZRDkJo2pn8dI0nDxTaZ-EWJqic595AYmi6yrkqAGcK49Sxsd9S9h5gNWVN5_6DG1VsAowRdRjClChUpSoS_Xg8RldkWsgso8NrA-_uRsU9SiFg0ojVk5KoBkVDCez_HyiI5BCxxUCVfLxqwGnKAl1TKtEjrXby0sOCIXfoLHTeUxgxkRExqH_Vv8kd8vhtuxA3WeBqDnewJg5Y5JQVOpR246GGse7ui1sx8J0"}'
         headers:
           cache-control: no-cache
           content-length: '806'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:34 GMT
    +      date: Thu, 05 Mar 2020 23:46:13 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "PS512", "value": "zZyL-eOHDnnq34aZaWgBMobx4x2Pm3mPRo4eqnRmLK6sE0jsXZFOFhMXaTcvILQxovTsMMh9JupeojYCnDvfrQ"}'
         headers:
    @@ -768,38 +642,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043","value":"Qne3p_FFxWD4WpNBc5HATw7dBO-eCls39f0GYMV70FN3mmzcmKAbTS95sAIhmLgJjc18Z16D_mrp8sJy6nZFWoFJ3PUS_IVFXMXqlS1Rgee5ecnpN8LZiW7XkbxYTBRt4aSdUOUXUDxpin1ckX5G5RU8ScfDFVsld6Uv8dnA2VLi-UrRFvNzycxAOIgW85Oo1EHBSrhkK9PekrwwrxS0mZeirplloVofIMsOOyfnAi7MiLwYQ9PSrrM-Ahi7vL4VQeq4zad3nh4-PdOxJdE5rx4oqcQ7f2Iq2wkFSmBp1lsFejAB8DCUlbezbaC9SoTWf3tFk8n_Sjua6S2QD4rwzG3bRNWJV7N8arZRXMhbXF_6EUlYAVWjRWSkX0XxInJwbQ98CR3gsVS1A8SKs6VXHskpdqWNlk_COw_ldXBzqPIOe8TPskItF7ELF2J2dknpsWX7upHIygfOsoYVl1xu_BtX5S7Y91MSuigIijFgSlWTnFDqXWPL5PZ3x5S0XtPQmehBvUN5rMEwEUouuNMlbGJl9u1SuLFvylyjMFpVIl0Ujv2wrkK7RZRiqaYEwcxoy0qfnZqtFUky2i3ev7lOnZTIiAr3OH3KSk7difbakoVVVn1iasqwFV1EfFwUg4HiUaG8LWqgPVOQMzbGlqgtnJYblNZP7-8KXAARbVcPpNQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a","value":"bmA4bc5AYnswx0gI3o-hqELAUp_RHmrdV1W446glF66Sxlz9KoHI3rNZ1uLUAbnSe-iURRMUuAqlqK9VOp0auKt-HzB3tWTKOEqchRITpM6biaARLjT5BH4nrXJ5PiqdRXHp8Yy7T4F_VTgS-XswnjiCfqUZGkReeOj5ha1I_nP5zDOKg5DReE8qD9m4Zegft351Z6CQ8BIGjW6SKKQvMJgkjB_MMJOO4iLUDZhi4O6j-7RS1hiGRfVY57NKj6BoWHPtLZ1vHoLlXD5V-1BPiLs9uiKU6rnvQdOPY1WuY24uLnI0MBRyFj5-wmKrRT7advThElzmKLuROgSXygsFyeA5k7XgiJTg5ixdKB_RuW-cqTuGVXWF18AFjHU2EjUZYl71f9Ozp61T9R03KnCmK8oxGufu3Tvvm9lrjuZfpR5w17Bcn7yPPPPTdeOrIrw8lWR8mW_dTqeT_hzrKmpXMb7FqIqTamM1LtFm3jqImpKQxxbx8QdryTz_QkYcxPNMmB7PZaV_qCXaOiPOlnIlYlQ3YVKwMMfvBGuD1reohJbtTkv-xaVojwpYOJdQXXfkk5PIBgDwP5Emb-f78coh8T8Nguf0g8t9xGgaMvIlcfapV5CJZoxerNQDWbDYMjke13DIof_JJuKxGmzLpVNdiPB2wdDlN0r1dixmU6zkvsA"}'
         headers:
           cache-control: no-cache
           content-length: '806'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:34 GMT
    +      date: Thu, 05 Mar 2020 23:46:13 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "RS256", "value": "vgZc0NQUb6WMKX___V2JntcFRO_vszKwSAj7R2rL1zg"}'
         headers:
    @@ -810,38 +677,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043","value":"a35Hgf3X19zkrhReCpvacgXBo7BCnkl-6NDTX0enDh01FtOl5UoLdPMpwxqjr5j46-u5ehajkUBUU0V4l_u-PT6uchyRrxqIppWE8obCkhAIXSHIwRyT0a6htr7blIwFWkYy3-uBorhJsp0PqCAIibLsyAWXg5_4jm7_v4tkp2lCBSxc2vJzC7J27bc1TfmqDuTyjCbZyJewa-ZaCUFmzmGmYuCCAsAQXhveW5fVqAWDwvo9ArQTLtxXul8wkIH5TaYpYdMpvaDpyKm5V1Qp3xyGDqG3jprFmIuMNs2b2s5gvN0SlK4k0xWkPNVn3aP9QOYDrOiECyB6vIidW_HMKRBgwps7pZ6d5yaCsqHbdu08uM5ruYpbplZOWsm5BlaiUuYQE6beG1EIcDcgcqkpAKoYBa_bqQhx0fskrnl_5q36u4UC1xy17ADpuiIRzUJDDqVORtM4OraBknTf6XsyOxOus7feUI2MdI5LxO5-mFsWD4jwkRWijnllvdzrKQuYLgZxlPsOm0HJkVluanHXVH3Bck9GuzF8JbTROyLfYib3N_xsdKuOEQBO9ynvMmudW3tyT0KygxCKR3XcJtyoJgU6UL64MlRlf9eg0u-IvzuBvKhifHweeudDGj8H5IZF5mWszXH7CwlYFVqsY1uAUHykNOqqcdT2Fay7OhiVdnw"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a","value":"m2uxMI_wgUq2xHg4ni_8nbnRTEUg2IEoe9tIio_amOnHG4ZCI7QUYdG1MxmCpC5DrctXiKvC44uC5IsuNP9VcXMWSExA9BRXqpI6QwEGYFWcXDJ7jUxEA74F-lO3NnzLS7EdXIMDLVcLx76FySZAsNqx3PDqw2_gxPxIiKLFMJIPmEVnIzS0fKr8R_UGHgobHYmllGO2ChkEqh8c-H3AdSoVF0-dxkhvfXZNLxQMOR_xLUNnM6y20hs-q-KaajjzeZbs131FCEQmUNVhT-0sm5pC8qC-5tB8qO4Enlhv-s46gJkTesdM7LbgsYGyM8rpF68YTlc7_D93RznEKaoLiGYmusvjmryg1ShDQZQNQCIiYDldRUVbDrhVpNTLqPCiV7V6gK4CuB9UXmZioo8hIideDmrZI6x3L_BKwqjyiDenGN0OvsLSFJCUpMMmdcdBFI4iRmZBMmeUVFDIL0-CRWEfih1QY6Y_MgxI3CDz6cVSEILEBEic5UPEiuXQ9tn0RgLbtObsumY72ItKcNfln3waed_sqzsKxf-mnamAObpj97AoltPbH3OfXbAqm9oaoU8gznDDx_I2CTEyuM_c5AQ54jm73utRyO1YgnYvMegtzsjlaZhzpetLd6XZ1gaOIINGy_HjHkAg82weehFcDvvjC5EislMsWLNMnj4dGQU"}'
         headers:
           cache-control: no-cache
           content-length: '806'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:34 GMT
    +      date: Thu, 05 Mar 2020 23:46:13 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "RS384", "value": "OnZY76NXJ8_MBkjnc9b9RiaL5OYscmrTal040wQuLFlRrnLvJFecIvZl2KjXqwVB"}'
         headers:
    @@ -852,38 +712,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043","value":"kfKCHrOVEwQyoDc4rTqo2MjaHhwH_WSWj3sOQc93kbrXETi4q0idMwu81p5jpStcGwIXAItFKBb7CByhszrCfIg_Zz4HwdAokBN9uvECy9dhWKcIPU4y_KpneC33DxL3mcBK-HZ1irBhzWkt78wkPuleEmcOWAF3cV6g-D8GXouem_G-CVrtG6kq7-3PF0Vde-pko3l0_n8GyvgkYDlbTyvCK5q2YRpDFGOdgcjLf1NqcafySXhEIFj3EUp110ohdmiKWG0XuddZ996j7xYpFwHDs6IVvH94pxhHU8LUasBszuCSfimmtXc0FxzIsW7vTTeqiZTHQfXOAEyVE9qcuHLKtV7EywFIIVhQye8xFq3SHXCY3gbU9lwT7BWlnvmgumjQyfntkolavsmkSrB8sJ3Rf1KJq3OUMwg59hfDbLLjpmHLcyHwQgYKfTN36qF1DUFnaJxPg9pI2VHcGraiSwr64zj96g8bwdZMJrb8Uk7Ypp2OU5Haxv7OgYORetwKndsLe5gz-MyJULjFdAioKmbuHL5znHKpx8_P43ZBFADMfhg0fy0vrs417zwPgwcynXIZXuVgOz5YDmsLyrD7NifBYx_uWbAZv6t97_cZtqBdnBpRWF2BFjKUWsL-dTBe-TgJiZcVae7nDRhHG4i73xNWoCAFtZd_F2q-ivtDPIo"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a","value":"EMZcuWtCDCn1HzOZLyz2KSpwe61kiti085okGseXVphpDdSSc3Q59IUoKRBI-SL5jRTutxB0jSUMwigHI-NOPO4qiwOoYAXAsENdzIuAGXWnrAfvSz5JmfRb-4EOAz79Xqd-gsumAQJANI3ks59vH3LSMyME_II7o2DeYxWUrIL6hACUBuIe1_21sqwOP1_ai4o0hBSeAEYJrOcJJrLHDGs38q_iOoFOu9ZLLTZjtVQHqGVG7cVwlFTpFW7_BZgBvuT7Lj0T-Ilh4PqzZqIpdWj0XH6OXcDo5uJSUuzyt9gEv7w9VvBNqnaGX35lZdGyGImmuoMXVeLh43tynq6X9mVn4JiHo99-CNZ9HFxjCtDgANisxKfhRfs8gY1SbrM8zRcapuUz5B3Wf4kemwWEtVGV5eYE-egPhZoEtMRa4TMqAFqmv3GP71cLdt5UeKuWYHSo4h8XyTPvBQgLLqrjkXrZtmwtRVw5QkPqeMYIPvQ_kADNKj3KAyL1aAFXhPiPzopn1Z2GcfDXptx6AFGinmvHOb9de37kFTCm5uzBnAYlNrNjCbRJic1XCpUWXpmWk6B0XmXmxDtZGJjy6bPec27uQsScGta8ghXhp183j6EaiHHX2myxFAujkjsRmVmCZvAm22VFA-folqm1gxVCF9aReBplsb1T9ALqbmF1D6A"}'
         headers:
           cache-control: no-cache
           content-length: '806'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:34 GMT
    +      date: Thu, 05 Mar 2020 23:46:13 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a/sign?api-version=7.1-preview
     - request:
         body: '{"alg": "RS512", "value": "zZyL-eOHDnnq34aZaWgBMobx4x2Pm3mPRo4eqnRmLK6sE0jsXZFOFhMXaTcvILQxovTsMMh9JupeojYCnDvfrQ"}'
         headers:
    @@ -894,36 +747,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043","value":"DxRVxb5X5d5pnzCj6UfZdS79d_i9R1DL5ZYU56C-WDTUiwLcboOUzGlktnWUI3qI8JRdONvOFMgcTHKxx5_02YiAQLTODD0emljo55bnHDtevgz8vYYMOLO8K0sUBGntWfSyPDf-w2PzMN03r2eE4hsTzIbQC5V1GieC-_4EeJqgDQNgaQUvkFsBRfoN7shcaT7R5nU58_2_7Pi_xovCJQ58d7638CT8YENBkj0E1c0_65Scx6BEcfUZC_b0ZOEpFTok9E97wSqZ2WXpnF17jJ-G665DwUDQpf8HGo4NZEuHsPg3oNSa-Yf4BlDETGoajUojzem8Ajzyhf9cIJ9mFEKO4G_m6kMQSG6gDpH3NDchO87zDVeVedipKUeNU9fKFjaK_FcQmVKEtxMi2ZebNT8G6MRQRI41jHyF3XZyVA_9sJAp4GxiMynCbfG0VIJC0AzBUGe_JvamcbRGqUK_Ud7YIaNYYxrvRwYjMuYsX2qIM_ZTpZ1P6yk2gBgK96onqEZ-19MLiUN8w5L1ri84tuML5mc4nTBxd2ePutcwPf95HcodZz2MM42EDnBT0V3wsdLzhRKPPI_ndZ-RUYFsiyuSB96e3v4P1qLam6XvFK7j3x5YNJkMcSsH7bX8FoNzr5LXffSKxYpF7XCDJJ08sppdQ-uDPPLUewIILOqOptA"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a","value":"lQQqK0Pg37LANllAIhHUgmegAY9QGMn-eXII8nFqM2jwUEOlBceTsffeSIXTfywK242tJZtj7MqW5t03hJJzvU0y2rAWAQpHg7a8Axv7IkuTVp_qL6dZ-YqOvYpSg8G1KUmPUFJJokPs0pwYZNsJ3ERHaPVSDeL4B1wkCWbeMujmvdHOzJ5gAF-mwO9n1ZQmmgajOzzsdfpO3wPm3mKdKTKWx7QddRhAcBYTvdDVMiNHSOEUa4zRQSolww82Jo7yyhXt3ZkSTmZSDMw55TfdfyZW81WcBVQv1VvGf0zUk8YR8NKy4v3QrapcOFB_jQP4sseRGr4mgnNgsPb_Cj0LzcFDAUABHG02y95Uy1nroKIMopzL9rt_KzYw8zAqPpFeUXBF44ywnYXjqvZnyCBGLxOLiM9pjsu4aRy0TfqzmX-pU9XuDmzvSk_yrF0G-Q6Ls65FiDh9AWpUK9Re8KUmKaSj8qwWjQi8i-EeprZe70PBdIIMLR0bdxUpgeT6IEnJJDaApmGdS3RaJUekugq-n50XWHZbQPWh9Ih-nH2fnBs4kXHSqhpZcgRIt7aQBKuLeOYakt1Z7UhcOSKLHOQW-mLoP3OT4dZjiQi9Jnik5BWVLNRWHM-YXKK9dv04bzRoGgqNVPIZ5ZFzPPtR8zK-K4i1_BkBWbkeglT6YMKTWm4"}'
         headers:
           cache-control: no-cache
           content-length: '806'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:55:34 GMT
    +      date: Thu, 05 Mar 2020 23:46:13 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hxw3ue7ine3yp2gwdptox7lc.vault.azure.net
    -        - /keys/rsa-verify-4096/f385028f54744a1fbbe40503d215b043/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://d3xdfpct7h5m6e3xi45jiv7i.vault.azure.net/keys/rsa-verify-4096/8f96704e999e4199bca789acd594161a/sign?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_sign_and_verify.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_sign_and_verify.yaml
    index a61a16fcebd8..456adcc367f2 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_sign_and_verify.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_sign_and_verify.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/keys/keysignaed712a0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keysignaed712a0?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Wed, 05 Feb 2020 21:47:53 GMT
    +      date: Thu, 05 Mar 2020 23:16:36 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,14 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: https://y3t324okludcnhvq5zhhess7.vault.azure.net/keys/keysignaed712a0?api-version=7.0
    +    url: https://fpssn7yg3tgaufnmpgxwmags.vault.azure.net/keys/keysignaed712a0?api-version=7.1-preview
     - request:
         body: '{"key": {"kty": "RSA", "key_ops": ["encrypt", "decrypt", "sign", "verify",
           "wrapKey", "unwrapKey"], "n": "AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU",
    @@ -54,31 +54,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/keys/keysignaed712a0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keysignaed712a0?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keysignaed712a0/b7c487027ee949a68f3f2f5495359696","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB"},"attributes":{"enabled":true,"created":1580939274,"updated":1580939274,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keysignaed712a0/111022eddb9e41788698af38454246e0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB"},"attributes":{"enabled":true,"created":1583450196,"updated":1583450196,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '663'
    +      content-length: '675'
           content-type: application/json; charset=utf-8
    -      date: Wed, 05 Feb 2020 21:47:53 GMT
    +      date: Thu, 05 Mar 2020 23:16:36 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://y3t324okludcnhvq5zhhess7.vault.azure.net/keys/keysignaed712a0?api-version=7.0
    +    url: https://fpssn7yg3tgaufnmpgxwmags.vault.azure.net/keys/keysignaed712a0?api-version=7.1-preview
     - request:
         body: '{"alg": "RS256", "value": "vgZc0NQUb6WMKX___V2JntcFRO_vszKwSAj7R2rL1zg"}'
         headers:
    @@ -89,40 +89,40 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keysignaed712a0/b7c487027ee949a68f3f2f5495359696/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keysignaed712a0/111022eddb9e41788698af38454246e0/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/keysignaed712a0/b7c487027ee949a68f3f2f5495359696","value":"YX0IOuHlYW7IEVboW0c8M_geUfp2pKoCw7ujVZfXZOy0890603_QcjCSzuw_qUWehJ8IYVlfaXeF3Ebu36oB6cD8oG8OfI6rLM9BKQUR2KE5VoCBKAGit7FxhAnLRFGP69dF6gyO_wv_-zCJnXLIOg1Pu0K80WVSYkj6Wzczj35OQHEptDqRmxdwQoDYoEk5iYcb3JOeWC1frcGVEf9qs0yzwx1AbgkAOPElweovZZlleS6MALP0HTt7L5zJg7kjnCsuksVsEfM2R0_Mzt8nT24LczCNyZac50hHVkCepaZDRs26KodYnSs3doFlYOUJpCu8sxil7VBTEtFY38dENg"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/keysignaed712a0/111022eddb9e41788698af38454246e0","value":"YX0IOuHlYW7IEVboW0c8M_geUfp2pKoCw7ujVZfXZOy0890603_QcjCSzuw_qUWehJ8IYVlfaXeF3Ebu36oB6cD8oG8OfI6rLM9BKQUR2KE5VoCBKAGit7FxhAnLRFGP69dF6gyO_wv_-zCJnXLIOg1Pu0K80WVSYkj6Wzczj35OQHEptDqRmxdwQoDYoEk5iYcb3JOeWC1frcGVEf9qs0yzwx1AbgkAOPElweovZZlleS6MALP0HTt7L5zJg7kjnCsuksVsEfM2R0_Mzt8nT24LczCNyZac50hHVkCepaZDRs26KodYnSs3doFlYOUJpCu8sxil7VBTEtFY38dENg"}'
         headers:
           cache-control: no-cache
           content-length: '465'
           content-type: application/json; charset=utf-8
    -      date: Wed, 05 Feb 2020 21:47:54 GMT
    +      date: Thu, 05 Mar 2020 23:16:37 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://y3t324okludcnhvq5zhhess7.vault.azure.net/keys/keysignaed712a0/b7c487027ee949a68f3f2f5495359696/sign?api-version=7.0
    +    url: https://fpssn7yg3tgaufnmpgxwmags.vault.azure.net/keys/keysignaed712a0/111022eddb9e41788698af38454246e0/sign?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/keysignaed712a0/b7c487027ee949a68f3f2f5495359696?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keysignaed712a0/111022eddb9e41788698af38454246e0?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Forbidden","message":"Operation is not allowed.\r\nOperation:
    @@ -132,21 +132,21 @@ interactions:
           cache-control: no-cache
           content-length: '356'
           content-type: application/json; charset=utf-8
    -      date: Wed, 05 Feb 2020 21:47:54 GMT
    +      date: Thu, 05 Mar 2020 23:16:37 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 403
           message: Forbidden
    -    url: https://y3t324okludcnhvq5zhhess7.vault.azure.net/keys/keysignaed712a0/b7c487027ee949a68f3f2f5495359696?api-version=7.0
    +    url: https://fpssn7yg3tgaufnmpgxwmags.vault.azure.net/keys/keysignaed712a0/111022eddb9e41788698af38454246e0?api-version=7.1-preview
     - request:
         body: '{"alg": "RS256", "digest": "vgZc0NQUb6WMKX___V2JntcFRO_vszKwSAj7R2rL1zg",
           "value": "YX0IOuHlYW7IEVboW0c8M_geUfp2pKoCw7ujVZfXZOy0890603_QcjCSzuw_qUWehJ8IYVlfaXeF3Ebu36oB6cD8oG8OfI6rLM9BKQUR2KE5VoCBKAGit7FxhAnLRFGP69dF6gyO_wv_-zCJnXLIOg1Pu0K80WVSYkj6Wzczj35OQHEptDqRmxdwQoDYoEk5iYcb3JOeWC1frcGVEf9qs0yzwx1AbgkAOPElweovZZlleS6MALP0HTt7L5zJg7kjnCsuksVsEfM2R0_Mzt8nT24LczCNyZac50hHVkCepaZDRs26KodYnSs3doFlYOUJpCu8sxil7VBTEtFY38dENg"}'
    @@ -158,9 +158,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keysignaed712a0/b7c487027ee949a68f3f2f5495359696/verify?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keysignaed712a0/111022eddb9e41788698af38454246e0/verify?api-version=7.1-preview
       response:
         body:
           string: '{"value":true}'
    @@ -168,19 +168,19 @@ interactions:
           cache-control: no-cache
           content-length: '14'
           content-type: application/json; charset=utf-8
    -      date: Wed, 05 Feb 2020 21:47:54 GMT
    +      date: Thu, 05 Mar 2020 23:16:37 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.174.21;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.891
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: https://y3t324okludcnhvq5zhhess7.vault.azure.net/keys/keysignaed712a0/b7c487027ee949a68f3f2f5495359696/verify?api-version=7.0
    +    url: https://fpssn7yg3tgaufnmpgxwmags.vault.azure.net/keys/keysignaed712a0/111022eddb9e41788698af38454246e0/verify?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_wrap_and_unwrap.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_wrap_and_unwrap.yaml
    index cbb553d09a26..73f57084c126 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_wrap_and_unwrap.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_wrap_and_unwrap.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keywrapaf9e12b1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keywrapaf9e12b1/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:07 GMT
    +      date: Thu, 05 Mar 2020 23:16:27 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wvjeoytza7ve2lu6avgdiisn.vault.azure.net
    -        - /keys/keywrapaf9e12b1/create
    -        - api-version=7.0
    -        - ''
    +    url: https://qjukeba7cjfbnvpf7z2i4sfu.vault.azure.net/keys/keywrapaf9e12b1/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -54,40 +47,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keywrapaf9e12b1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keywrapaf9e12b1/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keywrapaf9e12b1/0f22b68940d8490eb575abb64e4abdab","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"uontUOvkwKxImF-cncQ3hlxQJKbSXyCLMW2YQbhOygtrylP8sPzcU9CB6outEiMAYDRY43ixsAsvxDCLqXTa9lVXxNsk0oazRjELugOmeLWcbZh270mZk-lx9JGm9KPyr4d9vLofMNmO4lsHbOj_HTaGUZNR9TlY4A-kuJAlgqtPCCZTLvdObuLjO0GrUUYwq57eZW_x0inLSf6I4fuOF-gUbi6-YJqGEHaXg0_6PzjIcqPpp0PxXfLLVDgo2PKZieuRqBB2IkDOcg19cTNh6L88TcxBK-ilowvc7lvRMWFyforB1NFC00HllHVPTP1xYdxGOULk0c36vshAjG_cMQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676568,"updated":1575676568,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keywrapaf9e12b1/d538b17378344a2d821a4444cf592bb7","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"2k7hydvdwXa3sDHBFZsqd6ZAtx4g0yd6I09GQlq3tvmogBdRIr7UxVgS6CU_KolGN9SsJ9-G47HYtz4M2PtvBibO9ePdIynXh1xVO7Y3veVDGeFOOqNNWkSclhW2zMutkXC2_f6Hy0Emzpn6JHOKNcPvLzKfgL-E9Rl4lsW7lrE4Z0CGNIpZaCr5rsL79E2KsCuSidoa57WvwQLnzwnYYMP7SJreo159fiPku1qprdi7kSdlpzRDW5BebLEwAR7gCNDr89mYQyj4V-gkesxC9yoT24YEWkoZZTgUIqxN2wIti8z_rAR1wVCw5tL8zR269btrBNeR2i6jDf8gkXtL2w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '662'
    +      content-length: '674'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:07 GMT
    +      date: Thu, 05 Mar 2020 23:16:27 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wvjeoytza7ve2lu6avgdiisn.vault.azure.net
    -        - /keys/keywrapaf9e12b1/create
    -        - api-version=7.0
    -        - ''
    +    url: https://qjukeba7cjfbnvpf7z2i4sfu.vault.azure.net/keys/keywrapaf9e12b1/create?api-version=7.1-preview
     - request:
    -    body: '{"alg": "RSA-OAEP", "value": "U6YAZBYiUb33W-v9zZIr4zVk0ya_rnUXOoAz43fhJWkxS-rr0h-95WFI1Ml3lhR8O_6cgpb93EPZpn8oLLNagCXJw8VsYOhzY5wMluHiEWyRq-Z7jnHxDk74bg-yNYUbwZ1bnCKIRXvq0JsZKU_Zs8wdcM4cv2pWvdYSrDc52RV1S_nOAibNC7wryhXn1_qwDaYtRCUixiOVnsd2ycBIuc9tLuxz7txMcE4SD9gQ_fw9l4Uvdwhrxh-d2XiA4L9_B2frzDEDMoiJ3QPDbNI3k3VwHq1dbQrsloOupyeZ31lK1F9MendIk7x1npXmlns9pQGO7uVuti1a5Sz2R6Mxgg"}'
    +    body: '{"alg": "RSA-OAEP", "value": "sGQ1JZFA4GwH_A6xsNd74_vpxlYpPohaT8n2Oa9HkiV0lxs5mMjJbccDSOFMxMWlynGyfFKEcmlYf936qStEIwLtLCxUu0hVDtcH_XB81aq2-YhhnJKck2OEsiWzNsg7obt6hDmws3KUrugiVFmgpqABFzy69TLPLIW4E5VIBFG-zee8fugzU0kPzeFqxGaQEzJM_tFrFAop5UX3C5GnkAleu6oX3Kdlu1ud3_oDcxg-xRu1-NFZtzn_UbJrkn8h6Fo2Yj1AEyg7I8DRlnVBJfDhcsOqWAOg7-5Q5fUmGUpn5CYpHgHcAfLFDb-HNliwOZgFZsZcggtXVHjccwz2Fw"}'
         headers:
           Accept:
           - application/json
    @@ -96,36 +82,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keywrapaf9e12b1/0f22b68940d8490eb575abb64e4abdab/unwrapkey?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keywrapaf9e12b1/d538b17378344a2d821a4444cf592bb7/unwrapkey?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/keywrapaf9e12b1/0f22b68940d8490eb575abb64e4abdab","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/keywrapaf9e12b1/d538b17378344a2d821a4444cf592bb7","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control: no-cache
           content-length: '390'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:08 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wvjeoytza7ve2lu6avgdiisn.vault.azure.net
    -        - /keys/keywrapaf9e12b1/0f22b68940d8490eb575abb64e4abdab/unwrapkey
    -        - api-version=7.0
    -        - ''
    +    url: https://qjukeba7cjfbnvpf7z2i4sfu.vault.azure.net/keys/keywrapaf9e12b1/d538b17378344a2d821a4444cf592bb7/unwrapkey?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_wrap_local.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_wrap_local.yaml
    index db99c4f60bf6..83901e982ffb 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_wrap_local.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_crypto_client_async.test_wrap_local.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/wrap-local/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/wrap-local/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:10 GMT
    +      date: Thu, 05 Mar 2020 23:46:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,23 +29,16 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - issenudztwi2fshlufdgumga.vault.azure.net
    -        - /keys/wrap-local/create
    -        - api-version=7.0
    -        - ''
    +    url: https://kjh3fq5m4tniadcy2xcgrtjn.vault.azure.net/keys/wrap-local/create?api-version=7.1-preview
     - request:
    -    body: '{"key_size": 4096, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 4096}'
         headers:
           Accept:
           - application/json
    @@ -54,40 +47,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/wrap-local/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/wrap-local/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/1d293e61525848a8a6f1d66dcd0af0a4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"p05gSMqZaA_YkqrPD3w0jyWhlx2xt-RYL43HfC-0LuX61x1_mGRnEHXEETmqvtabIwkw_HsUJpxgNG1Mp_XA-Ug40BzPLp75vsHF3wVOey02jpd-1H3AFeTQYyei5LgUzwbG3-klO0eb59niXhRTnv8g8uGRd0Bk7y-THUcaJf3nVqTnjvyAGnCfMD8OMFuisFaj9kGZw1-zxp4eJDZ8WPYuv5LfD1bXu_686eSDcjQ6_pH6APE2lk86F4O4_LB5lL4Qv91PfQ1NFo_IZRY_dCpUB_IndGuCU0fooHjJnnCp78gCeXhkzVVkq7y-0pdlD8D0aDzkYOzNQPllAyE4EJQTFwjuMUPQfAcQiWnmx4sXYTCdcpd4kJiUmyqAdWU12j-1kBeVsonahDXDtkGm2Le6kkWCWDcrgwRLK-tN3IcxGI2IcTNtQYa_iVVPqhwVTaPRTqOEB2GWtA0cXXZqKYoW3mmhmK_Dol66XZkN9EZoCtYQY5HZbjz4HFA3iJbBMFBLRDJ_vEKXtJX7O1JYL_KeacISA2Ql9Q0F2JQzzJcV74SlsSzKwwCZKx-9dhgHGEq93cN3p-wdKF5ven5QzTMaYBD2ifeTy3cHFrSTTwA6NZnnzNW_sRLASOwxOGdu3NwsGxjK2HwuhpjwxAfdatXPw5ZKcfNy46nVdzb7cEc","e":"AQAB"},"attributes":{"enabled":true,"created":1575676572,"updated":1575676572,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/3809454ddb7845bbb152e1fb230e5ec4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vUcGh2x_3Yzy1uqjrs1O9MF4idk5ZW-XgPXcSIoIDMWUn43JfsPUwOnpVaksq0ud3xe6ajXdlCbZl6Xy9lXYxRaEIPvVg-U32V2QPzs4QXoHHZ8UzwPRyp-dZ0zjNiNwuTbKr0R2_HC-MjMlH9fmauCxDSUbJgMbh7B2yZ9cTBQXOn4ooO5zHEgmdCX5Vt_mErcvryJhAAIcQQ_RgBflt8itm-tV-ypaSIbyRZ_xST8cyVHEtJFbeZNr4-O9ex-HiA_OgyDZUQJQGpRWYIq3D59bUamc5TYDx0qMp_hQQbAnEXtuBLox1ZFP-5ElruhXkjj084z2XLqCV9Y4NYW21KlZtP_7gBdEHhef32pukByPuzD46Y30Jkck-kZ8cWLbDGoPWUUUWQGG08Mv0FZdDgmsJ2puRQtvaGH01JFH3_CY74nvW35xq0ty1oc-nOLIjiahi6D4js0PoDJdU2LbEwVUEvTcB9zD8cy7SyUvEXyjSfGqiVw8ste-VsWw_KAy7lFfDID_V4ZaHW59cuCxZK6vj1cjMWIRyeEfKUyeaiQLpB1RqHuxJopAgTBJVIy_TG_oa7pF3P8Ad_9pkZLZcPqrsT-x6otR2ysvicFUNM9jH1AUDF8iTh7QDESTtQD732DrdruqQ19oI7ROrKOXQjiLKIamGfDu1v9P6_JdpwE","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '998'
    +      content-length: '1010'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:12 GMT
    +      date: Thu, 05 Mar 2020 23:46:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - issenudztwi2fshlufdgumga.vault.azure.net
    -        - /keys/wrap-local/create
    -        - api-version=7.0
    -        - ''
    +    url: https://kjh3fq5m4tniadcy2xcgrtjn.vault.azure.net/keys/wrap-local/create?api-version=7.1-preview
     - request:
    -    body: '{"alg": "RSA-OAEP", "value": "Bjesn8NUUczADoIR8YT2H7HocV7UB3Xt1gMqKY3VGZTjeYCa0zePr6bcPjOwAUnYjyAyz6Q2IDvZsbsA7kwaiwnN9tGARjhAbjDCFMGGJZxGMMnT4FbN34EVFPgUOg3sJvTxpNXuyb6EWfZVIMmWcrBEI5dOJ8LazY1XDzL1Y9cV8Tkt751oQfEQ9l4jcg8LejbFUnms_vCKudYcZxsACfOUpvRAZb0bkNPxCuUWYnh-fDVm_Y-YLTD6r9we0RLTMQTpbLIBflbKLRZ86bIOBvWZBY6UEQwRC7AdPmWmqoeqfJ04C-jIC07zTGwdOqZbnuPhSvxPaaqujdeJHs17ghLDaM8I-jQ5It50UgOwmoow4vazpztGqdSjzMOxyXq_oXvgdjwIPtuJTBVRHoKL2YvrUzFbsh2_6Zi3zWhNbDW4LsXaEq6ovF1VR6ZE9AQHd7iBKxp_Zv3yWYXUBqa9UzgtulZ_OZrvah9yxAcdjtGpsXgRQPLq2m2PtVWFUgaXp12mKbPk5IQQAq2Bn5hrO2tEaCfXOOTQ3DxxvlCBz_BsgGLHkdnFZT2YfmFHhEf2D467JB1SnNy464Q1--OJKTZVFHpYoizTAz3DiHfj-IkJJGLqvFVJqWAWEOtHkp1zNtXRBLEkUpDEbC_whttZ8wICtf8yervdt7DozmkvwGU"}'
    +    body: '{"alg": "RSA-OAEP", "value": "AkZM5drcq-ovpbg8DFgp-RX8odeq0qS-HYKwYwSutqfr4dV41kpuhK__f9EC0x4M2kyv3WZozRJbm7kVMlFD8-l6bQksjYEjuLyzA9jmLJNDIuen_lTm_lfTXTjWsg8_WQuoa5E6-bvhxIoW7sWZamLmirLB-W86r0n5LcU-lcQ4U4BadsIBNyQ-1XQubpSL1JMisAHeMbIGVFbzp8s963HfCOxCu9PLFDdBm7U1GDRgL7bKjKOtqqEaqi0sSNLHRXcLZwVF5d1ow0JnX50lFH_RD_XzNUF5fjN7N6AdPQ5C29DRKkdRI9tS27MRFshWLihJcwtgb4WObmU0dNC8lWfZ8gU7DUQ7IaZbklYVfOBD2LO09bG8Awl_ZgijWhDPXBR5ClpMPjmQ_zt-RIg9MPFUQQ_DvDKtvmWucEdUmcXx2QcnppcG6Gj_CGnnGhiG0z2ec-gcCPv4Mpi-PqiGmirDhWTIWOUsRnphNrA3rbAUmJkM7YXvfwfRsfahwvvy5U1nmVbzJIA3JynnxvHZXCyXkkDkjYmtqZLyPfne5FkjAWB-hQOYkVZ2gG2ZTZxHtNOEahvO1Lq1_zCO68XxzEF7-5iXt1R-iZpoz1eNc65AU4lkFMoL0L1FFaY7QJGdRBEXiRUFZbBnzMMoCKu8UsF20fE58UbHsa_3O-f5RSA"}'
         headers:
           Accept:
           - application/json
    @@ -96,40 +82,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/wrap-local/1d293e61525848a8a6f1d66dcd0af0a4/unwrapkey?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/wrap-local/3809454ddb7845bbb152e1fb230e5ec4/unwrapkey?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/1d293e61525848a8a6f1d66dcd0af0a4","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/3809454ddb7845bbb152e1fb230e5ec4","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control: no-cache
           content-length: '385'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:12 GMT
    +      date: Thu, 05 Mar 2020 23:46:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - issenudztwi2fshlufdgumga.vault.azure.net
    -        - /keys/wrap-local/1d293e61525848a8a6f1d66dcd0af0a4/unwrapkey
    -        - api-version=7.0
    -        - ''
    +    url: https://kjh3fq5m4tniadcy2xcgrtjn.vault.azure.net/keys/wrap-local/3809454ddb7845bbb152e1fb230e5ec4/unwrapkey?api-version=7.1-preview
     - request:
    -    body: '{"alg": "RSA-OAEP-256", "value": "BP0F08YmNdCAByLiXn1hZvOnerpurKGR-X2Nok-Z0Dd_IahRvyODrOt9L7pBDYfxJStc9iBj-bcB_iSZztrsKR_KRGhkTS8ymMb87qNU7lLyJ0dMMan2FIlf0IluFZ0K_Tx6o3l9SdwHoyFiXSq3uehvlhs4PYuLrNPjy5zh8K78zsutKfdBcb7TVfl4bfJOsb5aXDk5oGoWUK8S1ERBoNCQLWq-QAllGitqswq4pkblmVokWsu0IOtiONlN-XvGrPcE_9ZPv4ksp7mhs1z505xBsJjBTS9nN1f77OYDSL2djzQ7qG3ToeOXeP397JZfKx8T9uSMyB0_BGM3pSbexBl4rd-joPhtvS-knKSn8shD-1KfuH6RlBF7BYXHpwbxMUSb1e4cDIeWgWWOOFlYnkRGKBDsoG5RQJAH9oNvcvRQe-dY93a1yE-kNpuNDfkT0bOFz9jWavJLHKY2Vtj9oZSywf9pV1bzoF7h0dvAlT_HqMJfei3w9fYZ1oiKxE_wfiMsHIg2JQvmmNFo1b2xQ4AzFSgaR7KVBF8P01R6p8PrskWB_N3_7GjlDIiEE4gqNO3SoKfHLDsoI9JM946efKBXXxK8_Jo8dlzsN8fOsKT9sxQkOFtYV6JQcm3LzKIitMENsMnkvMH0I2KOvzao9yQTeOVM6JRTSrt4CQ_s0kQ"}'
    +    body: '{"alg": "RSA-OAEP-256", "value": "F4YiI_Lv_XTkpti_HcEoiNx5jhmS3QpEpl65g-PDpzgy9PTSlM9qHDFDrfxuBhIHoQ0wC3mBUtjqdck86zsX_p1FgUEdw7JXm9SEGPnuFVCgqtDR-FWBgtph3D4MoYsNW1A44m3pt7pQSUmDdl90HUmwgCUzKL1TRXezPNW5iu5KK80i7kUwJrtH1Mbk7NEGVlauMYK5i4gzw7BL7oaisNL-2KtpEFCj9wQMkZaFbQ7KQsV6hvyv49NN0pcbdpzeZxpegj1s85nfqEBYLbAWKJxzML2bQlUFqnw6bp4DUZUw3KH9X-HDXNJ6AlXSt8OK0ytHnY-gRezd4gmMCZZVIHYsaZuNdRCc6y2z_xYAglE6IN4IFewsWf32c0uHyPulmKWNGNvKaVD7P10pnQnADGHxU3sHfulbT82-vS7QdiUaH_zsLPE_CjzCDjwiQYKSdCn6mJ19YyEA1ZDVhapXmAxHhkcXzZdbMJwpI-iKTfGB8m7DGZzE6csSHrn_NZWP6wMvABA-FzWq01wDDVhB8hLRoB21NG6PI7MBCxER3uMFQybc7I1Vflmdp3v6p8EX6QcjNSLDep1MXeVvmN5-pfOrUGD4u9HMcBW7_LXdcQw_NCzbNq09tuJ9GuZrAq1pgP5DeItv-U97sejXkC2z7wgwKyHyNHBuzQ8zddJ0Tt4"}'
         headers:
           Accept:
           - application/json
    @@ -138,40 +117,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/wrap-local/1d293e61525848a8a6f1d66dcd0af0a4/unwrapkey?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/wrap-local/3809454ddb7845bbb152e1fb230e5ec4/unwrapkey?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/1d293e61525848a8a6f1d66dcd0af0a4","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/3809454ddb7845bbb152e1fb230e5ec4","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control: no-cache
           content-length: '385'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:12 GMT
    +      date: Thu, 05 Mar 2020 23:46:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - issenudztwi2fshlufdgumga.vault.azure.net
    -        - /keys/wrap-local/1d293e61525848a8a6f1d66dcd0af0a4/unwrapkey
    -        - api-version=7.0
    -        - ''
    +    url: https://kjh3fq5m4tniadcy2xcgrtjn.vault.azure.net/keys/wrap-local/3809454ddb7845bbb152e1fb230e5ec4/unwrapkey?api-version=7.1-preview
     - request:
    -    body: '{"alg": "RSA1_5", "value": "iWCRg-j1KaPcnBW4QfGDC_nlH-Ui7XGZBQQUAKuqlvCdyjAISDjG3LZMb6vHSE3tzAShGpvjil47h7i_c4mIpHiaUcVEfRq54sYC2w-o76shtcg3paXr2OtQFqZYTKBqcsYH_ZaZ-q-F1T3hF3nG3BN1FzPCZm8JQXPu3pCXqAAgI-6D8XZPHCN6R7UBNFncUNfr7_7aaYGf5sjK0-dfYjuQ0nfH-HObGpkSOJMKDBtP4wM4KDUEMVeBrxD2kobPJem8xYyuGDQGT_ChI8LQvXQ3683FKM4fs1aNcuJZAHu8FtIid9vQ7z4ctd5nS0GOTcXP0ohWvlP__wzZm-x1iwmRj9Et9PPg2cHBzs_wlCpXW1idv5_mMAj4v55yN0wUlrd9lXfXoj7StGg7OcqH0SqBBJQGI4_gaRuDIFwDvEoqVH1rFu9d-11wpK8wFtNQQf_0pG95W1f0tRk_FiKlUaYL9ml1-jwCGRk-29RvaMdqYxXQE70b1-g_wiMB_vzXwp57LiNlNyGovFK7KUT_1wwN66s1HPi1wpPbYIVlxdzriyj-4Jj9kr0pjsUygQrQvFTAC0hydykBm32kWMFSbvzHo5aJ4c7Sg-p2uMW0PwJGV-GMi6QSPyMmGrg4OhU6ZQ-nWuaWljG0pOxIqAiNhYJ2yV8jFFP0gWQUDrY8Pw4"}'
    +    body: '{"alg": "RSA1_5", "value": "DU2WA1D10j4WujVAyShN6b8ybUTnTpwjDcwIx9499mdzovMvaQHIaNKwBPUq8JMU4PP9IGC-d6CGdnvqWZAVmzqsZxrPts6grP_OS4pJq2Dyc1lkz0ELfceV8PiHaO22mefhKHh3XnEY2GSdoRViMtlfrtoJyOSwXAYlD7zXbPb5uzHkiexyw2AIUG-iDMfHTsi-jll90baR9EMoosspbJgWdXX2BGMRCR7TGsfYAXMMlSNWwHM9esRapPP4Vn9cupdMK1Hq31Q48c9ClDkDJGBJFbqWQKDIjWqrEWFWDvG4BNCzK8IBI2_805kqhmkGsdJCWztnxsL6MmkgdHrxf_air38RREb-e4UUgdmbCMknq21foS_3jhwbzc2__fFmEfxa7rJ83zPEVaSQuG_jraX6z-ruMxjGNbyPoR9fiBG-LTdllA7nzUTfDa8FJvCWBO1sjt4x3-RyPaydihZd-ar0PXGrLlLsoT5mMDFAZCHHUsipVKW0-akkBhZw47Wq_VpJTBOvtUaz_3oH_nOri6ALJx48t-9vy0qgfqOn9ks5g3LsEB-ed5EoIxDDipInnz54oKwVshOQ0PXW4KLpavtlZtoPUtNmJCHuG6ahCqX3PH8HUffPAuFQMiG_QzMMfDV98leIu5Mk6a8oMyeYmS_a9ZCM9gS36BoZcEO3twA"}'
         headers:
           Accept:
           - application/json
    @@ -180,36 +152,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/wrap-local/1d293e61525848a8a6f1d66dcd0af0a4/unwrapkey?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/wrap-local/3809454ddb7845bbb152e1fb230e5ec4/unwrapkey?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/1d293e61525848a8a6f1d66dcd0af0a4","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/wrap-local/3809454ddb7845bbb152e1fb230e5ec4","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control: no-cache
           content-length: '385'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:12 GMT
    +      date: Thu, 05 Mar 2020 23:46:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - issenudztwi2fshlufdgumga.vault.azure.net
    -        - /keys/wrap-local/1d293e61525848a8a6f1d66dcd0af0a4/unwrapkey
    -        - api-version=7.0
    -        - ''
    +    url: https://kjh3fq5m4tniadcy2xcgrtjn.vault.azure.net/keys/wrap-local/3809454ddb7845bbb152e1fb230e5ec4/unwrapkey?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto.test_encrypt_decrypt.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto.test_encrypt_decrypt.yaml
    index 0c1e7afc3594..6b4f26e12fb6 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto.test_encrypt_decrypt.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto.test_encrypt_decrypt.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key67c4112b/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key67c4112b/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:06 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,21 +69,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key67c4112b/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key67c4112b/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key67c4112b/5eb32db6e197470e84d3820775534cb3","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"zC_mflU9Vs43N77Q-kw7s6Q0s3EpxoSa19Pw5Rk-frif9ReZIP2sy3GWmvJYK8A9JHU3RYIqPlZpLEX42awVVOjTv2i8oWIaHgho1YHjAbE7WSXkeI3ttDutDyT6tgOxVcEpkRokbTxiVl6XK8urPhyKZi9pApQOeN9Xz2_w-e3gZDxbNAj6gCs2CICKXqlHyiT_xZdK9PD_gtWw6BwO7njxBQAOZR7-xYk45mNru9-WmU2VC7FC3ZLzv1lJeyJldX9qSF19m-1_aFPOp1uvJ972BvCXsMi7VSTELwzoHkENRn6lrRNZkhz1XDQjA5KrsiUxyRDsqPlg5foe-tIR5w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676567,"updated":1575676567,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key67c4112b/c4700d83e9b74c71ae3f675e88d04ba5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"zFsTFuSUj24QXHl8D8LXSsUMsnaFSTcIdrYHtKyYLhYzDQJQQQfPp3nCHG4dKzNzRDhTSFz-JdgtRwtvtyhgi7G22Czo0oK301oeWHrfy33Pg583TV2yjHPb5BXvFxoAlUt2ujQm2sGAghgxStuPMDQDlqjcrKHM_vSQ5qDVRTyy5NRc8aAJIuzOJPUZmjKlKttopGHgxBZZPfI5olACzEpai5lfAa1Xvu19T4dxiZsfaayM0COSJpXacAyJjkjZIlsMybwaO3mE9Z51nNezn_CbUVtua6u6tUd0EtsEpTeLAsd8aljahej2RrULi6GyXcLWXhva3NKuqIsUPDpbOQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '678'
    +      - '690'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:07 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,18 +97,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"alg": "RSA-OAEP", "value": "ToeTw4jz6rI_FWWuCRScMGYEJzJbq6NUq1LuODMzzcEjJWU4a1mgSkBNDLAiJa0661onmS1LYS2DY1g0LNBOcRpuQDYv634mz0Umx96YQvSohzws9oS_GaWU5I1XwQlkYImf1Q6hAk4qqLzmRCqQQe6_5Vl9O3qkuk8GfggXQyxRCWb57OZPTZVShqGvCSVsi8J2Y8UdReWR3lVfowiQpFzYxEXRx3ieOCN2S91wVtF98_paQDpqUsQYw0lHS0KiNWeBqA80oMsZgu2yE7zWQwccth1lV4njU5slhabJzWa7rkWjuQ_22ua2EM3Zpmt_caNc8vuqEW1l6Vd7Axi25w"}'
    +    body: '{"alg": "RSA-OAEP", "value": "wKodh4vX29ywufas8hN2pTPsnK9aZtNA6q6MRMvcFDn-bAs3p9n_im9ISJithAMsxp_vci9YujNiMit5jkNLySTcsMe3u8vQbvk3Xf3IC4EE7ofgWQ5Lc0LFYDa1Mpj4a2YoglXhnodH0RLRIpKoUoPlweEvl4T_TKcE2b6PwLJVWWgWRL3uqf8QnUYeAnm6BkhJCT6BYbjbcadA77WPvDNoD3BsIRcsEEHP6w_X3j6u_K9hShddO8OPa9TlKl4lZaejsORB8AoJJPj6kdChRgm8xlziwApsNJiZqvn_OjTkvKY35Y5aCN3fGny0Oz7eIMeb9JA2vlVnhcBTL7v6cw"}'
         headers:
           Accept:
           - application/json
    @@ -121,12 +121,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key67c4112b/5eb32db6e197470e84d3820775534cb3/decrypt?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key67c4112b/c4700d83e9b74c71ae3f675e88d04ba5/decrypt?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key67c4112b/5eb32db6e197470e84d3820775534cb3","value":"cGxhaW50ZXh0"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key67c4112b/c4700d83e9b74c71ae3f675e88d04ba5","value":"cGxhaW50ZXh0"}'
         headers:
           cache-control:
           - no-cache
    @@ -135,7 +135,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:07 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,11 +149,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto.test_sign_verify.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto.test_sign_verify.yaml
    index 0eb5f9f22d0c..4a8c981b9bd7 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto.test_sign_verify.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto.test_sign_verify.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key25cf0f71/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key25cf0f71/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,21 +69,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key25cf0f71/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key25cf0f71/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key25cf0f71/820481eb17ca4570947fed4dd5e612e8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"y5903LKBdoyJfs7UReJ-GSlbbl7EWB1R_H1vhAyvaqv867_iU3T9aOyHsS29iFXsnJApmCZndaq38Xn8L5dG_ZCVgiA7YB8pT8y9sUBzCtHGKp7wzuSNocu0i_oRHevqarS9qXI2QobQ_bjns9Qpy8-kBowW0j4yP8yggEVkYGPRys2vjuymY71PPtDqTvLPO8WpxNs4V0YGTf9yJ6XW4yzdu8uJekPAshU-QHGqdPfcV6D1UzpX_qUH3eKJKxQBH__n-eqIgJ5XLTZrjbjNcGwIBHnTKFf5ubAqzR-IechN2FnIMpe7bKrIZzbTLZNjZznzrRG2pCPCGh4Yr0s_nw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676530,"updated":1575676530,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key25cf0f71/3fdde5e0613045299195750a9b4ee2f8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"q0XQH8eRp_3XeRWjQpgPj3Z-wTLGdspReKSLdeg8arDodllOg5gZfS26Q5Ti56NC5F4IS__-uhJ2vX6D6ZmhE6qjJmrJWcqNVtPmaDs63TCWAyERvnUGrEHETs_DP3S_AUi1IP0Sl8CqoQE2r3CEI2lGf1eGgIULEWp9VtxnaIWHM3410gitkfNuLObhmiNnRuOLiJMtdjVUiDtog9kFYeXopkhiYbdPvX9dZd2W0Oo4nmJeS6tTIuns1trQI9dE-ZbTTOkxtFWKjBPW7LnTEhmLJ0ap6QdsWhiiMp3OjECTVE3LBWBe-_93TBRQiDg4r9JtWOrBmOF3_Ddpk4JyTw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '679'
    +      - '691'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -121,12 +121,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key25cf0f71/820481eb17ca4570947fed4dd5e612e8/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key25cf0f71/3fdde5e0613045299195750a9b4ee2f8/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key25cf0f71/820481eb17ca4570947fed4dd5e612e8","value":"UU4glvNkPz-UjOHg5oCdlj51Fm4hWm_zquucyUe_qD7Xx_I69TF8R_e2v10uA1cfpuqaC7DoKs6wdJ_XrUQPJ97Qy8wiWExMGweWDCvx9NF_kedZZuzbWpCk6908yuBmQ1ZclOEjRMHVTqhufXRP2GPfPsnc796gkwdFFOBWE8YZF4JbQRKG0LqmJH6RMXU4myNc7CluDfAekoRmAQUEkjQ3wtQ86lftDcoeq5VGiubIRR-bJHflvXbOeTMsxnUMfuOz3nyIVHRb9oFzm5FNkSQA0Q86RQ1BMTCQBD_5WZ6W84oUlTMg3P_XEfavbpl1rVV5h4KcntK0I65yVDrSyg"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key25cf0f71/3fdde5e0613045299195750a9b4ee2f8","value":"H_7TN1eg_FMa8_a22HvcbnXa7lPsKGar8zBiXAjHowtp9tKxLYYKf2GQUZbFPwhbxaU9t0l16rzUsTvQgABlu_OZlIDrv0xFR6SROsnDA_-OrowuizWZjTP8ucbt69WRmpH3okb3i8VDAI0O6fz1wnNMP8gJDi5Pf0JVkRff3_sFbcdagaSC4nxS3-2Tbvv5u3Vc2_48u6Wfw2mGN1YbmmZCNnn8GpemHwRryL4VhXPS8lU979-e0sKRkTvesnUItd30dsxIpnaojPj-OMbx8o5CVaj-HIyHSWoNlVK5aS0rVgADctNzcG5JLNsLmPccshRqv1j4pvy5ljOKfx46Cg"}'
         headers:
           cache-control:
           - no-cache
    @@ -135,7 +135,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:55:30 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,11 +149,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto.test_wrap_unwrap.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto.test_wrap_unwrap.yaml
    index 7a7542ea467e..6bd74cfee02a 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto.test_wrap_unwrap.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto.test_wrap_unwrap.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key26720f82/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key26720f82/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:05 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,21 +69,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key26720f82/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key26720f82/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key26720f82/dab6e0b98c3e424195dceb07be4c4442","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5Yut7bGUeGfzQeMxQOYD0OiUXl3WEsidJYpk-0CV1gXFSVD1w2ApwbeSg-WC0qUBxKFg1Tjy312qqzzr2BSfIEizFbnjUjhB-OlIqmacubr_6bwRsgy9WOQtu_8KYwYOO89r_s1GgrBGX8dBd_tG3uXQdq--4lCwXtK3rOoIRoiV0MRdWKGhlHhAaoj40AvQ5fyKE75vFHDvf2hi4mtPeqwQtXEuX-_7lEehbPshW5EdVmAD6xA0g1MetzkcGsIWsA3BHXikMhhM0x5zhkfVkuGZO7BvOUk2oPn2a3gTiTpMuv16OuJaULC2z1Yb_mE7mnhXMOHwA7cZ2vvrbUmm4Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676567,"updated":1575676567,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key26720f82/4a0f406923964ea1b549eb8d2dcd86c1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"1uvcRgsov7WlIXwZSud82fK_Q3KdoLzAu8NVE1GWSwXnfLnShY6gOv7ZyQRE0jXK0fETMbICo8mjmQJM_t10DIGssPSLMmDXuvZ9E72cI9gLyXSR1SdTpsT-P2Y5Gu9VeDJ2C8TsAfDSANR9b-XeYYpYxySg30Fe9sYGqr0xvx4dl27cZywmqnWgtESKTZvA6mSOSIo8Eq98jc8GgA-1W_6b0P587JF0x0hksI22t_W5XQP12I99d5UCKZQdcVArqEVxwElWHZi5uKEheORKUFzGFhTTVf_0MYPhDGVmZrrUzMVwuPJ0ojKCXil4ciTzS80ngMDtG58h77Kr13PwUQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '679'
    +      - '691'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:06 GMT
    +      - Thu, 05 Mar 2020 23:16:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,18 +97,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"alg": "RSA-OAEP", "value": "tI5UY9fJ_Fjkm_T4gdhK8K5CY-MWuDLbDoLazq6eYsADX1hlsN9TqES2vE_FOYiOD8WDKq3xWbmN8-wHGzNtdWu_HhvfEsbiv-zZfGi8r5thJSCLDEvdwiOpGP8XBoU3_k_0I-lfV5qfDIgdR6C8siD8MUcL3dXDt5uQgfDmdLcu3QylAKi_efFOhrmJdW5YyuIZu3ayQJ12f6qyUHR7CdTdJgB9oBVv104AnKzLzk5wsbTPJQ-7d_7EDCCghDWuIQs6wxBK9-BgPwSICf2ZdlXeIr8w3nr9rjM6kScg_ZDg5o4hs6efllFV42T4PKeVaKtIXI-WzqEJxkjPpc8obw"}'
    +    body: '{"alg": "RSA-OAEP", "value": "plapsN8uGsXdm0LDGOUY8dxOzPP35JKYE9u5JjqBwdhbQBhhtFqrTYz7RFI50HElHaIuzFv8RJNHEmKF3O2iuCbdFF5SVqt-C1kfriMiCxzgzLvGLy6s1KjCb1mM9k9XW7pW_mU9fXePPSvhiGajVexpuCrz6JTr63vqs4ErJHRbvHCiGHOQSnxS8ZRVtAhHZZ6tK4EKzNCbAe7BR7bz-QL5sO-JpT0EuMrDpXSnlwDJmkmbXDCD_zndf45yKfDZuZguYdhYdatqcO88ACDDquDHeErCKyMI1ojKyFflx5Yzy8SoTsvocX0PZOws49KKz8Siqq4_vNrwbPlZItBfng"}'
         headers:
           Accept:
           - application/json
    @@ -121,12 +121,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key26720f82/dab6e0b98c3e424195dceb07be4c4442/unwrapkey?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key26720f82/4a0f406923964ea1b549eb8d2dcd86c1/unwrapkey?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key26720f82/dab6e0b98c3e424195dceb07be4c4442","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-key26720f82/4a0f406923964ea1b549eb8d2dcd86c1","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control:
           - no-cache
    @@ -135,7 +135,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:07 GMT
    +      - Thu, 05 Mar 2020 23:16:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,11 +149,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto_async.test_encrypt_decrypt_async.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto_async.test_encrypt_decrypt_async.yaml
    index fb791cb82cfb..f708ae7ab7b4 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto_async.test_encrypt_decrypt_async.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto_async.test_encrypt_decrypt_async.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key56281625/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key56281625/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:09 GMT
    +      date: Thu, 05 Mar 2020 23:16:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - s6ncrdwxrnsc5tpfgyollino.vault.azure.net
    -        - /keys/crypto-test-encrypt-key56281625/create
    -        - api-version=7.0
    -        - ''
    +    url: https://mmz26gv2edonlxfkngxl6p5j.vault.azure.net/keys/crypto-test-encrypt-key56281625/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -54,40 +47,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key56281625/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key56281625/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key56281625/3662a4531ec94723958cbed509a05b97","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ydm7FzwnVEJPiUScevGWGjISiG-Byh7SqSpw3iAZO3o4WakFFB1gKwvI5N9KpUD3Ql_9MO6DM4Mn6d_r5AV-q3lE1VZnx5nNikakrb-VzYzVO5YPJMBA1aCthr9EltRwRCALeTtAQMmdjyf2i5ZmzASG64RABr_U89eGPW7OhU8UPdwwgXUT4FmHtGfNHFIC4zCV2r0_N7uWsGgmb8Zqg1xOiUwOOaLLVxVMUO6t1Yp9mBBEQanQ4uqCii3-AZOerH0HJMBMebXUhyali51VTEoXwj-NeGvEtqA4RH2xAaBqni3v8COqqPVTg7EHXbkp3uQgZ-6Nh5G5gRaJY9ggJQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676570,"updated":1575676570,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key56281625/bc60e72e3acd46869ef39561b4aca73a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"prh74mcO4-qq7TCJp7GHzWG-OeTs0vLA09frgl-LtJfxxXp-i8c7QPhFEW1z_aByQKaTCAe1KMgyh8kVo3krL7tLWCgAoe9g_Wtlv8ScIROZSjwiqxf_qwQBj7oh-WQMtQ4oSqP8stwsegbmeMK7LRXb6ZEdF01rvgDrwgG7pblZkTdAsOSNd_b0W_widjQDar1HSLT4i8_FbGjgd1VdlcDupQDZh294hvhrzUExLvgkYIPgEQmVhKd-ObrRPj9aiyOBojt4dsyBfYKNtRqUPgDCuUF0z7lcvpUYp5qzwegnqM8xb83jn-pEAij24P0OtoMfIXGD8vGfq4Rsr1e4Ow","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '678'
    +      content-length: '690'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:10 GMT
    +      date: Thu, 05 Mar 2020 23:16:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - s6ncrdwxrnsc5tpfgyollino.vault.azure.net
    -        - /keys/crypto-test-encrypt-key56281625/create
    -        - api-version=7.0
    -        - ''
    +    url: https://mmz26gv2edonlxfkngxl6p5j.vault.azure.net/keys/crypto-test-encrypt-key56281625/create?api-version=7.1-preview
     - request:
    -    body: '{"alg": "RSA-OAEP", "value": "VmC2OFGzwLPmotdoV0dEsGT8g11nJOD9qWW0Sw2nD6-QGAD1uu2GPo-26CwEReR49ovDrmp5iO1Wk9B9bbAcbffOxrGFXokRwGWpi-R6Witfr8-VKyi3rWpybrPXdfeWyLfGu6m8rJbS9Hb5-BHHMCmsu0VWGCG27Vb4H0GVcvaAmru8WDKQrotcdkbgQ9wxyJrm7ni_7JN3zJZI1sEvLnhsr-NDG4sYSQ5Sg8ISwEviNIfEV6mhI-E5wJ4b0vrIunlsRLhLwy5yS7SutTiiFaVy568f77SC6svUJ_p9R86zhy_dPJL6sJJC4C8ixwS50RwzTNezeXr4qlw22loSvA"}'
    +    body: '{"alg": "RSA-OAEP", "value": "YVQdS40UXdbeH6rYU6DzY-saZR_PM_iYcHth7c3EbkKMidtlu5TNWsVw7gZhzyeTWVaMCt-izVZW0EWGxfr_D9zOrAHOiZzgQgRfW2bhygUYtvHbdqD0XxupOY_BEDfyWSCH-aRRCqZdGftjzKXpufeawR2KWngoTR3Md5R9wzmVfPt3xPMs25-UXH0cldbdS0GwGTK_glpLKJI-TBrWpnaedYUwwLI86OWSippULWVnBGve-s9LuJqaf8n2Yx3-sqTK44GhZLwoMBj_VdnzXddlJz_ELe1LXgoy5kC8tw1CQbX5EevAehXMAMcpWQq5GHkgDjBN1t34QgmH00LRGw"}'
         headers:
           Accept:
           - application/json
    @@ -96,36 +82,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key56281625/3662a4531ec94723958cbed509a05b97/decrypt?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key56281625/bc60e72e3acd46869ef39561b4aca73a/decrypt?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key56281625/3662a4531ec94723958cbed509a05b97","value":"cGxhaW50ZXh0"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-encrypt-key56281625/bc60e72e3acd46869ef39561b4aca73a","value":"cGxhaW50ZXh0"}'
         headers:
           cache-control: no-cache
           content-length: '151'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:09 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - s6ncrdwxrnsc5tpfgyollino.vault.azure.net
    -        - /keys/crypto-test-encrypt-key56281625/3662a4531ec94723958cbed509a05b97/decrypt
    -        - api-version=7.0
    -        - ''
    +    url: https://mmz26gv2edonlxfkngxl6p5j.vault.azure.net/keys/crypto-test-encrypt-key56281625/bc60e72e3acd46869ef39561b4aca73a/decrypt?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto_async.test_sign_verify_async.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto_async.test_sign_verify_async.yaml
    index 4dcb196adbe4..961402b7d977 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto_async.test_sign_verify_async.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto_async.test_sign_verify_async.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:08 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qwjvbtq6py2djay2xpnz7zzb.vault.azure.net
    -        - /keys/crypto-test-wrapping-keyffd4146b/create
    -        - api-version=7.0
    -        - ''
    +    url: https://gjlst4yu4irkf4ntw64auh7t.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -54,38 +47,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/5007e4a084584c5f8c9f0b2076a43668","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"psHRqwDxMaKHGjKT7F4fs20RudSscLxxXc8NSGCOCXuEMBtcd6mByjkft1tpx9tzfJt9k1SxPEBsRnvjZgtLKrfRY-_qT5jrqrV-qwGegDoEZeVFu_uucGJRYU2o9LKdvZPwRw60-1k3f2AEQTcd_Wg8V1NX-6-1GD_MAhXwD4oYqyakwxa8Zkee2Abg5mrxnel2aUwMg_mp_vmEa7pS6Ahbqulwk3Z27UcKDt0THR6y16XASzw-bBgo49WdbZLw1E2UKHI_VQ5uDkuAERD_D8w3KJfmk9JFanj-6BILpmzHNFYhrfmO_9dxTJdgdvZssL-0WKJi5ZMy7-DguCJneQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676569,"updated":1575676569,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/ac8fdf4ca569438986e1a32e4a8bb461","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"jsM_A2L8fJA5BKZTeZVKYrQKKi4qdr5lT29oujHBVbfAiB3x9NRvLjQgNq1joOQr6sGz98SQqe1s-gB7b0_TVwoh1gdYkTQcOidiC2TK3mAMtBxSxDZNTvs02RVHIRWFRcq-mKezYl7fYy9MYoM-NlsH9P1L0K-eo9fVGQ_-yP-yhKtroTuhLIxyUaUzuLrzjbhjY3B1u4YIeDUwvlJYrhn9v867kY1UbgbuE8vODMK_BOrf-M93KYo4OFKkxBy-CNF3OyLe0VNn-AV0a3UWRjGx_jM9bDLupb29fhli5OWrcCh-lqMOHsxsI4mfc5rjlJ72eC1tQRkIYHShtZSO4w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '679'
    +      content-length: '691'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:09 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qwjvbtq6py2djay2xpnz7zzb.vault.azure.net
    -        - /keys/crypto-test-wrapping-keyffd4146b/create
    -        - api-version=7.0
    -        - ''
    +    url: https://gjlst4yu4irkf4ntw64auh7t.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/create?api-version=7.1-preview
     - request:
         body: '{"alg": "RS256", "value": "ltYuKr0-Qt5fUDMPuO_ExVmYNSeAd7IemqCzPB3wehw"}'
         headers:
    @@ -96,36 +82,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/5007e4a084584c5f8c9f0b2076a43668/sign?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/ac8fdf4ca569438986e1a32e4a8bb461/sign?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/5007e4a084584c5f8c9f0b2076a43668","value":"j1zIUHBfUtzJh4LEvhgTPuxhYS8ZuiNdQZWZZ8VDl-4B8wnLlIJwCrAABVrmwVP07q9qAYdQYIXmQ_R5dRkhjjm60SPlVPCswPbzg-ar1GoI2SY6JLc2Odz-kUBu-JZ2UhjqvEB6Ic4v3rFcBILoYXU8C64QpRSL_swxc_Hfq_ciIYNGQ2kMFCKZ9W3_Ak4Hz2TprpfIYPnE4xLEeZ1mHmAjsJOogh6xWsSXgVORTY02sw7V4IsglE5bUrI7S8pEJgIq6AfaUKUCQR8FMTcfXwbaBVwCAIreExUW0C2bJ2ABGdoGDVZu5pncMSukyC7LybVx-ica3C0S96oVCzKsgQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/ac8fdf4ca569438986e1a32e4a8bb461","value":"G9YCmaDFGSpG7OfBn1CdrywYn5vQV5BJfyGAKDKGFA3OLg1Xd-gEODF1s2sU4PBBcTGBptwW22ZCPy0SrXmOEhzfSH3KIMqckcVc8WTr_t5Q34DJk0h6gUBgF4jzNFbENqnwC7DqcmfVCPTc7ZPnn18DLWCQGsGZKd-M37_QGofi_pgSdcHtM_X2Al3BxKaxkRFtTDcpX6W5XBKu4ZRNJSUzK97u15LP2doxHrCdxiHV4-TWTP62YQtsWdu2jJPoy5atA-iKApviG1_I_PFTy_9Mk-ea0dUHvw2O8ZvT8qVhS7wuIzKzmqEeNwzVvU8vX8vY_wqwhD2bB3w-hQgOLQ"}'
         headers:
           cache-control: no-cache
           content-length: '482'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:08 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qwjvbtq6py2djay2xpnz7zzb.vault.azure.net
    -        - /keys/crypto-test-wrapping-keyffd4146b/5007e4a084584c5f8c9f0b2076a43668/sign
    -        - api-version=7.0
    -        - ''
    +    url: https://gjlst4yu4irkf4ntw64auh7t.vault.azure.net/keys/crypto-test-wrapping-keyffd4146b/ac8fdf4ca569438986e1a32e4a8bb461/sign?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto_async.test_wrap_unwrap_async.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto_async.test_wrap_unwrap_async.yaml
    index 85ad03d061bd..bb6432063ef5 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto_async.test_wrap_unwrap_async.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_examples_crypto_async.test_wrap_unwrap_async.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyec147c/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyec147c/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:06 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - i4tsovpgrxhfiuy5lju2e3tr.vault.azure.net
    -        - /keys/crypto-test-wrapping-keyec147c/create
    -        - api-version=7.0
    -        - ''
    +    url: https://aavjiuij6etrfzy7e45qffzr.vault.azure.net/keys/crypto-test-wrapping-keyec147c/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -54,40 +47,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyec147c/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyec147c/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyec147c/86cacd5294db4087a74571f92ac63f82","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"m4mtvWNNAK33UY9lAj82jv5wX_EPGY3aBT4GIQeYR33dCEssNY2fBIi9S4_6R5k4TWvhybOck3ev_rpj0aiiPpZgIfqK8dGR-B5SHUHZfB_snLi-US9a2njuTy8c5jQQ9ae9ip2o9-dnOFvf7grgcLF_Z-4oIJss13NeSOQIn_C7DyEKcNPeAYbv3uftqNM-VPMykorsD9bR5G2oGzyrCs2FK8agnKNMP3oZwDNRTw7BRnUQpQ37_JKwYspQfKRpEl_NX6Ary2qGy4j0u4W4bjupCOo65ebncrrTas6PvKvQPnNW_JANLTBk_-YNbhwLF9l6V5wpUzk6SPTMJjY-Aw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676567,"updated":1575676567,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyec147c/4b9a2381cbb14aeb95efaab3dccbfa55","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"u43qcuyJm9rMXU3EI9auloFyIfd4N7os_Rgs5EDZvLuD72sM29_wGK4mAT_8diRND1ImKBDZ6Y2He73EzZFusKom-FPm64PNoLfDaVMHex0g1ERf6QmAXg_Z-rZcCzmr4mDKNbZ06L1GTT8OQvZ5JA1yjF9hzLzvY3zl22mh2_GjdCUErcR9O8ce4Qgjd0FrVL2FeacyqL-cAMrLY5ga_Lb1JjdCBFltdFGFPActMrNkp1zc44mu1IRuNkQoUX6kxHRv6iwE2YccKyT78cplPoU93_EHbTHHaEpqwQFe47kXzJCyq2mdyrdjvePhr_Wmb2mIi1c-rcs2pe6LKc6tkw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '677'
    +      content-length: '689'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:07 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - i4tsovpgrxhfiuy5lju2e3tr.vault.azure.net
    -        - /keys/crypto-test-wrapping-keyec147c/create
    -        - api-version=7.0
    -        - ''
    +    url: https://aavjiuij6etrfzy7e45qffzr.vault.azure.net/keys/crypto-test-wrapping-keyec147c/create?api-version=7.1-preview
     - request:
    -    body: '{"alg": "RSA-OAEP", "value": "fA0F_ShnL8lxBlHTvuwThR2ofG94ATVSWpdujdRVOJqZAvgHsHrJ748Z1JwZqi1WKRcOdFuqdeC30qXOiAfX_vAsNxOg8BTaHkNmQVqCGd3TWUxBy36s9MS9nh4zskQUmIBjMgDPEdQ81UyzB_bP95n87pX8W_sTkl0IV9iBXEnwoF5W4pUwX6V3U0sIfX5TNxB-N1US2sA2n99LQJWagRIyNPWmYj1e1vyqKECXycqji3MEWgqTLjnV8VUkQOD1Clhv1uKuiVpVMwJO2tS705W8-znzcMvtErY-cQw0gD1e7PhvkpUuFbChjQ_TQrPlUbboZXT_j8Q1R02_r0umMQ"}'
    +    body: '{"alg": "RSA-OAEP", "value": "tn2sfBk98XkcZUNzBqW8CdfKN7NNCIhotd-KTyTjMF98dRbfNBMKpPm0skr7Mr_TWz62Oz0UsEUfLl7irES-aDtUx2_h3BsUeakd2id07YHSThVE2kakuSL8ZK-mezaz2b4LiOb6YzBIWE_VTdgeMFm422V0Wm6YU925shrElXCv1vEeqQzRy_uV5WCZb0AURfbt0V70epZY_2mTsCQDMY7YAmg1QvY4gpgE0EcbmZi8j9cCaJost18lvzCfyxIa8riBR_3lCg7ePSbQ1kKRNNR41vXZilSea51061Mx8GkJ8pciO-lcGFb-ieTDLu7BqQHayqjoIQpztiLVJYYbtA"}'
         headers:
           Accept:
           - application/json
    @@ -96,36 +82,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyec147c/86cacd5294db4087a74571f92ac63f82/unwrapkey?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyec147c/4b9a2381cbb14aeb95efaab3dccbfa55/unwrapkey?api-version=7.1-preview
       response:
         body:
    -      string: '{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyec147c/86cacd5294db4087a74571f92ac63f82","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
    +      string: '{"kid":"https://vaultname.vault.azure.net/keys/crypto-test-wrapping-keyec147c/4b9a2381cbb14aeb95efaab3dccbfa55","value":"NTA2M2U2YWFhODQ1ZjE1MDIwMDU0Nzk0NGZkMTk5Njc5Yzk4ZWQ2Zjk5ZGEwYTBiMmRhZmVhZjFmNDY4NDQ5NmZkNTMyYzFjMjI5OTY4Y2I5ZGVlNDQ5NTdmY2VmN2NjZWY1OWNlZGEwYjM2MmU1NmJjZDc4ZmQzZmFlZTU3ODFjNjIzYzBiYjIyYjM1YmVhYmRlMDY2NGZkMzBlMGU4MjRhYmEzZGQxYjBhZmZmYzRhM2Q5NTVlZGUyMGNmNmE4NTRkNTJjZmQ"}'
         headers:
           cache-control: no-cache
           content-length: '405'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:06 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - i4tsovpgrxhfiuy5lju2e3tr.vault.azure.net
    -        - /keys/crypto-test-wrapping-keyec147c/86cacd5294db4087a74571f92ac63f82/unwrapkey
    -        - api-version=7.0
    -        - ''
    +    url: https://aavjiuij6etrfzy7e45qffzr.vault.azure.net/keys/crypto-test-wrapping-keyec147c/4b9a2381cbb14aeb95efaab3dccbfa55/unwrapkey?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_backup_restore.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_backup_restore.yaml
    index 47aacb4f4dcc..2d9e37388ea4 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_backup_restore.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_backup_restore.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keybak2e80e6d/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keybak2e80e6d/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:09 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,12 +69,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keybak2e80e6d/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keybak2e80e6d/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keybak2e80e6d/7dc833bdbd234a21a60b4adcc4d5b904","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"2X9Uatod3UvEmsXFPcS-20Ji1Nr4TStz4Fe4mdSLHb2Bt4UoiHajXbfpPtwJFKr0IwbaL-5KsIsUh93wLXBkjnIk82pVhw65n7G0iO2vm_x-8sjWUYjBxZq3aeDA26BvxxdMJJSVgSwhD47L8UYoDQZ10-6mGUg2cn8wpyE6KpZRV7Xt3r-P6l3FyQosJer20wdCmqDaKUW9pMfTbwtO_nB9RhE0Zoszibw7_ksoq8HaN3xYGqBU6bsDWwXC5KqF3Xm-sLmbA-Jry9VJq-4SzgWa7jx8xvNYR0sjqtCfAZmt-bQGRuCYoKF9yt8sqOLev7bo0iZjt2Iz1y_lwhEb8w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676571,"updated":1575676571,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keybak2e80e6d/e82503072c544779bf15f512ae45afbf","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lfY9uQi-W9cPgsQMtCjbH-58QbzcCJmHDhVV1ln6bHOF4Zsr7M6tbxTskUrDL_4Mj6GzA9uFC-7evZTqbVJddgz8_7Kc1m49ez8XQ949ZgYRMktcx0CgOFch1hICtip8ELtzvKE-Wy8xFAY3-m9TtdLZTlXvXFieP9SUhbYDmdojbc8JtiTOU1a6eg0gPxXA8FV8JGGVmhv_2SP8vuTWNTHPp1WDJcLS6pR09FFBIkNkaiQlkxS02G8npJIytTSZW-wSOvBk5AW8YftnyJaDZHHck3e0VAgkS7TdK_ifOZyKiq28Vom_Qn99lR0c3DqKxLZgjTa8G3a2wohwHa4Yhw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -83,7 +83,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:10 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -119,12 +119,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keybak2e80e6d/backup?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keybak2e80e6d/backup?api-version=7.1-preview
       response:
         body:
    -      string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLkZFb2NDd21qRnh5QlFsX0ZZNlY0d1hpaTZhTW1CZGdHUUE4VVc1cTdNSjJNd3lMaG5LaUVnNTlDOXc4eUZEaGZMRjdWN3BHcXlzNXUzX1E0SVBxRjgxTjg3c1V4UHJGNFdtWDRHU0J1LW9mYnF3d0JXdkg3ZjAtb1FYLXJ2ZW9NaWE5RDZ5S3Y0ZGllMk9pLVlfUF81dHNJOWQ1MFc3YlhmMG5sNmNJXzZFaHJRVl9KVmNkRW9UdVMzbl8zTFZQVzlmRk9EQmFpZkQza0ViYjBZVEtjLWV1S3JHRl8ycXJLTzVVLU4xVW43bXJDNW5LclQ2d2d0dl9nZ19QX2RCOWwxcTl0RW5ka3lJRkNXTUhxZGJwUGg5dFJPY0lTTkhYTFEtX0dsZ3NpWUp3WWloRXEwS093OUVlbG5JYTlOc1I0RFRnN1VQR3U5N09aSkJreHRoVlJCdy5QSmF3ZFc1bHpEd04tNDZMcEo2Sm1BLmQwNE15UFdCWDMtMUJhLUdhdWF4d2wzblltWk85UXE3VFJSaUlfMm5qM0FYaDAxUFdjazNBMi1pNkRaTnNBa25Gdlo0SUhSV1hxVkptSU4wTnh1YmpIUnlsa1Ftam1BcjlyblRqZ3IyMkVPS1N1dzY3VmFmWWpES1VacGZLbDZFRlRwNmRFYXlaSnVrZWVBd2pvUUxQSTRiWXhRX01VekRaMGc1aldrdFJnUm0xYmVNS0xrUHVnamVEVVQ3VzNlaVdLZW9Jdm5lbF82RVMxcmxmbDZORFdjaUVlb00xdFVPdkpNZU9kMVRkLWFtUzFNWHNoaThiSzFFR0ZBVHFfaWpKd3U0VGh6UEZwUko3Q1VXdGl1TDRDbWVSUF9yMklUa0Q5eGE2V1RpOFNpVEVnWV9DOHVRSml3NVE3VUZxQVkwSWhQUndLYkRtTnU0QjE0emVEUlJ1a0stWGNTMXBMb09Jbnl4MlRZSEhucEZDUFRhWmZEaEJueEs5WGlic2tKNU82RWsxX3ZXRi16Zy1yYS00Tl9LSDZhMlJURm9JaklSOEl0Ml90RFk2MVR1WXlxbWhqaG9ZZlNob1VVVGFqVlZxbl9fTDIyS0JkT19NNWRKU3lwVWlDdS1DUFoxRGxDRGxJRGZpNWpwUFhSd2dKamRXdldpbW4ybDFqdTA3SzEtZnQ2QWJ1R2oxUXozWTR3aVlqcGtUOFdtdWsxSGNQRXh3VGJlWEEwX2V0cmhWNF93MXd5bm4yLTl2ZkI0SnNnS19ZMzNEclhQTGRSWGkzS3ozTFB5MTZMVlF5TXlaZkRiM2lPNjJpMXNLU0VwQlJKc09IQV9xaVZHQXpBWHJ2ME1CWEI3bG1xY3VENnBUSkpTa2ZmTDdUYzRPdDB3YXR0d296dFBEZzFMZTl4elYzWWtlaFE3dUs1aGU0VEFBRmtCdjdzRE9oaVVYN3Zsb0lUUWZOZ0t0LWdRLTk0YzBtM3dwTnN1a1NsYTY2S0VIaE1WMmUxNmliZUNTMXhnZ0VXZWFWMndzY05KZEdxZWlyeU9udGsxQXJBdnZMa09teXZla0taOUw5UG8xMGUtVjNOMVFPUFRuVkswM0lHNDNqeldxRXl6YkpqaFBTOGZJLVFlNmZIaWR5QXB5Q1d1b0ZkTlZINmZmVEhFcGNlNWRrQXhXZE44LTRvVVRwbUVtUnN3ekVDSHYwems5T1NKRUYySzhITmRnMDE1VzlrclFhQWdSUDdJZnJlQi1uNHRQZjBBbzczOXI3RDY2VmtITGM5TEstSEUxbDZPLVU3UDZEZEdVYTY1V2U5cnZCUi1lLVpMWmluakxrN0FOTDNydkVvMUh6Y3AyVEdhVk9GZWxDSWJobW1BQmxaT1pqTzhUZVZGdUhCREFYbjllSmJBY0FQUm9wVmFrdDh1SlY1Snh2UEJhMXBKaS1OZ2l5YjRlN1Y2N003U0ctY0F2R2tId3lTczloanVialFUcnJwRnZ4blRKdWtTOWZtRFhSTGo0NHZ2NjZrQjNWMktWeC1SZFF3OGRUVlByOXJwOFVQS091WmR1MHZNbHI2VUdtam52WS15MTlxdGdzRm5DQ244dDFKVFdSeUtnS1A3MWhJU191di01VUxORFE2czlZOHlYQno5WGI5T180QVVvLWRsM0RkcmhUWG9fcWRDNTU1YTdEc08tS1EzcldWTkJkU3ZKRU5YQWxqa1ZUaGZHTHFwR3RrRWZZQkRMZW40VkVCaWVCNTNwLWs0Q2lmYUZIRFlsTVpKeDBuRE03RDhfZ3hmYXJqMi14aEREWUV1Ry14S0RGQm9PcGhSVFZRSjRlNWU0X2lHQ0ZMbmJrcEhjVEt0bkp3TU5MSzM0Qk1vVzFYQmczUkU0Zi1CSDhKUDE4VkNTQUNIOHNwWjM0ajZiV0lZZHB2bzJlT245RDFGZU5JWUxJTkMwTS1WXzRZNjNOd2Nha0VLd0pkY3NNVmZPOEpvMS1WY18wby1iRk45Y2U2M1lhYXpSTGh1TFk2MUl6VVo5NFhJX2RIclJiY2RMU1JDdGJaZVB5ODFGMjRZeWNNd1h4Nlh2Q0Q3bVVIOFhDZXhRR3pTbVhnMEdmZVR2T19MYUlLYXlUZ1paRVNuZzdtVDJhZDIwRHlNTkV3a096a0hTck1oclI1ZmxZVUF4eUh2NVQzcEpROEZJcnNjcnlpQS1ITDFuTXRWYzl5aHVuTlgyTTBfOFA0c19yRkdGOW81R0xYVmxiem5rSDNCWDZoTnc5dWdDUjF3VldfUUpzaTJuMTRLaXpCOGwxeFRmbUllSTFaeXd0QWNEdzhsWVU5cFdXaDZJcU4zYUliVFRiVkk0eWJ5ZFVwYzVUR0doZE9tNElWZ1FCblkyMjdicU5yQzl2N3I1M2FPT3BUYWZhQ1VCNlpjeWFvV3V1dmJ6elpLcG1pY1pFel9TV1F6QUJFbkluNGVlMzh0NHRjQy1nTnJQQll5emJScU9lMWx5SHRNQ1pUczIwN1pQdFlDVDRSWmk4T2tWVEEtUlFpVUJBeV9WMkVycXZlTUc1Y2JMbnhwbG1LYWg4N3VkUTJxa1BJVEVRY3ZRVjlMbzIxaGdrTEtDcVRKMEV4RWJGWmN1XzdWVWFfYXlSekJId2xUN3ZWSDJHZkVoTk1vQ3I5Z1NyZVBjQzJhdUVoTUZqZlBiWXR2bDdFQlhlc1FGb2ppYU9jYW9KMUNmRWk2b0FjVUVOdHlvVFpuWUh6VGNvQ1d2VEtES3QxV0VVSDZsTGJDMno2UXdTaEl4RW16Z1ZJQkluS0VVSXFMcVFNSzEtRlctZFoxeTYtM3R1Qmo2NzluRUdUbnNabHZPdm9LcU1HUzNBQmYzbU4zVXNlVlAwdzhkeDBwRzhsak1xTHRheXhvV2NfYnFYaWRrUUpDOVZUUm9RMnN4WllGOFRaU2xQSXR6UExILTZyNzRjelJfbDR1d1NOV01hcldfYmpueHNFejBzb2tka21wXzZMcHdqZjBCRlZ4YnR0eWtuTENsOXBvUFg3MUlVdWJ2VnFrV3NrMHd5ZmVvTFFPWUJKS3FZLVp4Tnl2ckNDR0NIQkY2blpWQnllVmtPaXFkLXlVYm85Ml93Q01LamY5T2tKUk5NakMzeXVIUmV0cW52N1FLcnZsN0xoTUZtZVFIQXFqMWwzelp4UVdEbUN3RHAtNlQxR2U2RlNzQXc3MldCNGQ3Q2k1TnlvczY1ODI2YkhrZk9mcV9WeUdXUDZPVEx6TW5OUGdmbEU1bkZ2YVVNaHlPZ0MwWHlEdHQ0Mk8xOURHMXpucThMTDJBdDdHWGhsb0drSVZDZnY5YUhzcWc5eUVLd19Dd1EtdGxJVWlrM01pQ1phSW80cW9keUllRHBpWnV0Ym15RnhKSlo4NC1CQUs5emFEaGJfUkp4LVJGZkthQUNnVHhlYW5FSXVONEZvTkl3T19kTVdNWTBwOWdhVTFMMklnVlZZVXJPTjhmZ01HNXBrdkhwUU9kOGtPd216QzVoOXdNU2k0MXBaVF9wV0hhSmpjUGlIWGJVdHpUWXpNS1RSWVNacEtjcWVDbGJlSlFQajZQUXJMZEJvR09KRUlON3pfbDJsbTFDQUNySkE4Z1VmeEZoZGU2c2hybUYwZFFiR3dvdVR4MEFuTkpPeHp6SFYzYVhkUnB2Rm11ZFFYOWNkd29ROU4waDVlOXhiSGNva0FuOGF1eFZnSFUxbUFVRjNLZ09ua3lDdGQ4QkNBYS15d2NaNDVwanRwVmY1TmhBVkFTaFF0VE90Vy13RXkxOUNrNDVSblA2a25ueFJEY2MtVHdXTndBNTVPLTZHLWU1dnZMb0xfdTUzMFo3ZmEwVzY3Qk96M3g2MVVmcVdHOEpmWUtyT24yemVqNFhVcFJKSzV1M253ZzJkQ3dGUjQtWDdrTXN2Zkx0VFZyMWtRSDZIM3plVzNLbmVIei1lSlA2U3l4dTVTQW1mX3Z2MjEtTC14Q2NUTjJZMHgwOGlaLXd1SHFEYjdvdmZaZjdDalR5QU5WZTBadU5vOXE3X0I3UFhyRTAxWU1sRjBXR0ZHX0ctVzNKMk9hMENfX3BSa2U2d3NpaUg3eTZyUC0wZXBFVDUzM3NkZUtwSUJ0VFlrTDI4X2d4UnJYc000ckJuOXJuUk5YTktZY2dPMVRvZFJ3YjlLWUhUTXExWS1FWDVYZzc0LU9qU0VNWHRBcGtETWFCYnRIcl9kY3J5VVBNTExtcGl5bDFvUkE3VnQ0enk4NEVDMldIQzFvZnhQUVRCU1lmYWFfRUNfMHdReV9ncXppVUNLdDFLMllGc0IySk9sWGY1Y0NMZHZoT3FMakNtcFVZaEhVN2dKcVhqbF8xeElIMUc3TUExOWlURmt4eU1VN0t3azAxLW5vQnpock9NS0o1WG5KMXREdXhpMWx3dGlYUnFoRGxTZTl4VEdULV8tWW9la2ZkcXlweTk0UXNRMGYyMzRPSm55WXYwNEphN3lWUFdZck1EQVh3MlU1cVQzcjZRd29raFh3b3VnLUwyVDJjVEJ2REZjODIxYWd2ME5HN1R3dnpaX1d2SVJwdW1KYml6elpXLU5zc3Q1a3FKT1hraVcxZHRnUXNkSVZKNVQxOFBvTldfLWNMazFESGllUFVuNkRZTWhmejdlZ2FtRmZWMkhRY3ZYSGs5eVlHekJtMjdGYnRwUmxkU0xVZG14aklfNjVJLUw2ZUM0dHdtNkU2TlhJZUMwczdlS3FlVTlNekdoNWJkY2Rmbk9FSHlMS1k4TEdvS0RkZnpJQThqdkRWUkpqVmF2anI5UHhrQ0FNWXdtcktxYlRXTGlkNFpOdTZ0REFhN2FxeVNsc1ZBSk02Z3AzdkxpUDJHektfV0F3QUxkVkxTeHBMb2FHQy0wekZ0blNpc1ZvUFNqb2hPcnZtc2dRMXhGSmJwYzEtLU1IN0NzYkFxRWNKSEhicVMtY1F0eC15SGVYcEhodnJwUlRmcGpwSHFYckd0ck4yRmVFT3Fjd0JYanFhLWRpaF94dHFBSGhHNHVWTzNjdkpmdGVTZEVlNmVtaVhWa2lsNGhSVmtEV2c1b3pGQjZ5Z1JFZGRfRXNVZXhyQkRSNExIRlhWUXoxZ284QURJbXY2Unp2dU9PeHUteUU0a18yYjlDeVBTcm1Qd1l0aDRaa1g1NXlCR3JFZFNoVGgxWUVhSXBxVXFuVlItUTlldlZ6dU5uc1hQR29ibTVPNWl6M3Qzd2RPVURkbl9LcHpfMGhPS3FpYzVHZDlWbzdVRFVENGh5ZlUxN0poazdOVXdkMmVGNEc4ZFk3NW9qRGFmTEozWGJuMkpGTFFZejlQb2dzSXkzb09aM2l3MFpQZUZmcmExOF92TGdzcC1SNERnd0xJZGdsNG1GNVk5SmhJTTFtb2JIeDhZeXk5d1FERkNhRkZxYkFMSEdRNWlmZU80S1FCS29lbTFnYzhrSjdxVG1wWEp3WTRUSUJLMVF4SFJIRnJyVTVIU0dMMFVqem1nZEN4YU9tRGhXdUwxaFduOFBVYlpUOXB1dDVkVXRqQkhPalo5ejVfLTgwaDNSYVE0dDZla2g2b3d2MXM4dDlFU0hMQ1JGb21yZXZtSHZCM3oyUXNjLWVLR2t4dXhoNDB3Y0hYeHpwclFTYjhNcC1QaTV5LThkZDEtYW1mSVRaYmhDZWhwNllSVnBWNnhseUtoYVFjNTNVRW9Wa2lpbGxZcWRvMVFiWTU1eGw0NzA1bHo0cTFRWnZ5Ukw5azZITmxNYUZyU1ZJZlBSNjFaVTRaY2NlbWVSZG02cHVhdTluSldBbFM4ZXBQZVJySE1XaTNiQWZXaWRZNkx4ZGFwSmF3WjJDU09ITXZTZllINFMtU25HX25Cdm9RYjFaOGVBRjE2TVdLZjFTdnl0Y0ZwTWxadDVFWWRXNzFEVDBjQzUycHN1XzJyUUdpNHlvb2VFTEZwbkFRdWpfY3lvU18wZ29USk8wbEVFSElHZHRnZ1dLazltN2d1ZF9tYzN0a1ZqTGotZWhoU2VJNUhOb1FUQWdUNzh6aFIyNXZUQ1RSMVNiQ0J2NG9MVFdYTW1EUWFOWTc4ckU0NVZtQU5jcDFSb2VpXzRhbURCaU1tU1hGT3ZtZzRMSnhvV2UwNnVXc1NNS2NoOXN0R05UR01tc3VsNWdrUUNHek45N1ptcnJkRndaYXZUbGNfN08xSkV0bnhMcWRvTUdkNWJrYlRXQkdyZVJwUW94STB3NnVrczZ4d25IdjR0VWttY3BsTHhYREltTHdiWm5xWUpkbWd6MjRiU000eTdMcEZIemNGR1YtcVlHNmlIWjZHMVozdngtVmFyaEJnUV9yOTlpbGJQaWs5UjNTRDFHRU9pSVJqNDltNnZzb2NyemJiRnhHQ0ttN3NHR3FUa0wtU25fRUxJRHdtc2ZldmNCRUFpYTBieUpNRzZXbFBYLWhmd1dCbWd6S0RsVDd5QlgwNVYtN045ZFVYX01qbC1FRnNFVm90NzRobHBfUXp1Wng1UEVpdmR4M1pydTFqWF9ha295dmxEQVFDUWFjTUJzNERBV0lHYmViSWJQSTZFMllRZHQ0ZGNrbWIybngwcGhJdlhxV2d4T1lXYkhrVXV6UkVCSW1LUEVQRFdnYXFiTmpqMEVScVJMUDZ3SFRxRnhjS2ZvZi13NHBmUFE4TmJRdmdtMG9yQTFoQzR3Wml4QUhHbm9RQjZVU1RLazJDdVNxSTFyR0VGbFM3QTRNWlJpSG0ybFVCZlZpeWhhcHVNQ3lOM2ZUWlFFUGdHSGtfWklfelc1SDdsNTVWZl9UaW5QeGJnSDJvRHRiUnp6YWlwajhZWGZZNVRDN1liN1lJam1SbXdlWTlaTzhFZVlWY0NxeWRUUVVZT1YtMWxBMWh2RnhqRWFyMGh1ZnA1MEdUTGRvZ1JUUHFJeHYzbV8tRFl3T3YxM3I2R0M4NFUtZFNRSlQ0T3NQaml0TjJRVW12YXk4TEQ0czEwZFg3N3pQcmtRUFVDYV9maUwyZjYzMUNkeWhoVVgzVUtpX3h2M1Vya29sMzVZOVJFaDF1LVN4YTdyOXdPSnlzNURNUkpUeXBjaXVTT3BoMmk3cU42WG0xVXlPZ0J6MUFWemVhcXlyZmZDeHVJQ0Q5NWdXNnQ5bTFaZUxTYi0zS01IdDluTzgzT3cwN2tMV0hpcTg0SWh6QWxNTHZrUVBrMWNJNGpGUFYzZVRnT1FIN1REM2V0N3Z6VVRqYjBMamYtYlNXazN4ZzdKZFhmVG85by1KTkVWMzgzVW9mbXZ4RXk1QzVoRWUwdHZIbzJsZmhNNjlIaFViSnBRWWdYTXUzeFJiQTVjSjFnek9kUmlidUozOURGZnZnWXk0WjBQZ21halBoU2tvTTNPWWhlYWVHbWZxbEJvOFJqWkh6NDlBUzd6a3FqM2lOQW4wVV85TjhtS2NlOHpvdHZEQnAyc0xsa2xjV3VoU3BVZ1UwRHhvSGFhN3BOR0RpMGt5RFNRWjlnemU0YjRWRlpzZXRLUnZPazRvSElzTWFnQUFuY0xINGpvaHNfUUpjdHRWdC1IN0hRUFJtc1ZfTVRCalVzQlJQUm5kSDF4TVRNRVFTNXE5dktYbklWZmlULXpsLTVtbVVQcDFQdms2UEZ5T1hyQVhCV2lwOGVlREVOUGFYaWJ1c1V0NFpTY0d6NU02ODE2eFFSUkQyRFlZRVdyX2RFRl9vQmREa2JfN1Rxc2s4eFdkdEFXY0JUdHNFUXkxZXN0cUtqWXZOVDRqWTNyendrdXFTdFQxM3B4ZTNsZGQ2eEs2SGgtbVAyaE02X1BYX0xGcjdjQVI3MVl4OVMxTFJ3TTd2ckdlcnVqbkpPQlhzR01uNm9Sd3UtYm1KUDZLdG9TdnJUOTlyVHJTbTdzZnlLTWRsQU01Vi1mMWlTZl9VRXE0a3hSVVQ4V2cxNlVaYXV0Y0pmVzJUN1cwOERWMFVJemk0NUZOVXlqdG42c1VOVnVDRkNhMFZKalhrNXZwODhhbi1OMnVjZnRwQVR5M2paWUlCNVBFdEptQ2J1Ml9OYjhVZXZuTGJmUnZDWE5XOFpCTGdYYzI1Z2N6MnpGUDAzU0h4LUtTTnczN204MnpqM0JERjdZdzYzZ2VTN2MwSHZhRWo5dEtVNE1TYkVNZkkxRnExLURQcE1xRGpXZkMyeWdNdkpOS3lJUzZfQlVwbG5UV0h2NjhWc2xIeHRTTEZCdno5WkVqeDhoS0xLdms2RGQzWXlkS2RZdm9GbEpjX1NFZndvbnZ4RUFGWmo1alU1WUhqRDNNRThVQWdVclg0cU1aeFVjNTZaYXF1NUl6T3lXVElwSmtfdUpfVjBTSldKOUxNOEo1d1lBVzU5VjlXZEFKczJnMFlxekhMWmI4ejlEY3FoZ3BsVlFFbXV5R1B0NWVNdk0yT0s3SmU1ZUc1Zlp0SUNZRjlJSWg5d0szVER2UElhMlplQTNraGtQNUx6UzRGVE9XRFc5bVJ6V2FlaWx0SXR1QS1vaERmQ3pfVUpYaHN6cWg1cnkxRTg2dTRKamZzNG5ub1o1Vnhya1pVNHhJaVNvY2NFNDItNXh2MEpVcjZ3M2NvNVhHTXlaQ1Bzazd5YnVQQnk2X1dZZ0dENnRrRjlnU2VqSGI5ZmdyUmhNemk1MzFJN3Qzck5uWUZjVmJPVTRmQnhJZkctVHBaQURsRnJwY2gyT29zSXZoUVE0bHlxMEpxT1A2R2pDRWNMVnhHNlpFT0hxNml4UTBBY2tBYkRWd1c5Wkt4bTZVZlhVcWFaVWZ3Q21pdFNTWEZkdEd1VU4zckpBcmloamlEcVpDYzRNUkp3VFFjVkFNWVdaLTg2X0hibmZEYVU5UmpLemRqcFFoVGhUT2xKdlJTcEp3ZGd5LW5xbjRDQUpfeTdIYkxEZk5fVE9QN0FVSlpfMUdnOHBYNmVOeURSeEwwY2I0M0ZrdEVwRTJlYlpaaGdFaFM2X1l0Q2xVMTBiS0lDbVNJc3I5TTcxcGFQQkxxM1VtTHpyZ2l6a19tY0hBSG96OG9NeWsyVkhNQ3IyM0hySGVFd3NXNU9aajAxX0NuT2pXbVJnQ2FHdzM1MEZyVnYteUY3SWJSUXpwR3BkSEIyT0JVOVlCOHRET2JuRFpkS0tidFJhZXpMd21Fc296bER5TDdBOEtvNjdjNWE3eDAwNEV3ZlVyaVYxRG1mV0hMWDl0bFVUdEt2T0w2U0dteENXYXdWUFNVUzdTdmFQRWhzLVBKRWd1M0ZWWnVES1JDdFN3YXNGTG9IY180eDk3X3BnMElZZXJ3eWhGQmhkSkRQNWF0WDBNM3g0bHVaN1BMNHk3aGxhV3JHUVNIU0h6MkNRS1A4amxxby14czJMOWFDaGtpcEtNSVk3cTNoVjR5MGh0M3RySjBBUUVKdGtYUi1oN0hGTGNzMm0taTNVZ0NBblpIcTNfQTdjYUpGNVF0emFadDNxbmdQbm1PX09EU21mY3YyUUlsN0FtSEZzcGxoRUFhZEFLOV9qSmhwVC03TXBCR2NLTVVOUFVTVUNiaUZEc3ZJZElGTnh4N0tHVjR1b0c0aUR0OWV3SEJFaWFhbHBFSi0xVkU3WGpZT29vVlpleHJPTXI4cWJ6eG0tZFFyMTZHbG5sZEpWUkFBd2E5SHF6MUdwOWZfT3RuYlhVU21ucW9iZGZ4T1NCYTVwRzhMR1AwMkw0a2ktSnBFNExzV1NPN2t1OVR5TTlVV3ZFQXhBZnFNSGlMS3FRcnp2OXpWdEg5Q29TcnFzcVllRlFYam9jekd0U1hKeDdRWmxGSjdjRGNNYTZYaEFBdFZfS3o2c3ByM0s3MmZIV3JGdDhRZkZfVzJhSUtlbEE4cGZqLTVBRFBOZ2JhT0NXam9ERmhYUTlPOEthME54QWN0VEJyaHU4VENaSHFsNXlYeTM1YVNPajNOa3AyZnMzZV94bkZyNUNBcU9xUk95WEppc3Jib1dsUFJfUEJRelJ4WC5QdTJpOGl5SUJ1b1ZwTkR1WklLWS1n"}'
    +      string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLk9FeTBUbnFYS195ckNaMm9vWVVrcDJpajRtX1lfVDdwUGd1cEZ5TGVwUzlBM1Z1dXlmWW9aYXVKbXp0MC1IQWh2NVZLUDlaS05KU1VIWHd6UFB3VXlUVTA3eUVJZVl6emFncEhOenVLaEdxQlhBVFBNcC1aYzRvZTQyQkJUVDJscnhObGRST3Y0cDdvR2pnZU9uNFl0M0ZWYmE1TS1PTWVhNE5BR2stVnE3eUc5bjNzMmpJM1dPcFY2U1FIVk9XTXVfMlowdTBvSHhsd1NWMUNGcTROTVFwOVFaN3RPNlU4ZVdEbUVsOVRIUWtwS2tfejlpZGNXcHVqZzdKMlp1WTA5UG5MdkU0UlphUFZuVXlwOU80UVVhUzRGZHU3b1BZRXQ3QkdLcDcyRjNRcDhWd1ZrYzRoWUdqT1ExWGVsSEhvNUZuS2ZMRGpuM1FBNVVuV19EMkItQS5GZUhaN09CMDZlRDl0WW9fWW5FOGh3LkI3YWplV1Y2bVE5T3R5RVV4QVpJNVM4QkVnLXM1QmIzYnh1NUlrLWlCMkpuR0t6RlJ6TnNqUlRIcFpQV3hBZFFRY1pnbk5CQTBkdVZQclM3ZHF5UHE4cWhhelpFNVpYLWNwQTJoQkg2Z196cnFPd2FGRGxQcEt1Tm9rUEM5THNFdHd3aUVBd3JyZE1aMFdGNG9pSUl6VExiNXY0WDdNZDdwWGRfOEtkMnd2ZDBLMlFBV3JKZ1JpQTdEeUUyZUNGMGF6LVByQjVrc1AxWlh1VHBqQlRTUzhuQ1N6eENJa2ZHUjFyUkp0dnZTZmVPNkVtTVNmYkVLQURDdktqLU1tZjdXUS1XMTVtMXoxLVZRQkZJLV9JT285THZHVWs2bDJ5X2lVTmFIajNyU08yN0tUNW93a19nV1J5U3ZzZzgxUG9CeXRvRmJnSGdjVEtEa2pPMGRKcXlxMmthQTRhTUVTVGlrRXJEc0VmUjViR3VzQ09iMC12c0VSRmluM1ZuYTdrV25sa2x0cURmejBmTjFUZ2UtNXltMXVUU1p1VHk0YjRfeWZLZC02R1dEb0ZFekNsaFhvXzQ5ZTlHeVZqUlI0Y2xoMDcxTkxucDJxYUNwdWlrZHBTMjFRVkx2Z25FZmhCSlg0NW54dEtwN2k0aFgtNUZ3d2ZPdElCUGV2U3FieVk1RTZwQ0Q4S1lyd2N0ZzFNcElEb2c3dXpiLVNCZUJPNHRUV3UwUHA0c1VmZFlvb25yQnA0VEI5b01YTFUxSkxnME1tWlRTRHJTRzRFand2UF9tMUhpWXdneW42VFdSZ082UGd0SnJobmE4RVBTcXhfZHdjYjdGdDVnTkl2R0ZsaG81bllFcDF0RERsYUhBUmtJTFdtdUttUXhKdDhadFBFbWxpdC1vMGIyc3NCTTdHNzdUTGM5WlhTOFhHbVk5WGxHRUM4eFp0V2F1eHh0a0ZvR2RSMm1lRnl0YzBscU1STnJpWEhJZm8wdFFacmRJeGFNZG5rUHQyWkg5YXZNMTEwYURBMzBJckREemJqTHUwQlF3aWwzYWhmMVVmeXlheHZUWkluTmlwTjVhX3NUNGozUy02RzkxTGswNVk3U0hqaHZfVUNTcWdpaEJpVndoMzZONFJITkEwbGczU0RsOWZWNmk5VkRWdVlKbzliMUJRRnRSak5QbUk4dFUyYTBTTm5jSngyY2VONWEzci1jUklJVl8yMG80Y2dZVTBvd2ZGcjBzb2hKR3pIZHZsbmtLc054LWpZcy1tZ3pmT1h4VEM0a3JKV3llV3l3U3ZhZVZTbURsOHZDUDFNbWJRczlxVVhoamtvQjdNYjNMcVFQZFBza0s0ek1HMFBOOHpPM25mWlk4b0ZvMFRuV1V0TVMxUHZlaS1Qbmd5aFdxMDhRZ2dsMWd5cEVSOUpYelExZm9OaHlpN1RpNEtxNlNvQmlSdlBUVWhleFlLVmhWejNjel9rbkZqcmlaTld5dlpXbWFLNHVxc3BXRzA3NnNDcHJNSkVLVU5CWWtVa1FMejB2emJrRzFYdjJqZkdPQmFNRUFnakdSSUhac3psVVAxV3BLTlVmRElyNDZDZ1docUJDZ0hLQVl2c3c0OFZRbUJaS0tXLWFXYzBaSjFaXzFtTGNUYkpxclFrN2Y3a01ua05kX2pGU18zNHNtZ3k0WXdPLUtlNkZrbDVoU2ZSa21CTFpGUldUYjBpVlNYX1VLUzlLVFM5VEpEQXdhV1hKWEtXdVlkcUFDclNxOFA2S2xqenowZ0hoZDdoOVlicko4Z2Q2QVo2LUxqeW9SazNIeUw3SkhBM19zMndXRE5Rcmo4N3J6eVFETDcybVk3NkZRM2pRbEhMWURXeG5oSVluRVBjOTJRRTNCLWJvOTJpYmQwY0FqNU5vOGhDeWhDOWtPN1lXcTRjMGxEQUFUVTVtOHhBdjFBSlpYYzFVLU12Mk1WUUwzR3BrSmVoUVRFNHZKUUxFYTVWNDlxcTVuMHNFN1dlZFpMNldQZXJPMVlpLVlUeklnVXlOT0Rsb05ZbWNKOEwwUzZjYlhXNW5naXlzaEpCcG42Y1RWTHVYdXVFWlRVa3Q0LURJRE0wNTFtNmMxT3RWNW1nODdSVXA0TzdSZWJvXzhieTFaYVFHZkZpS2VGLVJ4YjZ6X3Y4QUY1Mzc5UmgzTllUQldiMWY1LV9hM2ZuQ0ZlUmF6U1BIaEswUEE1eEZrYUc0MTRXNmVaU1JyQ0JkWEc5S0R0aVJndVlqZ01Ic1dGNVdjUjdnU2thQlZ2MV9yY2poaDZxRTlIZzBQeFR6VHpEVnU0eVliTnViSTlVT1lmMjNmTUZlRU5ERGdITVFCdWxIb3RXOFA5THJOcDhIMUFTaDZrTndpNVZjZmdfMlJiYloxR2pnV1c5R0tLczA4dTdUeEVpZm5MS3lMLWNsUVk5cWphMXhyMjJmaFozdkI0RDhDdDlBMnlLaEwxUUI4d1dOcF9KTW9CSW93bjB1Z2R2X0NJRkNzUnROQ1NxejRUcmg0VFo5WU9UdGFmZWdjS0U1M1luVVBBb3ZxTGNabmlyOTl3dERjVkpqSEJFV3BBa25NaVhOVnJxTlpaRlNCaHpMdFN6Qk0xNHFEbnFNREprTEQ4cjFHYVdYaXdmS3ZKWF82UzgzU0xha29fZFl2eWlKZjJISkRYWUZlVjRHc25rRTQxNHBjNDBFdjRBOXBwODNkcF9XQ1A4Y3RJR0c3bTJqWDFFNHc3SnJfZWhXMzlNOUlvb0FrU1preXBydjYtbG1aenNOc1JmS09LYU1ZSGlPMlNjb1JfQ0NSUzBabFExcmNYcjVGYmhsNUFyUk5TeUNTX0ZYUGk3VFlXQkUtWTFQSWd1aWItUGVUMmRzTFd5OHJUX2MtT3I4dEtocG9TVENncjlMZXg5SEVFdExTUEJmOVdaTXBibEk5X0RUOTJYbUxwOHE3OXJWemsta01vQ2tjYUxsQ3JESEdjU0RoNUNRSG42ajY0ZVM0VzJvSEJrdkRWNTUtRF9WcG9sbUlGaFFGMEtjU1Fnd0hyTkZyRFBYcDNQSzdVNGtLZmltSklyNktIcEZjcHFLcmprdnJDZFFjNTVsQ1dRN0U5bEIyMXZkdTRjaWlmMDFBOFB0RlFIRngzY1JBOEZKR1lDNGhBMTJVVURqSlBqV0daMlRqc2djVEx6dldJc0VPdVZHRkY2cG9GZ1pUWGU3V0VsYzZ3UlN3bHVtMzVwZ1BoRkNPNlNXeUMxbVpNbHFreHBtN1pVYW0yNGtaRWJlbXc1WUhHZWh5ZGE5SnpPanBnVk1BTzJ5N3Y5cUlucVdOdUtjdmFGQnVyMjJhcE5IR3FPWnBUYzR3SHNWVlpMNFA0VjR5RmE2OUJfUkZYNTRTekN4cWZ6elBhNXJkTjhXd01BNC11dmdESnVVMHZoV0FSNzYxVEptd2psY1pGVTJadlQxekU0c2dRNlRzSTJ6RGtmbnp3ZmFEb1N3RFN0bEZTRHhiVXZpelJ3c2hKQ3pMeXpkZDA1UkpaVWlVeTd5dzBBRHdVV1BSUWsyTTFXRzZ3dTZVU2hHS3NrSmRHeW9OUUtQOWhGTGJEZ1B3Sl82em1qR1RuRmxwanVya2s5RVJvXzFoclZsRVhvZXE0N21nMHlXT3Jrb2QxRzJfUVNPYUJmQ0RvMnQ5Ni1mMHo4NGlwa1IyX1JRQUZxTkZsVDhRS0thVWJjdlFFOWFveWVqaUMxcVl0YVlEWnlTRndSNXNId19hYXhYaHJ0RHdZWHR1N3kwM0VORVh3a1BuNXVSSkxEZFNOcl9BZFlaMjRQdmtuVnF0THFMdVFTSi1OdlVhbTRkbnR0WVd1T1VLcmxIbDExZUtPVXFrRzZPMUk2LWZtUzduTTVsX1NzMlRFYXM0amJZczZqMjJqSkhsUnhHNmF4Vm1JeTdkU2pTdFdtVFk0UTJRN0JOMUJyYXdEVjZrUWRVNkFka21SaFhzMWhjVmhtNklQU2ZsLWpSM1FwTmloWktXUi13N0ZCb3FyUWg2cG5ZT3RzQ2VzQW5nOW1MRkVXOE1qTnZkQnI2RW1uOHJwRDlPYXV1RUE3ckd0Sm02OTBfdnhZNFFzV3J1QnliVm41OE83ek5hWU1wbG1ZN0prMVppT2JqWmkzcEE4VVN6Ti1sSm5MMjlwdDJTWTZNUVJxandtbWpuS2YtZm16a2RKQUZldkw5aFV5a255MVUzOEdqakFEa2tZbTdLaU51NG83MWEtc3NBdF9sOUJsTENEM01BWUNzUUJtNjlZRnR1SHRlVl9FUmsxMUxLc1dkSVNNdWRmMndCQWU4NXRiZkNoaURud09tRUFqQ3BDbEozQlJ0dnJ6NXF6eWYyX2xzYlo1QUtkUS0wNmxiX3dCbm5PRWFJUDZHNmd0QUZqSG1JS3RtYXhyRDNLQzFXbDVIeEREWWhHVlI5bFBuRmZTYzBMTU15MkxlcVRxS0xJamNpTF80UzVkZS0xMDZhMjRkWTZfRVlRTDhINHJ5YTBWc1Y1dnlvcFRhQ1pBTlBfMU9lbm82UmJaNW9Fa2IxUjFwVW0zYjlyMFgxNU9POTVBWERiWVNGZ1NCbE9tT1pYZEVGYllxbV8teHJBVENHeUVudGhkYjlJVU5Wb1g3Nk5EY2Y1cklNSWNDSHdfVm15RkZkb3NSZmhXNUtacjV3Y3U0SkNpdVQ5YTNoWnBzMG1maUhVM0RLM25TU3RmTVk1a25FelRCeVJweW5lTC1VTXQ5Uy1xWVo1ZURwU0Q2QjlLcTNZcmtFeEFjZ1puVll0YUZOT1U5QmtaTHJlOFZsSG9pNnBtQUMxX09QcHRjUWFJQmE0c25Ca2lHU2t6UkVHVm5ZUzNaY2RsSmhxMU5Dek9aaE1mX3RKQmF3M3FYZXR3SmZRSVFsbENJZUQ3NHNxQkRFTktsWFJDSWxmRjB6R2dneVFTeVhxeE53c3VoVlV2ZkRQR2hYOEcwM0lqTkFXMFdJYVIxMnR6M21aVWRYakRSUmYzbEhDOXI4bG9BQVM3X0ZXei1EVWY4b1hlRGtlcTkwSl9FbE5tb3RsXzZnTEtHNmhodWpPYWItdks3WE40UERNNllmckpJcTI3eW8xU19GWnBQRUpOYkFfYWc0allGaXhOSUhHeGJuVzNnLVFJdWRIT1ZlUm5Fd0N6RHJHT200YmM2Y2cxRTY1MURxZ2RzVmFLblNZM1FiclhoeUFHMzI5SnhsZTdCVGRpNEZ6VW52VWZEdzNFVFZqaklucjQwYkFnWVlqalBtNUQ4dnJyNndtSVJoRm9nQ1ZCTHN0SG5scDV2Mmg3SnBrTnhkajhJV2dzRlo2SXpQTlA5Um16RFlXaEp5dEZ4WFZOWWpLdjdPU2VqSUt1cFFSRjEyVVJsSi1sak5UWjdXZHZGUkxudVpRTlZUUWN0Mld3XzhfUi0weU9WLVdNUTVPeVFwdm10bUVvVHk2SUNHTEpFQlJQaGFnWFQxWG1jM0dDdHZjeW1FZmZGREJOV0FoRWNtN1NOSGI2eGtrMzctWjdBbmRJaWctbGdNUG9vQVktOGhYWkpaZHE2RU44MDNpaXhRZk1pb3lDak1DUFNzVm9WSkc4WFhLQk5sSFJXWW4zLWg0T1hNeXh6S3pvRTluWGZsQ1l4cWJxcG1xVE9DTXV6RzM3bi0zOUlfT3NvMFRFZjVpY3dFTTQtOVlqVDkydlB3RTUyWGxiVkpZRW45Q29uUG41SkJ6MjJraU9CbDBNUEpya0hNcTBNT0p1djhiYm1Wdzk4NUt1U1dRd3NoazJsRG5nLTlSUzV0NE9SUzB6MzFKWnhPZVl1Sk1JR3NDZm1vdVo2d3IzckN6OGl4ZlR2c1UwXzU3MUY2Y2ZLbE05MUw1WkpOWnVGdUZEdVFLVnhkdGFmSHIwYllUellfRU5mTzhoS0tEcWVsM3BENEUxZXpDQ0xYN05aM296dTlqTmZPblpvS1ZqSXVLNU1nakFDb1VfdnNhcU5rblVkVVZ6RFRrUzNpbk5GbDE5bGQ4TWYxOG5MbHdIOGoybWRhOGdrT1ljR0VDZWQwbVdtY1JsZzJUQmk4eDk3TllEeTJJb2t5c0k1cnlib0hjV1RLNVQ2UVNKaVVkYWFFVXdqYUtidl9HMzZFS1ZzUVhrRTZjRXBIbWkyd0ltd1dCNDFCLVpjSFg2UTlwTlBaZ1pDNGNKY2ZtMHlXaVozRUYwZF9Jd2hJaUhVV295aWVVV2otMHF0MUdkYlkyR3pUX0FwRWNqLXh0YktBenA2aklTVGZEMXB0WGlqSXp0MU9hcXEyTXlEcERHZnVmOUVsYW5sQm05ZGJqVzdvV3liNHpFYzQ5Qmd3LUNQU2hkVnpsUXp2eEw5QVZnX1pWLWo4cWMySDd1X09ZZU00RkhQUE5XZFJpUl9TWHVYRkJkUlJDX2x2Q2d0b3dwc3R1SXR4QnJSbTZOdGF2U05Ybms4MnFSNGgzNGJ4ZEVLeGxiM0ZEa0ZnbTdMNXRIOEZCMXhsdXBIemhORnZZRnlDbjRPLXZoRDc0dlpyX0dGX3hLT2RQT2RiYVhtZVNSU1JJRXVtenFZcTVUbUVfbWYtWVNZblVGbTMwcUVmYkotQUJJQ1BhS1ZyQmRXcFZwYjlDSl94UTdNTFRqQ1plem9zQ2RxZkhyQmxHQ2dGS051XzVGdHlVYWMzNDRhUEhmcjdoVS16aW5DX2hDa2J0UG9DSGtIOTlkajJ1blhXUWQwV0ROVmwzemEtZjYwQ2NUYzdMakMwSlhVb0g1NHlIbl8zZGktSDhYM2hueTAtNzMyZU1JdXFNeFBORDFLVTNyV29EX0lhS0dINFRBV25vRzNYbTJyNUpFVVBON0dGNzBiNVZTcDZiOGg1UjlfYTZQRE5ocHk0cHB0MmN5cXpFY3dzWFNES3JRbzBlcTVvTWpKZWtBTlRoV2pIZFVhTDJ0cE5rckJaakJlMWdzYW9JXzNsNVo5cnVDa0E2T0xBcDZHR0JGeVMwMDZNbThJTjRTYVpVMFBUczcybXhJbnp2LXdEV3g0NzBvMVlHcktRbzEtTUJZQUhoSWF3NmVKNVFZSmJDMXNLVkFRLXdDS1h5Q2sxSkFDVWZSUHNobktLZXBiaHFtekR1N0tTeDRWR05LNmJEczZhVGVhYkJqQlZzQjNDY09xSXctNmhFZm1Qeko2WWxWSC1qSFZhVGZ0Y281c0pGVVl1M3Z0Q1l0U1ZsN0pnaEJQVm5XQk12ZWY3cFozVG9BZnVheGZOazhWQ3JNVVF5X2Rub2o1Y3RXMS00VWxuRS1KZk1pYVQzTDJfOW00aU5oVlJoc1I0MHp5Wm5EWlRfcnFfbGpYUUhjMk04TmVCTFJpWUdTa1VDdHItUWZ3bTlJeE0ydTFsRnBZdVU2QWNzenB3TDNmMFJsQ0l6bG16akNkU2I4a1BvT1B3WFFFNmowOUlGcFl3VThScjFhX0NITG05WjJ5dURmMEVrbWZ3a1NscEhKdGRoeG5uQlpmQUVBUFdOYXljM21xZ0pxMWtfOHR2bEpMNl9iM1N6amJKeEJraEFxR0hadjVvMGVDcUx4bXdsR0dHdl9uWVJrajRUQWdrWktyTlB5WUxnNk5CcG45V1BBbGt4RHVwTFo3R0VRSk9IMXdUX3NqOUNIVVJkQmtsaDJGakpMMFh3QzNzTU9jUXM2a2JqOWw2aE9VY2VXMDBvcFFISEtMTUVGRnB4YUQxNFNsankxVnJ3NXc2TmZUWDNQRnQtT2M1MzVzd1VneVREcUdtLThZOVZnX3FJVjF1bk9VTU40M0hjY3NtYTUzZ01Cc2dVS2ZneDRTbjNnUGxweDIwSEsta1B1Wkh0ZGVnT1ZVVUpZWlVEVjRlNnJzRWE5V0h2bXdwQllaTk00ZkpyUmgzYkNuRUptcTB4T1YtRTlqb2FTcUhSX1k2dmZmYjA2NzVuNlF2QV9DVHBWX09NZDFhZWU5YUNNYWhKLWF5c3ZHVEtoWll3UENyVUo0d2N6R3JlU09NeUJUWktIbXhrSDJPeUdqaFFyOXFoWDRtWkYwUEU1NU90Yi14enpudVh4cGZsckxxbWhIZ3ZFZmY5amRwQW5PVnZHODJQTDJTT0lrWEZxa2tCZkpIVkJmS2QyLVlwRmRrOW90VU1lTVRlS09BanVkU3ZSZ0NIWnhPUzF4cF95bzFYX1ZNWk1jZlpLblk5bTY5THVpOGQ4Yndsc0o3MGUxbTZiWFNGaERfZmc4Mm1vOG1UV29qYkI2NHJKTGxTRmdXNHNLVlE3OHdsVnNYOEhTcklCOUtnOTJPSm9Lc0RZSkVreWdOUTF0OE9ubTVJb1U1MlMxSTdmUFk2bTNBM0dJZWtuQlF1QmhCYVJvZUZTMVpLVjhnWHlrMk85aTVySVh4MFM2MzNWaGdrQm55WXRhWkppbFBQaTNTTmJ0N1A3N3pZMGJaV1l3cUFNYk5xdEJiTXZkQzZBdWE5MXNYbzcyUDBwQnNuYU1RWHktVTdVRUlaaVN6X0lBVVFKOHdRYVJWaUZKY0lGWnN2QTMzMmtPU3NWX2ZrY0dTYzU3OWVTeW9iQnNESlpKVlh4WVdNWjdyVjU5eFBjWmhxR2Y2MkpsQkJnaDNIU09TdTl5V0MtTFFPQVZwRkxCQk10OVl3MmtHTGRlaHlyYlNkZjBJWGF2WUVUUUtXWEFsdE9QeUp0ZDJBMWNHeFZseFFPMUxMbUtxQUFDUW9pNkU2SFRPRU8zaTRCa2JGMzRSN1FIVXcwYTdEUC1hYTBYRHJyclVfcUZmX0JRRC00UFhJb1U3N1VDc1BsZXJUR1JlUjQ0MWZqa2VUeHl1X29NamlNaHdlQlduNzhjUkJZajUtbEtNdncxdWg0TXJkOVhpRXdLUjZZRldJaURZTHBRTDltWWVNRFRuYzUxUzRFR01nYVJfODYzdUdsRTJKTF92UFYwa2FqTllIaHBEaEJjcVA3dTRjNndkV2dlZFFuZG5uQ0tiQm1NNDJXRVBKb2I1YjZjTUhzbXRMNW4wT2k4VDVkTTJscFRRbkV2YkczREtKWXIyZEdhUWc5dk8waTNIcVdEbDV1RnNvVFZzSHFjbE5ILXh1LXRGVHFULWQ5LURYdnJEbTZUNzBVODB2RDlFVlpxY2RZME5WOEtudHk0UU01UklyS19ULXVzUkdPVmVsQXZHRXpPM3hlRDU1X2l1VkhEZEw1MjVWNjB0LXVBZnBfcDBBNnU3ek5YZklYSzBVUmtQem9iTktmOFFRVkFZTFlGTVVLeFh6c2IyY1ZSdWd2a2EwdVlCQVNiZUdsVEwwYS1tMWFISWYyYWtXYTlQRl9tQURKVThRc21WMWtGU0dyYVg1UG5TLWRwb3BMUFk0ZHJuSjBzSFhISVE4LWhqbUphT3h6WVdVV1hwOC1xRVBDd0RoTEdKVlJ3N3hVcWdxMkdTbFl5anN6UkJYMElDaENwM0hneDdBMzN3MDNTM1daR2dCNHhzdHJnd2pvOWhmWVN2VEZOY0NEaHRxM0FDLVYyMmpRdlV1YjNMeHdzX29KMlJtdmRPc3BYX1d5d1pkQ3RUWHVkQkZ1NTFaWU9jYjEzSW9oRjR0cVA3djNKbHllaEtUVjVEMnl1c1Z0WHdiMDdYbzczeTNxbTNnQlBGaTRFeEYzMGMtZGVNTVFHdGZuM25QUEx2enZ4czFaUFo4QlljY2RiOXBrcjd6bTlmYkllUmtNcmM1dFFZdXEydU5ReTJnYU9qZ1NPVVpyS1l0alpFMUl5cE5Wak1mTnBhd0dmVjV0TjRMWm9RMHJXeE9BTnRrbmIyamhSNjNqekZJNENNRkt2YVV2U09mM3VCRjB4WmJNYmg4cXA0UlQxSHJXOER2SjM5SDh6dHY1aE1TZG5wb283YV9iQmNldlViOUJRQzRfaFZLOGMyYVU0bmZUYnRwTkJEUzhYdVlGUkw0dUJ5RUlSV3ZoVFBBaThLM0o1ejFNRktERXZoYV9RRzF3Si40QWFXQzJsLWEzMTJicFZHMmp1Y25R"}'
         headers:
           cache-control:
           - no-cache
    @@ -133,7 +133,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:10 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -147,11 +147,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -169,12 +169,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/keybak2e80e6d?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keybak2e80e6d?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keybak2e80e6d/7dc833bdbd234a21a60b4adcc4d5b904","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"2X9Uatod3UvEmsXFPcS-20Ji1Nr4TStz4Fe4mdSLHb2Bt4UoiHajXbfpPtwJFKr0IwbaL-5KsIsUh93wLXBkjnIk82pVhw65n7G0iO2vm_x-8sjWUYjBxZq3aeDA26BvxxdMJJSVgSwhD47L8UYoDQZ10-6mGUg2cn8wpyE6KpZRV7Xt3r-P6l3FyQosJer20wdCmqDaKUW9pMfTbwtO_nB9RhE0Zoszibw7_ksoq8HaN3xYGqBU6bsDWwXC5KqF3Xm-sLmbA-Jry9VJq-4SzgWa7jx8xvNYR0sjqtCfAZmt-bQGRuCYoKF9yt8sqOLev7bo0iZjt2Iz1y_lwhEb8w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676571,"updated":1575676571,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keybak2e80e6d/e82503072c544779bf15f512ae45afbf","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lfY9uQi-W9cPgsQMtCjbH-58QbzcCJmHDhVV1ln6bHOF4Zsr7M6tbxTskUrDL_4Mj6GzA9uFC-7evZTqbVJddgz8_7Kc1m49ez8XQ949ZgYRMktcx0CgOFch1hICtip8ELtzvKE-Wy8xFAY3-m9TtdLZTlXvXFieP9SUhbYDmdojbc8JtiTOU1a6eg0gPxXA8FV8JGGVmhv_2SP8vuTWNTHPp1WDJcLS6pR09FFBIkNkaiQlkxS02G8npJIytTSZW-wSOvBk5AW8YftnyJaDZHHck3e0VAgkS7TdK_ifOZyKiq28Vom_Qn99lR0c3DqKxLZgjTa8G3a2wohwHa4Yhw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -183,7 +183,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:10 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -197,18 +197,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLkZFb2NDd21qRnh5QlFsX0ZZNlY0d1hpaTZhTW1CZGdHUUE4VVc1cTdNSjJNd3lMaG5LaUVnNTlDOXc4eUZEaGZMRjdWN3BHcXlzNXUzX1E0SVBxRjgxTjg3c1V4UHJGNFdtWDRHU0J1LW9mYnF3d0JXdkg3ZjAtb1FYLXJ2ZW9NaWE5RDZ5S3Y0ZGllMk9pLVlfUF81dHNJOWQ1MFc3YlhmMG5sNmNJXzZFaHJRVl9KVmNkRW9UdVMzbl8zTFZQVzlmRk9EQmFpZkQza0ViYjBZVEtjLWV1S3JHRl8ycXJLTzVVLU4xVW43bXJDNW5LclQ2d2d0dl9nZ19QX2RCOWwxcTl0RW5ka3lJRkNXTUhxZGJwUGg5dFJPY0lTTkhYTFEtX0dsZ3NpWUp3WWloRXEwS093OUVlbG5JYTlOc1I0RFRnN1VQR3U5N09aSkJreHRoVlJCdy5QSmF3ZFc1bHpEd04tNDZMcEo2Sm1BLmQwNE15UFdCWDMtMUJhLUdhdWF4d2wzblltWk85UXE3VFJSaUlfMm5qM0FYaDAxUFdjazNBMi1pNkRaTnNBa25Gdlo0SUhSV1hxVkptSU4wTnh1YmpIUnlsa1Ftam1BcjlyblRqZ3IyMkVPS1N1dzY3VmFmWWpES1VacGZLbDZFRlRwNmRFYXlaSnVrZWVBd2pvUUxQSTRiWXhRX01VekRaMGc1aldrdFJnUm0xYmVNS0xrUHVnamVEVVQ3VzNlaVdLZW9Jdm5lbF82RVMxcmxmbDZORFdjaUVlb00xdFVPdkpNZU9kMVRkLWFtUzFNWHNoaThiSzFFR0ZBVHFfaWpKd3U0VGh6UEZwUko3Q1VXdGl1TDRDbWVSUF9yMklUa0Q5eGE2V1RpOFNpVEVnWV9DOHVRSml3NVE3VUZxQVkwSWhQUndLYkRtTnU0QjE0emVEUlJ1a0stWGNTMXBMb09Jbnl4MlRZSEhucEZDUFRhWmZEaEJueEs5WGlic2tKNU82RWsxX3ZXRi16Zy1yYS00Tl9LSDZhMlJURm9JaklSOEl0Ml90RFk2MVR1WXlxbWhqaG9ZZlNob1VVVGFqVlZxbl9fTDIyS0JkT19NNWRKU3lwVWlDdS1DUFoxRGxDRGxJRGZpNWpwUFhSd2dKamRXdldpbW4ybDFqdTA3SzEtZnQ2QWJ1R2oxUXozWTR3aVlqcGtUOFdtdWsxSGNQRXh3VGJlWEEwX2V0cmhWNF93MXd5bm4yLTl2ZkI0SnNnS19ZMzNEclhQTGRSWGkzS3ozTFB5MTZMVlF5TXlaZkRiM2lPNjJpMXNLU0VwQlJKc09IQV9xaVZHQXpBWHJ2ME1CWEI3bG1xY3VENnBUSkpTa2ZmTDdUYzRPdDB3YXR0d296dFBEZzFMZTl4elYzWWtlaFE3dUs1aGU0VEFBRmtCdjdzRE9oaVVYN3Zsb0lUUWZOZ0t0LWdRLTk0YzBtM3dwTnN1a1NsYTY2S0VIaE1WMmUxNmliZUNTMXhnZ0VXZWFWMndzY05KZEdxZWlyeU9udGsxQXJBdnZMa09teXZla0taOUw5UG8xMGUtVjNOMVFPUFRuVkswM0lHNDNqeldxRXl6YkpqaFBTOGZJLVFlNmZIaWR5QXB5Q1d1b0ZkTlZINmZmVEhFcGNlNWRrQXhXZE44LTRvVVRwbUVtUnN3ekVDSHYwems5T1NKRUYySzhITmRnMDE1VzlrclFhQWdSUDdJZnJlQi1uNHRQZjBBbzczOXI3RDY2VmtITGM5TEstSEUxbDZPLVU3UDZEZEdVYTY1V2U5cnZCUi1lLVpMWmluakxrN0FOTDNydkVvMUh6Y3AyVEdhVk9GZWxDSWJobW1BQmxaT1pqTzhUZVZGdUhCREFYbjllSmJBY0FQUm9wVmFrdDh1SlY1Snh2UEJhMXBKaS1OZ2l5YjRlN1Y2N003U0ctY0F2R2tId3lTczloanVialFUcnJwRnZ4blRKdWtTOWZtRFhSTGo0NHZ2NjZrQjNWMktWeC1SZFF3OGRUVlByOXJwOFVQS091WmR1MHZNbHI2VUdtam52WS15MTlxdGdzRm5DQ244dDFKVFdSeUtnS1A3MWhJU191di01VUxORFE2czlZOHlYQno5WGI5T180QVVvLWRsM0RkcmhUWG9fcWRDNTU1YTdEc08tS1EzcldWTkJkU3ZKRU5YQWxqa1ZUaGZHTHFwR3RrRWZZQkRMZW40VkVCaWVCNTNwLWs0Q2lmYUZIRFlsTVpKeDBuRE03RDhfZ3hmYXJqMi14aEREWUV1Ry14S0RGQm9PcGhSVFZRSjRlNWU0X2lHQ0ZMbmJrcEhjVEt0bkp3TU5MSzM0Qk1vVzFYQmczUkU0Zi1CSDhKUDE4VkNTQUNIOHNwWjM0ajZiV0lZZHB2bzJlT245RDFGZU5JWUxJTkMwTS1WXzRZNjNOd2Nha0VLd0pkY3NNVmZPOEpvMS1WY18wby1iRk45Y2U2M1lhYXpSTGh1TFk2MUl6VVo5NFhJX2RIclJiY2RMU1JDdGJaZVB5ODFGMjRZeWNNd1h4Nlh2Q0Q3bVVIOFhDZXhRR3pTbVhnMEdmZVR2T19MYUlLYXlUZ1paRVNuZzdtVDJhZDIwRHlNTkV3a096a0hTck1oclI1ZmxZVUF4eUh2NVQzcEpROEZJcnNjcnlpQS1ITDFuTXRWYzl5aHVuTlgyTTBfOFA0c19yRkdGOW81R0xYVmxiem5rSDNCWDZoTnc5dWdDUjF3VldfUUpzaTJuMTRLaXpCOGwxeFRmbUllSTFaeXd0QWNEdzhsWVU5cFdXaDZJcU4zYUliVFRiVkk0eWJ5ZFVwYzVUR0doZE9tNElWZ1FCblkyMjdicU5yQzl2N3I1M2FPT3BUYWZhQ1VCNlpjeWFvV3V1dmJ6elpLcG1pY1pFel9TV1F6QUJFbkluNGVlMzh0NHRjQy1nTnJQQll5emJScU9lMWx5SHRNQ1pUczIwN1pQdFlDVDRSWmk4T2tWVEEtUlFpVUJBeV9WMkVycXZlTUc1Y2JMbnhwbG1LYWg4N3VkUTJxa1BJVEVRY3ZRVjlMbzIxaGdrTEtDcVRKMEV4RWJGWmN1XzdWVWFfYXlSekJId2xUN3ZWSDJHZkVoTk1vQ3I5Z1NyZVBjQzJhdUVoTUZqZlBiWXR2bDdFQlhlc1FGb2ppYU9jYW9KMUNmRWk2b0FjVUVOdHlvVFpuWUh6VGNvQ1d2VEtES3QxV0VVSDZsTGJDMno2UXdTaEl4RW16Z1ZJQkluS0VVSXFMcVFNSzEtRlctZFoxeTYtM3R1Qmo2NzluRUdUbnNabHZPdm9LcU1HUzNBQmYzbU4zVXNlVlAwdzhkeDBwRzhsak1xTHRheXhvV2NfYnFYaWRrUUpDOVZUUm9RMnN4WllGOFRaU2xQSXR6UExILTZyNzRjelJfbDR1d1NOV01hcldfYmpueHNFejBzb2tka21wXzZMcHdqZjBCRlZ4YnR0eWtuTENsOXBvUFg3MUlVdWJ2VnFrV3NrMHd5ZmVvTFFPWUJKS3FZLVp4Tnl2ckNDR0NIQkY2blpWQnllVmtPaXFkLXlVYm85Ml93Q01LamY5T2tKUk5NakMzeXVIUmV0cW52N1FLcnZsN0xoTUZtZVFIQXFqMWwzelp4UVdEbUN3RHAtNlQxR2U2RlNzQXc3MldCNGQ3Q2k1TnlvczY1ODI2YkhrZk9mcV9WeUdXUDZPVEx6TW5OUGdmbEU1bkZ2YVVNaHlPZ0MwWHlEdHQ0Mk8xOURHMXpucThMTDJBdDdHWGhsb0drSVZDZnY5YUhzcWc5eUVLd19Dd1EtdGxJVWlrM01pQ1phSW80cW9keUllRHBpWnV0Ym15RnhKSlo4NC1CQUs5emFEaGJfUkp4LVJGZkthQUNnVHhlYW5FSXVONEZvTkl3T19kTVdNWTBwOWdhVTFMMklnVlZZVXJPTjhmZ01HNXBrdkhwUU9kOGtPd216QzVoOXdNU2k0MXBaVF9wV0hhSmpjUGlIWGJVdHpUWXpNS1RSWVNacEtjcWVDbGJlSlFQajZQUXJMZEJvR09KRUlON3pfbDJsbTFDQUNySkE4Z1VmeEZoZGU2c2hybUYwZFFiR3dvdVR4MEFuTkpPeHp6SFYzYVhkUnB2Rm11ZFFYOWNkd29ROU4waDVlOXhiSGNva0FuOGF1eFZnSFUxbUFVRjNLZ09ua3lDdGQ4QkNBYS15d2NaNDVwanRwVmY1TmhBVkFTaFF0VE90Vy13RXkxOUNrNDVSblA2a25ueFJEY2MtVHdXTndBNTVPLTZHLWU1dnZMb0xfdTUzMFo3ZmEwVzY3Qk96M3g2MVVmcVdHOEpmWUtyT24yemVqNFhVcFJKSzV1M253ZzJkQ3dGUjQtWDdrTXN2Zkx0VFZyMWtRSDZIM3plVzNLbmVIei1lSlA2U3l4dTVTQW1mX3Z2MjEtTC14Q2NUTjJZMHgwOGlaLXd1SHFEYjdvdmZaZjdDalR5QU5WZTBadU5vOXE3X0I3UFhyRTAxWU1sRjBXR0ZHX0ctVzNKMk9hMENfX3BSa2U2d3NpaUg3eTZyUC0wZXBFVDUzM3NkZUtwSUJ0VFlrTDI4X2d4UnJYc000ckJuOXJuUk5YTktZY2dPMVRvZFJ3YjlLWUhUTXExWS1FWDVYZzc0LU9qU0VNWHRBcGtETWFCYnRIcl9kY3J5VVBNTExtcGl5bDFvUkE3VnQ0enk4NEVDMldIQzFvZnhQUVRCU1lmYWFfRUNfMHdReV9ncXppVUNLdDFLMllGc0IySk9sWGY1Y0NMZHZoT3FMakNtcFVZaEhVN2dKcVhqbF8xeElIMUc3TUExOWlURmt4eU1VN0t3azAxLW5vQnpock9NS0o1WG5KMXREdXhpMWx3dGlYUnFoRGxTZTl4VEdULV8tWW9la2ZkcXlweTk0UXNRMGYyMzRPSm55WXYwNEphN3lWUFdZck1EQVh3MlU1cVQzcjZRd29raFh3b3VnLUwyVDJjVEJ2REZjODIxYWd2ME5HN1R3dnpaX1d2SVJwdW1KYml6elpXLU5zc3Q1a3FKT1hraVcxZHRnUXNkSVZKNVQxOFBvTldfLWNMazFESGllUFVuNkRZTWhmejdlZ2FtRmZWMkhRY3ZYSGs5eVlHekJtMjdGYnRwUmxkU0xVZG14aklfNjVJLUw2ZUM0dHdtNkU2TlhJZUMwczdlS3FlVTlNekdoNWJkY2Rmbk9FSHlMS1k4TEdvS0RkZnpJQThqdkRWUkpqVmF2anI5UHhrQ0FNWXdtcktxYlRXTGlkNFpOdTZ0REFhN2FxeVNsc1ZBSk02Z3AzdkxpUDJHektfV0F3QUxkVkxTeHBMb2FHQy0wekZ0blNpc1ZvUFNqb2hPcnZtc2dRMXhGSmJwYzEtLU1IN0NzYkFxRWNKSEhicVMtY1F0eC15SGVYcEhodnJwUlRmcGpwSHFYckd0ck4yRmVFT3Fjd0JYanFhLWRpaF94dHFBSGhHNHVWTzNjdkpmdGVTZEVlNmVtaVhWa2lsNGhSVmtEV2c1b3pGQjZ5Z1JFZGRfRXNVZXhyQkRSNExIRlhWUXoxZ284QURJbXY2Unp2dU9PeHUteUU0a18yYjlDeVBTcm1Qd1l0aDRaa1g1NXlCR3JFZFNoVGgxWUVhSXBxVXFuVlItUTlldlZ6dU5uc1hQR29ibTVPNWl6M3Qzd2RPVURkbl9LcHpfMGhPS3FpYzVHZDlWbzdVRFVENGh5ZlUxN0poazdOVXdkMmVGNEc4ZFk3NW9qRGFmTEozWGJuMkpGTFFZejlQb2dzSXkzb09aM2l3MFpQZUZmcmExOF92TGdzcC1SNERnd0xJZGdsNG1GNVk5SmhJTTFtb2JIeDhZeXk5d1FERkNhRkZxYkFMSEdRNWlmZU80S1FCS29lbTFnYzhrSjdxVG1wWEp3WTRUSUJLMVF4SFJIRnJyVTVIU0dMMFVqem1nZEN4YU9tRGhXdUwxaFduOFBVYlpUOXB1dDVkVXRqQkhPalo5ejVfLTgwaDNSYVE0dDZla2g2b3d2MXM4dDlFU0hMQ1JGb21yZXZtSHZCM3oyUXNjLWVLR2t4dXhoNDB3Y0hYeHpwclFTYjhNcC1QaTV5LThkZDEtYW1mSVRaYmhDZWhwNllSVnBWNnhseUtoYVFjNTNVRW9Wa2lpbGxZcWRvMVFiWTU1eGw0NzA1bHo0cTFRWnZ5Ukw5azZITmxNYUZyU1ZJZlBSNjFaVTRaY2NlbWVSZG02cHVhdTluSldBbFM4ZXBQZVJySE1XaTNiQWZXaWRZNkx4ZGFwSmF3WjJDU09ITXZTZllINFMtU25HX25Cdm9RYjFaOGVBRjE2TVdLZjFTdnl0Y0ZwTWxadDVFWWRXNzFEVDBjQzUycHN1XzJyUUdpNHlvb2VFTEZwbkFRdWpfY3lvU18wZ29USk8wbEVFSElHZHRnZ1dLazltN2d1ZF9tYzN0a1ZqTGotZWhoU2VJNUhOb1FUQWdUNzh6aFIyNXZUQ1RSMVNiQ0J2NG9MVFdYTW1EUWFOWTc4ckU0NVZtQU5jcDFSb2VpXzRhbURCaU1tU1hGT3ZtZzRMSnhvV2UwNnVXc1NNS2NoOXN0R05UR01tc3VsNWdrUUNHek45N1ptcnJkRndaYXZUbGNfN08xSkV0bnhMcWRvTUdkNWJrYlRXQkdyZVJwUW94STB3NnVrczZ4d25IdjR0VWttY3BsTHhYREltTHdiWm5xWUpkbWd6MjRiU000eTdMcEZIemNGR1YtcVlHNmlIWjZHMVozdngtVmFyaEJnUV9yOTlpbGJQaWs5UjNTRDFHRU9pSVJqNDltNnZzb2NyemJiRnhHQ0ttN3NHR3FUa0wtU25fRUxJRHdtc2ZldmNCRUFpYTBieUpNRzZXbFBYLWhmd1dCbWd6S0RsVDd5QlgwNVYtN045ZFVYX01qbC1FRnNFVm90NzRobHBfUXp1Wng1UEVpdmR4M1pydTFqWF9ha295dmxEQVFDUWFjTUJzNERBV0lHYmViSWJQSTZFMllRZHQ0ZGNrbWIybngwcGhJdlhxV2d4T1lXYkhrVXV6UkVCSW1LUEVQRFdnYXFiTmpqMEVScVJMUDZ3SFRxRnhjS2ZvZi13NHBmUFE4TmJRdmdtMG9yQTFoQzR3Wml4QUhHbm9RQjZVU1RLazJDdVNxSTFyR0VGbFM3QTRNWlJpSG0ybFVCZlZpeWhhcHVNQ3lOM2ZUWlFFUGdHSGtfWklfelc1SDdsNTVWZl9UaW5QeGJnSDJvRHRiUnp6YWlwajhZWGZZNVRDN1liN1lJam1SbXdlWTlaTzhFZVlWY0NxeWRUUVVZT1YtMWxBMWh2RnhqRWFyMGh1ZnA1MEdUTGRvZ1JUUHFJeHYzbV8tRFl3T3YxM3I2R0M4NFUtZFNRSlQ0T3NQaml0TjJRVW12YXk4TEQ0czEwZFg3N3pQcmtRUFVDYV9maUwyZjYzMUNkeWhoVVgzVUtpX3h2M1Vya29sMzVZOVJFaDF1LVN4YTdyOXdPSnlzNURNUkpUeXBjaXVTT3BoMmk3cU42WG0xVXlPZ0J6MUFWemVhcXlyZmZDeHVJQ0Q5NWdXNnQ5bTFaZUxTYi0zS01IdDluTzgzT3cwN2tMV0hpcTg0SWh6QWxNTHZrUVBrMWNJNGpGUFYzZVRnT1FIN1REM2V0N3Z6VVRqYjBMamYtYlNXazN4ZzdKZFhmVG85by1KTkVWMzgzVW9mbXZ4RXk1QzVoRWUwdHZIbzJsZmhNNjlIaFViSnBRWWdYTXUzeFJiQTVjSjFnek9kUmlidUozOURGZnZnWXk0WjBQZ21halBoU2tvTTNPWWhlYWVHbWZxbEJvOFJqWkh6NDlBUzd6a3FqM2lOQW4wVV85TjhtS2NlOHpvdHZEQnAyc0xsa2xjV3VoU3BVZ1UwRHhvSGFhN3BOR0RpMGt5RFNRWjlnemU0YjRWRlpzZXRLUnZPazRvSElzTWFnQUFuY0xINGpvaHNfUUpjdHRWdC1IN0hRUFJtc1ZfTVRCalVzQlJQUm5kSDF4TVRNRVFTNXE5dktYbklWZmlULXpsLTVtbVVQcDFQdms2UEZ5T1hyQVhCV2lwOGVlREVOUGFYaWJ1c1V0NFpTY0d6NU02ODE2eFFSUkQyRFlZRVdyX2RFRl9vQmREa2JfN1Rxc2s4eFdkdEFXY0JUdHNFUXkxZXN0cUtqWXZOVDRqWTNyendrdXFTdFQxM3B4ZTNsZGQ2eEs2SGgtbVAyaE02X1BYX0xGcjdjQVI3MVl4OVMxTFJ3TTd2ckdlcnVqbkpPQlhzR01uNm9Sd3UtYm1KUDZLdG9TdnJUOTlyVHJTbTdzZnlLTWRsQU01Vi1mMWlTZl9VRXE0a3hSVVQ4V2cxNlVaYXV0Y0pmVzJUN1cwOERWMFVJemk0NUZOVXlqdG42c1VOVnVDRkNhMFZKalhrNXZwODhhbi1OMnVjZnRwQVR5M2paWUlCNVBFdEptQ2J1Ml9OYjhVZXZuTGJmUnZDWE5XOFpCTGdYYzI1Z2N6MnpGUDAzU0h4LUtTTnczN204MnpqM0JERjdZdzYzZ2VTN2MwSHZhRWo5dEtVNE1TYkVNZkkxRnExLURQcE1xRGpXZkMyeWdNdkpOS3lJUzZfQlVwbG5UV0h2NjhWc2xIeHRTTEZCdno5WkVqeDhoS0xLdms2RGQzWXlkS2RZdm9GbEpjX1NFZndvbnZ4RUFGWmo1alU1WUhqRDNNRThVQWdVclg0cU1aeFVjNTZaYXF1NUl6T3lXVElwSmtfdUpfVjBTSldKOUxNOEo1d1lBVzU5VjlXZEFKczJnMFlxekhMWmI4ejlEY3FoZ3BsVlFFbXV5R1B0NWVNdk0yT0s3SmU1ZUc1Zlp0SUNZRjlJSWg5d0szVER2UElhMlplQTNraGtQNUx6UzRGVE9XRFc5bVJ6V2FlaWx0SXR1QS1vaERmQ3pfVUpYaHN6cWg1cnkxRTg2dTRKamZzNG5ub1o1Vnhya1pVNHhJaVNvY2NFNDItNXh2MEpVcjZ3M2NvNVhHTXlaQ1Bzazd5YnVQQnk2X1dZZ0dENnRrRjlnU2VqSGI5ZmdyUmhNemk1MzFJN3Qzck5uWUZjVmJPVTRmQnhJZkctVHBaQURsRnJwY2gyT29zSXZoUVE0bHlxMEpxT1A2R2pDRWNMVnhHNlpFT0hxNml4UTBBY2tBYkRWd1c5Wkt4bTZVZlhVcWFaVWZ3Q21pdFNTWEZkdEd1VU4zckpBcmloamlEcVpDYzRNUkp3VFFjVkFNWVdaLTg2X0hibmZEYVU5UmpLemRqcFFoVGhUT2xKdlJTcEp3ZGd5LW5xbjRDQUpfeTdIYkxEZk5fVE9QN0FVSlpfMUdnOHBYNmVOeURSeEwwY2I0M0ZrdEVwRTJlYlpaaGdFaFM2X1l0Q2xVMTBiS0lDbVNJc3I5TTcxcGFQQkxxM1VtTHpyZ2l6a19tY0hBSG96OG9NeWsyVkhNQ3IyM0hySGVFd3NXNU9aajAxX0NuT2pXbVJnQ2FHdzM1MEZyVnYteUY3SWJSUXpwR3BkSEIyT0JVOVlCOHRET2JuRFpkS0tidFJhZXpMd21Fc296bER5TDdBOEtvNjdjNWE3eDAwNEV3ZlVyaVYxRG1mV0hMWDl0bFVUdEt2T0w2U0dteENXYXdWUFNVUzdTdmFQRWhzLVBKRWd1M0ZWWnVES1JDdFN3YXNGTG9IY180eDk3X3BnMElZZXJ3eWhGQmhkSkRQNWF0WDBNM3g0bHVaN1BMNHk3aGxhV3JHUVNIU0h6MkNRS1A4amxxby14czJMOWFDaGtpcEtNSVk3cTNoVjR5MGh0M3RySjBBUUVKdGtYUi1oN0hGTGNzMm0taTNVZ0NBblpIcTNfQTdjYUpGNVF0emFadDNxbmdQbm1PX09EU21mY3YyUUlsN0FtSEZzcGxoRUFhZEFLOV9qSmhwVC03TXBCR2NLTVVOUFVTVUNiaUZEc3ZJZElGTnh4N0tHVjR1b0c0aUR0OWV3SEJFaWFhbHBFSi0xVkU3WGpZT29vVlpleHJPTXI4cWJ6eG0tZFFyMTZHbG5sZEpWUkFBd2E5SHF6MUdwOWZfT3RuYlhVU21ucW9iZGZ4T1NCYTVwRzhMR1AwMkw0a2ktSnBFNExzV1NPN2t1OVR5TTlVV3ZFQXhBZnFNSGlMS3FRcnp2OXpWdEg5Q29TcnFzcVllRlFYam9jekd0U1hKeDdRWmxGSjdjRGNNYTZYaEFBdFZfS3o2c3ByM0s3MmZIV3JGdDhRZkZfVzJhSUtlbEE4cGZqLTVBRFBOZ2JhT0NXam9ERmhYUTlPOEthME54QWN0VEJyaHU4VENaSHFsNXlYeTM1YVNPajNOa3AyZnMzZV94bkZyNUNBcU9xUk95WEppc3Jib1dsUFJfUEJRelJ4WC5QdTJpOGl5SUJ1b1ZwTkR1WklLWS1n"}'
    +    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLk9FeTBUbnFYS195ckNaMm9vWVVrcDJpajRtX1lfVDdwUGd1cEZ5TGVwUzlBM1Z1dXlmWW9aYXVKbXp0MC1IQWh2NVZLUDlaS05KU1VIWHd6UFB3VXlUVTA3eUVJZVl6emFncEhOenVLaEdxQlhBVFBNcC1aYzRvZTQyQkJUVDJscnhObGRST3Y0cDdvR2pnZU9uNFl0M0ZWYmE1TS1PTWVhNE5BR2stVnE3eUc5bjNzMmpJM1dPcFY2U1FIVk9XTXVfMlowdTBvSHhsd1NWMUNGcTROTVFwOVFaN3RPNlU4ZVdEbUVsOVRIUWtwS2tfejlpZGNXcHVqZzdKMlp1WTA5UG5MdkU0UlphUFZuVXlwOU80UVVhUzRGZHU3b1BZRXQ3QkdLcDcyRjNRcDhWd1ZrYzRoWUdqT1ExWGVsSEhvNUZuS2ZMRGpuM1FBNVVuV19EMkItQS5GZUhaN09CMDZlRDl0WW9fWW5FOGh3LkI3YWplV1Y2bVE5T3R5RVV4QVpJNVM4QkVnLXM1QmIzYnh1NUlrLWlCMkpuR0t6RlJ6TnNqUlRIcFpQV3hBZFFRY1pnbk5CQTBkdVZQclM3ZHF5UHE4cWhhelpFNVpYLWNwQTJoQkg2Z196cnFPd2FGRGxQcEt1Tm9rUEM5THNFdHd3aUVBd3JyZE1aMFdGNG9pSUl6VExiNXY0WDdNZDdwWGRfOEtkMnd2ZDBLMlFBV3JKZ1JpQTdEeUUyZUNGMGF6LVByQjVrc1AxWlh1VHBqQlRTUzhuQ1N6eENJa2ZHUjFyUkp0dnZTZmVPNkVtTVNmYkVLQURDdktqLU1tZjdXUS1XMTVtMXoxLVZRQkZJLV9JT285THZHVWs2bDJ5X2lVTmFIajNyU08yN0tUNW93a19nV1J5U3ZzZzgxUG9CeXRvRmJnSGdjVEtEa2pPMGRKcXlxMmthQTRhTUVTVGlrRXJEc0VmUjViR3VzQ09iMC12c0VSRmluM1ZuYTdrV25sa2x0cURmejBmTjFUZ2UtNXltMXVUU1p1VHk0YjRfeWZLZC02R1dEb0ZFekNsaFhvXzQ5ZTlHeVZqUlI0Y2xoMDcxTkxucDJxYUNwdWlrZHBTMjFRVkx2Z25FZmhCSlg0NW54dEtwN2k0aFgtNUZ3d2ZPdElCUGV2U3FieVk1RTZwQ0Q4S1lyd2N0ZzFNcElEb2c3dXpiLVNCZUJPNHRUV3UwUHA0c1VmZFlvb25yQnA0VEI5b01YTFUxSkxnME1tWlRTRHJTRzRFand2UF9tMUhpWXdneW42VFdSZ082UGd0SnJobmE4RVBTcXhfZHdjYjdGdDVnTkl2R0ZsaG81bllFcDF0RERsYUhBUmtJTFdtdUttUXhKdDhadFBFbWxpdC1vMGIyc3NCTTdHNzdUTGM5WlhTOFhHbVk5WGxHRUM4eFp0V2F1eHh0a0ZvR2RSMm1lRnl0YzBscU1STnJpWEhJZm8wdFFacmRJeGFNZG5rUHQyWkg5YXZNMTEwYURBMzBJckREemJqTHUwQlF3aWwzYWhmMVVmeXlheHZUWkluTmlwTjVhX3NUNGozUy02RzkxTGswNVk3U0hqaHZfVUNTcWdpaEJpVndoMzZONFJITkEwbGczU0RsOWZWNmk5VkRWdVlKbzliMUJRRnRSak5QbUk4dFUyYTBTTm5jSngyY2VONWEzci1jUklJVl8yMG80Y2dZVTBvd2ZGcjBzb2hKR3pIZHZsbmtLc054LWpZcy1tZ3pmT1h4VEM0a3JKV3llV3l3U3ZhZVZTbURsOHZDUDFNbWJRczlxVVhoamtvQjdNYjNMcVFQZFBza0s0ek1HMFBOOHpPM25mWlk4b0ZvMFRuV1V0TVMxUHZlaS1Qbmd5aFdxMDhRZ2dsMWd5cEVSOUpYelExZm9OaHlpN1RpNEtxNlNvQmlSdlBUVWhleFlLVmhWejNjel9rbkZqcmlaTld5dlpXbWFLNHVxc3BXRzA3NnNDcHJNSkVLVU5CWWtVa1FMejB2emJrRzFYdjJqZkdPQmFNRUFnakdSSUhac3psVVAxV3BLTlVmRElyNDZDZ1docUJDZ0hLQVl2c3c0OFZRbUJaS0tXLWFXYzBaSjFaXzFtTGNUYkpxclFrN2Y3a01ua05kX2pGU18zNHNtZ3k0WXdPLUtlNkZrbDVoU2ZSa21CTFpGUldUYjBpVlNYX1VLUzlLVFM5VEpEQXdhV1hKWEtXdVlkcUFDclNxOFA2S2xqenowZ0hoZDdoOVlicko4Z2Q2QVo2LUxqeW9SazNIeUw3SkhBM19zMndXRE5Rcmo4N3J6eVFETDcybVk3NkZRM2pRbEhMWURXeG5oSVluRVBjOTJRRTNCLWJvOTJpYmQwY0FqNU5vOGhDeWhDOWtPN1lXcTRjMGxEQUFUVTVtOHhBdjFBSlpYYzFVLU12Mk1WUUwzR3BrSmVoUVRFNHZKUUxFYTVWNDlxcTVuMHNFN1dlZFpMNldQZXJPMVlpLVlUeklnVXlOT0Rsb05ZbWNKOEwwUzZjYlhXNW5naXlzaEpCcG42Y1RWTHVYdXVFWlRVa3Q0LURJRE0wNTFtNmMxT3RWNW1nODdSVXA0TzdSZWJvXzhieTFaYVFHZkZpS2VGLVJ4YjZ6X3Y4QUY1Mzc5UmgzTllUQldiMWY1LV9hM2ZuQ0ZlUmF6U1BIaEswUEE1eEZrYUc0MTRXNmVaU1JyQ0JkWEc5S0R0aVJndVlqZ01Ic1dGNVdjUjdnU2thQlZ2MV9yY2poaDZxRTlIZzBQeFR6VHpEVnU0eVliTnViSTlVT1lmMjNmTUZlRU5ERGdITVFCdWxIb3RXOFA5THJOcDhIMUFTaDZrTndpNVZjZmdfMlJiYloxR2pnV1c5R0tLczA4dTdUeEVpZm5MS3lMLWNsUVk5cWphMXhyMjJmaFozdkI0RDhDdDlBMnlLaEwxUUI4d1dOcF9KTW9CSW93bjB1Z2R2X0NJRkNzUnROQ1NxejRUcmg0VFo5WU9UdGFmZWdjS0U1M1luVVBBb3ZxTGNabmlyOTl3dERjVkpqSEJFV3BBa25NaVhOVnJxTlpaRlNCaHpMdFN6Qk0xNHFEbnFNREprTEQ4cjFHYVdYaXdmS3ZKWF82UzgzU0xha29fZFl2eWlKZjJISkRYWUZlVjRHc25rRTQxNHBjNDBFdjRBOXBwODNkcF9XQ1A4Y3RJR0c3bTJqWDFFNHc3SnJfZWhXMzlNOUlvb0FrU1preXBydjYtbG1aenNOc1JmS09LYU1ZSGlPMlNjb1JfQ0NSUzBabFExcmNYcjVGYmhsNUFyUk5TeUNTX0ZYUGk3VFlXQkUtWTFQSWd1aWItUGVUMmRzTFd5OHJUX2MtT3I4dEtocG9TVENncjlMZXg5SEVFdExTUEJmOVdaTXBibEk5X0RUOTJYbUxwOHE3OXJWemsta01vQ2tjYUxsQ3JESEdjU0RoNUNRSG42ajY0ZVM0VzJvSEJrdkRWNTUtRF9WcG9sbUlGaFFGMEtjU1Fnd0hyTkZyRFBYcDNQSzdVNGtLZmltSklyNktIcEZjcHFLcmprdnJDZFFjNTVsQ1dRN0U5bEIyMXZkdTRjaWlmMDFBOFB0RlFIRngzY1JBOEZKR1lDNGhBMTJVVURqSlBqV0daMlRqc2djVEx6dldJc0VPdVZHRkY2cG9GZ1pUWGU3V0VsYzZ3UlN3bHVtMzVwZ1BoRkNPNlNXeUMxbVpNbHFreHBtN1pVYW0yNGtaRWJlbXc1WUhHZWh5ZGE5SnpPanBnVk1BTzJ5N3Y5cUlucVdOdUtjdmFGQnVyMjJhcE5IR3FPWnBUYzR3SHNWVlpMNFA0VjR5RmE2OUJfUkZYNTRTekN4cWZ6elBhNXJkTjhXd01BNC11dmdESnVVMHZoV0FSNzYxVEptd2psY1pGVTJadlQxekU0c2dRNlRzSTJ6RGtmbnp3ZmFEb1N3RFN0bEZTRHhiVXZpelJ3c2hKQ3pMeXpkZDA1UkpaVWlVeTd5dzBBRHdVV1BSUWsyTTFXRzZ3dTZVU2hHS3NrSmRHeW9OUUtQOWhGTGJEZ1B3Sl82em1qR1RuRmxwanVya2s5RVJvXzFoclZsRVhvZXE0N21nMHlXT3Jrb2QxRzJfUVNPYUJmQ0RvMnQ5Ni1mMHo4NGlwa1IyX1JRQUZxTkZsVDhRS0thVWJjdlFFOWFveWVqaUMxcVl0YVlEWnlTRndSNXNId19hYXhYaHJ0RHdZWHR1N3kwM0VORVh3a1BuNXVSSkxEZFNOcl9BZFlaMjRQdmtuVnF0THFMdVFTSi1OdlVhbTRkbnR0WVd1T1VLcmxIbDExZUtPVXFrRzZPMUk2LWZtUzduTTVsX1NzMlRFYXM0amJZczZqMjJqSkhsUnhHNmF4Vm1JeTdkU2pTdFdtVFk0UTJRN0JOMUJyYXdEVjZrUWRVNkFka21SaFhzMWhjVmhtNklQU2ZsLWpSM1FwTmloWktXUi13N0ZCb3FyUWg2cG5ZT3RzQ2VzQW5nOW1MRkVXOE1qTnZkQnI2RW1uOHJwRDlPYXV1RUE3ckd0Sm02OTBfdnhZNFFzV3J1QnliVm41OE83ek5hWU1wbG1ZN0prMVppT2JqWmkzcEE4VVN6Ti1sSm5MMjlwdDJTWTZNUVJxandtbWpuS2YtZm16a2RKQUZldkw5aFV5a255MVUzOEdqakFEa2tZbTdLaU51NG83MWEtc3NBdF9sOUJsTENEM01BWUNzUUJtNjlZRnR1SHRlVl9FUmsxMUxLc1dkSVNNdWRmMndCQWU4NXRiZkNoaURud09tRUFqQ3BDbEozQlJ0dnJ6NXF6eWYyX2xzYlo1QUtkUS0wNmxiX3dCbm5PRWFJUDZHNmd0QUZqSG1JS3RtYXhyRDNLQzFXbDVIeEREWWhHVlI5bFBuRmZTYzBMTU15MkxlcVRxS0xJamNpTF80UzVkZS0xMDZhMjRkWTZfRVlRTDhINHJ5YTBWc1Y1dnlvcFRhQ1pBTlBfMU9lbm82UmJaNW9Fa2IxUjFwVW0zYjlyMFgxNU9POTVBWERiWVNGZ1NCbE9tT1pYZEVGYllxbV8teHJBVENHeUVudGhkYjlJVU5Wb1g3Nk5EY2Y1cklNSWNDSHdfVm15RkZkb3NSZmhXNUtacjV3Y3U0SkNpdVQ5YTNoWnBzMG1maUhVM0RLM25TU3RmTVk1a25FelRCeVJweW5lTC1VTXQ5Uy1xWVo1ZURwU0Q2QjlLcTNZcmtFeEFjZ1puVll0YUZOT1U5QmtaTHJlOFZsSG9pNnBtQUMxX09QcHRjUWFJQmE0c25Ca2lHU2t6UkVHVm5ZUzNaY2RsSmhxMU5Dek9aaE1mX3RKQmF3M3FYZXR3SmZRSVFsbENJZUQ3NHNxQkRFTktsWFJDSWxmRjB6R2dneVFTeVhxeE53c3VoVlV2ZkRQR2hYOEcwM0lqTkFXMFdJYVIxMnR6M21aVWRYakRSUmYzbEhDOXI4bG9BQVM3X0ZXei1EVWY4b1hlRGtlcTkwSl9FbE5tb3RsXzZnTEtHNmhodWpPYWItdks3WE40UERNNllmckpJcTI3eW8xU19GWnBQRUpOYkFfYWc0allGaXhOSUhHeGJuVzNnLVFJdWRIT1ZlUm5Fd0N6RHJHT200YmM2Y2cxRTY1MURxZ2RzVmFLblNZM1FiclhoeUFHMzI5SnhsZTdCVGRpNEZ6VW52VWZEdzNFVFZqaklucjQwYkFnWVlqalBtNUQ4dnJyNndtSVJoRm9nQ1ZCTHN0SG5scDV2Mmg3SnBrTnhkajhJV2dzRlo2SXpQTlA5Um16RFlXaEp5dEZ4WFZOWWpLdjdPU2VqSUt1cFFSRjEyVVJsSi1sak5UWjdXZHZGUkxudVpRTlZUUWN0Mld3XzhfUi0weU9WLVdNUTVPeVFwdm10bUVvVHk2SUNHTEpFQlJQaGFnWFQxWG1jM0dDdHZjeW1FZmZGREJOV0FoRWNtN1NOSGI2eGtrMzctWjdBbmRJaWctbGdNUG9vQVktOGhYWkpaZHE2RU44MDNpaXhRZk1pb3lDak1DUFNzVm9WSkc4WFhLQk5sSFJXWW4zLWg0T1hNeXh6S3pvRTluWGZsQ1l4cWJxcG1xVE9DTXV6RzM3bi0zOUlfT3NvMFRFZjVpY3dFTTQtOVlqVDkydlB3RTUyWGxiVkpZRW45Q29uUG41SkJ6MjJraU9CbDBNUEpya0hNcTBNT0p1djhiYm1Wdzk4NUt1U1dRd3NoazJsRG5nLTlSUzV0NE9SUzB6MzFKWnhPZVl1Sk1JR3NDZm1vdVo2d3IzckN6OGl4ZlR2c1UwXzU3MUY2Y2ZLbE05MUw1WkpOWnVGdUZEdVFLVnhkdGFmSHIwYllUellfRU5mTzhoS0tEcWVsM3BENEUxZXpDQ0xYN05aM296dTlqTmZPblpvS1ZqSXVLNU1nakFDb1VfdnNhcU5rblVkVVZ6RFRrUzNpbk5GbDE5bGQ4TWYxOG5MbHdIOGoybWRhOGdrT1ljR0VDZWQwbVdtY1JsZzJUQmk4eDk3TllEeTJJb2t5c0k1cnlib0hjV1RLNVQ2UVNKaVVkYWFFVXdqYUtidl9HMzZFS1ZzUVhrRTZjRXBIbWkyd0ltd1dCNDFCLVpjSFg2UTlwTlBaZ1pDNGNKY2ZtMHlXaVozRUYwZF9Jd2hJaUhVV295aWVVV2otMHF0MUdkYlkyR3pUX0FwRWNqLXh0YktBenA2aklTVGZEMXB0WGlqSXp0MU9hcXEyTXlEcERHZnVmOUVsYW5sQm05ZGJqVzdvV3liNHpFYzQ5Qmd3LUNQU2hkVnpsUXp2eEw5QVZnX1pWLWo4cWMySDd1X09ZZU00RkhQUE5XZFJpUl9TWHVYRkJkUlJDX2x2Q2d0b3dwc3R1SXR4QnJSbTZOdGF2U05Ybms4MnFSNGgzNGJ4ZEVLeGxiM0ZEa0ZnbTdMNXRIOEZCMXhsdXBIemhORnZZRnlDbjRPLXZoRDc0dlpyX0dGX3hLT2RQT2RiYVhtZVNSU1JJRXVtenFZcTVUbUVfbWYtWVNZblVGbTMwcUVmYkotQUJJQ1BhS1ZyQmRXcFZwYjlDSl94UTdNTFRqQ1plem9zQ2RxZkhyQmxHQ2dGS051XzVGdHlVYWMzNDRhUEhmcjdoVS16aW5DX2hDa2J0UG9DSGtIOTlkajJ1blhXUWQwV0ROVmwzemEtZjYwQ2NUYzdMakMwSlhVb0g1NHlIbl8zZGktSDhYM2hueTAtNzMyZU1JdXFNeFBORDFLVTNyV29EX0lhS0dINFRBV25vRzNYbTJyNUpFVVBON0dGNzBiNVZTcDZiOGg1UjlfYTZQRE5ocHk0cHB0MmN5cXpFY3dzWFNES3JRbzBlcTVvTWpKZWtBTlRoV2pIZFVhTDJ0cE5rckJaakJlMWdzYW9JXzNsNVo5cnVDa0E2T0xBcDZHR0JGeVMwMDZNbThJTjRTYVpVMFBUczcybXhJbnp2LXdEV3g0NzBvMVlHcktRbzEtTUJZQUhoSWF3NmVKNVFZSmJDMXNLVkFRLXdDS1h5Q2sxSkFDVWZSUHNobktLZXBiaHFtekR1N0tTeDRWR05LNmJEczZhVGVhYkJqQlZzQjNDY09xSXctNmhFZm1Qeko2WWxWSC1qSFZhVGZ0Y281c0pGVVl1M3Z0Q1l0U1ZsN0pnaEJQVm5XQk12ZWY3cFozVG9BZnVheGZOazhWQ3JNVVF5X2Rub2o1Y3RXMS00VWxuRS1KZk1pYVQzTDJfOW00aU5oVlJoc1I0MHp5Wm5EWlRfcnFfbGpYUUhjMk04TmVCTFJpWUdTa1VDdHItUWZ3bTlJeE0ydTFsRnBZdVU2QWNzenB3TDNmMFJsQ0l6bG16akNkU2I4a1BvT1B3WFFFNmowOUlGcFl3VThScjFhX0NITG05WjJ5dURmMEVrbWZ3a1NscEhKdGRoeG5uQlpmQUVBUFdOYXljM21xZ0pxMWtfOHR2bEpMNl9iM1N6amJKeEJraEFxR0hadjVvMGVDcUx4bXdsR0dHdl9uWVJrajRUQWdrWktyTlB5WUxnNk5CcG45V1BBbGt4RHVwTFo3R0VRSk9IMXdUX3NqOUNIVVJkQmtsaDJGakpMMFh3QzNzTU9jUXM2a2JqOWw2aE9VY2VXMDBvcFFISEtMTUVGRnB4YUQxNFNsankxVnJ3NXc2TmZUWDNQRnQtT2M1MzVzd1VneVREcUdtLThZOVZnX3FJVjF1bk9VTU40M0hjY3NtYTUzZ01Cc2dVS2ZneDRTbjNnUGxweDIwSEsta1B1Wkh0ZGVnT1ZVVUpZWlVEVjRlNnJzRWE5V0h2bXdwQllaTk00ZkpyUmgzYkNuRUptcTB4T1YtRTlqb2FTcUhSX1k2dmZmYjA2NzVuNlF2QV9DVHBWX09NZDFhZWU5YUNNYWhKLWF5c3ZHVEtoWll3UENyVUo0d2N6R3JlU09NeUJUWktIbXhrSDJPeUdqaFFyOXFoWDRtWkYwUEU1NU90Yi14enpudVh4cGZsckxxbWhIZ3ZFZmY5amRwQW5PVnZHODJQTDJTT0lrWEZxa2tCZkpIVkJmS2QyLVlwRmRrOW90VU1lTVRlS09BanVkU3ZSZ0NIWnhPUzF4cF95bzFYX1ZNWk1jZlpLblk5bTY5THVpOGQ4Yndsc0o3MGUxbTZiWFNGaERfZmc4Mm1vOG1UV29qYkI2NHJKTGxTRmdXNHNLVlE3OHdsVnNYOEhTcklCOUtnOTJPSm9Lc0RZSkVreWdOUTF0OE9ubTVJb1U1MlMxSTdmUFk2bTNBM0dJZWtuQlF1QmhCYVJvZUZTMVpLVjhnWHlrMk85aTVySVh4MFM2MzNWaGdrQm55WXRhWkppbFBQaTNTTmJ0N1A3N3pZMGJaV1l3cUFNYk5xdEJiTXZkQzZBdWE5MXNYbzcyUDBwQnNuYU1RWHktVTdVRUlaaVN6X0lBVVFKOHdRYVJWaUZKY0lGWnN2QTMzMmtPU3NWX2ZrY0dTYzU3OWVTeW9iQnNESlpKVlh4WVdNWjdyVjU5eFBjWmhxR2Y2MkpsQkJnaDNIU09TdTl5V0MtTFFPQVZwRkxCQk10OVl3MmtHTGRlaHlyYlNkZjBJWGF2WUVUUUtXWEFsdE9QeUp0ZDJBMWNHeFZseFFPMUxMbUtxQUFDUW9pNkU2SFRPRU8zaTRCa2JGMzRSN1FIVXcwYTdEUC1hYTBYRHJyclVfcUZmX0JRRC00UFhJb1U3N1VDc1BsZXJUR1JlUjQ0MWZqa2VUeHl1X29NamlNaHdlQlduNzhjUkJZajUtbEtNdncxdWg0TXJkOVhpRXdLUjZZRldJaURZTHBRTDltWWVNRFRuYzUxUzRFR01nYVJfODYzdUdsRTJKTF92UFYwa2FqTllIaHBEaEJjcVA3dTRjNndkV2dlZFFuZG5uQ0tiQm1NNDJXRVBKb2I1YjZjTUhzbXRMNW4wT2k4VDVkTTJscFRRbkV2YkczREtKWXIyZEdhUWc5dk8waTNIcVdEbDV1RnNvVFZzSHFjbE5ILXh1LXRGVHFULWQ5LURYdnJEbTZUNzBVODB2RDlFVlpxY2RZME5WOEtudHk0UU01UklyS19ULXVzUkdPVmVsQXZHRXpPM3hlRDU1X2l1VkhEZEw1MjVWNjB0LXVBZnBfcDBBNnU3ek5YZklYSzBVUmtQem9iTktmOFFRVkFZTFlGTVVLeFh6c2IyY1ZSdWd2a2EwdVlCQVNiZUdsVEwwYS1tMWFISWYyYWtXYTlQRl9tQURKVThRc21WMWtGU0dyYVg1UG5TLWRwb3BMUFk0ZHJuSjBzSFhISVE4LWhqbUphT3h6WVdVV1hwOC1xRVBDd0RoTEdKVlJ3N3hVcWdxMkdTbFl5anN6UkJYMElDaENwM0hneDdBMzN3MDNTM1daR2dCNHhzdHJnd2pvOWhmWVN2VEZOY0NEaHRxM0FDLVYyMmpRdlV1YjNMeHdzX29KMlJtdmRPc3BYX1d5d1pkQ3RUWHVkQkZ1NTFaWU9jYjEzSW9oRjR0cVA3djNKbHllaEtUVjVEMnl1c1Z0WHdiMDdYbzczeTNxbTNnQlBGaTRFeEYzMGMtZGVNTVFHdGZuM25QUEx2enZ4czFaUFo4QlljY2RiOXBrcjd6bTlmYkllUmtNcmM1dFFZdXEydU5ReTJnYU9qZ1NPVVpyS1l0alpFMUl5cE5Wak1mTnBhd0dmVjV0TjRMWm9RMHJXeE9BTnRrbmIyamhSNjNqekZJNENNRkt2YVV2U09mM3VCRjB4WmJNYmg4cXA0UlQxSHJXOER2SjM5SDh6dHY1aE1TZG5wb283YV9iQmNldlViOUJRQzRfaFZLOGMyYVU0bmZUYnRwTkJEUzhYdVlGUkw0dUJ5RUlSV3ZoVFBBaThLM0o1ejFNRktERXZoYV9RRzF3Si40QWFXQzJsLWEzMTJicFZHMmp1Y25R"}'
         headers:
           Accept:
           - application/json
    @@ -221,12 +221,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/restore?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/restore?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keybak2e80e6d/7dc833bdbd234a21a60b4adcc4d5b904","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"2X9Uatod3UvEmsXFPcS-20Ji1Nr4TStz4Fe4mdSLHb2Bt4UoiHajXbfpPtwJFKr0IwbaL-5KsIsUh93wLXBkjnIk82pVhw65n7G0iO2vm_x-8sjWUYjBxZq3aeDA26BvxxdMJJSVgSwhD47L8UYoDQZ10-6mGUg2cn8wpyE6KpZRV7Xt3r-P6l3FyQosJer20wdCmqDaKUW9pMfTbwtO_nB9RhE0Zoszibw7_ksoq8HaN3xYGqBU6bsDWwXC5KqF3Xm-sLmbA-Jry9VJq-4SzgWa7jx8xvNYR0sjqtCfAZmt-bQGRuCYoKF9yt8sqOLev7bo0iZjt2Iz1y_lwhEb8w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676571,"updated":1575676571,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keybak2e80e6d/e82503072c544779bf15f512ae45afbf","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lfY9uQi-W9cPgsQMtCjbH-58QbzcCJmHDhVV1ln6bHOF4Zsr7M6tbxTskUrDL_4Mj6GzA9uFC-7evZTqbVJddgz8_7Kc1m49ez8XQ949ZgYRMktcx0CgOFch1hICtip8ELtzvKE-Wy8xFAY3-m9TtdLZTlXvXFieP9SUhbYDmdojbc8JtiTOU1a6eg0gPxXA8FV8JGGVmhv_2SP8vuTWNTHPp1WDJcLS6pR09FFBIkNkaiQlkxS02G8npJIytTSZW-wSOvBk5AW8YftnyJaDZHHck3e0VAgkS7TdK_ifOZyKiq28Vom_Qn99lR0c3DqKxLZgjTa8G3a2wohwHa4Yhw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -235,7 +235,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:10 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -249,11 +249,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_key_crud_operations.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_key_crud_operations.yaml
    index 2dd87a81e115..7dc6c27e787d 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_key_crud_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_key_crud_operations.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crud-ec-key/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-ec-key/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:09 GMT
    +      - Thu, 05 Mar 2020 23:16:27 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,19 +45,19 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 401
           message: Unauthorized
     - request:
    -    body: '{"attributes": {"enabled": true}, "tags": {"test name": "CreateECKeyTest",
    -      "purpose": "unit test"}, "kty": "EC-HSM"}'
    +    body: '{"kty": "EC-HSM", "attributes": {"enabled": true}, "tags": {"purpose":
    +      "unit test", "test name": "CreateECKeyTest"}}'
         headers:
           Accept:
           - application/json
    @@ -70,13 +70,13 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crud-ec-key/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-ec-key/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-ec-key/eca2dc7edb1b483898121de919f18b36","kty":"EC-HSM","key_ops":["sign","verify"],"crv":"P-256","x":"bZbFAsaqr1K5-RywzVA0-HmDzCE_oMUcQ33xPZ2Umjc","y":"QBi302Pq13shB4kPUmPeBTkJ_WBpoTG-KhwKFf1pRww"},"attributes":{"enabled":true,"created":1575676570,"updated":1575676570,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"test
    -        name":"CreateECKeyTest","purpose":"unit test"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-ec-key/33f1bb2b22c948e68e8d7dddd42146b5","kty":"EC-HSM","key_ops":["sign","verify"],"crv":"P-256","x":"qMsyLUUTPCVcXZpqk85-oZKCcSHA9TzHzMeX5_xxlPg","y":"4wr-wdOv4wFliaxy8M0Wd_ai5F77iCgxURxKjG6_tbI"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"purpose":"unit
    +        test","test name":"CreateECKeyTest"}}'
         headers:
           cache-control:
           - no-cache
    @@ -85,7 +85,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:09 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -99,18 +99,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"crv": "P-256", "kty": "EC"}'
    +    body: '{"kty": "EC", "crv": "P-256"}'
         headers:
           Accept:
           - application/json
    @@ -123,12 +123,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crud-P-256-ec-key/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-P-256-ec-key/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-P-256-ec-key/7b33d6ef7ae84ed593b1fef6218a4510","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"hPp5SPl7TDoH4gGzCvc_fI9nV5sssID4jTZLQmDhMjA","y":"aVBjrc1N9tNNkENSxL_E8c31HF-LzDd5G02RKVVJe1c"},"attributes":{"enabled":true,"created":1575676570,"updated":1575676570,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-P-256-ec-key/f274ca13291c476c863c3f53c7c33e14","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"b2DSw73pheioc8_BgILojCRCwkm0u1Oje2SIH4t9YNs","y":"jVe6kt-r9ANG9ZRIL4nrpRlmDrieZ8ODvWmWHV7uqpo"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -137,7 +137,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:10 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -151,25 +151,25 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"key": {"key_ops": ["encrypt", "decrypt", "sign", "verify", "wrapKey",
    -      "unwrapKey"], "n": "AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU",
    -      "qi": "AJ_nrkLpK8BPzVeARkvSHQyKwMWZ-a8CD95qsKfn0dOZAvXY-2xhQYTEwbED-0bpTNEKbIpA-ZkaHygmnzJkNbbFAnb9pkkzU8ZQqDP3JNgMfVIroWx58Oth9nJza2j7i-MkPRCUPEq3Ao0J52z7WJIiLji8TTVYW_NaiM1oxzsH",
    -      "e": "AQAB", "q": "AMPcZrZBqbc82DO8Q5zTT8ZXRGWrW36KktMllaIk1W2RHnRiQiW0jBWmcCgqUcQNHa1LwumjyNqwx28QBS37BTvG7ULGUoio6LrOeoiBGEMj-U19sX6m37plEhj5Mak7j3OPPY_T9rohjTW5aGGg9YSwq4jdz0RrmBX00ofYOjI3",
    +    body: '{"key": {"kty": "RSA", "key_ops": ["encrypt", "decrypt", "sign", "verify",
    +      "wrapKey", "unwrapKey"], "n": "AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU",
    +      "e": "AQAB", "d": "Ynx9JGaBSP4iUsf6ZJ6opantRNdcdmzaQrKbZg6ZQE8Ohi1FYabJWvaoPSE-CiJEsDzShXZHMhUHN4X7Bn8BXaGQhK3p9HXgiwQKmix7oAJTu4ElUIyd8UC3UWHSZr40el4PaQD-HYu_eMzCXus34MnRiNbh_BUWm6T-Eidhk9d3kNIyaSi9YNDQHW6tjWrEhhq63O7JU1j9ZonFChZxpKk20jdkQKQURVAdpOdL-5j4I70ZxFuU6wHZj8DS8oRQfwGOvZKbgYDb5jgf3UNL_7eACqq92XPVX56vm7iKbqeyjCqAIx5y3hrSRIJtZlWCwjYnYQGd4unxDLi8wmJWSQ",
           "dp": "AMmhWb5yZcu6vJr8xJZ-t0_likxJRUMZAtEULaWZt2DgODj4y9JrZDJP6mvckzhQP0WXk2NuWbU2HR5pUeCN2wieG1B76VKoH76vfnaJDqT1NuJVBcP2SLHog3ffwZtMME5zjfygchG3kihqOSpwTQ9ETAqAJTkRC38fEhwAz_Cp",
    -      "kty": "RSA", "p": "ANHerI1o3dLB_VLVmZZVss8VZSYN5SaeQ_0qhfOSgOFwj__waCFmy2EG7l6l6f_Z-Y0L7Mn_LNov68lyWSFa2EuQUeVj4UoFHc5Di8ZUGiSsTwFM-XMtNuv8HmGgDYLL5BIJD3eTz71LdgW-Ez38OZH34b7VeG8zfeUDb8Hi30zz",
    -      "d": "Ynx9JGaBSP4iUsf6ZJ6opantRNdcdmzaQrKbZg6ZQE8Ohi1FYabJWvaoPSE-CiJEsDzShXZHMhUHN4X7Bn8BXaGQhK3p9HXgiwQKmix7oAJTu4ElUIyd8UC3UWHSZr40el4PaQD-HYu_eMzCXus34MnRiNbh_BUWm6T-Eidhk9d3kNIyaSi9YNDQHW6tjWrEhhq63O7JU1j9ZonFChZxpKk20jdkQKQURVAdpOdL-5j4I70ZxFuU6wHZj8DS8oRQfwGOvZKbgYDb5jgf3UNL_7eACqq92XPVX56vm7iKbqeyjCqAIx5y3hrSRIJtZlWCwjYnYQGd4unxDLi8wmJWSQ",
    -      "dq": "AKC9TAo9n2RDaggjdLXK8kiLrBVoaWFTpqXkzYXRhtsx4vWPAkxhfSnze05rVMl6HiXv7FnE0f0wYawzUJzoyuXBH0zS6D9BqCZPeF543AmWB27iPf38Q9Z8Rjr6oBgMSnGDV_mm8nDVQkeaDyE4cOZh-5UKvKShTKKQVwunmDNH"}}'
    +      "dq": "AKC9TAo9n2RDaggjdLXK8kiLrBVoaWFTpqXkzYXRhtsx4vWPAkxhfSnze05rVMl6HiXv7FnE0f0wYawzUJzoyuXBH0zS6D9BqCZPeF543AmWB27iPf38Q9Z8Rjr6oBgMSnGDV_mm8nDVQkeaDyE4cOZh-5UKvKShTKKQVwunmDNH",
    +      "qi": "AJ_nrkLpK8BPzVeARkvSHQyKwMWZ-a8CD95qsKfn0dOZAvXY-2xhQYTEwbED-0bpTNEKbIpA-ZkaHygmnzJkNbbFAnb9pkkzU8ZQqDP3JNgMfVIroWx58Oth9nJza2j7i-MkPRCUPEq3Ao0J52z7WJIiLji8TTVYW_NaiM1oxzsH",
    +      "p": "ANHerI1o3dLB_VLVmZZVss8VZSYN5SaeQ_0qhfOSgOFwj__waCFmy2EG7l6l6f_Z-Y0L7Mn_LNov68lyWSFa2EuQUeVj4UoFHc5Di8ZUGiSsTwFM-XMtNuv8HmGgDYLL5BIJD3eTz71LdgW-Ez38OZH34b7VeG8zfeUDb8Hi30zz",
    +      "q": "AMPcZrZBqbc82DO8Q5zTT8ZXRGWrW36KktMllaIk1W2RHnRiQiW0jBWmcCgqUcQNHa1LwumjyNqwx28QBS37BTvG7ULGUoio6LrOeoiBGEMj-U19sX6m37plEhj5Mak7j3OPPY_T9rohjTW5aGGg9YSwq4jdz0RrmBX00ofYOjI3"}}'
         headers:
           Accept:
           - application/json
    @@ -182,12 +182,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/keys/import-test-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/import-test-key?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/import-test-key/313f8056ceab4cdba51eaa69e0774887","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB"},"attributes":{"enabled":true,"created":1575676570,"updated":1575676570,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/import-test-key/0a4b200a630b4c94a776f059ec5e5acf","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -196,7 +196,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:10 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -210,20 +210,20 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"key_ops": ["encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey"],
    -      "key_size": 2048, "tags": {"test name ": "CreateRSAKeyTest", "purpose": "unit
    -      test"}, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 2048, "key_ops": ["encrypt", "decrypt", "sign",
    +      "verify", "wrapKey", "unwrapKey"], "tags": {"purpose": "unit test", "test name
    +      ": "CreateRSAKeyTest"}}'
         headers:
           Accept:
           - application/json
    @@ -236,13 +236,13 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/c4fbaecb4bf04ff1bf1018e4558f7099","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wJx7mB4jscpPO0mxX83oQRVuYlGPGulVeR33J9V6s-H9E5eMyK-VzVDeobML9hheDz4q9f8nzYv0HjbuNvWJZ2jwTCjNUZ5RZ9mFSC5vWtiwEaxB3umSSzUzQLa7gU1FqyM5X6Ee0WA27sPYTubeHvJXNuQKpbrJvqTc9mPDiGFfFzLJtqYHSz7qz4wI0MzwlVSE-QP2f-fEF5FaNBadXtMzf04WafblW3GWqXOl8kHSmzBbUuMFC1K3RJyf3gx6g5QSnLfanYvnAyFMYjzNbG-FiXcYKTUSAHAKqYNm7lvhSW22jhlAnPhXESX0RBGLgHz4JqpfpD2XjN69wk6ngQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676570,"updated":1575676570,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"test
    -        name ":"CreateRSAKeyTest","purpose":"unit test"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/7bf4e3c6b49b4f54be193e4d722773ac","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0HyVwegv_swC1i0J1prbUk5PQYSiLidDot4r47q1lcNjMW_Sxh-X6gtwTGIZwgjaqPtJlVts8NtIhAsfRidHqiccWI0d4RTNyaGSZRDehKP71Kf9dH2e_Umszk9lPkrSb88Mr3q2BJsBHdVLnngd2bRusYAVEcYjFn0NynqEdK5MPenCQ_A7Z8NVhy5KreCnbS8O6NXegpsqnp4Q6h7vTYpQWjfvAD99pa2ALPFVdD3L1hmyqKDUwDpS9d4pSXTCUG5NZjgxsnKQltG1oO9L3uWJYH_bLjvgiYjeN0-kQl0zQPBN6HBKanVn1y1jck6T0W6BACNEF826c-pIUUCYJw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"purpose":"unit
    +        test","test name ":"CreateRSAKeyTest"}}'
         headers:
           cache-control:
           - no-cache
    @@ -251,7 +251,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:10 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -265,11 +265,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -285,13 +285,13 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/c4fbaecb4bf04ff1bf1018e4558f7099?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/7bf4e3c6b49b4f54be193e4d722773ac?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/c4fbaecb4bf04ff1bf1018e4558f7099","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wJx7mB4jscpPO0mxX83oQRVuYlGPGulVeR33J9V6s-H9E5eMyK-VzVDeobML9hheDz4q9f8nzYv0HjbuNvWJZ2jwTCjNUZ5RZ9mFSC5vWtiwEaxB3umSSzUzQLa7gU1FqyM5X6Ee0WA27sPYTubeHvJXNuQKpbrJvqTc9mPDiGFfFzLJtqYHSz7qz4wI0MzwlVSE-QP2f-fEF5FaNBadXtMzf04WafblW3GWqXOl8kHSmzBbUuMFC1K3RJyf3gx6g5QSnLfanYvnAyFMYjzNbG-FiXcYKTUSAHAKqYNm7lvhSW22jhlAnPhXESX0RBGLgHz4JqpfpD2XjN69wk6ngQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676570,"updated":1575676570,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"test
    -        name ":"CreateRSAKeyTest","purpose":"unit test"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/7bf4e3c6b49b4f54be193e4d722773ac","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0HyVwegv_swC1i0J1prbUk5PQYSiLidDot4r47q1lcNjMW_Sxh-X6gtwTGIZwgjaqPtJlVts8NtIhAsfRidHqiccWI0d4RTNyaGSZRDehKP71Kf9dH2e_Umszk9lPkrSb88Mr3q2BJsBHdVLnngd2bRusYAVEcYjFn0NynqEdK5MPenCQ_A7Z8NVhy5KreCnbS8O6NXegpsqnp4Q6h7vTYpQWjfvAD99pa2ALPFVdD3L1hmyqKDUwDpS9d4pSXTCUG5NZjgxsnKQltG1oO9L3uWJYH_bLjvgiYjeN0-kQl0zQPBN6HBKanVn1y1jck6T0W6BACNEF826c-pIUUCYJw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"purpose":"unit
    +        test","test name ":"CreateRSAKeyTest"}}'
         headers:
           cache-control:
           - no-cache
    @@ -300,7 +300,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:10 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -314,11 +314,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -334,13 +334,13 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/c4fbaecb4bf04ff1bf1018e4558f7099","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wJx7mB4jscpPO0mxX83oQRVuYlGPGulVeR33J9V6s-H9E5eMyK-VzVDeobML9hheDz4q9f8nzYv0HjbuNvWJZ2jwTCjNUZ5RZ9mFSC5vWtiwEaxB3umSSzUzQLa7gU1FqyM5X6Ee0WA27sPYTubeHvJXNuQKpbrJvqTc9mPDiGFfFzLJtqYHSz7qz4wI0MzwlVSE-QP2f-fEF5FaNBadXtMzf04WafblW3GWqXOl8kHSmzBbUuMFC1K3RJyf3gx6g5QSnLfanYvnAyFMYjzNbG-FiXcYKTUSAHAKqYNm7lvhSW22jhlAnPhXESX0RBGLgHz4JqpfpD2XjN69wk6ngQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676570,"updated":1575676570,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"test
    -        name ":"CreateRSAKeyTest","purpose":"unit test"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/7bf4e3c6b49b4f54be193e4d722773ac","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0HyVwegv_swC1i0J1prbUk5PQYSiLidDot4r47q1lcNjMW_Sxh-X6gtwTGIZwgjaqPtJlVts8NtIhAsfRidHqiccWI0d4RTNyaGSZRDehKP71Kf9dH2e_Umszk9lPkrSb88Mr3q2BJsBHdVLnngd2bRusYAVEcYjFn0NynqEdK5MPenCQ_A7Z8NVhy5KreCnbS8O6NXegpsqnp4Q6h7vTYpQWjfvAD99pa2ALPFVdD3L1hmyqKDUwDpS9d4pSXTCUG5NZjgxsnKQltG1oO9L3uWJYH_bLjvgiYjeN0-kQl0zQPBN6HBKanVn1y1jck6T0W6BACNEF826c-pIUUCYJw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"purpose":"unit
    +        test","test name ":"CreateRSAKeyTest"}}'
         headers:
           cache-control:
           - no-cache
    @@ -349,7 +349,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:10 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -363,11 +363,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -388,12 +388,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/c4fbaecb4bf04ff1bf1018e4558f7099","kty":"RSA","key_ops":["decrypt","encrypt"],"n":"wJx7mB4jscpPO0mxX83oQRVuYlGPGulVeR33J9V6s-H9E5eMyK-VzVDeobML9hheDz4q9f8nzYv0HjbuNvWJZ2jwTCjNUZ5RZ9mFSC5vWtiwEaxB3umSSzUzQLa7gU1FqyM5X6Ee0WA27sPYTubeHvJXNuQKpbrJvqTc9mPDiGFfFzLJtqYHSz7qz4wI0MzwlVSE-QP2f-fEF5FaNBadXtMzf04WafblW3GWqXOl8kHSmzBbUuMFC1K3RJyf3gx6g5QSnLfanYvnAyFMYjzNbG-FiXcYKTUSAHAKqYNm7lvhSW22jhlAnPhXESX0RBGLgHz4JqpfpD2XjN69wk6ngQ","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676570,"updated":1575676572,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/7bf4e3c6b49b4f54be193e4d722773ac","kty":"RSA","key_ops":["decrypt","encrypt"],"n":"0HyVwegv_swC1i0J1prbUk5PQYSiLidDot4r47q1lcNjMW_Sxh-X6gtwTGIZwgjaqPtJlVts8NtIhAsfRidHqiccWI0d4RTNyaGSZRDehKP71Kf9dH2e_Umszk9lPkrSb88Mr3q2BJsBHdVLnngd2bRusYAVEcYjFn0NynqEdK5MPenCQ_A7Z8NVhy5KreCnbS8O6NXegpsqnp4Q6h7vTYpQWjfvAD99pa2ALPFVdD3L1hmyqKDUwDpS9d4pSXTCUG5NZjgxsnKQltG1oO9L3uWJYH_bLjvgiYjeN0-kQl0zQPBN6HBKanVn1y1jck6T0W6BACNEF826c-pIUUCYJw","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450189,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control:
    @@ -403,7 +403,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:11 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -417,11 +417,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -439,12 +439,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key","deletedDate":1575676572,"scheduledPurgeDate":1583452572,"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/c4fbaecb4bf04ff1bf1018e4558f7099","kty":"RSA","key_ops":["decrypt","encrypt"],"n":"wJx7mB4jscpPO0mxX83oQRVuYlGPGulVeR33J9V6s-H9E5eMyK-VzVDeobML9hheDz4q9f8nzYv0HjbuNvWJZ2jwTCjNUZ5RZ9mFSC5vWtiwEaxB3umSSzUzQLa7gU1FqyM5X6Ee0WA27sPYTubeHvJXNuQKpbrJvqTc9mPDiGFfFzLJtqYHSz7qz4wI0MzwlVSE-QP2f-fEF5FaNBadXtMzf04WafblW3GWqXOl8kHSmzBbUuMFC1K3RJyf3gx6g5QSnLfanYvnAyFMYjzNbG-FiXcYKTUSAHAKqYNm7lvhSW22jhlAnPhXESX0RBGLgHz4JqpfpD2XjN69wk6ngQ","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676570,"updated":1575676572,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key","deletedDate":1583450190,"scheduledPurgeDate":1591226190,"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/7bf4e3c6b49b4f54be193e4d722773ac","kty":"RSA","key_ops":["decrypt","encrypt"],"n":"0HyVwegv_swC1i0J1prbUk5PQYSiLidDot4r47q1lcNjMW_Sxh-X6gtwTGIZwgjaqPtJlVts8NtIhAsfRidHqiccWI0d4RTNyaGSZRDehKP71Kf9dH2e_Umszk9lPkrSb88Mr3q2BJsBHdVLnngd2bRusYAVEcYjFn0NynqEdK5MPenCQ_A7Z8NVhy5KreCnbS8O6NXegpsqnp4Q6h7vTYpQWjfvAD99pa2ALPFVdD3L1hmyqKDUwDpS9d4pSXTCUG5NZjgxsnKQltG1oO9L3uWJYH_bLjvgiYjeN0-kQl0zQPBN6HBKanVn1y1jck6T0W6BACNEF826c-pIUUCYJw","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450189,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control:
    @@ -454,7 +454,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:11 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -468,11 +468,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -488,153 +488,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '80'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Fri, 06 Dec 2019 23:56:11 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      server:
    -      - Microsoft-IIS/10.0
    -      strict-transport-security:
    -      - max-age=31536000;includeSubDomains
    -      x-aspnet-version:
    -      - 4.0.30319
    -      x-content-type-options:
    -      - nosniff
    -      x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region:
    -      - westus
    -      x-ms-keyvault-service-version:
    -      - 1.1.0.883
    -      x-powered-by:
    -      - ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '80'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Fri, 06 Dec 2019 23:56:13 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      server:
    -      - Microsoft-IIS/10.0
    -      strict-transport-security:
    -      - max-age=31536000;includeSubDomains
    -      x-aspnet-version:
    -      - 4.0.30319
    -      x-content-type-options:
    -      - nosniff
    -      x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region:
    -      - westus
    -      x-ms-keyvault-service-version:
    -      - 1.1.0.883
    -      x-powered-by:
    -      - ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '80'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Fri, 06 Dec 2019 23:56:15 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      server:
    -      - Microsoft-IIS/10.0
    -      strict-transport-security:
    -      - max-age=31536000;includeSubDomains
    -      x-aspnet-version:
    -      - 4.0.30319
    -      x-content-type-options:
    -      - nosniff
    -      x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region:
    -      - westus
    -      x-ms-keyvault-service-version:
    -      - 1.1.0.883
    -      x-powered-by:
    -      - ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    @@ -646,7 +502,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:17 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -660,11 +516,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -680,9 +536,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    @@ -694,7 +550,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:19 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -708,11 +564,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -728,9 +584,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    @@ -742,7 +598,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:21 GMT
    +      - Thu, 05 Mar 2020 23:16:34 GMT
           expires:
           - '-1'
           pragma:
    @@ -756,11 +612,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -776,9 +632,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    @@ -790,7 +646,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:23 GMT
    +      - Thu, 05 Mar 2020 23:16:36 GMT
           expires:
           - '-1'
           pragma:
    @@ -804,11 +660,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -824,9 +680,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    @@ -838,7 +694,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:25 GMT
    +      - Thu, 05 Mar 2020 23:16:38 GMT
           expires:
           - '-1'
           pragma:
    @@ -852,11 +708,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -872,9 +728,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    @@ -886,7 +742,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:27 GMT
    +      - Thu, 05 Mar 2020 23:16:41 GMT
           expires:
           - '-1'
           pragma:
    @@ -900,11 +756,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -920,12 +776,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key","deletedDate":1575676572,"scheduledPurgeDate":1583452572,"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/c4fbaecb4bf04ff1bf1018e4558f7099","kty":"RSA","key_ops":["decrypt","encrypt"],"n":"wJx7mB4jscpPO0mxX83oQRVuYlGPGulVeR33J9V6s-H9E5eMyK-VzVDeobML9hheDz4q9f8nzYv0HjbuNvWJZ2jwTCjNUZ5RZ9mFSC5vWtiwEaxB3umSSzUzQLa7gU1FqyM5X6Ee0WA27sPYTubeHvJXNuQKpbrJvqTc9mPDiGFfFzLJtqYHSz7qz4wI0MzwlVSE-QP2f-fEF5FaNBadXtMzf04WafblW3GWqXOl8kHSmzBbUuMFC1K3RJyf3gx6g5QSnLfanYvnAyFMYjzNbG-FiXcYKTUSAHAKqYNm7lvhSW22jhlAnPhXESX0RBGLgHz4JqpfpD2XjN69wk6ngQ","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676570,"updated":1575676572,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key","deletedDate":1583450190,"scheduledPurgeDate":1591226190,"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/7bf4e3c6b49b4f54be193e4d722773ac","kty":"RSA","key_ops":["decrypt","encrypt"],"n":"0HyVwegv_swC1i0J1prbUk5PQYSiLidDot4r47q1lcNjMW_Sxh-X6gtwTGIZwgjaqPtJlVts8NtIhAsfRidHqiccWI0d4RTNyaGSZRDehKP71Kf9dH2e_Umszk9lPkrSb88Mr3q2BJsBHdVLnngd2bRusYAVEcYjFn0NynqEdK5MPenCQ_A7Z8NVhy5KreCnbS8O6NXegpsqnp4Q6h7vTYpQWjfvAD99pa2ALPFVdD3L1hmyqKDUwDpS9d4pSXTCUG5NZjgxsnKQltG1oO9L3uWJYH_bLjvgiYjeN0-kQl0zQPBN6HBKanVn1y1jck6T0W6BACNEF826c-pIUUCYJw","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450189,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control:
    @@ -935,7 +791,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:29 GMT
    +      - Thu, 05 Mar 2020 23:16:43 GMT
           expires:
           - '-1'
           pragma:
    @@ -949,11 +805,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -969,12 +825,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key","deletedDate":1575676572,"scheduledPurgeDate":1583452572,"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/c4fbaecb4bf04ff1bf1018e4558f7099","kty":"RSA","key_ops":["decrypt","encrypt"],"n":"wJx7mB4jscpPO0mxX83oQRVuYlGPGulVeR33J9V6s-H9E5eMyK-VzVDeobML9hheDz4q9f8nzYv0HjbuNvWJZ2jwTCjNUZ5RZ9mFSC5vWtiwEaxB3umSSzUzQLa7gU1FqyM5X6Ee0WA27sPYTubeHvJXNuQKpbrJvqTc9mPDiGFfFzLJtqYHSz7qz4wI0MzwlVSE-QP2f-fEF5FaNBadXtMzf04WafblW3GWqXOl8kHSmzBbUuMFC1K3RJyf3gx6g5QSnLfanYvnAyFMYjzNbG-FiXcYKTUSAHAKqYNm7lvhSW22jhlAnPhXESX0RBGLgHz4JqpfpD2XjN69wk6ngQ","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676570,"updated":1575676572,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key","deletedDate":1583450190,"scheduledPurgeDate":1591226190,"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/7bf4e3c6b49b4f54be193e4d722773ac","kty":"RSA","key_ops":["decrypt","encrypt"],"n":"0HyVwegv_swC1i0J1prbUk5PQYSiLidDot4r47q1lcNjMW_Sxh-X6gtwTGIZwgjaqPtJlVts8NtIhAsfRidHqiccWI0d4RTNyaGSZRDehKP71Kf9dH2e_Umszk9lPkrSb88Mr3q2BJsBHdVLnngd2bRusYAVEcYjFn0NynqEdK5MPenCQ_A7Z8NVhy5KreCnbS8O6NXegpsqnp4Q6h7vTYpQWjfvAD99pa2ALPFVdD3L1hmyqKDUwDpS9d4pSXTCUG5NZjgxsnKQltG1oO9L3uWJYH_bLjvgiYjeN0-kQl0zQPBN6HBKanVn1y1jck6T0W6BACNEF826c-pIUUCYJw","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450189,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control:
    @@ -984,7 +840,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:31 GMT
    +      - Thu, 05 Mar 2020 23:16:43 GMT
           expires:
           - '-1'
           pragma:
    @@ -998,11 +854,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_key_list.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_key_list.yaml
    index eba04eb752bf..7886ccc5633c 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_key_list.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_key_list.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:06 GMT
    +      - Thu, 05 Mar 2020 23:16:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,21 +69,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/b6d32c1425254ba1a54b5bceb2aa3928","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4KAfG2lNMN7VkEyNFJL-tmP4QXfSvxzgpaBBbkdtIc9f08np2Oo8OSI9EP1LwkSeSYMcgUvkupx7fgDQ7UW22cuD58SWPV6CLNU4_t1Xx-tMykriCMswPoinyCoQfVAaj7uFo66RO3m53t4GvLL2OkQ67IjpC7R94ebv6zNUqc4b5e-uvqCgZdSCQEj5uNM0SFYj_k2OIoSWJl3oYjS8WerCR8z0hifvC4FN0GA9UB8n6n2sU2NaYQInT44on2CyUzIkimUyIxywj5JUuOum54wJm6-LjpifoqkuU-xFsF9zInpf9xqPDJCEUXVGeijX8QxM4iVM4JNIloEhLBJhWQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676567,"updated":1575676567,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/560cf098c15440dda54dbcacdf4e6bd4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4l2WLbuVeH64W6dWuM1KRquNZZRBn-AUlVFl_jt7LBluaoVzzx2_fBRsO5v7Ojrn0osH66eFUYkYWpHD1GTD-Dr_jYvTf7IEXjJdGak9nYLTYn-CZ9YvRWT0ixwUfAl3EOMSgbIDEbOpwSOoaJnaxNLR8eYuWqIyIhzvklDerjbW_dqtT9oYUWzUX07E_VfxyCOK8iNHEepnlgagAKmfXrrpY758SDwahy5bLe1VxBtUkTABNOEHCPaTORL-5cRM3d0CuaPEhd0F7SzWemmcRfxPO0Zps2bMhTr_vwrIPYe3AN2rqRSxUwCmNHHd5MRfm_y6-scT1bmJeYh__QNCsQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '651'
    +      - '663'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:06 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -121,21 +121,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/fbc20472226843c09628b734da4a5f13","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"uZba4vK2hbvC42Ky2z8uMu25nTfG5bruJrdB1P3pKmnkBzLVUzvvM7DouVOBRHpMC997QLhc5WGy7OVZhQPXLsvxMavrEWDwEqGyWWyPYqXLSdRkw4sGAlALKaRz5kBxXWxbf2jf-2kmjNnKAai0dQ_ZAesrc4-BkaSmenB0p5bfx6B_QdTjG_2-vC44bNpYy1TpX4hm_H5tPuoVYVgp3MkSOhYK-dwiPeF9twjsxyQyDF_FF5hSghg9K7JoqMdbGHVAWyHa6eW5T8xQdKa_IZ0juGl2FQLEft3OhEUyQHONQ8CnycvCMCw8KY1ItXq_gRsmvIagtcO4PpBr2HQpYw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676567,"updated":1575676567,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/99989304ff9f4dcb9e9567a35fb5a060","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4wuhMxj_MdrwVtQuwNK75Ekw4dS7yuqV5PIj7zCTJIrP2nHa07unGIy1NTraDAe36RVs9BowYjdpK2Gb_kDgQlukCVxJGsaapiA64rQcW2z7JkalLpl0E7iXK2ejzdKu8skuYkjTYb-_0KCh5Ja84ZqTd3Vjy8IydjP8XmIlqZ2cNEI4OLy9GhaHYQwcuLlTETfVP1ThY1e_Wqs9hppoPIHFoWiWeYAmHZbkBs0E6WEmF-S9Mz0AzuPwqdtGoysgS0teewgRokuc3Xw3RPxvqhcMcywr-YNEDpTgANM1gb-Vxj9qKT028hcavlVnBYAC29dq1iy48vXnaCdTIIGbIQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '651'
    +      - '663'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:07 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,11 +149,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -173,21 +173,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/95cc79e1f006477cb5b07176d8b224fe","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"1PwiMisZkgSYBoI8CIFi1wYsOq0RwJOOswMvkiq1lRClfuRWX_2G8ReFuQMKkIyLmUnWXvQaPun2W6__Wlrf0MCjQrfafgmn2gp2f7dApElF-UbaI9Jg8VB5VrFAHEv2USXMfdBscaYAgU6PRdvbZRsCVL4RNz-1yph36s_1cw9XnEyE-AcLWF8mP-p-wjsXQC5Rpx5o0QNiHPQpFaTqLFgvSlj5SFRKpKm2R6ot5cCB5oQzotDSADWAGebwhE1i1zn5_roUDWz5tif-UYesUXAN6xj8EK-jJQa2PfcKBh3RZHXZKb-2LCotOnU0yzyal6J3ESq6DWDd65gZkGEL3Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676567,"updated":1575676567,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/6ab58038bf114e4daf08a46cbf137fd5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"usAWehBDeziLvT2SnYaKjGVYi10YhA3b7pHGWa-TxF4lC0DxdT_tDfx3ntLWE1jOsD7sYrNYJjRxpBXuEYQNO-no-Jk5Wz4OY6CxKRg5R3fdtawW8FK9TMBC77NPx6deidwhKL3ih8Uq1G5oI5spndgXD1BA3qsUwyzHQ5LG7AK6x-EyoXXzXxuPHG6vDbwIgdfF-_on6DiEo79jQlhmPgdSyJLDcTA5ePoJMS15o_qJP7vbKBymEEd9fctDwihQHdovs8TngZckv-KEY7b-SI5lfsfHQtZFZMGjMdAhHW3ACtJ7Ozy2lVue6Bkdj4tpsfYJ8WSP5JOq-pPsLg0SLw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '651'
    +      - '663'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:07 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -201,11 +201,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -225,21 +225,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/a82c26786ac944de93cd5431a62bbc73","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lqZFFKKfyPVKBSiB4VMUEdYYqgOc0ZXdQuZzsozae3Sdlzy_h30cnNANcG91Jc0pQck6zxOTgNdrU6zYQgri5DiIY0kKtY3euycoxlW9jdqwUDUYZcxN4mHIAUZsk0mAujTE9gPexRhdu9t4Z-aj_NofwgnAOo3AngQ7s3ol1cTC7OEOLIZqmvcZjVXEHBZu8o9lxR2ewFpIUUpzd7IVRejjmHVEpxGGBsak8GFytzbUvur3pF_EVrnJ4Vg17SDlWqMCSReVUm52RI-8bBGupmU4k0AUcFQzMLzV2yrDWNGEzRYqO5y5j0h1lA4F5ve47eP0-ptzWCYmw4NSbyu1Vw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676567,"updated":1575676567,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/a5291cba4ddd4841b38d2b8825fbf9bd","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"u2lE22U4RRcMvK4HSKVu6CDeynPvGkiEZs5YpE19__cjgRChd4M58h9_0V5iqe3XpWv7wPHSMkyVDl5AjH49iKkFFQN0QTfhTOenRu88umcr0SnY8_cgViCQP4FYM8ajTfxr1eWy_aGhc0yc5rJWoOHsupVDwATEBIBocUD-Lu5qtE-2UJ86TIcsp1Nin7jRMNenurLWhYe_gARZNHgasfJaQP19UbCtNoKp7chYHxr6zMbS5teBR4LT_lcJdBChhDfix7YSElqRYuHDH6kQ5RFhXEvAdrf3qCVguNrX_MgcpL0a-AVImYS6lxpkJCQioAGJg8uo6nQjiuCn2Ya6dQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '651'
    +      - '663'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:07 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -253,11 +253,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -277,21 +277,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/21f155b8e5eb490b8fc746288cba3ce4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wkR3Zf0INfo4b2NpIZaJryqEWyGG6uKmAijt1dhYvQRWDTQNL4TfOXafKiMyaVJxmk3BVGPA7VddrljzTaIhXgHyoMx3z8UZ_yNvKBtpIhs6XRJFI9kBogrVhmX5h6uNMw29ksJ6gZrPy4K4x06AO9orKUWy8Y8HLYa86b7izkCIromSiEszX_Lg2yH5fLkRK6lCgXnMS17QUID_mbTdo_jFh_xNeLFQCoWQwGDinqarEm2r3kx3I7pUcCw6MNseqEXrO8DSdVhKkKD7fi8r47_bSgaRdVcLjUZbz8bAtIdWzvPDg_qyFFIgUr5B8IMgArGx8NjRoMiLxN3rkfnpFQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676568,"updated":1575676568,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/8bd1946050cc428b9b5ec30567653120","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"rZmIF2wvHQ7YP85xk1cK3ueKpGMkA69YkOmM0TnVC-7huWmlfzWKwRoAzykJgEnc3dvF8xi4MhLqGv59bUwQbIgqa43_3HtVFQkyQJja85cYx25yWBEkhUXq-uLctea9_BORok0guuCYW8NlEVN2xKq3kjvCRjMbW6s1By8o9FdYBPaZGG5-EOpqs_gaLhOXWcFtKWy90sdqp83Q3EW49PGS-z51w5OgJjzmygnnFFs4mcKFi2Y-xQTOPNFYKNGmMjD4K3pbZ_v65kh983XVBYEHJ6pB4USZ8UBijWuQrTNQEjjsQQ6fWwk_2AGINHmBwpn_Zi8Zb2STS8MntNQA0Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '651'
    +      - '663'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:07 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -305,11 +305,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -329,21 +329,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/72698e9e29d041fbb192ec9c5739e099","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"q3U-9EZ29RWtEtyKTgEQTE_Y4KM8D6CtmCDsbQ7YN78NO59FLrl6hSfX2iLdXZ8ecxEC-IERlHBAGnIUty6mo6xKk1LaxFBnIHGHjJ4BeskUuyU0KbVw9Hbj7mdq9ZEBVqxaXAPvgxTmA2hBqCbcFW1nANRyd35MDQ5pZ9zVG_SN6qERPQtelwA7rQv3GhvQR0c94mAi89euJyoJ60GjFrT7VV3y90bocsf32GeIsuJI5SGQHzzurtGEaMdoW6aTOct8NgY6tWGOO-MMKsSLzDr3TJVP2EuqtYWuUaYF25z360zlNHqN7saj0OMBOK3wtrJczKpRlHxSg3CoopH4_w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676568,"updated":1575676568,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/7af3ffb2b1f94a0ebace11a33223b267","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"22_OfSZtxI4xNvrsy61rKryeeyzkpGtNf3R0dB_rxfLRymamdREXGvQMJ1aOzR1kADaW3xm4fmM10CXnMmrhBhH5O31LYoWkPtrNWvBJRVhwzO_aobeGLREMeeBJFqVvclrlCaTTV71U68nHXT9v554mqfL3EuO7ZfuyFwyP6SmDrzCsn5avGdBySwhQkfFyqEqFCGLhGon_jiOXIdSqPiEkW-AtvN3e9v7A3bz9K0n8xQC4lfz7_kA5I9yQbek48dZ3MxImH8j5kTK-Sr01Q9BsNoe18MSRb7sWbP6-bR_9yXpKHDEzaRkn5bwWFI_E7a08EgofU3zAFO912Tb9vw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '651'
    +      - '663'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:07 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -357,11 +357,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -381,21 +381,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/75b160816be044039be9eb11e26b8397","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"j7CkSwhIBoghq6fgF3uWru0CRVyuVKVTZDz5ejyqOBxkxKHt7itt7w19w5ww7fSeegb2GTUg7vlakUS2mJBxl1G_-Z5NN4B-R7Vf4JpwaUvqKnyurwZZ_RsSKZ9_I8jW-yvaxE3x5Qv2y_ER77hRIwNenZBlB0P2EdRlIuvF7YdW0H6z8NeBsATzjfHgu40udyYntkVStCY9Wd5vhc451do1zyrAuDmUti2nNKmAIPXhgD36gsrXAU1TgazVJTTYh51qNGT_1kXB-VPM1qZocXiQFdfDbCqM2VmMmy0wAGKdkvzN5AeNKyj490hcGSd57l3x3UoD0PcNB6Q-xVZwTQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676568,"updated":1575676568,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/4e8d3f64456644dca52b3a09e49a65cc","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0baumG8TEvbeK9Q5-aFA3EJ8JVOTY44jPHowObJdnicZCiFSuXQxgq4XZqqJQfDGhbZltTO1Cad0UJ7qpELTyByRWnFc8-Z6zc-Cbyk_JRzGGZ-58tUa7PtA8Dt8ljdcdk8WA8nhZOfuP5WIOMmEL4nz7rMPD3MDJf7xM6ItRaBIdBhY7QYx3khhft10npWki4DiKEBipX1DNQYnbfS2IBhS9B0fyoCNfcLvAtKvT_JDAzFDKfYHxEEWbRdKQLt4a7FRC1QyuYpY_hNpMw0byG1PW_0nbMx4Ks8VjjaKSsw5_GP0J9zNumlcRgSVcjH9QDBjzg71HfJTbu32PfWNFQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '651'
    +      - '663'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:07 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -409,11 +409,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -429,21 +429,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys?api-version=7.0&maxresults=6
    +    uri: https://vaultname.vault.azure.net/keys?maxresults=6&api-version=7.1-preview
       response:
         body:
    -      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1575676567,"updated":1575676567,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1575676567,"updated":1575676567,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1575676567,"updated":1575676567,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1575676567,"updated":1575676567,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key4","attributes":{"enabled":true,"created":1575676568,"updated":1575676568,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key5","attributes":{"enabled":true,"created":1575676568,"updated":1575676568,"recoveryLevel":"Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/keys?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3MiFNREF3TURBNElXdGxlUzlMUlZrMklUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'
    +      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key4","attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key5","attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/keys?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3MiFNREF3TURBNElXdGxlUzlMUlZrMklUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1288'
    +      - '1368'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:08 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -457,11 +457,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -477,21 +477,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3MiFNREF3TURBNElXdGxlUzlMUlZrMklUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
    +    uri: https://vaultname.vault.azure.net/keys?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3MiFNREF3TURBNElXdGxlUzlMUlZrMklUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
       response:
         body:
    -      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/key6","attributes":{"enabled":true,"created":1575676568,"updated":1575676568,"recoveryLevel":"Purgeable"}}],"nextLink":null}'
    +      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/key6","attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '196'
    +      - '208'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:08 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -505,11 +505,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_list_deleted_keys.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_list_deleted_keys.yaml
    index 05c10cf4253e..1fe1975bc702 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_list_deleted_keys.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_list_deleted_keys.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:43 GMT
    +      - Thu, 05 Mar 2020 23:46:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,12 +69,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/6b019e5ce4a64cbc9ddc5df36bc08475","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pkDF9Ufns5Y4FrdDICDtPzTpRxtO5BEc5H2Ua2QHciXrmIcodH3tKBdvYQTq7KxVLvjJX4clFkXixPNsORlNIK0NIDBTKk2a9fUV4Lt4TIQuCX3GmcAAus54n-gmiu0kvF43SL74zaQ4FRCwJepSGDPGi6yVbrgd86_MD-xicksqOp8pjqu0aVoWBFDaZJ-RDBSiXzWVowu9XNBPQHXpBUGjQ9jJe1TgEUyOUolZfYdcURltnB-FBbvqEHnunsmvO_Vt6CyVjWQeRY7ABrKfphOAjHpXk-ICXxJduTOlN_nkGE4ro5D1mDTUaVhI4BMkDal5ReibjKEEVA3NbNY7wQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/f43a940b8e5b49d0bc8b0dc3d39862d0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"j24FnnilHNJ_A6fLxYFN-ko3KQd2Gxl996tMIKhHp3ZZ3AIXP_zwuy20XOznSkKMZyqaJNfF-SroHZ1_2fSVGIQlTVyDTUTNqn5Mrx_Z-1gwMIRPFgrNfxFOzo1qW4SIwvTtSfz7y6KBp0dD4g2f5TnppRx_WhZKetELQFKQ5QolLza1YsEt7AQ-EJVTbg95ISelH4aP3EVcxuJcm0X6WTc4AK98ZaZ-Clo4m2Qn78M6dqWzDsKmovgNVtUQPWy3I6oj0jFHvWYg9Zogu7gHpB5DoZuQBbJ5SVGchKNEY4OB3KBpcH3CkworxmQNQlHV5QAVRZZdW_X42HD63ZxZwQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -83,7 +83,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:46:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -121,12 +121,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/d4cde69ac6ed4236a1dfeba10689b7bb","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xTHdlKP1Tmwpb96dug4yw6meQBl5lzijc-E74FArmTQkQr2lPKBW2okzORN0qPiSVumaSa6XjBJbjotVEhyTr-DDln6_SVb0555j691B9M2VZa24TW3SHbFTicZEpArqlx2vw3Z5ouyovcOQlhIkT0uFynAz_IqqSnnwi1v6ng8DS3FNzNSRyCT_cJmavUCbUeBK7swOOwCwyZqcVbJtA6kH-VnYYJSKCwv_9oSawxRgkTbGbs_65nbP8k35KBhgptUXDV3cd0qiODX0Mdcn5l67AXkZr1h9JTEgay17iChEUVbRboMMFRLeSHUJWDTqHfNxz-Iov-eVTzwYLX3kqw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/eed2e94cabbc4f918b77649921ac72c1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pVZLUBkrC9232oadojpAvGM0xSWLQ6SGmtSRktR56hYaFGGvUDqLYbSihmTBZYqtkOFkg2zWjN8TXR7tDArTpgSbH4KkpDJQYf5svDDOEhdZf4mKA6ikRwV_XzKIKbZimJu_cE5HwKZOOSziv9BCSK2FIWGYQq-NXJSYz8iRj3lNQeIl-1jh4r_Qub_KixYqmmYHDnSM464_EQs93BZW6vHQDXISeIFsZB1rxsVtO57qkL0UxDzLu-dX09VKm94g0tedxOHN3zLD4HVCwGuxB8dEEjg7ZLjqbQk1KbXa9uIzAoLx7b0TtyzjBisGv0cET0oVJ7eTGv2YVcNHLmyiqQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -135,7 +135,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:46:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,11 +149,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -173,12 +173,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/451a5ddf0ce947b7a20f1695266d73d5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"1z49X0COGRurQDqvOYZga9th2fBr7ew-PHyfuPPBHXbioHgO_Zlv8gMAmBIk-1Cfde4sY1hJoGT8A_59RTybZxB1qTPwsVKots5qkeKoEzQKC2MFgopbc6-1kYJBBCCgKsD5a088LvbhPci2svN7jswetGiW1M36EOvykr5Fa84cRYPi31MB7diLm0ZYT5foe6HuKOGUNQz1D2azStwcPMKGX_1cWzxb0vVvleEfORazShVj2RfKc10kOrk7_TwLkPW7Zvs0Z1scTkszshswzDeepMwRG53k4f6i7pPzJHHJno6YjOIVD0H0jimoOxtecdwjoA0fMCZ0mjLF_EXqdQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/9283f868b72d4c5e8106f52ba235140c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ie9RYOB5byM5RHHh8aKjOlhOhWz5W4jLhK1etOG9_YG1JmW1ZkKrXDvsdY5hOAK1ORoUcuPQhj-0jI9b64pCy2NgJyaGHJDOcI-licSwNca9hsBBSmkaG1zLwQOclKpHAqtKg58O3qoOlBbvDes8f-I_iWXujyWnknyE1p3patuLYc_y-7pCroG5S_JaX04X-WDGZLVbnNlKfBMrHPQPALFfs8ci5SUlvoTAdgTp1M_5BjrTlElYNTrVCmyOWUxQ6lR6Ib2l3iZYToObTzv3ze4lo8vhEjCFHU3UShl20Jj7OdX8G8fVw7OGLD0a_9essc5AbLZw-ygpbEJTBqnwfw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -187,7 +187,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -201,11 +201,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -225,12 +225,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/428da93594b34749a0cf11b19fd23fa8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wFEEKkNz8VXhw0fhMVuEP7LyVGGWUb8SEoIKkjBjz6jH5oY9Jqi_4HZv4U2LOoXtM_J-jiH8fQTJxw5c5v2fdmj9w_xDA2G8tbhTimTtKVbZlnR591k-b4w7QKBcJMWRQoTZiAd2naDGXN-AGMTZ58mMj2Hx3payUnfgOqLdwmTwCWryMe956IG0TnEEDwvnwanxWxVT6K2HFj8GD-5aUiDgn3iMYLXJ5U58tdkkciQns-vztZvo6ADw2ZQYs_P-k1uaPZcTrjz4Pc0xs8FMfB01M8hfhVUrF8qk8VnNHQf1ZFVMd7lj5sI7HTLMy1WAcO3SdSSQX2xEG3DhoK3ukQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/681ab62815234571a2b38460a7d651d1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nUchgKnjRLYB8MSnWJafa-Iz-GerlixCYHGh2WOakw43DWHhUjWlRLDLP91dTV5jj_AUJl-1qmHJeTIW0Sjm1IOWEXUk0otMvDupTTlWGrOEQKhT4RBAeHtANkCkverNQ96A2yjipLHYytgCCAhKH1TW0puTN_sDrSiZzRE11sN4BRTui0Ujr9Ssi1XLMkCgsTDGDhRBGqk_BL3vAXRALvJr-5AVNnsrIT4J1_tYaA8JyMOwAalZH0vTyuSBIX0AVTTPDJ7zd3-Lhnwwj8A2dg_LsJ3Ja9VGLqd99Vnmf1yJNXvYCFKDAcuo1QGXo77QVkfvxmjzaAbaMzY6XnYjXw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -239,7 +239,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -253,11 +253,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -277,12 +277,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/28b97380c6bf4088985c81b8c8ae8a7b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"unnofKjJ8eVn-wvtJzrNHbA0KotlsijqkpsSJMqWxUBx28Ut3BCZswdlpzsfBM88HV3JfwcFYT0S80bCHH1fwHaShAEvKGqumYHdPfXWT7XpLyfVpuDw9v1uB3LzMSBwQbQnYoaY3ZF3bZTc20jiGcFg2iVCxu_aEmL1pp6JoyNT05GGenzv3Tu8epJXhtIwwsMshTEMGxKYKE97XQQHDTquTXWDL959zf0ecWVvEnrbqwwhUyZ-fjlbOTP9Yd9HnYWcMRKnkgvQwWYB4Yi8M_QIKSHhND73MQnJj_kX_mvHm4n9Csy37CQX5Rpb-PiWTt34vhlEabrJ4LhbmtKrIQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/34477c0febc645de9e7920cfb77daaf2","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"r0Hl53VS06-tFxG7sJVG190gdGBc6VGHjK9UgpcO6EVJ4gY85xe7TfwGYJbXWJVviprupNHgx-ZeNdRuv02GuYlavYObveNimgzP2S7Wm0PyPu0TNiEv3x-MLDJue4Ytc3XcvBb6meSxzkv1uEOMUJK5q6e7PssCaDlun4NcutNQkakUBjYY4OzhYbTjBIhFY2Lk1JEsNXxy8Hs2j52TORQ-dvg8vgZgqgOm4Tu4BnYCcAHPgdkwCmDYBkf56ZKa940Y1yXLifkPNhea-Cgqzw2a5Ga-rempBhH1yEpd_9mGchuIFFzl4B9xcm5oJNWWXHaMkBXey0WgIPdpFfdHSw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -291,7 +291,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -305,11 +305,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -329,12 +329,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/4319a43b2dfb4448afb58f9ca282d7a3","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"rJ5yH48U8cdKLO_W2nKZbV7eSr3rZT57foCzjWMbbDGRH05w54MyV2KgBJoBlrlcWoFFB9pFwBrJxvvK89YN1f9MzdpUMHJLKUu3nbgfKavtLvcjaSKXPKUC8fiDIRq6DiPhRWBc-h0Qr27ZOXZv1nczqnwAlzhjO0Wu690aVQ0UHuCxU-LXMMJ-6OTfY1cTbVk9LOAFjiASipBSMY1_Y1kmFrQ3dIPHuR9PxsYsdE3ysYjDqdL8sJAeYn8H2ijS1yzUooHuB1TfiTukdmRInLVmx5e2z0WsyPBIWdPPrudG4p7AP5dJGfLm16C0wIQWSRjCIkO7ucSNYS0FIxaTAQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/41cae253e1bb4a889173242cbe703f66","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qIU7aeRbVRcFHeHdIlYrLQcYvBP0xPj0EMhpKFdlIJEiQfyfToiBx8Lf0HftfB0NtuJAeWzpNFf36TDfNtR7aBcamDqgV-ZItoUzHfyfZtjMJniyRhVVi4k5wkIrBYNDBRp5zkTubeZsDMOTtTHCeQoepYk-HaNx08Zo0Lhi0WJPScUbKhoaycfCsoOMMuz8FrZogxixEbLXK14q_YDhC8zUfcnTz9__fTuZ00P09xE7XXbjak2WbNJFTewCb19Omffp5GirTPW5LsBagrX6XoRFdSVS4yhUEDxBE5NOeQ1J82OruKd-4NpaJV_Lv_SBEk1z1rPuNW8xu2xut0PULQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -343,7 +343,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -357,11 +357,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -381,12 +381,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/1e79f49f568940f8b2528a0a1eccfe02","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"osR6-bfHE8hF4z-obcQT2MG0UaZJwV7tr-pNTJuI83oojJXh2nyHlMAYUZignFMO_PkJeIyqDUoyMkmJ-blVG2FUPbL8ewDtLRFKs03LQX23JJGaUnatgMEVBKcCJwfffKGJtHF3OgLCyUr4yomx9Vn-ajxOL4o_LXvMR6LAahM8WU5FTD5fmEaLqm3zGiNyCz13cHhWe2dQcGqkhf-IkmHD4eY3fg9fJLj_yo6qpuxqGTEa7PNhEJDpgm6APJvEliIkWg67RMgrLcH17vNu7tYOHByxrc4p939T8_x9yAcQVSiiuZIqEfscuaYKGIO039RuvOdlwqbYl3JVRWFl7w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/9de95936234c465888581bbab670eeca","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"t_82aCsBJRSerrUw8FXIHW97efhQ34Dts5jWuhxSECURlAgMAgmOSm-sPaTzP2r52rLCIA8lKdQ2BkTvAK50kHBfioxzUrVjK8tNwQWfk98LkP_v2Y9VW-Q4fEG493zhs5pT44PXIgLs1Ua7mqYiUXvNPx28Qv-MGdz_NecNsf7fCO7VLytCyzASo1bddT2UwuyrKynXK6ya4ETqcYyAWvbua0XP_0IyvwWT5T6VFxIrLsinaD6Yk-LBBtxpsLBnVk7SmOme1imjKGxxcjt9EttwBtorr5nNXGnwcyw90aptMid3OuianhXg7aFZuLc3FWSOYh9gjl037A1_EzVlYw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -395,7 +395,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:45 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -409,11 +409,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -431,12 +431,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676605,"scheduledPurgeDate":1583452605,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/4319a43b2dfb4448afb58f9ca282d7a3","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"rJ5yH48U8cdKLO_W2nKZbV7eSr3rZT57foCzjWMbbDGRH05w54MyV2KgBJoBlrlcWoFFB9pFwBrJxvvK89YN1f9MzdpUMHJLKUu3nbgfKavtLvcjaSKXPKUC8fiDIRq6DiPhRWBc-h0Qr27ZOXZv1nczqnwAlzhjO0Wu690aVQ0UHuCxU-LXMMJ-6OTfY1cTbVk9LOAFjiASipBSMY1_Y1kmFrQ3dIPHuR9PxsYsdE3ysYjDqdL8sJAeYn8H2ijS1yzUooHuB1TfiTukdmRInLVmx5e2z0WsyPBIWdPPrudG4p7AP5dJGfLm16C0wIQWSRjCIkO7ucSNYS0FIxaTAQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583451971,"scheduledPurgeDate":1591227971,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/f43a940b8e5b49d0bc8b0dc3d39862d0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"j24FnnilHNJ_A6fLxYFN-ko3KQd2Gxl996tMIKhHp3ZZ3AIXP_zwuy20XOznSkKMZyqaJNfF-SroHZ1_2fSVGIQlTVyDTUTNqn5Mrx_Z-1gwMIRPFgrNfxFOzo1qW4SIwvTtSfz7y6KBp0dD4g2f5TnppRx_WhZKetELQFKQ5QolLza1YsEt7AQ-EJVTbg95ISelH4aP3EVcxuJcm0X6WTc4AK98ZaZ-Clo4m2Qn78M6dqWzDsKmovgNVtUQPWy3I6oj0jFHvWYg9Zogu7gHpB5DoZuQBbJ5SVGchKNEY4OB3KBpcH3CkworxmQNQlHV5QAVRZZdW_X42HD63ZxZwQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -445,7 +445,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:45 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -459,11 +459,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -479,12 +479,734 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:24 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:28 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583451971,"scheduledPurgeDate":1591227971,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/f43a940b8e5b49d0bc8b0dc3d39862d0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"j24FnnilHNJ_A6fLxYFN-ko3KQd2Gxl996tMIKhHp3ZZ3AIXP_zwuy20XOznSkKMZyqaJNfF-SroHZ1_2fSVGIQlTVyDTUTNqn5Mrx_Z-1gwMIRPFgrNfxFOzo1qW4SIwvTtSfz7y6KBp0dD4g2f5TnppRx_WhZKetELQFKQ5QolLza1YsEt7AQ-EJVTbg95ISelH4aP3EVcxuJcm0X6WTc4AK98ZaZ-Clo4m2Qn78M6dqWzDsKmovgNVtUQPWy3I6oj0jFHvWYg9Zogu7gHpB5DoZuQBbJ5SVGchKNEY4OB3KBpcH3CkworxmQNQlHV5QAVRZZdW_X42HD63ZxZwQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '801'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583451997,"scheduledPurgeDate":1591227997,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/eed2e94cabbc4f918b77649921ac72c1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pVZLUBkrC9232oadojpAvGM0xSWLQ6SGmtSRktR56hYaFGGvUDqLYbSihmTBZYqtkOFkg2zWjN8TXR7tDArTpgSbH4KkpDJQYf5svDDOEhdZf4mKA6ikRwV_XzKIKbZimJu_cE5HwKZOOSziv9BCSK2FIWGYQq-NXJSYz8iRj3lNQeIl-1jh4r_Qub_KixYqmmYHDnSM464_EQs93BZW6vHQDXISeIFsZB1rxsVtO57qkL0UxDzLu-dX09VKm94g0tedxOHN3zLD4HVCwGuxB8dEEjg7ZLjqbQk1KbXa9uIzAoLx7b0TtyzjBisGv0cET0oVJ7eTGv2YVcNHLmyiqQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '801'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control:
           - no-cache
    @@ -493,7 +1215,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:45 GMT
    +      - Thu, 05 Mar 2020 23:46:39 GMT
           expires:
           - '-1'
           pragma:
    @@ -507,11 +1229,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -527,12 +1249,252 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:46:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control:
           - no-cache
    @@ -541,7 +1503,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:47 GMT
    +      - Thu, 05 Mar 2020 23:46:51 GMT
           expires:
           - '-1'
           pragma:
    @@ -555,11 +1517,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -575,12 +1537,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control:
           - no-cache
    @@ -589,7 +1551,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:49 GMT
    +      - Thu, 05 Mar 2020 23:46:53 GMT
           expires:
           - '-1'
           pragma:
    @@ -603,11 +1565,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -623,12 +1585,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control:
           - no-cache
    @@ -637,7 +1599,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:51 GMT
    +      - Thu, 05 Mar 2020 23:46:55 GMT
           expires:
           - '-1'
           pragma:
    @@ -651,11 +1613,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -671,21 +1633,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583451997,"scheduledPurgeDate":1591227997,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/eed2e94cabbc4f918b77649921ac72c1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pVZLUBkrC9232oadojpAvGM0xSWLQ6SGmtSRktR56hYaFGGvUDqLYbSihmTBZYqtkOFkg2zWjN8TXR7tDArTpgSbH4KkpDJQYf5svDDOEhdZf4mKA6ikRwV_XzKIKbZimJu_cE5HwKZOOSziv9BCSK2FIWGYQq-NXJSYz8iRj3lNQeIl-1jh4r_Qub_KixYqmmYHDnSM464_EQs93BZW6vHQDXISeIFsZB1rxsVtO57qkL0UxDzLu-dX09VKm94g0tedxOHN3zLD4HVCwGuxB8dEEjg7ZLjqbQk1KbXa9uIzAoLx7b0TtyzjBisGv0cET0oVJ7eTGv2YVcNHLmyiqQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:53 GMT
    +      - Thu, 05 Mar 2020 23:46:57 GMT
           expires:
           - '-1'
           pragma:
    @@ -699,16 +1661,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -718,22 +1680,24 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    +      Content-Length:
    +      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583452018,"scheduledPurgeDate":1591228018,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/9283f868b72d4c5e8106f52ba235140c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ie9RYOB5byM5RHHh8aKjOlhOhWz5W4jLhK1etOG9_YG1JmW1ZkKrXDvsdY5hOAK1ORoUcuPQhj-0jI9b64pCy2NgJyaGHJDOcI-licSwNca9hsBBSmkaG1zLwQOclKpHAqtKg58O3qoOlBbvDes8f-I_iWXujyWnknyE1p3patuLYc_y-7pCroG5S_JaX04X-WDGZLVbnNlKfBMrHPQPALFfs8ci5SUlvoTAdgTp1M_5BjrTlElYNTrVCmyOWUxQ6lR6Ib2l3iZYToObTzv3ze4lo8vhEjCFHU3UShl20Jj7OdX8G8fVw7OGLD0a_9essc5AbLZw-ygpbEJTBqnwfw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:55 GMT
    +      - Thu, 05 Mar 2020 23:46:57 GMT
           expires:
           - '-1'
           pragma:
    @@ -747,16 +1711,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -767,12 +1731,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -781,7 +1745,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:57 GMT
    +      - Thu, 05 Mar 2020 23:46:57 GMT
           expires:
           - '-1'
           pragma:
    @@ -795,11 +1759,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -815,12 +1779,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -829,7 +1793,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:59 GMT
    +      - Thu, 05 Mar 2020 23:47:00 GMT
           expires:
           - '-1'
           pragma:
    @@ -843,11 +1807,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -863,12 +1827,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -877,7 +1841,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:01 GMT
    +      - Thu, 05 Mar 2020 23:47:02 GMT
           expires:
           - '-1'
           pragma:
    @@ -891,11 +1855,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -911,12 +1875,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -925,7 +1889,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:03 GMT
    +      - Thu, 05 Mar 2020 23:47:04 GMT
           expires:
           - '-1'
           pragma:
    @@ -939,11 +1903,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -959,12 +1923,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -973,7 +1937,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:05 GMT
    +      - Thu, 05 Mar 2020 23:47:06 GMT
           expires:
           - '-1'
           pragma:
    @@ -987,11 +1951,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1007,12 +1971,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1021,7 +1985,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:07 GMT
    +      - Thu, 05 Mar 2020 23:47:08 GMT
           expires:
           - '-1'
           pragma:
    @@ -1035,11 +1999,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1055,12 +2019,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1069,7 +2033,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:09 GMT
    +      - Thu, 05 Mar 2020 23:47:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -1083,11 +2047,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1103,12 +2067,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1117,7 +2081,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:11 GMT
    +      - Thu, 05 Mar 2020 23:47:12 GMT
           expires:
           - '-1'
           pragma:
    @@ -1131,11 +2095,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1151,12 +2115,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1165,7 +2129,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:13 GMT
    +      - Thu, 05 Mar 2020 23:47:14 GMT
           expires:
           - '-1'
           pragma:
    @@ -1179,11 +2143,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1199,21 +2163,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676605,"scheduledPurgeDate":1583452605,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/4319a43b2dfb4448afb58f9ca282d7a3","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"rJ5yH48U8cdKLO_W2nKZbV7eSr3rZT57foCzjWMbbDGRH05w54MyV2KgBJoBlrlcWoFFB9pFwBrJxvvK89YN1f9MzdpUMHJLKUu3nbgfKavtLvcjaSKXPKUC8fiDIRq6DiPhRWBc-h0Qr27ZOXZv1nczqnwAlzhjO0Wu690aVQ0UHuCxU-LXMMJ-6OTfY1cTbVk9LOAFjiASipBSMY1_Y1kmFrQ3dIPHuR9PxsYsdE3ysYjDqdL8sJAeYn8H2ijS1yzUooHuB1TfiTukdmRInLVmx5e2z0WsyPBIWdPPrudG4p7AP5dJGfLm16C0wIQWSRjCIkO7ucSNYS0FIxaTAQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:15 GMT
    +      - Thu, 05 Mar 2020 23:47:17 GMT
           expires:
           - '-1'
           pragma:
    @@ -1227,16 +2191,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -1246,24 +2210,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key6?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676638,"scheduledPurgeDate":1583452638,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/1e79f49f568940f8b2528a0a1eccfe02","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"osR6-bfHE8hF4z-obcQT2MG0UaZJwV7tr-pNTJuI83oojJXh2nyHlMAYUZignFMO_PkJeIyqDUoyMkmJ-blVG2FUPbL8ewDtLRFKs03LQX23JJGaUnatgMEVBKcCJwfffKGJtHF3OgLCyUr4yomx9Vn-ajxOL4o_LXvMR6LAahM8WU5FTD5fmEaLqm3zGiNyCz13cHhWe2dQcGqkhf-IkmHD4eY3fg9fJLj_yo6qpuxqGTEa7PNhEJDpgm6APJvEliIkWg67RMgrLcH17vNu7tYOHByxrc4p939T8_x9yAcQVSiiuZIqEfscuaYKGIO039RuvOdlwqbYl3JVRWFl7w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:17 GMT
    +      - Thu, 05 Mar 2020 23:47:19 GMT
           expires:
           - '-1'
           pragma:
    @@ -1277,16 +2239,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -1297,12 +2259,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1311,7 +2273,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:17 GMT
    +      - Thu, 05 Mar 2020 23:47:20 GMT
           expires:
           - '-1'
           pragma:
    @@ -1325,11 +2287,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1345,21 +2307,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583452018,"scheduledPurgeDate":1591228018,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/9283f868b72d4c5e8106f52ba235140c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ie9RYOB5byM5RHHh8aKjOlhOhWz5W4jLhK1etOG9_YG1JmW1ZkKrXDvsdY5hOAK1ORoUcuPQhj-0jI9b64pCy2NgJyaGHJDOcI-licSwNca9hsBBSmkaG1zLwQOclKpHAqtKg58O3qoOlBbvDes8f-I_iWXujyWnknyE1p3patuLYc_y-7pCroG5S_JaX04X-WDGZLVbnNlKfBMrHPQPALFfs8ci5SUlvoTAdgTp1M_5BjrTlElYNTrVCmyOWUxQ6lR6Ib2l3iZYToObTzv3ze4lo8vhEjCFHU3UShl20Jj7OdX8G8fVw7OGLD0a_9essc5AbLZw-ygpbEJTBqnwfw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:20 GMT
    +      - Thu, 05 Mar 2020 23:47:22 GMT
           expires:
           - '-1'
           pragma:
    @@ -1373,16 +2335,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -1392,22 +2354,24 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    +      Content-Length:
    +      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583452043,"scheduledPurgeDate":1591228043,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/681ab62815234571a2b38460a7d651d1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nUchgKnjRLYB8MSnWJafa-Iz-GerlixCYHGh2WOakw43DWHhUjWlRLDLP91dTV5jj_AUJl-1qmHJeTIW0Sjm1IOWEXUk0otMvDupTTlWGrOEQKhT4RBAeHtANkCkverNQ96A2yjipLHYytgCCAhKH1TW0puTN_sDrSiZzRE11sN4BRTui0Ujr9Ssi1XLMkCgsTDGDhRBGqk_BL3vAXRALvJr-5AVNnsrIT4J1_tYaA8JyMOwAalZH0vTyuSBIX0AVTTPDJ7zd3-Lhnwwj8A2dg_LsJ3Ja9VGLqd99Vnmf1yJNXvYCFKDAcuo1QGXo77QVkfvxmjzaAbaMzY6XnYjXw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:22 GMT
    +      - Thu, 05 Mar 2020 23:47:23 GMT
           expires:
           - '-1'
           pragma:
    @@ -1421,16 +2385,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -1441,12 +2405,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1455,7 +2419,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:24 GMT
    +      - Thu, 05 Mar 2020 23:47:23 GMT
           expires:
           - '-1'
           pragma:
    @@ -1469,11 +2433,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1489,12 +2453,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1503,7 +2467,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:26 GMT
    +      - Thu, 05 Mar 2020 23:47:25 GMT
           expires:
           - '-1'
           pragma:
    @@ -1517,11 +2481,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1537,12 +2501,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1551,7 +2515,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:28 GMT
    +      - Thu, 05 Mar 2020 23:47:27 GMT
           expires:
           - '-1'
           pragma:
    @@ -1565,11 +2529,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1585,21 +2549,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676638,"scheduledPurgeDate":1583452638,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/1e79f49f568940f8b2528a0a1eccfe02","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"osR6-bfHE8hF4z-obcQT2MG0UaZJwV7tr-pNTJuI83oojJXh2nyHlMAYUZignFMO_PkJeIyqDUoyMkmJ-blVG2FUPbL8ewDtLRFKs03LQX23JJGaUnatgMEVBKcCJwfffKGJtHF3OgLCyUr4yomx9Vn-ajxOL4o_LXvMR6LAahM8WU5FTD5fmEaLqm3zGiNyCz13cHhWe2dQcGqkhf-IkmHD4eY3fg9fJLj_yo6qpuxqGTEa7PNhEJDpgm6APJvEliIkWg67RMgrLcH17vNu7tYOHByxrc4p939T8_x9yAcQVSiiuZIqEfscuaYKGIO039RuvOdlwqbYl3JVRWFl7w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:30 GMT
    +      - Thu, 05 Mar 2020 23:47:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -1613,16 +2577,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -1632,24 +2596,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key3?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676652,"scheduledPurgeDate":1583452652,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/428da93594b34749a0cf11b19fd23fa8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wFEEKkNz8VXhw0fhMVuEP7LyVGGWUb8SEoIKkjBjz6jH5oY9Jqi_4HZv4U2LOoXtM_J-jiH8fQTJxw5c5v2fdmj9w_xDA2G8tbhTimTtKVbZlnR591k-b4w7QKBcJMWRQoTZiAd2naDGXN-AGMTZ58mMj2Hx3payUnfgOqLdwmTwCWryMe956IG0TnEEDwvnwanxWxVT6K2HFj8GD-5aUiDgn3iMYLXJ5U58tdkkciQns-vztZvo6ADw2ZQYs_P-k1uaPZcTrjz4Pc0xs8FMfB01M8hfhVUrF8qk8VnNHQf1ZFVMd7lj5sI7HTLMy1WAcO3SdSSQX2xEG3DhoK3ukQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:32 GMT
    +      - Thu, 05 Mar 2020 23:47:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -1663,16 +2625,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -1683,9 +2645,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    @@ -1697,7 +2659,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:32 GMT
    +      - Thu, 05 Mar 2020 23:47:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -1711,11 +2673,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1731,9 +2693,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    @@ -1745,7 +2707,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:34 GMT
    +      - Thu, 05 Mar 2020 23:47:35 GMT
           expires:
           - '-1'
           pragma:
    @@ -1759,11 +2721,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1779,9 +2741,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    @@ -1793,7 +2755,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:36 GMT
    +      - Thu, 05 Mar 2020 23:47:38 GMT
           expires:
           - '-1'
           pragma:
    @@ -1807,11 +2769,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1827,9 +2789,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    @@ -1841,7 +2803,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:38 GMT
    +      - Thu, 05 Mar 2020 23:47:40 GMT
           expires:
           - '-1'
           pragma:
    @@ -1855,11 +2817,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1875,9 +2837,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    @@ -1889,7 +2851,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:40 GMT
    +      - Thu, 05 Mar 2020 23:47:42 GMT
           expires:
           - '-1'
           pragma:
    @@ -1903,11 +2865,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1923,9 +2885,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    @@ -1937,7 +2899,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:42 GMT
    +      - Thu, 05 Mar 2020 23:47:44 GMT
           expires:
           - '-1'
           pragma:
    @@ -1951,11 +2913,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1971,9 +2933,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    @@ -1985,7 +2947,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:45 GMT
    +      - Thu, 05 Mar 2020 23:47:46 GMT
           expires:
           - '-1'
           pragma:
    @@ -1999,11 +2961,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2019,12 +2981,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676652,"scheduledPurgeDate":1583452652,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/428da93594b34749a0cf11b19fd23fa8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wFEEKkNz8VXhw0fhMVuEP7LyVGGWUb8SEoIKkjBjz6jH5oY9Jqi_4HZv4U2LOoXtM_J-jiH8fQTJxw5c5v2fdmj9w_xDA2G8tbhTimTtKVbZlnR591k-b4w7QKBcJMWRQoTZiAd2naDGXN-AGMTZ58mMj2Hx3payUnfgOqLdwmTwCWryMe956IG0TnEEDwvnwanxWxVT6K2HFj8GD-5aUiDgn3iMYLXJ5U58tdkkciQns-vztZvo6ADw2ZQYs_P-k1uaPZcTrjz4Pc0xs8FMfB01M8hfhVUrF8qk8VnNHQf1ZFVMd7lj5sI7HTLMy1WAcO3SdSSQX2xEG3DhoK3ukQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583452043,"scheduledPurgeDate":1591228043,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/681ab62815234571a2b38460a7d651d1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nUchgKnjRLYB8MSnWJafa-Iz-GerlixCYHGh2WOakw43DWHhUjWlRLDLP91dTV5jj_AUJl-1qmHJeTIW0Sjm1IOWEXUk0otMvDupTTlWGrOEQKhT4RBAeHtANkCkverNQ96A2yjipLHYytgCCAhKH1TW0puTN_sDrSiZzRE11sN4BRTui0Ujr9Ssi1XLMkCgsTDGDhRBGqk_BL3vAXRALvJr-5AVNnsrIT4J1_tYaA8JyMOwAalZH0vTyuSBIX0AVTTPDJ7zd3-Lhnwwj8A2dg_LsJ3Ja9VGLqd99Vnmf1yJNXvYCFKDAcuo1QGXo77QVkfvxmjzaAbaMzY6XnYjXw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2033,7 +2995,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:47 GMT
    +      - Thu, 05 Mar 2020 23:47:48 GMT
           expires:
           - '-1'
           pragma:
    @@ -2047,11 +3009,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2069,12 +3031,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676669,"scheduledPurgeDate":1583452669,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/d4cde69ac6ed4236a1dfeba10689b7bb","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xTHdlKP1Tmwpb96dug4yw6meQBl5lzijc-E74FArmTQkQr2lPKBW2okzORN0qPiSVumaSa6XjBJbjotVEhyTr-DDln6_SVb0555j691B9M2VZa24TW3SHbFTicZEpArqlx2vw3Z5ouyovcOQlhIkT0uFynAz_IqqSnnwi1v6ng8DS3FNzNSRyCT_cJmavUCbUeBK7swOOwCwyZqcVbJtA6kH-VnYYJSKCwv_9oSawxRgkTbGbs_65nbP8k35KBhgptUXDV3cd0qiODX0Mdcn5l67AXkZr1h9JTEgay17iChEUVbRboMMFRLeSHUJWDTqHfNxz-Iov-eVTzwYLX3kqw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583452068,"scheduledPurgeDate":1591228068,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/34477c0febc645de9e7920cfb77daaf2","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"r0Hl53VS06-tFxG7sJVG190gdGBc6VGHjK9UgpcO6EVJ4gY85xe7TfwGYJbXWJVviprupNHgx-ZeNdRuv02GuYlavYObveNimgzP2S7Wm0PyPu0TNiEv3x-MLDJue4Ytc3XcvBb6meSxzkv1uEOMUJK5q6e7PssCaDlun4NcutNQkakUBjYY4OzhYbTjBIhFY2Lk1JEsNXxy8Hs2j52TORQ-dvg8vgZgqgOm4Tu4BnYCcAHPgdkwCmDYBkf56ZKa940Y1yXLifkPNhea-Cgqzw2a5Ga-rempBhH1yEpd_9mGchuIFFzl4B9xcm5oJNWWXHaMkBXey0WgIPdpFfdHSw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2083,7 +3045,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:49 GMT
    +      - Thu, 05 Mar 2020 23:47:48 GMT
           expires:
           - '-1'
           pragma:
    @@ -2097,11 +3059,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2117,12 +3079,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2131,7 +3093,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:49 GMT
    +      - Thu, 05 Mar 2020 23:47:48 GMT
           expires:
           - '-1'
           pragma:
    @@ -2145,11 +3107,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2165,12 +3127,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2179,7 +3141,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:51 GMT
    +      - Thu, 05 Mar 2020 23:47:50 GMT
           expires:
           - '-1'
           pragma:
    @@ -2193,11 +3155,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2213,12 +3175,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2227,7 +3189,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:53 GMT
    +      - Thu, 05 Mar 2020 23:47:52 GMT
           expires:
           - '-1'
           pragma:
    @@ -2241,11 +3203,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2261,12 +3223,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2275,7 +3237,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:55 GMT
    +      - Thu, 05 Mar 2020 23:47:54 GMT
           expires:
           - '-1'
           pragma:
    @@ -2289,11 +3251,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2309,12 +3271,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2323,7 +3285,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:57 GMT
    +      - Thu, 05 Mar 2020 23:47:56 GMT
           expires:
           - '-1'
           pragma:
    @@ -2337,11 +3299,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2357,12 +3319,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2371,7 +3333,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:59 GMT
    +      - Thu, 05 Mar 2020 23:47:58 GMT
           expires:
           - '-1'
           pragma:
    @@ -2385,11 +3347,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2405,12 +3367,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2419,7 +3381,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:01 GMT
    +      - Thu, 05 Mar 2020 23:48:00 GMT
           expires:
           - '-1'
           pragma:
    @@ -2433,11 +3395,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2453,12 +3415,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2467,7 +3429,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:03 GMT
    +      - Thu, 05 Mar 2020 23:48:03 GMT
           expires:
           - '-1'
           pragma:
    @@ -2481,11 +3443,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2501,12 +3463,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2515,7 +3477,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:05 GMT
    +      - Thu, 05 Mar 2020 23:48:05 GMT
           expires:
           - '-1'
           pragma:
    @@ -2529,11 +3491,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2549,12 +3511,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2563,7 +3525,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:07 GMT
    +      - Thu, 05 Mar 2020 23:48:07 GMT
           expires:
           - '-1'
           pragma:
    @@ -2577,11 +3539,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2597,21 +3559,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676669,"scheduledPurgeDate":1583452669,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/d4cde69ac6ed4236a1dfeba10689b7bb","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xTHdlKP1Tmwpb96dug4yw6meQBl5lzijc-E74FArmTQkQr2lPKBW2okzORN0qPiSVumaSa6XjBJbjotVEhyTr-DDln6_SVb0555j691B9M2VZa24TW3SHbFTicZEpArqlx2vw3Z5ouyovcOQlhIkT0uFynAz_IqqSnnwi1v6ng8DS3FNzNSRyCT_cJmavUCbUeBK7swOOwCwyZqcVbJtA6kH-VnYYJSKCwv_9oSawxRgkTbGbs_65nbP8k35KBhgptUXDV3cd0qiODX0Mdcn5l67AXkZr1h9JTEgay17iChEUVbRboMMFRLeSHUJWDTqHfNxz-Iov-eVTzwYLX3kqw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:09 GMT
    +      - Thu, 05 Mar 2020 23:48:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -2625,16 +3587,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -2644,24 +3606,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key2?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/451a5ddf0ce947b7a20f1695266d73d5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"1z49X0COGRurQDqvOYZga9th2fBr7ew-PHyfuPPBHXbioHgO_Zlv8gMAmBIk-1Cfde4sY1hJoGT8A_59RTybZxB1qTPwsVKots5qkeKoEzQKC2MFgopbc6-1kYJBBCCgKsD5a088LvbhPci2svN7jswetGiW1M36EOvykr5Fa84cRYPi31MB7diLm0ZYT5foe6HuKOGUNQz1D2azStwcPMKGX_1cWzxb0vVvleEfORazShVj2RfKc10kOrk7_TwLkPW7Zvs0Z1scTkszshswzDeepMwRG53k4f6i7pPzJHHJno6YjOIVD0H0jimoOxtecdwjoA0fMCZ0mjLF_EXqdQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:11 GMT
    +      - Thu, 05 Mar 2020 23:48:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -2675,16 +3635,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -2695,12 +3655,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2709,7 +3669,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:11 GMT
    +      - Thu, 05 Mar 2020 23:48:13 GMT
           expires:
           - '-1'
           pragma:
    @@ -2723,11 +3683,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2743,12 +3703,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2757,7 +3717,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:13 GMT
    +      - Thu, 05 Mar 2020 23:48:15 GMT
           expires:
           - '-1'
           pragma:
    @@ -2771,11 +3731,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2791,21 +3751,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583452068,"scheduledPurgeDate":1591228068,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/34477c0febc645de9e7920cfb77daaf2","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"r0Hl53VS06-tFxG7sJVG190gdGBc6VGHjK9UgpcO6EVJ4gY85xe7TfwGYJbXWJVviprupNHgx-ZeNdRuv02GuYlavYObveNimgzP2S7Wm0PyPu0TNiEv3x-MLDJue4Ytc3XcvBb6meSxzkv1uEOMUJK5q6e7PssCaDlun4NcutNQkakUBjYY4OzhYbTjBIhFY2Lk1JEsNXxy8Hs2j52TORQ-dvg8vgZgqgOm4Tu4BnYCcAHPgdkwCmDYBkf56ZKa940Y1yXLifkPNhea-Cgqzw2a5Ga-rempBhH1yEpd_9mGchuIFFzl4B9xcm5oJNWWXHaMkBXey0WgIPdpFfdHSw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:15 GMT
    +      - Thu, 05 Mar 2020 23:48:17 GMT
           expires:
           - '-1'
           pragma:
    @@ -2819,16 +3779,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -2838,22 +3798,24 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    +      Content-Length:
    +      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583452098,"scheduledPurgeDate":1591228098,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/41cae253e1bb4a889173242cbe703f66","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qIU7aeRbVRcFHeHdIlYrLQcYvBP0xPj0EMhpKFdlIJEiQfyfToiBx8Lf0HftfB0NtuJAeWzpNFf36TDfNtR7aBcamDqgV-ZItoUzHfyfZtjMJniyRhVVi4k5wkIrBYNDBRp5zkTubeZsDMOTtTHCeQoepYk-HaNx08Zo0Lhi0WJPScUbKhoaycfCsoOMMuz8FrZogxixEbLXK14q_YDhC8zUfcnTz9__fTuZ00P09xE7XXbjak2WbNJFTewCb19Omffp5GirTPW5LsBagrX6XoRFdSVS4yhUEDxBE5NOeQ1J82OruKd-4NpaJV_Lv_SBEk1z1rPuNW8xu2xut0PULQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:17 GMT
    +      - Thu, 05 Mar 2020 23:48:17 GMT
           expires:
           - '-1'
           pragma:
    @@ -2867,16 +3829,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -2887,12 +3849,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2901,7 +3863,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:20 GMT
    +      - Thu, 05 Mar 2020 23:48:18 GMT
           expires:
           - '-1'
           pragma:
    @@ -2915,11 +3877,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2935,12 +3897,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2949,7 +3911,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:22 GMT
    +      - Thu, 05 Mar 2020 23:48:20 GMT
           expires:
           - '-1'
           pragma:
    @@ -2963,11 +3925,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2983,12 +3945,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2997,7 +3959,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:24 GMT
    +      - Thu, 05 Mar 2020 23:48:22 GMT
           expires:
           - '-1'
           pragma:
    @@ -3011,11 +3973,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3031,21 +3993,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/451a5ddf0ce947b7a20f1695266d73d5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"1z49X0COGRurQDqvOYZga9th2fBr7ew-PHyfuPPBHXbioHgO_Zlv8gMAmBIk-1Cfde4sY1hJoGT8A_59RTybZxB1qTPwsVKots5qkeKoEzQKC2MFgopbc6-1kYJBBCCgKsD5a088LvbhPci2svN7jswetGiW1M36EOvykr5Fa84cRYPi31MB7diLm0ZYT5foe6HuKOGUNQz1D2azStwcPMKGX_1cWzxb0vVvleEfORazShVj2RfKc10kOrk7_TwLkPW7Zvs0Z1scTkszshswzDeepMwRG53k4f6i7pPzJHHJno6YjOIVD0H0jimoOxtecdwjoA0fMCZ0mjLF_EXqdQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:26 GMT
    +      - Thu, 05 Mar 2020 23:48:24 GMT
           expires:
           - '-1'
           pragma:
    @@ -3059,16 +4021,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -3078,24 +4040,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key4?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/28b97380c6bf4088985c81b8c8ae8a7b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"unnofKjJ8eVn-wvtJzrNHbA0KotlsijqkpsSJMqWxUBx28Ut3BCZswdlpzsfBM88HV3JfwcFYT0S80bCHH1fwHaShAEvKGqumYHdPfXWT7XpLyfVpuDw9v1uB3LzMSBwQbQnYoaY3ZF3bZTc20jiGcFg2iVCxu_aEmL1pp6JoyNT05GGenzv3Tu8epJXhtIwwsMshTEMGxKYKE97XQQHDTquTXWDL959zf0ecWVvEnrbqwwhUyZ-fjlbOTP9Yd9HnYWcMRKnkgvQwWYB4Yi8M_QIKSHhND73MQnJj_kX_mvHm4n9Csy37CQX5Rpb-PiWTt34vhlEabrJ4LhbmtKrIQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:28 GMT
    +      - Thu, 05 Mar 2020 23:48:26 GMT
           expires:
           - '-1'
           pragma:
    @@ -3109,16 +4069,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -3129,12 +4089,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3143,7 +4103,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:28 GMT
    +      - Thu, 05 Mar 2020 23:48:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -3157,11 +4117,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3177,12 +4137,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3191,7 +4151,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:30 GMT
    +      - Thu, 05 Mar 2020 23:48:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -3205,11 +4165,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3225,12 +4185,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3239,7 +4199,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:32 GMT
    +      - Thu, 05 Mar 2020 23:48:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -3253,11 +4213,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3273,12 +4233,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3287,7 +4247,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:34 GMT
    +      - Thu, 05 Mar 2020 23:48:35 GMT
           expires:
           - '-1'
           pragma:
    @@ -3301,11 +4261,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3321,12 +4281,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3335,7 +4295,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:36 GMT
    +      - Thu, 05 Mar 2020 23:48:37 GMT
           expires:
           - '-1'
           pragma:
    @@ -3349,11 +4309,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3369,21 +4329,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583452098,"scheduledPurgeDate":1591228098,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/41cae253e1bb4a889173242cbe703f66","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qIU7aeRbVRcFHeHdIlYrLQcYvBP0xPj0EMhpKFdlIJEiQfyfToiBx8Lf0HftfB0NtuJAeWzpNFf36TDfNtR7aBcamDqgV-ZItoUzHfyfZtjMJniyRhVVi4k5wkIrBYNDBRp5zkTubeZsDMOTtTHCeQoepYk-HaNx08Zo0Lhi0WJPScUbKhoaycfCsoOMMuz8FrZogxixEbLXK14q_YDhC8zUfcnTz9__fTuZ00P09xE7XXbjak2WbNJFTewCb19Omffp5GirTPW5LsBagrX6XoRFdSVS4yhUEDxBE5NOeQ1J82OruKd-4NpaJV_Lv_SBEk1z1rPuNW8xu2xut0PULQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:38 GMT
    +      - Thu, 05 Mar 2020 23:48:39 GMT
           expires:
           - '-1'
           pragma:
    @@ -3397,16 +4357,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -3416,22 +4376,24 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    +      Content-Length:
    +      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583452119,"scheduledPurgeDate":1591228119,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/9de95936234c465888581bbab670eeca","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"t_82aCsBJRSerrUw8FXIHW97efhQ34Dts5jWuhxSECURlAgMAgmOSm-sPaTzP2r52rLCIA8lKdQ2BkTvAK50kHBfioxzUrVjK8tNwQWfk98LkP_v2Y9VW-Q4fEG493zhs5pT44PXIgLs1Ua7mqYiUXvNPx28Qv-MGdz_NecNsf7fCO7VLytCyzASo1bddT2UwuyrKynXK6ya4ETqcYyAWvbua0XP_0IyvwWT5T6VFxIrLsinaD6Yk-LBBtxpsLBnVk7SmOme1imjKGxxcjt9EttwBtorr5nNXGnwcyw90aptMid3OuianhXg7aFZuLc3FWSOYh9gjl037A1_EzVlYw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:41 GMT
    +      - Thu, 05 Mar 2020 23:48:39 GMT
           expires:
           - '-1'
           pragma:
    @@ -3445,16 +4407,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -3465,12 +4427,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3479,7 +4441,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:43 GMT
    +      - Thu, 05 Mar 2020 23:48:39 GMT
           expires:
           - '-1'
           pragma:
    @@ -3493,11 +4455,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3513,12 +4475,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3527,7 +4489,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:45 GMT
    +      - Thu, 05 Mar 2020 23:48:41 GMT
           expires:
           - '-1'
           pragma:
    @@ -3541,11 +4503,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3561,21 +4523,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/28b97380c6bf4088985c81b8c8ae8a7b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"unnofKjJ8eVn-wvtJzrNHbA0KotlsijqkpsSJMqWxUBx28Ut3BCZswdlpzsfBM88HV3JfwcFYT0S80bCHH1fwHaShAEvKGqumYHdPfXWT7XpLyfVpuDw9v1uB3LzMSBwQbQnYoaY3ZF3bZTc20jiGcFg2iVCxu_aEmL1pp6JoyNT05GGenzv3Tu8epJXhtIwwsMshTEMGxKYKE97XQQHDTquTXWDL959zf0ecWVvEnrbqwwhUyZ-fjlbOTP9Yd9HnYWcMRKnkgvQwWYB4Yi8M_QIKSHhND73MQnJj_kX_mvHm4n9Csy37CQX5Rpb-PiWTt34vhlEabrJ4LhbmtKrIQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:47 GMT
    +      - Thu, 05 Mar 2020 23:48:43 GMT
           expires:
           - '-1'
           pragma:
    @@ -3589,16 +4551,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -3608,24 +4570,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key0?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676729,"scheduledPurgeDate":1583452729,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/6b019e5ce4a64cbc9ddc5df36bc08475","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pkDF9Ufns5Y4FrdDICDtPzTpRxtO5BEc5H2Ua2QHciXrmIcodH3tKBdvYQTq7KxVLvjJX4clFkXixPNsORlNIK0NIDBTKk2a9fUV4Lt4TIQuCX3GmcAAus54n-gmiu0kvF43SL74zaQ4FRCwJepSGDPGi6yVbrgd86_MD-xicksqOp8pjqu0aVoWBFDaZJ-RDBSiXzWVowu9XNBPQHXpBUGjQ9jJe1TgEUyOUolZfYdcURltnB-FBbvqEHnunsmvO_Vt6CyVjWQeRY7ABrKfphOAjHpXk-ICXxJduTOlN_nkGE4ro5D1mDTUaVhI4BMkDal5ReibjKEEVA3NbNY7wQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:49 GMT
    +      - Thu, 05 Mar 2020 23:48:45 GMT
           expires:
           - '-1'
           pragma:
    @@ -3639,16 +4599,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -3659,12 +4619,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3673,7 +4633,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:49 GMT
    +      - Thu, 05 Mar 2020 23:48:47 GMT
           expires:
           - '-1'
           pragma:
    @@ -3687,11 +4647,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3707,12 +4667,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3721,7 +4681,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:51 GMT
    +      - Thu, 05 Mar 2020 23:48:49 GMT
           expires:
           - '-1'
           pragma:
    @@ -3735,11 +4695,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3755,12 +4715,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3769,7 +4729,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:53 GMT
    +      - Thu, 05 Mar 2020 23:48:51 GMT
           expires:
           - '-1'
           pragma:
    @@ -3783,11 +4743,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3803,12 +4763,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3817,7 +4777,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:55 GMT
    +      - Thu, 05 Mar 2020 23:48:54 GMT
           expires:
           - '-1'
           pragma:
    @@ -3831,11 +4791,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3851,12 +4811,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3865,7 +4825,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:57 GMT
    +      - Thu, 05 Mar 2020 23:48:56 GMT
           expires:
           - '-1'
           pragma:
    @@ -3879,11 +4839,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3899,12 +4859,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3913,7 +4873,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:59 GMT
    +      - Thu, 05 Mar 2020 23:48:58 GMT
           expires:
           - '-1'
           pragma:
    @@ -3927,11 +4887,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3947,12 +4907,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3961,7 +4921,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:01 GMT
    +      - Thu, 05 Mar 2020 23:49:00 GMT
           expires:
           - '-1'
           pragma:
    @@ -3975,11 +4935,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3995,12 +4955,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4009,7 +4969,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:03 GMT
    +      - Thu, 05 Mar 2020 23:49:02 GMT
           expires:
           - '-1'
           pragma:
    @@ -4023,11 +4983,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4043,12 +5003,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4057,7 +5017,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:06 GMT
    +      - Thu, 05 Mar 2020 23:49:04 GMT
           expires:
           - '-1'
           pragma:
    @@ -4071,11 +5031,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4091,12 +5051,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4105,7 +5065,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:08 GMT
    +      - Thu, 05 Mar 2020 23:49:06 GMT
           expires:
           - '-1'
           pragma:
    @@ -4119,11 +5079,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4139,12 +5099,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676729,"scheduledPurgeDate":1583452729,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/6b019e5ce4a64cbc9ddc5df36bc08475","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pkDF9Ufns5Y4FrdDICDtPzTpRxtO5BEc5H2Ua2QHciXrmIcodH3tKBdvYQTq7KxVLvjJX4clFkXixPNsORlNIK0NIDBTKk2a9fUV4Lt4TIQuCX3GmcAAus54n-gmiu0kvF43SL74zaQ4FRCwJepSGDPGi6yVbrgd86_MD-xicksqOp8pjqu0aVoWBFDaZJ-RDBSiXzWVowu9XNBPQHXpBUGjQ9jJe1TgEUyOUolZfYdcURltnB-FBbvqEHnunsmvO_Vt6CyVjWQeRY7ABrKfphOAjHpXk-ICXxJduTOlN_nkGE4ro5D1mDTUaVhI4BMkDal5ReibjKEEVA3NbNY7wQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583452119,"scheduledPurgeDate":1591228119,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/9de95936234c465888581bbab670eeca","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"t_82aCsBJRSerrUw8FXIHW97efhQ34Dts5jWuhxSECURlAgMAgmOSm-sPaTzP2r52rLCIA8lKdQ2BkTvAK50kHBfioxzUrVjK8tNwQWfk98LkP_v2Y9VW-Q4fEG493zhs5pT44PXIgLs1Ua7mqYiUXvNPx28Qv-MGdz_NecNsf7fCO7VLytCyzASo1bddT2UwuyrKynXK6ya4ETqcYyAWvbua0XP_0IyvwWT5T6VFxIrLsinaD6Yk-LBBtxpsLBnVk7SmOme1imjKGxxcjt9EttwBtorr5nNXGnwcyw90aptMid3OuianhXg7aFZuLc3FWSOYh9gjl037A1_EzVlYw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4153,7 +5113,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:10 GMT
    +      - Thu, 05 Mar 2020 23:49:08 GMT
           expires:
           - '-1'
           pragma:
    @@ -4167,11 +5127,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4187,12 +5147,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.1-preview
       response:
         body:
    -      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676729,"scheduledPurgeDate":1583452729,"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676669,"scheduledPurgeDate":1583452669,"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676652,"scheduledPurgeDate":1583452652,"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"kid":"https://vaultname.vault.azure.net/keys/key4","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676605,"scheduledPurgeDate":1583452605,"kid":"https://vaultname.vault.azure.net/keys/key5","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676638,"scheduledPurgeDate":1583452638,"kid":"https://vaultname.vault.azure.net/keys/key6","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583451971,"scheduledPurgeDate":1591227971,"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583451997,"scheduledPurgeDate":1591227997,"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583452018,"scheduledPurgeDate":1591228018,"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583452043,"scheduledPurgeDate":1591228043,"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583452068,"scheduledPurgeDate":1591228068,"kid":"https://vaultname.vault.azure.net/keys/key4","attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583452098,"scheduledPurgeDate":1591228098,"kid":"https://vaultname.vault.azure.net/keys/key5","attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583452119,"scheduledPurgeDate":1591228119,"kid":"https://vaultname.vault.azure.net/keys/key6","attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
           cache-control:
           - no-cache
    @@ -4201,7 +5161,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:12 GMT
    +      - Thu, 05 Mar 2020 23:49:08 GMT
           expires:
           - '-1'
           pragma:
    @@ -4215,11 +5175,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4235,12 +5195,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.1-preview
       response:
         body:
    -      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676729,"scheduledPurgeDate":1583452729,"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676669,"scheduledPurgeDate":1583452669,"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676652,"scheduledPurgeDate":1583452652,"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"kid":"https://vaultname.vault.azure.net/keys/key4","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676605,"scheduledPurgeDate":1583452605,"kid":"https://vaultname.vault.azure.net/keys/key5","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676638,"scheduledPurgeDate":1583452638,"kid":"https://vaultname.vault.azure.net/keys/key6","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583451971,"scheduledPurgeDate":1591227971,"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583451997,"scheduledPurgeDate":1591227997,"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583452018,"scheduledPurgeDate":1591228018,"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583452043,"scheduledPurgeDate":1591228043,"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583452068,"scheduledPurgeDate":1591228068,"kid":"https://vaultname.vault.azure.net/keys/key4","attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583452098,"scheduledPurgeDate":1591228098,"kid":"https://vaultname.vault.azure.net/keys/key5","attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583452119,"scheduledPurgeDate":1591228119,"kid":"https://vaultname.vault.azure.net/keys/key6","attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
           cache-control:
           - no-cache
    @@ -4249,7 +5209,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:12 GMT
    +      - Thu, 05 Mar 2020 23:49:08 GMT
           expires:
           - '-1'
           pragma:
    @@ -4263,11 +5223,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_list_versions.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_list_versions.yaml
    index f4401b1a3446..b23c55b9196d 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_list_versions.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_list_versions.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:43 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,21 +69,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/35253bd59c3b4134b33fa50e69b339b5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wIQuIprig5YsduIVbjCAv7R6K4EKpRevBwiBuPST8rHuIJmXqG1kBUgkG6RmaKk4BH3a3z_HAWhh7J5KdeaFmLP527OTs3fTmIugMSJKfnvMcbkAXjVwxWODYQuABQLLuw8foD2r1P7pbxzDUaZkUDJRr9lc889Py-PFkWHR15WLhxnJq7p032wu2CXH08VAJ2YJ3UhFCBzb92N8dyXSEmRRZf--5Ecmvza23bCfV3AhnLH-Yu1c-XtTi_gUmYqwOF0m-BvpZMoL1ik3FVFOBQaDV6HFSkJi-0eF6fsrPW4XZXpHEog7CNQR_15eKJxAM0hbWiVZ3v-SQo71EbnchQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676603,"updated":1575676603,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/b4a5befc260540b4b27589090e7684c2","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"yxxHP79acWM869nEoYUl3r2dP509t6s4uW8Zv9lIJmhGwlcUMRMXsEpaJ3obVZo2Aq1939FqjY7Pml4PNgqBLeBGUpl3QEB-Sxp5TK5eypKVah21wsHrE-6232Cn9bWP1GGLOgLCVgIVD2sdaSHsrrtAvJ3Dr1mkfPAF4EewXQ0NJYqcxLaWiSvwo6-MdDx4fLo_RUhU7oFqvL9ePRqzET08cIx3GY9CO3YpHewggUNo1btn4uXNTZx9jRPjoPZCK5kyX1naX8NmcM7Ns6TqkA1uUeRlalysOPw6OZdB1pBBBWnb-U6PwucUKaesRRy4MDr8CQ6R7sWrazlep7MU7Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '662'
    +      - '674'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:43 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -121,21 +121,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/0201587632c6425caa6791b989e67220","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ll2twyqOq4nN4bSV9FtmLT7y8Tr-cKy0lrKXPsFrVaY1WhLjJpYd1WBb41EAc69s3g7ONd0KF0YqniM4tNk5n2FaPBDRz7TTrOcoBEc8HLtCI4VqxMQcPAUQRLFsSn1DyyntP6l5OYa8QjB_OOmURjpnj1rEG0dj1lQyBZClQ2KggfazUfwb4NQbqBxCmgcKIar-U2BBfWlckaAjzZ5mJE2xFmoM9e-dX7aT9CAMzlrJaCUHiWbzHmFne0T5GJ1rUPbhhZHexXs52WGY3mrxtheiOQUPsVT-gYnFXHqenKsHbYfJN-5-LXl8JPBw5exIvQiCHFMwJFMtc-YN02lxDw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676603,"updated":1575676603,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/f2c58afb72474afa8306b51802cdc3e5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"k6ecmzBYzdUelCh1R4QrskTE9Xe_EDhLqS5X7fJpLdSEqsM93vmTCmWsSAjLNmvGY-rySs0SKY7n0dZN12Bw7EYX6oCLegelxv56F5bPjdQPKvGg_-eZk6fkWoSgFFMQZ7kvrPQlN_jRqkDd6QzdUDVlIOjzi2o3Hhwm_LO5wXq48pcBHoJhNAGzpThv0kvnjP-B-TSq0bFz7xRdYKaRpaEN6WkrlSbul58au-liwmYthhw2nuNTtdPYY57wArU6iISgNNeY2V1mdHSgtnBN2PbY1QyKLSUatB7Wjh4aSTsS7iHfgS8vB0Mlwg6HM5w7ASJfMYIXvo_56Vv0SG560w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '662'
    +      - '674'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:43 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,11 +149,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -173,21 +173,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/bbfb48ff804b4fc08f4984840b8fac10","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4jRHDO03lNFfTrVVpWSoaAHgWqd0W5slOjiJpHjwc6o0B4Bz6nD4VX_ohXMLP_yDjRz3oiX1Jy2P4nhHfpL1ax9CZAwqaDYmVJe9sGwh3r3BCaDm3eEJvPmgzHaLTnT96iTQeHyLDPCgrVSJxFLZlJxyaK_cLh6TW7uEbC8Dl3WIKxJIeaen9qYNlwjh55LiCOMl1mm7p7reFoDKVqQbZHkY9679p42ZNuc4rLGa7YxvxIRHLXZn-6w3rM3KBEuior-UiFn_e0Re87vREF77KsTJD_AEZ8yEXvnwXFbIRdIu-APW2Nw8kHy-zxQc0oP9XZ1dwOxZMp-WgNRquaheDQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/2d1621b19aef4f6da5c2e68763e7ccee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xqsrgrcsKqnVYdvcJjgxkizXaCgxFuuoX1sI7rL_MF7JotfLgSxG9ctplWYHt1POIkY1Wlc4lk88JkswgoeK0QWPL5RJv9M9-GhRuy2Mxbn9PyUiFpVSrLSmuuQo_IgGp187IrehPrfDb32zeJ3GjRj6qrwTJp-iCeEwcoifMI_ouIsjSK40iKDzFZGyN0d00ekcztCfWIa4ivrNFu9sxm-5q_iPLMt2u2Dxv4F3RiwvqbmT0R4OWoMcWH6h9ZX81UNyRy8lZ74PVECrgW2C6v2w_7lZo3xdMBf1pdfBbmUP0hiGck8eaObCQKsoHT5HB3_0u8euVASb_8lZ9fLG4Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '662'
    +      - '674'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -201,11 +201,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -225,21 +225,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/d7549788fb084a04b289d38c8f1111db","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qKpIdZzjzfccf9C_HMeAQbKsOmbRw07E1ckskJepHYCBOWjprDjO_CwFoP-B0igKwU0zSPNWVT1pAsGVfwDRyWjGsDLkn-Qj3HLYZxJHP4Qr1kN8lqex_03DzGMorMA6gO01kwLBrhsliH1M9kweSeM1D9oaVwpcyV7BeCUOQspZ-EyLz1RVcuZn05Rp-cyWT5TGREluXo7klJ1Ud1fM7MpP26f3uz6jvgGbLeYPfSOW9C3FEunTujYiDtf68IXs7mk5yt-1dMxBLikaDjcTj4Nrx0kvaQnsiK5qdM0FNfVz-i-cmaY4-aLTQfn-CImsvK-93SAPr6rqTZSDZ4xDOQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/60dd1a04f0db47428873aca93f779d60","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"s5hVtOxQ0pUSvkb7NJPwKWzqLFu3XE9Z8vYEEaYI59f6R0yvOo4jiWKl9imzQasvK-81624RQ4GXkR7j_GKZ9nfgNwn0cKjDVimGYcJXypdmEdtYNKZmknqXIDyfmfuXqvV4lON_bdm1zC_SdPbNNHQhr4pm7O-LTmt6mNa6gCkshXe4CTjHHz1uQ0dPIKTR5erpl-upC0Z5lMvHUoL7gYCriAXOHoON0xax18hrXR3xsqScKAaO7QdkaeSZy8OwyrGv0t0DmpCGQOGrrNWtXLXJEOzqYXDNpyKD75irCIcz4235sll2JRUKN6Ery4DIX4C4SkpJRJS192PtLx17OQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '662'
    +      - '674'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -253,11 +253,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -277,21 +277,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/b4ee6e26b98f41d1866277cebdbed31f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"yW8PxhAi5T1nPJjRDXsn35d1z8gKh_iVH2lkNnbj9pAc0hM0pAkKFg2YTBU3obzqNuRrKcmgdkYL2FyqO4LsunieIGFkifg3voGIALfOSHIt-b01aOrxtRfZsVCqmBTTfdqresVkmRPPjTAreyworL_Rimv39vEMBImxDdtysP6JWOqIIykORKzuYgBgkPitinmWm-y4d4DPibM6K6AfUmvQgWh43N-7M6iSTIoCZiZEb1yvWu8E8ZlaIMTPV_CmIMapJLMx0fsPkt3uY_Qag2bjcFBUxlZ_WrlZQ9JSOILm4PrTeoRGrGtBdXpJtSMsyliH-M7QXWXVcf0XrOYxFQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/61322b08b3e146279020fc2c6b9d9447","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"uFkML6beybVhBDUQA-BVw92RB3wjv3ZAcZrw1qHPq2Xcmp8ZeaXJLXPD9cQUkYZpZ_cYZE9Pdx410qenEdVCmAmE1kNPgD67xlicBoa1PPbJIxuTrdQcAqZ3cI61oY5t-h-V5kkbGv54Jo6jgKUyzMhV2kuuefKsEMj2AddDKIURJ7trt23_Si5OI_h_IooyVqiVZrPfzuFuBbSNwWP5cbbeN__qXZcQMQYcnpFRY_A5zmvJSHE4Gc_oVk0OSY-IA0sjYlihGrpuHACz4TI-_Jkp6soyRkKSQlm3Paqpi738VVT1ugsodtdnNU-7JFIQ7SGGVvZky707070stLHL0w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '662'
    +      - '674'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -305,11 +305,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -329,21 +329,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/cf814fc41ae04d0abdc99b5efefcb9ea","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"3e2phChNWgaR-KdFzL7tpj0rW_6Agd00Pcc3yhakMKV9lcf7PQ7lV-pzIhbb1wGSkPbh6-ZLSRiDMvgveVoIVLkyXES4l-TPsIQlzdoXlhnXNzFmOBGABeqplad6Pdu3AGTq7zkNW4tx1tx5GQGiZLy7wNySaqVjPZ5it4QFYcaPgIOnuUIIcjWqkLvMWIQ5tI0_pVqnB1doo3cDRG5eXP-Azc3WOxtNpyPJoYnJZ0UMdxhUsKK8yc7Vl7UnnJw7lPTA0jZT2Rm_HMxzVN1tzAUro-v2xMyBPMVwpGCo3L1Rk96UKJ_bHPDFK2bQeeCyD7ouQFiHTDHY-af0zLhKyQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/dbe23faccc10415dae64f8311d502529","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"rko-k5aMgVQ4Uwi3_zhsyf2HVKreQUQDg8iJxmKOjOfS2tyt1AgYt3O8P3KVjiMdIYtFv_rHNHaGhAypGL69VrD_yLSnBox8Ld1vAnb48BCjL1vfhq2GspEJ9W8pMUZYH9_I_O9hsKx-bAjmj_phz_4UJEG9A3P6jGU_dCrhlorEduckBw0hoCcx15eAdcSs2jRqMjvnp0txPq4LKCH4p74HjohmEqLjaMILPk9Cta7uVUicmsdnu6nBejfP8CJbjx5ahHmdus3Aro5sH_vq2KxQ85V3Rs2cOfn5G0ngXxGSrbf7SHe-K3EXkbLZPY2ZVuw2OQ9yOFvIvnTsyfrmww","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '662'
    +      - '674'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -357,11 +357,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -381,21 +381,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/28d368e53dfd4ec0a3b24fe8cea7b26e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sb-LYIueXeDAGlbHY1cEzvdSjIXui4QMdJpok3XIWJ6h-U6QJSM5PKEKHNs8D17KAxDCezP4-7SFBtW6ZC5B925Imu86_UgpXawzVrqnoFjYvrc7kPK_3nqfopzj6iBNPAJetKrsdyXvQvCyElRV4TkmFlBbz5trqzeECZiZxGjRyZWJ9PITUMRleHd0whz7g0ctOcfY9-_GjK3DQm9Vyyn81xE1KudE6YPeXC18EE3KFU-esx-chvlhbuaI3cYbYq7_rUlde3A7gX_1Ye4XEyhRbxzdKmCRl-lk0X_1dMeLb4bsrdz4O3FWINwrPYzaDCvnZ7Eidd7kwSkahHL2-Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/a34af51c876a4b4c90a6bff8076a94ef","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tX0jPaHd1OFhf3LNMpwDMucz-I33FtYYkARiPryHtR3NWN7pd2sFItFLc-T2DRQSB4uTd13QcSmJ59hYCS-SQS3iYoim8n1YB7fjokk3vPywQpHZy5WjxgsRA8ZQ_2lzsSue6A4WAO09V0GE64AF0VWw13Uc7I3RESKi0i9MWb5RtZjio1UJd6xwTsLGNGWbNb-C650KQqxHxeHu4AXAwmL51XcGwuX5vYFWijiKQRkdZmeBGLSE3JTKrqm64-ovGE80OjATNBjHJY1gE09npGyU4Vv8mhXq4PUKdu2qfNnjrFMttwHlTrmdJWhXaxucuTK3kjx5Nf4fqtAz7C4PQw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '662'
    +      - '674'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -409,11 +409,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -429,21 +429,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/versions?api-version=7.0&maxresults=6
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/versions?maxresults=6&api-version=7.1-preview
       response:
         body:
    -      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/0201587632c6425caa6791b989e67220","attributes":{"enabled":true,"created":1575676603,"updated":1575676603,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/28d368e53dfd4ec0a3b24fe8cea7b26e","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/35253bd59c3b4134b33fa50e69b339b5","attributes":{"enabled":true,"created":1575676603,"updated":1575676603,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/b4ee6e26b98f41d1866277cebdbed31f","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/bbfb48ff804b4fc08f4984840b8fac10","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/cf814fc41ae04d0abdc99b5efefcb9ea","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/keys/testKeyf5fa0e28/versions?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXlJV3RsZVM5VVJWTlVTMFZaUmpWR1FUQkZNamd2UkRjMU5EazNPRGhHUWpBNE5FRXdORUl5T0RsRU16aERPRVl4TVRFeFJFSWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2giLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'
    +      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/2d1621b19aef4f6da5c2e68763e7ccee","attributes":{"enabled":true,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/60dd1a04f0db47428873aca93f779d60","attributes":{"enabled":true,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/61322b08b3e146279020fc2c6b9d9447","attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/a34af51c876a4b4c90a6bff8076a94ef","attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/b4a5befc260540b4b27589090e7684c2","attributes":{"enabled":true,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/dbe23faccc10415dae64f8311d502529","attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/keys/testKeyf5fa0e28/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXlJV3RsZVM5VVJWTlVTMFZaUmpWR1FUQkZNamd2UmpKRE5UaEJSa0kzTWpRM05FRkdRVGd6TURaQ05URTRNREpEUkVNelJUVWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2giLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '1653'
    +      - '1733'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -457,11 +457,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -477,21 +477,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/versions?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXlJV3RsZVM5VVJWTlVTMFZaUmpWR1FUQkZNamd2UkRjMU5EazNPRGhHUWpBNE5FRXdORUl5T0RsRU16aERPRVl4TVRFeFJFSWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2giLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXlJV3RsZVM5VVJWTlVTMFZaUmpWR1FUQkZNamd2UmpKRE5UaEJSa0kzTWpRM05FRkdRVGd6TURaQ05URTRNREpEUkVNelJUVWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2giLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
       response:
         body:
    -      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/d7549788fb084a04b289d38c8f1111db","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Purgeable"}}],"nextLink":null}'
    +      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/testKeyf5fa0e28/f2c58afb72474afa8306b51802cdc3e5","attributes":{"enabled":true,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '240'
    +      - '252'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -505,11 +505,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_logging_disabled.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_logging_disabled.yaml
    index 7447e3045219..33c8c058203d 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_logging_disabled.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_logging_disabled.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:43 GMT
    +      - Thu, 05 Mar 2020 23:46:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,18 +45,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 401
           message: Unauthorized
     - request:
    -    body: '{"key_size": 2048, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 2048}'
         headers:
           Accept:
           - application/json
    @@ -69,21 +69,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-key-name/6e203ffe42324e328464aad3edb541e7","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tMnSHkxd_7q_K7wiYdBNohBfEBxSglseKc4lEMERpMoZb8-tKzF8K5k9gzasxpzuoy1Ax56Qp7KLhRdX7C999YG6u-Yp9XGec-Xn759YhOAC7X8xdXv7EwGh0SnNJQ-sDugL4cRDhVS9nP0sTV1ESmZUf_7n4J8JWf6wKEvQNPq7iAH5qeTN0bcbCrptIfrFmEYplbyGjc6N74G61BaTiPuMDSEhghik7-u-BUsQc9WozT3TK9Q8aNClqEMkLJUkZi7Twamddr2Pz7F0rjbxPD_YGGeTt1kNYqw-ph1Uj0ZomXJv9GX8-iVi1k5dGV7Rf8wsnI32-D5CUCljQOGWHw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-key-name/0a79a5a3db46422cb4396d8cd1fba940","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4y18_7dytyL5jmx5eWWTgdePmkFKVKXfFrM2bP_UX8EkCaHOHOz8Xxeg3eTvSV9_nUiguVRtXVJ58BWkikJowJzkqzvHSDPPzbFXSkY0K3yJ7AOejwlZSlkBzLgeivI3_AimIe-Kr-OonkfWU-J708Gnhesvj0W7MXRWpw4LjbZbRwV3EO6I60QO0t3bs_3s2AeMtGeSTq06zDp46pDanErE3QFbM91JDERWsEcdLlKAy4KCpcfyQOQxuI_MFQnEr5EMDLvUOO99iH2RWh_PmR8ieWjvOHAiHVOvsgCcsZi-aSfoqhycn-RJUrVbJfUMc_9XpTEdmwzJ3-mm-oJ-mw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '659'
    +      - '671'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:46:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_logging_enabled.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_logging_enabled.yaml
    index f073268d7644..447378c0e16c 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_logging_enabled.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_logging_enabled.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:06 GMT
    +      - Thu, 05 Mar 2020 23:16:49 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,18 +45,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 401
           message: Unauthorized
     - request:
    -    body: '{"key_size": 2048, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 2048}'
         headers:
           Accept:
           - application/json
    @@ -69,21 +69,21 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-key-name/a2230c06e4754217883105bb7a3214d0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nnrrVZV82YoAR9Bvg4r5xjYIJ59-QTLAIDfvZHquIWJvN4cCBp_CHS9b2y9KHBMPbQC7lfKK44FZt-LWyA069SU9ICqh_PFOhX-_KIFltrn2MgLpvI3OsfeoFEUcmppqXyUsf-jfbsdN39agLlIAzKZRH-xoSVISNkizqIHpEF0tAI4AZn4NIpT5uYJrwLS_KJ0Mdu7ppTc6UArHc6hO1BH1cRdqvRH-hrnTXoyPRzLnkn8GbB8G6m_RUwyy5TpG4mGbHN8_ybztDLZSYaopPsoBB2LrrWGFIsSFYz3GrDlBR4pn07odh8Wu0VebayswdSTIM2fQbZFJAojQ6sx9UQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676567,"updated":1575676567,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-key-name/05171c05e42b41b2afaf309ae1ba9ac8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xpQWL0VR5FEjMqtrBzholVzvVh4J_O_lRpq2LXFoc2U8lfpwlqJUh8xxdBSP2rKHxwOzYKGxSsx9R3w6gnpC_gLNF9mdS1LexLznN9NUWDCt7VYrHQFv-lxk7TpzPjTB1udWXewY3wZwgRt2ryFbEidUu1qxH97qAxObgHQllKm2SaMGB19h7qyrT_bIVpaEiihrqRxTBdSBeFLCGx61bHKLcDq5QBLcsMp5sgaLHvehBtq3cpw0wXq3SuHWQtKeYDH4ufdu_Jpx68HJhN254WyEszyz4nqBJi9hks-z3rrJli_7o6EfgzFkxo5IY3q-1clurV5jwPC16i0YC0gPew","e":"AQAB"},"attributes":{"enabled":true,"created":1583450209,"updated":1583450209,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '659'
    +      - '671'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:07 GMT
    +      - Thu, 05 Mar 2020 23:16:49 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_purge.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_purge.yaml
    index 6ac9d7f42981..1c5582859f3f 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_purge.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_purge.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:43 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,12 +69,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/6f0f62ecfb3644328560f7e1c8a0e3c6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qcRGGAZtx2TRVaK7ICTtVMVkKT7p3YQI378AvVgNTJenYqB5I1l0pcj1l5b7y3Jcto_cWlmRNRUYbtA_Apy9cbEg0QKrbza2LF-LjAtob7z0RJFbxqPg0PrxmLbQrKCLXxC8fBo0pkhp4Hxw8KrD8pm2RtXDvcTOeF8OCzDHfqrG9Y8MMb9UWm-en_9Mhu0FSGQ4FfNriBZw3DIJSNg_Akz0JD5nNM55pMmhH3a6EyuIoZE7Vcou56n06uEsPNQnxTIqW1DknBDAmXzGM-VnQUpmqCldEs7V83kv8SnS3MtH38a7jfTsCtxF4F9ClQf-c8pkmew8FSE6tnJdheUAOw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/368946c0ebb3455c9b9cef405ea4fc20","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nWPLDXeOqGLzsFb_6S1yRShqJrvwl4CmQrm9iUjHguD_EE-WmFNHMpNoog4k8C4zPaGr7_dmgMEFHELl1CPKJC2fBVKRs-q4VPswgAQbmEIvnM3pO6f2d6qyxBd1pJPoXca0_sDcd6sIJSvDor5vncLoVw5E4q7B_IP_p_TLtyw5UmbD7LKvAF2GHFGEjP4CQrq98WgYC-778TVrUMki1OF9wceyRhSMawM9uuxY7t_npCT90Dy5JKyafjTR_yFXZC4Nef0hzKoW1y0knr3jpWGYFaGL3WOGdFQa-NVJgoeJYjPYHpXRqTghYhzZFpdQcQA_RRLm2cc8bCsOAgzCOQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -83,7 +83,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:43 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -121,12 +121,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/1f14e4a2cfba44158be2335754c67315","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tIIuyKwCqsQsiSRj4LWBVVSmSnVWvemN7WXBsozZRxH-sLjeseWT5u4d6DFVZDRZ9dk42ubXwVRDG7a9GBRj1BitoFu1GESNwlifGcRrhsgWdNn0V4KjRX7MOBEnl8hkl6wvJRIIXV8id0iw7PjcKX8F9mVtzXiyMBqhaMCpJOBQl1cRqJ9hc0Z2AZbR4uGhx-3AsnTemj6_NJM6LYX09C7HaJMZCz3jYN96ngFEDD4K6gva1LtTKIyWbKjjQ998aAsdnCN5kUsyeOYnralHL3yih0U2JXUc7-6vRwfGAeUv3F7wWgGt0-LNjCCIIzfCUdbiF9N52NQ3PyI-F4nPtw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/c519a71204d14fbfa61b1dc3508a8574","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"3WJhJ0AKYyCb8JzO_J_HFoQMc3hyizN5gOVAftHL9muDk3bWbWyfHxELE29wfhkrmh7YZWVlO05A1aN4xDggXsIJAaL0nd1B_loOwkzoa9NjHm0OKAGR0hl8rjeNshGVKb4wO3-39QULjcAQ94Ykb-yLti8Jn7fAPm-H-m3jQnVHNRZ35TeqMi2r20nRMUT3yNrVuwoQcKg-tlS-qf53vLBkiKwnSw-elcxUb8MdGExJ3h6Vt7nPiMI8w0RPihyFfCTuqfOh4GITxcw9Y67tj7AxO8GYIVVpuIub35vUAMrIDBE46ic_DdBxrhHPR7PENzeFNYxv8eOjyaLXGN3hFQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -135,7 +135,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:43 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,11 +149,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -173,12 +173,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/713764e0c7b74a15be4c49f25ad2ace8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"zpb_kBQLTv1mY8J3zfxl_ZZhZILW4XUBpi7guaO0aAaZ6cEBZ1UWIGRC1zaFXtQVfq_rivDvKJZleNbZltkb7FlS1A43THb9tYCtdspgMEQYbDSS8kdm6mKPOeiXtBeO2Me-XxNldAHpm5j38jMRx_JYiWBoEYxhRCU_iknQOWegWigQr0cwQFPRxSsCEcsLhd56Yg7f0bKJpOTT5SviM-a2qk4qSwXy_CL21HVrrhP6t2Pj7NKBmmAZrTBq3Zn_y8bFQNyqvspW4S8cCGd5FKt_mwPKwW4xYpsmpnXvyqhddDEslBtd0ccHTWb7qkctj7hmZFzoGY4Sr5lNwnBJdQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/b158f680e59142f190707280b7c3db7f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"n2i732m5ztWFiOLNVbt7-aoBvq04HRAhl2R21bKDWXNIX_f9fq_9cFF4J0T1nl2GbPxulcCxAgwjqSLvsAeqycLs4BjPyYgXck6L_QYRlUzXbEeNDc53ZhUEMHbqqeBs0GEAvACP9VeYyQct14TGFrW7ewuM-57sZmm-H2BvZWtlGfn27QHPj75rQi5BtczQVGVrAtqP4KItvZcsHQO5grRu_IRp-eHtQYHI3ZpBYBfdMifSuMehiZ7PnnYa2Pr8WqfDZuSCFZpgruV24_msE_SCSNN7OZRF3BG5SebkpkW4PwTzA9gBFi0IUtNcPe_Gx4ytYCleka0-7a06XSwHjw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -187,7 +187,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -201,11 +201,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -225,12 +225,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/2ba714d2d1664b8b88401aa790170dae","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sJ-oEoIfG0fsh4hLdBk5pWPx7kQGi6u_6wwK2XpyYU5Cks2SXGZFXLNhtomP5QCYrslbmaWZx3OdydpAv2DCsCBZyTF9NpAtsbWD574hRNEqXTrt83HFnGpnrz_iC8Q6_TR0zha01ia3NTFr4xn4Cd2beDoNjBILY8zi5kToVle5eg6LQcP1G-baIirx2lZ5G1YPyDCpC8e7C-j3L2ycgyDIVtW7kb_Ryz2rMuKvrZZ6wt8mzYRzUYm7ZuFUJWUH5JUaeza5ZX54bEosFhmZ8Kz8KNxuZxg-gVMPtzrtfXwkKWY6lOQIvAyokbd01Rf0UWzBRPWtBozScp7Ias7nLQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/75958de2fc324932b07cce8a90524c5e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"zN_6H3M2px1sckAlylhKMC5XaGBU1j-PpObB2t-xNIF0qv7zqNJEsvqBpcMpAuO6WH9g3zPd5qatKBsevqw6xQ5rcssfiI3k5MdBRZN7mnI7jW2fQ66JfPbM5XaNgVpymTSi0EYJDfhfG5pZud0vi-UNH4NZjSQW_9nGoahyYYjMGTfX9L0Kt6XzODQ0FDmLEtjj6fA9tsZLJ37f71_cmdGkeuScXd49uxzkr1vD1hQ3TaDPNCXjhTUSdX1WXgDXeuegwSUgBWp8RwQ7RuAwkKEnfhQZjO-qGJlP8Lt9yuBZl_Hdj7o3ghgkXtFnzc6hNWYQ3XDMDEPp4Rm2GfdPvQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -239,7 +239,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -253,11 +253,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -277,12 +277,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/6218792573f64cc1829f5387e1208182","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"rA4SLbBM-kb1vY71b0OMzv5Qvjv-RVeyVmMuYaiizDSRN12eRdzqcMk8t9hqWaiSiXhyNfMaAwg5xhAQOOFeDkzBZKUNcmKxxcoyp0rzek1Lm9NmQBHVwev753FWMPUzlRT1iSWsVBLhPSeowvoKDuGaXswZMRINHNIOC7h8ozMdq9jfaW88oEYb-P7WJxSsQVOSMSlAgSM8B3oiEbbPMy-CN4KI5MZeWTTk7MT5kM7uNhUtvbIGWt0iyBvepStjJjTf9NpCJ0JvQtyM8WxfCzvelWMje5RC5wL4jgAgbc0__z8hbF3MmOFtGYcaJ3h0VPNyksqgKSEbNm4WjjgMOw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/1100c8d6a0ad4248a54bff1143cd9b57","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vvxnvdFST4aALYOW3U1cVdKF3CkPut-H4Qm8jJNUPvCtOu0c9wJBqDbkNLef6jH5iQBuGBfNQPKixWTcR-n3MwNaZiLre61RSpoKHgZGQ6_3eNccS9WZPBviz0kZxa7me9ZDUOqpDO3NpUParF-r4A0sLIVgom83EpZI57M3wkS5tV0aiX3c4q1nRxWv0Uq6nNRfprzryB-CqGaN6iO9ykty-32Z98CB_PWmXHJu_FsHppkrdhUo9VWEBnPj5nMmLShiMBDQQ-5AURKwuEvn6LmjtmUAoXaAxFIVFMoj-W9OX5kltX-M_xSOpT80gOGjMkSUv_ODFjZTjL61HqpYmw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -291,7 +291,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -305,11 +305,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -329,12 +329,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/12577f5721bb4264b9c005cb45d0b97b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tdb8csxzHpsbhd4zFBMyxTB6PDlKoAZWSgzqskfkUMRRl1UnWyq4wQldZ6u3bTjq_2hVLL6wt_WmkGvKkN2VabrriZdAtn8-UXYUTsp2r3ln1cPLwERXa_gLsBYt7MYz_31_c3cU7JNnQjQWWzp2yHJBQZcnS_leGZypFQuKO2-9g6oSjO4shMGysYja8Mx6QDYYfJTML5lNk0epdWtizawujH_UxG7k14rZzbQ5FGzn7wSXExpDD8Pfug4D_1ED-CWUdLjAny7E-NkoNdy04nDskK-6BDb8UCazr1KJjrV3ATgKUgwmNOjsOZE5KjQTM91XmYx32hfSSjh2oRViDw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/265cf02d331d4209b101d8aa8c199bb6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"owoYOKU5FkGwojmlIPnmFS7lOVe40EjAwG35yS6A8g2n07rt3TtGKOBfGIugc58SW7Yj1ymA16IqrVO8K9Wa9QKj4-3RWpWjJ5iN6zqD4hyq4H8khul3g5p7gPYrXofdCLcHYrBiEVS2LOVYVDBeamNsDwXfQf7Iwh5V4bT5GER4wCAcWw3hRwkssEykaPcpjX1xN0-FYzd8o4F8bOuSYaDtaIpB6ymWF3T-sTa5UIXd0HArY5sE_ToNNNmwYYNRe2wxkZRRE0g2Irci1sT_xGpGIrUqi4u3SIJeUyfwj5b7FTunT_72cyMqXeFoTC_5fFC8deWD--NFS1KzHWVxuQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -343,7 +343,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -357,11 +357,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -381,12 +381,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/1833ddde922f462585464cabe5b116cc","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lE33rWG6lpdnERG0zp2zNF71bboOAO6eoWht7Ug76DaxQCYGia_3ZJkLc_Pvw5_SiCclixqQm7SvXo6f16qkY8JIQtpMD1s_-8VtJen9_KUdZ7ZLYsBi_mCOxUxxZzyuSU6O7tSSyyfGJ46gu3ZtuqEDV175m1dOVg7PtI8EmegJpey2H7A9GaaLjSEUvvq4dWupKsaqvl-H0AKvR8snvzIs8fZGuAYjKuDKtgMzK1bEghgEaFo0bAgn0GLZqhuHXWe0o9PM4ViR042zy93lTR0sYeutFgkCepAOvuOba80Six8Gdif2ETGaE6_NISl6xN2jnDa_QaLajglUEX7rqw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/dec223a8d8b6441eaae3b9610b62140c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nedQRalllyPV6WAEXeaY7IM7-P-1ccN27H5oYA2LmzYzG6qKvql37q3qZUaSvrgoLHiNh395zhlvWzI-N0XWmfq0jViFAq0YIhZvOcsdzQCVDHlv5_dKS5OecBPwx_YCTWC6wLXZ44JcCwYyIDKJYm564sYKFUsg3hgFwMbzwe3knDF0pBb7zYE-XSQxPhh_iZ8CpB3LZ-vWQ9QrJ4vvSaAxB79pmbX6tE_Hyiwn822gb3q6EIRocanTsiU43OVfBAETbTLfyo2N_8lk2J2BPWVlU8UBLc6HEDZk_8h6L5BVQKIo3e_uBVlextRneoJVp2aSi7dLpSskztRfH51p3Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -395,7 +395,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -409,11 +409,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -431,12 +431,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676605,"scheduledPurgeDate":1583452605,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/6f0f62ecfb3644328560f7e1c8a0e3c6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qcRGGAZtx2TRVaK7ICTtVMVkKT7p3YQI378AvVgNTJenYqB5I1l0pcj1l5b7y3Jcto_cWlmRNRUYbtA_Apy9cbEg0QKrbza2LF-LjAtob7z0RJFbxqPg0PrxmLbQrKCLXxC8fBo0pkhp4Hxw8KrD8pm2RtXDvcTOeF8OCzDHfqrG9Y8MMb9UWm-en_9Mhu0FSGQ4FfNriBZw3DIJSNg_Akz0JD5nNM55pMmhH3a6EyuIoZE7Vcou56n06uEsPNQnxTIqW1DknBDAmXzGM-VnQUpmqCldEs7V83kv8SnS3MtH38a7jfTsCtxF4F9ClQf-c8pkmew8FSE6tnJdheUAOw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583450190,"scheduledPurgeDate":1591226190,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/368946c0ebb3455c9b9cef405ea4fc20","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nWPLDXeOqGLzsFb_6S1yRShqJrvwl4CmQrm9iUjHguD_EE-WmFNHMpNoog4k8C4zPaGr7_dmgMEFHELl1CPKJC2fBVKRs-q4VPswgAQbmEIvnM3pO6f2d6qyxBd1pJPoXca0_sDcd6sIJSvDor5vncLoVw5E4q7B_IP_p_TLtyw5UmbD7LKvAF2GHFGEjP4CQrq98WgYC-778TVrUMki1OF9wceyRhSMawM9uuxY7t_npCT90Dy5JKyafjTR_yFXZC4Nef0hzKoW1y0knr3jpWGYFaGL3WOGdFQa-NVJgoeJYjPYHpXRqTghYhzZFpdQcQA_RRLm2cc8bCsOAgzCOQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -445,7 +445,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -459,11 +459,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -479,9 +479,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    @@ -493,7 +493,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -507,11 +507,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -527,9 +527,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    @@ -541,7 +541,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:46 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -555,11 +555,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -575,9 +575,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    @@ -589,7 +589,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:48 GMT
    +      - Thu, 05 Mar 2020 23:16:34 GMT
           expires:
           - '-1'
           pragma:
    @@ -603,11 +603,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -623,9 +623,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    @@ -637,7 +637,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:50 GMT
    +      - Thu, 05 Mar 2020 23:16:36 GMT
           expires:
           - '-1'
           pragma:
    @@ -651,11 +651,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -671,9 +671,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    @@ -685,7 +685,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:52 GMT
    +      - Thu, 05 Mar 2020 23:16:38 GMT
           expires:
           - '-1'
           pragma:
    @@ -699,11 +699,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -719,9 +719,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    @@ -733,7 +733,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:55 GMT
    +      - Thu, 05 Mar 2020 23:16:40 GMT
           expires:
           - '-1'
           pragma:
    @@ -747,11 +747,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -767,9 +767,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    @@ -781,7 +781,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:57 GMT
    +      - Thu, 05 Mar 2020 23:16:42 GMT
           expires:
           - '-1'
           pragma:
    @@ -795,11 +795,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -815,12 +815,1024 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583450190,"scheduledPurgeDate":1591226190,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/368946c0ebb3455c9b9cef405ea4fc20","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nWPLDXeOqGLzsFb_6S1yRShqJrvwl4CmQrm9iUjHguD_EE-WmFNHMpNoog4k8C4zPaGr7_dmgMEFHELl1CPKJC2fBVKRs-q4VPswgAQbmEIvnM3pO6f2d6qyxBd1pJPoXca0_sDcd6sIJSvDor5vncLoVw5E4q7B_IP_p_TLtyw5UmbD7LKvAF2GHFGEjP4CQrq98WgYC-778TVrUMki1OF9wceyRhSMawM9uuxY7t_npCT90Dy5JKyafjTR_yFXZC4Nef0hzKoW1y0knr3jpWGYFaGL3WOGdFQa-NVJgoeJYjPYHpXRqTghYhzZFpdQcQA_RRLm2cc8bCsOAgzCOQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '801'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583450205,"scheduledPurgeDate":1591226205,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/c519a71204d14fbfa61b1dc3508a8574","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"3WJhJ0AKYyCb8JzO_J_HFoQMc3hyizN5gOVAftHL9muDk3bWbWyfHxELE29wfhkrmh7YZWVlO05A1aN4xDggXsIJAaL0nd1B_loOwkzoa9NjHm0OKAGR0hl8rjeNshGVKb4wO3-39QULjcAQ94Ykb-yLti8Jn7fAPm-H-m3jQnVHNRZ35TeqMi2r20nRMUT3yNrVuwoQcKg-tlS-qf53vLBkiKwnSw-elcxUb8MdGExJ3h6Vt7nPiMI8w0RPihyFfCTuqfOh4GITxcw9Y67tj7AxO8GYIVVpuIub35vUAMrIDBE46ic_DdBxrhHPR7PENzeFNYxv8eOjyaLXGN3hFQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '801'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:52 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583450205,"scheduledPurgeDate":1591226205,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/c519a71204d14fbfa61b1dc3508a8574","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"3WJhJ0AKYyCb8JzO_J_HFoQMc3hyizN5gOVAftHL9muDk3bWbWyfHxELE29wfhkrmh7YZWVlO05A1aN4xDggXsIJAaL0nd1B_loOwkzoa9NjHm0OKAGR0hl8rjeNshGVKb4wO3-39QULjcAQ94Ykb-yLti8Jn7fAPm-H-m3jQnVHNRZ35TeqMi2r20nRMUT3yNrVuwoQcKg-tlS-qf53vLBkiKwnSw-elcxUb8MdGExJ3h6Vt7nPiMI8w0RPihyFfCTuqfOh4GITxcw9Y67tj7AxO8GYIVVpuIub35vUAMrIDBE46ic_DdBxrhHPR7PENzeFNYxv8eOjyaLXGN3hFQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '801'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583450232,"scheduledPurgeDate":1591226232,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/b158f680e59142f190707280b7c3db7f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"n2i732m5ztWFiOLNVbt7-aoBvq04HRAhl2R21bKDWXNIX_f9fq_9cFF4J0T1nl2GbPxulcCxAgwjqSLvsAeqycLs4BjPyYgXck6L_QYRlUzXbEeNDc53ZhUEMHbqqeBs0GEAvACP9VeYyQct14TGFrW7ewuM-57sZmm-H2BvZWtlGfn27QHPj75rQi5BtczQVGVrAtqP4KItvZcsHQO5grRu_IRp-eHtQYHI3ZpBYBfdMifSuMehiZ7PnnYa2Pr8WqfDZuSCFZpgruV24_msE_SCSNN7OZRF3BG5SebkpkW4PwTzA9gBFi0IUtNcPe_Gx4ytYCleka0-7a06XSwHjw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '801'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -829,7 +1841,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:59 GMT
    +      - Thu, 05 Mar 2020 23:17:20 GMT
           expires:
           - '-1'
           pragma:
    @@ -843,11 +1855,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -863,12 +1875,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -877,7 +1889,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:01 GMT
    +      - Thu, 05 Mar 2020 23:17:22 GMT
           expires:
           - '-1'
           pragma:
    @@ -891,11 +1903,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -911,12 +1923,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -925,7 +1937,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:03 GMT
    +      - Thu, 05 Mar 2020 23:17:24 GMT
           expires:
           - '-1'
           pragma:
    @@ -939,11 +1951,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -959,12 +1971,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -973,7 +1985,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:05 GMT
    +      - Thu, 05 Mar 2020 23:17:26 GMT
           expires:
           - '-1'
           pragma:
    @@ -987,11 +1999,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1007,12 +2019,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1021,7 +2033,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:07 GMT
    +      - Thu, 05 Mar 2020 23:17:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -1035,11 +2047,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1055,12 +2067,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1069,7 +2081,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:09 GMT
    +      - Thu, 05 Mar 2020 23:17:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -1083,11 +2095,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1103,12 +2115,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1117,7 +2129,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:11 GMT
    +      - Thu, 05 Mar 2020 23:17:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -1131,11 +2143,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1151,12 +2163,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1165,7 +2177,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:13 GMT
    +      - Thu, 05 Mar 2020 23:17:34 GMT
           expires:
           - '-1'
           pragma:
    @@ -1179,11 +2191,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1199,21 +2211,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676605,"scheduledPurgeDate":1583452605,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/6f0f62ecfb3644328560f7e1c8a0e3c6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qcRGGAZtx2TRVaK7ICTtVMVkKT7p3YQI378AvVgNTJenYqB5I1l0pcj1l5b7y3Jcto_cWlmRNRUYbtA_Apy9cbEg0QKrbza2LF-LjAtob7z0RJFbxqPg0PrxmLbQrKCLXxC8fBo0pkhp4Hxw8KrD8pm2RtXDvcTOeF8OCzDHfqrG9Y8MMb9UWm-en_9Mhu0FSGQ4FfNriBZw3DIJSNg_Akz0JD5nNM55pMmhH3a6EyuIoZE7Vcou56n06uEsPNQnxTIqW1DknBDAmXzGM-VnQUpmqCldEs7V83kv8SnS3MtH38a7jfTsCtxF4F9ClQf-c8pkmew8FSE6tnJdheUAOw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:15 GMT
    +      - Thu, 05 Mar 2020 23:17:37 GMT
           expires:
           - '-1'
           pragma:
    @@ -1227,16 +2239,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -1246,15 +2258,13 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key1?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676638,"scheduledPurgeDate":1583452638,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/1f14e4a2cfba44158be2335754c67315","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tIIuyKwCqsQsiSRj4LWBVVSmSnVWvemN7WXBsozZRxH-sLjeseWT5u4d6DFVZDRZ9dk42ubXwVRDG7a9GBRj1BitoFu1GESNwlifGcRrhsgWdNn0V4KjRX7MOBEnl8hkl6wvJRIIXV8id0iw7PjcKX8F9mVtzXiyMBqhaMCpJOBQl1cRqJ9hc0Z2AZbR4uGhx-3AsnTemj6_NJM6LYX09C7HaJMZCz3jYN96ngFEDD4K6gva1LtTKIyWbKjjQ998aAsdnCN5kUsyeOYnralHL3yih0U2JXUc7-6vRwfGAeUv3F7wWgGt0-LNjCCIIzfCUdbiF9N52NQ3PyI-F4nPtw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583450232,"scheduledPurgeDate":1591226232,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/b158f680e59142f190707280b7c3db7f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"n2i732m5ztWFiOLNVbt7-aoBvq04HRAhl2R21bKDWXNIX_f9fq_9cFF4J0T1nl2GbPxulcCxAgwjqSLvsAeqycLs4BjPyYgXck6L_QYRlUzXbEeNDc53ZhUEMHbqqeBs0GEAvACP9VeYyQct14TGFrW7ewuM-57sZmm-H2BvZWtlGfn27QHPj75rQi5BtczQVGVrAtqP4KItvZcsHQO5grRu_IRp-eHtQYHI3ZpBYBfdMifSuMehiZ7PnnYa2Pr8WqfDZuSCFZpgruV24_msE_SCSNN7OZRF3BG5SebkpkW4PwTzA9gBFi0IUtNcPe_Gx4ytYCleka0-7a06XSwHjw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1263,7 +2273,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:17 GMT
    +      - Thu, 05 Mar 2020 23:17:39 GMT
           expires:
           - '-1'
           pragma:
    @@ -1277,11 +2287,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1296,22 +2306,24 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    +      Content-Length:
    +      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583450259,"scheduledPurgeDate":1591226259,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/75958de2fc324932b07cce8a90524c5e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"zN_6H3M2px1sckAlylhKMC5XaGBU1j-PpObB2t-xNIF0qv7zqNJEsvqBpcMpAuO6WH9g3zPd5qatKBsevqw6xQ5rcssfiI3k5MdBRZN7mnI7jW2fQ66JfPbM5XaNgVpymTSi0EYJDfhfG5pZud0vi-UNH4NZjSQW_9nGoahyYYjMGTfX9L0Kt6XzODQ0FDmLEtjj6fA9tsZLJ37f71_cmdGkeuScXd49uxzkr1vD1hQ3TaDPNCXjhTUSdX1WXgDXeuegwSUgBWp8RwQ7RuAwkKEnfhQZjO-qGJlP8Lt9yuBZl_Hdj7o3ghgkXtFnzc6hNWYQ3XDMDEPp4Rm2GfdPvQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:17 GMT
    +      - Thu, 05 Mar 2020 23:17:39 GMT
           expires:
           - '-1'
           pragma:
    @@ -1325,16 +2337,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -1345,12 +2357,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1359,7 +2371,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:19 GMT
    +      - Thu, 05 Mar 2020 23:17:39 GMT
           expires:
           - '-1'
           pragma:
    @@ -1373,11 +2385,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1393,12 +2405,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1407,7 +2419,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:21 GMT
    +      - Thu, 05 Mar 2020 23:17:41 GMT
           expires:
           - '-1'
           pragma:
    @@ -1421,11 +2433,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1441,12 +2453,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1455,7 +2467,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:23 GMT
    +      - Thu, 05 Mar 2020 23:17:43 GMT
           expires:
           - '-1'
           pragma:
    @@ -1469,11 +2481,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1489,12 +2501,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1503,7 +2515,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:25 GMT
    +      - Thu, 05 Mar 2020 23:17:45 GMT
           expires:
           - '-1'
           pragma:
    @@ -1517,11 +2529,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1537,12 +2549,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1551,7 +2563,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:28 GMT
    +      - Thu, 05 Mar 2020 23:17:47 GMT
           expires:
           - '-1'
           pragma:
    @@ -1565,11 +2577,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1585,21 +2597,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676638,"scheduledPurgeDate":1583452638,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/1f14e4a2cfba44158be2335754c67315","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tIIuyKwCqsQsiSRj4LWBVVSmSnVWvemN7WXBsozZRxH-sLjeseWT5u4d6DFVZDRZ9dk42ubXwVRDG7a9GBRj1BitoFu1GESNwlifGcRrhsgWdNn0V4KjRX7MOBEnl8hkl6wvJRIIXV8id0iw7PjcKX8F9mVtzXiyMBqhaMCpJOBQl1cRqJ9hc0Z2AZbR4uGhx-3AsnTemj6_NJM6LYX09C7HaJMZCz3jYN96ngFEDD4K6gva1LtTKIyWbKjjQ998aAsdnCN5kUsyeOYnralHL3yih0U2JXUc7-6vRwfGAeUv3F7wWgGt0-LNjCCIIzfCUdbiF9N52NQ3PyI-F4nPtw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:30 GMT
    +      - Thu, 05 Mar 2020 23:17:49 GMT
           expires:
           - '-1'
           pragma:
    @@ -1613,16 +2625,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -1632,24 +2644,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key2?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676653,"scheduledPurgeDate":1583452653,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/713764e0c7b74a15be4c49f25ad2ace8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"zpb_kBQLTv1mY8J3zfxl_ZZhZILW4XUBpi7guaO0aAaZ6cEBZ1UWIGRC1zaFXtQVfq_rivDvKJZleNbZltkb7FlS1A43THb9tYCtdspgMEQYbDSS8kdm6mKPOeiXtBeO2Me-XxNldAHpm5j38jMRx_JYiWBoEYxhRCU_iknQOWegWigQr0cwQFPRxSsCEcsLhd56Yg7f0bKJpOTT5SviM-a2qk4qSwXy_CL21HVrrhP6t2Pj7NKBmmAZrTBq3Zn_y8bFQNyqvspW4S8cCGd5FKt_mwPKwW4xYpsmpnXvyqhddDEslBtd0ccHTWb7qkctj7hmZFzoGY4Sr5lNwnBJdQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:33 GMT
    +      - Thu, 05 Mar 2020 23:17:51 GMT
           expires:
           - '-1'
           pragma:
    @@ -1663,16 +2673,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -1683,12 +2693,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1697,7 +2707,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:33 GMT
    +      - Thu, 05 Mar 2020 23:17:53 GMT
           expires:
           - '-1'
           pragma:
    @@ -1711,11 +2721,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1731,12 +2741,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1745,7 +2755,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:35 GMT
    +      - Thu, 05 Mar 2020 23:17:55 GMT
           expires:
           - '-1'
           pragma:
    @@ -1759,11 +2769,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1779,12 +2789,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1793,7 +2803,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:37 GMT
    +      - Thu, 05 Mar 2020 23:17:57 GMT
           expires:
           - '-1'
           pragma:
    @@ -1807,11 +2817,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1827,12 +2837,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1841,7 +2851,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:39 GMT
    +      - Thu, 05 Mar 2020 23:17:59 GMT
           expires:
           - '-1'
           pragma:
    @@ -1855,11 +2865,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1875,21 +2885,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583450259,"scheduledPurgeDate":1591226259,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/75958de2fc324932b07cce8a90524c5e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"zN_6H3M2px1sckAlylhKMC5XaGBU1j-PpObB2t-xNIF0qv7zqNJEsvqBpcMpAuO6WH9g3zPd5qatKBsevqw6xQ5rcssfiI3k5MdBRZN7mnI7jW2fQ66JfPbM5XaNgVpymTSi0EYJDfhfG5pZud0vi-UNH4NZjSQW_9nGoahyYYjMGTfX9L0Kt6XzODQ0FDmLEtjj6fA9tsZLJ37f71_cmdGkeuScXd49uxzkr1vD1hQ3TaDPNCXjhTUSdX1WXgDXeuegwSUgBWp8RwQ7RuAwkKEnfhQZjO-qGJlP8Lt9yuBZl_Hdj7o3ghgkXtFnzc6hNWYQ3XDMDEPp4Rm2GfdPvQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:41 GMT
    +      - Thu, 05 Mar 2020 23:18:01 GMT
           expires:
           - '-1'
           pragma:
    @@ -1903,16 +2913,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -1922,22 +2932,24 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    +      Content-Length:
    +      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583450282,"scheduledPurgeDate":1591226282,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/1100c8d6a0ad4248a54bff1143cd9b57","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vvxnvdFST4aALYOW3U1cVdKF3CkPut-H4Qm8jJNUPvCtOu0c9wJBqDbkNLef6jH5iQBuGBfNQPKixWTcR-n3MwNaZiLre61RSpoKHgZGQ6_3eNccS9WZPBviz0kZxa7me9ZDUOqpDO3NpUParF-r4A0sLIVgom83EpZI57M3wkS5tV0aiX3c4q1nRxWv0Uq6nNRfprzryB-CqGaN6iO9ykty-32Z98CB_PWmXHJu_FsHppkrdhUo9VWEBnPj5nMmLShiMBDQQ-5AURKwuEvn6LmjtmUAoXaAxFIVFMoj-W9OX5kltX-M_xSOpT80gOGjMkSUv_ODFjZTjL61HqpYmw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:43 GMT
    +      - Thu, 05 Mar 2020 23:18:02 GMT
           expires:
           - '-1'
           pragma:
    @@ -1951,16 +2963,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -1971,12 +2983,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1985,7 +2997,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:45 GMT
    +      - Thu, 05 Mar 2020 23:18:02 GMT
           expires:
           - '-1'
           pragma:
    @@ -1999,11 +3011,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2019,21 +3031,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676653,"scheduledPurgeDate":1583452653,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/713764e0c7b74a15be4c49f25ad2ace8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"zpb_kBQLTv1mY8J3zfxl_ZZhZILW4XUBpi7guaO0aAaZ6cEBZ1UWIGRC1zaFXtQVfq_rivDvKJZleNbZltkb7FlS1A43THb9tYCtdspgMEQYbDSS8kdm6mKPOeiXtBeO2Me-XxNldAHpm5j38jMRx_JYiWBoEYxhRCU_iknQOWegWigQr0cwQFPRxSsCEcsLhd56Yg7f0bKJpOTT5SviM-a2qk4qSwXy_CL21HVrrhP6t2Pj7NKBmmAZrTBq3Zn_y8bFQNyqvspW4S8cCGd5FKt_mwPKwW4xYpsmpnXvyqhddDEslBtd0ccHTWb7qkctj7hmZFzoGY4Sr5lNwnBJdQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:47 GMT
    +      - Thu, 05 Mar 2020 23:18:04 GMT
           expires:
           - '-1'
           pragma:
    @@ -2047,16 +3059,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -2066,24 +3078,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key3?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676670,"scheduledPurgeDate":1583452670,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/2ba714d2d1664b8b88401aa790170dae","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sJ-oEoIfG0fsh4hLdBk5pWPx7kQGi6u_6wwK2XpyYU5Cks2SXGZFXLNhtomP5QCYrslbmaWZx3OdydpAv2DCsCBZyTF9NpAtsbWD574hRNEqXTrt83HFnGpnrz_iC8Q6_TR0zha01ia3NTFr4xn4Cd2beDoNjBILY8zi5kToVle5eg6LQcP1G-baIirx2lZ5G1YPyDCpC8e7C-j3L2ycgyDIVtW7kb_Ryz2rMuKvrZZ6wt8mzYRzUYm7ZuFUJWUH5JUaeza5ZX54bEosFhmZ8Kz8KNxuZxg-gVMPtzrtfXwkKWY6lOQIvAyokbd01Rf0UWzBRPWtBozScp7Ias7nLQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:49 GMT
    +      - Thu, 05 Mar 2020 23:18:06 GMT
           expires:
           - '-1'
           pragma:
    @@ -2097,16 +3107,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -2117,12 +3127,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2131,7 +3141,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:49 GMT
    +      - Thu, 05 Mar 2020 23:18:08 GMT
           expires:
           - '-1'
           pragma:
    @@ -2145,11 +3155,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2165,12 +3175,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2179,7 +3189,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:51 GMT
    +      - Thu, 05 Mar 2020 23:18:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -2193,11 +3203,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2213,12 +3223,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2227,7 +3237,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:54 GMT
    +      - Thu, 05 Mar 2020 23:18:13 GMT
           expires:
           - '-1'
           pragma:
    @@ -2241,11 +3251,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2261,12 +3271,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2275,7 +3285,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:56 GMT
    +      - Thu, 05 Mar 2020 23:18:15 GMT
           expires:
           - '-1'
           pragma:
    @@ -2289,11 +3299,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2309,12 +3319,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2323,7 +3333,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:58 GMT
    +      - Thu, 05 Mar 2020 23:18:17 GMT
           expires:
           - '-1'
           pragma:
    @@ -2337,11 +3347,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2357,12 +3367,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2371,7 +3381,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:00 GMT
    +      - Thu, 05 Mar 2020 23:18:19 GMT
           expires:
           - '-1'
           pragma:
    @@ -2385,11 +3395,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2405,12 +3415,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2419,7 +3429,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:02 GMT
    +      - Thu, 05 Mar 2020 23:18:21 GMT
           expires:
           - '-1'
           pragma:
    @@ -2433,11 +3443,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2453,12 +3463,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2467,7 +3477,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:04 GMT
    +      - Thu, 05 Mar 2020 23:18:23 GMT
           expires:
           - '-1'
           pragma:
    @@ -2481,11 +3491,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2501,12 +3511,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2515,7 +3525,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:06 GMT
    +      - Thu, 05 Mar 2020 23:18:25 GMT
           expires:
           - '-1'
           pragma:
    @@ -2529,11 +3539,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2549,12 +3559,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676670,"scheduledPurgeDate":1583452670,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/2ba714d2d1664b8b88401aa790170dae","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sJ-oEoIfG0fsh4hLdBk5pWPx7kQGi6u_6wwK2XpyYU5Cks2SXGZFXLNhtomP5QCYrslbmaWZx3OdydpAv2DCsCBZyTF9NpAtsbWD574hRNEqXTrt83HFnGpnrz_iC8Q6_TR0zha01ia3NTFr4xn4Cd2beDoNjBILY8zi5kToVle5eg6LQcP1G-baIirx2lZ5G1YPyDCpC8e7C-j3L2ycgyDIVtW7kb_Ryz2rMuKvrZZ6wt8mzYRzUYm7ZuFUJWUH5JUaeza5ZX54bEosFhmZ8Kz8KNxuZxg-gVMPtzrtfXwkKWY6lOQIvAyokbd01Rf0UWzBRPWtBozScp7Ias7nLQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583450282,"scheduledPurgeDate":1591226282,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/1100c8d6a0ad4248a54bff1143cd9b57","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vvxnvdFST4aALYOW3U1cVdKF3CkPut-H4Qm8jJNUPvCtOu0c9wJBqDbkNLef6jH5iQBuGBfNQPKixWTcR-n3MwNaZiLre61RSpoKHgZGQ6_3eNccS9WZPBviz0kZxa7me9ZDUOqpDO3NpUParF-r4A0sLIVgom83EpZI57M3wkS5tV0aiX3c4q1nRxWv0Uq6nNRfprzryB-CqGaN6iO9ykty-32Z98CB_PWmXHJu_FsHppkrdhUo9VWEBnPj5nMmLShiMBDQQ-5AURKwuEvn6LmjtmUAoXaAxFIVFMoj-W9OX5kltX-M_xSOpT80gOGjMkSUv_ODFjZTjL61HqpYmw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2563,7 +3573,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:08 GMT
    +      - Thu, 05 Mar 2020 23:18:27 GMT
           expires:
           - '-1'
           pragma:
    @@ -2577,11 +3587,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2599,12 +3609,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676690,"scheduledPurgeDate":1583452690,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/6218792573f64cc1829f5387e1208182","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"rA4SLbBM-kb1vY71b0OMzv5Qvjv-RVeyVmMuYaiizDSRN12eRdzqcMk8t9hqWaiSiXhyNfMaAwg5xhAQOOFeDkzBZKUNcmKxxcoyp0rzek1Lm9NmQBHVwev753FWMPUzlRT1iSWsVBLhPSeowvoKDuGaXswZMRINHNIOC7h8ozMdq9jfaW88oEYb-P7WJxSsQVOSMSlAgSM8B3oiEbbPMy-CN4KI5MZeWTTk7MT5kM7uNhUtvbIGWt0iyBvepStjJjTf9NpCJ0JvQtyM8WxfCzvelWMje5RC5wL4jgAgbc0__z8hbF3MmOFtGYcaJ3h0VPNyksqgKSEbNm4WjjgMOw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583450308,"scheduledPurgeDate":1591226308,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/265cf02d331d4209b101d8aa8c199bb6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"owoYOKU5FkGwojmlIPnmFS7lOVe40EjAwG35yS6A8g2n07rt3TtGKOBfGIugc58SW7Yj1ymA16IqrVO8K9Wa9QKj4-3RWpWjJ5iN6zqD4hyq4H8khul3g5p7gPYrXofdCLcHYrBiEVS2LOVYVDBeamNsDwXfQf7Iwh5V4bT5GER4wCAcWw3hRwkssEykaPcpjX1xN0-FYzd8o4F8bOuSYaDtaIpB6ymWF3T-sTa5UIXd0HArY5sE_ToNNNmwYYNRe2wxkZRRE0g2Irci1sT_xGpGIrUqi4u3SIJeUyfwj5b7FTunT_72cyMqXeFoTC_5fFC8deWD--NFS1KzHWVxuQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2613,7 +3623,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:10 GMT
    +      - Thu, 05 Mar 2020 23:18:27 GMT
           expires:
           - '-1'
           pragma:
    @@ -2627,11 +3637,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2647,12 +3657,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2661,7 +3671,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:10 GMT
    +      - Thu, 05 Mar 2020 23:18:27 GMT
           expires:
           - '-1'
           pragma:
    @@ -2675,11 +3685,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2695,12 +3705,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2709,7 +3719,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:12 GMT
    +      - Thu, 05 Mar 2020 23:18:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -2723,11 +3733,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2743,12 +3753,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2757,7 +3767,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:14 GMT
    +      - Thu, 05 Mar 2020 23:18:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -2771,11 +3781,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2791,12 +3801,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2805,7 +3815,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:16 GMT
    +      - Thu, 05 Mar 2020 23:18:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -2819,11 +3829,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2839,12 +3849,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2853,7 +3863,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:18 GMT
    +      - Thu, 05 Mar 2020 23:18:35 GMT
           expires:
           - '-1'
           pragma:
    @@ -2867,11 +3877,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2887,12 +3897,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2901,7 +3911,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:20 GMT
    +      - Thu, 05 Mar 2020 23:18:38 GMT
           expires:
           - '-1'
           pragma:
    @@ -2915,11 +3925,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2935,12 +3945,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2949,7 +3959,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:22 GMT
    +      - Thu, 05 Mar 2020 23:18:40 GMT
           expires:
           - '-1'
           pragma:
    @@ -2963,11 +3973,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2983,12 +3993,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2997,7 +4007,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:24 GMT
    +      - Thu, 05 Mar 2020 23:18:42 GMT
           expires:
           - '-1'
           pragma:
    @@ -3011,11 +4021,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3031,21 +4041,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676690,"scheduledPurgeDate":1583452690,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/6218792573f64cc1829f5387e1208182","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"rA4SLbBM-kb1vY71b0OMzv5Qvjv-RVeyVmMuYaiizDSRN12eRdzqcMk8t9hqWaiSiXhyNfMaAwg5xhAQOOFeDkzBZKUNcmKxxcoyp0rzek1Lm9NmQBHVwev753FWMPUzlRT1iSWsVBLhPSeowvoKDuGaXswZMRINHNIOC7h8ozMdq9jfaW88oEYb-P7WJxSsQVOSMSlAgSM8B3oiEbbPMy-CN4KI5MZeWTTk7MT5kM7uNhUtvbIGWt0iyBvepStjJjTf9NpCJ0JvQtyM8WxfCzvelWMje5RC5wL4jgAgbc0__z8hbF3MmOFtGYcaJ3h0VPNyksqgKSEbNm4WjjgMOw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:27 GMT
    +      - Thu, 05 Mar 2020 23:18:44 GMT
           expires:
           - '-1'
           pragma:
    @@ -3059,16 +4069,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -3078,24 +4088,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key5?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676709,"scheduledPurgeDate":1583452709,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/12577f5721bb4264b9c005cb45d0b97b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tdb8csxzHpsbhd4zFBMyxTB6PDlKoAZWSgzqskfkUMRRl1UnWyq4wQldZ6u3bTjq_2hVLL6wt_WmkGvKkN2VabrriZdAtn8-UXYUTsp2r3ln1cPLwERXa_gLsBYt7MYz_31_c3cU7JNnQjQWWzp2yHJBQZcnS_leGZypFQuKO2-9g6oSjO4shMGysYja8Mx6QDYYfJTML5lNk0epdWtizawujH_UxG7k14rZzbQ5FGzn7wSXExpDD8Pfug4D_1ED-CWUdLjAny7E-NkoNdy04nDskK-6BDb8UCazr1KJjrV3ATgKUgwmNOjsOZE5KjQTM91XmYx32hfSSjh2oRViDw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:29 GMT
    +      - Thu, 05 Mar 2020 23:18:46 GMT
           expires:
           - '-1'
           pragma:
    @@ -3109,16 +4117,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -3129,9 +4137,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    @@ -3143,7 +4151,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:29 GMT
    +      - Thu, 05 Mar 2020 23:18:48 GMT
           expires:
           - '-1'
           pragma:
    @@ -3157,11 +4165,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3177,9 +4185,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    @@ -3191,7 +4199,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:31 GMT
    +      - Thu, 05 Mar 2020 23:18:50 GMT
           expires:
           - '-1'
           pragma:
    @@ -3205,11 +4213,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3225,9 +4233,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    @@ -3239,7 +4247,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:33 GMT
    +      - Thu, 05 Mar 2020 23:18:52 GMT
           expires:
           - '-1'
           pragma:
    @@ -3253,11 +4261,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3273,9 +4281,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    @@ -3287,7 +4295,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:35 GMT
    +      - Thu, 05 Mar 2020 23:18:54 GMT
           expires:
           - '-1'
           pragma:
    @@ -3301,11 +4309,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3321,9 +4329,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    @@ -3335,7 +4343,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:37 GMT
    +      - Thu, 05 Mar 2020 23:18:56 GMT
           expires:
           - '-1'
           pragma:
    @@ -3349,11 +4357,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3369,9 +4377,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    @@ -3383,7 +4391,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:39 GMT
    +      - Thu, 05 Mar 2020 23:18:58 GMT
           expires:
           - '-1'
           pragma:
    @@ -3397,11 +4405,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3417,21 +4425,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583450308,"scheduledPurgeDate":1591226308,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/265cf02d331d4209b101d8aa8c199bb6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"owoYOKU5FkGwojmlIPnmFS7lOVe40EjAwG35yS6A8g2n07rt3TtGKOBfGIugc58SW7Yj1ymA16IqrVO8K9Wa9QKj4-3RWpWjJ5iN6zqD4hyq4H8khul3g5p7gPYrXofdCLcHYrBiEVS2LOVYVDBeamNsDwXfQf7Iwh5V4bT5GER4wCAcWw3hRwkssEykaPcpjX1xN0-FYzd8o4F8bOuSYaDtaIpB6ymWF3T-sTa5UIXd0HArY5sE_ToNNNmwYYNRe2wxkZRRE0g2Irci1sT_xGpGIrUqi4u3SIJeUyfwj5b7FTunT_72cyMqXeFoTC_5fFC8deWD--NFS1KzHWVxuQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:41 GMT
    +      - Thu, 05 Mar 2020 23:19:00 GMT
           expires:
           - '-1'
           pragma:
    @@ -3445,16 +4453,66 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583450341,"scheduledPurgeDate":1591226341,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/dec223a8d8b6441eaae3b9610b62140c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nedQRalllyPV6WAEXeaY7IM7-P-1ccN27H5oYA2LmzYzG6qKvql37q3qZUaSvrgoLHiNh395zhlvWzI-N0XWmfq0jViFAq0YIhZvOcsdzQCVDHlv5_dKS5OecBPwx_YCTWC6wLXZ44JcCwYyIDKJYm564sYKFUsg3hgFwMbzwe3knDF0pBb7zYE-XSQxPhh_iZ8CpB3LZ-vWQ9QrJ4vvSaAxB79pmbX6tE_Hyiwn822gb3q6EIRocanTsiU43OVfBAETbTLfyo2N_8lk2J2BPWVlU8UBLc6HEDZk_8h6L5BVQKIo3e_uBVlextRneoJVp2aSi7dLpSskztRfH51p3Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '801'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:19:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -3465,12 +4523,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3479,7 +4537,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:43 GMT
    +      - Thu, 05 Mar 2020 23:19:00 GMT
           expires:
           - '-1'
           pragma:
    @@ -3493,11 +4551,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3513,12 +4571,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3527,7 +4585,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:45 GMT
    +      - Thu, 05 Mar 2020 23:19:02 GMT
           expires:
           - '-1'
           pragma:
    @@ -3541,11 +4599,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3561,21 +4619,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676709,"scheduledPurgeDate":1583452709,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/12577f5721bb4264b9c005cb45d0b97b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tdb8csxzHpsbhd4zFBMyxTB6PDlKoAZWSgzqskfkUMRRl1UnWyq4wQldZ6u3bTjq_2hVLL6wt_WmkGvKkN2VabrriZdAtn8-UXYUTsp2r3ln1cPLwERXa_gLsBYt7MYz_31_c3cU7JNnQjQWWzp2yHJBQZcnS_leGZypFQuKO2-9g6oSjO4shMGysYja8Mx6QDYYfJTML5lNk0epdWtizawujH_UxG7k14rZzbQ5FGzn7wSXExpDD8Pfug4D_1ED-CWUdLjAny7E-NkoNdy04nDskK-6BDb8UCazr1KJjrV3ATgKUgwmNOjsOZE5KjQTM91XmYx32hfSSjh2oRViDw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:48 GMT
    +      - Thu, 05 Mar 2020 23:19:06 GMT
           expires:
           - '-1'
           pragma:
    @@ -3589,16 +4647,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -3608,24 +4666,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key6?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676730,"scheduledPurgeDate":1583452730,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/1833ddde922f462585464cabe5b116cc","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lE33rWG6lpdnERG0zp2zNF71bboOAO6eoWht7Ug76DaxQCYGia_3ZJkLc_Pvw5_SiCclixqQm7SvXo6f16qkY8JIQtpMD1s_-8VtJen9_KUdZ7ZLYsBi_mCOxUxxZzyuSU6O7tSSyyfGJ46gu3ZtuqEDV175m1dOVg7PtI8EmegJpey2H7A9GaaLjSEUvvq4dWupKsaqvl-H0AKvR8snvzIs8fZGuAYjKuDKtgMzK1bEghgEaFo0bAgn0GLZqhuHXWe0o9PM4ViR042zy93lTR0sYeutFgkCepAOvuOba80Six8Gdif2ETGaE6_NISl6xN2jnDa_QaLajglUEX7rqw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:50 GMT
    +      - Thu, 05 Mar 2020 23:19:08 GMT
           expires:
           - '-1'
           pragma:
    @@ -3639,16 +4695,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -3659,9 +4715,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    @@ -3673,7 +4729,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:50 GMT
    +      - Thu, 05 Mar 2020 23:19:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -3687,11 +4743,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3707,9 +4763,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    @@ -3721,7 +4777,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:52 GMT
    +      - Thu, 05 Mar 2020 23:19:12 GMT
           expires:
           - '-1'
           pragma:
    @@ -3735,11 +4791,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3755,9 +4811,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    @@ -3769,7 +4825,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:54 GMT
    +      - Thu, 05 Mar 2020 23:19:14 GMT
           expires:
           - '-1'
           pragma:
    @@ -3783,11 +4839,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3803,9 +4859,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    @@ -3817,7 +4873,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:56 GMT
    +      - Thu, 05 Mar 2020 23:19:16 GMT
           expires:
           - '-1'
           pragma:
    @@ -3831,11 +4887,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3851,9 +4907,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    @@ -3865,7 +4921,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:58 GMT
    +      - Thu, 05 Mar 2020 23:19:18 GMT
           expires:
           - '-1'
           pragma:
    @@ -3879,11 +4935,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3899,9 +4955,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    @@ -3913,7 +4969,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:00 GMT
    +      - Thu, 05 Mar 2020 23:19:20 GMT
           expires:
           - '-1'
           pragma:
    @@ -3927,11 +4983,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3947,9 +5003,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    @@ -3961,7 +5017,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:02 GMT
    +      - Thu, 05 Mar 2020 23:19:22 GMT
           expires:
           - '-1'
           pragma:
    @@ -3975,11 +5031,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3995,9 +5051,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    @@ -4009,7 +5065,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:04 GMT
    +      - Thu, 05 Mar 2020 23:19:24 GMT
           expires:
           - '-1'
           pragma:
    @@ -4023,11 +5079,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4043,9 +5099,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    @@ -4057,7 +5113,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:06 GMT
    +      - Thu, 05 Mar 2020 23:19:26 GMT
           expires:
           - '-1'
           pragma:
    @@ -4071,11 +5127,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4091,9 +5147,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    @@ -4105,7 +5161,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:08 GMT
    +      - Thu, 05 Mar 2020 23:19:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -4119,11 +5175,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4139,12 +5195,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676730,"scheduledPurgeDate":1583452730,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/1833ddde922f462585464cabe5b116cc","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lE33rWG6lpdnERG0zp2zNF71bboOAO6eoWht7Ug76DaxQCYGia_3ZJkLc_Pvw5_SiCclixqQm7SvXo6f16qkY8JIQtpMD1s_-8VtJen9_KUdZ7ZLYsBi_mCOxUxxZzyuSU6O7tSSyyfGJ46gu3ZtuqEDV175m1dOVg7PtI8EmegJpey2H7A9GaaLjSEUvvq4dWupKsaqvl-H0AKvR8snvzIs8fZGuAYjKuDKtgMzK1bEghgEaFo0bAgn0GLZqhuHXWe0o9PM4ViR042zy93lTR0sYeutFgkCepAOvuOba80Six8Gdif2ETGaE6_NISl6xN2jnDa_QaLajglUEX7rqw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583450341,"scheduledPurgeDate":1591226341,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/dec223a8d8b6441eaae3b9610b62140c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nedQRalllyPV6WAEXeaY7IM7-P-1ccN27H5oYA2LmzYzG6qKvql37q3qZUaSvrgoLHiNh395zhlvWzI-N0XWmfq0jViFAq0YIhZvOcsdzQCVDHlv5_dKS5OecBPwx_YCTWC6wLXZ44JcCwYyIDKJYm564sYKFUsg3hgFwMbzwe3knDF0pBb7zYE-XSQxPhh_iZ8CpB3LZ-vWQ9QrJ4vvSaAxB79pmbX6tE_Hyiwn822gb3q6EIRocanTsiU43OVfBAETbTLfyo2N_8lk2J2BPWVlU8UBLc6HEDZk_8h6L5BVQKIo3e_uBVlextRneoJVp2aSi7dLpSskztRfH51p3Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4153,7 +5209,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:10 GMT
    +      - Thu, 05 Mar 2020 23:19:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -4167,11 +5223,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4187,12 +5243,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.1-preview
       response:
         body:
    -      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676605,"scheduledPurgeDate":1583452605,"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676638,"scheduledPurgeDate":1583452638,"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676653,"scheduledPurgeDate":1583452653,"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676670,"scheduledPurgeDate":1583452670,"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676690,"scheduledPurgeDate":1583452690,"kid":"https://vaultname.vault.azure.net/keys/key4","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676709,"scheduledPurgeDate":1583452709,"kid":"https://vaultname.vault.azure.net/keys/key5","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676730,"scheduledPurgeDate":1583452730,"kid":"https://vaultname.vault.azure.net/keys/key6","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583450190,"scheduledPurgeDate":1591226190,"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583450205,"scheduledPurgeDate":1591226205,"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583450232,"scheduledPurgeDate":1591226232,"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583450259,"scheduledPurgeDate":1591226259,"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583450282,"scheduledPurgeDate":1591226282,"kid":"https://vaultname.vault.azure.net/keys/key4","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583450308,"scheduledPurgeDate":1591226308,"kid":"https://vaultname.vault.azure.net/keys/key5","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583450341,"scheduledPurgeDate":1591226341,"kid":"https://vaultname.vault.azure.net/keys/key6","attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
           cache-control:
           - no-cache
    @@ -4201,7 +5257,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:13 GMT
    +      - Thu, 05 Mar 2020 23:19:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -4215,11 +5271,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4237,9 +5293,9 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
           string: ''
    @@ -4247,7 +5303,7 @@ interactions:
           cache-control:
           - no-cache
           date:
    -      - Fri, 06 Dec 2019 23:59:13 GMT
    +      - Thu, 05 Mar 2020 23:19:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -4261,11 +5317,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4283,9 +5339,9 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
           string: ''
    @@ -4293,7 +5349,7 @@ interactions:
           cache-control:
           - no-cache
           date:
    -      - Fri, 06 Dec 2019 23:59:13 GMT
    +      - Thu, 05 Mar 2020 23:19:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -4307,11 +5363,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4329,9 +5385,9 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
           string: ''
    @@ -4339,7 +5395,7 @@ interactions:
           cache-control:
           - no-cache
           date:
    -      - Fri, 06 Dec 2019 23:59:13 GMT
    +      - Thu, 05 Mar 2020 23:19:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -4353,11 +5409,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4375,9 +5431,9 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: ''
    @@ -4385,7 +5441,7 @@ interactions:
           cache-control:
           - no-cache
           date:
    -      - Fri, 06 Dec 2019 23:59:13 GMT
    +      - Thu, 05 Mar 2020 23:19:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -4399,11 +5455,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4421,9 +5477,9 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: ''
    @@ -4431,7 +5487,7 @@ interactions:
           cache-control:
           - no-cache
           date:
    -      - Fri, 06 Dec 2019 23:59:13 GMT
    +      - Thu, 05 Mar 2020 23:19:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -4445,11 +5501,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4467,9 +5523,9 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
           string: ''
    @@ -4477,7 +5533,7 @@ interactions:
           cache-control:
           - no-cache
           date:
    -      - Fri, 06 Dec 2019 23:59:13 GMT
    +      - Thu, 05 Mar 2020 23:19:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -4491,11 +5547,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4513,9 +5569,9 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: ''
    @@ -4523,7 +5579,7 @@ interactions:
           cache-control:
           - no-cache
           date:
    -      - Fri, 06 Dec 2019 23:59:14 GMT
    +      - Thu, 05 Mar 2020 23:19:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -4537,11 +5593,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4557,9 +5613,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    @@ -4571,7 +5627,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:14 GMT
    +      - Thu, 05 Mar 2020 23:19:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -4585,11 +5641,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4605,9 +5661,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    @@ -4619,7 +5675,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:14 GMT
    +      - Thu, 05 Mar 2020 23:19:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -4633,11 +5689,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4653,9 +5709,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    @@ -4667,7 +5723,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:14 GMT
    +      - Thu, 05 Mar 2020 23:19:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -4681,11 +5737,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4701,9 +5757,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    @@ -4715,7 +5771,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:14 GMT
    +      - Thu, 05 Mar 2020 23:19:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -4729,11 +5785,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4749,9 +5805,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    @@ -4763,7 +5819,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:14 GMT
    +      - Thu, 05 Mar 2020 23:19:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -4777,11 +5833,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4797,9 +5853,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    @@ -4811,7 +5867,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:14 GMT
    +      - Thu, 05 Mar 2020 23:19:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -4825,11 +5881,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4845,9 +5901,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    @@ -4859,7 +5915,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:14 GMT
    +      - Thu, 05 Mar 2020 23:19:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -4873,11 +5929,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4893,9 +5949,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.1-preview
       response:
         body:
           string: '{"value":[],"nextLink":null}'
    @@ -4907,7 +5963,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:14 GMT
    +      - Thu, 05 Mar 2020 23:19:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -4921,11 +5977,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_recover.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_recover.yaml
    index 244a17da6fa2..3b40c2b4f291 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_recover.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_key_client.test_recover.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:43 GMT
    +      - Thu, 05 Mar 2020 23:16:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,12 +69,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/2997d10b1f8247f39b3b2eb35e5a92b9","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kF8OshW4LqKfosSSOxG3BOrLYh96LHjrlgICRyGs_7RY9XpL36tBMDuRPi33c48-YJ-JISQjOIO0isPC2MlZ1NaIxAYKN8UY5e3g4gu0f5-lXFdwizVpokcQjmmNiYqoq4WoWhSN6HAU7qdMRQphTF3LHN3N-0YzKYw_bBXBq8zAKwcaWow3M_8WxJVCiQtSetsfO07gh8zR_UaFwWUvjtGyzESAi1V4jocA2_26XVVCt0jXkgSn8k83wjGwP4UaYrgyE1E5v_xzjv9WzcmLeRgUsA7QZOn3WUjGs-iWAU7rcOZpfJ0IHvU9t39LWbNfuz2muuQlJ6ViTKj91SRgIw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676603,"updated":1575676603,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/c9342ae17b624d1987c9e8044f272e01","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5r6094j5i5MZqSH8MCySgTfaUwD_pWQpoYwYdtpBFriv3m8GEbytZa7-OjqhSViaSF0pFfnTIYUrcciCFqGNVTmmGdF4q4MG1Gx3H-Y8zpudDhNF3TyAjmipeyCbPetVGpKAy16agnLvZRJvb-wavSdpk7Tg5EUU-WeZ9ZI6y3qi9oIgDDc8BISxdKKm59CnipQob7WrP-A6EFdhrk9sX8ldc01SiPSlxEADtPVzEKdYMFyuIUWdRPSrQ4LPKO4K4Y3WLS_VkfEBAX2Ybv4TYsxSWmbF0FDfo77vD3X3BcpBZ-yY49kV9NSVPTbD0gXziNLu_55_yBQRDG1PqbouPQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -83,7 +83,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:43 GMT
    +      - Thu, 05 Mar 2020 23:16:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -121,12 +121,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/6ce1f8a43bdd4a3e8ef7ca9b3a983fce","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kGtBvobBRRhbXbj0lvCRPlLmpd30NEHTIX2csY-tQUY_HkoRvIdOs3x6Wu6jmuwctsDtjxsb6RTM_6TMWB_YDV9bGJ0BtN3ConhUhKzMUwyWwHYi_62XqHLBHLwzRB3jMx0mbYj_1iF3LiNqEVJafo-KjVxiV3_du1FDZkIbcI39VaAy5koNOKqD8ia0S_HMk5FzGbcw0-upTFVNGzSq9pl1rj1ZqjeKXfPZMGKntT-YgixGktripjBa4ZAbTTTaRHP2wiLOJf516eKxxjTTjmJduDdBDI4o3c0Xg-9goLCrwT8pdiknXDpHl-kIFSGNnC5EXJOXDQGhLq2kUuIVFw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/0ec542b313aa4913b46481ae8f3f13b5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"omWXFQ9DUuXPmKRcgUnjO_QDHVPz4X61a3G-sO9Ad3vd-RK4BJn3Ru__JHfMs0on_rBQ9DmKvQx3DJepRiZ3k4FsWzCGATAaIJ8BaL8u3L4CwPZ_gb7_lk9P64CIGqZ15ne8mI3hB5fZ6PZhDH-pMIW-pm7h2brIo2UhdjxVdZNgbPlma0im6CgAl6D6HLtJiseXfOM0_C1iO0F-aifBnDN5NVaCjbduHHXH-MACE5EMZi1-FlMVxHQ3jao3ZinOP9FCs8uSk82GMuyG7RPU9fpknfVKoH2cmqhAV36diWzKe3YKC6cO2mHZpK7D5CKyytZtHx2W-M6Cj6-WIUZ7Xw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -135,7 +135,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:43 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,11 +149,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -173,12 +173,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/dc39c9c6102e464789c63738bef46e81","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"rdXjc8xIy4YJfvhAycL7GbEwUNzCzObiMvESDA10fslpbYhgVJUmms4G5TNuqZavZ4CIHDRpQK8_JmogWRmxowhNxfDigK2EUUo8WWdSrqDQ-3S6BATem2ExD3mtgdf1iRWVQgWiyO6eFK8-J1sKTQ7KcnciNJrvwJCZfy23l3JLK7ZD98djIn7V4mLWQkiGxCKolLAAKKRTP81z-17HFyeQifZ33LqBegdHnhcZaUf_GeDP-lEv76FOzF4O_GdUAnlzD6Q2vZPMgy_bz4FB6VLP7vvmOlp1DuQeeDrhDEKhkVGqkvKMYlIuTrOLHadEHhEZeLVcR41j4niK4pNIuw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/f8c158ef56984200b4a59840765cf407","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5Ckn3PSuWPr5FpPG4papkttfxmK6tB1kFvkE8sXBy0Qsym3mfqOWuXUeTatKLKuw6XWIbey_6dVKXxlshtQ_pGI2Am2KbbnKaiXMsbvI0tNM2_C9N-5XFSoFlyKJMAJoRqdbmO1vmQqa8BBt-fp-edAwHpVDVzpky6dEb0jYj968aV4ok6Py8-nF_SJVYHxnHir5XTkPAUEV4FOUN_WZ8RmfpRFvxgw-vK3c6SgoW_KRbw6DKbgTaITENnHYFmiKDL1tuNbJSF7pxykv8QjEwP8cEgIaKWlY488_gRu3vWQucja5yI1irpmz9G_m1DIY8ZRZg7G3NLHrAUnXo6zOPw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -187,7 +187,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -201,11 +201,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -225,12 +225,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/37993cf30cf9427b84b617982d828127","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"yb5_fI2KzF3mQ3j9jWF9TU0RzOkbGQs1TLMinLZh4idWcNjrQvFk31QUAu_5WPg8Bo7VReF5d_drPH3VzyINXZi8S7RDJgclXfBUHKcbu0Fd4gEgZV-4N2UcOGFKNjn06B6cVeMuoHMoL54-85PP0-8THMDnTi1mJfXdlQZlSCLInk3xuKrT4D-yH2iNqFtz3xFBYK8UPgawL-2pbr9tY_dCWJxCD6cgFkQ5g1DCaPHJ9SpSjnA92JzXafyx-FT_7j4lsle-Vl89mQ4q4fapRjPMeY4aNPql5qc9tButlcarXQuJRv_0xyWKkJ52QAdOgzmKKpSWjB3DtS4nHB2CaQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/80eada7f91554257a3b450b9c24d528a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sSt7G_V1dOnLcFhiKDTyZmiT7Sc72Vgm1HCrgoiD7QxnQKy5XOB3JdkeYyZO6npbpGsLbKm5MF4ueCx963XxYr8vNtklstxiyLFIY8Z9dE_GQ0ykI0ggBai8Ubb-uAFtY2N-Zq5vch1F7kMeTHKDtJEfK2qRCoEs81aX9jEwpHyPsL47JbS1TEnwjqz4v0urNqXRfofP5e4SspPpXiZbV0hV_Sr7d7npDDeP8VkbaaWuyuNYrWpHCiBpD1Rn1SPSaQZSyhPWWcly0UixMUC-7ogP9zAkY7bC6aOdBzYhYFD1fQ5QSM4Jp-0fTmgvB615RZEGZvjvgWwdZdZksf152w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -239,7 +239,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -253,11 +253,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -277,12 +277,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/b3fdf02df5404f18bd26b4c3c45a9641","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"j_yUCTbJ6nUWQXEf-f52YJ4jXgYRnioR8E8QDvz24C-2adZ8oMInSq9hQqmqUJCdyeIlQY7ir5LVZoNmd0UF-iTsMGFzFMZOqaczIm9LPcyF1mamM9jV4bf5QLYUmtpN6A5Ea9HiubpqRd0owprzbsGr_J3zBYX7JAWd4Mw1mhKHCa5FbxHcXXSfBeKM7-LIto7FbTzgXdZGqDvYdwdhoL9Yay3L1EqcbuFYS0eJ3CgXhmixEWnww2qRw0ZvW3mt_hTnYlfL6-MjPWO8mn6nWC5aYv_kzBXPgwtRSLoGNBxm4xuPJ8VSPNFFwPQo0KnqUyNjjyl6-jpe_Ne_nLkh5Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/e33ff17a084e4b679012e34e0938f8d6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"njx2AcylXK6IxdXLRwuuCTKvIOHAEBNY4_8v7LezXKhOnITILD72NGR_F-nChIOH_9qoLteomUHZeqTqNmDYfo3TSk2Gp_YioiTzy3aXsHpLSinqHObSdpcpB_f9atL13zE5gSGgeoVI2_pkEmdso_gMmGvA9rsZ-V63jIpgXUbNg8fqazvRTE1L7W9Kz263yKTCsvffddJtSIXCOtcCTn4UjqJqKlgPeRTudATeOoc1_psNGSWsfYo4cnfISHcVGYi20EVE5qaAph--pPG5H6iBLT7iBNLvpugF5vozxtVYLyVRcwtaBwtJohcYPW0QOuyGYfv74fGwf2-jrDJ3gQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -291,7 +291,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -305,11 +305,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -329,12 +329,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/21f005dd70c4406f84d67802b3a86f55","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0LFhfg6KHVZ4_6rIx61_oA3Fba2NR6GaNr-4KtA6UV94g7G7ZrGFy1ETo50eiC1PeMDwO8OR_weCF2zMv14FEcZRzDeJQqMH7pFqkB1tsSqKv6SmXliuWfXN0v2QCplTy87fS690Jn_6C6v1E3JeJETQxN0gsiHv4FL8CfGnPt4Zh5e4nntju0oQORsAq_AFo-WjUqNZAF21g4qy_KOjncZGfwFbikfTSfykA71QA65yBO45Z1tkmhQzmEcepmIgFsllo2B32zWEj-DdqzI6XNkO0FoLhoMH-mU7DMXH6xay_AjtDVeZ7XSelp1z1QFwZUxjQaHN9yHGhjhx2S4N4w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/d1441b2c884e419d9814158a64384fd5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"q0qO2xcIoHTtMfQRdF3NyoPQCKUPKJO2FKJ5mUx1WJty3aFSfUbSqLdrwFzFcGwD_b_yTWscuOazk2jxCwf85zdukpmJDKVCXGdnz4xapoorWNKivYSnGLUtLBZdn2pi_rve3ox-8ud7pTl4TAtpcyUHct0Pc_qhoJDzgeQB9SYP5I11uNFZPWIl5Gf2uSIjF4W_lo-UJFBRfTbrvY-Gjy0ejqfv_cFixWg0_j-vmFsUwV__quA8mNLq_Qo9dPAAGLEqwWtdNjnbCugHgj5SA22dahk8JO8r3oVETi-TIg_mSC_PiJKTKd37ShwlFH1Fe4Mrdg6Z5cQ64r6Y4klvjw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -343,7 +343,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -357,11 +357,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -381,12 +381,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/8107525864cf4749a9a05c2ff0e0d74e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tKKhtcbDuhHbuwK-lbIOx2VJTRSwfsvMWQbl-KrBmmdRCAWFQzOkmQIK2nxFq5iFltJ5qHKnr9lAZ1HhVUrqQ0aizyRKbYN6fLbwD8kO2gdHTT_Gb0CIK17NLnIMqW3NjGJqxrYW3-0AcUnY-1aFoa2a6nW6ZnQ6KonG0I_P5Yb-5j8mfkE1YPeOqe6O6bn0Eq4PWTb2JqLmmb9gKQF8Yha7JRBBDRhCfn_H8kwlm3pkEpdXAHsm8AG3NrhxOLWkz1zXLDtQn5cOKx64coyP83QUcuxme6WpZgw8MfSDFFS_hr1n7_Dnn-WWcUxlYMk4OcIV65F5y3OnKYtBkcSnVQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/7bb40190000f4220a485089dbb122703","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"s_VCGdg1GPhrfNgFEq1Z6fm-bkmxYLSNaYdbQXKFVY5V0h6e9kqcVePcb2iDNMr3O9AkKb4_3dye7wyGp0nCzS4rJiMYecVottN0o2NUxJp0NBbw6IB02Etnb0KUtP9b3e7S4CN0txezSTH3L0yur5zs7DAn80kWx8SbV2nlJgvV9gUmeR6b_k1Ffbvs9rh6PSDSGRXhlWJw1zcMkIoMkvdEwg4vCKC4BHIDKiB4z9U5vkYmksE9DuXUzGZ_AG9PthFMKJfJOtCBDUE7ALFmVEGC0dDZdil5fiLaXIzpIFzvoW6fGmtK5wGM-D4GClDZPZxil5pDUI4NDsxBwkO8Mw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -395,7 +395,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:44 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -409,11 +409,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -431,12 +431,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676605,"scheduledPurgeDate":1583452605,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/21f005dd70c4406f84d67802b3a86f55","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0LFhfg6KHVZ4_6rIx61_oA3Fba2NR6GaNr-4KtA6UV94g7G7ZrGFy1ETo50eiC1PeMDwO8OR_weCF2zMv14FEcZRzDeJQqMH7pFqkB1tsSqKv6SmXliuWfXN0v2QCplTy87fS690Jn_6C6v1E3JeJETQxN0gsiHv4FL8CfGnPt4Zh5e4nntju0oQORsAq_AFo-WjUqNZAF21g4qy_KOjncZGfwFbikfTSfykA71QA65yBO45Z1tkmhQzmEcepmIgFsllo2B32zWEj-DdqzI6XNkO0FoLhoMH-mU7DMXH6xay_AjtDVeZ7XSelp1z1QFwZUxjQaHN9yHGhjhx2S4N4w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583450193,"scheduledPurgeDate":1591226193,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/c9342ae17b624d1987c9e8044f272e01","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5r6094j5i5MZqSH8MCySgTfaUwD_pWQpoYwYdtpBFriv3m8GEbytZa7-OjqhSViaSF0pFfnTIYUrcciCFqGNVTmmGdF4q4MG1Gx3H-Y8zpudDhNF3TyAjmipeyCbPetVGpKAy16agnLvZRJvb-wavSdpk7Tg5EUU-WeZ9ZI6y3qi9oIgDDc8BISxdKKm59CnipQob7WrP-A6EFdhrk9sX8ldc01SiPSlxEADtPVzEKdYMFyuIUWdRPSrQ4LPKO4K4Y3WLS_VkfEBAX2Ybv4TYsxSWmbF0FDfo77vD3X3BcpBZ-yY49kV9NSVPTbD0gXziNLu_55_yBQRDG1PqbouPQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -445,7 +445,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:45 GMT
    +      - Thu, 05 Mar 2020 23:16:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -459,11 +459,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -479,12 +479,1310 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:16:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583450193,"scheduledPurgeDate":1591226193,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/c9342ae17b624d1987c9e8044f272e01","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5r6094j5i5MZqSH8MCySgTfaUwD_pWQpoYwYdtpBFriv3m8GEbytZa7-OjqhSViaSF0pFfnTIYUrcciCFqGNVTmmGdF4q4MG1Gx3H-Y8zpudDhNF3TyAjmipeyCbPetVGpKAy16agnLvZRJvb-wavSdpk7Tg5EUU-WeZ9ZI6y3qi9oIgDDc8BISxdKKm59CnipQob7WrP-A6EFdhrk9sX8ldc01SiPSlxEADtPVzEKdYMFyuIUWdRPSrQ4LPKO4K4Y3WLS_VkfEBAX2Ybv4TYsxSWmbF0FDfo77vD3X3BcpBZ-yY49kV9NSVPTbD0gXziNLu_55_yBQRDG1PqbouPQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '801'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583450231,"scheduledPurgeDate":1591226231,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/0ec542b313aa4913b46481ae8f3f13b5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"omWXFQ9DUuXPmKRcgUnjO_QDHVPz4X61a3G-sO9Ad3vd-RK4BJn3Ru__JHfMs0on_rBQ9DmKvQx3DJepRiZ3k4FsWzCGATAaIJ8BaL8u3L4CwPZ_gb7_lk9P64CIGqZ15ne8mI3hB5fZ6PZhDH-pMIW-pm7h2brIo2UhdjxVdZNgbPlma0im6CgAl6D6HLtJiseXfOM0_C1iO0F-aifBnDN5NVaCjbduHHXH-MACE5EMZi1-FlMVxHQ3jao3ZinOP9FCs8uSk82GMuyG7RPU9fpknfVKoH2cmqhAV36diWzKe3YKC6cO2mHZpK7D5CKyytZtHx2W-M6Cj6-WIUZ7Xw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '801'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control:
           - no-cache
    @@ -493,7 +1791,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:45 GMT
    +      - Thu, 05 Mar 2020 23:17:25 GMT
           expires:
           - '-1'
           pragma:
    @@ -507,11 +1805,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -527,12 +1825,204 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '72'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control:
           - no-cache
    @@ -541,7 +2031,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:47 GMT
    +      - Thu, 05 Mar 2020 23:17:36 GMT
           expires:
           - '-1'
           pragma:
    @@ -555,11 +2045,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -575,21 +2065,71 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583450231,"scheduledPurgeDate":1591226231,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/0ec542b313aa4913b46481ae8f3f13b5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"omWXFQ9DUuXPmKRcgUnjO_QDHVPz4X61a3G-sO9Ad3vd-RK4BJn3Ru__JHfMs0on_rBQ9DmKvQx3DJepRiZ3k4FsWzCGATAaIJ8BaL8u3L4CwPZ_gb7_lk9P64CIGqZ15ne8mI3hB5fZ6PZhDH-pMIW-pm7h2brIo2UhdjxVdZNgbPlma0im6CgAl6D6HLtJiseXfOM0_C1iO0F-aifBnDN5NVaCjbduHHXH-MACE5EMZi1-FlMVxHQ3jao3ZinOP9FCs8uSk82GMuyG7RPU9fpknfVKoH2cmqhAV36diWzKe3YKC6cO2mHZpK7D5CKyytZtHx2W-M6Cj6-WIUZ7Xw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '801'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583450258,"scheduledPurgeDate":1591226258,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/f8c158ef56984200b4a59840765cf407","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5Ckn3PSuWPr5FpPG4papkttfxmK6tB1kFvkE8sXBy0Qsym3mfqOWuXUeTatKLKuw6XWIbey_6dVKXxlshtQ_pGI2Am2KbbnKaiXMsbvI0tNM2_C9N-5XFSoFlyKJMAJoRqdbmO1vmQqa8BBt-fp-edAwHpVDVzpky6dEb0jYj968aV4ok6Py8-nF_SJVYHxnHir5XTkPAUEV4FOUN_WZ8RmfpRFvxgw-vK3c6SgoW_KRbw6DKbgTaITENnHYFmiKDL1tuNbJSF7pxykv8QjEwP8cEgIaKWlY488_gRu3vWQucja5yI1irpmz9G_m1DIY8ZRZg7G3NLHrAUnXo6zOPw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:49 GMT
    +      - Thu, 05 Mar 2020 23:17:38 GMT
           expires:
           - '-1'
           pragma:
    @@ -603,16 +2143,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -623,12 +2163,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -637,7 +2177,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:51 GMT
    +      - Thu, 05 Mar 2020 23:17:38 GMT
           expires:
           - '-1'
           pragma:
    @@ -651,11 +2191,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -671,12 +2211,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -685,7 +2225,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:53 GMT
    +      - Thu, 05 Mar 2020 23:17:40 GMT
           expires:
           - '-1'
           pragma:
    @@ -699,11 +2239,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -719,12 +2259,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -733,7 +2273,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:55 GMT
    +      - Thu, 05 Mar 2020 23:17:42 GMT
           expires:
           - '-1'
           pragma:
    @@ -747,11 +2287,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -767,12 +2307,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -781,7 +2321,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:57 GMT
    +      - Thu, 05 Mar 2020 23:17:44 GMT
           expires:
           - '-1'
           pragma:
    @@ -795,11 +2335,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -815,12 +2355,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -829,7 +2369,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:56:59 GMT
    +      - Thu, 05 Mar 2020 23:17:46 GMT
           expires:
           - '-1'
           pragma:
    @@ -843,11 +2383,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -863,12 +2403,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -877,7 +2417,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:01 GMT
    +      - Thu, 05 Mar 2020 23:17:48 GMT
           expires:
           - '-1'
           pragma:
    @@ -891,11 +2431,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -911,12 +2451,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -925,7 +2465,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:03 GMT
    +      - Thu, 05 Mar 2020 23:17:50 GMT
           expires:
           - '-1'
           pragma:
    @@ -939,11 +2479,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -959,12 +2499,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -973,7 +2513,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:05 GMT
    +      - Thu, 05 Mar 2020 23:17:52 GMT
           expires:
           - '-1'
           pragma:
    @@ -987,11 +2527,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1007,12 +2547,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1021,7 +2561,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:07 GMT
    +      - Thu, 05 Mar 2020 23:17:54 GMT
           expires:
           - '-1'
           pragma:
    @@ -1035,11 +2575,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1055,12 +2595,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1069,7 +2609,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:09 GMT
    +      - Thu, 05 Mar 2020 23:17:57 GMT
           expires:
           - '-1'
           pragma:
    @@ -1083,11 +2623,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1103,12 +2643,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1117,7 +2657,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:11 GMT
    +      - Thu, 05 Mar 2020 23:17:59 GMT
           expires:
           - '-1'
           pragma:
    @@ -1131,11 +2671,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1151,12 +2691,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1165,7 +2705,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:13 GMT
    +      - Thu, 05 Mar 2020 23:18:01 GMT
           expires:
           - '-1'
           pragma:
    @@ -1179,11 +2719,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1199,12 +2739,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676605,"scheduledPurgeDate":1583452605,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/21f005dd70c4406f84d67802b3a86f55","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0LFhfg6KHVZ4_6rIx61_oA3Fba2NR6GaNr-4KtA6UV94g7G7ZrGFy1ETo50eiC1PeMDwO8OR_weCF2zMv14FEcZRzDeJQqMH7pFqkB1tsSqKv6SmXliuWfXN0v2QCplTy87fS690Jn_6C6v1E3JeJETQxN0gsiHv4FL8CfGnPt4Zh5e4nntju0oQORsAq_AFo-WjUqNZAF21g4qy_KOjncZGfwFbikfTSfykA71QA65yBO45Z1tkmhQzmEcepmIgFsllo2B32zWEj-DdqzI6XNkO0FoLhoMH-mU7DMXH6xay_AjtDVeZ7XSelp1z1QFwZUxjQaHN9yHGhjhx2S4N4w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583450258,"scheduledPurgeDate":1591226258,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/f8c158ef56984200b4a59840765cf407","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5Ckn3PSuWPr5FpPG4papkttfxmK6tB1kFvkE8sXBy0Qsym3mfqOWuXUeTatKLKuw6XWIbey_6dVKXxlshtQ_pGI2Am2KbbnKaiXMsbvI0tNM2_C9N-5XFSoFlyKJMAJoRqdbmO1vmQqa8BBt-fp-edAwHpVDVzpky6dEb0jYj968aV4ok6Py8-nF_SJVYHxnHir5XTkPAUEV4FOUN_WZ8RmfpRFvxgw-vK3c6SgoW_KRbw6DKbgTaITENnHYFmiKDL1tuNbJSF7pxykv8QjEwP8cEgIaKWlY488_gRu3vWQucja5yI1irpmz9G_m1DIY8ZRZg7G3NLHrAUnXo6zOPw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1213,7 +2753,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:15 GMT
    +      - Thu, 05 Mar 2020 23:18:03 GMT
           expires:
           - '-1'
           pragma:
    @@ -1227,11 +2767,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1249,12 +2789,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676638,"scheduledPurgeDate":1583452638,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/8107525864cf4749a9a05c2ff0e0d74e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tKKhtcbDuhHbuwK-lbIOx2VJTRSwfsvMWQbl-KrBmmdRCAWFQzOkmQIK2nxFq5iFltJ5qHKnr9lAZ1HhVUrqQ0aizyRKbYN6fLbwD8kO2gdHTT_Gb0CIK17NLnIMqW3NjGJqxrYW3-0AcUnY-1aFoa2a6nW6ZnQ6KonG0I_P5Yb-5j8mfkE1YPeOqe6O6bn0Eq4PWTb2JqLmmb9gKQF8Yha7JRBBDRhCfn_H8kwlm3pkEpdXAHsm8AG3NrhxOLWkz1zXLDtQn5cOKx64coyP83QUcuxme6WpZgw8MfSDFFS_hr1n7_Dnn-WWcUxlYMk4OcIV65F5y3OnKYtBkcSnVQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583450283,"scheduledPurgeDate":1591226283,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/80eada7f91554257a3b450b9c24d528a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sSt7G_V1dOnLcFhiKDTyZmiT7Sc72Vgm1HCrgoiD7QxnQKy5XOB3JdkeYyZO6npbpGsLbKm5MF4ueCx963XxYr8vNtklstxiyLFIY8Z9dE_GQ0ykI0ggBai8Ubb-uAFtY2N-Zq5vch1F7kMeTHKDtJEfK2qRCoEs81aX9jEwpHyPsL47JbS1TEnwjqz4v0urNqXRfofP5e4SspPpXiZbV0hV_Sr7d7npDDeP8VkbaaWuyuNYrWpHCiBpD1Rn1SPSaQZSyhPWWcly0UixMUC-7ogP9zAkY7bC6aOdBzYhYFD1fQ5QSM4Jp-0fTmgvB615RZEGZvjvgWwdZdZksf152w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1263,7 +2803,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:17 GMT
    +      - Thu, 05 Mar 2020 23:18:03 GMT
           expires:
           - '-1'
           pragma:
    @@ -1277,11 +2817,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1297,12 +2837,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1311,7 +2851,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:17 GMT
    +      - Thu, 05 Mar 2020 23:18:03 GMT
           expires:
           - '-1'
           pragma:
    @@ -1325,11 +2865,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1345,12 +2885,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1359,7 +2899,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:19 GMT
    +      - Thu, 05 Mar 2020 23:18:05 GMT
           expires:
           - '-1'
           pragma:
    @@ -1373,11 +2913,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1393,12 +2933,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1407,7 +2947,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:21 GMT
    +      - Thu, 05 Mar 2020 23:18:07 GMT
           expires:
           - '-1'
           pragma:
    @@ -1421,11 +2961,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1441,12 +2981,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1455,7 +2995,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:23 GMT
    +      - Thu, 05 Mar 2020 23:18:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -1469,11 +3009,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1489,12 +3029,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1503,7 +3043,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:25 GMT
    +      - Thu, 05 Mar 2020 23:18:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -1517,11 +3057,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1537,12 +3077,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1551,7 +3091,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:27 GMT
    +      - Thu, 05 Mar 2020 23:18:13 GMT
           expires:
           - '-1'
           pragma:
    @@ -1565,11 +3105,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1585,21 +3125,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676638,"scheduledPurgeDate":1583452638,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/8107525864cf4749a9a05c2ff0e0d74e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tKKhtcbDuhHbuwK-lbIOx2VJTRSwfsvMWQbl-KrBmmdRCAWFQzOkmQIK2nxFq5iFltJ5qHKnr9lAZ1HhVUrqQ0aizyRKbYN6fLbwD8kO2gdHTT_Gb0CIK17NLnIMqW3NjGJqxrYW3-0AcUnY-1aFoa2a6nW6ZnQ6KonG0I_P5Yb-5j8mfkE1YPeOqe6O6bn0Eq4PWTb2JqLmmb9gKQF8Yha7JRBBDRhCfn_H8kwlm3pkEpdXAHsm8AG3NrhxOLWkz1zXLDtQn5cOKx64coyP83QUcuxme6WpZgw8MfSDFFS_hr1n7_Dnn-WWcUxlYMk4OcIV65F5y3OnKYtBkcSnVQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:29 GMT
    +      - Thu, 05 Mar 2020 23:18:15 GMT
           expires:
           - '-1'
           pragma:
    @@ -1613,16 +3153,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -1632,24 +3172,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key3?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676652,"scheduledPurgeDate":1583452652,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/37993cf30cf9427b84b617982d828127","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"yb5_fI2KzF3mQ3j9jWF9TU0RzOkbGQs1TLMinLZh4idWcNjrQvFk31QUAu_5WPg8Bo7VReF5d_drPH3VzyINXZi8S7RDJgclXfBUHKcbu0Fd4gEgZV-4N2UcOGFKNjn06B6cVeMuoHMoL54-85PP0-8THMDnTi1mJfXdlQZlSCLInk3xuKrT4D-yH2iNqFtz3xFBYK8UPgawL-2pbr9tY_dCWJxCD6cgFkQ5g1DCaPHJ9SpSjnA92JzXafyx-FT_7j4lsle-Vl89mQ4q4fapRjPMeY4aNPql5qc9tButlcarXQuJRv_0xyWKkJ52QAdOgzmKKpSWjB3DtS4nHB2CaQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:31 GMT
    +      - Thu, 05 Mar 2020 23:18:17 GMT
           expires:
           - '-1'
           pragma:
    @@ -1663,16 +3201,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -1683,9 +3221,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    @@ -1697,7 +3235,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:32 GMT
    +      - Thu, 05 Mar 2020 23:18:19 GMT
           expires:
           - '-1'
           pragma:
    @@ -1711,11 +3249,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1731,9 +3269,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    @@ -1745,7 +3283,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:34 GMT
    +      - Thu, 05 Mar 2020 23:18:22 GMT
           expires:
           - '-1'
           pragma:
    @@ -1759,11 +3297,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1779,9 +3317,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    @@ -1793,7 +3331,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:36 GMT
    +      - Thu, 05 Mar 2020 23:18:24 GMT
           expires:
           - '-1'
           pragma:
    @@ -1807,11 +3345,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1827,9 +3365,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    @@ -1841,7 +3379,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:38 GMT
    +      - Thu, 05 Mar 2020 23:18:26 GMT
           expires:
           - '-1'
           pragma:
    @@ -1855,11 +3393,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1875,21 +3413,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583450283,"scheduledPurgeDate":1591226283,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/80eada7f91554257a3b450b9c24d528a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sSt7G_V1dOnLcFhiKDTyZmiT7Sc72Vgm1HCrgoiD7QxnQKy5XOB3JdkeYyZO6npbpGsLbKm5MF4ueCx963XxYr8vNtklstxiyLFIY8Z9dE_GQ0ykI0ggBai8Ubb-uAFtY2N-Zq5vch1F7kMeTHKDtJEfK2qRCoEs81aX9jEwpHyPsL47JbS1TEnwjqz4v0urNqXRfofP5e4SspPpXiZbV0hV_Sr7d7npDDeP8VkbaaWuyuNYrWpHCiBpD1Rn1SPSaQZSyhPWWcly0UixMUC-7ogP9zAkY7bC6aOdBzYhYFD1fQ5QSM4Jp-0fTmgvB615RZEGZvjvgWwdZdZksf152w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:41 GMT
    +      - Thu, 05 Mar 2020 23:18:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -1903,16 +3441,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -1922,22 +3460,24 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    +      Content-Length:
    +      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583450309,"scheduledPurgeDate":1591226309,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/e33ff17a084e4b679012e34e0938f8d6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"njx2AcylXK6IxdXLRwuuCTKvIOHAEBNY4_8v7LezXKhOnITILD72NGR_F-nChIOH_9qoLteomUHZeqTqNmDYfo3TSk2Gp_YioiTzy3aXsHpLSinqHObSdpcpB_f9atL13zE5gSGgeoVI2_pkEmdso_gMmGvA9rsZ-V63jIpgXUbNg8fqazvRTE1L7W9Kz263yKTCsvffddJtSIXCOtcCTn4UjqJqKlgPeRTudATeOoc1_psNGSWsfYo4cnfISHcVGYi20EVE5qaAph--pPG5H6iBLT7iBNLvpugF5vozxtVYLyVRcwtaBwtJohcYPW0QOuyGYfv74fGwf2-jrDJ3gQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:43 GMT
    +      - Thu, 05 Mar 2020 23:18:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -1951,16 +3491,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -1971,12 +3511,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1985,7 +3525,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:45 GMT
    +      - Thu, 05 Mar 2020 23:18:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -1999,11 +3539,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2019,21 +3559,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676652,"scheduledPurgeDate":1583452652,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/37993cf30cf9427b84b617982d828127","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"yb5_fI2KzF3mQ3j9jWF9TU0RzOkbGQs1TLMinLZh4idWcNjrQvFk31QUAu_5WPg8Bo7VReF5d_drPH3VzyINXZi8S7RDJgclXfBUHKcbu0Fd4gEgZV-4N2UcOGFKNjn06B6cVeMuoHMoL54-85PP0-8THMDnTi1mJfXdlQZlSCLInk3xuKrT4D-yH2iNqFtz3xFBYK8UPgawL-2pbr9tY_dCWJxCD6cgFkQ5g1DCaPHJ9SpSjnA92JzXafyx-FT_7j4lsle-Vl89mQ4q4fapRjPMeY4aNPql5qc9tButlcarXQuJRv_0xyWKkJ52QAdOgzmKKpSWjB3DtS4nHB2CaQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:47 GMT
    +      - Thu, 05 Mar 2020 23:18:31 GMT
           expires:
           - '-1'
           pragma:
    @@ -2047,16 +3587,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -2066,24 +3606,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key1?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676669,"scheduledPurgeDate":1583452669,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/6ce1f8a43bdd4a3e8ef7ca9b3a983fce","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kGtBvobBRRhbXbj0lvCRPlLmpd30NEHTIX2csY-tQUY_HkoRvIdOs3x6Wu6jmuwctsDtjxsb6RTM_6TMWB_YDV9bGJ0BtN3ConhUhKzMUwyWwHYi_62XqHLBHLwzRB3jMx0mbYj_1iF3LiNqEVJafo-KjVxiV3_du1FDZkIbcI39VaAy5koNOKqD8ia0S_HMk5FzGbcw0-upTFVNGzSq9pl1rj1ZqjeKXfPZMGKntT-YgixGktripjBa4ZAbTTTaRHP2wiLOJf516eKxxjTTjmJduDdBDI4o3c0Xg-9goLCrwT8pdiknXDpHl-kIFSGNnC5EXJOXDQGhLq2kUuIVFw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:49 GMT
    +      - Thu, 05 Mar 2020 23:18:33 GMT
           expires:
           - '-1'
           pragma:
    @@ -2097,16 +3635,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -2117,12 +3655,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2131,7 +3669,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:49 GMT
    +      - Thu, 05 Mar 2020 23:18:35 GMT
           expires:
           - '-1'
           pragma:
    @@ -2145,11 +3683,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2165,12 +3703,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2179,7 +3717,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:51 GMT
    +      - Thu, 05 Mar 2020 23:18:37 GMT
           expires:
           - '-1'
           pragma:
    @@ -2193,11 +3731,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2213,12 +3751,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2227,7 +3765,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:53 GMT
    +      - Thu, 05 Mar 2020 23:18:39 GMT
           expires:
           - '-1'
           pragma:
    @@ -2241,11 +3779,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2261,12 +3799,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2275,7 +3813,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:55 GMT
    +      - Thu, 05 Mar 2020 23:18:41 GMT
           expires:
           - '-1'
           pragma:
    @@ -2289,11 +3827,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2309,12 +3847,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2323,7 +3861,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:57 GMT
    +      - Thu, 05 Mar 2020 23:18:43 GMT
           expires:
           - '-1'
           pragma:
    @@ -2337,11 +3875,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2357,12 +3895,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2371,7 +3909,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:59 GMT
    +      - Thu, 05 Mar 2020 23:18:45 GMT
           expires:
           - '-1'
           pragma:
    @@ -2385,11 +3923,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2405,12 +3943,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2419,7 +3957,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:01 GMT
    +      - Thu, 05 Mar 2020 23:18:47 GMT
           expires:
           - '-1'
           pragma:
    @@ -2433,11 +3971,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2453,12 +3991,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2467,7 +4005,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:03 GMT
    +      - Thu, 05 Mar 2020 23:18:49 GMT
           expires:
           - '-1'
           pragma:
    @@ -2481,11 +4019,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2501,12 +4039,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2515,7 +4053,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:05 GMT
    +      - Thu, 05 Mar 2020 23:18:51 GMT
           expires:
           - '-1'
           pragma:
    @@ -2529,11 +4067,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2549,12 +4087,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2563,7 +4101,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:07 GMT
    +      - Thu, 05 Mar 2020 23:18:53 GMT
           expires:
           - '-1'
           pragma:
    @@ -2577,11 +4115,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2597,21 +4135,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676669,"scheduledPurgeDate":1583452669,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/6ce1f8a43bdd4a3e8ef7ca9b3a983fce","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kGtBvobBRRhbXbj0lvCRPlLmpd30NEHTIX2csY-tQUY_HkoRvIdOs3x6Wu6jmuwctsDtjxsb6RTM_6TMWB_YDV9bGJ0BtN3ConhUhKzMUwyWwHYi_62XqHLBHLwzRB3jMx0mbYj_1iF3LiNqEVJafo-KjVxiV3_du1FDZkIbcI39VaAy5koNOKqD8ia0S_HMk5FzGbcw0-upTFVNGzSq9pl1rj1ZqjeKXfPZMGKntT-YgixGktripjBa4ZAbTTTaRHP2wiLOJf516eKxxjTTjmJduDdBDI4o3c0Xg-9goLCrwT8pdiknXDpHl-kIFSGNnC5EXJOXDQGhLq2kUuIVFw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:09 GMT
    +      - Thu, 05 Mar 2020 23:18:55 GMT
           expires:
           - '-1'
           pragma:
    @@ -2625,16 +4163,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -2644,24 +4182,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key2?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/dc39c9c6102e464789c63738bef46e81","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"rdXjc8xIy4YJfvhAycL7GbEwUNzCzObiMvESDA10fslpbYhgVJUmms4G5TNuqZavZ4CIHDRpQK8_JmogWRmxowhNxfDigK2EUUo8WWdSrqDQ-3S6BATem2ExD3mtgdf1iRWVQgWiyO6eFK8-J1sKTQ7KcnciNJrvwJCZfy23l3JLK7ZD98djIn7V4mLWQkiGxCKolLAAKKRTP81z-17HFyeQifZ33LqBegdHnhcZaUf_GeDP-lEv76FOzF4O_GdUAnlzD6Q2vZPMgy_bz4FB6VLP7vvmOlp1DuQeeDrhDEKhkVGqkvKMYlIuTrOLHadEHhEZeLVcR41j4niK4pNIuw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:11 GMT
    +      - Thu, 05 Mar 2020 23:18:57 GMT
           expires:
           - '-1'
           pragma:
    @@ -2675,16 +4211,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -2695,21 +4231,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583450309,"scheduledPurgeDate":1591226309,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/e33ff17a084e4b679012e34e0938f8d6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"njx2AcylXK6IxdXLRwuuCTKvIOHAEBNY4_8v7LezXKhOnITILD72NGR_F-nChIOH_9qoLteomUHZeqTqNmDYfo3TSk2Gp_YioiTzy3aXsHpLSinqHObSdpcpB_f9atL13zE5gSGgeoVI2_pkEmdso_gMmGvA9rsZ-V63jIpgXUbNg8fqazvRTE1L7W9Kz263yKTCsvffddJtSIXCOtcCTn4UjqJqKlgPeRTudATeOoc1_psNGSWsfYo4cnfISHcVGYi20EVE5qaAph--pPG5H6iBLT7iBNLvpugF5vozxtVYLyVRcwtaBwtJohcYPW0QOuyGYfv74fGwf2-jrDJ3gQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:11 GMT
    +      - Thu, 05 Mar 2020 23:18:59 GMT
           expires:
           - '-1'
           pragma:
    @@ -2723,16 +4259,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -2742,22 +4278,24 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    +      Content-Length:
    +      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583450340,"scheduledPurgeDate":1591226340,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/d1441b2c884e419d9814158a64384fd5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"q0qO2xcIoHTtMfQRdF3NyoPQCKUPKJO2FKJ5mUx1WJty3aFSfUbSqLdrwFzFcGwD_b_yTWscuOazk2jxCwf85zdukpmJDKVCXGdnz4xapoorWNKivYSnGLUtLBZdn2pi_rve3ox-8ud7pTl4TAtpcyUHct0Pc_qhoJDzgeQB9SYP5I11uNFZPWIl5Gf2uSIjF4W_lo-UJFBRfTbrvY-Gjy0ejqfv_cFixWg0_j-vmFsUwV__quA8mNLq_Qo9dPAAGLEqwWtdNjnbCugHgj5SA22dahk8JO8r3oVETi-TIg_mSC_PiJKTKd37ShwlFH1Fe4Mrdg6Z5cQ64r6Y4klvjw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:13 GMT
    +      - Thu, 05 Mar 2020 23:19:00 GMT
           expires:
           - '-1'
           pragma:
    @@ -2771,16 +4309,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -2791,12 +4329,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2805,7 +4343,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:15 GMT
    +      - Thu, 05 Mar 2020 23:19:00 GMT
           expires:
           - '-1'
           pragma:
    @@ -2819,11 +4357,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2839,12 +4377,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2853,7 +4391,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:17 GMT
    +      - Thu, 05 Mar 2020 23:19:02 GMT
           expires:
           - '-1'
           pragma:
    @@ -2867,11 +4405,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2887,12 +4425,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2901,7 +4439,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:20 GMT
    +      - Thu, 05 Mar 2020 23:19:04 GMT
           expires:
           - '-1'
           pragma:
    @@ -2915,11 +4453,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2935,12 +4473,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2949,7 +4487,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:22 GMT
    +      - Thu, 05 Mar 2020 23:19:06 GMT
           expires:
           - '-1'
           pragma:
    @@ -2963,11 +4501,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -2983,12 +4521,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -2997,7 +4535,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:24 GMT
    +      - Thu, 05 Mar 2020 23:19:08 GMT
           expires:
           - '-1'
           pragma:
    @@ -3011,11 +4549,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3031,21 +4569,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/dc39c9c6102e464789c63738bef46e81","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"rdXjc8xIy4YJfvhAycL7GbEwUNzCzObiMvESDA10fslpbYhgVJUmms4G5TNuqZavZ4CIHDRpQK8_JmogWRmxowhNxfDigK2EUUo8WWdSrqDQ-3S6BATem2ExD3mtgdf1iRWVQgWiyO6eFK8-J1sKTQ7KcnciNJrvwJCZfy23l3JLK7ZD98djIn7V4mLWQkiGxCKolLAAKKRTP81z-17HFyeQifZ33LqBegdHnhcZaUf_GeDP-lEv76FOzF4O_GdUAnlzD6Q2vZPMgy_bz4FB6VLP7vvmOlp1DuQeeDrhDEKhkVGqkvKMYlIuTrOLHadEHhEZeLVcR41j4niK4pNIuw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:26 GMT
    +      - Thu, 05 Mar 2020 23:19:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -3059,16 +4597,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -3078,24 +4616,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key4?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676709,"scheduledPurgeDate":1583452709,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/b3fdf02df5404f18bd26b4c3c45a9641","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"j_yUCTbJ6nUWQXEf-f52YJ4jXgYRnioR8E8QDvz24C-2adZ8oMInSq9hQqmqUJCdyeIlQY7ir5LVZoNmd0UF-iTsMGFzFMZOqaczIm9LPcyF1mamM9jV4bf5QLYUmtpN6A5Ea9HiubpqRd0owprzbsGr_J3zBYX7JAWd4Mw1mhKHCa5FbxHcXXSfBeKM7-LIto7FbTzgXdZGqDvYdwdhoL9Yay3L1EqcbuFYS0eJ3CgXhmixEWnww2qRw0ZvW3mt_hTnYlfL6-MjPWO8mn6nWC5aYv_kzBXPgwtRSLoGNBxm4xuPJ8VSPNFFwPQo0KnqUyNjjyl6-jpe_Ne_nLkh5Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:28 GMT
    +      - Thu, 05 Mar 2020 23:19:12 GMT
           expires:
           - '-1'
           pragma:
    @@ -3109,16 +4645,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -3129,12 +4665,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3143,7 +4679,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:28 GMT
    +      - Thu, 05 Mar 2020 23:19:15 GMT
           expires:
           - '-1'
           pragma:
    @@ -3157,11 +4693,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3177,12 +4713,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3191,7 +4727,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:30 GMT
    +      - Thu, 05 Mar 2020 23:19:17 GMT
           expires:
           - '-1'
           pragma:
    @@ -3205,11 +4741,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3225,12 +4761,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3239,7 +4775,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:32 GMT
    +      - Thu, 05 Mar 2020 23:19:19 GMT
           expires:
           - '-1'
           pragma:
    @@ -3253,11 +4789,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3273,12 +4809,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3287,7 +4823,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:34 GMT
    +      - Thu, 05 Mar 2020 23:19:21 GMT
           expires:
           - '-1'
           pragma:
    @@ -3301,11 +4837,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3321,12 +4857,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3335,7 +4871,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:36 GMT
    +      - Thu, 05 Mar 2020 23:19:23 GMT
           expires:
           - '-1'
           pragma:
    @@ -3349,11 +4885,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3369,12 +4905,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3383,7 +4919,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:39 GMT
    +      - Thu, 05 Mar 2020 23:19:25 GMT
           expires:
           - '-1'
           pragma:
    @@ -3397,11 +4933,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3417,12 +4953,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3431,7 +4967,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:41 GMT
    +      - Thu, 05 Mar 2020 23:19:27 GMT
           expires:
           - '-1'
           pragma:
    @@ -3445,11 +4981,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3465,21 +5001,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583450340,"scheduledPurgeDate":1591226340,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/d1441b2c884e419d9814158a64384fd5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"q0qO2xcIoHTtMfQRdF3NyoPQCKUPKJO2FKJ5mUx1WJty3aFSfUbSqLdrwFzFcGwD_b_yTWscuOazk2jxCwf85zdukpmJDKVCXGdnz4xapoorWNKivYSnGLUtLBZdn2pi_rve3ox-8ud7pTl4TAtpcyUHct0Pc_qhoJDzgeQB9SYP5I11uNFZPWIl5Gf2uSIjF4W_lo-UJFBRfTbrvY-Gjy0ejqfv_cFixWg0_j-vmFsUwV__quA8mNLq_Qo9dPAAGLEqwWtdNjnbCugHgj5SA22dahk8JO8r3oVETi-TIg_mSC_PiJKTKd37ShwlFH1Fe4Mrdg6Z5cQ64r6Y4klvjw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:43 GMT
    +      - Thu, 05 Mar 2020 23:19:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -3493,16 +5029,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -3512,22 +5048,24 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    +      Content-Length:
    +      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583450370,"scheduledPurgeDate":1591226370,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/7bb40190000f4220a485089dbb122703","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"s_VCGdg1GPhrfNgFEq1Z6fm-bkmxYLSNaYdbQXKFVY5V0h6e9kqcVePcb2iDNMr3O9AkKb4_3dye7wyGp0nCzS4rJiMYecVottN0o2NUxJp0NBbw6IB02Etnb0KUtP9b3e7S4CN0txezSTH3L0yur5zs7DAn80kWx8SbV2nlJgvV9gUmeR6b_k1Ffbvs9rh6PSDSGRXhlWJw1zcMkIoMkvdEwg4vCKC4BHIDKiB4z9U5vkYmksE9DuXUzGZ_AG9PthFMKJfJOtCBDUE7ALFmVEGC0dDZdil5fiLaXIzpIFzvoW6fGmtK5wGM-D4GClDZPZxil5pDUI4NDsxBwkO8Mw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '72'
    +      - '801'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:45 GMT
    +      - Thu, 05 Mar 2020 23:19:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -3541,16 +5079,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -3561,21 +5099,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676709,"scheduledPurgeDate":1583452709,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/b3fdf02df5404f18bd26b4c3c45a9641","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"j_yUCTbJ6nUWQXEf-f52YJ4jXgYRnioR8E8QDvz24C-2adZ8oMInSq9hQqmqUJCdyeIlQY7ir5LVZoNmd0UF-iTsMGFzFMZOqaczIm9LPcyF1mamM9jV4bf5QLYUmtpN6A5Ea9HiubpqRd0owprzbsGr_J3zBYX7JAWd4Mw1mhKHCa5FbxHcXXSfBeKM7-LIto7FbTzgXdZGqDvYdwdhoL9Yay3L1EqcbuFYS0eJ3CgXhmixEWnww2qRw0ZvW3mt_hTnYlfL6-MjPWO8mn6nWC5aYv_kzBXPgwtRSLoGNBxm4xuPJ8VSPNFFwPQo0KnqUyNjjyl6-jpe_Ne_nLkh5Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:47 GMT
    +      - Thu, 05 Mar 2020 23:19:29 GMT
           expires:
           - '-1'
           pragma:
    @@ -3589,16 +5127,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -3608,24 +5146,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key0?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676730,"scheduledPurgeDate":1583452730,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/2997d10b1f8247f39b3b2eb35e5a92b9","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kF8OshW4LqKfosSSOxG3BOrLYh96LHjrlgICRyGs_7RY9XpL36tBMDuRPi33c48-YJ-JISQjOIO0isPC2MlZ1NaIxAYKN8UY5e3g4gu0f5-lXFdwizVpokcQjmmNiYqoq4WoWhSN6HAU7qdMRQphTF3LHN3N-0YzKYw_bBXBq8zAKwcaWow3M_8WxJVCiQtSetsfO07gh8zR_UaFwWUvjtGyzESAi1V4jocA2_26XVVCt0jXkgSn8k83wjGwP4UaYrgyE1E5v_xzjv9WzcmLeRgUsA7QZOn3WUjGs-iWAU7rcOZpfJ0IHvU9t39LWbNfuz2muuQlJ6ViTKj91SRgIw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676603,"updated":1575676603,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '801'
    +      - '72'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:49 GMT
    +      - Thu, 05 Mar 2020 23:19:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -3639,16 +5175,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -3659,12 +5195,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3673,7 +5209,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:50 GMT
    +      - Thu, 05 Mar 2020 23:19:34 GMT
           expires:
           - '-1'
           pragma:
    @@ -3687,11 +5223,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3707,12 +5243,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3721,7 +5257,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:52 GMT
    +      - Thu, 05 Mar 2020 23:19:36 GMT
           expires:
           - '-1'
           pragma:
    @@ -3735,11 +5271,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3755,12 +5291,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3769,7 +5305,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:54 GMT
    +      - Thu, 05 Mar 2020 23:19:38 GMT
           expires:
           - '-1'
           pragma:
    @@ -3783,11 +5319,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3803,12 +5339,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3817,7 +5353,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:56 GMT
    +      - Thu, 05 Mar 2020 23:19:40 GMT
           expires:
           - '-1'
           pragma:
    @@ -3831,11 +5367,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3851,12 +5387,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3865,7 +5401,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:58 GMT
    +      - Thu, 05 Mar 2020 23:19:42 GMT
           expires:
           - '-1'
           pragma:
    @@ -3879,11 +5415,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3899,12 +5435,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3913,7 +5449,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:00 GMT
    +      - Thu, 05 Mar 2020 23:19:44 GMT
           expires:
           - '-1'
           pragma:
    @@ -3927,11 +5463,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3947,12 +5483,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -3961,7 +5497,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:02 GMT
    +      - Thu, 05 Mar 2020 23:19:46 GMT
           expires:
           - '-1'
           pragma:
    @@ -3975,11 +5511,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -3995,12 +5531,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4009,7 +5545,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:04 GMT
    +      - Thu, 05 Mar 2020 23:19:48 GMT
           expires:
           - '-1'
           pragma:
    @@ -4023,11 +5559,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4043,12 +5579,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4057,7 +5593,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:06 GMT
    +      - Thu, 05 Mar 2020 23:19:50 GMT
           expires:
           - '-1'
           pragma:
    @@ -4071,11 +5607,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4091,12 +5627,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4105,7 +5641,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:08 GMT
    +      - Thu, 05 Mar 2020 23:19:52 GMT
           expires:
           - '-1'
           pragma:
    @@ -4119,11 +5655,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4139,12 +5675,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676730,"scheduledPurgeDate":1583452730,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/2997d10b1f8247f39b3b2eb35e5a92b9","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kF8OshW4LqKfosSSOxG3BOrLYh96LHjrlgICRyGs_7RY9XpL36tBMDuRPi33c48-YJ-JISQjOIO0isPC2MlZ1NaIxAYKN8UY5e3g4gu0f5-lXFdwizVpokcQjmmNiYqoq4WoWhSN6HAU7qdMRQphTF3LHN3N-0YzKYw_bBXBq8zAKwcaWow3M_8WxJVCiQtSetsfO07gh8zR_UaFwWUvjtGyzESAi1V4jocA2_26XVVCt0jXkgSn8k83wjGwP4UaYrgyE1E5v_xzjv9WzcmLeRgUsA7QZOn3WUjGs-iWAU7rcOZpfJ0IHvU9t39LWbNfuz2muuQlJ6ViTKj91SRgIw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676603,"updated":1575676603,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583450370,"scheduledPurgeDate":1591226370,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/7bb40190000f4220a485089dbb122703","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"s_VCGdg1GPhrfNgFEq1Z6fm-bkmxYLSNaYdbQXKFVY5V0h6e9kqcVePcb2iDNMr3O9AkKb4_3dye7wyGp0nCzS4rJiMYecVottN0o2NUxJp0NBbw6IB02Etnb0KUtP9b3e7S4CN0txezSTH3L0yur5zs7DAn80kWx8SbV2nlJgvV9gUmeR6b_k1Ffbvs9rh6PSDSGRXhlWJw1zcMkIoMkvdEwg4vCKC4BHIDKiB4z9U5vkYmksE9DuXUzGZ_AG9PthFMKJfJOtCBDUE7ALFmVEGC0dDZdil5fiLaXIzpIFzvoW6fGmtK5wGM-D4GClDZPZxil5pDUI4NDsxBwkO8Mw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4153,7 +5689,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:10 GMT
    +      - Thu, 05 Mar 2020 23:19:54 GMT
           expires:
           - '-1'
           pragma:
    @@ -4167,11 +5703,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4187,12 +5723,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.1-preview
       response:
         body:
    -      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676730,"scheduledPurgeDate":1583452730,"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1575676603,"updated":1575676603,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676669,"scheduledPurgeDate":1583452669,"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676652,"scheduledPurgeDate":1583452652,"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676709,"scheduledPurgeDate":1583452709,"kid":"https://vaultname.vault.azure.net/keys/key4","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676605,"scheduledPurgeDate":1583452605,"kid":"https://vaultname.vault.azure.net/keys/key5","attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676638,"scheduledPurgeDate":1583452638,"kid":"https://vaultname.vault.azure.net/keys/key6","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583450193,"scheduledPurgeDate":1591226193,"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583450231,"scheduledPurgeDate":1591226231,"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583450258,"scheduledPurgeDate":1591226258,"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583450283,"scheduledPurgeDate":1591226283,"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583450309,"scheduledPurgeDate":1591226309,"kid":"https://vaultname.vault.azure.net/keys/key4","attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583450340,"scheduledPurgeDate":1591226340,"kid":"https://vaultname.vault.azure.net/keys/key5","attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583450370,"scheduledPurgeDate":1591226370,"kid":"https://vaultname.vault.azure.net/keys/key6","attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
           cache-control:
           - no-cache
    @@ -4201,7 +5737,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:12 GMT
    +      - Thu, 05 Mar 2020 23:19:55 GMT
           expires:
           - '-1'
           pragma:
    @@ -4215,11 +5751,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4237,12 +5773,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/21f005dd70c4406f84d67802b3a86f55","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0LFhfg6KHVZ4_6rIx61_oA3Fba2NR6GaNr-4KtA6UV94g7G7ZrGFy1ETo50eiC1PeMDwO8OR_weCF2zMv14FEcZRzDeJQqMH7pFqkB1tsSqKv6SmXliuWfXN0v2QCplTy87fS690Jn_6C6v1E3JeJETQxN0gsiHv4FL8CfGnPt4Zh5e4nntju0oQORsAq_AFo-WjUqNZAF21g4qy_KOjncZGfwFbikfTSfykA71QA65yBO45Z1tkmhQzmEcepmIgFsllo2B32zWEj-DdqzI6XNkO0FoLhoMH-mU7DMXH6xay_AjtDVeZ7XSelp1z1QFwZUxjQaHN9yHGhjhx2S4N4w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/c9342ae17b624d1987c9e8044f272e01","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5r6094j5i5MZqSH8MCySgTfaUwD_pWQpoYwYdtpBFriv3m8GEbytZa7-OjqhSViaSF0pFfnTIYUrcciCFqGNVTmmGdF4q4MG1Gx3H-Y8zpudDhNF3TyAjmipeyCbPetVGpKAy16agnLvZRJvb-wavSdpk7Tg5EUU-WeZ9ZI6y3qi9oIgDDc8BISxdKKm59CnipQob7WrP-A6EFdhrk9sX8ldc01SiPSlxEADtPVzEKdYMFyuIUWdRPSrQ4LPKO4K4Y3WLS_VkfEBAX2Ybv4TYsxSWmbF0FDfo77vD3X3BcpBZ-yY49kV9NSVPTbD0gXziNLu_55_yBQRDG1PqbouPQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4251,7 +5787,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:12 GMT
    +      - Thu, 05 Mar 2020 23:19:55 GMT
           expires:
           - '-1'
           pragma:
    @@ -4265,11 +5801,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4287,12 +5823,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/8107525864cf4749a9a05c2ff0e0d74e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tKKhtcbDuhHbuwK-lbIOx2VJTRSwfsvMWQbl-KrBmmdRCAWFQzOkmQIK2nxFq5iFltJ5qHKnr9lAZ1HhVUrqQ0aizyRKbYN6fLbwD8kO2gdHTT_Gb0CIK17NLnIMqW3NjGJqxrYW3-0AcUnY-1aFoa2a6nW6ZnQ6KonG0I_P5Yb-5j8mfkE1YPeOqe6O6bn0Eq4PWTb2JqLmmb9gKQF8Yha7JRBBDRhCfn_H8kwlm3pkEpdXAHsm8AG3NrhxOLWkz1zXLDtQn5cOKx64coyP83QUcuxme6WpZgw8MfSDFFS_hr1n7_Dnn-WWcUxlYMk4OcIV65F5y3OnKYtBkcSnVQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/0ec542b313aa4913b46481ae8f3f13b5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"omWXFQ9DUuXPmKRcgUnjO_QDHVPz4X61a3G-sO9Ad3vd-RK4BJn3Ru__JHfMs0on_rBQ9DmKvQx3DJepRiZ3k4FsWzCGATAaIJ8BaL8u3L4CwPZ_gb7_lk9P64CIGqZ15ne8mI3hB5fZ6PZhDH-pMIW-pm7h2brIo2UhdjxVdZNgbPlma0im6CgAl6D6HLtJiseXfOM0_C1iO0F-aifBnDN5NVaCjbduHHXH-MACE5EMZi1-FlMVxHQ3jao3ZinOP9FCs8uSk82GMuyG7RPU9fpknfVKoH2cmqhAV36diWzKe3YKC6cO2mHZpK7D5CKyytZtHx2W-M6Cj6-WIUZ7Xw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4301,7 +5837,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:12 GMT
    +      - Thu, 05 Mar 2020 23:19:55 GMT
           expires:
           - '-1'
           pragma:
    @@ -4315,11 +5851,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4337,12 +5873,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/37993cf30cf9427b84b617982d828127","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"yb5_fI2KzF3mQ3j9jWF9TU0RzOkbGQs1TLMinLZh4idWcNjrQvFk31QUAu_5WPg8Bo7VReF5d_drPH3VzyINXZi8S7RDJgclXfBUHKcbu0Fd4gEgZV-4N2UcOGFKNjn06B6cVeMuoHMoL54-85PP0-8THMDnTi1mJfXdlQZlSCLInk3xuKrT4D-yH2iNqFtz3xFBYK8UPgawL-2pbr9tY_dCWJxCD6cgFkQ5g1DCaPHJ9SpSjnA92JzXafyx-FT_7j4lsle-Vl89mQ4q4fapRjPMeY4aNPql5qc9tButlcarXQuJRv_0xyWKkJ52QAdOgzmKKpSWjB3DtS4nHB2CaQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/f8c158ef56984200b4a59840765cf407","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5Ckn3PSuWPr5FpPG4papkttfxmK6tB1kFvkE8sXBy0Qsym3mfqOWuXUeTatKLKuw6XWIbey_6dVKXxlshtQ_pGI2Am2KbbnKaiXMsbvI0tNM2_C9N-5XFSoFlyKJMAJoRqdbmO1vmQqa8BBt-fp-edAwHpVDVzpky6dEb0jYj968aV4ok6Py8-nF_SJVYHxnHir5XTkPAUEV4FOUN_WZ8RmfpRFvxgw-vK3c6SgoW_KRbw6DKbgTaITENnHYFmiKDL1tuNbJSF7pxykv8QjEwP8cEgIaKWlY488_gRu3vWQucja5yI1irpmz9G_m1DIY8ZRZg7G3NLHrAUnXo6zOPw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4351,7 +5887,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:12 GMT
    +      - Thu, 05 Mar 2020 23:19:55 GMT
           expires:
           - '-1'
           pragma:
    @@ -4365,11 +5901,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4387,12 +5923,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/6ce1f8a43bdd4a3e8ef7ca9b3a983fce","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kGtBvobBRRhbXbj0lvCRPlLmpd30NEHTIX2csY-tQUY_HkoRvIdOs3x6Wu6jmuwctsDtjxsb6RTM_6TMWB_YDV9bGJ0BtN3ConhUhKzMUwyWwHYi_62XqHLBHLwzRB3jMx0mbYj_1iF3LiNqEVJafo-KjVxiV3_du1FDZkIbcI39VaAy5koNOKqD8ia0S_HMk5FzGbcw0-upTFVNGzSq9pl1rj1ZqjeKXfPZMGKntT-YgixGktripjBa4ZAbTTTaRHP2wiLOJf516eKxxjTTjmJduDdBDI4o3c0Xg-9goLCrwT8pdiknXDpHl-kIFSGNnC5EXJOXDQGhLq2kUuIVFw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/80eada7f91554257a3b450b9c24d528a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sSt7G_V1dOnLcFhiKDTyZmiT7Sc72Vgm1HCrgoiD7QxnQKy5XOB3JdkeYyZO6npbpGsLbKm5MF4ueCx963XxYr8vNtklstxiyLFIY8Z9dE_GQ0ykI0ggBai8Ubb-uAFtY2N-Zq5vch1F7kMeTHKDtJEfK2qRCoEs81aX9jEwpHyPsL47JbS1TEnwjqz4v0urNqXRfofP5e4SspPpXiZbV0hV_Sr7d7npDDeP8VkbaaWuyuNYrWpHCiBpD1Rn1SPSaQZSyhPWWcly0UixMUC-7ogP9zAkY7bC6aOdBzYhYFD1fQ5QSM4Jp-0fTmgvB615RZEGZvjvgWwdZdZksf152w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4401,7 +5937,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:13 GMT
    +      - Thu, 05 Mar 2020 23:19:55 GMT
           expires:
           - '-1'
           pragma:
    @@ -4415,11 +5951,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4437,12 +5973,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/dc39c9c6102e464789c63738bef46e81","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"rdXjc8xIy4YJfvhAycL7GbEwUNzCzObiMvESDA10fslpbYhgVJUmms4G5TNuqZavZ4CIHDRpQK8_JmogWRmxowhNxfDigK2EUUo8WWdSrqDQ-3S6BATem2ExD3mtgdf1iRWVQgWiyO6eFK8-J1sKTQ7KcnciNJrvwJCZfy23l3JLK7ZD98djIn7V4mLWQkiGxCKolLAAKKRTP81z-17HFyeQifZ33LqBegdHnhcZaUf_GeDP-lEv76FOzF4O_GdUAnlzD6Q2vZPMgy_bz4FB6VLP7vvmOlp1DuQeeDrhDEKhkVGqkvKMYlIuTrOLHadEHhEZeLVcR41j4niK4pNIuw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/e33ff17a084e4b679012e34e0938f8d6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"njx2AcylXK6IxdXLRwuuCTKvIOHAEBNY4_8v7LezXKhOnITILD72NGR_F-nChIOH_9qoLteomUHZeqTqNmDYfo3TSk2Gp_YioiTzy3aXsHpLSinqHObSdpcpB_f9atL13zE5gSGgeoVI2_pkEmdso_gMmGvA9rsZ-V63jIpgXUbNg8fqazvRTE1L7W9Kz263yKTCsvffddJtSIXCOtcCTn4UjqJqKlgPeRTudATeOoc1_psNGSWsfYo4cnfISHcVGYi20EVE5qaAph--pPG5H6iBLT7iBNLvpugF5vozxtVYLyVRcwtaBwtJohcYPW0QOuyGYfv74fGwf2-jrDJ3gQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450192,"updated":1583450192,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4451,7 +5987,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:13 GMT
    +      - Thu, 05 Mar 2020 23:19:55 GMT
           expires:
           - '-1'
           pragma:
    @@ -4465,11 +6001,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4487,12 +6023,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/b3fdf02df5404f18bd26b4c3c45a9641","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"j_yUCTbJ6nUWQXEf-f52YJ4jXgYRnioR8E8QDvz24C-2adZ8oMInSq9hQqmqUJCdyeIlQY7ir5LVZoNmd0UF-iTsMGFzFMZOqaczIm9LPcyF1mamM9jV4bf5QLYUmtpN6A5Ea9HiubpqRd0owprzbsGr_J3zBYX7JAWd4Mw1mhKHCa5FbxHcXXSfBeKM7-LIto7FbTzgXdZGqDvYdwdhoL9Yay3L1EqcbuFYS0eJ3CgXhmixEWnww2qRw0ZvW3mt_hTnYlfL6-MjPWO8mn6nWC5aYv_kzBXPgwtRSLoGNBxm4xuPJ8VSPNFFwPQo0KnqUyNjjyl6-jpe_Ne_nLkh5Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676604,"updated":1575676604,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/d1441b2c884e419d9814158a64384fd5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"q0qO2xcIoHTtMfQRdF3NyoPQCKUPKJO2FKJ5mUx1WJty3aFSfUbSqLdrwFzFcGwD_b_yTWscuOazk2jxCwf85zdukpmJDKVCXGdnz4xapoorWNKivYSnGLUtLBZdn2pi_rve3ox-8ud7pTl4TAtpcyUHct0Pc_qhoJDzgeQB9SYP5I11uNFZPWIl5Gf2uSIjF4W_lo-UJFBRfTbrvY-Gjy0ejqfv_cFixWg0_j-vmFsUwV__quA8mNLq_Qo9dPAAGLEqwWtdNjnbCugHgj5SA22dahk8JO8r3oVETi-TIg_mSC_PiJKTKd37ShwlFH1Fe4Mrdg6Z5cQ64r6Y4klvjw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4501,7 +6037,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:13 GMT
    +      - Thu, 05 Mar 2020 23:19:56 GMT
           expires:
           - '-1'
           pragma:
    @@ -4515,11 +6051,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -4537,12 +6073,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/2997d10b1f8247f39b3b2eb35e5a92b9","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kF8OshW4LqKfosSSOxG3BOrLYh96LHjrlgICRyGs_7RY9XpL36tBMDuRPi33c48-YJ-JISQjOIO0isPC2MlZ1NaIxAYKN8UY5e3g4gu0f5-lXFdwizVpokcQjmmNiYqoq4WoWhSN6HAU7qdMRQphTF3LHN3N-0YzKYw_bBXBq8zAKwcaWow3M_8WxJVCiQtSetsfO07gh8zR_UaFwWUvjtGyzESAi1V4jocA2_26XVVCt0jXkgSn8k83wjGwP4UaYrgyE1E5v_xzjv9WzcmLeRgUsA7QZOn3WUjGs-iWAU7rcOZpfJ0IHvU9t39LWbNfuz2muuQlJ6ViTKj91SRgIw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676603,"updated":1575676603,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/7bb40190000f4220a485089dbb122703","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"s_VCGdg1GPhrfNgFEq1Z6fm-bkmxYLSNaYdbQXKFVY5V0h6e9kqcVePcb2iDNMr3O9AkKb4_3dye7wyGp0nCzS4rJiMYecVottN0o2NUxJp0NBbw6IB02Etnb0KUtP9b3e7S4CN0txezSTH3L0yur5zs7DAn80kWx8SbV2nlJgvV9gUmeR6b_k1Ffbvs9rh6PSDSGRXhlWJw1zcMkIoMkvdEwg4vCKC4BHIDKiB4z9U5vkYmksE9DuXUzGZ_AG9PthFMKJfJOtCBDUE7ALFmVEGC0dDZdil5fiLaXIzpIFzvoW6fGmtK5wGM-D4GClDZPZxil5pDUI4NDsxBwkO8Mw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -4551,7 +6087,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:59:13 GMT
    +      - Thu, 05 Mar 2020 23:19:56 GMT
           expires:
           - '-1'
           pragma:
    @@ -4565,11 +6101,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_backup_restore.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_backup_restore.yaml
    index ec132ba89d00..286c414576f9 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_backup_restore.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_backup_restore.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keybak4e00e7f/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keybak4e00e7f/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:43 GMT
    +      date: Thu, 05 Mar 2020 23:46:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - isbiaqr33kjztaqx2a64cxy2.vault.azure.net
    -        - /keys/keybak4e00e7f/create
    -        - api-version=7.0
    -        - ''
    +    url: https://dzvo3jlktex3pnpmjy2u3wvz.vault.azure.net/keys/keybak4e00e7f/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -54,116 +47,95 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keybak4e00e7f/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keybak4e00e7f/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keybak4e00e7f/252e43d143034451a10ef1cf58232f22","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pkXY-xGyUuM6oSR5nEhe0fGwTP-iD35yrn97GjrlZFGdX2SxjOul3-A-R1S2EdC_SHtwIHB33St_4xRONWmoYKgIdIA5nXcDIOR0cOhnQPamhhDsOX6nftguONlhZoXdJjOlNZYGVnytviwFWTlRiDCIGDT-fTO25z7tkh3BnJrgx1aHdjr3UcoCGqyKD_C4IPB5hYYRejZZ8cYg5EZws67P0V7yd_lI4olXYG2bQQkmlLFQrYakFFuwAffbEuclKrh-Zt0qOjrzleadd6KMAp6-cKijgNa6wAf8vIH6ZiiT5DWqSCGNyLX_0iTcCo1zuxna-wZHJ1mLMiJ4BDCRoQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676603,"updated":1575676603,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keybak4e00e7f/885658852c004cdaa899feb1cba63347","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ru4bFzw8tzDgCprLu2lRGNRxR7NVQ80dQI3xbHIk_iYsy4heBAc13nhO-CxfT4CG43Gc9QhJxD8VejR861iH1pGiWJQrvhOBiY-a7zxmL97hWszrHrLua4-080GpGLwtWEH-haXQ1LjrFS5GpyXwl2SYlas7IDe4xlfHa-MX7-fejQ8G9gC6aFQr-mKmChop-fMUxYGLDzn_BjdgpTgEZ9WC6WEcLRPr2E8SFOBXwUzwsaVOeiRbFfYiGuScPju3D4ac6WDSl7dPg0xAh5By-qhrkY8aKBij0AAW5vqh4bSU6_1oOVApNmd4YAC_mpB_FIdp3U5dQ8S1kC4pxFOBrw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '660'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:43 GMT
    +      date: Thu, 05 Mar 2020 23:46:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - isbiaqr33kjztaqx2a64cxy2.vault.azure.net
    -        - /keys/keybak4e00e7f/create
    -        - api-version=7.0
    -        - ''
    +    url: https://dzvo3jlktex3pnpmjy2u3wvz.vault.azure.net/keys/keybak4e00e7f/create?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keybak4e00e7f/backup?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keybak4e00e7f/backup?api-version=7.1-preview
       response:
         body:
    -      string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLkt6VGNwY0hfeUlKVDE0bVdFN0NHSlNhRVZYSlhtdGxVTUVleUVvaEpEU0dtNVBDRU4xSFBLcVZTdWRDS0ZIV1cwM3lNQ1dNcE1tVmJzM250Tk1EZVU1LXBWdlZELUtJZ2JnR2dRTmZXU3VoR3ZJcUVlbE5PWENvbmctUC10X0RPcXpNSWkyOFktV0laMzJjR25wN3RlQjhFUWJYeW9WdEpTMENGaXBRZXgtZTRNbnFTbU1IUjRhTjNkZW1mUDRTRUtjbTlYam14R3ZwdFdwdWNMUUp0c3Y2bUdRVDN6RnNXc2FKdHlVRE5IbXFNZkNyQ3YyWUUxQlFxRGpOV1FXM0tTRmo5OHBhWkpsM0VVRFFQWjZxSDhwdXRWZDdWdUJIME5XaUdBMXBaZExvMTNvbURBUXNnZld6cm5Fdy1CSTFGZmtsQVdhc0JFeGVVNzBLTU8yVmc5Zy5rLXV2NWo4N2FJZGsxTWc3UXpjWnN3LkRra3lWWXcybDlCNng3YjZXTlIybkE4ZzJCZVBxekNBeFJrb2ZEYldRZHZKM2FXMHRMbVFRd0pVY3I0eEdXdl94RzJGV2w5UnQtcnRXbnVSOENmSzVtVlFpMEFveFhaX1FuMEVWaVVYMDBLRk1RbkhPLUlmY2gyY1JNNVU2SHoteUpSZHpVYzdIeE90S0VaWFV0RE9Td0pzU3RjaWZkeDZlcFpmVG82bGI4RUtWU0h6VTh2V3BrbU5RbWVwZ3A2MWlOakFWZGlVaEEyTGpzeHI0NmtYSi0wajkzTGtSQkQtU2ZtcG1VcEtHNEtQWFIyaHp2UG1TYzFDTFd0cFNPeWp6dDdqNW0yRDhWa3ZoT29FeTNmWkZJZmFaSDlEUEhrXzRCTTI1OFJrcTBBVlItNnNMWVlZazZRdjJyUDVPNDY4MV9lakdEY1FvMTNBb2lja0phSFgyUU55ZEI3OTY2TmNRQXR4UzlJZk9FcnJOWUlBT2ZaMF9MVjJIMzg4UEpTRkxkMWgwTzEwcEhPMWRHNkxXYlhFNkpwdi1Ib3VKODBTeDQ2VlBZX3RIVERaQzhKVVVpRDk2M3NGOGdjZ3cxd21hYldDRDNSSGRkUXdEYTY2c3p1eHp6RVpjVDRqTVFFRHIxSEZqQkZCX01EV09CRXZUZGNZY0FyVDhKd016QnZWMTdicnBtRjBaRDQxX3BBYnM3aXpkUFk5b2FEMFJSZFNtZ01NMmtNWmt5X2pzMzJKRGliZFBfaGFtQ1ZDMzEwS3ZaVUgzc04xUG9wRWU2STMyTXZ6dlNrc3pqdTJMdThxZU1oNFlFSTM3bGJaWFVSeWFLQnd1bS1vTXhjeDQ5R3U4MndvazlJXzAxOGpMbVVXVWhlbWlfSWF1TFZ6WEJkZHJUVEl5VUN2bUFjeWV6c2RFQTU0QTd0Nk5NaVR0NnhFUEsxbnNnY2FwaXJXc1prWkVzUTJwdkdmeU5SQTR0ajVPak1FSjBOd2JMTjdqSWlEcHR6emhFRFNDdDQxS2tTS0NCYkFCdzNOR1NHZWpCNUhUbUMwRmNMOU5CcnFJZ1FTVlBYR0kzUTh4TTZIZUlZa2FRQUh1Z3U5NEYyVGhVT2diMFNxNXFUM2YzMDk0VkRtMXR6STBBc1JDUlVwMVVoWS1KQ3laYnFNZXM4VWRobjJlbGVfR3RvOWJmTHN5cHJYQk5qWEJCemRRZmFmOUVZZ2RpN2xiaDNVMUJfLXBtYlphTS1iZXhtYzZUdk5hYy1TS3QxTk5GNS1Wank5S2ZLWTBVSk9CWGdFeEhIMThLUDBfSVhBV2NBd0QwRXo5Z2pEOWR0UXZhZUZwZHFJUV9oNjRmWmpkcUF4TlcyUVV1Sy0ydGw4ellrWHFmYzdFRjE4em9lTG5ZbTJoV0dBVzFhRkJYaVU2ZDI0VXhXX3JBV3BWVlVHMHd1eDliUjdmM1oyem1JTUVqUkRzSklJX1hJU2dlSElqYWxoVmpWYUxYUmNvTE9QM2RGejVCQ0x6VlFydWliTzNmTmx2REh2cnhmUmlHMGQ3QXFTWmVvRlVTWnQtZ3pLazdLMEpUWFdWYlpTYUpickFwYzBTTFRqQm9kcWdKZ0NaMEVkUkdMTHVXNTdfWnJyMGNEbE5OM0Q2MXpMQXZnc242WW9MUDN4N0x2ZkdSdzlzeEJaODBic3gxR2RBUjBnMHpYU0VyY3JXd1Z1cmRBU3UydUlXNGJuS2lsMklUQTRLMXozc1Fwanlid2U5djd4OGdqRkIwUGxvTWpUSjVlQ3Mxczl3cVNlYkRxQ21hMW1SR2pKTkt2RjZVbHlXTmNUZ1RSR1MwYmNXSWJWOE9sMl9IdzV6V1BURTNpTm91Vlc1cm9EbGpyR1YtakNHQ2RKaGppbmJmZXkwY0ZrMjhNMnQ3bzlTN0YxbkNmZmdkb2gyM2g4Zzc2TkJzQm9IVkJZbUJqNXJTVmh1Q01uRGZ1Qm9uMENiVmVHc2JBY1dRbWpRN3cyN0N6eXFnLTVUdC1SU2FJOVZlNmE3Q3N2Sk9mZ2dIRTJOX0tTelRuMTktNExBZjRRdE1kTHFQcERLZmZuc19BTEkxeUFKczhvb1h0SGx5SllMZEZyS0dsUngyVmdJNnNBbTFldzU4SUwxMjNnVDJnaFVnbHRjX0VSVmlrSWk1WXVmQXVfX3c0NUczcDk5OVdUZHZoaHIwWHl3dHJUWWhnZ1J2VUFXTFNMd2d3VUVTN0xVb0M5cnF4VnF4MHVOSEU2a2dOUkVTbnZMVElMX2VYbmZPT3lTSFlmd0tCSEwtN095LU14ang2dU5ZNXNLX3ZwYkhUNC1rNWZVVENsczdpcjhXLUFQLWp6M2dvSXJaenFaTE5STXJ6T01jblBmNkg3VFVrY2RfMTRZZ1lMbFNzZi03OFl6RktEZklESW5MMFhscklETHpPRTdZT2NhOUt1MzZZQ3hieExjeVlVTFl6dlpUeWxtRW9UaWFtMnFGMmxsd0xmUmpWcjhFMC11LUFoVWkza0szYkhkU3ZORFJBZHpncUVoYmx4bXpBQkRabS1WZGdYNmNkU0lHWnZrcDE4UW83QklnVWUyZlA4eU11RmNkeTZWSTJncDZFaGhOQmNwcUtkZmlENlZfajhrNDRlUHhqUWJ3a1k1bjRHUTBFeDJuQlpEYi1URnJ6T251TFRucEs1Q2Z5V0tzblFBT3dhYjF0WkJINUNhcVFVWkhUUnpwMHdpbnRhUmx0TWFGSnlYMlJqUEFkandkQktuSDRxRnRYQUdqRFFtUEctei1WSGF4b1diSkd1SXpIWENDOXEtODF6NTZhUjI0bzhDUmk2TFJ2dnRobVRkRXR1d20wWTZwUXRqM2hVMEZOTVZfNWpJMnNwUHZzWjZxM01DZmo1dnFkVGVmVlVxbk1meTVYMGNJUHBoV3hsN2hZSXNZbnpIUlh6NUtoVnFSVU9zSlJCMFZfLWlOR3oxNlc3MGRKR2pPdWVfelJ4ZUpGLTEwSU9GWjU0bzJ2QldncmJ2WDNCQld0NE1uZlB3SjdpNl9BMWNFbmdJRFlnTnVGc0JMLTVaN0hFbTdCRnBkNE56aGRmbUhiWGVBNVZGNGRJRW5yZFFYa3Nqdk1zUVJfalduN3RhYkJ0dGIxRm5kTy1nYTl4bFRPd1VWZ3RDNTVXdU51bV9jWVpsOTg3OGpSMFVRU2QxSG43ZHhucm9oNHF4TVFSVnpFdjN0X1lhRERXZ2xOeWpmOFBBaURkd1J3bFVYZERkOVFrSldBbWc1Mkx1TWV2UEQ4cFladERfNDg3LUZyWTVEdTZyZmhkZlBpWjAtYmZEdzBSbXdFWU1lTjQ1T2Y1ZUhHRHN5VFQxbTQzc0hTYlBVVTB3UElvejJsdFppT0Y3cXFPSXJxR2k1a09rd2o1ZjhTcWgzX3Z3dlM0RVZaSC1JaHY5dzljOGhuZkJOcl9IVFI1UlZ4UEtnUTc0ci12Y3UtZDI5ai1EVzEtYkhVcklxWTVpSjVTbENaMWhyVlRBVGV5YlNpNWdfdnpWc2N5bUhHLXRRT01kYmtETldKU2d5WlJ4d1c3QXV0V1V1M3VPZXRvUWxPbmpXQ3F1QjRtdGFKUkhFTTVtN0NhR215YURmbzRteU1fTGZGUlNJY2RFLS1OcWRwQlNBVDNremRrNjVjY09abEJaRlFiSTYySjZEME1ROHZhM01LcHRZYllYYlFuM3NTbklCaENqcWs4QlVadlNjZW04ZF90YW1fbFFrdnc5a3Nsa2E5OFBTd3N0X2ltT3Q0QWJMSVB2aEtLWFZBYUhTQTU5cXNqMTM5MHFXNE1nb2F1a0dMOTZTZXhLT2Nad2FHNk1lZ2thYW1KOHp0MVNmRzQ5bzNxR1ZDeWNsMTlKaUI4OXd0NmVna0dsNGhxOVlGbHF1WHdmV2NPd2VOTW9XWlhERFdObkQtTmVGMVFGMVVyN2ZIMVRiZEVYaDdESF9CRUFZTWkzUEsyVlh6R3YyZlZBYmNpQmFJcU5XU0JpLWNRdTNBQnJDNHN6RV95UWpuU0xqbUZXcHg5eGVIUHlZdWVaaDFOVi1waFRBMklHLWFtR3kwREtFNnpieXRoV21POUt2c3hGSEFFcWJzT2lVOXlKcFpCMjBjXzk3MmtwTmx6TkI2V0owQ0Z1R0JYNURoSVdTN21FMWVoLTc4dGd2WGMxTDRwRS05dzlaeGlsSWpUSHZRd0lzYVRHVXJMMXdwM2dFUFVPYVBOUGhKRmlOcDhsV3gwdmtTaWtYUnExcUEwQmNlaFE1TGhQYWJ5cVBaRVFzRXUydk85YnhUdHBkVzRKR2RzRXNyY0FoNll2eElPbnk3QkZYcmtVNkhvTFBHSE11bDNXaUQyV2FfQlJGeUJRa21wWU9qYl93bG1TUEhxLWtXMkI2TF9UVmJBRXN2djJ3dXVmbU9QbjNHd0pnY3FXY0x3eXp5NHBtVm1pbkgyd2d5My1TbnA4Vnl5WUVOQ1dHcUtnalhMZFVHc0pqV0VZTlR5dXR5TzJad2NuRDJtOHRUa3A4Z2s2Q3pwR2JXYjFPWFBuWVhHYjZVTFVSQ3REdVIzUlpJekdNUXJUdmNCdmZqWWdmTV9Yc21DckFWVGF1YW9obHp6dzBfdmlJZ2xyTlhDRFVwWk43NkJqNzNUZF8zRHFkN0VoZUFDZnMydnN3WGVHVi1uMXFvcFdBTGVzYUdzZ0kwS1d3RGZOTHR3N2c0cjFSMjVGeDMwQ0RwM0lXWE9NNE1IYjVSRG5jdHV3bkRiVXh5aU45a1RYUnVlTWI4QWl1bnY2dk5mU0FhM0lkMGJYTE1GT3oxU0tOd1JtT0FCN1F6U1BSV3o4bEUwZGNzbUpmRi10VHFKeE8zM1dPbzZQcDI5OGhlTHd1NHNKenVNRXJmMVpoTEcyeXNhZ1phbWk5NHEzNHJBWTUyZkN2Q3AzRHg2REZCZVVaMHgydmNGbkFzeHRBeWN6ckIzTUVCY3B4enY4eHlrME5xYTVKQ2t4cnloWm9fd0oya054X2JmRkJSeFc5RGRObUNQdUF5RU9kakRSWlZTckVaYWNDWDJpMHdFaUduazhzemtkZldfNnJBaDVNSWRLU3dTOUlKRVdtRENjZWNIOV9IZk9aYUZYYkFGSzNmM0ROLWh0OUZWcGFQZ255TGE3UDdfT3dXbFRsY3hqY1pzY2oxTWhPWkZIOUZueHVOMmJfUlVzZ3JmNTVLRWlXZGlLOTN5OElTNWRZYzI5TV9TQTR2ejFGcV9pWXZNTzY0akx4bGlJVGhVMmxVTF9FT2R0N1diUmRFOVRFSVpBVE1Bck9XdWU5NnRCTk5vVGdjSFpfR1U3MGlpODZaT0s0V1VUdzJvcnk0VXRVUkRxVEJoalY5UzliLUZzQW9WU1hpUkJGMm4yUTZSWFpyMG1GaTlpdENxbkxDV2ZnR2tBcEJ2WWlib2MzdmNDYWZrcXhsVlgyYzhyM1BCcnVPNHcxR1ZYV3BsMlNaeE52dnJkS01CMlZRNi11aDd4RlY5TnJkendqWVltajN3T0NFR21OZTJwQTItSEVMbGlVYk5OMVNxdDIxQjBJUDhvbXkwa3pXY1RzcTB4aE80bUlTbmNodFFqSnV2b2xSX1JDMUZEX3pTOEFyRG9pbElCQUhCWmlzbVE1eGVyQm5Sb3IzRHNrbUtYSm5pYWxsSWoxV3h6dWJ2RVVFQUtzS1BqZUxzNDk5cFl5S1YzNlY4alBMMDYyTjllYkl2aUo1ZmxLRncyUzRWcXVUQ2xZLVJRajZZQzNvbmdFZExqMVlBck1GYjM4UnRyU1NLdktTOGJWSnlBX21WZUZKSzY5aUh4WEQxa204QlhpV3FsbTdpU01lZkxYamh3eUZqWUFhM05MYng2LXJ3V0pLN2FtR3N2V1JSLXRkYmJDclhEN01GZEpJblJtaTV2VFRsSXZkZUowTk9UNG9wTUxURXJmbTFxVnpnUUNjR2FyeXpxMVhGME5HVnRCR20xd3dQN3lvb1g2UVItMG9lX0hEalVYdWhKZTlqY05ZWkFHMV9mUXVOSG5qa3kycDcxNEpzdFNWVTgwYXNYRnRaX3lOdTdsWHlRSFl5cmpLQVlBdExaN3hNVWd5VUplb2s2ZmxUVVdwdmZvM0h4X1U1aXpmUFlMWmNyR1d4cEtaWHh4Y25tOTcwaG9ramNKVnFoakZPQjkxLURwaDlTRzZlLWhSS0J4eG5lbXQ1UllGdm1mbzZsbDZITWNPYjduN0dYcFdLb2ZpUkFTZ21uaUJLYXQ3Z2dUc095a3lSdTdUaUtEaGp6dmhnTnlJWnJWSF9scHFhcmZ3c3dhMFhQcTFCUEpKSHFDeXRETG8wS05xdXI3RU10bnVWSTF1bXNERFI4U2FyYWVZcUpoSmZwOU5xak4tTUZDTFZzaGEyc2RNR1FlaU5zaWZudFpscGRxOFRpUnlXVVVBeXJFWnpiUGthTURUWTVRT0FGckRGbE5aTUNNRzZzVjBXd3BvOUoxVHJ6REVLakhfRXE5MkoyblRHMWlGZkdUSVFrM0xBR05pWUlaT2JjN0FQcHlXcDJzeGFTR1pQd3dXX0d0ZkI3NU83QUJxaEZ3RDdCbDJ0VlNZWFFvSF9pTzVlSEUwUnJWV1ZCNlgxSGlaQTRBNml6Nmd0VXl6NWlsekVReWtyWGJEWWt5MVMxZERDbkpMbllhZXhoM0dKZHo3dk1GVlNPT3Zib1ZSRWJpRWNmLWRpUEhkWllwV2xoeHpsbU11MXRxUWtHaFBHdGlKV096eThHaXdXcF9GRmNPSkpGRjkzLVdfZDJpMUhpbm1oa2tmdmc5WF9VdzJIU04tUTJDTG4tQl9TUC1fdmo3ZF9rN09hTzRtRkhQNzRLNGs5NXlBeXZDdzNPdElqMHByMy1ha1JJeVQxU00ta1pzdW1OMjNzcktCMllPWGNJZkdDc3hkcElWT1lFZmw0bFUyZkF0SjBuR3VwWjN2S0VYVTJxZXhDZERxYlZBTXRfYk16d194Zm0wT3Axd0hyU29tVW9NVk5PUUt2V2Q5b1BwYnRkY3VKZVoyWk9uU0F3YlBvbjA3NVU0QlBWczBZbHNlbDhlQ1FqTUNPT2VPZElYNC1QMWxFcE1MSEtWcHRsSjQzc0pDLXNzT1RZX2ZsOWZIM3dyRmlLbFAtb2JfWEV1Z0pqTkZvNFp0cnoxN2lhYkx0U1kxcHIySmdmY1JHZDFZNkpaYTJzTWx6Rnh5SkJCYVAyYUlvdE9McU9tcm8tR0ZlUzBzTk1QUWF4azU5eUhQb3lCLUNQUy02STJIdkQyb1JPRUppbUpvSzlBUDZyS1loN0RrTkhEWGhMRVY1STZJdU4yMWdOVFd0M3RsbjlZLXZYY3laVTlIdU54czliSmI2dlZJcUlWVG1RbEFkUW4zREVWQ1U4OHFtMXNXUkMzZjRndjlid1BUTXdnQ1loWHdEcTFlSUpCSXMwMk1XMnZEUTRGZGFERlhjek13Xy1UVlI0VmZWVzVtZF9oQnJDRUEzbktoWEQyV3R3bnVmZV9kRzJZM2t2M3I1VmotQk5wZElIcVpSUXBLcHo2UDR3TWFjaEhTclZxX0w0YmllU0t0Vk9YWWJKXzFWTDlqNjg4WjZwTGxsakJCTVdCWGpmeUVSNjFKMTVlWmRNVDYzTUhQMmduYk9GTWZaMXN2b0VUcTBWNzg1MjByUkNVYzctM0ZOVk9KR3JhbFcwM0xqcXo4eUYzbkZ6YWhQRE05d1FKRUZiZmtYODRNeWFhdGNuSnBFcHduMVBWWGJPeVlEbUdyM0VURDRiSGRPamN4MnpaeWlOWXloQXNidEdDbTFubzg3OUt4MlM5akhmYnlkd2pwd0xhUHA1cDFzTXhXMUNEX0hfUUdhQTNjSThCZDhBMmN4UUgzd0lyeGNaWnpGMUl2TXdIeFhjZmFfOHNZdjJkR3ZuSE5BdnAzYWI0VVNRWjN5UVFibVRjbWFOSDlRdFpkM3J1T210bGVxT1k1eVNLTWtUeWJyZXhvS0xvZ196X0VPdVNpcFVNV2ZsY0M4cC03T09Pa0pZMlFSbjR0anVKXzhxM2ZUNHVVYVJ2YUVSZFF6U29XbWFWcWkxYzhqSFd2bENZeGtlTVRmSGFvckdzWEFKM28tZEFET0NoOHp6dGxqaVF5bEJVSU1Pa0duVXhoMUMzYjA5U0Zfd0dvY3diTWFOZFctYkhKcHN2cjUzSVVrOFpxaFJWNHRPQ19CbXI5UnNhWkJtTjZNdEFuRjg0U1hLdklySER5cFJOdzl5TUtydWFoVFFfT2xEdUROWWJRbjBVMXQyak1peXNJTmhtczVubGNac253RFQ0SGU0bGluT2gtcnJHdGxiWE5PT1JnWThSWG5vOW9FQ1I3U0k4bk5qOFh2QmJwZjVGNmRtaldOR1VyMmpqemJWWjY5cEFIMTd1WjBQdURSS2NjTFBIandnYVNtN2VtZFhKOU1aU2lENDBxMzlGN09nYzd4aEJzZHcwTEd2M0pGNzNrdkY5U3pUMGEtX2JLMExWYlRLM2k2T1lxdUZlR0k3OV9EREw2MGVUaUtGU1hPdEFZWWFkWEcyT2ZvNXJkdlhpZ1dWalZDQ0lWckFSWjdDY3lBdFR5T3dmeFdjb0QxQVF0aUhMYlM0ZVBTcXhyRnZDTVJ4dmNRV3JYaEFqdHlqREpFeGpsUUtDSnZiWWNFRW1wYTg0RGpuZVh2U21fVFNzU3NNbnRnRFc0YmMwQlhudEhsWGU5VTVOYkNFNjFrYUQ1RHpid2NLekJsbDBmT0lFY1BSRFAtVThEVkJNY3gxdldUYmpFQ0dvWjFndm1nOW5rbGVpRTVjbERGWG1nS1VKYTNaMlJva0l0Ym9qU24zckhyTWlEMktteWtLNjJaTXRvR1VTSlplWDNVeVk1dGFPSVNIRFNiWm00bG5FNE13M01IcHBuZUpNbmZ5Yko3TnFSeWpaNnBJSDBqYUtvb2c2Ny1jTVRXS0RHdEllNWJISnR5dU5iNUV6aFRfd3VBSG1PNHRNV25ITTEtRm1rQnBmOXlsQmRDcWd6Q3B4UmJiN3QwU2NMWW0tcVpIblA1SkRKMEFPR2RpSHFBaGlTcG1lUW15NnMydnhrck5zOGVEWEt5S3lFRWQ5bXFWbFY1aGEwQW5OYklOWDN2djVrc011dm1penJMNURKUm45MXJDcGtrQUh1dFFhRkxEbHVOVmZmYTRQQjVub1FwN2RJSjMtbHNwbGJIb2tRa2ZSUlRveGZmMU9RQXdvdHJHMi1lcUxqenJRREVsaXN1V0FjMzhKcFpJSnVXTGgtcEZZMDh1NkdLZVZwTnE4ek9KeXM4WlV0WXVrVTg5bDNkanE5REdpSVNaSlkxTTFOWVJRVGJkaVZtdzBKYkE2SVNhTU9mUjRUdjU1N253WnZYcU9Ua3FVU0xPRG03RjdwcklxMk1WOWc2UHJmREpOSndwZFhxVjUxbDNlNUdKMmQzRUx5ZE9SQlEzMnFLLTRQTGdGLV9uWEFBZVg0SlpuOVY1QmdQamVBR0Vnejk2Y1cxeTJfbXM3T3lhSUt6V3lZd0pSUW1tV1ZPUEw1Sm1wZm5iTGdpRGduMm9JUzAyTXlxV2ZtUTBFWW9hd2plSGRJUUxudkpaMHhhWmtjTkJ6U0xYTkZRU3JuaFNWbkZRZEZSWTlOOFRZRVVETXpqbzVsRWdHZUk4NUVhZEFwS0Jya1NRc2hHTEk0NGFodnRCQ2hDbmlGSzNoRXV0elM4dnVmVERVM2tzdWY5M2U0d3hKNUlfQlZrTlpQQi1wT3BiZ1J3cTJ1WFI1RnUxZ1JTeWVTREFyeFNwR3o2V0FZcWR2X0NROUR5alA5OU1zT0hLS0NSLXR5OXl4Z0RhcWhNMG1Ob082NjFYQmVtU29Zakt4T3EyRnhaaTgwdnZDZE56czdjWU91WnFGd0NKTWdVRWYzVmNJcVVnZmRyRTRQVHgtZVROS1FZTGF5US4xaU9LSTlUcGxVYV81SFRKUlVGUVFB"}'
    +      string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLnNqNFpnV0lEQ1dDVUxOTVVJbk81Q0U4ZDFkWno4cndGczZpZ05US1hEMkZmMk9KaEFEeURkTkI5U0Nvak9hdjI1RVpzODZsTk9HX2o0VnpDQzlDRThGTzljUFVwSDJraGVEUnpydElpVWJBUjVGb3RILXZ0eWV1a3c5bnJsMVVFQ05kZ3E1T1FlMjdfOGNteDVkVWp3eGdCbDk4ZGhQLVNwUml3enZIbXAzQnA4dGUyLXFkR0JpZVZwMlF4UHdnY1doNEtzZEVEcXl4UExLLVZJNk4tZlBVZHBHMDM5dHU4RF9Sa2JYb2M0T1g4WUgxSjVhZEx4TXVsYV9YWC0yb3VtUG9xT3BoZ2hNSG43UllEOVNnSjI0Sng5QUlfUDNzYS1CX0w4anNfX1RfaEFySzJkMDZzd1A0MFJKZDJOYmFVY29tYk1YREZmNDN5QlpFZnc5VXk1QS5yTGNGWU9lVlJsUVpveUQyb25TeldBLjlzLWJla0FHVk54bmozV1hUNjlPUFQwNDZwSFZzanpvcGZ3dmJ5UHZYRncxWnIwWjVERmN1NlhBWmxjeG9LcmVqdlNtVU5uRjZ1Vy1ONHhoN1VHYXBGNXZ5RlVZZTZNejVNVGxRWThneTNwS0xmeWNmd2xqYnFGUDRUSmc0aV9jMDYxdnR2M1ZFQTB2M2tpVGRkLTQ2N3ZSS2o2a09vNnllNjRHS3NmWE9taGlROHA5Uk9zRjJHU1p4QUw0SWZNN0htdk1tUmJUWGhmcEN0SFRIalprSXpnRGktRXFEbk5oYXVlWGJ0NE9iNlk2aldKVmJZeUVwa3o3WVRJdWJsZjFiQlZVUi1jaUZKanItZDExWjBZOURTc0kwS3VnWF82LWhpZDNSTU9FMGpiOGQwaTJoVUdNZnNkQmtMTkptSGJpU0RiOWpTU0JnZGpsUkVkXzdnTnh6dDNja2tHZld3bzVCcDl3bzN6d09TSFpaSHU4SnBuX21WUmdIZEVFT0R2M1doMDBQVXpKSWJXZkU5S0swTUNTYUZQUXlhNWtyNUYyOGpqRkxiYkdaQl9QR2ZhTTNOSTNfOG55VXkwYzZwUUQ3QkhsZmRlOTU0X1lzRldsd21Gc2Y2Vkg2NE56dFFRcnRRY2dITlA1SGtUUjl0aGlsQldOWm44YUczbFJjRUlhWjh0XzVTN2tKcUplUVJvQ09qX2tTcHZud0pmSHRHMi1BTUlKa0dTVzNjdjY3MGtHYWhNYTUtLXA2NEc1NGNVNk9zZW5KalJTcVEydkFfLWZMcjNkb1JQOF9PU2QwOGZQUEpYTnFoR3RfblppODhwbVBQX0pwOEMydk52YkZOTmMyZU50NWlhZ1BRUHFEcUxYVHdVZDd1ckVjVzdzZmtMc0tBVUs1aGY4YWRpUDN4WGlxS2RqNHhDQmU3NmF4NzZEcmpHVTRMcWM0czU3enh6ZEhhZGNtRERrYUhGc2FWVW5SUEFXUnpQMUxRaFdESEVzZl83Q3RwMTA3RTJnd3hoSm5ZRVBEYUlNT3FramExWGFtdkphRDdSWHZ2S3FOd0tZTS13N2QwNUpad0lwU0d4VEhPN1JiMFljdEFJQVdiOWlhcFRjU1hhcDI0YjhjcUhLcHpRN0kwbUJaZkUwZV9PWno1bjJWa2RWeU9xeTNPel9iU3p1MkRDTUVHYUtJM0dMXzAxM25CaXRQVmhjWHctRWFQVFlUeG1GWjhsaFdjVWFaZDNUOG16UFNtenhpQXFzRHk1cndSUzBDTTFQOHE2QW5ZWDRjS3VtMXU3UFgxMUN4eGRkZEMyNGg3bTBLRTNXWFAzRHEyeUwyaVptTmRtSWFtc3FWa05PcHk2N2JoUFdLVXN4TS1GMGk4dHBpOU0xSUFReEhBV1hqbUc1TURrRmhYZzBCcUxFRVduWFJtMnBMbWxEcFZ3YVRCUnJ2RWlESmk5Snp2eDdWNzV1anBGendVUHJEaldXLU5YZWdHblBlZ2loYUdwMzBYdERGQ09JdVBPVWZaYU9LTjdGa0ljRW1nODFpM25vV21OSUVRcWxvWDJJUHFVVkw1R3AtbkdvYVRzdEJlM3FQNG90QTJ1MXZ3TmZqZ1pJbHlrWnN1clN6ODhRVnA3cEc5OUh0X2RjYWtzOUhqSENjUktJcXJRWUZfMTNaeTgtclE0Ym1xZmNBbklUZ0lLMndmVWxkUnFSYnY0ek1aZVFuVXhNaEpMVUIwNzZWRC1hSUpFcVp2cUJaZi1fN2ZwLTZaTFhSWDh2VERVSnVHM1NjbnVLOENFZzdnQjkyRGRjRTRibnNPdGdVbDBxQTcyblFkTWxJNmVVczdXRmpaUHAxczE3RVRub0dpcEhxel9Ubml6eFBKbFBNc0lfNXdZcEJHZk9vSjFNVGFOTzBYTEE1TlR5OUhwb3RPRXlWMWQ0blcyam5zTFFtQWNILTFrUmdLVHR6d3lmY1VJWlQxTE9Sbm5uM0JGcE1CX1BFVFRkajAxZGRnZnZJekw3aWROVGpPdmo2aFNnSzBnNjVIa3RkY0JPclFrZnE5ZF9NSWZGNkdMMDBuYjJNdDZobkxFYUw4UjBNdklsQmJUX1ptVEIyVVFkU3J1RDhIR3pQSWp0NDV3SlQxNENnM1FFSDJGZlAzVzNGX0MtdV9sVzNab3ZmN1hwcjQzVjFWVlg5RnJDTzdhZnZqazVPdEhhMmVHQWxGX3hmNWdaQ2ozUWZBNGR3RndtaDRXNmkwOHUyYlNqYmRtZ3BhaVpWaVhabkZLbi1IZnFVcmRJZTRYTnk1TDFDSUpGQzM4eDBpaHEzOE9KZkJSVzBPOXA4SURjZG9KUmRwUVU5SHhVUC1aN3ZDcmFGNjVFRzFDNjVwN1ZWZzhZREdJM1JQUk9sV2ZtVGRENmg3ZjM5VkZLbVR3OWlsSFZfcFBkcktROGUtNHBJcVd4MWUtTUtEYnZVTTZHeUJJQ1RULXA5VVRWd3lNSlI0dTlzd3JqQlRhMXQ5TXZ4R3ZpQXoyS0ktcDlPc2R4UVJlS21hS3pGa18yRlNVR3BKR3BjTFNfMUcyS0VHMjczVUZ3bGNUcWVXajZRUDVONDBJUzFGcGN4SGhBMHZ6R0FJMi14X1lEOHZnTHJHdnZiX3dRaEpHREFzQmozaDlaV0QtVmQwMUUzQ3dITllUSGZETEZ4SjR2M1VRWUJQNG4yUTdDOHgyTk5BekFjVjF1N1RUMjltQ2loS2R3WkIzbmE3QjcxT3dkeWZwckZOQUhYd2xpMWZkNVRxYjRwM3FsSl9LYmxaSmliTTZOLXJXU1h5RmVwWGp3ZEdUYjNGOWRBV2tQTDNDejRjaWZ4TUROQ2ZkdWpjWEllaElYWm5hdG55SGtoRk5FV241SFMxRXJudEU5Vk5idDBGajdWclBhQlVqOHZLSVo5N1NIY010SkFHN21DS25sMWxPemd5WFlFSGQ4WkRIaGRPMVhvaUN4LWZmcWVvQThHRkJIWjhodVVNOW1SNnVZYUpTcEtBMnAzWmlVNTh4eW9QUGVMUmlLWjZfZ0ZSa0tuLURaWjhHbVU5NkhyVFVWc3RTUl9jRFBhZU9aNG9pdEx2UkNvS2o3b1ExZkdhU0xuWk03cTFkY1R0TGZFVHV2Rkg3NlZodnItSlpSX3Q0RzhwZ1J1Skg2cHBsRkRtLVo1bWJ0VERuWC1laHZNOXdCQ1VxS3hQblB1NDRUcFNCUDNYc0J5eU9aZ19fVmowbWZfbnMwUlJIQU9YQTFBU3BfbFc0QWg5UzZGLVVkSlF0cWJKNlJ1bWVTTGxpdzc0WDE1UkF0S0VPekdRQXZNTVZTOEJBSDNIcFN0NHBaSmUwOUpZbFJFY3NEbUo5Zlc4U25vZVltSlRBX0xVVkZTX3J4a1dpamo4SUlhQTNDZXl1TUJwc3pvaFZBbUp5YkpCODloQjg5R0VDLXVnVnpQeTJieFB6RjlybjdjcXlNMVh6YkxxRjZjR2ZxWUhYRnJBNlVFaEZweVhQejlkdUFUSGZhbTM3Rm53R1RaMi1DVDhpcHlvMEZqb0Q2X1UwSFhDbURMXy1rTURxOHF1WDdGOVI0T2l2bFBhbGNpZ3pBWDItVUV3aS1OTVF5YXlyNFhlaFgxbWVvWDR5NHVLMnl4bWp1d1ZTN1JwTEhJcWtVa2VWbTRSOTJ5MjN5eTNfSURtbmhHbnY2dm11SnlFaFZLbzlQS3pzbjlBSGxyNDk1c2JxQ1dPcy1HN3BWYzRIVEUyakxIYUZsdC1lS0tuZV9ldG14dlJ6QVVDdzFtWm9RWHpqQkxMRTVqS0U2djlkdnNzRVh5cUlSRWpaRUtyQTRTZXlMaXEwdmo3STJEMFVaRXpWZ2IzWVBQUE9XcWlyY1BjcHN4Ums0VkVZbEFJakluMEE1STc2bWFMLWlhTGtXbXkyakhuZHcyTnlKOWJubGlLQUxqTFJGaUJIeFlJei1mUFdwbVpPRVRZMFZxWDZza2RlWVdfUE5yaTU2SmFYS3lzT3JsbVV3cWM2VGhWc0ZPcHU2bXluejRlcXVGZ3FwUm9SZEdVMDFhQ2RkeW9VVFFIemhBaEhEbi1vbWRkX3JvNXJwcTBOaGtpOFZFRHUtS3BDSjJ0cUhTbHJsRmpQcVc4TUZmLUxPaUk2UmVoY0hCTUMzeHRFRkgzZ3V1bHFhSjFuUGpCQUF5ZDdBNzhfZG14cXpyck9xZ01GbmJVRlBjN3J4V2NTQ0JLbV9YV0dFbXl6WXI0N2VuNHVaZ2hHVkFHX0hrVXA5dHdZTzZELXVranc3bmdHRDdtUTVGNmZNakU3VnBDWXk2NVQ1NHNNZGJBZTJQcTRiQXNCN1JBYlRVZ1E3VUtGUmJZZkNReERvZVJlNmotdjgwU1BocWk3MzRxRXk0bVVRZFNSdmEtcmd0azQ2aURjb1hiaHFTUkdoUVRtRGpNcTRRRE5fTG5MZ0lNYi1xUm1Cd2ZPOWhEbXNzNWNGT3VIbTZrNmFqbUZ1SFJfX0ltZENoMG5IdlYwcEw2SU1hdl8xT3FkUUJrRmpSSEhIUG9Mcm40TmNJM1ROQmM2a2FzOGR0aDN3NXd6M0w1dFpOZUhDd2dHVGtwb0dNUWxGV2xtOVF0cDB2azNiUFdRMjlrczRkWS1COFA1Tm9mRC1raHBIRnUwcTlTc1dMOGM5MllNM2MxZDFFS1I1M3ZaQU42am9pNUZ5MTlOSkEtTGdoV1JXVlM3dnA3M0JJa1JHXzlqU2ptUnN1aDlhZkkzQkxKSlVHTEE5eUZHRFFMOXhBWk94Wl82b09WcEx6TXk3YVpBSUg2LVd3SkoxTXY1RllBV3Y2a1FLLXNvLVhReTAwd1QyYzhGYk1iaGhnNjN5VU40UndvZy1lcTdjSlp4bjQyOXdRQUxXZUlEWkhXSkNwVnJBdzZiYWtLN0p0SlZwc2E0b3UtU3NhSGpxRWx0TTFKdlI2RnhPMkN3eXZnWVdWT1pOQ1N6ejl4SWlzcmRpbGdXYi03NGpPSTg3SDAtQzRaV0pHUmVEZ2p4MHJwdkd6dHhWWnRDVS13SHg0bEVybkJJTUQxeGlLZlVQT0ktTEg1ZkIzeHF2Nl9OdUMtSDFVUUdqVU8tcHpuNnZXT1NGaGNkMDZTSWFfRTdib0NNenQ0ZHBQZ2JPa25VZm5tYlBJWERpTUhLbHdjYm4xZE1hSVl0Wjc0QWg3b1ozSUlRLWMtaUF5di1zN3ZCRFMwZnFoS3JaeVdCVExrbG5WdU5iMEJLdkF3QVZoNXdJQVZSbmllZ1h5cUY2aEdIRlpCS3FhdW44UmJBQ2h0elpxNkhYandCTVFHRVVjMWhabE5RNzJNbmRKaXhTa1k1cGxPbWZmOEloWUV0OXV3SU1CdjFXcjZ3Mkg4b2YxekJHQll2bmcxRHRsT01LcndFNU1Kd2NaaUJkV2VrY09yeUpGaGxvNUNnU1N6bDVmYlBqT016WTN0RUlnTElkZ0tFbmI2R1hVUFFpZDdSMWYyNm1NaUZHbUNtdVFqeEtvR2dHTWJDT0pVM1kxQWVlQnZSUEtCaXIxUnM2VUNIUDVqSjRFcXhaaUw3NWVxbEZvUTJ2WjNyR2ktekhIY2w5N2ZCSjVFWlZzbnlSWFZhNUJ1QWNsbmZZSHZFb0M5RThYUEttVXQwTTEtbnZIR052Mi1XT0dUNU80NHQtZVlzXy1CdVJQSFdHOVZ0QTdvOE1WaVhDcHNaQXVVcjZsbjNwLVIxSHpkY0VPY0VSbk5neWZTZEpiejF5YnRmN3N3cUJ4WTNtR2pRNkVESlMteWh3RDJFUnJTZE9SV3oyd0lSMDBWb2FCdHBwdWE3VjV2MHd3Rl9wdkkzb1JfVjRncUNBV2RacEZwSTZRV19NdnprMEN5VHBsQndRZmdnV3pIZnBaZnBVZkxXcmlOaGJpTEJTdUo1OVZrdnh1d1NkenFiU3hzZzdpdmtUSm1aVGE3R3MteWczZmJqTXpRSjhLOWo2NVl3Ull5Vk1UdnNrT1RLOFlpMnVDUlZiT2xWUkNTUzNLcFFUTlNnTUdROXlnRkEtLVV0enl1bXBNdjdNQndvX1kyYnlXVnZmZUxpWk15NDZ3eVlyZHFnLTVFSS1YcVVvek5LUEctMERwZi1LQkJiVEpjRWFlUlZua0dxcENGYTZNSUFDWUswa2w2Tm5UbkhzaEJFX0FDQjMtLVZjamJDWjM1dTFxMEhSblNOSl83ODRLT1JrbWg3UGtzNHNTTGxlUUdZbE41SzM2cGtKeVBERWhCQjZPSjU4dzlKdWRlOHhMMkU0ZS1mVTUwYkloMlhmX3JDU29NWkRTUmRwVF9RbmVuTnRpeU5BaGRkbzM1ajQyUVN1ZmVXYUhyM2hsRkFmR1k5dGtKZ09FNUlycl9SUEFWMUJURTdqa0xjVF91cW43NzVWa1ZaNWpkZmVQc05kQ2ZOZG1feWZVWTlBYzNsOWZmWk9iYVhJZEpJUnhkbW1USXcyMFJSM2N2SFJZNWpFRUpueDVjOHRIUTY2RjA5YVVRWTZUQ0RpMXFyaU5KUXBDRDBuU2xYQjhaa3Rha2N0RDliTkhheVUzV1hYTVA2YlpGLXFrdmZpN3pVWWM0ODNsQWpKanJnZmtXWnRsZG5hckFzeXkxaEQ1a2Z3QXg4djJCSnFvVWF4OHk2Y0Zmc21nczZCcFo4WWU0TkJOdjk2SExfYThLR3RYXzJvdFl1SkFWNGo5T3NhTmFhODZPbGVteEpRelRFdU03Z1lRMExJdWd3bXN6dlJadTZOc3VmUUZBRmNJZDk0WHRLdG5ZX0Zkekp5Q0s0bjlJRV9yQy1VVEYzTDhNaV9PaWNrbzNpVGQxTTlEZ1MzUjdNSVlxZXBETUlQOWRVbFJlbjFzZWNrZm1PczNndHF2VDFtdlk0ZHVoM20ySE82b1FFZTMtTjktMllJdmRpc055Zjd5VXUzM2hpMThlUzVENUpZb052blpVNmZDMjdwS19yZXdtRXVncjBMZzFHYTV4bGZkcHhyQ0NKVmVWNnAyY1dLU0tCTkVUdy13WVNSUUJHUU82T2w0XzcwSUl1NkZDOTJvSUxONlZabjJlVkNRTzVZekdXQjVzVUJfRUtONWJ6Vmh5elJ2NGViaWlwTjNMNElrV09YdHE5NWtHUE9TdlVzTHVNN0VaYVlyTnRRWUg1T2ljZGF2OTFBZFRRWndMVmVDV1B1TGhWNi0yekNMd3NFbV9WM1A1MTBfeXpsSTkyNGFBRVd1SW9UY2U5blNJYXplNTJIa0dFMlVObTlua0lmZG0wOG5LUmpMRGlaSlYtMm5XNW04eFlXTTVxNUVsbUhiVlFjczdydUhGSmRzMFlxZTlSeGpSSFljemJiQ3NyTVhTMVpJLU80YmNDUTU0U3RrUmJiQVhzbUd1MkNwdkVHVGJFYnJZTDhsLTNKRVVWSkJwbzY2eTRSSGpDNWNTNFpPQW4wU1ZVcGk2cVBSNFdEWTZVUXdqYjRjRl91TVZUbGFhUzVPTS1lclJkYWVrMk9qTHNrWFVOeVVVYUxJUF9CeWdydGlzQTlBMDBxaVZSOWZIaU9WNEJhMmhTU0JwdmNVMnBxd0J0b3RQTXl5ZW5nb3U1UTFEUWRwZTBZdk8wVE1vVVo5dGpRQmJZTkJwTzF2bExTZ0lhZ241UkdiQjB1SS1iM1FYaVB4S29vaFEzdkVwVzhBTVpPTDhLWDFhSTRPUWl3SUoxenVtd0NhVnFaU0hiRHBvQW9DdHV3bm5oZmhjZ3RzajUwZ19fbklQY3hLaDBwZFItRDlpdFNFQ0FDY1kxSzJFem1DZUhsaUJlWWZnQnBuaEdIb0toWDlVRWY2bGlKRDlnOUYwTUJ4ZmRYZktEUW1RM2lkMkt2RVFJSkVtSnJvTFdXS3pwS1A0QURsVDZPdVI3SFNiOHp6ZHlhdm5CZms1RS0yNHZZNGpXM1dCakIzcEM3U1NqQlBlMWxiVklJQ05POEFWZE96NVpCVEdoU1JSTlVnUlZVT3JSeHg3WlBMcGJGcVJ3THF4QXNWeElIU3RrYUc2TXdZQWRXXzNfQkVtQVg2blpCdUFpTHNJTXFsenBVZk9tcXp2eVk1M2ZWOTB3Qkd5TU02NE1EbW9nRWxTYVBrMmY0UE9QOFBUb0d3eW5WVF8wU2RZY0FDZDRONjNTSXFkRzRWMkhnZ0J2RDd2a0d1Zk1pa0xqQ0VONkExZEE4U2NIUDN1LXg5aWZ3S2lIcV9WWWxyMHJKbVFVY2xWbkliV3lxTFVfWmNBcHY0QTJ3dnBZRTR3S1pjdC1jMkpvSmlBWmhUY3JtTmJ2bkc2T3NrU0MyMzR4WTFERWJSSlJ1eU1MUUdPUS12dWluTUUydF92VjNvOTYwd1V6TDF4bjBRa0xyV05pZDRVTXBxSjk4bWs4d2R3QmFDU3RiX2dBSTlnTHRrZE5ZcGl1QUtDNTdKVjUyZmE2SGxkdEZxcjFlck5YaUIyVXBwdGVqS0VhTUVYaElYdlRNLVdWZU9HQmJka2oyMGdqOW5LUUl3YU1GOTN2U1JpY0lGNnpyd19PT2tDOERRcEdvTzZCSHZWRnh0MFE1VlgtZDNZcGNyeGdjckJGSWVVaFFaS3VuWXMyVllDSzZoX3p4THQtUURnVzk5QW9FZmhTaE5YOUtNWGo2VUIwX3F1WGU5VFhlb25aT1VQVS1hN0xQRHNmVmMxUmYtQlp5RWY0eFhlZDExY21MRjlMc3k0MFZRY3JkSHdrWGNqT3Y4RnFFUS1PQlhKSHFMcmEzVVpHYklMUWhqMm1TM295dmdFTjVCeHhRQWxrWDh6bjJyNE5vVktMSXBJa2JqMXk4bVdSVXh2TGRYLWk5OXBDbF8yTXNaM1JuUjRzSlhwS2swdk9kSDhoVWhlY0hJWVAxTGFzOF9Ydzd6QThZUHF2WTFUVjdwTnJEVjdOeGV1WW5oX3pwYWozUXprSVFMSXBSMUlNRm9Jc1RjWEdSdnhEYktIUklqdk1sY0k4V0xBU2lYc2hmVzY0Ym02RTVwbTJhYjdiNGlsSXlWbUNBX1d1MDRTRHluZ1gyWDhhSFhybTZVMzBzaVZ1dEFoMDBSZXBQaEE1RDZpRGpkZUhKTHFBQ0l0cDM4VmlVZkZ5ZWZZSXBNcV8wTmlTOEFRQVlLWV9tRjk5YmVmem9sZS1lU2NZcU0xcEU0dFNjT29rc0lUajdaQVloVkhfUlJMZHBQamFVUjdxdWRMSW9sUnNkRHNEampzeWlYMk5XT0NvTGRTVjhXLU00SnF4aWMyczZOQWxWVzk3TWQ1RXhCeWxYMjJOT2x1T1BOZkltaEVidE91Wjc1TjNmT2ZYQWdGTW1XOVNVT0JrZkdNeEV2YW51d3FqdEJyenF1S0NpeW41ZFpqaHoyLTVheml2aS1PeWJGb01yZzkwNVM5cUJxOU1pWlg1Y2xTanlzdUxLSHZQdGZCbmdpMVc0YWdOQXhVOG5wQVc2ZDRYMFpoQnU3V3RaTU5kXzhTRW5FbDF3VEN1SXg3V3BQaTdmTlhpLS10ck84TGlyTUEzbl9hTHViR0ZFd25BbUpEelJGaWQ4bWliZjBVZjdVa0lDMGVOUXVlX0MwNU80MnRmekozWnhwYWdOZXFNTmZ5UDhwUy1yUEdHdjR6RnI2Y2RGRUcwVThLTEFfX1dBSVJzZWlqNGpRcDNzQ2k0UF9YMHJRNTBtMkQ4RlppMHNGRVFlNzFKWm1NTXBfUTc2ajRGTDVQVk5GUE1OWXh3MUprUmJRamxiaDNYSEtCbjFvc1Uza2RnSnpPSkFmMXFQOHBpdWhFTk5NQUMzVnlkSXRsdU01bEJJQUl2SE44STE1T212VmIzNHA0WEVYOURhOXZMQ05oaTdfZGs3UFpzdElFTm1UdzNxZ2M4MVVyejA4OUJXNml1b0ZwNTdKMkpqelpHZ2xiM3N3aHN4SDhkV2JyQ19lWEZWWXVhM29LTXlzbjhHVmdYbjdlcVNUMXpCZmprdS5nZUlRalMwX3h2cmFSbnJlWEVuV1NB"}'
         headers:
           cache-control: no-cache
           content-length: '10720'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:43 GMT
    +      date: Thu, 05 Mar 2020 23:46:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - isbiaqr33kjztaqx2a64cxy2.vault.azure.net
    -        - /keys/keybak4e00e7f/backup
    -        - api-version=7.0
    -        - ''
    +    url: https://dzvo3jlktex3pnpmjy2u3wvz.vault.azure.net/keys/keybak4e00e7f/backup?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/keybak4e00e7f?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keybak4e00e7f?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keybak4e00e7f/252e43d143034451a10ef1cf58232f22","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pkXY-xGyUuM6oSR5nEhe0fGwTP-iD35yrn97GjrlZFGdX2SxjOul3-A-R1S2EdC_SHtwIHB33St_4xRONWmoYKgIdIA5nXcDIOR0cOhnQPamhhDsOX6nftguONlhZoXdJjOlNZYGVnytviwFWTlRiDCIGDT-fTO25z7tkh3BnJrgx1aHdjr3UcoCGqyKD_C4IPB5hYYRejZZ8cYg5EZws67P0V7yd_lI4olXYG2bQQkmlLFQrYakFFuwAffbEuclKrh-Zt0qOjrzleadd6KMAp6-cKijgNa6wAf8vIH6ZiiT5DWqSCGNyLX_0iTcCo1zuxna-wZHJ1mLMiJ4BDCRoQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676603,"updated":1575676603,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keybak4e00e7f/885658852c004cdaa899feb1cba63347","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ru4bFzw8tzDgCprLu2lRGNRxR7NVQ80dQI3xbHIk_iYsy4heBAc13nhO-CxfT4CG43Gc9QhJxD8VejR861iH1pGiWJQrvhOBiY-a7zxmL97hWszrHrLua4-080GpGLwtWEH-haXQ1LjrFS5GpyXwl2SYlas7IDe4xlfHa-MX7-fejQ8G9gC6aFQr-mKmChop-fMUxYGLDzn_BjdgpTgEZ9WC6WEcLRPr2E8SFOBXwUzwsaVOeiRbFfYiGuScPju3D4ac6WDSl7dPg0xAh5By-qhrkY8aKBij0AAW5vqh4bSU6_1oOVApNmd4YAC_mpB_FIdp3U5dQ8S1kC4pxFOBrw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '660'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:43 GMT
    +      date: Thu, 05 Mar 2020 23:46:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - isbiaqr33kjztaqx2a64cxy2.vault.azure.net
    -        - /keys/keybak4e00e7f
    -        - api-version=7.0
    -        - ''
    +    url: https://dzvo3jlktex3pnpmjy2u3wvz.vault.azure.net/keys/keybak4e00e7f?api-version=7.1-preview
     - request:
    -    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLkt6VGNwY0hfeUlKVDE0bVdFN0NHSlNhRVZYSlhtdGxVTUVleUVvaEpEU0dtNVBDRU4xSFBLcVZTdWRDS0ZIV1cwM3lNQ1dNcE1tVmJzM250Tk1EZVU1LXBWdlZELUtJZ2JnR2dRTmZXU3VoR3ZJcUVlbE5PWENvbmctUC10X0RPcXpNSWkyOFktV0laMzJjR25wN3RlQjhFUWJYeW9WdEpTMENGaXBRZXgtZTRNbnFTbU1IUjRhTjNkZW1mUDRTRUtjbTlYam14R3ZwdFdwdWNMUUp0c3Y2bUdRVDN6RnNXc2FKdHlVRE5IbXFNZkNyQ3YyWUUxQlFxRGpOV1FXM0tTRmo5OHBhWkpsM0VVRFFQWjZxSDhwdXRWZDdWdUJIME5XaUdBMXBaZExvMTNvbURBUXNnZld6cm5Fdy1CSTFGZmtsQVdhc0JFeGVVNzBLTU8yVmc5Zy5rLXV2NWo4N2FJZGsxTWc3UXpjWnN3LkRra3lWWXcybDlCNng3YjZXTlIybkE4ZzJCZVBxekNBeFJrb2ZEYldRZHZKM2FXMHRMbVFRd0pVY3I0eEdXdl94RzJGV2w5UnQtcnRXbnVSOENmSzVtVlFpMEFveFhaX1FuMEVWaVVYMDBLRk1RbkhPLUlmY2gyY1JNNVU2SHoteUpSZHpVYzdIeE90S0VaWFV0RE9Td0pzU3RjaWZkeDZlcFpmVG82bGI4RUtWU0h6VTh2V3BrbU5RbWVwZ3A2MWlOakFWZGlVaEEyTGpzeHI0NmtYSi0wajkzTGtSQkQtU2ZtcG1VcEtHNEtQWFIyaHp2UG1TYzFDTFd0cFNPeWp6dDdqNW0yRDhWa3ZoT29FeTNmWkZJZmFaSDlEUEhrXzRCTTI1OFJrcTBBVlItNnNMWVlZazZRdjJyUDVPNDY4MV9lakdEY1FvMTNBb2lja0phSFgyUU55ZEI3OTY2TmNRQXR4UzlJZk9FcnJOWUlBT2ZaMF9MVjJIMzg4UEpTRkxkMWgwTzEwcEhPMWRHNkxXYlhFNkpwdi1Ib3VKODBTeDQ2VlBZX3RIVERaQzhKVVVpRDk2M3NGOGdjZ3cxd21hYldDRDNSSGRkUXdEYTY2c3p1eHp6RVpjVDRqTVFFRHIxSEZqQkZCX01EV09CRXZUZGNZY0FyVDhKd016QnZWMTdicnBtRjBaRDQxX3BBYnM3aXpkUFk5b2FEMFJSZFNtZ01NMmtNWmt5X2pzMzJKRGliZFBfaGFtQ1ZDMzEwS3ZaVUgzc04xUG9wRWU2STMyTXZ6dlNrc3pqdTJMdThxZU1oNFlFSTM3bGJaWFVSeWFLQnd1bS1vTXhjeDQ5R3U4MndvazlJXzAxOGpMbVVXVWhlbWlfSWF1TFZ6WEJkZHJUVEl5VUN2bUFjeWV6c2RFQTU0QTd0Nk5NaVR0NnhFUEsxbnNnY2FwaXJXc1prWkVzUTJwdkdmeU5SQTR0ajVPak1FSjBOd2JMTjdqSWlEcHR6emhFRFNDdDQxS2tTS0NCYkFCdzNOR1NHZWpCNUhUbUMwRmNMOU5CcnFJZ1FTVlBYR0kzUTh4TTZIZUlZa2FRQUh1Z3U5NEYyVGhVT2diMFNxNXFUM2YzMDk0VkRtMXR6STBBc1JDUlVwMVVoWS1KQ3laYnFNZXM4VWRobjJlbGVfR3RvOWJmTHN5cHJYQk5qWEJCemRRZmFmOUVZZ2RpN2xiaDNVMUJfLXBtYlphTS1iZXhtYzZUdk5hYy1TS3QxTk5GNS1Wank5S2ZLWTBVSk9CWGdFeEhIMThLUDBfSVhBV2NBd0QwRXo5Z2pEOWR0UXZhZUZwZHFJUV9oNjRmWmpkcUF4TlcyUVV1Sy0ydGw4ellrWHFmYzdFRjE4em9lTG5ZbTJoV0dBVzFhRkJYaVU2ZDI0VXhXX3JBV3BWVlVHMHd1eDliUjdmM1oyem1JTUVqUkRzSklJX1hJU2dlSElqYWxoVmpWYUxYUmNvTE9QM2RGejVCQ0x6VlFydWliTzNmTmx2REh2cnhmUmlHMGQ3QXFTWmVvRlVTWnQtZ3pLazdLMEpUWFdWYlpTYUpickFwYzBTTFRqQm9kcWdKZ0NaMEVkUkdMTHVXNTdfWnJyMGNEbE5OM0Q2MXpMQXZnc242WW9MUDN4N0x2ZkdSdzlzeEJaODBic3gxR2RBUjBnMHpYU0VyY3JXd1Z1cmRBU3UydUlXNGJuS2lsMklUQTRLMXozc1Fwanlid2U5djd4OGdqRkIwUGxvTWpUSjVlQ3Mxczl3cVNlYkRxQ21hMW1SR2pKTkt2RjZVbHlXTmNUZ1RSR1MwYmNXSWJWOE9sMl9IdzV6V1BURTNpTm91Vlc1cm9EbGpyR1YtakNHQ2RKaGppbmJmZXkwY0ZrMjhNMnQ3bzlTN0YxbkNmZmdkb2gyM2g4Zzc2TkJzQm9IVkJZbUJqNXJTVmh1Q01uRGZ1Qm9uMENiVmVHc2JBY1dRbWpRN3cyN0N6eXFnLTVUdC1SU2FJOVZlNmE3Q3N2Sk9mZ2dIRTJOX0tTelRuMTktNExBZjRRdE1kTHFQcERLZmZuc19BTEkxeUFKczhvb1h0SGx5SllMZEZyS0dsUngyVmdJNnNBbTFldzU4SUwxMjNnVDJnaFVnbHRjX0VSVmlrSWk1WXVmQXVfX3c0NUczcDk5OVdUZHZoaHIwWHl3dHJUWWhnZ1J2VUFXTFNMd2d3VUVTN0xVb0M5cnF4VnF4MHVOSEU2a2dOUkVTbnZMVElMX2VYbmZPT3lTSFlmd0tCSEwtN095LU14ang2dU5ZNXNLX3ZwYkhUNC1rNWZVVENsczdpcjhXLUFQLWp6M2dvSXJaenFaTE5STXJ6T01jblBmNkg3VFVrY2RfMTRZZ1lMbFNzZi03OFl6RktEZklESW5MMFhscklETHpPRTdZT2NhOUt1MzZZQ3hieExjeVlVTFl6dlpUeWxtRW9UaWFtMnFGMmxsd0xmUmpWcjhFMC11LUFoVWkza0szYkhkU3ZORFJBZHpncUVoYmx4bXpBQkRabS1WZGdYNmNkU0lHWnZrcDE4UW83QklnVWUyZlA4eU11RmNkeTZWSTJncDZFaGhOQmNwcUtkZmlENlZfajhrNDRlUHhqUWJ3a1k1bjRHUTBFeDJuQlpEYi1URnJ6T251TFRucEs1Q2Z5V0tzblFBT3dhYjF0WkJINUNhcVFVWkhUUnpwMHdpbnRhUmx0TWFGSnlYMlJqUEFkandkQktuSDRxRnRYQUdqRFFtUEctei1WSGF4b1diSkd1SXpIWENDOXEtODF6NTZhUjI0bzhDUmk2TFJ2dnRobVRkRXR1d20wWTZwUXRqM2hVMEZOTVZfNWpJMnNwUHZzWjZxM01DZmo1dnFkVGVmVlVxbk1meTVYMGNJUHBoV3hsN2hZSXNZbnpIUlh6NUtoVnFSVU9zSlJCMFZfLWlOR3oxNlc3MGRKR2pPdWVfelJ4ZUpGLTEwSU9GWjU0bzJ2QldncmJ2WDNCQld0NE1uZlB3SjdpNl9BMWNFbmdJRFlnTnVGc0JMLTVaN0hFbTdCRnBkNE56aGRmbUhiWGVBNVZGNGRJRW5yZFFYa3Nqdk1zUVJfalduN3RhYkJ0dGIxRm5kTy1nYTl4bFRPd1VWZ3RDNTVXdU51bV9jWVpsOTg3OGpSMFVRU2QxSG43ZHhucm9oNHF4TVFSVnpFdjN0X1lhRERXZ2xOeWpmOFBBaURkd1J3bFVYZERkOVFrSldBbWc1Mkx1TWV2UEQ4cFladERfNDg3LUZyWTVEdTZyZmhkZlBpWjAtYmZEdzBSbXdFWU1lTjQ1T2Y1ZUhHRHN5VFQxbTQzc0hTYlBVVTB3UElvejJsdFppT0Y3cXFPSXJxR2k1a09rd2o1ZjhTcWgzX3Z3dlM0RVZaSC1JaHY5dzljOGhuZkJOcl9IVFI1UlZ4UEtnUTc0ci12Y3UtZDI5ai1EVzEtYkhVcklxWTVpSjVTbENaMWhyVlRBVGV5YlNpNWdfdnpWc2N5bUhHLXRRT01kYmtETldKU2d5WlJ4d1c3QXV0V1V1M3VPZXRvUWxPbmpXQ3F1QjRtdGFKUkhFTTVtN0NhR215YURmbzRteU1fTGZGUlNJY2RFLS1OcWRwQlNBVDNremRrNjVjY09abEJaRlFiSTYySjZEME1ROHZhM01LcHRZYllYYlFuM3NTbklCaENqcWs4QlVadlNjZW04ZF90YW1fbFFrdnc5a3Nsa2E5OFBTd3N0X2ltT3Q0QWJMSVB2aEtLWFZBYUhTQTU5cXNqMTM5MHFXNE1nb2F1a0dMOTZTZXhLT2Nad2FHNk1lZ2thYW1KOHp0MVNmRzQ5bzNxR1ZDeWNsMTlKaUI4OXd0NmVna0dsNGhxOVlGbHF1WHdmV2NPd2VOTW9XWlhERFdObkQtTmVGMVFGMVVyN2ZIMVRiZEVYaDdESF9CRUFZTWkzUEsyVlh6R3YyZlZBYmNpQmFJcU5XU0JpLWNRdTNBQnJDNHN6RV95UWpuU0xqbUZXcHg5eGVIUHlZdWVaaDFOVi1waFRBMklHLWFtR3kwREtFNnpieXRoV21POUt2c3hGSEFFcWJzT2lVOXlKcFpCMjBjXzk3MmtwTmx6TkI2V0owQ0Z1R0JYNURoSVdTN21FMWVoLTc4dGd2WGMxTDRwRS05dzlaeGlsSWpUSHZRd0lzYVRHVXJMMXdwM2dFUFVPYVBOUGhKRmlOcDhsV3gwdmtTaWtYUnExcUEwQmNlaFE1TGhQYWJ5cVBaRVFzRXUydk85YnhUdHBkVzRKR2RzRXNyY0FoNll2eElPbnk3QkZYcmtVNkhvTFBHSE11bDNXaUQyV2FfQlJGeUJRa21wWU9qYl93bG1TUEhxLWtXMkI2TF9UVmJBRXN2djJ3dXVmbU9QbjNHd0pnY3FXY0x3eXp5NHBtVm1pbkgyd2d5My1TbnA4Vnl5WUVOQ1dHcUtnalhMZFVHc0pqV0VZTlR5dXR5TzJad2NuRDJtOHRUa3A4Z2s2Q3pwR2JXYjFPWFBuWVhHYjZVTFVSQ3REdVIzUlpJekdNUXJUdmNCdmZqWWdmTV9Yc21DckFWVGF1YW9obHp6dzBfdmlJZ2xyTlhDRFVwWk43NkJqNzNUZF8zRHFkN0VoZUFDZnMydnN3WGVHVi1uMXFvcFdBTGVzYUdzZ0kwS1d3RGZOTHR3N2c0cjFSMjVGeDMwQ0RwM0lXWE9NNE1IYjVSRG5jdHV3bkRiVXh5aU45a1RYUnVlTWI4QWl1bnY2dk5mU0FhM0lkMGJYTE1GT3oxU0tOd1JtT0FCN1F6U1BSV3o4bEUwZGNzbUpmRi10VHFKeE8zM1dPbzZQcDI5OGhlTHd1NHNKenVNRXJmMVpoTEcyeXNhZ1phbWk5NHEzNHJBWTUyZkN2Q3AzRHg2REZCZVVaMHgydmNGbkFzeHRBeWN6ckIzTUVCY3B4enY4eHlrME5xYTVKQ2t4cnloWm9fd0oya054X2JmRkJSeFc5RGRObUNQdUF5RU9kakRSWlZTckVaYWNDWDJpMHdFaUduazhzemtkZldfNnJBaDVNSWRLU3dTOUlKRVdtRENjZWNIOV9IZk9aYUZYYkFGSzNmM0ROLWh0OUZWcGFQZ255TGE3UDdfT3dXbFRsY3hqY1pzY2oxTWhPWkZIOUZueHVOMmJfUlVzZ3JmNTVLRWlXZGlLOTN5OElTNWRZYzI5TV9TQTR2ejFGcV9pWXZNTzY0akx4bGlJVGhVMmxVTF9FT2R0N1diUmRFOVRFSVpBVE1Bck9XdWU5NnRCTk5vVGdjSFpfR1U3MGlpODZaT0s0V1VUdzJvcnk0VXRVUkRxVEJoalY5UzliLUZzQW9WU1hpUkJGMm4yUTZSWFpyMG1GaTlpdENxbkxDV2ZnR2tBcEJ2WWlib2MzdmNDYWZrcXhsVlgyYzhyM1BCcnVPNHcxR1ZYV3BsMlNaeE52dnJkS01CMlZRNi11aDd4RlY5TnJkendqWVltajN3T0NFR21OZTJwQTItSEVMbGlVYk5OMVNxdDIxQjBJUDhvbXkwa3pXY1RzcTB4aE80bUlTbmNodFFqSnV2b2xSX1JDMUZEX3pTOEFyRG9pbElCQUhCWmlzbVE1eGVyQm5Sb3IzRHNrbUtYSm5pYWxsSWoxV3h6dWJ2RVVFQUtzS1BqZUxzNDk5cFl5S1YzNlY4alBMMDYyTjllYkl2aUo1ZmxLRncyUzRWcXVUQ2xZLVJRajZZQzNvbmdFZExqMVlBck1GYjM4UnRyU1NLdktTOGJWSnlBX21WZUZKSzY5aUh4WEQxa204QlhpV3FsbTdpU01lZkxYamh3eUZqWUFhM05MYng2LXJ3V0pLN2FtR3N2V1JSLXRkYmJDclhEN01GZEpJblJtaTV2VFRsSXZkZUowTk9UNG9wTUxURXJmbTFxVnpnUUNjR2FyeXpxMVhGME5HVnRCR20xd3dQN3lvb1g2UVItMG9lX0hEalVYdWhKZTlqY05ZWkFHMV9mUXVOSG5qa3kycDcxNEpzdFNWVTgwYXNYRnRaX3lOdTdsWHlRSFl5cmpLQVlBdExaN3hNVWd5VUplb2s2ZmxUVVdwdmZvM0h4X1U1aXpmUFlMWmNyR1d4cEtaWHh4Y25tOTcwaG9ramNKVnFoakZPQjkxLURwaDlTRzZlLWhSS0J4eG5lbXQ1UllGdm1mbzZsbDZITWNPYjduN0dYcFdLb2ZpUkFTZ21uaUJLYXQ3Z2dUc095a3lSdTdUaUtEaGp6dmhnTnlJWnJWSF9scHFhcmZ3c3dhMFhQcTFCUEpKSHFDeXRETG8wS05xdXI3RU10bnVWSTF1bXNERFI4U2FyYWVZcUpoSmZwOU5xak4tTUZDTFZzaGEyc2RNR1FlaU5zaWZudFpscGRxOFRpUnlXVVVBeXJFWnpiUGthTURUWTVRT0FGckRGbE5aTUNNRzZzVjBXd3BvOUoxVHJ6REVLakhfRXE5MkoyblRHMWlGZkdUSVFrM0xBR05pWUlaT2JjN0FQcHlXcDJzeGFTR1pQd3dXX0d0ZkI3NU83QUJxaEZ3RDdCbDJ0VlNZWFFvSF9pTzVlSEUwUnJWV1ZCNlgxSGlaQTRBNml6Nmd0VXl6NWlsekVReWtyWGJEWWt5MVMxZERDbkpMbllhZXhoM0dKZHo3dk1GVlNPT3Zib1ZSRWJpRWNmLWRpUEhkWllwV2xoeHpsbU11MXRxUWtHaFBHdGlKV096eThHaXdXcF9GRmNPSkpGRjkzLVdfZDJpMUhpbm1oa2tmdmc5WF9VdzJIU04tUTJDTG4tQl9TUC1fdmo3ZF9rN09hTzRtRkhQNzRLNGs5NXlBeXZDdzNPdElqMHByMy1ha1JJeVQxU00ta1pzdW1OMjNzcktCMllPWGNJZkdDc3hkcElWT1lFZmw0bFUyZkF0SjBuR3VwWjN2S0VYVTJxZXhDZERxYlZBTXRfYk16d194Zm0wT3Axd0hyU29tVW9NVk5PUUt2V2Q5b1BwYnRkY3VKZVoyWk9uU0F3YlBvbjA3NVU0QlBWczBZbHNlbDhlQ1FqTUNPT2VPZElYNC1QMWxFcE1MSEtWcHRsSjQzc0pDLXNzT1RZX2ZsOWZIM3dyRmlLbFAtb2JfWEV1Z0pqTkZvNFp0cnoxN2lhYkx0U1kxcHIySmdmY1JHZDFZNkpaYTJzTWx6Rnh5SkJCYVAyYUlvdE9McU9tcm8tR0ZlUzBzTk1QUWF4azU5eUhQb3lCLUNQUy02STJIdkQyb1JPRUppbUpvSzlBUDZyS1loN0RrTkhEWGhMRVY1STZJdU4yMWdOVFd0M3RsbjlZLXZYY3laVTlIdU54czliSmI2dlZJcUlWVG1RbEFkUW4zREVWQ1U4OHFtMXNXUkMzZjRndjlid1BUTXdnQ1loWHdEcTFlSUpCSXMwMk1XMnZEUTRGZGFERlhjek13Xy1UVlI0VmZWVzVtZF9oQnJDRUEzbktoWEQyV3R3bnVmZV9kRzJZM2t2M3I1VmotQk5wZElIcVpSUXBLcHo2UDR3TWFjaEhTclZxX0w0YmllU0t0Vk9YWWJKXzFWTDlqNjg4WjZwTGxsakJCTVdCWGpmeUVSNjFKMTVlWmRNVDYzTUhQMmduYk9GTWZaMXN2b0VUcTBWNzg1MjByUkNVYzctM0ZOVk9KR3JhbFcwM0xqcXo4eUYzbkZ6YWhQRE05d1FKRUZiZmtYODRNeWFhdGNuSnBFcHduMVBWWGJPeVlEbUdyM0VURDRiSGRPamN4MnpaeWlOWXloQXNidEdDbTFubzg3OUt4MlM5akhmYnlkd2pwd0xhUHA1cDFzTXhXMUNEX0hfUUdhQTNjSThCZDhBMmN4UUgzd0lyeGNaWnpGMUl2TXdIeFhjZmFfOHNZdjJkR3ZuSE5BdnAzYWI0VVNRWjN5UVFibVRjbWFOSDlRdFpkM3J1T210bGVxT1k1eVNLTWtUeWJyZXhvS0xvZ196X0VPdVNpcFVNV2ZsY0M4cC03T09Pa0pZMlFSbjR0anVKXzhxM2ZUNHVVYVJ2YUVSZFF6U29XbWFWcWkxYzhqSFd2bENZeGtlTVRmSGFvckdzWEFKM28tZEFET0NoOHp6dGxqaVF5bEJVSU1Pa0duVXhoMUMzYjA5U0Zfd0dvY3diTWFOZFctYkhKcHN2cjUzSVVrOFpxaFJWNHRPQ19CbXI5UnNhWkJtTjZNdEFuRjg0U1hLdklySER5cFJOdzl5TUtydWFoVFFfT2xEdUROWWJRbjBVMXQyak1peXNJTmhtczVubGNac253RFQ0SGU0bGluT2gtcnJHdGxiWE5PT1JnWThSWG5vOW9FQ1I3U0k4bk5qOFh2QmJwZjVGNmRtaldOR1VyMmpqemJWWjY5cEFIMTd1WjBQdURSS2NjTFBIandnYVNtN2VtZFhKOU1aU2lENDBxMzlGN09nYzd4aEJzZHcwTEd2M0pGNzNrdkY5U3pUMGEtX2JLMExWYlRLM2k2T1lxdUZlR0k3OV9EREw2MGVUaUtGU1hPdEFZWWFkWEcyT2ZvNXJkdlhpZ1dWalZDQ0lWckFSWjdDY3lBdFR5T3dmeFdjb0QxQVF0aUhMYlM0ZVBTcXhyRnZDTVJ4dmNRV3JYaEFqdHlqREpFeGpsUUtDSnZiWWNFRW1wYTg0RGpuZVh2U21fVFNzU3NNbnRnRFc0YmMwQlhudEhsWGU5VTVOYkNFNjFrYUQ1RHpid2NLekJsbDBmT0lFY1BSRFAtVThEVkJNY3gxdldUYmpFQ0dvWjFndm1nOW5rbGVpRTVjbERGWG1nS1VKYTNaMlJva0l0Ym9qU24zckhyTWlEMktteWtLNjJaTXRvR1VTSlplWDNVeVk1dGFPSVNIRFNiWm00bG5FNE13M01IcHBuZUpNbmZ5Yko3TnFSeWpaNnBJSDBqYUtvb2c2Ny1jTVRXS0RHdEllNWJISnR5dU5iNUV6aFRfd3VBSG1PNHRNV25ITTEtRm1rQnBmOXlsQmRDcWd6Q3B4UmJiN3QwU2NMWW0tcVpIblA1SkRKMEFPR2RpSHFBaGlTcG1lUW15NnMydnhrck5zOGVEWEt5S3lFRWQ5bXFWbFY1aGEwQW5OYklOWDN2djVrc011dm1penJMNURKUm45MXJDcGtrQUh1dFFhRkxEbHVOVmZmYTRQQjVub1FwN2RJSjMtbHNwbGJIb2tRa2ZSUlRveGZmMU9RQXdvdHJHMi1lcUxqenJRREVsaXN1V0FjMzhKcFpJSnVXTGgtcEZZMDh1NkdLZVZwTnE4ek9KeXM4WlV0WXVrVTg5bDNkanE5REdpSVNaSlkxTTFOWVJRVGJkaVZtdzBKYkE2SVNhTU9mUjRUdjU1N253WnZYcU9Ua3FVU0xPRG03RjdwcklxMk1WOWc2UHJmREpOSndwZFhxVjUxbDNlNUdKMmQzRUx5ZE9SQlEzMnFLLTRQTGdGLV9uWEFBZVg0SlpuOVY1QmdQamVBR0Vnejk2Y1cxeTJfbXM3T3lhSUt6V3lZd0pSUW1tV1ZPUEw1Sm1wZm5iTGdpRGduMm9JUzAyTXlxV2ZtUTBFWW9hd2plSGRJUUxudkpaMHhhWmtjTkJ6U0xYTkZRU3JuaFNWbkZRZEZSWTlOOFRZRVVETXpqbzVsRWdHZUk4NUVhZEFwS0Jya1NRc2hHTEk0NGFodnRCQ2hDbmlGSzNoRXV0elM4dnVmVERVM2tzdWY5M2U0d3hKNUlfQlZrTlpQQi1wT3BiZ1J3cTJ1WFI1RnUxZ1JTeWVTREFyeFNwR3o2V0FZcWR2X0NROUR5alA5OU1zT0hLS0NSLXR5OXl4Z0RhcWhNMG1Ob082NjFYQmVtU29Zakt4T3EyRnhaaTgwdnZDZE56czdjWU91WnFGd0NKTWdVRWYzVmNJcVVnZmRyRTRQVHgtZVROS1FZTGF5US4xaU9LSTlUcGxVYV81SFRKUlVGUVFB"}'
    +    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLnNqNFpnV0lEQ1dDVUxOTVVJbk81Q0U4ZDFkWno4cndGczZpZ05US1hEMkZmMk9KaEFEeURkTkI5U0Nvak9hdjI1RVpzODZsTk9HX2o0VnpDQzlDRThGTzljUFVwSDJraGVEUnpydElpVWJBUjVGb3RILXZ0eWV1a3c5bnJsMVVFQ05kZ3E1T1FlMjdfOGNteDVkVWp3eGdCbDk4ZGhQLVNwUml3enZIbXAzQnA4dGUyLXFkR0JpZVZwMlF4UHdnY1doNEtzZEVEcXl4UExLLVZJNk4tZlBVZHBHMDM5dHU4RF9Sa2JYb2M0T1g4WUgxSjVhZEx4TXVsYV9YWC0yb3VtUG9xT3BoZ2hNSG43UllEOVNnSjI0Sng5QUlfUDNzYS1CX0w4anNfX1RfaEFySzJkMDZzd1A0MFJKZDJOYmFVY29tYk1YREZmNDN5QlpFZnc5VXk1QS5yTGNGWU9lVlJsUVpveUQyb25TeldBLjlzLWJla0FHVk54bmozV1hUNjlPUFQwNDZwSFZzanpvcGZ3dmJ5UHZYRncxWnIwWjVERmN1NlhBWmxjeG9LcmVqdlNtVU5uRjZ1Vy1ONHhoN1VHYXBGNXZ5RlVZZTZNejVNVGxRWThneTNwS0xmeWNmd2xqYnFGUDRUSmc0aV9jMDYxdnR2M1ZFQTB2M2tpVGRkLTQ2N3ZSS2o2a09vNnllNjRHS3NmWE9taGlROHA5Uk9zRjJHU1p4QUw0SWZNN0htdk1tUmJUWGhmcEN0SFRIalprSXpnRGktRXFEbk5oYXVlWGJ0NE9iNlk2aldKVmJZeUVwa3o3WVRJdWJsZjFiQlZVUi1jaUZKanItZDExWjBZOURTc0kwS3VnWF82LWhpZDNSTU9FMGpiOGQwaTJoVUdNZnNkQmtMTkptSGJpU0RiOWpTU0JnZGpsUkVkXzdnTnh6dDNja2tHZld3bzVCcDl3bzN6d09TSFpaSHU4SnBuX21WUmdIZEVFT0R2M1doMDBQVXpKSWJXZkU5S0swTUNTYUZQUXlhNWtyNUYyOGpqRkxiYkdaQl9QR2ZhTTNOSTNfOG55VXkwYzZwUUQ3QkhsZmRlOTU0X1lzRldsd21Gc2Y2Vkg2NE56dFFRcnRRY2dITlA1SGtUUjl0aGlsQldOWm44YUczbFJjRUlhWjh0XzVTN2tKcUplUVJvQ09qX2tTcHZud0pmSHRHMi1BTUlKa0dTVzNjdjY3MGtHYWhNYTUtLXA2NEc1NGNVNk9zZW5KalJTcVEydkFfLWZMcjNkb1JQOF9PU2QwOGZQUEpYTnFoR3RfblppODhwbVBQX0pwOEMydk52YkZOTmMyZU50NWlhZ1BRUHFEcUxYVHdVZDd1ckVjVzdzZmtMc0tBVUs1aGY4YWRpUDN4WGlxS2RqNHhDQmU3NmF4NzZEcmpHVTRMcWM0czU3enh6ZEhhZGNtRERrYUhGc2FWVW5SUEFXUnpQMUxRaFdESEVzZl83Q3RwMTA3RTJnd3hoSm5ZRVBEYUlNT3FramExWGFtdkphRDdSWHZ2S3FOd0tZTS13N2QwNUpad0lwU0d4VEhPN1JiMFljdEFJQVdiOWlhcFRjU1hhcDI0YjhjcUhLcHpRN0kwbUJaZkUwZV9PWno1bjJWa2RWeU9xeTNPel9iU3p1MkRDTUVHYUtJM0dMXzAxM25CaXRQVmhjWHctRWFQVFlUeG1GWjhsaFdjVWFaZDNUOG16UFNtenhpQXFzRHk1cndSUzBDTTFQOHE2QW5ZWDRjS3VtMXU3UFgxMUN4eGRkZEMyNGg3bTBLRTNXWFAzRHEyeUwyaVptTmRtSWFtc3FWa05PcHk2N2JoUFdLVXN4TS1GMGk4dHBpOU0xSUFReEhBV1hqbUc1TURrRmhYZzBCcUxFRVduWFJtMnBMbWxEcFZ3YVRCUnJ2RWlESmk5Snp2eDdWNzV1anBGendVUHJEaldXLU5YZWdHblBlZ2loYUdwMzBYdERGQ09JdVBPVWZaYU9LTjdGa0ljRW1nODFpM25vV21OSUVRcWxvWDJJUHFVVkw1R3AtbkdvYVRzdEJlM3FQNG90QTJ1MXZ3TmZqZ1pJbHlrWnN1clN6ODhRVnA3cEc5OUh0X2RjYWtzOUhqSENjUktJcXJRWUZfMTNaeTgtclE0Ym1xZmNBbklUZ0lLMndmVWxkUnFSYnY0ek1aZVFuVXhNaEpMVUIwNzZWRC1hSUpFcVp2cUJaZi1fN2ZwLTZaTFhSWDh2VERVSnVHM1NjbnVLOENFZzdnQjkyRGRjRTRibnNPdGdVbDBxQTcyblFkTWxJNmVVczdXRmpaUHAxczE3RVRub0dpcEhxel9Ubml6eFBKbFBNc0lfNXdZcEJHZk9vSjFNVGFOTzBYTEE1TlR5OUhwb3RPRXlWMWQ0blcyam5zTFFtQWNILTFrUmdLVHR6d3lmY1VJWlQxTE9Sbm5uM0JGcE1CX1BFVFRkajAxZGRnZnZJekw3aWROVGpPdmo2aFNnSzBnNjVIa3RkY0JPclFrZnE5ZF9NSWZGNkdMMDBuYjJNdDZobkxFYUw4UjBNdklsQmJUX1ptVEIyVVFkU3J1RDhIR3pQSWp0NDV3SlQxNENnM1FFSDJGZlAzVzNGX0MtdV9sVzNab3ZmN1hwcjQzVjFWVlg5RnJDTzdhZnZqazVPdEhhMmVHQWxGX3hmNWdaQ2ozUWZBNGR3RndtaDRXNmkwOHUyYlNqYmRtZ3BhaVpWaVhabkZLbi1IZnFVcmRJZTRYTnk1TDFDSUpGQzM4eDBpaHEzOE9KZkJSVzBPOXA4SURjZG9KUmRwUVU5SHhVUC1aN3ZDcmFGNjVFRzFDNjVwN1ZWZzhZREdJM1JQUk9sV2ZtVGRENmg3ZjM5VkZLbVR3OWlsSFZfcFBkcktROGUtNHBJcVd4MWUtTUtEYnZVTTZHeUJJQ1RULXA5VVRWd3lNSlI0dTlzd3JqQlRhMXQ5TXZ4R3ZpQXoyS0ktcDlPc2R4UVJlS21hS3pGa18yRlNVR3BKR3BjTFNfMUcyS0VHMjczVUZ3bGNUcWVXajZRUDVONDBJUzFGcGN4SGhBMHZ6R0FJMi14X1lEOHZnTHJHdnZiX3dRaEpHREFzQmozaDlaV0QtVmQwMUUzQ3dITllUSGZETEZ4SjR2M1VRWUJQNG4yUTdDOHgyTk5BekFjVjF1N1RUMjltQ2loS2R3WkIzbmE3QjcxT3dkeWZwckZOQUhYd2xpMWZkNVRxYjRwM3FsSl9LYmxaSmliTTZOLXJXU1h5RmVwWGp3ZEdUYjNGOWRBV2tQTDNDejRjaWZ4TUROQ2ZkdWpjWEllaElYWm5hdG55SGtoRk5FV241SFMxRXJudEU5Vk5idDBGajdWclBhQlVqOHZLSVo5N1NIY010SkFHN21DS25sMWxPemd5WFlFSGQ4WkRIaGRPMVhvaUN4LWZmcWVvQThHRkJIWjhodVVNOW1SNnVZYUpTcEtBMnAzWmlVNTh4eW9QUGVMUmlLWjZfZ0ZSa0tuLURaWjhHbVU5NkhyVFVWc3RTUl9jRFBhZU9aNG9pdEx2UkNvS2o3b1ExZkdhU0xuWk03cTFkY1R0TGZFVHV2Rkg3NlZodnItSlpSX3Q0RzhwZ1J1Skg2cHBsRkRtLVo1bWJ0VERuWC1laHZNOXdCQ1VxS3hQblB1NDRUcFNCUDNYc0J5eU9aZ19fVmowbWZfbnMwUlJIQU9YQTFBU3BfbFc0QWg5UzZGLVVkSlF0cWJKNlJ1bWVTTGxpdzc0WDE1UkF0S0VPekdRQXZNTVZTOEJBSDNIcFN0NHBaSmUwOUpZbFJFY3NEbUo5Zlc4U25vZVltSlRBX0xVVkZTX3J4a1dpamo4SUlhQTNDZXl1TUJwc3pvaFZBbUp5YkpCODloQjg5R0VDLXVnVnpQeTJieFB6RjlybjdjcXlNMVh6YkxxRjZjR2ZxWUhYRnJBNlVFaEZweVhQejlkdUFUSGZhbTM3Rm53R1RaMi1DVDhpcHlvMEZqb0Q2X1UwSFhDbURMXy1rTURxOHF1WDdGOVI0T2l2bFBhbGNpZ3pBWDItVUV3aS1OTVF5YXlyNFhlaFgxbWVvWDR5NHVLMnl4bWp1d1ZTN1JwTEhJcWtVa2VWbTRSOTJ5MjN5eTNfSURtbmhHbnY2dm11SnlFaFZLbzlQS3pzbjlBSGxyNDk1c2JxQ1dPcy1HN3BWYzRIVEUyakxIYUZsdC1lS0tuZV9ldG14dlJ6QVVDdzFtWm9RWHpqQkxMRTVqS0U2djlkdnNzRVh5cUlSRWpaRUtyQTRTZXlMaXEwdmo3STJEMFVaRXpWZ2IzWVBQUE9XcWlyY1BjcHN4Ums0VkVZbEFJakluMEE1STc2bWFMLWlhTGtXbXkyakhuZHcyTnlKOWJubGlLQUxqTFJGaUJIeFlJei1mUFdwbVpPRVRZMFZxWDZza2RlWVdfUE5yaTU2SmFYS3lzT3JsbVV3cWM2VGhWc0ZPcHU2bXluejRlcXVGZ3FwUm9SZEdVMDFhQ2RkeW9VVFFIemhBaEhEbi1vbWRkX3JvNXJwcTBOaGtpOFZFRHUtS3BDSjJ0cUhTbHJsRmpQcVc4TUZmLUxPaUk2UmVoY0hCTUMzeHRFRkgzZ3V1bHFhSjFuUGpCQUF5ZDdBNzhfZG14cXpyck9xZ01GbmJVRlBjN3J4V2NTQ0JLbV9YV0dFbXl6WXI0N2VuNHVaZ2hHVkFHX0hrVXA5dHdZTzZELXVranc3bmdHRDdtUTVGNmZNakU3VnBDWXk2NVQ1NHNNZGJBZTJQcTRiQXNCN1JBYlRVZ1E3VUtGUmJZZkNReERvZVJlNmotdjgwU1BocWk3MzRxRXk0bVVRZFNSdmEtcmd0azQ2aURjb1hiaHFTUkdoUVRtRGpNcTRRRE5fTG5MZ0lNYi1xUm1Cd2ZPOWhEbXNzNWNGT3VIbTZrNmFqbUZ1SFJfX0ltZENoMG5IdlYwcEw2SU1hdl8xT3FkUUJrRmpSSEhIUG9Mcm40TmNJM1ROQmM2a2FzOGR0aDN3NXd6M0w1dFpOZUhDd2dHVGtwb0dNUWxGV2xtOVF0cDB2azNiUFdRMjlrczRkWS1COFA1Tm9mRC1raHBIRnUwcTlTc1dMOGM5MllNM2MxZDFFS1I1M3ZaQU42am9pNUZ5MTlOSkEtTGdoV1JXVlM3dnA3M0JJa1JHXzlqU2ptUnN1aDlhZkkzQkxKSlVHTEE5eUZHRFFMOXhBWk94Wl82b09WcEx6TXk3YVpBSUg2LVd3SkoxTXY1RllBV3Y2a1FLLXNvLVhReTAwd1QyYzhGYk1iaGhnNjN5VU40UndvZy1lcTdjSlp4bjQyOXdRQUxXZUlEWkhXSkNwVnJBdzZiYWtLN0p0SlZwc2E0b3UtU3NhSGpxRWx0TTFKdlI2RnhPMkN3eXZnWVdWT1pOQ1N6ejl4SWlzcmRpbGdXYi03NGpPSTg3SDAtQzRaV0pHUmVEZ2p4MHJwdkd6dHhWWnRDVS13SHg0bEVybkJJTUQxeGlLZlVQT0ktTEg1ZkIzeHF2Nl9OdUMtSDFVUUdqVU8tcHpuNnZXT1NGaGNkMDZTSWFfRTdib0NNenQ0ZHBQZ2JPa25VZm5tYlBJWERpTUhLbHdjYm4xZE1hSVl0Wjc0QWg3b1ozSUlRLWMtaUF5di1zN3ZCRFMwZnFoS3JaeVdCVExrbG5WdU5iMEJLdkF3QVZoNXdJQVZSbmllZ1h5cUY2aEdIRlpCS3FhdW44UmJBQ2h0elpxNkhYandCTVFHRVVjMWhabE5RNzJNbmRKaXhTa1k1cGxPbWZmOEloWUV0OXV3SU1CdjFXcjZ3Mkg4b2YxekJHQll2bmcxRHRsT01LcndFNU1Kd2NaaUJkV2VrY09yeUpGaGxvNUNnU1N6bDVmYlBqT016WTN0RUlnTElkZ0tFbmI2R1hVUFFpZDdSMWYyNm1NaUZHbUNtdVFqeEtvR2dHTWJDT0pVM1kxQWVlQnZSUEtCaXIxUnM2VUNIUDVqSjRFcXhaaUw3NWVxbEZvUTJ2WjNyR2ktekhIY2w5N2ZCSjVFWlZzbnlSWFZhNUJ1QWNsbmZZSHZFb0M5RThYUEttVXQwTTEtbnZIR052Mi1XT0dUNU80NHQtZVlzXy1CdVJQSFdHOVZ0QTdvOE1WaVhDcHNaQXVVcjZsbjNwLVIxSHpkY0VPY0VSbk5neWZTZEpiejF5YnRmN3N3cUJ4WTNtR2pRNkVESlMteWh3RDJFUnJTZE9SV3oyd0lSMDBWb2FCdHBwdWE3VjV2MHd3Rl9wdkkzb1JfVjRncUNBV2RacEZwSTZRV19NdnprMEN5VHBsQndRZmdnV3pIZnBaZnBVZkxXcmlOaGJpTEJTdUo1OVZrdnh1d1NkenFiU3hzZzdpdmtUSm1aVGE3R3MteWczZmJqTXpRSjhLOWo2NVl3Ull5Vk1UdnNrT1RLOFlpMnVDUlZiT2xWUkNTUzNLcFFUTlNnTUdROXlnRkEtLVV0enl1bXBNdjdNQndvX1kyYnlXVnZmZUxpWk15NDZ3eVlyZHFnLTVFSS1YcVVvek5LUEctMERwZi1LQkJiVEpjRWFlUlZua0dxcENGYTZNSUFDWUswa2w2Tm5UbkhzaEJFX0FDQjMtLVZjamJDWjM1dTFxMEhSblNOSl83ODRLT1JrbWg3UGtzNHNTTGxlUUdZbE41SzM2cGtKeVBERWhCQjZPSjU4dzlKdWRlOHhMMkU0ZS1mVTUwYkloMlhmX3JDU29NWkRTUmRwVF9RbmVuTnRpeU5BaGRkbzM1ajQyUVN1ZmVXYUhyM2hsRkFmR1k5dGtKZ09FNUlycl9SUEFWMUJURTdqa0xjVF91cW43NzVWa1ZaNWpkZmVQc05kQ2ZOZG1feWZVWTlBYzNsOWZmWk9iYVhJZEpJUnhkbW1USXcyMFJSM2N2SFJZNWpFRUpueDVjOHRIUTY2RjA5YVVRWTZUQ0RpMXFyaU5KUXBDRDBuU2xYQjhaa3Rha2N0RDliTkhheVUzV1hYTVA2YlpGLXFrdmZpN3pVWWM0ODNsQWpKanJnZmtXWnRsZG5hckFzeXkxaEQ1a2Z3QXg4djJCSnFvVWF4OHk2Y0Zmc21nczZCcFo4WWU0TkJOdjk2SExfYThLR3RYXzJvdFl1SkFWNGo5T3NhTmFhODZPbGVteEpRelRFdU03Z1lRMExJdWd3bXN6dlJadTZOc3VmUUZBRmNJZDk0WHRLdG5ZX0Zkekp5Q0s0bjlJRV9yQy1VVEYzTDhNaV9PaWNrbzNpVGQxTTlEZ1MzUjdNSVlxZXBETUlQOWRVbFJlbjFzZWNrZm1PczNndHF2VDFtdlk0ZHVoM20ySE82b1FFZTMtTjktMllJdmRpc055Zjd5VXUzM2hpMThlUzVENUpZb052blpVNmZDMjdwS19yZXdtRXVncjBMZzFHYTV4bGZkcHhyQ0NKVmVWNnAyY1dLU0tCTkVUdy13WVNSUUJHUU82T2w0XzcwSUl1NkZDOTJvSUxONlZabjJlVkNRTzVZekdXQjVzVUJfRUtONWJ6Vmh5elJ2NGViaWlwTjNMNElrV09YdHE5NWtHUE9TdlVzTHVNN0VaYVlyTnRRWUg1T2ljZGF2OTFBZFRRWndMVmVDV1B1TGhWNi0yekNMd3NFbV9WM1A1MTBfeXpsSTkyNGFBRVd1SW9UY2U5blNJYXplNTJIa0dFMlVObTlua0lmZG0wOG5LUmpMRGlaSlYtMm5XNW04eFlXTTVxNUVsbUhiVlFjczdydUhGSmRzMFlxZTlSeGpSSFljemJiQ3NyTVhTMVpJLU80YmNDUTU0U3RrUmJiQVhzbUd1MkNwdkVHVGJFYnJZTDhsLTNKRVVWSkJwbzY2eTRSSGpDNWNTNFpPQW4wU1ZVcGk2cVBSNFdEWTZVUXdqYjRjRl91TVZUbGFhUzVPTS1lclJkYWVrMk9qTHNrWFVOeVVVYUxJUF9CeWdydGlzQTlBMDBxaVZSOWZIaU9WNEJhMmhTU0JwdmNVMnBxd0J0b3RQTXl5ZW5nb3U1UTFEUWRwZTBZdk8wVE1vVVo5dGpRQmJZTkJwTzF2bExTZ0lhZ241UkdiQjB1SS1iM1FYaVB4S29vaFEzdkVwVzhBTVpPTDhLWDFhSTRPUWl3SUoxenVtd0NhVnFaU0hiRHBvQW9DdHV3bm5oZmhjZ3RzajUwZ19fbklQY3hLaDBwZFItRDlpdFNFQ0FDY1kxSzJFem1DZUhsaUJlWWZnQnBuaEdIb0toWDlVRWY2bGlKRDlnOUYwTUJ4ZmRYZktEUW1RM2lkMkt2RVFJSkVtSnJvTFdXS3pwS1A0QURsVDZPdVI3SFNiOHp6ZHlhdm5CZms1RS0yNHZZNGpXM1dCakIzcEM3U1NqQlBlMWxiVklJQ05POEFWZE96NVpCVEdoU1JSTlVnUlZVT3JSeHg3WlBMcGJGcVJ3THF4QXNWeElIU3RrYUc2TXdZQWRXXzNfQkVtQVg2blpCdUFpTHNJTXFsenBVZk9tcXp2eVk1M2ZWOTB3Qkd5TU02NE1EbW9nRWxTYVBrMmY0UE9QOFBUb0d3eW5WVF8wU2RZY0FDZDRONjNTSXFkRzRWMkhnZ0J2RDd2a0d1Zk1pa0xqQ0VONkExZEE4U2NIUDN1LXg5aWZ3S2lIcV9WWWxyMHJKbVFVY2xWbkliV3lxTFVfWmNBcHY0QTJ3dnBZRTR3S1pjdC1jMkpvSmlBWmhUY3JtTmJ2bkc2T3NrU0MyMzR4WTFERWJSSlJ1eU1MUUdPUS12dWluTUUydF92VjNvOTYwd1V6TDF4bjBRa0xyV05pZDRVTXBxSjk4bWs4d2R3QmFDU3RiX2dBSTlnTHRrZE5ZcGl1QUtDNTdKVjUyZmE2SGxkdEZxcjFlck5YaUIyVXBwdGVqS0VhTUVYaElYdlRNLVdWZU9HQmJka2oyMGdqOW5LUUl3YU1GOTN2U1JpY0lGNnpyd19PT2tDOERRcEdvTzZCSHZWRnh0MFE1VlgtZDNZcGNyeGdjckJGSWVVaFFaS3VuWXMyVllDSzZoX3p4THQtUURnVzk5QW9FZmhTaE5YOUtNWGo2VUIwX3F1WGU5VFhlb25aT1VQVS1hN0xQRHNmVmMxUmYtQlp5RWY0eFhlZDExY21MRjlMc3k0MFZRY3JkSHdrWGNqT3Y4RnFFUS1PQlhKSHFMcmEzVVpHYklMUWhqMm1TM295dmdFTjVCeHhRQWxrWDh6bjJyNE5vVktMSXBJa2JqMXk4bVdSVXh2TGRYLWk5OXBDbF8yTXNaM1JuUjRzSlhwS2swdk9kSDhoVWhlY0hJWVAxTGFzOF9Ydzd6QThZUHF2WTFUVjdwTnJEVjdOeGV1WW5oX3pwYWozUXprSVFMSXBSMUlNRm9Jc1RjWEdSdnhEYktIUklqdk1sY0k4V0xBU2lYc2hmVzY0Ym02RTVwbTJhYjdiNGlsSXlWbUNBX1d1MDRTRHluZ1gyWDhhSFhybTZVMzBzaVZ1dEFoMDBSZXBQaEE1RDZpRGpkZUhKTHFBQ0l0cDM4VmlVZkZ5ZWZZSXBNcV8wTmlTOEFRQVlLWV9tRjk5YmVmem9sZS1lU2NZcU0xcEU0dFNjT29rc0lUajdaQVloVkhfUlJMZHBQamFVUjdxdWRMSW9sUnNkRHNEampzeWlYMk5XT0NvTGRTVjhXLU00SnF4aWMyczZOQWxWVzk3TWQ1RXhCeWxYMjJOT2x1T1BOZkltaEVidE91Wjc1TjNmT2ZYQWdGTW1XOVNVT0JrZkdNeEV2YW51d3FqdEJyenF1S0NpeW41ZFpqaHoyLTVheml2aS1PeWJGb01yZzkwNVM5cUJxOU1pWlg1Y2xTanlzdUxLSHZQdGZCbmdpMVc0YWdOQXhVOG5wQVc2ZDRYMFpoQnU3V3RaTU5kXzhTRW5FbDF3VEN1SXg3V3BQaTdmTlhpLS10ck84TGlyTUEzbl9hTHViR0ZFd25BbUpEelJGaWQ4bWliZjBVZjdVa0lDMGVOUXVlX0MwNU80MnRmekozWnhwYWdOZXFNTmZ5UDhwUy1yUEdHdjR6RnI2Y2RGRUcwVThLTEFfX1dBSVJzZWlqNGpRcDNzQ2k0UF9YMHJRNTBtMkQ4RlppMHNGRVFlNzFKWm1NTXBfUTc2ajRGTDVQVk5GUE1OWXh3MUprUmJRamxiaDNYSEtCbjFvc1Uza2RnSnpPSkFmMXFQOHBpdWhFTk5NQUMzVnlkSXRsdU01bEJJQUl2SE44STE1T212VmIzNHA0WEVYOURhOXZMQ05oaTdfZGs3UFpzdElFTm1UdzNxZ2M4MVVyejA4OUJXNml1b0ZwNTdKMkpqelpHZ2xiM3N3aHN4SDhkV2JyQ19lWEZWWXVhM29LTXlzbjhHVmdYbjdlcVNUMXpCZmprdS5nZUlRalMwX3h2cmFSbnJlWEVuV1NB"}'
         headers:
           Accept:
           - application/json
    @@ -172,36 +144,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/restore?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/restore?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keybak4e00e7f/252e43d143034451a10ef1cf58232f22","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pkXY-xGyUuM6oSR5nEhe0fGwTP-iD35yrn97GjrlZFGdX2SxjOul3-A-R1S2EdC_SHtwIHB33St_4xRONWmoYKgIdIA5nXcDIOR0cOhnQPamhhDsOX6nftguONlhZoXdJjOlNZYGVnytviwFWTlRiDCIGDT-fTO25z7tkh3BnJrgx1aHdjr3UcoCGqyKD_C4IPB5hYYRejZZ8cYg5EZws67P0V7yd_lI4olXYG2bQQkmlLFQrYakFFuwAffbEuclKrh-Zt0qOjrzleadd6KMAp6-cKijgNa6wAf8vIH6ZiiT5DWqSCGNyLX_0iTcCo1zuxna-wZHJ1mLMiJ4BDCRoQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676603,"updated":1575676603,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keybak4e00e7f/885658852c004cdaa899feb1cba63347","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ru4bFzw8tzDgCprLu2lRGNRxR7NVQ80dQI3xbHIk_iYsy4heBAc13nhO-CxfT4CG43Gc9QhJxD8VejR861iH1pGiWJQrvhOBiY-a7zxmL97hWszrHrLua4-080GpGLwtWEH-haXQ1LjrFS5GpyXwl2SYlas7IDe4xlfHa-MX7-fejQ8G9gC6aFQr-mKmChop-fMUxYGLDzn_BjdgpTgEZ9WC6WEcLRPr2E8SFOBXwUzwsaVOeiRbFfYiGuScPju3D4ac6WDSl7dPg0xAh5By-qhrkY8aKBij0AAW5vqh4bSU6_1oOVApNmd4YAC_mpB_FIdp3U5dQ8S1kC4pxFOBrw","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '660'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:43 GMT
    +      date: Thu, 05 Mar 2020 23:46:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - isbiaqr33kjztaqx2a64cxy2.vault.azure.net
    -        - /keys/restore
    -        - api-version=7.0
    -        - ''
    +    url: https://dzvo3jlktex3pnpmjy2u3wvz.vault.azure.net/keys/restore?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_key_crud_operations.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_key_crud_operations.yaml
    index 0f093423ce9e..4084bddd73a1 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_key_crud_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_key_crud_operations.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crud-ec-key/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-ec-key/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:45 GMT
    +      date: Thu, 05 Mar 2020 23:16:27 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,24 +29,17 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /keys/crud-ec-key/create
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/keys/crud-ec-key/create?api-version=7.1-preview
     - request:
    -    body: '{"attributes": {"enabled": true}, "tags": {"test name": "CreateECKeyTest",
    -      "purpose": "unit test"}, "kty": "EC-HSM"}'
    +    body: '{"kty": "EC-HSM", "attributes": {"enabled": true}, "tags": {"purpose":
    +      "unit test", "test name": "CreateECKeyTest"}}'
         headers:
           Accept:
           - application/json
    @@ -55,41 +48,34 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crud-ec-key/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-ec-key/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-ec-key/067964ba3085454ab49798508b1851e8","kty":"EC-HSM","key_ops":["sign","verify"],"crv":"P-256","x":"zrJXHjW57l4ndnE1Wot3S91wD7CtmoYE2SO9G26x4HY","y":"dzYsOwzatknpD4I2wcbEAGW_YP71hSx4UNSWBItQsJE"},"attributes":{"enabled":true,"created":1575676606,"updated":1575676606,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"test
    -        name":"CreateECKeyTest","purpose":"unit test"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-ec-key/396d4ffd0b844530bf475bdfb553e5b7","kty":"EC-HSM","key_ops":["sign","verify"],"crv":"P-256","x":"4SaLUMaUrvT7BZ_V5b8GWGDX8UvjrebpeJjC5VgG4Hc","y":"8AVhCW8KkWdhRxLuhuzedQtXi3hWgDCKxxjmK_NRA0g"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"purpose":"unit
    +        test","test name":"CreateECKeyTest"}}'
         headers:
           cache-control: no-cache
           content-length: '446'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:46 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /keys/crud-ec-key/create
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/keys/crud-ec-key/create?api-version=7.1-preview
     - request:
    -    body: '{"crv": "P-256", "kty": "EC"}'
    +    body: '{"kty": "EC", "crv": "P-256"}'
         headers:
           Accept:
           - application/json
    @@ -98,47 +84,40 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crud-P-256-ec-key/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-P-256-ec-key/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-P-256-ec-key/8d635d1711ca456a9c273717a484bf11","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"iHNblnHSU9rfPFqp_Go5YsiEDZcC1-SFpCKEfJBsN_0","y":"Xa-i_EtmI7Io6GdXap56ujmLOp7o9-8M6xClkRwCrCE"},"attributes":{"enabled":true,"created":1575676606,"updated":1575676606,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-P-256-ec-key/6f6430a3ba53434f945baf37d26735ac","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"gi2Zi6a8T9LvyAod1uAdiO0IDzlvJdFtCtxcq17U8Uk","y":"QUEVBBTMY2H0iz3twnjTE_xWkTALR4XKYmdF6YYjKPE"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '387'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:46 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /keys/crud-P-256-ec-key/create
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/keys/crud-P-256-ec-key/create?api-version=7.1-preview
     - request:
    -    body: '{"key": {"key_ops": ["encrypt", "decrypt", "sign", "verify", "wrapKey",
    -      "unwrapKey"], "n": "AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU",
    -      "qi": "AJ_nrkLpK8BPzVeARkvSHQyKwMWZ-a8CD95qsKfn0dOZAvXY-2xhQYTEwbED-0bpTNEKbIpA-ZkaHygmnzJkNbbFAnb9pkkzU8ZQqDP3JNgMfVIroWx58Oth9nJza2j7i-MkPRCUPEq3Ao0J52z7WJIiLji8TTVYW_NaiM1oxzsH",
    -      "e": "AQAB", "q": "AMPcZrZBqbc82DO8Q5zTT8ZXRGWrW36KktMllaIk1W2RHnRiQiW0jBWmcCgqUcQNHa1LwumjyNqwx28QBS37BTvG7ULGUoio6LrOeoiBGEMj-U19sX6m37plEhj5Mak7j3OPPY_T9rohjTW5aGGg9YSwq4jdz0RrmBX00ofYOjI3",
    +    body: '{"key": {"kty": "RSA", "key_ops": ["encrypt", "decrypt", "sign", "verify",
    +      "wrapKey", "unwrapKey"], "n": "AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU",
    +      "e": "AQAB", "d": "Ynx9JGaBSP4iUsf6ZJ6opantRNdcdmzaQrKbZg6ZQE8Ohi1FYabJWvaoPSE-CiJEsDzShXZHMhUHN4X7Bn8BXaGQhK3p9HXgiwQKmix7oAJTu4ElUIyd8UC3UWHSZr40el4PaQD-HYu_eMzCXus34MnRiNbh_BUWm6T-Eidhk9d3kNIyaSi9YNDQHW6tjWrEhhq63O7JU1j9ZonFChZxpKk20jdkQKQURVAdpOdL-5j4I70ZxFuU6wHZj8DS8oRQfwGOvZKbgYDb5jgf3UNL_7eACqq92XPVX56vm7iKbqeyjCqAIx5y3hrSRIJtZlWCwjYnYQGd4unxDLi8wmJWSQ",
           "dp": "AMmhWb5yZcu6vJr8xJZ-t0_likxJRUMZAtEULaWZt2DgODj4y9JrZDJP6mvckzhQP0WXk2NuWbU2HR5pUeCN2wieG1B76VKoH76vfnaJDqT1NuJVBcP2SLHog3ffwZtMME5zjfygchG3kihqOSpwTQ9ETAqAJTkRC38fEhwAz_Cp",
    -      "kty": "RSA", "p": "ANHerI1o3dLB_VLVmZZVss8VZSYN5SaeQ_0qhfOSgOFwj__waCFmy2EG7l6l6f_Z-Y0L7Mn_LNov68lyWSFa2EuQUeVj4UoFHc5Di8ZUGiSsTwFM-XMtNuv8HmGgDYLL5BIJD3eTz71LdgW-Ez38OZH34b7VeG8zfeUDb8Hi30zz",
    -      "d": "Ynx9JGaBSP4iUsf6ZJ6opantRNdcdmzaQrKbZg6ZQE8Ohi1FYabJWvaoPSE-CiJEsDzShXZHMhUHN4X7Bn8BXaGQhK3p9HXgiwQKmix7oAJTu4ElUIyd8UC3UWHSZr40el4PaQD-HYu_eMzCXus34MnRiNbh_BUWm6T-Eidhk9d3kNIyaSi9YNDQHW6tjWrEhhq63O7JU1j9ZonFChZxpKk20jdkQKQURVAdpOdL-5j4I70ZxFuU6wHZj8DS8oRQfwGOvZKbgYDb5jgf3UNL_7eACqq92XPVX56vm7iKbqeyjCqAIx5y3hrSRIJtZlWCwjYnYQGd4unxDLi8wmJWSQ",
    -      "dq": "AKC9TAo9n2RDaggjdLXK8kiLrBVoaWFTpqXkzYXRhtsx4vWPAkxhfSnze05rVMl6HiXv7FnE0f0wYawzUJzoyuXBH0zS6D9BqCZPeF543AmWB27iPf38Q9Z8Rjr6oBgMSnGDV_mm8nDVQkeaDyE4cOZh-5UKvKShTKKQVwunmDNH"}}'
    +      "dq": "AKC9TAo9n2RDaggjdLXK8kiLrBVoaWFTpqXkzYXRhtsx4vWPAkxhfSnze05rVMl6HiXv7FnE0f0wYawzUJzoyuXBH0zS6D9BqCZPeF543AmWB27iPf38Q9Z8Rjr6oBgMSnGDV_mm8nDVQkeaDyE4cOZh-5UKvKShTKKQVwunmDNH",
    +      "qi": "AJ_nrkLpK8BPzVeARkvSHQyKwMWZ-a8CD95qsKfn0dOZAvXY-2xhQYTEwbED-0bpTNEKbIpA-ZkaHygmnzJkNbbFAnb9pkkzU8ZQqDP3JNgMfVIroWx58Oth9nJza2j7i-MkPRCUPEq3Ao0J52z7WJIiLji8TTVYW_NaiM1oxzsH",
    +      "p": "ANHerI1o3dLB_VLVmZZVss8VZSYN5SaeQ_0qhfOSgOFwj__waCFmy2EG7l6l6f_Z-Y0L7Mn_LNov68lyWSFa2EuQUeVj4UoFHc5Di8ZUGiSsTwFM-XMtNuv8HmGgDYLL5BIJD3eTz71LdgW-Ez38OZH34b7VeG8zfeUDb8Hi30zz",
    +      "q": "AMPcZrZBqbc82DO8Q5zTT8ZXRGWrW36KktMllaIk1W2RHnRiQiW0jBWmcCgqUcQNHa1LwumjyNqwx28QBS37BTvG7ULGUoio6LrOeoiBGEMj-U19sX6m37plEhj5Mak7j3OPPY_T9rohjTW5aGGg9YSwq4jdz0RrmBX00ofYOjI3"}}'
         headers:
           Accept:
           - application/json
    @@ -147,42 +126,35 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/keys/import-test-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/import-test-key?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/import-test-key/e106a1c7a10440eba8d76419961c7b35","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB"},"attributes":{"enabled":true,"created":1575676606,"updated":1575676606,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/import-test-key/a1acd44f80bf474e971ea9b1d1f5aaaa","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '675'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:46 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /keys/import-test-key
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/keys/import-test-key?api-version=7.1-preview
     - request:
    -    body: '{"key_ops": ["encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey"],
    -      "key_size": 2048, "tags": {"test name ": "CreateRSAKeyTest", "purpose": "unit
    -      test"}, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 2048, "key_ops": ["encrypt", "decrypt", "sign",
    +      "verify", "wrapKey", "unwrapKey"], "tags": {"purpose": "unit test", "test name
    +      ": "CreateRSAKeyTest"}}'
         headers:
           Accept:
           - application/json
    @@ -191,117 +163,96 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/b6a4bd0687a44b26a90ba5086690b9ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vMspU85wAUW-i4tBXjy3K-tRNM1e6kEvSSASR1ghV-Q4YCl8TOdWAX0oIHFYrM9CIeDMYQ-0FBM-bPoRsW_-H8iUeLAe8rFdukwlll6SUKTtupwSjHDvHMzZpOaeg0PmAjMhLzoX-o9KYjWRvOfibNwPtQ3YfWVHbVt-1sEoVJ08XEn5KjT96qN9ziMCd-KmABSiziYOU__CnXeR2ZS68q_zBiCCKrOT0hiXBTvwPpU2IosF2JFrZp8Ugp6ABterxOVJbJOAl5I4x4Uy7-7ilTrnqRu-OPFxySseVdeRL0GeYFoGaiOroS3w_o2TgfXHwhefNywbjCVFUWrx6Bon1w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676606,"updated":1575676606,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"test
    -        name ":"CreateRSAKeyTest","purpose":"unit test"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/cd8cf848b2b64bbeaf21419185b10750","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lgpdaFiutgdu1fPFpPDY4frbjnZO0Og10Wifbhz5jcIj3NUs7zeJlvvflHCT2Oezzr3y0J9_10V5Yf8cZs7ak77NrEZ-Bua1Ra16mhi2I2JtEHoAXH2dmaR2HFQ1cjUVcpsv-5zYtzjDCsPajqr68fnNLgjlHgcFRf7ltQre-pzspkpljVIdMj7FFaAbWs4MruBqWiqSROjbXGrPHAgNG3vYMfWq25hPWqpkgi7GBJRa46GiuwWeX5-Qpd7ewUX2GQXD6mA6Ze-1fjGNivtdRpfCpHveFK7YzMYfp0hMXOKHnmp-2TrdBCIej0E3mKbFYNJXWFprAQIuCZjv1oxB_Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"purpose":"unit
    +        test","test name ":"CreateRSAKeyTest"}}'
         headers:
           cache-control: no-cache
           content-length: '734'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:46 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /keys/crud-rsa-key/create
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/keys/crud-rsa-key/create?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/b6a4bd0687a44b26a90ba5086690b9ee?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/cd8cf848b2b64bbeaf21419185b10750?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/b6a4bd0687a44b26a90ba5086690b9ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vMspU85wAUW-i4tBXjy3K-tRNM1e6kEvSSASR1ghV-Q4YCl8TOdWAX0oIHFYrM9CIeDMYQ-0FBM-bPoRsW_-H8iUeLAe8rFdukwlll6SUKTtupwSjHDvHMzZpOaeg0PmAjMhLzoX-o9KYjWRvOfibNwPtQ3YfWVHbVt-1sEoVJ08XEn5KjT96qN9ziMCd-KmABSiziYOU__CnXeR2ZS68q_zBiCCKrOT0hiXBTvwPpU2IosF2JFrZp8Ugp6ABterxOVJbJOAl5I4x4Uy7-7ilTrnqRu-OPFxySseVdeRL0GeYFoGaiOroS3w_o2TgfXHwhefNywbjCVFUWrx6Bon1w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676606,"updated":1575676606,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"test
    -        name ":"CreateRSAKeyTest","purpose":"unit test"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/cd8cf848b2b64bbeaf21419185b10750","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lgpdaFiutgdu1fPFpPDY4frbjnZO0Og10Wifbhz5jcIj3NUs7zeJlvvflHCT2Oezzr3y0J9_10V5Yf8cZs7ak77NrEZ-Bua1Ra16mhi2I2JtEHoAXH2dmaR2HFQ1cjUVcpsv-5zYtzjDCsPajqr68fnNLgjlHgcFRf7ltQre-pzspkpljVIdMj7FFaAbWs4MruBqWiqSROjbXGrPHAgNG3vYMfWq25hPWqpkgi7GBJRa46GiuwWeX5-Qpd7ewUX2GQXD6mA6Ze-1fjGNivtdRpfCpHveFK7YzMYfp0hMXOKHnmp-2TrdBCIej0E3mKbFYNJXWFprAQIuCZjv1oxB_Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"purpose":"unit
    +        test","test name ":"CreateRSAKeyTest"}}'
         headers:
           cache-control: no-cache
           content-length: '734'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:46 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /keys/crud-rsa-key/b6a4bd0687a44b26a90ba5086690b9ee
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/keys/crud-rsa-key/cd8cf848b2b64bbeaf21419185b10750?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/b6a4bd0687a44b26a90ba5086690b9ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vMspU85wAUW-i4tBXjy3K-tRNM1e6kEvSSASR1ghV-Q4YCl8TOdWAX0oIHFYrM9CIeDMYQ-0FBM-bPoRsW_-H8iUeLAe8rFdukwlll6SUKTtupwSjHDvHMzZpOaeg0PmAjMhLzoX-o9KYjWRvOfibNwPtQ3YfWVHbVt-1sEoVJ08XEn5KjT96qN9ziMCd-KmABSiziYOU__CnXeR2ZS68q_zBiCCKrOT0hiXBTvwPpU2IosF2JFrZp8Ugp6ABterxOVJbJOAl5I4x4Uy7-7ilTrnqRu-OPFxySseVdeRL0GeYFoGaiOroS3w_o2TgfXHwhefNywbjCVFUWrx6Bon1w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676606,"updated":1575676606,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"test
    -        name ":"CreateRSAKeyTest","purpose":"unit test"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/cd8cf848b2b64bbeaf21419185b10750","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lgpdaFiutgdu1fPFpPDY4frbjnZO0Og10Wifbhz5jcIj3NUs7zeJlvvflHCT2Oezzr3y0J9_10V5Yf8cZs7ak77NrEZ-Bua1Ra16mhi2I2JtEHoAXH2dmaR2HFQ1cjUVcpsv-5zYtzjDCsPajqr68fnNLgjlHgcFRf7ltQre-pzspkpljVIdMj7FFaAbWs4MruBqWiqSROjbXGrPHAgNG3vYMfWq25hPWqpkgi7GBJRa46GiuwWeX5-Qpd7ewUX2GQXD6mA6Ze-1fjGNivtdRpfCpHveFK7YzMYfp0hMXOKHnmp-2TrdBCIej0E3mKbFYNJXWFprAQIuCZjv1oxB_Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"purpose":"unit
    +        test","test name ":"CreateRSAKeyTest"}}'
         headers:
           cache-control: no-cache
           content-length: '734'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:46 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /keys/crud-rsa-key/
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/keys/crud-rsa-key/?api-version=7.1-preview
     - request:
         body: '{"attributes": {"exp": 2524723200}, "tags": {"foo": "updated tag"}}'
         headers:
    @@ -312,391 +263,73 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/b6a4bd0687a44b26a90ba5086690b9ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vMspU85wAUW-i4tBXjy3K-tRNM1e6kEvSSASR1ghV-Q4YCl8TOdWAX0oIHFYrM9CIeDMYQ-0FBM-bPoRsW_-H8iUeLAe8rFdukwlll6SUKTtupwSjHDvHMzZpOaeg0PmAjMhLzoX-o9KYjWRvOfibNwPtQ3YfWVHbVt-1sEoVJ08XEn5KjT96qN9ziMCd-KmABSiziYOU__CnXeR2ZS68q_zBiCCKrOT0hiXBTvwPpU2IosF2JFrZp8Ugp6ABterxOVJbJOAl5I4x4Uy7-7ilTrnqRu-OPFxySseVdeRL0GeYFoGaiOroS3w_o2TgfXHwhefNywbjCVFUWrx6Bon1w","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676606,"updated":1575676607,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/cd8cf848b2b64bbeaf21419185b10750","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lgpdaFiutgdu1fPFpPDY4frbjnZO0Og10Wifbhz5jcIj3NUs7zeJlvvflHCT2Oezzr3y0J9_10V5Yf8cZs7ak77NrEZ-Bua1Ra16mhi2I2JtEHoAXH2dmaR2HFQ1cjUVcpsv-5zYtzjDCsPajqr68fnNLgjlHgcFRf7ltQre-pzspkpljVIdMj7FFaAbWs4MruBqWiqSROjbXGrPHAgNG3vYMfWq25hPWqpkgi7GBJRa46GiuwWeX5-Qpd7ewUX2GQXD6mA6Ze-1fjGNivtdRpfCpHveFK7YzMYfp0hMXOKHnmp-2TrdBCIej0E3mKbFYNJXWFprAQIuCZjv1oxB_Q","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450190,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control: no-cache
           content-length: '717'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:31 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /keys/crud-rsa-key/
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/keys/crud-rsa-key/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key","deletedDate":1575676607,"scheduledPurgeDate":1583452607,"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/b6a4bd0687a44b26a90ba5086690b9ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vMspU85wAUW-i4tBXjy3K-tRNM1e6kEvSSASR1ghV-Q4YCl8TOdWAX0oIHFYrM9CIeDMYQ-0FBM-bPoRsW_-H8iUeLAe8rFdukwlll6SUKTtupwSjHDvHMzZpOaeg0PmAjMhLzoX-o9KYjWRvOfibNwPtQ3YfWVHbVt-1sEoVJ08XEn5KjT96qN9ziMCd-KmABSiziYOU__CnXeR2ZS68q_zBiCCKrOT0hiXBTvwPpU2IosF2JFrZp8Ugp6ABterxOVJbJOAl5I4x4Uy7-7ilTrnqRu-OPFxySseVdeRL0GeYFoGaiOroS3w_o2TgfXHwhefNywbjCVFUWrx6Bon1w","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676606,"updated":1575676607,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key","deletedDate":1583450191,"scheduledPurgeDate":1591226191,"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/cd8cf848b2b64bbeaf21419185b10750","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lgpdaFiutgdu1fPFpPDY4frbjnZO0Og10Wifbhz5jcIj3NUs7zeJlvvflHCT2Oezzr3y0J9_10V5Yf8cZs7ak77NrEZ-Bua1Ra16mhi2I2JtEHoAXH2dmaR2HFQ1cjUVcpsv-5zYtzjDCsPajqr68fnNLgjlHgcFRf7ltQre-pzspkpljVIdMj7FFaAbWs4MruBqWiqSROjbXGrPHAgNG3vYMfWq25hPWqpkgi7GBJRa46GiuwWeX5-Qpd7ewUX2GQXD6mA6Ze-1fjGNivtdRpfCpHveFK7YzMYfp0hMXOKHnmp-2TrdBCIej0E3mKbFYNJXWFprAQIuCZjv1oxB_Q","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450190,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control: no-cache
           content-length: '863'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:31 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /keys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '80'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '80'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:49 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '80'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:51 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '80'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:53 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '80'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:55 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '80'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:57 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '80'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:59 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '80'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:01 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/keys/crud-rsa-key?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    @@ -704,37 +337,30 @@ interactions:
           cache-control: no-cache
           content-length: '80'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:03 GMT
    +      date: Thu, 05 Mar 2020 23:16:31 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    @@ -742,37 +368,30 @@ interactions:
           cache-control: no-cache
           content-length: '80'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:05 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    @@ -780,37 +399,30 @@ interactions:
           cache-control: no-cache
           content-length: '80'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:07 GMT
    +      date: Thu, 05 Mar 2020 23:16:35 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    @@ -818,37 +430,30 @@ interactions:
           cache-control: no-cache
           content-length: '80'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:09 GMT
    +      date: Thu, 05 Mar 2020 23:16:37 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    @@ -856,37 +461,30 @@ interactions:
           cache-control: no-cache
           content-length: '80'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:11 GMT
    +      date: Thu, 05 Mar 2020 23:16:39 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: crud-rsa-key"}}'
    @@ -894,104 +492,83 @@ interactions:
           cache-control: no-cache
           content-length: '80'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:13 GMT
    +      date: Thu, 05 Mar 2020 23:16:42 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key","deletedDate":1575676607,"scheduledPurgeDate":1583452607,"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/b6a4bd0687a44b26a90ba5086690b9ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vMspU85wAUW-i4tBXjy3K-tRNM1e6kEvSSASR1ghV-Q4YCl8TOdWAX0oIHFYrM9CIeDMYQ-0FBM-bPoRsW_-H8iUeLAe8rFdukwlll6SUKTtupwSjHDvHMzZpOaeg0PmAjMhLzoX-o9KYjWRvOfibNwPtQ3YfWVHbVt-1sEoVJ08XEn5KjT96qN9ziMCd-KmABSiziYOU__CnXeR2ZS68q_zBiCCKrOT0hiXBTvwPpU2IosF2JFrZp8Ugp6ABterxOVJbJOAl5I4x4Uy7-7ilTrnqRu-OPFxySseVdeRL0GeYFoGaiOroS3w_o2TgfXHwhefNywbjCVFUWrx6Bon1w","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676606,"updated":1575676607,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key","deletedDate":1583450191,"scheduledPurgeDate":1591226191,"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/cd8cf848b2b64bbeaf21419185b10750","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lgpdaFiutgdu1fPFpPDY4frbjnZO0Og10Wifbhz5jcIj3NUs7zeJlvvflHCT2Oezzr3y0J9_10V5Yf8cZs7ak77NrEZ-Bua1Ra16mhi2I2JtEHoAXH2dmaR2HFQ1cjUVcpsv-5zYtzjDCsPajqr68fnNLgjlHgcFRf7ltQre-pzspkpljVIdMj7FFaAbWs4MruBqWiqSROjbXGrPHAgNG3vYMfWq25hPWqpkgi7GBJRa46GiuwWeX5-Qpd7ewUX2GQXD6mA6Ze-1fjGNivtdRpfCpHveFK7YzMYfp0hMXOKHnmp-2TrdBCIej0E3mKbFYNJXWFprAQIuCZjv1oxB_Q","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450190,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control: no-cache
           content-length: '863'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:15 GMT
    +      date: Thu, 05 Mar 2020 23:16:44 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key","deletedDate":1575676607,"scheduledPurgeDate":1583452607,"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/b6a4bd0687a44b26a90ba5086690b9ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vMspU85wAUW-i4tBXjy3K-tRNM1e6kEvSSASR1ghV-Q4YCl8TOdWAX0oIHFYrM9CIeDMYQ-0FBM-bPoRsW_-H8iUeLAe8rFdukwlll6SUKTtupwSjHDvHMzZpOaeg0PmAjMhLzoX-o9KYjWRvOfibNwPtQ3YfWVHbVt-1sEoVJ08XEn5KjT96qN9ziMCd-KmABSiziYOU__CnXeR2ZS68q_zBiCCKrOT0hiXBTvwPpU2IosF2JFrZp8Ugp6ABterxOVJbJOAl5I4x4Uy7-7ilTrnqRu-OPFxySseVdeRL0GeYFoGaiOroS3w_o2TgfXHwhefNywbjCVFUWrx6Bon1w","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676606,"updated":1575676607,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/crud-rsa-key","deletedDate":1583450191,"scheduledPurgeDate":1591226191,"key":{"kid":"https://vaultname.vault.azure.net/keys/crud-rsa-key/cd8cf848b2b64bbeaf21419185b10750","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lgpdaFiutgdu1fPFpPDY4frbjnZO0Og10Wifbhz5jcIj3NUs7zeJlvvflHCT2Oezzr3y0J9_10V5Yf8cZs7ak77NrEZ-Bua1Ra16mhi2I2JtEHoAXH2dmaR2HFQ1cjUVcpsv-5zYtzjDCsPajqr68fnNLgjlHgcFRf7ltQre-pzspkpljVIdMj7FFaAbWs4MruBqWiqSROjbXGrPHAgNG3vYMfWq25hPWqpkgi7GBJRa46GiuwWeX5-Qpd7ewUX2GQXD6mA6Ze-1fjGNivtdRpfCpHveFK7YzMYfp0hMXOKHnmp-2TrdBCIej0E3mKbFYNJXWFprAQIuCZjv1oxB_Q","e":"AQAB"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450190,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control: no-cache
           content-length: '863'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:17 GMT
    +      date: Thu, 05 Mar 2020 23:16:44 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - stxghpikirvvs32bvf2pv5ws.vault.azure.net
    -        - /deletedkeys/crud-rsa-key
    -        - api-version=7.0
    -        - ''
    +    url: https://hw4ycl2isie26tjpo7mhs42m.vault.azure.net/deletedkeys/crud-rsa-key?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_key_list.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_key_list.yaml
    index 8270da7bb3f3..3d9b56a9a641 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_key_list.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_key_list.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:46 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - w7hazv34nkkmqac3ubsvkfwf.vault.azure.net
    -        - /keys/key0/create
    -        - api-version=7.0
    -        - ''
    +    url: https://eckmu4bgcn7blx2pfxai7xk7.vault.azure.net/keys/key0/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -54,38 +47,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/710519facd3243218f6325cb05aa5646","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"y7_f-e2waYwKVi5d9CrG-U5-WZEloPx_FdnHsQy0gbQYPTcGN8nmI51QyIQjVowWC4ECz000Sx58BT8b80CA16P56s480lRXup5zq5SmbNcZT2-pw5rk5PI3csBNa2OGFYgRCKGXxzdWNMXILzdMbPELl9FWDdRLgvq0wysVPQfgpNvBCHXa--n03ko4QdX1m-sBN9Yh6GyjAKRQrMeBH5d5Ph5TiFso40unHTLR3YaeNExo1dtzDYXGqsadZjzeJsE4WI8X0W6tukyQnyAscbTRUZ6nfwpAW01pRkBkkKFzTfvrthTfmE50t5Kup9ndU6nosIHZjDWCyeomDl0GEQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676607,"updated":1575676607,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/8a071b4da90f4fcc9e792232f3eda9ae","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"yL5nZ6g3Ljzz5ha0IOql3s4XLB3Axtxj7fd8X4mLYbA6PFeQT4-_mnMxJxklm2iHW7yAbEZJ3Feechbpys6JccAxCJyLAqpXxdKJbPnl3bMHKZAV3OPMHLQpm7k86a-VNIcZ35KVOEZMMQvyrYDKSllYV4c4lE-JPeYchNHiOAUnrmQGPDJwD_bQEQIDoQEdkPZHa3ui2WREQXdWaRyBVGVsXqlY7VJSWMY4hr2wHt3sAF_pLPzIgMvQxYTY1Ee9q2ctihe0B7VxclO3Ngl53SsG-DiwP3SpVz6fMczGwbBGrWhu18VZZQk2V_YU0-OgWp-zEdmm5ZKcxpCJ3KWGEw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '651'
    +      content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - w7hazv34nkkmqac3ubsvkfwf.vault.azure.net
    -        - /keys/key0/create
    -        - api-version=7.0
    -        - ''
    +    url: https://eckmu4bgcn7blx2pfxai7xk7.vault.azure.net/keys/key0/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -96,38 +82,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/aae050abfb634529940ebac86130d480","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"usW_VA7D8m4A7hSSAvmUkXucjWZXhu7HDx2u9H3rcJiJBmwBuXyRivC9s7iRtqYkMFLzJC3wf0f6mLehi0zovc7zIMPj5LmFbUhni93N-aprcfopdMNQuvWnUli-p7Qa307_L4QB6lOKSmq8LaVBClUKpYO_1PNSSiylk28FK3qXmMhZYg0mixw487_rk4t24UugQZW_d3pHsxtXYboQx61LcFKfuPeri4ZDeI77rMlYmSUZHUbwr3BBUCXqoWNWwGjg6W9hqTX3y2CcqSCH3sAO0Q8muJPk9JByNpjJwc0ZNGEzbfXD_r9nmMbVD8qNAdB8XUaKJENbOtVpKXlxxw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/96aee2ef2651435baa6d637923698cd0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lb1NTiKa3MobYraE4D54R-ESZpJYY7G-vdOhx-b7Dvixx17fSGbOksMBDwc9kYTDGBS23izRWRbJMNGxtOwpcV8docnoTgbSNvGOaEpRui4VLLqXlvGuMf09YgOzNUwXWnYxGyFTZLapJyFHZYZW5-psuZSAavDnVvE4Z1UF1ghLjtA9Ntlh8PG11KIAs11wxrWOxpKN5CTGCFjeUCweDW6dQQWs7SFBMZA5HVdYFMBc3givfpVgeKRY04EKDii4Bc_KJIDfg1DSqJvdXb3b61GgPhlb4lh48JvIvBcIOVo4FDznChW3cpBZjyIMgnmRghJ1lHHuIzMe26a-Z-ZFOQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '651'
    +      content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - w7hazv34nkkmqac3ubsvkfwf.vault.azure.net
    -        - /keys/key1/create
    -        - api-version=7.0
    -        - ''
    +    url: https://eckmu4bgcn7blx2pfxai7xk7.vault.azure.net/keys/key1/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -138,38 +117,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/29140d1cd0cc459b95be0824a2a14e88","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nccj2Atq854mKpWhrk6nBT-CKEA87e4pm6VrGzLqMJ15JJe72AaYWRNkwAbcd7xrpjqQ04kBRZWMaMuH4wh390qgQ1sB9Uhqe--a7TF_RNycuV0tSiABQMxfs-ZwifiusjCjdL0pVDwrRQjbvbaQ54ML14E1y2M9Nqlptqhe_gcn7oNazsQf5avIjhoDT_zhq0hz-mj5TAlKcgUM5NrDBUbeK_LGVf-hyd29ZjIjQMcDbLgUwK10UVR9I17av8iVAP8xTjEO7-H1B1LjOue7S4CJdwg5GHLo18aZbt0Y8CyhngUIMONUM0sBEKDTNxTdpIX8LMn9NYlhePHVkhaZ3Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/c3a722f57bb6408fb99bd00a159699cc","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"i1WROc8w4_TfFFYh8Ht15jRxgP5Tq2hjssFq0DjzOL9FuOusFOsJoetmBz7_VC43-ZDET1bPwQ4buqZ982vA2IJKb8cdtSUuSdxxIKK1b3ljGuopHbvmUZEyd12UV9VgrSKfdR7aVLR6qLBM4CbSQIb1ZibeZ8V3d8R7KUSC-U1YTAg5KnkI4MTQdYmUlloTRaqzOW-jKgZeGv3eIrwUFGO0RgQ6BnWvDFRISwgohmhKCvjUtpBXiM7BK4K5M_Xp47t75mHVvnY6Yf8FrWP_8E4w8HfvHkqWju4hF-wzImsHwQkE339r_JUn2gTV-a_aeiPMr6BQdHsbCM6bsdgFBw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '651'
    +      content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - w7hazv34nkkmqac3ubsvkfwf.vault.azure.net
    -        - /keys/key2/create
    -        - api-version=7.0
    -        - ''
    +    url: https://eckmu4bgcn7blx2pfxai7xk7.vault.azure.net/keys/key2/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -180,38 +152,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/e9890b63d69c462bb1de21ce66df3b8a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"s0f6ejEJFzNMr1nC2w1_lpq6ieRlqLnzRqgviHtkj1O0KJo2Bz2XQmF6ZV_t1q0EoUeI7B02xrv2CJomDm7onaZZhGjrc2IgCubmJhn6a76qtR_fa8ppZAR02wwRL1UXVY-eozuEHuoEZs93-yDP4NA7HT99AjJcFDAKBI5GCTonrRRaRcAnftzQDd_JG65X-vuflv44zFEw7r2KkFogRKfA9f_elMs0Lt961QmMm5wziY1_nNpNGMhoUgtwB04rATCBQGImp3RU-v6ox0O2lsEnm6XsBXuy5_Q6kumyjKTt-J41JmRKzh2LtULTBvf0SJaU3ifBR0ozkE93InpN5Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/282de44d53d047aba2dd50e66446a395","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"z8RZb-pRwofjfyHLRwXIHLMh8AA_Xoy0jN8-a2RILnyecxZ6MJSMMhWBfv0wUSgVlaLVNjiNIdXuA8Ke2gnJFwRizrWW2tXnGkI4AEbW-ipeCKR7cqs3N5ry6YLhDDfXNfUEnKsv_5K4PD8pWx_xFRGeRVuH_L3OoTaq9hxc7NnNhiZL3fjwXJXSHqyOrdrUpbsCmL4egNxBglX7tksnrRxxhxmaDLuFg810bOFw4qvYWQvsy0eOf1W4e9p_hBmxL6Hi5zG5TjBAJ036JCr1lPpJ6ewGeCTVZQkB5hh3Kykena0MA8GxDqJH1Z2w6cmVOCzmeVOhoRmYRc4yXk0v0Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '651'
    +      content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - w7hazv34nkkmqac3ubsvkfwf.vault.azure.net
    -        - /keys/key3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://eckmu4bgcn7blx2pfxai7xk7.vault.azure.net/keys/key3/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -222,38 +187,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/7c4f24ef14a24750bdd6531c583aaeb2","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"jNF9I-nwhQSbqu97VvblclOyuvj-zHYTH4TIdvY55PJSCVbQak9EZQ8g7Hmk7IqwmXX3OdKT-dqRNa8LJMl7zcNTV6q5zCiFyuSx01sM3zZaOS0rBs00HwkHpp7m9Emtb2HGKczUD9OUC414H9t5tEQsf2FrpBrYB3IHEHT67Yqg8M2W299Ru77lO7j6tg5O0ZXdrTaQ6A_04hM3zukDoA5RTF2qgyKj5g6z0a0nX9Nk7AGpjyM93jcq2xrVjowCI4t1pvKtEwmmtFcARFzkeYsQlmbHIrDsHmK71aNZf7TG2YZzKoqueVabaBu-h1WabIurkery3VWX5SXCdi83rQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/92c10869670d4fc1b73a4fb4fa3aba89","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"jekJU7030rF2_H5pbQWqjAkQFjG1C3HPkkpTRVbpmzaIDPGj9E7pD0kml5R3XnX6S_FIjTXIsnue4fKs9W1tGOuDDZZVCdbJ6HQ7LVfTgevR8_8l14KbAEKrZ40vdyQ8fKoTlXsKbi9wB3NQgTYpliz-ycLRDozTuwlefrG-MqVP1g3cghjtfEeOhCpZaC_NtCJbH8sBu4uR7Lk0LzCjF2-GJD6JpmAasSxF1NVHJPABMr2361CfLPuNd5NwtVmVu89T5BJZXpfR7YtV0xc3ezHO7Ncqei0OQOKajJqCZr2dgxshh2vtXg5koITwn80837PYCz3wZfvMNQ-OJw6lXw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '651'
    +      content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - w7hazv34nkkmqac3ubsvkfwf.vault.azure.net
    -        - /keys/key4/create
    -        - api-version=7.0
    -        - ''
    +    url: https://eckmu4bgcn7blx2pfxai7xk7.vault.azure.net/keys/key4/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -264,38 +222,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/2abad2b85b534779bf789323c172acdb","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"2RcHjKgFo3aTJLnOn1d_t5FPDSJmArk7fKEsJ2ljLWPz9nELiFzA0SRjvzW3I1SS7CY2ntSUKh__bL8tv02QKtQ5_hA6w3LDfHEQBgzMBTcExOnBTdT4X_zjvRATdHRi-tbDXXjdtrHTlznP6HZu5ybJcj1ljlWRNKAWIzmdg--RTqIY8aCqkfu4sThnJzvH3VB_4LgOFDxuswV2AqfqY8XFldgNcxK5ks6qYUA0Aq6erzWFMm2eeMlRTfM-4Rs5PfJm82447XzPPxkc_1kASkmLcPjUIdVUw5bYDi4lVTfKa67rkCO6zdEY108jy8Ces3_iX52dmdnKlTWm6p1NRQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/c81ef1727b4d47409605d4aa031493db","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sPig0xxAZHKmJEvHnWPSvtehGcN3Ps_ofY4wyT78DHPB7DtnUzHOSDlw947GY-IKj2OmbOK9Mv9N7FJraJ-1HTpdMDemY9Y75SJmgN3w4aVXbDYfm7ABXwjHgtpHWOfanUwoAD8DQ8KZ2zK3e41SDvckNsB5cVU5EzcFrKUco8cXks2PTyIQSlErvu5Wu-jzoNCcl7EQnxNE7qzXEAEg52Ad1mmSt2Cjsg7QUzWXVv7GqxCf_28ieod0se2R8mlttBHjf2YauoR145atoevb_8DzMitILXNdudGqujlSwe82Gfp29dYmABAdRwfF-iP6YEHd_Ct08dHji2bnfJzkZw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '651'
    +      content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:48 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - w7hazv34nkkmqac3ubsvkfwf.vault.azure.net
    -        - /keys/key5/create
    -        - api-version=7.0
    -        - ''
    +    url: https://eckmu4bgcn7blx2pfxai7xk7.vault.azure.net/keys/key5/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -306,112 +257,91 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/99335ab220fa4c448fb997fea04a2908","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"yo-yMD7VoT8s0WZ0h8rYFvoyfEEDdlAK4jLKJiq8MfXEg7pZGvkGgt47BVm6l4sEwlpaAAkzWRlL54DouXy_UCzhOd4eouPCwc7axQA1S7APd3NTmaNpqoKiAAc_0mQjwx8nkTBQJdeizv93RMNUx-ZFf6yt71hnHyB_YjdFgLsuWa1DoXrt2H5hn2gFvtsLQ-ZAzn_86-hH58dTfoohvrYLB938pZKcf1EV8kPVngzK21RYfeildCbRds7CuNc2jei0JmVIHDqpsO1LZ4Y2qgzFzhuJ6Sx_WxuqCV3VmaNm8A47RsV1FDx0JzpAUXNJKO-g54xmBnOF74yBRn0cXw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/a0396955e9dd401c96fcd53575636c59","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"uRLdqWUzuqGYVaHNguoVoBV-26yPxaa5fvTMgMtNaRLBnM_0Kue_jPN9yvUXNLzQ7aWDO-WOyqOmNPCzBNeRVMxDjf12mmRzYM_Qjd3F6X7oo_D_z1xsKTcY5ml76dBpr-KU9Fhg5UEuQdig7TXn1m9AJgP-YCG_IM3TQpzCiXbUmhKaCnjsNGP_e1UKoj1uyrvcVPEE8cXXUZkQubSxMVW3id1JvT5KDfkFfqV0IzSIuQ_uaUvF9mWkKs77ZXBdfAYvciR9yPFdRjM--RDAThnpUYyQ-bMdAxd1A7ad_JynDq2Jcx64c8wr-ka6oU7daLOEmanOG5bIgm0k5n0_ww","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '651'
    +      content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:48 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - w7hazv34nkkmqac3ubsvkfwf.vault.azure.net
    -        - /keys/key6/create
    -        - api-version=7.0
    -        - ''
    +    url: https://eckmu4bgcn7blx2pfxai7xk7.vault.azure.net/keys/key6/create?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys?api-version=7.0&maxresults=6
    +    uri: https://vaultname.vault.azure.net/keys?maxresults=6&api-version=7.1-preview
       response:
         body:
    -      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1575676607,"updated":1575676607,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key4","attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key5","attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/keys?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3MiFNREF3TURBNElXdGxlUzlMUlZrMklUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'
    +      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key4","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key5","attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/keys?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3MiFNREF3TURBNElXdGxlUzlMUlZrMklUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'
         headers:
           cache-control: no-cache
    -      content-length: '1288'
    +      content-length: '1368'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:48 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - w7hazv34nkkmqac3ubsvkfwf.vault.azure.net
    -        - /keys
    -        - api-version=7.0&maxresults=6
    -        - ''
    +    url: https://eckmu4bgcn7blx2pfxai7xk7.vault.azure.net/keys?maxresults=6&api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net:443/keys?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3MiFNREF3TURBNElXdGxlUzlMUlZrMklUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
    +    uri: https://vaultname.vault.azure.net:443/keys?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3MiFNREF3TURBNElXdGxlUzlMUlZrMklUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
       response:
         body:
    -      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/key6","attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}}],"nextLink":null}'
    +      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/key6","attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
           cache-control: no-cache
    -      content-length: '196'
    +      content-length: '208'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:48 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - w7hazv34nkkmqac3ubsvkfwf.vault.azure.net:443
    -        - /keys
    -        - api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3MiFNREF3TURBNElXdGxlUzlMUlZrMklUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
    -        - ''
    +    url: https://eckmu4bgcn7blx2pfxai7xk7.vault.azure.net:443/keys?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3MiFNREF3TURBNElXdGxlUzlMUlZrMklUQXdNREF5T0NFNU9UazVMVEV5TFRNeFZESXpPalU1T2pVNUxqazVPVGs1T1RsYUlRLS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_list_deleted_keys.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_list_deleted_keys.yaml
    index 4a0f44057690..284235322627 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_list_deleted_keys.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_list_deleted_keys.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:46 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /keys/sec32f70fb3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -54,38 +47,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/386880eecfa6490094d58f27822e2bd4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wPYlhQ0gYfgPD-EePdOlip2wNH8IlextH5VBDmRT-73PHnob-75SCoN36M7X6YZqV9QVK2PsE-IWbpY7jOkiZ9xiwgLObiWqD7AqQ78R8EGGXsS-yr8_D6eyfzjjdO0wzS_6b66kGyd4FTFUf7eOjMWjxNMMWWXb3sXsmEFdEm4hMIUhHfu0F4GBb4iZ3BW2RppqxcuqRzkRGP2GBe8aShdE54VbZIiZ5nDuuLoqraKTIAonbSJvpOjq5ozrrQh7ycqxz5BFemPhqNfWysAYl8bBykSR_BJlc71Cm4mBrGhWthskjjakTQgG_A4Aod_892tEpOGqqhLc1L6W8DdE2Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676607,"updated":1575676607,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/ecd0640b5fe5480b93e26ca3df130465","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"u04ivt5H83isiEAv0cUpVbwyxV3yR1-Gd37O9U05lZqdrIqBd_2Lq7TRoFXpEsVyi3ksXKPRE2koXIc_BurQKAs2pqtNjv8Q6lWEnlXsAI2rsjyatfaCIF9UjvrtuzHZkuA3dIJntpwTKt8hIGEl7cF0BuHSIuErgu15oyE1MzwmrsqYuK7_5kpjLJkhjGEGXjmWPN9X93J8XsVUTAZQw8r0EoYmlX5vuFm5Y-9RJ0EDwuAXqvnpQn1y22JKskYF-irbXXFGO8Dg1cvyZtk3dpnByfGPDHgKqOg04XalnDBxA9avVwCFOJzGyK-XO1ILC0zdqIn8TfkrW8kgcog2Sw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '670'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /keys/sec32f70fb3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -96,38 +82,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/c2b0367f38e547b887a3436d7189b9a3","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"q86_IgPHd8ZntNOfMQwJDqkXMZB_ACzgRHPOQG0tUttZW_JFGygFpHu_vga6793Ef73W2QoyfUWCt1k3gxLRjqDxod-DYUwYce3PWpl2KrL69wFyZc6JbJs1eYj9AvGPXidH9cpnmdhPJbOkngQELDspZ8-vdzJ1EXMKb_kIj6r5NM2u3Sg7d7WjIcC_wEsvMggv88kLHhBvn_EFTUboo4IJJlIerd86ta3T1zJjPrjPThB_HIISXUjpwicxypjkEnWmy-buWqCGkWDgxLoiE3Np7CirvjwwIFLTgOarqys6gop0mELqEzHfyYaaMwf9RryrA2vYyZ1x0FUFPrTYTQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676607,"updated":1575676607,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/2abce98abef84a38b135e6130d305c26","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ruWDThCGswrBqP9zY9lVB0A0soLe9nDHZIAX9hpktF2xGxCd5pvgbqVF_gsATsjBmrsVSBKQPFA8-v8vYnPOaMaaE551KcrvTCPYcVJxqwy21rpjQWuGtaDlXpa0Jph7seRarw56TYAZq4LVaPSQVh4i8gkOGhBd2NevPNR6oZ-FvDWSwJAzPI2jwuubsmzgVDXSXvADGuWUx7JUQKET02zxTIgNnCOQjG5LOVhMsC1Wg1yuIzmfeZZeUWrg9OJIIJgZCxILMqbFjr1afTrUSnJgoZbt2x3HeQgGgUyT_lhQNME4XPkXIjwR81P96tgIahMORJv0IJoP4SwbTH1Csw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '670'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /keys/sec32f70fb3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -138,38 +117,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/e3bcbc7d911f443f89ee3c4daff44f4b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"yIlgnIZgxBQEPOlYGFnfhNWG1LNfx386qIMHNK3-6PC5b1vgkOSidpFLe_8mWPwqyGZjhSm93Ormrx4MJ1tSPRTxLohHyJOknSOFfM5SGpdzDiwZqetEvHAk2nIaPIxTcLHYY921aCADDOfUsqptvkYg-M8OSksgE-7eWfRkGJNgMhuu9yTAquCxAnQpz4Z4rObdPC1AacpC_Lhwrr7h98V7J-yg8vxIZ6fZbMeuaIBhNLTLeZvaZLHtPddUEp2PKVck1xebRT2QljGNBi9HtE7UoaKFmWa0F7pOtu2WZHURt2YIxdJDV9J_HKCepi4MHYxTh_2Ni9QkZCfF-CCu_Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676607,"updated":1575676607,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/5c83d0c3729f4af59489ce962cb689d9","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kvM0TSZGODG5OmcaxrxSQKUKBNNIPqg9vIAlDYoJvPxA13Uagmbj5MiMbxARx2ivglSKWp4uWt36DatPaDtKHEvRh6XQZur8VBSEmAhE3pAbFwhHV5qC1qgVkaXK1wKP_2xJ5v_qyBlc1_VEOdf2e-6IItQE_aRlvh_UkvTLbD8Gu9sVboyage_tlDDejfp4Wp9jHdtfJ2ko_PX4fuvJ2K6luOPOmd_2SXZU9wFWEUn27Zva1WJOqvg7vipEXEfZxEVu50hWJeO3RK6Px8HZVFtDwIIK7B3EgsVgvXonrC-_7tMAk3dEg9bTx0cbIeokon1KcDFYYCLC6EG5qw2TQw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '670'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /keys/sec32f70fb3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -180,38 +152,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/90953fd5c3014fc5b763ef3be6828a2b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wEn8Ne5DKHq1SvOtkwA_S_MJMTji-0AQ5CA8HFFx8Wm2jpCd6mSlcxd6YfaH2y4MvpA_tpbhEuGuIm9y1jKFCrm2Q0WMd_Rs24HdSrG8Gw0DmWrjy1MwZNtP5graQGqFrlwLZtiF_28H5-swr5e0eANqMbexSX_443QbRWb9C4Vjsymu5HbT3cAOZBjJCJ1n17Va9yEzrddELd2L5Ogzmk8J6dkqXwR7p7mF6soa8xSsmxF1M2jL2FnleiRXxIUxupuxj5up2sbw5nhkgK-5bXcKoJw4WPr4yeWI-g9B6sl8vyK8ms7JQCNhLelUFKIbmFVDVzVf3VHN3RwLSWP9cw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676607,"updated":1575676607,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/816d4ce117d648febd82aa21e7d0b450","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qi4bt_TGSIcuCe232XwaeU4RSjmWa7MzWXtqcsS9qZgWj4xlW4aJuhClpbukgapDxio8kJnxHpDv8yh1qyGcHKmjN9h5DgULuBZd7HYczIvzpFzV1bX6Pk3gV2WCbU-0dmZ23h1l_d1jbzO5odV7CH1y2xZrKfUiJP6IWcMlgz5Rbu8kb8IjviWP_p1dJcF5Q7UyAD0urgC1NLM9gFdnalQKOe1SVfvNyP33662GoRo6x20uXpSER3gbYlXRyMX4q-1HzHKa6p8mLb-agPknYyU1FnEcHLj26tv6tYD04ssD_jT_9UCf141lDKDweda5guK0Qq5RzWs_PLQj-9DXEw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '670'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /keys/sec32f70fb3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -222,38 +187,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/ea109686c4c7455fbf20e105c9c26cbb","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"8d9pVWVcsarO8JUWNqUZF7BhvCJEgdi80rPUlBTzk3Q0PamJdRJJvkgJJoM6950XhBQWXT638GyEq5xur4-HmD1xLDbcj3WH34PZSB06xB9ZduFUp7RqaiZrHyfq_1mP4UApX6J_gd5TJNZcf0C_m18Rf3pEtvzELcL4J9tP2_XVrs-QNPT1_rx3rQQcFR951IJHTMce65-Jp2Zs_QFA4RnjgcJGCvBLpvv4JpDNb6xDVvoACqDkMO5ePRnHsisEYVjR0KSkfLRQvH6nQuDDSJ5C_WN3kBWq1NmP7nuIj785eERmB6O6VBU8ZoumwllvugUpWM7o5Rxv9h5AG7GmOw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/4b461273225145248b13b6386fcb8a3d","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lsAW5FLFVrPgc2Z9e__9uBcAPbSY8N8WPSbGOIcu6GP_FDaxc1HUVEH_N7kh-r_HfpE8s7sN5lSz4VBDIGXGWzUyENPE_ONXb-W8NHDZ0mHSXWRjplK4RHBUSFUG2G0jIdW_KqNR8wVZsN48fbjId9aNmA8kEdvzIlS-NK7JuP8C-IW0wdCVofOK8GyIxjNMjRPjqzHwt8KeVFzgaPFNHuYtdv9U2re-rTbQrZrfr1yYbIu8d9XPOFe1T-eTFdNjhlE8O3BOR9JboRMPeVwy_8t81HMQsg50DkRw8_hK-0PhrWzkqQ1CX2OgEz_VYv3Iq4CJ626R-b6ZzturmiKQWQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '670'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /keys/sec32f70fb3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -264,38 +222,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/ceab98c2c39b41fea6261a8d640d0755","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"np7CkFf3tH_s_Ju4pnLSNCf55-Nje5d-MwhRL9en_fjo0LDZ8f5_XgnpwSnb-otWg-gjPDORlpygdXXl7Gvc1KcCEalvYeF9xSG2O5-CjnoxZOYgbhpI4hNJGZNHQE28CRCV0rta0Nn1_d-6QOwfb-xENF4i3Wz7AfvwWaJrnSekUmHbaigaXBLNqEqcpir-6bIqLY1a0y8IS9La11xKHhJK-z3csRVoq62DWRhhRGwbbEglefREBJPTOXRIEvxZANJmq4wS_pUiTJHS2dHWSin6qWdK0COlT9aL0iOeAm8lbAFiA6Ap7DaFxsY5v0j6VsdbfrzpY_bS_lGFmUNvwQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/4e2f8c85e7584ebe97e4e5f84ae72a40","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ytzi_VhJpvmRp-nxdQ_c0Dv_if0ZgQanSQajDXtuiCmodkL8JWHljz9MV1SicmDlK_x_nlr9SjjW0NlH7UFH8F21VV_wQbv1KWU74T0oMQ992kd2jnSF1xVvm3r0IVceQ_jW5Ffo1KOH-C9-rRbZITM0BKstnnTqM4csTEkV3BBp7rbOrW3hucJM7iPrZN7n-PGuuSkEv5CKLIU7mKMAmEo14i4dWiU_OjeV9KoHU3dZRS6SwFBt8bqn2hzftw2BAhaMy9pPjiw6a2IGqmVEDkvXKslCaeZcjj8sNZq-SYTPoEpcjBj8RJp0e0vrgNDW8raduH-CN11OOFxT9PSXSQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '670'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /keys/sec32f70fb3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -306,85 +257,71 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/fd2b7f42352048acbbe0af4e8d569e7b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xsKM5ahCAn7a9nuRyao-mwvuPatgndKB5o57wW2NeqEpH2jX5ySxD3Aw4IY7RLwlescEM3mzObOSv3xck_cfctiO8XwcsFtO2J1WPSF_0_K-DfVSg5ZUqiRMWDgQkzTd1nDbG6ZzoaCS-2q_bcvq-8IlSzk90j6sH_x6mzSqOxW-d-JuTrznpulNtRGPP58Hmpw4g8LTp_2ybFvdKxgSt-zjUKns2qtlcvnW_A1rLdOQnVdvHcU4McB9TuZuBbQRnoIxJ_stkY60PLZlj7RWw9Nd-MyElUbZgWocVc8JQui7tOIg3KvGpxHjW-wQI66Tao7BY1pZKdWxKHfMBsQW_Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/42d4c1114e7f4ecdacafdc7412acd19f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"udk66K5eAy3PI2SIoZGdwBO6AfQ3LF_ZQM62YvjqnBDgFqXI_gfaoT_bAzEWfS1sLjXgpYnbCkNpEaq-_ulaCxgISE83pBGFFx3ZXIyYvTiG0i-gQrSBR1AF0rCqU3hGjSvbslgeuN6Ew5AHMYlFNTLCDwxle_bXBNz5AFO4fsmm-YHsJlvb5X9a8uhybruXsiMt0BKpTk-GaQhUd0S_zIywoq4ySgF8vMBo3gudj8L9BpXEZqIBUZU9LEnGxh2T7gex4tx41GUjIhNmC9nGK7nrFDJbj8pj1_RT3IPaBJg5-PLB1eZVLFsbvxXXJHJPjI4jmSQQhv77-KMrxpgOWQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '670'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /keys/sec32f70fb3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/keys/sec32f70fb3/create?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/sec32f70fb3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3","deletedDate":1575676608,"scheduledPurgeDate":1583452608,"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/fd2b7f42352048acbbe0af4e8d569e7b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xsKM5ahCAn7a9nuRyao-mwvuPatgndKB5o57wW2NeqEpH2jX5ySxD3Aw4IY7RLwlescEM3mzObOSv3xck_cfctiO8XwcsFtO2J1WPSF_0_K-DfVSg5ZUqiRMWDgQkzTd1nDbG6ZzoaCS-2q_bcvq-8IlSzk90j6sH_x6mzSqOxW-d-JuTrznpulNtRGPP58Hmpw4g8LTp_2ybFvdKxgSt-zjUKns2qtlcvnW_A1rLdOQnVdvHcU4McB9TuZuBbQRnoIxJ_stkY60PLZlj7RWw9Nd-MyElUbZgWocVc8JQui7tOIg3KvGpxHjW-wQI66Tao7BY1pZKdWxKHfMBsQW_Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3","deletedDate":1583450190,"scheduledPurgeDate":1591226190,"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/42d4c1114e7f4ecdacafdc7412acd19f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"udk66K5eAy3PI2SIoZGdwBO6AfQ3LF_ZQM62YvjqnBDgFqXI_gfaoT_bAzEWfS1sLjXgpYnbCkNpEaq-_ulaCxgISE83pBGFFx3ZXIyYvTiG0i-gQrSBR1AF0rCqU3hGjSvbslgeuN6Ew5AHMYlFNTLCDwxle_bXBNz5AFO4fsmm-YHsJlvb5X9a8uhybruXsiMt0BKpTk-GaQhUd0S_zIywoq4ySgF8vMBo3gudj8L9BpXEZqIBUZU9LEnGxh2T7gex4tx41GUjIhNmC9nGK7nrFDJbj8pj1_RT3IPaBJg5-PLB1eZVLFsbvxXXJHJPjI4jmSQQhv77-KMrxpgOWQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '815'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:48 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /keys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/keys/sec32f70fb3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    @@ -392,37 +329,30 @@ interactions:
           cache-control: no-cache
           content-length: '79'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:48 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    @@ -430,37 +360,30 @@ interactions:
           cache-control: no-cache
           content-length: '79'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:50 GMT
    +      date: Thu, 05 Mar 2020 23:16:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    @@ -468,37 +391,30 @@ interactions:
           cache-control: no-cache
           content-length: '79'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:52 GMT
    +      date: Thu, 05 Mar 2020 23:16:34 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    @@ -506,37 +422,30 @@ interactions:
           cache-control: no-cache
           content-length: '79'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:54 GMT
    +      date: Thu, 05 Mar 2020 23:16:36 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    @@ -544,37 +453,30 @@ interactions:
           cache-control: no-cache
           content-length: '79'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:56 GMT
    +      date: Thu, 05 Mar 2020 23:16:38 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    @@ -582,444 +484,112 @@ interactions:
           cache-control: no-cache
           content-length: '79'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:58 GMT
    +      date: Thu, 05 Mar 2020 23:16:41 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '79'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:00 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '79'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:02 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '79'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:04 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '79'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:06 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '79'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:08 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '79'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:11 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '79'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:13 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: sec32f70fb3"}}'
    -    headers:
    -      cache-control: no-cache
    -      content-length: '79'
    -      content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:14 GMT
    -      expires: '-1'
    -      pragma: no-cache
    -      server: Microsoft-IIS/10.0
    -      strict-transport-security: max-age=31536000;includeSubDomains
    -      x-aspnet-version: 4.0.30319
    -      x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    -      x-powered-by: ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.0
    -  response:
    -    body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3","deletedDate":1575676608,"scheduledPurgeDate":1583452608,"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/fd2b7f42352048acbbe0af4e8d569e7b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xsKM5ahCAn7a9nuRyao-mwvuPatgndKB5o57wW2NeqEpH2jX5ySxD3Aw4IY7RLwlescEM3mzObOSv3xck_cfctiO8XwcsFtO2J1WPSF_0_K-DfVSg5ZUqiRMWDgQkzTd1nDbG6ZzoaCS-2q_bcvq-8IlSzk90j6sH_x6mzSqOxW-d-JuTrznpulNtRGPP58Hmpw4g8LTp_2ybFvdKxgSt-zjUKns2qtlcvnW_A1rLdOQnVdvHcU4McB9TuZuBbQRnoIxJ_stkY60PLZlj7RWw9Nd-MyElUbZgWocVc8JQui7tOIg3KvGpxHjW-wQI66Tao7BY1pZKdWxKHfMBsQW_Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3","deletedDate":1583450190,"scheduledPurgeDate":1591226190,"key":{"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3/42d4c1114e7f4ecdacafdc7412acd19f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"udk66K5eAy3PI2SIoZGdwBO6AfQ3LF_ZQM62YvjqnBDgFqXI_gfaoT_bAzEWfS1sLjXgpYnbCkNpEaq-_ulaCxgISE83pBGFFx3ZXIyYvTiG0i-gQrSBR1AF0rCqU3hGjSvbslgeuN6Ew5AHMYlFNTLCDwxle_bXBNz5AFO4fsmm-YHsJlvb5X9a8uhybruXsiMt0BKpTk-GaQhUd0S_zIywoq4ySgF8vMBo3gudj8L9BpXEZqIBUZU9LEnGxh2T7gex4tx41GUjIhNmC9nGK7nrFDJbj8pj1_RT3IPaBJg5-PLB1eZVLFsbvxXXJHJPjI4jmSQQhv77-KMrxpgOWQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '815'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:17 GMT
    +      date: Thu, 05 Mar 2020 23:16:43 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys/sec32f70fb3
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/deletedkeys/sec32f70fb3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.1-preview
       response:
         body:
    -      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3","deletedDate":1575676608,"scheduledPurgeDate":1583452608,"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3","attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3","deletedDate":1583450190,"scheduledPurgeDate":1591226190,"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3","attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
           cache-control: no-cache
           content-length: '360'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:19 GMT
    +      date: Thu, 05 Mar 2020 23:16:43 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/deletedkeys?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.1-preview
       response:
         body:
    -      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3","deletedDate":1575676608,"scheduledPurgeDate":1583452608,"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3","attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/sec32f70fb3","deletedDate":1583450190,"scheduledPurgeDate":1591226190,"kid":"https://vaultname.vault.azure.net/keys/sec32f70fb3","attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
           cache-control: no-cache
           content-length: '360'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:19 GMT
    +      date: Thu, 05 Mar 2020 23:16:43 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - n2oajxna4ul5yi32ptnnbwug.vault.azure.net
    -        - /deletedkeys
    -        - api-version=7.0
    -        - ''
    +    url: https://l7gmqm7ib2gj2i4o3ik4nzrw.vault.azure.net/deletedkeys?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_list_versions.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_list_versions.yaml
    index 3cbda651a348..b9f119384afd 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_list_versions.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_list_versions.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:44 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qd7km6xognz7oyzq4q3d66xn.vault.azure.net
    -        - /keys/testKeyf7e00e3a/create
    -        - api-version=7.0
    -        - ''
    +    url: https://aflg2ycm3wgzdynpexlthlxa.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -54,38 +47,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/3cf9aa7c2fc6484fab247137756d05c9","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"oDtsphIe4B4bUd0O3y0M21U9ZQz9xWgnaVXp-4vCLkFQKM_77nD5ued-EvnsdbWkUQp1mOKEnd6ikAv9uVSodw7WWrcfjnvVvgguKMGo8X1cGJSI8OfoJFUrtOhnjuo-bQ0Z2vcSnymb00MggzhOhiCa0Ip8azfUXMgySumkjlXLUSR-NorJt558pirfe1N85acdVB0L1_wn49SxyKJ04RKa2R60aRUsGzqmjqUyh_rS6MHUhKGHz00aXFzHqoqjH7L--xxW2brvYRh3gFVBp7cNmpTH7Xs_n4h7mSe1i-d9BtEQrzSIwyN9quvuizLGHUmAQZM13j8DFmsBuBJUKw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/86dc9e9c66014a82992dc2f02de09cdc","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"p7MYCJ71icScPV0V1wZziN5cinMNkjh_f2s5GR4V9sHManA8iy2dUlG6Oi4SmHo3ekKbBy8WxOwl9okU_dVpCLi7jqAO7CuqQ5_buRRQTIQvKOagiLZ8b4amgSfu5V14rniJ7sStHSEMQbtbLkehZ5jyLyaVVLb9LURWwumA-cYtFA4uuWCB_1Q78DbQIY5T7OPRBtWw-OzxWKSB7NSSEA_bE_9sM_DF2YvrHT21f4M_IOnOshfziTPfCL1g6qYQV20Lsvf3ITbhDowD5CmscvbjDggOy_oMpd0Unbv-b4CeJ9rVn2g5gA_k8TUycWeclGhOf_sRRaz0DEVUJkFDnw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '662'
    +      content-length: '674'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:44 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qd7km6xognz7oyzq4q3d66xn.vault.azure.net
    -        - /keys/testKeyf7e00e3a/create
    -        - api-version=7.0
    -        - ''
    +    url: https://aflg2ycm3wgzdynpexlthlxa.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -96,38 +82,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/a184e51263af41918ff89eaab4c6c2b2","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tZCjKI69ybV6hg3Ja6ZwTLiEKLsWK3C4_PJqUQEiVEAdMwVTTfItrvQNNqYdM8pOX0M9vF_qFAMyE88S3ke9lN8UnxBECw9fMOManWYnt3BVkr8GVTlcbZJ6NPprrnJt61keb5nzoxwEWqP0jolDomKoqPAW5vcNVJVNhHl29R-jeDGAq-wpLkJqhMaPuGmLl9adleL64tzKctoB1Tc1lJWnAhNHHXBV6aR7oT6PFlqDYVlWu5zUYLT96J24Qx0xnTkR2ol0ckBr65Kx2pI5PWXW_HjZFIWvPNEc8t1RhWipkf5pnhKBGCUwBASHp11LlDzOk0HxMPM_Zlu6kRJF-w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/2b629e9824c64af99918f3ee123dee26","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"1-fn5bvO0VUOMk4GOl5of579DxzhQ48s8czFnC7fIVoQ8n3fM_1-jRSrQ8w6SlVPenjp6-5pWnIWsM1z1M46uSAAL-a8yBEqZN5OopLPwVB_0C2TyWsGTZKK-YRHlTXS83OdifG-2nA9S2iLL4Jbrs6bF4nkJenQrvFHkiLou_VDAuT6ouWI14kWw3QvhvAsmrjOHhud_GmuQUr7dkya7Q24DK1r3gaI55DaAPhneR3-ceRfsoM2w71ymcuRaPcxWfjes0rLH-ShUy00iv2OakXV09Bs_zy1wDsAK3hUKj0Rkl-gqBWHYh1tPTptMd1ZJuLdpgB81PGedFGmOt_zTQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '662'
    +      content-length: '674'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:44 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qd7km6xognz7oyzq4q3d66xn.vault.azure.net
    -        - /keys/testKeyf7e00e3a/create
    -        - api-version=7.0
    -        - ''
    +    url: https://aflg2ycm3wgzdynpexlthlxa.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -138,38 +117,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/1c6c4643e7c8486aaddb286e35864376","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lg9HURNPSzl0SLTaLoRKBfYmgBGB5ghvkYI0fCbIsJeHN7s2O9Y-gkPruZO5aKwbh-FH0uITIAwpX7TzZtNEsCBis3kpo0-xv5oeYrejsqpUwrX35EtJCMj0-gL0xR_iVczQkVkoDWqehTlqqBnDpEHHh46_E54SzP8K5_Z2zWOb51iBZQRP6tyZs9MjA91smej3UUUg6FsA4ebwHwgRzmui42PKjj-foxHKbRQWklP9vtid6BDZ5Ghew8bhrJ1Kh7-L8DdLSq7d0MOW-KEYz_uBQ_SEWaljQspZMk828husRJdnBQwOWCo1omQuONGw4l8VzYI0rfX4bAbaVdoMCw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/3b9f186af97d40a394260b26051b6cd4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sb5n2m3yCcvq4pTX71sF66kWsMSNQRo1ZdoN8y8gJdq0teRLDuf0LLFOkJqAVcfnontJF5T5iT3UxEhdVWiL2eBkahN2OomUsc77CxUJ_nQIgUs5mCJcVCC6GM1iv0e5Eb-_duTuw2bLjlcEdaoJtdqMJ-MFX3p3uL5fR4Q4nnzZt3kiFFR9jRa3FtRLPJsfcAyH4EHfYZSOaK0ecN-_fqEK6uQtWJAi2TiREwtg9qZS7u4aHduKAMBFbeFoy31LrP2WKTFHuGvDx6ZE2uPJ5qHK9TKiPZ78uP4S7E04EmyRH_mkpKEn3td5Bmc-6auBG4lpO-MOCEsMCXg0c_P8fw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '662'
    +      content-length: '674'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:45 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qd7km6xognz7oyzq4q3d66xn.vault.azure.net
    -        - /keys/testKeyf7e00e3a/create
    -        - api-version=7.0
    -        - ''
    +    url: https://aflg2ycm3wgzdynpexlthlxa.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -180,38 +152,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/cae42d30def345c1be9f6e5cab00ebb5","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"r3dXPnUMbOEM_6LUeu6HlkZSze_KI3IS9gqgvFQWPEfbr_PrXR0PIPh6HoYtEXTYijoHUTRgaLYp9rgxzx6nMa8Fny6WXZIS__h1-bEUmMWF5rF2TGV-O8n6IKFaMQcMo0KIK0-pPvIxpLxYbYXSD0nJvurGiYVfcWmBOO-rwuz8L25ww38nAE7KMPy-0VmvcKk7EIG99d_EyASIZJ63Bc316PoHiAlGtI-rq5dmz5DDc_A9iIGKRRDYb323AQKED1WHOVoXToxDV5B5BU0hlzQcrLocee-qt3DYBOu1QAh_PLNa9cq0KfOhHpAIAGNbGQK1IDmzy-9iFOc0wYYTsQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/37a3b851bd524f50861dafa40a91682e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"uOI_FWq3gVRC456U-63G9mQoi6pMimqiaiBuohWAtp8BYbs88kb2mfh61ynegE6YnLKfCwnJQo4kLbVK3QBk7PFPwTEuvy-CZ5cKWHC4FPwrj5oLl_pSdHjIhpdVPQb9yJ7-hgSKlRZC97Krv-CwScspOqQ2R6iFkukJ12tsgQwM4MJ2v_HxYP_qIdxGqr2jDS2asomsoPshamtRo47XY96onj1PIVIh3nqd8ELc3aOU4aQOjk155_F1STIZ3MbSSuDoLOcdO9yyanbs_r908_g2JCV9yuxCsaoPLE_IRMZWS6TMX8rJKnHmm7S1n-yMrJYXfLojOSFd0PE7VkXrlw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '662'
    +      content-length: '674'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:45 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qd7km6xognz7oyzq4q3d66xn.vault.azure.net
    -        - /keys/testKeyf7e00e3a/create
    -        - api-version=7.0
    -        - ''
    +    url: https://aflg2ycm3wgzdynpexlthlxa.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -222,38 +187,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/0d315903a6244c20940607abe8907b34","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5rkxXgiUHes0-a6qHQ10jdx9PJhdcU6zG5qcD-5vUUc279LEhgvV-Q30JRvmHpRtT0E7slMe0CfUqjoqHAhkh3QoKKO3aC6Rb9fa44evnkLwv-DoP-77tEAut4jsd5wDhCUR7WrHb3eY5NkHXcPaC0TlfXBOYjHma4XRF6ODK0GrJOFU94qkRRJW1_ONk1Bgt3JsrYJuSWLdTteb-3eYZmwmeSWCWPzion4qL9zpMlDiEyW3yWLrejFMbY5TR4zZLEEhPSlCCb5dKY08tvBlZLwhc1cGBZVdGPprC2YSbuHGecY0kvFfRmWJrYwqlB5h4eS3ti9xthhmge3e6iT1EQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/d7032efd642246e88172ba579b331123","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"s-ktJFtwf89xVedxVWAv6beL_QGOysCNbDBQ1aIU3MjRWbP13HG8rAZqKz-Ka4GuMtFFXRWGohRnYa5bpCm1r7X2rO6b0sGb3s8wCd38QUoMdMvXxqkrQu2DdjWhNvgFwKI2PrR-3Kbtyg3g6UQO4IWr9hIFD9Tyy0vVfBSJNw5yOuHCSYOwpS3EZL8Bv3o5EBWNQEolamDWTli3uTcZB2cOOvxCPh_uKSx_sdMDD9w36MGBlPSxiaISeQHb48vpleG_ijDXgBo-skBKguA4doxPlfS7qVADtZsYoM0VoCBcXYtdwceN-gU3mCqdg4kwuD9r-6RGGyj5IwAkp8BfUw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '662'
    +      content-length: '674'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:45 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qd7km6xognz7oyzq4q3d66xn.vault.azure.net
    -        - /keys/testKeyf7e00e3a/create
    -        - api-version=7.0
    -        - ''
    +    url: https://aflg2ycm3wgzdynpexlthlxa.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -264,38 +222,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/b417fe400b0b4aea944ad1d04d1c864a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0zd8u4-wFMB38QRwH6-huAyh3uzEyiatmAexBYq0tQh6e5H7arCPKm5HZNv2rmGTVWOD_lXp_7pNOry35JenzK1LXS6CtF7Ke6r51AWBazro4hN4Vv4v_6HHIANAQRFqjZ7lch7PW47XD1jyWoO9fyGs4DK-gJYBPadVik-VhDplxuHHXUeOk4boC3LhSLXcaehsNFiImshCyPCPn_ctr9jCbmK5-ieM0nZmNA-r8QC9epglUG71KY0vDiTkq7yPtj5QKbBi9FDS2cqAY7BcIg5XMS3VwRSj3uXFAfGU9SNUcvc9R-M5yQH23VPyMi_HAFgUtYP5Fk8YXwP-QZeHXw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676606,"updated":1575676606,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/0008c14aa90342d696e913cf6d725d86","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qFOx5tA9dMu0YOq46Pf2kJYRXLp5GaYjHmcCxFpcFkIbcwEdhUFoAW2sd2XlxtRW-0GzBrvfdx36UtyDuesRxf2f0AUT09qBZ8XNomyNiMu4dy0J6U-H6NHj4ZEyiSY-pI5CfyJFyCIs9buRkqUCoQ9ABJwys2yzCI94N4i8obYM1PpuaPUNwSm-KeInBLnkOWYU9ihu11GHnhPguvf452NTbc7vFCi87_MxS_k0P9kH4xLrArmzTuVhKIJ7PDktXHtevc5WfRHHOovn4sAdX4V9QQWUaKkSYO89pyfYgPXDmBkV-JUduyxs7vpI6LNBF1jKKJ2ihXLRumMSlEDCxw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '662'
    +      content-length: '674'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:45 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qd7km6xognz7oyzq4q3d66xn.vault.azure.net
    -        - /keys/testKeyf7e00e3a/create
    -        - api-version=7.0
    -        - ''
    +    url: https://aflg2ycm3wgzdynpexlthlxa.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -306,112 +257,91 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/b039f0542c6145eea85b67909ef8e4ab","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"7k7sJu5f0gl8stZHzScR2_MxZX677h7C-_XYQFO3RhTnJ_a4ZwcNLFLVBD9cDgyH8BZ-6zzN5Kh-6huu7bmQz8jbeeIisfXg5pawVkdOXlsfTjZK9ImAoGIiEmQXc9_uEs1_T-IYjHSdidd66yCTnvUzhdqM3OJHpFnfO0Yf-wolmogChRyu6qNKhC9kq6dYQiTyRxrQM9wzBycW8kLhecNsZVbGA_lkrPzdavr2g4lF7F0mWMHRIhHiyVzChgEm5x4H-7v0y6t57fYn-aubg0XL66STwDInpZ-580sh6yiVni-P2cPbSS9slEoZhSKUPjoZgi9uc8F6ibLOCitkOQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676606,"updated":1575676606,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/f552edef953b43b6b596029c58bf2fba","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"uXm3gU4JX8E4jTLzcOZpgcYJqUr5wTpe2TzNLw4MK41AoC3eFFlJbEqC5DnLGWWKJn6lwq_3iuHzgOztkKBEKzR00wvHF7Kns6ASecELHBaRTpn6jUkrfu0FrlD_PQ4Okn6ala5t5pDTKNhjhGB5gKn5AI2MPd0egRGAN9gbCOEgQgm-tr3CSPC2KT_o3kTDmywSQJzFbsRo0P1NrEXeQenCegMPu5LBtz-cjuXnEYxPdu1ZWSuU3o4pJr6lR_OcaGBW2OTYKhsvqpNJlv8XqmgKFTf58vAIGfDSaCFIxUMWfw-WcgIIm9e4p6K26R3VJlJ9wrnsTk4LFoB1QyKiJQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '662'
    +      content-length: '674'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:45 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qd7km6xognz7oyzq4q3d66xn.vault.azure.net
    -        - /keys/testKeyf7e00e3a/create
    -        - api-version=7.0
    -        - ''
    +    url: https://aflg2ycm3wgzdynpexlthlxa.vault.azure.net/keys/testKeyf7e00e3a/create?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/versions?api-version=7.0&maxresults=6
    +    uri: https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/versions?maxresults=6&api-version=7.1-preview
       response:
         body:
    -      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/0d315903a6244c20940607abe8907b34","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/1c6c4643e7c8486aaddb286e35864376","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/3cf9aa7c2fc6484fab247137756d05c9","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/a184e51263af41918ff89eaab4c6c2b2","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/b039f0542c6145eea85b67909ef8e4ab","attributes":{"enabled":true,"created":1575676606,"updated":1575676606,"recoveryLevel":"Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/b417fe400b0b4aea944ad1d04d1c864a","attributes":{"enabled":true,"created":1575676606,"updated":1575676606,"recoveryLevel":"Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/keys/testKeyf7e00e3a/versions?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXlJV3RsZVM5VVJWTlVTMFZaUmpkRk1EQkZNMEV2UTBGRk5ESkVNekJFUlVZek5EVkRNVUpGT1VZMlJUVkRRVUl3TUVWQ1FqVWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2giLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'
    +      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/0008c14aa90342d696e913cf6d725d86","attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/2b629e9824c64af99918f3ee123dee26","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/37a3b851bd524f50861dafa40a91682e","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/3b9f186af97d40a394260b26051b6cd4","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/86dc9e9c66014a82992dc2f02de09cdc","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/d7032efd642246e88172ba579b331123","attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/keys/testKeyf7e00e3a/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXlJV3RsZVM5VVJWTlVTMFZaUmpkRk1EQkZNMEV2UmpVMU1rVkVSVVk1TlROQ05ETkNOa0kxT1RZd01qbEROVGhDUmpKR1FrRWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2giLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'
         headers:
           cache-control: no-cache
    -      content-length: '1653'
    +      content-length: '1733'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:45 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qd7km6xognz7oyzq4q3d66xn.vault.azure.net
    -        - /keys/testKeyf7e00e3a/versions
    -        - api-version=7.0&maxresults=6
    -        - ''
    +    url: https://aflg2ycm3wgzdynpexlthlxa.vault.azure.net/keys/testKeyf7e00e3a/versions?maxresults=6&api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net:443/keys/testKeyf7e00e3a/versions?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXlJV3RsZVM5VVJWTlVTMFZaUmpkRk1EQkZNMEV2UTBGRk5ESkVNekJFUlVZek5EVkRNVUpGT1VZMlJUVkRRVUl3TUVWQ1FqVWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2giLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
    +    uri: https://vaultname.vault.azure.net:443/keys/testKeyf7e00e3a/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXlJV3RsZVM5VVJWTlVTMFZaUmpkRk1EQkZNMEV2UmpVMU1rVkVSVVk1TlROQ05ETkNOa0kxT1RZd01qbEROVGhDUmpKR1FrRWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2giLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
       response:
         body:
    -      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/cae42d30def345c1be9f6e5cab00ebb5","attributes":{"enabled":true,"created":1575676605,"updated":1575676605,"recoveryLevel":"Purgeable"}}],"nextLink":null}'
    +      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/testKeyf7e00e3a/f552edef953b43b6b596029c58bf2fba","attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
           cache-control: no-cache
    -      content-length: '240'
    +      content-length: '252'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:45 GMT
    +      date: Thu, 05 Mar 2020 23:16:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - qd7km6xognz7oyzq4q3d66xn.vault.azure.net:443
    -        - /keys/testKeyf7e00e3a/versions
    -        - api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXlJV3RsZVM5VVJWTlVTMFZaUmpkRk1EQkZNMEV2UTBGRk5ESkVNekJFUlVZek5EVkRNVUpGT1VZMlJUVkRRVUl3TUVWQ1FqVWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2giLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
    -        - ''
    +    url: https://aflg2ycm3wgzdynpexlthlxa.vault.azure.net:443/keys/testKeyf7e00e3a/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXlJV3RsZVM5VVJWTlVTMFZaUmpkRk1EQkZNMEV2UmpVMU1rVkVSVVk1TlROQ05ETkNOa0kxT1RZd01qbEROVGhDUmpKR1FrRWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2giLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_logging_disabled.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_logging_disabled.yaml
    index 15214ed7d8ed..88c608ecba00 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_logging_disabled.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_logging_disabled.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:47 GMT
    +      date: Thu, 05 Mar 2020 23:46:08 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,23 +29,16 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - ifqfeqmpj26uoclwl3jzpaum.vault.azure.net
    -        - /keys/rsa-key-name/create
    -        - api-version=7.0
    -        - ''
    +    url: https://wf5vmb7xo7ghavwyx77jyl4p.vault.azure.net/keys/rsa-key-name/create?api-version=7.1-preview
     - request:
    -    body: '{"key_size": 2048, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 2048}'
         headers:
           Accept:
           - application/json
    @@ -54,36 +47,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-key-name/62f6a649847e4a278dcda298326bcc58","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"o84yaF2-O0XIvbyyFI2lBm813LbLgQLLorQ2IUeIKFN8JPDeW8R4YEVh84SI1BTuKEpIi1XT_lRg3z0mkeuqHo-22wfCUUI9yhkEo1udwkWyBt9xoXJrT3oY490UKu3JaOB4PimnTacrs2aopmpxMb75iAWc6cMMhpkL4yn8LZZ5iu5MzHsjR193aezkhB01z8ec0Mn_F1OQXpCumIYBVURF5Efzp7ZKLa2PmXsOHCf3bae2ProrxrwFsDN9WV5X4mGoDPD59VVJzDZKUZnOi9q3IVw0r-XTDhPhgOZtPM4NKHmGijRn_45ULAXCsggPc8hbMdo0LCkLvrxGNxKVIQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676608,"updated":1575676608,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-key-name/ec68c35c7b3147aeac21be3d10673019","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"zo73DQRB-hznZWfFinqCp_PFgxRj_g4P5JjSdux1PwD8SqqirMUmrHcKPUv_uNYNIhNhf_3OeSkuvLipUY8YNFJniH1aChAmc8w792VZLDDn3mp7lohEbS9t21BG_HJDRbe56m3LUaCKrtYZ9Wfgv-DgpIatLZLXN10VTmf80_mj93Thx9c19kGC238idKo3TAitXDEdE27yd81y6XIvzoBTx7C1fLKitvG_J81NvcSIuASXvJRHqJyKWHSwejTr5X0jMO0PnsGggxbylj9B1ZwCy51Tm7hJEPHeV3_En51QmsaFIUYfYQktNSYIwb_X82bkZSxqjrTU803LdXcyzQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451969,"updated":1583451969,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '659'
    +      content-length: '671'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:56:48 GMT
    +      date: Thu, 05 Mar 2020 23:46:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - ifqfeqmpj26uoclwl3jzpaum.vault.azure.net
    -        - /keys/rsa-key-name/create
    -        - api-version=7.0
    -        - ''
    +    url: https://wf5vmb7xo7ghavwyx77jyl4p.vault.azure.net/keys/rsa-key-name/create?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_logging_enabled.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_logging_enabled.yaml
    index a0e27be57da5..2521638128c1 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_logging_enabled.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_logging_enabled.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:22 GMT
    +      date: Thu, 05 Mar 2020 23:16:27 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,23 +29,16 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hixbtijugknulsirlp4saklf.vault.azure.net
    -        - /keys/rsa-key-name/create
    -        - api-version=7.0
    -        - ''
    +    url: https://jozmxpkcunek7nvtxflj3ufr.vault.azure.net/keys/rsa-key-name/create?api-version=7.1-preview
     - request:
    -    body: '{"key_size": 2048, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 2048}'
         headers:
           Accept:
           - application/json
    @@ -54,36 +47,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/rsa-key-name/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-key-name/3de340e5c294410db860e7927aa34859","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"spVJaolODU8GEtFddEdwm9sVHR6i_WfB6JLZgd0Q-C4c34ZlTnr5YpXOaHTADIUwo7HUBfph0RgG0jjFBLACD42p8BxaBh2noIj7LNGggulq6nY4i34E2zjSgUWBFACG-xJ9CKBNBLrwp42lF9F84DKufO1yGWfVI_v9VkJJdb_f-8LdiVuKa8L19Blq973IwuLZEd1LQdRGk-SkBWJg4AkOTO3gqIVcxDOq5JT_iyVT_x2olHhP3QDaLlU97dgw3IOwOB5e0XZk5gw_cIRK27p_b_jxIGBPH3kv9i1sHcWKyBveQoG5w0NzO8RGy1T6m8RqT9HhLd_XKsw2iRW5Pw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676644,"updated":1575676644,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/rsa-key-name/15afda344c0448a0948085f3f3cc94a7","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"249Wt5A8z-3HAzh1ACfRCsKj5Ulk50MD86nt9OhOAuzN9nd_vp_uCxhoOdVyB7n4W5nNr9CW4I5VhZUj_bsAz4tGRdhyuueiyTzTBQKY3u-0lgSD1wbpI64rl_TBZPxDz50mY0l9T7h7u78M8nxlEamKxw7n8kymcnZTCo05sX4sCy5_hCGTOpXzrdztylgqBK_VOhJbwo8AlV9bwzelThg4wwPB3Dx9VgAc1J0J0IgRY90FbVpX46Hqb4PiLN2sUVTCus67aAQo7kRO-S7SDLuTuvZkcnvcccPb57v85pGMlnBqMyL9sPpGOwFfsax0Hbh1qHO37RpN5GwY7cKUEQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '659'
    +      content-length: '671'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:23 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - hixbtijugknulsirlp4saklf.vault.azure.net
    -        - /keys/rsa-key-name/create
    -        - api-version=7.0
    -        - ''
    +    url: https://jozmxpkcunek7nvtxflj3ufr.vault.azure.net/keys/rsa-key-name/create?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_purge.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_purge.yaml
    index 0dc787b43f9b..bc4546c77060 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_purge.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_purge.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:20 GMT
    +      date: Thu, 05 Mar 2020 23:16:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key0/create
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key0/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -54,38 +47,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/8eaf2dcb2c72446aae67a820bf7acf30","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xQzFpqjFRZ4yJfADEfIFhQ0FJExhJHZYlj-QjkGpHJHkGCv68OjJQxTEk1quvxeHVixvJBsZ2_LuENgk8Ll9NvmTSzkN4R3dt2U8mECqtTtTAJsoY_63ebGP4YepXzgM8uAL7BNCclNKyl6NWqZMJvfmQjoZttU0ZqGK7t-4I3atm6tLHWQX3cVsanWgOUp0nMmS6Ucm7OAK_a1UklrJlGjM5NyVjumHTDjRq6rvNJNz6AWUvtkhtfIuhFnoBvK00nJZQKM_txjSZddF9YWZj0KIQxPM-l47OXjzlDTx6DniliBf78UyEms7Y7IMzO7pxUtJSgH-oDbfP3ZKh8qMnQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/2074db8422994dd4841c63c7a2576696","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5eOXAu0YOkxAPSn47v9ME7NwwbCZvKn4zgdCBHX5X-ZxsixqRny9L_DtuLsYEnSDcOtPEf6cwc0EPScRq2as6TdruZv0B5EFcmoeiK4E7SicWaJWdkVnFuY1G1I3HodACKfAVgOBwbk9eaW6ZSCmGFb7lzXGYMVfs5jS0xtUjdAs1-IYVle30BgzE87VTkR0_lV0tkwAZ1BO3lNUAgPq5xmw6vRZYZ0FTXYCnU8xqWMuupweRWHPeb9wwCktCcV852dIisYcihh-Szdyc4rJMgc3B9DUKjtz_MSrmpRxvHjGobbxERDUboageYYY_8PAB_wapP7v4qeTl3qZqpt2mQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:21 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key0/create
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key0/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -96,38 +82,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/7c67c4d6680e48c18b03c50570d9c69a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kumcHZjOnK0YJCPPxSBFPFOFl6wpd1UjqgEiLRULiHtCWve3Y7DZ1jei9vPeabZdz0ztMJtje3NtNveKNP_Igql4ZN2Q28tsnJMF4eYzJH3HF_WC-azVF3iCaQyD6rCmbaGEq20Fd2wcmtf-f9NL83XBjQ_YNTPRqSS1mY_dCX9n5s26UvuvuPjzMXkZ_EdUZ4UwNtYhY8wN5TvF7y7KXdtYd43olk7QMmvEi1oLn7Pm9SfzgQ0dF8nu5Sl9myHoeHnyr_2n8YGcxuhbLbFwRWTmdQZ8OHvHpRSy-IwNiBwbWrTdBoSjWLNcr4etM9gaEJ1cehZVgSuCxawY6kIs4w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/0fd5f299c0df4dbb860b193b73da40ca","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"m6rn2Ozsst0WAnmPHOOsqFscqWfPkYirNwr7eKRyFKbQxD4zH92rvNMiKM52ymD1407AePnWza-d1QPykDwQs9wVtUNi7OvZlHNsfpofnw6HHIpAJxtYbYdFqRzN1oUV5cdgG1fDrsG92JqwsueCeZbj6Cunnn0MWkgRW-FIIWryNa99FaHmRYkMd1Hhb9NwwAewRBQY1siOWUMGzfo-4gXd5948fkTmmYBBNRPSGPYyYEPo97yJOO32uHBq6FajsRQzBzWo_vgxUmKloAyoPdSYvQvIFranaqyTcQAJIlTyBMKq7OaY_G2Tle96LJwDt7McbVfiTJ16-PK3yX_mjw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:21 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key1/create
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key1/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -138,38 +117,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/4f6d74b427b64d7290ac3c0a998325c6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vbTDwHpQ4hZ67vVh4DwM4vxG37v919i8UyqCka3FuTRp5IHLZoU2Fz35WkNBPOcJu93uE_DxwuORkqpOK2S_bwVBY5PF81IlqYSfZYKjv_p-7vw_tn087xd5vxlJKv2YAg-rkMhZ1vPDTkJCbtpKR_4rw1udkWsXd_xDX9csnjBlPrue3E1jfHkanwssf1oKtvEIl-mY11bAIaCSttXQNSuQnShVvA0yde51oCh8lNX4nTTqCM5tMzVpjALO5wMK3PwJ441Kuc9qXDmjcnXfBARrKL0tO5IigRRGr8InfMLSMiooUxx11bReWvD1sg3N0A61bzG-e5enW8kMVwiRfw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/6d4af59237a7462bb415e82ab2d2588d","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"6SbFraTdaBpnCl-YvOJQzWMdy0oWOM2ldXuqIl-t73vr34OgFIyk8PIRShqtEMyFGx8VWPXY4UFmhuaybqqqo6WrLHFNG_jsyz8hB1wMpbNkf-2pWx2rnhCbuhWintnwOh0ClZ8Ytk85v819AgAD7wjPXFvVWSI6R3oV29AvyUVeY0h_yVez7WFTDGcAivAFdsUJGasL3o5-ZAwgjuUqVkDUesPPjbxRzzOTZn64fTVjjX8JrK0_OTXxxbGy1iP-fkkKfEdesZUzZ2kNs_o77Hjo_quNlliqjNUh8Qmp5LoQIeDyhSnLjL4IZ5JF7SWKRb97k0xtlK7IfIyVp_O04Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:21 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key2/create
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key2/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -180,38 +152,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/4e6b5f28ba7641048be422143e62c9eb","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nRi5T4cWozEOMwie9s30L5rQGJyCAolz22fO0uyDDhfH5ueHOWbLG0KY27ez_duAoSm0wBe9ki_mVRo0AhRhkt23Ubjs1GeHf0Q1MG0YTLCrJq3R5TmywR1BZdoc1Y04fXynE-221ePJEMD9oz0TMHm1c7vdebStxixPjZC1CHvQBnRAzgf-QtSD8etjTjARS3wCvtlEkv6-Kyv50O22NUUd3wuuOqVR9ZC6yz4obYhASuH61zO2t7knjUlXLcvcV2kmeGrzvHYaW5njDLbAqMUdRO4yAvNPcKVIJtw93vGjCquqtmeiL9H6LwR5La7x7ncTXhZMBKZqdNIMsIzxXQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/b6456e272c73498e9d5a484a28cd137a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sll7VwKt5Q2UVG800ooFZc9aj1Bp_b8nsccNeHpxMfIYdrGM3vzV6xjEo3YBYRnplg0qvn8JFdEXM5piL1qBrhZv_reZinOisTX3RtKZ3MQHc_rzSqZ41QI4HMO32UyKxIQ3cYbe5PJM2MLWX2IsFtmqNlo2w74m1FXRnm0QHsxHLdEpS-fxpA4_taNlOnIfBMngrSR2kxMf2ypY3ACImzzWCnrNekVPVEtqKoemqnauGhF-g4HZTtgdte-055lqDbXQxAVDm5EGoTqWFx2MrCENfnOYBvvOxQPu8e8YHdFhl743gYcSXEP5l7SI5buf-MClZIgVM8ZY2GGPJL28RQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:21 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key3/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -222,38 +187,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/bf1f43d66a294d558d5a86aa0e2eda55","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tfIo0ZdfBW8gpjRenND36lVHRFsaA16mIgGy_qHkLHAup_9W5N5E3cJpbg1VQ9G3B2ez_AIxzZQhbdcpElxLpHtxpBJn7w-TqsZP-u9v_8AX-gUK5xwhkOYAwIkWc-iP70kX5M4GxxPB5LR4S9e65QxLLp_Ys3I3weFinwzczVM47wTFdwUhmt70L5RfrN2u_cpSuFLHNQLn5g5eHMZoaGJbwJKz3ujtLoQ0Dhu38g040tTMSqDBj4si_47eEHBeFGR6xPX6w4x4fpYlmSr3q_z_tQn-nAqg6PQ53Hd0-SE8vuhp2WJ-TZrUGJ7V4OdeDW-MFXFe3N5jivDkRk8LEw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/dfede5f3f3bd4500b9e78688f96f5736","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"6n3PnygjkF0PCyLuPzZX7tXUTTK0lDr9eKsdKJ1iugMxHwOuEja7njN-UWlepl767SloymuFDj8CHEa1BJ4R3NW_dORXxtB7uxPTBHV0YnCPN0b5k9bR4jgB9MSORBK0U4OAQRCOM53-2RurS7H19vDeIlibCawfbVqXXJjmnhmW7ymQlyQ5EnuPEcz6t-lMINbNcBkDmBSDpypEzDklrBlfpGkzKeb02UHVcBIXUoy-35r-mZAy3_OMmI5PvLzq8ZFURYZmxgAn1VFX1nMIod78AhUGp51xaPpn8EYdrU-Ay2aM9V63byPlffgylCbQTGnXbDeV9jnOWGg6AbJriQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450194,"updated":1583450194,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:21 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key4/create
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key4/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -264,38 +222,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/70edf662250a438db5b5aa0e3c97b25a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"uGh5Qnj-0BAqdIkMzLoBr-FihBbEfqnVJlptzAACZWbf7d4R7IxVLCnSk26osyor9GZ9vRykK1z0SrYKnWbWkHM04h6CzWhwKwOAYGy-G3fn5ZVD_ew9e-UtLBf1TOt5jAkzycY4dHmgaOUHqYti4vcTN3dravv4h0w8hNpprzKA5800_ERSe04s3OI-Pag_i_Ac6KI4xGcelmFT0WzO-t7cg_sYA_oTciEw3g7GUVsylHGbaIecs0kTs-46_vnwiRJQCrCH31HBluC9Mc9WJbN-aKldqCIzY8EmJGMcL0V8OsunTX_qev7ON86nTCvvHhKsCuuuOSmcxlTWwj6L6w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/05c1b009d04a496cbcff31baa16a5ff1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ky_A2A-5kROAv6b3yhaGIRt1nfX7EJNfsWf5PZ1D250ohnoce8Yr8iNMiaNOOX-7pcw8yMoLliiJyT5kicVeXiZz-xVM5SIFS_oppTHM4K4wmmiH8hFCi3vEdpQqNs3Q0K39odaQ7TQdyXiTXXYVlKDjdxI6qG5zKzVQ2Osk8Z_hXUmK3__7k_TGDrEx2YgG5eq3HBT525rH4LH_3Xjv5V2EiLBs-y-slAnifipmIng8Ns2DalmagWjur3V4Z76a9l44FmRc5eDWzFs2RPNMdrm6x4A0_B_sBHD3mDZi3OOXasNpi3m8pe-x7b1eYGTnkCzsLA5Kerhif0eeK3TeAw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450194,"updated":1583450194,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:22 GMT
    +      date: Thu, 05 Mar 2020 23:16:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key5/create
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key5/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -306,2441 +257,2024 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/9618691ccf624bc4a975faab5e27db31","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4Mf_LEE125RLp9kpFchmnUbSB_nth1SK8JQOmdVP26LAMwE9C--_nJRy12-ZfBO9tvt_o-gqnNS91viwsKFELFc09ht6U7nBKrH8jhGwhVvF-6eJWX5MK_oSEcinhzMmLu5W9Nhjb4T-ZheH9Mi60U-pXPfQv-Lh49mhkiJzWkCXxl16h_4XDVVOFMM4ZHV9zTScHOgYckLl_5NFx-O52eDm6WpvOpVKIlwBQs4dk7_fs9ww3f5YcQ4c2PzFGJtQUnGEOvUAxjA2vw3F6ejAqCA_g-_cJm5adncVdKuWQJr2wXDAGvmnhWZ1ciEweRqt0eUkhz2407iXL2vOXZR3pw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/b388b8d0793a4541b0ac02253c6ac3e1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qqKkRwRMdG0dLg0INw1YcLA8ey9Db1Ed2ClsOiuCrU4LMEBWm3_uO-I09bc9kNXytthxe2eBqYPJ5uPxhRcvFdNtPyzTzQrvwzVwVtGAL5NZgDdxGhAgJ8aeTk9lKUSFd3a4CbyrOdcyY0l3jydRjMBwEU-yImp88hYDinWA7p_nuEKQA-wTPEGt_LPp5k2O1Cbm-qu0G0ZAB1tkp-c3etQattGhZGvLVBRhzwk3Bh5XZp5sfrqRuYnFuqI3xbuUbeIThQA5PIX-k4ZhH6xSw4gj2jYzgGIPLCp0rFxr0NBltVdm7gHdIITicnN8WM-NRY7ylgU26_LWXPXgD1K9Kw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450194,"updated":1583450194,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:22 GMT
    +      date: Thu, 05 Mar 2020 23:16:34 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key6/create
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key6/create?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676642,"scheduledPurgeDate":1583452642,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/70edf662250a438db5b5aa0e3c97b25a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"uGh5Qnj-0BAqdIkMzLoBr-FihBbEfqnVJlptzAACZWbf7d4R7IxVLCnSk26osyor9GZ9vRykK1z0SrYKnWbWkHM04h6CzWhwKwOAYGy-G3fn5ZVD_ew9e-UtLBf1TOt5jAkzycY4dHmgaOUHqYti4vcTN3dravv4h0w8hNpprzKA5800_ERSe04s3OI-Pag_i_Ac6KI4xGcelmFT0WzO-t7cg_sYA_oTciEw3g7GUVsylHGbaIecs0kTs-46_vnwiRJQCrCH31HBluC9Mc9WJbN-aKldqCIzY8EmJGMcL0V8OsunTX_qev7ON86nTCvvHhKsCuuuOSmcxlTWwj6L6w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583450194,"scheduledPurgeDate":1591226194,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/2074db8422994dd4841c63c7a2576696","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5eOXAu0YOkxAPSn47v9ME7NwwbCZvKn4zgdCBHX5X-ZxsixqRny9L_DtuLsYEnSDcOtPEf6cwc0EPScRq2as6TdruZv0B5EFcmoeiK4E7SicWaJWdkVnFuY1G1I3HodACKfAVgOBwbk9eaW6ZSCmGFb7lzXGYMVfs5jS0xtUjdAs1-IYVle30BgzE87VTkR0_lV0tkwAZ1BO3lNUAgPq5xmw6vRZYZ0FTXYCnU8xqWMuupweRWHPeb9wwCktCcV852dIisYcihh-Szdyc4rJMgc3B9DUKjtz_MSrmpRxvHjGobbxERDUboageYYY_8PAB_wapP7v4qeTl3qZqpt2mQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:22 GMT
    +      date: Thu, 05 Mar 2020 23:16:34 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:22 GMT
    +      date: Thu, 05 Mar 2020 23:16:34 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:24 GMT
    +      date: Thu, 05 Mar 2020 23:16:36 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:26 GMT
    +      date: Thu, 05 Mar 2020 23:16:38 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:28 GMT
    +      date: Thu, 05 Mar 2020 23:16:40 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:30 GMT
    +      date: Thu, 05 Mar 2020 23:16:41 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:32 GMT
    +      date: Thu, 05 Mar 2020 23:16:44 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:34 GMT
    +      date: Thu, 05 Mar 2020 23:16:46 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:36 GMT
    +      date: Thu, 05 Mar 2020 23:16:48 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:38 GMT
    +      date: Thu, 05 Mar 2020 23:16:50 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:40 GMT
    +      date: Thu, 05 Mar 2020 23:16:52 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:42 GMT
    +      date: Thu, 05 Mar 2020 23:16:54 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:44 GMT
    +      date: Thu, 05 Mar 2020 23:16:56 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676642,"scheduledPurgeDate":1583452642,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/70edf662250a438db5b5aa0e3c97b25a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"uGh5Qnj-0BAqdIkMzLoBr-FihBbEfqnVJlptzAACZWbf7d4R7IxVLCnSk26osyor9GZ9vRykK1z0SrYKnWbWkHM04h6CzWhwKwOAYGy-G3fn5ZVD_ew9e-UtLBf1TOt5jAkzycY4dHmgaOUHqYti4vcTN3dravv4h0w8hNpprzKA5800_ERSe04s3OI-Pag_i_Ac6KI4xGcelmFT0WzO-t7cg_sYA_oTciEw3g7GUVsylHGbaIecs0kTs-46_vnwiRJQCrCH31HBluC9Mc9WJbN-aKldqCIzY8EmJGMcL0V8OsunTX_qev7ON86nTCvvHhKsCuuuOSmcxlTWwj6L6w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:46 GMT
    +      date: Thu, 05 Mar 2020 23:16:59 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key6?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676669,"scheduledPurgeDate":1583452669,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/9618691ccf624bc4a975faab5e27db31","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4Mf_LEE125RLp9kpFchmnUbSB_nth1SK8JQOmdVP26LAMwE9C--_nJRy12-ZfBO9tvt_o-gqnNS91viwsKFELFc09ht6U7nBKrH8jhGwhVvF-6eJWX5MK_oSEcinhzMmLu5W9Nhjb4T-ZheH9Mi60U-pXPfQv-Lh49mhkiJzWkCXxl16h_4XDVVOFMM4ZHV9zTScHOgYckLl_5NFx-O52eDm6WpvOpVKIlwBQs4dk7_fs9ww3f5YcQ4c2PzFGJtQUnGEOvUAxjA2vw3F6ejAqCA_g-_cJm5adncVdKuWQJr2wXDAGvmnhWZ1ciEweRqt0eUkhz2407iXL2vOXZR3pw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:48 GMT
    +      date: Thu, 05 Mar 2020 23:17:00 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key6
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:48 GMT
    +      date: Thu, 05 Mar 2020 23:17:03 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:50 GMT
    +      date: Thu, 05 Mar 2020 23:17:05 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:52 GMT
    +      date: Thu, 05 Mar 2020 23:17:07 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:54 GMT
    +      date: Thu, 05 Mar 2020 23:17:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583450194,"scheduledPurgeDate":1591226194,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/2074db8422994dd4841c63c7a2576696","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5eOXAu0YOkxAPSn47v9ME7NwwbCZvKn4zgdCBHX5X-ZxsixqRny9L_DtuLsYEnSDcOtPEf6cwc0EPScRq2as6TdruZv0B5EFcmoeiK4E7SicWaJWdkVnFuY1G1I3HodACKfAVgOBwbk9eaW6ZSCmGFb7lzXGYMVfs5jS0xtUjdAs1-IYVle30BgzE87VTkR0_lV0tkwAZ1BO3lNUAgPq5xmw6vRZYZ0FTXYCnU8xqWMuupweRWHPeb9wwCktCcV852dIisYcihh-Szdyc4rJMgc3B9DUKjtz_MSrmpRxvHjGobbxERDUboageYYY_8PAB_wapP7v4qeTl3qZqpt2mQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:56 GMT
    +      date: Thu, 05 Mar 2020 23:17:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583450231,"scheduledPurgeDate":1591226231,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/0fd5f299c0df4dbb860b193b73da40ca","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"m6rn2Ozsst0WAnmPHOOsqFscqWfPkYirNwr7eKRyFKbQxD4zH92rvNMiKM52ymD1407AePnWza-d1QPykDwQs9wVtUNi7OvZlHNsfpofnw6HHIpAJxtYbYdFqRzN1oUV5cdgG1fDrsG92JqwsueCeZbj6Cunnn0MWkgRW-FIIWryNa99FaHmRYkMd1Hhb9NwwAewRBQY1siOWUMGzfo-4gXd5948fkTmmYBBNRPSGPYyYEPo97yJOO32uHBq6FajsRQzBzWo_vgxUmKloAyoPdSYvQvIFranaqyTcQAJIlTyBMKq7OaY_G2Tle96LJwDt7McbVfiTJ16-PK3yX_mjw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:58 GMT
    +      date: Thu, 05 Mar 2020 23:17:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:01 GMT
    +      date: Thu, 05 Mar 2020 23:17:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:03 GMT
    +      date: Thu, 05 Mar 2020 23:17:13 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:05 GMT
    +      date: Thu, 05 Mar 2020 23:17:15 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:07 GMT
    +      date: Thu, 05 Mar 2020 23:17:17 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676669,"scheduledPurgeDate":1583452669,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/9618691ccf624bc4a975faab5e27db31","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4Mf_LEE125RLp9kpFchmnUbSB_nth1SK8JQOmdVP26LAMwE9C--_nJRy12-ZfBO9tvt_o-gqnNS91viwsKFELFc09ht6U7nBKrH8jhGwhVvF-6eJWX5MK_oSEcinhzMmLu5W9Nhjb4T-ZheH9Mi60U-pXPfQv-Lh49mhkiJzWkCXxl16h_4XDVVOFMM4ZHV9zTScHOgYckLl_5NFx-O52eDm6WpvOpVKIlwBQs4dk7_fs9ww3f5YcQ4c2PzFGJtQUnGEOvUAxjA2vw3F6ejAqCA_g-_cJm5adncVdKuWQJr2wXDAGvmnhWZ1ciEweRqt0eUkhz2407iXL2vOXZR3pw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:09 GMT
    +      date: Thu, 05 Mar 2020 23:17:19 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key3?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/4e6b5f28ba7641048be422143e62c9eb","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nRi5T4cWozEOMwie9s30L5rQGJyCAolz22fO0uyDDhfH5ueHOWbLG0KY27ez_duAoSm0wBe9ki_mVRo0AhRhkt23Ubjs1GeHf0Q1MG0YTLCrJq3R5TmywR1BZdoc1Y04fXynE-221ePJEMD9oz0TMHm1c7vdebStxixPjZC1CHvQBnRAzgf-QtSD8etjTjARS3wCvtlEkv6-Kyv50O22NUUd3wuuOqVR9ZC6yz4obYhASuH61zO2t7knjUlXLcvcV2kmeGrzvHYaW5njDLbAqMUdRO4yAvNPcKVIJtw93vGjCquqtmeiL9H6LwR5La7x7ncTXhZMBKZqdNIMsIzxXQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:12 GMT
    +      date: Thu, 05 Mar 2020 23:17:22 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key3
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:12 GMT
    +      date: Thu, 05 Mar 2020 23:17:23 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:14 GMT
    +      date: Thu, 05 Mar 2020 23:17:25 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:16 GMT
    +      date: Thu, 05 Mar 2020 23:17:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:18 GMT
    +      date: Thu, 05 Mar 2020 23:17:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:20 GMT
    +      date: Thu, 05 Mar 2020 23:17:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:22 GMT
    +      date: Thu, 05 Mar 2020 23:17:34 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:24 GMT
    +      date: Thu, 05 Mar 2020 23:17:35 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/4e6b5f28ba7641048be422143e62c9eb","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"nRi5T4cWozEOMwie9s30L5rQGJyCAolz22fO0uyDDhfH5ueHOWbLG0KY27ez_duAoSm0wBe9ki_mVRo0AhRhkt23Ubjs1GeHf0Q1MG0YTLCrJq3R5TmywR1BZdoc1Y04fXynE-221ePJEMD9oz0TMHm1c7vdebStxixPjZC1CHvQBnRAzgf-QtSD8etjTjARS3wCvtlEkv6-Kyv50O22NUUd3wuuOqVR9ZC6yz4obYhASuH61zO2t7knjUlXLcvcV2kmeGrzvHYaW5njDLbAqMUdRO4yAvNPcKVIJtw93vGjCquqtmeiL9H6LwR5La7x7ncTXhZMBKZqdNIMsIzxXQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583450231,"scheduledPurgeDate":1591226231,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/0fd5f299c0df4dbb860b193b73da40ca","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"m6rn2Ozsst0WAnmPHOOsqFscqWfPkYirNwr7eKRyFKbQxD4zH92rvNMiKM52ymD1407AePnWza-d1QPykDwQs9wVtUNi7OvZlHNsfpofnw6HHIpAJxtYbYdFqRzN1oUV5cdgG1fDrsG92JqwsueCeZbj6Cunnn0MWkgRW-FIIWryNa99FaHmRYkMd1Hhb9NwwAewRBQY1siOWUMGzfo-4gXd5948fkTmmYBBNRPSGPYyYEPo97yJOO32uHBq6FajsRQzBzWo_vgxUmKloAyoPdSYvQvIFranaqyTcQAJIlTyBMKq7OaY_G2Tle96LJwDt7McbVfiTJ16-PK3yX_mjw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:38 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/7c67c4d6680e48c18b03c50570d9c69a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kumcHZjOnK0YJCPPxSBFPFOFl6wpd1UjqgEiLRULiHtCWve3Y7DZ1jei9vPeabZdz0ztMJtje3NtNveKNP_Igql4ZN2Q28tsnJMF4eYzJH3HF_WC-azVF3iCaQyD6rCmbaGEq20Fd2wcmtf-f9NL83XBjQ_YNTPRqSS1mY_dCX9n5s26UvuvuPjzMXkZ_EdUZ4UwNtYhY8wN5TvF7y7KXdtYd43olk7QMmvEi1oLn7Pm9SfzgQ0dF8nu5Sl9myHoeHnyr_2n8YGcxuhbLbFwRWTmdQZ8OHvHpRSy-IwNiBwbWrTdBoSjWLNcr4etM9gaEJ1cehZVgSuCxawY6kIs4w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583450258,"scheduledPurgeDate":1591226258,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/6d4af59237a7462bb415e82ab2d2588d","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"6SbFraTdaBpnCl-YvOJQzWMdy0oWOM2ldXuqIl-t73vr34OgFIyk8PIRShqtEMyFGx8VWPXY4UFmhuaybqqqo6WrLHFNG_jsyz8hB1wMpbNkf-2pWx2rnhCbuhWintnwOh0ClZ8Ytk85v819AgAD7wjPXFvVWSI6R3oV29AvyUVeY0h_yVez7WFTDGcAivAFdsUJGasL3o5-ZAwgjuUqVkDUesPPjbxRzzOTZn64fTVjjX8JrK0_OTXxxbGy1iP-fkkKfEdesZUzZ2kNs_o77Hjo_quNlliqjNUh8Qmp5LoQIeDyhSnLjL4IZ5JF7SWKRb97k0xtlK7IfIyVp_O04Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:28 GMT
    +      date: Thu, 05 Mar 2020 23:17:38 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:28 GMT
    +      date: Thu, 05 Mar 2020 23:17:38 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:30 GMT
    +      date: Thu, 05 Mar 2020 23:17:40 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:32 GMT
    +      date: Thu, 05 Mar 2020 23:17:42 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:34 GMT
    +      date: Thu, 05 Mar 2020 23:17:44 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:36 GMT
    +      date: Thu, 05 Mar 2020 23:17:46 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:38 GMT
    +      date: Thu, 05 Mar 2020 23:17:49 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:40 GMT
    +      date: Thu, 05 Mar 2020 23:17:50 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:42 GMT
    +      date: Thu, 05 Mar 2020 23:17:53 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:44 GMT
    +      date: Thu, 05 Mar 2020 23:17:55 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:46 GMT
    +      date: Thu, 05 Mar 2020 23:17:56 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/7c67c4d6680e48c18b03c50570d9c69a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kumcHZjOnK0YJCPPxSBFPFOFl6wpd1UjqgEiLRULiHtCWve3Y7DZ1jei9vPeabZdz0ztMJtje3NtNveKNP_Igql4ZN2Q28tsnJMF4eYzJH3HF_WC-azVF3iCaQyD6rCmbaGEq20Fd2wcmtf-f9NL83XBjQ_YNTPRqSS1mY_dCX9n5s26UvuvuPjzMXkZ_EdUZ4UwNtYhY8wN5TvF7y7KXdtYd43olk7QMmvEi1oLn7Pm9SfzgQ0dF8nu5Sl9myHoeHnyr_2n8YGcxuhbLbFwRWTmdQZ8OHvHpRSy-IwNiBwbWrTdBoSjWLNcr4etM9gaEJ1cehZVgSuCxawY6kIs4w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:48 GMT
    +      date: Thu, 05 Mar 2020 23:17:58 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key2?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676731,"scheduledPurgeDate":1583452731,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/4f6d74b427b64d7290ac3c0a998325c6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vbTDwHpQ4hZ67vVh4DwM4vxG37v919i8UyqCka3FuTRp5IHLZoU2Fz35WkNBPOcJu93uE_DxwuORkqpOK2S_bwVBY5PF81IlqYSfZYKjv_p-7vw_tn087xd5vxlJKv2YAg-rkMhZ1vPDTkJCbtpKR_4rw1udkWsXd_xDX9csnjBlPrue3E1jfHkanwssf1oKtvEIl-mY11bAIaCSttXQNSuQnShVvA0yde51oCh8lNX4nTTqCM5tMzVpjALO5wMK3PwJ441Kuc9qXDmjcnXfBARrKL0tO5IigRRGr8InfMLSMiooUxx11bReWvD1sg3N0A61bzG-e5enW8kMVwiRfw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583450258,"scheduledPurgeDate":1591226258,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/6d4af59237a7462bb415e82ab2d2588d","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"6SbFraTdaBpnCl-YvOJQzWMdy0oWOM2ldXuqIl-t73vr34OgFIyk8PIRShqtEMyFGx8VWPXY4UFmhuaybqqqo6WrLHFNG_jsyz8hB1wMpbNkf-2pWx2rnhCbuhWintnwOh0ClZ8Ytk85v819AgAD7wjPXFvVWSI6R3oV29AvyUVeY0h_yVez7WFTDGcAivAFdsUJGasL3o5-ZAwgjuUqVkDUesPPjbxRzzOTZn64fTVjjX8JrK0_OTXxxbGy1iP-fkkKfEdesZUzZ2kNs_o77Hjo_quNlliqjNUh8Qmp5LoQIeDyhSnLjL4IZ5JF7SWKRb97k0xtlK7IfIyVp_O04Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:51 GMT
    +      date: Thu, 05 Mar 2020 23:18:03 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583450283,"scheduledPurgeDate":1591226283,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/b6456e272c73498e9d5a484a28cd137a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sll7VwKt5Q2UVG800ooFZc9aj1Bp_b8nsccNeHpxMfIYdrGM3vzV6xjEo3YBYRnplg0qvn8JFdEXM5piL1qBrhZv_reZinOisTX3RtKZ3MQHc_rzSqZ41QI4HMO32UyKxIQ3cYbe5PJM2MLWX2IsFtmqNlo2w74m1FXRnm0QHsxHLdEpS-fxpA4_taNlOnIfBMngrSR2kxMf2ypY3ACImzzWCnrNekVPVEtqKoemqnauGhF-g4HZTtgdte-055lqDbXQxAVDm5EGoTqWFx2MrCENfnOYBvvOxQPu8e8YHdFhl743gYcSXEP5l7SI5buf-MClZIgVM8ZY2GGPJL28RQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:51 GMT
    +      date: Thu, 05 Mar 2020 23:18:03 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:53 GMT
    +      date: Thu, 05 Mar 2020 23:18:03 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:55 GMT
    +      date: Thu, 05 Mar 2020 23:18:05 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:57 GMT
    +      date: Thu, 05 Mar 2020 23:18:07 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:59 GMT
    +      date: Thu, 05 Mar 2020 23:18:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:01 GMT
    +      date: Thu, 05 Mar 2020 23:18:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:03 GMT
    +      date: Thu, 05 Mar 2020 23:18:14 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:05 GMT
    +      date: Thu, 05 Mar 2020 23:18:16 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:07 GMT
    +      date: Thu, 05 Mar 2020 23:18:18 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676731,"scheduledPurgeDate":1583452731,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/4f6d74b427b64d7290ac3c0a998325c6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vbTDwHpQ4hZ67vVh4DwM4vxG37v919i8UyqCka3FuTRp5IHLZoU2Fz35WkNBPOcJu93uE_DxwuORkqpOK2S_bwVBY5PF81IlqYSfZYKjv_p-7vw_tn087xd5vxlJKv2YAg-rkMhZ1vPDTkJCbtpKR_4rw1udkWsXd_xDX9csnjBlPrue3E1jfHkanwssf1oKtvEIl-mY11bAIaCSttXQNSuQnShVvA0yde51oCh8lNX4nTTqCM5tMzVpjALO5wMK3PwJ441Kuc9qXDmjcnXfBARrKL0tO5IigRRGr8InfMLSMiooUxx11bReWvD1sg3N0A61bzG-e5enW8kMVwiRfw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:09 GMT
    +      date: Thu, 05 Mar 2020 23:18:19 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key4?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/bf1f43d66a294d558d5a86aa0e2eda55","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tfIo0ZdfBW8gpjRenND36lVHRFsaA16mIgGy_qHkLHAup_9W5N5E3cJpbg1VQ9G3B2ez_AIxzZQhbdcpElxLpHtxpBJn7w-TqsZP-u9v_8AX-gUK5xwhkOYAwIkWc-iP70kX5M4GxxPB5LR4S9e65QxLLp_Ys3I3weFinwzczVM47wTFdwUhmt70L5RfrN2u_cpSuFLHNQLn5g5eHMZoaGJbwJKz3ujtLoQ0Dhu38g040tTMSqDBj4si_47eEHBeFGR6xPX6w4x4fpYlmSr3q_z_tQn-nAqg6PQ53Hd0-SE8vuhp2WJ-TZrUGJ7V4OdeDW-MFXFe3N5jivDkRk8LEw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:11 GMT
    +      date: Thu, 05 Mar 2020 23:18:21 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key4
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:11 GMT
    +      date: Thu, 05 Mar 2020 23:18:24 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:13 GMT
    +      date: Thu, 05 Mar 2020 23:18:26 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583450283,"scheduledPurgeDate":1591226283,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/b6456e272c73498e9d5a484a28cd137a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sll7VwKt5Q2UVG800ooFZc9aj1Bp_b8nsccNeHpxMfIYdrGM3vzV6xjEo3YBYRnplg0qvn8JFdEXM5piL1qBrhZv_reZinOisTX3RtKZ3MQHc_rzSqZ41QI4HMO32UyKxIQ3cYbe5PJM2MLWX2IsFtmqNlo2w74m1FXRnm0QHsxHLdEpS-fxpA4_taNlOnIfBMngrSR2kxMf2ypY3ACImzzWCnrNekVPVEtqKoemqnauGhF-g4HZTtgdte-055lqDbXQxAVDm5EGoTqWFx2MrCENfnOYBvvOxQPu8e8YHdFhl743gYcSXEP5l7SI5buf-MClZIgVM8ZY2GGPJL28RQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450193,"updated":1583450193,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:15 GMT
    +      date: Thu, 05 Mar 2020 23:18:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583450308,"scheduledPurgeDate":1591226308,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/dfede5f3f3bd4500b9e78688f96f5736","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"6n3PnygjkF0PCyLuPzZX7tXUTTK0lDr9eKsdKJ1iugMxHwOuEja7njN-UWlepl767SloymuFDj8CHEa1BJ4R3NW_dORXxtB7uxPTBHV0YnCPN0b5k9bR4jgB9MSORBK0U4OAQRCOM53-2RurS7H19vDeIlibCawfbVqXXJjmnhmW7ymQlyQ5EnuPEcz6t-lMINbNcBkDmBSDpypEzDklrBlfpGkzKeb02UHVcBIXUoy-35r-mZAy3_OMmI5PvLzq8ZFURYZmxgAn1VFX1nMIod78AhUGp51xaPpn8EYdrU-Ay2aM9V63byPlffgylCbQTGnXbDeV9jnOWGg6AbJriQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450194,"updated":1583450194,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:17 GMT
    +      date: Thu, 05 Mar 2020 23:18:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    @@ -2748,37 +2282,30 @@ interactions:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:19 GMT
    +      date: Thu, 05 Mar 2020 23:18:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    @@ -2786,37 +2313,30 @@ interactions:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:21 GMT
    +      date: Thu, 05 Mar 2020 23:18:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    @@ -2824,758 +2344,1572 @@ interactions:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:23 GMT
    +      date: Thu, 05 Mar 2020 23:18:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/bf1f43d66a294d558d5a86aa0e2eda55","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tfIo0ZdfBW8gpjRenND36lVHRFsaA16mIgGy_qHkLHAup_9W5N5E3cJpbg1VQ9G3B2ez_AIxzZQhbdcpElxLpHtxpBJn7w-TqsZP-u9v_8AX-gUK5xwhkOYAwIkWc-iP70kX5M4GxxPB5LR4S9e65QxLLp_Ys3I3weFinwzczVM47wTFdwUhmt70L5RfrN2u_cpSuFLHNQLn5g5eHMZoaGJbwJKz3ujtLoQ0Dhu38g040tTMSqDBj4si_47eEHBeFGR6xPX6w4x4fpYlmSr3q_z_tQn-nAqg6PQ53Hd0-SE8vuhp2WJ-TZrUGJ7V4OdeDW-MFXFe3N5jivDkRk8LEw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:25 GMT
    +      date: Thu, 05 Mar 2020 23:18:34 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key0?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/8eaf2dcb2c72446aae67a820bf7acf30","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xQzFpqjFRZ4yJfADEfIFhQ0FJExhJHZYlj-QjkGpHJHkGCv68OjJQxTEk1quvxeHVixvJBsZ2_LuENgk8Ll9NvmTSzkN4R3dt2U8mECqtTtTAJsoY_63ebGP4YepXzgM8uAL7BNCclNKyl6NWqZMJvfmQjoZttU0ZqGK7t-4I3atm6tLHWQX3cVsanWgOUp0nMmS6Ucm7OAK_a1UklrJlGjM5NyVjumHTDjRq6rvNJNz6AWUvtkhtfIuhFnoBvK00nJZQKM_txjSZddF9YWZj0KIQxPM-l47OXjzlDTx6DniliBf78UyEms7Y7IMzO7pxUtJSgH-oDbfP3ZKh8qMnQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:27 GMT
    +      date: Thu, 05 Mar 2020 23:18:36 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /keys/key0
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:27 GMT
    +      date: Thu, 05 Mar 2020 23:18:38 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:29 GMT
    +      date: Thu, 05 Mar 2020 23:18:41 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:31 GMT
    +      date: Thu, 05 Mar 2020 23:18:43 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:33 GMT
    +      date: Thu, 05 Mar 2020 23:18:45 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:36 GMT
    +      date: Thu, 05 Mar 2020 23:18:47 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:38 GMT
    +      date: Thu, 05 Mar 2020 23:18:48 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:41 GMT
    +      date: Thu, 05 Mar 2020 23:18:51 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:43 GMT
    +      date: Thu, 05 Mar 2020 23:18:52 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:45 GMT
    +      date: Thu, 05 Mar 2020 23:18:55 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583450308,"scheduledPurgeDate":1591226308,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/dfede5f3f3bd4500b9e78688f96f5736","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"6n3PnygjkF0PCyLuPzZX7tXUTTK0lDr9eKsdKJ1iugMxHwOuEja7njN-UWlepl767SloymuFDj8CHEa1BJ4R3NW_dORXxtB7uxPTBHV0YnCPN0b5k9bR4jgB9MSORBK0U4OAQRCOM53-2RurS7H19vDeIlibCawfbVqXXJjmnhmW7ymQlyQ5EnuPEcz6t-lMINbNcBkDmBSDpypEzDklrBlfpGkzKeb02UHVcBIXUoy-35r-mZAy3_OMmI5PvLzq8ZFURYZmxgAn1VFX1nMIod78AhUGp51xaPpn8EYdrU-Ay2aM9V63byPlffgylCbQTGnXbDeV9jnOWGg6AbJriQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450194,"updated":1583450194,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '801'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583450339,"scheduledPurgeDate":1591226339,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/05c1b009d04a496cbcff31baa16a5ff1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ky_A2A-5kROAv6b3yhaGIRt1nfX7EJNfsWf5PZ1D250ohnoce8Yr8iNMiaNOOX-7pcw8yMoLliiJyT5kicVeXiZz-xVM5SIFS_oppTHM4K4wmmiH8hFCi3vEdpQqNs3Q0K39odaQ7TQdyXiTXXYVlKDjdxI6qG5zKzVQ2Osk8Z_hXUmK3__7k_TGDrEx2YgG5eq3HBT525rH4LH_3Xjv5V2EiLBs-y-slAnifipmIng8Ns2DalmagWjur3V4Z76a9l44FmRc5eDWzFs2RPNMdrm6x4A0_B_sBHD3mDZi3OOXasNpi3m8pe-x7b1eYGTnkCzsLA5Kerhif0eeK3TeAw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450194,"updated":1583450194,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '801'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:07 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:28 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583450339,"scheduledPurgeDate":1591226339,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/05c1b009d04a496cbcff31baa16a5ff1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ky_A2A-5kROAv6b3yhaGIRt1nfX7EJNfsWf5PZ1D250ohnoce8Yr8iNMiaNOOX-7pcw8yMoLliiJyT5kicVeXiZz-xVM5SIFS_oppTHM4K4wmmiH8hFCi3vEdpQqNs3Q0K39odaQ7TQdyXiTXXYVlKDjdxI6qG5zKzVQ2Osk8Z_hXUmK3__7k_TGDrEx2YgG5eq3HBT525rH4LH_3Xjv5V2EiLBs-y-slAnifipmIng8Ns2DalmagWjur3V4Z76a9l44FmRc5eDWzFs2RPNMdrm6x4A0_B_sBHD3mDZi3OOXasNpi3m8pe-x7b1eYGTnkCzsLA5Kerhif0eeK3TeAw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450194,"updated":1583450194,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '801'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583450371,"scheduledPurgeDate":1591226371,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/b388b8d0793a4541b0ac02253c6ac3e1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qqKkRwRMdG0dLg0INw1YcLA8ey9Db1Ed2ClsOiuCrU4LMEBWm3_uO-I09bc9kNXytthxe2eBqYPJ5uPxhRcvFdNtPyzTzQrvwzVwVtGAL5NZgDdxGhAgJ8aeTk9lKUSFd3a4CbyrOdcyY0l3jydRjMBwEU-yImp88hYDinWA7p_nuEKQA-wTPEGt_LPp5k2O1Cbm-qu0G0ZAB1tkp-c3etQattGhZGvLVBRhzwk3Bh5XZp5sfrqRuYnFuqI3xbuUbeIThQA5PIX-k4ZhH6xSw4gj2jYzgGIPLCp0rFxr0NBltVdm7gHdIITicnN8WM-NRY7ylgU26_LWXPXgD1K9Kw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450194,"updated":1583450194,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '801'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/keys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:47 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:47 GMT
    +      date: Thu, 05 Mar 2020 23:19:54 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/8eaf2dcb2c72446aae67a820bf7acf30","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xQzFpqjFRZ4yJfADEfIFhQ0FJExhJHZYlj-QjkGpHJHkGCv68OjJQxTEk1quvxeHVixvJBsZ2_LuENgk8Ll9NvmTSzkN4R3dt2U8mECqtTtTAJsoY_63ebGP4YepXzgM8uAL7BNCclNKyl6NWqZMJvfmQjoZttU0ZqGK7t-4I3atm6tLHWQX3cVsanWgOUp0nMmS6Ucm7OAK_a1UklrJlGjM5NyVjumHTDjRq6rvNJNz6AWUvtkhtfIuhFnoBvK00nJZQKM_txjSZddF9YWZj0KIQxPM-l47OXjzlDTx6DniliBf78UyEms7Y7IMzO7pxUtJSgH-oDbfP3ZKh8qMnQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583450371,"scheduledPurgeDate":1591226371,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/b388b8d0793a4541b0ac02253c6ac3e1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qqKkRwRMdG0dLg0INw1YcLA8ey9Db1Ed2ClsOiuCrU4LMEBWm3_uO-I09bc9kNXytthxe2eBqYPJ5uPxhRcvFdNtPyzTzQrvwzVwVtGAL5NZgDdxGhAgJ8aeTk9lKUSFd3a4CbyrOdcyY0l3jydRjMBwEU-yImp88hYDinWA7p_nuEKQA-wTPEGt_LPp5k2O1Cbm-qu0G0ZAB1tkp-c3etQattGhZGvLVBRhzwk3Bh5XZp5sfrqRuYnFuqI3xbuUbeIThQA5PIX-k4ZhH6xSw4gj2jYzgGIPLCp0rFxr0NBltVdm7gHdIITicnN8WM-NRY7ylgU26_LWXPXgD1K9Kw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450194,"updated":1583450194,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:49 GMT
    +      date: Thu, 05 Mar 2020 23:19:56 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
     - request:
         body: null
         headers:
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
           string: ''
         headers:
           cache-control: no-cache
    -      date: Fri, 06 Dec 2019 23:59:51 GMT
    +      date: Thu, 05 Mar 2020 23:19:56 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 204
           message: No Content
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
           string: ''
         headers:
           cache-control: no-cache
    -      date: Fri, 06 Dec 2019 23:59:51 GMT
    +      date: Thu, 05 Mar 2020 23:19:56 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 204
           message: No Content
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
           string: ''
         headers:
           cache-control: no-cache
    -      date: Fri, 06 Dec 2019 23:59:51 GMT
    +      date: Thu, 05 Mar 2020 23:19:57 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 204
           message: No Content
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
           string: ''
         headers:
           cache-control: no-cache
    -      date: Fri, 06 Dec 2019 23:59:52 GMT
    +      date: Thu, 05 Mar 2020 23:19:57 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 204
           message: No Content
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: ''
         headers:
           cache-control: no-cache
    -      date: Fri, 06 Dec 2019 23:59:52 GMT
    +      date: Thu, 05 Mar 2020 23:19:58 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 204
           message: No Content
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
           string: ''
         headers:
           cache-control: no-cache
    -      date: Fri, 06 Dec 2019 23:59:52 GMT
    +      date: Thu, 05 Mar 2020 23:19:58 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 204
           message: No Content
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
     - request:
         body: null
         headers:
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
       response:
         body:
           string: ''
         headers:
           cache-control: no-cache
    -      date: Fri, 06 Dec 2019 23:59:52 GMT
    +      date: Thu, 05 Mar 2020 23:19:58 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 204
           message: No Content
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - b72gsw33hfeejejz5fir5sio.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://kh2entdoywnbqfthkobmnsus.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_recover.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_recover.yaml
    index bfad3dd2471d..f88cf56ef332 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_recover.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_keys_async.test_recover.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:19 GMT
    +      date: Thu, 05 Mar 2020 23:16:27 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/create
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -54,38 +47,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/cde13b7440c74ad2a1435c4ae8edc4c0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"o1bQ5HihVeOH7vldRDKzv9ZmjAcjQdUNRwWdW0326trwJ4ukXB1wNnmeMYNxMqyH9KV2dspnmu3yrm9tddZKcZAK1xk6YpZ9Fy8CO5wS-jJYqQaDo8IsU-c4b-RpKw3jVVEsqASWIhRzdmORWGBOlCuhqBa93rBv2nGjB8Xn9pHgK5c9yLh2qvmwF2FKlGhEJdNXofU5vFcUJl_ZzQy3CrcMGF0ENkE5My_h_jVdrTcOZCVMxgOTWS4VaggSD1mAYssSxqAhCInDCK7DaGYNYodnZGC207LwQbjVsOGTGhSPm9chDbVb8JSZq-GVCi_McdbzW79QTZK7D1TQcWQtYQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676639,"updated":1575676639,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/135744726c0941fea7b4af8a1619e54f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5HNksTMDaNYfjbb01BnAAxQtt4gSX3FPoc4jjKwmU-mkG1l25SviWLRP2Fc7MW4XdE7KFIP_oU8L7Bqgu9jsVcERAZSUuL7cO9fqo5IvxXcinhjKHsUD3R2e4zfW984jsQh6H4O8XmALtdrCkFOx7pZYeg79TKXB19AAjHNHfmokhfTCLjkTlj3UyrEQz5d6yw-WC8ch3Z0czVa8vzc7JONdcRWnh2UtXMeNYX6kEBiy7U2Ec8FuEoEz-gJxCrTxO7OrruFwV7j4Eyu7xnTsiZB1kg-2o8BW4xwZUudpjrzh0jyCYvHtPMzXQIumweJt8Qls37mVJh7Dq4YaStbqFQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:19 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/create
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -96,38 +82,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/8a05d6ab1b0f4545b2e716c0d6e33569","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sSrDCC-XLFRnFtrlKmLmDomrGFLjaQ_bJGVDwLgqyzioPe5yS-qFm7fs9MoRfA2vskQFvbS19-5MM3IZ3J20XEeBAb43C4KVCeirKyepF-uRKEgGlj3ESYeGPcO_0-tTre_akkUo7pCxNbpivnDrK6TP_7_OyHlk4n-lqdBO1_E9nXIYRTvJiQVgO_r86sR6TtgL_G9caCPW9AqOl8m-Fo3Xc3nAGDxVjPtLDyeX8mVXlOJx5KX5Dzu33mHxJAVyGGGpuBYs3SCYGtb333TJ2Rwgrbm-MxhNKAzTb0cRCgy-yCkHBJRFv-cIaicNhkTxtGhO1KUGYBbMuACumpOYjQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/169e7a7885c6444095dd586ba2b949a0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lC0W2nAI0b5uGYFNA-dcx6k_z_TkSQyu4wQKpPSamJ_xmq9Mc3T_FdjItt_jJy7R-8ff-lUkXhM95vWFoS_JrI_c-nGSL5pow7ANGG58wx1OOPB24y2mp8SiUvad0M1f7M2oUo5Up8sAxqY9WMK31veZxQNmUnSwoV3QdFxgrLEQsAKUGnnJIxKyGrI-Q6pMlVCBPoWFM_AjceZiVf_8dcryJ8OR7FQdo-7BoMctSlgAN10LIThy49xp4y_QDpF1got4fN5t3hCBPjcRbdLF9RA6PgtLWFs1_V0rj8qwAp1Nk84rkhTdSe52zq0vNhX_cYUkamYITYUl2759dGVh9w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:19 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/create
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -138,38 +117,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/65f413dbc1ee4dff8fc405007fe32ee7","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pikJJ2my7aBZ6VqM9sN2GWxtMx5lZNuOf_hLA-xiJMXOEKvbn8DqCbMW89cM4UY2ESbudEq7jDPrZcsnErbEtcH8ZA5bDgXIFONoHaenwBPqmAWV_0K2ZkDv2mjpCglKMSkpMIjbVyMXZhmqarbINBZW2siPP2W8KbKQhI2l2bHWkZaXVQkULixQI85mF8TMy3T5vG5BtV-jz_1_l2NrkCBWxP7x3VH0q-7JHjqMmv1WsHFl-o00omFRI63Y7pschN4Vt4tgTLwqjUCPqEqhDW2W3c1Btal_7ubbgfskJd4yKeh0edkCyqPh3oCjY2CCUkEVuhZUgEXAbAuTLj0MlQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/20a15d25728240cfa12ec74241a8d536","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sxlaVZlH0baSBLySvSCQbZRBI78g3m6rpJZdSkg4QyTGSi3_6T-encjqcyGP16n7094TJjkTlVT-9ek-2h0QdPAfdY2i28LUJX3T1Qvb4adDOpkCVvZmhHaCDu0Y9qsMS7vu4G77Ta4UT65FimKTSNLKqcBHQOKS9QSS31SGhtUCC-FqcOJVPab60m8fAiY-jUTZOOjt1en97o4nbxLWItW-0-XYpDcnvBnlw7RyL9Qv7V9nLSA6x7Vy40jgt-n08MkWhMC2qHboDu_I6QnIsN0LFXJxQY2_tIJI30gBA1vn67WQoi7XHNJUUZnC4xLLkdbDoNQ7UWU1IXsGiArfHw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:20 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key2/create
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -180,38 +152,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/01430da702044233b768abad29bebea4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"9VKAShVpmhwPvKJJlNfhvWab54CCyR-YzJ_5vbUuC8-SxEe67mJHtNBcSj8RwZG0N2mHo4CsNfgDx_tGV-HN5zvsImW9ExRoTQBbmmoFfBgk0z6_dI_upZaiAMbjckOZTlWhI1kQ0yTHeisMrp9xauZ17UKhSinxTCgLHfKrP5rA8RvgBBz4k-czCKXDLrqjz3XEWuLvoTXvwhjkgLuvAsLeaKuLYTD7WSPLl8_IrxKcw0-AgB6aCDBNsmVOnGjv3CiaxYefVi7hcEtgsSXuIr3_d5dM7AYXyPMb5Qk-E3xtiJuwI6YapL6WRQ4yNWVm3siJpKwYVtX37svJ2NFZpw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/cb4f13eb944849aa8138753c37839e18","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vjJVMq5-CwaJrduFqGtLL6HYsjyrINrwJroIFbTenHyawgOmsf9afiqRrwHrWD0wsZE-0WvHazMaPtiZ8EyO-FmYRGK1faIIFdffugU2dI-AW6vg0U4LbXDO6vwlK1T6oofKGe0QPT45MgsHOxdHKA3OOzsXEn6is3EKpAguN7g7ekzXv_qgyJjHOyw-eyglHxD1_qPXtbgZXP5V-idWmWmRqOMV9y0yCBEcGxB2vAXkDHhPkc7C-3n6IzCErOtyeJwTBi-DtPQYRjET7oGGsaYZJjDMhMVXz-tdSkKH-jXMYXSaLQqOw3kz1XAn92JMB4Ht8zTspiWfbRRcacKfsw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:20 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -222,38 +187,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/1ef2c70cdc554402864098a8ade76b5c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4weRkAo_9V-3q9foJnf717SjngMFqTJybflQB6TjhNofex1LAaSVHgNUoC9gXN1za64B2EtuczyXQ8taCvlYsrzpwoEXS-clOW7ICWpEuWKIcmpRG_K3uZEHkYpn8RClcfn5QMaVZD5haGo4M39vp97gu7kBErLLbGPVJz9-jGyg30PW_3W77DSpJppHkM-UbGhi_zWkOopzAT0RZk6taEzsB4l9SObf_doYm9EdgADhhX5gVDVD00Dbjy2i-xgFfmA5mfb-L1O612qlnxUSbuDy9dveZFZAQe-_juYF4ofY6emmPOZ9L2pT6z0GwibCNDcrLd9n2duqWTfPUiTn9Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/b3c4608f76474d2a98f03a8ef3c3ab9e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qmNO4VNVjL8gEyYBsItp4kW3oqomTTowPcF1E2Rdxj5TfKtFfzRJqxY_M767RGeulEVZyKKMGLACmHOP9D1a38UzAtlTAx_u5kTd04RvV60mAiaHLjZe5twoQKOc0as1gzsJcjefPG0jhSRAFmxMvz343Ycy8iiFLNmKG6lZb-q0eEGOdPpz2D7rPVqq0UOmDgYUEXeXv0cQtPwfazDcnNlRkG54H6tAetYpFniXkaUI5TRXqVd6oLD3bHXrW_vmNKkBn5bkfmPTDT2bPcAfJMCeb5c1Bk2G_6mDd8_vvLwNoEMjLxPfKB4EWRT5BgEgz1fXP8s6tKtqM7YyTF2yZw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:20 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4/create
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -264,38 +222,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/d4aefbce6a9a4824af96fb54152291ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tSNPSAySDMJZMlHgFuoHDQh3Z-3Xjr0YUWgzQf7h-o160G00n6mcA79gm3RfO2qNAMItsukrxHfk33S_oTzJtI9vvhfBCtgay3bmd-zX8Yy3-fqRA6geQyvBzPN2OfszoQIKqT6Qh8mU4EFn48x45GHkqXmtl4B5zEQOwq0X6m9kA9_WDmgXJKTwp2hoxp7Ysa67TtN8E8lSYhgnQQQ6DZqxCs504wU3FNiCbEFFwjexo5eJqK9ldXJrIsXF1kWZNXAekBOL9LPotn_DJY4Eap4Cw53GCS4K2oTorhR8R-UuwjFYIbesjM-uD2Yb5Hm5HDtl4WsEeDSYaWHwL8Ingw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/5c309da0ac344f4f97fa57880c9ccb8a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0wjLQd_NQiK7C6rRuCZqxg8VUKCUxiyhHlVDpk7EVePX2Cu6_GmBRlckIEemGIu2BcWpKALZ4DfGK5yFSC-bTI1q_1ikhBaCdktu3Ug_zAMGG_qkP7StDCt7NvhDS4Fz4d7tEppayxL-FAFBz8MHs3Un7l7FXX3xRujTwcNNPCQJwFQ-zBP8iymoWboo6Bt8vfkDlCh_X4iE7uCqWSGENl0GM6mAvQXEFdNSnYEOLi4c5q7eQg2Ym7ngKFf4AdtOCaVD_iP0dFGcJCmRas6eD_P7NnijF0dlejN5mGvLskxELJ0VCkeZfdVTJGEI_tDIBA_16l0EZFDiF5NGFnPS6Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:20 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/create
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -306,2289 +257,1869 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/e056d0e37d2a4e09a81eaaebdd1fc71b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wsKFkpGQbDl1P4Ge-2i8NHAkOaQUPsBBVPtjJvZAFFOstAZnvnDa1m6fEaBjDELDDJhCPaiirlEFSctDrVSbEPqvWSgbaYn0Xmw8K5N-tYibVVy6bFO46cVBpvCk8n-PacFl5A5bSqL-KhOXxz2k96jfGpikLXKH88etGxd82_bbGll6FYDvEAQZ5K37rBP4UrhviVXYPtyL_dV4yRlHLGRBebkojdq2810DrR-xAmE7bzufeCag1UcDTmq3S7XD3EwPnPW1aF-omgU8vYc4IsbIvHL30jTEBQWAsnrbU_Bx-Xoc6wkZKFscXIlmRvnSn5XQst1KPbMR3K4qR3-rBQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/6194bc846ba54941bd733364e9dcd153","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kXqCd-7nH1ZvkTtmX8-bvRQc8JuaYgRGNt7-B3GrBGw7de5x7kF8Gpd7aPno_TfTYfWpHMGNfsKRMunxQ_OiniUAvS9lte7dKkZ0hfWqxvUqeZWPb1o2tBb0Wun_ER0oLjYNJKgcIdcsXWZwv5oyACb2eVH1M0z5PTxkbxxNclBW0g8AgkTSWA0WgumjIhfT0S9XDeN0rAgxO1cSZpK2D0lpsqIa-6RRKprZSdXOVfSjNomoaYfgSjLZZuSs9fCBX1515QOA-29unQ472DLxLrtGkPLhEtWapcoQRDPLZmEf7QBmwgmHFflCxFk2PpHTFvJfOYsYa0qwwQvr6nWPrQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:20 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key6/create
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/create?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676641,"scheduledPurgeDate":1583452641,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/d4aefbce6a9a4824af96fb54152291ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tSNPSAySDMJZMlHgFuoHDQh3Z-3Xjr0YUWgzQf7h-o160G00n6mcA79gm3RfO2qNAMItsukrxHfk33S_oTzJtI9vvhfBCtgay3bmd-zX8Yy3-fqRA6geQyvBzPN2OfszoQIKqT6Qh8mU4EFn48x45GHkqXmtl4B5zEQOwq0X6m9kA9_WDmgXJKTwp2hoxp7Ysa67TtN8E8lSYhgnQQQ6DZqxCs504wU3FNiCbEFFwjexo5eJqK9ldXJrIsXF1kWZNXAekBOL9LPotn_DJY4Eap4Cw53GCS4K2oTorhR8R-UuwjFYIbesjM-uD2Yb5Hm5HDtl4WsEeDSYaWHwL8Ingw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583450190,"scheduledPurgeDate":1591226190,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/135744726c0941fea7b4af8a1619e54f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5HNksTMDaNYfjbb01BnAAxQtt4gSX3FPoc4jjKwmU-mkG1l25SviWLRP2Fc7MW4XdE7KFIP_oU8L7Bqgu9jsVcERAZSUuL7cO9fqo5IvxXcinhjKHsUD3R2e4zfW984jsQh6H4O8XmALtdrCkFOx7pZYeg79TKXB19AAjHNHfmokhfTCLjkTlj3UyrEQz5d6yw-WC8ch3Z0czVa8vzc7JONdcRWnh2UtXMeNYX6kEBiy7U2Ec8FuEoEz-gJxCrTxO7OrruFwV7j4Eyu7xnTsiZB1kg-2o8BW4xwZUudpjrzh0jyCYvHtPMzXQIumweJt8Qls37mVJh7Dq4YaStbqFQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:21 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:21 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:23 GMT
    +      date: Thu, 05 Mar 2020 23:16:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:25 GMT
    +      date: Thu, 05 Mar 2020 23:16:34 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:27 GMT
    +      date: Thu, 05 Mar 2020 23:16:36 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:29 GMT
    +      date: Thu, 05 Mar 2020 23:16:38 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:31 GMT
    +      date: Thu, 05 Mar 2020 23:16:40 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:33 GMT
    +      date: Thu, 05 Mar 2020 23:16:42 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1583450190,"scheduledPurgeDate":1591226190,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/135744726c0941fea7b4af8a1619e54f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5HNksTMDaNYfjbb01BnAAxQtt4gSX3FPoc4jjKwmU-mkG1l25SviWLRP2Fc7MW4XdE7KFIP_oU8L7Bqgu9jsVcERAZSUuL7cO9fqo5IvxXcinhjKHsUD3R2e4zfW984jsQh6H4O8XmALtdrCkFOx7pZYeg79TKXB19AAjHNHfmokhfTCLjkTlj3UyrEQz5d6yw-WC8ch3Z0czVa8vzc7JONdcRWnh2UtXMeNYX6kEBiy7U2Ec8FuEoEz-gJxCrTxO7OrruFwV7j4Eyu7xnTsiZB1kg-2o8BW4xwZUudpjrzh0jyCYvHtPMzXQIumweJt8Qls37mVJh7Dq4YaStbqFQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:35 GMT
    +      date: Thu, 05 Mar 2020 23:16:44 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key0?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583450205,"scheduledPurgeDate":1591226205,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/169e7a7885c6444095dd586ba2b949a0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lC0W2nAI0b5uGYFNA-dcx6k_z_TkSQyu4wQKpPSamJ_xmq9Mc3T_FdjItt_jJy7R-8ff-lUkXhM95vWFoS_JrI_c-nGSL5pow7ANGG58wx1OOPB24y2mp8SiUvad0M1f7M2oUo5Up8sAxqY9WMK31veZxQNmUnSwoV3QdFxgrLEQsAKUGnnJIxKyGrI-Q6pMlVCBPoWFM_AjceZiVf_8dcryJ8OR7FQdo-7BoMctSlgAN10LIThy49xp4y_QDpF1got4fN5t3hCBPjcRbdLF9RA6PgtLWFs1_V0rj8qwAp1Nk84rkhTdSe52zq0vNhX_cYUkamYITYUl2759dGVh9w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:37 GMT
    +      date: Thu, 05 Mar 2020 23:16:44 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:39 GMT
    +      date: Thu, 05 Mar 2020 23:16:45 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:41 GMT
    +      date: Thu, 05 Mar 2020 23:16:47 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:43 GMT
    +      date: Thu, 05 Mar 2020 23:16:49 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:45 GMT
    +      date: Thu, 05 Mar 2020 23:16:51 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1575676641,"scheduledPurgeDate":1583452641,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/d4aefbce6a9a4824af96fb54152291ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tSNPSAySDMJZMlHgFuoHDQh3Z-3Xjr0YUWgzQf7h-o160G00n6mcA79gm3RfO2qNAMItsukrxHfk33S_oTzJtI9vvhfBCtgay3bmd-zX8Yy3-fqRA6geQyvBzPN2OfszoQIKqT6Qh8mU4EFn48x45GHkqXmtl4B5zEQOwq0X6m9kA9_WDmgXJKTwp2hoxp7Ysa67TtN8E8lSYhgnQQQ6DZqxCs504wU3FNiCbEFFwjexo5eJqK9ldXJrIsXF1kWZNXAekBOL9LPotn_DJY4Eap4Cw53GCS4K2oTorhR8R-UuwjFYIbesjM-uD2Yb5Hm5HDtl4WsEeDSYaWHwL8Ingw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:47 GMT
    +      date: Thu, 05 Mar 2020 23:16:53 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key6?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676670,"scheduledPurgeDate":1583452670,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/e056d0e37d2a4e09a81eaaebdd1fc71b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wsKFkpGQbDl1P4Ge-2i8NHAkOaQUPsBBVPtjJvZAFFOstAZnvnDa1m6fEaBjDELDDJhCPaiirlEFSctDrVSbEPqvWSgbaYn0Xmw8K5N-tYibVVy6bFO46cVBpvCk8n-PacFl5A5bSqL-KhOXxz2k96jfGpikLXKH88etGxd82_bbGll6FYDvEAQZ5K37rBP4UrhviVXYPtyL_dV4yRlHLGRBebkojdq2810DrR-xAmE7bzufeCag1UcDTmq3S7XD3EwPnPW1aF-omgU8vYc4IsbIvHL30jTEBQWAsnrbU_Bx-Xoc6wkZKFscXIlmRvnSn5XQst1KPbMR3K4qR3-rBQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:49 GMT
    +      date: Thu, 05 Mar 2020 23:16:55 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key6
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:49 GMT
    +      date: Thu, 05 Mar 2020 23:16:57 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:51 GMT
    +      date: Thu, 05 Mar 2020 23:16:59 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:53 GMT
    +      date: Thu, 05 Mar 2020 23:17:01 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:55 GMT
    +      date: Thu, 05 Mar 2020 23:17:03 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:58 GMT
    +      date: Thu, 05 Mar 2020 23:17:05 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:00 GMT
    +      date: Thu, 05 Mar 2020 23:17:07 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:02 GMT
    +      date: Thu, 05 Mar 2020 23:17:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1583450205,"scheduledPurgeDate":1591226205,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/169e7a7885c6444095dd586ba2b949a0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lC0W2nAI0b5uGYFNA-dcx6k_z_TkSQyu4wQKpPSamJ_xmq9Mc3T_FdjItt_jJy7R-8ff-lUkXhM95vWFoS_JrI_c-nGSL5pow7ANGG58wx1OOPB24y2mp8SiUvad0M1f7M2oUo5Up8sAxqY9WMK31veZxQNmUnSwoV3QdFxgrLEQsAKUGnnJIxKyGrI-Q6pMlVCBPoWFM_AjceZiVf_8dcryJ8OR7FQdo-7BoMctSlgAN10LIThy49xp4y_QDpF1got4fN5t3hCBPjcRbdLF9RA6PgtLWFs1_V0rj8qwAp1Nk84rkhTdSe52zq0vNhX_cYUkamYITYUl2759dGVh9w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:04 GMT
    +      date: Thu, 05 Mar 2020 23:17:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583450231,"scheduledPurgeDate":1591226231,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/20a15d25728240cfa12ec74241a8d536","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sxlaVZlH0baSBLySvSCQbZRBI78g3m6rpJZdSkg4QyTGSi3_6T-encjqcyGP16n7094TJjkTlVT-9ek-2h0QdPAfdY2i28LUJX3T1Qvb4adDOpkCVvZmhHaCDu0Y9qsMS7vu4G77Ta4UT65FimKTSNLKqcBHQOKS9QSS31SGhtUCC-FqcOJVPab60m8fAiY-jUTZOOjt1en97o4nbxLWItW-0-XYpDcnvBnlw7RyL9Qv7V9nLSA6x7Vy40jgt-n08MkWhMC2qHboDu_I6QnIsN0LFXJxQY2_tIJI30gBA1vn67WQoi7XHNJUUZnC4xLLkdbDoNQ7UWU1IXsGiArfHw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:06 GMT
    +      date: Thu, 05 Mar 2020 23:17:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1575676670,"scheduledPurgeDate":1583452670,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/e056d0e37d2a4e09a81eaaebdd1fc71b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wsKFkpGQbDl1P4Ge-2i8NHAkOaQUPsBBVPtjJvZAFFOstAZnvnDa1m6fEaBjDELDDJhCPaiirlEFSctDrVSbEPqvWSgbaYn0Xmw8K5N-tYibVVy6bFO46cVBpvCk8n-PacFl5A5bSqL-KhOXxz2k96jfGpikLXKH88etGxd82_bbGll6FYDvEAQZ5K37rBP4UrhviVXYPtyL_dV4yRlHLGRBebkojdq2810DrR-xAmE7bzufeCag1UcDTmq3S7XD3EwPnPW1aF-omgU8vYc4IsbIvHL30jTEBQWAsnrbU_Bx-Xoc6wkZKFscXIlmRvnSn5XQst1KPbMR3K4qR3-rBQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:08 GMT
    +      date: Thu, 05 Mar 2020 23:17:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key6
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key3?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676691,"scheduledPurgeDate":1583452691,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/01430da702044233b768abad29bebea4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"9VKAShVpmhwPvKJJlNfhvWab54CCyR-YzJ_5vbUuC8-SxEe67mJHtNBcSj8RwZG0N2mHo4CsNfgDx_tGV-HN5zvsImW9ExRoTQBbmmoFfBgk0z6_dI_upZaiAMbjckOZTlWhI1kQ0yTHeisMrp9xauZ17UKhSinxTCgLHfKrP5rA8RvgBBz4k-czCKXDLrqjz3XEWuLvoTXvwhjkgLuvAsLeaKuLYTD7WSPLl8_IrxKcw0-AgB6aCDBNsmVOnGjv3CiaxYefVi7hcEtgsSXuIr3_d5dM7AYXyPMb5Qk-E3xtiJuwI6YapL6WRQ4yNWVm3siJpKwYVtX37svJ2NFZpw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:10 GMT
    +      date: Thu, 05 Mar 2020 23:17:13 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:10 GMT
    +      date: Thu, 05 Mar 2020 23:17:15 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:12 GMT
    +      date: Thu, 05 Mar 2020 23:17:17 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:14 GMT
    +      date: Thu, 05 Mar 2020 23:17:19 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:17 GMT
    +      date: Thu, 05 Mar 2020 23:17:21 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:19 GMT
    +      date: Thu, 05 Mar 2020 23:17:23 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:21 GMT
    +      date: Thu, 05 Mar 2020 23:17:26 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:23 GMT
    +      date: Thu, 05 Mar 2020 23:17:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:25 GMT
    +      date: Thu, 05 Mar 2020 23:17:30 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1575676691,"scheduledPurgeDate":1583452691,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/01430da702044233b768abad29bebea4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"9VKAShVpmhwPvKJJlNfhvWab54CCyR-YzJ_5vbUuC8-SxEe67mJHtNBcSj8RwZG0N2mHo4CsNfgDx_tGV-HN5zvsImW9ExRoTQBbmmoFfBgk0z6_dI_upZaiAMbjckOZTlWhI1kQ0yTHeisMrp9xauZ17UKhSinxTCgLHfKrP5rA8RvgBBz4k-czCKXDLrqjz3XEWuLvoTXvwhjkgLuvAsLeaKuLYTD7WSPLl8_IrxKcw0-AgB6aCDBNsmVOnGjv3CiaxYefVi7hcEtgsSXuIr3_d5dM7AYXyPMb5Qk-E3xtiJuwI6YapL6WRQ4yNWVm3siJpKwYVtX37svJ2NFZpw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:27 GMT
    +      date: Thu, 05 Mar 2020 23:17:32 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key3
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key1?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676710,"scheduledPurgeDate":1583452710,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/8a05d6ab1b0f4545b2e716c0d6e33569","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sSrDCC-XLFRnFtrlKmLmDomrGFLjaQ_bJGVDwLgqyzioPe5yS-qFm7fs9MoRfA2vskQFvbS19-5MM3IZ3J20XEeBAb43C4KVCeirKyepF-uRKEgGlj3ESYeGPcO_0-tTre_akkUo7pCxNbpivnDrK6TP_7_OyHlk4n-lqdBO1_E9nXIYRTvJiQVgO_r86sR6TtgL_G9caCPW9AqOl8m-Fo3Xc3nAGDxVjPtLDyeX8mVXlOJx5KX5Dzu33mHxJAVyGGGpuBYs3SCYGtb333TJ2Rwgrbm-MxhNKAzTb0cRCgy-yCkHBJRFv-cIaicNhkTxtGhO1KUGYBbMuACumpOYjQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:29 GMT
    +      date: Thu, 05 Mar 2020 23:17:34 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:29 GMT
    +      date: Thu, 05 Mar 2020 23:17:36 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1583450231,"scheduledPurgeDate":1591226231,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/20a15d25728240cfa12ec74241a8d536","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sxlaVZlH0baSBLySvSCQbZRBI78g3m6rpJZdSkg4QyTGSi3_6T-encjqcyGP16n7094TJjkTlVT-9ek-2h0QdPAfdY2i28LUJX3T1Qvb4adDOpkCVvZmhHaCDu0Y9qsMS7vu4G77Ta4UT65FimKTSNLKqcBHQOKS9QSS31SGhtUCC-FqcOJVPab60m8fAiY-jUTZOOjt1en97o4nbxLWItW-0-XYpDcnvBnlw7RyL9Qv7V9nLSA6x7Vy40jgt-n08MkWhMC2qHboDu_I6QnIsN0LFXJxQY2_tIJI30gBA1vn67WQoi7XHNJUUZnC4xLLkdbDoNQ7UWU1IXsGiArfHw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:31 GMT
    +      date: Thu, 05 Mar 2020 23:17:38 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583450259,"scheduledPurgeDate":1591226259,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/cb4f13eb944849aa8138753c37839e18","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vjJVMq5-CwaJrduFqGtLL6HYsjyrINrwJroIFbTenHyawgOmsf9afiqRrwHrWD0wsZE-0WvHazMaPtiZ8EyO-FmYRGK1faIIFdffugU2dI-AW6vg0U4LbXDO6vwlK1T6oofKGe0QPT45MgsHOxdHKA3OOzsXEn6is3EKpAguN7g7ekzXv_qgyJjHOyw-eyglHxD1_qPXtbgZXP5V-idWmWmRqOMV9y0yCBEcGxB2vAXkDHhPkc7C-3n6IzCErOtyeJwTBi-DtPQYRjET7oGGsaYZJjDMhMVXz-tdSkKH-jXMYXSaLQqOw3kz1XAn92JMB4Ht8zTspiWfbRRcacKfsw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:33 GMT
    +      date: Thu, 05 Mar 2020 23:17:38 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:36 GMT
    +      date: Thu, 05 Mar 2020 23:17:39 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:38 GMT
    +      date: Thu, 05 Mar 2020 23:17:41 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:40 GMT
    +      date: Thu, 05 Mar 2020 23:17:43 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:42 GMT
    +      date: Thu, 05 Mar 2020 23:17:45 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:44 GMT
    +      date: Thu, 05 Mar 2020 23:17:47 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:46 GMT
    +      date: Thu, 05 Mar 2020 23:17:49 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key1","deletedDate":1575676710,"scheduledPurgeDate":1583452710,"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/8a05d6ab1b0f4545b2e716c0d6e33569","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sSrDCC-XLFRnFtrlKmLmDomrGFLjaQ_bJGVDwLgqyzioPe5yS-qFm7fs9MoRfA2vskQFvbS19-5MM3IZ3J20XEeBAb43C4KVCeirKyepF-uRKEgGlj3ESYeGPcO_0-tTre_akkUo7pCxNbpivnDrK6TP_7_OyHlk4n-lqdBO1_E9nXIYRTvJiQVgO_r86sR6TtgL_G9caCPW9AqOl8m-Fo3Xc3nAGDxVjPtLDyeX8mVXlOJx5KX5Dzu33mHxJAVyGGGpuBYs3SCYGtb333TJ2Rwgrbm-MxhNKAzTb0cRCgy-yCkHBJRFv-cIaicNhkTxtGhO1KUGYBbMuACumpOYjQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:48 GMT
    +      date: Thu, 05 Mar 2020 23:17:51 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key1
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key2?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676730,"scheduledPurgeDate":1583452730,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/65f413dbc1ee4dff8fc405007fe32ee7","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pikJJ2my7aBZ6VqM9sN2GWxtMx5lZNuOf_hLA-xiJMXOEKvbn8DqCbMW89cM4UY2ESbudEq7jDPrZcsnErbEtcH8ZA5bDgXIFONoHaenwBPqmAWV_0K2ZkDv2mjpCglKMSkpMIjbVyMXZhmqarbINBZW2siPP2W8KbKQhI2l2bHWkZaXVQkULixQI85mF8TMy3T5vG5BtV-jz_1_l2NrkCBWxP7x3VH0q-7JHjqMmv1WsHFl-o00omFRI63Y7pschN4Vt4tgTLwqjUCPqEqhDW2W3c1Btal_7ubbgfskJd4yKeh0edkCyqPh3oCjY2CCUkEVuhZUgEXAbAuTLj0MlQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:50 GMT
    +      date: Thu, 05 Mar 2020 23:17:53 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key2
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:50 GMT
    +      date: Thu, 05 Mar 2020 23:17:55 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:52 GMT
    +      date: Thu, 05 Mar 2020 23:17:57 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:54 GMT
    +      date: Thu, 05 Mar 2020 23:17:59 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:56 GMT
    +      date: Thu, 05 Mar 2020 23:18:01 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key3","deletedDate":1583450259,"scheduledPurgeDate":1591226259,"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/cb4f13eb944849aa8138753c37839e18","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vjJVMq5-CwaJrduFqGtLL6HYsjyrINrwJroIFbTenHyawgOmsf9afiqRrwHrWD0wsZE-0WvHazMaPtiZ8EyO-FmYRGK1faIIFdffugU2dI-AW6vg0U4LbXDO6vwlK1T6oofKGe0QPT45MgsHOxdHKA3OOzsXEn6is3EKpAguN7g7ekzXv_qgyJjHOyw-eyglHxD1_qPXtbgZXP5V-idWmWmRqOMV9y0yCBEcGxB2vAXkDHhPkc7C-3n6IzCErOtyeJwTBi-DtPQYRjET7oGGsaYZJjDMhMVXz-tdSkKH-jXMYXSaLQqOw3kz1XAn92JMB4Ht8zTspiWfbRRcacKfsw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:58 GMT
    +      date: Thu, 05 Mar 2020 23:18:03 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583450284,"scheduledPurgeDate":1591226284,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/b3c4608f76474d2a98f03a8ef3c3ab9e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qmNO4VNVjL8gEyYBsItp4kW3oqomTTowPcF1E2Rdxj5TfKtFfzRJqxY_M767RGeulEVZyKKMGLACmHOP9D1a38UzAtlTAx_u5kTd04RvV60mAiaHLjZe5twoQKOc0as1gzsJcjefPG0jhSRAFmxMvz343Ycy8iiFLNmKG6lZb-q0eEGOdPpz2D7rPVqq0UOmDgYUEXeXv0cQtPwfazDcnNlRkG54H6tAetYpFniXkaUI5TRXqVd6oLD3bHXrW_vmNKkBn5bkfmPTDT2bPcAfJMCeb5c1Bk2G_6mDd8_vvLwNoEMjLxPfKB4EWRT5BgEgz1fXP8s6tKtqM7YyTF2yZw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:00 GMT
    +      date: Thu, 05 Mar 2020 23:18:03 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:02 GMT
    +      date: Thu, 05 Mar 2020 23:18:03 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:04 GMT
    +      date: Thu, 05 Mar 2020 23:18:05 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:06 GMT
    +      date: Thu, 05 Mar 2020 23:18:07 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key2","deletedDate":1575676730,"scheduledPurgeDate":1583452730,"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/65f413dbc1ee4dff8fc405007fe32ee7","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pikJJ2my7aBZ6VqM9sN2GWxtMx5lZNuOf_hLA-xiJMXOEKvbn8DqCbMW89cM4UY2ESbudEq7jDPrZcsnErbEtcH8ZA5bDgXIFONoHaenwBPqmAWV_0K2ZkDv2mjpCglKMSkpMIjbVyMXZhmqarbINBZW2siPP2W8KbKQhI2l2bHWkZaXVQkULixQI85mF8TMy3T5vG5BtV-jz_1_l2NrkCBWxP7x3VH0q-7JHjqMmv1WsHFl-o00omFRI63Y7pschN4Vt4tgTLwqjUCPqEqhDW2W3c1Btal_7ubbgfskJd4yKeh0edkCyqPh3oCjY2CCUkEVuhZUgEXAbAuTLj0MlQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:08 GMT
    +      date: Thu, 05 Mar 2020 23:18:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key2
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key4?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676751,"scheduledPurgeDate":1583452751,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/1ef2c70cdc554402864098a8ade76b5c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4weRkAo_9V-3q9foJnf717SjngMFqTJybflQB6TjhNofex1LAaSVHgNUoC9gXN1za64B2EtuczyXQ8taCvlYsrzpwoEXS-clOW7ICWpEuWKIcmpRG_K3uZEHkYpn8RClcfn5QMaVZD5haGo4M39vp97gu7kBErLLbGPVJz9-jGyg30PW_3W77DSpJppHkM-UbGhi_zWkOopzAT0RZk6taEzsB4l9SObf_doYm9EdgADhhX5gVDVD00Dbjy2i-xgFfmA5mfb-L1O612qlnxUSbuDy9dveZFZAQe-_juYF4ofY6emmPOZ9L2pT6z0GwibCNDcrLd9n2duqWTfPUiTn9Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:11 GMT
    +      date: Thu, 05 Mar 2020 23:18:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    @@ -2596,37 +2127,30 @@ interactions:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:11 GMT
    +      date: Thu, 05 Mar 2020 23:18:13 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    @@ -2634,37 +2158,30 @@ interactions:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:13 GMT
    +      date: Thu, 05 Mar 2020 23:18:15 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    @@ -2672,37 +2189,30 @@ interactions:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:15 GMT
    +      date: Thu, 05 Mar 2020 23:18:17 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    @@ -2710,37 +2220,30 @@ interactions:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:17 GMT
    +      date: Thu, 05 Mar 2020 23:18:19 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    @@ -2748,37 +2251,30 @@ interactions:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:19 GMT
    +      date: Thu, 05 Mar 2020 23:18:21 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    @@ -2786,37 +2282,30 @@ interactions:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:21 GMT
    +      date: Thu, 05 Mar 2020 23:18:24 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key4"}}'
    @@ -2824,1329 +2313,2479 @@ interactions:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:23 GMT
    +      date: Thu, 05 Mar 2020 23:18:26 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1575676751,"scheduledPurgeDate":1583452751,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/1ef2c70cdc554402864098a8ade76b5c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4weRkAo_9V-3q9foJnf717SjngMFqTJybflQB6TjhNofex1LAaSVHgNUoC9gXN1za64B2EtuczyXQ8taCvlYsrzpwoEXS-clOW7ICWpEuWKIcmpRG_K3uZEHkYpn8RClcfn5QMaVZD5haGo4M39vp97gu7kBErLLbGPVJz9-jGyg30PW_3W77DSpJppHkM-UbGhi_zWkOopzAT0RZk6taEzsB4l9SObf_doYm9EdgADhhX5gVDVD00Dbjy2i-xgFfmA5mfb-L1O612qlnxUSbuDy9dveZFZAQe-_juYF4ofY6emmPOZ9L2pT6z0GwibCNDcrLd9n2duqWTfPUiTn9Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key4","deletedDate":1583450284,"scheduledPurgeDate":1591226284,"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/b3c4608f76474d2a98f03a8ef3c3ab9e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qmNO4VNVjL8gEyYBsItp4kW3oqomTTowPcF1E2Rdxj5TfKtFfzRJqxY_M767RGeulEVZyKKMGLACmHOP9D1a38UzAtlTAx_u5kTd04RvV60mAiaHLjZe5twoQKOc0as1gzsJcjefPG0jhSRAFmxMvz343Ycy8iiFLNmKG6lZb-q0eEGOdPpz2D7rPVqq0UOmDgYUEXeXv0cQtPwfazDcnNlRkG54H6tAetYpFniXkaUI5TRXqVd6oLD3bHXrW_vmNKkBn5bkfmPTDT2bPcAfJMCeb5c1Bk2G_6mDd8_vvLwNoEMjLxPfKB4EWRT5BgEgz1fXP8s6tKtqM7YyTF2yZw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:25 GMT
    +      date: Thu, 05 Mar 2020 23:18:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key4
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/cde13b7440c74ad2a1435c4ae8edc4c0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"o1bQ5HihVeOH7vldRDKzv9ZmjAcjQdUNRwWdW0326trwJ4ukXB1wNnmeMYNxMqyH9KV2dspnmu3yrm9tddZKcZAK1xk6YpZ9Fy8CO5wS-jJYqQaDo8IsU-c4b-RpKw3jVVEsqASWIhRzdmORWGBOlCuhqBa93rBv2nGjB8Xn9pHgK5c9yLh2qvmwF2FKlGhEJdNXofU5vFcUJl_ZzQy3CrcMGF0ENkE5My_h_jVdrTcOZCVMxgOTWS4VaggSD1mAYssSxqAhCInDCK7DaGYNYodnZGC207LwQbjVsOGTGhSPm9chDbVb8JSZq-GVCi_McdbzW79QTZK7D1TQcWQtYQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676639,"updated":1575676639,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583450309,"scheduledPurgeDate":1591226309,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/5c309da0ac344f4f97fa57880c9ccb8a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0wjLQd_NQiK7C6rRuCZqxg8VUKCUxiyhHlVDpk7EVePX2Cu6_GmBRlckIEemGIu2BcWpKALZ4DfGK5yFSC-bTI1q_1ikhBaCdktu3Ug_zAMGG_qkP7StDCt7NvhDS4Fz4d7tEppayxL-FAFBz8MHs3Un7l7FXX3xRujTwcNNPCQJwFQ-zBP8iymoWboo6Bt8vfkDlCh_X4iE7uCqWSGENl0GM6mAvQXEFdNSnYEOLi4c5q7eQg2Ym7ngKFf4AdtOCaVD_iP0dFGcJCmRas6eD_P7NnijF0dlejN5mGvLskxELJ0VCkeZfdVTJGEI_tDIBA_16l0EZFDiF5NGFnPS6Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '801'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:27 GMT
    +      date: Thu, 05 Mar 2020 23:18:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:27 GMT
    +      date: Thu, 05 Mar 2020 23:18:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:29 GMT
    +      date: Thu, 05 Mar 2020 23:18:31 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:32 GMT
    +      date: Thu, 05 Mar 2020 23:18:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:34 GMT
    +      date: Thu, 05 Mar 2020 23:18:35 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:36 GMT
    +      date: Thu, 05 Mar 2020 23:18:37 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '72'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:38 GMT
    +      date: Thu, 05 Mar 2020 23:18:39 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:47 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key5","deletedDate":1583450309,"scheduledPurgeDate":1591226309,"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/5c309da0ac344f4f97fa57880c9ccb8a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0wjLQd_NQiK7C6rRuCZqxg8VUKCUxiyhHlVDpk7EVePX2Cu6_GmBRlckIEemGIu2BcWpKALZ4DfGK5yFSC-bTI1q_1ikhBaCdktu3Ug_zAMGG_qkP7StDCt7NvhDS4Fz4d7tEppayxL-FAFBz8MHs3Un7l7FXX3xRujTwcNNPCQJwFQ-zBP8iymoWboo6Bt8vfkDlCh_X4iE7uCqWSGENl0GM6mAvQXEFdNSnYEOLi4c5q7eQg2Ym7ngKFf4AdtOCaVD_iP0dFGcJCmRas6eD_P7NnijF0dlejN5mGvLskxELJ0VCkeZfdVTJGEI_tDIBA_16l0EZFDiF5NGFnPS6Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '801'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/keys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583450340,"scheduledPurgeDate":1591226340,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/6194bc846ba54941bd733364e9dcd153","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kXqCd-7nH1ZvkTtmX8-bvRQc8JuaYgRGNt7-B3GrBGw7de5x7kF8Gpd7aPno_TfTYfWpHMGNfsKRMunxQ_OiniUAvS9lte7dKkZ0hfWqxvUqeZWPb1o2tBb0Wun_ER0oLjYNJKgcIdcsXWZwv5oyACb2eVH1M0z5PTxkbxxNclBW0g8AgkTSWA0WgumjIhfT0S9XDeN0rAgxO1cSZpK2D0lpsqIa-6RRKprZSdXOVfSjNomoaYfgSjLZZuSs9fCBX1515QOA-29unQ472DLxLrtGkPLhEtWapcoQRDPLZmEf7QBmwgmHFflCxFk2PpHTFvJfOYsYa0qwwQvr6nWPrQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '801'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:03 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:10 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '72'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key6","deletedDate":1583450340,"scheduledPurgeDate":1591226340,"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/6194bc846ba54941bd733364e9dcd153","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kXqCd-7nH1ZvkTtmX8-bvRQc8JuaYgRGNt7-B3GrBGw7de5x7kF8Gpd7aPno_TfTYfWpHMGNfsKRMunxQ_OiniUAvS9lte7dKkZ0hfWqxvUqeZWPb1o2tBb0Wun_ER0oLjYNJKgcIdcsXWZwv5oyACb2eVH1M0z5PTxkbxxNclBW0g8AgkTSWA0WgumjIhfT0S9XDeN0rAgxO1cSZpK2D0lpsqIa-6RRKprZSdXOVfSjNomoaYfgSjLZZuSs9fCBX1515QOA-29unQ472DLxLrtGkPLhEtWapcoQRDPLZmEf7QBmwgmHFflCxFk2PpHTFvJfOYsYa0qwwQvr6nWPrQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '801'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: POST
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key0/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/135744726c0941fea7b4af8a1619e54f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5HNksTMDaNYfjbb01BnAAxQtt4gSX3FPoc4jjKwmU-mkG1l25SviWLRP2Fc7MW4XdE7KFIP_oU8L7Bqgu9jsVcERAZSUuL7cO9fqo5IvxXcinhjKHsUD3R2e4zfW984jsQh6H4O8XmALtdrCkFOx7pZYeg79TKXB19AAjHNHfmokhfTCLjkTlj3UyrEQz5d6yw-WC8ch3Z0czVa8vzc7JONdcRWnh2UtXMeNYX6kEBiy7U2Ec8FuEoEz-gJxCrTxO7OrruFwV7j4Eyu7xnTsiZB1kg-2o8BW4xwZUudpjrzh0jyCYvHtPMzXQIumweJt8Qls37mVJh7Dq4YaStbqFQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '663'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key0/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/135744726c0941fea7b4af8a1619e54f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5HNksTMDaNYfjbb01BnAAxQtt4gSX3FPoc4jjKwmU-mkG1l25SviWLRP2Fc7MW4XdE7KFIP_oU8L7Bqgu9jsVcERAZSUuL7cO9fqo5IvxXcinhjKHsUD3R2e4zfW984jsQh6H4O8XmALtdrCkFOx7pZYeg79TKXB19AAjHNHfmokhfTCLjkTlj3UyrEQz5d6yw-WC8ch3Z0czVa8vzc7JONdcRWnh2UtXMeNYX6kEBiy7U2Ec8FuEoEz-gJxCrTxO7OrruFwV7j4Eyu7xnTsiZB1kg-2o8BW4xwZUudpjrzh0jyCYvHtPMzXQIumweJt8Qls37mVJh7Dq4YaStbqFQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '663'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: POST
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key1/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/169e7a7885c6444095dd586ba2b949a0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lC0W2nAI0b5uGYFNA-dcx6k_z_TkSQyu4wQKpPSamJ_xmq9Mc3T_FdjItt_jJy7R-8ff-lUkXhM95vWFoS_JrI_c-nGSL5pow7ANGG58wx1OOPB24y2mp8SiUvad0M1f7M2oUo5Up8sAxqY9WMK31veZxQNmUnSwoV3QdFxgrLEQsAKUGnnJIxKyGrI-Q6pMlVCBPoWFM_AjceZiVf_8dcryJ8OR7FQdo-7BoMctSlgAN10LIThy49xp4y_QDpF1got4fN5t3hCBPjcRbdLF9RA6PgtLWFs1_V0rj8qwAp1Nk84rkhTdSe52zq0vNhX_cYUkamYITYUl2759dGVh9w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '663'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key1/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:19:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:20:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:40 GMT
    +      date: Thu, 05 Mar 2020 23:20:02 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:42 GMT
    +      date: Thu, 05 Mar 2020 23:20:04 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:44 GMT
    +      date: Thu, 05 Mar 2020 23:20:06 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
         headers:
           cache-control: no-cache
    -      content-length: '72'
    +      content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:46 GMT
    +      date: Thu, 05 Mar 2020 23:20:08 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key0","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/cde13b7440c74ad2a1435c4ae8edc4c0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"o1bQ5HihVeOH7vldRDKzv9ZmjAcjQdUNRwWdW0326trwJ4ukXB1wNnmeMYNxMqyH9KV2dspnmu3yrm9tddZKcZAK1xk6YpZ9Fy8CO5wS-jJYqQaDo8IsU-c4b-RpKw3jVVEsqASWIhRzdmORWGBOlCuhqBa93rBv2nGjB8Xn9pHgK5c9yLh2qvmwF2FKlGhEJdNXofU5vFcUJl_ZzQy3CrcMGF0ENkE5My_h_jVdrTcOZCVMxgOTWS4VaggSD1mAYssSxqAhCInDCK7DaGYNYodnZGC207LwQbjVsOGTGhSPm9chDbVb8JSZq-GVCi_McdbzW79QTZK7D1TQcWQtYQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676639,"updated":1575676639,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
         headers:
           cache-control: no-cache
    -      content-length: '801'
    +      content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:48 GMT
    +      date: Thu, 05 Mar 2020 23:20:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key0
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key5/recover?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/d4aefbce6a9a4824af96fb54152291ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tSNPSAySDMJZMlHgFuoHDQh3Z-3Xjr0YUWgzQf7h-o160G00n6mcA79gm3RfO2qNAMItsukrxHfk33S_oTzJtI9vvhfBCtgay3bmd-zX8Yy3-fqRA6geQyvBzPN2OfszoQIKqT6Qh8mU4EFn48x45GHkqXmtl4B5zEQOwq0X6m9kA9_WDmgXJKTwp2hoxp7Ysa67TtN8E8lSYhgnQQQ6DZqxCs504wU3FNiCbEFFwjexo5eJqK9ldXJrIsXF1kWZNXAekBOL9LPotn_DJY4Eap4Cw53GCS4K2oTorhR8R-UuwjFYIbesjM-uD2Yb5Hm5HDtl4WsEeDSYaWHwL8Ingw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
         headers:
           cache-control: no-cache
    -      content-length: '663'
    +      content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:50 GMT
    +      date: Thu, 05 Mar 2020 23:20:12 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key5/recover
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:50 GMT
    +      date: Thu, 05 Mar 2020 23:20:14 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:52 GMT
    +      date: Thu, 05 Mar 2020 23:20:16 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:54 GMT
    +      date: Thu, 05 Mar 2020 23:20:18 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:57 GMT
    +      date: Thu, 05 Mar 2020 23:20:20 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/169e7a7885c6444095dd586ba2b949a0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lC0W2nAI0b5uGYFNA-dcx6k_z_TkSQyu4wQKpPSamJ_xmq9Mc3T_FdjItt_jJy7R-8ff-lUkXhM95vWFoS_JrI_c-nGSL5pow7ANGG58wx1OOPB24y2mp8SiUvad0M1f7M2oUo5Up8sAxqY9WMK31veZxQNmUnSwoV3QdFxgrLEQsAKUGnnJIxKyGrI-Q6pMlVCBPoWFM_AjceZiVf_8dcryJ8OR7FQdo-7BoMctSlgAN10LIThy49xp4y_QDpF1got4fN5t3hCBPjcRbdLF9RA6PgtLWFs1_V0rj8qwAp1Nk84rkhTdSe52zq0vNhX_cYUkamYITYUl2759dGVh9w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '64'
    +      content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:59:59 GMT
    +      date: Thu, 05 Mar 2020 23:20:22 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: POST
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key2/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/20a15d25728240cfa12ec74241a8d536","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sxlaVZlH0baSBLySvSCQbZRBI78g3m6rpJZdSkg4QyTGSi3_6T-encjqcyGP16n7094TJjkTlVT-9ek-2h0QdPAfdY2i28LUJX3T1Qvb4adDOpkCVvZmhHaCDu0Y9qsMS7vu4G77Ta4UT65FimKTSNLKqcBHQOKS9QSS31SGhtUCC-FqcOJVPab60m8fAiY-jUTZOOjt1en97o4nbxLWItW-0-XYpDcnvBnlw7RyL9Qv7V9nLSA6x7Vy40jgt-n08MkWhMC2qHboDu_I6QnIsN0LFXJxQY2_tIJI30gBA1vn67WQoi7XHNJUUZnC4xLLkdbDoNQ7UWU1IXsGiArfHw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '64'
    +      content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:01 GMT
    +      date: Thu, 05 Mar 2020 23:20:23 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key2/recover?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:03 GMT
    +      date: Thu, 05 Mar 2020 23:20:23 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:05 GMT
    +      date: Thu, 05 Mar 2020 23:20:25 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:07 GMT
    +      date: Thu, 05 Mar 2020 23:20:27 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:09 GMT
    +      date: Thu, 05 Mar 2020 23:20:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/d4aefbce6a9a4824af96fb54152291ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tSNPSAySDMJZMlHgFuoHDQh3Z-3Xjr0YUWgzQf7h-o160G00n6mcA79gm3RfO2qNAMItsukrxHfk33S_oTzJtI9vvhfBCtgay3bmd-zX8Yy3-fqRA6geQyvBzPN2OfszoQIKqT6Qh8mU4EFn48x45GHkqXmtl4B5zEQOwq0X6m9kA9_WDmgXJKTwp2hoxp7Ysa67TtN8E8lSYhgnQQQ6DZqxCs504wU3FNiCbEFFwjexo5eJqK9ldXJrIsXF1kWZNXAekBOL9LPotn_DJY4Eap4Cw53GCS4K2oTorhR8R-UuwjFYIbesjM-uD2Yb5Hm5HDtl4WsEeDSYaWHwL8Ingw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
         headers:
           cache-control: no-cache
    -      content-length: '663'
    +      content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:11 GMT
    +      date: Thu, 05 Mar 2020 23:20:31 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key6/recover?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/e056d0e37d2a4e09a81eaaebdd1fc71b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wsKFkpGQbDl1P4Ge-2i8NHAkOaQUPsBBVPtjJvZAFFOstAZnvnDa1m6fEaBjDELDDJhCPaiirlEFSctDrVSbEPqvWSgbaYn0Xmw8K5N-tYibVVy6bFO46cVBpvCk8n-PacFl5A5bSqL-KhOXxz2k96jfGpikLXKH88etGxd82_bbGll6FYDvEAQZ5K37rBP4UrhviVXYPtyL_dV4yRlHLGRBebkojdq2810DrR-xAmE7bzufeCag1UcDTmq3S7XD3EwPnPW1aF-omgU8vYc4IsbIvHL30jTEBQWAsnrbU_Bx-Xoc6wkZKFscXIlmRvnSn5XQst1KPbMR3K4qR3-rBQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
         headers:
           cache-control: no-cache
    -      content-length: '663'
    +      content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:13 GMT
    +      date: Thu, 05 Mar 2020 23:20:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key6/recover
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:13 GMT
    +      date: Thu, 05 Mar 2020 23:20:35 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key6/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:15 GMT
    +      date: Thu, 05 Mar 2020 23:20:37 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key6/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:17 GMT
    +      date: Thu, 05 Mar 2020 23:20:39 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key6/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:19 GMT
    +      date: Thu, 05 Mar 2020 23:20:42 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key6/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:21 GMT
    +      date: Thu, 05 Mar 2020 23:20:44 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key6/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:23 GMT
    +      date: Thu, 05 Mar 2020 23:20:46 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key6/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/e056d0e37d2a4e09a81eaaebdd1fc71b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wsKFkpGQbDl1P4Ge-2i8NHAkOaQUPsBBVPtjJvZAFFOstAZnvnDa1m6fEaBjDELDDJhCPaiirlEFSctDrVSbEPqvWSgbaYn0Xmw8K5N-tYibVVy6bFO46cVBpvCk8n-PacFl5A5bSqL-KhOXxz2k96jfGpikLXKH88etGxd82_bbGll6FYDvEAQZ5K37rBP4UrhviVXYPtyL_dV4yRlHLGRBebkojdq2810DrR-xAmE7bzufeCag1UcDTmq3S7XD3EwPnPW1aF-omgU8vYc4IsbIvHL30jTEBQWAsnrbU_Bx-Xoc6wkZKFscXIlmRvnSn5XQst1KPbMR3K4qR3-rBQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/20a15d25728240cfa12ec74241a8d536","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sxlaVZlH0baSBLySvSCQbZRBI78g3m6rpJZdSkg4QyTGSi3_6T-encjqcyGP16n7094TJjkTlVT-9ek-2h0QdPAfdY2i28LUJX3T1Qvb4adDOpkCVvZmhHaCDu0Y9qsMS7vu4G77Ta4UT65FimKTSNLKqcBHQOKS9QSS31SGhtUCC-FqcOJVPab60m8fAiY-jUTZOOjt1en97o4nbxLWItW-0-XYpDcnvBnlw7RyL9Qv7V9nLSA6x7Vy40jgt-n08MkWhMC2qHboDu_I6QnIsN0LFXJxQY2_tIJI30gBA1vn67WQoi7XHNJUUZnC4xLLkdbDoNQ7UWU1IXsGiArfHw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:25 GMT
    +      date: Thu, 05 Mar 2020 23:20:48 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key6/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key3/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key3/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/01430da702044233b768abad29bebea4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"9VKAShVpmhwPvKJJlNfhvWab54CCyR-YzJ_5vbUuC8-SxEe67mJHtNBcSj8RwZG0N2mHo4CsNfgDx_tGV-HN5zvsImW9ExRoTQBbmmoFfBgk0z6_dI_upZaiAMbjckOZTlWhI1kQ0yTHeisMrp9xauZ17UKhSinxTCgLHfKrP5rA8RvgBBz4k-czCKXDLrqjz3XEWuLvoTXvwhjkgLuvAsLeaKuLYTD7WSPLl8_IrxKcw0-AgB6aCDBNsmVOnGjv3CiaxYefVi7hcEtgsSXuIr3_d5dM7AYXyPMb5Qk-E3xtiJuwI6YapL6WRQ4yNWVm3siJpKwYVtX37svJ2NFZpw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/cb4f13eb944849aa8138753c37839e18","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vjJVMq5-CwaJrduFqGtLL6HYsjyrINrwJroIFbTenHyawgOmsf9afiqRrwHrWD0wsZE-0WvHazMaPtiZ8EyO-FmYRGK1faIIFdffugU2dI-AW6vg0U4LbXDO6vwlK1T6oofKGe0QPT45MgsHOxdHKA3OOzsXEn6is3EKpAguN7g7ekzXv_qgyJjHOyw-eyglHxD1_qPXtbgZXP5V-idWmWmRqOMV9y0yCBEcGxB2vAXkDHhPkc7C-3n6IzCErOtyeJwTBi-DtPQYRjET7oGGsaYZJjDMhMVXz-tdSkKH-jXMYXSaLQqOw3kz1XAn92JMB4Ht8zTspiWfbRRcacKfsw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:27 GMT
    +      date: Thu, 05 Mar 2020 23:20:49 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key3/recover
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key3/recover?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
    @@ -4154,37 +4793,30 @@ interactions:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:27 GMT
    +      date: Thu, 05 Mar 2020 23:20:49 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
    @@ -4192,37 +4824,30 @@ interactions:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:29 GMT
    +      date: Thu, 05 Mar 2020 23:20:51 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
    @@ -4230,37 +4855,30 @@ interactions:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:32 GMT
    +      date: Thu, 05 Mar 2020 23:20:53 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
    @@ -4268,37 +4886,30 @@ interactions:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:34 GMT
    +      date: Thu, 05 Mar 2020 23:20:55 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
    @@ -4306,37 +4917,30 @@ interactions:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:37 GMT
    +      date: Thu, 05 Mar 2020 23:20:57 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
    @@ -4344,37 +4948,30 @@ interactions:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:39 GMT
    +      date: Thu, 05 Mar 2020 23:20:59 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
    @@ -4382,37 +4979,30 @@ interactions:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:41 GMT
    +      date: Thu, 05 Mar 2020 23:21:01 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
    @@ -4420,37 +5010,30 @@ interactions:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:43 GMT
    +      date: Thu, 05 Mar 2020 23:21:03 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
    @@ -4458,37 +5041,30 @@ interactions:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:45 GMT
    +      date: Thu, 05 Mar 2020 23:21:05 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
    @@ -4496,2002 +5072,1693 @@ interactions:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:47 GMT
    +      date: Thu, 05 Mar 2020 23:21:07 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/01430da702044233b768abad29bebea4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"9VKAShVpmhwPvKJJlNfhvWab54CCyR-YzJ_5vbUuC8-SxEe67mJHtNBcSj8RwZG0N2mHo4CsNfgDx_tGV-HN5zvsImW9ExRoTQBbmmoFfBgk0z6_dI_upZaiAMbjckOZTlWhI1kQ0yTHeisMrp9xauZ17UKhSinxTCgLHfKrP5rA8RvgBBz4k-czCKXDLrqjz3XEWuLvoTXvwhjkgLuvAsLeaKuLYTD7WSPLl8_IrxKcw0-AgB6aCDBNsmVOnGjv3CiaxYefVi7hcEtgsSXuIr3_d5dM7AYXyPMb5Qk-E3xtiJuwI6YapL6WRQ4yNWVm3siJpKwYVtX37svJ2NFZpw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
         headers:
           cache-control: no-cache
    -      content-length: '663'
    +      content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:49 GMT
    +      date: Thu, 05 Mar 2020 23:21:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key1/recover?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/8a05d6ab1b0f4545b2e716c0d6e33569","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sSrDCC-XLFRnFtrlKmLmDomrGFLjaQ_bJGVDwLgqyzioPe5yS-qFm7fs9MoRfA2vskQFvbS19-5MM3IZ3J20XEeBAb43C4KVCeirKyepF-uRKEgGlj3ESYeGPcO_0-tTre_akkUo7pCxNbpivnDrK6TP_7_OyHlk4n-lqdBO1_E9nXIYRTvJiQVgO_r86sR6TtgL_G9caCPW9AqOl8m-Fo3Xc3nAGDxVjPtLDyeX8mVXlOJx5KX5Dzu33mHxJAVyGGGpuBYs3SCYGtb333TJ2Rwgrbm-MxhNKAzTb0cRCgy-yCkHBJRFv-cIaicNhkTxtGhO1KUGYBbMuACumpOYjQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
         headers:
           cache-control: no-cache
    -      content-length: '663'
    +      content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:51 GMT
    +      date: Thu, 05 Mar 2020 23:21:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key1/recover
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:51 GMT
    +      date: Thu, 05 Mar 2020 23:21:13 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key3"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:53 GMT
    +      date: Thu, 05 Mar 2020 23:21:15 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/cb4f13eb944849aa8138753c37839e18","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vjJVMq5-CwaJrduFqGtLL6HYsjyrINrwJroIFbTenHyawgOmsf9afiqRrwHrWD0wsZE-0WvHazMaPtiZ8EyO-FmYRGK1faIIFdffugU2dI-AW6vg0U4LbXDO6vwlK1T6oofKGe0QPT45MgsHOxdHKA3OOzsXEn6is3EKpAguN7g7ekzXv_qgyJjHOyw-eyglHxD1_qPXtbgZXP5V-idWmWmRqOMV9y0yCBEcGxB2vAXkDHhPkc7C-3n6IzCErOtyeJwTBi-DtPQYRjET7oGGsaYZJjDMhMVXz-tdSkKH-jXMYXSaLQqOw3kz1XAn92JMB4Ht8zTspiWfbRRcacKfsw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '64'
    +      content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:55 GMT
    +      date: Thu, 05 Mar 2020 23:21:17 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: POST
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key4/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/b3c4608f76474d2a98f03a8ef3c3ab9e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qmNO4VNVjL8gEyYBsItp4kW3oqomTTowPcF1E2Rdxj5TfKtFfzRJqxY_M767RGeulEVZyKKMGLACmHOP9D1a38UzAtlTAx_u5kTd04RvV60mAiaHLjZe5twoQKOc0as1gzsJcjefPG0jhSRAFmxMvz343Ycy8iiFLNmKG6lZb-q0eEGOdPpz2D7rPVqq0UOmDgYUEXeXv0cQtPwfazDcnNlRkG54H6tAetYpFniXkaUI5TRXqVd6oLD3bHXrW_vmNKkBn5bkfmPTDT2bPcAfJMCeb5c1Bk2G_6mDd8_vvLwNoEMjLxPfKB4EWRT5BgEgz1fXP8s6tKtqM7YyTF2yZw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
    -      content-length: '64'
    +      content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:57 GMT
    +      date: Thu, 05 Mar 2020 23:21:17 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/
    -        - api-version=7.0
    -        - ''
    +      code: 200
    +      message: OK
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key4/recover?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:00:59 GMT
    +      date: Thu, 05 Mar 2020 23:21:17 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:01 GMT
    +      date: Thu, 05 Mar 2020 23:21:19 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:03 GMT
    +      date: Thu, 05 Mar 2020 23:21:22 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:05 GMT
    +      date: Thu, 05 Mar 2020 23:21:24 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:07 GMT
    +      date: Thu, 05 Mar 2020 23:21:26 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key1"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:09 GMT
    +      date: Thu, 05 Mar 2020 23:21:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/8a05d6ab1b0f4545b2e716c0d6e33569","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sSrDCC-XLFRnFtrlKmLmDomrGFLjaQ_bJGVDwLgqyzioPe5yS-qFm7fs9MoRfA2vskQFvbS19-5MM3IZ3J20XEeBAb43C4KVCeirKyepF-uRKEgGlj3ESYeGPcO_0-tTre_akkUo7pCxNbpivnDrK6TP_7_OyHlk4n-lqdBO1_E9nXIYRTvJiQVgO_r86sR6TtgL_G9caCPW9AqOl8m-Fo3Xc3nAGDxVjPtLDyeX8mVXlOJx5KX5Dzu33mHxJAVyGGGpuBYs3SCYGtb333TJ2Rwgrbm-MxhNKAzTb0cRCgy-yCkHBJRFv-cIaicNhkTxtGhO1KUGYBbMuACumpOYjQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
    -      content-length: '663'
    +      content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:11 GMT
    +      date: Thu, 05 Mar 2020 23:21:31 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key2/recover?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/65f413dbc1ee4dff8fc405007fe32ee7","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pikJJ2my7aBZ6VqM9sN2GWxtMx5lZNuOf_hLA-xiJMXOEKvbn8DqCbMW89cM4UY2ESbudEq7jDPrZcsnErbEtcH8ZA5bDgXIFONoHaenwBPqmAWV_0K2ZkDv2mjpCglKMSkpMIjbVyMXZhmqarbINBZW2siPP2W8KbKQhI2l2bHWkZaXVQkULixQI85mF8TMy3T5vG5BtV-jz_1_l2NrkCBWxP7x3VH0q-7JHjqMmv1WsHFl-o00omFRI63Y7pschN4Vt4tgTLwqjUCPqEqhDW2W3c1Btal_7ubbgfskJd4yKeh0edkCyqPh3oCjY2CCUkEVuhZUgEXAbAuTLj0MlQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
    -      content-length: '663'
    +      content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:13 GMT
    +      date: Thu, 05 Mar 2020 23:21:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
    -      code: 200
    -      message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key2/recover
    -        - api-version=7.0
    -        - ''
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:13 GMT
    +      date: Thu, 05 Mar 2020 23:21:35 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key2/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:16 GMT
    +      date: Thu, 05 Mar 2020 23:21:37 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key2/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:18 GMT
    +      date: Thu, 05 Mar 2020 23:21:39 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key2/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:20 GMT
    +      date: Thu, 05 Mar 2020 23:21:41 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key2/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:22 GMT
    +      date: Thu, 05 Mar 2020 23:21:43 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key2/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:24 GMT
    +      date: Thu, 05 Mar 2020 23:21:45 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key2/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key2"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:27 GMT
    +      date: Thu, 05 Mar 2020 23:21:47 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key2/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/65f413dbc1ee4dff8fc405007fe32ee7","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pikJJ2my7aBZ6VqM9sN2GWxtMx5lZNuOf_hLA-xiJMXOEKvbn8DqCbMW89cM4UY2ESbudEq7jDPrZcsnErbEtcH8ZA5bDgXIFONoHaenwBPqmAWV_0K2ZkDv2mjpCglKMSkpMIjbVyMXZhmqarbINBZW2siPP2W8KbKQhI2l2bHWkZaXVQkULixQI85mF8TMy3T5vG5BtV-jz_1_l2NrkCBWxP7x3VH0q-7JHjqMmv1WsHFl-o00omFRI63Y7pschN4Vt4tgTLwqjUCPqEqhDW2W3c1Btal_7ubbgfskJd4yKeh0edkCyqPh3oCjY2CCUkEVuhZUgEXAbAuTLj0MlQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/b3c4608f76474d2a98f03a8ef3c3ab9e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qmNO4VNVjL8gEyYBsItp4kW3oqomTTowPcF1E2Rdxj5TfKtFfzRJqxY_M767RGeulEVZyKKMGLACmHOP9D1a38UzAtlTAx_u5kTd04RvV60mAiaHLjZe5twoQKOc0as1gzsJcjefPG0jhSRAFmxMvz343Ycy8iiFLNmKG6lZb-q0eEGOdPpz2D7rPVqq0UOmDgYUEXeXv0cQtPwfazDcnNlRkG54H6tAetYpFniXkaUI5TRXqVd6oLD3bHXrW_vmNKkBn5bkfmPTDT2bPcAfJMCeb5c1Bk2G_6mDd8_vvLwNoEMjLxPfKB4EWRT5BgEgz1fXP8s6tKtqM7YyTF2yZw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:29 GMT
    +      date: Thu, 05 Mar 2020 23:21:49 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key2/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key4/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key5/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/1ef2c70cdc554402864098a8ade76b5c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4weRkAo_9V-3q9foJnf717SjngMFqTJybflQB6TjhNofex1LAaSVHgNUoC9gXN1za64B2EtuczyXQ8taCvlYsrzpwoEXS-clOW7ICWpEuWKIcmpRG_K3uZEHkYpn8RClcfn5QMaVZD5haGo4M39vp97gu7kBErLLbGPVJz9-jGyg30PW_3W77DSpJppHkM-UbGhi_zWkOopzAT0RZk6taEzsB4l9SObf_doYm9EdgADhhX5gVDVD00Dbjy2i-xgFfmA5mfb-L1O612qlnxUSbuDy9dveZFZAQe-_juYF4ofY6emmPOZ9L2pT6z0GwibCNDcrLd9n2duqWTfPUiTn9Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/5c309da0ac344f4f97fa57880c9ccb8a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0wjLQd_NQiK7C6rRuCZqxg8VUKCUxiyhHlVDpk7EVePX2Cu6_GmBRlckIEemGIu2BcWpKALZ4DfGK5yFSC-bTI1q_1ikhBaCdktu3Ug_zAMGG_qkP7StDCt7NvhDS4Fz4d7tEppayxL-FAFBz8MHs3Un7l7FXX3xRujTwcNNPCQJwFQ-zBP8iymoWboo6Bt8vfkDlCh_X4iE7uCqWSGENl0GM6mAvQXEFdNSnYEOLi4c5q7eQg2Ym7ngKFf4AdtOCaVD_iP0dFGcJCmRas6eD_P7NnijF0dlejN5mGvLskxELJ0VCkeZfdVTJGEI_tDIBA_16l0EZFDiF5NGFnPS6Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:31 GMT
    +      date: Thu, 05 Mar 2020 23:21:49 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key4/recover
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key5/recover?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:31 GMT
    +      date: Thu, 05 Mar 2020 23:21:49 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:33 GMT
    +      date: Thu, 05 Mar 2020 23:21:52 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:35 GMT
    +      date: Thu, 05 Mar 2020 23:21:54 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:37 GMT
    +      date: Thu, 05 Mar 2020 23:21:56 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:39 GMT
    +      date: Thu, 05 Mar 2020 23:21:58 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:41 GMT
    +      date: Thu, 05 Mar 2020 23:22:00 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:43 GMT
    +      date: Thu, 05 Mar 2020 23:22:02 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:45 GMT
    +      date: Thu, 05 Mar 2020 23:22:04 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key4"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:22:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key5"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:47 GMT
    +      date: Thu, 05 Mar 2020 23:22:08 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/1ef2c70cdc554402864098a8ade76b5c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4weRkAo_9V-3q9foJnf717SjngMFqTJybflQB6TjhNofex1LAaSVHgNUoC9gXN1za64B2EtuczyXQ8taCvlYsrzpwoEXS-clOW7ICWpEuWKIcmpRG_K3uZEHkYpn8RClcfn5QMaVZD5haGo4M39vp97gu7kBErLLbGPVJz9-jGyg30PW_3W77DSpJppHkM-UbGhi_zWkOopzAT0RZk6taEzsB4l9SObf_doYm9EdgADhhX5gVDVD00Dbjy2i-xgFfmA5mfb-L1O612qlnxUSbuDy9dveZFZAQe-_juYF4ofY6emmPOZ9L2pT6z0GwibCNDcrLd9n2duqWTfPUiTn9Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/5c309da0ac344f4f97fa57880c9ccb8a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0wjLQd_NQiK7C6rRuCZqxg8VUKCUxiyhHlVDpk7EVePX2Cu6_GmBRlckIEemGIu2BcWpKALZ4DfGK5yFSC-bTI1q_1ikhBaCdktu3Ug_zAMGG_qkP7StDCt7NvhDS4Fz4d7tEppayxL-FAFBz8MHs3Un7l7FXX3xRujTwcNNPCQJwFQ-zBP8iymoWboo6Bt8vfkDlCh_X4iE7uCqWSGENl0GM6mAvQXEFdNSnYEOLi4c5q7eQg2Ym7ngKFf4AdtOCaVD_iP0dFGcJCmRas6eD_P7NnijF0dlejN5mGvLskxELJ0VCkeZfdVTJGEI_tDIBA_16l0EZFDiF5NGFnPS6Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:49 GMT
    +      date: Thu, 05 Mar 2020 23:22:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key0/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key6/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/cde13b7440c74ad2a1435c4ae8edc4c0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"o1bQ5HihVeOH7vldRDKzv9ZmjAcjQdUNRwWdW0326trwJ4ukXB1wNnmeMYNxMqyH9KV2dspnmu3yrm9tddZKcZAK1xk6YpZ9Fy8CO5wS-jJYqQaDo8IsU-c4b-RpKw3jVVEsqASWIhRzdmORWGBOlCuhqBa93rBv2nGjB8Xn9pHgK5c9yLh2qvmwF2FKlGhEJdNXofU5vFcUJl_ZzQy3CrcMGF0ENkE5My_h_jVdrTcOZCVMxgOTWS4VaggSD1mAYssSxqAhCInDCK7DaGYNYodnZGC207LwQbjVsOGTGhSPm9chDbVb8JSZq-GVCi_McdbzW79QTZK7D1TQcWQtYQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676639,"updated":1575676639,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/6194bc846ba54941bd733364e9dcd153","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kXqCd-7nH1ZvkTtmX8-bvRQc8JuaYgRGNt7-B3GrBGw7de5x7kF8Gpd7aPno_TfTYfWpHMGNfsKRMunxQ_OiniUAvS9lte7dKkZ0hfWqxvUqeZWPb1o2tBb0Wun_ER0oLjYNJKgcIdcsXWZwv5oyACb2eVH1M0z5PTxkbxxNclBW0g8AgkTSWA0WgumjIhfT0S9XDeN0rAgxO1cSZpK2D0lpsqIa-6RRKprZSdXOVfSjNomoaYfgSjLZZuSs9fCBX1515QOA-29unQ472DLxLrtGkPLhEtWapcoQRDPLZmEf7QBmwgmHFflCxFk2PpHTFvJfOYsYa0qwwQvr6nWPrQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:51 GMT
    +      date: Thu, 05 Mar 2020 23:22:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /deletedkeys/key0/recover
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/deletedkeys/key6/recover?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:51 GMT
    +      date: Thu, 05 Mar 2020 23:22:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:53 GMT
    +      date: Thu, 05 Mar 2020 23:22:12 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:55 GMT
    +      date: Thu, 05 Mar 2020 23:22:14 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:57 GMT
    +      date: Thu, 05 Mar 2020 23:22:16 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:01:59 GMT
    +      date: Thu, 05 Mar 2020 23:22:18 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:01 GMT
    +      date: Thu, 05 Mar 2020 23:22:20 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:04 GMT
    +      date: Thu, 05 Mar 2020 23:22:22 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:06 GMT
    +      date: Thu, 05 Mar 2020 23:22:25 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:08 GMT
    +      date: Thu, 05 Mar 2020 23:22:27 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key0"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '64'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:22:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key6"}}'
         headers:
           cache-control: no-cache
           content-length: '64'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:10 GMT
    +      date: Thu, 05 Mar 2020 23:22:31 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/cde13b7440c74ad2a1435c4ae8edc4c0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"o1bQ5HihVeOH7vldRDKzv9ZmjAcjQdUNRwWdW0326trwJ4ukXB1wNnmeMYNxMqyH9KV2dspnmu3yrm9tddZKcZAK1xk6YpZ9Fy8CO5wS-jJYqQaDo8IsU-c4b-RpKw3jVVEsqASWIhRzdmORWGBOlCuhqBa93rBv2nGjB8Xn9pHgK5c9yLh2qvmwF2FKlGhEJdNXofU5vFcUJl_ZzQy3CrcMGF0ENkE5My_h_jVdrTcOZCVMxgOTWS4VaggSD1mAYssSxqAhCInDCK7DaGYNYodnZGC207LwQbjVsOGTGhSPm9chDbVb8JSZq-GVCi_McdbzW79QTZK7D1TQcWQtYQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676639,"updated":1575676639,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/6194bc846ba54941bd733364e9dcd153","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kXqCd-7nH1ZvkTtmX8-bvRQc8JuaYgRGNt7-B3GrBGw7de5x7kF8Gpd7aPno_TfTYfWpHMGNfsKRMunxQ_OiniUAvS9lte7dKkZ0hfWqxvUqeZWPb1o2tBb0Wun_ER0oLjYNJKgcIdcsXWZwv5oyACb2eVH1M0z5PTxkbxxNclBW0g8AgkTSWA0WgumjIhfT0S9XDeN0rAgxO1cSZpK2D0lpsqIa-6RRKprZSdXOVfSjNomoaYfgSjLZZuSs9fCBX1515QOA-29unQ472DLxLrtGkPLhEtWapcoQRDPLZmEf7QBmwgmHFflCxFk2PpHTFvJfOYsYa0qwwQvr6nWPrQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:12 GMT
    +      date: Thu, 05 Mar 2020 23:22:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/d4aefbce6a9a4824af96fb54152291ee","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tSNPSAySDMJZMlHgFuoHDQh3Z-3Xjr0YUWgzQf7h-o160G00n6mcA79gm3RfO2qNAMItsukrxHfk33S_oTzJtI9vvhfBCtgay3bmd-zX8Yy3-fqRA6geQyvBzPN2OfszoQIKqT6Qh8mU4EFn48x45GHkqXmtl4B5zEQOwq0X6m9kA9_WDmgXJKTwp2hoxp7Ysa67TtN8E8lSYhgnQQQ6DZqxCs504wU3FNiCbEFFwjexo5eJqK9ldXJrIsXF1kWZNXAekBOL9LPotn_DJY4Eap4Cw53GCS4K2oTorhR8R-UuwjFYIbesjM-uD2Yb5Hm5HDtl4WsEeDSYaWHwL8Ingw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/135744726c0941fea7b4af8a1619e54f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5HNksTMDaNYfjbb01BnAAxQtt4gSX3FPoc4jjKwmU-mkG1l25SviWLRP2Fc7MW4XdE7KFIP_oU8L7Bqgu9jsVcERAZSUuL7cO9fqo5IvxXcinhjKHsUD3R2e4zfW984jsQh6H4O8XmALtdrCkFOx7pZYeg79TKXB19AAjHNHfmokhfTCLjkTlj3UyrEQz5d6yw-WC8ch3Z0czVa8vzc7JONdcRWnh2UtXMeNYX6kEBiy7U2Ec8FuEoEz-gJxCrTxO7OrruFwV7j4Eyu7xnTsiZB1kg-2o8BW4xwZUudpjrzh0jyCYvHtPMzXQIumweJt8Qls37mVJh7Dq4YaStbqFQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:14 GMT
    +      date: Thu, 05 Mar 2020 23:22:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key5/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key0/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/e056d0e37d2a4e09a81eaaebdd1fc71b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"wsKFkpGQbDl1P4Ge-2i8NHAkOaQUPsBBVPtjJvZAFFOstAZnvnDa1m6fEaBjDELDDJhCPaiirlEFSctDrVSbEPqvWSgbaYn0Xmw8K5N-tYibVVy6bFO46cVBpvCk8n-PacFl5A5bSqL-KhOXxz2k96jfGpikLXKH88etGxd82_bbGll6FYDvEAQZ5K37rBP4UrhviVXYPtyL_dV4yRlHLGRBebkojdq2810DrR-xAmE7bzufeCag1UcDTmq3S7XD3EwPnPW1aF-omgU8vYc4IsbIvHL30jTEBQWAsnrbU_Bx-Xoc6wkZKFscXIlmRvnSn5XQst1KPbMR3K4qR3-rBQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/169e7a7885c6444095dd586ba2b949a0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lC0W2nAI0b5uGYFNA-dcx6k_z_TkSQyu4wQKpPSamJ_xmq9Mc3T_FdjItt_jJy7R-8ff-lUkXhM95vWFoS_JrI_c-nGSL5pow7ANGG58wx1OOPB24y2mp8SiUvad0M1f7M2oUo5Up8sAxqY9WMK31veZxQNmUnSwoV3QdFxgrLEQsAKUGnnJIxKyGrI-Q6pMlVCBPoWFM_AjceZiVf_8dcryJ8OR7FQdo-7BoMctSlgAN10LIThy49xp4y_QDpF1got4fN5t3hCBPjcRbdLF9RA6PgtLWFs1_V0rj8qwAp1Nk84rkhTdSe52zq0vNhX_cYUkamYITYUl2759dGVh9w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:14 GMT
    +      date: Thu, 05 Mar 2020 23:22:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key6/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key1/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key1/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/8a05d6ab1b0f4545b2e716c0d6e33569","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sSrDCC-XLFRnFtrlKmLmDomrGFLjaQ_bJGVDwLgqyzioPe5yS-qFm7fs9MoRfA2vskQFvbS19-5MM3IZ3J20XEeBAb43C4KVCeirKyepF-uRKEgGlj3ESYeGPcO_0-tTre_akkUo7pCxNbpivnDrK6TP_7_OyHlk4n-lqdBO1_E9nXIYRTvJiQVgO_r86sR6TtgL_G9caCPW9AqOl8m-Fo3Xc3nAGDxVjPtLDyeX8mVXlOJx5KX5Dzu33mHxJAVyGGGpuBYs3SCYGtb333TJ2Rwgrbm-MxhNKAzTb0cRCgy-yCkHBJRFv-cIaicNhkTxtGhO1KUGYBbMuACumpOYjQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/20a15d25728240cfa12ec74241a8d536","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sxlaVZlH0baSBLySvSCQbZRBI78g3m6rpJZdSkg4QyTGSi3_6T-encjqcyGP16n7094TJjkTlVT-9ek-2h0QdPAfdY2i28LUJX3T1Qvb4adDOpkCVvZmhHaCDu0Y9qsMS7vu4G77Ta4UT65FimKTSNLKqcBHQOKS9QSS31SGhtUCC-FqcOJVPab60m8fAiY-jUTZOOjt1en97o4nbxLWItW-0-XYpDcnvBnlw7RyL9Qv7V9nLSA6x7Vy40jgt-n08MkWhMC2qHboDu_I6QnIsN0LFXJxQY2_tIJI30gBA1vn67WQoi7XHNJUUZnC4xLLkdbDoNQ7UWU1IXsGiArfHw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:14 GMT
    +      date: Thu, 05 Mar 2020 23:22:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key1/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key2/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key0/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/cde13b7440c74ad2a1435c4ae8edc4c0","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"o1bQ5HihVeOH7vldRDKzv9ZmjAcjQdUNRwWdW0326trwJ4ukXB1wNnmeMYNxMqyH9KV2dspnmu3yrm9tddZKcZAK1xk6YpZ9Fy8CO5wS-jJYqQaDo8IsU-c4b-RpKw3jVVEsqASWIhRzdmORWGBOlCuhqBa93rBv2nGjB8Xn9pHgK5c9yLh2qvmwF2FKlGhEJdNXofU5vFcUJl_ZzQy3CrcMGF0ENkE5My_h_jVdrTcOZCVMxgOTWS4VaggSD1mAYssSxqAhCInDCK7DaGYNYodnZGC207LwQbjVsOGTGhSPm9chDbVb8JSZq-GVCi_McdbzW79QTZK7D1TQcWQtYQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676639,"updated":1575676639,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/cb4f13eb944849aa8138753c37839e18","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vjJVMq5-CwaJrduFqGtLL6HYsjyrINrwJroIFbTenHyawgOmsf9afiqRrwHrWD0wsZE-0WvHazMaPtiZ8EyO-FmYRGK1faIIFdffugU2dI-AW6vg0U4LbXDO6vwlK1T6oofKGe0QPT45MgsHOxdHKA3OOzsXEn6is3EKpAguN7g7ekzXv_qgyJjHOyw-eyglHxD1_qPXtbgZXP5V-idWmWmRqOMV9y0yCBEcGxB2vAXkDHhPkc7C-3n6IzCErOtyeJwTBi-DtPQYRjET7oGGsaYZJjDMhMVXz-tdSkKH-jXMYXSaLQqOw3kz1XAn92JMB4Ht8zTspiWfbRRcacKfsw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:14 GMT
    +      date: Thu, 05 Mar 2020 23:22:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key0/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key3/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key2/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/65f413dbc1ee4dff8fc405007fe32ee7","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pikJJ2my7aBZ6VqM9sN2GWxtMx5lZNuOf_hLA-xiJMXOEKvbn8DqCbMW89cM4UY2ESbudEq7jDPrZcsnErbEtcH8ZA5bDgXIFONoHaenwBPqmAWV_0K2ZkDv2mjpCglKMSkpMIjbVyMXZhmqarbINBZW2siPP2W8KbKQhI2l2bHWkZaXVQkULixQI85mF8TMy3T5vG5BtV-jz_1_l2NrkCBWxP7x3VH0q-7JHjqMmv1WsHFl-o00omFRI63Y7pschN4Vt4tgTLwqjUCPqEqhDW2W3c1Btal_7ubbgfskJd4yKeh0edkCyqPh3oCjY2CCUkEVuhZUgEXAbAuTLj0MlQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/b3c4608f76474d2a98f03a8ef3c3ab9e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qmNO4VNVjL8gEyYBsItp4kW3oqomTTowPcF1E2Rdxj5TfKtFfzRJqxY_M767RGeulEVZyKKMGLACmHOP9D1a38UzAtlTAx_u5kTd04RvV60mAiaHLjZe5twoQKOc0as1gzsJcjefPG0jhSRAFmxMvz343Ycy8iiFLNmKG6lZb-q0eEGOdPpz2D7rPVqq0UOmDgYUEXeXv0cQtPwfazDcnNlRkG54H6tAetYpFniXkaUI5TRXqVd6oLD3bHXrW_vmNKkBn5bkfmPTDT2bPcAfJMCeb5c1Bk2G_6mDd8_vvLwNoEMjLxPfKB4EWRT5BgEgz1fXP8s6tKtqM7YyTF2yZw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:14 GMT
    +      date: Thu, 05 Mar 2020 23:22:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key2/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key4/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key4/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key5/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key4/1ef2c70cdc554402864098a8ade76b5c","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4weRkAo_9V-3q9foJnf717SjngMFqTJybflQB6TjhNofex1LAaSVHgNUoC9gXN1za64B2EtuczyXQ8taCvlYsrzpwoEXS-clOW7ICWpEuWKIcmpRG_K3uZEHkYpn8RClcfn5QMaVZD5haGo4M39vp97gu7kBErLLbGPVJz9-jGyg30PW_3W77DSpJppHkM-UbGhi_zWkOopzAT0RZk6taEzsB4l9SObf_doYm9EdgADhhX5gVDVD00Dbjy2i-xgFfmA5mfb-L1O612qlnxUSbuDy9dveZFZAQe-_juYF4ofY6emmPOZ9L2pT6z0GwibCNDcrLd9n2duqWTfPUiTn9Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key5/5c309da0ac344f4f97fa57880c9ccb8a","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"0wjLQd_NQiK7C6rRuCZqxg8VUKCUxiyhHlVDpk7EVePX2Cu6_GmBRlckIEemGIu2BcWpKALZ4DfGK5yFSC-bTI1q_1ikhBaCdktu3Ug_zAMGG_qkP7StDCt7NvhDS4Fz4d7tEppayxL-FAFBz8MHs3Un7l7FXX3xRujTwcNNPCQJwFQ-zBP8iymoWboo6Bt8vfkDlCh_X4iE7uCqWSGENl0GM6mAvQXEFdNSnYEOLi4c5q7eQg2Ym7ngKFf4AdtOCaVD_iP0dFGcJCmRas6eD_P7NnijF0dlejN5mGvLskxELJ0VCkeZfdVTJGEI_tDIBA_16l0EZFDiF5NGFnPS6Q","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:14 GMT
    +      date: Thu, 05 Mar 2020 23:22:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key4/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key5/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key3/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key6/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/01430da702044233b768abad29bebea4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"9VKAShVpmhwPvKJJlNfhvWab54CCyR-YzJ_5vbUuC8-SxEe67mJHtNBcSj8RwZG0N2mHo4CsNfgDx_tGV-HN5zvsImW9ExRoTQBbmmoFfBgk0z6_dI_upZaiAMbjckOZTlWhI1kQ0yTHeisMrp9xauZ17UKhSinxTCgLHfKrP5rA8RvgBBz4k-czCKXDLrqjz3XEWuLvoTXvwhjkgLuvAsLeaKuLYTD7WSPLl8_IrxKcw0-AgB6aCDBNsmVOnGjv3CiaxYefVi7hcEtgsSXuIr3_d5dM7AYXyPMb5Qk-E3xtiJuwI6YapL6WRQ4yNWVm3siJpKwYVtX37svJ2NFZpw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key6/6194bc846ba54941bd733364e9dcd153","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"kXqCd-7nH1ZvkTtmX8-bvRQc8JuaYgRGNt7-B3GrBGw7de5x7kF8Gpd7aPno_TfTYfWpHMGNfsKRMunxQ_OiniUAvS9lte7dKkZ0hfWqxvUqeZWPb1o2tBb0Wun_ER0oLjYNJKgcIdcsXWZwv5oyACb2eVH1M0z5PTxkbxxNclBW0g8AgkTSWA0WgumjIhfT0S9XDeN0rAgxO1cSZpK2D0lpsqIa-6RRKprZSdXOVfSjNomoaYfgSjLZZuSs9fCBX1515QOA-29unQ472DLxLrtGkPLhEtWapcoQRDPLZmEf7QBmwgmHFflCxFk2PpHTFvJfOYsYa0qwwQvr6nWPrQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:02:14 GMT
    +      date: Thu, 05 Mar 2020 23:22:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - it632a62itlvjjh2lim7jwcl.vault.azure.net
    -        - /keys/key3/
    -        - api-version=7.0
    -        - ''
    +    url: https://sgumutzjtkv7bh5j7toei2ag.vault.azure.net/keys/key6/?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_key_crud_operations.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_key_crud_operations.yaml
    index 44cd7d232019..47ef584aa8a6 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_key_crud_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_key_crud_operations.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:03 GMT
    +      - Thu, 05 Mar 2020 23:16:27 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,18 +45,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 401
           message: Unauthorized
     - request:
    -    body: '{"attributes": {"exp": 2527401600}, "kty": "RSA-HSM"}'
    +    body: '{"kty": "RSA-HSM", "attributes": {"exp": 2527401600}}'
         headers:
           Accept:
           - application/json
    @@ -69,12 +69,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/78b74624955346be84037260af73179c","kty":"RSA-HSM","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pgyGNFtdy0CYXTzsdPUhYv9No3fDiPqF1ERu7LNcxhOWJI1W404lnMGfHRJgMJNmXBYDkHB_F6BaY1ApowTKkpiGGjU8Pb5hmVGZiYcB-9imoOaHb-4a2wF4f9YkQl9Ea28c8xO7S3F4DTxJZmXqWDig3gDn_j1LPYXoOdJ72eQgvxzesmCItVRoGqrWh99R0LlMHXgncV1AVu48MeZb4GKhnjJqmwym6t3-GQJ7aj_db0Q-LDSxzyNeGV5C0UrkgKQgBmKt0POoEGai8jzEuzj9a7RFSwjDSyutgnlDknz1cMEuPRPD9UNYbOLPNtXzaZdslJyPfDg110db40XDEQ","e":"AAEAAQ"},"attributes":{"enabled":true,"exp":2527401600,"created":1575676805,"updated":1575676805,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/aefb9a4a2e0f44fbbdfa8ae7e6b2f9d4","kty":"RSA-HSM","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"-WFHEbS2lkHCeiIigVZGB1m2ON9S7u5JMpEvNFl82pwbI0rGllSwWPIEzGFqoC2_WKxb5259etVf2BwJPEVtjda1oEJ_EZ0dzYhcNTNCgTApVzYIYZVrqHe1Iweyq2MLeXGRkgdjycUToLGhn0CmnzKHhwBQaZIPLIYqbrIKI-MUVvf2pYYfQQgKVoXQJMmqY9i289bh48YgBYKCXvd099i4Wy_nx2bEsyn18RydVzvKCCgkhdT2ZZ1F87V9QuiMHrYjNoBiv9a-QHR6U8MDb3-fZcOzdl41vf5BkbwIiAkKYoJgk5V9sdb6pDT8F9bwBm0Ikov5ggoVEY0BxfzmRw","e":"AAEAAQ"},"attributes":{"enabled":true,"exp":2527401600,"created":1583450189,"updated":1583450189,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -83,7 +83,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:04 GMT
    +      - Thu, 05 Mar 2020 23:16:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,19 +97,19 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"key_ops": ["encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey"],
    -      "key_size": 2048, "kty": "RSA-HSM"}'
    +    body: '{"kty": "RSA-HSM", "key_size": 2048, "key_ops": ["encrypt", "decrypt",
    +      "sign", "verify", "wrapKey", "unwrapKey"]}'
         headers:
           Accept:
           - application/json
    @@ -122,12 +122,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/ac892a17faf44405b5c727e30b6dcfdb","kty":"RSA-HSM","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ufGqO_0HcmuVj8wAPZgFFylgIhK0csOCPEdaAclEdQHgjKrj4mXpDwpEcjsBqYnmfB3S6gcbF9l2kD--WJwQfYQhrwuoDwm8o37CUPrwYmuesYEDWhUuEYTcYJH0yNmK8QLttyg_2LlLHyghmHCghBqc3B31nZuFHS2HVkfzeEkCPOO0Fv3fWi-_8wK0fwdjL83MK5Ps8bnEmzqnaSeSMfJ70pUUoxcj8ZX6f7oS9TBZk-CYJT-23qWNi6dxSsjqbX-zfMZBjUuo-HnsjStcHz7e8hZUCn0YfbUeBgSUvOku_uSzlHRulnauS_Ync1PhX2vm7ZeEwdAsCbf1i9hfRw","e":"AAEAAQ"},"attributes":{"enabled":true,"created":1575676805,"updated":1575676805,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/ee1182fc43774bdda97825997ae28010","kty":"RSA-HSM","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qPQd_CdZJCEpJaIdDsbL5YmwvUErlNpybfcetq7Nl-pKVPipatdAVr02jGMo89OoBeokU1KwzT_4t9hmQ1oWD_0JeliBPT8QZbMFpT9fMkhjShqFLXFgYep14gnBu1BcJmuoccLUXphBDr1wVSm7v97XVTSUFw901w3LngO1h22KiAyL0GuNJDU3z7f8kF4uKSeWh0GBevrI36Z9bNhxgR7hfeGKvxNsfBRnwa412Cql-Ba-_X4ce1t3ull7dpyheTGU-CRkrF1LIQkFxz7JDjspbhLsZadtsWrR60OA1bQXp3XWiBRzq1oQAfH4tRMg7mSa-hxJC1f0aeIN4a2LCQ","e":"AAEAAQ"},"attributes":{"enabled":true,"created":1583450190,"updated":1583450190,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -136,7 +136,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:05 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -150,18 +150,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"crv": "P-256", "kty": "EC"}'
    +    body: '{"kty": "EC", "crv": "P-256"}'
         headers:
           Accept:
           - application/json
    @@ -174,12 +174,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/1638ad22d28848afbd3dc4541a0eeeb9","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"A-etrxDiyAPEIrCQHNMRp30zM59gmg9Eg2cYKao4GNk","y":"CV5TFLBYUegHKXnOjcYxKPGsOaTpEAhDqmA83yowOeY"},"attributes":{"enabled":true,"created":1575676806,"updated":1575676806,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/5edb8f34e8b14a22940471e9b29a6d12","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"q3wG9KqYfwudOLuXdLYAm1Q_sjNGw_eL9v8Vbo3MKOo","y":"l1wctBmBkD5xgY9-Qq5YAoVA-OB8uuFiV7Z5klNMOEo"},"attributes":{"enabled":true,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -188,7 +188,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:05 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -202,11 +202,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -222,12 +222,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/1638ad22d28848afbd3dc4541a0eeeb9","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"A-etrxDiyAPEIrCQHNMRp30zM59gmg9Eg2cYKao4GNk","y":"CV5TFLBYUegHKXnOjcYxKPGsOaTpEAhDqmA83yowOeY"},"attributes":{"enabled":true,"created":1575676806,"updated":1575676806,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/5edb8f34e8b14a22940471e9b29a6d12","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"q3wG9KqYfwudOLuXdLYAm1Q_sjNGw_eL9v8Vbo3MKOo","y":"l1wctBmBkD5xgY9-Qq5YAoVA-OB8uuFiV7Z5klNMOEo"},"attributes":{"enabled":true,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -236,7 +236,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:05 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -250,11 +250,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -270,12 +270,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/1638ad22d28848afbd3dc4541a0eeeb9?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/5edb8f34e8b14a22940471e9b29a6d12?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/1638ad22d28848afbd3dc4541a0eeeb9","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"A-etrxDiyAPEIrCQHNMRp30zM59gmg9Eg2cYKao4GNk","y":"CV5TFLBYUegHKXnOjcYxKPGsOaTpEAhDqmA83yowOeY"},"attributes":{"enabled":true,"created":1575676806,"updated":1575676806,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/5edb8f34e8b14a22940471e9b29a6d12","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"q3wG9KqYfwudOLuXdLYAm1Q_sjNGw_eL9v8Vbo3MKOo","y":"l1wctBmBkD5xgY9-Qq5YAoVA-OB8uuFiV7Z5klNMOEo"},"attributes":{"enabled":true,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -284,7 +284,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:05 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -298,11 +298,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -322,12 +322,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/1638ad22d28848afbd3dc4541a0eeeb9","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"A-etrxDiyAPEIrCQHNMRp30zM59gmg9Eg2cYKao4GNk","y":"CV5TFLBYUegHKXnOjcYxKPGsOaTpEAhDqmA83yowOeY"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676806,"updated":1575676806,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/5edb8f34e8b14a22940471e9b29a6d12","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"q3wG9KqYfwudOLuXdLYAm1Q_sjNGw_eL9v8Vbo3MKOo","y":"l1wctBmBkD5xgY9-Qq5YAoVA-OB8uuFiV7Z5klNMOEo"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control:
    @@ -337,7 +337,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:05 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -351,11 +351,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -373,12 +373,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1575676806,"scheduledPurgeDate":1583452806,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/1638ad22d28848afbd3dc4541a0eeeb9","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"A-etrxDiyAPEIrCQHNMRp30zM59gmg9Eg2cYKao4GNk","y":"CV5TFLBYUegHKXnOjcYxKPGsOaTpEAhDqmA83yowOeY"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676806,"updated":1575676806,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1583450191,"scheduledPurgeDate":1591226191,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/5edb8f34e8b14a22940471e9b29a6d12","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"q3wG9KqYfwudOLuXdLYAm1Q_sjNGw_eL9v8Vbo3MKOo","y":"l1wctBmBkD5xgY9-Qq5YAoVA-OB8uuFiV7Z5klNMOEo"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control:
    @@ -388,7 +388,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:05 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -402,11 +402,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -422,9 +422,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -436,7 +436,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:05 GMT
    +      - Thu, 05 Mar 2020 23:16:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -450,11 +450,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -470,9 +470,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -484,7 +484,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:07 GMT
    +      - Thu, 05 Mar 2020 23:16:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -498,11 +498,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -518,9 +518,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -532,7 +532,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:09 GMT
    +      - Thu, 05 Mar 2020 23:16:35 GMT
           expires:
           - '-1'
           pragma:
    @@ -546,11 +546,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -566,9 +566,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -580,7 +580,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:11 GMT
    +      - Thu, 05 Mar 2020 23:16:37 GMT
           expires:
           - '-1'
           pragma:
    @@ -594,11 +594,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -614,9 +614,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -628,7 +628,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:13 GMT
    +      - Thu, 05 Mar 2020 23:16:39 GMT
           expires:
           - '-1'
           pragma:
    @@ -642,11 +642,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -662,9 +662,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -676,7 +676,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:16 GMT
    +      - Thu, 05 Mar 2020 23:16:41 GMT
           expires:
           - '-1'
           pragma:
    @@ -690,11 +690,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -710,204 +710,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '76'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Sat, 07 Dec 2019 00:00:18 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      server:
    -      - Microsoft-IIS/10.0
    -      strict-transport-security:
    -      - max-age=31536000;includeSubDomains
    -      x-aspnet-version:
    -      - 4.0.30319
    -      x-content-type-options:
    -      - nosniff
    -      x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region:
    -      - westus
    -      x-ms-keyvault-service-version:
    -      - 1.1.0.883
    -      x-powered-by:
    -      - ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '76'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Sat, 07 Dec 2019 00:00:20 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      server:
    -      - Microsoft-IIS/10.0
    -      strict-transport-security:
    -      - max-age=31536000;includeSubDomains
    -      x-aspnet-version:
    -      - 4.0.30319
    -      x-content-type-options:
    -      - nosniff
    -      x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region:
    -      - westus
    -      x-ms-keyvault-service-version:
    -      - 1.1.0.883
    -      x-powered-by:
    -      - ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '76'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Sat, 07 Dec 2019 00:00:22 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      server:
    -      - Microsoft-IIS/10.0
    -      strict-transport-security:
    -      - max-age=31536000;includeSubDomains
    -      x-aspnet-version:
    -      - 4.0.30319
    -      x-content-type-options:
    -      - nosniff
    -      x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region:
    -      - westus
    -      x-ms-keyvault-service-version:
    -      - 1.1.0.883
    -      x-powered-by:
    -      - ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    -  response:
    -    body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    -    headers:
    -      cache-control:
    -      - no-cache
    -      content-length:
    -      - '76'
    -      content-type:
    -      - application/json; charset=utf-8
    -      date:
    -      - Sat, 07 Dec 2019 00:00:24 GMT
    -      expires:
    -      - '-1'
    -      pragma:
    -      - no-cache
    -      server:
    -      - Microsoft-IIS/10.0
    -      strict-transport-security:
    -      - max-age=31536000;includeSubDomains
    -      x-aspnet-version:
    -      - 4.0.30319
    -      x-content-type-options:
    -      - nosniff
    -      x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    -      x-ms-keyvault-region:
    -      - westus
    -      x-ms-keyvault-service-version:
    -      - 1.1.0.883
    -      x-powered-by:
    -      - ASP.NET
    -    status:
    -      code: 404
    -      message: Not Found
    -- request:
    -    body: null
    -    headers:
    -      Accept:
    -      - application/json
    -      Accept-Encoding:
    -      - gzip, deflate
    -      Connection:
    -      - keep-alive
    -      User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    -  response:
    -    body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1575676806,"scheduledPurgeDate":1583452806,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/1638ad22d28848afbd3dc4541a0eeeb9","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"A-etrxDiyAPEIrCQHNMRp30zM59gmg9Eg2cYKao4GNk","y":"CV5TFLBYUegHKXnOjcYxKPGsOaTpEAhDqmA83yowOeY"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676806,"updated":1575676806,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1583450191,"scheduledPurgeDate":1591226191,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/5edb8f34e8b14a22940471e9b29a6d12","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"q3wG9KqYfwudOLuXdLYAm1Q_sjNGw_eL9v8Vbo3MKOo","y":"l1wctBmBkD5xgY9-Qq5YAoVA-OB8uuFiV7Z5klNMOEo"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450191,"updated":1583450191,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control:
    @@ -917,7 +725,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:26 GMT
    +      - Thu, 05 Mar 2020 23:16:43 GMT
           expires:
           - '-1'
           pragma:
    @@ -931,11 +739,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_key_list_operations.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_key_list_operations.yaml
    index 4ab7ad5355f5..cad5441e4170 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_key_list_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_key_list_operations.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:19 GMT
    +      - Thu, 05 Mar 2020 23:46:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,12 +69,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/b2132c1697c34883802be18ac30121c7","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"GZ-EwthGv_DzFfIjq0l_iUTQfY8Kcqh1mfT9BJZZB7s","y":"z6m9wDkOR344KvaqUyRVot9IR3TrXx5lvzcuKiuJoIw"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/ec1afdf004484d63982330df925d3113","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"kC4SixMD4TwHVXf6dpzwvpx1CnC8UV_-OxJmWW0AfIg","y":"GdnWBg_dV4d2ymCZ9tgzYf6aTSY1oAd-RFtyipdmaWk"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -83,7 +83,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:20 GMT
    +      - Thu, 05 Mar 2020 23:46:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -121,12 +121,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/090c48fd5fc04ae89a60ec6182f1ede4","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"U3V5ODx9PRurSgAkbQcrqW6ZLYqiQ3ZBuwC1tMfxC2Q","y":"sH4hYLhjRVd7mnMSXSq_Yc-V7gZb_QNAykNqOka0IQI"},"attributes":{"enabled":true,"created":1575676640,"updated":1575676640,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/bac19293fe234ef59d2a846234e1b3ab","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"z332cv36g7MAIbwLBdjFsWThLT6-pr2CPSGaBS3n4HY","y":"5dO7mKlgrmMmsbGizamShP4tVJQIB7muBHP1CSYgcsw"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -135,7 +135,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:20 GMT
    +      - Thu, 05 Mar 2020 23:46:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -149,11 +149,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -173,12 +173,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/17423b89133b480abcdf5d4cd3dbbbd6","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"0Q6njYvRXzra-rCMkmdFI8zC38BeEckva1mawWeapqE","y":"5Yw2s0aKebznlpSn9Xa_Kmca822G5yhUV0u7qFBjo6c"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/e613033a7e2c4455969aca956c440997","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"V9RcY28CCsNk8gyw4vV_iCIygLh3UHvGcjxTYPfAVV0","y":"iZ0oArfHLp2I0DwXe3u9bUiuNhT96jG8tOrim3eFpjw"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -187,7 +187,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:20 GMT
    +      - Thu, 05 Mar 2020 23:46:09 GMT
           expires:
           - '-1'
           pragma:
    @@ -201,11 +201,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -225,12 +225,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/5f37e191225b4de794862fdedac39f60","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"nc56ymL4V1SI697L_MT-AWGRsRyK7H5-_MuhHmGgwEU","y":"DDkWrQEFwRrcpFLS0Hke9OKRF_trrNPr4PJXGVSnRmE"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/29d2dc0018ef48e49facc80ceedf01f3","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"MyxGsGtXjroZfLNxpAky5r_HEujmoZup-eiuW2StCDo","y":"FL0RpUAyk1X7uzbFhUCKa1agH5scKNkukv_z17BTppk"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -239,7 +239,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:20 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -253,11 +253,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -277,12 +277,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/741ee9f17c50431792833fca35ac98e1","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"l_p3bgRNxXxV3KrqmJXsnz23paPZj01vGVYKsgQogH9rTwVQRvUJDdqKjyzFa0EoilDlguj_G7ZGW-X4c3-MkVUEsYEgdLQuM8DqHnaW7tbhiJjEQXiKEwIDRQcU3iFoHMbACTpDbZU0-SoDKSzUqIlAsMt00XveCmCj5xDL8TkQRTeH9OIPC8rwuW9k08T3KYQ8mmP9oy5WNZshgO-maOCYmKpdXh-dM5cOXfjCUYyoFT0B4lU8KlFY2QhbbW7znc-ExLlhLCX1a8l2OAWn82tatALArK4UGh-gr28KtuZOUHsf-jHLR_1OQt5urybK3hDiC6XFf-bWbTFPJVdY1Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/f6418dad1c83435081156c7623bf8b8b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ro_l3GyafFY6FRlCP_qD2QvFtNPjlnRFZX7atr_R8d2ARDxmR4Vr3H8a8C83yWRBpt3qtrNMrYI1-a51S6ND9JRqRUkbaI_mmIoAdoGDQb9yRG8-vu-SJhKnJ23rMulakwUrQzB79Bk3I8qCS_0bGsDt9u04fy1Q_n99npxUO2fufeIyQQRs0nC_yQ02gnxnzjxWb0KD-w0w9nAa6NQ5t8ROnslZuAynf2l-g7xE-5Uz3z1lu6asad6uFrAOks6d6ScyulJ7l2bP312pqJvcHqc6oAFCllUJukWkf9TT_TXQ4nJGNQ595FZEBi2UysGTb1sopQXJ4Tp_oh1rqwAVsQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -291,7 +291,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:20 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -305,11 +305,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -329,12 +329,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/8781c65a802e45de9676b05da4ece6ac","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"9LBm1-xdBBianIBdmq20FI2u_JN8pyJT5gYX3ukLd2UAeUM9t-mzpv9Roop7r49fD2UwSo4aF0-_h73sjzAdSf3Wa0kjiBU1NXF6wvdLXo7nkQLIli-eaZYBl-9cRvKWSyh9ZhHSQPhTO-gTifi0Da2kLiHm8xfT4AtBOz9RoYXMr1-ls0ViyDZvWmPtELjYHkNLkLqZhby9ME_Q0D3Mwd8tW903Kggu-0kbH888_ch1Wnf7g_7v_IxODTfgbCcljazmgFweejpcAgcFILrv3DnVqUSxQJ8Ovv_gcx_gOzzMsSfbAwvqCD08PFevqdREu3-k6GDlpk1Ttgz64iMEIQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/f366d1ba9de44f78bb63fca57fcc8240","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"tBuc12y45rjl1Mo2hZF8oKgcsDPa2oQ5D4vzPAF02iRtyGsQq9NXmiWOFaj2Kz3Xldl1R29_1VuKooQobMCjBN_MIvtQgLInI0ILV0D-poVp9DBvdmTRm6DVZXxfzGvWroZ6gtAp-Yi74tIZpTM2nOLmca3N_mEx4LoNrQHHqAgcMXg8CvpZ6_Iw-Jv7y-Qvz6h4ybQvzLouCZC8zC0zJONRC6_9O1oT57Lr5CJRNHJhisJZqLoQTyXopMPNg2UeUm_ZrwfAFHdcX4OqSFtFiJLJMPly3FQ1UHMln-DujXDJcbbSNTGDEVj9StyzzWn0a5FVh-b08wjtedxrYd1zaQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -343,7 +343,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:20 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -357,11 +357,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -381,12 +381,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/b3516e69260b4097ac9be5aaf43348b6","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xfxR8tnkCt3xFMKSAq_CAEYDw8-Us4c2NnGCTD7Zta9_GQpkcH-6IcC1R8qk8UxNDDQU1AjKqjbv24I1cxxUjWDRLUQti5zFlalJlFmz3447EYszBdMnL2G14vHLe2my2YJ9BUZvFWFRys6nKcW9DywjLs7fpdiD5o1_cd32XoYOiRDd3vLCk4ZLFeCWPaC1Q-WaFwFVl_lUF_YbVAEwR78ECne_b0k2CU0dTadnrCxiGlYqb4aBUS45PGi28b7zc6dojt-6gqXXxv8JCH8R9kpzzDRMV3U2QRa-xh9VEdjyy7g2mJkEi9C0zbMIJLphcgeCrD0V5WKU1Sr3vORIbw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/44954deeb0e248b4acdee56ecee7ffc9","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"zKPdhW7OUyBHw0_WoF4JguaIGxpa7k8eGu45dQnRPCvoo5Wg727ZIyPdI9ivpxYw1zVZBEApGnwMGQi4fvsQIIfuzfBShSOvF8yhtUgRjhtE5pfeVEgIJGLLo5gvyLv4g7rVG8H6I2gxufOmB6yTauTWXBxtSEcZwXy-YVzLQqGLS3I9ch-pFiOe7Qvz5eMq3gzIpprxXoDoqKDhWpR3QWfpQxO7yqT3I28VKgueKjX1oRDhBQJZBjZWmQUopmt-KMhY-8-hJMa7IJ62yHcR5PFi8gh4oQ7drapt7osz24ZtuoLbasP502_q9nh7M1SoMZvHHaELj9iohaSNyRkGhQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -395,7 +395,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:20 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -409,11 +409,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -433,12 +433,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/1df91793b2f445da8b27f3e4d550df3e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"2F3sAP7XvjNLwWX7e4ocWzdHvCzSnsPW1v42OCrD0owD_taH9ySfNmEuMj2D4X0RED2AZLIhWwL2I6mfRF-JCqE4JnsTMHmpVQSYAtO8qOSqbuuY7QODuOH4x3tGyeSatun4wPWTgtARFeGQkSCd7bc3L5r7-WtTz4R9Yup79_DFGPW0ANktM6N8jz65BBiP1qrUSeNx7NR8PwhYIjC3rW1yeUbXtjESxDET5XZBHuhq2ykcnJRbj827udn3KjZ-p0swfsSq-vy4pdi1qC5OMFeOXhfzPaNWzEm_Fl_lIdYl9jXg1xk7bMN3L_-a1gfuorleuietfBXJtgT19Wt3fw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/19c9db6453cf4173820f43d5bdbece14","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vNe5udNkriz5zJMYgObf_sWEqvdejDb013GmLLJfxkZUyfeZJ2uUUF0sIaAm0H7oxOLOjPjLO3LB0agKWgd_irUPdo1qSwq3qblOyEF7g54CU7GacDIegdgSe1z-ow9yXeKLUgxXIVntHwstzGwf48DnNqnMx-YyMPJlgb9jidFT1EZTbdFRQqhpAythvq42ZmactdeRbweWmVpi89xWfYkEO6D1B61k1vZoE_xWnK_3Uu77gXjv7ZRBYiIH7pu4c3wOjC_8NPE7yOITHmzCqCl4meWnlYvq00vhZ4ORHPqU1uMvXFkXS2j0wKA8oXduqSZhIC8AfDyZDp1jbuQVDQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -447,7 +447,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:21 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -461,11 +461,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -481,12 +481,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys?api-version=7.1-preview
       response:
         body:
    -      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1575676641,"updated":1575676641,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1583451970,"updated":1583451970,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1583451971,"updated":1583451971,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
           cache-control:
           - no-cache
    @@ -495,7 +495,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:21 GMT
    +      - Thu, 05 Mar 2020 23:46:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -509,11 +509,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -529,9 +529,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/versions?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/versions?api-version=7.1-preview
       response:
         body:
           string: '{"value":[],"nextLink":null}'
    @@ -543,7 +543,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:21 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -557,11 +557,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -577,9 +577,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.1-preview
       response:
         body:
           string: '{"value":[],"nextLink":null}'
    @@ -591,7 +591,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:21 GMT
    +      - Thu, 05 Mar 2020 23:46:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -605,11 +605,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_keys_backup_restore.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_keys_backup_restore.yaml
    index a872bf0e2fe6..14371e486d89 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_keys_backup_restore.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_keys_backup_restore.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keyrec/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keyrec/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:06 GMT
    +      - Thu, 05 Mar 2020 23:17:10 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,12 +69,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keyrec/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keyrec/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keyrec/734f2f21dc9e45b6a7afa9cfa78c4b0d","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"mYqMSkqj9_oX2xpTTeqWcKOks5SV1-EgU6iJ7kw_hl1iu8MziIZaYT8RNadZ2omRL_UCsPooJCVcI-FjlDSxkHHnsqsGcP-0igFkY1C-y1OojuAz_81wVa2T6-tvydWTmY3f2-L_zNaVrM4RMuR4flSMv57iKzSpsLBoM8KD3ANNAHgTWZfDUH_ACX2XJ5PZgbQuu2SCxf7YsMnkpiaLRfKIFPzgxoTqWRJOmqkw0SAjfxL9w5McBeHfcdiCibtGM8UzDXCa1g73Hpil_OhzUXwwbc-EEYUeIskuRcauCyHHrTZGrHGnSebIOxTwdIc5kN7TgYyuIoixD-IIYcd6LQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676807,"updated":1575676807,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keyrec/201c012c957a40b89b5ffd5bee6fd667","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4d_JbCG2F9aIRdpzAX6aUxv6bt21g7jVMKNZb7cgWwSwahEVTsa2TjwOIZJ4FSPRFJq1aED0nCGSYxURycNIYh_9nNAlhDVn4rSgJOhGRi1Ze5WjAha3OJVOiPTW-Lky1vYKvKu83KFSvSRgOUVDbX_AdVPcRQUzf48yI-W5LfkUGN54KVQJfrp43WZmYCrqWqg227ma9UAvpz-U60w-ctkroIXERSvJ0Iu0SJ8-LhJ3tue4-sgkIIa6DT5X6o9YFXcUywzQVcvLMv8nt3GstUa3F6g7J--wD2UU2Zqa9sN--4OIzpeqBEg356052vV-mVuaEarGsp9iWf54yikX1w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450231,"updated":1583450231,"recoveryLevel":"Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -83,7 +83,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:06 GMT
    +      - Thu, 05 Mar 2020 23:17:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -119,12 +119,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/keyrec/backup?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keyrec/backup?api-version=7.1-preview
       response:
         body:
    -      string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLlFMcXAwNHNqUjZIc2l2RVlNZVlreWh1ZC1sczdXNGNlaGowRjRVTzhlX3JrTnpTN2FzYmhVYTNkVlVJV1c5SWJRUkM3YXo2T1NheVFYd0FUYXpEc3J3SnZDZmxlZXNkeWViSnlDUV9pdlJCNWRnbHR4cy1RQi1qcE5QYk8yWHNBbFhEaVh2ZTl5c0hYQ2JzXzJpLUo0YjlndW1LMmdkNmpwVEg4cXpwS2hoUmp1TlkwNnB4S2RKU1hmRHRIc2NzVlNkRlI1cklITjBhdXBpVGtJRUlCQ0U2ZzFfRl9aYm42RTJoMk5FVWtEOEFwemt2V2U1QXRRb3dERXlPRS1LeEVYMExKczlJLVh5RTdkVlZsSGdZVlVzaDVHTDFtM25kSXVWY1FSejZPODFXbFlxX2dBR2xHcF9HcUY2UnI0LVVpYlM3cTFSVDBTcHlicTBpMW00TGEtUS5MbENaX3lBWEV6dmwyY0xNb3EzeDZRLi11QkQxcjlDRzg5ZFRsSVZCOXVxS1BBWmFoOU9rbXdDcUtJOVE0bEljWWZ3bUxLNUQxVGh6WjJTVXRvcVFLLUtVNXJ3VGZLTFpWV2prRXJyd0cwekZiM2xLUzNKYlJUMk5xd2IxSEdWeWx4QWtsa1U2cjFSZ1V2THJtVjdZblMwbnNXV2ZyZEg3TGZ5Q0IwTVlNSlJRMDFCN0xZNVR5dWJ0Y3lWd0p2MmU3Tzdhd0V4OFBuem5haHg5QXRpeGtXeDJ1U1BONERHa1NfSlE4dGV3TDhsdFJjRUNFeG1yZlF1YnBIbTJ3b1M0SDdXU1N5bFhQRld6UTRkbTZER1Uwc3ZMR21CM1FsYnlPOVd4bEV2ZDM5SXUzbzBwWmZDdGVXa3l6RlFORk1jVkZ3TzJTQmhWdFhIdXlUWjhpdS1lbm9nek1RcjBlNS1QdmNvY3FVVVZ2VzJLUEVIc1Z6RFFCam5zaDRKYXNXSXhLc3JaWnJPdVptOUZDMmtSVVZIWEplUHhiZlo2b3RqWmlIRjNvRWhDekxTbVpzUmNhcW8wMHVtenJ1T19oTENJd3FaQzNId2VzcmdMQkpOVXdWNTVjWWNuYTZRY0Y0UkVaQ204d3hqOFdpOXhXeUtaanlQMzZraDJ5bnVzdmt0MFFOWjVzVVktdkZvdW9rWVYyZkhHanlWLTNNTlJPZW9iUmRPYzZpeTFZaE5sTXotYkhLTjZ2dUlMVzVta3FONVRvS3BWVU1hUXBpWnBIWmo2dmhUZzhJRDc2ZVduc0FiVUZGSTZIal9Cd3pUTkd5cno4VkpLbnV5cTRtS0hvUUt5bVlRb1dwRWZJdVVXTzMtV211M0FENVlGTDNJekdqNU1lRXRnNXQ2bjg0T0IxZkJsR0VpZXhGUmYybEVZU2M3R3Zic3R0cFhYT1VNSVAtT3pOTUlfN1Y1TmhleFFEM1BTdm41QzZESFlhMnBONy1iUjVYaDFwQkl3bWJZY0tIN1NFZmkzWk4zZUhsamZiSkpZb2x1bzVGdWdaUWplSHYwYkRNVGRPY21rWmxwYkNHcTdMczdGQ1BsZ1hNWmNqTWpqRU8yWDhxcWo0QnJiVEdhOGFNOUhWeE9pT2RVeF83ZExFY1EwUjBBbkVzMDBrSzBIRTRDOW5DOUhTTUszYXJDcW5kY28tNlYtN2xRY1p3MVlXRTlPMG0ybXBtOE9zNDVTRkFJU1llVWNoTWdhWlRKRTlKTHNYQlpmVXJQWWx6LTREVkhWeEU3U0s5OUVfOHY3bFc1bVNmQUEwUmRZanJhaTFFTHJrbEt1dUVKYU96R2pGNlNNR2tGdGk1aElLR0tfc3huUmo5VEhTY3hnWjVkMUxJVjkxcW5SdTlQUkF5N3B4VUpBYXZCNnJpTGVka1ZyTFdzLWNFSTNNZk9uV0EyWE1sNm9MUGhPSnNXMEY4OFFYQjBmMkxCUG0wdVhUZ192dWNONHBiZDRDRmp0TnFNZ285SV9mVDlMeW1maERRdllrb29TMEpfLUVjbm9PYjV2Zm0zX3dFbk9DNm52LWhSQUpKdzByVkRnd200ckFLWDNQNG9ub1psYXJjeTVUXzV1czN3Zzc2TTlubFlZVDd5c1NQeTQ3WjZjaGN6U1RPclpXaTJjeGZEZ29DVGkyc0RGb0dMSXRoejI0M0dWazlvaTZhS01qYm1hNGR5VkdfbWRZejlHazJpRWpxRlVYejkxa24wUExYVERKX1lSTUNXWW91b0ZBUTBES2g3TFUtN2FMOVFyaWVzUjV4NF9RMkdBX3IxYTh1emY3dDBrR1o4Mk41VXd1eW1hb1dVNUh2bFQ0SzBidkh1V2lDdEpna0I0bVNUY1c2WFROZjJDOElTdVFOZzY3T0JNVjhoVHVBTzYwbzlWa2h0YWxxdzlCZ3RHclRyOXJOby1SV181NzFKS1RGY2NvVV9yVExxVXlsN2dfR1NGYThrZVpFS19BRUZaRXBEbU1ubVhObVI0ZV9QSDlpa3dfU2NzN1NhS0ZKNktPVVZCaUswQXBvck5MZXgtNTZjWDRJbFAyUGxaN0dta21ZamJXM19JUFFUZDNyLXZxZ2xGaW5wOFZjaXB0ZDV4eU84RXI4QmFFS1dZWlkzUnFrcFMtSGZZXzBtemxSWGFHdnpWTFkzSm1uX3ZURGpXQVhSYWdoRDRJVUx3eEpPWFZrM3NuektXenhZU1RzOHpfdGNBTFJJV2plSVpEOEZjd1AwYThnYjVhSC1tTzBiRWNFbkQzQ2lkOGNHUlcyRkVETnl5QjVyVXYxSHJLdnlzWldHaHIwTkF5alYtbVBYeG52cU5PRUZDUl9sai01ckVXTmJjbXdKWG56VGlZeFotaVhHbVIzUW5MelAzM1lSZ0JZem5EVjZRdVVUWjRyQjYxdnUxUGFwMklFaHV5dXNReEJJbk1RZko5ZXRzdDJDZ0RaMmpxRnNYcTlNWG5aVHBqSmpOSU83ejZXWVhpN1E3ODZTX1JTSzRWcVFmd0lNU3BQTzAtbzNDMnVFQ0lUcVUxclRNb3BMbFJINXctUlNyWllPbzJKSUFXWk5sdFEwMXdiZzUzMFdrdmwwdTNpVEVVd1h6WGdRN3dFVEQ4RjMxQkVjUVp0OFFwSE9mWDRqamxBZGFwNXRDeVMzMjZzVDhFN2d1UkN1ZFd4YnhVakdJZUJaVm85aFQtcG5nek1qMHA1UWFkWldlaEtOR2ZfZmZhSTUtT1RWajd4Ynkybk9KYkIzRlFHbG1sM3ZVVWJuM3B4M3EtM1g5aGtNNDYtMUh4QmlabjBfemRlWXNPNXR3YTZoRW82QWMySklNZlo3Q2tOVHBKVnhkdm13WGhlb19wUnVPYkdLVXpOMWdZem8zNkoxLVNxZzZuZWgwWFZXQ21VU2E3Ykg3MzZqYzRGYjEyZkZydlVsYjFrVUU0RXZjUlR3WUw3MVlXSlNLTS1HZU1GU1ZvdXJVRlkzTjVHd1NqOUpUWjhTWVdoX0wxZGdXczJkWW9vYldaNUlDOVFHclh2SHdrSWJ5YXdhSk14cVJvbzQ3UUdyMkVoRHQxZWUtUi0wSE1TaHo0a3N4aHFDSTNtWm1Od2FlOHBEc29iWjlheVMxNnZWMjIwR3dvQUNtVlJscEsxRGUtNnJIMXh0Q3E1WWlUS05WYTVMUXU4dC10YU9MUmdONEpYOEw0NGZGRThsUnM0VWc5bVhudzZ0RVlFRmlMN3c0cGh6SlRyODFodEMxWUN0dTJuVGE2bG9tYjFvTkZycHpHZEVyVmhPUE5wV2xiQktzOHpycldvN0ZocW4xcmRiSjBUdHZPbHEzakU5bDZRcExvakVPaWV4QkV3R0FfdFQwN1JUYWRZelJTZ2ItT1lVclVZelZCT21kQWs1UHFKblNDeG03TXM0czB4YmdOejBaQ3dWY2pPd3pkLW9ORVc1RThPaUVGdFBnQ3BUaG55cy0yLUxmQW53R2FfaUlvb0lGWF9MZ3lZcHJiQjE3TXY4SHJtZExmNWlsd1M1cjhjWDcwY2FFZ0dQdjVISElFMmFsMGVpYWplcjd2UlJ1clU3MHQ5SE1NcEtKcVJ5VXFIRHlOX0tuak5jb29qVEd3WGRZYmV5MkcxNDRGd2wtV215ZTF3WEQ0bXVqRnNIbXpKdmVDQlZCbXExNXZ6aUF5eFhPSGgzZWotR0kwQ0pTaFZfZlBaTWYweWpjRkt6YjIyQ0JVSVctVXNfV1d0VkNad3lsSGt4b1A5aERzMFJLd0Nyc1RQVHZTWV9YV3UxWkdFS2xtTnhzZjltVWppSzdYNm5DVHIta18xZ1J4MWYwSEQ1U09WOU1HUElOQlQ0T2JsUnc2N0QyNUlVUVhoak8yMU5pa1BtSERiRmFuYUtvbVpybWktSC0wVFpnTmxUVmJSSWRRbjU5VmNvMkl2aGpFVmhQYmR6bVFkVlZ6TzlZbWNqUEVURDlCTF8tREg3VUR6cHFicVVsMWVocmlaQ2xuUGVGYng3VVhSTWxsSGtrZVpUUENfbUlYTmtHTDkyV2ZmZEYzMWtidlAwVVQzUnJrblhlUGFpT1Q2em1UVVRkLWNubEt1cDJjdVRxYzVIS2Vjem5xNF9oZDcyZzVpaUhkMkV2RzFQMzQ0SUw4QWVHbU1uT0dxdG1FakhrWjdJQnU1XzMyQ3B3LVNBaUFqdmlaQWhFQmVyaWpjY0Y2SW00cGwwUVhFNDcyMWVtc3dFV2xzRk9NWklPQVR3d0lxaFJxcFVUcEJEOEVfWExiZ0JkVjg5SkZJVW41VE05VnNETE1pUEZfUzVpbjJuZXh4Q0l3cGQtREl5d0FjV3ZyTUNjbm1NOGd6ejY4ZGNIZ1JLUWJidnZFb1RuWHZWQlptTkxPZlJUZ1FqQ184VVVzbGJCNTNHblpmZ0VWSDFUckNLaG50M3ZrUVhkYkZ5YnpIS055b2RYZy1iNWNVSEVtT0wzdWxweDdhOUlOdFpXNTRVbmVnanRUM1VteGp1ZU5FcktaN3hheHYwckZoU3N3SWdlYk5xejJCQ0tlVnRYOV9GTU02bDl1X3VTdmNNVElGTE1RLThFb2xmdXdJMHhlQzhOWGMtbGxTLXhMbFVqQTB3ZkF5N0RRNFFnNVpkUXd4QzVybndWWUFmNElJOE9vUHVfWVBBZmxwLUhRVk8tMzRFMzRLRGZ6MXV1R1NPZ29idlZERE1TalNUTkdKazZ2b2J3TEJoMWptczZJLVVIRDZrakZ1bWpEalJEZDNRaHR5UXUyZG9HZ0RXd0trM3JNNUJZa3B3eGcwZkZSdDZyZmNzWVVwNHRLUDBjaTFodFFJZ3YxWWZyRVFPeWJsZHVVZF9SbkkzcjlxMUR0RDFDaVdQeTI5RmNOcUIycjRkVFp4WWtFelcwb19kNmM2UnVIRFhIQ2JveXc2UldTU3lmY3BpWFo1YWdrcW5YbllfUHU0NExQaXdNMWtxNzhCZWVZUDF0RUsxZ0ZqZF9QNy1zM0YxX3Jsem1jY3hxQmdWV1R4V1BGOGhxZVVvTlFGdWtoQU1SeVRVTXhQSjVWSWhmdWdGVjNja3Y0NlJmN2RRNHdpTDZYcTNlcFdLZUV3T3dXNEMzN3lpYzVXNEZYSmEwWFkzQzNnZUlFVXNjaXJJcFl4YUtKRHBiY1RoZ2Ytdy1kcEVqLVAyRTdDSGZEbG56Xy1mcXBBWVFWVzVlcGpBOU15UERodTNwNVBzVkNLX3IzTE05bkczQmtOQzl3TWFUMnp5SGVYQm1EcFU2d1hZRFQxRFpuZkt5aXN3NS00Sk5QeHhyYkp0azBZbEc3bzVVR0wtdzJNakQyR1dwcVBYN3BtZ2JMREY2TzlKcklfelM1c3FPVUpoS1FDY0NQRVdySHBOa3NpeFBYZDNZXzR5Vjkyb1ZrRmdha1pRWHF3VUxKMzlTS2Q3VXFZek9xM0otMjY3QzlYUllPZFFUTDdsR3k1UTlCY2NvMTBfVVhfcHVIb09mRXhkUEJoMFZDWWRGdUpmZXdpYU9YLXEtUW1zY2R3TXdOMWxiWlNoRUF6MWFhMDV1UWt3RFRTbTE0VWJRWDJBYXd1UTZnYkI2blZQM1lIMDBiZldlaFNKVkFwdEt6UTl1Z0tiTjZLSFFlczZzMmRYekFlVzBNTk5GQlNuRE1sRDBmUEUwMTBQcnFRVExjNzBLZE1OTjdqa2ZtV0R4c2I3WlFNdWtIWGZpQ0NYeWduMlNMLVVzTXIyX1ZUOTM2SWdTVldDMzIyc3RoZnh6Y1BCRkEySmo3bE9mUDdoZG1tU2NEM2FFd2gyNHJ3aUhYR3VfbzlzYXhFVDJDWVVLTWlzZ2J1Y2FQWHM0VnlEbm5qUDd0OUk1UFg0ckNjTDV4SExnVXI2Z3o1N1B4OEtGOEFSelRkQkdpNmxDM0JmWG5rTDZUWUtqelZ4MGVwMHhIeVFMelh0SHFTN1lKaS1YMEp6VlctQ0VYS3IzVVpFcUlQUnBzVG90TFR3N1k2dXlpcUNPUUNObC1NRjlxa00yM2toQ2RqYW1fRWJXNDBoNWxSLWRxelpLbC1IOERDbGU4TEwzVU56Sno5cWdLc25HUEtCMU92Nncwam1CZmVxci0tOXVxaGJ0UkVIZkhwS1dWYkpGcTctaXFhLTFuVFc5R2tyUkVJUnNhV0xtWkIyUzY2OVE1dXhuYlBIRzhsTmEtM19fVmtDbGNLVXhqMS1SZkhvcUQyRWZfZGE3eWZIcWlvSENDZF9scVhhMVNJUEdNTDBBRzdkb1VsLUY2WWJJNk52MnlRQVNsLUtsSVpwNjk1WGo1S0p0RmJyM1J6QTR3STdJV0tQMzJjYkN2Z0JvRG9kaTRRbG1wUXM1aTk1RWluZFEyZG5rV0x1VVFjX0VELVFCYXJ3Z29scldVQ2J1YUlJb00zQ2VjU3ZKMmtJU1lkSVpsMEVMQWw2VWtMZnA0eU5jVnBiSWJ6YkxtQ3F0eVFGR2VxcElPS0pHWFVYNS1HQzJKOVNhV0ZwM1hlLTFrNDFhem9nSDhfQXFyQlNkdC1HWThLbFo2LUVybVZfQV82amoxS0UwTHg4Y3FGRENPSWVwZlJNcEVRSlo2MnRRd0c5WWtWeWlyMnZhNlN2MHZ5UTVOb2pQRzVyN09RdFM2SkVoalh1OVZETHZWcGxER19uOU1tekxJclFsQW5WYnpvdFhWWUJhQUJWZV9za1NnMFZVUUl1OEotQnRfYU8xcExscUE3UzFyNUNGVUo3bkI5cGpiQW85MlU1dTZvZGFoODBub05wRkJwNVpYMnhZZGVSNVJIMmUtQzYwVG1PWHRSQzlwdXVfaGlKM2RiWHhkUUJFMFhhc0RrSUttOS05Z0g0Z1AyQjMwRExwMkRWNF8ySFdXTk10eGUxLURFVW9yUnRpa0tkV3BrMWw0T2NNRG9wbkFqekZkckNrbm1GWVh0MFhBUVpKVF9KQ0tJYjA4cmp6QnVMQ1hIMXFLc3M0TThaTDNXb0l0STFQUnA2Y0xoUlZFYmhKYWotYVRlSndyYVNnTGx2eGNWYlpyOVBXTVpvcXRuWkpQZDRIblFRTjVRLXBvSmlCQzBuYkhTelZmQzNTc21kLVVPQnVXVm0zaU5IWC1yWHRKRHRQS1h3aU1IRFlhZ0dFdDQ3YVRpMlk4YlJmYXdEcVRwendsTVVwbV9UczJNSzhEOTFudnhjTFo4TW9Wa2piWmtVN2NKR19QdnlTeG93Wk9oakV6SjhqMU1uOFk0NFVsa3hCb3VNakFCUlF2Rk5IbGZEZTNmOV9JRXZLMnBfcmRqaDdzZzhuekctQnBFLWZ0XzRQOE1YQXlhRDNwTEc1YWxkNm5ibkNnaDIwQUNKLUlldnllWlVhZkZoLU5DM3lJSERpMGdVVlhuQ3ptU1FHS2J4QTNRaUpoSXF4N2Y0aXR4YzVLSjFFRmEyd0VPNjV1aEJOQi1xeGJKdGlEQlVfX0VheUotNWE1dGRVYlU0N2doNXAteGV6OHVWcE5TVTlQOTdEZF91LWRPNm1yTC1jRko4ckJlQXA2Uk9mU1g4OTNOU01PX0lDdjFaRFhsenBtRHJadEhaZTlwdFhfelI2a0lRa2JCTjZJT1RGS2RMZllaaHNId20zNmJRQmJ2eUptS0hXMU5IUzFaZUg0MnIwb0pOaHpPOW9HcWgtTG4zbW9tMS1KNS1kMy05dVREaTNLLVF3QnRRT1dKcEdCSi1hV3Fpd1RLLUV2bXpoeFJUUmdJN0hrc2VBdHlEVUFiTkVPSXR6Nm1PWVpWNmJiN095MnpQVjU1Q1M5ZWwyN1hQXzBvS0VYNmY4aTJBZ1R0NGk1WVIwTGtVUnZHYUVIeE85emRSUVNNRzB3TnVDUko3VU9SdDI3NTh4Z21hZnZsdUZkN1BYQ28yUWU1dUI5dkp1X3dRS0ZZd1FsV2htaWRWbnpPWjdSS2s5dVllckViN3JYOUV1UDh0Y0JzM3NPdmsyYldhZmVSNjFSN3BzR3VNU3g4XzNWNl9fQ242ZWswREcySEphMGdnUndza2x1Z0lPdXcycWd3UzJNNHM2ekdzZmpGRkgtVWpQdlFHTVlpaEt5QXU5OXVBdDlIWlMwUnlwQ2xtQV9oeU9VQU1oSlgtNjhXZzdjVWtrS3E5T3NrZHREVml2QnBVaFNLbTJRTmdVVkVwZHhSQjltYnBIc0FrQ2FrRXJCa3hwWlI3OWhJMnJaelZGbDdCbU04YThSVG1jNzIzZTY3Y3MtblJ4SkkzSkZ5NXlEcDJuR0RWY0ZPcFlXR09MMThIMTVxb2x3VkxuNFpmZE5qOVhBb2U5Tmt3ZGk0ekR6QVZnMTVuaU5tX25lLUNuZzV4S2drQnljLWcwQ2NXTERFdmU2VzhWN1JvZ3lKV1d6T3BUeG9Cd2E3Y2w3dldVZ3dDM0ZJbmNUcE81WWM2ZGZ6TXdCMGY3TGZjcllpeXR0N0J3MDI2QTVJWlNpRzhDZGRka2x4NkxvaldKSXRJOGRXZGNzTDBpYnNFOUdYdVZGaW9sWU8tSEU5dzZHLXJVcjFxbUliNWREVE9iUTBJTWZQV1EwajRRYXo0bTQyTm90YzAtMDI2Y0ZFTnY3a3VKaUVhMjhURHRkTlpSUjljNlhxN1lHcWZHaHBqaUVFQzNPQVVHRHJZMHJvMmNtY3BRcjlFRWtCZ1UzUDB3akU3dFhpZFdCNnVaSmUtVjA3Q0syR2tBVlZqc1cwcTZiX0JlUHJWNzZIVl9XMFZuSkVETlJzaGZyUkxnZmhyZFBzbDB2WHlCR19EQ25kMGhOcWlwS1VZZkRtOXV1eFdoVmlwelYySDh6RzNkOGxaNVVBa2lGajl3MkluU2lyVnNHVU5SWnZockVRZ0JJaHdUUDU2cjZTYzQ1U2RtLTBnQ1A1RHNzMllBVzdNYnZOdldoNUVQU3FpWVRNbkRyTXpNQzVqLXIxYnlQTGhGY3NTc1lKUzBoc2x3RGh4dmpIYjc1ODlQQkN1SHZ1TkZ4eEFvWmFQOTA3WVprX0hWVXY4QlZ3ckxfeVUxanQ1U01HVlpKZ0wySlV3ejR4SFlaMUlVZGZjYTRtUGNtUlRhb3BCMXVPcThUclVveTBQa001MFhOZW9zN0tnQmpzb3Z4RjNlYXZoZ1lqVW8wMnZVX3dESDY5TTIxeXU0RGdIQUx2NE94UWJKc2RrTHk5RHB1QmZYWXJjejlBaWwxYUJUY3VtemlJb1hkVEFLd2ZzNF9rb29ISE9acldWTl9BNVJLTkdwOVhVYmh4U0VLMWdjRXVLMGpDYXlUT3VBa2VPWDJqNzBFNXdBMGJIUXVaODE5aFNOT3M1M2F4RUh4NGppeGhkbmlrZ0lfbFU5STBUN1hGSzdFRThPR3VTdE9NUjV1RjBBZ2NhM0stQ3JfcHZ0c2dwSmd2alM5LUVWM1llMldEMUl4MXpuS3hkdEZSU1hwbDFLaV9mX0VSQTZkZjJIMlNQZVBGSnV0bHBmcHh6ZkhORzVtQmd2MFZub1p3Q3VtQVoybXdTSzNtdFB0VTd0UjVuN2doZGJVSDE4dnpJc09mTDRZLVBlU2N5YWFGdVZobUdVUjh2UExBby1zVmxsa1BaTl84ajhoQ0txMXgzdnMweFBFeDlRN3o2SVlKMFlna1IzZktKQXp3ekJFaWlLcTdQWnc5UTVJVnZ1MW5UMHA0TGg2ODFtbkgxYnUwMnlJTnotTHQ3SVFQYXlUcGFEM3NoVjI0U0RtaEJqV1N2R1Y2aHhiQVJLTm1BeTl6Y2pwd2RhcWVPczhHWXFHWGRqSDJhb21wSUtTTklKdkpHdlJhZzlzblNpb0VUQURXeHBsRS10LV9EMUtVUDZKdHlpTmp1VVFsS2VXeTRXVnROb0xZRkUzQW1UMWNHRFBoSVNLU0FTbnVuSDk5UWZGOVp2RnVhQ041Z29iUlB0ZG44S092TUdkZnlhRVV0YlJDd2dadmo0WDZuRjVXWWNISS5FY1lybGFEcnBEYTlHdUdSWFJ6NkZR"}'
    +      string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLk85WGliZUVDbjRwWUVUdmdzNzBkV2c4QS1VSXR5VnM4WWdaUkM5WVlQYl9PcklGY19pVV9fd3hvODVLcUFXX0s1XzJKZndkTmJCdjhPYTh4NldJU2tsZWFpUVZsV2NpOGR1M3YtTWY1c0VMV2pFSmJpeFhDZjJMN2FKU2h1cEVMbDRTSlZHSTdsNVVGdFdwLU1lWC1nVkItS3QxVjFMTC1rSTZycHM2RGg0aWU0SjhXZGdNVThQekFCdWFyRmpVdG1tbjJHaXNuTlcyNXdRWmpDOGQ1QkxVaEtvOVlvMEU1SkM3aVJBZzVBRU83V0xGWkJGYkhmSDZpT0diQkFDakRLMTFPbzFvQ3dmZlUtQjBtS0lMUFZkb3F4XzZ5MVFWa2F4Q3J5dUE5Tko0b3dCSVFLSGxTMjU4NHJERjRsT0otWmpyVHBJZFMzb0dRazg5bXBwOXhXQS5EN2JpbmZLTm96dDBmMlQ3eHczdXJBLlAtdVNFaEhmbXNtMWFOTDg1Z1hLUHhDcVZoUDlZV05SbnloQ3cwWElzRlhUd09YZFNaQUlzNmNiOWFDd3NEZnVhTDZhWGZ0OS05VU9jNThrNERLX2Rpa1JrbVJvbmViMTN4Q1BXOHJKdzZXcHlxenRfNDZKQXk2VWw0aHpvTzRtS0hORGt6TFJBY09iVmdoZi01V1hGWFdHaGtuOWRkcWpGaFRGYWEzSEo3ek5WbXdSOEdCQmlsR0FvdzJCMkFaVW9Jd2hHdmV6Z3dOdldkNWc2bVBfZmFYQkQ0djdHOWVIWnhYR2JSaXMwaTdvUGkzY3Z4SHdRYzV3ZVFFZGlnUEhQTzZxSlUzeFVFNVlneDVaODdWOVUwelFkRjRvaGVBMU43N2NYTGNSVDBTZlVUTkllenh4Zmd6QmtwbTZjWWpyUmR5MkpKNUJWXzBtdWZQY3ZKdFlhTGlOMTNoTWdCUXFpZUZfenpDY3kyQ1p4czM0Y0g4NklvVWxWS2VHbGw5YWJ5Qml4Ni1hTy1GRUt5UU9vdTB3SkxZbG5FMHp1bXBHYmQzdWR1dTRTT3BxNV80UF9rbVNwLVkwX1NkWmJPWGRySlh0aS1XOC12UUk4OGZPd2U2T3psMTF5Nm9IeXBkTTFRZXVLUW0xSjRmQnpHeVlVNHdOQ1JiS09kTWVmcmZyMFFKQm9sdXM2b3FnVGp2TEEwTjZjVEpaYkQ3VmN2SWpyc2U0ZGMzUXdFQmxaZzVLNDl5LTYxX3hGSmNZX2xUUGJ2UDdua0VybGQ5VHRhUjByYkJESnFEUGg1cWR3N3FrbXU1dFBlWHo0VmpKM0ZOMm1RaFNOcS1RZUF1SUk1LVRpNDFqc1N6alZsTFMtZ19mTURUblFRa3NzeUhsZDFjTlhVNHNpLWR0MVlGLWQzZXNDNkxjeEYxX0dQeXdSOG1heHRNYlFfWXYzdVNOZktKWTRoNk9XdUpjdXJNbl9XRUE3YkduRWwxY0wxYmZDSTZ2OUVLbmFWbmpfZ3R5UndMVG10WVM5RlJuRVJQQU9FeFVBTkJhZTFzZkF2NzZnNExiaU5xaXBQYTdMMlJ1bXAtTGN0MldGSmcycWt3MVh3TXUxeE5CQm5ubmZOdWpEOU1QelJibGNxdGRjYURhRGxaT09oX1pkOXhpRzFlXzNrbzd4VnlBcDItOGVmdzVKTUlkcGlSRXpIS1lfd19ieWM2QlR1eDBoNmxvTXUtdUwyREtPRFRYYXFRNlJTejd5Um5Td0hwVWNmRHppaFhXc0Y4OF9Fb0VNelJuaFM5OHZ5ekxMZ3pSNXZ0N1dUcjBNYjlkT1NxTVR2cy1aRk1BUVhtX0hGelZEUExDT3hpR0Nadi1jV185RS13UkNmYjI4OE5idG1McWw3MkhnTHFlbU1XVGc5M2l5Tkt2UzRaQWxuanFEY1pXUTE2bmFpNlExRGlGTEo3djFlRVprX05qSDl5WEcwZDNTUWVJN0c5LUFtdVBtdjQ4QTlvdUQ3dTR0bUM3WWluTmxmWEJRNDdWY0RuV2FXRVRkZHlINDRnS0cxU1BMTk1DWTd0VFc5dTd6SVhuLU94NHB5OXdVSjRJMW5BTlpVcGp2eEUzVUh5QUpBbWpDeGI2TXY3c3FvQjNZM1NwMEp4QVc2Z1V3a3lNS3pHbmYyOEJJRFpEOHlNbTlzM0loeEhmODBYalRqcGdMOE9lMWpQWHNlQmtMYlVOOFVtcDRhaEdPeHNTQVY1RnBLVkRmNFN6VnZGQTEtdzFHYVRsbTE1ZXZ5Sm9DQzJpQnFscUlFRHNSSFF2amFuc1pVUFQ1dXZkZTk3ZTZ6bXJFclVRR3M1bk9FRnhxRkVZSjdUZERVYUc5RU5kUjc0TTJfaUhwdk9rNjZWNjdTOWlLZmJoY3N3SDVqVWFFc3B6S2dnV2lhblVCRDJmVEpPcTd1RktLdDdlTTB4YjBfY2tLN0tEb1dfM08tSENsUm02NTFEeVVKcHBsaE81TmlyS0pzZjFUV0gzWUlhdVI1R2NlTlBPSV9oX2s5Vm53akFJTTdaY0R3YnFlV1RrVi1LakhCVnFvMVROSlRqR014RnNmaDNRTHVteDNpY29abjJMUHc1U0thYk8zQ3JoOTZ5TURZRnNkLWJteWstTmcwM3E1dlUzLVc3U1RISjZSRzc3LXdaenNIa1F5UFNVX1l2Zm4wc3Q4WjhBZHRId0x4a2xWS0htd1ByQUllY2k5cml4Smt6X3dyNUNjNDFobVEtVktDdXZKbnduQ0UxUnJheEtUblRPRlRSUXBvaUVCX1AweV9TV19RNUpfSlBCeFE1cXVvbWxEV3ZBdmFjT1EyVFJWT1VkMVdjblZVSHBBdDA2cTd1dThpUG16a3htNU4yQzRDMzdwT3R3TjhnUi1UZ04xNWNVektUSE9Db01FT1F3blI0WnNMbU5FWEswWTJrNzRTVWQ3Y2tpQXZRMGtSZ05WVE8xZEpXdkdaWGRMWElQRWdueXptR3huS3A0LUdBUzlEazhfS0tjeEFnUk1MeXQwM3NQQ2tndi15NElBWlpjb1ZqVDYtbnFPZUx2YzFIdzRKWTJsT1Nic2dteTJOdlMyeVFHaC1Pb0FBaHlvNjhERER0d21leF9NS05ObS02NU1GQnRFMGVGcFdSeXI3R1NyaHpQX1ZPZWhvb043U2lXbmk5dTR4Q0MwVDFyZTU4bHQyNTJjNzJqRGtLUGxMWnl6Z1FRa1ppNzBYclpxTHJZMXFsLXp2TlYxbFlWMEs0OVhEVmlHYVJpRTJsTXo2My0xVGROYWY1VkdFRlBSeWNKN0JuUXVzS1BHS2Y2THRGMXA4dEtELWF4b0J6VkVHN0N2WXdtMmJBVm90ZnNva1VGaUlydVFnNHZtVmdXTzhrMFhOT3FyV3MwU3cwc3RXZDNNajA5ZDBnVVdCMHhaYmZNalQ4blFSVUNLMEFjRFZRSmFJSHV4aWJYU3h4bzlJOGNuWnlYZlBjTVg2ZTJuNVJXNEJmVFh1QkcwcGJ2ancyU1Fnc1owNno0YVQzc0xMbVNxTjhTalBEaGhEanp3cWFGNXZyM0ZFZVR3UllpMXBWcENyQ0RVVlNrbTY4ZWVDQ2xkdVlHVVR5ejh5azk3U2d0cDBDRXZSQlI3SVVRS3VQd3hXVDR3RmNPYjc2LUNEZjd6SXRxbGpWd3F6RFN0QVJUWXJ1R0FNTXBfQ2N6X3d3bmRsQkE2ai01cE1UWDhkOUlXNmVwR3VGMHFwZ3VXSHV3a0Nxd3pjS2tfWmFhaFZwaTQxOWEwRXBsRVlMNEpWWktuVC15VHVfOUJMaWowU0JKRWZSMm8ycE1uVXRZTDBLUjB2NEQxdFBoRmdqcUlheTVRV2JlN1gtWVRjM1JsdVgyYXNvTGVvSHZYVlFDTUhSOExicWRXTkVtZTJmdnBzeUhZcldLdGVnQ2N6S0VmcXJOMlRiZldRU01LN1F1SEItRjJLSnc1YWE0TUZEOV82OThuQTU1eE5wQlE5aDdnbThxa0xTYmlDNFZ3dFJDMGFRT3hOY1J4REthWDJDV1A0dWZaQmItZlFNQ0RqNW5sUUFzZWlZRVFqRW43RnFWQTZQOEpBUjhwZU5UU2twUHpNOTBnZ3dlaXg3d2hKQU9LaExMVlFpd2hrUHdGUkVCdmNFc1prbDVKNnliWUxmNWVxV2N3OTFXR0w3c2NUMWpVQjNyRXp0azdjc2F2MVB3SlNYQjVGNFpiU1ZCeFhQanFMUDZ1T21IMF80cTRfMTNTWk9uYW9sd0VwNUI3c3czRkticF9iZ1UxSDdmcTRfYmNDVm5QckgxZnpOWkphUWNuLU01akRKYThvNTE2UVZFUVQ3TEtPa3hubmxQcmZyVjgzZWY3RWN0MlBkRDRnX2xCNlBfVS1rQVVUejA5T3IwU1l1c01BZy1LM3dPRkRQQVRTaWRmVTVwTkE1ck8wQ2FTdFRxcHo2SUN0RHl1OEVSZEtjQk5hVm5CQ3k2bFVzTTJpaWRseG9uSkRvRXNQTVg0WU8xdkpHR0RQa3FzTEQtT0wtbndBd2xCc1F0WWtXZS1UU0piQUF1dlhGM0tPY1RHWVl3VzhjbW5MZm9lODlUUUhLaFd4VExYekRKQzZSVXZYajBaaUgzdU1feUNwS3RnUkxYSXhXSnhzQ1F0M1NMQ1YtaE1UMjZsU2dkLU5JN0pTSkR5MHJwRDV5QzBqWENIdVlXRGF6TDRXdmVkY09xWl9IUmxIZFkwNGFPaWJ1MnZPLWhJcW1fTG52LUFhQnloZW1RTHRhSW1IN0t2OE5zUzBSOUM0LWlabUp6NThDYzI4RWlPNUZEZ3FlMG9VSHU4Y25pd0ktX3hxb1pQdEllQndaRDBXQTJiN014UUxmRGJHUWg1UDVnTzZDdWo2VnhmYlA2WTlOQkpKNlV2MVlYeEQtNmtsM3VmX1NNbXZqQ09LREJUTzBfRDRpdU53WGxTZllpY1prbFFOT2ZmTkE1aU4yTUpaSURFUXRqQmZNSnJxeGYtVmRBM0ZqZnFvQTRIVGJKWnF2SGNvdGpkQnNqV0o5ZFhjdlJYZFpOUWF4RnF6UlRJWWtNRXRVMXZFVUt6SkVzdUx1OV85eHN6VmtwNWVKSHJlQzJLdzhXYjZWUUwyZ1E3X0hMQ0tXNnlOV2VkLVJWYVlsQ3ZXamNWLTFNRVpuVVNhOUJvaGZFeTg1SzNlbHhBZ21sbVczU3ktQkRsTXlnSkZmUDlFNjNHWUpvVkdMeFpmT3RjU2lSb29LWG56VHB0TG9YWmZDMUtzS0ZKdnhUVzJVMGZYajdQdUR5Wm9rMkZMSlFyaGFaczNmLTdrSDFreXFET1BCX0VwYXFOREZzVUdsUk5NVFJuVHFrN3JuXy1YNVZRenNGTnoyTkpzZnlHMEMzVHEtQ1U1cTh2S0ZuNWtldE9lcUh5MXBvVG1wWnduUFlSOWRlSUdmV3BSb3VSam4weUYzbExmUmphd1N0V0FrV1BQMnd3VVV2R0cxenN5QXJDY2JWcWg0WFhyUlAxaG1EWXFWd0N5Qllyd05WUDF4QmJ3ZFhHWjdVRXFuVG15Q1JvMGdlYnJiWkRXZzB6YU5hY2wyZy1JQUlPOVB5djNSZnVwWEpHQjRuZFRnU0lKaTBQdFhDN1BSbUg2TUJyNWNzVG9TRzNBNjlOVjZJRFNFS0c1OTJsYnlWMGJRbHlwc0hlXzkyYVdjeXdxM2IxNU9zT2RjZ1lIMHBQRFJJeVh2R3lVdlBSbUVtTzFNOXg2NEdkN3hVSjFOalR2TFdVRDMxOVJUN3doRmJmQkhVZXZwbk1MMk5FSWxacXlEaUhIWFB3N0l5SXIwTDYwTG9acDMycTdzamhveThxN085cUxfWVhhY0FDWWJ2bEZBSFZ0UlZVRjBvTzFUamVCSEJsaE0xSmlSNzFpc2drM2Y0ZFo0SzZPR2RSMEJjZGpiTFBqODdDNXhIanh1WWM4Y09fNHNVM0p0SUhpcXJyZzJqM3N5OFZOR2N6bnRack1laDQ3TEI1cm9uRGtZVFExNFlIUmsxNm1aVWlOWTUyUFVYV0JFdU95QnZQaFQ5S3R0QXh6OFhoYkd0MUxHOE9Sd0xPTENqazMwSDU4dEhHWVcxeXFITGgzcUFoUFpfSkt3eGgtNkY2MHBxTmM2U1dzaDNzZWduVHdSVjVNTGhIcVVCY1h6VVFFYndSdEo3OEVEaHRwVENEblJFbmhYV1B3T3hCejlZVXBKbE91Zi03N0xUdkw3RmNXVkpyNlJCR2J2WjNwUlp6MG03Vk5Iay1mSUlaaE9ROFQwV0lhOVktSlhlM1BMWWNUakFYc2dyb3dJYzRtNFpENDdTR2FqdUFCaERnM1IzeUp2YzZOd285MFhCUGg5RGZJNi1aQXVHdjM0NjZYM1dWWUh6aTM1R01NQ0NxX0lRWnRUZGJxRjlCUVhIMjIwVWlyb0lfSDdvS1ZGV1dKQTFnRm10UVI2Y1ZuaWo4QU5HVmN0Z0R6NTBWamgxV2V1bXpXa2RZWHdPTDlEMlhhQnd6YmsybE5qcmw5dlE1OU1BNmlUN2ZUeDZsQVR0MU5WUnNuZ0tfcEZJUG0zSXpSanR0LWIxM1ZXbXdMcWVRR1JZSTd6emZZaDhVOHN3OEhvVk9YaWNaRVdpT0RvcWdVdHZqU2hLZW1GeFBENU5DMlJRQ2N0UEw0aXowSDVEenVNcUF2LUNDbi1Cai1LZzByeE4zbGhNUk5BNUEyTUI0VEJQOU5hMnl3dF80YmM2RkFpNXJOVFQ1TlBUZnNmNnRqdFZHcTA0bk9WMGdsMWdvZkh2Ri1EU0xLZWtidUhFeXZTLUtlZG13Y0R6MDlTUEgxYW9RWk1jRlRCTElLWXV4dE96Zzl3d212TGpQeTRCY2hFWWl2TnhrSzdvOEtFOHE1NDRkOWh1VzBxaVpCUkVFdEkwTmhsUmtSWWh6WHZTRHpYcXZ2allLeDhZWlB3WmJ1SFVJUURlNTBqYXByeHFwbGJLYk4xWlZUWmR2U0ZZM1FjY0tMa3N3eFNiQlJQcndLRU1VVUw4aFRSQXBJWTlOMUxNcUp4ZWVfSmVKM3IxdUhGZGVCaW9nY2FKQU5neUo2NUU1RzJVOFdMVjIwRGxYU0s5aUhYSGljTzFQN1NlMnVZbUl2YlNCNkxtLXJNTDlRSWpoYXpnNUY0aTVFell2N1U1T0NkWGszTkhpd0hlWEM4dzEwU2hCQ0JhUXdVMTJ3a1VtbUticHRIQ0NuV2EyQ0ZrSDQ1bjg2ZmdFR2J4b2YzY1BQZXJWMXp3TnplTGNmU0FXWnpyWC16TjY3R2d2YXQ5c3llN25VWEZ4VjktX3c5WkZYTUhfdWVuMWNhcWt2M1FyMEtYc3k1VjZyRjVZU09XQkhtenRIZ0llMkwxSGVzZlUzZ1JncmFlZHpnM3BTOWFrVDdWWndPVnN0ZXozQUF6NW56Nkp4S1hhNzlqTTBGV2FfZHpXSnNod19XSmJaTV91RXQtVkNhMkx0MGlMM25SOGo5OFAwamdkaEtYMlNaay0yRmpCeEgtcHl4RU02ZVRGX29nOW1iYldOd3MtQ19QOG1BLW8tNWI5SDFRZWlycTZ1WWNqYlNwdnBnZDBZMjFydE5rWW1JQmd0OG1XYzNBTHpuM1ZCRGtTaGp5bmUxYkhFMmF0VUJTWE9rTWc3NXZtdXBIbHVKaUdnVnFpalEyREZTZENBT0ZOUG5yd2trcnh6R2FZX1YtYTQwUkxNQ1ZZTmpPRXN0YjFzeHY5dURZdkZOUGpWa0FpNFlWdks4WVdRcHRWZXE1R2swdG5DUnE1eFhPTnJXR2RnRlJWYk9EYXJhWElXc1hZX1lLZ05ZN2c2eUYzRkhrWm1lUFB4a3hvU1NpN0t1MTB1WnAwQ3JocE93eHhua1VTTlIweFp5VXc0bmZ3OGlaLU15VXFhMVEwNVZ3U2hXRGNBWmRWOVREU2pDVFp1dHB0Uk52YWtyT0dPVEZ2Uml5cWRwakozdG1QZW9jelZkQUxfS3Q3TkpueGhxUEV5WWtwQ3BQakdHQ0pONThIdmxiX3phWHIxVWdCMHpXVldpVWpmdFVUcUpFOThyYjJwZWt2VmUydXJOZWUyT3ViZU0zdUh6aVI4RnhfWlpmUlFoYXNSQmRxSzZMSzdVdlpodmFzZEJ1aXR5SFMtZVFyN2xIOE1CZUFnZnVsX0wtV3REWmxJR1RycUZuTkxpMVk2Q1N5VU9jcFY4Um95Mk5vYTIzZGxMMjA2YWFWY0laVEtYdEt3Sk12Q1NzdE5FVjlsWTVUN3hRaFByd1RfS2dyU2w1aUpQOUNzSEk3ZDlqb2lJT3A0TmFzRElfN29ZTzduazByWnh4SGloRG4tTmdlRDdwNjROajEtN2oxdmJrNjE2V1RQb3dnaENKM2VkZWVNRGVpclhJNWxudE5hZk53MWw3YzlpclEyeTFaQXJpd0pLdVFVSXpwMl9ReVNQRThQTGo5Z0pGWkEwbHNJemRta0VFQlpOS2g5dzk0dkN3a1g3SEVsakM2MDdRWEtKWnBBWF9sWldYN0RYbG5DZGktek9TNDdxdW1HYWNNRGZvOFg4cEw1WXlIem54QnYyOFlXUGxWN1o1cER3c0JXZkI5cDZ4SXBZTGlGVTc1c2psYlU5RWtPanIya3RSak9KUEI5cGtWa0NpRXh1cGEwN2JFTVl1ZjU5XzZGcmNjU0xrVFBYbTZKT3ZpS19GQk1vMjJGMzg4RzVReHZnN3BScVpmQVRCOFV0eEdWdWx2OGZzeDdQQmhNX0NuVEN6V1B6emY1Qzl2MlA0YTQ3dE8tbVpRTFpBcDA4WEJrZ2J4dG9JeWotUy1JOXR5ck42WmJ4OHVfdUxoTWZZVkZfQ1RTMjNtTHl5ME1ndTJOR3RGQnU3cHRJMEdtczR3dzh3cDF5S1ZScHQwNmVoeEI1OG5QcDdWRWhMeXVNNWNZaGplb1RnU3BMYjd1bGxCYVdjMDU5QWduMVFXY2ZzYXJJY1J4Mmt6UmlSRnN3enQwUFBfbFpaS0dJLUt4aXFnbUVWak9jM3pIaV9CemcySXdrSjdDZ19QRnNpYTdlVXZ2SW9DeEcteW1yRlZrMF9NOC1ka2RvU05yZ3RIOFdOel9SbURYdWctLTRUN0ZuaVNZT2hUeEU5NkNjX2xOSV9VN3VzR2RvbV9QOGpVTGdLUHY1V3RYZzRpeTN6YVpXd3NYcTM3RkpYS2NYcWU5SEFlNjVoS3haWnIteV9JTWZUc2xtakRrNnQxQ3E1Q2F1S1I1akdRS2M2QnZfQzRqc3JUOThfb1pXTS14TlNsVEFGckhFc29OUThHdHBoZFdjby16NUFZeDl1bmVYdW1DblNpMXk4UHN6Mm4wa2IwbE1hMEtWRHJiam9yVEpjR25sX1pzU0dOM0RGT01BUUxRR01HZEdBbFo4NzIzbDg4a0J5aEhUMzlfNFJ2SVlWQjB4NElzQ3JyWkRodE5iOHpLbWdSbWZnbUhoMEhMUmJ6dHBiNDZib1NwMmNhVzhPLVlrNjFIUXV3VDhxWHVfcHRwOEhiWnlta2JmdlV3VnN5OGxxVzN6LXFwZVhqUHFfdW1xYlpiczRhdUdXbnpXN0ZOVUdBSEE2RDBYcUVwdmd2UnZEQ19sOVdjeE9vOVNuV1pOXzZ1WXRMZzNLeXlObElMNGhGX0dHM1BZUUtJM2xOakgxeVNDbmpicU45TnJZVGJjTHVpeDBtQlphMllXQ3NZd2hrSG1hQWRLeGV2a2VCYlNra0ZBSWRCams0T1RpLXNhRDNFUUNYaENUWk12c3k2ZXZDTDBvWnNpaXZLMGJvVWNtdll0NnVnekFGNWpRVXhNWHNRWUZBaFV5RElJeTk5SVVRaDgtTzI0RDRBTU1xZFVYNTFDem1kVHE4OTJicTQ3NlBWUXpJTFM4cnR4UEQ2UFZFektrU3FfQ25RN1dHTkFQQzN0WDdtX3l0Y18ydHVjX3RHblVWTlRKSS1keHMyb2tCVk1Md3kxUFY2eUc3YlVmbnIyNzJHUGs2ME55TzVicS1CRE8ySkVpOC1pV21YbHBYeTA0dms2d0hGb1g3ZEJPbFRqREVFSl80b2JhcksyalhuMmxURGhHSG5fSE5DYXc1U0xfZXhSYlZGeWZSOGFkb05qMDItMkJzTHJraUl0bDNtbDU2STFiSDcwT1dpb0JnVGxNdF9mTFo1cjRDR0FDckZLOVlVOHRtTTRNQW5CYURicTFlUE55ak5xbnZvNS1VTU1pdGVydGVGY0hRLThPMUxEVExETnA3SmdVTVJfN1hubTJLWkFEOUVqem0wWGxWMjB1T0dlQlE3VXVxbmRxMGFiemZYSlBOZUlsenVTUm1IMEw4anRyaDFWdmkwdVBfelZmQWxlWnpac2FJdTI3R0JTekxDUjdPdjJjWFY3X0JPbGlMQmpvemd5V2RuMC5wcnlhcm9ObGNKeDltUW0tNHZDSXpB"}'
         headers:
           cache-control:
           - no-cache
    @@ -133,7 +133,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:06 GMT
    +      - Thu, 05 Mar 2020 23:17:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -147,11 +147,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -169,12 +169,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/keyrec?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/keyrec?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keyrec/734f2f21dc9e45b6a7afa9cfa78c4b0d","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"mYqMSkqj9_oX2xpTTeqWcKOks5SV1-EgU6iJ7kw_hl1iu8MziIZaYT8RNadZ2omRL_UCsPooJCVcI-FjlDSxkHHnsqsGcP-0igFkY1C-y1OojuAz_81wVa2T6-tvydWTmY3f2-L_zNaVrM4RMuR4flSMv57iKzSpsLBoM8KD3ANNAHgTWZfDUH_ACX2XJ5PZgbQuu2SCxf7YsMnkpiaLRfKIFPzgxoTqWRJOmqkw0SAjfxL9w5McBeHfcdiCibtGM8UzDXCa1g73Hpil_OhzUXwwbc-EEYUeIskuRcauCyHHrTZGrHGnSebIOxTwdIc5kN7TgYyuIoixD-IIYcd6LQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676807,"updated":1575676807,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keyrec/201c012c957a40b89b5ffd5bee6fd667","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4d_JbCG2F9aIRdpzAX6aUxv6bt21g7jVMKNZb7cgWwSwahEVTsa2TjwOIZJ4FSPRFJq1aED0nCGSYxURycNIYh_9nNAlhDVn4rSgJOhGRi1Ze5WjAha3OJVOiPTW-Lky1vYKvKu83KFSvSRgOUVDbX_AdVPcRQUzf48yI-W5LfkUGN54KVQJfrp43WZmYCrqWqg227ma9UAvpz-U60w-ctkroIXERSvJ0Iu0SJ8-LhJ3tue4-sgkIIa6DT5X6o9YFXcUywzQVcvLMv8nt3GstUa3F6g7J--wD2UU2Zqa9sN--4OIzpeqBEg356052vV-mVuaEarGsp9iWf54yikX1w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450231,"updated":1583450231,"recoveryLevel":"Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -183,7 +183,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:06 GMT
    +      - Thu, 05 Mar 2020 23:17:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -197,18 +197,18 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
           code: 200
           message: OK
     - request:
    -    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLlFMcXAwNHNqUjZIc2l2RVlNZVlreWh1ZC1sczdXNGNlaGowRjRVTzhlX3JrTnpTN2FzYmhVYTNkVlVJV1c5SWJRUkM3YXo2T1NheVFYd0FUYXpEc3J3SnZDZmxlZXNkeWViSnlDUV9pdlJCNWRnbHR4cy1RQi1qcE5QYk8yWHNBbFhEaVh2ZTl5c0hYQ2JzXzJpLUo0YjlndW1LMmdkNmpwVEg4cXpwS2hoUmp1TlkwNnB4S2RKU1hmRHRIc2NzVlNkRlI1cklITjBhdXBpVGtJRUlCQ0U2ZzFfRl9aYm42RTJoMk5FVWtEOEFwemt2V2U1QXRRb3dERXlPRS1LeEVYMExKczlJLVh5RTdkVlZsSGdZVlVzaDVHTDFtM25kSXVWY1FSejZPODFXbFlxX2dBR2xHcF9HcUY2UnI0LVVpYlM3cTFSVDBTcHlicTBpMW00TGEtUS5MbENaX3lBWEV6dmwyY0xNb3EzeDZRLi11QkQxcjlDRzg5ZFRsSVZCOXVxS1BBWmFoOU9rbXdDcUtJOVE0bEljWWZ3bUxLNUQxVGh6WjJTVXRvcVFLLUtVNXJ3VGZLTFpWV2prRXJyd0cwekZiM2xLUzNKYlJUMk5xd2IxSEdWeWx4QWtsa1U2cjFSZ1V2THJtVjdZblMwbnNXV2ZyZEg3TGZ5Q0IwTVlNSlJRMDFCN0xZNVR5dWJ0Y3lWd0p2MmU3Tzdhd0V4OFBuem5haHg5QXRpeGtXeDJ1U1BONERHa1NfSlE4dGV3TDhsdFJjRUNFeG1yZlF1YnBIbTJ3b1M0SDdXU1N5bFhQRld6UTRkbTZER1Uwc3ZMR21CM1FsYnlPOVd4bEV2ZDM5SXUzbzBwWmZDdGVXa3l6RlFORk1jVkZ3TzJTQmhWdFhIdXlUWjhpdS1lbm9nek1RcjBlNS1QdmNvY3FVVVZ2VzJLUEVIc1Z6RFFCam5zaDRKYXNXSXhLc3JaWnJPdVptOUZDMmtSVVZIWEplUHhiZlo2b3RqWmlIRjNvRWhDekxTbVpzUmNhcW8wMHVtenJ1T19oTENJd3FaQzNId2VzcmdMQkpOVXdWNTVjWWNuYTZRY0Y0UkVaQ204d3hqOFdpOXhXeUtaanlQMzZraDJ5bnVzdmt0MFFOWjVzVVktdkZvdW9rWVYyZkhHanlWLTNNTlJPZW9iUmRPYzZpeTFZaE5sTXotYkhLTjZ2dUlMVzVta3FONVRvS3BWVU1hUXBpWnBIWmo2dmhUZzhJRDc2ZVduc0FiVUZGSTZIal9Cd3pUTkd5cno4VkpLbnV5cTRtS0hvUUt5bVlRb1dwRWZJdVVXTzMtV211M0FENVlGTDNJekdqNU1lRXRnNXQ2bjg0T0IxZkJsR0VpZXhGUmYybEVZU2M3R3Zic3R0cFhYT1VNSVAtT3pOTUlfN1Y1TmhleFFEM1BTdm41QzZESFlhMnBONy1iUjVYaDFwQkl3bWJZY0tIN1NFZmkzWk4zZUhsamZiSkpZb2x1bzVGdWdaUWplSHYwYkRNVGRPY21rWmxwYkNHcTdMczdGQ1BsZ1hNWmNqTWpqRU8yWDhxcWo0QnJiVEdhOGFNOUhWeE9pT2RVeF83ZExFY1EwUjBBbkVzMDBrSzBIRTRDOW5DOUhTTUszYXJDcW5kY28tNlYtN2xRY1p3MVlXRTlPMG0ybXBtOE9zNDVTRkFJU1llVWNoTWdhWlRKRTlKTHNYQlpmVXJQWWx6LTREVkhWeEU3U0s5OUVfOHY3bFc1bVNmQUEwUmRZanJhaTFFTHJrbEt1dUVKYU96R2pGNlNNR2tGdGk1aElLR0tfc3huUmo5VEhTY3hnWjVkMUxJVjkxcW5SdTlQUkF5N3B4VUpBYXZCNnJpTGVka1ZyTFdzLWNFSTNNZk9uV0EyWE1sNm9MUGhPSnNXMEY4OFFYQjBmMkxCUG0wdVhUZ192dWNONHBiZDRDRmp0TnFNZ285SV9mVDlMeW1maERRdllrb29TMEpfLUVjbm9PYjV2Zm0zX3dFbk9DNm52LWhSQUpKdzByVkRnd200ckFLWDNQNG9ub1psYXJjeTVUXzV1czN3Zzc2TTlubFlZVDd5c1NQeTQ3WjZjaGN6U1RPclpXaTJjeGZEZ29DVGkyc0RGb0dMSXRoejI0M0dWazlvaTZhS01qYm1hNGR5VkdfbWRZejlHazJpRWpxRlVYejkxa24wUExYVERKX1lSTUNXWW91b0ZBUTBES2g3TFUtN2FMOVFyaWVzUjV4NF9RMkdBX3IxYTh1emY3dDBrR1o4Mk41VXd1eW1hb1dVNUh2bFQ0SzBidkh1V2lDdEpna0I0bVNUY1c2WFROZjJDOElTdVFOZzY3T0JNVjhoVHVBTzYwbzlWa2h0YWxxdzlCZ3RHclRyOXJOby1SV181NzFKS1RGY2NvVV9yVExxVXlsN2dfR1NGYThrZVpFS19BRUZaRXBEbU1ubVhObVI0ZV9QSDlpa3dfU2NzN1NhS0ZKNktPVVZCaUswQXBvck5MZXgtNTZjWDRJbFAyUGxaN0dta21ZamJXM19JUFFUZDNyLXZxZ2xGaW5wOFZjaXB0ZDV4eU84RXI4QmFFS1dZWlkzUnFrcFMtSGZZXzBtemxSWGFHdnpWTFkzSm1uX3ZURGpXQVhSYWdoRDRJVUx3eEpPWFZrM3NuektXenhZU1RzOHpfdGNBTFJJV2plSVpEOEZjd1AwYThnYjVhSC1tTzBiRWNFbkQzQ2lkOGNHUlcyRkVETnl5QjVyVXYxSHJLdnlzWldHaHIwTkF5alYtbVBYeG52cU5PRUZDUl9sai01ckVXTmJjbXdKWG56VGlZeFotaVhHbVIzUW5MelAzM1lSZ0JZem5EVjZRdVVUWjRyQjYxdnUxUGFwMklFaHV5dXNReEJJbk1RZko5ZXRzdDJDZ0RaMmpxRnNYcTlNWG5aVHBqSmpOSU83ejZXWVhpN1E3ODZTX1JTSzRWcVFmd0lNU3BQTzAtbzNDMnVFQ0lUcVUxclRNb3BMbFJINXctUlNyWllPbzJKSUFXWk5sdFEwMXdiZzUzMFdrdmwwdTNpVEVVd1h6WGdRN3dFVEQ4RjMxQkVjUVp0OFFwSE9mWDRqamxBZGFwNXRDeVMzMjZzVDhFN2d1UkN1ZFd4YnhVakdJZUJaVm85aFQtcG5nek1qMHA1UWFkWldlaEtOR2ZfZmZhSTUtT1RWajd4Ynkybk9KYkIzRlFHbG1sM3ZVVWJuM3B4M3EtM1g5aGtNNDYtMUh4QmlabjBfemRlWXNPNXR3YTZoRW82QWMySklNZlo3Q2tOVHBKVnhkdm13WGhlb19wUnVPYkdLVXpOMWdZem8zNkoxLVNxZzZuZWgwWFZXQ21VU2E3Ykg3MzZqYzRGYjEyZkZydlVsYjFrVUU0RXZjUlR3WUw3MVlXSlNLTS1HZU1GU1ZvdXJVRlkzTjVHd1NqOUpUWjhTWVdoX0wxZGdXczJkWW9vYldaNUlDOVFHclh2SHdrSWJ5YXdhSk14cVJvbzQ3UUdyMkVoRHQxZWUtUi0wSE1TaHo0a3N4aHFDSTNtWm1Od2FlOHBEc29iWjlheVMxNnZWMjIwR3dvQUNtVlJscEsxRGUtNnJIMXh0Q3E1WWlUS05WYTVMUXU4dC10YU9MUmdONEpYOEw0NGZGRThsUnM0VWc5bVhudzZ0RVlFRmlMN3c0cGh6SlRyODFodEMxWUN0dTJuVGE2bG9tYjFvTkZycHpHZEVyVmhPUE5wV2xiQktzOHpycldvN0ZocW4xcmRiSjBUdHZPbHEzakU5bDZRcExvakVPaWV4QkV3R0FfdFQwN1JUYWRZelJTZ2ItT1lVclVZelZCT21kQWs1UHFKblNDeG03TXM0czB4YmdOejBaQ3dWY2pPd3pkLW9ORVc1RThPaUVGdFBnQ3BUaG55cy0yLUxmQW53R2FfaUlvb0lGWF9MZ3lZcHJiQjE3TXY4SHJtZExmNWlsd1M1cjhjWDcwY2FFZ0dQdjVISElFMmFsMGVpYWplcjd2UlJ1clU3MHQ5SE1NcEtKcVJ5VXFIRHlOX0tuak5jb29qVEd3WGRZYmV5MkcxNDRGd2wtV215ZTF3WEQ0bXVqRnNIbXpKdmVDQlZCbXExNXZ6aUF5eFhPSGgzZWotR0kwQ0pTaFZfZlBaTWYweWpjRkt6YjIyQ0JVSVctVXNfV1d0VkNad3lsSGt4b1A5aERzMFJLd0Nyc1RQVHZTWV9YV3UxWkdFS2xtTnhzZjltVWppSzdYNm5DVHIta18xZ1J4MWYwSEQ1U09WOU1HUElOQlQ0T2JsUnc2N0QyNUlVUVhoak8yMU5pa1BtSERiRmFuYUtvbVpybWktSC0wVFpnTmxUVmJSSWRRbjU5VmNvMkl2aGpFVmhQYmR6bVFkVlZ6TzlZbWNqUEVURDlCTF8tREg3VUR6cHFicVVsMWVocmlaQ2xuUGVGYng3VVhSTWxsSGtrZVpUUENfbUlYTmtHTDkyV2ZmZEYzMWtidlAwVVQzUnJrblhlUGFpT1Q2em1UVVRkLWNubEt1cDJjdVRxYzVIS2Vjem5xNF9oZDcyZzVpaUhkMkV2RzFQMzQ0SUw4QWVHbU1uT0dxdG1FakhrWjdJQnU1XzMyQ3B3LVNBaUFqdmlaQWhFQmVyaWpjY0Y2SW00cGwwUVhFNDcyMWVtc3dFV2xzRk9NWklPQVR3d0lxaFJxcFVUcEJEOEVfWExiZ0JkVjg5SkZJVW41VE05VnNETE1pUEZfUzVpbjJuZXh4Q0l3cGQtREl5d0FjV3ZyTUNjbm1NOGd6ejY4ZGNIZ1JLUWJidnZFb1RuWHZWQlptTkxPZlJUZ1FqQ184VVVzbGJCNTNHblpmZ0VWSDFUckNLaG50M3ZrUVhkYkZ5YnpIS055b2RYZy1iNWNVSEVtT0wzdWxweDdhOUlOdFpXNTRVbmVnanRUM1VteGp1ZU5FcktaN3hheHYwckZoU3N3SWdlYk5xejJCQ0tlVnRYOV9GTU02bDl1X3VTdmNNVElGTE1RLThFb2xmdXdJMHhlQzhOWGMtbGxTLXhMbFVqQTB3ZkF5N0RRNFFnNVpkUXd4QzVybndWWUFmNElJOE9vUHVfWVBBZmxwLUhRVk8tMzRFMzRLRGZ6MXV1R1NPZ29idlZERE1TalNUTkdKazZ2b2J3TEJoMWptczZJLVVIRDZrakZ1bWpEalJEZDNRaHR5UXUyZG9HZ0RXd0trM3JNNUJZa3B3eGcwZkZSdDZyZmNzWVVwNHRLUDBjaTFodFFJZ3YxWWZyRVFPeWJsZHVVZF9SbkkzcjlxMUR0RDFDaVdQeTI5RmNOcUIycjRkVFp4WWtFelcwb19kNmM2UnVIRFhIQ2JveXc2UldTU3lmY3BpWFo1YWdrcW5YbllfUHU0NExQaXdNMWtxNzhCZWVZUDF0RUsxZ0ZqZF9QNy1zM0YxX3Jsem1jY3hxQmdWV1R4V1BGOGhxZVVvTlFGdWtoQU1SeVRVTXhQSjVWSWhmdWdGVjNja3Y0NlJmN2RRNHdpTDZYcTNlcFdLZUV3T3dXNEMzN3lpYzVXNEZYSmEwWFkzQzNnZUlFVXNjaXJJcFl4YUtKRHBiY1RoZ2Ytdy1kcEVqLVAyRTdDSGZEbG56Xy1mcXBBWVFWVzVlcGpBOU15UERodTNwNVBzVkNLX3IzTE05bkczQmtOQzl3TWFUMnp5SGVYQm1EcFU2d1hZRFQxRFpuZkt5aXN3NS00Sk5QeHhyYkp0azBZbEc3bzVVR0wtdzJNakQyR1dwcVBYN3BtZ2JMREY2TzlKcklfelM1c3FPVUpoS1FDY0NQRVdySHBOa3NpeFBYZDNZXzR5Vjkyb1ZrRmdha1pRWHF3VUxKMzlTS2Q3VXFZek9xM0otMjY3QzlYUllPZFFUTDdsR3k1UTlCY2NvMTBfVVhfcHVIb09mRXhkUEJoMFZDWWRGdUpmZXdpYU9YLXEtUW1zY2R3TXdOMWxiWlNoRUF6MWFhMDV1UWt3RFRTbTE0VWJRWDJBYXd1UTZnYkI2blZQM1lIMDBiZldlaFNKVkFwdEt6UTl1Z0tiTjZLSFFlczZzMmRYekFlVzBNTk5GQlNuRE1sRDBmUEUwMTBQcnFRVExjNzBLZE1OTjdqa2ZtV0R4c2I3WlFNdWtIWGZpQ0NYeWduMlNMLVVzTXIyX1ZUOTM2SWdTVldDMzIyc3RoZnh6Y1BCRkEySmo3bE9mUDdoZG1tU2NEM2FFd2gyNHJ3aUhYR3VfbzlzYXhFVDJDWVVLTWlzZ2J1Y2FQWHM0VnlEbm5qUDd0OUk1UFg0ckNjTDV4SExnVXI2Z3o1N1B4OEtGOEFSelRkQkdpNmxDM0JmWG5rTDZUWUtqelZ4MGVwMHhIeVFMelh0SHFTN1lKaS1YMEp6VlctQ0VYS3IzVVpFcUlQUnBzVG90TFR3N1k2dXlpcUNPUUNObC1NRjlxa00yM2toQ2RqYW1fRWJXNDBoNWxSLWRxelpLbC1IOERDbGU4TEwzVU56Sno5cWdLc25HUEtCMU92Nncwam1CZmVxci0tOXVxaGJ0UkVIZkhwS1dWYkpGcTctaXFhLTFuVFc5R2tyUkVJUnNhV0xtWkIyUzY2OVE1dXhuYlBIRzhsTmEtM19fVmtDbGNLVXhqMS1SZkhvcUQyRWZfZGE3eWZIcWlvSENDZF9scVhhMVNJUEdNTDBBRzdkb1VsLUY2WWJJNk52MnlRQVNsLUtsSVpwNjk1WGo1S0p0RmJyM1J6QTR3STdJV0tQMzJjYkN2Z0JvRG9kaTRRbG1wUXM1aTk1RWluZFEyZG5rV0x1VVFjX0VELVFCYXJ3Z29scldVQ2J1YUlJb00zQ2VjU3ZKMmtJU1lkSVpsMEVMQWw2VWtMZnA0eU5jVnBiSWJ6YkxtQ3F0eVFGR2VxcElPS0pHWFVYNS1HQzJKOVNhV0ZwM1hlLTFrNDFhem9nSDhfQXFyQlNkdC1HWThLbFo2LUVybVZfQV82amoxS0UwTHg4Y3FGRENPSWVwZlJNcEVRSlo2MnRRd0c5WWtWeWlyMnZhNlN2MHZ5UTVOb2pQRzVyN09RdFM2SkVoalh1OVZETHZWcGxER19uOU1tekxJclFsQW5WYnpvdFhWWUJhQUJWZV9za1NnMFZVUUl1OEotQnRfYU8xcExscUE3UzFyNUNGVUo3bkI5cGpiQW85MlU1dTZvZGFoODBub05wRkJwNVpYMnhZZGVSNVJIMmUtQzYwVG1PWHRSQzlwdXVfaGlKM2RiWHhkUUJFMFhhc0RrSUttOS05Z0g0Z1AyQjMwRExwMkRWNF8ySFdXTk10eGUxLURFVW9yUnRpa0tkV3BrMWw0T2NNRG9wbkFqekZkckNrbm1GWVh0MFhBUVpKVF9KQ0tJYjA4cmp6QnVMQ1hIMXFLc3M0TThaTDNXb0l0STFQUnA2Y0xoUlZFYmhKYWotYVRlSndyYVNnTGx2eGNWYlpyOVBXTVpvcXRuWkpQZDRIblFRTjVRLXBvSmlCQzBuYkhTelZmQzNTc21kLVVPQnVXVm0zaU5IWC1yWHRKRHRQS1h3aU1IRFlhZ0dFdDQ3YVRpMlk4YlJmYXdEcVRwendsTVVwbV9UczJNSzhEOTFudnhjTFo4TW9Wa2piWmtVN2NKR19QdnlTeG93Wk9oakV6SjhqMU1uOFk0NFVsa3hCb3VNakFCUlF2Rk5IbGZEZTNmOV9JRXZLMnBfcmRqaDdzZzhuekctQnBFLWZ0XzRQOE1YQXlhRDNwTEc1YWxkNm5ibkNnaDIwQUNKLUlldnllWlVhZkZoLU5DM3lJSERpMGdVVlhuQ3ptU1FHS2J4QTNRaUpoSXF4N2Y0aXR4YzVLSjFFRmEyd0VPNjV1aEJOQi1xeGJKdGlEQlVfX0VheUotNWE1dGRVYlU0N2doNXAteGV6OHVWcE5TVTlQOTdEZF91LWRPNm1yTC1jRko4ckJlQXA2Uk9mU1g4OTNOU01PX0lDdjFaRFhsenBtRHJadEhaZTlwdFhfelI2a0lRa2JCTjZJT1RGS2RMZllaaHNId20zNmJRQmJ2eUptS0hXMU5IUzFaZUg0MnIwb0pOaHpPOW9HcWgtTG4zbW9tMS1KNS1kMy05dVREaTNLLVF3QnRRT1dKcEdCSi1hV3Fpd1RLLUV2bXpoeFJUUmdJN0hrc2VBdHlEVUFiTkVPSXR6Nm1PWVpWNmJiN095MnpQVjU1Q1M5ZWwyN1hQXzBvS0VYNmY4aTJBZ1R0NGk1WVIwTGtVUnZHYUVIeE85emRSUVNNRzB3TnVDUko3VU9SdDI3NTh4Z21hZnZsdUZkN1BYQ28yUWU1dUI5dkp1X3dRS0ZZd1FsV2htaWRWbnpPWjdSS2s5dVllckViN3JYOUV1UDh0Y0JzM3NPdmsyYldhZmVSNjFSN3BzR3VNU3g4XzNWNl9fQ242ZWswREcySEphMGdnUndza2x1Z0lPdXcycWd3UzJNNHM2ekdzZmpGRkgtVWpQdlFHTVlpaEt5QXU5OXVBdDlIWlMwUnlwQ2xtQV9oeU9VQU1oSlgtNjhXZzdjVWtrS3E5T3NrZHREVml2QnBVaFNLbTJRTmdVVkVwZHhSQjltYnBIc0FrQ2FrRXJCa3hwWlI3OWhJMnJaelZGbDdCbU04YThSVG1jNzIzZTY3Y3MtblJ4SkkzSkZ5NXlEcDJuR0RWY0ZPcFlXR09MMThIMTVxb2x3VkxuNFpmZE5qOVhBb2U5Tmt3ZGk0ekR6QVZnMTVuaU5tX25lLUNuZzV4S2drQnljLWcwQ2NXTERFdmU2VzhWN1JvZ3lKV1d6T3BUeG9Cd2E3Y2w3dldVZ3dDM0ZJbmNUcE81WWM2ZGZ6TXdCMGY3TGZjcllpeXR0N0J3MDI2QTVJWlNpRzhDZGRka2x4NkxvaldKSXRJOGRXZGNzTDBpYnNFOUdYdVZGaW9sWU8tSEU5dzZHLXJVcjFxbUliNWREVE9iUTBJTWZQV1EwajRRYXo0bTQyTm90YzAtMDI2Y0ZFTnY3a3VKaUVhMjhURHRkTlpSUjljNlhxN1lHcWZHaHBqaUVFQzNPQVVHRHJZMHJvMmNtY3BRcjlFRWtCZ1UzUDB3akU3dFhpZFdCNnVaSmUtVjA3Q0syR2tBVlZqc1cwcTZiX0JlUHJWNzZIVl9XMFZuSkVETlJzaGZyUkxnZmhyZFBzbDB2WHlCR19EQ25kMGhOcWlwS1VZZkRtOXV1eFdoVmlwelYySDh6RzNkOGxaNVVBa2lGajl3MkluU2lyVnNHVU5SWnZockVRZ0JJaHdUUDU2cjZTYzQ1U2RtLTBnQ1A1RHNzMllBVzdNYnZOdldoNUVQU3FpWVRNbkRyTXpNQzVqLXIxYnlQTGhGY3NTc1lKUzBoc2x3RGh4dmpIYjc1ODlQQkN1SHZ1TkZ4eEFvWmFQOTA3WVprX0hWVXY4QlZ3ckxfeVUxanQ1U01HVlpKZ0wySlV3ejR4SFlaMUlVZGZjYTRtUGNtUlRhb3BCMXVPcThUclVveTBQa001MFhOZW9zN0tnQmpzb3Z4RjNlYXZoZ1lqVW8wMnZVX3dESDY5TTIxeXU0RGdIQUx2NE94UWJKc2RrTHk5RHB1QmZYWXJjejlBaWwxYUJUY3VtemlJb1hkVEFLd2ZzNF9rb29ISE9acldWTl9BNVJLTkdwOVhVYmh4U0VLMWdjRXVLMGpDYXlUT3VBa2VPWDJqNzBFNXdBMGJIUXVaODE5aFNOT3M1M2F4RUh4NGppeGhkbmlrZ0lfbFU5STBUN1hGSzdFRThPR3VTdE9NUjV1RjBBZ2NhM0stQ3JfcHZ0c2dwSmd2alM5LUVWM1llMldEMUl4MXpuS3hkdEZSU1hwbDFLaV9mX0VSQTZkZjJIMlNQZVBGSnV0bHBmcHh6ZkhORzVtQmd2MFZub1p3Q3VtQVoybXdTSzNtdFB0VTd0UjVuN2doZGJVSDE4dnpJc09mTDRZLVBlU2N5YWFGdVZobUdVUjh2UExBby1zVmxsa1BaTl84ajhoQ0txMXgzdnMweFBFeDlRN3o2SVlKMFlna1IzZktKQXp3ekJFaWlLcTdQWnc5UTVJVnZ1MW5UMHA0TGg2ODFtbkgxYnUwMnlJTnotTHQ3SVFQYXlUcGFEM3NoVjI0U0RtaEJqV1N2R1Y2aHhiQVJLTm1BeTl6Y2pwd2RhcWVPczhHWXFHWGRqSDJhb21wSUtTTklKdkpHdlJhZzlzblNpb0VUQURXeHBsRS10LV9EMUtVUDZKdHlpTmp1VVFsS2VXeTRXVnROb0xZRkUzQW1UMWNHRFBoSVNLU0FTbnVuSDk5UWZGOVp2RnVhQ041Z29iUlB0ZG44S092TUdkZnlhRVV0YlJDd2dadmo0WDZuRjVXWWNISS5FY1lybGFEcnBEYTlHdUdSWFJ6NkZR"}'
    +    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLk85WGliZUVDbjRwWUVUdmdzNzBkV2c4QS1VSXR5VnM4WWdaUkM5WVlQYl9PcklGY19pVV9fd3hvODVLcUFXX0s1XzJKZndkTmJCdjhPYTh4NldJU2tsZWFpUVZsV2NpOGR1M3YtTWY1c0VMV2pFSmJpeFhDZjJMN2FKU2h1cEVMbDRTSlZHSTdsNVVGdFdwLU1lWC1nVkItS3QxVjFMTC1rSTZycHM2RGg0aWU0SjhXZGdNVThQekFCdWFyRmpVdG1tbjJHaXNuTlcyNXdRWmpDOGQ1QkxVaEtvOVlvMEU1SkM3aVJBZzVBRU83V0xGWkJGYkhmSDZpT0diQkFDakRLMTFPbzFvQ3dmZlUtQjBtS0lMUFZkb3F4XzZ5MVFWa2F4Q3J5dUE5Tko0b3dCSVFLSGxTMjU4NHJERjRsT0otWmpyVHBJZFMzb0dRazg5bXBwOXhXQS5EN2JpbmZLTm96dDBmMlQ3eHczdXJBLlAtdVNFaEhmbXNtMWFOTDg1Z1hLUHhDcVZoUDlZV05SbnloQ3cwWElzRlhUd09YZFNaQUlzNmNiOWFDd3NEZnVhTDZhWGZ0OS05VU9jNThrNERLX2Rpa1JrbVJvbmViMTN4Q1BXOHJKdzZXcHlxenRfNDZKQXk2VWw0aHpvTzRtS0hORGt6TFJBY09iVmdoZi01V1hGWFdHaGtuOWRkcWpGaFRGYWEzSEo3ek5WbXdSOEdCQmlsR0FvdzJCMkFaVW9Jd2hHdmV6Z3dOdldkNWc2bVBfZmFYQkQ0djdHOWVIWnhYR2JSaXMwaTdvUGkzY3Z4SHdRYzV3ZVFFZGlnUEhQTzZxSlUzeFVFNVlneDVaODdWOVUwelFkRjRvaGVBMU43N2NYTGNSVDBTZlVUTkllenh4Zmd6QmtwbTZjWWpyUmR5MkpKNUJWXzBtdWZQY3ZKdFlhTGlOMTNoTWdCUXFpZUZfenpDY3kyQ1p4czM0Y0g4NklvVWxWS2VHbGw5YWJ5Qml4Ni1hTy1GRUt5UU9vdTB3SkxZbG5FMHp1bXBHYmQzdWR1dTRTT3BxNV80UF9rbVNwLVkwX1NkWmJPWGRySlh0aS1XOC12UUk4OGZPd2U2T3psMTF5Nm9IeXBkTTFRZXVLUW0xSjRmQnpHeVlVNHdOQ1JiS09kTWVmcmZyMFFKQm9sdXM2b3FnVGp2TEEwTjZjVEpaYkQ3VmN2SWpyc2U0ZGMzUXdFQmxaZzVLNDl5LTYxX3hGSmNZX2xUUGJ2UDdua0VybGQ5VHRhUjByYkJESnFEUGg1cWR3N3FrbXU1dFBlWHo0VmpKM0ZOMm1RaFNOcS1RZUF1SUk1LVRpNDFqc1N6alZsTFMtZ19mTURUblFRa3NzeUhsZDFjTlhVNHNpLWR0MVlGLWQzZXNDNkxjeEYxX0dQeXdSOG1heHRNYlFfWXYzdVNOZktKWTRoNk9XdUpjdXJNbl9XRUE3YkduRWwxY0wxYmZDSTZ2OUVLbmFWbmpfZ3R5UndMVG10WVM5RlJuRVJQQU9FeFVBTkJhZTFzZkF2NzZnNExiaU5xaXBQYTdMMlJ1bXAtTGN0MldGSmcycWt3MVh3TXUxeE5CQm5ubmZOdWpEOU1QelJibGNxdGRjYURhRGxaT09oX1pkOXhpRzFlXzNrbzd4VnlBcDItOGVmdzVKTUlkcGlSRXpIS1lfd19ieWM2QlR1eDBoNmxvTXUtdUwyREtPRFRYYXFRNlJTejd5Um5Td0hwVWNmRHppaFhXc0Y4OF9Fb0VNelJuaFM5OHZ5ekxMZ3pSNXZ0N1dUcjBNYjlkT1NxTVR2cy1aRk1BUVhtX0hGelZEUExDT3hpR0Nadi1jV185RS13UkNmYjI4OE5idG1McWw3MkhnTHFlbU1XVGc5M2l5Tkt2UzRaQWxuanFEY1pXUTE2bmFpNlExRGlGTEo3djFlRVprX05qSDl5WEcwZDNTUWVJN0c5LUFtdVBtdjQ4QTlvdUQ3dTR0bUM3WWluTmxmWEJRNDdWY0RuV2FXRVRkZHlINDRnS0cxU1BMTk1DWTd0VFc5dTd6SVhuLU94NHB5OXdVSjRJMW5BTlpVcGp2eEUzVUh5QUpBbWpDeGI2TXY3c3FvQjNZM1NwMEp4QVc2Z1V3a3lNS3pHbmYyOEJJRFpEOHlNbTlzM0loeEhmODBYalRqcGdMOE9lMWpQWHNlQmtMYlVOOFVtcDRhaEdPeHNTQVY1RnBLVkRmNFN6VnZGQTEtdzFHYVRsbTE1ZXZ5Sm9DQzJpQnFscUlFRHNSSFF2amFuc1pVUFQ1dXZkZTk3ZTZ6bXJFclVRR3M1bk9FRnhxRkVZSjdUZERVYUc5RU5kUjc0TTJfaUhwdk9rNjZWNjdTOWlLZmJoY3N3SDVqVWFFc3B6S2dnV2lhblVCRDJmVEpPcTd1RktLdDdlTTB4YjBfY2tLN0tEb1dfM08tSENsUm02NTFEeVVKcHBsaE81TmlyS0pzZjFUV0gzWUlhdVI1R2NlTlBPSV9oX2s5Vm53akFJTTdaY0R3YnFlV1RrVi1LakhCVnFvMVROSlRqR014RnNmaDNRTHVteDNpY29abjJMUHc1U0thYk8zQ3JoOTZ5TURZRnNkLWJteWstTmcwM3E1dlUzLVc3U1RISjZSRzc3LXdaenNIa1F5UFNVX1l2Zm4wc3Q4WjhBZHRId0x4a2xWS0htd1ByQUllY2k5cml4Smt6X3dyNUNjNDFobVEtVktDdXZKbnduQ0UxUnJheEtUblRPRlRSUXBvaUVCX1AweV9TV19RNUpfSlBCeFE1cXVvbWxEV3ZBdmFjT1EyVFJWT1VkMVdjblZVSHBBdDA2cTd1dThpUG16a3htNU4yQzRDMzdwT3R3TjhnUi1UZ04xNWNVektUSE9Db01FT1F3blI0WnNMbU5FWEswWTJrNzRTVWQ3Y2tpQXZRMGtSZ05WVE8xZEpXdkdaWGRMWElQRWdueXptR3huS3A0LUdBUzlEazhfS0tjeEFnUk1MeXQwM3NQQ2tndi15NElBWlpjb1ZqVDYtbnFPZUx2YzFIdzRKWTJsT1Nic2dteTJOdlMyeVFHaC1Pb0FBaHlvNjhERER0d21leF9NS05ObS02NU1GQnRFMGVGcFdSeXI3R1NyaHpQX1ZPZWhvb043U2lXbmk5dTR4Q0MwVDFyZTU4bHQyNTJjNzJqRGtLUGxMWnl6Z1FRa1ppNzBYclpxTHJZMXFsLXp2TlYxbFlWMEs0OVhEVmlHYVJpRTJsTXo2My0xVGROYWY1VkdFRlBSeWNKN0JuUXVzS1BHS2Y2THRGMXA4dEtELWF4b0J6VkVHN0N2WXdtMmJBVm90ZnNva1VGaUlydVFnNHZtVmdXTzhrMFhOT3FyV3MwU3cwc3RXZDNNajA5ZDBnVVdCMHhaYmZNalQ4blFSVUNLMEFjRFZRSmFJSHV4aWJYU3h4bzlJOGNuWnlYZlBjTVg2ZTJuNVJXNEJmVFh1QkcwcGJ2ancyU1Fnc1owNno0YVQzc0xMbVNxTjhTalBEaGhEanp3cWFGNXZyM0ZFZVR3UllpMXBWcENyQ0RVVlNrbTY4ZWVDQ2xkdVlHVVR5ejh5azk3U2d0cDBDRXZSQlI3SVVRS3VQd3hXVDR3RmNPYjc2LUNEZjd6SXRxbGpWd3F6RFN0QVJUWXJ1R0FNTXBfQ2N6X3d3bmRsQkE2ai01cE1UWDhkOUlXNmVwR3VGMHFwZ3VXSHV3a0Nxd3pjS2tfWmFhaFZwaTQxOWEwRXBsRVlMNEpWWktuVC15VHVfOUJMaWowU0JKRWZSMm8ycE1uVXRZTDBLUjB2NEQxdFBoRmdqcUlheTVRV2JlN1gtWVRjM1JsdVgyYXNvTGVvSHZYVlFDTUhSOExicWRXTkVtZTJmdnBzeUhZcldLdGVnQ2N6S0VmcXJOMlRiZldRU01LN1F1SEItRjJLSnc1YWE0TUZEOV82OThuQTU1eE5wQlE5aDdnbThxa0xTYmlDNFZ3dFJDMGFRT3hOY1J4REthWDJDV1A0dWZaQmItZlFNQ0RqNW5sUUFzZWlZRVFqRW43RnFWQTZQOEpBUjhwZU5UU2twUHpNOTBnZ3dlaXg3d2hKQU9LaExMVlFpd2hrUHdGUkVCdmNFc1prbDVKNnliWUxmNWVxV2N3OTFXR0w3c2NUMWpVQjNyRXp0azdjc2F2MVB3SlNYQjVGNFpiU1ZCeFhQanFMUDZ1T21IMF80cTRfMTNTWk9uYW9sd0VwNUI3c3czRkticF9iZ1UxSDdmcTRfYmNDVm5QckgxZnpOWkphUWNuLU01akRKYThvNTE2UVZFUVQ3TEtPa3hubmxQcmZyVjgzZWY3RWN0MlBkRDRnX2xCNlBfVS1rQVVUejA5T3IwU1l1c01BZy1LM3dPRkRQQVRTaWRmVTVwTkE1ck8wQ2FTdFRxcHo2SUN0RHl1OEVSZEtjQk5hVm5CQ3k2bFVzTTJpaWRseG9uSkRvRXNQTVg0WU8xdkpHR0RQa3FzTEQtT0wtbndBd2xCc1F0WWtXZS1UU0piQUF1dlhGM0tPY1RHWVl3VzhjbW5MZm9lODlUUUhLaFd4VExYekRKQzZSVXZYajBaaUgzdU1feUNwS3RnUkxYSXhXSnhzQ1F0M1NMQ1YtaE1UMjZsU2dkLU5JN0pTSkR5MHJwRDV5QzBqWENIdVlXRGF6TDRXdmVkY09xWl9IUmxIZFkwNGFPaWJ1MnZPLWhJcW1fTG52LUFhQnloZW1RTHRhSW1IN0t2OE5zUzBSOUM0LWlabUp6NThDYzI4RWlPNUZEZ3FlMG9VSHU4Y25pd0ktX3hxb1pQdEllQndaRDBXQTJiN014UUxmRGJHUWg1UDVnTzZDdWo2VnhmYlA2WTlOQkpKNlV2MVlYeEQtNmtsM3VmX1NNbXZqQ09LREJUTzBfRDRpdU53WGxTZllpY1prbFFOT2ZmTkE1aU4yTUpaSURFUXRqQmZNSnJxeGYtVmRBM0ZqZnFvQTRIVGJKWnF2SGNvdGpkQnNqV0o5ZFhjdlJYZFpOUWF4RnF6UlRJWWtNRXRVMXZFVUt6SkVzdUx1OV85eHN6VmtwNWVKSHJlQzJLdzhXYjZWUUwyZ1E3X0hMQ0tXNnlOV2VkLVJWYVlsQ3ZXamNWLTFNRVpuVVNhOUJvaGZFeTg1SzNlbHhBZ21sbVczU3ktQkRsTXlnSkZmUDlFNjNHWUpvVkdMeFpmT3RjU2lSb29LWG56VHB0TG9YWmZDMUtzS0ZKdnhUVzJVMGZYajdQdUR5Wm9rMkZMSlFyaGFaczNmLTdrSDFreXFET1BCX0VwYXFOREZzVUdsUk5NVFJuVHFrN3JuXy1YNVZRenNGTnoyTkpzZnlHMEMzVHEtQ1U1cTh2S0ZuNWtldE9lcUh5MXBvVG1wWnduUFlSOWRlSUdmV3BSb3VSam4weUYzbExmUmphd1N0V0FrV1BQMnd3VVV2R0cxenN5QXJDY2JWcWg0WFhyUlAxaG1EWXFWd0N5Qllyd05WUDF4QmJ3ZFhHWjdVRXFuVG15Q1JvMGdlYnJiWkRXZzB6YU5hY2wyZy1JQUlPOVB5djNSZnVwWEpHQjRuZFRnU0lKaTBQdFhDN1BSbUg2TUJyNWNzVG9TRzNBNjlOVjZJRFNFS0c1OTJsYnlWMGJRbHlwc0hlXzkyYVdjeXdxM2IxNU9zT2RjZ1lIMHBQRFJJeVh2R3lVdlBSbUVtTzFNOXg2NEdkN3hVSjFOalR2TFdVRDMxOVJUN3doRmJmQkhVZXZwbk1MMk5FSWxacXlEaUhIWFB3N0l5SXIwTDYwTG9acDMycTdzamhveThxN085cUxfWVhhY0FDWWJ2bEZBSFZ0UlZVRjBvTzFUamVCSEJsaE0xSmlSNzFpc2drM2Y0ZFo0SzZPR2RSMEJjZGpiTFBqODdDNXhIanh1WWM4Y09fNHNVM0p0SUhpcXJyZzJqM3N5OFZOR2N6bnRack1laDQ3TEI1cm9uRGtZVFExNFlIUmsxNm1aVWlOWTUyUFVYV0JFdU95QnZQaFQ5S3R0QXh6OFhoYkd0MUxHOE9Sd0xPTENqazMwSDU4dEhHWVcxeXFITGgzcUFoUFpfSkt3eGgtNkY2MHBxTmM2U1dzaDNzZWduVHdSVjVNTGhIcVVCY1h6VVFFYndSdEo3OEVEaHRwVENEblJFbmhYV1B3T3hCejlZVXBKbE91Zi03N0xUdkw3RmNXVkpyNlJCR2J2WjNwUlp6MG03Vk5Iay1mSUlaaE9ROFQwV0lhOVktSlhlM1BMWWNUakFYc2dyb3dJYzRtNFpENDdTR2FqdUFCaERnM1IzeUp2YzZOd285MFhCUGg5RGZJNi1aQXVHdjM0NjZYM1dWWUh6aTM1R01NQ0NxX0lRWnRUZGJxRjlCUVhIMjIwVWlyb0lfSDdvS1ZGV1dKQTFnRm10UVI2Y1ZuaWo4QU5HVmN0Z0R6NTBWamgxV2V1bXpXa2RZWHdPTDlEMlhhQnd6YmsybE5qcmw5dlE1OU1BNmlUN2ZUeDZsQVR0MU5WUnNuZ0tfcEZJUG0zSXpSanR0LWIxM1ZXbXdMcWVRR1JZSTd6emZZaDhVOHN3OEhvVk9YaWNaRVdpT0RvcWdVdHZqU2hLZW1GeFBENU5DMlJRQ2N0UEw0aXowSDVEenVNcUF2LUNDbi1Cai1LZzByeE4zbGhNUk5BNUEyTUI0VEJQOU5hMnl3dF80YmM2RkFpNXJOVFQ1TlBUZnNmNnRqdFZHcTA0bk9WMGdsMWdvZkh2Ri1EU0xLZWtidUhFeXZTLUtlZG13Y0R6MDlTUEgxYW9RWk1jRlRCTElLWXV4dE96Zzl3d212TGpQeTRCY2hFWWl2TnhrSzdvOEtFOHE1NDRkOWh1VzBxaVpCUkVFdEkwTmhsUmtSWWh6WHZTRHpYcXZ2allLeDhZWlB3WmJ1SFVJUURlNTBqYXByeHFwbGJLYk4xWlZUWmR2U0ZZM1FjY0tMa3N3eFNiQlJQcndLRU1VVUw4aFRSQXBJWTlOMUxNcUp4ZWVfSmVKM3IxdUhGZGVCaW9nY2FKQU5neUo2NUU1RzJVOFdMVjIwRGxYU0s5aUhYSGljTzFQN1NlMnVZbUl2YlNCNkxtLXJNTDlRSWpoYXpnNUY0aTVFell2N1U1T0NkWGszTkhpd0hlWEM4dzEwU2hCQ0JhUXdVMTJ3a1VtbUticHRIQ0NuV2EyQ0ZrSDQ1bjg2ZmdFR2J4b2YzY1BQZXJWMXp3TnplTGNmU0FXWnpyWC16TjY3R2d2YXQ5c3llN25VWEZ4VjktX3c5WkZYTUhfdWVuMWNhcWt2M1FyMEtYc3k1VjZyRjVZU09XQkhtenRIZ0llMkwxSGVzZlUzZ1JncmFlZHpnM3BTOWFrVDdWWndPVnN0ZXozQUF6NW56Nkp4S1hhNzlqTTBGV2FfZHpXSnNod19XSmJaTV91RXQtVkNhMkx0MGlMM25SOGo5OFAwamdkaEtYMlNaay0yRmpCeEgtcHl4RU02ZVRGX29nOW1iYldOd3MtQ19QOG1BLW8tNWI5SDFRZWlycTZ1WWNqYlNwdnBnZDBZMjFydE5rWW1JQmd0OG1XYzNBTHpuM1ZCRGtTaGp5bmUxYkhFMmF0VUJTWE9rTWc3NXZtdXBIbHVKaUdnVnFpalEyREZTZENBT0ZOUG5yd2trcnh6R2FZX1YtYTQwUkxNQ1ZZTmpPRXN0YjFzeHY5dURZdkZOUGpWa0FpNFlWdks4WVdRcHRWZXE1R2swdG5DUnE1eFhPTnJXR2RnRlJWYk9EYXJhWElXc1hZX1lLZ05ZN2c2eUYzRkhrWm1lUFB4a3hvU1NpN0t1MTB1WnAwQ3JocE93eHhua1VTTlIweFp5VXc0bmZ3OGlaLU15VXFhMVEwNVZ3U2hXRGNBWmRWOVREU2pDVFp1dHB0Uk52YWtyT0dPVEZ2Uml5cWRwakozdG1QZW9jelZkQUxfS3Q3TkpueGhxUEV5WWtwQ3BQakdHQ0pONThIdmxiX3phWHIxVWdCMHpXVldpVWpmdFVUcUpFOThyYjJwZWt2VmUydXJOZWUyT3ViZU0zdUh6aVI4RnhfWlpmUlFoYXNSQmRxSzZMSzdVdlpodmFzZEJ1aXR5SFMtZVFyN2xIOE1CZUFnZnVsX0wtV3REWmxJR1RycUZuTkxpMVk2Q1N5VU9jcFY4Um95Mk5vYTIzZGxMMjA2YWFWY0laVEtYdEt3Sk12Q1NzdE5FVjlsWTVUN3hRaFByd1RfS2dyU2w1aUpQOUNzSEk3ZDlqb2lJT3A0TmFzRElfN29ZTzduazByWnh4SGloRG4tTmdlRDdwNjROajEtN2oxdmJrNjE2V1RQb3dnaENKM2VkZWVNRGVpclhJNWxudE5hZk53MWw3YzlpclEyeTFaQXJpd0pLdVFVSXpwMl9ReVNQRThQTGo5Z0pGWkEwbHNJemRta0VFQlpOS2g5dzk0dkN3a1g3SEVsakM2MDdRWEtKWnBBWF9sWldYN0RYbG5DZGktek9TNDdxdW1HYWNNRGZvOFg4cEw1WXlIem54QnYyOFlXUGxWN1o1cER3c0JXZkI5cDZ4SXBZTGlGVTc1c2psYlU5RWtPanIya3RSak9KUEI5cGtWa0NpRXh1cGEwN2JFTVl1ZjU5XzZGcmNjU0xrVFBYbTZKT3ZpS19GQk1vMjJGMzg4RzVReHZnN3BScVpmQVRCOFV0eEdWdWx2OGZzeDdQQmhNX0NuVEN6V1B6emY1Qzl2MlA0YTQ3dE8tbVpRTFpBcDA4WEJrZ2J4dG9JeWotUy1JOXR5ck42WmJ4OHVfdUxoTWZZVkZfQ1RTMjNtTHl5ME1ndTJOR3RGQnU3cHRJMEdtczR3dzh3cDF5S1ZScHQwNmVoeEI1OG5QcDdWRWhMeXVNNWNZaGplb1RnU3BMYjd1bGxCYVdjMDU5QWduMVFXY2ZzYXJJY1J4Mmt6UmlSRnN3enQwUFBfbFpaS0dJLUt4aXFnbUVWak9jM3pIaV9CemcySXdrSjdDZ19QRnNpYTdlVXZ2SW9DeEcteW1yRlZrMF9NOC1ka2RvU05yZ3RIOFdOel9SbURYdWctLTRUN0ZuaVNZT2hUeEU5NkNjX2xOSV9VN3VzR2RvbV9QOGpVTGdLUHY1V3RYZzRpeTN6YVpXd3NYcTM3RkpYS2NYcWU5SEFlNjVoS3haWnIteV9JTWZUc2xtakRrNnQxQ3E1Q2F1S1I1akdRS2M2QnZfQzRqc3JUOThfb1pXTS14TlNsVEFGckhFc29OUThHdHBoZFdjby16NUFZeDl1bmVYdW1DblNpMXk4UHN6Mm4wa2IwbE1hMEtWRHJiam9yVEpjR25sX1pzU0dOM0RGT01BUUxRR01HZEdBbFo4NzIzbDg4a0J5aEhUMzlfNFJ2SVlWQjB4NElzQ3JyWkRodE5iOHpLbWdSbWZnbUhoMEhMUmJ6dHBiNDZib1NwMmNhVzhPLVlrNjFIUXV3VDhxWHVfcHRwOEhiWnlta2JmdlV3VnN5OGxxVzN6LXFwZVhqUHFfdW1xYlpiczRhdUdXbnpXN0ZOVUdBSEE2RDBYcUVwdmd2UnZEQ19sOVdjeE9vOVNuV1pOXzZ1WXRMZzNLeXlObElMNGhGX0dHM1BZUUtJM2xOakgxeVNDbmpicU45TnJZVGJjTHVpeDBtQlphMllXQ3NZd2hrSG1hQWRLeGV2a2VCYlNra0ZBSWRCams0T1RpLXNhRDNFUUNYaENUWk12c3k2ZXZDTDBvWnNpaXZLMGJvVWNtdll0NnVnekFGNWpRVXhNWHNRWUZBaFV5RElJeTk5SVVRaDgtTzI0RDRBTU1xZFVYNTFDem1kVHE4OTJicTQ3NlBWUXpJTFM4cnR4UEQ2UFZFektrU3FfQ25RN1dHTkFQQzN0WDdtX3l0Y18ydHVjX3RHblVWTlRKSS1keHMyb2tCVk1Md3kxUFY2eUc3YlVmbnIyNzJHUGs2ME55TzVicS1CRE8ySkVpOC1pV21YbHBYeTA0dms2d0hGb1g3ZEJPbFRqREVFSl80b2JhcksyalhuMmxURGhHSG5fSE5DYXc1U0xfZXhSYlZGeWZSOGFkb05qMDItMkJzTHJraUl0bDNtbDU2STFiSDcwT1dpb0JnVGxNdF9mTFo1cjRDR0FDckZLOVlVOHRtTTRNQW5CYURicTFlUE55ak5xbnZvNS1VTU1pdGVydGVGY0hRLThPMUxEVExETnA3SmdVTVJfN1hubTJLWkFEOUVqem0wWGxWMjB1T0dlQlE3VXVxbmRxMGFiemZYSlBOZUlsenVTUm1IMEw4anRyaDFWdmkwdVBfelZmQWxlWnpac2FJdTI3R0JTekxDUjdPdjJjWFY3X0JPbGlMQmpvemd5V2RuMC5wcnlhcm9ObGNKeDltUW0tNHZDSXpB"}'
         headers:
           Accept:
           - application/json
    @@ -221,12 +221,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/restore?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/restore?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keyrec/734f2f21dc9e45b6a7afa9cfa78c4b0d","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"mYqMSkqj9_oX2xpTTeqWcKOks5SV1-EgU6iJ7kw_hl1iu8MziIZaYT8RNadZ2omRL_UCsPooJCVcI-FjlDSxkHHnsqsGcP-0igFkY1C-y1OojuAz_81wVa2T6-tvydWTmY3f2-L_zNaVrM4RMuR4flSMv57iKzSpsLBoM8KD3ANNAHgTWZfDUH_ACX2XJ5PZgbQuu2SCxf7YsMnkpiaLRfKIFPzgxoTqWRJOmqkw0SAjfxL9w5McBeHfcdiCibtGM8UzDXCa1g73Hpil_OhzUXwwbc-EEYUeIskuRcauCyHHrTZGrHGnSebIOxTwdIc5kN7TgYyuIoixD-IIYcd6LQ","e":"AQAB"},"attributes":{"enabled":true,"created":1575676807,"updated":1575676807,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/keyrec/201c012c957a40b89b5ffd5bee6fd667","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4d_JbCG2F9aIRdpzAX6aUxv6bt21g7jVMKNZb7cgWwSwahEVTsa2TjwOIZJ4FSPRFJq1aED0nCGSYxURycNIYh_9nNAlhDVn4rSgJOhGRi1Ze5WjAha3OJVOiPTW-Lky1vYKvKu83KFSvSRgOUVDbX_AdVPcRQUzf48yI-W5LfkUGN54KVQJfrp43WZmYCrqWqg227ma9UAvpz-U60w-ctkroIXERSvJ0Iu0SJ8-LhJ3tue4-sgkIIa6DT5X6o9YFXcUywzQVcvLMv8nt3GstUa3F6g7J--wD2UU2Zqa9sN--4OIzpeqBEg356052vV-mVuaEarGsp9iWf54yikX1w","e":"AQAB"},"attributes":{"enabled":true,"created":1583450231,"updated":1583450231,"recoveryLevel":"Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -235,7 +235,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Sat, 07 Dec 2019 00:00:06 GMT
    +      - Thu, 05 Mar 2020 23:17:11 GMT
           expires:
           - '-1'
           pragma:
    @@ -249,11 +249,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_keys_recover.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_keys_recover.yaml
    index f67c93c3921c..f59d68c041ff 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_keys_recover.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys.test_example_keys_recover.yaml
    @@ -13,9 +13,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -28,7 +28,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:20 GMT
    +      - Thu, 05 Mar 2020 23:17:15 GMT
           expires:
           - '-1'
           pragma:
    @@ -45,11 +45,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -69,12 +69,12 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/a6edf016a0b24ac8b693759b218ce38e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"oDFwmigjMHFmsN_lqueKdZMLtGLzT65ca2LzTICt0cSb_eADU8TYNWgRcPAgpZPAuvypTX2-v_A9Kf-6piW2cQ43ng4cnXSvNtTMITqGbYijOZsBsVDEuFH1v_hBr1bW1WHrNOwR_W2MJR1N8Fl-MQfMvmWIKoiCkXwv_vTmahHVUL_3iUqHZ_Ck5RXpn7Z_iKqm2-0l9qq64A9xVEBEGzQ79KybnzfrbyexpzbWL5GCndi0glamK2KhlNWEHtM-s7uAH8uldVqFn10CguVmYNetNqvqf9oFwC6LBFFR7XhKpl3k6YgPxMCGcW7VeKbVVdvPNtkwIIaOEnZcVs1fuw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/c05fb0a22c8640d3a3f48f965efd4b39","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xSmJicucZdB00etJDfQI85C1ZwObhycX1tjvHhKXkXKO0sRZnXm66qjTomjxfcyDYJkXiJoF4jxt3Tj8otMwMbVrfPAA1i_l6a00iUHHsOScWiRroGdna9PBNxndRsJzIbMG59eY_p2j0ib5nKsJ3L37LAXVO7urSWWie0yHC2GWMky1-rSPkGW3-3tF5tUTWgVW7svSpTP9xz8nAU5mAfgmkxyiVPLNjuSI5tnb1eTJo4jlUMYql22SrMA1RMy5F4L2fonZGls5ma-Sgn8Mt5BLNfqifr76Qr0K3GaAysN2KO0CswNJc_O3ymT01pzxSnRSWtDQp7r8gZVFEZ6JLw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -83,7 +83,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:21 GMT
    +      - Thu, 05 Mar 2020 23:17:16 GMT
           expires:
           - '-1'
           pragma:
    @@ -97,11 +97,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -119,12 +119,12 @@ interactions:
           Content-Length:
           - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1575676642,"scheduledPurgeDate":1583452642,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/a6edf016a0b24ac8b693759b218ce38e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"oDFwmigjMHFmsN_lqueKdZMLtGLzT65ca2LzTICt0cSb_eADU8TYNWgRcPAgpZPAuvypTX2-v_A9Kf-6piW2cQ43ng4cnXSvNtTMITqGbYijOZsBsVDEuFH1v_hBr1bW1WHrNOwR_W2MJR1N8Fl-MQfMvmWIKoiCkXwv_vTmahHVUL_3iUqHZ_Ck5RXpn7Z_iKqm2-0l9qq64A9xVEBEGzQ79KybnzfrbyexpzbWL5GCndi0glamK2KhlNWEHtM-s7uAH8uldVqFn10CguVmYNetNqvqf9oFwC6LBFFR7XhKpl3k6YgPxMCGcW7VeKbVVdvPNtkwIIaOEnZcVs1fuw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1583450236,"scheduledPurgeDate":1591226236,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/c05fb0a22c8640d3a3f48f965efd4b39","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xSmJicucZdB00etJDfQI85C1ZwObhycX1tjvHhKXkXKO0sRZnXm66qjTomjxfcyDYJkXiJoF4jxt3Tj8otMwMbVrfPAA1i_l6a00iUHHsOScWiRroGdna9PBNxndRsJzIbMG59eY_p2j0ib5nKsJ3L37LAXVO7urSWWie0yHC2GWMky1-rSPkGW3-3tF5tUTWgVW7svSpTP9xz8nAU5mAfgmkxyiVPLNjuSI5tnb1eTJo4jlUMYql22SrMA1RMy5F4L2fonZGls5ma-Sgn8Mt5BLNfqifr76Qr0K3GaAysN2KO0CswNJc_O3ymT01pzxSnRSWtDQp7r8gZVFEZ6JLw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -133,7 +133,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:21 GMT
    +      - Thu, 05 Mar 2020 23:17:16 GMT
           expires:
           - '-1'
           pragma:
    @@ -147,11 +147,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -167,9 +167,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -181,7 +181,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:21 GMT
    +      - Thu, 05 Mar 2020 23:17:16 GMT
           expires:
           - '-1'
           pragma:
    @@ -195,11 +195,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -215,9 +215,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -229,7 +229,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:23 GMT
    +      - Thu, 05 Mar 2020 23:17:18 GMT
           expires:
           - '-1'
           pragma:
    @@ -243,11 +243,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -263,9 +263,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -277,7 +277,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:26 GMT
    +      - Thu, 05 Mar 2020 23:17:20 GMT
           expires:
           - '-1'
           pragma:
    @@ -291,11 +291,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -311,9 +311,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -325,7 +325,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:28 GMT
    +      - Thu, 05 Mar 2020 23:17:22 GMT
           expires:
           - '-1'
           pragma:
    @@ -339,11 +339,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -359,9 +359,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -373,7 +373,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:30 GMT
    +      - Thu, 05 Mar 2020 23:17:24 GMT
           expires:
           - '-1'
           pragma:
    @@ -387,11 +387,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -407,9 +407,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -421,7 +421,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:32 GMT
    +      - Thu, 05 Mar 2020 23:17:26 GMT
           expires:
           - '-1'
           pragma:
    @@ -435,11 +435,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -455,9 +455,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -469,7 +469,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:34 GMT
    +      - Thu, 05 Mar 2020 23:17:28 GMT
           expires:
           - '-1'
           pragma:
    @@ -483,11 +483,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -503,9 +503,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -517,7 +517,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:36 GMT
    +      - Thu, 05 Mar 2020 23:17:30 GMT
           expires:
           - '-1'
           pragma:
    @@ -531,11 +531,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -551,9 +551,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -565,7 +565,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:38 GMT
    +      - Thu, 05 Mar 2020 23:17:32 GMT
           expires:
           - '-1'
           pragma:
    @@ -579,11 +579,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -599,9 +599,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -613,7 +613,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:40 GMT
    +      - Thu, 05 Mar 2020 23:17:34 GMT
           expires:
           - '-1'
           pragma:
    @@ -627,11 +627,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -647,9 +647,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -661,7 +661,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:43 GMT
    +      - Thu, 05 Mar 2020 23:17:36 GMT
           expires:
           - '-1'
           pragma:
    @@ -675,11 +675,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -695,21 +695,21 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
    -      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1583450236,"scheduledPurgeDate":1591226236,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/c05fb0a22c8640d3a3f48f965efd4b39","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xSmJicucZdB00etJDfQI85C1ZwObhycX1tjvHhKXkXKO0sRZnXm66qjTomjxfcyDYJkXiJoF4jxt3Tj8otMwMbVrfPAA1i_l6a00iUHHsOScWiRroGdna9PBNxndRsJzIbMG59eY_p2j0ib5nKsJ3L37LAXVO7urSWWie0yHC2GWMky1-rSPkGW3-3tF5tUTWgVW7svSpTP9xz8nAU5mAfgmkxyiVPLNjuSI5tnb1eTJo4jlUMYql22SrMA1RMy5F4L2fonZGls5ma-Sgn8Mt5BLNfqifr76Qr0K3GaAysN2KO0CswNJc_O3ymT01pzxSnRSWtDQp7r8gZVFEZ6JLw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '76'
    +      - '809'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:45 GMT
    +      - Thu, 05 Mar 2020 23:17:38 GMT
           expires:
           - '-1'
           pragma:
    @@ -723,16 +723,16 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 404
    -      message: Not Found
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    @@ -743,12 +743,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1575676642,"scheduledPurgeDate":1583452642,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/a6edf016a0b24ac8b693759b218ce38e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"oDFwmigjMHFmsN_lqueKdZMLtGLzT65ca2LzTICt0cSb_eADU8TYNWgRcPAgpZPAuvypTX2-v_A9Kf-6piW2cQ43ng4cnXSvNtTMITqGbYijOZsBsVDEuFH1v_hBr1bW1WHrNOwR_W2MJR1N8Fl-MQfMvmWIKoiCkXwv_vTmahHVUL_3iUqHZ_Ck5RXpn7Z_iKqm2-0l9qq64A9xVEBEGzQ79KybnzfrbyexpzbWL5GCndi0glamK2KhlNWEHtM-s7uAH8uldVqFn10CguVmYNetNqvqf9oFwC6LBFFR7XhKpl3k6YgPxMCGcW7VeKbVVdvPNtkwIIaOEnZcVs1fuw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1583450236,"scheduledPurgeDate":1591226236,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/c05fb0a22c8640d3a3f48f965efd4b39","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xSmJicucZdB00etJDfQI85C1ZwObhycX1tjvHhKXkXKO0sRZnXm66qjTomjxfcyDYJkXiJoF4jxt3Tj8otMwMbVrfPAA1i_l6a00iUHHsOScWiRroGdna9PBNxndRsJzIbMG59eY_p2j0ib5nKsJ3L37LAXVO7urSWWie0yHC2GWMky1-rSPkGW3-3tF5tUTWgVW7svSpTP9xz8nAU5mAfgmkxyiVPLNjuSI5tnb1eTJo4jlUMYql22SrMA1RMy5F4L2fonZGls5ma-Sgn8Mt5BLNfqifr76Qr0K3GaAysN2KO0CswNJc_O3ymT01pzxSnRSWtDQp7r8gZVFEZ6JLw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -757,7 +757,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:47 GMT
    +      - Thu, 05 Mar 2020 23:17:38 GMT
           expires:
           - '-1'
           pragma:
    @@ -771,11 +771,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -790,22 +790,24 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    +      Content-Length:
    +      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: POST
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1575676642,"scheduledPurgeDate":1583452642,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/a6edf016a0b24ac8b693759b218ce38e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"oDFwmigjMHFmsN_lqueKdZMLtGLzT65ca2LzTICt0cSb_eADU8TYNWgRcPAgpZPAuvypTX2-v_A9Kf-6piW2cQ43ng4cnXSvNtTMITqGbYijOZsBsVDEuFH1v_hBr1bW1WHrNOwR_W2MJR1N8Fl-MQfMvmWIKoiCkXwv_vTmahHVUL_3iUqHZ_Ck5RXpn7Z_iKqm2-0l9qq64A9xVEBEGzQ79KybnzfrbyexpzbWL5GCndi0glamK2KhlNWEHtM-s7uAH8uldVqFn10CguVmYNetNqvqf9oFwC6LBFFR7XhKpl3k6YgPxMCGcW7VeKbVVdvPNtkwIIaOEnZcVs1fuw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/c05fb0a22c8640d3a3f48f965efd4b39","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xSmJicucZdB00etJDfQI85C1ZwObhycX1tjvHhKXkXKO0sRZnXm66qjTomjxfcyDYJkXiJoF4jxt3Tj8otMwMbVrfPAA1i_l6a00iUHHsOScWiRroGdna9PBNxndRsJzIbMG59eY_p2j0ib5nKsJ3L37LAXVO7urSWWie0yHC2GWMky1-rSPkGW3-3tF5tUTWgVW7svSpTP9xz8nAU5mAfgmkxyiVPLNjuSI5tnb1eTJo4jlUMYql22SrMA1RMy5F4L2fonZGls5ma-Sgn8Mt5BLNfqifr76Qr0K3GaAysN2KO0CswNJc_O3ymT01pzxSnRSWtDQp7r8gZVFEZ6JLw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '809'
    +      - '667'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:49 GMT
    +      - Thu, 05 Mar 2020 23:17:38 GMT
           expires:
           - '-1'
           pragma:
    @@ -819,11 +821,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -838,24 +840,22 @@ interactions:
           - gzip, deflate
           Connection:
           - keep-alive
    -      Content-Length:
    -      - '0'
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    -    method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name/recover?api-version=7.0
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/a6edf016a0b24ac8b693759b218ce38e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"oDFwmigjMHFmsN_lqueKdZMLtGLzT65ca2LzTICt0cSb_eADU8TYNWgRcPAgpZPAuvypTX2-v_A9Kf-6piW2cQ43ng4cnXSvNtTMITqGbYijOZsBsVDEuFH1v_hBr1bW1WHrNOwR_W2MJR1N8Fl-MQfMvmWIKoiCkXwv_vTmahHVUL_3iUqHZ_Ck5RXpn7Z_iKqm2-0l9qq64A9xVEBEGzQ79KybnzfrbyexpzbWL5GCndi0glamK2KhlNWEHtM-s7uAH8uldVqFn10CguVmYNetNqvqf9oFwC6LBFFR7XhKpl3k6YgPxMCGcW7VeKbVVdvPNtkwIIaOEnZcVs1fuw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
         headers:
           cache-control:
           - no-cache
           content-length:
    -      - '667'
    +      - '68'
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:49 GMT
    +      - Thu, 05 Mar 2020 23:17:38 GMT
           expires:
           - '-1'
           pragma:
    @@ -869,16 +869,64 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    -      code: 200
    -      message: OK
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '68'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:17:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    @@ -889,9 +937,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -903,7 +951,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:49 GMT
    +      - Thu, 05 Mar 2020 23:17:42 GMT
           expires:
           - '-1'
           pragma:
    @@ -917,11 +965,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -937,9 +985,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -951,7 +999,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:51 GMT
    +      - Thu, 05 Mar 2020 23:17:45 GMT
           expires:
           - '-1'
           pragma:
    @@ -965,11 +1013,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -985,9 +1033,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -999,7 +1047,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:53 GMT
    +      - Thu, 05 Mar 2020 23:17:47 GMT
           expires:
           - '-1'
           pragma:
    @@ -1013,11 +1061,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1033,9 +1081,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -1047,7 +1095,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:55 GMT
    +      - Thu, 05 Mar 2020 23:17:49 GMT
           expires:
           - '-1'
           pragma:
    @@ -1061,11 +1109,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1081,9 +1129,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -1095,7 +1143,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:57 GMT
    +      - Thu, 05 Mar 2020 23:17:51 GMT
           expires:
           - '-1'
           pragma:
    @@ -1109,11 +1157,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1129,9 +1177,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -1143,7 +1191,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:57:59 GMT
    +      - Thu, 05 Mar 2020 23:17:53 GMT
           expires:
           - '-1'
           pragma:
    @@ -1157,11 +1205,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1177,9 +1225,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -1191,7 +1239,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:01 GMT
    +      - Thu, 05 Mar 2020 23:17:56 GMT
           expires:
           - '-1'
           pragma:
    @@ -1205,11 +1253,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1225,9 +1273,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -1239,7 +1287,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:03 GMT
    +      - Thu, 05 Mar 2020 23:17:58 GMT
           expires:
           - '-1'
           pragma:
    @@ -1253,11 +1301,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1273,9 +1321,9 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -1287,7 +1335,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:05 GMT
    +      - Thu, 05 Mar 2020 23:18:00 GMT
           expires:
           - '-1'
           pragma:
    @@ -1301,11 +1349,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    @@ -1321,12 +1369,12 @@ interactions:
           Connection:
           - keep-alive
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/a6edf016a0b24ac8b693759b218ce38e","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"oDFwmigjMHFmsN_lqueKdZMLtGLzT65ca2LzTICt0cSb_eADU8TYNWgRcPAgpZPAuvypTX2-v_A9Kf-6piW2cQ43ng4cnXSvNtTMITqGbYijOZsBsVDEuFH1v_hBr1bW1WHrNOwR_W2MJR1N8Fl-MQfMvmWIKoiCkXwv_vTmahHVUL_3iUqHZ_Ck5RXpn7Z_iKqm2-0l9qq64A9xVEBEGzQ79KybnzfrbyexpzbWL5GCndi0glamK2KhlNWEHtM-s7uAH8uldVqFn10CguVmYNetNqvqf9oFwC6LBFFR7XhKpl3k6YgPxMCGcW7VeKbVVdvPNtkwIIaOEnZcVs1fuw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676642,"updated":1575676642,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/c05fb0a22c8640d3a3f48f965efd4b39","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"xSmJicucZdB00etJDfQI85C1ZwObhycX1tjvHhKXkXKO0sRZnXm66qjTomjxfcyDYJkXiJoF4jxt3Tj8otMwMbVrfPAA1i_l6a00iUHHsOScWiRroGdna9PBNxndRsJzIbMG59eY_p2j0ib5nKsJ3L37LAXVO7urSWWie0yHC2GWMky1-rSPkGW3-3tF5tUTWgVW7svSpTP9xz8nAU5mAfgmkxyiVPLNjuSI5tnb1eTJo4jlUMYql22SrMA1RMy5F4L2fonZGls5ma-Sgn8Mt5BLNfqifr76Qr0K3GaAysN2KO0CswNJc_O3ymT01pzxSnRSWtDQp7r8gZVFEZ6JLw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control:
           - no-cache
    @@ -1335,7 +1383,7 @@ interactions:
           content-type:
           - application/json; charset=utf-8
           date:
    -      - Fri, 06 Dec 2019 23:58:08 GMT
    +      - Thu, 05 Mar 2020 23:18:02 GMT
           expires:
           - '-1'
           pragma:
    @@ -1349,11 +1397,11 @@ interactions:
           x-content-type-options:
           - nosniff
           x-ms-keyvault-network-info:
    -      - addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region:
           - westus
           x-ms-keyvault-service-version:
    -      - 1.1.0.883
    +      - 1.1.0.897
           x-powered-by:
           - ASP.NET
         status:
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_key_crud_operations.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_key_crud_operations.yaml
    index 3aa16549e1e5..2e8834ff55d5 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_key_crud_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_key_crud_operations.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:24 GMT
    +      date: Thu, 05 Mar 2020 23:17:15 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,24 +29,17 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /keys/key-name/create
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/keys/key-name/create?api-version=7.1-preview
     - request:
    -    body: '{"key_ops": ["encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey"],
    -      "key_size": 2048, "attributes": {"exp": 2527401600}, "kty": "RSA"}'
    +    body: '{"kty": "RSA", "key_size": 2048, "key_ops": ["encrypt", "decrypt", "sign",
    +      "verify", "wrapKey", "unwrapKey"], "attributes": {"exp": 2527401600}}'
         headers:
           Accept:
           - application/json
    @@ -55,40 +48,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/15334ac58f5b44c5a4d92cd6924b4f00","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sX0tBCq7KTIBhs45_s_3p_35o3VEge7Y7VhqTEKOM_gzUDfAcuEpDeOf8xc_nidtfYqMowugo9yC7LWkCc83zm_Zwq-MVGg2MXpV5tvbDpvN3WgPbiqdnmWahTt28i6zcuUGtUNpual_fkSz6sCdNsBWe7r90UF__1KszuahVqgYWL3L1Hss240C4vbDGU-of2rVO19DTkftn-1IC4njdtGQujEyLsfLwrhIXHsfWdNql9GfDH8zMZvvdwp4pSQLw9AcEPGrZNe1biNewvsYoVref5dMj10oIwxaAzKhMwuYW0e0hMRjp3llmGL1S6fkcs8dTPkOxGGPAjNRmu1Krw","e":"AQAB"},"attributes":{"enabled":true,"exp":2527401600,"created":1575676645,"updated":1575676645,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/c8285814e84942c1a667a1cca3a881ca","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"23rT_tm-oi6iCF1ml4MuxycRScxhigBK93Szc1Z5nAuQy4I9w2W2UAIT95lCJvQsmyr1j5VCegju6BuRpnsqHfF3L66QtGUMP4f1arYOeEULhyXXmUL64xVf_hM2v-XVI8Y9_4Tba6zM7U_UMClgWpAWU2UNdzrAlc7vhafsgCmWDP4Et_9sPVoPZdLZR0jHOLKnIFcnA5IOLyEZQHwyiNaovjw3lyEv6_CVOweeRl__5KV1j5opzfn1eKmq9K5esKSkhZoUzoXBoyAfpA3T3rgw8UUALvLY6zYgfzNatI6jSoia3RxuniGv4GxVymZ3CqDCq6S_9FM_IoOkmVKt7w","e":"AQAB"},"attributes":{"enabled":true,"exp":2527401600,"created":1583450235,"updated":1583450235,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '684'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:25 GMT
    +      date: Thu, 05 Mar 2020 23:17:15 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /keys/key-name/create
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/keys/key-name/create?api-version=7.1-preview
     - request:
    -    body: '{"key_size": 2048, "kty": "RSA-HSM"}'
    +    body: '{"kty": "RSA-HSM", "key_size": 2048}'
         headers:
           Accept:
           - application/json
    @@ -97,40 +83,33 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/34511c6a09fe4680a901d9fb9d077fe6","kty":"RSA-HSM","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"s06eUxiwc7G6tyvto0LeAgGGQgh8YKmkDK1BLWmCEVV9PJZABqT5u0_ABGXBUodW1urnnnjw3vO_OQPtEvwXcD0UeKk9T7Ea6wCCrJTOeOcnf6gb4R7uNj9n-cwXYBG-RNSqR9oxzNIJh1XCmWM3P1jK6HKvgcdCNZlH3V6vmicO4ujHOuHEwoyDB4j_SV0GJSJA1dkWbK-dftbFroj6tQrhdKOJsUfX566eeBzAchKW_3TMe6ioK1faUMxGcHY1gGAr0jK-1nY_tBBgxGMPuNTNX7LJqLSlSkYozYytPWdbGey5OYfq4KXd3skdW2EVTUP2H4gsxC075HcrTHnmuw","e":"AAEAAQ"},"attributes":{"enabled":true,"created":1575676646,"updated":1575676646,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/2fb54656f22a45abb1d8709382927a12","kty":"RSA-HSM","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"2ij6KF490jBDBSmYuM7zwbrSEZEBLM5_ttLOD9Q1tGJgnlRVJ0QqLoVhvdhcfoddU58zdrhiOmOGLmmzjhRcce2jSeBj8T3nI-40CcVGLtkyU9U5P_f3O7MdYA0i7xSCzU_I1G_jP1o7qBapTEa60pSYcT0P97ZHxPSUoaQNFbeU2eiULris6LmuU-UahVbbARoT_4pN3XUUU9O9inPy_JXseCtPNVxrzoNbdr9r-jk1tCg4VYtwVJn81vqg7WlEY0isPV5DLbl3ihc3xAiv2TciW-KxDrFwc8SzXfFb-_hOlRr4qMcL1S2G-Ni4msZngArubWaIpwGUok0O5D14GQ","e":"AAEAAQ"},"attributes":{"enabled":true,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '673'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:16 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /keys/key-name/create
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/keys/key-name/create?api-version=7.1-preview
     - request:
    -    body: '{"crv": "P-256", "kty": "EC"}'
    +    body: '{"kty": "EC", "crv": "P-256"}'
         headers:
           Accept:
           - application/json
    @@ -139,114 +118,93 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/d2dc3cf2458b45ab880484e84faa6f0a","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"s6-D-FHxvpFFbHG8f6ah7Px1sb48iD90zQFHFakU5uE","y":"89XDPd7eiord3JjqYcS9-ssOsGVz2hOnfu5hh685-Fk"},"attributes":{"enabled":true,"created":1575676646,"updated":1575676646,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/2d823b4e4c6540d497a0bb141c3abaab","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"8e7DC4M2xjsj_3jq2A2cn3CjleKnCrqmhwrDYWq0yik","y":"xrAdluyziAcDOoURkWFjxapAIlYnTMAQ6y0kFeuNj6I"},"attributes":{"enabled":true,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '378'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:16 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /keys/key-name/create
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/keys/key-name/create?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/d2dc3cf2458b45ab880484e84faa6f0a","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"s6-D-FHxvpFFbHG8f6ah7Px1sb48iD90zQFHFakU5uE","y":"89XDPd7eiord3JjqYcS9-ssOsGVz2hOnfu5hh685-Fk"},"attributes":{"enabled":true,"created":1575676646,"updated":1575676646,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/2d823b4e4c6540d497a0bb141c3abaab","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"8e7DC4M2xjsj_3jq2A2cn3CjleKnCrqmhwrDYWq0yik","y":"xrAdluyziAcDOoURkWFjxapAIlYnTMAQ6y0kFeuNj6I"},"attributes":{"enabled":true,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '378'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:16 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/d2dc3cf2458b45ab880484e84faa6f0a?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/2d823b4e4c6540d497a0bb141c3abaab?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/d2dc3cf2458b45ab880484e84faa6f0a","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"s6-D-FHxvpFFbHG8f6ah7Px1sb48iD90zQFHFakU5uE","y":"89XDPd7eiord3JjqYcS9-ssOsGVz2hOnfu5hh685-Fk"},"attributes":{"enabled":true,"created":1575676646,"updated":1575676646,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/2d823b4e4c6540d497a0bb141c3abaab","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"8e7DC4M2xjsj_3jq2A2cn3CjleKnCrqmhwrDYWq0yik","y":"xrAdluyziAcDOoURkWFjxapAIlYnTMAQ6y0kFeuNj6I"},"attributes":{"enabled":true,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '378'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:16 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /keys/key-name/d2dc3cf2458b45ab880484e84faa6f0a
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/keys/key-name/2d823b4e4c6540d497a0bb141c3abaab?api-version=7.1-preview
     - request:
         body: '{"attributes": {"exp": 2524723200}, "tags": {"foo": "updated tag"}}'
         headers:
    @@ -257,87 +215,73 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/d2dc3cf2458b45ab880484e84faa6f0a","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"s6-D-FHxvpFFbHG8f6ah7Px1sb48iD90zQFHFakU5uE","y":"89XDPd7eiord3JjqYcS9-ssOsGVz2hOnfu5hh685-Fk"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676646,"updated":1575676646,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/2d823b4e4c6540d497a0bb141c3abaab","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"8e7DC4M2xjsj_3jq2A2cn3CjleKnCrqmhwrDYWq0yik","y":"xrAdluyziAcDOoURkWFjxapAIlYnTMAQ6y0kFeuNj6I"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control: no-cache
           content-length: '424'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:16 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1575676646,"scheduledPurgeDate":1583452646,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/d2dc3cf2458b45ab880484e84faa6f0a","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"s6-D-FHxvpFFbHG8f6ah7Px1sb48iD90zQFHFakU5uE","y":"89XDPd7eiord3JjqYcS9-ssOsGVz2hOnfu5hh685-Fk"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676646,"updated":1575676646,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1583450236,"scheduledPurgeDate":1591226236,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/2d823b4e4c6540d497a0bb141c3abaab","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"8e7DC4M2xjsj_3jq2A2cn3CjleKnCrqmhwrDYWq0yik","y":"xrAdluyziAcDOoURkWFjxapAIlYnTMAQ6y0kFeuNj6I"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control: no-cache
           content-length: '566'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:16 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /keys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/keys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -345,37 +289,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:16 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -383,37 +320,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:28 GMT
    +      date: Thu, 05 Mar 2020 23:17:18 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -421,37 +351,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:30 GMT
    +      date: Thu, 05 Mar 2020 23:17:20 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -459,37 +382,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:32 GMT
    +      date: Thu, 05 Mar 2020 23:17:22 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -497,37 +413,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:34 GMT
    +      date: Thu, 05 Mar 2020 23:17:24 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -535,37 +444,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:36 GMT
    +      date: Thu, 05 Mar 2020 23:17:26 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -573,37 +475,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:38 GMT
    +      date: Thu, 05 Mar 2020 23:17:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -611,37 +506,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:40 GMT
    +      date: Thu, 05 Mar 2020 23:17:31 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -649,37 +537,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:42 GMT
    +      date: Thu, 05 Mar 2020 23:17:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -687,65 +568,51 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:44 GMT
    +      date: Thu, 05 Mar 2020 23:17:35 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1575676646,"scheduledPurgeDate":1583452646,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/d2dc3cf2458b45ab880484e84faa6f0a","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"s6-D-FHxvpFFbHG8f6ah7Px1sb48iD90zQFHFakU5uE","y":"89XDPd7eiord3JjqYcS9-ssOsGVz2hOnfu5hh685-Fk"},"attributes":{"enabled":true,"exp":2524723200,"created":1575676646,"updated":1575676646,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1583450236,"scheduledPurgeDate":1591226236,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/2d823b4e4c6540d497a0bb141c3abaab","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"8e7DC4M2xjsj_3jq2A2cn3CjleKnCrqmhwrDYWq0yik","y":"xrAdluyziAcDOoURkWFjxapAIlYnTMAQ6y0kFeuNj6I"},"attributes":{"enabled":true,"exp":2524723200,"created":1583450236,"updated":1583450236,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
             tag"}}'
         headers:
           cache-control: no-cache
           content-length: '566'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:46 GMT
    +      date: Thu, 05 Mar 2020 23:17:37 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - wfevkb6vg3ymymqg4f6pdz2x.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://fd5zhf6cym3zcsezeefjlras.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_key_list_operations.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_key_list_operations.yaml
    index 79f6bf331332..1f520c7837db 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_key_list_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_key_list_operations.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:24 GMT
    +      date: Thu, 05 Mar 2020 23:17:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - nqnzu3msweqmxeigkasbuevs.vault.azure.net
    -        - /keys/key0/create
    -        - api-version=7.0
    -        - ''
    +    url: https://wfap2y42aa22mnnix2aq4jz5.vault.azure.net/keys/key0/create?api-version=7.1-preview
     - request:
         body: '{"kty": "EC"}'
         headers:
    @@ -54,38 +47,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/7fad3f1a6ad84e58bd83b69ede1ecd28","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"Hx3fDMjr2aaEtKrZthjSDitESwKMN6ZC3_SmTfVmOPM","y":"LfG9Y-62zffClmu49GIhy4fuliru9yfcftjyg3Hk37Y"},"attributes":{"enabled":true,"created":1575676705,"updated":1575676705,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/438179ebaec04dc6879948a540adf095","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"zD-OFY9S3aC0xwxXVrkASh-_i5E89gt6DYpZYvR-wy0","y":"_kJCahs-KtgmYQ60DFVHCpnMZgSSWOp53t8UK511AvQ"},"attributes":{"enabled":true,"created":1583450229,"updated":1583450229,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '374'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:25 GMT
    +      date: Thu, 05 Mar 2020 23:17:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - nqnzu3msweqmxeigkasbuevs.vault.azure.net
    -        - /keys/key0/create
    -        - api-version=7.0
    -        - ''
    +    url: https://wfap2y42aa22mnnix2aq4jz5.vault.azure.net/keys/key0/create?api-version=7.1-preview
     - request:
         body: '{"kty": "EC"}'
         headers:
    @@ -96,38 +82,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/2a37db4739a9412ebc28a3fbeb2e9dfb","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"Lf7IBZw5vNLVHkhPQzqWpw8pBhm9BJk8FXEK8-yQxXs","y":"2yf7L6QTF5UAriKDo_DPpXfQ-Kb7Uog5DJQ0TuMTCew"},"attributes":{"enabled":true,"created":1575676705,"updated":1575676705,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/2d68b70e5b1a4022b0b01520670b4f33","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"y1oTAamysA8in9P84r8tOyxA2TNoPVpxHHtwd0Z_sG8","y":"ipuoY7M3Wzlndi-WOC-MuuM9p5T7t64WjUsHtkXU6tg"},"attributes":{"enabled":true,"created":1583450229,"updated":1583450229,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '374'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:25 GMT
    +      date: Thu, 05 Mar 2020 23:17:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - nqnzu3msweqmxeigkasbuevs.vault.azure.net
    -        - /keys/key1/create
    -        - api-version=7.0
    -        - ''
    +    url: https://wfap2y42aa22mnnix2aq4jz5.vault.azure.net/keys/key1/create?api-version=7.1-preview
     - request:
         body: '{"kty": "EC"}'
         headers:
    @@ -138,38 +117,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/b90442d955544ae8beb6667893c110a0","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"F1Y0iL-DAJg8BLxRke3W8-688aAUdxRIUC4kiGi4dyM","y":"pt5TdVXTqNucgfu9UHx-pibUhuWfyxRX1TiqPCI06xE"},"attributes":{"enabled":true,"created":1575676705,"updated":1575676705,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/4c8c5feb94294ee2a0b10d2949a9c915","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"nHchV25YPgTiXWsMWOzVs9FHRAlxbJElQkDkb_mUnZE","y":"K5jS1PBLLQvaPMhkQV5rbx61tfqeVc1qX7AiLIE6ZF0"},"attributes":{"enabled":true,"created":1583450230,"updated":1583450230,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '374'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:25 GMT
    +      date: Thu, 05 Mar 2020 23:17:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - nqnzu3msweqmxeigkasbuevs.vault.azure.net
    -        - /keys/key2/create
    -        - api-version=7.0
    -        - ''
    +    url: https://wfap2y42aa22mnnix2aq4jz5.vault.azure.net/keys/key2/create?api-version=7.1-preview
     - request:
         body: '{"kty": "EC"}'
         headers:
    @@ -180,38 +152,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/63ad356932304be7a4cfa3cc9a5296c8","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"5warIvTYHjD4W6SKeiTvIN3fPAEbGvrTQIlC5_Jfxn4","y":"c368l1DlBJmHU8Mfr9H3wTGlKdbab4xkbyPA1Htk0fY"},"attributes":{"enabled":true,"created":1575676705,"updated":1575676705,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/7f76d14a17d2409c91730398a68ebf67","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"ZXnLQntvkVnbIyGfgUW-xxJErF0TzyBiSU1T61uS_LQ","y":"M8ZM2hRF2iKthtknrCunsgCV0Ax6eLI0AUsPWhd5cws"},"attributes":{"enabled":true,"created":1583450230,"updated":1583450230,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '374'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - nqnzu3msweqmxeigkasbuevs.vault.azure.net
    -        - /keys/key3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://wfap2y42aa22mnnix2aq4jz5.vault.azure.net/keys/key3/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -222,38 +187,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key0/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/470f6ebf8f5e4d9a85d4dc1942d5d058","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5vDeAW2Mf2wn1wt6NgDvpKj0e-5PbY8cfYQq4kd6DKogDKT9FXPo9r8fPrDIRKw1w62WjupbUZfkpUA-xWEaZ5u6_Kk0XER3OswqSlv4wxmwIpY0TDG7QhLYAeIMtdrvQ75buC4fl0GD2YG3Q_vyAc2JbGdra5NarT-3ovE3GsAdp22vZt2vj-TOXEzAcup7QpLS3vmPTkQibNf1pQJvVemCwdcF9Sij32IqJiGY_-GC2ikQ-0ix37uq1kUZtEgDyZ0O2npwp3njCLmCnHl2bqAbuMKfelUERio3K4wHqoL4HXVJ5CEliV5x98Vl_LQKW667PCBcEojCOBbCIMFu2w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676706,"updated":1575676706,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key0/8572cfc231f3451897386e214d8a1014","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sg7u7kI_T8SoMLbbTefPyHvmxwi95zNRtZojVBdIL8D38_ZAtHlrGwFZcT3oCosZMRtpJLRJRTYamWs8DPyhlbC96ZGG_laFC4fw880mIsaw_j1WlUzVpzc5Qu4X3EkKbBvMfjGYSM-dSRZDOQaNlw0EbPrex_xjNTYMJsgBrhAVFByc3Tw2EF-JSuWhPWfep8Vqhi42ZKKqRGK151CjW2pkA1WeMiEifg5ba1v0vRrzLi5I4d9WJ1RUK2MrOItOJp4334l5vUEGekVMsjkww0MURDpR3RqmBK_nX5uPY5yGMBv37LEg4LRnb1RHq5zw73T-k2vTQrk3eyC-Q5oKqw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450230,"updated":1583450230,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - nqnzu3msweqmxeigkasbuevs.vault.azure.net
    -        - /keys/key0/create
    -        - api-version=7.0
    -        - ''
    +    url: https://wfap2y42aa22mnnix2aq4jz5.vault.azure.net/keys/key0/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -264,38 +222,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key1/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/3c8aa8cbc5c24bc2b263b5d0c8fa1e01","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"uua3FRD5ZapA1UJJUe-VeG87z1eU30XCRy1ngEtu9rQEnaRS6_tg4u-N0g1hPY4Xf2QZZAkah7LjyJlSD0nbAuQ9ZNatizqKvPMetlEuL4RDgWRw7htzICjs1p6o6TpHDTKYDrqjoY-jOkwDitZiU4QwYf_-Y2iqIIHUJ1PV5vR5xt2SXQr29XLfDu9k3bVZyZS7J3tmAPYa7LN9uhTcZw2arKGSIxx1_DOZlFKIXwrNLqyzz80pqtWQ8MyUgEtyDee_wVUpIBM7hE2ufmzEHKK7iBpKIi4ufkvi6AMQaw573blBu5Wu2b-jeRngPLUoef43uRAtg91WR3mxNUYtyw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676706,"updated":1575676706,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key1/17fcde80888a4b3a89b23ba6ba06d8a4","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"sdi4rCdMqsJf2rb9zZ4l-_uyPIEn0sxc4b2iB0SesStSqPSUSWFSsOFzGdjphJf3APKc0cFkKDSag7aTiJMyTZ0T2fOyGbs5o_8PpeQFUuAfpdXKp32INl9Yp4pX0jmUxFCbBVGu0ppnd5OG__LovRCelFA-e3zjtdz2a96xrFUimQltvC6JcrOaG2O4VoPO6316Ptev8cdaHSaXwi5lUbZqfEimh8BwuUXw6NdsH0l6q8y1qGm2C34wU406T4duIJgizC9B8KobwyJaVFltT1E6915juIX9hg4VjZGBJ5YtYfdeOSOrXRtLXQNmGRrt1k9FaTI3-CTqBcmdTmX8kw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450230,"updated":1583450230,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - nqnzu3msweqmxeigkasbuevs.vault.azure.net
    -        - /keys/key1/create
    -        - api-version=7.0
    -        - ''
    +    url: https://wfap2y42aa22mnnix2aq4jz5.vault.azure.net/keys/key1/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -306,38 +257,31 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key2/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/7fdd4be074ec41449532d64e4f91a3be","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"vpGqMzqQyuQRCAFPE8MsGBmHBoqI8Jt7mejkZWcKQlwDEiRQ27IJCT_oXzVFvIbo80uIjfJfA32Foga6vhMQBCsZpXeQCdszDHz-_uLXXGq-IjX65mtXKVf0GkEN76MZ-FiE9-XfbA1LN3WpXWauIfrbjf9Dt94VKrenME5-f86Ei8VQ02iA-T9lg9fjAIGdbN216CN8zVa-qAPm0to7_R-xFYggi2J3uOZimAHxKZgOj4Yi-_tJ3V4mhEPoYGz4__pzKWAqd8NDNObEb0LK7pS1_mJQfX02lCswHNi3hRzixPndBGyku-D0w9al96XkKgErvZrIP-h6J2dpdCZoKw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676706,"updated":1575676706,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key2/c093d0d71522461c9930df3d7f4e9e6d","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"ldcoLMzttOXB4zUq5J2WDTMnYX_Bw7gfzlhC7RzhRr0wAFmgUIFS0PGd1AGQyCGZ0kmpOZ0aRBYC9FaICpQsrXRAxGyp-Pk-QLwsHrXpGBMy6NUDI-0iSRw_aWskLML-3OHHR4aZ6Dls8UZKOx5L3CnXKIb7IksLOwaKhNtt2fZhIgdrvat58OxgnRm2cpBEPJMbiEOEqcXTcJDbyXT9A3GLff_bYABhOQOsIJ1eKb9YKvpUlNbJregv4UigjmEOjgQP5_dSnEN2dQtzdX0_c0-uCnAH9vr-Z5US9i0rJwWv_lWSeHAs4ZjIaO6qCoOCmAh_unQOGb5B8FFOrKxCGw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450230,"updated":1583450230,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - nqnzu3msweqmxeigkasbuevs.vault.azure.net
    -        - /keys/key2/create
    -        - api-version=7.0
    -        - ''
    +    url: https://wfap2y42aa22mnnix2aq4jz5.vault.azure.net/keys/key2/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -348,85 +292,71 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key3/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/273420d343e54c3eb803c1021094ca2b","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"lA2mlHDdbtjeAHzsedEP8cztbuI7bbl114Ma0uouS1GdrHm5i2BTduFesaL6gMnxcqF1CXI2r45yMABk4tz5OsTWFyWmO81ktEhs4Dw5BaxA-oUF6L2vgNudR3vlxsbHGhY-pwXLAV-KU30CdCakdgbTaJVU12bOJWq7pwq3PkkerAGC7Brllm4zoA5tDu482ntMcx4LSFbS2-mIcTf7jDU4g4mcicCrHFUQYQAU_tPwYUXzmimVpfN4PYAxCv8Rc9ae5krVayFn0uiy1oZjqfQAR72fU17QZDTmV980e3ai3iCbRtv9R-y1apRG5IwJDXGeE3yW-jFUoH3dmJyc1w","e":"AQAB"},"attributes":{"enabled":true,"created":1575676706,"updated":1575676706,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key3/6f96d24979b042ada9f3cde1b5cf25c9","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"w7Kln5JzHdQ1ctHHUdkMJSB-8XiqSDwqB3g1J0fBSD-4pZMar3RUJtImK03WJ5OKMZSzqn8sM3guEiUZ8GU2yWWw5tu7wDZsa0BgF77lWf0qvvO8qey5wzQT2zKi21yAfhP4k4QTv8Yq-txCQHRX37qGEd8OZeOFObkeeWuqCs-wlCGoU1rLB6j5IYZUnJHqEPFVZ997CNNHf3HODv1G_GWAoC8U3DbyXeRkcmoXfNS_EDen7s2ONoNUhiDWsn-9pdYIRiX3OkI4kvav2Mp9HJmCtbgoaocF3uxj0-htJrBfC4rJ08_tqgFC3nz0UFDthp_fLMuciFDXQXkvYwFYSw","e":"AQAB"},"attributes":{"enabled":true,"created":1583450230,"updated":1583450230,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '663'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - nqnzu3msweqmxeigkasbuevs.vault.azure.net
    -        - /keys/key3/create
    -        - api-version=7.0
    -        - ''
    +    url: https://wfap2y42aa22mnnix2aq4jz5.vault.azure.net/keys/key3/create?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys?api-version=7.1-preview
       response:
         body:
    -      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1575676706,"updated":1575676706,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1575676706,"updated":1575676706,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1575676706,"updated":1575676706,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1575676706,"updated":1575676706,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +      string: '{"value":[{"kid":"https://vaultname.vault.azure.net/keys/key0","attributes":{"enabled":true,"created":1583450230,"updated":1583450230,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1583450230,"updated":1583450230,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key2","attributes":{"enabled":true,"created":1583450230,"updated":1583450230,"recoveryLevel":"Recoverable+Purgeable"}},{"kid":"https://vaultname.vault.azure.net/keys/key3","attributes":{"enabled":true,"created":1583450230,"updated":1583450230,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
           cache-control: no-cache
           content-length: '751'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - nqnzu3msweqmxeigkasbuevs.vault.azure.net
    -        - /keys
    -        - api-version=7.0
    -        - ''
    +    url: https://wfap2y42aa22mnnix2aq4jz5.vault.azure.net/keys?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/versions?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/versions?api-version=7.1-preview
       response:
         body:
           string: '{"value":[],"nextLink":null}'
    @@ -434,37 +364,30 @@ interactions:
           cache-control: no-cache
           content-length: '28'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:10 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - nqnzu3msweqmxeigkasbuevs.vault.azure.net
    -        - /keys/key-name/versions
    -        - api-version=7.0
    -        - ''
    +    url: https://wfap2y42aa22mnnix2aq4jz5.vault.azure.net/keys/key-name/versions?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys?api-version=7.1-preview
       response:
         body:
           string: '{"value":[],"nextLink":null}'
    @@ -472,26 +395,19 @@ interactions:
           cache-control: no-cache
           content-length: '28'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:58:26 GMT
    +      date: Thu, 05 Mar 2020 23:17:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - nqnzu3msweqmxeigkasbuevs.vault.azure.net
    -        - /deletedkeys
    -        - api-version=7.0
    -        - ''
    +    url: https://wfap2y42aa22mnnix2aq4jz5.vault.azure.net/deletedkeys?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_keys_backup_restore.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_keys_backup_restore.yaml
    index a072c5dd394d..3be29ef34770 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_keys_backup_restore.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_keys_backup_restore.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/test-key/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/test-key/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:24 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iz4mucfmcz7io3xtafoq5fv7.vault.azure.net
    -        - /keys/test-key/create
    -        - api-version=7.0
    -        - ''
    +    url: https://fc65q4axianrl5bbvo7repvt.vault.azure.net/keys/test-key/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -54,116 +47,95 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/test-key/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/test-key/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/test-key/8da8f1cb3586404aa5c361ab9d9d6cbd","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"suNLillLGVTZ3818Ix6QIPe6R9PWWCHUIkaJQK65pAT8vFS35cwTA-MLHv5Iw8JgRG-KSJ4D_s9e0IbMsZZDNa0HtYWtNqXhZmovvqfAGyihBaNXzSLcqRGtLUxGkniZKQI_LlCAOedfzPBschA8bbRfBRPsibn-XKNBYVB_FqeeIOE5ziLlY0-RBjfVTZa_sOHVFMWHPYBNAJ_yo1RkpFKkKx2mMxfjG5H83aCaV4v_DI4Xzf6-hagsx1F_lbOvm2dBwR3oH-tCjy6u3QJUda_9M-1EUv-1s3HCoxQOungmBVOrWxL4CAsgR_AJCM7dc0v92Q8cv7Tc3tpxRFgBlw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676644,"updated":1575676644,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/test-key/2ebe8de785fc4101bf85bb4897f114ab","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pfOj87cx1UdSkt5VOKZ7c6LQjXIu4X1ivHe8Xt4wNAHkuogN42ZBvDaEEi8eDALd4P63bnkJLrz5AntHpZKaPG4_Sw0Honz92o4EHLdpoNgTqO4Pfm6KXJRtlbZxW8pOKK8Wb12mOoxf9SXShTfOc5lsvKqhm37OuyNeyTqWfkUjrX4_twVCX97W8vBSpsVJQ8TKUdyFNWXATpKDu2KX-e9hhg6XzzjeEuyif6pwjjr6cDAq-vu4JL8OeBi7JqIzsJZzRWyhWIrSw-hsR0jwam6-kp0pqdFJXGLpg1aWJUH-L65ayhkfpD2BMfHzgc3vcgQGWxh3AB1VK1b1jgT9bQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '655'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:24 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iz4mucfmcz7io3xtafoq5fv7.vault.azure.net
    -        - /keys/test-key/create
    -        - api-version=7.0
    -        - ''
    +    url: https://fc65q4axianrl5bbvo7repvt.vault.azure.net/keys/test-key/create?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/test-key/backup?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/test-key/backup?api-version=7.1-preview
       response:
         body:
    -      string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmRlQ3dHSFVqMHRxRXhMdzlPakR1M2pLVmlIeEM0Qi1ua18tdmxpSV9IMWs3YW9taEhpTlNqNUl2ODhSX0U2NkpqQm8wRWlHSUlRU2xmRXMxV1NuQnVhSXZ6bVNaVVV3djdkYWRCQ3ZxOE1TbHNhc1Q4WWlFQUVYNTNxMy1xVTJRVXYwRlJtTmtheG8waW5fZk5kYk1ybWs0dnRCY3gyeHA4Slk4NUJBS2RGMHlKanY4MDk0U3lLTTZlTWt6M25TT1lISnZQVm1jV0VGQnVWUjRWUFdqVlBhZlhnNHNSc0RIdDVMRkhKQWtjMTBHR2lIX1JpTlZRek1yZ2xSSVZFYVExQjhuRUdhXzNPRHVKQVpXN1gzcmFKYUF6QkVvY3lXR09JVTBsNmRVSTJweGwxcW9UQ0dMYmZrcE90bTQ4S0xnalUxY0g1cktJLVNFNzNRQi1SSFZCdy5HVm1SMy1xbVNtWjMtSnRQbGdnSW1nLmdjaGFtQkdDMFVMVGpKWS0xODhGbzlmTUdhdWJ3LV9tRHRwTVVYTk43T1dmdWdBOENoOU5fN0xXM3JINXpHT2c0M3pCaWZzNEFPSXN2eHVkQnk0MXJYNVJhX0lmaDdzWEgwcjRGRU15VjFON05XaUwwSnEyazlmZExMblpldVo4RXhySnNyYXZtc1N0cHJBWWdhdWJ2UGxTQUFsWjVuWk1xUEhseDNPbUs4bnRYRVNkLWRmLS1nLUdCTjdYRU1xM0FXdEZTdWwxXzJCSmp4UXJlMVJZS05mcmtQRXh6TFRnSFk4V2JTTVJnSE5xdUs5aFFqdWFMcFFucEd6Ynp5aUQ2VExnRmxQTEV5WmozdmJlX3NZWXUtdW5CczdMQmF3Q0xLOGlRYmgzSWpBRXh3Y1dtWjJaUHpCMmtTTVhLQm9TSzZLSUlIMDZ3WDBBSnRudTR6bldtaWNiSm5rSlcyQjlrQTdSTnZKYzJycFpnSGpKcjlmSDZsNFEtN1lkWVNkNkkwYjNJZkFGZko2bFlPcTJSSS1WRTQ2M0FFWHhPVXQteldXRlRhU04wX3otLU56QU5ONHFlRm9BWFVVRGxfWWs5ZVNYVzR6bW9ISTRIT2UycU5lQ3ZUOFN1WmN1Ul9UX3l6a0JlN0hPWWZVdVdBUjBnOGlFZk5ESTBZeVltUzdGRTVqY0NyNjZPbU9Oc2dhMDBmNGlJS3FmQ09lT2lKZTlpT1pWaTJmZ1ZwMExfTlNJQWNFTkVmTmNQS0ZxeEo1T0doYmR1MDhxVFBxR0ZhQ2VKQjlpV2h4emVnM1hyMHp3YXFKX1J6OFRNU282QkNiYjQ3cTZyeEF1S1dIbHBqSzlfaWJVamNSOXhlQzhFRkJVQlRwaHRBdnBqUXVoZFNkZXFlYlM1QmlSRlZfYlJEeFB1UDR4NWlvT0Z5eGJZYlB1VDdtQV9yVmgtU09leU5JaHhvNE5JQ1JJaGJhOVQ3eHM0N3AwWG1hWmYwSll6VnFDcE1NUjRzX0RsSlBJSm9SV090WkQtM3lTYnAzeDZNMklLQ2FnTVJaaUtQemQyRHRoSi10RGtEN0xFTmFKTERXbTk2Z0JpVkNEMVoxRFZGZzhXOXpsNGo5S0I2YXJUcXdOd3BBZUJpMkUwWVdvTFlKQmdZV1FXeHVpQVItYjdrd2V1aGtSNTVFSGt5V1VJQnBCVm9KTVJiYVd6YzJIN2VQazN4dWc4dmVlanVWR1lIckZJdHVSVWJIR1RocFBpci1jVXZvbEUzQmxuQmh3djlKbDFScDZnNnBRX0N2ODV0My13V3A2R05WeUJNbFlRSXhvRzUzTGhBOE1tSnFoeWRjOVB5M0N3VGRmSWFDQ3Q5RXdzemloMVdsc3ZFbVdycDFtNU1sUndjOGo4T2RkTW5ab3c3U0FseWJPZzBrWUUyZWlXSFAyb242Y0E3aHUzTnRCaURSSkRtaWJiX181cko4cGZuZ2FkdnBQNmtyLVQycXJBWWZUN3VZSDUxN29sUGxtZVU0bllaYl9vWHpoUnQ2blZGcWNvWU5OQVpqdFRsMVpRcE14VERJR2huNFE3TEFhYmFFSGRzUng5djlPSkVtdGg3MzUyMFI2TDMycU1hNFdzRHFZQXJuR0lnOHlrcXByN3ZIZkh1d19GUUs3ZkZXQWZnLVZad0ZCS0ZDX0swN2JEZmhtLU00R0JtNnp2dElBVURsTFJCZ1l1NU1nUUxSS0lvVEZORHpNTXlwcXViWDFXX2FRTG5JX21DTThjTmdGUXNJZkZCckl4ckxRVEhUX1ZuZERwX2o3ZmJuUzAyUW1jd1UzWWdvRmtjbHBtbGtwMTVtQ1ZyX2VrekVMUXA4OFA1Z3NiaGs4dEpENmNDX1RWcFZZMTB0ZVltSFZpeUJpTzJybkthZUlPTDFFNndTQUxjNVV2RnNDTkRnNmRlWTBpTUlDWlBsYW9SU2pFZnhIR1dJNDNwWXRTcE5GOFRXNVN6c1E1RDBOd0FicUU0aVN2UTZXcFVSMlAwdXdualprY2NjOWpmOEpRNlRNS3o0bEpGcTZXb184MDBLLVcyYzlEZ3c2VFJ3blAtWTh5ckFWQW50MnZEVTNDVjdWNE1DUGl0bGRTU0pIWGo1Z3VOaWg5cm84TFUxem1CWERTMXZFcHFXRnMyQnlWWkdEVm5LRGpJZmxNdzVBWVFGQlZraEFIUExOeW11T2F1TXlkZzc5ejN1Mjd0RVNwWUF2M2FITUhRYzJ6dGRFM0htRFZDMzBkMXJxNnNaWk51LU42aVBuWUNsbTBRYzBlMEczX1UtbmlfTG0wbWc2OFhCdjRnWEtSaDJwV01iRFFoS3lBdGhCQlNWVTJnSVYwRXE4ZGxtNkhiNjI5MTVySVFVNTQwdDVyeHgtRUFOcjVOTjc3TnZYbDFRemlOZUZJaWxiQjkxMkFYc0lyNGwyOUVlRHA3d3B0cnJHNm51U21uNkpaUFBGSUtyRjh1bGVhYVZWTU5VSDY5XzFsa3dnd2Z2Y1RVM1lyTWJKNWlMUldnSzhSdl84dUdlUkI1SmJoMVFlOVRhZ1ZXMThfeklwaFduRlVmc3lMNWRrSTZ3SGxGUzh6U0JBdHVHQ2hCNlV6THFRN3dCU3NDNExPQjZmTmp6LVQxSlFsTE9icjlYUmNPenRXem9TTTVGOHY0R0lHUXpOd0xITWVZSkhDMVRpTWlOOVhuN0pzZ1kwMDRIeUFBX2NKaEVmczZzOXBoc19Qc1dfTVZ2TERzQmlpbGJER2hweXpUejh5N25COVB6bmZyTlZYT012d0VCTUhkNmx1VFpxMjl3YXZlRmh3cWpueFhrWTVlbF94R1RLUVg1aDQ4OWYwM1VjakxLYUlscEFCS19oRXJaRjRsSnF3NDFzRTNsYlBYczBLVDZBTVBTWnBOY003Zk5XLUFIMGUteEJrYVdmWEEwYUxDemloZnBDSGZEeEp2My0zME80TVpuaXBVMDJFSXJjdXhqb28tU011cFdHcmtYX1E4N014SEZOYXlNQ1VIcEhvM1RxS0tuMk80cWduZ2xZNVl1NEJMZkhTbUNtbno1TzRrTUdrUUJ6bVhHQmlrWWFrVHpNNGxsVmJBbmdDRjlmaTM3OUVpWW5LRW9Tb2RFTm8xMjJELXYyMk4zbnZUNUR0anFmOW5qcHgxODgzYWI3dHpoVGY3YzRKZGpNaXFhQXhEVno0QkRBaFlZcEI3MTFFT2labGE4UEwxYTVZZUhVdVMxeGJUTlJuUE05REFSRUp4eFJHX2RDZkNNVXNBTDVJZGJxdTJvYVlSbC1XNFFOLU5neXRyV3NzQTN5OVJKVjJoaXNOdWNoeEg1RmVPZ2YxSFhIenN4ZnhWNHYyODEwYWF5dk9DQUlrVVlWQXlhLWMzWnk1MS1YT01DRWR3QkJGMXByckNSblF0ZklRSzByRGtzcUg5SHRmVmM1T3VtMDJTUWFjSnNlTmJQd2JvODhlQU9oS0lmSEVUVkxlN1BHX2RuSXl4OEhSSTN3Ni1raG1kR0VZa3p5b3pwTnpjM2lONXJSUGlPTlU1V2dXaHlVaTRGVS1CVHpMbWp0UlZNSFFudmpXTVUzdmV3eEQwYTctZ2QyQXRqX01lWnl6YXZJNlFKMWk2YWlaR0FHaU0yX1R6cGFfRml1Mk9XSTREVUh0SDlrNWljX09uOHlBVHp2bk9ORlIzS1hLRlZMZHk3WGtkMGtVM292a2lhRFhCcUZxa0Rva1ZQRmtzVVFWelR0cnhmeDlTNm9kelZGX2ltb0Z2Mk45UDNZNUJxNUhzVHJVeEpoMVV0Slg1OXN5STdVNDdfYy16Y2pUTWpmeFpJeWEwbjVTVGN6TlZHZ2ltcDUxN3NJZjNpLUJQQjJWeWs4c0pQNGhXU0VHLTJ0N2YxQlFEcG5uaHRYQjl0QzZVaGktWFp0cVFnaXNhdHJiYXY1RFdnT0NpSTBLd1M1SFd3OTlLYmY5RzhuSFFvb3IxNVNRQlNvN2REWHhnbVdocjg5dHBfVFotZS1fcWJlWHlYZkkxaUtGTGVhaVdndjV5RXZCTkVZaUhWeVRtZHBYOFgtaG1FbnpoS3ROSnBSNk52R0I3QkI3SUM1SXA1STUyazhmMWVvVGRwN1ZJSWVTRm9rUTkwc3VNVnFrejZLQXdWcnVCUWltWDBlZXRJenRyNHNuTWwxUi1WdFIzbkhMRFZfdUdGOU9YYllUdk5xUm91b0xoZ0czMmNFeWRfR256d29UNjNpTDVoamdPNmRSeW1fWjhOU25rRUhIdFlwVTlGeWZpMFhPVGV3SFozSEFPekZXX1VuOXo2WHFqZUpDN1ZoYUJoQ09oUGpPdlp5eGhobkk5TTdPTVBKYWZ2R2VjTnM5aTNlbDJGclEySjR1SkMtRlFLNlh0V1pEaURNaFo0b0JxZ0lDdVlTQXZSNFo3VGIyN2IzU0hzVXpxZUgtQ2M1d0U4azFGaXJjdmc1YXM4LVBBdmRkM1JpRVhJQ0k0cEttX0lTbF9TMnl4Vk5Qb1N0cjJWX1NuSEhrTWYzMnVmR2NwOUZEajFkTFpNUUhLREx5TTQ5NTZubFRyXzRHZlB0cFUzbW00akRxbUxVRjdfcGZNLVQ5b3ltNlEwTG05ZzlCcF9KWlc4Q19FdGxmMDBEYzdiVFJaVjZrSWZRX1VPRXNhRG9obzVTdU9XeHdnQi1HRlZGTVlCVG4yOTRfX1hMQklWdl9DTnBnY0x6NUFERWJQZ0d3a1ZWWE0xaG1TSHJlcXhqNFYycVJLSTVhR1FzSkFwa2pkXzUycndYNnZkMGwxclRGNjhXUVZwWXpMczB6NTFMWUdrS1pyVGswZ0NuUHhqbnhOMzJZdGlRTEpEMTZCbDUyeks1MUs2M3RLQ3R4TXoxdGliZWw5dmxkTGtYYlFXbWpsemxLVDZFWllQM09DZmp0bXphb3I4dW1HS1pVLUZVQmRDeVpUMlJDWGpVdTdfcENYNTdUeVNBYWU3YlJkVmxXWjhGc0QwV0U1bm9oT0hNRjVZenhIRm1fdGVuOUFsTXMxZVJxLV92ckgyNnhESzdLZHZfX192cnYtSG5BWjF1TFBpZnRLWE5FUVZXMHRseldhRGpGYm9fUW9ySkpYc05RZVQwWExzWGRXMW1hQVNlSHhlWHF2cjNJUjVKbG4zUU5GSGw0MWFrUHZveDBtcWJiVXlqdHRqM0JMN0JFS3ktckkwRkR1ckdVSkdhdW82YnNackJ4eFRRSmNrSU5xZmNQeFFVMUpvRHJCSWVfdTJrd0tyaThPLUJfbWx5NUJvT3E4MWpTUHBYbDM5clV1NnlfTzZhQko4bzlnQ0FLN3NPci1iV0lXLUhuYXF0a0NhcjJDNFhBQzJoQnlCdTZJSC1CMVIwbkU2SmJheGRYdnpYTktiaEhfZTNnTkkyRDJxOFRINTJTSWVtMVYxWHlmbUNvRGRkb0lmT0RVVzF4Ni0yR2xidFZHVjNCXzZwTDltWXlTVGRpVXcxS3pzMVVQN2s4SGVhMVlmSlI3THRfZG5vUm9SLXU4NkVPNVEzZXkwX1NPbExKTks4R2JvbzBQejFiRVhNRG9UZHlPTWpYOGoyMGZZWXBCOHFNWmMteTV0cWNRN3V3VVhDQ2tRVU9vMWFMd1FJdnpwNzFNTGlwbXRSY2xYdkpUTFZYbE9oLTdRanBlVjVJdzFDcnpXZUJ3NkgybndIUU53NTJRYWszb1pMY3RNaXVUWVhpek5WZThubDM2M3RlR1FOLVpzamZCRXhUYlBRTVVzczJxM3QzNFpYZ25qVlllQ05ZdFZ2MjByWjFsODhjQ0FKUV9XOHdZSS1INE42OS1hT2RMSDNVZEtYSEljRnBZMEVaUmlFZTI4Q2RoRlprdm5BeXB2QVgtbUFKdWpiRFhkY25RVm1NbG5saWxjRXFTSFZ4ZEQzOWFhcW5ZSXpKQnFVWnZudkdtMXRwM0ItZ0FHaV9hLVIzaW5zbjhTSGZfdVRpVFZxd0FTX2JoZ19lcnRwbU5uLXU2TjFOMUJJQWpBR3ZoRHBCYlpPM2VQYVpkNlFfYW5mdzVZZk13eXprR2RRMHFsMDMxS3FfWUV6b1VjN1MzYkhaRmk1REpYaTljaVl1anpPcHhpLXNyb1ZmWm9tZzg2T3hoMkJHd0FNYUVzUkM3bnFqWDNYVmZPdEo5RzN1LWhCSVd6RC1QNjRsME5VemZQSWRyVU9KVmduTHg3TVhMSlJJc0JhUUd4X21FejBXTlY3LVNvdTl5clBxVkJJV3RsdncyYlRrbTNzamVWdTVLV3FsemV5WmZjaks3YUw0aWN5djF4enBVbE4zVHdaRXNtdWFNR0hTY2gyVWduUmp0N3NCb0dDV2xrYUtIWXU1aHdWMzNQeG1mcEItaXRTcmsyX1NhT08ydGtoNzNfbDZOa2x6eVRMNWcxYUM1RDY2RWpBSDNjNDYybUp3Q1dsRVY0VTB4R01kaUJXNEljWjVTSmtKOGsyaHIxTjNIbTlpTkxZMlRtanNvbWlvZlhvM29EMVJMVFZqYWpvQW9mX3FUVzYwSS1xZUluYURrUFA4RXZ3ak5mYi1QdjBVYmdubVhnX1IzTmVHY1RpZXgxV1ZRSnRBYTlaOE1qb0NWMFRIdWxTRFhCWGZ1enIxV3FFNnlvWlVKNnFxWFZxMVpXYzdNc00yTUx2ZGV5U1VjRkdVbEpBQUVSWUluTFBfclNWT1k1WW9SdTUzcHJjMl9vOHdTM21paFNyZDJWNEptbGdERmN4V21EVlFDUUtxUGo2ekgtZWV1LUpDMWdaaUZxd0xOVXI0MWpHdzBvdlA3SlE5NTI4bW9PeFMtMTd6amxvelBGQ0o3V3M1bUU2Nl84N1ZlVS1Kc2x0aUdnTXBzOWxoYlllVHlvRUNUbzRxV3VfWWxDZUhQSE1ZX3pVVm5XRWpObmtPc3lfcVM1WDhEY2I4NEwxM3BXQmdsMmRjWVVTSGY2UGxJV3BrSzNFVXItc2RLWm00aEVlWlMzUVpGOTBiTjZBLXl1RFdMdGplVC1nOTQ5ZVFtVllEQWNDeS1QYXBsV1Z0RklUNHZTekhqdVdWbGpUWVNZb2NDSnNMRTI0MTZQYkg5aUJ0ZTl4eEpMX1JhVFg0eFktYmlEdjM5OUl1WHhSVDhjS1RkR3QzdjZhVHEzSTVBYTQzcV9BOWpKUTlEMjdsenpiNTZjUGpWVnVKXzJmdkNZTEVxNUU4WnNaN3l1MGFnMnBZclljM01IWG5NUy1zUHZoTjJKVUpPRmQ1ZmJwTlNkSk50ZlVtakVpb2ZlOVRmWVY4TFU1Ymt5X1pwSmZkWi1Qa1NHMm5abzlCaDVVUEFETnljanJqTEY0c0RHTmVfRDlhYlNkM1ZIMHZfS3ROMkI2dVhBQ0JPdVFpYmZ2ejlGY1JDTENDUV9sMTNhR2t0WS1PNy1USlphcWFnSVhrRVhVb0ZqaFZPNTV3Sk1MNDZmQy0wODNtdGVEakxQeHdrYU9TVUtzU2ROY3p2SzEyNW9kYWtfc19weWtCbmxyV21GTjhzdmlTTy1RSlc1MkhKcFJpUHhfMndsNGJlcUt6UjRsQ25oUWhkWmp3d0RqTzhzU3hZeC1Bc1dVOGo0MkdyMF9sOHNrTWVrNS1CSEJKMGNuRUMyRC0wMlR3QTVieU5YYXI2dktSVXBVWHVPeGZxUU9FUmVnYVAwS19RRzRtRDRJTTFmTk9fT3VWQ2JvRHQ1enZSU1JqbWQtTnVzQzVfVzVfM3hLSVZLUE4tV21zY2hoZmNuTW9PSDJ5UG83Wnp3NnpEZHpFOV9VRkk0WnJzWXNHZWdpaDQ0VjJlUVZfc1NPYThfOHJFTVVFODQxTzFRc01XbHpLcVhRZkM3X1k3NzJBdmhZRzBHT2czamlBODBFUW85czNiM3Y4RUotSmNiS1N0QjB2bEpYTjFDMjdKUWpEQlpLNkZ2QU05TklyeUJVOHFGSFBJZ1FGRVVjbEFTQVhUaDl0WjVFci1SOUZDclNFX3Z5QUhPdXBjOFBHcnFCcUtxY29kWGRBMVNnOERxYlhPMGNnOENCMGtaRE5jNkYxMUR6VXRNdzJBbzlfNDEySk52UmpDdXptM3ZWVG16N0hfRHl4SDd0VGt3YzNUb1k0NTBsWUV4YUhUVVNnQ3hFSlNEbVBoQWR1NG9vWnZnZ0dBUTViaVFKc0xRUTF0d0lnS3JoaTNiSExvQkVtYmFGa1huaXM1dkNIa19xUEFUS21TSlZtYkpnWWNkVFFfbHl4QnNTRG5GdlNkRmFYVjlqZWI2aEN6UnVlUndxTlQycER1QzhNTGtOQlNYbUUyaFJrNUVQLWliM3pBSnhKSmtzcGxwV0N0alNBdzRBamRfQk5iN09KUG9PdnNhY3REc3BjUnFMSC05SER6MWxuNHJ0SUJvU0V0QktQZFJCdVVLNTZSbWExLTd3VzhKQWJOMWVJZVZqU1dKdW8tdmVwN3Q5Nl9qMUJ0YnM0bVQyaG9MVHRNeXlHeUdWbnhuczgwTDVkWEtqdUl0aWU1aUduQ1NEUlRrdHNUYzNkWmh5X0gyZXdiMHM4RXJLbTg2UDRHNHhwTnUwQzJJY1J4TnI3dlg4UmduR21KVkxIRXFGMUVMXzVHb1p3bXVuNGhlSUsxMTJGa2JHOFZTQjluN1BTV1RxdWgyMUNXcmYtMUhHdFQ3emxTaHlwRzFoVG43UlU5NlhITzJsR3VQUEhNV3RBd1Q3cUxqM3R2LXQxcFc2cG1SM1FES2ZuejhjRmZUZGl6Xy0zNzZBM3kzbG5Fc0NIajdGc1N6S3NvQzg5S0xlNVdrWkhNZFB4TVZfTzJ2RVZPV1M0cDZKcEJ5VUVJTWVKMTNJYWZ3bjNkTlFHOUxZOEtwVkJaOWRpaWJpVF90WkswczRnU3p3NU9VQkhleWR2UEtXV0RwTW13dng5SDJaVzM0NlhvdzBLU3M1UGg4a1VvT2dINHo1a1NHekdQSEh0SnBrUzQ2eHFfbGZNRXdScUsxbXZUVWswR2ZTWE5hWlJqbjdmU01XOGhDVnVVNE9LSGpsSDVpRGtvYTJGYnVBVWEwRF9BN3JabDQ0a1hLbEIwdzlQSy0xX1JvcFlpX3JweW1mQkt4WEdqOFQ0RTBxUGMtdDlOcjNtWHhoem9qbVkwWjliTlFEWWQxa1Q3VjBKbkNQNkJGYmFJUFg4SFJkSHYxTngwQW1jQTZiU1dmd245OUlVUXJ3SGFVTWxCblY5TDdlYTNLYXRGTWdidG9DZ1I4M1BIMU04c1lfcUczbGZ4NFdLQzFXV1BqelQ3NDRld09JV21PM2NHSVpidURtbWlwVHJhQ1ljbmozVmdqSzF6WDVoQWxuZjJTYTg1X2NLblk2dk5VZTZBM2lnLWhNSy1DNmd6eWhaemlSSkVJSXp5NWx5U2w3d0V5aVdFMkhEdlBGQmw2bTlaSnRkVlZMRWxsS0kwV1N6a3VOazUya2hZQXZYMXhTUG5vWWtxZkVNbzhPcC1oU1NybVRxOEhVTGhWa21aTWc2cElXbEdZN3hTOGM0UlVMMkZnZUtXNFUtcEE5aENwSXBTalEzcUpKT0R2b3kxeG5JRWFUNVVjSU1pRHN2eE5KcEhsM2xsemRMNThQdnVhSlhBNUwwVkNGOWo5d2FfNF8tVnhKUTJVWkVuVGhUczcwTnhNcXZYY2NmV2pGT3BSMHNEdkI4azJYYjFtMDJYVEVTb04xT2NkQjUybk5sUUE5VmNtd2FXcXd2UWVjYVJmMGo0dFFXWUMzcXpta0M2eFJwcTZ4elhkM3A1U3QwNGJJdGlkZUN3TnNJUDRadENYMXY5YzBRSEhsYmlSanItQUtXWHdXVDBQTjNBVmtTdzIycUFNVkZCc0ZfeXlfZXRMYlEtWDdpMjkwTmhud0poOHdwSi1CTmtHYVkyM0JVNkdCbC1hUnNYRVEzY3NYdnNIa1h4NC5XQ01KMS1aeDBzbnNMRk9CV2VqODNB"}'
    +      string: '{"value":"JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLkJPQ1RHX2xjVUJYWkVuemVmSnZWNTg2VlFPc1RXdm41aTd5NXI5NkJ5Y2FNeTdfRVp2a3ozWTEwMGJQYWVOb1dsdmQxWE8wQzFSSE5SdUkwMjJ4RzVEcERsc2tEN1pJcThsT05EdHlRWnQ0c2hVQTZlQzAyTl81aklZb1ZpaWROQU5mdEM4M3VPd0xCRDhLS3BQQk5acnlnMVloY0ZzQnNONmNKb2ZDQU03eXFhMFI0cElrZTZNZnVFZVk4a004c1pyQW84N2dWazN5c1J5VW84TldRUnJTZFZuRmhUOWdqWnBPVk1JUWN3X0toekQzM2VGYmhaNFBzOXFYS3JoLW9ON2xfUUw2OGpjTXp2ZUdLck5VM19iSE1MTG12WDZSeHhhV2ZTc1dQcnl2cGRpWnlaWXJSd2tMSEl5SjhCRlhWTWRVSWg5am4zUWt5VlJZdjE1a0w4QS5FWEJOWG1WYnJWQlNJamdlYTdoNVJ3LmNkNzdJbm1leFNuNzMwN19FWXphU0RBems5TzBhWkNOcVpGSlJieHlOY2VRYkM5ZkpVaXkwTWxVY2N3VFhESkhTRXVpSnJDSFlBVzh6cTZScGZhNFAyM2owbDNfOExOd3FXUmE1RDJwV1N3TkhOQTN6empuc2xxMGxzLVF1SV85RXBPVEtEUDk3aEFDTGtES1MyRFpqeld2VFgtVjBMNFRNMWhQUzVzU1BseDVyR1F5RVAzNUY0OXE1YWNuQ0dZMi1XaHkzWFVob0lQTENKS1RvM18zU1phcVFDQlhITmI5RjdzcFBUNGZ5eC03Wk9TUFJ0Vm92QXdzdW5COFhlakUzUEI3V1dORmo0UXJwY1lOOGJlVGZEcUptNTBSSGN5T01OYnRIX2kwRmd0Q2ptczVGUEJQRUFSNTNsbHYyLW9ZVTZ6cEpkd2hBajBXNkh6dGRnbGcxdWJVVjdIa2tnNU5pdTdrRUs4ZHJJVTZ2UFVaUUxvcmNtWF9WMlpReTNKdkREVi1BRjRrSzZYbExJdGRQa0o2S0s5OUM0TDIyZzRwRTF6WGFyVnRBQjF2QjJka3YwV3RnakUtQTdkOHZZd3hBZTBYZE1yZ3RWdnA1YWxtdnVMa0NyWUxQQlg2azZLSXNBUWJNWDhpcFdfWnZnSTROSFctNGxJbHpFaVNXbEtUWHM1ZjBDRzdxcjh3QXlyRlRUT0lScFdvMGRYOEcyWXdOSjd4VmxDRXZVdVlnWDhpSEE0cENTbllTTWxqN2pZOEhqLUFzaHdETjBDOE5iOHE2QTU4UzlzOVc2bGRrcnpscVpzYkdsVXA3U3ZDMlMtY2Y3ZEhYQmRKZVJHOUFocGhzYXFxa2d4QmNZbFVER05pQ1VJXzB1Vy00d2UxSWVtb0RfRWlIcVdSMFMwTmEwNmp4YUZoX3hIUmVTbkUwYWFGU0dNVnE4RkFOZWRpWW9fcVFIcWRNZm1GM25TLXJMQTNzWS1nRmM2LXpLWVpxcDVVNm5MVHFJUkY5Vm5zM1dta3M1MlJxQzVyaFZkUnRqSmlxVFlJbmRtc3hPMm1LNmM4SllYU0RtcDJTQWdHM3BjTU90M0ZTb1dfeWRMbHBUamNKMi02N2pmRmEyMGhnazNJM200aDFwak1GOEx0VlhmZVphcHZKT1I1c0Z5MUQ0dW85YUhrQlNpTnZpTGtPNUw3X0NTaDJtazEyM0pXa0pSOHZaXzZyckllVndOS213QVdocnN5a1JmUW9wQzZVU3JVZGpLQ3AybnU3YUhZX2k0U2Q0M0FGdk5waXZYWWVkbXU1NjN0a3dMSUY4aDdlTGJvVFFjNFRjcGRqR3pnS2o3SnJReUtNeXpweUV4c3o2NnItd05hVVBrZjh1NXVqWENJcGZOdEx6TE4zbG43S3EtZ1JtdVdlYTQxS2NtM1h5R3lwSHpOSEVlWHhGT3BOTzNVbFg3WFk4TXF0b3EybUdRSHVLeDFIZlpmbG1vRjhDdW5oem5lVzRNY2Jac2ZkLUZBNTVRYm9Qak9RNmlHOXpsQ3hlX2tPVXlpbUlZWW5sQ0tndHl0ZFNSWlJIS1hfejBTZFI3MElKVVR0TWxOZFNOOFpLYzJveFpwR0p6dk03Z0lBaDRpQndCRWdrWl9aX1BSY2dTZlZJQm9xY1VKakR4X2Mwb3Q4eTJ3WWRuUjFzczc5QkRTblVIV1AwOWprbi1mSWhSZDktYlNnZWRKUTB1eEt3b0pUSXI3aGJJM1RCVEY4ZmUzaXJscG5sZ0IwY3RBUE5BYnlyQjF0azNBdHYwMU1aQ1YzLTVKbHlIc01HejIxTHNKRENxT0tUOWE5c2tFRlItMTkwVTFTMEpHSURNLXZJTU43cnVuVUFSU1EwSjdPcTdMWUFnVU5rbU9BaElpQi1IMFFOVE91bGFORnRtUEdqT0VDTl9QbF9Sd3pfUHAxMHh1Z29raC1sblFoMHN3aUZ1dUdMdG5oY0dVZDhJTGhiTVhQcTR0T3dCamloS1VWWHlUb2VTQ0VEZVhtVVRCV0ZSb2VONmNTQWdBTDlhUTV2MDhuNm1DTWJyc0NCRE5yZm9sMVQzWlFaRnBiMnNYNFNONS1XdEtRMXp5RzBEQVZtVGhWZjZKVElTNEFocGUyazVFYm05dlhIdnZZcXQ0bDVvbFZ0TjZFNHRrSXFNNENfc1pXV1VwYkdNbmlXbjVYWkpJdDRDYkFWMmFBVmlybWNFdm1pX01qMUhHc1FsbmI1UThRMGZ2elZRVWd2aUpMWWp3aHJYMzFDTEZ5aVhCYjgwVzF5MkVjU2hCZHhnaEE2bnBIN1hKV2xCOVozNlpwLWRyVnRINFJHaWp5SGduTFhEcE1YTWR4LVpTNUM2QUJ2bVlwM1lDaU1UQktpZllkeTFHeDJUam1XejlHY2N1Y2dpajVPcU5uUUZTdUxwSnFtOG9KUDUwYU5XSFhqU3lIUUtueGlnZE85N2FsNWsyVEU1eGxIZ1F0cWM5X0N1RUZaQm4yLWV5XzJfRmdnWG9fZDEzNDFYLTRuU1JndklmVy1mcGtnLXhyN3BfT3hSZDFVUjNjWGljbVdMbGJYNXhHOEs2VHJKSENvSDJzcmlZelhLU3pRY1hSMWNGNlJEaW9DT05lMFBBLTlhRHp5Q0ZockowYUo3Q3A3Y0lVbklwaU5IUlp0Q1JQQVAtYzJFcTVQbWE1X0NnNUNvTWlEd3pQRGtreV85UWdxMC1ReVI2VkpVSzhRVThjU1ZmY29iNGJjMFI3MGtmN241Y3JaVGl4R1pHY2t3MXh1VldqZElwR2M3cG1YNThubWk0UXo4eUh3cWt4QUpZVjl3RWxrdlNCNWo4VllySW90QmlXOGJjdExRQjROT1pzTWZYS0IwQl92OGhMd0REdU1GM3dIbElkUHAwYjByWFZCVUZDYUNERGstNWNPUlk4bzhNWVdoeWJMYVhSS0RYUWdWZVFNN05SSnUxQWNBeDRjdUsyRUtBV3B6Qmh0N1B1QzZVTlFnSnhXMUZTVE02OElrMUpZQ0ljQW1tLW1yNThHNnhfWWNDQ3FCbmFOLXR3ZWQ1QjZHX2JnUno4Z0pORkRNZm5fYUNyN2pQN0dsUHRDQjBWSWhuUHBEQi11R21FbnNLMWF5LVZjaDRaTE93QnBiZmZpRFI4MW9nRG5WNDVDRjNwMGdISk0tTkV6ejhZRmtJM3lTbFVxTjA4MnRDazJ6VFVnTmRvejlxTTFSamVXU05RQUpWOVlZYXU4QmpXWF9pWV9adEhEVXc0OGY4cUhaSXhEODBfRmxGMk9PRzlZYlpON1Fsc1g0cDIyZDJ4VVc0VVNuNkNzUTRnTy1zQlpBUnJmUkZfeVFodXkweFd1clBIck1tZWxtUEtkNkhGYWVKajdQUlRJeHRqc0NFV0ROQm83RV9uSmdFajRmaDk3TTI0T0NOV0xCa2dUYlVkMWhpcHBMUFdvU0N0QU1UQndHaDdwSnFvSzJvUkJnQjJOVmJjQVlfN0tlc2lodkdOXzNsazlkd3BCTUh1UnB2czhRTk92SmpLQzREQk1wVUY2LTVDODJkaERvWXZQYWdCamwxNFdDTHRGdGktM2xrSTd6SVRMQlJBd0R1cVJwa2tIcGlqY2gwNG4xQ3JkdTZFeTNZY2JyMldzcnFscFFoNERJQ0k5d3VjOFJDZzFQVUZyNjg4U3lzOUF4NXlvbVFDaXFMa2J5djF4c3pPOTZWc1NzQnMyd2JWYy1aU19Yd2o5WTY3NDIweHEtUWJ4Y3J3UmQxWEIzMUNEaFItRWFpMVhHLWk3NWVLWi15TGZzcVJpc1dOai00ajY1Y1NfSVh2Q3VGUEluSHV2aW9QbmNmdWF0eFJtY2E4bV81MHczX3ZpNkFmRFNMdndxTEgxTFFxUVpubE1iYTAyMzhsbm4xanJZU3hCdGpGVF9FNXNQMGhoNUZPcVFPaENOdTctNnR6XzdZTmhrQ29DY3JoRFI5NUZyeHNTbWgycjBSNFZsNkNPU1otOE82SjdxSm94cF8wbHQ0Y2wzQjN5N2w0N3ZrYlFCNTZXRUlYS1ZLbl9naU54SnBUdWljQ000TVkwWENxNlRONWxsMTl2OENzaG5nZ1NKSEhXM04wbWhPVDNVYk5PSDhuUURNRWFPU2lrdFlPRGZIdVprSWZITVIzaThCR0JnMUxpTGFpV2VNTEJrWlVpLXJNQ1VJeVc0UUVVMFU3cmtCNEJHbU1CXzVuZXdrS1dtamJPRTk5UTk3RUN2UHpsLUlYd0d1SXlNRVBocS1NMWJYNDFRck1mOWFFMElHV0lGRS0tMWNFTkozVnFET3UwUXNYNnhJRzl6T290RzBSM21ycC1aQnA1VkFNaDBNZFczUExXUWxmb0RWY00wU3FQR2xhTmxfbHlTRXVXUktFOHVFck9wZ1pNQXhYbmh1LXkyY1RKZzZRNTE0Yl9PVmpwWXphSjM5Z3k2Y2x4WDVsN1pna0xUWTZBcVF2MHB3c3k3NkpSejkwbk1LcldWQ1pUaWFrbFRwYm5pZFZJb3BPUnNGaVBqaUwwQTRIX1dxOTRzMmw5dHA1bXhJSUtya0h3VnhnN2N3Y0xzQldsY2dUUmFScUI2Wk1zTktPWFNmSzR4UmpNZVlOMVlvTkh3b1VWUTI0MEY3cmtscnhaS0NVOGk1N2podTVfcVVfZ0huaGdSMnFqSVprdVpfNG5YUHlucjBMNC1tUXh3Ujc0OUd6UjFpVzNWMXFXNUlqbjJxQ2plYXVoNVVRVklQUzBUdm1TaDNCdmNWaG1LWUM0amhSTWNkTktvX2ZaUWRCTU1yTjh6WHNjTjlkT3RBaEk0U29jb2lFT2kwbjRsdnY3TGJsU3A0c25YZXBmckZTQTEzTzhoZlFXUEg3WkNTS3ZwMXNNUU40NF9pV3UyYldWaFhnX0RxdkhYR2RCU1ktN2xGUWhKYlpBTy1Nak5MdnNLVm1aSmtCeURwbTZ3YW5kODFzQm1oNHBrOGo1NWJBTTRDMy1nZHF3YzQ4QWJMaXNhSmIwMTJMbElfTE1VNDlNeEV5WmJYSzlfdWdpZFNsbnZta0c4R2s0QVNwOHo0MUhPZmM0RVJWaFVjMkVsTmE0V3BqejgtNXg0TmFFTE40TFVweEhYeWVzcEtkazNYa29tRUE0Q1VIVDF5S2VuWjZLeVFmdUZoMGxORzNydlJYS1FvOXdBMEY4U0REdW4xZ2FMaUowR1o3WTBoYUNFRWtMN3p5V2dSeHpJTzB1bUhvNURwRnQ5QTZnSEM1WmgxeUEyS253MFZxSDdhcnc4aU0ycXR0ZGY5NDFGSE1ScXNBdkw2ckZMeWZfWFlJd19Jek92TDhnNEFLTERHZUJIS1ZabjJyTHJFWnV6QXpiUWh3NTN4ZGdrRk1LQW9ZVmREQUQ3N3NEWF9pamJyRXc1ejVKU2JmZExPVm5wMEV4ajhQX1F4RWtZZWU3TjZVUHR6cWJmTWc2QUdVb3pEWjdVUW5BM05WZFFRS0FGd0NXdkMwTWRpYmlwUE80eDZlTXc3S1RRZEU0S1lFZGk4em1qcFk0S2JTNGlTM3pMMERYbk85OEdlT3h3V3RNVzRoOC1HZmFJT0NlemJiWkU3R21xNlNWM3J5cV9IeU9yU0dRSGdRclVBSUFWemhvUUhSWTFPOGpoWTVfUlAxMDJhWElyTy01RmQ0TTdTLUllcXEtLWhIeGNzaXRHcHhvbHlKNy1ILWRLcmw3ZjU5b25BbVhwdDN4dVZSOG03QWJOVHpOejdDN2drSXlhak8yUm5ZMEdtX3hlZkw2dkREbE14YUZtYThyZVo4ZGJNQXEwSzBBd1dNbVJwcVVGX3d3TTlkdFVqNW5sX3I4V29VUDc0Z1dDQTJyX0loTHdhTk1xVENhT1VUN3Z3UzY4bUlUT09WYmthSDAxcklmSlVtb3FSR1p1Y0g2NTI4eFF0QkZaZXVXOENKdUtDdkl0RTRBM2ltOE9nRjZBcGNabTZGaVpvcnhHWm9QNW5ITEY5b2NIZ005UGJVcURJLWJFaEJLeDh0eHNCenVZa2N6UnE0eXdqbHVTUjFUZ3EtYWhFRFNkWjVzd1RzRHQzbjJfN2dRb2txQTZmdDJzX0tva2JqZFlWODM4ZGJhMXk2NFE3RlZnd3FjWXBJa1hrMzFBTHFtTDg4dmozUERER05ndFNsSGlvS3Brc0YwdGtnUjQyWmZUcVR0NlBpUFFTMGFWeUtHVnc5T1lUVG5VcjNKcVhyUkhYS1lhODNmcjVGbm5wREl4dWJDN05DVDZIdDVGazZlRTB1ZVBxUlhjUkFJMDhqTVdzOFZyWEtveUhsNmplNmZ0c2pBUnY5b2NRV2dIRV80T3RJZk84WWJ4d295MmVuYndQSW91bVlJYkJvYXgzaU1TaUtxZVl4NHdpZzZCRkxlYXU2NDk1TTExSVUwV2NJNnZHQU9PVjNNMTRCQkJMNmhDRGZiLU9uRjBhN096X2dLRkVPNUc0Yk5tYTVCeFhHNlhDWnBXaGhjSTlsVkVPM0lxYm40OV9keE1BakhYRG5sTzJ6M2RoVlF0MEstaGZTZWtzTUdzN0lwNXdtZjdScGVlejV2bkFoVmR4U3dHVzB6ZDh4cXFyNjFJQ1IwRnBaa0F6VnFBWmhhREkwYkFUdHo5RjU4aGVpODdMZkVZMUwtVXNKY3BJR3A1aVd1ZDEtcG9mVE1UeC04UFJpRFZLSHNqRnRJbzR6azBjLThYaDJXODVLYzRqT1UzQngwTmNUcnRxaW1QcFRzQnRwaXJ1c1JROVM0ajJibGtCRTNFU29xT1p0dU8xNVpuMGNvSG0wOTJ2TWY3VWJ2V1AwVmd3U0IwdHR2emJEVnItQUt6QzVSVkliQ0JTbEhoLVNaQ1FIUjVFbXVkYU5YbDBYQjFvN1dBM1pxV2NMV2RSZnlsaU5CY3RDWTJWMkp1ZHNTRWs4VmJyV0ZqdGxwbXZMR1o4T0dFajRYMjhRSHhNQWhxd0lfS2hmYURIRlhPd0JGR1F2M21wX2dIemc5WEU5QlVPa1I2ekRuUWQyOWkxVDN3SWk4Q3hQZEd1TVUzYVl0V0hYS3lhZHhJaTNGOWMzNW5OdXRHUGZ1ZjlkRV93U1g5VXk5ZGlWSkVQbHFnbmVOTFpjQ0ZXQmEzZHkzalRYcEl1MzdhcWlkWHltOUdBZGNEUndSMXdjU0E5T252dC1jQm5kcmFoZ3ZTV09PSXB4RWlNRlJVdlVRQ2hnOXpvbml1WVpsd2hlLWtYb0xZV2NldXg4Zk1sWEFCSm9jV0owbUUxU0JNaWx0VXFKZXJzeThJV0NlTGIyLU50RHcwWDdTOWx1ZFdCbUxNOEVXN0dlTVVBZl9tblctSW9VTWpQektNMlVDcXdiNXlCVE1uTmdSR0RKYVdlMDlIdHRyWmJTbFo5S1FneG9URU5GTU9YM2dOblBsb2ZDd1B0dTlEbTU1d3B3SVJ3OGx0eFpQMGZpY3pMRjZxb1k0NXdvOEtYYVVYU2hHNWZyd3lZZGozNDJRZU0tUHVJU1pLWFNhbUhUUG9zcC1KVVROOXpSdkJDYmlyS2xmUjlHUDRLNTRaYnBMTmJfQ0N4WGJyNllRdjdhOEdPdDlfWEFqeDVHS1UwUjBOSVd0aWlsemVuaHNUM0REQ05obU9iaXhsYWctdnRTalhHdVVPcmQ0VmFoc2xLa3hHZ2VJVWtVMjAwb3V4TDNTUVRGTkZmUG16aHU3cm1NSlMzZHRwbHdGR0R0aDdNeFlrc0JCdTg3UnBhUW94ZENvVGNFMW5DUmpDbWYtUlJ0M3B4dmRHRVF2ZDZiVW9WdmpLa25CRlB1UU91NXF0UzJzbExEWWM0aVlzZEFHMkR4elVKanVJRkNZSHRaRFRLaGczN0l1bWdNN3I1WVg2T3lsOS1ScUtsZ2wxTFB0RHMzN1dBSUhnd2I0QWxHaXJBOTk5OEZKd1cwWEo3TDlJUGg3UEU2OTZyTlNYcjVScnlwUWVzQXFDM1BXajBaZzJvNk1rUExSUlFKUTM0N0xuS2gxT3NNUlJvSFhKOFBwOFpNVzI0MU1pWkpjbGl1Q3pESnlWam9Pb0ZJUFdRY2E1Qkx2N0tBYUN1eFN6eWR2NmhFTlVkWFZfWTdQR2x6LWR3T1hXaG1wNHIxNFE3dGRkTnhrOUpTS3d6VEh5c21UamkyRjdXNVpfZXptSmxpVVBSZHBfcEpLaUhEb0Eta1BDOGZGX0w2ckhOY1JTak5RNU96MmxqbU5ZN1NzUEF2cGtnODdKV2U0WGdyT3NaWXV0eWpQNFhobEc0LTZMdkVGUGVrTzlESWt1QWNQN0dyWUtmX1Z5SHpQZFlWeUhEMExBS2xoRlV3OFV6clREbmc5TEE2cVY4N3pJUXZDeDU4VG85Y3VxSjlOTk82NWtGYm1GWnRFZFFBTS0xWHNnbXFhUUFOZmsxdGZxMURSMjNnZFJNZ2J0VlVnOTdRd3NFWWk0clU4eVZ3bXp1LUVZTnRwZlBxOE1SSkszcmtIQjRaYkhNeGJoc0pWX1NLX1VfWFpyRWdVWTY5a0hxVS1RY3lsLVlMS25sYnA3ckVkVjk0bGYxMkR6MUk0N3hudDR6MHhTVTFSY0phTWVkclk0YXNqRkhSSXNVbTlEcG5xTVBJNDFaVE9Zb3VBTXJLd3MwUzJMOW9nSTFoOXRPVjJjZFUxTTAtRFowM2VYOEczTE84ZDBmdmZTWF9sU3ZjbVg5ZUFVeVVoakdIZU1kbDFEcFJXdE1HcjhzYTZTclFHVmxxTHRoQnlCZGs3ZUgwUGM4Z3htLXJRUEk5WTRtZUFnd1pWV0ZsMzNSQVFKLU9pTHh2N0MycHl1ZDl3VmliYnNfWE5DVGNRUzJRMXVUaEM5aV9ZMU8ySENRTFJuOFIwRUQwNDJyTjJzOHZGNUphSnJYOHlMVVBYbG1PYXRwdG85U19UUXFGc1BFcWpUb2VBX2NrdFhwaHljYndDXzNyRjkxVHB3b2tDT01pNm5ibVl6bDhQdFFTQS16b2RXbTV1eEVCdGVBSEhpTE9fRHo3Ymp5bUlNeE54dkdaRHBMNjk0Y2pzZHkxSUNHRms3cWVtV01mS2N4ZjlfaExuRkFwczlCRTRCTmxXc0M2R0dpOUhJZVpvUWIxRGZmUVk4bXVucjdXQlh1VDlLMVlSaXUzTEQtbGxCRjRDVG5KUnFGU0hkVFFpeEhHY1E0c2djY01rYmFXUmhEYWN4MllQcHItZkh1b3lzM1N2MExwZVhtNGFXMlZzbzlMb3Y5RFM2M09hZXF3RlpZdEhuMUZYXzNvcWlvYTFTMFdqV1loZFQteHZDclFIMFlXZHUyN0RJVmEwMW9uanBPSkZTMnk4ak5FSkN2T1I1cy05T1FKTUtjczFTUWZBaFp6eWhvZ3FxOTluTHNkSFZnTmIzXzhxMEIxNldpSmdlNTc1d0ZDb1p6eU4yS3d4NC14aFkzTjZ4SFJSSGgyTWZIU2Vzb0Y2WmluNmJVZ1FDaTZWY0prRzlTNXVpd2JaSXFTN3kzelAzdmwzUTR3T0VGU04tZnZsckZCMGxOei1JZHZxa21GVlkteU5lMThNSHBVOTVLR1dtNFBRLTI2bTFjV2RtNXlONFQxZWx5eWlXcWRORmxBa2lyZENPaXJxQkZMcTdXUkVsT2FDQVB0aGJGSC1GeTRQSnQ1QTRYRGlsV29IN2lnRF80LXJLczJVMENVRVZ0WWNDMl8zQ21PZHgxc2lhRm5qcWJZNTBxeDNONnNXLVpaYmlrWV9ZRzR6OXd4UWFfVmJLRHZhcjlmU2hNTDROQzAzZXdqTzdDd1RUNUdVb1BTSU8xUG9ubkl3UmNYZUZVMW0xZ2x4UHl6V1RVMjdXdkc2cS1zZFJBZExPcF9nbWdJUUc5VXo2U0djN2EtaWFFbU5mSkludExDYmQzd09lU21QVFgxeDhWY2xtaGVyZy5LVFA2WjZsV3dKbHo0aXdIV29zbmZR"}'
         headers:
           cache-control: no-cache
           content-length: '10692'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:24 GMT
    +      date: Thu, 05 Mar 2020 23:16:28 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iz4mucfmcz7io3xtafoq5fv7.vault.azure.net
    -        - /keys/test-key/backup
    -        - api-version=7.0
    -        - ''
    +    url: https://fc65q4axianrl5bbvo7repvt.vault.azure.net/keys/test-key/backup?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/test-key?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/test-key?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/test-key/8da8f1cb3586404aa5c361ab9d9d6cbd","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"suNLillLGVTZ3818Ix6QIPe6R9PWWCHUIkaJQK65pAT8vFS35cwTA-MLHv5Iw8JgRG-KSJ4D_s9e0IbMsZZDNa0HtYWtNqXhZmovvqfAGyihBaNXzSLcqRGtLUxGkniZKQI_LlCAOedfzPBschA8bbRfBRPsibn-XKNBYVB_FqeeIOE5ziLlY0-RBjfVTZa_sOHVFMWHPYBNAJ_yo1RkpFKkKx2mMxfjG5H83aCaV4v_DI4Xzf6-hagsx1F_lbOvm2dBwR3oH-tCjy6u3QJUda_9M-1EUv-1s3HCoxQOungmBVOrWxL4CAsgR_AJCM7dc0v92Q8cv7Tc3tpxRFgBlw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676644,"updated":1575676644,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/test-key/2ebe8de785fc4101bf85bb4897f114ab","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pfOj87cx1UdSkt5VOKZ7c6LQjXIu4X1ivHe8Xt4wNAHkuogN42ZBvDaEEi8eDALd4P63bnkJLrz5AntHpZKaPG4_Sw0Honz92o4EHLdpoNgTqO4Pfm6KXJRtlbZxW8pOKK8Wb12mOoxf9SXShTfOc5lsvKqhm37OuyNeyTqWfkUjrX4_twVCX97W8vBSpsVJQ8TKUdyFNWXATpKDu2KX-e9hhg6XzzjeEuyif6pwjjr6cDAq-vu4JL8OeBi7JqIzsJZzRWyhWIrSw-hsR0jwam6-kp0pqdFJXGLpg1aWJUH-L65ayhkfpD2BMfHzgc3vcgQGWxh3AB1VK1b1jgT9bQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '655'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:24 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iz4mucfmcz7io3xtafoq5fv7.vault.azure.net
    -        - /keys/test-key
    -        - api-version=7.0
    -        - ''
    +    url: https://fc65q4axianrl5bbvo7repvt.vault.azure.net/keys/test-key?api-version=7.1-preview
     - request:
    -    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmRlQ3dHSFVqMHRxRXhMdzlPakR1M2pLVmlIeEM0Qi1ua18tdmxpSV9IMWs3YW9taEhpTlNqNUl2ODhSX0U2NkpqQm8wRWlHSUlRU2xmRXMxV1NuQnVhSXZ6bVNaVVV3djdkYWRCQ3ZxOE1TbHNhc1Q4WWlFQUVYNTNxMy1xVTJRVXYwRlJtTmtheG8waW5fZk5kYk1ybWs0dnRCY3gyeHA4Slk4NUJBS2RGMHlKanY4MDk0U3lLTTZlTWt6M25TT1lISnZQVm1jV0VGQnVWUjRWUFdqVlBhZlhnNHNSc0RIdDVMRkhKQWtjMTBHR2lIX1JpTlZRek1yZ2xSSVZFYVExQjhuRUdhXzNPRHVKQVpXN1gzcmFKYUF6QkVvY3lXR09JVTBsNmRVSTJweGwxcW9UQ0dMYmZrcE90bTQ4S0xnalUxY0g1cktJLVNFNzNRQi1SSFZCdy5HVm1SMy1xbVNtWjMtSnRQbGdnSW1nLmdjaGFtQkdDMFVMVGpKWS0xODhGbzlmTUdhdWJ3LV9tRHRwTVVYTk43T1dmdWdBOENoOU5fN0xXM3JINXpHT2c0M3pCaWZzNEFPSXN2eHVkQnk0MXJYNVJhX0lmaDdzWEgwcjRGRU15VjFON05XaUwwSnEyazlmZExMblpldVo4RXhySnNyYXZtc1N0cHJBWWdhdWJ2UGxTQUFsWjVuWk1xUEhseDNPbUs4bnRYRVNkLWRmLS1nLUdCTjdYRU1xM0FXdEZTdWwxXzJCSmp4UXJlMVJZS05mcmtQRXh6TFRnSFk4V2JTTVJnSE5xdUs5aFFqdWFMcFFucEd6Ynp5aUQ2VExnRmxQTEV5WmozdmJlX3NZWXUtdW5CczdMQmF3Q0xLOGlRYmgzSWpBRXh3Y1dtWjJaUHpCMmtTTVhLQm9TSzZLSUlIMDZ3WDBBSnRudTR6bldtaWNiSm5rSlcyQjlrQTdSTnZKYzJycFpnSGpKcjlmSDZsNFEtN1lkWVNkNkkwYjNJZkFGZko2bFlPcTJSSS1WRTQ2M0FFWHhPVXQteldXRlRhU04wX3otLU56QU5ONHFlRm9BWFVVRGxfWWs5ZVNYVzR6bW9ISTRIT2UycU5lQ3ZUOFN1WmN1Ul9UX3l6a0JlN0hPWWZVdVdBUjBnOGlFZk5ESTBZeVltUzdGRTVqY0NyNjZPbU9Oc2dhMDBmNGlJS3FmQ09lT2lKZTlpT1pWaTJmZ1ZwMExfTlNJQWNFTkVmTmNQS0ZxeEo1T0doYmR1MDhxVFBxR0ZhQ2VKQjlpV2h4emVnM1hyMHp3YXFKX1J6OFRNU282QkNiYjQ3cTZyeEF1S1dIbHBqSzlfaWJVamNSOXhlQzhFRkJVQlRwaHRBdnBqUXVoZFNkZXFlYlM1QmlSRlZfYlJEeFB1UDR4NWlvT0Z5eGJZYlB1VDdtQV9yVmgtU09leU5JaHhvNE5JQ1JJaGJhOVQ3eHM0N3AwWG1hWmYwSll6VnFDcE1NUjRzX0RsSlBJSm9SV090WkQtM3lTYnAzeDZNMklLQ2FnTVJaaUtQemQyRHRoSi10RGtEN0xFTmFKTERXbTk2Z0JpVkNEMVoxRFZGZzhXOXpsNGo5S0I2YXJUcXdOd3BBZUJpMkUwWVdvTFlKQmdZV1FXeHVpQVItYjdrd2V1aGtSNTVFSGt5V1VJQnBCVm9KTVJiYVd6YzJIN2VQazN4dWc4dmVlanVWR1lIckZJdHVSVWJIR1RocFBpci1jVXZvbEUzQmxuQmh3djlKbDFScDZnNnBRX0N2ODV0My13V3A2R05WeUJNbFlRSXhvRzUzTGhBOE1tSnFoeWRjOVB5M0N3VGRmSWFDQ3Q5RXdzemloMVdsc3ZFbVdycDFtNU1sUndjOGo4T2RkTW5ab3c3U0FseWJPZzBrWUUyZWlXSFAyb242Y0E3aHUzTnRCaURSSkRtaWJiX181cko4cGZuZ2FkdnBQNmtyLVQycXJBWWZUN3VZSDUxN29sUGxtZVU0bllaYl9vWHpoUnQ2blZGcWNvWU5OQVpqdFRsMVpRcE14VERJR2huNFE3TEFhYmFFSGRzUng5djlPSkVtdGg3MzUyMFI2TDMycU1hNFdzRHFZQXJuR0lnOHlrcXByN3ZIZkh1d19GUUs3ZkZXQWZnLVZad0ZCS0ZDX0swN2JEZmhtLU00R0JtNnp2dElBVURsTFJCZ1l1NU1nUUxSS0lvVEZORHpNTXlwcXViWDFXX2FRTG5JX21DTThjTmdGUXNJZkZCckl4ckxRVEhUX1ZuZERwX2o3ZmJuUzAyUW1jd1UzWWdvRmtjbHBtbGtwMTVtQ1ZyX2VrekVMUXA4OFA1Z3NiaGs4dEpENmNDX1RWcFZZMTB0ZVltSFZpeUJpTzJybkthZUlPTDFFNndTQUxjNVV2RnNDTkRnNmRlWTBpTUlDWlBsYW9SU2pFZnhIR1dJNDNwWXRTcE5GOFRXNVN6c1E1RDBOd0FicUU0aVN2UTZXcFVSMlAwdXdualprY2NjOWpmOEpRNlRNS3o0bEpGcTZXb184MDBLLVcyYzlEZ3c2VFJ3blAtWTh5ckFWQW50MnZEVTNDVjdWNE1DUGl0bGRTU0pIWGo1Z3VOaWg5cm84TFUxem1CWERTMXZFcHFXRnMyQnlWWkdEVm5LRGpJZmxNdzVBWVFGQlZraEFIUExOeW11T2F1TXlkZzc5ejN1Mjd0RVNwWUF2M2FITUhRYzJ6dGRFM0htRFZDMzBkMXJxNnNaWk51LU42aVBuWUNsbTBRYzBlMEczX1UtbmlfTG0wbWc2OFhCdjRnWEtSaDJwV01iRFFoS3lBdGhCQlNWVTJnSVYwRXE4ZGxtNkhiNjI5MTVySVFVNTQwdDVyeHgtRUFOcjVOTjc3TnZYbDFRemlOZUZJaWxiQjkxMkFYc0lyNGwyOUVlRHA3d3B0cnJHNm51U21uNkpaUFBGSUtyRjh1bGVhYVZWTU5VSDY5XzFsa3dnd2Z2Y1RVM1lyTWJKNWlMUldnSzhSdl84dUdlUkI1SmJoMVFlOVRhZ1ZXMThfeklwaFduRlVmc3lMNWRrSTZ3SGxGUzh6U0JBdHVHQ2hCNlV6THFRN3dCU3NDNExPQjZmTmp6LVQxSlFsTE9icjlYUmNPenRXem9TTTVGOHY0R0lHUXpOd0xITWVZSkhDMVRpTWlOOVhuN0pzZ1kwMDRIeUFBX2NKaEVmczZzOXBoc19Qc1dfTVZ2TERzQmlpbGJER2hweXpUejh5N25COVB6bmZyTlZYT012d0VCTUhkNmx1VFpxMjl3YXZlRmh3cWpueFhrWTVlbF94R1RLUVg1aDQ4OWYwM1VjakxLYUlscEFCS19oRXJaRjRsSnF3NDFzRTNsYlBYczBLVDZBTVBTWnBOY003Zk5XLUFIMGUteEJrYVdmWEEwYUxDemloZnBDSGZEeEp2My0zME80TVpuaXBVMDJFSXJjdXhqb28tU011cFdHcmtYX1E4N014SEZOYXlNQ1VIcEhvM1RxS0tuMk80cWduZ2xZNVl1NEJMZkhTbUNtbno1TzRrTUdrUUJ6bVhHQmlrWWFrVHpNNGxsVmJBbmdDRjlmaTM3OUVpWW5LRW9Tb2RFTm8xMjJELXYyMk4zbnZUNUR0anFmOW5qcHgxODgzYWI3dHpoVGY3YzRKZGpNaXFhQXhEVno0QkRBaFlZcEI3MTFFT2labGE4UEwxYTVZZUhVdVMxeGJUTlJuUE05REFSRUp4eFJHX2RDZkNNVXNBTDVJZGJxdTJvYVlSbC1XNFFOLU5neXRyV3NzQTN5OVJKVjJoaXNOdWNoeEg1RmVPZ2YxSFhIenN4ZnhWNHYyODEwYWF5dk9DQUlrVVlWQXlhLWMzWnk1MS1YT01DRWR3QkJGMXByckNSblF0ZklRSzByRGtzcUg5SHRmVmM1T3VtMDJTUWFjSnNlTmJQd2JvODhlQU9oS0lmSEVUVkxlN1BHX2RuSXl4OEhSSTN3Ni1raG1kR0VZa3p5b3pwTnpjM2lONXJSUGlPTlU1V2dXaHlVaTRGVS1CVHpMbWp0UlZNSFFudmpXTVUzdmV3eEQwYTctZ2QyQXRqX01lWnl6YXZJNlFKMWk2YWlaR0FHaU0yX1R6cGFfRml1Mk9XSTREVUh0SDlrNWljX09uOHlBVHp2bk9ORlIzS1hLRlZMZHk3WGtkMGtVM292a2lhRFhCcUZxa0Rva1ZQRmtzVVFWelR0cnhmeDlTNm9kelZGX2ltb0Z2Mk45UDNZNUJxNUhzVHJVeEpoMVV0Slg1OXN5STdVNDdfYy16Y2pUTWpmeFpJeWEwbjVTVGN6TlZHZ2ltcDUxN3NJZjNpLUJQQjJWeWs4c0pQNGhXU0VHLTJ0N2YxQlFEcG5uaHRYQjl0QzZVaGktWFp0cVFnaXNhdHJiYXY1RFdnT0NpSTBLd1M1SFd3OTlLYmY5RzhuSFFvb3IxNVNRQlNvN2REWHhnbVdocjg5dHBfVFotZS1fcWJlWHlYZkkxaUtGTGVhaVdndjV5RXZCTkVZaUhWeVRtZHBYOFgtaG1FbnpoS3ROSnBSNk52R0I3QkI3SUM1SXA1STUyazhmMWVvVGRwN1ZJSWVTRm9rUTkwc3VNVnFrejZLQXdWcnVCUWltWDBlZXRJenRyNHNuTWwxUi1WdFIzbkhMRFZfdUdGOU9YYllUdk5xUm91b0xoZ0czMmNFeWRfR256d29UNjNpTDVoamdPNmRSeW1fWjhOU25rRUhIdFlwVTlGeWZpMFhPVGV3SFozSEFPekZXX1VuOXo2WHFqZUpDN1ZoYUJoQ09oUGpPdlp5eGhobkk5TTdPTVBKYWZ2R2VjTnM5aTNlbDJGclEySjR1SkMtRlFLNlh0V1pEaURNaFo0b0JxZ0lDdVlTQXZSNFo3VGIyN2IzU0hzVXpxZUgtQ2M1d0U4azFGaXJjdmc1YXM4LVBBdmRkM1JpRVhJQ0k0cEttX0lTbF9TMnl4Vk5Qb1N0cjJWX1NuSEhrTWYzMnVmR2NwOUZEajFkTFpNUUhLREx5TTQ5NTZubFRyXzRHZlB0cFUzbW00akRxbUxVRjdfcGZNLVQ5b3ltNlEwTG05ZzlCcF9KWlc4Q19FdGxmMDBEYzdiVFJaVjZrSWZRX1VPRXNhRG9obzVTdU9XeHdnQi1HRlZGTVlCVG4yOTRfX1hMQklWdl9DTnBnY0x6NUFERWJQZ0d3a1ZWWE0xaG1TSHJlcXhqNFYycVJLSTVhR1FzSkFwa2pkXzUycndYNnZkMGwxclRGNjhXUVZwWXpMczB6NTFMWUdrS1pyVGswZ0NuUHhqbnhOMzJZdGlRTEpEMTZCbDUyeks1MUs2M3RLQ3R4TXoxdGliZWw5dmxkTGtYYlFXbWpsemxLVDZFWllQM09DZmp0bXphb3I4dW1HS1pVLUZVQmRDeVpUMlJDWGpVdTdfcENYNTdUeVNBYWU3YlJkVmxXWjhGc0QwV0U1bm9oT0hNRjVZenhIRm1fdGVuOUFsTXMxZVJxLV92ckgyNnhESzdLZHZfX192cnYtSG5BWjF1TFBpZnRLWE5FUVZXMHRseldhRGpGYm9fUW9ySkpYc05RZVQwWExzWGRXMW1hQVNlSHhlWHF2cjNJUjVKbG4zUU5GSGw0MWFrUHZveDBtcWJiVXlqdHRqM0JMN0JFS3ktckkwRkR1ckdVSkdhdW82YnNackJ4eFRRSmNrSU5xZmNQeFFVMUpvRHJCSWVfdTJrd0tyaThPLUJfbWx5NUJvT3E4MWpTUHBYbDM5clV1NnlfTzZhQko4bzlnQ0FLN3NPci1iV0lXLUhuYXF0a0NhcjJDNFhBQzJoQnlCdTZJSC1CMVIwbkU2SmJheGRYdnpYTktiaEhfZTNnTkkyRDJxOFRINTJTSWVtMVYxWHlmbUNvRGRkb0lmT0RVVzF4Ni0yR2xidFZHVjNCXzZwTDltWXlTVGRpVXcxS3pzMVVQN2s4SGVhMVlmSlI3THRfZG5vUm9SLXU4NkVPNVEzZXkwX1NPbExKTks4R2JvbzBQejFiRVhNRG9UZHlPTWpYOGoyMGZZWXBCOHFNWmMteTV0cWNRN3V3VVhDQ2tRVU9vMWFMd1FJdnpwNzFNTGlwbXRSY2xYdkpUTFZYbE9oLTdRanBlVjVJdzFDcnpXZUJ3NkgybndIUU53NTJRYWszb1pMY3RNaXVUWVhpek5WZThubDM2M3RlR1FOLVpzamZCRXhUYlBRTVVzczJxM3QzNFpYZ25qVlllQ05ZdFZ2MjByWjFsODhjQ0FKUV9XOHdZSS1INE42OS1hT2RMSDNVZEtYSEljRnBZMEVaUmlFZTI4Q2RoRlprdm5BeXB2QVgtbUFKdWpiRFhkY25RVm1NbG5saWxjRXFTSFZ4ZEQzOWFhcW5ZSXpKQnFVWnZudkdtMXRwM0ItZ0FHaV9hLVIzaW5zbjhTSGZfdVRpVFZxd0FTX2JoZ19lcnRwbU5uLXU2TjFOMUJJQWpBR3ZoRHBCYlpPM2VQYVpkNlFfYW5mdzVZZk13eXprR2RRMHFsMDMxS3FfWUV6b1VjN1MzYkhaRmk1REpYaTljaVl1anpPcHhpLXNyb1ZmWm9tZzg2T3hoMkJHd0FNYUVzUkM3bnFqWDNYVmZPdEo5RzN1LWhCSVd6RC1QNjRsME5VemZQSWRyVU9KVmduTHg3TVhMSlJJc0JhUUd4X21FejBXTlY3LVNvdTl5clBxVkJJV3RsdncyYlRrbTNzamVWdTVLV3FsemV5WmZjaks3YUw0aWN5djF4enBVbE4zVHdaRXNtdWFNR0hTY2gyVWduUmp0N3NCb0dDV2xrYUtIWXU1aHdWMzNQeG1mcEItaXRTcmsyX1NhT08ydGtoNzNfbDZOa2x6eVRMNWcxYUM1RDY2RWpBSDNjNDYybUp3Q1dsRVY0VTB4R01kaUJXNEljWjVTSmtKOGsyaHIxTjNIbTlpTkxZMlRtanNvbWlvZlhvM29EMVJMVFZqYWpvQW9mX3FUVzYwSS1xZUluYURrUFA4RXZ3ak5mYi1QdjBVYmdubVhnX1IzTmVHY1RpZXgxV1ZRSnRBYTlaOE1qb0NWMFRIdWxTRFhCWGZ1enIxV3FFNnlvWlVKNnFxWFZxMVpXYzdNc00yTUx2ZGV5U1VjRkdVbEpBQUVSWUluTFBfclNWT1k1WW9SdTUzcHJjMl9vOHdTM21paFNyZDJWNEptbGdERmN4V21EVlFDUUtxUGo2ekgtZWV1LUpDMWdaaUZxd0xOVXI0MWpHdzBvdlA3SlE5NTI4bW9PeFMtMTd6amxvelBGQ0o3V3M1bUU2Nl84N1ZlVS1Kc2x0aUdnTXBzOWxoYlllVHlvRUNUbzRxV3VfWWxDZUhQSE1ZX3pVVm5XRWpObmtPc3lfcVM1WDhEY2I4NEwxM3BXQmdsMmRjWVVTSGY2UGxJV3BrSzNFVXItc2RLWm00aEVlWlMzUVpGOTBiTjZBLXl1RFdMdGplVC1nOTQ5ZVFtVllEQWNDeS1QYXBsV1Z0RklUNHZTekhqdVdWbGpUWVNZb2NDSnNMRTI0MTZQYkg5aUJ0ZTl4eEpMX1JhVFg0eFktYmlEdjM5OUl1WHhSVDhjS1RkR3QzdjZhVHEzSTVBYTQzcV9BOWpKUTlEMjdsenpiNTZjUGpWVnVKXzJmdkNZTEVxNUU4WnNaN3l1MGFnMnBZclljM01IWG5NUy1zUHZoTjJKVUpPRmQ1ZmJwTlNkSk50ZlVtakVpb2ZlOVRmWVY4TFU1Ymt5X1pwSmZkWi1Qa1NHMm5abzlCaDVVUEFETnljanJqTEY0c0RHTmVfRDlhYlNkM1ZIMHZfS3ROMkI2dVhBQ0JPdVFpYmZ2ejlGY1JDTENDUV9sMTNhR2t0WS1PNy1USlphcWFnSVhrRVhVb0ZqaFZPNTV3Sk1MNDZmQy0wODNtdGVEakxQeHdrYU9TVUtzU2ROY3p2SzEyNW9kYWtfc19weWtCbmxyV21GTjhzdmlTTy1RSlc1MkhKcFJpUHhfMndsNGJlcUt6UjRsQ25oUWhkWmp3d0RqTzhzU3hZeC1Bc1dVOGo0MkdyMF9sOHNrTWVrNS1CSEJKMGNuRUMyRC0wMlR3QTVieU5YYXI2dktSVXBVWHVPeGZxUU9FUmVnYVAwS19RRzRtRDRJTTFmTk9fT3VWQ2JvRHQ1enZSU1JqbWQtTnVzQzVfVzVfM3hLSVZLUE4tV21zY2hoZmNuTW9PSDJ5UG83Wnp3NnpEZHpFOV9VRkk0WnJzWXNHZWdpaDQ0VjJlUVZfc1NPYThfOHJFTVVFODQxTzFRc01XbHpLcVhRZkM3X1k3NzJBdmhZRzBHT2czamlBODBFUW85czNiM3Y4RUotSmNiS1N0QjB2bEpYTjFDMjdKUWpEQlpLNkZ2QU05TklyeUJVOHFGSFBJZ1FGRVVjbEFTQVhUaDl0WjVFci1SOUZDclNFX3Z5QUhPdXBjOFBHcnFCcUtxY29kWGRBMVNnOERxYlhPMGNnOENCMGtaRE5jNkYxMUR6VXRNdzJBbzlfNDEySk52UmpDdXptM3ZWVG16N0hfRHl4SDd0VGt3YzNUb1k0NTBsWUV4YUhUVVNnQ3hFSlNEbVBoQWR1NG9vWnZnZ0dBUTViaVFKc0xRUTF0d0lnS3JoaTNiSExvQkVtYmFGa1huaXM1dkNIa19xUEFUS21TSlZtYkpnWWNkVFFfbHl4QnNTRG5GdlNkRmFYVjlqZWI2aEN6UnVlUndxTlQycER1QzhNTGtOQlNYbUUyaFJrNUVQLWliM3pBSnhKSmtzcGxwV0N0alNBdzRBamRfQk5iN09KUG9PdnNhY3REc3BjUnFMSC05SER6MWxuNHJ0SUJvU0V0QktQZFJCdVVLNTZSbWExLTd3VzhKQWJOMWVJZVZqU1dKdW8tdmVwN3Q5Nl9qMUJ0YnM0bVQyaG9MVHRNeXlHeUdWbnhuczgwTDVkWEtqdUl0aWU1aUduQ1NEUlRrdHNUYzNkWmh5X0gyZXdiMHM4RXJLbTg2UDRHNHhwTnUwQzJJY1J4TnI3dlg4UmduR21KVkxIRXFGMUVMXzVHb1p3bXVuNGhlSUsxMTJGa2JHOFZTQjluN1BTV1RxdWgyMUNXcmYtMUhHdFQ3emxTaHlwRzFoVG43UlU5NlhITzJsR3VQUEhNV3RBd1Q3cUxqM3R2LXQxcFc2cG1SM1FES2ZuejhjRmZUZGl6Xy0zNzZBM3kzbG5Fc0NIajdGc1N6S3NvQzg5S0xlNVdrWkhNZFB4TVZfTzJ2RVZPV1M0cDZKcEJ5VUVJTWVKMTNJYWZ3bjNkTlFHOUxZOEtwVkJaOWRpaWJpVF90WkswczRnU3p3NU9VQkhleWR2UEtXV0RwTW13dng5SDJaVzM0NlhvdzBLU3M1UGg4a1VvT2dINHo1a1NHekdQSEh0SnBrUzQ2eHFfbGZNRXdScUsxbXZUVWswR2ZTWE5hWlJqbjdmU01XOGhDVnVVNE9LSGpsSDVpRGtvYTJGYnVBVWEwRF9BN3JabDQ0a1hLbEIwdzlQSy0xX1JvcFlpX3JweW1mQkt4WEdqOFQ0RTBxUGMtdDlOcjNtWHhoem9qbVkwWjliTlFEWWQxa1Q3VjBKbkNQNkJGYmFJUFg4SFJkSHYxTngwQW1jQTZiU1dmd245OUlVUXJ3SGFVTWxCblY5TDdlYTNLYXRGTWdidG9DZ1I4M1BIMU04c1lfcUczbGZ4NFdLQzFXV1BqelQ3NDRld09JV21PM2NHSVpidURtbWlwVHJhQ1ljbmozVmdqSzF6WDVoQWxuZjJTYTg1X2NLblk2dk5VZTZBM2lnLWhNSy1DNmd6eWhaemlSSkVJSXp5NWx5U2w3d0V5aVdFMkhEdlBGQmw2bTlaSnRkVlZMRWxsS0kwV1N6a3VOazUya2hZQXZYMXhTUG5vWWtxZkVNbzhPcC1oU1NybVRxOEhVTGhWa21aTWc2cElXbEdZN3hTOGM0UlVMMkZnZUtXNFUtcEE5aENwSXBTalEzcUpKT0R2b3kxeG5JRWFUNVVjSU1pRHN2eE5KcEhsM2xsemRMNThQdnVhSlhBNUwwVkNGOWo5d2FfNF8tVnhKUTJVWkVuVGhUczcwTnhNcXZYY2NmV2pGT3BSMHNEdkI4azJYYjFtMDJYVEVTb04xT2NkQjUybk5sUUE5VmNtd2FXcXd2UWVjYVJmMGo0dFFXWUMzcXpta0M2eFJwcTZ4elhkM3A1U3QwNGJJdGlkZUN3TnNJUDRadENYMXY5YzBRSEhsYmlSanItQUtXWHdXVDBQTjNBVmtTdzIycUFNVkZCc0ZfeXlfZXRMYlEtWDdpMjkwTmhud0poOHdwSi1CTmtHYVkyM0JVNkdCbC1hUnNYRVEzY3NYdnNIa1h4NC5XQ01KMS1aeDBzbnNMRk9CV2VqODNB"}'
    +    body: '{"value": "JkF6dXJlS2V5VmF1bHRLZXlCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLkJPQ1RHX2xjVUJYWkVuemVmSnZWNTg2VlFPc1RXdm41aTd5NXI5NkJ5Y2FNeTdfRVp2a3ozWTEwMGJQYWVOb1dsdmQxWE8wQzFSSE5SdUkwMjJ4RzVEcERsc2tEN1pJcThsT05EdHlRWnQ0c2hVQTZlQzAyTl81aklZb1ZpaWROQU5mdEM4M3VPd0xCRDhLS3BQQk5acnlnMVloY0ZzQnNONmNKb2ZDQU03eXFhMFI0cElrZTZNZnVFZVk4a004c1pyQW84N2dWazN5c1J5VW84TldRUnJTZFZuRmhUOWdqWnBPVk1JUWN3X0toekQzM2VGYmhaNFBzOXFYS3JoLW9ON2xfUUw2OGpjTXp2ZUdLck5VM19iSE1MTG12WDZSeHhhV2ZTc1dQcnl2cGRpWnlaWXJSd2tMSEl5SjhCRlhWTWRVSWg5am4zUWt5VlJZdjE1a0w4QS5FWEJOWG1WYnJWQlNJamdlYTdoNVJ3LmNkNzdJbm1leFNuNzMwN19FWXphU0RBems5TzBhWkNOcVpGSlJieHlOY2VRYkM5ZkpVaXkwTWxVY2N3VFhESkhTRXVpSnJDSFlBVzh6cTZScGZhNFAyM2owbDNfOExOd3FXUmE1RDJwV1N3TkhOQTN6empuc2xxMGxzLVF1SV85RXBPVEtEUDk3aEFDTGtES1MyRFpqeld2VFgtVjBMNFRNMWhQUzVzU1BseDVyR1F5RVAzNUY0OXE1YWNuQ0dZMi1XaHkzWFVob0lQTENKS1RvM18zU1phcVFDQlhITmI5RjdzcFBUNGZ5eC03Wk9TUFJ0Vm92QXdzdW5COFhlakUzUEI3V1dORmo0UXJwY1lOOGJlVGZEcUptNTBSSGN5T01OYnRIX2kwRmd0Q2ptczVGUEJQRUFSNTNsbHYyLW9ZVTZ6cEpkd2hBajBXNkh6dGRnbGcxdWJVVjdIa2tnNU5pdTdrRUs4ZHJJVTZ2UFVaUUxvcmNtWF9WMlpReTNKdkREVi1BRjRrSzZYbExJdGRQa0o2S0s5OUM0TDIyZzRwRTF6WGFyVnRBQjF2QjJka3YwV3RnakUtQTdkOHZZd3hBZTBYZE1yZ3RWdnA1YWxtdnVMa0NyWUxQQlg2azZLSXNBUWJNWDhpcFdfWnZnSTROSFctNGxJbHpFaVNXbEtUWHM1ZjBDRzdxcjh3QXlyRlRUT0lScFdvMGRYOEcyWXdOSjd4VmxDRXZVdVlnWDhpSEE0cENTbllTTWxqN2pZOEhqLUFzaHdETjBDOE5iOHE2QTU4UzlzOVc2bGRrcnpscVpzYkdsVXA3U3ZDMlMtY2Y3ZEhYQmRKZVJHOUFocGhzYXFxa2d4QmNZbFVER05pQ1VJXzB1Vy00d2UxSWVtb0RfRWlIcVdSMFMwTmEwNmp4YUZoX3hIUmVTbkUwYWFGU0dNVnE4RkFOZWRpWW9fcVFIcWRNZm1GM25TLXJMQTNzWS1nRmM2LXpLWVpxcDVVNm5MVHFJUkY5Vm5zM1dta3M1MlJxQzVyaFZkUnRqSmlxVFlJbmRtc3hPMm1LNmM4SllYU0RtcDJTQWdHM3BjTU90M0ZTb1dfeWRMbHBUamNKMi02N2pmRmEyMGhnazNJM200aDFwak1GOEx0VlhmZVphcHZKT1I1c0Z5MUQ0dW85YUhrQlNpTnZpTGtPNUw3X0NTaDJtazEyM0pXa0pSOHZaXzZyckllVndOS213QVdocnN5a1JmUW9wQzZVU3JVZGpLQ3AybnU3YUhZX2k0U2Q0M0FGdk5waXZYWWVkbXU1NjN0a3dMSUY4aDdlTGJvVFFjNFRjcGRqR3pnS2o3SnJReUtNeXpweUV4c3o2NnItd05hVVBrZjh1NXVqWENJcGZOdEx6TE4zbG43S3EtZ1JtdVdlYTQxS2NtM1h5R3lwSHpOSEVlWHhGT3BOTzNVbFg3WFk4TXF0b3EybUdRSHVLeDFIZlpmbG1vRjhDdW5oem5lVzRNY2Jac2ZkLUZBNTVRYm9Qak9RNmlHOXpsQ3hlX2tPVXlpbUlZWW5sQ0tndHl0ZFNSWlJIS1hfejBTZFI3MElKVVR0TWxOZFNOOFpLYzJveFpwR0p6dk03Z0lBaDRpQndCRWdrWl9aX1BSY2dTZlZJQm9xY1VKakR4X2Mwb3Q4eTJ3WWRuUjFzczc5QkRTblVIV1AwOWprbi1mSWhSZDktYlNnZWRKUTB1eEt3b0pUSXI3aGJJM1RCVEY4ZmUzaXJscG5sZ0IwY3RBUE5BYnlyQjF0azNBdHYwMU1aQ1YzLTVKbHlIc01HejIxTHNKRENxT0tUOWE5c2tFRlItMTkwVTFTMEpHSURNLXZJTU43cnVuVUFSU1EwSjdPcTdMWUFnVU5rbU9BaElpQi1IMFFOVE91bGFORnRtUEdqT0VDTl9QbF9Sd3pfUHAxMHh1Z29raC1sblFoMHN3aUZ1dUdMdG5oY0dVZDhJTGhiTVhQcTR0T3dCamloS1VWWHlUb2VTQ0VEZVhtVVRCV0ZSb2VONmNTQWdBTDlhUTV2MDhuNm1DTWJyc0NCRE5yZm9sMVQzWlFaRnBiMnNYNFNONS1XdEtRMXp5RzBEQVZtVGhWZjZKVElTNEFocGUyazVFYm05dlhIdnZZcXQ0bDVvbFZ0TjZFNHRrSXFNNENfc1pXV1VwYkdNbmlXbjVYWkpJdDRDYkFWMmFBVmlybWNFdm1pX01qMUhHc1FsbmI1UThRMGZ2elZRVWd2aUpMWWp3aHJYMzFDTEZ5aVhCYjgwVzF5MkVjU2hCZHhnaEE2bnBIN1hKV2xCOVozNlpwLWRyVnRINFJHaWp5SGduTFhEcE1YTWR4LVpTNUM2QUJ2bVlwM1lDaU1UQktpZllkeTFHeDJUam1XejlHY2N1Y2dpajVPcU5uUUZTdUxwSnFtOG9KUDUwYU5XSFhqU3lIUUtueGlnZE85N2FsNWsyVEU1eGxIZ1F0cWM5X0N1RUZaQm4yLWV5XzJfRmdnWG9fZDEzNDFYLTRuU1JndklmVy1mcGtnLXhyN3BfT3hSZDFVUjNjWGljbVdMbGJYNXhHOEs2VHJKSENvSDJzcmlZelhLU3pRY1hSMWNGNlJEaW9DT05lMFBBLTlhRHp5Q0ZockowYUo3Q3A3Y0lVbklwaU5IUlp0Q1JQQVAtYzJFcTVQbWE1X0NnNUNvTWlEd3pQRGtreV85UWdxMC1ReVI2VkpVSzhRVThjU1ZmY29iNGJjMFI3MGtmN241Y3JaVGl4R1pHY2t3MXh1VldqZElwR2M3cG1YNThubWk0UXo4eUh3cWt4QUpZVjl3RWxrdlNCNWo4VllySW90QmlXOGJjdExRQjROT1pzTWZYS0IwQl92OGhMd0REdU1GM3dIbElkUHAwYjByWFZCVUZDYUNERGstNWNPUlk4bzhNWVdoeWJMYVhSS0RYUWdWZVFNN05SSnUxQWNBeDRjdUsyRUtBV3B6Qmh0N1B1QzZVTlFnSnhXMUZTVE02OElrMUpZQ0ljQW1tLW1yNThHNnhfWWNDQ3FCbmFOLXR3ZWQ1QjZHX2JnUno4Z0pORkRNZm5fYUNyN2pQN0dsUHRDQjBWSWhuUHBEQi11R21FbnNLMWF5LVZjaDRaTE93QnBiZmZpRFI4MW9nRG5WNDVDRjNwMGdISk0tTkV6ejhZRmtJM3lTbFVxTjA4MnRDazJ6VFVnTmRvejlxTTFSamVXU05RQUpWOVlZYXU4QmpXWF9pWV9adEhEVXc0OGY4cUhaSXhEODBfRmxGMk9PRzlZYlpON1Fsc1g0cDIyZDJ4VVc0VVNuNkNzUTRnTy1zQlpBUnJmUkZfeVFodXkweFd1clBIck1tZWxtUEtkNkhGYWVKajdQUlRJeHRqc0NFV0ROQm83RV9uSmdFajRmaDk3TTI0T0NOV0xCa2dUYlVkMWhpcHBMUFdvU0N0QU1UQndHaDdwSnFvSzJvUkJnQjJOVmJjQVlfN0tlc2lodkdOXzNsazlkd3BCTUh1UnB2czhRTk92SmpLQzREQk1wVUY2LTVDODJkaERvWXZQYWdCamwxNFdDTHRGdGktM2xrSTd6SVRMQlJBd0R1cVJwa2tIcGlqY2gwNG4xQ3JkdTZFeTNZY2JyMldzcnFscFFoNERJQ0k5d3VjOFJDZzFQVUZyNjg4U3lzOUF4NXlvbVFDaXFMa2J5djF4c3pPOTZWc1NzQnMyd2JWYy1aU19Yd2o5WTY3NDIweHEtUWJ4Y3J3UmQxWEIzMUNEaFItRWFpMVhHLWk3NWVLWi15TGZzcVJpc1dOai00ajY1Y1NfSVh2Q3VGUEluSHV2aW9QbmNmdWF0eFJtY2E4bV81MHczX3ZpNkFmRFNMdndxTEgxTFFxUVpubE1iYTAyMzhsbm4xanJZU3hCdGpGVF9FNXNQMGhoNUZPcVFPaENOdTctNnR6XzdZTmhrQ29DY3JoRFI5NUZyeHNTbWgycjBSNFZsNkNPU1otOE82SjdxSm94cF8wbHQ0Y2wzQjN5N2w0N3ZrYlFCNTZXRUlYS1ZLbl9naU54SnBUdWljQ000TVkwWENxNlRONWxsMTl2OENzaG5nZ1NKSEhXM04wbWhPVDNVYk5PSDhuUURNRWFPU2lrdFlPRGZIdVprSWZITVIzaThCR0JnMUxpTGFpV2VNTEJrWlVpLXJNQ1VJeVc0UUVVMFU3cmtCNEJHbU1CXzVuZXdrS1dtamJPRTk5UTk3RUN2UHpsLUlYd0d1SXlNRVBocS1NMWJYNDFRck1mOWFFMElHV0lGRS0tMWNFTkozVnFET3UwUXNYNnhJRzl6T290RzBSM21ycC1aQnA1VkFNaDBNZFczUExXUWxmb0RWY00wU3FQR2xhTmxfbHlTRXVXUktFOHVFck9wZ1pNQXhYbmh1LXkyY1RKZzZRNTE0Yl9PVmpwWXphSjM5Z3k2Y2x4WDVsN1pna0xUWTZBcVF2MHB3c3k3NkpSejkwbk1LcldWQ1pUaWFrbFRwYm5pZFZJb3BPUnNGaVBqaUwwQTRIX1dxOTRzMmw5dHA1bXhJSUtya0h3VnhnN2N3Y0xzQldsY2dUUmFScUI2Wk1zTktPWFNmSzR4UmpNZVlOMVlvTkh3b1VWUTI0MEY3cmtscnhaS0NVOGk1N2podTVfcVVfZ0huaGdSMnFqSVprdVpfNG5YUHlucjBMNC1tUXh3Ujc0OUd6UjFpVzNWMXFXNUlqbjJxQ2plYXVoNVVRVklQUzBUdm1TaDNCdmNWaG1LWUM0amhSTWNkTktvX2ZaUWRCTU1yTjh6WHNjTjlkT3RBaEk0U29jb2lFT2kwbjRsdnY3TGJsU3A0c25YZXBmckZTQTEzTzhoZlFXUEg3WkNTS3ZwMXNNUU40NF9pV3UyYldWaFhnX0RxdkhYR2RCU1ktN2xGUWhKYlpBTy1Nak5MdnNLVm1aSmtCeURwbTZ3YW5kODFzQm1oNHBrOGo1NWJBTTRDMy1nZHF3YzQ4QWJMaXNhSmIwMTJMbElfTE1VNDlNeEV5WmJYSzlfdWdpZFNsbnZta0c4R2s0QVNwOHo0MUhPZmM0RVJWaFVjMkVsTmE0V3BqejgtNXg0TmFFTE40TFVweEhYeWVzcEtkazNYa29tRUE0Q1VIVDF5S2VuWjZLeVFmdUZoMGxORzNydlJYS1FvOXdBMEY4U0REdW4xZ2FMaUowR1o3WTBoYUNFRWtMN3p5V2dSeHpJTzB1bUhvNURwRnQ5QTZnSEM1WmgxeUEyS253MFZxSDdhcnc4aU0ycXR0ZGY5NDFGSE1ScXNBdkw2ckZMeWZfWFlJd19Jek92TDhnNEFLTERHZUJIS1ZabjJyTHJFWnV6QXpiUWh3NTN4ZGdrRk1LQW9ZVmREQUQ3N3NEWF9pamJyRXc1ejVKU2JmZExPVm5wMEV4ajhQX1F4RWtZZWU3TjZVUHR6cWJmTWc2QUdVb3pEWjdVUW5BM05WZFFRS0FGd0NXdkMwTWRpYmlwUE80eDZlTXc3S1RRZEU0S1lFZGk4em1qcFk0S2JTNGlTM3pMMERYbk85OEdlT3h3V3RNVzRoOC1HZmFJT0NlemJiWkU3R21xNlNWM3J5cV9IeU9yU0dRSGdRclVBSUFWemhvUUhSWTFPOGpoWTVfUlAxMDJhWElyTy01RmQ0TTdTLUllcXEtLWhIeGNzaXRHcHhvbHlKNy1ILWRLcmw3ZjU5b25BbVhwdDN4dVZSOG03QWJOVHpOejdDN2drSXlhak8yUm5ZMEdtX3hlZkw2dkREbE14YUZtYThyZVo4ZGJNQXEwSzBBd1dNbVJwcVVGX3d3TTlkdFVqNW5sX3I4V29VUDc0Z1dDQTJyX0loTHdhTk1xVENhT1VUN3Z3UzY4bUlUT09WYmthSDAxcklmSlVtb3FSR1p1Y0g2NTI4eFF0QkZaZXVXOENKdUtDdkl0RTRBM2ltOE9nRjZBcGNabTZGaVpvcnhHWm9QNW5ITEY5b2NIZ005UGJVcURJLWJFaEJLeDh0eHNCenVZa2N6UnE0eXdqbHVTUjFUZ3EtYWhFRFNkWjVzd1RzRHQzbjJfN2dRb2txQTZmdDJzX0tva2JqZFlWODM4ZGJhMXk2NFE3RlZnd3FjWXBJa1hrMzFBTHFtTDg4dmozUERER05ndFNsSGlvS3Brc0YwdGtnUjQyWmZUcVR0NlBpUFFTMGFWeUtHVnc5T1lUVG5VcjNKcVhyUkhYS1lhODNmcjVGbm5wREl4dWJDN05DVDZIdDVGazZlRTB1ZVBxUlhjUkFJMDhqTVdzOFZyWEtveUhsNmplNmZ0c2pBUnY5b2NRV2dIRV80T3RJZk84WWJ4d295MmVuYndQSW91bVlJYkJvYXgzaU1TaUtxZVl4NHdpZzZCRkxlYXU2NDk1TTExSVUwV2NJNnZHQU9PVjNNMTRCQkJMNmhDRGZiLU9uRjBhN096X2dLRkVPNUc0Yk5tYTVCeFhHNlhDWnBXaGhjSTlsVkVPM0lxYm40OV9keE1BakhYRG5sTzJ6M2RoVlF0MEstaGZTZWtzTUdzN0lwNXdtZjdScGVlejV2bkFoVmR4U3dHVzB6ZDh4cXFyNjFJQ1IwRnBaa0F6VnFBWmhhREkwYkFUdHo5RjU4aGVpODdMZkVZMUwtVXNKY3BJR3A1aVd1ZDEtcG9mVE1UeC04UFJpRFZLSHNqRnRJbzR6azBjLThYaDJXODVLYzRqT1UzQngwTmNUcnRxaW1QcFRzQnRwaXJ1c1JROVM0ajJibGtCRTNFU29xT1p0dU8xNVpuMGNvSG0wOTJ2TWY3VWJ2V1AwVmd3U0IwdHR2emJEVnItQUt6QzVSVkliQ0JTbEhoLVNaQ1FIUjVFbXVkYU5YbDBYQjFvN1dBM1pxV2NMV2RSZnlsaU5CY3RDWTJWMkp1ZHNTRWs4VmJyV0ZqdGxwbXZMR1o4T0dFajRYMjhRSHhNQWhxd0lfS2hmYURIRlhPd0JGR1F2M21wX2dIemc5WEU5QlVPa1I2ekRuUWQyOWkxVDN3SWk4Q3hQZEd1TVUzYVl0V0hYS3lhZHhJaTNGOWMzNW5OdXRHUGZ1ZjlkRV93U1g5VXk5ZGlWSkVQbHFnbmVOTFpjQ0ZXQmEzZHkzalRYcEl1MzdhcWlkWHltOUdBZGNEUndSMXdjU0E5T252dC1jQm5kcmFoZ3ZTV09PSXB4RWlNRlJVdlVRQ2hnOXpvbml1WVpsd2hlLWtYb0xZV2NldXg4Zk1sWEFCSm9jV0owbUUxU0JNaWx0VXFKZXJzeThJV0NlTGIyLU50RHcwWDdTOWx1ZFdCbUxNOEVXN0dlTVVBZl9tblctSW9VTWpQektNMlVDcXdiNXlCVE1uTmdSR0RKYVdlMDlIdHRyWmJTbFo5S1FneG9URU5GTU9YM2dOblBsb2ZDd1B0dTlEbTU1d3B3SVJ3OGx0eFpQMGZpY3pMRjZxb1k0NXdvOEtYYVVYU2hHNWZyd3lZZGozNDJRZU0tUHVJU1pLWFNhbUhUUG9zcC1KVVROOXpSdkJDYmlyS2xmUjlHUDRLNTRaYnBMTmJfQ0N4WGJyNllRdjdhOEdPdDlfWEFqeDVHS1UwUjBOSVd0aWlsemVuaHNUM0REQ05obU9iaXhsYWctdnRTalhHdVVPcmQ0VmFoc2xLa3hHZ2VJVWtVMjAwb3V4TDNTUVRGTkZmUG16aHU3cm1NSlMzZHRwbHdGR0R0aDdNeFlrc0JCdTg3UnBhUW94ZENvVGNFMW5DUmpDbWYtUlJ0M3B4dmRHRVF2ZDZiVW9WdmpLa25CRlB1UU91NXF0UzJzbExEWWM0aVlzZEFHMkR4elVKanVJRkNZSHRaRFRLaGczN0l1bWdNN3I1WVg2T3lsOS1ScUtsZ2wxTFB0RHMzN1dBSUhnd2I0QWxHaXJBOTk5OEZKd1cwWEo3TDlJUGg3UEU2OTZyTlNYcjVScnlwUWVzQXFDM1BXajBaZzJvNk1rUExSUlFKUTM0N0xuS2gxT3NNUlJvSFhKOFBwOFpNVzI0MU1pWkpjbGl1Q3pESnlWam9Pb0ZJUFdRY2E1Qkx2N0tBYUN1eFN6eWR2NmhFTlVkWFZfWTdQR2x6LWR3T1hXaG1wNHIxNFE3dGRkTnhrOUpTS3d6VEh5c21UamkyRjdXNVpfZXptSmxpVVBSZHBfcEpLaUhEb0Eta1BDOGZGX0w2ckhOY1JTak5RNU96MmxqbU5ZN1NzUEF2cGtnODdKV2U0WGdyT3NaWXV0eWpQNFhobEc0LTZMdkVGUGVrTzlESWt1QWNQN0dyWUtmX1Z5SHpQZFlWeUhEMExBS2xoRlV3OFV6clREbmc5TEE2cVY4N3pJUXZDeDU4VG85Y3VxSjlOTk82NWtGYm1GWnRFZFFBTS0xWHNnbXFhUUFOZmsxdGZxMURSMjNnZFJNZ2J0VlVnOTdRd3NFWWk0clU4eVZ3bXp1LUVZTnRwZlBxOE1SSkszcmtIQjRaYkhNeGJoc0pWX1NLX1VfWFpyRWdVWTY5a0hxVS1RY3lsLVlMS25sYnA3ckVkVjk0bGYxMkR6MUk0N3hudDR6MHhTVTFSY0phTWVkclk0YXNqRkhSSXNVbTlEcG5xTVBJNDFaVE9Zb3VBTXJLd3MwUzJMOW9nSTFoOXRPVjJjZFUxTTAtRFowM2VYOEczTE84ZDBmdmZTWF9sU3ZjbVg5ZUFVeVVoakdIZU1kbDFEcFJXdE1HcjhzYTZTclFHVmxxTHRoQnlCZGs3ZUgwUGM4Z3htLXJRUEk5WTRtZUFnd1pWV0ZsMzNSQVFKLU9pTHh2N0MycHl1ZDl3VmliYnNfWE5DVGNRUzJRMXVUaEM5aV9ZMU8ySENRTFJuOFIwRUQwNDJyTjJzOHZGNUphSnJYOHlMVVBYbG1PYXRwdG85U19UUXFGc1BFcWpUb2VBX2NrdFhwaHljYndDXzNyRjkxVHB3b2tDT01pNm5ibVl6bDhQdFFTQS16b2RXbTV1eEVCdGVBSEhpTE9fRHo3Ymp5bUlNeE54dkdaRHBMNjk0Y2pzZHkxSUNHRms3cWVtV01mS2N4ZjlfaExuRkFwczlCRTRCTmxXc0M2R0dpOUhJZVpvUWIxRGZmUVk4bXVucjdXQlh1VDlLMVlSaXUzTEQtbGxCRjRDVG5KUnFGU0hkVFFpeEhHY1E0c2djY01rYmFXUmhEYWN4MllQcHItZkh1b3lzM1N2MExwZVhtNGFXMlZzbzlMb3Y5RFM2M09hZXF3RlpZdEhuMUZYXzNvcWlvYTFTMFdqV1loZFQteHZDclFIMFlXZHUyN0RJVmEwMW9uanBPSkZTMnk4ak5FSkN2T1I1cy05T1FKTUtjczFTUWZBaFp6eWhvZ3FxOTluTHNkSFZnTmIzXzhxMEIxNldpSmdlNTc1d0ZDb1p6eU4yS3d4NC14aFkzTjZ4SFJSSGgyTWZIU2Vzb0Y2WmluNmJVZ1FDaTZWY0prRzlTNXVpd2JaSXFTN3kzelAzdmwzUTR3T0VGU04tZnZsckZCMGxOei1JZHZxa21GVlkteU5lMThNSHBVOTVLR1dtNFBRLTI2bTFjV2RtNXlONFQxZWx5eWlXcWRORmxBa2lyZENPaXJxQkZMcTdXUkVsT2FDQVB0aGJGSC1GeTRQSnQ1QTRYRGlsV29IN2lnRF80LXJLczJVMENVRVZ0WWNDMl8zQ21PZHgxc2lhRm5qcWJZNTBxeDNONnNXLVpaYmlrWV9ZRzR6OXd4UWFfVmJLRHZhcjlmU2hNTDROQzAzZXdqTzdDd1RUNUdVb1BTSU8xUG9ubkl3UmNYZUZVMW0xZ2x4UHl6V1RVMjdXdkc2cS1zZFJBZExPcF9nbWdJUUc5VXo2U0djN2EtaWFFbU5mSkludExDYmQzd09lU21QVFgxeDhWY2xtaGVyZy5LVFA2WjZsV3dKbHo0aXdIV29zbmZR"}'
         headers:
           Accept:
           - application/json
    @@ -172,36 +144,29 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/restore?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/restore?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/test-key/8da8f1cb3586404aa5c361ab9d9d6cbd","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"suNLillLGVTZ3818Ix6QIPe6R9PWWCHUIkaJQK65pAT8vFS35cwTA-MLHv5Iw8JgRG-KSJ4D_s9e0IbMsZZDNa0HtYWtNqXhZmovvqfAGyihBaNXzSLcqRGtLUxGkniZKQI_LlCAOedfzPBschA8bbRfBRPsibn-XKNBYVB_FqeeIOE5ziLlY0-RBjfVTZa_sOHVFMWHPYBNAJ_yo1RkpFKkKx2mMxfjG5H83aCaV4v_DI4Xzf6-hagsx1F_lbOvm2dBwR3oH-tCjy6u3QJUda_9M-1EUv-1s3HCoxQOungmBVOrWxL4CAsgR_AJCM7dc0v92Q8cv7Tc3tpxRFgBlw","e":"AQAB"},"attributes":{"enabled":true,"created":1575676644,"updated":1575676644,"recoveryLevel":"Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/test-key/2ebe8de785fc4101bf85bb4897f114ab","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"pfOj87cx1UdSkt5VOKZ7c6LQjXIu4X1ivHe8Xt4wNAHkuogN42ZBvDaEEi8eDALd4P63bnkJLrz5AntHpZKaPG4_Sw0Honz92o4EHLdpoNgTqO4Pfm6KXJRtlbZxW8pOKK8Wb12mOoxf9SXShTfOc5lsvKqhm37OuyNeyTqWfkUjrX4_twVCX97W8vBSpsVJQ8TKUdyFNWXATpKDu2KX-e9hhg6XzzjeEuyif6pwjjr6cDAq-vu4JL8OeBi7JqIzsJZzRWyhWIrSw-hsR0jwam6-kp0pqdFJXGLpg1aWJUH-L65ayhkfpD2BMfHzgc3vcgQGWxh3AB1VK1b1jgT9bQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450188,"updated":1583450188,"recoveryLevel":"Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '655'
           content-type: application/json; charset=utf-8
    -      date: Fri, 06 Dec 2019 23:57:24 GMT
    +      date: Thu, 05 Mar 2020 23:16:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iz4mucfmcz7io3xtafoq5fv7.vault.azure.net
    -        - /keys/restore
    -        - api-version=7.0
    -        - ''
    +    url: https://fc65q4axianrl5bbvo7repvt.vault.azure.net/keys/restore?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_keys_recover.yaml b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_keys_recover.yaml
    index 1856c4b65cfc..1e6141d2295a 100644
    --- a/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_keys_recover.yaml
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/recordings/test_samples_keys_async.test_example_keys_recover.yaml
    @@ -9,9 +9,9 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    @@ -20,7 +20,7 @@ interactions:
           cache-control: no-cache
           content-length: '87'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:10 GMT
    +      date: Thu, 05 Mar 2020 23:17:26 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
    @@ -29,21 +29,14 @@ interactions:
             resource="https://vault.azure.net"
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 401
           message: Unauthorized
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/create
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/create?api-version=7.1-preview
     - request:
         body: '{"kty": "RSA"}'
         headers:
    @@ -54,85 +47,71 @@ interactions:
           Content-Type:
           - application/json; charset=utf-8
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/create?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/bc16e20ac46b4159aa20d3d2dc7a6cbe","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"-pLmeC7fvXgQIFqVppbq6qONMD_AXvgKm7r7jtwXTyRIkcsvOgTqpVRBf0zGMRnL2eKGtcAN7c0jACtAf2e0kgNiWK-H5nczdC2An4saEJWObptY1yv4iZQia8WSsD7dNB9suTbhR0cquAVPdBq6-rXslWU5lF9axMxOGtvgn53bG4oQUIqMTV4y40VU1Rsy57SyBw85yVvS_qTw3pmVQBURd8JFA6leHMZFTQ8FXCHKb-EJG2zLo2xqAi7o2NQISY1RYrVIzknugN59cguOoqGwj8iRur13sSst6Cq94AfzYlCiSiV-llvAqcbMC0H30Nj2jyKn86p8-xXOWPid2Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676992,"updated":1575676992,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/8c31f59d3a9f42c38fa65bc34832f3f8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5cBLs5dDRMw5Nug98G3rf1jq9iGVg1HsOSvasAYa0yLAXc6sfXv4upQ9cMRpxfHnKtu2sOFcrzTF_8SzImEki51Wfbr68xfc1jnkA02VxxYKhYM_NU-dqctLbcZq3jfaXVNyIp2A0imgVGfUkALFTIjsFz6SxU80eHDzAJ5Br_hkP4kG9wgPgfeF1Rk95AfRet_Ep-2-vFdRPfIgK06E7Wb0g4MUG1oYjVxIu423jWPInz7eor-OGhM_C96FkrobhaX6H-PZbm-VsVmySfpJZJ45IDde2bL_8q4DSPpMx4QEny5x-4S47L08PuRQl7Q1cqJz_evhNbwanVHrkEDEQQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450247,"updated":1583450247,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '667'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:11 GMT
    +      date: Thu, 05 Mar 2020 23:17:27 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/create
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/create?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/keys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1575676992,"scheduledPurgeDate":1583452992,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/bc16e20ac46b4159aa20d3d2dc7a6cbe","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"-pLmeC7fvXgQIFqVppbq6qONMD_AXvgKm7r7jtwXTyRIkcsvOgTqpVRBf0zGMRnL2eKGtcAN7c0jACtAf2e0kgNiWK-H5nczdC2An4saEJWObptY1yv4iZQia8WSsD7dNB9suTbhR0cquAVPdBq6-rXslWU5lF9axMxOGtvgn53bG4oQUIqMTV4y40VU1Rsy57SyBw85yVvS_qTw3pmVQBURd8JFA6leHMZFTQ8FXCHKb-EJG2zLo2xqAi7o2NQISY1RYrVIzknugN59cguOoqGwj8iRur13sSst6Cq94AfzYlCiSiV-llvAqcbMC0H30Nj2jyKn86p8-xXOWPid2Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676992,"updated":1575676992,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1583450248,"scheduledPurgeDate":1591226248,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/8c31f59d3a9f42c38fa65bc34832f3f8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5cBLs5dDRMw5Nug98G3rf1jq9iGVg1HsOSvasAYa0yLAXc6sfXv4upQ9cMRpxfHnKtu2sOFcrzTF_8SzImEki51Wfbr68xfc1jnkA02VxxYKhYM_NU-dqctLbcZq3jfaXVNyIp2A0imgVGfUkALFTIjsFz6SxU80eHDzAJ5Br_hkP4kG9wgPgfeF1Rk95AfRet_Ep-2-vFdRPfIgK06E7Wb0g4MUG1oYjVxIu423jWPInz7eor-OGhM_C96FkrobhaX6H-PZbm-VsVmySfpJZJ45IDde2bL_8q4DSPpMx4QEny5x-4S47L08PuRQl7Q1cqJz_evhNbwanVHrkEDEQQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450247,"updated":1583450247,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '809'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:11 GMT
    +      date: Thu, 05 Mar 2020 23:17:27 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -140,37 +119,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:11 GMT
    +      date: Thu, 05 Mar 2020 23:17:27 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -178,37 +150,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:13 GMT
    +      date: Thu, 05 Mar 2020 23:17:29 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -216,37 +181,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:15 GMT
    +      date: Thu, 05 Mar 2020 23:17:31 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -254,37 +212,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:17 GMT
    +      date: Thu, 05 Mar 2020 23:17:33 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -292,37 +243,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:19 GMT
    +      date: Thu, 05 Mar 2020 23:17:35 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -330,37 +274,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:21 GMT
    +      date: Thu, 05 Mar 2020 23:17:37 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -368,37 +305,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:23 GMT
    +      date: Thu, 05 Mar 2020 23:17:40 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -406,37 +336,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:25 GMT
    +      date: Thu, 05 Mar 2020 23:17:42 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -444,37 +367,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:28 GMT
    +      date: Thu, 05 Mar 2020 23:17:44 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -482,37 +398,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:30 GMT
    +      date: Thu, 05 Mar 2020 23:17:46 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -520,37 +429,30 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:32 GMT
    +      date: Thu, 05 Mar 2020 23:17:48 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    @@ -558,151 +460,340 @@ interactions:
           cache-control: no-cache
           content-length: '76'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:34 GMT
    +      date: Thu, 05 Mar 2020 23:17:50 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1575676992,"scheduledPurgeDate":1583452992,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/bc16e20ac46b4159aa20d3d2dc7a6cbe","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"-pLmeC7fvXgQIFqVppbq6qONMD_AXvgKm7r7jtwXTyRIkcsvOgTqpVRBf0zGMRnL2eKGtcAN7c0jACtAf2e0kgNiWK-H5nczdC2An4saEJWObptY1yv4iZQia8WSsD7dNB9suTbhR0cquAVPdBq6-rXslWU5lF9axMxOGtvgn53bG4oQUIqMTV4y40VU1Rsy57SyBw85yVvS_qTw3pmVQBURd8JFA6leHMZFTQ8FXCHKb-EJG2zLo2xqAi7o2NQISY1RYrVIzknugN59cguOoqGwj8iRur13sSst6Cq94AfzYlCiSiV-llvAqcbMC0H30Nj2jyKn86p8-xXOWPid2Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676992,"updated":1575676992,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '76'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:17:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '76'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:17:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '76'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:17:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '76'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:17:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Deleted Key not found: key-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '76'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1583450248,"scheduledPurgeDate":1591226248,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/8c31f59d3a9f42c38fa65bc34832f3f8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5cBLs5dDRMw5Nug98G3rf1jq9iGVg1HsOSvasAYa0yLAXc6sfXv4upQ9cMRpxfHnKtu2sOFcrzTF_8SzImEki51Wfbr68xfc1jnkA02VxxYKhYM_NU-dqctLbcZq3jfaXVNyIp2A0imgVGfUkALFTIjsFz6SxU80eHDzAJ5Br_hkP4kG9wgPgfeF1Rk95AfRet_Ep-2-vFdRPfIgK06E7Wb0g4MUG1oYjVxIu423jWPInz7eor-OGhM_C96FkrobhaX6H-PZbm-VsVmySfpJZJ45IDde2bL_8q4DSPpMx4QEny5x-4S47L08PuRQl7Q1cqJz_evhNbwanVHrkEDEQQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450247,"updated":1583450247,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '809'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:36 GMT
    +      date: Thu, 05 Mar 2020 23:18:02 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
       response:
         body:
    -      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1575676992,"scheduledPurgeDate":1583452992,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/bc16e20ac46b4159aa20d3d2dc7a6cbe","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"-pLmeC7fvXgQIFqVppbq6qONMD_AXvgKm7r7jtwXTyRIkcsvOgTqpVRBf0zGMRnL2eKGtcAN7c0jACtAf2e0kgNiWK-H5nczdC2An4saEJWObptY1yv4iZQia8WSsD7dNB9suTbhR0cquAVPdBq6-rXslWU5lF9axMxOGtvgn53bG4oQUIqMTV4y40VU1Rsy57SyBw85yVvS_qTw3pmVQBURd8JFA6leHMZFTQ8FXCHKb-EJG2zLo2xqAi7o2NQISY1RYrVIzknugN59cguOoqGwj8iRur13sSst6Cq94AfzYlCiSiV-llvAqcbMC0H30Nj2jyKn86p8-xXOWPid2Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676992,"updated":1575676992,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedkeys/key-name","deletedDate":1583450248,"scheduledPurgeDate":1591226248,"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/8c31f59d3a9f42c38fa65bc34832f3f8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5cBLs5dDRMw5Nug98G3rf1jq9iGVg1HsOSvasAYa0yLAXc6sfXv4upQ9cMRpxfHnKtu2sOFcrzTF_8SzImEki51Wfbr68xfc1jnkA02VxxYKhYM_NU-dqctLbcZq3jfaXVNyIp2A0imgVGfUkALFTIjsFz6SxU80eHDzAJ5Br_hkP4kG9wgPgfeF1Rk95AfRet_Ep-2-vFdRPfIgK06E7Wb0g4MUG1oYjVxIu423jWPInz7eor-OGhM_C96FkrobhaX6H-PZbm-VsVmySfpJZJ45IDde2bL_8q4DSPpMx4QEny5x-4S47L08PuRQl7Q1cqJz_evhNbwanVHrkEDEQQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450247,"updated":1583450247,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '809'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:38 GMT
    +      date: Thu, 05 Mar 2020 23:18:02 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedkeys/key-name/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedkeys/key-name/recover?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/bc16e20ac46b4159aa20d3d2dc7a6cbe","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"-pLmeC7fvXgQIFqVppbq6qONMD_AXvgKm7r7jtwXTyRIkcsvOgTqpVRBf0zGMRnL2eKGtcAN7c0jACtAf2e0kgNiWK-H5nczdC2An4saEJWObptY1yv4iZQia8WSsD7dNB9suTbhR0cquAVPdBq6-rXslWU5lF9axMxOGtvgn53bG4oQUIqMTV4y40VU1Rsy57SyBw85yVvS_qTw3pmVQBURd8JFA6leHMZFTQ8FXCHKb-EJG2zLo2xqAi7o2NQISY1RYrVIzknugN59cguOoqGwj8iRur13sSst6Cq94AfzYlCiSiV-llvAqcbMC0H30Nj2jyKn86p8-xXOWPid2Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676992,"updated":1575676992,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/8c31f59d3a9f42c38fa65bc34832f3f8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5cBLs5dDRMw5Nug98G3rf1jq9iGVg1HsOSvasAYa0yLAXc6sfXv4upQ9cMRpxfHnKtu2sOFcrzTF_8SzImEki51Wfbr68xfc1jnkA02VxxYKhYM_NU-dqctLbcZq3jfaXVNyIp2A0imgVGfUkALFTIjsFz6SxU80eHDzAJ5Br_hkP4kG9wgPgfeF1Rk95AfRet_Ep-2-vFdRPfIgK06E7Wb0g4MUG1oYjVxIu423jWPInz7eor-OGhM_C96FkrobhaX6H-PZbm-VsVmySfpJZJ45IDde2bL_8q4DSPpMx4QEny5x-4S47L08PuRQl7Q1cqJz_evhNbwanVHrkEDEQQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450247,"updated":1583450247,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '667'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:39 GMT
    +      date: Thu, 05 Mar 2020 23:18:02 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /deletedkeys/key-name/recover
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/deletedkeys/key-name/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '68'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:03 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '68'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:18:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -710,37 +801,30 @@ interactions:
           cache-control: no-cache
           content-length: '68'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:39 GMT
    +      date: Thu, 05 Mar 2020 23:18:07 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -748,37 +832,30 @@ interactions:
           cache-control: no-cache
           content-length: '68'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:41 GMT
    +      date: Thu, 05 Mar 2020 23:18:09 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -786,37 +863,30 @@ interactions:
           cache-control: no-cache
           content-length: '68'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:43 GMT
    +      date: Thu, 05 Mar 2020 23:18:11 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -824,37 +894,30 @@ interactions:
           cache-control: no-cache
           content-length: '68'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:45 GMT
    +      date: Thu, 05 Mar 2020 23:18:13 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -862,37 +925,30 @@ interactions:
           cache-control: no-cache
           content-length: '68'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:47 GMT
    +      date: Thu, 05 Mar 2020 23:18:15 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -900,37 +956,30 @@ interactions:
           cache-control: no-cache
           content-length: '68'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:49 GMT
    +      date: Thu, 05 Mar 2020 23:18:17 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -938,37 +987,30 @@ interactions:
           cache-control: no-cache
           content-length: '68'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:51 GMT
    +      date: Thu, 05 Mar 2020 23:18:19 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -976,37 +1018,30 @@ interactions:
           cache-control: no-cache
           content-length: '68'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:53 GMT
    +      date: Thu, 05 Mar 2020 23:18:21 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -1014,37 +1049,30 @@ interactions:
           cache-control: no-cache
           content-length: '68'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:55 GMT
    +      date: Thu, 05 Mar 2020 23:18:23 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
           string: '{"error":{"code":"KeyNotFound","message":"Key not found: key-name"}}'
    @@ -1052,64 +1080,50 @@ interactions:
           cache-control: no-cache
           content-length: '68'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:57 GMT
    +      date: Thu, 05 Mar 2020 23:18:25 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 404
           message: Not Found
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
           Accept:
           - application/json
           User-Agent:
    -      - azsdk-python-keyvault-keys/4.1.0b1 Python/3.5.4 (Windows-10-10.0.18362-SP0)
    +      - azsdk-python-keyvault-keys/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/keys/key-name/?api-version=7.1-preview
       response:
         body:
    -      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/bc16e20ac46b4159aa20d3d2dc7a6cbe","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"-pLmeC7fvXgQIFqVppbq6qONMD_AXvgKm7r7jtwXTyRIkcsvOgTqpVRBf0zGMRnL2eKGtcAN7c0jACtAf2e0kgNiWK-H5nczdC2An4saEJWObptY1yv4iZQia8WSsD7dNB9suTbhR0cquAVPdBq6-rXslWU5lF9axMxOGtvgn53bG4oQUIqMTV4y40VU1Rsy57SyBw85yVvS_qTw3pmVQBURd8JFA6leHMZFTQ8FXCHKb-EJG2zLo2xqAi7o2NQISY1RYrVIzknugN59cguOoqGwj8iRur13sSst6Cq94AfzYlCiSiV-llvAqcbMC0H30Nj2jyKn86p8-xXOWPid2Q","e":"AQAB"},"attributes":{"enabled":true,"created":1575676992,"updated":1575676992,"recoveryLevel":"Recoverable+Purgeable"}}'
    +      string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/key-name/8c31f59d3a9f42c38fa65bc34832f3f8","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"5cBLs5dDRMw5Nug98G3rf1jq9iGVg1HsOSvasAYa0yLAXc6sfXv4upQ9cMRpxfHnKtu2sOFcrzTF_8SzImEki51Wfbr68xfc1jnkA02VxxYKhYM_NU-dqctLbcZq3jfaXVNyIp2A0imgVGfUkALFTIjsFz6SxU80eHDzAJ5Br_hkP4kG9wgPgfeF1Rk95AfRet_Ep-2-vFdRPfIgK06E7Wb0g4MUG1oYjVxIu423jWPInz7eor-OGhM_C96FkrobhaX6H-PZbm-VsVmySfpJZJ45IDde2bL_8q4DSPpMx4QEny5x-4S47L08PuRQl7Q1cqJz_evhNbwanVHrkEDEQQ","e":"AQAB"},"attributes":{"enabled":true,"created":1583450247,"updated":1583450247,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
           cache-control: no-cache
           content-length: '667'
           content-type: application/json; charset=utf-8
    -      date: Sat, 07 Dec 2019 00:03:59 GMT
    +      date: Thu, 05 Mar 2020 23:18:27 GMT
           expires: '-1'
           pragma: no-cache
           server: Microsoft-IIS/10.0
           strict-transport-security: max-age=31536000;includeSubDomains
           x-aspnet-version: 4.0.30319
           x-content-type-options: nosniff
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
           x-ms-keyvault-region: westus
    -      x-ms-keyvault-service-version: 1.1.0.883
    +      x-ms-keyvault-service-version: 1.1.0.897
           x-powered-by: ASP.NET
         status:
           code: 200
           message: OK
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult
    -        - https
    -        - iail3ugujhtuu4gkam2qaci6.vault.azure.net
    -        - /keys/key-name/
    -        - api-version=7.0
    -        - ''
    +    url: https://m2u6v7cisi2tlqvddo6s2mx4.vault.azure.net/keys/key-name/?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-keys/tests/test_multi_api.py b/sdk/keyvault/azure-keyvault-keys/tests/test_multi_api.py
    new file mode 100644
    index 000000000000..38a67fe826b9
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-keys/tests/test_multi_api.py
    @@ -0,0 +1,21 @@
    +# ------------------------------------
    +# Copyright (c) Microsoft Corporation.
    +# Licensed under the MIT License.
    +# -------------------------------------
    +from azure.keyvault.keys import ApiVersion, KeyClient
    +import pytest
    +
    +
    +@pytest.mark.parametrize("version", ApiVersion)
    +def test_supported_version(version):
    +    """The client should be able to load generated code for every supported API version"""
    +
    +    KeyClient("https://localhost", credential=object(), api_version=version)
    +
    +
    +def test_unsupported_version():
    +    """When given an unsupported API version, the client should raise an error listing supported versions"""
    +
    +    with pytest.raises(NotImplementedError) as ex:
    +        client = KeyClient("https://localhost", credential=object(), api_version="nonsense")
    +    assert all(version.value in str(ex.value) for version in ApiVersion)
    diff --git a/sdk/keyvault/azure-keyvault-secrets/CHANGELOG.md b/sdk/keyvault/azure-keyvault-secrets/CHANGELOG.md
    index e45cdacdf41e..2571f01a90cd 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/CHANGELOG.md
    +++ b/sdk/keyvault/azure-keyvault-secrets/CHANGELOG.md
    @@ -1,5 +1,14 @@
     # Release History
     
    +## 4.2.0b2 (Unreleased)
    +
    +
    +## 4.2.0b1 (2020-03-10)
    +- Support for Key Vault API version 7.1-preview
    +([#10124](https://github.com/Azure/azure-sdk-for-python/pull/10124))
    +  - Added `recoverable_days` to `CertificateProperties`
    +  - Added `ApiVersion` enum identifying Key Vault versions supported by this package
    +
     ## 4.1.0 (2020-03-10)
     - `SecretClient` instances have a `close` method which closes opened sockets.
     Used as a context manager, a `SecretClient` closes opened sockets on exit.
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/__init__.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/__init__.py
    index 4e5919c1d78e..9db7a8d99acb 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/__init__.py
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/__init__.py
    @@ -3,9 +3,10 @@
     # Licensed under the MIT License.
     # ------------------------------------
     from ._models import DeletedSecret, KeyVaultSecret, SecretProperties
    +from ._shared.multi_api import ApiVersion
     from ._client import SecretClient
     
    -__all__ = ["SecretClient", "KeyVaultSecret", "SecretProperties", "DeletedSecret"]
    +__all__ = ["ApiVersion", "SecretClient", "KeyVaultSecret", "SecretProperties", "DeletedSecret"]
     
     from ._version import VERSION
     __version__ = VERSION
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_client.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_client.py
    index 197f70b32525..a59d3f1d5289 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_client.py
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_client.py
    @@ -28,7 +28,8 @@ class SecretClient(KeyVaultClientBase):
         :param str vault_url: URL of the vault the client will access. This is also called the vault's "DNS Name".
         :param credential: An object which can provide an access token for the vault, such as a credential from
             :mod:`azure.identity`
    -    :keyword str api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :keyword api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :paramtype api_version: ~azure.keyvault.secrets.ApiVersion
         :keyword transport: transport to use. Defaults to :class:`~azure.core.pipeline.transport.RequestsTransport`.
         :paramtype transport: ~azure.core.pipeline.transport.HttpTransport
     
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_models.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_models.py
    index dd74b628d585..38e28f660230 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_models.py
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_models.py
    @@ -130,6 +130,18 @@ def updated_on(self):
             """
             return self._attributes.updated
     
    +    @property
    +    def recoverable_days(self):
    +        # type: () -> Optional[int]
    +        """The number of days the key is retained before being deleted from a soft-delete enabled Key Vault.
    +
    +        :rtype: int
    +        """
    +        # recoverable_days was added in 7.1-preview
    +        if self._attributes and hasattr(self._attributes, "recoverable_days"):
    +            return self._attributes.recoverable_days
    +        return None
    +
         @property
         def recovery_level(self):
             # type: () -> str
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/__init__.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/__init__.py
    new file mode 100644
    index 000000000000..e913d4cf6c46
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/__init__.py
    @@ -0,0 +1,18 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._key_vault_client import KeyVaultClient
    +__all__ = ['KeyVaultClient']
    +
    +from .version import VERSION
    +
    +__version__ = VERSION
    +
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/_configuration.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/_configuration.py
    new file mode 100644
    index 000000000000..68d6f5b6bd2c
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/_configuration.py
    @@ -0,0 +1,47 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +from azure.core.configuration import Configuration
    +from azure.core.pipeline import policies
    +
    +from .version import VERSION
    +
    +
    +class KeyVaultClientConfiguration(Configuration):
    +    """Configuration for KeyVaultClient
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    """
    +
    +    def __init__(self, credentials, **kwargs):
    +
    +        if credentials is None:
    +            raise ValueError("Parameter 'credentials' must not be None.")
    +
    +        super(KeyVaultClientConfiguration, self).__init__(**kwargs)
    +        self._configure(**kwargs)
    +
    +        self.user_agent_policy.add_user_agent('azsdk-python-azure-keyvault/{}'.format(VERSION))
    +        self.generate_client_request_id = True
    +
    +        self.credentials = credentials
    +
    +    def _configure(self, **kwargs):
    +        self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs)
    +        self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs)
    +        self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
    +        self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
    +        self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs)
    +        self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
    +        self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs)
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/_key_vault_client.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/_key_vault_client.py
    new file mode 100644
    index 000000000000..f380f67e0a87
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/_key_vault_client.py
    @@ -0,0 +1,48 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core import PipelineClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration import KeyVaultClientConfiguration
    +from .operations import KeyVaultClientOperationsMixin
    +from . import models
    +
    +
    +class KeyVaultClient(KeyVaultClientOperationsMixin):
    +    """The key vault client performs cryptographic key operations and vault operations against the Key Vault service.
    +
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    """
    +
    +    def __init__(
    +            self, credentials, **kwargs):
    +
    +        base_url = '{vaultBaseUrl}'
    +        self._config = KeyVaultClientConfiguration(credentials, **kwargs)
    +        self._client = PipelineClient(base_url=base_url, config=self._config, **kwargs)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '7.1-preview'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +
    +    def close(self):
    +        self._client.close()
    +    def __enter__(self):
    +        self._client.__enter__()
    +        return self
    +    def __exit__(self, *exc_details):
    +        self._client.__exit__(*exc_details)
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/__init__.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/__init__.py
    new file mode 100644
    index 000000000000..fb2e6c3866fd
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/__init__.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._key_vault_client_async import KeyVaultClient
    +__all__ = ['KeyVaultClient']
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/_configuration_async.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/_configuration_async.py
    new file mode 100644
    index 000000000000..fb961bb4bd2d
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/_configuration_async.py
    @@ -0,0 +1,47 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +from azure.core.configuration import Configuration
    +from azure.core.pipeline import policies
    +
    +from ..version import VERSION
    +
    +
    +class KeyVaultClientConfiguration(Configuration):
    +    """Configuration for KeyVaultClient
    +    Note that all parameters used to create this instance are saved as instance
    +    attributes.
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    """
    +
    +    def __init__(self, credentials, **kwargs):
    +
    +        if credentials is None:
    +            raise ValueError("Parameter 'credentials' must not be None.")
    +
    +        super(KeyVaultClientConfiguration, self).__init__(**kwargs)
    +        self._configure(**kwargs)
    +
    +        self.user_agent_policy.add_user_agent('azsdk-python-azure-keyvault/{}'.format(VERSION))
    +        self.generate_client_request_id = True
    +
    +        self.credentials = credentials
    +
    +    def _configure(self, **kwargs):
    +        self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs)
    +        self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs)
    +        self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
    +        self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
    +        self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs)
    +        self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
    +        self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs)
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/_key_vault_client_async.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/_key_vault_client_async.py
    new file mode 100644
    index 000000000000..b2b908c4a757
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/_key_vault_client_async.py
    @@ -0,0 +1,48 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core import AsyncPipelineClient
    +from msrest import Serializer, Deserializer
    +
    +from ._configuration_async import KeyVaultClientConfiguration
    +from .operations_async import KeyVaultClientOperationsMixin
    +from .. import models
    +
    +
    +class KeyVaultClient(KeyVaultClientOperationsMixin):
    +    """The key vault client performs cryptographic key operations and vault operations against the Key Vault service.
    +
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    """
    +
    +    def __init__(
    +            self, credentials, **kwargs):
    +
    +        base_url = '{vaultBaseUrl}'
    +        self._config = KeyVaultClientConfiguration(credentials, **kwargs)
    +        self._client = AsyncPipelineClient(base_url=base_url, config=self._config, **kwargs)
    +
    +        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
    +        self.api_version = '7.1-preview'
    +        self._serialize = Serializer(client_models)
    +        self._deserialize = Deserializer(client_models)
    +
    +
    +    async def close(self):
    +        await self._client.close()
    +    async def __aenter__(self):
    +        await self._client.__aenter__()
    +        return self
    +    async def __aexit__(self, *exc_details):
    +        await self._client.__aexit__(*exc_details)
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/operations_async/__init__.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/operations_async/__init__.py
    new file mode 100644
    index 000000000000..771a17ceb80d
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/operations_async/__init__.py
    @@ -0,0 +1,16 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._key_vault_client_operations_async import KeyVaultClientOperationsMixin
    +
    +__all__ = [
    +    'KeyVaultClientOperationsMixin',
    +]
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/operations_async/_key_vault_client_operations_async.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/operations_async/_key_vault_client_operations_async.py
    new file mode 100644
    index 000000000000..5701d4354d9b
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/aio/operations_async/_key_vault_client_operations_async.py
    @@ -0,0 +1,5224 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +from azure.core.async_paging import AsyncItemPaged, AsyncList
    +from ... import models
    +import uuid
    +
    +
    +class KeyVaultClientOperationsMixin:
    +
    +    def get_certificates(
    +            self, vault_base_url, maxresults=None, include_pending=None, *, cls=None, **kwargs):
    +        """List certificates in a specified key vault.
    +
    +        The GetCertificates operation returns the set of certificates resources
    +        in the specified key vault. This operation requires the
    +        certificates/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :param include_pending: Specifies whether to include certificates
    +         which are not completely provisioned.
    +        :type include_pending: bool
    +        :return: An iterator like instance of CertificateItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.CertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificates.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                if include_pending is not None:
    +                    query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('CertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_certificates.metadata = {'url': '/certificates'}
    +
    +    async def delete_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Deletes a certificate from a specified key vault.
    +
    +        Deletes all versions of a certificate object along with its associated
    +        policy. Delete certificate cannot be used to remove individual versions
    +        of a certificate object. This operation requires the
    +        certificates/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedCertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedCertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedCertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate.metadata = {'url': '/certificates/{certificate-name}'}
    +
    +    async def set_certificate_contacts(self, vault_base_url, contact_list=None, *, cls=None, **kwargs):
    +        """Sets the certificate contacts for the specified key vault.
    +
    +        Sets the certificate contacts for the specified key vault. This
    +        operation requires the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param contact_list: The contact list for the vault certificates.
    +        :type contact_list: list[~azure.keyvault.v7_1.models.Contact]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        contacts = models.Contacts(contact_list=contact_list)
    +
    +        # Construct URL
    +        url = self.set_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(contacts, 'Contacts')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    async def get_certificate_contacts(self, vault_base_url, *, cls=None, **kwargs):
    +        """Lists the certificate contacts for a specified key vault.
    +
    +        The GetCertificateContacts operation returns the set of certificate
    +        contact resources in the specified key vault. This operation requires
    +        the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    async def delete_certificate_contacts(self, vault_base_url, *, cls=None, **kwargs):
    +        """Deletes the certificate contacts for a specified key vault.
    +
    +        Deletes the certificate contacts for a specified key vault certificate.
    +        This operation requires the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    def get_certificate_issuers(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """List certificate issuers for a specified key vault.
    +
    +        The GetCertificateIssuers operation returns the set of certificate
    +        issuer resources in the specified key vault. This operation requires
    +        the certificates/manageissuers/getissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of CertificateIssuerItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.CertificateIssuerItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificate_issuers.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('CertificateIssuerListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_certificate_issuers.metadata = {'url': '/certificates/issuers'}
    +
    +    async def set_certificate_issuer(self, vault_base_url, issuer_name, provider, credentials=None, organization_details=None, attributes=None, *, cls=None, **kwargs):
    +        """Sets the specified certificate issuer.
    +
    +        The SetCertificateIssuer operation adds or updates the specified
    +        certificate issuer. This operation requires the certificates/setissuers
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param provider: The issuer provider.
    +        :type provider: str
    +        :param credentials: The credentials to be used for the issuer.
    +        :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +        :param organization_details: Details of the organization as provided
    +         to the issuer.
    +        :type organization_details:
    +         ~azure.keyvault.v7_1.models.OrganizationDetails
    +        :param attributes: Attributes of the issuer object.
    +        :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameter = models.CertificateIssuerSetParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes)
    +
    +        # Construct URL
    +        url = self.set_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameter, 'CertificateIssuerSetParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    async def update_certificate_issuer(self, vault_base_url, issuer_name, provider=None, credentials=None, organization_details=None, attributes=None, *, cls=None, **kwargs):
    +        """Updates the specified certificate issuer.
    +
    +        The UpdateCertificateIssuer operation performs an update on the
    +        specified certificate issuer entity. This operation requires the
    +        certificates/setissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param provider: The issuer provider.
    +        :type provider: str
    +        :param credentials: The credentials to be used for the issuer.
    +        :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +        :param organization_details: Details of the organization as provided
    +         to the issuer.
    +        :type organization_details:
    +         ~azure.keyvault.v7_1.models.OrganizationDetails
    +        :param attributes: Attributes of the issuer object.
    +        :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameter = models.CertificateIssuerUpdateParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes)
    +
    +        # Construct URL
    +        url = self.update_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameter, 'CertificateIssuerUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    async def get_certificate_issuer(self, vault_base_url, issuer_name, *, cls=None, **kwargs):
    +        """Lists the specified certificate issuer.
    +
    +        The GetCertificateIssuer operation returns the specified certificate
    +        issuer resources in the specified key vault. This operation requires
    +        the certificates/manageissuers/getissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    async def delete_certificate_issuer(self, vault_base_url, issuer_name, *, cls=None, **kwargs):
    +        """Deletes the specified certificate issuer.
    +
    +        The DeleteCertificateIssuer operation permanently removes the specified
    +        certificate issuer from the vault. This operation requires the
    +        certificates/manageissuers/deleteissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    async def create_certificate(self, vault_base_url, certificate_name, certificate_policy=None, certificate_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Creates a new certificate.
    +
    +        If this is the first version, the certificate resource is created. This
    +        operation requires the certificates/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateCreateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.create_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 202:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    create_certificate.metadata = {'url': '/certificates/{certificate-name}/create'}
    +
    +    async def import_certificate(self, vault_base_url, certificate_name, base64_encoded_certificate, password=None, certificate_policy=None, certificate_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Imports a certificate into a specified key vault.
    +
    +        Imports an existing valid certificate, containing a private key, into
    +        Azure Key Vault. The certificate to be imported can be in either PFX or
    +        PEM format. If the certificate is in PEM format the PEM file must
    +        contain the key as well as x509 certificates. This operation requires
    +        the certificates/import permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param base64_encoded_certificate: Base64 encoded representation of
    +         the certificate object to import. This certificate needs to contain
    +         the private key.
    +        :type base64_encoded_certificate: str
    +        :param password: If the private key in base64EncodedCertificate is
    +         encrypted, the password used for encryption.
    +        :type password: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateImportParameters(base64_encoded_certificate=base64_encoded_certificate, password=password, certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.import_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateImportParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    import_certificate.metadata = {'url': '/certificates/{certificate-name}/import'}
    +
    +    def get_certificate_versions(
    +            self, vault_base_url, certificate_name, maxresults=None, *, cls=None, **kwargs):
    +        """List the versions of a certificate.
    +
    +        The GetCertificateVersions operation returns the versions of a
    +        certificate in the specified key vault. This operation requires the
    +        certificates/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of CertificateItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.CertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificate_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('CertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_certificate_versions.metadata = {'url': '/certificates/{certificate-name}/versions'}
    +
    +    async def get_certificate_policy(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Lists the policy for a certificate.
    +
    +        The GetCertificatePolicy operation returns the specified certificate
    +        policy resources in the specified key vault. This operation requires
    +        the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in a given key
    +         vault.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificatePolicy or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_policy.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificatePolicy', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}
    +
    +    async def update_certificate_policy(self, vault_base_url, certificate_name, certificate_policy, *, cls=None, **kwargs):
    +        """Updates the policy for a certificate.
    +
    +        Set specified members in the certificate policy. Leave others as null.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_policy: The policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificatePolicy or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.update_certificate_policy.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_policy, 'CertificatePolicy')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificatePolicy', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}
    +
    +    async def update_certificate(self, vault_base_url, certificate_name, certificate_version, certificate_policy=None, certificate_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given certificate.
    +
    +        The UpdateCertificate operation applies the specified update on the
    +        given certificate; the only elements updated are the certificate's
    +        attributes. This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given key
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_version: The version of the certificate.
    +        :type certificate_version: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateUpdateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
    +            'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}
    +
    +    async def get_certificate(self, vault_base_url, certificate_name, certificate_version, *, cls=None, **kwargs):
    +        """Gets information about a certificate.
    +
    +        Gets information about a specific certificate. This operation requires
    +        the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_version: The version of the certificate.
    +        :type certificate_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
    +            'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}
    +
    +    async def update_certificate_operation(self, vault_base_url, certificate_name, cancellation_requested, *, cls=None, **kwargs):
    +        """Updates a certificate operation.
    +
    +        Updates a certificate creation operation that is already in progress.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param cancellation_requested: Indicates if cancellation was requested
    +         on the certificate operation.
    +        :type cancellation_requested: bool
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        certificate_operation = models.CertificateOperationUpdateParameter(cancellation_requested=cancellation_requested)
    +
    +        # Construct URL
    +        url = self.update_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_operation, 'CertificateOperationUpdateParameter')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    async def get_certificate_operation(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Gets the creation operation of a certificate.
    +
    +        Gets the creation operation associated with a specified certificate.
    +        This operation requires the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    async def delete_certificate_operation(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Deletes the creation operation for a specific certificate.
    +
    +        Deletes the creation operation for a specified certificate that is in
    +        the process of being created. The certificate is no longer created.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    async def merge_certificate(self, vault_base_url, certificate_name, x509_certificates, certificate_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Merges a certificate or a certificate chain with a key pair existing on
    +        the server.
    +
    +        The MergeCertificate operation performs the merging of a certificate or
    +        certificate chain with a key pair currently available in the service.
    +        This operation requires the certificates/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param x509_certificates: The certificate or the certificate chain to
    +         merge.
    +        :type x509_certificates: list[bytearray]
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateMergeParameters(x509_certificates=x509_certificates, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.merge_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateMergeParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    merge_certificate.metadata = {'url': '/certificates/{certificate-name}/pending/merge'}
    +
    +    async def backup_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Backs up the specified certificate.
    +
    +        Requests that a backup of the specified certificate be downloaded to
    +        the client. All versions of the certificate will be downloaded. This
    +        operation requires the certificates/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupCertificateResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupCertificateResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupCertificateResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_certificate.metadata = {'url': '/certificates/{certificate-name}/backup'}
    +
    +    async def restore_certificate(self, vault_base_url, certificate_bundle_backup, *, cls=None, **kwargs):
    +        """Restores a backed up certificate to a vault.
    +
    +        Restores a backed up certificate, and all its versions, to a vault.
    +        This operation requires the certificates/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_bundle_backup: The backup blob associated with a
    +         certificate bundle.
    +        :type certificate_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateRestoreParameters(certificate_bundle_backup=certificate_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_certificate.metadata = {'url': '/certificates/restore'}
    +
    +    def get_deleted_certificates(
    +            self, vault_base_url, maxresults=None, include_pending=None, *, cls=None, **kwargs):
    +        """Lists the deleted certificates in the specified vault currently
    +        available for recovery.
    +
    +        The GetDeletedCertificates operation retrieves the certificates in the
    +        current vault which are in a deleted state and ready for recovery or
    +        purging. This operation includes deletion-specific information. This
    +        operation requires the certificates/get/list permission. This operation
    +        can only be enabled on soft-delete enabled vaults.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :param include_pending: Specifies whether to include certificates
    +         which are not completely provisioned.
    +        :type include_pending: bool
    +        :return: An iterator like instance of DeletedCertificateItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedCertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_certificates.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                if include_pending is not None:
    +                    query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedCertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_certificates.metadata = {'url': '/deletedcertificates'}
    +
    +    async def get_deleted_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Retrieves information about the specified deleted certificate.
    +
    +        The GetDeletedCertificate operation retrieves the deleted certificate
    +        information plus its attributes, such as retention interval, scheduled
    +        permanent deletion and the current deletion recovery level. This
    +        operation requires the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedCertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedCertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedCertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}
    +
    +    async def purge_deleted_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Permanently deletes the specified deleted certificate.
    +
    +        The PurgeDeletedCertificate operation performs an irreversible deletion
    +        of the specified certificate, without possibility for recovery. The
    +        operation is not available if the recovery level does not specify
    +        'Purgeable'. This operation requires the certificate/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}
    +
    +    async def recover_deleted_certificate(self, vault_base_url, certificate_name, *, cls=None, **kwargs):
    +        """Recovers the deleted certificate back to its current version under
    +        /certificates.
    +
    +        The RecoverDeletedCertificate operation performs the reversal of the
    +        Delete operation. The operation is applicable in vaults enabled for
    +        soft-delete, and must be issued during the retention interval
    +        (available in the deleted certificate's attributes). This operation
    +        requires the certificates/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the deleted certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}/recover'}
    +
    +    async def create_key(self, vault_base_url, key_name, kty, key_size=None, key_ops=None, key_attributes=None, tags=None, curve=None, *, cls=None, **kwargs):
    +        """Creates a new key, stores it, then returns key parameters and
    +        attributes to the client.
    +
    +        The create key operation can be used to create any key type in Azure
    +        Key Vault. If the named key already exists, Azure Key Vault creates a
    +        new version of the key. It requires the keys/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name for the new key. The system will generate
    +         the version name for the new key.
    +        :type key_name: str
    +        :param kty: The type of key to create. For valid values, see
    +         JsonWebKeyType. Possible values include: 'EC', 'EC-HSM', 'RSA',
    +         'RSA-HSM', 'oct'
    +        :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +        :param key_size: The key size in bits. For example: 2048, 3072, or
    +         4096 for RSA.
    +        :type key_size: int
    +        :param key_ops:
    +        :type key_ops: list[str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +        :param key_attributes:
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param curve: Elliptic curve name. For valid values, see
    +         JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384',
    +         'P-521', 'P-256K'
    +        :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyCreateParameters(kty=kty, key_size=key_size, key_ops=key_ops, key_attributes=key_attributes, tags=tags, curve=curve)
    +
    +        # Construct URL
    +        url = self.create_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    create_key.metadata = {'url': '/keys/{key-name}/create'}
    +
    +    async def import_key(self, vault_base_url, key_name, key, hsm=None, key_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Imports an externally created key, stores it, and returns key
    +        parameters and attributes to the client.
    +
    +        The import key operation may be used to import any key type into an
    +        Azure Key Vault. If the named key already exists, Azure Key Vault
    +        creates a new version of the key. This operation requires the
    +        keys/import permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: Name for the imported key.
    +        :type key_name: str
    +        :param key: The Json web key
    +        :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +        :param hsm: Whether to import as a hardware key (HSM) or software key.
    +        :type hsm: bool
    +        :param key_attributes: The key management attributes.
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyImportParameters(hsm=hsm, key=key, key_attributes=key_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.import_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyImportParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    import_key.metadata = {'url': '/keys/{key-name}'}
    +
    +    async def delete_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Deletes a key of any type from storage in Azure Key Vault.
    +
    +        The delete key operation cannot be used to remove individual versions
    +        of a key. This operation removes the cryptographic material associated
    +        with the key, which means the key is not usable for Sign/Verify,
    +        Wrap/Unwrap or Encrypt/Decrypt operations. This operation requires the
    +        keys/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key to delete.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedKeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedKeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedKeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_key.metadata = {'url': '/keys/{key-name}'}
    +
    +    async def update_key(self, vault_base_url, key_name, key_version, key_ops=None, key_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """The update key operation changes specified attributes of a stored key
    +        and can be applied to any key type and key version stored in Azure Key
    +        Vault.
    +
    +        In order to perform this operation, the key must already exist in the
    +        Key Vault. Note: The cryptographic material of a key itself cannot be
    +        changed. This operation requires the keys/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of key to update.
    +        :type key_name: str
    +        :param key_version: The version of the key to update.
    +        :type key_version: str
    +        :param key_ops: Json web key operations. For more information on
    +         possible key operations, see JsonWebKeyOperation.
    +        :type key_ops: list[str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +        :param key_attributes:
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyUpdateParameters(key_ops=key_ops, key_attributes=key_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_key.metadata = {'url': '/keys/{key-name}/{key-version}'}
    +
    +    async def get_key(self, vault_base_url, key_name, key_version, *, cls=None, **kwargs):
    +        """Gets the public part of a stored key.
    +
    +        The get key operation is applicable to all key types. If the requested
    +        key is symmetric, then no key material is released in the response.
    +        This operation requires the keys/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key to get.
    +        :type key_name: str
    +        :param key_version: Adding the version parameter retrieves a specific
    +         version of a key.
    +        :type key_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_key.metadata = {'url': '/keys/{key-name}/{key-version}'}
    +
    +    def get_key_versions(
    +            self, vault_base_url, key_name, maxresults=None, *, cls=None, **kwargs):
    +        """Retrieves a list of individual key versions with the same key name.
    +
    +        The full key identifier, attributes, and tags are provided in the
    +        response. This operation requires the keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of KeyItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.KeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_key_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'key-name': self._serialize.url("key_name", key_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'key-name': self._serialize.url("key_name", key_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('KeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_key_versions.metadata = {'url': '/keys/{key-name}/versions'}
    +
    +    def get_keys(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """List keys in the specified vault.
    +
    +        Retrieves a list of the keys in the Key Vault as JSON Web Key
    +        structures that contain the public part of a stored key. The LIST
    +        operation is applicable to all key types, however only the base key
    +        identifier, attributes, and tags are provided in the response.
    +        Individual versions of a key are not listed in the response. This
    +        operation requires the keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of KeyItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.KeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_keys.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('KeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_keys.metadata = {'url': '/keys'}
    +
    +    async def backup_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Requests that a backup of the specified key be downloaded to the
    +        client.
    +
    +        The Key Backup operation exports a key from Azure Key Vault in a
    +        protected form. Note that this operation does NOT return key material
    +        in a form that can be used outside the Azure Key Vault system, the
    +        returned key material is either protected to a Azure Key Vault HSM or
    +        to Azure Key Vault itself. The intent of this operation is to allow a
    +        client to GENERATE a key in one Azure Key Vault instance, BACKUP the
    +        key, and then RESTORE it into another Azure Key Vault instance. The
    +        BACKUP operation may be used to export, in protected form, any key type
    +        from Azure Key Vault. Individual versions of a key cannot be backed up.
    +        BACKUP / RESTORE can be performed within geographical boundaries only;
    +        meaning that a BACKUP from one geographical area cannot be restored to
    +        another geographical area. For example, a backup from the US
    +        geographical area cannot be restored in an EU geographical area. This
    +        operation requires the key/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupKeyResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupKeyResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupKeyResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_key.metadata = {'url': '/keys/{key-name}/backup'}
    +
    +    async def restore_key(self, vault_base_url, key_bundle_backup, *, cls=None, **kwargs):
    +        """Restores a backed up key to a vault.
    +
    +        Imports a previously backed up key into Azure Key Vault, restoring the
    +        key, its key identifier, attributes and access control policies. The
    +        RESTORE operation may be used to import a previously backed up key.
    +        Individual versions of a key cannot be restored. The key is restored in
    +        its entirety with the same key name as it had when it was backed up. If
    +        the key name is not available in the target Key Vault, the RESTORE
    +        operation will be rejected. While the key name is retained during
    +        restore, the final key identifier will change if the key is restored to
    +        a different vault. Restore will restore all versions and preserve
    +        version identifiers. The RESTORE operation is subject to security
    +        constraints: The target Key Vault must be owned by the same Microsoft
    +        Azure Subscription as the source Key Vault The user must have RESTORE
    +        permission in the target Key Vault. This operation requires the
    +        keys/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_bundle_backup: The backup blob associated with a key
    +         bundle.
    +        :type key_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyRestoreParameters(key_bundle_backup=key_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_key.metadata = {'url': '/keys/restore'}
    +
    +    async def encrypt(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Encrypts an arbitrary sequence of bytes using an encryption key that is
    +        stored in a key vault.
    +
    +        The ENCRYPT operation encrypts an arbitrary sequence of bytes using an
    +        encryption key that is stored in Azure Key Vault. Note that the ENCRYPT
    +        operation only supports a single block of data, the size of which is
    +        dependent on the target key and the encryption algorithm to be used.
    +        The ENCRYPT operation is only strictly necessary for symmetric keys
    +        stored in Azure Key Vault since protection with an asymmetric key can
    +        be performed using public portion of the key. This operation is
    +        supported for asymmetric keys as a convenience for callers that have a
    +        key-reference but do not have access to the public key material. This
    +        operation requires the keys/encrypt permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.encrypt.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    encrypt.metadata = {'url': '/keys/{key-name}/{key-version}/encrypt'}
    +
    +    async def decrypt(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Decrypts a single block of encrypted data.
    +
    +        The DECRYPT operation decrypts a well-formed block of ciphertext using
    +        the target encryption key and specified algorithm. This operation is
    +        the reverse of the ENCRYPT operation; only a single block of data may
    +        be decrypted, the size of this block is dependent on the target key and
    +        the algorithm to be used. The DECRYPT operation applies to asymmetric
    +        and symmetric keys stored in Azure Key Vault since it uses the private
    +        portion of the key. This operation requires the keys/decrypt
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.decrypt.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    decrypt.metadata = {'url': '/keys/{key-name}/{key-version}/decrypt'}
    +
    +    async def sign(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Creates a signature from a digest using the specified key.
    +
    +        The SIGN operation is applicable to asymmetric and symmetric keys
    +        stored in Azure Key Vault since this operation uses the private portion
    +        of the key. This operation requires the keys/sign permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: The signing/verification algorithm identifier. For
    +         more information on possible algorithm types, see
    +         JsonWebKeySignatureAlgorithm. Possible values include: 'PS256',
    +         'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256',
    +         'ES384', 'ES512', 'ES256K'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeySignParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.sign.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeySignParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    sign.metadata = {'url': '/keys/{key-name}/{key-version}/sign'}
    +
    +    async def verify(self, vault_base_url, key_name, key_version, algorithm, digest, signature, *, cls=None, **kwargs):
    +        """Verifies a signature using a specified key.
    +
    +        The VERIFY operation is applicable to symmetric keys stored in Azure
    +        Key Vault. VERIFY is not strictly necessary for asymmetric keys stored
    +        in Azure Key Vault since signature verification can be performed using
    +        the public portion of the key but this operation is supported as a
    +        convenience for callers that only have a key-reference and not the
    +        public portion of the key. This operation requires the keys/verify
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: The signing/verification algorithm. For more
    +         information on possible algorithm types, see
    +         JsonWebKeySignatureAlgorithm. Possible values include: 'PS256',
    +         'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256',
    +         'ES384', 'ES512', 'ES256K'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +        :param digest: The digest used for signing.
    +        :type digest: bytes
    +        :param signature: The signature to be verified.
    +        :type signature: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyVerifyResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyVerifyResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyVerifyParameters(algorithm=algorithm, digest=digest, signature=signature)
    +
    +        # Construct URL
    +        url = self.verify.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyVerifyParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyVerifyResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    verify.metadata = {'url': '/keys/{key-name}/{key-version}/verify'}
    +
    +    async def wrap_key(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Wraps a symmetric key using a specified key.
    +
    +        The WRAP operation supports encryption of a symmetric key using a key
    +        encryption key that has previously been stored in an Azure Key Vault.
    +        The WRAP operation is only strictly necessary for symmetric keys stored
    +        in Azure Key Vault since protection with an asymmetric key can be
    +        performed using the public portion of the key. This operation is
    +        supported for asymmetric keys as a convenience for callers that have a
    +        key-reference but do not have access to the public key material. This
    +        operation requires the keys/wrapKey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.wrap_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    wrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/wrapkey'}
    +
    +    async def unwrap_key(self, vault_base_url, key_name, key_version, algorithm, value, *, cls=None, **kwargs):
    +        """Unwraps a symmetric key using the specified key that was initially used
    +        for wrapping that key.
    +
    +        The UNWRAP operation supports decryption of a symmetric key using the
    +        target key encryption key. This operation is the reverse of the WRAP
    +        operation. The UNWRAP operation applies to asymmetric and symmetric
    +        keys stored in Azure Key Vault since it uses the private portion of the
    +        key. This operation requires the keys/unwrapKey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.unwrap_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    unwrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/unwrapkey'}
    +
    +    def get_deleted_keys(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """Lists the deleted keys in the specified vault.
    +
    +        Retrieves a list of the keys in the Key Vault as JSON Web Key
    +        structures that contain the public part of a deleted key. This
    +        operation includes deletion-specific information. The Get Deleted Keys
    +        operation is applicable for vaults enabled for soft-delete. While the
    +        operation can be invoked on any vault, it will return an error if
    +        invoked on a non soft-delete enabled vault. This operation requires the
    +        keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedKeyItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedKeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_keys.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedKeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_keys.metadata = {'url': '/deletedkeys'}
    +
    +    async def get_deleted_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Gets the public part of a deleted key.
    +
    +        The Get Deleted Key operation is applicable for soft-delete enabled
    +        vaults. While the operation can be invoked on any vault, it will return
    +        an error if invoked on a non soft-delete enabled vault. This operation
    +        requires the keys/get permission. .
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedKeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedKeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedKeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}
    +
    +    async def purge_deleted_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Permanently deletes the specified key.
    +
    +        The Purge Deleted Key operation is applicable for soft-delete enabled
    +        vaults. While the operation can be invoked on any vault, it will return
    +        an error if invoked on a non soft-delete enabled vault. This operation
    +        requires the keys/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}
    +
    +    async def recover_deleted_key(self, vault_base_url, key_name, *, cls=None, **kwargs):
    +        """Recovers the deleted key to its latest version.
    +
    +        The Recover Deleted Key operation is applicable for deleted keys in
    +        soft-delete enabled vaults. It recovers the deleted key back to its
    +        latest version under /keys. An attempt to recover an non-deleted key
    +        will return an error. Consider this the inverse of the delete operation
    +        on soft-delete enabled vaults. This operation requires the keys/recover
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the deleted key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_key.metadata = {'url': '/deletedkeys/{key-name}/recover'}
    +
    +    async def set_secret(self, vault_base_url, secret_name, value, tags=None, content_type=None, secret_attributes=None, *, cls=None, **kwargs):
    +        """Sets a secret in a specified key vault.
    +
    +        The SET operation adds a secret to the Azure Key Vault. If the named
    +        secret already exists, Azure Key Vault creates a new version of that
    +        secret. This operation requires the secrets/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param value: The value of the secret.
    +        :type value: str
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param content_type: Type of the secret value such as a password.
    +        :type content_type: str
    +        :param secret_attributes: The secret management attributes.
    +        :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretSetParameters(value=value, tags=tags, content_type=content_type, secret_attributes=secret_attributes)
    +
    +        # Construct URL
    +        url = self.set_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretSetParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_secret.metadata = {'url': '/secrets/{secret-name}'}
    +
    +    async def delete_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Deletes a secret from a specified key vault.
    +
    +        The DELETE operation applies to any secret stored in Azure Key Vault.
    +        DELETE cannot be applied to an individual version of a secret. This
    +        operation requires the secrets/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_secret.metadata = {'url': '/secrets/{secret-name}'}
    +
    +    async def update_secret(self, vault_base_url, secret_name, secret_version, content_type=None, secret_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Updates the attributes associated with a specified secret in a given
    +        key vault.
    +
    +        The UPDATE operation changes specified attributes of an existing stored
    +        secret. Attributes that are not specified in the request are left
    +        unchanged. The value of a secret itself cannot be changed. This
    +        operation requires the secrets/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param secret_version: The version of the secret.
    +        :type secret_version: str
    +        :param content_type: Type of the secret value such as a password.
    +        :type content_type: str
    +        :param secret_attributes: The secret management attributes.
    +        :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretUpdateParameters(content_type=content_type, secret_attributes=secret_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
    +            'secret-version': self._serialize.url("secret_version", secret_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}
    +
    +    async def get_secret(self, vault_base_url, secret_name, secret_version, *, cls=None, **kwargs):
    +        """Get a specified secret from a given key vault.
    +
    +        The GET operation is applicable to any secret stored in Azure Key
    +        Vault. This operation requires the secrets/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param secret_version: The version of the secret.
    +        :type secret_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
    +            'secret-version': self._serialize.url("secret_version", secret_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}
    +
    +    def get_secrets(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """List secrets in a specified key vault.
    +
    +        The Get Secrets operation is applicable to the entire vault. However,
    +        only the base secret identifier and its attributes are provided in the
    +        response. Individual secret versions are not listed in the response.
    +        This operation requires the secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified, the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SecretItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.SecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_secrets.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('SecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_secrets.metadata = {'url': '/secrets'}
    +
    +    def get_secret_versions(
    +            self, vault_base_url, secret_name, maxresults=None, *, cls=None, **kwargs):
    +        """List all versions of the specified secret.
    +
    +        The full secret identifier and attributes are provided in the response.
    +        No values are returned for the secrets. This operations requires the
    +        secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified, the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SecretItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.SecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_secret_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('SecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_secret_versions.metadata = {'url': '/secrets/{secret-name}/versions'}
    +
    +    def get_deleted_secrets(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """Lists deleted secrets for the specified vault.
    +
    +        The Get Deleted Secrets operation returns the secrets that have been
    +        deleted for a vault enabled for soft-delete. This operation requires
    +        the secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedSecretItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedSecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_secrets.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedSecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_secrets.metadata = {'url': '/deletedsecrets'}
    +
    +    async def get_deleted_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Gets the specified deleted secret.
    +
    +        The Get Deleted Secret operation returns the specified deleted secret
    +        along with its attributes. This operation requires the secrets/get
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}
    +
    +    async def purge_deleted_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Permanently deletes the specified secret.
    +
    +        The purge deleted secret operation removes the secret permanently,
    +        without the possibility of recovery. This operation can only be enabled
    +        on a soft-delete enabled vault. This operation requires the
    +        secrets/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}
    +
    +    async def recover_deleted_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Recovers the deleted secret to the latest version.
    +
    +        Recovers the deleted secret in the specified vault. This operation can
    +        only be performed on a soft-delete enabled vault. This operation
    +        requires the secrets/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the deleted secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}/recover'}
    +
    +    async def backup_secret(self, vault_base_url, secret_name, *, cls=None, **kwargs):
    +        """Backs up the specified secret.
    +
    +        Requests that a backup of the specified secret be downloaded to the
    +        client. All versions of the secret will be downloaded. This operation
    +        requires the secrets/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupSecretResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupSecretResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupSecretResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_secret.metadata = {'url': '/secrets/{secret-name}/backup'}
    +
    +    async def restore_secret(self, vault_base_url, secret_bundle_backup, *, cls=None, **kwargs):
    +        """Restores a backed up secret to a vault.
    +
    +        Restores a backed up secret, and all its versions, to a vault. This
    +        operation requires the secrets/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_bundle_backup: The backup blob associated with a secret
    +         bundle.
    +        :type secret_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretRestoreParameters(secret_bundle_backup=secret_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_secret.metadata = {'url': '/secrets/restore'}
    +
    +    def get_storage_accounts(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """List storage accounts managed by the specified key vault. This
    +        operation requires the storage/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of StorageAccountItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.StorageAccountItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_storage_accounts.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('StorageListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_storage_accounts.metadata = {'url': '/storage'}
    +
    +    def get_deleted_storage_accounts(
    +            self, vault_base_url, maxresults=None, *, cls=None, **kwargs):
    +        """Lists deleted storage accounts for the specified vault.
    +
    +        The Get Deleted Storage Accounts operation returns the storage accounts
    +        that have been deleted for a vault enabled for soft-delete. This
    +        operation requires the storage/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedStorageAccountItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedStorageAccountItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_storage_accounts.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedStorageListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_storage_accounts.metadata = {'url': '/deletedstorage'}
    +
    +    async def get_deleted_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Gets the specified deleted storage account.
    +
    +        The Get Deleted Storage Account operation returns the specified deleted
    +        storage account along with its attributes. This operation requires the
    +        storage/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedStorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedStorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedStorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}
    +
    +    async def purge_deleted_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Permanently deletes the specified storage account.
    +
    +        The purge deleted storage account operation removes the secret
    +        permanently, without the possibility of recovery. This operation can
    +        only be performed on a soft-delete enabled vault. This operation
    +        requires the storage/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}
    +
    +    async def recover_deleted_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Recovers the deleted storage account.
    +
    +        Recovers the deleted storage account in the specified vault. This
    +        operation can only be performed on a soft-delete enabled vault. This
    +        operation requires the storage/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}/recover'}
    +
    +    async def backup_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Backs up the specified storage account.
    +
    +        Requests that a backup of the specified storage account be downloaded
    +        to the client. This operation requires the storage/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupStorageResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupStorageResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupStorageResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_storage_account.metadata = {'url': '/storage/{storage-account-name}/backup'}
    +
    +    async def restore_storage_account(self, vault_base_url, storage_bundle_backup, *, cls=None, **kwargs):
    +        """Restores a backed up storage account to a vault.
    +
    +        Restores a backed up storage account to a vault. This operation
    +        requires the storage/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_bundle_backup: The backup blob associated with a
    +         storage account.
    +        :type storage_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageRestoreParameters(storage_bundle_backup=storage_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_storage_account.metadata = {'url': '/storage/restore'}
    +
    +    async def delete_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Deletes a storage account. This operation requires the storage/delete
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedStorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedStorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedStorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    async def get_storage_account(self, vault_base_url, storage_account_name, *, cls=None, **kwargs):
    +        """Gets information about a specified storage account. This operation
    +        requires the storage/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    async def set_storage_account(self, vault_base_url, storage_account_name, resource_id, active_key_name, auto_regenerate_key, regeneration_period=None, storage_account_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Creates or updates a new storage account. This operation requires the
    +        storage/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param resource_id: Storage account resource id.
    +        :type resource_id: str
    +        :param active_key_name: Current active storage account key name.
    +        :type active_key_name: str
    +        :param auto_regenerate_key: whether keyvault should manage the storage
    +         account for the user.
    +        :type auto_regenerate_key: bool
    +        :param regeneration_period: The key regeneration time duration
    +         specified in ISO-8601 format.
    +        :type regeneration_period: str
    +        :param storage_account_attributes: The attributes of the storage
    +         account.
    +        :type storage_account_attributes:
    +         ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountCreateParameters(resource_id=resource_id, active_key_name=active_key_name, auto_regenerate_key=auto_regenerate_key, regeneration_period=regeneration_period, storage_account_attributes=storage_account_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.set_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    async def update_storage_account(self, vault_base_url, storage_account_name, active_key_name=None, auto_regenerate_key=None, regeneration_period=None, storage_account_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given storage
    +        account. This operation requires the storage/set/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param active_key_name: The current active storage account key name.
    +        :type active_key_name: str
    +        :param auto_regenerate_key: whether keyvault should manage the storage
    +         account for the user.
    +        :type auto_regenerate_key: bool
    +        :param regeneration_period: The key regeneration time duration
    +         specified in ISO-8601 format.
    +        :type regeneration_period: str
    +        :param storage_account_attributes: The attributes of the storage
    +         account.
    +        :type storage_account_attributes:
    +         ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountUpdateParameters(active_key_name=active_key_name, auto_regenerate_key=auto_regenerate_key, regeneration_period=regeneration_period, storage_account_attributes=storage_account_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    async def regenerate_storage_account_key(self, vault_base_url, storage_account_name, key_name, *, cls=None, **kwargs):
    +        """Regenerates the specified key value for the given storage account. This
    +        operation requires the storage/regeneratekey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param key_name: The storage account key name.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountRegenerteKeyParameters(key_name=key_name)
    +
    +        # Construct URL
    +        url = self.regenerate_storage_account_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountRegenerteKeyParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    regenerate_storage_account_key.metadata = {'url': '/storage/{storage-account-name}/regeneratekey'}
    +
    +    def get_sas_definitions(
    +            self, vault_base_url, storage_account_name, maxresults=None, *, cls=None, **kwargs):
    +        """List storage SAS definitions for the given storage account. This
    +        operation requires the storage/listsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SasDefinitionItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.SasDefinitionItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_sas_definitions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('SasDefinitionListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_sas_definitions.metadata = {'url': '/storage/{storage-account-name}/sas'}
    +
    +    def get_deleted_sas_definitions(
    +            self, vault_base_url, storage_account_name, maxresults=None, *, cls=None, **kwargs):
    +        """Lists deleted SAS definitions for the specified vault and storage
    +        account.
    +
    +        The Get Deleted Sas Definitions operation returns the SAS definitions
    +        that have been deleted for a vault enabled for soft-delete. This
    +        operation requires the storage/listsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedSasDefinitionItem
    +        :rtype:
    +         ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_1.models.DeletedSasDefinitionItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_sas_definitions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        async def extract_data_async(response):
    +            deserialized = self._deserialize('DeletedSasDefinitionListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, AsyncList(list_of_elem)
    +
    +        async def get_next_async(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = await self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return AsyncItemPaged(
    +            get_next_async, extract_data_async
    +        )
    +    get_deleted_sas_definitions.metadata = {'url': '/deletedstorage/{storage-account-name}/sas'}
    +
    +    async def get_deleted_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, *, cls=None, **kwargs):
    +        """Gets the specified deleted sas definition.
    +
    +        The Get Deleted SAS Definition operation returns the specified deleted
    +        SAS definition along with its attributes. This operation requires the
    +        storage/getsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    async def recover_deleted_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, *, cls=None, **kwargs):
    +        """Recovers the deleted SAS definition.
    +
    +        Recovers the deleted SAS definition for the specified storage account.
    +        This operation can only be performed on a soft-delete enabled vault.
    +        This operation requires the storage/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}/recover'}
    +
    +    async def delete_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, *, cls=None, **kwargs):
    +        """Deletes a SAS definition from a specified storage account. This
    +        operation requires the storage/deletesas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    async def get_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, *, cls=None, **kwargs):
    +        """Gets information about a SAS definition for the specified storage
    +        account. This operation requires the storage/getsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    async def set_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, template_uri, sas_type, validity_period, sas_definition_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Creates or updates a new SAS definition for the specified storage
    +        account. This operation requires the storage/setsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param template_uri: The SAS definition token template signed with an
    +         arbitrary key.  Tokens created according to the SAS definition will
    +         have the same properties as the template.
    +        :type template_uri: str
    +        :param sas_type: The type of SAS token the SAS definition will create.
    +         Possible values include: 'account', 'service'
    +        :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +        :param validity_period: The validity period of SAS tokens created
    +         according to the SAS definition.
    +        :type validity_period: str
    +        :param sas_definition_attributes: The attributes of the SAS
    +         definition.
    +        :type sas_definition_attributes:
    +         ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SasDefinitionCreateParameters(template_uri=template_uri, sas_type=sas_type, validity_period=validity_period, sas_definition_attributes=sas_definition_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.set_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SasDefinitionCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    async def update_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, template_uri=None, sas_type=None, validity_period=None, sas_definition_attributes=None, tags=None, *, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given SAS
    +        definition. This operation requires the storage/setsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param template_uri: The SAS definition token template signed with an
    +         arbitrary key.  Tokens created according to the SAS definition will
    +         have the same properties as the template.
    +        :type template_uri: str
    +        :param sas_type: The type of SAS token the SAS definition will create.
    +         Possible values include: 'account', 'service'
    +        :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +        :param validity_period: The validity period of SAS tokens created
    +         according to the SAS definition.
    +        :type validity_period: str
    +        :param sas_definition_attributes: The attributes of the SAS
    +         definition.
    +        :type sas_definition_attributes:
    +         ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SasDefinitionUpdateParameters(template_uri=template_uri, sas_type=sas_type, validity_period=validity_period, sas_definition_attributes=sas_definition_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SasDefinitionUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/models/__init__.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/models/__init__.py
    new file mode 100644
    index 000000000000..68ccf6d2e5f5
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/models/__init__.py
    @@ -0,0 +1,303 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +try:
    +    from ._models_py3 import Action
    +    from ._models_py3 import AdministratorDetails
    +    from ._models_py3 import Attributes
    +    from ._models_py3 import BackupCertificateResult
    +    from ._models_py3 import BackupKeyResult
    +    from ._models_py3 import BackupSecretResult
    +    from ._models_py3 import BackupStorageResult
    +    from ._models_py3 import CertificateAttributes
    +    from ._models_py3 import CertificateBundle
    +    from ._models_py3 import CertificateCreateParameters
    +    from ._models_py3 import CertificateImportParameters
    +    from ._models_py3 import CertificateIssuerItem
    +    from ._models_py3 import CertificateIssuerListResult
    +    from ._models_py3 import CertificateIssuerSetParameters
    +    from ._models_py3 import CertificateIssuerUpdateParameters
    +    from ._models_py3 import CertificateItem
    +    from ._models_py3 import CertificateListResult
    +    from ._models_py3 import CertificateMergeParameters
    +    from ._models_py3 import CertificateOperation
    +    from ._models_py3 import CertificateOperationUpdateParameter
    +    from ._models_py3 import CertificatePolicy
    +    from ._models_py3 import CertificateRestoreParameters
    +    from ._models_py3 import CertificateUpdateParameters
    +    from ._models_py3 import Contact
    +    from ._models_py3 import Contacts
    +    from ._models_py3 import DeletedCertificateBundle
    +    from ._models_py3 import DeletedCertificateItem
    +    from ._models_py3 import DeletedCertificateListResult
    +    from ._models_py3 import DeletedKeyBundle
    +    from ._models_py3 import DeletedKeyItem
    +    from ._models_py3 import DeletedKeyListResult
    +    from ._models_py3 import DeletedSasDefinitionBundle
    +    from ._models_py3 import DeletedSasDefinitionItem
    +    from ._models_py3 import DeletedSasDefinitionListResult
    +    from ._models_py3 import DeletedSecretBundle
    +    from ._models_py3 import DeletedSecretItem
    +    from ._models_py3 import DeletedSecretListResult
    +    from ._models_py3 import DeletedStorageAccountItem
    +    from ._models_py3 import DeletedStorageBundle
    +    from ._models_py3 import DeletedStorageListResult
    +    from ._models_py3 import Error
    +    from ._models_py3 import IssuerAttributes
    +    from ._models_py3 import IssuerBundle
    +    from ._models_py3 import IssuerCredentials
    +    from ._models_py3 import IssuerParameters
    +    from ._models_py3 import JsonWebKey
    +    from ._models_py3 import KeyAttributes
    +    from ._models_py3 import KeyBundle
    +    from ._models_py3 import KeyCreateParameters
    +    from ._models_py3 import KeyImportParameters
    +    from ._models_py3 import KeyItem
    +    from ._models_py3 import KeyListResult
    +    from ._models_py3 import KeyOperationResult
    +    from ._models_py3 import KeyOperationsParameters
    +    from ._models_py3 import KeyProperties
    +    from ._models_py3 import KeyRestoreParameters
    +    from ._models_py3 import KeySignParameters
    +    from ._models_py3 import KeyUpdateParameters
    +    from ._models_py3 import KeyVaultError, KeyVaultErrorException
    +    from ._models_py3 import KeyVerifyParameters
    +    from ._models_py3 import KeyVerifyResult
    +    from ._models_py3 import LifetimeAction
    +    from ._models_py3 import OrganizationDetails
    +    from ._models_py3 import PendingCertificateSigningRequestResult
    +    from ._models_py3 import SasDefinitionAttributes
    +    from ._models_py3 import SasDefinitionBundle
    +    from ._models_py3 import SasDefinitionCreateParameters
    +    from ._models_py3 import SasDefinitionItem
    +    from ._models_py3 import SasDefinitionListResult
    +    from ._models_py3 import SasDefinitionUpdateParameters
    +    from ._models_py3 import SecretAttributes
    +    from ._models_py3 import SecretBundle
    +    from ._models_py3 import SecretItem
    +    from ._models_py3 import SecretListResult
    +    from ._models_py3 import SecretProperties
    +    from ._models_py3 import SecretRestoreParameters
    +    from ._models_py3 import SecretSetParameters
    +    from ._models_py3 import SecretUpdateParameters
    +    from ._models_py3 import StorageAccountAttributes
    +    from ._models_py3 import StorageAccountCreateParameters
    +    from ._models_py3 import StorageAccountItem
    +    from ._models_py3 import StorageAccountRegenerteKeyParameters
    +    from ._models_py3 import StorageAccountUpdateParameters
    +    from ._models_py3 import StorageBundle
    +    from ._models_py3 import StorageListResult
    +    from ._models_py3 import StorageRestoreParameters
    +    from ._models_py3 import SubjectAlternativeNames
    +    from ._models_py3 import Trigger
    +    from ._models_py3 import X509CertificateProperties
    +except (SyntaxError, ImportError):
    +    from ._models import Action
    +    from ._models import AdministratorDetails
    +    from ._models import Attributes
    +    from ._models import BackupCertificateResult
    +    from ._models import BackupKeyResult
    +    from ._models import BackupSecretResult
    +    from ._models import BackupStorageResult
    +    from ._models import CertificateAttributes
    +    from ._models import CertificateBundle
    +    from ._models import CertificateCreateParameters
    +    from ._models import CertificateImportParameters
    +    from ._models import CertificateIssuerItem
    +    from ._models import CertificateIssuerListResult
    +    from ._models import CertificateIssuerSetParameters
    +    from ._models import CertificateIssuerUpdateParameters
    +    from ._models import CertificateItem
    +    from ._models import CertificateListResult
    +    from ._models import CertificateMergeParameters
    +    from ._models import CertificateOperation
    +    from ._models import CertificateOperationUpdateParameter
    +    from ._models import CertificatePolicy
    +    from ._models import CertificateRestoreParameters
    +    from ._models import CertificateUpdateParameters
    +    from ._models import Contact
    +    from ._models import Contacts
    +    from ._models import DeletedCertificateBundle
    +    from ._models import DeletedCertificateItem
    +    from ._models import DeletedCertificateListResult
    +    from ._models import DeletedKeyBundle
    +    from ._models import DeletedKeyItem
    +    from ._models import DeletedKeyListResult
    +    from ._models import DeletedSasDefinitionBundle
    +    from ._models import DeletedSasDefinitionItem
    +    from ._models import DeletedSasDefinitionListResult
    +    from ._models import DeletedSecretBundle
    +    from ._models import DeletedSecretItem
    +    from ._models import DeletedSecretListResult
    +    from ._models import DeletedStorageAccountItem
    +    from ._models import DeletedStorageBundle
    +    from ._models import DeletedStorageListResult
    +    from ._models import Error
    +    from ._models import IssuerAttributes
    +    from ._models import IssuerBundle
    +    from ._models import IssuerCredentials
    +    from ._models import IssuerParameters
    +    from ._models import JsonWebKey
    +    from ._models import KeyAttributes
    +    from ._models import KeyBundle
    +    from ._models import KeyCreateParameters
    +    from ._models import KeyImportParameters
    +    from ._models import KeyItem
    +    from ._models import KeyListResult
    +    from ._models import KeyOperationResult
    +    from ._models import KeyOperationsParameters
    +    from ._models import KeyProperties
    +    from ._models import KeyRestoreParameters
    +    from ._models import KeySignParameters
    +    from ._models import KeyUpdateParameters
    +    from ._models import KeyVaultError, KeyVaultErrorException
    +    from ._models import KeyVerifyParameters
    +    from ._models import KeyVerifyResult
    +    from ._models import LifetimeAction
    +    from ._models import OrganizationDetails
    +    from ._models import PendingCertificateSigningRequestResult
    +    from ._models import SasDefinitionAttributes
    +    from ._models import SasDefinitionBundle
    +    from ._models import SasDefinitionCreateParameters
    +    from ._models import SasDefinitionItem
    +    from ._models import SasDefinitionListResult
    +    from ._models import SasDefinitionUpdateParameters
    +    from ._models import SecretAttributes
    +    from ._models import SecretBundle
    +    from ._models import SecretItem
    +    from ._models import SecretListResult
    +    from ._models import SecretProperties
    +    from ._models import SecretRestoreParameters
    +    from ._models import SecretSetParameters
    +    from ._models import SecretUpdateParameters
    +    from ._models import StorageAccountAttributes
    +    from ._models import StorageAccountCreateParameters
    +    from ._models import StorageAccountItem
    +    from ._models import StorageAccountRegenerteKeyParameters
    +    from ._models import StorageAccountUpdateParameters
    +    from ._models import StorageBundle
    +    from ._models import StorageListResult
    +    from ._models import StorageRestoreParameters
    +    from ._models import SubjectAlternativeNames
    +    from ._models import Trigger
    +    from ._models import X509CertificateProperties
    +from ._key_vault_client_enums import (
    +    DeletionRecoveryLevel,
    +    JsonWebKeyType,
    +    JsonWebKeyCurveName,
    +    KeyUsageType,
    +    ActionType,
    +    JsonWebKeyOperation,
    +    JsonWebKeyEncryptionAlgorithm,
    +    JsonWebKeySignatureAlgorithm,
    +    SasTokenType,
    +)
    +
    +__all__ = [
    +    'Action',
    +    'AdministratorDetails',
    +    'Attributes',
    +    'BackupCertificateResult',
    +    'BackupKeyResult',
    +    'BackupSecretResult',
    +    'BackupStorageResult',
    +    'CertificateAttributes',
    +    'CertificateBundle',
    +    'CertificateCreateParameters',
    +    'CertificateImportParameters',
    +    'CertificateIssuerItem',
    +    'CertificateIssuerListResult',
    +    'CertificateIssuerSetParameters',
    +    'CertificateIssuerUpdateParameters',
    +    'CertificateItem',
    +    'CertificateListResult',
    +    'CertificateMergeParameters',
    +    'CertificateOperation',
    +    'CertificateOperationUpdateParameter',
    +    'CertificatePolicy',
    +    'CertificateRestoreParameters',
    +    'CertificateUpdateParameters',
    +    'Contact',
    +    'Contacts',
    +    'DeletedCertificateBundle',
    +    'DeletedCertificateItem',
    +    'DeletedCertificateListResult',
    +    'DeletedKeyBundle',
    +    'DeletedKeyItem',
    +    'DeletedKeyListResult',
    +    'DeletedSasDefinitionBundle',
    +    'DeletedSasDefinitionItem',
    +    'DeletedSasDefinitionListResult',
    +    'DeletedSecretBundle',
    +    'DeletedSecretItem',
    +    'DeletedSecretListResult',
    +    'DeletedStorageAccountItem',
    +    'DeletedStorageBundle',
    +    'DeletedStorageListResult',
    +    'Error',
    +    'IssuerAttributes',
    +    'IssuerBundle',
    +    'IssuerCredentials',
    +    'IssuerParameters',
    +    'JsonWebKey',
    +    'KeyAttributes',
    +    'KeyBundle',
    +    'KeyCreateParameters',
    +    'KeyImportParameters',
    +    'KeyItem',
    +    'KeyListResult',
    +    'KeyOperationResult',
    +    'KeyOperationsParameters',
    +    'KeyProperties',
    +    'KeyRestoreParameters',
    +    'KeySignParameters',
    +    'KeyUpdateParameters',
    +    'KeyVaultError', 'KeyVaultErrorException',
    +    'KeyVerifyParameters',
    +    'KeyVerifyResult',
    +    'LifetimeAction',
    +    'OrganizationDetails',
    +    'PendingCertificateSigningRequestResult',
    +    'SasDefinitionAttributes',
    +    'SasDefinitionBundle',
    +    'SasDefinitionCreateParameters',
    +    'SasDefinitionItem',
    +    'SasDefinitionListResult',
    +    'SasDefinitionUpdateParameters',
    +    'SecretAttributes',
    +    'SecretBundle',
    +    'SecretItem',
    +    'SecretListResult',
    +    'SecretProperties',
    +    'SecretRestoreParameters',
    +    'SecretSetParameters',
    +    'SecretUpdateParameters',
    +    'StorageAccountAttributes',
    +    'StorageAccountCreateParameters',
    +    'StorageAccountItem',
    +    'StorageAccountRegenerteKeyParameters',
    +    'StorageAccountUpdateParameters',
    +    'StorageBundle',
    +    'StorageListResult',
    +    'StorageRestoreParameters',
    +    'SubjectAlternativeNames',
    +    'Trigger',
    +    'X509CertificateProperties',
    +    'DeletionRecoveryLevel',
    +    'JsonWebKeyType',
    +    'JsonWebKeyCurveName',
    +    'KeyUsageType',
    +    'ActionType',
    +    'JsonWebKeyOperation',
    +    'JsonWebKeyEncryptionAlgorithm',
    +    'JsonWebKeySignatureAlgorithm',
    +    'SasTokenType',
    +]
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/models/_key_vault_client_enums.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/models/_key_vault_client_enums.py
    new file mode 100644
    index 000000000000..936353e5bb83
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/models/_key_vault_client_enums.py
    @@ -0,0 +1,98 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from enum import Enum
    +
    +
    +class DeletionRecoveryLevel(str, Enum):
    +
    +    purgeable = "Purgeable"
    +    recoverable_purgeable = "Recoverable+Purgeable"
    +    recoverable = "Recoverable"
    +    recoverable_protected_subscription = "Recoverable+ProtectedSubscription"
    +    customized_recoverable_purgeable = "CustomizedRecoverable+Purgeable"
    +    customized_recoverable = "CustomizedRecoverable"
    +    customized_recoverable_protected_subscription = "CustomizedRecoverable+ProtectedSubscription"
    +
    +
    +class JsonWebKeyType(str, Enum):
    +
    +    ec = "EC"
    +    ec_hsm = "EC-HSM"
    +    rsa = "RSA"
    +    rsa_hsm = "RSA-HSM"
    +    oct = "oct"
    +
    +
    +class JsonWebKeyCurveName(str, Enum):
    +
    +    p_256 = "P-256"
    +    p_384 = "P-384"
    +    p_521 = "P-521"
    +    p_256_k = "P-256K"
    +
    +
    +class KeyUsageType(str, Enum):
    +
    +    digital_signature = "digitalSignature"
    +    non_repudiation = "nonRepudiation"
    +    key_encipherment = "keyEncipherment"
    +    data_encipherment = "dataEncipherment"
    +    key_agreement = "keyAgreement"
    +    key_cert_sign = "keyCertSign"
    +    c_rl_sign = "cRLSign"
    +    encipher_only = "encipherOnly"
    +    decipher_only = "decipherOnly"
    +
    +
    +class ActionType(str, Enum):
    +
    +    email_contacts = "EmailContacts"
    +    auto_renew = "AutoRenew"
    +
    +
    +class JsonWebKeyOperation(str, Enum):
    +
    +    encrypt = "encrypt"
    +    decrypt = "decrypt"
    +    sign = "sign"
    +    verify = "verify"
    +    wrap_key = "wrapKey"
    +    unwrap_key = "unwrapKey"
    +    import_enum = "import"
    +
    +
    +class JsonWebKeyEncryptionAlgorithm(str, Enum):
    +
    +    rsa_oaep = "RSA-OAEP"
    +    rsa_oaep_256 = "RSA-OAEP-256"
    +    rsa1_5 = "RSA1_5"
    +
    +
    +class JsonWebKeySignatureAlgorithm(str, Enum):
    +
    +    ps256 = "PS256"  #: RSASSA-PSS using SHA-256 and MGF1 with SHA-256, as described in https://tools.ietf.org/html/rfc7518
    +    ps384 = "PS384"  #: RSASSA-PSS using SHA-384 and MGF1 with SHA-384, as described in https://tools.ietf.org/html/rfc7518
    +    ps512 = "PS512"  #: RSASSA-PSS using SHA-512 and MGF1 with SHA-512, as described in https://tools.ietf.org/html/rfc7518
    +    rs256 = "RS256"  #: RSASSA-PKCS1-v1_5 using SHA-256, as described in https://tools.ietf.org/html/rfc7518
    +    rs384 = "RS384"  #: RSASSA-PKCS1-v1_5 using SHA-384, as described in https://tools.ietf.org/html/rfc7518
    +    rs512 = "RS512"  #: RSASSA-PKCS1-v1_5 using SHA-512, as described in https://tools.ietf.org/html/rfc7518
    +    rsnull = "RSNULL"  #: Reserved
    +    es256 = "ES256"  #: ECDSA using P-256 and SHA-256, as described in https://tools.ietf.org/html/rfc7518.
    +    es384 = "ES384"  #: ECDSA using P-384 and SHA-384, as described in https://tools.ietf.org/html/rfc7518
    +    es512 = "ES512"  #: ECDSA using P-521 and SHA-512, as described in https://tools.ietf.org/html/rfc7518
    +    es256_k = "ES256K"  #: ECDSA using P-256K and SHA-256, as described in https://tools.ietf.org/html/rfc7518
    +
    +
    +class SasTokenType(str, Enum):
    +
    +    account = "account"
    +    service = "service"
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/models/_models.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/models/_models.py
    new file mode 100644
    index 000000000000..ea5379c44cc0
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/models/_models.py
    @@ -0,0 +1,3244 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from azure.core.exceptions import HttpResponseError
    +
    +
    +class Action(Model):
    +    """The action that will be executed.
    +
    +    :param action_type: The type of the action. Possible values include:
    +     'EmailContacts', 'AutoRenew'
    +    :type action_type: str or ~azure.keyvault.v7_1.models.ActionType
    +    """
    +
    +    _attribute_map = {
    +        'action_type': {'key': 'action_type', 'type': 'ActionType'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Action, self).__init__(**kwargs)
    +        self.action_type = kwargs.get('action_type', None)
    +
    +
    +class AdministratorDetails(Model):
    +    """Details of the organization administrator of the certificate issuer.
    +
    +    :param first_name: First name.
    +    :type first_name: str
    +    :param last_name: Last name.
    +    :type last_name: str
    +    :param email_address: Email address.
    +    :type email_address: str
    +    :param phone: Phone number.
    +    :type phone: str
    +    """
    +
    +    _attribute_map = {
    +        'first_name': {'key': 'first_name', 'type': 'str'},
    +        'last_name': {'key': 'last_name', 'type': 'str'},
    +        'email_address': {'key': 'email', 'type': 'str'},
    +        'phone': {'key': 'phone', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(AdministratorDetails, self).__init__(**kwargs)
    +        self.first_name = kwargs.get('first_name', None)
    +        self.last_name = kwargs.get('last_name', None)
    +        self.email_address = kwargs.get('email_address', None)
    +        self.phone = kwargs.get('phone', None)
    +
    +
    +class Attributes(Model):
    +    """The object attributes managed by the KeyVault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Attributes, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.not_before = kwargs.get('not_before', None)
    +        self.expires = kwargs.get('expires', None)
    +        self.created = None
    +        self.updated = None
    +
    +
    +class BackupCertificateResult(Model):
    +    """The backup certificate result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up certificate.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BackupCertificateResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupKeyResult(Model):
    +    """The backup key result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up key.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BackupKeyResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupSecretResult(Model):
    +    """The backup secret result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up secret.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BackupSecretResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupStorageResult(Model):
    +    """The backup storage result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up storage account.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(BackupStorageResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class CertificateAttributes(Attributes):
    +    """The certificate management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for certificates in the current vault. If it contains 'Purgeable',
    +     the certificate can be permanently deleted by a privileged user;
    +     otherwise, only the system can purge the certificate, at the end of the
    +     retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateAttributes, self).__init__(**kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class CertificateBundle(Model):
    +    """A certificate bundle consists of a certificate (X509) plus its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :ivar kid: The key id.
    +    :vartype kid: str
    +    :ivar sid: The secret id.
    +    :vartype sid: str
    +    :ivar x509_thumbprint: Thumbprint of the certificate.
    +    :vartype x509_thumbprint: bytes
    +    :ivar policy: The management policy.
    +    :vartype policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param cer: CER contents of x509 certificate.
    +    :type cer: bytearray
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'kid': {'readonly': True},
    +        'sid': {'readonly': True},
    +        'x509_thumbprint': {'readonly': True},
    +        'policy': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'sid': {'key': 'sid', 'type': 'str'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'cer': {'key': 'cer', 'type': 'bytearray'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.kid = None
    +        self.sid = None
    +        self.x509_thumbprint = None
    +        self.policy = None
    +        self.cer = kwargs.get('cer', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CertificateCreateParameters(Model):
    +    """The certificate create parameters.
    +
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateCreateParameters, self).__init__(**kwargs)
    +        self.certificate_policy = kwargs.get('certificate_policy', None)
    +        self.certificate_attributes = kwargs.get('certificate_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CertificateImportParameters(Model):
    +    """The certificate import parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param base64_encoded_certificate: Required. Base64 encoded representation
    +     of the certificate object to import. This certificate needs to contain the
    +     private key.
    +    :type base64_encoded_certificate: str
    +    :param password: If the private key in base64EncodedCertificate is
    +     encrypted, the password used for encryption.
    +    :type password: str
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'base64_encoded_certificate': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'base64_encoded_certificate': {'key': 'value', 'type': 'str'},
    +        'password': {'key': 'pwd', 'type': 'str'},
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateImportParameters, self).__init__(**kwargs)
    +        self.base64_encoded_certificate = kwargs.get('base64_encoded_certificate', None)
    +        self.password = kwargs.get('password', None)
    +        self.certificate_policy = kwargs.get('certificate_policy', None)
    +        self.certificate_attributes = kwargs.get('certificate_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CertificateIssuerItem(Model):
    +    """The certificate issuer item containing certificate issuer metadata.
    +
    +    :param id: Certificate Identifier.
    +    :type id: str
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'provider': {'key': 'provider', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateIssuerItem, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.provider = kwargs.get('provider', None)
    +
    +
    +class CertificateIssuerListResult(Model):
    +    """The certificate issuer list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of certificate issuers
    +     in the key vault along with a link to the next page of certificate
    +     issuers.
    +    :vartype value: list[~azure.keyvault.v7_1.models.CertificateIssuerItem]
    +    :ivar next_link: The URL to get the next set of certificate issuers.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateIssuerItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateIssuerListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class CertificateIssuerSetParameters(Model):
    +    """The certificate issuer set parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param provider: Required. The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _validation = {
    +        'provider': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateIssuerSetParameters, self).__init__(**kwargs)
    +        self.provider = kwargs.get('provider', None)
    +        self.credentials = kwargs.get('credentials', None)
    +        self.organization_details = kwargs.get('organization_details', None)
    +        self.attributes = kwargs.get('attributes', None)
    +
    +
    +class CertificateIssuerUpdateParameters(Model):
    +    """The certificate issuer update parameters.
    +
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateIssuerUpdateParameters, self).__init__(**kwargs)
    +        self.provider = kwargs.get('provider', None)
    +        self.credentials = kwargs.get('credentials', None)
    +        self.organization_details = kwargs.get('organization_details', None)
    +        self.attributes = kwargs.get('attributes', None)
    +
    +
    +class CertificateItem(Model):
    +    """The certificate item containing certificate metadata.
    +
    +    :param id: Certificate identifier.
    +    :type id: str
    +    :param attributes: The certificate management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param x509_thumbprint: Thumbprint of the certificate.
    +    :type x509_thumbprint: bytes
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateItem, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.x509_thumbprint = kwargs.get('x509_thumbprint', None)
    +
    +
    +class CertificateListResult(Model):
    +    """The certificate list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of certificates in the
    +     key vault along with a link to the next page of certificates.
    +    :vartype value: list[~azure.keyvault.v7_1.models.CertificateItem]
    +    :ivar next_link: The URL to get the next set of certificates.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class CertificateMergeParameters(Model):
    +    """The certificate merge parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param x509_certificates: Required. The certificate or the certificate
    +     chain to merge.
    +    :type x509_certificates: list[bytearray]
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'x509_certificates': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'x509_certificates': {'key': 'x5c', 'type': '[bytearray]'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateMergeParameters, self).__init__(**kwargs)
    +        self.x509_certificates = kwargs.get('x509_certificates', None)
    +        self.certificate_attributes = kwargs.get('certificate_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class CertificateOperation(Model):
    +    """A certificate operation is returned in case of asynchronous requests.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :param issuer_parameters: Parameters for the issuer of the X509 component
    +     of a certificate.
    +    :type issuer_parameters: ~azure.keyvault.v7_1.models.IssuerParameters
    +    :param csr: The certificate signing request (CSR) that is being used in
    +     the certificate operation.
    +    :type csr: bytearray
    +    :param cancellation_requested: Indicates if cancellation was requested on
    +     the certificate operation.
    +    :type cancellation_requested: bool
    +    :param status: Status of the certificate operation.
    +    :type status: str
    +    :param status_details: The status details of the certificate operation.
    +    :type status_details: str
    +    :param error: Error encountered, if any, during the certificate operation.
    +    :type error: ~azure.keyvault.v7_1.models.Error
    +    :param target: Location which contains the result of the certificate
    +     operation.
    +    :type target: str
    +    :param request_id: Identifier for the certificate operation.
    +    :type request_id: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'},
    +        'csr': {'key': 'csr', 'type': 'bytearray'},
    +        'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'},
    +        'status': {'key': 'status', 'type': 'str'},
    +        'status_details': {'key': 'status_details', 'type': 'str'},
    +        'error': {'key': 'error', 'type': 'Error'},
    +        'target': {'key': 'target', 'type': 'str'},
    +        'request_id': {'key': 'request_id', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateOperation, self).__init__(**kwargs)
    +        self.id = None
    +        self.issuer_parameters = kwargs.get('issuer_parameters', None)
    +        self.csr = kwargs.get('csr', None)
    +        self.cancellation_requested = kwargs.get('cancellation_requested', None)
    +        self.status = kwargs.get('status', None)
    +        self.status_details = kwargs.get('status_details', None)
    +        self.error = kwargs.get('error', None)
    +        self.target = kwargs.get('target', None)
    +        self.request_id = kwargs.get('request_id', None)
    +
    +
    +class CertificateOperationUpdateParameter(Model):
    +    """The certificate operation update parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param cancellation_requested: Required. Indicates if cancellation was
    +     requested on the certificate operation.
    +    :type cancellation_requested: bool
    +    """
    +
    +    _validation = {
    +        'cancellation_requested': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateOperationUpdateParameter, self).__init__(**kwargs)
    +        self.cancellation_requested = kwargs.get('cancellation_requested', None)
    +
    +
    +class CertificatePolicy(Model):
    +    """Management policy for a certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :param key_properties: Properties of the key backing a certificate.
    +    :type key_properties: ~azure.keyvault.v7_1.models.KeyProperties
    +    :param secret_properties: Properties of the secret backing a certificate.
    +    :type secret_properties: ~azure.keyvault.v7_1.models.SecretProperties
    +    :param x509_certificate_properties: Properties of the X509 component of a
    +     certificate.
    +    :type x509_certificate_properties:
    +     ~azure.keyvault.v7_1.models.X509CertificateProperties
    +    :param lifetime_actions: Actions that will be performed by Key Vault over
    +     the lifetime of a certificate.
    +    :type lifetime_actions: list[~azure.keyvault.v7_1.models.LifetimeAction]
    +    :param issuer_parameters: Parameters for the issuer of the X509 component
    +     of a certificate.
    +    :type issuer_parameters: ~azure.keyvault.v7_1.models.IssuerParameters
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'key_properties': {'key': 'key_props', 'type': 'KeyProperties'},
    +        'secret_properties': {'key': 'secret_props', 'type': 'SecretProperties'},
    +        'x509_certificate_properties': {'key': 'x509_props', 'type': 'X509CertificateProperties'},
    +        'lifetime_actions': {'key': 'lifetime_actions', 'type': '[LifetimeAction]'},
    +        'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificatePolicy, self).__init__(**kwargs)
    +        self.id = None
    +        self.key_properties = kwargs.get('key_properties', None)
    +        self.secret_properties = kwargs.get('secret_properties', None)
    +        self.x509_certificate_properties = kwargs.get('x509_certificate_properties', None)
    +        self.lifetime_actions = kwargs.get('lifetime_actions', None)
    +        self.issuer_parameters = kwargs.get('issuer_parameters', None)
    +        self.attributes = kwargs.get('attributes', None)
    +
    +
    +class CertificateRestoreParameters(Model):
    +    """The certificate restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param certificate_bundle_backup: Required. The backup blob associated
    +     with a certificate bundle.
    +    :type certificate_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'certificate_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'certificate_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateRestoreParameters, self).__init__(**kwargs)
    +        self.certificate_bundle_backup = kwargs.get('certificate_bundle_backup', None)
    +
    +
    +class CertificateUpdateParameters(Model):
    +    """The certificate update parameters.
    +
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(CertificateUpdateParameters, self).__init__(**kwargs)
    +        self.certificate_policy = kwargs.get('certificate_policy', None)
    +        self.certificate_attributes = kwargs.get('certificate_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class Contact(Model):
    +    """The contact information for the vault certificates.
    +
    +    :param email_address: Email address.
    +    :type email_address: str
    +    :param name: Name.
    +    :type name: str
    +    :param phone: Phone number.
    +    :type phone: str
    +    """
    +
    +    _attribute_map = {
    +        'email_address': {'key': 'email', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'phone': {'key': 'phone', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Contact, self).__init__(**kwargs)
    +        self.email_address = kwargs.get('email_address', None)
    +        self.name = kwargs.get('name', None)
    +        self.phone = kwargs.get('phone', None)
    +
    +
    +class Contacts(Model):
    +    """The contacts for the vault certificates.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Identifier for the contacts collection.
    +    :vartype id: str
    +    :param contact_list: The contact list for the vault certificates.
    +    :type contact_list: list[~azure.keyvault.v7_1.models.Contact]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'contact_list': {'key': 'contacts', 'type': '[Contact]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Contacts, self).__init__(**kwargs)
    +        self.id = None
    +        self.contact_list = kwargs.get('contact_list', None)
    +
    +
    +class DeletedCertificateBundle(CertificateBundle):
    +    """A Deleted Certificate consisting of its previous id, attributes and its
    +    tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :ivar kid: The key id.
    +    :vartype kid: str
    +    :ivar sid: The secret id.
    +    :vartype sid: str
    +    :ivar x509_thumbprint: Thumbprint of the certificate.
    +    :vartype x509_thumbprint: bytes
    +    :ivar policy: The management policy.
    +    :vartype policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param cer: CER contents of x509 certificate.
    +    :type cer: bytearray
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs
    +    :type tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted certificate.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the certificate is scheduled to
    +     be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the certificate was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'kid': {'readonly': True},
    +        'sid': {'readonly': True},
    +        'x509_thumbprint': {'readonly': True},
    +        'policy': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'sid': {'key': 'sid', 'type': 'str'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'cer': {'key': 'cer', 'type': 'bytearray'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedCertificateBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedCertificateItem(CertificateItem):
    +    """The deleted certificate item containing metadata about the deleted
    +    certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Certificate identifier.
    +    :type id: str
    +    :param attributes: The certificate management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param x509_thumbprint: Thumbprint of the certificate.
    +    :type x509_thumbprint: bytes
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted certificate.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the certificate is scheduled to
    +     be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the certificate was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedCertificateItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedCertificateListResult(Model):
    +    """A list of certificates that have been deleted in this vault.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of deleted certificates
    +     in the vault along with a link to the next page of deleted certificates
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedCertificateItem]
    +    :ivar next_link: The URL to get the next set of deleted certificates.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedCertificateItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedCertificateListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class KeyBundle(Model):
    +    """A KeyBundle consisting of a WebKey plus its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param key: The Json web key.
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyBundle, self).__init__(**kwargs)
    +        self.key = kwargs.get('key', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.managed = None
    +
    +
    +class DeletedKeyBundle(KeyBundle):
    +    """A DeletedKeyBundle consisting of a WebKey plus its Attributes and deletion
    +    info.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param key: The Json web key.
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted key.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the key is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the key was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedKeyBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class KeyItem(Model):
    +    """The key item containing key metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyItem, self).__init__(**kwargs)
    +        self.kid = kwargs.get('kid', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.managed = None
    +
    +
    +class DeletedKeyItem(KeyItem):
    +    """The deleted key item containing the deleted key metadata and information
    +    about deletion.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted key.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the key is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the key was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedKeyItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedKeyListResult(Model):
    +    """A list of keys that have been deleted in this vault.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of deleted keys in the
    +     vault along with a link to the next page of deleted keys
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedKeyItem]
    +    :ivar next_link: The URL to get the next set of deleted keys.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedKeyItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedKeyListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SasDefinitionBundle(Model):
    +    """A SAS definition bundle consists of key vault SAS definition details plus
    +    its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The SAS definition id.
    +    :vartype id: str
    +    :ivar secret_id: Storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :vartype template_uri: str
    +    :ivar sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :vartype sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :ivar validity_period: The validity period of SAS tokens created according
    +     to the SAS definition.
    +    :vartype validity_period: str
    +    :ivar attributes: The SAS definition attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'template_uri': {'readonly': True},
    +        'sas_type': {'readonly': True},
    +        'validity_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.secret_id = None
    +        self.template_uri = None
    +        self.sas_type = None
    +        self.validity_period = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedSasDefinitionBundle(SasDefinitionBundle):
    +    """A deleted SAS definition bundle consisting of its previous id, attributes
    +    and its tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The SAS definition id.
    +    :vartype id: str
    +    :ivar secret_id: Storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :vartype template_uri: str
    +    :ivar sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :vartype sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :ivar validity_period: The validity period of SAS tokens created according
    +     to the SAS definition.
    +    :vartype validity_period: str
    +    :ivar attributes: The SAS definition attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted SAS definition.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the SAS definition is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the SAS definition was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'template_uri': {'readonly': True},
    +        'sas_type': {'readonly': True},
    +        'validity_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSasDefinitionBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class SasDefinitionItem(Model):
    +    """The SAS definition item containing storage SAS definition metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage SAS identifier.
    +    :vartype id: str
    +    :ivar secret_id: The storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar attributes: The SAS definition management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionItem, self).__init__(**kwargs)
    +        self.id = None
    +        self.secret_id = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedSasDefinitionItem(SasDefinitionItem):
    +    """The deleted SAS definition item containing metadata about the deleted SAS
    +    definition.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage SAS identifier.
    +    :vartype id: str
    +    :ivar secret_id: The storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar attributes: The SAS definition management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted SAS definition.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the SAS definition is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the SAS definition was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSasDefinitionItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedSasDefinitionListResult(Model):
    +    """The deleted SAS definition list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted SAS
    +     definitions in the vault along with a link to the next page of deleted sas
    +     definitions
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedSasDefinitionItem]
    +    :ivar next_link: The URL to get the next set of deleted SAS definitions.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedSasDefinitionItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSasDefinitionListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SecretBundle(Model):
    +    """A secret consisting of a value, id and its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value: The secret value.
    +    :type value: str
    +    :param id: The secret id.
    +    :type id: str
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar kid: If this is a secret backing a KV certificate, then this field
    +     specifies the corresponding key backing the KV certificate.
    +    :vartype kid: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a secret backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretBundle, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.id = kwargs.get('id', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.kid = None
    +        self.managed = None
    +
    +
    +class DeletedSecretBundle(SecretBundle):
    +    """A Deleted Secret consisting of its previous id, attributes and its tags, as
    +    well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value: The secret value.
    +    :type value: str
    +    :param id: The secret id.
    +    :type id: str
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar kid: If this is a secret backing a KV certificate, then this field
    +     specifies the corresponding key backing the KV certificate.
    +    :vartype kid: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a secret backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted secret.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the secret is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the secret was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSecretBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class SecretItem(Model):
    +    """The secret item containing secret metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Secret identifier.
    +    :type id: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretItem, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.attributes = kwargs.get('attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.managed = None
    +
    +
    +class DeletedSecretItem(SecretItem):
    +    """The deleted secret item containing metadata about the deleted secret.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Secret identifier.
    +    :type id: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted secret.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the secret is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the secret was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSecretItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedSecretListResult(Model):
    +    """The deleted secret list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted secrets
    +     in the vault along with a link to the next page of deleted secrets
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedSecretItem]
    +    :ivar next_link: The URL to get the next set of deleted secrets.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedSecretItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedSecretListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class StorageAccountItem(Model):
    +    """The storage account item containing storage account metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Storage identifier.
    +    :vartype id: str
    +    :ivar resource_id: Storage account resource Id.
    +    :vartype resource_id: str
    +    :ivar attributes: The storage account management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountItem, self).__init__(**kwargs)
    +        self.id = None
    +        self.resource_id = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedStorageAccountItem(StorageAccountItem):
    +    """The deleted storage account item containing metadata about the deleted
    +    storage account.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Storage identifier.
    +    :vartype id: str
    +    :ivar resource_id: Storage account resource Id.
    +    :vartype resource_id: str
    +    :ivar attributes: The storage account management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted storage account.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the storage account is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the storage account was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedStorageAccountItem, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class StorageBundle(Model):
    +    """A Storage account bundle consists of key vault storage account details plus
    +    its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage account id.
    +    :vartype id: str
    +    :ivar resource_id: The storage account resource id.
    +    :vartype resource_id: str
    +    :ivar active_key_name: The current active storage account key name.
    +    :vartype active_key_name: str
    +    :ivar auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :vartype auto_regenerate_key: bool
    +    :ivar regeneration_period: The key regeneration time duration specified in
    +     ISO-8601 format.
    +    :vartype regeneration_period: str
    +    :ivar attributes: The storage account attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'active_key_name': {'readonly': True},
    +        'auto_regenerate_key': {'readonly': True},
    +        'regeneration_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.resource_id = None
    +        self.active_key_name = None
    +        self.auto_regenerate_key = None
    +        self.regeneration_period = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedStorageBundle(StorageBundle):
    +    """A deleted storage account bundle consisting of its previous id, attributes
    +    and its tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage account id.
    +    :vartype id: str
    +    :ivar resource_id: The storage account resource id.
    +    :vartype resource_id: str
    +    :ivar active_key_name: The current active storage account key name.
    +    :vartype active_key_name: str
    +    :ivar auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :vartype auto_regenerate_key: bool
    +    :ivar regeneration_period: The key regeneration time duration specified in
    +     ISO-8601 format.
    +    :vartype regeneration_period: str
    +    :ivar attributes: The storage account attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted storage account.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the storage account is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the storage account was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'active_key_name': {'readonly': True},
    +        'auto_regenerate_key': {'readonly': True},
    +        'regeneration_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedStorageBundle, self).__init__(**kwargs)
    +        self.recovery_id = kwargs.get('recovery_id', None)
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedStorageListResult(Model):
    +    """The deleted storage account list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted storage
    +     accounts in the vault along with a link to the next page of deleted
    +     storage accounts
    +    :vartype value:
    +     list[~azure.keyvault.v7_1.models.DeletedStorageAccountItem]
    +    :ivar next_link: The URL to get the next set of deleted storage accounts.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedStorageAccountItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(DeletedStorageListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class Error(Model):
    +    """The key vault server error.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: The error code.
    +    :vartype code: str
    +    :ivar message: The error message.
    +    :vartype message: str
    +    :ivar inner_error:
    +    :vartype inner_error: ~azure.keyvault.v7_1.models.Error
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'inner_error': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'inner_error': {'key': 'innererror', 'type': 'Error'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Error, self).__init__(**kwargs)
    +        self.code = None
    +        self.message = None
    +        self.inner_error = None
    +
    +
    +class IssuerAttributes(Model):
    +    """The attributes of an issuer managed by the Key Vault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the issuer is enabled.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IssuerAttributes, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.created = None
    +        self.updated = None
    +
    +
    +class IssuerBundle(Model):
    +    """The issuer for Key Vault certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Identifier for the issuer object.
    +    :vartype id: str
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IssuerBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.provider = kwargs.get('provider', None)
    +        self.credentials = kwargs.get('credentials', None)
    +        self.organization_details = kwargs.get('organization_details', None)
    +        self.attributes = kwargs.get('attributes', None)
    +
    +
    +class IssuerCredentials(Model):
    +    """The credentials to be used for the certificate issuer.
    +
    +    :param account_id: The user name/account name/account id.
    +    :type account_id: str
    +    :param password: The password/secret/account key.
    +    :type password: str
    +    """
    +
    +    _attribute_map = {
    +        'account_id': {'key': 'account_id', 'type': 'str'},
    +        'password': {'key': 'pwd', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IssuerCredentials, self).__init__(**kwargs)
    +        self.account_id = kwargs.get('account_id', None)
    +        self.password = kwargs.get('password', None)
    +
    +
    +class IssuerParameters(Model):
    +    """Parameters for the issuer of the X509 component of a certificate.
    +
    +    :param name: Name of the referenced issuer object or reserved names; for
    +     example, 'Self' or 'Unknown'.
    +    :type name: str
    +    :param certificate_type: Certificate type as supported by the provider
    +     (optional); for example 'OV-SSL', 'EV-SSL'
    +    :type certificate_type: str
    +    :param certificate_transparency: Indicates if the certificates generated
    +     under this policy should be published to certificate transparency logs.
    +    :type certificate_transparency: bool
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'certificate_type': {'key': 'cty', 'type': 'str'},
    +        'certificate_transparency': {'key': 'cert_transparency', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(IssuerParameters, self).__init__(**kwargs)
    +        self.name = kwargs.get('name', None)
    +        self.certificate_type = kwargs.get('certificate_type', None)
    +        self.certificate_transparency = kwargs.get('certificate_transparency', None)
    +
    +
    +class JsonWebKey(Model):
    +    """As of http://tools.ietf.org/html/draft-ietf-jose-json-web-key-18.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param kty: JsonWebKey Key Type (kty), as defined in
    +     https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40.
    +     Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'
    +    :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_ops:
    +    :type key_ops: list[str]
    +    :param n: RSA modulus.
    +    :type n: bytes
    +    :param e: RSA public exponent.
    +    :type e: bytes
    +    :param d: RSA private exponent, or the D component of an EC private key.
    +    :type d: bytes
    +    :param dp: RSA private key parameter.
    +    :type dp: bytes
    +    :param dq: RSA private key parameter.
    +    :type dq: bytes
    +    :param qi: RSA private key parameter.
    +    :type qi: bytes
    +    :param p: RSA secret prime.
    +    :type p: bytes
    +    :param q: RSA secret prime, with p < q.
    +    :type q: bytes
    +    :param k: Symmetric key.
    +    :type k: bytes
    +    :param t: HSM Token, used with 'Bring Your Own Key'.
    +    :type t: bytes
    +    :param crv: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type crv: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    :param x: X component of an EC public key.
    +    :type x: bytes
    +    :param y: Y component of an EC public key.
    +    :type y: bytes
    +    """
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'kty': {'key': 'kty', 'type': 'str'},
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'n': {'key': 'n', 'type': 'base64'},
    +        'e': {'key': 'e', 'type': 'base64'},
    +        'd': {'key': 'd', 'type': 'base64'},
    +        'dp': {'key': 'dp', 'type': 'base64'},
    +        'dq': {'key': 'dq', 'type': 'base64'},
    +        'qi': {'key': 'qi', 'type': 'base64'},
    +        'p': {'key': 'p', 'type': 'base64'},
    +        'q': {'key': 'q', 'type': 'base64'},
    +        'k': {'key': 'k', 'type': 'base64'},
    +        't': {'key': 'key_hsm', 'type': 'base64'},
    +        'crv': {'key': 'crv', 'type': 'str'},
    +        'x': {'key': 'x', 'type': 'base64'},
    +        'y': {'key': 'y', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(JsonWebKey, self).__init__(**kwargs)
    +        self.kid = kwargs.get('kid', None)
    +        self.kty = kwargs.get('kty', None)
    +        self.key_ops = kwargs.get('key_ops', None)
    +        self.n = kwargs.get('n', None)
    +        self.e = kwargs.get('e', None)
    +        self.d = kwargs.get('d', None)
    +        self.dp = kwargs.get('dp', None)
    +        self.dq = kwargs.get('dq', None)
    +        self.qi = kwargs.get('qi', None)
    +        self.p = kwargs.get('p', None)
    +        self.q = kwargs.get('q', None)
    +        self.k = kwargs.get('k', None)
    +        self.t = kwargs.get('t', None)
    +        self.crv = kwargs.get('crv', None)
    +        self.x = kwargs.get('x', None)
    +        self.y = kwargs.get('y', None)
    +
    +
    +class KeyAttributes(Attributes):
    +    """The attributes of a key managed by the key vault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for keys in the current vault. If it contains 'Purgeable' the key
    +     can be permanently deleted by a privileged user; otherwise, only the
    +     system can purge the key, at the end of the retention interval. Possible
    +     values include: 'Purgeable', 'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyAttributes, self).__init__(**kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class KeyCreateParameters(Model):
    +    """The key create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param kty: Required. The type of key to create. For valid values, see
    +     JsonWebKeyType. Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM',
    +     'oct'
    +    :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_size: The key size in bits. For example: 2048, 3072, or 4096
    +     for RSA.
    +    :type key_size: int
    +    :param key_ops:
    +    :type key_ops: list[str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +    :param key_attributes:
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param curve: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    """
    +
    +    _validation = {
    +        'kty': {'required': True, 'min_length': 1},
    +    }
    +
    +    _attribute_map = {
    +        'kty': {'key': 'kty', 'type': 'str'},
    +        'key_size': {'key': 'key_size', 'type': 'int'},
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'curve': {'key': 'crv', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyCreateParameters, self).__init__(**kwargs)
    +        self.kty = kwargs.get('kty', None)
    +        self.key_size = kwargs.get('key_size', None)
    +        self.key_ops = kwargs.get('key_ops', None)
    +        self.key_attributes = kwargs.get('key_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.curve = kwargs.get('curve', None)
    +
    +
    +class KeyImportParameters(Model):
    +    """The key import parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param hsm: Whether to import as a hardware key (HSM) or software key.
    +    :type hsm: bool
    +    :param key: Required. The Json web key
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param key_attributes: The key management attributes.
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'key': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'hsm': {'key': 'Hsm', 'type': 'bool'},
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyImportParameters, self).__init__(**kwargs)
    +        self.hsm = kwargs.get('hsm', None)
    +        self.key = kwargs.get('key', None)
    +        self.key_attributes = kwargs.get('key_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class KeyListResult(Model):
    +    """The key list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of keys in the key vault
    +     along with a link to the next page of keys.
    +    :vartype value: list[~azure.keyvault.v7_1.models.KeyItem]
    +    :ivar next_link: The URL to get the next set of keys.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[KeyItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class KeyOperationResult(Model):
    +    """The key operation result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar kid: Key identifier
    +    :vartype kid: str
    +    :ivar result:
    +    :vartype result: bytes
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'result': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'result': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyOperationResult, self).__init__(**kwargs)
    +        self.kid = None
    +        self.result = None
    +
    +
    +class KeyOperationsParameters(Model):
    +    """The key operations parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. algorithm identifier. Possible values include:
    +     'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +    :param value: Required.
    +    :type value: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyOperationsParameters, self).__init__(**kwargs)
    +        self.algorithm = kwargs.get('algorithm', None)
    +        self.value = kwargs.get('value', None)
    +
    +
    +class KeyProperties(Model):
    +    """Properties of the key pair backing a certificate.
    +
    +    :param exportable: Indicates if the private key can be exported.
    +    :type exportable: bool
    +    :param key_type: The type of key pair to be used for the certificate.
    +     Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'
    +    :type key_type: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_size: The key size in bits. For example: 2048, 3072, or 4096
    +     for RSA.
    +    :type key_size: int
    +    :param reuse_key: Indicates if the same key pair will be used on
    +     certificate renewal.
    +    :type reuse_key: bool
    +    :param curve: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    """
    +
    +    _attribute_map = {
    +        'exportable': {'key': 'exportable', 'type': 'bool'},
    +        'key_type': {'key': 'kty', 'type': 'str'},
    +        'key_size': {'key': 'key_size', 'type': 'int'},
    +        'reuse_key': {'key': 'reuse_key', 'type': 'bool'},
    +        'curve': {'key': 'crv', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyProperties, self).__init__(**kwargs)
    +        self.exportable = kwargs.get('exportable', None)
    +        self.key_type = kwargs.get('key_type', None)
    +        self.key_size = kwargs.get('key_size', None)
    +        self.reuse_key = kwargs.get('reuse_key', None)
    +        self.curve = kwargs.get('curve', None)
    +
    +
    +class KeyRestoreParameters(Model):
    +    """The key restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_bundle_backup: Required. The backup blob associated with a key
    +     bundle.
    +    :type key_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'key_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyRestoreParameters, self).__init__(**kwargs)
    +        self.key_bundle_backup = kwargs.get('key_bundle_backup', None)
    +
    +
    +class KeySignParameters(Model):
    +    """The key operations parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. The signing/verification algorithm identifier.
    +     For more information on possible algorithm types, see
    +     JsonWebKeySignatureAlgorithm. Possible values include: 'PS256', 'PS384',
    +     'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256', 'ES384', 'ES512',
    +     'ES256K'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +    :param value: Required.
    +    :type value: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeySignParameters, self).__init__(**kwargs)
    +        self.algorithm = kwargs.get('algorithm', None)
    +        self.value = kwargs.get('value', None)
    +
    +
    +class KeyUpdateParameters(Model):
    +    """The key update parameters.
    +
    +    :param key_ops: Json web key operations. For more information on possible
    +     key operations, see JsonWebKeyOperation.
    +    :type key_ops: list[str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +    :param key_attributes:
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyUpdateParameters, self).__init__(**kwargs)
    +        self.key_ops = kwargs.get('key_ops', None)
    +        self.key_attributes = kwargs.get('key_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class KeyVaultError(Model):
    +    """The key vault error exception.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar error:
    +    :vartype error: ~azure.keyvault.v7_1.models.Error
    +    """
    +
    +    _validation = {
    +        'error': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'Error'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyVaultError, self).__init__(**kwargs)
    +        self.error = None
    +
    +
    +class KeyVaultErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'KeyVaultError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'KeyVaultError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(KeyVaultErrorException, self).__init__(response=response)
    +
    +
    +class KeyVerifyParameters(Model):
    +    """The key verify parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. The signing/verification algorithm. For more
    +     information on possible algorithm types, see JsonWebKeySignatureAlgorithm.
    +     Possible values include: 'PS256', 'PS384', 'PS512', 'RS256', 'RS384',
    +     'RS512', 'RSNULL', 'ES256', 'ES384', 'ES512', 'ES256K'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +    :param digest: Required. The digest used for signing.
    +    :type digest: bytes
    +    :param signature: Required. The signature to be verified.
    +    :type signature: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'digest': {'required': True},
    +        'signature': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'digest': {'key': 'digest', 'type': 'base64'},
    +        'signature': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyVerifyParameters, self).__init__(**kwargs)
    +        self.algorithm = kwargs.get('algorithm', None)
    +        self.digest = kwargs.get('digest', None)
    +        self.signature = kwargs.get('signature', None)
    +
    +
    +class KeyVerifyResult(Model):
    +    """The key verify result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: True if the signature is verified, otherwise false.
    +    :vartype value: bool
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(KeyVerifyResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class LifetimeAction(Model):
    +    """Action and its trigger that will be performed by Key Vault over the
    +    lifetime of a certificate.
    +
    +    :param trigger: The condition that will execute the action.
    +    :type trigger: ~azure.keyvault.v7_1.models.Trigger
    +    :param action: The action that will be executed.
    +    :type action: ~azure.keyvault.v7_1.models.Action
    +    """
    +
    +    _attribute_map = {
    +        'trigger': {'key': 'trigger', 'type': 'Trigger'},
    +        'action': {'key': 'action', 'type': 'Action'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(LifetimeAction, self).__init__(**kwargs)
    +        self.trigger = kwargs.get('trigger', None)
    +        self.action = kwargs.get('action', None)
    +
    +
    +class OrganizationDetails(Model):
    +    """Details of the organization of the certificate issuer.
    +
    +    :param id: Id of the organization.
    +    :type id: str
    +    :param admin_details: Details of the organization administrator.
    +    :type admin_details:
    +     list[~azure.keyvault.v7_1.models.AdministratorDetails]
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'admin_details': {'key': 'admin_details', 'type': '[AdministratorDetails]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(OrganizationDetails, self).__init__(**kwargs)
    +        self.id = kwargs.get('id', None)
    +        self.admin_details = kwargs.get('admin_details', None)
    +
    +
    +class PendingCertificateSigningRequestResult(Model):
    +    """The pending certificate signing request result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The pending certificate signing request as Base64 encoded
    +     string.
    +    :vartype value: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(PendingCertificateSigningRequestResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class SasDefinitionAttributes(Model):
    +    """The SAS definition management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: the enabled state of the object.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for SAS definitions in the current vault. If it contains
    +     'Purgeable' the SAS definition can be permanently deleted by a privileged
    +     user; otherwise, only the system can purge the SAS definition, at the end
    +     of the retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionAttributes, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.created = None
    +        self.updated = None
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class SasDefinitionCreateParameters(Model):
    +    """The SAS definition create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param template_uri: Required. The SAS definition token template signed
    +     with an arbitrary key.  Tokens created according to the SAS definition
    +     will have the same properties as the template.
    +    :type template_uri: str
    +    :param sas_type: Required. The type of SAS token the SAS definition will
    +     create. Possible values include: 'account', 'service'
    +    :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :param validity_period: Required. The validity period of SAS tokens
    +     created according to the SAS definition.
    +    :type validity_period: str
    +    :param sas_definition_attributes: The attributes of the SAS definition.
    +    :type sas_definition_attributes:
    +     ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'template_uri': {'required': True},
    +        'sas_type': {'required': True},
    +        'validity_period': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'sas_definition_attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionCreateParameters, self).__init__(**kwargs)
    +        self.template_uri = kwargs.get('template_uri', None)
    +        self.sas_type = kwargs.get('sas_type', None)
    +        self.validity_period = kwargs.get('validity_period', None)
    +        self.sas_definition_attributes = kwargs.get('sas_definition_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class SasDefinitionListResult(Model):
    +    """The storage account SAS definition list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of SAS definitions along
    +     with a link to the next page of SAS definitions.
    +    :vartype value: list[~azure.keyvault.v7_1.models.SasDefinitionItem]
    +    :ivar next_link: The URL to get the next set of SAS definitions.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SasDefinitionItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SasDefinitionUpdateParameters(Model):
    +    """The SAS definition update parameters.
    +
    +    :param template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :type template_uri: str
    +    :param sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :param validity_period: The validity period of SAS tokens created
    +     according to the SAS definition.
    +    :type validity_period: str
    +    :param sas_definition_attributes: The attributes of the SAS definition.
    +    :type sas_definition_attributes:
    +     ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'sas_definition_attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SasDefinitionUpdateParameters, self).__init__(**kwargs)
    +        self.template_uri = kwargs.get('template_uri', None)
    +        self.sas_type = kwargs.get('sas_type', None)
    +        self.validity_period = kwargs.get('validity_period', None)
    +        self.sas_definition_attributes = kwargs.get('sas_definition_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class SecretAttributes(Attributes):
    +    """The secret management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for secrets in the current vault. If it contains 'Purgeable', the
    +     secret can be permanently deleted by a privileged user; otherwise, only
    +     the system can purge the secret, at the end of the retention interval.
    +     Possible values include: 'Purgeable', 'Recoverable+Purgeable',
    +     'Recoverable', 'Recoverable+ProtectedSubscription',
    +     'CustomizedRecoverable+Purgeable', 'CustomizedRecoverable',
    +     'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretAttributes, self).__init__(**kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class SecretListResult(Model):
    +    """The secret list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of secrets in the key
    +     vault along with a link to the next page of secrets.
    +    :vartype value: list[~azure.keyvault.v7_1.models.SecretItem]
    +    :ivar next_link: The URL to get the next set of secrets.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SecretItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SecretProperties(Model):
    +    """Properties of the key backing a certificate.
    +
    +    :param content_type: The media type (MIME type).
    +    :type content_type: str
    +    """
    +
    +    _attribute_map = {
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretProperties, self).__init__(**kwargs)
    +        self.content_type = kwargs.get('content_type', None)
    +
    +
    +class SecretRestoreParameters(Model):
    +    """The secret restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param secret_bundle_backup: Required. The backup blob associated with a
    +     secret bundle.
    +    :type secret_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'secret_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'secret_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretRestoreParameters, self).__init__(**kwargs)
    +        self.secret_bundle_backup = kwargs.get('secret_bundle_backup', None)
    +
    +
    +class SecretSetParameters(Model):
    +    """The secret set parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param value: Required. The value of the secret.
    +    :type value: str
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :param secret_attributes: The secret management attributes.
    +    :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    """
    +
    +    _validation = {
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretSetParameters, self).__init__(**kwargs)
    +        self.value = kwargs.get('value', None)
    +        self.tags = kwargs.get('tags', None)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.secret_attributes = kwargs.get('secret_attributes', None)
    +
    +
    +class SecretUpdateParameters(Model):
    +    """The secret update parameters.
    +
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :param secret_attributes: The secret management attributes.
    +    :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SecretUpdateParameters, self).__init__(**kwargs)
    +        self.content_type = kwargs.get('content_type', None)
    +        self.secret_attributes = kwargs.get('secret_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class StorageAccountAttributes(Model):
    +    """The storage account management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: the enabled state of the object.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for storage accounts in the current vault. If it contains
    +     'Purgeable' the storage account can be permanently deleted by a privileged
    +     user; otherwise, only the system can purge the storage account, at the end
    +     of the retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountAttributes, self).__init__(**kwargs)
    +        self.enabled = kwargs.get('enabled', None)
    +        self.created = None
    +        self.updated = None
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class StorageAccountCreateParameters(Model):
    +    """The storage account create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param resource_id: Required. Storage account resource id.
    +    :type resource_id: str
    +    :param active_key_name: Required. Current active storage account key name.
    +    :type active_key_name: str
    +    :param auto_regenerate_key: Required. whether keyvault should manage the
    +     storage account for the user.
    +    :type auto_regenerate_key: bool
    +    :param regeneration_period: The key regeneration time duration specified
    +     in ISO-8601 format.
    +    :type regeneration_period: str
    +    :param storage_account_attributes: The attributes of the storage account.
    +    :type storage_account_attributes:
    +     ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'resource_id': {'required': True},
    +        'active_key_name': {'required': True},
    +        'auto_regenerate_key': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'storage_account_attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountCreateParameters, self).__init__(**kwargs)
    +        self.resource_id = kwargs.get('resource_id', None)
    +        self.active_key_name = kwargs.get('active_key_name', None)
    +        self.auto_regenerate_key = kwargs.get('auto_regenerate_key', None)
    +        self.regeneration_period = kwargs.get('regeneration_period', None)
    +        self.storage_account_attributes = kwargs.get('storage_account_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class StorageAccountRegenerteKeyParameters(Model):
    +    """The storage account key regenerate parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_name: Required. The storage account key name.
    +    :type key_name: str
    +    """
    +
    +    _validation = {
    +        'key_name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_name': {'key': 'keyName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountRegenerteKeyParameters, self).__init__(**kwargs)
    +        self.key_name = kwargs.get('key_name', None)
    +
    +
    +class StorageAccountUpdateParameters(Model):
    +    """The storage account update parameters.
    +
    +    :param active_key_name: The current active storage account key name.
    +    :type active_key_name: str
    +    :param auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :type auto_regenerate_key: bool
    +    :param regeneration_period: The key regeneration time duration specified
    +     in ISO-8601 format.
    +    :type regeneration_period: str
    +    :param storage_account_attributes: The attributes of the storage account.
    +    :type storage_account_attributes:
    +     ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'storage_account_attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageAccountUpdateParameters, self).__init__(**kwargs)
    +        self.active_key_name = kwargs.get('active_key_name', None)
    +        self.auto_regenerate_key = kwargs.get('auto_regenerate_key', None)
    +        self.regeneration_period = kwargs.get('regeneration_period', None)
    +        self.storage_account_attributes = kwargs.get('storage_account_attributes', None)
    +        self.tags = kwargs.get('tags', None)
    +
    +
    +class StorageListResult(Model):
    +    """The storage accounts list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of storage accounts in
    +     the key vault along with a link to the next page of storage accounts.
    +    :vartype value: list[~azure.keyvault.v7_1.models.StorageAccountItem]
    +    :ivar next_link: The URL to get the next set of storage accounts.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[StorageAccountItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class StorageRestoreParameters(Model):
    +    """The secret restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param storage_bundle_backup: Required. The backup blob associated with a
    +     storage account.
    +    :type storage_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'storage_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'storage_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(StorageRestoreParameters, self).__init__(**kwargs)
    +        self.storage_bundle_backup = kwargs.get('storage_bundle_backup', None)
    +
    +
    +class SubjectAlternativeNames(Model):
    +    """The subject alternate names of a X509 object.
    +
    +    :param emails: Email addresses.
    +    :type emails: list[str]
    +    :param dns_names: Domain names.
    +    :type dns_names: list[str]
    +    :param upns: User principal names.
    +    :type upns: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'emails': {'key': 'emails', 'type': '[str]'},
    +        'dns_names': {'key': 'dns_names', 'type': '[str]'},
    +        'upns': {'key': 'upns', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(SubjectAlternativeNames, self).__init__(**kwargs)
    +        self.emails = kwargs.get('emails', None)
    +        self.dns_names = kwargs.get('dns_names', None)
    +        self.upns = kwargs.get('upns', None)
    +
    +
    +class Trigger(Model):
    +    """A condition to be satisfied for an action to be executed.
    +
    +    :param lifetime_percentage: Percentage of lifetime at which to trigger.
    +     Value should be between 1 and 99.
    +    :type lifetime_percentage: int
    +    :param days_before_expiry: Days before expiry to attempt renewal. Value
    +     should be between 1 and validity_in_months multiplied by 27. If
    +     validity_in_months is 36, then value should be between 1 and 972 (36 *
    +     27).
    +    :type days_before_expiry: int
    +    """
    +
    +    _validation = {
    +        'lifetime_percentage': {'maximum': 99, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lifetime_percentage': {'key': 'lifetime_percentage', 'type': 'int'},
    +        'days_before_expiry': {'key': 'days_before_expiry', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(Trigger, self).__init__(**kwargs)
    +        self.lifetime_percentage = kwargs.get('lifetime_percentage', None)
    +        self.days_before_expiry = kwargs.get('days_before_expiry', None)
    +
    +
    +class X509CertificateProperties(Model):
    +    """Properties of the X509 component of a certificate.
    +
    +    :param subject: The subject name. Should be a valid X509 distinguished
    +     Name.
    +    :type subject: str
    +    :param ekus: The enhanced key usage.
    +    :type ekus: list[str]
    +    :param subject_alternative_names: The subject alternative names.
    +    :type subject_alternative_names:
    +     ~azure.keyvault.v7_1.models.SubjectAlternativeNames
    +    :param key_usage: List of key usages.
    +    :type key_usage: list[str or ~azure.keyvault.v7_1.models.KeyUsageType]
    +    :param validity_in_months: The duration that the certificate is valid in
    +     months.
    +    :type validity_in_months: int
    +    """
    +
    +    _validation = {
    +        'validity_in_months': {'minimum': 0},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'ekus': {'key': 'ekus', 'type': '[str]'},
    +        'subject_alternative_names': {'key': 'sans', 'type': 'SubjectAlternativeNames'},
    +        'key_usage': {'key': 'key_usage', 'type': '[str]'},
    +        'validity_in_months': {'key': 'validity_months', 'type': 'int'},
    +    }
    +
    +    def __init__(self, **kwargs):
    +        super(X509CertificateProperties, self).__init__(**kwargs)
    +        self.subject = kwargs.get('subject', None)
    +        self.ekus = kwargs.get('ekus', None)
    +        self.subject_alternative_names = kwargs.get('subject_alternative_names', None)
    +        self.key_usage = kwargs.get('key_usage', None)
    +        self.validity_in_months = kwargs.get('validity_in_months', None)
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/models/_models_py3.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/models/_models_py3.py
    new file mode 100644
    index 000000000000..b57835037d85
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/models/_models_py3.py
    @@ -0,0 +1,3244 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.serialization import Model
    +from azure.core.exceptions import HttpResponseError
    +
    +
    +class Action(Model):
    +    """The action that will be executed.
    +
    +    :param action_type: The type of the action. Possible values include:
    +     'EmailContacts', 'AutoRenew'
    +    :type action_type: str or ~azure.keyvault.v7_1.models.ActionType
    +    """
    +
    +    _attribute_map = {
    +        'action_type': {'key': 'action_type', 'type': 'ActionType'},
    +    }
    +
    +    def __init__(self, *, action_type=None, **kwargs) -> None:
    +        super(Action, self).__init__(**kwargs)
    +        self.action_type = action_type
    +
    +
    +class AdministratorDetails(Model):
    +    """Details of the organization administrator of the certificate issuer.
    +
    +    :param first_name: First name.
    +    :type first_name: str
    +    :param last_name: Last name.
    +    :type last_name: str
    +    :param email_address: Email address.
    +    :type email_address: str
    +    :param phone: Phone number.
    +    :type phone: str
    +    """
    +
    +    _attribute_map = {
    +        'first_name': {'key': 'first_name', 'type': 'str'},
    +        'last_name': {'key': 'last_name', 'type': 'str'},
    +        'email_address': {'key': 'email', 'type': 'str'},
    +        'phone': {'key': 'phone', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, first_name: str=None, last_name: str=None, email_address: str=None, phone: str=None, **kwargs) -> None:
    +        super(AdministratorDetails, self).__init__(**kwargs)
    +        self.first_name = first_name
    +        self.last_name = last_name
    +        self.email_address = email_address
    +        self.phone = phone
    +
    +
    +class Attributes(Model):
    +    """The object attributes managed by the KeyVault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, not_before=None, expires=None, **kwargs) -> None:
    +        super(Attributes, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.not_before = not_before
    +        self.expires = expires
    +        self.created = None
    +        self.updated = None
    +
    +
    +class BackupCertificateResult(Model):
    +    """The backup certificate result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up certificate.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(BackupCertificateResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupKeyResult(Model):
    +    """The backup key result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up key.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(BackupKeyResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupSecretResult(Model):
    +    """The backup secret result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up secret.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(BackupSecretResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class BackupStorageResult(Model):
    +    """The backup storage result, containing the backup blob.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The backup blob containing the backed up storage account.
    +    :vartype value: bytes
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(BackupStorageResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class CertificateAttributes(Attributes):
    +    """The certificate management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for certificates in the current vault. If it contains 'Purgeable',
    +     the certificate can be permanently deleted by a privileged user;
    +     otherwise, only the system can purge the certificate, at the end of the
    +     retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, not_before=None, expires=None, **kwargs) -> None:
    +        super(CertificateAttributes, self).__init__(enabled=enabled, not_before=not_before, expires=expires, **kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class CertificateBundle(Model):
    +    """A certificate bundle consists of a certificate (X509) plus its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :ivar kid: The key id.
    +    :vartype kid: str
    +    :ivar sid: The secret id.
    +    :vartype sid: str
    +    :ivar x509_thumbprint: Thumbprint of the certificate.
    +    :vartype x509_thumbprint: bytes
    +    :ivar policy: The management policy.
    +    :vartype policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param cer: CER contents of x509 certificate.
    +    :type cer: bytearray
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'kid': {'readonly': True},
    +        'sid': {'readonly': True},
    +        'x509_thumbprint': {'readonly': True},
    +        'policy': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'sid': {'key': 'sid', 'type': 'str'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'cer': {'key': 'cer', 'type': 'bytearray'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, cer: bytearray=None, content_type: str=None, attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.kid = None
    +        self.sid = None
    +        self.x509_thumbprint = None
    +        self.policy = None
    +        self.cer = cer
    +        self.content_type = content_type
    +        self.attributes = attributes
    +        self.tags = tags
    +
    +
    +class CertificateCreateParameters(Model):
    +    """The certificate create parameters.
    +
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, certificate_policy=None, certificate_attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateCreateParameters, self).__init__(**kwargs)
    +        self.certificate_policy = certificate_policy
    +        self.certificate_attributes = certificate_attributes
    +        self.tags = tags
    +
    +
    +class CertificateImportParameters(Model):
    +    """The certificate import parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param base64_encoded_certificate: Required. Base64 encoded representation
    +     of the certificate object to import. This certificate needs to contain the
    +     private key.
    +    :type base64_encoded_certificate: str
    +    :param password: If the private key in base64EncodedCertificate is
    +     encrypted, the password used for encryption.
    +    :type password: str
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'base64_encoded_certificate': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'base64_encoded_certificate': {'key': 'value', 'type': 'str'},
    +        'password': {'key': 'pwd', 'type': 'str'},
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, base64_encoded_certificate: str, password: str=None, certificate_policy=None, certificate_attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateImportParameters, self).__init__(**kwargs)
    +        self.base64_encoded_certificate = base64_encoded_certificate
    +        self.password = password
    +        self.certificate_policy = certificate_policy
    +        self.certificate_attributes = certificate_attributes
    +        self.tags = tags
    +
    +
    +class CertificateIssuerItem(Model):
    +    """The certificate issuer item containing certificate issuer metadata.
    +
    +    :param id: Certificate Identifier.
    +    :type id: str
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'provider': {'key': 'provider', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, id: str=None, provider: str=None, **kwargs) -> None:
    +        super(CertificateIssuerItem, self).__init__(**kwargs)
    +        self.id = id
    +        self.provider = provider
    +
    +
    +class CertificateIssuerListResult(Model):
    +    """The certificate issuer list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of certificate issuers
    +     in the key vault along with a link to the next page of certificate
    +     issuers.
    +    :vartype value: list[~azure.keyvault.v7_1.models.CertificateIssuerItem]
    +    :ivar next_link: The URL to get the next set of certificate issuers.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateIssuerItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(CertificateIssuerListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class CertificateIssuerSetParameters(Model):
    +    """The certificate issuer set parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param provider: Required. The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _validation = {
    +        'provider': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, *, provider: str, credentials=None, organization_details=None, attributes=None, **kwargs) -> None:
    +        super(CertificateIssuerSetParameters, self).__init__(**kwargs)
    +        self.provider = provider
    +        self.credentials = credentials
    +        self.organization_details = organization_details
    +        self.attributes = attributes
    +
    +
    +class CertificateIssuerUpdateParameters(Model):
    +    """The certificate issuer update parameters.
    +
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _attribute_map = {
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, *, provider: str=None, credentials=None, organization_details=None, attributes=None, **kwargs) -> None:
    +        super(CertificateIssuerUpdateParameters, self).__init__(**kwargs)
    +        self.provider = provider
    +        self.credentials = credentials
    +        self.organization_details = organization_details
    +        self.attributes = attributes
    +
    +
    +class CertificateItem(Model):
    +    """The certificate item containing certificate metadata.
    +
    +    :param id: Certificate identifier.
    +    :type id: str
    +    :param attributes: The certificate management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param x509_thumbprint: Thumbprint of the certificate.
    +    :type x509_thumbprint: bytes
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, id: str=None, attributes=None, tags=None, x509_thumbprint: bytes=None, **kwargs) -> None:
    +        super(CertificateItem, self).__init__(**kwargs)
    +        self.id = id
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.x509_thumbprint = x509_thumbprint
    +
    +
    +class CertificateListResult(Model):
    +    """The certificate list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of certificates in the
    +     key vault along with a link to the next page of certificates.
    +    :vartype value: list[~azure.keyvault.v7_1.models.CertificateItem]
    +    :ivar next_link: The URL to get the next set of certificates.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[CertificateItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(CertificateListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class CertificateMergeParameters(Model):
    +    """The certificate merge parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param x509_certificates: Required. The certificate or the certificate
    +     chain to merge.
    +    :type x509_certificates: list[bytearray]
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'x509_certificates': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'x509_certificates': {'key': 'x5c', 'type': '[bytearray]'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, x509_certificates, certificate_attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateMergeParameters, self).__init__(**kwargs)
    +        self.x509_certificates = x509_certificates
    +        self.certificate_attributes = certificate_attributes
    +        self.tags = tags
    +
    +
    +class CertificateOperation(Model):
    +    """A certificate operation is returned in case of asynchronous requests.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :param issuer_parameters: Parameters for the issuer of the X509 component
    +     of a certificate.
    +    :type issuer_parameters: ~azure.keyvault.v7_1.models.IssuerParameters
    +    :param csr: The certificate signing request (CSR) that is being used in
    +     the certificate operation.
    +    :type csr: bytearray
    +    :param cancellation_requested: Indicates if cancellation was requested on
    +     the certificate operation.
    +    :type cancellation_requested: bool
    +    :param status: Status of the certificate operation.
    +    :type status: str
    +    :param status_details: The status details of the certificate operation.
    +    :type status_details: str
    +    :param error: Error encountered, if any, during the certificate operation.
    +    :type error: ~azure.keyvault.v7_1.models.Error
    +    :param target: Location which contains the result of the certificate
    +     operation.
    +    :type target: str
    +    :param request_id: Identifier for the certificate operation.
    +    :type request_id: str
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'},
    +        'csr': {'key': 'csr', 'type': 'bytearray'},
    +        'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'},
    +        'status': {'key': 'status', 'type': 'str'},
    +        'status_details': {'key': 'status_details', 'type': 'str'},
    +        'error': {'key': 'error', 'type': 'Error'},
    +        'target': {'key': 'target', 'type': 'str'},
    +        'request_id': {'key': 'request_id', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, issuer_parameters=None, csr: bytearray=None, cancellation_requested: bool=None, status: str=None, status_details: str=None, error=None, target: str=None, request_id: str=None, **kwargs) -> None:
    +        super(CertificateOperation, self).__init__(**kwargs)
    +        self.id = None
    +        self.issuer_parameters = issuer_parameters
    +        self.csr = csr
    +        self.cancellation_requested = cancellation_requested
    +        self.status = status
    +        self.status_details = status_details
    +        self.error = error
    +        self.target = target
    +        self.request_id = request_id
    +
    +
    +class CertificateOperationUpdateParameter(Model):
    +    """The certificate operation update parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param cancellation_requested: Required. Indicates if cancellation was
    +     requested on the certificate operation.
    +    :type cancellation_requested: bool
    +    """
    +
    +    _validation = {
    +        'cancellation_requested': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, cancellation_requested: bool, **kwargs) -> None:
    +        super(CertificateOperationUpdateParameter, self).__init__(**kwargs)
    +        self.cancellation_requested = cancellation_requested
    +
    +
    +class CertificatePolicy(Model):
    +    """Management policy for a certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :param key_properties: Properties of the key backing a certificate.
    +    :type key_properties: ~azure.keyvault.v7_1.models.KeyProperties
    +    :param secret_properties: Properties of the secret backing a certificate.
    +    :type secret_properties: ~azure.keyvault.v7_1.models.SecretProperties
    +    :param x509_certificate_properties: Properties of the X509 component of a
    +     certificate.
    +    :type x509_certificate_properties:
    +     ~azure.keyvault.v7_1.models.X509CertificateProperties
    +    :param lifetime_actions: Actions that will be performed by Key Vault over
    +     the lifetime of a certificate.
    +    :type lifetime_actions: list[~azure.keyvault.v7_1.models.LifetimeAction]
    +    :param issuer_parameters: Parameters for the issuer of the X509 component
    +     of a certificate.
    +    :type issuer_parameters: ~azure.keyvault.v7_1.models.IssuerParameters
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'key_properties': {'key': 'key_props', 'type': 'KeyProperties'},
    +        'secret_properties': {'key': 'secret_props', 'type': 'SecretProperties'},
    +        'x509_certificate_properties': {'key': 'x509_props', 'type': 'X509CertificateProperties'},
    +        'lifetime_actions': {'key': 'lifetime_actions', 'type': '[LifetimeAction]'},
    +        'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +    }
    +
    +    def __init__(self, *, key_properties=None, secret_properties=None, x509_certificate_properties=None, lifetime_actions=None, issuer_parameters=None, attributes=None, **kwargs) -> None:
    +        super(CertificatePolicy, self).__init__(**kwargs)
    +        self.id = None
    +        self.key_properties = key_properties
    +        self.secret_properties = secret_properties
    +        self.x509_certificate_properties = x509_certificate_properties
    +        self.lifetime_actions = lifetime_actions
    +        self.issuer_parameters = issuer_parameters
    +        self.attributes = attributes
    +
    +
    +class CertificateRestoreParameters(Model):
    +    """The certificate restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param certificate_bundle_backup: Required. The backup blob associated
    +     with a certificate bundle.
    +    :type certificate_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'certificate_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'certificate_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, certificate_bundle_backup: bytes, **kwargs) -> None:
    +        super(CertificateRestoreParameters, self).__init__(**kwargs)
    +        self.certificate_bundle_backup = certificate_bundle_backup
    +
    +
    +class CertificateUpdateParameters(Model):
    +    """The certificate update parameters.
    +
    +    :param certificate_policy: The management policy for the certificate.
    +    :type certificate_policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param certificate_attributes: The attributes of the certificate
    +     (optional).
    +    :type certificate_attributes:
    +     ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, certificate_policy=None, certificate_attributes=None, tags=None, **kwargs) -> None:
    +        super(CertificateUpdateParameters, self).__init__(**kwargs)
    +        self.certificate_policy = certificate_policy
    +        self.certificate_attributes = certificate_attributes
    +        self.tags = tags
    +
    +
    +class Contact(Model):
    +    """The contact information for the vault certificates.
    +
    +    :param email_address: Email address.
    +    :type email_address: str
    +    :param name: Name.
    +    :type name: str
    +    :param phone: Phone number.
    +    :type phone: str
    +    """
    +
    +    _attribute_map = {
    +        'email_address': {'key': 'email', 'type': 'str'},
    +        'name': {'key': 'name', 'type': 'str'},
    +        'phone': {'key': 'phone', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, email_address: str=None, name: str=None, phone: str=None, **kwargs) -> None:
    +        super(Contact, self).__init__(**kwargs)
    +        self.email_address = email_address
    +        self.name = name
    +        self.phone = phone
    +
    +
    +class Contacts(Model):
    +    """The contacts for the vault certificates.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Identifier for the contacts collection.
    +    :vartype id: str
    +    :param contact_list: The contact list for the vault certificates.
    +    :type contact_list: list[~azure.keyvault.v7_1.models.Contact]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'contact_list': {'key': 'contacts', 'type': '[Contact]'},
    +    }
    +
    +    def __init__(self, *, contact_list=None, **kwargs) -> None:
    +        super(Contacts, self).__init__(**kwargs)
    +        self.id = None
    +        self.contact_list = contact_list
    +
    +
    +class DeletedCertificateBundle(CertificateBundle):
    +    """A Deleted Certificate consisting of its previous id, attributes and its
    +    tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The certificate id.
    +    :vartype id: str
    +    :ivar kid: The key id.
    +    :vartype kid: str
    +    :ivar sid: The secret id.
    +    :vartype sid: str
    +    :ivar x509_thumbprint: Thumbprint of the certificate.
    +    :vartype x509_thumbprint: bytes
    +    :ivar policy: The management policy.
    +    :vartype policy: ~azure.keyvault.v7_1.models.CertificatePolicy
    +    :param cer: CER contents of x509 certificate.
    +    :type cer: bytearray
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The certificate attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs
    +    :type tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted certificate.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the certificate is scheduled to
    +     be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the certificate was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'kid': {'readonly': True},
    +        'sid': {'readonly': True},
    +        'x509_thumbprint': {'readonly': True},
    +        'policy': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'sid': {'key': 'sid', 'type': 'str'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'policy': {'key': 'policy', 'type': 'CertificatePolicy'},
    +        'cer': {'key': 'cer', 'type': 'bytearray'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, cer: bytearray=None, content_type: str=None, attributes=None, tags=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedCertificateBundle, self).__init__(cer=cer, content_type=content_type, attributes=attributes, tags=tags, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedCertificateItem(CertificateItem):
    +    """The deleted certificate item containing metadata about the deleted
    +    certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Certificate identifier.
    +    :type id: str
    +    :param attributes: The certificate management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.CertificateAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param x509_thumbprint: Thumbprint of the certificate.
    +    :type x509_thumbprint: bytes
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted certificate.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the certificate is scheduled to
    +     be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the certificate was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'x509_thumbprint': {'key': 'x5t', 'type': 'base64'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, id: str=None, attributes=None, tags=None, x509_thumbprint: bytes=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedCertificateItem, self).__init__(id=id, attributes=attributes, tags=tags, x509_thumbprint=x509_thumbprint, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedCertificateListResult(Model):
    +    """A list of certificates that have been deleted in this vault.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of deleted certificates
    +     in the vault along with a link to the next page of deleted certificates
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedCertificateItem]
    +    :ivar next_link: The URL to get the next set of deleted certificates.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedCertificateItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedCertificateListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class KeyBundle(Model):
    +    """A KeyBundle consisting of a WebKey plus its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param key: The Json web key.
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, key=None, attributes=None, tags=None, **kwargs) -> None:
    +        super(KeyBundle, self).__init__(**kwargs)
    +        self.key = key
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.managed = None
    +
    +
    +class DeletedKeyBundle(KeyBundle):
    +    """A DeletedKeyBundle consisting of a WebKey plus its Attributes and deletion
    +    info.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param key: The Json web key.
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted key.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the key is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the key was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, key=None, attributes=None, tags=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedKeyBundle, self).__init__(key=key, attributes=attributes, tags=tags, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class KeyItem(Model):
    +    """The key item containing key metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, kid: str=None, attributes=None, tags=None, **kwargs) -> None:
    +        super(KeyItem, self).__init__(**kwargs)
    +        self.kid = kid
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.managed = None
    +
    +
    +class DeletedKeyItem(KeyItem):
    +    """The deleted key item containing the deleted key metadata and information
    +    about deletion.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param attributes: The key management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar managed: True if the key's lifetime is managed by key vault. If this
    +     is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted key.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the key is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the key was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, kid: str=None, attributes=None, tags=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedKeyItem, self).__init__(kid=kid, attributes=attributes, tags=tags, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedKeyListResult(Model):
    +    """A list of keys that have been deleted in this vault.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of deleted keys in the
    +     vault along with a link to the next page of deleted keys
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedKeyItem]
    +    :ivar next_link: The URL to get the next set of deleted keys.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedKeyItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedKeyListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SasDefinitionBundle(Model):
    +    """A SAS definition bundle consists of key vault SAS definition details plus
    +    its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The SAS definition id.
    +    :vartype id: str
    +    :ivar secret_id: Storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :vartype template_uri: str
    +    :ivar sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :vartype sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :ivar validity_period: The validity period of SAS tokens created according
    +     to the SAS definition.
    +    :vartype validity_period: str
    +    :ivar attributes: The SAS definition attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'template_uri': {'readonly': True},
    +        'sas_type': {'readonly': True},
    +        'validity_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(SasDefinitionBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.secret_id = None
    +        self.template_uri = None
    +        self.sas_type = None
    +        self.validity_period = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedSasDefinitionBundle(SasDefinitionBundle):
    +    """A deleted SAS definition bundle consisting of its previous id, attributes
    +    and its tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The SAS definition id.
    +    :vartype id: str
    +    :ivar secret_id: Storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :vartype template_uri: str
    +    :ivar sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :vartype sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :ivar validity_period: The validity period of SAS tokens created according
    +     to the SAS definition.
    +    :vartype validity_period: str
    +    :ivar attributes: The SAS definition attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted SAS definition.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the SAS definition is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the SAS definition was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'template_uri': {'readonly': True},
    +        'sas_type': {'readonly': True},
    +        'validity_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedSasDefinitionBundle, self).__init__(**kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class SasDefinitionItem(Model):
    +    """The SAS definition item containing storage SAS definition metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage SAS identifier.
    +    :vartype id: str
    +    :ivar secret_id: The storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar attributes: The SAS definition management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(SasDefinitionItem, self).__init__(**kwargs)
    +        self.id = None
    +        self.secret_id = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedSasDefinitionItem(SasDefinitionItem):
    +    """The deleted SAS definition item containing metadata about the deleted SAS
    +    definition.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage SAS identifier.
    +    :vartype id: str
    +    :ivar secret_id: The storage account SAS definition secret id.
    +    :vartype secret_id: str
    +    :ivar attributes: The SAS definition management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted SAS definition.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the SAS definition is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the SAS definition was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'secret_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'secret_id': {'key': 'sid', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedSasDefinitionItem, self).__init__(**kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedSasDefinitionListResult(Model):
    +    """The deleted SAS definition list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted SAS
    +     definitions in the vault along with a link to the next page of deleted sas
    +     definitions
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedSasDefinitionItem]
    +    :ivar next_link: The URL to get the next set of deleted SAS definitions.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedSasDefinitionItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedSasDefinitionListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SecretBundle(Model):
    +    """A secret consisting of a value, id and its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value: The secret value.
    +    :type value: str
    +    :param id: The secret id.
    +    :type id: str
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar kid: If this is a secret backing a KV certificate, then this field
    +     specifies the corresponding key backing the KV certificate.
    +    :vartype kid: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a secret backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, value: str=None, id: str=None, content_type: str=None, attributes=None, tags=None, **kwargs) -> None:
    +        super(SecretBundle, self).__init__(**kwargs)
    +        self.value = value
    +        self.id = id
    +        self.content_type = content_type
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.kid = None
    +        self.managed = None
    +
    +
    +class DeletedSecretBundle(SecretBundle):
    +    """A Deleted Secret consisting of its previous id, attributes and its tags, as
    +    well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param value: The secret value.
    +    :type value: str
    +    :param id: The secret id.
    +    :type id: str
    +    :param content_type: The content type of the secret.
    +    :type content_type: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :ivar kid: If this is a secret backing a KV certificate, then this field
    +     specifies the corresponding key backing the KV certificate.
    +    :vartype kid: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a secret backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted secret.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the secret is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the secret was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'id': {'key': 'id', 'type': 'str'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, value: str=None, id: str=None, content_type: str=None, attributes=None, tags=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedSecretBundle, self).__init__(value=value, id=id, content_type=content_type, attributes=attributes, tags=tags, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class SecretItem(Model):
    +    """The secret item containing secret metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Secret identifier.
    +    :type id: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, id: str=None, attributes=None, tags=None, content_type: str=None, **kwargs) -> None:
    +        super(SecretItem, self).__init__(**kwargs)
    +        self.id = id
    +        self.attributes = attributes
    +        self.tags = tags
    +        self.content_type = content_type
    +        self.managed = None
    +
    +
    +class DeletedSecretItem(SecretItem):
    +    """The deleted secret item containing metadata about the deleted secret.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param id: Secret identifier.
    +    :type id: str
    +    :param attributes: The secret management attributes.
    +    :type attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :ivar managed: True if the secret's lifetime is managed by key vault. If
    +     this is a key backing a certificate, then managed will be true.
    +    :vartype managed: bool
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted secret.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the secret is scheduled to be
    +     purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the secret was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'managed': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'managed': {'key': 'managed', 'type': 'bool'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, id: str=None, attributes=None, tags=None, content_type: str=None, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedSecretItem, self).__init__(id=id, attributes=attributes, tags=tags, content_type=content_type, **kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedSecretListResult(Model):
    +    """The deleted secret list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted secrets
    +     in the vault along with a link to the next page of deleted secrets
    +    :vartype value: list[~azure.keyvault.v7_1.models.DeletedSecretItem]
    +    :ivar next_link: The URL to get the next set of deleted secrets.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedSecretItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedSecretListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class StorageAccountItem(Model):
    +    """The storage account item containing storage account metadata.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Storage identifier.
    +    :vartype id: str
    +    :ivar resource_id: Storage account resource Id.
    +    :vartype resource_id: str
    +    :ivar attributes: The storage account management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(StorageAccountItem, self).__init__(**kwargs)
    +        self.id = None
    +        self.resource_id = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedStorageAccountItem(StorageAccountItem):
    +    """The deleted storage account item containing metadata about the deleted
    +    storage account.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Storage identifier.
    +    :vartype id: str
    +    :ivar resource_id: Storage account resource Id.
    +    :vartype resource_id: str
    +    :ivar attributes: The storage account management attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs.
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted storage account.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the storage account is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the storage account was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedStorageAccountItem, self).__init__(**kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class StorageBundle(Model):
    +    """A Storage account bundle consists of key vault storage account details plus
    +    its attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage account id.
    +    :vartype id: str
    +    :ivar resource_id: The storage account resource id.
    +    :vartype resource_id: str
    +    :ivar active_key_name: The current active storage account key name.
    +    :vartype active_key_name: str
    +    :ivar auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :vartype auto_regenerate_key: bool
    +    :ivar regeneration_period: The key regeneration time duration specified in
    +     ISO-8601 format.
    +    :vartype regeneration_period: str
    +    :ivar attributes: The storage account attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'active_key_name': {'readonly': True},
    +        'auto_regenerate_key': {'readonly': True},
    +        'regeneration_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(StorageBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.resource_id = None
    +        self.active_key_name = None
    +        self.auto_regenerate_key = None
    +        self.regeneration_period = None
    +        self.attributes = None
    +        self.tags = None
    +
    +
    +class DeletedStorageBundle(StorageBundle):
    +    """A deleted storage account bundle consisting of its previous id, attributes
    +    and its tags, as well as information on when it will be purged.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: The storage account id.
    +    :vartype id: str
    +    :ivar resource_id: The storage account resource id.
    +    :vartype resource_id: str
    +    :ivar active_key_name: The current active storage account key name.
    +    :vartype active_key_name: str
    +    :ivar auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :vartype auto_regenerate_key: bool
    +    :ivar regeneration_period: The key regeneration time duration specified in
    +     ISO-8601 format.
    +    :vartype regeneration_period: str
    +    :ivar attributes: The storage account attributes.
    +    :vartype attributes: ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :ivar tags: Application specific metadata in the form of key-value pairs
    +    :vartype tags: dict[str, str]
    +    :param recovery_id: The url of the recovery object, used to identify and
    +     recover the deleted storage account.
    +    :type recovery_id: str
    +    :ivar scheduled_purge_date: The time when the storage account is scheduled
    +     to be purged, in UTC
    +    :vartype scheduled_purge_date: datetime
    +    :ivar deleted_date: The time when the storage account was deleted, in UTC
    +    :vartype deleted_date: datetime
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +        'resource_id': {'readonly': True},
    +        'active_key_name': {'readonly': True},
    +        'auto_regenerate_key': {'readonly': True},
    +        'regeneration_period': {'readonly': True},
    +        'attributes': {'readonly': True},
    +        'tags': {'readonly': True},
    +        'scheduled_purge_date': {'readonly': True},
    +        'deleted_date': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'recovery_id': {'key': 'recoveryId', 'type': 'str'},
    +        'scheduled_purge_date': {'key': 'scheduledPurgeDate', 'type': 'unix-time'},
    +        'deleted_date': {'key': 'deletedDate', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, recovery_id: str=None, **kwargs) -> None:
    +        super(DeletedStorageBundle, self).__init__(**kwargs)
    +        self.recovery_id = recovery_id
    +        self.scheduled_purge_date = None
    +        self.deleted_date = None
    +
    +
    +class DeletedStorageListResult(Model):
    +    """The deleted storage account list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of the deleted storage
    +     accounts in the vault along with a link to the next page of deleted
    +     storage accounts
    +    :vartype value:
    +     list[~azure.keyvault.v7_1.models.DeletedStorageAccountItem]
    +    :ivar next_link: The URL to get the next set of deleted storage accounts.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[DeletedStorageAccountItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(DeletedStorageListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class Error(Model):
    +    """The key vault server error.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar code: The error code.
    +    :vartype code: str
    +    :ivar message: The error message.
    +    :vartype message: str
    +    :ivar inner_error:
    +    :vartype inner_error: ~azure.keyvault.v7_1.models.Error
    +    """
    +
    +    _validation = {
    +        'code': {'readonly': True},
    +        'message': {'readonly': True},
    +        'inner_error': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'code': {'key': 'code', 'type': 'str'},
    +        'message': {'key': 'message', 'type': 'str'},
    +        'inner_error': {'key': 'innererror', 'type': 'Error'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(Error, self).__init__(**kwargs)
    +        self.code = None
    +        self.message = None
    +        self.inner_error = None
    +
    +
    +class IssuerAttributes(Model):
    +    """The attributes of an issuer managed by the Key Vault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the issuer is enabled.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
    +        super(IssuerAttributes, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.created = None
    +        self.updated = None
    +
    +
    +class IssuerBundle(Model):
    +    """The issuer for Key Vault certificate.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar id: Identifier for the issuer object.
    +    :vartype id: str
    +    :param provider: The issuer provider.
    +    :type provider: str
    +    :param credentials: The credentials to be used for the issuer.
    +    :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +    :param organization_details: Details of the organization as provided to
    +     the issuer.
    +    :type organization_details:
    +     ~azure.keyvault.v7_1.models.OrganizationDetails
    +    :param attributes: Attributes of the issuer object.
    +    :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +    """
    +
    +    _validation = {
    +        'id': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'provider': {'key': 'provider', 'type': 'str'},
    +        'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'},
    +        'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'},
    +        'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'},
    +    }
    +
    +    def __init__(self, *, provider: str=None, credentials=None, organization_details=None, attributes=None, **kwargs) -> None:
    +        super(IssuerBundle, self).__init__(**kwargs)
    +        self.id = None
    +        self.provider = provider
    +        self.credentials = credentials
    +        self.organization_details = organization_details
    +        self.attributes = attributes
    +
    +
    +class IssuerCredentials(Model):
    +    """The credentials to be used for the certificate issuer.
    +
    +    :param account_id: The user name/account name/account id.
    +    :type account_id: str
    +    :param password: The password/secret/account key.
    +    :type password: str
    +    """
    +
    +    _attribute_map = {
    +        'account_id': {'key': 'account_id', 'type': 'str'},
    +        'password': {'key': 'pwd', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, account_id: str=None, password: str=None, **kwargs) -> None:
    +        super(IssuerCredentials, self).__init__(**kwargs)
    +        self.account_id = account_id
    +        self.password = password
    +
    +
    +class IssuerParameters(Model):
    +    """Parameters for the issuer of the X509 component of a certificate.
    +
    +    :param name: Name of the referenced issuer object or reserved names; for
    +     example, 'Self' or 'Unknown'.
    +    :type name: str
    +    :param certificate_type: Certificate type as supported by the provider
    +     (optional); for example 'OV-SSL', 'EV-SSL'
    +    :type certificate_type: str
    +    :param certificate_transparency: Indicates if the certificates generated
    +     under this policy should be published to certificate transparency logs.
    +    :type certificate_transparency: bool
    +    """
    +
    +    _attribute_map = {
    +        'name': {'key': 'name', 'type': 'str'},
    +        'certificate_type': {'key': 'cty', 'type': 'str'},
    +        'certificate_transparency': {'key': 'cert_transparency', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, *, name: str=None, certificate_type: str=None, certificate_transparency: bool=None, **kwargs) -> None:
    +        super(IssuerParameters, self).__init__(**kwargs)
    +        self.name = name
    +        self.certificate_type = certificate_type
    +        self.certificate_transparency = certificate_transparency
    +
    +
    +class JsonWebKey(Model):
    +    """As of http://tools.ietf.org/html/draft-ietf-jose-json-web-key-18.
    +
    +    :param kid: Key identifier.
    +    :type kid: str
    +    :param kty: JsonWebKey Key Type (kty), as defined in
    +     https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40.
    +     Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'
    +    :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_ops:
    +    :type key_ops: list[str]
    +    :param n: RSA modulus.
    +    :type n: bytes
    +    :param e: RSA public exponent.
    +    :type e: bytes
    +    :param d: RSA private exponent, or the D component of an EC private key.
    +    :type d: bytes
    +    :param dp: RSA private key parameter.
    +    :type dp: bytes
    +    :param dq: RSA private key parameter.
    +    :type dq: bytes
    +    :param qi: RSA private key parameter.
    +    :type qi: bytes
    +    :param p: RSA secret prime.
    +    :type p: bytes
    +    :param q: RSA secret prime, with p < q.
    +    :type q: bytes
    +    :param k: Symmetric key.
    +    :type k: bytes
    +    :param t: HSM Token, used with 'Bring Your Own Key'.
    +    :type t: bytes
    +    :param crv: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type crv: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    :param x: X component of an EC public key.
    +    :type x: bytes
    +    :param y: Y component of an EC public key.
    +    :type y: bytes
    +    """
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'kty': {'key': 'kty', 'type': 'str'},
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'n': {'key': 'n', 'type': 'base64'},
    +        'e': {'key': 'e', 'type': 'base64'},
    +        'd': {'key': 'd', 'type': 'base64'},
    +        'dp': {'key': 'dp', 'type': 'base64'},
    +        'dq': {'key': 'dq', 'type': 'base64'},
    +        'qi': {'key': 'qi', 'type': 'base64'},
    +        'p': {'key': 'p', 'type': 'base64'},
    +        'q': {'key': 'q', 'type': 'base64'},
    +        'k': {'key': 'k', 'type': 'base64'},
    +        't': {'key': 'key_hsm', 'type': 'base64'},
    +        'crv': {'key': 'crv', 'type': 'str'},
    +        'x': {'key': 'x', 'type': 'base64'},
    +        'y': {'key': 'y', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, kid: str=None, kty=None, key_ops=None, n: bytes=None, e: bytes=None, d: bytes=None, dp: bytes=None, dq: bytes=None, qi: bytes=None, p: bytes=None, q: bytes=None, k: bytes=None, t: bytes=None, crv=None, x: bytes=None, y: bytes=None, **kwargs) -> None:
    +        super(JsonWebKey, self).__init__(**kwargs)
    +        self.kid = kid
    +        self.kty = kty
    +        self.key_ops = key_ops
    +        self.n = n
    +        self.e = e
    +        self.d = d
    +        self.dp = dp
    +        self.dq = dq
    +        self.qi = qi
    +        self.p = p
    +        self.q = q
    +        self.k = k
    +        self.t = t
    +        self.crv = crv
    +        self.x = x
    +        self.y = y
    +
    +
    +class KeyAttributes(Attributes):
    +    """The attributes of a key managed by the key vault service.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for keys in the current vault. If it contains 'Purgeable' the key
    +     can be permanently deleted by a privileged user; otherwise, only the
    +     system can purge the key, at the end of the retention interval. Possible
    +     values include: 'Purgeable', 'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, not_before=None, expires=None, **kwargs) -> None:
    +        super(KeyAttributes, self).__init__(enabled=enabled, not_before=not_before, expires=expires, **kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class KeyCreateParameters(Model):
    +    """The key create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param kty: Required. The type of key to create. For valid values, see
    +     JsonWebKeyType. Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM',
    +     'oct'
    +    :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_size: The key size in bits. For example: 2048, 3072, or 4096
    +     for RSA.
    +    :type key_size: int
    +    :param key_ops:
    +    :type key_ops: list[str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +    :param key_attributes:
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param curve: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    """
    +
    +    _validation = {
    +        'kty': {'required': True, 'min_length': 1},
    +    }
    +
    +    _attribute_map = {
    +        'kty': {'key': 'kty', 'type': 'str'},
    +        'key_size': {'key': 'key_size', 'type': 'int'},
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'curve': {'key': 'crv', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, kty, key_size: int=None, key_ops=None, key_attributes=None, tags=None, curve=None, **kwargs) -> None:
    +        super(KeyCreateParameters, self).__init__(**kwargs)
    +        self.kty = kty
    +        self.key_size = key_size
    +        self.key_ops = key_ops
    +        self.key_attributes = key_attributes
    +        self.tags = tags
    +        self.curve = curve
    +
    +
    +class KeyImportParameters(Model):
    +    """The key import parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param hsm: Whether to import as a hardware key (HSM) or software key.
    +    :type hsm: bool
    +    :param key: Required. The Json web key
    +    :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +    :param key_attributes: The key management attributes.
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'key': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'hsm': {'key': 'Hsm', 'type': 'bool'},
    +        'key': {'key': 'key', 'type': 'JsonWebKey'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, key, hsm: bool=None, key_attributes=None, tags=None, **kwargs) -> None:
    +        super(KeyImportParameters, self).__init__(**kwargs)
    +        self.hsm = hsm
    +        self.key = key
    +        self.key_attributes = key_attributes
    +        self.tags = tags
    +
    +
    +class KeyListResult(Model):
    +    """The key list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of keys in the key vault
    +     along with a link to the next page of keys.
    +    :vartype value: list[~azure.keyvault.v7_1.models.KeyItem]
    +    :ivar next_link: The URL to get the next set of keys.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[KeyItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(KeyListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class KeyOperationResult(Model):
    +    """The key operation result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar kid: Key identifier
    +    :vartype kid: str
    +    :ivar result:
    +    :vartype result: bytes
    +    """
    +
    +    _validation = {
    +        'kid': {'readonly': True},
    +        'result': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'kid': {'key': 'kid', 'type': 'str'},
    +        'result': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(KeyOperationResult, self).__init__(**kwargs)
    +        self.kid = None
    +        self.result = None
    +
    +
    +class KeyOperationsParameters(Model):
    +    """The key operations parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. algorithm identifier. Possible values include:
    +     'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +    :param value: Required.
    +    :type value: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, algorithm, value: bytes, **kwargs) -> None:
    +        super(KeyOperationsParameters, self).__init__(**kwargs)
    +        self.algorithm = algorithm
    +        self.value = value
    +
    +
    +class KeyProperties(Model):
    +    """Properties of the key pair backing a certificate.
    +
    +    :param exportable: Indicates if the private key can be exported.
    +    :type exportable: bool
    +    :param key_type: The type of key pair to be used for the certificate.
    +     Possible values include: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'
    +    :type key_type: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +    :param key_size: The key size in bits. For example: 2048, 3072, or 4096
    +     for RSA.
    +    :type key_size: int
    +    :param reuse_key: Indicates if the same key pair will be used on
    +     certificate renewal.
    +    :type reuse_key: bool
    +    :param curve: Elliptic curve name. For valid values, see
    +     JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384', 'P-521',
    +     'P-256K'
    +    :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +    """
    +
    +    _attribute_map = {
    +        'exportable': {'key': 'exportable', 'type': 'bool'},
    +        'key_type': {'key': 'kty', 'type': 'str'},
    +        'key_size': {'key': 'key_size', 'type': 'int'},
    +        'reuse_key': {'key': 'reuse_key', 'type': 'bool'},
    +        'curve': {'key': 'crv', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, exportable: bool=None, key_type=None, key_size: int=None, reuse_key: bool=None, curve=None, **kwargs) -> None:
    +        super(KeyProperties, self).__init__(**kwargs)
    +        self.exportable = exportable
    +        self.key_type = key_type
    +        self.key_size = key_size
    +        self.reuse_key = reuse_key
    +        self.curve = curve
    +
    +
    +class KeyRestoreParameters(Model):
    +    """The key restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_bundle_backup: Required. The backup blob associated with a key
    +     bundle.
    +    :type key_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'key_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, key_bundle_backup: bytes, **kwargs) -> None:
    +        super(KeyRestoreParameters, self).__init__(**kwargs)
    +        self.key_bundle_backup = key_bundle_backup
    +
    +
    +class KeySignParameters(Model):
    +    """The key operations parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. The signing/verification algorithm identifier.
    +     For more information on possible algorithm types, see
    +     JsonWebKeySignatureAlgorithm. Possible values include: 'PS256', 'PS384',
    +     'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256', 'ES384', 'ES512',
    +     'ES256K'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +    :param value: Required.
    +    :type value: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'value': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, algorithm, value: bytes, **kwargs) -> None:
    +        super(KeySignParameters, self).__init__(**kwargs)
    +        self.algorithm = algorithm
    +        self.value = value
    +
    +
    +class KeyUpdateParameters(Model):
    +    """The key update parameters.
    +
    +    :param key_ops: Json web key operations. For more information on possible
    +     key operations, see JsonWebKeyOperation.
    +    :type key_ops: list[str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +    :param key_attributes:
    +    :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'key_ops': {'key': 'key_ops', 'type': '[str]'},
    +        'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, key_ops=None, key_attributes=None, tags=None, **kwargs) -> None:
    +        super(KeyUpdateParameters, self).__init__(**kwargs)
    +        self.key_ops = key_ops
    +        self.key_attributes = key_attributes
    +        self.tags = tags
    +
    +
    +class KeyVaultError(Model):
    +    """The key vault error exception.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar error:
    +    :vartype error: ~azure.keyvault.v7_1.models.Error
    +    """
    +
    +    _validation = {
    +        'error': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'error': {'key': 'error', 'type': 'Error'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(KeyVaultError, self).__init__(**kwargs)
    +        self.error = None
    +
    +
    +class KeyVaultErrorException(HttpResponseError):
    +    """Server responsed with exception of type: 'KeyVaultError'.
    +
    +    :param deserialize: A deserializer
    +    :param response: Server response to be deserialized.
    +    """
    +
    +    def __init__(self, response, deserialize, *args):
    +
    +      model_name = 'KeyVaultError'
    +      self.error = deserialize(model_name, response)
    +      if self.error is None:
    +          self.error = deserialize.dependencies[model_name]()
    +      super(KeyVaultErrorException, self).__init__(response=response)
    +
    +
    +class KeyVerifyParameters(Model):
    +    """The key verify parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param algorithm: Required. The signing/verification algorithm. For more
    +     information on possible algorithm types, see JsonWebKeySignatureAlgorithm.
    +     Possible values include: 'PS256', 'PS384', 'PS512', 'RS256', 'RS384',
    +     'RS512', 'RSNULL', 'ES256', 'ES384', 'ES512', 'ES256K'
    +    :type algorithm: str or
    +     ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +    :param digest: Required. The digest used for signing.
    +    :type digest: bytes
    +    :param signature: Required. The signature to be verified.
    +    :type signature: bytes
    +    """
    +
    +    _validation = {
    +        'algorithm': {'required': True, 'min_length': 1},
    +        'digest': {'required': True},
    +        'signature': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'algorithm': {'key': 'alg', 'type': 'str'},
    +        'digest': {'key': 'digest', 'type': 'base64'},
    +        'signature': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, algorithm, digest: bytes, signature: bytes, **kwargs) -> None:
    +        super(KeyVerifyParameters, self).__init__(**kwargs)
    +        self.algorithm = algorithm
    +        self.digest = digest
    +        self.signature = signature
    +
    +
    +class KeyVerifyResult(Model):
    +    """The key verify result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: True if the signature is verified, otherwise false.
    +    :vartype value: bool
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'bool'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(KeyVerifyResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class LifetimeAction(Model):
    +    """Action and its trigger that will be performed by Key Vault over the
    +    lifetime of a certificate.
    +
    +    :param trigger: The condition that will execute the action.
    +    :type trigger: ~azure.keyvault.v7_1.models.Trigger
    +    :param action: The action that will be executed.
    +    :type action: ~azure.keyvault.v7_1.models.Action
    +    """
    +
    +    _attribute_map = {
    +        'trigger': {'key': 'trigger', 'type': 'Trigger'},
    +        'action': {'key': 'action', 'type': 'Action'},
    +    }
    +
    +    def __init__(self, *, trigger=None, action=None, **kwargs) -> None:
    +        super(LifetimeAction, self).__init__(**kwargs)
    +        self.trigger = trigger
    +        self.action = action
    +
    +
    +class OrganizationDetails(Model):
    +    """Details of the organization of the certificate issuer.
    +
    +    :param id: Id of the organization.
    +    :type id: str
    +    :param admin_details: Details of the organization administrator.
    +    :type admin_details:
    +     list[~azure.keyvault.v7_1.models.AdministratorDetails]
    +    """
    +
    +    _attribute_map = {
    +        'id': {'key': 'id', 'type': 'str'},
    +        'admin_details': {'key': 'admin_details', 'type': '[AdministratorDetails]'},
    +    }
    +
    +    def __init__(self, *, id: str=None, admin_details=None, **kwargs) -> None:
    +        super(OrganizationDetails, self).__init__(**kwargs)
    +        self.id = id
    +        self.admin_details = admin_details
    +
    +
    +class PendingCertificateSigningRequestResult(Model):
    +    """The pending certificate signing request result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: The pending certificate signing request as Base64 encoded
    +     string.
    +    :vartype value: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(PendingCertificateSigningRequestResult, self).__init__(**kwargs)
    +        self.value = None
    +
    +
    +class SasDefinitionAttributes(Model):
    +    """The SAS definition management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: the enabled state of the object.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for SAS definitions in the current vault. If it contains
    +     'Purgeable' the SAS definition can be permanently deleted by a privileged
    +     user; otherwise, only the system can purge the SAS definition, at the end
    +     of the retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
    +        super(SasDefinitionAttributes, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.created = None
    +        self.updated = None
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class SasDefinitionCreateParameters(Model):
    +    """The SAS definition create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param template_uri: Required. The SAS definition token template signed
    +     with an arbitrary key.  Tokens created according to the SAS definition
    +     will have the same properties as the template.
    +    :type template_uri: str
    +    :param sas_type: Required. The type of SAS token the SAS definition will
    +     create. Possible values include: 'account', 'service'
    +    :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :param validity_period: Required. The validity period of SAS tokens
    +     created according to the SAS definition.
    +    :type validity_period: str
    +    :param sas_definition_attributes: The attributes of the SAS definition.
    +    :type sas_definition_attributes:
    +     ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'template_uri': {'required': True},
    +        'sas_type': {'required': True},
    +        'validity_period': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'sas_definition_attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, template_uri: str, sas_type, validity_period: str, sas_definition_attributes=None, tags=None, **kwargs) -> None:
    +        super(SasDefinitionCreateParameters, self).__init__(**kwargs)
    +        self.template_uri = template_uri
    +        self.sas_type = sas_type
    +        self.validity_period = validity_period
    +        self.sas_definition_attributes = sas_definition_attributes
    +        self.tags = tags
    +
    +
    +class SasDefinitionListResult(Model):
    +    """The storage account SAS definition list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of SAS definitions along
    +     with a link to the next page of SAS definitions.
    +    :vartype value: list[~azure.keyvault.v7_1.models.SasDefinitionItem]
    +    :ivar next_link: The URL to get the next set of SAS definitions.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SasDefinitionItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(SasDefinitionListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SasDefinitionUpdateParameters(Model):
    +    """The SAS definition update parameters.
    +
    +    :param template_uri: The SAS definition token template signed with an
    +     arbitrary key.  Tokens created according to the SAS definition will have
    +     the same properties as the template.
    +    :type template_uri: str
    +    :param sas_type: The type of SAS token the SAS definition will create.
    +     Possible values include: 'account', 'service'
    +    :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +    :param validity_period: The validity period of SAS tokens created
    +     according to the SAS definition.
    +    :type validity_period: str
    +    :param sas_definition_attributes: The attributes of the SAS definition.
    +    :type sas_definition_attributes:
    +     ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'template_uri': {'key': 'templateUri', 'type': 'str'},
    +        'sas_type': {'key': 'sasType', 'type': 'str'},
    +        'validity_period': {'key': 'validityPeriod', 'type': 'str'},
    +        'sas_definition_attributes': {'key': 'attributes', 'type': 'SasDefinitionAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, template_uri: str=None, sas_type=None, validity_period: str=None, sas_definition_attributes=None, tags=None, **kwargs) -> None:
    +        super(SasDefinitionUpdateParameters, self).__init__(**kwargs)
    +        self.template_uri = template_uri
    +        self.sas_type = sas_type
    +        self.validity_period = validity_period
    +        self.sas_definition_attributes = sas_definition_attributes
    +        self.tags = tags
    +
    +
    +class SecretAttributes(Attributes):
    +    """The secret management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: Determines whether the object is enabled.
    +    :type enabled: bool
    +    :param not_before: Not before date in UTC.
    +    :type not_before: datetime
    +    :param expires: Expiry date in UTC.
    +    :type expires: datetime
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for secrets in the current vault. If it contains 'Purgeable', the
    +     secret can be permanently deleted by a privileged user; otherwise, only
    +     the system can purge the secret, at the end of the retention interval.
    +     Possible values include: 'Purgeable', 'Recoverable+Purgeable',
    +     'Recoverable', 'Recoverable+ProtectedSubscription',
    +     'CustomizedRecoverable+Purgeable', 'CustomizedRecoverable',
    +     'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'not_before': {'key': 'nbf', 'type': 'unix-time'},
    +        'expires': {'key': 'exp', 'type': 'unix-time'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, not_before=None, expires=None, **kwargs) -> None:
    +        super(SecretAttributes, self).__init__(enabled=enabled, not_before=not_before, expires=expires, **kwargs)
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class SecretListResult(Model):
    +    """The secret list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of secrets in the key
    +     vault along with a link to the next page of secrets.
    +    :vartype value: list[~azure.keyvault.v7_1.models.SecretItem]
    +    :ivar next_link: The URL to get the next set of secrets.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[SecretItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(SecretListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class SecretProperties(Model):
    +    """Properties of the key backing a certificate.
    +
    +    :param content_type: The media type (MIME type).
    +    :type content_type: str
    +    """
    +
    +    _attribute_map = {
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, content_type: str=None, **kwargs) -> None:
    +        super(SecretProperties, self).__init__(**kwargs)
    +        self.content_type = content_type
    +
    +
    +class SecretRestoreParameters(Model):
    +    """The secret restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param secret_bundle_backup: Required. The backup blob associated with a
    +     secret bundle.
    +    :type secret_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'secret_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'secret_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, secret_bundle_backup: bytes, **kwargs) -> None:
    +        super(SecretRestoreParameters, self).__init__(**kwargs)
    +        self.secret_bundle_backup = secret_bundle_backup
    +
    +
    +class SecretSetParameters(Model):
    +    """The secret set parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param value: Required. The value of the secret.
    +    :type value: str
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :param secret_attributes: The secret management attributes.
    +    :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    """
    +
    +    _validation = {
    +        'value': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': 'str'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +    }
    +
    +    def __init__(self, *, value: str, tags=None, content_type: str=None, secret_attributes=None, **kwargs) -> None:
    +        super(SecretSetParameters, self).__init__(**kwargs)
    +        self.value = value
    +        self.tags = tags
    +        self.content_type = content_type
    +        self.secret_attributes = secret_attributes
    +
    +
    +class SecretUpdateParameters(Model):
    +    """The secret update parameters.
    +
    +    :param content_type: Type of the secret value such as a password.
    +    :type content_type: str
    +    :param secret_attributes: The secret management attributes.
    +    :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'content_type': {'key': 'contentType', 'type': 'str'},
    +        'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, content_type: str=None, secret_attributes=None, tags=None, **kwargs) -> None:
    +        super(SecretUpdateParameters, self).__init__(**kwargs)
    +        self.content_type = content_type
    +        self.secret_attributes = secret_attributes
    +        self.tags = tags
    +
    +
    +class StorageAccountAttributes(Model):
    +    """The storage account management attributes.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :param enabled: the enabled state of the object.
    +    :type enabled: bool
    +    :ivar created: Creation time in UTC.
    +    :vartype created: datetime
    +    :ivar updated: Last updated time in UTC.
    +    :vartype updated: datetime
    +    :ivar recoverable_days: softDelete data retention days. Value should be
    +     >=7 and <=90 when softDelete enabled, otherwise 0.
    +    :vartype recoverable_days: int
    +    :ivar recovery_level: Reflects the deletion recovery level currently in
    +     effect for storage accounts in the current vault. If it contains
    +     'Purgeable' the storage account can be permanently deleted by a privileged
    +     user; otherwise, only the system can purge the storage account, at the end
    +     of the retention interval. Possible values include: 'Purgeable',
    +     'Recoverable+Purgeable', 'Recoverable',
    +     'Recoverable+ProtectedSubscription', 'CustomizedRecoverable+Purgeable',
    +     'CustomizedRecoverable', 'CustomizedRecoverable+ProtectedSubscription'
    +    :vartype recovery_level: str or
    +     ~azure.keyvault.v7_1.models.DeletionRecoveryLevel
    +    """
    +
    +    _validation = {
    +        'created': {'readonly': True},
    +        'updated': {'readonly': True},
    +        'recoverable_days': {'readonly': True},
    +        'recovery_level': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'enabled': {'key': 'enabled', 'type': 'bool'},
    +        'created': {'key': 'created', 'type': 'unix-time'},
    +        'updated': {'key': 'updated', 'type': 'unix-time'},
    +        'recoverable_days': {'key': 'recoverableDays', 'type': 'int'},
    +        'recovery_level': {'key': 'recoveryLevel', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
    +        super(StorageAccountAttributes, self).__init__(**kwargs)
    +        self.enabled = enabled
    +        self.created = None
    +        self.updated = None
    +        self.recoverable_days = None
    +        self.recovery_level = None
    +
    +
    +class StorageAccountCreateParameters(Model):
    +    """The storage account create parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param resource_id: Required. Storage account resource id.
    +    :type resource_id: str
    +    :param active_key_name: Required. Current active storage account key name.
    +    :type active_key_name: str
    +    :param auto_regenerate_key: Required. whether keyvault should manage the
    +     storage account for the user.
    +    :type auto_regenerate_key: bool
    +    :param regeneration_period: The key regeneration time duration specified
    +     in ISO-8601 format.
    +    :type regeneration_period: str
    +    :param storage_account_attributes: The attributes of the storage account.
    +    :type storage_account_attributes:
    +     ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _validation = {
    +        'resource_id': {'required': True},
    +        'active_key_name': {'required': True},
    +        'auto_regenerate_key': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'resource_id': {'key': 'resourceId', 'type': 'str'},
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'storage_account_attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, resource_id: str, active_key_name: str, auto_regenerate_key: bool, regeneration_period: str=None, storage_account_attributes=None, tags=None, **kwargs) -> None:
    +        super(StorageAccountCreateParameters, self).__init__(**kwargs)
    +        self.resource_id = resource_id
    +        self.active_key_name = active_key_name
    +        self.auto_regenerate_key = auto_regenerate_key
    +        self.regeneration_period = regeneration_period
    +        self.storage_account_attributes = storage_account_attributes
    +        self.tags = tags
    +
    +
    +class StorageAccountRegenerteKeyParameters(Model):
    +    """The storage account key regenerate parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param key_name: Required. The storage account key name.
    +    :type key_name: str
    +    """
    +
    +    _validation = {
    +        'key_name': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'key_name': {'key': 'keyName', 'type': 'str'},
    +    }
    +
    +    def __init__(self, *, key_name: str, **kwargs) -> None:
    +        super(StorageAccountRegenerteKeyParameters, self).__init__(**kwargs)
    +        self.key_name = key_name
    +
    +
    +class StorageAccountUpdateParameters(Model):
    +    """The storage account update parameters.
    +
    +    :param active_key_name: The current active storage account key name.
    +    :type active_key_name: str
    +    :param auto_regenerate_key: whether keyvault should manage the storage
    +     account for the user.
    +    :type auto_regenerate_key: bool
    +    :param regeneration_period: The key regeneration time duration specified
    +     in ISO-8601 format.
    +    :type regeneration_period: str
    +    :param storage_account_attributes: The attributes of the storage account.
    +    :type storage_account_attributes:
    +     ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +    :param tags: Application specific metadata in the form of key-value pairs.
    +    :type tags: dict[str, str]
    +    """
    +
    +    _attribute_map = {
    +        'active_key_name': {'key': 'activeKeyName', 'type': 'str'},
    +        'auto_regenerate_key': {'key': 'autoRegenerateKey', 'type': 'bool'},
    +        'regeneration_period': {'key': 'regenerationPeriod', 'type': 'str'},
    +        'storage_account_attributes': {'key': 'attributes', 'type': 'StorageAccountAttributes'},
    +        'tags': {'key': 'tags', 'type': '{str}'},
    +    }
    +
    +    def __init__(self, *, active_key_name: str=None, auto_regenerate_key: bool=None, regeneration_period: str=None, storage_account_attributes=None, tags=None, **kwargs) -> None:
    +        super(StorageAccountUpdateParameters, self).__init__(**kwargs)
    +        self.active_key_name = active_key_name
    +        self.auto_regenerate_key = auto_regenerate_key
    +        self.regeneration_period = regeneration_period
    +        self.storage_account_attributes = storage_account_attributes
    +        self.tags = tags
    +
    +
    +class StorageListResult(Model):
    +    """The storage accounts list result.
    +
    +    Variables are only populated by the server, and will be ignored when
    +    sending a request.
    +
    +    :ivar value: A response message containing a list of storage accounts in
    +     the key vault along with a link to the next page of storage accounts.
    +    :vartype value: list[~azure.keyvault.v7_1.models.StorageAccountItem]
    +    :ivar next_link: The URL to get the next set of storage accounts.
    +    :vartype next_link: str
    +    """
    +
    +    _validation = {
    +        'value': {'readonly': True},
    +        'next_link': {'readonly': True},
    +    }
    +
    +    _attribute_map = {
    +        'value': {'key': 'value', 'type': '[StorageAccountItem]'},
    +        'next_link': {'key': 'nextLink', 'type': 'str'},
    +    }
    +
    +    def __init__(self, **kwargs) -> None:
    +        super(StorageListResult, self).__init__(**kwargs)
    +        self.value = None
    +        self.next_link = None
    +
    +
    +class StorageRestoreParameters(Model):
    +    """The secret restore parameters.
    +
    +    All required parameters must be populated in order to send to Azure.
    +
    +    :param storage_bundle_backup: Required. The backup blob associated with a
    +     storage account.
    +    :type storage_bundle_backup: bytes
    +    """
    +
    +    _validation = {
    +        'storage_bundle_backup': {'required': True},
    +    }
    +
    +    _attribute_map = {
    +        'storage_bundle_backup': {'key': 'value', 'type': 'base64'},
    +    }
    +
    +    def __init__(self, *, storage_bundle_backup: bytes, **kwargs) -> None:
    +        super(StorageRestoreParameters, self).__init__(**kwargs)
    +        self.storage_bundle_backup = storage_bundle_backup
    +
    +
    +class SubjectAlternativeNames(Model):
    +    """The subject alternate names of a X509 object.
    +
    +    :param emails: Email addresses.
    +    :type emails: list[str]
    +    :param dns_names: Domain names.
    +    :type dns_names: list[str]
    +    :param upns: User principal names.
    +    :type upns: list[str]
    +    """
    +
    +    _attribute_map = {
    +        'emails': {'key': 'emails', 'type': '[str]'},
    +        'dns_names': {'key': 'dns_names', 'type': '[str]'},
    +        'upns': {'key': 'upns', 'type': '[str]'},
    +    }
    +
    +    def __init__(self, *, emails=None, dns_names=None, upns=None, **kwargs) -> None:
    +        super(SubjectAlternativeNames, self).__init__(**kwargs)
    +        self.emails = emails
    +        self.dns_names = dns_names
    +        self.upns = upns
    +
    +
    +class Trigger(Model):
    +    """A condition to be satisfied for an action to be executed.
    +
    +    :param lifetime_percentage: Percentage of lifetime at which to trigger.
    +     Value should be between 1 and 99.
    +    :type lifetime_percentage: int
    +    :param days_before_expiry: Days before expiry to attempt renewal. Value
    +     should be between 1 and validity_in_months multiplied by 27. If
    +     validity_in_months is 36, then value should be between 1 and 972 (36 *
    +     27).
    +    :type days_before_expiry: int
    +    """
    +
    +    _validation = {
    +        'lifetime_percentage': {'maximum': 99, 'minimum': 1},
    +    }
    +
    +    _attribute_map = {
    +        'lifetime_percentage': {'key': 'lifetime_percentage', 'type': 'int'},
    +        'days_before_expiry': {'key': 'days_before_expiry', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, lifetime_percentage: int=None, days_before_expiry: int=None, **kwargs) -> None:
    +        super(Trigger, self).__init__(**kwargs)
    +        self.lifetime_percentage = lifetime_percentage
    +        self.days_before_expiry = days_before_expiry
    +
    +
    +class X509CertificateProperties(Model):
    +    """Properties of the X509 component of a certificate.
    +
    +    :param subject: The subject name. Should be a valid X509 distinguished
    +     Name.
    +    :type subject: str
    +    :param ekus: The enhanced key usage.
    +    :type ekus: list[str]
    +    :param subject_alternative_names: The subject alternative names.
    +    :type subject_alternative_names:
    +     ~azure.keyvault.v7_1.models.SubjectAlternativeNames
    +    :param key_usage: List of key usages.
    +    :type key_usage: list[str or ~azure.keyvault.v7_1.models.KeyUsageType]
    +    :param validity_in_months: The duration that the certificate is valid in
    +     months.
    +    :type validity_in_months: int
    +    """
    +
    +    _validation = {
    +        'validity_in_months': {'minimum': 0},
    +    }
    +
    +    _attribute_map = {
    +        'subject': {'key': 'subject', 'type': 'str'},
    +        'ekus': {'key': 'ekus', 'type': '[str]'},
    +        'subject_alternative_names': {'key': 'sans', 'type': 'SubjectAlternativeNames'},
    +        'key_usage': {'key': 'key_usage', 'type': '[str]'},
    +        'validity_in_months': {'key': 'validity_months', 'type': 'int'},
    +    }
    +
    +    def __init__(self, *, subject: str=None, ekus=None, subject_alternative_names=None, key_usage=None, validity_in_months: int=None, **kwargs) -> None:
    +        super(X509CertificateProperties, self).__init__(**kwargs)
    +        self.subject = subject
    +        self.ekus = ekus
    +        self.subject_alternative_names = subject_alternative_names
    +        self.key_usage = key_usage
    +        self.validity_in_months = validity_in_months
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/operations/__init__.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/operations/__init__.py
    new file mode 100644
    index 000000000000..603e37d3ee07
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/operations/__init__.py
    @@ -0,0 +1,16 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from ._key_vault_client_operations import KeyVaultClientOperationsMixin
    +
    +__all__ = [
    +    'KeyVaultClientOperationsMixin',
    +]
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/operations/_key_vault_client_operations.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/operations/_key_vault_client_operations.py
    new file mode 100644
    index 000000000000..449c73af3bb1
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/operations/_key_vault_client_operations.py
    @@ -0,0 +1,5224 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from azure.core.exceptions import map_error
    +from azure.core.paging import ItemPaged
    +from .. import models
    +import uuid
    +
    +
    +class KeyVaultClientOperationsMixin(object):
    +
    +    def get_certificates(
    +            self, vault_base_url, maxresults=None, include_pending=None, cls=None, **kwargs):
    +        """List certificates in a specified key vault.
    +
    +        The GetCertificates operation returns the set of certificates resources
    +        in the specified key vault. This operation requires the
    +        certificates/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :param include_pending: Specifies whether to include certificates
    +         which are not completely provisioned.
    +        :type include_pending: bool
    +        :return: An iterator like instance of CertificateItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.CertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificates.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                if include_pending is not None:
    +                    query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('CertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_certificates.metadata = {'url': '/certificates'}
    +
    +    def delete_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Deletes a certificate from a specified key vault.
    +
    +        Deletes all versions of a certificate object along with its associated
    +        policy. Delete certificate cannot be used to remove individual versions
    +        of a certificate object. This operation requires the
    +        certificates/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedCertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedCertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedCertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate.metadata = {'url': '/certificates/{certificate-name}'}
    +
    +    def set_certificate_contacts(self, vault_base_url, contact_list=None, cls=None, **kwargs):
    +        """Sets the certificate contacts for the specified key vault.
    +
    +        Sets the certificate contacts for the specified key vault. This
    +        operation requires the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param contact_list: The contact list for the vault certificates.
    +        :type contact_list: list[~azure.keyvault.v7_1.models.Contact]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        contacts = models.Contacts(contact_list=contact_list)
    +
    +        # Construct URL
    +        url = self.set_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(contacts, 'Contacts')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    def get_certificate_contacts(self, vault_base_url, cls=None, **kwargs):
    +        """Lists the certificate contacts for a specified key vault.
    +
    +        The GetCertificateContacts operation returns the set of certificate
    +        contact resources in the specified key vault. This operation requires
    +        the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    def delete_certificate_contacts(self, vault_base_url, cls=None, **kwargs):
    +        """Deletes the certificate contacts for a specified key vault.
    +
    +        Deletes the certificate contacts for a specified key vault certificate.
    +        This operation requires the certificates/managecontacts permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: Contacts or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.Contacts
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_contacts.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('Contacts', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_contacts.metadata = {'url': '/certificates/contacts'}
    +
    +    def get_certificate_issuers(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """List certificate issuers for a specified key vault.
    +
    +        The GetCertificateIssuers operation returns the set of certificate
    +        issuer resources in the specified key vault. This operation requires
    +        the certificates/manageissuers/getissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of CertificateIssuerItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.CertificateIssuerItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificate_issuers.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('CertificateIssuerListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_certificate_issuers.metadata = {'url': '/certificates/issuers'}
    +
    +    def set_certificate_issuer(self, vault_base_url, issuer_name, provider, credentials=None, organization_details=None, attributes=None, cls=None, **kwargs):
    +        """Sets the specified certificate issuer.
    +
    +        The SetCertificateIssuer operation adds or updates the specified
    +        certificate issuer. This operation requires the certificates/setissuers
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param provider: The issuer provider.
    +        :type provider: str
    +        :param credentials: The credentials to be used for the issuer.
    +        :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +        :param organization_details: Details of the organization as provided
    +         to the issuer.
    +        :type organization_details:
    +         ~azure.keyvault.v7_1.models.OrganizationDetails
    +        :param attributes: Attributes of the issuer object.
    +        :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameter = models.CertificateIssuerSetParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes)
    +
    +        # Construct URL
    +        url = self.set_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameter, 'CertificateIssuerSetParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    def update_certificate_issuer(self, vault_base_url, issuer_name, provider=None, credentials=None, organization_details=None, attributes=None, cls=None, **kwargs):
    +        """Updates the specified certificate issuer.
    +
    +        The UpdateCertificateIssuer operation performs an update on the
    +        specified certificate issuer entity. This operation requires the
    +        certificates/setissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param provider: The issuer provider.
    +        :type provider: str
    +        :param credentials: The credentials to be used for the issuer.
    +        :type credentials: ~azure.keyvault.v7_1.models.IssuerCredentials
    +        :param organization_details: Details of the organization as provided
    +         to the issuer.
    +        :type organization_details:
    +         ~azure.keyvault.v7_1.models.OrganizationDetails
    +        :param attributes: Attributes of the issuer object.
    +        :type attributes: ~azure.keyvault.v7_1.models.IssuerAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameter = models.CertificateIssuerUpdateParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes)
    +
    +        # Construct URL
    +        url = self.update_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameter, 'CertificateIssuerUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    def get_certificate_issuer(self, vault_base_url, issuer_name, cls=None, **kwargs):
    +        """Lists the specified certificate issuer.
    +
    +        The GetCertificateIssuer operation returns the specified certificate
    +        issuer resources in the specified key vault. This operation requires
    +        the certificates/manageissuers/getissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    def delete_certificate_issuer(self, vault_base_url, issuer_name, cls=None, **kwargs):
    +        """Deletes the specified certificate issuer.
    +
    +        The DeleteCertificateIssuer operation permanently removes the specified
    +        certificate issuer from the vault. This operation requires the
    +        certificates/manageissuers/deleteissuers permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param issuer_name: The name of the issuer.
    +        :type issuer_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: IssuerBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.IssuerBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_issuer.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('IssuerBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}
    +
    +    def create_certificate(self, vault_base_url, certificate_name, certificate_policy=None, certificate_attributes=None, tags=None, cls=None, **kwargs):
    +        """Creates a new certificate.
    +
    +        If this is the first version, the certificate resource is created. This
    +        operation requires the certificates/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateCreateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.create_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [202]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 202:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    create_certificate.metadata = {'url': '/certificates/{certificate-name}/create'}
    +
    +    def import_certificate(self, vault_base_url, certificate_name, base64_encoded_certificate, password=None, certificate_policy=None, certificate_attributes=None, tags=None, cls=None, **kwargs):
    +        """Imports a certificate into a specified key vault.
    +
    +        Imports an existing valid certificate, containing a private key, into
    +        Azure Key Vault. The certificate to be imported can be in either PFX or
    +        PEM format. If the certificate is in PEM format the PEM file must
    +        contain the key as well as x509 certificates. This operation requires
    +        the certificates/import permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param base64_encoded_certificate: Base64 encoded representation of
    +         the certificate object to import. This certificate needs to contain
    +         the private key.
    +        :type base64_encoded_certificate: str
    +        :param password: If the private key in base64EncodedCertificate is
    +         encrypted, the password used for encryption.
    +        :type password: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateImportParameters(base64_encoded_certificate=base64_encoded_certificate, password=password, certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.import_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateImportParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    import_certificate.metadata = {'url': '/certificates/{certificate-name}/import'}
    +
    +    def get_certificate_versions(
    +            self, vault_base_url, certificate_name, maxresults=None, cls=None, **kwargs):
    +        """List the versions of a certificate.
    +
    +        The GetCertificateVersions operation returns the versions of a
    +        certificate in the specified key vault. This operation requires the
    +        certificates/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of CertificateItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.CertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_certificate_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('CertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_certificate_versions.metadata = {'url': '/certificates/{certificate-name}/versions'}
    +
    +    def get_certificate_policy(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Lists the policy for a certificate.
    +
    +        The GetCertificatePolicy operation returns the specified certificate
    +        policy resources in the specified key vault. This operation requires
    +        the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in a given key
    +         vault.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificatePolicy or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_policy.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificatePolicy', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}
    +
    +    def update_certificate_policy(self, vault_base_url, certificate_name, certificate_policy, cls=None, **kwargs):
    +        """Updates the policy for a certificate.
    +
    +        Set specified members in the certificate policy. Leave others as null.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_policy: The policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificatePolicy or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.update_certificate_policy.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_policy, 'CertificatePolicy')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificatePolicy', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}
    +
    +    def update_certificate(self, vault_base_url, certificate_name, certificate_version, certificate_policy=None, certificate_attributes=None, tags=None, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given certificate.
    +
    +        The UpdateCertificate operation applies the specified update on the
    +        given certificate; the only elements updated are the certificate's
    +        attributes. This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given key
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_version: The version of the certificate.
    +        :type certificate_version: str
    +        :param certificate_policy: The management policy for the certificate.
    +        :type certificate_policy:
    +         ~azure.keyvault.v7_1.models.CertificatePolicy
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateUpdateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
    +            'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}
    +
    +    def get_certificate(self, vault_base_url, certificate_name, certificate_version, cls=None, **kwargs):
    +        """Gets information about a certificate.
    +
    +        Gets information about a specific certificate. This operation requires
    +        the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate in the given
    +         vault.
    +        :type certificate_name: str
    +        :param certificate_version: The version of the certificate.
    +        :type certificate_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
    +            'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}
    +
    +    def update_certificate_operation(self, vault_base_url, certificate_name, cancellation_requested, cls=None, **kwargs):
    +        """Updates a certificate operation.
    +
    +        Updates a certificate creation operation that is already in progress.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param cancellation_requested: Indicates if cancellation was requested
    +         on the certificate operation.
    +        :type cancellation_requested: bool
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        certificate_operation = models.CertificateOperationUpdateParameter(cancellation_requested=cancellation_requested)
    +
    +        # Construct URL
    +        url = self.update_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(certificate_operation, 'CertificateOperationUpdateParameter')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    def get_certificate_operation(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Gets the creation operation of a certificate.
    +
    +        Gets the creation operation associated with a specified certificate.
    +        This operation requires the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    def delete_certificate_operation(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Deletes the creation operation for a specific certificate.
    +
    +        Deletes the creation operation for a specified certificate that is in
    +        the process of being created. The certificate is no longer created.
    +        This operation requires the certificates/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateOperation or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateOperation
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_certificate_operation.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateOperation', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}
    +
    +    def merge_certificate(self, vault_base_url, certificate_name, x509_certificates, certificate_attributes=None, tags=None, cls=None, **kwargs):
    +        """Merges a certificate or a certificate chain with a key pair existing on
    +        the server.
    +
    +        The MergeCertificate operation performs the merging of a certificate or
    +        certificate chain with a key pair currently available in the service.
    +        This operation requires the certificates/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param x509_certificates: The certificate or the certificate chain to
    +         merge.
    +        :type x509_certificates: list[bytearray]
    +        :param certificate_attributes: The attributes of the certificate
    +         (optional).
    +        :type certificate_attributes:
    +         ~azure.keyvault.v7_1.models.CertificateAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateMergeParameters(x509_certificates=x509_certificates, certificate_attributes=certificate_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.merge_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateMergeParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [201]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 201:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    merge_certificate.metadata = {'url': '/certificates/{certificate-name}/pending/merge'}
    +
    +    def backup_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Backs up the specified certificate.
    +
    +        Requests that a backup of the specified certificate be downloaded to
    +        the client. All versions of the certificate will be downloaded. This
    +        operation requires the certificates/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate.
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupCertificateResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupCertificateResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupCertificateResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_certificate.metadata = {'url': '/certificates/{certificate-name}/backup'}
    +
    +    def restore_certificate(self, vault_base_url, certificate_bundle_backup, cls=None, **kwargs):
    +        """Restores a backed up certificate to a vault.
    +
    +        Restores a backed up certificate, and all its versions, to a vault.
    +        This operation requires the certificates/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_bundle_backup: The backup blob associated with a
    +         certificate bundle.
    +        :type certificate_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.CertificateRestoreParameters(certificate_bundle_backup=certificate_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'CertificateRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_certificate.metadata = {'url': '/certificates/restore'}
    +
    +    def get_deleted_certificates(
    +            self, vault_base_url, maxresults=None, include_pending=None, cls=None, **kwargs):
    +        """Lists the deleted certificates in the specified vault currently
    +        available for recovery.
    +
    +        The GetDeletedCertificates operation retrieves the certificates in the
    +        current vault which are in a deleted state and ready for recovery or
    +        purging. This operation includes deletion-specific information. This
    +        operation requires the certificates/get/list permission. This operation
    +        can only be enabled on soft-delete enabled vaults.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :param include_pending: Specifies whether to include certificates
    +         which are not completely provisioned.
    +        :type include_pending: bool
    +        :return: An iterator like instance of DeletedCertificateItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedCertificateItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_certificates.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                if include_pending is not None:
    +                    query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedCertificateListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_certificates.metadata = {'url': '/deletedcertificates'}
    +
    +    def get_deleted_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Retrieves information about the specified deleted certificate.
    +
    +        The GetDeletedCertificate operation retrieves the deleted certificate
    +        information plus its attributes, such as retention interval, scheduled
    +        permanent deletion and the current deletion recovery level. This
    +        operation requires the certificates/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedCertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedCertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedCertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}
    +
    +    def purge_deleted_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Permanently deletes the specified deleted certificate.
    +
    +        The PurgeDeletedCertificate operation performs an irreversible deletion
    +        of the specified certificate, without possibility for recovery. The
    +        operation is not available if the recovery level does not specify
    +        'Purgeable'. This operation requires the certificate/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}
    +
    +    def recover_deleted_certificate(self, vault_base_url, certificate_name, cls=None, **kwargs):
    +        """Recovers the deleted certificate back to its current version under
    +        /certificates.
    +
    +        The RecoverDeletedCertificate operation performs the reversal of the
    +        Delete operation. The operation is applicable in vaults enabled for
    +        soft-delete, and must be issued during the retention interval
    +        (available in the deleted certificate's attributes). This operation
    +        requires the certificates/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param certificate_name: The name of the deleted certificate
    +        :type certificate_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: CertificateBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.CertificateBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_certificate.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('CertificateBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}/recover'}
    +
    +    def create_key(self, vault_base_url, key_name, kty, key_size=None, key_ops=None, key_attributes=None, tags=None, curve=None, cls=None, **kwargs):
    +        """Creates a new key, stores it, then returns key parameters and
    +        attributes to the client.
    +
    +        The create key operation can be used to create any key type in Azure
    +        Key Vault. If the named key already exists, Azure Key Vault creates a
    +        new version of the key. It requires the keys/create permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name for the new key. The system will generate
    +         the version name for the new key.
    +        :type key_name: str
    +        :param kty: The type of key to create. For valid values, see
    +         JsonWebKeyType. Possible values include: 'EC', 'EC-HSM', 'RSA',
    +         'RSA-HSM', 'oct'
    +        :type kty: str or ~azure.keyvault.v7_1.models.JsonWebKeyType
    +        :param key_size: The key size in bits. For example: 2048, 3072, or
    +         4096 for RSA.
    +        :type key_size: int
    +        :param key_ops:
    +        :type key_ops: list[str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +        :param key_attributes:
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param curve: Elliptic curve name. For valid values, see
    +         JsonWebKeyCurveName. Possible values include: 'P-256', 'P-384',
    +         'P-521', 'P-256K'
    +        :type curve: str or ~azure.keyvault.v7_1.models.JsonWebKeyCurveName
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyCreateParameters(kty=kty, key_size=key_size, key_ops=key_ops, key_attributes=key_attributes, tags=tags, curve=curve)
    +
    +        # Construct URL
    +        url = self.create_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    create_key.metadata = {'url': '/keys/{key-name}/create'}
    +
    +    def import_key(self, vault_base_url, key_name, key, hsm=None, key_attributes=None, tags=None, cls=None, **kwargs):
    +        """Imports an externally created key, stores it, and returns key
    +        parameters and attributes to the client.
    +
    +        The import key operation may be used to import any key type into an
    +        Azure Key Vault. If the named key already exists, Azure Key Vault
    +        creates a new version of the key. This operation requires the
    +        keys/import permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: Name for the imported key.
    +        :type key_name: str
    +        :param key: The Json web key
    +        :type key: ~azure.keyvault.v7_1.models.JsonWebKey
    +        :param hsm: Whether to import as a hardware key (HSM) or software key.
    +        :type hsm: bool
    +        :param key_attributes: The key management attributes.
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyImportParameters(hsm=hsm, key=key, key_attributes=key_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.import_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyImportParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    import_key.metadata = {'url': '/keys/{key-name}'}
    +
    +    def delete_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Deletes a key of any type from storage in Azure Key Vault.
    +
    +        The delete key operation cannot be used to remove individual versions
    +        of a key. This operation removes the cryptographic material associated
    +        with the key, which means the key is not usable for Sign/Verify,
    +        Wrap/Unwrap or Encrypt/Decrypt operations. This operation requires the
    +        keys/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key to delete.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedKeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedKeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedKeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_key.metadata = {'url': '/keys/{key-name}'}
    +
    +    def update_key(self, vault_base_url, key_name, key_version, key_ops=None, key_attributes=None, tags=None, cls=None, **kwargs):
    +        """The update key operation changes specified attributes of a stored key
    +        and can be applied to any key type and key version stored in Azure Key
    +        Vault.
    +
    +        In order to perform this operation, the key must already exist in the
    +        Key Vault. Note: The cryptographic material of a key itself cannot be
    +        changed. This operation requires the keys/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of key to update.
    +        :type key_name: str
    +        :param key_version: The version of the key to update.
    +        :type key_version: str
    +        :param key_ops: Json web key operations. For more information on
    +         possible key operations, see JsonWebKeyOperation.
    +        :type key_ops: list[str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyOperation]
    +        :param key_attributes:
    +        :type key_attributes: ~azure.keyvault.v7_1.models.KeyAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyUpdateParameters(key_ops=key_ops, key_attributes=key_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_key.metadata = {'url': '/keys/{key-name}/{key-version}'}
    +
    +    def get_key(self, vault_base_url, key_name, key_version, cls=None, **kwargs):
    +        """Gets the public part of a stored key.
    +
    +        The get key operation is applicable to all key types. If the requested
    +        key is symmetric, then no key material is released in the response.
    +        This operation requires the keys/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key to get.
    +        :type key_name: str
    +        :param key_version: Adding the version parameter retrieves a specific
    +         version of a key.
    +        :type key_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_key.metadata = {'url': '/keys/{key-name}/{key-version}'}
    +
    +    def get_key_versions(
    +            self, vault_base_url, key_name, maxresults=None, cls=None, **kwargs):
    +        """Retrieves a list of individual key versions with the same key name.
    +
    +        The full key identifier, attributes, and tags are provided in the
    +        response. This operation requires the keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of KeyItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.KeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_key_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'key-name': self._serialize.url("key_name", key_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'key-name': self._serialize.url("key_name", key_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('KeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_key_versions.metadata = {'url': '/keys/{key-name}/versions'}
    +
    +    def get_keys(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """List keys in the specified vault.
    +
    +        Retrieves a list of the keys in the Key Vault as JSON Web Key
    +        structures that contain the public part of a stored key. The LIST
    +        operation is applicable to all key types, however only the base key
    +        identifier, attributes, and tags are provided in the response.
    +        Individual versions of a key are not listed in the response. This
    +        operation requires the keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of KeyItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.KeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_keys.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('KeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_keys.metadata = {'url': '/keys'}
    +
    +    def backup_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Requests that a backup of the specified key be downloaded to the
    +        client.
    +
    +        The Key Backup operation exports a key from Azure Key Vault in a
    +        protected form. Note that this operation does NOT return key material
    +        in a form that can be used outside the Azure Key Vault system, the
    +        returned key material is either protected to a Azure Key Vault HSM or
    +        to Azure Key Vault itself. The intent of this operation is to allow a
    +        client to GENERATE a key in one Azure Key Vault instance, BACKUP the
    +        key, and then RESTORE it into another Azure Key Vault instance. The
    +        BACKUP operation may be used to export, in protected form, any key type
    +        from Azure Key Vault. Individual versions of a key cannot be backed up.
    +        BACKUP / RESTORE can be performed within geographical boundaries only;
    +        meaning that a BACKUP from one geographical area cannot be restored to
    +        another geographical area. For example, a backup from the US
    +        geographical area cannot be restored in an EU geographical area. This
    +        operation requires the key/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupKeyResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupKeyResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupKeyResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_key.metadata = {'url': '/keys/{key-name}/backup'}
    +
    +    def restore_key(self, vault_base_url, key_bundle_backup, cls=None, **kwargs):
    +        """Restores a backed up key to a vault.
    +
    +        Imports a previously backed up key into Azure Key Vault, restoring the
    +        key, its key identifier, attributes and access control policies. The
    +        RESTORE operation may be used to import a previously backed up key.
    +        Individual versions of a key cannot be restored. The key is restored in
    +        its entirety with the same key name as it had when it was backed up. If
    +        the key name is not available in the target Key Vault, the RESTORE
    +        operation will be rejected. While the key name is retained during
    +        restore, the final key identifier will change if the key is restored to
    +        a different vault. Restore will restore all versions and preserve
    +        version identifiers. The RESTORE operation is subject to security
    +        constraints: The target Key Vault must be owned by the same Microsoft
    +        Azure Subscription as the source Key Vault The user must have RESTORE
    +        permission in the target Key Vault. This operation requires the
    +        keys/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_bundle_backup: The backup blob associated with a key
    +         bundle.
    +        :type key_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyRestoreParameters(key_bundle_backup=key_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_key.metadata = {'url': '/keys/restore'}
    +
    +    def encrypt(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Encrypts an arbitrary sequence of bytes using an encryption key that is
    +        stored in a key vault.
    +
    +        The ENCRYPT operation encrypts an arbitrary sequence of bytes using an
    +        encryption key that is stored in Azure Key Vault. Note that the ENCRYPT
    +        operation only supports a single block of data, the size of which is
    +        dependent on the target key and the encryption algorithm to be used.
    +        The ENCRYPT operation is only strictly necessary for symmetric keys
    +        stored in Azure Key Vault since protection with an asymmetric key can
    +        be performed using public portion of the key. This operation is
    +        supported for asymmetric keys as a convenience for callers that have a
    +        key-reference but do not have access to the public key material. This
    +        operation requires the keys/encrypt permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.encrypt.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    encrypt.metadata = {'url': '/keys/{key-name}/{key-version}/encrypt'}
    +
    +    def decrypt(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Decrypts a single block of encrypted data.
    +
    +        The DECRYPT operation decrypts a well-formed block of ciphertext using
    +        the target encryption key and specified algorithm. This operation is
    +        the reverse of the ENCRYPT operation; only a single block of data may
    +        be decrypted, the size of this block is dependent on the target key and
    +        the algorithm to be used. The DECRYPT operation applies to asymmetric
    +        and symmetric keys stored in Azure Key Vault since it uses the private
    +        portion of the key. This operation requires the keys/decrypt
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.decrypt.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    decrypt.metadata = {'url': '/keys/{key-name}/{key-version}/decrypt'}
    +
    +    def sign(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Creates a signature from a digest using the specified key.
    +
    +        The SIGN operation is applicable to asymmetric and symmetric keys
    +        stored in Azure Key Vault since this operation uses the private portion
    +        of the key. This operation requires the keys/sign permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: The signing/verification algorithm identifier. For
    +         more information on possible algorithm types, see
    +         JsonWebKeySignatureAlgorithm. Possible values include: 'PS256',
    +         'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256',
    +         'ES384', 'ES512', 'ES256K'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeySignParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.sign.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeySignParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    sign.metadata = {'url': '/keys/{key-name}/{key-version}/sign'}
    +
    +    def verify(self, vault_base_url, key_name, key_version, algorithm, digest, signature, cls=None, **kwargs):
    +        """Verifies a signature using a specified key.
    +
    +        The VERIFY operation is applicable to symmetric keys stored in Azure
    +        Key Vault. VERIFY is not strictly necessary for asymmetric keys stored
    +        in Azure Key Vault since signature verification can be performed using
    +        the public portion of the key but this operation is supported as a
    +        convenience for callers that only have a key-reference and not the
    +        public portion of the key. This operation requires the keys/verify
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: The signing/verification algorithm. For more
    +         information on possible algorithm types, see
    +         JsonWebKeySignatureAlgorithm. Possible values include: 'PS256',
    +         'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSNULL', 'ES256',
    +         'ES384', 'ES512', 'ES256K'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeySignatureAlgorithm
    +        :param digest: The digest used for signing.
    +        :type digest: bytes
    +        :param signature: The signature to be verified.
    +        :type signature: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyVerifyResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyVerifyResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyVerifyParameters(algorithm=algorithm, digest=digest, signature=signature)
    +
    +        # Construct URL
    +        url = self.verify.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyVerifyParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyVerifyResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    verify.metadata = {'url': '/keys/{key-name}/{key-version}/verify'}
    +
    +    def wrap_key(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Wraps a symmetric key using a specified key.
    +
    +        The WRAP operation supports encryption of a symmetric key using a key
    +        encryption key that has previously been stored in an Azure Key Vault.
    +        The WRAP operation is only strictly necessary for symmetric keys stored
    +        in Azure Key Vault since protection with an asymmetric key can be
    +        performed using the public portion of the key. This operation is
    +        supported for asymmetric keys as a convenience for callers that have a
    +        key-reference but do not have access to the public key material. This
    +        operation requires the keys/wrapKey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.wrap_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    wrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/wrapkey'}
    +
    +    def unwrap_key(self, vault_base_url, key_name, key_version, algorithm, value, cls=None, **kwargs):
    +        """Unwraps a symmetric key using the specified key that was initially used
    +        for wrapping that key.
    +
    +        The UNWRAP operation supports decryption of a symmetric key using the
    +        target key encryption key. This operation is the reverse of the WRAP
    +        operation. The UNWRAP operation applies to asymmetric and symmetric
    +        keys stored in Azure Key Vault since it uses the private portion of the
    +        key. This operation requires the keys/unwrapKey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param key_version: The version of the key.
    +        :type key_version: str
    +        :param algorithm: algorithm identifier. Possible values include:
    +         'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
    +        :type algorithm: str or
    +         ~azure.keyvault.v7_1.models.JsonWebKeyEncryptionAlgorithm
    +        :param value:
    +        :type value: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyOperationResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyOperationResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value)
    +
    +        # Construct URL
    +        url = self.unwrap_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str'),
    +            'key-version': self._serialize.url("key_version", key_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyOperationResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    unwrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/unwrapkey'}
    +
    +    def get_deleted_keys(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """Lists the deleted keys in the specified vault.
    +
    +        Retrieves a list of the keys in the Key Vault as JSON Web Key
    +        structures that contain the public part of a deleted key. This
    +        operation includes deletion-specific information. The Get Deleted Keys
    +        operation is applicable for vaults enabled for soft-delete. While the
    +        operation can be invoked on any vault, it will return an error if
    +        invoked on a non soft-delete enabled vault. This operation requires the
    +        keys/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedKeyItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedKeyItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_keys.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedKeyListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_keys.metadata = {'url': '/deletedkeys'}
    +
    +    def get_deleted_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Gets the public part of a deleted key.
    +
    +        The Get Deleted Key operation is applicable for soft-delete enabled
    +        vaults. While the operation can be invoked on any vault, it will return
    +        an error if invoked on a non soft-delete enabled vault. This operation
    +        requires the keys/get permission. .
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedKeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedKeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedKeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}
    +
    +    def purge_deleted_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Permanently deletes the specified key.
    +
    +        The Purge Deleted Key operation is applicable for soft-delete enabled
    +        vaults. While the operation can be invoked on any vault, it will return
    +        an error if invoked on a non soft-delete enabled vault. This operation
    +        requires the keys/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the key
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}
    +
    +    def recover_deleted_key(self, vault_base_url, key_name, cls=None, **kwargs):
    +        """Recovers the deleted key to its latest version.
    +
    +        The Recover Deleted Key operation is applicable for deleted keys in
    +        soft-delete enabled vaults. It recovers the deleted key back to its
    +        latest version under /keys. An attempt to recover an non-deleted key
    +        will return an error. Consider this the inverse of the delete operation
    +        on soft-delete enabled vaults. This operation requires the keys/recover
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param key_name: The name of the deleted key.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: KeyBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.KeyBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'key-name': self._serialize.url("key_name", key_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('KeyBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_key.metadata = {'url': '/deletedkeys/{key-name}/recover'}
    +
    +    def set_secret(self, vault_base_url, secret_name, value, tags=None, content_type=None, secret_attributes=None, cls=None, **kwargs):
    +        """Sets a secret in a specified key vault.
    +
    +        The SET operation adds a secret to the Azure Key Vault. If the named
    +        secret already exists, Azure Key Vault creates a new version of that
    +        secret. This operation requires the secrets/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param value: The value of the secret.
    +        :type value: str
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param content_type: Type of the secret value such as a password.
    +        :type content_type: str
    +        :param secret_attributes: The secret management attributes.
    +        :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretSetParameters(value=value, tags=tags, content_type=content_type, secret_attributes=secret_attributes)
    +
    +        # Construct URL
    +        url = self.set_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str', pattern=r'^[0-9a-zA-Z-]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretSetParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_secret.metadata = {'url': '/secrets/{secret-name}'}
    +
    +    def delete_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Deletes a secret from a specified key vault.
    +
    +        The DELETE operation applies to any secret stored in Azure Key Vault.
    +        DELETE cannot be applied to an individual version of a secret. This
    +        operation requires the secrets/delete permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_secret.metadata = {'url': '/secrets/{secret-name}'}
    +
    +    def update_secret(self, vault_base_url, secret_name, secret_version, content_type=None, secret_attributes=None, tags=None, cls=None, **kwargs):
    +        """Updates the attributes associated with a specified secret in a given
    +        key vault.
    +
    +        The UPDATE operation changes specified attributes of an existing stored
    +        secret. Attributes that are not specified in the request are left
    +        unchanged. The value of a secret itself cannot be changed. This
    +        operation requires the secrets/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param secret_version: The version of the secret.
    +        :type secret_version: str
    +        :param content_type: Type of the secret value such as a password.
    +        :type content_type: str
    +        :param secret_attributes: The secret management attributes.
    +        :type secret_attributes: ~azure.keyvault.v7_1.models.SecretAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretUpdateParameters(content_type=content_type, secret_attributes=secret_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
    +            'secret-version': self._serialize.url("secret_version", secret_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}
    +
    +    def get_secret(self, vault_base_url, secret_name, secret_version, cls=None, **kwargs):
    +        """Get a specified secret from a given key vault.
    +
    +        The GET operation is applicable to any secret stored in Azure Key
    +        Vault. This operation requires the secrets/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param secret_version: The version of the secret.
    +        :type secret_version: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
    +            'secret-version': self._serialize.url("secret_version", secret_version, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}
    +
    +    def get_secrets(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """List secrets in a specified key vault.
    +
    +        The Get Secrets operation is applicable to the entire vault. However,
    +        only the base secret identifier and its attributes are provided in the
    +        response. Individual secret versions are not listed in the response.
    +        This operation requires the secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified, the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SecretItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.SecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_secrets.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('SecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_secrets.metadata = {'url': '/secrets'}
    +
    +    def get_secret_versions(
    +            self, vault_base_url, secret_name, maxresults=None, cls=None, **kwargs):
    +        """List all versions of the specified secret.
    +
    +        The full secret identifier and attributes are provided in the response.
    +        No values are returned for the secrets. This operations requires the
    +        secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified, the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SecretItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.SecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_secret_versions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('SecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_secret_versions.metadata = {'url': '/secrets/{secret-name}/versions'}
    +
    +    def get_deleted_secrets(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """Lists deleted secrets for the specified vault.
    +
    +        The Get Deleted Secrets operation returns the secrets that have been
    +        deleted for a vault enabled for soft-delete. This operation requires
    +        the secrets/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedSecretItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedSecretItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_secrets.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedSecretListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_secrets.metadata = {'url': '/deletedsecrets'}
    +
    +    def get_deleted_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Gets the specified deleted secret.
    +
    +        The Get Deleted Secret operation returns the specified deleted secret
    +        along with its attributes. This operation requires the secrets/get
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}
    +
    +    def purge_deleted_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Permanently deletes the specified secret.
    +
    +        The purge deleted secret operation removes the secret permanently,
    +        without the possibility of recovery. This operation can only be enabled
    +        on a soft-delete enabled vault. This operation requires the
    +        secrets/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}
    +
    +    def recover_deleted_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Recovers the deleted secret to the latest version.
    +
    +        Recovers the deleted secret in the specified vault. This operation can
    +        only be performed on a soft-delete enabled vault. This operation
    +        requires the secrets/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the deleted secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}/recover'}
    +
    +    def backup_secret(self, vault_base_url, secret_name, cls=None, **kwargs):
    +        """Backs up the specified secret.
    +
    +        Requests that a backup of the specified secret be downloaded to the
    +        client. All versions of the secret will be downloaded. This operation
    +        requires the secrets/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_name: The name of the secret.
    +        :type secret_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupSecretResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupSecretResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'secret-name': self._serialize.url("secret_name", secret_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupSecretResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_secret.metadata = {'url': '/secrets/{secret-name}/backup'}
    +
    +    def restore_secret(self, vault_base_url, secret_bundle_backup, cls=None, **kwargs):
    +        """Restores a backed up secret to a vault.
    +
    +        Restores a backed up secret, and all its versions, to a vault. This
    +        operation requires the secrets/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param secret_bundle_backup: The backup blob associated with a secret
    +         bundle.
    +        :type secret_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SecretBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SecretBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SecretRestoreParameters(secret_bundle_backup=secret_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_secret.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SecretRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SecretBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_secret.metadata = {'url': '/secrets/restore'}
    +
    +    def get_storage_accounts(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """List storage accounts managed by the specified key vault. This
    +        operation requires the storage/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of StorageAccountItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.StorageAccountItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_storage_accounts.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('StorageListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_storage_accounts.metadata = {'url': '/storage'}
    +
    +    def get_deleted_storage_accounts(
    +            self, vault_base_url, maxresults=None, cls=None, **kwargs):
    +        """Lists deleted storage accounts for the specified vault.
    +
    +        The Get Deleted Storage Accounts operation returns the storage accounts
    +        that have been deleted for a vault enabled for soft-delete. This
    +        operation requires the storage/list permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedStorageAccountItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedStorageAccountItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_storage_accounts.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedStorageListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_storage_accounts.metadata = {'url': '/deletedstorage'}
    +
    +    def get_deleted_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Gets the specified deleted storage account.
    +
    +        The Get Deleted Storage Account operation returns the specified deleted
    +        storage account along with its attributes. This operation requires the
    +        storage/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedStorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedStorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedStorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}
    +
    +    def purge_deleted_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Permanently deletes the specified storage account.
    +
    +        The purge deleted storage account operation removes the secret
    +        permanently, without the possibility of recovery. This operation can
    +        only be performed on a soft-delete enabled vault. This operation
    +        requires the storage/purge permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: None or the result of cls(response)
    +        :rtype: None
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.purge_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [204]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        if cls:
    +            response_headers = {}
    +            return cls(response, None, response_headers)
    +    purge_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}
    +
    +    def recover_deleted_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Recovers the deleted storage account.
    +
    +        Recovers the deleted storage account in the specified vault. This
    +        operation can only be performed on a soft-delete enabled vault. This
    +        operation requires the storage/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}/recover'}
    +
    +    def backup_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Backs up the specified storage account.
    +
    +        Requests that a backup of the specified storage account be downloaded
    +        to the client. This operation requires the storage/backup permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: BackupStorageResult or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.BackupStorageResult
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.backup_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('BackupStorageResult', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    backup_storage_account.metadata = {'url': '/storage/{storage-account-name}/backup'}
    +
    +    def restore_storage_account(self, vault_base_url, storage_bundle_backup, cls=None, **kwargs):
    +        """Restores a backed up storage account to a vault.
    +
    +        Restores a backed up storage account to a vault. This operation
    +        requires the storage/restore permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_bundle_backup: The backup blob associated with a
    +         storage account.
    +        :type storage_bundle_backup: bytes
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageRestoreParameters(storage_bundle_backup=storage_bundle_backup)
    +
    +        # Construct URL
    +        url = self.restore_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True)
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageRestoreParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    restore_storage_account.metadata = {'url': '/storage/restore'}
    +
    +    def delete_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Deletes a storage account. This operation requires the storage/delete
    +        permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedStorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedStorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedStorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    def get_storage_account(self, vault_base_url, storage_account_name, cls=None, **kwargs):
    +        """Gets information about a specified storage account. This operation
    +        requires the storage/get permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    def set_storage_account(self, vault_base_url, storage_account_name, resource_id, active_key_name, auto_regenerate_key, regeneration_period=None, storage_account_attributes=None, tags=None, cls=None, **kwargs):
    +        """Creates or updates a new storage account. This operation requires the
    +        storage/set permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param resource_id: Storage account resource id.
    +        :type resource_id: str
    +        :param active_key_name: Current active storage account key name.
    +        :type active_key_name: str
    +        :param auto_regenerate_key: whether keyvault should manage the storage
    +         account for the user.
    +        :type auto_regenerate_key: bool
    +        :param regeneration_period: The key regeneration time duration
    +         specified in ISO-8601 format.
    +        :type regeneration_period: str
    +        :param storage_account_attributes: The attributes of the storage
    +         account.
    +        :type storage_account_attributes:
    +         ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountCreateParameters(resource_id=resource_id, active_key_name=active_key_name, auto_regenerate_key=auto_regenerate_key, regeneration_period=regeneration_period, storage_account_attributes=storage_account_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.set_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    def update_storage_account(self, vault_base_url, storage_account_name, active_key_name=None, auto_regenerate_key=None, regeneration_period=None, storage_account_attributes=None, tags=None, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given storage
    +        account. This operation requires the storage/set/update permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param active_key_name: The current active storage account key name.
    +        :type active_key_name: str
    +        :param auto_regenerate_key: whether keyvault should manage the storage
    +         account for the user.
    +        :type auto_regenerate_key: bool
    +        :param regeneration_period: The key regeneration time duration
    +         specified in ISO-8601 format.
    +        :type regeneration_period: str
    +        :param storage_account_attributes: The attributes of the storage
    +         account.
    +        :type storage_account_attributes:
    +         ~azure.keyvault.v7_1.models.StorageAccountAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountUpdateParameters(active_key_name=active_key_name, auto_regenerate_key=auto_regenerate_key, regeneration_period=regeneration_period, storage_account_attributes=storage_account_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_storage_account.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_storage_account.metadata = {'url': '/storage/{storage-account-name}'}
    +
    +    def regenerate_storage_account_key(self, vault_base_url, storage_account_name, key_name, cls=None, **kwargs):
    +        """Regenerates the specified key value for the given storage account. This
    +        operation requires the storage/regeneratekey permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param key_name: The storage account key name.
    +        :type key_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: StorageBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.StorageBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.StorageAccountRegenerteKeyParameters(key_name=key_name)
    +
    +        # Construct URL
    +        url = self.regenerate_storage_account_key.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'StorageAccountRegenerteKeyParameters')
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('StorageBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    regenerate_storage_account_key.metadata = {'url': '/storage/{storage-account-name}/regeneratekey'}
    +
    +    def get_sas_definitions(
    +            self, vault_base_url, storage_account_name, maxresults=None, cls=None, **kwargs):
    +        """List storage SAS definitions for the given storage account. This
    +        operation requires the storage/listsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of SasDefinitionItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.SasDefinitionItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_sas_definitions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('SasDefinitionListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_sas_definitions.metadata = {'url': '/storage/{storage-account-name}/sas'}
    +
    +    def get_deleted_sas_definitions(
    +            self, vault_base_url, storage_account_name, maxresults=None, cls=None, **kwargs):
    +        """Lists deleted SAS definitions for the specified vault and storage
    +        account.
    +
    +        The Get Deleted Sas Definitions operation returns the SAS definitions
    +        that have been deleted for a vault enabled for soft-delete. This
    +        operation requires the storage/listsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param maxresults: Maximum number of results to return in a page. If
    +         not specified the service will return up to 25 results.
    +        :type maxresults: int
    +        :return: An iterator like instance of DeletedSasDefinitionItem
    +        :rtype:
    +         ~azure.core.paging.ItemPaged[~azure.keyvault.v7_1.models.DeletedSasDefinitionItem]
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        def prepare_request(next_link=None):
    +            query_parameters = {}
    +            if not next_link:
    +                # Construct URL
    +                url = self.get_deleted_sas_definitions.metadata['url']
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +                if maxresults is not None:
    +                    query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
    +                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +            else:
    +                url = next_link
    +                path_format_arguments = {
    +                    'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +                    'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +                }
    +                url = self._client.format_url(url, **path_format_arguments)
    +
    +            # Construct headers
    +            header_parameters = {}
    +            header_parameters['Accept'] = 'application/json'
    +            if self._config.generate_client_request_id:
    +                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +            # Construct and send request
    +            request = self._client.get(url, query_parameters, header_parameters)
    +            return request
    +
    +        def extract_data(response):
    +            deserialized = self._deserialize('DeletedSasDefinitionListResult', response)
    +            list_of_elem = deserialized.value
    +            if cls:
    +               list_of_elem = cls(list_of_elem)
    +            return deserialized.next_link, iter(list_of_elem)
    +
    +        def get_next(next_link=None):
    +            request = prepare_request(next_link)
    +
    +            pipeline_response = self._client._pipeline.run(request, **kwargs)
    +            response = pipeline_response.http_response
    +
    +            if response.status_code not in [200]:
    +                map_error(status_code=response.status_code, response=response, error_map=error_map)
    +                raise models.KeyVaultErrorException(response, self._deserialize)
    +            return response
    +
    +        # Deserialize response
    +        return ItemPaged(
    +            get_next, extract_data
    +        )
    +    get_deleted_sas_definitions.metadata = {'url': '/deletedstorage/{storage-account-name}/sas'}
    +
    +    def get_deleted_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, cls=None, **kwargs):
    +        """Gets the specified deleted sas definition.
    +
    +        The Get Deleted SAS Definition operation returns the specified deleted
    +        SAS definition along with its attributes. This operation requires the
    +        storage/getsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_deleted_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    def recover_deleted_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, cls=None, **kwargs):
    +        """Recovers the deleted SAS definition.
    +
    +        Recovers the deleted SAS definition for the specified storage account.
    +        This operation can only be performed on a soft-delete enabled vault.
    +        This operation requires the storage/recover permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.recover_deleted_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.post(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    recover_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}/recover'}
    +
    +    def delete_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, cls=None, **kwargs):
    +        """Deletes a SAS definition from a specified storage account. This
    +        operation requires the storage/deletesas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: DeletedSasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.DeletedSasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.delete_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.delete(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('DeletedSasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    delete_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    def get_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, cls=None, **kwargs):
    +        """Gets information about a SAS definition for the specified storage
    +        account. This operation requires the storage/getsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        # Construct URL
    +        url = self.get_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct and send request
    +        request = self._client.get(url, query_parameters, header_parameters)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    get_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    def set_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, template_uri, sas_type, validity_period, sas_definition_attributes=None, tags=None, cls=None, **kwargs):
    +        """Creates or updates a new SAS definition for the specified storage
    +        account. This operation requires the storage/setsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param template_uri: The SAS definition token template signed with an
    +         arbitrary key.  Tokens created according to the SAS definition will
    +         have the same properties as the template.
    +        :type template_uri: str
    +        :param sas_type: The type of SAS token the SAS definition will create.
    +         Possible values include: 'account', 'service'
    +        :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +        :param validity_period: The validity period of SAS tokens created
    +         according to the SAS definition.
    +        :type validity_period: str
    +        :param sas_definition_attributes: The attributes of the SAS
    +         definition.
    +        :type sas_definition_attributes:
    +         ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SasDefinitionCreateParameters(template_uri=template_uri, sas_type=sas_type, validity_period=validity_period, sas_definition_attributes=sas_definition_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.set_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SasDefinitionCreateParameters')
    +
    +        # Construct and send request
    +        request = self._client.put(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    set_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    +
    +    def update_sas_definition(self, vault_base_url, storage_account_name, sas_definition_name, template_uri=None, sas_type=None, validity_period=None, sas_definition_attributes=None, tags=None, cls=None, **kwargs):
    +        """Updates the specified attributes associated with the given SAS
    +        definition. This operation requires the storage/setsas permission.
    +
    +        :param vault_base_url: The vault name, for example
    +         https://myvault.vault.azure.net.
    +        :type vault_base_url: str
    +        :param storage_account_name: The name of the storage account.
    +        :type storage_account_name: str
    +        :param sas_definition_name: The name of the SAS definition.
    +        :type sas_definition_name: str
    +        :param template_uri: The SAS definition token template signed with an
    +         arbitrary key.  Tokens created according to the SAS definition will
    +         have the same properties as the template.
    +        :type template_uri: str
    +        :param sas_type: The type of SAS token the SAS definition will create.
    +         Possible values include: 'account', 'service'
    +        :type sas_type: str or ~azure.keyvault.v7_1.models.SasTokenType
    +        :param validity_period: The validity period of SAS tokens created
    +         according to the SAS definition.
    +        :type validity_period: str
    +        :param sas_definition_attributes: The attributes of the SAS
    +         definition.
    +        :type sas_definition_attributes:
    +         ~azure.keyvault.v7_1.models.SasDefinitionAttributes
    +        :param tags: Application specific metadata in the form of key-value
    +         pairs.
    +        :type tags: dict[str, str]
    +        :param callable cls: A custom type or function that will be passed the
    +         direct response
    +        :return: SasDefinitionBundle or the result of cls(response)
    +        :rtype: ~azure.keyvault.v7_1.models.SasDefinitionBundle
    +        :raises:
    +         :class:`KeyVaultErrorException`
    +        """
    +        error_map = kwargs.pop('error_map', None)
    +        parameters = models.SasDefinitionUpdateParameters(template_uri=template_uri, sas_type=sas_type, validity_period=validity_period, sas_definition_attributes=sas_definition_attributes, tags=tags)
    +
    +        # Construct URL
    +        url = self.update_sas_definition.metadata['url']
    +        path_format_arguments = {
    +            'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
    +            'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
    +            'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$')
    +        }
    +        url = self._client.format_url(url, **path_format_arguments)
    +
    +        # Construct parameters
    +        query_parameters = {}
    +        query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
    +
    +        # Construct headers
    +        header_parameters = {}
    +        header_parameters['Accept'] = 'application/json'
    +        header_parameters['Content-Type'] = 'application/json; charset=utf-8'
    +        if self._config.generate_client_request_id:
    +            header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    +
    +        # Construct body
    +        body_content = self._serialize.body(parameters, 'SasDefinitionUpdateParameters')
    +
    +        # Construct and send request
    +        request = self._client.patch(url, query_parameters, header_parameters, body_content)
    +        pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
    +        response = pipeline_response.http_response
    +
    +        if response.status_code not in [200]:
    +            map_error(status_code=response.status_code, response=response, error_map=error_map)
    +            raise models.KeyVaultErrorException(response, self._deserialize)
    +
    +        deserialized = None
    +        if response.status_code == 200:
    +            deserialized = self._deserialize('SasDefinitionBundle', response)
    +
    +        if cls:
    +            return cls(response, deserialized, None)
    +
    +        return deserialized
    +    update_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/version.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/version.py
    new file mode 100644
    index 000000000000..d92d63667368
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/_generated/v7_1_preview/version.py
    @@ -0,0 +1,13 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +VERSION = "7.1-preview"
    +
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/multi_api.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/multi_api.py
    index 8c8b343047fe..15cb1b2186e5 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/multi_api.py
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/multi_api.py
    @@ -3,29 +3,64 @@
     # Licensed under the MIT License.
     # ------------------------------------
     from collections import namedtuple
    +from enum import Enum
    +from typing import TYPE_CHECKING
     
    +from ._generated.v7_1_preview.version import VERSION as V7_1_PREVIEW_VERSION
     from ._generated.v7_0.version import VERSION as V7_0_VERSION
     from ._generated.v2016_10_01.version import VERSION as V2016_10_01_VERSION
     
    -SUPPORTED_VERSIONS = (V7_0_VERSION, V2016_10_01_VERSION)
    -DEFAULT_VERSION = V7_0_VERSION
    +if TYPE_CHECKING:
    +    from typing import Union
    +
    +
    +class ApiVersion(Enum):
    +    """Key Vault API versions supported by this package"""
    +
    +    #: this is the default version
    +    V7_1_preview = V7_1_PREVIEW_VERSION
    +    V7_0 = V7_0_VERSION
    +    V2016_10_01 = V2016_10_01_VERSION
    +
    +
    +DEFAULT_VERSION = ApiVersion.V7_1_preview
     
     GeneratedApi = namedtuple("GeneratedApi", ("models", "client_cls", "config_cls"))
     
     
     def load_generated_api(api_version, aio=False):
    -    # type: (str, bool) -> GeneratedApi
    +    # type: (Union[ApiVersion, str], bool) -> GeneratedApi
         api_version = api_version or DEFAULT_VERSION
    -    if api_version == V7_0_VERSION:
    -        from ._generated.v7_0 import models
    +    try:
    +        # api_version could be a string; map it to an instance of ApiVersion
    +        # (this is a no-op if it's already an instance of ApiVersion)
    +        api_version = ApiVersion(api_version)
    +    except ValueError:
    +        # api_version is unknown to ApiVersion
    +        raise NotImplementedError(
    +            "This package doesn't support API version '{}'. ".format(api_version)
    +            + "Supported versions: {}".format(", ".join(v.value for v in ApiVersion))
    +        )
    +
    +    if api_version == ApiVersion.V7_1_preview:
    +        from ._generated.v7_1_preview import models
    +
    +        if aio:
    +            from ._generated.v7_1_preview.aio import KeyVaultClient
    +            from ._generated.v7_1_preview.aio._configuration_async import KeyVaultClientConfiguration
    +        else:
    +            from ._generated.v7_1_preview import KeyVaultClient  # type: ignore
    +            from ._generated.v7_1_preview._configuration import KeyVaultClientConfiguration  # type: ignore
    +    elif api_version == ApiVersion.V7_0:
    +        from ._generated.v7_0 import models  # type: ignore
     
             if aio:
    -            from ._generated.v7_0.aio import KeyVaultClient
    -            from ._generated.v7_0.aio._configuration_async import KeyVaultClientConfiguration
    +            from ._generated.v7_0.aio import KeyVaultClient  # type: ignore
    +            from ._generated.v7_0.aio._configuration_async import KeyVaultClientConfiguration  # type: ignore
             else:
                 from ._generated.v7_0 import KeyVaultClient  # type: ignore
                 from ._generated.v7_0._configuration import KeyVaultClientConfiguration  # type: ignore
    -    elif api_version == V2016_10_01_VERSION:
    +    elif api_version == ApiVersion.V2016_10_01:
             from ._generated.v2016_10_01 import models  # type: ignore
     
             if aio:
    @@ -34,10 +69,5 @@ def load_generated_api(api_version, aio=False):
             else:
                 from ._generated.v2016_10_01 import KeyVaultClient  # type: ignore
                 from ._generated.v2016_10_01._configuration import KeyVaultClientConfiguration  # type: ignore
    -    else:
    -        raise NotImplementedError(
    -            "This package doesn't support API version '{}'. ".format(api_version)
    -            + "Supported versions: {}".format(", ".join(SUPPORTED_VERSIONS))
    -        )
     
         return GeneratedApi(models=models, client_cls=KeyVaultClient, config_cls=KeyVaultClientConfiguration)
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_version.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_version.py
    index f16e7f347a3e..669c806c6fdb 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_version.py
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_version.py
    @@ -3,4 +3,4 @@
     # Licensed under the MIT License.
     # ------------------------------------
     
    -VERSION = "4.1.0"
    +VERSION = "4.2.0b2"
    diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/aio/_client.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/aio/_client.py
    index fb0f17e424c2..ab042a6ff596 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/aio/_client.py
    +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/aio/_client.py
    @@ -20,7 +20,8 @@ class SecretClient(AsyncKeyVaultClientBase):
         :param str vault_url: URL of the vault the client will access
         :param credential: An object which can provide an access token for the vault, such as a credential from
             :mod:`azure.identity.aio`
    -    :keyword str api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :keyword api_version: version of the Key Vault API to use. Defaults to the most recent.
    +    :paramtype api_version: ~azure.keyvault.secrets.ApiVersion
         :keyword transport: transport to use. Defaults to
          :class:`~azure.core.pipeline.transport.AioHttpTransport`.
         :paramtype transport: ~azure.core.pipeline.transport.AsyncHttpTransport
    diff --git a/sdk/keyvault/azure-keyvault-secrets/setup.py b/sdk/keyvault/azure-keyvault-secrets/setup.py
    index 6eabf6bf8874..4bdd3c4111ee 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/setup.py
    +++ b/sdk/keyvault/azure-keyvault-secrets/setup.py
    @@ -58,7 +58,7 @@
         author_email="azurekeyvault@microsoft.com",
         url="https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-keyvault-secrets",
         classifiers=[
    -        "Development Status :: 5 - Production/Stable",
    +        "Development Status :: 4 - Beta",
             "Programming Language :: Python",
             "Programming Language :: Python :: 2",
             "Programming Language :: Python :: 2.7",
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secret_crud_operations.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secret_crud_operations.yaml
    index bc4d186aaacf..a4230f2eccf4 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secret_crud_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secret_crud_operations.yaml
    @@ -2,595 +2,1191 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "secret-value", "attributes": {"exp": 2527401600}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['60']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '60'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/3e873e2f0cf040bd95bd89406949d400","attributes":{"enabled":true,"exp":2527401600,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['262']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/af0fa41c4b404e809a3f904842358d99","attributes":{"enabled":true,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '262'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/3e873e2f0cf040bd95bd89406949d400","attributes":{"enabled":true,"exp":2527401600,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['262']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/af0fa41c4b404e809a3f904842358d99","attributes":{"enabled":true,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '262'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/3e873e2f0cf040bd95bd89406949d400?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/af0fa41c4b404e809a3f904842358d99?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/3e873e2f0cf040bd95bd89406949d400","attributes":{"enabled":true,"exp":2527401600,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['262']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/af0fa41c4b404e809a3f904842358d99","attributes":{"enabled":true,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '262'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"contentType": "text/plain", "tags": {"foo": "updated tag"}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['61']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '61'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/secret-name/3e873e2f0cf040bd95bd89406949d400","attributes":{"enabled":true,"exp":2527401600,"created":1575676622,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    -        tag"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['295']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/secret-name/af0fa41c4b404e809a3f904842358d99","attributes":{"enabled":true,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '295'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1575676623,"scheduledPurgeDate":1583452623,"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/secret-name/3e873e2f0cf040bd95bd89406949d400","attributes":{"enabled":true,"exp":2527401600,"created":1575676622,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    -        tag"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['443']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1583449592,"scheduledPurgeDate":1591225592,"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/secret-name/af0fa41c4b404e809a3f904842358d99","attributes":{"enabled":true,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '443'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:15 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:17 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:19 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:21 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:27 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:29 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1575676623,"scheduledPurgeDate":1583452623,"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/secret-name/3e873e2f0cf040bd95bd89406949d400","attributes":{"enabled":true,"exp":2527401600,"created":1575676622,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    -        tag"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['443']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:31 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1583449592,"scheduledPurgeDate":1591225592,"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/secret-name/af0fa41c4b404e809a3f904842358d99","attributes":{"enabled":true,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '443'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secret_list_operations.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secret_list_operations.yaml
    index 1b2a96e26b99..2d285741df9b 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secret_list_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secret_list_operations.yaml
    @@ -2,290 +2,517 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key0?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "value0"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key0?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/key0/78d84e9d784a47ddb1ee24c4ecb70771","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}}'}
    +    body:
    +      string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/key0/e83666d43ba944b79a79c91702af1672","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value1"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key1?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/key1/5a92ee48cabb4b37b3ea263d3717cd2f","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}}'}
    +    body:
    +      string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/key1/e487f23533434906884e29909eb4c0f9","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value2"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key2?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/key2/39b989a71ecf4c52935c0c0166f9ed7e","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}}'}
    +    body:
    +      string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/key2/79b38cbec80d4dfcb1dfc9aae02d6827","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value3"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key3?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/key3/e0a4c64c4f0c4ec4a8a69c3946699f5e","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}}'}
    +    body:
    +      string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/key3/699587612e6e4d07bccffeff6b6930c1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value4"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key4?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/key4/5ee7244b9fad47c1a0375da370a89704","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}}'}
    +    body:
    +      string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/key4/70ac844fc042485caf660e256c9fb3bc","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value5"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key5?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/key5/9d730d683f4b46e2ba3ff5799ab35b2e","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    +    body:
    +      string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/key5/172b19c564c54c2bad458411bc8cf4fd","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value6"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key6?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/key6/d0d205bc60384fb7b125db3cd11e954a","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    +    body:
    +      string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/key6/394c07f5a9cb46d8b23c6d300d6ed17f","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['232']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '232'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/key0","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key1","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key2","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key3","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key4","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key5","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key6","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'}
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/key0","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key3","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key5","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1308']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1308'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[],"nextLink":null}'}
    +    body:
    +      string: '{"value":[],"nextLink":null}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['28']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '28'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secrets_backup_restore.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secrets_backup_restore.yaml
    index e0757acd5c63..51e8ae90271b 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secrets_backup_restore.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secrets_backup_restore.yaml
    @@ -2,147 +2,261 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "secret-value"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['25']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '25'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/cfc6bd2de6fd40e390fd7ec8115b880a","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/eb45de46bd95446c8a72681cb2ea2e6b","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['233']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '233'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/backup?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/backup?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmhsWkhqeTJfVGRtc2ZsR0NNUFN3dVVCbk9sSlR4cGRaTHJFZTRfSlAzdHQ2SmFPZTRqUU81a1duNFBuNVVUSFdxN1ZTdFJMczgyRURpcVR2NS0zbkVZVEVLd2ZValE3VFJRQlNqNFdiQUVSTndEWE15N3d5aGlWOVkxaHlPTlVPZHR6MEdfcDdSMUxES2ZDaHYxaU5ITzJHRmVsQ09jSFRjakdNMmJmMDc4cVoxbVhIUGNmZXlXLTA2b2VHcDlPdjFXdGd5R0ViUVpLbnVNa0ctQ2lVQmtxUENPdXdrLW4tU09RcnFEUFkxT21vX29wLU56a1BiZ3ZxOEk5LU5rZ0JBaGJoMW5RemVHY3JrXzRmbWYxYmU4R0tLUFF4R3ljREdpT29mODVFalNTME83V0xWd3M0MFUtZHlNNTNfS1RBMHlkeER1Qkl4YVdXdkRYWV85a0NYQS5FQ044eFBxSTI5NGVISy03bjVJUlJ3LlVwRGNiR2VVMUxXbVhPemRkMnMteUVUQ244bVlMNmxfXzliQ2RNM0UzLW1XZFhWN0pVS2JXNThlMjl1UnRpcnV2bTlmbFB2bTk1dEZPbkM1RTJkc1dfWkllUHNwWFk2RTgtUjFXVE4yaUpESW9HVjh1cnVEYV82NzFFdjRITjlhb29GNWxGVnUzNTdsc1FoMlZZdnRjV1ItY3FBTnJtenotdS1TSUpIdHBIeG8wRkVTS04wOTdEdnNmWjlsaVNUaWloVmFiZXI2UFY5U2ZnZjNGb3dma0xLWjhZdkFNUjlUTHJKTUVpc1VXcTZKSTRyLUlrN1Y3eXdVbXBsMDZQQVVHNjlZN1RBa0RNTHZJZXcxaTQxbTRvc1FESmdYRUVDajRROFBQMzF6ZFFibFpUaVpVeUJvYVV5NVMxZEdqVmpUWW92VlhRMGdzbk91dTk1d3BPWS13TVh4VUVVeEY5MlhLTGZXT0NQX1JvRVdXQUNLXzgtQWZMeGFNeS0zOXB4TFV0WFB1b2M5ME1POHBzVmFBU2gxY2hyRVNlN182cXQxdUYyaGYyY2MyZVJROTNOSDd5WHdNWV9FODlVTktFV20yVzlOeFY5T21Ia0owemFwdFczV1ZTUEJ2OXdodkpmcHc3eGN0ZzhtTi1hdGU2SkRsaFZoRUtTQ0VpLW9YZmwwYUp0N0xuaDI5WnZNUjFtN2hXXzE4MklHaG5vWk44YXUwSjNrWWFoQm9sRnd3YUo4NHFsR1paVE5NTkUyT0FJRTBSZFRCQ183OWRkM2lzRHpBR1dVSTIweWtpSUFJUU1RSlZGeUNFYUhYR1gyMl9HMlBXOWxmdzRLWEdtR3NmTUYzaE1ZSFpSMGpIWlBpZ3lCNVB1aVZLUndvLUtrWVRwRkMyYWFpaWp1ZGZ5Yk9aM1ZSdV9uWXBfNzRHZnRkTkpUVGF6Y3FfM0paYXFIblhSRUFhLWNHLTBJT3p4QlhvZjR0M1hwWXlqSEppbHB2clJCeGpsNTI5MF9Mb3RtVFdEbEVWNkVGQmdnMTBrM0pSTlFnZVdNYjI4RE0xZzJBYTZXMW9VLVloSjRqTUw4VWpOYjB4VFg4RHNwcG82ZGZqVjY5WVh0X0I5SGZrSTBSYVlWTFFvR3B1YVJaTjVEVUlEYWRLMEhwTENXTHlnU1U5dTBscjZ4UDdXTVY3VklRVUd3Mm1jemtHUlN0Mzl3a0xnbFRWd0VzeFVJOEUxbjZxLXVCa2ktejJ4X1lybF90V2FBMk9Qakl2NUx1ajZ2ekpZQUJqTW5LdG5VdkhNR3BPcWZjMHRRNVcweDFscThtVDBkT0dfanRlaVptNmxfT2J2dUFmSFNvNHdXRElxZ1NidGtfYm1md1picGJTaTVzYl9XTnA5QUp5Vi1Hd3hzb19SdkhfcW1yTGl5d3AweGpUdXFHNW9fQUdHQUtiMUlZTDhONEs5d3hPNW5ocnlJR0ZfRXBiZFFuMjJHazg4bEt4VFlfRExaSDNZbDNObmhIQjFOZVlpTkpqMUZLcFF4bDhZQlV3QUxrd2pMWWxhLW56a0o3OGY2N1dwdDdWSlJJZVA1QkRFb1BEX0VvNm5nSi1pN3ZBZWItTklNbHBWT0lNZzJQZndMaUFycmpjRVQ0TXpMeDNOWHhNZEdHSzZ0aUZxa2Vac29WdEtDT1hQb1NSLWxid0FkZEZ2cTdBMWtraW5nZ2RNQWR6Ui11TW9BdGtIU0VFOVdyNDZwQjZUc0dOT0d4M0VUMTZkNlItZHNRc1lfZ3dpVjktQ3I1NUdPMWloMXpvaExWM0gtME5Oa2RwUkVmZ2pNZGdhNVJ4VGliVjVzY1hSTmNRYUF6NS0wOURqYkdSZXB0YTQ0WEdzQzAyM1l2c2ZOajVsTExqVVlfYjMwUDd1WERydUx3ZThudzdaT2hJMUtUaHFZYkNwZnFlVzN1QUdTZ1E5WjJnNGowWnRxQVh0VlRqVjVXNmxLUVdtUlVoUnJNUHZMX2NwVUkzRndBUG9JRC1pY3pXcjd1TG1YR3dUYTJlVldqWkxHVnJVU24wbW5ZNllBb3FLMEhMaUlwdzY1Ulo4dFQ1a01lMlBySkxHcE9ONjlzcDY0Q1ExZDg3UFFaRHk3TVotSlJ4LWRjUWFMSDVuMGFpY3JHb3Fvd0RWNFRWc0NyWUJPdzFxX3l6S09USkNqWTc4WXMtbUl2emNFSzFraklfTm9JSzRVU3FMT0dzOV9SY18yNUpiY1JVS1JRQ29xeTRSSmJUSGdIdTZaUmFyTFQxRDdVRWI1V05RNUgxU1Y5cHNwLTI2RVl2S1VGX1BBNkNsSGlCY1B4VGNUT2Q4d1VxRXNnTTRhel9ENUdQaHZvRkpCMzVRNzJXcHFRMkh5ZXNyY2dwVTh2dkVzd0RXRFVKTktaRzNrbk05TFlyaDNJbHpXUHo5LURyM3NleVgtNno0UWhKNUFaRDlRZ2trd1d3TW1tZlRrOHlyNUl1UUg2WGhheW5iZzAyUk0xOUtuRXBqazh2RC1Kcy1EUzdBdjczTFVYbmZkR0dBeWdGUzNSOERoTDUwS3BjckViVnU3eUJaR0FKR2pxUHJCdkRGYnRxNzAyMllFRHE5OUltX0RYU1E4c1dCOF9xczZtQmdOejNrQnJ3MGFQM1lVXzAtZEt1S1dSWEZUQkp0VjVadEtiNk1WUU16QVFwblFZaUZWdnJseFFfSUhDMXJIM1IzNVJCTk9uRUZJMDVNaEhYY2tsRGdKdTg0cVlYb1duamx3WWhVQ2hGNTkyNmZvSUZVcWJJaVlLSTIzT0FaWVhXbUZ2SjNIYUs4Q0NOZm14QkxqbGF3OG53Mkhhekx2UERybUs0RTctc0pabGpSLXJFajNYQkcxQ2dNd09LeU9LdnZRUm5QS3YxdF9HbW4wWEpxS2g2ak1CTnA3SDRIYjZBelJVYXZFVnVWREN2dFlKRmY0VUxNZnhreEtuMlloMUU5NUkzUFU2MG0wR3BfdW5ORENRcUVkQTdRWU1GZVh1Q2hmLTMwMkhBZHc2dnRpVDRZQXdCVTkxbUdQc0xwTXk0a1JfaVVONWNTNGhjcEJmb3F4QURJbkdvQkRCWFlQdjl4dkJUR1o1eHFibW1DZF9XRHFsM1lhdU82R1djSC1FN1g1R3BIa01LZmVMd291ZG16OXRXVkxLXzhDVzl2ZHoxRWNHaGxHOTAxTmhKTTVFc0gybzE1MDJjMjlFbkVtd0I0ZkpOQnJ0Q2psUDNvWjgxSnQwd0g4UE50OWpEb3YzVVdSYm83Tml6ZXlPUkt2SllJUVl3U3hEMzdONlpZMmZnXy1WYk9PSnA2VmtiOFMwNkFXQ3djZTBETmV1QVEtR2ZubjFPZ1RpbUY2eUp0NmloVnFOY202SnBqelZMbGhBb2JFRWhwbUt5ajl5SGRQeXM2dXd1WDFWc0U0YWZMdjljdW5zWk5GT0xKTVVDbXJzY2tidnc1WUxuZDJ5X1NXVF9ONWN0Z2kxT1IxVFBZTXZra0RZTTNlYnlPQUZXOHBqN1A3NTdlM2xNUVQ5UFpxUWh1OEViZmk3SExiT2tTSkNwQ1ZxdVc0bmw2WVAtZWoxV2VCSW96REhGNXJMdUlneFJNWlk5bEg2S05aSjNkUnp4T2Z0dDFhREJfa2RIYUZfNWFWQnRpZ3hvQ3IyUFJ0QzlsWE5sdmtQeWxNQWJFeFVrMUtRNGZhRjhLRzlxZ19UdlJIc2R6Q25IQ2dDbDVDdVBQZno2UlhybVo3bnpwSjdlOTRNZkFENGRwZmtndTNacTNXLXNnMjJLYTNzTzBWbVhjc2hZOXU2WUU1MkNXWlp3WmhfTGp2MGp0cktxMW5DVXp0Vk1MblBrM3VFNTU5d1JzSUZPLXdwR01zYmpVQXFFVGdNak1EajNKQ24yOTNNczAyTWJfdk1Wdi1qNk1qSW5nWVNlUFRCdDFQVDdRTURscG5KUFNMY2RyYy1oZWIydzdDaDNFRkJsamkzOG5WQ3gxcDAwc0l1NHdZb3dMM1Z2RDZ1aFYxLXdOOHZxNUhYUlozX085UzIzb1k3TVg3V3V2bUZEaU5HWFVEUmFFdWpUaTI4c2wzbVl1eEVmblYyQWM4aF9qdXNKaUVUQjJDc3B0UmhPdzhVaTg2bVk5dENPajNoSlVaYUdTc3VkRWlmQkpUX292UGI5YUFqdzNRVXFTdXY5dVBuaHdKZ3VmOG91WWF4SXo0bFR5dVRGekUtVDJJQVloUWFuVDFoWVVuOVhoQ2Fuemo0bkNHLUtld3N5MWI1cTJzeDJxYnYzR2tnX0xLNVFlb2hiMUoyMlFTX2p6Sy1YaTAxSWF2Y1RfT0NXMzBySml6YWF3amtlTzFNM080VGJweFUwY3o1V01RVXdtRXlrQ0N4WUIxUmFwSG1jSjc2MXhsSW1wckRjYzVfNmtzb0hoN0dKN0M4QmVKSkttWmRlRDZlcVZ5YnVaU3dXc0VfSm1la2o5WGNrTkhFNHg4VU44YlNzOTQ5d2x5X2pGemFiLVk5X095dUM4d0UxMzJLLXdmaHduZms4T1RTZGQ0TEw3S0hoTEttOUdPUjF3Z3JpeFJrVW1adW85U2NGcjNKM1dSemxxNTFrMkVIb2NFVEdFbVhIQ2VYR3B6T1ZsalQxRmVDRER1TVQtV1ZOcWpmVXpDeWo2dGItY2NWQ1pKSk5RUGVqTnBDNE9INVhsMG1FUmpFZjdGRVp1YTN3LmxQQW00REhXSFJpeTdZMUlTZlk3a0E"}'}
    +    body:
    +      string: '{"value":"KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLlU4cHNmZEt1TF9NSmdkLVBPaV9xTjV5QkxpajNOeU12QTdobnpTd1VPd3g0djZrblNBZG56RFpTcnVaRm9EeHB0QXBSMG9PVExIQmxtV1VTS29yaWE3S3U5OXhyWW5kczFHdzJqOTVHc2twaWk3RmtVSUsza2hlSXpGN1B5U18ySUlVcjhvamdwLTY1bloybERlRTdlOFA3Y0pZSlpTeDBjdjhVaU1yNFJOUzc1REtoaUVaallpWndDSmY3ZDhBNDRWMGxOZVBLYzZiOEFFNXFNQTBwa0V2YXdYaDJHUWwyYmQtcFRrNUFyN0FOZnFJc3gxWGdvWUstOVhNc0JvcS1uMksyTnZ0aDZVdjRrenhYYzZBOUc5cWMzQ3U2QmRzcWNFdUVsdFFMTURKSDVyZnJXdDlCSTRXUGhzU0lKNXBNS1dOSzEtSkw0dmtJZGN5VFpOaWZtQS5rLXhKTGVfcmNWTmxsb20xRkNqRlV3LnJTV2xkc0VSZTV6WFRBdWZwN21fMmdvZ0Q4bUlsd0ZTVlAyb3RyQU1QMlliX2VvNDJ0SWVadUphUEFZQk5VWnhoWW5POGR0WU9TRWpZbXZnaDBZdE5raUl2N1Rtci1maEJXb1BHQVkxbV9rQzl6Nl91Ty1WLU5VWGFESU9obVh4eC1kRFhEaEQ1RGpnVHkyVDdSZDhkbTJEVS13OEVfNXdYQzVOekVybUw3ZHh5SGNqZjlfckxfcjNXZHA5eFRlM21QcDREOFhzeEFYSnRQYk5KeHFuMTVMbVFBaE9YbUVGaHJUVzl4MHJJVTVscUc4VVF6MEJZUFNNc3EwQUdYR2x1RzBiODUtaWxPR3pweFhpdHNJeGdKX0VpTlhQUVpLS29IcUV1cEZvbFpsRGszei1FTHllM05FRGFuNTFMYWtKZ3g1ZWl0QVVGUDZJOTlpcWx2ZHlBUnZNRGMyVzlrTkNpdXNUdVFYcnNHOGV4YWlramtSQmlFTWNlMjU1dXJCb3U3bzlTb2hDOWpNcmRGZGk3SHYzVDRjeXFWSS1MRXkyUEZoQXFtaXZidmI5Z3ZidlhEVnpwN3JsczRfTkRSTklyVlpXSGFyRVh3eU9XVUtES2JXZmNWcS1vLVRYUEo2U1AtYzltWEhsTmQ5elRVUEtKMXpkRHdCeTlSYzFuc1o1d0tLQlpSMEd3RU9nUXFWbXhKUVFuN0dZRmV4UGw5RTlYSEQxR3ZOZmNzX0JVSWx1VlR5cWQ3TzVCQW4xYi11QlhjU09mcThZOG5KODVHcnZQZWdZckxvZy1hbF9ITWtVc1NQN3RGN1VnSjBnc3hzM2o2U3A2SnJmdzFKUHBnam96Um56Vzg1d1IzNkEzaVdULWkwSTFLSE1HUF9KeWRCZ3V2azNUQWlTTHBzM0diX2haVmRjUk1Vb3AxZHlHVmNyMU9ITHEycUxQNE15NzVMR05hbUEwZ3E4Tk85Vm9IWW84WjZKTWYydkdiV0RRbW9ZX05Pd3hpNkEzX3FvbmNDTnVwM3VmR0h0YjVkZ3M3ZkpvMGlwY2ZpLVhCTTMzeEFHcm1ldzBCRUMzazBwWVF4T3I2TTBOYWk2ZUx0QVVVb3lhYzl3bk1CM2tORm5aWkJTNG05eUxpMktwa0h4ay1EMmhld3F6SE5OcENBb2J5MmdvWTFBcGRrTE5TVGtzbVd0ck94SlZpS3l5UVVENjFHclVOS09TbjVZbm1wRmJTeTJwTUlSbGNiMHZPcHgzMVJUM2F3dHZ5b3p6NzhXYzVQeDR4aUtBR1J1MGo0UGhpZlpsR19UbTU2UUJxcVRoWU5LdFBOYXlFMDNaeHJFdTJSQ3RtTGVxV0s2dzFmeEoyRkxpUWREa2djWURsVlIzQWNHb29mcVNSaS1UZDRhMFNFZTFHZVl6QWlBazh1SmU0V2JkdkwzMHU4T3lyRW45dHhjMEZwTVBRTmNSeHEtYVZwYjFVVEJGRUNNRWtMQ2hVdGgzeUZSVkoteFJicU84YjhwMHJRVlJSU3YtZlFoREJManF6TkVDSFFjYTJjT1liUEFDYTZQREY4SWdBeWstU1hwdVllNjZSS2RrYmtZVkItazV6dnBoSzRxdUhfNU9XZUkyNndrX1F4emlQOEQxam5yUzE1MVBnN3E1UmFzeGphQjFlMFpaZGhXX1cxOThPZnh5S3BJQ1ZubG13em95YnVtYl95Y3pjNk1iMW03cjVqalBjQ0pobEt0TWtMM3o0Y1pPcTdwV3l0LThxWUR6dnNuZWhIRXZHdHNabnJBeTVhTjZqbDY3eC1LSXlOUEhFWTBqUUg0bjNDVXdLbFRfLWFIZUlzempwYkt0Ry1OcE1QYlNjdHh2V2xzeWRDTFdOUmx1LThhd0VoZGVxZlc1TzFYWHVLZkZqakpUYVhVbF8xY1hwY01BTk5nVWRvODEyWXQ0X2dQVzV2RElhczMtWi10azVpaUo1UDlwRUszclNBNDlfakxOT3FGZ09vSUJuTXdZZl9xcVdVOFhIa3Q1bG1nTGpaWmROVWZGWGVZeUQ2dEJIamJRaGpnOTRGYXdlV1VFVnlzSFZMakgwcC1Mdk1YaWlwWE1wXzhsZkJiQmFKTG9Zd19NTUxzU2dWZktKZzhTVEFTNWYxR2hyT29uVk1mb0pfQmg5MEkySHBCZGtZUnUwYVk5Szg2U3pVSUxvLUxKNUxIZEtHRVNrRVFJQnB3MXdDTl9nNlVHSjcwRHNtR3R3LXZRQ3g0SzZvdDl6VzllZ2h1VVdiZkR3SkgxT0o5cFBEczNWV1FxeldCSnIxczJmMVhZOWFNNmdnck5hMC1qTTJFTEpQTVJJWmZtYmZhV2VlY0RELU00U3hIYWY3UVpra3VYempWOHV0cGxDNFNPY3FPNE83cEtxc0tyUHRpajl3dEhmYXpKbUVtWWUyYlpnTXZHeS1OR1hOVTVtNHRVREtsZGJXUy01WDJZUHEzX29ZcDR4X0VuMHhwbndxZHVuOE44ZFJjTDR0S0k5ekE2N1BSLWZ3b29mUjVqZHBVYlE1VmlDR0luMUZsUWFJRlpLd1VMTkRLakZBVVVHZGlwT2dwdXNmcDBLc2RYaWxXMzNLQWtCckFRaGdLdmRQTllSNmcySFFKd2xfeUYxb1ZpUmdPeW5fWXhEY2JPQ2QwSElCdEMwakVWb3lLYkdaLUVSNFYtYTRpVFFMMTFSWGl2U2xhOXFsVGl5dUN2dmxLZ2txTlg2NGJhbGFpcDVCQ0tLV21YV2VmRmJ5SHlKNlRLMzNNX3hUOTFqOXJmNTVTcVZVSzlVY01PSVkwZUR3Zk01VzNaNTdnU3R4S3pjbUZYSklCNkstT1hzNEctVDJUbExpeUxYQllKTUIwSmhwcHJTWnJJTDlqbk5TaUtJTFU2bl90aDQ5a0VBcnotbElhaXpyMTdKY1p1WnZLSjg5UlNKUHRIOTlDSW5WV2JjMW4xeE8wTXZBbTFMY0k2ZUtLdHhpQ1A1UmtiVm5NbGFMb1dRMmloRERzdzU5eFp6eVJ5Rm1zc2hNZnNUdEx0cy05WjNYaDFyYUVwTWtVU3puYlpJclhZeDhKX2trN0FweFNsTFlfWEh2bVFWSDNZeFpiekR5bVV6YUxJWGF3c0R1UE9tZElEUEN2VVF1aHZteDlTcnkyNUVib2NRSFpoQWVjc1VnNmxuZDJPQU0zMWRXbXlyNHBnUDAzOWgwMFNVQmdkNEhwdkhUdHotT2d5VUlDc1M2RmNmWmlJaVBSWUY4aUVvenhaVDlVWkNZTTMzalF2NHRfT000OXk1Z1VPTjVFWVJsN3NvTmVIbTYxMEhxbkdjZXlETWlFRWwwYkJjR2FsN2hGcHM3UzIyYkhjSHJFenFYbUxOQndCLTN5djFVNTJvemJ1R2tROUhoMXNPSFFRZWpXWlBVUXZhZ1FlUEpMY1pWM213VmdoQ0FyZkZ3MlhJeFpja2VGLWFvcEJlT1J4MTN3NXlmNndFLUZTbG4wV3ZnOHFSQWU4Y01Rand2MFMwNjR2S290TFhRZGNFX21RQTJaVHpqQnlBYWVPT0s5WEpXYllTLXVoZEdUdlRPVGVoV1kxWm02YXROcHBILUgtaG03aHk4Y3NLVlhrc2U0NnZLMTlSTlAwekptZVA1OGNRY2lmSTQzVlFlOTk1WGhWTWhPbkZMaTI2R1dEamtmM3UtVkUzbm1URWZ2VVpzMlNqWWpQelU5cEFqbUJSOVhFckVIWUxWRTVrWVNRNXVEYUJRenUyMktwUWNzX2J3REs4dktlVWxzbzdVU2dtQ3FEZFF2MGFUMjRJMU5hOGVwc3RLcEY0c055M2JTOExpS004VEFlVTlOaW4zbzNBeE1mZ2ptenlzS1lMY0gwS2V5dEJHb1J6MHJDS2hIdGNIWU5UWWhvYTFtblBMVEJTV2ExZHhjVk5LU2VPc2RCWFRpaG41blhjN2pTMUZ1V2h5MVMtNGhOWmVXZFNHVkJwVW55WWRHRjNzdU9GcmdPbG44cjVqdW40RUJtanF5b2JDUGRDM0p0MXl0cDJFNjhoSGZWdkx6SFpmQkRoZTAzZHpwRXdaQ0dwWUNZWGRKNXlVYzFtZW1BUDdoeTEycUxkdXo2Q2JuQlVldmxoZFhJRm1HMnR6WU9BZUxpUWprRWxxRkwxT2p3ZnBFdkM0UkdWNjdNOWl6TVBlVlR2QXNvMkVjUDJkWmtTS0kwT3FHTDNfWXRXYzI3ZF9tVmVWT0pQNUNRUEYtN2EwbGtUSWs1Z0dzLVFtR0NQS2hud2o4UlFlVHlLX05PMW9RZFpQZmplQkVuVVdzVUs0czVWOVFZM1cwVDI3bTFEQXR3SmNlZnlsUUxubVliOTBrR2RVdDVGV3lqZm9EbkVqTHc3dHRTVm9fY21nSTA4czIweHpCY3owWmx1TVpUZmNQdFpabzU0M1pmQUxFT19GdHFvWU5lcUdrSEV1TjhfRVpUSkE3dXRjN21hYVdMblhpUHE0Z1ZhaHBNbVFUNU5hX0gybUlLZm1fMTlXRFVZU19WZk5SXzgxLW51aWR6dDRVYWlxVngwUDlqeEdKZ0s1SVNNa190TV93aFhScUpWYVZ3YmNKZDZWRmVNSzZvU2tQQWVGR2lucEk5MzFjeUNQaFF0NkFJM3I5dGZEUUtUUkF1OUFiTHJoRE9TRG5UcV9KaDRYdWNwNGc2XzdkR3RmZHJucmJkZGNpYVVnbHNRLnhpSmdyZ0RJTHF3bEVxTUxjQnZvQ1E"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['5463']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '5463'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret-name/cfc6bd2de6fd40e390fd7ec8115b880a","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret-name/eb45de46bd95446c8a72681cb2ea2e6b","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['210']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '210'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
    -    body: '{"value": "KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmhsWkhqeTJfVGRtc2ZsR0NNUFN3dVVCbk9sSlR4cGRaTHJFZTRfSlAzdHQ2SmFPZTRqUU81a1duNFBuNVVUSFdxN1ZTdFJMczgyRURpcVR2NS0zbkVZVEVLd2ZValE3VFJRQlNqNFdiQUVSTndEWE15N3d5aGlWOVkxaHlPTlVPZHR6MEdfcDdSMUxES2ZDaHYxaU5ITzJHRmVsQ09jSFRjakdNMmJmMDc4cVoxbVhIUGNmZXlXLTA2b2VHcDlPdjFXdGd5R0ViUVpLbnVNa0ctQ2lVQmtxUENPdXdrLW4tU09RcnFEUFkxT21vX29wLU56a1BiZ3ZxOEk5LU5rZ0JBaGJoMW5RemVHY3JrXzRmbWYxYmU4R0tLUFF4R3ljREdpT29mODVFalNTME83V0xWd3M0MFUtZHlNNTNfS1RBMHlkeER1Qkl4YVdXdkRYWV85a0NYQS5FQ044eFBxSTI5NGVISy03bjVJUlJ3LlVwRGNiR2VVMUxXbVhPemRkMnMteUVUQ244bVlMNmxfXzliQ2RNM0UzLW1XZFhWN0pVS2JXNThlMjl1UnRpcnV2bTlmbFB2bTk1dEZPbkM1RTJkc1dfWkllUHNwWFk2RTgtUjFXVE4yaUpESW9HVjh1cnVEYV82NzFFdjRITjlhb29GNWxGVnUzNTdsc1FoMlZZdnRjV1ItY3FBTnJtenotdS1TSUpIdHBIeG8wRkVTS04wOTdEdnNmWjlsaVNUaWloVmFiZXI2UFY5U2ZnZjNGb3dma0xLWjhZdkFNUjlUTHJKTUVpc1VXcTZKSTRyLUlrN1Y3eXdVbXBsMDZQQVVHNjlZN1RBa0RNTHZJZXcxaTQxbTRvc1FESmdYRUVDajRROFBQMzF6ZFFibFpUaVpVeUJvYVV5NVMxZEdqVmpUWW92VlhRMGdzbk91dTk1d3BPWS13TVh4VUVVeEY5MlhLTGZXT0NQX1JvRVdXQUNLXzgtQWZMeGFNeS0zOXB4TFV0WFB1b2M5ME1POHBzVmFBU2gxY2hyRVNlN182cXQxdUYyaGYyY2MyZVJROTNOSDd5WHdNWV9FODlVTktFV20yVzlOeFY5T21Ia0owemFwdFczV1ZTUEJ2OXdodkpmcHc3eGN0ZzhtTi1hdGU2SkRsaFZoRUtTQ0VpLW9YZmwwYUp0N0xuaDI5WnZNUjFtN2hXXzE4MklHaG5vWk44YXUwSjNrWWFoQm9sRnd3YUo4NHFsR1paVE5NTkUyT0FJRTBSZFRCQ183OWRkM2lzRHpBR1dVSTIweWtpSUFJUU1RSlZGeUNFYUhYR1gyMl9HMlBXOWxmdzRLWEdtR3NmTUYzaE1ZSFpSMGpIWlBpZ3lCNVB1aVZLUndvLUtrWVRwRkMyYWFpaWp1ZGZ5Yk9aM1ZSdV9uWXBfNzRHZnRkTkpUVGF6Y3FfM0paYXFIblhSRUFhLWNHLTBJT3p4QlhvZjR0M1hwWXlqSEppbHB2clJCeGpsNTI5MF9Mb3RtVFdEbEVWNkVGQmdnMTBrM0pSTlFnZVdNYjI4RE0xZzJBYTZXMW9VLVloSjRqTUw4VWpOYjB4VFg4RHNwcG82ZGZqVjY5WVh0X0I5SGZrSTBSYVlWTFFvR3B1YVJaTjVEVUlEYWRLMEhwTENXTHlnU1U5dTBscjZ4UDdXTVY3VklRVUd3Mm1jemtHUlN0Mzl3a0xnbFRWd0VzeFVJOEUxbjZxLXVCa2ktejJ4X1lybF90V2FBMk9Qakl2NUx1ajZ2ekpZQUJqTW5LdG5VdkhNR3BPcWZjMHRRNVcweDFscThtVDBkT0dfanRlaVptNmxfT2J2dUFmSFNvNHdXRElxZ1NidGtfYm1md1picGJTaTVzYl9XTnA5QUp5Vi1Hd3hzb19SdkhfcW1yTGl5d3AweGpUdXFHNW9fQUdHQUtiMUlZTDhONEs5d3hPNW5ocnlJR0ZfRXBiZFFuMjJHazg4bEt4VFlfRExaSDNZbDNObmhIQjFOZVlpTkpqMUZLcFF4bDhZQlV3QUxrd2pMWWxhLW56a0o3OGY2N1dwdDdWSlJJZVA1QkRFb1BEX0VvNm5nSi1pN3ZBZWItTklNbHBWT0lNZzJQZndMaUFycmpjRVQ0TXpMeDNOWHhNZEdHSzZ0aUZxa2Vac29WdEtDT1hQb1NSLWxid0FkZEZ2cTdBMWtraW5nZ2RNQWR6Ui11TW9BdGtIU0VFOVdyNDZwQjZUc0dOT0d4M0VUMTZkNlItZHNRc1lfZ3dpVjktQ3I1NUdPMWloMXpvaExWM0gtME5Oa2RwUkVmZ2pNZGdhNVJ4VGliVjVzY1hSTmNRYUF6NS0wOURqYkdSZXB0YTQ0WEdzQzAyM1l2c2ZOajVsTExqVVlfYjMwUDd1WERydUx3ZThudzdaT2hJMUtUaHFZYkNwZnFlVzN1QUdTZ1E5WjJnNGowWnRxQVh0VlRqVjVXNmxLUVdtUlVoUnJNUHZMX2NwVUkzRndBUG9JRC1pY3pXcjd1TG1YR3dUYTJlVldqWkxHVnJVU24wbW5ZNllBb3FLMEhMaUlwdzY1Ulo4dFQ1a01lMlBySkxHcE9ONjlzcDY0Q1ExZDg3UFFaRHk3TVotSlJ4LWRjUWFMSDVuMGFpY3JHb3Fvd0RWNFRWc0NyWUJPdzFxX3l6S09USkNqWTc4WXMtbUl2emNFSzFraklfTm9JSzRVU3FMT0dzOV9SY18yNUpiY1JVS1JRQ29xeTRSSmJUSGdIdTZaUmFyTFQxRDdVRWI1V05RNUgxU1Y5cHNwLTI2RVl2S1VGX1BBNkNsSGlCY1B4VGNUT2Q4d1VxRXNnTTRhel9ENUdQaHZvRkpCMzVRNzJXcHFRMkh5ZXNyY2dwVTh2dkVzd0RXRFVKTktaRzNrbk05TFlyaDNJbHpXUHo5LURyM3NleVgtNno0UWhKNUFaRDlRZ2trd1d3TW1tZlRrOHlyNUl1UUg2WGhheW5iZzAyUk0xOUtuRXBqazh2RC1Kcy1EUzdBdjczTFVYbmZkR0dBeWdGUzNSOERoTDUwS3BjckViVnU3eUJaR0FKR2pxUHJCdkRGYnRxNzAyMllFRHE5OUltX0RYU1E4c1dCOF9xczZtQmdOejNrQnJ3MGFQM1lVXzAtZEt1S1dSWEZUQkp0VjVadEtiNk1WUU16QVFwblFZaUZWdnJseFFfSUhDMXJIM1IzNVJCTk9uRUZJMDVNaEhYY2tsRGdKdTg0cVlYb1duamx3WWhVQ2hGNTkyNmZvSUZVcWJJaVlLSTIzT0FaWVhXbUZ2SjNIYUs4Q0NOZm14QkxqbGF3OG53Mkhhekx2UERybUs0RTctc0pabGpSLXJFajNYQkcxQ2dNd09LeU9LdnZRUm5QS3YxdF9HbW4wWEpxS2g2ak1CTnA3SDRIYjZBelJVYXZFVnVWREN2dFlKRmY0VUxNZnhreEtuMlloMUU5NUkzUFU2MG0wR3BfdW5ORENRcUVkQTdRWU1GZVh1Q2hmLTMwMkhBZHc2dnRpVDRZQXdCVTkxbUdQc0xwTXk0a1JfaVVONWNTNGhjcEJmb3F4QURJbkdvQkRCWFlQdjl4dkJUR1o1eHFibW1DZF9XRHFsM1lhdU82R1djSC1FN1g1R3BIa01LZmVMd291ZG16OXRXVkxLXzhDVzl2ZHoxRWNHaGxHOTAxTmhKTTVFc0gybzE1MDJjMjlFbkVtd0I0ZkpOQnJ0Q2psUDNvWjgxSnQwd0g4UE50OWpEb3YzVVdSYm83Tml6ZXlPUkt2SllJUVl3U3hEMzdONlpZMmZnXy1WYk9PSnA2VmtiOFMwNkFXQ3djZTBETmV1QVEtR2ZubjFPZ1RpbUY2eUp0NmloVnFOY202SnBqelZMbGhBb2JFRWhwbUt5ajl5SGRQeXM2dXd1WDFWc0U0YWZMdjljdW5zWk5GT0xKTVVDbXJzY2tidnc1WUxuZDJ5X1NXVF9ONWN0Z2kxT1IxVFBZTXZra0RZTTNlYnlPQUZXOHBqN1A3NTdlM2xNUVQ5UFpxUWh1OEViZmk3SExiT2tTSkNwQ1ZxdVc0bmw2WVAtZWoxV2VCSW96REhGNXJMdUlneFJNWlk5bEg2S05aSjNkUnp4T2Z0dDFhREJfa2RIYUZfNWFWQnRpZ3hvQ3IyUFJ0QzlsWE5sdmtQeWxNQWJFeFVrMUtRNGZhRjhLRzlxZ19UdlJIc2R6Q25IQ2dDbDVDdVBQZno2UlhybVo3bnpwSjdlOTRNZkFENGRwZmtndTNacTNXLXNnMjJLYTNzTzBWbVhjc2hZOXU2WUU1MkNXWlp3WmhfTGp2MGp0cktxMW5DVXp0Vk1MblBrM3VFNTU5d1JzSUZPLXdwR01zYmpVQXFFVGdNak1EajNKQ24yOTNNczAyTWJfdk1Wdi1qNk1qSW5nWVNlUFRCdDFQVDdRTURscG5KUFNMY2RyYy1oZWIydzdDaDNFRkJsamkzOG5WQ3gxcDAwc0l1NHdZb3dMM1Z2RDZ1aFYxLXdOOHZxNUhYUlozX085UzIzb1k3TVg3V3V2bUZEaU5HWFVEUmFFdWpUaTI4c2wzbVl1eEVmblYyQWM4aF9qdXNKaUVUQjJDc3B0UmhPdzhVaTg2bVk5dENPajNoSlVaYUdTc3VkRWlmQkpUX292UGI5YUFqdzNRVXFTdXY5dVBuaHdKZ3VmOG91WWF4SXo0bFR5dVRGekUtVDJJQVloUWFuVDFoWVVuOVhoQ2Fuemo0bkNHLUtld3N5MWI1cTJzeDJxYnYzR2tnX0xLNVFlb2hiMUoyMlFTX2p6Sy1YaTAxSWF2Y1RfT0NXMzBySml6YWF3amtlTzFNM080VGJweFUwY3o1V01RVXdtRXlrQ0N4WUIxUmFwSG1jSjc2MXhsSW1wckRjYzVfNmtzb0hoN0dKN0M4QmVKSkttWmRlRDZlcVZ5YnVaU3dXc0VfSm1la2o5WGNrTkhFNHg4VU44YlNzOTQ5d2x5X2pGemFiLVk5X095dUM4d0UxMzJLLXdmaHduZms4T1RTZGQ0TEw3S0hoTEttOUdPUjF3Z3JpeFJrVW1adW85U2NGcjNKM1dSemxxNTFrMkVIb2NFVEdFbVhIQ2VYR3B6T1ZsalQxRmVDRER1TVQtV1ZOcWpmVXpDeWo2dGItY2NWQ1pKSk5RUGVqTnBDNE9INVhsMG1FUmpFZjdGRVp1YTN3LmxQQW00REhXSFJpeTdZMUlTZlk3a0E"}'
    +    body: '{"value": "KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLlU4cHNmZEt1TF9NSmdkLVBPaV9xTjV5QkxpajNOeU12QTdobnpTd1VPd3g0djZrblNBZG56RFpTcnVaRm9EeHB0QXBSMG9PVExIQmxtV1VTS29yaWE3S3U5OXhyWW5kczFHdzJqOTVHc2twaWk3RmtVSUsza2hlSXpGN1B5U18ySUlVcjhvamdwLTY1bloybERlRTdlOFA3Y0pZSlpTeDBjdjhVaU1yNFJOUzc1REtoaUVaallpWndDSmY3ZDhBNDRWMGxOZVBLYzZiOEFFNXFNQTBwa0V2YXdYaDJHUWwyYmQtcFRrNUFyN0FOZnFJc3gxWGdvWUstOVhNc0JvcS1uMksyTnZ0aDZVdjRrenhYYzZBOUc5cWMzQ3U2QmRzcWNFdUVsdFFMTURKSDVyZnJXdDlCSTRXUGhzU0lKNXBNS1dOSzEtSkw0dmtJZGN5VFpOaWZtQS5rLXhKTGVfcmNWTmxsb20xRkNqRlV3LnJTV2xkc0VSZTV6WFRBdWZwN21fMmdvZ0Q4bUlsd0ZTVlAyb3RyQU1QMlliX2VvNDJ0SWVadUphUEFZQk5VWnhoWW5POGR0WU9TRWpZbXZnaDBZdE5raUl2N1Rtci1maEJXb1BHQVkxbV9rQzl6Nl91Ty1WLU5VWGFESU9obVh4eC1kRFhEaEQ1RGpnVHkyVDdSZDhkbTJEVS13OEVfNXdYQzVOekVybUw3ZHh5SGNqZjlfckxfcjNXZHA5eFRlM21QcDREOFhzeEFYSnRQYk5KeHFuMTVMbVFBaE9YbUVGaHJUVzl4MHJJVTVscUc4VVF6MEJZUFNNc3EwQUdYR2x1RzBiODUtaWxPR3pweFhpdHNJeGdKX0VpTlhQUVpLS29IcUV1cEZvbFpsRGszei1FTHllM05FRGFuNTFMYWtKZ3g1ZWl0QVVGUDZJOTlpcWx2ZHlBUnZNRGMyVzlrTkNpdXNUdVFYcnNHOGV4YWlramtSQmlFTWNlMjU1dXJCb3U3bzlTb2hDOWpNcmRGZGk3SHYzVDRjeXFWSS1MRXkyUEZoQXFtaXZidmI5Z3ZidlhEVnpwN3JsczRfTkRSTklyVlpXSGFyRVh3eU9XVUtES2JXZmNWcS1vLVRYUEo2U1AtYzltWEhsTmQ5elRVUEtKMXpkRHdCeTlSYzFuc1o1d0tLQlpSMEd3RU9nUXFWbXhKUVFuN0dZRmV4UGw5RTlYSEQxR3ZOZmNzX0JVSWx1VlR5cWQ3TzVCQW4xYi11QlhjU09mcThZOG5KODVHcnZQZWdZckxvZy1hbF9ITWtVc1NQN3RGN1VnSjBnc3hzM2o2U3A2SnJmdzFKUHBnam96Um56Vzg1d1IzNkEzaVdULWkwSTFLSE1HUF9KeWRCZ3V2azNUQWlTTHBzM0diX2haVmRjUk1Vb3AxZHlHVmNyMU9ITHEycUxQNE15NzVMR05hbUEwZ3E4Tk85Vm9IWW84WjZKTWYydkdiV0RRbW9ZX05Pd3hpNkEzX3FvbmNDTnVwM3VmR0h0YjVkZ3M3ZkpvMGlwY2ZpLVhCTTMzeEFHcm1ldzBCRUMzazBwWVF4T3I2TTBOYWk2ZUx0QVVVb3lhYzl3bk1CM2tORm5aWkJTNG05eUxpMktwa0h4ay1EMmhld3F6SE5OcENBb2J5MmdvWTFBcGRrTE5TVGtzbVd0ck94SlZpS3l5UVVENjFHclVOS09TbjVZbm1wRmJTeTJwTUlSbGNiMHZPcHgzMVJUM2F3dHZ5b3p6NzhXYzVQeDR4aUtBR1J1MGo0UGhpZlpsR19UbTU2UUJxcVRoWU5LdFBOYXlFMDNaeHJFdTJSQ3RtTGVxV0s2dzFmeEoyRkxpUWREa2djWURsVlIzQWNHb29mcVNSaS1UZDRhMFNFZTFHZVl6QWlBazh1SmU0V2JkdkwzMHU4T3lyRW45dHhjMEZwTVBRTmNSeHEtYVZwYjFVVEJGRUNNRWtMQ2hVdGgzeUZSVkoteFJicU84YjhwMHJRVlJSU3YtZlFoREJManF6TkVDSFFjYTJjT1liUEFDYTZQREY4SWdBeWstU1hwdVllNjZSS2RrYmtZVkItazV6dnBoSzRxdUhfNU9XZUkyNndrX1F4emlQOEQxam5yUzE1MVBnN3E1UmFzeGphQjFlMFpaZGhXX1cxOThPZnh5S3BJQ1ZubG13em95YnVtYl95Y3pjNk1iMW03cjVqalBjQ0pobEt0TWtMM3o0Y1pPcTdwV3l0LThxWUR6dnNuZWhIRXZHdHNabnJBeTVhTjZqbDY3eC1LSXlOUEhFWTBqUUg0bjNDVXdLbFRfLWFIZUlzempwYkt0Ry1OcE1QYlNjdHh2V2xzeWRDTFdOUmx1LThhd0VoZGVxZlc1TzFYWHVLZkZqakpUYVhVbF8xY1hwY01BTk5nVWRvODEyWXQ0X2dQVzV2RElhczMtWi10azVpaUo1UDlwRUszclNBNDlfakxOT3FGZ09vSUJuTXdZZl9xcVdVOFhIa3Q1bG1nTGpaWmROVWZGWGVZeUQ2dEJIamJRaGpnOTRGYXdlV1VFVnlzSFZMakgwcC1Mdk1YaWlwWE1wXzhsZkJiQmFKTG9Zd19NTUxzU2dWZktKZzhTVEFTNWYxR2hyT29uVk1mb0pfQmg5MEkySHBCZGtZUnUwYVk5Szg2U3pVSUxvLUxKNUxIZEtHRVNrRVFJQnB3MXdDTl9nNlVHSjcwRHNtR3R3LXZRQ3g0SzZvdDl6VzllZ2h1VVdiZkR3SkgxT0o5cFBEczNWV1FxeldCSnIxczJmMVhZOWFNNmdnck5hMC1qTTJFTEpQTVJJWmZtYmZhV2VlY0RELU00U3hIYWY3UVpra3VYempWOHV0cGxDNFNPY3FPNE83cEtxc0tyUHRpajl3dEhmYXpKbUVtWWUyYlpnTXZHeS1OR1hOVTVtNHRVREtsZGJXUy01WDJZUHEzX29ZcDR4X0VuMHhwbndxZHVuOE44ZFJjTDR0S0k5ekE2N1BSLWZ3b29mUjVqZHBVYlE1VmlDR0luMUZsUWFJRlpLd1VMTkRLakZBVVVHZGlwT2dwdXNmcDBLc2RYaWxXMzNLQWtCckFRaGdLdmRQTllSNmcySFFKd2xfeUYxb1ZpUmdPeW5fWXhEY2JPQ2QwSElCdEMwakVWb3lLYkdaLUVSNFYtYTRpVFFMMTFSWGl2U2xhOXFsVGl5dUN2dmxLZ2txTlg2NGJhbGFpcDVCQ0tLV21YV2VmRmJ5SHlKNlRLMzNNX3hUOTFqOXJmNTVTcVZVSzlVY01PSVkwZUR3Zk01VzNaNTdnU3R4S3pjbUZYSklCNkstT1hzNEctVDJUbExpeUxYQllKTUIwSmhwcHJTWnJJTDlqbk5TaUtJTFU2bl90aDQ5a0VBcnotbElhaXpyMTdKY1p1WnZLSjg5UlNKUHRIOTlDSW5WV2JjMW4xeE8wTXZBbTFMY0k2ZUtLdHhpQ1A1UmtiVm5NbGFMb1dRMmloRERzdzU5eFp6eVJ5Rm1zc2hNZnNUdEx0cy05WjNYaDFyYUVwTWtVU3puYlpJclhZeDhKX2trN0FweFNsTFlfWEh2bVFWSDNZeFpiekR5bVV6YUxJWGF3c0R1UE9tZElEUEN2VVF1aHZteDlTcnkyNUVib2NRSFpoQWVjc1VnNmxuZDJPQU0zMWRXbXlyNHBnUDAzOWgwMFNVQmdkNEhwdkhUdHotT2d5VUlDc1M2RmNmWmlJaVBSWUY4aUVvenhaVDlVWkNZTTMzalF2NHRfT000OXk1Z1VPTjVFWVJsN3NvTmVIbTYxMEhxbkdjZXlETWlFRWwwYkJjR2FsN2hGcHM3UzIyYkhjSHJFenFYbUxOQndCLTN5djFVNTJvemJ1R2tROUhoMXNPSFFRZWpXWlBVUXZhZ1FlUEpMY1pWM213VmdoQ0FyZkZ3MlhJeFpja2VGLWFvcEJlT1J4MTN3NXlmNndFLUZTbG4wV3ZnOHFSQWU4Y01Rand2MFMwNjR2S290TFhRZGNFX21RQTJaVHpqQnlBYWVPT0s5WEpXYllTLXVoZEdUdlRPVGVoV1kxWm02YXROcHBILUgtaG03aHk4Y3NLVlhrc2U0NnZLMTlSTlAwekptZVA1OGNRY2lmSTQzVlFlOTk1WGhWTWhPbkZMaTI2R1dEamtmM3UtVkUzbm1URWZ2VVpzMlNqWWpQelU5cEFqbUJSOVhFckVIWUxWRTVrWVNRNXVEYUJRenUyMktwUWNzX2J3REs4dktlVWxzbzdVU2dtQ3FEZFF2MGFUMjRJMU5hOGVwc3RLcEY0c055M2JTOExpS004VEFlVTlOaW4zbzNBeE1mZ2ptenlzS1lMY0gwS2V5dEJHb1J6MHJDS2hIdGNIWU5UWWhvYTFtblBMVEJTV2ExZHhjVk5LU2VPc2RCWFRpaG41blhjN2pTMUZ1V2h5MVMtNGhOWmVXZFNHVkJwVW55WWRHRjNzdU9GcmdPbG44cjVqdW40RUJtanF5b2JDUGRDM0p0MXl0cDJFNjhoSGZWdkx6SFpmQkRoZTAzZHpwRXdaQ0dwWUNZWGRKNXlVYzFtZW1BUDdoeTEycUxkdXo2Q2JuQlVldmxoZFhJRm1HMnR6WU9BZUxpUWprRWxxRkwxT2p3ZnBFdkM0UkdWNjdNOWl6TVBlVlR2QXNvMkVjUDJkWmtTS0kwT3FHTDNfWXRXYzI3ZF9tVmVWT0pQNUNRUEYtN2EwbGtUSWs1Z0dzLVFtR0NQS2hud2o4UlFlVHlLX05PMW9RZFpQZmplQkVuVVdzVUs0czVWOVFZM1cwVDI3bTFEQXR3SmNlZnlsUUxubVliOTBrR2RVdDVGV3lqZm9EbkVqTHc3dHRTVm9fY21nSTA4czIweHpCY3owWmx1TVpUZmNQdFpabzU0M1pmQUxFT19GdHFvWU5lcUdrSEV1TjhfRVpUSkE3dXRjN21hYVdMblhpUHE0Z1ZhaHBNbVFUNU5hX0gybUlLZm1fMTlXRFVZU19WZk5SXzgxLW51aWR6dDRVYWlxVngwUDlqeEdKZ0s1SVNNa190TV93aFhScUpWYVZ3YmNKZDZWRmVNSzZvU2tQQWVGR2lucEk5MzFjeUNQaFF0NkFJM3I5dGZEUUtUUkF1OUFiTHJoRE9TRG5UcV9KaDRYdWNwNGc2XzdkR3RmZHJucmJkZGNpYVVnbHNRLnhpSmdyZ0RJTHF3bEVxTUxjQnZvQ1E"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['5464']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '5464'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/secrets/restore?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/restore?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret-name/cfc6bd2de6fd40e390fd7ec8115b880a","attributes":{"enabled":true,"created":1575676622,"updated":1575676622,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret-name/eb45de46bd95446c8a72681cb2ea2e6b","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['210']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '210'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secrets_recover.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secrets_recover.yaml
    index 2eaa6d164bbb..63119d518190 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secrets_recover.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets.test_example_secrets_recover.yaml
    @@ -2,759 +2,1522 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "secret-value"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['25']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '25'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/89f63407088f45b0a52742a997be20da","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['245']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/ca7eaffec1e0427db8b68a65ad8f10b5","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '245'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1575676623,"scheduledPurgeDate":1583452623,"id":"https://vaultname.vault.azure.net/secrets/secret-name/89f63407088f45b0a52742a997be20da","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['370']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1583449592,"scheduledPurgeDate":1591225592,"id":"https://vaultname.vault.azure.net/secrets/secret-name/ca7eaffec1e0427db8b68a65ad8f10b5","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '370'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:08 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:12 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:18 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:20 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['85']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1575676623,"scheduledPurgeDate":1583452623,"id":"https://vaultname.vault.azure.net/secrets/secret-name/89f63407088f45b0a52742a997be20da","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['370']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1575676623,"scheduledPurgeDate":1583452623,"id":"https://vaultname.vault.azure.net/secrets/secret-name/89f63407088f45b0a52742a997be20da","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['370']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:32 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '85'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1583449592,"scheduledPurgeDate":1591225592,"id":"https://vaultname.vault.azure.net/secrets/secret-name/ca7eaffec1e0427db8b68a65ad8f10b5","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '370'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1583449592,"scheduledPurgeDate":1591225592,"id":"https://vaultname.vault.azure.net/secrets/secret-name/ca7eaffec1e0427db8b68a65ad8f10b5","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '370'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name/recover?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name/recover?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret-name/89f63407088f45b0a52742a997be20da","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['222']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:32 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret-name/ca7eaffec1e0427db8b68a65ad8f10b5","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '222'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['77']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:32 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '77'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['77']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '77'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['77']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:36 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '77'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['77']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '77'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['77']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '77'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['77']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '77'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['77']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '77'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/89f63407088f45b0a52742a997be20da","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['245']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:47 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/ca7eaffec1e0427db8b68a65ad8f10b5","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '245'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secret_crud_operations.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secret_crud_operations.yaml
    index 8c776ab80061..dd3aab90a084 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secret_crud_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secret_crud_operations.yaml
    @@ -2,406 +2,780 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/secrets/secret-name?api-version=7.1-preview
     - request:
         body: '{"value": "secret-value", "attributes": {"enabled": true, "exp": 2527401600}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['77']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '77'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/bce587546088470389c441f3e3b16533","attributes":{"enabled":true,"exp":2527401600,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '262', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/8a53c49d5e0f408b8a6bacbc954b9125","attributes":{"enabled":true,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '262'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/secrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/bce587546088470389c441f3e3b16533","attributes":{"enabled":true,"exp":2527401600,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '262', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /secrets/secret-name/, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/8a53c49d5e0f408b8a6bacbc954b9125","attributes":{"enabled":true,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '262'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/bce587546088470389c441f3e3b16533?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/8a53c49d5e0f408b8a6bacbc954b9125?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/bce587546088470389c441f3e3b16533","attributes":{"enabled":true,"exp":2527401600,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '262', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /secrets/secret-name/bce587546088470389c441f3e3b16533, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/8a53c49d5e0f408b8a6bacbc954b9125","attributes":{"enabled":true,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '262'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/secrets/secret-name/8a53c49d5e0f408b8a6bacbc954b9125?api-version=7.1-preview
     - request:
         body: '{"contentType": "text/plain", "tags": {"foo": "updated tag"}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['61']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '61'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
       response:
    -    body: {string: '{"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/secret-name/bce587546088470389c441f3e3b16533","attributes":{"enabled":true,"exp":2527401600,"created":1575676623,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    -        tag"}}'}
    -    headers: {cache-control: no-cache, content-length: '295', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /secrets/secret-name/, api-version=7.0, '']
    +    body:
    +      string: '{"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/secret-name/8a53c49d5e0f408b8a6bacbc954b9125","attributes":{"enabled":true,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '295'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1583449592,"scheduledPurgeDate":1591225592,"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/secret-name/8a53c49d5e0f408b8a6bacbc954b9125","attributes":{"enabled":true,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '443'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/secrets/secret-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1575676624,"scheduledPurgeDate":1583452624,"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/secret-name/bce587546088470389c441f3e3b16533","attributes":{"enabled":true,"exp":2527401600,"created":1575676623,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    -        tag"}}'}
    -    headers: {cache-control: no-cache, content-length: '443', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:09 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:15 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:17 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:19 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:21 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:25 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:03 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:27 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1575676624,"scheduledPurgeDate":1583452624,"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/secret-name/bce587546088470389c441f3e3b16533","attributes":{"enabled":true,"exp":2527401600,"created":1575676623,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    -        tag"}}'}
    -    headers: {cache-control: no-cache, content-length: '443', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, dffb5h3etzdzhvywizs3aqkd.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1583449592,"scheduledPurgeDate":1591225592,"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/secret-name/8a53c49d5e0f408b8a6bacbc954b9125","attributes":{"enabled":true,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '443'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:07 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://vy46alzzbau4qvw2ng3jafk6.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secret_list_operations.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secret_list_operations.yaml
    index beef626d8415..52b8dff08234 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secret_list_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secret_list_operations.yaml
    @@ -2,229 +2,377 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key0?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, g27agkkyx4ckaacihlwpy2tj.vault.azure.net,
    -        /secrets/key0, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://qzftvfocanc2qppsbwjjqsx4.vault.azure.net/secrets/key0?api-version=7.1-preview
     - request:
         body: '{"value": "value0"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key0?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/key0/9ab01399586e4616bd3c0c6ed191a478","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, g27agkkyx4ckaacihlwpy2tj.vault.azure.net,
    -        /secrets/key0, api-version=7.0, '']
    +    body:
    +      string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/key0/6ae5c4a9f74944a1b864478fc9a3a5e1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qzftvfocanc2qppsbwjjqsx4.vault.azure.net/secrets/key0?api-version=7.1-preview
     - request:
         body: '{"value": "value1"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key1?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/key1/441b683318f44113bae0d83e92fed669","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, g27agkkyx4ckaacihlwpy2tj.vault.azure.net,
    -        /secrets/key1, api-version=7.0, '']
    +    body:
    +      string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/key1/5ba9134ee91a421fac611af60c7186b0","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qzftvfocanc2qppsbwjjqsx4.vault.azure.net/secrets/key1?api-version=7.1-preview
     - request:
         body: '{"value": "value2"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key2?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/key2/3755b6fe07214061af3654def56af155","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, g27agkkyx4ckaacihlwpy2tj.vault.azure.net,
    -        /secrets/key2, api-version=7.0, '']
    +    body:
    +      string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/key2/0eb878d95c7a4d0dbca5bbf32e7d9b8f","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qzftvfocanc2qppsbwjjqsx4.vault.azure.net/secrets/key2?api-version=7.1-preview
     - request:
         body: '{"value": "value3"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key3?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/key3/05bebd070dc74c2d80cf90dea86656c8","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, g27agkkyx4ckaacihlwpy2tj.vault.azure.net,
    -        /secrets/key3, api-version=7.0, '']
    +    body:
    +      string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/key3/11f3abdc916a4b3ab2b7317bf341d9bc","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qzftvfocanc2qppsbwjjqsx4.vault.azure.net/secrets/key3?api-version=7.1-preview
     - request:
         body: '{"value": "value4"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key4?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/key4/110d6b24496f47068b42fbd7cc13a92e","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, g27agkkyx4ckaacihlwpy2tj.vault.azure.net,
    -        /secrets/key4, api-version=7.0, '']
    +    body:
    +      string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/key4/56209d3cff83415e99635149213469b0","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qzftvfocanc2qppsbwjjqsx4.vault.azure.net/secrets/key4?api-version=7.1-preview
     - request:
         body: '{"value": "value5"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key5?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/key5/80eed5e0e16644449aba7ab246aabfa6","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, g27agkkyx4ckaacihlwpy2tj.vault.azure.net,
    -        /secrets/key5, api-version=7.0, '']
    +    body:
    +      string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/key5/49e26da07f9640e6afa835bf2e4744be","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qzftvfocanc2qppsbwjjqsx4.vault.azure.net/secrets/key5?api-version=7.1-preview
     - request:
         body: '{"value": "value6"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/key6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/key6?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/key6/3724d1e21cf7473da51c68bd15548d2b","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '232', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, g27agkkyx4ckaacihlwpy2tj.vault.azure.net,
    -        /secrets/key6, api-version=7.0, '']
    +    body:
    +      string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/key6/733634a3a30949af82cb53e6cf8ffc77","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '232'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qzftvfocanc2qppsbwjjqsx4.vault.azure.net/secrets/key6?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/key0","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key1","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key2","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key3","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key4","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key5","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key6","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '1308', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, g27agkkyx4ckaacihlwpy2tj.vault.azure.net,
    -        /secrets, api-version=7.0, '']
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/key0","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key3","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key5","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/key6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1308'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qzftvfocanc2qppsbwjjqsx4.vault.azure.net/secrets?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/versions?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/versions?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '28', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, g27agkkyx4ckaacihlwpy2tj.vault.azure.net,
    -        /secrets/secret-name/versions, api-version=7.0, '']
    +    body:
    +      string: '{"value":[],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '28'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qzftvfocanc2qppsbwjjqsx4.vault.azure.net/secrets/secret-name/versions?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.1-preview
       response:
    -    body: {string: '{"value":[],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '28', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, g27agkkyx4ckaacihlwpy2tj.vault.azure.net,
    -        /deletedsecrets, api-version=7.0, '']
    +    body:
    +      string: '{"value":[],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '28'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qzftvfocanc2qppsbwjjqsx4.vault.azure.net/deletedsecrets?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secrets_backup_restore.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secrets_backup_restore.yaml
    index 6cbbb43214e3..8f491123b699 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secrets_backup_restore.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secrets_backup_restore.yaml
    @@ -2,105 +2,171 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, o56syoqpv6snerwgqnj7figc.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://jzkssw5v3tsy2yrcmsg34xsr.vault.azure.net/secrets/secret-name?api-version=7.1-preview
     - request:
         body: '{"value": "secret-value"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['25']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '25'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/bc3526d6ddac431bb90696b150724e99","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '233', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, o56syoqpv6snerwgqnj7figc.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/166a7ab1a6e14ca5a30ace8808502918","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '233'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://jzkssw5v3tsy2yrcmsg34xsr.vault.azure.net/secrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/backup?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/backup?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmtUWkYyN3Z6b2VUSWdaVGh4Z1ZzQ3Z0bGVxc2dTbVd1Vll0YU40OHpPVC1kVGhjdmNPd3BqcWowanVFYk1hemFpS1dsclVYUEs2djE0d3dTeUEzbjdqX29yS3FHNVFWN3pkb3ZjRFYyUGN4d245V190NURpdVJiTkN6VFZFT2F0eWpVcXo4Q2cyMzBzSnM4SGdUaFF1UUM3cFN0YVNvZE9LaUtvQWViSmVuOU1MZDllZS00Y2FFX0M3eFFmVXRONmRxbnRDOTU3WUt0ck9nLVNKR3h0cnluSThSMjBXWWVQV2lTdDZwOXNjM1VBTTZnV2hRNzlaRjFUcWwwb2lPRzJFV2lVaWprbGxjLW9EemE2amh6N2dQVDJXTjV6YXExanJwUjJvdU5BYVIwbFdPRmJwSjU5RnNuMzc4QlFRNTVVSTFTN1RXZkUzTllKTmRaZFhKX05qdy4yM2hXNV81c0ZSQWE4MmZRMy1xeVR3Lk44Y2xuRXpIUjBNQTRaSHJxclVHVUd5OGNUbVZvVFhMSmVXd2ExRlBJT2M1a0VrSmFEUHEwZzlUMmdVaHAxVDczbEd4Vkp6angxdmtJWXhEZ0V3V0ZxNWU4UmlleHNFWVpndFhXSzUtX0JOdXFfYW5ibk5TaUZycUJlTmotSU94QTdiYkg5SmZRa3V6N1pTLXFFdGQ2U0NReWNzTjljejY2SG4wa2lidnljcHdIbG53YUQtWGpCMmRFUlAtaG8zRzZ0U0ZOaEJNdW5IdzJLTVpmU2xEdEVnTkg4OENObFFIdzVHRWVHUEM3MS1IVWhudWJrYWMzQ0lEV1VPUC14OENjangzVThocldpUHltRzItZlR0SXotdWN5eEdfVGV2NFEwX2xIUV9zYWI1TXQ0YTQ1VGJad2V6TjM1MXFLR251b2g4NXpuRTEyZnJZNWt0WFROVmJlRTk3ckxMUjc5elJQdkhZTVkyMmNUX29aNmp0eXZ4MDRtUnB5TlQ4OWxsckUzam5ZQWFicWVmbkpIOGpFSGlOOWQtMkVPRXpjQy1EU2VtUnN1ekVVTlRrcGl5V2tDR00wd0RSMkUycDhNVjRpSVlTSVpEbGdVd0ZTMVJIS0I3aHRHaF9uVWRkZFM5SlFIMDcxNGpOQnItUl9FcVlnWU5DNXFuNE5CTE1WbVJkaDRYNUdmT0JkY1hnUFpUcVBycWNUSHlZZTNYS0FORjlyS3dybmMzcGhVMEUyRlk5RndfTmhmX3Z0YXNjUjAtSkszYVBrTkRtb2tXVmdCM19iNTZSREQxd01zUTVReThYUXhob0NTRFRrWDFyZEJvQ0c0Sk9QcDlQVkFhNEF6MmRLVkZab3ZlaWxXai1zYmQ1M0I2MEgwQkRrWWwzSjlIYkhjNS11aGFUSDdrVi1aM3BiS1Z4cS1RSXh0ZUcya2tZd01mdTRxc1pYTURUcWpxYUtFblItMDlJdmFxcXEwMzFaLTVLQm5oRGl5XzdjRXRWR3pQZVBiUVZSSkFPYy1pTkRPQ3ByWnE5bFRHdmplLTVTNjNMLWs4bUVDTU4xY2hqOVd1eElpdElISDlncEVlT3Z6bkphNDVCOXM4OUZ5VlRQb1ppbTNJMUpEZy1YLUU2N2dJRjczRkxDX0hYUGZURVJNbmF1SjFCRmlSZnZoS3J1dWZZaDVrSzBmd09PeU95TllfOVBrRVpEekl2NXJQcnhOczZQNUNyeDhaSldHZEVoMHk5WS01T19vVmY5ZmZSYXJMZlgxNUZZNEpSc3ZBTjlZeTdYM25weXV3R0RnMzd3ZmNuRlRCN296bWZaLWRQTHV0YzYwSTA4eXhxelJNeFdzM0ZUZ1EtTUJwOEpmZ2I0QVV6NWM3OWM1RDBiQml6QVFCaEVMUnBVZmFCdHRyMmlweWVTZWhlUjFPUWtGdGNUemJkVEs0ZkZKNDM5UUxTU2R4QzZLUFhRZFc2d0Y0a2c5cGttRjBkcnNTM0hwZnlXOGpEd0Q5Vl9IRnRTNEF6U3BibDg5bGp1YTF0eG9TdEZTRFFtQ29QakF0WU1Kblgtbm1wWERZN1JKWTlVTnhIaUJUa2tlZG1rclZiM2VYYTRJdThrVWVsXzlmaGZTUkJRNkNhMUxlM3pzSi1VcTFkMjNwUFNRVWhnYTlDOFBvS1RmUjRJMVFQbkdOVFM4SExJRnhjRW5UdTZaeUxTQXFIdF9mWWtWQ1M0WUhuUzlVSmVtUElwcDRLVHRiQ21Ca2xTdnhwSk9PRHI0d1NiNW5ESHhKUllJMUdSNmRkczFoY041MXNDbFJ1QjJFS08tVmh5M0tGQ0Y2Y2hnQ2NrcS1jLWlnc2pyOXhCTUdFQjI5cHBJTDJmbm9YSXBPMXAyWmQ3bWJtdVN0eEo0bnRJWnVodExTNUlWVTJycG9mWVRTdldPMWZ0dDlvMEExSzRJOWRSeWpwX3poZ2lhaFZIQmFzOEpCUzR6OTZLd1BadXdFUUlTTkZrQkZPcjNBZHBLcnpCRWQtWl9Ed3J3S3VxcjFwUmFrcWhqVWRxb0h1SFFocWhPYlJXX3lSNkUxdXl0eDZWRjgtM1o0ZXloZ25MTWJMVmF2Y3BNM3RqaS1zYTQ2dGRDOTZZUVBpZ3ZWdFEtTmxaOGh2OXI0MFN1Tk5CVk43UjVTX0lrTDloREJwcW82SkxUZGkxNjZUcUczYzRobHJuTnNMYkV4TFVORlEwXzB4MUJIUzR2N1BTU0dyR2ltZkhJRkhUcTVwWVRCSXY3LWo1V1UxZTZtSGhHUEUyLUVOMWxId0xFdFdmYTdoRno1OVlXMFF2aHlLSlFsbEZyQTY1X1BNck0ybkwxWEF5aHliYnhTVnVNWjNIekc1dEhSLVJRYzhORWFQTGdlYTJ4eFkxSUlTVWxmb1g5LXEtcURnelhtbnpQWWdXYXZGUDZVT1g4Y0MxSHgyb2RpODF6NE5lMWE1bGpzeFNwMDR3VWlJOE82SkZDQWx4SnQ3QlJSYzVOUDVLMENmOGlFeUE3U2dnWnpXdXZfb2hITDBtVmkwY3RNWUQ3YmVxLVJXQnpqZkhHazZmcXlHc3NhNGt5ajdHQTRIa3lsZ0xRZ1p1TVppUXdTSzk4Z3JxUktSN3YtMm9EdzRaLWVmNHRNU21vUFdac0l3SzlzbHZnQ3J3VTdGT1dyXzVVRTl0SEx2bEg0OGZuUWlOTHpJelQ1ZmxaUnBDOU4tV2RTRTZUSi1NTnY5bERWdUhUYVJ1bVVjM0EzQW5CVFRpdUdITy03dG5qVkRmaHpfN3g1d3NCc1RJdE9DcjNiM2lEaFJfU1JfSDlUcXNFM3RxMnpPejQxQm1QOGFLT1ZYZWV3YTh4VXYzeXBtYUVxWjFNRk5QdWRtcUEtTVN3T0RKd1liWGNGQldtM3F1aVpFT3N2SmNhSmtKd0FBc2JMN21NSjF5SmM4MU1FY1N0SEJRYzMtai1hdWZGekNUX1VGNjJaeF9jRU5LaVNERW1iWXIzWkx5VTRwbUtGT1ZHVUducjBiVUVzSW42V3QzU1lPbWJOTW1wT2VfR3RYWS1fT3lUNWpXZTFDNVE1bTZ5dlN1cXg3UkVjX1FXZVVraXRHZjZOb3dKUTNOWGYwMGFORk1LZGYxTnhqUDRWUUN5bkxIUTVkc1c3alJfLVBYVEV3WC1TSVc4VDBKS2xjdGhUU2dqRzRtdTNxUktRdGI0dWlYNmNVN2Q0MVg5bFZkb1pNZHgzandQWlk1YWxwelNBdVR0alVHX2xxQVRjWjNuQ254RWxpUWVVbWV6cHQxUlM4dTUzZE9RZ1gzc3FhSlFFSFN6dU5MZmU2elhRZ3laUmFMcGJBdkJVRVVtMXEtZmh0cUZ3S3ZGY3FlV3ItX3ZzS29fOWVQWHlieFVBVUt0S09YQVZ5YUxrZzdCUF95Zk53azUxNEk2TmpsRDZrT0NaTVpmWDJNN3NjbVE4dkdPUTNEMnU0YUVBXzltMkhJc0ZUVjNUbVRud1docHV0MXc3NzF1UGp2cmpsdVU0endXTWp0UHVKQ0VmY2FSWDcyOGZRWHVoV0YtOU1JMDY5c3hHZ2U3dFN1bmUxMmxYTUg2cnFkVURKZExYM1Q0NzZFZDFVMUpuajJFVUFKNlg1ZE9IZ3BuSzd0V2ptZ3NPYjF2alpVY1J3SDRibEdaTVRkVUwzRDBzSWhhSWVOMnlWdU1HLWRiaGRMWUJQM1o5bWhKc2Vzd1Z3T1BLVlY0cHRuemdlM2hCalZmRC12VmpFQ01CMUZvX3JFQm1vMFhJR0JIUHlNNTVKRTdpcGNpdmdMOTRKUi1TazJKUENkT3NpQnQ5Rnl4Q2d0U1dJbkVOcnc0WG1IcVFaY0RRNVlaME9ZdXAzdzB6SGo5RWthTVR5MTFEQVRpbXhqTzFPbkJrSVpZX2tISWQwUkd5bkNuMDVHbUwxazJkNmZ2VkFBcGhTRFpDVXFxUUExWGI0a01pcXo3LWp5R1NWbHJhM3RpRkUxQ3dNU0F3a2hhRENqU1lZdlljNHZJOXZOeW5TekhGa1VPWkxHamItUy1mZjhMQ0FKZjY5QXYtQTBvdWhhYVN2TmQ0SDlNUnF0TnRma0g0bVBsQVlmUXRTSGZLMHpFNS1kR1NFTllKalVIV3ZTV2JrUEFERkNfMmFWZDdnTUJKWHNIWTlRdW8xeXVqU2VkY2RhX3Q1MlZjd0pyRC1MWmFYWTVUM3oxSzV4SzRBNDhQRThFUTFkdTFLV0p0TjktUkV4TzNCUkY5R1hEaHA2akhhd3BWSWVJdDMzTlpWMk9ZUDJvMFp2Rl96ODY1RFlEbjFjMGxoUlRJeVlLM01VQjR5R1k4WTZISjl4LWJCQVhjSHo3ZFp4RC1oRGF1Y1RoZnZoX0xzSnNjTUJ4WEtvSW9VdUw4RWdTNzA3dXhpVmlJZWNrMTd1cmFENEFQNXpxX1lDWGdNMW81N2s3azBibTVsdzFGdkhSZXZjSUZrc1Q3eU8wNU1jdXhBYy1zQW5RX1JobUkzdEJQc1pRaEdzdDV4SmJTT1hwRjc3SGpoVVVrZnZRYVZ2ZXJld20zRWVFRTNyMi1kb29kVXpGNnktTmdQTE4yTFd2Rnk0bnBDYlVoMTBjMzVxSFpueXlXWmFJSlRaMG5CT19TZENlcVY0UjNqb2RELUJIUVJpSkRpZGgxbGd1UGxqb285ZGxZYmhhcUI1Smx4RDJXZ25CWWlLTkg2bFFPZ0xBLlhVZXBBd2s1WmVRMld3bnh1cF93REE"}'}
    -    headers: {cache-control: no-cache, content-length: '5463', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, o56syoqpv6snerwgqnj7figc.vault.azure.net,
    -        /secrets/secret-name/backup, api-version=7.0, '']
    +    body:
    +      string: '{"value":"KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmRFZzlIcUptT2Jra0dVOVFnZXdPUkNiQ2R4ZktQM1FNV3VXcUh3eTAzWmtZaFVTTnNDNFlTSTc3UmRMY3BLRFB1SkFfVjJ5RXhDVHNuY1RKQ1hsZEdXeWRLZ0ZUNmlFaUg0N2RJdDVnT3RZUlhuZ25IcHlnYTBLdVBaYWEyNlhVYTF4UU9OVWxlV2JhQzN6MEJ0U1ZFYnZqSk55Y0t4Y1l6ek9veUJzeTVncWpMUlItSS1jXzNsQUYwUHBVM0VYdjNrQ2VYQ2FKaURSeW9Td2gybHJJYkF1MzRoQ1J3SEVfaXpFSnl4ME5CejFKZVZ0bW5NNmJIZDJsUEdCTjhzZzhoNmZNZmszVGVIbmhRSV9XVHZyeFhDYmE2d2RrTzhHcE5tNGY2cnRXY1ZDNU92QWpPR0p1NXRMN21KVG9EYXlNTzNka0M2V3dlX09ybllURUhOcGppQS40M0N3dVBjOElvNHBfMDg1dmphdW93LkhKN1VXVFQ0bVB3OElBOWQwVzBLR3c0djBRbWloQ3c5YzJFQVhrTXFaWGVLRmZ6Z2lXaHp3WnY1cTBDSUVnNTFrc01GSXdQVjJUUHpBcDdFR3AzeHVyYUszTnVQTlEwRjZvUkZqa3VKTE1WYlVpT3l1OXZ3UEJ3YUtaSklIeWZOUGRuSlRGRkRSN1FnUy1GbUE0RjFUbENhR3FDQ3JDZVpiRHNKUS1xVmY0Tnhma1hES3ZpTS1QWUhDYmZTaDNMa09qMk53QjhHOEU4VV9JcFhKOGlCcEFtMGVGMHpvSmpkbUY1aVpHWl91TWFqU19aaTEySkx4a29VemNmc3RVVmVjalVXZWkwMWJqZGhpbjJtOTZmS1k1UFhaMHluXzlmRkhpaFVEV0dXMDc1cDlhb2VXaFA1TWZZWm4yZnZXeTJQT1lyTWFkUThEZWpOellMTEEydVR1OGlqZmFIOUhOWXF6LWZoQVc0a0h4c0hkNHpBMEpTX0hZeGx4Y1dYUFFlNlFFLS15QXBBNjBIYzJQakJBMDc1b3E5bkRSR1RLX3BCMXJJa2xXYloteTBGSUVVT2pyYjY3Tm1pMGd6TW9neEJZT25qRU9SSzdiVU1vcnBYeUFiWWJhc1p2YUZKejRfb1djNlJOSXdfU0w5Vy1GMWtGWEFPQ2F0YXBTNkdCeFpYMHFTbWlsajU0Rzk4LXNNQmFvTnBJanYtVmVWczlESUVmcUpKbkRBb1BMYnAyZ3BwRm94b1B2c1o4cjRWVUtKUnY4UUlHNmFLdE5mWWxrTFZSdUZWOHQ5RzBEUy05UUVnVXpGU1lBTGZDc0RYQ0tCd0E4MXJJdGJ0bVFKR1FYcVV0VG9XMHp1cEswNG9lZVl2ZzhpSXpTdFFSYTJMckRBa0VneV84U0R5M3Nnbm9sU2MwX2tobWY4MDlsSmJwOWprQW1CMUpHTWFIVGJlSVlnTDVOZloxbkEzOG9Kc3dlcFczaWU4WEhSd3Rwc053NS1TUFF1T0lieVJtVC1sajFOLWpRZTAxendkWHM0Q0NELVFUUDlWaGx3YWNfUWo2enhMWmZiSmd6YmZtWEJRZDdvbXJIUFRzRVFSdVY2UUNkVU5fM0I2R1JuSkNtNTZfMnhFNnB6ZXc1aUN0R1JWTWtJT0RRSHhVSHZialRUc3BwNWZjNlMydk9saE92SDFkTWtNR2JraTRHM0tPV1hBa2ZSaVpIaGozeExKcTNmN1NqRjdKRkhKaHY3SHVCQXZBcnhKeG1XRVJJZ0tldVRNN2ttaF83QVpzNy1FREpGbkJQd1FUbVVQVUFsck1TcmJfeks3TFlwOWZTSktONEpidy15ZTRfOVZLX1hFd0s0Z0IzQkh5X2dLaHFIT01LckZzN2phUnl6WkFwSUZ2Uk5keTFlck55MkJIS2c3N19zSEhfUDBxb1kwOHhTOWNYMXA1SXB2WXV5aEsyQjQtNjVUYldCQ3pUZUFreWw4LVdTTldhWllVbFdKaFN0S1ktdU9sc1g3ZmZFVjJELThKNnBpVmlVMzFZcmVNZGdidk53QkV0c2NLeWczNVVNdVRPSWo2c2lsM0Y2cVE4RGlDZ2dtb1FOT3dhajNIZS1MSnpCS19ydnQ4cE5Nd0hZUUVNSERIQ1Q3YjYxQkN0QVZ3a3NseEJaRG5PMlJvalVra25VS0FLOEUzR01QMDVsLXVQeWFWUzRkNmhrV2tzYlFuRUdpN0JBUHQ0bXJGNXhONVZQLUI4alZlNUhMRi0ybkQ1NzE2SFZ4d2s5WDVHLWYwQjVNUWV3UFVFRnJOYVBIbEVZN3ZkeUNzRklkQVFYeEY4OG5oZnNWUnpFajBHSHZPZDdhY2xTVXVZbUhOYWk1QWo1bzhPdkNYaGNtdWxGY3gxLTR2RlFIQ2pHWXJ4NEZUT3dhVnJWY2hEcVZSNC1Ta3ZmZUxvb09hUGZyNXN4akVuS1lWWjc3aHJXRmM2YTA0TW04V2gtZnQxbkhlR3JRVTFlanJoNTJLVjBYOE9sUkZHUHZ1cWx1QkRMdlNraHJnbWJ4SXBWNnMtaXU2NnRPSGhPNl9Wc0tCTDJOZUo5VTdIaXVWSnR5VlFJbzRCMXNwZjFQRi1PempBUVNCNktCLXZydktaUl9EZ2VURElIZk00bjN5Y0JhdnhWTzRGalp0Wk81NjRFcEdDTGllSFhiZ0lSaTRsZWs3NnZuM1MxWHBQR1JldXhhZ1BCMjNuX0daT18zNXJKUTJCdnU3c3A1ZXBwR2MwWkVXdGpkOTBVbHRpSDdHcDJ1MjBXdTM0RXhCSndzX1ZPSkhRZ2wySVpwNjZBRU1qSDlBWk1wS1AxRkMzNllXR1lmZ1FET3NYT1dRcW1saUpEMklsNmtzT3hiakMzQUxBQ0JUYkx1N014VWlvNi1yTTQ1dzA2NF9sYVJOODNyQ0R4eGdDQXZiYjRlY0JQSkJDdndxUU1uN3ltNzZMbWRaeDVpNHVSdENSRzk4SW0zRm9PU05FdnhpNTJIQ2MtRW9xSWp0WFpfbXNCR0RPQTh5OE4zZktzZW5HZDhacThfTEktVlpMZVZOREwzY1NoX3JIUFhtcjhYUnExcmFnZkFZWFBYa0xJZEJoRk9HVlNySmRnaTdOT2JjaUlXVWpRQ2JyR1IxTmJwWTBlZlhLQ2pBckowVVpqRHRzeF96bm1lcmstYWlpbEthcTJsX1lJSzIzSjZqcHBQTnRyM0hZNlBzRmJ3ZTVoSTRuUmd4TjdYSTFhb1Z0bXJZT0lLYzZuY1ZpWVpOOU5uQU13bGVqNjZPdTg4VVhsNjBjUVFWY1d6NkRuWTlySm4yUlJXb0FNeThDU3NqNy01cGtRZEhlVmczNlVzWUh5QnRDV0R2eXIxQ2d0RGtRR2hla1JzNGF0YUtTTUE3TzA3ejMwcVdRaUV0dGRWR0hrdnZmRDM1dVhueTNkRkJSWWh1OXpnQmVuamFnUTBVaG5fY1pBdVg2M3Q4cTY4aVNLOVRIckdqdHMzcHZUVUhncWYyaThWRFBHLWRaZ1BXQm1nOVFSRi1KcWtySlhzZjF3TTExT1JmdmI1VVhMdWREdGNHZHZ1U3dqM19wMDhHVmU4WVNUbzY2M0t6WnR5ejk3SjBRT1VJRDJJWU5ZSHFrYmxoZ20zUUVGcFFad3J3dF9YMkFtNXBTUVl4UV9xN2V3MzBrSFY3VXI2UkhKSzhkSHpEc3M0TFJTVVhkS3NUQndKVl9wMkJKbUxzOUhYdExXTG80cWFvN0ZJM1pia2FIRjB3RUx0WHlPMTFtdFRSMmk5RkVqdFlHNFhNOFA2TV92REYwT2hfanY3S0lrODR1LVNkY1U3eWxyRlZ0QjNfQ1k1d0xDTWZvV3gxdUIxeVVySTZpdEhqNzZVYzd0N2w4YUxnYUdTM1VoRXAxcGdCSEkxUE5YTXA4bUg2Qmp3cW9JNUFWOXdvMUpVOEU2cm1XS2lYZ0FQc2V1QkdoWktMdUtHb2phYTExMnVXUlFGbEdfYTFQWjJHbU9ZZEtZeWtTTWRsVXA4MnNvTXZudzlQVHhVSzNMM2Vvb2wyeHltZzhIRmYtNDVFQlVad2NiSXJoXzdhYV9wUGtnT1hQQ2IwR3lwM1pZQVo4cUFXQndIUUthZFdKY3ozdTc0TFVSZ3M3ZVN0d3FkWkVZdTVCRGFFd2dxbFdDeVU1MmpIRVNGeWZFMGRXZ21KSEt5SU9odjVPVERaLXo1akZDMi1sMFFiZmNWbXNaVl9uQkhJTEd1RTF5ZkVsY3RFMXFIRWtjUHNyLUt0YnhFbnZqRTNpMTV3M3E1cDg3bldETkdoUUNhS1FlWm0xUmtnRUltUE9XWENEMnViYW1ib0o1UXVIaUhhNVc4LUIxdlNQTEtudVpVY1RtUXFBbE55cHJaandJWXM1NkloMFlsXzA0dnpacDdUUUgyZmNZb1JwQTRSWGR1TTJ4Qmt3R2VTMGlucnBfeXczaU1hbHBnLU40TTFTR08wZG4tNnRjNllUazJ2c19vekZGSkF5MHc2SEFYMlV0dnl1enRQcDloMTlnaFhPTlR0dkxOVVYxRnVzWHljNG5ib29NbWlYV2pwUnRCNEROekxqY0xEcldlNV9CeFM5cTBTSlo2OTdDWTlrS1hjMkt5VTQ1X3NJVW95LTVzcnZoM28tWms3cjhmQUxQUEgyaGdnWjVPODhON1piTXdPclIzVzJETDN6Z09wYnlUdEhqNU1Kbm83TjhLWVB6YU9PbFpiQVJDMWNCb2FWTXZ4S0RIVm1ldlUxdVgtemVqSE8zNjJUMlNSRnA1WFZwc2QxOVlSN0ltbEptMDFuX3drNkRWMTl0VExxMC1pLUhCZ2tsNDZaN3lSWThhSFZIX0t0Tnk2UUVwS01ialBYNDZRNG5NUXZIVld0UFRkeC1tRHBtamVaRk1NV0FnMDhDR3lJVk0yRTdGelFKY0t3OXNrMWtubWxJYVh5WndxajBkVHl2R2VvdmhwWkw5VGItdWtVbmc0ZmNaaUw0c1VsX0JaVnQ1M1pwaUF5dlJqWjcxQlZmODRBbXhYMTR6b0xJV1pjSEg2emdhSjZYcmVRTFhBVm9NeFRVX25YdlhNWVEwSm5WRXJ0RVdpTEtLMTlTLTltclJjU1NpZ0hvazZ6eDBYbkFsblh1VjhIeDlDZ2lsaVQzMWhFM2NmNjZOZ1B1X2hfQUd6QlZVRGx2LTJkSWFEQTRBdFltWWp3LmZKQmM4NTU2dnV5VHRfQk51aTdCLVE"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '5463'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://jzkssw5v3tsy2yrcmsg34xsr.vault.azure.net/secrets/secret-name/backup?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret-name/bc3526d6ddac431bb90696b150724e99","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '210', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, o56syoqpv6snerwgqnj7figc.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret-name/166a7ab1a6e14ca5a30ace8808502918","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '210'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://jzkssw5v3tsy2yrcmsg34xsr.vault.azure.net/secrets/secret-name?api-version=7.1-preview
     - request:
    -    body: '{"value": "KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmtUWkYyN3Z6b2VUSWdaVGh4Z1ZzQ3Z0bGVxc2dTbVd1Vll0YU40OHpPVC1kVGhjdmNPd3BqcWowanVFYk1hemFpS1dsclVYUEs2djE0d3dTeUEzbjdqX29yS3FHNVFWN3pkb3ZjRFYyUGN4d245V190NURpdVJiTkN6VFZFT2F0eWpVcXo4Q2cyMzBzSnM4SGdUaFF1UUM3cFN0YVNvZE9LaUtvQWViSmVuOU1MZDllZS00Y2FFX0M3eFFmVXRONmRxbnRDOTU3WUt0ck9nLVNKR3h0cnluSThSMjBXWWVQV2lTdDZwOXNjM1VBTTZnV2hRNzlaRjFUcWwwb2lPRzJFV2lVaWprbGxjLW9EemE2amh6N2dQVDJXTjV6YXExanJwUjJvdU5BYVIwbFdPRmJwSjU5RnNuMzc4QlFRNTVVSTFTN1RXZkUzTllKTmRaZFhKX05qdy4yM2hXNV81c0ZSQWE4MmZRMy1xeVR3Lk44Y2xuRXpIUjBNQTRaSHJxclVHVUd5OGNUbVZvVFhMSmVXd2ExRlBJT2M1a0VrSmFEUHEwZzlUMmdVaHAxVDczbEd4Vkp6angxdmtJWXhEZ0V3V0ZxNWU4UmlleHNFWVpndFhXSzUtX0JOdXFfYW5ibk5TaUZycUJlTmotSU94QTdiYkg5SmZRa3V6N1pTLXFFdGQ2U0NReWNzTjljejY2SG4wa2lidnljcHdIbG53YUQtWGpCMmRFUlAtaG8zRzZ0U0ZOaEJNdW5IdzJLTVpmU2xEdEVnTkg4OENObFFIdzVHRWVHUEM3MS1IVWhudWJrYWMzQ0lEV1VPUC14OENjangzVThocldpUHltRzItZlR0SXotdWN5eEdfVGV2NFEwX2xIUV9zYWI1TXQ0YTQ1VGJad2V6TjM1MXFLR251b2g4NXpuRTEyZnJZNWt0WFROVmJlRTk3ckxMUjc5elJQdkhZTVkyMmNUX29aNmp0eXZ4MDRtUnB5TlQ4OWxsckUzam5ZQWFicWVmbkpIOGpFSGlOOWQtMkVPRXpjQy1EU2VtUnN1ekVVTlRrcGl5V2tDR00wd0RSMkUycDhNVjRpSVlTSVpEbGdVd0ZTMVJIS0I3aHRHaF9uVWRkZFM5SlFIMDcxNGpOQnItUl9FcVlnWU5DNXFuNE5CTE1WbVJkaDRYNUdmT0JkY1hnUFpUcVBycWNUSHlZZTNYS0FORjlyS3dybmMzcGhVMEUyRlk5RndfTmhmX3Z0YXNjUjAtSkszYVBrTkRtb2tXVmdCM19iNTZSREQxd01zUTVReThYUXhob0NTRFRrWDFyZEJvQ0c0Sk9QcDlQVkFhNEF6MmRLVkZab3ZlaWxXai1zYmQ1M0I2MEgwQkRrWWwzSjlIYkhjNS11aGFUSDdrVi1aM3BiS1Z4cS1RSXh0ZUcya2tZd01mdTRxc1pYTURUcWpxYUtFblItMDlJdmFxcXEwMzFaLTVLQm5oRGl5XzdjRXRWR3pQZVBiUVZSSkFPYy1pTkRPQ3ByWnE5bFRHdmplLTVTNjNMLWs4bUVDTU4xY2hqOVd1eElpdElISDlncEVlT3Z6bkphNDVCOXM4OUZ5VlRQb1ppbTNJMUpEZy1YLUU2N2dJRjczRkxDX0hYUGZURVJNbmF1SjFCRmlSZnZoS3J1dWZZaDVrSzBmd09PeU95TllfOVBrRVpEekl2NXJQcnhOczZQNUNyeDhaSldHZEVoMHk5WS01T19vVmY5ZmZSYXJMZlgxNUZZNEpSc3ZBTjlZeTdYM25weXV3R0RnMzd3ZmNuRlRCN296bWZaLWRQTHV0YzYwSTA4eXhxelJNeFdzM0ZUZ1EtTUJwOEpmZ2I0QVV6NWM3OWM1RDBiQml6QVFCaEVMUnBVZmFCdHRyMmlweWVTZWhlUjFPUWtGdGNUemJkVEs0ZkZKNDM5UUxTU2R4QzZLUFhRZFc2d0Y0a2c5cGttRjBkcnNTM0hwZnlXOGpEd0Q5Vl9IRnRTNEF6U3BibDg5bGp1YTF0eG9TdEZTRFFtQ29QakF0WU1Kblgtbm1wWERZN1JKWTlVTnhIaUJUa2tlZG1rclZiM2VYYTRJdThrVWVsXzlmaGZTUkJRNkNhMUxlM3pzSi1VcTFkMjNwUFNRVWhnYTlDOFBvS1RmUjRJMVFQbkdOVFM4SExJRnhjRW5UdTZaeUxTQXFIdF9mWWtWQ1M0WUhuUzlVSmVtUElwcDRLVHRiQ21Ca2xTdnhwSk9PRHI0d1NiNW5ESHhKUllJMUdSNmRkczFoY041MXNDbFJ1QjJFS08tVmh5M0tGQ0Y2Y2hnQ2NrcS1jLWlnc2pyOXhCTUdFQjI5cHBJTDJmbm9YSXBPMXAyWmQ3bWJtdVN0eEo0bnRJWnVodExTNUlWVTJycG9mWVRTdldPMWZ0dDlvMEExSzRJOWRSeWpwX3poZ2lhaFZIQmFzOEpCUzR6OTZLd1BadXdFUUlTTkZrQkZPcjNBZHBLcnpCRWQtWl9Ed3J3S3VxcjFwUmFrcWhqVWRxb0h1SFFocWhPYlJXX3lSNkUxdXl0eDZWRjgtM1o0ZXloZ25MTWJMVmF2Y3BNM3RqaS1zYTQ2dGRDOTZZUVBpZ3ZWdFEtTmxaOGh2OXI0MFN1Tk5CVk43UjVTX0lrTDloREJwcW82SkxUZGkxNjZUcUczYzRobHJuTnNMYkV4TFVORlEwXzB4MUJIUzR2N1BTU0dyR2ltZkhJRkhUcTVwWVRCSXY3LWo1V1UxZTZtSGhHUEUyLUVOMWxId0xFdFdmYTdoRno1OVlXMFF2aHlLSlFsbEZyQTY1X1BNck0ybkwxWEF5aHliYnhTVnVNWjNIekc1dEhSLVJRYzhORWFQTGdlYTJ4eFkxSUlTVWxmb1g5LXEtcURnelhtbnpQWWdXYXZGUDZVT1g4Y0MxSHgyb2RpODF6NE5lMWE1bGpzeFNwMDR3VWlJOE82SkZDQWx4SnQ3QlJSYzVOUDVLMENmOGlFeUE3U2dnWnpXdXZfb2hITDBtVmkwY3RNWUQ3YmVxLVJXQnpqZkhHazZmcXlHc3NhNGt5ajdHQTRIa3lsZ0xRZ1p1TVppUXdTSzk4Z3JxUktSN3YtMm9EdzRaLWVmNHRNU21vUFdac0l3SzlzbHZnQ3J3VTdGT1dyXzVVRTl0SEx2bEg0OGZuUWlOTHpJelQ1ZmxaUnBDOU4tV2RTRTZUSi1NTnY5bERWdUhUYVJ1bVVjM0EzQW5CVFRpdUdITy03dG5qVkRmaHpfN3g1d3NCc1RJdE9DcjNiM2lEaFJfU1JfSDlUcXNFM3RxMnpPejQxQm1QOGFLT1ZYZWV3YTh4VXYzeXBtYUVxWjFNRk5QdWRtcUEtTVN3T0RKd1liWGNGQldtM3F1aVpFT3N2SmNhSmtKd0FBc2JMN21NSjF5SmM4MU1FY1N0SEJRYzMtai1hdWZGekNUX1VGNjJaeF9jRU5LaVNERW1iWXIzWkx5VTRwbUtGT1ZHVUducjBiVUVzSW42V3QzU1lPbWJOTW1wT2VfR3RYWS1fT3lUNWpXZTFDNVE1bTZ5dlN1cXg3UkVjX1FXZVVraXRHZjZOb3dKUTNOWGYwMGFORk1LZGYxTnhqUDRWUUN5bkxIUTVkc1c3alJfLVBYVEV3WC1TSVc4VDBKS2xjdGhUU2dqRzRtdTNxUktRdGI0dWlYNmNVN2Q0MVg5bFZkb1pNZHgzandQWlk1YWxwelNBdVR0alVHX2xxQVRjWjNuQ254RWxpUWVVbWV6cHQxUlM4dTUzZE9RZ1gzc3FhSlFFSFN6dU5MZmU2elhRZ3laUmFMcGJBdkJVRVVtMXEtZmh0cUZ3S3ZGY3FlV3ItX3ZzS29fOWVQWHlieFVBVUt0S09YQVZ5YUxrZzdCUF95Zk53azUxNEk2TmpsRDZrT0NaTVpmWDJNN3NjbVE4dkdPUTNEMnU0YUVBXzltMkhJc0ZUVjNUbVRud1docHV0MXc3NzF1UGp2cmpsdVU0endXTWp0UHVKQ0VmY2FSWDcyOGZRWHVoV0YtOU1JMDY5c3hHZ2U3dFN1bmUxMmxYTUg2cnFkVURKZExYM1Q0NzZFZDFVMUpuajJFVUFKNlg1ZE9IZ3BuSzd0V2ptZ3NPYjF2alpVY1J3SDRibEdaTVRkVUwzRDBzSWhhSWVOMnlWdU1HLWRiaGRMWUJQM1o5bWhKc2Vzd1Z3T1BLVlY0cHRuemdlM2hCalZmRC12VmpFQ01CMUZvX3JFQm1vMFhJR0JIUHlNNTVKRTdpcGNpdmdMOTRKUi1TazJKUENkT3NpQnQ5Rnl4Q2d0U1dJbkVOcnc0WG1IcVFaY0RRNVlaME9ZdXAzdzB6SGo5RWthTVR5MTFEQVRpbXhqTzFPbkJrSVpZX2tISWQwUkd5bkNuMDVHbUwxazJkNmZ2VkFBcGhTRFpDVXFxUUExWGI0a01pcXo3LWp5R1NWbHJhM3RpRkUxQ3dNU0F3a2hhRENqU1lZdlljNHZJOXZOeW5TekhGa1VPWkxHamItUy1mZjhMQ0FKZjY5QXYtQTBvdWhhYVN2TmQ0SDlNUnF0TnRma0g0bVBsQVlmUXRTSGZLMHpFNS1kR1NFTllKalVIV3ZTV2JrUEFERkNfMmFWZDdnTUJKWHNIWTlRdW8xeXVqU2VkY2RhX3Q1MlZjd0pyRC1MWmFYWTVUM3oxSzV4SzRBNDhQRThFUTFkdTFLV0p0TjktUkV4TzNCUkY5R1hEaHA2akhhd3BWSWVJdDMzTlpWMk9ZUDJvMFp2Rl96ODY1RFlEbjFjMGxoUlRJeVlLM01VQjR5R1k4WTZISjl4LWJCQVhjSHo3ZFp4RC1oRGF1Y1RoZnZoX0xzSnNjTUJ4WEtvSW9VdUw4RWdTNzA3dXhpVmlJZWNrMTd1cmFENEFQNXpxX1lDWGdNMW81N2s3azBibTVsdzFGdkhSZXZjSUZrc1Q3eU8wNU1jdXhBYy1zQW5RX1JobUkzdEJQc1pRaEdzdDV4SmJTT1hwRjc3SGpoVVVrZnZRYVZ2ZXJld20zRWVFRTNyMi1kb29kVXpGNnktTmdQTE4yTFd2Rnk0bnBDYlVoMTBjMzVxSFpueXlXWmFJSlRaMG5CT19TZENlcVY0UjNqb2RELUJIUVJpSkRpZGgxbGd1UGxqb285ZGxZYmhhcUI1Smx4RDJXZ25CWWlLTkg2bFFPZ0xBLlhVZXBBd2s1WmVRMld3bnh1cF93REE"}'
    +    body: '{"value": "KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmRFZzlIcUptT2Jra0dVOVFnZXdPUkNiQ2R4ZktQM1FNV3VXcUh3eTAzWmtZaFVTTnNDNFlTSTc3UmRMY3BLRFB1SkFfVjJ5RXhDVHNuY1RKQ1hsZEdXeWRLZ0ZUNmlFaUg0N2RJdDVnT3RZUlhuZ25IcHlnYTBLdVBaYWEyNlhVYTF4UU9OVWxlV2JhQzN6MEJ0U1ZFYnZqSk55Y0t4Y1l6ek9veUJzeTVncWpMUlItSS1jXzNsQUYwUHBVM0VYdjNrQ2VYQ2FKaURSeW9Td2gybHJJYkF1MzRoQ1J3SEVfaXpFSnl4ME5CejFKZVZ0bW5NNmJIZDJsUEdCTjhzZzhoNmZNZmszVGVIbmhRSV9XVHZyeFhDYmE2d2RrTzhHcE5tNGY2cnRXY1ZDNU92QWpPR0p1NXRMN21KVG9EYXlNTzNka0M2V3dlX09ybllURUhOcGppQS40M0N3dVBjOElvNHBfMDg1dmphdW93LkhKN1VXVFQ0bVB3OElBOWQwVzBLR3c0djBRbWloQ3c5YzJFQVhrTXFaWGVLRmZ6Z2lXaHp3WnY1cTBDSUVnNTFrc01GSXdQVjJUUHpBcDdFR3AzeHVyYUszTnVQTlEwRjZvUkZqa3VKTE1WYlVpT3l1OXZ3UEJ3YUtaSklIeWZOUGRuSlRGRkRSN1FnUy1GbUE0RjFUbENhR3FDQ3JDZVpiRHNKUS1xVmY0Tnhma1hES3ZpTS1QWUhDYmZTaDNMa09qMk53QjhHOEU4VV9JcFhKOGlCcEFtMGVGMHpvSmpkbUY1aVpHWl91TWFqU19aaTEySkx4a29VemNmc3RVVmVjalVXZWkwMWJqZGhpbjJtOTZmS1k1UFhaMHluXzlmRkhpaFVEV0dXMDc1cDlhb2VXaFA1TWZZWm4yZnZXeTJQT1lyTWFkUThEZWpOellMTEEydVR1OGlqZmFIOUhOWXF6LWZoQVc0a0h4c0hkNHpBMEpTX0hZeGx4Y1dYUFFlNlFFLS15QXBBNjBIYzJQakJBMDc1b3E5bkRSR1RLX3BCMXJJa2xXYloteTBGSUVVT2pyYjY3Tm1pMGd6TW9neEJZT25qRU9SSzdiVU1vcnBYeUFiWWJhc1p2YUZKejRfb1djNlJOSXdfU0w5Vy1GMWtGWEFPQ2F0YXBTNkdCeFpYMHFTbWlsajU0Rzk4LXNNQmFvTnBJanYtVmVWczlESUVmcUpKbkRBb1BMYnAyZ3BwRm94b1B2c1o4cjRWVUtKUnY4UUlHNmFLdE5mWWxrTFZSdUZWOHQ5RzBEUy05UUVnVXpGU1lBTGZDc0RYQ0tCd0E4MXJJdGJ0bVFKR1FYcVV0VG9XMHp1cEswNG9lZVl2ZzhpSXpTdFFSYTJMckRBa0VneV84U0R5M3Nnbm9sU2MwX2tobWY4MDlsSmJwOWprQW1CMUpHTWFIVGJlSVlnTDVOZloxbkEzOG9Kc3dlcFczaWU4WEhSd3Rwc053NS1TUFF1T0lieVJtVC1sajFOLWpRZTAxendkWHM0Q0NELVFUUDlWaGx3YWNfUWo2enhMWmZiSmd6YmZtWEJRZDdvbXJIUFRzRVFSdVY2UUNkVU5fM0I2R1JuSkNtNTZfMnhFNnB6ZXc1aUN0R1JWTWtJT0RRSHhVSHZialRUc3BwNWZjNlMydk9saE92SDFkTWtNR2JraTRHM0tPV1hBa2ZSaVpIaGozeExKcTNmN1NqRjdKRkhKaHY3SHVCQXZBcnhKeG1XRVJJZ0tldVRNN2ttaF83QVpzNy1FREpGbkJQd1FUbVVQVUFsck1TcmJfeks3TFlwOWZTSktONEpidy15ZTRfOVZLX1hFd0s0Z0IzQkh5X2dLaHFIT01LckZzN2phUnl6WkFwSUZ2Uk5keTFlck55MkJIS2c3N19zSEhfUDBxb1kwOHhTOWNYMXA1SXB2WXV5aEsyQjQtNjVUYldCQ3pUZUFreWw4LVdTTldhWllVbFdKaFN0S1ktdU9sc1g3ZmZFVjJELThKNnBpVmlVMzFZcmVNZGdidk53QkV0c2NLeWczNVVNdVRPSWo2c2lsM0Y2cVE4RGlDZ2dtb1FOT3dhajNIZS1MSnpCS19ydnQ4cE5Nd0hZUUVNSERIQ1Q3YjYxQkN0QVZ3a3NseEJaRG5PMlJvalVra25VS0FLOEUzR01QMDVsLXVQeWFWUzRkNmhrV2tzYlFuRUdpN0JBUHQ0bXJGNXhONVZQLUI4alZlNUhMRi0ybkQ1NzE2SFZ4d2s5WDVHLWYwQjVNUWV3UFVFRnJOYVBIbEVZN3ZkeUNzRklkQVFYeEY4OG5oZnNWUnpFajBHSHZPZDdhY2xTVXVZbUhOYWk1QWo1bzhPdkNYaGNtdWxGY3gxLTR2RlFIQ2pHWXJ4NEZUT3dhVnJWY2hEcVZSNC1Ta3ZmZUxvb09hUGZyNXN4akVuS1lWWjc3aHJXRmM2YTA0TW04V2gtZnQxbkhlR3JRVTFlanJoNTJLVjBYOE9sUkZHUHZ1cWx1QkRMdlNraHJnbWJ4SXBWNnMtaXU2NnRPSGhPNl9Wc0tCTDJOZUo5VTdIaXVWSnR5VlFJbzRCMXNwZjFQRi1PempBUVNCNktCLXZydktaUl9EZ2VURElIZk00bjN5Y0JhdnhWTzRGalp0Wk81NjRFcEdDTGllSFhiZ0lSaTRsZWs3NnZuM1MxWHBQR1JldXhhZ1BCMjNuX0daT18zNXJKUTJCdnU3c3A1ZXBwR2MwWkVXdGpkOTBVbHRpSDdHcDJ1MjBXdTM0RXhCSndzX1ZPSkhRZ2wySVpwNjZBRU1qSDlBWk1wS1AxRkMzNllXR1lmZ1FET3NYT1dRcW1saUpEMklsNmtzT3hiakMzQUxBQ0JUYkx1N014VWlvNi1yTTQ1dzA2NF9sYVJOODNyQ0R4eGdDQXZiYjRlY0JQSkJDdndxUU1uN3ltNzZMbWRaeDVpNHVSdENSRzk4SW0zRm9PU05FdnhpNTJIQ2MtRW9xSWp0WFpfbXNCR0RPQTh5OE4zZktzZW5HZDhacThfTEktVlpMZVZOREwzY1NoX3JIUFhtcjhYUnExcmFnZkFZWFBYa0xJZEJoRk9HVlNySmRnaTdOT2JjaUlXVWpRQ2JyR1IxTmJwWTBlZlhLQ2pBckowVVpqRHRzeF96bm1lcmstYWlpbEthcTJsX1lJSzIzSjZqcHBQTnRyM0hZNlBzRmJ3ZTVoSTRuUmd4TjdYSTFhb1Z0bXJZT0lLYzZuY1ZpWVpOOU5uQU13bGVqNjZPdTg4VVhsNjBjUVFWY1d6NkRuWTlySm4yUlJXb0FNeThDU3NqNy01cGtRZEhlVmczNlVzWUh5QnRDV0R2eXIxQ2d0RGtRR2hla1JzNGF0YUtTTUE3TzA3ejMwcVdRaUV0dGRWR0hrdnZmRDM1dVhueTNkRkJSWWh1OXpnQmVuamFnUTBVaG5fY1pBdVg2M3Q4cTY4aVNLOVRIckdqdHMzcHZUVUhncWYyaThWRFBHLWRaZ1BXQm1nOVFSRi1KcWtySlhzZjF3TTExT1JmdmI1VVhMdWREdGNHZHZ1U3dqM19wMDhHVmU4WVNUbzY2M0t6WnR5ejk3SjBRT1VJRDJJWU5ZSHFrYmxoZ20zUUVGcFFad3J3dF9YMkFtNXBTUVl4UV9xN2V3MzBrSFY3VXI2UkhKSzhkSHpEc3M0TFJTVVhkS3NUQndKVl9wMkJKbUxzOUhYdExXTG80cWFvN0ZJM1pia2FIRjB3RUx0WHlPMTFtdFRSMmk5RkVqdFlHNFhNOFA2TV92REYwT2hfanY3S0lrODR1LVNkY1U3eWxyRlZ0QjNfQ1k1d0xDTWZvV3gxdUIxeVVySTZpdEhqNzZVYzd0N2w4YUxnYUdTM1VoRXAxcGdCSEkxUE5YTXA4bUg2Qmp3cW9JNUFWOXdvMUpVOEU2cm1XS2lYZ0FQc2V1QkdoWktMdUtHb2phYTExMnVXUlFGbEdfYTFQWjJHbU9ZZEtZeWtTTWRsVXA4MnNvTXZudzlQVHhVSzNMM2Vvb2wyeHltZzhIRmYtNDVFQlVad2NiSXJoXzdhYV9wUGtnT1hQQ2IwR3lwM1pZQVo4cUFXQndIUUthZFdKY3ozdTc0TFVSZ3M3ZVN0d3FkWkVZdTVCRGFFd2dxbFdDeVU1MmpIRVNGeWZFMGRXZ21KSEt5SU9odjVPVERaLXo1akZDMi1sMFFiZmNWbXNaVl9uQkhJTEd1RTF5ZkVsY3RFMXFIRWtjUHNyLUt0YnhFbnZqRTNpMTV3M3E1cDg3bldETkdoUUNhS1FlWm0xUmtnRUltUE9XWENEMnViYW1ib0o1UXVIaUhhNVc4LUIxdlNQTEtudVpVY1RtUXFBbE55cHJaandJWXM1NkloMFlsXzA0dnpacDdUUUgyZmNZb1JwQTRSWGR1TTJ4Qmt3R2VTMGlucnBfeXczaU1hbHBnLU40TTFTR08wZG4tNnRjNllUazJ2c19vekZGSkF5MHc2SEFYMlV0dnl1enRQcDloMTlnaFhPTlR0dkxOVVYxRnVzWHljNG5ib29NbWlYV2pwUnRCNEROekxqY0xEcldlNV9CeFM5cTBTSlo2OTdDWTlrS1hjMkt5VTQ1X3NJVW95LTVzcnZoM28tWms3cjhmQUxQUEgyaGdnWjVPODhON1piTXdPclIzVzJETDN6Z09wYnlUdEhqNU1Kbm83TjhLWVB6YU9PbFpiQVJDMWNCb2FWTXZ4S0RIVm1ldlUxdVgtemVqSE8zNjJUMlNSRnA1WFZwc2QxOVlSN0ltbEptMDFuX3drNkRWMTl0VExxMC1pLUhCZ2tsNDZaN3lSWThhSFZIX0t0Tnk2UUVwS01ialBYNDZRNG5NUXZIVld0UFRkeC1tRHBtamVaRk1NV0FnMDhDR3lJVk0yRTdGelFKY0t3OXNrMWtubWxJYVh5WndxajBkVHl2R2VvdmhwWkw5VGItdWtVbmc0ZmNaaUw0c1VsX0JaVnQ1M1pwaUF5dlJqWjcxQlZmODRBbXhYMTR6b0xJV1pjSEg2emdhSjZYcmVRTFhBVm9NeFRVX25YdlhNWVEwSm5WRXJ0RVdpTEtLMTlTLTltclJjU1NpZ0hvazZ6eDBYbkFsblh1VjhIeDlDZ2lsaVQzMWhFM2NmNjZOZ1B1X2hfQUd6QlZVRGx2LTJkSWFEQTRBdFltWWp3LmZKQmM4NTU2dnV5VHRfQk51aTdCLVE"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['5464']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '5464'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/secrets/restore?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/restore?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret-name/bc3526d6ddac431bb90696b150724e99","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '210', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, o56syoqpv6snerwgqnj7figc.vault.azure.net,
    -        /secrets/restore, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret-name/166a7ab1a6e14ca5a30ace8808502918","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '210'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://jzkssw5v3tsy2yrcmsg34xsr.vault.azure.net/secrets/restore?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secrets_recover.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secrets_recover.yaml
    index b0a95ef2f77f..0aa918d47cea 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secrets_recover.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_samples_secrets_async.test_example_secrets_recover.yaml
    @@ -2,541 +2,1021 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/secrets/secret-name?api-version=7.1-preview
     - request:
         body: '{"value": "secret-value"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['25']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '25'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/84df1a0ecfd84f538cac8387ef619a2e","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '245', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/dce6c8cb955f4e6c85f81df0956d4e5b","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '245'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/secrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1575676623,"scheduledPurgeDate":1583452623,"id":"https://vaultname.vault.azure.net/secrets/secret-name/84df1a0ecfd84f538cac8387ef619a2e","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '370', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1583449592,"scheduledPurgeDate":1591225592,"id":"https://vaultname.vault.azure.net/secrets/secret-name/dce6c8cb955f4e6c85f81df0956d4e5b","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '370'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/secrets/secret-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:09 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:15 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:17 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:20 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:22 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '85', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1575676623,"scheduledPurgeDate":1583452623,"id":"https://vaultname.vault.azure.net/secrets/secret-name/84df1a0ecfd84f538cac8387ef619a2e","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '370', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1583449592,"scheduledPurgeDate":1591225592,"id":"https://vaultname.vault.azure.net/secrets/secret-name/dce6c8cb955f4e6c85f81df0956d4e5b","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '370'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1575676623,"scheduledPurgeDate":1583452623,"id":"https://vaultname.vault.azure.net/secrets/secret-name/84df1a0ecfd84f538cac8387ef619a2e","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '370', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret-name","deletedDate":1583449592,"scheduledPurgeDate":1591225592,"id":"https://vaultname.vault.azure.net/secrets/secret-name/dce6c8cb955f4e6c85f81df0956d4e5b","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '370'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret-name/84df1a0ecfd84f538cac8387ef619a2e","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '222', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /deletedsecrets/secret-name/recover, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret-name/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret-name/dce6c8cb955f4e6c85f81df0956d4e5b","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '222'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/deletedsecrets/secret-name/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '77'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '77', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /secrets/secret-name/, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '77'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:10 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '77', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /secrets/secret-name/, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '77'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '77', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /secrets/secret-name/, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '77'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '77', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /secrets/secret-name/, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '77'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '77', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /secrets/secret-name/, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '77'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '77', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /secrets/secret-name/, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '77'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret-name"}}'}
    -    headers: {cache-control: no-cache, content-length: '77', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /secrets/secret-name/, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret-name"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '77'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/84df1a0ecfd84f538cac8387ef619a2e","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '245', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, zpk27u43vscqevcu4mrnkmt7.vault.azure.net,
    -        /secrets/secret-name/, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/dce6c8cb955f4e6c85f81df0956d4e5b","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '245'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://o2edghnav5auedsfqf3msjqf.vault.azure.net/secrets/secret-name/?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_backup_restore.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_backup_restore.yaml
    index 36959d72a387..f4131e388df7 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_backup_restore.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_backup_restore.yaml
    @@ -2,105 +2,171 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secbak32f60fbc?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secbak32f60fbc?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, s2ribshirip6sivdezzby6g2.vault.azure.net,
    -        /secrets/secbak32f60fbc, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://js3pttwp5rmi7g3f2fy2frhs.vault.azure.net/secrets/secbak32f60fbc?api-version=7.1-preview
     - request:
         body: '{"value": "secVal32f60fbc"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secbak32f60fbc?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secbak32f60fbc?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal32f60fbc","id":"https://vaultname.vault.azure.net/secrets/secbak32f60fbc/6c162f6dd13c42bd98f331a04601b1b7","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '238', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, s2ribshirip6sivdezzby6g2.vault.azure.net,
    -        /secrets/secbak32f60fbc, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal32f60fbc","id":"https://vaultname.vault.azure.net/secrets/secbak32f60fbc/c8a8c44a1fc44dda9383b8d5178f2e8a","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '238'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://js3pttwp5rmi7g3f2fy2frhs.vault.azure.net/secrets/secbak32f60fbc?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/secrets/secbak32f60fbc/backup?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secbak32f60fbc/backup?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLllJdHFjLVh5MzdxTUxxS2twaWdRMnRjTk82R1JXVEUzQnB3VkZkN3dIc2hCVFEtOUZoZjcyRXY0azYzc0RkSUJrWUdIUXRRZ1o2ZEFuUGk3ZEhnWXdpMS1KdjJ2ZjJXOTZzcFd1bF9fNVRXSjlycDdMZVRDbkJ2V2x3cUFYR1dZeDFaOTNhVlV4S1Yxc1hFRmZrTTUyRXZIV1JMelAxSm1LRUpyX0dCY0tmWWNHenhXeUxVNXE4Ykpnek5sU3k3Nmp3djEyS2QxaFNRYUJhUUVSRHVwalg4U1pVb3JwdGdQaFkxLW9PVVpydGo5ekZPVmJIUjFiUl9qMDMtNGY5eC1mY3VrUWVhbUVwMllPbFRRbjY1bElway1PREZ4VVlXZmtHYWE1cGNNdkNHTTFCaWxPRE4xVnNqOTR2MUlDNkN1VkJFQzBXTWtPdUpJbEdJVWpabEpUUS5acXJaeDlDVzlnR3ZGMElHaEY1eHZBLkVKcDExRTZwbGlfWTBTckZfTWtpYnVQY1QzRTF1NlpvQ05QT0kwODkweDMtRXNtT1F0eTZlZWJyXzZPenZjWHE1a21BdU9XMERPZjBva0QtN1FoOE5XOHQtZUlWUzU4bzI0bU90QmxLLVo5ZFNobndOUWljcmR3VGZmYjJ4RlR6cC14cUpYei1oY1c4bElLYmd4YnNFZXQzaGdNdENJalkzRHd0OFZNbnQxOTN3aGplQ1J2a2tMSS02ZlFsVjhVX2NZYUQzTWotUXlFQVlmX1NiaUhhRWRfWDUyRjRlME9KLTEwZ2hMMTA0UDhnc1diT21KLU1xX1VzcFJ1VlViVXhhczF2eTNlekxUeTNkWXlEb2NZRUZPaWNfalRpZnR0VnJhSWlXQi1vTllXbklGZEJFdTVBVjc2YXFfOUhOaEJ5WFg1cU8wWlhtbTdDYVYtcVRLcjZqalQyYUFxZng1WndNTWoyVy1pek54S25ISy1TX05wdTNGanB5ZlJCa2lFV2VnV0lUTjlwR01hV2hsTVpfMzI1ZXBsVktZN2lodjNxSU55dWdscDhHU0lWTUpfOTg5UVI3RlNIN24tWF9UOFVXTXZwR0ttRGlpdDdaVzJDMWh3Slk2YTdoWVo4MUdjcDhRb3FUQmgxeGFBQ3hTVlFOeVdvUDk2VjA5Z1FBSXR4S3RQOTlYOGc1YnljNFE4Y3ZqRUtYcE5GMzdIamM3bVROVUVKX3VjbHhCSDJZbXg2TGRETWpCREZwMllZT2RudU5rbFpRcXhHOGpKOUJ6dnV4QjVVMDlPRG5EdnFiQ1VUT0d6azZiZHJJYjdOVVNKVXBZcENpUzYtNEVTckhxSUx1S2l0QUVrWUNlWllRZURPbmRUWThDOWYtMG05Y0JXeVlUMzB3S19zUl84OEpUMXhiWjdERHpoa0Nub0lQOFlkdkkwNGM1d3I0SGJjS2h6ZkN6U2YtOUpEMUxFQ19ZZkI2aGI1bFlvMlNtR3BWRV80YU5MQjNkZEVncmhJUEl4eERBQzhMSEJheDBsQWlGd2FnRmh3ZFBkWDNad1Bxdk9DNDc1UERrb0tPWUoyUU1sVWFNWjR1WkxJbEpQYWZfNGlDS3JOcERFOGs4UFdRcjhuTmo3UnU1LU5ubThIZ0RLUkFHNmNJVE9reDNtUmR1VmVLZVZSZHB2cmRGU0xaQU11a3M1UE1obFVwMU82T3hOQ2VaMEt5NmFBeFRGLUtCVGdYQ0Nhd2VxZ3J3cGt1MWljbXdacmtRNlZjWngzUWJXaUgzc3owdkdBZGFaMXJoQTNwaW14TDNGYVF6M0pIMXhYTGZ0b3dxZ3Ayamd3SzV5SHZibEdlMEhVMlp0Znd4Ym9WUG9hZTFLczRycDF5bE1DMkdrdTR4NE5IbWhidWJfZFppY1AyMS1hM0d1bDlDWVhFX3FKQlNEZExPaElqQS1pTTNlUU5FeUlDQjI0RzRjMnlIV1BlcVlCRzc3QmhTVmdfOXR1UUZwby1LcHg0S0JxZDNSMFpEQlRzSWt4Zk0teHh6ZHdDblJQTE1hUFJyMGRFOGdZM19WbmlMc0wtX0R5emJobXl2QUtOMVpKbVdyUGY1YTFFaEhjTGxSd2U1UGZDYmxTSGk3VENUUVRjRHVMUWo5dFJYZ0pNbWpYX3RQdG9hd0lOYVlSRHRscmhtZTZvTnd1ZHRnYVN1TVgxX1c5aTUya3NwYUVzWXhfUnVXUDJNd0ZQSllfUk81YVluVGE0NVRJV2NYRFEyZFY4OHBHS1pEOTBmM1ZZa0NMRWpuZ0JpamVYc0RmTy01UktkaDlPbjMyT0Izb1RudXRLYk1yTGlzWGhIRldxa3RYMGh1Yk04QzJ5bVRHMlRrN2pNTGJTOVlwbmVWLVlxaWdXOVRmcFR3aFVzNXpLckJXTUpEZnVmazFodGZ2SDNsSDhMQkhvWldyd3ZJbk9XdU9ZanZHRVNlTWtZTWtNcEdGWjNzcDJrUUpFTHZCZGp1azIzYy04RFI2cDRlNGtKRW1YN3luYVhBM1ppZVhjODZBM2FDNTU2eHNhZzVyQmxzbnRvNjRhVTJmYTVPY2pELVYwTEV2ZTNnSm5adEI0TnJ6TXo4VWhBLXNEX1BPbkhjM1dyX3QycndXOC1odVRFM082cnhjRHhncW1ZZFVyRXlWZDFQZVJCQWhTb2g0dFVrcm9TS0NLSHphOWZJZ2ZDM2FjM2FUNXlWWnVVVjVEWDVFTkdfZzRqaFNZSlg0YkNJTExoMzRWVWswNW9WZC1VaVJGRlpKM2JGaHpZR0kwWUFtaGJQa2JqVzVaOGxMUzZON1I3RUZ2U0ZXRVYyTGh5Y1R5SjlXR0xsZzFCcDBvZl83bl9Sa1hqdWk3eXpORjBTZ2dNaTJjMzUzYVBPcGVha3F4Y3JGeFJvMm85M2lFNkh2Qm84VnhOT1hDVzlzb0sxdmg0TjdHQThsbkduUEtVaWRrQ0Jlakg3eGwtR1Vjb3ctWkF3YW1KaUI1aE5sLXdJSUVlMW5rdWUxOXpyNzBsTllDdWJiRWxna3lkbDFpN2ZIOERvMXlxeUxLODdxb3F4aHVYbXkzNXRFZjdFdEdPN2NOZENERXBteGswMHVtMU9ZNDl2MElXeWVId2lVUGVDdlRXc2hNTmtUWEZLYW5jNDZrck1WNzlVaDJZN3F1aVdkaF90aXI3UFlBbWZqRUhfLXcxMzhlQWFQQXRGV1JLbEVabDN3czFKQXM3R0JZVDhxcW9Pdkg3OUFmeWJnaFhHZzNRVjNNRkdvY3FtTER5WlRvM0t3Z2VWdm14b3FOZF9fLW4tS0hCbDNTUG1WbkNBeXJRR0M4UDBzMkg1MWJGcFF5c1p6NF9maW1LLU90QXdZc3pxZndBekRFTDlOWkZSV3hxd2o4OWxwb3c0ZVZQRl9Dd2U1cXNhU3NvWS1qOWxKV0M3S3pLUEdlaHJwVXNzUEtlVnN6NXd1T1NEYU9CXzQtM0hMRjRTaEI4NmN1a1NwUGhqWTZrY2pEY0gwUEdVaHdaUDFVeUw2RFJLTjF0ZzBPMVJ2UGxVY1J4STVwNzNyRURJR0FVS3c3Y3I2a3VHaEhRa0gxQ1kyOG9iRGFKOGY5SDJDekE1cEZ4NkhHLVk5RWlCSkNJMDNJMUwydUJmXzRuSkdkR2wyRmRSZy03NmlCT1dRbTktQXhYdWZvaWNCT3BhT0tUYXcxck42YzhSSHFZejZhcmFSMG1XUTVsRGFELTJrMlhMcWZMdDFfSEVDNF95d2pqMGI4dFNyamZfOUU0Sno4SFdWcHRfOFl4emRMdVVpUHVFTUROZ092NmluRXl4RUxWSnNIams0SFlYNThSLW1RRGJlMWtsekZNNVFGRkl1U2UxX25aZGtKSHBXUXcwUkE1V0pCTnAtS1c0c2JqbXF1NWFkeEVILVlBZy1WWDdIQUk0b0NFQjZkYU42VUhRLVVPRE9tYm9CaFBBem5RUl9fM0R1ajlCOGQ0ZzJWOGo5WkZiMlBlTVVJZ3RSWEVDeWdSa0dDWmo4dWVZd0U3Sk81X0VmWnBreWtGMEQ5X1FnbHZFVmxsMUJEc0dqMEc4UXJfaURIX0JXLS1URVhDSkFoUWdyRW5kZGVjR3JSVVVLTXlMTC1mNVpiYjg0ZHpqWUFUYTNKVDVzdzBhVDV5c2NjN19TeUdYVV90cXhnSGc0RDZscVN2eTRTbkhXam8xQ19vbHM1ZzRLVHl1MUlZelhZSGViQ0swVWJLU1hfMUZYN3dTdlRDOTFYWm44SFlNWmIza2k4SUpzMDNiem1zTjluZ3pkS081Um9tblRLeXJDV0tSMjlVU3BXTmd0OG1MTGhRTUM3T3BuOFBrWFZnTGdzY3dublp6Y3R5UnBmNlJOTzNYMmRmZHJVRW4tZEZoWUJSOUhQaFZiLVpVNVBlNjhHcXRyYWJXNFNWWW9oUnIyUEliclRGdUZfeFJKUzQxeThXSFdHMTRCcFRYaVR6R3pKUTdvYWNfVGhlNm9FWDFHRXhGWFpQY1ZkdjFKZTk3SVgteGgwUGdyV1VGcEh5UVFva3FaWjI1V2lQRWdFRDF2cmExaHotb1ZCVURGUDNMemNkOS1SUXAycTBaeW8tOGE0cTMzamNzdERuUXZXOURGU25YVHlFS01tYVB5RGVzMnBSUERtendSR3JBbFFUckMycmgwQWloTjhCNTZqMXdkSVRnel9Lamg0bU5HYnoyZ0ZpNjdBZDJZQlkzT3ppVXBjTXFnQkhpbzNxN3FGTnJLSlZlMHJsVkRKcHVfRjBnSXJhenZMTFNIM1JGNGdVMVpISVVfRVpwRy0tNVRXTnRnalZzZV9ZOWx1Q3NBMXJGbFRZUHRGcUZsWF8wemRweDlSWnZQVWdyLTV6YWFxSlZPWFFzc04yUjA5OHQ3dk16VWd2ZmFuZzJURWZQZWlJVS1jamM0TC1VSE9BVGhaV0VPdVF6M3VxbUxrSG51VnR5Wm5mRXpNQnRrbk1IQVNYbTJiS2dJSVV5bUREN2ptc2hhNk5DbURqUVBJeEhyVldrbjdrSE5NTk1yR0NCWDduRFl5ZDVqTk1vTXdZc0JhOHE4cFRKQ1cwX1I0SUVjdHJnY0JLR0VkUElYQ1E4c2hYeVhBVFVJNlZuc0t3aVRjRWswZTVrU09jM1QydDVBcFYzb05JdmphSE5BbWh2WWhnLUpTX3dUN2RvblNTNC1HLVhyWXJSR2tIdVQ0LTlxTDEyQ3BXZ0J0M04wS0JJLkNKS2M5RURfd3JLNjZGRHhTTVo5dXc"}'}
    -    headers: {cache-control: no-cache, content-length: '5491', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, s2ribshirip6sivdezzby6g2.vault.azure.net,
    -        /secrets/secbak32f60fbc/backup, api-version=7.0, '']
    +    body:
    +      string: '{"value":"KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLkRtR3dNZ2txU050Zi1JUl9kb3ZrMGlkMGdvVFItZGVrSzZPMlZGZmF6WkJmXzJ5Wmh2M05TakFOZzcxb0NsN3dVRHV1Z2JHVFY3X0JwQmIyYThBSmEyRXVhTTNHcTJ1TENGOUctY0YxWmliZ1RyWndXZTE1WGxUblBQTXNfRmV5WE54V0dfWEhwbDRpa29WXzhRVE5ZU1p3MkJ5aGRiZFcxSVVJUF90Sk1wV28talNaUnlJLVRnUERIX2lTVGN6Sk5SY3dzSTJUQVpGYmlVc3Z0NUVxbGJ5OGJLVUZpQ1hJVnhWTzlQUGpYNGNsYTctaFE1aFZVTHFqZnNpVzZoRXJMVVRiblFpeDJMVkRFS0lnLW9RVlJjekNuN1F2bGxubFZuT19xOVJ5b2NrT01pZGJyS1hZRGZ3bjNCanlheV9zUnJJek1UZXlJWUdMZm9LWW85ZUFqUS4zRFhjQ25tUDNYM1ZxaDdrcXRpTHBBLk9uSlBnVnFEMVRfY3FuRFVUVHo3V0lucTNoTEpOVENtV0ZGb0U5WHpVMjY5bmI1WkxfeXIzWjE0elRLbEtabExrV2RmdmcyUG1Jb1FjaVlpem02dXZRbHk4eWRkVmhPM19CYXNuNFpVX194OWRXNThobG5qblBpYkpRMmt1ZUNWalZtRDl5cmpoS2N6cnRfaW1EWXZzaDM5S3FqY2lvODJsTW5DY1lqMmJXMWVxMlN2RHhoVVB0RXlKSFJ4YzRRb3NVR0NuQVJlY2NvVGNpT0M0UW1jSWV5VXRKZ0Z0dlZubnVHU2lKU2FBWVFleFUzekYyLUxPVWZBTEM3c0dmM2p2b1QzOVkwV3pOcDg2TWhVcXVFTjczSTJ4aVd1Q3cxczFUeGdjYW9MZFhFd25FU29rNFNYbDJja0VwTGFxRVhwU2NKT2JIUmNTdjRPNEY2UkwxZTZ3MHJoNTRBR3VVM0JuNFhFNTd6dndIalM2MGJ4V212WHNPYThwamQzRV9mWElWcFBfUVVuZkVpNXk2MlVFVHQtY0xlMXBxc2xNNENWS25icmVrVlhFLWNXSGxhNFRXUzBxUDdWaWo3SERTNTJXZURVUWdyX0o3Ty1hR1NYejRveC11VndJZUVsWDJyYU5fcGhzV3hRemVPSkFxaWE1QWVtQ3htNzA0S1YwSVJ4d0lGSmNSQ0o1dmdyUTBuNXB4YmUxYXg5anZrX0wzUHFJbDV5RjNxTE1KQmtweWotOWd4TTZlMHI2c3M4YU12SnRET3pJYk0tamVNem0zS3h1MWVZNEJPaVN1MTlabnJyYXRmSVB1TFNNOUlFcndBR3lqdFdMa3M4WkRzUElGTV9qYnZDdjdGNlZHTmZFaXhmNDFQWlpZS1pscnBMTWo3THBuZnB5VElxdzhTeW9NUFVIMEdXdk1la3RjNHJvTUsxd3pNM0F1aDhfd3VvX2N5TVVuZmx4a3pBbnNXTXl0WFpQeldNV0JvaFhCSHA0N1c1MVpuNjRZOFJ2ZGV4Y25KRDV0dEJoMzR2Zy1ET2pyZXZuaHJad1pVZjBDUjNUcXNMN3gtcF9RczV1YzgxWnhva292VGxSVUdXNHNaS3c5bWZraHYtd2pVRjNMTVZMRElUdFlISDlMQzVWN1VIVWs4YjNCc21hWWlucjdGOV9DbEFGSnJlR2ZyN2ZBUHI0QXhGMno4V0ZnUjR6cmNtU0VGNWJlN2dRbTlTYTNtbEdRSDJoNUFFM3VndkIzS2Z3enFTQ2Y3UE5aQmdzakhzUVFwSVRtSzRiU3dhVTZPTVhFZzhURmdvQkdEVlY2NzMxUVFqQm5ad2VsWEx3YUlpcHE3aEY5WUFMMWZzc0VGalZXYTJkV01hMjRxQmhCSnB5aEUyLUdLTGY4SlZDN3pJLWNZdl9PWjdqSk5BMDRiQ0xDQ3FJVTI1UmFxUU91X0JFOTZLeHR4UFFJb00wbWlGeEFiMEtMdmN5RWlMd2VWOWlYNFJDWm9wakhLUWFPY1lkRUZrUnNNZEw2a0lLLTV2UkNGbjQ5dXpIU19MY1BwWVdkMXozRjNpRVJnZHpWeHNsaDlEaG9Fbi1rOUU4eE5pLVRHOG1uY0E2Ym9YRUlxT3hZLWZnNWRyNW81UURxUzQzRXdKZFFEQjg4ajJSQU00dUpycXhBcW91UjEyeXZxcVBTM0JfSzZ1ZW9BcHhOeFU0dkFFREloNXZQWGNGcjdPY0syczRtS25HM2JCQnBod0VZdW5mdWlzOEFNXzMwSWtxSTVGUzN3YmhjeGNtdkVjcVM1bFRnOGtsVmtfcVVEWVNlZ3FISFdDUEs0ZTg5Vl9BZ2F0OHhFa1l6S0lLaEhjdV9rdmRwTnNHYUw5Zy1zWEZZR2xkS2ZPSzBHUndVbno1MUpUQTJMLUh1MVR5N2FlelBjaGpMb05TU0d4UGVpTE04eXl2MkZ1TWdENzI2WENSV1Y0eDB5bDZvTWR6VmRLcTAza2FzWGp1WkJ4MjA5RFFjLUlzdTU1clJWSVJRZUFvc3lxclFGdEdJUHdnMmUyTTlqYmQ4VmQwUEJyU21qcjBhdHN6RmZseE9UeWM5dXUyeXBRcVpqUXdBX25SZkJFUTdMY1ZHZDZhREJOTUVreVUyZFVqUnYtem9CcGpmSDQyd094OWdMNXkyMGduNV82OU9nQ3ZzTUxHOGhCZUhPVUZvZTZNUVpfeEtiWmFZLW5mWVpsbXhseFZkNG1kYW9vdW9QX0d2b2NuSGktV3RNTzlydGZ6bVkwazB6aExBWXB1d3liUXV0NHZPWUlpUjlyZmYtZU9EcFBWbk56eVdZLWVFRE52VUFHNHNTc3hVZm1IOUc3TFZTTTRab2VMcHd6N0RVdnRtY1lycU43LTVkc2xuMXo1cXoyZjdTQ2VETXM0c2VGS3dJcDVzQkh3YTI4cU5TNWdGX0NRdHA1dkZFNm1fSW5ETWJBejZqUFVOM2U2RnluT0QwWVQ5Y0sxdTN6Z0ZXS2hOUTM1QnYtM1BaaU9UWDc2dXctcm9CeXhMN3dRQlFXWjE5dHVXOGJkcnNuOWNicFJCcWJYeHZSWVA1NjFMc1I4X1pHYXR3b2Q3RHo3R08zdXZPd0RkdzV4c1dtdGNCcjNuZWROcDc4b19UMkxwczgxRERzMFNKU2RXSlZOU1gtZmpXZDJ3V0FDVWdMcE9Eam41Z2s2ZTFBUUtJUVFCNFpOVzZWS0s5UVNUSEw0TURhck02SUFqWGVrOWdrQXJ0U0RubGFneHp2WU9BVXprMjFYOTI2WEVLM3lmcWdVV3ZNOVBxSXdsRENnTXlJT2NTYkNsOVBpMTNOd1Y0Nll6MHhCTkduYUZld3BkTHpobkI1QnFWenJBWGR2Y2U4aTV6c1UxNDVPeDNWVElMSzVSbTlzQ3ZBWGNwd2dSd2Q2WExyLXplUjQ2M3ExeEpzOFFSUEM1QTFEMG9yYVZvckRwNXYtbUpuTE51MVk3aktXVlFLaVF4b0liOXNFRmhGZWFsZXJBa1BudjBZeHgwc2JaSXhMamRmckpmODBNeEt5U1hNQUYxQU01RU12WDl0NHMxUkRUMFA5WmlocFoxblQ4aklVcTlETHpUdk91YXNZb3dOSHVtRl9BOTJpSnlWbmozZmZmS1JIOEZRc2JGX2J4YkJXQmdaM0E2U0hhRG02MzVjZ2FxQzkyZUdtcUt6QXpySEkxWXlJSFRsNWM3SE5DR3J0Y0ZPZ3Y3SDhUUGU3SFd3NkhlWW5GdHFGb0s5dm9JbVlYUDZYYWRvYk10SjFzR3R4VDBZUTgySTlRejNnQVhYNGFLX1pmTzc0dHI3ZlI2Si14QlR2WXpfTV9wY3ZXTFh2WVpwRmtFQkoyeGd3MTZzbF9HdGdfTzNvU0NQc3pQVVdiODR5bEZUX00tNDI3emoxeVNlc2wwcTlqUnRFc0N3OU1RR2N5Q0h5enhQWWx5eHJlcHJHc3JvbVBEQnZHT2lHQ2xaVjdWeEUyNmN1U1paUGlRUE9MY1ZNOTZxUW54N0lncW9EN2Z5TmhGdUJYUEowNnpJeEswRk9FWnlaNXJwa2tmNGptOGZUSzdLZ0lXSlkwTnZZOXNHYkY4QnZVRmdKNzBlMmlsV2x1b0R5WHI5d0dYekJpTlAwZUF0Z1dTbFEyNW9VMG16WkhteDFnSUJacWI2THRJc2E0Um9CUVRnSndDdWNuZjBDckdibThQcVJtanpzdzhRRzR6WmNHSUVPUXV0anJzZGdhX0tOb3luOHVORDdvVThjMDliOERuXzd4RWUzclJBbXhhR1pJRHRYeFgwa0ZpdmxYVjlNTDNYaTVDTFRRMTJzZk5VSFY5WmYyVVlDd2dOTlR3ajd6ektTSGNpX3N6emo4cDJUb2J5OUJtMDVRSjVGV0J1anc3RFRwSi14Z2dHMU9jYjRhTWF5Vnd0UHktMnpqWjlqWEFCR1d2ODh6WFl1WkJtN2VqYUMwR2lOTTl1cjBRdVNaNUhoYUo3dHNEdXl5RWh1NDFMNGFSM1dXYVhMZDNuelhUSnVqVmI4akRva2kyVTdIb1c4WWtPZzJadGhqTkRxdmx5aHJSNjlkRkszZ05UWW1rOU1aWWg5N2VrR2xkUWxuQXRkYV9UYzNadWdZeHNfY3FPTXRUM3ZJTGF0LTNMWDdNSUg0UEN2N3MyWm5OdDEzVDc3dWhsWTVVSklqTmFoQ1cwM2hBWlMxdktTdXItSUdVTm45Y1drNFdISzhUWXEybVotdDZnUFNmNE5Mcm5BX3RvSzdzdW1LWmtDXzZkVncwUGRaM2hmeGd0T0JhTXkxd0xpVXhVcGZUSWFFdlRQRmRfZ3pEanluV3djRjAxU1I3SUVhNTBNSFZVVC1QbzVCM2JxemZ5N0MtRXRuckZIOWhBcDZpd2I3emdHNk8xM0wwaGgyOFM1TE5FNmQydE5GWHJYS3VyZ18xV2lpZUNWbVR4TzAwU2x4T0NPUHdQc1dTLXpRTHJTQ0hGcktEZ1ZyZlBSQVphWVJaVzNXWE5iTjhxWXJraklRX1BIR2FEUjhrNlpDbjAyXy1XTXJMSklOZzRnYk5va0dIeWI3b3UtYV9ZaWY0WFhPRHBsbmxwOGhrUDhlVnRlOGtabkxtVWlQTWRWT1J2TFVJMmZKbHB1cGpzcGVYWlRGSmRCTjdVZDlSMG5PYXVMbWFudzJ3UXlkN2QweTB0dldacVRocVBHMXNWbTREbGFxUHFEVmFsVFVBQWd5VnJZSEwzWlBFLnUyYUZBTGVFR0h2S0w3WTNVU1p2TXc"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '5491'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://js3pttwp5rmi7g3f2fy2frhs.vault.azure.net/secrets/secbak32f60fbc/backup?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secbak32f60fbc?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secbak32f60fbc?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secbak32f60fbc/6c162f6dd13c42bd98f331a04601b1b7","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '213', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, s2ribshirip6sivdezzby6g2.vault.azure.net,
    -        /secrets/secbak32f60fbc, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secbak32f60fbc/c8a8c44a1fc44dda9383b8d5178f2e8a","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '213'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://js3pttwp5rmi7g3f2fy2frhs.vault.azure.net/secrets/secbak32f60fbc?api-version=7.1-preview
     - request:
    -    body: '{"value": "KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLllJdHFjLVh5MzdxTUxxS2twaWdRMnRjTk82R1JXVEUzQnB3VkZkN3dIc2hCVFEtOUZoZjcyRXY0azYzc0RkSUJrWUdIUXRRZ1o2ZEFuUGk3ZEhnWXdpMS1KdjJ2ZjJXOTZzcFd1bF9fNVRXSjlycDdMZVRDbkJ2V2x3cUFYR1dZeDFaOTNhVlV4S1Yxc1hFRmZrTTUyRXZIV1JMelAxSm1LRUpyX0dCY0tmWWNHenhXeUxVNXE4Ykpnek5sU3k3Nmp3djEyS2QxaFNRYUJhUUVSRHVwalg4U1pVb3JwdGdQaFkxLW9PVVpydGo5ekZPVmJIUjFiUl9qMDMtNGY5eC1mY3VrUWVhbUVwMllPbFRRbjY1bElway1PREZ4VVlXZmtHYWE1cGNNdkNHTTFCaWxPRE4xVnNqOTR2MUlDNkN1VkJFQzBXTWtPdUpJbEdJVWpabEpUUS5acXJaeDlDVzlnR3ZGMElHaEY1eHZBLkVKcDExRTZwbGlfWTBTckZfTWtpYnVQY1QzRTF1NlpvQ05QT0kwODkweDMtRXNtT1F0eTZlZWJyXzZPenZjWHE1a21BdU9XMERPZjBva0QtN1FoOE5XOHQtZUlWUzU4bzI0bU90QmxLLVo5ZFNobndOUWljcmR3VGZmYjJ4RlR6cC14cUpYei1oY1c4bElLYmd4YnNFZXQzaGdNdENJalkzRHd0OFZNbnQxOTN3aGplQ1J2a2tMSS02ZlFsVjhVX2NZYUQzTWotUXlFQVlmX1NiaUhhRWRfWDUyRjRlME9KLTEwZ2hMMTA0UDhnc1diT21KLU1xX1VzcFJ1VlViVXhhczF2eTNlekxUeTNkWXlEb2NZRUZPaWNfalRpZnR0VnJhSWlXQi1vTllXbklGZEJFdTVBVjc2YXFfOUhOaEJ5WFg1cU8wWlhtbTdDYVYtcVRLcjZqalQyYUFxZng1WndNTWoyVy1pek54S25ISy1TX05wdTNGanB5ZlJCa2lFV2VnV0lUTjlwR01hV2hsTVpfMzI1ZXBsVktZN2lodjNxSU55dWdscDhHU0lWTUpfOTg5UVI3RlNIN24tWF9UOFVXTXZwR0ttRGlpdDdaVzJDMWh3Slk2YTdoWVo4MUdjcDhRb3FUQmgxeGFBQ3hTVlFOeVdvUDk2VjA5Z1FBSXR4S3RQOTlYOGc1YnljNFE4Y3ZqRUtYcE5GMzdIamM3bVROVUVKX3VjbHhCSDJZbXg2TGRETWpCREZwMllZT2RudU5rbFpRcXhHOGpKOUJ6dnV4QjVVMDlPRG5EdnFiQ1VUT0d6azZiZHJJYjdOVVNKVXBZcENpUzYtNEVTckhxSUx1S2l0QUVrWUNlWllRZURPbmRUWThDOWYtMG05Y0JXeVlUMzB3S19zUl84OEpUMXhiWjdERHpoa0Nub0lQOFlkdkkwNGM1d3I0SGJjS2h6ZkN6U2YtOUpEMUxFQ19ZZkI2aGI1bFlvMlNtR3BWRV80YU5MQjNkZEVncmhJUEl4eERBQzhMSEJheDBsQWlGd2FnRmh3ZFBkWDNad1Bxdk9DNDc1UERrb0tPWUoyUU1sVWFNWjR1WkxJbEpQYWZfNGlDS3JOcERFOGs4UFdRcjhuTmo3UnU1LU5ubThIZ0RLUkFHNmNJVE9reDNtUmR1VmVLZVZSZHB2cmRGU0xaQU11a3M1UE1obFVwMU82T3hOQ2VaMEt5NmFBeFRGLUtCVGdYQ0Nhd2VxZ3J3cGt1MWljbXdacmtRNlZjWngzUWJXaUgzc3owdkdBZGFaMXJoQTNwaW14TDNGYVF6M0pIMXhYTGZ0b3dxZ3Ayamd3SzV5SHZibEdlMEhVMlp0Znd4Ym9WUG9hZTFLczRycDF5bE1DMkdrdTR4NE5IbWhidWJfZFppY1AyMS1hM0d1bDlDWVhFX3FKQlNEZExPaElqQS1pTTNlUU5FeUlDQjI0RzRjMnlIV1BlcVlCRzc3QmhTVmdfOXR1UUZwby1LcHg0S0JxZDNSMFpEQlRzSWt4Zk0teHh6ZHdDblJQTE1hUFJyMGRFOGdZM19WbmlMc0wtX0R5emJobXl2QUtOMVpKbVdyUGY1YTFFaEhjTGxSd2U1UGZDYmxTSGk3VENUUVRjRHVMUWo5dFJYZ0pNbWpYX3RQdG9hd0lOYVlSRHRscmhtZTZvTnd1ZHRnYVN1TVgxX1c5aTUya3NwYUVzWXhfUnVXUDJNd0ZQSllfUk81YVluVGE0NVRJV2NYRFEyZFY4OHBHS1pEOTBmM1ZZa0NMRWpuZ0JpamVYc0RmTy01UktkaDlPbjMyT0Izb1RudXRLYk1yTGlzWGhIRldxa3RYMGh1Yk04QzJ5bVRHMlRrN2pNTGJTOVlwbmVWLVlxaWdXOVRmcFR3aFVzNXpLckJXTUpEZnVmazFodGZ2SDNsSDhMQkhvWldyd3ZJbk9XdU9ZanZHRVNlTWtZTWtNcEdGWjNzcDJrUUpFTHZCZGp1azIzYy04RFI2cDRlNGtKRW1YN3luYVhBM1ppZVhjODZBM2FDNTU2eHNhZzVyQmxzbnRvNjRhVTJmYTVPY2pELVYwTEV2ZTNnSm5adEI0TnJ6TXo4VWhBLXNEX1BPbkhjM1dyX3QycndXOC1odVRFM082cnhjRHhncW1ZZFVyRXlWZDFQZVJCQWhTb2g0dFVrcm9TS0NLSHphOWZJZ2ZDM2FjM2FUNXlWWnVVVjVEWDVFTkdfZzRqaFNZSlg0YkNJTExoMzRWVWswNW9WZC1VaVJGRlpKM2JGaHpZR0kwWUFtaGJQa2JqVzVaOGxMUzZON1I3RUZ2U0ZXRVYyTGh5Y1R5SjlXR0xsZzFCcDBvZl83bl9Sa1hqdWk3eXpORjBTZ2dNaTJjMzUzYVBPcGVha3F4Y3JGeFJvMm85M2lFNkh2Qm84VnhOT1hDVzlzb0sxdmg0TjdHQThsbkduUEtVaWRrQ0Jlakg3eGwtR1Vjb3ctWkF3YW1KaUI1aE5sLXdJSUVlMW5rdWUxOXpyNzBsTllDdWJiRWxna3lkbDFpN2ZIOERvMXlxeUxLODdxb3F4aHVYbXkzNXRFZjdFdEdPN2NOZENERXBteGswMHVtMU9ZNDl2MElXeWVId2lVUGVDdlRXc2hNTmtUWEZLYW5jNDZrck1WNzlVaDJZN3F1aVdkaF90aXI3UFlBbWZqRUhfLXcxMzhlQWFQQXRGV1JLbEVabDN3czFKQXM3R0JZVDhxcW9Pdkg3OUFmeWJnaFhHZzNRVjNNRkdvY3FtTER5WlRvM0t3Z2VWdm14b3FOZF9fLW4tS0hCbDNTUG1WbkNBeXJRR0M4UDBzMkg1MWJGcFF5c1p6NF9maW1LLU90QXdZc3pxZndBekRFTDlOWkZSV3hxd2o4OWxwb3c0ZVZQRl9Dd2U1cXNhU3NvWS1qOWxKV0M3S3pLUEdlaHJwVXNzUEtlVnN6NXd1T1NEYU9CXzQtM0hMRjRTaEI4NmN1a1NwUGhqWTZrY2pEY0gwUEdVaHdaUDFVeUw2RFJLTjF0ZzBPMVJ2UGxVY1J4STVwNzNyRURJR0FVS3c3Y3I2a3VHaEhRa0gxQ1kyOG9iRGFKOGY5SDJDekE1cEZ4NkhHLVk5RWlCSkNJMDNJMUwydUJmXzRuSkdkR2wyRmRSZy03NmlCT1dRbTktQXhYdWZvaWNCT3BhT0tUYXcxck42YzhSSHFZejZhcmFSMG1XUTVsRGFELTJrMlhMcWZMdDFfSEVDNF95d2pqMGI4dFNyamZfOUU0Sno4SFdWcHRfOFl4emRMdVVpUHVFTUROZ092NmluRXl4RUxWSnNIams0SFlYNThSLW1RRGJlMWtsekZNNVFGRkl1U2UxX25aZGtKSHBXUXcwUkE1V0pCTnAtS1c0c2JqbXF1NWFkeEVILVlBZy1WWDdIQUk0b0NFQjZkYU42VUhRLVVPRE9tYm9CaFBBem5RUl9fM0R1ajlCOGQ0ZzJWOGo5WkZiMlBlTVVJZ3RSWEVDeWdSa0dDWmo4dWVZd0U3Sk81X0VmWnBreWtGMEQ5X1FnbHZFVmxsMUJEc0dqMEc4UXJfaURIX0JXLS1URVhDSkFoUWdyRW5kZGVjR3JSVVVLTXlMTC1mNVpiYjg0ZHpqWUFUYTNKVDVzdzBhVDV5c2NjN19TeUdYVV90cXhnSGc0RDZscVN2eTRTbkhXam8xQ19vbHM1ZzRLVHl1MUlZelhZSGViQ0swVWJLU1hfMUZYN3dTdlRDOTFYWm44SFlNWmIza2k4SUpzMDNiem1zTjluZ3pkS081Um9tblRLeXJDV0tSMjlVU3BXTmd0OG1MTGhRTUM3T3BuOFBrWFZnTGdzY3dublp6Y3R5UnBmNlJOTzNYMmRmZHJVRW4tZEZoWUJSOUhQaFZiLVpVNVBlNjhHcXRyYWJXNFNWWW9oUnIyUEliclRGdUZfeFJKUzQxeThXSFdHMTRCcFRYaVR6R3pKUTdvYWNfVGhlNm9FWDFHRXhGWFpQY1ZkdjFKZTk3SVgteGgwUGdyV1VGcEh5UVFva3FaWjI1V2lQRWdFRDF2cmExaHotb1ZCVURGUDNMemNkOS1SUXAycTBaeW8tOGE0cTMzamNzdERuUXZXOURGU25YVHlFS01tYVB5RGVzMnBSUERtendSR3JBbFFUckMycmgwQWloTjhCNTZqMXdkSVRnel9Lamg0bU5HYnoyZ0ZpNjdBZDJZQlkzT3ppVXBjTXFnQkhpbzNxN3FGTnJLSlZlMHJsVkRKcHVfRjBnSXJhenZMTFNIM1JGNGdVMVpISVVfRVpwRy0tNVRXTnRnalZzZV9ZOWx1Q3NBMXJGbFRZUHRGcUZsWF8wemRweDlSWnZQVWdyLTV6YWFxSlZPWFFzc04yUjA5OHQ3dk16VWd2ZmFuZzJURWZQZWlJVS1jamM0TC1VSE9BVGhaV0VPdVF6M3VxbUxrSG51VnR5Wm5mRXpNQnRrbk1IQVNYbTJiS2dJSVV5bUREN2ptc2hhNk5DbURqUVBJeEhyVldrbjdrSE5NTk1yR0NCWDduRFl5ZDVqTk1vTXdZc0JhOHE4cFRKQ1cwX1I0SUVjdHJnY0JLR0VkUElYQ1E4c2hYeVhBVFVJNlZuc0t3aVRjRWswZTVrU09jM1QydDVBcFYzb05JdmphSE5BbWh2WWhnLUpTX3dUN2RvblNTNC1HLVhyWXJSR2tIdVQ0LTlxTDEyQ3BXZ0J0M04wS0JJLkNKS2M5RURfd3JLNjZGRHhTTVo5dXc"}'
    +    body: '{"value": "KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLkRtR3dNZ2txU050Zi1JUl9kb3ZrMGlkMGdvVFItZGVrSzZPMlZGZmF6WkJmXzJ5Wmh2M05TakFOZzcxb0NsN3dVRHV1Z2JHVFY3X0JwQmIyYThBSmEyRXVhTTNHcTJ1TENGOUctY0YxWmliZ1RyWndXZTE1WGxUblBQTXNfRmV5WE54V0dfWEhwbDRpa29WXzhRVE5ZU1p3MkJ5aGRiZFcxSVVJUF90Sk1wV28talNaUnlJLVRnUERIX2lTVGN6Sk5SY3dzSTJUQVpGYmlVc3Z0NUVxbGJ5OGJLVUZpQ1hJVnhWTzlQUGpYNGNsYTctaFE1aFZVTHFqZnNpVzZoRXJMVVRiblFpeDJMVkRFS0lnLW9RVlJjekNuN1F2bGxubFZuT19xOVJ5b2NrT01pZGJyS1hZRGZ3bjNCanlheV9zUnJJek1UZXlJWUdMZm9LWW85ZUFqUS4zRFhjQ25tUDNYM1ZxaDdrcXRpTHBBLk9uSlBnVnFEMVRfY3FuRFVUVHo3V0lucTNoTEpOVENtV0ZGb0U5WHpVMjY5bmI1WkxfeXIzWjE0elRLbEtabExrV2RmdmcyUG1Jb1FjaVlpem02dXZRbHk4eWRkVmhPM19CYXNuNFpVX194OWRXNThobG5qblBpYkpRMmt1ZUNWalZtRDl5cmpoS2N6cnRfaW1EWXZzaDM5S3FqY2lvODJsTW5DY1lqMmJXMWVxMlN2RHhoVVB0RXlKSFJ4YzRRb3NVR0NuQVJlY2NvVGNpT0M0UW1jSWV5VXRKZ0Z0dlZubnVHU2lKU2FBWVFleFUzekYyLUxPVWZBTEM3c0dmM2p2b1QzOVkwV3pOcDg2TWhVcXVFTjczSTJ4aVd1Q3cxczFUeGdjYW9MZFhFd25FU29rNFNYbDJja0VwTGFxRVhwU2NKT2JIUmNTdjRPNEY2UkwxZTZ3MHJoNTRBR3VVM0JuNFhFNTd6dndIalM2MGJ4V212WHNPYThwamQzRV9mWElWcFBfUVVuZkVpNXk2MlVFVHQtY0xlMXBxc2xNNENWS25icmVrVlhFLWNXSGxhNFRXUzBxUDdWaWo3SERTNTJXZURVUWdyX0o3Ty1hR1NYejRveC11VndJZUVsWDJyYU5fcGhzV3hRemVPSkFxaWE1QWVtQ3htNzA0S1YwSVJ4d0lGSmNSQ0o1dmdyUTBuNXB4YmUxYXg5anZrX0wzUHFJbDV5RjNxTE1KQmtweWotOWd4TTZlMHI2c3M4YU12SnRET3pJYk0tamVNem0zS3h1MWVZNEJPaVN1MTlabnJyYXRmSVB1TFNNOUlFcndBR3lqdFdMa3M4WkRzUElGTV9qYnZDdjdGNlZHTmZFaXhmNDFQWlpZS1pscnBMTWo3THBuZnB5VElxdzhTeW9NUFVIMEdXdk1la3RjNHJvTUsxd3pNM0F1aDhfd3VvX2N5TVVuZmx4a3pBbnNXTXl0WFpQeldNV0JvaFhCSHA0N1c1MVpuNjRZOFJ2ZGV4Y25KRDV0dEJoMzR2Zy1ET2pyZXZuaHJad1pVZjBDUjNUcXNMN3gtcF9RczV1YzgxWnhva292VGxSVUdXNHNaS3c5bWZraHYtd2pVRjNMTVZMRElUdFlISDlMQzVWN1VIVWs4YjNCc21hWWlucjdGOV9DbEFGSnJlR2ZyN2ZBUHI0QXhGMno4V0ZnUjR6cmNtU0VGNWJlN2dRbTlTYTNtbEdRSDJoNUFFM3VndkIzS2Z3enFTQ2Y3UE5aQmdzakhzUVFwSVRtSzRiU3dhVTZPTVhFZzhURmdvQkdEVlY2NzMxUVFqQm5ad2VsWEx3YUlpcHE3aEY5WUFMMWZzc0VGalZXYTJkV01hMjRxQmhCSnB5aEUyLUdLTGY4SlZDN3pJLWNZdl9PWjdqSk5BMDRiQ0xDQ3FJVTI1UmFxUU91X0JFOTZLeHR4UFFJb00wbWlGeEFiMEtMdmN5RWlMd2VWOWlYNFJDWm9wakhLUWFPY1lkRUZrUnNNZEw2a0lLLTV2UkNGbjQ5dXpIU19MY1BwWVdkMXozRjNpRVJnZHpWeHNsaDlEaG9Fbi1rOUU4eE5pLVRHOG1uY0E2Ym9YRUlxT3hZLWZnNWRyNW81UURxUzQzRXdKZFFEQjg4ajJSQU00dUpycXhBcW91UjEyeXZxcVBTM0JfSzZ1ZW9BcHhOeFU0dkFFREloNXZQWGNGcjdPY0syczRtS25HM2JCQnBod0VZdW5mdWlzOEFNXzMwSWtxSTVGUzN3YmhjeGNtdkVjcVM1bFRnOGtsVmtfcVVEWVNlZ3FISFdDUEs0ZTg5Vl9BZ2F0OHhFa1l6S0lLaEhjdV9rdmRwTnNHYUw5Zy1zWEZZR2xkS2ZPSzBHUndVbno1MUpUQTJMLUh1MVR5N2FlelBjaGpMb05TU0d4UGVpTE04eXl2MkZ1TWdENzI2WENSV1Y0eDB5bDZvTWR6VmRLcTAza2FzWGp1WkJ4MjA5RFFjLUlzdTU1clJWSVJRZUFvc3lxclFGdEdJUHdnMmUyTTlqYmQ4VmQwUEJyU21qcjBhdHN6RmZseE9UeWM5dXUyeXBRcVpqUXdBX25SZkJFUTdMY1ZHZDZhREJOTUVreVUyZFVqUnYtem9CcGpmSDQyd094OWdMNXkyMGduNV82OU9nQ3ZzTUxHOGhCZUhPVUZvZTZNUVpfeEtiWmFZLW5mWVpsbXhseFZkNG1kYW9vdW9QX0d2b2NuSGktV3RNTzlydGZ6bVkwazB6aExBWXB1d3liUXV0NHZPWUlpUjlyZmYtZU9EcFBWbk56eVdZLWVFRE52VUFHNHNTc3hVZm1IOUc3TFZTTTRab2VMcHd6N0RVdnRtY1lycU43LTVkc2xuMXo1cXoyZjdTQ2VETXM0c2VGS3dJcDVzQkh3YTI4cU5TNWdGX0NRdHA1dkZFNm1fSW5ETWJBejZqUFVOM2U2RnluT0QwWVQ5Y0sxdTN6Z0ZXS2hOUTM1QnYtM1BaaU9UWDc2dXctcm9CeXhMN3dRQlFXWjE5dHVXOGJkcnNuOWNicFJCcWJYeHZSWVA1NjFMc1I4X1pHYXR3b2Q3RHo3R08zdXZPd0RkdzV4c1dtdGNCcjNuZWROcDc4b19UMkxwczgxRERzMFNKU2RXSlZOU1gtZmpXZDJ3V0FDVWdMcE9Eam41Z2s2ZTFBUUtJUVFCNFpOVzZWS0s5UVNUSEw0TURhck02SUFqWGVrOWdrQXJ0U0RubGFneHp2WU9BVXprMjFYOTI2WEVLM3lmcWdVV3ZNOVBxSXdsRENnTXlJT2NTYkNsOVBpMTNOd1Y0Nll6MHhCTkduYUZld3BkTHpobkI1QnFWenJBWGR2Y2U4aTV6c1UxNDVPeDNWVElMSzVSbTlzQ3ZBWGNwd2dSd2Q2WExyLXplUjQ2M3ExeEpzOFFSUEM1QTFEMG9yYVZvckRwNXYtbUpuTE51MVk3aktXVlFLaVF4b0liOXNFRmhGZWFsZXJBa1BudjBZeHgwc2JaSXhMamRmckpmODBNeEt5U1hNQUYxQU01RU12WDl0NHMxUkRUMFA5WmlocFoxblQ4aklVcTlETHpUdk91YXNZb3dOSHVtRl9BOTJpSnlWbmozZmZmS1JIOEZRc2JGX2J4YkJXQmdaM0E2U0hhRG02MzVjZ2FxQzkyZUdtcUt6QXpySEkxWXlJSFRsNWM3SE5DR3J0Y0ZPZ3Y3SDhUUGU3SFd3NkhlWW5GdHFGb0s5dm9JbVlYUDZYYWRvYk10SjFzR3R4VDBZUTgySTlRejNnQVhYNGFLX1pmTzc0dHI3ZlI2Si14QlR2WXpfTV9wY3ZXTFh2WVpwRmtFQkoyeGd3MTZzbF9HdGdfTzNvU0NQc3pQVVdiODR5bEZUX00tNDI3emoxeVNlc2wwcTlqUnRFc0N3OU1RR2N5Q0h5enhQWWx5eHJlcHJHc3JvbVBEQnZHT2lHQ2xaVjdWeEUyNmN1U1paUGlRUE9MY1ZNOTZxUW54N0lncW9EN2Z5TmhGdUJYUEowNnpJeEswRk9FWnlaNXJwa2tmNGptOGZUSzdLZ0lXSlkwTnZZOXNHYkY4QnZVRmdKNzBlMmlsV2x1b0R5WHI5d0dYekJpTlAwZUF0Z1dTbFEyNW9VMG16WkhteDFnSUJacWI2THRJc2E0Um9CUVRnSndDdWNuZjBDckdibThQcVJtanpzdzhRRzR6WmNHSUVPUXV0anJzZGdhX0tOb3luOHVORDdvVThjMDliOERuXzd4RWUzclJBbXhhR1pJRHRYeFgwa0ZpdmxYVjlNTDNYaTVDTFRRMTJzZk5VSFY5WmYyVVlDd2dOTlR3ajd6ektTSGNpX3N6emo4cDJUb2J5OUJtMDVRSjVGV0J1anc3RFRwSi14Z2dHMU9jYjRhTWF5Vnd0UHktMnpqWjlqWEFCR1d2ODh6WFl1WkJtN2VqYUMwR2lOTTl1cjBRdVNaNUhoYUo3dHNEdXl5RWh1NDFMNGFSM1dXYVhMZDNuelhUSnVqVmI4akRva2kyVTdIb1c4WWtPZzJadGhqTkRxdmx5aHJSNjlkRkszZ05UWW1rOU1aWWg5N2VrR2xkUWxuQXRkYV9UYzNadWdZeHNfY3FPTXRUM3ZJTGF0LTNMWDdNSUg0UEN2N3MyWm5OdDEzVDc3dWhsWTVVSklqTmFoQ1cwM2hBWlMxdktTdXItSUdVTm45Y1drNFdISzhUWXEybVotdDZnUFNmNE5Mcm5BX3RvSzdzdW1LWmtDXzZkVncwUGRaM2hmeGd0T0JhTXkxd0xpVXhVcGZUSWFFdlRQRmRfZ3pEanluV3djRjAxU1I3SUVhNTBNSFZVVC1QbzVCM2JxemZ5N0MtRXRuckZIOWhBcDZpd2I3emdHNk8xM0wwaGgyOFM1TE5FNmQydE5GWHJYS3VyZ18xV2lpZUNWbVR4TzAwU2x4T0NPUHdQc1dTLXpRTHJTQ0hGcktEZ1ZyZlBSQVphWVJaVzNXWE5iTjhxWXJraklRX1BIR2FEUjhrNlpDbjAyXy1XTXJMSklOZzRnYk5va0dIeWI3b3UtYV9ZaWY0WFhPRHBsbmxwOGhrUDhlVnRlOGtabkxtVWlQTWRWT1J2TFVJMmZKbHB1cGpzcGVYWlRGSmRCTjdVZDlSMG5PYXVMbWFudzJ3UXlkN2QweTB0dldacVRocVBHMXNWbTREbGFxUHFEVmFsVFVBQWd5VnJZSEwzWlBFLnUyYUZBTGVFR0h2S0w3WTNVU1p2TXc"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['5492']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '5492'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/secrets/restore?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/restore?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secbak32f60fbc/6c162f6dd13c42bd98f331a04601b1b7","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '213', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, s2ribshirip6sivdezzby6g2.vault.azure.net,
    -        /secrets/restore, api-version=7.0, '']
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secbak32f60fbc/c8a8c44a1fc44dda9383b8d5178f2e8a","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '213'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://js3pttwp5rmi7g3f2fy2frhs.vault.azure.net/secrets/restore?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_list_deleted_secrets.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_list_deleted_secrets.yaml
    index ad0d77ed4b4f..d727ba833bb8 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_list_deleted_secrets.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_list_deleted_secrets.yaml
    @@ -2,1717 +2,3533 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret0, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret0?api-version=7.1-preview
     - request:
         body: '{"value": "value0"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/098f31912a8a4e6fbab9b633d438aa5a","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret0, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/b1c402a3ff2747cdac5f01fbf6880fd4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret0?api-version=7.1-preview
     - request:
         body: '{"value": "value1"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/1719ed0b87a844d3b112107e029010dc","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret1, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/84bcc99408f7429aa943a9f62bdaf3ef","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret1?api-version=7.1-preview
     - request:
         body: '{"value": "value2"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/756e7161237f42e2a9bc6f57c333be25","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret2, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/ec90408618ba4c2ea99eb9e1afaf34fe","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret2?api-version=7.1-preview
     - request:
         body: '{"value": "value3"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/ea6b9d26abdb4e00bf611e714081f1ee","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret3, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/d3045b37620d4e7abaa34d761b19a287","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret3?api-version=7.1-preview
     - request:
         body: '{"value": "value4"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/662e71e770774a3eb013ea8fd3f01f4a","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret4, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/f719da4b2e154ae18d813c9d4b17a4c9","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret4?api-version=7.1-preview
     - request:
         body: '{"value": "value5"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/f081fce568f94cafa9789d51cc39eb86","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret5, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/6c78cb27abd84ec6bd4a6996d4b8f1b4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret5?api-version=7.1-preview
     - request:
         body: '{"value": "value6"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/65201ddbd3d34d1abbb8ed4685be08fc","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/dbd6fb24bcc7463e86dc8eeb807c0eb8","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676624,"scheduledPurgeDate":1583452624,"id":"https://vaultname.vault.azure.net/secrets/secret0/098f31912a8a4e6fbab9b633d438aa5a","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:09 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:15 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:17 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:19 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:21 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676624,"scheduledPurgeDate":1583452624,"id":"https://vaultname.vault.azure.net/secrets/secret0/098f31912a8a4e6fbab9b633d438aa5a","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0/b1c402a3ff2747cdac5f01fbf6880fd4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:47 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0/b1c402a3ff2747cdac5f01fbf6880fd4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676652,"scheduledPurgeDate":1583452652,"id":"https://vaultname.vault.azure.net/secrets/secret1/1719ed0b87a844d3b112107e029010dc","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676652,"scheduledPurgeDate":1583452652,"id":"https://vaultname.vault.azure.net/secrets/secret1/1719ed0b87a844d3b112107e029010dc","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449628,"scheduledPurgeDate":1591225628,"id":"https://vaultname.vault.azure.net/secrets/secret1/84bcc99408f7429aa943a9f62bdaf3ef","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:10 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:19 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449628,"scheduledPurgeDate":1591225628,"id":"https://vaultname.vault.azure.net/secrets/secret1/84bcc99408f7429aa943a9f62bdaf3ef","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676669,"scheduledPurgeDate":1583452669,"id":"https://vaultname.vault.azure.net/secrets/secret2/756e7161237f42e2a9bc6f57c333be25","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:48 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:48 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:51 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:52 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:57 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:59 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:06 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:08 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676669,"scheduledPurgeDate":1583452669,"id":"https://vaultname.vault.azure.net/secrets/secret2/756e7161237f42e2a9bc6f57c333be25","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2/ec90408618ba4c2ea99eb9e1afaf34fe","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2/ec90408618ba4c2ea99eb9e1afaf34fe","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"id":"https://vaultname.vault.azure.net/secrets/secret3/ea6b9d26abdb4e00bf611e714081f1ee","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:16 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:18 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:20 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:22 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"id":"https://vaultname.vault.azure.net/secrets/secret3/ea6b9d26abdb4e00bf611e714081f1ee","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449674,"scheduledPurgeDate":1591225674,"id":"https://vaultname.vault.azure.net/secrets/secret3/d3045b37620d4e7abaa34d761b19a287","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449674,"scheduledPurgeDate":1591225674,"id":"https://vaultname.vault.azure.net/secrets/secret3/d3045b37620d4e7abaa34d761b19a287","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"id":"https://vaultname.vault.azure.net/secrets/secret4/662e71e770774a3eb013ea8fd3f01f4a","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"id":"https://vaultname.vault.azure.net/secrets/secret4/662e71e770774a3eb013ea8fd3f01f4a","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449695,"scheduledPurgeDate":1591225695,"id":"https://vaultname.vault.azure.net/secrets/secret4/f719da4b2e154ae18d813c9d4b17a4c9","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:17 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:19 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449695,"scheduledPurgeDate":1591225695,"id":"https://vaultname.vault.azure.net/secrets/secret4/f719da4b2e154ae18d813c9d4b17a4c9","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676729,"scheduledPurgeDate":1583452729,"id":"https://vaultname.vault.azure.net/secrets/secret5/f081fce568f94cafa9789d51cc39eb86","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:49 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:49 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:51 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:53 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:57 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:59 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676729,"scheduledPurgeDate":1583452729,"id":"https://vaultname.vault.azure.net/secrets/secret5/f081fce568f94cafa9789d51cc39eb86","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:09 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5/6c78cb27abd84ec6bd4a6996d4b8f1b4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:47 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:03 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5/6c78cb27abd84ec6bd4a6996d4b8f1b4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret6/65201ddbd3d34d1abbb8ed4685be08fc","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /secrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:15 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:17 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:20 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:22 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret6/65201ddbd3d34d1abbb8ed4685be08fc","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.0
    -  response:
    -    body: {string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676624,"scheduledPurgeDate":1583452624,"id":"https://vaultname.vault.azure.net/secrets/secret0","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676652,"scheduledPurgeDate":1583452652,"id":"https://vaultname.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676669,"scheduledPurgeDate":1583452669,"id":"https://vaultname.vault.azure.net/secrets/secret2","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"id":"https://vaultname.vault.azure.net/secrets/secret3","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"id":"https://vaultname.vault.azure.net/secrets/secret4","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676729,"scheduledPurgeDate":1583452729,"id":"https://vaultname.vault.azure.net/secrets/secret5","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret6","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '2337', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:29 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, djd4gxzl73px7fn7xbftznni.vault.azure.net,
    -        /deletedsecrets, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449746,"scheduledPurgeDate":1591225746,"id":"https://vaultname.vault.azure.net/secrets/secret6/dbd6fb24bcc7463e86dc8eeb807c0eb8","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:07 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:28 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449746,"scheduledPurgeDate":1591225746,"id":"https://vaultname.vault.azure.net/secrets/secret6/dbd6fb24bcc7463e86dc8eeb807c0eb8","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449628,"scheduledPurgeDate":1591225628,"id":"https://vaultname.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449674,"scheduledPurgeDate":1591225674,"id":"https://vaultname.vault.azure.net/secrets/secret3","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449695,"scheduledPurgeDate":1591225695,"id":"https://vaultname.vault.azure.net/secrets/secret4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449746,"scheduledPurgeDate":1591225746,"id":"https://vaultname.vault.azure.net/secrets/secret6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2337'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://opfpvmicmffj5uxassnlxyly.vault.azure.net/deletedsecrets?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_list_versions.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_list_versions.yaml
    index 2acecaeb9427..51ef57706187 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_list_versions.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_list_versions.yaml
    @@ -2,211 +2,346 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cmpthrnemi6qr4ddi4dx3vno.vault.azure.net,
    -        /secrets/sec24c80f77, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://qgoswkoqhvfopapmxbfvzbqu.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
     - request:
         body: '{"value": "secVal24c80f77"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/c4e91791f16d4fe2ba9fdc8f0dbf9b91","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cmpthrnemi6qr4ddi4dx3vno.vault.azure.net,
    -        /secrets/sec24c80f77, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/642e3b1a544647f0b35f0d89afff62ce","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '247'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qgoswkoqhvfopapmxbfvzbqu.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
     - request:
         body: '{"value": "secVal24c80f77"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/f0badf42d499416db125807118e79613","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cmpthrnemi6qr4ddi4dx3vno.vault.azure.net,
    -        /secrets/sec24c80f77, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/3ce1740a93d94b399a09f695a4c86021","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '247'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qgoswkoqhvfopapmxbfvzbqu.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
     - request:
         body: '{"value": "secVal24c80f77"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/80d5662efd4a460c9fbaec02ec140853","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cmpthrnemi6qr4ddi4dx3vno.vault.azure.net,
    -        /secrets/sec24c80f77, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/946585d6b61645209e972c7f911eb332","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '247'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qgoswkoqhvfopapmxbfvzbqu.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
     - request:
         body: '{"value": "secVal24c80f77"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/226fbef448624d22bf4e4a2b7367ae46","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cmpthrnemi6qr4ddi4dx3vno.vault.azure.net,
    -        /secrets/sec24c80f77, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/d488ba48723a4584a39ae329dffc344e","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '247'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qgoswkoqhvfopapmxbfvzbqu.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
     - request:
         body: '{"value": "secVal24c80f77"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/81110e22d872440faf22bb301ecbed7d","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cmpthrnemi6qr4ddi4dx3vno.vault.azure.net,
    -        /secrets/sec24c80f77, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/744dadbe5ac54d25b8ea01d5f76aa12f","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '247'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qgoswkoqhvfopapmxbfvzbqu.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
     - request:
         body: '{"value": "secVal24c80f77"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/b967e7192ea74912a6d0ac5cce224524","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cmpthrnemi6qr4ddi4dx3vno.vault.azure.net,
    -        /secrets/sec24c80f77, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/8027db52fbab4dc0b26156e019f9c4c9","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '247'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qgoswkoqhvfopapmxbfvzbqu.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
     - request:
         body: '{"value": "secVal24c80f77"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/ad83bcbb0d39494e987262a9e7e8bad2","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cmpthrnemi6qr4ddi4dx3vno.vault.azure.net,
    -        /secrets/sec24c80f77, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal24c80f77","id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/4d19545e7ccd4dada389db729f89bf83","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '247'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qgoswkoqhvfopapmxbfvzbqu.vault.azure.net/secrets/sec24c80f77?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77/versions?maxresults=6&api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec24c80f77/versions?maxresults=6&api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/226fbef448624d22bf4e4a2b7367ae46","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/80d5662efd4a460c9fbaec02ec140853","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/81110e22d872440faf22bb301ecbed7d","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/ad83bcbb0d39494e987262a9e7e8bad2","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/b967e7192ea74912a6d0ac5cce224524","attributes":{"enabled":true,"created":1575676624,"updated":1575676624,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/c4e91791f16d4fe2ba9fdc8f0dbf9b91","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/secrets/sec24c80f77/versions?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXhJWE5sWTNKbGRDOVRSVU15TkVNNE1FWTNOeTlHTUVKQlJFWTBNa1EwT1RrME1UWkVRakV5TlRnd056RXhPRVUzT1RZeE15RXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'}
    -    headers: {cache-control: no-cache, content-length: '1640', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, cmpthrnemi6qr4ddi4dx3vno.vault.azure.net,
    -        /secrets/sec24c80f77/versions, maxresults=6&api-version=7.0, '']
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/3ce1740a93d94b399a09f695a4c86021","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/4d19545e7ccd4dada389db729f89bf83","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/642e3b1a544647f0b35f0d89afff62ce","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/744dadbe5ac54d25b8ea01d5f76aa12f","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/8027db52fbab4dc0b26156e019f9c4c9","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/946585d6b61645209e972c7f911eb332","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/secrets/sec24c80f77/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXhJWE5sWTNKbGRDOVRSVU15TkVNNE1FWTNOeTlFTkRnNFFrRTBPRGN5TTBFME5UZzBRVE01UVVVek1qbEVSa1pETXpRMFJTRXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1720'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qgoswkoqhvfopapmxbfvzbqu.vault.azure.net/secrets/sec24c80f77/versions?maxresults=6&api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net:443/secrets/sec24c80f77/versions?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXhJWE5sWTNKbGRDOVRSVU15TkVNNE1FWTNOeTlHTUVKQlJFWTBNa1EwT1RrME1UWkVRakV5TlRnd056RXhPRVUzT1RZeE15RXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
    +    uri: https://vaultname.vault.azure.net:443/secrets/sec24c80f77/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXhJWE5sWTNKbGRDOVRSVU15TkVNNE1FWTNOeTlFTkRnNFFrRTBPRGN5TTBFME5UZzBRVE01UVVVek1qbEVSa1pETXpRMFJTRXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/f0badf42d499416db125807118e79613","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}}],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '238', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, 'cmpthrnemi6qr4ddi4dx3vno.vault.azure.net:443',
    -        /secrets/sec24c80f77/versions, api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXhJWE5sWTNKbGRDOVRSVU15TkVNNE1FWTNOeTlHTUVKQlJFWTBNa1EwT1RrME1UWkVRakV5TlRnd056RXhPRVUzT1RZeE15RXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6,
    -        '']
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/sec24c80f77/d488ba48723a4584a39ae329dffc344e","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '250'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://qgoswkoqhvfopapmxbfvzbqu.vault.azure.net:443/secrets/sec24c80f77/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMjghTURBd01EVXhJWE5sWTNKbGRDOVRSVU15TkVNNE1FWTNOeTlFTkRnNFFrRTBPRGN5TTBFME5UZzBRVE01UVVVek1qbEVSa1pETXpRMFJTRXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS0iLCJUYXJnZXRMb2NhdGlvbiI6MH0&maxresults=6
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_logging_disabled.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_logging_disabled.yaml
    index 4222a6d5ce5e..77a2edef8a0f 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_logging_disabled.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_logging_disabled.yaml
    @@ -2,46 +2,74 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:25 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, txywwziifahryawz2jwodo5o.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://yco4raopf5jdq6lkif7rzv5c.vault.azure.net/secrets/secret-name?api-version=7.1-preview
     - request:
         body: '{"value": "secret-value"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['25']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '25'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/b76fcb600a5e49a1ab4b32c738d4e5bd","attributes":{"enabled":true,"created":1575676706,"updated":1575676706,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '233', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, txywwziifahryawz2jwodo5o.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/7469acec80a3414885713c2c86de02dc","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '245'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://yco4raopf5jdq6lkif7rzv5c.vault.azure.net/secrets/secret-name?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_logging_enabled.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_logging_enabled.yaml
    index dc3e5ae3b0f3..354e7c7033f0 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_logging_enabled.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_logging_enabled.yaml
    @@ -2,46 +2,74 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:09 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, atlh67ffouybx4chhv2u4jcz.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://yx65ugvbq6bpyl4n374ylk43.vault.azure.net/secrets/secret-name?api-version=7.1-preview
     - request:
         body: '{"value": "secret-value"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['25']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '25'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/eaea55c1cb6d45b79face8ba00aaa394","attributes":{"enabled":true,"created":1575676690,"updated":1575676690,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '233', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, atlh67ffouybx4chhv2u4jcz.vault.azure.net,
    -        /secrets/secret-name, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/9b24e31a55ea4a979ceba11d19bbc9ae","attributes":{"enabled":true,"created":1583449594,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '245'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://yx65ugvbq6bpyl4n374ylk43.vault.azure.net/secrets/secret-name?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_purge.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_purge.yaml
    index fe48879ba682..6e024a17f0f9 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_purge.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_purge.yaml
    @@ -2,1896 +2,3722 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:39 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret0, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret0?api-version=7.1-preview
     - request:
         body: '{"value": "value0"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/e9e552a414e248bb8204c3526b5eb689","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret0, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/823c36687ba243edade1064bb65d7f13","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret0?api-version=7.1-preview
     - request:
         body: '{"value": "value1"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/1fe6be5dbc8b4c9dbc22374d63ea16ba","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret1, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/ff05c69254004e70a3f69efa49beab46","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret1?api-version=7.1-preview
     - request:
         body: '{"value": "value2"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/10fe403a88184c89aba4f8d276ff3301","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret2, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/68d17c8a33eb4941b86931a89d7afda4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret2?api-version=7.1-preview
     - request:
         body: '{"value": "value3"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/25265ae1de7249dab8bd771cae0ddce8","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret3, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/442739cb1dd842e4a3b149f0c9d4e4e0","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret3?api-version=7.1-preview
     - request:
         body: '{"value": "value4"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/4b129ff572dd4e5a8abceb25e4dbc424","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret4, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/853f11ad3fd442c4a407067db3c6293a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret4?api-version=7.1-preview
     - request:
         body: '{"value": "value5"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/b10dda3023714a7b8820b3e6f894218d","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret5, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/cb9da5cee6b14cf19afdfb6708f0e359","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret5?api-version=7.1-preview
     - request:
         body: '{"value": "value6"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/94c72378210a446d99758ee0cb0d6dc4","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/f606f87714f744d5815646b3f486e2ce","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676661,"scheduledPurgeDate":1583452661,"id":"https://vaultname.vault.azure.net/secrets/secret0/e9e552a414e248bb8204c3526b5eb689","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:48 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:52 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:54 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:57 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:59 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:06 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:08 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676661,"scheduledPurgeDate":1583452661,"id":"https://vaultname.vault.azure.net/secrets/secret0/e9e552a414e248bb8204c3526b5eb689","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0/823c36687ba243edade1064bb65d7f13","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:47 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:03 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0/823c36687ba243edade1064bb65d7f13","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"id":"https://vaultname.vault.azure.net/secrets/secret1/1fe6be5dbc8b4c9dbc22374d63ea16ba","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:16 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:18 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:20 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:22 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"id":"https://vaultname.vault.azure.net/secrets/secret1/1fe6be5dbc8b4c9dbc22374d63ea16ba","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449628,"scheduledPurgeDate":1591225628,"id":"https://vaultname.vault.azure.net/secrets/secret1/ff05c69254004e70a3f69efa49beab46","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:10 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449628,"scheduledPurgeDate":1591225628,"id":"https://vaultname.vault.azure.net/secrets/secret1/ff05c69254004e70a3f69efa49beab46","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"id":"https://vaultname.vault.azure.net/secrets/secret2/10fe403a88184c89aba4f8d276ff3301","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"id":"https://vaultname.vault.azure.net/secrets/secret2/10fe403a88184c89aba4f8d276ff3301","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:48 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449645,"scheduledPurgeDate":1591225645,"id":"https://vaultname.vault.azure.net/secrets/secret2/68d17c8a33eb4941b86931a89d7afda4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:47 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449645,"scheduledPurgeDate":1591225645,"id":"https://vaultname.vault.azure.net/secrets/secret2/68d17c8a33eb4941b86931a89d7afda4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676731,"scheduledPurgeDate":1583452731,"id":"https://vaultname.vault.azure.net/secrets/secret3/25265ae1de7249dab8bd771cae0ddce8","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:52 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:54 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:57 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:59 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676731,"scheduledPurgeDate":1583452731,"id":"https://vaultname.vault.azure.net/secrets/secret3/25265ae1de7249dab8bd771cae0ddce8","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:09 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449674,"scheduledPurgeDate":1591225674,"id":"https://vaultname.vault.azure.net/secrets/secret3/442739cb1dd842e4a3b149f0c9d4e4e0","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449674,"scheduledPurgeDate":1591225674,"id":"https://vaultname.vault.azure.net/secrets/secret3/442739cb1dd842e4a3b149f0c9d4e4e0","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret4/4b129ff572dd4e5a8abceb25e4dbc424","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:15 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:18 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:20 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:22 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret4/4b129ff572dd4e5a8abceb25e4dbc424","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449695,"scheduledPurgeDate":1591225695,"id":"https://vaultname.vault.azure.net/secrets/secret4/853f11ad3fd442c4a407067db3c6293a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:19 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449695,"scheduledPurgeDate":1591225695,"id":"https://vaultname.vault.azure.net/secrets/secret4/853f11ad3fd442c4a407067db3c6293a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"id":"https://vaultname.vault.azure.net/secrets/secret5/b10dda3023714a7b8820b3e6f894218d","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"id":"https://vaultname.vault.azure.net/secrets/secret5/b10dda3023714a7b8820b3e6f894218d","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5/cb9da5cee6b14cf19afdfb6708f0e359","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5/cb9da5cee6b14cf19afdfb6708f0e359","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676789,"scheduledPurgeDate":1583452789,"id":"https://vaultname.vault.azure.net/secrets/secret6/94c72378210a446d99758ee0cb0d6dc4","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:48 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /secrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:48 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:52 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:54 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:56 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:59 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:08 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676789,"scheduledPurgeDate":1583452789,"id":"https://vaultname.vault.azure.net/secrets/secret6/94c72378210a446d99758ee0cb0d6dc4","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.0
    -  response:
    -    body: {string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676661,"scheduledPurgeDate":1583452661,"id":"https://vaultname.vault.azure.net/secrets/secret0","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676692,"scheduledPurgeDate":1583452692,"id":"https://vaultname.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"id":"https://vaultname.vault.azure.net/secrets/secret2","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676731,"scheduledPurgeDate":1583452731,"id":"https://vaultname.vault.azure.net/secrets/secret3","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret4","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"id":"https://vaultname.vault.azure.net/secrets/secret5","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676789,"scheduledPurgeDate":1583452789,"id":"https://vaultname.vault.azure.net/secrets/secret6","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '2337', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449745,"scheduledPurgeDate":1591225745,"id":"https://vaultname.vault.azure.net/secrets/secret6/f606f87714f744d5815646b3f486e2ce","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:07 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:17 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:19 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:28 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449745,"scheduledPurgeDate":1591225745,"id":"https://vaultname.vault.azure.net/secrets/secret6/f606f87714f744d5815646b3f486e2ce","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449628,"scheduledPurgeDate":1591225628,"id":"https://vaultname.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449645,"scheduledPurgeDate":1591225645,"id":"https://vaultname.vault.azure.net/secrets/secret2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449674,"scheduledPurgeDate":1591225674,"id":"https://vaultname.vault.azure.net/secrets/secret3","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449695,"scheduledPurgeDate":1591225695,"id":"https://vaultname.vault.azure.net/secrets/secret4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449745,"scheduledPurgeDate":1591225745,"id":"https://vaultname.vault.azure.net/secrets/secret6","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2337'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:00:12 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Thu, 05 Mar 2020 23:09:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:00:12 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Thu, 05 Mar 2020 23:09:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:00:12 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Thu, 05 Mar 2020 23:09:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:00:12 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Thu, 05 Mar 2020 23:09:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:00:12 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Thu, 05 Mar 2020 23:09:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:00:13 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Thu, 05 Mar 2020 23:09:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers: {cache-control: no-cache, date: 'Sat, 07 Dec 2019 00:00:13 GMT', expires: '-1',
    -      pragma: no-cache, server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 204, message: No Content}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, orr7l44mgdbg5jlx3cv2t5v5.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control: no-cache
    +      date: Thu, 05 Mar 2020 23:09:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +    url: https://plibb3zvtfcxnngp47e32l7r.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_recover.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_recover.yaml
    index c6cd7d1f35b3..223d10298f60 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_recover.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_recover.yaml
    @@ -2,3376 +2,6974 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0?api-version=7.1-preview
     - request:
         body: '{"value": "value0"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/634ea92a127e4f4b970fda55340be23e","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/8ce31a8134224f10ace16716ca864068","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0?api-version=7.1-preview
     - request:
         body: '{"value": "value1"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/1d891f4b8c8c46a5a47dc431ea319a54","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/afd3468dc8874729995eb56351fe88a8","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1?api-version=7.1-preview
     - request:
         body: '{"value": "value2"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/30dc4950641747d684367517dc8c91c8","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/d7289e4ab2a3427c9374a605aa71b92a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2?api-version=7.1-preview
     - request:
         body: '{"value": "value3"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/af029653ec654a1d834f55fac0e93598","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/b2215d1b722042cdad20fc938e846428","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3?api-version=7.1-preview
     - request:
         body: '{"value": "value4"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/0a591c993e5c4743bd5abcf157eda5de","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/fe69e27bd4bb49ae8abc35ac07eb3cca","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4?api-version=7.1-preview
     - request:
         body: '{"value": "value5"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/aeda85b6e874420690df6616fd22d3f5","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret5, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/9f7c886cda8f4d078a2d460748eb31ea","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5?api-version=7.1-preview
     - request:
         body: '{"value": "value6"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/eb3088af4e2743359fb872262a511f7c","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/98b321b409144ad4a5561ea940a13e7e","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676727,"scheduledPurgeDate":1583452727,"id":"https://vaultname.vault.azure.net/secrets/secret0/634ea92a127e4f4b970fda55340be23e","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:49 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:51 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:53 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:06 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:08 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676727,"scheduledPurgeDate":1583452727,"id":"https://vaultname.vault.azure.net/secrets/secret0/634ea92a127e4f4b970fda55340be23e","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0/8ce31a8134224f10ace16716ca864068","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:47 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0/8ce31a8134224f10ace16716ca864068","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret1/1d891f4b8c8c46a5a47dc431ea319a54","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:17 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:19 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:21 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret1/1d891f4b8c8c46a5a47dc431ea319a54","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret1, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449628,"scheduledPurgeDate":1591225628,"id":"https://vaultname.vault.azure.net/secrets/secret1/afd3468dc8874729995eb56351fe88a8","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:10 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449628,"scheduledPurgeDate":1591225628,"id":"https://vaultname.vault.azure.net/secrets/secret1/afd3468dc8874729995eb56351fe88a8","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676769,"scheduledPurgeDate":1583452769,"id":"https://vaultname.vault.azure.net/secrets/secret2/30dc4950641747d684367517dc8c91c8","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:29 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:29 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:31 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:33 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:39 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:41 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:43 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:45 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676769,"scheduledPurgeDate":1583452769,"id":"https://vaultname.vault.azure.net/secrets/secret2/30dc4950641747d684367517dc8c91c8","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret2, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2/d7289e4ab2a3427c9374a605aa71b92a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2/d7289e4ab2a3427c9374a605aa71b92a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676789,"scheduledPurgeDate":1583452789,"id":"https://vaultname.vault.azure.net/secrets/secret3/af029653ec654a1d834f55fac0e93598","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:49 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:49 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:51 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:54 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:56 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:59:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:06 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:08 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676789,"scheduledPurgeDate":1583452789,"id":"https://vaultname.vault.azure.net/secrets/secret3/af029653ec654a1d834f55fac0e93598","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret3, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449675,"scheduledPurgeDate":1591225675,"id":"https://vaultname.vault.azure.net/secrets/secret3/b2215d1b722042cdad20fc938e846428","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:07 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449675,"scheduledPurgeDate":1591225675,"id":"https://vaultname.vault.azure.net/secrets/secret3/b2215d1b722042cdad20fc938e846428","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676812,"scheduledPurgeDate":1583452812,"id":"https://vaultname.vault.azure.net/secrets/secret4/0a591c993e5c4743bd5abcf157eda5de","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:16 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:18 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:20 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:22 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676812,"scheduledPurgeDate":1583452812,"id":"https://vaultname.vault.azure.net/secrets/secret4/0a591c993e5c4743bd5abcf157eda5de","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret4, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449696,"scheduledPurgeDate":1591225696,"id":"https://vaultname.vault.azure.net/secrets/secret4/fe69e27bd4bb49ae8abc35ac07eb3cca","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:17 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449696,"scheduledPurgeDate":1591225696,"id":"https://vaultname.vault.azure.net/secrets/secret4/fe69e27bd4bb49ae8abc35ac07eb3cca","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676829,"scheduledPurgeDate":1583452829,"id":"https://vaultname.vault.azure.net/secrets/secret5/aeda85b6e874420690df6616fd22d3f5","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:28 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:30 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:40 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:42 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:45 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676829,"scheduledPurgeDate":1583452829,"id":"https://vaultname.vault.azure.net/secrets/secret5/aeda85b6e874420690df6616fd22d3f5","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:49 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret5, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449721,"scheduledPurgeDate":1591225721,"id":"https://vaultname.vault.azure.net/secrets/secret5/9f7c886cda8f4d078a2d460748eb31ea","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:47 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:49 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:08:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:04 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449721,"scheduledPurgeDate":1591225721,"id":"https://vaultname.vault.azure.net/secrets/secret5/9f7c886cda8f4d078a2d460748eb31ea","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676851,"scheduledPurgeDate":1583452851,"id":"https://vaultname.vault.azure.net/secrets/secret6/eb3088af4e2743359fb872262a511f7c","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:51 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:51 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:53 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:56 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:00:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:06 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '81', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:08 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676851,"scheduledPurgeDate":1583452851,"id":"https://vaultname.vault.azure.net/secrets/secret6/eb3088af4e2743359fb872262a511f7c","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '362', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret6, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.0
    -  response:
    -    body: {string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676727,"scheduledPurgeDate":1583452727,"id":"https://vaultname.vault.azure.net/secrets/secret0","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676769,"scheduledPurgeDate":1583452769,"id":"https://vaultname.vault.azure.net/secrets/secret2","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676789,"scheduledPurgeDate":1583452789,"id":"https://vaultname.vault.azure.net/secrets/secret3","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676812,"scheduledPurgeDate":1583452812,"id":"https://vaultname.vault.azure.net/secrets/secret4","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676829,"scheduledPurgeDate":1583452829,"id":"https://vaultname.vault.azure.net/secrets/secret5","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676851,"scheduledPurgeDate":1583452851,"id":"https://vaultname.vault.azure.net/secrets/secret6","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '2337', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449746,"scheduledPurgeDate":1591225746,"id":"https://vaultname.vault.azure.net/secrets/secret6/98b321b409144ad4a5561ea940a13e7e","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:06 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '81'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449746,"scheduledPurgeDate":1591225746,"id":"https://vaultname.vault.azure.net/secrets/secret6/98b321b409144ad4a5561ea940a13e7e","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '362'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449628,"scheduledPurgeDate":1591225628,"id":"https://vaultname.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449675,"scheduledPurgeDate":1591225675,"id":"https://vaultname.vault.azure.net/secrets/secret3","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449696,"scheduledPurgeDate":1591225696,"id":"https://vaultname.vault.azure.net/secrets/secret4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449721,"scheduledPurgeDate":1591225721,"id":"https://vaultname.vault.azure.net/secrets/secret5","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449746,"scheduledPurgeDate":1591225746,"id":"https://vaultname.vault.azure.net/secrets/secret6","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '2337'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret0/634ea92a127e4f4b970fda55340be23e","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '218', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret0/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:16 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:18 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:20 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:22 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:24 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:26 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/634ea92a127e4f4b970fda55340be23e","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:29 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret0/8ce31a8134224f10ace16716ca864068","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '218'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret0/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:41 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:09:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:07 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/8ce31a8134224f10ace16716ca864068","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret1/1d891f4b8c8c46a5a47dc431ea319a54","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '218', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:31 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret1/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:31 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:33 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:39 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:41 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:43 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:45 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:47 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/1d891f4b8c8c46a5a47dc431ea319a54","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:49 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret1/afd3468dc8874729995eb56351fe88a8","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '218'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret1/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:08 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:17 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:19 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:26 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:28 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:30 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/afd3468dc8874729995eb56351fe88a8","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret2/30dc4950641747d684367517dc8c91c8","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '218', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:51 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret2/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:51 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:53 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:55 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:01:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:00 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:06 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:08 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:10 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/30dc4950641747d684367517dc8c91c8","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:12 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret2/d7289e4ab2a3427c9374a605aa71b92a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '218'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret2/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:47 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:51 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:53 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:55 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/d7289e4ab2a3427c9374a605aa71b92a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret3/af029653ec654a1d834f55fac0e93598","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '218', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret3/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:14 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:17 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:19 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:21 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:25 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:27 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:29 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:31 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:33 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/af029653ec654a1d834f55fac0e93598","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:35 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret3/b2215d1b722042cdad20fc938e846428","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '218'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret3/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:57 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:10:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:03 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:07 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:12 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:14 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:18 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:22 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:24 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/b2215d1b722042cdad20fc938e846428","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret4/0a591c993e5c4743bd5abcf157eda5de","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '218', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret4/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:37 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:39 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:41 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:44 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:46 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:48 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:50 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:52 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:54 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:56 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/0a591c993e5c4743bd5abcf157eda5de","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:02:58 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret4/fe69e27bd4bb49ae8abc35ac07eb3cca","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '218'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret4/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:35 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:39 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:43 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:47 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/fe69e27bd4bb49ae8abc35ac07eb3cca","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret5/aeda85b6e874420690df6616fd22d3f5","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '218', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret5/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:01 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret5/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret5/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:05 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret5/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:07 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret5/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:09 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret5/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:11 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret5/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/aeda85b6e874420690df6616fd22d3f5","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:13 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret5/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret5/9f7c886cda8f4d078a2d460748eb31ea","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '218'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret5/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:11:58 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:00 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:02 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:07 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:09 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:11 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:13 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:15 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/9f7c886cda8f4d078a2d460748eb31ea","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:16 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret6/eb3088af4e2743359fb872262a511f7c","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '218', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:15 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /deletedsecrets/secret6/recover, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:15 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:17 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:19 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:21 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:25 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:27 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:29 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:32 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers: {cache-control: no-cache, content-length: '73', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:34 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 404, message: Not Found}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/eb3088af4e2743359fb872262a511f7c","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:36 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/634ea92a127e4f4b970fda55340be23e","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret0/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/1d891f4b8c8c46a5a47dc431ea319a54","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret1/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/30dc4950641747d684367517dc8c91c8","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret2/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/af029653ec654a1d834f55fac0e93598","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret3/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/0a591c993e5c4743bd5abcf157eda5de","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret4/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/aeda85b6e874420690df6616fd22d3f5","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret5/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/eb3088af4e2743359fb872262a511f7c","attributes":{"enabled":true,"created":1575676727,"updated":1575676727,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '235', content-type: application/json;
    -        charset=utf-8, date: 'Sat, 07 Dec 2019 00:03:38 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, yzw2zry5omhqfqudmt7us5di.vault.azure.net,
    -        /secrets/secret6/, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret6/98b321b409144ad4a5561ea940a13e7e","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '218'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:17 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/deletedsecrets/secret6/recover?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:17 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:20 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:21 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:23 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:25 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:27 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:29 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:37 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '73'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/98b321b409144ad4a5561ea940a13e7e","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/8ce31a8134224f10ace16716ca864068","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/afd3468dc8874729995eb56351fe88a8","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/d7289e4ab2a3427c9374a605aa71b92a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/b2215d1b722042cdad20fc938e846428","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/fe69e27bd4bb49ae8abc35ac07eb3cca","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/9f7c886cda8f4d078a2d460748eb31ea","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/98b321b409144ad4a5561ea940a13e7e","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '235'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:12:45 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://ucqj3fibnex3uptx2qpippir.vault.azure.net/secrets/secret6/?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_secret_crud_operations.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_secret_crud_operations.yaml
    index f8bcb317a039..2fca1e89b1c0 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_secret_crud_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_secret_crud_operations.yaml
    @@ -2,152 +2,788 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:02 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, p2aiyppknnpgwpkcjtux3jrn.vault.azure.net,
    -        /secrets/crud-secret, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:31 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/secrets/crud-secret?api-version=7.1-preview
     - request:
         body: '{"value": "crud_secret_valuec01d1319"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['38']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '38'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.0
    -  response:
    -    body: {string: '{"value":"crud_secret_valuec01d1319","id":"https://vaultname.vault.azure.net/secrets/crud-secret/1cdce71ee3324ebda57af860f6618d89","attributes":{"enabled":true,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '246', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, p2aiyppknnpgwpkcjtux3jrn.vault.azure.net,
    -        /secrets/crud-secret, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"crud_secret_valuec01d1319","id":"https://vaultname.vault.azure.net/secrets/crud-secret/cb5e370dee9b424ab52fa10a1d61f47d","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '258'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/secrets/crud-secret?api-version=7.1-preview
     - request:
         body: '{"value": "crud_secret_valuec01d1319", "tags": {"foo": "created tag"},
           "attributes": {"enabled": true, "nbf": 1422864000}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['122']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '122'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.0
    -  response:
    -    body: {string: '{"value":"crud_secret_valuec01d1319","id":"https://vaultname.vault.azure.net/secrets/crud-secret/41f3e22d661b44a2834a9d46e5bf3339","attributes":{"enabled":true,"nbf":1422864000,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"},"tags":{"foo":"created
    -        tag"}}'}
    -    headers: {cache-control: no-cache, content-length: '292', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, p2aiyppknnpgwpkcjtux3jrn.vault.azure.net,
    -        /secrets/crud-secret, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"crud_secret_valuec01d1319","id":"https://vaultname.vault.azure.net/secrets/crud-secret/41f3e22d661b44a2834a9d46e5bf3339","attributes":{"enabled":true,"nbf":1422864000,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"},"tags":{"foo":"created
    -        tag"}}'}
    -    headers: {cache-control: no-cache, content-length: '292', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, p2aiyppknnpgwpkcjtux3jrn.vault.azure.net,
    -        /secrets/crud-secret/, api-version=7.0, '']
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret/41f3e22d661b44a2834a9d46e5bf3339?api-version=7.0
    -  response:
    -    body: {string: '{"value":"crud_secret_valuec01d1319","id":"https://vaultname.vault.azure.net/secrets/crud-secret/41f3e22d661b44a2834a9d46e5bf3339","attributes":{"enabled":true,"nbf":1422864000,"created":1575676623,"updated":1575676623,"recoveryLevel":"Purgeable"},"tags":{"foo":"created
    -        tag"}}'}
    -    headers: {cache-control: no-cache, content-length: '292', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:03 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, p2aiyppknnpgwpkcjtux3jrn.vault.azure.net,
    -        /secrets/crud-secret/41f3e22d661b44a2834a9d46e5bf3339, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"crud_secret_valuec01d1319","id":"https://vaultname.vault.azure.net/secrets/crud-secret/5ef3a83f53c142d1943b9a83fc528d5c","attributes":{"enabled":true,"nbf":1422864000,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"created
    +        tag"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '304'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/secrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"crud_secret_valuec01d1319","id":"https://vaultname.vault.azure.net/secrets/crud-secret/5ef3a83f53c142d1943b9a83fc528d5c","attributes":{"enabled":true,"nbf":1422864000,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"created
    +        tag"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '304'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/secrets/crud-secret/?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret/5ef3a83f53c142d1943b9a83fc528d5c?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"crud_secret_valuec01d1319","id":"https://vaultname.vault.azure.net/secrets/crud-secret/5ef3a83f53c142d1943b9a83fc528d5c","attributes":{"enabled":true,"nbf":1422864000,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"created
    +        tag"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '304'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/secrets/crud-secret/5ef3a83f53c142d1943b9a83fc528d5c?api-version=7.1-preview
     - request:
         body: '{"contentType": "text/plain", "attributes": {"enabled": false, "exp": 2527401600},
           "tags": {"foo": "updated tag"}}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['114']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '114'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret/41f3e22d661b44a2834a9d46e5bf3339?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret/5ef3a83f53c142d1943b9a83fc528d5c?api-version=7.1-preview
       response:
    -    body: {string: '{"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/crud-secret/41f3e22d661b44a2834a9d46e5bf3339","attributes":{"enabled":false,"nbf":1422864000,"exp":2527401600,"created":1575676623,"updated":1575676624,"recoveryLevel":"Purgeable"},"tags":{"foo":"updated
    -        tag"}}'}
    -    headers: {cache-control: no-cache, content-length: '301', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, p2aiyppknnpgwpkcjtux3jrn.vault.azure.net,
    -        /secrets/crud-secret/41f3e22d661b44a2834a9d46e5bf3339, api-version=7.0, '']
    +    body:
    +      string: '{"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/crud-secret/5ef3a83f53c142d1943b9a83fc528d5c","attributes":{"enabled":false,"nbf":1422864000,"exp":2527401600,"created":1583449592,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '313'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/secrets/crud-secret/5ef3a83f53c142d1943b9a83fc528d5c?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.0
    -  response:
    -    body: {string: '{"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/crud-secret/41f3e22d661b44a2834a9d46e5bf3339","attributes":{"enabled":false,"nbf":1422864000,"exp":2527401600,"created":1575676623,"updated":1575676624,"recoveryLevel":"Purgeable"},"tags":{"foo":"updated
    -        tag"}}'}
    -    headers: {cache-control: no-cache, content-length: '301', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:57:04 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, p2aiyppknnpgwpkcjtux3jrn.vault.azure.net,
    -        /secrets/crud-secret, api-version=7.0, '']
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/crud-secret","deletedDate":1583449594,"scheduledPurgeDate":1591225594,"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/crud-secret/5ef3a83f53c142d1943b9a83fc528d5c","attributes":{"enabled":false,"nbf":1422864000,"exp":2527401600,"created":1583449592,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '461'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/secrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:36 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:38 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:40 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:42 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:44 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:46 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:48 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:50 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:52 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:54 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:56 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:59 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:01 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:03 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        crud-secret"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '85'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:05 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Forbidden","message":"Operation get is not permitted
    +        on this object.","innererror":{"code":"AccessDenied"}}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '126'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:07:07 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 403
    +      message: Forbidden
    +    url: https://d4o4obyhm3qa7l2qlj7kbwfs.vault.azure.net/deletedsecrets/crud-secret?api-version=7.1-preview
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_secret_list.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_secret_list.yaml
    index 5273cdad64db..d1f11ae5b0a9 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_secret_list.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_async.test_secret_list.yaml
    @@ -2,211 +2,346 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec0?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers: {cache-control: no-cache, content-length: '87', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:22 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      www-authenticate: 'Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -        resource="https://vault.azure.net"', x-aspnet-version: 4.0.30319, x-content-type-options: nosniff,
    -      x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 401, message: Unauthorized}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, deh77aod364agimovy3f7kix.vault.azure.net,
    -        /secrets/sec0, api-version=7.0, '']
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '87'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:32 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      www-authenticate: Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
    +    url: https://q7n5p3ldgbdzkdq2w2gzlbru.vault.azure.net/secrets/sec0?api-version=7.1-preview
     - request:
         body: '{"value": "secVal05b50e84"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec0?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal05b50e84","id":"https://vaultname.vault.azure.net/secrets/sec0/78eac04fbe06472e8c90475839c1b1a8","attributes":{"enabled":true,"created":1575676703,"updated":1575676703,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '228', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, deh77aod364agimovy3f7kix.vault.azure.net,
    -        /secrets/sec0, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal05b50e84","id":"https://vaultname.vault.azure.net/secrets/sec0/e92a209d756542f98d061580de83cf63","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '240'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://q7n5p3ldgbdzkdq2w2gzlbru.vault.azure.net/secrets/sec0?api-version=7.1-preview
     - request:
         body: '{"value": "secVal15b50e84"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec1?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal15b50e84","id":"https://vaultname.vault.azure.net/secrets/sec1/13b5b99dfe484417a592a18e78648a70","attributes":{"enabled":true,"created":1575676703,"updated":1575676703,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '228', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, deh77aod364agimovy3f7kix.vault.azure.net,
    -        /secrets/sec1, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal15b50e84","id":"https://vaultname.vault.azure.net/secrets/sec1/5c067bda5e6243a4afd77cc17b71aac9","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '240'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://q7n5p3ldgbdzkdq2w2gzlbru.vault.azure.net/secrets/sec1?api-version=7.1-preview
     - request:
         body: '{"value": "secVal25b50e84"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec2?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal25b50e84","id":"https://vaultname.vault.azure.net/secrets/sec2/10e3f7d8bbd246e2a596ebde3b9e3d9c","attributes":{"enabled":true,"created":1575676703,"updated":1575676703,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '228', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, deh77aod364agimovy3f7kix.vault.azure.net,
    -        /secrets/sec2, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal25b50e84","id":"https://vaultname.vault.azure.net/secrets/sec2/913ca385ab7943d8b7c2290ba3d4b381","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '240'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://q7n5p3ldgbdzkdq2w2gzlbru.vault.azure.net/secrets/sec2?api-version=7.1-preview
     - request:
         body: '{"value": "secVal35b50e84"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec3?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal35b50e84","id":"https://vaultname.vault.azure.net/secrets/sec3/9014f8e031e04165ac2be806893594f4","attributes":{"enabled":true,"created":1575676704,"updated":1575676704,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '228', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, deh77aod364agimovy3f7kix.vault.azure.net,
    -        /secrets/sec3, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal35b50e84","id":"https://vaultname.vault.azure.net/secrets/sec3/e34e5865df744608a1de6a4852555666","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '240'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://q7n5p3ldgbdzkdq2w2gzlbru.vault.azure.net/secrets/sec3?api-version=7.1-preview
     - request:
         body: '{"value": "secVal45b50e84"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec4?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal45b50e84","id":"https://vaultname.vault.azure.net/secrets/sec4/ce8469c18f674815b992844de45c4117","attributes":{"enabled":true,"created":1575676704,"updated":1575676704,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '228', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, deh77aod364agimovy3f7kix.vault.azure.net,
    -        /secrets/sec4, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal45b50e84","id":"https://vaultname.vault.azure.net/secrets/sec4/a7d5463b781747d7aab5a86d13afa7bb","attributes":{"enabled":true,"created":1583449594,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '240'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://q7n5p3ldgbdzkdq2w2gzlbru.vault.azure.net/secrets/sec4?api-version=7.1-preview
     - request:
         body: '{"value": "secVal55b50e84"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec5?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal55b50e84","id":"https://vaultname.vault.azure.net/secrets/sec5/a82d9fafec08458aa0a51e4bd9c8c68d","attributes":{"enabled":true,"created":1575676704,"updated":1575676704,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '228', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, deh77aod364agimovy3f7kix.vault.azure.net,
    -        /secrets/sec5, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal55b50e84","id":"https://vaultname.vault.azure.net/secrets/sec5/7535e0a0b178473aa58b8c2a2f16d562","attributes":{"enabled":true,"created":1583449594,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '240'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://q7n5p3ldgbdzkdq2w2gzlbru.vault.azure.net/secrets/sec5?api-version=7.1-preview
     - request:
         body: '{"value": "secVal65b50e84"}'
         headers:
    -      Accept: [application/json]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec6?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal65b50e84","id":"https://vaultname.vault.azure.net/secrets/sec6/dd74f0e056654f0f8a60a609d18130b7","attributes":{"enabled":true,"created":1575676704,"updated":1575676704,"recoveryLevel":"Purgeable"}}'}
    -    headers: {cache-control: no-cache, content-length: '228', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, deh77aod364agimovy3f7kix.vault.azure.net,
    -        /secrets/sec6, api-version=7.0, '']
    +    body:
    +      string: '{"value":"secVal65b50e84","id":"https://vaultname.vault.azure.net/secrets/sec6/ddadb0180f3444c685d7d8775470615d","attributes":{"enabled":true,"created":1583449594,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '240'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:33 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://q7n5p3ldgbdzkdq2w2gzlbru.vault.azure.net/secrets/sec6?api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets?maxresults=6&api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets?maxresults=6&api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/sec0","attributes":{"enabled":true,"created":1575676703,"updated":1575676703,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec1","attributes":{"enabled":true,"created":1575676703,"updated":1575676703,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec2","attributes":{"enabled":true,"created":1575676703,"updated":1575676703,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec3","attributes":{"enabled":true,"created":1575676704,"updated":1575676704,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec4","attributes":{"enabled":true,"created":1575676704,"updated":1575676704,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec5","attributes":{"enabled":true,"created":1575676704,"updated":1575676704,"recoveryLevel":"Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/secrets?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3NiFNREF3TURFeElYTmxZM0psZEM5VFJVTTJJVEF3TURBeU9DRTVPVGs1TFRFeUxUTXhWREl6T2pVNU9qVTVMams1T1RrNU9UbGFJUS0tIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6"}'}
    -    headers: {cache-control: no-cache, content-length: '1308', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, deh77aod364agimovy3f7kix.vault.azure.net,
    -        /secrets, maxresults=6&api-version=7.0, '']
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/sec0","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec1","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec2","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec3","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec4","attributes":{"enabled":true,"created":1583449594,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec5","attributes":{"enabled":true,"created":1583449594,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/secrets?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3NiFNREF3TURFeElYTmxZM0psZEM5VFJVTTJJVEF3TURBeU9DRTVPVGs1TFRFeUxUTXhWREl6T2pVNU9qVTVMams1T1RrNU9UbGFJUS0tIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6"}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '1388'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://q7n5p3ldgbdzkdq2w2gzlbru.vault.azure.net/secrets?maxresults=6&api-version=7.1-preview
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net:443/secrets?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3NiFNREF3TURFeElYTmxZM0psZEM5VFJVTTJJVEF3TURBeU9DRTVPVGs1TFRFeUxUTXhWREl6T2pVNU9qVTVMams1T1RrNU9UbGFJUS0tIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6
    +    uri: https://vaultname.vault.azure.net:443/secrets?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3NiFNREF3TURFeElYTmxZM0psZEM5VFJVTTJJVEF3TURBeU9DRTVPVGs1TFRFeUxUTXhWREl6T2pVNU9qVTVMams1T1RrNU9UbGFJUS0tIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/sec6","attributes":{"enabled":true,"created":1575676704,"updated":1575676704,"recoveryLevel":"Purgeable"}}],"nextLink":null}'}
    -    headers: {cache-control: no-cache, content-length: '198', content-type: application/json;
    -        charset=utf-8, date: 'Fri, 06 Dec 2019 23:58:23 GMT', expires: '-1', pragma: no-cache,
    -      server: Microsoft-IIS/10.0, strict-transport-security: max-age=31536000;includeSubDomains,
    -      x-aspnet-version: 4.0.30319, x-content-type-options: nosniff, x-ms-keyvault-network-info: addr=131.107.160.72;act_addr_fam=InterNetwork;,
    -      x-ms-keyvault-region: westus, x-ms-keyvault-service-version: 1.1.0.883, x-powered-by: ASP.NET}
    -    status: {code: 200, message: OK}
    -    url: !!python/object/new:yarl.URL
    -      state: !!python/tuple
    -      - !!python/object/new:urllib.parse.SplitResult [https, 'deh77aod364agimovy3f7kix.vault.azure.net:443',
    -        /secrets, api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3NiFNREF3TURFeElYTmxZM0psZEM5VFJVTTJJVEF3TURBeU9DRTVPVGs1TFRFeUxUTXhWREl6T2pVNU9qVTVMams1T1RrNU9UbGFJUS0tIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6,
    -        '']
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/sec6","attributes":{"enabled":true,"created":1583449594,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +    headers:
    +      cache-control: no-cache
    +      content-length: '210'
    +      content-type: application/json; charset=utf-8
    +      date: Thu, 05 Mar 2020 23:06:34 GMT
    +      expires: '-1'
    +      pragma: no-cache
    +      server: Microsoft-IIS/10.0
    +      strict-transport-security: max-age=31536000;includeSubDomains
    +      x-aspnet-version: 4.0.30319
    +      x-content-type-options: nosniff
    +      x-ms-keyvault-network-info: addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region: westus
    +      x-ms-keyvault-service-version: 1.1.0.897
    +      x-powered-by: ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +    url: https://q7n5p3ldgbdzkdq2w2gzlbru.vault.azure.net:443/secrets?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3NiFNREF3TURFeElYTmxZM0psZEM5VFJVTTJJVEF3TURBeU9DRTVPVGs1TFRFeUxUTXhWREl6T2pVNU9qVTVMams1T1RrNU9UbGFJUS0tIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_backup_restore.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_backup_restore.yaml
    index 5f220035b622..aecc87835f68 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_backup_restore.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_backup_restore.yaml
    @@ -2,147 +2,261 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secbak4238101d?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secbak4238101d?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:06 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "secVal4238101d"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secbak4238101d?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secbak4238101d?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal4238101d","id":"https://vaultname.vault.azure.net/secrets/secbak4238101d/ecd9792889c241c7b3e288dda3f8612f","attributes":{"enabled":true,"created":1575676686,"updated":1575676686,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal4238101d","id":"https://vaultname.vault.azure.net/secrets/secbak4238101d/119e13fe28dc44588451304269fca3bc","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['238']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:06 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '238'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/secrets/secbak4238101d/backup?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secbak4238101d/backup?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmwwVG95emdRSWhwVmVSS1JEMkFHVTM4NHVyb2tiVUhOekhsT3B1Sm9kcTduLTJGREdud0xaYmJvXzhlSElmZm8xenMzVENabF9XN1k4QzdTTVZfN256VDhmdk5SNlNtdFNVdVNybzE1RzhpX1B3T1JSVTFaNFh4dHhNR3A0RGI0SnpSZko5MkRxMGhPTktuZkV4VnBZeUt1a1g5dUVpYVI4TUVqdmtlWDNETGU3NmtZY1M3SzkxcDBCS0ZvOTZTSTdwSk10ZHdFeTJlbDRhazFGQkxlZjgxR2lmWlZDWVE4c3daN0tHVnlxYjhnTFROX2p0QzkzTXdqeFcxa0d0c3BsR244RzRGZ1pYUzJFejJtZE83VFVQZlE0dXMtUnRXek9oN2FrZnFvc1hEd2k4aDd6WHJHVDdIZXVyXzIyVzJNTTRLY2tfYXlnNWh4eUM0dk54ckp1QS4yeVVpaDJ3VUdteXQ1eF8tcE84bEVBLmNFVXZrZnZPZEpQdk43NHo0TWhnaEhTOVFpcFFaM2hNTEE0N1ZnSzN6VG9XcGVUSzd3U3llYzdlNV9QSW5oZHdVMXN6TVZWUmhSSWRCTnFhZlNmRW94QW1SR2Z2Ny1OaDlUZDVPVVZVZVFMQ1owbHd4a09XR1VlMC1zcWZZVExMS0Q1T2txXzd2YzlKREVwZ3REcXlsNWc5d0JzWXZCVWRLZHpRZ1AwbXU3bVU1c2xQdjZ0NHBpS1RwQXlpUTVTcWpmRHdFdHp0anVjQ0xOLTUyWndQRVJKdENUZC0ySDZLbVU1MW9tRFdTRXVXRmN4MHpyS0FIcE9DQ2RTN0FqUXc0UHR3WHFhRGxZMDJXeEEzZ2pxb2NWWF93YW5IaFVjek0teU5iSl9zaFpYOTZTd1RSblBvV29wMVJWMFJtNTVSTEdIQUNuWXlBRHRyMFhmSjZvdDJxVFlqQ2lKQmE3b3plemJYeFFBcWVZNU4tRDZudjg4YkhSWWl1OW9sZkVUYUdfeUhzQUVIR3VqWkFwbllwZ2V4UVdWV0d4T2Y5ZFhYM01NQ2kwNnZsR0ZFWjlxMFBuSE1jVUdLaTV6WVpGMDRfeVdBX1NiMGhXblBIYmlzdGR6eHNnd1F4b294UnVmSmt0clRMRDJNWUQwYVZLUXpKYUNITzl3T19FTHhWWDRPNW9YVXBKWC1WbzRsWnNSNmcxMmd6WC1MRW9jRDU3QWY1SjV6cWpKYmc0OGlrLUE0YzhtbWd1eUNkeWtYTEl4VFEtX05VRFllYkFuQWZ2dm9HMTdhUDd1bTRCY0RZeGdYREtaNmhGWUZ0eGRiaHM3azVUX0VCVEstTnBpcFVrQmJVNnNSbGZHbElsdFJNYnZJZENIeTdDbUxKQThpMFA2S1hxazl1dmhhUzlKVkU5c1hkQkpwWWtLQ0tYTTJIcGFfZEdvRHVoY19hSzY5bkEwRkhBN2JuRTJTbjJYVWFzOTRQQXVHckZvdHRzWWplQmhtVG1vTDZTcWoyZDNLc2RaSTE5dVRlbGU4T1ljaHRlNGtLMlJMZlQ0UjluY3BnTHFNR2k1RC1tNjRWX1E3YnZ3akR2R0dPWUo2V2Zpd0JBRUExYkMwa2tsdkRRUllRSGR0aVVFRFQ0Z1hfazRfanlJSUNZSk8wYzJfcXFsdFpTcW1tZ1JzaXFyZnNGTlhyMnUtNllhQU5tTGhwTkM3N2I0VDVWMTQ3NjdlY296QXNvYlhsaDFDaFQ2b0lTaTRkaENhN1duN1pnVkVuUER3QkhscE5CSzZQZDJwSjVmUnYxWDNFWTRVSU1lMzUyVHEzX3ltb3ZrMjgxajRxaGdnRkZRb1pOTm4xcUNnNlpMYzFlNXpmNTBocnVQS3RKY1JWcUVuMGFpMDk4NlR2ek9Jcm9EeU5RSlB6Y0ZtQlU4Xy1mZ0dWb2RmbC05UWlkX2FKa2F0U21UaGIwLUFOa1NwN1FhSWxvRkZ4WnM3T21oUEZieEdHNTc3QzdJd25oQkk4blBvYUpCRHFacG85QkJPdWI1Q050YW5rbV9DclBFVl9NQXNqUkx1SWE4NE5mazFyS3o5OV91TllGcDJvTEpaTy1fWVpFWE4wcHhYcEVtdjM3LW1KbzZUYm9uZnd2R1FuY2J2eVBYUGNQa2tpd0YyTnl1dGdETFlxbnpGZjRlSXZkNDczdUt2Y0ZyUmZyM3hRUFhnTEhnSGp3SmszTjctVWlDWGVjZVpnRlJzTlAtaWx5Yzh0SVdza3RSZ2hTWUZfN05XVWNxYnpleGRfX0d3SnBUOWZnRC1yTXBycHFxeGNCTjdZSF9qOU9FcTlBQmdUTS1CMVpWQjFRdkJDZ1N4dFJ0bmlKYS1FZnpkTG9MRl8xeUlJcEV3MXZ5WkJHRVpGVUpsZjExODd0TVh0d094YmVlOXNndmUtVnJCN29YU19Ja3FONUVhWmxVSVd5M3NiQWNLX3BETEJJX2QyQm9qZG1CVHNlbFV1ZURzaE1OSG5JQ3FMbC16ZWl6M2JZemNQYmZnNVlqYmtQcm1DZzBoLXRVUVVQc2U1LVJtTHVtRXhCV3h1VnZibTRMMjR1ZjNnUFl5N2dFVE5EazFmSDZnS1RLTk9GVFhfSnJrbGtvNHhnTm1ReUxfSUVOXzlORjI1ZlJBa3duZ004M3ZKdXBYTXJuOC1EMEN4amZFcDU5Z1pmYXFucXY4NGMzZ2Y4cXl0bU5KS0V5VndiM3ZIazk3YnU0b0lnY1d1UlBVNGZGSkIwVXNvMFdNOGJROWFWYXJXZmQ5MGtZaC1yN3FNdkFYbDkzMGM2czBVcFJTdkdwU3lsZW9wS1F6TDJnSFZNZWI2TVMzTHE2VDkwVTJFTXhjbzFIc25uSWY2Qmlfc3F6NVpjallkTFRXaDVvTWxucm51MDBOTW5fZUNaUW10VUJOMHByRUVTdElwRXFjVDZFVjlKNDBveDBsMGNOcm1sWHc3aWFtb2tqdngxTTQwMTdRRURuaXVLRjdQdnc1QkVoREhSMU11bDFyMHh5c1ZDNkhGdEpCeVlhVTFFLXdoUE5Jdl9lZkRockRYMnQ2RzJxQk1CZVdEcUprNEhCV1Z1ajlJblZjQlpfZFM3eWFWQzJlampjRFYxY1p6NFhSdEhWbU1UUGxRdTJReEVLNUktQnUwTVpkT19IQ2NoblJ5U3VGS2xSWWF4d1NOaUhzTXZwSXhuZXFNMEk2VEZTODdPcXBEcmctZUI1UEQ1d1VqajdtYWk1N3dMVXZrQUlfTDZUX0tnLVU5YWdzMUp2al9GMUFzWjZob08yd2ZRejFqWnRGZXZYbkUtUC00cUt6WmpsUU5fMGVRRnF3d2hpdWw1bXl3eUViby1IZkhjWlJxYzBITXB3V0M1LUxBTzhPRGVJYm1Qay1SbEJlZFJiMDFjb3VIdmRtRy1FNm1yQ3dPb2RxZ2pKU0tiSDlfcV9nVTZXZ0NhVEZVaDMyT0Ntd2U4ZFlOcTFjZVh0NzItM0dDT1dldER2aUJjdFF6MllPQ3p5WndVcjJyZG1KOVRtQkU0Sm14MnB5QzJneGZTQVgxaXdOZUtNY3gzYjlydWoxdklIdDlmcE9tR0pIQXpjMVlhbXZEQUdRMHdxaW1UMVB5dnFOS29tcW11UGxQNWlxRGVmM0dzYWhiWG1FN3JLMHdGdlRZNWd2b2ZOMm9hblJyb2NqSlljc2FqRnRONHpXLVFkZ0ZiWDBoWkJfTGx3bUZoZW5WZEJwNlJ4MjR6dy1rd3ZwZ1JOc0xFMkIxYzJtM24wcFZ1bG5oU2R0UlpoTXFKZW1wREU1UklXTk5JU3M0Z2pfNENMd19vOGxlNnZZVTlXT0NER1Byb0pPM0hKbW16Qnd2MTlmdTRhSHFCaUZqazFZekFMYmp4UC1tTGJXSExyRWY4SVEtTWEzSHhHZnFPOUlZb1RqbUN5elpoTEpRbmtveTZHWENDQTJrYWZxOTRxY1NraWJrcDRZcEN4cDlxcEJKYUtWeHo4QmtYZVZ6M0ZWRmZnMjBCdE5HSUVlZ0JHUlZMZG9RbHFmMnVrNnNZZnZxSHloWF9ETWwycFJ5LXUwczhsaDc2MlF6emxkU051ZWVvUUVUaXljMDBXNUxaZXVWcUc4VG9ZeUx2cHhzUFgzdHJ6NzVHX3g1YzFIdG85Vl9TWGtia0lBQjdfcTFmam1PS05zb3BXNHoyNDVSUWJOQTl0YWtjRXBjRTRDRlhIVHo2cmdGQ3RLYUwzMzlxMUtrb01DRUh1RkEyS3RsMlhORnhVM21tTnE5a3pYMmdnLXpOMmoxYk9ONXRkdlVUWU5rQmJHTlBUV1lLbDBmdEdfMXNFUFBJRFJjZ1hWOThObmtIbG1MZjBUNFVRNkVLUnd0djVpbTBuLVZobkV1SHZLejVsNm1fOEM2eE1RYUluUG1neW5aeHhwZmIyX2NoMS1pcElsVDBlZjZ5TGkxWW5ldml4d2RLTEJhTFhqUE5hM1JUaTVPQjhOYW1QWElFdVIwLVZ4am5tUVBsOFlId1JzRk1tQVlVSVkwQVFoQzhibmZOZ2hVS1l6Q0lWcU04RXV6VE1sRmVHVTQwRHJOeDBDVlBVU3VlQTVsSWFEaWFjVVpYcnViLXlTX2lWcWNGRmdvMWZtTkFqNlFHak1fZEpTLXhObFRnNHJyNWM2dWNHdnE4XzhkSVJ2dHpTb3dhbkFKUTl4VjZ6RmpLX0FpSUZkMUZUdmJZZVdIdXI3aDNLR1FYbTJyRlRELWZDY3JxN281RU0zZkJJeUZDdm9mY3l6SnVBWWN0TFdKRWJnQV9lM2VmenlyUmJSWlhEb2E1eDdIMVlJQVNLOXlBTC14Zkk3aXlmbEdsdlBZNS1BSlY3REdVaWJGa1ZWRlFBMG4zQ1VLaDFHcmlYWElZZzZPbldJd0dFaXFneDdERkp0d041OUVDYlV0NHl1SjRKMXNGeFliYU0wTVpuUU80aW54akIwN0I1Vmhkcnl2bWVweExBdVNGOEpYa2ZRRVBKTHNfSTR5SVFxMjVVOHpVUkRHdzNNN3duWDlRNXhtOEoweDVwVzRlLWZMOWhLSzlVT0xic0lzOTl2NDF5SWNmaURaSFVMdDBuYUtQbGZvaVFmM1BfbjlzRXIwZjFLenhSMDhGRmlnNEpoLXd6bWQwYzVxVUVsZ2xEdHJSY25ja0phUElPdHI4clZJQ3dfZUtfYmVNUHFXV3JaOGl0djg2bVd4cGNkRXh5VHRULUNYYVdtQkxFLnBPMU1ITi1pN1YtdWdhUERPSmEwRGc"}'}
    +    body:
    +      string: '{"value":"KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmRBVW5ObEd6cWowZlR5WDc1bm1DYk9IT09XYWpIaG55Vmw4V2RTcE1uZ2NTZDY1djQ1WFY2NUdXenV2SjNZY09yelpiR3A5RUEyZWJCejlpUGUyd3FsSWF1SVBHSU5qdS1DNVBnNlZtdVppaTFjNGxhczVKQlFadWxxRnJMRjNQVFV5T0JZWUlBSHZLVm95V1ZvR2NwN0l4U3Qzb3pNd24zV0ZQWUtWMjlXbnNsQlRWMXZvX2pVdEdEa08xemc2SkNUNDV5UEdzVG81TWZHLUpoMUVvVW9Qdi10YWZXTHZKWHdiU0xaYnMtZ2x5MFFud0JNcEZqYVRyaHEyM2l1bTdYWC0wcGhxZlFDcGlZUERLYUt1OHZ5Ry10d0dUVEdEZGdlR1R1RGFDVDdPTVZ6TUU5UkM5dG1OR3BWS1E0UlFWTC1oZmU3RE9LRmJBTlNfRi1adngydy5pUUNUdkRfR2VsZHJnUHc0WEZReU1RLlR1SFZ5bXlPckt3d29MMnc1Ty1LMlp4dGdaTWNnLVplWjRLQjVyQ0ZtSi1POXl5allXV2pqTnh0cmNUY2E3dVNzM2ZxMVFjcFBxdFBRaWNfamViSlBseVpYc1R5eFEwZDI2WVZtTnJ2dVFKTklmaXJ5ejZwNDBWZjVNalMzMHRLb3AtQXFzanN3bDlqdWlGZER5XzZHeDNucVdITTZoUHQ3azFfRFMyb3hzanpjcVZnOVdLUEFNLVUtVnh6M0lyUVNETkNxS0ZFREhiMC1jMDY3SWpUYUJaZ3JHZzNwbi1YMGJPSXVKcUlyTnFwWW5nYjlMaXFQNFNSQWpsU1FrVEQ2ZWJneXJ6cU9GT2ZfaEt4Q2x1c0pQZENISlVubGVCOXlDWGtWY2JJS2Y1ZkVNQ3k1ek9sWGlfaEZNNnVLeDBsdlNGQW1GZGg4U3BYajdKXzBsSVV4S1IzVHFmZkEyR1M5SEgyWXNiLVhZSklMb1NzS3gtWmlLMXh3eEJLZXYzTU81U09LdU9hQmZxeFlybGkxZDJjUFZPNGQ2SlV1R3U1SEU2aFN6UXhxd2hOVUNjcUg1c0FNX1kwbndQVWMtTzVrWEctXzJsS3V6dWs4TFFuOXZIT3BEdlUyb09fSWZaMVpYQVZjMS1PaUttbDlzMC1GdDZ1SVlwNDJsWjYtSDFGUlJHeWctTVp0Vk9hSkI1Xy1XRzJ0eTJrOTMxN3pQcXZNbGxxWUJMQVFtdTFfZVF5THlJZlRTaEloREZHY0JlZ2QtcmdNY3lOUVZJN3VEUHB4RENOREs5dkhSbU9NaTg4NnJtU0NsWGpranF3RXg2THNQalNyM19OY2JvVGR5ZTYzeldWbDItVTJVbGwzenpuT3Ffb3RWeFhtYkY1eldLN3NwbDZxZVFOM0tlYVhoZUlNT2VPYV9CNUxSS2VUaGE3TmlxLVhHNFdsU0hBeXc0Z2p3OUxZb2s3YUNEUmQzVldTU2xnZTJKTzBDQXQycVFHbjVUYUUtZy1yYWQ0N2RMY3phOWVVNDBrYmw0bnUyX0NpeHBEU2RfdGJYbEpWZmR3NkhYQWZFMVROSURKdnpSSmJJc0JWejhoc3p4NmR4cElIQzkzUHFEVzZuck1PZkhRT1RJY0hrODBVT2hDeGYzbVh5Nm5zejd4dmJxUzAwaWdSdXBNQlExcXp4dFUtcmI2TDVWRnNYWF9KRXJIQ3VaTXN2RXZOaGFCbmxXTkcxWFdlb2pWRDR3XzlWT1NDbkJYeGJxb2xnNnlkZ29oeUthWktzQlJ2anBCSldpRXk1czBQRXJZYXRRZmpGMU14Z2hnSk5EcFJsNC1EOHRGV0RUb0N6TmV3enJXZnNTX1c4NTA0QnpDVGZrck5sRl9SYXdGRFNvSjQtcXREUVBmdmdYbzNxX0hCVWhKd1EtVmhuMXdrcjRfYmhxZ3kzWm90MFJueXZoaFAwWi1iTDhHYTVlSEc3cWZWM1RrdkRSWTFzZEhtWHgycHFHZ2pMcTd6VlU5MjdvZUVWREhReGNxVFRIUWZVUmktMGJmQUFrcFFxVUUzbVI4cENjdTNSWk9VUVJYNHhUalRteDNIeHNYN002WnFpdTZoYWx2Q2ltVWlmdS1CWHJUX25QRTVSTXpubTVlMjc0R251RXI2RGRpS1U4SmVERktnOXdFYzZxMnlpTl81dHF0MWRUeUNmbG90SFBrV29PSlNWaGp2Q0ZObWdUaHRPOWxhbnRucVF4cUZ4T1FraS0yZk8yb3dOS1l0LWVBallLek9QenlLNWFrcW9reUJLbTBVUjR0TjBqbmxNUnZYSzZ2cHlqMVBUcDJQM2x4bDEzanJ4OEZlNFRSbG90Und3SzJyQWkyY3BzeHJpWGE5N3AtWWZ3VDNKOUNybzRYZHhpUHYxZlRrZmpRRDFqak9NS0ltWEpRUHR5bGExajQ4ZG1tVFA3djdldHZwUEZ6M25sWURZcWZfMjQyYTJ6bFpfX0dNMkN4UWtlOEg2TmVjcm95ZWFVaTllUWk2QlVVV3dBdEFJb0IzMmVSREo4cE56UE5NVE9Hd0tqeDI4M3RFZTNlcXBfQkQxSExYZUNpbnRJa1BKenNBWTR3TWR5amVwNEtFUlJMdkI3OC0wRW5XRGRxN3ZyQlE0Rm0wR1dGZnNWWFpNOTNjSUxMdmxVaF9KdTljSXNzM2dKclRoa0txMTBqRFZXak9ZZWIySzFGRF9McDFMcl9LTHVmaG9zcUJQOEVUR0FIb2ttdjRaYTB3alNHZWw0NGhxUGhvNi15U0pXYUJXX01kTXJiUFdLaUYtYzRhNW01U2l2R19UNDNfdDI2QXhmZXRKWi1ZT0huZnRUYTlWaGlkQ0lNeEd5RmlRUXZBVmpySjhVTTEzMjdnSzN1blhzUTBEXzl1cmNHSWItU2ZZQjNUT2ctY3BUSlhJWnh4UFFydGliaEJFNEZFdTdteUprbUxiY0JGUnZSM1dIYkJkbGduU1ZVN0xpV2N1SFc2c3BWcm5wUGR1Q2FRQ2RlajdiOVdIYlpWWi1yWldhUzlOOFdPbDFEc01KdXVMQ1RvYmdmYUJTdkRWY05hT09WTnNoUTJEZGZoMEdRbFAtUjZqWlI1aU81N1NCejlidTZ5Q24zNnZvcktqTkF2aWNPdXFVS01QZjk0SEtkbFYzYy1DZTROUjQyOVk1Tkt4TWw3ZHBXRF9LVFJPeG0tSkEwODRvX1kyVERpWGpvSjVGVllTaHY3VEQ3NWNmeFpEaFVzeTMwTmY2dE1pYzBCOGpXV2lTX29JRHNvZUtlOC1LeF9TblRlRG4wUWVIYlVnM1NfZEhrbl9wdGlEQW1JVVNVVEFBcFo3M2FFOWpNM0NycExMOUVpQk1nUktMU1Zia094UU1fU1FFR0VWcTJWXzl6SUZMWlRZZExuRDFZWGFrMG1odWl3cTBMZm5lYlZtREhoZEt2Q0lTVHh4SzQycHFYSHNJSi1HZjFXZDJVRGNqSnMyLW00eDlYVFJWZFVfNF83SHJ5SVlHWFR2SUN5WklvUkJqTndLNVJNaGgtV2pGWWM3QWR1Tmo3c3c0eVlmR0lZdmRoWllWV0FIYmZjMm9JWkZLVUI2U1lQTFlPam9IMGxGRUtKcWZadDNuR3lNdVlMTE1jM0Y2MHJoaG9HTGd3MDBXY3RESjdXeDN4WXcySXhpN01pVDhGOEU4eFU0S2JpMUpXbXZlMEhIMU9tYWpBMXZjeER1d05CUDRHVVZtS21CaEp5UDdvTUVXV3NqX21ybHJpTGZ6R1pIWWk1OWJaQlpGVXdIbHlma3dpZS02WHd4MFlXaUlzUzY1RlBFMmtfNVdwNGVNRGRTMzJaclVnLVV3cTk1U1dXRkRkMzdCRlRiYUxuVXY4QTN2aVU5UzBIQWd2UUtsaUxENGx0aFNzdEFSaHhqOFdKYTNiUFZabWgtamlETXpFdEF3NnBWZG5objFfbDQ5MWt5b0JCMkxHSEtRX3Y2ZHFoVjFtWldleGhSQzNWOTFtVVYzbFpvN1h4b1RKMWJMTW5KZXZQVWttR2M5YWl6ellCcVZ4bEZPOVVsYlJSWHk0SHotal9CR2IybWQ2eHJ5UFRaOFpFS1FUV3lGUnUyUkhUUklZb2d2SnU5T2IyeUJ0VXZzQ2FzTGVhQmlUSV90VDlZNUw5X0EyYk1Db1dPTmM2Y0ZlQjdZR1VCcU1pS2V4NzJBZFpoS1I4MXVrcWwtdVhvZHVZemxRc3pPVTlfQVROSnB3RF91STdjNDE3VUtWZDZsanNNc2VKUnpDVTNCYnJ1R2JteFhLV0dlZnJKWkg3WDBMaS12WFp0M2RpaXR3ajZDejA0OUdQNHV4RF9WWGdLelVfYkpoUDBGdkhNMXp0U0syY3htaDJEVTlhRmVCQ0o4ZGtqWVJLTkpkb1hwSVNQTURpSXVVQjdWZXVZRHFOQVBGRUgzMWtoSk9EckEtYVVKd3BVaGxYLXk5Z0x5TXhnX1BLM3FWbTBJR05OTEFNd0loeVVkT3JCOWp5ZkhkSUd0azhLR0lsVUZZdlE3dVN3WHV5T3hnWHR2dnE2UTZyaFdleG9NTm8tWENLRDV5cTBJTWRwbW05STlubl9fSkY4Mmh2WDA2SmY5T0VKS01lWVFkNVBhT3NibE5adDZOUXAyQ213VTc4X0RPRzF5MzNnNmEtd2xjSmlqU210UEFBN3JkZGZVMVZ2QVRIM29VX0JleHZ4UFpTSnM2VVAtZUZuU1R6LWJsUU55Q090dnFpUkJzNWF0Uk92dU93aHA4eUQ0YXlEejRMLVpFdWhXV0JtQ3FPQU1DQUNEN1F5em5VSWEzdEo1eF85clFYaGdPanVPR1p2T0RscE9vUnRaTzNudGp5V1V5UzNPOXpfbkJNTTJmSm1wNDg3Mk01bzNTUlpsTVBzTFo1QmZOTk91VklJZjFHWDFhX3lKeWVhVG00QW5DZThCSXY3c19YOG4wSDRveHd6aHQ2anZSU21iX19lcF9vQzVrMC10eVUzQ2xpYW9xUjRpNE96ZzBBTmdOd0dNVHo5SVk4M0pKYlJ6M2xMc2ZTV29EbTd4ZDd2eS01alAyOThuVVlGemJTeHE2T0h3dFZtTGJCeGZiTl9wTTdReUNnMzE5WHRBdXF5VFFkeExDMjZPUGxmQ3I4VV9ESVU0U0ROdnN0MkVhb1VNZExXQnVOS01YYUR6NFpaYV9EZkVPQ3VEOHgtMkpxc2ZFMzY1NkIyYXJQV3JNRDhnLkFmSGxURGFnbHFiUnFhaV9PbjhldXc"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['5491']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:06 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '5491'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secbak4238101d?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secbak4238101d?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secbak4238101d/ecd9792889c241c7b3e288dda3f8612f","attributes":{"enabled":true,"created":1575676686,"updated":1575676686,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secbak4238101d/119e13fe28dc44588451304269fca3bc","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['213']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '213'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
    -    body: '{"value": "KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmwwVG95emdRSWhwVmVSS1JEMkFHVTM4NHVyb2tiVUhOekhsT3B1Sm9kcTduLTJGREdud0xaYmJvXzhlSElmZm8xenMzVENabF9XN1k4QzdTTVZfN256VDhmdk5SNlNtdFNVdVNybzE1RzhpX1B3T1JSVTFaNFh4dHhNR3A0RGI0SnpSZko5MkRxMGhPTktuZkV4VnBZeUt1a1g5dUVpYVI4TUVqdmtlWDNETGU3NmtZY1M3SzkxcDBCS0ZvOTZTSTdwSk10ZHdFeTJlbDRhazFGQkxlZjgxR2lmWlZDWVE4c3daN0tHVnlxYjhnTFROX2p0QzkzTXdqeFcxa0d0c3BsR244RzRGZ1pYUzJFejJtZE83VFVQZlE0dXMtUnRXek9oN2FrZnFvc1hEd2k4aDd6WHJHVDdIZXVyXzIyVzJNTTRLY2tfYXlnNWh4eUM0dk54ckp1QS4yeVVpaDJ3VUdteXQ1eF8tcE84bEVBLmNFVXZrZnZPZEpQdk43NHo0TWhnaEhTOVFpcFFaM2hNTEE0N1ZnSzN6VG9XcGVUSzd3U3llYzdlNV9QSW5oZHdVMXN6TVZWUmhSSWRCTnFhZlNmRW94QW1SR2Z2Ny1OaDlUZDVPVVZVZVFMQ1owbHd4a09XR1VlMC1zcWZZVExMS0Q1T2txXzd2YzlKREVwZ3REcXlsNWc5d0JzWXZCVWRLZHpRZ1AwbXU3bVU1c2xQdjZ0NHBpS1RwQXlpUTVTcWpmRHdFdHp0anVjQ0xOLTUyWndQRVJKdENUZC0ySDZLbVU1MW9tRFdTRXVXRmN4MHpyS0FIcE9DQ2RTN0FqUXc0UHR3WHFhRGxZMDJXeEEzZ2pxb2NWWF93YW5IaFVjek0teU5iSl9zaFpYOTZTd1RSblBvV29wMVJWMFJtNTVSTEdIQUNuWXlBRHRyMFhmSjZvdDJxVFlqQ2lKQmE3b3plemJYeFFBcWVZNU4tRDZudjg4YkhSWWl1OW9sZkVUYUdfeUhzQUVIR3VqWkFwbllwZ2V4UVdWV0d4T2Y5ZFhYM01NQ2kwNnZsR0ZFWjlxMFBuSE1jVUdLaTV6WVpGMDRfeVdBX1NiMGhXblBIYmlzdGR6eHNnd1F4b294UnVmSmt0clRMRDJNWUQwYVZLUXpKYUNITzl3T19FTHhWWDRPNW9YVXBKWC1WbzRsWnNSNmcxMmd6WC1MRW9jRDU3QWY1SjV6cWpKYmc0OGlrLUE0YzhtbWd1eUNkeWtYTEl4VFEtX05VRFllYkFuQWZ2dm9HMTdhUDd1bTRCY0RZeGdYREtaNmhGWUZ0eGRiaHM3azVUX0VCVEstTnBpcFVrQmJVNnNSbGZHbElsdFJNYnZJZENIeTdDbUxKQThpMFA2S1hxazl1dmhhUzlKVkU5c1hkQkpwWWtLQ0tYTTJIcGFfZEdvRHVoY19hSzY5bkEwRkhBN2JuRTJTbjJYVWFzOTRQQXVHckZvdHRzWWplQmhtVG1vTDZTcWoyZDNLc2RaSTE5dVRlbGU4T1ljaHRlNGtLMlJMZlQ0UjluY3BnTHFNR2k1RC1tNjRWX1E3YnZ3akR2R0dPWUo2V2Zpd0JBRUExYkMwa2tsdkRRUllRSGR0aVVFRFQ0Z1hfazRfanlJSUNZSk8wYzJfcXFsdFpTcW1tZ1JzaXFyZnNGTlhyMnUtNllhQU5tTGhwTkM3N2I0VDVWMTQ3NjdlY296QXNvYlhsaDFDaFQ2b0lTaTRkaENhN1duN1pnVkVuUER3QkhscE5CSzZQZDJwSjVmUnYxWDNFWTRVSU1lMzUyVHEzX3ltb3ZrMjgxajRxaGdnRkZRb1pOTm4xcUNnNlpMYzFlNXpmNTBocnVQS3RKY1JWcUVuMGFpMDk4NlR2ek9Jcm9EeU5RSlB6Y0ZtQlU4Xy1mZ0dWb2RmbC05UWlkX2FKa2F0U21UaGIwLUFOa1NwN1FhSWxvRkZ4WnM3T21oUEZieEdHNTc3QzdJd25oQkk4blBvYUpCRHFacG85QkJPdWI1Q050YW5rbV9DclBFVl9NQXNqUkx1SWE4NE5mazFyS3o5OV91TllGcDJvTEpaTy1fWVpFWE4wcHhYcEVtdjM3LW1KbzZUYm9uZnd2R1FuY2J2eVBYUGNQa2tpd0YyTnl1dGdETFlxbnpGZjRlSXZkNDczdUt2Y0ZyUmZyM3hRUFhnTEhnSGp3SmszTjctVWlDWGVjZVpnRlJzTlAtaWx5Yzh0SVdza3RSZ2hTWUZfN05XVWNxYnpleGRfX0d3SnBUOWZnRC1yTXBycHFxeGNCTjdZSF9qOU9FcTlBQmdUTS1CMVpWQjFRdkJDZ1N4dFJ0bmlKYS1FZnpkTG9MRl8xeUlJcEV3MXZ5WkJHRVpGVUpsZjExODd0TVh0d094YmVlOXNndmUtVnJCN29YU19Ja3FONUVhWmxVSVd5M3NiQWNLX3BETEJJX2QyQm9qZG1CVHNlbFV1ZURzaE1OSG5JQ3FMbC16ZWl6M2JZemNQYmZnNVlqYmtQcm1DZzBoLXRVUVVQc2U1LVJtTHVtRXhCV3h1VnZibTRMMjR1ZjNnUFl5N2dFVE5EazFmSDZnS1RLTk9GVFhfSnJrbGtvNHhnTm1ReUxfSUVOXzlORjI1ZlJBa3duZ004M3ZKdXBYTXJuOC1EMEN4amZFcDU5Z1pmYXFucXY4NGMzZ2Y4cXl0bU5KS0V5VndiM3ZIazk3YnU0b0lnY1d1UlBVNGZGSkIwVXNvMFdNOGJROWFWYXJXZmQ5MGtZaC1yN3FNdkFYbDkzMGM2czBVcFJTdkdwU3lsZW9wS1F6TDJnSFZNZWI2TVMzTHE2VDkwVTJFTXhjbzFIc25uSWY2Qmlfc3F6NVpjallkTFRXaDVvTWxucm51MDBOTW5fZUNaUW10VUJOMHByRUVTdElwRXFjVDZFVjlKNDBveDBsMGNOcm1sWHc3aWFtb2tqdngxTTQwMTdRRURuaXVLRjdQdnc1QkVoREhSMU11bDFyMHh5c1ZDNkhGdEpCeVlhVTFFLXdoUE5Jdl9lZkRockRYMnQ2RzJxQk1CZVdEcUprNEhCV1Z1ajlJblZjQlpfZFM3eWFWQzJlampjRFYxY1p6NFhSdEhWbU1UUGxRdTJReEVLNUktQnUwTVpkT19IQ2NoblJ5U3VGS2xSWWF4d1NOaUhzTXZwSXhuZXFNMEk2VEZTODdPcXBEcmctZUI1UEQ1d1VqajdtYWk1N3dMVXZrQUlfTDZUX0tnLVU5YWdzMUp2al9GMUFzWjZob08yd2ZRejFqWnRGZXZYbkUtUC00cUt6WmpsUU5fMGVRRnF3d2hpdWw1bXl3eUViby1IZkhjWlJxYzBITXB3V0M1LUxBTzhPRGVJYm1Qay1SbEJlZFJiMDFjb3VIdmRtRy1FNm1yQ3dPb2RxZ2pKU0tiSDlfcV9nVTZXZ0NhVEZVaDMyT0Ntd2U4ZFlOcTFjZVh0NzItM0dDT1dldER2aUJjdFF6MllPQ3p5WndVcjJyZG1KOVRtQkU0Sm14MnB5QzJneGZTQVgxaXdOZUtNY3gzYjlydWoxdklIdDlmcE9tR0pIQXpjMVlhbXZEQUdRMHdxaW1UMVB5dnFOS29tcW11UGxQNWlxRGVmM0dzYWhiWG1FN3JLMHdGdlRZNWd2b2ZOMm9hblJyb2NqSlljc2FqRnRONHpXLVFkZ0ZiWDBoWkJfTGx3bUZoZW5WZEJwNlJ4MjR6dy1rd3ZwZ1JOc0xFMkIxYzJtM24wcFZ1bG5oU2R0UlpoTXFKZW1wREU1UklXTk5JU3M0Z2pfNENMd19vOGxlNnZZVTlXT0NER1Byb0pPM0hKbW16Qnd2MTlmdTRhSHFCaUZqazFZekFMYmp4UC1tTGJXSExyRWY4SVEtTWEzSHhHZnFPOUlZb1RqbUN5elpoTEpRbmtveTZHWENDQTJrYWZxOTRxY1NraWJrcDRZcEN4cDlxcEJKYUtWeHo4QmtYZVZ6M0ZWRmZnMjBCdE5HSUVlZ0JHUlZMZG9RbHFmMnVrNnNZZnZxSHloWF9ETWwycFJ5LXUwczhsaDc2MlF6emxkU051ZWVvUUVUaXljMDBXNUxaZXVWcUc4VG9ZeUx2cHhzUFgzdHJ6NzVHX3g1YzFIdG85Vl9TWGtia0lBQjdfcTFmam1PS05zb3BXNHoyNDVSUWJOQTl0YWtjRXBjRTRDRlhIVHo2cmdGQ3RLYUwzMzlxMUtrb01DRUh1RkEyS3RsMlhORnhVM21tTnE5a3pYMmdnLXpOMmoxYk9ONXRkdlVUWU5rQmJHTlBUV1lLbDBmdEdfMXNFUFBJRFJjZ1hWOThObmtIbG1MZjBUNFVRNkVLUnd0djVpbTBuLVZobkV1SHZLejVsNm1fOEM2eE1RYUluUG1neW5aeHhwZmIyX2NoMS1pcElsVDBlZjZ5TGkxWW5ldml4d2RLTEJhTFhqUE5hM1JUaTVPQjhOYW1QWElFdVIwLVZ4am5tUVBsOFlId1JzRk1tQVlVSVkwQVFoQzhibmZOZ2hVS1l6Q0lWcU04RXV6VE1sRmVHVTQwRHJOeDBDVlBVU3VlQTVsSWFEaWFjVVpYcnViLXlTX2lWcWNGRmdvMWZtTkFqNlFHak1fZEpTLXhObFRnNHJyNWM2dWNHdnE4XzhkSVJ2dHpTb3dhbkFKUTl4VjZ6RmpLX0FpSUZkMUZUdmJZZVdIdXI3aDNLR1FYbTJyRlRELWZDY3JxN281RU0zZkJJeUZDdm9mY3l6SnVBWWN0TFdKRWJnQV9lM2VmenlyUmJSWlhEb2E1eDdIMVlJQVNLOXlBTC14Zkk3aXlmbEdsdlBZNS1BSlY3REdVaWJGa1ZWRlFBMG4zQ1VLaDFHcmlYWElZZzZPbldJd0dFaXFneDdERkp0d041OUVDYlV0NHl1SjRKMXNGeFliYU0wTVpuUU80aW54akIwN0I1Vmhkcnl2bWVweExBdVNGOEpYa2ZRRVBKTHNfSTR5SVFxMjVVOHpVUkRHdzNNN3duWDlRNXhtOEoweDVwVzRlLWZMOWhLSzlVT0xic0lzOTl2NDF5SWNmaURaSFVMdDBuYUtQbGZvaVFmM1BfbjlzRXIwZjFLenhSMDhGRmlnNEpoLXd6bWQwYzVxVUVsZ2xEdHJSY25ja0phUElPdHI4clZJQ3dfZUtfYmVNUHFXV3JaOGl0djg2bVd4cGNkRXh5VHRULUNYYVdtQkxFLnBPMU1ITi1pN1YtdWdhUERPSmEwRGc"}'
    +    body: '{"value": "KUF6dXJlS2V5VmF1bHRTZWNyZXRCYWNrdXBWMS5taWNyb3NvZnQuY29tZXlKcmFXUWlPaUkwTXpnMVlqQTNZaTFrTlRRM0xUUXlaVFV0WVdVNVpTMDJNVEJrWXpNNVpHWmhaamdpTENKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V4TWpoRFFrTXRTRk15TlRZaWZRLmRBVW5ObEd6cWowZlR5WDc1bm1DYk9IT09XYWpIaG55Vmw4V2RTcE1uZ2NTZDY1djQ1WFY2NUdXenV2SjNZY09yelpiR3A5RUEyZWJCejlpUGUyd3FsSWF1SVBHSU5qdS1DNVBnNlZtdVppaTFjNGxhczVKQlFadWxxRnJMRjNQVFV5T0JZWUlBSHZLVm95V1ZvR2NwN0l4U3Qzb3pNd24zV0ZQWUtWMjlXbnNsQlRWMXZvX2pVdEdEa08xemc2SkNUNDV5UEdzVG81TWZHLUpoMUVvVW9Qdi10YWZXTHZKWHdiU0xaYnMtZ2x5MFFud0JNcEZqYVRyaHEyM2l1bTdYWC0wcGhxZlFDcGlZUERLYUt1OHZ5Ry10d0dUVEdEZGdlR1R1RGFDVDdPTVZ6TUU5UkM5dG1OR3BWS1E0UlFWTC1oZmU3RE9LRmJBTlNfRi1adngydy5pUUNUdkRfR2VsZHJnUHc0WEZReU1RLlR1SFZ5bXlPckt3d29MMnc1Ty1LMlp4dGdaTWNnLVplWjRLQjVyQ0ZtSi1POXl5allXV2pqTnh0cmNUY2E3dVNzM2ZxMVFjcFBxdFBRaWNfamViSlBseVpYc1R5eFEwZDI2WVZtTnJ2dVFKTklmaXJ5ejZwNDBWZjVNalMzMHRLb3AtQXFzanN3bDlqdWlGZER5XzZHeDNucVdITTZoUHQ3azFfRFMyb3hzanpjcVZnOVdLUEFNLVUtVnh6M0lyUVNETkNxS0ZFREhiMC1jMDY3SWpUYUJaZ3JHZzNwbi1YMGJPSXVKcUlyTnFwWW5nYjlMaXFQNFNSQWpsU1FrVEQ2ZWJneXJ6cU9GT2ZfaEt4Q2x1c0pQZENISlVubGVCOXlDWGtWY2JJS2Y1ZkVNQ3k1ek9sWGlfaEZNNnVLeDBsdlNGQW1GZGg4U3BYajdKXzBsSVV4S1IzVHFmZkEyR1M5SEgyWXNiLVhZSklMb1NzS3gtWmlLMXh3eEJLZXYzTU81U09LdU9hQmZxeFlybGkxZDJjUFZPNGQ2SlV1R3U1SEU2aFN6UXhxd2hOVUNjcUg1c0FNX1kwbndQVWMtTzVrWEctXzJsS3V6dWs4TFFuOXZIT3BEdlUyb09fSWZaMVpYQVZjMS1PaUttbDlzMC1GdDZ1SVlwNDJsWjYtSDFGUlJHeWctTVp0Vk9hSkI1Xy1XRzJ0eTJrOTMxN3pQcXZNbGxxWUJMQVFtdTFfZVF5THlJZlRTaEloREZHY0JlZ2QtcmdNY3lOUVZJN3VEUHB4RENOREs5dkhSbU9NaTg4NnJtU0NsWGpranF3RXg2THNQalNyM19OY2JvVGR5ZTYzeldWbDItVTJVbGwzenpuT3Ffb3RWeFhtYkY1eldLN3NwbDZxZVFOM0tlYVhoZUlNT2VPYV9CNUxSS2VUaGE3TmlxLVhHNFdsU0hBeXc0Z2p3OUxZb2s3YUNEUmQzVldTU2xnZTJKTzBDQXQycVFHbjVUYUUtZy1yYWQ0N2RMY3phOWVVNDBrYmw0bnUyX0NpeHBEU2RfdGJYbEpWZmR3NkhYQWZFMVROSURKdnpSSmJJc0JWejhoc3p4NmR4cElIQzkzUHFEVzZuck1PZkhRT1RJY0hrODBVT2hDeGYzbVh5Nm5zejd4dmJxUzAwaWdSdXBNQlExcXp4dFUtcmI2TDVWRnNYWF9KRXJIQ3VaTXN2RXZOaGFCbmxXTkcxWFdlb2pWRDR3XzlWT1NDbkJYeGJxb2xnNnlkZ29oeUthWktzQlJ2anBCSldpRXk1czBQRXJZYXRRZmpGMU14Z2hnSk5EcFJsNC1EOHRGV0RUb0N6TmV3enJXZnNTX1c4NTA0QnpDVGZrck5sRl9SYXdGRFNvSjQtcXREUVBmdmdYbzNxX0hCVWhKd1EtVmhuMXdrcjRfYmhxZ3kzWm90MFJueXZoaFAwWi1iTDhHYTVlSEc3cWZWM1RrdkRSWTFzZEhtWHgycHFHZ2pMcTd6VlU5MjdvZUVWREhReGNxVFRIUWZVUmktMGJmQUFrcFFxVUUzbVI4cENjdTNSWk9VUVJYNHhUalRteDNIeHNYN002WnFpdTZoYWx2Q2ltVWlmdS1CWHJUX25QRTVSTXpubTVlMjc0R251RXI2RGRpS1U4SmVERktnOXdFYzZxMnlpTl81dHF0MWRUeUNmbG90SFBrV29PSlNWaGp2Q0ZObWdUaHRPOWxhbnRucVF4cUZ4T1FraS0yZk8yb3dOS1l0LWVBallLek9QenlLNWFrcW9reUJLbTBVUjR0TjBqbmxNUnZYSzZ2cHlqMVBUcDJQM2x4bDEzanJ4OEZlNFRSbG90Und3SzJyQWkyY3BzeHJpWGE5N3AtWWZ3VDNKOUNybzRYZHhpUHYxZlRrZmpRRDFqak9NS0ltWEpRUHR5bGExajQ4ZG1tVFA3djdldHZwUEZ6M25sWURZcWZfMjQyYTJ6bFpfX0dNMkN4UWtlOEg2TmVjcm95ZWFVaTllUWk2QlVVV3dBdEFJb0IzMmVSREo4cE56UE5NVE9Hd0tqeDI4M3RFZTNlcXBfQkQxSExYZUNpbnRJa1BKenNBWTR3TWR5amVwNEtFUlJMdkI3OC0wRW5XRGRxN3ZyQlE0Rm0wR1dGZnNWWFpNOTNjSUxMdmxVaF9KdTljSXNzM2dKclRoa0txMTBqRFZXak9ZZWIySzFGRF9McDFMcl9LTHVmaG9zcUJQOEVUR0FIb2ttdjRaYTB3alNHZWw0NGhxUGhvNi15U0pXYUJXX01kTXJiUFdLaUYtYzRhNW01U2l2R19UNDNfdDI2QXhmZXRKWi1ZT0huZnRUYTlWaGlkQ0lNeEd5RmlRUXZBVmpySjhVTTEzMjdnSzN1blhzUTBEXzl1cmNHSWItU2ZZQjNUT2ctY3BUSlhJWnh4UFFydGliaEJFNEZFdTdteUprbUxiY0JGUnZSM1dIYkJkbGduU1ZVN0xpV2N1SFc2c3BWcm5wUGR1Q2FRQ2RlajdiOVdIYlpWWi1yWldhUzlOOFdPbDFEc01KdXVMQ1RvYmdmYUJTdkRWY05hT09WTnNoUTJEZGZoMEdRbFAtUjZqWlI1aU81N1NCejlidTZ5Q24zNnZvcktqTkF2aWNPdXFVS01QZjk0SEtkbFYzYy1DZTROUjQyOVk1Tkt4TWw3ZHBXRF9LVFJPeG0tSkEwODRvX1kyVERpWGpvSjVGVllTaHY3VEQ3NWNmeFpEaFVzeTMwTmY2dE1pYzBCOGpXV2lTX29JRHNvZUtlOC1LeF9TblRlRG4wUWVIYlVnM1NfZEhrbl9wdGlEQW1JVVNVVEFBcFo3M2FFOWpNM0NycExMOUVpQk1nUktMU1Zia094UU1fU1FFR0VWcTJWXzl6SUZMWlRZZExuRDFZWGFrMG1odWl3cTBMZm5lYlZtREhoZEt2Q0lTVHh4SzQycHFYSHNJSi1HZjFXZDJVRGNqSnMyLW00eDlYVFJWZFVfNF83SHJ5SVlHWFR2SUN5WklvUkJqTndLNVJNaGgtV2pGWWM3QWR1Tmo3c3c0eVlmR0lZdmRoWllWV0FIYmZjMm9JWkZLVUI2U1lQTFlPam9IMGxGRUtKcWZadDNuR3lNdVlMTE1jM0Y2MHJoaG9HTGd3MDBXY3RESjdXeDN4WXcySXhpN01pVDhGOEU4eFU0S2JpMUpXbXZlMEhIMU9tYWpBMXZjeER1d05CUDRHVVZtS21CaEp5UDdvTUVXV3NqX21ybHJpTGZ6R1pIWWk1OWJaQlpGVXdIbHlma3dpZS02WHd4MFlXaUlzUzY1RlBFMmtfNVdwNGVNRGRTMzJaclVnLVV3cTk1U1dXRkRkMzdCRlRiYUxuVXY4QTN2aVU5UzBIQWd2UUtsaUxENGx0aFNzdEFSaHhqOFdKYTNiUFZabWgtamlETXpFdEF3NnBWZG5objFfbDQ5MWt5b0JCMkxHSEtRX3Y2ZHFoVjFtWldleGhSQzNWOTFtVVYzbFpvN1h4b1RKMWJMTW5KZXZQVWttR2M5YWl6ellCcVZ4bEZPOVVsYlJSWHk0SHotal9CR2IybWQ2eHJ5UFRaOFpFS1FUV3lGUnUyUkhUUklZb2d2SnU5T2IyeUJ0VXZzQ2FzTGVhQmlUSV90VDlZNUw5X0EyYk1Db1dPTmM2Y0ZlQjdZR1VCcU1pS2V4NzJBZFpoS1I4MXVrcWwtdVhvZHVZemxRc3pPVTlfQVROSnB3RF91STdjNDE3VUtWZDZsanNNc2VKUnpDVTNCYnJ1R2JteFhLV0dlZnJKWkg3WDBMaS12WFp0M2RpaXR3ajZDejA0OUdQNHV4RF9WWGdLelVfYkpoUDBGdkhNMXp0U0syY3htaDJEVTlhRmVCQ0o4ZGtqWVJLTkpkb1hwSVNQTURpSXVVQjdWZXVZRHFOQVBGRUgzMWtoSk9EckEtYVVKd3BVaGxYLXk5Z0x5TXhnX1BLM3FWbTBJR05OTEFNd0loeVVkT3JCOWp5ZkhkSUd0azhLR0lsVUZZdlE3dVN3WHV5T3hnWHR2dnE2UTZyaFdleG9NTm8tWENLRDV5cTBJTWRwbW05STlubl9fSkY4Mmh2WDA2SmY5T0VKS01lWVFkNVBhT3NibE5adDZOUXAyQ213VTc4X0RPRzF5MzNnNmEtd2xjSmlqU210UEFBN3JkZGZVMVZ2QVRIM29VX0JleHZ4UFpTSnM2VVAtZUZuU1R6LWJsUU55Q090dnFpUkJzNWF0Uk92dU93aHA4eUQ0YXlEejRMLVpFdWhXV0JtQ3FPQU1DQUNEN1F5em5VSWEzdEo1eF85clFYaGdPanVPR1p2T0RscE9vUnRaTzNudGp5V1V5UzNPOXpfbkJNTTJmSm1wNDg3Mk01bzNTUlpsTVBzTFo1QmZOTk91VklJZjFHWDFhX3lKeWVhVG00QW5DZThCSXY3c19YOG4wSDRveHd6aHQ2anZSU21iX19lcF9vQzVrMC10eVUzQ2xpYW9xUjRpNE96ZzBBTmdOd0dNVHo5SVk4M0pKYlJ6M2xMc2ZTV29EbTd4ZDd2eS01alAyOThuVVlGemJTeHE2T0h3dFZtTGJCeGZiTl9wTTdReUNnMzE5WHRBdXF5VFFkeExDMjZPUGxmQ3I4VV9ESVU0U0ROdnN0MkVhb1VNZExXQnVOS01YYUR6NFpaYV9EZkVPQ3VEOHgtMkpxc2ZFMzY1NkIyYXJQV3JNRDhnLkFmSGxURGFnbHFiUnFhaV9PbjhldXc"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['5492']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '5492'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/secrets/restore?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/restore?api-version=7.1-preview
       response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secbak4238101d/ecd9792889c241c7b3e288dda3f8612f","attributes":{"enabled":true,"created":1575676686,"updated":1575676686,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secbak4238101d/119e13fe28dc44588451304269fca3bc","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['213']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '213'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_list_deleted_secrets.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_list_deleted_secrets.yaml
    index c0e67c1ae9e6..9379eaa99120 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_list_deleted_secrets.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_list_deleted_secrets.yaml
    @@ -2,2496 +2,5369 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "value0"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/8caa30f5b3824d0d8dc8b31035434255","attributes":{"enabled":true,"created":1575676659,"updated":1575676659,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/a1c59aa64dd84f729c8cb6334c2957c1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value1"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/daaa9e55f59b45cd828e06da8b61dff7","attributes":{"enabled":true,"created":1575676659,"updated":1575676659,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/c56ab57a96ac49ed93de80c350016e3c","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value2"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/3dbe9af9bc6e4d9ab41b1c856db54215","attributes":{"enabled":true,"created":1575676659,"updated":1575676659,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/11d8146cca3042e49a60dd542e668133","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value3"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/3b1425e13fbd493b9f3913f2a494eb89","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/e169d6b2297b4a62adaf36cc21b22ac2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value4"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/47a9a632177442309a79b55f7f61124d","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/d34697303ad9490aa6c6377a3c018f7a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value5"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/a3ddae2b3154447fb50493d26b66a0ba","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/123c7b8a2ada41c89f23d7ba25a2b0a2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value6"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/f233206a951642fe98932d042d94b16c","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/681556ba91f945a8bc9b3492c394a716","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676660,"scheduledPurgeDate":1583452660,"id":"https://vaultname.vault.azure.net/secrets/secret0/8caa30f5b3824d0d8dc8b31035434255","attributes":{"enabled":true,"created":1575676659,"updated":1575676659,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:42 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:48 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:52 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:04 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:06 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676660,"scheduledPurgeDate":1583452660,"id":"https://vaultname.vault.azure.net/secrets/secret0/8caa30f5b3824d0d8dc8b31035434255","attributes":{"enabled":true,"created":1575676659,"updated":1575676659,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:08 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0/a1c59aa64dd84f729c8cb6334c2957c1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0/a1c59aa64dd84f729c8cb6334c2957c1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676691,"scheduledPurgeDate":1583452691,"id":"https://vaultname.vault.azure.net/secrets/secret1/daaa9e55f59b45cd828e06da8b61dff7","attributes":{"enabled":true,"created":1575676659,"updated":1575676659,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:12 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:17 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:19 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:21 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676691,"scheduledPurgeDate":1583452691,"id":"https://vaultname.vault.azure.net/secrets/secret1/daaa9e55f59b45cd828e06da8b61dff7","attributes":{"enabled":true,"created":1575676659,"updated":1575676659,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:27 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449628,"scheduledPurgeDate":1591225628,"id":"https://vaultname.vault.azure.net/secrets/secret1/c56ab57a96ac49ed93de80c350016e3c","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449628,"scheduledPurgeDate":1591225628,"id":"https://vaultname.vault.azure.net/secrets/secret1/c56ab57a96ac49ed93de80c350016e3c","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676710,"scheduledPurgeDate":1583452710,"id":"https://vaultname.vault.azure.net/secrets/secret2/3dbe9af9bc6e4d9ab41b1c856db54215","attributes":{"enabled":true,"created":1575676659,"updated":1575676659,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:32 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:36 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:42 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676710,"scheduledPurgeDate":1583452710,"id":"https://vaultname.vault.azure.net/secrets/secret2/3dbe9af9bc6e4d9ab41b1c856db54215","attributes":{"enabled":true,"created":1575676659,"updated":1575676659,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:48 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2/11d8146cca3042e49a60dd542e668133","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:28 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2/11d8146cca3042e49a60dd542e668133","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676731,"scheduledPurgeDate":1583452731,"id":"https://vaultname.vault.azure.net/secrets/secret3/3b1425e13fbd493b9f3913f2a494eb89","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:52 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676731,"scheduledPurgeDate":1583452731,"id":"https://vaultname.vault.azure.net/secrets/secret3/3b1425e13fbd493b9f3913f2a494eb89","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449675,"scheduledPurgeDate":1591225675,"id":"https://vaultname.vault.azure.net/secrets/secret3/e169d6b2297b4a62adaf36cc21b22ac2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449675,"scheduledPurgeDate":1591225675,"id":"https://vaultname.vault.azure.net/secrets/secret3/e169d6b2297b4a62adaf36cc21b22ac2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676751,"scheduledPurgeDate":1583452751,"id":"https://vaultname.vault.azure.net/secrets/secret4/47a9a632177442309a79b55f7f61124d","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:15 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:17 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:19 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:21 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676751,"scheduledPurgeDate":1583452751,"id":"https://vaultname.vault.azure.net/secrets/secret4/47a9a632177442309a79b55f7f61124d","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449694,"scheduledPurgeDate":1591225694,"id":"https://vaultname.vault.azure.net/secrets/secret4/d34697303ad9490aa6c6377a3c018f7a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:28 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449694,"scheduledPurgeDate":1591225694,"id":"https://vaultname.vault.azure.net/secrets/secret4/d34697303ad9490aa6c6377a3c018f7a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"id":"https://vaultname.vault.azure.net/secrets/secret5/a3ddae2b3154447fb50493d26b66a0ba","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:32 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:36 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:42 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"id":"https://vaultname.vault.azure.net/secrets/secret5/a3ddae2b3154447fb50493d26b66a0ba","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:48 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5/123c7b8a2ada41c89f23d7ba25a2b0a2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5/123c7b8a2ada41c89f23d7ba25a2b0a2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676791,"scheduledPurgeDate":1583452791,"id":"https://vaultname.vault.azure.net/secrets/secret6/f233206a951642fe98932d042d94b16c","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:52 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676791,"scheduledPurgeDate":1583452791,"id":"https://vaultname.vault.azure.net/secrets/secret6/f233206a951642fe98932d042d94b16c","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.0
    -  response:
    -    body: {string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676660,"scheduledPurgeDate":1583452660,"id":"https://vaultname.vault.azure.net/secrets/secret0","attributes":{"enabled":true,"created":1575676659,"updated":1575676659,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676691,"scheduledPurgeDate":1583452691,"id":"https://vaultname.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1575676659,"updated":1575676659,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676710,"scheduledPurgeDate":1583452710,"id":"https://vaultname.vault.azure.net/secrets/secret2","attributes":{"enabled":true,"created":1575676659,"updated":1575676659,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676731,"scheduledPurgeDate":1583452731,"id":"https://vaultname.vault.azure.net/secrets/secret3","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676751,"scheduledPurgeDate":1583452751,"id":"https://vaultname.vault.azure.net/secrets/secret4","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676768,"scheduledPurgeDate":1583452768,"id":"https://vaultname.vault.azure.net/secrets/secret5","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676791,"scheduledPurgeDate":1583452791,"id":"https://vaultname.vault.azure.net/secrets/secret6","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2337']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:12 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449745,"scheduledPurgeDate":1591225745,"id":"https://vaultname.vault.azure.net/secrets/secret6/681556ba91f945a8bc9b3492c394a716","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:24 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449745,"scheduledPurgeDate":1591225745,"id":"https://vaultname.vault.azure.net/secrets/secret6/681556ba91f945a8bc9b3492c394a716","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449628,"scheduledPurgeDate":1591225628,"id":"https://vaultname.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449675,"scheduledPurgeDate":1591225675,"id":"https://vaultname.vault.azure.net/secrets/secret3","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449694,"scheduledPurgeDate":1591225694,"id":"https://vaultname.vault.azure.net/secrets/secret4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449745,"scheduledPurgeDate":1591225745,"id":"https://vaultname.vault.azure.net/secrets/secret6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2337'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_list_versions.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_list_versions.yaml
    index 29ab80f8919c..4e3c91cba6e2 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_list_versions.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_list_versions.yaml
    @@ -2,290 +2,517 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "secVal33a90fd8"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/0bbd348aa4f2409494a618e2c776fb74","attributes":{"enabled":true,"created":1575676725,"updated":1575676725,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/87832366a609425aa5870f0cc62a0c46","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['238']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '250'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "secVal33a90fd8"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/6226be7ddcf749129f028455ccf2b162","attributes":{"enabled":true,"created":1575676725,"updated":1575676725,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/404716bcdaf140f9aca4bc4f8ab0fcb4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['238']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '250'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "secVal33a90fd8"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/01540b9e7ddb452886b5d734d2f23ccf","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/315dd4524e704dd59022ad0774e31555","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['238']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '250'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "secVal33a90fd8"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/aa699127c066423aadf726261bcbd184","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/ad4d9cc3ce3345bcabdbce938d26870d","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['238']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '250'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "secVal33a90fd8"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/a12d5998a51544fab7fc42f6a2b26dc2","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/3b91971eb92b4f2ebc6e2b6f5de7a5fa","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['238']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '250'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "secVal33a90fd8"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/23e4e99eab9d40b1a57f2188c5de3b49","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/2b6f200d0bd246f5b1a12c6317ef9cb1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['238']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '250'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "secVal33a90fd8"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['27']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '27'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/370ce4026aca41ce9b4aeb267ce471e4","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal33a90fd8","id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/d99f8f09ea7d49cfa222307a52b4b22c","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['238']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '250'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8/versions?maxresults=6&api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8/versions?maxresults=6&api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/01540b9e7ddb452886b5d734d2f23ccf","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/0bbd348aa4f2409494a618e2c776fb74","attributes":{"enabled":true,"created":1575676725,"updated":1575676725,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/23e4e99eab9d40b1a57f2188c5de3b49","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/370ce4026aca41ce9b4aeb267ce471e4","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/6226be7ddcf749129f028455ccf2b162","attributes":{"enabled":true,"created":1575676725,"updated":1575676725,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/a12d5998a51544fab7fc42f6a2b26dc2","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/secrets/secVer33a90fd8/versions?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMzIhTURBd01EVTBJWE5sWTNKbGRDOVRSVU5XUlZJek0wRTVNRVpFT0M5QlFUWTVPVEV5TjBNd05qWTBNak5CUVVSR056STJNall4UWtOQ1JERTROQ0V3TURBd01qZ2hPVGs1T1MweE1pMHpNVlF5TXpvMU9UbzFPUzQ1T1RrNU9UazVXaUUtIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6"}'}
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/2b6f200d0bd246f5b1a12c6317ef9cb1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/315dd4524e704dd59022ad0774e31555","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/3b91971eb92b4f2ebc6e2b6f5de7a5fa","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/404716bcdaf140f9aca4bc4f8ab0fcb4","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/87832366a609425aa5870f0cc62a0c46","attributes":{"enabled":true,"created":1583449591,"updated":1583449591,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/ad4d9cc3ce3345bcabdbce938d26870d","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/secrets/secVer33a90fd8/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMzIhTURBd01EVTBJWE5sWTNKbGRDOVRSVU5XUlZJek0wRTVNRVpFT0M5RU9UbEdPRVl3T1VWQk4wUTBPVU5HUVRJeU1qTXdOMEUxTWtJMFFqSXlReUV3TURBd01qZ2hPVGs1T1MweE1pMHpNVlF5TXpvMU9UbzFPUzQ1T1RrNU9UazVXaUUtIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1666']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1746'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8/versions?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMzIhTURBd01EVTBJWE5sWTNKbGRDOVRSVU5XUlZJek0wRTVNRVpFT0M5QlFUWTVPVEV5TjBNd05qWTBNak5CUVVSR056STJNall4UWtOQ1JERTROQ0V3TURBd01qZ2hPVGs1T1MweE1pMHpNVlF5TXpvMU9UbzFPUzQ1T1RrNU9UazVXaUUtIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6
    +    uri: https://vaultname.vault.azure.net/secrets/secVer33a90fd8/versions?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiExMzIhTURBd01EVTBJWE5sWTNKbGRDOVRSVU5XUlZJek0wRTVNRVpFT0M5RU9UbEdPRVl3T1VWQk4wUTBPVU5HUVRJeU1qTXdOMEUxTWtJMFFqSXlReUV3TURBd01qZ2hPVGs1T1MweE1pMHpNVlF5TXpvMU9UbzFPUzQ1T1RrNU9UazVXaUUtIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/aa699127c066423aadf726261bcbd184","attributes":{"enabled":true,"created":1575676726,"updated":1575676726,"recoveryLevel":"Purgeable"}}],"nextLink":null}'}
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/secVer33a90fd8/d99f8f09ea7d49cfa222307a52b4b22c","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['241']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '253'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_logging_disabled.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_logging_disabled.yaml
    index 4161ceeed2b5..269a4a6fa563 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_logging_disabled.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_logging_disabled.yaml
    @@ -2,62 +2,109 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "secret-value"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['25']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '25'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/d46ee1ff530040cb94b71d1baf988107","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/25528db052d74daab1a305778ad676af","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['233']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '245'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_logging_enabled.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_logging_enabled.yaml
    index 55d0005cd410..0ae52798fc6b 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_logging_enabled.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_logging_enabled.yaml
    @@ -2,62 +2,109 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "secret-value"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['25']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '25'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/secret-name?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/816296bddbfe447c84298b0ed8a56f29","attributes":{"enabled":true,"created":1575676826,"updated":1575676826,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secret-value","id":"https://vaultname.vault.azure.net/secrets/secret-name/e0f683092d9343219b668b7ad41aacc8","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['233']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '245'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_purge.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_purge.yaml
    index 7f0702794ef0..48e0a713e10e 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_purge.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_purge.yaml
    @@ -2,2873 +2,6082 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "value0"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/fbc56f9d24664a49970b0e62c93fc085","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/9f0708158abc45158d0f255783d922ad","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value1"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/0a679e23a50b47919a008aa02ad3b096","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/04abe531527f4398952ee937665dc9c3","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value2"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/12c9290948134a909f0046a0455b3c74","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/98f566822edc4437b1430708534cd5ae","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value3"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/98c16a291a1e44ad9b13e6de8a1428f3","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/10f084606c0e4dae8298d18cd3dc967f","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value4"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/1a11b3d0a24a4d3abd897c1e15ed5e8a","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/515d895aac044bb29432a958c5a9db0e","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value5"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/16ca1472a1a94115b620611c014510c5","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/146f45af1b674e7eacaf05d2d889338f","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value6"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/a4a8c0d406b24b938c9d79608f89cf14","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676662,"scheduledPurgeDate":1583452662,"id":"https://vaultname.vault.azure.net/secrets/secret0/fbc56f9d24664a49970b0e62c93fc085","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:47 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:51 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:53 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676662,"scheduledPurgeDate":1583452662,"id":"https://vaultname.vault.azure.net/secrets/secret0/fbc56f9d24664a49970b0e62c93fc085","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676691,"scheduledPurgeDate":1583452691,"id":"https://vaultname.vault.azure.net/secrets/secret1/0a679e23a50b47919a008aa02ad3b096","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:15 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:17 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:19 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:21 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676691,"scheduledPurgeDate":1583452691,"id":"https://vaultname.vault.azure.net/secrets/secret1/0a679e23a50b47919a008aa02ad3b096","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"id":"https://vaultname.vault.azure.net/secrets/secret2/12c9290948134a909f0046a0455b3c74","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:32 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:36 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:42 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"id":"https://vaultname.vault.azure.net/secrets/secret2/12c9290948134a909f0046a0455b3c74","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676729,"scheduledPurgeDate":1583452729,"id":"https://vaultname.vault.azure.net/secrets/secret3/98c16a291a1e44ad9b13e6de8a1428f3","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:48 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:48 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:53 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:04 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:06 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:08 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676729,"scheduledPurgeDate":1583452729,"id":"https://vaultname.vault.azure.net/secrets/secret3/98c16a291a1e44ad9b13e6de8a1428f3","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret4/1a11b3d0a24a4d3abd897c1e15ed5e8a","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:12 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:12 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:18 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:20 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret4/1a11b3d0a24a4d3abd897c1e15ed5e8a","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676769,"scheduledPurgeDate":1583452769,"id":"https://vaultname.vault.azure.net/secrets/secret5/16ca1472a1a94115b620611c014510c5","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:32 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:34 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:36 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676769,"scheduledPurgeDate":1583452769,"id":"https://vaultname.vault.azure.net/secrets/secret5/16ca1472a1a94115b620611c014510c5","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:47 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676790,"scheduledPurgeDate":1583452790,"id":"https://vaultname.vault.azure.net/secrets/secret6/a4a8c0d406b24b938c9d79608f89cf14","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:52 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676790,"scheduledPurgeDate":1583452790,"id":"https://vaultname.vault.azure.net/secrets/secret6/a4a8c0d406b24b938c9d79608f89cf14","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.0
    -  response:
    -    body: {string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676662,"scheduledPurgeDate":1583452662,"id":"https://vaultname.vault.azure.net/secrets/secret0","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676691,"scheduledPurgeDate":1583452691,"id":"https://vaultname.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676708,"scheduledPurgeDate":1583452708,"id":"https://vaultname.vault.azure.net/secrets/secret2","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676729,"scheduledPurgeDate":1583452729,"id":"https://vaultname.vault.azure.net/secrets/secret3","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret4","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676769,"scheduledPurgeDate":1583452769,"id":"https://vaultname.vault.azure.net/secrets/secret5","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676790,"scheduledPurgeDate":1583452790,"id":"https://vaultname.vault.azure.net/secrets/secret6","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2337']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:00:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:00:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/3242cf5860234c96b209f101fcf8c5b6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0/9f0708158abc45158d0f255783d922ad","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0/9f0708158abc45158d0f255783d922ad","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449629,"scheduledPurgeDate":1591225629,"id":"https://vaultname.vault.azure.net/secrets/secret1/04abe531527f4398952ee937665dc9c3","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449629,"scheduledPurgeDate":1591225629,"id":"https://vaultname.vault.azure.net/secrets/secret1/04abe531527f4398952ee937665dc9c3","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: ['*/*']
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2/98f566822edc4437b1430708534cd5ae","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:52 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2/98f566822edc4437b1430708534cd5ae","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: ''}
    -    headers:
    -      cache-control: [no-cache]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 204, message: No Content}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.0
    -  response:
    -    body: {string: '{"value":[],"nextLink":null}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['28']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449675,"scheduledPurgeDate":1591225675,"id":"https://vaultname.vault.azure.net/secrets/secret3/10f084606c0e4dae8298d18cd3dc967f","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:58 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449675,"scheduledPurgeDate":1591225675,"id":"https://vaultname.vault.azure.net/secrets/secret3/10f084606c0e4dae8298d18cd3dc967f","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449696,"scheduledPurgeDate":1591225696,"id":"https://vaultname.vault.azure.net/secrets/secret4/515d895aac044bb29432a958c5a9db0e","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:24 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:28 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449696,"scheduledPurgeDate":1591225696,"id":"https://vaultname.vault.azure.net/secrets/secret4/515d895aac044bb29432a958c5a9db0e","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5/146f45af1b674e7eacaf05d2d889338f","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:58 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5/146f45af1b674e7eacaf05d2d889338f","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449745,"scheduledPurgeDate":1591225745,"id":"https://vaultname.vault.azure.net/secrets/secret6/3242cf5860234c96b209f101fcf8c5b6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449745,"scheduledPurgeDate":1591225745,"id":"https://vaultname.vault.azure.net/secrets/secret6/3242cf5860234c96b209f101fcf8c5b6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449629,"scheduledPurgeDate":1591225629,"id":"https://vaultname.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449675,"scheduledPurgeDate":1591225675,"id":"https://vaultname.vault.azure.net/secrets/secret3","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449696,"scheduledPurgeDate":1591225696,"id":"https://vaultname.vault.azure.net/secrets/secret4","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449745,"scheduledPurgeDate":1591225745,"id":"https://vaultname.vault.azure.net/secrets/secret6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2337'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Thu, 05 Mar 2020 23:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Thu, 05 Mar 2020 23:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Thu, 05 Mar 2020 23:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Thu, 05 Mar 2020 23:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Thu, 05 Mar 2020 23:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Thu, 05 Mar 2020 23:09:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - '*/*'
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: DELETE
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: ''
    +    headers:
    +      cache-control:
    +      - no-cache
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 204
    +      message: No Content
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":[],"nextLink":null}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '28'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_recover.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_recover.yaml
    index 4a60ef3e4983..c34eaa5de425 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_recover.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_recover.yaml
    @@ -2,4778 +2,10711 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "value0"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/57d2977309034e1c9204b688ecebfea8","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/b2ac4623e8c641caafe69d1a769afd04","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value1"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/58a28653e9b5410f8d2859b740b32e11","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/6a2da6817cdd4e4db24e9c989c40c8a2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value2"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/ba2b8cec41a5460eaa330c03c5eee17e","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/b096df6b2de24ae3996eeefc57cda80b","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value3"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/6ba1854f90304428909a6588477a6a92","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/69199152a5184bdc959343102db64ca6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value4"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/3e9004e1137a492186b8f9cbbddc280e","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/2ccdac6995f84f6dafc6182f384a29c1","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value5"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/293c06ab3aa94062b95092400c484ab6","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/aca03b4dbce14dfdaae9ca7429601f2d","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "value6"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['19']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '19'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/01142602912341dc82714cefaaaa30f1","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/468144541ba5481a85804f899b091c06","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676661,"scheduledPurgeDate":1583452661,"id":"https://vaultname.vault.azure.net/secrets/secret0/57d2977309034e1c9204b688ecebfea8","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:47 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:51 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:53 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:55 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:57 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:57:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676661,"scheduledPurgeDate":1583452661,"id":"https://vaultname.vault.azure.net/secrets/secret0/57d2977309034e1c9204b688ecebfea8","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0/b2ac4623e8c641caafe69d1a769afd04","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0/b2ac4623e8c641caafe69d1a769afd04","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676690,"scheduledPurgeDate":1583452690,"id":"https://vaultname.vault.azure.net/secrets/secret1/58a28653e9b5410f8d2859b740b32e11","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:12 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:18 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:20 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676690,"scheduledPurgeDate":1583452690,"id":"https://vaultname.vault.azure.net/secrets/secret1/58a28653e9b5410f8d2859b740b32e11","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449627,"scheduledPurgeDate":1591225627,"id":"https://vaultname.vault.azure.net/secrets/secret1/6a2da6817cdd4e4db24e9c989c40c8a2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449627,"scheduledPurgeDate":1591225627,"id":"https://vaultname.vault.azure.net/secrets/secret1/6a2da6817cdd4e4db24e9c989c40c8a2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676709,"scheduledPurgeDate":1583452709,"id":"https://vaultname.vault.azure.net/secrets/secret2/ba2b8cec41a5460eaa330c03c5eee17e","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:31 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:33 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676709,"scheduledPurgeDate":1583452709,"id":"https://vaultname.vault.azure.net/secrets/secret2/ba2b8cec41a5460eaa330c03c5eee17e","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:47 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2/b096df6b2de24ae3996eeefc57cda80b","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:52 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2/b096df6b2de24ae3996eeefc57cda80b","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676730,"scheduledPurgeDate":1583452730,"id":"https://vaultname.vault.azure.net/secrets/secret3/6ba1854f90304428909a6588477a6a92","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:51 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:53 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:55 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:57 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:58:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676730,"scheduledPurgeDate":1583452730,"id":"https://vaultname.vault.azure.net/secrets/secret3/6ba1854f90304428909a6588477a6a92","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449675,"scheduledPurgeDate":1591225675,"id":"https://vaultname.vault.azure.net/secrets/secret3/69199152a5184bdc959343102db64ca6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:07:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449675,"scheduledPurgeDate":1591225675,"id":"https://vaultname.vault.azure.net/secrets/secret3/69199152a5184bdc959343102db64ca6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret4/3e9004e1137a492186b8f9cbbddc280e","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:12 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:12 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:15 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:17 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:19 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:21 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret4/3e9004e1137a492186b8f9cbbddc280e","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:27 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449695,"scheduledPurgeDate":1591225695,"id":"https://vaultname.vault.azure.net/secrets/secret4/2ccdac6995f84f6dafc6182f384a29c1","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:28 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449695,"scheduledPurgeDate":1591225695,"id":"https://vaultname.vault.azure.net/secrets/secret4/2ccdac6995f84f6dafc6182f384a29c1","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676769,"scheduledPurgeDate":1583452769,"id":"https://vaultname.vault.azure.net/secrets/secret5/293c06ab3aa94062b95092400c484ab6","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:29 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:29 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:31 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:33 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676769,"scheduledPurgeDate":1583452769,"id":"https://vaultname.vault.azure.net/secrets/secret5/293c06ab3aa94062b95092400c484ab6","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:47 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5/aca03b4dbce14dfdaae9ca7429601f2d","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:52 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:08:58 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5/aca03b4dbce14dfdaae9ca7429601f2d","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676790,"scheduledPurgeDate":1583452790,"id":"https://vaultname.vault.azure.net/secrets/secret6/01142602912341dc82714cefaaaa30f1","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:51 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:56 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Fri, 06 Dec 2019 23:59:58 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:00 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:02 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:04 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not
    -        found: secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['81']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.0
    -  response:
    -    body: {string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676790,"scheduledPurgeDate":1583452790,"id":"https://vaultname.vault.azure.net/secrets/secret6/01142602912341dc82714cefaaaa30f1","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['362']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.0
    -  response:
    -    body: {string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1575676661,"scheduledPurgeDate":1583452661,"id":"https://vaultname.vault.azure.net/secrets/secret0","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1575676690,"scheduledPurgeDate":1583452690,"id":"https://vaultname.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1575676709,"scheduledPurgeDate":1583452709,"id":"https://vaultname.vault.azure.net/secrets/secret2","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1575676730,"scheduledPurgeDate":1583452730,"id":"https://vaultname.vault.azure.net/secrets/secret3","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1575676752,"scheduledPurgeDate":1583452752,"id":"https://vaultname.vault.azure.net/secrets/secret4","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1575676769,"scheduledPurgeDate":1583452769,"id":"https://vaultname.vault.azure.net/secrets/secret5","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1575676790,"scheduledPurgeDate":1583452790,"id":"https://vaultname.vault.azure.net/secrets/secret6","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['2337']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/secrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449745,"scheduledPurgeDate":1591225745,"id":"https://vaultname.vault.azure.net/secrets/secret6/468144541ba5481a85804f899b091c06","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Deleted Secret not found:
    +        secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '81'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449745,"scheduledPurgeDate":1591225745,"id":"https://vaultname.vault.azure.net/secrets/secret6/468144541ba5481a85804f899b091c06","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '362'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/deletedsecrets?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":[{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret0","deletedDate":1583449593,"scheduledPurgeDate":1591225593,"id":"https://vaultname.vault.azure.net/secrets/secret0","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret1","deletedDate":1583449627,"scheduledPurgeDate":1591225627,"id":"https://vaultname.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret2","deletedDate":1583449643,"scheduledPurgeDate":1591225643,"id":"https://vaultname.vault.azure.net/secrets/secret2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret3","deletedDate":1583449675,"scheduledPurgeDate":1591225675,"id":"https://vaultname.vault.azure.net/secrets/secret3","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret4","deletedDate":1583449695,"scheduledPurgeDate":1591225695,"id":"https://vaultname.vault.azure.net/secrets/secret4","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret5","deletedDate":1583449720,"scheduledPurgeDate":1591225720,"id":"https://vaultname.vault.azure.net/secrets/secret5","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/secret6","deletedDate":1583449745,"scheduledPurgeDate":1591225745,"id":"https://vaultname.vault.azure.net/secrets/secret6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '2337'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret0/57d2977309034e1c9204b688ecebfea8","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['218']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:15 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:17 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:19 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:21 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret0"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/57d2977309034e1c9204b688ecebfea8","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret0/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret0/b2ac4623e8c641caafe69d1a769afd04","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '218'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:47 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:52 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:09:58 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:02 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:04 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:06 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret0"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/b2ac4623e8c641caafe69d1a769afd04","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret1/58a28653e9b5410f8d2859b740b32e11","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['218']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:27 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:27 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:29 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:31 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:33 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:38 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:40 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:42 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:44 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret1"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:46 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/58a28653e9b5410f8d2859b740b32e11","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:48 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret1/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret1/6a2da6817cdd4e4db24e9c989c40c8a2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '218'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret1"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:29 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/6a2da6817cdd4e4db24e9c989c40c8a2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret2/ba2b8cec41a5460eaa330c03c5eee17e","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['218']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:50 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:52 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:54 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:57 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:00:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret2"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:10 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/ba2b8cec41a5460eaa330c03c5eee17e","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:12 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret2/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret2/b096df6b2de24ae3996eeefc57cda80b","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '218'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:49 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:51 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:53 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret2"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:55 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/b096df6b2de24ae3996eeefc57cda80b","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret3/6ba1854f90304428909a6588477a6a92","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['218']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:14 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:16 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:18 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:20 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:22 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:24 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret3"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:26 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/6ba1854f90304428909a6588477a6a92","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:28 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret3/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret3/69199152a5184bdc959343102db64ca6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '218'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:57 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:10:59 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:01 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:08 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:10 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:12 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:14 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:16 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:18 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:20 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:22 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret3"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:24 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/69199152a5184bdc959343102db64ca6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret4/3e9004e1137a492186b8f9cbbddc280e","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['218']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:30 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:33 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:37 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:39 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:41 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:43 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:45 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret4"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:47 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/3e9004e1137a492186b8f9cbbddc280e","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:49 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret4/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret4/2ccdac6995f84f6dafc6182f384a29c1","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '218'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:26 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:28 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:35 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:37 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:39 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:41 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:43 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:46 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret4"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:48 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/2ccdac6995f84f6dafc6182f384a29c1","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret5/293c06ab3aa94062b95092400c484ab6","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['218']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:51 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:51 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:53 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:55 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:57 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:59 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:01 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:07 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret5"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:09 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/293c06ab3aa94062b95092400c484ab6","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:11 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret5/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret5/aca03b4dbce14dfdaae9ca7429601f2d","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '218'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:50 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:52 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:54 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:56 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:11:58 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:00 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:03 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:05 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:07 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:09 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:11 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:13 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret5"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:15 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/aca03b4dbce14dfdaae9ca7429601f2d","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: POST
    -    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6/recover?api-version=7.0
    -  response:
    -    body: {string: '{"id":"https://vaultname.vault.azure.net/secrets/secret6/01142602912341dc82714cefaaaa30f1","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['218']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:13 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:15 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:17 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:19 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:21 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:23 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:25 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:27 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:29 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"error":{"code":"SecretNotFound","message":"Secret not found:
    -        secret6"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['73']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:31 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 404, message: Not Found}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/01142602912341dc82714cefaaaa30f1","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:33 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/57d2977309034e1c9204b688ecebfea8","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/58a28653e9b5410f8d2859b740b32e11","attributes":{"enabled":true,"created":1575676660,"updated":1575676660,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/ba2b8cec41a5460eaa330c03c5eee17e","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/6ba1854f90304428909a6588477a6a92","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/3e9004e1137a492186b8f9cbbddc280e","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/293c06ab3aa94062b95092400c484ab6","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    -- request:
    -    body: null
    -    headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    -    method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.0
    -  response:
    -    body: {string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/01142602912341dc82714cefaaaa30f1","attributes":{"enabled":true,"created":1575676661,"updated":1575676661,"recoveryLevel":"Recoverable+Purgeable"}}'}
    -    headers:
    -      cache-control: [no-cache]
    -      content-length: ['235']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:02:35 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +    uri: https://vaultname.vault.azure.net/deletedsecrets/secret6/recover?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"id":"https://vaultname.vault.azure.net/secrets/secret6/468144541ba5481a85804f899b091c06","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '218'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:17 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:19 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:21 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:23 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:25 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:27 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:30 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:36 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:38 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:40 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"error":{"code":"SecretNotFound","message":"Secret not found: secret6"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '73'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:42 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 404
    +      message: Not Found
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/468144541ba5481a85804f899b091c06","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret0/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value0","id":"https://vaultname.vault.azure.net/secrets/secret0/b2ac4623e8c641caafe69d1a769afd04","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret1/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value1","id":"https://vaultname.vault.azure.net/secrets/secret1/6a2da6817cdd4e4db24e9c989c40c8a2","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret2/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value2","id":"https://vaultname.vault.azure.net/secrets/secret2/b096df6b2de24ae3996eeefc57cda80b","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret3/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value3","id":"https://vaultname.vault.azure.net/secrets/secret3/69199152a5184bdc959343102db64ca6","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret4/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value4","id":"https://vaultname.vault.azure.net/secrets/secret4/2ccdac6995f84f6dafc6182f384a29c1","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret5/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value5","id":"https://vaultname.vault.azure.net/secrets/secret5/aca03b4dbce14dfdaae9ca7429601f2d","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:44 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
    +- request:
    +    body: null
    +    headers:
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
    +    method: GET
    +    uri: https://vaultname.vault.azure.net/secrets/secret6/?api-version=7.1-preview
    +  response:
    +    body:
    +      string: '{"value":"value6","id":"https://vaultname.vault.azure.net/secrets/secret6/468144541ba5481a85804f899b091c06","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
    +    headers:
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '235'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:12:45 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_secret_crud_operations.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_secret_crud_operations.yaml
    index 62306ecd5113..1ce9523b6349 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_secret_crud_operations.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_secret_crud_operations.yaml
    @@ -2,210 +2,367 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:03 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:31 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "crud_secret_valued267137a"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['38']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '38'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"crud_secret_valued267137a","id":"https://vaultname.vault.azure.net/secrets/crud-secret/616453e345b74d878c8c1c75dc56dd04","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"crud_secret_valued267137a","id":"https://vaultname.vault.azure.net/secrets/crud-secret/fdcd68e08f1642a7b8b11c2bb94cbf8a","attributes":{"enabled":true,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['246']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:04 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '258'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "crud_secret_valued267137a", "tags": {"foo": "created tag"},
           "contentType": "password", "attributes": {"enabled": true, "nbf": 1422864000,
           "exp": 2527401600}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['168']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '168'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"crud_secret_valued267137a","contentType":"password","id":"https://vaultname.vault.azure.net/secrets/crud-secret/09d683cd1ac54e579569a85176bdffa2","attributes":{"enabled":true,"nbf":1422864000,"exp":2527401600,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"},"tags":{"foo":"created
    -        tag"}}'}
    +    body:
    +      string: '{"value":"crud_secret_valued267137a","contentType":"password","id":"https://vaultname.vault.azure.net/secrets/crud-secret/73ef20a37aaa4bfeb34d73f85b8b720c","attributes":{"enabled":true,"nbf":1422864000,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"created
    +        tag"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['334']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:04 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret/?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret/?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"crud_secret_valued267137a","contentType":"password","id":"https://vaultname.vault.azure.net/secrets/crud-secret/09d683cd1ac54e579569a85176bdffa2","attributes":{"enabled":true,"nbf":1422864000,"exp":2527401600,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"},"tags":{"foo":"created
    -        tag"}}'}
    +    body:
    +      string: '{"value":"crud_secret_valued267137a","contentType":"password","id":"https://vaultname.vault.azure.net/secrets/crud-secret/73ef20a37aaa4bfeb34d73f85b8b720c","attributes":{"enabled":true,"nbf":1422864000,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"created
    +        tag"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['334']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:04 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret/09d683cd1ac54e579569a85176bdffa2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret/73ef20a37aaa4bfeb34d73f85b8b720c?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"crud_secret_valued267137a","contentType":"password","id":"https://vaultname.vault.azure.net/secrets/crud-secret/09d683cd1ac54e579569a85176bdffa2","attributes":{"enabled":true,"nbf":1422864000,"exp":2527401600,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"},"tags":{"foo":"created
    -        tag"}}'}
    +    body:
    +      string: '{"value":"crud_secret_valued267137a","contentType":"password","id":"https://vaultname.vault.azure.net/secrets/crud-secret/73ef20a37aaa4bfeb34d73f85b8b720c","attributes":{"enabled":true,"nbf":1422864000,"exp":2527401600,"created":1583449592,"updated":1583449592,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"created
    +        tag"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['334']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:04 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '346'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"contentType": "text/plain", "attributes": {"enabled": false, "exp": 2524723200},
           "tags": {"foo": "updated tag"}}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['114']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '114'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PATCH
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret/09d683cd1ac54e579569a85176bdffa2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret/73ef20a37aaa4bfeb34d73f85b8b720c?api-version=7.1-preview
       response:
    -    body: {string: '{"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/crud-secret/09d683cd1ac54e579569a85176bdffa2","attributes":{"enabled":false,"nbf":1422864000,"exp":2524723200,"created":1575676865,"updated":1575676866,"recoveryLevel":"Purgeable"},"tags":{"foo":"updated
    -        tag"}}'}
    +    body:
    +      string: '{"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/crud-secret/73ef20a37aaa4bfeb34d73f85b8b720c","attributes":{"enabled":false,"nbf":1422864000,"exp":2524723200,"created":1583449592,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['301']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '313'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: DELETE
    -    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/crud-secret?api-version=7.1-preview
       response:
    -    body: {string: '{"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/crud-secret/09d683cd1ac54e579569a85176bdffa2","attributes":{"enabled":false,"nbf":1422864000,"exp":2524723200,"created":1575676865,"updated":1575676866,"recoveryLevel":"Purgeable"},"tags":{"foo":"updated
    -        tag"}}'}
    +    body:
    +      string: '{"recoveryId":"https://vaultname.vault.azure.net/deletedsecrets/crud-secret","deletedDate":1583449594,"scheduledPurgeDate":1591225594,"contentType":"text/plain","id":"https://vaultname.vault.azure.net/secrets/crud-secret/73ef20a37aaa4bfeb34d73f85b8b720c","attributes":{"enabled":false,"nbf":1422864000,"exp":2524723200,"created":1583449592,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"},"tags":{"foo":"updated
    +        tag"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['301']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '461'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:34 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_secret_list.yaml b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_secret_list.yaml
    index 20c75e6d2e96..00a445ba1469 100644
    --- a/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_secret_list.yaml
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/recordings/test_secrets_client.test_secret_list.yaml
    @@ -2,290 +2,517 @@ interactions:
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['0']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '0'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec0?api-version=7.1-preview
       response:
    -    body: {string: '{"error":{"code":"Unauthorized","message":"Request is missing
    -        a Bearer or PoP token."}}'}
    +    body:
    +      string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
    +        or PoP token."}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['87']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:04 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    -          resource="https://vault.azure.net"']
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 401, message: Unauthorized}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '87'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      www-authenticate:
    +      - Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
    +        resource="https://vault.azure.net"
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 401
    +      message: Unauthorized
     - request:
         body: '{"value": "secVal013d40ee5"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['28']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '28'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec0?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec0?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal013d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec0/97a64b567377442681a89701e2a24dc9","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal013d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec0/4c5401c90d7745c7863419620f1333a8","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['229']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '241'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "secVal113d40ee5"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['28']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '28'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec1?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec1?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal113d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec1/44fd382da5304a80af86182204754857","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal113d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec1/4b54223cf65d4c59a330a421cd3083a4","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['229']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '241'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:32 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "secVal213d40ee5"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['28']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '28'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec2?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec2?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal213d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec2/2569f7dcf36f4fee80de2767b8291f37","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal213d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec2/a2e8ac613cf041ff8ba752f25d400735","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['229']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '241'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "secVal313d40ee5"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['28']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '28'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec3?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec3?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal313d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec3/cdd1fa12dd8740068d50d2c79a9b221f","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal313d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec3/5c8c40cfaf0d47a999200848a97473b2","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['229']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '241'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "secVal413d40ee5"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['28']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '28'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec4?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec4?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal413d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec4/f5f9c16e27874a9d8eaafc961e31ca2a","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal413d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec4/9d9f07370e1a481a9ac32ee131fa3226","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['229']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '241'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "secVal513d40ee5"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['28']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '28'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec5?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec5?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal513d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec5/36b2d4c19c214222895cc05de154fadf","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal513d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec5/32d0d5017f6841f8b168f8cec181756f","attributes":{"enabled":true,"created":1583449594,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['229']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '241'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: '{"value": "secVal613d40ee5"}'
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      Content-Length: ['28']
    -      Content-Type: [application/json; charset=utf-8]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      Content-Length:
    +      - '28'
    +      Content-Type:
    +      - application/json; charset=utf-8
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: PUT
    -    uri: https://vaultname.vault.azure.net/secrets/sec6?api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets/sec6?api-version=7.1-preview
       response:
    -    body: {string: '{"value":"secVal613d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec6/ca6d7135e2eb466ea394e7f802d18d8a","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}}'}
    +    body:
    +      string: '{"value":"secVal613d40ee5","id":"https://vaultname.vault.azure.net/secrets/sec6/11d8af7827834edd9d58c367e9baa016","attributes":{"enabled":true,"created":1583449594,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"}}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['229']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '241'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets?maxresults=6&api-version=7.0
    +    uri: https://vaultname.vault.azure.net/secrets?maxresults=6&api-version=7.1-preview
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/sec0","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec1","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec2","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec3","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec4","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec5","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/secrets?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3NiFNREF3TURFeElYTmxZM0psZEM5VFJVTTJJVEF3TURBeU9DRTVPVGs1TFRFeUxUTXhWREl6T2pVNU9qVTVMams1T1RrNU9UbGFJUS0tIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6"}'}
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/sec0","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec1","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec2","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec3","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec4","attributes":{"enabled":true,"created":1583449593,"updated":1583449593,"recoveryLevel":"Recoverable+Purgeable"}},{"id":"https://vaultname.vault.azure.net/secrets/sec5","attributes":{"enabled":true,"created":1583449594,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":"https://vaultname.vault.azure.net:443/secrets?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3NiFNREF3TURFeElYTmxZM0psZEM5VFJVTTJJVEF3TURBeU9DRTVPVGs1TFRFeUxUTXhWREl6T2pVNU9qVTVMams1T1RrNU9UbGFJUS0tIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6"}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['1308']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '1388'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     - request:
         body: null
         headers:
    -      Accept: [application/json]
    -      Accept-Encoding: ['gzip, deflate']
    -      Connection: [keep-alive]
    -      User-Agent: [azsdk-python-keyvault-secrets/4.1.0b1 Python/3.6.6 (Windows-10-10.0.18362-SP0)]
    +      Accept:
    +      - application/json
    +      Accept-Encoding:
    +      - gzip, deflate
    +      Connection:
    +      - keep-alive
    +      User-Agent:
    +      - azsdk-python-keyvault-secrets/4.2.0b1 Python/3.8.0 (Windows-10-10.0.18362-SP0)
         method: GET
    -    uri: https://vaultname.vault.azure.net/secrets?api-version=7.0&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3NiFNREF3TURFeElYTmxZM0psZEM5VFJVTTJJVEF3TURBeU9DRTVPVGs1TFRFeUxUTXhWREl6T2pVNU9qVTVMams1T1RrNU9UbGFJUS0tIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6
    +    uri: https://vaultname.vault.azure.net/secrets?api-version=7.1-preview&$skiptoken=eyJOZXh0TWFya2VyIjoiMiE3NiFNREF3TURFeElYTmxZM0psZEM5VFJVTTJJVEF3TURBeU9DRTVPVGs1TFRFeUxUTXhWREl6T2pVNU9qVTVMams1T1RrNU9UbGFJUS0tIiwiVGFyZ2V0TG9jYXRpb24iOjB9&maxresults=6
       response:
    -    body: {string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/sec6","attributes":{"enabled":true,"created":1575676865,"updated":1575676865,"recoveryLevel":"Purgeable"}}],"nextLink":null}'}
    +    body:
    +      string: '{"value":[{"id":"https://vaultname.vault.azure.net/secrets/sec6","attributes":{"enabled":true,"created":1583449594,"updated":1583449594,"recoveryLevel":"Recoverable+Purgeable"}}],"nextLink":null}'
         headers:
    -      cache-control: [no-cache]
    -      content-length: ['198']
    -      content-type: [application/json; charset=utf-8]
    -      date: ['Sat, 07 Dec 2019 00:01:05 GMT']
    -      expires: ['-1']
    -      pragma: [no-cache]
    -      server: [Microsoft-IIS/10.0]
    -      strict-transport-security: [max-age=31536000;includeSubDomains]
    -      x-aspnet-version: [4.0.30319]
    -      x-content-type-options: [nosniff]
    -      x-ms-keyvault-network-info: [addr=131.107.160.72;act_addr_fam=InterNetwork;]
    -      x-ms-keyvault-region: [westus]
    -      x-ms-keyvault-service-version: [1.1.0.883]
    -      x-powered-by: [ASP.NET]
    -    status: {code: 200, message: OK}
    +      cache-control:
    +      - no-cache
    +      content-length:
    +      - '210'
    +      content-type:
    +      - application/json; charset=utf-8
    +      date:
    +      - Thu, 05 Mar 2020 23:06:33 GMT
    +      expires:
    +      - '-1'
    +      pragma:
    +      - no-cache
    +      server:
    +      - Microsoft-IIS/10.0
    +      strict-transport-security:
    +      - max-age=31536000;includeSubDomains
    +      x-aspnet-version:
    +      - 4.0.30319
    +      x-content-type-options:
    +      - nosniff
    +      x-ms-keyvault-network-info:
    +      - addr=76.121.58.221;act_addr_fam=InterNetwork;
    +      x-ms-keyvault-region:
    +      - westus
    +      x-ms-keyvault-service-version:
    +      - 1.1.0.897
    +      x-powered-by:
    +      - ASP.NET
    +    status:
    +      code: 200
    +      message: OK
     version: 1
    diff --git a/sdk/keyvault/azure-keyvault-secrets/tests/test_multi_api.py b/sdk/keyvault/azure-keyvault-secrets/tests/test_multi_api.py
    new file mode 100644
    index 000000000000..16041a3060ea
    --- /dev/null
    +++ b/sdk/keyvault/azure-keyvault-secrets/tests/test_multi_api.py
    @@ -0,0 +1,21 @@
    +# ------------------------------------
    +# Copyright (c) Microsoft Corporation.
    +# Licensed under the MIT License.
    +# -------------------------------------
    +from azure.keyvault.secrets import ApiVersion, SecretClient
    +import pytest
    +
    +
    +@pytest.mark.parametrize("version", ApiVersion)
    +def test_supported_version(version):
    +    """The client should be able to load generated code for every supported API version"""
    +
    +    SecretClient("https://localhost", credential=object(), api_version=version)
    +
    +
    +def test_unsupported_version():
    +    """When given an unsupported API version, the client should raise an error listing supported versions"""
    +
    +    with pytest.raises(NotImplementedError) as ex:
    +        client = SecretClient("https://localhost", credential=object(), api_version="nonsense")
    +    assert all(version.value in str(ex.value) for version in ApiVersion)
    diff --git a/sdk/monitor/azure-mgmt-monitor/CHANGELOG.md b/sdk/monitor/azure-mgmt-monitor/CHANGELOG.md
    index b300c9c6b173..ddd528b9ab1d 100644
    --- a/sdk/monitor/azure-mgmt-monitor/CHANGELOG.md
    +++ b/sdk/monitor/azure-mgmt-monitor/CHANGELOG.md
    @@ -1,5 +1,24 @@
     # Release History
     
    +## 0.8.0 (2020-03-14)
    +
    +**Features**
    +
    +- Model DiagnosticSettingsResource has a new parameter log_analytics_destination_type
    +- Model ProxyResource has a new parameter tags
    +- Model MetricAlertAction has a new parameter web_hook_properties
    +- Added operation group PrivateEndpointConnectionsOperations
    +- Added operation group PrivateLinkScopedResourcesOperations
    +- Added operation group PrivateLinkScopeOperationStatusOperations
    +- Added operation group PrivateLinkResourcesOperations
    +- Added operation group PrivateLinkScopesOperations
    +
    +**Breaking changes**
    +
    +- Model MetricAlertAction no longer has parameter webhook_properties
    +- Model ErrorResponse has a new signature
    +
    +
     ## 0.7.0 (2019-06-24)
     
     This package now support profiles as parameter for sovereign cloud
    diff --git a/sdk/monitor/azure-mgmt-monitor/README.md b/sdk/monitor/azure-mgmt-monitor/README.md
    index 50e5e81ca360..63160ba1e003 100644
    --- a/sdk/monitor/azure-mgmt-monitor/README.md
    +++ b/sdk/monitor/azure-mgmt-monitor/README.md
    @@ -1,29 +1,21 @@
    -## Microsoft Azure SDK for Python
    +# Microsoft Azure SDK for Python
     
     This is the Microsoft Azure Monitor Client Library.
    +This package has been tested with Python 2.7, 3.5, 3.6, 3.7 and 3.8.
    +For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/)
     
    -Azure Resource Manager (ARM) is the next generation of management APIs
    -that replace the old Azure Service Management (ASM).
     
    -This package has been tested with Python 2.7, 3.4, 3.5, 3.6 and 3.7.
    +# Usage
     
    -For the older Azure Service Management (ASM) libraries, see
    -[azure-servicemanagement-legacy](https://pypi.python.org/pypi/azure-servicemanagement-legacy)
    -library.
    -
    -For a more complete set of Azure libraries, see the
    -[azure](https://pypi.python.org/pypi/azure) bundle package.
    -
    -## Usage
    -
    -For code examples, see
    -[Monitor](https://docs.microsoft.com/python/api/overview/azure/monitoring)
    +For code examples, see [Monitor](https://docs.microsoft.com/python/api/overview/azure/monitoring)
     on docs.microsoft.com.
     
    -## Provide Feedback
     
    -If you encounter any bugs or have suggestions, please file an issue in
    -the [Issues](https://github.com/Azure/azure-sdk-for-python/issues)
    +# Provide Feedback
    +
    +If you encounter any bugs or have suggestions, please file an issue in the
    +[Issues](https://github.com/Azure/azure-sdk-for-python/issues)
     section of the project.
     
    -![image](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-monitor%2FREADME.png)
    +
    +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-monitor%2FREADME.png)
    diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/_configuration.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/_configuration.py
    index 88436f6b4a33..c6ef8a63dfd2 100644
    --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/_configuration.py
    +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/_configuration.py
    @@ -21,7 +21,7 @@ class MonitorManagementClientConfiguration(AzureConfiguration):
         :param credentials: Credentials needed for the client to connect to Azure.
         :type credentials: :mod:`A msrestazure Credentials
          object`
    -    :param subscription_id: The Azure subscription Id.
    +    :param subscription_id: The ID of the target subscription.
         :type subscription_id: str
         :param str base_url: Service URL
         """
    diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/_monitor_client.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/_monitor_client.py
    new file mode 100644
    index 000000000000..ccedafbc273c
    --- /dev/null
    +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/_monitor_client.py
    @@ -0,0 +1,596 @@
    +# coding=utf-8
    +# --------------------------------------------------------------------------
    +# Copyright (c) Microsoft Corporation. All rights reserved.
    +# Licensed under the MIT License. See License.txt in the project root for
    +# license information.
    +#
    +# Code generated by Microsoft (R) AutoRest Code Generator.
    +# Changes may cause incorrect behavior and will be lost if the code is
    +# regenerated.
    +# --------------------------------------------------------------------------
    +
    +from msrest.service_client import SDKClient
    +from msrest import Serializer, Deserializer
    +
    +from azure.profiles import KnownProfiles, ProfileDefinition
    +from azure.profiles.multiapiclient import MultiApiClientMixin
    +from ._configuration import MonitorClientConfiguration
    +
    +
    +
    +class MonitorClient(MultiApiClientMixin, SDKClient):
    +    """Monitor Management Client
    +
    +    This ready contains multiple API versions, to help you deal with all Azure clouds
    +    (Azure Stack, Azure Government, Azure China, etc.).
    +    By default, uses latest API version available on public Azure.
    +    For production, you should stick a particular api-version and/or profile.
    +    The profile sets a mapping between the operation group and an API version.
    +    The api-version parameter sets the default API version if the operation
    +    group is not described in the profile.
    +
    +    :ivar config: Configuration for client.
    +    :vartype config: MonitorClientConfiguration
    +
    +    :param credentials: Credentials needed for the client to connect to Azure.
    +    :type credentials: :mod:`A msrestazure Credentials
    +     object`
    +    :param subscription_id: Subscription credentials which uniquely identify
    +     Microsoft Azure subscription. The subscription ID forms part of the URI
    +     for every service call.
    +    :type subscription_id: str
    +    :param str api_version: API version to use if no profile is provided, or if
    +     missing in profile.
    +    :param str base_url: Service URL
    +    :param profile: A profile definition, from KnownProfiles to dict.
    +    :type profile: azure.profiles.KnownProfiles
    +    """
    +
    +    DEFAULT_API_VERSION = '2019-10-17-preview'
    +    _PROFILE_TAG = "azure.mgmt.monitor.MonitorClient"
    +    LATEST_PROFILE = ProfileDefinition({
    +        _PROFILE_TAG: {
    +            None: DEFAULT_API_VERSION,
    +            'action_groups': '2019-06-01',
    +            'activity_log_alerts': '2017-04-01',
    +            'activity_logs': '2015-04-01',
    +            'alert_rule_incidents': '2016-03-01',
    +            'alert_rules': '2016-03-01',
    +            'autoscale_settings': '2015-04-01',
    +            'baseline': '2018-09-01',
    +            'baselines': '2019-03-01',
    +            'diagnostic_settings': '2017-05-01-preview',
    +            'diagnostic_settings_category': '2017-05-01-preview',
    +            'event_categories': '2015-04-01',
    +            'guest_diagnostics_settings': '2018-06-01-preview',
    +            'guest_diagnostics_settings_association': '2018-06-01-preview',
    +            'log_profiles': '2016-03-01',
    +            'metric_alerts': '2018-03-01',
    +            'metric_alerts_status': '2018-03-01',
    +            'metric_baseline': '2018-09-01',
    +            'metric_definitions': '2018-01-01',
    +            'metric_namespaces': '2017-12-01-preview',
    +            'metrics': '2018-01-01',
    +            'operations': '2015-04-01',
    +            'scheduled_query_rules': '2018-04-16',
    +            'service_diagnostic_settings': '2016-09-01',
    +            'tenant_activity_logs': '2015-04-01',
    +            'vm_insights': '2018-11-27-preview',
    +        }},
    +        _PROFILE_TAG + " latest"
    +    )
    +
    +    def __init__(self, credentials, subscription_id, api_version=None, base_url=None, profile=KnownProfiles.default):
    +        self.config = MonitorClientConfiguration(credentials, subscription_id, base_url)
    +        super(MonitorClient, self).__init__(
    +            credentials,
    +            self.config,
    +            api_version=api_version,
    +            profile=profile
    +        )
    +
    +    @classmethod
    +    def _models_dict(cls, api_version):
    +        return {k: v for k, v in cls.models(api_version).__dict__.items() if isinstance(v, type)}
    +
    +    @classmethod
    +    def models(cls, api_version=DEFAULT_API_VERSION):
    +        """Module depends on the API version:
    +
    +           * 2015-04-01: :mod:`v2015_04_01.models`
    +           * 2015-07-01: :mod:`v2015_07_01.models`
    +           * 2016-03-01: :mod:`v2016_03_01.models`
    +           * 2016-09-01: :mod:`v2016_09_01.models`
    +           * 2017-03-01-preview: :mod:`v2017_03_01_preview.models`
    +           * 2017-04-01: :mod:`v2017_04_01.models`
    +           * 2017-05-01-preview: :mod:`v2017_05_01_preview.models`
    +           * 2017-11-01-preview: :mod:`v2017_11_01_preview.models`
    +           * 2017-12-01-preview: :mod:`v2017_12_01_preview.models`
    +           * 2018-01-01: :mod:`v2018_01_01.models`
    +           * 2018-03-01: :mod:`v2018_03_01.models`
    +           * 2018-04-16: :mod:`v2018_04_16.models`
    +           * 2018-06-01-preview: :mod:`v2018_06_01_preview.models`
    +           * 2018-09-01: :mod:`v2018_09_01.models`
    +           * 2018-11-27-preview: :mod:`v2018_11_27_preview.models`
    +           * 2019-03-01: :mod:`v2019_03_01.models`
    +           * 2019-06-01: :mod:`v2019_06_01.models`
    +           * 2019-10-17-preview: :mod:`v2019_10_17.models`
    +        """
    +        if api_version == '2015-04-01':
    +            from .v2015_04_01 import models
    +            return models
    +        elif api_version == '2015-07-01':
    +            from .v2015_07_01 import models
    +            return models
    +        elif api_version == '2016-03-01':
    +            from .v2016_03_01 import models
    +            return models
    +        elif api_version == '2016-09-01':
    +            from .v2016_09_01 import models
    +            return models
    +        elif api_version == '2017-03-01-preview':
    +            from .v2017_03_01_preview import models
    +            return models
    +        elif api_version == '2017-04-01':
    +            from .v2017_04_01 import models
    +            return models
    +        elif api_version == '2017-05-01-preview':
    +            from .v2017_05_01_preview import models
    +            return models
    +        elif api_version == '2017-11-01-preview':
    +            from .v2017_11_01_preview import models
    +            return models
    +        elif api_version == '2017-12-01-preview':
    +            from .v2017_12_01_preview import models
    +            return models
    +        elif api_version == '2018-01-01':
    +            from .v2018_01_01 import models
    +            return models
    +        elif api_version == '2018-03-01':
    +            from .v2018_03_01 import models
    +            return models
    +        elif api_version == '2018-04-16':
    +            from .v2018_04_16 import models
    +            return models
    +        elif api_version == '2018-06-01-preview':
    +            from .v2018_06_01_preview import models
    +            return models
    +        elif api_version == '2018-09-01':
    +            from .v2018_09_01 import models
    +            return models
    +        elif api_version == '2018-11-27-preview':
    +            from .v2018_11_27_preview import models
    +            return models
    +        elif api_version == '2019-03-01':
    +            from .v2019_03_01 import models
    +            return models
    +        elif api_version == '2019-06-01':
    +            from .v2019_06_01 import models
    +            return models
    +        elif api_version == '2019-10-17-preview':
    +            from .v2019_10_17 import models
    +            return models
    +        raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +
    +    @property
    +    def action_groups(self):
    +        """Instance depends on the API version:
    +
    +           * 2017-04-01: :class:`ActionGroupsOperations`
    +           * 2018-03-01: :class:`ActionGroupsOperations`
    +           * 2018-09-01: :class:`ActionGroupsOperations`
    +           * 2019-03-01: :class:`ActionGroupsOperations`
    +           * 2019-06-01: :class:`ActionGroupsOperations`
    +        """
    +        api_version = self._get_api_version('action_groups')
    +        if api_version == '2017-04-01':
    +            from .v2017_04_01.operations import ActionGroupsOperations as OperationClass
    +        elif api_version == '2018-03-01':
    +            from .v2018_03_01.operations import ActionGroupsOperations as OperationClass
    +        elif api_version == '2018-09-01':
    +            from .v2018_09_01.operations import ActionGroupsOperations as OperationClass
    +        elif api_version == '2019-03-01':
    +            from .v2019_03_01.operations import ActionGroupsOperations as OperationClass
    +        elif api_version == '2019-06-01':
    +            from .v2019_06_01.operations import ActionGroupsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def activity_log_alerts(self):
    +        """Instance depends on the API version:
    +
    +           * 2017-03-01-preview: :class:`ActivityLogAlertsOperations`
    +           * 2017-04-01: :class:`ActivityLogAlertsOperations`
    +        """
    +        api_version = self._get_api_version('activity_log_alerts')
    +        if api_version == '2017-03-01-preview':
    +            from .v2017_03_01_preview.operations import ActivityLogAlertsOperations as OperationClass
    +        elif api_version == '2017-04-01':
    +            from .v2017_04_01.operations import ActivityLogAlertsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def activity_logs(self):
    +        """Instance depends on the API version:
    +
    +           * 2015-04-01: :class:`ActivityLogsOperations`
    +        """
    +        api_version = self._get_api_version('activity_logs')
    +        if api_version == '2015-04-01':
    +            from .v2015_04_01.operations import ActivityLogsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def alert_rule_incidents(self):
    +        """Instance depends on the API version:
    +
    +           * 2016-03-01: :class:`AlertRuleIncidentsOperations`
    +        """
    +        api_version = self._get_api_version('alert_rule_incidents')
    +        if api_version == '2016-03-01':
    +            from .v2016_03_01.operations import AlertRuleIncidentsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def alert_rules(self):
    +        """Instance depends on the API version:
    +
    +           * 2016-03-01: :class:`AlertRulesOperations`
    +        """
    +        api_version = self._get_api_version('alert_rules')
    +        if api_version == '2016-03-01':
    +            from .v2016_03_01.operations import AlertRulesOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def autoscale_settings(self):
    +        """Instance depends on the API version:
    +
    +           * 2015-04-01: :class:`AutoscaleSettingsOperations`
    +        """
    +        api_version = self._get_api_version('autoscale_settings')
    +        if api_version == '2015-04-01':
    +            from .v2015_04_01.operations import AutoscaleSettingsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def baseline(self):
    +        """Instance depends on the API version:
    +
    +           * 2018-09-01: :class:`BaselineOperations`
    +        """
    +        api_version = self._get_api_version('baseline')
    +        if api_version == '2018-09-01':
    +            from .v2018_09_01.operations import BaselineOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def baselines(self):
    +        """Instance depends on the API version:
    +
    +           * 2019-03-01: :class:`BaselinesOperations`
    +        """
    +        api_version = self._get_api_version('baselines')
    +        if api_version == '2019-03-01':
    +            from .v2019_03_01.operations import BaselinesOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def diagnostic_settings(self):
    +        """Instance depends on the API version:
    +
    +           * 2017-05-01-preview: :class:`DiagnosticSettingsOperations`
    +        """
    +        api_version = self._get_api_version('diagnostic_settings')
    +        if api_version == '2017-05-01-preview':
    +            from .v2017_05_01_preview.operations import DiagnosticSettingsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def diagnostic_settings_category(self):
    +        """Instance depends on the API version:
    +
    +           * 2017-05-01-preview: :class:`DiagnosticSettingsCategoryOperations`
    +        """
    +        api_version = self._get_api_version('diagnostic_settings_category')
    +        if api_version == '2017-05-01-preview':
    +            from .v2017_05_01_preview.operations import DiagnosticSettingsCategoryOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def event_categories(self):
    +        """Instance depends on the API version:
    +
    +           * 2015-04-01: :class:`EventCategoriesOperations`
    +        """
    +        api_version = self._get_api_version('event_categories')
    +        if api_version == '2015-04-01':
    +            from .v2015_04_01.operations import EventCategoriesOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def guest_diagnostics_settings(self):
    +        """Instance depends on the API version:
    +
    +           * 2018-06-01-preview: :class:`GuestDiagnosticsSettingsOperations`
    +        """
    +        api_version = self._get_api_version('guest_diagnostics_settings')
    +        if api_version == '2018-06-01-preview':
    +            from .v2018_06_01_preview.operations import GuestDiagnosticsSettingsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def guest_diagnostics_settings_association(self):
    +        """Instance depends on the API version:
    +
    +           * 2018-06-01-preview: :class:`GuestDiagnosticsSettingsAssociationOperations`
    +        """
    +        api_version = self._get_api_version('guest_diagnostics_settings_association')
    +        if api_version == '2018-06-01-preview':
    +            from .v2018_06_01_preview.operations import GuestDiagnosticsSettingsAssociationOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def log_profiles(self):
    +        """Instance depends on the API version:
    +
    +           * 2016-03-01: :class:`LogProfilesOperations`
    +        """
    +        api_version = self._get_api_version('log_profiles')
    +        if api_version == '2016-03-01':
    +            from .v2016_03_01.operations import LogProfilesOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def metric_alerts(self):
    +        """Instance depends on the API version:
    +
    +           * 2018-03-01: :class:`MetricAlertsOperations`
    +        """
    +        api_version = self._get_api_version('metric_alerts')
    +        if api_version == '2018-03-01':
    +            from .v2018_03_01.operations import MetricAlertsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def metric_alerts_status(self):
    +        """Instance depends on the API version:
    +
    +           * 2018-03-01: :class:`MetricAlertsStatusOperations`
    +        """
    +        api_version = self._get_api_version('metric_alerts_status')
    +        if api_version == '2018-03-01':
    +            from .v2018_03_01.operations import MetricAlertsStatusOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def metric_baseline(self):
    +        """Instance depends on the API version:
    +
    +           * 2017-11-01-preview: :class:`MetricBaselineOperations`
    +           * 2018-09-01: :class:`MetricBaselineOperations`
    +        """
    +        api_version = self._get_api_version('metric_baseline')
    +        if api_version == '2017-11-01-preview':
    +            from .v2017_11_01_preview.operations import MetricBaselineOperations as OperationClass
    +        elif api_version == '2018-09-01':
    +            from .v2018_09_01.operations import MetricBaselineOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def metric_definitions(self):
    +        """Instance depends on the API version:
    +
    +           * 2016-03-01: :class:`MetricDefinitionsOperations`
    +           * 2017-05-01-preview: :class:`MetricDefinitionsOperations`
    +           * 2018-01-01: :class:`MetricDefinitionsOperations`
    +        """
    +        api_version = self._get_api_version('metric_definitions')
    +        if api_version == '2016-03-01':
    +            from .v2016_03_01.operations import MetricDefinitionsOperations as OperationClass
    +        elif api_version == '2017-05-01-preview':
    +            from .v2017_05_01_preview.operations import MetricDefinitionsOperations as OperationClass
    +        elif api_version == '2018-01-01':
    +            from .v2018_01_01.operations import MetricDefinitionsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def metric_namespaces(self):
    +        """Instance depends on the API version:
    +
    +           * 2017-12-01-preview: :class:`MetricNamespacesOperations`
    +        """
    +        api_version = self._get_api_version('metric_namespaces')
    +        if api_version == '2017-12-01-preview':
    +            from .v2017_12_01_preview.operations import MetricNamespacesOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def metrics(self):
    +        """Instance depends on the API version:
    +
    +           * 2016-09-01: :class:`MetricsOperations`
    +           * 2017-05-01-preview: :class:`MetricsOperations`
    +           * 2018-01-01: :class:`MetricsOperations`
    +        """
    +        api_version = self._get_api_version('metrics')
    +        if api_version == '2016-09-01':
    +            from .v2016_09_01.operations import MetricsOperations as OperationClass
    +        elif api_version == '2017-05-01-preview':
    +            from .v2017_05_01_preview.operations import MetricsOperations as OperationClass
    +        elif api_version == '2018-01-01':
    +            from .v2018_01_01.operations import MetricsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def operations(self):
    +        """Instance depends on the API version:
    +
    +           * 2015-04-01: :class:`Operations`
    +        """
    +        api_version = self._get_api_version('operations')
    +        if api_version == '2015-04-01':
    +            from .v2015_04_01.operations import Operations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def private_endpoint_connections(self):
    +        """Instance depends on the API version:
    +
    +           * 2019-10-17-preview: :class:`PrivateEndpointConnectionsOperations`
    +        """
    +        api_version = self._get_api_version('private_endpoint_connections')
    +        if api_version == '2019-10-17-preview':
    +            from .v2019_10_17.operations import PrivateEndpointConnectionsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def private_link_resources(self):
    +        """Instance depends on the API version:
    +
    +           * 2019-10-17-preview: :class:`PrivateLinkResourcesOperations`
    +        """
    +        api_version = self._get_api_version('private_link_resources')
    +        if api_version == '2019-10-17-preview':
    +            from .v2019_10_17.operations import PrivateLinkResourcesOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def private_link_scope_operation_status(self):
    +        """Instance depends on the API version:
    +
    +           * 2019-10-17-preview: :class:`PrivateLinkScopeOperationStatusOperations`
    +        """
    +        api_version = self._get_api_version('private_link_scope_operation_status')
    +        if api_version == '2019-10-17-preview':
    +            from .v2019_10_17.operations import PrivateLinkScopeOperationStatusOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def private_link_scoped_resources(self):
    +        """Instance depends on the API version:
    +
    +           * 2019-10-17-preview: :class:`PrivateLinkScopedResourcesOperations`
    +        """
    +        api_version = self._get_api_version('private_link_scoped_resources')
    +        if api_version == '2019-10-17-preview':
    +            from .v2019_10_17.operations import PrivateLinkScopedResourcesOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def private_link_scopes(self):
    +        """Instance depends on the API version:
    +
    +           * 2019-10-17-preview: :class:`PrivateLinkScopesOperations`
    +        """
    +        api_version = self._get_api_version('private_link_scopes')
    +        if api_version == '2019-10-17-preview':
    +            from .v2019_10_17.operations import PrivateLinkScopesOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def scheduled_query_rules(self):
    +        """Instance depends on the API version:
    +
    +           * 2018-04-16: :class:`ScheduledQueryRulesOperations`
    +        """
    +        api_version = self._get_api_version('scheduled_query_rules')
    +        if api_version == '2018-04-16':
    +            from .v2018_04_16.operations import ScheduledQueryRulesOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def service_diagnostic_settings(self):
    +        """Instance depends on the API version:
    +
    +           * 2015-07-01: :class:`ServiceDiagnosticSettingsOperations`
    +           * 2016-09-01: :class:`ServiceDiagnosticSettingsOperations`
    +        """
    +        api_version = self._get_api_version('service_diagnostic_settings')
    +        if api_version == '2015-07-01':
    +            from .v2015_07_01.operations import ServiceDiagnosticSettingsOperations as OperationClass
    +        elif api_version == '2016-09-01':
    +            from .v2016_09_01.operations import ServiceDiagnosticSettingsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def tenant_activity_logs(self):
    +        """Instance depends on the API version:
    +
    +           * 2015-04-01: :class:`TenantActivityLogsOperations`
    +        """
    +        api_version = self._get_api_version('tenant_activity_logs')
    +        if api_version == '2015-04-01':
    +            from .v2015_04_01.operations import TenantActivityLogsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def vm_insights(self):
    +        """Instance depends on the API version:
    +
    +           * 2018-11-27-preview: :class:`VMInsightsOperations`
    +        """
    +        api_version = self._get_api_version('vm_insights')
    +        if api_version == '2018-11-27-preview':
    +            from .v2018_11_27_preview.operations import VMInsightsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/_monitor_management_client.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/_monitor_management_client.py
    index 8e1de7be8c7f..5c48d3bdff28 100644
    --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/_monitor_management_client.py
    +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/_monitor_management_client.py
    @@ -46,11 +46,12 @@ class MonitorManagementClient(MultiApiClientMixin, SDKClient):
         :type profile: azure.profiles.KnownProfiles
         """
     
    -    DEFAULT_API_VERSION = '2019-06-01'
    +    DEFAULT_API_VERSION = '2019-10-17-preview'
         _PROFILE_TAG = "azure.mgmt.monitor.MonitorManagementClient"
         LATEST_PROFILE = ProfileDefinition({
             _PROFILE_TAG: {
                 None: DEFAULT_API_VERSION,
    +            'action_groups': '2019-06-01',
                 'activity_log_alerts': '2017-04-01',
                 'activity_logs': '2015-04-01',
                 'alert_rule_incidents': '2016-03-01',
    @@ -113,6 +114,7 @@ def models(cls, api_version=DEFAULT_API_VERSION):
                * 2018-11-27-preview: :mod:`v2018_11_27_preview.models`
                * 2019-03-01: :mod:`v2019_03_01.models`
                * 2019-06-01: :mod:`v2019_06_01.models`
    +           * 2019-10-17-preview: :mod:`v2019_10_17.models`
             """
             if api_version == '2015-04-01':
                 from .v2015_04_01 import models
    @@ -165,6 +167,9 @@ def models(cls, api_version=DEFAULT_API_VERSION):
             elif api_version == '2019-06-01':
                 from .v2019_06_01 import models
                 return models
    +        elif api_version == '2019-10-17-preview':
    +            from .v2019_10_17 import models
    +            return models
             raise NotImplementedError("APIVersion {} is not available".format(api_version))
     
         @property
    @@ -470,6 +475,71 @@ def operations(self):
                 raise NotImplementedError("APIVersion {} is not available".format(api_version))
             return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
     
    +    @property
    +    def private_endpoint_connections(self):
    +        """Instance depends on the API version:
    +
    +           * 2019-10-17-preview: :class:`PrivateEndpointConnectionsOperations`
    +        """
    +        api_version = self._get_api_version('private_endpoint_connections')
    +        if api_version == '2019-10-17-preview':
    +            from .v2019_10_17.operations import PrivateEndpointConnectionsOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def private_link_resources(self):
    +        """Instance depends on the API version:
    +
    +           * 2019-10-17-preview: :class:`PrivateLinkResourcesOperations`
    +        """
    +        api_version = self._get_api_version('private_link_resources')
    +        if api_version == '2019-10-17-preview':
    +            from .v2019_10_17.operations import PrivateLinkResourcesOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def private_link_scope_operation_status(self):
    +        """Instance depends on the API version:
    +
    +           * 2019-10-17-preview: :class:`PrivateLinkScopeOperationStatusOperations`
    +        """
    +        api_version = self._get_api_version('private_link_scope_operation_status')
    +        if api_version == '2019-10-17-preview':
    +            from .v2019_10_17.operations import PrivateLinkScopeOperationStatusOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def private_link_scoped_resources(self):
    +        """Instance depends on the API version:
    +
    +           * 2019-10-17-preview: :class:`PrivateLinkScopedResourcesOperations`
    +        """
    +        api_version = self._get_api_version('private_link_scoped_resources')
    +        if api_version == '2019-10-17-preview':
    +            from .v2019_10_17.operations import PrivateLinkScopedResourcesOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
    +    @property
    +    def private_link_scopes(self):
    +        """Instance depends on the API version:
    +
    +           * 2019-10-17-preview: :class:`PrivateLinkScopesOperations`
    +        """
    +        api_version = self._get_api_version('private_link_scopes')
    +        if api_version == '2019-10-17-preview':
    +            from .v2019_10_17.operations import PrivateLinkScopesOperations as OperationClass
    +        else:
    +            raise NotImplementedError("APIVersion {} is not available".format(api_version))
    +        return OperationClass(self._client, self.config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)))
    +
         @property
         def scheduled_query_rules(self):
             """Instance depends on the API version:
    diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/models.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/models.py
    index 078f7216425a..09110c75b60e 100644
    --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/models.py
    +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/models.py
    @@ -18,3 +18,4 @@
     from .v2018_11_27_preview.models import *
     from .v2019_03_01.models import *
     from .v2019_06_01.models import *
    +from .v2019_10_17.models import *
    diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2015_04_01/operations/_activity_logs_operations.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2015_04_01/operations/_activity_logs_operations.py
    index 70e9f879d39f..16004d4d9b34 100644
    --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2015_04_01/operations/_activity_logs_operations.py
    +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2015_04_01/operations/_activity_logs_operations.py
    @@ -39,11 +39,12 @@ def __init__(self, client, config, serializer, deserializer):
             self.config = config
     
         def list(
    -            self, filter=None, select=None, custom_headers=None, raw=False, **operation_config):
    +            self, filter, select=None, custom_headers=None, raw=False, **operation_config):
             """Provides the list of records from the activity logs.
     
    -        :param filter: Reduces the set of data collected.
    The **$filter** - argument is very restricted and allows only the following + :param filter: Reduces the set of data collected.
    This argument is + required and it also requires at least the start date/time.
    The + **$filter** argument is very restricted and allows only the following patterns.
    - *List events for a resource group*: $filter=eventTimestamp ge '2014-07-16T04:36:37.6407898Z' and eventTimestamp le '2014-07-20T04:36:37.6407898Z' and resourceGroupName @@ -93,8 +94,7 @@ def prepare_request(next_link=None): # Construct parameters query_parameters = {} query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - if filter is not None: - query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') if select is not None: query_parameters['$select'] = self._serialize.query("select", select, 'str') diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2017_05_01_preview/models/_models.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2017_05_01_preview/models/_models.py index 1f45012628e6..ec08c11a750e 100644 --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2017_05_01_preview/models/_models.py +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2017_05_01_preview/models/_models.py @@ -131,17 +131,22 @@ class DiagnosticSettingsResource(ProxyOnlyResource): :param event_hub_name: The name of the event hub. If none is specified, the default event hub will be selected. :type event_hub_name: str - :param metrics: the list of metric settings. + :param metrics: The list of metric settings. :type metrics: list[~azure.mgmt.monitor.v2017_05_01_preview.models.MetricSettings] - :param logs: the list of logs settings. + :param logs: The list of logs settings. :type logs: list[~azure.mgmt.monitor.v2017_05_01_preview.models.LogSettings] - :param workspace_id: The workspace ID (resource ID of a Log Analytics - workspace) for a Log Analytics workspace to which you would like to send - Diagnostic Logs. Example: + :param workspace_id: The full ARM resource ID of the Log Analytics + workspace to which you would like to send Diagnostic Logs. Example: /subscriptions/4b9e8510-67ab-4e9a-95a9-e2f1e570ea9c/resourceGroups/insights-integration/providers/Microsoft.OperationalInsights/workspaces/viruela2 :type workspace_id: str + :param log_analytics_destination_type: A string indicating whether the + export to Log Analytics should use the default destination type, i.e. + AzureDiagnostics, or use a destination type constructed as follows: + _. Possible values + are: Dedicated and null (null is default.) + :type log_analytics_destination_type: str """ _validation = { @@ -161,6 +166,7 @@ class DiagnosticSettingsResource(ProxyOnlyResource): 'metrics': {'key': 'properties.metrics', 'type': '[MetricSettings]'}, 'logs': {'key': 'properties.logs', 'type': '[LogSettings]'}, 'workspace_id': {'key': 'properties.workspaceId', 'type': 'str'}, + 'log_analytics_destination_type': {'key': 'properties.logAnalyticsDestinationType', 'type': 'str'}, } def __init__(self, **kwargs): @@ -172,6 +178,7 @@ def __init__(self, **kwargs): self.metrics = kwargs.get('metrics', None) self.logs = kwargs.get('logs', None) self.workspace_id = kwargs.get('workspace_id', None) + self.log_analytics_destination_type = kwargs.get('log_analytics_destination_type', None) class DiagnosticSettingsResourceCollection(Model): diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2017_05_01_preview/models/_models_py3.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2017_05_01_preview/models/_models_py3.py index 62b3b6b184d8..f1fbd5d163f1 100644 --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2017_05_01_preview/models/_models_py3.py +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2017_05_01_preview/models/_models_py3.py @@ -131,17 +131,22 @@ class DiagnosticSettingsResource(ProxyOnlyResource): :param event_hub_name: The name of the event hub. If none is specified, the default event hub will be selected. :type event_hub_name: str - :param metrics: the list of metric settings. + :param metrics: The list of metric settings. :type metrics: list[~azure.mgmt.monitor.v2017_05_01_preview.models.MetricSettings] - :param logs: the list of logs settings. + :param logs: The list of logs settings. :type logs: list[~azure.mgmt.monitor.v2017_05_01_preview.models.LogSettings] - :param workspace_id: The workspace ID (resource ID of a Log Analytics - workspace) for a Log Analytics workspace to which you would like to send - Diagnostic Logs. Example: + :param workspace_id: The full ARM resource ID of the Log Analytics + workspace to which you would like to send Diagnostic Logs. Example: /subscriptions/4b9e8510-67ab-4e9a-95a9-e2f1e570ea9c/resourceGroups/insights-integration/providers/Microsoft.OperationalInsights/workspaces/viruela2 :type workspace_id: str + :param log_analytics_destination_type: A string indicating whether the + export to Log Analytics should use the default destination type, i.e. + AzureDiagnostics, or use a destination type constructed as follows: + _. Possible values + are: Dedicated and null (null is default.) + :type log_analytics_destination_type: str """ _validation = { @@ -161,9 +166,10 @@ class DiagnosticSettingsResource(ProxyOnlyResource): 'metrics': {'key': 'properties.metrics', 'type': '[MetricSettings]'}, 'logs': {'key': 'properties.logs', 'type': '[LogSettings]'}, 'workspace_id': {'key': 'properties.workspaceId', 'type': 'str'}, + 'log_analytics_destination_type': {'key': 'properties.logAnalyticsDestinationType', 'type': 'str'}, } - def __init__(self, *, storage_account_id: str=None, service_bus_rule_id: str=None, event_hub_authorization_rule_id: str=None, event_hub_name: str=None, metrics=None, logs=None, workspace_id: str=None, **kwargs) -> None: + def __init__(self, *, storage_account_id: str=None, service_bus_rule_id: str=None, event_hub_authorization_rule_id: str=None, event_hub_name: str=None, metrics=None, logs=None, workspace_id: str=None, log_analytics_destination_type: str=None, **kwargs) -> None: super(DiagnosticSettingsResource, self).__init__(**kwargs) self.storage_account_id = storage_account_id self.service_bus_rule_id = service_bus_rule_id @@ -172,6 +178,7 @@ def __init__(self, *, storage_account_id: str=None, service_bus_rule_id: str=Non self.metrics = metrics self.logs = logs self.workspace_id = workspace_id + self.log_analytics_destination_type = log_analytics_destination_type class DiagnosticSettingsResourceCollection(Model): diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_01_01/models/_models.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_01_01/models/_models.py index 645a3895d476..7f6c659c93a4 100644 --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_01_01/models/_models.py +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_01_01/models/_models.py @@ -113,7 +113,8 @@ class Metric(Model): :type name: ~azure.mgmt.monitor.v2018_01_01.models.LocalizableString :param unit: Required. the unit of the metric. Possible values include: 'Count', 'Bytes', 'Seconds', 'CountPerSecond', 'BytesPerSecond', - 'Percent', 'MilliSeconds', 'ByteSeconds', 'Unspecified' + 'Percent', 'MilliSeconds', 'ByteSeconds', 'Unspecified', 'Cores', + 'MilliCores', 'NanoCores', 'BitsPerSecond' :type unit: str or ~azure.mgmt.monitor.v2018_01_01.models.Unit :param timeseries: Required. the time series returned when a data query is performed. @@ -185,7 +186,8 @@ class MetricDefinition(Model): :type name: ~azure.mgmt.monitor.v2018_01_01.models.LocalizableString :param unit: the unit of the metric. Possible values include: 'Count', 'Bytes', 'Seconds', 'CountPerSecond', 'BytesPerSecond', 'Percent', - 'MilliSeconds', 'ByteSeconds', 'Unspecified' + 'MilliSeconds', 'ByteSeconds', 'Unspecified', 'Cores', 'MilliCores', + 'NanoCores', 'BitsPerSecond' :type unit: str or ~azure.mgmt.monitor.v2018_01_01.models.Unit :param primary_aggregation_type: the primary aggregation type value defining how to use the values for display. Possible values include: @@ -253,7 +255,7 @@ class MetricValue(Model): :type total: float :param count: the number of samples in the time range. Can be used to determine the number of values that contributed to the average value. - :type count: long + :type count: float """ _validation = { @@ -266,7 +268,7 @@ class MetricValue(Model): 'minimum': {'key': 'minimum', 'type': 'float'}, 'maximum': {'key': 'maximum', 'type': 'float'}, 'total': {'key': 'total', 'type': 'float'}, - 'count': {'key': 'count', 'type': 'long'}, + 'count': {'key': 'count', 'type': 'float'}, } def __init__(self, **kwargs): diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_01_01/models/_models_py3.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_01_01/models/_models_py3.py index 972b2120cfb0..946d425e0f4b 100644 --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_01_01/models/_models_py3.py +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_01_01/models/_models_py3.py @@ -113,7 +113,8 @@ class Metric(Model): :type name: ~azure.mgmt.monitor.v2018_01_01.models.LocalizableString :param unit: Required. the unit of the metric. Possible values include: 'Count', 'Bytes', 'Seconds', 'CountPerSecond', 'BytesPerSecond', - 'Percent', 'MilliSeconds', 'ByteSeconds', 'Unspecified' + 'Percent', 'MilliSeconds', 'ByteSeconds', 'Unspecified', 'Cores', + 'MilliCores', 'NanoCores', 'BitsPerSecond' :type unit: str or ~azure.mgmt.monitor.v2018_01_01.models.Unit :param timeseries: Required. the time series returned when a data query is performed. @@ -185,7 +186,8 @@ class MetricDefinition(Model): :type name: ~azure.mgmt.monitor.v2018_01_01.models.LocalizableString :param unit: the unit of the metric. Possible values include: 'Count', 'Bytes', 'Seconds', 'CountPerSecond', 'BytesPerSecond', 'Percent', - 'MilliSeconds', 'ByteSeconds', 'Unspecified' + 'MilliSeconds', 'ByteSeconds', 'Unspecified', 'Cores', 'MilliCores', + 'NanoCores', 'BitsPerSecond' :type unit: str or ~azure.mgmt.monitor.v2018_01_01.models.Unit :param primary_aggregation_type: the primary aggregation type value defining how to use the values for display. Possible values include: @@ -253,7 +255,7 @@ class MetricValue(Model): :type total: float :param count: the number of samples in the time range. Can be used to determine the number of values that contributed to the average value. - :type count: long + :type count: float """ _validation = { @@ -266,10 +268,10 @@ class MetricValue(Model): 'minimum': {'key': 'minimum', 'type': 'float'}, 'maximum': {'key': 'maximum', 'type': 'float'}, 'total': {'key': 'total', 'type': 'float'}, - 'count': {'key': 'count', 'type': 'long'}, + 'count': {'key': 'count', 'type': 'float'}, } - def __init__(self, *, time_stamp, average: float=None, minimum: float=None, maximum: float=None, total: float=None, count: int=None, **kwargs) -> None: + def __init__(self, *, time_stamp, average: float=None, minimum: float=None, maximum: float=None, total: float=None, count: float=None, **kwargs) -> None: super(MetricValue, self).__init__(**kwargs) self.time_stamp = time_stamp self.average = average diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_01_01/models/_monitor_management_client_enums.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_01_01/models/_monitor_management_client_enums.py index 61455e4c0c37..b8c55a6ea3b6 100644 --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_01_01/models/_monitor_management_client_enums.py +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_01_01/models/_monitor_management_client_enums.py @@ -23,6 +23,10 @@ class Unit(str, Enum): milli_seconds = "MilliSeconds" byte_seconds = "ByteSeconds" unspecified = "Unspecified" + cores = "Cores" + milli_cores = "MilliCores" + nano_cores = "NanoCores" + bits_per_second = "BitsPerSecond" class AggregationType(str, Enum): diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/__init__.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/__init__.py index 99bcdefd12eb..5b2123b0bea5 100644 --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/__init__.py +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/__init__.py @@ -38,6 +38,7 @@ from ._models_py3 import SmsReceiver from ._models_py3 import VoiceReceiver from ._models_py3 import WebhookReceiver + from ._models_py3 import WebtestLocationAvailabilityCriteria except (SyntaxError, ImportError): from ._models import ActionGroupPatchBody from ._models import ActionGroupResource @@ -67,10 +68,14 @@ from ._models import SmsReceiver from ._models import VoiceReceiver from ._models import WebhookReceiver + from ._models import WebtestLocationAvailabilityCriteria from ._paged_models import ActionGroupResourcePaged from ._paged_models import MetricAlertResourcePaged from ._monitor_management_client_enums import ( ReceiverStatus, + Operator, + DynamicThresholdOperator, + DynamicThresholdSensitivity, ) __all__ = [ @@ -102,7 +107,11 @@ 'SmsReceiver', 'VoiceReceiver', 'WebhookReceiver', + 'WebtestLocationAvailabilityCriteria', 'ActionGroupResourcePaged', 'MetricAlertResourcePaged', 'ReceiverStatus', + 'Operator', + 'DynamicThresholdOperator', + 'DynamicThresholdSensitivity', ] diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/_models.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/_models.py index afd1c724fc87..69a7f66bd140 100644 --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/_models.py +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/_models.py @@ -390,12 +390,15 @@ class DynamicMetricCriteria(MultiMetricCriteria): :param criterion_type: Required. Constant filled by server. :type criterion_type: str :param operator: Required. The operator used to compare the metric value - against the threshold. - :type operator: object + against the threshold. Possible values include: 'GreaterThan', 'LessThan', + 'GreaterOrLessThan' + :type operator: str or + ~azure.mgmt.monitor.v2018_03_01.models.DynamicThresholdOperator :param alert_sensitivity: Required. The extent of deviation required to trigger an alert. This will affect how tight the threshold is to the - metric series pattern. - :type alert_sensitivity: object + metric series pattern. Possible values include: 'Low', 'Medium', 'High' + :type alert_sensitivity: str or + ~azure.mgmt.monitor.v2018_03_01.models.DynamicThresholdSensitivity :param failing_periods: Required. The minimum number of violations required within the selected lookback time window required to raise an alert. @@ -425,8 +428,8 @@ class DynamicMetricCriteria(MultiMetricCriteria): 'time_aggregation': {'key': 'timeAggregation', 'type': 'object'}, 'dimensions': {'key': 'dimensions', 'type': '[MetricDimension]'}, 'criterion_type': {'key': 'criterionType', 'type': 'str'}, - 'operator': {'key': 'operator', 'type': 'object'}, - 'alert_sensitivity': {'key': 'alertSensitivity', 'type': 'object'}, + 'operator': {'key': 'operator', 'type': 'str'}, + 'alert_sensitivity': {'key': 'alertSensitivity', 'type': 'str'}, 'failing_periods': {'key': 'failingPeriods', 'type': 'DynamicThresholdFailingPeriods'}, 'ignore_data_before': {'key': 'ignoreDataBefore', 'type': 'iso-8601'}, } @@ -651,19 +654,19 @@ class MetricAlertAction(Model): :param action_group_id: the id of the action group to use. :type action_group_id: str - :param webhook_properties: The properties of a webhook object. - :type webhook_properties: dict[str, str] + :param web_hook_properties: The properties of a webhook object. + :type web_hook_properties: dict[str, str] """ _attribute_map = { 'action_group_id': {'key': 'actionGroupId', 'type': 'str'}, - 'webhook_properties': {'key': 'webhookProperties', 'type': '{str}'}, + 'web_hook_properties': {'key': 'webHookProperties', 'type': '{str}'}, } def __init__(self, **kwargs): super(MetricAlertAction, self).__init__(**kwargs) self.action_group_id = kwargs.get('action_group_id', None) - self.webhook_properties = kwargs.get('webhook_properties', None) + self.web_hook_properties = kwargs.get('web_hook_properties', None) class MetricAlertCriteria(Model): @@ -1055,8 +1058,10 @@ class MetricCriteria(MultiMetricCriteria): list[~azure.mgmt.monitor.v2018_03_01.models.MetricDimension] :param criterion_type: Required. Constant filled by server. :type criterion_type: str - :param operator: Required. the criteria operator. - :type operator: object + :param operator: Required. the criteria operator. Possible values include: + 'Equals', 'NotEquals', 'GreaterThan', 'GreaterThanOrEqual', 'LessThan', + 'LessThanOrEqual' + :type operator: str or ~azure.mgmt.monitor.v2018_03_01.models.Operator :param threshold: Required. the criteria threshold value that activates the alert. :type threshold: float @@ -1079,7 +1084,7 @@ class MetricCriteria(MultiMetricCriteria): 'time_aggregation': {'key': 'timeAggregation', 'type': 'object'}, 'dimensions': {'key': 'dimensions', 'type': '[MetricDimension]'}, 'criterion_type': {'key': 'criterionType', 'type': 'str'}, - 'operator': {'key': 'operator', 'type': 'object'}, + 'operator': {'key': 'operator', 'type': 'str'}, 'threshold': {'key': 'threshold', 'type': 'float'}, } @@ -1225,3 +1230,35 @@ def __init__(self, **kwargs): super(WebhookReceiver, self).__init__(**kwargs) self.name = kwargs.get('name', None) self.service_uri = kwargs.get('service_uri', None) + + +class WebtestLocationAvailabilityCriteria(Model): + """Specifies the metric alert rule criteria for a web test resource. + + All required parameters must be populated in order to send to Azure. + + :param web_test_id: Required. The Application Insights web test Id. + :type web_test_id: str + :param component_id: Required. The Application Insights resource Id. + :type component_id: str + :param failed_location_count: Required. The number of failed locations. + :type failed_location_count: float + """ + + _validation = { + 'web_test_id': {'required': True}, + 'component_id': {'required': True}, + 'failed_location_count': {'required': True}, + } + + _attribute_map = { + 'web_test_id': {'key': 'webTestId', 'type': 'str'}, + 'component_id': {'key': 'componentId', 'type': 'str'}, + 'failed_location_count': {'key': 'failedLocationCount', 'type': 'float'}, + } + + def __init__(self, **kwargs): + super(WebtestLocationAvailabilityCriteria, self).__init__(**kwargs) + self.web_test_id = kwargs.get('web_test_id', None) + self.component_id = kwargs.get('component_id', None) + self.failed_location_count = kwargs.get('failed_location_count', None) diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/_models_py3.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/_models_py3.py index 9defb4f09032..e053f5e488d4 100644 --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/_models_py3.py +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/_models_py3.py @@ -390,12 +390,15 @@ class DynamicMetricCriteria(MultiMetricCriteria): :param criterion_type: Required. Constant filled by server. :type criterion_type: str :param operator: Required. The operator used to compare the metric value - against the threshold. - :type operator: object + against the threshold. Possible values include: 'GreaterThan', 'LessThan', + 'GreaterOrLessThan' + :type operator: str or + ~azure.mgmt.monitor.v2018_03_01.models.DynamicThresholdOperator :param alert_sensitivity: Required. The extent of deviation required to trigger an alert. This will affect how tight the threshold is to the - metric series pattern. - :type alert_sensitivity: object + metric series pattern. Possible values include: 'Low', 'Medium', 'High' + :type alert_sensitivity: str or + ~azure.mgmt.monitor.v2018_03_01.models.DynamicThresholdSensitivity :param failing_periods: Required. The minimum number of violations required within the selected lookback time window required to raise an alert. @@ -425,8 +428,8 @@ class DynamicMetricCriteria(MultiMetricCriteria): 'time_aggregation': {'key': 'timeAggregation', 'type': 'object'}, 'dimensions': {'key': 'dimensions', 'type': '[MetricDimension]'}, 'criterion_type': {'key': 'criterionType', 'type': 'str'}, - 'operator': {'key': 'operator', 'type': 'object'}, - 'alert_sensitivity': {'key': 'alertSensitivity', 'type': 'object'}, + 'operator': {'key': 'operator', 'type': 'str'}, + 'alert_sensitivity': {'key': 'alertSensitivity', 'type': 'str'}, 'failing_periods': {'key': 'failingPeriods', 'type': 'DynamicThresholdFailingPeriods'}, 'ignore_data_before': {'key': 'ignoreDataBefore', 'type': 'iso-8601'}, } @@ -651,19 +654,19 @@ class MetricAlertAction(Model): :param action_group_id: the id of the action group to use. :type action_group_id: str - :param webhook_properties: The properties of a webhook object. - :type webhook_properties: dict[str, str] + :param web_hook_properties: The properties of a webhook object. + :type web_hook_properties: dict[str, str] """ _attribute_map = { 'action_group_id': {'key': 'actionGroupId', 'type': 'str'}, - 'webhook_properties': {'key': 'webhookProperties', 'type': '{str}'}, + 'web_hook_properties': {'key': 'webHookProperties', 'type': '{str}'}, } - def __init__(self, *, action_group_id: str=None, webhook_properties=None, **kwargs) -> None: + def __init__(self, *, action_group_id: str=None, web_hook_properties=None, **kwargs) -> None: super(MetricAlertAction, self).__init__(**kwargs) self.action_group_id = action_group_id - self.webhook_properties = webhook_properties + self.web_hook_properties = web_hook_properties class MetricAlertCriteria(Model): @@ -1055,8 +1058,10 @@ class MetricCriteria(MultiMetricCriteria): list[~azure.mgmt.monitor.v2018_03_01.models.MetricDimension] :param criterion_type: Required. Constant filled by server. :type criterion_type: str - :param operator: Required. the criteria operator. - :type operator: object + :param operator: Required. the criteria operator. Possible values include: + 'Equals', 'NotEquals', 'GreaterThan', 'GreaterThanOrEqual', 'LessThan', + 'LessThanOrEqual' + :type operator: str or ~azure.mgmt.monitor.v2018_03_01.models.Operator :param threshold: Required. the criteria threshold value that activates the alert. :type threshold: float @@ -1079,7 +1084,7 @@ class MetricCriteria(MultiMetricCriteria): 'time_aggregation': {'key': 'timeAggregation', 'type': 'object'}, 'dimensions': {'key': 'dimensions', 'type': '[MetricDimension]'}, 'criterion_type': {'key': 'criterionType', 'type': 'str'}, - 'operator': {'key': 'operator', 'type': 'object'}, + 'operator': {'key': 'operator', 'type': 'str'}, 'threshold': {'key': 'threshold', 'type': 'float'}, } @@ -1225,3 +1230,35 @@ def __init__(self, *, name: str, service_uri: str, **kwargs) -> None: super(WebhookReceiver, self).__init__(**kwargs) self.name = name self.service_uri = service_uri + + +class WebtestLocationAvailabilityCriteria(Model): + """Specifies the metric alert rule criteria for a web test resource. + + All required parameters must be populated in order to send to Azure. + + :param web_test_id: Required. The Application Insights web test Id. + :type web_test_id: str + :param component_id: Required. The Application Insights resource Id. + :type component_id: str + :param failed_location_count: Required. The number of failed locations. + :type failed_location_count: float + """ + + _validation = { + 'web_test_id': {'required': True}, + 'component_id': {'required': True}, + 'failed_location_count': {'required': True}, + } + + _attribute_map = { + 'web_test_id': {'key': 'webTestId', 'type': 'str'}, + 'component_id': {'key': 'componentId', 'type': 'str'}, + 'failed_location_count': {'key': 'failedLocationCount', 'type': 'float'}, + } + + def __init__(self, *, web_test_id: str, component_id: str, failed_location_count: float, **kwargs) -> None: + super(WebtestLocationAvailabilityCriteria, self).__init__(**kwargs) + self.web_test_id = web_test_id + self.component_id = component_id + self.failed_location_count = failed_location_count diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/_monitor_management_client_enums.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/_monitor_management_client_enums.py index b6d8fd20db3d..3812569fefbd 100644 --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/_monitor_management_client_enums.py +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2018_03_01/models/_monitor_management_client_enums.py @@ -17,3 +17,27 @@ class ReceiverStatus(str, Enum): not_specified = "NotSpecified" enabled = "Enabled" disabled = "Disabled" + + +class Operator(str, Enum): + + equals = "Equals" + not_equals = "NotEquals" + greater_than = "GreaterThan" + greater_than_or_equal = "GreaterThanOrEqual" + less_than = "LessThan" + less_than_or_equal = "LessThanOrEqual" + + +class DynamicThresholdOperator(str, Enum): + + greater_than = "GreaterThan" + less_than = "LessThan" + greater_or_less_than = "GreaterOrLessThan" + + +class DynamicThresholdSensitivity(str, Enum): + + low = "Low" + medium = "Medium" + high = "High" diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/__init__.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/__init__.py new file mode 100644 index 000000000000..8e97360e5ffb --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/__init__.py @@ -0,0 +1,19 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +from ._configuration import MonitorManagementClientConfiguration +from ._monitor_management_client import MonitorManagementClient +__all__ = ['MonitorManagementClient', 'MonitorManagementClientConfiguration'] + +from .version import VERSION + +__version__ = VERSION + diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/_configuration.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/_configuration.py new file mode 100644 index 000000000000..c6ef8a63dfd2 --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/_configuration.py @@ -0,0 +1,48 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +from msrestazure import AzureConfiguration + +from .version import VERSION + + +class MonitorManagementClientConfiguration(AzureConfiguration): + """Configuration for MonitorManagementClient + Note that all parameters used to create this instance are saved as instance + attributes. + + :param credentials: Credentials needed for the client to connect to Azure. + :type credentials: :mod:`A msrestazure Credentials + object` + :param subscription_id: The ID of the target subscription. + :type subscription_id: str + :param str base_url: Service URL + """ + + def __init__( + self, credentials, subscription_id, base_url=None): + + if credentials is None: + raise ValueError("Parameter 'credentials' must not be None.") + if subscription_id is None: + raise ValueError("Parameter 'subscription_id' must not be None.") + if not base_url: + base_url = 'https://management.azure.com' + + super(MonitorManagementClientConfiguration, self).__init__(base_url) + + # Starting Autorest.Python 4.0.64, make connection pool activated by default + self.keep_alive = True + + self.add_user_agent('azure-mgmt-monitor/{}'.format(VERSION)) + self.add_user_agent('Azure-SDK-For-Python') + + self.credentials = credentials + self.subscription_id = subscription_id diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/_monitor_management_client.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/_monitor_management_client.py new file mode 100644 index 000000000000..4ae97e2fb5c0 --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/_monitor_management_client.py @@ -0,0 +1,69 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +from msrest.service_client import SDKClient +from msrest import Serializer, Deserializer + +from ._configuration import MonitorManagementClientConfiguration +from .operations import PrivateLinkScopesOperations +from .operations import PrivateLinkScopeOperationStatusOperations +from .operations import PrivateLinkResourcesOperations +from .operations import PrivateEndpointConnectionsOperations +from .operations import PrivateLinkScopedResourcesOperations +from . import models + + +class MonitorManagementClient(SDKClient): + """Monitor Management Client + + :ivar config: Configuration for client. + :vartype config: MonitorManagementClientConfiguration + + :ivar private_link_scopes: PrivateLinkScopes operations + :vartype private_link_scopes: azure.mgmt.monitor.v2019_10_17.operations.PrivateLinkScopesOperations + :ivar private_link_scope_operation_status: PrivateLinkScopeOperationStatus operations + :vartype private_link_scope_operation_status: azure.mgmt.monitor.v2019_10_17.operations.PrivateLinkScopeOperationStatusOperations + :ivar private_link_resources: PrivateLinkResources operations + :vartype private_link_resources: azure.mgmt.monitor.v2019_10_17.operations.PrivateLinkResourcesOperations + :ivar private_endpoint_connections: PrivateEndpointConnections operations + :vartype private_endpoint_connections: azure.mgmt.monitor.v2019_10_17.operations.PrivateEndpointConnectionsOperations + :ivar private_link_scoped_resources: PrivateLinkScopedResources operations + :vartype private_link_scoped_resources: azure.mgmt.monitor.v2019_10_17.operations.PrivateLinkScopedResourcesOperations + + :param credentials: Credentials needed for the client to connect to Azure. + :type credentials: :mod:`A msrestazure Credentials + object` + :param subscription_id: The ID of the target subscription. + :type subscription_id: str + :param str base_url: Service URL + """ + + def __init__( + self, credentials, subscription_id, base_url=None): + + self.config = MonitorManagementClientConfiguration(credentials, subscription_id, base_url) + super(MonitorManagementClient, self).__init__(self.config.credentials, self.config) + + client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + self.api_version = '2019-10-17-preview' + self._serialize = Serializer(client_models) + self._deserialize = Deserializer(client_models) + + self.private_link_scopes = PrivateLinkScopesOperations( + self._client, self.config, self._serialize, self._deserialize) + self.private_link_scope_operation_status = PrivateLinkScopeOperationStatusOperations( + self._client, self.config, self._serialize, self._deserialize) + self.private_link_resources = PrivateLinkResourcesOperations( + self._client, self.config, self._serialize, self._deserialize) + self.private_endpoint_connections = PrivateEndpointConnectionsOperations( + self._client, self.config, self._serialize, self._deserialize) + self.private_link_scoped_resources = PrivateLinkScopedResourcesOperations( + self._client, self.config, self._serialize, self._deserialize) diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/models/__init__.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/models/__init__.py new file mode 100644 index 000000000000..1c5f14f0e4ef --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/models/__init__.py @@ -0,0 +1,60 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +try: + from ._models_py3 import AzureMonitorPrivateLinkScope + from ._models_py3 import ErrorAdditionalInfo + from ._models_py3 import ErrorResponse, ErrorResponseException + from ._models_py3 import OperationStatus + from ._models_py3 import PrivateEndpointConnection + from ._models_py3 import PrivateEndpointProperty + from ._models_py3 import PrivateLinkResource + from ._models_py3 import PrivateLinkScopesResource + from ._models_py3 import PrivateLinkServiceConnectionStateProperty + from ._models_py3 import ProxyResource + from ._models_py3 import ScopedResource + from ._models_py3 import TagsResource +except (SyntaxError, ImportError): + from ._models import AzureMonitorPrivateLinkScope + from ._models import ErrorAdditionalInfo + from ._models import ErrorResponse, ErrorResponseException + from ._models import OperationStatus + from ._models import PrivateEndpointConnection + from ._models import PrivateEndpointProperty + from ._models import PrivateLinkResource + from ._models import PrivateLinkScopesResource + from ._models import PrivateLinkServiceConnectionStateProperty + from ._models import ProxyResource + from ._models import ScopedResource + from ._models import TagsResource +from ._paged_models import AzureMonitorPrivateLinkScopePaged +from ._paged_models import PrivateEndpointConnectionPaged +from ._paged_models import PrivateLinkResourcePaged +from ._paged_models import ScopedResourcePaged + +__all__ = [ + 'AzureMonitorPrivateLinkScope', + 'ErrorAdditionalInfo', + 'ErrorResponse', 'ErrorResponseException', + 'OperationStatus', + 'PrivateEndpointConnection', + 'PrivateEndpointProperty', + 'PrivateLinkResource', + 'PrivateLinkScopesResource', + 'PrivateLinkServiceConnectionStateProperty', + 'ProxyResource', + 'ScopedResource', + 'TagsResource', + 'AzureMonitorPrivateLinkScopePaged', + 'PrivateLinkResourcePaged', + 'PrivateEndpointConnectionPaged', + 'ScopedResourcePaged', +] diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/models/_models.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/models/_models.py new file mode 100644 index 000000000000..3000a8a2c424 --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/models/_models.py @@ -0,0 +1,475 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +from msrest.serialization import Model +from msrest.exceptions import HttpOperationError + + +class PrivateLinkScopesResource(Model): + """An azure resource object. + + Variables are only populated by the server, and will be ignored when + sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Azure resource Id + :vartype id: str + :ivar name: Azure resource name + :vartype name: str + :ivar type: Azure resource type + :vartype type: str + :param location: Required. Resource location + :type location: str + :param tags: Resource tags + :type tags: dict[str, str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, **kwargs): + super(PrivateLinkScopesResource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.location = kwargs.get('location', None) + self.tags = kwargs.get('tags', None) + + +class AzureMonitorPrivateLinkScope(PrivateLinkScopesResource): + """An Azure Monitor PrivateLinkScope definition. + + Variables are only populated by the server, and will be ignored when + sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Azure resource Id + :vartype id: str + :ivar name: Azure resource name + :vartype name: str + :ivar type: Azure resource type + :vartype type: str + :param location: Required. Resource location + :type location: str + :param tags: Resource tags + :type tags: dict[str, str] + :ivar provisioning_state: Current state of this PrivateLinkScope: whether + or not is has been provisioned within the resource group it is defined. + Users cannot change this value but are able to read from it. Values will + include Provisioning ,Succeeded, Canceled and Failed. + :vartype provisioning_state: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__(self, **kwargs): + super(AzureMonitorPrivateLinkScope, self).__init__(**kwargs) + self.provisioning_state = None + + +class CloudError(Model): + """CloudError. + """ + + _attribute_map = { + } + + +class ErrorAdditionalInfo(Model): + """The resource management error additional info. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar type: The additional info type. + :vartype type: str + :ivar info: The additional info. + :vartype info: object + """ + + _validation = { + 'type': {'readonly': True}, + 'info': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'info': {'key': 'info', 'type': 'object'}, + } + + def __init__(self, **kwargs): + super(ErrorAdditionalInfo, self).__init__(**kwargs) + self.type = None + self.info = None + + +class ErrorResponse(Model): + """The resource management error response. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar code: The error code. + :vartype code: str + :ivar message: The error message. + :vartype message: str + :ivar target: The error target. + :vartype target: str + :ivar details: The error details. + :vartype details: + list[~azure.mgmt.monitor.v2019_10_17.models.ErrorResponse] + :ivar additional_info: The error additional info. + :vartype additional_info: + list[~azure.mgmt.monitor.v2019_10_17.models.ErrorAdditionalInfo] + """ + + _validation = { + 'code': {'readonly': True}, + 'message': {'readonly': True}, + 'target': {'readonly': True}, + 'details': {'readonly': True}, + 'additional_info': {'readonly': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[ErrorResponse]'}, + 'additional_info': {'key': 'additionalInfo', 'type': '[ErrorAdditionalInfo]'}, + } + + def __init__(self, **kwargs): + super(ErrorResponse, self).__init__(**kwargs) + self.code = None + self.message = None + self.target = None + self.details = None + self.additional_info = None + + +class ErrorResponseException(HttpOperationError): + """Server responsed with exception of type: 'ErrorResponse'. + + :param deserialize: A deserializer + :param response: Server response to be deserialized. + """ + + def __init__(self, deserialize, response, *args): + + super(ErrorResponseException, self).__init__(deserialize, response, 'ErrorResponse', *args) + + +class OperationStatus(Model): + """The status of operation. + + :param id: The operation Id. + :type id: str + :param name: The operation name. + :type name: str + :param start_time: Start time of the job in standard ISO8601 format. + :type start_time: datetime + :param end_time: End time of the job in standard ISO8601 format. + :type end_time: datetime + :param status: The status of the operation. + :type status: str + :param error: The error detail of the operation if any. + :type error: ~azure.mgmt.monitor.v2019_10_17.models.ErrorResponse + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'start_time': {'key': 'startTime', 'type': 'iso-8601'}, + 'end_time': {'key': 'endTime', 'type': 'iso-8601'}, + 'status': {'key': 'status', 'type': 'str'}, + 'error': {'key': 'error', 'type': 'ErrorResponse'}, + } + + def __init__(self, **kwargs): + super(OperationStatus, self).__init__(**kwargs) + self.id = kwargs.get('id', None) + self.name = kwargs.get('name', None) + self.start_time = kwargs.get('start_time', None) + self.end_time = kwargs.get('end_time', None) + self.status = kwargs.get('status', None) + self.error = kwargs.get('error', None) + + +class ProxyResource(Model): + """Common properties of proxy resource. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: Resource ID. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param tags: Resource tags + :type tags: dict[str, str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, **kwargs): + super(ProxyResource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.tags = kwargs.get('tags', None) + + +class PrivateEndpointConnection(ProxyResource): + """A private endpoint connection. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: Resource ID. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param tags: Resource tags + :type tags: dict[str, str] + :param private_endpoint: Private endpoint which the connection belongs to. + :type private_endpoint: + ~azure.mgmt.monitor.v2019_10_17.models.PrivateEndpointProperty + :param private_link_service_connection_state: Connection state of the + private endpoint connection. + :type private_link_service_connection_state: + ~azure.mgmt.monitor.v2019_10_17.models.PrivateLinkServiceConnectionStateProperty + :ivar provisioning_state: State of the private endpoint connection. + :vartype provisioning_state: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'private_endpoint': {'key': 'properties.privateEndpoint', 'type': 'PrivateEndpointProperty'}, + 'private_link_service_connection_state': {'key': 'properties.privateLinkServiceConnectionState', 'type': 'PrivateLinkServiceConnectionStateProperty'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__(self, **kwargs): + super(PrivateEndpointConnection, self).__init__(**kwargs) + self.private_endpoint = kwargs.get('private_endpoint', None) + self.private_link_service_connection_state = kwargs.get('private_link_service_connection_state', None) + self.provisioning_state = None + + +class PrivateEndpointProperty(Model): + """Private endpoint which the connection belongs to. + + :param id: Resource id of the private endpoint. + :type id: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__(self, **kwargs): + super(PrivateEndpointProperty, self).__init__(**kwargs) + self.id = kwargs.get('id', None) + + +class PrivateLinkResource(ProxyResource): + """A private link resource. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: Resource ID. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param tags: Resource tags + :type tags: dict[str, str] + :ivar group_id: The private link resource group id. + :vartype group_id: str + :ivar required_members: The private link resource required member names. + :vartype required_members: list[str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'group_id': {'readonly': True}, + 'required_members': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'group_id': {'key': 'properties.groupId', 'type': 'str'}, + 'required_members': {'key': 'properties.requiredMembers', 'type': '[str]'}, + } + + def __init__(self, **kwargs): + super(PrivateLinkResource, self).__init__(**kwargs) + self.group_id = None + self.required_members = None + + +class PrivateLinkServiceConnectionStateProperty(Model): + """State of the private endpoint connection. + + Variables are only populated by the server, and will be ignored when + sending a request. + + All required parameters must be populated in order to send to Azure. + + :param status: Required. The private link service connection status. + :type status: str + :param description: Required. The private link service connection + description. + :type description: str + :ivar actions_required: The actions required for private link service + connection. + :vartype actions_required: str + """ + + _validation = { + 'status': {'required': True}, + 'description': {'required': True}, + 'actions_required': {'readonly': True}, + } + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'actions_required': {'key': 'actionsRequired', 'type': 'str'}, + } + + def __init__(self, **kwargs): + super(PrivateLinkServiceConnectionStateProperty, self).__init__(**kwargs) + self.status = kwargs.get('status', None) + self.description = kwargs.get('description', None) + self.actions_required = None + + +class ScopedResource(ProxyResource): + """A private link scoped resource. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: Resource ID. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param tags: Resource tags + :type tags: dict[str, str] + :param linked_resource_id: The resource id of the scoped Azure monitor + resource. + :type linked_resource_id: str + :ivar provisioning_state: State of the private endpoint connection. + :vartype provisioning_state: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'linked_resource_id': {'key': 'properties.linkedResourceId', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__(self, **kwargs): + super(ScopedResource, self).__init__(**kwargs) + self.linked_resource_id = kwargs.get('linked_resource_id', None) + self.provisioning_state = None + + +class TagsResource(Model): + """A container holding only the Tags for a resource, allowing the user to + update the tags on a PrivateLinkScope instance. + + :param tags: Resource tags + :type tags: dict[str, str] + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, **kwargs): + super(TagsResource, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/models/_models_py3.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/models/_models_py3.py new file mode 100644 index 000000000000..56a08b9b57f0 --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/models/_models_py3.py @@ -0,0 +1,475 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +from msrest.serialization import Model +from msrest.exceptions import HttpOperationError + + +class PrivateLinkScopesResource(Model): + """An azure resource object. + + Variables are only populated by the server, and will be ignored when + sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Azure resource Id + :vartype id: str + :ivar name: Azure resource name + :vartype name: str + :ivar type: Azure resource type + :vartype type: str + :param location: Required. Resource location + :type location: str + :param tags: Resource tags + :type tags: dict[str, str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, *, location: str, tags=None, **kwargs) -> None: + super(PrivateLinkScopesResource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.location = location + self.tags = tags + + +class AzureMonitorPrivateLinkScope(PrivateLinkScopesResource): + """An Azure Monitor PrivateLinkScope definition. + + Variables are only populated by the server, and will be ignored when + sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Azure resource Id + :vartype id: str + :ivar name: Azure resource name + :vartype name: str + :ivar type: Azure resource type + :vartype type: str + :param location: Required. Resource location + :type location: str + :param tags: Resource tags + :type tags: dict[str, str] + :ivar provisioning_state: Current state of this PrivateLinkScope: whether + or not is has been provisioned within the resource group it is defined. + Users cannot change this value but are able to read from it. Values will + include Provisioning ,Succeeded, Canceled and Failed. + :vartype provisioning_state: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__(self, *, location: str, tags=None, **kwargs) -> None: + super(AzureMonitorPrivateLinkScope, self).__init__(location=location, tags=tags, **kwargs) + self.provisioning_state = None + + +class CloudError(Model): + """CloudError. + """ + + _attribute_map = { + } + + +class ErrorAdditionalInfo(Model): + """The resource management error additional info. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar type: The additional info type. + :vartype type: str + :ivar info: The additional info. + :vartype info: object + """ + + _validation = { + 'type': {'readonly': True}, + 'info': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'info': {'key': 'info', 'type': 'object'}, + } + + def __init__(self, **kwargs) -> None: + super(ErrorAdditionalInfo, self).__init__(**kwargs) + self.type = None + self.info = None + + +class ErrorResponse(Model): + """The resource management error response. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar code: The error code. + :vartype code: str + :ivar message: The error message. + :vartype message: str + :ivar target: The error target. + :vartype target: str + :ivar details: The error details. + :vartype details: + list[~azure.mgmt.monitor.v2019_10_17.models.ErrorResponse] + :ivar additional_info: The error additional info. + :vartype additional_info: + list[~azure.mgmt.monitor.v2019_10_17.models.ErrorAdditionalInfo] + """ + + _validation = { + 'code': {'readonly': True}, + 'message': {'readonly': True}, + 'target': {'readonly': True}, + 'details': {'readonly': True}, + 'additional_info': {'readonly': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[ErrorResponse]'}, + 'additional_info': {'key': 'additionalInfo', 'type': '[ErrorAdditionalInfo]'}, + } + + def __init__(self, **kwargs) -> None: + super(ErrorResponse, self).__init__(**kwargs) + self.code = None + self.message = None + self.target = None + self.details = None + self.additional_info = None + + +class ErrorResponseException(HttpOperationError): + """Server responsed with exception of type: 'ErrorResponse'. + + :param deserialize: A deserializer + :param response: Server response to be deserialized. + """ + + def __init__(self, deserialize, response, *args): + + super(ErrorResponseException, self).__init__(deserialize, response, 'ErrorResponse', *args) + + +class OperationStatus(Model): + """The status of operation. + + :param id: The operation Id. + :type id: str + :param name: The operation name. + :type name: str + :param start_time: Start time of the job in standard ISO8601 format. + :type start_time: datetime + :param end_time: End time of the job in standard ISO8601 format. + :type end_time: datetime + :param status: The status of the operation. + :type status: str + :param error: The error detail of the operation if any. + :type error: ~azure.mgmt.monitor.v2019_10_17.models.ErrorResponse + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'start_time': {'key': 'startTime', 'type': 'iso-8601'}, + 'end_time': {'key': 'endTime', 'type': 'iso-8601'}, + 'status': {'key': 'status', 'type': 'str'}, + 'error': {'key': 'error', 'type': 'ErrorResponse'}, + } + + def __init__(self, *, id: str=None, name: str=None, start_time=None, end_time=None, status: str=None, error=None, **kwargs) -> None: + super(OperationStatus, self).__init__(**kwargs) + self.id = id + self.name = name + self.start_time = start_time + self.end_time = end_time + self.status = status + self.error = error + + +class ProxyResource(Model): + """Common properties of proxy resource. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: Resource ID. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param tags: Resource tags + :type tags: dict[str, str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, *, tags=None, **kwargs) -> None: + super(ProxyResource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.tags = tags + + +class PrivateEndpointConnection(ProxyResource): + """A private endpoint connection. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: Resource ID. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param tags: Resource tags + :type tags: dict[str, str] + :param private_endpoint: Private endpoint which the connection belongs to. + :type private_endpoint: + ~azure.mgmt.monitor.v2019_10_17.models.PrivateEndpointProperty + :param private_link_service_connection_state: Connection state of the + private endpoint connection. + :type private_link_service_connection_state: + ~azure.mgmt.monitor.v2019_10_17.models.PrivateLinkServiceConnectionStateProperty + :ivar provisioning_state: State of the private endpoint connection. + :vartype provisioning_state: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'private_endpoint': {'key': 'properties.privateEndpoint', 'type': 'PrivateEndpointProperty'}, + 'private_link_service_connection_state': {'key': 'properties.privateLinkServiceConnectionState', 'type': 'PrivateLinkServiceConnectionStateProperty'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__(self, *, tags=None, private_endpoint=None, private_link_service_connection_state=None, **kwargs) -> None: + super(PrivateEndpointConnection, self).__init__(tags=tags, **kwargs) + self.private_endpoint = private_endpoint + self.private_link_service_connection_state = private_link_service_connection_state + self.provisioning_state = None + + +class PrivateEndpointProperty(Model): + """Private endpoint which the connection belongs to. + + :param id: Resource id of the private endpoint. + :type id: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__(self, *, id: str=None, **kwargs) -> None: + super(PrivateEndpointProperty, self).__init__(**kwargs) + self.id = id + + +class PrivateLinkResource(ProxyResource): + """A private link resource. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: Resource ID. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param tags: Resource tags + :type tags: dict[str, str] + :ivar group_id: The private link resource group id. + :vartype group_id: str + :ivar required_members: The private link resource required member names. + :vartype required_members: list[str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'group_id': {'readonly': True}, + 'required_members': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'group_id': {'key': 'properties.groupId', 'type': 'str'}, + 'required_members': {'key': 'properties.requiredMembers', 'type': '[str]'}, + } + + def __init__(self, *, tags=None, **kwargs) -> None: + super(PrivateLinkResource, self).__init__(tags=tags, **kwargs) + self.group_id = None + self.required_members = None + + +class PrivateLinkServiceConnectionStateProperty(Model): + """State of the private endpoint connection. + + Variables are only populated by the server, and will be ignored when + sending a request. + + All required parameters must be populated in order to send to Azure. + + :param status: Required. The private link service connection status. + :type status: str + :param description: Required. The private link service connection + description. + :type description: str + :ivar actions_required: The actions required for private link service + connection. + :vartype actions_required: str + """ + + _validation = { + 'status': {'required': True}, + 'description': {'required': True}, + 'actions_required': {'readonly': True}, + } + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'actions_required': {'key': 'actionsRequired', 'type': 'str'}, + } + + def __init__(self, *, status: str, description: str, **kwargs) -> None: + super(PrivateLinkServiceConnectionStateProperty, self).__init__(**kwargs) + self.status = status + self.description = description + self.actions_required = None + + +class ScopedResource(ProxyResource): + """A private link scoped resource. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: Resource ID. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param tags: Resource tags + :type tags: dict[str, str] + :param linked_resource_id: The resource id of the scoped Azure monitor + resource. + :type linked_resource_id: str + :ivar provisioning_state: State of the private endpoint connection. + :vartype provisioning_state: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'linked_resource_id': {'key': 'properties.linkedResourceId', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__(self, *, tags=None, linked_resource_id: str=None, **kwargs) -> None: + super(ScopedResource, self).__init__(tags=tags, **kwargs) + self.linked_resource_id = linked_resource_id + self.provisioning_state = None + + +class TagsResource(Model): + """A container holding only the Tags for a resource, allowing the user to + update the tags on a PrivateLinkScope instance. + + :param tags: Resource tags + :type tags: dict[str, str] + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, *, tags=None, **kwargs) -> None: + super(TagsResource, self).__init__(**kwargs) + self.tags = tags diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/models/_paged_models.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/models/_paged_models.py new file mode 100644 index 000000000000..c79b661be20f --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/models/_paged_models.py @@ -0,0 +1,66 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +from msrest.paging import Paged + + +class AzureMonitorPrivateLinkScopePaged(Paged): + """ + A paging container for iterating over a list of :class:`AzureMonitorPrivateLinkScope ` object + """ + + _attribute_map = { + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'current_page': {'key': 'value', 'type': '[AzureMonitorPrivateLinkScope]'} + } + + def __init__(self, *args, **kwargs): + + super(AzureMonitorPrivateLinkScopePaged, self).__init__(*args, **kwargs) +class PrivateLinkResourcePaged(Paged): + """ + A paging container for iterating over a list of :class:`PrivateLinkResource ` object + """ + + _attribute_map = { + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'current_page': {'key': 'value', 'type': '[PrivateLinkResource]'} + } + + def __init__(self, *args, **kwargs): + + super(PrivateLinkResourcePaged, self).__init__(*args, **kwargs) +class PrivateEndpointConnectionPaged(Paged): + """ + A paging container for iterating over a list of :class:`PrivateEndpointConnection ` object + """ + + _attribute_map = { + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'current_page': {'key': 'value', 'type': '[PrivateEndpointConnection]'} + } + + def __init__(self, *args, **kwargs): + + super(PrivateEndpointConnectionPaged, self).__init__(*args, **kwargs) +class ScopedResourcePaged(Paged): + """ + A paging container for iterating over a list of :class:`ScopedResource ` object + """ + + _attribute_map = { + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'current_page': {'key': 'value', 'type': '[ScopedResource]'} + } + + def __init__(self, *args, **kwargs): + + super(ScopedResourcePaged, self).__init__(*args, **kwargs) diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/__init__.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/__init__.py new file mode 100644 index 000000000000..700ace1f9db0 --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/__init__.py @@ -0,0 +1,24 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +from ._private_link_scopes_operations import PrivateLinkScopesOperations +from ._private_link_scope_operation_status_operations import PrivateLinkScopeOperationStatusOperations +from ._private_link_resources_operations import PrivateLinkResourcesOperations +from ._private_endpoint_connections_operations import PrivateEndpointConnectionsOperations +from ._private_link_scoped_resources_operations import PrivateLinkScopedResourcesOperations + +__all__ = [ + 'PrivateLinkScopesOperations', + 'PrivateLinkScopeOperationStatusOperations', + 'PrivateLinkResourcesOperations', + 'PrivateEndpointConnectionsOperations', + 'PrivateLinkScopedResourcesOperations', +] diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_endpoint_connections_operations.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_endpoint_connections_operations.py new file mode 100644 index 000000000000..a226ee28cb33 --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_endpoint_connections_operations.py @@ -0,0 +1,379 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +import uuid +from msrest.pipeline import ClientRawResponse +from msrestazure.azure_exceptions import CloudError +from msrest.polling import LROPoller, NoPolling +from msrestazure.polling.arm_polling import ARMPolling + +from .. import models + + +class PrivateEndpointConnectionsOperations(object): + """PrivateEndpointConnectionsOperations operations. + + You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + :ivar api_version: The API version to use for this operation. Constant value: "2019-10-17-preview". + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self.api_version = "2019-10-17-preview" + + self.config = config + + def get( + self, resource_group_name, scope_name, private_endpoint_connection_name, custom_headers=None, raw=False, **operation_config): + """Gets a private endpoint connection. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: Name of the Azure Monitor PrivateLinkScope that + will contain the datasource + :type scope_name: str + :param private_endpoint_connection_name: The name of the private + endpoint connection. + :type private_endpoint_connection_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: PrivateEndpointConnection or ClientRawResponse if raw=true + :rtype: + ~azure.mgmt.monitor.v2019_10_17.models.PrivateEndpointConnection or + ~msrest.pipeline.ClientRawResponse + :raises: :class:`CloudError` + """ + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str'), + 'privateEndpointConnectionName': self._serialize.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + exp = CloudError(response) + exp.request_id = response.headers.get('x-ms-request-id') + raise exp + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('PrivateEndpointConnection', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/privateLinkScopes/{scopeName}/privateEndpointConnections/{privateEndpointConnectionName}'} + + + def _create_or_update_initial( + self, resource_group_name, scope_name, private_endpoint_connection_name, parameters, custom_headers=None, raw=False, **operation_config): + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str'), + 'privateEndpointConnectionName': self._serialize.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'PrivateEndpointConnection') + + # Construct and send request + request = self._client.put(url, query_parameters, header_parameters, body_content) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200, 202]: + exp = CloudError(response) + exp.request_id = response.headers.get('x-ms-request-id') + raise exp + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('PrivateEndpointConnection', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def create_or_update( + self, resource_group_name, scope_name, private_endpoint_connection_name, parameters, custom_headers=None, raw=False, polling=True, **operation_config): + """Approve or reject a private endpoint connection with a given name. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: Name of the Azure Monitor PrivateLinkScope that + will contain the datasource + :type scope_name: str + :param private_endpoint_connection_name: The name of the private + endpoint connection. + :type private_endpoint_connection_name: str + :param parameters: + :type parameters: + ~azure.mgmt.monitor.v2019_10_17.models.PrivateEndpointConnection + :param dict custom_headers: headers that will be added to the request + :param bool raw: The poller return type is ClientRawResponse, the + direct response alongside the deserialized response + :param polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :return: An instance of LROPoller that returns + PrivateEndpointConnection or + ClientRawResponse if raw==True + :rtype: + ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.monitor.v2019_10_17.models.PrivateEndpointConnection] + or + ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.monitor.v2019_10_17.models.PrivateEndpointConnection]] + :raises: :class:`CloudError` + """ + raw_result = self._create_or_update_initial( + resource_group_name=resource_group_name, + scope_name=scope_name, + private_endpoint_connection_name=private_endpoint_connection_name, + parameters=parameters, + custom_headers=custom_headers, + raw=True, + **operation_config + ) + + def get_long_running_output(response): + deserialized = self._deserialize('PrivateEndpointConnection', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + lro_delay = operation_config.get( + 'long_running_operation_timeout', + self.config.long_running_operation_timeout) + if polling is True: polling_method = ARMPolling(lro_delay, **operation_config) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/privateLinkScopes/{scopeName}/privateEndpointConnections/{privateEndpointConnectionName}'} + + + def _delete_initial( + self, resource_group_name, scope_name, private_endpoint_connection_name, custom_headers=None, raw=False, **operation_config): + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str'), + 'privateEndpointConnectionName': self._serialize.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + # Construct headers + header_parameters = {} + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200, 202, 204]: + exp = CloudError(response) + exp.request_id = response.headers.get('x-ms-request-id') + raise exp + + if raw: + client_raw_response = ClientRawResponse(None, response) + return client_raw_response + + def delete( + self, resource_group_name, scope_name, private_endpoint_connection_name, custom_headers=None, raw=False, polling=True, **operation_config): + """Deletes a private endpoint connection with a given name. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: Name of the Azure Monitor PrivateLinkScope that + will contain the datasource + :type scope_name: str + :param private_endpoint_connection_name: The name of the private + endpoint connection. + :type private_endpoint_connection_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: The poller return type is ClientRawResponse, the + direct response alongside the deserialized response + :param polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :return: An instance of LROPoller that returns None or + ClientRawResponse if raw==True + :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or + ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]] + :raises: :class:`CloudError` + """ + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + scope_name=scope_name, + private_endpoint_connection_name=private_endpoint_connection_name, + custom_headers=custom_headers, + raw=True, + **operation_config + ) + + def get_long_running_output(response): + if raw: + client_raw_response = ClientRawResponse(None, response) + return client_raw_response + + lro_delay = operation_config.get( + 'long_running_operation_timeout', + self.config.long_running_operation_timeout) + if polling is True: polling_method = ARMPolling(lro_delay, **operation_config) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/privateLinkScopes/{scopeName}/privateEndpointConnections/{privateEndpointConnectionName}'} + + def list_by_private_link_scope( + self, resource_group_name, scope_name, custom_headers=None, raw=False, **operation_config): + """Gets all private endpoint connections on a private link scope. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: Name of the Azure Monitor PrivateLinkScope that + will contain the datasource + :type scope_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: An iterator like instance of PrivateEndpointConnection + :rtype: + ~azure.mgmt.monitor.v2019_10_17.models.PrivateEndpointConnectionPaged[~azure.mgmt.monitor.v2019_10_17.models.PrivateEndpointConnection] + :raises: :class:`CloudError` + """ + def prepare_request(next_link=None): + if not next_link: + # Construct URL + url = self.list_by_private_link_scope.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + return request + + def internal_paging(next_link=None): + request = prepare_request(next_link) + + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + exp = CloudError(response) + exp.request_id = response.headers.get('x-ms-request-id') + raise exp + + return response + + # Deserialize response + header_dict = None + if raw: + header_dict = {} + deserialized = models.PrivateEndpointConnectionPaged(internal_paging, self._deserialize.dependencies, header_dict) + + return deserialized + list_by_private_link_scope.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/privateLinkScopes/{scopeName}/privateEndpointConnections'} diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_link_resources_operations.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_link_resources_operations.py new file mode 100644 index 000000000000..6442301ac264 --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_link_resources_operations.py @@ -0,0 +1,182 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +import uuid +from msrest.pipeline import ClientRawResponse +from msrestazure.azure_exceptions import CloudError + +from .. import models + + +class PrivateLinkResourcesOperations(object): + """PrivateLinkResourcesOperations operations. + + You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + :ivar api_version: The API version to use for this operation. Constant value: "2019-10-17-preview". + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self.api_version = "2019-10-17-preview" + + self.config = config + + def list_by_private_link_scope( + self, resource_group_name, scope_name, custom_headers=None, raw=False, **operation_config): + """Gets the private link resources that need to be created for a Azure + Monitor PrivateLinkScope. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: Name of the Azure Monitor PrivateLinkScope that + will contain the datasource + :type scope_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: An iterator like instance of PrivateLinkResource + :rtype: + ~azure.mgmt.monitor.v2019_10_17.models.PrivateLinkResourcePaged[~azure.mgmt.monitor.v2019_10_17.models.PrivateLinkResource] + :raises: :class:`CloudError` + """ + def prepare_request(next_link=None): + if not next_link: + # Construct URL + url = self.list_by_private_link_scope.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + return request + + def internal_paging(next_link=None): + request = prepare_request(next_link) + + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + exp = CloudError(response) + exp.request_id = response.headers.get('x-ms-request-id') + raise exp + + return response + + # Deserialize response + header_dict = None + if raw: + header_dict = {} + deserialized = models.PrivateLinkResourcePaged(internal_paging, self._deserialize.dependencies, header_dict) + + return deserialized + list_by_private_link_scope.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/privateLinkScopes/{scopeName}/privateLinkResources'} + + def get( + self, resource_group_name, scope_name, group_name, custom_headers=None, raw=False, **operation_config): + """Gets the private link resources that need to be created for a Azure + Monitor PrivateLinkScope. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: Name of the Azure Monitor PrivateLinkScope that + will contain the datasource + :type scope_name: str + :param group_name: The name of the private link resource. + :type group_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: PrivateLinkResource or ClientRawResponse if raw=true + :rtype: ~azure.mgmt.monitor.v2019_10_17.models.PrivateLinkResource or + ~msrest.pipeline.ClientRawResponse + :raises: :class:`CloudError` + """ + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str'), + 'groupName': self._serialize.url("group_name", group_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + exp = CloudError(response) + exp.request_id = response.headers.get('x-ms-request-id') + raise exp + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('PrivateLinkResource', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/privateLinkScopes/{scopeName}/privateLinkResources/{groupName}'} diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_link_scope_operation_status_operations.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_link_scope_operation_status_operations.py new file mode 100644 index 000000000000..5eece5421950 --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_link_scope_operation_status_operations.py @@ -0,0 +1,103 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +import uuid +from msrest.pipeline import ClientRawResponse +from msrestazure.azure_exceptions import CloudError + +from .. import models + + +class PrivateLinkScopeOperationStatusOperations(object): + """PrivateLinkScopeOperationStatusOperations operations. + + You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + :ivar api_version: The API version to use for this operation. Constant value: "2019-10-17-preview". + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self.api_version = "2019-10-17-preview" + + self.config = config + + def get( + self, async_operation_id, resource_group_name, custom_headers=None, raw=False, **operation_config): + """Get the status of an azure asynchronous operation associated with a + private link scope operation. + + :param async_operation_id: The operation Id. + :type async_operation_id: str + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: OperationStatus or ClientRawResponse if raw=true + :rtype: ~azure.mgmt.monitor.v2019_10_17.models.OperationStatus or + ~msrest.pipeline.ClientRawResponse + :raises: :class:`CloudError` + """ + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'asyncOperationId': self._serialize.url("async_operation_id", async_operation_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1) + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + exp = CloudError(response) + exp.request_id = response.headers.get('x-ms-request-id') + raise exp + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('OperationStatus', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.insights/privateLinkScopeOperationStatuses/{asyncOperationId}'} diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_link_scoped_resources_operations.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_link_scoped_resources_operations.py new file mode 100644 index 000000000000..7b4fdbeaa933 --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_link_scoped_resources_operations.py @@ -0,0 +1,379 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +import uuid +from msrest.pipeline import ClientRawResponse +from msrestazure.azure_exceptions import CloudError +from msrest.polling import LROPoller, NoPolling +from msrestazure.polling.arm_polling import ARMPolling + +from .. import models + + +class PrivateLinkScopedResourcesOperations(object): + """PrivateLinkScopedResourcesOperations operations. + + You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + :ivar api_version: The API version to use for this operation. Constant value: "2019-10-17-preview". + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self.api_version = "2019-10-17-preview" + + self.config = config + + def get( + self, resource_group_name, scope_name, name, custom_headers=None, raw=False, **operation_config): + """Gets a scoped resource in a private link scope. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: Name of the Azure Monitor PrivateLinkScope that + will contain the datasource + :type scope_name: str + :param name: The name of the scoped resource object. + :type name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: ScopedResource or ClientRawResponse if raw=true + :rtype: ~azure.mgmt.monitor.v2019_10_17.models.ScopedResource or + ~msrest.pipeline.ClientRawResponse + :raises: :class:`CloudError` + """ + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str'), + 'name': self._serialize.url("name", name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + exp = CloudError(response) + exp.request_id = response.headers.get('x-ms-request-id') + raise exp + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('ScopedResource', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/privateLinkScopes/{scopeName}/scopedResources/{name}'} + + + def _create_or_update_initial( + self, resource_group_name, scope_name, name, tags=None, linked_resource_id=None, custom_headers=None, raw=False, **operation_config): + parameters = models.ScopedResource(tags=tags, linked_resource_id=linked_resource_id) + + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str'), + 'name': self._serialize.url("name", name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'ScopedResource') + + # Construct and send request + request = self._client.put(url, query_parameters, header_parameters, body_content) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200, 202]: + exp = CloudError(response) + exp.request_id = response.headers.get('x-ms-request-id') + raise exp + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('ScopedResource', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def create_or_update( + self, resource_group_name, scope_name, name, tags=None, linked_resource_id=None, custom_headers=None, raw=False, polling=True, **operation_config): + """Approve or reject a private endpoint connection with a given name. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: Name of the Azure Monitor PrivateLinkScope that + will contain the datasource + :type scope_name: str + :param name: The name of the scoped resource object. + :type name: str + :param tags: Resource tags + :type tags: dict[str, str] + :param linked_resource_id: The resource id of the scoped Azure monitor + resource. + :type linked_resource_id: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: The poller return type is ClientRawResponse, the + direct response alongside the deserialized response + :param polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :return: An instance of LROPoller that returns ScopedResource or + ClientRawResponse if raw==True + :rtype: + ~msrestazure.azure_operation.AzureOperationPoller[~azure.mgmt.monitor.v2019_10_17.models.ScopedResource] + or + ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[~azure.mgmt.monitor.v2019_10_17.models.ScopedResource]] + :raises: :class:`CloudError` + """ + raw_result = self._create_or_update_initial( + resource_group_name=resource_group_name, + scope_name=scope_name, + name=name, + tags=tags, + linked_resource_id=linked_resource_id, + custom_headers=custom_headers, + raw=True, + **operation_config + ) + + def get_long_running_output(response): + deserialized = self._deserialize('ScopedResource', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + lro_delay = operation_config.get( + 'long_running_operation_timeout', + self.config.long_running_operation_timeout) + if polling is True: polling_method = ARMPolling(lro_delay, **operation_config) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/privateLinkScopes/{scopeName}/scopedResources/{name}'} + + + def _delete_initial( + self, resource_group_name, scope_name, name, custom_headers=None, raw=False, **operation_config): + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str'), + 'name': self._serialize.url("name", name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + # Construct headers + header_parameters = {} + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200, 202, 204]: + exp = CloudError(response) + exp.request_id = response.headers.get('x-ms-request-id') + raise exp + + if raw: + client_raw_response = ClientRawResponse(None, response) + return client_raw_response + + def delete( + self, resource_group_name, scope_name, name, custom_headers=None, raw=False, polling=True, **operation_config): + """Deletes a private endpoint connection with a given name. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: Name of the Azure Monitor PrivateLinkScope that + will contain the datasource + :type scope_name: str + :param name: The name of the scoped resource object. + :type name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: The poller return type is ClientRawResponse, the + direct response alongside the deserialized response + :param polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :return: An instance of LROPoller that returns None or + ClientRawResponse if raw==True + :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or + ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]] + :raises: :class:`CloudError` + """ + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + scope_name=scope_name, + name=name, + custom_headers=custom_headers, + raw=True, + **operation_config + ) + + def get_long_running_output(response): + if raw: + client_raw_response = ClientRawResponse(None, response) + return client_raw_response + + lro_delay = operation_config.get( + 'long_running_operation_timeout', + self.config.long_running_operation_timeout) + if polling is True: polling_method = ARMPolling(lro_delay, **operation_config) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/privateLinkScopes/{scopeName}/scopedResources/{name}'} + + def list_by_private_link_scope( + self, resource_group_name, scope_name, custom_headers=None, raw=False, **operation_config): + """Gets all private endpoint connections on a private link scope. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: Name of the Azure Monitor PrivateLinkScope that + will contain the datasource + :type scope_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: An iterator like instance of ScopedResource + :rtype: + ~azure.mgmt.monitor.v2019_10_17.models.ScopedResourcePaged[~azure.mgmt.monitor.v2019_10_17.models.ScopedResource] + :raises: :class:`CloudError` + """ + def prepare_request(next_link=None): + if not next_link: + # Construct URL + url = self.list_by_private_link_scope.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + return request + + def internal_paging(next_link=None): + request = prepare_request(next_link) + + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + exp = CloudError(response) + exp.request_id = response.headers.get('x-ms-request-id') + raise exp + + return response + + # Deserialize response + header_dict = None + if raw: + header_dict = {} + deserialized = models.ScopedResourcePaged(internal_paging, self._deserialize.dependencies, header_dict) + + return deserialized + list_by_private_link_scope.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/privateLinkScopes/{scopeName}/scopedResources'} diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_link_scopes_operations.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_link_scopes_operations.py new file mode 100644 index 000000000000..7f4b5fbde940 --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/operations/_private_link_scopes_operations.py @@ -0,0 +1,466 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +import uuid +from msrest.pipeline import ClientRawResponse +from msrest.polling import LROPoller, NoPolling +from msrestazure.polling.arm_polling import ARMPolling + +from .. import models + + +class PrivateLinkScopesOperations(object): + """PrivateLinkScopesOperations operations. + + You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + :ivar api_version: The API version to use for this operation. Constant value: "2019-10-17-preview". + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self.api_version = "2019-10-17-preview" + + self.config = config + + def list( + self, custom_headers=None, raw=False, **operation_config): + """Gets a list of all Azure Monitor PrivateLinkScopes within a + subscription. + + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: An iterator like instance of AzureMonitorPrivateLinkScope + :rtype: + ~azure.mgmt.monitor.v2019_10_17.models.AzureMonitorPrivateLinkScopePaged[~azure.mgmt.monitor.v2019_10_17.models.AzureMonitorPrivateLinkScope] + :raises: + :class:`ErrorResponseException` + """ + def prepare_request(next_link=None): + if not next_link: + # Construct URL + url = self.list.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1) + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + return request + + def internal_paging(next_link=None): + request = prepare_request(next_link) + + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + raise models.ErrorResponseException(self._deserialize, response) + + return response + + # Deserialize response + header_dict = None + if raw: + header_dict = {} + deserialized = models.AzureMonitorPrivateLinkScopePaged(internal_paging, self._deserialize.dependencies, header_dict) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/microsoft.insights/privateLinkScopes'} + + def list_by_resource_group( + self, resource_group_name, custom_headers=None, raw=False, **operation_config): + """Gets a list of Azure Monitor PrivateLinkScopes within a resource group. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: An iterator like instance of AzureMonitorPrivateLinkScope + :rtype: + ~azure.mgmt.monitor.v2019_10_17.models.AzureMonitorPrivateLinkScopePaged[~azure.mgmt.monitor.v2019_10_17.models.AzureMonitorPrivateLinkScope] + :raises: + :class:`ErrorResponseException` + """ + def prepare_request(next_link=None): + if not next_link: + # Construct URL + url = self.list_by_resource_group.metadata['url'] + path_format_arguments = { + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1) + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + return request + + def internal_paging(next_link=None): + request = prepare_request(next_link) + + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + raise models.ErrorResponseException(self._deserialize, response) + + return response + + # Deserialize response + header_dict = None + if raw: + header_dict = {} + deserialized = models.AzureMonitorPrivateLinkScopePaged(internal_paging, self._deserialize.dependencies, header_dict) + + return deserialized + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.insights/privateLinkScopes'} + + + def _delete_initial( + self, resource_group_name, scope_name, custom_headers=None, raw=False, **operation_config): + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + # Construct headers + header_parameters = {} + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200, 202, 204]: + raise models.ErrorResponseException(self._deserialize, response) + + if raw: + client_raw_response = ClientRawResponse(None, response) + return client_raw_response + + def delete( + self, resource_group_name, scope_name, custom_headers=None, raw=False, polling=True, **operation_config): + """Deletes a Azure Monitor PrivateLinkScope. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: The name of the Azure Monitor PrivateLinkScope + resource. + :type scope_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: The poller return type is ClientRawResponse, the + direct response alongside the deserialized response + :param polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :return: An instance of LROPoller that returns None or + ClientRawResponse if raw==True + :rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or + ~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]] + :raises: + :class:`ErrorResponseException` + """ + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + scope_name=scope_name, + custom_headers=custom_headers, + raw=True, + **operation_config + ) + + def get_long_running_output(response): + if raw: + client_raw_response = ClientRawResponse(None, response) + return client_raw_response + + lro_delay = operation_config.get( + 'long_running_operation_timeout', + self.config.long_running_operation_timeout) + if polling is True: polling_method = ARMPolling(lro_delay, **operation_config) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.insights/privateLinkScopes/{scopeName}'} + + def get( + self, resource_group_name, scope_name, custom_headers=None, raw=False, **operation_config): + """Returns a Azure Monitor PrivateLinkScope. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: The name of the Azure Monitor PrivateLinkScope + resource. + :type scope_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: AzureMonitorPrivateLinkScope or ClientRawResponse if raw=true + :rtype: + ~azure.mgmt.monitor.v2019_10_17.models.AzureMonitorPrivateLinkScope or + ~msrest.pipeline.ClientRawResponse + :raises: + :class:`ErrorResponseException` + """ + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + raise models.ErrorResponseException(self._deserialize, response) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('AzureMonitorPrivateLinkScope', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.insights/privateLinkScopes/{scopeName}'} + + def create_or_update( + self, resource_group_name, scope_name, location, tags=None, custom_headers=None, raw=False, **operation_config): + """Creates (or updates) a Azure Monitor PrivateLinkScope. Note: You cannot + specify a different value for InstrumentationKey nor AppId in the Put + operation. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: The name of the Azure Monitor PrivateLinkScope + resource. + :type scope_name: str + :param location: Resource location + :type location: str + :param tags: Resource tags + :type tags: dict[str, str] + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: AzureMonitorPrivateLinkScope or ClientRawResponse if raw=true + :rtype: + ~azure.mgmt.monitor.v2019_10_17.models.AzureMonitorPrivateLinkScope or + ~msrest.pipeline.ClientRawResponse + :raises: + :class:`ErrorResponseException` + """ + azure_monitor_private_link_scope_payload = models.AzureMonitorPrivateLinkScope(location=location, tags=tags) + + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(azure_monitor_private_link_scope_payload, 'AzureMonitorPrivateLinkScope') + + # Construct and send request + request = self._client.put(url, query_parameters, header_parameters, body_content) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + raise models.ErrorResponseException(self._deserialize, response) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('AzureMonitorPrivateLinkScope', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.insights/privateLinkScopes/{scopeName}'} + + def update_tags( + self, resource_group_name, scope_name, tags=None, custom_headers=None, raw=False, **operation_config): + """Updates an existing PrivateLinkScope's tags. To update other fields use + the CreateOrUpdate method. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param scope_name: The name of the Azure Monitor PrivateLinkScope + resource. + :type scope_name: str + :param tags: Resource tags + :type tags: dict[str, str] + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: AzureMonitorPrivateLinkScope or ClientRawResponse if raw=true + :rtype: + ~azure.mgmt.monitor.v2019_10_17.models.AzureMonitorPrivateLinkScope or + ~msrest.pipeline.ClientRawResponse + :raises: + :class:`ErrorResponseException` + """ + private_link_scope_tags = models.TagsResource(tags=tags) + + # Construct URL + url = self.update_tags.metadata['url'] + path_format_arguments = { + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1), + 'scopeName': self._serialize.url("scope_name", scope_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1) + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(private_link_scope_tags, 'TagsResource') + + # Construct and send request + request = self._client.patch(url, query_parameters, header_parameters, body_content) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + raise models.ErrorResponseException(self._deserialize, response) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('AzureMonitorPrivateLinkScope', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + update_tags.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.insights/privateLinkScopes/{scopeName}'} diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/version.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/version.py new file mode 100644 index 000000000000..663461d3c4c7 --- /dev/null +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/v2019_10_17/version.py @@ -0,0 +1,13 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +VERSION = "2019-10-17-preview" + diff --git a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/version.py b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/version.py index 981739e4ff95..e4f3d5055303 100644 --- a/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/version.py +++ b/sdk/monitor/azure-mgmt-monitor/azure/mgmt/monitor/version.py @@ -9,5 +9,5 @@ # regenerated. # -------------------------------------------------------------------------- -VERSION = "0.7.0" +VERSION = "0.8.0" diff --git a/sdk/monitor/azure-mgmt-monitor/setup.py b/sdk/monitor/azure-mgmt-monitor/setup.py index 505a9c4ece6d..23cbb6fe9a57 100644 --- a/sdk/monitor/azure-mgmt-monitor/setup.py +++ b/sdk/monitor/azure-mgmt-monitor/setup.py @@ -64,10 +64,10 @@ 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', 'License :: OSI Approved :: MIT License', ], zip_safe=False, diff --git a/sdk/rdbms/azure-mgmt-rdbms/tests/recordings/test_cli_mgmt_mariadb.test_mariadb.yaml b/sdk/rdbms/azure-mgmt-rdbms/tests/recordings/test_cli_mgmt_mariadb.test_mariadb.yaml new file mode 100644 index 000000000000..4bd5259e3f7a --- /dev/null +++ b/sdk/rdbms/azure-mgmt-rdbms/tests/recordings/test_cli_mgmt_mariadb.test_mariadb.yaml @@ -0,0 +1,4275 @@ +interactions: +- request: + body: '{"sku": {"name": "GP_Gen5_2", "tier": "GeneralPurpose", "capacity": 2, + "family": "Gen5"}, "properties": {"sslEnforcement": "Enabled", "storageProfile": + {"backupRetentionDays": 7, "geoRedundantBackup": "Enabled", "storageMB": 128000}, + "createMode": "Default", "administratorLogin": "cloudsa", "administratorLoginPassword": + "pass$w0rd"}, "location": "eastus", "tags": {"elastic_server": "1"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '390' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345?api-version=2018-06-01 + response: + body: + string: '{"operation":"UpsertElasticServer","startTime":"2020-02-21T02:23:04.167Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/85d57dbf-83c3-42eb-b8f5-e9f732e7de74?api-version=2018-06-01 + cache-control: + - no-cache + content-length: + - '74' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:23:03 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/operationResults/85d57dbf-83c3-42eb-b8f5-e9f732e7de74?api-version=2018-06-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/85d57dbf-83c3-42eb-b8f5-e9f732e7de74?api-version=2018-06-01 + response: + body: + string: '{"name":"85d57dbf-83c3-42eb-b8f5-e9f732e7de74","status":"Succeeded","startTime":"2020-02-21T02:23:04.167Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:24:05 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345?api-version=2018-06-01 + response: + body: + string: '{"sku":{"name":"GP_Gen5_2","tier":"GeneralPurpose","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Enabled","storageAutogrow":"Disabled"},"version":"10.2","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"testserver21345.mariadb.database.azure.com","earliestRestoreDate":"2020-02-21T02:33:04.527+00:00","replicationRole":"None","masterServerId":"","replicaCapacity":5,"byokEnforcement":"Disabled"},"location":"eastus","tags":{"elastic_server":"1"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345","name":"testserver21345","type":"Microsoft.DBforMariaDB/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '829' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:24:06 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: 'b''b\''{"properties": {"createMode": "Replica", "sourceServerId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345"}, + "location": "eastus"}\''''' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '251' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/serverreplica21345?api-version=2018-06-01 + response: + body: + string: '{"operation":"CreateElasticServerContinuousCopy","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + cache-control: + - no-cache + content-length: + - '88' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:24:22 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/operationResults/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1198' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:24:56 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:25:27 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:25:58 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:26:30 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:27:01 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:27:32 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:28:04 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:28:34 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:29:07 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:29:38 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:30:10 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:30:44 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:31:17 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:31:48 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:32:22 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:32:53 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:33:26 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:33:57 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:34:28 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:34:59 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:35:32 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:36:04 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:36:36 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:37:08 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:37:41 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:38:15 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:38:46 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:39:27 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:39:59 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:40:39 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:41:11 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:41:43 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:42:15 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:42:46 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:43:18 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:43:50 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:44:21 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:44:52 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:45:23 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:45:55 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:46:26 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:46:57 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:47:28 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"InProgress","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:48:00 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/fbfbd044-906b-46de-a64a-040e32ff9547?api-version=2018-06-01 + response: + body: + string: '{"name":"fbfbd044-906b-46de-a64a-040e32ff9547","status":"Succeeded","startTime":"2020-02-21T02:24:22.497Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:48:31 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/serverreplica21345?api-version=2018-06-01 + response: + body: + string: '{"sku":{"name":"GP_Gen5_2","tier":"GeneralPurpose","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Enabled","storageAutogrow":"Enabled"},"version":"10.2","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"serverreplica21345.mariadb.database.azure.com","earliestRestoreDate":"2020-02-21T02:51:37.327+00:00","replicationRole":"Replica","masterServerId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345","replicaCapacity":0,"byokEnforcement":"Disabled"},"location":"eastus","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/serverreplica21345","name":"serverreplica21345","type":"Microsoft.DBforMariaDB/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '976' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:48:33 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: 'b''b\''{"sku": {"name": "GP_Gen5_2", "tier": "GeneralPurpose", "capacity": + 2, "family": "Gen5"}, "properties": {"createMode": "PointInTimeRestore", "sourceServerId": + "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345", + "restorePointInTime": "2020-02-21T02:48:33.082057Z"}, "location": "eastus", + "tags": {"elastic_server": "1"}}\''''' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '437' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/serverpoint21345?api-version=2018-06-01 + response: + body: + string: '{"operation":"RestoreElasticServer","startTime":"2020-02-21T02:48:41.96Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/83472f54-ccc2-4928-9f99-963a5553c9f1?api-version=2018-06-01 + cache-control: + - no-cache + content-length: + - '74' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:48:41 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/operationResults/83472f54-ccc2-4928-9f99-963a5553c9f1?api-version=2018-06-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/83472f54-ccc2-4928-9f99-963a5553c9f1?api-version=2018-06-01 + response: + body: + string: '{"name":"83472f54-ccc2-4928-9f99-963a5553c9f1","status":"InProgress","startTime":"2020-02-21T02:48:41.96Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:48:53 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/83472f54-ccc2-4928-9f99-963a5553c9f1?api-version=2018-06-01 + response: + body: + string: '{"name":"83472f54-ccc2-4928-9f99-963a5553c9f1","status":"InProgress","startTime":"2020-02-21T02:48:41.96Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:49:07 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/83472f54-ccc2-4928-9f99-963a5553c9f1?api-version=2018-06-01 + response: + body: + string: '{"name":"83472f54-ccc2-4928-9f99-963a5553c9f1","status":"InProgress","startTime":"2020-02-21T02:48:41.96Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:49:18 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/83472f54-ccc2-4928-9f99-963a5553c9f1?api-version=2018-06-01 + response: + body: + string: '{"name":"83472f54-ccc2-4928-9f99-963a5553c9f1","status":"InProgress","startTime":"2020-02-21T02:48:41.96Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:49:30 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/83472f54-ccc2-4928-9f99-963a5553c9f1?api-version=2018-06-01 + response: + body: + string: '{"name":"83472f54-ccc2-4928-9f99-963a5553c9f1","status":"InProgress","startTime":"2020-02-21T02:48:41.96Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:49:41 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/83472f54-ccc2-4928-9f99-963a5553c9f1?api-version=2018-06-01 + response: + body: + string: '{"name":"83472f54-ccc2-4928-9f99-963a5553c9f1","status":"InProgress","startTime":"2020-02-21T02:48:41.96Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:49:52 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/83472f54-ccc2-4928-9f99-963a5553c9f1?api-version=2018-06-01 + response: + body: + string: '{"name":"83472f54-ccc2-4928-9f99-963a5553c9f1","status":"InProgress","startTime":"2020-02-21T02:48:41.96Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:50:03 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/83472f54-ccc2-4928-9f99-963a5553c9f1?api-version=2018-06-01 + response: + body: + string: '{"name":"83472f54-ccc2-4928-9f99-963a5553c9f1","status":"Succeeded","startTime":"2020-02-21T02:48:41.96Z"}' + headers: + cache-control: + - no-cache + content-length: + - '106' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:50:13 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/serverpoint21345?api-version=2018-06-01 + response: + body: + string: '{"sku":{"name":"GP_Gen5_2","tier":"GeneralPurpose","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Enabled","storageAutogrow":"Disabled"},"version":"10.2","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"serverpoint21345.mariadb.database.azure.com","earliestRestoreDate":"2020-02-21T02:58:42.333+00:00","replicationRole":"None","masterServerId":"","replicaCapacity":5,"byokEnforcement":"Disabled"},"location":"eastus","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/serverpoint21345","name":"serverpoint21345","type":"Microsoft.DBforMariaDB/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '802' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:50:14 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"charset": "{''properties'': {''charset'': ''utf8'', ''collation'': + ''utf8_general_ci''}}"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '98' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/databases/testdatabase21345?api-version=2018-06-01 + response: + body: + string: '{"operation":"UpsertElasticServerDatabase","startTime":"2020-02-21T02:50:15.867Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/3c5d8d56-0c60-4bf6-9f9e-6ab4a0b6c338?api-version=2018-06-01 + cache-control: + - no-cache + content-length: + - '82' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:50:15 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/operationResults/3c5d8d56-0c60-4bf6-9f9e-6ab4a0b6c338?api-version=2018-06-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1197' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/3c5d8d56-0c60-4bf6-9f9e-6ab4a0b6c338?api-version=2018-06-01 + response: + body: + string: '{"name":"3c5d8d56-0c60-4bf6-9f9e-6ab4a0b6c338","status":"Succeeded","startTime":"2020-02-21T02:50:15.867Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:50:31 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/databases/testdatabase21345?api-version=2018-06-01 + response: + body: + string: '{"properties":{"charset":"latin1","collation":"latin1_swedish_ci"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/databases/testdatabase21345","name":"testdatabase21345","type":"Microsoft.DBforMariaDB/servers/databases"}' + headers: + cache-control: + - no-cache + content-length: + - '346' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:50:33 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"startIpAddress": "0.0.0.0", "endIpAddress": "255.255.255.255"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '80' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/firewallRules/firewallrule?api-version=2018-06-01 + response: + body: + string: '{"operation":"UpsertElasticServerFirewallRules","startTime":"2020-02-21T02:50:33.993Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/d3f40931-c0f1-4a3c-be17-d2c4cf54f9d6?api-version=2018-06-01 + cache-control: + - no-cache + content-length: + - '87' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:50:33 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/operationResults/d3f40931-c0f1-4a3c-be17-d2c4cf54f9d6?api-version=2018-06-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1196' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/d3f40931-c0f1-4a3c-be17-d2c4cf54f9d6?api-version=2018-06-01 + response: + body: + string: '{"name":"d3f40931-c0f1-4a3c-be17-d2c4cf54f9d6","status":"Succeeded","startTime":"2020-02-21T02:50:33.993Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:50:49 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/firewallRules/firewallrule?api-version=2018-06-01 + response: + body: + string: '{"properties":{"startIpAddress":"0.0.0.0","endIpAddress":"255.255.255.255"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/firewallRules/firewallrule","name":"firewallrule","type":"Microsoft.DBforMariaDB/servers/firewallRules"}' + headers: + cache-control: + - no-cache + content-length: + - '353' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:50:50 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"state": "Enabled"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '36' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/securityAlertPolicies/Default?api-version=2018-06-01 + response: + body: + string: '{"operation":"UpsertServerThreatDetectionPolicy","startTime":"2020-02-21T02:50:52.33Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/East%20US/securityAlertPoliciesAzureAsyncOperation/0bdcef78-af4d-43ec-b060-9b41b209939b?api-version=2018-06-01 + cache-control: + - no-cache + content-length: + - '87' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:50:51 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/East%20US/securityAlertPoliciesOperationResults/0bdcef78-af4d-43ec-b060-9b41b209939b?api-version=2018-06-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1198' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/East%20US/securityAlertPoliciesAzureAsyncOperation/0bdcef78-af4d-43ec-b060-9b41b209939b?api-version=2018-06-01 + response: + body: + string: '{"name":"0bdcef78-af4d-43ec-b060-9b41b209939b","status":"Succeeded","startTime":"2020-02-21T02:50:52.33Z"}' + headers: + cache-control: + - no-cache + content-length: + - '106' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:50:55 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/securityAlertPolicies/Default?api-version=2018-06-01 + response: + body: + string: '{"properties":{"state":"Enabled","disabledAlerts":[""],"emailAddresses":[""],"emailAccountAdmins":false,"storageEndpoint":"","storageAccountAccessKey":"","retentionDays":0,"creationTime":"2020-02-21T02:50:52.47Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/securityAlertPolicies/Default","name":"Default","type":"Microsoft.DBforMariaDB/servers/securityAlertPolicies"}' + headers: + cache-control: + - no-cache + content-length: + - '497' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:50:59 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"state": "Disabled"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '37' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/securityAlertPolicies/Default?api-version=2018-06-01 + response: + body: + string: '{"operation":"UpsertServerThreatDetectionPolicy","startTime":"2020-02-21T02:51:01.88Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/East%20US/securityAlertPoliciesAzureAsyncOperation/1f1b98f8-41c2-4140-a68e-2758a8aa50f7?api-version=2018-06-01 + cache-control: + - no-cache + content-length: + - '87' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:51:01 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/East%20US/securityAlertPoliciesOperationResults/1f1b98f8-41c2-4140-a68e-2758a8aa50f7?api-version=2018-06-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/East%20US/securityAlertPoliciesAzureAsyncOperation/1f1b98f8-41c2-4140-a68e-2758a8aa50f7?api-version=2018-06-01 + response: + body: + string: '{"name":"1f1b98f8-41c2-4140-a68e-2758a8aa50f7","status":"Succeeded","startTime":"2020-02-21T02:51:01.88Z"}' + headers: + cache-control: + - no-cache + content-length: + - '106' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:51:06 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/securityAlertPolicies/Default?api-version=2018-06-01 + response: + body: + string: '{"properties":{"state":"Disabled","disabledAlerts":[""],"emailAddresses":[""],"emailAccountAdmins":false,"storageEndpoint":"","storageAccountAccessKey":"","retentionDays":0,"creationTime":"2020-02-21T02:50:52.47Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/securityAlertPolicies/Default","name":"Default","type":"Microsoft.DBforMariaDB/servers/securityAlertPolicies"}' + headers: + cache-control: + - no-cache + content-length: + - '498' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:51:10 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/securityAlertPolicies/Default?api-version=2018-06-01 + response: + body: + string: '{"properties":{"state":"Disabled","disabledAlerts":[""],"emailAddresses":[""],"emailAccountAdmins":false,"storageEndpoint":"","storageAccountAccessKey":"","retentionDays":0,"creationTime":"2020-02-21T02:50:52.47Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/securityAlertPolicies/Default","name":"Default","type":"Microsoft.DBforMariaDB/servers/securityAlertPolicies"}' + headers: + cache-control: + - no-cache + content-length: + - '498' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:51:11 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/firewallRules/firewallrule?api-version=2018-06-01 + response: + body: + string: '{"properties":{"startIpAddress":"0.0.0.0","endIpAddress":"255.255.255.255"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/firewallRules/firewallrule","name":"firewallrule","type":"Microsoft.DBforMariaDB/servers/firewallRules"}' + headers: + cache-control: + - no-cache + content-length: + - '353' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:51:15 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/databases/testdatabase21345?api-version=2018-06-01 + response: + body: + string: '{"properties":{"charset":"latin1","collation":"latin1_swedish_ci"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/databases/testdatabase21345","name":"testdatabase21345","type":"Microsoft.DBforMariaDB/servers/databases"}' + headers: + cache-control: + - no-cache + content-length: + - '346' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:51:17 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345?api-version=2018-06-01 + response: + body: + string: '{"sku":{"name":"GP_Gen5_2","tier":"GeneralPurpose","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Enabled","storageAutogrow":"Disabled"},"version":"10.2","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"testserver21345.mariadb.database.azure.com","earliestRestoreDate":"2020-02-21T02:33:04.527+00:00","replicationRole":"Master","masterServerId":"","replicaCapacity":5,"byokEnforcement":"Disabled"},"location":"eastus","tags":{"elastic_server":"1"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345","name":"testserver21345","type":"Microsoft.DBforMariaDB/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '831' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:51:17 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/providers/Microsoft.DBforMariaDB/operations?api-version=2018-06-01 + response: + body: + string: '{"value":[{"name":"Microsoft.DBforMariaDB/servers/keys/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB Server Keys","operation":"List/Get + Azure Database for MariaDB Server Key(s)","description":"Return the list of + server keys or gets the properties for the specified server key."}},{"name":"Microsoft.DBforMariaDB/servers/keys/write","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB Server Keys","operation":"Create/Update + Azure Database for MariaDB Server Keys","description":"Creates a key with + the specified parameters or update the properties or tags for the specified + server key."}},{"name":"Microsoft.DBforMariaDB/servers/keys/delete","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB Server Keys","operation":"Delete + Azure Database for MariaDB Server Key","description":"Deletes an existing + server key."}},{"name":"Microsoft.DBforMariaDB/locations/serverKeyAzureAsyncOperation/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Transparent Data Encryption server key operation","operation":"Transparent + Data Encryption server keys operation","description":"Gets in-progress operations + on transparent data encryption server keys"}},{"name":"Microsoft.DBforMariaDB/locations/serverKeyOperationResults/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Transparent Data Encryption server key operation","operation":"Transparent + Data Encryption server keys operation","description":"Gets in-progress operations + on transparent data encryption server keys"}},{"name":"Microsoft.DBforMariaDB/locations/performanceTiers/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Performance Tiers","operation":"List Performance + Tiers","description":"Returns the list of Performance Tiers available."}},{"name":"Microsoft.DBforMariaDB/servers/recoverableServers/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Recoverable MariaDB Server","operation":"Get Recoverable + MariaDB Server info","description":"Return the recoverable MariaDB Server + info"}},{"name":"Microsoft.DBforMariaDB/servers/replicas/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Server","operation":"Get MariaDB read + replicas","description":"Get read replicas of a MariaDB server"}},{"name":"Microsoft.DBforMariaDB/locations/operationResults/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB ResourceGroup based Server Operation Results","operation":"Get + MariaDB ResourceGroup based Server Operation Results ","description":"Return + ResourceGroup based MariaDB Server Operation Results"}},{"name":"Microsoft.DBforMariaDB/servers/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Server","operation":"List/Get MariaDB + Servers","description":"Return the list of servers or gets the properties + for the specified server."}},{"name":"Microsoft.DBforMariaDB/servers/write","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Server","operation":"Create/Update MariaDB + Server","description":"Creates a server with the specified parameters or update + the properties or tags for the specified server."}},{"name":"Microsoft.DBforMariaDB/servers/delete","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Server","operation":"Delete MariaDB Server","description":"Deletes + an existing server."}},{"name":"Microsoft.DBforMariaDB/locations/operationResults/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Server Operation Results","operation":"Get + MariaDB Server Operation Results","description":"Return MariaDB Server Operation + Results"}},{"name":"Microsoft.DBforMariaDB/servers/restart/action","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Server","operation":"Restart MariaDB Server","description":"Restarts + a specific server."}},{"name":"Microsoft.DBforMariaDB/locations/securityAlertPoliciesAzureAsyncOperation/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Server threat detection operation result","operation":"List/Get + Server threat detection operation result.","description":"Return the list + of Server threat detection operation result."}},{"name":"Microsoft.DBforMariaDB/locations/securityAlertPoliciesOperationResults/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Server threat detection operation result","operation":"List/Get + Server threat detection operation result.","description":"Return the list + of Server threat detection operation result."}},{"name":"Microsoft.DBforMariaDB/servers/securityAlertPolicies/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Server Threat Detection Policy","operation":"Get + server threat detection policy","description":"Retrieve details of the server + threat detection policy configured on a given server"}},{"name":"Microsoft.DBforMariaDB/servers/securityAlertPolicies/write","display":{"provider":"Microsoft + DB for MariaDB","resource":"Server Threat Detection Policy","operation":"Update + server threat detection policy","description":"Change the server threat detection + policy for a given server"}},{"name":"Microsoft.DBforMariaDB/servers/administrators/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Administrator of MariaDB server.","operation":"Get + Administrators of MariaDB server.","description":"Gets a list of MariaDB server + administrators."}},{"name":"Microsoft.DBforMariaDB/servers/administrators/write","display":{"provider":"Microsoft + DB for MariaDB","resource":"Administrator of MariaDB server.","operation":"Create/Update + Administrator of MariaDB server.","description":"Creates or updates MariaDB + server administrator with the specified parameters."}},{"name":"Microsoft.DBforMariaDB/servers/administrators/delete","display":{"provider":"Microsoft + DB for MariaDB","resource":"Administrator of MariaDB server.","operation":"Delete + Administrator of MariaDB server.","description":"Deletes an existing administrator + of MariaDB server."}},{"name":"Microsoft.DBforMariaDB/servers/advisors/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Advisors","operation":"Return the list of advisors","description":"Return + the list of advisors"}},{"name":"Microsoft.DBforMariaDB/servers/advisors/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Advisors","operation":"Return an advisor","description":"Return + an advisor"}},{"name":"Microsoft.DBforMariaDB/servers/advisors/recommendedActions/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Recommended Actions","operation":"Return the list + of recommended actions","description":"Return the list of recommended actions"}},{"name":"Microsoft.DBforMariaDB/servers/advisors/recommendedActions/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Recommended Actions","operation":"Return the list + of recommended actions","description":"Return the list of recommended actions"}},{"name":"Microsoft.DBforMariaDB/servers/advisors/recommendedActions/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Recommended Actions","operation":"Return a recommended + action","description":"Return a recommended action"}},{"name":"Microsoft.DBforMariaDB/servers/advisors/createRecommendedActionSession/action","display":{"provider":"Microsoft + DB for MariaDB","resource":"Recommended Actions","operation":"Create a new + recommendation action session","description":"Create a new recommendation + action session"}},{"name":"Microsoft.DBforMariaDB/servers/queryTexts/action","display":{"provider":"Microsoft + DB for MariaDB","resource":"Query Texts","operation":"List query texts for + a list of queries","description":"Return the texts for a list of queries"}},{"name":"Microsoft.DBforMariaDB/servers/queryTexts/action","display":{"provider":"Microsoft + DB for MariaDB","resource":"Query Texts","operation":"Return the text of a + query","description":"Return the text of a query"}},{"name":"Microsoft.DBforMariaDB/servers/topQueryStatistics/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Top Query Statistics","operation":"List/Get Query + Statistic(s) for top queries","description":"Return the list of Query Statistics + for the top queries."}},{"name":"Microsoft.DBforMariaDB/servers/topQueryStatistics/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Top Query Statistics","operation":"Get a Query + Statistic","description":"Return a Query Statistic"}},{"name":"Microsoft.DBforMariaDB/servers/waitStatistics/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Wait Statistics","operation":"List Wait Statistics + for an instance","description":"Return wait statistics for an instance"}},{"name":"Microsoft.DBforMariaDB/servers/waitStatistics/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Wait Statistics","operation":"Return a wait statistic","description":"Return + a wait statistic"}},{"name":"Microsoft.DBforMariaDB/servers/privateLinkResources/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB private link resource","operation":"Get + the private link resources for the corresponding MariaDB Server","description":"Get + the private link resources for the corresponding MariaDB Server"}},{"name":"Microsoft.DBforMariaDB/servers/privateEndpointConnections/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB private endpoint connection","operation":"List/Get + Azure Database for MariaDB private endpoint connection","description":"Returns + the list of private endpoint connections or gets the properties for the specified + private endpoint connection."}},{"name":"Microsoft.DBforMariaDB/servers/privateEndpointConnections/delete","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB private endpoint connection","operation":"Delete + Azure Database for MariaDB private endpoint connection","description":"Deletes + an existing private endpoint connection"}},{"name":"Microsoft.DBforMariaDB/servers/privateEndpointConnections/write","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB private endpoint connection","operation":"Approve + or Reject Azure Database for MariaDB private endpoint connection","description":"Approves + or rejects an existing private endpoint connection"}},{"name":"Microsoft.DBforMariaDB/locations/privateEndpointConnectionOperationResults/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB private endpoint connection","operation":"Get + private endpoint connection operation status","description":"Gets the result + for a private endpoint connection operation"}},{"name":"Microsoft.DBforMariaDB/locations/privateEndpointConnectionAzureAsyncOperation/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB private endpoint connection","operation":"Get + private endpoint connection operation status","description":"Gets the result + for a private endpoint connection operation"}},{"name":"Microsoft.DBforMariaDB/locations/privateEndpointConnectionProxyOperationResults/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB Private Endpoint Connection + Proxy","operation":"Get private endpoint connection proxy operation status","description":"Gets + the result for a private endpoint connection proxy operation"}},{"name":"Microsoft.DBforMariaDB/servers/privateEndpointConnectionProxies/validate/action","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB Private Endpoint Connection + Proxy","operation":"Validate Azure Database for MariaDB Private Endpoint Connection + Creation by NRP","description":"Validates a private endpoint connection create + call from NRP side"}},{"name":"Microsoft.DBforMariaDB/servers/privateEndpointConnectionProxies/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB Private Endpoint Connection + Proxy","operation":"List/Get Azure Database for MariaDB Private Endpoint Connection + Proxy","description":"Returns the list of private endpoint connection proxies + or gets the properties for the specified private endpoint connection proxy."}},{"name":"Microsoft.DBforMariaDB/servers/privateEndpointConnectionProxies/write","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB Private Endpoint Connection + Proxy","operation":"Create/Update Azure Database for MariaDB Private Endpoint + Connection Proxy","description":"Creates a private endpoint connection proxy + with the specified parameters or updates the properties or tags for the specified + private endpoint connection proxy."}},{"name":"Microsoft.DBforMariaDB/servers/privateEndpointConnectionProxies/delete","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB Private Endpoint Connection + Proxy","operation":"Delete Azure Database for MariaDB Private Endpoint Connection + Proxy","description":"Deletes an existing private endpoint connection proxy"}},{"name":"Microsoft.DBforMariaDB/locations/privateEndpointConnectionProxyAzureAsyncOperation/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Azure Database for MariaDB Private Endpoint Connection + Proxy","operation":"Get private endpoint connection proxy operation status","description":"Gets + the result for a private endpoint connection proxy operation"}},{"name":"Microsoft.DBforMariaDB/register/action","display":{"provider":"Microsoft + DB for MariaDB","resource":"Microsoft Database For MariaDB Resource Provider","operation":"Register + MariaDB Resource Provider","description":"Register MariaDB Resource Provider"}},{"name":"Microsoft.DBforMariaDB/servers/updateConfigurations/action","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Server","operation":"Batch Update Server + Configurations","description":"Update configurations for the specified server"}},{"name":"Microsoft.DBforMariaDB/checkNameAvailability/action","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Server","operation":"Check Server Name + Availability","description":"Verify whether given server name is available + for provisioning worldwide for a given subscription."}},{"name":"Microsoft.DBforMariaDB/servers/configurations/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Configurations","operation":"List/Get Configurations","description":"Return + the list of configurations for a server or gets the properties for the specified + configuration."}},{"name":"Microsoft.DBforMariaDB/servers/configurations/write","display":{"provider":"Microsoft + DB for MariaDB","resource":"Configurations","operation":"Update Configuration","description":"Update + the value for the specified configuration"}},{"name":"Microsoft.DBforMariaDB/servers/logFiles/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB LogFiles","operation":"List/Get MySQL + LogFiles","description":"Return the list of MariaDB LogFiles."}},{"name":"Microsoft.DBforMariaDB/servers/virtualNetworkRules/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Virtual Network Rules","operation":"List/Get Virtual + Network Rule(s)","description":"Return the list of virtual network rules or + gets the properties for the specified virtual network rule."}},{"name":"Microsoft.DBforMariaDB/servers/virtualNetworkRules/write","display":{"provider":"Microsoft + DB for MariaDB","resource":"Virtual Network Rules","operation":"Create/Update + Virtual Network Rule","description":"Creates a virtual network rule with the + specified parameters or update the properties or tags for the specified virtual + network rule."}},{"name":"Microsoft.DBforMariaDB/servers/virtualNetworkRules/delete","display":{"provider":"Microsoft + DB for MariaDB","resource":"Virtual Network Rules","operation":"Delete Virtual + Network Rule","description":"Deletes an existing Virtual Network Rule"}},{"name":"Microsoft.DBforMariaDB/locations/azureAsyncOperation/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Server Operation Results","operation":"Get + MariaDB Server Operation Results","description":"Return MariaDB Server Operation + Results"}},{"name":"Microsoft.DBforMariaDB/servers/databases/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Databases","operation":"List/Get MySQL + Database","description":"Return the list of MariaDB Databases or gets the + properties for the specified Database."}},{"name":"Microsoft.DBforMariaDB/servers/databases/write","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Databases","operation":"Create/Update + MariaDB Database","description":"Creates a MariaDB Database with the specified + parameters or update the properties for the specified Database."}},{"name":"Microsoft.DBforMariaDB/servers/databases/delete","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Databases","operation":"Delete MariaDB + Database","description":"Deletes an existing MariaDB Database."}},{"name":"Microsoft.DBforMariaDB/servers/firewallRules/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Firewall Rules","operation":"List/Get Firewall + Rules","description":"Return the list of firewall rules for a server or gets + the properties for the specified firewall rule."}},{"name":"Microsoft.DBforMariaDB/servers/firewallRules/write","display":{"provider":"Microsoft + DB for MariaDB","resource":"Firewall Rules","operation":"Create/Update Firewall + Rule","description":"Creates a firewall rule with the specified parameters + or update an existing rule."}},{"name":"Microsoft.DBforMariaDB/servers/firewallRules/delete","display":{"provider":"Microsoft + DB for MariaDB","resource":"Firewall Rules","operation":"Delete Firewall Rule","description":"Deletes + an existing firewall rule."}},{"name":"Microsoft.DBforMariaDB/performanceTiers/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Performance Tiers","operation":"List Performance + Tiers","description":"Returns the list of Performance Tiers available."}},{"name":"Microsoft.DBforMariaDB/operations/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"MariaDB Operations","operation":"List/Get MariaDB + Operations","description":"Return the list of MariaDB Operations."}},{"name":"Microsoft.DBforMariaDB/servers/providers/Microsoft.Insights/metricDefinitions/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Database Metric Definition","operation":"Get database + metric definitions","description":"Return types of metrics that are available + for databases"},"properties":{"serviceSpecification":{"metricSpecifications":[{"name":"cpu_percent","displayName":"CPU + percent","displayDescription":"CPU percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"memory_percent","displayName":"Memory + percent","displayDescription":"Memory percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"io_consumption_percent","displayName":"IO + percent","displayDescription":"IO percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"storage_percent","displayName":"Storage + percent","displayDescription":"Storage percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"storage_used","displayName":"Storage + used","displayDescription":"Storage used","unit":"Bytes","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"storage_limit","displayName":"Storage + limit","displayDescription":"Storage limit","unit":"Bytes","aggregationType":"Maximum","supportedAggregationTypes":["Maximum"],"fillGapWithZero":true},{"name":"serverlog_storage_percent","displayName":"Server + Log storage percent","displayDescription":"Server Log storage percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"serverlog_storage_usage","displayName":"Server + Log storage used","displayDescription":"Server Log storage used","unit":"Bytes","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"serverlog_storage_limit","displayName":"Server + Log storage limit","displayDescription":"Server Log storage limit","unit":"Bytes","aggregationType":"Average","fillGapWithZero":true},{"name":"active_connections","displayName":"Active + Connections","displayDescription":"Active Connections","unit":"Count","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"connections_failed","displayName":"Failed + Connections","displayDescription":"Failed Connections","unit":"Count","aggregationType":"Total","supportedAggregationTypes":["Total"],"fillGapWithZero":true},{"name":"seconds_behind_master","displayName":"Replication + lag in seconds","displayDescription":"Replication lag in seconds","unit":"Count","aggregationType":"Maximum","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"backup_storage_used","displayName":"Backup + Storage used","displayDescription":"Backup Storage used","unit":"Bytes","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"supportedTimeGrainTypes":["PT15M","PT30M","PT1H","PT6H","PT12H","P1D"],"fillGapWithZero":true},{"name":"network_bytes_egress","displayName":"Network + Out","displayDescription":"Network Out across active connections","unit":"Bytes","aggregationType":"Total","supportedAggregationTypes":["Total"],"fillGapWithZero":true},{"name":"network_bytes_ingress","displayName":"Network + In","displayDescription":"Network In across active connections","unit":"Bytes","aggregationType":"Total","supportedAggregationTypes":["Total"],"fillGapWithZero":true}]}}},{"name":"Microsoft.DBforMariaDB/servers/providers/Microsoft.Insights/logDefinitions/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"The log definition of servers","operation":"Read + the log definitions","description":"Gets the available logs for MariaDB servers"},"properties":{"serviceSpecification":{"logSpecifications":[{"name":"MySqlSlowLogs","displayName":"MariaDB + Server Logs","blobDuration":"PT1H"},{"name":"MySqlAuditLogs","displayName":"MariaDB + Audit Logs","blobDuration":"PT1H"}]}}},{"name":"Microsoft.DBforMariaDB/servers/providers/Microsoft.Insights/diagnosticSettings/read","display":{"provider":"Microsoft + DB for MariaDB","resource":"Database Metric Definition","operation":"Read + diagnostic setting","description":"Gets the disagnostic setting for the resource"}},{"name":"Microsoft.DBforMariaDB/servers/providers/Microsoft.Insights/diagnosticSettings/write","display":{"provider":"Microsoft + DB for MariaDB","resource":"Database Metric Definition","operation":"Write + diagnostic setting","description":"Creates or updates the diagnostic setting + for the resource"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '23303' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:51:19 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/restart?api-version=2018-06-01 + response: + body: + string: '{"operation":"RestartElasticServer","startTime":"2020-02-21T02:51:20.753Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/173aa2fc-20c3-4b80-ba82-daacfb229b47?api-version=2018-06-01 + cache-control: + - no-cache + content-length: + - '75' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:51:20 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/operationResults/173aa2fc-20c3-4b80-ba82-daacfb229b47?api-version=2018-06-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/173aa2fc-20c3-4b80-ba82-daacfb229b47?api-version=2018-06-01 + response: + body: + string: '{"name":"173aa2fc-20c3-4b80-ba82-daacfb229b47","status":"InProgress","startTime":"2020-02-21T02:51:20.753Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:51:36 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/173aa2fc-20c3-4b80-ba82-daacfb229b47?api-version=2018-06-01 + response: + body: + string: '{"name":"173aa2fc-20c3-4b80-ba82-daacfb229b47","status":"InProgress","startTime":"2020-02-21T02:51:20.753Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:51:52 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/173aa2fc-20c3-4b80-ba82-daacfb229b47?api-version=2018-06-01 + response: + body: + string: '{"name":"173aa2fc-20c3-4b80-ba82-daacfb229b47","status":"InProgress","startTime":"2020-02-21T02:51:20.753Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:52:09 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/173aa2fc-20c3-4b80-ba82-daacfb229b47?api-version=2018-06-01 + response: + body: + string: '{"name":"173aa2fc-20c3-4b80-ba82-daacfb229b47","status":"Succeeded","startTime":"2020-02-21T02:51:20.753Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:52:25 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '2' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PATCH + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345?api-version=2018-06-01 + response: + body: + string: '{"operation":"UpsertElasticServer","startTime":"2020-02-21T02:52:27.347Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/2a439c31-f4ad-4c44-af70-028ae596a415?api-version=2018-06-01 + cache-control: + - no-cache + content-length: + - '74' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:52:27 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/operationResults/2a439c31-f4ad-4c44-af70-028ae596a415?api-version=2018-06-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1197' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/2a439c31-f4ad-4c44-af70-028ae596a415?api-version=2018-06-01 + response: + body: + string: '{"name":"2a439c31-f4ad-4c44-af70-028ae596a415","status":"Succeeded","startTime":"2020-02-21T02:52:27.347Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:53:28 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345?api-version=2018-06-01 + response: + body: + string: '{"sku":{"name":"GP_Gen5_2","tier":"GeneralPurpose","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Enabled","storageAutogrow":"Disabled"},"version":"10.2","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"testserver21345.mariadb.database.azure.com","earliestRestoreDate":"2020-02-21T02:33:04.527+00:00","replicationRole":"Master","masterServerId":"","replicaCapacity":5,"byokEnforcement":"Disabled"},"location":"eastus","tags":{"elastic_server":"1"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345","name":"testserver21345","type":"Microsoft.DBforMariaDB/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '831' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:53:30 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"name": "name1", "type": "Microsoft.DBforMariaDB"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '51' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/checkNameAvailability?api-version=2018-06-01 + response: + body: + string: '{"nameAvailable":false,"reason":"AlreadyExists","message":"Specified + server name ''{0}'' is already used. Please use a different name and try again."}' + headers: + cache-control: + - no-cache + content-length: + - '148' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:53:33 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/firewallRules/firewallrule?api-version=2018-06-01 + response: + body: + string: '{"operation":"DropElasticServerFirewallRule","startTime":"2020-02-21T02:53:34.783Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/57fa26a0-c923-4613-802a-3a96a374a326?api-version=2018-06-01 + cache-control: + - no-cache + content-length: + - '84' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:53:34 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/operationResults/57fa26a0-c923-4613-802a-3a96a374a326?api-version=2018-06-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14999' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/57fa26a0-c923-4613-802a-3a96a374a326?api-version=2018-06-01 + response: + body: + string: '{"name":"57fa26a0-c923-4613-802a-3a96a374a326","status":"Succeeded","startTime":"2020-02-21T02:53:34.783Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:53:50 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345/databases/testdatabase21345?api-version=2018-06-01 + response: + body: + string: '{"operation":"DropElasticServerDatabase","startTime":"2020-02-21T02:53:58.4Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/581385e3-4d76-48b8-8038-597b1a99ad39?api-version=2018-06-01 + cache-control: + - no-cache + content-length: + - '78' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:53:57 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/operationResults/581385e3-4d76-48b8-8038-597b1a99ad39?api-version=2018-06-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14999' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/581385e3-4d76-48b8-8038-597b1a99ad39?api-version=2018-06-01 + response: + body: + string: '{"name":"581385e3-4d76-48b8-8038-597b1a99ad39","status":"Succeeded","startTime":"2020-02-21T02:53:58.4Z"}' + headers: + cache-control: + - no-cache + content-length: + - '105' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:54:14 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mariadb_test_mariadbf2c70db8/providers/Microsoft.DBforMariaDB/servers/testserver21345?api-version=2018-06-01 + response: + body: + string: '{"operation":"DropElasticServer","startTime":"2020-02-21T02:54:17.04Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/018f3d0f-acae-483f-9860-34a026ee9ab6?api-version=2018-06-01 + cache-control: + - no-cache + content-length: + - '71' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:54:16 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/operationResults/018f3d0f-acae-483f-9860-34a026ee9ab6?api-version=2018-06-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14999' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2018-06-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMariaDB/locations/eastus/azureAsyncOperation/018f3d0f-acae-483f-9860-34a026ee9ab6?api-version=2018-06-01 + response: + body: + string: '{"name":"018f3d0f-acae-483f-9860-34a026ee9ab6","status":"Succeeded","startTime":"2020-02-21T02:54:17.04Z"}' + headers: + cache-control: + - no-cache + content-length: + - '106' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 21 Feb 2020 02:54:32 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/rdbms/azure-mgmt-rdbms/tests/recordings/test_cli_mgmt_mysql.test_mysql.yaml b/sdk/rdbms/azure-mgmt-rdbms/tests/recordings/test_cli_mgmt_mysql.test_mysql.yaml new file mode 100644 index 000000000000..90daab294b3a --- /dev/null +++ b/sdk/rdbms/azure-mgmt-rdbms/tests/recordings/test_cli_mgmt_mysql.test_mysql.yaml @@ -0,0 +1,3454 @@ +interactions: +- request: + body: '{"sku": {"name": "GP_Gen5_2", "tier": "GeneralPurpose", "capacity": 2, + "family": "Gen5"}, "properties": {"sslEnforcement": "Enabled", "storageProfile": + {"backupRetentionDays": 7, "geoRedundantBackup": "Enabled", "storageMB": 128000}, + "createMode": "Default", "administratorLogin": "cloudsa", "administratorLoginPassword": + "pass$w0rd"}, "location": "eastus", "tags": {"elastic_server": "1"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '390' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134?api-version=2017-12-01 + response: + body: + string: '{"operation":"UpsertElasticServer","startTime":"2020-02-20T06:10:45.183Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/10cee2ac-f137-4c6f-b3bf-c757ec400859?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '74' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:10:44 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/operationResults/10cee2ac-f137-4c6f-b3bf-c757ec400859?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1194' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/10cee2ac-f137-4c6f-b3bf-c757ec400859?api-version=2017-12-01 + response: + body: + string: '{"name":"10cee2ac-f137-4c6f-b3bf-c757ec400859","status":"InProgress","startTime":"2020-02-20T06:10:45.183Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:11:46 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/10cee2ac-f137-4c6f-b3bf-c757ec400859?api-version=2017-12-01 + response: + body: + string: '{"name":"10cee2ac-f137-4c6f-b3bf-c757ec400859","status":"Succeeded","startTime":"2020-02-20T06:10:45.183Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:12:48 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134?api-version=2017-12-01 + response: + body: + string: '{"sku":{"name":"GP_Gen5_2","tier":"GeneralPurpose","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Enabled","storageAutogrow":"Disabled"},"version":"5.7","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"testserver2134.mysql.database.azure.com","earliestRestoreDate":"2020-02-20T06:20:45.513+00:00","replicationRole":"None","masterServerId":"","replicaCapacity":5,"byokEnforcement":"Disabled"},"location":"eastus","tags":{"elastic_server":"1"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134","name":"testserver2134","type":"Microsoft.DBforMySQL/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '815' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:12:51 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: 'b''b\''{"properties": {"createMode": "Replica", "sourceServerId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134"}, + "location": "eastus"}\''''' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '244' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/serverreplica2134?api-version=2017-12-01 + response: + body: + string: '{"operation":"CreateElasticServerContinuousCopy","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '88' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:12:56 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/operationResults/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1196' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:13:30 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:14:04 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:14:35 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:15:07 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:15:38 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:16:09 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:16:42 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:17:12 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:17:44 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:18:16 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:18:48 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:19:21 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:19:56 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:20:32 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"InProgress","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:21:04 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/fe47046d-9f61-4cb3-9a71-3f3fa25652f9?api-version=2017-12-01 + response: + body: + string: '{"name":"fe47046d-9f61-4cb3-9a71-3f3fa25652f9","status":"Succeeded","startTime":"2020-02-20T06:12:57.233Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:21:35 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/serverreplica2134?api-version=2017-12-01 + response: + body: + string: '{"sku":{"name":"GP_Gen5_2","tier":"GeneralPurpose","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Enabled","storageAutogrow":"Enabled"},"version":"5.7","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"serverreplica2134.mysql.database.azure.com","earliestRestoreDate":"2020-02-20T06:24:58.093+00:00","replicationRole":"Replica","masterServerId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134","replicaCapacity":0,"byokEnforcement":"Disabled"},"location":"eastus","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/serverreplica2134","name":"serverreplica2134","type":"Microsoft.DBforMySQL/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '955' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:21:37 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: 'b''b\''{"sku": {"name": "GP_Gen5_2", "tier": "GeneralPurpose", "capacity": + 2, "family": "Gen5"}, "properties": {"createMode": "PointInTimeRestore", "sourceServerId": + "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134", + "restorePointInTime": "2020-02-20T06:21:36.65942Z"}, "location": "eastus", "tags": + {"elastic_server": "1"}}\''''' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '429' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/serverpoint2134?api-version=2017-12-01 + response: + body: + string: '{"operation":"RestoreElasticServer","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '74' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:21:43 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/operationResults/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1194' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:21:53 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:22:04 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:22:15 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:22:26 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:22:38 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:22:49 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:23:05 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:23:17 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:23:29 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:23:41 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:23:52 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:24:07 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:24:18 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:24:29 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:24:44 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"InProgress","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:24:57 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/e2c1af8b-4cbe-48cb-854c-13c54604b027?api-version=2017-12-01 + response: + body: + string: '{"name":"e2c1af8b-4cbe-48cb-854c-13c54604b027","status":"Succeeded","startTime":"2020-02-20T06:21:43.27Z"}' + headers: + cache-control: + - no-cache + content-length: + - '106' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:25:33 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/serverpoint2134?api-version=2017-12-01 + response: + body: + string: '{"sku":{"name":"GP_Gen5_2","tier":"GeneralPurpose","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Enabled","storageAutogrow":"Disabled"},"version":"5.7","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"serverpoint2134.mysql.database.azure.com","earliestRestoreDate":"2020-02-20T06:31:43.503+00:00","replicationRole":"None","masterServerId":"","replicaCapacity":5,"byokEnforcement":"Disabled"},"location":"eastus","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/serverpoint2134","name":"serverpoint2134","type":"Microsoft.DBforMySQL/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '788' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:25:34 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"charset": "{''properties'': {''charset'': ''utf8'', ''collation'': + ''utf8_general_ci''}}"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '98' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/databases/testdatabase2134?api-version=2017-12-01 + response: + body: + string: '{"operation":"UpsertElasticServerDatabase","startTime":"2020-02-20T06:25:38.98Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/06132ec5-b76a-4f35-ab10-494147b841ad?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '81' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:25:38 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/operationResults/06132ec5-b76a-4f35-ab10-494147b841ad?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1195' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/06132ec5-b76a-4f35-ab10-494147b841ad?api-version=2017-12-01 + response: + body: + string: '{"name":"06132ec5-b76a-4f35-ab10-494147b841ad","status":"Succeeded","startTime":"2020-02-20T06:25:38.98Z"}' + headers: + cache-control: + - no-cache + content-length: + - '106' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:25:54 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/databases/testdatabase2134?api-version=2017-12-01 + response: + body: + string: '{"properties":{"charset":"latin1","collation":"latin1_swedish_ci"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/databases/testdatabase2134","name":"testdatabase2134","type":"Microsoft.DBforMySQL/servers/databases"}' + headers: + cache-control: + - no-cache + content-length: + - '335' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:25:56 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"startIpAddress": "0.0.0.0", "endIpAddress": "255.255.255.255"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '80' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/firewallRules/firewallrule?api-version=2017-12-01 + response: + body: + string: '{"operation":"UpsertElasticServerFirewallRules","startTime":"2020-02-20T06:26:01.24Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/58d60177-979a-4b9f-95d8-2204c5cf414e?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '86' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:01 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/operationResults/58d60177-979a-4b9f-95d8-2204c5cf414e?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1196' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/58d60177-979a-4b9f-95d8-2204c5cf414e?api-version=2017-12-01 + response: + body: + string: '{"name":"58d60177-979a-4b9f-95d8-2204c5cf414e","status":"Succeeded","startTime":"2020-02-20T06:26:01.24Z"}' + headers: + cache-control: + - no-cache + content-length: + - '106' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:17 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/firewallRules/firewallrule?api-version=2017-12-01 + response: + body: + string: '{"properties":{"startIpAddress":"0.0.0.0","endIpAddress":"255.255.255.255"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/firewallRules/firewallrule","name":"firewallrule","type":"Microsoft.DBforMySQL/servers/firewallRules"}' + headers: + cache-control: + - no-cache + content-length: + - '344' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:17 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"state": "Enabled"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '36' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/securityAlertPolicies/Default?api-version=2017-12-01 + response: + body: + string: '{"operation":"UpsertServerThreatDetectionPolicy","startTime":"2020-02-20T06:26:19.763Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/East%20US/securityAlertPoliciesAzureAsyncOperation/75b4eb23-f8bc-4408-9d61-a3beddab8a62?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '88' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:19 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/East%20US/securityAlertPoliciesOperationResults/75b4eb23-f8bc-4408-9d61-a3beddab8a62?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/East%20US/securityAlertPoliciesAzureAsyncOperation/75b4eb23-f8bc-4408-9d61-a3beddab8a62?api-version=2017-12-01 + response: + body: + string: '{"name":"75b4eb23-f8bc-4408-9d61-a3beddab8a62","status":"Succeeded","startTime":"2020-02-20T06:26:19.763Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:23 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/securityAlertPolicies/Default?api-version=2017-12-01 + response: + body: + string: '{"properties":{"state":"Enabled","disabledAlerts":[""],"emailAddresses":[""],"emailAccountAdmins":false,"storageEndpoint":"","storageAccountAccessKey":"","retentionDays":0,"creationTime":"2020-02-20T06:26:19.873Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/securityAlertPolicies/Default","name":"Default","type":"Microsoft.DBforMySQL/servers/securityAlertPolicies"}' + headers: + cache-control: + - no-cache + content-length: + - '489' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:25 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"state": "Disabled"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '37' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/securityAlertPolicies/Default?api-version=2017-12-01 + response: + body: + string: '{"operation":"UpsertServerThreatDetectionPolicy","startTime":"2020-02-20T06:26:26.793Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/East%20US/securityAlertPoliciesAzureAsyncOperation/fd4d6aad-c8f7-4401-a7c3-bf71017b6562?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '88' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:26 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/East%20US/securityAlertPoliciesOperationResults/fd4d6aad-c8f7-4401-a7c3-bf71017b6562?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1194' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/East%20US/securityAlertPoliciesAzureAsyncOperation/fd4d6aad-c8f7-4401-a7c3-bf71017b6562?api-version=2017-12-01 + response: + body: + string: '{"name":"fd4d6aad-c8f7-4401-a7c3-bf71017b6562","status":"Succeeded","startTime":"2020-02-20T06:26:26.793Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:30 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/securityAlertPolicies/Default?api-version=2017-12-01 + response: + body: + string: '{"properties":{"state":"Disabled","disabledAlerts":[""],"emailAddresses":[""],"emailAccountAdmins":false,"storageEndpoint":"","storageAccountAccessKey":"","retentionDays":0,"creationTime":"2020-02-20T06:26:19.873Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/securityAlertPolicies/Default","name":"Default","type":"Microsoft.DBforMySQL/servers/securityAlertPolicies"}' + headers: + cache-control: + - no-cache + content-length: + - '490' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:31 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/securityAlertPolicies/Default?api-version=2017-12-01 + response: + body: + string: '{"properties":{"state":"Disabled","disabledAlerts":[""],"emailAddresses":[""],"emailAccountAdmins":false,"storageEndpoint":"","storageAccountAccessKey":"","retentionDays":0,"creationTime":"2020-02-20T06:26:19.873Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/securityAlertPolicies/Default","name":"Default","type":"Microsoft.DBforMySQL/servers/securityAlertPolicies"}' + headers: + cache-control: + - no-cache + content-length: + - '490' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:32 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/firewallRules/firewallrule?api-version=2017-12-01 + response: + body: + string: '{"properties":{"startIpAddress":"0.0.0.0","endIpAddress":"255.255.255.255"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/firewallRules/firewallrule","name":"firewallrule","type":"Microsoft.DBforMySQL/servers/firewallRules"}' + headers: + cache-control: + - no-cache + content-length: + - '344' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:32 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/databases/testdatabase2134?api-version=2017-12-01 + response: + body: + string: '{"properties":{"charset":"latin1","collation":"latin1_swedish_ci"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/databases/testdatabase2134","name":"testdatabase2134","type":"Microsoft.DBforMySQL/servers/databases"}' + headers: + cache-control: + - no-cache + content-length: + - '335' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:34 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134?api-version=2017-12-01 + response: + body: + string: '{"sku":{"name":"GP_Gen5_2","tier":"GeneralPurpose","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Enabled","storageAutogrow":"Disabled"},"version":"5.7","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"testserver2134.mysql.database.azure.com","earliestRestoreDate":"2020-02-20T06:20:45.513+00:00","replicationRole":"Master","masterServerId":"","replicaCapacity":5,"byokEnforcement":"Disabled"},"location":"eastus","tags":{"elastic_server":"1"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134","name":"testserver2134","type":"Microsoft.DBforMySQL/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '817' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:35 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/providers/Microsoft.DBforMySQL/operations?api-version=2017-12-01 + response: + body: + string: '{"value":[{"name":"Microsoft.DBforMySQL/servers/keys/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL Server Keys","operation":"List/Get + Azure Database for MySQL Server Key(s)","description":"Return the list of + server keys or gets the properties for the specified server key."}},{"name":"Microsoft.DBforMySQL/servers/keys/write","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL Server Keys","operation":"Create/Update + Azure Database for MySQL Server Keys","description":"Creates a key with the + specified parameters or update the properties or tags for the specified server + key."}},{"name":"Microsoft.DBforMySQL/servers/keys/delete","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL Server Keys","operation":"Delete + Azure Database for MySQL Server Key","description":"Deletes an existing server + key."}},{"name":"Microsoft.DBforMySQL/locations/serverKeyAzureAsyncOperation/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Transparent Data Encryption server key operation","operation":"Transparent + Data Encryption server keys operation","description":"Gets in-progress operations + on transparent data encryption server keys"}},{"name":"Microsoft.DBforMySQL/locations/serverKeyOperationResults/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Transparent Data Encryption server key operation","operation":"Transparent + Data Encryption server keys operation","description":"Gets in-progress operations + on transparent data encryption server keys"}},{"name":"Microsoft.DBforMySQL/servers/privateEndpointConnections/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL private endpoint connection","operation":"List/Get + Azure Database for MySQL private endpoint connection","description":"Returns + the list of private endpoint connections or gets the properties for the specified + private endpoint connection."}},{"name":"Microsoft.DBforMySQL/servers/privateEndpointConnections/delete","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL private endpoint connection","operation":"Delete + Azure Database for MySQL private endpoint connection","description":"Deletes + an existing private endpoint connection"}},{"name":"Microsoft.DBforMySQL/servers/privateEndpointConnections/write","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL private endpoint connection","operation":"Approve + or Reject Azure Database for MySQL private endpoint connection","description":"Approves + or rejects an existing private endpoint connection"}},{"name":"Microsoft.DBforMySQL/locations/privateEndpointConnectionOperationResults/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL private endpoint connection","operation":"Get + private endpoint connection operation status","description":"Gets the result + for a private endpoint connection operation"}},{"name":"Microsoft.DBforMySQL/locations/privateEndpointConnectionAzureAsyncOperation/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL private endpoint connection","operation":"Get + private endpoint connection operation status","description":"Gets the result + for a private endpoint connection operation"}},{"name":"Microsoft.DBforMySQL/locations/privateEndpointConnectionProxyOperationResults/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL Private Endpoint Connection + Proxy","operation":"Get private endpoint connection proxy operation status","description":"Gets + the result for a private endpoint connection proxy operation"}},{"name":"Microsoft.DBforMySQL/servers/privateEndpointConnectionProxies/validate/action","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL Private Endpoint Connection + Proxy","operation":"Validate Azure Database for MySQL Private Endpoint Connection + Creation by NRP","description":"Validates a private endpoint connection create + call from NRP side"}},{"name":"Microsoft.DBforMySQL/servers/privateEndpointConnectionProxies/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL Private Endpoint Connection + Proxy","operation":"List/Get Azure Database for MySQL Private Endpoint Connection + Proxy","description":"Returns the list of private endpoint connection proxies + or gets the properties for the specified private endpoint connection proxy."}},{"name":"Microsoft.DBforMySQL/servers/privateEndpointConnectionProxies/write","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL Private Endpoint Connection + Proxy","operation":"Create/Update Azure Database for MySQL Private Endpoint + Connection Proxy","description":"Creates a private endpoint connection proxy + with the specified parameters or updates the properties or tags for the specified + private endpoint connection proxy."}},{"name":"Microsoft.DBforMySQL/servers/privateEndpointConnectionProxies/delete","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL Private Endpoint Connection + Proxy","operation":"Delete Azure Database for MySQL Private Endpoint Connection + Proxy","description":"Deletes an existing private endpoint connection proxy"}},{"name":"Microsoft.DBforMySQL/locations/privateEndpointConnectionProxyAzureAsyncOperation/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL Private Endpoint Connection + Proxy","operation":"Get private endpoint connection proxy operation status","description":"Gets + the result for a private endpoint connection proxy operation"}},{"name":"Microsoft.DBforMySQL/servers/privateLinkResources/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Azure Database for MySQL private link resource","operation":"Get + the private link resources for the corresponding MySQL Server","description":"Get + the private link resources for the corresponding MySQL Server"}},{"name":"Microsoft.DBforMySQL/servers/advisors/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Advisors","operation":"Return the list of advisors","description":"Return + the list of advisors"}},{"name":"Microsoft.DBforMySQL/servers/advisors/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Advisors","operation":"Return an advisor","description":"Return + an advisor"}},{"name":"Microsoft.DBforMySQL/servers/advisors/recommendedActions/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Recommended Actions","operation":"Return the list + of recommended actions","description":"Return the list of recommended actions"}},{"name":"Microsoft.DBforMySQL/servers/advisors/recommendedActions/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Recommended Actions","operation":"Return the list + of recommended actions","description":"Return the list of recommended actions"}},{"name":"Microsoft.DBforMySQL/servers/advisors/recommendedActions/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Recommended Actions","operation":"Return a recommended + action","description":"Return a recommended action"}},{"name":"Microsoft.DBforMySQL/servers/advisors/createRecommendedActionSession/action","display":{"provider":"Microsoft + DB for MySQL","resource":"Recommended Actions","operation":"Create a new recommendation + action session","description":"Create a new recommendation action session"}},{"name":"Microsoft.DBforMySQL/servers/queryTexts/action","display":{"provider":"Microsoft + DB for MySQL","resource":"Query Texts","operation":"List query texts for a + list of queries","description":"Return the texts for a list of queries"}},{"name":"Microsoft.DBforMySQL/servers/queryTexts/action","display":{"provider":"Microsoft + DB for MySQL","resource":"Query Texts","operation":"Return the text of a query","description":"Return + the text of a query"}},{"name":"Microsoft.DBforMySQL/servers/topQueryStatistics/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Top Query Statistics","operation":"List/Get Query + Statistic(s) for top queries","description":"Return the list of Query Statistics + for the top queries."}},{"name":"Microsoft.DBforMySQL/servers/topQueryStatistics/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Top Query Statistics","operation":"Get a Query Statistic","description":"Return + a Query Statistic"}},{"name":"Microsoft.DBforMySQL/servers/waitStatistics/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Wait Statistics","operation":"List Wait Statistics + for an instance","description":"Return wait statistics for an instance"}},{"name":"Microsoft.DBforMySQL/servers/waitStatistics/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Wait Statistics","operation":"Return a wait statistic","description":"Return + a wait statistic"}},{"name":"Microsoft.DBforMySQL/locations/performanceTiers/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Performance Tiers","operation":"List Performance + Tiers","description":"Returns the list of Performance Tiers available."}},{"name":"Microsoft.DBforMySQL/servers/recoverableServers/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Recoverable MySQL Server","operation":"Get Recoverable + MySQL Server info","description":"Return the recoverable MySQL Server info"}},{"name":"Microsoft.DBforMySQL/servers/replicas/read","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Server","operation":"Get MySQL read replicas","description":"Get + read replicas of a MySQL server"}},{"name":"Microsoft.DBforMySQL/locations/operationResults/read","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL ResourceGroup based Server Operation Results","operation":"Get + MySQL ResourceGroup based Server Operation Results ","description":"Return + ResourceGroup based MySQL Server Operation Results"}},{"name":"Microsoft.DBforMySQL/servers/read","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Server","operation":"List/Get MySQL Servers","description":"Return + the list of servers or gets the properties for the specified server."}},{"name":"Microsoft.DBforMySQL/servers/write","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Server","operation":"Create/Update MySQL Server","description":"Creates + a server with the specified parameters or update the properties or tags for + the specified server."}},{"name":"Microsoft.DBforMySQL/servers/delete","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Server","operation":"Delete MySQL Server","description":"Deletes + an existing server."}},{"name":"Microsoft.DBforMySQL/locations/operationResults/read","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Server Operation Results","operation":"Get + MySQL Server Operation Results","description":"Return MySQL Server Operation + Results"}},{"name":"Microsoft.DBforMySQL/servers/restart/action","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Server","operation":"Restart MySQL Server","description":"Restarts + a specific server."}},{"name":"Microsoft.DBforMySQL/locations/securityAlertPoliciesAzureAsyncOperation/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Server threat detection operation result","operation":"List/Get + Server threat detection operation result.","description":"Return the list + of Server threat detection operation result."}},{"name":"Microsoft.DBforMySQL/locations/securityAlertPoliciesOperationResults/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Server threat detection operation result","operation":"List/Get + Server threat detection operation result.","description":"Return the list + of Server threat detection operation result."}},{"name":"Microsoft.DBforMySQL/servers/securityAlertPolicies/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Server Threat Detection Policy","operation":"Get + server threat detection policy","description":"Retrieve details of the server + threat detection policy configured on a given server"}},{"name":"Microsoft.DBforMySQL/servers/securityAlertPolicies/write","display":{"provider":"Microsoft + DB for MySQL","resource":"Server Threat Detection Policy","operation":"Update + server threat detection policy","description":"Change the server threat detection + policy for a given server"}},{"name":"Microsoft.DBforMySQL/servers/administrators/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Administrator of MySQL server.","operation":"Get + Administrators of MySQL server.","description":"Gets a list of MySQL server + administrators."}},{"name":"Microsoft.DBforMySQL/servers/administrators/write","display":{"provider":"Microsoft + DB for MySQL","resource":"Administrator of MySQL server.","operation":"Create/Update + Administrator of MySQL server.","description":"Creates or updates MySQL server + administrator with the specified parameters."}},{"name":"Microsoft.DBforMySQL/servers/administrators/delete","display":{"provider":"Microsoft + DB for MySQL","resource":"Administrator of MySQL server.","operation":"Delete + Administrator of MySQL server.","description":"Deletes an existing administrator + of MySQL server."}},{"name":"Microsoft.DBforMySQL/register/action","display":{"provider":"Microsoft + DB for MySQL","resource":"Microsoft Database For MySQL Resource Provider","operation":"Register + MySQL Resource Provider","description":"Register MySQL Resource Provider"}},{"name":"Microsoft.DBforMySQL/servers/updateConfigurations/action","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Server","operation":"Batch Update Server Configurations","description":"Update + configurations for the specified server"}},{"name":"Microsoft.DBforMySQL/checkNameAvailability/action","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Server","operation":"Check Server Name Availability","description":"Verify + whether given server name is available for provisioning worldwide for a given + subscription."}},{"name":"Microsoft.DBforMySQL/servers/configurations/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Configurations","operation":"List/Get Configurations","description":"Return + the list of configurations for a server or gets the properties for the specified + configuration."}},{"name":"Microsoft.DBforMySQL/servers/configurations/write","display":{"provider":"Microsoft + DB for MySQL","resource":"Configurations","operation":"Update Configuration","description":"Update + the value for the specified configuration"}},{"name":"Microsoft.DBforMySQL/servers/logFiles/read","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL LogFiles","operation":"List/Get MySQL LogFiles","description":"Return + the list of MySQL LogFiles."}},{"name":"Microsoft.DBforMySQL/servers/virtualNetworkRules/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Virtual Network Rules","operation":"List/Get Virtual + Network Rule(s)","description":"Return the list of virtual network rules or + gets the properties for the specified virtual network rule."}},{"name":"Microsoft.DBforMySQL/servers/virtualNetworkRules/write","display":{"provider":"Microsoft + DB for MySQL","resource":"Virtual Network Rules","operation":"Create/Update + Virtual Network Rule","description":"Creates a virtual network rule with the + specified parameters or update the properties or tags for the specified virtual + network rule."}},{"name":"Microsoft.DBforMySQL/servers/virtualNetworkRules/delete","display":{"provider":"Microsoft + DB for MySQL","resource":"Virtual Network Rules","operation":"Delete Virtual + Network Rule","description":"Deletes an existing Virtual Network Rule"}},{"name":"Microsoft.DBforMySQL/locations/azureAsyncOperation/read","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Server Operation Results","operation":"Get + MySQL Server Operation Results","description":"Return MySQL Server Operation + Results"}},{"name":"Microsoft.DBforMySQL/servers/databases/read","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Databases","operation":"List/Get MySQL Database","description":"Return + the list of MySQL Databases or gets the properties for the specified Database."}},{"name":"Microsoft.DBforMySQL/servers/databases/write","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Databases","operation":"Create/Update MySQL + Database","description":"Creates a MySQL Database with the specified parameters + or update the properties for the specified Database."}},{"name":"Microsoft.DBforMySQL/servers/databases/delete","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Databases","operation":"Delete MySQL Database","description":"Deletes + an existing MySQL Database."}},{"name":"Microsoft.DBforMySQL/servers/firewallRules/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Firewall Rules","operation":"List/Get Firewall Rules","description":"Return + the list of firewall rules for a server or gets the properties for the specified + firewall rule."}},{"name":"Microsoft.DBforMySQL/servers/firewallRules/write","display":{"provider":"Microsoft + DB for MySQL","resource":"Firewall Rules","operation":"Create/Update Firewall + Rule","description":"Creates a firewall rule with the specified parameters + or update an existing rule."}},{"name":"Microsoft.DBforMySQL/servers/firewallRules/delete","display":{"provider":"Microsoft + DB for MySQL","resource":"Firewall Rules","operation":"Delete Firewall Rule","description":"Deletes + an existing firewall rule."}},{"name":"Microsoft.DBforMySQL/performanceTiers/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Performance Tiers","operation":"List Performance + Tiers","description":"Returns the list of Performance Tiers available."}},{"name":"Microsoft.DBforMySQL/operations/read","display":{"provider":"Microsoft + DB for MySQL","resource":"MySQL Operations","operation":"List/Get MySQL Operations","description":"Return + the list of MySQL Operations."}},{"name":"Microsoft.DBforMySQL/servers/providers/Microsoft.Insights/metricDefinitions/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Database Metric Definition","operation":"Get database + metric definitions","description":"Return types of metrics that are available + for databases"},"properties":{"serviceSpecification":{"metricSpecifications":[{"name":"cpu_percent","displayName":"CPU + percent","displayDescription":"CPU percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"memory_percent","displayName":"Memory + percent","displayDescription":"Memory percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"io_consumption_percent","displayName":"IO + percent","displayDescription":"IO percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"storage_percent","displayName":"Storage + percent","displayDescription":"Storage percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"storage_used","displayName":"Storage + used","displayDescription":"Storage used","unit":"Bytes","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"storage_limit","displayName":"Storage + limit","displayDescription":"Storage limit","unit":"Bytes","aggregationType":"Maximum","supportedAggregationTypes":["Maximum"],"fillGapWithZero":true},{"name":"serverlog_storage_percent","displayName":"Server + Log storage percent","displayDescription":"Server Log storage percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"serverlog_storage_usage","displayName":"Server + Log storage used","displayDescription":"Server Log storage used","unit":"Bytes","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"serverlog_storage_limit","displayName":"Server + Log storage limit","displayDescription":"Server Log storage limit","unit":"Bytes","aggregationType":"Maximum","supportedAggregationTypes":["Maximum"],"fillGapWithZero":true},{"name":"active_connections","displayName":"Active + Connections","displayDescription":"Active Connections","unit":"Count","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"connections_failed","displayName":"Failed + Connections","displayDescription":"Failed Connections","unit":"Count","aggregationType":"Total","supportedAggregationTypes":["Total"],"fillGapWithZero":true},{"name":"seconds_behind_master","displayName":"Replication + lag in seconds","displayDescription":"Replication lag in seconds","unit":"Count","aggregationType":"Maximum","supportedAggregationTypes":["Average","Maximum","Minimum"],"fillGapWithZero":true},{"name":"backup_storage_used","displayName":"Backup + Storage used","displayDescription":"Backup Storage used","unit":"Bytes","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"supportedTimeGrainTypes":["PT15M","PT30M","PT1H","PT6H","PT12H","P1D"],"fillGapWithZero":true},{"name":"network_bytes_egress","displayName":"Network + Out","displayDescription":"Network Out across active connections","unit":"Bytes","aggregationType":"Total","supportedAggregationTypes":["Total"],"fillGapWithZero":true},{"name":"network_bytes_ingress","displayName":"Network + In","displayDescription":"Network In across active connections","unit":"Bytes","aggregationType":"Total","supportedAggregationTypes":["Total"],"fillGapWithZero":true}]}}},{"name":"Microsoft.DBforMySQL/servers/providers/Microsoft.Insights/logDefinitions/read","display":{"provider":"Microsoft + DB for MySQL","resource":"The log definition of servers","operation":"Read + the log definitions","description":"Gets the available logs for MySQL servers"},"properties":{"serviceSpecification":{"logSpecifications":[{"name":"MySqlSlowLogs","displayName":"MySQL + Server Logs","blobDuration":"PT1H"},{"name":"MySqlAuditLogs","displayName":"MySQL + Audit Logs","blobDuration":"PT1H"}]}}},{"name":"Microsoft.DBforMySQL/servers/providers/Microsoft.Insights/diagnosticSettings/read","display":{"provider":"Microsoft + DB for MySQL","resource":"Database Metric Definition","operation":"Read diagnostic + setting","description":"Gets the disagnostic setting for the resource"}},{"name":"Microsoft.DBforMySQL/servers/providers/Microsoft.Insights/diagnosticSettings/write","display":{"provider":"Microsoft + DB for MySQL","resource":"Database Metric Definition","operation":"Write diagnostic + setting","description":"Creates or updates the diagnostic setting for the + resource"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '22915' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:39 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/restart?api-version=2017-12-01 + response: + body: + string: '{"operation":"RestartElasticServer","startTime":"2020-02-20T06:26:40.777Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/8c30c288-dbdc-47ed-84da-b41b2ba87fba?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '75' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:40 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/operationResults/8c30c288-dbdc-47ed-84da-b41b2ba87fba?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/8c30c288-dbdc-47ed-84da-b41b2ba87fba?api-version=2017-12-01 + response: + body: + string: '{"name":"8c30c288-dbdc-47ed-84da-b41b2ba87fba","status":"InProgress","startTime":"2020-02-20T06:26:40.777Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:26:57 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/8c30c288-dbdc-47ed-84da-b41b2ba87fba?api-version=2017-12-01 + response: + body: + string: '{"name":"8c30c288-dbdc-47ed-84da-b41b2ba87fba","status":"InProgress","startTime":"2020-02-20T06:26:40.777Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:27:20 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/8c30c288-dbdc-47ed-84da-b41b2ba87fba?api-version=2017-12-01 + response: + body: + string: '{"name":"8c30c288-dbdc-47ed-84da-b41b2ba87fba","status":"InProgress","startTime":"2020-02-20T06:26:40.777Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:27:36 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/8c30c288-dbdc-47ed-84da-b41b2ba87fba?api-version=2017-12-01 + response: + body: + string: '{"name":"8c30c288-dbdc-47ed-84da-b41b2ba87fba","status":"Succeeded","startTime":"2020-02-20T06:26:40.777Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:27:54 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '2' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PATCH + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134?api-version=2017-12-01 + response: + body: + string: '{"operation":"UpsertElasticServer","startTime":"2020-02-20T06:27:57.2Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/69af1497-2bdd-47a6-b2d5-30674f28f349?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '72' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:27:56 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/operationResults/69af1497-2bdd-47a6-b2d5-30674f28f349?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1195' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/69af1497-2bdd-47a6-b2d5-30674f28f349?api-version=2017-12-01 + response: + body: + string: '{"name":"69af1497-2bdd-47a6-b2d5-30674f28f349","status":"Succeeded","startTime":"2020-02-20T06:27:57.2Z"}' + headers: + cache-control: + - no-cache + content-length: + - '105' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:28:58 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134?api-version=2017-12-01 + response: + body: + string: '{"sku":{"name":"GP_Gen5_2","tier":"GeneralPurpose","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Enabled","storageAutogrow":"Disabled"},"version":"5.7","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"testserver2134.mysql.database.azure.com","earliestRestoreDate":"2020-02-20T06:20:45.513+00:00","replicationRole":"Master","masterServerId":"","replicaCapacity":5,"byokEnforcement":"Disabled"},"location":"eastus","tags":{"elastic_server":"1"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134","name":"testserver2134","type":"Microsoft.DBforMySQL/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '817' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:29:02 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"name": "name1", "type": "Microsoft.DBforMySQL"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '49' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/checkNameAvailability?api-version=2017-12-01 + response: + body: + string: '{"nameAvailable":false,"reason":"AlreadyExists","message":"Specified + server name ''{0}'' is already used. Please use a different name and try again."}' + headers: + cache-control: + - no-cache + content-length: + - '148' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:29:04 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/firewallRules/firewallrule?api-version=2017-12-01 + response: + body: + string: '{"operation":"DropElasticServerFirewallRule","startTime":"2020-02-20T06:29:06.087Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/d5cf66d6-d064-4b64-8a09-2e6368fd6fe5?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '84' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:29:05 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/operationResults/d5cf66d6-d064-4b64-8a09-2e6368fd6fe5?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14999' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/d5cf66d6-d064-4b64-8a09-2e6368fd6fe5?api-version=2017-12-01 + response: + body: + string: '{"name":"d5cf66d6-d064-4b64-8a09-2e6368fd6fe5","status":"Succeeded","startTime":"2020-02-20T06:29:06.087Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:29:22 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134/databases/testdatabase2134?api-version=2017-12-01 + response: + body: + string: '{"operation":"DropElasticServerDatabase","startTime":"2020-02-20T06:29:22.96Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/925ade67-e2e6-4ba6-a05d-6f80023fb964?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '79' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:29:22 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/operationResults/925ade67-e2e6-4ba6-a05d-6f80023fb964?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14999' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/925ade67-e2e6-4ba6-a05d-6f80023fb964?api-version=2017-12-01 + response: + body: + string: '{"name":"925ade67-e2e6-4ba6-a05d-6f80023fb964","status":"Succeeded","startTime":"2020-02-20T06:29:22.96Z"}' + headers: + cache-control: + - no-cache + content-length: + - '106' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:29:38 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_mysql_test_mysqlc1430c84/providers/Microsoft.DBforMySQL/servers/testserver2134?api-version=2017-12-01 + response: + body: + string: '{"operation":"DropElasticServer","startTime":"2020-02-20T06:29:40.633Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/9e551a1e-1efb-4493-b9a5-27c0d077f9bd?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '72' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:29:40 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/operationResults/9e551a1e-1efb-4493-b9a5-27c0d077f9bd?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14998' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforMySQL/locations/eastus/azureAsyncOperation/9e551a1e-1efb-4493-b9a5-27c0d077f9bd?api-version=2017-12-01 + response: + body: + string: '{"name":"9e551a1e-1efb-4493-b9a5-27c0d077f9bd","status":"Succeeded","startTime":"2020-02-20T06:29:40.633Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 20 Feb 2020 06:29:56 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/rdbms/azure-mgmt-rdbms/tests/recordings/test_cli_mgmt_postgresql.test_postgresql.yaml b/sdk/rdbms/azure-mgmt-rdbms/tests/recordings/test_cli_mgmt_postgresql.test_postgresql.yaml new file mode 100644 index 000000000000..a940f1c40981 --- /dev/null +++ b/sdk/rdbms/azure-mgmt-rdbms/tests/recordings/test_cli_mgmt_postgresql.test_postgresql.yaml @@ -0,0 +1,1702 @@ +interactions: +- request: + body: '{"sku": {"name": "B_Gen5_2", "tier": "Basic", "capacity": 2, "family": + "Gen5"}, "properties": {"sslEnforcement": "Enabled", "storageProfile": {"backupRetentionDays": + 7, "geoRedundantBackup": "Disabled", "storageMB": 128000}, "createMode": "Default", + "administratorLogin": "cloudsa", "administratorLoginPassword": "pa$$w0rd"}, + "location": "eastus", "tags": {"elastic_server": "1"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '380' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345?api-version=2017-12-01 + response: + body: + string: '{"operation":"UpsertElasticServer","startTime":"2020-02-24T06:25:31.057Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/e11cb09f-1145-4817-8046-a493102ac932?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '74' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:25:30 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/operationResults/e11cb09f-1145-4817-8046-a493102ac932?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1189' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/e11cb09f-1145-4817-8046-a493102ac932?api-version=2017-12-01 + response: + body: + string: '{"name":"e11cb09f-1145-4817-8046-a493102ac932","status":"InProgress","startTime":"2020-02-24T06:25:31.057Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:26:33 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/e11cb09f-1145-4817-8046-a493102ac932?api-version=2017-12-01 + response: + body: + string: '{"name":"e11cb09f-1145-4817-8046-a493102ac932","status":"InProgress","startTime":"2020-02-24T06:25:31.057Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:27:35 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/e11cb09f-1145-4817-8046-a493102ac932?api-version=2017-12-01 + response: + body: + string: '{"name":"e11cb09f-1145-4817-8046-a493102ac932","status":"InProgress","startTime":"2020-02-24T06:25:31.057Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:28:37 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/e11cb09f-1145-4817-8046-a493102ac932?api-version=2017-12-01 + response: + body: + string: '{"name":"e11cb09f-1145-4817-8046-a493102ac932","status":"Succeeded","startTime":"2020-02-24T06:25:31.057Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:29:39 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345?api-version=2017-12-01 + response: + body: + string: '{"sku":{"name":"B_Gen5_2","tier":"Basic","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Disabled","storageAutogrow":"Disabled"},"version":"9.6","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"testserver21345.postgres.database.azure.com","earliestRestoreDate":"2020-02-24T06:35:31.367+00:00","replicationRole":"None","masterServerId":"","replicaCapacity":5,"byokEnforcement":"Disabled"},"location":"eastus","tags":{"elastic_server":"1"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345","name":"testserver21345","type":"Microsoft.DBforPostgreSQL/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '832' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:29:41 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"charset": "UTF8", "collation": "English_United States.1252"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '78' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/databases/testdatabase21345?api-version=2017-12-01 + response: + body: + string: '{"operation":"UpsertElasticServerDatabase","startTime":"2020-02-24T06:29:43.963Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/bf07eaa8-6e74-4ea2-80f7-071f954e28f3?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '82' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:29:43 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/operationResults/bf07eaa8-6e74-4ea2-80f7-071f954e28f3?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/bf07eaa8-6e74-4ea2-80f7-071f954e28f3?api-version=2017-12-01 + response: + body: + string: '{"name":"bf07eaa8-6e74-4ea2-80f7-071f954e28f3","status":"InProgress","startTime":"2020-02-24T06:29:43.963Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:30:16 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/bf07eaa8-6e74-4ea2-80f7-071f954e28f3?api-version=2017-12-01 + response: + body: + string: '{"name":"bf07eaa8-6e74-4ea2-80f7-071f954e28f3","status":"Succeeded","startTime":"2020-02-24T06:29:43.963Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:30:36 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/databases/testdatabase21345?api-version=2017-12-01 + response: + body: + string: '{"properties":{"charset":"UTF8","collation":"English_United States.1252"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/databases/testdatabase21345","name":"testdatabase21345","type":"Microsoft.DBforPostgreSQL/servers/databases"}' + headers: + cache-control: + - no-cache + content-length: + - '365' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:30:45 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"startIpAddress": "0.0.0.0", "endIpAddress": "255.255.255.255"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '80' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/firewallRules/firewallrule?api-version=2017-12-01 + response: + body: + string: '{"operation":"UpsertElasticServerFirewallRules","startTime":"2020-02-24T06:30:47.623Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/ea1bfd68-dc9c-4735-ac32-b62adb5a8522?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '87' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:30:47 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/operationResults/ea1bfd68-dc9c-4735-ac32-b62adb5a8522?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/ea1bfd68-dc9c-4735-ac32-b62adb5a8522?api-version=2017-12-01 + response: + body: + string: '{"name":"ea1bfd68-dc9c-4735-ac32-b62adb5a8522","status":"Succeeded","startTime":"2020-02-24T06:30:47.623Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:31:03 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/firewallRules/firewallrule?api-version=2017-12-01 + response: + body: + string: '{"properties":{"startIpAddress":"0.0.0.0","endIpAddress":"255.255.255.255"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/firewallRules/firewallrule","name":"firewallrule","type":"Microsoft.DBforPostgreSQL/servers/firewallRules"}' + headers: + cache-control: + - no-cache + content-length: + - '365' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:31:08 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/firewallRules/firewallrule?api-version=2017-12-01 + response: + body: + string: '{"properties":{"startIpAddress":"0.0.0.0","endIpAddress":"255.255.255.255"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/firewallRules/firewallrule","name":"firewallrule","type":"Microsoft.DBforPostgreSQL/servers/firewallRules"}' + headers: + cache-control: + - no-cache + content-length: + - '365' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:31:10 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/databases/testdatabase21345?api-version=2017-12-01 + response: + body: + string: '{"properties":{"charset":"UTF8","collation":"English_United States.1252"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/databases/testdatabase21345","name":"testdatabase21345","type":"Microsoft.DBforPostgreSQL/servers/databases"}' + headers: + cache-control: + - no-cache + content-length: + - '365' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:31:11 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345?api-version=2017-12-01 + response: + body: + string: '{"sku":{"name":"B_Gen5_2","tier":"Basic","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Disabled","storageAutogrow":"Disabled"},"version":"9.6","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"testserver21345.postgres.database.azure.com","earliestRestoreDate":"2020-02-24T06:35:31.367+00:00","replicationRole":"None","masterServerId":"","replicaCapacity":5,"byokEnforcement":"Disabled"},"location":"eastus","tags":{"elastic_server":"1"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345","name":"testserver21345","type":"Microsoft.DBforPostgreSQL/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '832' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:31:13 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/providers/Microsoft.DBforPostgreSQL/operations?api-version=2017-12-01 + response: + body: + string: '{"value":[{"name":"Microsoft.DBforPostgreSQL/servers/keys/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL Server Keys","operation":"List/Get + Azure Database for PostgreSQL Server Key(s)","description":"Return the list + of server keys or gets the properties for the specified server key."}},{"name":"Microsoft.DBforPostgreSQL/servers/keys/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL Server Keys","operation":"Create/Update + Azure Database for PostgreSQL Server Keys","description":"Creates a key with + the specified parameters or update the properties or tags for the specified + server key."}},{"name":"Microsoft.DBforPostgreSQL/servers/keys/delete","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL Server Keys","operation":"Delete + Azure Database for PostgreSQL Server Key","description":"Deletes an existing + server key."}},{"name":"Microsoft.DBforPostgreSQL/locations/serverKeyAzureAsyncOperation/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Transparent Data Encryption server key operation","operation":"Transparent + Data Encryption server keys operation","description":"Gets in-progress operations + on transparent data encryption server keys"}},{"name":"Microsoft.DBforPostgreSQL/locations/serverKeyOperationResults/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Transparent Data Encryption server key operation","operation":"Transparent + Data Encryption server keys operation","description":"Gets in-progress operations + on transparent data encryption server keys"}},{"name":"Microsoft.DBforPostgreSQL/servers/advisors/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Advisors","operation":"Return the list of advisors","description":"Return + the list of advisors"}},{"name":"Microsoft.DBforPostgreSQL/servers/advisors/recommendedActions/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Recommended Actions","operation":"Return the + list of recommended actions","description":"Return the list of recommended + actions"}},{"name":"Microsoft.DBforPostgreSQL/servers/advisors/recommendedActionSessions/action","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Recommended Actions","operation":"Make recommendations","description":"Make + recommendations"}},{"name":"Microsoft.DBforPostgreSQL/servers/queryTexts/action","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Query Texts","operation":"List query text of + a query","description":"Return the text of a query"}},{"name":"Microsoft.DBforPostgreSQL/servers/queryTexts/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Query Texts","operation":"List query texts + for a list of queries","description":"Return the texts for a list of queries"}},{"name":"Microsoft.DBforPostgreSQL/servers/topQueryStatistics/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Top Query Statistics","operation":"List/Get + Query Statistic(s) for top queries","description":"Return the list of Query + Statistics for the top queries."}},{"name":"Microsoft.DBforPostgreSQL/servers/waitStatistics/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Wait Statistics","operation":"List Wait Statistics + for an instance","description":"Return wait statistics for an instance"}},{"name":"Microsoft.DBforPostgreSQL/servers/privateLinkResources/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL private link + resource","operation":"Get the private link resources for the corresponding + PostgreSQL Server","description":"Get the private link resources for the corresponding + PostgreSQL Server"}},{"name":"Microsoft.DBforPostgreSQL/servers/privateEndpointConnections/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL private endpoint + connection","operation":"List/Get Azure Database for PostgreSQL private endpoint + connection","description":"Returns the list of private endpoint connections + or gets the properties for the specified private endpoint connection."}},{"name":"Microsoft.DBforPostgreSQL/servers/privateEndpointConnections/delete","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL private endpoint + connection","operation":"Delete Azure Database for PostgreSQL private endpoint + connection","description":"Deletes an existing private endpoint connection"}},{"name":"Microsoft.DBforPostgreSQL/servers/privateEndpointConnections/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL private endpoint + connection","operation":"Approve or Reject Azure Database for PostgreSQL private + endpoint connection","description":"Approves or rejects an existing private + endpoint connection"}},{"name":"Microsoft.DBforPostgreSQL/locations/privateEndpointConnectionOperationResults/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL private endpoint + connection","operation":"Get private endpoint connection operation status","description":"Gets + the result for a private endpoint connection operation"}},{"name":"Microsoft.DBforPostgreSQL/locations/privateEndpointConnectionAzureAsyncOperation/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL private endpoint + connection","operation":"Get private endpoint connection operation status","description":"Gets + the result for a private endpoint connection operation"}},{"name":"Microsoft.DBforPostgreSQL/locations/privateEndpointConnectionProxyOperationResults/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL Private Endpoint + Connection Proxy","operation":"Get private endpoint connection proxy operation + status","description":"Gets the result for a private endpoint connection proxy + operation"}},{"name":"Microsoft.DBforPostgreSQL/servers/privateEndpointConnectionProxies/validate/action","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL Private Endpoint + Connection Proxy","operation":"Validate Azure Database for PostgreSQL Private + Endpoint Connection Creation by NRP","description":"Validates a private endpoint + connection create call from NRP side"}},{"name":"Microsoft.DBforPostgreSQL/servers/privateEndpointConnectionProxies/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL Private Endpoint + Connection Proxy","operation":"List/Get Azure Database for PostgreSQL Private + Endpoint Connection Proxy","description":"Returns the list of private endpoint + connection proxies or gets the properties for the specified private endpoint + connection proxy."}},{"name":"Microsoft.DBforPostgreSQL/servers/privateEndpointConnectionProxies/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL Private Endpoint + Connection Proxy","operation":"Create/Update Azure Database for PostgreSQL + Private Endpoint Connection Proxy","description":"Creates a private endpoint + connection proxy with the specified parameters or updates the properties or + tags for the specified private endpoint connection proxy."}},{"name":"Microsoft.DBforPostgreSQL/servers/privateEndpointConnectionProxies/delete","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL Private Endpoint + Connection Proxy","operation":"Delete Azure Database for PostgreSQL Private + Endpoint Connection Proxy","description":"Deletes an existing private endpoint + connection proxy"}},{"name":"Microsoft.DBforPostgreSQL/locations/privateEndpointConnectionProxyAzureAsyncOperation/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Azure Database for PostgreSQL Private Endpoint + Connection Proxy","operation":"Get private endpoint connection proxy operation + status","description":"Gets the result for a private endpoint connection proxy + operation"}},{"name":"Microsoft.DBforPostgreSQL/servers/securityAlertPolicies/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Server Threat Detection Policy","operation":"Get + server threat detection policy","description":"Retrieve details of the server + threat detection policy configured on a given server"}},{"name":"Microsoft.DBforPostgreSQL/servers/securityAlertPolicies/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Server Threat Detection Policy","operation":"Update + server threat detection policy","description":"Change the server threat detection + policy for a given server"}},{"name":"Microsoft.DBforPostgreSQL/locations/securityAlertPoliciesAzureAsyncOperation/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Server threat detection operation result","operation":"List/Get + Server threat detection operation result.","description":"Return the list + of Server threat detection operation result."}},{"name":"Microsoft.DBforPostgreSQL/locations/securityAlertPoliciesOperationResults/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Server threat detection operation result","operation":"List/Get + Server threat detection operation result.","description":"Return the list + of Server threat detection operation result."}},{"name":"Microsoft.DBforPostgreSQL/locations/performanceTiers/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Performance Tiers","operation":"List Performance + Tiers","description":"Returns the list of Performance Tiers available."}},{"name":"Microsoft.DBforPostgreSQL/locations/operationResults/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQ ResourceGroup based Server Operation + Results","operation":"Get PostgreSQL ResourceGroup based Server Operation + Results ","description":"Return ResourceGroup based PostgreSQL Server Operation + Results"}},{"name":"Microsoft.DBforPostgreSQL/servers/recoverableServers/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Recoverable PostgreSQL Server","operation":"Get + Recoverable PostgreSQL Server info","description":"Return the recoverable + PostgreSQL Server info"}},{"name":"Microsoft.DBforPostgreSQL/servers/replicas/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server","operation":"Get PostgreSQL + read replicas","description":"Get read replicas of a PostgreSQL server"}},{"name":"Microsoft.DBforPostgreSQL/servers/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server","operation":"List/Get PostgreSQL + Servers","description":"Return the list of servers or gets the properties + for the specified server."}},{"name":"Microsoft.DBforPostgreSQL/servers/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server","operation":"Create/Update + PostgreSQL Server","description":"Creates a server with the specified parameters + or update the properties or tags for the specified server."}},{"name":"Microsoft.DBforPostgreSQL/servers/delete","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server","operation":"Delete PostgreSQL + Server","description":"Deletes an existing server."}},{"name":"Microsoft.DBforPostgreSQL/locations/operationResults/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server Operation Results","operation":"Get + PostgreSQL Server Operation Results","description":"Return PostgreSQL Server + Operation Results"}},{"name":"Microsoft.DBforPostgreSQL/servers/restart/action","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server","operation":"Restart PostgreSQL + Server","description":"Restarts a specific server."}},{"name":"Microsoft.DBforPostgreSQL/servers/administrators/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Administrator of PostgreSQL server.","operation":"Get + Administrators of PostgreSQL server.","description":"Gets a list of PostgreSQL + server administrators."}},{"name":"Microsoft.DBforPostgreSQL/servers/administrators/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Administrator of PostgreSQL server.","operation":"Create/Update + Administrator of PostgreSQL server.","description":"Creates or updates PostgreSQL + server administrator with the specified parameters."}},{"name":"Microsoft.DBforPostgreSQL/servers/administrators/delete","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Administrator of PostgreSQL server.","operation":"Delete + Administrator of PostgreSQL server.","description":"Deletes an existing administrator + of PostgreSQL server."}},{"name":"Microsoft.DBforPostgreSQL/register/action","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Microsoft Database For PostgreSQL Resource + Provider","operation":"Register PostgreSQL Resource Provider","description":"Register + PostgreSQL Resource Provider"}},{"name":"Microsoft.DBforPostgreSQL/servers/updateConfigurations/action","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server","operation":"Batch Update + Server Configurations","description":"Update configurations for the specified + server"}},{"name":"Microsoft.DBforPostgreSQL/checkNameAvailability/action","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server","operation":"Check Server + Name Availability","description":"Verify whether given server name is available + for provisioning worldwide for a given subscription."}},{"name":"Microsoft.DBforPostgreSQL/servers/configurations/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Configurations","operation":"List/Get Configurations","description":"Return + the list of configurations for a server or gets the properties for the specified + configuration."}},{"name":"Microsoft.DBforPostgreSQL/servers/configurations/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Configurations","operation":"Update Configuration","description":"Update + the value for the specified configuration"}},{"name":"Microsoft.DBforPostgreSQL/servers/virtualNetworkRules/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Virtual Network Rules","operation":"List/Get + Virtual Network Rule(s)","description":"Return the list of virtual network + rules or gets the properties for the specified virtual network rule."}},{"name":"Microsoft.DBforPostgreSQL/servers/virtualNetworkRules/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Virtual Network Rules","operation":"Create/Update + Virtual Network Rule","description":"Creates a virtual network rule with the + specified parameters or update the properties or tags for the specified virtual + network rule."}},{"name":"Microsoft.DBforPostgreSQL/servers/virtualNetworkRules/delete","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Virtual Network Rules","operation":"Delete + Virtual Network Rule","description":"Deletes an existing Virtual Network Rule"}},{"name":"Microsoft.DBforPostgreSQL/locations/azureAsyncOperation/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server Operation Results","operation":"Get + PostgreSQL Server Operation Results","description":"Return PostgreSQL Server + Operation Results"}},{"name":"Microsoft.DBforPostgreSQL/servers/databases/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Databases","operation":"List/Get + PostgreSQL Database","description":"Return the list of PostgreSQL Databases + or gets the properties for the specified Database."}},{"name":"Microsoft.DBforPostgreSQL/servers/databases/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Databases","operation":"Create/Update + PostgreSQL Database","description":"Creates a PostgreSQL Database with the + specified parameters or update the properties for the specified Database."}},{"name":"Microsoft.DBforPostgreSQL/servers/databases/delete","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Databases","operation":"Delete PostgreSQL + Database","description":"Deletes an existing PostgreSQL Database."}},{"name":"Microsoft.DBforPostgreSQL/servers/firewallRules/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Firewall Rules","operation":"List/Get Firewall + Rules","description":"Return the list of firewall rules for a server or gets + the properties for the specified firewall rule."}},{"name":"Microsoft.DBforPostgreSQL/servers/firewallRules/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Firewall Rules","operation":"Create/Update + Firewall Rule","description":"Creates a firewall rule with the specified parameters + or update an existing rule."}},{"name":"Microsoft.DBforPostgreSQL/servers/firewallRules/delete","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Firewall Rules","operation":"Delete Firewall + Rule","description":"Deletes an existing firewall rule."}},{"name":"Microsoft.DBforPostgreSQL/servers/logFiles/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL LogFiles","operation":"List/Get + PostgreSQL LogFiles","description":"Return the list of PostgreSQL LogFiles."}},{"name":"Microsoft.DBforPostgreSQL/performanceTiers/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Performance Tiers","operation":"List Performance + Tiers","description":"Returns the list of Performance Tiers available."}},{"name":"Microsoft.DBforPostgreSQL/operations/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Operations","operation":"List/Get + PostgreSQL Operations","description":"Return the list of PostgreSQL Operations."}},{"name":"Microsoft.DBforPostgreSQL/servers/providers/Microsoft.Insights/metricDefinitions/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Database Metric Definition","operation":"Get + database metric definitions","description":"Return types of metrics that are + available for databases"},"properties":{"serviceSpecification":{"metricSpecifications":[{"name":"cpu_percent","displayName":"CPU + percent","displayDescription":"CPU percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"memory_percent","displayName":"Memory + percent","displayDescription":"Memory percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"io_consumption_percent","displayName":"IO + percent","displayDescription":"IO percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"storage_percent","displayName":"Storage + percent","displayDescription":"Storage percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"storage_used","displayName":"Storage + used","displayDescription":"Storage used","unit":"Bytes","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"storage_limit","displayName":"Storage + limit","displayDescription":"Storage limit","unit":"Bytes","aggregationType":"Maximum","supportedAggregationTypes":["Maximum"]},{"name":"serverlog_storage_percent","displayName":"Server + Log storage percent","displayDescription":"Server Log storage percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"serverlog_storage_usage","displayName":"Server + Log storage used","displayDescription":"Server Log storage used","unit":"Bytes","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"serverlog_storage_limit","displayName":"Server + Log storage limit","displayDescription":"Server Log storage limit","unit":"Bytes","aggregationType":"Maximum","supportedAggregationTypes":["Maximum"]},{"name":"active_connections","displayName":"Active + Connections","displayDescription":"Active Connections","unit":"Count","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"connections_failed","displayName":"Failed + Connections","displayDescription":"Failed Connections","unit":"Count","aggregationType":"Total","supportedAggregationTypes":["Total"]},{"name":"backup_storage_used","displayName":"Backup + Storage used","displayDescription":"Backup Storage used","unit":"Bytes","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"],"supportedTimeGrainTypes":["PT15M","PT30M","PT1H","PT6H","PT12H","P1D"]},{"name":"network_bytes_egress","displayName":"Network + Out","displayDescription":"Network Out across active connections","unit":"Bytes","aggregationType":"Total","supportedAggregationTypes":["Total"]},{"name":"network_bytes_ingress","displayName":"Network + In","displayDescription":"Network In across active connections","unit":"Bytes","aggregationType":"Total","supportedAggregationTypes":["Total"]},{"name":"pg_replica_log_delay_in_seconds","displayName":"Replica + Lag","displayDescription":"Replica lag in seconds","unit":"Seconds","aggregationType":"Maximum","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"pg_replica_log_delay_in_bytes","displayName":"Max + Lag Across Replicas","displayDescription":"Lag in bytes of the most lagging + replica","unit":"Bytes","aggregationType":"Maximum","supportedAggregationTypes":["Average","Maximum","Minimum"]}]}}},{"name":"Microsoft.DBforPostgreSQL/servers/providers/Microsoft.Insights/logDefinitions/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"The log definition of servers","operation":"Read + server log definitions","description":"Gets the available logs for PostgreSQL + servers"},"properties":{"serviceSpecification":{"logSpecifications":[{"name":"PostgreSQLLogs","displayName":"PostgreSQL + Server Logs","blobDuration":"PT1H"},{"name":"QueryStoreRuntimeStatistics","displayName":"PostgreSQL + Query Store Runtime Statistics","blobDuration":"PT1H"},{"name":"QueryStoreWaitStatistics","displayName":"PostgreSQL + Query Store Wait Statistics","blobDuration":"PT1H"}]}}},{"name":"Microsoft.DBforPostgreSQL/servers/providers/Microsoft.Insights/diagnosticSettings/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Database Metric Definition","operation":"Read + diagnostic setting","description":"Gets the disagnostic setting for the resource"}},{"name":"Microsoft.DBforPostgreSQL/servers/providers/Microsoft.Insights/diagnosticSettings/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Database Metric Definition","operation":"Write + diagnostic setting","description":"Creates or updates the diagnostic setting + for the resource"}},{"name":"Microsoft.DBforPostgreSQL/serversv2/providers/Microsoft.Insights/metricDefinitions/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Database Metric Definition","operation":"Get + database metric definitions","description":"Return types of metrics that are + available for databases"},"properties":{"serviceSpecification":{"metricSpecifications":[{"name":"cpu_percent","displayName":"CPU + percent","displayDescription":"CPU percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"memory_percent","displayName":"Memory + percent","displayDescription":"Memory percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"iops","displayName":"IOPS","displayDescription":"IO + Operations per second","unit":"Count","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"storage_percent","displayName":"Storage + percent","displayDescription":"Storage percent","unit":"Percent","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"storage_used","displayName":"Storage + used","displayDescription":"Storage used","unit":"Bytes","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"active_connections","displayName":"Active + Connections","displayDescription":"Active Connections","unit":"Count","aggregationType":"Average","supportedAggregationTypes":["Average","Maximum","Minimum"]},{"name":"network_bytes_egress","displayName":"Network + Out","displayDescription":"Network Out across active connections","unit":"Bytes","aggregationType":"Total","supportedAggregationTypes":["Total"]},{"name":"network_bytes_ingress","displayName":"Network + In","displayDescription":"Network In across active connections","unit":"Bytes","aggregationType":"Total","supportedAggregationTypes":["Total"]}]}}},{"name":"Microsoft.DBforPostgreSQL/serversv2/providers/Microsoft.Insights/logDefinitions/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"The log definition of servers","operation":"Read + server log definitions","description":"Gets the available logs for PostgreSQL + servers"},"properties":{"serviceSpecification":{"logSpecifications":[{"name":"PostgreSQLLogs","displayName":"PostgreSQL + Server Logs","blobDuration":"PT1H"}]}}},{"name":"Microsoft.DBforPostgreSQL/serversv2/providers/Microsoft.Insights/diagnosticSettings/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Database Metric Definition","operation":"Read + diagnostic setting","description":"Gets the disagnostic setting for the resource"}},{"name":"Microsoft.DBforPostgreSQL/serversv2/providers/Microsoft.Insights/diagnosticSettings/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Database Metric Definition","operation":"Write + diagnostic setting","description":"Creates or updates the diagnostic setting + for the resource"}},{"name":"Microsoft.DBforPostgreSQL/serversv2/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server","operation":"List/Get PostgreSQL + Servers","description":"Return the list of servers or gets the properties + for the specified server."}},{"name":"Microsoft.DBforPostgreSQL/serversv2/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server","operation":"Create/Update + PostgreSQL Server","description":"Creates a server with the specified parameters + or update the properties or tags for the specified server."}},{"name":"Microsoft.DBforPostgreSQL/serversv2/delete","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server","operation":"Delete PostgreSQL + Server","description":"Deletes an existing server."}},{"name":"Microsoft.DBforPostgreSQL/serversv2/firewallRules/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Firewall Rules","operation":"List/Get Firewall + Rules","description":"Return the list of firewall rules for a server or gets + the properties for the specified firewall rule."}},{"name":"Microsoft.DBforPostgreSQL/serversv2/firewallRules/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Firewall Rules","operation":"Create/Update + Firewall Rule","description":"Creates a firewall rule with the specified parameters + or update an existing rule."}},{"name":"Microsoft.DBforPostgreSQL/serversv2/firewallRules/delete","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Firewall Rules","operation":"Delete Firewall + Rule","description":"Deletes an existing firewall rule."}},{"name":"Microsoft.DBforPostgreSQL/serversv2/configurations/read","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Configurations","operation":"List/Get Configurations","description":"Return + the list of configurations for a server or gets the properties for the specified + configuration."}},{"name":"Microsoft.DBforPostgreSQL/serversv2/configurations/write","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"Configurations","operation":"Update Configuration","description":"Update + the value for the specified configuration"}},{"name":"Microsoft.DBforPostgreSQL/serversv2/updateConfigurations/action","display":{"provider":"Microsoft + DB for PostgreSQL","resource":"PostgreSQL Server","operation":"Batch Update + Server Configurations","description":"Update configurations for the specified + server"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '28263' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:31:14 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/restart?api-version=2017-12-01 + response: + body: + string: '{"operation":"RestartElasticServer","startTime":"2020-02-24T06:31:16.863Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/390f3420-88a5-40ea-8c88-03b7c9e859d5?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '75' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:31:16 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/operationResults/390f3420-88a5-40ea-8c88-03b7c9e859d5?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/390f3420-88a5-40ea-8c88-03b7c9e859d5?api-version=2017-12-01 + response: + body: + string: '{"name":"390f3420-88a5-40ea-8c88-03b7c9e859d5","status":"InProgress","startTime":"2020-02-24T06:31:16.863Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:31:32 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/390f3420-88a5-40ea-8c88-03b7c9e859d5?api-version=2017-12-01 + response: + body: + string: '{"name":"390f3420-88a5-40ea-8c88-03b7c9e859d5","status":"InProgress","startTime":"2020-02-24T06:31:16.863Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:31:50 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/390f3420-88a5-40ea-8c88-03b7c9e859d5?api-version=2017-12-01 + response: + body: + string: '{"name":"390f3420-88a5-40ea-8c88-03b7c9e859d5","status":"InProgress","startTime":"2020-02-24T06:31:16.863Z"}' + headers: + cache-control: + - no-cache + content-length: + - '108' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:32:09 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/390f3420-88a5-40ea-8c88-03b7c9e859d5?api-version=2017-12-01 + response: + body: + string: '{"name":"390f3420-88a5-40ea-8c88-03b7c9e859d5","status":"Succeeded","startTime":"2020-02-24T06:31:16.863Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:32:26 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '2' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: PATCH + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345?api-version=2017-12-01 + response: + body: + string: '{"operation":"UpsertElasticServer","startTime":"2020-02-24T06:32:28.413Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/b35cdb14-c03c-481c-8276-eb8691c4f770?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '74' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:32:27 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/operationResults/b35cdb14-c03c-481c-8276-eb8691c4f770?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/b35cdb14-c03c-481c-8276-eb8691c4f770?api-version=2017-12-01 + response: + body: + string: '{"name":"b35cdb14-c03c-481c-8276-eb8691c4f770","status":"Succeeded","startTime":"2020-02-24T06:32:28.413Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:33:29 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345?api-version=2017-12-01 + response: + body: + string: '{"sku":{"name":"B_Gen5_2","tier":"Basic","family":"Gen5","capacity":2},"properties":{"administratorLogin":"cloudsa","storageProfile":{"storageMB":128000,"backupRetentionDays":7,"geoRedundantBackup":"Disabled","storageAutogrow":"Disabled"},"version":"9.6","sslEnforcement":"Enabled","userVisibleState":"Ready","fullyQualifiedDomainName":"testserver21345.postgres.database.azure.com","earliestRestoreDate":"2020-02-24T06:35:31.367+00:00","replicationRole":"None","masterServerId":"","replicaCapacity":5,"byokEnforcement":"Disabled"},"location":"eastus","tags":{"elastic_server":"1"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345","name":"testserver21345","type":"Microsoft.DBforPostgreSQL/servers"}' + headers: + cache-control: + - no-cache + content-length: + - '832' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:33:30 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"name": "name1", "type": "Microsoft.DBforMariaDB"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '51' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/checkNameAvailability?api-version=2017-12-01 + response: + body: + string: '{"nameAvailable":false,"reason":"AlreadyExists","message":"Specified + server name is already used"}' + headers: + cache-control: + - no-cache + content-length: + - '98' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:33:32 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/firewallRules/firewallrule?api-version=2017-12-01 + response: + body: + string: '{"operation":"DropElasticServerFirewallRule","startTime":"2020-02-24T06:33:35.193Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/54c37fcc-5577-4d73-af01-2a895f38d01b?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '84' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:33:34 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/operationResults/54c37fcc-5577-4d73-af01-2a895f38d01b?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14999' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/54c37fcc-5577-4d73-af01-2a895f38d01b?api-version=2017-12-01 + response: + body: + string: '{"name":"54c37fcc-5577-4d73-af01-2a895f38d01b","status":"Succeeded","startTime":"2020-02-24T06:33:35.193Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:33:53 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345/databases/testdatabase21345?api-version=2017-12-01 + response: + body: + string: '{"operation":"DropElasticServerDatabase","startTime":"2020-02-24T06:34:00.84Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/0db30ea8-2df1-495f-85df-8ecc01a65c54?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '79' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:34:00 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/operationResults/0db30ea8-2df1-495f-85df-8ecc01a65c54?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14999' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/0db30ea8-2df1-495f-85df-8ecc01a65c54?api-version=2017-12-01 + response: + body: + string: '{"name":"0db30ea8-2df1-495f-85df-8ecc01a65c54","status":"Succeeded","startTime":"2020-02-24T06:34:00.84Z"}' + headers: + cache-control: + - no-cache + content-length: + - '106' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:34:46 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_postgresql_test_postgresql562b10c0/providers/Microsoft.DBforPostgreSQL/servers/testserver21345?api-version=2017-12-01 + response: + body: + string: '{"operation":"DropElasticServer","startTime":"2020-02-24T06:34:51.05Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/0c0d7593-d2a9-40cf-ac2d-d1f3a151a6c2?api-version=2017-12-01 + cache-control: + - no-cache + content-length: + - '71' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:34:51 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/operationResults/0c0d7593-d2a9-40cf-ac2d-d1f3a151a6c2?api-version=2017-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14999' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-rdbms/2017-12-01 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.DBforPostgreSQL/locations/eastus/azureAsyncOperation/0c0d7593-d2a9-40cf-ac2d-d1f3a151a6c2?api-version=2017-12-01 + response: + body: + string: '{"name":"0c0d7593-d2a9-40cf-ac2d-d1f3a151a6c2","status":"Succeeded","startTime":"2020-02-24T06:34:51.05Z"}' + headers: + cache-control: + - no-cache + content-length: + - '106' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 24 Feb 2020 06:35:07 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/rdbms/azure-mgmt-rdbms/tests/test_cli_mgmt_mariadb.py b/sdk/rdbms/azure-mgmt-rdbms/tests/test_cli_mgmt_mariadb.py new file mode 100644 index 000000000000..2e776cc3192d --- /dev/null +++ b/sdk/rdbms/azure-mgmt-rdbms/tests/test_cli_mgmt_mariadb.py @@ -0,0 +1,407 @@ +# coding: utf-8 + +#------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +#-------------------------------------------------------------------------- + + +# TEST SCENARIO COVERAGE +# ---------------------- +# Methods Total : 49 +# Methods Covered : 49 +# Examples Total : 53 +# Examples Tested : 53 +# Coverage % : 100 +# ---------------------- + +import datetime as dt +import unittest + +import azure.mgmt.rdbms.mariadb +from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer + +AZURE_LOCATION = 'eastus' +ZERO = dt.timedelta(0) + +class UTC(dt.tzinfo): + """UTC""" + + def utcoffset(self, dt): + return ZERO + + def tzname(self, dt): + return "UTC" + + def dst(self, dt): + return ZERO + + +class MgmtMariaDBTest(AzureMgmtTestCase): + + def setUp(self): + super(MgmtMariaDBTest, self).setUp() + self.mgmt_client = self.create_mgmt_client( + azure.mgmt.rdbms.mariadb.MariaDBManagementClient + ) + + @ResourceGroupPreparer(location=AZURE_LOCATION) + def test_mariadb(self, resource_group): + + SERVER_NAME = "testserver21345" + SUBSCRIPTION_ID = self.settings.SUBSCRIPTION_ID + RESOURCE_GROUP = resource_group.name + SERVER_GEO_NAME = "servergeo21345" + SERVER_REPLICA_NAME = "serverreplica21345" + SERVER_POINT_NAME = "serverpoint21345" + DATABASE_NAME = "testdatabase21345" + FIREWALL_RULE_NAME = "firewallrule" + CONFIGURATION_NAME = "configuration" + VIRTUAL_NETWORK_RULE_NAME = "virutal_networkrule" + SECURITY_ALERT_POLICY_NAME = "securityalertpolicy" + LOCATION_NAME = "eastus" + PRIVATE_ENDPOINT_CONNECTION_NAME = "privateendpoint" + + # Create a new server[put] + BODY = { + "location": "eastus", + "properties": { + "administrator_login": "cloudsa", + "administrator_login_password": "pass$w0rd", + "ssl_enforcement": "Enabled", + "storage_profile": { + "storage_mb": "128000", + "backup_retention_days": "7", + "geo_redundant_backup": "Enabled" + }, + "create_mode": "Default" + }, + "sku": { + "name": "GP_Gen5_2", + "tier": "GeneralPurpose", + "capacity": "2", + "family": "Gen5" + }, + "tags": { + "elastic_server": "1" + } + } + result = self.mgmt_client.servers.create(resource_group.name, SERVER_NAME, BODY) + result = result.result() + + # Create a replica server[put] + BODY = { + "location": "eastus", + "properties": { + "create_mode": "Replica", + "source_server_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.DBforMariaDB/servers/" + SERVER_NAME + "" + } + } + result = self.mgmt_client.servers.create(resource_group.name, SERVER_REPLICA_NAME, BODY) + result = result.result() + + # Create a database as a point in time restore[put] + point_in_time = dt.datetime.now(tz=UTC()).isoformat() + BODY = { + "location": "eastus", + "properties": { + "restore_point_in_time": point_in_time, + "create_mode": "PointInTimeRestore", + "source_server_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.DBforMariaDB/servers/" + SERVER_NAME + "" + }, + "sku": { + "name": "GP_Gen5_2", + "tier": "GeneralPurpose", + "family": "Gen5", + "capacity": "2" + }, + "tags": { + "elastic_server": "1" + } + } + result = self.mgmt_client.servers.create(resource_group.name, SERVER_POINT_NAME, BODY) + result = result.result() + + # # Create a server as a geo restore [put] + # BODY = { + # "location": "eastus", + # "properties": { + # "create_mode": "GeoRestore", + # "source_server_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.DBforMariaDB/servers/" + SERVER_NAME + "" + # }, + # "sku": { + # "name": "GP_Gen5_2", + # "tier": "GeneralPurpose", + # "family": "Gen5", + # "capacity": "2" + # }, + # "tags": { + # "elastic_server": "1" + # } + # } + # result = self.mgmt_client.servers.create(resource_group.name, SERVER_GEO_NAME, BODY) + # result = result.result() + + # DatabaseCreate[put] + BODY = { + "properties": { + "charset": "utf8", + "collation": "utf8_general_ci" + } + } + result = self.mgmt_client.databases.create_or_update(resource_group.name, SERVER_NAME, DATABASE_NAME, BODY) + result = result.result() + + # FirewallRuleCreate[put] + # BODY = { + # "properties": { + # "start_ip_address": "0.0.0.0", + # "end_ip_address": "255.255.255.255" + # } + # } + START_IP_ADDRESS = "0.0.0.0" + END_IP_ADDRESS = "255.255.255.255" + result = self.mgmt_client.firewall_rules.create_or_update(resource_group.name, SERVER_NAME, FIREWALL_RULE_NAME, START_IP_ADDRESS, END_IP_ADDRESS) + result = result.result() + + # ConfigurationCreateOrUpdate[put] + # BODY = { + # "properties": { + # "value": "off", + # "source": "user-override" + # } + # } + # VALUE = "off" + # SOURCE = "user-override" + # result = self.mgmt_client.configurations.create_or_update(resource_group.name, SERVER_NAME, CONFIGURATION_NAME, VALUE, SOURCE) + # result = result.result() + + # # Create or update a virtual network rule[put] + # BODY = { + # "properties": { + # "ignore_missing_vnet_service_endpoint": False, + # "virtual_network_subnet_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + "" + # } + # } + # result = self.mgmt_client.virtual_network_rules.create_or_update(resource_group.name, SERVER_NAME, VIRTUAL_NETWORK_RULE_NAME, BODY) + # result = result.result() + + # Update a server's threat detection policy with all parameters[put] + BODY = { + "properties": { + "state": "Enabled", + "email_account_admins": True, + "email_addresses": [ + "testSecurityAlert@microsoft.com" + ], + "disabled_alerts": [ + "Access_Anomaly", + "Usage_Anomaly" + ], + "retention_days": "5", + "storage_account_access_key": "sdlfkjabc+sdlfkjsdlkfsjdfLDKFTERLKFDFKLjsdfksjdflsdkfD2342309432849328476458/3RSD==", + "storage_endpoint": "https://mystorage.blob.core.windows.net" + } + } + result = self.mgmt_client.server_security_alert_policies.create_or_update(resource_group.name, SERVER_NAME, BODY) + result = result.result() + + # Update a server's threat detection policy with minimal parameters[put] + BODY = { + "properties": { + "state": "Disabled", + "email_account_admins": True + } + } + result = self.mgmt_client.server_security_alert_policies.create_or_update(resource_group.name, SERVER_NAME, BODY) + result = result.result() + + # # Approve or reject a private endpoint connection with a given name.[put] + # TODO: private_endpoint_connections not exist + # BODY = { + # "properties": { + # "private_link_service_connection_state": { + # "status": "Approved", + # "description": "Approved by johndoe@contoso.com" + # } + # } + # } + # result = self.mgmt_client.private_endpoint_connections.create_or_update(resource_group.name, SERVER_NAME, PRIVATE_ENDPOINT_CONNECTION_NAME, BODY) + # result = result.result() + + # # RecommendedActionsGet[get] + # TODO: recommended_actions not exist. + # result = self.mgmt_client.recommended_actions.get(resource_group.name, SERVER_NAME, ADVISOR_NAME, RECOMMENDED_ACTION_NAME) + + # # RecommendedActionSessionOperationStatus[get] + # result = self.mgmt_client.location_based_recommended_action_sessions_operation_status.get(LOCATION_NAME, RECOMMENDED_ACTION_SESSIONS_AZURE_ASYNC_OPERATION_NAME) + + # # Gets private endpoint connection.[get] + # TODO: private_endpoint_connections not exist + # result = self.mgmt_client.private_endpoint_connections.get(resource_group.name, SERVER_NAME, PRIVATE_ENDPOINT_CONNECTION_NAME) + + # # RecommendedActionSessionResult[get] + # result = self.mgmt_client.location_based_recommended_action_sessions_result.list(LOCATION_NAME, RECOMMENDED_ACTION_SESSIONS_OPERATION_RESULT_NAME) + + # Get a server's threat detection policy[get] + result = self.mgmt_client.server_security_alert_policies.get(resource_group.name, SERVER_NAME) + + # # Gets a private link resource for MariaDB.[get] + # TODO: private_link_resources is not exist. + # result = self.mgmt_client.private_link_resources.get(resource_group.name, SERVER_NAME, PRIVATE_LINK_RESOURCE_NAME) + + # # Gets a virtual network rule[get] + # result = self.mgmt_client.virtual_network_rules.get(resource_group.name, SERVER_NAME, VIRTUAL_NETWORK_RULE_NAME) + + # # TopQueryStatisticsGet[get] + # TODO: top_query_statistics is not exist. + # result = self.mgmt_client.top_query_statistics.get(resource_group.name, SERVER_NAME, TOP_QUERY_STATISTIC_NAME) + + # # RecommendedActionsListByServer[get] + # TODO: recommended_actions is not exist. + # result = self.mgmt_client.recommended_actions.list_by_server(resource_group.name, SERVER_NAME, ADVISOR_NAME) + + # # WaitStatisticsGet[get] + # TODO: wait_statistics is not exist. + # result = self.mgmt_client.wait_statistics.get(resource_group.name, SERVER_NAME, WAIT_STATISTIC_NAME) + + # # ConfigurationGet[get] + # result = self.mgmt_client.configurations.get(resource_group.name, SERVER_NAME, CONFIGURATION_NAME) + + # FirewallRuleGet[get] + result = self.mgmt_client.firewall_rules.get(resource_group.name, SERVER_NAME, FIREWALL_RULE_NAME) + + # # QueryTextsGet[get] + # TODO: query_texts is not exist. + # result = self.mgmt_client.query_texts.get(resource_group.name, SERVER_NAME, QUERY_TEXT_NAME) + + # DatabaseGet[get] + result = self.mgmt_client.databases.get(resource_group.name, SERVER_NAME, DATABASE_NAME) + + # # AdvisorsGet[get] + # TODO: advisors is not exist. + # result = self.mgmt_client.advisors.get(resource_group.name, SERVER_NAME, ADVISOR_NAME) + + # # Gets list of private endpoint connections on a server.[get] + # TODO: private_endpoint_connections is not exist. + # result = self.mgmt_client.private_endpoint_connections.list_by_server(resource_group.name, SERVER_NAME) + + # # Gets private link resources for MariaDB.[get] + # TODO: private_link_resources is not exist. + # result = self.mgmt_client.private_link_resources.list_by_server(resource_group.name, SERVER_NAME) + + # List virtual network rules[get] + result = self.mgmt_client.virtual_network_rules.list_by_server(resource_group.name, SERVER_NAME) + + # # TopQueryStatisticsListByServer[get] + # TODO: top_query_statistics is not exist. + # result = self.mgmt_client.top_query_statistics.list_by_server(resource_group.name, SERVER_NAME) + + # # WaitStatisticsListByServer[get] + # TODO: wait_statistics is not exist. + # result = self.mgmt_client.wait_statistics.list_by_server(resource_group.name, SERVER_NAME) + + # ConfigurationList[get] + result = self.mgmt_client.configurations.list_by_server(resource_group.name, SERVER_NAME) + + # FirewallRuleList[get] + result = self.mgmt_client.firewall_rules.list_by_server(resource_group.name, SERVER_NAME) + + # # QueryTextsListByServer[get] + # TODO: query_texts is not exist. + # result = self.mgmt_client.query_texts.list_by_server(resource_group.name, SERVER_NAME) + + # DatabaseList[get] + result = self.mgmt_client.databases.list_by_server(resource_group.name, SERVER_NAME) + + # LogFileList[get] + result = self.mgmt_client.log_files.list_by_server(resource_group.name, SERVER_NAME) + + # # AdvisorsListByServer[get] + # TODO: advisors is not exist. + # result = self.mgmt_client.advisors.list_by_server(resource_group.name, SERVER_NAME) + + # # ReplicasListByServer[get] + # TODO: replicas is not exist. + # result = self.mgmt_client.replicas.list_by_server(resource_group.name, SERVER_NAME) + + # ServerGet[get] + result = self.mgmt_client.servers.get(resource_group.name, SERVER_NAME) + + # PerformanceTiersList[get] + result = self.mgmt_client.location_based_performance_tier.list(LOCATION_NAME) + + # ServerListByResourceGroup[get] + result = self.mgmt_client.servers.list_by_resource_group(resource_group.name) + + # ServerList[get] + result = self.mgmt_client.servers.list() + + # OperationList[get] + result = self.mgmt_client.operations.list() + + # # Update private endpoint connection Tags[patch] + # TODO: private_endpoint_connections is not exist. + # BODY = { + # "tags": { + # "key1": "val1", + # "key2": "val2" + # } + # } + # result = self.mgmt_client.private_endpoint_connections.update_tags(resource_group.name, SERVER_NAME, PRIVATE_ENDPOINT_CONNECTION_NAME, BODY) + # result = result.result() + + # # RecommendedActionSessionCreate[post] + # TODO: recommended action is not exist. + # result = self.mgmt_client..create_recommended_action_session(resource_group.name, SERVER_NAME, ADVISOR_NAME) + # result = result.result() + + # ServerRestart[post] + result = self.mgmt_client.servers.restart(resource_group.name, SERVER_NAME) + result = result.result() + + # ServerUpdate[patch] + BODY = { + "properties": { + "administrator_login_password": "newpa$$w0rd", + "ssl_enforcement": "Disabled" + } + } + result = self.mgmt_client.servers.update(resource_group.name, SERVER_NAME, BODY) + result = result.result() + + # NameAvailability[post] + # BODY = { + # "name": "name1", + # "type": "Microsoft.DBforMariaDB" + # } + NAME = "name1" + TYPE = "Microsoft.DBforMariaDB" + result = self.mgmt_client.check_name_availability.execute(NAME, TYPE) + + # # Deletes a private endpoint connection with a given name.[delete] + # TODO: private_endpoint_connections is not exist. + # result = self.mgmt_client.private_endpoint_connections.delete(resource_group.name, SERVER_NAME, PRIVATE_ENDPOINT_CONNECTION_NAME) + # result = result.result() + + # # Delete a virtual network rule[delete] + # result = self.mgmt_client.virtual_network_rules.delete(resource_group.name, SERVER_NAME, VIRTUAL_NETWORK_RULE_NAME) + # result = result.result() + + # FirewallRuleDelete[delete] + result = self.mgmt_client.firewall_rules.delete(resource_group.name, SERVER_NAME, FIREWALL_RULE_NAME) + result = result.result() + + # DatabaseDelete[delete] + result = self.mgmt_client.databases.delete(resource_group.name, SERVER_NAME, DATABASE_NAME) + result = result.result() + + # ServerDelete[delete] + result = self.mgmt_client.servers.delete(resource_group.name, SERVER_NAME) + result = result.result() + + +#------------------------------------------------------------------------------ +if __name__ == '__main__': + unittest.main() diff --git a/sdk/rdbms/azure-mgmt-rdbms/tests/test_cli_mgmt_mysql.py b/sdk/rdbms/azure-mgmt-rdbms/tests/test_cli_mgmt_mysql.py new file mode 100644 index 000000000000..76d7c23ed2c5 --- /dev/null +++ b/sdk/rdbms/azure-mgmt-rdbms/tests/test_cli_mgmt_mysql.py @@ -0,0 +1,310 @@ +# coding: utf-8 + +#------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +#-------------------------------------------------------------------------- + + +# TEST SCENARIO COVERAGE +# ---------------------- +# Methods Total : 29 +# Methods Covered : 29 +# Examples Total : 33 +# Examples Tested : 33 +# Coverage % : 100 +# ---------------------- + +import datetime as dt +import unittest + +import azure.mgmt.rdbms.mysql +from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer + +AZURE_LOCATION = 'eastus' +ZERO = dt.timedelta(0) + +class UTC(dt.tzinfo): + """UTC""" + + def utcoffset(self, dt): + return ZERO + + def tzname(self, dt): + return "UTC" + + def dst(self, dt): + return ZERO + + +class MgmtMySQLTest(AzureMgmtTestCase): + + def setUp(self): + super(MgmtMySQLTest, self).setUp() + self.mgmt_client = self.create_mgmt_client( + azure.mgmt.rdbms.mysql.MySQLManagementClient + ) + + @ResourceGroupPreparer(location=AZURE_LOCATION) + def test_mysql(self, resource_group): + + SERVER_NAME = "testserver2134" + SUBSCRIPTION_ID = self.settings.SUBSCRIPTION_ID + RESOURCE_GROUP = resource_group.name + SERVER_GEO_NAME = "servergeo2134" + SERVER_REPLICA_NAME = "serverreplica2134" + SERVER_POINT_NAME = "serverpoint2134" + DATABASE_NAME = "testdatabase2134" + FIREWALL_RULE_NAME = "firewallrule" + CONFIGURATION_NAME = "configuration" + VIRTUAL_NETWORK_RULE_NAME = "virutal_networkrule" + SECURITY_ALERT_POLICY_NAME = "securityalertpolicy" + LOCATION_NAME = "eastus" + + # Create a new server[put] + BODY = { + "location": "eastus", + "properties":{ + "administrator_login": "cloudsa", + "administrator_login_password": "pass$w0rd", + "ssl_enforcement": "Enabled", + "storage_profile": { + "storage_mb": "128000", + "backup_retention_days": "7", + "geo_redundant_backup": "Enabled" + }, + "create_mode": "Default" + }, + "sku": { + "name": "GP_Gen5_2", + "tier": "GeneralPurpose", + "capacity": "2", + "family": "Gen5" + }, + "tags": { + "elastic_server": "1" + } + } + result = self.mgmt_client.servers.create(resource_group.name, SERVER_NAME, BODY) + result = result.result() + + # Create a server as a geo restore [put] + # BODY = { + # "location": "eastus", + # "properties":{ + # "create_mode": "GeoRestore", + # "source_server_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.DBforMySQL/servers/" + SERVER_NAME + "" + # }, + # "sku": { + # "name": "GP_Gen5_2", + # "tier": "GeneralPurpose", + # "family": "Gen5", + # "capacity": "2" + # }, + # "tags": { + # "elastic_server": "1" + # } + # } + # result = self.mgmt_client.servers.create(resource_group.name, SERVER_GEO_NAME, BODY) + # result = result.result() + + # Create a replica server[put] + BODY = { + "location": "eastus", + "properties": { + "create_mode": "Replica", + "source_server_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.DBforMySQL/servers/" + SERVER_NAME + "" + } + } + result = self.mgmt_client.servers.create(resource_group.name, SERVER_REPLICA_NAME, BODY) + result = result.result() + + # Create a database as a point in time restore[put] + point_in_time = dt.datetime.now(tz=UTC()).isoformat() + BODY = { + "location": "eastus", + "properties":{ + "restore_point_in_time": point_in_time, + "create_mode": "PointInTimeRestore", + "source_server_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.DBforMySQL/servers/" + SERVER_NAME + "" + }, + "sku": { + "name": "GP_Gen5_2", + "tier": "GeneralPurpose", + "family": "Gen5", + "capacity": "2" + }, + "tags": { + "elastic_server": "1" + } + } + result = self.mgmt_client.servers.create(resource_group.name, SERVER_POINT_NAME, BODY) + result = result.result() + + # DatabaseCreate[put] + BODY = { + "properties": { + "charset": "utf8", + "collation": "utf8_general_ci" + } + } + result = self.mgmt_client.databases.create_or_update(resource_group.name, SERVER_NAME, DATABASE_NAME, BODY) + result = result.result() + + # FirewallRuleCreate[put] + # BODY = { + # "properties": { + # "start_ip_address": "0.0.0.0", + # "end_ip_address": "255.255.255.255" + # } + # } + START_IP_ADDRESS = "0.0.0.0" + END_IP_ADDRESS = "255.255.255.255" + result = self.mgmt_client.firewall_rules.create_or_update(resource_group.name, SERVER_NAME, FIREWALL_RULE_NAME, START_IP_ADDRESS, END_IP_ADDRESS) + result = result.result() + + # ConfigurationCreateOrUpdate[put] + # TODO: ERROR:{"name":"d97e92a0-5750-4c59-86f5-e5667b8ff035","status":"Failed","startTime":"2020-02-19T17:53:07.27Z","error":{"code":"ConfigurationNotExists","message":"The + # configuration ''configuration'' does not exist for MySQL server version 5.7."}} + # BODY = { + # "properties": { + # "value": "off", + # "source": "user-override" + # } + # } + # VALUE = "off" + # SOURCE = "user-override" + # result = self.mgmt_client.configurations.create_or_update(resource_group.name, SERVER_NAME, CONFIGURATION_NAME, VALUE, SOURCE) + # result = result.result() + + # Create or update a virtual network rule[put] + # TODO: need subnet + # BODY = { + # "ignore_missing_vnet_service_endpoint": False, + # "virtual_network_subnet_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + "" + # } + # result = self.mgmt_client.virtual_network_rules.create_or_update(resource_group.name, SERVER_NAME, VIRTUAL_NETWORK_RULE_NAME, BODY) + # result = result.result() + + # Update a server's threat detection policy with all parameters[put] + BODY = { + "properties": { + "state": "Enabled", + "email_account_admins": True, + "email_addresses": [ + "testSecurityAlert@microsoft.com" + ], + "disabled_alerts": [ + "Access_Anomaly", + "Usage_Anomaly" + ], + "retention_days": "5", + "storage_account_access_key": "sdlfkjabc+sdlfkjsdlkfsjdfLDKFTERLKFDFKLjsdfksjdflsdkfD2342309432849328476458/3RSD==", + "storage_endpoint": "https://mystorage.blob.core.windows.net" + } + } + result = self.mgmt_client.server_security_alert_policies.create_or_update(resource_group.name, SERVER_NAME, BODY) + result = result.result() + + # Update a server's threat detection policy with minimal parameters[put] + BODY = { + "properties": { + "state": "Disabled", + "email_account_admins": True + } + } + result = self.mgmt_client.server_security_alert_policies.create_or_update(resource_group.name, SERVER_NAME, BODY) + result = result.result() + + # Get a server's threat detection policy[get] + result = self.mgmt_client.server_security_alert_policies.get(resource_group.name, SERVER_NAME) + + # # Gets a virtual network rule[get] + # result = self.mgmt_client.virtual_network_rules.get(resource_group.name, SERVER_NAME, VIRTUAL_NETWORK_RULE_NAME) + + # # ConfigurationGet[get] + # result = self.mgmt_client.configurations.get(resource_group.name, SERVER_NAME, CONFIGURATION_NAME) + + # FirewallRuleGet[get] + result = self.mgmt_client.firewall_rules.get(resource_group.name, SERVER_NAME, FIREWALL_RULE_NAME) + + # DatabaseGet[get] + result = self.mgmt_client.databases.get(resource_group.name, SERVER_NAME, DATABASE_NAME) + + # # List virtual network rules[get] + # result = self.mgmt_client.virtual_network_rules.list_by_server(resource_group.name, SERVER_NAME) + + # ConfigurationList[get] + result = self.mgmt_client.configurations.list_by_server(resource_group.name, SERVER_NAME) + + # FirewallRuleList[get] + result = self.mgmt_client.firewall_rules.list_by_server(resource_group.name, SERVER_NAME) + + # DatabaseList[get] + result = self.mgmt_client.databases.list_by_server(resource_group.name, SERVER_NAME) + + # LogFileList[get] + result = self.mgmt_client.log_files.list_by_server(resource_group.name, SERVER_NAME) + + # ReplicasListByServer[get] + result = self.mgmt_client.replicas.list_by_server(resource_group.name, SERVER_NAME) + + # ServerGet[get] + result = self.mgmt_client.servers.get(resource_group.name, SERVER_NAME) + + # PerformanceTiersList[get] + result = self.mgmt_client.location_based_performance_tier.list(LOCATION_NAME) + + # ServerListByResourceGroup[get] + result = self.mgmt_client.servers.list_by_resource_group(resource_group.name) + + # ServerList[get] + result = self.mgmt_client.servers.list() + + # OperationList[get] + result = self.mgmt_client.operations.list() + + # ServerRestart[post] + result = self.mgmt_client.servers.restart(resource_group.name, SERVER_NAME) + result = result.result() + + # ServerUpdate[patch] + BODY = { + "properties": { + "administrator_login_password": "newpa$$w0rd", + "ssl_enforcement": "Disabled" + } + } + result = self.mgmt_client.servers.update(resource_group.name, SERVER_NAME, BODY) + result = result.result() + + # NameAvailability[post] + # BODY = { + # "name": "name1", + # "type": "Microsoft.DBforMySQL" + # } + NAME = "name1" + TYPE = "Microsoft.DBforMySQL" + result = self.mgmt_client.check_name_availability.execute(NAME, TYPE) + + # # Delete a virtual network rule[delete] + # result = self.mgmt_client.virtual_network_rules.delete(resource_group.name, SERVER_NAME, VIRTUAL_NETWORK_RULE_NAME) + # result = result.result() + + # FirewallRuleDelete[delete] + result = self.mgmt_client.firewall_rules.delete(resource_group.name, SERVER_NAME, FIREWALL_RULE_NAME) + result = result.result() + + # DatabaseDelete[delete] + result = self.mgmt_client.databases.delete(resource_group.name, SERVER_NAME, DATABASE_NAME) + result = result.result() + + # ServerDelete[delete] + result = self.mgmt_client.servers.delete(resource_group.name, SERVER_NAME) + result = result.result() + + +#------------------------------------------------------------------------------ +if __name__ == '__main__': + unittest.main() diff --git a/sdk/rdbms/azure-mgmt-rdbms/tests/test_cli_mgmt_postgresql.py b/sdk/rdbms/azure-mgmt-rdbms/tests/test_cli_mgmt_postgresql.py new file mode 100644 index 000000000000..71c3acaa422c --- /dev/null +++ b/sdk/rdbms/azure-mgmt-rdbms/tests/test_cli_mgmt_postgresql.py @@ -0,0 +1,297 @@ +# coding: utf-8 + +#------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +#-------------------------------------------------------------------------- + + +# TEST SCENARIO COVERAGE +# ---------------------- +# Methods Total : 29 +# Methods Covered : 29 +# Examples Total : 33 +# Examples Tested : 32 +# Coverage % : 96.96969696969697 +# ---------------------- + +import datetime as dt +import unittest + +import azure.mgmt.rdbms.postgresql +from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer + +AZURE_LOCATION = 'eastus' +ZERO = dt.timedelta(0) + +class UTC(dt.tzinfo): + """UTC""" + + def utcoffset(self, dt): + return ZERO + + def tzname(self, dt): + return "UTC" + + def dst(self, dt): + return ZERO + +class MgmtPostgreSQLTest(AzureMgmtTestCase): + + def setUp(self): + super(MgmtPostgreSQLTest, self).setUp() + self.mgmt_client = self.create_mgmt_client( + azure.mgmt.rdbms.postgresql.PostgreSQLManagementClient + ) + + @ResourceGroupPreparer(location=AZURE_LOCATION) + def test_postgresql(self, resource_group): + + SERVER_NAME = "testserver21345" + SUBSCRIPTION_ID = self.settings.SUBSCRIPTION_ID + RESOURCE_GROUP = resource_group.name + SERVER_GEO_NAME = "servergeo21345" + SERVER_REPLICA_NAME = "serverreplica21345" + SERVER_POINT_NAME = "serverpoint21345" + DATABASE_NAME = "testdatabase21345" + FIREWALL_RULE_NAME = "firewallrule" + CONFIGURATION_NAME = "configuration" + VIRTUAL_NETWORK_RULE_NAME = "virutal_networkrule" + SECURITY_ALERT_POLICY_NAME = "securityalertpolicy" + LOCATION_NAME = "eastus" + PRIVATE_ENDPOINT_CONNECTION_NAME = "privateendpoint" + + # Create a new server[put] + BODY = { + "location": "eastus", + "properties": { + "administrator_login": "cloudsa", + "administrator_login_password": "pa$$w0rd", + "ssl_enforcement": "Enabled", + "storage_profile": { + "storage_mb": "128000", + "backup_retention_days": "7", + "geo_redundant_backup": "Disabled" + }, + "create_mode": "Default" + }, + "sku": { + "name": "B_Gen5_2", + "tier": "Basic", + "capacity": "2", + "family": "Gen5" + }, + "tags": { + "elastic_server": "1" + } + } + result = self.mgmt_client.servers.create(resource_group.name, SERVER_NAME, BODY) + result = result.result() + + # Create a replica server[put] + # TODO: raise error + # BODY = { + # "location": "eastus", + # "properties": { + # "create_mode": "Replica", + # "source_server_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.DBforPostgreSQL/servers/" + SERVER_NAME + "" + # }, + # "sku": { + # "name": "GP_Gen5_2", + # "tier": "GeneralPurpose", + # "family": "Gen5", + # "capacity": "2" + # } + # } + # result = self.mgmt_client.servers.create(resource_group.name, SERVER_REPLICA_NAME, BODY) + # result = result.result() + + # Create a database as a point in time restore[put] + # TODO: point_in_time error + # point_in_time = dt.datetime.now(tz=UTC()).isoformat() + # BODY = { + # "location": "eastus", + # "properties": { + # "restore_point_in_time": point_in_time, + # "create_mode": "PointInTimeRestore", + # "source_server_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.DBforPostgreSQL/servers/" + SERVER_NAME + "" + # }, + # "sku": { + # "name": "B_Gen5_2", + # "tier": "Basic", + # "capacity": "2", + # "family": "Gen5" + # }, + # "tags": { + # "elastic_server": "1" + # } + # } + # result = self.mgmt_client.servers.create(resource_group.name, SERVER_NAME, BODY) + # result = result.result() + + # DatabaseCreate[put] + # BODY = { + # "properties": { + # "charset": "UTF8", + # "collation": "English_United States.1252" + # } + # } + CHARSET = "UTF8" + COLLATION = "English_United States.1252" + result = self.mgmt_client.databases.create_or_update(resource_group.name, SERVER_NAME, DATABASE_NAME, CHARSET, COLLATION) + result = result.result() + + # FirewallRuleCreate[put] + # BODY = { + # "properties": { + # "start_ip_address": "0.0.0.0", + # "end_ip_address": "255.255.255.255" + # } + # } + START_IP_ADDRESS = "0.0.0.0" + END_IP_ADDRESS = "255.255.255.255" + result = self.mgmt_client.firewall_rules.create_or_update(resource_group.name, SERVER_NAME, FIREWALL_RULE_NAME, START_IP_ADDRESS, END_IP_ADDRESS) + result = result.result() + + # # ConfigurationCreateOrUpdate[put] + # BODY = { + # "properties": { + # "value": "off", + # "source": "user-override" + # } + # } + # result = self.mgmt_client.configurations.create_or_update(resource_group.name, SERVER_NAME, CONFIGURATION_NAME, BODY) + # result = result.result() + + # # Create or update a virtual network rule[put] + # BODY = { + # "properties": { + # "ignore_missing_vnet_service_endpoint": False, + # "virtual_network_subnet_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VIRTUAL_NETWORK_NAME + "/subnets/" + SUBNET_NAME + "" + # } + # } + # result = self.mgmt_client.virtual_network_rules.create_or_update(resource_group.name, SERVER_NAME, VIRTUAL_NETWORK_RULE_NAME, BODY) + # result = result.result() + + # Update a server's threat detection policy with all parameters[put] + # BODY = { + # "properties": { + # "state": "Enabled", + # "email_account_admins": True, + # "email_addresses": [ + # "testSecurityAlert@microsoft.com" + # ], + # "disabled_alerts": [ + # "Access_Anomaly", + # "Usage_Anomaly" + # ], + # "retention_days": "5", + # "storage_account_access_key": "sdlfkjabc+sdlfkjsdlkfsjdfLDKFTERLKFDFKLjsdfksjdflsdkfD2342309432849328476458/3RSD==", + # "storage_endpoint": "https://mystorage.blob.core.windows.net" + # } + # } + # result = self.mgmt_client.server_security_alert_policies.create_or_update(resource_group.name, SERVER_NAME, BODY) + # result = result.result() + + # Update a server's threat detection policy with minimal parameters[put] + # BODY = { + # "properties": { + # "state": "Disabled", + # "email_account_admins": True + # } + # } + # result = self.mgmt_client.server_security_alert_policies.create_or_update(resource_group.name, SERVER_NAME, BODY) + # result = result.result() + + # # Get a server's threat detection policy[get] + # result = self.mgmt_client.server_security_alert_policies.get(resource_group.name, SERVER_NAME) + + # # Gets a virtual network rule[get] + # result = self.mgmt_client.virtual_network_rules.get(resource_group.name, SERVER_NAME, VIRTUAL_NETWORK_RULE_NAME) + + # # ConfigurationGet[get] + # result = self.mgmt_client.configurations.get(resource_group.name, SERVER_NAME, CONFIGURATION_NAME) + + # FirewallRuleGet[get] + result = self.mgmt_client.firewall_rules.get(resource_group.name, SERVER_NAME, FIREWALL_RULE_NAME) + + # DatabaseGet[get] + result = self.mgmt_client.databases.get(resource_group.name, SERVER_NAME, DATABASE_NAME) + + # List virtual network rules[get] + result = self.mgmt_client.virtual_network_rules.list_by_server(resource_group.name, SERVER_NAME) + + # ConfigurationList[get] + result = self.mgmt_client.configurations.list_by_server(resource_group.name, SERVER_NAME) + + # FirewallRuleList[get] + result = self.mgmt_client.firewall_rules.list_by_server(resource_group.name, SERVER_NAME) + + # DatabaseList[get] + result = self.mgmt_client.databases.list_by_server(resource_group.name, SERVER_NAME) + + # LogFileList[get] + result = self.mgmt_client.log_files.list_by_server(resource_group.name, SERVER_NAME) + + # ReplicasListByServer[get] + result = self.mgmt_client.replicas.list_by_server(resource_group.name, SERVER_NAME) + + # ServerGet[get] + result = self.mgmt_client.servers.get(resource_group.name, SERVER_NAME) + + # PerformanceTiersList[get] + result = self.mgmt_client.location_based_performance_tier.list(LOCATION_NAME) + + # ServerListByResourceGroup[get] + result = self.mgmt_client.servers.list_by_resource_group(resource_group.name) + + # ServerList[get] + result = self.mgmt_client.servers.list() + + # OperationList[get] + result = self.mgmt_client.operations.list() + + # ServerRestart[post] + result = self.mgmt_client.servers.restart(resource_group.name, SERVER_NAME) + result = result.result() + + # ServerUpdate[patch] + BODY = { + "properties": { + "administrator_login_password": "newpa$$w0rd", + "ssl_enforcement": "Enabled" + } + } + result = self.mgmt_client.servers.update(resource_group.name, SERVER_NAME, BODY) + result = result.result() + + # NameAvailability[post] + # BODY = { + # "name": "name1", + # "type": "Microsoft.DBforPostgreSQL" + # } + NAME = "name1" + TYPE = "Microsoft.DBforMariaDB" + result = self.mgmt_client.check_name_availability.execute(NAME, TYPE) + + # # Delete a virtual network rule[delete] + # result = self.mgmt_client.virtual_network_rules.delete(resource_group.name, SERVER_NAME, VIRTUAL_NETWORK_RULE_NAME) + # result = result.result() + + # FirewallRuleDelete[delete] + result = self.mgmt_client.firewall_rules.delete(resource_group.name, SERVER_NAME, FIREWALL_RULE_NAME) + result = result.result() + + # DatabaseDelete[delete] + result = self.mgmt_client.databases.delete(resource_group.name, SERVER_NAME, DATABASE_NAME) + result = result.result() + + # ServerDelete[delete] + result = self.mgmt_client.servers.delete(resource_group.name, SERVER_NAME) + result = result.result() + + +#------------------------------------------------------------------------------ +if __name__ == '__main__': + unittest.main() diff --git a/sdk/relay/azure-mgmt-relay/tests/recordings/test_azure_mgmt_relay_namespace.test_relay_namespace_curd.yaml b/sdk/relay/azure-mgmt-relay/tests/recordings/test_azure_mgmt_relay_namespace.test_relay_namespace_curd.yaml index 8a866ff9f030..3dee6cb0370d 100644 --- a/sdk/relay/azure-mgmt-relay/tests/recordings/test_azure_mgmt_relay_namespace.test_relay_namespace_curd.yaml +++ b/sdk/relay/azure-mgmt-relay/tests/recordings/test_azure_mgmt_relay_namespace.test_relay_namespace_curd.yaml @@ -3,592 +3,953 @@ interactions: body: '{"location": "westus", "tags": {"tag1": "value1", "tag2": "value2"}, "sku": {"name": "Standard", "tier": "Standard"}}' headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['117'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '117' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace?api-version=2017-04-01 response: - body: {string: '{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace","name":"testingpythontestcasenamespace","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{"tag1":"value1","tag2":"value2"},"properties":{"provisioningState":"Created","metricId":"00000000-0000-0000-0000-000000000000:testingpythontestcasenamespace","createdAt":"2018-02-02T10:32:59.077Z","updatedAt":"2018-02-02T10:32:59.077Z","serviceBusEndpoint":"https://testingpythontestcasenamespace.servicebus.windows.net:443/","status":"Activating"}}'} - headers: - cache-control: [no-cache] - content-length: ['707'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:33:00 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1196'] - status: {code: 200, message: OK} + body: + string: '{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace","name":"testingpythontestcasenamespace","type":"Microsoft.Relay/Namespaces","location":"West + US","tags":{"tag1":"value1","tag2":"value2"},"properties":{"provisioningState":"Created","metricId":"00000000-0000-0000-0000-000000000000:testingpythontestcasenamespace","createdAt":"2020-02-28T04:04:17.637Z","updatedAt":"2020-02-28T04:04:17.637Z","serviceBusEndpoint":"https://testingpythontestcasenamespace.servicebus.windows.net:443/","status":"Activating"}}' + headers: + cache-control: + - no-cache + content-length: + - '707' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:04:19 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1192' + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace?api-version=2017-04-01 response: - body: {string: '{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace","name":"testingpythontestcasenamespace","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{"tag1":"value1","tag2":"value2"},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:testingpythontestcasenamespace","createdAt":"2018-02-02T10:32:59.077Z","updatedAt":"2018-02-02T10:33:25.417Z","serviceBusEndpoint":"https://testingpythontestcasenamespace.servicebus.windows.net:443/","status":"Active"}}'} - headers: - cache-control: [no-cache] - content-length: ['705'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:33:31 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} + body: + string: '{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace","name":"testingpythontestcasenamespace","type":"Microsoft.Relay/Namespaces","location":"West + US","tags":{"tag1":"value1","tag2":"value2"},"properties":{"provisioningState":"Created","metricId":"00000000-0000-0000-0000-000000000000:testingpythontestcasenamespace","createdAt":"2020-02-28T04:04:17.637Z","updatedAt":"2020-02-28T04:04:17.637Z","serviceBusEndpoint":"https://testingpythontestcasenamespace.servicebus.windows.net:443/","status":"Activating"}}' + headers: + cache-control: + - no-cache + content-length: + - '707' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:04:51 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace?api-version=2017-04-01 response: - body: {string: '{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace","name":"testingpythontestcasenamespace","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{"tag1":"value1","tag2":"value2"},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:testingpythontestcasenamespace","createdAt":"2018-02-02T10:32:59.077Z","updatedAt":"2018-02-02T10:33:25.417Z","serviceBusEndpoint":"https://testingpythontestcasenamespace.servicebus.windows.net:443/","status":"Active"}}'} - headers: - cache-control: [no-cache] - content-length: ['705'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:33:33 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} + body: + string: '{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace","name":"testingpythontestcasenamespace","type":"Microsoft.Relay/Namespaces","location":"West + US","tags":{"tag1":"value1","tag2":"value2"},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:testingpythontestcasenamespace","createdAt":"2020-02-28T04:04:17.637Z","updatedAt":"2020-02-28T04:05:01.543Z","serviceBusEndpoint":"https://testingpythontestcasenamespace.servicebus.windows.net:443/","status":"Active"}}' + headers: + cache-control: + - no-cache + content-length: + - '705' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:05:24 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace?api-version=2017-04-01 + response: + body: + string: '{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace","name":"testingpythontestcasenamespace","type":"Microsoft.Relay/Namespaces","location":"West + US","tags":{"tag1":"value1","tag2":"value2"},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:testingpythontestcasenamespace","createdAt":"2020-02-28T04:04:17.637Z","updatedAt":"2020-02-28T04:05:01.543Z","serviceBusEndpoint":"https://testingpythontestcasenamespace.servicebus.windows.net:443/","status":"Active"}}' + headers: + cache-control: + - no-cache + content-length: + - '705' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:05:26 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"tags": {"tags": "{''tag1'': ''value1'', ''tag2'': ''value2''}"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '58' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: PATCH + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace?api-version=2017-04-01 + response: + body: + string: '{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace","name":"testingpythontestcasenamespace","type":"Microsoft.Relay/Namespaces","location":"West + US","tags":{"tags":"{''tag1'': ''value1'', ''tag2'': ''value2''}"},"properties":{"provisioningState":"Updating","metricId":"00000000-0000-0000-0000-000000000000:testingpythontestcasenamespace","createdAt":"2020-02-28T04:04:17.637Z","updatedAt":"2020-02-28T04:05:28.697Z","serviceBusEndpoint":"https://testingpythontestcasenamespace.servicebus.windows.net:443/","status":"Activating"}}' + headers: + cache-control: + - no-cache + content-length: + - '722' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:05:31 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1193' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces?api-version=2017-04-01 response: - body: {string: '{"value":[{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace","name":"testingpythontestcasenamespace","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{"tag1":"value1","tag2":"value2"},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:testingpythontestcasenamespace","createdAt":"2018-02-02T10:32:59.077Z","updatedAt":"2018-02-02T10:33:25.417Z","serviceBusEndpoint":"https://testingpythontestcasenamespace.servicebus.windows.net:443/","status":"Active"}}]}'} - headers: - cache-control: [no-cache] - content-length: ['717'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:33:32 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} + body: + string: '{"value":[{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace","name":"testingpythontestcasenamespace","type":"Microsoft.Relay/Namespaces","location":"West + US","tags":{"tags":"{''tag1'': ''value1'', ''tag2'': ''value2''}"},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:testingpythontestcasenamespace","createdAt":"2020-02-28T04:04:17.637Z","updatedAt":"2020-02-28T04:05:29.923Z","serviceBusEndpoint":"https://testingpythontestcasenamespace.servicebus.windows.net:443/","status":"Active"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '731' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:05:32 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Relay/namespaces?api-version=2017-04-01 response: - body: {string: '{"value":[{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk5162/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk8937","name":"Relay-Namespace-onesdk8937","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk8937","createdAt":"2017-04-26T17:53:09.897Z","updatedAt":"2017-08-25T02:09:36.86Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk8937.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr9128/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr4056","name":"Relay-Namespace-pwr4056","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr4056","createdAt":"2017-04-05T02:14:55.927Z","updatedAt":"2017-08-25T02:01:52.22Z","serviceBusEndpoint":"https://Relay-Namespace-pwr4056.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk4600/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk3381","name":"Relay-Namespace-onesdk3381","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk3381","createdAt":"2017-04-25T22:35:35.627Z","updatedAt":"2017-08-25T02:08:19.85Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk3381.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk2915/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk1432","name":"Relay-Namespace-onesdk1432","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk1432","createdAt":"2017-04-24T19:34:08Z","updatedAt":"2017-08-25T02:16:06.533Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk1432.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk4274/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk1742","name":"Relay-Namespace-onesdk1742","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk1742","createdAt":"2017-04-26T02:48:50.597Z","updatedAt":"2017-08-25T02:16:20.397Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk1742.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8910/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr5533","name":"Relay-Namespace-pwr5533","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr5533","createdAt":"2017-04-05T22:09:14.36Z","updatedAt":"2017-08-25T02:12:03.343Z","serviceBusEndpoint":"https://Relay-Namespace-pwr5533.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk188/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk1970","name":"Relay-Namespace-onesdk1970","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk1970","createdAt":"2017-07-27T07:25:41.493Z","updatedAt":"2017-07-27T07:26:06.78Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk1970.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr947/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr624","name":"Relay-Namespace-pwr624","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr624","createdAt":"2017-04-05T01:07:15.777Z","updatedAt":"2017-08-25T02:11:26.147Z","serviceBusEndpoint":"https://Relay-Namespace-pwr624.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk8396/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk3582","name":"Relay-Namespace-onesdk3582","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk3582","createdAt":"2017-04-13T22:44:05.633Z","updatedAt":"2017-08-25T02:06:58.387Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk3582.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk8188/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk2554","name":"Relay-Namespace-onesdk2554","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk2554","createdAt":"2017-07-27T05:52:21.57Z","updatedAt":"2017-07-27T05:52:47.43Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk2554.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk8518/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk4932","name":"Relay-Namespace-onesdk4932","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk4932","createdAt":"2017-04-24T19:55:15.703Z","updatedAt":"2017-08-25T02:09:13.373Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk4932.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8097/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr1514","name":"Relay-Namespace-pwr1514","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr1514","createdAt":"2017-04-05T02:20:41.163Z","updatedAt":"2017-08-25T02:03:05.953Z","serviceBusEndpoint":"https://Relay-Namespace-pwr1514.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr4786/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr1958","name":"Relay-Namespace-pwr1958","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr1958","createdAt":"2017-04-05T00:36:55.72Z","updatedAt":"2017-08-25T02:11:25.85Z","serviceBusEndpoint":"https://Relay-Namespace-pwr1958.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk7420/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk2896","name":"Relay-Namespace-onesdk2896","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk2896","createdAt":"2017-08-01T22:16:42.067Z","updatedAt":"2017-08-01T22:17:12.097Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk2896.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr9536/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr8822","name":"Relay-Namespace-pwr8822","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr8822","createdAt":"2017-04-05T17:43:16.04Z","updatedAt":"2017-08-25T02:03:13.467Z","serviceBusEndpoint":"https://Relay-Namespace-pwr8822.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk2533/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk2891","name":"Relay-Namespace-onesdk2891","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk2891","createdAt":"2017-04-25T04:11:35.397Z","updatedAt":"2017-08-25T02:16:11.68Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk2891.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/relayrg/providers/Microsoft.Relay/namespaces/onemorerelay","name":"onemorerelay","type":"Microsoft.Relay/Namespaces","location":"North - Central US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:onemorerelay","createdAt":"2016-10-18T20:55:59.42Z","updatedAt":"2016-10-18T20:56:22.5Z","serviceBusEndpoint":"https://onemorerelay.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk7593/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk3261","name":"Relay-Namespace-onesdk3261","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk3261","createdAt":"2017-04-25T04:17:55.45Z","updatedAt":"2017-08-25T02:08:14.417Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk3261.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr9726/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr4015","name":"Relay-Namespace-pwr4015","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr4015","createdAt":"2017-04-05T21:45:57.567Z","updatedAt":"2017-08-25T02:03:17.617Z","serviceBusEndpoint":"https://Relay-Namespace-pwr4015.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr1081/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr1855","name":"Relay-Namespace-pwr1855","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr1855","createdAt":"2017-04-05T01:54:47.513Z","updatedAt":"2017-08-25T02:03:06.07Z","serviceBusEndpoint":"https://Relay-Namespace-pwr1855.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk9995/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk106","name":"Relay-Namespace-onesdk106","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk106","createdAt":"2017-04-26T23:42:21.317Z","updatedAt":"2017-08-25T02:10:44.023Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk106.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8470/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr5463","name":"Relay-Namespace-pwr5463","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr5463","createdAt":"2017-04-05T00:27:44.11Z","updatedAt":"2017-08-25T02:01:48.44Z","serviceBusEndpoint":"https://Relay-Namespace-pwr5463.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ARM-ManagementClient-Testing-RG/providers/Microsoft.Relay/namespaces/relay-brazil","name":"relay-brazil","type":"Microsoft.Relay/Namespaces","location":"Brazil - South","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-brazil","createdAt":"2017-07-13T02:28:53.723Z","updatedAt":"2017-08-15T23:49:19.28Z","serviceBusEndpoint":"https://relay-brazil.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr7980/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr5473","name":"Relay-Namespace-pwr5473","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr5473","createdAt":"2017-04-05T00:32:54.393Z","updatedAt":"2017-08-25T02:03:01.477Z","serviceBusEndpoint":"https://Relay-Namespace-pwr5473.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk8043/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk830","name":"Relay-Namespace-onesdk830","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk830","createdAt":"2017-04-26T00:47:29.47Z","updatedAt":"2017-08-25T02:16:19.41Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk830.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk9702/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk3133","name":"Relay-Namespace-onesdk3133","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk3133","createdAt":"2017-07-27T04:44:46.003Z","updatedAt":"2017-07-27T04:45:12.23Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk3133.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr3622/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr9749","name":"Relay-Namespace-pwr9749","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr9749","createdAt":"2017-04-05T08:04:16.437Z","updatedAt":"2017-08-25T02:12:02.47Z","serviceBusEndpoint":"https://Relay-Namespace-pwr9749.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr6478/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr504","name":"Relay-Namespace-pwr504","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr504","createdAt":"2017-04-05T07:41:04.787Z","updatedAt":"2017-08-25T02:03:11.907Z","serviceBusEndpoint":"https://Relay-Namespace-pwr504.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk1975/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk8449","name":"Relay-Namespace-onesdk8449","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk8449","createdAt":"2017-04-24T19:47:30.323Z","updatedAt":"2017-08-25T02:08:07.6Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk8449.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk3034/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk3971","name":"Relay-Namespace-onesdk3971","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk3971","createdAt":"2017-07-27T05:59:00.113Z","updatedAt":"2017-07-27T05:59:27.41Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk3971.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk6394/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk8505","name":"Relay-Namespace-onesdk8505","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk8505","createdAt":"2017-07-27T17:09:15.827Z","updatedAt":"2017-07-27T17:09:42.47Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk8505.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk3246/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk3825","name":"Relay-Namespace-onesdk3825","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk3825","createdAt":"2017-04-25T04:00:37.873Z","updatedAt":"2017-08-25T02:09:21.457Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk3825.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr649/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr515","name":"Relay-Namespace-pwr515","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr515","createdAt":"2017-04-05T07:56:55.417Z","updatedAt":"2017-08-25T02:01:57.043Z","serviceBusEndpoint":"https://Relay-Namespace-pwr515.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr7876/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr15","name":"Relay-Namespace-pwr15","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr15","createdAt":"2017-04-05T20:13:22.3Z","updatedAt":"2017-08-25T02:03:16.867Z","serviceBusEndpoint":"https://Relay-Namespace-pwr15.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk6628/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk5141","name":"Relay-Namespace-onesdk5141","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk5141","createdAt":"2017-07-27T06:03:51.957Z","updatedAt":"2017-07-27T06:04:16.707Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk5141.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk5456/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk3941","name":"Relay-Namespace-onesdk3941","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk3941","createdAt":"2017-04-27T00:04:10.53Z","updatedAt":"2017-08-25T02:16:32.503Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk3941.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr7442/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr6074","name":"Relay-Namespace-pwr6074","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr6074","createdAt":"2017-04-05T04:12:18.55Z","updatedAt":"2017-08-25T02:03:07.663Z","serviceBusEndpoint":"https://Relay-Namespace-pwr6074.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk3564/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk8684","name":"Relay-Namespace-onesdk8684","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk8684","createdAt":"2017-04-12T01:19:47.887Z","updatedAt":"2017-08-25T02:12:21.403Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk8684.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk8305/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk2988","name":"Relay-Namespace-onesdk2988","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk2988","createdAt":"2017-04-24T19:40:05.287Z","updatedAt":"2017-08-25T02:09:12.753Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk2988.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk4300/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk2981","name":"Relay-Namespace-onesdk2981","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk2981","createdAt":"2017-04-12T23:05:46.187Z","updatedAt":"2017-08-25T02:12:23.903Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk2981.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr311/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr2936","name":"Relay-Namespace-pwr2936","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr2936","createdAt":"2017-04-05T00:57:59.883Z","updatedAt":"2017-08-25T02:01:49.91Z","serviceBusEndpoint":"https://Relay-Namespace-pwr2936.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8116/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr9555","name":"Relay-Namespace-pwr9555","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr9555","createdAt":"2017-04-05T17:32:46.937Z","updatedAt":"2017-08-25T02:12:02.64Z","serviceBusEndpoint":"https://Relay-Namespace-pwr9555.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr3413/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr9092","name":"Relay-Namespace-pwr9092","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr9092","createdAt":"2017-04-05T07:45:05.037Z","updatedAt":"2017-08-25T02:12:02.25Z","serviceBusEndpoint":"https://Relay-Namespace-pwr9092.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr3049/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr9733","name":"Relay-Namespace-pwr9733","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr9733","createdAt":"2017-04-05T21:58:55.747Z","updatedAt":"2017-08-25T02:03:18Z","serviceBusEndpoint":"https://Relay-Namespace-pwr9733.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk4302/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk8485","name":"Relay-Namespace-onesdk8485","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk8485","createdAt":"2017-07-27T16:55:43.807Z","updatedAt":"2017-07-27T16:56:10.427Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk8485.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk2961/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk6844","name":"Relay-Namespace-onesdk6844","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk6844","createdAt":"2017-04-26T17:49:25.783Z","updatedAt":"2017-08-25T02:08:28.583Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk6844.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr5473/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr9506","name":"Relay-Namespace-pwr9506","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr9506","createdAt":"2017-04-05T07:50:47.947Z","updatedAt":"2017-08-25T02:12:03.383Z","serviceBusEndpoint":"https://Relay-Namespace-pwr9506.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr9708/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr3705","name":"Relay-Namespace-pwr3705","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr3705","createdAt":"2017-04-05T02:44:15.83Z","updatedAt":"2017-08-25T02:03:06.883Z","serviceBusEndpoint":"https://Relay-Namespace-pwr3705.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk908/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk4666","name":"Relay-Namespace-onesdk4666","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk4666","createdAt":"2017-04-26T21:49:23.96Z","updatedAt":"2017-08-25T02:16:31.037Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk4666.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk1955/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk921","name":"Relay-Namespace-onesdk921","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk921","createdAt":"2017-04-25T01:16:13.413Z","updatedAt":"2017-08-25T02:09:18.953Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk921.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk1940/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk7762","name":"Relay-Namespace-onesdk7762","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk7762","createdAt":"2017-04-26T19:21:44.71Z","updatedAt":"2017-08-25T02:10:19.547Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk7762.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk535/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk7414","name":"Relay-Namespace-onesdk7414","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk7414","createdAt":"2017-07-27T07:30:17.73Z","updatedAt":"2017-07-27T07:30:43.667Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk7414.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr250/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr9614","name":"Relay-Namespace-pwr9614","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr9614","createdAt":"2017-04-05T07:45:51.71Z","updatedAt":"2017-08-25T02:01:55.993Z","serviceBusEndpoint":"https://Relay-Namespace-pwr9614.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8024/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr289","name":"Relay-Namespace-pwr289","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr289","createdAt":"2017-04-05T07:57:45.2Z","updatedAt":"2017-08-25T02:03:12.163Z","serviceBusEndpoint":"https://Relay-Namespace-pwr289.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr2397/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr3725","name":"Relay-Namespace-pwr3725","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr3725","createdAt":"2017-04-05T01:17:05.17Z","updatedAt":"2017-08-25T02:03:02.213Z","serviceBusEndpoint":"https://Relay-Namespace-pwr3725.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr6332/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr285","name":"Relay-Namespace-pwr285","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr285","createdAt":"2017-04-05T21:55:23.683Z","updatedAt":"2017-08-25T02:02:01.07Z","serviceBusEndpoint":"https://Relay-Namespace-pwr285.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk229/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk9177","name":"Relay-Namespace-onesdk9177","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk9177","createdAt":"2017-04-26T00:55:50.743Z","updatedAt":"2017-08-25T02:09:29.473Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk9177.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/dstucki-test-rg-usw/providers/Microsoft.Relay/namespaces/dstucki-relay-usw","name":"dstucki-relay-usw","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:dstucki-relay-usw","createdAt":"2017-06-27T01:28:36.94Z","updatedAt":"2018-01-30T21:06:22.98Z","serviceBusEndpoint":"https://dstucki-relay-usw.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk1244/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk5861","name":"Relay-Namespace-onesdk5861","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk5861","createdAt":"2017-05-01T21:40:39.81Z","updatedAt":"2017-08-25T02:17:04.62Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk5861.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8286/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr7458","name":"Relay-Namespace-pwr7458","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr7458","createdAt":"2017-04-05T17:36:08.763Z","updatedAt":"2017-08-25T02:01:58.493Z","serviceBusEndpoint":"https://Relay-Namespace-pwr7458.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr2934/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr9109","name":"Relay-Namespace-pwr9109","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr9109","createdAt":"2017-04-05T02:47:48.69Z","updatedAt":"2017-08-25T02:01:53.7Z","serviceBusEndpoint":"https://Relay-Namespace-pwr9109.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr2323/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr8180","name":"Relay-Namespace-pwr8180","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr8180","createdAt":"2017-04-05T01:44:24.493Z","updatedAt":"2017-08-25T02:01:51.487Z","serviceBusEndpoint":"https://Relay-Namespace-pwr8180.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk1933/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk3746","name":"Relay-Namespace-onesdk3746","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk3746","createdAt":"2017-07-27T05:22:25.757Z","updatedAt":"2017-07-27T05:22:53.677Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk3746.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr850/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr8672","name":"Relay-Namespace-pwr8672","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr8672","createdAt":"2017-04-05T08:36:04.073Z","updatedAt":"2017-08-25T02:01:57.933Z","serviceBusEndpoint":"https://Relay-Namespace-pwr8672.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ardsouza-resourcemovetest-group2/providers/Microsoft.Relay/namespaces/ardsouza-5-11-movetest-relay","name":"ardsouza-5-11-movetest-relay","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:ardsouza-5-11-movetest-relay","createdAt":"2017-05-11T23:06:38.667Z","updatedAt":"2017-08-25T02:20:54.203Z","serviceBusEndpoint":"https://ardsouza-5-11-movetest-relay.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8714/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr8656","name":"Relay-Namespace-pwr8656","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr8656","createdAt":"2017-04-05T17:47:56.917Z","updatedAt":"2017-08-25T02:12:03.803Z","serviceBusEndpoint":"https://Relay-Namespace-pwr8656.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr4171/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr3010","name":"Relay-Namespace-pwr3010","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr3010","createdAt":"2017-04-05T20:21:37.263Z","updatedAt":"2017-08-25T02:02:00.763Z","serviceBusEndpoint":"https://Relay-Namespace-pwr3010.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk1751/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk9712","name":"Relay-Namespace-onesdk9712","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk9712","createdAt":"2017-04-24T22:10:57.74Z","updatedAt":"2017-08-25T02:08:09.513Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk9712.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr583/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr396","name":"Relay-Namespace-pwr396","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr396","createdAt":"2017-04-05T02:11:25.923Z","updatedAt":"2017-08-25T02:11:26.443Z","serviceBusEndpoint":"https://Relay-Namespace-pwr396.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk4928/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk9137","name":"Relay-Namespace-onesdk9137","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk9137","createdAt":"2017-07-27T07:35:21.983Z","updatedAt":"2017-07-27T07:35:49.19Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk9137.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8102/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr8082","name":"Relay-Namespace-pwr8082","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr8082","createdAt":"2017-04-05T07:23:33.17Z","updatedAt":"2017-08-25T02:03:11.077Z","serviceBusEndpoint":"https://Relay-Namespace-pwr8082.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace","name":"testingpythontestcasenamespace","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{"tag1":"value1","tag2":"value2"},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:testingpythontestcasenamespace","createdAt":"2018-02-02T10:32:59.077Z","updatedAt":"2018-02-02T10:33:25.417Z","serviceBusEndpoint":"https://testingpythontestcasenamespace.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr1248/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr2656","name":"Relay-Namespace-pwr2656","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr2656","createdAt":"2017-04-05T21:49:53.35Z","updatedAt":"2017-08-25T02:12:04.303Z","serviceBusEndpoint":"https://Relay-Namespace-pwr2656.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr4520/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr2127","name":"Relay-Namespace-pwr2127","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr2127","createdAt":"2017-04-05T02:40:31.5Z","updatedAt":"2017-08-25T02:01:52.98Z","serviceBusEndpoint":"https://Relay-Namespace-pwr2127.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8578/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr2126","name":"Relay-Namespace-pwr2126","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr2126","createdAt":"2017-04-05T17:19:25.91Z","updatedAt":"2017-08-25T02:03:12.913Z","serviceBusEndpoint":"https://Relay-Namespace-pwr2126.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk1802/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk6986","name":"Relay-Namespace-onesdk6986","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk6986","createdAt":"2017-04-26T17:41:24.34Z","updatedAt":"2017-08-25T02:09:37.42Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk6986.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk9131/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk293","name":"Relay-Namespace-onesdk293","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk293","createdAt":"2017-04-26T23:40:01.333Z","updatedAt":"2017-08-25T02:08:35.487Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk293.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr3313/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr3220","name":"Relay-Namespace-pwr3220","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr3220","createdAt":"2017-04-05T01:04:50.463Z","updatedAt":"2017-08-25T02:03:02.307Z","serviceBusEndpoint":"https://Relay-Namespace-pwr3220.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr6386","name":"Relay-Namespace-pwr6386","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr6386","createdAt":"2017-04-05T07:40:18.69Z","updatedAt":"2017-08-25T02:02:54.963Z","serviceBusEndpoint":"https://Relay-Namespace-pwr6386.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk9694/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk7264","name":"Relay-Namespace-onesdk7264","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk7264","createdAt":"2017-04-25T01:28:37.643Z","updatedAt":"2017-08-25T02:08:13.21Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk7264.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk115/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk1780","name":"Relay-Namespace-onesdk1780","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk1780","createdAt":"2017-04-26T23:59:26.107Z","updatedAt":"2017-08-25T02:10:44.197Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk1780.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk1271/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk7346","name":"Relay-Namespace-onesdk7346","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk7346","createdAt":"2017-04-26T21:05:11.227Z","updatedAt":"2017-08-25T02:08:33.817Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk7346.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk4326/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk8847","name":"Relay-Namespace-onesdk8847","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk8847","createdAt":"2017-04-27T00:10:55.657Z","updatedAt":"2017-08-25T02:10:44.337Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk8847.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk7002/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk8846","name":"Relay-Namespace-onesdk8846","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk8846","createdAt":"2017-04-26T19:07:57.543Z","updatedAt":"2017-08-25T02:08:28.923Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk8846.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr7480/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr4885","name":"Relay-Namespace-pwr4885","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr4885","createdAt":"2017-04-05T02:54:03.113Z","updatedAt":"2017-08-25T02:11:27.303Z","serviceBusEndpoint":"https://Relay-Namespace-pwr4885.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8556/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr3791","name":"Relay-Namespace-pwr3791","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr3791","createdAt":"2017-04-05T06:51:25.923Z","updatedAt":"2017-08-25T02:03:08.417Z","serviceBusEndpoint":"https://Relay-Namespace-pwr3791.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr9572/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr8228","name":"Relay-Namespace-pwr8228","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr8228","createdAt":"2017-04-05T00:50:41.38Z","updatedAt":"2017-08-25T02:03:01.337Z","serviceBusEndpoint":"https://Relay-Namespace-pwr8228.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr1091/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr6082","name":"Relay-Namespace-pwr6082","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr6082","createdAt":"2017-04-05T07:49:56.257Z","updatedAt":"2017-08-25T02:03:11.297Z","serviceBusEndpoint":"https://Relay-Namespace-pwr6082.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8471/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr5040","name":"Relay-Namespace-pwr5040","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr5040","createdAt":"2017-04-05T00:44:49.1Z","updatedAt":"2017-08-25T02:01:49.16Z","serviceBusEndpoint":"https://Relay-Namespace-pwr5040.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk9894/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk1056","name":"Relay-Namespace-onesdk1056","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk1056","createdAt":"2017-07-27T17:23:02.923Z","updatedAt":"2017-07-27T17:23:27.99Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk1056.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk5629/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk4539","name":"Relay-Namespace-onesdk4539","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk4539","createdAt":"2017-04-26T01:01:08.28Z","updatedAt":"2017-08-25T02:16:19.643Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk4539.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk7476/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk2860","name":"Relay-Namespace-onesdk2860","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk2860","createdAt":"2017-04-25T01:11:35.503Z","updatedAt":"2017-08-25T02:08:13.7Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk2860.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk3646/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk7875","name":"Relay-Namespace-onesdk7875","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk7875","createdAt":"2017-04-26T02:18:44.103Z","updatedAt":"2017-08-25T02:09:31.623Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk7875.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr5962/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr2323","name":"Relay-Namespace-pwr2323","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr2323","createdAt":"2017-04-05T08:05:06.34Z","updatedAt":"2017-08-25T02:01:56.807Z","serviceBusEndpoint":"https://Relay-Namespace-pwr2323.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr9531/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr2633","name":"Relay-Namespace-pwr2633","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr2633","createdAt":"2017-04-05T01:11:35.56Z","updatedAt":"2017-08-25T02:01:50.673Z","serviceBusEndpoint":"https://Relay-Namespace-pwr2633.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk1089/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk6465","name":"Relay-Namespace-onesdk6465","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk6465","createdAt":"2017-04-25T04:30:05.63Z","updatedAt":"2017-08-25T02:09:22.177Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk6465.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr6738/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr9945","name":"Relay-Namespace-pwr9945","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr9945","createdAt":"2017-04-05T21:38:03.513Z","updatedAt":"2017-08-25T02:12:04.18Z","serviceBusEndpoint":"https://Relay-Namespace-pwr9945.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/relayrg/providers/Microsoft.Relay/namespaces/cesarmeuswestcentral","name":"cesarmeuswestcentral","type":"Microsoft.Relay/Namespaces","location":"West - Central US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:cesarmeuswestcentral","createdAt":"2016-09-28T00:27:30.343Z","updatedAt":"2017-06-28T01:02:52.997Z","serviceBusEndpoint":"https://cesarmeuswestcentral.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk8552/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk2782","name":"Relay-Namespace-onesdk2782","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk2782","createdAt":"2017-07-27T04:48:01.793Z","updatedAt":"2017-07-27T04:48:29.007Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk2782.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr5907/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr2581","name":"Relay-Namespace-pwr2581","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr2581","createdAt":"2017-04-05T07:00:18.66Z","updatedAt":"2017-08-25T02:03:10.17Z","serviceBusEndpoint":"https://Relay-Namespace-pwr2581.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk2975/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk1307","name":"Relay-Namespace-onesdk1307","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk1307","createdAt":"2017-04-26T01:56:27.853Z","updatedAt":"2017-08-25T02:08:20.207Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk1307.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr2778/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr2005","name":"Relay-Namespace-pwr2005","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr2005","createdAt":"2017-04-05T02:49:54.253Z","updatedAt":"2017-08-25T02:03:06.72Z","serviceBusEndpoint":"https://Relay-Namespace-pwr2005.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr7950/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr7868","name":"Relay-Namespace-pwr7868","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr7868","createdAt":"2017-04-05T08:29:39.82Z","updatedAt":"2017-08-25T02:12:03.493Z","serviceBusEndpoint":"https://Relay-Namespace-pwr7868.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk328/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk1604","name":"Relay-Namespace-onesdk1604","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk1604","createdAt":"2017-04-26T02:34:46.49Z","updatedAt":"2017-08-25T02:09:30.973Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk1604.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr9402/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr9962","name":"Relay-Namespace-pwr9962","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr9962","createdAt":"2017-04-05T07:14:53.15Z","updatedAt":"2017-08-25T02:12:03.053Z","serviceBusEndpoint":"https://Relay-Namespace-pwr9962.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk8253/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk1846","name":"Relay-Namespace-onesdk1846","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk1846","createdAt":"2017-07-27T17:16:08.713Z","updatedAt":"2017-07-27T17:16:33.333Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk1846.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk3058/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk6284","name":"Relay-Namespace-onesdk6284","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk6284","createdAt":"2017-04-24T23:40:56.133Z","updatedAt":"2017-08-25T02:08:12.38Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk6284.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk7090/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk222","name":"Relay-Namespace-onesdk222","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk222","createdAt":"2017-04-26T21:08:39.463Z","updatedAt":"2017-08-25T02:16:29.54Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk222.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk9064/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk8379","name":"Relay-Namespace-onesdk8379","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk8379","createdAt":"2017-04-26T19:37:08.66Z","updatedAt":"2017-08-25T02:10:19.64Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk8379.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr9883/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr1652","name":"Relay-Namespace-pwr1652","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr1652","createdAt":"2017-04-05T20:07:12.793Z","updatedAt":"2017-08-25T02:01:59.337Z","serviceBusEndpoint":"https://Relay-Namespace-pwr1652.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk5536/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk4152","name":"Relay-Namespace-onesdk4152","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk4152","createdAt":"2017-07-27T04:59:58.69Z","updatedAt":"2017-07-27T05:00:25.85Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk4152.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-onesdk3928/providers/Microsoft.Relay/namespaces/Relay-Namespace-onesdk6186","name":"Relay-Namespace-onesdk6186","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-onesdk6186","createdAt":"2017-04-26T19:31:54.25Z","updatedAt":"2017-08-25T02:08:29.473Z","serviceBusEndpoint":"https://Relay-Namespace-onesdk6186.servicebus.windows.net:443/","status":"Active"}},{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RGName-pwr8458/providers/Microsoft.Relay/namespaces/Relay-Namespace-pwr8041","name":"Relay-Namespace-pwr8041","type":"Microsoft.Relay/Namespaces","location":"West - US","tags":{},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:relay-namespace-pwr8041","createdAt":"2017-04-05T07:29:35.03Z","updatedAt":"2017-08-25T02:12:02.157Z","serviceBusEndpoint":"https://Relay-Namespace-pwr8041.servicebus.windows.net:443/","status":"Active"}}]}'} - headers: - cache-control: [no-cache] - content-length: ['68075'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:33:34 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} + body: + string: '{"value":[{"sku":{"name":"Standard","tier":"Standard"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace","name":"testingpythontestcasenamespace","type":"Microsoft.Relay/Namespaces","location":"West + US","tags":{"tags":"{''tag1'': ''value1'', ''tag2'': ''value2''}"},"properties":{"provisioningState":"Succeeded","metricId":"00000000-0000-0000-0000-000000000000:testingpythontestcasenamespace","createdAt":"2020-02-28T04:04:17.637Z","updatedAt":"2020-02-28T04:05:29.923Z","serviceBusEndpoint":"https://testingpythontestcasenamespace.servicebus.windows.net:443/","status":"Active"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '731' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:05:33 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/RootManageSharedAccessKey?api-version=2017-04-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/RootManageSharedAccessKey","name":"RootManageSharedAccessKey","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West - US","properties":{"rights":["Listen","Manage","Send"]}}'} - headers: - cache-control: [no-cache] - content-length: ['416'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:33:51 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/RootManageSharedAccessKey","name":"RootManageSharedAccessKey","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West + US","properties":{"rights":["Listen","Manage","Send"]}}' + headers: + cache-control: + - no-cache + content-length: + - '416' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:05:37 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK - request: body: '{"properties": {"rights": ["Send", "Listen"]}}' headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['46'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '46' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy?api-version=2017-04-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy","name":"testingauthrulepy","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West - US","properties":{"rights":["Send","Listen"]}}'} - headers: - cache-control: [no-cache] - content-length: ['391'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:34:09 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1197'] - status: {code: 200, message: OK} + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy","name":"testingauthrulepy","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West + US","properties":{"rights":["Send","Listen"]}}' + headers: + cache-control: + - no-cache + content-length: + - '391' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:05:58 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1194' + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy?api-version=2017-04-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy","name":"testingauthrulepy","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West - US","properties":{"rights":["Send","Listen"]}}'} - headers: - cache-control: [no-cache] - content-length: ['391'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:34:11 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy","name":"testingauthrulepy","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West + US","properties":{"rights":["Send","Listen"]}}' + headers: + cache-control: + - no-cache + content-length: + - '391' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:06:01 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK - request: body: '{"properties": {"rights": ["Send", "Listen", "Manage"]}}' headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['56'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '56' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy?api-version=2017-04-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy","name":"testingauthrulepy","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West - US","properties":{"rights":["Send","Listen","Manage"]}}'} - headers: - cache-control: [no-cache] - content-length: ['400'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:34:27 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] - status: {code: 200, message: OK} + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy","name":"testingauthrulepy","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West + US","properties":{"rights":["Send","Listen","Manage"]}}' + headers: + cache-control: + - no-cache + content-length: + - '400' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:06:19 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1191' + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules?api-version=2017-04-01 response: - body: {string: '{"value":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/RootManageSharedAccessKey","name":"RootManageSharedAccessKey","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West + body: + string: '{"value":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/RootManageSharedAccessKey","name":"RootManageSharedAccessKey","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West US","properties":{"rights":["Listen","Manage","Send"]}},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy","name":"testingauthrulepy","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West - US","properties":{"rights":["Send","Listen","Manage"]}}]}'} - headers: - cache-control: [no-cache] - content-length: ['829'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:34:28 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} + US","properties":{"rights":["Send","Listen","Manage"]}}]}' + headers: + cache-control: + - no-cache + content-length: + - '829' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:06:20 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['0'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy/listKeys?api-version=2017-04-01 response: - body: {string: '{"primaryConnectionString":"Endpoint=sb://testingpythontestcasenamespace.servicebus.windows.net/;SharedAccessKeyName=testingauthrulepy;SharedAccessKey=vhzWUQcBhAQjwozKccaKYaP8zH4HZSjP0gy87fZ0pVQ=","secondaryConnectionString":"Endpoint=sb://testingpythontestcasenamespace.servicebus.windows.net/;SharedAccessKeyName=testingauthrulepy;SharedAccessKey=LsD20eeijmq/CBT8putTnvP/WAHPZsq/TrIJK80k68M=","primaryKey":"vhzWUQcBhAQjwozKccaKYaP8zH4HZSjP0gy87fZ0pVQ=","secondaryKey":"LsD20eeijmq/CBT8putTnvP/WAHPZsq/TrIJK80k68M=","keyName":"testingauthrulepy"}'} - headers: - cache-control: [no-cache] - content-length: ['547'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:34:29 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] - status: {code: 200, message: OK} + body: + string: '{"primaryConnectionString":"Endpoint=sb://testingpythontestcasenamespace.servicebus.windows.net/;SharedAccessKeyName=testingauthrulepy;SharedAccessKey=EiIFlllb9Tn7/fDBza5CCHvGuJkraB0chjDw371p4wE=","secondaryConnectionString":"Endpoint=sb://testingpythontestcasenamespace.servicebus.windows.net/;SharedAccessKeyName=testingauthrulepy;SharedAccessKey=7HGD+SBCTU0932/3JiRf4XHMYz3k3pbh9GBHHtpp+ik=","primaryKey":"EiIFlllb9Tn7/fDBza5CCHvGuJkraB0chjDw371p4wE=","secondaryKey":"7HGD+SBCTU0932/3JiRf4XHMYz3k3pbh9GBHHtpp+ik=","keyName":"testingauthrulepy"}' + headers: + cache-control: + - no-cache + content-length: + - '547' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:06:23 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 200 + message: OK - request: body: '{"keyType": "PrimaryKey"}' headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['25'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '25' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy/regenerateKeys?api-version=2017-04-01 response: - body: {string: '{"primaryConnectionString":"Endpoint=sb://testingpythontestcasenamespace.servicebus.windows.net/;SharedAccessKeyName=testingauthrulepy;SharedAccessKey=Ju38swGvUo4jgU1d08vsRCy8eTXeAM3gKdWFSv7fCgE=","secondaryConnectionString":"Endpoint=sb://testingpythontestcasenamespace.servicebus.windows.net/;SharedAccessKeyName=testingauthrulepy;SharedAccessKey=LsD20eeijmq/CBT8putTnvP/WAHPZsq/TrIJK80k68M=","primaryKey":"Ju38swGvUo4jgU1d08vsRCy8eTXeAM3gKdWFSv7fCgE=","secondaryKey":"LsD20eeijmq/CBT8putTnvP/WAHPZsq/TrIJK80k68M=","keyName":"testingauthrulepy"}'} - headers: - cache-control: [no-cache] - content-length: ['547'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:34:46 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1194'] - status: {code: 200, message: OK} + body: + string: '{"primaryConnectionString":"Endpoint=sb://testingpythontestcasenamespace.servicebus.windows.net/;SharedAccessKeyName=testingauthrulepy;SharedAccessKey=PsxB2oOuORG5gRHRg7hrymGybtbhDfaOoImoTFb8vPs=","secondaryConnectionString":"Endpoint=sb://testingpythontestcasenamespace.servicebus.windows.net/;SharedAccessKeyName=testingauthrulepy;SharedAccessKey=7HGD+SBCTU0932/3JiRf4XHMYz3k3pbh9GBHHtpp+ik=","primaryKey":"PsxB2oOuORG5gRHRg7hrymGybtbhDfaOoImoTFb8vPs=","secondaryKey":"7HGD+SBCTU0932/3JiRf4XHMYz3k3pbh9GBHHtpp+ik=","keyName":"testingauthrulepy"}' + headers: + cache-control: + - no-cache + content-length: + - '547' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:06:41 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 200 + message: OK - request: body: '{"keyType": "SecondaryKey"}' headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['27'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '27' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy/regenerateKeys?api-version=2017-04-01 response: - body: {string: '{"primaryConnectionString":"Endpoint=sb://testingpythontestcasenamespace.servicebus.windows.net/;SharedAccessKeyName=testingauthrulepy;SharedAccessKey=Ju38swGvUo4jgU1d08vsRCy8eTXeAM3gKdWFSv7fCgE=","secondaryConnectionString":"Endpoint=sb://testingpythontestcasenamespace.servicebus.windows.net/;SharedAccessKeyName=testingauthrulepy;SharedAccessKey=O3+NBse4I8qMTUlOwLNwrjqaoB7wi/xoezH+Mvu/ohY=","primaryKey":"Ju38swGvUo4jgU1d08vsRCy8eTXeAM3gKdWFSv7fCgE=","secondaryKey":"O3+NBse4I8qMTUlOwLNwrjqaoB7wi/xoezH+Mvu/ohY=","keyName":"testingauthrulepy"}'} - headers: - cache-control: [no-cache] - content-length: ['547'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:35:03 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1193'] - status: {code: 200, message: OK} + body: + string: '{"primaryConnectionString":"Endpoint=sb://testingpythontestcasenamespace.servicebus.windows.net/;SharedAccessKeyName=testingauthrulepy;SharedAccessKey=PsxB2oOuORG5gRHRg7hrymGybtbhDfaOoImoTFb8vPs=","secondaryConnectionString":"Endpoint=sb://testingpythontestcasenamespace.servicebus.windows.net/;SharedAccessKeyName=testingauthrulepy;SharedAccessKey=pf2BDtHtw0DRLStFGZ3dzhnGKZTO3WjNiC+CrLi1N4c=","primaryKey":"PsxB2oOuORG5gRHRg7hrymGybtbhDfaOoImoTFb8vPs=","secondaryKey":"pf2BDtHtw0DRLStFGZ3dzhnGKZTO3WjNiC+CrLi1N4c=","keyName":"testingauthrulepy"}' + headers: + cache-control: + - no-cache + content-length: + - '547' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:07:00 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1198' + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['0'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/testingauthrulepy?api-version=2017-04-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - date: ['Fri, 02 Feb 2018 10:35:20 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] - status: {code: 200, message: OK} + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Fri, 28 Feb 2020 04:07:16 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14998' + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules?api-version=2017-04-01 response: - body: {string: '{"value":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/RootManageSharedAccessKey","name":"RootManageSharedAccessKey","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West - US","properties":{"rights":["Listen","Manage","Send"]}}]}'} - headers: - cache-control: [no-cache] - content-length: ['428'] - content-type: [application/json; charset=utf-8] - date: ['Fri, 02 Feb 2018 10:35:21 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} + body: + string: '{"value":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/authorizationRules/RootManageSharedAccessKey","name":"RootManageSharedAccessKey","type":"Microsoft.Relay/Namespaces/AuthorizationRules","location":"West + US","properties":{"rights":["Listen","Manage","Send"]}}]}' + headers: + cache-control: + - no-cache + content-length: + - '428' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 28 Feb 2020 04:07:18 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['0'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python + accept-language: + - en-US method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace?api-version=2017-04-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - date: ['Fri, 02 Feb 2018 10:35:22 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/operationresults/testingpythontestcasenamespace?api-version=2017-04-01'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1197'] - status: {code: 202, message: Accepted} + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Fri, 28 Feb 2020 04:07:24 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/operationresults/testingpythontestcasenamespace?api-version=2017-04-01 + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14997' + status: + code: 202 + message: Accepted - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.3 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-relay/0.1.0 Azure-SDK-For-Python] - accept-language: [en-US] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-relay/0.2.0 Azure-SDK-For-Python method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_azure_mgmt_relay_namespace_test_relay_namespace_curdaba01766/providers/Microsoft.Relay/namespaces/testingpythontestcasenamespace/operationresults/testingpythontestcasenamespace?api-version=2017-04-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - date: ['Fri, 02 Feb 2018 10:35:53 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Service-Bus-Resource-Provider/SN1, Microsoft-HTTPAPI/2.0] - server-sb: [Service-Bus-Resource-Provider/SN1] - strict-transport-security: [max-age=31536000; includeSubDomains] - status: {code: 200, message: OK} + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Fri, 28 Feb 2020 04:07:55 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Service-Bus-Resource-Provider/CH3 + - Microsoft-HTTPAPI/2.0 + server-sb: + - Service-Bus-Resource-Provider/CH3 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 200 + message: OK version: 1 diff --git a/sdk/relay/azure-mgmt-relay/tests/test_azure_mgmt_operations.py b/sdk/relay/azure-mgmt-relay/tests/test_azure_mgmt_operations.py new file mode 100644 index 000000000000..2b825edce983 --- /dev/null +++ b/sdk/relay/azure-mgmt-relay/tests/test_azure_mgmt_operations.py @@ -0,0 +1,29 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import unittest +import azure.mgmt.relay +from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer + + +class MgmtRelayTest(AzureMgmtTestCase): + + def setUp(self): + super(MgmtRelayTest, self).setUp() + + self.relay_client = self.create_mgmt_client( + azure.mgmt.relay.RelayManagementClient + ) + + def test_operations_list(self): + # Check the namespace availability + result = self.relay_client.operations.list() + + +# ------------------------------------------------------------------------------ +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/sdk/relay/azure-mgmt-relay/tests/test_azure_mgmt_relay_namespace.py b/sdk/relay/azure-mgmt-relay/tests/test_azure_mgmt_relay_namespace.py index 71d416fd1959..6d37807598ab 100644 --- a/sdk/relay/azure-mgmt-relay/tests/test_azure_mgmt_relay_namespace.py +++ b/sdk/relay/azure-mgmt-relay/tests/test_azure_mgmt_relay_namespace.py @@ -37,8 +37,11 @@ def test_relay_namespace_curd(self, resource_group, location): getnamespaceresponse = self.relay_client.namespaces.get(resource_group_name, namespace_name) self.assertEqual(getnamespaceresponse.name, namespace_name) - # Get the List of Namespaces under the resourceGroup - list_by_resource_group + # Update a Namespace + namespaceparameter={'tags': {'tag1':'value1', 'tag2':'value2'}} + updatenamespace = self.relay_client.namespaces.update(resource_group_name, namespace_name, namespaceparameter) + # Get the List of Namespaces under the resourceGroup - list_by_resource_group listbyresourcegroupresponse = list(self.relay_client.namespaces.list_by_resource_group(resource_group_name, False, False)) self.assertGreater(len(listbyresourcegroupresponse), 0, "No Namespace returned, List is empty") self.assertEqual(listbyresourcegroupresponse[0].name, namespace_name, "Created namespace not found - ListByResourgroup") diff --git a/sdk/resources/azure-mgmt-resourcegraph/CHANGELOG.md b/sdk/resources/azure-mgmt-resourcegraph/CHANGELOG.md index c1c3f274bd87..1dfebb220d90 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/CHANGELOG.md +++ b/sdk/resources/azure-mgmt-resourcegraph/CHANGELOG.md @@ -1,5 +1,11 @@ # Release History +## 2.1.0 (2020-03-15) + +**Features** + +- Added operation group GraphQueryOperations + ## 2.0.0 (2019-06-19) **General Breaking changes** diff --git a/sdk/resources/azure-mgmt-resourcegraph/README.md b/sdk/resources/azure-mgmt-resourcegraph/README.md index c8bc30bafcc5..39ffe8a0f38f 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/README.md +++ b/sdk/resources/azure-mgmt-resourcegraph/README.md @@ -1,29 +1,21 @@ -## Microsoft Azure SDK for Python +# Microsoft Azure SDK for Python This is the Microsoft Azure Resource Graph Client Library. +This package has been tested with Python 2.7, 3.5, 3.6, 3.7 and 3.8. +For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/) -Azure Resource Manager (ARM) is the next generation of management APIs -that replace the old Azure Service Management (ASM). -This package has been tested with Python 2.7, 3.4, 3.5, 3.6 and 3.7. +# Usage -For the older Azure Service Management (ASM) libraries, see -[azure-servicemanagement-legacy](https://pypi.python.org/pypi/azure-servicemanagement-legacy) -library. - -For a more complete set of Azure libraries, see the -[azure](https://pypi.python.org/pypi/azure) bundle package. - -## Usage - -For code examples, see [Resource -Graph](https://docs.microsoft.com/python/api/overview/azure/resourcegraph) +For code examples, see [Resource Graph](https://docs.microsoft.com/python/api/overview/azure/resourcegraph) on docs.microsoft.com. -## Provide Feedback -If you encounter any bugs or have suggestions, please file an issue in -the [Issues](https://github.com/Azure/azure-sdk-for-python/issues) +# Provide Feedback + +If you encounter any bugs or have suggestions, please file an issue in the +[Issues](https://github.com/Azure/azure-sdk-for-python/issues) section of the project. -![image](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-resourcegraph%2FREADME.png) + +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-resourcegraph%2FREADME.png) diff --git a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/_configuration.py b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/_configuration.py index a8199ec13d93..6886698291fd 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/_configuration.py +++ b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/_configuration.py @@ -21,14 +21,18 @@ class ResourceGraphClientConfiguration(AzureConfiguration): :param credentials: Credentials needed for the client to connect to Azure. :type credentials: :mod:`A msrestazure Credentials object` + :param subscription_id: The Azure subscription Id. + :type subscription_id: str :param str base_url: Service URL """ def __init__( - self, credentials, base_url=None): + self, credentials, subscription_id, base_url=None): if credentials is None: raise ValueError("Parameter 'credentials' must not be None.") + if subscription_id is None: + raise ValueError("Parameter 'subscription_id' must not be None.") if not base_url: base_url = 'https://management.azure.com' @@ -41,3 +45,4 @@ def __init__( self.add_user_agent('Azure-SDK-For-Python') self.credentials = credentials + self.subscription_id = subscription_id diff --git a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/_resource_graph_client.py b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/_resource_graph_client.py index 7a3564f517bd..c281154e968c 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/_resource_graph_client.py +++ b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/_resource_graph_client.py @@ -15,34 +15,40 @@ from ._configuration import ResourceGraphClientConfiguration from .operations import ResourceGraphClientOperationsMixin from .operations import Operations +from .operations import GraphQueryOperations from . import models class ResourceGraphClient(ResourceGraphClientOperationsMixin, SDKClient): - """Azure Resource Graph API Reference + """ResourceGraphClient :ivar config: Configuration for client. :vartype config: ResourceGraphClientConfiguration :ivar operations: Operations operations :vartype operations: azure.mgmt.resourcegraph.operations.Operations + :ivar graph_query: GraphQuery operations + :vartype graph_query: azure.mgmt.resourcegraph.operations.GraphQueryOperations :param credentials: Credentials needed for the client to connect to Azure. :type credentials: :mod:`A msrestazure Credentials object` + :param subscription_id: The Azure subscription Id. + :type subscription_id: str :param str base_url: Service URL """ def __init__( - self, credentials, base_url=None): + self, credentials, subscription_id, base_url=None): - self.config = ResourceGraphClientConfiguration(credentials, base_url) + self.config = ResourceGraphClientConfiguration(credentials, subscription_id, base_url) super(ResourceGraphClient, self).__init__(self.config.credentials, self.config) client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} - self.api_version = '2019-04-01' self._serialize = Serializer(client_models) self._deserialize = Deserializer(client_models) self.operations = Operations( self._client, self.config, self._serialize, self._deserialize) + self.graph_query = GraphQueryOperations( + self._client, self.config, self._serialize, self._deserialize) diff --git a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/__init__.py b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/__init__.py index 80be262d3f2a..24d5a1e66f2a 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/__init__.py +++ b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/__init__.py @@ -13,61 +13,80 @@ from ._models_py3 import Column from ._models_py3 import Error from ._models_py3 import ErrorDetails + from ._models_py3 import ErrorFieldContract from ._models_py3 import ErrorResponse, ErrorResponseException from ._models_py3 import Facet from ._models_py3 import FacetError from ._models_py3 import FacetRequest from ._models_py3 import FacetRequestOptions from ._models_py3 import FacetResult + from ._models_py3 import GraphQueryError, GraphQueryErrorException + from ._models_py3 import GraphQueryResource + from ._models_py3 import GraphQueryUpdateParameters from ._models_py3 import Operation from ._models_py3 import OperationDisplay from ._models_py3 import QueryRequest from ._models_py3 import QueryRequestOptions from ._models_py3 import QueryResponse + from ._models_py3 import Resource from ._models_py3 import Table except (SyntaxError, ImportError): from ._models import Column from ._models import Error from ._models import ErrorDetails + from ._models import ErrorFieldContract from ._models import ErrorResponse, ErrorResponseException from ._models import Facet from ._models import FacetError from ._models import FacetRequest from ._models import FacetRequestOptions from ._models import FacetResult + from ._models import GraphQueryError, GraphQueryErrorException + from ._models import GraphQueryResource + from ._models import GraphQueryUpdateParameters from ._models import Operation from ._models import OperationDisplay from ._models import QueryRequest from ._models import QueryRequestOptions from ._models import QueryResponse + from ._models import Resource from ._models import Table +from ._paged_models import GraphQueryResourcePaged from ._paged_models import OperationPaged from ._resource_graph_client_enums import ( ResultFormat, FacetSortOrder, ResultTruncated, ColumnDataType, + ResultKind, ) __all__ = [ 'Column', 'Error', 'ErrorDetails', + 'ErrorFieldContract', 'ErrorResponse', 'ErrorResponseException', 'Facet', 'FacetError', 'FacetRequest', 'FacetRequestOptions', 'FacetResult', + 'GraphQueryError', 'GraphQueryErrorException', + 'GraphQueryResource', + 'GraphQueryUpdateParameters', 'Operation', 'OperationDisplay', 'QueryRequest', 'QueryRequestOptions', 'QueryResponse', + 'Resource', 'Table', 'OperationPaged', + 'GraphQueryResourcePaged', 'ResultFormat', 'FacetSortOrder', 'ResultTruncated', 'ColumnDataType', + 'ResultKind', ] diff --git a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_models.py b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_models.py index 4189d18fb28e..bfbf7f73e31d 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_models.py +++ b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_models.py @@ -114,6 +114,30 @@ def __init__(self, **kwargs): self.message = kwargs.get('message', None) +class ErrorFieldContract(Model): + """Error Field contract. + + :param code: Property level error code. + :type code: str + :param message: Human-readable representation of property-level error. + :type message: str + :param target: Property name. + :type target: str + """ + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + } + + def __init__(self, **kwargs): + super(ErrorFieldContract, self).__init__(**kwargs) + self.code = kwargs.get('code', None) + self.message = kwargs.get('message', None) + self.target = kwargs.get('target', None) + + class ErrorResponse(Model): """Error response. @@ -325,6 +349,181 @@ def __init__(self, **kwargs): self.result_type = 'FacetResult' +class GraphQueryError(Model): + """Error message body that will indicate why the operation failed. + + :param code: Service-defined error code. This code serves as a sub-status + for the HTTP error code specified in the response. + :type code: str + :param message: Human-readable representation of the error. + :type message: str + :param details: The list of invalid fields send in request, in case of + validation error. + :type details: list[~azure.mgmt.resourcegraph.models.ErrorFieldContract] + """ + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[ErrorFieldContract]'}, + } + + def __init__(self, **kwargs): + super(GraphQueryError, self).__init__(**kwargs) + self.code = kwargs.get('code', None) + self.message = kwargs.get('message', None) + self.details = kwargs.get('details', None) + + +class GraphQueryErrorException(HttpOperationError): + """Server responsed with exception of type: 'GraphQueryError'. + + :param deserialize: A deserializer + :param response: Server response to be deserialized. + """ + + def __init__(self, deserialize, response, *args): + + super(GraphQueryErrorException, self).__init__(deserialize, response, 'GraphQueryError', *args) + + +class Resource(Model): + """An azure resource object. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: Azure resource Id + :vartype id: str + :ivar name: Azure resource name. This is GUID value. The display name + should be assigned within properties field. + :vartype name: str + :ivar type: Azure resource type + :vartype type: str + :param e_tag: This will be used to handle Optimistic Concurrency. If not + present, it will always overwrite the existing resource without checking + conflict. + :type e_tag: str + :param tags: Resource tags + :type tags: dict[str, str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'e_tag': {'key': 'eTag', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, **kwargs): + super(Resource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.e_tag = kwargs.get('e_tag', None) + self.tags = kwargs.get('tags', None) + + +class GraphQueryResource(Resource): + """Graph Query entity definition. + + Variables are only populated by the server, and will be ignored when + sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Azure resource Id + :vartype id: str + :ivar name: Azure resource name. This is GUID value. The display name + should be assigned within properties field. + :vartype name: str + :ivar type: Azure resource type + :vartype type: str + :param e_tag: This will be used to handle Optimistic Concurrency. If not + present, it will always overwrite the existing resource without checking + conflict. + :type e_tag: str + :param tags: Resource tags + :type tags: dict[str, str] + :ivar time_modified: Date and time in UTC of the last modification that + was made to this graph query definition. + :vartype time_modified: datetime + :param description: The description of a graph query. + :type description: str + :param query: Required. KQL query that will be graph. + :type query: str + :ivar result_kind: Enum indicating a type of graph query. Possible values + include: 'basic' + :vartype result_kind: str or ~azure.mgmt.resourcegraph.models.ResultKind + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'time_modified': {'readonly': True}, + 'query': {'required': True}, + 'result_kind': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'e_tag': {'key': 'eTag', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'time_modified': {'key': 'properties.timeModified', 'type': 'iso-8601'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'query': {'key': 'properties.query', 'type': 'str'}, + 'result_kind': {'key': 'properties.resultKind', 'type': 'str'}, + } + + def __init__(self, **kwargs): + super(GraphQueryResource, self).__init__(**kwargs) + self.time_modified = None + self.description = kwargs.get('description', None) + self.query = kwargs.get('query', None) + self.result_kind = None + + +class GraphQueryUpdateParameters(Model): + """The parameters that can be provided when updating workbook properties + properties. + + :param tags: Resource tags + :type tags: dict[str, str] + :param e_tag: This will be used to handle Optimistic Concurrency. If not + present, it will always overwrite the existing resource without checking + conflict. + :type e_tag: str + :param description: The description of a graph query. + :type description: str + :param query: KQL query that will be graph. + :type query: str + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'e_tag': {'key': 'eTag', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'query': {'key': 'properties.query', 'type': 'str'}, + } + + def __init__(self, **kwargs): + super(GraphQueryUpdateParameters, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + self.e_tag = kwargs.get('e_tag', None) + self.description = kwargs.get('description', None) + self.query = kwargs.get('query', None) + + class Operation(Model): """Resource Graph REST API operation definition. diff --git a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_models_py3.py b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_models_py3.py index c63c9f66c1e1..7fe4d76f00ef 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_models_py3.py +++ b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_models_py3.py @@ -114,6 +114,30 @@ def __init__(self, *, code: str, message: str, additional_properties=None, **kwa self.message = message +class ErrorFieldContract(Model): + """Error Field contract. + + :param code: Property level error code. + :type code: str + :param message: Human-readable representation of property-level error. + :type message: str + :param target: Property name. + :type target: str + """ + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + } + + def __init__(self, *, code: str=None, message: str=None, target: str=None, **kwargs) -> None: + super(ErrorFieldContract, self).__init__(**kwargs) + self.code = code + self.message = message + self.target = target + + class ErrorResponse(Model): """Error response. @@ -325,6 +349,181 @@ def __init__(self, *, expression: str, total_records: int, count: int, data, **k self.result_type = 'FacetResult' +class GraphQueryError(Model): + """Error message body that will indicate why the operation failed. + + :param code: Service-defined error code. This code serves as a sub-status + for the HTTP error code specified in the response. + :type code: str + :param message: Human-readable representation of the error. + :type message: str + :param details: The list of invalid fields send in request, in case of + validation error. + :type details: list[~azure.mgmt.resourcegraph.models.ErrorFieldContract] + """ + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[ErrorFieldContract]'}, + } + + def __init__(self, *, code: str=None, message: str=None, details=None, **kwargs) -> None: + super(GraphQueryError, self).__init__(**kwargs) + self.code = code + self.message = message + self.details = details + + +class GraphQueryErrorException(HttpOperationError): + """Server responsed with exception of type: 'GraphQueryError'. + + :param deserialize: A deserializer + :param response: Server response to be deserialized. + """ + + def __init__(self, deserialize, response, *args): + + super(GraphQueryErrorException, self).__init__(deserialize, response, 'GraphQueryError', *args) + + +class Resource(Model): + """An azure resource object. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: Azure resource Id + :vartype id: str + :ivar name: Azure resource name. This is GUID value. The display name + should be assigned within properties field. + :vartype name: str + :ivar type: Azure resource type + :vartype type: str + :param e_tag: This will be used to handle Optimistic Concurrency. If not + present, it will always overwrite the existing resource without checking + conflict. + :type e_tag: str + :param tags: Resource tags + :type tags: dict[str, str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'e_tag': {'key': 'eTag', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, *, e_tag: str=None, tags=None, **kwargs) -> None: + super(Resource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.e_tag = e_tag + self.tags = tags + + +class GraphQueryResource(Resource): + """Graph Query entity definition. + + Variables are only populated by the server, and will be ignored when + sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Azure resource Id + :vartype id: str + :ivar name: Azure resource name. This is GUID value. The display name + should be assigned within properties field. + :vartype name: str + :ivar type: Azure resource type + :vartype type: str + :param e_tag: This will be used to handle Optimistic Concurrency. If not + present, it will always overwrite the existing resource without checking + conflict. + :type e_tag: str + :param tags: Resource tags + :type tags: dict[str, str] + :ivar time_modified: Date and time in UTC of the last modification that + was made to this graph query definition. + :vartype time_modified: datetime + :param description: The description of a graph query. + :type description: str + :param query: Required. KQL query that will be graph. + :type query: str + :ivar result_kind: Enum indicating a type of graph query. Possible values + include: 'basic' + :vartype result_kind: str or ~azure.mgmt.resourcegraph.models.ResultKind + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'time_modified': {'readonly': True}, + 'query': {'required': True}, + 'result_kind': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'e_tag': {'key': 'eTag', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'time_modified': {'key': 'properties.timeModified', 'type': 'iso-8601'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'query': {'key': 'properties.query', 'type': 'str'}, + 'result_kind': {'key': 'properties.resultKind', 'type': 'str'}, + } + + def __init__(self, *, query: str, e_tag: str=None, tags=None, description: str=None, **kwargs) -> None: + super(GraphQueryResource, self).__init__(e_tag=e_tag, tags=tags, **kwargs) + self.time_modified = None + self.description = description + self.query = query + self.result_kind = None + + +class GraphQueryUpdateParameters(Model): + """The parameters that can be provided when updating workbook properties + properties. + + :param tags: Resource tags + :type tags: dict[str, str] + :param e_tag: This will be used to handle Optimistic Concurrency. If not + present, it will always overwrite the existing resource without checking + conflict. + :type e_tag: str + :param description: The description of a graph query. + :type description: str + :param query: KQL query that will be graph. + :type query: str + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'e_tag': {'key': 'eTag', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'query': {'key': 'properties.query', 'type': 'str'}, + } + + def __init__(self, *, tags=None, e_tag: str=None, description: str=None, query: str=None, **kwargs) -> None: + super(GraphQueryUpdateParameters, self).__init__(**kwargs) + self.tags = tags + self.e_tag = e_tag + self.description = description + self.query = query + + class Operation(Model): """Resource Graph REST API operation definition. diff --git a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_paged_models.py b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_paged_models.py index ec7e9b01c05b..8688c6475ae3 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_paged_models.py +++ b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_paged_models.py @@ -25,3 +25,16 @@ class OperationPaged(Paged): def __init__(self, *args, **kwargs): super(OperationPaged, self).__init__(*args, **kwargs) +class GraphQueryResourcePaged(Paged): + """ + A paging container for iterating over a list of :class:`GraphQueryResource ` object + """ + + _attribute_map = { + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'current_page': {'key': 'value', 'type': '[GraphQueryResource]'} + } + + def __init__(self, *args, **kwargs): + + super(GraphQueryResourcePaged, self).__init__(*args, **kwargs) diff --git a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_resource_graph_client_enums.py b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_resource_graph_client_enums.py index 6a5c881e616c..69245f52b488 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_resource_graph_client_enums.py +++ b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/models/_resource_graph_client_enums.py @@ -37,3 +37,8 @@ class ColumnDataType(str, Enum): number = "number" boolean = "boolean" object_enum = "object" + + +class ResultKind(str, Enum): + + basic = "basic" diff --git a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/operations/__init__.py b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/operations/__init__.py index 735ffa98d0b4..7d749e9bcf7b 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/operations/__init__.py +++ b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/operations/__init__.py @@ -10,9 +10,11 @@ # -------------------------------------------------------------------------- from ._operations import Operations +from ._graph_query_operations import GraphQueryOperations from ._resource_graph_client_operations import ResourceGraphClientOperationsMixin __all__ = [ 'Operations', + 'GraphQueryOperations', 'ResourceGraphClientOperationsMixin', ] diff --git a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/operations/_graph_query_operations.py b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/operations/_graph_query_operations.py new file mode 100644 index 000000000000..5eb1c013351a --- /dev/null +++ b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/operations/_graph_query_operations.py @@ -0,0 +1,355 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +import uuid +from msrest.pipeline import ClientRawResponse + +from .. import models + + +class GraphQueryOperations(object): + """GraphQueryOperations operations. + + You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + :ivar api_version: Client Api Version. Constant value: "2018-09-01-preview". + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self.api_version = "2018-09-01-preview" + + self.config = config + + def list( + self, resource_group_name, custom_headers=None, raw=False, **operation_config): + """Get all graph queries defined within a specified subscription and + resource group. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: An iterator like instance of GraphQueryResource + :rtype: + ~azure.mgmt.resourcegraph.models.GraphQueryResourcePaged[~azure.mgmt.resourcegraph.models.GraphQueryResource] + :raises: + :class:`GraphQueryErrorException` + """ + def prepare_request(next_link=None): + if not next_link: + # Construct URL + url = self.list.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + return request + + def internal_paging(next_link=None): + request = prepare_request(next_link) + + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + raise models.GraphQueryErrorException(self._deserialize, response) + + return response + + # Deserialize response + header_dict = None + if raw: + header_dict = {} + deserialized = models.GraphQueryResourcePaged(internal_paging, self._deserialize.dependencies, header_dict) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ResourceGraph/queries'} + + def get( + self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config): + """Get a single graph query by its resourceName. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param resource_name: The name of the Graph Query resource. + :type resource_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: GraphQueryResource or ClientRawResponse if raw=true + :rtype: ~azure.mgmt.resourcegraph.models.GraphQueryResource or + ~msrest.pipeline.ClientRawResponse + :raises: + :class:`GraphQueryErrorException` + """ + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + raise models.GraphQueryErrorException(self._deserialize, response) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('GraphQueryResource', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ResourceGraph/queries/{resourceName}'} + + def delete( + self, resource_group_name, resource_name, custom_headers=None, raw=False, **operation_config): + """Delete a graph query. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param resource_name: The name of the Graph Query resource. + :type resource_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: None or ClientRawResponse if raw=true + :rtype: None or ~msrest.pipeline.ClientRawResponse + :raises: + :class:`GraphQueryErrorException` + """ + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + + # Construct headers + header_parameters = {} + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200, 204]: + raise models.GraphQueryErrorException(self._deserialize, response) + + if raw: + client_raw_response = ClientRawResponse(None, response) + return client_raw_response + delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ResourceGraph/queries/{resourceName}'} + + def create_or_update( + self, resource_group_name, resource_name, properties, custom_headers=None, raw=False, **operation_config): + """Create a new graph query. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param resource_name: The name of the Graph Query resource. + :type resource_name: str + :param properties: Properties that need to be specified to create a + new graph query. + :type properties: ~azure.mgmt.resourcegraph.models.GraphQueryResource + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: GraphQueryResource or ClientRawResponse if raw=true + :rtype: ~azure.mgmt.resourcegraph.models.GraphQueryResource or + ~msrest.pipeline.ClientRawResponse + :raises: + :class:`GraphQueryErrorException` + """ + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(properties, 'GraphQueryResource') + + # Construct and send request + request = self._client.put(url, query_parameters, header_parameters, body_content) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + raise models.GraphQueryErrorException(self._deserialize, response) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('GraphQueryResource', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ResourceGraph/queries/{resourceName}'} + + def update( + self, resource_group_name, resource_name, body, custom_headers=None, raw=False, **operation_config): + """Updates a graph query that has already been added. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param resource_name: The name of the Graph Query resource. + :type resource_name: str + :param body: Properties that need to be specified to create a new + graph query. + :type body: + ~azure.mgmt.resourcegraph.models.GraphQueryUpdateParameters + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :return: GraphQueryResource or ClientRawResponse if raw=true + :rtype: ~azure.mgmt.resourcegraph.models.GraphQueryResource or + ~msrest.pipeline.ClientRawResponse + :raises: + :class:`GraphQueryErrorException` + """ + # Construct URL + url = self.update.metadata['url'] + path_format_arguments = { + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(body, 'GraphQueryUpdateParameters') + + # Construct and send request + request = self._client.patch(url, query_parameters, header_parameters, body_content) + response = self._client.send(request, stream=False, **operation_config) + + if response.status_code not in [200]: + raise models.GraphQueryErrorException(self._deserialize, response) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('GraphQueryResource', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ResourceGraph/queries/{resourceName}'} diff --git a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/operations/_resource_graph_client_operations.py b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/operations/_resource_graph_client_operations.py index 0d4d795ebbd2..5adf1e43bdf1 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/operations/_resource_graph_client_operations.py +++ b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/operations/_resource_graph_client_operations.py @@ -35,12 +35,14 @@ def resources( :raises: :class:`ErrorResponseException` """ + api_version = "2019-04-01" + # Construct URL url = self.resources.metadata['url'] # Construct parameters query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers header_parameters = {} diff --git a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/version.py b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/version.py index 53c4c7ea05e8..be75d8eae586 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/version.py +++ b/sdk/resources/azure-mgmt-resourcegraph/azure/mgmt/resourcegraph/version.py @@ -9,5 +9,5 @@ # regenerated. # -------------------------------------------------------------------------- -VERSION = "2.0.0" +VERSION = "2.1.0" diff --git a/sdk/resources/azure-mgmt-resourcegraph/setup.py b/sdk/resources/azure-mgmt-resourcegraph/setup.py index 481e67748dad..60866dc935f5 100644 --- a/sdk/resources/azure-mgmt-resourcegraph/setup.py +++ b/sdk/resources/azure-mgmt-resourcegraph/setup.py @@ -64,10 +64,10 @@ 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', 'License :: OSI Approved :: MIT License', ], zip_safe=False, diff --git a/sdk/search/azure-search-documents/CHANGELOG.md b/sdk/search/azure-search-documents/CHANGELOG.md new file mode 100644 index 000000000000..303a631ec3bf --- /dev/null +++ b/sdk/search/azure-search-documents/CHANGELOG.md @@ -0,0 +1,8 @@ +# Release History + +## 1.0.0b2 (Unreleased) + + +## 1.0.0b1 (2020-03-10) + +First release of Azure Search SDK for Python diff --git a/sdk/search/azure-search-documents/LICENSE.txt b/sdk/search/azure-search-documents/LICENSE.txt new file mode 100644 index 000000000000..0313a903d76c --- /dev/null +++ b/sdk/search/azure-search-documents/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/search/azure-search-documents/MANIFEST.in b/sdk/search/azure-search-documents/MANIFEST.in new file mode 100644 index 000000000000..03e190b2b565 --- /dev/null +++ b/sdk/search/azure-search-documents/MANIFEST.in @@ -0,0 +1,6 @@ +include *.md +include azure/__init__.py +include azure/search/__init__.py +include LICENSE.txt +recursive-include tests *.py +recursive-include samples *.py *.md \ No newline at end of file diff --git a/sdk/search/azure-search-documents/README.md b/sdk/search/azure-search-documents/README.md new file mode 100644 index 000000000000..642bd9626ff6 --- /dev/null +++ b/sdk/search/azure-search-documents/README.md @@ -0,0 +1,235 @@ +# Azure Cognitive Search client library for Python + +Azure Cognitive Search is a fully managed cloud search service that provides a rich search experience to custom applications. + +[Source code](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/search/azure-search-documents) | +[Package (PyPI)](https://pypi.org/project/azure-search-documents/) | +[API reference documentation](https://aka.ms/azsdk-python-search-ref-docs) | +[Product documentation](https://docs.microsoft.com/en-us/azure/search/search-what-is-azure-search) | +[Samples](samples) + + +## Getting started + +### Prerequisites + +* Python 2.7, or 3.5 or later is required to use this package. +* You must have an [Azure subscription][azure_sub] and an existing. +[Azure Cognitive Search service][search_resource] to use this package. + +If you need to create the resource, you can use the [Azure Portal][azure_portal] or [Azure CLI][azure_cli]. + +If you use the Azure CLI, replace `` and `` with your own unique names: + +```PowerShell +az search service create --resource-group --name --sku S +``` + +The above creates a resource with the "Standard" pricing tier. See [choosing a pricing tier](https://docs.microsoft.com/en-us/azure/search/search-sku-tier) for more information. + + +### Install the package + +Install the Azure Cognitive Search client library for Python with [pip](https://pypi.org/project/pip/): + +```bash +pip install azure-search-documents --pre +``` + +### Create an Azure Cognitive Search service + +### Using an API Key + +You can get the Query Keys or Admin Key from the resource information in the +[Azure Portal][azure_portal]. + +Alternatively, youcan se the [Azure CLI][azure_cli] snippet below to get the +Admin Key from the Cognitive Search resource. + +```PowerShell +az search admin-key show --resource-group --service-name +``` + +### Authenticate the client + +Interaction with this service begins with an instance of a [client](#client "search-client"). +To create a client object, you will need the `endpoint` for your search service +and a `credential` that allows you access: + +```python +from azure.search import SearchApiKeyCredential, SearchIndexClient + +credential = SearchApiKeyCredential("") + +client = SearchIndexClient(endpoint="", + index_name="", + credential=credential) +``` + +## Key concepts + +### Client + +The [Cognitive Search client library](http://azure.github.io/azure-sdk-for-python/ref/Search.html) provides a `SearchIndexClient` to perform search operations on [batches of documents](#Examples "examples"). +It provides both synchronous and asynchronous operations to access a specific use of Cognitive Search indexes, such as querying, suggestions or autocompletion. + + +## Examples + +### Retrieve a specific document from an index +Get a specific document from the index, e.f. obtain the document for hotel "23": +```python +from azure.search import SearchApiKeyCredential, SearchIndexClient +search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + +result = search_client.get_document(key="23") + +print("Details for hotel '23' are:") +print(" Name: {}".format(result["HotelName"])) +print(" Rating: {}".format(result["Rating"])) +print(" Category: {}".format(result["Category"])) +``` +### Perform a simple text search on documents +Search the entire index or documents matching a simple search text, e.g. find +hotels with the text "spa": +```python +from azure.search import SearchApiKeyCredential, SearchIndexClient +search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + +results = search_client.search(query="spa") + +print("Hotels containing 'spa' in the name (or other fields):") +for result in results: + print(" Name: {} (rating {})".format(result["HotelName"], result["Rating"])) +``` +### Get search suggestions +Get search suggestions for related terms, e.g. find search suggestions for +the term "coffee": +```python +from azure.search import SearchApiKeyCredential, SearchIndexClient, SuggestQuery +search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + +query = SuggestQuery(search_text="coffee", suggester_name="sg") + +results = search_client.suggest(query=query) + +print("Search suggestions for 'coffee'") +for result in results: + hotel = search_client.get_document(key=result["HotelId"]) + print(" Text: {} for Hotel: {}".format(repr(result["text"]), hotel["HotelName"])) +``` +### Upload documents to an index +Add documents (or update existing ones), e.g add a new document for a new hotel: +```python +from azure.search import SearchApiKeyCredential, SearchIndexClient +search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + +DOCUMENT = { + 'Category': 'Hotel', + 'HotelId': '1000', + 'Rating': 4.0, + 'Rooms': [], + 'HotelName': 'Azure Inn', +} + +result = search_client.upload_documents(documents=[DOCUMENT]) + +print("Upload of new document succeeded: {}".format(result[0].succeeded)) +``` + +## Troubleshooting + +### General + +The Azure Cognitive Search client will raise exceptions defined in [Azure Core][azure_core]. + +### Logging + +This library uses the standard [logging][python_logging] library for logging. +Basic information about HTTP sessions (URLs, headers, etc.) is logged at INFO +level. + +etailed DEBUG level logging, including request/response bodies and unredacted +headers, can be enabled on a client with the `logging_enable` keyword argument: +```python +import sys +import logging +from azure.search import SearchApiKeyCredential, SearchIndexClient + +# Create a logger for the 'azure' SDK +logger = logging.getLogger('azure') +logger.setLevel(logging.DEBUG) + +# Configure a console output +handler = logging.StreamHandler(stream=sys.stdout) +logger.addHandler(handler) + +# This client will log detailed information about its HTTP sessions, at DEBUG level +search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key), logging_enable=True) +``` + +Similarly, `logging_enable` can enable detailed logging for a single operation, +even when it isn't enabled for the client: +```python +result = search_client.search(query="spa", logging_enable=True) +``` + +## Next steps + +### More sample code + + +Authenticate the client with a Azure Cognitive Search [API Key Credential](https://docs.microsoft.com/en-us/azure/search/search-security-api-keys): + +[sample_authentication.py](samples/sample_authentication.py) ([async version](samples/async_samples/sample_authentication_async.py)) + + + +Then for common search index operations: + +* Get a document by key: [sample_get_document.py](samples/sample_get_document.py) ([async version](samples/async_samples/sample_get_document_async.py)) + +* Perform a simple text query: [sample_simple_query.py](samples/sample_simple_query.py) ([async version](samples/async_samples/sample_simple_query_async.py)) + +* Perform a filtered query: [sample_filter_query.py](samples/sample_filter_query.py) ([async version](samples/async_samples/sample_filter_query_async.py)) + +* Perform a faceted query: [sample_facet_query.py](samples/sample_facet_query.py) ([async version](samples/async_samples/sample_facet_query_async.py)) + +* Get auto-completions: [sample_autocomplete.py](samples/sample_autocomplete.py) ([async version](samples/async_samples/sample_autocomplete_async.py)) + +* Get search suggestions: [sample_suggestions.py](samples/sample_suggestions.py) ([async version](samples/async_samples/sample_suggestions_async.py)) + +* Perform basic document updates: [sample_crud_operations.py](samples/sample_crud_operations.py) ([async version](samples/async_samples/sample_crud_operations_async.py)) + +### Additional documentation + +For more extensive documentation on Cognitive Search, see the [Azure Cognitive Search documentation](https://docs.microsoft.com/en-us/azure/search/) on docs.microsoft.com. + +## Contributing + +This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit [cla.microsoft.com][cla]. + +When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA. + +This project has adopted the [Microsoft Open Source Code of Conduct][code_of_conduct]. For more information see the [Code of Conduct FAQ][coc_faq] or contact [opencode@microsoft.com][coc_contact] with any additional questions or comments. + +## Related projects + +* [Microsoft Azure SDK for Python](https://github.com/Azure/azure-sdk-for-python) + + + +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fsdk%2Fsearch%2Fazure-search-documents%2FREADME.png) + +[azure_cli]: https://docs.microsoft.com/cli/azure +[azure_core]: ../../core/azure-core/README.md +[azure_sub]: https://azure.microsoft.com/free/ +[search_resource]: https://docs.microsoft.com/en-us/azure/search/search-create-service-portal +[azure_portal]: https://portal.azure.com + +[python_logging]: https://docs.python.org/3.5/library/logging.html + +[cla]: https://cla.microsoft.com +[code_of_conduct]: https://opensource.microsoft.com/codeofconduct/ +[coc_faq]: https://opensource.microsoft.com/codeofconduct/faq/ +[coc_contact]: mailto:opencode@microsoft.com diff --git a/sdk/search/azure-search-documents/azure/__init__.py b/sdk/search/azure-search-documents/azure/__init__.py new file mode 100644 index 000000000000..90d4cce39f79 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/__init__.py @@ -0,0 +1,6 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +# pylint:disable=missing-docstring +__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: str diff --git a/sdk/search/azure-search-documents/azure/search/__init__.py b/sdk/search/azure-search-documents/azure/search/__init__.py new file mode 100644 index 000000000000..90d4cce39f79 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/__init__.py @@ -0,0 +1,6 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +# pylint:disable=missing-docstring +__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: str diff --git a/sdk/search/azure-search-documents/azure/search/documents/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/__init__.py new file mode 100644 index 000000000000..bb7eade6204e --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/__init__.py @@ -0,0 +1,59 @@ +# -------------------------------------------------------------------------- +# +# Copyright (c) Microsoft Corporation. All rights reserved. +# +# The MIT License (MIT) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the ""Software""), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +# -------------------------------------------------------------------------- + +from ._version import VERSION + +__version__ = VERSION + +from ._credential import SearchApiKeyCredential + +from ._index import ( + AutocompleteQuery, + IndexAction, + IndexDocumentsBatch, + IndexingResult, + SearchIndexClient, + SearchQuery, + SearchItemPaged, + SuggestQuery, + odata, +) + +from ._service import SearchServiceClient + +__all__ = ( + "AutocompleteQuery", + "IndexAction", + "IndexDocumentsBatch", + "IndexingResult", + "SearchApiKeyCredential", + "SearchIndexClient", + "SearchItemPaged", + "SearchQuery", + "SearchServiceClient", + "SuggestQuery", + "odata", +) diff --git a/sdk/search/azure-search-documents/azure/search/documents/_credential.py b/sdk/search/azure-search-documents/azure/search/documents/_credential.py new file mode 100644 index 000000000000..708a2554b4fc --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_credential.py @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +import six + + +class SearchApiKeyCredential(object): + """Credential type used for authenticating a SearchIndexClient + with an admin or query API key. + + :param api_key: An admin or query key for your Azure Search index. + :type api_key: str + + """ + + def __init__(self, api_key): + # type: (str) -> None + if not isinstance(api_key, six.string_types): + raise TypeError("api_key must be a string.") + self._api_key = api_key # type: str + + @property + def api_key(self): + """The value of the configured API key. + + :rtype: str + """ + # type () -> str + return self._api_key + + def update_key(self, key): + """Update the API key. + This can be used when you've regenerated your service API key and want + to update long-lived clients. + + :param str key: The API key to your Azure search account. + """ + self._api_key = key diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_index/__init__.py new file mode 100644 index 000000000000..d43ed7e45817 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/__init__.py @@ -0,0 +1,19 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +from ._index_documents_batch import IndexDocumentsBatch # pylint: disable=unused-import +from ._search_index_client import ( # pylint: disable=unused-import + odata, + SearchItemPaged, + SearchIndexClient, +) +from ._queries import ( # pylint: disable=unused-import + AutocompleteQuery, + SearchQuery, + SuggestQuery, +) +from ._generated.models import ( # pylint: disable=unused-import + IndexAction, + IndexingResult, +) diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/__init__.py new file mode 100644 index 000000000000..ac06514f5327 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/__init__.py @@ -0,0 +1,8 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._search_index_client import SearchIndexClient +__all__ = ['SearchIndexClient'] diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/_configuration.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/_configuration.py new file mode 100644 index 000000000000..3010c29cca9f --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/_configuration.py @@ -0,0 +1,57 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies + +VERSION = "unknown" + +class SearchIndexClientConfiguration(Configuration): + """Configuration for SearchIndexClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param endpoint: The endpoint URL of the search service. + :type endpoint: str + :param index_name: The name of the index. + :type index_name: str + """ + + def __init__( + self, + endpoint, # type: str + index_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + if endpoint is None: + raise ValueError("Parameter 'endpoint' must not be None.") + if index_name is None: + raise ValueError("Parameter 'index_name' must not be None.") + super(SearchIndexClientConfiguration, self).__init__(**kwargs) + + self.endpoint = endpoint + self.index_name = index_name + self.api_version = "2019-05-06-Preview" + kwargs.setdefault('sdk_moniker', 'searchindexclient/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs # type: Any + ): + # type: (...) -> None + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/_search_index_client.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/_search_index_client.py new file mode 100644 index 000000000000..7f112a9888de --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/_search_index_client.py @@ -0,0 +1,57 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any + +from azure.core import PipelineClient +from msrest import Deserializer, Serializer + +from ._configuration import SearchIndexClientConfiguration +from .operations import DocumentsOperations +from . import models + + +class SearchIndexClient(object): + """Client that can be used to query an index and upload, merge, or delete documents. + + :ivar documents: DocumentsOperations operations + :vartype documents: search_index_client.operations.DocumentsOperations + :param endpoint: The endpoint URL of the search service. + :type endpoint: str + :param index_name: The name of the index. + :type index_name: str + """ + + def __init__( + self, + endpoint, # type: str + index_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + base_url = '{endpoint}/indexes(\'{indexName}\')' + self._config = SearchIndexClientConfiguration(endpoint, index_name, **kwargs) + self._client = PipelineClient(base_url=base_url, config=self._config, **kwargs) + + client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + self._serialize = Serializer(client_models) + self._deserialize = Deserializer(client_models) + + self.documents = DocumentsOperations( + self._client, self._config, self._serialize, self._deserialize) + + def close(self): + # type: () -> None + self._client.close() + + def __enter__(self): + # type: () -> SearchIndexClient + self._client.__enter__() + return self + + def __exit__(self, *exc_details): + # type: (Any) -> None + self._client.__exit__(*exc_details) diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/__init__.py new file mode 100644 index 000000000000..a06ffca12355 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/__init__.py @@ -0,0 +1,8 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._search_index_client_async import SearchIndexClient +__all__ = ['SearchIndexClient'] diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/_configuration_async.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/_configuration_async.py new file mode 100644 index 000000000000..2fe06bf7f544 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/_configuration_async.py @@ -0,0 +1,55 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies + +VERSION = "unknown" + +class SearchIndexClientConfiguration(Configuration): + """Configuration for SearchIndexClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param endpoint: The endpoint URL of the search service. + :type endpoint: str + :param index_name: The name of the index. + :type index_name: str + """ + + def __init__( + self, + endpoint: str, + index_name: str, + **kwargs: Any + ) -> None: + if endpoint is None: + raise ValueError("Parameter 'endpoint' must not be None.") + if index_name is None: + raise ValueError("Parameter 'index_name' must not be None.") + super(SearchIndexClientConfiguration, self).__init__(**kwargs) + + self.endpoint = endpoint + self.index_name = index_name + self.api_version = "2019-05-06-Preview" + kwargs.setdefault('sdk_moniker', 'searchindexclient/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs: Any + ) -> None: + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/_search_index_client_async.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/_search_index_client_async.py new file mode 100644 index 000000000000..06ec78b349c8 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/_search_index_client_async.py @@ -0,0 +1,53 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any + +from azure.core import AsyncPipelineClient +from msrest import Deserializer, Serializer + +from ._configuration_async import SearchIndexClientConfiguration +from .operations_async import DocumentsOperations +from .. import models + + +class SearchIndexClient(object): + """Client that can be used to query an index and upload, merge, or delete documents. + + :ivar documents: DocumentsOperations operations + :vartype documents: search_index_client.aio.operations_async.DocumentsOperations + :param endpoint: The endpoint URL of the search service. + :type endpoint: str + :param index_name: The name of the index. + :type index_name: str + """ + + def __init__( + self, + endpoint: str, + index_name: str, + **kwargs: Any + ) -> None: + base_url = '{endpoint}/indexes(\'{indexName}\')' + self._config = SearchIndexClientConfiguration(endpoint, index_name, **kwargs) + self._client = AsyncPipelineClient(base_url=base_url, config=self._config, **kwargs) + + client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + self._serialize = Serializer(client_models) + self._deserialize = Deserializer(client_models) + + self.documents = DocumentsOperations( + self._client, self._config, self._serialize, self._deserialize) + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> "SearchIndexClient": + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details) -> None: + await self._client.__aexit__(*exc_details) diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/operations_async/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/operations_async/__init__.py new file mode 100644 index 000000000000..6b51d112c132 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/operations_async/__init__.py @@ -0,0 +1,11 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._documents_operations_async import DocumentsOperations + +__all__ = [ + 'DocumentsOperations', +] diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/operations_async/_documents_operations_async.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/operations_async/_documents_operations_async.py new file mode 100644 index 000000000000..dc288eb01147 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/aio/operations_async/_documents_operations_async.py @@ -0,0 +1,767 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, List, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class DocumentsOperations: + """DocumentsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~search_index_client.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def count( + self, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> int: + """Queries the number of documents in the index. + + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: long or the result of cls(response) + :rtype: long + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[int] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.count.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('long', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + count.metadata = {'url': '/docs/$count'} + + async def search_get( + self, + search_text: Optional[str] = None, + search_options: Optional["models.SearchOptions"] = None, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.SearchDocumentsResult": + """Searches for documents in the index. + + :param search_text: A full-text search query expression; Use "*" or omit this parameter to + match all documents. + :type search_text: str + :param search_options: Parameter group. + :type search_options: ~search_index_client.models.SearchOptions + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SearchDocumentsResult or the result of cls(response) + :rtype: ~search_index_client.models.SearchDocumentsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SearchDocumentsResult"] + error_map = kwargs.pop('error_map', {}) + + _include_total_result_count = None + _facets = None + _filter = None + _highlight_fields = None + _highlight_post_tag = None + _highlight_pre_tag = None + _minimum_coverage = None + _order_by = None + _query_type = None + _scoring_parameters = None + _scoring_profile = None + _search_fields = None + _search_mode = None + _select = None + _skip = None + _top = None + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + if search_options is not None: + _include_total_result_count = search_options.include_total_result_count + _facets = search_options.facets + _filter = search_options.filter + _highlight_fields = search_options.highlight_fields + _highlight_post_tag = search_options.highlight_post_tag + _highlight_pre_tag = search_options.highlight_pre_tag + _minimum_coverage = search_options.minimum_coverage + _order_by = search_options.order_by + _query_type = search_options.query_type + _scoring_parameters = search_options.scoring_parameters + _scoring_profile = search_options.scoring_profile + _search_fields = search_options.search_fields + _search_mode = search_options.search_mode + _select = search_options.select + _skip = search_options.skip + _top = search_options.top + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.search_get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if search_text is not None: + query_parameters['search'] = self._serialize.query("search_text", search_text, 'str') + if _include_total_result_count is not None: + query_parameters['$count'] = self._serialize.query("include_total_result_count", _include_total_result_count, 'bool') + if _facets is not None: + query_parameters['facet'] = self._serialize.query("facets", _facets, '[str]', div=',') + if _filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", _filter, 'str') + if _highlight_fields is not None: + query_parameters['highlight'] = self._serialize.query("highlight_fields", _highlight_fields, '[str]') + if _highlight_post_tag is not None: + query_parameters['highlightPostTag'] = self._serialize.query("highlight_post_tag", _highlight_post_tag, 'str') + if _highlight_pre_tag is not None: + query_parameters['highlightPreTag'] = self._serialize.query("highlight_pre_tag", _highlight_pre_tag, 'str') + if _minimum_coverage is not None: + query_parameters['minimumCoverage'] = self._serialize.query("minimum_coverage", _minimum_coverage, 'float') + if _order_by is not None: + query_parameters['$orderby'] = self._serialize.query("order_by", _order_by, '[str]') + if _query_type is not None: + query_parameters['queryType'] = self._serialize.query("query_type", _query_type, 'str') + if _scoring_parameters is not None: + query_parameters['scoringParameter'] = self._serialize.query("scoring_parameters", _scoring_parameters, '[str]', div=',') + if _scoring_profile is not None: + query_parameters['scoringProfile'] = self._serialize.query("scoring_profile", _scoring_profile, 'str') + if _search_fields is not None: + query_parameters['searchFields'] = self._serialize.query("search_fields", _search_fields, '[str]') + if _search_mode is not None: + query_parameters['searchMode'] = self._serialize.query("search_mode", _search_mode, 'str') + if _select is not None: + query_parameters['$select'] = self._serialize.query("select", _select, '[str]') + if _skip is not None: + query_parameters['$skip'] = self._serialize.query("skip", _skip, 'int') + if _top is not None: + query_parameters['$top'] = self._serialize.query("top", _top, 'int') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('SearchDocumentsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + search_get.metadata = {'url': '/docs'} + + async def search_post( + self, + search_request: "models.SearchRequest", + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.SearchDocumentsResult": + """Searches for documents in the index. + + :param search_request: The definition of the Search request. + :type search_request: ~search_index_client.models.SearchRequest + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SearchDocumentsResult or the result of cls(response) + :rtype: ~search_index_client.models.SearchDocumentsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SearchDocumentsResult"] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.search_post.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(search_request, 'SearchRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('SearchDocumentsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + search_post.metadata = {'url': '/docs/search.post.search'} + + async def get( + self, + key: str, + selected_fields: Optional[List[str]] = None, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> object: + """Retrieves a document from the index. + + :param key: The key of the document to retrieve. + :type key: str + :param selected_fields: List of field names to retrieve for the document; Any field not + retrieved will be missing from the returned document. + :type selected_fields: list[str] + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: object or the result of cls(response) + :rtype: object + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[object] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + 'key': self._serialize.url("key", key, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if selected_fields is not None: + query_parameters['$select'] = self._serialize.query("selected_fields", selected_fields, '[str]') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('object', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/docs(\'{key}\')'} + + async def suggest_get( + self, + search_text: str, + suggester_name: str, + suggest_options: Optional["models.SuggestOptions"] = None, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.SuggestDocumentsResult": + """Suggests documents in the index that match the given partial query text. + + :param search_text: The search text to use to suggest documents. Must be at least 1 character, + and no more than 100 characters. + :type search_text: str + :param suggester_name: The name of the suggester as specified in the suggesters collection + that's part of the index definition. + :type suggester_name: str + :param suggest_options: Parameter group. + :type suggest_options: ~search_index_client.models.SuggestOptions + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SuggestDocumentsResult or the result of cls(response) + :rtype: ~search_index_client.models.SuggestDocumentsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SuggestDocumentsResult"] + error_map = kwargs.pop('error_map', {}) + + _filter = None + _use_fuzzy_matching = None + _highlight_post_tag = None + _highlight_pre_tag = None + _minimum_coverage = None + _order_by = None + _search_fields = None + _select = None + _top = None + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + if suggest_options is not None: + _filter = suggest_options.filter + _use_fuzzy_matching = suggest_options.use_fuzzy_matching + _highlight_post_tag = suggest_options.highlight_post_tag + _highlight_pre_tag = suggest_options.highlight_pre_tag + _minimum_coverage = suggest_options.minimum_coverage + _order_by = suggest_options.order_by + _search_fields = suggest_options.search_fields + _select = suggest_options.select + _top = suggest_options.top + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.suggest_get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['search'] = self._serialize.query("search_text", search_text, 'str') + query_parameters['suggesterName'] = self._serialize.query("suggester_name", suggester_name, 'str') + if _filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", _filter, 'str') + if _use_fuzzy_matching is not None: + query_parameters['fuzzy'] = self._serialize.query("use_fuzzy_matching", _use_fuzzy_matching, 'bool') + if _highlight_post_tag is not None: + query_parameters['highlightPostTag'] = self._serialize.query("highlight_post_tag", _highlight_post_tag, 'str') + if _highlight_pre_tag is not None: + query_parameters['highlightPreTag'] = self._serialize.query("highlight_pre_tag", _highlight_pre_tag, 'str') + if _minimum_coverage is not None: + query_parameters['minimumCoverage'] = self._serialize.query("minimum_coverage", _minimum_coverage, 'float') + if _order_by is not None: + query_parameters['$orderby'] = self._serialize.query("order_by", _order_by, '[str]') + if _search_fields is not None: + query_parameters['searchFields'] = self._serialize.query("search_fields", _search_fields, '[str]') + if _select is not None: + query_parameters['$select'] = self._serialize.query("select", _select, '[str]') + if _top is not None: + query_parameters['$top'] = self._serialize.query("top", _top, 'int') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('SuggestDocumentsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + suggest_get.metadata = {'url': '/docs/search.suggest'} + + async def suggest_post( + self, + suggest_request: "models.SuggestRequest", + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.SuggestDocumentsResult": + """Suggests documents in the index that match the given partial query text. + + :param suggest_request: The Suggest request. + :type suggest_request: ~search_index_client.models.SuggestRequest + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SuggestDocumentsResult or the result of cls(response) + :rtype: ~search_index_client.models.SuggestDocumentsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SuggestDocumentsResult"] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.suggest_post.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(suggest_request, 'SuggestRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('SuggestDocumentsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + suggest_post.metadata = {'url': '/docs/search.post.suggest'} + + async def index( + self, + batch: "models.IndexBatch", + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.IndexDocumentsResult": + """Sends a batch of document write actions to the index. + + :param batch: The batch of index actions. + :type batch: ~search_index_client.models.IndexBatch + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IndexDocumentsResult or the result of cls(response) + :rtype: ~search_index_client.models.IndexDocumentsResult or ~search_index_client.models.IndexDocumentsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IndexDocumentsResult"] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.index.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(batch, 'IndexBatch') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 207]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('IndexDocumentsResult', pipeline_response) + + if response.status_code == 207: + deserialized = self._deserialize('IndexDocumentsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + index.metadata = {'url': '/docs/search.index'} + + async def autocomplete_get( + self, + search_text: str, + suggester_name: str, + request_options: Optional["models.RequestOptions"] = None, + autocomplete_options: Optional["models.AutocompleteOptions"] = None, + **kwargs + ) -> "models.AutocompleteResult": + """Autocompletes incomplete query terms based on input text and matching terms in the index. + + :param search_text: The incomplete term which should be auto-completed. + :type search_text: str + :param suggester_name: The name of the suggester as specified in the suggesters collection + that's part of the index definition. + :type suggester_name: str + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :param autocomplete_options: Parameter group. + :type autocomplete_options: ~search_index_client.models.AutocompleteOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AutocompleteResult or the result of cls(response) + :rtype: ~search_index_client.models.AutocompleteResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutocompleteResult"] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + _autocomplete_mode = None + _filter = None + _use_fuzzy_matching = None + _highlight_post_tag = None + _highlight_pre_tag = None + _minimum_coverage = None + _search_fields = None + _top = None + if autocomplete_options is not None: + _autocomplete_mode = autocomplete_options.autocomplete_mode + _filter = autocomplete_options.filter + _use_fuzzy_matching = autocomplete_options.use_fuzzy_matching + _highlight_post_tag = autocomplete_options.highlight_post_tag + _highlight_pre_tag = autocomplete_options.highlight_pre_tag + _minimum_coverage = autocomplete_options.minimum_coverage + _search_fields = autocomplete_options.search_fields + _top = autocomplete_options.top + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.autocomplete_get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + query_parameters['search'] = self._serialize.query("search_text", search_text, 'str') + query_parameters['suggesterName'] = self._serialize.query("suggester_name", suggester_name, 'str') + if _autocomplete_mode is not None: + query_parameters['autocompleteMode'] = self._serialize.query("autocomplete_mode", _autocomplete_mode, 'str') + if _filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", _filter, 'str') + if _use_fuzzy_matching is not None: + query_parameters['fuzzy'] = self._serialize.query("use_fuzzy_matching", _use_fuzzy_matching, 'bool') + if _highlight_post_tag is not None: + query_parameters['highlightPostTag'] = self._serialize.query("highlight_post_tag", _highlight_post_tag, 'str') + if _highlight_pre_tag is not None: + query_parameters['highlightPreTag'] = self._serialize.query("highlight_pre_tag", _highlight_pre_tag, 'str') + if _minimum_coverage is not None: + query_parameters['minimumCoverage'] = self._serialize.query("minimum_coverage", _minimum_coverage, 'float') + if _search_fields is not None: + query_parameters['searchFields'] = self._serialize.query("search_fields", _search_fields, '[str]') + if _top is not None: + query_parameters['$top'] = self._serialize.query("top", _top, 'int') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('AutocompleteResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + autocomplete_get.metadata = {'url': '/docs/search.autocomplete'} + + async def autocomplete_post( + self, + autocomplete_request: "models.AutocompleteRequest", + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.AutocompleteResult": + """Autocompletes incomplete query terms based on input text and matching terms in the index. + + :param autocomplete_request: The definition of the Autocomplete request. + :type autocomplete_request: ~search_index_client.models.AutocompleteRequest + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AutocompleteResult or the result of cls(response) + :rtype: ~search_index_client.models.AutocompleteResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutocompleteResult"] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.autocomplete_post.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(autocomplete_request, 'AutocompleteRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('AutocompleteResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + autocomplete_post.metadata = {'url': '/docs/search.post.autocomplete'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/models/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/models/__init__.py new file mode 100644 index 000000000000..ad760a1d771e --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/models/__init__.py @@ -0,0 +1,79 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +try: + from ._models_py3 import AutocompleteItem + from ._models_py3 import AutocompleteOptions + from ._models_py3 import AutocompleteRequest + from ._models_py3 import AutocompleteResult + from ._models_py3 import FacetResult + from ._models_py3 import IndexAction + from ._models_py3 import IndexBatch + from ._models_py3 import IndexDocumentsResult + from ._models_py3 import IndexingResult + from ._models_py3 import RequestOptions + from ._models_py3 import SearchDocumentsResult + from ._models_py3 import SearchError, SearchErrorException + from ._models_py3 import SearchOptions + from ._models_py3 import SearchRequest + from ._models_py3 import SearchResult + from ._models_py3 import SuggestDocumentsResult + from ._models_py3 import SuggestOptions + from ._models_py3 import SuggestRequest + from ._models_py3 import SuggestResult +except (SyntaxError, ImportError): + from ._models import AutocompleteItem # type: ignore + from ._models import AutocompleteOptions # type: ignore + from ._models import AutocompleteRequest # type: ignore + from ._models import AutocompleteResult # type: ignore + from ._models import FacetResult # type: ignore + from ._models import IndexAction # type: ignore + from ._models import IndexBatch # type: ignore + from ._models import IndexDocumentsResult # type: ignore + from ._models import IndexingResult # type: ignore + from ._models import RequestOptions # type: ignore + from ._models import SearchDocumentsResult # type: ignore + from ._models import SearchError, SearchErrorException # type: ignore + from ._models import SearchOptions # type: ignore + from ._models import SearchRequest # type: ignore + from ._models import SearchResult # type: ignore + from ._models import SuggestDocumentsResult # type: ignore + from ._models import SuggestOptions # type: ignore + from ._models import SuggestRequest # type: ignore + from ._models import SuggestResult # type: ignore + +from ._search_index_client_enums import ( + AutocompleteMode, + IndexActionType, + QueryType, + SearchMode, +) + +__all__ = [ + 'AutocompleteItem', + 'AutocompleteOptions', + 'AutocompleteRequest', + 'AutocompleteResult', + 'FacetResult', + 'IndexAction', + 'IndexBatch', + 'IndexDocumentsResult', + 'IndexingResult', + 'RequestOptions', + 'SearchDocumentsResult', + 'SearchError', 'SearchErrorException', + 'SearchOptions', + 'SearchRequest', + 'SearchResult', + 'SuggestDocumentsResult', + 'SuggestOptions', + 'SuggestRequest', + 'SuggestResult', + 'AutocompleteMode', + 'IndexActionType', + 'QueryType', + 'SearchMode', +] diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/models/_models.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/models/_models.py new file mode 100644 index 000000000000..88b4aacde572 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/models/_models.py @@ -0,0 +1,993 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.core.exceptions import HttpResponseError +import msrest.serialization + + +class AutocompleteItem(msrest.serialization.Model): + """The result of Autocomplete requests. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar text: Required. The completed term. + :vartype text: str + :ivar query_plus_text: Required. The query along with the completed term. + :vartype query_plus_text: str + """ + + _validation = { + 'text': {'required': True, 'readonly': True}, + 'query_plus_text': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'text': {'key': 'text', 'type': 'str'}, + 'query_plus_text': {'key': 'queryPlusText', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AutocompleteItem, self).__init__(**kwargs) + self.text = None + self.query_plus_text = None + + +class AutocompleteOptions(msrest.serialization.Model): + """Parameter group. + + :param autocomplete_mode: Specifies the mode for Autocomplete. The default is 'oneTerm'. Use + 'twoTerms' to get shingles and 'oneTermWithContext' to use the current context while producing + auto-completed terms. Possible values include: 'oneTerm', 'twoTerms', 'oneTermWithContext'. + :type autocomplete_mode: str or ~search_index_client.models.AutocompleteMode + :param filter: An OData expression that filters the documents used to produce completed terms + for the Autocomplete result. + :type filter: str + :param use_fuzzy_matching: A value indicating whether to use fuzzy matching for the + autocomplete query. Default is false. When set to true, the query will find terms even if + there's a substituted or missing character in the search text. While this provides a better + experience in some scenarios, it comes at a performance cost as fuzzy autocomplete queries are + slower and consume more resources. + :type use_fuzzy_matching: bool + :param highlight_post_tag: A string tag that is appended to hit highlights. Must be set with + highlightPreTag. If omitted, hit highlighting is disabled. + :type highlight_post_tag: str + :param highlight_pre_tag: A string tag that is prepended to hit highlights. Must be set with + highlightPostTag. If omitted, hit highlighting is disabled. + :type highlight_pre_tag: str + :param minimum_coverage: A number between 0 and 100 indicating the percentage of the index that + must be covered by an autocomplete query in order for the query to be reported as a success. + This parameter can be useful for ensuring search availability even for services with only one + replica. The default is 80. + :type minimum_coverage: float + :param search_fields: The list of field names to consider when querying for auto-completed + terms. Target fields must be included in the specified suggester. + :type search_fields: list[str] + :param top: The number of auto-completed terms to retrieve. This must be a value between 1 and + 100. The default is 5. + :type top: int + """ + + _attribute_map = { + 'autocomplete_mode': {'key': 'autocompleteMode', 'type': 'str'}, + 'filter': {'key': '$filter', 'type': 'str'}, + 'use_fuzzy_matching': {'key': 'UseFuzzyMatching', 'type': 'bool'}, + 'highlight_post_tag': {'key': 'highlightPostTag', 'type': 'str'}, + 'highlight_pre_tag': {'key': 'highlightPreTag', 'type': 'str'}, + 'minimum_coverage': {'key': 'minimumCoverage', 'type': 'float'}, + 'search_fields': {'key': 'searchFields', 'type': '[str]'}, + 'top': {'key': '$top', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(AutocompleteOptions, self).__init__(**kwargs) + self.autocomplete_mode = kwargs.get('autocomplete_mode', None) + self.filter = kwargs.get('filter', None) + self.use_fuzzy_matching = kwargs.get('use_fuzzy_matching', None) + self.highlight_post_tag = kwargs.get('highlight_post_tag', None) + self.highlight_pre_tag = kwargs.get('highlight_pre_tag', None) + self.minimum_coverage = kwargs.get('minimum_coverage', None) + self.search_fields = kwargs.get('search_fields', None) + self.top = kwargs.get('top', None) + + +class AutocompleteRequest(msrest.serialization.Model): + """Parameters for fuzzy matching, and other autocomplete query behaviors. + + All required parameters must be populated in order to send to Azure. + + :param search_text: Required. The search text on which to base autocomplete results. + :type search_text: str + :param autocomplete_mode: Specifies the mode for Autocomplete. The default is 'oneTerm'. Use + 'twoTerms' to get shingles and 'oneTermWithContext' to use the current context while producing + auto-completed terms. Possible values include: 'oneTerm', 'twoTerms', 'oneTermWithContext'. + :type autocomplete_mode: str or ~search_index_client.models.AutocompleteMode + :param filter: An OData expression that filters the documents used to produce completed terms + for the Autocomplete result. + :type filter: str + :param use_fuzzy_matching: A value indicating whether to use fuzzy matching for the + autocomplete query. Default is false. When set to true, the query will autocomplete terms even + if there's a substituted or missing character in the search text. While this provides a better + experience in some scenarios, it comes at a performance cost as fuzzy autocomplete queries are + slower and consume more resources. + :type use_fuzzy_matching: bool + :param highlight_post_tag: A string tag that is appended to hit highlights. Must be set with + highlightPreTag. If omitted, hit highlighting is disabled. + :type highlight_post_tag: str + :param highlight_pre_tag: A string tag that is prepended to hit highlights. Must be set with + highlightPostTag. If omitted, hit highlighting is disabled. + :type highlight_pre_tag: str + :param minimum_coverage: A number between 0 and 100 indicating the percentage of the index that + must be covered by an autocomplete query in order for the query to be reported as a success. + This parameter can be useful for ensuring search availability even for services with only one + replica. The default is 80. + :type minimum_coverage: float + :param search_fields: The comma-separated list of field names to consider when querying for + auto-completed terms. Target fields must be included in the specified suggester. + :type search_fields: str + :param suggester_name: Required. The name of the suggester as specified in the suggesters + collection that's part of the index definition. + :type suggester_name: str + :param top: The number of auto-completed terms to retrieve. This must be a value between 1 and + 100. The default is 5. + :type top: int + """ + + _validation = { + 'search_text': {'required': True}, + 'suggester_name': {'required': True}, + } + + _attribute_map = { + 'search_text': {'key': 'search', 'type': 'str'}, + 'autocomplete_mode': {'key': 'autocompleteMode', 'type': 'str'}, + 'filter': {'key': 'filter', 'type': 'str'}, + 'use_fuzzy_matching': {'key': 'fuzzy', 'type': 'bool'}, + 'highlight_post_tag': {'key': 'highlightPostTag', 'type': 'str'}, + 'highlight_pre_tag': {'key': 'highlightPreTag', 'type': 'str'}, + 'minimum_coverage': {'key': 'minimumCoverage', 'type': 'float'}, + 'search_fields': {'key': 'searchFields', 'type': 'str'}, + 'suggester_name': {'key': 'suggesterName', 'type': 'str'}, + 'top': {'key': 'top', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(AutocompleteRequest, self).__init__(**kwargs) + self.search_text = kwargs.get('search_text', None) + self.autocomplete_mode = kwargs.get('autocomplete_mode', None) + self.filter = kwargs.get('filter', None) + self.use_fuzzy_matching = kwargs.get('use_fuzzy_matching', None) + self.highlight_post_tag = kwargs.get('highlight_post_tag', None) + self.highlight_pre_tag = kwargs.get('highlight_pre_tag', None) + self.minimum_coverage = kwargs.get('minimum_coverage', None) + self.search_fields = kwargs.get('search_fields', None) + self.suggester_name = kwargs.get('suggester_name', None) + self.top = kwargs.get('top', None) + + +class AutocompleteResult(msrest.serialization.Model): + """The result of Autocomplete query. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar coverage: A value indicating the percentage of the index that was considered by the + autocomplete request, or null if minimumCoverage was not specified in the request. + :vartype coverage: float + :ivar results: Required. The list of returned Autocompleted items. + :vartype results: list[~search_index_client.models.AutocompleteItem] + """ + + _validation = { + 'coverage': {'readonly': True}, + 'results': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'coverage': {'key': '@search\\.coverage', 'type': 'float'}, + 'results': {'key': 'value', 'type': '[AutocompleteItem]'}, + } + + def __init__( + self, + **kwargs + ): + super(AutocompleteResult, self).__init__(**kwargs) + self.coverage = None + self.results = None + + +class FacetResult(msrest.serialization.Model): + """A single bucket of a facet query result. Reports the number of documents with a field value falling within a particular range or having a particular value or interval. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :ivar count: The approximate count of documents falling within the bucket described by this + facet. + :vartype count: long + """ + + _validation = { + 'count': {'readonly': True}, + } + + _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, + 'count': {'key': 'count', 'type': 'long'}, + } + + def __init__( + self, + **kwargs + ): + super(FacetResult, self).__init__(**kwargs) + self.additional_properties = kwargs.get('additional_properties', None) + self.count = None + + +class IndexAction(msrest.serialization.Model): + """Represents an index action that operates on a document. + + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :param action_type: The operation to perform on a document in an indexing batch. Possible + values include: 'upload', 'merge', 'mergeOrUpload', 'delete'. + :type action_type: str or ~search_index_client.models.IndexActionType + """ + + _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, + 'action_type': {'key': '@search\\.action', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexAction, self).__init__(**kwargs) + self.additional_properties = kwargs.get('additional_properties', None) + self.action_type = kwargs.get('action_type', None) + + +class IndexBatch(msrest.serialization.Model): + """Contains a batch of document write actions to send to the index. + + All required parameters must be populated in order to send to Azure. + + :param actions: Required. The actions in the batch. + :type actions: list[~search_index_client.models.IndexAction] + """ + + _validation = { + 'actions': {'required': True}, + } + + _attribute_map = { + 'actions': {'key': 'value', 'type': '[IndexAction]'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexBatch, self).__init__(**kwargs) + self.actions = kwargs.get('actions', None) + + +class IndexDocumentsResult(msrest.serialization.Model): + """Response containing the status of operations for all documents in the indexing request. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar results: Required. The list of status information for each document in the indexing + request. + :vartype results: list[~search_index_client.models.IndexingResult] + """ + + _validation = { + 'results': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'results': {'key': 'value', 'type': '[IndexingResult]'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexDocumentsResult, self).__init__(**kwargs) + self.results = None + + +class IndexingResult(msrest.serialization.Model): + """Status of an indexing operation for a single document. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar key: Required. The key of a document that was in the indexing request. + :vartype key: str + :ivar error_message: The error message explaining why the indexing operation failed for the + document identified by the key; null if indexing succeeded. + :vartype error_message: str + :ivar succeeded: Required. A value indicating whether the indexing operation succeeded for the + document identified by the key. + :vartype succeeded: bool + :ivar status_code: Required. The status code of the indexing operation. Possible values + include: 200 for a successful update or delete, 201 for successful document creation, 400 for a + malformed input document, 404 for document not found, 409 for a version conflict, 422 when the + index is temporarily unavailable, or 503 for when the service is too busy. + :vartype status_code: int + """ + + _validation = { + 'key': {'required': True, 'readonly': True}, + 'error_message': {'readonly': True}, + 'succeeded': {'required': True, 'readonly': True}, + 'status_code': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'key': {'key': 'key', 'type': 'str'}, + 'error_message': {'key': 'errorMessage', 'type': 'str'}, + 'succeeded': {'key': 'status', 'type': 'bool'}, + 'status_code': {'key': 'statusCode', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexingResult, self).__init__(**kwargs) + self.key = None + self.error_message = None + self.succeeded = None + self.status_code = None + + +class RequestOptions(msrest.serialization.Model): + """Parameter group. + + :param x_ms_client_request_id: The tracking ID sent with the request to help with debugging. + :type x_ms_client_request_id: str + """ + + _attribute_map = { + 'x_ms_client_request_id': {'key': 'x-ms-client-request-id', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(RequestOptions, self).__init__(**kwargs) + self.x_ms_client_request_id = kwargs.get('x_ms_client_request_id', None) + + +class SearchDocumentsResult(msrest.serialization.Model): + """Response containing search results from an index. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar count: The total count of results found by the search operation, or null if the count was + not requested. If present, the count may be greater than the number of results in this + response. This can happen if you use the $top or $skip parameters, or if Azure Cognitive Search + can't return all the requested documents in a single Search response. + :vartype count: long + :ivar coverage: A value indicating the percentage of the index that was included in the query, + or null if minimumCoverage was not specified in the request. + :vartype coverage: float + :ivar facets: The facet query results for the search operation, organized as a collection of + buckets for each faceted field; null if the query did not include any facet expressions. + :vartype facets: dict[str, list[~search_index_client.models.FacetResult]] + :ivar next_page_parameters: Continuation JSON payload returned when Azure Cognitive Search + can't return all the requested results in a single Search response. You can use this JSON along + with @odata.nextLink to formulate another POST Search request to get the next part of the + search response. + :vartype next_page_parameters: ~search_index_client.models.SearchRequest + :ivar results: Required. The sequence of results returned by the query. + :vartype results: list[~search_index_client.models.SearchResult] + :ivar next_link: Continuation URL returned when Azure Cognitive Search can't return all the + requested results in a single Search response. You can use this URL to formulate another GET or + POST Search request to get the next part of the search response. Make sure to use the same verb + (GET or POST) as the request that produced this response. + :vartype next_link: str + """ + + _validation = { + 'count': {'readonly': True}, + 'coverage': {'readonly': True}, + 'facets': {'readonly': True}, + 'next_page_parameters': {'readonly': True}, + 'results': {'required': True, 'readonly': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'count': {'key': '@odata\\.count', 'type': 'long'}, + 'coverage': {'key': '@search\\.coverage', 'type': 'float'}, + 'facets': {'key': '@search\\.facets', 'type': '{[FacetResult]}'}, + 'next_page_parameters': {'key': '@search\\.nextPageParameters', 'type': 'SearchRequest'}, + 'results': {'key': 'value', 'type': '[SearchResult]'}, + 'next_link': {'key': '@odata\\.nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SearchDocumentsResult, self).__init__(**kwargs) + self.count = None + self.coverage = None + self.facets = None + self.next_page_parameters = None + self.results = None + self.next_link = None + + +class SearchErrorException(HttpResponseError): + """Server responded with exception of type: 'SearchError'. + + :param response: Server response to be deserialized. + :param error_model: A deserialized model of the response body as model. + """ + + def __init__(self, response, error_model): + self.error = error_model + super(SearchErrorException, self).__init__(response=response, error_model=error_model) + + @classmethod + def from_response(cls, response, deserialize): + """Deserialize this response as this exception, or a subclass of this exception. + + :param response: Server response to be deserialized. + :param deserialize: A deserializer + """ + model_name = 'SearchError' + error = deserialize(model_name, response) + if error is None: + error = deserialize.dependencies[model_name]() + return error._EXCEPTION_TYPE(response, error) + + +class SearchError(msrest.serialization.Model): + """Describes an error condition for the Azure Cognitive Search API. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar code: One of a server-defined set of error codes. + :vartype code: str + :ivar message: Required. A human-readable representation of the error. + :vartype message: str + :ivar details: An array of details about specific errors that led to this reported error. + :vartype details: list[~search_index_client.models.SearchError] + """ + _EXCEPTION_TYPE = SearchErrorException + + _validation = { + 'code': {'readonly': True}, + 'message': {'required': True, 'readonly': True}, + 'details': {'readonly': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[SearchError]'}, + } + + def __init__( + self, + **kwargs + ): + super(SearchError, self).__init__(**kwargs) + self.code = None + self.message = None + self.details = None + + +class SearchOptions(msrest.serialization.Model): + """Parameter group. + + :param include_total_result_count: A value that specifies whether to fetch the total count of + results. Default is false. Setting this value to true may have a performance impact. Note that + the count returned is an approximation. + :type include_total_result_count: bool + :param facets: The list of facet expressions to apply to the search query. Each facet + expression contains a field name, optionally followed by a comma-separated list of name:value + pairs. + :type facets: list[str] + :param filter: The OData $filter expression to apply to the search query. + :type filter: str + :param highlight_fields: The list of field names to use for hit highlights. Only searchable + fields can be used for hit highlighting. + :type highlight_fields: list[str] + :param highlight_post_tag: A string tag that is appended to hit highlights. Must be set with + highlightPreTag. Default is </em>. + :type highlight_post_tag: str + :param highlight_pre_tag: A string tag that is prepended to hit highlights. Must be set with + highlightPostTag. Default is <em>. + :type highlight_pre_tag: str + :param minimum_coverage: A number between 0 and 100 indicating the percentage of the index that + must be covered by a search query in order for the query to be reported as a success. This + parameter can be useful for ensuring search availability even for services with only one + replica. The default is 100. + :type minimum_coverage: float + :param order_by: The list of OData $orderby expressions by which to sort the results. Each + expression can be either a field name or a call to either the geo.distance() or the + search.score() functions. Each expression can be followed by asc to indicate ascending, and + desc to indicate descending. The default is ascending order. Ties will be broken by the match + scores of documents. If no OrderBy is specified, the default sort order is descending by + document match score. There can be at most 32 $orderby clauses. + :type order_by: list[str] + :param query_type: A value that specifies the syntax of the search query. The default is + 'simple'. Use 'full' if your query uses the Lucene query syntax. Possible values include: + 'simple', 'full'. + :type query_type: str or ~search_index_client.models.QueryType + :param scoring_parameters: The list of parameter values to be used in scoring functions (for + example, referencePointParameter) using the format name-values. For example, if the scoring + profile defines a function with a parameter called 'mylocation' the parameter string would be + "mylocation--122.2,44.8" (without the quotes). + :type scoring_parameters: list[str] + :param scoring_profile: The name of a scoring profile to evaluate match scores for matching + documents in order to sort the results. + :type scoring_profile: str + :param search_fields: The list of field names to which to scope the full-text search. When + using fielded search (fieldName:searchExpression) in a full Lucene query, the field names of + each fielded search expression take precedence over any field names listed in this parameter. + :type search_fields: list[str] + :param search_mode: A value that specifies whether any or all of the search terms must be + matched in order to count the document as a match. Possible values include: 'any', 'all'. + :type search_mode: str or ~search_index_client.models.SearchMode + :param select: The list of fields to retrieve. If unspecified, all fields marked as retrievable + in the schema are included. + :type select: list[str] + :param skip: The number of search results to skip. This value cannot be greater than 100,000. + If you need to scan documents in sequence, but cannot use $skip due to this limitation, + consider using $orderby on a totally-ordered key and $filter with a range query instead. + :type skip: int + :param top: The number of search results to retrieve. This can be used in conjunction with + $skip to implement client-side paging of search results. If results are truncated due to + server-side paging, the response will include a continuation token that can be used to issue + another Search request for the next page of results. + :type top: int + """ + + _attribute_map = { + 'include_total_result_count': {'key': 'IncludeTotalResultCount', 'type': 'bool'}, + 'facets': {'key': 'Facets', 'type': '[str]'}, + 'filter': {'key': '$filter', 'type': 'str'}, + 'highlight_fields': {'key': 'HighlightFields', 'type': '[str]'}, + 'highlight_post_tag': {'key': 'highlightPostTag', 'type': 'str'}, + 'highlight_pre_tag': {'key': 'highlightPreTag', 'type': 'str'}, + 'minimum_coverage': {'key': 'minimumCoverage', 'type': 'float'}, + 'order_by': {'key': 'OrderBy', 'type': '[str]'}, + 'query_type': {'key': 'queryType', 'type': 'str'}, + 'scoring_parameters': {'key': 'ScoringParameters', 'type': '[str]'}, + 'scoring_profile': {'key': 'scoringProfile', 'type': 'str'}, + 'search_fields': {'key': 'searchFields', 'type': '[str]'}, + 'search_mode': {'key': 'searchMode', 'type': 'str'}, + 'select': {'key': '$select', 'type': '[str]'}, + 'skip': {'key': '$skip', 'type': 'int'}, + 'top': {'key': '$top', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(SearchOptions, self).__init__(**kwargs) + self.include_total_result_count = kwargs.get('include_total_result_count', None) + self.facets = kwargs.get('facets', None) + self.filter = kwargs.get('filter', None) + self.highlight_fields = kwargs.get('highlight_fields', None) + self.highlight_post_tag = kwargs.get('highlight_post_tag', None) + self.highlight_pre_tag = kwargs.get('highlight_pre_tag', None) + self.minimum_coverage = kwargs.get('minimum_coverage', None) + self.order_by = kwargs.get('order_by', None) + self.query_type = kwargs.get('query_type', None) + self.scoring_parameters = kwargs.get('scoring_parameters', None) + self.scoring_profile = kwargs.get('scoring_profile', None) + self.search_fields = kwargs.get('search_fields', None) + self.search_mode = kwargs.get('search_mode', None) + self.select = kwargs.get('select', None) + self.skip = kwargs.get('skip', None) + self.top = kwargs.get('top', None) + + +class SearchRequest(msrest.serialization.Model): + """Parameters for filtering, sorting, faceting, paging, and other search query behaviors. + + :param include_total_result_count: A value that specifies whether to fetch the total count of + results. Default is false. Setting this value to true may have a performance impact. Note that + the count returned is an approximation. + :type include_total_result_count: bool + :param facets: The list of facet expressions to apply to the search query. Each facet + expression contains a field name, optionally followed by a comma-separated list of name:value + pairs. + :type facets: list[str] + :param filter: The OData $filter expression to apply to the search query. + :type filter: str + :param highlight_fields: The comma-separated list of field names to use for hit highlights. + Only searchable fields can be used for hit highlighting. + :type highlight_fields: str + :param highlight_post_tag: A string tag that is appended to hit highlights. Must be set with + highlightPreTag. Default is </em>. + :type highlight_post_tag: str + :param highlight_pre_tag: A string tag that is prepended to hit highlights. Must be set with + highlightPostTag. Default is <em>. + :type highlight_pre_tag: str + :param minimum_coverage: A number between 0 and 100 indicating the percentage of the index that + must be covered by a search query in order for the query to be reported as a success. This + parameter can be useful for ensuring search availability even for services with only one + replica. The default is 100. + :type minimum_coverage: float + :param order_by: The comma-separated list of OData $orderby expressions by which to sort the + results. Each expression can be either a field name or a call to either the geo.distance() or + the search.score() functions. Each expression can be followed by asc to indicate ascending, or + desc to indicate descending. The default is ascending order. Ties will be broken by the match + scores of documents. If no $orderby is specified, the default sort order is descending by + document match score. There can be at most 32 $orderby clauses. + :type order_by: str + :param query_type: A value that specifies the syntax of the search query. The default is + 'simple'. Use 'full' if your query uses the Lucene query syntax. Possible values include: + 'simple', 'full'. + :type query_type: str or ~search_index_client.models.QueryType + :param scoring_parameters: The list of parameter values to be used in scoring functions (for + example, referencePointParameter) using the format name-values. For example, if the scoring + profile defines a function with a parameter called 'mylocation' the parameter string would be + "mylocation--122.2,44.8" (without the quotes). + :type scoring_parameters: list[str] + :param scoring_profile: The name of a scoring profile to evaluate match scores for matching + documents in order to sort the results. + :type scoring_profile: str + :param search_text: A full-text search query expression; Use "*" or omit this parameter to + match all documents. + :type search_text: str + :param search_fields: The comma-separated list of field names to which to scope the full-text + search. When using fielded search (fieldName:searchExpression) in a full Lucene query, the + field names of each fielded search expression take precedence over any field names listed in + this parameter. + :type search_fields: str + :param search_mode: A value that specifies whether any or all of the search terms must be + matched in order to count the document as a match. Possible values include: 'any', 'all'. + :type search_mode: str or ~search_index_client.models.SearchMode + :param select: The comma-separated list of fields to retrieve. If unspecified, all fields + marked as retrievable in the schema are included. + :type select: str + :param skip: The number of search results to skip. This value cannot be greater than 100,000. + If you need to scan documents in sequence, but cannot use skip due to this limitation, consider + using orderby on a totally-ordered key and filter with a range query instead. + :type skip: int + :param top: The number of search results to retrieve. This can be used in conjunction with + $skip to implement client-side paging of search results. If results are truncated due to + server-side paging, the response will include a continuation token that can be used to issue + another Search request for the next page of results. + :type top: int + """ + + _attribute_map = { + 'include_total_result_count': {'key': 'count', 'type': 'bool'}, + 'facets': {'key': 'facets', 'type': '[str]'}, + 'filter': {'key': 'filter', 'type': 'str'}, + 'highlight_fields': {'key': 'highlight', 'type': 'str'}, + 'highlight_post_tag': {'key': 'highlightPostTag', 'type': 'str'}, + 'highlight_pre_tag': {'key': 'highlightPreTag', 'type': 'str'}, + 'minimum_coverage': {'key': 'minimumCoverage', 'type': 'float'}, + 'order_by': {'key': 'orderby', 'type': 'str'}, + 'query_type': {'key': 'queryType', 'type': 'str'}, + 'scoring_parameters': {'key': 'scoringParameters', 'type': '[str]'}, + 'scoring_profile': {'key': 'scoringProfile', 'type': 'str'}, + 'search_text': {'key': 'search', 'type': 'str'}, + 'search_fields': {'key': 'searchFields', 'type': 'str'}, + 'search_mode': {'key': 'searchMode', 'type': 'str'}, + 'select': {'key': 'select', 'type': 'str'}, + 'skip': {'key': 'skip', 'type': 'int'}, + 'top': {'key': 'top', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(SearchRequest, self).__init__(**kwargs) + self.include_total_result_count = kwargs.get('include_total_result_count', None) + self.facets = kwargs.get('facets', None) + self.filter = kwargs.get('filter', None) + self.highlight_fields = kwargs.get('highlight_fields', None) + self.highlight_post_tag = kwargs.get('highlight_post_tag', None) + self.highlight_pre_tag = kwargs.get('highlight_pre_tag', None) + self.minimum_coverage = kwargs.get('minimum_coverage', None) + self.order_by = kwargs.get('order_by', None) + self.query_type = kwargs.get('query_type', None) + self.scoring_parameters = kwargs.get('scoring_parameters', None) + self.scoring_profile = kwargs.get('scoring_profile', None) + self.search_text = kwargs.get('search_text', None) + self.search_fields = kwargs.get('search_fields', None) + self.search_mode = kwargs.get('search_mode', None) + self.select = kwargs.get('select', None) + self.skip = kwargs.get('skip', None) + self.top = kwargs.get('top', None) + + +class SearchResult(msrest.serialization.Model): + """Contains a document found by a search query, plus associated metadata. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :ivar score: Required. The relevance score of the document compared to other documents returned + by the query. + :vartype score: float + :ivar highlights: Text fragments from the document that indicate the matching search terms, + organized by each applicable field; null if hit highlighting was not enabled for the query. + :vartype highlights: dict[str, list[str]] + """ + + _validation = { + 'score': {'required': True, 'readonly': True}, + 'highlights': {'readonly': True}, + } + + _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, + 'score': {'key': '@search\\.score', 'type': 'float'}, + 'highlights': {'key': '@search\\.highlights', 'type': '{[str]}'}, + } + + def __init__( + self, + **kwargs + ): + super(SearchResult, self).__init__(**kwargs) + self.additional_properties = kwargs.get('additional_properties', None) + self.score = None + self.highlights = None + + +class SuggestDocumentsResult(msrest.serialization.Model): + """Response containing suggestion query results from an index. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar results: Required. The sequence of results returned by the query. + :vartype results: list[~search_index_client.models.SuggestResult] + :ivar coverage: A value indicating the percentage of the index that was included in the query, + or null if minimumCoverage was not set in the request. + :vartype coverage: float + """ + + _validation = { + 'results': {'required': True, 'readonly': True}, + 'coverage': {'readonly': True}, + } + + _attribute_map = { + 'results': {'key': 'value', 'type': '[SuggestResult]'}, + 'coverage': {'key': '@search\\.coverage', 'type': 'float'}, + } + + def __init__( + self, + **kwargs + ): + super(SuggestDocumentsResult, self).__init__(**kwargs) + self.results = None + self.coverage = None + + +class SuggestOptions(msrest.serialization.Model): + """Parameter group. + + :param filter: An OData expression that filters the documents considered for suggestions. + :type filter: str + :param use_fuzzy_matching: A value indicating whether to use fuzzy matching for the suggestions + query. Default is false. When set to true, the query will find terms even if there's a + substituted or missing character in the search text. While this provides a better experience in + some scenarios, it comes at a performance cost as fuzzy suggestions queries are slower and + consume more resources. + :type use_fuzzy_matching: bool + :param highlight_post_tag: A string tag that is appended to hit highlights. Must be set with + highlightPreTag. If omitted, hit highlighting of suggestions is disabled. + :type highlight_post_tag: str + :param highlight_pre_tag: A string tag that is prepended to hit highlights. Must be set with + highlightPostTag. If omitted, hit highlighting of suggestions is disabled. + :type highlight_pre_tag: str + :param minimum_coverage: A number between 0 and 100 indicating the percentage of the index that + must be covered by a suggestions query in order for the query to be reported as a success. This + parameter can be useful for ensuring search availability even for services with only one + replica. The default is 80. + :type minimum_coverage: float + :param order_by: The list of OData $orderby expressions by which to sort the results. Each + expression can be either a field name or a call to either the geo.distance() or the + search.score() functions. Each expression can be followed by asc to indicate ascending, or desc + to indicate descending. The default is ascending order. Ties will be broken by the match scores + of documents. If no $orderby is specified, the default sort order is descending by document + match score. There can be at most 32 $orderby clauses. + :type order_by: list[str] + :param search_fields: The list of field names to search for the specified search text. Target + fields must be included in the specified suggester. + :type search_fields: list[str] + :param select: The list of fields to retrieve. If unspecified, only the key field will be + included in the results. + :type select: list[str] + :param top: The number of suggestions to retrieve. The value must be a number between 1 and + 100. The default is 5. + :type top: int + """ + + _attribute_map = { + 'filter': {'key': '$filter', 'type': 'str'}, + 'use_fuzzy_matching': {'key': 'UseFuzzyMatching', 'type': 'bool'}, + 'highlight_post_tag': {'key': 'highlightPostTag', 'type': 'str'}, + 'highlight_pre_tag': {'key': 'highlightPreTag', 'type': 'str'}, + 'minimum_coverage': {'key': 'minimumCoverage', 'type': 'float'}, + 'order_by': {'key': 'OrderBy', 'type': '[str]'}, + 'search_fields': {'key': 'searchFields', 'type': '[str]'}, + 'select': {'key': '$select', 'type': '[str]'}, + 'top': {'key': '$top', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(SuggestOptions, self).__init__(**kwargs) + self.filter = kwargs.get('filter', None) + self.use_fuzzy_matching = kwargs.get('use_fuzzy_matching', None) + self.highlight_post_tag = kwargs.get('highlight_post_tag', None) + self.highlight_pre_tag = kwargs.get('highlight_pre_tag', None) + self.minimum_coverage = kwargs.get('minimum_coverage', None) + self.order_by = kwargs.get('order_by', None) + self.search_fields = kwargs.get('search_fields', None) + self.select = kwargs.get('select', None) + self.top = kwargs.get('top', None) + + +class SuggestRequest(msrest.serialization.Model): + """Parameters for filtering, sorting, fuzzy matching, and other suggestions query behaviors. + + All required parameters must be populated in order to send to Azure. + + :param filter: An OData expression that filters the documents considered for suggestions. + :type filter: str + :param use_fuzzy_matching: A value indicating whether to use fuzzy matching for the suggestion + query. Default is false. When set to true, the query will find suggestions even if there's a + substituted or missing character in the search text. While this provides a better experience in + some scenarios, it comes at a performance cost as fuzzy suggestion searches are slower and + consume more resources. + :type use_fuzzy_matching: bool + :param highlight_post_tag: A string tag that is appended to hit highlights. Must be set with + highlightPreTag. If omitted, hit highlighting of suggestions is disabled. + :type highlight_post_tag: str + :param highlight_pre_tag: A string tag that is prepended to hit highlights. Must be set with + highlightPostTag. If omitted, hit highlighting of suggestions is disabled. + :type highlight_pre_tag: str + :param minimum_coverage: A number between 0 and 100 indicating the percentage of the index that + must be covered by a suggestion query in order for the query to be reported as a success. This + parameter can be useful for ensuring search availability even for services with only one + replica. The default is 80. + :type minimum_coverage: float + :param order_by: The comma-separated list of OData $orderby expressions by which to sort the + results. Each expression can be either a field name or a call to either the geo.distance() or + the search.score() functions. Each expression can be followed by asc to indicate ascending, or + desc to indicate descending. The default is ascending order. Ties will be broken by the match + scores of documents. If no $orderby is specified, the default sort order is descending by + document match score. There can be at most 32 $orderby clauses. + :type order_by: str + :param search_text: Required. The search text to use to suggest documents. Must be at least 1 + character, and no more than 100 characters. + :type search_text: str + :param search_fields: The comma-separated list of field names to search for the specified + search text. Target fields must be included in the specified suggester. + :type search_fields: str + :param select: The comma-separated list of fields to retrieve. If unspecified, only the key + field will be included in the results. + :type select: str + :param suggester_name: Required. The name of the suggester as specified in the suggesters + collection that's part of the index definition. + :type suggester_name: str + :param top: The number of suggestions to retrieve. This must be a value between 1 and 100. The + default is 5. + :type top: int + """ + + _validation = { + 'search_text': {'required': True}, + 'suggester_name': {'required': True}, + } + + _attribute_map = { + 'filter': {'key': 'filter', 'type': 'str'}, + 'use_fuzzy_matching': {'key': 'fuzzy', 'type': 'bool'}, + 'highlight_post_tag': {'key': 'highlightPostTag', 'type': 'str'}, + 'highlight_pre_tag': {'key': 'highlightPreTag', 'type': 'str'}, + 'minimum_coverage': {'key': 'minimumCoverage', 'type': 'float'}, + 'order_by': {'key': 'orderby', 'type': 'str'}, + 'search_text': {'key': 'search', 'type': 'str'}, + 'search_fields': {'key': 'searchFields', 'type': 'str'}, + 'select': {'key': 'select', 'type': 'str'}, + 'suggester_name': {'key': 'suggesterName', 'type': 'str'}, + 'top': {'key': 'top', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(SuggestRequest, self).__init__(**kwargs) + self.filter = kwargs.get('filter', None) + self.use_fuzzy_matching = kwargs.get('use_fuzzy_matching', None) + self.highlight_post_tag = kwargs.get('highlight_post_tag', None) + self.highlight_pre_tag = kwargs.get('highlight_pre_tag', None) + self.minimum_coverage = kwargs.get('minimum_coverage', None) + self.order_by = kwargs.get('order_by', None) + self.search_text = kwargs.get('search_text', None) + self.search_fields = kwargs.get('search_fields', None) + self.select = kwargs.get('select', None) + self.suggester_name = kwargs.get('suggester_name', None) + self.top = kwargs.get('top', None) + + +class SuggestResult(msrest.serialization.Model): + """A result containing a document found by a suggestion query, plus associated metadata. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :ivar text: Required. The text of the suggestion result. + :vartype text: str + """ + + _validation = { + 'text': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, + 'text': {'key': '@search\\.text', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SuggestResult, self).__init__(**kwargs) + self.additional_properties = kwargs.get('additional_properties', None) + self.text = None diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/models/_models_py3.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/models/_models_py3.py new file mode 100644 index 000000000000..4b8f7bda6f7f --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/models/_models_py3.py @@ -0,0 +1,1085 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Dict, List, Optional, Union + +from azure.core.exceptions import HttpResponseError +import msrest.serialization + + +class AutocompleteItem(msrest.serialization.Model): + """The result of Autocomplete requests. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar text: Required. The completed term. + :vartype text: str + :ivar query_plus_text: Required. The query along with the completed term. + :vartype query_plus_text: str + """ + + _validation = { + 'text': {'required': True, 'readonly': True}, + 'query_plus_text': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'text': {'key': 'text', 'type': 'str'}, + 'query_plus_text': {'key': 'queryPlusText', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AutocompleteItem, self).__init__(**kwargs) + self.text = None + self.query_plus_text = None + + +class AutocompleteOptions(msrest.serialization.Model): + """Parameter group. + + :param autocomplete_mode: Specifies the mode for Autocomplete. The default is 'oneTerm'. Use + 'twoTerms' to get shingles and 'oneTermWithContext' to use the current context while producing + auto-completed terms. Possible values include: 'oneTerm', 'twoTerms', 'oneTermWithContext'. + :type autocomplete_mode: str or ~search_index_client.models.AutocompleteMode + :param filter: An OData expression that filters the documents used to produce completed terms + for the Autocomplete result. + :type filter: str + :param use_fuzzy_matching: A value indicating whether to use fuzzy matching for the + autocomplete query. Default is false. When set to true, the query will find terms even if + there's a substituted or missing character in the search text. While this provides a better + experience in some scenarios, it comes at a performance cost as fuzzy autocomplete queries are + slower and consume more resources. + :type use_fuzzy_matching: bool + :param highlight_post_tag: A string tag that is appended to hit highlights. Must be set with + highlightPreTag. If omitted, hit highlighting is disabled. + :type highlight_post_tag: str + :param highlight_pre_tag: A string tag that is prepended to hit highlights. Must be set with + highlightPostTag. If omitted, hit highlighting is disabled. + :type highlight_pre_tag: str + :param minimum_coverage: A number between 0 and 100 indicating the percentage of the index that + must be covered by an autocomplete query in order for the query to be reported as a success. + This parameter can be useful for ensuring search availability even for services with only one + replica. The default is 80. + :type minimum_coverage: float + :param search_fields: The list of field names to consider when querying for auto-completed + terms. Target fields must be included in the specified suggester. + :type search_fields: list[str] + :param top: The number of auto-completed terms to retrieve. This must be a value between 1 and + 100. The default is 5. + :type top: int + """ + + _attribute_map = { + 'autocomplete_mode': {'key': 'autocompleteMode', 'type': 'str'}, + 'filter': {'key': '$filter', 'type': 'str'}, + 'use_fuzzy_matching': {'key': 'UseFuzzyMatching', 'type': 'bool'}, + 'highlight_post_tag': {'key': 'highlightPostTag', 'type': 'str'}, + 'highlight_pre_tag': {'key': 'highlightPreTag', 'type': 'str'}, + 'minimum_coverage': {'key': 'minimumCoverage', 'type': 'float'}, + 'search_fields': {'key': 'searchFields', 'type': '[str]'}, + 'top': {'key': '$top', 'type': 'int'}, + } + + def __init__( + self, + *, + autocomplete_mode: Optional[Union[str, "AutocompleteMode"]] = None, + filter: Optional[str] = None, + use_fuzzy_matching: Optional[bool] = None, + highlight_post_tag: Optional[str] = None, + highlight_pre_tag: Optional[str] = None, + minimum_coverage: Optional[float] = None, + search_fields: Optional[List[str]] = None, + top: Optional[int] = None, + **kwargs + ): + super(AutocompleteOptions, self).__init__(**kwargs) + self.autocomplete_mode = autocomplete_mode + self.filter = filter + self.use_fuzzy_matching = use_fuzzy_matching + self.highlight_post_tag = highlight_post_tag + self.highlight_pre_tag = highlight_pre_tag + self.minimum_coverage = minimum_coverage + self.search_fields = search_fields + self.top = top + + +class AutocompleteRequest(msrest.serialization.Model): + """Parameters for fuzzy matching, and other autocomplete query behaviors. + + All required parameters must be populated in order to send to Azure. + + :param search_text: Required. The search text on which to base autocomplete results. + :type search_text: str + :param autocomplete_mode: Specifies the mode for Autocomplete. The default is 'oneTerm'. Use + 'twoTerms' to get shingles and 'oneTermWithContext' to use the current context while producing + auto-completed terms. Possible values include: 'oneTerm', 'twoTerms', 'oneTermWithContext'. + :type autocomplete_mode: str or ~search_index_client.models.AutocompleteMode + :param filter: An OData expression that filters the documents used to produce completed terms + for the Autocomplete result. + :type filter: str + :param use_fuzzy_matching: A value indicating whether to use fuzzy matching for the + autocomplete query. Default is false. When set to true, the query will autocomplete terms even + if there's a substituted or missing character in the search text. While this provides a better + experience in some scenarios, it comes at a performance cost as fuzzy autocomplete queries are + slower and consume more resources. + :type use_fuzzy_matching: bool + :param highlight_post_tag: A string tag that is appended to hit highlights. Must be set with + highlightPreTag. If omitted, hit highlighting is disabled. + :type highlight_post_tag: str + :param highlight_pre_tag: A string tag that is prepended to hit highlights. Must be set with + highlightPostTag. If omitted, hit highlighting is disabled. + :type highlight_pre_tag: str + :param minimum_coverage: A number between 0 and 100 indicating the percentage of the index that + must be covered by an autocomplete query in order for the query to be reported as a success. + This parameter can be useful for ensuring search availability even for services with only one + replica. The default is 80. + :type minimum_coverage: float + :param search_fields: The comma-separated list of field names to consider when querying for + auto-completed terms. Target fields must be included in the specified suggester. + :type search_fields: str + :param suggester_name: Required. The name of the suggester as specified in the suggesters + collection that's part of the index definition. + :type suggester_name: str + :param top: The number of auto-completed terms to retrieve. This must be a value between 1 and + 100. The default is 5. + :type top: int + """ + + _validation = { + 'search_text': {'required': True}, + 'suggester_name': {'required': True}, + } + + _attribute_map = { + 'search_text': {'key': 'search', 'type': 'str'}, + 'autocomplete_mode': {'key': 'autocompleteMode', 'type': 'str'}, + 'filter': {'key': 'filter', 'type': 'str'}, + 'use_fuzzy_matching': {'key': 'fuzzy', 'type': 'bool'}, + 'highlight_post_tag': {'key': 'highlightPostTag', 'type': 'str'}, + 'highlight_pre_tag': {'key': 'highlightPreTag', 'type': 'str'}, + 'minimum_coverage': {'key': 'minimumCoverage', 'type': 'float'}, + 'search_fields': {'key': 'searchFields', 'type': 'str'}, + 'suggester_name': {'key': 'suggesterName', 'type': 'str'}, + 'top': {'key': 'top', 'type': 'int'}, + } + + def __init__( + self, + *, + search_text: str, + suggester_name: str, + autocomplete_mode: Optional[Union[str, "AutocompleteMode"]] = None, + filter: Optional[str] = None, + use_fuzzy_matching: Optional[bool] = None, + highlight_post_tag: Optional[str] = None, + highlight_pre_tag: Optional[str] = None, + minimum_coverage: Optional[float] = None, + search_fields: Optional[str] = None, + top: Optional[int] = None, + **kwargs + ): + super(AutocompleteRequest, self).__init__(**kwargs) + self.search_text = search_text + self.autocomplete_mode = autocomplete_mode + self.filter = filter + self.use_fuzzy_matching = use_fuzzy_matching + self.highlight_post_tag = highlight_post_tag + self.highlight_pre_tag = highlight_pre_tag + self.minimum_coverage = minimum_coverage + self.search_fields = search_fields + self.suggester_name = suggester_name + self.top = top + + +class AutocompleteResult(msrest.serialization.Model): + """The result of Autocomplete query. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar coverage: A value indicating the percentage of the index that was considered by the + autocomplete request, or null if minimumCoverage was not specified in the request. + :vartype coverage: float + :ivar results: Required. The list of returned Autocompleted items. + :vartype results: list[~search_index_client.models.AutocompleteItem] + """ + + _validation = { + 'coverage': {'readonly': True}, + 'results': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'coverage': {'key': '@search\\.coverage', 'type': 'float'}, + 'results': {'key': 'value', 'type': '[AutocompleteItem]'}, + } + + def __init__( + self, + **kwargs + ): + super(AutocompleteResult, self).__init__(**kwargs) + self.coverage = None + self.results = None + + +class FacetResult(msrest.serialization.Model): + """A single bucket of a facet query result. Reports the number of documents with a field value falling within a particular range or having a particular value or interval. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :ivar count: The approximate count of documents falling within the bucket described by this + facet. + :vartype count: long + """ + + _validation = { + 'count': {'readonly': True}, + } + + _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, + 'count': {'key': 'count', 'type': 'long'}, + } + + def __init__( + self, + *, + additional_properties: Optional[Dict[str, object]] = None, + **kwargs + ): + super(FacetResult, self).__init__(**kwargs) + self.additional_properties = additional_properties + self.count = None + + +class IndexAction(msrest.serialization.Model): + """Represents an index action that operates on a document. + + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :param action_type: The operation to perform on a document in an indexing batch. Possible + values include: 'upload', 'merge', 'mergeOrUpload', 'delete'. + :type action_type: str or ~search_index_client.models.IndexActionType + """ + + _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, + 'action_type': {'key': '@search\\.action', 'type': 'str'}, + } + + def __init__( + self, + *, + additional_properties: Optional[Dict[str, object]] = None, + action_type: Optional[Union[str, "IndexActionType"]] = None, + **kwargs + ): + super(IndexAction, self).__init__(**kwargs) + self.additional_properties = additional_properties + self.action_type = action_type + + +class IndexBatch(msrest.serialization.Model): + """Contains a batch of document write actions to send to the index. + + All required parameters must be populated in order to send to Azure. + + :param actions: Required. The actions in the batch. + :type actions: list[~search_index_client.models.IndexAction] + """ + + _validation = { + 'actions': {'required': True}, + } + + _attribute_map = { + 'actions': {'key': 'value', 'type': '[IndexAction]'}, + } + + def __init__( + self, + *, + actions: List["IndexAction"], + **kwargs + ): + super(IndexBatch, self).__init__(**kwargs) + self.actions = actions + + +class IndexDocumentsResult(msrest.serialization.Model): + """Response containing the status of operations for all documents in the indexing request. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar results: Required. The list of status information for each document in the indexing + request. + :vartype results: list[~search_index_client.models.IndexingResult] + """ + + _validation = { + 'results': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'results': {'key': 'value', 'type': '[IndexingResult]'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexDocumentsResult, self).__init__(**kwargs) + self.results = None + + +class IndexingResult(msrest.serialization.Model): + """Status of an indexing operation for a single document. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar key: Required. The key of a document that was in the indexing request. + :vartype key: str + :ivar error_message: The error message explaining why the indexing operation failed for the + document identified by the key; null if indexing succeeded. + :vartype error_message: str + :ivar succeeded: Required. A value indicating whether the indexing operation succeeded for the + document identified by the key. + :vartype succeeded: bool + :ivar status_code: Required. The status code of the indexing operation. Possible values + include: 200 for a successful update or delete, 201 for successful document creation, 400 for a + malformed input document, 404 for document not found, 409 for a version conflict, 422 when the + index is temporarily unavailable, or 503 for when the service is too busy. + :vartype status_code: int + """ + + _validation = { + 'key': {'required': True, 'readonly': True}, + 'error_message': {'readonly': True}, + 'succeeded': {'required': True, 'readonly': True}, + 'status_code': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'key': {'key': 'key', 'type': 'str'}, + 'error_message': {'key': 'errorMessage', 'type': 'str'}, + 'succeeded': {'key': 'status', 'type': 'bool'}, + 'status_code': {'key': 'statusCode', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexingResult, self).__init__(**kwargs) + self.key = None + self.error_message = None + self.succeeded = None + self.status_code = None + + +class RequestOptions(msrest.serialization.Model): + """Parameter group. + + :param x_ms_client_request_id: The tracking ID sent with the request to help with debugging. + :type x_ms_client_request_id: str + """ + + _attribute_map = { + 'x_ms_client_request_id': {'key': 'x-ms-client-request-id', 'type': 'str'}, + } + + def __init__( + self, + *, + x_ms_client_request_id: Optional[str] = None, + **kwargs + ): + super(RequestOptions, self).__init__(**kwargs) + self.x_ms_client_request_id = x_ms_client_request_id + + +class SearchDocumentsResult(msrest.serialization.Model): + """Response containing search results from an index. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar count: The total count of results found by the search operation, or null if the count was + not requested. If present, the count may be greater than the number of results in this + response. This can happen if you use the $top or $skip parameters, or if Azure Cognitive Search + can't return all the requested documents in a single Search response. + :vartype count: long + :ivar coverage: A value indicating the percentage of the index that was included in the query, + or null if minimumCoverage was not specified in the request. + :vartype coverage: float + :ivar facets: The facet query results for the search operation, organized as a collection of + buckets for each faceted field; null if the query did not include any facet expressions. + :vartype facets: dict[str, list[~search_index_client.models.FacetResult]] + :ivar next_page_parameters: Continuation JSON payload returned when Azure Cognitive Search + can't return all the requested results in a single Search response. You can use this JSON along + with @odata.nextLink to formulate another POST Search request to get the next part of the + search response. + :vartype next_page_parameters: ~search_index_client.models.SearchRequest + :ivar results: Required. The sequence of results returned by the query. + :vartype results: list[~search_index_client.models.SearchResult] + :ivar next_link: Continuation URL returned when Azure Cognitive Search can't return all the + requested results in a single Search response. You can use this URL to formulate another GET or + POST Search request to get the next part of the search response. Make sure to use the same verb + (GET or POST) as the request that produced this response. + :vartype next_link: str + """ + + _validation = { + 'count': {'readonly': True}, + 'coverage': {'readonly': True}, + 'facets': {'readonly': True}, + 'next_page_parameters': {'readonly': True}, + 'results': {'required': True, 'readonly': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'count': {'key': '@odata\\.count', 'type': 'long'}, + 'coverage': {'key': '@search\\.coverage', 'type': 'float'}, + 'facets': {'key': '@search\\.facets', 'type': '{[FacetResult]}'}, + 'next_page_parameters': {'key': '@search\\.nextPageParameters', 'type': 'SearchRequest'}, + 'results': {'key': 'value', 'type': '[SearchResult]'}, + 'next_link': {'key': '@odata\\.nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SearchDocumentsResult, self).__init__(**kwargs) + self.count = None + self.coverage = None + self.facets = None + self.next_page_parameters = None + self.results = None + self.next_link = None + + +class SearchErrorException(HttpResponseError): + """Server responded with exception of type: 'SearchError'. + + :param response: Server response to be deserialized. + :param error_model: A deserialized model of the response body as model. + """ + + def __init__(self, response, error_model): + self.error = error_model + super(SearchErrorException, self).__init__(response=response, error_model=error_model) + + @classmethod + def from_response(cls, response, deserialize): + """Deserialize this response as this exception, or a subclass of this exception. + + :param response: Server response to be deserialized. + :param deserialize: A deserializer + """ + model_name = 'SearchError' + error = deserialize(model_name, response) + if error is None: + error = deserialize.dependencies[model_name]() + return error._EXCEPTION_TYPE(response, error) + + +class SearchError(msrest.serialization.Model): + """Describes an error condition for the Azure Cognitive Search API. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar code: One of a server-defined set of error codes. + :vartype code: str + :ivar message: Required. A human-readable representation of the error. + :vartype message: str + :ivar details: An array of details about specific errors that led to this reported error. + :vartype details: list[~search_index_client.models.SearchError] + """ + _EXCEPTION_TYPE = SearchErrorException + + _validation = { + 'code': {'readonly': True}, + 'message': {'required': True, 'readonly': True}, + 'details': {'readonly': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[SearchError]'}, + } + + def __init__( + self, + **kwargs + ): + super(SearchError, self).__init__(**kwargs) + self.code = None + self.message = None + self.details = None + + +class SearchOptions(msrest.serialization.Model): + """Parameter group. + + :param include_total_result_count: A value that specifies whether to fetch the total count of + results. Default is false. Setting this value to true may have a performance impact. Note that + the count returned is an approximation. + :type include_total_result_count: bool + :param facets: The list of facet expressions to apply to the search query. Each facet + expression contains a field name, optionally followed by a comma-separated list of name:value + pairs. + :type facets: list[str] + :param filter: The OData $filter expression to apply to the search query. + :type filter: str + :param highlight_fields: The list of field names to use for hit highlights. Only searchable + fields can be used for hit highlighting. + :type highlight_fields: list[str] + :param highlight_post_tag: A string tag that is appended to hit highlights. Must be set with + highlightPreTag. Default is </em>. + :type highlight_post_tag: str + :param highlight_pre_tag: A string tag that is prepended to hit highlights. Must be set with + highlightPostTag. Default is <em>. + :type highlight_pre_tag: str + :param minimum_coverage: A number between 0 and 100 indicating the percentage of the index that + must be covered by a search query in order for the query to be reported as a success. This + parameter can be useful for ensuring search availability even for services with only one + replica. The default is 100. + :type minimum_coverage: float + :param order_by: The list of OData $orderby expressions by which to sort the results. Each + expression can be either a field name or a call to either the geo.distance() or the + search.score() functions. Each expression can be followed by asc to indicate ascending, and + desc to indicate descending. The default is ascending order. Ties will be broken by the match + scores of documents. If no OrderBy is specified, the default sort order is descending by + document match score. There can be at most 32 $orderby clauses. + :type order_by: list[str] + :param query_type: A value that specifies the syntax of the search query. The default is + 'simple'. Use 'full' if your query uses the Lucene query syntax. Possible values include: + 'simple', 'full'. + :type query_type: str or ~search_index_client.models.QueryType + :param scoring_parameters: The list of parameter values to be used in scoring functions (for + example, referencePointParameter) using the format name-values. For example, if the scoring + profile defines a function with a parameter called 'mylocation' the parameter string would be + "mylocation--122.2,44.8" (without the quotes). + :type scoring_parameters: list[str] + :param scoring_profile: The name of a scoring profile to evaluate match scores for matching + documents in order to sort the results. + :type scoring_profile: str + :param search_fields: The list of field names to which to scope the full-text search. When + using fielded search (fieldName:searchExpression) in a full Lucene query, the field names of + each fielded search expression take precedence over any field names listed in this parameter. + :type search_fields: list[str] + :param search_mode: A value that specifies whether any or all of the search terms must be + matched in order to count the document as a match. Possible values include: 'any', 'all'. + :type search_mode: str or ~search_index_client.models.SearchMode + :param select: The list of fields to retrieve. If unspecified, all fields marked as retrievable + in the schema are included. + :type select: list[str] + :param skip: The number of search results to skip. This value cannot be greater than 100,000. + If you need to scan documents in sequence, but cannot use $skip due to this limitation, + consider using $orderby on a totally-ordered key and $filter with a range query instead. + :type skip: int + :param top: The number of search results to retrieve. This can be used in conjunction with + $skip to implement client-side paging of search results. If results are truncated due to + server-side paging, the response will include a continuation token that can be used to issue + another Search request for the next page of results. + :type top: int + """ + + _attribute_map = { + 'include_total_result_count': {'key': 'IncludeTotalResultCount', 'type': 'bool'}, + 'facets': {'key': 'Facets', 'type': '[str]'}, + 'filter': {'key': '$filter', 'type': 'str'}, + 'highlight_fields': {'key': 'HighlightFields', 'type': '[str]'}, + 'highlight_post_tag': {'key': 'highlightPostTag', 'type': 'str'}, + 'highlight_pre_tag': {'key': 'highlightPreTag', 'type': 'str'}, + 'minimum_coverage': {'key': 'minimumCoverage', 'type': 'float'}, + 'order_by': {'key': 'OrderBy', 'type': '[str]'}, + 'query_type': {'key': 'queryType', 'type': 'str'}, + 'scoring_parameters': {'key': 'ScoringParameters', 'type': '[str]'}, + 'scoring_profile': {'key': 'scoringProfile', 'type': 'str'}, + 'search_fields': {'key': 'searchFields', 'type': '[str]'}, + 'search_mode': {'key': 'searchMode', 'type': 'str'}, + 'select': {'key': '$select', 'type': '[str]'}, + 'skip': {'key': '$skip', 'type': 'int'}, + 'top': {'key': '$top', 'type': 'int'}, + } + + def __init__( + self, + *, + include_total_result_count: Optional[bool] = None, + facets: Optional[List[str]] = None, + filter: Optional[str] = None, + highlight_fields: Optional[List[str]] = None, + highlight_post_tag: Optional[str] = None, + highlight_pre_tag: Optional[str] = None, + minimum_coverage: Optional[float] = None, + order_by: Optional[List[str]] = None, + query_type: Optional[Union[str, "QueryType"]] = None, + scoring_parameters: Optional[List[str]] = None, + scoring_profile: Optional[str] = None, + search_fields: Optional[List[str]] = None, + search_mode: Optional[Union[str, "SearchMode"]] = None, + select: Optional[List[str]] = None, + skip: Optional[int] = None, + top: Optional[int] = None, + **kwargs + ): + super(SearchOptions, self).__init__(**kwargs) + self.include_total_result_count = include_total_result_count + self.facets = facets + self.filter = filter + self.highlight_fields = highlight_fields + self.highlight_post_tag = highlight_post_tag + self.highlight_pre_tag = highlight_pre_tag + self.minimum_coverage = minimum_coverage + self.order_by = order_by + self.query_type = query_type + self.scoring_parameters = scoring_parameters + self.scoring_profile = scoring_profile + self.search_fields = search_fields + self.search_mode = search_mode + self.select = select + self.skip = skip + self.top = top + + +class SearchRequest(msrest.serialization.Model): + """Parameters for filtering, sorting, faceting, paging, and other search query behaviors. + + :param include_total_result_count: A value that specifies whether to fetch the total count of + results. Default is false. Setting this value to true may have a performance impact. Note that + the count returned is an approximation. + :type include_total_result_count: bool + :param facets: The list of facet expressions to apply to the search query. Each facet + expression contains a field name, optionally followed by a comma-separated list of name:value + pairs. + :type facets: list[str] + :param filter: The OData $filter expression to apply to the search query. + :type filter: str + :param highlight_fields: The comma-separated list of field names to use for hit highlights. + Only searchable fields can be used for hit highlighting. + :type highlight_fields: str + :param highlight_post_tag: A string tag that is appended to hit highlights. Must be set with + highlightPreTag. Default is </em>. + :type highlight_post_tag: str + :param highlight_pre_tag: A string tag that is prepended to hit highlights. Must be set with + highlightPostTag. Default is <em>. + :type highlight_pre_tag: str + :param minimum_coverage: A number between 0 and 100 indicating the percentage of the index that + must be covered by a search query in order for the query to be reported as a success. This + parameter can be useful for ensuring search availability even for services with only one + replica. The default is 100. + :type minimum_coverage: float + :param order_by: The comma-separated list of OData $orderby expressions by which to sort the + results. Each expression can be either a field name or a call to either the geo.distance() or + the search.score() functions. Each expression can be followed by asc to indicate ascending, or + desc to indicate descending. The default is ascending order. Ties will be broken by the match + scores of documents. If no $orderby is specified, the default sort order is descending by + document match score. There can be at most 32 $orderby clauses. + :type order_by: str + :param query_type: A value that specifies the syntax of the search query. The default is + 'simple'. Use 'full' if your query uses the Lucene query syntax. Possible values include: + 'simple', 'full'. + :type query_type: str or ~search_index_client.models.QueryType + :param scoring_parameters: The list of parameter values to be used in scoring functions (for + example, referencePointParameter) using the format name-values. For example, if the scoring + profile defines a function with a parameter called 'mylocation' the parameter string would be + "mylocation--122.2,44.8" (without the quotes). + :type scoring_parameters: list[str] + :param scoring_profile: The name of a scoring profile to evaluate match scores for matching + documents in order to sort the results. + :type scoring_profile: str + :param search_text: A full-text search query expression; Use "*" or omit this parameter to + match all documents. + :type search_text: str + :param search_fields: The comma-separated list of field names to which to scope the full-text + search. When using fielded search (fieldName:searchExpression) in a full Lucene query, the + field names of each fielded search expression take precedence over any field names listed in + this parameter. + :type search_fields: str + :param search_mode: A value that specifies whether any or all of the search terms must be + matched in order to count the document as a match. Possible values include: 'any', 'all'. + :type search_mode: str or ~search_index_client.models.SearchMode + :param select: The comma-separated list of fields to retrieve. If unspecified, all fields + marked as retrievable in the schema are included. + :type select: str + :param skip: The number of search results to skip. This value cannot be greater than 100,000. + If you need to scan documents in sequence, but cannot use skip due to this limitation, consider + using orderby on a totally-ordered key and filter with a range query instead. + :type skip: int + :param top: The number of search results to retrieve. This can be used in conjunction with + $skip to implement client-side paging of search results. If results are truncated due to + server-side paging, the response will include a continuation token that can be used to issue + another Search request for the next page of results. + :type top: int + """ + + _attribute_map = { + 'include_total_result_count': {'key': 'count', 'type': 'bool'}, + 'facets': {'key': 'facets', 'type': '[str]'}, + 'filter': {'key': 'filter', 'type': 'str'}, + 'highlight_fields': {'key': 'highlight', 'type': 'str'}, + 'highlight_post_tag': {'key': 'highlightPostTag', 'type': 'str'}, + 'highlight_pre_tag': {'key': 'highlightPreTag', 'type': 'str'}, + 'minimum_coverage': {'key': 'minimumCoverage', 'type': 'float'}, + 'order_by': {'key': 'orderby', 'type': 'str'}, + 'query_type': {'key': 'queryType', 'type': 'str'}, + 'scoring_parameters': {'key': 'scoringParameters', 'type': '[str]'}, + 'scoring_profile': {'key': 'scoringProfile', 'type': 'str'}, + 'search_text': {'key': 'search', 'type': 'str'}, + 'search_fields': {'key': 'searchFields', 'type': 'str'}, + 'search_mode': {'key': 'searchMode', 'type': 'str'}, + 'select': {'key': 'select', 'type': 'str'}, + 'skip': {'key': 'skip', 'type': 'int'}, + 'top': {'key': 'top', 'type': 'int'}, + } + + def __init__( + self, + *, + include_total_result_count: Optional[bool] = None, + facets: Optional[List[str]] = None, + filter: Optional[str] = None, + highlight_fields: Optional[str] = None, + highlight_post_tag: Optional[str] = None, + highlight_pre_tag: Optional[str] = None, + minimum_coverage: Optional[float] = None, + order_by: Optional[str] = None, + query_type: Optional[Union[str, "QueryType"]] = None, + scoring_parameters: Optional[List[str]] = None, + scoring_profile: Optional[str] = None, + search_text: Optional[str] = None, + search_fields: Optional[str] = None, + search_mode: Optional[Union[str, "SearchMode"]] = None, + select: Optional[str] = None, + skip: Optional[int] = None, + top: Optional[int] = None, + **kwargs + ): + super(SearchRequest, self).__init__(**kwargs) + self.include_total_result_count = include_total_result_count + self.facets = facets + self.filter = filter + self.highlight_fields = highlight_fields + self.highlight_post_tag = highlight_post_tag + self.highlight_pre_tag = highlight_pre_tag + self.minimum_coverage = minimum_coverage + self.order_by = order_by + self.query_type = query_type + self.scoring_parameters = scoring_parameters + self.scoring_profile = scoring_profile + self.search_text = search_text + self.search_fields = search_fields + self.search_mode = search_mode + self.select = select + self.skip = skip + self.top = top + + +class SearchResult(msrest.serialization.Model): + """Contains a document found by a search query, plus associated metadata. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :ivar score: Required. The relevance score of the document compared to other documents returned + by the query. + :vartype score: float + :ivar highlights: Text fragments from the document that indicate the matching search terms, + organized by each applicable field; null if hit highlighting was not enabled for the query. + :vartype highlights: dict[str, list[str]] + """ + + _validation = { + 'score': {'required': True, 'readonly': True}, + 'highlights': {'readonly': True}, + } + + _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, + 'score': {'key': '@search\\.score', 'type': 'float'}, + 'highlights': {'key': '@search\\.highlights', 'type': '{[str]}'}, + } + + def __init__( + self, + *, + additional_properties: Optional[Dict[str, object]] = None, + **kwargs + ): + super(SearchResult, self).__init__(**kwargs) + self.additional_properties = additional_properties + self.score = None + self.highlights = None + + +class SuggestDocumentsResult(msrest.serialization.Model): + """Response containing suggestion query results from an index. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar results: Required. The sequence of results returned by the query. + :vartype results: list[~search_index_client.models.SuggestResult] + :ivar coverage: A value indicating the percentage of the index that was included in the query, + or null if minimumCoverage was not set in the request. + :vartype coverage: float + """ + + _validation = { + 'results': {'required': True, 'readonly': True}, + 'coverage': {'readonly': True}, + } + + _attribute_map = { + 'results': {'key': 'value', 'type': '[SuggestResult]'}, + 'coverage': {'key': '@search\\.coverage', 'type': 'float'}, + } + + def __init__( + self, + **kwargs + ): + super(SuggestDocumentsResult, self).__init__(**kwargs) + self.results = None + self.coverage = None + + +class SuggestOptions(msrest.serialization.Model): + """Parameter group. + + :param filter: An OData expression that filters the documents considered for suggestions. + :type filter: str + :param use_fuzzy_matching: A value indicating whether to use fuzzy matching for the suggestions + query. Default is false. When set to true, the query will find terms even if there's a + substituted or missing character in the search text. While this provides a better experience in + some scenarios, it comes at a performance cost as fuzzy suggestions queries are slower and + consume more resources. + :type use_fuzzy_matching: bool + :param highlight_post_tag: A string tag that is appended to hit highlights. Must be set with + highlightPreTag. If omitted, hit highlighting of suggestions is disabled. + :type highlight_post_tag: str + :param highlight_pre_tag: A string tag that is prepended to hit highlights. Must be set with + highlightPostTag. If omitted, hit highlighting of suggestions is disabled. + :type highlight_pre_tag: str + :param minimum_coverage: A number between 0 and 100 indicating the percentage of the index that + must be covered by a suggestions query in order for the query to be reported as a success. This + parameter can be useful for ensuring search availability even for services with only one + replica. The default is 80. + :type minimum_coverage: float + :param order_by: The list of OData $orderby expressions by which to sort the results. Each + expression can be either a field name or a call to either the geo.distance() or the + search.score() functions. Each expression can be followed by asc to indicate ascending, or desc + to indicate descending. The default is ascending order. Ties will be broken by the match scores + of documents. If no $orderby is specified, the default sort order is descending by document + match score. There can be at most 32 $orderby clauses. + :type order_by: list[str] + :param search_fields: The list of field names to search for the specified search text. Target + fields must be included in the specified suggester. + :type search_fields: list[str] + :param select: The list of fields to retrieve. If unspecified, only the key field will be + included in the results. + :type select: list[str] + :param top: The number of suggestions to retrieve. The value must be a number between 1 and + 100. The default is 5. + :type top: int + """ + + _attribute_map = { + 'filter': {'key': '$filter', 'type': 'str'}, + 'use_fuzzy_matching': {'key': 'UseFuzzyMatching', 'type': 'bool'}, + 'highlight_post_tag': {'key': 'highlightPostTag', 'type': 'str'}, + 'highlight_pre_tag': {'key': 'highlightPreTag', 'type': 'str'}, + 'minimum_coverage': {'key': 'minimumCoverage', 'type': 'float'}, + 'order_by': {'key': 'OrderBy', 'type': '[str]'}, + 'search_fields': {'key': 'searchFields', 'type': '[str]'}, + 'select': {'key': '$select', 'type': '[str]'}, + 'top': {'key': '$top', 'type': 'int'}, + } + + def __init__( + self, + *, + filter: Optional[str] = None, + use_fuzzy_matching: Optional[bool] = None, + highlight_post_tag: Optional[str] = None, + highlight_pre_tag: Optional[str] = None, + minimum_coverage: Optional[float] = None, + order_by: Optional[List[str]] = None, + search_fields: Optional[List[str]] = None, + select: Optional[List[str]] = None, + top: Optional[int] = None, + **kwargs + ): + super(SuggestOptions, self).__init__(**kwargs) + self.filter = filter + self.use_fuzzy_matching = use_fuzzy_matching + self.highlight_post_tag = highlight_post_tag + self.highlight_pre_tag = highlight_pre_tag + self.minimum_coverage = minimum_coverage + self.order_by = order_by + self.search_fields = search_fields + self.select = select + self.top = top + + +class SuggestRequest(msrest.serialization.Model): + """Parameters for filtering, sorting, fuzzy matching, and other suggestions query behaviors. + + All required parameters must be populated in order to send to Azure. + + :param filter: An OData expression that filters the documents considered for suggestions. + :type filter: str + :param use_fuzzy_matching: A value indicating whether to use fuzzy matching for the suggestion + query. Default is false. When set to true, the query will find suggestions even if there's a + substituted or missing character in the search text. While this provides a better experience in + some scenarios, it comes at a performance cost as fuzzy suggestion searches are slower and + consume more resources. + :type use_fuzzy_matching: bool + :param highlight_post_tag: A string tag that is appended to hit highlights. Must be set with + highlightPreTag. If omitted, hit highlighting of suggestions is disabled. + :type highlight_post_tag: str + :param highlight_pre_tag: A string tag that is prepended to hit highlights. Must be set with + highlightPostTag. If omitted, hit highlighting of suggestions is disabled. + :type highlight_pre_tag: str + :param minimum_coverage: A number between 0 and 100 indicating the percentage of the index that + must be covered by a suggestion query in order for the query to be reported as a success. This + parameter can be useful for ensuring search availability even for services with only one + replica. The default is 80. + :type minimum_coverage: float + :param order_by: The comma-separated list of OData $orderby expressions by which to sort the + results. Each expression can be either a field name or a call to either the geo.distance() or + the search.score() functions. Each expression can be followed by asc to indicate ascending, or + desc to indicate descending. The default is ascending order. Ties will be broken by the match + scores of documents. If no $orderby is specified, the default sort order is descending by + document match score. There can be at most 32 $orderby clauses. + :type order_by: str + :param search_text: Required. The search text to use to suggest documents. Must be at least 1 + character, and no more than 100 characters. + :type search_text: str + :param search_fields: The comma-separated list of field names to search for the specified + search text. Target fields must be included in the specified suggester. + :type search_fields: str + :param select: The comma-separated list of fields to retrieve. If unspecified, only the key + field will be included in the results. + :type select: str + :param suggester_name: Required. The name of the suggester as specified in the suggesters + collection that's part of the index definition. + :type suggester_name: str + :param top: The number of suggestions to retrieve. This must be a value between 1 and 100. The + default is 5. + :type top: int + """ + + _validation = { + 'search_text': {'required': True}, + 'suggester_name': {'required': True}, + } + + _attribute_map = { + 'filter': {'key': 'filter', 'type': 'str'}, + 'use_fuzzy_matching': {'key': 'fuzzy', 'type': 'bool'}, + 'highlight_post_tag': {'key': 'highlightPostTag', 'type': 'str'}, + 'highlight_pre_tag': {'key': 'highlightPreTag', 'type': 'str'}, + 'minimum_coverage': {'key': 'minimumCoverage', 'type': 'float'}, + 'order_by': {'key': 'orderby', 'type': 'str'}, + 'search_text': {'key': 'search', 'type': 'str'}, + 'search_fields': {'key': 'searchFields', 'type': 'str'}, + 'select': {'key': 'select', 'type': 'str'}, + 'suggester_name': {'key': 'suggesterName', 'type': 'str'}, + 'top': {'key': 'top', 'type': 'int'}, + } + + def __init__( + self, + *, + search_text: str, + suggester_name: str, + filter: Optional[str] = None, + use_fuzzy_matching: Optional[bool] = None, + highlight_post_tag: Optional[str] = None, + highlight_pre_tag: Optional[str] = None, + minimum_coverage: Optional[float] = None, + order_by: Optional[str] = None, + search_fields: Optional[str] = None, + select: Optional[str] = None, + top: Optional[int] = None, + **kwargs + ): + super(SuggestRequest, self).__init__(**kwargs) + self.filter = filter + self.use_fuzzy_matching = use_fuzzy_matching + self.highlight_post_tag = highlight_post_tag + self.highlight_pre_tag = highlight_pre_tag + self.minimum_coverage = minimum_coverage + self.order_by = order_by + self.search_text = search_text + self.search_fields = search_fields + self.select = select + self.suggester_name = suggester_name + self.top = top + + +class SuggestResult(msrest.serialization.Model): + """A result containing a document found by a suggestion query, plus associated metadata. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :ivar text: Required. The text of the suggestion result. + :vartype text: str + """ + + _validation = { + 'text': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, + 'text': {'key': '@search\\.text', 'type': 'str'}, + } + + def __init__( + self, + *, + additional_properties: Optional[Dict[str, object]] = None, + **kwargs + ): + super(SuggestResult, self).__init__(**kwargs) + self.additional_properties = additional_properties + self.text = None diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/models/_search_index_client_enums.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/models/_search_index_client_enums.py new file mode 100644 index 000000000000..ec3e46a89f5a --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/models/_search_index_client_enums.py @@ -0,0 +1,32 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from enum import Enum + +class IndexActionType(str, Enum): + """The operation to perform on a document in an indexing batch. + """ + + upload = "upload" + merge = "merge" + merge_or_upload = "mergeOrUpload" + delete = "delete" + +class QueryType(str, Enum): + + simple = "simple" + full = "full" + +class SearchMode(str, Enum): + + any = "any" + all = "all" + +class AutocompleteMode(str, Enum): + + one_term = "oneTerm" + two_terms = "twoTerms" + one_term_with_context = "oneTermWithContext" diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/operations/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/operations/__init__.py new file mode 100644 index 000000000000..1de4dc8bc765 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/operations/__init__.py @@ -0,0 +1,11 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._documents_operations import DocumentsOperations + +__all__ = [ + 'DocumentsOperations', +] diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/operations/_documents_operations.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/operations/_documents_operations.py new file mode 100644 index 000000000000..718835b3c195 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/operations/_documents_operations.py @@ -0,0 +1,776 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6246, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, List, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse + +from .. import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class DocumentsOperations(object): + """DocumentsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~search_index_client.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def count( + self, + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> int + """Queries the number of documents in the index. + + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: long or the result of cls(response) + :rtype: long + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[int] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.count.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('long', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + count.metadata = {'url': '/docs/$count'} + + def search_get( + self, + search_text=None, # type: Optional[str] + search_options=None, # type: Optional["models.SearchOptions"] + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.SearchDocumentsResult" + """Searches for documents in the index. + + :param search_text: A full-text search query expression; Use "*" or omit this parameter to + match all documents. + :type search_text: str + :param search_options: Parameter group. + :type search_options: ~search_index_client.models.SearchOptions + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SearchDocumentsResult or the result of cls(response) + :rtype: ~search_index_client.models.SearchDocumentsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SearchDocumentsResult"] + error_map = kwargs.pop('error_map', {}) + + _include_total_result_count = None + _facets = None + _filter = None + _highlight_fields = None + _highlight_post_tag = None + _highlight_pre_tag = None + _minimum_coverage = None + _order_by = None + _query_type = None + _scoring_parameters = None + _scoring_profile = None + _search_fields = None + _search_mode = None + _select = None + _skip = None + _top = None + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + if search_options is not None: + _include_total_result_count = search_options.include_total_result_count + _facets = search_options.facets + _filter = search_options.filter + _highlight_fields = search_options.highlight_fields + _highlight_post_tag = search_options.highlight_post_tag + _highlight_pre_tag = search_options.highlight_pre_tag + _minimum_coverage = search_options.minimum_coverage + _order_by = search_options.order_by + _query_type = search_options.query_type + _scoring_parameters = search_options.scoring_parameters + _scoring_profile = search_options.scoring_profile + _search_fields = search_options.search_fields + _search_mode = search_options.search_mode + _select = search_options.select + _skip = search_options.skip + _top = search_options.top + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.search_get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if search_text is not None: + query_parameters['search'] = self._serialize.query("search_text", search_text, 'str') + if _include_total_result_count is not None: + query_parameters['$count'] = self._serialize.query("include_total_result_count", _include_total_result_count, 'bool') + if _facets is not None: + query_parameters['facet'] = self._serialize.query("facets", _facets, '[str]', div=',') + if _filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", _filter, 'str') + if _highlight_fields is not None: + query_parameters['highlight'] = self._serialize.query("highlight_fields", _highlight_fields, '[str]') + if _highlight_post_tag is not None: + query_parameters['highlightPostTag'] = self._serialize.query("highlight_post_tag", _highlight_post_tag, 'str') + if _highlight_pre_tag is not None: + query_parameters['highlightPreTag'] = self._serialize.query("highlight_pre_tag", _highlight_pre_tag, 'str') + if _minimum_coverage is not None: + query_parameters['minimumCoverage'] = self._serialize.query("minimum_coverage", _minimum_coverage, 'float') + if _order_by is not None: + query_parameters['$orderby'] = self._serialize.query("order_by", _order_by, '[str]') + if _query_type is not None: + query_parameters['queryType'] = self._serialize.query("query_type", _query_type, 'str') + if _scoring_parameters is not None: + query_parameters['scoringParameter'] = self._serialize.query("scoring_parameters", _scoring_parameters, '[str]', div=',') + if _scoring_profile is not None: + query_parameters['scoringProfile'] = self._serialize.query("scoring_profile", _scoring_profile, 'str') + if _search_fields is not None: + query_parameters['searchFields'] = self._serialize.query("search_fields", _search_fields, '[str]') + if _search_mode is not None: + query_parameters['searchMode'] = self._serialize.query("search_mode", _search_mode, 'str') + if _select is not None: + query_parameters['$select'] = self._serialize.query("select", _select, '[str]') + if _skip is not None: + query_parameters['$skip'] = self._serialize.query("skip", _skip, 'int') + if _top is not None: + query_parameters['$top'] = self._serialize.query("top", _top, 'int') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('SearchDocumentsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + search_get.metadata = {'url': '/docs'} + + def search_post( + self, + search_request, # type: "models.SearchRequest" + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.SearchDocumentsResult" + """Searches for documents in the index. + + :param search_request: The definition of the Search request. + :type search_request: ~search_index_client.models.SearchRequest + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SearchDocumentsResult or the result of cls(response) + :rtype: ~search_index_client.models.SearchDocumentsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SearchDocumentsResult"] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.search_post.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(search_request, 'SearchRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('SearchDocumentsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + search_post.metadata = {'url': '/docs/search.post.search'} + + def get( + self, + key, # type: str + selected_fields=None, # type: Optional[List[str]] + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> object + """Retrieves a document from the index. + + :param key: The key of the document to retrieve. + :type key: str + :param selected_fields: List of field names to retrieve for the document; Any field not + retrieved will be missing from the returned document. + :type selected_fields: list[str] + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: object or the result of cls(response) + :rtype: object + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[object] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + 'key': self._serialize.url("key", key, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if selected_fields is not None: + query_parameters['$select'] = self._serialize.query("selected_fields", selected_fields, '[str]') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('object', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/docs(\'{key}\')'} + + def suggest_get( + self, + search_text, # type: str + suggester_name, # type: str + suggest_options=None, # type: Optional["models.SuggestOptions"] + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.SuggestDocumentsResult" + """Suggests documents in the index that match the given partial query text. + + :param search_text: The search text to use to suggest documents. Must be at least 1 character, + and no more than 100 characters. + :type search_text: str + :param suggester_name: The name of the suggester as specified in the suggesters collection + that's part of the index definition. + :type suggester_name: str + :param suggest_options: Parameter group. + :type suggest_options: ~search_index_client.models.SuggestOptions + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SuggestDocumentsResult or the result of cls(response) + :rtype: ~search_index_client.models.SuggestDocumentsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SuggestDocumentsResult"] + error_map = kwargs.pop('error_map', {}) + + _filter = None + _use_fuzzy_matching = None + _highlight_post_tag = None + _highlight_pre_tag = None + _minimum_coverage = None + _order_by = None + _search_fields = None + _select = None + _top = None + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + if suggest_options is not None: + _filter = suggest_options.filter + _use_fuzzy_matching = suggest_options.use_fuzzy_matching + _highlight_post_tag = suggest_options.highlight_post_tag + _highlight_pre_tag = suggest_options.highlight_pre_tag + _minimum_coverage = suggest_options.minimum_coverage + _order_by = suggest_options.order_by + _search_fields = suggest_options.search_fields + _select = suggest_options.select + _top = suggest_options.top + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.suggest_get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['search'] = self._serialize.query("search_text", search_text, 'str') + query_parameters['suggesterName'] = self._serialize.query("suggester_name", suggester_name, 'str') + if _filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", _filter, 'str') + if _use_fuzzy_matching is not None: + query_parameters['fuzzy'] = self._serialize.query("use_fuzzy_matching", _use_fuzzy_matching, 'bool') + if _highlight_post_tag is not None: + query_parameters['highlightPostTag'] = self._serialize.query("highlight_post_tag", _highlight_post_tag, 'str') + if _highlight_pre_tag is not None: + query_parameters['highlightPreTag'] = self._serialize.query("highlight_pre_tag", _highlight_pre_tag, 'str') + if _minimum_coverage is not None: + query_parameters['minimumCoverage'] = self._serialize.query("minimum_coverage", _minimum_coverage, 'float') + if _order_by is not None: + query_parameters['$orderby'] = self._serialize.query("order_by", _order_by, '[str]') + if _search_fields is not None: + query_parameters['searchFields'] = self._serialize.query("search_fields", _search_fields, '[str]') + if _select is not None: + query_parameters['$select'] = self._serialize.query("select", _select, '[str]') + if _top is not None: + query_parameters['$top'] = self._serialize.query("top", _top, 'int') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('SuggestDocumentsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + suggest_get.metadata = {'url': '/docs/search.suggest'} + + def suggest_post( + self, + suggest_request, # type: "models.SuggestRequest" + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.SuggestDocumentsResult" + """Suggests documents in the index that match the given partial query text. + + :param suggest_request: The Suggest request. + :type suggest_request: ~search_index_client.models.SuggestRequest + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SuggestDocumentsResult or the result of cls(response) + :rtype: ~search_index_client.models.SuggestDocumentsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SuggestDocumentsResult"] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.suggest_post.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(suggest_request, 'SuggestRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('SuggestDocumentsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + suggest_post.metadata = {'url': '/docs/search.post.suggest'} + + def index( + self, + batch, # type: "models.IndexBatch" + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.IndexDocumentsResult" + """Sends a batch of document write actions to the index. + + :param batch: The batch of index actions. + :type batch: ~search_index_client.models.IndexBatch + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IndexDocumentsResult or the result of cls(response) + :rtype: ~search_index_client.models.IndexDocumentsResult or ~search_index_client.models.IndexDocumentsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IndexDocumentsResult"] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.index.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(batch, 'IndexBatch') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 207]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('IndexDocumentsResult', pipeline_response) + + if response.status_code == 207: + deserialized = self._deserialize('IndexDocumentsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + index.metadata = {'url': '/docs/search.index'} + + def autocomplete_get( + self, + search_text, # type: str + suggester_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + autocomplete_options=None, # type: Optional["models.AutocompleteOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.AutocompleteResult" + """Autocompletes incomplete query terms based on input text and matching terms in the index. + + :param search_text: The incomplete term which should be auto-completed. + :type search_text: str + :param suggester_name: The name of the suggester as specified in the suggesters collection + that's part of the index definition. + :type suggester_name: str + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :param autocomplete_options: Parameter group. + :type autocomplete_options: ~search_index_client.models.AutocompleteOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AutocompleteResult or the result of cls(response) + :rtype: ~search_index_client.models.AutocompleteResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutocompleteResult"] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + _autocomplete_mode = None + _filter = None + _use_fuzzy_matching = None + _highlight_post_tag = None + _highlight_pre_tag = None + _minimum_coverage = None + _search_fields = None + _top = None + if autocomplete_options is not None: + _autocomplete_mode = autocomplete_options.autocomplete_mode + _filter = autocomplete_options.filter + _use_fuzzy_matching = autocomplete_options.use_fuzzy_matching + _highlight_post_tag = autocomplete_options.highlight_post_tag + _highlight_pre_tag = autocomplete_options.highlight_pre_tag + _minimum_coverage = autocomplete_options.minimum_coverage + _search_fields = autocomplete_options.search_fields + _top = autocomplete_options.top + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.autocomplete_get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + query_parameters['search'] = self._serialize.query("search_text", search_text, 'str') + query_parameters['suggesterName'] = self._serialize.query("suggester_name", suggester_name, 'str') + if _autocomplete_mode is not None: + query_parameters['autocompleteMode'] = self._serialize.query("autocomplete_mode", _autocomplete_mode, 'str') + if _filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", _filter, 'str') + if _use_fuzzy_matching is not None: + query_parameters['fuzzy'] = self._serialize.query("use_fuzzy_matching", _use_fuzzy_matching, 'bool') + if _highlight_post_tag is not None: + query_parameters['highlightPostTag'] = self._serialize.query("highlight_post_tag", _highlight_post_tag, 'str') + if _highlight_pre_tag is not None: + query_parameters['highlightPreTag'] = self._serialize.query("highlight_pre_tag", _highlight_pre_tag, 'str') + if _minimum_coverage is not None: + query_parameters['minimumCoverage'] = self._serialize.query("minimum_coverage", _minimum_coverage, 'float') + if _search_fields is not None: + query_parameters['searchFields'] = self._serialize.query("search_fields", _search_fields, '[str]') + if _top is not None: + query_parameters['$top'] = self._serialize.query("top", _top, 'int') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('AutocompleteResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + autocomplete_get.metadata = {'url': '/docs/search.autocomplete'} + + def autocomplete_post( + self, + autocomplete_request, # type: "models.AutocompleteRequest" + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.AutocompleteResult" + """Autocompletes incomplete query terms based on input text and matching terms in the index. + + :param autocomplete_request: The definition of the Autocomplete request. + :type autocomplete_request: ~search_index_client.models.AutocompleteRequest + :param request_options: Parameter group. + :type request_options: ~search_index_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AutocompleteResult or the result of cls(response) + :rtype: ~search_index_client.models.AutocompleteResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutocompleteResult"] + error_map = kwargs.pop('error_map', {}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.autocomplete_post.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("self._config.index_name", self._config.index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(autocomplete_request, 'AutocompleteRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise models.SearchErrorException.from_response(response, self._deserialize) + + deserialized = self._deserialize('AutocompleteResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + autocomplete_post.metadata = {'url': '/docs/search.post.autocomplete'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/py.typed b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/py.typed new file mode 100644 index 000000000000..e5aff4f83af8 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_generated/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561. \ No newline at end of file diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_index_documents_batch.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_index_documents_batch.py new file mode 100644 index 000000000000..fd02a58e4b28 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_index_documents_batch.py @@ -0,0 +1,119 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING + +from ._generated.models import IndexAction + +if TYPE_CHECKING: + # pylint:disable=unused-import + from typing import List + + +def flatten_args(args): + # type (Union[List[dict], List[List[dict]]]) -> List[dict] + if len(args) == 1 and isinstance(args[0], (list, tuple)): + return args[0] + return args + + +class IndexDocumentsBatch(object): + """Represent a batch of upate operations for documents in an Azure + Search index. + + Index operations are performed in the order in which they are added + to the batch. + + """ + + def __init__(self): + # type: () -> None + self._actions = [] # type: List[IndexAction] + + def __repr__(self): + # type: () -> str + return "".format(len(self.actions))[:1024] + + def add_upload_documents(self, *documents): + # type (Union[List[dict], List[List[dict]]]) -> None + """Add documents to upload to the Azure search index. + + An upload action is similar to an "upsert" where the document will be + inserted if it is new and updated/replaced if it exists. All fields are + replaced in the update case. + + :param documents: Documents to upload to an Azure search index. May be + a single list of documents, or documents as individual parameters. + :type documents: dict or list[dict] + """ + self._extend_batch(flatten_args(documents), "upload") + + def add_delete_documents(self, *documents): + # type (Union[List[dict], List[List[dict]]]) -> None + """Add documents to delete to the Azure search index. + + Delete removes the specified document from the index. Any field you + specify in a delete operation, other than the key field, will be + ignored. If you want to remove an individual field from a document, use + `merge_documents` instead and set the field explicitly to None. + + Delete operations are idempotent. That is, even if a document key does + not exist in the index, attempting a delete operation with that key will + result in a 200 status code. + + :param documents: Documents to delete from an Azure search index. May be + a single list of documents, or documents as individual parameters. + :type documents: dict or list[dict] + """ + self._extend_batch(flatten_args(documents), "delete") + + def add_merge_documents(self, *documents): + # type (Union[List[dict], List[List[dict]]]) -> None + """Add documents to merge in to existing documets in the Azure search + index. + + Merge updates an existing document with the specified fields. If the + document doesn't exist, the merge will fail. Any field you specify in a + merge will replace the existing field in the document. This also applies + to collections of primitive and complex types. + + :param documents: Documents to merge into an Azure search index. May be + a single list of documents, or documents as individual parameters. + :type documents: dict or list[dict] + """ + self._extend_batch(flatten_args(documents), "merge") + + def add_merge_or_upload_documents(self, *documents): + # type (Union[List[dict], List[List[dict]]]) -> None + """Add documents to merge in to existing documets in the Azure search + index, or upload if they do not yet exist. + + This action behaves like *merge* if a document with the given key + already exists in the index. If the document does not exist, it behaves + like *upload* with a new document. + + :param documents: Documents to merge or uplaod into an Azure search + index. May be a single list of documents, or documents as individual + parameters. + :type documents: dict or list[dict] + """ + self._extend_batch(flatten_args(documents), "mergeOrUpload") + + @property + def actions(self): + # type: () -> List[IndexAction] + """The list of currently configured index actions. + + :rtype: List[IndexAction] + """ + return list(self._actions) + + def _extend_batch(self, documents, action_type): + # type: (List[dict], str) -> None + new_actions = [ + IndexAction(additional_properties=document, action_type=action_type) + for document in documents + ] + self._actions.extend(new_actions) diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_paging.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_paging.py new file mode 100644 index 000000000000..35cdf08d48c6 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_paging.py @@ -0,0 +1,139 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING + +import base64 +import itertools +import json + +from azure.core.paging import ItemPaged, PageIterator, ReturnType +from ._generated.models import SearchRequest + +if TYPE_CHECKING: + # pylint:disable=unused-import,ungrouped-imports + from typing import Any, Union + + +def convert_search_result(result): + ret = result.additional_properties + ret["@search.score"] = result.score + ret["@search.highlights"] = result.highlights + return ret + + +def pack_continuation_token(response): + if response.next_page_parameters is not None: + return base64.b64encode( + json.dumps( + [response.next_link, response.next_page_parameters.serialize()] + ).encode("utf-8") + ) + return None + + +def unpack_continuation_token(token): + next_link, next_page_parameters = json.loads(base64.b64decode(token)) + next_page_request = SearchRequest.deserialize(next_page_parameters) + return next_link, next_page_request + + +class SearchItemPaged(ItemPaged[ReturnType]): + def __init__(self, *args, **kwargs): + super(SearchItemPaged, self).__init__(*args, **kwargs) + self._first_page_iterator_instance = None + + def __next__(self): + # type: () -> ReturnType + if self._page_iterator is None: + first_iterator = self._first_iterator_instance() + self._page_iterator = itertools.chain.from_iterable(first_iterator) + return next(self._page_iterator) + + def _first_iterator_instance(self): + if self._first_page_iterator_instance is None: + self._first_page_iterator_instance = self.by_page() + return self._first_page_iterator_instance + + def get_facets(self): + # type: () -> Union[dict, None] + """Return any facet results if faceting was requested. + + """ + return self._first_iterator_instance().get_facets() + + def get_coverage(self): + # type: () -> float + """Return the covereage percentage, if `minimum_coverage` was + specificied for the query. + + """ + return self._first_iterator_instance().get_coverage() + + def get_count(self): + # type: () -> float + """Return the count of results if `include_total_result_count` was + set for the query. + + """ + return self._first_iterator_instance().get_count() + + +# The pylint error silenced below seems spurious, as the inner wrapper does, in +# fact, become a method of the class when it is applied. +def _ensure_response(f): + # pylint:disable=protected-access + def wrapper(self, *args, **kw): + if self._current_page is None: + self._response = self._get_next(self.continuation_token) + self.continuation_token, self._current_page = self._extract_data( + self._response + ) + return f(self, *args, **kw) + + return wrapper + + +class SearchPageIterator(PageIterator): + def __init__(self, client, initial_query, kwargs, continuation_token=None): + super(SearchPageIterator, self).__init__( + get_next=self._get_next_cb, + extract_data=self._extract_data_cb, + continuation_token=continuation_token, + ) + self._client = client + self._initial_query = initial_query + self._kwargs = kwargs + self._facets = None + + def _get_next_cb(self, continuation_token): + if continuation_token is None: + return self._client.documents.search_post( + search_request=self._initial_query.request, **self._kwargs + ) + + _next_link, next_page_request = unpack_continuation_token(continuation_token) + + return self._client.documents.search_post(search_request=next_page_request) + + def _extract_data_cb(self, response): # pylint:disable=no-self-use + continuation_token = pack_continuation_token(response) + results = [convert_search_result(r) for r in response.results] + return continuation_token, results + + @_ensure_response + def get_facets(self): + facets = self._response.facets + if facets is not None and self._facets is None: + self._facets = {k: [x.as_dict() for x in v] for k, v in facets.items()} + return self._facets + + @_ensure_response + def get_coverage(self): + return self._response.coverage + + @_ensure_response + def get_count(self): + return self._response.count diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_queries.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_queries.py new file mode 100644 index 000000000000..d47ef3bb9f28 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_queries.py @@ -0,0 +1,101 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING + +from ._generated.models import AutocompleteRequest, SearchRequest, SuggestRequest + +if TYPE_CHECKING: + # pylint:disable=unused-import + from typing import Any, List, Type, Union + + +class _QueryBase(object): + + _request_type = ( + None + ) # type: Union[Type[AutocompleteRequest], Type[SearchRequest], Type[SuggestRequest]] + + def __init__(self, **kwargs): + # type: (**Any) -> None + self._request = self._request_type(**kwargs) # pylint:disable=not-callable + + def __repr__(self): + # type: () -> str + return "<{} [{}]>".format(self.__class__.__name__, self._request.search_text)[ + :1024 + ] + + def filter(self, expression): + # type: (str) -> None + """Add a `filter` expression for the search results. + + :param expression: An ODate expression of for the query filter. + :type expression: str + """ + self._request.filter = expression + + @property + def request(self): + """The service request for this operation. + + """ + return self._request + + +class AutocompleteQuery(_QueryBase): + """Represent an autocomplete query again an Azure Search index. + + """ + + _request_type = AutocompleteRequest + + __doc__ = AutocompleteRequest.__doc__ + + +class SearchQuery(_QueryBase): + """Represent a rich search query again an Azure Search index. + + """ + + _request_type = SearchRequest + + __doc__ = SearchRequest.__doc__ + + def order_by(self, *fields): + # type: (*str) -> None + """Update the `orderby` property for the search results. + + :param fields: An list of fields for the query result to be ordered by. + :type expression: str + :raises: ValueError + """ + if not fields: + raise ValueError("At least one field must be provided") + + self._request.order_by = ",".join(fields) + + def select(self, *fields): + # type: (*str) -> None + """Update the `select` property for the search results. + + :param fields: An list of fields for the query result to return. + :type expression: str + :raises: ValueError + """ + if not fields: + raise ValueError("At least one field must be provided") + + self._request.select = ",".join(fields) + + +class SuggestQuery(_QueryBase): + """Represent a search suggestion query again an Azure Search index. + + """ + + _request_type = SuggestRequest + + __doc__ = SuggestRequest.__doc__ diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/_search_index_client.py b/sdk/search/azure-search-documents/azure/search/documents/_index/_search_index_client.py new file mode 100644 index 000000000000..48fe30ab96cc --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/_search_index_client.py @@ -0,0 +1,371 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from typing import cast, List, TYPE_CHECKING + +import six + +from azure.core.pipeline.policies import HeadersPolicy +from azure.core.tracing.decorator import distributed_trace +from ._generated import SearchIndexClient as _SearchIndexClient +from ._generated.models import IndexBatch, IndexingResult +from ._index_documents_batch import IndexDocumentsBatch +from ._paging import SearchItemPaged, SearchPageIterator +from ._queries import AutocompleteQuery, SearchQuery, SuggestQuery +from .._version import VERSION + +if TYPE_CHECKING: + # pylint:disable=unused-import,ungrouped-imports + from typing import Any, Union + from .. import SearchApiKeyCredential + + +def odata(statement, **kwargs): + """Escape an OData query string. + + The statement to prepare should include fields to substitute given inside + braces, e.g. `{somevar}` and then pass the corresponing value as a keyword + argument, e.g. `somevar=10`. + + :param statement: An OData query string to prepare + :type statement: str + :rtype: str + + .. admonition:: Example: + + >>> odata("name eq {name} and age eq {age}", name="O'Neil", age=37) + "name eq 'O''Neil' and age eq 37" + + + """ + kw = dict(kwargs) + for key in kw: + value = kw[key] + if isinstance(value, six.string_types): + value = value.replace("'", "''") + if "'{{{}}}'".format(key) not in statement: + kw[key] = "'{}'".format(value) + return statement.format(**kw) + + +class SearchIndexClient(object): + """A client to interact with an existing Azure search index. + + :param endpoint: The URL endpoint of an Azure search service + :type endpoint: str + :param index_name: The name of the index to connect to + :type index_name: str + :param credential: A credential to authorize search client requests + :type credential: SearchApiKeyCredential + + .. admonition:: Example: + + .. literalinclude:: ../samples/sample_authentication.py + :start-after: [START create_search_client_with_key] + :end-before: [END create_search_client_with_key] + :language: python + :dedent: 4 + :caption: Creating the SearchIndexClient with an API key. + """ + + def __init__(self, endpoint, index_name, credential, **kwargs): + # type: (str, str, SearchApiKeyCredential, **Any) -> None + + headers_policy = HeadersPolicy( + { + "api-key": credential.api_key, + "Accept": "application/json;odata.metadata=none", + } + ) + + self._endpoint = endpoint # type: str + self._index_name = index_name # type: str + self._client = _SearchIndexClient( + endpoint=endpoint, + index_name=index_name, + headers_policy=headers_policy, + sdk_moniker="search/{}".format(VERSION), + **kwargs + ) # type: _SearchIndexClient + + def __repr__(self): + # type: () -> str + return "".format( + repr(self._endpoint), repr(self._index_name) + )[:1024] + + def close(self): + # type: () -> None + """Close the :class:`~azure.search.SearchIndexClient` session. + + """ + return self._client.close() + + @distributed_trace + def get_document_count(self, **kwargs): + # type: (**Any) -> int + """Return the number of documents in the Azure search index. + + :rtype: int + """ + return int(self._client.documents.count(**kwargs)) + + @distributed_trace + def get_document(self, key, selected_fields=None, **kwargs): + # type: (str, List[str], **Any) -> dict + """Retrieve a document from the Azure search index by its key. + + :param key: The primary key value for the document to retrieve + :type key: str + :param selected_fields: a whitelist of fields to include in the results + :type selected_fields: List[str] + :rtype: dict + + .. admonition:: Example: + + .. literalinclude:: ../samples/sample_get_document.py + :start-after: [START get_document] + :end-before: [END get_document] + :language: python + :dedent: 4 + :caption: Get a specific document from the search index. + """ + result = self._client.documents.get( + key=key, selected_fields=selected_fields, **kwargs + ) + return cast(dict, result) + + @distributed_trace + def search(self, query, **kwargs): + # type: (Union[str, SearchQuery], **Any) -> SearchItemPaged[dict] + """Search the Azure search index for documents. + + :param query: An query for searching the index + :type documents: str or SearchQuery + :rtype: SearchItemPaged[dict] + + .. admonition:: Example: + + .. literalinclude:: ../samples/sample_simple_query.py + :start-after: [START simple_query] + :end-before: [END simple_query] + :language: python + :dedent: 4 + :caption: Search on a simple text term. + + .. admonition:: Example: + + .. literalinclude:: ../samples/sample_filter_query.py + :start-after: [START filter_query] + :end-before: [END filter_query] + :language: python + :dedent: 4 + :caption: Filter and sort search results. + + .. admonition:: Example: + + .. literalinclude:: ../samples/sample_facet_query.py + :start-after: [START facet_query] + :end-before: [END facet_query] + :language: python + :dedent: 4 + :caption: Get search result facets. + """ + if isinstance(query, six.string_types): + query = SearchQuery(search_text=query) + elif not isinstance(query, SearchQuery): + raise TypeError( + "Expected a string or SearchQuery for 'query', but got {}".format( + repr(query) + ) + ) + + return SearchItemPaged( + self._client, query, kwargs, page_iterator_class=SearchPageIterator + ) + + @distributed_trace + def suggest(self, query, **kwargs): + # type: (SuggestQuery, **Any) -> List[dict] + """Get search suggestion results from the Azure search index. + + :param query: An query for search suggestions + :type documents: SuggestQuery + :rtype: List[dict] + + .. admonition:: Example: + + .. literalinclude:: ../samples/sample_suggestions.py + :start-after: [START suggest_query] + :end-before: [END suggest_query] + :language: python + :dedent: 4 + :caption: Get search suggestions. + """ + if not isinstance(query, SuggestQuery): + raise TypeError( + "Expected a SuggestQuery for 'query', but got {}".format(repr(query)) + ) + + response = self._client.documents.suggest_post( + suggest_request=query.request, **kwargs + ) + results = [r.as_dict() for r in response.results] + return results + + @distributed_trace + def autocomplete(self, query, **kwargs): + # type: (AutocompleteQuery, **Any) -> List[dict] + """Get search auto-completion results from the Azure search index. + + :param query: An query for auto-completions + :type documents: AutocompleteQuery + :rtype: List[dict] + + .. admonition:: Example: + + .. literalinclude:: ../samples/sample_autocomplete.py + :start-after: [START autocomplete_query] + :end-before: [END autocomplete_query] + :language: python + :dedent: 4 + :caption: Get a auto-completions. + """ + if not isinstance(query, AutocompleteQuery): + raise TypeError( + "Expected a AutocompleteQuery for 'query', but got {}".format( + repr(query) + ) + ) + + response = self._client.documents.autocomplete_post( + autocomplete_request=query.request, **kwargs + ) + results = [r.as_dict() for r in response.results] + return results + + def upload_documents(self, documents, **kwargs): + # type: (List[dict], **Any) -> List[IndexingResult] + """Upload documents to the Azure search index. + + An upload action is similar to an "upsert" where the document will be + inserted if it is new and updated/replaced if it exists. All fields are + replaced in the update case. + + :param documents: A list of documents to upload. + :type documents: List[dict] + :rtype: List[IndexingResult] + + .. admonition:: Example: + + .. literalinclude:: ../samples/sample_crud_operations.py + :start-after: [START upload_document] + :end-before: [END upload_document] + :language: python + :dedent: 4 + :caption: Upload new documents to an index + """ + batch = IndexDocumentsBatch() + batch.add_upload_documents(documents) + results = self.index_documents(batch, **kwargs) + return cast(List[IndexingResult], results) + + def delete_documents(self, documents, **kwargs): + # type: (List[dict], **Any) -> List[IndexingResult] + """Delete documents from the Azure search index + + Delete removes the specified document from the index. Any field you + specify in a delete operation, other than the key field, will be + ignored. If you want to remove an individual field from a document, use + `merge_documents` instead and set the field explicitly to None. + + Delete operations are idempotent. That is, even if a document key does + not exist in the index, attempting a delete operation with that key will + result in a 200 status code. + + :param documents: A list of documents to delete. + :type documents: List[dict] + :rtype: List[IndexingResult] + + .. admonition:: Example: + + .. literalinclude:: ../samples/sample_crud_operations.py + :start-after: [START delete_document] + :end-before: [END delete_document] + :language: python + :dedent: 4 + :caption: Delete existing documents to an index + """ + batch = IndexDocumentsBatch() + batch.add_delete_documents(documents) + results = self.index_documents(batch, **kwargs) + return cast(List[IndexingResult], results) + + def merge_documents(self, documents, **kwargs): + # type: (List[dict], **Any) -> List[IndexingResult] + """Merge documents in to existing documents in the Azure search index. + + Merge updates an existing document with the specified fields. If the + document doesn't exist, the merge will fail. Any field you specify in a + merge will replace the existing field in the document. This also applies + to collections of primitive and complex types. + + :param documents: A list of documents to merge. + :type documents: List[dict] + :rtype: List[IndexingResult] + + .. admonition:: Example: + + .. literalinclude:: ../samples/sample_crud_operations.py + :start-after: [START merge_document] + :end-before: [END merge_document] + :language: python + :dedent: 4 + :caption: Merge fields into existing documents to an index + """ + batch = IndexDocumentsBatch() + batch.add_merge_documents(documents) + results = self.index_documents(batch, **kwargs) + return cast(List[IndexingResult], results) + + def merge_or_upload_documents(self, documents, **kwargs): + # type: (List[dict], **Any) -> List[IndexingResult] + """Merge documents in to existing documents in the Azure search index, + or upload them if they do not yet exist. + + This action behaves like `merge_documents` if a document with the given + key already exists in the index. If the document does not exist, it + behaves like `upload_documents` with a new document. + + :param documents: A list of documents to merge or upload. + :type documents: List[dict] + :rtype: List[IndexingResult] + """ + batch = IndexDocumentsBatch() + batch.add_merge_or_upload_documents(documents) + results = self.index_documents(batch, **kwargs) + return cast(List[IndexingResult], results) + + @distributed_trace + def index_documents(self, batch, **kwargs): + # type: (IndexDocumentsBatch, **Any) -> List[IndexingResult] + """Specify a document operations to perform as a batch. + + :param batch: A batch of document operations to perform. + :type batch: IndexDocumentsBatch + :rtype: List[IndexingResult] + """ + index_documents = IndexBatch(actions=batch.actions) + batch_response = self._client.documents.index(batch=index_documents, **kwargs) + return cast(List[IndexingResult], batch_response.results) + + def __enter__(self): + # type: () -> SearchIndexClient + self._client.__enter__() # pylint:disable=no-member + return self + + def __exit__(self, *args): + # type: (*Any) -> None + self._client.__exit__(*args) # pylint:disable=no-member diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/aio/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_index/aio/__init__.py new file mode 100644 index 000000000000..3be55b46fa76 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/aio/__init__.py @@ -0,0 +1,7 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +from ._search_index_client_async import AsyncSearchItemPaged, SearchIndexClient + +__all__ = ("AsyncSearchItemPaged", "SearchIndexClient") diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/aio/_paging.py b/sdk/search/azure-search-documents/azure/search/documents/_index/aio/_paging.py new file mode 100644 index 000000000000..eabac2a7b744 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/aio/_paging.py @@ -0,0 +1,123 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from typing import Union + +from azure.core.async_paging import AsyncItemPaged, AsyncPageIterator, ReturnType +from .._generated.models import SearchRequest +from .._paging import ( + convert_search_result, + pack_continuation_token, + unpack_continuation_token, +) + + +class AsyncSearchItemPaged(AsyncItemPaged[ReturnType]): + def __init__(self, *args, **kwargs): + super(AsyncSearchItemPaged, self).__init__(*args, **kwargs) + self._first_page_iterator_instance = None + + async def __anext__(self) -> ReturnType: + if self._page_iterator is None: + self._page_iterator = self.by_page() + self._first_page_iterator_instance = self._page_iterator + return await self.__anext__() + if self._page is None: + # Let it raise StopAsyncIteration + self._page = await self._page_iterator.__anext__() + return await self.__anext__() + try: + return await self._page.__anext__() + except StopAsyncIteration: + self._page = None + return await self.__anext__() + + def _first_iterator_instance(self): + if self._first_page_iterator_instance is None: + self._page_iterator = self.by_page() + self._first_page_iterator_instance = self._page_iterator + return self._first_page_iterator_instance + + async def get_facets(self) -> Union[dict, None]: + """Return any facet results if faceting was requested. + + """ + return await self._first_iterator_instance().get_facets() + + async def get_coverage(self): + # type: () -> float + """Return the covereage percentage, if `minimum_coverage` was + specificied for the query. + + """ + return await self._first_iterator_instance().get_coverage() + + async def get_count(self): + # type: () -> float + """Return the count of results if `include_total_result_count` was + set for the query. + + """ + return await self._first_iterator_instance().get_count() + + +# The pylint error silenced below seems spurious, as the inner wrapper does, in +# fact, become a method of the class when it is applied. +def _ensure_response(f): + # pylint:disable=protected-access + async def wrapper(self, *args, **kw): + if self._current_page is None: + self._response = await self._get_next(self.continuation_token) + self.continuation_token, self._current_page = await self._extract_data( + self._response + ) + return await f(self, *args, **kw) + + return wrapper + + +class AsyncSearchPageIterator(AsyncPageIterator[ReturnType]): + def __init__(self, client, initial_query, kwargs, continuation_token=None): + super(AsyncSearchPageIterator, self).__init__( + get_next=self._get_next_cb, + extract_data=self._extract_data_cb, + continuation_token=continuation_token, + ) + self._client = client + self._initial_query = initial_query + self._kwargs = kwargs + self._facets = None + + async def _get_next_cb(self, continuation_token): + if continuation_token is None: + return await self._client.documents.search_post( + search_request=self._initial_query.request, **self._kwargs + ) + + _next_link, next_page_request = unpack_continuation_token(continuation_token) + + return await self._client.documents.search_post( + search_request=next_page_request + ) + + async def _extract_data_cb(self, response): # pylint:disable=no-self-use + continuation_token = pack_continuation_token(response) + results = [convert_search_result(r) for r in response.results] + return continuation_token, results + + @_ensure_response + async def get_facets(self): + facets = self._response.facets + if facets is not None and self._facets is None: + self._facets = {k: [x.as_dict() for x in v] for k, v in facets.items()} + return self._facets + + @_ensure_response + async def get_coverage(self): + return self._response.coverage + + @_ensure_response + async def get_count(self): + return self._response.count diff --git a/sdk/search/azure-search-documents/azure/search/documents/_index/aio/_search_index_client_async.py b/sdk/search/azure-search-documents/azure/search/documents/_index/aio/_search_index_client_async.py new file mode 100644 index 000000000000..fe447123d6cf --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_index/aio/_search_index_client_async.py @@ -0,0 +1,344 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from typing import cast, List, TYPE_CHECKING + +import six + +from azure.core.pipeline.policies import HeadersPolicy +from azure.core.tracing.decorator_async import distributed_trace_async +from ._paging import AsyncSearchItemPaged, AsyncSearchPageIterator +from .._generated.aio import SearchIndexClient as _SearchIndexClient +from .._generated.models import IndexBatch, IndexingResult, SearchRequest +from .._index_documents_batch import IndexDocumentsBatch +from .._queries import AutocompleteQuery, SearchQuery, SuggestQuery +from ..._version import VERSION + +if TYPE_CHECKING: + # pylint:disable=unused-import,ungrouped-imports + from typing import Any, Union + from ... import SearchApiKeyCredential + + +class SearchIndexClient(object): + """A client to interact with an existing Azure search index. + + :param endpoint: The URL endpoint of an Azure search service + :type endpoint: str + :param index_name: The name of the index to connect to + :type index_name: str + :param credential: A credential to authorize search client requests + :type credential: SearchApiKeyCredential + + .. admonition:: Example: + .. literalinclude:: ../samples/async_samples/sample_authentication_async.py + :start-after: [START create_search_client_with_key_async] + :end-before: [END create_search_client_with_key_async] + :language: python + :dedent: 4 + :caption: Creating the SearchIndexClient with an API key. + """ + + def __init__(self, endpoint, index_name, credential, **kwargs): + # type: (str, str, SearchApiKeyCredential, **Any) -> None + + headers_policy = HeadersPolicy( + { + "api-key": credential.api_key, + "Accept": "application/json;odata.metadata=none", + } + ) + + self._endpoint = endpoint # type: str + self._index_name = index_name # type: str + self._client = _SearchIndexClient( + endpoint=endpoint, + index_name=index_name, + headers_policy=headers_policy, + sdk_moniker="search/{}".format(VERSION), + **kwargs + ) # type: _SearchIndexClient + + def __repr__(self): + # type: () -> str + return "".format( + repr(self._endpoint), repr(self._index_name) + )[:1024] + + async def close(self): + # type: () -> None + """Close the :class:`~azure.search.aio.SearchIndexClient` session. + + """ + return await self._client.close() + + @distributed_trace_async + async def get_document_count(self, **kwargs): + # type: (**Any) -> int + """Return the number of documents in the Azure search index. + + :rtype: int + """ + return int(await self._client.documents.count(**kwargs)) + + @distributed_trace_async + async def get_document(self, key, selected_fields=None, **kwargs): + # type: (str, List[str], **Any) -> dict + """Retrieve a document from the Azure search index by its key. + + :param key: The primary key value for the document to retrieve + :type key: str + :param selected_fields: a whitelist of fields to include in the results + :type selected_fields: List[str] + :rtype: dict + + .. admonition:: Example: + + .. literalinclude:: ../samples/async_samples/sample_get_document_async.py + :start-after: [START get_document_async] + :end-before: [END get_document_async] + :language: python + :dedent: 4 + :caption: Get a specific document from the search index. + """ + result = await self._client.documents.get( + key=key, selected_fields=selected_fields, **kwargs + ) + return cast(dict, result) + + @distributed_trace_async + async def search(self, query, **kwargs): + # type: (Union[str, SearchQuery], **Any) -> AsyncSearchItemPaged[dict] + """Search the Azure search index for documents. + + :param query: An query for searching the index + :type documents: str or SearchQuery + :rtype: AsyncSearchItemPaged[dict] + + .. admonition:: Example: + + .. literalinclude:: ../samples/async_samples/sample_simple_query_async.py + :start-after: [START simple_query_async] + :end-before: [END simple_query_async] + :language: python + :dedent: 4 + :caption: Search on a simple text term. + + .. admonition:: Example: + + .. literalinclude:: ../samples/async_samples/sample_filter_query_async.py + :start-after: [START filter_query_async] + :end-before: [END filter_query_async] + :language: python + :dedent: 4 + :caption: Filter and sort search results. + + .. admonition:: Example: + + .. literalinclude:: ../samples/async_samples/sample_facet_query_async.py + :start-after: [START facet_query_async] + :end-before: [END facet_query_async] + :language: python + :dedent: 4 + :caption: Get search result facets. + """ + if isinstance(query, six.string_types): + query = SearchQuery(search_text=query) + elif not isinstance(query, SearchQuery): + raise TypeError( + "Expected a string or SearchQuery for 'query', but got {}".format( + repr(query) + ) + ) + + return AsyncSearchItemPaged( + self._client, query, kwargs, page_iterator_class=AsyncSearchPageIterator + ) + + @distributed_trace_async + async def suggest(self, query, **kwargs): + # type: (Union[str, SuggestQuery], **Any) -> List[dict] + """Get search suggestion results from the Azure search index. + + :param query: An query for search suggestions + :type documents: SuggestQuery + :rtype: List[dict] + + .. admonition:: Example: + + .. literalinclude:: ../samples/async_samples/sample_suggestions_async.py + :start-after: [START suggest_query_async] + :end-before: [END suggest_query_async] + :language: python + :dedent: 4 + :caption: Get search suggestions. + """ + if not isinstance(query, SuggestQuery): + raise TypeError( + "Expected a SuggestQuery for 'query', but got {}".format(repr(query)) + ) + + response = await self._client.documents.suggest_post( + suggest_request=query.request, **kwargs + ) + results = [r.as_dict() for r in response.results] + return results + + @distributed_trace_async + async def autocomplete(self, query, **kwargs): + # type: (Union[str, AutocompleteQuery], **Any) -> List[dict] + """Get search auto-completion results from the Azure search index. + + :param query: An query for auto-completions + :type documents: AutocompleteQuery + :rtype: List[dict] + + .. admonition:: Example: + + .. literalinclude:: ../samples/async_samples/sample_autocomplete_async.py + :start-after: [START autocomplete_query_async] + :end-before: [END autocomplete_query_async] + :language: python + :dedent: 4 + :caption: Get a auto-completions. + """ + if not isinstance(query, AutocompleteQuery): + raise TypeError( + "Expected a AutocompleteQuery for 'query', but got {}".format( + repr(query) + ) + ) + + response = await self._client.documents.autocomplete_post( + autocomplete_request=query.request, **kwargs + ) + results = [r.as_dict() for r in response.results] + return results + + async def upload_documents(self, documents, **kwargs): + # type: (List[dict], **Any) -> List[IndexingResult] + """Upload documents to the Azure search index. + + An upload action is similar to an "upsert" where the document will be + inserted if it is new and updated/replaced if it exists. All fields are + replaced in the update case. + + :param documents: A list of documents to upload. + :type documents: List[dict] + :rtype: List[IndexingResult] + + .. admonition:: Example: + + .. literalinclude:: ../samples/async_samples/sample_crud_operations_async.py + :start-after: [START upload_document_async] + :end-before: [END upload_document_async] + :language: python + :dedent: 4 + :caption: Upload new documents to an index + """ + batch = IndexDocumentsBatch() + batch.add_upload_documents(documents) + results = await self.index_documents(batch, **kwargs) + return cast(List[IndexingResult], results) + + async def delete_documents(self, documents, **kwargs): + # type: (List[dict], **Any) -> List[IndexingResult] + """Delete documents from the Azure search index + + Delete removes the specified document from the index. Any field you + specify in a delete operation, other than the key field, will be + ignored. If you want to remove an individual field from a document, use + `merge_documents` instead and set the field explicitly to None. + + Delete operations are idempotent. That is, even if a document key does + not exist in the index, attempting a delete operation with that key will + result in a 200 status code. + + :param documents: A list of documents to delete. + :type documents: List[dict] + :rtype: List[IndexingResult] + + .. admonition:: Example: + + .. literalinclude:: ../samples/async_samples/sample_crud_operations_async.py + :start-after: [START delete_document_async] + :end-before: [END delete_document_async] + :language: python + :dedent: 4 + :caption: Delete existing documents to an index + """ + batch = IndexDocumentsBatch() + batch.add_delete_documents(documents) + results = await self.index_documents(batch, **kwargs) + return cast(List[IndexingResult], results) + + async def merge_documents(self, documents, **kwargs): + # type: (List[dict], **Any) -> List[IndexingResult] + """Merge documents in to existing documents in the Azure search index. + + Merge updates an existing document with the specified fields. If the + document doesn't exist, the merge will fail. Any field you specify in a + merge will replace the existing field in the document. This also applies + to collections of primitive and complex types. + + :param documents: A list of documents to merge. + :type documents: List[dict] + :rtype: List[IndexingResult] + + .. admonition:: Example: + + .. literalinclude:: ../samples/async_samples/sample_crud_operations_async.py + :start-after: [START merge_document_async] + :end-before: [END merge_document_async] + :language: python + :dedent: 4 + :caption: Merge fields into existing documents to an index + """ + batch = IndexDocumentsBatch() + batch.add_merge_documents(documents) + results = await self.index_documents(batch, **kwargs) + return cast(List[IndexingResult], results) + + async def merge_or_upload_documents(self, documents, **kwargs): + # type: (List[dict], **Any) -> List[IndexingResult] + """Merge documents in to existing documents in the Azure search index, + or upload them if they do not yet exist. + + This action behaves like `merge_documents` if a document with the given + key already exists in the index. If the document does not exist, it + behaves like `upload_documents` with a new document. + + :param documents: A list of documents to merge or upload. + :type documents: List[dict] + :rtype: List[IndexingResult] + """ + batch = IndexDocumentsBatch() + batch.add_merge_or_upload_documents(documents) + results = await self.index_documents(batch, **kwargs) + return cast(List[IndexingResult], results) + + @distributed_trace_async + async def index_documents(self, batch, **kwargs): + # type: (IndexDocumentsBatch, **Any) -> List[IndexingResult] + """Specify a document operations to perform as a batch. + + :param batch: A batch of document operations to perform. + :type batch: IndexDocumentsBatch + :rtype: List[IndexingResult] + """ + index_documents = IndexBatch(actions=batch.actions) + batch_response = await self._client.documents.index( + batch=index_documents, **kwargs + ) + return cast(List[IndexingResult], batch_response.results) + + async def __aenter__(self): + # type: () -> SearchIndexClient + await self._client.__aenter__() # pylint: disable=no-member + return self + + async def __aexit__(self, *args): + # type: (*Any) -> None + await self._client.__aexit__(*args) # pylint: disable=no-member diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_service/__init__.py new file mode 100644 index 000000000000..eca411e6a05a --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/__init__.py @@ -0,0 +1,5 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +from ._search_service_client import SearchServiceClient # pylint: disable=unused-import diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/__init__.py new file mode 100644 index 000000000000..4e8378902f12 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/__init__.py @@ -0,0 +1,8 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._search_service_client import SearchServiceClient +__all__ = ['SearchServiceClient'] diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/_configuration.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/_configuration.py new file mode 100644 index 000000000000..28368a23abde --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/_configuration.py @@ -0,0 +1,51 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies + +VERSION = "unknown" + +class SearchServiceClientConfiguration(Configuration): + """Configuration for SearchServiceClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param endpoint: The endpoint URL of the search service. + :type endpoint: str + """ + + def __init__( + self, + endpoint, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + if endpoint is None: + raise ValueError("Parameter 'endpoint' must not be None.") + super(SearchServiceClientConfiguration, self).__init__(**kwargs) + + self.endpoint = endpoint + self.api_version = "2019-05-06-Preview" + kwargs.setdefault('sdk_moniker', 'searchserviceclient/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs # type: Any + ): + # type: (...) -> None + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/_search_service_client.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/_search_service_client.py new file mode 100644 index 000000000000..f466d50bb2aa --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/_search_service_client.py @@ -0,0 +1,75 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any + +from azure.core import PipelineClient +from msrest import Deserializer, Serializer + +from ._configuration import SearchServiceClientConfiguration +from .operations import DataSourcesOperations +from .operations import IndexersOperations +from .operations import SkillsetsOperations +from .operations import SynonymMapsOperations +from .operations import IndexesOperations +from .operations import SearchServiceClientOperationsMixin +from . import models + + +class SearchServiceClient(SearchServiceClientOperationsMixin): + """Client that can be used to manage and query indexes and documents, as well as manage other resources, on a search service. + + :ivar data_sources: DataSourcesOperations operations + :vartype data_sources: search_service_client.operations.DataSourcesOperations + :ivar indexers: IndexersOperations operations + :vartype indexers: search_service_client.operations.IndexersOperations + :ivar skillsets: SkillsetsOperations operations + :vartype skillsets: search_service_client.operations.SkillsetsOperations + :ivar synonym_maps: SynonymMapsOperations operations + :vartype synonym_maps: search_service_client.operations.SynonymMapsOperations + :ivar indexes: IndexesOperations operations + :vartype indexes: search_service_client.operations.IndexesOperations + :param endpoint: The endpoint URL of the search service. + :type endpoint: str + """ + + def __init__( + self, + endpoint, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + base_url = '{endpoint}' + self._config = SearchServiceClientConfiguration(endpoint, **kwargs) + self._client = PipelineClient(base_url=base_url, config=self._config, **kwargs) + + client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + self._serialize = Serializer(client_models) + self._deserialize = Deserializer(client_models) + + self.data_sources = DataSourcesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.indexers = IndexersOperations( + self._client, self._config, self._serialize, self._deserialize) + self.skillsets = SkillsetsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.synonym_maps = SynonymMapsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.indexes = IndexesOperations( + self._client, self._config, self._serialize, self._deserialize) + + def close(self): + # type: () -> None + self._client.close() + + def __enter__(self): + # type: () -> SearchServiceClient + self._client.__enter__() + return self + + def __exit__(self, *exc_details): + # type: (Any) -> None + self._client.__exit__(*exc_details) diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/__init__.py new file mode 100644 index 000000000000..6ffdee218108 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/__init__.py @@ -0,0 +1,8 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._search_service_client_async import SearchServiceClient +__all__ = ['SearchServiceClient'] diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/_configuration_async.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/_configuration_async.py new file mode 100644 index 000000000000..022214a557bb --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/_configuration_async.py @@ -0,0 +1,49 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies + +VERSION = "unknown" + +class SearchServiceClientConfiguration(Configuration): + """Configuration for SearchServiceClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param endpoint: The endpoint URL of the search service. + :type endpoint: str + """ + + def __init__( + self, + endpoint: str, + **kwargs: Any + ) -> None: + if endpoint is None: + raise ValueError("Parameter 'endpoint' must not be None.") + super(SearchServiceClientConfiguration, self).__init__(**kwargs) + + self.endpoint = endpoint + self.api_version = "2019-05-06-Preview" + kwargs.setdefault('sdk_moniker', 'searchserviceclient/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs: Any + ) -> None: + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/_search_service_client_async.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/_search_service_client_async.py new file mode 100644 index 000000000000..11b0ab3a5fdf --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/_search_service_client_async.py @@ -0,0 +1,71 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any + +from azure.core import AsyncPipelineClient +from msrest import Deserializer, Serializer + +from ._configuration_async import SearchServiceClientConfiguration +from .operations_async import DataSourcesOperations +from .operations_async import IndexersOperations +from .operations_async import SkillsetsOperations +from .operations_async import SynonymMapsOperations +from .operations_async import IndexesOperations +from .operations_async import SearchServiceClientOperationsMixin +from .. import models + + +class SearchServiceClient(SearchServiceClientOperationsMixin): + """Client that can be used to manage and query indexes and documents, as well as manage other resources, on a search service. + + :ivar data_sources: DataSourcesOperations operations + :vartype data_sources: search_service_client.aio.operations_async.DataSourcesOperations + :ivar indexers: IndexersOperations operations + :vartype indexers: search_service_client.aio.operations_async.IndexersOperations + :ivar skillsets: SkillsetsOperations operations + :vartype skillsets: search_service_client.aio.operations_async.SkillsetsOperations + :ivar synonym_maps: SynonymMapsOperations operations + :vartype synonym_maps: search_service_client.aio.operations_async.SynonymMapsOperations + :ivar indexes: IndexesOperations operations + :vartype indexes: search_service_client.aio.operations_async.IndexesOperations + :param endpoint: The endpoint URL of the search service. + :type endpoint: str + """ + + def __init__( + self, + endpoint: str, + **kwargs: Any + ) -> None: + base_url = '{endpoint}' + self._config = SearchServiceClientConfiguration(endpoint, **kwargs) + self._client = AsyncPipelineClient(base_url=base_url, config=self._config, **kwargs) + + client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + self._serialize = Serializer(client_models) + self._deserialize = Deserializer(client_models) + + self.data_sources = DataSourcesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.indexers = IndexersOperations( + self._client, self._config, self._serialize, self._deserialize) + self.skillsets = SkillsetsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.synonym_maps = SynonymMapsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.indexes = IndexesOperations( + self._client, self._config, self._serialize, self._deserialize) + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> "SearchServiceClient": + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details) -> None: + await self._client.__aexit__(*exc_details) diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/__init__.py new file mode 100644 index 000000000000..a9e96c765498 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/__init__.py @@ -0,0 +1,21 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._data_sources_operations_async import DataSourcesOperations +from ._indexers_operations_async import IndexersOperations +from ._skillsets_operations_async import SkillsetsOperations +from ._synonym_maps_operations_async import SynonymMapsOperations +from ._indexes_operations_async import IndexesOperations +from ._search_service_client_operations_async import SearchServiceClientOperationsMixin + +__all__ = [ + 'DataSourcesOperations', + 'IndexersOperations', + 'SkillsetsOperations', + 'SynonymMapsOperations', + 'IndexesOperations', + 'SearchServiceClientOperationsMixin', +] diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_data_sources_operations_async.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_data_sources_operations_async.py new file mode 100644 index 000000000000..431a492fd958 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_data_sources_operations_async.py @@ -0,0 +1,385 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class DataSourcesOperations: + """DataSourcesOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~search_service_client.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def create_or_update( + self, + data_source_name: str, + data_source: "models.DataSource", + request_options: Optional["models.RequestOptions"] = None, + access_condition: Optional["models.AccessCondition"] = None, + **kwargs + ) -> "models.DataSource": + """Creates a new datasource or updates a datasource if it already exists. + + :param data_source_name: The name of the datasource to create or update. + :type data_source_name: str + :param data_source: The definition of the datasource to create or update. + :type data_source: ~search_service_client.models.DataSource + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DataSource or the result of cls(response) + :rtype: ~search_service_client.models.DataSource or ~search_service_client.models.DataSource + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DataSource"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + prefer = "return=representation" + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'dataSourceName': self._serialize.url("data_source_name", data_source_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + header_parameters['Prefer'] = self._serialize.header("prefer", prefer, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(data_source, 'DataSource') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('DataSource', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('DataSource', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/datasources(\'{dataSourceName}\')'} + + async def delete( + self, + data_source_name: str, + request_options: Optional["models.RequestOptions"] = None, + access_condition: Optional["models.AccessCondition"] = None, + **kwargs + ) -> None: + """Deletes a datasource. + + :param data_source_name: The name of the datasource to delete. + :type data_source_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'dataSourceName': self._serialize.url("data_source_name", data_source_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204, 404]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/datasources(\'{dataSourceName}\')'} + + async def get( + self, + data_source_name: str, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.DataSource": + """Retrieves a datasource definition. + + :param data_source_name: The name of the datasource to retrieve. + :type data_source_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DataSource or the result of cls(response) + :rtype: ~search_service_client.models.DataSource + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DataSource"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'dataSourceName': self._serialize.url("data_source_name", data_source_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('DataSource', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/datasources(\'{dataSourceName}\')'} + + async def list( + self, + select: Optional[str] = None, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.ListDataSourcesResult": + """Lists all datasources available for a search service. + + :param select: Selects which top-level properties of the data sources to retrieve. Specified as + a comma-separated list of JSON property names, or '*' for all properties. The default is all + properties. + :type select: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ListDataSourcesResult or the result of cls(response) + :rtype: ~search_service_client.models.ListDataSourcesResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ListDataSourcesResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.list.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if select is not None: + query_parameters['$select'] = self._serialize.query("select", select, 'str') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('ListDataSourcesResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/datasources'} + + async def create( + self, + data_source: "models.DataSource", + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.DataSource": + """Creates a new datasource. + + :param data_source: The definition of the datasource to create. + :type data_source: ~search_service_client.models.DataSource + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DataSource or the result of cls(response) + :rtype: ~search_service_client.models.DataSource + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DataSource"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(data_source, 'DataSource') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('DataSource', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/datasources'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_indexers_operations_async.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_indexers_operations_async.py new file mode 100644 index 000000000000..acd91482da73 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_indexers_operations_async.py @@ -0,0 +1,560 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IndexersOperations: + """IndexersOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~search_service_client.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def reset( + self, + indexer_name: str, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> None: + """Resets the change tracking state associated with an indexer. + + :param indexer_name: The name of the indexer to reset. + :type indexer_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.reset.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexerName': self._serialize.url("indexer_name", indexer_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + + # Construct and send request + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + reset.metadata = {'url': '/indexers(\'{indexerName}\')/search.reset'} + + async def run( + self, + indexer_name: str, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> None: + """Runs an indexer on-demand. + + :param indexer_name: The name of the indexer to run. + :type indexer_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.run.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexerName': self._serialize.url("indexer_name", indexer_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + + # Construct and send request + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + run.metadata = {'url': '/indexers(\'{indexerName}\')/search.run'} + + async def create_or_update( + self, + indexer_name: str, + indexer: "models.Indexer", + request_options: Optional["models.RequestOptions"] = None, + access_condition: Optional["models.AccessCondition"] = None, + **kwargs + ) -> "models.Indexer": + """Creates a new indexer or updates an indexer if it already exists. + + :param indexer_name: The name of the indexer to create or update. + :type indexer_name: str + :param indexer: The definition of the indexer to create or update. + :type indexer: ~search_service_client.models.Indexer + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Indexer or the result of cls(response) + :rtype: ~search_service_client.models.Indexer or ~search_service_client.models.Indexer + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Indexer"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + prefer = "return=representation" + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexerName': self._serialize.url("indexer_name", indexer_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + header_parameters['Prefer'] = self._serialize.header("prefer", prefer, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(indexer, 'Indexer') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('Indexer', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Indexer', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/indexers(\'{indexerName}\')'} + + async def delete( + self, + indexer_name: str, + request_options: Optional["models.RequestOptions"] = None, + access_condition: Optional["models.AccessCondition"] = None, + **kwargs + ) -> None: + """Deletes an indexer. + + :param indexer_name: The name of the indexer to delete. + :type indexer_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexerName': self._serialize.url("indexer_name", indexer_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204, 404]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/indexers(\'{indexerName}\')'} + + async def get( + self, + indexer_name: str, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.Indexer": + """Retrieves an indexer definition. + + :param indexer_name: The name of the indexer to retrieve. + :type indexer_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Indexer or the result of cls(response) + :rtype: ~search_service_client.models.Indexer + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Indexer"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexerName': self._serialize.url("indexer_name", indexer_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('Indexer', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/indexers(\'{indexerName}\')'} + + async def list( + self, + select: Optional[str] = None, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.ListIndexersResult": + """Lists all indexers available for a search service. + + :param select: Selects which top-level properties of the indexers to retrieve. Specified as a + comma-separated list of JSON property names, or '*' for all properties. The default is all + properties. + :type select: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ListIndexersResult or the result of cls(response) + :rtype: ~search_service_client.models.ListIndexersResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ListIndexersResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.list.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if select is not None: + query_parameters['$select'] = self._serialize.query("select", select, 'str') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('ListIndexersResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/indexers'} + + async def create( + self, + indexer: "models.Indexer", + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.Indexer": + """Creates a new indexer. + + :param indexer: The definition of the indexer to create. + :type indexer: ~search_service_client.models.Indexer + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Indexer or the result of cls(response) + :rtype: ~search_service_client.models.Indexer + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Indexer"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(indexer, 'Indexer') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('Indexer', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/indexers'} + + async def get_status( + self, + indexer_name: str, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.IndexerExecutionInfo": + """Returns the current status and execution history of an indexer. + + :param indexer_name: The name of the indexer for which to retrieve status. + :type indexer_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IndexerExecutionInfo or the result of cls(response) + :rtype: ~search_service_client.models.IndexerExecutionInfo + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IndexerExecutionInfo"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get_status.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexerName': self._serialize.url("indexer_name", indexer_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('IndexerExecutionInfo', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_status.metadata = {'url': '/indexers(\'{indexerName}\')/search.status'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_indexes_operations_async.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_indexes_operations_async.py new file mode 100644 index 000000000000..3a2955b84276 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_indexes_operations_async.py @@ -0,0 +1,524 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IndexesOperations: + """IndexesOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~search_service_client.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def create( + self, + index: "models.Index", + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.Index": + """Creates a new search index. + + :param index: The definition of the index to create. + :type index: ~search_service_client.models.Index + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Index or the result of cls(response) + :rtype: ~search_service_client.models.Index + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Index"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(index, 'Index') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('Index', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/indexes'} + + async def list( + self, + select: Optional[str] = None, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.ListIndexesResult": + """Lists all indexes available for a search service. + + :param select: Selects which top-level properties of the index definitions to retrieve. + Specified as a comma-separated list of JSON property names, or '*' for all properties. The + default is all properties. + :type select: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ListIndexesResult or the result of cls(response) + :rtype: ~search_service_client.models.ListIndexesResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ListIndexesResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.list.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if select is not None: + query_parameters['$select'] = self._serialize.query("select", select, 'str') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('ListIndexesResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/indexes'} + + async def create_or_update( + self, + index_name: str, + index: "models.Index", + allow_index_downtime: Optional[bool] = None, + request_options: Optional["models.RequestOptions"] = None, + access_condition: Optional["models.AccessCondition"] = None, + **kwargs + ) -> "models.Index": + """Creates a new search index or updates an index if it already exists. + + :param index_name: The definition of the index to create or update. + :type index_name: str + :param index: The definition of the index to create or update. + :type index: ~search_service_client.models.Index + :param allow_index_downtime: Allows new analyzers, tokenizers, token filters, or char filters + to be added to an index by taking the index offline for at least a few seconds. This + temporarily causes indexing and query requests to fail. Performance and write availability of + the index can be impaired for several minutes after the index is updated, or longer for very + large indexes. + :type allow_index_downtime: bool + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Index or the result of cls(response) + :rtype: ~search_service_client.models.Index or ~search_service_client.models.Index + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Index"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + prefer = "return=representation" + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("index_name", index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if allow_index_downtime is not None: + query_parameters['allowIndexDowntime'] = self._serialize.query("allow_index_downtime", allow_index_downtime, 'bool') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + header_parameters['Prefer'] = self._serialize.header("prefer", prefer, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(index, 'Index') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('Index', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Index', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/indexes(\'{indexName}\')'} + + async def delete( + self, + index_name: str, + request_options: Optional["models.RequestOptions"] = None, + access_condition: Optional["models.AccessCondition"] = None, + **kwargs + ) -> None: + """Deletes a search index and all the documents it contains. + + :param index_name: The name of the index to delete. + :type index_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("index_name", index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204, 404]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/indexes(\'{indexName}\')'} + + async def get( + self, + index_name: str, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.Index": + """Retrieves an index definition. + + :param index_name: The name of the index to retrieve. + :type index_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Index or the result of cls(response) + :rtype: ~search_service_client.models.Index + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Index"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("index_name", index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('Index', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/indexes(\'{indexName}\')'} + + async def get_statistics( + self, + index_name: str, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.GetIndexStatisticsResult": + """Returns statistics for the given index, including a document count and storage usage. + + :param index_name: The name of the index for which to retrieve statistics. + :type index_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: GetIndexStatisticsResult or the result of cls(response) + :rtype: ~search_service_client.models.GetIndexStatisticsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.GetIndexStatisticsResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get_statistics.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("index_name", index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('GetIndexStatisticsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_statistics.metadata = {'url': '/indexes(\'{indexName}\')/search.stats'} + + async def analyze( + self, + index_name: str, + request_todo: "models.AnalyzeRequest", + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.AnalyzeResult": + """Shows how an analyzer breaks text into tokens. + + :param index_name: The name of the index for which to test an analyzer. + :type index_name: str + :param request_todo: The text and analyzer or analysis components to test. + :type request_todo: ~search_service_client.models.AnalyzeRequest + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AnalyzeResult or the result of cls(response) + :rtype: ~search_service_client.models.AnalyzeResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AnalyzeResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.analyze.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("index_name", index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(request_todo, 'AnalyzeRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('AnalyzeResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + analyze.metadata = {'url': '/indexes(\'{indexName}\')/search.analyze'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_search_service_client_operations_async.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_search_service_client_operations_async.py new file mode 100644 index 000000000000..1a1707edf14b --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_search_service_client_operations_async.py @@ -0,0 +1,75 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class SearchServiceClientOperationsMixin: + + async def get_service_statistics( + self, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.ServiceStatistics": + """Gets service level statistics for a search service. + + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ServiceStatistics or the result of cls(response) + :rtype: ~search_service_client.models.ServiceStatistics + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ServiceStatistics"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get_service_statistics.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('ServiceStatistics', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_service_statistics.metadata = {'url': '/servicestats'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_skillsets_operations_async.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_skillsets_operations_async.py new file mode 100644 index 000000000000..b286e25f0b34 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_skillsets_operations_async.py @@ -0,0 +1,386 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class SkillsetsOperations: + """SkillsetsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~search_service_client.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def create_or_update( + self, + skillset_name: str, + skillset: "models.Skillset", + request_options: Optional["models.RequestOptions"] = None, + access_condition: Optional["models.AccessCondition"] = None, + **kwargs + ) -> "models.Skillset": + """Creates a new skillset in a search service or updates the skillset if it already exists. + + :param skillset_name: The name of the skillset to create or update. + :type skillset_name: str + :param skillset: The skillset containing one or more skills to create or update in a search + service. + :type skillset: ~search_service_client.models.Skillset + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Skillset or the result of cls(response) + :rtype: ~search_service_client.models.Skillset or ~search_service_client.models.Skillset + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Skillset"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + prefer = "return=representation" + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'skillsetName': self._serialize.url("skillset_name", skillset_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + header_parameters['Prefer'] = self._serialize.header("prefer", prefer, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(skillset, 'Skillset') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('Skillset', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Skillset', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/skillsets(\'{skillsetName}\')'} + + async def delete( + self, + skillset_name: str, + request_options: Optional["models.RequestOptions"] = None, + access_condition: Optional["models.AccessCondition"] = None, + **kwargs + ) -> None: + """Deletes a skillset in a search service. + + :param skillset_name: The name of the skillset to delete. + :type skillset_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'skillsetName': self._serialize.url("skillset_name", skillset_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204, 404]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/skillsets(\'{skillsetName}\')'} + + async def get( + self, + skillset_name: str, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.Skillset": + """Retrieves a skillset in a search service. + + :param skillset_name: The name of the skillset to retrieve. + :type skillset_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Skillset or the result of cls(response) + :rtype: ~search_service_client.models.Skillset + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Skillset"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'skillsetName': self._serialize.url("skillset_name", skillset_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('Skillset', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/skillsets(\'{skillsetName}\')'} + + async def list( + self, + select: Optional[str] = None, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.ListSkillsetsResult": + """List all skillsets in a search service. + + :param select: Selects which top-level properties of the skillsets to retrieve. Specified as a + comma-separated list of JSON property names, or '*' for all properties. The default is all + properties. + :type select: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ListSkillsetsResult or the result of cls(response) + :rtype: ~search_service_client.models.ListSkillsetsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ListSkillsetsResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.list.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if select is not None: + query_parameters['$select'] = self._serialize.query("select", select, 'str') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('ListSkillsetsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/skillsets'} + + async def create( + self, + skillset: "models.Skillset", + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.Skillset": + """Creates a new skillset in a search service. + + :param skillset: The skillset containing one or more skills to create in a search service. + :type skillset: ~search_service_client.models.Skillset + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Skillset or the result of cls(response) + :rtype: ~search_service_client.models.Skillset + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Skillset"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(skillset, 'Skillset') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('Skillset', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/skillsets'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_synonym_maps_operations_async.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_synonym_maps_operations_async.py new file mode 100644 index 000000000000..445c1f96f0b4 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/aio/operations_async/_synonym_maps_operations_async.py @@ -0,0 +1,385 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class SynonymMapsOperations: + """SynonymMapsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~search_service_client.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def create_or_update( + self, + synonym_map_name: str, + synonym_map: "models.SynonymMap", + request_options: Optional["models.RequestOptions"] = None, + access_condition: Optional["models.AccessCondition"] = None, + **kwargs + ) -> "models.SynonymMap": + """Creates a new synonym map or updates a synonym map if it already exists. + + :param synonym_map_name: The name of the synonym map to create or update. + :type synonym_map_name: str + :param synonym_map: The definition of the synonym map to create or update. + :type synonym_map: ~search_service_client.models.SynonymMap + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SynonymMap or the result of cls(response) + :rtype: ~search_service_client.models.SynonymMap or ~search_service_client.models.SynonymMap + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SynonymMap"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + prefer = "return=representation" + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'synonymMapName': self._serialize.url("synonym_map_name", synonym_map_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + header_parameters['Prefer'] = self._serialize.header("prefer", prefer, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(synonym_map, 'SynonymMap') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('SynonymMap', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('SynonymMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/synonymmaps(\'{synonymMapName}\')'} + + async def delete( + self, + synonym_map_name: str, + request_options: Optional["models.RequestOptions"] = None, + access_condition: Optional["models.AccessCondition"] = None, + **kwargs + ) -> None: + """Deletes a synonym map. + + :param synonym_map_name: The name of the synonym map to delete. + :type synonym_map_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'synonymMapName': self._serialize.url("synonym_map_name", synonym_map_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204, 404]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/synonymmaps(\'{synonymMapName}\')'} + + async def get( + self, + synonym_map_name: str, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.SynonymMap": + """Retrieves a synonym map definition. + + :param synonym_map_name: The name of the synonym map to retrieve. + :type synonym_map_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SynonymMap or the result of cls(response) + :rtype: ~search_service_client.models.SynonymMap + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SynonymMap"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'synonymMapName': self._serialize.url("synonym_map_name", synonym_map_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('SynonymMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/synonymmaps(\'{synonymMapName}\')'} + + async def list( + self, + select: Optional[str] = None, + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.ListSynonymMapsResult": + """Lists all synonym maps available for a search service. + + :param select: Selects which top-level properties of the synonym maps to retrieve. Specified as + a comma-separated list of JSON property names, or '*' for all properties. The default is all + properties. + :type select: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ListSynonymMapsResult or the result of cls(response) + :rtype: ~search_service_client.models.ListSynonymMapsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ListSynonymMapsResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.list.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if select is not None: + query_parameters['$select'] = self._serialize.query("select", select, 'str') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('ListSynonymMapsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/synonymmaps'} + + async def create( + self, + synonym_map: "models.SynonymMap", + request_options: Optional["models.RequestOptions"] = None, + **kwargs + ) -> "models.SynonymMap": + """Creates a new synonym map. + + :param synonym_map: The definition of the synonym map to create. + :type synonym_map: ~search_service_client.models.SynonymMap + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SynonymMap or the result of cls(response) + :rtype: ~search_service_client.models.SynonymMap + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SynonymMap"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(synonym_map, 'SynonymMap') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('SynonymMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/synonymmaps'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/models/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/models/__init__.py new file mode 100644 index 000000000000..9e8de4e9d799 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/models/__init__.py @@ -0,0 +1,430 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +try: + from ._models_py3 import AccessCondition + from ._models_py3 import AnalyzeRequest + from ._models_py3 import AnalyzeResult + from ._models_py3 import Analyzer + from ._models_py3 import AsciiFoldingTokenFilter + from ._models_py3 import AzureActiveDirectoryApplicationCredentials + from ._models_py3 import CharFilter + from ._models_py3 import CjkBigramTokenFilter + from ._models_py3 import ClassicTokenizer + from ._models_py3 import CognitiveServicesAccount + from ._models_py3 import CognitiveServicesAccountKey + from ._models_py3 import CommonGramTokenFilter + from ._models_py3 import ConditionalSkill + from ._models_py3 import CorsOptions + from ._models_py3 import CustomAnalyzer + from ._models_py3 import DataChangeDetectionPolicy + from ._models_py3 import DataContainer + from ._models_py3 import DataDeletionDetectionPolicy + from ._models_py3 import DataSource + from ._models_py3 import DataSourceCredentials + from ._models_py3 import DefaultCognitiveServicesAccount + from ._models_py3 import DictionaryDecompounderTokenFilter + from ._models_py3 import DistanceScoringFunction + from ._models_py3 import DistanceScoringParameters + from ._models_py3 import EdgeNGramTokenFilter + from ._models_py3 import EdgeNGramTokenFilterV2 + from ._models_py3 import EdgeNGramTokenizer + from ._models_py3 import ElisionTokenFilter + from ._models_py3 import EncryptionKey + from ._models_py3 import EntityRecognitionSkill + from ._models_py3 import Field + from ._models_py3 import FieldMapping + from ._models_py3 import FieldMappingFunction + from ._models_py3 import FreshnessScoringFunction + from ._models_py3 import FreshnessScoringParameters + from ._models_py3 import GetIndexStatisticsResult + from ._models_py3 import HighWaterMarkChangeDetectionPolicy + from ._models_py3 import ImageAnalysisSkill + from ._models_py3 import Index + from ._models_py3 import Indexer + from ._models_py3 import IndexerExecutionInfo + from ._models_py3 import IndexerExecutionResult + from ._models_py3 import IndexerLimits + from ._models_py3 import IndexingParameters + from ._models_py3 import IndexingSchedule + from ._models_py3 import InputFieldMappingEntry + from ._models_py3 import ItemError + from ._models_py3 import ItemWarning + from ._models_py3 import KeepTokenFilter + from ._models_py3 import KeyPhraseExtractionSkill + from ._models_py3 import KeywordMarkerTokenFilter + from ._models_py3 import KeywordTokenizer + from ._models_py3 import KeywordTokenizerV2 + from ._models_py3 import LanguageDetectionSkill + from ._models_py3 import LengthTokenFilter + from ._models_py3 import LimitTokenFilter + from ._models_py3 import ListDataSourcesResult + from ._models_py3 import ListIndexersResult + from ._models_py3 import ListIndexesResult + from ._models_py3 import ListSkillsetsResult + from ._models_py3 import ListSynonymMapsResult + from ._models_py3 import MagnitudeScoringFunction + from ._models_py3 import MagnitudeScoringParameters + from ._models_py3 import MappingCharFilter + from ._models_py3 import MergeSkill + from ._models_py3 import MicrosoftLanguageStemmingTokenizer + from ._models_py3 import MicrosoftLanguageTokenizer + from ._models_py3 import NGramTokenFilter + from ._models_py3 import NGramTokenFilterV2 + from ._models_py3 import NGramTokenizer + from ._models_py3 import OcrSkill + from ._models_py3 import OutputFieldMappingEntry + from ._models_py3 import PathHierarchyTokenizerV2 + from ._models_py3 import PatternAnalyzer + from ._models_py3 import PatternCaptureTokenFilter + from ._models_py3 import PatternReplaceCharFilter + from ._models_py3 import PatternReplaceTokenFilter + from ._models_py3 import PatternTokenizer + from ._models_py3 import PhoneticTokenFilter + from ._models_py3 import RequestOptions + from ._models_py3 import ResourceCounter + from ._models_py3 import ScoringFunction + from ._models_py3 import ScoringProfile + from ._models_py3 import SearchError + from ._models_py3 import SentimentSkill + from ._models_py3 import ServiceCounters + from ._models_py3 import ServiceLimits + from ._models_py3 import ServiceStatistics + from ._models_py3 import ShaperSkill + from ._models_py3 import ShingleTokenFilter + from ._models_py3 import Skill + from ._models_py3 import Skillset + from ._models_py3 import SnowballTokenFilter + from ._models_py3 import SoftDeleteColumnDeletionDetectionPolicy + from ._models_py3 import SplitSkill + from ._models_py3 import SqlIntegratedChangeTrackingPolicy + from ._models_py3 import StandardAnalyzer + from ._models_py3 import StandardTokenizer + from ._models_py3 import StandardTokenizerV2 + from ._models_py3 import StemmerOverrideTokenFilter + from ._models_py3 import StemmerTokenFilter + from ._models_py3 import StopAnalyzer + from ._models_py3 import StopwordsTokenFilter + from ._models_py3 import Suggester + from ._models_py3 import SynonymMap + from ._models_py3 import SynonymTokenFilter + from ._models_py3 import TagScoringFunction + from ._models_py3 import TagScoringParameters + from ._models_py3 import TextTranslationSkill + from ._models_py3 import TextWeights + from ._models_py3 import TokenFilter + from ._models_py3 import TokenInfo + from ._models_py3 import Tokenizer + from ._models_py3 import TruncateTokenFilter + from ._models_py3 import UaxUrlEmailTokenizer + from ._models_py3 import UniqueTokenFilter + from ._models_py3 import WebApiSkill + from ._models_py3 import WordDelimiterTokenFilter +except (SyntaxError, ImportError): + from ._models import AccessCondition # type: ignore + from ._models import AnalyzeRequest # type: ignore + from ._models import AnalyzeResult # type: ignore + from ._models import Analyzer # type: ignore + from ._models import AsciiFoldingTokenFilter # type: ignore + from ._models import AzureActiveDirectoryApplicationCredentials # type: ignore + from ._models import CharFilter # type: ignore + from ._models import CjkBigramTokenFilter # type: ignore + from ._models import ClassicTokenizer # type: ignore + from ._models import CognitiveServicesAccount # type: ignore + from ._models import CognitiveServicesAccountKey # type: ignore + from ._models import CommonGramTokenFilter # type: ignore + from ._models import ConditionalSkill # type: ignore + from ._models import CorsOptions # type: ignore + from ._models import CustomAnalyzer # type: ignore + from ._models import DataChangeDetectionPolicy # type: ignore + from ._models import DataContainer # type: ignore + from ._models import DataDeletionDetectionPolicy # type: ignore + from ._models import DataSource # type: ignore + from ._models import DataSourceCredentials # type: ignore + from ._models import DefaultCognitiveServicesAccount # type: ignore + from ._models import DictionaryDecompounderTokenFilter # type: ignore + from ._models import DistanceScoringFunction # type: ignore + from ._models import DistanceScoringParameters # type: ignore + from ._models import EdgeNGramTokenFilter # type: ignore + from ._models import EdgeNGramTokenFilterV2 # type: ignore + from ._models import EdgeNGramTokenizer # type: ignore + from ._models import ElisionTokenFilter # type: ignore + from ._models import EncryptionKey # type: ignore + from ._models import EntityRecognitionSkill # type: ignore + from ._models import Field # type: ignore + from ._models import FieldMapping # type: ignore + from ._models import FieldMappingFunction # type: ignore + from ._models import FreshnessScoringFunction # type: ignore + from ._models import FreshnessScoringParameters # type: ignore + from ._models import GetIndexStatisticsResult # type: ignore + from ._models import HighWaterMarkChangeDetectionPolicy # type: ignore + from ._models import ImageAnalysisSkill # type: ignore + from ._models import Index # type: ignore + from ._models import Indexer # type: ignore + from ._models import IndexerExecutionInfo # type: ignore + from ._models import IndexerExecutionResult # type: ignore + from ._models import IndexerLimits # type: ignore + from ._models import IndexingParameters # type: ignore + from ._models import IndexingSchedule # type: ignore + from ._models import InputFieldMappingEntry # type: ignore + from ._models import ItemError # type: ignore + from ._models import ItemWarning # type: ignore + from ._models import KeepTokenFilter # type: ignore + from ._models import KeyPhraseExtractionSkill # type: ignore + from ._models import KeywordMarkerTokenFilter # type: ignore + from ._models import KeywordTokenizer # type: ignore + from ._models import KeywordTokenizerV2 # type: ignore + from ._models import LanguageDetectionSkill # type: ignore + from ._models import LengthTokenFilter # type: ignore + from ._models import LimitTokenFilter # type: ignore + from ._models import ListDataSourcesResult # type: ignore + from ._models import ListIndexersResult # type: ignore + from ._models import ListIndexesResult # type: ignore + from ._models import ListSkillsetsResult # type: ignore + from ._models import ListSynonymMapsResult # type: ignore + from ._models import MagnitudeScoringFunction # type: ignore + from ._models import MagnitudeScoringParameters # type: ignore + from ._models import MappingCharFilter # type: ignore + from ._models import MergeSkill # type: ignore + from ._models import MicrosoftLanguageStemmingTokenizer # type: ignore + from ._models import MicrosoftLanguageTokenizer # type: ignore + from ._models import NGramTokenFilter # type: ignore + from ._models import NGramTokenFilterV2 # type: ignore + from ._models import NGramTokenizer # type: ignore + from ._models import OcrSkill # type: ignore + from ._models import OutputFieldMappingEntry # type: ignore + from ._models import PathHierarchyTokenizerV2 # type: ignore + from ._models import PatternAnalyzer # type: ignore + from ._models import PatternCaptureTokenFilter # type: ignore + from ._models import PatternReplaceCharFilter # type: ignore + from ._models import PatternReplaceTokenFilter # type: ignore + from ._models import PatternTokenizer # type: ignore + from ._models import PhoneticTokenFilter # type: ignore + from ._models import RequestOptions # type: ignore + from ._models import ResourceCounter # type: ignore + from ._models import ScoringFunction # type: ignore + from ._models import ScoringProfile # type: ignore + from ._models import SearchError # type: ignore + from ._models import SentimentSkill # type: ignore + from ._models import ServiceCounters # type: ignore + from ._models import ServiceLimits # type: ignore + from ._models import ServiceStatistics # type: ignore + from ._models import ShaperSkill # type: ignore + from ._models import ShingleTokenFilter # type: ignore + from ._models import Skill # type: ignore + from ._models import Skillset # type: ignore + from ._models import SnowballTokenFilter # type: ignore + from ._models import SoftDeleteColumnDeletionDetectionPolicy # type: ignore + from ._models import SplitSkill # type: ignore + from ._models import SqlIntegratedChangeTrackingPolicy # type: ignore + from ._models import StandardAnalyzer # type: ignore + from ._models import StandardTokenizer # type: ignore + from ._models import StandardTokenizerV2 # type: ignore + from ._models import StemmerOverrideTokenFilter # type: ignore + from ._models import StemmerTokenFilter # type: ignore + from ._models import StopAnalyzer # type: ignore + from ._models import StopwordsTokenFilter # type: ignore + from ._models import Suggester # type: ignore + from ._models import SynonymMap # type: ignore + from ._models import SynonymTokenFilter # type: ignore + from ._models import TagScoringFunction # type: ignore + from ._models import TagScoringParameters # type: ignore + from ._models import TextTranslationSkill # type: ignore + from ._models import TextWeights # type: ignore + from ._models import TokenFilter # type: ignore + from ._models import TokenInfo # type: ignore + from ._models import Tokenizer # type: ignore + from ._models import TruncateTokenFilter # type: ignore + from ._models import UaxUrlEmailTokenizer # type: ignore + from ._models import UniqueTokenFilter # type: ignore + from ._models import WebApiSkill # type: ignore + from ._models import WordDelimiterTokenFilter # type: ignore + +from ._search_service_client_enums import ( + AnalyzerName, + CjkBigramTokenFilterScripts, + DataSourceType, + DataType, + EdgeNGramTokenFilterSide, + EntityCategory, + EntityRecognitionSkillLanguage, + ImageAnalysisSkillLanguage, + ImageDetail, + IndexerExecutionStatus, + IndexerStatus, + KeyPhraseExtractionSkillLanguage, + MicrosoftStemmingTokenizerLanguage, + MicrosoftTokenizerLanguage, + OcrSkillLanguage, + PhoneticEncoder, + RegexFlags, + ScoringFunctionAggregation, + ScoringFunctionInterpolation, + SentimentSkillLanguage, + SnowballTokenFilterLanguage, + SplitSkillLanguage, + StemmerTokenFilterLanguage, + StopwordsList, + TextExtractionAlgorithm, + TextSplitMode, + TextTranslationSkillLanguage, + TokenCharacterKind, + TokenFilterName, + TokenizerName, + VisualFeature, +) + +__all__ = [ + 'AccessCondition', + 'AnalyzeRequest', + 'AnalyzeResult', + 'Analyzer', + 'AsciiFoldingTokenFilter', + 'AzureActiveDirectoryApplicationCredentials', + 'CharFilter', + 'CjkBigramTokenFilter', + 'ClassicTokenizer', + 'CognitiveServicesAccount', + 'CognitiveServicesAccountKey', + 'CommonGramTokenFilter', + 'ConditionalSkill', + 'CorsOptions', + 'CustomAnalyzer', + 'DataChangeDetectionPolicy', + 'DataContainer', + 'DataDeletionDetectionPolicy', + 'DataSource', + 'DataSourceCredentials', + 'DefaultCognitiveServicesAccount', + 'DictionaryDecompounderTokenFilter', + 'DistanceScoringFunction', + 'DistanceScoringParameters', + 'EdgeNGramTokenFilter', + 'EdgeNGramTokenFilterV2', + 'EdgeNGramTokenizer', + 'ElisionTokenFilter', + 'EncryptionKey', + 'EntityRecognitionSkill', + 'Field', + 'FieldMapping', + 'FieldMappingFunction', + 'FreshnessScoringFunction', + 'FreshnessScoringParameters', + 'GetIndexStatisticsResult', + 'HighWaterMarkChangeDetectionPolicy', + 'ImageAnalysisSkill', + 'Index', + 'Indexer', + 'IndexerExecutionInfo', + 'IndexerExecutionResult', + 'IndexerLimits', + 'IndexingParameters', + 'IndexingSchedule', + 'InputFieldMappingEntry', + 'ItemError', + 'ItemWarning', + 'KeepTokenFilter', + 'KeyPhraseExtractionSkill', + 'KeywordMarkerTokenFilter', + 'KeywordTokenizer', + 'KeywordTokenizerV2', + 'LanguageDetectionSkill', + 'LengthTokenFilter', + 'LimitTokenFilter', + 'ListDataSourcesResult', + 'ListIndexersResult', + 'ListIndexesResult', + 'ListSkillsetsResult', + 'ListSynonymMapsResult', + 'MagnitudeScoringFunction', + 'MagnitudeScoringParameters', + 'MappingCharFilter', + 'MergeSkill', + 'MicrosoftLanguageStemmingTokenizer', + 'MicrosoftLanguageTokenizer', + 'NGramTokenFilter', + 'NGramTokenFilterV2', + 'NGramTokenizer', + 'OcrSkill', + 'OutputFieldMappingEntry', + 'PathHierarchyTokenizerV2', + 'PatternAnalyzer', + 'PatternCaptureTokenFilter', + 'PatternReplaceCharFilter', + 'PatternReplaceTokenFilter', + 'PatternTokenizer', + 'PhoneticTokenFilter', + 'RequestOptions', + 'ResourceCounter', + 'ScoringFunction', + 'ScoringProfile', + 'SearchError', + 'SentimentSkill', + 'ServiceCounters', + 'ServiceLimits', + 'ServiceStatistics', + 'ShaperSkill', + 'ShingleTokenFilter', + 'Skill', + 'Skillset', + 'SnowballTokenFilter', + 'SoftDeleteColumnDeletionDetectionPolicy', + 'SplitSkill', + 'SqlIntegratedChangeTrackingPolicy', + 'StandardAnalyzer', + 'StandardTokenizer', + 'StandardTokenizerV2', + 'StemmerOverrideTokenFilter', + 'StemmerTokenFilter', + 'StopAnalyzer', + 'StopwordsTokenFilter', + 'Suggester', + 'SynonymMap', + 'SynonymTokenFilter', + 'TagScoringFunction', + 'TagScoringParameters', + 'TextTranslationSkill', + 'TextWeights', + 'TokenFilter', + 'TokenInfo', + 'Tokenizer', + 'TruncateTokenFilter', + 'UaxUrlEmailTokenizer', + 'UniqueTokenFilter', + 'WebApiSkill', + 'WordDelimiterTokenFilter', + 'AnalyzerName', + 'CjkBigramTokenFilterScripts', + 'DataSourceType', + 'DataType', + 'EdgeNGramTokenFilterSide', + 'EntityCategory', + 'EntityRecognitionSkillLanguage', + 'ImageAnalysisSkillLanguage', + 'ImageDetail', + 'IndexerExecutionStatus', + 'IndexerStatus', + 'KeyPhraseExtractionSkillLanguage', + 'MicrosoftStemmingTokenizerLanguage', + 'MicrosoftTokenizerLanguage', + 'OcrSkillLanguage', + 'PhoneticEncoder', + 'RegexFlags', + 'ScoringFunctionAggregation', + 'ScoringFunctionInterpolation', + 'SentimentSkillLanguage', + 'SnowballTokenFilterLanguage', + 'SplitSkillLanguage', + 'StemmerTokenFilterLanguage', + 'StopwordsList', + 'TextExtractionAlgorithm', + 'TextSplitMode', + 'TextTranslationSkillLanguage', + 'TokenCharacterKind', + 'TokenFilterName', + 'TokenizerName', + 'VisualFeature', +] diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/models/_models.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/models/_models.py new file mode 100644 index 000000000000..bcdd12e57879 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/models/_models.py @@ -0,0 +1,5186 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.core.exceptions import HttpResponseError +import msrest.serialization + + +class AccessCondition(msrest.serialization.Model): + """Parameter group. + + :param if_match: Defines the If-Match condition. The operation will be performed only if the + ETag on the server matches this value. + :type if_match: str + :param if_none_match: Defines the If-None-Match condition. The operation will be performed only + if the ETag on the server does not match this value. + :type if_none_match: str + """ + + _attribute_map = { + 'if_match': {'key': 'If-Match', 'type': 'str'}, + 'if_none_match': {'key': 'If-None-Match', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AccessCondition, self).__init__(**kwargs) + self.if_match = kwargs.get('if_match', None) + self.if_none_match = kwargs.get('if_none_match', None) + + +class Analyzer(msrest.serialization.Model): + """Abstract base class for analyzers. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: CustomAnalyzer, PatternAnalyzer, StandardAnalyzer, StopAnalyzer. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the analyzer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.CustomAnalyzer': 'CustomAnalyzer', '#Microsoft.Azure.Search.PatternAnalyzer': 'PatternAnalyzer', '#Microsoft.Azure.Search.StandardAnalyzer': 'StandardAnalyzer', '#Microsoft.Azure.Search.StopAnalyzer': 'StopAnalyzer'} + } + + def __init__( + self, + **kwargs + ): + super(Analyzer, self).__init__(**kwargs) + self.odata_type = None + self.name = kwargs.get('name', None) + + +class AnalyzeRequest(msrest.serialization.Model): + """Specifies some text and analysis components used to break that text into tokens. + + All required parameters must be populated in order to send to Azure. + + :param text: Required. The text to break into tokens. + :type text: str + :param analyzer: The name of the analyzer to use to break the given text. If this parameter is + not specified, you must specify a tokenizer instead. The tokenizer and analyzer parameters are + mutually exclusive. Possible values include: 'ar.microsoft', 'ar.lucene', 'hy.lucene', + 'bn.microsoft', 'eu.lucene', 'bg.microsoft', 'bg.lucene', 'ca.microsoft', 'ca.lucene', 'zh- + Hans.microsoft', 'zh-Hans.lucene', 'zh-Hant.microsoft', 'zh-Hant.lucene', 'hr.microsoft', + 'cs.microsoft', 'cs.lucene', 'da.microsoft', 'da.lucene', 'nl.microsoft', 'nl.lucene', + 'en.microsoft', 'en.lucene', 'et.microsoft', 'fi.microsoft', 'fi.lucene', 'fr.microsoft', + 'fr.lucene', 'gl.lucene', 'de.microsoft', 'de.lucene', 'el.microsoft', 'el.lucene', + 'gu.microsoft', 'he.microsoft', 'hi.microsoft', 'hi.lucene', 'hu.microsoft', 'hu.lucene', + 'is.microsoft', 'id.microsoft', 'id.lucene', 'ga.lucene', 'it.microsoft', 'it.lucene', + 'ja.microsoft', 'ja.lucene', 'kn.microsoft', 'ko.microsoft', 'ko.lucene', 'lv.microsoft', + 'lv.lucene', 'lt.microsoft', 'ml.microsoft', 'ms.microsoft', 'mr.microsoft', 'nb.microsoft', + 'no.lucene', 'fa.lucene', 'pl.microsoft', 'pl.lucene', 'pt-BR.microsoft', 'pt-BR.lucene', 'pt- + PT.microsoft', 'pt-PT.lucene', 'pa.microsoft', 'ro.microsoft', 'ro.lucene', 'ru.microsoft', + 'ru.lucene', 'sr-cyrillic.microsoft', 'sr-latin.microsoft', 'sk.microsoft', 'sl.microsoft', + 'es.microsoft', 'es.lucene', 'sv.microsoft', 'sv.lucene', 'ta.microsoft', 'te.microsoft', + 'th.microsoft', 'th.lucene', 'tr.microsoft', 'tr.lucene', 'uk.microsoft', 'ur.microsoft', + 'vi.microsoft', 'standard.lucene', 'standardasciifolding.lucene', 'keyword', 'pattern', + 'simple', 'stop', 'whitespace'. + :type analyzer: str or ~search_service_client.models.AnalyzerName + :param tokenizer: The name of the tokenizer to use to break the given text. If this parameter + is not specified, you must specify an analyzer instead. The tokenizer and analyzer parameters + are mutually exclusive. Possible values include: 'classic', 'edgeNGram', 'keyword_v2', + 'letter', 'lowercase', 'microsoft_language_tokenizer', 'microsoft_language_stemming_tokenizer', + 'nGram', 'path_hierarchy_v2', 'pattern', 'standard_v2', 'uax_url_email', 'whitespace'. + :type tokenizer: str or ~search_service_client.models.TokenizerName + :param token_filters: An optional list of token filters to use when breaking the given text. + This parameter can only be set when using the tokenizer parameter. + :type token_filters: list[str or ~search_service_client.models.TokenFilterName] + :param char_filters: An optional list of character filters to use when breaking the given text. + This parameter can only be set when using the tokenizer parameter. + :type char_filters: list[str] + """ + + _validation = { + 'text': {'required': True}, + } + + _attribute_map = { + 'text': {'key': 'text', 'type': 'str'}, + 'analyzer': {'key': 'analyzer', 'type': 'str'}, + 'tokenizer': {'key': 'tokenizer', 'type': 'str'}, + 'token_filters': {'key': 'tokenFilters', 'type': '[str]'}, + 'char_filters': {'key': 'charFilters', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(AnalyzeRequest, self).__init__(**kwargs) + self.text = kwargs.get('text', None) + self.analyzer = kwargs.get('analyzer', None) + self.tokenizer = kwargs.get('tokenizer', None) + self.token_filters = kwargs.get('token_filters', None) + self.char_filters = kwargs.get('char_filters', None) + + +class AnalyzeResult(msrest.serialization.Model): + """The result of testing an analyzer on text. + + All required parameters must be populated in order to send to Azure. + + :param tokens: Required. The list of tokens returned by the analyzer specified in the request. + :type tokens: list[~search_service_client.models.TokenInfo] + """ + + _validation = { + 'tokens': {'required': True}, + } + + _attribute_map = { + 'tokens': {'key': 'tokens', 'type': '[TokenInfo]'}, + } + + def __init__( + self, + **kwargs + ): + super(AnalyzeResult, self).__init__(**kwargs) + self.tokens = kwargs.get('tokens', None) + + +class TokenFilter(msrest.serialization.Model): + """Abstract base class for token filters. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: AsciiFoldingTokenFilter, CjkBigramTokenFilter, CommonGramTokenFilter, DictionaryDecompounderTokenFilter, EdgeNGramTokenFilter, EdgeNGramTokenFilterV2, ElisionTokenFilter, KeepTokenFilter, KeywordMarkerTokenFilter, LengthTokenFilter, LimitTokenFilter, NGramTokenFilter, NGramTokenFilterV2, PatternCaptureTokenFilter, PatternReplaceTokenFilter, PhoneticTokenFilter, ShingleTokenFilter, SnowballTokenFilter, StemmerOverrideTokenFilter, StemmerTokenFilter, StopwordsTokenFilter, SynonymTokenFilter, TruncateTokenFilter, UniqueTokenFilter, WordDelimiterTokenFilter. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.AsciiFoldingTokenFilter': 'AsciiFoldingTokenFilter', '#Microsoft.Azure.Search.CjkBigramTokenFilter': 'CjkBigramTokenFilter', '#Microsoft.Azure.Search.CommonGramTokenFilter': 'CommonGramTokenFilter', '#Microsoft.Azure.Search.DictionaryDecompounderTokenFilter': 'DictionaryDecompounderTokenFilter', '#Microsoft.Azure.Search.EdgeNGramTokenFilter': 'EdgeNGramTokenFilter', '#Microsoft.Azure.Search.EdgeNGramTokenFilterV2': 'EdgeNGramTokenFilterV2', '#Microsoft.Azure.Search.ElisionTokenFilter': 'ElisionTokenFilter', '#Microsoft.Azure.Search.KeepTokenFilter': 'KeepTokenFilter', '#Microsoft.Azure.Search.KeywordMarkerTokenFilter': 'KeywordMarkerTokenFilter', '#Microsoft.Azure.Search.LengthTokenFilter': 'LengthTokenFilter', '#Microsoft.Azure.Search.LimitTokenFilter': 'LimitTokenFilter', '#Microsoft.Azure.Search.NGramTokenFilter': 'NGramTokenFilter', '#Microsoft.Azure.Search.NGramTokenFilterV2': 'NGramTokenFilterV2', '#Microsoft.Azure.Search.PatternCaptureTokenFilter': 'PatternCaptureTokenFilter', '#Microsoft.Azure.Search.PatternReplaceTokenFilter': 'PatternReplaceTokenFilter', '#Microsoft.Azure.Search.PhoneticTokenFilter': 'PhoneticTokenFilter', '#Microsoft.Azure.Search.ShingleTokenFilter': 'ShingleTokenFilter', '#Microsoft.Azure.Search.SnowballTokenFilter': 'SnowballTokenFilter', '#Microsoft.Azure.Search.StemmerOverrideTokenFilter': 'StemmerOverrideTokenFilter', '#Microsoft.Azure.Search.StemmerTokenFilter': 'StemmerTokenFilter', '#Microsoft.Azure.Search.StopwordsTokenFilter': 'StopwordsTokenFilter', '#Microsoft.Azure.Search.SynonymTokenFilter': 'SynonymTokenFilter', '#Microsoft.Azure.Search.TruncateTokenFilter': 'TruncateTokenFilter', '#Microsoft.Azure.Search.UniqueTokenFilter': 'UniqueTokenFilter', '#Microsoft.Azure.Search.WordDelimiterTokenFilter': 'WordDelimiterTokenFilter'} + } + + def __init__( + self, + **kwargs + ): + super(TokenFilter, self).__init__(**kwargs) + self.odata_type = None + self.name = kwargs.get('name', None) + + +class AsciiFoldingTokenFilter(TokenFilter): + """Converts alphabetic, numeric, and symbolic Unicode characters which are not in the first 127 ASCII characters (the "Basic Latin" Unicode block) into their ASCII equivalents, if such equivalents exist. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param preserve_original: A value indicating whether the original token will be kept. Default + is false. + :type preserve_original: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'preserve_original': {'key': 'preserveOriginal', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(AsciiFoldingTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.AsciiFoldingTokenFilter' + self.preserve_original = kwargs.get('preserve_original', False) + + +class AzureActiveDirectoryApplicationCredentials(msrest.serialization.Model): + """Credentials of a registered application created for your search service, used for authenticated access to the encryption keys stored in Azure Key Vault. + + All required parameters must be populated in order to send to Azure. + + :param application_id: Required. An AAD Application ID that was granted the required access + permissions to the Azure Key Vault that is to be used when encrypting your data at rest. The + Application ID should not be confused with the Object ID for your AAD Application. + :type application_id: str + :param application_secret: The authentication key of the specified AAD application. + :type application_secret: str + """ + + _validation = { + 'application_id': {'required': True}, + } + + _attribute_map = { + 'application_id': {'key': 'applicationId', 'type': 'str'}, + 'application_secret': {'key': 'applicationSecret', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AzureActiveDirectoryApplicationCredentials, self).__init__(**kwargs) + self.application_id = kwargs.get('application_id', None) + self.application_secret = kwargs.get('application_secret', None) + + +class CharFilter(msrest.serialization.Model): + """Abstract base class for character filters. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: MappingCharFilter, PatternReplaceCharFilter. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the char filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.MappingCharFilter': 'MappingCharFilter', '#Microsoft.Azure.Search.PatternReplaceCharFilter': 'PatternReplaceCharFilter'} + } + + def __init__( + self, + **kwargs + ): + super(CharFilter, self).__init__(**kwargs) + self.odata_type = None + self.name = kwargs.get('name', None) + + +class CjkBigramTokenFilter(TokenFilter): + """Forms bigrams of CJK terms that are generated from StandardTokenizer. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param ignore_scripts: The scripts to ignore. + :type ignore_scripts: list[str or ~search_service_client.models.CjkBigramTokenFilterScripts] + :param output_unigrams: A value indicating whether to output both unigrams and bigrams (if + true), or just bigrams (if false). Default is false. + :type output_unigrams: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'ignore_scripts': {'key': 'ignoreScripts', 'type': '[str]'}, + 'output_unigrams': {'key': 'outputUnigrams', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(CjkBigramTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.CjkBigramTokenFilter' + self.ignore_scripts = kwargs.get('ignore_scripts', None) + self.output_unigrams = kwargs.get('output_unigrams', False) + + +class Tokenizer(msrest.serialization.Model): + """Abstract base class for tokenizers. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: ClassicTokenizer, EdgeNGramTokenizer, KeywordTokenizer, KeywordTokenizerV2, MicrosoftLanguageStemmingTokenizer, MicrosoftLanguageTokenizer, NGramTokenizer, PathHierarchyTokenizerV2, PatternTokenizer, StandardTokenizer, StandardTokenizerV2, UaxUrlEmailTokenizer. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.ClassicTokenizer': 'ClassicTokenizer', '#Microsoft.Azure.Search.EdgeNGramTokenizer': 'EdgeNGramTokenizer', '#Microsoft.Azure.Search.KeywordTokenizer': 'KeywordTokenizer', '#Microsoft.Azure.Search.KeywordTokenizerV2': 'KeywordTokenizerV2', '#Microsoft.Azure.Search.MicrosoftLanguageStemmingTokenizer': 'MicrosoftLanguageStemmingTokenizer', '#Microsoft.Azure.Search.MicrosoftLanguageTokenizer': 'MicrosoftLanguageTokenizer', '#Microsoft.Azure.Search.NGramTokenizer': 'NGramTokenizer', '#Microsoft.Azure.Search.PathHierarchyTokenizerV2': 'PathHierarchyTokenizerV2', '#Microsoft.Azure.Search.PatternTokenizer': 'PatternTokenizer', '#Microsoft.Azure.Search.StandardTokenizer': 'StandardTokenizer', '#Microsoft.Azure.Search.StandardTokenizerV2': 'StandardTokenizerV2', '#Microsoft.Azure.Search.UaxUrlEmailTokenizer': 'UaxUrlEmailTokenizer'} + } + + def __init__( + self, + **kwargs + ): + super(Tokenizer, self).__init__(**kwargs) + self.odata_type = None + self.name = kwargs.get('name', None) + + +class ClassicTokenizer(Tokenizer): + """Grammar-based tokenizer that is suitable for processing most European-language documents. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Default is 255. Tokens longer than the + maximum length are split. The maximum token length that can be used is 300 characters. + :type max_token_length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(ClassicTokenizer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.ClassicTokenizer' + self.max_token_length = kwargs.get('max_token_length', 255) + + +class CognitiveServicesAccount(msrest.serialization.Model): + """Abstract base class for describing any cognitive service resource attached to the skillset. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: CognitiveServicesAccountKey, DefaultCognitiveServicesAccount. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param description: + :type description: str + """ + + _validation = { + 'odata_type': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.CognitiveServicesByKey': 'CognitiveServicesAccountKey', '#Microsoft.Azure.Search.DefaultCognitiveServices': 'DefaultCognitiveServicesAccount'} + } + + def __init__( + self, + **kwargs + ): + super(CognitiveServicesAccount, self).__init__(**kwargs) + self.odata_type = None + self.description = kwargs.get('description', None) + + +class CognitiveServicesAccountKey(CognitiveServicesAccount): + """A cognitive service resource provisioned with a key that is attached to a skillset. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param description: + :type description: str + :param key: Required. + :type key: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'key': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'key': {'key': 'key', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(CognitiveServicesAccountKey, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.CognitiveServicesByKey' + self.key = kwargs.get('key', None) + + +class CommonGramTokenFilter(TokenFilter): + """Construct bigrams for frequently occurring terms while indexing. Single terms are still indexed too, with bigrams overlaid. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param common_words: Required. The set of common words. + :type common_words: list[str] + :param ignore_case: A value indicating whether common words matching will be case insensitive. + Default is false. + :type ignore_case: bool + :param use_query_mode: A value that indicates whether the token filter is in query mode. When + in query mode, the token filter generates bigrams and then removes common words and single + terms followed by a common word. Default is false. + :type use_query_mode: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'common_words': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'common_words': {'key': 'commonWords', 'type': '[str]'}, + 'ignore_case': {'key': 'ignoreCase', 'type': 'bool'}, + 'use_query_mode': {'key': 'queryMode', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(CommonGramTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.CommonGramTokenFilter' + self.common_words = kwargs.get('common_words', None) + self.ignore_case = kwargs.get('ignore_case', False) + self.use_query_mode = kwargs.get('use_query_mode', False) + + +class Skill(msrest.serialization.Model): + """Abstract base class for skills. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: WebApiSkill, EntityRecognitionSkill, KeyPhraseExtractionSkill, LanguageDetectionSkill, MergeSkill, SentimentSkill, SplitSkill, TextTranslationSkill, ConditionalSkill, ShaperSkill, ImageAnalysisSkill, OcrSkill. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Skills.Custom.WebApiSkill': 'WebApiSkill', '#Microsoft.Skills.Text.EntityRecognitionSkill': 'EntityRecognitionSkill', '#Microsoft.Skills.Text.KeyPhraseExtractionSkill': 'KeyPhraseExtractionSkill', '#Microsoft.Skills.Text.LanguageDetectionSkill': 'LanguageDetectionSkill', '#Microsoft.Skills.Text.MergeSkill': 'MergeSkill', '#Microsoft.Skills.Text.SentimentSkill': 'SentimentSkill', '#Microsoft.Skills.Text.SplitSkill': 'SplitSkill', '#Microsoft.Skills.Text.TranslationSkill': 'TextTranslationSkill', '#Microsoft.Skills.Util.ConditionalSkill': 'ConditionalSkill', '#Microsoft.Skills.Util.ShaperSkill': 'ShaperSkill', '#Microsoft.Skills.Vision.ImageAnalysisSkill': 'ImageAnalysisSkill', '#Microsoft.Skills.Vision.OcrSkill': 'OcrSkill'} + } + + def __init__( + self, + **kwargs + ): + super(Skill, self).__init__(**kwargs) + self.odata_type = None + self.name = kwargs.get('name', None) + self.description = kwargs.get('description', None) + self.context = kwargs.get('context', None) + self.inputs = kwargs.get('inputs', None) + self.outputs = kwargs.get('outputs', None) + + +class ConditionalSkill(Skill): + """A skill that enables scenarios that require a Boolean operation to determine the data to assign to an output. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + } + + def __init__( + self, + **kwargs + ): + super(ConditionalSkill, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Skills.Util.ConditionalSkill' + + +class CorsOptions(msrest.serialization.Model): + """Defines options to control Cross-Origin Resource Sharing (CORS) for an index. + + All required parameters must be populated in order to send to Azure. + + :param allowed_origins: Required. The list of origins from which JavaScript code will be + granted access to your index. Can contain a list of hosts of the form {protocol}://{fully- + qualified-domain-name}[:{port#}], or a single '*' to allow all origins (not recommended). + :type allowed_origins: list[str] + :param max_age_in_seconds: The duration for which browsers should cache CORS preflight + responses. Defaults to 5 minutes. + :type max_age_in_seconds: long + """ + + _validation = { + 'allowed_origins': {'required': True}, + } + + _attribute_map = { + 'allowed_origins': {'key': 'allowedOrigins', 'type': '[str]'}, + 'max_age_in_seconds': {'key': 'maxAgeInSeconds', 'type': 'long'}, + } + + def __init__( + self, + **kwargs + ): + super(CorsOptions, self).__init__(**kwargs) + self.allowed_origins = kwargs.get('allowed_origins', None) + self.max_age_in_seconds = kwargs.get('max_age_in_seconds', None) + + +class CustomAnalyzer(Analyzer): + """Allows you to take control over the process of converting text into indexable/searchable tokens. It's a user-defined configuration consisting of a single predefined tokenizer and one or more filters. The tokenizer is responsible for breaking text into tokens, and the filters for modifying tokens emitted by the tokenizer. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the analyzer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param tokenizer: Required. The name of the tokenizer to use to divide continuous text into a + sequence of tokens, such as breaking a sentence into words. Possible values include: 'classic', + 'edgeNGram', 'keyword_v2', 'letter', 'lowercase', 'microsoft_language_tokenizer', + 'microsoft_language_stemming_tokenizer', 'nGram', 'path_hierarchy_v2', 'pattern', + 'standard_v2', 'uax_url_email', 'whitespace'. + :type tokenizer: str or ~search_service_client.models.TokenizerName + :param token_filters: A list of token filters used to filter out or modify the tokens generated + by a tokenizer. For example, you can specify a lowercase filter that converts all characters to + lowercase. The filters are run in the order in which they are listed. + :type token_filters: list[str or ~search_service_client.models.TokenFilterName] + :param char_filters: A list of character filters used to prepare input text before it is + processed by the tokenizer. For instance, they can replace certain characters or symbols. The + filters are run in the order in which they are listed. + :type char_filters: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'tokenizer': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'tokenizer': {'key': 'tokenizer', 'type': 'str'}, + 'token_filters': {'key': 'tokenFilters', 'type': '[str]'}, + 'char_filters': {'key': 'charFilters', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(CustomAnalyzer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.CustomAnalyzer' + self.tokenizer = kwargs.get('tokenizer', None) + self.token_filters = kwargs.get('token_filters', None) + self.char_filters = kwargs.get('char_filters', None) + + +class DataChangeDetectionPolicy(msrest.serialization.Model): + """Abstract base class for data change detection policies. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: HighWaterMarkChangeDetectionPolicy, SqlIntegratedChangeTrackingPolicy. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + """ + + _validation = { + 'odata_type': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy': 'HighWaterMarkChangeDetectionPolicy', '#Microsoft.Azure.Search.SqlIntegratedChangeTrackingPolicy': 'SqlIntegratedChangeTrackingPolicy'} + } + + def __init__( + self, + **kwargs + ): + super(DataChangeDetectionPolicy, self).__init__(**kwargs) + self.odata_type = None + + +class DataContainer(msrest.serialization.Model): + """Represents information about the entity (such as Azure SQL table or CosmosDB collection) that will be indexed. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the table or view (for Azure SQL data source) or collection + (for CosmosDB data source) that will be indexed. + :type name: str + :param query: A query that is applied to this data container. The syntax and meaning of this + parameter is datasource-specific. Not supported by Azure SQL datasources. + :type query: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'query': {'key': 'query', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(DataContainer, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.query = kwargs.get('query', None) + + +class DataDeletionDetectionPolicy(msrest.serialization.Model): + """Abstract base class for data deletion detection policies. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: SoftDeleteColumnDeletionDetectionPolicy. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + """ + + _validation = { + 'odata_type': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy': 'SoftDeleteColumnDeletionDetectionPolicy'} + } + + def __init__( + self, + **kwargs + ): + super(DataDeletionDetectionPolicy, self).__init__(**kwargs) + self.odata_type = None + + +class DataSource(msrest.serialization.Model): + """Represents a datasource definition, which can be used to configure an indexer. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the datasource. + :type name: str + :param description: The description of the datasource. + :type description: str + :param type: Required. The type of the datasource. Possible values include: 'azuresql', + 'cosmosdb', 'azureblob', 'azuretable', 'mysql'. + :type type: str or ~search_service_client.models.DataSourceType + :param credentials: Required. Credentials for the datasource. + :type credentials: ~search_service_client.models.DataSourceCredentials + :param container: Required. The data container for the datasource. + :type container: ~search_service_client.models.DataContainer + :param data_change_detection_policy: The data change detection policy for the datasource. + :type data_change_detection_policy: ~search_service_client.models.DataChangeDetectionPolicy + :param data_deletion_detection_policy: The data deletion detection policy for the datasource. + :type data_deletion_detection_policy: ~search_service_client.models.DataDeletionDetectionPolicy + :param e_tag: The ETag of the DataSource. + :type e_tag: str + """ + + _validation = { + 'name': {'required': True}, + 'type': {'required': True}, + 'credentials': {'required': True}, + 'container': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'DataSourceCredentials'}, + 'container': {'key': 'container', 'type': 'DataContainer'}, + 'data_change_detection_policy': {'key': 'dataChangeDetectionPolicy', 'type': 'DataChangeDetectionPolicy'}, + 'data_deletion_detection_policy': {'key': 'dataDeletionDetectionPolicy', 'type': 'DataDeletionDetectionPolicy'}, + 'e_tag': {'key': '@odata\\.etag', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(DataSource, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.description = kwargs.get('description', None) + self.type = kwargs.get('type', None) + self.credentials = kwargs.get('credentials', None) + self.container = kwargs.get('container', None) + self.data_change_detection_policy = kwargs.get('data_change_detection_policy', None) + self.data_deletion_detection_policy = kwargs.get('data_deletion_detection_policy', None) + self.e_tag = kwargs.get('e_tag', None) + + +class DataSourceCredentials(msrest.serialization.Model): + """Represents credentials that can be used to connect to a datasource. + + :param connection_string: The connection string for the datasource. + :type connection_string: str + """ + + _attribute_map = { + 'connection_string': {'key': 'connectionString', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(DataSourceCredentials, self).__init__(**kwargs) + self.connection_string = kwargs.get('connection_string', None) + + +class DefaultCognitiveServicesAccount(CognitiveServicesAccount): + """An empty object that represents the default cognitive service resource for a skillset. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param description: + :type description: str + """ + + _validation = { + 'odata_type': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(DefaultCognitiveServicesAccount, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.DefaultCognitiveServices' + + +class DictionaryDecompounderTokenFilter(TokenFilter): + """Decomposes compound words found in many Germanic languages. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param word_list: Required. The list of words to match against. + :type word_list: list[str] + :param min_word_size: The minimum word size. Only words longer than this get processed. Default + is 5. Maximum is 300. + :type min_word_size: int + :param min_subword_size: The minimum subword size. Only subwords longer than this are + outputted. Default is 2. Maximum is 300. + :type min_subword_size: int + :param max_subword_size: The maximum subword size. Only subwords shorter than this are + outputted. Default is 15. Maximum is 300. + :type max_subword_size: int + :param only_longest_match: A value indicating whether to add only the longest matching subword + to the output. Default is false. + :type only_longest_match: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'word_list': {'required': True}, + 'min_word_size': {'maximum': 300}, + 'min_subword_size': {'maximum': 300}, + 'max_subword_size': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'word_list': {'key': 'wordList', 'type': '[str]'}, + 'min_word_size': {'key': 'minWordSize', 'type': 'int'}, + 'min_subword_size': {'key': 'minSubwordSize', 'type': 'int'}, + 'max_subword_size': {'key': 'maxSubwordSize', 'type': 'int'}, + 'only_longest_match': {'key': 'onlyLongestMatch', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(DictionaryDecompounderTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.DictionaryDecompounderTokenFilter' + self.word_list = kwargs.get('word_list', None) + self.min_word_size = kwargs.get('min_word_size', 5) + self.min_subword_size = kwargs.get('min_subword_size', 2) + self.max_subword_size = kwargs.get('max_subword_size', 15) + self.only_longest_match = kwargs.get('only_longest_match', False) + + +class ScoringFunction(msrest.serialization.Model): + """Abstract base class for functions that can modify document scores during ranking. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: DistanceScoringFunction, FreshnessScoringFunction, MagnitudeScoringFunction, TagScoringFunction. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. Constant filled by server. + :type type: str + :param field_name: Required. The name of the field used as input to the scoring function. + :type field_name: str + :param boost: Required. A multiplier for the raw score. Must be a positive number not equal to + 1.0. + :type boost: float + :param interpolation: A value indicating how boosting will be interpolated across document + scores; defaults to "Linear". Possible values include: 'linear', 'constant', 'quadratic', + 'logarithmic'. + :type interpolation: str or ~search_service_client.models.ScoringFunctionInterpolation + """ + + _validation = { + 'type': {'required': True}, + 'field_name': {'required': True}, + 'boost': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'field_name': {'key': 'fieldName', 'type': 'str'}, + 'boost': {'key': 'boost', 'type': 'float'}, + 'interpolation': {'key': 'interpolation', 'type': 'str'}, + } + + _subtype_map = { + 'type': {'distance': 'DistanceScoringFunction', 'freshness': 'FreshnessScoringFunction', 'magnitude': 'MagnitudeScoringFunction', 'tag': 'TagScoringFunction'} + } + + def __init__( + self, + **kwargs + ): + super(ScoringFunction, self).__init__(**kwargs) + self.type = None + self.field_name = kwargs.get('field_name', None) + self.boost = kwargs.get('boost', None) + self.interpolation = kwargs.get('interpolation', None) + + +class DistanceScoringFunction(ScoringFunction): + """Defines a function that boosts scores based on distance from a geographic location. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. Constant filled by server. + :type type: str + :param field_name: Required. The name of the field used as input to the scoring function. + :type field_name: str + :param boost: Required. A multiplier for the raw score. Must be a positive number not equal to + 1.0. + :type boost: float + :param interpolation: A value indicating how boosting will be interpolated across document + scores; defaults to "Linear". Possible values include: 'linear', 'constant', 'quadratic', + 'logarithmic'. + :type interpolation: str or ~search_service_client.models.ScoringFunctionInterpolation + :param parameters: Required. Parameter values for the distance scoring function. + :type parameters: ~search_service_client.models.DistanceScoringParameters + """ + + _validation = { + 'type': {'required': True}, + 'field_name': {'required': True}, + 'boost': {'required': True}, + 'parameters': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'field_name': {'key': 'fieldName', 'type': 'str'}, + 'boost': {'key': 'boost', 'type': 'float'}, + 'interpolation': {'key': 'interpolation', 'type': 'str'}, + 'parameters': {'key': 'distance', 'type': 'DistanceScoringParameters'}, + } + + def __init__( + self, + **kwargs + ): + super(DistanceScoringFunction, self).__init__(**kwargs) + self.type = 'distance' + self.parameters = kwargs.get('parameters', None) + + +class DistanceScoringParameters(msrest.serialization.Model): + """Provides parameter values to a distance scoring function. + + All required parameters must be populated in order to send to Azure. + + :param reference_point_parameter: Required. The name of the parameter passed in search queries + to specify the reference location. + :type reference_point_parameter: str + :param boosting_distance: Required. The distance in kilometers from the reference location + where the boosting range ends. + :type boosting_distance: float + """ + + _validation = { + 'reference_point_parameter': {'required': True}, + 'boosting_distance': {'required': True}, + } + + _attribute_map = { + 'reference_point_parameter': {'key': 'referencePointParameter', 'type': 'str'}, + 'boosting_distance': {'key': 'boostingDistance', 'type': 'float'}, + } + + def __init__( + self, + **kwargs + ): + super(DistanceScoringParameters, self).__init__(**kwargs) + self.reference_point_parameter = kwargs.get('reference_point_parameter', None) + self.boosting_distance = kwargs.get('boosting_distance', None) + + +class EdgeNGramTokenFilter(TokenFilter): + """Generates n-grams of the given size(s) starting from the front or the back of an input token. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param min_gram: The minimum n-gram length. Default is 1. Must be less than the value of + maxGram. + :type min_gram: int + :param max_gram: The maximum n-gram length. Default is 2. + :type max_gram: int + :param side: Specifies which side of the input the n-gram should be generated from. Default is + "front". Possible values include: 'front', 'back'. + :type side: str or ~search_service_client.models.EdgeNGramTokenFilterSide + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min_gram': {'key': 'minGram', 'type': 'int'}, + 'max_gram': {'key': 'maxGram', 'type': 'int'}, + 'side': {'key': 'side', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(EdgeNGramTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.EdgeNGramTokenFilter' + self.min_gram = kwargs.get('min_gram', 1) + self.max_gram = kwargs.get('max_gram', 2) + self.side = kwargs.get('side', None) + + +class EdgeNGramTokenFilterV2(TokenFilter): + """Generates n-grams of the given size(s) starting from the front or the back of an input token. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param min_gram: The minimum n-gram length. Default is 1. Maximum is 300. Must be less than the + value of maxGram. + :type min_gram: int + :param max_gram: The maximum n-gram length. Default is 2. Maximum is 300. + :type max_gram: int + :param side: Specifies which side of the input the n-gram should be generated from. Default is + "front". Possible values include: 'front', 'back'. + :type side: str or ~search_service_client.models.EdgeNGramTokenFilterSide + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'min_gram': {'maximum': 300}, + 'max_gram': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min_gram': {'key': 'minGram', 'type': 'int'}, + 'max_gram': {'key': 'maxGram', 'type': 'int'}, + 'side': {'key': 'side', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(EdgeNGramTokenFilterV2, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.EdgeNGramTokenFilterV2' + self.min_gram = kwargs.get('min_gram', 1) + self.max_gram = kwargs.get('max_gram', 2) + self.side = kwargs.get('side', None) + + +class EdgeNGramTokenizer(Tokenizer): + """Tokenizes the input from an edge into n-grams of the given size(s). This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param min_gram: The minimum n-gram length. Default is 1. Maximum is 300. Must be less than the + value of maxGram. + :type min_gram: int + :param max_gram: The maximum n-gram length. Default is 2. Maximum is 300. + :type max_gram: int + :param token_chars: Character classes to keep in the tokens. + :type token_chars: list[str or ~search_service_client.models.TokenCharacterKind] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'min_gram': {'maximum': 300}, + 'max_gram': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min_gram': {'key': 'minGram', 'type': 'int'}, + 'max_gram': {'key': 'maxGram', 'type': 'int'}, + 'token_chars': {'key': 'tokenChars', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(EdgeNGramTokenizer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.EdgeNGramTokenizer' + self.min_gram = kwargs.get('min_gram', 1) + self.max_gram = kwargs.get('max_gram', 2) + self.token_chars = kwargs.get('token_chars', None) + + +class ElisionTokenFilter(TokenFilter): + """Removes elisions. For example, "l'avion" (the plane) will be converted to "avion" (plane). This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param articles: The set of articles to remove. + :type articles: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'articles': {'key': 'articles', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(ElisionTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.ElisionTokenFilter' + self.articles = kwargs.get('articles', None) + + +class EncryptionKey(msrest.serialization.Model): + """A customer-managed encryption key in Azure Key Vault. Keys that you create and manage can be used to encrypt or decrypt data-at-rest in Azure Cognitive Search, such as indexes and synonym maps. + + All required parameters must be populated in order to send to Azure. + + :param key_vault_key_name: Required. The name of your Azure Key Vault key to be used to encrypt + your data at rest. + :type key_vault_key_name: str + :param key_vault_key_version: Required. The version of your Azure Key Vault key to be used to + encrypt your data at rest. + :type key_vault_key_version: str + :param key_vault_uri: Required. The URI of your Azure Key Vault, also referred to as DNS name, + that contains the key to be used to encrypt your data at rest. An example URI might be + https://my-keyvault-name.vault.azure.net. + :type key_vault_uri: str + :param access_credentials: Optional Azure Active Directory credentials used for accessing your + Azure Key Vault. Not required if using managed identity instead. + :type access_credentials: + ~search_service_client.models.AzureActiveDirectoryApplicationCredentials + """ + + _validation = { + 'key_vault_key_name': {'required': True}, + 'key_vault_key_version': {'required': True}, + 'key_vault_uri': {'required': True}, + } + + _attribute_map = { + 'key_vault_key_name': {'key': 'keyVaultKeyName', 'type': 'str'}, + 'key_vault_key_version': {'key': 'keyVaultKeyVersion', 'type': 'str'}, + 'key_vault_uri': {'key': 'keyVaultUri', 'type': 'str'}, + 'access_credentials': {'key': 'accessCredentials', 'type': 'AzureActiveDirectoryApplicationCredentials'}, + } + + def __init__( + self, + **kwargs + ): + super(EncryptionKey, self).__init__(**kwargs) + self.key_vault_key_name = kwargs.get('key_vault_key_name', None) + self.key_vault_key_version = kwargs.get('key_vault_key_version', None) + self.key_vault_uri = kwargs.get('key_vault_uri', None) + self.access_credentials = kwargs.get('access_credentials', None) + + +class EntityRecognitionSkill(Skill): + """Text analytics entity recognition. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param categories: A list of entity categories that should be extracted. + :type categories: list[str or ~search_service_client.models.EntityCategory] + :param default_language_code: A value indicating which language code to use. Default is en. + Possible values include: 'ar', 'cs', 'zh-Hans', 'zh-Hant', 'da', 'nl', 'en', 'fi', 'fr', 'de', + 'el', 'hu', 'it', 'ja', 'ko', 'no', 'pl', 'pt-PT', 'pt-BR', 'ru', 'es', 'sv', 'tr'. + :type default_language_code: str or + ~search_service_client.models.EntityRecognitionSkillLanguage + :param include_typeless_entities: Determines whether or not to include entities which are well + known but don't conform to a pre-defined type. If this configuration is not set (default), set + to null or set to false, entities which don't conform to one of the pre-defined types will not + be surfaced. + :type include_typeless_entities: bool + :param minimum_precision: A value between 0 and 1 that be used to only include entities whose + confidence score is greater than the value specified. If not set (default), or if explicitly + set to null, all entities will be included. + :type minimum_precision: float + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'categories': {'key': 'categories', 'type': '[str]'}, + 'default_language_code': {'key': 'defaultLanguageCode', 'type': 'str'}, + 'include_typeless_entities': {'key': 'includeTypelessEntities', 'type': 'bool'}, + 'minimum_precision': {'key': 'minimumPrecision', 'type': 'float'}, + } + + def __init__( + self, + **kwargs + ): + super(EntityRecognitionSkill, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Skills.Text.EntityRecognitionSkill' + self.categories = kwargs.get('categories', None) + self.default_language_code = kwargs.get('default_language_code', None) + self.include_typeless_entities = kwargs.get('include_typeless_entities', None) + self.minimum_precision = kwargs.get('minimum_precision', None) + + +class Field(msrest.serialization.Model): + """Represents a field in an index definition, which describes the name, data type, and search behavior of a field. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the field, which must be unique within the fields collection + of the index or parent field. + :type name: str + :param type: Required. The data type of the field. Possible values include: 'Edm.String', + 'Edm.Int32', 'Edm.Int64', 'Edm.Double', 'Edm.Boolean', 'Edm.DateTimeOffset', + 'Edm.GeographyPoint', 'Edm.ComplexType'. + :type type: str or ~search_service_client.models.DataType + :param key: A value indicating whether the field uniquely identifies documents in the index. + Exactly one top-level field in each index must be chosen as the key field and it must be of + type Edm.String. Key fields can be used to look up documents directly and update or delete + specific documents. Default is false for simple fields and null for complex fields. + :type key: bool + :param retrievable: A value indicating whether the field can be returned in a search result. + You can disable this option if you want to use a field (for example, margin) as a filter, + sorting, or scoring mechanism but do not want the field to be visible to the end user. This + property must be true for key fields, and it must be null for complex fields. This property can + be changed on existing fields. Enabling this property does not cause any increase in index + storage requirements. Default is true for simple fields and null for complex fields. + :type retrievable: bool + :param searchable: A value indicating whether the field is full-text searchable. This means it + will undergo analysis such as word-breaking during indexing. If you set a searchable field to a + value like "sunny day", internally it will be split into the individual tokens "sunny" and + "day". This enables full-text searches for these terms. Fields of type Edm.String or + Collection(Edm.String) are searchable by default. This property must be false for simple fields + of other non-string data types, and it must be null for complex fields. Note: searchable fields + consume extra space in your index since Azure Cognitive Search will store an additional + tokenized version of the field value for full-text searches. If you want to save space in your + index and you don't need a field to be included in searches, set searchable to false. + :type searchable: bool + :param filterable: A value indicating whether to enable the field to be referenced in $filter + queries. filterable differs from searchable in how strings are handled. Fields of type + Edm.String or Collection(Edm.String) that are filterable do not undergo word-breaking, so + comparisons are for exact matches only. For example, if you set such a field f to "sunny day", + $filter=f eq 'sunny' will find no matches, but $filter=f eq 'sunny day' will. This property + must be null for complex fields. Default is true for simple fields and null for complex fields. + :type filterable: bool + :param sortable: A value indicating whether to enable the field to be referenced in $orderby + expressions. By default Azure Cognitive Search sorts results by score, but in many experiences + users will want to sort by fields in the documents. A simple field can be sortable only if it + is single-valued (it has a single value in the scope of the parent document). Simple collection + fields cannot be sortable, since they are multi-valued. Simple sub-fields of complex + collections are also multi-valued, and therefore cannot be sortable. This is true whether it's + an immediate parent field, or an ancestor field, that's the complex collection. Complex fields + cannot be sortable and the sortable property must be null for such fields. The default for + sortable is true for single-valued simple fields, false for multi-valued simple fields, and + null for complex fields. + :type sortable: bool + :param facetable: A value indicating whether to enable the field to be referenced in facet + queries. Typically used in a presentation of search results that includes hit count by category + (for example, search for digital cameras and see hits by brand, by megapixels, by price, and so + on). This property must be null for complex fields. Fields of type Edm.GeographyPoint or + Collection(Edm.GeographyPoint) cannot be facetable. Default is true for all other simple + fields. + :type facetable: bool + :param analyzer: The name of the language analyzer to use for the field. This option can be + used only with searchable fields and it can't be set together with either searchAnalyzer or + indexAnalyzer. Once the analyzer is chosen, it cannot be changed for the field. Must be null + for complex fields. Possible values include: 'ar.microsoft', 'ar.lucene', 'hy.lucene', + 'bn.microsoft', 'eu.lucene', 'bg.microsoft', 'bg.lucene', 'ca.microsoft', 'ca.lucene', 'zh- + Hans.microsoft', 'zh-Hans.lucene', 'zh-Hant.microsoft', 'zh-Hant.lucene', 'hr.microsoft', + 'cs.microsoft', 'cs.lucene', 'da.microsoft', 'da.lucene', 'nl.microsoft', 'nl.lucene', + 'en.microsoft', 'en.lucene', 'et.microsoft', 'fi.microsoft', 'fi.lucene', 'fr.microsoft', + 'fr.lucene', 'gl.lucene', 'de.microsoft', 'de.lucene', 'el.microsoft', 'el.lucene', + 'gu.microsoft', 'he.microsoft', 'hi.microsoft', 'hi.lucene', 'hu.microsoft', 'hu.lucene', + 'is.microsoft', 'id.microsoft', 'id.lucene', 'ga.lucene', 'it.microsoft', 'it.lucene', + 'ja.microsoft', 'ja.lucene', 'kn.microsoft', 'ko.microsoft', 'ko.lucene', 'lv.microsoft', + 'lv.lucene', 'lt.microsoft', 'ml.microsoft', 'ms.microsoft', 'mr.microsoft', 'nb.microsoft', + 'no.lucene', 'fa.lucene', 'pl.microsoft', 'pl.lucene', 'pt-BR.microsoft', 'pt-BR.lucene', 'pt- + PT.microsoft', 'pt-PT.lucene', 'pa.microsoft', 'ro.microsoft', 'ro.lucene', 'ru.microsoft', + 'ru.lucene', 'sr-cyrillic.microsoft', 'sr-latin.microsoft', 'sk.microsoft', 'sl.microsoft', + 'es.microsoft', 'es.lucene', 'sv.microsoft', 'sv.lucene', 'ta.microsoft', 'te.microsoft', + 'th.microsoft', 'th.lucene', 'tr.microsoft', 'tr.lucene', 'uk.microsoft', 'ur.microsoft', + 'vi.microsoft', 'standard.lucene', 'standardasciifolding.lucene', 'keyword', 'pattern', + 'simple', 'stop', 'whitespace'. + :type analyzer: str or ~search_service_client.models.AnalyzerName + :param search_analyzer: The name of the analyzer used at search time for the field. This option + can be used only with searchable fields. It must be set together with indexAnalyzer and it + cannot be set together with the analyzer option. This analyzer can be updated on an existing + field. Must be null for complex fields. Possible values include: 'ar.microsoft', 'ar.lucene', + 'hy.lucene', 'bn.microsoft', 'eu.lucene', 'bg.microsoft', 'bg.lucene', 'ca.microsoft', + 'ca.lucene', 'zh-Hans.microsoft', 'zh-Hans.lucene', 'zh-Hant.microsoft', 'zh-Hant.lucene', + 'hr.microsoft', 'cs.microsoft', 'cs.lucene', 'da.microsoft', 'da.lucene', 'nl.microsoft', + 'nl.lucene', 'en.microsoft', 'en.lucene', 'et.microsoft', 'fi.microsoft', 'fi.lucene', + 'fr.microsoft', 'fr.lucene', 'gl.lucene', 'de.microsoft', 'de.lucene', 'el.microsoft', + 'el.lucene', 'gu.microsoft', 'he.microsoft', 'hi.microsoft', 'hi.lucene', 'hu.microsoft', + 'hu.lucene', 'is.microsoft', 'id.microsoft', 'id.lucene', 'ga.lucene', 'it.microsoft', + 'it.lucene', 'ja.microsoft', 'ja.lucene', 'kn.microsoft', 'ko.microsoft', 'ko.lucene', + 'lv.microsoft', 'lv.lucene', 'lt.microsoft', 'ml.microsoft', 'ms.microsoft', 'mr.microsoft', + 'nb.microsoft', 'no.lucene', 'fa.lucene', 'pl.microsoft', 'pl.lucene', 'pt-BR.microsoft', 'pt- + BR.lucene', 'pt-PT.microsoft', 'pt-PT.lucene', 'pa.microsoft', 'ro.microsoft', 'ro.lucene', + 'ru.microsoft', 'ru.lucene', 'sr-cyrillic.microsoft', 'sr-latin.microsoft', 'sk.microsoft', + 'sl.microsoft', 'es.microsoft', 'es.lucene', 'sv.microsoft', 'sv.lucene', 'ta.microsoft', + 'te.microsoft', 'th.microsoft', 'th.lucene', 'tr.microsoft', 'tr.lucene', 'uk.microsoft', + 'ur.microsoft', 'vi.microsoft', 'standard.lucene', 'standardasciifolding.lucene', 'keyword', + 'pattern', 'simple', 'stop', 'whitespace'. + :type search_analyzer: str or ~search_service_client.models.AnalyzerName + :param index_analyzer: The name of the analyzer used at indexing time for the field. This + option can be used only with searchable fields. It must be set together with searchAnalyzer and + it cannot be set together with the analyzer option. Once the analyzer is chosen, it cannot be + changed for the field. Must be null for complex fields. Possible values include: + 'ar.microsoft', 'ar.lucene', 'hy.lucene', 'bn.microsoft', 'eu.lucene', 'bg.microsoft', + 'bg.lucene', 'ca.microsoft', 'ca.lucene', 'zh-Hans.microsoft', 'zh-Hans.lucene', 'zh- + Hant.microsoft', 'zh-Hant.lucene', 'hr.microsoft', 'cs.microsoft', 'cs.lucene', 'da.microsoft', + 'da.lucene', 'nl.microsoft', 'nl.lucene', 'en.microsoft', 'en.lucene', 'et.microsoft', + 'fi.microsoft', 'fi.lucene', 'fr.microsoft', 'fr.lucene', 'gl.lucene', 'de.microsoft', + 'de.lucene', 'el.microsoft', 'el.lucene', 'gu.microsoft', 'he.microsoft', 'hi.microsoft', + 'hi.lucene', 'hu.microsoft', 'hu.lucene', 'is.microsoft', 'id.microsoft', 'id.lucene', + 'ga.lucene', 'it.microsoft', 'it.lucene', 'ja.microsoft', 'ja.lucene', 'kn.microsoft', + 'ko.microsoft', 'ko.lucene', 'lv.microsoft', 'lv.lucene', 'lt.microsoft', 'ml.microsoft', + 'ms.microsoft', 'mr.microsoft', 'nb.microsoft', 'no.lucene', 'fa.lucene', 'pl.microsoft', + 'pl.lucene', 'pt-BR.microsoft', 'pt-BR.lucene', 'pt-PT.microsoft', 'pt-PT.lucene', + 'pa.microsoft', 'ro.microsoft', 'ro.lucene', 'ru.microsoft', 'ru.lucene', 'sr- + cyrillic.microsoft', 'sr-latin.microsoft', 'sk.microsoft', 'sl.microsoft', 'es.microsoft', + 'es.lucene', 'sv.microsoft', 'sv.lucene', 'ta.microsoft', 'te.microsoft', 'th.microsoft', + 'th.lucene', 'tr.microsoft', 'tr.lucene', 'uk.microsoft', 'ur.microsoft', 'vi.microsoft', + 'standard.lucene', 'standardasciifolding.lucene', 'keyword', 'pattern', 'simple', 'stop', + 'whitespace'. + :type index_analyzer: str or ~search_service_client.models.AnalyzerName + :param synonym_maps: A list of the names of synonym maps to associate with this field. This + option can be used only with searchable fields. Currently only one synonym map per field is + supported. Assigning a synonym map to a field ensures that query terms targeting that field are + expanded at query-time using the rules in the synonym map. This attribute can be changed on + existing fields. Must be null or an empty collection for complex fields. + :type synonym_maps: list[str] + :param fields: A list of sub-fields if this is a field of type Edm.ComplexType or + Collection(Edm.ComplexType). Must be null or empty for simple fields. + :type fields: list[~search_service_client.models.Field] + """ + + _validation = { + 'name': {'required': True}, + 'type': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'key': {'key': 'key', 'type': 'bool'}, + 'retrievable': {'key': 'retrievable', 'type': 'bool'}, + 'searchable': {'key': 'searchable', 'type': 'bool'}, + 'filterable': {'key': 'filterable', 'type': 'bool'}, + 'sortable': {'key': 'sortable', 'type': 'bool'}, + 'facetable': {'key': 'facetable', 'type': 'bool'}, + 'analyzer': {'key': 'analyzer', 'type': 'str'}, + 'search_analyzer': {'key': 'searchAnalyzer', 'type': 'str'}, + 'index_analyzer': {'key': 'indexAnalyzer', 'type': 'str'}, + 'synonym_maps': {'key': 'synonymMaps', 'type': '[str]'}, + 'fields': {'key': 'fields', 'type': '[Field]'}, + } + + def __init__( + self, + **kwargs + ): + super(Field, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.type = kwargs.get('type', None) + self.key = kwargs.get('key', None) + self.retrievable = kwargs.get('retrievable', None) + self.searchable = kwargs.get('searchable', None) + self.filterable = kwargs.get('filterable', None) + self.sortable = kwargs.get('sortable', None) + self.facetable = kwargs.get('facetable', None) + self.analyzer = kwargs.get('analyzer', None) + self.search_analyzer = kwargs.get('search_analyzer', None) + self.index_analyzer = kwargs.get('index_analyzer', None) + self.synonym_maps = kwargs.get('synonym_maps', None) + self.fields = kwargs.get('fields', None) + + +class FieldMapping(msrest.serialization.Model): + """Defines a mapping between a field in a data source and a target field in an index. + + All required parameters must be populated in order to send to Azure. + + :param source_field_name: Required. The name of the field in the data source. + :type source_field_name: str + :param target_field_name: The name of the target field in the index. Same as the source field + name by default. + :type target_field_name: str + :param mapping_function: A function to apply to each source field value before indexing. + :type mapping_function: ~search_service_client.models.FieldMappingFunction + """ + + _validation = { + 'source_field_name': {'required': True}, + } + + _attribute_map = { + 'source_field_name': {'key': 'sourceFieldName', 'type': 'str'}, + 'target_field_name': {'key': 'targetFieldName', 'type': 'str'}, + 'mapping_function': {'key': 'mappingFunction', 'type': 'FieldMappingFunction'}, + } + + def __init__( + self, + **kwargs + ): + super(FieldMapping, self).__init__(**kwargs) + self.source_field_name = kwargs.get('source_field_name', None) + self.target_field_name = kwargs.get('target_field_name', None) + self.mapping_function = kwargs.get('mapping_function', None) + + +class FieldMappingFunction(msrest.serialization.Model): + """Represents a function that transforms a value from a data source before indexing. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the field mapping function. + :type name: str + :param parameters: A dictionary of parameter name/value pairs to pass to the function. Each + value must be of a primitive type. + :type parameters: dict[str, object] + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'parameters': {'key': 'parameters', 'type': '{object}'}, + } + + def __init__( + self, + **kwargs + ): + super(FieldMappingFunction, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.parameters = kwargs.get('parameters', None) + + +class FreshnessScoringFunction(ScoringFunction): + """Defines a function that boosts scores based on the value of a date-time field. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. Constant filled by server. + :type type: str + :param field_name: Required. The name of the field used as input to the scoring function. + :type field_name: str + :param boost: Required. A multiplier for the raw score. Must be a positive number not equal to + 1.0. + :type boost: float + :param interpolation: A value indicating how boosting will be interpolated across document + scores; defaults to "Linear". Possible values include: 'linear', 'constant', 'quadratic', + 'logarithmic'. + :type interpolation: str or ~search_service_client.models.ScoringFunctionInterpolation + :param parameters: Required. Parameter values for the freshness scoring function. + :type parameters: ~search_service_client.models.FreshnessScoringParameters + """ + + _validation = { + 'type': {'required': True}, + 'field_name': {'required': True}, + 'boost': {'required': True}, + 'parameters': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'field_name': {'key': 'fieldName', 'type': 'str'}, + 'boost': {'key': 'boost', 'type': 'float'}, + 'interpolation': {'key': 'interpolation', 'type': 'str'}, + 'parameters': {'key': 'freshness', 'type': 'FreshnessScoringParameters'}, + } + + def __init__( + self, + **kwargs + ): + super(FreshnessScoringFunction, self).__init__(**kwargs) + self.type = 'freshness' + self.parameters = kwargs.get('parameters', None) + + +class FreshnessScoringParameters(msrest.serialization.Model): + """Provides parameter values to a freshness scoring function. + + All required parameters must be populated in order to send to Azure. + + :param boosting_duration: Required. The expiration period after which boosting will stop for a + particular document. + :type boosting_duration: ~datetime.timedelta + """ + + _validation = { + 'boosting_duration': {'required': True}, + } + + _attribute_map = { + 'boosting_duration': {'key': 'boostingDuration', 'type': 'duration'}, + } + + def __init__( + self, + **kwargs + ): + super(FreshnessScoringParameters, self).__init__(**kwargs) + self.boosting_duration = kwargs.get('boosting_duration', None) + + +class GetIndexStatisticsResult(msrest.serialization.Model): + """Statistics for a given index. Statistics are collected periodically and are not guaranteed to always be up-to-date. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar document_count: Required. The number of documents in the index. + :vartype document_count: long + :ivar storage_size: Required. The amount of storage in bytes consumed by the index. + :vartype storage_size: long + """ + + _validation = { + 'document_count': {'required': True, 'readonly': True}, + 'storage_size': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'document_count': {'key': 'documentCount', 'type': 'long'}, + 'storage_size': {'key': 'storageSize', 'type': 'long'}, + } + + def __init__( + self, + **kwargs + ): + super(GetIndexStatisticsResult, self).__init__(**kwargs) + self.document_count = None + self.storage_size = None + + +class HighWaterMarkChangeDetectionPolicy(DataChangeDetectionPolicy): + """Defines a data change detection policy that captures changes based on the value of a high water mark column. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param high_water_mark_column_name: Required. The name of the high water mark column. + :type high_water_mark_column_name: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'high_water_mark_column_name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'high_water_mark_column_name': {'key': 'highWaterMarkColumnName', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(HighWaterMarkChangeDetectionPolicy, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy' + self.high_water_mark_column_name = kwargs.get('high_water_mark_column_name', None) + + +class ImageAnalysisSkill(Skill): + """A skill that analyzes image files. It extracts a rich set of visual features based on the image content. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param default_language_code: A value indicating which language code to use. Default is en. + Possible values include: 'en', 'es', 'ja', 'pt', 'zh'. + :type default_language_code: str or ~search_service_client.models.ImageAnalysisSkillLanguage + :param visual_features: A list of visual features. + :type visual_features: list[str or ~search_service_client.models.VisualFeature] + :param details: A string indicating which domain-specific details to return. + :type details: list[str or ~search_service_client.models.ImageDetail] + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'default_language_code': {'key': 'defaultLanguageCode', 'type': 'str'}, + 'visual_features': {'key': 'visualFeatures', 'type': '[str]'}, + 'details': {'key': 'details', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(ImageAnalysisSkill, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Skills.Vision.ImageAnalysisSkill' + self.default_language_code = kwargs.get('default_language_code', None) + self.visual_features = kwargs.get('visual_features', None) + self.details = kwargs.get('details', None) + + +class Index(msrest.serialization.Model): + """Represents a search index definition, which describes the fields and search behavior of an index. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the index. + :type name: str + :param fields: Required. The fields of the index. + :type fields: list[~search_service_client.models.Field] + :param scoring_profiles: The scoring profiles for the index. + :type scoring_profiles: list[~search_service_client.models.ScoringProfile] + :param default_scoring_profile: The name of the scoring profile to use if none is specified in + the query. If this property is not set and no scoring profile is specified in the query, then + default scoring (tf-idf) will be used. + :type default_scoring_profile: str + :param cors_options: Options to control Cross-Origin Resource Sharing (CORS) for the index. + :type cors_options: ~search_service_client.models.CorsOptions + :param suggesters: The suggesters for the index. + :type suggesters: list[~search_service_client.models.Suggester] + :param analyzers: The analyzers for the index. + :type analyzers: list[~search_service_client.models.Analyzer] + :param tokenizers: The tokenizers for the index. + :type tokenizers: list[~search_service_client.models.Tokenizer] + :param token_filters: The token filters for the index. + :type token_filters: list[~search_service_client.models.TokenFilter] + :param char_filters: The character filters for the index. + :type char_filters: list[~search_service_client.models.CharFilter] + :param encryption_key: A description of an encryption key that you create in Azure Key Vault. + This key is used to provide an additional level of encryption-at-rest for your data when you + want full assurance that no one, not even Microsoft, can decrypt your data in Azure Cognitive + Search. Once you have encrypted your data, it will always remain encrypted. Azure Cognitive + Search will ignore attempts to set this property to null. You can change this property as + needed if you want to rotate your encryption key; Your data will be unaffected. Encryption with + customer-managed keys is not available for free search services, and is only available for paid + services created on or after January 1, 2019. + :type encryption_key: ~search_service_client.models.EncryptionKey + :param e_tag: The ETag of the index. + :type e_tag: str + """ + + _validation = { + 'name': {'required': True}, + 'fields': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'fields': {'key': 'fields', 'type': '[Field]'}, + 'scoring_profiles': {'key': 'scoringProfiles', 'type': '[ScoringProfile]'}, + 'default_scoring_profile': {'key': 'defaultScoringProfile', 'type': 'str'}, + 'cors_options': {'key': 'corsOptions', 'type': 'CorsOptions'}, + 'suggesters': {'key': 'suggesters', 'type': '[Suggester]'}, + 'analyzers': {'key': 'analyzers', 'type': '[Analyzer]'}, + 'tokenizers': {'key': 'tokenizers', 'type': '[Tokenizer]'}, + 'token_filters': {'key': 'tokenFilters', 'type': '[TokenFilter]'}, + 'char_filters': {'key': 'charFilters', 'type': '[CharFilter]'}, + 'encryption_key': {'key': 'encryptionKey', 'type': 'EncryptionKey'}, + 'e_tag': {'key': '@odata\\.etag', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Index, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.fields = kwargs.get('fields', None) + self.scoring_profiles = kwargs.get('scoring_profiles', None) + self.default_scoring_profile = kwargs.get('default_scoring_profile', None) + self.cors_options = kwargs.get('cors_options', None) + self.suggesters = kwargs.get('suggesters', None) + self.analyzers = kwargs.get('analyzers', None) + self.tokenizers = kwargs.get('tokenizers', None) + self.token_filters = kwargs.get('token_filters', None) + self.char_filters = kwargs.get('char_filters', None) + self.encryption_key = kwargs.get('encryption_key', None) + self.e_tag = kwargs.get('e_tag', None) + + +class Indexer(msrest.serialization.Model): + """Represents an indexer. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the indexer. + :type name: str + :param description: The description of the indexer. + :type description: str + :param data_source_name: Required. The name of the datasource from which this indexer reads + data. + :type data_source_name: str + :param skillset_name: The name of the skillset executing with this indexer. + :type skillset_name: str + :param target_index_name: Required. The name of the index to which this indexer writes data. + :type target_index_name: str + :param schedule: The schedule for this indexer. + :type schedule: ~search_service_client.models.IndexingSchedule + :param parameters: Parameters for indexer execution. + :type parameters: ~search_service_client.models.IndexingParameters + :param field_mappings: Defines mappings between fields in the data source and corresponding + target fields in the index. + :type field_mappings: list[~search_service_client.models.FieldMapping] + :param output_field_mappings: Output field mappings are applied after enrichment and + immediately before indexing. + :type output_field_mappings: list[~search_service_client.models.FieldMapping] + :param is_disabled: A value indicating whether the indexer is disabled. Default is false. + :type is_disabled: bool + :param e_tag: The ETag of the Indexer. + :type e_tag: str + """ + + _validation = { + 'name': {'required': True}, + 'data_source_name': {'required': True}, + 'target_index_name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'data_source_name': {'key': 'dataSourceName', 'type': 'str'}, + 'skillset_name': {'key': 'skillsetName', 'type': 'str'}, + 'target_index_name': {'key': 'targetIndexName', 'type': 'str'}, + 'schedule': {'key': 'schedule', 'type': 'IndexingSchedule'}, + 'parameters': {'key': 'parameters', 'type': 'IndexingParameters'}, + 'field_mappings': {'key': 'fieldMappings', 'type': '[FieldMapping]'}, + 'output_field_mappings': {'key': 'outputFieldMappings', 'type': '[FieldMapping]'}, + 'is_disabled': {'key': 'disabled', 'type': 'bool'}, + 'e_tag': {'key': '@odata\\.etag', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Indexer, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.description = kwargs.get('description', None) + self.data_source_name = kwargs.get('data_source_name', None) + self.skillset_name = kwargs.get('skillset_name', None) + self.target_index_name = kwargs.get('target_index_name', None) + self.schedule = kwargs.get('schedule', None) + self.parameters = kwargs.get('parameters', None) + self.field_mappings = kwargs.get('field_mappings', None) + self.output_field_mappings = kwargs.get('output_field_mappings', None) + self.is_disabled = kwargs.get('is_disabled', False) + self.e_tag = kwargs.get('e_tag', None) + + +class IndexerExecutionInfo(msrest.serialization.Model): + """Represents the current status and execution history of an indexer. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar status: Required. Overall indexer status. Possible values include: 'unknown', 'error', + 'running'. + :vartype status: str or ~search_service_client.models.IndexerStatus + :ivar last_result: The result of the most recent or an in-progress indexer execution. + :vartype last_result: ~search_service_client.models.IndexerExecutionResult + :ivar execution_history: Required. History of the recent indexer executions, sorted in reverse + chronological order. + :vartype execution_history: list[~search_service_client.models.IndexerExecutionResult] + :ivar limits: Required. The execution limits for the indexer. + :vartype limits: ~search_service_client.models.IndexerLimits + """ + + _validation = { + 'status': {'required': True, 'readonly': True}, + 'last_result': {'readonly': True}, + 'execution_history': {'required': True, 'readonly': True}, + 'limits': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'last_result': {'key': 'lastResult', 'type': 'IndexerExecutionResult'}, + 'execution_history': {'key': 'executionHistory', 'type': '[IndexerExecutionResult]'}, + 'limits': {'key': 'limits', 'type': 'IndexerLimits'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexerExecutionInfo, self).__init__(**kwargs) + self.status = None + self.last_result = None + self.execution_history = None + self.limits = None + + +class IndexerExecutionResult(msrest.serialization.Model): + """Represents the result of an individual indexer execution. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar status: Required. The outcome of this indexer execution. Possible values include: + 'transientFailure', 'success', 'inProgress', 'reset'. + :vartype status: str or ~search_service_client.models.IndexerExecutionStatus + :ivar error_message: The error message indicating the top-level error, if any. + :vartype error_message: str + :ivar start_time: The start time of this indexer execution. + :vartype start_time: ~datetime.datetime + :ivar end_time: The end time of this indexer execution, if the execution has already completed. + :vartype end_time: ~datetime.datetime + :ivar errors: Required. The item-level indexing errors. + :vartype errors: list[~search_service_client.models.ItemError] + :ivar warnings: Required. The item-level indexing warnings. + :vartype warnings: list[~search_service_client.models.ItemWarning] + :ivar item_count: Required. The number of items that were processed during this indexer + execution. This includes both successfully processed items and items where indexing was + attempted but failed. + :vartype item_count: int + :ivar failed_item_count: Required. The number of items that failed to be indexed during this + indexer execution. + :vartype failed_item_count: int + :ivar initial_tracking_state: Change tracking state with which an indexer execution started. + :vartype initial_tracking_state: str + :ivar final_tracking_state: Change tracking state with which an indexer execution finished. + :vartype final_tracking_state: str + """ + + _validation = { + 'status': {'required': True, 'readonly': True}, + 'error_message': {'readonly': True}, + 'start_time': {'readonly': True}, + 'end_time': {'readonly': True}, + 'errors': {'required': True, 'readonly': True}, + 'warnings': {'required': True, 'readonly': True}, + 'item_count': {'required': True, 'readonly': True}, + 'failed_item_count': {'required': True, 'readonly': True}, + 'initial_tracking_state': {'readonly': True}, + 'final_tracking_state': {'readonly': True}, + } + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'error_message': {'key': 'errorMessage', 'type': 'str'}, + 'start_time': {'key': 'startTime', 'type': 'iso-8601'}, + 'end_time': {'key': 'endTime', 'type': 'iso-8601'}, + 'errors': {'key': 'errors', 'type': '[ItemError]'}, + 'warnings': {'key': 'warnings', 'type': '[ItemWarning]'}, + 'item_count': {'key': 'itemsProcessed', 'type': 'int'}, + 'failed_item_count': {'key': 'itemsFailed', 'type': 'int'}, + 'initial_tracking_state': {'key': 'initialTrackingState', 'type': 'str'}, + 'final_tracking_state': {'key': 'finalTrackingState', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexerExecutionResult, self).__init__(**kwargs) + self.status = None + self.error_message = None + self.start_time = None + self.end_time = None + self.errors = None + self.warnings = None + self.item_count = None + self.failed_item_count = None + self.initial_tracking_state = None + self.final_tracking_state = None + + +class IndexerLimits(msrest.serialization.Model): + """IndexerLimits. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar max_run_time: The maximum duration that the indexer is permitted to run for one + execution. + :vartype max_run_time: ~datetime.timedelta + :ivar max_document_extraction_size: The maximum size of a document, in bytes, which will be + considered valid for indexing. + :vartype max_document_extraction_size: long + :ivar max_document_content_characters_to_extract: The maximum number of characters that will be + extracted from a document picked up for indexing. + :vartype max_document_content_characters_to_extract: long + """ + + _validation = { + 'max_run_time': {'readonly': True}, + 'max_document_extraction_size': {'readonly': True}, + 'max_document_content_characters_to_extract': {'readonly': True}, + } + + _attribute_map = { + 'max_run_time': {'key': 'maxRunTime', 'type': 'duration'}, + 'max_document_extraction_size': {'key': 'maxDocumentExtractionSize', 'type': 'long'}, + 'max_document_content_characters_to_extract': {'key': 'maxDocumentContentCharactersToExtract', 'type': 'long'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexerLimits, self).__init__(**kwargs) + self.max_run_time = None + self.max_document_extraction_size = None + self.max_document_content_characters_to_extract = None + + +class IndexingParameters(msrest.serialization.Model): + """Represents parameters for indexer execution. + + :param batch_size: The number of items that are read from the data source and indexed as a + single batch in order to improve performance. The default depends on the data source type. + :type batch_size: int + :param max_failed_items: The maximum number of items that can fail indexing for indexer + execution to still be considered successful. -1 means no limit. Default is 0. + :type max_failed_items: int + :param max_failed_items_per_batch: The maximum number of items in a single batch that can fail + indexing for the batch to still be considered successful. -1 means no limit. Default is 0. + :type max_failed_items_per_batch: int + :param configuration: A dictionary of indexer-specific configuration properties. Each name is + the name of a specific property. Each value must be of a primitive type. + :type configuration: dict[str, object] + """ + + _attribute_map = { + 'batch_size': {'key': 'batchSize', 'type': 'int'}, + 'max_failed_items': {'key': 'maxFailedItems', 'type': 'int'}, + 'max_failed_items_per_batch': {'key': 'maxFailedItemsPerBatch', 'type': 'int'}, + 'configuration': {'key': 'configuration', 'type': '{object}'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexingParameters, self).__init__(**kwargs) + self.batch_size = kwargs.get('batch_size', None) + self.max_failed_items = kwargs.get('max_failed_items', 0) + self.max_failed_items_per_batch = kwargs.get('max_failed_items_per_batch', 0) + self.configuration = kwargs.get('configuration', None) + + +class IndexingSchedule(msrest.serialization.Model): + """Represents a schedule for indexer execution. + + All required parameters must be populated in order to send to Azure. + + :param interval: Required. The interval of time between indexer executions. + :type interval: ~datetime.timedelta + :param start_time: The time when an indexer should start running. + :type start_time: ~datetime.datetime + """ + + _validation = { + 'interval': {'required': True}, + } + + _attribute_map = { + 'interval': {'key': 'interval', 'type': 'duration'}, + 'start_time': {'key': 'startTime', 'type': 'iso-8601'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexingSchedule, self).__init__(**kwargs) + self.interval = kwargs.get('interval', None) + self.start_time = kwargs.get('start_time', None) + + +class InputFieldMappingEntry(msrest.serialization.Model): + """Input field mapping for a skill. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the input. + :type name: str + :param source: The source of the input. + :type source: str + :param source_context: The source context used for selecting recursive inputs. + :type source_context: str + :param inputs: The recursive inputs used when creating a complex type. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'source': {'key': 'source', 'type': 'str'}, + 'source_context': {'key': 'sourceContext', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + } + + def __init__( + self, + **kwargs + ): + super(InputFieldMappingEntry, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.source = kwargs.get('source', None) + self.source_context = kwargs.get('source_context', None) + self.inputs = kwargs.get('inputs', None) + + +class ItemError(msrest.serialization.Model): + """Represents an item- or document-level indexing error. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar key: The key of the item for which indexing failed. + :vartype key: str + :ivar error_message: Required. The message describing the error that occurred while processing + the item. + :vartype error_message: str + :ivar status_code: Required. The status code indicating why the indexing operation failed. + Possible values include: 400 for a malformed input document, 404 for document not found, 409 + for a version conflict, 422 when the index is temporarily unavailable, or 503 for when the + service is too busy. + :vartype status_code: int + :ivar name: The name of the source at which the error originated. For example, this could refer + to a particular skill in the attached skillset. This may not be always available. + :vartype name: str + :ivar details: Additional, verbose details about the error to assist in debugging the indexer. + This may not be always available. + :vartype details: str + :ivar documentation_link: A link to a troubleshooting guide for these classes of errors. This + may not be always available. + :vartype documentation_link: str + """ + + _validation = { + 'key': {'readonly': True}, + 'error_message': {'required': True, 'readonly': True}, + 'status_code': {'required': True, 'readonly': True}, + 'name': {'readonly': True}, + 'details': {'readonly': True}, + 'documentation_link': {'readonly': True}, + } + + _attribute_map = { + 'key': {'key': 'key', 'type': 'str'}, + 'error_message': {'key': 'errorMessage', 'type': 'str'}, + 'status_code': {'key': 'statusCode', 'type': 'int'}, + 'name': {'key': 'name', 'type': 'str'}, + 'details': {'key': 'details', 'type': 'str'}, + 'documentation_link': {'key': 'documentationLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ItemError, self).__init__(**kwargs) + self.key = None + self.error_message = None + self.status_code = None + self.name = None + self.details = None + self.documentation_link = None + + +class ItemWarning(msrest.serialization.Model): + """Represents an item-level warning. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar key: The key of the item which generated a warning. + :vartype key: str + :ivar message: Required. The message describing the warning that occurred while processing the + item. + :vartype message: str + :ivar name: The name of the source at which the warning originated. For example, this could + refer to a particular skill in the attached skillset. This may not be always available. + :vartype name: str + :ivar details: Additional, verbose details about the warning to assist in debugging the + indexer. This may not be always available. + :vartype details: str + :ivar documentation_link: A link to a troubleshooting guide for these classes of warnings. This + may not be always available. + :vartype documentation_link: str + """ + + _validation = { + 'key': {'readonly': True}, + 'message': {'required': True, 'readonly': True}, + 'name': {'readonly': True}, + 'details': {'readonly': True}, + 'documentation_link': {'readonly': True}, + } + + _attribute_map = { + 'key': {'key': 'key', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'details': {'key': 'details', 'type': 'str'}, + 'documentation_link': {'key': 'documentationLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ItemWarning, self).__init__(**kwargs) + self.key = None + self.message = None + self.name = None + self.details = None + self.documentation_link = None + + +class KeepTokenFilter(TokenFilter): + """A token filter that only keeps tokens with text contained in a specified list of words. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param keep_words: Required. The list of words to keep. + :type keep_words: list[str] + :param lower_case_keep_words: A value indicating whether to lower case all words first. Default + is false. + :type lower_case_keep_words: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'keep_words': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'keep_words': {'key': 'keepWords', 'type': '[str]'}, + 'lower_case_keep_words': {'key': 'keepWordsCase', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(KeepTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.KeepTokenFilter' + self.keep_words = kwargs.get('keep_words', None) + self.lower_case_keep_words = kwargs.get('lower_case_keep_words', False) + + +class KeyPhraseExtractionSkill(Skill): + """A skill that uses text analytics for key phrase extraction. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param default_language_code: A value indicating which language code to use. Default is en. + Possible values include: 'da', 'nl', 'en', 'fi', 'fr', 'de', 'it', 'ja', 'ko', 'no', 'pl', 'pt- + PT', 'pt-BR', 'ru', 'es', 'sv'. + :type default_language_code: str or + ~search_service_client.models.KeyPhraseExtractionSkillLanguage + :param max_key_phrase_count: A number indicating how many key phrases to return. If absent, all + identified key phrases will be returned. + :type max_key_phrase_count: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'default_language_code': {'key': 'defaultLanguageCode', 'type': 'str'}, + 'max_key_phrase_count': {'key': 'maxKeyPhraseCount', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(KeyPhraseExtractionSkill, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Skills.Text.KeyPhraseExtractionSkill' + self.default_language_code = kwargs.get('default_language_code', None) + self.max_key_phrase_count = kwargs.get('max_key_phrase_count', None) + + +class KeywordMarkerTokenFilter(TokenFilter): + """Marks terms as keywords. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param keywords: Required. A list of words to mark as keywords. + :type keywords: list[str] + :param ignore_case: A value indicating whether to ignore case. If true, all words are converted + to lower case first. Default is false. + :type ignore_case: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'keywords': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'keywords': {'key': 'keywords', 'type': '[str]'}, + 'ignore_case': {'key': 'ignoreCase', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(KeywordMarkerTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.KeywordMarkerTokenFilter' + self.keywords = kwargs.get('keywords', None) + self.ignore_case = kwargs.get('ignore_case', False) + + +class KeywordTokenizer(Tokenizer): + """Emits the entire input as a single token. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param buffer_size: The read buffer size in bytes. Default is 256. + :type buffer_size: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'buffer_size': {'key': 'bufferSize', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(KeywordTokenizer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.KeywordTokenizer' + self.buffer_size = kwargs.get('buffer_size', 256) + + +class KeywordTokenizerV2(Tokenizer): + """Emits the entire input as a single token. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Default is 256. Tokens longer than the + maximum length are split. The maximum token length that can be used is 300 characters. + :type max_token_length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(KeywordTokenizerV2, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.KeywordTokenizerV2' + self.max_token_length = kwargs.get('max_token_length', 256) + + +class LanguageDetectionSkill(Skill): + """A skill that detects the language of input text and reports a single language code for every document submitted on the request. The language code is paired with a score indicating the confidence of the analysis. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + } + + def __init__( + self, + **kwargs + ): + super(LanguageDetectionSkill, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Skills.Text.LanguageDetectionSkill' + + +class LengthTokenFilter(TokenFilter): + """Removes words that are too long or too short. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param min: The minimum length in characters. Default is 0. Maximum is 300. Must be less than + the value of max. + :type min: int + :param max: The maximum length in characters. Default and maximum is 300. + :type max: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'min': {'maximum': 300}, + 'max': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min': {'key': 'min', 'type': 'int'}, + 'max': {'key': 'max', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(LengthTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.LengthTokenFilter' + self.min = kwargs.get('min', 0) + self.max = kwargs.get('max', 300) + + +class LimitTokenFilter(TokenFilter): + """Limits the number of tokens while indexing. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param max_token_count: The maximum number of tokens to produce. Default is 1. + :type max_token_count: int + :param consume_all_tokens: A value indicating whether all tokens from the input must be + consumed even if maxTokenCount is reached. Default is false. + :type consume_all_tokens: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_count': {'key': 'maxTokenCount', 'type': 'int'}, + 'consume_all_tokens': {'key': 'consumeAllTokens', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(LimitTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.LimitTokenFilter' + self.max_token_count = kwargs.get('max_token_count', 1) + self.consume_all_tokens = kwargs.get('consume_all_tokens', False) + + +class ListDataSourcesResult(msrest.serialization.Model): + """Response from a List Datasources request. If successful, it includes the full definitions of all datasources. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar data_sources: Required. The datasources in the Search service. + :vartype data_sources: list[~search_service_client.models.DataSource] + """ + + _validation = { + 'data_sources': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'data_sources': {'key': 'value', 'type': '[DataSource]'}, + } + + def __init__( + self, + **kwargs + ): + super(ListDataSourcesResult, self).__init__(**kwargs) + self.data_sources = None + + +class ListIndexersResult(msrest.serialization.Model): + """Response from a List Indexers request. If successful, it includes the full definitions of all indexers. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar indexers: Required. The indexers in the Search service. + :vartype indexers: list[~search_service_client.models.Indexer] + """ + + _validation = { + 'indexers': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'indexers': {'key': 'value', 'type': '[Indexer]'}, + } + + def __init__( + self, + **kwargs + ): + super(ListIndexersResult, self).__init__(**kwargs) + self.indexers = None + + +class ListIndexesResult(msrest.serialization.Model): + """Response from a List Indexes request. If successful, it includes the full definitions of all indexes. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar indexes: Required. The indexes in the Search service. + :vartype indexes: list[~search_service_client.models.Index] + """ + + _validation = { + 'indexes': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'indexes': {'key': 'value', 'type': '[Index]'}, + } + + def __init__( + self, + **kwargs + ): + super(ListIndexesResult, self).__init__(**kwargs) + self.indexes = None + + +class ListSkillsetsResult(msrest.serialization.Model): + """Response from a list Skillset request. If successful, it includes the full definitions of all skillsets. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar skillsets: Required. The skillsets defined in the Search service. + :vartype skillsets: list[~search_service_client.models.Skillset] + """ + + _validation = { + 'skillsets': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'skillsets': {'key': 'value', 'type': '[Skillset]'}, + } + + def __init__( + self, + **kwargs + ): + super(ListSkillsetsResult, self).__init__(**kwargs) + self.skillsets = None + + +class ListSynonymMapsResult(msrest.serialization.Model): + """Response from a List SynonymMaps request. If successful, it includes the full definitions of all synonym maps. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar synonym_maps: Required. The synonym maps in the Search service. + :vartype synonym_maps: list[~search_service_client.models.SynonymMap] + """ + + _validation = { + 'synonym_maps': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'synonym_maps': {'key': 'value', 'type': '[SynonymMap]'}, + } + + def __init__( + self, + **kwargs + ): + super(ListSynonymMapsResult, self).__init__(**kwargs) + self.synonym_maps = None + + +class MagnitudeScoringFunction(ScoringFunction): + """Defines a function that boosts scores based on the magnitude of a numeric field. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. Constant filled by server. + :type type: str + :param field_name: Required. The name of the field used as input to the scoring function. + :type field_name: str + :param boost: Required. A multiplier for the raw score. Must be a positive number not equal to + 1.0. + :type boost: float + :param interpolation: A value indicating how boosting will be interpolated across document + scores; defaults to "Linear". Possible values include: 'linear', 'constant', 'quadratic', + 'logarithmic'. + :type interpolation: str or ~search_service_client.models.ScoringFunctionInterpolation + :param parameters: Required. Parameter values for the magnitude scoring function. + :type parameters: ~search_service_client.models.MagnitudeScoringParameters + """ + + _validation = { + 'type': {'required': True}, + 'field_name': {'required': True}, + 'boost': {'required': True}, + 'parameters': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'field_name': {'key': 'fieldName', 'type': 'str'}, + 'boost': {'key': 'boost', 'type': 'float'}, + 'interpolation': {'key': 'interpolation', 'type': 'str'}, + 'parameters': {'key': 'magnitude', 'type': 'MagnitudeScoringParameters'}, + } + + def __init__( + self, + **kwargs + ): + super(MagnitudeScoringFunction, self).__init__(**kwargs) + self.type = 'magnitude' + self.parameters = kwargs.get('parameters', None) + + +class MagnitudeScoringParameters(msrest.serialization.Model): + """Provides parameter values to a magnitude scoring function. + + All required parameters must be populated in order to send to Azure. + + :param boosting_range_start: Required. The field value at which boosting starts. + :type boosting_range_start: float + :param boosting_range_end: Required. The field value at which boosting ends. + :type boosting_range_end: float + :param should_boost_beyond_range_by_constant: A value indicating whether to apply a constant + boost for field values beyond the range end value; default is false. + :type should_boost_beyond_range_by_constant: bool + """ + + _validation = { + 'boosting_range_start': {'required': True}, + 'boosting_range_end': {'required': True}, + } + + _attribute_map = { + 'boosting_range_start': {'key': 'boostingRangeStart', 'type': 'float'}, + 'boosting_range_end': {'key': 'boostingRangeEnd', 'type': 'float'}, + 'should_boost_beyond_range_by_constant': {'key': 'constantBoostBeyondRange', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(MagnitudeScoringParameters, self).__init__(**kwargs) + self.boosting_range_start = kwargs.get('boosting_range_start', None) + self.boosting_range_end = kwargs.get('boosting_range_end', None) + self.should_boost_beyond_range_by_constant = kwargs.get('should_boost_beyond_range_by_constant', None) + + +class MappingCharFilter(CharFilter): + """A character filter that applies mappings defined with the mappings option. Matching is greedy (longest pattern matching at a given point wins). Replacement is allowed to be the empty string. This character filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the char filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param mappings: Required. A list of mappings of the following format: "a=>b" (all occurrences + of the character "a" will be replaced with character "b"). + :type mappings: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'mappings': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'mappings': {'key': 'mappings', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(MappingCharFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.MappingCharFilter' + self.mappings = kwargs.get('mappings', None) + + +class MergeSkill(Skill): + """A skill for merging two or more strings into a single unified string, with an optional user-defined delimiter separating each component part. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param insert_pre_tag: The tag indicates the start of the merged text. By default, the tag is + an empty space. + :type insert_pre_tag: str + :param insert_post_tag: The tag indicates the end of the merged text. By default, the tag is an + empty space. + :type insert_post_tag: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'insert_pre_tag': {'key': 'insertPreTag', 'type': 'str'}, + 'insert_post_tag': {'key': 'insertPostTag', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(MergeSkill, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Skills.Text.MergeSkill' + self.insert_pre_tag = kwargs.get('insert_pre_tag', " ") + self.insert_post_tag = kwargs.get('insert_post_tag', " ") + + +class MicrosoftLanguageStemmingTokenizer(Tokenizer): + """Divides text using language-specific rules and reduces words to their base forms. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Tokens longer than the maximum length are + split. Maximum token length that can be used is 300 characters. Tokens longer than 300 + characters are first split into tokens of length 300 and then each of those tokens is split + based on the max token length set. Default is 255. + :type max_token_length: int + :param is_search_tokenizer: A value indicating how the tokenizer is used. Set to true if used + as the search tokenizer, set to false if used as the indexing tokenizer. Default is false. + :type is_search_tokenizer: bool + :param language: The language to use. The default is English. Possible values include: + 'arabic', 'bangla', 'bulgarian', 'catalan', 'croatian', 'czech', 'danish', 'dutch', 'english', + 'estonian', 'finnish', 'french', 'german', 'greek', 'gujarati', 'hebrew', 'hindi', 'hungarian', + 'icelandic', 'indonesian', 'italian', 'kannada', 'latvian', 'lithuanian', 'malay', 'malayalam', + 'marathi', 'norwegianBokmaal', 'polish', 'portuguese', 'portugueseBrazilian', 'punjabi', + 'romanian', 'russian', 'serbianCyrillic', 'serbianLatin', 'slovak', 'slovenian', 'spanish', + 'swedish', 'tamil', 'telugu', 'turkish', 'ukrainian', 'urdu'. + :type language: str or ~search_service_client.models.MicrosoftStemmingTokenizerLanguage + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + 'is_search_tokenizer': {'key': 'isSearchTokenizer', 'type': 'bool'}, + 'language': {'key': 'language', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(MicrosoftLanguageStemmingTokenizer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.MicrosoftLanguageStemmingTokenizer' + self.max_token_length = kwargs.get('max_token_length', 255) + self.is_search_tokenizer = kwargs.get('is_search_tokenizer', False) + self.language = kwargs.get('language', None) + + +class MicrosoftLanguageTokenizer(Tokenizer): + """Divides text using language-specific rules. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Tokens longer than the maximum length are + split. Maximum token length that can be used is 300 characters. Tokens longer than 300 + characters are first split into tokens of length 300 and then each of those tokens is split + based on the max token length set. Default is 255. + :type max_token_length: int + :param is_search_tokenizer: A value indicating how the tokenizer is used. Set to true if used + as the search tokenizer, set to false if used as the indexing tokenizer. Default is false. + :type is_search_tokenizer: bool + :param language: The language to use. The default is English. Possible values include: + 'bangla', 'bulgarian', 'catalan', 'chineseSimplified', 'chineseTraditional', 'croatian', + 'czech', 'danish', 'dutch', 'english', 'french', 'german', 'greek', 'gujarati', 'hindi', + 'icelandic', 'indonesian', 'italian', 'japanese', 'kannada', 'korean', 'malay', 'malayalam', + 'marathi', 'norwegianBokmaal', 'polish', 'portuguese', 'portugueseBrazilian', 'punjabi', + 'romanian', 'russian', 'serbianCyrillic', 'serbianLatin', 'slovenian', 'spanish', 'swedish', + 'tamil', 'telugu', 'thai', 'ukrainian', 'urdu', 'vietnamese'. + :type language: str or ~search_service_client.models.MicrosoftTokenizerLanguage + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + 'is_search_tokenizer': {'key': 'isSearchTokenizer', 'type': 'bool'}, + 'language': {'key': 'language', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(MicrosoftLanguageTokenizer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.MicrosoftLanguageTokenizer' + self.max_token_length = kwargs.get('max_token_length', 255) + self.is_search_tokenizer = kwargs.get('is_search_tokenizer', False) + self.language = kwargs.get('language', None) + + +class NGramTokenFilter(TokenFilter): + """Generates n-grams of the given size(s). This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param min_gram: The minimum n-gram length. Default is 1. Must be less than the value of + maxGram. + :type min_gram: int + :param max_gram: The maximum n-gram length. Default is 2. + :type max_gram: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min_gram': {'key': 'minGram', 'type': 'int'}, + 'max_gram': {'key': 'maxGram', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(NGramTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.NGramTokenFilter' + self.min_gram = kwargs.get('min_gram', 1) + self.max_gram = kwargs.get('max_gram', 2) + + +class NGramTokenFilterV2(TokenFilter): + """Generates n-grams of the given size(s). This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param min_gram: The minimum n-gram length. Default is 1. Maximum is 300. Must be less than the + value of maxGram. + :type min_gram: int + :param max_gram: The maximum n-gram length. Default is 2. Maximum is 300. + :type max_gram: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'min_gram': {'maximum': 300}, + 'max_gram': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min_gram': {'key': 'minGram', 'type': 'int'}, + 'max_gram': {'key': 'maxGram', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(NGramTokenFilterV2, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.NGramTokenFilterV2' + self.min_gram = kwargs.get('min_gram', 1) + self.max_gram = kwargs.get('max_gram', 2) + + +class NGramTokenizer(Tokenizer): + """Tokenizes the input into n-grams of the given size(s). This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param min_gram: The minimum n-gram length. Default is 1. Maximum is 300. Must be less than the + value of maxGram. + :type min_gram: int + :param max_gram: The maximum n-gram length. Default is 2. Maximum is 300. + :type max_gram: int + :param token_chars: Character classes to keep in the tokens. + :type token_chars: list[str or ~search_service_client.models.TokenCharacterKind] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'min_gram': {'maximum': 300}, + 'max_gram': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min_gram': {'key': 'minGram', 'type': 'int'}, + 'max_gram': {'key': 'maxGram', 'type': 'int'}, + 'token_chars': {'key': 'tokenChars', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(NGramTokenizer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.NGramTokenizer' + self.min_gram = kwargs.get('min_gram', 1) + self.max_gram = kwargs.get('max_gram', 2) + self.token_chars = kwargs.get('token_chars', None) + + +class OcrSkill(Skill): + """A skill that extracts text from image files. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param text_extraction_algorithm: A value indicating which algorithm to use for extracting + text. Default is printed. Possible values include: 'printed', 'handwritten'. + :type text_extraction_algorithm: str or ~search_service_client.models.TextExtractionAlgorithm + :param default_language_code: A value indicating which language code to use. Default is en. + Possible values include: 'zh-Hans', 'zh-Hant', 'cs', 'da', 'nl', 'en', 'fi', 'fr', 'de', 'el', + 'hu', 'it', 'ja', 'ko', 'nb', 'pl', 'pt', 'ru', 'es', 'sv', 'tr', 'ar', 'ro', 'sr-Cyrl', 'sr- + Latn', 'sk'. + :type default_language_code: str or ~search_service_client.models.OcrSkillLanguage + :param should_detect_orientation: A value indicating to turn orientation detection on or not. + Default is false. + :type should_detect_orientation: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'text_extraction_algorithm': {'key': 'textExtractionAlgorithm', 'type': 'str'}, + 'default_language_code': {'key': 'defaultLanguageCode', 'type': 'str'}, + 'should_detect_orientation': {'key': 'detectOrientation', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(OcrSkill, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Skills.Vision.OcrSkill' + self.text_extraction_algorithm = kwargs.get('text_extraction_algorithm', None) + self.default_language_code = kwargs.get('default_language_code', None) + self.should_detect_orientation = kwargs.get('should_detect_orientation', False) + + +class OutputFieldMappingEntry(msrest.serialization.Model): + """Output field mapping for a skill. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the output defined by the skill. + :type name: str + :param target_name: The target name of the output. It is optional and default to name. + :type target_name: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'target_name': {'key': 'targetName', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(OutputFieldMappingEntry, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.target_name = kwargs.get('target_name', None) + + +class PathHierarchyTokenizerV2(Tokenizer): + """Tokenizer for path-like hierarchies. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param delimiter: The delimiter character to use. Default is "/". + :type delimiter: str + :param replacement: A value that, if set, replaces the delimiter character. Default is "/". + :type replacement: str + :param max_token_length: The maximum token length. Default and maximum is 300. + :type max_token_length: int + :param reverse_token_order: A value indicating whether to generate tokens in reverse order. + Default is false. + :type reverse_token_order: bool + :param number_of_tokens_to_skip: The number of initial tokens to skip. Default is 0. + :type number_of_tokens_to_skip: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'delimiter': {'key': 'delimiter', 'type': 'str'}, + 'replacement': {'key': 'replacement', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + 'reverse_token_order': {'key': 'reverse', 'type': 'bool'}, + 'number_of_tokens_to_skip': {'key': 'skip', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(PathHierarchyTokenizerV2, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.PathHierarchyTokenizerV2' + self.delimiter = kwargs.get('delimiter', "/") + self.replacement = kwargs.get('replacement', "/") + self.max_token_length = kwargs.get('max_token_length', 300) + self.reverse_token_order = kwargs.get('reverse_token_order', False) + self.number_of_tokens_to_skip = kwargs.get('number_of_tokens_to_skip', 0) + + +class PatternAnalyzer(Analyzer): + """Flexibly separates text into terms via a regular expression pattern. This analyzer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the analyzer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param lower_case_terms: A value indicating whether terms should be lower-cased. Default is + true. + :type lower_case_terms: bool + :param pattern: A regular expression pattern to match token separators. Default is an + expression that matches one or more whitespace characters. + :type pattern: str + :param flags: Regular expression flags. Possible values include: 'CANON_EQ', + 'CASE_INSENSITIVE', 'COMMENTS', 'DOTALL', 'LITERAL', 'MULTILINE', 'UNICODE_CASE', 'UNIX_LINES'. + :type flags: str or ~search_service_client.models.RegexFlags + :param stopwords: A list of stopwords. + :type stopwords: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'lower_case_terms': {'key': 'lowercase', 'type': 'bool'}, + 'pattern': {'key': 'pattern', 'type': 'str'}, + 'flags': {'key': 'flags', 'type': 'str'}, + 'stopwords': {'key': 'stopwords', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(PatternAnalyzer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.PatternAnalyzer' + self.lower_case_terms = kwargs.get('lower_case_terms', True) + self.pattern = kwargs.get('pattern', "\W+") + self.flags = kwargs.get('flags', None) + self.stopwords = kwargs.get('stopwords', None) + + +class PatternCaptureTokenFilter(TokenFilter): + """Uses Java regexes to emit multiple tokens - one for each capture group in one or more patterns. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param patterns: Required. A list of patterns to match against each token. + :type patterns: list[str] + :param preserve_original: A value indicating whether to return the original token even if one + of the patterns matches. Default is true. + :type preserve_original: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'patterns': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'patterns': {'key': 'patterns', 'type': '[str]'}, + 'preserve_original': {'key': 'preserveOriginal', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(PatternCaptureTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.PatternCaptureTokenFilter' + self.patterns = kwargs.get('patterns', None) + self.preserve_original = kwargs.get('preserve_original', True) + + +class PatternReplaceCharFilter(CharFilter): + """A character filter that replaces characters in the input string. It uses a regular expression to identify character sequences to preserve and a replacement pattern to identify characters to replace. For example, given the input text "aa bb aa bb", pattern "(aa)\s+(bb)", and replacement "$1#$2", the result would be "aa#bb aa#bb". This character filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the char filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param pattern: Required. A regular expression pattern. + :type pattern: str + :param replacement: Required. The replacement text. + :type replacement: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'pattern': {'required': True}, + 'replacement': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'pattern': {'key': 'pattern', 'type': 'str'}, + 'replacement': {'key': 'replacement', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PatternReplaceCharFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.PatternReplaceCharFilter' + self.pattern = kwargs.get('pattern', None) + self.replacement = kwargs.get('replacement', None) + + +class PatternReplaceTokenFilter(TokenFilter): + """A character filter that replaces characters in the input string. It uses a regular expression to identify character sequences to preserve and a replacement pattern to identify characters to replace. For example, given the input text "aa bb aa bb", pattern "(aa)\s+(bb)", and replacement "$1#$2", the result would be "aa#bb aa#bb". This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param pattern: Required. A regular expression pattern. + :type pattern: str + :param replacement: Required. The replacement text. + :type replacement: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'pattern': {'required': True}, + 'replacement': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'pattern': {'key': 'pattern', 'type': 'str'}, + 'replacement': {'key': 'replacement', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PatternReplaceTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.PatternReplaceTokenFilter' + self.pattern = kwargs.get('pattern', None) + self.replacement = kwargs.get('replacement', None) + + +class PatternTokenizer(Tokenizer): + """Tokenizer that uses regex pattern matching to construct distinct tokens. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param pattern: A regular expression pattern to match token separators. Default is an + expression that matches one or more whitespace characters. + :type pattern: str + :param flags: Regular expression flags. Possible values include: 'CANON_EQ', + 'CASE_INSENSITIVE', 'COMMENTS', 'DOTALL', 'LITERAL', 'MULTILINE', 'UNICODE_CASE', 'UNIX_LINES'. + :type flags: str or ~search_service_client.models.RegexFlags + :param group: The zero-based ordinal of the matching group in the regular expression pattern to + extract into tokens. Use -1 if you want to use the entire pattern to split the input into + tokens, irrespective of matching groups. Default is -1. + :type group: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'pattern': {'key': 'pattern', 'type': 'str'}, + 'flags': {'key': 'flags', 'type': 'str'}, + 'group': {'key': 'group', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(PatternTokenizer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.PatternTokenizer' + self.pattern = kwargs.get('pattern', "\W+") + self.flags = kwargs.get('flags', None) + self.group = kwargs.get('group', -1) + + +class PhoneticTokenFilter(TokenFilter): + """Create tokens for phonetic matches. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param encoder: The phonetic encoder to use. Default is "metaphone". Possible values include: + 'metaphone', 'doubleMetaphone', 'soundex', 'refinedSoundex', 'caverphone1', 'caverphone2', + 'cologne', 'nysiis', 'koelnerPhonetik', 'haasePhonetik', 'beiderMorse'. + :type encoder: str or ~search_service_client.models.PhoneticEncoder + :param replace_original_tokens: A value indicating whether encoded tokens should replace + original tokens. If false, encoded tokens are added as synonyms. Default is true. + :type replace_original_tokens: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'encoder': {'key': 'encoder', 'type': 'str'}, + 'replace_original_tokens': {'key': 'replace', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(PhoneticTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.PhoneticTokenFilter' + self.encoder = kwargs.get('encoder', None) + self.replace_original_tokens = kwargs.get('replace_original_tokens', True) + + +class RequestOptions(msrest.serialization.Model): + """Parameter group. + + :param x_ms_client_request_id: The tracking ID sent with the request to help with debugging. + :type x_ms_client_request_id: str + """ + + _attribute_map = { + 'x_ms_client_request_id': {'key': 'x-ms-client-request-id', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(RequestOptions, self).__init__(**kwargs) + self.x_ms_client_request_id = kwargs.get('x_ms_client_request_id', None) + + +class ResourceCounter(msrest.serialization.Model): + """Represents a resource's usage and quota. + + All required parameters must be populated in order to send to Azure. + + :param usage: Required. The resource usage amount. + :type usage: long + :param quota: The resource amount quota. + :type quota: long + """ + + _validation = { + 'usage': {'required': True}, + } + + _attribute_map = { + 'usage': {'key': 'usage', 'type': 'long'}, + 'quota': {'key': 'quota', 'type': 'long'}, + } + + def __init__( + self, + **kwargs + ): + super(ResourceCounter, self).__init__(**kwargs) + self.usage = kwargs.get('usage', None) + self.quota = kwargs.get('quota', None) + + +class ScoringProfile(msrest.serialization.Model): + """Defines parameters for a search index that influence scoring in search queries. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the scoring profile. + :type name: str + :param text_weights: Parameters that boost scoring based on text matches in certain index + fields. + :type text_weights: ~search_service_client.models.TextWeights + :param functions: The collection of functions that influence the scoring of documents. + :type functions: list[~search_service_client.models.ScoringFunction] + :param function_aggregation: A value indicating how the results of individual scoring functions + should be combined. Defaults to "Sum". Ignored if there are no scoring functions. Possible + values include: 'sum', 'average', 'minimum', 'maximum', 'firstMatching'. + :type function_aggregation: str or ~search_service_client.models.ScoringFunctionAggregation + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'text_weights': {'key': 'text', 'type': 'TextWeights'}, + 'functions': {'key': 'functions', 'type': '[ScoringFunction]'}, + 'function_aggregation': {'key': 'functionAggregation', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ScoringProfile, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.text_weights = kwargs.get('text_weights', None) + self.functions = kwargs.get('functions', None) + self.function_aggregation = kwargs.get('function_aggregation', None) + + +class SearchError(msrest.serialization.Model): + """Describes an error condition for the Azure Cognitive Search API. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar code: One of a server-defined set of error codes. + :vartype code: str + :ivar message: Required. A human-readable representation of the error. + :vartype message: str + :ivar details: An array of details about specific errors that led to this reported error. + :vartype details: list[~search_service_client.models.SearchError] + """ + + _validation = { + 'code': {'readonly': True}, + 'message': {'required': True, 'readonly': True}, + 'details': {'readonly': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[SearchError]'}, + } + + def __init__( + self, + **kwargs + ): + super(SearchError, self).__init__(**kwargs) + self.code = None + self.message = None + self.details = None + + +class SentimentSkill(Skill): + """Text analytics positive-negative sentiment analysis, scored as a floating point value in a range of zero to 1. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param default_language_code: A value indicating which language code to use. Default is en. + Possible values include: 'da', 'nl', 'en', 'fi', 'fr', 'de', 'el', 'it', 'no', 'pl', 'pt-PT', + 'ru', 'es', 'sv', 'tr'. + :type default_language_code: str or ~search_service_client.models.SentimentSkillLanguage + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'default_language_code': {'key': 'defaultLanguageCode', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SentimentSkill, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Skills.Text.SentimentSkill' + self.default_language_code = kwargs.get('default_language_code', None) + + +class ServiceCounters(msrest.serialization.Model): + """Represents service-level resource counters and quotas. + + All required parameters must be populated in order to send to Azure. + + :param document_counter: Required. Total number of documents across all indexes in the service. + :type document_counter: ~search_service_client.models.ResourceCounter + :param index_counter: Required. Total number of indexes. + :type index_counter: ~search_service_client.models.ResourceCounter + :param indexer_counter: Required. Total number of indexers. + :type indexer_counter: ~search_service_client.models.ResourceCounter + :param data_source_counter: Required. Total number of data sources. + :type data_source_counter: ~search_service_client.models.ResourceCounter + :param storage_size_counter: Required. Total size of used storage in bytes. + :type storage_size_counter: ~search_service_client.models.ResourceCounter + :param synonym_map_counter: Required. Total number of synonym maps. + :type synonym_map_counter: ~search_service_client.models.ResourceCounter + :param skillset_counter: Required. Total number of skillsets. + :type skillset_counter: ~search_service_client.models.ResourceCounter + """ + + _validation = { + 'document_counter': {'required': True}, + 'index_counter': {'required': True}, + 'indexer_counter': {'required': True}, + 'data_source_counter': {'required': True}, + 'storage_size_counter': {'required': True}, + 'synonym_map_counter': {'required': True}, + 'skillset_counter': {'required': True}, + } + + _attribute_map = { + 'document_counter': {'key': 'documentCount', 'type': 'ResourceCounter'}, + 'index_counter': {'key': 'indexesCount', 'type': 'ResourceCounter'}, + 'indexer_counter': {'key': 'indexersCount', 'type': 'ResourceCounter'}, + 'data_source_counter': {'key': 'dataSourcesCount', 'type': 'ResourceCounter'}, + 'storage_size_counter': {'key': 'storageSize', 'type': 'ResourceCounter'}, + 'synonym_map_counter': {'key': 'synonymMaps', 'type': 'ResourceCounter'}, + 'skillset_counter': {'key': 'skillsetCount', 'type': 'ResourceCounter'}, + } + + def __init__( + self, + **kwargs + ): + super(ServiceCounters, self).__init__(**kwargs) + self.document_counter = kwargs.get('document_counter', None) + self.index_counter = kwargs.get('index_counter', None) + self.indexer_counter = kwargs.get('indexer_counter', None) + self.data_source_counter = kwargs.get('data_source_counter', None) + self.storage_size_counter = kwargs.get('storage_size_counter', None) + self.synonym_map_counter = kwargs.get('synonym_map_counter', None) + self.skillset_counter = kwargs.get('skillset_counter', None) + + +class ServiceLimits(msrest.serialization.Model): + """Represents various service level limits. + + :param max_fields_per_index: The maximum allowed fields per index. + :type max_fields_per_index: int + :param max_field_nesting_depth_per_index: The maximum depth which you can nest sub-fields in an + index, including the top-level complex field. For example, a/b/c has a nesting depth of 3. + :type max_field_nesting_depth_per_index: int + :param max_complex_collection_fields_per_index: The maximum number of fields of type + Collection(Edm.ComplexType) allowed in an index. + :type max_complex_collection_fields_per_index: int + :param max_complex_objects_in_collections_per_document: The maximum number of objects in + complex collections allowed per document. + :type max_complex_objects_in_collections_per_document: int + """ + + _attribute_map = { + 'max_fields_per_index': {'key': 'maxFieldsPerIndex', 'type': 'int'}, + 'max_field_nesting_depth_per_index': {'key': 'maxFieldNestingDepthPerIndex', 'type': 'int'}, + 'max_complex_collection_fields_per_index': {'key': 'maxComplexCollectionFieldsPerIndex', 'type': 'int'}, + 'max_complex_objects_in_collections_per_document': {'key': 'maxComplexObjectsInCollectionsPerDocument', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(ServiceLimits, self).__init__(**kwargs) + self.max_fields_per_index = kwargs.get('max_fields_per_index', None) + self.max_field_nesting_depth_per_index = kwargs.get('max_field_nesting_depth_per_index', None) + self.max_complex_collection_fields_per_index = kwargs.get('max_complex_collection_fields_per_index', None) + self.max_complex_objects_in_collections_per_document = kwargs.get('max_complex_objects_in_collections_per_document', None) + + +class ServiceStatistics(msrest.serialization.Model): + """Response from a get service statistics request. If successful, it includes service level counters and limits. + + All required parameters must be populated in order to send to Azure. + + :param counters: Required. Service level resource counters. + :type counters: ~search_service_client.models.ServiceCounters + :param limits: Required. Service level general limits. + :type limits: ~search_service_client.models.ServiceLimits + """ + + _validation = { + 'counters': {'required': True}, + 'limits': {'required': True}, + } + + _attribute_map = { + 'counters': {'key': 'counters', 'type': 'ServiceCounters'}, + 'limits': {'key': 'limits', 'type': 'ServiceLimits'}, + } + + def __init__( + self, + **kwargs + ): + super(ServiceStatistics, self).__init__(**kwargs) + self.counters = kwargs.get('counters', None) + self.limits = kwargs.get('limits', None) + + +class ShaperSkill(Skill): + """A skill for reshaping the outputs. It creates a complex type to support composite fields (also known as multipart fields). + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + } + + def __init__( + self, + **kwargs + ): + super(ShaperSkill, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Skills.Util.ShaperSkill' + + +class ShingleTokenFilter(TokenFilter): + """Creates combinations of tokens as a single token. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param max_shingle_size: The maximum shingle size. Default and minimum value is 2. + :type max_shingle_size: int + :param min_shingle_size: The minimum shingle size. Default and minimum value is 2. Must be less + than the value of maxShingleSize. + :type min_shingle_size: int + :param output_unigrams: A value indicating whether the output stream will contain the input + tokens (unigrams) as well as shingles. Default is true. + :type output_unigrams: bool + :param output_unigrams_if_no_shingles: A value indicating whether to output unigrams for those + times when no shingles are available. This property takes precedence when outputUnigrams is set + to false. Default is false. + :type output_unigrams_if_no_shingles: bool + :param token_separator: The string to use when joining adjacent tokens to form a shingle. + Default is a single space (" "). + :type token_separator: str + :param filter_token: The string to insert for each position at which there is no token. Default + is an underscore ("_"). + :type filter_token: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_shingle_size': {'minimum': 2}, + 'min_shingle_size': {'minimum': 2}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_shingle_size': {'key': 'maxShingleSize', 'type': 'int'}, + 'min_shingle_size': {'key': 'minShingleSize', 'type': 'int'}, + 'output_unigrams': {'key': 'outputUnigrams', 'type': 'bool'}, + 'output_unigrams_if_no_shingles': {'key': 'outputUnigramsIfNoShingles', 'type': 'bool'}, + 'token_separator': {'key': 'tokenSeparator', 'type': 'str'}, + 'filter_token': {'key': 'filterToken', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ShingleTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.ShingleTokenFilter' + self.max_shingle_size = kwargs.get('max_shingle_size', 2) + self.min_shingle_size = kwargs.get('min_shingle_size', 2) + self.output_unigrams = kwargs.get('output_unigrams', True) + self.output_unigrams_if_no_shingles = kwargs.get('output_unigrams_if_no_shingles', False) + self.token_separator = kwargs.get('token_separator', " ") + self.filter_token = kwargs.get('filter_token', "_") + + +class Skillset(msrest.serialization.Model): + """A list of skills. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the skillset. + :type name: str + :param description: Required. The description of the skillset. + :type description: str + :param skills: Required. A list of skills in the skillset. + :type skills: list[~search_service_client.models.Skill] + :param cognitive_services_account: Details about cognitive services to be used when running + skills. + :type cognitive_services_account: ~search_service_client.models.CognitiveServicesAccount + :param e_tag: The ETag of the skillset. + :type e_tag: str + """ + + _validation = { + 'name': {'required': True}, + 'description': {'required': True}, + 'skills': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'skills': {'key': 'skills', 'type': '[Skill]'}, + 'cognitive_services_account': {'key': 'cognitiveServices', 'type': 'CognitiveServicesAccount'}, + 'e_tag': {'key': '@odata\\.etag', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Skillset, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.description = kwargs.get('description', None) + self.skills = kwargs.get('skills', None) + self.cognitive_services_account = kwargs.get('cognitive_services_account', None) + self.e_tag = kwargs.get('e_tag', None) + + +class SnowballTokenFilter(TokenFilter): + """A filter that stems words using a Snowball-generated stemmer. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param language: Required. The language to use. Possible values include: 'armenian', 'basque', + 'catalan', 'danish', 'dutch', 'english', 'finnish', 'french', 'german', 'german2', 'hungarian', + 'italian', 'kp', 'lovins', 'norwegian', 'porter', 'portuguese', 'romanian', 'russian', + 'spanish', 'swedish', 'turkish'. + :type language: str or ~search_service_client.models.SnowballTokenFilterLanguage + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'language': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'language': {'key': 'language', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SnowballTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.SnowballTokenFilter' + self.language = kwargs.get('language', None) + + +class SoftDeleteColumnDeletionDetectionPolicy(DataDeletionDetectionPolicy): + """Defines a data deletion detection policy that implements a soft-deletion strategy. It determines whether an item should be deleted based on the value of a designated 'soft delete' column. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param soft_delete_column_name: The name of the column to use for soft-deletion detection. + :type soft_delete_column_name: str + :param soft_delete_marker_value: The marker value that identifies an item as deleted. + :type soft_delete_marker_value: str + """ + + _validation = { + 'odata_type': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'soft_delete_column_name': {'key': 'softDeleteColumnName', 'type': 'str'}, + 'soft_delete_marker_value': {'key': 'softDeleteMarkerValue', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SoftDeleteColumnDeletionDetectionPolicy, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy' + self.soft_delete_column_name = kwargs.get('soft_delete_column_name', None) + self.soft_delete_marker_value = kwargs.get('soft_delete_marker_value', None) + + +class SplitSkill(Skill): + """A skill to split a string into chunks of text. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param default_language_code: A value indicating which language code to use. Default is en. + Possible values include: 'da', 'de', 'en', 'es', 'fi', 'fr', 'it', 'ko', 'pt'. + :type default_language_code: str or ~search_service_client.models.SplitSkillLanguage + :param text_split_mode: A value indicating which split mode to perform. Possible values + include: 'pages', 'sentences'. + :type text_split_mode: str or ~search_service_client.models.TextSplitMode + :param maximum_page_length: The desired maximum page length. Default is 10000. + :type maximum_page_length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'default_language_code': {'key': 'defaultLanguageCode', 'type': 'str'}, + 'text_split_mode': {'key': 'textSplitMode', 'type': 'str'}, + 'maximum_page_length': {'key': 'maximumPageLength', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(SplitSkill, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Skills.Text.SplitSkill' + self.default_language_code = kwargs.get('default_language_code', None) + self.text_split_mode = kwargs.get('text_split_mode', None) + self.maximum_page_length = kwargs.get('maximum_page_length', None) + + +class SqlIntegratedChangeTrackingPolicy(DataChangeDetectionPolicy): + """Defines a data change detection policy that captures changes using the Integrated Change Tracking feature of Azure SQL Database. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + """ + + _validation = { + 'odata_type': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SqlIntegratedChangeTrackingPolicy, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.SqlIntegratedChangeTrackingPolicy' + + +class StandardAnalyzer(Analyzer): + """Standard Apache Lucene analyzer; Composed of the standard tokenizer, lowercase filter and stop filter. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the analyzer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Default is 255. Tokens longer than the + maximum length are split. The maximum token length that can be used is 300 characters. + :type max_token_length: int + :param stopwords: A list of stopwords. + :type stopwords: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + 'stopwords': {'key': 'stopwords', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(StandardAnalyzer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.StandardAnalyzer' + self.max_token_length = kwargs.get('max_token_length', 255) + self.stopwords = kwargs.get('stopwords', None) + + +class StandardTokenizer(Tokenizer): + """Breaks text following the Unicode Text Segmentation rules. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Default is 255. Tokens longer than the + maximum length are split. + :type max_token_length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(StandardTokenizer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.StandardTokenizer' + self.max_token_length = kwargs.get('max_token_length', 255) + + +class StandardTokenizerV2(Tokenizer): + """Breaks text following the Unicode Text Segmentation rules. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Default is 255. Tokens longer than the + maximum length are split. The maximum token length that can be used is 300 characters. + :type max_token_length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(StandardTokenizerV2, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.StandardTokenizerV2' + self.max_token_length = kwargs.get('max_token_length', 255) + + +class StemmerOverrideTokenFilter(TokenFilter): + """Provides the ability to override other stemming filters with custom dictionary-based stemming. Any dictionary-stemmed terms will be marked as keywords so that they will not be stemmed with stemmers down the chain. Must be placed before any stemming filters. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param rules: Required. A list of stemming rules in the following format: "word => stem", for + example: "ran => run". + :type rules: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'rules': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'rules': {'key': 'rules', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(StemmerOverrideTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.StemmerOverrideTokenFilter' + self.rules = kwargs.get('rules', None) + + +class StemmerTokenFilter(TokenFilter): + """Language specific stemming filter. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param language: Required. The language to use. Possible values include: 'arabic', 'armenian', + 'basque', 'brazilian', 'bulgarian', 'catalan', 'czech', 'danish', 'dutch', 'dutchKp', + 'english', 'lightEnglish', 'minimalEnglish', 'possessiveEnglish', 'porter2', 'lovins', + 'finnish', 'lightFinnish', 'french', 'lightFrench', 'minimalFrench', 'galician', + 'minimalGalician', 'german', 'german2', 'lightGerman', 'minimalGerman', 'greek', 'hindi', + 'hungarian', 'lightHungarian', 'indonesian', 'irish', 'italian', 'lightItalian', 'sorani', + 'latvian', 'norwegian', 'lightNorwegian', 'minimalNorwegian', 'lightNynorsk', 'minimalNynorsk', + 'portuguese', 'lightPortuguese', 'minimalPortuguese', 'portugueseRslp', 'romanian', 'russian', + 'lightRussian', 'spanish', 'lightSpanish', 'swedish', 'lightSwedish', 'turkish'. + :type language: str or ~search_service_client.models.StemmerTokenFilterLanguage + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'language': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'language': {'key': 'language', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(StemmerTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.StemmerTokenFilter' + self.language = kwargs.get('language', None) + + +class StopAnalyzer(Analyzer): + """Divides text at non-letters; Applies the lowercase and stopword token filters. This analyzer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the analyzer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param stopwords: A list of stopwords. + :type stopwords: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'stopwords': {'key': 'stopwords', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(StopAnalyzer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.StopAnalyzer' + self.stopwords = kwargs.get('stopwords', None) + + +class StopwordsTokenFilter(TokenFilter): + """Removes stop words from a token stream. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param stopwords: The list of stopwords. This property and the stopwords list property cannot + both be set. + :type stopwords: list[str] + :param stopwords_list: A predefined list of stopwords to use. This property and the stopwords + property cannot both be set. Default is English. Possible values include: 'arabic', 'armenian', + 'basque', 'brazilian', 'bulgarian', 'catalan', 'czech', 'danish', 'dutch', 'english', + 'finnish', 'french', 'galician', 'german', 'greek', 'hindi', 'hungarian', 'indonesian', + 'irish', 'italian', 'latvian', 'norwegian', 'persian', 'portuguese', 'romanian', 'russian', + 'sorani', 'spanish', 'swedish', 'thai', 'turkish'. + :type stopwords_list: str or ~search_service_client.models.StopwordsList + :param ignore_case: A value indicating whether to ignore case. If true, all words are converted + to lower case first. Default is false. + :type ignore_case: bool + :param remove_trailing_stop_words: A value indicating whether to ignore the last search term if + it's a stop word. Default is true. + :type remove_trailing_stop_words: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'stopwords': {'key': 'stopwords', 'type': '[str]'}, + 'stopwords_list': {'key': 'stopwordsList', 'type': 'str'}, + 'ignore_case': {'key': 'ignoreCase', 'type': 'bool'}, + 'remove_trailing_stop_words': {'key': 'removeTrailing', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(StopwordsTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.StopwordsTokenFilter' + self.stopwords = kwargs.get('stopwords', None) + self.stopwords_list = kwargs.get('stopwords_list', None) + self.ignore_case = kwargs.get('ignore_case', False) + self.remove_trailing_stop_words = kwargs.get('remove_trailing_stop_words', True) + + +class Suggester(msrest.serialization.Model): + """Defines how the Suggest API should apply to a group of fields in the index. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the suggester. + :type name: str + :ivar search_mode: Required. A value indicating the capabilities of the suggester. Default + value: "analyzingInfixMatching". + :vartype search_mode: str + :param source_fields: Required. The list of field names to which the suggester applies. Each + field must be searchable. + :type source_fields: list[str] + """ + + _validation = { + 'name': {'required': True}, + 'search_mode': {'required': True, 'constant': True}, + 'source_fields': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'search_mode': {'key': 'searchMode', 'type': 'str'}, + 'source_fields': {'key': 'sourceFields', 'type': '[str]'}, + } + + search_mode = "analyzingInfixMatching" + + def __init__( + self, + **kwargs + ): + super(Suggester, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.source_fields = kwargs.get('source_fields', None) + + +class SynonymMap(msrest.serialization.Model): + """Represents a synonym map definition. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the synonym map. + :type name: str + :ivar format: Required. The format of the synonym map. Only the 'solr' format is currently + supported. Default value: "solr". + :vartype format: str + :param synonyms: Required. A series of synonym rules in the specified synonym map format. The + rules must be separated by newlines. + :type synonyms: str + :param encryption_key: A description of an encryption key that you create in Azure Key Vault. + This key is used to provide an additional level of encryption-at-rest for your data when you + want full assurance that no one, not even Microsoft, can decrypt your data in Azure Cognitive + Search. Once you have encrypted your data, it will always remain encrypted. Azure Cognitive + Search will ignore attempts to set this property to null. You can change this property as + needed if you want to rotate your encryption key; Your data will be unaffected. Encryption with + customer-managed keys is not available for free search services, and is only available for paid + services created on or after January 1, 2019. + :type encryption_key: ~search_service_client.models.EncryptionKey + :param e_tag: The ETag of the synonym map. + :type e_tag: str + """ + + _validation = { + 'name': {'required': True}, + 'format': {'required': True, 'constant': True}, + 'synonyms': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'format': {'key': 'format', 'type': 'str'}, + 'synonyms': {'key': 'synonyms', 'type': 'str'}, + 'encryption_key': {'key': 'encryptionKey', 'type': 'EncryptionKey'}, + 'e_tag': {'key': '@odata\\.etag', 'type': 'str'}, + } + + format = "solr" + + def __init__( + self, + **kwargs + ): + super(SynonymMap, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.synonyms = kwargs.get('synonyms', None) + self.encryption_key = kwargs.get('encryption_key', None) + self.e_tag = kwargs.get('e_tag', None) + + +class SynonymTokenFilter(TokenFilter): + """Matches single or multi-word synonyms in a token stream. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param synonyms: Required. A list of synonyms in following one of two formats: 1. incredible, + unbelievable, fabulous => amazing - all terms on the left side of => symbol will be replaced + with all terms on its right side; 2. incredible, unbelievable, fabulous, amazing - comma + separated list of equivalent words. Set the expand option to change how this list is + interpreted. + :type synonyms: list[str] + :param ignore_case: A value indicating whether to case-fold input for matching. Default is + false. + :type ignore_case: bool + :param expand: A value indicating whether all words in the list of synonyms (if => notation is + not used) will map to one another. If true, all words in the list of synonyms (if => notation + is not used) will map to one another. The following list: incredible, unbelievable, fabulous, + amazing is equivalent to: incredible, unbelievable, fabulous, amazing => incredible, + unbelievable, fabulous, amazing. If false, the following list: incredible, unbelievable, + fabulous, amazing will be equivalent to: incredible, unbelievable, fabulous, amazing => + incredible. Default is true. + :type expand: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'synonyms': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'synonyms': {'key': 'synonyms', 'type': '[str]'}, + 'ignore_case': {'key': 'ignoreCase', 'type': 'bool'}, + 'expand': {'key': 'expand', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(SynonymTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.SynonymTokenFilter' + self.synonyms = kwargs.get('synonyms', None) + self.ignore_case = kwargs.get('ignore_case', False) + self.expand = kwargs.get('expand', True) + + +class TagScoringFunction(ScoringFunction): + """Defines a function that boosts scores of documents with string values matching a given list of tags. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. Constant filled by server. + :type type: str + :param field_name: Required. The name of the field used as input to the scoring function. + :type field_name: str + :param boost: Required. A multiplier for the raw score. Must be a positive number not equal to + 1.0. + :type boost: float + :param interpolation: A value indicating how boosting will be interpolated across document + scores; defaults to "Linear". Possible values include: 'linear', 'constant', 'quadratic', + 'logarithmic'. + :type interpolation: str or ~search_service_client.models.ScoringFunctionInterpolation + :param parameters: Required. Parameter values for the tag scoring function. + :type parameters: ~search_service_client.models.TagScoringParameters + """ + + _validation = { + 'type': {'required': True}, + 'field_name': {'required': True}, + 'boost': {'required': True}, + 'parameters': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'field_name': {'key': 'fieldName', 'type': 'str'}, + 'boost': {'key': 'boost', 'type': 'float'}, + 'interpolation': {'key': 'interpolation', 'type': 'str'}, + 'parameters': {'key': 'tag', 'type': 'TagScoringParameters'}, + } + + def __init__( + self, + **kwargs + ): + super(TagScoringFunction, self).__init__(**kwargs) + self.type = 'tag' + self.parameters = kwargs.get('parameters', None) + + +class TagScoringParameters(msrest.serialization.Model): + """Provides parameter values to a tag scoring function. + + All required parameters must be populated in order to send to Azure. + + :param tags_parameter: Required. The name of the parameter passed in search queries to specify + the list of tags to compare against the target field. + :type tags_parameter: str + """ + + _validation = { + 'tags_parameter': {'required': True}, + } + + _attribute_map = { + 'tags_parameter': {'key': 'tagsParameter', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TagScoringParameters, self).__init__(**kwargs) + self.tags_parameter = kwargs.get('tags_parameter', None) + + +class TextTranslationSkill(Skill): + """A skill to translate text from one language to another. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param default_to_language_code: Required. The language code to translate documents into for + documents that don't specify the to language explicitly. Possible values include: 'af', 'ar', + 'bn', 'bs', 'bg', 'yue', 'ca', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'et', 'fj', + 'fil', 'fi', 'fr', 'de', 'el', 'ht', 'he', 'hi', 'mww', 'hu', 'is', 'id', 'it', 'ja', 'sw', + 'tlh', 'ko', 'lv', 'lt', 'mg', 'ms', 'mt', 'nb', 'fa', 'pl', 'pt', 'otq', 'ro', 'ru', 'sm', + 'sr-Cyrl', 'sr-Latn', 'sk', 'sl', 'es', 'sv', 'ty', 'ta', 'te', 'th', 'to', 'tr', 'uk', 'ur', + 'vi', 'cy', 'yua'. + :type default_to_language_code: str or + ~search_service_client.models.TextTranslationSkillLanguage + :param default_from_language_code: The language code to translate documents from for documents + that don't specify the from language explicitly. Possible values include: 'af', 'ar', 'bn', + 'bs', 'bg', 'yue', 'ca', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'et', 'fj', 'fil', + 'fi', 'fr', 'de', 'el', 'ht', 'he', 'hi', 'mww', 'hu', 'is', 'id', 'it', 'ja', 'sw', 'tlh', + 'ko', 'lv', 'lt', 'mg', 'ms', 'mt', 'nb', 'fa', 'pl', 'pt', 'otq', 'ro', 'ru', 'sm', 'sr-Cyrl', + 'sr-Latn', 'sk', 'sl', 'es', 'sv', 'ty', 'ta', 'te', 'th', 'to', 'tr', 'uk', 'ur', 'vi', 'cy', + 'yua'. + :type default_from_language_code: str or + ~search_service_client.models.TextTranslationSkillLanguage + :param suggested_from: The language code to translate documents from when neither the + fromLanguageCode input nor the defaultFromLanguageCode parameter are provided, and the + automatic language detection is unsuccessful. Default is en. Possible values include: 'af', + 'ar', 'bn', 'bs', 'bg', 'yue', 'ca', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'et', + 'fj', 'fil', 'fi', 'fr', 'de', 'el', 'ht', 'he', 'hi', 'mww', 'hu', 'is', 'id', 'it', 'ja', + 'sw', 'tlh', 'ko', 'lv', 'lt', 'mg', 'ms', 'mt', 'nb', 'fa', 'pl', 'pt', 'otq', 'ro', 'ru', + 'sm', 'sr-Cyrl', 'sr-Latn', 'sk', 'sl', 'es', 'sv', 'ty', 'ta', 'te', 'th', 'to', 'tr', 'uk', + 'ur', 'vi', 'cy', 'yua'. + :type suggested_from: str or ~search_service_client.models.TextTranslationSkillLanguage + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + 'default_to_language_code': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'default_to_language_code': {'key': 'defaultToLanguageCode', 'type': 'str'}, + 'default_from_language_code': {'key': 'defaultFromLanguageCode', 'type': 'str'}, + 'suggested_from': {'key': 'suggestedFrom', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TextTranslationSkill, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Skills.Text.TranslationSkill' + self.default_to_language_code = kwargs.get('default_to_language_code', None) + self.default_from_language_code = kwargs.get('default_from_language_code', None) + self.suggested_from = kwargs.get('suggested_from', None) + + +class TextWeights(msrest.serialization.Model): + """Defines weights on index fields for which matches should boost scoring in search queries. + + All required parameters must be populated in order to send to Azure. + + :param weights: Required. The dictionary of per-field weights to boost document scoring. The + keys are field names and the values are the weights for each field. + :type weights: dict[str, float] + """ + + _validation = { + 'weights': {'required': True}, + } + + _attribute_map = { + 'weights': {'key': 'weights', 'type': '{float}'}, + } + + def __init__( + self, + **kwargs + ): + super(TextWeights, self).__init__(**kwargs) + self.weights = kwargs.get('weights', None) + + +class TokenInfo(msrest.serialization.Model): + """Information about a token returned by an analyzer. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar token: Required. The token returned by the analyzer. + :vartype token: str + :ivar start_offset: Required. The index of the first character of the token in the input text. + :vartype start_offset: int + :ivar end_offset: Required. The index of the last character of the token in the input text. + :vartype end_offset: int + :ivar position: Required. The position of the token in the input text relative to other tokens. + The first token in the input text has position 0, the next has position 1, and so on. Depending + on the analyzer used, some tokens might have the same position, for example if they are + synonyms of each other. + :vartype position: int + """ + + _validation = { + 'token': {'required': True, 'readonly': True}, + 'start_offset': {'required': True, 'readonly': True}, + 'end_offset': {'required': True, 'readonly': True}, + 'position': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'token': {'key': 'token', 'type': 'str'}, + 'start_offset': {'key': 'startOffset', 'type': 'int'}, + 'end_offset': {'key': 'endOffset', 'type': 'int'}, + 'position': {'key': 'position', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(TokenInfo, self).__init__(**kwargs) + self.token = None + self.start_offset = None + self.end_offset = None + self.position = None + + +class TruncateTokenFilter(TokenFilter): + """Truncates the terms to a specific length. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param length: The length at which terms will be truncated. Default and maximum is 300. + :type length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'length': {'key': 'length', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(TruncateTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.TruncateTokenFilter' + self.length = kwargs.get('length', 300) + + +class UaxUrlEmailTokenizer(Tokenizer): + """Tokenizes urls and emails as one token. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Default is 255. Tokens longer than the + maximum length are split. The maximum token length that can be used is 300 characters. + :type max_token_length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(UaxUrlEmailTokenizer, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.UaxUrlEmailTokenizer' + self.max_token_length = kwargs.get('max_token_length', 255) + + +class UniqueTokenFilter(TokenFilter): + """Filters out tokens with same text as the previous token. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param only_on_same_position: A value indicating whether to remove duplicates only at the same + position. Default is false. + :type only_on_same_position: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'only_on_same_position': {'key': 'onlyOnSamePosition', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(UniqueTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.UniqueTokenFilter' + self.only_on_same_position = kwargs.get('only_on_same_position', False) + + +class WebApiSkill(Skill): + """A skill that can call a Web API endpoint, allowing you to extend a skillset by having it call your custom code. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param uri: Required. The url for the Web API. + :type uri: str + :param http_headers: The headers required to make the http request. + :type http_headers: dict[str, str] + :param http_method: The method for the http request. + :type http_method: str + :param timeout: The desired timeout for the request. Default is 30 seconds. + :type timeout: ~datetime.timedelta + :param batch_size: The desired batch size which indicates number of documents. + :type batch_size: int + :param degree_of_parallelism: If set, the number of parallel calls that can be made to the Web + API. + :type degree_of_parallelism: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + 'uri': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'uri': {'key': 'uri', 'type': 'str'}, + 'http_headers': {'key': 'httpHeaders', 'type': '{str}'}, + 'http_method': {'key': 'httpMethod', 'type': 'str'}, + 'timeout': {'key': 'timeout', 'type': 'duration'}, + 'batch_size': {'key': 'batchSize', 'type': 'int'}, + 'degree_of_parallelism': {'key': 'degreeOfParallelism', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(WebApiSkill, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Skills.Custom.WebApiSkill' + self.uri = kwargs.get('uri', None) + self.http_headers = kwargs.get('http_headers', None) + self.http_method = kwargs.get('http_method', None) + self.timeout = kwargs.get('timeout', None) + self.batch_size = kwargs.get('batch_size', None) + self.degree_of_parallelism = kwargs.get('degree_of_parallelism', None) + + +class WordDelimiterTokenFilter(TokenFilter): + """Splits words into subwords and performs optional transformations on subword groups. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param generate_word_parts: A value indicating whether to generate part words. If set, causes + parts of words to be generated; for example "AzureSearch" becomes "Azure" "Search". Default is + true. + :type generate_word_parts: bool + :param generate_number_parts: A value indicating whether to generate number subwords. Default + is true. + :type generate_number_parts: bool + :param catenate_words: A value indicating whether maximum runs of word parts will be catenated. + For example, if this is set to true, "Azure-Search" becomes "AzureSearch". Default is false. + :type catenate_words: bool + :param catenate_numbers: A value indicating whether maximum runs of number parts will be + catenated. For example, if this is set to true, "1-2" becomes "12". Default is false. + :type catenate_numbers: bool + :param catenate_all: A value indicating whether all subword parts will be catenated. For + example, if this is set to true, "Azure-Search-1" becomes "AzureSearch1". Default is false. + :type catenate_all: bool + :param split_on_case_change: A value indicating whether to split words on caseChange. For + example, if this is set to true, "AzureSearch" becomes "Azure" "Search". Default is true. + :type split_on_case_change: bool + :param preserve_original: A value indicating whether original words will be preserved and added + to the subword list. Default is false. + :type preserve_original: bool + :param split_on_numerics: A value indicating whether to split on numbers. For example, if this + is set to true, "Azure1Search" becomes "Azure" "1" "Search". Default is true. + :type split_on_numerics: bool + :param stem_english_possessive: A value indicating whether to remove trailing "'s" for each + subword. Default is true. + :type stem_english_possessive: bool + :param protected_words: A list of tokens to protect from being delimited. + :type protected_words: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'generate_word_parts': {'key': 'generateWordParts', 'type': 'bool'}, + 'generate_number_parts': {'key': 'generateNumberParts', 'type': 'bool'}, + 'catenate_words': {'key': 'catenateWords', 'type': 'bool'}, + 'catenate_numbers': {'key': 'catenateNumbers', 'type': 'bool'}, + 'catenate_all': {'key': 'catenateAll', 'type': 'bool'}, + 'split_on_case_change': {'key': 'splitOnCaseChange', 'type': 'bool'}, + 'preserve_original': {'key': 'preserveOriginal', 'type': 'bool'}, + 'split_on_numerics': {'key': 'splitOnNumerics', 'type': 'bool'}, + 'stem_english_possessive': {'key': 'stemEnglishPossessive', 'type': 'bool'}, + 'protected_words': {'key': 'protectedWords', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(WordDelimiterTokenFilter, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.WordDelimiterTokenFilter' + self.generate_word_parts = kwargs.get('generate_word_parts', True) + self.generate_number_parts = kwargs.get('generate_number_parts', True) + self.catenate_words = kwargs.get('catenate_words', False) + self.catenate_numbers = kwargs.get('catenate_numbers', False) + self.catenate_all = kwargs.get('catenate_all', False) + self.split_on_case_change = kwargs.get('split_on_case_change', True) + self.preserve_original = kwargs.get('preserve_original', False) + self.split_on_numerics = kwargs.get('split_on_numerics', True) + self.stem_english_possessive = kwargs.get('stem_english_possessive', True) + self.protected_words = kwargs.get('protected_words', None) diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/models/_models_py3.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/models/_models_py3.py new file mode 100644 index 000000000000..4afae06e3532 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/models/_models_py3.py @@ -0,0 +1,5678 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +import datetime +from typing import Dict, List, Optional, Union + +from azure.core.exceptions import HttpResponseError +import msrest.serialization + + +class AccessCondition(msrest.serialization.Model): + """Parameter group. + + :param if_match: Defines the If-Match condition. The operation will be performed only if the + ETag on the server matches this value. + :type if_match: str + :param if_none_match: Defines the If-None-Match condition. The operation will be performed only + if the ETag on the server does not match this value. + :type if_none_match: str + """ + + _attribute_map = { + 'if_match': {'key': 'If-Match', 'type': 'str'}, + 'if_none_match': {'key': 'If-None-Match', 'type': 'str'}, + } + + def __init__( + self, + *, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs + ): + super(AccessCondition, self).__init__(**kwargs) + self.if_match = if_match + self.if_none_match = if_none_match + + +class Analyzer(msrest.serialization.Model): + """Abstract base class for analyzers. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: CustomAnalyzer, PatternAnalyzer, StandardAnalyzer, StopAnalyzer. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the analyzer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.CustomAnalyzer': 'CustomAnalyzer', '#Microsoft.Azure.Search.PatternAnalyzer': 'PatternAnalyzer', '#Microsoft.Azure.Search.StandardAnalyzer': 'StandardAnalyzer', '#Microsoft.Azure.Search.StopAnalyzer': 'StopAnalyzer'} + } + + def __init__( + self, + *, + name: str, + **kwargs + ): + super(Analyzer, self).__init__(**kwargs) + self.odata_type = None + self.name = name + + +class AnalyzeRequest(msrest.serialization.Model): + """Specifies some text and analysis components used to break that text into tokens. + + All required parameters must be populated in order to send to Azure. + + :param text: Required. The text to break into tokens. + :type text: str + :param analyzer: The name of the analyzer to use to break the given text. If this parameter is + not specified, you must specify a tokenizer instead. The tokenizer and analyzer parameters are + mutually exclusive. Possible values include: 'ar.microsoft', 'ar.lucene', 'hy.lucene', + 'bn.microsoft', 'eu.lucene', 'bg.microsoft', 'bg.lucene', 'ca.microsoft', 'ca.lucene', 'zh- + Hans.microsoft', 'zh-Hans.lucene', 'zh-Hant.microsoft', 'zh-Hant.lucene', 'hr.microsoft', + 'cs.microsoft', 'cs.lucene', 'da.microsoft', 'da.lucene', 'nl.microsoft', 'nl.lucene', + 'en.microsoft', 'en.lucene', 'et.microsoft', 'fi.microsoft', 'fi.lucene', 'fr.microsoft', + 'fr.lucene', 'gl.lucene', 'de.microsoft', 'de.lucene', 'el.microsoft', 'el.lucene', + 'gu.microsoft', 'he.microsoft', 'hi.microsoft', 'hi.lucene', 'hu.microsoft', 'hu.lucene', + 'is.microsoft', 'id.microsoft', 'id.lucene', 'ga.lucene', 'it.microsoft', 'it.lucene', + 'ja.microsoft', 'ja.lucene', 'kn.microsoft', 'ko.microsoft', 'ko.lucene', 'lv.microsoft', + 'lv.lucene', 'lt.microsoft', 'ml.microsoft', 'ms.microsoft', 'mr.microsoft', 'nb.microsoft', + 'no.lucene', 'fa.lucene', 'pl.microsoft', 'pl.lucene', 'pt-BR.microsoft', 'pt-BR.lucene', 'pt- + PT.microsoft', 'pt-PT.lucene', 'pa.microsoft', 'ro.microsoft', 'ro.lucene', 'ru.microsoft', + 'ru.lucene', 'sr-cyrillic.microsoft', 'sr-latin.microsoft', 'sk.microsoft', 'sl.microsoft', + 'es.microsoft', 'es.lucene', 'sv.microsoft', 'sv.lucene', 'ta.microsoft', 'te.microsoft', + 'th.microsoft', 'th.lucene', 'tr.microsoft', 'tr.lucene', 'uk.microsoft', 'ur.microsoft', + 'vi.microsoft', 'standard.lucene', 'standardasciifolding.lucene', 'keyword', 'pattern', + 'simple', 'stop', 'whitespace'. + :type analyzer: str or ~search_service_client.models.AnalyzerName + :param tokenizer: The name of the tokenizer to use to break the given text. If this parameter + is not specified, you must specify an analyzer instead. The tokenizer and analyzer parameters + are mutually exclusive. Possible values include: 'classic', 'edgeNGram', 'keyword_v2', + 'letter', 'lowercase', 'microsoft_language_tokenizer', 'microsoft_language_stemming_tokenizer', + 'nGram', 'path_hierarchy_v2', 'pattern', 'standard_v2', 'uax_url_email', 'whitespace'. + :type tokenizer: str or ~search_service_client.models.TokenizerName + :param token_filters: An optional list of token filters to use when breaking the given text. + This parameter can only be set when using the tokenizer parameter. + :type token_filters: list[str or ~search_service_client.models.TokenFilterName] + :param char_filters: An optional list of character filters to use when breaking the given text. + This parameter can only be set when using the tokenizer parameter. + :type char_filters: list[str] + """ + + _validation = { + 'text': {'required': True}, + } + + _attribute_map = { + 'text': {'key': 'text', 'type': 'str'}, + 'analyzer': {'key': 'analyzer', 'type': 'str'}, + 'tokenizer': {'key': 'tokenizer', 'type': 'str'}, + 'token_filters': {'key': 'tokenFilters', 'type': '[str]'}, + 'char_filters': {'key': 'charFilters', 'type': '[str]'}, + } + + def __init__( + self, + *, + text: str, + analyzer: Optional[Union[str, "AnalyzerName"]] = None, + tokenizer: Optional[Union[str, "TokenizerName"]] = None, + token_filters: Optional[List[Union[str, "TokenFilterName"]]] = None, + char_filters: Optional[List[str]] = None, + **kwargs + ): + super(AnalyzeRequest, self).__init__(**kwargs) + self.text = text + self.analyzer = analyzer + self.tokenizer = tokenizer + self.token_filters = token_filters + self.char_filters = char_filters + + +class AnalyzeResult(msrest.serialization.Model): + """The result of testing an analyzer on text. + + All required parameters must be populated in order to send to Azure. + + :param tokens: Required. The list of tokens returned by the analyzer specified in the request. + :type tokens: list[~search_service_client.models.TokenInfo] + """ + + _validation = { + 'tokens': {'required': True}, + } + + _attribute_map = { + 'tokens': {'key': 'tokens', 'type': '[TokenInfo]'}, + } + + def __init__( + self, + *, + tokens: List["TokenInfo"], + **kwargs + ): + super(AnalyzeResult, self).__init__(**kwargs) + self.tokens = tokens + + +class TokenFilter(msrest.serialization.Model): + """Abstract base class for token filters. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: AsciiFoldingTokenFilter, CjkBigramTokenFilter, CommonGramTokenFilter, DictionaryDecompounderTokenFilter, EdgeNGramTokenFilter, EdgeNGramTokenFilterV2, ElisionTokenFilter, KeepTokenFilter, KeywordMarkerTokenFilter, LengthTokenFilter, LimitTokenFilter, NGramTokenFilter, NGramTokenFilterV2, PatternCaptureTokenFilter, PatternReplaceTokenFilter, PhoneticTokenFilter, ShingleTokenFilter, SnowballTokenFilter, StemmerOverrideTokenFilter, StemmerTokenFilter, StopwordsTokenFilter, SynonymTokenFilter, TruncateTokenFilter, UniqueTokenFilter, WordDelimiterTokenFilter. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.AsciiFoldingTokenFilter': 'AsciiFoldingTokenFilter', '#Microsoft.Azure.Search.CjkBigramTokenFilter': 'CjkBigramTokenFilter', '#Microsoft.Azure.Search.CommonGramTokenFilter': 'CommonGramTokenFilter', '#Microsoft.Azure.Search.DictionaryDecompounderTokenFilter': 'DictionaryDecompounderTokenFilter', '#Microsoft.Azure.Search.EdgeNGramTokenFilter': 'EdgeNGramTokenFilter', '#Microsoft.Azure.Search.EdgeNGramTokenFilterV2': 'EdgeNGramTokenFilterV2', '#Microsoft.Azure.Search.ElisionTokenFilter': 'ElisionTokenFilter', '#Microsoft.Azure.Search.KeepTokenFilter': 'KeepTokenFilter', '#Microsoft.Azure.Search.KeywordMarkerTokenFilter': 'KeywordMarkerTokenFilter', '#Microsoft.Azure.Search.LengthTokenFilter': 'LengthTokenFilter', '#Microsoft.Azure.Search.LimitTokenFilter': 'LimitTokenFilter', '#Microsoft.Azure.Search.NGramTokenFilter': 'NGramTokenFilter', '#Microsoft.Azure.Search.NGramTokenFilterV2': 'NGramTokenFilterV2', '#Microsoft.Azure.Search.PatternCaptureTokenFilter': 'PatternCaptureTokenFilter', '#Microsoft.Azure.Search.PatternReplaceTokenFilter': 'PatternReplaceTokenFilter', '#Microsoft.Azure.Search.PhoneticTokenFilter': 'PhoneticTokenFilter', '#Microsoft.Azure.Search.ShingleTokenFilter': 'ShingleTokenFilter', '#Microsoft.Azure.Search.SnowballTokenFilter': 'SnowballTokenFilter', '#Microsoft.Azure.Search.StemmerOverrideTokenFilter': 'StemmerOverrideTokenFilter', '#Microsoft.Azure.Search.StemmerTokenFilter': 'StemmerTokenFilter', '#Microsoft.Azure.Search.StopwordsTokenFilter': 'StopwordsTokenFilter', '#Microsoft.Azure.Search.SynonymTokenFilter': 'SynonymTokenFilter', '#Microsoft.Azure.Search.TruncateTokenFilter': 'TruncateTokenFilter', '#Microsoft.Azure.Search.UniqueTokenFilter': 'UniqueTokenFilter', '#Microsoft.Azure.Search.WordDelimiterTokenFilter': 'WordDelimiterTokenFilter'} + } + + def __init__( + self, + *, + name: str, + **kwargs + ): + super(TokenFilter, self).__init__(**kwargs) + self.odata_type = None + self.name = name + + +class AsciiFoldingTokenFilter(TokenFilter): + """Converts alphabetic, numeric, and symbolic Unicode characters which are not in the first 127 ASCII characters (the "Basic Latin" Unicode block) into their ASCII equivalents, if such equivalents exist. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param preserve_original: A value indicating whether the original token will be kept. Default + is false. + :type preserve_original: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'preserve_original': {'key': 'preserveOriginal', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + preserve_original: Optional[bool] = False, + **kwargs + ): + super(AsciiFoldingTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.AsciiFoldingTokenFilter' + self.preserve_original = preserve_original + + +class AzureActiveDirectoryApplicationCredentials(msrest.serialization.Model): + """Credentials of a registered application created for your search service, used for authenticated access to the encryption keys stored in Azure Key Vault. + + All required parameters must be populated in order to send to Azure. + + :param application_id: Required. An AAD Application ID that was granted the required access + permissions to the Azure Key Vault that is to be used when encrypting your data at rest. The + Application ID should not be confused with the Object ID for your AAD Application. + :type application_id: str + :param application_secret: The authentication key of the specified AAD application. + :type application_secret: str + """ + + _validation = { + 'application_id': {'required': True}, + } + + _attribute_map = { + 'application_id': {'key': 'applicationId', 'type': 'str'}, + 'application_secret': {'key': 'applicationSecret', 'type': 'str'}, + } + + def __init__( + self, + *, + application_id: str, + application_secret: Optional[str] = None, + **kwargs + ): + super(AzureActiveDirectoryApplicationCredentials, self).__init__(**kwargs) + self.application_id = application_id + self.application_secret = application_secret + + +class CharFilter(msrest.serialization.Model): + """Abstract base class for character filters. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: MappingCharFilter, PatternReplaceCharFilter. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the char filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.MappingCharFilter': 'MappingCharFilter', '#Microsoft.Azure.Search.PatternReplaceCharFilter': 'PatternReplaceCharFilter'} + } + + def __init__( + self, + *, + name: str, + **kwargs + ): + super(CharFilter, self).__init__(**kwargs) + self.odata_type = None + self.name = name + + +class CjkBigramTokenFilter(TokenFilter): + """Forms bigrams of CJK terms that are generated from StandardTokenizer. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param ignore_scripts: The scripts to ignore. + :type ignore_scripts: list[str or ~search_service_client.models.CjkBigramTokenFilterScripts] + :param output_unigrams: A value indicating whether to output both unigrams and bigrams (if + true), or just bigrams (if false). Default is false. + :type output_unigrams: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'ignore_scripts': {'key': 'ignoreScripts', 'type': '[str]'}, + 'output_unigrams': {'key': 'outputUnigrams', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + ignore_scripts: Optional[List[Union[str, "CjkBigramTokenFilterScripts"]]] = None, + output_unigrams: Optional[bool] = False, + **kwargs + ): + super(CjkBigramTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.CjkBigramTokenFilter' + self.ignore_scripts = ignore_scripts + self.output_unigrams = output_unigrams + + +class Tokenizer(msrest.serialization.Model): + """Abstract base class for tokenizers. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: ClassicTokenizer, EdgeNGramTokenizer, KeywordTokenizer, KeywordTokenizerV2, MicrosoftLanguageStemmingTokenizer, MicrosoftLanguageTokenizer, NGramTokenizer, PathHierarchyTokenizerV2, PatternTokenizer, StandardTokenizer, StandardTokenizerV2, UaxUrlEmailTokenizer. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.ClassicTokenizer': 'ClassicTokenizer', '#Microsoft.Azure.Search.EdgeNGramTokenizer': 'EdgeNGramTokenizer', '#Microsoft.Azure.Search.KeywordTokenizer': 'KeywordTokenizer', '#Microsoft.Azure.Search.KeywordTokenizerV2': 'KeywordTokenizerV2', '#Microsoft.Azure.Search.MicrosoftLanguageStemmingTokenizer': 'MicrosoftLanguageStemmingTokenizer', '#Microsoft.Azure.Search.MicrosoftLanguageTokenizer': 'MicrosoftLanguageTokenizer', '#Microsoft.Azure.Search.NGramTokenizer': 'NGramTokenizer', '#Microsoft.Azure.Search.PathHierarchyTokenizerV2': 'PathHierarchyTokenizerV2', '#Microsoft.Azure.Search.PatternTokenizer': 'PatternTokenizer', '#Microsoft.Azure.Search.StandardTokenizer': 'StandardTokenizer', '#Microsoft.Azure.Search.StandardTokenizerV2': 'StandardTokenizerV2', '#Microsoft.Azure.Search.UaxUrlEmailTokenizer': 'UaxUrlEmailTokenizer'} + } + + def __init__( + self, + *, + name: str, + **kwargs + ): + super(Tokenizer, self).__init__(**kwargs) + self.odata_type = None + self.name = name + + +class ClassicTokenizer(Tokenizer): + """Grammar-based tokenizer that is suitable for processing most European-language documents. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Default is 255. Tokens longer than the + maximum length are split. The maximum token length that can be used is 300 characters. + :type max_token_length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + } + + def __init__( + self, + *, + name: str, + max_token_length: Optional[int] = 255, + **kwargs + ): + super(ClassicTokenizer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.ClassicTokenizer' + self.max_token_length = max_token_length + + +class CognitiveServicesAccount(msrest.serialization.Model): + """Abstract base class for describing any cognitive service resource attached to the skillset. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: CognitiveServicesAccountKey, DefaultCognitiveServicesAccount. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param description: + :type description: str + """ + + _validation = { + 'odata_type': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.CognitiveServicesByKey': 'CognitiveServicesAccountKey', '#Microsoft.Azure.Search.DefaultCognitiveServices': 'DefaultCognitiveServicesAccount'} + } + + def __init__( + self, + *, + description: Optional[str] = None, + **kwargs + ): + super(CognitiveServicesAccount, self).__init__(**kwargs) + self.odata_type = None + self.description = description + + +class CognitiveServicesAccountKey(CognitiveServicesAccount): + """A cognitive service resource provisioned with a key that is attached to a skillset. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param description: + :type description: str + :param key: Required. + :type key: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'key': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'key': {'key': 'key', 'type': 'str'}, + } + + def __init__( + self, + *, + key: str, + description: Optional[str] = None, + **kwargs + ): + super(CognitiveServicesAccountKey, self).__init__(description=description, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.CognitiveServicesByKey' + self.key = key + + +class CommonGramTokenFilter(TokenFilter): + """Construct bigrams for frequently occurring terms while indexing. Single terms are still indexed too, with bigrams overlaid. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param common_words: Required. The set of common words. + :type common_words: list[str] + :param ignore_case: A value indicating whether common words matching will be case insensitive. + Default is false. + :type ignore_case: bool + :param use_query_mode: A value that indicates whether the token filter is in query mode. When + in query mode, the token filter generates bigrams and then removes common words and single + terms followed by a common word. Default is false. + :type use_query_mode: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'common_words': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'common_words': {'key': 'commonWords', 'type': '[str]'}, + 'ignore_case': {'key': 'ignoreCase', 'type': 'bool'}, + 'use_query_mode': {'key': 'queryMode', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + common_words: List[str], + ignore_case: Optional[bool] = False, + use_query_mode: Optional[bool] = False, + **kwargs + ): + super(CommonGramTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.CommonGramTokenFilter' + self.common_words = common_words + self.ignore_case = ignore_case + self.use_query_mode = use_query_mode + + +class Skill(msrest.serialization.Model): + """Abstract base class for skills. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: WebApiSkill, EntityRecognitionSkill, KeyPhraseExtractionSkill, LanguageDetectionSkill, MergeSkill, SentimentSkill, SplitSkill, TextTranslationSkill, ConditionalSkill, ShaperSkill, ImageAnalysisSkill, OcrSkill. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Skills.Custom.WebApiSkill': 'WebApiSkill', '#Microsoft.Skills.Text.EntityRecognitionSkill': 'EntityRecognitionSkill', '#Microsoft.Skills.Text.KeyPhraseExtractionSkill': 'KeyPhraseExtractionSkill', '#Microsoft.Skills.Text.LanguageDetectionSkill': 'LanguageDetectionSkill', '#Microsoft.Skills.Text.MergeSkill': 'MergeSkill', '#Microsoft.Skills.Text.SentimentSkill': 'SentimentSkill', '#Microsoft.Skills.Text.SplitSkill': 'SplitSkill', '#Microsoft.Skills.Text.TranslationSkill': 'TextTranslationSkill', '#Microsoft.Skills.Util.ConditionalSkill': 'ConditionalSkill', '#Microsoft.Skills.Util.ShaperSkill': 'ShaperSkill', '#Microsoft.Skills.Vision.ImageAnalysisSkill': 'ImageAnalysisSkill', '#Microsoft.Skills.Vision.OcrSkill': 'OcrSkill'} + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + **kwargs + ): + super(Skill, self).__init__(**kwargs) + self.odata_type = None + self.name = name + self.description = description + self.context = context + self.inputs = inputs + self.outputs = outputs + + +class ConditionalSkill(Skill): + """A skill that enables scenarios that require a Boolean operation to determine the data to assign to an output. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + **kwargs + ): + super(ConditionalSkill, self).__init__(name=name, description=description, context=context, inputs=inputs, outputs=outputs, **kwargs) + self.odata_type = '#Microsoft.Skills.Util.ConditionalSkill' + + +class CorsOptions(msrest.serialization.Model): + """Defines options to control Cross-Origin Resource Sharing (CORS) for an index. + + All required parameters must be populated in order to send to Azure. + + :param allowed_origins: Required. The list of origins from which JavaScript code will be + granted access to your index. Can contain a list of hosts of the form {protocol}://{fully- + qualified-domain-name}[:{port#}], or a single '*' to allow all origins (not recommended). + :type allowed_origins: list[str] + :param max_age_in_seconds: The duration for which browsers should cache CORS preflight + responses. Defaults to 5 minutes. + :type max_age_in_seconds: long + """ + + _validation = { + 'allowed_origins': {'required': True}, + } + + _attribute_map = { + 'allowed_origins': {'key': 'allowedOrigins', 'type': '[str]'}, + 'max_age_in_seconds': {'key': 'maxAgeInSeconds', 'type': 'long'}, + } + + def __init__( + self, + *, + allowed_origins: List[str], + max_age_in_seconds: Optional[int] = None, + **kwargs + ): + super(CorsOptions, self).__init__(**kwargs) + self.allowed_origins = allowed_origins + self.max_age_in_seconds = max_age_in_seconds + + +class CustomAnalyzer(Analyzer): + """Allows you to take control over the process of converting text into indexable/searchable tokens. It's a user-defined configuration consisting of a single predefined tokenizer and one or more filters. The tokenizer is responsible for breaking text into tokens, and the filters for modifying tokens emitted by the tokenizer. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the analyzer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param tokenizer: Required. The name of the tokenizer to use to divide continuous text into a + sequence of tokens, such as breaking a sentence into words. Possible values include: 'classic', + 'edgeNGram', 'keyword_v2', 'letter', 'lowercase', 'microsoft_language_tokenizer', + 'microsoft_language_stemming_tokenizer', 'nGram', 'path_hierarchy_v2', 'pattern', + 'standard_v2', 'uax_url_email', 'whitespace'. + :type tokenizer: str or ~search_service_client.models.TokenizerName + :param token_filters: A list of token filters used to filter out or modify the tokens generated + by a tokenizer. For example, you can specify a lowercase filter that converts all characters to + lowercase. The filters are run in the order in which they are listed. + :type token_filters: list[str or ~search_service_client.models.TokenFilterName] + :param char_filters: A list of character filters used to prepare input text before it is + processed by the tokenizer. For instance, they can replace certain characters or symbols. The + filters are run in the order in which they are listed. + :type char_filters: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'tokenizer': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'tokenizer': {'key': 'tokenizer', 'type': 'str'}, + 'token_filters': {'key': 'tokenFilters', 'type': '[str]'}, + 'char_filters': {'key': 'charFilters', 'type': '[str]'}, + } + + def __init__( + self, + *, + name: str, + tokenizer: Union[str, "TokenizerName"], + token_filters: Optional[List[Union[str, "TokenFilterName"]]] = None, + char_filters: Optional[List[str]] = None, + **kwargs + ): + super(CustomAnalyzer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.CustomAnalyzer' + self.tokenizer = tokenizer + self.token_filters = token_filters + self.char_filters = char_filters + + +class DataChangeDetectionPolicy(msrest.serialization.Model): + """Abstract base class for data change detection policies. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: HighWaterMarkChangeDetectionPolicy, SqlIntegratedChangeTrackingPolicy. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + """ + + _validation = { + 'odata_type': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy': 'HighWaterMarkChangeDetectionPolicy', '#Microsoft.Azure.Search.SqlIntegratedChangeTrackingPolicy': 'SqlIntegratedChangeTrackingPolicy'} + } + + def __init__( + self, + **kwargs + ): + super(DataChangeDetectionPolicy, self).__init__(**kwargs) + self.odata_type = None + + +class DataContainer(msrest.serialization.Model): + """Represents information about the entity (such as Azure SQL table or CosmosDB collection) that will be indexed. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the table or view (for Azure SQL data source) or collection + (for CosmosDB data source) that will be indexed. + :type name: str + :param query: A query that is applied to this data container. The syntax and meaning of this + parameter is datasource-specific. Not supported by Azure SQL datasources. + :type query: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'query': {'key': 'query', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + query: Optional[str] = None, + **kwargs + ): + super(DataContainer, self).__init__(**kwargs) + self.name = name + self.query = query + + +class DataDeletionDetectionPolicy(msrest.serialization.Model): + """Abstract base class for data deletion detection policies. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: SoftDeleteColumnDeletionDetectionPolicy. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + """ + + _validation = { + 'odata_type': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + } + + _subtype_map = { + 'odata_type': {'#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy': 'SoftDeleteColumnDeletionDetectionPolicy'} + } + + def __init__( + self, + **kwargs + ): + super(DataDeletionDetectionPolicy, self).__init__(**kwargs) + self.odata_type = None + + +class DataSource(msrest.serialization.Model): + """Represents a datasource definition, which can be used to configure an indexer. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the datasource. + :type name: str + :param description: The description of the datasource. + :type description: str + :param type: Required. The type of the datasource. Possible values include: 'azuresql', + 'cosmosdb', 'azureblob', 'azuretable', 'mysql'. + :type type: str or ~search_service_client.models.DataSourceType + :param credentials: Required. Credentials for the datasource. + :type credentials: ~search_service_client.models.DataSourceCredentials + :param container: Required. The data container for the datasource. + :type container: ~search_service_client.models.DataContainer + :param data_change_detection_policy: The data change detection policy for the datasource. + :type data_change_detection_policy: ~search_service_client.models.DataChangeDetectionPolicy + :param data_deletion_detection_policy: The data deletion detection policy for the datasource. + :type data_deletion_detection_policy: ~search_service_client.models.DataDeletionDetectionPolicy + :param e_tag: The ETag of the DataSource. + :type e_tag: str + """ + + _validation = { + 'name': {'required': True}, + 'type': {'required': True}, + 'credentials': {'required': True}, + 'container': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'DataSourceCredentials'}, + 'container': {'key': 'container', 'type': 'DataContainer'}, + 'data_change_detection_policy': {'key': 'dataChangeDetectionPolicy', 'type': 'DataChangeDetectionPolicy'}, + 'data_deletion_detection_policy': {'key': 'dataDeletionDetectionPolicy', 'type': 'DataDeletionDetectionPolicy'}, + 'e_tag': {'key': '@odata\\.etag', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + type: Union[str, "DataSourceType"], + credentials: "DataSourceCredentials", + container: "DataContainer", + description: Optional[str] = None, + data_change_detection_policy: Optional["DataChangeDetectionPolicy"] = None, + data_deletion_detection_policy: Optional["DataDeletionDetectionPolicy"] = None, + e_tag: Optional[str] = None, + **kwargs + ): + super(DataSource, self).__init__(**kwargs) + self.name = name + self.description = description + self.type = type + self.credentials = credentials + self.container = container + self.data_change_detection_policy = data_change_detection_policy + self.data_deletion_detection_policy = data_deletion_detection_policy + self.e_tag = e_tag + + +class DataSourceCredentials(msrest.serialization.Model): + """Represents credentials that can be used to connect to a datasource. + + :param connection_string: The connection string for the datasource. + :type connection_string: str + """ + + _attribute_map = { + 'connection_string': {'key': 'connectionString', 'type': 'str'}, + } + + def __init__( + self, + *, + connection_string: Optional[str] = None, + **kwargs + ): + super(DataSourceCredentials, self).__init__(**kwargs) + self.connection_string = connection_string + + +class DefaultCognitiveServicesAccount(CognitiveServicesAccount): + """An empty object that represents the default cognitive service resource for a skillset. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param description: + :type description: str + """ + + _validation = { + 'odata_type': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + def __init__( + self, + *, + description: Optional[str] = None, + **kwargs + ): + super(DefaultCognitiveServicesAccount, self).__init__(description=description, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.DefaultCognitiveServices' + + +class DictionaryDecompounderTokenFilter(TokenFilter): + """Decomposes compound words found in many Germanic languages. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param word_list: Required. The list of words to match against. + :type word_list: list[str] + :param min_word_size: The minimum word size. Only words longer than this get processed. Default + is 5. Maximum is 300. + :type min_word_size: int + :param min_subword_size: The minimum subword size. Only subwords longer than this are + outputted. Default is 2. Maximum is 300. + :type min_subword_size: int + :param max_subword_size: The maximum subword size. Only subwords shorter than this are + outputted. Default is 15. Maximum is 300. + :type max_subword_size: int + :param only_longest_match: A value indicating whether to add only the longest matching subword + to the output. Default is false. + :type only_longest_match: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'word_list': {'required': True}, + 'min_word_size': {'maximum': 300}, + 'min_subword_size': {'maximum': 300}, + 'max_subword_size': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'word_list': {'key': 'wordList', 'type': '[str]'}, + 'min_word_size': {'key': 'minWordSize', 'type': 'int'}, + 'min_subword_size': {'key': 'minSubwordSize', 'type': 'int'}, + 'max_subword_size': {'key': 'maxSubwordSize', 'type': 'int'}, + 'only_longest_match': {'key': 'onlyLongestMatch', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + word_list: List[str], + min_word_size: Optional[int] = 5, + min_subword_size: Optional[int] = 2, + max_subword_size: Optional[int] = 15, + only_longest_match: Optional[bool] = False, + **kwargs + ): + super(DictionaryDecompounderTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.DictionaryDecompounderTokenFilter' + self.word_list = word_list + self.min_word_size = min_word_size + self.min_subword_size = min_subword_size + self.max_subword_size = max_subword_size + self.only_longest_match = only_longest_match + + +class ScoringFunction(msrest.serialization.Model): + """Abstract base class for functions that can modify document scores during ranking. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: DistanceScoringFunction, FreshnessScoringFunction, MagnitudeScoringFunction, TagScoringFunction. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. Constant filled by server. + :type type: str + :param field_name: Required. The name of the field used as input to the scoring function. + :type field_name: str + :param boost: Required. A multiplier for the raw score. Must be a positive number not equal to + 1.0. + :type boost: float + :param interpolation: A value indicating how boosting will be interpolated across document + scores; defaults to "Linear". Possible values include: 'linear', 'constant', 'quadratic', + 'logarithmic'. + :type interpolation: str or ~search_service_client.models.ScoringFunctionInterpolation + """ + + _validation = { + 'type': {'required': True}, + 'field_name': {'required': True}, + 'boost': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'field_name': {'key': 'fieldName', 'type': 'str'}, + 'boost': {'key': 'boost', 'type': 'float'}, + 'interpolation': {'key': 'interpolation', 'type': 'str'}, + } + + _subtype_map = { + 'type': {'distance': 'DistanceScoringFunction', 'freshness': 'FreshnessScoringFunction', 'magnitude': 'MagnitudeScoringFunction', 'tag': 'TagScoringFunction'} + } + + def __init__( + self, + *, + field_name: str, + boost: float, + interpolation: Optional[Union[str, "ScoringFunctionInterpolation"]] = None, + **kwargs + ): + super(ScoringFunction, self).__init__(**kwargs) + self.type = None + self.field_name = field_name + self.boost = boost + self.interpolation = interpolation + + +class DistanceScoringFunction(ScoringFunction): + """Defines a function that boosts scores based on distance from a geographic location. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. Constant filled by server. + :type type: str + :param field_name: Required. The name of the field used as input to the scoring function. + :type field_name: str + :param boost: Required. A multiplier for the raw score. Must be a positive number not equal to + 1.0. + :type boost: float + :param interpolation: A value indicating how boosting will be interpolated across document + scores; defaults to "Linear". Possible values include: 'linear', 'constant', 'quadratic', + 'logarithmic'. + :type interpolation: str or ~search_service_client.models.ScoringFunctionInterpolation + :param parameters: Required. Parameter values for the distance scoring function. + :type parameters: ~search_service_client.models.DistanceScoringParameters + """ + + _validation = { + 'type': {'required': True}, + 'field_name': {'required': True}, + 'boost': {'required': True}, + 'parameters': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'field_name': {'key': 'fieldName', 'type': 'str'}, + 'boost': {'key': 'boost', 'type': 'float'}, + 'interpolation': {'key': 'interpolation', 'type': 'str'}, + 'parameters': {'key': 'distance', 'type': 'DistanceScoringParameters'}, + } + + def __init__( + self, + *, + field_name: str, + boost: float, + parameters: "DistanceScoringParameters", + interpolation: Optional[Union[str, "ScoringFunctionInterpolation"]] = None, + **kwargs + ): + super(DistanceScoringFunction, self).__init__(field_name=field_name, boost=boost, interpolation=interpolation, **kwargs) + self.type = 'distance' + self.parameters = parameters + + +class DistanceScoringParameters(msrest.serialization.Model): + """Provides parameter values to a distance scoring function. + + All required parameters must be populated in order to send to Azure. + + :param reference_point_parameter: Required. The name of the parameter passed in search queries + to specify the reference location. + :type reference_point_parameter: str + :param boosting_distance: Required. The distance in kilometers from the reference location + where the boosting range ends. + :type boosting_distance: float + """ + + _validation = { + 'reference_point_parameter': {'required': True}, + 'boosting_distance': {'required': True}, + } + + _attribute_map = { + 'reference_point_parameter': {'key': 'referencePointParameter', 'type': 'str'}, + 'boosting_distance': {'key': 'boostingDistance', 'type': 'float'}, + } + + def __init__( + self, + *, + reference_point_parameter: str, + boosting_distance: float, + **kwargs + ): + super(DistanceScoringParameters, self).__init__(**kwargs) + self.reference_point_parameter = reference_point_parameter + self.boosting_distance = boosting_distance + + +class EdgeNGramTokenFilter(TokenFilter): + """Generates n-grams of the given size(s) starting from the front or the back of an input token. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param min_gram: The minimum n-gram length. Default is 1. Must be less than the value of + maxGram. + :type min_gram: int + :param max_gram: The maximum n-gram length. Default is 2. + :type max_gram: int + :param side: Specifies which side of the input the n-gram should be generated from. Default is + "front". Possible values include: 'front', 'back'. + :type side: str or ~search_service_client.models.EdgeNGramTokenFilterSide + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min_gram': {'key': 'minGram', 'type': 'int'}, + 'max_gram': {'key': 'maxGram', 'type': 'int'}, + 'side': {'key': 'side', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + min_gram: Optional[int] = 1, + max_gram: Optional[int] = 2, + side: Optional[Union[str, "EdgeNGramTokenFilterSide"]] = None, + **kwargs + ): + super(EdgeNGramTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.EdgeNGramTokenFilter' + self.min_gram = min_gram + self.max_gram = max_gram + self.side = side + + +class EdgeNGramTokenFilterV2(TokenFilter): + """Generates n-grams of the given size(s) starting from the front or the back of an input token. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param min_gram: The minimum n-gram length. Default is 1. Maximum is 300. Must be less than the + value of maxGram. + :type min_gram: int + :param max_gram: The maximum n-gram length. Default is 2. Maximum is 300. + :type max_gram: int + :param side: Specifies which side of the input the n-gram should be generated from. Default is + "front". Possible values include: 'front', 'back'. + :type side: str or ~search_service_client.models.EdgeNGramTokenFilterSide + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'min_gram': {'maximum': 300}, + 'max_gram': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min_gram': {'key': 'minGram', 'type': 'int'}, + 'max_gram': {'key': 'maxGram', 'type': 'int'}, + 'side': {'key': 'side', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + min_gram: Optional[int] = 1, + max_gram: Optional[int] = 2, + side: Optional[Union[str, "EdgeNGramTokenFilterSide"]] = None, + **kwargs + ): + super(EdgeNGramTokenFilterV2, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.EdgeNGramTokenFilterV2' + self.min_gram = min_gram + self.max_gram = max_gram + self.side = side + + +class EdgeNGramTokenizer(Tokenizer): + """Tokenizes the input from an edge into n-grams of the given size(s). This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param min_gram: The minimum n-gram length. Default is 1. Maximum is 300. Must be less than the + value of maxGram. + :type min_gram: int + :param max_gram: The maximum n-gram length. Default is 2. Maximum is 300. + :type max_gram: int + :param token_chars: Character classes to keep in the tokens. + :type token_chars: list[str or ~search_service_client.models.TokenCharacterKind] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'min_gram': {'maximum': 300}, + 'max_gram': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min_gram': {'key': 'minGram', 'type': 'int'}, + 'max_gram': {'key': 'maxGram', 'type': 'int'}, + 'token_chars': {'key': 'tokenChars', 'type': '[str]'}, + } + + def __init__( + self, + *, + name: str, + min_gram: Optional[int] = 1, + max_gram: Optional[int] = 2, + token_chars: Optional[List[Union[str, "TokenCharacterKind"]]] = None, + **kwargs + ): + super(EdgeNGramTokenizer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.EdgeNGramTokenizer' + self.min_gram = min_gram + self.max_gram = max_gram + self.token_chars = token_chars + + +class ElisionTokenFilter(TokenFilter): + """Removes elisions. For example, "l'avion" (the plane) will be converted to "avion" (plane). This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param articles: The set of articles to remove. + :type articles: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'articles': {'key': 'articles', 'type': '[str]'}, + } + + def __init__( + self, + *, + name: str, + articles: Optional[List[str]] = None, + **kwargs + ): + super(ElisionTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.ElisionTokenFilter' + self.articles = articles + + +class EncryptionKey(msrest.serialization.Model): + """A customer-managed encryption key in Azure Key Vault. Keys that you create and manage can be used to encrypt or decrypt data-at-rest in Azure Cognitive Search, such as indexes and synonym maps. + + All required parameters must be populated in order to send to Azure. + + :param key_vault_key_name: Required. The name of your Azure Key Vault key to be used to encrypt + your data at rest. + :type key_vault_key_name: str + :param key_vault_key_version: Required. The version of your Azure Key Vault key to be used to + encrypt your data at rest. + :type key_vault_key_version: str + :param key_vault_uri: Required. The URI of your Azure Key Vault, also referred to as DNS name, + that contains the key to be used to encrypt your data at rest. An example URI might be + https://my-keyvault-name.vault.azure.net. + :type key_vault_uri: str + :param access_credentials: Optional Azure Active Directory credentials used for accessing your + Azure Key Vault. Not required if using managed identity instead. + :type access_credentials: + ~search_service_client.models.AzureActiveDirectoryApplicationCredentials + """ + + _validation = { + 'key_vault_key_name': {'required': True}, + 'key_vault_key_version': {'required': True}, + 'key_vault_uri': {'required': True}, + } + + _attribute_map = { + 'key_vault_key_name': {'key': 'keyVaultKeyName', 'type': 'str'}, + 'key_vault_key_version': {'key': 'keyVaultKeyVersion', 'type': 'str'}, + 'key_vault_uri': {'key': 'keyVaultUri', 'type': 'str'}, + 'access_credentials': {'key': 'accessCredentials', 'type': 'AzureActiveDirectoryApplicationCredentials'}, + } + + def __init__( + self, + *, + key_vault_key_name: str, + key_vault_key_version: str, + key_vault_uri: str, + access_credentials: Optional["AzureActiveDirectoryApplicationCredentials"] = None, + **kwargs + ): + super(EncryptionKey, self).__init__(**kwargs) + self.key_vault_key_name = key_vault_key_name + self.key_vault_key_version = key_vault_key_version + self.key_vault_uri = key_vault_uri + self.access_credentials = access_credentials + + +class EntityRecognitionSkill(Skill): + """Text analytics entity recognition. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param categories: A list of entity categories that should be extracted. + :type categories: list[str or ~search_service_client.models.EntityCategory] + :param default_language_code: A value indicating which language code to use. Default is en. + Possible values include: 'ar', 'cs', 'zh-Hans', 'zh-Hant', 'da', 'nl', 'en', 'fi', 'fr', 'de', + 'el', 'hu', 'it', 'ja', 'ko', 'no', 'pl', 'pt-PT', 'pt-BR', 'ru', 'es', 'sv', 'tr'. + :type default_language_code: str or + ~search_service_client.models.EntityRecognitionSkillLanguage + :param include_typeless_entities: Determines whether or not to include entities which are well + known but don't conform to a pre-defined type. If this configuration is not set (default), set + to null or set to false, entities which don't conform to one of the pre-defined types will not + be surfaced. + :type include_typeless_entities: bool + :param minimum_precision: A value between 0 and 1 that be used to only include entities whose + confidence score is greater than the value specified. If not set (default), or if explicitly + set to null, all entities will be included. + :type minimum_precision: float + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'categories': {'key': 'categories', 'type': '[str]'}, + 'default_language_code': {'key': 'defaultLanguageCode', 'type': 'str'}, + 'include_typeless_entities': {'key': 'includeTypelessEntities', 'type': 'bool'}, + 'minimum_precision': {'key': 'minimumPrecision', 'type': 'float'}, + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + categories: Optional[List[Union[str, "EntityCategory"]]] = None, + default_language_code: Optional[Union[str, "EntityRecognitionSkillLanguage"]] = None, + include_typeless_entities: Optional[bool] = None, + minimum_precision: Optional[float] = None, + **kwargs + ): + super(EntityRecognitionSkill, self).__init__(name=name, description=description, context=context, inputs=inputs, outputs=outputs, **kwargs) + self.odata_type = '#Microsoft.Skills.Text.EntityRecognitionSkill' + self.categories = categories + self.default_language_code = default_language_code + self.include_typeless_entities = include_typeless_entities + self.minimum_precision = minimum_precision + + +class Field(msrest.serialization.Model): + """Represents a field in an index definition, which describes the name, data type, and search behavior of a field. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the field, which must be unique within the fields collection + of the index or parent field. + :type name: str + :param type: Required. The data type of the field. Possible values include: 'Edm.String', + 'Edm.Int32', 'Edm.Int64', 'Edm.Double', 'Edm.Boolean', 'Edm.DateTimeOffset', + 'Edm.GeographyPoint', 'Edm.ComplexType'. + :type type: str or ~search_service_client.models.DataType + :param key: A value indicating whether the field uniquely identifies documents in the index. + Exactly one top-level field in each index must be chosen as the key field and it must be of + type Edm.String. Key fields can be used to look up documents directly and update or delete + specific documents. Default is false for simple fields and null for complex fields. + :type key: bool + :param retrievable: A value indicating whether the field can be returned in a search result. + You can disable this option if you want to use a field (for example, margin) as a filter, + sorting, or scoring mechanism but do not want the field to be visible to the end user. This + property must be true for key fields, and it must be null for complex fields. This property can + be changed on existing fields. Enabling this property does not cause any increase in index + storage requirements. Default is true for simple fields and null for complex fields. + :type retrievable: bool + :param searchable: A value indicating whether the field is full-text searchable. This means it + will undergo analysis such as word-breaking during indexing. If you set a searchable field to a + value like "sunny day", internally it will be split into the individual tokens "sunny" and + "day". This enables full-text searches for these terms. Fields of type Edm.String or + Collection(Edm.String) are searchable by default. This property must be false for simple fields + of other non-string data types, and it must be null for complex fields. Note: searchable fields + consume extra space in your index since Azure Cognitive Search will store an additional + tokenized version of the field value for full-text searches. If you want to save space in your + index and you don't need a field to be included in searches, set searchable to false. + :type searchable: bool + :param filterable: A value indicating whether to enable the field to be referenced in $filter + queries. filterable differs from searchable in how strings are handled. Fields of type + Edm.String or Collection(Edm.String) that are filterable do not undergo word-breaking, so + comparisons are for exact matches only. For example, if you set such a field f to "sunny day", + $filter=f eq 'sunny' will find no matches, but $filter=f eq 'sunny day' will. This property + must be null for complex fields. Default is true for simple fields and null for complex fields. + :type filterable: bool + :param sortable: A value indicating whether to enable the field to be referenced in $orderby + expressions. By default Azure Cognitive Search sorts results by score, but in many experiences + users will want to sort by fields in the documents. A simple field can be sortable only if it + is single-valued (it has a single value in the scope of the parent document). Simple collection + fields cannot be sortable, since they are multi-valued. Simple sub-fields of complex + collections are also multi-valued, and therefore cannot be sortable. This is true whether it's + an immediate parent field, or an ancestor field, that's the complex collection. Complex fields + cannot be sortable and the sortable property must be null for such fields. The default for + sortable is true for single-valued simple fields, false for multi-valued simple fields, and + null for complex fields. + :type sortable: bool + :param facetable: A value indicating whether to enable the field to be referenced in facet + queries. Typically used in a presentation of search results that includes hit count by category + (for example, search for digital cameras and see hits by brand, by megapixels, by price, and so + on). This property must be null for complex fields. Fields of type Edm.GeographyPoint or + Collection(Edm.GeographyPoint) cannot be facetable. Default is true for all other simple + fields. + :type facetable: bool + :param analyzer: The name of the language analyzer to use for the field. This option can be + used only with searchable fields and it can't be set together with either searchAnalyzer or + indexAnalyzer. Once the analyzer is chosen, it cannot be changed for the field. Must be null + for complex fields. Possible values include: 'ar.microsoft', 'ar.lucene', 'hy.lucene', + 'bn.microsoft', 'eu.lucene', 'bg.microsoft', 'bg.lucene', 'ca.microsoft', 'ca.lucene', 'zh- + Hans.microsoft', 'zh-Hans.lucene', 'zh-Hant.microsoft', 'zh-Hant.lucene', 'hr.microsoft', + 'cs.microsoft', 'cs.lucene', 'da.microsoft', 'da.lucene', 'nl.microsoft', 'nl.lucene', + 'en.microsoft', 'en.lucene', 'et.microsoft', 'fi.microsoft', 'fi.lucene', 'fr.microsoft', + 'fr.lucene', 'gl.lucene', 'de.microsoft', 'de.lucene', 'el.microsoft', 'el.lucene', + 'gu.microsoft', 'he.microsoft', 'hi.microsoft', 'hi.lucene', 'hu.microsoft', 'hu.lucene', + 'is.microsoft', 'id.microsoft', 'id.lucene', 'ga.lucene', 'it.microsoft', 'it.lucene', + 'ja.microsoft', 'ja.lucene', 'kn.microsoft', 'ko.microsoft', 'ko.lucene', 'lv.microsoft', + 'lv.lucene', 'lt.microsoft', 'ml.microsoft', 'ms.microsoft', 'mr.microsoft', 'nb.microsoft', + 'no.lucene', 'fa.lucene', 'pl.microsoft', 'pl.lucene', 'pt-BR.microsoft', 'pt-BR.lucene', 'pt- + PT.microsoft', 'pt-PT.lucene', 'pa.microsoft', 'ro.microsoft', 'ro.lucene', 'ru.microsoft', + 'ru.lucene', 'sr-cyrillic.microsoft', 'sr-latin.microsoft', 'sk.microsoft', 'sl.microsoft', + 'es.microsoft', 'es.lucene', 'sv.microsoft', 'sv.lucene', 'ta.microsoft', 'te.microsoft', + 'th.microsoft', 'th.lucene', 'tr.microsoft', 'tr.lucene', 'uk.microsoft', 'ur.microsoft', + 'vi.microsoft', 'standard.lucene', 'standardasciifolding.lucene', 'keyword', 'pattern', + 'simple', 'stop', 'whitespace'. + :type analyzer: str or ~search_service_client.models.AnalyzerName + :param search_analyzer: The name of the analyzer used at search time for the field. This option + can be used only with searchable fields. It must be set together with indexAnalyzer and it + cannot be set together with the analyzer option. This analyzer can be updated on an existing + field. Must be null for complex fields. Possible values include: 'ar.microsoft', 'ar.lucene', + 'hy.lucene', 'bn.microsoft', 'eu.lucene', 'bg.microsoft', 'bg.lucene', 'ca.microsoft', + 'ca.lucene', 'zh-Hans.microsoft', 'zh-Hans.lucene', 'zh-Hant.microsoft', 'zh-Hant.lucene', + 'hr.microsoft', 'cs.microsoft', 'cs.lucene', 'da.microsoft', 'da.lucene', 'nl.microsoft', + 'nl.lucene', 'en.microsoft', 'en.lucene', 'et.microsoft', 'fi.microsoft', 'fi.lucene', + 'fr.microsoft', 'fr.lucene', 'gl.lucene', 'de.microsoft', 'de.lucene', 'el.microsoft', + 'el.lucene', 'gu.microsoft', 'he.microsoft', 'hi.microsoft', 'hi.lucene', 'hu.microsoft', + 'hu.lucene', 'is.microsoft', 'id.microsoft', 'id.lucene', 'ga.lucene', 'it.microsoft', + 'it.lucene', 'ja.microsoft', 'ja.lucene', 'kn.microsoft', 'ko.microsoft', 'ko.lucene', + 'lv.microsoft', 'lv.lucene', 'lt.microsoft', 'ml.microsoft', 'ms.microsoft', 'mr.microsoft', + 'nb.microsoft', 'no.lucene', 'fa.lucene', 'pl.microsoft', 'pl.lucene', 'pt-BR.microsoft', 'pt- + BR.lucene', 'pt-PT.microsoft', 'pt-PT.lucene', 'pa.microsoft', 'ro.microsoft', 'ro.lucene', + 'ru.microsoft', 'ru.lucene', 'sr-cyrillic.microsoft', 'sr-latin.microsoft', 'sk.microsoft', + 'sl.microsoft', 'es.microsoft', 'es.lucene', 'sv.microsoft', 'sv.lucene', 'ta.microsoft', + 'te.microsoft', 'th.microsoft', 'th.lucene', 'tr.microsoft', 'tr.lucene', 'uk.microsoft', + 'ur.microsoft', 'vi.microsoft', 'standard.lucene', 'standardasciifolding.lucene', 'keyword', + 'pattern', 'simple', 'stop', 'whitespace'. + :type search_analyzer: str or ~search_service_client.models.AnalyzerName + :param index_analyzer: The name of the analyzer used at indexing time for the field. This + option can be used only with searchable fields. It must be set together with searchAnalyzer and + it cannot be set together with the analyzer option. Once the analyzer is chosen, it cannot be + changed for the field. Must be null for complex fields. Possible values include: + 'ar.microsoft', 'ar.lucene', 'hy.lucene', 'bn.microsoft', 'eu.lucene', 'bg.microsoft', + 'bg.lucene', 'ca.microsoft', 'ca.lucene', 'zh-Hans.microsoft', 'zh-Hans.lucene', 'zh- + Hant.microsoft', 'zh-Hant.lucene', 'hr.microsoft', 'cs.microsoft', 'cs.lucene', 'da.microsoft', + 'da.lucene', 'nl.microsoft', 'nl.lucene', 'en.microsoft', 'en.lucene', 'et.microsoft', + 'fi.microsoft', 'fi.lucene', 'fr.microsoft', 'fr.lucene', 'gl.lucene', 'de.microsoft', + 'de.lucene', 'el.microsoft', 'el.lucene', 'gu.microsoft', 'he.microsoft', 'hi.microsoft', + 'hi.lucene', 'hu.microsoft', 'hu.lucene', 'is.microsoft', 'id.microsoft', 'id.lucene', + 'ga.lucene', 'it.microsoft', 'it.lucene', 'ja.microsoft', 'ja.lucene', 'kn.microsoft', + 'ko.microsoft', 'ko.lucene', 'lv.microsoft', 'lv.lucene', 'lt.microsoft', 'ml.microsoft', + 'ms.microsoft', 'mr.microsoft', 'nb.microsoft', 'no.lucene', 'fa.lucene', 'pl.microsoft', + 'pl.lucene', 'pt-BR.microsoft', 'pt-BR.lucene', 'pt-PT.microsoft', 'pt-PT.lucene', + 'pa.microsoft', 'ro.microsoft', 'ro.lucene', 'ru.microsoft', 'ru.lucene', 'sr- + cyrillic.microsoft', 'sr-latin.microsoft', 'sk.microsoft', 'sl.microsoft', 'es.microsoft', + 'es.lucene', 'sv.microsoft', 'sv.lucene', 'ta.microsoft', 'te.microsoft', 'th.microsoft', + 'th.lucene', 'tr.microsoft', 'tr.lucene', 'uk.microsoft', 'ur.microsoft', 'vi.microsoft', + 'standard.lucene', 'standardasciifolding.lucene', 'keyword', 'pattern', 'simple', 'stop', + 'whitespace'. + :type index_analyzer: str or ~search_service_client.models.AnalyzerName + :param synonym_maps: A list of the names of synonym maps to associate with this field. This + option can be used only with searchable fields. Currently only one synonym map per field is + supported. Assigning a synonym map to a field ensures that query terms targeting that field are + expanded at query-time using the rules in the synonym map. This attribute can be changed on + existing fields. Must be null or an empty collection for complex fields. + :type synonym_maps: list[str] + :param fields: A list of sub-fields if this is a field of type Edm.ComplexType or + Collection(Edm.ComplexType). Must be null or empty for simple fields. + :type fields: list[~search_service_client.models.Field] + """ + + _validation = { + 'name': {'required': True}, + 'type': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'key': {'key': 'key', 'type': 'bool'}, + 'retrievable': {'key': 'retrievable', 'type': 'bool'}, + 'searchable': {'key': 'searchable', 'type': 'bool'}, + 'filterable': {'key': 'filterable', 'type': 'bool'}, + 'sortable': {'key': 'sortable', 'type': 'bool'}, + 'facetable': {'key': 'facetable', 'type': 'bool'}, + 'analyzer': {'key': 'analyzer', 'type': 'str'}, + 'search_analyzer': {'key': 'searchAnalyzer', 'type': 'str'}, + 'index_analyzer': {'key': 'indexAnalyzer', 'type': 'str'}, + 'synonym_maps': {'key': 'synonymMaps', 'type': '[str]'}, + 'fields': {'key': 'fields', 'type': '[Field]'}, + } + + def __init__( + self, + *, + name: str, + type: Union[str, "DataType"], + key: Optional[bool] = None, + retrievable: Optional[bool] = None, + searchable: Optional[bool] = None, + filterable: Optional[bool] = None, + sortable: Optional[bool] = None, + facetable: Optional[bool] = None, + analyzer: Optional[Union[str, "AnalyzerName"]] = None, + search_analyzer: Optional[Union[str, "AnalyzerName"]] = None, + index_analyzer: Optional[Union[str, "AnalyzerName"]] = None, + synonym_maps: Optional[List[str]] = None, + fields: Optional[List["Field"]] = None, + **kwargs + ): + super(Field, self).__init__(**kwargs) + self.name = name + self.type = type + self.key = key + self.retrievable = retrievable + self.searchable = searchable + self.filterable = filterable + self.sortable = sortable + self.facetable = facetable + self.analyzer = analyzer + self.search_analyzer = search_analyzer + self.index_analyzer = index_analyzer + self.synonym_maps = synonym_maps + self.fields = fields + + +class FieldMapping(msrest.serialization.Model): + """Defines a mapping between a field in a data source and a target field in an index. + + All required parameters must be populated in order to send to Azure. + + :param source_field_name: Required. The name of the field in the data source. + :type source_field_name: str + :param target_field_name: The name of the target field in the index. Same as the source field + name by default. + :type target_field_name: str + :param mapping_function: A function to apply to each source field value before indexing. + :type mapping_function: ~search_service_client.models.FieldMappingFunction + """ + + _validation = { + 'source_field_name': {'required': True}, + } + + _attribute_map = { + 'source_field_name': {'key': 'sourceFieldName', 'type': 'str'}, + 'target_field_name': {'key': 'targetFieldName', 'type': 'str'}, + 'mapping_function': {'key': 'mappingFunction', 'type': 'FieldMappingFunction'}, + } + + def __init__( + self, + *, + source_field_name: str, + target_field_name: Optional[str] = None, + mapping_function: Optional["FieldMappingFunction"] = None, + **kwargs + ): + super(FieldMapping, self).__init__(**kwargs) + self.source_field_name = source_field_name + self.target_field_name = target_field_name + self.mapping_function = mapping_function + + +class FieldMappingFunction(msrest.serialization.Model): + """Represents a function that transforms a value from a data source before indexing. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the field mapping function. + :type name: str + :param parameters: A dictionary of parameter name/value pairs to pass to the function. Each + value must be of a primitive type. + :type parameters: dict[str, object] + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'parameters': {'key': 'parameters', 'type': '{object}'}, + } + + def __init__( + self, + *, + name: str, + parameters: Optional[Dict[str, object]] = None, + **kwargs + ): + super(FieldMappingFunction, self).__init__(**kwargs) + self.name = name + self.parameters = parameters + + +class FreshnessScoringFunction(ScoringFunction): + """Defines a function that boosts scores based on the value of a date-time field. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. Constant filled by server. + :type type: str + :param field_name: Required. The name of the field used as input to the scoring function. + :type field_name: str + :param boost: Required. A multiplier for the raw score. Must be a positive number not equal to + 1.0. + :type boost: float + :param interpolation: A value indicating how boosting will be interpolated across document + scores; defaults to "Linear". Possible values include: 'linear', 'constant', 'quadratic', + 'logarithmic'. + :type interpolation: str or ~search_service_client.models.ScoringFunctionInterpolation + :param parameters: Required. Parameter values for the freshness scoring function. + :type parameters: ~search_service_client.models.FreshnessScoringParameters + """ + + _validation = { + 'type': {'required': True}, + 'field_name': {'required': True}, + 'boost': {'required': True}, + 'parameters': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'field_name': {'key': 'fieldName', 'type': 'str'}, + 'boost': {'key': 'boost', 'type': 'float'}, + 'interpolation': {'key': 'interpolation', 'type': 'str'}, + 'parameters': {'key': 'freshness', 'type': 'FreshnessScoringParameters'}, + } + + def __init__( + self, + *, + field_name: str, + boost: float, + parameters: "FreshnessScoringParameters", + interpolation: Optional[Union[str, "ScoringFunctionInterpolation"]] = None, + **kwargs + ): + super(FreshnessScoringFunction, self).__init__(field_name=field_name, boost=boost, interpolation=interpolation, **kwargs) + self.type = 'freshness' + self.parameters = parameters + + +class FreshnessScoringParameters(msrest.serialization.Model): + """Provides parameter values to a freshness scoring function. + + All required parameters must be populated in order to send to Azure. + + :param boosting_duration: Required. The expiration period after which boosting will stop for a + particular document. + :type boosting_duration: ~datetime.timedelta + """ + + _validation = { + 'boosting_duration': {'required': True}, + } + + _attribute_map = { + 'boosting_duration': {'key': 'boostingDuration', 'type': 'duration'}, + } + + def __init__( + self, + *, + boosting_duration: datetime.timedelta, + **kwargs + ): + super(FreshnessScoringParameters, self).__init__(**kwargs) + self.boosting_duration = boosting_duration + + +class GetIndexStatisticsResult(msrest.serialization.Model): + """Statistics for a given index. Statistics are collected periodically and are not guaranteed to always be up-to-date. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar document_count: Required. The number of documents in the index. + :vartype document_count: long + :ivar storage_size: Required. The amount of storage in bytes consumed by the index. + :vartype storage_size: long + """ + + _validation = { + 'document_count': {'required': True, 'readonly': True}, + 'storage_size': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'document_count': {'key': 'documentCount', 'type': 'long'}, + 'storage_size': {'key': 'storageSize', 'type': 'long'}, + } + + def __init__( + self, + **kwargs + ): + super(GetIndexStatisticsResult, self).__init__(**kwargs) + self.document_count = None + self.storage_size = None + + +class HighWaterMarkChangeDetectionPolicy(DataChangeDetectionPolicy): + """Defines a data change detection policy that captures changes based on the value of a high water mark column. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param high_water_mark_column_name: Required. The name of the high water mark column. + :type high_water_mark_column_name: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'high_water_mark_column_name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'high_water_mark_column_name': {'key': 'highWaterMarkColumnName', 'type': 'str'}, + } + + def __init__( + self, + *, + high_water_mark_column_name: str, + **kwargs + ): + super(HighWaterMarkChangeDetectionPolicy, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy' + self.high_water_mark_column_name = high_water_mark_column_name + + +class ImageAnalysisSkill(Skill): + """A skill that analyzes image files. It extracts a rich set of visual features based on the image content. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param default_language_code: A value indicating which language code to use. Default is en. + Possible values include: 'en', 'es', 'ja', 'pt', 'zh'. + :type default_language_code: str or ~search_service_client.models.ImageAnalysisSkillLanguage + :param visual_features: A list of visual features. + :type visual_features: list[str or ~search_service_client.models.VisualFeature] + :param details: A string indicating which domain-specific details to return. + :type details: list[str or ~search_service_client.models.ImageDetail] + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'default_language_code': {'key': 'defaultLanguageCode', 'type': 'str'}, + 'visual_features': {'key': 'visualFeatures', 'type': '[str]'}, + 'details': {'key': 'details', 'type': '[str]'}, + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + default_language_code: Optional[Union[str, "ImageAnalysisSkillLanguage"]] = None, + visual_features: Optional[List[Union[str, "VisualFeature"]]] = None, + details: Optional[List[Union[str, "ImageDetail"]]] = None, + **kwargs + ): + super(ImageAnalysisSkill, self).__init__(name=name, description=description, context=context, inputs=inputs, outputs=outputs, **kwargs) + self.odata_type = '#Microsoft.Skills.Vision.ImageAnalysisSkill' + self.default_language_code = default_language_code + self.visual_features = visual_features + self.details = details + + +class Index(msrest.serialization.Model): + """Represents a search index definition, which describes the fields and search behavior of an index. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the index. + :type name: str + :param fields: Required. The fields of the index. + :type fields: list[~search_service_client.models.Field] + :param scoring_profiles: The scoring profiles for the index. + :type scoring_profiles: list[~search_service_client.models.ScoringProfile] + :param default_scoring_profile: The name of the scoring profile to use if none is specified in + the query. If this property is not set and no scoring profile is specified in the query, then + default scoring (tf-idf) will be used. + :type default_scoring_profile: str + :param cors_options: Options to control Cross-Origin Resource Sharing (CORS) for the index. + :type cors_options: ~search_service_client.models.CorsOptions + :param suggesters: The suggesters for the index. + :type suggesters: list[~search_service_client.models.Suggester] + :param analyzers: The analyzers for the index. + :type analyzers: list[~search_service_client.models.Analyzer] + :param tokenizers: The tokenizers for the index. + :type tokenizers: list[~search_service_client.models.Tokenizer] + :param token_filters: The token filters for the index. + :type token_filters: list[~search_service_client.models.TokenFilter] + :param char_filters: The character filters for the index. + :type char_filters: list[~search_service_client.models.CharFilter] + :param encryption_key: A description of an encryption key that you create in Azure Key Vault. + This key is used to provide an additional level of encryption-at-rest for your data when you + want full assurance that no one, not even Microsoft, can decrypt your data in Azure Cognitive + Search. Once you have encrypted your data, it will always remain encrypted. Azure Cognitive + Search will ignore attempts to set this property to null. You can change this property as + needed if you want to rotate your encryption key; Your data will be unaffected. Encryption with + customer-managed keys is not available for free search services, and is only available for paid + services created on or after January 1, 2019. + :type encryption_key: ~search_service_client.models.EncryptionKey + :param e_tag: The ETag of the index. + :type e_tag: str + """ + + _validation = { + 'name': {'required': True}, + 'fields': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'fields': {'key': 'fields', 'type': '[Field]'}, + 'scoring_profiles': {'key': 'scoringProfiles', 'type': '[ScoringProfile]'}, + 'default_scoring_profile': {'key': 'defaultScoringProfile', 'type': 'str'}, + 'cors_options': {'key': 'corsOptions', 'type': 'CorsOptions'}, + 'suggesters': {'key': 'suggesters', 'type': '[Suggester]'}, + 'analyzers': {'key': 'analyzers', 'type': '[Analyzer]'}, + 'tokenizers': {'key': 'tokenizers', 'type': '[Tokenizer]'}, + 'token_filters': {'key': 'tokenFilters', 'type': '[TokenFilter]'}, + 'char_filters': {'key': 'charFilters', 'type': '[CharFilter]'}, + 'encryption_key': {'key': 'encryptionKey', 'type': 'EncryptionKey'}, + 'e_tag': {'key': '@odata\\.etag', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + fields: List["Field"], + scoring_profiles: Optional[List["ScoringProfile"]] = None, + default_scoring_profile: Optional[str] = None, + cors_options: Optional["CorsOptions"] = None, + suggesters: Optional[List["Suggester"]] = None, + analyzers: Optional[List["Analyzer"]] = None, + tokenizers: Optional[List["Tokenizer"]] = None, + token_filters: Optional[List["TokenFilter"]] = None, + char_filters: Optional[List["CharFilter"]] = None, + encryption_key: Optional["EncryptionKey"] = None, + e_tag: Optional[str] = None, + **kwargs + ): + super(Index, self).__init__(**kwargs) + self.name = name + self.fields = fields + self.scoring_profiles = scoring_profiles + self.default_scoring_profile = default_scoring_profile + self.cors_options = cors_options + self.suggesters = suggesters + self.analyzers = analyzers + self.tokenizers = tokenizers + self.token_filters = token_filters + self.char_filters = char_filters + self.encryption_key = encryption_key + self.e_tag = e_tag + + +class Indexer(msrest.serialization.Model): + """Represents an indexer. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the indexer. + :type name: str + :param description: The description of the indexer. + :type description: str + :param data_source_name: Required. The name of the datasource from which this indexer reads + data. + :type data_source_name: str + :param skillset_name: The name of the skillset executing with this indexer. + :type skillset_name: str + :param target_index_name: Required. The name of the index to which this indexer writes data. + :type target_index_name: str + :param schedule: The schedule for this indexer. + :type schedule: ~search_service_client.models.IndexingSchedule + :param parameters: Parameters for indexer execution. + :type parameters: ~search_service_client.models.IndexingParameters + :param field_mappings: Defines mappings between fields in the data source and corresponding + target fields in the index. + :type field_mappings: list[~search_service_client.models.FieldMapping] + :param output_field_mappings: Output field mappings are applied after enrichment and + immediately before indexing. + :type output_field_mappings: list[~search_service_client.models.FieldMapping] + :param is_disabled: A value indicating whether the indexer is disabled. Default is false. + :type is_disabled: bool + :param e_tag: The ETag of the Indexer. + :type e_tag: str + """ + + _validation = { + 'name': {'required': True}, + 'data_source_name': {'required': True}, + 'target_index_name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'data_source_name': {'key': 'dataSourceName', 'type': 'str'}, + 'skillset_name': {'key': 'skillsetName', 'type': 'str'}, + 'target_index_name': {'key': 'targetIndexName', 'type': 'str'}, + 'schedule': {'key': 'schedule', 'type': 'IndexingSchedule'}, + 'parameters': {'key': 'parameters', 'type': 'IndexingParameters'}, + 'field_mappings': {'key': 'fieldMappings', 'type': '[FieldMapping]'}, + 'output_field_mappings': {'key': 'outputFieldMappings', 'type': '[FieldMapping]'}, + 'is_disabled': {'key': 'disabled', 'type': 'bool'}, + 'e_tag': {'key': '@odata\\.etag', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + data_source_name: str, + target_index_name: str, + description: Optional[str] = None, + skillset_name: Optional[str] = None, + schedule: Optional["IndexingSchedule"] = None, + parameters: Optional["IndexingParameters"] = None, + field_mappings: Optional[List["FieldMapping"]] = None, + output_field_mappings: Optional[List["FieldMapping"]] = None, + is_disabled: Optional[bool] = False, + e_tag: Optional[str] = None, + **kwargs + ): + super(Indexer, self).__init__(**kwargs) + self.name = name + self.description = description + self.data_source_name = data_source_name + self.skillset_name = skillset_name + self.target_index_name = target_index_name + self.schedule = schedule + self.parameters = parameters + self.field_mappings = field_mappings + self.output_field_mappings = output_field_mappings + self.is_disabled = is_disabled + self.e_tag = e_tag + + +class IndexerExecutionInfo(msrest.serialization.Model): + """Represents the current status and execution history of an indexer. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar status: Required. Overall indexer status. Possible values include: 'unknown', 'error', + 'running'. + :vartype status: str or ~search_service_client.models.IndexerStatus + :ivar last_result: The result of the most recent or an in-progress indexer execution. + :vartype last_result: ~search_service_client.models.IndexerExecutionResult + :ivar execution_history: Required. History of the recent indexer executions, sorted in reverse + chronological order. + :vartype execution_history: list[~search_service_client.models.IndexerExecutionResult] + :ivar limits: Required. The execution limits for the indexer. + :vartype limits: ~search_service_client.models.IndexerLimits + """ + + _validation = { + 'status': {'required': True, 'readonly': True}, + 'last_result': {'readonly': True}, + 'execution_history': {'required': True, 'readonly': True}, + 'limits': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'last_result': {'key': 'lastResult', 'type': 'IndexerExecutionResult'}, + 'execution_history': {'key': 'executionHistory', 'type': '[IndexerExecutionResult]'}, + 'limits': {'key': 'limits', 'type': 'IndexerLimits'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexerExecutionInfo, self).__init__(**kwargs) + self.status = None + self.last_result = None + self.execution_history = None + self.limits = None + + +class IndexerExecutionResult(msrest.serialization.Model): + """Represents the result of an individual indexer execution. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar status: Required. The outcome of this indexer execution. Possible values include: + 'transientFailure', 'success', 'inProgress', 'reset'. + :vartype status: str or ~search_service_client.models.IndexerExecutionStatus + :ivar error_message: The error message indicating the top-level error, if any. + :vartype error_message: str + :ivar start_time: The start time of this indexer execution. + :vartype start_time: ~datetime.datetime + :ivar end_time: The end time of this indexer execution, if the execution has already completed. + :vartype end_time: ~datetime.datetime + :ivar errors: Required. The item-level indexing errors. + :vartype errors: list[~search_service_client.models.ItemError] + :ivar warnings: Required. The item-level indexing warnings. + :vartype warnings: list[~search_service_client.models.ItemWarning] + :ivar item_count: Required. The number of items that were processed during this indexer + execution. This includes both successfully processed items and items where indexing was + attempted but failed. + :vartype item_count: int + :ivar failed_item_count: Required. The number of items that failed to be indexed during this + indexer execution. + :vartype failed_item_count: int + :ivar initial_tracking_state: Change tracking state with which an indexer execution started. + :vartype initial_tracking_state: str + :ivar final_tracking_state: Change tracking state with which an indexer execution finished. + :vartype final_tracking_state: str + """ + + _validation = { + 'status': {'required': True, 'readonly': True}, + 'error_message': {'readonly': True}, + 'start_time': {'readonly': True}, + 'end_time': {'readonly': True}, + 'errors': {'required': True, 'readonly': True}, + 'warnings': {'required': True, 'readonly': True}, + 'item_count': {'required': True, 'readonly': True}, + 'failed_item_count': {'required': True, 'readonly': True}, + 'initial_tracking_state': {'readonly': True}, + 'final_tracking_state': {'readonly': True}, + } + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'error_message': {'key': 'errorMessage', 'type': 'str'}, + 'start_time': {'key': 'startTime', 'type': 'iso-8601'}, + 'end_time': {'key': 'endTime', 'type': 'iso-8601'}, + 'errors': {'key': 'errors', 'type': '[ItemError]'}, + 'warnings': {'key': 'warnings', 'type': '[ItemWarning]'}, + 'item_count': {'key': 'itemsProcessed', 'type': 'int'}, + 'failed_item_count': {'key': 'itemsFailed', 'type': 'int'}, + 'initial_tracking_state': {'key': 'initialTrackingState', 'type': 'str'}, + 'final_tracking_state': {'key': 'finalTrackingState', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexerExecutionResult, self).__init__(**kwargs) + self.status = None + self.error_message = None + self.start_time = None + self.end_time = None + self.errors = None + self.warnings = None + self.item_count = None + self.failed_item_count = None + self.initial_tracking_state = None + self.final_tracking_state = None + + +class IndexerLimits(msrest.serialization.Model): + """IndexerLimits. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar max_run_time: The maximum duration that the indexer is permitted to run for one + execution. + :vartype max_run_time: ~datetime.timedelta + :ivar max_document_extraction_size: The maximum size of a document, in bytes, which will be + considered valid for indexing. + :vartype max_document_extraction_size: long + :ivar max_document_content_characters_to_extract: The maximum number of characters that will be + extracted from a document picked up for indexing. + :vartype max_document_content_characters_to_extract: long + """ + + _validation = { + 'max_run_time': {'readonly': True}, + 'max_document_extraction_size': {'readonly': True}, + 'max_document_content_characters_to_extract': {'readonly': True}, + } + + _attribute_map = { + 'max_run_time': {'key': 'maxRunTime', 'type': 'duration'}, + 'max_document_extraction_size': {'key': 'maxDocumentExtractionSize', 'type': 'long'}, + 'max_document_content_characters_to_extract': {'key': 'maxDocumentContentCharactersToExtract', 'type': 'long'}, + } + + def __init__( + self, + **kwargs + ): + super(IndexerLimits, self).__init__(**kwargs) + self.max_run_time = None + self.max_document_extraction_size = None + self.max_document_content_characters_to_extract = None + + +class IndexingParameters(msrest.serialization.Model): + """Represents parameters for indexer execution. + + :param batch_size: The number of items that are read from the data source and indexed as a + single batch in order to improve performance. The default depends on the data source type. + :type batch_size: int + :param max_failed_items: The maximum number of items that can fail indexing for indexer + execution to still be considered successful. -1 means no limit. Default is 0. + :type max_failed_items: int + :param max_failed_items_per_batch: The maximum number of items in a single batch that can fail + indexing for the batch to still be considered successful. -1 means no limit. Default is 0. + :type max_failed_items_per_batch: int + :param configuration: A dictionary of indexer-specific configuration properties. Each name is + the name of a specific property. Each value must be of a primitive type. + :type configuration: dict[str, object] + """ + + _attribute_map = { + 'batch_size': {'key': 'batchSize', 'type': 'int'}, + 'max_failed_items': {'key': 'maxFailedItems', 'type': 'int'}, + 'max_failed_items_per_batch': {'key': 'maxFailedItemsPerBatch', 'type': 'int'}, + 'configuration': {'key': 'configuration', 'type': '{object}'}, + } + + def __init__( + self, + *, + batch_size: Optional[int] = None, + max_failed_items: Optional[int] = 0, + max_failed_items_per_batch: Optional[int] = 0, + configuration: Optional[Dict[str, object]] = None, + **kwargs + ): + super(IndexingParameters, self).__init__(**kwargs) + self.batch_size = batch_size + self.max_failed_items = max_failed_items + self.max_failed_items_per_batch = max_failed_items_per_batch + self.configuration = configuration + + +class IndexingSchedule(msrest.serialization.Model): + """Represents a schedule for indexer execution. + + All required parameters must be populated in order to send to Azure. + + :param interval: Required. The interval of time between indexer executions. + :type interval: ~datetime.timedelta + :param start_time: The time when an indexer should start running. + :type start_time: ~datetime.datetime + """ + + _validation = { + 'interval': {'required': True}, + } + + _attribute_map = { + 'interval': {'key': 'interval', 'type': 'duration'}, + 'start_time': {'key': 'startTime', 'type': 'iso-8601'}, + } + + def __init__( + self, + *, + interval: datetime.timedelta, + start_time: Optional[datetime.datetime] = None, + **kwargs + ): + super(IndexingSchedule, self).__init__(**kwargs) + self.interval = interval + self.start_time = start_time + + +class InputFieldMappingEntry(msrest.serialization.Model): + """Input field mapping for a skill. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the input. + :type name: str + :param source: The source of the input. + :type source: str + :param source_context: The source context used for selecting recursive inputs. + :type source_context: str + :param inputs: The recursive inputs used when creating a complex type. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'source': {'key': 'source', 'type': 'str'}, + 'source_context': {'key': 'sourceContext', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + } + + def __init__( + self, + *, + name: str, + source: Optional[str] = None, + source_context: Optional[str] = None, + inputs: Optional[List["InputFieldMappingEntry"]] = None, + **kwargs + ): + super(InputFieldMappingEntry, self).__init__(**kwargs) + self.name = name + self.source = source + self.source_context = source_context + self.inputs = inputs + + +class ItemError(msrest.serialization.Model): + """Represents an item- or document-level indexing error. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar key: The key of the item for which indexing failed. + :vartype key: str + :ivar error_message: Required. The message describing the error that occurred while processing + the item. + :vartype error_message: str + :ivar status_code: Required. The status code indicating why the indexing operation failed. + Possible values include: 400 for a malformed input document, 404 for document not found, 409 + for a version conflict, 422 when the index is temporarily unavailable, or 503 for when the + service is too busy. + :vartype status_code: int + :ivar name: The name of the source at which the error originated. For example, this could refer + to a particular skill in the attached skillset. This may not be always available. + :vartype name: str + :ivar details: Additional, verbose details about the error to assist in debugging the indexer. + This may not be always available. + :vartype details: str + :ivar documentation_link: A link to a troubleshooting guide for these classes of errors. This + may not be always available. + :vartype documentation_link: str + """ + + _validation = { + 'key': {'readonly': True}, + 'error_message': {'required': True, 'readonly': True}, + 'status_code': {'required': True, 'readonly': True}, + 'name': {'readonly': True}, + 'details': {'readonly': True}, + 'documentation_link': {'readonly': True}, + } + + _attribute_map = { + 'key': {'key': 'key', 'type': 'str'}, + 'error_message': {'key': 'errorMessage', 'type': 'str'}, + 'status_code': {'key': 'statusCode', 'type': 'int'}, + 'name': {'key': 'name', 'type': 'str'}, + 'details': {'key': 'details', 'type': 'str'}, + 'documentation_link': {'key': 'documentationLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ItemError, self).__init__(**kwargs) + self.key = None + self.error_message = None + self.status_code = None + self.name = None + self.details = None + self.documentation_link = None + + +class ItemWarning(msrest.serialization.Model): + """Represents an item-level warning. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar key: The key of the item which generated a warning. + :vartype key: str + :ivar message: Required. The message describing the warning that occurred while processing the + item. + :vartype message: str + :ivar name: The name of the source at which the warning originated. For example, this could + refer to a particular skill in the attached skillset. This may not be always available. + :vartype name: str + :ivar details: Additional, verbose details about the warning to assist in debugging the + indexer. This may not be always available. + :vartype details: str + :ivar documentation_link: A link to a troubleshooting guide for these classes of warnings. This + may not be always available. + :vartype documentation_link: str + """ + + _validation = { + 'key': {'readonly': True}, + 'message': {'required': True, 'readonly': True}, + 'name': {'readonly': True}, + 'details': {'readonly': True}, + 'documentation_link': {'readonly': True}, + } + + _attribute_map = { + 'key': {'key': 'key', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'details': {'key': 'details', 'type': 'str'}, + 'documentation_link': {'key': 'documentationLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ItemWarning, self).__init__(**kwargs) + self.key = None + self.message = None + self.name = None + self.details = None + self.documentation_link = None + + +class KeepTokenFilter(TokenFilter): + """A token filter that only keeps tokens with text contained in a specified list of words. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param keep_words: Required. The list of words to keep. + :type keep_words: list[str] + :param lower_case_keep_words: A value indicating whether to lower case all words first. Default + is false. + :type lower_case_keep_words: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'keep_words': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'keep_words': {'key': 'keepWords', 'type': '[str]'}, + 'lower_case_keep_words': {'key': 'keepWordsCase', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + keep_words: List[str], + lower_case_keep_words: Optional[bool] = False, + **kwargs + ): + super(KeepTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.KeepTokenFilter' + self.keep_words = keep_words + self.lower_case_keep_words = lower_case_keep_words + + +class KeyPhraseExtractionSkill(Skill): + """A skill that uses text analytics for key phrase extraction. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param default_language_code: A value indicating which language code to use. Default is en. + Possible values include: 'da', 'nl', 'en', 'fi', 'fr', 'de', 'it', 'ja', 'ko', 'no', 'pl', 'pt- + PT', 'pt-BR', 'ru', 'es', 'sv'. + :type default_language_code: str or + ~search_service_client.models.KeyPhraseExtractionSkillLanguage + :param max_key_phrase_count: A number indicating how many key phrases to return. If absent, all + identified key phrases will be returned. + :type max_key_phrase_count: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'default_language_code': {'key': 'defaultLanguageCode', 'type': 'str'}, + 'max_key_phrase_count': {'key': 'maxKeyPhraseCount', 'type': 'int'}, + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + default_language_code: Optional[Union[str, "KeyPhraseExtractionSkillLanguage"]] = None, + max_key_phrase_count: Optional[int] = None, + **kwargs + ): + super(KeyPhraseExtractionSkill, self).__init__(name=name, description=description, context=context, inputs=inputs, outputs=outputs, **kwargs) + self.odata_type = '#Microsoft.Skills.Text.KeyPhraseExtractionSkill' + self.default_language_code = default_language_code + self.max_key_phrase_count = max_key_phrase_count + + +class KeywordMarkerTokenFilter(TokenFilter): + """Marks terms as keywords. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param keywords: Required. A list of words to mark as keywords. + :type keywords: list[str] + :param ignore_case: A value indicating whether to ignore case. If true, all words are converted + to lower case first. Default is false. + :type ignore_case: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'keywords': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'keywords': {'key': 'keywords', 'type': '[str]'}, + 'ignore_case': {'key': 'ignoreCase', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + keywords: List[str], + ignore_case: Optional[bool] = False, + **kwargs + ): + super(KeywordMarkerTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.KeywordMarkerTokenFilter' + self.keywords = keywords + self.ignore_case = ignore_case + + +class KeywordTokenizer(Tokenizer): + """Emits the entire input as a single token. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param buffer_size: The read buffer size in bytes. Default is 256. + :type buffer_size: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'buffer_size': {'key': 'bufferSize', 'type': 'int'}, + } + + def __init__( + self, + *, + name: str, + buffer_size: Optional[int] = 256, + **kwargs + ): + super(KeywordTokenizer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.KeywordTokenizer' + self.buffer_size = buffer_size + + +class KeywordTokenizerV2(Tokenizer): + """Emits the entire input as a single token. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Default is 256. Tokens longer than the + maximum length are split. The maximum token length that can be used is 300 characters. + :type max_token_length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + } + + def __init__( + self, + *, + name: str, + max_token_length: Optional[int] = 256, + **kwargs + ): + super(KeywordTokenizerV2, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.KeywordTokenizerV2' + self.max_token_length = max_token_length + + +class LanguageDetectionSkill(Skill): + """A skill that detects the language of input text and reports a single language code for every document submitted on the request. The language code is paired with a score indicating the confidence of the analysis. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + **kwargs + ): + super(LanguageDetectionSkill, self).__init__(name=name, description=description, context=context, inputs=inputs, outputs=outputs, **kwargs) + self.odata_type = '#Microsoft.Skills.Text.LanguageDetectionSkill' + + +class LengthTokenFilter(TokenFilter): + """Removes words that are too long or too short. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param min: The minimum length in characters. Default is 0. Maximum is 300. Must be less than + the value of max. + :type min: int + :param max: The maximum length in characters. Default and maximum is 300. + :type max: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'min': {'maximum': 300}, + 'max': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min': {'key': 'min', 'type': 'int'}, + 'max': {'key': 'max', 'type': 'int'}, + } + + def __init__( + self, + *, + name: str, + min: Optional[int] = 0, + max: Optional[int] = 300, + **kwargs + ): + super(LengthTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.LengthTokenFilter' + self.min = min + self.max = max + + +class LimitTokenFilter(TokenFilter): + """Limits the number of tokens while indexing. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param max_token_count: The maximum number of tokens to produce. Default is 1. + :type max_token_count: int + :param consume_all_tokens: A value indicating whether all tokens from the input must be + consumed even if maxTokenCount is reached. Default is false. + :type consume_all_tokens: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_count': {'key': 'maxTokenCount', 'type': 'int'}, + 'consume_all_tokens': {'key': 'consumeAllTokens', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + max_token_count: Optional[int] = 1, + consume_all_tokens: Optional[bool] = False, + **kwargs + ): + super(LimitTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.LimitTokenFilter' + self.max_token_count = max_token_count + self.consume_all_tokens = consume_all_tokens + + +class ListDataSourcesResult(msrest.serialization.Model): + """Response from a List Datasources request. If successful, it includes the full definitions of all datasources. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar data_sources: Required. The datasources in the Search service. + :vartype data_sources: list[~search_service_client.models.DataSource] + """ + + _validation = { + 'data_sources': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'data_sources': {'key': 'value', 'type': '[DataSource]'}, + } + + def __init__( + self, + **kwargs + ): + super(ListDataSourcesResult, self).__init__(**kwargs) + self.data_sources = None + + +class ListIndexersResult(msrest.serialization.Model): + """Response from a List Indexers request. If successful, it includes the full definitions of all indexers. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar indexers: Required. The indexers in the Search service. + :vartype indexers: list[~search_service_client.models.Indexer] + """ + + _validation = { + 'indexers': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'indexers': {'key': 'value', 'type': '[Indexer]'}, + } + + def __init__( + self, + **kwargs + ): + super(ListIndexersResult, self).__init__(**kwargs) + self.indexers = None + + +class ListIndexesResult(msrest.serialization.Model): + """Response from a List Indexes request. If successful, it includes the full definitions of all indexes. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar indexes: Required. The indexes in the Search service. + :vartype indexes: list[~search_service_client.models.Index] + """ + + _validation = { + 'indexes': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'indexes': {'key': 'value', 'type': '[Index]'}, + } + + def __init__( + self, + **kwargs + ): + super(ListIndexesResult, self).__init__(**kwargs) + self.indexes = None + + +class ListSkillsetsResult(msrest.serialization.Model): + """Response from a list Skillset request. If successful, it includes the full definitions of all skillsets. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar skillsets: Required. The skillsets defined in the Search service. + :vartype skillsets: list[~search_service_client.models.Skillset] + """ + + _validation = { + 'skillsets': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'skillsets': {'key': 'value', 'type': '[Skillset]'}, + } + + def __init__( + self, + **kwargs + ): + super(ListSkillsetsResult, self).__init__(**kwargs) + self.skillsets = None + + +class ListSynonymMapsResult(msrest.serialization.Model): + """Response from a List SynonymMaps request. If successful, it includes the full definitions of all synonym maps. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar synonym_maps: Required. The synonym maps in the Search service. + :vartype synonym_maps: list[~search_service_client.models.SynonymMap] + """ + + _validation = { + 'synonym_maps': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'synonym_maps': {'key': 'value', 'type': '[SynonymMap]'}, + } + + def __init__( + self, + **kwargs + ): + super(ListSynonymMapsResult, self).__init__(**kwargs) + self.synonym_maps = None + + +class MagnitudeScoringFunction(ScoringFunction): + """Defines a function that boosts scores based on the magnitude of a numeric field. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. Constant filled by server. + :type type: str + :param field_name: Required. The name of the field used as input to the scoring function. + :type field_name: str + :param boost: Required. A multiplier for the raw score. Must be a positive number not equal to + 1.0. + :type boost: float + :param interpolation: A value indicating how boosting will be interpolated across document + scores; defaults to "Linear". Possible values include: 'linear', 'constant', 'quadratic', + 'logarithmic'. + :type interpolation: str or ~search_service_client.models.ScoringFunctionInterpolation + :param parameters: Required. Parameter values for the magnitude scoring function. + :type parameters: ~search_service_client.models.MagnitudeScoringParameters + """ + + _validation = { + 'type': {'required': True}, + 'field_name': {'required': True}, + 'boost': {'required': True}, + 'parameters': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'field_name': {'key': 'fieldName', 'type': 'str'}, + 'boost': {'key': 'boost', 'type': 'float'}, + 'interpolation': {'key': 'interpolation', 'type': 'str'}, + 'parameters': {'key': 'magnitude', 'type': 'MagnitudeScoringParameters'}, + } + + def __init__( + self, + *, + field_name: str, + boost: float, + parameters: "MagnitudeScoringParameters", + interpolation: Optional[Union[str, "ScoringFunctionInterpolation"]] = None, + **kwargs + ): + super(MagnitudeScoringFunction, self).__init__(field_name=field_name, boost=boost, interpolation=interpolation, **kwargs) + self.type = 'magnitude' + self.parameters = parameters + + +class MagnitudeScoringParameters(msrest.serialization.Model): + """Provides parameter values to a magnitude scoring function. + + All required parameters must be populated in order to send to Azure. + + :param boosting_range_start: Required. The field value at which boosting starts. + :type boosting_range_start: float + :param boosting_range_end: Required. The field value at which boosting ends. + :type boosting_range_end: float + :param should_boost_beyond_range_by_constant: A value indicating whether to apply a constant + boost for field values beyond the range end value; default is false. + :type should_boost_beyond_range_by_constant: bool + """ + + _validation = { + 'boosting_range_start': {'required': True}, + 'boosting_range_end': {'required': True}, + } + + _attribute_map = { + 'boosting_range_start': {'key': 'boostingRangeStart', 'type': 'float'}, + 'boosting_range_end': {'key': 'boostingRangeEnd', 'type': 'float'}, + 'should_boost_beyond_range_by_constant': {'key': 'constantBoostBeyondRange', 'type': 'bool'}, + } + + def __init__( + self, + *, + boosting_range_start: float, + boosting_range_end: float, + should_boost_beyond_range_by_constant: Optional[bool] = None, + **kwargs + ): + super(MagnitudeScoringParameters, self).__init__(**kwargs) + self.boosting_range_start = boosting_range_start + self.boosting_range_end = boosting_range_end + self.should_boost_beyond_range_by_constant = should_boost_beyond_range_by_constant + + +class MappingCharFilter(CharFilter): + """A character filter that applies mappings defined with the mappings option. Matching is greedy (longest pattern matching at a given point wins). Replacement is allowed to be the empty string. This character filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the char filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param mappings: Required. A list of mappings of the following format: "a=>b" (all occurrences + of the character "a" will be replaced with character "b"). + :type mappings: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'mappings': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'mappings': {'key': 'mappings', 'type': '[str]'}, + } + + def __init__( + self, + *, + name: str, + mappings: List[str], + **kwargs + ): + super(MappingCharFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.MappingCharFilter' + self.mappings = mappings + + +class MergeSkill(Skill): + """A skill for merging two or more strings into a single unified string, with an optional user-defined delimiter separating each component part. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param insert_pre_tag: The tag indicates the start of the merged text. By default, the tag is + an empty space. + :type insert_pre_tag: str + :param insert_post_tag: The tag indicates the end of the merged text. By default, the tag is an + empty space. + :type insert_post_tag: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'insert_pre_tag': {'key': 'insertPreTag', 'type': 'str'}, + 'insert_post_tag': {'key': 'insertPostTag', 'type': 'str'}, + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + insert_pre_tag: Optional[str] = " ", + insert_post_tag: Optional[str] = " ", + **kwargs + ): + super(MergeSkill, self).__init__(name=name, description=description, context=context, inputs=inputs, outputs=outputs, **kwargs) + self.odata_type = '#Microsoft.Skills.Text.MergeSkill' + self.insert_pre_tag = insert_pre_tag + self.insert_post_tag = insert_post_tag + + +class MicrosoftLanguageStemmingTokenizer(Tokenizer): + """Divides text using language-specific rules and reduces words to their base forms. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Tokens longer than the maximum length are + split. Maximum token length that can be used is 300 characters. Tokens longer than 300 + characters are first split into tokens of length 300 and then each of those tokens is split + based on the max token length set. Default is 255. + :type max_token_length: int + :param is_search_tokenizer: A value indicating how the tokenizer is used. Set to true if used + as the search tokenizer, set to false if used as the indexing tokenizer. Default is false. + :type is_search_tokenizer: bool + :param language: The language to use. The default is English. Possible values include: + 'arabic', 'bangla', 'bulgarian', 'catalan', 'croatian', 'czech', 'danish', 'dutch', 'english', + 'estonian', 'finnish', 'french', 'german', 'greek', 'gujarati', 'hebrew', 'hindi', 'hungarian', + 'icelandic', 'indonesian', 'italian', 'kannada', 'latvian', 'lithuanian', 'malay', 'malayalam', + 'marathi', 'norwegianBokmaal', 'polish', 'portuguese', 'portugueseBrazilian', 'punjabi', + 'romanian', 'russian', 'serbianCyrillic', 'serbianLatin', 'slovak', 'slovenian', 'spanish', + 'swedish', 'tamil', 'telugu', 'turkish', 'ukrainian', 'urdu'. + :type language: str or ~search_service_client.models.MicrosoftStemmingTokenizerLanguage + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + 'is_search_tokenizer': {'key': 'isSearchTokenizer', 'type': 'bool'}, + 'language': {'key': 'language', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + max_token_length: Optional[int] = 255, + is_search_tokenizer: Optional[bool] = False, + language: Optional[Union[str, "MicrosoftStemmingTokenizerLanguage"]] = None, + **kwargs + ): + super(MicrosoftLanguageStemmingTokenizer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.MicrosoftLanguageStemmingTokenizer' + self.max_token_length = max_token_length + self.is_search_tokenizer = is_search_tokenizer + self.language = language + + +class MicrosoftLanguageTokenizer(Tokenizer): + """Divides text using language-specific rules. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Tokens longer than the maximum length are + split. Maximum token length that can be used is 300 characters. Tokens longer than 300 + characters are first split into tokens of length 300 and then each of those tokens is split + based on the max token length set. Default is 255. + :type max_token_length: int + :param is_search_tokenizer: A value indicating how the tokenizer is used. Set to true if used + as the search tokenizer, set to false if used as the indexing tokenizer. Default is false. + :type is_search_tokenizer: bool + :param language: The language to use. The default is English. Possible values include: + 'bangla', 'bulgarian', 'catalan', 'chineseSimplified', 'chineseTraditional', 'croatian', + 'czech', 'danish', 'dutch', 'english', 'french', 'german', 'greek', 'gujarati', 'hindi', + 'icelandic', 'indonesian', 'italian', 'japanese', 'kannada', 'korean', 'malay', 'malayalam', + 'marathi', 'norwegianBokmaal', 'polish', 'portuguese', 'portugueseBrazilian', 'punjabi', + 'romanian', 'russian', 'serbianCyrillic', 'serbianLatin', 'slovenian', 'spanish', 'swedish', + 'tamil', 'telugu', 'thai', 'ukrainian', 'urdu', 'vietnamese'. + :type language: str or ~search_service_client.models.MicrosoftTokenizerLanguage + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + 'is_search_tokenizer': {'key': 'isSearchTokenizer', 'type': 'bool'}, + 'language': {'key': 'language', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + max_token_length: Optional[int] = 255, + is_search_tokenizer: Optional[bool] = False, + language: Optional[Union[str, "MicrosoftTokenizerLanguage"]] = None, + **kwargs + ): + super(MicrosoftLanguageTokenizer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.MicrosoftLanguageTokenizer' + self.max_token_length = max_token_length + self.is_search_tokenizer = is_search_tokenizer + self.language = language + + +class NGramTokenFilter(TokenFilter): + """Generates n-grams of the given size(s). This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param min_gram: The minimum n-gram length. Default is 1. Must be less than the value of + maxGram. + :type min_gram: int + :param max_gram: The maximum n-gram length. Default is 2. + :type max_gram: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min_gram': {'key': 'minGram', 'type': 'int'}, + 'max_gram': {'key': 'maxGram', 'type': 'int'}, + } + + def __init__( + self, + *, + name: str, + min_gram: Optional[int] = 1, + max_gram: Optional[int] = 2, + **kwargs + ): + super(NGramTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.NGramTokenFilter' + self.min_gram = min_gram + self.max_gram = max_gram + + +class NGramTokenFilterV2(TokenFilter): + """Generates n-grams of the given size(s). This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param min_gram: The minimum n-gram length. Default is 1. Maximum is 300. Must be less than the + value of maxGram. + :type min_gram: int + :param max_gram: The maximum n-gram length. Default is 2. Maximum is 300. + :type max_gram: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'min_gram': {'maximum': 300}, + 'max_gram': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min_gram': {'key': 'minGram', 'type': 'int'}, + 'max_gram': {'key': 'maxGram', 'type': 'int'}, + } + + def __init__( + self, + *, + name: str, + min_gram: Optional[int] = 1, + max_gram: Optional[int] = 2, + **kwargs + ): + super(NGramTokenFilterV2, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.NGramTokenFilterV2' + self.min_gram = min_gram + self.max_gram = max_gram + + +class NGramTokenizer(Tokenizer): + """Tokenizes the input into n-grams of the given size(s). This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param min_gram: The minimum n-gram length. Default is 1. Maximum is 300. Must be less than the + value of maxGram. + :type min_gram: int + :param max_gram: The maximum n-gram length. Default is 2. Maximum is 300. + :type max_gram: int + :param token_chars: Character classes to keep in the tokens. + :type token_chars: list[str or ~search_service_client.models.TokenCharacterKind] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'min_gram': {'maximum': 300}, + 'max_gram': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'min_gram': {'key': 'minGram', 'type': 'int'}, + 'max_gram': {'key': 'maxGram', 'type': 'int'}, + 'token_chars': {'key': 'tokenChars', 'type': '[str]'}, + } + + def __init__( + self, + *, + name: str, + min_gram: Optional[int] = 1, + max_gram: Optional[int] = 2, + token_chars: Optional[List[Union[str, "TokenCharacterKind"]]] = None, + **kwargs + ): + super(NGramTokenizer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.NGramTokenizer' + self.min_gram = min_gram + self.max_gram = max_gram + self.token_chars = token_chars + + +class OcrSkill(Skill): + """A skill that extracts text from image files. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param text_extraction_algorithm: A value indicating which algorithm to use for extracting + text. Default is printed. Possible values include: 'printed', 'handwritten'. + :type text_extraction_algorithm: str or ~search_service_client.models.TextExtractionAlgorithm + :param default_language_code: A value indicating which language code to use. Default is en. + Possible values include: 'zh-Hans', 'zh-Hant', 'cs', 'da', 'nl', 'en', 'fi', 'fr', 'de', 'el', + 'hu', 'it', 'ja', 'ko', 'nb', 'pl', 'pt', 'ru', 'es', 'sv', 'tr', 'ar', 'ro', 'sr-Cyrl', 'sr- + Latn', 'sk'. + :type default_language_code: str or ~search_service_client.models.OcrSkillLanguage + :param should_detect_orientation: A value indicating to turn orientation detection on or not. + Default is false. + :type should_detect_orientation: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'text_extraction_algorithm': {'key': 'textExtractionAlgorithm', 'type': 'str'}, + 'default_language_code': {'key': 'defaultLanguageCode', 'type': 'str'}, + 'should_detect_orientation': {'key': 'detectOrientation', 'type': 'bool'}, + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + text_extraction_algorithm: Optional[Union[str, "TextExtractionAlgorithm"]] = None, + default_language_code: Optional[Union[str, "OcrSkillLanguage"]] = None, + should_detect_orientation: Optional[bool] = False, + **kwargs + ): + super(OcrSkill, self).__init__(name=name, description=description, context=context, inputs=inputs, outputs=outputs, **kwargs) + self.odata_type = '#Microsoft.Skills.Vision.OcrSkill' + self.text_extraction_algorithm = text_extraction_algorithm + self.default_language_code = default_language_code + self.should_detect_orientation = should_detect_orientation + + +class OutputFieldMappingEntry(msrest.serialization.Model): + """Output field mapping for a skill. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the output defined by the skill. + :type name: str + :param target_name: The target name of the output. It is optional and default to name. + :type target_name: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'target_name': {'key': 'targetName', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + target_name: Optional[str] = None, + **kwargs + ): + super(OutputFieldMappingEntry, self).__init__(**kwargs) + self.name = name + self.target_name = target_name + + +class PathHierarchyTokenizerV2(Tokenizer): + """Tokenizer for path-like hierarchies. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param delimiter: The delimiter character to use. Default is "/". + :type delimiter: str + :param replacement: A value that, if set, replaces the delimiter character. Default is "/". + :type replacement: str + :param max_token_length: The maximum token length. Default and maximum is 300. + :type max_token_length: int + :param reverse_token_order: A value indicating whether to generate tokens in reverse order. + Default is false. + :type reverse_token_order: bool + :param number_of_tokens_to_skip: The number of initial tokens to skip. Default is 0. + :type number_of_tokens_to_skip: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'delimiter': {'key': 'delimiter', 'type': 'str'}, + 'replacement': {'key': 'replacement', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + 'reverse_token_order': {'key': 'reverse', 'type': 'bool'}, + 'number_of_tokens_to_skip': {'key': 'skip', 'type': 'int'}, + } + + def __init__( + self, + *, + name: str, + delimiter: Optional[str] = "/", + replacement: Optional[str] = "/", + max_token_length: Optional[int] = 300, + reverse_token_order: Optional[bool] = False, + number_of_tokens_to_skip: Optional[int] = 0, + **kwargs + ): + super(PathHierarchyTokenizerV2, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.PathHierarchyTokenizerV2' + self.delimiter = delimiter + self.replacement = replacement + self.max_token_length = max_token_length + self.reverse_token_order = reverse_token_order + self.number_of_tokens_to_skip = number_of_tokens_to_skip + + +class PatternAnalyzer(Analyzer): + """Flexibly separates text into terms via a regular expression pattern. This analyzer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the analyzer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param lower_case_terms: A value indicating whether terms should be lower-cased. Default is + true. + :type lower_case_terms: bool + :param pattern: A regular expression pattern to match token separators. Default is an + expression that matches one or more whitespace characters. + :type pattern: str + :param flags: Regular expression flags. Possible values include: 'CANON_EQ', + 'CASE_INSENSITIVE', 'COMMENTS', 'DOTALL', 'LITERAL', 'MULTILINE', 'UNICODE_CASE', 'UNIX_LINES'. + :type flags: str or ~search_service_client.models.RegexFlags + :param stopwords: A list of stopwords. + :type stopwords: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'lower_case_terms': {'key': 'lowercase', 'type': 'bool'}, + 'pattern': {'key': 'pattern', 'type': 'str'}, + 'flags': {'key': 'flags', 'type': 'str'}, + 'stopwords': {'key': 'stopwords', 'type': '[str]'}, + } + + def __init__( + self, + *, + name: str, + lower_case_terms: Optional[bool] = True, + pattern: Optional[str] = "\W+", + flags: Optional[Union[str, "RegexFlags"]] = None, + stopwords: Optional[List[str]] = None, + **kwargs + ): + super(PatternAnalyzer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.PatternAnalyzer' + self.lower_case_terms = lower_case_terms + self.pattern = pattern + self.flags = flags + self.stopwords = stopwords + + +class PatternCaptureTokenFilter(TokenFilter): + """Uses Java regexes to emit multiple tokens - one for each capture group in one or more patterns. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param patterns: Required. A list of patterns to match against each token. + :type patterns: list[str] + :param preserve_original: A value indicating whether to return the original token even if one + of the patterns matches. Default is true. + :type preserve_original: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'patterns': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'patterns': {'key': 'patterns', 'type': '[str]'}, + 'preserve_original': {'key': 'preserveOriginal', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + patterns: List[str], + preserve_original: Optional[bool] = True, + **kwargs + ): + super(PatternCaptureTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.PatternCaptureTokenFilter' + self.patterns = patterns + self.preserve_original = preserve_original + + +class PatternReplaceCharFilter(CharFilter): + """A character filter that replaces characters in the input string. It uses a regular expression to identify character sequences to preserve and a replacement pattern to identify characters to replace. For example, given the input text "aa bb aa bb", pattern "(aa)\s+(bb)", and replacement "$1#$2", the result would be "aa#bb aa#bb". This character filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the char filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param pattern: Required. A regular expression pattern. + :type pattern: str + :param replacement: Required. The replacement text. + :type replacement: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'pattern': {'required': True}, + 'replacement': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'pattern': {'key': 'pattern', 'type': 'str'}, + 'replacement': {'key': 'replacement', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + pattern: str, + replacement: str, + **kwargs + ): + super(PatternReplaceCharFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.PatternReplaceCharFilter' + self.pattern = pattern + self.replacement = replacement + + +class PatternReplaceTokenFilter(TokenFilter): + """A character filter that replaces characters in the input string. It uses a regular expression to identify character sequences to preserve and a replacement pattern to identify characters to replace. For example, given the input text "aa bb aa bb", pattern "(aa)\s+(bb)", and replacement "$1#$2", the result would be "aa#bb aa#bb". This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param pattern: Required. A regular expression pattern. + :type pattern: str + :param replacement: Required. The replacement text. + :type replacement: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'pattern': {'required': True}, + 'replacement': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'pattern': {'key': 'pattern', 'type': 'str'}, + 'replacement': {'key': 'replacement', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + pattern: str, + replacement: str, + **kwargs + ): + super(PatternReplaceTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.PatternReplaceTokenFilter' + self.pattern = pattern + self.replacement = replacement + + +class PatternTokenizer(Tokenizer): + """Tokenizer that uses regex pattern matching to construct distinct tokens. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param pattern: A regular expression pattern to match token separators. Default is an + expression that matches one or more whitespace characters. + :type pattern: str + :param flags: Regular expression flags. Possible values include: 'CANON_EQ', + 'CASE_INSENSITIVE', 'COMMENTS', 'DOTALL', 'LITERAL', 'MULTILINE', 'UNICODE_CASE', 'UNIX_LINES'. + :type flags: str or ~search_service_client.models.RegexFlags + :param group: The zero-based ordinal of the matching group in the regular expression pattern to + extract into tokens. Use -1 if you want to use the entire pattern to split the input into + tokens, irrespective of matching groups. Default is -1. + :type group: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'pattern': {'key': 'pattern', 'type': 'str'}, + 'flags': {'key': 'flags', 'type': 'str'}, + 'group': {'key': 'group', 'type': 'int'}, + } + + def __init__( + self, + *, + name: str, + pattern: Optional[str] = "\W+", + flags: Optional[Union[str, "RegexFlags"]] = None, + group: Optional[int] = -1, + **kwargs + ): + super(PatternTokenizer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.PatternTokenizer' + self.pattern = pattern + self.flags = flags + self.group = group + + +class PhoneticTokenFilter(TokenFilter): + """Create tokens for phonetic matches. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param encoder: The phonetic encoder to use. Default is "metaphone". Possible values include: + 'metaphone', 'doubleMetaphone', 'soundex', 'refinedSoundex', 'caverphone1', 'caverphone2', + 'cologne', 'nysiis', 'koelnerPhonetik', 'haasePhonetik', 'beiderMorse'. + :type encoder: str or ~search_service_client.models.PhoneticEncoder + :param replace_original_tokens: A value indicating whether encoded tokens should replace + original tokens. If false, encoded tokens are added as synonyms. Default is true. + :type replace_original_tokens: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'encoder': {'key': 'encoder', 'type': 'str'}, + 'replace_original_tokens': {'key': 'replace', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + encoder: Optional[Union[str, "PhoneticEncoder"]] = None, + replace_original_tokens: Optional[bool] = True, + **kwargs + ): + super(PhoneticTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.PhoneticTokenFilter' + self.encoder = encoder + self.replace_original_tokens = replace_original_tokens + + +class RequestOptions(msrest.serialization.Model): + """Parameter group. + + :param x_ms_client_request_id: The tracking ID sent with the request to help with debugging. + :type x_ms_client_request_id: str + """ + + _attribute_map = { + 'x_ms_client_request_id': {'key': 'x-ms-client-request-id', 'type': 'str'}, + } + + def __init__( + self, + *, + x_ms_client_request_id: Optional[str] = None, + **kwargs + ): + super(RequestOptions, self).__init__(**kwargs) + self.x_ms_client_request_id = x_ms_client_request_id + + +class ResourceCounter(msrest.serialization.Model): + """Represents a resource's usage and quota. + + All required parameters must be populated in order to send to Azure. + + :param usage: Required. The resource usage amount. + :type usage: long + :param quota: The resource amount quota. + :type quota: long + """ + + _validation = { + 'usage': {'required': True}, + } + + _attribute_map = { + 'usage': {'key': 'usage', 'type': 'long'}, + 'quota': {'key': 'quota', 'type': 'long'}, + } + + def __init__( + self, + *, + usage: int, + quota: Optional[int] = None, + **kwargs + ): + super(ResourceCounter, self).__init__(**kwargs) + self.usage = usage + self.quota = quota + + +class ScoringProfile(msrest.serialization.Model): + """Defines parameters for a search index that influence scoring in search queries. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the scoring profile. + :type name: str + :param text_weights: Parameters that boost scoring based on text matches in certain index + fields. + :type text_weights: ~search_service_client.models.TextWeights + :param functions: The collection of functions that influence the scoring of documents. + :type functions: list[~search_service_client.models.ScoringFunction] + :param function_aggregation: A value indicating how the results of individual scoring functions + should be combined. Defaults to "Sum". Ignored if there are no scoring functions. Possible + values include: 'sum', 'average', 'minimum', 'maximum', 'firstMatching'. + :type function_aggregation: str or ~search_service_client.models.ScoringFunctionAggregation + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'text_weights': {'key': 'text', 'type': 'TextWeights'}, + 'functions': {'key': 'functions', 'type': '[ScoringFunction]'}, + 'function_aggregation': {'key': 'functionAggregation', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + text_weights: Optional["TextWeights"] = None, + functions: Optional[List["ScoringFunction"]] = None, + function_aggregation: Optional[Union[str, "ScoringFunctionAggregation"]] = None, + **kwargs + ): + super(ScoringProfile, self).__init__(**kwargs) + self.name = name + self.text_weights = text_weights + self.functions = functions + self.function_aggregation = function_aggregation + + +class SearchError(msrest.serialization.Model): + """Describes an error condition for the Azure Cognitive Search API. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar code: One of a server-defined set of error codes. + :vartype code: str + :ivar message: Required. A human-readable representation of the error. + :vartype message: str + :ivar details: An array of details about specific errors that led to this reported error. + :vartype details: list[~search_service_client.models.SearchError] + """ + + _validation = { + 'code': {'readonly': True}, + 'message': {'required': True, 'readonly': True}, + 'details': {'readonly': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[SearchError]'}, + } + + def __init__( + self, + **kwargs + ): + super(SearchError, self).__init__(**kwargs) + self.code = None + self.message = None + self.details = None + + +class SentimentSkill(Skill): + """Text analytics positive-negative sentiment analysis, scored as a floating point value in a range of zero to 1. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param default_language_code: A value indicating which language code to use. Default is en. + Possible values include: 'da', 'nl', 'en', 'fi', 'fr', 'de', 'el', 'it', 'no', 'pl', 'pt-PT', + 'ru', 'es', 'sv', 'tr'. + :type default_language_code: str or ~search_service_client.models.SentimentSkillLanguage + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'default_language_code': {'key': 'defaultLanguageCode', 'type': 'str'}, + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + default_language_code: Optional[Union[str, "SentimentSkillLanguage"]] = None, + **kwargs + ): + super(SentimentSkill, self).__init__(name=name, description=description, context=context, inputs=inputs, outputs=outputs, **kwargs) + self.odata_type = '#Microsoft.Skills.Text.SentimentSkill' + self.default_language_code = default_language_code + + +class ServiceCounters(msrest.serialization.Model): + """Represents service-level resource counters and quotas. + + All required parameters must be populated in order to send to Azure. + + :param document_counter: Required. Total number of documents across all indexes in the service. + :type document_counter: ~search_service_client.models.ResourceCounter + :param index_counter: Required. Total number of indexes. + :type index_counter: ~search_service_client.models.ResourceCounter + :param indexer_counter: Required. Total number of indexers. + :type indexer_counter: ~search_service_client.models.ResourceCounter + :param data_source_counter: Required. Total number of data sources. + :type data_source_counter: ~search_service_client.models.ResourceCounter + :param storage_size_counter: Required. Total size of used storage in bytes. + :type storage_size_counter: ~search_service_client.models.ResourceCounter + :param synonym_map_counter: Required. Total number of synonym maps. + :type synonym_map_counter: ~search_service_client.models.ResourceCounter + :param skillset_counter: Required. Total number of skillsets. + :type skillset_counter: ~search_service_client.models.ResourceCounter + """ + + _validation = { + 'document_counter': {'required': True}, + 'index_counter': {'required': True}, + 'indexer_counter': {'required': True}, + 'data_source_counter': {'required': True}, + 'storage_size_counter': {'required': True}, + 'synonym_map_counter': {'required': True}, + 'skillset_counter': {'required': True}, + } + + _attribute_map = { + 'document_counter': {'key': 'documentCount', 'type': 'ResourceCounter'}, + 'index_counter': {'key': 'indexesCount', 'type': 'ResourceCounter'}, + 'indexer_counter': {'key': 'indexersCount', 'type': 'ResourceCounter'}, + 'data_source_counter': {'key': 'dataSourcesCount', 'type': 'ResourceCounter'}, + 'storage_size_counter': {'key': 'storageSize', 'type': 'ResourceCounter'}, + 'synonym_map_counter': {'key': 'synonymMaps', 'type': 'ResourceCounter'}, + 'skillset_counter': {'key': 'skillsetCount', 'type': 'ResourceCounter'}, + } + + def __init__( + self, + *, + document_counter: "ResourceCounter", + index_counter: "ResourceCounter", + indexer_counter: "ResourceCounter", + data_source_counter: "ResourceCounter", + storage_size_counter: "ResourceCounter", + synonym_map_counter: "ResourceCounter", + skillset_counter: "ResourceCounter", + **kwargs + ): + super(ServiceCounters, self).__init__(**kwargs) + self.document_counter = document_counter + self.index_counter = index_counter + self.indexer_counter = indexer_counter + self.data_source_counter = data_source_counter + self.storage_size_counter = storage_size_counter + self.synonym_map_counter = synonym_map_counter + self.skillset_counter = skillset_counter + + +class ServiceLimits(msrest.serialization.Model): + """Represents various service level limits. + + :param max_fields_per_index: The maximum allowed fields per index. + :type max_fields_per_index: int + :param max_field_nesting_depth_per_index: The maximum depth which you can nest sub-fields in an + index, including the top-level complex field. For example, a/b/c has a nesting depth of 3. + :type max_field_nesting_depth_per_index: int + :param max_complex_collection_fields_per_index: The maximum number of fields of type + Collection(Edm.ComplexType) allowed in an index. + :type max_complex_collection_fields_per_index: int + :param max_complex_objects_in_collections_per_document: The maximum number of objects in + complex collections allowed per document. + :type max_complex_objects_in_collections_per_document: int + """ + + _attribute_map = { + 'max_fields_per_index': {'key': 'maxFieldsPerIndex', 'type': 'int'}, + 'max_field_nesting_depth_per_index': {'key': 'maxFieldNestingDepthPerIndex', 'type': 'int'}, + 'max_complex_collection_fields_per_index': {'key': 'maxComplexCollectionFieldsPerIndex', 'type': 'int'}, + 'max_complex_objects_in_collections_per_document': {'key': 'maxComplexObjectsInCollectionsPerDocument', 'type': 'int'}, + } + + def __init__( + self, + *, + max_fields_per_index: Optional[int] = None, + max_field_nesting_depth_per_index: Optional[int] = None, + max_complex_collection_fields_per_index: Optional[int] = None, + max_complex_objects_in_collections_per_document: Optional[int] = None, + **kwargs + ): + super(ServiceLimits, self).__init__(**kwargs) + self.max_fields_per_index = max_fields_per_index + self.max_field_nesting_depth_per_index = max_field_nesting_depth_per_index + self.max_complex_collection_fields_per_index = max_complex_collection_fields_per_index + self.max_complex_objects_in_collections_per_document = max_complex_objects_in_collections_per_document + + +class ServiceStatistics(msrest.serialization.Model): + """Response from a get service statistics request. If successful, it includes service level counters and limits. + + All required parameters must be populated in order to send to Azure. + + :param counters: Required. Service level resource counters. + :type counters: ~search_service_client.models.ServiceCounters + :param limits: Required. Service level general limits. + :type limits: ~search_service_client.models.ServiceLimits + """ + + _validation = { + 'counters': {'required': True}, + 'limits': {'required': True}, + } + + _attribute_map = { + 'counters': {'key': 'counters', 'type': 'ServiceCounters'}, + 'limits': {'key': 'limits', 'type': 'ServiceLimits'}, + } + + def __init__( + self, + *, + counters: "ServiceCounters", + limits: "ServiceLimits", + **kwargs + ): + super(ServiceStatistics, self).__init__(**kwargs) + self.counters = counters + self.limits = limits + + +class ShaperSkill(Skill): + """A skill for reshaping the outputs. It creates a complex type to support composite fields (also known as multipart fields). + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + **kwargs + ): + super(ShaperSkill, self).__init__(name=name, description=description, context=context, inputs=inputs, outputs=outputs, **kwargs) + self.odata_type = '#Microsoft.Skills.Util.ShaperSkill' + + +class ShingleTokenFilter(TokenFilter): + """Creates combinations of tokens as a single token. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param max_shingle_size: The maximum shingle size. Default and minimum value is 2. + :type max_shingle_size: int + :param min_shingle_size: The minimum shingle size. Default and minimum value is 2. Must be less + than the value of maxShingleSize. + :type min_shingle_size: int + :param output_unigrams: A value indicating whether the output stream will contain the input + tokens (unigrams) as well as shingles. Default is true. + :type output_unigrams: bool + :param output_unigrams_if_no_shingles: A value indicating whether to output unigrams for those + times when no shingles are available. This property takes precedence when outputUnigrams is set + to false. Default is false. + :type output_unigrams_if_no_shingles: bool + :param token_separator: The string to use when joining adjacent tokens to form a shingle. + Default is a single space (" "). + :type token_separator: str + :param filter_token: The string to insert for each position at which there is no token. Default + is an underscore ("_"). + :type filter_token: str + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_shingle_size': {'minimum': 2}, + 'min_shingle_size': {'minimum': 2}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_shingle_size': {'key': 'maxShingleSize', 'type': 'int'}, + 'min_shingle_size': {'key': 'minShingleSize', 'type': 'int'}, + 'output_unigrams': {'key': 'outputUnigrams', 'type': 'bool'}, + 'output_unigrams_if_no_shingles': {'key': 'outputUnigramsIfNoShingles', 'type': 'bool'}, + 'token_separator': {'key': 'tokenSeparator', 'type': 'str'}, + 'filter_token': {'key': 'filterToken', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + max_shingle_size: Optional[int] = 2, + min_shingle_size: Optional[int] = 2, + output_unigrams: Optional[bool] = True, + output_unigrams_if_no_shingles: Optional[bool] = False, + token_separator: Optional[str] = " ", + filter_token: Optional[str] = "_", + **kwargs + ): + super(ShingleTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.ShingleTokenFilter' + self.max_shingle_size = max_shingle_size + self.min_shingle_size = min_shingle_size + self.output_unigrams = output_unigrams + self.output_unigrams_if_no_shingles = output_unigrams_if_no_shingles + self.token_separator = token_separator + self.filter_token = filter_token + + +class Skillset(msrest.serialization.Model): + """A list of skills. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the skillset. + :type name: str + :param description: Required. The description of the skillset. + :type description: str + :param skills: Required. A list of skills in the skillset. + :type skills: list[~search_service_client.models.Skill] + :param cognitive_services_account: Details about cognitive services to be used when running + skills. + :type cognitive_services_account: ~search_service_client.models.CognitiveServicesAccount + :param e_tag: The ETag of the skillset. + :type e_tag: str + """ + + _validation = { + 'name': {'required': True}, + 'description': {'required': True}, + 'skills': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'skills': {'key': 'skills', 'type': '[Skill]'}, + 'cognitive_services_account': {'key': 'cognitiveServices', 'type': 'CognitiveServicesAccount'}, + 'e_tag': {'key': '@odata\\.etag', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + description: str, + skills: List["Skill"], + cognitive_services_account: Optional["CognitiveServicesAccount"] = None, + e_tag: Optional[str] = None, + **kwargs + ): + super(Skillset, self).__init__(**kwargs) + self.name = name + self.description = description + self.skills = skills + self.cognitive_services_account = cognitive_services_account + self.e_tag = e_tag + + +class SnowballTokenFilter(TokenFilter): + """A filter that stems words using a Snowball-generated stemmer. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param language: Required. The language to use. Possible values include: 'armenian', 'basque', + 'catalan', 'danish', 'dutch', 'english', 'finnish', 'french', 'german', 'german2', 'hungarian', + 'italian', 'kp', 'lovins', 'norwegian', 'porter', 'portuguese', 'romanian', 'russian', + 'spanish', 'swedish', 'turkish'. + :type language: str or ~search_service_client.models.SnowballTokenFilterLanguage + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'language': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'language': {'key': 'language', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + language: Union[str, "SnowballTokenFilterLanguage"], + **kwargs + ): + super(SnowballTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.SnowballTokenFilter' + self.language = language + + +class SoftDeleteColumnDeletionDetectionPolicy(DataDeletionDetectionPolicy): + """Defines a data deletion detection policy that implements a soft-deletion strategy. It determines whether an item should be deleted based on the value of a designated 'soft delete' column. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param soft_delete_column_name: The name of the column to use for soft-deletion detection. + :type soft_delete_column_name: str + :param soft_delete_marker_value: The marker value that identifies an item as deleted. + :type soft_delete_marker_value: str + """ + + _validation = { + 'odata_type': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'soft_delete_column_name': {'key': 'softDeleteColumnName', 'type': 'str'}, + 'soft_delete_marker_value': {'key': 'softDeleteMarkerValue', 'type': 'str'}, + } + + def __init__( + self, + *, + soft_delete_column_name: Optional[str] = None, + soft_delete_marker_value: Optional[str] = None, + **kwargs + ): + super(SoftDeleteColumnDeletionDetectionPolicy, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy' + self.soft_delete_column_name = soft_delete_column_name + self.soft_delete_marker_value = soft_delete_marker_value + + +class SplitSkill(Skill): + """A skill to split a string into chunks of text. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param default_language_code: A value indicating which language code to use. Default is en. + Possible values include: 'da', 'de', 'en', 'es', 'fi', 'fr', 'it', 'ko', 'pt'. + :type default_language_code: str or ~search_service_client.models.SplitSkillLanguage + :param text_split_mode: A value indicating which split mode to perform. Possible values + include: 'pages', 'sentences'. + :type text_split_mode: str or ~search_service_client.models.TextSplitMode + :param maximum_page_length: The desired maximum page length. Default is 10000. + :type maximum_page_length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'default_language_code': {'key': 'defaultLanguageCode', 'type': 'str'}, + 'text_split_mode': {'key': 'textSplitMode', 'type': 'str'}, + 'maximum_page_length': {'key': 'maximumPageLength', 'type': 'int'}, + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + default_language_code: Optional[Union[str, "SplitSkillLanguage"]] = None, + text_split_mode: Optional[Union[str, "TextSplitMode"]] = None, + maximum_page_length: Optional[int] = None, + **kwargs + ): + super(SplitSkill, self).__init__(name=name, description=description, context=context, inputs=inputs, outputs=outputs, **kwargs) + self.odata_type = '#Microsoft.Skills.Text.SplitSkill' + self.default_language_code = default_language_code + self.text_split_mode = text_split_mode + self.maximum_page_length = maximum_page_length + + +class SqlIntegratedChangeTrackingPolicy(DataChangeDetectionPolicy): + """Defines a data change detection policy that captures changes using the Integrated Change Tracking feature of Azure SQL Database. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + """ + + _validation = { + 'odata_type': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SqlIntegratedChangeTrackingPolicy, self).__init__(**kwargs) + self.odata_type = '#Microsoft.Azure.Search.SqlIntegratedChangeTrackingPolicy' + + +class StandardAnalyzer(Analyzer): + """Standard Apache Lucene analyzer; Composed of the standard tokenizer, lowercase filter and stop filter. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the analyzer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Default is 255. Tokens longer than the + maximum length are split. The maximum token length that can be used is 300 characters. + :type max_token_length: int + :param stopwords: A list of stopwords. + :type stopwords: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + 'stopwords': {'key': 'stopwords', 'type': '[str]'}, + } + + def __init__( + self, + *, + name: str, + max_token_length: Optional[int] = 255, + stopwords: Optional[List[str]] = None, + **kwargs + ): + super(StandardAnalyzer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.StandardAnalyzer' + self.max_token_length = max_token_length + self.stopwords = stopwords + + +class StandardTokenizer(Tokenizer): + """Breaks text following the Unicode Text Segmentation rules. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Default is 255. Tokens longer than the + maximum length are split. + :type max_token_length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + } + + def __init__( + self, + *, + name: str, + max_token_length: Optional[int] = 255, + **kwargs + ): + super(StandardTokenizer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.StandardTokenizer' + self.max_token_length = max_token_length + + +class StandardTokenizerV2(Tokenizer): + """Breaks text following the Unicode Text Segmentation rules. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Default is 255. Tokens longer than the + maximum length are split. The maximum token length that can be used is 300 characters. + :type max_token_length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + } + + def __init__( + self, + *, + name: str, + max_token_length: Optional[int] = 255, + **kwargs + ): + super(StandardTokenizerV2, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.StandardTokenizerV2' + self.max_token_length = max_token_length + + +class StemmerOverrideTokenFilter(TokenFilter): + """Provides the ability to override other stemming filters with custom dictionary-based stemming. Any dictionary-stemmed terms will be marked as keywords so that they will not be stemmed with stemmers down the chain. Must be placed before any stemming filters. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param rules: Required. A list of stemming rules in the following format: "word => stem", for + example: "ran => run". + :type rules: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'rules': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'rules': {'key': 'rules', 'type': '[str]'}, + } + + def __init__( + self, + *, + name: str, + rules: List[str], + **kwargs + ): + super(StemmerOverrideTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.StemmerOverrideTokenFilter' + self.rules = rules + + +class StemmerTokenFilter(TokenFilter): + """Language specific stemming filter. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param language: Required. The language to use. Possible values include: 'arabic', 'armenian', + 'basque', 'brazilian', 'bulgarian', 'catalan', 'czech', 'danish', 'dutch', 'dutchKp', + 'english', 'lightEnglish', 'minimalEnglish', 'possessiveEnglish', 'porter2', 'lovins', + 'finnish', 'lightFinnish', 'french', 'lightFrench', 'minimalFrench', 'galician', + 'minimalGalician', 'german', 'german2', 'lightGerman', 'minimalGerman', 'greek', 'hindi', + 'hungarian', 'lightHungarian', 'indonesian', 'irish', 'italian', 'lightItalian', 'sorani', + 'latvian', 'norwegian', 'lightNorwegian', 'minimalNorwegian', 'lightNynorsk', 'minimalNynorsk', + 'portuguese', 'lightPortuguese', 'minimalPortuguese', 'portugueseRslp', 'romanian', 'russian', + 'lightRussian', 'spanish', 'lightSpanish', 'swedish', 'lightSwedish', 'turkish'. + :type language: str or ~search_service_client.models.StemmerTokenFilterLanguage + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'language': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'language': {'key': 'language', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + language: Union[str, "StemmerTokenFilterLanguage"], + **kwargs + ): + super(StemmerTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.StemmerTokenFilter' + self.language = language + + +class StopAnalyzer(Analyzer): + """Divides text at non-letters; Applies the lowercase and stopword token filters. This analyzer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the analyzer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param stopwords: A list of stopwords. + :type stopwords: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'stopwords': {'key': 'stopwords', 'type': '[str]'}, + } + + def __init__( + self, + *, + name: str, + stopwords: Optional[List[str]] = None, + **kwargs + ): + super(StopAnalyzer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.StopAnalyzer' + self.stopwords = stopwords + + +class StopwordsTokenFilter(TokenFilter): + """Removes stop words from a token stream. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param stopwords: The list of stopwords. This property and the stopwords list property cannot + both be set. + :type stopwords: list[str] + :param stopwords_list: A predefined list of stopwords to use. This property and the stopwords + property cannot both be set. Default is English. Possible values include: 'arabic', 'armenian', + 'basque', 'brazilian', 'bulgarian', 'catalan', 'czech', 'danish', 'dutch', 'english', + 'finnish', 'french', 'galician', 'german', 'greek', 'hindi', 'hungarian', 'indonesian', + 'irish', 'italian', 'latvian', 'norwegian', 'persian', 'portuguese', 'romanian', 'russian', + 'sorani', 'spanish', 'swedish', 'thai', 'turkish'. + :type stopwords_list: str or ~search_service_client.models.StopwordsList + :param ignore_case: A value indicating whether to ignore case. If true, all words are converted + to lower case first. Default is false. + :type ignore_case: bool + :param remove_trailing_stop_words: A value indicating whether to ignore the last search term if + it's a stop word. Default is true. + :type remove_trailing_stop_words: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'stopwords': {'key': 'stopwords', 'type': '[str]'}, + 'stopwords_list': {'key': 'stopwordsList', 'type': 'str'}, + 'ignore_case': {'key': 'ignoreCase', 'type': 'bool'}, + 'remove_trailing_stop_words': {'key': 'removeTrailing', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + stopwords: Optional[List[str]] = None, + stopwords_list: Optional[Union[str, "StopwordsList"]] = None, + ignore_case: Optional[bool] = False, + remove_trailing_stop_words: Optional[bool] = True, + **kwargs + ): + super(StopwordsTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.StopwordsTokenFilter' + self.stopwords = stopwords + self.stopwords_list = stopwords_list + self.ignore_case = ignore_case + self.remove_trailing_stop_words = remove_trailing_stop_words + + +class Suggester(msrest.serialization.Model): + """Defines how the Suggest API should apply to a group of fields in the index. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the suggester. + :type name: str + :ivar search_mode: Required. A value indicating the capabilities of the suggester. Default + value: "analyzingInfixMatching". + :vartype search_mode: str + :param source_fields: Required. The list of field names to which the suggester applies. Each + field must be searchable. + :type source_fields: list[str] + """ + + _validation = { + 'name': {'required': True}, + 'search_mode': {'required': True, 'constant': True}, + 'source_fields': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'search_mode': {'key': 'searchMode', 'type': 'str'}, + 'source_fields': {'key': 'sourceFields', 'type': '[str]'}, + } + + search_mode = "analyzingInfixMatching" + + def __init__( + self, + *, + name: str, + source_fields: List[str], + **kwargs + ): + super(Suggester, self).__init__(**kwargs) + self.name = name + self.source_fields = source_fields + + +class SynonymMap(msrest.serialization.Model): + """Represents a synonym map definition. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the synonym map. + :type name: str + :ivar format: Required. The format of the synonym map. Only the 'solr' format is currently + supported. Default value: "solr". + :vartype format: str + :param synonyms: Required. A series of synonym rules in the specified synonym map format. The + rules must be separated by newlines. + :type synonyms: str + :param encryption_key: A description of an encryption key that you create in Azure Key Vault. + This key is used to provide an additional level of encryption-at-rest for your data when you + want full assurance that no one, not even Microsoft, can decrypt your data in Azure Cognitive + Search. Once you have encrypted your data, it will always remain encrypted. Azure Cognitive + Search will ignore attempts to set this property to null. You can change this property as + needed if you want to rotate your encryption key; Your data will be unaffected. Encryption with + customer-managed keys is not available for free search services, and is only available for paid + services created on or after January 1, 2019. + :type encryption_key: ~search_service_client.models.EncryptionKey + :param e_tag: The ETag of the synonym map. + :type e_tag: str + """ + + _validation = { + 'name': {'required': True}, + 'format': {'required': True, 'constant': True}, + 'synonyms': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'format': {'key': 'format', 'type': 'str'}, + 'synonyms': {'key': 'synonyms', 'type': 'str'}, + 'encryption_key': {'key': 'encryptionKey', 'type': 'EncryptionKey'}, + 'e_tag': {'key': '@odata\\.etag', 'type': 'str'}, + } + + format = "solr" + + def __init__( + self, + *, + name: str, + synonyms: str, + encryption_key: Optional["EncryptionKey"] = None, + e_tag: Optional[str] = None, + **kwargs + ): + super(SynonymMap, self).__init__(**kwargs) + self.name = name + self.synonyms = synonyms + self.encryption_key = encryption_key + self.e_tag = e_tag + + +class SynonymTokenFilter(TokenFilter): + """Matches single or multi-word synonyms in a token stream. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param synonyms: Required. A list of synonyms in following one of two formats: 1. incredible, + unbelievable, fabulous => amazing - all terms on the left side of => symbol will be replaced + with all terms on its right side; 2. incredible, unbelievable, fabulous, amazing - comma + separated list of equivalent words. Set the expand option to change how this list is + interpreted. + :type synonyms: list[str] + :param ignore_case: A value indicating whether to case-fold input for matching. Default is + false. + :type ignore_case: bool + :param expand: A value indicating whether all words in the list of synonyms (if => notation is + not used) will map to one another. If true, all words in the list of synonyms (if => notation + is not used) will map to one another. The following list: incredible, unbelievable, fabulous, + amazing is equivalent to: incredible, unbelievable, fabulous, amazing => incredible, + unbelievable, fabulous, amazing. If false, the following list: incredible, unbelievable, + fabulous, amazing will be equivalent to: incredible, unbelievable, fabulous, amazing => + incredible. Default is true. + :type expand: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'synonyms': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'synonyms': {'key': 'synonyms', 'type': '[str]'}, + 'ignore_case': {'key': 'ignoreCase', 'type': 'bool'}, + 'expand': {'key': 'expand', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + synonyms: List[str], + ignore_case: Optional[bool] = False, + expand: Optional[bool] = True, + **kwargs + ): + super(SynonymTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.SynonymTokenFilter' + self.synonyms = synonyms + self.ignore_case = ignore_case + self.expand = expand + + +class TagScoringFunction(ScoringFunction): + """Defines a function that boosts scores of documents with string values matching a given list of tags. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. Constant filled by server. + :type type: str + :param field_name: Required. The name of the field used as input to the scoring function. + :type field_name: str + :param boost: Required. A multiplier for the raw score. Must be a positive number not equal to + 1.0. + :type boost: float + :param interpolation: A value indicating how boosting will be interpolated across document + scores; defaults to "Linear". Possible values include: 'linear', 'constant', 'quadratic', + 'logarithmic'. + :type interpolation: str or ~search_service_client.models.ScoringFunctionInterpolation + :param parameters: Required. Parameter values for the tag scoring function. + :type parameters: ~search_service_client.models.TagScoringParameters + """ + + _validation = { + 'type': {'required': True}, + 'field_name': {'required': True}, + 'boost': {'required': True}, + 'parameters': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'field_name': {'key': 'fieldName', 'type': 'str'}, + 'boost': {'key': 'boost', 'type': 'float'}, + 'interpolation': {'key': 'interpolation', 'type': 'str'}, + 'parameters': {'key': 'tag', 'type': 'TagScoringParameters'}, + } + + def __init__( + self, + *, + field_name: str, + boost: float, + parameters: "TagScoringParameters", + interpolation: Optional[Union[str, "ScoringFunctionInterpolation"]] = None, + **kwargs + ): + super(TagScoringFunction, self).__init__(field_name=field_name, boost=boost, interpolation=interpolation, **kwargs) + self.type = 'tag' + self.parameters = parameters + + +class TagScoringParameters(msrest.serialization.Model): + """Provides parameter values to a tag scoring function. + + All required parameters must be populated in order to send to Azure. + + :param tags_parameter: Required. The name of the parameter passed in search queries to specify + the list of tags to compare against the target field. + :type tags_parameter: str + """ + + _validation = { + 'tags_parameter': {'required': True}, + } + + _attribute_map = { + 'tags_parameter': {'key': 'tagsParameter', 'type': 'str'}, + } + + def __init__( + self, + *, + tags_parameter: str, + **kwargs + ): + super(TagScoringParameters, self).__init__(**kwargs) + self.tags_parameter = tags_parameter + + +class TextTranslationSkill(Skill): + """A skill to translate text from one language to another. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param default_to_language_code: Required. The language code to translate documents into for + documents that don't specify the to language explicitly. Possible values include: 'af', 'ar', + 'bn', 'bs', 'bg', 'yue', 'ca', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'et', 'fj', + 'fil', 'fi', 'fr', 'de', 'el', 'ht', 'he', 'hi', 'mww', 'hu', 'is', 'id', 'it', 'ja', 'sw', + 'tlh', 'ko', 'lv', 'lt', 'mg', 'ms', 'mt', 'nb', 'fa', 'pl', 'pt', 'otq', 'ro', 'ru', 'sm', + 'sr-Cyrl', 'sr-Latn', 'sk', 'sl', 'es', 'sv', 'ty', 'ta', 'te', 'th', 'to', 'tr', 'uk', 'ur', + 'vi', 'cy', 'yua'. + :type default_to_language_code: str or + ~search_service_client.models.TextTranslationSkillLanguage + :param default_from_language_code: The language code to translate documents from for documents + that don't specify the from language explicitly. Possible values include: 'af', 'ar', 'bn', + 'bs', 'bg', 'yue', 'ca', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'et', 'fj', 'fil', + 'fi', 'fr', 'de', 'el', 'ht', 'he', 'hi', 'mww', 'hu', 'is', 'id', 'it', 'ja', 'sw', 'tlh', + 'ko', 'lv', 'lt', 'mg', 'ms', 'mt', 'nb', 'fa', 'pl', 'pt', 'otq', 'ro', 'ru', 'sm', 'sr-Cyrl', + 'sr-Latn', 'sk', 'sl', 'es', 'sv', 'ty', 'ta', 'te', 'th', 'to', 'tr', 'uk', 'ur', 'vi', 'cy', + 'yua'. + :type default_from_language_code: str or + ~search_service_client.models.TextTranslationSkillLanguage + :param suggested_from: The language code to translate documents from when neither the + fromLanguageCode input nor the defaultFromLanguageCode parameter are provided, and the + automatic language detection is unsuccessful. Default is en. Possible values include: 'af', + 'ar', 'bn', 'bs', 'bg', 'yue', 'ca', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'et', + 'fj', 'fil', 'fi', 'fr', 'de', 'el', 'ht', 'he', 'hi', 'mww', 'hu', 'is', 'id', 'it', 'ja', + 'sw', 'tlh', 'ko', 'lv', 'lt', 'mg', 'ms', 'mt', 'nb', 'fa', 'pl', 'pt', 'otq', 'ro', 'ru', + 'sm', 'sr-Cyrl', 'sr-Latn', 'sk', 'sl', 'es', 'sv', 'ty', 'ta', 'te', 'th', 'to', 'tr', 'uk', + 'ur', 'vi', 'cy', 'yua'. + :type suggested_from: str or ~search_service_client.models.TextTranslationSkillLanguage + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + 'default_to_language_code': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'default_to_language_code': {'key': 'defaultToLanguageCode', 'type': 'str'}, + 'default_from_language_code': {'key': 'defaultFromLanguageCode', 'type': 'str'}, + 'suggested_from': {'key': 'suggestedFrom', 'type': 'str'}, + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + default_to_language_code: Union[str, "TextTranslationSkillLanguage"], + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + default_from_language_code: Optional[Union[str, "TextTranslationSkillLanguage"]] = None, + suggested_from: Optional[Union[str, "TextTranslationSkillLanguage"]] = None, + **kwargs + ): + super(TextTranslationSkill, self).__init__(name=name, description=description, context=context, inputs=inputs, outputs=outputs, **kwargs) + self.odata_type = '#Microsoft.Skills.Text.TranslationSkill' + self.default_to_language_code = default_to_language_code + self.default_from_language_code = default_from_language_code + self.suggested_from = suggested_from + + +class TextWeights(msrest.serialization.Model): + """Defines weights on index fields for which matches should boost scoring in search queries. + + All required parameters must be populated in order to send to Azure. + + :param weights: Required. The dictionary of per-field weights to boost document scoring. The + keys are field names and the values are the weights for each field. + :type weights: dict[str, float] + """ + + _validation = { + 'weights': {'required': True}, + } + + _attribute_map = { + 'weights': {'key': 'weights', 'type': '{float}'}, + } + + def __init__( + self, + *, + weights: Dict[str, float], + **kwargs + ): + super(TextWeights, self).__init__(**kwargs) + self.weights = weights + + +class TokenInfo(msrest.serialization.Model): + """Information about a token returned by an analyzer. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar token: Required. The token returned by the analyzer. + :vartype token: str + :ivar start_offset: Required. The index of the first character of the token in the input text. + :vartype start_offset: int + :ivar end_offset: Required. The index of the last character of the token in the input text. + :vartype end_offset: int + :ivar position: Required. The position of the token in the input text relative to other tokens. + The first token in the input text has position 0, the next has position 1, and so on. Depending + on the analyzer used, some tokens might have the same position, for example if they are + synonyms of each other. + :vartype position: int + """ + + _validation = { + 'token': {'required': True, 'readonly': True}, + 'start_offset': {'required': True, 'readonly': True}, + 'end_offset': {'required': True, 'readonly': True}, + 'position': {'required': True, 'readonly': True}, + } + + _attribute_map = { + 'token': {'key': 'token', 'type': 'str'}, + 'start_offset': {'key': 'startOffset', 'type': 'int'}, + 'end_offset': {'key': 'endOffset', 'type': 'int'}, + 'position': {'key': 'position', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(TokenInfo, self).__init__(**kwargs) + self.token = None + self.start_offset = None + self.end_offset = None + self.position = None + + +class TruncateTokenFilter(TokenFilter): + """Truncates the terms to a specific length. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param length: The length at which terms will be truncated. Default and maximum is 300. + :type length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'length': {'key': 'length', 'type': 'int'}, + } + + def __init__( + self, + *, + name: str, + length: Optional[int] = 300, + **kwargs + ): + super(TruncateTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.TruncateTokenFilter' + self.length = length + + +class UaxUrlEmailTokenizer(Tokenizer): + """Tokenizes urls and emails as one token. This tokenizer is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the tokenizer. It must only contain letters, digits, spaces, + dashes or underscores, can only start and end with alphanumeric characters, and is limited to + 128 characters. + :type name: str + :param max_token_length: The maximum token length. Default is 255. Tokens longer than the + maximum length are split. The maximum token length that can be used is 300 characters. + :type max_token_length: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + 'max_token_length': {'maximum': 300}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'max_token_length': {'key': 'maxTokenLength', 'type': 'int'}, + } + + def __init__( + self, + *, + name: str, + max_token_length: Optional[int] = 255, + **kwargs + ): + super(UaxUrlEmailTokenizer, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.UaxUrlEmailTokenizer' + self.max_token_length = max_token_length + + +class UniqueTokenFilter(TokenFilter): + """Filters out tokens with same text as the previous token. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param only_on_same_position: A value indicating whether to remove duplicates only at the same + position. Default is false. + :type only_on_same_position: bool + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'only_on_same_position': {'key': 'onlyOnSamePosition', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + only_on_same_position: Optional[bool] = False, + **kwargs + ): + super(UniqueTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.UniqueTokenFilter' + self.only_on_same_position = only_on_same_position + + +class WebApiSkill(Skill): + """A skill that can call a Web API endpoint, allowing you to extend a skillset by having it call your custom code. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: The name of the skill which uniquely identifies it within the skillset. A skill + with no name defined will be given a default name of its 1-based index in the skills array, + prefixed with the character '#'. + :type name: str + :param description: The description of the skill which describes the inputs, outputs, and usage + of the skill. + :type description: str + :param context: Represents the level at which operations take place, such as the document root + or document content (for example, /document or /document/content). The default is /document. + :type context: str + :param inputs: Required. Inputs of the skills could be a column in the source data set, or the + output of an upstream skill. + :type inputs: list[~search_service_client.models.InputFieldMappingEntry] + :param outputs: Required. The output of a skill is either a field in a search index, or a value + that can be consumed as an input by another skill. + :type outputs: list[~search_service_client.models.OutputFieldMappingEntry] + :param uri: Required. The url for the Web API. + :type uri: str + :param http_headers: The headers required to make the http request. + :type http_headers: dict[str, str] + :param http_method: The method for the http request. + :type http_method: str + :param timeout: The desired timeout for the request. Default is 30 seconds. + :type timeout: ~datetime.timedelta + :param batch_size: The desired batch size which indicates number of documents. + :type batch_size: int + :param degree_of_parallelism: If set, the number of parallel calls that can be made to the Web + API. + :type degree_of_parallelism: int + """ + + _validation = { + 'odata_type': {'required': True}, + 'inputs': {'required': True}, + 'outputs': {'required': True}, + 'uri': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'inputs': {'key': 'inputs', 'type': '[InputFieldMappingEntry]'}, + 'outputs': {'key': 'outputs', 'type': '[OutputFieldMappingEntry]'}, + 'uri': {'key': 'uri', 'type': 'str'}, + 'http_headers': {'key': 'httpHeaders', 'type': '{str}'}, + 'http_method': {'key': 'httpMethod', 'type': 'str'}, + 'timeout': {'key': 'timeout', 'type': 'duration'}, + 'batch_size': {'key': 'batchSize', 'type': 'int'}, + 'degree_of_parallelism': {'key': 'degreeOfParallelism', 'type': 'int'}, + } + + def __init__( + self, + *, + inputs: List["InputFieldMappingEntry"], + outputs: List["OutputFieldMappingEntry"], + uri: str, + name: Optional[str] = None, + description: Optional[str] = None, + context: Optional[str] = None, + http_headers: Optional[Dict[str, str]] = None, + http_method: Optional[str] = None, + timeout: Optional[datetime.timedelta] = None, + batch_size: Optional[int] = None, + degree_of_parallelism: Optional[int] = None, + **kwargs + ): + super(WebApiSkill, self).__init__(name=name, description=description, context=context, inputs=inputs, outputs=outputs, **kwargs) + self.odata_type = '#Microsoft.Skills.Custom.WebApiSkill' + self.uri = uri + self.http_headers = http_headers + self.http_method = http_method + self.timeout = timeout + self.batch_size = batch_size + self.degree_of_parallelism = degree_of_parallelism + + +class WordDelimiterTokenFilter(TokenFilter): + """Splits words into subwords and performs optional transformations on subword groups. This token filter is implemented using Apache Lucene. + + All required parameters must be populated in order to send to Azure. + + :param odata_type: Required. Constant filled by server. + :type odata_type: str + :param name: Required. The name of the token filter. It must only contain letters, digits, + spaces, dashes or underscores, can only start and end with alphanumeric characters, and is + limited to 128 characters. + :type name: str + :param generate_word_parts: A value indicating whether to generate part words. If set, causes + parts of words to be generated; for example "AzureSearch" becomes "Azure" "Search". Default is + true. + :type generate_word_parts: bool + :param generate_number_parts: A value indicating whether to generate number subwords. Default + is true. + :type generate_number_parts: bool + :param catenate_words: A value indicating whether maximum runs of word parts will be catenated. + For example, if this is set to true, "Azure-Search" becomes "AzureSearch". Default is false. + :type catenate_words: bool + :param catenate_numbers: A value indicating whether maximum runs of number parts will be + catenated. For example, if this is set to true, "1-2" becomes "12". Default is false. + :type catenate_numbers: bool + :param catenate_all: A value indicating whether all subword parts will be catenated. For + example, if this is set to true, "Azure-Search-1" becomes "AzureSearch1". Default is false. + :type catenate_all: bool + :param split_on_case_change: A value indicating whether to split words on caseChange. For + example, if this is set to true, "AzureSearch" becomes "Azure" "Search". Default is true. + :type split_on_case_change: bool + :param preserve_original: A value indicating whether original words will be preserved and added + to the subword list. Default is false. + :type preserve_original: bool + :param split_on_numerics: A value indicating whether to split on numbers. For example, if this + is set to true, "Azure1Search" becomes "Azure" "1" "Search". Default is true. + :type split_on_numerics: bool + :param stem_english_possessive: A value indicating whether to remove trailing "'s" for each + subword. Default is true. + :type stem_english_possessive: bool + :param protected_words: A list of tokens to protect from being delimited. + :type protected_words: list[str] + """ + + _validation = { + 'odata_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'odata_type': {'key': '@odata\\.type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'generate_word_parts': {'key': 'generateWordParts', 'type': 'bool'}, + 'generate_number_parts': {'key': 'generateNumberParts', 'type': 'bool'}, + 'catenate_words': {'key': 'catenateWords', 'type': 'bool'}, + 'catenate_numbers': {'key': 'catenateNumbers', 'type': 'bool'}, + 'catenate_all': {'key': 'catenateAll', 'type': 'bool'}, + 'split_on_case_change': {'key': 'splitOnCaseChange', 'type': 'bool'}, + 'preserve_original': {'key': 'preserveOriginal', 'type': 'bool'}, + 'split_on_numerics': {'key': 'splitOnNumerics', 'type': 'bool'}, + 'stem_english_possessive': {'key': 'stemEnglishPossessive', 'type': 'bool'}, + 'protected_words': {'key': 'protectedWords', 'type': '[str]'}, + } + + def __init__( + self, + *, + name: str, + generate_word_parts: Optional[bool] = True, + generate_number_parts: Optional[bool] = True, + catenate_words: Optional[bool] = False, + catenate_numbers: Optional[bool] = False, + catenate_all: Optional[bool] = False, + split_on_case_change: Optional[bool] = True, + preserve_original: Optional[bool] = False, + split_on_numerics: Optional[bool] = True, + stem_english_possessive: Optional[bool] = True, + protected_words: Optional[List[str]] = None, + **kwargs + ): + super(WordDelimiterTokenFilter, self).__init__(name=name, **kwargs) + self.odata_type = '#Microsoft.Azure.Search.WordDelimiterTokenFilter' + self.generate_word_parts = generate_word_parts + self.generate_number_parts = generate_number_parts + self.catenate_words = catenate_words + self.catenate_numbers = catenate_numbers + self.catenate_all = catenate_all + self.split_on_case_change = split_on_case_change + self.preserve_original = preserve_original + self.split_on_numerics = split_on_numerics + self.stem_english_possessive = stem_english_possessive + self.protected_words = protected_words diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/models/_search_service_client_enums.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/models/_search_service_client_enums.py new file mode 100644 index 000000000000..137ae7fcaef2 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/models/_search_service_client_enums.py @@ -0,0 +1,734 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from enum import Enum + +class DataSourceType(str, Enum): + """Defines the type of a datasource. + """ + + azure_sql = "azuresql" + cosmos_db = "cosmosdb" + azure_blob = "azureblob" + azure_table = "azuretable" + my_sql = "mysql" + +class IndexerExecutionStatus(str, Enum): + """Represents the status of an individual indexer execution. + """ + + transient_failure = "transientFailure" + success = "success" + in_progress = "inProgress" + reset = "reset" + +class DataType(str, Enum): + """Defines the data type of a field in a search index. + """ + + edm_string = "Edm.String" + edm_int32 = "Edm.Int32" + edm_int64 = "Edm.Int64" + edm_double = "Edm.Double" + edm_boolean = "Edm.Boolean" + edm_date_time_offset = "Edm.DateTimeOffset" + edm_geography_point = "Edm.GeographyPoint" + edm_complex_type = "Edm.ComplexType" + +class AnalyzerName(str, Enum): + """Defines the names of all text analyzers supported by Azure Cognitive Search. + """ + + ar_microsoft = "ar.microsoft" + ar_lucene = "ar.lucene" + hy_lucene = "hy.lucene" + bn_microsoft = "bn.microsoft" + eu_lucene = "eu.lucene" + bg_microsoft = "bg.microsoft" + bg_lucene = "bg.lucene" + ca_microsoft = "ca.microsoft" + ca_lucene = "ca.lucene" + zh_hans_microsoft = "zh-Hans.microsoft" + zh_hans_lucene = "zh-Hans.lucene" + zh_hant_microsoft = "zh-Hant.microsoft" + zh_hant_lucene = "zh-Hant.lucene" + hr_microsoft = "hr.microsoft" + cs_microsoft = "cs.microsoft" + cs_lucene = "cs.lucene" + da_microsoft = "da.microsoft" + da_lucene = "da.lucene" + nl_microsoft = "nl.microsoft" + nl_lucene = "nl.lucene" + en_microsoft = "en.microsoft" + en_lucene = "en.lucene" + et_microsoft = "et.microsoft" + fi_microsoft = "fi.microsoft" + fi_lucene = "fi.lucene" + fr_microsoft = "fr.microsoft" + fr_lucene = "fr.lucene" + gl_lucene = "gl.lucene" + de_microsoft = "de.microsoft" + de_lucene = "de.lucene" + el_microsoft = "el.microsoft" + el_lucene = "el.lucene" + gu_microsoft = "gu.microsoft" + he_microsoft = "he.microsoft" + hi_microsoft = "hi.microsoft" + hi_lucene = "hi.lucene" + hu_microsoft = "hu.microsoft" + hu_lucene = "hu.lucene" + is_microsoft = "is.microsoft" + id_microsoft = "id.microsoft" + id_lucene = "id.lucene" + ga_lucene = "ga.lucene" + it_microsoft = "it.microsoft" + it_lucene = "it.lucene" + ja_microsoft = "ja.microsoft" + ja_lucene = "ja.lucene" + kn_microsoft = "kn.microsoft" + ko_microsoft = "ko.microsoft" + ko_lucene = "ko.lucene" + lv_microsoft = "lv.microsoft" + lv_lucene = "lv.lucene" + lt_microsoft = "lt.microsoft" + ml_microsoft = "ml.microsoft" + ms_microsoft = "ms.microsoft" + mr_microsoft = "mr.microsoft" + nb_microsoft = "nb.microsoft" + no_lucene = "no.lucene" + fa_lucene = "fa.lucene" + pl_microsoft = "pl.microsoft" + pl_lucene = "pl.lucene" + pt_br_microsoft = "pt-BR.microsoft" + pt_br_lucene = "pt-BR.lucene" + pt_microsoft = "pt-PT.microsoft" + pt_lucene = "pt-PT.lucene" + pa_microsoft = "pa.microsoft" + ro_microsoft = "ro.microsoft" + ro_lucene = "ro.lucene" + ru_microsoft = "ru.microsoft" + ru_lucene = "ru.lucene" + sr_cyrillic_microsoft = "sr-cyrillic.microsoft" + sr_latin_microsoft = "sr-latin.microsoft" + sk_microsoft = "sk.microsoft" + sl_microsoft = "sl.microsoft" + es_microsoft = "es.microsoft" + es_lucene = "es.lucene" + sv_microsoft = "sv.microsoft" + sv_lucene = "sv.lucene" + ta_microsoft = "ta.microsoft" + te_microsoft = "te.microsoft" + th_microsoft = "th.microsoft" + th_lucene = "th.lucene" + tr_microsoft = "tr.microsoft" + tr_lucene = "tr.lucene" + uk_microsoft = "uk.microsoft" + ur_microsoft = "ur.microsoft" + vi_microsoft = "vi.microsoft" + standard_lucene = "standard.lucene" + standardasciifolding_lucene = "standardasciifolding.lucene" + keyword = "keyword" + pattern = "pattern" + simple = "simple" + stop = "stop" + whitespace = "whitespace" + +class ScoringFunctionInterpolation(str, Enum): + """Defines the function used to interpolate score boosting across a range of documents. + """ + + linear = "linear" + constant = "constant" + quadratic = "quadratic" + logarithmic = "logarithmic" + +class ScoringFunctionAggregation(str, Enum): + """Defines the aggregation function used to combine the results of all the scoring functions in a + scoring profile. + """ + + sum = "sum" + average = "average" + minimum = "minimum" + maximum = "maximum" + first_matching = "firstMatching" + +class TokenFilterName(str, Enum): + """Defines the names of all token filters supported by Azure Cognitive Search. + """ + + arabic_normalization = "arabic_normalization" #: A token filter that applies the Arabic normalizer to normalize the orthography. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/ar/ArabicNormalizationFilter.html. + apostrophe = "apostrophe" #: Strips all characters after an apostrophe (including the apostrophe itself). See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/tr/ApostropheFilter.html. + ascii_folding = "asciifolding" #: Converts alphabetic, numeric, and symbolic Unicode characters which are not in the first 127 ASCII characters (the "Basic Latin" Unicode block) into their ASCII equivalents, if such equivalents exist. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/miscellaneous/ASCIIFoldingFilter.html. + cjk_bigram = "cjk_bigram" #: Forms bigrams of CJK terms that are generated from StandardTokenizer. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/cjk/CJKBigramFilter.html. + cjk_width = "cjk_width" #: Normalizes CJK width differences. Folds fullwidth ASCII variants into the equivalent basic Latin, and half-width Katakana variants into the equivalent Kana. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/cjk/CJKWidthFilter.html. + classic = "classic" #: Removes English possessives, and dots from acronyms. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/standard/ClassicFilter.html. + common_gram = "common_grams" #: Construct bigrams for frequently occurring terms while indexing. Single terms are still indexed too, with bigrams overlaid. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/commongrams/CommonGramsFilter.html. + edge_n_gram = "edgeNGram_v2" #: Generates n-grams of the given size(s) starting from the front or the back of an input token. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/ngram/EdgeNGramTokenFilter.html. + elision = "elision" #: Removes elisions. For example, "l'avion" (the plane) will be converted to "avion" (plane). See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/util/ElisionFilter.html. + german_normalization = "german_normalization" #: Normalizes German characters according to the heuristics of the German2 snowball algorithm. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/de/GermanNormalizationFilter.html. + hindi_normalization = "hindi_normalization" #: Normalizes text in Hindi to remove some differences in spelling variations. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/hi/HindiNormalizationFilter.html. + indic_normalization = "indic_normalization" #: Normalizes the Unicode representation of text in Indian languages. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/in/IndicNormalizationFilter.html. + keyword_repeat = "keyword_repeat" #: Emits each incoming token twice, once as keyword and once as non-keyword. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/miscellaneous/KeywordRepeatFilter.html. + k_stem = "kstem" #: A high-performance kstem filter for English. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/en/KStemFilter.html. + length = "length" #: Removes words that are too long or too short. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/miscellaneous/LengthFilter.html. + limit = "limit" #: Limits the number of tokens while indexing. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/miscellaneous/LimitTokenCountFilter.html. + lowercase = "lowercase" #: Normalizes token text to lower case. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/core/LowerCaseFilter.htm. + n_gram = "nGram_v2" #: Generates n-grams of the given size(s). See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/ngram/NGramTokenFilter.html. + persian_normalization = "persian_normalization" #: Applies normalization for Persian. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/fa/PersianNormalizationFilter.html. + phonetic = "phonetic" #: Create tokens for phonetic matches. See https://lucene.apache.org/core/4_10_3/analyzers-phonetic/org/apache/lucene/analysis/phonetic/package-tree.html. + porter_stem = "porter_stem" #: Uses the Porter stemming algorithm to transform the token stream. See http://tartarus.org/~martin/PorterStemmer. + reverse = "reverse" #: Reverses the token string. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/reverse/ReverseStringFilter.html. + scandinavian_normalization = "scandinavian_normalization" #: Normalizes use of the interchangeable Scandinavian characters. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/miscellaneous/ScandinavianNormalizationFilter.html. + scandinavian_folding_normalization = "scandinavian_folding" #: Folds Scandinavian characters åÅäæÄÆ->a and öÖøØ->o. It also discriminates against use of double vowels aa, ae, ao, oe and oo, leaving just the first one. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/miscellaneous/ScandinavianFoldingFilter.html. + shingle = "shingle" #: Creates combinations of tokens as a single token. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/shingle/ShingleFilter.html. + snowball = "snowball" #: A filter that stems words using a Snowball-generated stemmer. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/snowball/SnowballFilter.html. + sorani_normalization = "sorani_normalization" #: Normalizes the Unicode representation of Sorani text. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/ckb/SoraniNormalizationFilter.html. + stemmer = "stemmer" #: Language specific stemming filter. See https://docs.microsoft.com/rest/api/searchservice/Custom-analyzers-in-Azure-Search#TokenFilters. + stopwords = "stopwords" #: Removes stop words from a token stream. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/core/StopFilter.html. + trim = "trim" #: Trims leading and trailing whitespace from tokens. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/miscellaneous/TrimFilter.html. + truncate = "truncate" #: Truncates the terms to a specific length. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/miscellaneous/TruncateTokenFilter.html. + unique = "unique" #: Filters out tokens with same text as the previous token. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/miscellaneous/RemoveDuplicatesTokenFilter.html. + uppercase = "uppercase" #: Normalizes token text to upper case. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/core/UpperCaseFilter.html. + word_delimiter = "word_delimiter" #: Splits words into subwords and performs optional transformations on subword groups. + +class TokenCharacterKind(str, Enum): + """Represents classes of characters on which a token filter can operate. + """ + + letter = "letter" + digit = "digit" + whitespace = "whitespace" + punctuation = "punctuation" + symbol = "symbol" + +class CjkBigramTokenFilterScripts(str, Enum): + """Scripts that can be ignored by CjkBigramTokenFilter. + """ + + han = "han" + hiragana = "hiragana" + katakana = "katakana" + hangul = "hangul" + +class VisualFeature(str, Enum): + """The strings indicating what visual feature types to return. + """ + + adult = "adult" + brands = "brands" + categories = "categories" + description = "description" + faces = "faces" + objects = "objects" + tags = "tags" + +class ImageDetail(str, Enum): + """A string indicating which domain-specific details to return. + """ + + celebrities = "celebrities" + landmarks = "landmarks" + +class EntityCategory(str, Enum): + """A string indicating what entity categories to return. + """ + + location = "location" + organization = "organization" + person = "person" + quantity = "quantity" + datetime = "datetime" + url = "url" + email = "email" + +class TokenizerName(str, Enum): + """Defines the names of all tokenizers supported by Azure Cognitive Search. + """ + + classic = "classic" #: Grammar-based tokenizer that is suitable for processing most European-language documents. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/standard/ClassicTokenizer.html. + edge_n_gram = "edgeNGram" #: Tokenizes the input from an edge into n-grams of the given size(s). See https://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/ngram/EdgeNGramTokenizer.html. + keyword = "keyword_v2" #: Emits the entire input as a single token. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/core/KeywordTokenizer.html. + letter = "letter" #: Divides text at non-letters. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/core/LetterTokenizer.html. + lowercase = "lowercase" #: Divides text at non-letters and converts them to lower case. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/core/LowerCaseTokenizer.html. + microsoft_language_tokenizer = "microsoft_language_tokenizer" #: Divides text using language-specific rules. + microsoft_language_stemming_tokenizer = "microsoft_language_stemming_tokenizer" #: Divides text using language-specific rules and reduces words to their base forms. + n_gram = "nGram" #: Tokenizes the input into n-grams of the given size(s). See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/ngram/NGramTokenizer.html. + path_hierarchy = "path_hierarchy_v2" #: Tokenizer for path-like hierarchies. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/path/PathHierarchyTokenizer.html. + pattern = "pattern" #: Tokenizer that uses regex pattern matching to construct distinct tokens. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/pattern/PatternTokenizer.html. + standard = "standard_v2" #: Standard Lucene analyzer; Composed of the standard tokenizer, lowercase filter and stop filter. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/standard/StandardTokenizer.html. + uax_url_email = "uax_url_email" #: Tokenizes urls and emails as one token. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/standard/UAX29URLEmailTokenizer.html. + whitespace = "whitespace" #: Divides text at whitespace. See http://lucene.apache.org/core/4_10_3/analyzers-common/org/apache/lucene/analysis/core/WhitespaceTokenizer.html. + +class RegexFlags(str, Enum): + """Defines flags that can be combined to control how regular expressions are used in the pattern + analyzer and pattern tokenizer. + """ + + canon_eq = "CANON_EQ" + case_insensitive = "CASE_INSENSITIVE" + comments = "COMMENTS" + dotall = "DOTALL" + literal = "LITERAL" + multiline = "MULTILINE" + unicode_case = "UNICODE_CASE" + unix_lines = "UNIX_LINES" + +class KeyPhraseExtractionSkillLanguage(str, Enum): + """The language codes supported for input text by KeyPhraseExtractionSkill. + """ + + da = "da" #: Danish. + nl = "nl" #: Dutch. + en = "en" #: English. + fi = "fi" #: Finnish. + fr = "fr" #: French. + de = "de" #: German. + it = "it" #: Italian. + ja = "ja" #: Japanese. + ko = "ko" #: Korean. + no = "no" #: Norwegian (Bokmaal). + pl = "pl" #: Polish. + pt = "pt-PT" #: Portuguese (Portugal). + pt_br = "pt-BR" #: Portuguese (Brazil). + ru = "ru" #: Russian. + es = "es" #: Spanish. + sv = "sv" #: Swedish. + +class OcrSkillLanguage(str, Enum): + """The language codes supported for input by OcrSkill. + """ + + zh_hans = "zh-Hans" #: Chinese-Simplified. + zh_hant = "zh-Hant" #: Chinese-Traditional. + cs = "cs" #: Czech. + da = "da" #: Danish. + nl = "nl" #: Dutch. + en = "en" #: English. + fi = "fi" #: Finnish. + fr = "fr" #: French. + de = "de" #: German. + el = "el" #: Greek. + hu = "hu" #: Hungarian. + it = "it" #: Italian. + ja = "ja" #: Japanese. + ko = "ko" #: Korean. + nb = "nb" #: Norwegian (Bokmaal). + pl = "pl" #: Polish. + pt = "pt" #: Portuguese. + ru = "ru" #: Russian. + es = "es" #: Spanish. + sv = "sv" #: Swedish. + tr = "tr" #: Turkish. + ar = "ar" #: Arabic. + ro = "ro" #: Romanian. + sr_cyrl = "sr-Cyrl" #: Serbian (Cyrillic, Serbia). + sr_latn = "sr-Latn" #: Serbian (Latin, Serbia). + sk = "sk" #: Slovak. + +class ImageAnalysisSkillLanguage(str, Enum): + """The language codes supported for input by ImageAnalysisSkill. + """ + + en = "en" #: English. + es = "es" #: Spanish. + ja = "ja" #: Japanese. + pt = "pt" #: Portuguese. + zh = "zh" #: Chinese. + +class EntityRecognitionSkillLanguage(str, Enum): + """The language codes supported for input text by EntityRecognitionSkill. + """ + + ar = "ar" #: Arabic. + cs = "cs" #: Czech. + zh_hans = "zh-Hans" #: Chinese-Simplified. + zh_hant = "zh-Hant" #: Chinese-Traditional. + da = "da" #: Danish. + nl = "nl" #: Dutch. + en = "en" #: English. + fi = "fi" #: Finnish. + fr = "fr" #: French. + de = "de" #: German. + el = "el" #: Greek. + hu = "hu" #: Hungarian. + it = "it" #: Italian. + ja = "ja" #: Japanese. + ko = "ko" #: Korean. + no = "no" #: Norwegian (Bokmaal). + pl = "pl" #: Polish. + pt = "pt-PT" #: Portuguese (Portugal). + pt_br = "pt-BR" #: Portuguese (Brazil). + ru = "ru" #: Russian. + es = "es" #: Spanish. + sv = "sv" #: Swedish. + tr = "tr" #: Turkish. + +class SentimentSkillLanguage(str, Enum): + """The language codes supported for input text by SentimentSkill. + """ + + da = "da" #: Danish. + nl = "nl" #: Dutch. + en = "en" #: English. + fi = "fi" #: Finnish. + fr = "fr" #: French. + de = "de" #: German. + el = "el" #: Greek. + it = "it" #: Italian. + no = "no" #: Norwegian (Bokmaal). + pl = "pl" #: Polish. + pt = "pt-PT" #: Portuguese (Portugal). + ru = "ru" #: Russian. + es = "es" #: Spanish. + sv = "sv" #: Swedish. + tr = "tr" #: Turkish. + +class SplitSkillLanguage(str, Enum): + """The language codes supported for input text by SplitSkill. + """ + + da = "da" #: Danish. + de = "de" #: German. + en = "en" #: English. + es = "es" #: Spanish. + fi = "fi" #: Finnish. + fr = "fr" #: French. + it = "it" #: Italian. + ko = "ko" #: Korean. + pt = "pt" #: Portuguese. + +class TextTranslationSkillLanguage(str, Enum): + """The language codes supported for input text by TextTranslationSkill. + """ + + af = "af" #: Afrikaans. + ar = "ar" #: Arabic. + bn = "bn" #: Bangla. + bs = "bs" #: Bosnian (Latin). + bg = "bg" #: Bulgarian. + yue = "yue" #: Cantonese (Traditional). + ca = "ca" #: Catalan. + zh_hans = "zh-Hans" #: Chinese Simplified. + zh_hant = "zh-Hant" #: Chinese Traditional. + hr = "hr" #: Croatian. + cs = "cs" #: Czech. + da = "da" #: Danish. + nl = "nl" #: Dutch. + en = "en" #: English. + et = "et" #: Estonian. + fj = "fj" #: Fijian. + fil = "fil" #: Filipino. + fi = "fi" #: Finnish. + fr = "fr" #: French. + de = "de" #: German. + el = "el" #: Greek. + ht = "ht" #: Haitian Creole. + he = "he" #: Hebrew. + hi = "hi" #: Hindi. + mww = "mww" #: Hmong Daw. + hu = "hu" #: Hungarian. + is_enum = "is" #: Icelandic. + id = "id" #: Indonesian. + it = "it" #: Italian. + ja = "ja" #: Japanese. + sw = "sw" #: Kiswahili. + tlh = "tlh" #: Klingon. + ko = "ko" #: Korean. + lv = "lv" #: Latvian. + lt = "lt" #: Lithuanian. + mg = "mg" #: Malagasy. + ms = "ms" #: Malay. + mt = "mt" #: Maltese. + nb = "nb" #: Norwegian. + fa = "fa" #: Persian. + pl = "pl" #: Polish. + pt = "pt" #: Portuguese. + otq = "otq" #: Queretaro Otomi. + ro = "ro" #: Romanian. + ru = "ru" #: Russian. + sm = "sm" #: Samoan. + sr_cyrl = "sr-Cyrl" #: Serbian (Cyrillic). + sr_latn = "sr-Latn" #: Serbian (Latin). + sk = "sk" #: Slovak. + sl = "sl" #: Slovenian. + es = "es" #: Spanish. + sv = "sv" #: Swedish. + ty = "ty" #: Tahitian. + ta = "ta" #: Tamil. + te = "te" #: Telugu. + th = "th" #: Thai. + to = "to" #: Tongan. + tr = "tr" #: Turkish. + uk = "uk" #: Ukrainian. + ur = "ur" #: Urdu. + vi = "vi" #: Vietnamese. + cy = "cy" #: Welsh. + yua = "yua" #: Yucatec Maya. + +class IndexerStatus(str, Enum): + """Represents the overall indexer status. + """ + + unknown = "unknown" + error = "error" + running = "running" + +class MicrosoftTokenizerLanguage(str, Enum): + """Lists the languages supported by the Microsoft language tokenizer. + """ + + bangla = "bangla" + bulgarian = "bulgarian" + catalan = "catalan" + chinese_simplified = "chineseSimplified" + chinese_traditional = "chineseTraditional" + croatian = "croatian" + czech = "czech" + danish = "danish" + dutch = "dutch" + english = "english" + french = "french" + german = "german" + greek = "greek" + gujarati = "gujarati" + hindi = "hindi" + icelandic = "icelandic" + indonesian = "indonesian" + italian = "italian" + japanese = "japanese" + kannada = "kannada" + korean = "korean" + malay = "malay" + malayalam = "malayalam" + marathi = "marathi" + norwegian_bokmaal = "norwegianBokmaal" + polish = "polish" + portuguese = "portuguese" + portuguese_brazilian = "portugueseBrazilian" + punjabi = "punjabi" + romanian = "romanian" + russian = "russian" + serbian_cyrillic = "serbianCyrillic" + serbian_latin = "serbianLatin" + slovenian = "slovenian" + spanish = "spanish" + swedish = "swedish" + tamil = "tamil" + telugu = "telugu" + thai = "thai" + ukrainian = "ukrainian" + urdu = "urdu" + vietnamese = "vietnamese" + +class MicrosoftStemmingTokenizerLanguage(str, Enum): + """Lists the languages supported by the Microsoft language stemming tokenizer. + """ + + arabic = "arabic" + bangla = "bangla" + bulgarian = "bulgarian" + catalan = "catalan" + croatian = "croatian" + czech = "czech" + danish = "danish" + dutch = "dutch" + english = "english" + estonian = "estonian" + finnish = "finnish" + french = "french" + german = "german" + greek = "greek" + gujarati = "gujarati" + hebrew = "hebrew" + hindi = "hindi" + hungarian = "hungarian" + icelandic = "icelandic" + indonesian = "indonesian" + italian = "italian" + kannada = "kannada" + latvian = "latvian" + lithuanian = "lithuanian" + malay = "malay" + malayalam = "malayalam" + marathi = "marathi" + norwegian_bokmaal = "norwegianBokmaal" + polish = "polish" + portuguese = "portuguese" + portuguese_brazilian = "portugueseBrazilian" + punjabi = "punjabi" + romanian = "romanian" + russian = "russian" + serbian_cyrillic = "serbianCyrillic" + serbian_latin = "serbianLatin" + slovak = "slovak" + slovenian = "slovenian" + spanish = "spanish" + swedish = "swedish" + tamil = "tamil" + telugu = "telugu" + turkish = "turkish" + ukrainian = "ukrainian" + urdu = "urdu" + +class EdgeNGramTokenFilterSide(str, Enum): + """Specifies which side of the input an n-gram should be generated from. + """ + + front = "front" + back = "back" + +class PhoneticEncoder(str, Enum): + """Identifies the type of phonetic encoder to use with a PhoneticTokenFilter. + """ + + metaphone = "metaphone" + double_metaphone = "doubleMetaphone" + soundex = "soundex" + refined_soundex = "refinedSoundex" + caverphone1 = "caverphone1" + caverphone2 = "caverphone2" + cologne = "cologne" + nysiis = "nysiis" + koelner_phonetik = "koelnerPhonetik" + haase_phonetik = "haasePhonetik" + beider_morse = "beiderMorse" + +class SnowballTokenFilterLanguage(str, Enum): + """The language to use for a Snowball token filter. + """ + + armenian = "armenian" + basque = "basque" + catalan = "catalan" + danish = "danish" + dutch = "dutch" + english = "english" + finnish = "finnish" + french = "french" + german = "german" + german2 = "german2" + hungarian = "hungarian" + italian = "italian" + kp = "kp" + lovins = "lovins" + norwegian = "norwegian" + porter = "porter" + portuguese = "portuguese" + romanian = "romanian" + russian = "russian" + spanish = "spanish" + swedish = "swedish" + turkish = "turkish" + +class StemmerTokenFilterLanguage(str, Enum): + """The language to use for a stemmer token filter. + """ + + arabic = "arabic" + armenian = "armenian" + basque = "basque" + brazilian = "brazilian" + bulgarian = "bulgarian" + catalan = "catalan" + czech = "czech" + danish = "danish" + dutch = "dutch" + dutch_kp = "dutchKp" + english = "english" + light_english = "lightEnglish" + minimal_english = "minimalEnglish" + possessive_english = "possessiveEnglish" + porter2 = "porter2" + lovins = "lovins" + finnish = "finnish" + light_finnish = "lightFinnish" + french = "french" + light_french = "lightFrench" + minimal_french = "minimalFrench" + galician = "galician" + minimal_galician = "minimalGalician" + german = "german" + german2 = "german2" + light_german = "lightGerman" + minimal_german = "minimalGerman" + greek = "greek" + hindi = "hindi" + hungarian = "hungarian" + light_hungarian = "lightHungarian" + indonesian = "indonesian" + irish = "irish" + italian = "italian" + light_italian = "lightItalian" + sorani = "sorani" + latvian = "latvian" + norwegian = "norwegian" + light_norwegian = "lightNorwegian" + minimal_norwegian = "minimalNorwegian" + light_nynorsk = "lightNynorsk" + minimal_nynorsk = "minimalNynorsk" + portuguese = "portuguese" + light_portuguese = "lightPortuguese" + minimal_portuguese = "minimalPortuguese" + portuguese_rslp = "portugueseRslp" + romanian = "romanian" + russian = "russian" + light_russian = "lightRussian" + spanish = "spanish" + light_spanish = "lightSpanish" + swedish = "swedish" + light_swedish = "lightSwedish" + turkish = "turkish" + +class StopwordsList(str, Enum): + """Identifies a predefined list of language-specific stopwords. + """ + + arabic = "arabic" + armenian = "armenian" + basque = "basque" + brazilian = "brazilian" + bulgarian = "bulgarian" + catalan = "catalan" + czech = "czech" + danish = "danish" + dutch = "dutch" + english = "english" + finnish = "finnish" + french = "french" + galician = "galician" + german = "german" + greek = "greek" + hindi = "hindi" + hungarian = "hungarian" + indonesian = "indonesian" + irish = "irish" + italian = "italian" + latvian = "latvian" + norwegian = "norwegian" + persian = "persian" + portuguese = "portuguese" + romanian = "romanian" + russian = "russian" + sorani = "sorani" + spanish = "spanish" + swedish = "swedish" + thai = "thai" + turkish = "turkish" + +class TextExtractionAlgorithm(str, Enum): + """A value indicating which algorithm to use. Default is printed. + """ + + printed = "printed" + handwritten = "handwritten" + +class TextSplitMode(str, Enum): + """A value indicating which split mode to perform. + """ + + pages = "pages" + sentences = "sentences" diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/__init__.py new file mode 100644 index 000000000000..d87e3cc4debb --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/__init__.py @@ -0,0 +1,21 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._data_sources_operations import DataSourcesOperations +from ._indexers_operations import IndexersOperations +from ._skillsets_operations import SkillsetsOperations +from ._synonym_maps_operations import SynonymMapsOperations +from ._indexes_operations import IndexesOperations +from ._search_service_client_operations import SearchServiceClientOperationsMixin + +__all__ = [ + 'DataSourcesOperations', + 'IndexersOperations', + 'SkillsetsOperations', + 'SynonymMapsOperations', + 'IndexesOperations', + 'SearchServiceClientOperationsMixin', +] diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_data_sources_operations.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_data_sources_operations.py new file mode 100644 index 000000000000..7ba6982701cc --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_data_sources_operations.py @@ -0,0 +1,390 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse + +from .. import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class DataSourcesOperations(object): + """DataSourcesOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~search_service_client.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def create_or_update( + self, + data_source_name, # type: str + data_source, # type: "models.DataSource" + request_options=None, # type: Optional["models.RequestOptions"] + access_condition=None, # type: Optional["models.AccessCondition"] + **kwargs # type: Any + ): + # type: (...) -> "models.DataSource" + """Creates a new datasource or updates a datasource if it already exists. + + :param data_source_name: The name of the datasource to create or update. + :type data_source_name: str + :param data_source: The definition of the datasource to create or update. + :type data_source: ~search_service_client.models.DataSource + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DataSource or the result of cls(response) + :rtype: ~search_service_client.models.DataSource or ~search_service_client.models.DataSource + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DataSource"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + prefer = "return=representation" + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'dataSourceName': self._serialize.url("data_source_name", data_source_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + header_parameters['Prefer'] = self._serialize.header("prefer", prefer, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(data_source, 'DataSource') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('DataSource', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('DataSource', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/datasources(\'{dataSourceName}\')'} + + def delete( + self, + data_source_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + access_condition=None, # type: Optional["models.AccessCondition"] + **kwargs # type: Any + ): + # type: (...) -> None + """Deletes a datasource. + + :param data_source_name: The name of the datasource to delete. + :type data_source_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'dataSourceName': self._serialize.url("data_source_name", data_source_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204, 404]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/datasources(\'{dataSourceName}\')'} + + def get( + self, + data_source_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.DataSource" + """Retrieves a datasource definition. + + :param data_source_name: The name of the datasource to retrieve. + :type data_source_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DataSource or the result of cls(response) + :rtype: ~search_service_client.models.DataSource + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DataSource"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'dataSourceName': self._serialize.url("data_source_name", data_source_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('DataSource', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/datasources(\'{dataSourceName}\')'} + + def list( + self, + select=None, # type: Optional[str] + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.ListDataSourcesResult" + """Lists all datasources available for a search service. + + :param select: Selects which top-level properties of the data sources to retrieve. Specified as + a comma-separated list of JSON property names, or '*' for all properties. The default is all + properties. + :type select: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ListDataSourcesResult or the result of cls(response) + :rtype: ~search_service_client.models.ListDataSourcesResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ListDataSourcesResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.list.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if select is not None: + query_parameters['$select'] = self._serialize.query("select", select, 'str') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('ListDataSourcesResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/datasources'} + + def create( + self, + data_source, # type: "models.DataSource" + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.DataSource" + """Creates a new datasource. + + :param data_source: The definition of the datasource to create. + :type data_source: ~search_service_client.models.DataSource + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DataSource or the result of cls(response) + :rtype: ~search_service_client.models.DataSource + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DataSource"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(data_source, 'DataSource') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('DataSource', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/datasources'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_indexers_operations.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_indexers_operations.py new file mode 100644 index 000000000000..38ed69e0fb8d --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_indexers_operations.py @@ -0,0 +1,568 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse + +from .. import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class IndexersOperations(object): + """IndexersOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~search_service_client.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def reset( + self, + indexer_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> None + """Resets the change tracking state associated with an indexer. + + :param indexer_name: The name of the indexer to reset. + :type indexer_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.reset.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexerName': self._serialize.url("indexer_name", indexer_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + + # Construct and send request + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + reset.metadata = {'url': '/indexers(\'{indexerName}\')/search.reset'} + + def run( + self, + indexer_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> None + """Runs an indexer on-demand. + + :param indexer_name: The name of the indexer to run. + :type indexer_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.run.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexerName': self._serialize.url("indexer_name", indexer_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + + # Construct and send request + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + run.metadata = {'url': '/indexers(\'{indexerName}\')/search.run'} + + def create_or_update( + self, + indexer_name, # type: str + indexer, # type: "models.Indexer" + request_options=None, # type: Optional["models.RequestOptions"] + access_condition=None, # type: Optional["models.AccessCondition"] + **kwargs # type: Any + ): + # type: (...) -> "models.Indexer" + """Creates a new indexer or updates an indexer if it already exists. + + :param indexer_name: The name of the indexer to create or update. + :type indexer_name: str + :param indexer: The definition of the indexer to create or update. + :type indexer: ~search_service_client.models.Indexer + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Indexer or the result of cls(response) + :rtype: ~search_service_client.models.Indexer or ~search_service_client.models.Indexer + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Indexer"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + prefer = "return=representation" + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexerName': self._serialize.url("indexer_name", indexer_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + header_parameters['Prefer'] = self._serialize.header("prefer", prefer, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(indexer, 'Indexer') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('Indexer', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Indexer', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/indexers(\'{indexerName}\')'} + + def delete( + self, + indexer_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + access_condition=None, # type: Optional["models.AccessCondition"] + **kwargs # type: Any + ): + # type: (...) -> None + """Deletes an indexer. + + :param indexer_name: The name of the indexer to delete. + :type indexer_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexerName': self._serialize.url("indexer_name", indexer_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204, 404]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/indexers(\'{indexerName}\')'} + + def get( + self, + indexer_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.Indexer" + """Retrieves an indexer definition. + + :param indexer_name: The name of the indexer to retrieve. + :type indexer_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Indexer or the result of cls(response) + :rtype: ~search_service_client.models.Indexer + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Indexer"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexerName': self._serialize.url("indexer_name", indexer_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('Indexer', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/indexers(\'{indexerName}\')'} + + def list( + self, + select=None, # type: Optional[str] + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.ListIndexersResult" + """Lists all indexers available for a search service. + + :param select: Selects which top-level properties of the indexers to retrieve. Specified as a + comma-separated list of JSON property names, or '*' for all properties. The default is all + properties. + :type select: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ListIndexersResult or the result of cls(response) + :rtype: ~search_service_client.models.ListIndexersResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ListIndexersResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.list.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if select is not None: + query_parameters['$select'] = self._serialize.query("select", select, 'str') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('ListIndexersResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/indexers'} + + def create( + self, + indexer, # type: "models.Indexer" + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.Indexer" + """Creates a new indexer. + + :param indexer: The definition of the indexer to create. + :type indexer: ~search_service_client.models.Indexer + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Indexer or the result of cls(response) + :rtype: ~search_service_client.models.Indexer + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Indexer"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(indexer, 'Indexer') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('Indexer', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/indexers'} + + def get_status( + self, + indexer_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.IndexerExecutionInfo" + """Returns the current status and execution history of an indexer. + + :param indexer_name: The name of the indexer for which to retrieve status. + :type indexer_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IndexerExecutionInfo or the result of cls(response) + :rtype: ~search_service_client.models.IndexerExecutionInfo + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IndexerExecutionInfo"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get_status.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexerName': self._serialize.url("indexer_name", indexer_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('IndexerExecutionInfo', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_status.metadata = {'url': '/indexers(\'{indexerName}\')/search.status'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_indexes_operations.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_indexes_operations.py new file mode 100644 index 000000000000..74d5ef6e01cb --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_indexes_operations.py @@ -0,0 +1,531 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse + +from .. import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class IndexesOperations(object): + """IndexesOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~search_service_client.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def create( + self, + index, # type: "models.Index" + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.Index" + """Creates a new search index. + + :param index: The definition of the index to create. + :type index: ~search_service_client.models.Index + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Index or the result of cls(response) + :rtype: ~search_service_client.models.Index + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Index"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(index, 'Index') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('Index', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/indexes'} + + def list( + self, + select=None, # type: Optional[str] + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.ListIndexesResult" + """Lists all indexes available for a search service. + + :param select: Selects which top-level properties of the index definitions to retrieve. + Specified as a comma-separated list of JSON property names, or '*' for all properties. The + default is all properties. + :type select: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ListIndexesResult or the result of cls(response) + :rtype: ~search_service_client.models.ListIndexesResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ListIndexesResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.list.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if select is not None: + query_parameters['$select'] = self._serialize.query("select", select, 'str') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('ListIndexesResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/indexes'} + + def create_or_update( + self, + index_name, # type: str + index, # type: "models.Index" + allow_index_downtime=None, # type: Optional[bool] + request_options=None, # type: Optional["models.RequestOptions"] + access_condition=None, # type: Optional["models.AccessCondition"] + **kwargs # type: Any + ): + # type: (...) -> "models.Index" + """Creates a new search index or updates an index if it already exists. + + :param index_name: The definition of the index to create or update. + :type index_name: str + :param index: The definition of the index to create or update. + :type index: ~search_service_client.models.Index + :param allow_index_downtime: Allows new analyzers, tokenizers, token filters, or char filters + to be added to an index by taking the index offline for at least a few seconds. This + temporarily causes indexing and query requests to fail. Performance and write availability of + the index can be impaired for several minutes after the index is updated, or longer for very + large indexes. + :type allow_index_downtime: bool + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Index or the result of cls(response) + :rtype: ~search_service_client.models.Index or ~search_service_client.models.Index + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Index"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + prefer = "return=representation" + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("index_name", index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if allow_index_downtime is not None: + query_parameters['allowIndexDowntime'] = self._serialize.query("allow_index_downtime", allow_index_downtime, 'bool') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + header_parameters['Prefer'] = self._serialize.header("prefer", prefer, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(index, 'Index') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('Index', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Index', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/indexes(\'{indexName}\')'} + + def delete( + self, + index_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + access_condition=None, # type: Optional["models.AccessCondition"] + **kwargs # type: Any + ): + # type: (...) -> None + """Deletes a search index and all the documents it contains. + + :param index_name: The name of the index to delete. + :type index_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("index_name", index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204, 404]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/indexes(\'{indexName}\')'} + + def get( + self, + index_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.Index" + """Retrieves an index definition. + + :param index_name: The name of the index to retrieve. + :type index_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Index or the result of cls(response) + :rtype: ~search_service_client.models.Index + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Index"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("index_name", index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('Index', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/indexes(\'{indexName}\')'} + + def get_statistics( + self, + index_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.GetIndexStatisticsResult" + """Returns statistics for the given index, including a document count and storage usage. + + :param index_name: The name of the index for which to retrieve statistics. + :type index_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: GetIndexStatisticsResult or the result of cls(response) + :rtype: ~search_service_client.models.GetIndexStatisticsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.GetIndexStatisticsResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get_statistics.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("index_name", index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('GetIndexStatisticsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_statistics.metadata = {'url': '/indexes(\'{indexName}\')/search.stats'} + + def analyze( + self, + index_name, # type: str + request_todo, # type: "models.AnalyzeRequest" + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.AnalyzeResult" + """Shows how an analyzer breaks text into tokens. + + :param index_name: The name of the index for which to test an analyzer. + :type index_name: str + :param request_todo: The text and analyzer or analysis components to test. + :type request_todo: ~search_service_client.models.AnalyzeRequest + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AnalyzeResult or the result of cls(response) + :rtype: ~search_service_client.models.AnalyzeResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AnalyzeResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.analyze.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'indexName': self._serialize.url("index_name", index_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(request_todo, 'AnalyzeRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('AnalyzeResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + analyze.metadata = {'url': '/indexes(\'{indexName}\')/search.analyze'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_search_service_client_operations.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_search_service_client_operations.py new file mode 100644 index 000000000000..ce9beea5f278 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_search_service_client_operations.py @@ -0,0 +1,76 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse + +from .. import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class SearchServiceClientOperationsMixin(object): + + def get_service_statistics( + self, + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.ServiceStatistics" + """Gets service level statistics for a search service. + + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ServiceStatistics or the result of cls(response) + :rtype: ~search_service_client.models.ServiceStatistics + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ServiceStatistics"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get_service_statistics.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('ServiceStatistics', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_service_statistics.metadata = {'url': '/servicestats'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_skillsets_operations.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_skillsets_operations.py new file mode 100644 index 000000000000..37ab90d2bb9d --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_skillsets_operations.py @@ -0,0 +1,391 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse + +from .. import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class SkillsetsOperations(object): + """SkillsetsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~search_service_client.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def create_or_update( + self, + skillset_name, # type: str + skillset, # type: "models.Skillset" + request_options=None, # type: Optional["models.RequestOptions"] + access_condition=None, # type: Optional["models.AccessCondition"] + **kwargs # type: Any + ): + # type: (...) -> "models.Skillset" + """Creates a new skillset in a search service or updates the skillset if it already exists. + + :param skillset_name: The name of the skillset to create or update. + :type skillset_name: str + :param skillset: The skillset containing one or more skills to create or update in a search + service. + :type skillset: ~search_service_client.models.Skillset + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Skillset or the result of cls(response) + :rtype: ~search_service_client.models.Skillset or ~search_service_client.models.Skillset + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Skillset"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + prefer = "return=representation" + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'skillsetName': self._serialize.url("skillset_name", skillset_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + header_parameters['Prefer'] = self._serialize.header("prefer", prefer, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(skillset, 'Skillset') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('Skillset', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Skillset', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/skillsets(\'{skillsetName}\')'} + + def delete( + self, + skillset_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + access_condition=None, # type: Optional["models.AccessCondition"] + **kwargs # type: Any + ): + # type: (...) -> None + """Deletes a skillset in a search service. + + :param skillset_name: The name of the skillset to delete. + :type skillset_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'skillsetName': self._serialize.url("skillset_name", skillset_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204, 404]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/skillsets(\'{skillsetName}\')'} + + def get( + self, + skillset_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.Skillset" + """Retrieves a skillset in a search service. + + :param skillset_name: The name of the skillset to retrieve. + :type skillset_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Skillset or the result of cls(response) + :rtype: ~search_service_client.models.Skillset + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Skillset"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'skillsetName': self._serialize.url("skillset_name", skillset_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('Skillset', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/skillsets(\'{skillsetName}\')'} + + def list( + self, + select=None, # type: Optional[str] + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.ListSkillsetsResult" + """List all skillsets in a search service. + + :param select: Selects which top-level properties of the skillsets to retrieve. Specified as a + comma-separated list of JSON property names, or '*' for all properties. The default is all + properties. + :type select: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ListSkillsetsResult or the result of cls(response) + :rtype: ~search_service_client.models.ListSkillsetsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ListSkillsetsResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.list.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if select is not None: + query_parameters['$select'] = self._serialize.query("select", select, 'str') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('ListSkillsetsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/skillsets'} + + def create( + self, + skillset, # type: "models.Skillset" + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.Skillset" + """Creates a new skillset in a search service. + + :param skillset: The skillset containing one or more skills to create in a search service. + :type skillset: ~search_service_client.models.Skillset + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Skillset or the result of cls(response) + :rtype: ~search_service_client.models.Skillset + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Skillset"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(skillset, 'Skillset') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('Skillset', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/skillsets'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_synonym_maps_operations.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_synonym_maps_operations.py new file mode 100644 index 000000000000..ff4e69ec5420 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/operations/_synonym_maps_operations.py @@ -0,0 +1,390 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.0.6257, generator: {generator}) +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse + +from .. import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class SynonymMapsOperations(object): + """SynonymMapsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~search_service_client.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def create_or_update( + self, + synonym_map_name, # type: str + synonym_map, # type: "models.SynonymMap" + request_options=None, # type: Optional["models.RequestOptions"] + access_condition=None, # type: Optional["models.AccessCondition"] + **kwargs # type: Any + ): + # type: (...) -> "models.SynonymMap" + """Creates a new synonym map or updates a synonym map if it already exists. + + :param synonym_map_name: The name of the synonym map to create or update. + :type synonym_map_name: str + :param synonym_map: The definition of the synonym map to create or update. + :type synonym_map: ~search_service_client.models.SynonymMap + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SynonymMap or the result of cls(response) + :rtype: ~search_service_client.models.SynonymMap or ~search_service_client.models.SynonymMap + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SynonymMap"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + prefer = "return=representation" + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create_or_update.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'synonymMapName': self._serialize.url("synonym_map_name", synonym_map_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + header_parameters['Prefer'] = self._serialize.header("prefer", prefer, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(synonym_map, 'SynonymMap') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('SynonymMap', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('SynonymMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/synonymmaps(\'{synonymMapName}\')'} + + def delete( + self, + synonym_map_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + access_condition=None, # type: Optional["models.AccessCondition"] + **kwargs # type: Any + ): + # type: (...) -> None + """Deletes a synonym map. + + :param synonym_map_name: The name of the synonym map to delete. + :type synonym_map_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :param access_condition: Parameter group. + :type access_condition: ~search_service_client.models.AccessCondition + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + _if_match = None + _if_none_match = None + if access_condition is not None: + _if_match = access_condition.if_match + _if_none_match = access_condition.if_none_match + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.delete.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'synonymMapName': self._serialize.url("synonym_map_name", synonym_map_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + if _if_match is not None: + header_parameters['If-Match'] = self._serialize.header("if_match", _if_match, 'str') + if _if_none_match is not None: + header_parameters['If-None-Match'] = self._serialize.header("if_none_match", _if_none_match, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204, 404]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/synonymmaps(\'{synonymMapName}\')'} + + def get( + self, + synonym_map_name, # type: str + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.SynonymMap" + """Retrieves a synonym map definition. + + :param synonym_map_name: The name of the synonym map to retrieve. + :type synonym_map_name: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SynonymMap or the result of cls(response) + :rtype: ~search_service_client.models.SynonymMap + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SynonymMap"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.get.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + 'synonymMapName': self._serialize.url("synonym_map_name", synonym_map_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('SynonymMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/synonymmaps(\'{synonymMapName}\')'} + + def list( + self, + select=None, # type: Optional[str] + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.ListSynonymMapsResult" + """Lists all synonym maps available for a search service. + + :param select: Selects which top-level properties of the synonym maps to retrieve. Specified as + a comma-separated list of JSON property names, or '*' for all properties. The default is all + properties. + :type select: str + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ListSynonymMapsResult or the result of cls(response) + :rtype: ~search_service_client.models.ListSynonymMapsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ListSynonymMapsResult"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.list.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + if select is not None: + query_parameters['$select'] = self._serialize.query("select", select, 'str') + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + + # Construct and send request + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('ListSynonymMapsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/synonymmaps'} + + def create( + self, + synonym_map, # type: "models.SynonymMap" + request_options=None, # type: Optional["models.RequestOptions"] + **kwargs # type: Any + ): + # type: (...) -> "models.SynonymMap" + """Creates a new synonym map. + + :param synonym_map: The definition of the synonym map to create. + :type synonym_map: ~search_service_client.models.SynonymMap + :param request_options: Parameter group. + :type request_options: ~search_service_client.models.RequestOptions + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SynonymMap or the result of cls(response) + :rtype: ~search_service_client.models.SynonymMap + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SynonymMap"] + error_map = kwargs.pop('error_map', {404: ResourceNotFoundError, 409: ResourceExistsError}) + + _x_ms_client_request_id = None + if request_options is not None: + _x_ms_client_request_id = request_options.x_ms_client_request_id + api_version = "2019-05-06-Preview" + + # Construct URL + url = self.create.metadata['url'] + path_format_arguments = { + 'endpoint': self._serialize.url("self._config.endpoint", self._config.endpoint, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + if _x_ms_client_request_id is not None: + header_parameters['x-ms-client-request-id'] = self._serialize.header("x_ms_client_request_id", _x_ms_client_request_id, 'str') + header_parameters['Accept'] = 'application/json' + header_parameters['Content-Type'] = kwargs.pop('content_type', 'application/json') + + # Construct and send request + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(synonym_map, 'SynonymMap') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.SearchError, response) + raise HttpResponseError(response=response, model=error) + + deserialized = self._deserialize('SynonymMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/synonymmaps'} diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/py.typed b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/py.typed new file mode 100644 index 000000000000..e5aff4f83af8 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_generated/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561. \ No newline at end of file diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/_search_service_client.py b/sdk/search/azure-search-documents/azure/search/documents/_service/_search_service_client.py new file mode 100644 index 000000000000..214d5925357e --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/_search_service_client.py @@ -0,0 +1,82 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING + +from azure.core.pipeline.policies import HeadersPolicy +from azure.core.tracing.decorator import distributed_trace +from ._generated import SearchServiceClient as _SearchServiceClient +from .._version import VERSION + +if TYPE_CHECKING: + # pylint:disable=unused-import,ungrouped-imports + from typing import Any, Union + from .. import SearchApiKeyCredential + + +class SearchServiceClient(object): + """A client to interact with an existing Azure search service. + + :param endpoint: The URL endpoint of an Azure search service + :type endpoint: str + :param credential: A credential to authorize search client requests + :type credential: SearchApiKeyCredential + + .. admonition:: Example: + + .. literalinclude:: ../samples/sample_authentication.py + :start-after: [START create_search_service_client_with_key] + :end-before: [END create_search_service_client_with_key] + :language: python + :dedent: 4 + :caption: Creating the SearchServiceClient with an API key. + """ + + def __init__(self, endpoint, credential, **kwargs): + # type: (str, SearchApiKeyCredential, **Any) -> None + + headers_policy = HeadersPolicy( + { + "api-key": credential.api_key, + "Accept": "application/json;odata.metadata=minimal", + } + ) + + self._endpoint = endpoint # type: str + self._client = _SearchServiceClient( + endpoint=endpoint, + headers_policy=headers_policy, + sdk_moniker="search/{}".format(VERSION), + **kwargs + ) # type: _SearchServiceClient + + def __repr__(self): + # type: () -> str + return "".format(repr(self._endpoint))[:1024] + + @distributed_trace + def get_service_statistics(self, **kwargs): + # type: (**Any) -> dict + """Get service level statistics for a search service. + + """ + result = self._client.get_service_statistics(**kwargs) + return result.as_dict() + + def close(self): + # type: () -> None + """Close the :class:`~azure.search.SearchServiceClient` session. + + """ + return self._client.close() + + def __enter__(self): + # type: () -> SearchServiceClient + self._client.__enter__() # pylint:disable=no-member + return self + + def __exit__(self, *args): + # type: (*Any) -> None + self._client.__exit__(*args) # pylint:disable=no-member diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/aio/__init__.py b/sdk/search/azure-search-documents/azure/search/documents/_service/aio/__init__.py new file mode 100644 index 000000000000..0d3142f14092 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/aio/__init__.py @@ -0,0 +1,7 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +from ._search_service_client_async import SearchServiceClient + +__all__ = "SearchServiceClient" diff --git a/sdk/search/azure-search-documents/azure/search/documents/_service/aio/_search_service_client_async.py b/sdk/search/azure-search-documents/azure/search/documents/_service/aio/_search_service_client_async.py new file mode 100644 index 000000000000..7998dfce3257 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_service/aio/_search_service_client_async.py @@ -0,0 +1,74 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING + +from azure.core.pipeline.policies import HeadersPolicy +from azure.core.tracing.decorator_async import distributed_trace_async +from .._generated.aio import SearchServiceClient as _SearchServiceClient +from ..._version import VERSION + +if TYPE_CHECKING: + # pylint:disable=unused-import,ungrouped-imports + from typing import Any, Union + from ... import SearchApiKeyCredential + + +class SearchServiceClient(object): + """A client to interact with an existing Azure search service. + + :param endpoint: The URL endpoint of an Azure search service + :type endpoint: str + :param credential: A credential to authorize search client requests + :type credential: SearchApiKeyCredential + + """ + + def __init__(self, endpoint, credential, **kwargs): + # type: (str, SearchApiKeyCredential, **Any) -> None + + headers_policy = HeadersPolicy( + { + "api-key": credential.api_key, + "Accept": "application/json;odata.metadata=minimal", + } + ) + + self._endpoint = endpoint # type: str + self._client = _SearchServiceClient( + endpoint=endpoint, + headers_policy=headers_policy, + sdk_moniker="search/{}".format(VERSION), + **kwargs + ) # type: _SearchServiceClient + + def __repr__(self): + # type: () -> str + return "".format(repr(self._endpoint))[:1024] + + @distributed_trace_async + async def get_service_statistics(self, **kwargs): + # type: (**Any) -> dict + """Get service level statistics for a search service. + + """ + result = await self._client.get_service_statistics(**kwargs) + return result.as_dict() + + async def close(self): + # type: () -> None + """Close the :class:`~azure.search.SearchServiceClient` session. + + """ + return await self._client.close() + + async def __aenter__(self): + # type: () -> SearchServiceClient + await self._client.__aenter__() # pylint:disable=no-member + return self + + async def __aexit__(self, *args): + # type: (*Any) -> None + await self._client.__aexit__(*args) # pylint:disable=no-member diff --git a/sdk/search/azure-search-documents/azure/search/documents/_version.py b/sdk/search/azure-search-documents/azure/search/documents/_version.py new file mode 100644 index 000000000000..e1816f2340d7 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/_version.py @@ -0,0 +1,6 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +VERSION = "1.0.0b2" diff --git a/sdk/search/azure-search-documents/azure/search/documents/aio.py b/sdk/search/azure-search-documents/azure/search/documents/aio.py new file mode 100644 index 000000000000..395e4eceb156 --- /dev/null +++ b/sdk/search/azure-search-documents/azure/search/documents/aio.py @@ -0,0 +1,30 @@ +# -------------------------------------------------------------------------- +# +# Copyright (c) Microsoft Corporation. All rights reserved. +# +# The MIT License (MIT) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the ""Software""), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +# -------------------------------------------------------------------------- + +from ._index.aio import AsyncSearchItemPaged, SearchIndexClient +from ._service.aio import SearchServiceClient + +__all__ = ("AsyncSearchItemPaged", "SearchIndexClient", "SearchServiceClient") diff --git a/sdk/search/azure-search-documents/dev_requirements.txt b/sdk/search/azure-search-documents/dev_requirements.txt new file mode 100644 index 000000000000..b96aba8a15dd --- /dev/null +++ b/sdk/search/azure-search-documents/dev_requirements.txt @@ -0,0 +1,6 @@ +-e ../../../tools/azure-devtools +-e ../../../tools/azure-sdk-tools +../../core/azure-core +../azure-search-nspkg +aiohttp>=3.0; python_version >= '3.5' +pytest diff --git a/sdk/search/azure-search-documents/mypy.ini b/sdk/search/azure-search-documents/mypy.ini new file mode 100644 index 000000000000..9a87276018b6 --- /dev/null +++ b/sdk/search/azure-search-documents/mypy.ini @@ -0,0 +1,15 @@ +[mypy] +python_version = 3.6 +warn_return_any = True +warn_unused_configs = True +ignore_missing_imports = True + +# Per-module options: + +[mypy-azure.search.index._generated.*] +ignore_errors = True +follow_imports = skip + +[mypy-azure.core.*] +ignore_errors = True + diff --git a/sdk/search/azure-search-documents/samples/README.md b/sdk/search/azure-search-documents/samples/README.md new file mode 100644 index 000000000000..c59ebdc0afb4 --- /dev/null +++ b/sdk/search/azure-search-documents/samples/README.md @@ -0,0 +1,63 @@ +--- +topic: sample +languages: + - python +products: + - azure + - azure-search-documents +--- + +# Samples for Azure Cognitive Search client library for Python + +These code samples show common scenario operations with the Azure Cognitive +Search client library. The async versions of the samples (the python sample +files appended with `_async`) show asynchronous operations with Cognitive Search +and require Python version 3.5 or later. + +Authenticate the client with a Azure Cognitive Search [API Key Credential](https://docs.microsoft.com/en-us/azure/search/search-security-api-keys): + +[sample_authentication.py](sample_authentication.py) ([async version](async_samples/sample_authentication_async.py)) + +Then for common search index operations: + +* Get a document by key: [sample_get_document.py](sample_get_document.py) ([async version](async_samples/sample_get_document_async.py)) + +* Perform a simple text query: [sample_simple_query.py](sample_simple_query.py) ([async version](async_samples/sample_simple_query_async.py)) + +* Perform a filtered query: [sample_filter_query.py](sample_filter_query.py) ([async version](async_samples/sample_filter_query_async.py)) + +* Perform a faceted query: [sample_facet_query.py](sample_facet_query.py) ([async version](async_samples/sample_facet_query_async.py)) + +* Get auto-completions: [sample_autocomplete.py](sample_autocomplete.py) ([async version](async_samples/sample_autocomplete_async.py)) + +* Get search suggestions: [sample_suggestions.py](sample_suggestions.py) ([async version](async_samples/sample_suggestions_async.py)) + +* Perform basic document updates: [sample_crud_operations.py](sample_crud_operations.py) ([async version](async_samples/sample_crud_operations_async.py)) + +## Prerequisites +* Python 2.7, or 3.5 or later is required to use this package (3.5 or later if using asyncio) +* You must have an [Azure subscription](https://azure.microsoft.com/free/) +* You must create the "Hotels" sample index [in the Azure Portal](https://docs.microsoft.com/en-us/azure/search/search-get-started-portal) + + +## Setup + +1. Install the Azure Cognitive Search client library for Python with [pip](https://pypi.org/project/pip/): + + ```bash + pip install azure-search-documents --pre + ``` + +2. Clone or download [this repository](https://github.com/Azure/azure-sdk-for-python) +3. Open this sample folder in [Visual Studio Code](https://code.visualstudio.com) or your IDE of choice. + +## Running the samples + +1. Open a terminal window and `cd` to the directory that the samples are saved in. +2. Set the environment variables specified in the sample file you wish to run. +3. Follow the usage described in the file, e.g. `python sample_simple_query.py` + +## Next steps + +Check out the [API reference documentation](https://docs.microsoft.com/en-us/rest/api/searchservice/) +to learn more about what you can do with the Azure Cognitive Search client library. diff --git a/sdk/search/azure-search-documents/samples/async_samples/sample_authentication_async.py b/sdk/search/azure-search-documents/samples/async_samples/sample_authentication_async.py new file mode 100644 index 000000000000..89a2ef80ca6a --- /dev/null +++ b/sdk/search/azure-search-documents/samples/async_samples/sample_authentication_async.py @@ -0,0 +1,44 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_authentication.py +DESCRIPTION: + This sample demonstrates how to authenticate with the Azure Congnitive Search + service with an API key. See more details about authentication here: + https://docs.microsoft.com/en-us/azure.search.documents/search-security-api-keys +USAGE: + python sample_authentication.py + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import asyncio +import os + +async def authentication_with_api_key_credential_async(): + # [START create_search_client_with_key_async] + from azure.search.documents.aio import SearchIndexClient + from azure.search.documents import SearchApiKeyCredential + service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") + index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") + key = os.getenv("AZURE_SEARCH_API_KEY") + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + # [END create_search_client_with_key_async] + + async with search_client: + result = await search_client.get_document_count() + + print("There are {} documents in the {} search index.".format(result, repr(index_name))) + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(authentication_with_api_key_credential_async()) \ No newline at end of file diff --git a/sdk/search/azure-search-documents/samples/async_samples/sample_autocomplete_async.py b/sdk/search/azure-search-documents/samples/async_samples/sample_autocomplete_async.py new file mode 100644 index 000000000000..0812a909b2f6 --- /dev/null +++ b/sdk/search/azure-search-documents/samples/async_samples/sample_autocomplete_async.py @@ -0,0 +1,51 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_autocomplete_async.py +DESCRIPTION: + This sample demonstrates how to obtain autocompletion suggestions from an + Azure search index. +USAGE: + python sample_autocomplete_async.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os +import asyncio + + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +async def autocomplete_query(): + # [START autocomplete_query_async] + from azure.search.documents.aio import SearchIndexClient + from azure.search.documents import AutocompleteQuery, SearchApiKeyCredential + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + + query = AutocompleteQuery(search_text="bo", suggester_name="sg") + + results = await search_client.autocomplete(query=query) + + print("Autocomplete suggestions for 'bo'") + for result in results: + print(" Completion: {}".format(result["text"])) + + await search_client.close() + # [END autocomplete_query_async] + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(autocomplete_query()) \ No newline at end of file diff --git a/sdk/search/azure-search-documents/samples/async_samples/sample_crud_operations_async.py b/sdk/search/azure-search-documents/samples/async_samples/sample_crud_operations_async.py new file mode 100644 index 000000000000..6ae308a42296 --- /dev/null +++ b/sdk/search/azure-search-documents/samples/async_samples/sample_crud_operations_async.py @@ -0,0 +1,73 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_crud_operations_async.py +DESCRIPTION: + This sample demonstrates how to upload, merge, or delete documents from an + Azure Search index. +USAGE: + python sample_crud_operations_async.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os +import asyncio + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +from azure.search.documents.aio import SearchIndexClient +from azure.search.documents import SearchApiKeyCredential, SearchQuery + +search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + +async def upload_document(): + # [START upload_document_async] + DOCUMENT = { + 'Category': 'Hotel', + 'HotelId': '1000', + 'Rating': 4.0, + 'Rooms': [], + 'HotelName': 'Azure Inn', + } + + result = await search_client.upload_documents(documents=[DOCUMENT]) + + print("Upload of new document succeeded: {}".format(result[0].succeeded)) + # [END upload_document_async] + +async def merge_document(): + # [START merge_document_async] + result = await search_client.upload_documents(documents=[{"HotelId": "1000", "Rating": 4.5}]) + + print("Merge into new document succeeded: {}".format(result[0].succeeded)) + # [END merge_document_async] + +async def delete_document(): + # [START delete_document_async] + result = await search_client.upload_documents(documents=[{"HotelId": "1000"}]) + + print("Delete new document succeeded: {}".format(result[0].succeeded)) + # [END delete_document_async] + +async def main(): + await upload_document() + await merge_document() + await delete_document() + await search_client.close() + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(main()) + loop.close() diff --git a/sdk/search/azure-search-documents/samples/async_samples/sample_facet_query_async.py b/sdk/search/azure-search-documents/samples/async_samples/sample_facet_query_async.py new file mode 100644 index 000000000000..3d97281440c5 --- /dev/null +++ b/sdk/search/azure-search-documents/samples/async_samples/sample_facet_query_async.py @@ -0,0 +1,53 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_facet_query_async.py +DESCRIPTION: + This sample demonstrates how to obtain search facets on specified field in + an Azure Search index. +USAGE: + python sample_facet_query_async.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os +import asyncio + + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +async def filter_query(): + # [START facet_query_async] + from azure.search.documents.aio import SearchIndexClient + from azure.search.documents import SearchApiKeyCredential, SearchQuery + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + + query = SearchQuery(search_text="WiFi", facets=["Category"], top=0) + + results = await search_client.search(query=query) + + facets = await results.get_facets() + + print("Catgory facet counts for hotels:") + for facet in facets["Category"]: + print(" {}".format(facet)) + + await search_client.close() + # [END facet_query_async] + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(filter_query()) diff --git a/sdk/search/azure-search-documents/samples/async_samples/sample_filter_query_async.py b/sdk/search/azure-search-documents/samples/async_samples/sample_filter_query_async.py new file mode 100644 index 000000000000..139d9ff0baba --- /dev/null +++ b/sdk/search/azure-search-documents/samples/async_samples/sample_filter_query_async.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_filter_query_async.py +DESCRIPTION: + This sample demonstrates how search results from an Azure Search index can + be filtered and ordered. +USAGE: + python sample_filter_query_async.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os +import asyncio + + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +async def filter_query(): + # [START filter_query_async] + from azure.search.documents.aio import SearchIndexClient + from azure.search.documents import SearchApiKeyCredential, SearchQuery + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + + query = SearchQuery(search_text="WiFi") + query.filter("Address/StateProvince eq 'FL' and Address/Country eq 'USA'") + query.select("HotelName", "Rating") + query.order_by("Rating desc") + + results = await search_client.search(query=query) + + print("Florida hotels containing 'WiFi', sorted by Rating:") + async for result in results: + print(" Name: {} (rating {})".format(result["HotelName"], result["Rating"])) + + await search_client.close() + # [END filter_query_async] + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(filter_query()) \ No newline at end of file diff --git a/sdk/search/azure-search-documents/samples/async_samples/sample_get_document_async.py b/sdk/search/azure-search-documents/samples/async_samples/sample_get_document_async.py new file mode 100644 index 000000000000..c8d9a39f2c4d --- /dev/null +++ b/sdk/search/azure-search-documents/samples/async_samples/sample_get_document_async.py @@ -0,0 +1,50 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_get_document_async.py +DESCRIPTION: + This sample demonstrates how to retrieve a specific document by key from an + Azure Search index. +USAGE: + python sample_get_document_async.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os +import asyncio + + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +async def autocomplete_query(): + # [START get_document_async] + from azure.search.documents.aio import SearchIndexClient + from azure.search.documents import SearchApiKeyCredential + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + + result = await search_client.get_document(key="23") + + print("Details for hotel '23' are:") + print(" Name: {}".format(result["HotelName"])) + print(" Rating: {}".format(result["Rating"])) + print(" Category: {}".format(result["Category"])) + + await search_client.close() + # [END get_document_async] + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(autocomplete_query()) \ No newline at end of file diff --git a/sdk/search/azure-search-documents/samples/async_samples/sample_simple_query_async.py b/sdk/search/azure-search-documents/samples/async_samples/sample_simple_query_async.py new file mode 100644 index 000000000000..95b8db9322f3 --- /dev/null +++ b/sdk/search/azure-search-documents/samples/async_samples/sample_simple_query_async.py @@ -0,0 +1,49 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_simple_query_async.py +DESCRIPTION: + This sample demonstrates how to get search results from a basic search text + from an Azure Search index. +USAGE: + python sample_simple_query_async.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os +import asyncio + + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +async def simple_text_query(): + # [START simple_query_async] + from azure.search.documents.aio import SearchIndexClient + from azure.search.documents import SearchApiKeyCredential + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + + results = await search_client.search(query="spa") + + print("Hotels containing 'spa' in the name (or other fields):") + async for result in results: + print(" Name: {} (rating {})".format(result["HotelName"], result["Rating"])) + + await search_client.close() + # [END simple_query_async] + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(simple_text_query()) \ No newline at end of file diff --git a/sdk/search/azure-search-documents/samples/async_samples/sample_suggestions_async.py b/sdk/search/azure-search-documents/samples/async_samples/sample_suggestions_async.py new file mode 100644 index 000000000000..b628d9fd5925 --- /dev/null +++ b/sdk/search/azure-search-documents/samples/async_samples/sample_suggestions_async.py @@ -0,0 +1,52 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_suggestions_async.py +DESCRIPTION: + This sample demonstrates how to obtain search suggestions from an Azure + search index. +USAGE: + python sample_suggestions_async.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os +import asyncio + + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +async def suggest_query(): + # [START suggest_query_async] + from azure.search.documents.aio import SearchIndexClient + from azure.search.documents import SearchApiKeyCredential, SuggestQuery + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + + query = SuggestQuery(search_text="coffee", suggester_name="sg") + + results = await search_client.suggest(query=query) + + print("Search suggestions for 'coffee'") + for result in results: + hotel = await search_client.get_document(key=result["HotelId"]) + print(" Text: {} for Hotel: {}".format(repr(result["text"]), hotel["HotelName"])) + + await search_client.close() + # [END suggest_query_async] + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(suggest_query()) diff --git a/sdk/search/azure-search-documents/samples/sample_authentication.py b/sdk/search/azure-search-documents/samples/sample_authentication.py new file mode 100644 index 000000000000..4ca018b7c82e --- /dev/null +++ b/sdk/search/azure-search-documents/samples/sample_authentication.py @@ -0,0 +1,41 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_authentication.py +DESCRIPTION: + This sample demonstrates how to authenticate with the Azure Congnitive Search + service with an API key. See more details about authentication here: + https://docs.microsoft.com/en-us/azure.search.documents/search-security-api-keys +USAGE: + python sample_authentication.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os + +def authentication_with_api_key_credential(): + # [START create_search_client_with_key] + from azure.search.documents import SearchApiKeyCredential, SearchIndexClient + service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") + index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") + key = os.getenv("AZURE_SEARCH_API_KEY") + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + # [END create_search_client_with_key] + + result = search_client.get_document_count() + + print("There are {} documents in the {} search index.".format(result, repr(index_name))) + +if __name__ == '__main__': + authentication_with_api_key_credential() \ No newline at end of file diff --git a/sdk/search/azure-search-documents/samples/sample_autocomplete.py b/sdk/search/azure-search-documents/samples/sample_autocomplete.py new file mode 100644 index 000000000000..008a71a2ec12 --- /dev/null +++ b/sdk/search/azure-search-documents/samples/sample_autocomplete.py @@ -0,0 +1,45 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_autocomplete.py +DESCRIPTION: + This sample demonstrates how to obtain autocompletion suggestions from an + Azure Search index. +USAGE: + python sample_autocomplete.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +def autocomplete_query(): + # [START autocomplete_query] + from azure.search.documents import AutocompleteQuery, SearchApiKeyCredential, SearchIndexClient + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + + query = AutocompleteQuery(search_text="bo", suggester_name="sg") + + results = search_client.autocomplete(query=query) + + print("Autocomplete suggestions for 'bo'") + for result in results: + print(" Completion: {}".format(result["text"])) + # [END autocomplete_query] + +if __name__ == '__main__': + autocomplete_query() \ No newline at end of file diff --git a/sdk/search/azure-search-documents/samples/sample_crud_operations.py b/sdk/search/azure-search-documents/samples/sample_crud_operations.py new file mode 100644 index 000000000000..c7ed7485aab0 --- /dev/null +++ b/sdk/search/azure-search-documents/samples/sample_crud_operations.py @@ -0,0 +1,64 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_crud_operations.py +DESCRIPTION: + This sample demonstrates how to upload, merge, or delete documents from an + Azure Search index. +USAGE: + python sample_crud_operations.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +from azure.search.documents import SearchApiKeyCredential, SearchIndexClient +search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + +def upload_document(): + # [START upload_document] + DOCUMENT = { + 'Category': 'Hotel', + 'HotelId': '1000', + 'Rating': 4.0, + 'Rooms': [], + 'HotelName': 'Azure Inn', + } + + result = search_client.upload_documents(documents=[DOCUMENT]) + + print("Upload of new document succeeded: {}".format(result[0].succeeded)) + # [END upload_document] + +def merge_document(): + # [START merge_document] + result = search_client.upload_documents(documents=[{"HotelId": "1000", "Rating": 4.5}]) + + print("Merge into new document succeeded: {}".format(result[0].succeeded)) + # [END merge_document] + +def delete_document(): + # [START delete_document] + result = search_client.upload_documents(documents=[{"HotelId": "1000"}]) + + print("Delete new document succeeded: {}".format(result[0].succeeded)) + # [END delete_document] + +if __name__ == '__main__': + upload_document() + merge_document() + delete_document() diff --git a/sdk/search/azure-search-documents/samples/sample_facet_query.py b/sdk/search/azure-search-documents/samples/sample_facet_query.py new file mode 100644 index 000000000000..2a7e0e4699ad --- /dev/null +++ b/sdk/search/azure-search-documents/samples/sample_facet_query.py @@ -0,0 +1,47 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_facet_query.py +DESCRIPTION: + This sample demonstrates how to obtain search facets on specified field in + an Azure Search index. +USAGE: + python sample_facet_query.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +def filter_query(): + # [START facet_query] + from azure.search.documents import SearchApiKeyCredential, SearchIndexClient, SearchQuery + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + + query = SearchQuery(search_text="WiFi", facets=["Category"], top=0) + + results = search_client.search(query=query) + + facets = results.get_facets() + + print("Catgory facet counts for hotels:") + for facet in facets["Category"]: + print(" {}".format(facet)) + # [END filter_query] + +if __name__ == '__main__': + filter_query() \ No newline at end of file diff --git a/sdk/search/azure-search-documents/samples/sample_filter_query.py b/sdk/search/azure-search-documents/samples/sample_filter_query.py new file mode 100644 index 000000000000..c1974650deda --- /dev/null +++ b/sdk/search/azure-search-documents/samples/sample_filter_query.py @@ -0,0 +1,48 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_filter_query.py +DESCRIPTION: + This sample demonstrates how search results from an Azure Search index can + be filtered and ordered. +USAGE: + python sample_filter_query.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +def filter_query(): + # [START filter_query] + from azure.search.documents import SearchApiKeyCredential, SearchIndexClient, SearchQuery + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + + query = SearchQuery(search_text="WiFi") + query.filter("Address/StateProvince eq 'FL' and Address/Country eq 'USA'") + query.select("HotelName", "Rating") + query.order_by("Rating desc") + + results = search_client.search(query=query) + + print("Florida hotels containing 'WiFi', sorted by Rating:") + for result in results: + print(" Name: {} (rating {})".format(result["HotelName"], result["Rating"])) + # [END filter_query] + +if __name__ == '__main__': + filter_query() \ No newline at end of file diff --git a/sdk/search/azure-search-documents/samples/sample_get_document.py b/sdk/search/azure-search-documents/samples/sample_get_document.py new file mode 100644 index 000000000000..fb2fa4209d86 --- /dev/null +++ b/sdk/search/azure-search-documents/samples/sample_get_document.py @@ -0,0 +1,44 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_get_document.py +DESCRIPTION: + This sample demonstrates how to retrieve a specific document by key from an + Azure Search index. +USAGE: + python sample_get_document.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +def get_document(): + # [START get_document] + from azure.search.documents import SearchApiKeyCredential, SearchIndexClient + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + + result = search_client.get_document(key="23") + + print("Details for hotel '23' are:") + print(" Name: {}".format(result["HotelName"])) + print(" Rating: {}".format(result["Rating"])) + print(" Category: {}".format(result["Category"])) + # [END get_document] + +if __name__ == '__main__': + get_document() \ No newline at end of file diff --git a/sdk/search/azure-search-documents/samples/sample_simple_query.py b/sdk/search/azure-search-documents/samples/sample_simple_query.py new file mode 100644 index 000000000000..39e275fa2e3f --- /dev/null +++ b/sdk/search/azure-search-documents/samples/sample_simple_query.py @@ -0,0 +1,43 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_simple_query.py +DESCRIPTION: + This sample demonstrates how to get search results from a basic search text + from an Azure Search index. +USAGE: + python sample_simple_query.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +def simple_text_query(): + # [START simple_query] + from azure.search.documents import SearchApiKeyCredential, SearchIndexClient + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + + results = search_client.search(query="spa") + + print("Hotels containing 'spa' in the name (or other fields):") + for result in results: + print(" Name: {} (rating {})".format(result["HotelName"], result["Rating"])) + # [END simple_query] + +if __name__ == '__main__': + simple_text_query() \ No newline at end of file diff --git a/sdk/search/azure-search-documents/samples/sample_suggestions.py b/sdk/search/azure-search-documents/samples/sample_suggestions.py new file mode 100644 index 000000000000..2b0a9cc19963 --- /dev/null +++ b/sdk/search/azure-search-documents/samples/sample_suggestions.py @@ -0,0 +1,46 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_suggestions.py +DESCRIPTION: + This sample demonstrates how to obtain search suggestions from an Azure + search index +USAGE: + python sample_suggestions.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_SEARCH_SERVICE_ENDPOINT - the endpoint of your Azure Cognitive Search service + 2) AZURE_SEARCH_INDEX_NAME - the name of your search index (e.g. "hotels-sample-index") + 3) AZURE_SEARCH_API_KEY - your search API key +""" + +import os + +service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT") +index_name = os.getenv("AZURE_SEARCH_INDEX_NAME") +key = os.getenv("AZURE_SEARCH_API_KEY") + +def suggest_query(): + # [START suggest_query] + from azure.search.documents import SearchApiKeyCredential, SearchIndexClient, SuggestQuery + + search_client = SearchIndexClient(service_endpoint, index_name, SearchApiKeyCredential(key)) + + query = SuggestQuery(search_text="coffee", suggester_name="sg") + + results = search_client.suggest(query=query) + + print("Search suggestions for 'coffee'") + for result in results: + hotel = search_client.get_document(key=result["HotelId"]) + print(" Text: {} for Hotel: {}".format(repr(result["text"]), hotel["HotelName"])) + # [END suggest_query] + +if __name__ == '__main__': + suggest_query() diff --git a/sdk/search/azure-search-documents/sdk_packaging.toml b/sdk/search/azure-search-documents/sdk_packaging.toml new file mode 100644 index 000000000000..e7687fdae93b --- /dev/null +++ b/sdk/search/azure-search-documents/sdk_packaging.toml @@ -0,0 +1,2 @@ +[packaging] +auto_update = false \ No newline at end of file diff --git a/sdk/search/azure-search-documents/setup.cfg b/sdk/search/azure-search-documents/setup.cfg new file mode 100644 index 000000000000..3c6e79cf31da --- /dev/null +++ b/sdk/search/azure-search-documents/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal=1 diff --git a/sdk/search/azure-search-documents/setup.py b/sdk/search/azure-search-documents/setup.py new file mode 100644 index 000000000000..adfce57d2883 --- /dev/null +++ b/sdk/search/azure-search-documents/setup.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + + +import os +import re + +from setuptools import setup, find_packages + +# Change the PACKAGE_NAME only to change folder and different name +PACKAGE_NAME = "azure-search-documents" +PACKAGE_PPRINT_NAME = "Azure Cognitive Search" + +# a-b-c => a/b/c +PACKAGE_FOLDER_PATH = PACKAGE_NAME.replace("-", "/") +# a-b-c => a.b.c +NAMESPACE_NAME = PACKAGE_NAME.replace("-", ".") + +# azure v0.x is not compatible with this package +# azure v0.x used to have a __version__ attribute (newer versions don't) +try: + import azure + + try: + ver = azure.__version__ + raise Exception( + 'This package is incompatible with azure=={}. '.format(ver) + + 'Uninstall it with "pip uninstall azure".' + ) + except AttributeError: + pass +except ImportError: + pass + +# Version extraction inspired from 'requests' +with open(os.path.join(PACKAGE_FOLDER_PATH, '_version.py'), 'r') as fd: + version = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]', + fd.read(), re.MULTILINE).group(1) + +if not version: + raise RuntimeError('Cannot find version information') + +setup( + name=PACKAGE_NAME, + version=version, + description='Microsoft {} Client Library for Python'.format(PACKAGE_PPRINT_NAME), + long_description=open('README.md', 'r').read(), + long_description_content_type='text/markdown', + license='MIT License', + author='Microsoft Corporation', + author_email='ascl@microsoft.com', + url='https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/search/azure-search-documents', + classifiers=[ + "Development Status :: 4 - Beta", + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'License :: OSI Approved :: MIT License', + ], + zip_safe=False, + packages=find_packages(exclude=[ + 'samples', + 'tests', + # Exclude packages that will be covered by PEP420 or nspkg + 'azure', + 'azure.search', + ]), + install_requires=[ + "azure-core<2.0.0,>=1.2.2", + "msrest>=0.6.10", + ], + extras_require={ + ":python_version<'3.0'": ['futures', 'azure-search-nspkg'], + ":python_version<'3.4'": ['enum34>=1.0.4'], + ":python_version<'3.5'": ["typing"] + }, +) diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_async_get_document_count.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_async_get_document_count.yaml new file mode 100644 index 000000000000..2dad6d34e0d3 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_async_get_document_count.yaml @@ -0,0 +1,34 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 3E09B72DB905597AB9127D9DBFBE441E + method: GET + uri: https://search22c31514.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF10" + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '127' + content-type: text/plain + date: Thu, 19 Mar 2020 00:18:31 GMT + elapsed-time: '60' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 29b3bdde-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search22c31514.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_autocomplete.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_autocomplete.yaml new file mode 100644 index 000000000000..554cf9eeae7e --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_autocomplete.yaml @@ -0,0 +1,38 @@ +interactions: +- request: + body: '{"search": "mot", "suggesterName": "sg"}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '40' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 53A9F61B8C003E2D608580D9822FE054 + method: POST + uri: https://search42ca1023.search.windows.net/indexes('drgqefsg')/docs/search.post.autocomplete?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"text":"motel","queryPlusText":"motel"}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '163' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:18:41 GMT + elapsed-time: '99' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 3015052a-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search42ca1023.search.windows.net/indexes('drgqefsg')/docs/search.post.autocomplete?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_delete_documents_existing.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_delete_documents_existing.yaml new file mode 100644 index 000000000000..d06b27d49e31 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_delete_documents_existing.yaml @@ -0,0 +1,125 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "3", "@search.action": "delete"}, {"hotelId": "4", + "@search.action": "delete"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '103' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - C70E2AE3883C0E258491FF305B99C0B8 + method: POST + uri: https://search37b1157f.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"3","status":true,"errorMessage":null,"statusCode":200},{"key":"4","status":true,"errorMessage":null,"statusCode":200}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '190' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:18:52 GMT + elapsed-time: '110' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 3686dda2-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search37b1157f.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - C70E2AE3883C0E258491FF305B99C0B8 + method: GET + uri: https://search37b1157f.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF8" + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '126' + content-type: text/plain + date: Thu, 19 Mar 2020 00:18:55 GMT + elapsed-time: '3' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 38720c7c-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search37b1157f.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - C70E2AE3883C0E258491FF305B99C0B8 + method: GET + uri: https://search37b1157f.search.windows.net/indexes('drgqefsg')/docs('3')?api-version=2019-05-06-Preview + response: + body: + string: '' + headers: + cache-control: no-cache + content-length: '0' + date: Thu, 19 Mar 2020 00:18:55 GMT + elapsed-time: '4' + expires: '-1' + pragma: no-cache + request-id: 3876ff66-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + status: + code: 404 + message: Not Found + url: https://search37b1157f.search.windows.net/indexes('drgqefsg')/docs('3')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - C70E2AE3883C0E258491FF305B99C0B8 + method: GET + uri: https://search37b1157f.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview + response: + body: + string: '' + headers: + cache-control: no-cache + content-length: '0' + date: Thu, 19 Mar 2020 00:18:55 GMT + elapsed-time: '4' + expires: '-1' + pragma: no-cache + request-id: 387c2b58-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + status: + code: 404 + message: Not Found + url: https://search37b1157f.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_delete_documents_missing.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_delete_documents_missing.yaml new file mode 100644 index 000000000000..2e5ec8fc2089 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_delete_documents_missing.yaml @@ -0,0 +1,125 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "1000", "@search.action": "delete"}, {"hotelId": + "4", "@search.action": "delete"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '106' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - F15F3409B0BC9E7D019FF18251E360EF + method: POST + uri: https://search2224150e.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"1000","status":true,"errorMessage":null,"statusCode":200},{"key":"4","status":true,"errorMessage":null,"statusCode":200}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '193' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:06 GMT + elapsed-time: '82' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 3efc1c18-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search2224150e.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - F15F3409B0BC9E7D019FF18251E360EF + method: GET + uri: https://search2224150e.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF9" + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '126' + content-type: text/plain + date: Thu, 19 Mar 2020 00:19:09 GMT + elapsed-time: '4' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 40e33f98-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search2224150e.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - F15F3409B0BC9E7D019FF18251E360EF + method: GET + uri: https://search2224150e.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview + response: + body: + string: '' + headers: + cache-control: no-cache + content-length: '0' + date: Thu, 19 Mar 2020 00:19:09 GMT + elapsed-time: '3' + expires: '-1' + pragma: no-cache + request-id: 40e86518-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + status: + code: 404 + message: Not Found + url: https://search2224150e.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - F15F3409B0BC9E7D019FF18251E360EF + method: GET + uri: https://search2224150e.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview + response: + body: + string: '' + headers: + cache-control: no-cache + content-length: '0' + date: Thu, 19 Mar 2020 00:19:09 GMT + elapsed-time: '4' + expires: '-1' + pragma: no-cache + request-id: 40ed3be2-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + status: + code: 404 + message: Not Found + url: https://search2224150e.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_document.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_document.yaml new file mode 100644 index 000000000000..a4aa3a38dcc8 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_document.yaml @@ -0,0 +1,370 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 794D643BAA2C0B61F7A27F0581B89680 + method: GET + uri: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('1')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"1","hotelName":"Fancy Stay","description":"Best hotel in + town if you like luxury hotels. They have an amazing infinity pool, a spa, + and a really helpful concierge. The location is perfect -- right downtown, + close to all the tourist attractions. We highly recommend this hotel.","descriptionFr":"Meilleur + h\u00f4tel en ville si vous aimez les h\u00f4tels de luxe. Ils ont une magnifique + piscine \u00e0 d\u00e9bordement, un spa et un concierge tr\u00e8s utile. L''emplacement + est parfait \u2013 en plein centre, \u00e0 proximit\u00e9 de toutes les attractions + touristiques. Nous recommandons fortement cet h\u00f4tel.","category":"Luxury","tags":["pool","view","wifi","concierge"],"parkingIncluded":false,"smokingAllowed":false,"lastRenovationDate":"2010-06-27T00:00:00Z","rating":5,"location":{"type":"Point","coordinates":[-122.131577,47.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '748' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:20 GMT + elapsed-time: '145' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 46ffe552-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('1')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 794D643BAA2C0B61F7A27F0581B89680 + method: GET + uri: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('2')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"2","hotelName":"Roach Motel","description":"Cheapest hotel + in town. Infact, a motel.","descriptionFr":"H\u00f4tel le moins cher en ville. + Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '449' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:20 GMT + elapsed-time: '5' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 4726ef12-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('2')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 794D643BAA2C0B61F7A27F0581B89680 + method: GET + uri: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('3')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"3","hotelName":"EconoStay","description":"Very popular + hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '438' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:20 GMT + elapsed-time: '4' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 472c9462-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('3')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 794D643BAA2C0B61F7A27F0581B89680 + method: GET + uri: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"4","hotelName":"Express Rooms","description":"Pretty good + hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '422' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:20 GMT + elapsed-time: '3' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 4731ada8-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 794D643BAA2C0B61F7A27F0581B89680 + method: GET + uri: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('5')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"5","hotelName":"Comfy Place","description":"Another good + hotel","descriptionFr":"Un autre bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"2012-08-12T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '424' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:20 GMT + elapsed-time: '4' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 4736b366-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('5')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 794D643BAA2C0B61F7A27F0581B89680 + method: GET + uri: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('6')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"6","hotelName":null,"description":"Surprisingly expensive. + Model suites have an ocean-view.","descriptionFr":null,"category":null,"tags":[],"parkingIncluded":null,"smokingAllowed":null,"lastRenovationDate":null,"rating":null,"location":null,"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '301' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:20 GMT + elapsed-time: '4' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 473beeda-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('6')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 794D643BAA2C0B61F7A27F0581B89680 + method: GET + uri: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('7')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"7","hotelName":"Modern Stay","description":"Modern architecture, + very polite staff and very clean. Also very affordable.","descriptionFr":"Architecture + moderne, personnel poli et tr\u00e8s propre. Aussi tr\u00e8s abordable.","category":null,"tags":[],"parkingIncluded":null,"smokingAllowed":null,"lastRenovationDate":null,"rating":null,"location":null,"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '357' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:20 GMT + elapsed-time: '3' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 4740fcb8-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('7')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 794D643BAA2C0B61F7A27F0581B89680 + method: GET + uri: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('8')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"8","hotelName":null,"description":"Has some road noise + and is next to the very police station. Bathrooms had morel coverings.","descriptionFr":"Il + y a du bruit de la route et se trouve \u00e0 c\u00f4t\u00e9 de la station + de police. Les salles de bain avaient des rev\u00eatements de morilles.","category":null,"tags":[],"parkingIncluded":null,"smokingAllowed":null,"lastRenovationDate":null,"rating":null,"location":null,"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '411' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:20 GMT + elapsed-time: '4' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 47462634-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('8')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 794D643BAA2C0B61F7A27F0581B89680 + method: GET + uri: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('9')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"9","hotelName":"Secret Point Motel","description":"The + hotel is ideally located on the main commercial artery of the city in the + heart of New York. A few minutes away is Time''s Square and the historic centre + of the city, as well as other places of interest that make New York one of + America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '1061' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:20 GMT + elapsed-time: '8' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 474b6a04-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('9')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 794D643BAA2C0B61F7A27F0581B89680 + method: GET + uri: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('10')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"10","hotelName":"Countryside Hotel","description":"Save + up to 50% off traditional hotels. Free WiFi, great location near downtown, + full kitchen, washer & dryer, 24/7 support, bowling alley, fitness center + and more.","descriptionFr":"\u00c9conomisez jusqu''\u00e0 50% sur les h\u00f4tels + traditionnels. WiFi gratuit, tr\u00e8s bien situ\u00e9 pr\u00e8s du centre-ville, + cuisine compl\u00e8te, laveuse & s\u00e9cheuse, support 24/7, bowling, centre + de fitness et plus encore.","category":"Budget","tags":["24-hour front desk + service","coffee in lobby","restaurant"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1999-09-06T00:00:00Z","rating":3,"location":{"type":"Point","coordinates":[-78.940483,35.90416],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"6910 + Fayetteville Rd","city":"Durham","stateProvince":"NC","country":"USA","postalCode":"27713"},"rooms":[{"description":"Suite, + 1 King Bed (Amenities)","descriptionFr":"Suite, 1 tr\u00e8s grand lit (Services)","type":"Suite","baseRate":2.44,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["coffee maker"]},{"description":"Budget + Room, 1 Queen Bed (Amenities)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (Services)","type":"Budget Room","baseRate":7.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":false,"tags":["coffee maker"]}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '938' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:20 GMT + elapsed-time: '3' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 47517868-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search41be100f.search.windows.net/indexes('drgqefsg')/docs('10')?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_document_missing.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_document_missing.yaml new file mode 100644 index 000000000000..fa0c217db274 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_document_missing.yaml @@ -0,0 +1,29 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - ED390E220F1E902275D59A5047360817 + method: GET + uri: https://searchd1281368.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview + response: + body: + string: '' + headers: + cache-control: no-cache + content-length: '0' + date: Thu, 19 Mar 2020 00:19:30 GMT + elapsed-time: '62' + expires: '-1' + pragma: no-cache + request-id: 4d880116-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + status: + code: 404 + message: Not Found + url: https://searchd1281368.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_counts.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_counts.yaml new file mode 100644 index 000000000000..2a4be953b022 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_counts.yaml @@ -0,0 +1,160 @@ +interactions: +- request: + body: '{"search": "hotel"}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '19' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 3778D42FDFB4652F21C284FF151A97EC + method: POST + uri: https://search97b31221.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.score":0.48248714,"hotelId":"10","hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","descriptionFr":"\u00c9conomisez jusqu''\u00e0 + 50% sur les h\u00f4tels traditionnels. WiFi gratuit, tr\u00e8s bien situ\u00e9 + pr\u00e8s du centre-ville, cuisine compl\u00e8te, laveuse & s\u00e9cheuse, + support 24/7, bowling, centre de fitness et plus encore.","category":"Budget","tags":["24-hour + front desk service","coffee in lobby","restaurant"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1999-09-06T00:00:00Z","rating":3,"location":{"type":"Point","coordinates":[-78.940483,35.90416],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"6910 + Fayetteville Rd","city":"Durham","stateProvince":"NC","country":"USA","postalCode":"27713"},"rooms":[{"description":"Suite, + 1 King Bed (Amenities)","descriptionFr":"Suite, 1 tr\u00e8s grand lit (Services)","type":"Suite","baseRate":2.44,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["coffee maker"]},{"description":"Budget + Room, 1 Queen Bed (Amenities)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (Services)","type":"Budget Room","baseRate":7.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":false,"tags":["coffee maker"]}]},{"@search.score":0.18522348,"hotelId":"3","hotelName":"EconoStay","description":"Very + popular hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"4","hotelName":"Express + Rooms","description":"Pretty good hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"5","hotelName":"Comfy + Place","description":"Another good hotel","descriptionFr":"Un autre bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"2012-08-12T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.15049407,"hotelId":"2","hotelName":"Roach + Motel","description":"Cheapest hotel in town. Infact, a motel.","descriptionFr":"H\u00f4tel + le moins cher en ville. Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.12030617,"hotelId":"1","hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","descriptionFr":"Meilleur h\u00f4tel en ville si vous + aimez les h\u00f4tels de luxe. Ils ont une magnifique piscine \u00e0 d\u00e9bordement, + un spa et un concierge tr\u00e8s utile. L''emplacement est parfait \u2013 + en plein centre, \u00e0 proximit\u00e9 de toutes les attractions touristiques. + Nous recommandons fortement cet h\u00f4tel.","category":"Luxury","tags":["pool","view","wifi","concierge"],"parkingIncluded":false,"smokingAllowed":false,"lastRenovationDate":"2010-06-27T00:00:00Z","rating":5,"location":{"type":"Point","coordinates":[-122.131577,47.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.057882335,"hotelId":"9","hotelName":"Secret + Point Motel","description":"The hotel is ideally located on the main commercial + artery of the city in the heart of New York. A few minutes away is Time''s + Square and the historic centre of the city, as well as other places of interest + that make New York one of America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '2377' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:41 GMT + elapsed-time: '139' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 5390c94e-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search97b31221.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview +- request: + body: '{"count": true, "search": "hotel"}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '34' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 3778D42FDFB4652F21C284FF151A97EC + method: POST + uri: https://search97b31221.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"@odata.count":7,"value":[{"@search.score":0.48248714,"hotelId":"10","hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","descriptionFr":"\u00c9conomisez jusqu''\u00e0 + 50% sur les h\u00f4tels traditionnels. WiFi gratuit, tr\u00e8s bien situ\u00e9 + pr\u00e8s du centre-ville, cuisine compl\u00e8te, laveuse & s\u00e9cheuse, + support 24/7, bowling, centre de fitness et plus encore.","category":"Budget","tags":["24-hour + front desk service","coffee in lobby","restaurant"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1999-09-06T00:00:00Z","rating":3,"location":{"type":"Point","coordinates":[-78.940483,35.90416],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"6910 + Fayetteville Rd","city":"Durham","stateProvince":"NC","country":"USA","postalCode":"27713"},"rooms":[{"description":"Suite, + 1 King Bed (Amenities)","descriptionFr":"Suite, 1 tr\u00e8s grand lit (Services)","type":"Suite","baseRate":2.44,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["coffee maker"]},{"description":"Budget + Room, 1 Queen Bed (Amenities)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (Services)","type":"Budget Room","baseRate":7.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":false,"tags":["coffee maker"]}]},{"@search.score":0.18522348,"hotelId":"3","hotelName":"EconoStay","description":"Very + popular hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"4","hotelName":"Express + Rooms","description":"Pretty good hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"5","hotelName":"Comfy + Place","description":"Another good hotel","descriptionFr":"Un autre bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"2012-08-12T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.15049407,"hotelId":"2","hotelName":"Roach + Motel","description":"Cheapest hotel in town. Infact, a motel.","descriptionFr":"H\u00f4tel + le moins cher en ville. Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.12030617,"hotelId":"1","hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","descriptionFr":"Meilleur h\u00f4tel en ville si vous + aimez les h\u00f4tels de luxe. Ils ont une magnifique piscine \u00e0 d\u00e9bordement, + un spa et un concierge tr\u00e8s utile. L''emplacement est parfait \u2013 + en plein centre, \u00e0 proximit\u00e9 de toutes les attractions touristiques. + Nous recommandons fortement cet h\u00f4tel.","category":"Luxury","tags":["pool","view","wifi","concierge"],"parkingIncluded":false,"smokingAllowed":false,"lastRenovationDate":"2010-06-27T00:00:00Z","rating":5,"location":{"type":"Point","coordinates":[-122.131577,47.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.057882335,"hotelId":"9","hotelName":"Secret + Point Motel","description":"The hotel is ideally located on the main commercial + artery of the city in the heart of New York. A few minutes away is Time''s + Square and the historic centre of the city, as well as other places of interest + that make New York one of America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '2388' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:41 GMT + elapsed-time: '6' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 53b85e6e-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search97b31221.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_coverage.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_coverage.yaml new file mode 100644 index 000000000000..42bcdbd7ed59 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_coverage.yaml @@ -0,0 +1,160 @@ +interactions: +- request: + body: '{"search": "hotel"}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '19' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 97B456BC0C412F6AD3658EB5DCFCA411 + method: POST + uri: https://searchbcc312d1.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.score":0.48248714,"hotelId":"10","hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","descriptionFr":"\u00c9conomisez jusqu''\u00e0 + 50% sur les h\u00f4tels traditionnels. WiFi gratuit, tr\u00e8s bien situ\u00e9 + pr\u00e8s du centre-ville, cuisine compl\u00e8te, laveuse & s\u00e9cheuse, + support 24/7, bowling, centre de fitness et plus encore.","category":"Budget","tags":["24-hour + front desk service","coffee in lobby","restaurant"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1999-09-06T00:00:00Z","rating":3,"location":{"type":"Point","coordinates":[-78.940483,35.90416],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"6910 + Fayetteville Rd","city":"Durham","stateProvince":"NC","country":"USA","postalCode":"27713"},"rooms":[{"description":"Suite, + 1 King Bed (Amenities)","descriptionFr":"Suite, 1 tr\u00e8s grand lit (Services)","type":"Suite","baseRate":2.44,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["coffee maker"]},{"description":"Budget + Room, 1 Queen Bed (Amenities)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (Services)","type":"Budget Room","baseRate":7.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":false,"tags":["coffee maker"]}]},{"@search.score":0.18522348,"hotelId":"3","hotelName":"EconoStay","description":"Very + popular hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"4","hotelName":"Express + Rooms","description":"Pretty good hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"5","hotelName":"Comfy + Place","description":"Another good hotel","descriptionFr":"Un autre bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"2012-08-12T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.15049407,"hotelId":"2","hotelName":"Roach + Motel","description":"Cheapest hotel in town. Infact, a motel.","descriptionFr":"H\u00f4tel + le moins cher en ville. Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.12030617,"hotelId":"1","hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","descriptionFr":"Meilleur h\u00f4tel en ville si vous + aimez les h\u00f4tels de luxe. Ils ont une magnifique piscine \u00e0 d\u00e9bordement, + un spa et un concierge tr\u00e8s utile. L''emplacement est parfait \u2013 + en plein centre, \u00e0 proximit\u00e9 de toutes les attractions touristiques. + Nous recommandons fortement cet h\u00f4tel.","category":"Luxury","tags":["pool","view","wifi","concierge"],"parkingIncluded":false,"smokingAllowed":false,"lastRenovationDate":"2010-06-27T00:00:00Z","rating":5,"location":{"type":"Point","coordinates":[-122.131577,47.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.057882335,"hotelId":"9","hotelName":"Secret + Point Motel","description":"The hotel is ideally located on the main commercial + artery of the city in the heart of New York. A few minutes away is Time''s + Square and the historic centre of the city, as well as other places of interest + that make New York one of America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '2377' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:52 GMT + elapsed-time: '21' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 5a3c2edc-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://searchbcc312d1.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview +- request: + body: '{"minimumCoverage": 50.0, "search": "hotel"}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '44' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 97B456BC0C412F6AD3658EB5DCFCA411 + method: POST + uri: https://searchbcc312d1.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"@search.coverage":100.0,"value":[{"@search.score":0.48248714,"hotelId":"10","hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","descriptionFr":"\u00c9conomisez jusqu''\u00e0 + 50% sur les h\u00f4tels traditionnels. WiFi gratuit, tr\u00e8s bien situ\u00e9 + pr\u00e8s du centre-ville, cuisine compl\u00e8te, laveuse & s\u00e9cheuse, + support 24/7, bowling, centre de fitness et plus encore.","category":"Budget","tags":["24-hour + front desk service","coffee in lobby","restaurant"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1999-09-06T00:00:00Z","rating":3,"location":{"type":"Point","coordinates":[-78.940483,35.90416],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"6910 + Fayetteville Rd","city":"Durham","stateProvince":"NC","country":"USA","postalCode":"27713"},"rooms":[{"description":"Suite, + 1 King Bed (Amenities)","descriptionFr":"Suite, 1 tr\u00e8s grand lit (Services)","type":"Suite","baseRate":2.44,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["coffee maker"]},{"description":"Budget + Room, 1 Queen Bed (Amenities)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (Services)","type":"Budget Room","baseRate":7.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":false,"tags":["coffee maker"]}]},{"@search.score":0.18522348,"hotelId":"3","hotelName":"EconoStay","description":"Very + popular hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"4","hotelName":"Express + Rooms","description":"Pretty good hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"5","hotelName":"Comfy + Place","description":"Another good hotel","descriptionFr":"Un autre bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"2012-08-12T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.15049407,"hotelId":"2","hotelName":"Roach + Motel","description":"Cheapest hotel in town. Infact, a motel.","descriptionFr":"H\u00f4tel + le moins cher en ville. Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.12030617,"hotelId":"1","hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","descriptionFr":"Meilleur h\u00f4tel en ville si vous + aimez les h\u00f4tels de luxe. Ils ont une magnifique piscine \u00e0 d\u00e9bordement, + un spa et un concierge tr\u00e8s utile. L''emplacement est parfait \u2013 + en plein centre, \u00e0 proximit\u00e9 de toutes les attractions touristiques. + Nous recommandons fortement cet h\u00f4tel.","category":"Luxury","tags":["pool","view","wifi","concierge"],"parkingIncluded":false,"smokingAllowed":false,"lastRenovationDate":"2010-06-27T00:00:00Z","rating":5,"location":{"type":"Point","coordinates":[-122.131577,47.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.057882335,"hotelId":"9","hotelName":"Secret + Point Motel","description":"The hotel is ideally located on the main commercial + artery of the city in the heart of New York. A few minutes away is Time''s + Square and the historic centre of the city, as well as other places of interest + that make New York one of America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '2389' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:19:52 GMT + elapsed-time: '6' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 5a50b104-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://searchbcc312d1.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_facets_none.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_facets_none.yaml new file mode 100644 index 000000000000..0c2ffceb8c9d --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_facets_none.yaml @@ -0,0 +1,48 @@ +interactions: +- request: + body: '{"search": "WiFi", "select": "hotelName,category,description"}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '62' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 8B5AE4B2C766FF5DD809B8E3F109A5BB + method: POST + uri: https://searchf724140a.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.score":0.2423066,"hotelName":"Countryside Hotel","description":"Save + up to 50% off traditional hotels. Free WiFi, great location near downtown, + full kitchen, washer & dryer, 24/7 support, bowling alley, fitness center + and more.","category":"Budget"},{"@search.score":0.19169211,"hotelName":"EconoStay","description":"Very + popular hotel in town","category":"Budget"},{"@search.score":0.19169211,"hotelName":"Express + Rooms","description":"Pretty good hotel","category":"Budget"},{"@search.score":0.19169211,"hotelName":"Comfy + Place","description":"Another good hotel","category":"Budget"},{"@search.score":0.15335369,"hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","category":"Luxury"}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '609' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:20:03 GMT + elapsed-time: '77' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 60bf7282-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://searchf724140a.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_facets_result.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_facets_result.yaml new file mode 100644 index 000000000000..582f3e0851b2 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_facets_result.yaml @@ -0,0 +1,48 @@ +interactions: +- request: + body: '{"facets": ["category"], "search": "WiFi", "select": "hotelName,category,description"}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '86' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 3F21CD52B96EAA8D000A311E70071FB5 + method: POST + uri: https://search20bd14f9.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"@search.facets":{"category":[{"count":4,"value":"Budget"},{"count":1,"value":"Luxury"}]},"value":[{"@search.score":0.2423066,"hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","category":"Budget"},{"@search.score":0.19169211,"hotelName":"EconoStay","description":"Very + popular hotel in town","category":"Budget"},{"@search.score":0.19169211,"hotelName":"Express + Rooms","description":"Pretty good hotel","category":"Budget"},{"@search.score":0.19169211,"hotelName":"Comfy + Place","description":"Another good hotel","category":"Budget"},{"@search.score":0.15335369,"hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","category":"Luxury"}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '646' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:20:14 GMT + elapsed-time: '111' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 670a83fc-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search20bd14f9.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_filter.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_filter.yaml new file mode 100644 index 000000000000..95e3aade9d09 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_filter.yaml @@ -0,0 +1,45 @@ +interactions: +- request: + body: '{"filter": "category eq ''Budget''", "orderby": "hotelName desc", "search": + "WiFi", "select": "hotelName,category,description"}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '125' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - EF6C82740C2809864DC66C2A0167A600 + method: POST + uri: https://search9776120b.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.score":0.19169211,"hotelName":"Express Rooms","description":"Pretty + good hotel","category":"Budget"},{"@search.score":0.19169211,"hotelName":"EconoStay","description":"Very + popular hotel in town","category":"Budget"},{"@search.score":0.2423066,"hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","category":"Budget"},{"@search.score":0.19169211,"hotelName":"Comfy + Place","description":"Another good hotel","category":"Budget"}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '441' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:20:24 GMT + elapsed-time: '110' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 6e06b676-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search9776120b.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_simple.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_simple.yaml new file mode 100644 index 000000000000..d03454a9d839 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_get_search_simple.yaml @@ -0,0 +1,136 @@ +interactions: +- request: + body: '{"search": "hotel"}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '19' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - EC787537A28DE28386557BA4856835BA + method: POST + uri: https://search97bd120f.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.score":0.48248714,"hotelId":"10","hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","descriptionFr":"\u00c9conomisez jusqu''\u00e0 + 50% sur les h\u00f4tels traditionnels. WiFi gratuit, tr\u00e8s bien situ\u00e9 + pr\u00e8s du centre-ville, cuisine compl\u00e8te, laveuse & s\u00e9cheuse, + support 24/7, bowling, centre de fitness et plus encore.","category":"Budget","tags":["24-hour + front desk service","coffee in lobby","restaurant"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1999-09-06T00:00:00Z","rating":3,"location":{"type":"Point","coordinates":[-78.940483,35.90416],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"6910 + Fayetteville Rd","city":"Durham","stateProvince":"NC","country":"USA","postalCode":"27713"},"rooms":[{"description":"Suite, + 1 King Bed (Amenities)","descriptionFr":"Suite, 1 tr\u00e8s grand lit (Services)","type":"Suite","baseRate":2.44,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["coffee maker"]},{"description":"Budget + Room, 1 Queen Bed (Amenities)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (Services)","type":"Budget Room","baseRate":7.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":false,"tags":["coffee maker"]}]},{"@search.score":0.18522348,"hotelId":"3","hotelName":"EconoStay","description":"Very + popular hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"4","hotelName":"Express + Rooms","description":"Pretty good hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"5","hotelName":"Comfy + Place","description":"Another good hotel","descriptionFr":"Un autre bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"2012-08-12T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.15049407,"hotelId":"2","hotelName":"Roach + Motel","description":"Cheapest hotel in town. Infact, a motel.","descriptionFr":"H\u00f4tel + le moins cher en ville. Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.12030617,"hotelId":"1","hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","descriptionFr":"Meilleur h\u00f4tel en ville si vous + aimez les h\u00f4tels de luxe. Ils ont une magnifique piscine \u00e0 d\u00e9bordement, + un spa et un concierge tr\u00e8s utile. L''emplacement est parfait \u2013 + en plein centre, \u00e0 proximit\u00e9 de toutes les attractions touristiques. + Nous recommandons fortement cet h\u00f4tel.","category":"Luxury","tags":["pool","view","wifi","concierge"],"parkingIncluded":false,"smokingAllowed":false,"lastRenovationDate":"2010-06-27T00:00:00Z","rating":5,"location":{"type":"Point","coordinates":[-122.131577,47.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.057882335,"hotelId":"9","hotelName":"Secret + Point Motel","description":"The hotel is ideally located on the main commercial + artery of the city in the heart of New York. A few minutes away is Time''s + Square and the historic centre of the city, as well as other places of interest + that make New York one of America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '2377' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:20:37 GMT + elapsed-time: '85' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 74f29356-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search97bd120f.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview +- request: + body: '{"search": "motel"}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '19' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - EC787537A28DE28386557BA4856835BA + method: POST + uri: https://search97bd120f.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.score":1.2368374,"hotelId":"2","hotelName":"Roach + Motel","description":"Cheapest hotel in town. Infact, a motel.","descriptionFr":"H\u00f4tel + le moins cher en ville. Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.24176063,"hotelId":"9","hotelName":"Secret + Point Motel","description":"The hotel is ideally located on the main commercial + artery of the city in the heart of New York. A few minutes away is Time''s + Square and the historic centre of the city, as well as other places of interest + that make New York one of America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '1271' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:20:37 GMT + elapsed-time: '7' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 750fe9ce-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search97bd120f.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_merge_documents_existing.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_merge_documents_existing.yaml new file mode 100644 index 000000000000..5320d95343c1 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_merge_documents_existing.yaml @@ -0,0 +1,137 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "3", "rating": 1, "@search.action": "merge"}, {"hotelId": + "4", "rating": 2, "@search.action": "merge"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '127' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 4AD112EF99BD46B8CCB7B69FBE793E8A + method: POST + uri: https://search2308151c.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"3","status":true,"errorMessage":null,"statusCode":200},{"key":"4","status":true,"errorMessage":null,"statusCode":200}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '190' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:20:48 GMT + elapsed-time: '101' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 7b7a399a-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search2308151c.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 4AD112EF99BD46B8CCB7B69FBE793E8A + method: GET + uri: https://search2308151c.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF10" + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '127' + content-type: text/plain + date: Thu, 19 Mar 2020 00:20:50 GMT + elapsed-time: '4' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 7d66fdb0-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search2308151c.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 4AD112EF99BD46B8CCB7B69FBE793E8A + method: GET + uri: https://search2308151c.search.windows.net/indexes('drgqefsg')/docs('3')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"3","hotelName":"EconoStay","description":"Very popular + hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '438' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:20:50 GMT + elapsed-time: '8' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 7d6c9fc2-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search2308151c.search.windows.net/indexes('drgqefsg')/docs('3')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 4AD112EF99BD46B8CCB7B69FBE793E8A + method: GET + uri: https://search2308151c.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"4","hotelName":"Express Rooms","description":"Pretty good + hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":2,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '422' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:20:50 GMT + elapsed-time: '4' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 7d72da2c-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search2308151c.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_merge_documents_missing.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_merge_documents_missing.yaml new file mode 100644 index 000000000000..8ca9369bc4fd --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_merge_documents_missing.yaml @@ -0,0 +1,132 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "1000", "rating": 1, "@search.action": "merge"}, + {"hotelId": "4", "rating": 2, "@search.action": "merge"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '130' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - E9C841AA4C505EA80436C967A6F701BE + method: POST + uri: https://searchdde14ab.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"1000","status":false,"errorMessage":"Document not + found.","statusCode":404},{"key":"4","status":true,"errorMessage":null,"statusCode":200}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '225' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:21:02 GMT + elapsed-time: '86' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 83e9990e-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 207 + message: Multi-Status + url: https://searchdde14ab.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - E9C841AA4C505EA80436C967A6F701BE + method: GET + uri: https://searchdde14ab.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF10" + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '127' + content-type: text/plain + date: Thu, 19 Mar 2020 00:21:05 GMT + elapsed-time: '3' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 85d1da92-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://searchdde14ab.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - E9C841AA4C505EA80436C967A6F701BE + method: GET + uri: https://searchdde14ab.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview + response: + body: + string: '' + headers: + cache-control: no-cache + content-length: '0' + date: Thu, 19 Mar 2020 00:21:05 GMT + elapsed-time: '4' + expires: '-1' + pragma: no-cache + request-id: 85d7a3c8-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + status: + code: 404 + message: Not Found + url: https://searchdde14ab.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - E9C841AA4C505EA80436C967A6F701BE + method: GET + uri: https://searchdde14ab.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"4","hotelName":"Express Rooms","description":"Pretty good + hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":2,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '422' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:21:05 GMT + elapsed-time: '9' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 85dc6e9e-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://searchdde14ab.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_merge_or_upload_documents.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_merge_or_upload_documents.yaml new file mode 100644 index 000000000000..cbec25159274 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_merge_or_upload_documents.yaml @@ -0,0 +1,136 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "1000", "rating": 1, "@search.action": "mergeOrUpload"}, + {"hotelId": "4", "rating": 2, "@search.action": "mergeOrUpload"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '146' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 69FBF7A0FEBE9D7FEBC42032455EEB51 + method: POST + uri: https://search37e51576.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"1000","status":true,"errorMessage":null,"statusCode":201},{"key":"4","status":true,"errorMessage":null,"statusCode":200}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '196' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:21:16 GMT + elapsed-time: '114' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 8c1389c8-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search37e51576.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 69FBF7A0FEBE9D7FEBC42032455EEB51 + method: GET + uri: https://search37e51576.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF11" + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '127' + content-type: text/plain + date: Thu, 19 Mar 2020 00:21:19 GMT + elapsed-time: '3' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 8e0348b8-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search37e51576.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 69FBF7A0FEBE9D7FEBC42032455EEB51 + method: GET + uri: https://search37e51576.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"1000","hotelName":null,"description":null,"descriptionFr":null,"category":null,"tags":[],"parkingIncluded":null,"smokingAllowed":null,"lastRenovationDate":null,"rating":1,"location":null,"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '257' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:21:19 GMT + elapsed-time: '8' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 8e0881f2-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search37e51576.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 69FBF7A0FEBE9D7FEBC42032455EEB51 + method: GET + uri: https://search37e51576.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"4","hotelName":"Express Rooms","description":"Pretty good + hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":2,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '422' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:21:19 GMT + elapsed-time: '6' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 8e110390-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search37e51576.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_suggest.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_suggest.yaml new file mode 100644 index 000000000000..1ec9edccfee6 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_suggest.yaml @@ -0,0 +1,39 @@ +interactions: +- request: + body: '{"search": "mot", "suggesterName": "sg"}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '40' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 227C94211C71BF9A79BD490B4A9BA1D5 + method: POST + uri: https://searchf6640e13.search.windows.net/indexes('drgqefsg')/docs/search.post.suggest?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.text":"Cheapest hotel in town. Infact, a motel.","hotelId":"2"},{"@search.text":"Secret + Point Motel","hotelId":"9"}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '216' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:21:30 GMT + elapsed-time: '82' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 9473f31e-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://searchf6640e13.search.windows.net/indexes('drgqefsg')/docs/search.post.suggest?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_upload_documents_existing.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_upload_documents_existing.yaml new file mode 100644 index 000000000000..d3d164e390b9 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_upload_documents_existing.yaml @@ -0,0 +1,40 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "1000", "rating": 5, "rooms": [], "hotelName": "Azure + Inn", "@search.action": "upload"}, {"hotelId": "3", "rating": 4, "rooms": [], + "hotelName": "Redmond Hotel", "@search.action": "upload"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '214' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 117268E274650997E3026A3675CA6FD0 + method: POST + uri: https://search399b1591.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"1000","status":true,"errorMessage":null,"statusCode":201},{"key":"3","status":true,"errorMessage":null,"statusCode":200}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '196' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:21:42 GMT + elapsed-time: '84' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: 9b8d27b0-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search399b1591.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_upload_documents_new.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_upload_documents_new.yaml new file mode 100644 index 000000000000..532c09c3ec82 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_index_live_async.test_upload_documents_new.yaml @@ -0,0 +1,136 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "1000", "rating": 5, "rooms": [], "hotelName": "Azure + Inn", "@search.action": "upload"}, {"hotelId": "1001", "rating": 4, "rooms": + [], "hotelName": "Redmond Hotel", "@search.action": "upload"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Content-Length: + - '217' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 52BF667B891E6C9E950DAC8FBCEA1522 + method: POST + uri: https://searchd1e61370.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"1000","status":true,"errorMessage":null,"statusCode":201},{"key":"1001","status":true,"errorMessage":null,"statusCode":201}]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '193' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:21:52 GMT + elapsed-time: '29' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: a1e19006-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://searchd1e61370.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 52BF667B891E6C9E950DAC8FBCEA1522 + method: GET + uri: https://searchd1e61370.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF12" + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '127' + content-type: text/plain + date: Thu, 19 Mar 2020 00:21:55 GMT + elapsed-time: '44' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: a3c1578a-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://searchd1e61370.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 52BF667B891E6C9E950DAC8FBCEA1522 + method: GET + uri: https://searchd1e61370.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"1000","hotelName":"Azure Inn","description":null,"descriptionFr":null,"category":null,"tags":[],"parkingIncluded":null,"smokingAllowed":null,"lastRenovationDate":null,"rating":5,"location":null,"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '267' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:21:55 GMT + elapsed-time: '6' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: a3ce5cbe-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://searchd1e61370.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 52BF667B891E6C9E950DAC8FBCEA1522 + method: GET + uri: https://searchd1e61370.search.windows.net/indexes('drgqefsg')/docs('1001')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"1001","hotelName":"Redmond Hotel","description":null,"descriptionFr":null,"category":null,"tags":[],"parkingIncluded":null,"smokingAllowed":null,"lastRenovationDate":null,"rating":4,"location":null,"address":null,"rooms":[]}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '268' + content-type: application/json; odata.metadata=none + date: Thu, 19 Mar 2020 00:21:55 GMT + elapsed-time: '4' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: a3d5fbea-6977-11ea-bb71-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://searchd1e61370.search.windows.net/indexes('drgqefsg')/docs('1001')?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/recordings/test_service_live_async.test_get_service_statistics.yaml b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_service_live_async.test_get_service_statistics.yaml new file mode 100644 index 000000000000..d53a81cb9827 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/recordings/test_service_live_async.test_get_service_statistics.yaml @@ -0,0 +1,34 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=minimal + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - FBE49E68975C6A1307FBDED68DAAE9CA + method: GET + uri: https://search24f71524.search.windows.net/servicestats?api-version=2019-05-06-Preview + response: + body: + string: '{"@odata.context":"https://search24f71524.search.windows.net/$metadata#Microsoft.Azure.Search.V2019_05_06_Preview.ServiceStatistics","counters":{"documentCount":{"usage":0,"quota":null},"indexesCount":{"usage":0,"quota":3},"indexersCount":{"usage":0,"quota":3},"dataSourcesCount":{"usage":0,"quota":3},"storageSize":{"usage":0,"quota":52428800},"synonymMaps":{"usage":0,"quota":3},"skillsetCount":{"usage":0,"quota":3}},"limits":{"maxFieldsPerIndex":1000,"maxFieldNestingDepthPerIndex":10,"maxComplexCollectionFieldsPerIndex":40,"maxComplexObjectsInCollectionsPerDocument":3000}}' + headers: + cache-control: no-cache + content-encoding: gzip + content-length: '430' + content-type: application/json; odata.metadata=minimal + date: Thu, 19 Mar 2020 19:51:01 GMT + elapsed-time: '49' + expires: '-1' + odata-version: '4.0' + pragma: no-cache + preference-applied: odata.include-annotations="*" + request-id: f4ecc81c-6a1a-11ea-8e1b-8c8590507855 + strict-transport-security: max-age=15724800; includeSubDomains + vary: Accept-Encoding + status: + code: 200 + message: OK + url: https://search24f71524.search.windows.net/servicestats?api-version=2019-05-06-Preview +version: 1 diff --git a/sdk/search/azure-search-documents/tests/async_tests/test_index_live_async.py b/sdk/search/azure-search-documents/tests/async_tests/test_index_live_async.py new file mode 100644 index 000000000000..597d3d24a456 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/test_index_live_async.py @@ -0,0 +1,415 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import asyncio +import functools +import json +from os.path import dirname, join, realpath +import time + +import pytest + +from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer + +from search_service_preparer import SearchServicePreparer + +from azure_devtools.scenario_tests.utilities import trim_kwargs_from_test_function + +CWD = dirname(realpath(__file__)) + +SCHEMA = open(join(CWD, "..", "hotel_schema.json")).read() +BATCH = json.load(open(join(CWD, "..", "hotel_small.json"))) + +from azure.core.exceptions import HttpResponseError +from azure.search.documents import ( + AutocompleteQuery, + SearchApiKeyCredential, + SearchQuery, + SuggestQuery, +) +from azure.search.documents.aio import SearchIndexClient + + +def await_prepared_test(test_fn): + """Synchronous wrapper for async test methods. Used to avoid making changes + upstream to AbstractPreparer (which doesn't await the functions it wraps) + """ + + @functools.wraps(test_fn) + def run(test_class_instance, *args, **kwargs): + trim_kwargs_from_test_function(test_fn, kwargs) + loop = asyncio.get_event_loop() + return loop.run_until_complete(test_fn(test_class_instance, **kwargs)) + + return run + + +class SearchIndexClientTestAsync(AzureMgmtTestCase): + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_async_get_document_count( + self, api_key, endpoint, index_name, **kwargs + ): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + async with client: + assert await client.get_document_count() == 10 + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_get_document(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + async with client: + for hotel_id in range(1, 11): + result = await client.get_document(key=str(hotel_id)) + expected = BATCH["value"][hotel_id - 1] + assert result.get("hotelId") == expected.get("hotelId") + assert result.get("hotelName") == expected.get("hotelName") + assert result.get("description") == expected.get("description") + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_get_document_missing(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + async with client: + with pytest.raises(HttpResponseError): + await client.get_document(key="1000") + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_get_search_simple(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + async with client: + results = [] + async for x in await client.search(query="hotel"): + results.append(x) + assert len(results) == 7 + + results = [] + async for x in await client.search(query="motel"): + results.append(x) + assert len(results) == 2 + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_get_search_filter(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + + query = SearchQuery(search_text="WiFi") + query.filter("category eq 'Budget'") + query.select("hotelName", "category", "description") + query.order_by("hotelName desc") + + async with client: + results = [] + async for x in await client.search(query=query): + results.append(x) + assert [x["hotelName"] for x in results] == sorted( + [x["hotelName"] for x in results], reverse=True + ) + expected = { + "category", + "hotelName", + "description", + "@search.score", + "@search.highlights", + } + assert all(set(x) == expected for x in results) + assert all(x["category"] == "Budget" for x in results) + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_get_search_counts(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + + query = SearchQuery(search_text="hotel") + results = await client.search(query=query) + assert await results.get_count() is None + + query = SearchQuery(search_text="hotel", include_total_result_count=True) + results = await client.search(query=query) + assert await results.get_count() == 7 + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_get_search_coverage(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + + query = SearchQuery(search_text="hotel") + results = await client.search(query=query) + assert await results.get_coverage() is None + + query = SearchQuery(search_text="hotel", minimum_coverage=50.0) + results = await client.search(query=query) + cov = await results.get_coverage() + assert isinstance(cov, float) + assert cov >= 50.0 + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_get_search_facets_none( + self, api_key, endpoint, index_name, **kwargs + ): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + + query = SearchQuery(search_text="WiFi") + query.select("hotelName", "category", "description") + + async with client: + results = await client.search(query=query) + assert await results.get_facets() is None + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_get_search_facets_result( + self, api_key, endpoint, index_name, **kwargs + ): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + + query = SearchQuery(search_text="WiFi", facets=["category"]) + query.select("hotelName", "category", "description") + + async with client: + results = await client.search(query=query) + assert await results.get_facets() == { + "category": [ + {"value": "Budget", "count": 4}, + {"value": "Luxury", "count": 1}, + ] + } + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_autocomplete(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + async with client: + query = AutocompleteQuery(search_text="mot", suggester_name="sg") + results = await client.autocomplete(query=query) + assert results == [{"text": "motel", "query_plus_text": "motel"}] + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_suggest(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + async with client: + query = SuggestQuery(search_text="mot", suggester_name="sg") + results = await client.suggest(query=query) + assert results == [ + {"hotelId": "2", "text": "Cheapest hotel in town. Infact, a motel."}, + {"hotelId": "9", "text": "Secret Point Motel"}, + ] + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_upload_documents_new(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + DOCUMENTS = [ + {"hotelId": "1000", "rating": 5, "rooms": [], "hotelName": "Azure Inn"}, + {"hotelId": "1001", "rating": 4, "rooms": [], "hotelName": "Redmond Hotel"}, + ] + + async with client: + results = await client.upload_documents(DOCUMENTS) + assert len(results) == 2 + assert set(x.status_code for x in results) == {201} + + # There can be some lag before a document is searchable + time.sleep(3) + + assert await client.get_document_count() == 12 + for doc in DOCUMENTS: + result = await client.get_document(key=doc["hotelId"]) + assert result["hotelId"] == doc["hotelId"] + assert result["hotelName"] == doc["hotelName"] + assert result["rating"] == doc["rating"] + assert result["rooms"] == doc["rooms"] + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_upload_documents_existing( + self, api_key, endpoint, index_name, **kwargs + ): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + DOCUMENTS = [ + {"hotelId": "1000", "rating": 5, "rooms": [], "hotelName": "Azure Inn"}, + {"hotelId": "3", "rating": 4, "rooms": [], "hotelName": "Redmond Hotel"}, + ] + async with client: + results = await client.upload_documents(DOCUMENTS) + assert len(results) == 2 + assert set(x.status_code for x in results) == {200, 201} + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_delete_documents_existing( + self, api_key, endpoint, index_name, **kwargs + ): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + async with client: + results = await client.delete_documents( + [{"hotelId": "3"}, {"hotelId": "4"}] + ) + assert len(results) == 2 + assert set(x.status_code for x in results) == {200} + + # There can be some lag before a document is searchable + time.sleep(3) + + assert await client.get_document_count() == 8 + + with pytest.raises(HttpResponseError): + await client.get_document(key="3") + + with pytest.raises(HttpResponseError): + await client.get_document(key="4") + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_delete_documents_missing( + self, api_key, endpoint, index_name, **kwargs + ): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + async with client: + results = await client.delete_documents( + [{"hotelId": "1000"}, {"hotelId": "4"}] + ) + assert len(results) == 2 + assert set(x.status_code for x in results) == {200} + + # There can be some lag before a document is searchable + time.sleep(3) + + assert await client.get_document_count() == 9 + + with pytest.raises(HttpResponseError): + await client.get_document(key="1000") + + with pytest.raises(HttpResponseError): + await client.get_document(key="4") + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_merge_documents_existing( + self, api_key, endpoint, index_name, **kwargs + ): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + async with client: + results = await client.merge_documents( + [{"hotelId": "3", "rating": 1}, {"hotelId": "4", "rating": 2}] + ) + assert len(results) == 2 + assert set(x.status_code for x in results) == {200} + + # There can be some lag before a document is searchable + time.sleep(3) + + assert await client.get_document_count() == 10 + + result = await client.get_document(key="3") + assert result["rating"] == 1 + + result = await client.get_document(key="4") + assert result["rating"] == 2 + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_merge_documents_missing( + self, api_key, endpoint, index_name, **kwargs + ): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + async with client: + results = await client.merge_documents( + [{"hotelId": "1000", "rating": 1}, {"hotelId": "4", "rating": 2}] + ) + assert len(results) == 2 + assert set(x.status_code for x in results) == {200, 404} + + # There can be some lag before a document is searchable + time.sleep(3) + + assert await client.get_document_count() == 10 + + with pytest.raises(HttpResponseError): + await client.get_document(key="1000") + + result = await client.get_document(key="4") + assert result["rating"] == 2 + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + @await_prepared_test + async def test_merge_or_upload_documents( + self, api_key, endpoint, index_name, **kwargs + ): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + async with client: + results = await client.merge_or_upload_documents( + [{"hotelId": "1000", "rating": 1}, {"hotelId": "4", "rating": 2}] + ) + assert len(results) == 2 + assert set(x.status_code for x in results) == {200, 201} + + # There can be some lag before a document is searchable + time.sleep(3) + + assert await client.get_document_count() == 11 + + result = await client.get_document(key="1000") + assert result["rating"] == 1 + + result = await client.get_document(key="4") + assert result["rating"] == 2 diff --git a/sdk/search/azure-search-documents/tests/async_tests/test_service_live_async.py b/sdk/search/azure-search-documents/tests/async_tests/test_service_live_async.py new file mode 100644 index 000000000000..828887328fcb --- /dev/null +++ b/sdk/search/azure-search-documents/tests/async_tests/test_service_live_async.py @@ -0,0 +1,47 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import asyncio +import functools +import json +from os.path import dirname, join, realpath +import time + +import pytest + +from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer + +from search_service_preparer import SearchServicePreparer + +from azure_devtools.scenario_tests.utilities import trim_kwargs_from_test_function + +from azure.core.exceptions import HttpResponseError +from azure.search.documents import SearchApiKeyCredential +from azure.search.documents.aio import SearchServiceClient + + +def await_prepared_test(test_fn): + """Synchronous wrapper for async test methods. Used to avoid making changes + upstream to AbstractPreparer (which doesn't await the functions it wraps) + """ + + @functools.wraps(test_fn) + def run(test_class_instance, *args, **kwargs): + trim_kwargs_from_test_function(test_fn, kwargs) + loop = asyncio.get_event_loop() + return loop.run_until_complete(test_fn(test_class_instance, **kwargs)) + + return run + + +class SearchIndexClientTest(AzureMgmtTestCase): + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer() + @await_prepared_test + async def test_get_service_statistics(self, api_key, endpoint, **kwargs): + client = SearchServiceClient(endpoint, SearchApiKeyCredential(api_key)) + result = await client.get_service_statistics() + assert isinstance(result, dict) + assert set(result.keys()) == {"counters", "limits"} diff --git a/sdk/search/azure-search-documents/tests/conftest.py b/sdk/search/azure-search-documents/tests/conftest.py new file mode 100644 index 000000000000..d129d1baf24a --- /dev/null +++ b/sdk/search/azure-search-documents/tests/conftest.py @@ -0,0 +1,14 @@ +# ------------------------------------------------------------------------ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# ------------------------------------------------------------------------- + +import sys + +import pytest + +# Ignore async tests for Python < 3.5 +collect_ignore = [] +if sys.version_info < (3, 5): + collect_ignore.append("async_tests") diff --git a/sdk/search/azure-search-documents/tests/consts.py b/sdk/search/azure-search-documents/tests/consts.py new file mode 100644 index 000000000000..2aad214b3224 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/consts.py @@ -0,0 +1,9 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ----------------------------------- + +TEST_SERVICE_NAME = "test-service-name" +SERVICE_URL = "https://{}.search.windows.net/indexes?api-version=2019-05-06".format( + TEST_SERVICE_NAME +) diff --git a/sdk/search/azure-search-documents/tests/hotel_schema.json b/sdk/search/azure-search-documents/tests/hotel_schema.json new file mode 100644 index 000000000000..606379345d48 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/hotel_schema.json @@ -0,0 +1,288 @@ +{ + "name": "drgqefsg", + "fields": [ + { + "name": "hotelId", + "type": "Edm.String", + "key": true, + "retrievable": true, + "searchable": false, + "filterable": true, + "sortable": true, + "facetable": true + }, + { + "name": "hotelName", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": true, + "sortable": true, + "facetable": false + }, + { + "name": "description", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": false, + "sortable": false, + "facetable": false, + "analyzer": "en.lucene" + }, + { + "name": "descriptionFr", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": false, + "sortable": false, + "facetable": false, + "analyzer": "fr.lucene" + }, + { + "name": "category", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": true, + "sortable": true, + "facetable": true + }, + { + "name": "tags", + "type": "Collection(Edm.String)", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": true, + "sortable": false, + "facetable": true + }, + { + "name": "parkingIncluded", + "type": "Edm.Boolean", + "key": false, + "retrievable": true, + "searchable": false, + "filterable": true, + "sortable": true, + "facetable": true + }, + { + "name": "smokingAllowed", + "type": "Edm.Boolean", + "key": false, + "retrievable": true, + "searchable": false, + "filterable": true, + "sortable": true, + "facetable": true + }, + { + "name": "lastRenovationDate", + "type": "Edm.DateTimeOffset", + "key": false, + "retrievable": true, + "searchable": false, + "filterable": true, + "sortable": true, + "facetable": true + }, + { + "name": "rating", + "type": "Edm.Int32", + "key": false, + "retrievable": true, + "searchable": false, + "filterable": true, + "sortable": true, + "facetable": true + }, + { + "name": "location", + "type": "Edm.GeographyPoint", + "key": false, + "retrievable": true, + "searchable": false, + "filterable": true, + "sortable": true, + "facetable": false + }, + { + "name": "address", + "type": "Edm.ComplexType", + "fields": [ + { + "name": "streetAddress", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": false, + "sortable": false, + "facetable": false + }, + { + "name": "city", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": true, + "sortable": true, + "facetable": true + }, + { + "name": "stateProvince", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": true, + "sortable": true, + "facetable": true + }, + { + "name": "country", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": true, + "sortable": true, + "facetable": true + }, + { + "name": "postalCode", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": true, + "sortable": true, + "facetable": true + } + ] + }, + { + "name": "rooms", + "type": "Collection(Edm.ComplexType)", + "fields": [ + { + "name": "description", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": false, + "sortable": false, + "facetable": false, + "analyzer": "en.lucene" + }, + { + "name": "descriptionFr", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": false, + "sortable": false, + "facetable": false, + "analyzer": "fr.lucene" + }, + { + "name": "type", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": true, + "sortable": false, + "facetable": true + }, + { + "name": "baseRate", + "type": "Edm.Double", + "key": false, + "retrievable": true, + "searchable": false, + "filterable": true, + "sortable": false, + "facetable": true + }, + { + "name": "bedOptions", + "type": "Edm.String", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": true, + "sortable": false, + "facetable": true + }, + { + "name": "sleepsCount", + "type": "Edm.Int32", + "key": false, + "retrievable": true, + "searchable": false, + "filterable": true, + "sortable": false, + "facetable": true + }, + { + "name": "smokingAllowed", + "type": "Edm.Boolean", + "key": false, + "retrievable": true, + "searchable": false, + "filterable": true, + "sortable": false, + "facetable": true + }, + { + "name": "tags", + "type": "Collection(Edm.String)", + "key": false, + "retrievable": true, + "searchable": true, + "filterable": true, + "sortable": false, + "facetable": true + } + ] + } + ], + "scoringProfiles": [ + { + "name": "nearest", + "functions": [ + { + "type": "distance", + "distance": { + "referencePointParameter": "myloc", + "boostingDistance": 100.0 + }, + "fieldName": "location", + "boost": 2.0 + } + ], + "functionAggregation": "sum" + } + ], + "suggesters": [ + { + "name": "sg", + "sourceFields": [ + "description", + "hotelName" + ], + "searchMode": "analyzingInfixMatching" + } + ] +} \ No newline at end of file diff --git a/sdk/search/azure-search-documents/tests/hotel_small.json b/sdk/search/azure-search-documents/tests/hotel_small.json new file mode 100644 index 000000000000..6ea1027a61e3 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/hotel_small.json @@ -0,0 +1,254 @@ +{ + "value": [ + { + "@search.action": "upload", + "hotelId": "1", + "hotelName": "Fancy Stay", + "description": "Best hotel in town if you like luxury hotels. They have an amazing infinity pool, a spa, and a really helpful concierge. The location is perfect -- right downtown, close to all the tourist attractions. We highly recommend this hotel.", + "descriptionFr": "Meilleur hôtel en ville si vous aimez les hôtels de luxe. Ils ont une magnifique piscine à débordement, un spa et un concierge très utile. L'emplacement est parfait – en plein centre, à proximité de toutes les attractions touristiques. Nous recommandons fortement cet hôtel.", + "category": "Luxury", + "tags": [ + "pool", + "view", + "wifi", + "concierge" + ], + "parkingIncluded": false, + "smokingAllowed": false, + "lastRenovationDate": "2010-06-27T00:00:00+00:00", + "rating": 5, + "location": { + "type": "Point", + "coordinates": [ + -122.131577, + 47.678581 + ] + } + }, + { + "@search.action": "upload", + "hotelId": "2", + "hotelName": "Roach Motel", + "description": "Cheapest hotel in town. Infact, a motel.", + "descriptionFr": "Hôtel le moins cher en ville. Infact, un motel.", + "category": "Budget", + "tags": [ + "motel", + "budget" + ], + "parkingIncluded": true, + "smokingAllowed": true, + "lastRenovationDate": "1982-04-28T00:00:00+00:00", + "rating": 1, + "location": { + "type": "Point", + "coordinates": [ + -122.131577, + 49.678581 + ] + } + }, + { + "@search.action": "upload", + "hotelId": "3", + "hotelName": "EconoStay", + "description": "Very popular hotel in town", + "descriptionFr": "Hôtel le plus populaire en ville", + "category": "Budget", + "tags": [ + "wifi", + "budget" + ], + "parkingIncluded": true, + "smokingAllowed": false, + "lastRenovationDate": "1995-07-01T00:00:00+00:00", + "rating": 4, + "location": { + "type": "Point", + "coordinates": [ + -122.131577, + 46.678581 + ] + } + }, + { + "@search.action": "upload", + "hotelId": "4", + "hotelName": "Express Rooms", + "description": "Pretty good hotel", + "descriptionFr": "Assez bon hôtel", + "category": "Budget", + "tags": [ + "wifi", + "budget" + ], + "parkingIncluded": true, + "smokingAllowed": false, + "lastRenovationDate": "1995-07-01T00:00:00+00:00", + "rating": 4, + "location": { + "type": "Point", + "coordinates": [ + -122.131577, + 48.678581 + ] + } + }, + { + "@search.action": "upload", + "hotelId": "5", + "hotelName": "Comfy Place", + "description": "Another good hotel", + "descriptionFr": "Un autre bon hôtel", + "category": "Budget", + "tags": [ + "wifi", + "budget" + ], + "parkingIncluded": true, + "smokingAllowed": false, + "lastRenovationDate": "2012-08-12T00:00:00+00:00", + "rating": 4, + "location": { + "type": "Point", + "coordinates": [ + -122.131577, + 48.678581 + ] + } + }, + { + "@search.action": "upload", + "hotelId": "6", + "description": "Surprisingly expensive. Model suites have an ocean-view." + }, + { + "@search.action": "upload", + "hotelId": "7", + "hotelName": "Modern Stay", + "description": "Modern architecture, very polite staff and very clean. Also very affordable.", + "descriptionFr": "Architecture moderne, personnel poli et très propre. Aussi très abordable." + }, + { + "@search.action": "upload", + "hotelId": "8", + "description": "Has some road noise and is next to the very police station. Bathrooms had morel coverings.", + "descriptionFr": "Il y a du bruit de la route et se trouve à côté de la station de police. Les salles de bain avaient des revêtements de morilles." + }, + { + "@search.action": "upload", + "hotelId": "9", + "hotelName": "Secret Point Motel", + "description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.", + "descriptionFr": "L'hôtel est idéalement situé sur la principale artère commerciale de la ville en plein cœur de New York. A quelques minutes se trouve la place du temps et le centre historique de la ville, ainsi que d'autres lieux d'intérêt qui font de New York l'une des villes les plus attractives et cosmopolites de l'Amérique.", + "category": "Boutique", + "tags": [ + "pool", + "air conditioning", + "concierge" + ], + "parkingIncluded": false, + "smokingAllowed": true, + "lastRenovationDate": "1970-01-18T00:00:00-05:00", + "rating": 4, + "location": { + "type": "Point", + "coordinates": [ + -73.975403, + 40.760586 + ] + }, + "address": { + "streetAddress": "677 5th Ave", + "city": "New York", + "stateProvince": "NY", + "country": "USA", + "postalCode": "10022" + }, + "rooms": [ + { + "description": "Budget Room, 1 Queen Bed (Cityside)", + "descriptionFr": "Chambre Économique, 1 grand lit (côté ville)", + "type": "Budget Room", + "baseRate": 9.69, + "bedOptions": "1 Queen Bed", + "sleepsCount": 2, + "smokingAllowed": true, + "tags": [ + "vcr/dvd" + ] + }, + { + "description": "Budget Room, 1 King Bed (Mountain View)", + "descriptionFr": "Chambre Économique, 1 très grand lit (Mountain View)", + "type": "Budget Room", + "baseRate": 8.09, + "bedOptions": "1 King Bed", + "sleepsCount": 2, + "smokingAllowed": true, + "tags": [ + "vcr/dvd", + "jacuzzi tub" + ] + } + ] + }, + { + "@search.action": "upload", + "hotelId": "10", + "hotelName": "Countryside Hotel", + "description": "Save up to 50% off traditional hotels. Free WiFi, great location near downtown, full kitchen, washer & dryer, 24/7 support, bowling alley, fitness center and more.", + "descriptionFr": "Économisez jusqu'à 50% sur les hôtels traditionnels. WiFi gratuit, très bien situé près du centre-ville, cuisine complète, laveuse & sécheuse, support 24/7, bowling, centre de fitness et plus encore.", + "category": "Budget", + "tags": [ + "24-hour front desk service", + "coffee in lobby", + "restaurant" + ], + "parkingIncluded": false, + "smokingAllowed": true, + "lastRenovationDate": "1999-09-06T00:00:00+00:00", + "rating": 3, + "location": { + "type": "Point", + "coordinates": [ + -78.940483, + 35.90416 + ] + }, + "address": { + "streetAddress": "6910 Fayetteville Rd", + "city": "Durham", + "stateProvince": "NC", + "country": "USA", + "postalCode": "27713" + }, + "rooms": [ + { + "description": "Suite, 1 King Bed (Amenities)", + "descriptionFr": "Suite, 1 très grand lit (Services)", + "type": "Suite", + "baseRate": 2.44, + "bedOptions": "1 King Bed", + "sleepsCount": 2, + "smokingAllowed": true, + "tags": [ + "coffee maker" + ] + }, + { + "description": "Budget Room, 1 Queen Bed (Amenities)", + "descriptionFr": "Chambre Économique, 1 grand lit (Services)", + "type": "Budget Room", + "baseRate": 7.69, + "bedOptions": "1 Queen Bed", + "sleepsCount": 2, + "smokingAllowed": false, + "tags": [ + "coffee maker" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_autocomplete.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_autocomplete.yaml new file mode 100644 index 000000000000..05577a274b9d --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_autocomplete.yaml @@ -0,0 +1,52 @@ +interactions: +- request: + body: '{"search": "mot", "suggesterName": "sg"}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '40' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 530914336379F37DE9758A354DE4A78B + method: POST + uri: https://searche7b20da6.search.windows.net/indexes('drgqefsg')/docs/search.post.autocomplete?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"text":"motel","queryPlusText":"motel"}]}' + headers: + cache-control: + - no-cache + content-length: + - '52' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:05 GMT + elapsed-time: + - '162' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - 8b0bcdb6-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_delete_documents_existing.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_delete_documents_existing.yaml new file mode 100644 index 000000000000..c500e772b0a4 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_delete_documents_existing.yaml @@ -0,0 +1,175 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "3", "@search.action": "delete"}, {"hotelId": "4", + "@search.action": "delete"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 2F50A464F96DEE54FA95B5848C35E3BD + method: POST + uri: https://searchbc401302.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"3","status":true,"errorMessage":null,"statusCode":200},{"key":"4","status":true,"errorMessage":null,"statusCode":200}]}' + headers: + cache-control: + - no-cache + content-length: + - '137' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:14 GMT + elapsed-time: + - '83' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - 915aa9bc-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 2F50A464F96DEE54FA95B5848C35E3BD + method: GET + uri: https://searchbc401302.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF8" + headers: + cache-control: + - no-cache + content-length: + - '4' + content-type: + - text/plain + date: + - Thu, 19 Mar 2020 00:14:18 GMT + elapsed-time: + - '22' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - 934ae89a-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 2F50A464F96DEE54FA95B5848C35E3BD + method: GET + uri: https://searchbc401302.search.windows.net/indexes('drgqefsg')/docs('3')?api-version=2019-05-06-Preview + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Thu, 19 Mar 2020 00:14:18 GMT + elapsed-time: + - '17' + expires: + - '-1' + pragma: + - no-cache + request-id: + - 935704fe-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + status: + code: 404 + message: Not Found +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 2F50A464F96DEE54FA95B5848C35E3BD + method: GET + uri: https://searchbc401302.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Thu, 19 Mar 2020 00:14:18 GMT + elapsed-time: + - '4' + expires: + - '-1' + pragma: + - no-cache + request-id: + - 93605090-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + status: + code: 404 + message: Not Found +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_delete_documents_missing.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_delete_documents_missing.yaml new file mode 100644 index 000000000000..345f9b6d835d --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_delete_documents_missing.yaml @@ -0,0 +1,175 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "1000", "@search.action": "delete"}, {"hotelId": + "4", "@search.action": "delete"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '106' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - C59C228A99A4C7BBEDD6ABCAF5AC4BCB + method: POST + uri: https://searcha9301291.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"1000","status":true,"errorMessage":null,"statusCode":200},{"key":"4","status":true,"errorMessage":null,"statusCode":200}]}' + headers: + cache-control: + - no-cache + content-length: + - '140' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:29 GMT + elapsed-time: + - '83' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - 9992daf0-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - C59C228A99A4C7BBEDD6ABCAF5AC4BCB + method: GET + uri: https://searcha9301291.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF9" + headers: + cache-control: + - no-cache + content-length: + - '4' + content-type: + - text/plain + date: + - Thu, 19 Mar 2020 00:14:32 GMT + elapsed-time: + - '5' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - 9b842f44-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - C59C228A99A4C7BBEDD6ABCAF5AC4BCB + method: GET + uri: https://searcha9301291.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Thu, 19 Mar 2020 00:14:32 GMT + elapsed-time: + - '5' + expires: + - '-1' + pragma: + - no-cache + request-id: + - 9b8ba9f4-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + status: + code: 404 + message: Not Found +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - C59C228A99A4C7BBEDD6ABCAF5AC4BCB + method: GET + uri: https://searcha9301291.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Thu, 19 Mar 2020 00:14:32 GMT + elapsed-time: + - '3' + expires: + - '-1' + pragma: + - no-cache + request-id: + - 9b930bea-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + status: + code: 404 + message: Not Found +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_document.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_document.yaml new file mode 100644 index 000000000000..6600dfad9c7a --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_document.yaml @@ -0,0 +1,510 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - AAECA0741D6484923CBF6DC0881DB76C + method: GET + uri: https://searche6a60d92.search.windows.net/indexes('drgqefsg')/docs('1')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"1","hotelName":"Fancy Stay","description":"Best hotel in + town if you like luxury hotels. They have an amazing infinity pool, a spa, + and a really helpful concierge. The location is perfect -- right downtown, + close to all the tourist attractions. We highly recommend this hotel.","descriptionFr":"Meilleur + h\u00f4tel en ville si vous aimez les h\u00f4tels de luxe. Ils ont une magnifique + piscine \u00e0 d\u00e9bordement, un spa et un concierge tr\u00e8s utile. L''emplacement + est parfait \u2013 en plein centre, \u00e0 proximit\u00e9 de toutes les attractions + touristiques. Nous recommandons fortement cet h\u00f4tel.","category":"Luxury","tags":["pool","view","wifi","concierge"],"parkingIncluded":false,"smokingAllowed":false,"lastRenovationDate":"2010-06-27T00:00:00Z","rating":5,"location":{"type":"Point","coordinates":[-122.131577,47.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '940' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:44 GMT + elapsed-time: + - '95' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - a25385b8-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - AAECA0741D6484923CBF6DC0881DB76C + method: GET + uri: https://searche6a60d92.search.windows.net/indexes('drgqefsg')/docs('2')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"2","hotelName":"Roach Motel","description":"Cheapest hotel + in town. Infact, a motel.","descriptionFr":"H\u00f4tel le moins cher en ville. + Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '463' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:44 GMT + elapsed-time: + - '4' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - a27c8ada-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - AAECA0741D6484923CBF6DC0881DB76C + method: GET + uri: https://searche6a60d92.search.windows.net/indexes('drgqefsg')/docs('3')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"3","hotelName":"EconoStay","description":"Very popular + hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '432' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:44 GMT + elapsed-time: + - '7' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - a283d678-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - AAECA0741D6484923CBF6DC0881DB76C + method: GET + uri: https://searche6a60d92.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"4","hotelName":"Express Rooms","description":"Pretty good + hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '410' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:44 GMT + elapsed-time: + - '6' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - a28c143c-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - AAECA0741D6484923CBF6DC0881DB76C + method: GET + uri: https://searche6a60d92.search.windows.net/indexes('drgqefsg')/docs('5')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"5","hotelName":"Comfy Place","description":"Another good + hotel","descriptionFr":"Un autre bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"2012-08-12T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '412' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:44 GMT + elapsed-time: + - '3' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - a293c448-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - AAECA0741D6484923CBF6DC0881DB76C + method: GET + uri: https://searche6a60d92.search.windows.net/indexes('drgqefsg')/docs('6')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"6","hotelName":null,"description":"Surprisingly expensive. + Model suites have an ocean-view.","descriptionFr":null,"category":null,"tags":[],"parkingIncluded":null,"smokingAllowed":null,"lastRenovationDate":null,"rating":null,"location":null,"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '279' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:44 GMT + elapsed-time: + - '7' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - a29af8d0-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - AAECA0741D6484923CBF6DC0881DB76C + method: GET + uri: https://searche6a60d92.search.windows.net/indexes('drgqefsg')/docs('7')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"7","hotelName":"Modern Stay","description":"Modern architecture, + very polite staff and very clean. Also very affordable.","descriptionFr":"Architecture + moderne, personnel poli et tr\u00e8s propre. Aussi tr\u00e8s abordable.","category":null,"tags":[],"parkingIncluded":null,"smokingAllowed":null,"lastRenovationDate":null,"rating":null,"location":null,"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '390' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:44 GMT + elapsed-time: + - '4' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - a2a2f83c-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - AAECA0741D6484923CBF6DC0881DB76C + method: GET + uri: https://searche6a60d92.search.windows.net/indexes('drgqefsg')/docs('8')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"8","hotelName":null,"description":"Has some road noise + and is next to the very police station. Bathrooms had morel coverings.","descriptionFr":"Il + y a du bruit de la route et se trouve \u00e0 c\u00f4t\u00e9 de la station + de police. Les salles de bain avaient des rev\u00eatements de morilles.","category":null,"tags":[],"parkingIncluded":null,"smokingAllowed":null,"lastRenovationDate":null,"rating":null,"location":null,"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '459' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:44 GMT + elapsed-time: + - '10' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - a2aa49b6-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - AAECA0741D6484923CBF6DC0881DB76C + method: GET + uri: https://searche6a60d92.search.windows.net/indexes('drgqefsg')/docs('9')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"9","hotelName":"Secret Point Motel","description":"The + hotel is ideally located on the main commercial artery of the city in the + heart of New York. A few minutes away is Time''s Square and the historic centre + of the city, as well as other places of interest that make New York one of + America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}' + headers: + cache-control: + - no-cache + content-length: + - '1664' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:44 GMT + elapsed-time: + - '10' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - a2b320d6-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - AAECA0741D6484923CBF6DC0881DB76C + method: GET + uri: https://searche6a60d92.search.windows.net/indexes('drgqefsg')/docs('10')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"10","hotelName":"Countryside Hotel","description":"Save + up to 50% off traditional hotels. Free WiFi, great location near downtown, + full kitchen, washer & dryer, 24/7 support, bowling alley, fitness center + and more.","descriptionFr":"\u00c9conomisez jusqu''\u00e0 50% sur les h\u00f4tels + traditionnels. WiFi gratuit, tr\u00e8s bien situ\u00e9 pr\u00e8s du centre-ville, + cuisine compl\u00e8te, laveuse & s\u00e9cheuse, support 24/7, bowling, centre + de fitness et plus encore.","category":"Budget","tags":["24-hour front desk + service","coffee in lobby","restaurant"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1999-09-06T00:00:00Z","rating":3,"location":{"type":"Point","coordinates":[-78.940483,35.90416],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"6910 + Fayetteville Rd","city":"Durham","stateProvince":"NC","country":"USA","postalCode":"27713"},"rooms":[{"description":"Suite, + 1 King Bed (Amenities)","descriptionFr":"Suite, 1 tr\u00e8s grand lit (Services)","type":"Suite","baseRate":2.44,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["coffee maker"]},{"description":"Budget + Room, 1 Queen Bed (Amenities)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (Services)","type":"Budget Room","baseRate":7.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":false,"tags":["coffee maker"]}]}' + headers: + cache-control: + - no-cache + content-length: + - '1406' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:14:44 GMT + elapsed-time: + - '5' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - a2bb5d50-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_document_count.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_document_count.yaml new file mode 100644 index 000000000000..ee2b0c1d6d66 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_document_count.yaml @@ -0,0 +1,48 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 3D98B9FE572C1AE1E540CEF72B72AF1E + method: GET + uri: https://search40b5101a.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF10" + headers: + cache-control: + - no-cache + content-length: + - '5' + content-type: + - text/plain + date: + - Thu, 19 Mar 2020 00:14:55 GMT + elapsed-time: + - '87' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - a8eb7e76-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_document_missing.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_document_missing.yaml new file mode 100644 index 000000000000..638963f9955a --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_document_missing.yaml @@ -0,0 +1,40 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - D594DD68270C6C893C8671BDAE97D90B + method: GET + uri: https://search623710eb.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Thu, 19 Mar 2020 00:15:05 GMT + elapsed-time: + - '58' + expires: + - '-1' + pragma: + - no-cache + request-id: + - af9eccd2-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + status: + code: 404 + message: Not Found +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_counts.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_counts.yaml new file mode 100644 index 000000000000..82cc58ef9c72 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_counts.yaml @@ -0,0 +1,188 @@ +interactions: +- request: + body: '{"search": "hotel"}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '19' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 35D12307D2FB9CEECF686F4B750F3824 + method: POST + uri: https://search30390fa4.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.score":0.48248714,"hotelId":"10","hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","descriptionFr":"\u00c9conomisez jusqu''\u00e0 + 50% sur les h\u00f4tels traditionnels. WiFi gratuit, tr\u00e8s bien situ\u00e9 + pr\u00e8s du centre-ville, cuisine compl\u00e8te, laveuse & s\u00e9cheuse, + support 24/7, bowling, centre de fitness et plus encore.","category":"Budget","tags":["24-hour + front desk service","coffee in lobby","restaurant"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1999-09-06T00:00:00Z","rating":3,"location":{"type":"Point","coordinates":[-78.940483,35.90416],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"6910 + Fayetteville Rd","city":"Durham","stateProvince":"NC","country":"USA","postalCode":"27713"},"rooms":[{"description":"Suite, + 1 King Bed (Amenities)","descriptionFr":"Suite, 1 tr\u00e8s grand lit (Services)","type":"Suite","baseRate":2.44,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["coffee maker"]},{"description":"Budget + Room, 1 Queen Bed (Amenities)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (Services)","type":"Budget Room","baseRate":7.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":false,"tags":["coffee maker"]}]},{"@search.score":0.18522348,"hotelId":"3","hotelName":"EconoStay","description":"Very + popular hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"4","hotelName":"Express + Rooms","description":"Pretty good hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"5","hotelName":"Comfy + Place","description":"Another good hotel","descriptionFr":"Un autre bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"2012-08-12T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.15049407,"hotelId":"2","hotelName":"Roach + Motel","description":"Cheapest hotel in town. Infact, a motel.","descriptionFr":"H\u00f4tel + le moins cher en ville. Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.12030617,"hotelId":"1","hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","descriptionFr":"Meilleur h\u00f4tel en ville si vous + aimez les h\u00f4tels de luxe. Ils ont une magnifique piscine \u00e0 d\u00e9bordement, + un spa et un concierge tr\u00e8s utile. L''emplacement est parfait \u2013 + en plein centre, \u00e0 proximit\u00e9 de toutes les attractions touristiques. + Nous recommandons fortement cet h\u00f4tel.","category":"Luxury","tags":["pool","view","wifi","concierge"],"parkingIncluded":false,"smokingAllowed":false,"lastRenovationDate":"2010-06-27T00:00:00Z","rating":5,"location":{"type":"Point","coordinates":[-122.131577,47.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.057882335,"hotelId":"9","hotelName":"Secret + Point Motel","description":"The hotel is ideally located on the main commercial + artery of the city in the heart of New York. A few minutes away is Time''s + Square and the historic centre of the city, as well as other places of interest + that make New York one of America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}]}' + headers: + cache-control: + - no-cache + content-length: + - '5935' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:15:17 GMT + elapsed-time: + - '111' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - b5f80b3e-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: '{"count": true, "search": "hotel"}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '34' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 35D12307D2FB9CEECF686F4B750F3824 + method: POST + uri: https://search30390fa4.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"@odata.count":7,"value":[{"@search.score":0.48248714,"hotelId":"10","hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","descriptionFr":"\u00c9conomisez jusqu''\u00e0 + 50% sur les h\u00f4tels traditionnels. WiFi gratuit, tr\u00e8s bien situ\u00e9 + pr\u00e8s du centre-ville, cuisine compl\u00e8te, laveuse & s\u00e9cheuse, + support 24/7, bowling, centre de fitness et plus encore.","category":"Budget","tags":["24-hour + front desk service","coffee in lobby","restaurant"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1999-09-06T00:00:00Z","rating":3,"location":{"type":"Point","coordinates":[-78.940483,35.90416],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"6910 + Fayetteville Rd","city":"Durham","stateProvince":"NC","country":"USA","postalCode":"27713"},"rooms":[{"description":"Suite, + 1 King Bed (Amenities)","descriptionFr":"Suite, 1 tr\u00e8s grand lit (Services)","type":"Suite","baseRate":2.44,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["coffee maker"]},{"description":"Budget + Room, 1 Queen Bed (Amenities)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (Services)","type":"Budget Room","baseRate":7.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":false,"tags":["coffee maker"]}]},{"@search.score":0.18522348,"hotelId":"3","hotelName":"EconoStay","description":"Very + popular hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"4","hotelName":"Express + Rooms","description":"Pretty good hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"5","hotelName":"Comfy + Place","description":"Another good hotel","descriptionFr":"Un autre bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"2012-08-12T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.15049407,"hotelId":"2","hotelName":"Roach + Motel","description":"Cheapest hotel in town. Infact, a motel.","descriptionFr":"H\u00f4tel + le moins cher en ville. Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.12030617,"hotelId":"1","hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","descriptionFr":"Meilleur h\u00f4tel en ville si vous + aimez les h\u00f4tels de luxe. Ils ont une magnifique piscine \u00e0 d\u00e9bordement, + un spa et un concierge tr\u00e8s utile. L''emplacement est parfait \u2013 + en plein centre, \u00e0 proximit\u00e9 de toutes les attractions touristiques. + Nous recommandons fortement cet h\u00f4tel.","category":"Luxury","tags":["pool","view","wifi","concierge"],"parkingIncluded":false,"smokingAllowed":false,"lastRenovationDate":"2010-06-27T00:00:00Z","rating":5,"location":{"type":"Point","coordinates":[-122.131577,47.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.057882335,"hotelId":"9","hotelName":"Secret + Point Motel","description":"The hotel is ideally located on the main commercial + artery of the city in the heart of New York. A few minutes away is Time''s + Square and the historic centre of the city, as well as other places of interest + that make New York one of America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}]}' + headers: + cache-control: + - no-cache + content-length: + - '5952' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:15:17 GMT + elapsed-time: + - '7' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - b6235e42-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_coverage.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_coverage.yaml new file mode 100644 index 000000000000..408caa14cc4c --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_coverage.yaml @@ -0,0 +1,188 @@ +interactions: +- request: + body: '{"search": "hotel"}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '19' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 3D83CCCC79A5C26C4EDB221667E2A473 + method: POST + uri: https://search504f1054.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.score":0.48248714,"hotelId":"10","hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","descriptionFr":"\u00c9conomisez jusqu''\u00e0 + 50% sur les h\u00f4tels traditionnels. WiFi gratuit, tr\u00e8s bien situ\u00e9 + pr\u00e8s du centre-ville, cuisine compl\u00e8te, laveuse & s\u00e9cheuse, + support 24/7, bowling, centre de fitness et plus encore.","category":"Budget","tags":["24-hour + front desk service","coffee in lobby","restaurant"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1999-09-06T00:00:00Z","rating":3,"location":{"type":"Point","coordinates":[-78.940483,35.90416],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"6910 + Fayetteville Rd","city":"Durham","stateProvince":"NC","country":"USA","postalCode":"27713"},"rooms":[{"description":"Suite, + 1 King Bed (Amenities)","descriptionFr":"Suite, 1 tr\u00e8s grand lit (Services)","type":"Suite","baseRate":2.44,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["coffee maker"]},{"description":"Budget + Room, 1 Queen Bed (Amenities)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (Services)","type":"Budget Room","baseRate":7.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":false,"tags":["coffee maker"]}]},{"@search.score":0.18522348,"hotelId":"3","hotelName":"EconoStay","description":"Very + popular hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"4","hotelName":"Express + Rooms","description":"Pretty good hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"5","hotelName":"Comfy + Place","description":"Another good hotel","descriptionFr":"Un autre bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"2012-08-12T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.15049407,"hotelId":"2","hotelName":"Roach + Motel","description":"Cheapest hotel in town. Infact, a motel.","descriptionFr":"H\u00f4tel + le moins cher en ville. Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.12030617,"hotelId":"1","hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","descriptionFr":"Meilleur h\u00f4tel en ville si vous + aimez les h\u00f4tels de luxe. Ils ont une magnifique piscine \u00e0 d\u00e9bordement, + un spa et un concierge tr\u00e8s utile. L''emplacement est parfait \u2013 + en plein centre, \u00e0 proximit\u00e9 de toutes les attractions touristiques. + Nous recommandons fortement cet h\u00f4tel.","category":"Luxury","tags":["pool","view","wifi","concierge"],"parkingIncluded":false,"smokingAllowed":false,"lastRenovationDate":"2010-06-27T00:00:00Z","rating":5,"location":{"type":"Point","coordinates":[-122.131577,47.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.057882335,"hotelId":"9","hotelName":"Secret + Point Motel","description":"The hotel is ideally located on the main commercial + artery of the city in the heart of New York. A few minutes away is Time''s + Square and the historic centre of the city, as well as other places of interest + that make New York one of America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}]}' + headers: + cache-control: + - no-cache + content-length: + - '5935' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:15:27 GMT + elapsed-time: + - '75' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - bc2e6fca-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: '{"minimumCoverage": 50.0, "search": "hotel"}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '44' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 3D83CCCC79A5C26C4EDB221667E2A473 + method: POST + uri: https://search504f1054.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"@search.coverage":100.0,"value":[{"@search.score":0.48248714,"hotelId":"10","hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","descriptionFr":"\u00c9conomisez jusqu''\u00e0 + 50% sur les h\u00f4tels traditionnels. WiFi gratuit, tr\u00e8s bien situ\u00e9 + pr\u00e8s du centre-ville, cuisine compl\u00e8te, laveuse & s\u00e9cheuse, + support 24/7, bowling, centre de fitness et plus encore.","category":"Budget","tags":["24-hour + front desk service","coffee in lobby","restaurant"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1999-09-06T00:00:00Z","rating":3,"location":{"type":"Point","coordinates":[-78.940483,35.90416],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"6910 + Fayetteville Rd","city":"Durham","stateProvince":"NC","country":"USA","postalCode":"27713"},"rooms":[{"description":"Suite, + 1 King Bed (Amenities)","descriptionFr":"Suite, 1 tr\u00e8s grand lit (Services)","type":"Suite","baseRate":2.44,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["coffee maker"]},{"description":"Budget + Room, 1 Queen Bed (Amenities)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (Services)","type":"Budget Room","baseRate":7.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":false,"tags":["coffee maker"]}]},{"@search.score":0.18522348,"hotelId":"3","hotelName":"EconoStay","description":"Very + popular hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"4","hotelName":"Express + Rooms","description":"Pretty good hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"5","hotelName":"Comfy + Place","description":"Another good hotel","descriptionFr":"Un autre bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"2012-08-12T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.15049407,"hotelId":"2","hotelName":"Roach + Motel","description":"Cheapest hotel in town. Infact, a motel.","descriptionFr":"H\u00f4tel + le moins cher en ville. Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.12030617,"hotelId":"1","hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","descriptionFr":"Meilleur h\u00f4tel en ville si vous + aimez les h\u00f4tels de luxe. Ils ont une magnifique piscine \u00e0 d\u00e9bordement, + un spa et un concierge tr\u00e8s utile. L''emplacement est parfait \u2013 + en plein centre, \u00e0 proximit\u00e9 de toutes les attractions touristiques. + Nous recommandons fortement cet h\u00f4tel.","category":"Luxury","tags":["pool","view","wifi","concierge"],"parkingIncluded":false,"smokingAllowed":false,"lastRenovationDate":"2010-06-27T00:00:00Z","rating":5,"location":{"type":"Point","coordinates":[-122.131577,47.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.057882335,"hotelId":"9","hotelName":"Secret + Point Motel","description":"The hotel is ideally located on the main commercial + artery of the city in the heart of New York. A few minutes away is Time''s + Square and the historic centre of the city, as well as other places of interest + that make New York one of America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}]}' + headers: + cache-control: + - no-cache + content-length: + - '5960' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:15:27 GMT + elapsed-time: + - '8' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - bc527546-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_facets_none.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_facets_none.yaml new file mode 100644 index 000000000000..7b4247e09581 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_facets_none.yaml @@ -0,0 +1,62 @@ +interactions: +- request: + body: '{"search": "WiFi", "select": "hotelName,category,description"}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '62' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - CF3994F163439E3512CF1A57161E64A8 + method: POST + uri: https://search8339118d.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.score":0.2423066,"hotelName":"Countryside Hotel","description":"Save + up to 50% off traditional hotels. Free WiFi, great location near downtown, + full kitchen, washer & dryer, 24/7 support, bowling alley, fitness center + and more.","category":"Budget"},{"@search.score":0.19169211,"hotelName":"EconoStay","description":"Very + popular hotel in town","category":"Budget"},{"@search.score":0.19169211,"hotelName":"Express + Rooms","description":"Pretty good hotel","category":"Budget"},{"@search.score":0.19169211,"hotelName":"Comfy + Place","description":"Another good hotel","category":"Budget"},{"@search.score":0.15335369,"hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","category":"Luxury"}]}' + headers: + cache-control: + - no-cache + content-length: + - '933' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:15:39 GMT + elapsed-time: + - '102' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - c392f34e-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_facets_result.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_facets_result.yaml new file mode 100644 index 000000000000..07e97be87335 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_facets_result.yaml @@ -0,0 +1,62 @@ +interactions: +- request: + body: '{"facets": ["category"], "search": "WiFi", "select": "hotelName,category,description"}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '86' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 002239569160D027C911CED9D1D5BA76 + method: POST + uri: https://searcha7c9127c.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"@search.facets":{"category":[{"count":4,"value":"Budget"},{"count":1,"value":"Luxury"}]},"value":[{"@search.score":0.2423066,"hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","category":"Budget"},{"@search.score":0.19169211,"hotelName":"EconoStay","description":"Very + popular hotel in town","category":"Budget"},{"@search.score":0.19169211,"hotelName":"Express + Rooms","description":"Pretty good hotel","category":"Budget"},{"@search.score":0.19169211,"hotelName":"Comfy + Place","description":"Another good hotel","category":"Budget"},{"@search.score":0.15335369,"hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","category":"Luxury"}]}' + headers: + cache-control: + - no-cache + content-length: + - '1023' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:15:50 GMT + elapsed-time: + - '109' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - c9af8490-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_filter.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_filter.yaml new file mode 100644 index 000000000000..8775250def5f --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_filter.yaml @@ -0,0 +1,59 @@ +interactions: +- request: + body: '{"filter": "category eq ''Budget''", "orderby": "hotelName desc", "search": + "WiFi", "select": "hotelName,category,description"}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '125' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 1222A85F63DE2232A7363D893716898F + method: POST + uri: https://search2ffc0f8e.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.score":0.19169211,"hotelName":"Express Rooms","description":"Pretty + good hotel","category":"Budget"},{"@search.score":0.19169211,"hotelName":"EconoStay","description":"Very + popular hotel in town","category":"Budget"},{"@search.score":0.2423066,"hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","category":"Budget"},{"@search.score":0.19169211,"hotelName":"Comfy + Place","description":"Another good hotel","category":"Budget"}]}' + headers: + cache-control: + - no-cache + content-length: + - '609' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:16:00 GMT + elapsed-time: + - '93' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - cfd5e300-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_simple.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_simple.yaml new file mode 100644 index 000000000000..427051bb0fba --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_get_search_simple.yaml @@ -0,0 +1,164 @@ +interactions: +- request: + body: '{"search": "hotel"}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '19' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 2E2E569ABA0682E66FD3FE84A5C7A19B + method: POST + uri: https://search30430f92.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.score":0.48248714,"hotelId":"10","hotelName":"Countryside + Hotel","description":"Save up to 50% off traditional hotels. Free WiFi, great + location near downtown, full kitchen, washer & dryer, 24/7 support, bowling + alley, fitness center and more.","descriptionFr":"\u00c9conomisez jusqu''\u00e0 + 50% sur les h\u00f4tels traditionnels. WiFi gratuit, tr\u00e8s bien situ\u00e9 + pr\u00e8s du centre-ville, cuisine compl\u00e8te, laveuse & s\u00e9cheuse, + support 24/7, bowling, centre de fitness et plus encore.","category":"Budget","tags":["24-hour + front desk service","coffee in lobby","restaurant"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1999-09-06T00:00:00Z","rating":3,"location":{"type":"Point","coordinates":[-78.940483,35.90416],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"6910 + Fayetteville Rd","city":"Durham","stateProvince":"NC","country":"USA","postalCode":"27713"},"rooms":[{"description":"Suite, + 1 King Bed (Amenities)","descriptionFr":"Suite, 1 tr\u00e8s grand lit (Services)","type":"Suite","baseRate":2.44,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["coffee maker"]},{"description":"Budget + Room, 1 Queen Bed (Amenities)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (Services)","type":"Budget Room","baseRate":7.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":false,"tags":["coffee maker"]}]},{"@search.score":0.18522348,"hotelId":"3","hotelName":"EconoStay","description":"Very + popular hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"4","hotelName":"Express + Rooms","description":"Pretty good hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.18522348,"hotelId":"5","hotelName":"Comfy + Place","description":"Another good hotel","descriptionFr":"Un autre bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"2012-08-12T00:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.15049407,"hotelId":"2","hotelName":"Roach + Motel","description":"Cheapest hotel in town. Infact, a motel.","descriptionFr":"H\u00f4tel + le moins cher en ville. Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.12030617,"hotelId":"1","hotelName":"Fancy + Stay","description":"Best hotel in town if you like luxury hotels. They have + an amazing infinity pool, a spa, and a really helpful concierge. The location + is perfect -- right downtown, close to all the tourist attractions. We highly + recommend this hotel.","descriptionFr":"Meilleur h\u00f4tel en ville si vous + aimez les h\u00f4tels de luxe. Ils ont une magnifique piscine \u00e0 d\u00e9bordement, + un spa et un concierge tr\u00e8s utile. L''emplacement est parfait \u2013 + en plein centre, \u00e0 proximit\u00e9 de toutes les attractions touristiques. + Nous recommandons fortement cet h\u00f4tel.","category":"Luxury","tags":["pool","view","wifi","concierge"],"parkingIncluded":false,"smokingAllowed":false,"lastRenovationDate":"2010-06-27T00:00:00Z","rating":5,"location":{"type":"Point","coordinates":[-122.131577,47.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.057882335,"hotelId":"9","hotelName":"Secret + Point Motel","description":"The hotel is ideally located on the main commercial + artery of the city in the heart of New York. A few minutes away is Time''s + Square and the historic centre of the city, as well as other places of interest + that make New York one of America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}]}' + headers: + cache-control: + - no-cache + content-length: + - '5935' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:16:12 GMT + elapsed-time: + - '82' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - d6f05db4-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: '{"search": "motel"}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '19' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 2E2E569ABA0682E66FD3FE84A5C7A19B + method: POST + uri: https://search30430f92.search.windows.net/indexes('drgqefsg')/docs/search.post.search?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.score":1.2368374,"hotelId":"2","hotelName":"Roach + Motel","description":"Cheapest hotel in town. Infact, a motel.","descriptionFr":"H\u00f4tel + le moins cher en ville. Infact, un motel.","category":"Budget","tags":["motel","budget"],"parkingIncluded":true,"smokingAllowed":true,"lastRenovationDate":"1982-04-28T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,49.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]},{"@search.score":0.24176063,"hotelId":"9","hotelName":"Secret + Point Motel","description":"The hotel is ideally located on the main commercial + artery of the city in the heart of New York. A few minutes away is Time''s + Square and the historic centre of the city, as well as other places of interest + that make New York one of America''s most attractive and cosmopolitan cities.","descriptionFr":"L''h\u00f4tel + est id\u00e9alement situ\u00e9 sur la principale art\u00e8re commerciale de + la ville en plein c\u0153ur de New York. A quelques minutes se trouve la place + du temps et le centre historique de la ville, ainsi que d''autres lieux d''int\u00e9r\u00eat + qui font de New York l''une des villes les plus attractives et cosmopolites + de l''Am\u00e9rique.","category":"Boutique","tags":["pool","air conditioning","concierge"],"parkingIncluded":false,"smokingAllowed":true,"lastRenovationDate":"1970-01-18T05:00:00Z","rating":4,"location":{"type":"Point","coordinates":[-73.975403,40.760586],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":{"streetAddress":"677 + 5th Ave","city":"New York","stateProvince":"NY","country":"USA","postalCode":"10022"},"rooms":[{"description":"Budget + Room, 1 Queen Bed (Cityside)","descriptionFr":"Chambre \u00c9conomique, 1 + grand lit (c\u00f4t\u00e9 ville)","type":"Budget Room","baseRate":9.69,"bedOptions":"1 + Queen Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd"]},{"description":"Budget + Room, 1 King Bed (Mountain View)","descriptionFr":"Chambre \u00c9conomique, + 1 tr\u00e8s grand lit (Mountain View)","type":"Budget Room","baseRate":8.09,"bedOptions":"1 + King Bed","sleepsCount":2,"smokingAllowed":true,"tags":["vcr/dvd","jacuzzi + tub"]}]}]}' + headers: + cache-control: + - no-cache + content-length: + - '2193' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:16:12 GMT + elapsed-time: + - '6' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - d71648c6-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_merge_documents_existing.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_merge_documents_existing.yaml new file mode 100644 index 000000000000..c53ce6f084ae --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_merge_documents_existing.yaml @@ -0,0 +1,193 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "3", "rating": 1, "@search.action": "merge"}, {"hotelId": + "4", "rating": 2, "@search.action": "merge"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '127' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 2927C642406F719329E5D042BB206CB3 + method: POST + uri: https://searchaa14129f.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"3","status":true,"errorMessage":null,"statusCode":200},{"key":"4","status":true,"errorMessage":null,"statusCode":200}]}' + headers: + cache-control: + - no-cache + content-length: + - '137' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:16:23 GMT + elapsed-time: + - '104' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - dd65af1e-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 2927C642406F719329E5D042BB206CB3 + method: GET + uri: https://searchaa14129f.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF10" + headers: + cache-control: + - no-cache + content-length: + - '5' + content-type: + - text/plain + date: + - Thu, 19 Mar 2020 00:16:26 GMT + elapsed-time: + - '25' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - df589ac0-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 2927C642406F719329E5D042BB206CB3 + method: GET + uri: https://searchaa14129f.search.windows.net/indexes('drgqefsg')/docs('3')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"3","hotelName":"EconoStay","description":"Very popular + hotel in town","descriptionFr":"H\u00f4tel le plus populaire en ville","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":1,"location":{"type":"Point","coordinates":[-122.131577,46.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '432' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:16:26 GMT + elapsed-time: + - '8' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - df6527c2-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 2927C642406F719329E5D042BB206CB3 + method: GET + uri: https://searchaa14129f.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"4","hotelName":"Express Rooms","description":"Pretty good + hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":2,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '410' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:16:26 GMT + elapsed-time: + - '5' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - df6d1324-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_merge_documents_missing.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_merge_documents_missing.yaml new file mode 100644 index 000000000000..77c0e35ba7d1 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_merge_documents_missing.yaml @@ -0,0 +1,185 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "1000", "rating": 1, "@search.action": "merge"}, + {"hotelId": "4", "rating": 2, "@search.action": "merge"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '130' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 8FCB206B89570E9F2297DF9161D5C43E + method: POST + uri: https://search9767122e.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"1000","status":false,"errorMessage":"Document not + found.","statusCode":404},{"key":"4","status":true,"errorMessage":null,"statusCode":200}]}' + headers: + cache-control: + - no-cache + content-length: + - '158' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:16:38 GMT + elapsed-time: + - '99' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - e6413194-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 207 + message: Multi-Status +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 8FCB206B89570E9F2297DF9161D5C43E + method: GET + uri: https://search9767122e.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF10" + headers: + cache-control: + - no-cache + content-length: + - '5' + content-type: + - text/plain + date: + - Thu, 19 Mar 2020 00:16:40 GMT + elapsed-time: + - '4' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - e8364f98-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 8FCB206B89570E9F2297DF9161D5C43E + method: GET + uri: https://search9767122e.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Thu, 19 Mar 2020 00:16:40 GMT + elapsed-time: + - '18' + expires: + - '-1' + pragma: + - no-cache + request-id: + - e83dd416-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + status: + code: 404 + message: Not Found +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 8FCB206B89570E9F2297DF9161D5C43E + method: GET + uri: https://search9767122e.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"4","hotelName":"Express Rooms","description":"Pretty good + hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":2,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '410' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:16:40 GMT + elapsed-time: + - '11' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - e8473952-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_merge_or_upload_documents.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_merge_or_upload_documents.yaml new file mode 100644 index 000000000000..12e77f6bb983 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_merge_or_upload_documents.yaml @@ -0,0 +1,192 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "1000", "rating": 1, "@search.action": "mergeOrUpload"}, + {"hotelId": "4", "rating": 2, "@search.action": "mergeOrUpload"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '146' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 3A5229865D32A294DD0A4643F419953E + method: POST + uri: https://searchbc7412f9.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"1000","status":true,"errorMessage":null,"statusCode":201},{"key":"4","status":true,"errorMessage":null,"statusCode":200}]}' + headers: + cache-control: + - no-cache + content-length: + - '140' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:16:52 GMT + elapsed-time: + - '97' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - eed08666-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 3A5229865D32A294DD0A4643F419953E + method: GET + uri: https://searchbc7412f9.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF11" + headers: + cache-control: + - no-cache + content-length: + - '5' + content-type: + - text/plain + date: + - Thu, 19 Mar 2020 00:16:55 GMT + elapsed-time: + - '3' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - f0c2b2e6-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 3A5229865D32A294DD0A4643F419953E + method: GET + uri: https://searchbc7412f9.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"1000","hotelName":null,"description":null,"descriptionFr":null,"category":null,"tags":[],"parkingIncluded":null,"smokingAllowed":null,"lastRenovationDate":null,"rating":1,"location":null,"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '225' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:16:55 GMT + elapsed-time: + - '7' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - f0ca0aaa-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 3A5229865D32A294DD0A4643F419953E + method: GET + uri: https://searchbc7412f9.search.windows.net/indexes('drgqefsg')/docs('4')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"4","hotelName":"Express Rooms","description":"Pretty good + hotel","descriptionFr":"Assez bon h\u00f4tel","category":"Budget","tags":["wifi","budget"],"parkingIncluded":true,"smokingAllowed":false,"lastRenovationDate":"1995-07-01T00:00:00Z","rating":2,"location":{"type":"Point","coordinates":[-122.131577,48.678581],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '410' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:16:55 GMT + elapsed-time: + - '6' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - f0d16868-6976-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_suggest.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_suggest.yaml new file mode 100644 index 000000000000..2c4ccb8120ec --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_suggest.yaml @@ -0,0 +1,53 @@ +interactions: +- request: + body: '{"search": "mot", "suggesterName": "sg"}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '40' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 46ABAB8B64DEF7BC3124DCE5FC2CF36D + method: POST + uri: https://searcha7cc0b96.search.windows.net/indexes('drgqefsg')/docs/search.post.suggest?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"@search.text":"Cheapest hotel in town. Infact, a motel.","hotelId":"2"},{"@search.text":"Secret + Point Motel","hotelId":"9"}]}' + headers: + cache-control: + - no-cache + content-length: + - '137' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:17:27 GMT + elapsed-time: + - '84' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - 03fd7f08-6977-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_upload_documents_existing.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_upload_documents_existing.yaml new file mode 100644 index 000000000000..eb8127250114 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_upload_documents_existing.yaml @@ -0,0 +1,54 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "1000", "rating": 5, "rooms": [], "hotelName": "Azure + Inn", "@search.action": "upload"}, {"hotelId": "3", "rating": 4, "rooms": [], + "hotelName": "Redmond Hotel", "@search.action": "upload"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '214' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - D63A7EE90E66D753E9C5392ADBCC52B1 + method: POST + uri: https://searchbe2a1314.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"1000","status":true,"errorMessage":null,"statusCode":201},{"key":"3","status":true,"errorMessage":null,"statusCode":200}]}' + headers: + cache-control: + - no-cache + content-length: + - '140' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:18:07 GMT + elapsed-time: + - '123' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - 1b5b4388-6977-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_upload_documents_new.yaml b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_upload_documents_new.yaml new file mode 100644 index 000000000000..beffa8a1c9fc --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_index_live.test_upload_documents_new.yaml @@ -0,0 +1,192 @@ +interactions: +- request: + body: '{"value": [{"hotelId": "1000", "rating": 5, "rooms": [], "hotelName": "Azure + Inn", "@search.action": "upload"}, {"hotelId": "1001", "rating": 4, "rooms": + [], "hotelName": "Redmond Hotel", "@search.action": "upload"}]}' + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '217' + Content-Type: + - application/json + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 9E733832432E2AF10FA4983DDAB03F52 + method: POST + uri: https://search62f510f3.search.windows.net/indexes('drgqefsg')/docs/search.index?api-version=2019-05-06-Preview + response: + body: + string: '{"value":[{"key":"1000","status":true,"errorMessage":null,"statusCode":201},{"key":"1001","status":true,"errorMessage":null,"statusCode":201}]}' + headers: + cache-control: + - no-cache + content-length: + - '143' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:18:17 GMT + elapsed-time: + - '82' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - 219f5cca-6977-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 9E733832432E2AF10FA4983DDAB03F52 + method: GET + uri: https://search62f510f3.search.windows.net/indexes('drgqefsg')/docs/$count?api-version=2019-05-06-Preview + response: + body: + string: "\uFEFF12" + headers: + cache-control: + - no-cache + content-length: + - '5' + content-type: + - text/plain + date: + - Thu, 19 Mar 2020 00:18:20 GMT + elapsed-time: + - '23' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - 23918ef4-6977-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 9E733832432E2AF10FA4983DDAB03F52 + method: GET + uri: https://search62f510f3.search.windows.net/indexes('drgqefsg')/docs('1000')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"1000","hotelName":"Azure Inn","description":null,"descriptionFr":null,"category":null,"tags":[],"parkingIncluded":null,"smokingAllowed":null,"lastRenovationDate":null,"rating":5,"location":null,"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '232' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:18:20 GMT + elapsed-time: + - '9' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - 239dc840-6977-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=none + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - 9E733832432E2AF10FA4983DDAB03F52 + method: GET + uri: https://search62f510f3.search.windows.net/indexes('drgqefsg')/docs('1001')?api-version=2019-05-06-Preview + response: + body: + string: '{"hotelId":"1001","hotelName":"Redmond Hotel","description":null,"descriptionFr":null,"category":null,"tags":[],"parkingIncluded":null,"smokingAllowed":null,"lastRenovationDate":null,"rating":4,"location":null,"address":null,"rooms":[]}' + headers: + cache-control: + - no-cache + content-length: + - '236' + content-type: + - application/json; odata.metadata=none + date: + - Thu, 19 Mar 2020 00:18:20 GMT + elapsed-time: + - '16' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - 23a6ab7c-6977-11ea-bb71-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/recordings/test_service_live.test_get_service_statistics.yaml b/sdk/search/azure-search-documents/tests/recordings/test_service_live.test_get_service_statistics.yaml new file mode 100644 index 000000000000..ce91e406d0fc --- /dev/null +++ b/sdk/search/azure-search-documents/tests/recordings/test_service_live.test_get_service_statistics.yaml @@ -0,0 +1,48 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json;odata.metadata=minimal + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-search/1.0.0b2 Python/3.7.3 (Darwin-19.3.0-x86_64-i386-64bit) + api-key: + - E505C9497247847B7216439F90BA1752 + method: GET + uri: https://searchabe712a7.search.windows.net/servicestats?api-version=2019-05-06-Preview + response: + body: + string: '{"@odata.context":"https://searchabe712a7.search.windows.net/$metadata#Microsoft.Azure.Search.V2019_05_06_Preview.ServiceStatistics","counters":{"documentCount":{"usage":0,"quota":null},"indexesCount":{"usage":0,"quota":3},"indexersCount":{"usage":0,"quota":3},"dataSourcesCount":{"usage":0,"quota":3},"storageSize":{"usage":0,"quota":52428800},"synonymMaps":{"usage":0,"quota":3},"skillsetCount":{"usage":0,"quota":3}},"limits":{"maxFieldsPerIndex":1000,"maxFieldNestingDepthPerIndex":10,"maxComplexCollectionFieldsPerIndex":40,"maxComplexObjectsInCollectionsPerDocument":3000}}' + headers: + cache-control: + - no-cache + content-length: + - '579' + content-type: + - application/json; odata.metadata=minimal + date: + - Thu, 19 Mar 2020 19:50:54 GMT + elapsed-time: + - '42' + expires: + - '-1' + odata-version: + - '4.0' + pragma: + - no-cache + preference-applied: + - odata.include-annotations="*" + request-id: + - f116caa8-6a1a-11ea-8e1b-8c8590507855 + strict-transport-security: + - max-age=15724800; includeSubDomains + vary: + - Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/search/azure-search-documents/tests/search_service_preparer.py b/sdk/search/azure-search-documents/tests/search_service_preparer.py new file mode 100644 index 000000000000..913cd2308e40 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/search_service_preparer.py @@ -0,0 +1,153 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +from os.path import dirname, realpath +import time + +try: + from unittest.mock import Mock +except ImportError: # python < 3.3 + from mock import Mock + +import json +import requests + +from devtools_testutils import AzureMgmtPreparer, ResourceGroupPreparer +from devtools_testutils.resource_testcase import RESOURCE_GROUP_PARAM +from azure_devtools.scenario_tests.exceptions import AzureTestError + +SERVICE_URL_FMT = "https://{}.search.windows.net/indexes?api-version=2019-05-06" + + +class SearchServicePreparer(AzureMgmtPreparer): + def __init__( + self, + schema=None, + index_batch=None, + name_prefix="search", + resource_group_parameter_name=RESOURCE_GROUP_PARAM, + disable_recording=True, + playback_fake_resource=None, + client_kwargs=None, + ): + super(SearchServicePreparer, self).__init__( + name_prefix, + random_name_length=24, + disable_recording=disable_recording, + playback_fake_resource=playback_fake_resource, + client_kwargs=client_kwargs, + ) + self.resource_group_parameter_name = resource_group_parameter_name + self.schema = schema + self.index_name = None + self.index_batch = index_batch + self.service_name = "TEST-SERVICE-NAME" + + def _get_resource_group(self, **kwargs): + try: + return kwargs[self.resource_group_parameter_name] + except KeyError: + template = ( + "To create a search service a resource group is required. Please add " + "decorator @{} in front of this preparer." + ) + raise AzureTestError(template.format(ResourceGroupPreparer.__name__)) + + def create_resource(self, name, **kwargs): + if self.schema: + schema = json.loads(self.schema) + else: + schema = None + self.service_name = self.create_random_name() + self.endpoint = "https://{}.search.windows.net".format(self.service_name) + + if not self.is_live: + return { + "api_key": "api-key", + "index_name": schema["name"] if schema else None, + "endpoint": self.endpoint, + } + + group_name = self._get_resource_group(**kwargs).name + + from azure.mgmt.search import SearchManagementClient + from azure.mgmt.search.models import ProvisioningState + + self.mgmt_client = self.create_mgmt_client(SearchManagementClient) + + # create the search service + from azure.mgmt.search.models import SearchService, Sku + + service_config = SearchService(location="West US", sku=Sku(name="free")) + resource = self.mgmt_client.services.create_or_update( + group_name, self.service_name, service_config + ) + + retries = 4 + for i in range(retries): + try: + result = resource.result() + if result.provisioning_state == ProvisioningState.succeeded: + break + except Exception as ex: + if i == retries - 1: + raise + time.sleep(3) + time.sleep(3) + + # note the for/else here: will raise an error if we *don't* break + # above i.e. if result.provisioning state was never "Succeeded" + else: + raise AzureTestError("Could not create a search service") + + api_key = self.mgmt_client.admin_keys.get( + group_name, self.service_name + ).primary_key + + if self.schema: + response = requests.post( + SERVICE_URL_FMT.format(self.service_name), + headers={"Content-Type": "application/json", "api-key": api_key}, + data=self.schema, + ) + if response.status_code != 201: + raise AzureTestError( + "Could not create a search index {}".format(response.status_code) + ) + self.index_name = schema["name"] + + # optionally load data into the index + if self.index_batch and self.schema: + from azure.search.documents import SearchIndexClient, SearchApiKeyCredential + from azure.search.documents._index._generated.models import IndexBatch + + batch = IndexBatch.deserialize(self.index_batch) + index_client = SearchIndexClient( + self.endpoint, self.index_name, SearchApiKeyCredential(api_key) + ) + results = index_client.index_documents(batch) + if not all(result.succeeded for result in results): + raise AzureTestError("Document upload to search index failed") + + # Indexing is asynchronous, so if you get a 200 from the REST API, that only means that the documents are + # persisted, not that they're searchable yet. The only way to check for searchability is to run queries, + # and even then things are eventually consistent due to replication. In the Track 1 SDK tests, we "solved" + # this by using a constant delay between indexing and querying. + import time + + time.sleep(3) + + return { + "api_key": api_key, + "index_name": self.index_name, + "endpoint": self.endpoint, + } + + def remove_resource(self, name, **kwargs): + if not self.is_live: + return + + group_name = self._get_resource_group(**kwargs).name + self.mgmt_client.services.delete(group_name, self.service_name) diff --git a/sdk/search/azure-search-documents/tests/test_index_documents_batch.py b/sdk/search/azure-search-documents/tests/test_index_documents_batch.py new file mode 100644 index 000000000000..9387c04922ae --- /dev/null +++ b/sdk/search/azure-search-documents/tests/test_index_documents_batch.py @@ -0,0 +1,71 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +import pytest + +from azure.search.documents._index._generated.models import IndexAction + +from azure.search.documents import IndexDocumentsBatch + +METHOD_NAMES = [ + "add_upload_documents", + "add_delete_documents", + "add_merge_documents", + "add_merge_or_upload_documents", +] + +METHOD_MAP = dict(zip(METHOD_NAMES, ["upload", "delete", "merge", "mergeOrUpload"])) + + +class TestIndexDocumentsBatch(object): + def test_init(self): + batch = IndexDocumentsBatch() + assert batch.actions == [] + + def test_repr(self): + batch = IndexDocumentsBatch() + assert repr(batch) == "" + + batch._actions = [1, 2, 3] + assert repr(batch) == "" + + # a strict length test here would require constructing an actions list + # with a length of ~10**24, so settle for this simple sanity check on + # an extreme case. + batch_actions = list(range(2000)) + assert len(repr(batch)) <= 1024 + + def test_actions_returns_list_copy(self): + batch = IndexDocumentsBatch() + batch.actions.extend([1, 2, 3]) + assert type(batch.actions) is list + assert batch.actions == [] + assert batch.actions is not batch._actions + + @pytest.mark.parametrize("method_name", METHOD_NAMES) + def test_add_method(self, method_name): + batch = IndexDocumentsBatch() + + method = getattr(batch, method_name) + + method("doc1") + assert len(batch.actions) == 1 + + method("doc2", "doc3") + assert len(batch.actions) == 3 + + method(["doc4", "doc5"]) + assert len(batch.actions) == 5 + + method(("doc6", "doc7")) + assert len(batch.actions) == 7 + + assert all( + action.action_type == METHOD_MAP[method_name] for action in batch.actions + ) + assert all(type(action) == IndexAction for action in batch.actions) + + expected = ["doc{}".format(i) for i in range(1, 8)] + assert [action.additional_properties for action in batch.actions] == expected diff --git a/sdk/search/azure-search-documents/tests/test_index_live.py b/sdk/search/azure-search-documents/tests/test_index_live.py new file mode 100644 index 000000000000..da12b8d721be --- /dev/null +++ b/sdk/search/azure-search-documents/tests/test_index_live.py @@ -0,0 +1,334 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import json +from os.path import dirname, join, realpath +import time + +import pytest + +from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer + +from search_service_preparer import SearchServicePreparer + +CWD = dirname(realpath(__file__)) + +SCHEMA = open(join(CWD, "hotel_schema.json")).read() +BATCH = json.load(open(join(CWD, "hotel_small.json"))) + +from azure.core.exceptions import HttpResponseError +from azure.search.documents import ( + AutocompleteQuery, + SearchIndexClient, + SearchApiKeyCredential, + SearchQuery, + SuggestQuery, +) + + +class SearchIndexClientTest(AzureMgmtTestCase): + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_get_document_count(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + assert client.get_document_count() == 10 + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_get_document(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + for hotel_id in range(1, 11): + result = client.get_document(key=str(hotel_id)) + expected = BATCH["value"][hotel_id - 1] + assert result.get("hotelId") == expected.get("hotelId") + assert result.get("hotelName") == expected.get("hotelName") + assert result.get("description") == expected.get("description") + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_get_document_missing(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + with pytest.raises(HttpResponseError): + client.get_document(key="1000") + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_get_search_simple(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + results = list(client.search(query="hotel")) + assert len(results) == 7 + + results = list(client.search(query="motel")) + assert len(results) == 2 + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_get_search_filter(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + + query = SearchQuery(search_text="WiFi") + query.filter("category eq 'Budget'") + query.select("hotelName", "category", "description") + query.order_by("hotelName desc") + + results = list(client.search(query=query)) + assert [x["hotelName"] for x in results] == sorted( + [x["hotelName"] for x in results], reverse=True + ) + expected = { + "category", + "hotelName", + "description", + "@search.score", + "@search.highlights", + } + assert all(set(x) == expected for x in results) + assert all(x["category"] == "Budget" for x in results) + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_get_search_counts(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + + query = SearchQuery(search_text="hotel") + results = client.search(query=query) + assert results.get_count() is None + + query = SearchQuery(search_text="hotel", include_total_result_count=True) + results = client.search(query=query) + assert results.get_count() == 7 + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_get_search_coverage(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + + query = SearchQuery(search_text="hotel") + results = client.search(query=query) + assert results.get_coverage() is None + + query = SearchQuery(search_text="hotel", minimum_coverage=50.0) + results = client.search(query=query) + cov = results.get_coverage() + assert isinstance(cov, float) + assert cov >= 50.0 + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_get_search_facets_none(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + + query = SearchQuery(search_text="WiFi") + query.select("hotelName", "category", "description") + + results = client.search(query=query) + assert results.get_facets() is None + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_get_search_facets_result(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + + query = SearchQuery(search_text="WiFi", facets=["category"]) + query.select("hotelName", "category", "description") + + results = client.search(query=query) + assert results.get_facets() == { + "category": [ + {"value": "Budget", "count": 4}, + {"value": "Luxury", "count": 1}, + ] + } + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_autocomplete(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + query = AutocompleteQuery(search_text="mot", suggester_name="sg") + results = client.autocomplete(query=query) + assert results == [{"text": "motel", "query_plus_text": "motel"}] + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_suggest(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + query = SuggestQuery(search_text="mot", suggester_name="sg") + results = client.suggest(query=query) + assert results == [ + {"hotelId": "2", "text": "Cheapest hotel in town. Infact, a motel."}, + {"hotelId": "9", "text": "Secret Point Motel"}, + ] + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_upload_documents_new(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + DOCUMENTS = [ + {"hotelId": "1000", "rating": 5, "rooms": [], "hotelName": "Azure Inn"}, + {"hotelId": "1001", "rating": 4, "rooms": [], "hotelName": "Redmond Hotel"}, + ] + results = client.upload_documents(DOCUMENTS) + assert len(results) == 2 + assert set(x.status_code for x in results) == {201} + + # There can be some lag before a document is searchable + time.sleep(3) + + assert client.get_document_count() == 12 + for doc in DOCUMENTS: + result = client.get_document(key=doc["hotelId"]) + assert result["hotelId"] == doc["hotelId"] + assert result["hotelName"] == doc["hotelName"] + assert result["rating"] == doc["rating"] + assert result["rooms"] == doc["rooms"] + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_upload_documents_existing(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + DOCUMENTS = [ + {"hotelId": "1000", "rating": 5, "rooms": [], "hotelName": "Azure Inn"}, + {"hotelId": "3", "rating": 4, "rooms": [], "hotelName": "Redmond Hotel"}, + ] + results = client.upload_documents(DOCUMENTS) + assert len(results) == 2 + assert set(x.status_code for x in results) == {200, 201} + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_delete_documents_existing(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + results = client.delete_documents([{"hotelId": "3"}, {"hotelId": "4"}]) + assert len(results) == 2 + assert set(x.status_code for x in results) == {200} + + # There can be some lag before a document is searchable + time.sleep(3) + + assert client.get_document_count() == 8 + + with pytest.raises(HttpResponseError): + client.get_document(key="3") + + with pytest.raises(HttpResponseError): + client.get_document(key="4") + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_delete_documents_missing(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + results = client.delete_documents([{"hotelId": "1000"}, {"hotelId": "4"}]) + assert len(results) == 2 + assert set(x.status_code for x in results) == {200} + + # There can be some lag before a document is searchable + time.sleep(3) + + assert client.get_document_count() == 9 + + with pytest.raises(HttpResponseError): + client.get_document(key="1000") + + with pytest.raises(HttpResponseError): + client.get_document(key="4") + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_merge_documents_existing(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + results = client.merge_documents( + [{"hotelId": "3", "rating": 1}, {"hotelId": "4", "rating": 2}] + ) + assert len(results) == 2 + assert set(x.status_code for x in results) == {200} + + # There can be some lag before a document is searchable + time.sleep(3) + + assert client.get_document_count() == 10 + + result = client.get_document(key="3") + assert result["rating"] == 1 + + result = client.get_document(key="4") + assert result["rating"] == 2 + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_merge_documents_missing(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + results = client.merge_documents( + [{"hotelId": "1000", "rating": 1}, {"hotelId": "4", "rating": 2}] + ) + assert len(results) == 2 + assert set(x.status_code for x in results) == {200, 404} + + # There can be some lag before a document is searchable + time.sleep(3) + + assert client.get_document_count() == 10 + + with pytest.raises(HttpResponseError): + client.get_document(key="1000") + + result = client.get_document(key="4") + assert result["rating"] == 2 + + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer(schema=SCHEMA, index_batch=BATCH) + def test_merge_or_upload_documents(self, api_key, endpoint, index_name, **kwargs): + client = SearchIndexClient( + endpoint, index_name, SearchApiKeyCredential(api_key) + ) + results = client.merge_or_upload_documents( + [{"hotelId": "1000", "rating": 1}, {"hotelId": "4", "rating": 2}] + ) + assert len(results) == 2 + assert set(x.status_code for x in results) == {200, 201} + + # There can be some lag before a document is searchable + time.sleep(3) + + assert client.get_document_count() == 11 + + result = client.get_document(key="1000") + assert result["rating"] == 1 + + result = client.get_document(key="4") + assert result["rating"] == 2 diff --git a/sdk/search/azure-search-documents/tests/test_queries.py b/sdk/search/azure-search-documents/tests/test_queries.py new file mode 100644 index 000000000000..814b117e84f8 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/test_queries.py @@ -0,0 +1,167 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +import pytest + +try: + from unittest import mock +except ImportError: + import mock + +from azure.search.documents._index._generated.models import ( + AutocompleteRequest, + SearchRequest, + SuggestRequest, +) + +from azure.search.documents import AutocompleteQuery, SearchQuery, SuggestQuery + + +class TestAutocompleteQuery(object): + def test_init(self): + query = AutocompleteQuery(search_text="text", suggester_name="sg") + assert type(query.request) is AutocompleteRequest + assert query.request.filter is None + + @mock.patch("azure.search.documents.AutocompleteQuery._request_type") + def test_kwargs_forwarded(self, mock_request): + mock_request.return_value = None + AutocompleteQuery(foo=10, bar=20) + assert mock_request.called + assert mock_request.call_args[0] == () + assert mock_request.call_args[1] == {"foo": 10, "bar": 20} + + def test_repr(self): + query = AutocompleteQuery(search_text="foo bar", suggester_name="sg") + assert repr(query) == "" + + query = AutocompleteQuery(search_text="aaaaabbbbb" * 200, suggester_name="sg") + assert len(repr(query)) == 1024 + + def test_filter(self): + query = AutocompleteQuery(search_text="text", suggester_name="sg") + assert query.request.filter is None + query.filter("expr0") + assert query.request.filter == "expr0" + + query = AutocompleteQuery( + search_text="text", suggester_name="sg", filter="expr1" + ) + assert query.request.filter == "expr1" + query.filter("expr2") + assert query.request.filter == "expr2" + + +class TestSearchQuery(object): + def test_init(self): + query = SearchQuery() + assert type(query.request) is SearchRequest + assert query.request.filter is None + assert query.request.order_by is None + assert query.request.select is None + + @mock.patch("azure.search.documents.SearchQuery._request_type") + def test_kwargs_forwarded(self, mock_request): + mock_request.return_value = None + SearchQuery(foo=10, bar=20) + assert mock_request.called + assert mock_request.call_args[0] == () + assert mock_request.call_args[1] == {"foo": 10, "bar": 20} + + def test_repr(self): + query = SearchQuery() + assert repr(query) == "" + + query = SearchQuery(search_text="foo bar", suggester_name="sg") + assert repr(query) == "" + + query = SearchQuery(search_text="aaaaabbbbb" * 200) + assert len(repr(query)) == 1024 + + def test_filter(self): + query = SearchQuery() + assert query.request.filter is None + query.filter("expr0") + assert query.request.filter == "expr0" + + query = SearchQuery(filter="expr0") + assert query.request.filter == "expr0" + query.filter("expr1") + assert query.request.filter == "expr1" + + def test_order_by(self): + query = SearchQuery() + assert query.request.order_by is None + query.order_by("f0") + assert query.request.order_by == "f0" + query.order_by("f1,f2") + assert query.request.order_by == "f1,f2" + query.order_by("f3", "f4") + assert query.request.order_by == "f3,f4" + + query = SearchQuery(order_by="f0") + assert query.request.order_by == "f0" + query.order_by("f1,f2") + assert query.request.order_by == "f1,f2" + query.order_by("f3", "f4") + assert query.request.order_by == "f3,f4" + + with pytest.raises(ValueError) as e: + query.order_by() + assert str(e) == "At least one field must be provided" + + def test_select(self): + query = SearchQuery() + assert query.request.select is None + query.select("f0") + assert query.request.select == "f0" + query.select("f1,f2") + assert query.request.select == "f1,f2" + query.select("f3", "f4") + assert query.request.select == "f3,f4" + + query = SearchQuery(select="f0") + assert query.request.select == "f0" + query.select("f1,f2") + assert query.request.select == "f1,f2" + query.select("f3", "f4") + assert query.request.select == "f3,f4" + + with pytest.raises(ValueError) as e: + query.select() + assert str(e) == "At least one field must be provided" + + +class TestSuggestQuery(object): + def test_init(self): + query = SuggestQuery(search_text="text", suggester_name="sg") + assert type(query.request) is SuggestRequest + assert query.request.filter is None + + @mock.patch("azure.search.documents.SuggestQuery._request_type") + def test_kwargs_forwarded(self, mock_request): + mock_request.return_value = None + SuggestQuery(foo=10, bar=20) + assert mock_request.called + assert mock_request.call_args[0] == () + assert mock_request.call_args[1] == {"foo": 10, "bar": 20} + + def test_repr(self): + query = SuggestQuery(search_text="foo bar", suggester_name="sg") + assert repr(query) == "" + + query = SuggestQuery(search_text="aaaaabbbbb" * 200, suggester_name="sg") + assert len(repr(query)) == 1024 + + def test_filter(self): + query = SuggestQuery(search_text="text", suggester_name="sg") + assert query.request.filter is None + query.filter("expr0") + assert query.request.filter == "expr0" + + query = SuggestQuery(search_text="text", suggester_name="sg", filter="expr1") + assert query.request.filter == "expr1" + query.filter("expr2") + assert query.request.filter == "expr2" diff --git a/sdk/search/azure-search-documents/tests/test_search_api_key_credential.py b/sdk/search/azure-search-documents/tests/test_search_api_key_credential.py new file mode 100644 index 000000000000..e393b03acae0 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/test_search_api_key_credential.py @@ -0,0 +1,28 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +import pytest + +from azure.search.documents import SearchApiKeyCredential + +BAD_KEYS = (10, 10.2, None, dict(), set(), list()) + + +class TestSearchApiKeyCredential(object): + def test_init(self): + credential = SearchApiKeyCredential("some_key") + assert credential.api_key == "some_key" + + @pytest.mark.parametrize("bad_key", BAD_KEYS, ids=repr) + def test_bad_init(self, bad_key): + with pytest.raises(TypeError) as e: + SearchApiKeyCredential(bad_key) + assert str(e) == "api_key must be a string." + + def test_update_key(self): + credential = SearchApiKeyCredential("some_key") + assert credential.api_key == "some_key" + credential.update_key("new_key") + assert credential.api_key == "new_key" diff --git a/sdk/search/azure-search-documents/tests/test_search_index_client.py b/sdk/search/azure-search-documents/tests/test_search_index_client.py new file mode 100644 index 000000000000..26eaefafa6ad --- /dev/null +++ b/sdk/search/azure-search-documents/tests/test_search_index_client.py @@ -0,0 +1,231 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +import pytest + +try: + from unittest import mock +except ImportError: + import mock + +from azure.core.paging import ItemPaged + +from azure.search.documents._index._generated.models import ( + IndexAction, + IndexBatch, + SearchDocumentsResult, + SearchResult, +) +from azure.search.documents._index._search_index_client import SearchPageIterator + +from azure.search.documents import ( + AutocompleteQuery, + IndexDocumentsBatch, + SearchApiKeyCredential, + SearchIndexClient, + SearchQuery, + SuggestQuery, + odata, +) + +CREDENTIAL = SearchApiKeyCredential(api_key="test_api_key") + +CRUD_METHOD_NAMES = [ + "upload_documents", + "delete_documents", + "merge_documents", + "merge_or_upload_documents", +] + +CRUD_METHOD_MAP = dict( + zip(CRUD_METHOD_NAMES, ["upload", "delete", "merge", "mergeOrUpload"]) +) + + +class Test_odata(object): + def test_const(self): + assert odata("no escapes") == "no escapes" + + def test_numbers(self): + assert odata("foo eq {foo}", foo=10) == "foo eq 10" + + def test_string(self): + assert odata("foo eq {foo}", foo="a string") == "foo eq 'a string'" + + def test_mixed(self): + expected = "foo eq 'a string' and bar le 10" + out = odata("foo eq {foo} and bar le {bar}", foo="a string", bar=10) + assert out == expected + + def test_escape_single_quote(self): + assert odata("foo eq {foo}", foo="a '' str'ing") == "foo eq 'a '''' str''ing'" + + def test_prevent_double_quoting(self): + assert odata("foo eq '{foo}'", foo="a string") == "foo eq 'a string'" + + +class TestSearchIndexClient(object): + def test_init(self): + client = SearchIndexClient("endpoint", "index name", CREDENTIAL) + assert client._client._config.headers_policy.headers == { + "api-key": "test_api_key", + "Accept": "application/json;odata.metadata=none", + } + + def test_repr(self): + client = SearchIndexClient("endpoint", "index name", CREDENTIAL) + assert repr(client) == "".format( + repr("endpoint"), repr("index name") + ) + + @mock.patch( + "azure.search.documents._index._generated.operations._documents_operations.DocumentsOperations.count" + ) + def test_get_document_count(self, mock_count): + client = SearchIndexClient("endpoint", "index name", CREDENTIAL) + client.get_document_count() + assert mock_count.called + assert mock_count.call_args[0] == () + assert mock_count.call_args[1] == {} + + @mock.patch( + "azure.search.documents._index._generated.operations._documents_operations.DocumentsOperations.get" + ) + def test_get_document_count(self, mock_get): + client = SearchIndexClient("endpoint", "index name", CREDENTIAL) + client.get_document("some_key") + assert mock_get.called + assert mock_get.call_args[0] == () + assert mock_get.call_args[1] == {"key": "some_key", "selected_fields": None} + + mock_get.reset() + + client.get_document("some_key", selected_fields="foo") + assert mock_get.called + assert mock_get.call_args[0] == () + assert mock_get.call_args[1] == {"key": "some_key", "selected_fields": "foo"} + + @pytest.mark.parametrize( + "query", ["search text", SearchQuery(search_text="search text")], ids=repr + ) + @mock.patch( + "azure.search.documents._index._generated.operations._documents_operations.DocumentsOperations.search_post" + ) + def test_search_query_argument(self, mock_search_post, query): + client = SearchIndexClient("endpoint", "index name", CREDENTIAL) + result = client.search(query) + assert isinstance(result, ItemPaged) + assert result._page_iterator_class is SearchPageIterator + search_result = SearchDocumentsResult() + search_result.results = [SearchResult(additional_properties={"key": "val"})] + mock_search_post.return_value = search_result + assert not mock_search_post.called + next(result) + assert mock_search_post.called + assert mock_search_post.call_args[0] == () + assert ( + mock_search_post.call_args[1]["search_request"].search_text == "search text" + ) + + def test_search_bad_argument(self): + client = SearchIndexClient("endpoint", "index name", CREDENTIAL) + with pytest.raises(TypeError) as e: + client.search(10) + assert str(e) == "Expected a SuggestQuery for 'query', but got {}".format( + repr(10) + ) + + @mock.patch( + "azure.search.documents._index._generated.operations._documents_operations.DocumentsOperations.suggest_post" + ) + def test_suggest_query_argument(self, mock_suggest_post): + client = SearchIndexClient("endpoint", "index name", CREDENTIAL) + result = client.suggest( + SuggestQuery(search_text="search text", suggester_name="sg") + ) + assert mock_suggest_post.called + assert mock_suggest_post.call_args[0] == () + assert ( + mock_suggest_post.call_args[1]["suggest_request"].search_text + == "search text" + ) + + def test_suggest_bad_argument(self): + client = SearchIndexClient("endpoint", "index name", CREDENTIAL) + with pytest.raises(TypeError) as e: + client.suggest("bad_query") + assert str(e) == "Expected a SuggestQuery for 'query', but got {}".format( + repr("bad_query") + ) + + @mock.patch( + "azure.search.documents._index._generated.operations._documents_operations.DocumentsOperations.autocomplete_post" + ) + def test_autocomplete_query_argument(self, mock_autocomplete_post): + client = SearchIndexClient("endpoint", "index name", CREDENTIAL) + result = client.autocomplete( + AutocompleteQuery(search_text="search text", suggester_name="sg") + ) + assert mock_autocomplete_post.called + assert mock_autocomplete_post.call_args[0] == () + assert ( + mock_autocomplete_post.call_args[1]["autocomplete_request"].search_text + == "search text" + ) + + def test_autocomplete_bad_argument(self): + client = SearchIndexClient("endpoint", "index name", CREDENTIAL) + with pytest.raises(TypeError) as e: + client.autocomplete("bad_query") + assert str( + e + ) == "Expected a AutocompleteQuery for 'query', but got {}".format( + repr("bad_query") + ) + + @pytest.mark.parametrize( + "arg", [[], ["doc1"], ["doc1", "doc2"]], ids=lambda x: str(len(x)) + " docs" + ) + @pytest.mark.parametrize("method_name", CRUD_METHOD_NAMES) + def test_add_method(self, arg, method_name): + with mock.patch.object( + SearchIndexClient, "index_documents", return_value=None + ) as mock_index_documents: + client = SearchIndexClient("endpoint", "index name", CREDENTIAL) + + method = getattr(client, method_name) + method(arg, extra="foo") + + assert mock_index_documents.called + assert len(mock_index_documents.call_args[0]) == 1 + batch = mock_index_documents.call_args[0][0] + assert isinstance(batch, IndexDocumentsBatch) + assert all( + action.action_type == CRUD_METHOD_MAP[method_name] + for action in batch.actions + ) + assert [action.additional_properties for action in batch.actions] == arg + assert mock_index_documents.call_args[1] == {"extra": "foo"} + + @mock.patch( + "azure.search.documents._index._generated.operations._documents_operations.DocumentsOperations.index" + ) + def test_index_documents(self, mock_index): + client = SearchIndexClient("endpoint", "index name", CREDENTIAL) + + batch = IndexDocumentsBatch() + batch.add_upload_documents("upload1") + batch.add_delete_documents("delete1", "delete2") + batch.add_merge_documents(["merge1", "merge2", "merge3"]) + batch.add_merge_or_upload_documents("merge_or_upload1") + + client.index_documents(batch, extra="foo") + assert mock_index.called + assert mock_index.call_args[0] == () + assert len(mock_index.call_args[1]) == 2 + assert mock_index.call_args[1]["extra"] == "foo" + index_documents = mock_index.call_args[1]["batch"] + assert isinstance(index_documents, IndexBatch) + assert index_documents.actions == batch.actions diff --git a/sdk/search/azure-search-documents/tests/test_search_service_client.py b/sdk/search/azure-search-documents/tests/test_search_service_client.py new file mode 100644 index 000000000000..061dc27cc7c1 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/test_search_service_client.py @@ -0,0 +1,40 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +import pytest + +try: + from unittest import mock +except ImportError: + import mock + +from azure.search.documents import SearchApiKeyCredential, SearchServiceClient + +CREDENTIAL = SearchApiKeyCredential(api_key="test_api_key") + + +class TestSearchServiceClient(object): + def test_init(self): + client = SearchServiceClient("endpoint", CREDENTIAL) + assert client._client._config.headers_policy.headers == { + "api-key": "test_api_key", + "Accept": "application/json;odata.metadata=minimal", + } + + def test_repr(self): + client = SearchServiceClient("endpoint", CREDENTIAL) + assert repr(client) == "".format( + repr("endpoint") + ) + + @mock.patch( + "azure.search.documents._service._generated._search_service_client.SearchServiceClient.get_service_statistics" + ) + def test_get_service_statistics(self, mock_get_stats): + client = SearchServiceClient("endpoint", CREDENTIAL) + client.get_service_statistics() + assert mock_get_stats.called + assert mock_get_stats.call_args[0] == () + assert mock_get_stats.call_args[1] == {} diff --git a/sdk/search/azure-search-documents/tests/test_service_live.py b/sdk/search/azure-search-documents/tests/test_service_live.py new file mode 100644 index 000000000000..18364053cc54 --- /dev/null +++ b/sdk/search/azure-search-documents/tests/test_service_live.py @@ -0,0 +1,27 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import json +from os.path import dirname, join, realpath +import time + +import pytest + +from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer + +from search_service_preparer import SearchServicePreparer + +from azure.core.exceptions import HttpResponseError +from azure.search.documents import SearchServiceClient, SearchApiKeyCredential + + +class SearchIndexClientTest(AzureMgmtTestCase): + @ResourceGroupPreparer(random_name_enabled=True) + @SearchServicePreparer() + def test_get_service_statistics(self, api_key, endpoint, **kwargs): + client = SearchServiceClient(endpoint, SearchApiKeyCredential(api_key)) + result = client.get_service_statistics() + assert isinstance(result, dict) + assert set(result.keys()) == {"counters", "limits"} diff --git a/sdk/search/azure-search-nspkg/MANIFEST.in b/sdk/search/azure-search-nspkg/MANIFEST.in new file mode 100644 index 000000000000..721e12728cbc --- /dev/null +++ b/sdk/search/azure-search-nspkg/MANIFEST.in @@ -0,0 +1,3 @@ +include *.md +include azure/__init__.py +include azure/search/__init__.py \ No newline at end of file diff --git a/sdk/search/azure-search-nspkg/README.md b/sdk/search/azure-search-nspkg/README.md new file mode 100644 index 000000000000..bfb74e1924de --- /dev/null +++ b/sdk/search/azure-search-nspkg/README.md @@ -0,0 +1,11 @@ +# Microsoft Azure SDK for Python + +This is the Microsoft Azure Search namespace package. It isn't intended to +be installed directly. Search client libraries are located elsewhere: +- [`azure-search-documents`](https://pypi.org/project/azure-search-documents) + +This package is for Python 2 only. It provides the necessary files for other +packages to extend the `azure` namespace. Python 3.x libraries use +[`PEP420`](https://www.python.org/dev/peps/pep-0420/) instead. + +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fsdk%search%2Fazure-search-nspkg%2FFREADME.png) diff --git a/sdk/search/azure-search-nspkg/azure/__init__.py b/sdk/search/azure-search-nspkg/azure/__init__.py new file mode 100644 index 000000000000..125860bac907 --- /dev/null +++ b/sdk/search/azure-search-nspkg/azure/__init__.py @@ -0,0 +1,6 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +# pylint:disable=missing-docstring +__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore diff --git a/sdk/search/azure-search-nspkg/azure/search/__init__.py b/sdk/search/azure-search-nspkg/azure/search/__init__.py new file mode 100644 index 000000000000..125860bac907 --- /dev/null +++ b/sdk/search/azure-search-nspkg/azure/search/__init__.py @@ -0,0 +1,6 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +# pylint:disable=missing-docstring +__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore diff --git a/sdk/search/azure-search-nspkg/sdk_packaging.toml b/sdk/search/azure-search-nspkg/sdk_packaging.toml new file mode 100644 index 000000000000..e7687fdae93b --- /dev/null +++ b/sdk/search/azure-search-nspkg/sdk_packaging.toml @@ -0,0 +1,2 @@ +[packaging] +auto_update = false \ No newline at end of file diff --git a/sdk/search/azure-search-nspkg/setup.py b/sdk/search/azure-search-nspkg/setup.py new file mode 100644 index 000000000000..c30024e046bb --- /dev/null +++ b/sdk/search/azure-search-nspkg/setup.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python + +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +import sys +from setuptools import setup + +PACKAGES = [] +# Do an empty package on Python 3 and not python_requires, since not everybody is ready +# https://github.com/Azure/azure-sdk-for-python/issues/3447 +# https://github.com/Azure/azure-sdk-for-python/issues/3481 +if sys.version_info[0] < 3: + PACKAGES = ['azure.search'] + +setup( + name="azure-search-nspkg", + version="1.0.0", + description="Microsoft Azure Search Namespace Package [Internal]", + long_description=open("README.md", "r").read(), + long_description_content_type="text/markdown", + license="MIT License", + author="Microsoft Corporation", + author_email="azpysdkhelp@microsoft.com", + url="https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/search", + classifiers=[ + "Development Status :: 5 - Production/Stable", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "License :: OSI Approved :: MIT License", + ], + zip_safe=False, + packages=PACKAGES, + install_requires=["azure-nspkg>=3.0.0"], +) diff --git a/sdk/search/ci.yml b/sdk/search/ci.yml index 6dc55b43b393..72984afc7c74 100644 --- a/sdk/search/ci.yml +++ b/sdk/search/ci.yml @@ -39,6 +39,10 @@ stages: parameters: ServiceDirectory: search Artifacts: + - name: azure_search_documents + safeName: azuresearchdocuments + - name: azure_search_nspkg + safeName: azuresearchnspkg - name: azure_mgmt_search safeName: azuremgmtsearch - + diff --git a/sdk/search/tests.yml b/sdk/search/tests.yml new file mode 100644 index 000000000000..24c949ae1ce0 --- /dev/null +++ b/sdk/search/tests.yml @@ -0,0 +1,20 @@ +trigger: none + +resources: + repositories: + - repository: azure-sdk-tools + type: github + name: Azure/azure-sdk-tools + endpoint: azure + +jobs: + - template: ../../eng/pipelines/templates/jobs/archetype-sdk-tests.yml + parameters: + BuildTargetingString: $(BuildTargetingString) + ServiceDirectory: search + EnvVars: + AZURE_CLIENT_ID: $(aad-azure-sdk-test-client-id) + AZURE_CLIENT_SECRET: $(aad-azure-sdk-test-client-secret) + AZURE_TENANT_ID: $(aad-azure-sdk-test-tenant-id) + AZURE_CLIENT_OID: $(aad-azure-sdk-test-client-oid) + TEST_MODE: 'RunLiveNoRecord' \ No newline at end of file diff --git a/sdk/serialconsole/azure-mgmt-serialconsole/tests/recordings/test_cli_mgmt_serialconsole.test_serialconsole.yaml b/sdk/serialconsole/azure-mgmt-serialconsole/tests/recordings/test_cli_mgmt_serialconsole.test_serialconsole.yaml new file mode 100644 index 000000000000..8b6df09a60bf --- /dev/null +++ b/sdk/serialconsole/azure-mgmt-serialconsole/tests/recordings/test_cli_mgmt_serialconsole.test_serialconsole.yaml @@ -0,0 +1,211 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-serialconsole/0.1.0 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.SerialConsole/consoleServices/default?api-version=2018-05-01 + response: + body: + string: "{\n \"properties\": {\n \"disabled\": true\n }\n }" + headers: + cache-control: + - no-cache + content-length: + - '46' + content-type: + - application/json; charset=UTF-8 + date: + - Fri, 14 Feb 2020 10:53:28 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-frame-options: + - deny + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-serialconsole/0.1.0 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.SerialConsole/operations?api-version=2018-05-01 + response: + body: + string: "{\n \"value\": [\n {\n \"name\": \"Microsoft.SerialConsole/consoleServices/read\"\ + ,\n \"isDataAction\": \"false\",\n \"display\": {\n \"provider\"\ + : \"Microsoft.SerialConsole\",\n \"resource\": \"Serial Console instance\"\ + ,\n \"operation\": \"Default\",\n \"description\": \"Retrieves the\ + \ current subscription state\"\n }\n },\n {\n \"name\": \"Microsoft.SerialConsole/consoleServices/disableConsole/action\"\ + ,\n \"isDataAction\": \"false\",\n \"display\": {\n \"provider\"\ + : \"Microsoft.SerialConsole\",\n \"resource\": \"Serial Console instance\"\ + ,\n \"operation\": \"Disable Console\",\n \"description\": \"Disable\ + \ Serial Console for a subscription\"\n }\n },\n {\n \"name\": \"\ + Microsoft.SerialConsole/consoleServices/enableConsole/action\",\n \"isDataAction\"\ + : \"false\",\n \"display\": {\n \"provider\": \"Microsoft.SerialConsole\"\ + ,\n \"resource\": \"Serial Console instance\",\n \"operation\": \"\ + Enable Console\",\n \"description\": \"Enable Serial Console for a subscription\"\ + \n }\n },\n {\n \"name\": \"Microsoft.SerialConsole/consoleServices/operations/read\"\ + ,\n \"isDataAction\": \"false\",\n \"display\": {\n \"provider\"\ + : \"Microsoft.SerialConsole\",\n \"resource\": \"Serial Console instance\"\ + ,\n \"operation\": \"Serial Console operations\",\n \"description\"\ + : \"Display available Serial Console operations\"\n }\n }\n ]\n }" + headers: + cache-control: + - no-cache + content-length: + - '1313' + content-type: + - application/json; charset=UTF-8 + date: + - Fri, 14 Feb 2020 10:53:28 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-frame-options: + - deny + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-type: + - application/json;charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-serialconsole/0.1.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.SerialConsole/consoleServices/default/enableConsole?api-version=2018-05-01 + response: + body: + string: "{\n \"properties\": {\n \"disabled\": false\n }\n }" + headers: + cache-control: + - no-cache + content-length: + - '47' + content-type: + - application/json; charset=UTF-8 + date: + - Fri, 14 Feb 2020 10:53:30 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-frame-options: + - deny + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-type: + - application/json;charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-serialconsole/0.1.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.SerialConsole/consoleServices/default/disableConsole?api-version=2018-05-01 + response: + body: + string: "{\n \"properties\": {\n \"disabled\": true\n }\n }" + headers: + cache-control: + - no-cache + content-length: + - '46' + content-type: + - application/json; charset=UTF-8 + date: + - Fri, 14 Feb 2020 10:53:31 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-frame-options: + - deny + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/serialconsole/azure-mgmt-serialconsole/tests/test_cli_mgmt_serialconsole.py b/sdk/serialconsole/azure-mgmt-serialconsole/tests/test_cli_mgmt_serialconsole.py new file mode 100644 index 000000000000..a10167fcb382 --- /dev/null +++ b/sdk/serialconsole/azure-mgmt-serialconsole/tests/test_cli_mgmt_serialconsole.py @@ -0,0 +1,51 @@ +# coding: utf-8 + +#------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +#-------------------------------------------------------------------------- + + +# TEST SCENARIO COVERAGE +# ---------------------- +# Methods Total : 4 +# Methods Covered : 4 +# Examples Total : 4 +# Examples Tested : 4 +# Coverage % : 100 +# ---------------------- + +import unittest + +import azure.mgmt.serialconsole +from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer + +AZURE_LOCATION = 'eastus' + +class MgmtMicrosoftSerialConsoleClientTest(AzureMgmtTestCase): + + def setUp(self): + super(MgmtMicrosoftSerialConsoleClientTest, self).setUp() + self.mgmt_client = self.create_mgmt_client( + azure.mgmt.serialconsole.MicrosoftSerialConsoleClient + ) + + @ResourceGroupPreparer(location=AZURE_LOCATION) + def test_serialconsole(self, resource_group): + + # Get the Serial Console disabled status for a subscription[get] + result = self.mgmt_client.list_console.disabled() + + # List all Serial Console management operations supported by Serial Console RP[get] + result = self.mgmt_client.list.operations() + + # Enable Serial Console for a subscription[post] + result = self.mgmt_client.console.enable_console() + + # Disable Serial Console for a subscription[post] + result = self.mgmt_client.console.disable_console() + +#------------------------------------------------------------------------------ +if __name__ == '__main__': + unittest.main() diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/aio/async_base_handler.py b/sdk/servicebus/azure-servicebus/azure/servicebus/aio/async_base_handler.py index c5ab51eea698..085e990d584d 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/aio/async_base_handler.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/aio/async_base_handler.py @@ -13,6 +13,7 @@ from uamqp import authentication from uamqp import constants, errors +from azure.servicebus.common.constants import ASSOCIATEDLINKPROPERTYNAME from azure.servicebus.common.utils import create_properties, get_running_loop from azure.servicebus.common.errors import ( _ServiceBusErrorPolicy, @@ -74,12 +75,18 @@ async def _mgmt_request_response(self, operation, message, callback, **kwargs): if not self.running: raise InvalidHandlerState("Client connection is closed.") + try: + application_properties = {ASSOCIATEDLINKPROPERTYNAME:self._handler.message_handler.name} + except AttributeError: + application_properties = {} + mgmt_msg = Message( body=message, properties=MessageProperties( reply_to=self.mgmt_target, encoding=self.encoding, - **kwargs)) + **kwargs), + application_properties=application_properties) try: return await self._handler.mgmt_request_async( mgmt_msg, diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/base_handler.py b/sdk/servicebus/azure-servicebus/azure/servicebus/base_handler.py index eedc0037f663..8891da16feec 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/base_handler.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/base_handler.py @@ -16,6 +16,7 @@ from uamqp import constants, errors from uamqp.message import Message, MessageProperties +from azure.servicebus.common.constants import ASSOCIATEDLINKPROPERTYNAME from azure.servicebus.common.utils import create_properties from azure.servicebus.common.errors import ( _ServiceBusErrorPolicy, @@ -75,12 +76,18 @@ def _mgmt_request_response(self, operation, message, callback, **kwargs): if not self.running: raise InvalidHandlerState("Client connection is closed.") + try: + application_properties = {ASSOCIATEDLINKPROPERTYNAME:self._handler.message_handler.name} + except AttributeError: + application_properties = {} + mgmt_msg = Message( body=message, properties=MessageProperties( reply_to=self.mgmt_target, encoding=self.encoding, - **kwargs)) + **kwargs), + application_properties=application_properties) try: return self._handler.mgmt_request( mgmt_msg, diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/common/constants.py b/sdk/servicebus/azure-servicebus/azure/servicebus/common/constants.py index 1405513f7a59..fdf95ecaf522 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/common/constants.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/common/constants.py @@ -19,6 +19,7 @@ PARTITIONKEYNAME = b"x-opt-partition-key" DEADLETTERSOURCENAME = b"x-opt-deadletter-source" DEADLETTERNAME = VENDOR + b":dead-letter" +ASSOCIATEDLINKPROPERTYNAME = b"associated-link-name" SESSION_FILTER = VENDOR + b":session-filter" SESSION_LOCKED_UNTIL = VENDOR + b":locked-until-utc" diff --git a/sdk/servicebus/azure-servicebus/tests/async_tests/test_queues_async.py b/sdk/servicebus/azure-servicebus/tests/async_tests/test_queues_async.py index 29595105db9f..0821d18b9a9b 100644 --- a/sdk/servicebus/azure-servicebus/tests/async_tests/test_queues_async.py +++ b/sdk/servicebus/azure-servicebus/tests/async_tests/test_queues_async.py @@ -72,7 +72,6 @@ class ServiceBusQueueTests(AzureMgmtTestCase): @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @CachedServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -103,7 +102,6 @@ async def test_async_queue_by_queue_client_conn_str_receive_handler_peeklock(sel @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer() @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -126,7 +124,6 @@ async def test_github_issue_7079_async(self, servicebus_namespace_connection_str @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer() @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @CachedServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -150,7 +147,6 @@ async def test_github_issue_6178_async(self, servicebus_namespace_connection_str @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -186,7 +182,6 @@ async def test_async_queue_by_queue_client_conn_str_receive_handler_receiveandde @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -224,7 +219,6 @@ async def test_async_queue_by_queue_client_conn_str_receive_handler_with_stop(se @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -260,7 +254,6 @@ async def test_async_queue_by_servicebus_client_iter_messages_simple(self, servi @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -297,7 +290,6 @@ async def test_async_queue_by_servicebus_conn_str_client_iter_messages_with_aban @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -335,7 +327,6 @@ async def test_async_queue_by_servicebus_client_iter_messages_with_defer(self, s @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -379,7 +370,6 @@ async def test_async_queue_by_servicebus_client_iter_messages_with_retrieve_defe @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -418,7 +408,6 @@ async def test_async_queue_by_servicebus_client_iter_messages_with_retrieve_defe @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -464,7 +453,6 @@ async def test_async_queue_by_servicebus_client_iter_messages_with_retrieve_defe @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -502,7 +490,6 @@ async def test_async_queue_by_servicebus_client_iter_messages_with_retrieve_defe @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -539,7 +526,6 @@ async def test_async_queue_by_servicebus_client_iter_messages_with_retrieve_defe @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -579,7 +565,6 @@ async def test_async_queue_by_servicebus_client_receive_batch_with_deadletter(se @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -622,7 +607,6 @@ async def test_async_queue_by_servicebus_client_receive_batch_with_retrieve_dead @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @CachedServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -642,7 +626,6 @@ async def test_async_queue_by_servicebus_client_session_fail(self, servicebus_na @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -669,7 +652,6 @@ async def test_async_queue_by_servicebus_client_browse_messages_client(self, ser @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -697,7 +679,6 @@ async def test_async_queue_by_servicebus_client_browse_messages_with_receiver(se @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -715,7 +696,6 @@ async def test_async_queue_by_servicebus_client_browse_empty_messages(self, serv @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -757,7 +737,6 @@ async def test_async_queue_by_servicebus_client_renew_message_locks(self, servic @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -808,7 +787,6 @@ async def test_async_queue_by_queue_client_conn_str_receive_handler_with_autoloc @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -843,7 +821,6 @@ async def test_async_queue_by_servicebus_client_fail_send_messages(self, service @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -878,7 +855,6 @@ def batch_data(): @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -913,7 +889,6 @@ async def test_async_queue_message_time_to_live(self, servicebus_namespace, serv @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_duplicate_detection=True, dead_lettering_on_message_expiration=True) @@ -944,7 +919,6 @@ async def test_async_queue_message_duplicate_detection(self, servicebus_namespac @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -971,7 +945,6 @@ async def test_async_queue_message_connection_closed(self, servicebus_namespace, @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -1008,7 +981,6 @@ async def test_async_queue_message_expiry(self, servicebus_namespace, servicebus @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -1043,7 +1015,6 @@ async def test_async_queue_message_lock_renew(self, servicebus_namespace, servic @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -1084,7 +1055,6 @@ async def test_async_queue_message_receive_and_delete(self, servicebus_namespace @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -1119,7 +1089,6 @@ def message_content(): @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -1158,7 +1127,6 @@ async def test_async_queue_schedule_message(self, servicebus_namespace, serviceb @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) @@ -1204,7 +1172,6 @@ async def test_async_queue_schedule_multiple_messages(self, servicebus_namespace @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @CachedResourceGroupPreparer(name_prefix='servicebustest') @CachedServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', dead_lettering_on_message_expiration=True) diff --git a/sdk/servicebus/azure-servicebus/tests/async_tests/test_sessions_async.py b/sdk/servicebus/azure-servicebus/tests/async_tests/test_sessions_async.py index bb353248a0eb..4a7f0ae45706 100644 --- a/sdk/servicebus/azure-servicebus/tests/async_tests/test_sessions_async.py +++ b/sdk/servicebus/azure-servicebus/tests/async_tests/test_sessions_async.py @@ -68,7 +68,6 @@ class ServiceBusAsyncSessionTests(AzureMgmtTestCase): @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -101,7 +100,6 @@ async def test_async_session_by_session_client_conn_str_receive_handler_peeklock @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -141,7 +139,6 @@ async def test_async_session_by_queue_client_conn_str_receive_handler_receiveand @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -186,7 +183,6 @@ async def test_async_session_by_session_client_conn_str_receive_handler_with_sto @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -204,7 +200,6 @@ async def test_async_session_by_session_client_conn_str_receive_handler_with_no_ @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -227,7 +222,6 @@ async def test_async_session_by_session_client_conn_str_receive_handler_with_ina @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -270,7 +264,6 @@ async def test_async_session_by_servicebus_client_iter_messages_with_retrieve_de @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -319,7 +312,6 @@ async def test_async_session_by_servicebus_client_iter_messages_with_retrieve_de @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -359,7 +351,6 @@ async def test_async_session_by_servicebus_client_iter_messages_with_retrieve_de @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -397,7 +388,6 @@ async def test_async_session_by_servicebus_client_iter_messages_with_retrieve_de @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -441,7 +431,6 @@ async def test_async_session_by_servicebus_client_fetch_next_with_retrieve_deadl @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -474,7 +463,6 @@ async def test_async_session_by_servicebus_client_browse_messages_client(self, s @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -505,7 +493,6 @@ async def test_async_session_by_servicebus_client_browse_messages_with_receiver( @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -553,7 +540,6 @@ async def test_async_session_by_servicebus_client_renew_client_locks(self, servi @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -608,7 +594,6 @@ async def test_async_session_by_conn_str_receive_handler_with_autolockrenew(self @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -638,7 +623,6 @@ async def test_async_session_message_connection_closed(self, servicebus_namespac @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -682,7 +666,6 @@ async def test_async_session_message_expiry(self, servicebus_namespace, serviceb @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -725,7 +708,6 @@ async def test_async_session_schedule_message(self, servicebus_namespace, servic @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -771,7 +753,6 @@ async def test_async_session_schedule_multiple_messages(self, servicebus_namespa @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -811,7 +792,6 @@ async def test_async_session_cancel_scheduled_messages(self, servicebus_namespac @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -843,7 +823,6 @@ async def test_async_session_get_set_state_with_receiver(self, servicebus_namesp @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -878,7 +857,6 @@ async def test_async_session_by_servicebus_client_list_sessions_with_receiver(se @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) @@ -912,7 +890,6 @@ async def test_async_session_by_servicebus_client_list_sessions_with_client(self @pytest.mark.liveTest @pytest.mark.live_test_only - @pytest.mark.asyncio @RandomNameResourceGroupPreparer(name_prefix='servicebustest') @ServiceBusNamespacePreparer(name_prefix='servicebustest') @ServiceBusQueuePreparer(name_prefix='servicebustest', requires_session=True) diff --git a/sdk/servicebus/azure-servicebus/tests/stress_tests/stress_test_queue_long_term_autorenew.py b/sdk/servicebus/azure-servicebus/tests/stress_tests/stress_test_queue_long_term_autorenew.py new file mode 100644 index 000000000000..6eb3050bb453 --- /dev/null +++ b/sdk/servicebus/azure-servicebus/tests/stress_tests/stress_test_queue_long_term_autorenew.py @@ -0,0 +1,60 @@ +#------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +#-------------------------------------------------------------------------- + +import time +from datetime import datetime, timedelta +import concurrent + +import conftest +from azure.servicebus import AutoLockRenew, ServiceBusClient, Message + +def send_message(client, queue_name): + queue_client = client.get_queue(queue_name) + msg = Message(b'Test') + queue_client.send(msg) + print('Message sent') + + +def process_message(message): + print('Beginning Processing') + time.sleep(600) + print('Done Processing') + + +def receive_process_and_complete_message(client, queue_name): + queue_client = client.get_queue(queue_name) + lock_renewal = AutoLockRenew(max_workers=4) + lock_renewal.renew_period = 120 + with queue_client.get_receiver() as queue_receiver: + for message in queue_receiver: + print("Received message: ", message) + lock_renewal.register(message, timeout=10800) + process_message(message) + print("Completing message") + message.complete() + break + + +def stress_test_queue_long_term_autorenew(sb_config, queue_name): + client = ServiceBusClient( + service_namespace=sb_config['hostname'], + shared_access_key_name=sb_config['key_name'], + shared_access_key_value=sb_config['access_key'], + debug=False) + + send_message(client, queue_name) + receive_process_and_complete_message(client, queue_name) + + +if __name__ == '__main__': + live_config = conftest.get_live_servicebus_config() + queue_name = conftest.create_standard_queue(live_config) + print("Created queue {}".format(queue_name)) + try: + stress_test_queue_long_term_autorenew(live_config, queue_name) + finally: + print("Cleaning up queue {}".format(queue_name)) + conftest.cleanup_queue(live_config, queue_name) diff --git a/sdk/servicebus/tests.yml b/sdk/servicebus/tests.yml index 47d96fd3e4bc..070d51d1c4d9 100644 --- a/sdk/servicebus/tests.yml +++ b/sdk/servicebus/tests.yml @@ -11,6 +11,7 @@ jobs: - template: ../../eng/pipelines/templates/jobs/archetype-sdk-tests.yml parameters: ServiceDirectory: servicebus + TestTimeoutInMinutes: 300 EnvVars: AZURE_SUBSCRIPTION_ID: $(azure-subscription-id) AZURE_TENANT_ID: $(aad-azure-sdk-test-tenant-id) diff --git a/sdk/storage/azure-mgmt-storage/tests/recordings/test_cli_mgmt_storage.test_storage.yaml b/sdk/storage/azure-mgmt-storage/tests/recordings/test_cli_mgmt_storage.test_storage.yaml new file mode 100644 index 000000000000..d2566a168cd2 --- /dev/null +++ b/sdk/storage/azure-mgmt-storage/tests/recordings/test_cli_mgmt_storage.test_storage.yaml @@ -0,0 +1,4336 @@ +interactions: +- request: + body: '{"sku": {"name": "Standard_GRS"}, "kind": "StorageV2", "location": "westeurope", + "tags": {"key1": "value1", "key2": "value2"}, "properties": {"encryption": {"services": + {"blob": {"enabled": true, "keyType": "Account"}, "file": {"enabled": true, + "keyType": "Account"}}, "keySource": "Microsoft.Storage"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '304' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz?api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:34:49 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/367883b1-84d3-444e-b6eb-0cf5fa6ffd41?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/367883b1-84d3-444e-b6eb-0cf5fa6ffd41?monitor=true&api-version=2019-06-01 + response: + body: + string: '{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz","name":"storageaccountxxyyzz","type":"Microsoft.Storage/storageAccounts","location":"westeurope","tags":{"key1":"value1","key2":"value2"},"properties":{"privateEndpointConnections":[],"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2020-03-03T05:34:48.6650114Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2020-03-03T05:34:48.6650114Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2020-03-03T05:34:48.5712661Z","primaryEndpoints":{"dfs":"https://storageaccountxxyyzz.dfs.core.windows.net/","web":"https://storageaccountxxyyzz.z6.web.core.windows.net/","blob":"https://storageaccountxxyyzz.blob.core.windows.net/","queue":"https://storageaccountxxyyzz.queue.core.windows.net/","table":"https://storageaccountxxyyzz.table.core.windows.net/","file":"https://storageaccountxxyyzz.file.core.windows.net/"},"primaryLocation":"westeurope","statusOfPrimary":"available","secondaryLocation":"northeurope","statusOfSecondary":"available"}}' + headers: + cache-control: + - no-cache + content-length: + - '1430' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:08 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"cors": {"corsRules": [{"allowedOrigins": ["http://www.contoso.com", + "http://www.fabrikam.com"], "allowedMethods": ["GET", "HEAD", "POST", "OPTIONS", + "MERGE", "PUT"], "maxAgeInSeconds": 100, "exposedHeaders": ["x-ms-meta-*"], + "allowedHeaders": ["x-ms-meta-abc", "x-ms-meta-data*", "x-ms-meta-target*"]}, + {"allowedOrigins": ["*"], "allowedMethods": ["GET"], "maxAgeInSeconds": 2, "exposedHeaders": + ["*"], "allowedHeaders": ["*"]}, {"allowedOrigins": ["http://www.abc23.com", + "https://www.fabrikam.com/*"], "allowedMethods": ["GET", "PUT"], "maxAgeInSeconds": + 2000, "exposedHeaders": ["x-ms-meta-abc", "x-ms-meta-data*", "x-ms-meta-target*"], + "allowedHeaders": ["x-ms-meta-12345675754564*"]}]}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '709' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices/default?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices/default","name":"default","type":"Microsoft.Storage/storageAccounts/fileServices","properties":{"cors":{"corsRules":[{"allowedOrigins":["http://www.contoso.com","http://www.fabrikam.com"],"allowedMethods":["GET","HEAD","POST","OPTIONS","MERGE","PUT"],"maxAgeInSeconds":100,"exposedHeaders":["x-ms-meta-*"],"allowedHeaders":["x-ms-meta-abc","x-ms-meta-data*","x-ms-meta-target*"]},{"allowedOrigins":["*"],"allowedMethods":["GET"],"maxAgeInSeconds":2,"exposedHeaders":["*"],"allowedHeaders":["*"]},{"allowedOrigins":["http://www.abc23.com","https://www.fabrikam.com/*"],"allowedMethods":["GET","PUT"],"maxAgeInSeconds":2000,"exposedHeaders":["x-ms-meta-abc","x-ms-meta-data*","x-ms-meta-target*"],"allowedHeaders":["x-ms-meta-12345675754564*"]}]}}}' + headers: + cache-control: + - no-cache + content-length: + - '941' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:10 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1198' + status: + code: 200 + message: OK +- request: + body: '{"properties": {"cors": {"corsRules": [{"allowedOrigins": ["http://www.contoso.com", + "http://www.fabrikam.com"], "allowedMethods": ["GET", "HEAD", "POST", "OPTIONS", + "MERGE", "PUT"], "maxAgeInSeconds": 100, "exposedHeaders": ["x-ms-meta-*"], + "allowedHeaders": ["x-ms-meta-abc", "x-ms-meta-data*", "x-ms-meta-target*"]}, + {"allowedOrigins": ["*"], "allowedMethods": ["GET"], "maxAgeInSeconds": 2, "exposedHeaders": + ["*"], "allowedHeaders": ["*"]}, {"allowedOrigins": ["http://www.abc23.com", + "https://www.fabrikam.com/*"], "allowedMethods": ["GET", "PUT"], "maxAgeInSeconds": + 2000, "exposedHeaders": ["x-ms-meta-abc", "x-ms-meta-data*", "x -ms-meta-target*"], + "allowedHeaders": ["x-ms-meta-12345675754564*"]}]}, "defaultServiceVersion": + "2017-07-29", "deleteRetentionPolicy": {"enabled": true, "days": 300}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '806' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default","name":"default","type":"Microsoft.Storage/storageAccounts/blobServices","properties":{"cors":{"corsRules":[{"allowedOrigins":["http://www.contoso.com","http://www.fabrikam.com"],"allowedMethods":["GET","HEAD","POST","OPTIONS","MERGE","PUT"],"maxAgeInSeconds":100,"exposedHeaders":["x-ms-meta-*"],"allowedHeaders":["x-ms-meta-abc","x-ms-meta-data*","x-ms-meta-target*"]},{"allowedOrigins":["*"],"allowedMethods":["GET"],"maxAgeInSeconds":2,"exposedHeaders":["*"],"allowedHeaders":["*"]},{"allowedOrigins":["http://www.abc23.com","https://www.fabrikam.com/*"],"allowedMethods":["GET","PUT"],"maxAgeInSeconds":2000,"exposedHeaders":["x-ms-meta-abc","x-ms-meta-data*","x + -ms-meta-target*"],"allowedHeaders":["x-ms-meta-12345675754564*"]}]},"defaultServiceVersion":"2017-07-29","deleteRetentionPolicy":{"enabled":true,"days":300}}}' + headers: + cache-control: + - no-cache + content-length: + - '1031' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:12 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1197' + status: + code: 200 + message: OK +- request: + body: '{"properties": {"policy": {"rules": [{"enabled": true, "name": "olcmtest", + "type": "Lifecycle", "definition": {"actions": {"baseBlob": {"tierToCool": {"daysAfterModificationGreaterThan": + 30.0}, "tierToArchive": {"daysAfterModificationGreaterThan": 90.0}, "delete": + {"daysAfterModificationGreaterThan": 1000.0}}, "snapshot": {"delete": {"daysAfterCreationGreaterThan": + 30.0}}}, "filters": {"prefixMatch": ["olcmtestcontainer"], "blobTypes": ["blockBlob"]}}}]}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '460' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/managementPolicies/default?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/managementPolicies/default","name":"DefaultManagementPolicy","type":"Microsoft.Storage/storageAccounts/managementPolicies","properties":{"policy":{"rules":[{"enabled":true,"name":"olcmtest","type":"Lifecycle","definition":{"actions":{"baseBlob":{"tierToCool":{"daysAfterModificationGreaterThan":30.0},"tierToArchive":{"daysAfterModificationGreaterThan":90.0},"delete":{"daysAfterModificationGreaterThan":1000.0}},"snapshot":{"delete":{"daysAfterCreationGreaterThan":30.0}}},"filters":{"blobTypes":["blockBlob"],"prefixMatch":["olcmtestcontainer"]}}}]},"lastModifiedTime":"2020-03-03T05:35:13.7589533Z"}}' + headers: + cache-control: + - no-cache + content-length: + - '785' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:13 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1196' + status: + code: 200 + message: OK +- request: + body: '{}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '2' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices/default/shares/filesharenamexxyyzz?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices/default/shares/filesharenamexxyyzz","name":"filesharenamexxyyzz","type":"Microsoft.Storage/storageAccounts/fileServices/shares"}' + headers: + cache-control: + - no-cache + content-length: + - '323' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:14 GMT + etag: + - '"0x8D7BF34A6753170"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1195' + status: + code: 201 + message: Created +- request: + body: '{}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '2' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz","name":"containernamexxyyzz","type":"Microsoft.Storage/storageAccounts/blobServices/containers"}' + headers: + cache-control: + - no-cache + content-length: + - '331' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:15 GMT + etag: + - '"0x8D7BF34A6D4A0F8"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1194' + status: + code: 201 + message: Created +- request: + body: '{"properties": {"immutabilityPeriodSinceCreationInDays": 3}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '60' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/immutabilityPolicies/default?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/immutabilityPolicies/default","name":"default","type":"Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies","etag":"\"8d7bf34a73ef319\"","properties":{"immutabilityPeriodSinceCreationInDays":3,"state":"Unlocked"}}' + headers: + cache-control: + - no-cache + content-length: + - '474' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:15 GMT + etag: + - '"8d7bf34a73ef319"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1193' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + If-Match: + - '"8d7bf34a73ef319"' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/immutabilityPolicies/default?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/immutabilityPolicies/default","name":"default","type":"Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies","etag":"\"8d7bf34a794c7cc\"","properties":{"immutabilityPeriodSinceCreationInDays":0,"state":"Deleted"}}' + headers: + cache-control: + - no-cache + content-length: + - '473' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:16 GMT + etag: + - '"8d7bf34a794c7cc"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14999' + status: + code: 200 + message: OK +- request: + body: '{"properties": {"immutabilityPeriodSinceCreationInDays": 3}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '60' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/immutabilityPolicies/default?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/immutabilityPolicies/default","name":"default","type":"Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies","etag":"\"8d7bf34a7e83a58\"","properties":{"immutabilityPeriodSinceCreationInDays":3,"state":"Unlocked"}}' + headers: + cache-control: + - no-cache + content-length: + - '474' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:16 GMT + etag: + - '"8d7bf34a7e83a58"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1192' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/immutabilityPolicies/default?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/immutabilityPolicies/default","name":"default","type":"Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies","etag":"\"8d7bf34a7e83a58\"","properties":{"immutabilityPeriodSinceCreationInDays":3,"state":"Unlocked"}}' + headers: + cache-control: + - no-cache + content-length: + - '474' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:17 GMT + etag: + - '"8d7bf34a7e83a58"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz","name":"containernamexxyyzz","type":"Microsoft.Storage/storageAccounts/blobServices/containers","etag":"\"0x8D7BF34A7EC856B\"","properties":{"publicAccess":"None","leaseStatus":"Unlocked","leaseState":"Available","lastModifiedTime":"2020-03-03T05:35:17.0000000Z","immutabilityPolicy":{"etag":"\"8d7bf34a7e83a58\"","properties":{"immutabilityPeriodSinceCreationInDays":3,"state":"Unlocked"},"updateHistory":[{"update":"put","immutabilityPeriodSinceCreationInDays":3,"timestamp":"2020-03-03T05:35:17.2589733Z","objectIdentifier":"123743cc-88ef-49ee-920e-13958fe5697d","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47"}]},"legalHold":{"hasLegalHold":false,"tags":[]},"hasImmutabilityPolicy":true,"hasLegalHold":false}}' + headers: + cache-control: + - no-cache + content-length: + - '950' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:19 GMT + etag: + - '"0x8D7BF34A7EC856B"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices/default/shares/filesharenamexxyyzz?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices/default/shares/filesharenamexxyyzz","name":"filesharenamexxyyzz","type":"Microsoft.Storage/storageAccounts/fileServices/shares","etag":"\"0x8D7BF34A6753170\"","properties":{"lastModifiedTime":"2020-03-03T05:35:14.0000000Z","shareQuota":5120}}' + headers: + cache-control: + - no-cache + content-length: + - '437' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:19 GMT + etag: + - '"0x8D7BF34A6753170"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/managementPolicies/default?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/managementPolicies/default","name":"DefaultManagementPolicy","type":"Microsoft.Storage/storageAccounts/managementPolicies","properties":{"policy":{"rules":[{"enabled":true,"name":"olcmtest","type":"Lifecycle","definition":{"actions":{"baseBlob":{"tierToCool":{"daysAfterModificationGreaterThan":30.0},"tierToArchive":{"daysAfterModificationGreaterThan":90.0},"delete":{"daysAfterModificationGreaterThan":1000.0}},"snapshot":{"delete":{"daysAfterCreationGreaterThan":30.0}}},"filters":{"blobTypes":["blockBlob"],"prefixMatch":["olcmtestcontainer"]}}}]},"lastModifiedTime":"2020-03-03T05:35:13.7589533Z"}}' + headers: + cache-control: + - no-cache + content-length: + - '785' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:19 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default?api-version=2019-06-01 + response: + body: + string: '{"sku":{"name":"Standard_GRS"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default","name":"default","type":"Microsoft.Storage/storageAccounts/blobServices","properties":{"cors":{"corsRules":[{"allowedOrigins":["http://www.contoso.com","http://www.fabrikam.com"],"allowedMethods":["GET","HEAD","POST","OPTIONS","MERGE","PUT"],"maxAgeInSeconds":100,"exposedHeaders":["x-ms-meta-*"],"allowedHeaders":["x-ms-meta-abc","x-ms-meta-data*","x-ms-meta-target*"]},{"allowedOrigins":["*"],"allowedMethods":["GET"],"maxAgeInSeconds":2,"exposedHeaders":["*"],"allowedHeaders":["*"]},{"allowedOrigins":["http://www.abc23.com","https://www.fabrikam.com/*"],"allowedMethods":["GET","PUT"],"maxAgeInSeconds":2000,"exposedHeaders":["x-ms-meta-abc","x-ms-meta-data*","x + -ms-meta-target*"],"allowedHeaders":["x-ms-meta-12345675754564*"]}]},"defaultServiceVersion":"2017-07-29","deleteRetentionPolicy":{"enabled":true,"days":300}}}' + headers: + cache-control: + - no-cache + content-length: + - '1061' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:20 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices/default?api-version=2019-06-01 + response: + body: + string: '{"sku":{"name":"Standard_GRS"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices/default","name":"default","type":"Microsoft.Storage/storageAccounts/fileServices","properties":{"cors":{"corsRules":[{"allowedOrigins":["http://www.contoso.com","http://www.fabrikam.com"],"allowedMethods":["GET","HEAD","POST","OPTIONS","MERGE","PUT"],"maxAgeInSeconds":100,"exposedHeaders":["x-ms-meta-*"],"allowedHeaders":["x-ms-meta-abc","x-ms-meta-data*","x-ms-meta-target*"]},{"allowedOrigins":["*"],"allowedMethods":["GET"],"maxAgeInSeconds":2,"exposedHeaders":["*"],"allowedHeaders":["*"]},{"allowedOrigins":["http://www.abc23.com","https://www.fabrikam.com/*"],"allowedMethods":["GET","PUT"],"maxAgeInSeconds":2000,"exposedHeaders":["x-ms-meta-abc","x-ms-meta-data*","x-ms-meta-target*"],"allowedHeaders":["x-ms-meta-12345675754564*"]}]}}}' + headers: + cache-control: + - no-cache + content-length: + - '971' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:20 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/privateLinkResources?api-version=2019-06-01 + response: + body: + string: '{"value":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/privateLinkResources/blob","name":"blob","type":"Microsoft.Storage/storageAccounts/privateLinkResources","properties":{"groupId":"blob","requiredMembers":["blob"],"requiredZoneNames":["privatelink.blob.core.windows.net"]}},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/privateLinkResources/table","name":"table","type":"Microsoft.Storage/storageAccounts/privateLinkResources","properties":{"groupId":"table","requiredMembers":["table"],"requiredZoneNames":["privatelink.table.core.windows.net"]}},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/privateLinkResources/queue","name":"queue","type":"Microsoft.Storage/storageAccounts/privateLinkResources","properties":{"groupId":"queue","requiredMembers":["queue"],"requiredZoneNames":["privatelink.queue.core.windows.net"]}},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/privateLinkResources/file","name":"file","type":"Microsoft.Storage/storageAccounts/privateLinkResources","properties":{"groupId":"file","requiredMembers":["file"],"requiredZoneNames":["privatelink.file.core.windows.net"]}},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/privateLinkResources/web","name":"web","type":"Microsoft.Storage/storageAccounts/privateLinkResources","properties":{"groupId":"web","requiredMembers":["web"],"requiredZoneNames":["privatelink.web.core.windows.net"]}},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/privateLinkResources/dfs","name":"dfs","type":"Microsoft.Storage/storageAccounts/privateLinkResources","properties":{"groupId":"dfs","requiredMembers":["dfs"],"requiredZoneNames":["privatelink.dfs.core.windows.net"]}}]}' + headers: + cache-control: + - no-cache + content-length: + - '2441' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:21 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices?api-version=2019-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_GRS"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices/default","name":"default","type":"Microsoft.Storage/storageAccounts/fileServices","properties":{"cors":{"corsRules":[{"allowedOrigins":["http://www.contoso.com","http://www.fabrikam.com"],"allowedMethods":["GET","HEAD","POST","OPTIONS","MERGE","PUT"],"maxAgeInSeconds":100,"exposedHeaders":["x-ms-meta-*"],"allowedHeaders":["x-ms-meta-abc","x-ms-meta-data*","x-ms-meta-target*"]},{"allowedOrigins":["*"],"allowedMethods":["GET"],"maxAgeInSeconds":2,"exposedHeaders":["*"],"allowedHeaders":["*"]},{"allowedOrigins":["http://www.abc23.com","https://www.fabrikam.com/*"],"allowedMethods":["GET","PUT"],"maxAgeInSeconds":2000,"exposedHeaders":["x-ms-meta-abc","x-ms-meta-data*","x-ms-meta-target*"],"allowedHeaders":["x-ms-meta-12345675754564*"]}]}}}]}' + headers: + cache-control: + - no-cache + content-length: + - '983' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:21 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz?api-version=2019-06-01 + response: + body: + string: '{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz","name":"storageaccountxxyyzz","type":"Microsoft.Storage/storageAccounts","location":"westeurope","tags":{"key1":"value1","key2":"value2"},"properties":{"privateEndpointConnections":[],"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2020-03-03T05:34:48.6650114Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2020-03-03T05:34:48.6650114Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2020-03-03T05:34:48.5712661Z","primaryEndpoints":{"dfs":"https://storageaccountxxyyzz.dfs.core.windows.net/","web":"https://storageaccountxxyyzz.z6.web.core.windows.net/","blob":"https://storageaccountxxyyzz.blob.core.windows.net/","queue":"https://storageaccountxxyyzz.queue.core.windows.net/","table":"https://storageaccountxxyyzz.table.core.windows.net/","file":"https://storageaccountxxyyzz.file.core.windows.net/"},"primaryLocation":"westeurope","statusOfPrimary":"available","secondaryLocation":"northeurope","statusOfSecondary":"available"}}' + headers: + cache-control: + - no-cache + content-length: + - '1430' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:22 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"tags": ["tags"]}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '18' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/setLegalHold?api-version=2019-06-01 + response: + body: + string: '{"hasLegalHold":true,"tags":["tags"]}' + headers: + cache-control: + - no-cache + content-length: + - '37' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:22 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 200 + message: OK +- request: + body: '{"tags": ["tags"]}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '18' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/clearLegalHold?api-version=2019-06-01 + response: + body: + string: '{"hasLegalHold":false,"tags":[]}' + headers: + cache-control: + - no-cache + content-length: + - '32' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:23 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1198' + status: + code: 200 + message: OK +- request: + body: '{"action": "Acquire", "leaseDuration": -1}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '42' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/lease?api-version=2019-06-01 + response: + body: + string: '{"leaseId":"7f9bc71a-fe95-4123-ad5f-a5ea6eab11be"}' + headers: + cache-control: + - no-cache + content-length: + - '50' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:25 GMT + etag: + - '"0x8D7BF34AC022F81"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1197' + status: + code: 200 + message: OK +- request: + body: '{"action": "Break", "leaseId": "7f9bc71a-fe95-4123-ad5f-a5ea6eab11be"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '70' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/lease?api-version=2019-06-01 + response: + body: + string: '{"leaseTimeSeconds":"0"}' + headers: + cache-control: + - no-cache + content-length: + - '24' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:25 GMT + etag: + - '"0x8D7BF34AC022F81"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1196' + status: + code: 200 + message: OK +- request: + body: '{"properties": {"publicAccess": "Container", "metadata": {"metadata": "true"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '79' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: PATCH + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz","name":"containernamexxyyzz","type":"Microsoft.Storage/storageAccounts/blobServices/containers","properties":{"metadata":{"metadata":"true"},"publicAccess":"Container","hasImmutabilityPolicy":false,"hasLegalHold":false}}' + headers: + cache-control: + - no-cache + content-length: + - '455' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:27 GMT + etag: + - '"0x8D7BF34AE2A2E9A"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1191' + status: + code: 200 + message: OK +- request: + body: '{"properties": {"metadata": {"properties": "{''metadata'': {''type'': ''image''}}"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '79' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: PATCH + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices/default/shares/filesharenamexxyyzz?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices/default/shares/filesharenamexxyyzz","name":"filesharenamexxyyzz","type":"Microsoft.Storage/storageAccounts/fileServices/shares","properties":{"metadata":{"properties":"{''metadata'': + {''type'': ''image''}}"}}}' + headers: + cache-control: + - no-cache + content-length: + - '398' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:27 GMT + etag: + - '"0x8D7BF34AE83A9A9"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1190' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/revokeUserDelegationKeys?api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:35:28 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1195' + status: + code: 200 + message: OK +- request: + body: '{"keyName": "key2"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '19' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/regenerateKey?api-version=2019-06-01 + response: + body: + string: '{"keys":[{"keyName":"key1","value":"8FTpyMYmp2t2alxHeNFcXwRz9c4Z5SerlfygLw3eo7DUvdaA3EPV9+S9GmyZ3e939umqh0uGPZ2gwpXhcDczMA==","permissions":"FULL"},{"keyName":"key2","value":"PxylAHO9LjdOFECepAT5Kdne3B0vsZHcNJJmLge0DcxvnSsYT26EpHYTpX0PXS5YcCLydzHCec95LpNa7SEOgQ==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '288' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:28 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1194' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/listKeys?api-version=2019-06-01 + response: + body: + string: '{"keys":[{"keyName":"key1","value":"8FTpyMYmp2t2alxHeNFcXwRz9c4Z5SerlfygLw3eo7DUvdaA3EPV9+S9GmyZ3e939umqh0uGPZ2gwpXhcDczMA==","permissions":"FULL"},{"keyName":"key2","value":"PxylAHO9LjdOFECepAT5Kdne3B0vsZHcNJJmLge0DcxvnSsYT26EpHYTpX0PXS5YcCLydzHCec95LpNa7SEOgQ==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '288' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:29 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-resource-requests: + - '11999' + status: + code: 200 + message: OK +- request: + body: '{"properties": {"encryption": {"services": {"blob": {"enabled": true, "keyType": + "Account"}, "file": {"enabled": true, "keyType": "Account"}}, "keySource": "Microsoft.Storage"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '178' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: PATCH + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz?api-version=2019-06-01 + response: + body: + string: '{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz","name":"storageaccountxxyyzz","type":"Microsoft.Storage/storageAccounts","location":"westeurope","tags":{"key1":"value1","key2":"value2"},"properties":{"privateEndpointConnections":[],"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2020-03-03T05:34:48.6650114Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2020-03-03T05:34:48.6650114Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2020-03-03T05:34:48.5712661Z","primaryEndpoints":{"dfs":"https://storageaccountxxyyzz.dfs.core.windows.net/","web":"https://storageaccountxxyyzz.z6.web.core.windows.net/","blob":"https://storageaccountxxyyzz.blob.core.windows.net/","queue":"https://storageaccountxxyyzz.queue.core.windows.net/","table":"https://storageaccountxxyyzz.table.core.windows.net/","file":"https://storageaccountxxyyzz.file.core.windows.net/"},"primaryLocation":"westeurope","statusOfPrimary":"available","secondaryLocation":"northeurope","statusOfSecondary":"available"}}' + headers: + cache-control: + - no-cache + content-length: + - '1430' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:35:30 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1189' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/failover?api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:35:30 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1193' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:35:52 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:36:09 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:36:27 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:36:44 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:37:02 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:37:19 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:37:37 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:37:54 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:38:12 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:38:30 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:38:48 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:39:06 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:39:30 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:39:49 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:40:06 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:40:23 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:40:41 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:40:58 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:41:16 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:41:33 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:41:51 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:42:09 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:42:26 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:42:43 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:43:01 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:43:18 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:43:37 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:43:54 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:44:11 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:44:29 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:44:46 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:45:03 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:45:21 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:45:38 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:45:55 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:46:14 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:46:31 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:46:49 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:47:07 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:47:24 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:47:42 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:47:59 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:48:16 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:48:33 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:48:51 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:49:08 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:49:25 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:49:43 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:50:00 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:50:18 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:50:36 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:50:53 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:51:11 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:51:28 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:51:45 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:52:03 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:52:20 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:52:37 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:52:55 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:53:12 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westeurope/asyncoperations/c6326386-528b-4241-b230-647eca2c78d5?monitor=true&api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:53:30 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + If-Match: + - '"8d7bf34a7e83a58"' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/immutabilityPolicies/default/lock?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/immutabilityPolicies/default","name":"default","type":"Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies","etag":"\"8d7bf3734faa99e\"","properties":{"immutabilityPeriodSinceCreationInDays":3,"state":"Locked"}}' + headers: + cache-control: + - no-cache + content-length: + - '472' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:53:32 GMT + etag: + - '"8d7bf3734faa99e"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1190' + status: + code: 200 + message: OK +- request: + body: '{"properties": {"immutabilityPeriodSinceCreationInDays": 100}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '62' + Content-Type: + - application/json; charset=utf-8 + If-Match: + - '"8d7bf3734faa99e"' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/immutabilityPolicies/default/extend?api-version=2019-06-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz/immutabilityPolicies/default","name":"default","type":"Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies","etag":"\"8d7bf37355c69e3\"","properties":{"immutabilityPeriodSinceCreationInDays":100,"state":"Locked"}}' + headers: + cache-control: + - no-cache + content-length: + - '474' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:53:33 GMT + etag: + - '"8d7bf37355c69e3"' + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1189' + status: + code: 200 + message: OK +- request: + body: '{"name": "sto3363", "type": "Microsoft.Storage/storageAccounts"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '64' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2019-06-01 + response: + body: + string: '{"nameAvailable":true}' + headers: + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json + date: + - Tue, 03 Mar 2020 05:53:34 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/blobServices/default/containers/containernamexxyyzz?api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:53:34 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14998' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/fileServices/default/shares/filesharenamexxyyzz?api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:53:35 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14997' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz/managementPolicies/default?api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:53:36 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14996' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.9 (Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic) msrest/0.6.10 + msrest_azure/0.6.2 azure-mgmt-storage/7.2.0 Azure-SDK-For-Python + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_cli_mgmt_storage_test_storagef61c0e02/providers/Microsoft.Storage/storageAccounts/storageaccountxxyyzz?api-version=2019-06-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + content-type: + - text/plain; charset=utf-8 + date: + - Tue, 03 Mar 2020 05:53:44 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14995' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-mgmt-storage/tests/test_cli_mgmt_storage.py b/sdk/storage/azure-mgmt-storage/tests/test_cli_mgmt_storage.py new file mode 100644 index 000000000000..5e7fba9f0dde --- /dev/null +++ b/sdk/storage/azure-mgmt-storage/tests/test_cli_mgmt_storage.py @@ -0,0 +1,743 @@ +# coding: utf-8 + +#------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +#-------------------------------------------------------------------------- + + +# TEST SCENARIO COVERAGE +# ---------------------- +# Methods Total : 52 +# Methods Covered : 52 +# Examples Total : 55 +# Examples Tested : 55 +# Coverage % : 100 +# ---------------------- + +# current methods coverage: 42 + +import datetime as dt +import unittest + +import azure.mgmt.storage +# import azure.mgmt.network +from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer + +AZURE_LOCATION = 'westeurope' +ZERO = dt.timedelta(0) + +class UTC(dt.tzinfo): + """UTC""" + + def utcoffset(self, dt): + return ZERO + + def tzname(self, dt): + return "UTC" + + def dst(self, dt): + return ZERO + +class MgmtStorageTest(AzureMgmtTestCase): + + def setUp(self): + super(MgmtStorageTest, self).setUp() + self.mgmt_client = self.create_mgmt_client( + azure.mgmt.storage.StorageManagementClient + ) + # self.network_client = self.create_mgmt_client( + # azure.mgmt.network.NetworkManagementClient + # ) + + @ResourceGroupPreparer(location=AZURE_LOCATION) + def test_storage(self, resource_group): + + SERVICE_NAME = "myapimrndxyz" + SUBSCRIPTION_ID = self.settings.SUBSCRIPTION_ID + RESOURCE_GROUP = resource_group.name + STORAGE_ACCOUNT_NAME = "storageaccountxxyyzz" + FILE_SERVICE_NAME = "fileservicexxyyzz" + SHARE_NAME = "filesharenamexxyyzz" + BLOB_SERVICE_NAME = "blobservicexxyyzz" + CONTAINER_NAME = "containernamexxyyzz" + ENCRYPTION_SCOPE_NAME = "encryptionscopexxyyzz" + IMMUTABILITY_POLICY_NAME = "immutabilitypolicynamexxyyzz" + VNET_NAME = "virualnetwork111" + SUB_NET = "subnet111" + LOAD_BALANCER = "loaderbalancer" + FIPCONFIG = "fipconfig123" + BAPOOL = "bapool123" + PROBES = "probe123" + PRIVATE_ENDPOINT_CONNECTION_NAME = "privateEndpointConnection" + + """ TODO: set up for endpoint + # -- SET UP -- + # Create VNet + async_vnet_creation = self.network_client.virtual_networks.create_or_update( + resource_group.name, + VNET_NAME, + { + 'location': AZURE_LOCATION, + 'address_space': { + 'address_prefixes': ['10.0.0.0/16'] + } + } + ) + async_vnet_creation.wait() + + # Create Subnet + async_subnet_creation = self.network_client.subnets.create_or_update( + resource_group.name, + VNET_NAME, + SUB_NET, + { + 'address_prefix': '10.0.0.0/24', + 'private_link_service_network_policies': 'disabled', + 'private_endpoint_network_policies': 'disabled' + } + ) + subnet_info = async_subnet_creation.result() + + # Create load balancer + BODY = { + "location": "westeurope", + "sku": { + "name": "Standard" + }, + "properties": { + "frontendIPConfigurations": [ + { + "name": FIPCONFIG, + "properties": { + "subnet": { + "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VNET_NAME + "/subnets/" + SUB_NET + } + } + } + ], + } + } + + result = self.network_client.load_balancers.create_or_update(resource_group.name, LOAD_BALANCER, BODY) + result.result() + + # Create private link services + PRIVATE_LINK_SERVICES = "privatelinkservice" + BODY = { + "location": "westeurope", + "properties": { + "visibility": { + "subscriptions": [ + SUBSCRIPTION_ID + ] + }, + "autoApproval": { + "subscriptions": [ + SUBSCRIPTION_ID + ] + }, + "fqdns": [ + # "fqdn1", + # "fqdn2", + # "fqdn3" + ], + "loadBalancerFrontendIpConfigurations": [ + { + "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/loadBalancers/" + LOAD_BALANCER + "/frontendIPConfigurations/" + FIPCONFIG, + } + ], + "ipConfigurations": [ + { + "name": FIPCONFIG, + "properties": { + "privateIPAddress": "10.0.0.5", + "privateIPAllocationMethod": "Static", + "privateIPAddressVersion": "IPv4", + "subnet": { + "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VNET_NAME + "/subnets/" + SUB_NET + } + } + } + ] + } + } + result = self.network_client.private_link_services.create_or_update(resource_group.name, PRIVATE_LINK_SERVICES, BODY) + + # Create private endpoint + PRIVATE_ENDPOINT = "privateendpoint" + BODY = { + "location": "westeurope", + "properties": { + "privateLinkServiceConnections": [ + { + "name": PRIVATE_LINK_SERVICES, # TODO: This is needed, but was not showed in swagger. + "private_link_service_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/privateLinkServices/" + PRIVATE_LINK_SERVICES, + }, + { + "name": PRIVATE_ENDPOINT_CONNECTION_NAME, + "private_link_service_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Storage/storageAccounts/" + STORAGE_ACCOUNT_NAME + "" + } + ], + "subnet": { + "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/virtualNetworks/" + VNET_NAME + "/subnets/" + SUB_NET + } + } + } + result = self.network_client.private_endpoints.create_or_update(resource_group.name, PRIVATE_ENDPOINT, BODY) + # -- SET UP END -- + """ + + # StorageAccountCreate[put] + BODY = { + "sku": { + "name": "Standard_GRS" + }, + # "kind": "Storage", + "kind": "StorageV2", # Storage v2 support policy + "location": "westeurope", + + # TODO: The value 'True' is not allowed for property isHnsEnabled + # "is_hns_enabled": True, + # TODO:Unsupport + # "routing_preference": { + # "routing_choice": "MicrosoftRouting", + # "publish_microsoft_endpoints": True, + # "publish_internet_endpoints": True + # }, + "encryption": { + "services": { + "file": { + "key_type": "Account", + "enabled": True + }, + "blob": { + "key_type": "Account", + "enabled": True + } + }, + "key_source": "Microsoft.Storage" + }, + + "tags": { + "key1": "value1", + "key2": "value2" + } + } + result = self.mgmt_client.storage_accounts.create(resource_group.name, STORAGE_ACCOUNT_NAME, BODY) + result = result.result() + + # PutFileServices[put] + BODY = { + "cors": { + "cors_rules": [ + { + "allowed_origins": [ + "http://www.contoso.com", + "http://www.fabrikam.com" + ], + "allowed_methods": [ + "GET", + "HEAD", + "POST", + "OPTIONS", + "MERGE", + "PUT" + ], + "max_age_in_seconds": "100", + "exposed_headers": [ + "x-ms-meta-*" + ], + "allowed_headers": [ + "x-ms-meta-abc", + "x-ms-meta-data*", + "x-ms-meta-target*" + ] + }, + { + "allowed_origins": [ + "*" + ], + "allowed_methods": [ + "GET" + ], + "max_age_in_seconds": "2", + "exposed_headers": [ + "*" + ], + "allowed_headers": [ + "*" + ] + }, + { + "allowed_origins": [ + "http://www.abc23.com", + "https://www.fabrikam.com/*" + ], + "allowed_methods": [ + "GET", + "PUT" + ], + "max_age_in_seconds": "2000", + "exposed_headers": [ + "x-ms-meta-abc", + "x-ms-meta-data*", + "x-ms-meta-target*" + ], + "allowed_headers": [ + "x-ms-meta-12345675754564*" + ] + } + ] + } + } + result = self.mgmt_client.file_services.set_service_properties(resource_group.name, STORAGE_ACCOUNT_NAME, BODY["cors"]) + + # PutBlobServices[put] + BODY = { + "cors": { + "cors_rules": [ + { + "allowed_origins": [ + "http://www.contoso.com", + "http://www.fabrikam.com" + ], + "allowed_methods": [ + "GET", + "HEAD", + "POST", + "OPTIONS", + "MERGE", + "PUT" + ], + "max_age_in_seconds": "100", + "exposed_headers": [ + "x-ms-meta-*" + ], + "allowed_headers": [ + "x-ms-meta-abc", + "x-ms-meta-data*", + "x-ms-meta-target*" + ] + }, + { + "allowed_origins": [ + "*" + ], + "allowed_methods": [ + "GET" + ], + "max_age_in_seconds": "2", + "exposed_headers": [ + "*" + ], + "allowed_headers": [ + "*" + ] + }, + { + "allowed_origins": [ + "http://www.abc23.com", + "https://www.fabrikam.com/*" + ], + "allowed_methods": [ + "GET", + "PUT" + ], + "max_age_in_seconds": "2000", + "exposed_headers": [ + "x-ms-meta-abc", + "x-ms-meta-data*", + "x -ms-meta-target*" + ], + "allowed_headers": [ + "x-ms-meta-12345675754564*" + ] + } + ] + }, + "default_service_version": "2017-07-29", + "delete_retention_policy": { + "enabled": True, + "days": "300" + }, + "is_versioning_enabled": True, + # TODO: unsupport + # "change_feed": { + # "enabled": True + # } + } + result = self.mgmt_client.blob_services.set_service_properties(resource_group.name, STORAGE_ACCOUNT_NAME, BODY) + + # TODO: don't have encryption scopes + # # StorageAccountPutEncryptionScope[put] + # BODY = {} + # result = self.mgmt_client.encryption_scopes.put(resource_group.name, STORAGE_ACCOUNT_NAME, ENCRYPTION_SCOPE_NAME, BODY) + + MANAGEMENT_POLICY_NAME = "managementPolicy" + # StorageAccountSetManagementPolicies[put] + BODY = { + "rules": [ + { + "enabled": True, + "name": "olcmtest", + "type": "Lifecycle", + "definition": { + "filters": { + "blob_types": [ + "blockBlob" + ], + "prefix_match": [ + "olcmtestcontainer" + ] + }, + "actions": { + "base_blob": { + "tier_to_cool": { + "days_after_modification_greater_than": "30" + }, + "tier_to_archive": { + "days_after_modification_greater_than": "90" + }, + "delete": { + "days_after_modification_greater_than": "1000" + } + }, + "snapshot": { + "delete": { + "days_after_creation_greater_than": "30" + } + } + } + } + } + ] + } + result = self.mgmt_client.management_policies.create_or_update(resource_group.name, STORAGE_ACCOUNT_NAME, BODY) + + # PutShares[put] + result = self.mgmt_client.file_shares.create(resource_group.name, STORAGE_ACCOUNT_NAME, SHARE_NAME) + + """TODO: not found + # PRIVATE_ENDPOINT_CONNECTION_NAME = "privateEndpointConnection" + # StorageAccountPutPrivateEndpointConnection[put] + BODY = { + # "private_endpoint": { + # "id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.Network/privateEndpoints/" + PRIVATE_ENDPOINT + # }, + "private_link_service_connection_state": { + "status": "Approved", + "description": "Auto-Approved" + } + } + result = self.mgmt_client.private_endpoint_connections.put(resource_group.name, STORAGE_ACCOUNT_NAME, PRIVATE_ENDPOINT_CONNECTION_NAME, BODY) + """ + + # PutContainers[put] + result = self.mgmt_client.blob_containers.create(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME) + + # CreateOrUpdateImmutabilityPolicy[put] + # BODY = { + # "properties": { + # "immutability_period_since_creation_in_days": "3", + # "allow_protected_append_writes": True + # } + # } + DAYS = 3 + result = self.mgmt_client.blob_containers.create_or_update_immutability_policy(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, DAYS) + ETAG = result.etag + + # DeleteImmutabilityPolicy[delete] + result = self.mgmt_client.blob_containers.delete_immutability_policy(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, ETAG) + + # CreateOrUpdateImmutabilityPolicy[put] again + DAYS = 3 + result = self.mgmt_client.blob_containers.create_or_update_immutability_policy(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, DAYS) + ETAG = result.etag + + # GetImmutabilityPolicy[get] + result = self.mgmt_client.blob_containers.get_immutability_policy(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME) + + # GetContainers[get] + result = self.mgmt_client.blob_containers.get(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME) + + # # StorageAccountGetPrivateEndpointConnection[get] + # result = self.mgmt_client.private_endpoint_connections.get(resource_group.name, STORAGE_ACCOUNT_NAME, PRIVATE_ENDPOINT_CONNECTION_NAME) + + # GetShares[get] + result = self.mgmt_client.file_shares.get(resource_group.name, STORAGE_ACCOUNT_NAME, SHARE_NAME) + + # StorageAccountGetManagementPolicies[get] + result = self.mgmt_client.management_policies.get(resource_group.name, STORAGE_ACCOUNT_NAME) + + # ListContainers[get] + result = self.mgmt_client.blob_containers.list(resource_group.name, STORAGE_ACCOUNT_NAME) + + # TODO: don't have encryption scopes + # # StorageAccountGetEncryptionScope[get] + # result = self.mgmt_client.encryption_scopes.get(resource_group.name, STORAGE_ACCOUNT_NAME, ENCRYPTION_SCOPE_NAME) + + # ListShares[get] + result = self.mgmt_client.file_shares.list(resource_group.name, STORAGE_ACCOUNT_NAME) + + # GetBlobServices[get] + result = self.mgmt_client.blob_services.get_service_properties(resource_group.name, STORAGE_ACCOUNT_NAME) + + # GetFileServices[get] + result = self.mgmt_client.file_services.get_service_properties(resource_group.name, STORAGE_ACCOUNT_NAME) + + # StorageAccountListPrivateLinkResources[get] + result = self.mgmt_client.private_link_resources.list_by_storage_account(resource_group.name, STORAGE_ACCOUNT_NAME) + + # TODO: don't have encryption scopes + # # StorageAccountEncryptionScopeList[get] + # result = self.mgmt_client.encryption_scopes.list(resource_group.name, STORAGE_ACCOUNT_NAME) + + # ListBlobServices[get] + result = self.mgmt_client.blob_services.list(resource_group.name, STORAGE_ACCOUNT_NAME) + + # ListFileServices[get] + result = self.mgmt_client.file_services.list(resource_group.name, STORAGE_ACCOUNT_NAME) + + # StorageAccountGetProperties[get] + result = self.mgmt_client.storage_accounts.get_properties(resource_group.name, STORAGE_ACCOUNT_NAME) + + # StorageAccountListByResourceGroup[get] + result = self.mgmt_client.storage_accounts.list_by_resource_group(resource_group.name) + + LOCATION_NAME = "westeurope" + # UsageList[get] + result = self.mgmt_client.usages.list_by_location(LOCATION_NAME) + + # StorageAccountList[get] + result = self.mgmt_client.storage_accounts.list() + + # SkuList[get] + result = self.mgmt_client.skus.list() + + # OperationsList[get] + result = self.mgmt_client.operations.list() + + + + # SetLegalHoldContainers[post] + BODY = { + "tags": [ + "tag1", + "tag2", + "tag3" + ] + } + result = self.mgmt_client.blob_containers.set_legal_hold(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, BODY) + + # ClearLegalHoldContainers[post] + BODY = { + "tags": [ + "tag1", + "tag2", + "tag3" + ] + } + result = self.mgmt_client.blob_containers.clear_legal_hold(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, BODY) + + # Acquire a lease on a container[post] + BODY = { + "action": "Acquire", + "lease_duration": "-1" + } + result = self.mgmt_client.blob_containers.lease(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, BODY) + LEASE_ID = result.lease_id + + # Break a lease on a container[post] + BODY = { + "action": "Break", + "lease_id": LEASE_ID + } + result = self.mgmt_client.blob_containers.lease(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, BODY) + + # UpdateContainers[patch] + BODY = { + "public_access": "Container", + "metadata": { + "metadata": "true" + } + } + result = self.mgmt_client.blob_containers.update(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, BODY["public_access"], BODY["metadata"]) + + # UpdateShares[patch] + BODY = { + "properties": { + "metadata": { + "type": "image" + } + } + } + result = self.mgmt_client.file_shares.update(resource_group.name, STORAGE_ACCOUNT_NAME, SHARE_NAME, BODY) + + # TODO: don't have encryption scopes + # # StorageAccountPatchEncryptionScope[patch] + # BODY = { + # "source": "Microsoft.KeyVault", + # "key_vault_properties": { + # "key_uri": "https://testvault.vault.core.windows.net/keys/key1/863425f1358359c" + # } + # } + # result = self.mgmt_client.encryption_scopes.patch(resource_group.name, STORAGE_ACCOUNT_NAME, ENCRYPTION_SCOPE_NAME, BODY) + + # StorageAccountRevokeUserDelegationKeys[post] + result = self.mgmt_client.storage_accounts.revoke_user_delegation_keys(resource_group.name, STORAGE_ACCOUNT_NAME) + + # # TODO: FeatureUnavailableInLocation + # # # BlobRangesRestore[post] + # time_to_restore = (dt.datetime.now(tz=UTC()) - dt.timedelta(minutes=10)).isoformat() + # BODY = { + # "time_to_restore": time_to_restore, + # "blob_ranges": [ + # { + # "start_range": "container/blobpath1", + # "end_range": "container/blobpath2" + # }, + # { + # "start_range": "container2/blobpath3", + # "end_range": "" + # } + # ] + # } + # result = self.mgmt_client.storage_accounts.restore_blob_ranges(resource_group.name, STORAGE_ACCOUNT_NAME, BODY["time_to_restore"], BODY["blob_ranges"]) + # result = result.result() + + # # TODO: Wrong parameters + # StorageAccountListServiceSAS[post] + # signed_expiry = (dt.datetime.now(tz=UTC()) - dt.timedelta(days=2)).isoformat() + # BODY = { + # "canonicalized_resource": "/blob/sto1299/music", + # "signed_resource": "c", + # "signed_permission": "l", + # "signed_expiry": signed_expiry + # } + # result = self.mgmt_client.storage_accounts.list_service_sas(resource_group.name, STORAGE_ACCOUNT_NAME, BODY) + + # TODO: Wrong parameters + # # StorageAccountListAccountSAS[post] + # signed_start = dt.datetime.now(tz=UTC()).isoformat() + # BODY = { + # "signed_services": "b", + # "signed_resource_types": "s", + # "signed_permission": "r", + # "signed_protocol": "https,http", + # "signed_start": signed_start, + # "signed_expiry": signed_expiry, + # "key_to_sign": "key1" + # } + # result = self.mgmt_client.storage_accounts.list_account_sas(resource_group.name, STORAGE_ACCOUNT_NAME, BODY) + + # StorageAccountRegenerateKey[post] + # BODY = { + # "key_name": "key2" + # } + KEY_NAME = "key2" + result = self.mgmt_client.storage_accounts.regenerate_key(resource_group.name, STORAGE_ACCOUNT_NAME, KEY_NAME) + + """ TODO: Key name kerb2 is not valid. + # StorageAccountRegenerateKerbKey[post] + # BODY = { + # "key_name": "kerb2" + # } + KEY_NAME = "kerb2" + result = self.mgmt_client.storage_accounts.regenerate_key(resource_group.name, STORAGE_ACCOUNT_NAME, KEY_NAME) + """ + + # StorageAccountListKeys[post] + result = self.mgmt_client.storage_accounts.list_keys(resource_group.name, STORAGE_ACCOUNT_NAME) + + # """ TODO: FeatureUnavailableInLocation + # # StorageAccountEnableAD[patch] + # BODY = { + # "azure_files_identity_based_authentication": { + # "directory_service_options": "AD", + # "active_directory_properties": { + # "domain_name": "adtest.com", + # "net_bios_domain_name": "adtest.com", + # "forest_name": "adtest.com", + # "domain_guid": "aebfc118-9fa9-4732-a21f-d98e41a77ae1", + # "domain_sid": "S-1-5-21-2400535526-2334094090-2402026252", + # "azure_storage_sid": "S-1-5-21-2400535526-2334094090-2402026252-0012" + # } + # } + # } + # result = self.mgmt_client.storage_accounts.update(resource_group.name, STORAGE_ACCOUNT_NAME, BODY) + # """ + + # StorageAccountUpdate[patch] + BODY = { + "network_acls": { + "default_action": "Allow" + }, + # TODO: Message: Routing Preferences is not supported for the account. + # "routing_preference": { + # "routing_choice": "MicrosoftRouting", + # "publish_microsoft_endpoints": True, + # "publish_internet_endpoints": True + # }, + "encryption": { + "services": { + "file": { + "key_type": "Account", + "enabled": True + }, + "blob": { + "key_type": "Account", + "enabled": True + } + }, + "key_source": "Microsoft.Storage" + } + } + result = self.mgmt_client.storage_accounts.update(resource_group.name, STORAGE_ACCOUNT_NAME, BODY) + + # StorageAccountFailover + result = self.mgmt_client.storage_accounts.failover(resource_group.name, STORAGE_ACCOUNT_NAME) + result = result.result() + + # LockImmutabilityPolicy[post] + result = self.mgmt_client.blob_containers.lock_immutability_policy(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, ETAG) + ETAG = result.etag + + # ExtendImmutabilityPolicy[post] + # BODY = { + # "properties": { + # "immutability_period_since_creation_in_days": "100" + # } + # } + DAYS = 100 + result = self.mgmt_client.blob_containers.extend_immutability_policy(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, ETAG, DAYS) + ETAG = result.etag + + # StorageAccountCheckNameAvailability[post] + # BODY = { + # "name": "sto3363", + # "type": "Microsoft.Storage/storageAccounts" + # } + NAME = "sto3363" + result = self.mgmt_client.storage_accounts.check_name_availability(NAME) + + # DeleteContainers[delete] + result = self.mgmt_client.blob_containers.delete(resource_group.name, STORAGE_ACCOUNT_NAME, CONTAINER_NAME) + + # # StorageAccountDeletePrivateEndpointConnection[delete] + # result = self.mgmt_client.private_endpoint_connections.delete(resource_group.name, STORAGE_ACCOUNT_NAME, PRIVATE_ENDPOINT_CONNECTION_NAME) + + # DeleteShares[delete] + result = self.mgmt_client.file_shares.delete(resource_group.name, STORAGE_ACCOUNT_NAME, SHARE_NAME) + + # StorageAccountDeleteManagementPolicies[delete] + result = self.mgmt_client.management_policies.delete(resource_group.name, STORAGE_ACCOUNT_NAME) + + # StorageAccountDelete[delete] + result = self.mgmt_client.storage_accounts.delete(resource_group.name, STORAGE_ACCOUNT_NAME) + + +#------------------------------------------------------------------------------ +if __name__ == '__main__': + unittest.main() diff --git a/sdk/storage/azure-storage-blob/CHANGELOG.md b/sdk/storage/azure-storage-blob/CHANGELOG.md index b9b120d3a2f1..85c5ee0cb456 100644 --- a/sdk/storage/azure-storage-blob/CHANGELOG.md +++ b/sdk/storage/azure-storage-blob/CHANGELOG.md @@ -1,6 +1,14 @@ # Release History -## 12.2.1 (Unreleased) +## 12.3.0 (2020-03-10) + +**New features** + +- `stage_block` now propagates the response from the service. + +**Fixes** +- Fixed a bug where a new transport is being passed in the `get_blob_client` method instead +of using the existing one in the `ContainerClient`. **Notes** - The `StorageUserAgentPolicy` is now replaced with the `UserAgentPolicy` from azure-core. With this, the custom user agents are now added as a prefix instead of being appended. diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client.py index 115d74bec9b1..311c8b727348 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client.py @@ -1624,6 +1624,7 @@ def _stage_block_options( 'validate_content': validate_content, 'cpk_scope_info': cpk_scope_info, 'cpk_info': cpk_info, + 'cls': return_response_headers, } options.update(kwargs) return options @@ -1635,7 +1636,7 @@ def stage_block( length=None, # type: Optional[int] **kwargs ): - # type: (...) -> None + # type: (...) -> Dict[str, Any] """Creates a new block to be committed as part of a blob. :param str block_id: A valid Base64 string value that identifies the @@ -1674,7 +1675,8 @@ def stage_block( :keyword int timeout: The timeout parameter is expressed in seconds. - :rtype: None + :returns: Blob property dict. + :rtype: dict[str, Any] """ options = self._stage_block_options( block_id, @@ -1682,7 +1684,7 @@ def stage_block( length=length, **kwargs) try: - self._client.block_blob.stage_block(**options) + return self._client.block_blob.stage_block(**options) except StorageErrorException as error: process_storage_error(error) @@ -1737,7 +1739,7 @@ def stage_block_from_url( source_content_md5=None, # type: Optional[Union[bytes, bytearray]] **kwargs ): - # type: (...) -> None + # type: (...) -> Dict[str, Any] """Creates a new block to be committed as part of a blob where the contents are read from a URL. @@ -1772,7 +1774,8 @@ def stage_block_from_url( :keyword int timeout: The timeout parameter is expressed in seconds. - :rtype: None + :returns: Blob property dict. + :rtype: dict[str, Any] """ options = self._stage_block_from_url_options( block_id, @@ -1782,7 +1785,7 @@ def stage_block_from_url( source_content_md5=source_content_md5, **kwargs) try: - self._client.block_blob.stage_block_from_url(**options) + return self._client.block_blob.stage_block_from_url(**options) except StorageErrorException as error: process_storage_error(error) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations_async/_container_operations_async.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations_async/_container_operations_async.py index 635a98cfbc6e..5f2635477d3a 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations_async/_container_operations_async.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations_async/_container_operations_async.py @@ -77,9 +77,9 @@ async def create(self, timeout=None, metadata=None, access=None, request_id=None default_encryption_scope = None if container_cpk_scope_info is not None: default_encryption_scope = container_cpk_scope_info.default_encryption_scope - deny_encryption_scope_override = None + prevent_encryption_scope_override = None if container_cpk_scope_info is not None: - deny_encryption_scope_override = container_cpk_scope_info.deny_encryption_scope_override + prevent_encryption_scope_override = container_cpk_scope_info.prevent_encryption_scope_override restype = "container" @@ -107,8 +107,8 @@ async def create(self, timeout=None, metadata=None, access=None, request_id=None header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str') if default_encryption_scope is not None: header_parameters['x-ms-default-encryption-scope'] = self._serialize.header("default_encryption_scope", default_encryption_scope, 'str') - if deny_encryption_scope_override is not None: - header_parameters['x-ms-deny-encryption-scope-override'] = self._serialize.header("deny_encryption_scope_override", deny_encryption_scope_override, 'bool') + if prevent_encryption_scope_override is not None: + header_parameters['x-ms-deny-encryption-scope-override'] = self._serialize.header("prevent_encryption_scope_override", prevent_encryption_scope_override, 'bool') # Construct and send request request = self._client.put(url, query_parameters, header_parameters) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_azure_blob_storage_enums.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_azure_blob_storage_enums.py index 966e2e9c3248..382b7cb703ba 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_azure_blob_storage_enums.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_azure_blob_storage_enums.py @@ -167,6 +167,7 @@ class StorageErrorCode(str, Enum): lease_not_present_with_container_operation = "LeaseNotPresentWithContainerOperation" lease_not_present_with_lease_operation = "LeaseNotPresentWithLeaseOperation" max_blob_size_condition_not_met = "MaxBlobSizeConditionNotMet" + no_authentication_information = "NoAuthenticationInformation" no_pending_copy_operation = "NoPendingCopyOperation" operation_not_allowed_on_incremental_copy_blob = "OperationNotAllowedOnIncrementalCopyBlob" pending_copy_operation = "PendingCopyOperation" diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_models.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_models.py index e442dc31aae6..52da5f19ef71 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_models.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_models.py @@ -16,22 +16,14 @@ class AccessPolicy(Model): """An Access policy. - All required parameters must be populated in order to send to Azure. - - :param start: Required. the date-time the policy is active + :param start: the date-time the policy is active :type start: str - :param expiry: Required. the date-time the policy expires + :param expiry: the date-time the policy expires :type expiry: str - :param permission: Required. the permissions for the acl policy + :param permission: the permissions for the acl policy :type permission: str """ - _validation = { - 'start': {'required': True}, - 'expiry': {'required': True}, - 'permission': {'required': True}, - } - _attribute_map = { 'start': {'key': 'Start', 'type': 'str', 'xml': {'name': 'Start'}}, 'expiry': {'key': 'Expiry', 'type': 'str', 'xml': {'name': 'Expiry'}}, @@ -547,15 +539,15 @@ class ContainerCpkScopeInfo(Model): Specifies the default encryption scope to set on the container and use for all future writes. :type default_encryption_scope: str - :param deny_encryption_scope_override: Optional. Version 2019-07-07 and - newer. If true, prevents any request from specifying a different + :param prevent_encryption_scope_override: Optional. Version 2019-07-07 + and newer. If true, prevents any request from specifying a different encryption scope than the scope set on the container. - :type deny_encryption_scope_override: bool + :type prevent_encryption_scope_override: bool """ _attribute_map = { 'default_encryption_scope': {'key': '', 'type': 'str', 'xml': {'name': 'default_encryption_scope'}}, - 'deny_encryption_scope_override': {'key': '', 'type': 'bool', 'xml': {'name': 'deny_encryption_scope_override'}}, + 'prevent_encryption_scope_override': {'key': '', 'type': 'bool', 'xml': {'name': 'prevent_encryption_scope_override'}}, } _xml_map = { } @@ -563,7 +555,7 @@ class ContainerCpkScopeInfo(Model): def __init__(self, **kwargs): super(ContainerCpkScopeInfo, self).__init__(**kwargs) self.default_encryption_scope = kwargs.get('default_encryption_scope', None) - self.deny_encryption_scope_override = kwargs.get('deny_encryption_scope_override', None) + self.prevent_encryption_scope_override = kwargs.get('prevent_encryption_scope_override', None) class ContainerItem(Model): @@ -624,8 +616,8 @@ class ContainerProperties(Model): :type has_legal_hold: bool :param default_encryption_scope: :type default_encryption_scope: str - :param deny_encryption_scope_override: - :type deny_encryption_scope_override: bool + :param prevent_encryption_scope_override: + :type prevent_encryption_scope_override: bool """ _validation = { @@ -643,7 +635,7 @@ class ContainerProperties(Model): 'has_immutability_policy': {'key': 'HasImmutabilityPolicy', 'type': 'bool', 'xml': {'name': 'HasImmutabilityPolicy'}}, 'has_legal_hold': {'key': 'HasLegalHold', 'type': 'bool', 'xml': {'name': 'HasLegalHold'}}, 'default_encryption_scope': {'key': 'DefaultEncryptionScope', 'type': 'str', 'xml': {'name': 'DefaultEncryptionScope'}}, - 'deny_encryption_scope_override': {'key': 'DenyEncryptionScopeOverride', 'type': 'bool', 'xml': {'name': 'DenyEncryptionScopeOverride'}}, + 'prevent_encryption_scope_override': {'key': 'DenyEncryptionScopeOverride', 'type': 'bool', 'xml': {'name': 'DenyEncryptionScopeOverride'}}, } _xml_map = { } @@ -659,7 +651,7 @@ def __init__(self, **kwargs): self.has_immutability_policy = kwargs.get('has_immutability_policy', None) self.has_legal_hold = kwargs.get('has_legal_hold', None) self.default_encryption_scope = kwargs.get('default_encryption_scope', None) - self.deny_encryption_scope_override = kwargs.get('deny_encryption_scope_override', None) + self.prevent_encryption_scope_override = kwargs.get('prevent_encryption_scope_override', None) class CorsRule(Model): diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_models_py3.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_models_py3.py index 10738de1a089..e7c30810cc86 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_models_py3.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_models_py3.py @@ -16,22 +16,14 @@ class AccessPolicy(Model): """An Access policy. - All required parameters must be populated in order to send to Azure. - - :param start: Required. the date-time the policy is active + :param start: the date-time the policy is active :type start: str - :param expiry: Required. the date-time the policy expires + :param expiry: the date-time the policy expires :type expiry: str - :param permission: Required. the permissions for the acl policy + :param permission: the permissions for the acl policy :type permission: str """ - _validation = { - 'start': {'required': True}, - 'expiry': {'required': True}, - 'permission': {'required': True}, - } - _attribute_map = { 'start': {'key': 'Start', 'type': 'str', 'xml': {'name': 'Start'}}, 'expiry': {'key': 'Expiry', 'type': 'str', 'xml': {'name': 'Expiry'}}, @@ -40,7 +32,7 @@ class AccessPolicy(Model): _xml_map = { } - def __init__(self, *, start: str, expiry: str, permission: str, **kwargs) -> None: + def __init__(self, *, start: str=None, expiry: str=None, permission: str=None, **kwargs) -> None: super(AccessPolicy, self).__init__(**kwargs) self.start = start self.expiry = expiry @@ -547,23 +539,23 @@ class ContainerCpkScopeInfo(Model): Specifies the default encryption scope to set on the container and use for all future writes. :type default_encryption_scope: str - :param deny_encryption_scope_override: Optional. Version 2019-07-07 and - newer. If true, prevents any request from specifying a different + :param prevent_encryption_scope_override: Optional. Version 2019-07-07 + and newer. If true, prevents any request from specifying a different encryption scope than the scope set on the container. - :type deny_encryption_scope_override: bool + :type prevent_encryption_scope_override: bool """ _attribute_map = { 'default_encryption_scope': {'key': '', 'type': 'str', 'xml': {'name': 'default_encryption_scope'}}, - 'deny_encryption_scope_override': {'key': '', 'type': 'bool', 'xml': {'name': 'deny_encryption_scope_override'}}, + 'prevent_encryption_scope_override': {'key': '', 'type': 'bool', 'xml': {'name': 'prevent_encryption_scope_override'}}, } _xml_map = { } - def __init__(self, *, default_encryption_scope: str=None, deny_encryption_scope_override: bool=None, **kwargs) -> None: + def __init__(self, *, default_encryption_scope: str=None, prevent_encryption_scope_override: bool=None, **kwargs) -> None: super(ContainerCpkScopeInfo, self).__init__(**kwargs) self.default_encryption_scope = default_encryption_scope - self.deny_encryption_scope_override = deny_encryption_scope_override + self.prevent_encryption_scope_override = prevent_encryption_scope_override class ContainerItem(Model): @@ -624,8 +616,8 @@ class ContainerProperties(Model): :type has_legal_hold: bool :param default_encryption_scope: :type default_encryption_scope: str - :param deny_encryption_scope_override: - :type deny_encryption_scope_override: bool + :param prevent_encryption_scope_override: + :type prevent_encryption_scope_override: bool """ _validation = { @@ -643,12 +635,12 @@ class ContainerProperties(Model): 'has_immutability_policy': {'key': 'HasImmutabilityPolicy', 'type': 'bool', 'xml': {'name': 'HasImmutabilityPolicy'}}, 'has_legal_hold': {'key': 'HasLegalHold', 'type': 'bool', 'xml': {'name': 'HasLegalHold'}}, 'default_encryption_scope': {'key': 'DefaultEncryptionScope', 'type': 'str', 'xml': {'name': 'DefaultEncryptionScope'}}, - 'deny_encryption_scope_override': {'key': 'DenyEncryptionScopeOverride', 'type': 'bool', 'xml': {'name': 'DenyEncryptionScopeOverride'}}, + 'prevent_encryption_scope_override': {'key': 'DenyEncryptionScopeOverride', 'type': 'bool', 'xml': {'name': 'DenyEncryptionScopeOverride'}}, } _xml_map = { } - def __init__(self, *, last_modified, etag: str, lease_status=None, lease_state=None, lease_duration=None, public_access=None, has_immutability_policy: bool=None, has_legal_hold: bool=None, default_encryption_scope: str=None, deny_encryption_scope_override: bool=None, **kwargs) -> None: + def __init__(self, *, last_modified, etag: str, lease_status=None, lease_state=None, lease_duration=None, public_access=None, has_immutability_policy: bool=None, has_legal_hold: bool=None, default_encryption_scope: str=None, prevent_encryption_scope_override: bool=None, **kwargs) -> None: super(ContainerProperties, self).__init__(**kwargs) self.last_modified = last_modified self.etag = etag @@ -659,7 +651,7 @@ def __init__(self, *, last_modified, etag: str, lease_status=None, lease_state=N self.has_immutability_policy = has_immutability_policy self.has_legal_hold = has_legal_hold self.default_encryption_scope = default_encryption_scope - self.deny_encryption_scope_override = deny_encryption_scope_override + self.prevent_encryption_scope_override = prevent_encryption_scope_override class CorsRule(Model): diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_container_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_container_operations.py index 2d2812a4da5f..ee777cf97a29 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_container_operations.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_container_operations.py @@ -77,9 +77,9 @@ def create(self, timeout=None, metadata=None, access=None, request_id=None, cont default_encryption_scope = None if container_cpk_scope_info is not None: default_encryption_scope = container_cpk_scope_info.default_encryption_scope - deny_encryption_scope_override = None + prevent_encryption_scope_override = None if container_cpk_scope_info is not None: - deny_encryption_scope_override = container_cpk_scope_info.deny_encryption_scope_override + prevent_encryption_scope_override = container_cpk_scope_info.prevent_encryption_scope_override restype = "container" @@ -107,8 +107,8 @@ def create(self, timeout=None, metadata=None, access=None, request_id=None, cont header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str') if default_encryption_scope is not None: header_parameters['x-ms-default-encryption-scope'] = self._serialize.header("default_encryption_scope", default_encryption_scope, 'str') - if deny_encryption_scope_override is not None: - header_parameters['x-ms-deny-encryption-scope-override'] = self._serialize.header("deny_encryption_scope_override", deny_encryption_scope_override, 'bool') + if prevent_encryption_scope_override is not None: + header_parameters['x-ms-deny-encryption-scope-override'] = self._serialize.header("prevent_encryption_scope_override", prevent_encryption_scope_override, 'bool') # Construct and send request request = self._client.put(url, query_parameters, header_parameters) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_models.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_models.py index 58dfacad8a92..43bab57b3306 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_models.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_models.py @@ -1079,7 +1079,7 @@ def _from_generated(cls, generated): if generated.properties.default_encryption_scope: scope = cls( generated.properties.default_encryption_scope, - prevent_encryption_scope_override=generated.properties.deny_encryption_scope_override or False + prevent_encryption_scope_override=generated.properties.prevent_encryption_scope_override or False ) return scope return None diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_serialize.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_serialize.py index 0f202b865ce3..4d66fd915c37 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_serialize.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_serialize.py @@ -83,12 +83,12 @@ def get_container_cpk_scope_info(kwargs): if isinstance(encryption_scope, ContainerEncryptionScope): return ContainerCpkScopeInfo( default_encryption_scope=encryption_scope.default_encryption_scope, - deny_encryption_scope_override=encryption_scope.prevent_encryption_scope_override + prevent_encryption_scope_override=encryption_scope.prevent_encryption_scope_override ) if isinstance(encryption_scope, dict): return ContainerCpkScopeInfo( default_encryption_scope=encryption_scope['default_encryption_scope'], - deny_encryption_scope_override=encryption_scope.get('prevent_encryption_scope_override') + prevent_encryption_scope_override=encryption_scope.get('prevent_encryption_scope_override') ) raise TypeError("Container encryption scope must be dict or type ContainerEncryptionScope.") return None diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/base_client.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/base_client.py index 65cf9ea3361f..f566f4ba1291 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/base_client.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/base_client.py @@ -63,7 +63,7 @@ "blob": {"primary": "BlobEndpoint", "secondary": "BlobSecondaryEndpoint"}, "queue": {"primary": "QueueEndpoint", "secondary": "QueueSecondaryEndpoint"}, "file": {"primary": "FileEndpoint", "secondary": "FileSecondaryEndpoint"}, - "dfs": {"primary": "BlobEndpoint", "secondary": "BlobSecondaryEndpoint"}, + "dfs": {"primary": "BlobEndpoint", "secondary": "BlobEndpoint"}, } diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/models.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/models.py index 6a8cfaf84745..c72fc6d510e4 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/models.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/models.py @@ -24,6 +24,7 @@ class StorageErrorCode(str, Enum): account_is_disabled = "AccountIsDisabled" authentication_failed = "AuthenticationFailed" authorization_failure = "AuthorizationFailure" + no_authentication_information = "NoAuthenticationInformation" condition_headers_not_supported = "ConditionHeadersNotSupported" condition_not_met = "ConditionNotMet" empty_metadata_key = "EmptyMetadataKey" @@ -158,6 +159,28 @@ class StorageErrorCode(str, Enum): share_has_snapshots = "ShareHasSnapshots" container_quota_downgrade_not_allowed = "ContainerQuotaDowngradeNotAllowed" + # DataLake values + content_length_must_be_zero = 'ContentLengthMustBeZero' + path_already_exists = 'PathAlreadyExists' + invalid_flush_position = 'InvalidFlushPosition' + invalid_property_name = 'InvalidPropertyName' + invalid_source_uri = 'InvalidSourceUri' + unsupported_rest_version = 'UnsupportedRestVersion' + file_system_not_found = 'FilesystemNotFound' + path_not_found = 'PathNotFound' + rename_destination_parent_path_not_found = 'RenameDestinationParentPathNotFound' + source_path_not_found = 'SourcePathNotFound' + destination_path_is_being_deleted = 'DestinationPathIsBeingDeleted' + file_system_already_exists = 'FilesystemAlreadyExists' + file_system_being_deleted = 'FilesystemBeingDeleted' + invalid_destination_path = 'InvalidDestinationPath' + invalid_rename_source_path = 'InvalidRenameSourcePath' + invalid_source_or_destination_resource_type = 'InvalidSourceOrDestinationResourceType' + lease_is_already_broken = 'LeaseIsAlreadyBroken' + lease_name_mismatch = 'LeaseNameMismatch' + path_conflict = 'PathConflict' + source_path_is_being_deleted = 'SourcePathIsBeingDeleted' + class DictMixin(object): diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_version.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_version.py index c7e18b39cee7..caae3f7d9970 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_version.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_version.py @@ -4,4 +4,4 @@ # license information. # -------------------------------------------------------------------------- -VERSION = "12.2.1" +VERSION = "12.3.0" diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_blob_client_async.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_blob_client_async.py index 1e23223c7fc0..5861ca03fd97 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_blob_client_async.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_blob_client_async.py @@ -1111,7 +1111,7 @@ async def stage_block( length=length, **kwargs) try: - await self._client.block_blob.stage_block(**options) + return await self._client.block_blob.stage_block(**options) except StorageErrorException as error: process_storage_error(error) @@ -1169,7 +1169,7 @@ async def stage_block_from_url( source_content_md5=source_content_md5, **kwargs) try: - await self._client.block_blob.stage_block_from_url(**options) + return await self._client.block_blob.stage_block_from_url(**options) except StorageErrorException as error: process_storage_error(error) diff --git a/sdk/storage/azure-storage-blob/samples/blob_samples_containers.py b/sdk/storage/azure-storage-blob/samples/blob_samples_containers.py index db31f8ab8000..56a5cfc628b7 100644 --- a/sdk/storage/azure-storage-blob/samples/blob_samples_containers.py +++ b/sdk/storage/azure-storage-blob/samples/blob_samples_containers.py @@ -20,6 +20,7 @@ import os from datetime import datetime, timedelta +from azure.core.exceptions import ResourceExistsError SOURCE_FILE = 'SampleSource.txt' @@ -44,7 +45,7 @@ def container_sample(self): # [START create_container_client_sasurl] from azure.storage.blob import ContainerClient - sas_url = sas_url = "https://account.blob.core.windows.net/mycontainer?sv=2015-04-05&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D" + sas_url = "https://account.blob.core.windows.net/mycontainer?sv=2015-04-05&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D" container = ContainerClient.from_container_url(sas_url) # [END create_container_client_sasurl] diff --git a/sdk/storage/azure-storage-blob/tests/recordings/test_block_blob.test_put_block_with_response.yaml b/sdk/storage/azure-storage-blob/tests/recordings/test_block_blob.test_put_block_with_response.yaml new file mode 100644 index 000000000000..116b709ceda8 --- /dev/null +++ b/sdk/storage/azure-storage-blob/tests/recordings/test_block_blob.test_put_block_with_response.yaml @@ -0,0 +1,130 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-blob/12.0.0b5 Python/3.6.3 (Windows-10-10.0.18362-SP0) + x-ms-date: + - Fri, 25 Oct 2019 18:40:59 GMT + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.blob.core.windows.net/utcontainer94f01222?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Fri, 25 Oct 2019 18:40:58 GMT + etag: + - '"0x8D7597AE0E37583"' + last-modified: + - Fri, 25 Oct 2019 18:40:59 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2019-02-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/octet-stream + If-None-Match: + - '*' + User-Agent: + - azsdk-python-storage-blob/12.0.0b5 Python/3.6.3 (Windows-10-10.0.18362-SP0) + x-ms-blob-type: + - BlockBlob + x-ms-date: + - Fri, 25 Oct 2019 18:40:59 GMT + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.blob.core.windows.net/utcontainer94f01222/blob94f01222 + response: + body: + string: '' + headers: + content-length: + - '0' + content-md5: + - 1B2M2Y8AsgTpgAmY7PhCfg== + date: + - Fri, 25 Oct 2019 18:40:58 GMT + etag: + - '"0x8D7597AE0F2F5A3"' + last-modified: + - Fri, 25 Oct 2019 18:40:59 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-content-crc64: + - AAAAAAAAAAA= + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2019-02-02' + status: + code: 201 + message: Created +- request: + body: block 0 + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '7' + Content-Type: + - application/octet-stream + User-Agent: + - azsdk-python-storage-blob/12.0.0b5 Python/3.6.3 (Windows-10-10.0.18362-SP0) + x-ms-date: + - Fri, 25 Oct 2019 18:40:59 GMT + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.blob.core.windows.net/utcontainer94f01222/blob94f01222?blockid=MA%3D%3D&comp=block + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Fri, 25 Oct 2019 18:40:58 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-content-crc64: + - qG0Ez70es10= + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2019-02-02' + status: + code: 201 + message: Created +version: 1 diff --git a/sdk/storage/azure-storage-blob/tests/recordings/test_block_blob_async.test_put_block_with_response.yaml b/sdk/storage/azure-storage-blob/tests/recordings/test_block_blob_async.test_put_block_with_response.yaml new file mode 100644 index 000000000000..7b676977b4f7 --- /dev/null +++ b/sdk/storage/azure-storage-blob/tests/recordings/test_block_blob_async.test_put_block_with_response.yaml @@ -0,0 +1,113 @@ +interactions: +- request: + body: null + headers: + User-Agent: + - azsdk-python-storage-blob/12.0.0b5 Python/3.6.3 (Windows-10-10.0.18362-SP0) + x-ms-date: + - Fri, 25 Oct 2019 18:46:17 GMT + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.blob.core.windows.net/utcontainerab3149f?restype=container + response: + body: + string: '' + headers: + content-length: '0' + date: Fri, 25 Oct 2019 18:46:17 GMT + etag: '"0x8D7597B9EE14925"' + last-modified: Fri, 25 Oct 2019 18:46:17 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: '2019-02-02' + status: + code: 201 + message: Created + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - pyacrstorageinrrev5kxink.blob.core.windows.net + - /utcontainerab3149f + - restype=container + - '' +- request: + body: null + headers: + Content-Length: + - '0' + Content-Type: + - application/octet-stream + If-None-Match: + - '*' + User-Agent: + - azsdk-python-storage-blob/12.0.0b5 Python/3.6.3 (Windows-10-10.0.18362-SP0) + x-ms-blob-type: + - BlockBlob + x-ms-date: + - Fri, 25 Oct 2019 18:46:18 GMT + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.blob.core.windows.net/utcontainerab3149f/blobab3149f + response: + body: + string: '' + headers: + content-length: '0' + content-md5: 1B2M2Y8AsgTpgAmY7PhCfg== + date: Fri, 25 Oct 2019 18:46:17 GMT + etag: '"0x8D7597B9EEA3EDD"' + last-modified: Fri, 25 Oct 2019 18:46:17 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-content-crc64: AAAAAAAAAAA= + x-ms-request-server-encrypted: 'true' + x-ms-version: '2019-02-02' + status: + code: 201 + message: Created + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - pyacrstorageinrrev5kxink.blob.core.windows.net + - /utcontainerab3149f/blobab3149f + - '' + - '' +- request: + body: block 0 + headers: + Content-Length: + - '7' + Content-Type: + - application/octet-stream + User-Agent: + - azsdk-python-storage-blob/12.0.0b5 Python/3.6.3 (Windows-10-10.0.18362-SP0) + x-ms-date: + - Fri, 25 Oct 2019 18:46:18 GMT + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.blob.core.windows.net/utcontainerab3149f/blobab3149f?blockid=MA%3D%3D&comp=block + response: + body: + string: '' + headers: + content-length: '0' + date: Fri, 25 Oct 2019 18:46:17 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-content-crc64: qG0Ez70es10= + x-ms-request-server-encrypted: 'true' + x-ms-version: '2019-02-02' + status: + code: 201 + message: Created + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - pyacrstorageinrrev5kxink.blob.core.windows.net + - /utcontainerab3149f/blobab3149f + - blockid=MA%3D%3D&comp=block + - '' +version: 1 diff --git a/sdk/storage/azure-storage-blob/tests/test_append_blob_async.py b/sdk/storage/azure-storage-blob/tests/test_append_blob_async.py index 45adee8a2f25..75e6425817cf 100644 --- a/sdk/storage/azure-storage-blob/tests/test_append_blob_async.py +++ b/sdk/storage/azure-storage-blob/tests/test_append_blob_async.py @@ -110,7 +110,6 @@ def read(self, count): # --Test cases for append blobs -------------------------------------------- @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_create_blob_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, transport=AiohttpTestTransport()) @@ -128,7 +127,6 @@ async def test_create_blob_async(self, resource_group, location, storage_account self.assertEqual(blob_properties.last_modified, create_resp.get('last_modified')) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_create_blob_with_lease_id_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -147,7 +145,6 @@ async def test_create_blob_with_lease_id_async(self, resource_group, location, s self.assertEqual(blob_properties.last_modified, create_resp.get('last_modified')) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_create_blob_with_metadata_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -165,7 +162,6 @@ async def test_create_blob_with_metadata_async(self, resource_group, location, s self.assertDictEqual(md.metadata, metadata) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, transport=AiohttpTestTransport()) @@ -184,7 +180,6 @@ async def test_append_block_async(self, resource_group, location, storage_accoun await self.assertBlobEqual(blob, b'block 0block 1block 2block 3block 4') @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_unicode_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, transport=AiohttpTestTransport()) @@ -201,7 +196,6 @@ async def test_append_block_unicode_async(self, resource_group, location, storag # Assert @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_with_md5_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, transport=AiohttpTestTransport()) @@ -218,7 +212,6 @@ async def test_append_block_with_md5_async(self, resource_group, location, stora # Assert @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_from_url_async(self, resource_group, location, storage_account, storage_account_key): # Arrange bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -268,7 +261,6 @@ async def test_append_block_from_url_async(self, resource_group, location, stora source_length=LARGE_BLOB_SIZE) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_from_url_and_validate_content_md5_async(self, resource_group, location, storage_account, storage_account_key): # Arrange bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -310,7 +302,6 @@ async def test_append_block_from_url_and_validate_content_md5_async(self, resour b"POTATO")) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_from_url_with_source_if_modified_async(self, resource_group, location, storage_account, storage_account_key): # Arrange bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -357,7 +348,6 @@ async def test_append_block_from_url_with_source_if_modified_async(self, resourc 'last_modified')) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_from_url_with_source_if_unmodified_async(self, resource_group, location, storage_account, storage_account_key): # Arrange bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -405,7 +395,6 @@ async def test_append_block_from_url_with_source_if_unmodified_async(self, resou hours=15)) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_from_url_with_source_if_match_async(self, resource_group, location, storage_account, storage_account_key): # Arrange bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -452,7 +441,6 @@ async def test_append_block_from_url_with_source_if_match_async(self, resource_g source_match_condition=MatchConditions.IfNotModified) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_from_url_with_source_if_none_match_async(self, resource_group, location, storage_account, storage_account_key): # Arrange bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -499,7 +487,6 @@ async def test_append_block_from_url_with_source_if_none_match_async(self, resou source_match_condition=MatchConditions.IfModified) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_from_url_with_if_match_async(self, resource_group, location, storage_account, storage_account_key): # Arrange bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -549,7 +536,6 @@ async def test_append_block_from_url_with_if_match_async(self, resource_group, l match_condition=MatchConditions.IfNotModified) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_from_url_with_if_none_match_async(self, resource_group, location, storage_account, storage_account_key): # Arrange bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -595,7 +581,6 @@ async def test_append_block_from_url_with_if_none_match_async(self, resource_gro match_condition=MatchConditions.IfModified) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_from_url_with_maxsize_condition_async(self, resource_group, location, storage_account, storage_account_key): # Arrange bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -640,7 +625,6 @@ async def test_append_block_from_url_with_maxsize_condition_async(self, resource maxsize_condition=LARGE_BLOB_SIZE + 1) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_from_url_with_appendpos_condition_async(self, resource_group, location, storage_account, storage_account_key): # Arrange bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -685,7 +669,6 @@ async def test_append_block_from_url_with_appendpos_condition_async(self, resour appendpos_condition=0) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_from_url_with_if_modified_async(self, resource_group, location, storage_account, storage_account_key): # Arrange bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -732,7 +715,6 @@ async def test_append_block_from_url_with_if_modified_async(self, resource_group 'last_modified')) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_block_from_url_with_if_unmodified_async(self, resource_group, location, storage_account, storage_account_key): # Arrange bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -779,7 +761,6 @@ async def test_append_block_from_url_with_if_unmodified_async(self, resource_gro 'last_modified') - timedelta(minutes=15)) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_create_append_blob_with_no_overwrite_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -817,7 +798,6 @@ async def test_create_append_blob_with_no_overwrite_async(self, resource_group, self.assertEqual(props.size, LARGE_BLOB_SIZE + LARGE_BLOB_SIZE + 512) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_create_append_blob_with_overwrite_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -853,7 +833,6 @@ async def test_create_append_blob_with_overwrite_async(self, resource_group, loc self.assertEqual(props.size, LARGE_BLOB_SIZE + 512) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_bytes_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, transport=AiohttpTestTransport()) @@ -871,7 +850,6 @@ async def test_append_blob_from_bytes_async(self, resource_group, location, stor self.assertEqual(blob_properties.last_modified, append_resp['last_modified']) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_0_bytes_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, transport=AiohttpTestTransport()) @@ -889,7 +867,6 @@ async def test_append_blob_from_0_bytes_async(self, resource_group, location, st self.assertIsNone(append_resp.get('last_modified')) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_bytes_with_progress_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -913,7 +890,6 @@ def progress_gen(upload): self.assert_upload_progress(len(data), self.config.max_block_size, progress) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_bytes_with_index_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -929,7 +905,6 @@ async def test_append_blob_from_bytes_with_index_async(self, resource_group, loc await self.assertBlobEqual(blob, data[3:]) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_bytes_with_index_and_count_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -945,7 +920,6 @@ async def test_append_blob_from_bytes_with_index_and_count_async(self, resource_ await self.assertBlobEqual(blob, data[3:8]) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_bytes_chunked_upload_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -964,7 +938,6 @@ async def test_append_blob_from_bytes_chunked_upload_async(self, resource_group, self.assertEqual(blob_properties.last_modified, append_resp.get('last_modified')) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_app_blob_from_bytes_progress_chnked_upload_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -994,7 +967,6 @@ def progress_gen(upload): self.assert_upload_progress(len(data), self.config.max_block_size, progress) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_appblob_frm_bytes_chnked_upload_w_idx_n_count_async(self, resource_group, location, storage_account, storage_account_key): @@ -1013,7 +985,6 @@ async def test_appblob_frm_bytes_chnked_upload_w_idx_n_count_async(self, resourc await self.assertBlobEqual(blob, data[index:index + blob_size]) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_path_chunked_upload_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -1038,7 +1009,6 @@ async def test_append_blob_from_path_chunked_upload_async(self, resource_group, self._teardown(FILE_PATH) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_path_with_progress_chunked_upload_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -1075,7 +1045,6 @@ def progress_gen(upload): self._teardown(FILE_PATH) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_stream_chunked_upload_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -1099,7 +1068,6 @@ async def test_append_blob_from_stream_chunked_upload_async(self, resource_group self._teardown(FILE_PATH) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_stream_non_seekable_chunked_upload_known_size_async(self, resource_group, location, storage_account, storage_account_key): @@ -1123,7 +1091,6 @@ async def test_append_blob_from_stream_non_seekable_chunked_upload_known_size_as self._teardown(FILE_PATH) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_stream_non_seekable_chunked_upload_unknown_size_async(self, resource_group, location, storage_account, storage_account_key): @@ -1146,7 +1113,6 @@ async def test_append_blob_from_stream_non_seekable_chunked_upload_unknown_size_ self._teardown(FILE_PATH) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_stream_with_multiple_appends_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -1172,7 +1138,6 @@ async def test_append_blob_from_stream_with_multiple_appends_async(self, resourc self._teardown(FILE_PATH) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_stream_chunked_upload_with_count_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -1195,7 +1160,6 @@ async def test_append_blob_from_stream_chunked_upload_with_count_async(self, res @pytest.mark.live_test_only @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_stream_chunked_upload_with_count_parallel_async(self, resource_group, location, storage_account, storage_account_key): @@ -1222,7 +1186,6 @@ async def test_append_blob_from_stream_chunked_upload_with_count_parallel_async( self._teardown(FILE_PATH) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_text_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, transport=AiohttpTestTransport()) @@ -1241,7 +1204,6 @@ async def test_append_blob_from_text_async(self, resource_group, location, stora self.assertEqual(blob_properties.last_modified, append_resp.get('last_modified')) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_text_with_encoding_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -1258,7 +1220,6 @@ async def test_append_blob_from_text_with_encoding_async(self, resource_group, l await self.assertBlobEqual(blob, data) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_text_with_encoding_and_progress_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -1282,7 +1243,6 @@ def progress_gen(upload): self.assert_upload_progress(len(data), self.config.max_block_size, progress) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_from_text_chunked_upload_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, @@ -1299,7 +1259,6 @@ async def test_append_blob_from_text_chunked_upload_async(self, resource_group, await self.assertBlobEqual(blob, encoded_data) @GlobalStorageAccountPreparer() - @AsyncStorageTestCase.await_prepared_test async def test_append_blob_with_md5_async(self, resource_group, location, storage_account, storage_account_key): bsc = BlobServiceClient(self.account_url(storage_account, "blob"), storage_account_key, max_block_size=4 * 1024, transport=AiohttpTestTransport()) diff --git a/sdk/storage/azure-storage-blob/tests/test_block_blob.py b/sdk/storage/azure-storage-blob/tests/test_block_blob.py index 736f4f30a091..68d10050a418 100644 --- a/sdk/storage/azure-storage-blob/tests/test_block_blob.py +++ b/sdk/storage/azure-storage-blob/tests/test_block_blob.py @@ -87,19 +87,34 @@ def test_put_block(self, resource_group, location, storage_account, storage_acco # Act for i in range(5): - resp = blob.stage_block(i, 'block {0}'.format(i).encode('utf-8')) - self.assertIsNone(resp) + headers = blob.stage_block(i, 'block {0}'.format(i).encode('utf-8')) + self.assertIn('content_crc64', headers) # Assert + @GlobalStorageAccountPreparer() + def test_put_block_with_response(self, resource_group, location, storage_account, storage_account_key): + self._setup(storage_account.name, storage_account_key) + blob = self._create_blob() + + def return_response(resp, _, headers): + return (resp, headers) + + # Act + resp, headers = blob.stage_block(0, 'block 0', cls=return_response) + + # Assert + self.assertEqual(201, resp.status_code) + self.assertIn('x-ms-content-crc64', headers) + @GlobalStorageAccountPreparer() def test_put_block_unicode(self, resource_group, location, storage_account, storage_account_key): self._setup(storage_account, storage_account_key) blob = self._create_blob() # Act - resp = blob.stage_block('1', u'啊齄丂狛狜') - self.assertIsNone(resp) + headers = blob.stage_block('1', u'啊齄丂狛狜') + self.assertIn('content_crc64', headers) # Assert diff --git a/sdk/storage/azure-storage-blob/tests/test_block_blob_async.py b/sdk/storage/azure-storage-blob/tests/test_block_blob_async.py index 8619bd65504f..2652a26a4c09 100644 --- a/sdk/storage/azure-storage-blob/tests/test_block_blob_async.py +++ b/sdk/storage/azure-storage-blob/tests/test_block_blob_async.py @@ -110,10 +110,28 @@ async def test_put_block(self, resource_group, location, storage_account, storag # Act for i in range(5): - resp = await blob.stage_block(i, 'block {0}'.format(i).encode('utf-8')) - self.assertIsNone(resp) + headers = await blob.stage_block(i, 'block {0}'.format(i).encode('utf-8')) + self.assertIn('content_crc64', headers) # Assert + + @GlobalStorageAccountPreparer() + @AsyncStorageTestCase.await_prepared_test + async def test_put_block_with_response(self, resource_group, location, storage_account, storage_account_key): + await self._setup(storage_account.name, storage_account_key) + # Arrange + def return_response(resp, _, headers): + return (resp, headers) + + blob = await self._create_blob() + + # Act + resp, headers = await blob.stage_block(0, 'block 0', cls=return_response) + + # Assert + self.assertEqual(201, resp.status_code) + self.assertIn('x-ms-content-crc64', headers) + @GlobalStorageAccountPreparer() @AsyncStorageTestCase.await_prepared_test async def test_put_block_unicode(self, resource_group, location, storage_account, storage_account_key): @@ -122,8 +140,8 @@ async def test_put_block_unicode(self, resource_group, location, storage_account blob = await self._create_blob() # Act - resp = await blob.stage_block('1', u'啊齄丂狛狜') - self.assertIsNone(resp) + headers = await blob.stage_block('1', u'啊齄丂狛狜') + self.assertIn('content_crc64', headers) # Assert diff --git a/sdk/storage/azure-storage-blob/tests/test_large_block_blob.py b/sdk/storage/azure-storage-blob/tests/test_large_block_blob.py index 79817d675260..bf3aa0cfcfe1 100644 --- a/sdk/storage/azure-storage-blob/tests/test_large_block_blob.py +++ b/sdk/storage/azure-storage-blob/tests/test_large_block_blob.py @@ -87,7 +87,10 @@ def test_put_block_bytes_large(self, resource_group, location, storage_account, for i in range(5): resp = blob.stage_block( 'block {0}'.format(i).encode('utf-8'), urandom(LARGE_BLOCK_SIZE)) - self.assertIsNone(resp) + self.assertIsNotNone(resp) + assert 'content_md5' in resp + assert 'content_crc64' in resp + assert 'request_id' in resp # Assert @@ -104,7 +107,10 @@ def test_put_block_bytes_large_with_md5(self, resource_group, location, storage_ 'block {0}'.format(i).encode('utf-8'), urandom(LARGE_BLOCK_SIZE), validate_content=True) - self.assertIsNone(resp) + self.assertIsNotNone(resp) + assert 'content_md5' in resp + assert 'content_crc64' in resp + assert 'request_id' in resp @pytest.mark.live_test_only @GlobalStorageAccountPreparer() @@ -120,7 +126,10 @@ def test_put_block_stream_large(self, resource_group, location, storage_account, 'block {0}'.format(i).encode('utf-8'), stream, length=LARGE_BLOCK_SIZE) - self.assertIsNone(resp) + self.assertIsNotNone(resp) + assert 'content_md5' in resp + assert 'content_crc64' in resp + assert 'request_id' in resp # Assert @@ -139,7 +148,10 @@ def test_put_block_stream_large_with_md5(self, resource_group, location, storage stream, length=LARGE_BLOCK_SIZE, validate_content=True) - self.assertIsNone(resp) + self.assertIsNotNone(resp) + assert 'content_md5' in resp + assert 'content_crc64' in resp + assert 'request_id' in resp # Assert diff --git a/sdk/storage/azure-storage-blob/tests/test_large_block_blob_async.py b/sdk/storage/azure-storage-blob/tests/test_large_block_blob_async.py index 3c9d19bccbea..c8f839699070 100644 --- a/sdk/storage/azure-storage-blob/tests/test_large_block_blob_async.py +++ b/sdk/storage/azure-storage-blob/tests/test_large_block_blob_async.py @@ -131,7 +131,10 @@ async def test_put_block_bytes_large_with_md5_async(self, resource_group, locati 'block {0}'.format(i).encode('utf-8'), urandom(LARGE_BLOCK_SIZE), validate_content=True) - self.assertIsNone(resp) + self.assertIsNotNone(resp) + assert 'content_md5' in resp + assert 'content_crc64' in resp + assert 'request_id' in resp @pytest.mark.live_test_only @GlobalStorageAccountPreparer() @@ -148,7 +151,10 @@ async def test_put_block_stream_large_async(self, resource_group, location, stor 'block {0}'.format(i).encode('utf-8'), stream, length=LARGE_BLOCK_SIZE) - self.assertIsNone(resp) + self.assertIsNotNone(resp) + assert 'content_md5' in resp + assert 'content_crc64' in resp + assert 'request_id' in resp # Assert @@ -168,7 +174,10 @@ async def test_put_block_stream_large_with_md5_async(self, resource_group, locat stream, length=LARGE_BLOCK_SIZE, validate_content=True) - self.assertIsNone(resp) + self.assertIsNotNone(resp) + assert 'content_md5' in resp + assert 'content_crc64' in resp + assert 'request_id' in resp # Assert diff --git a/sdk/storage/azure-storage-file-datalake/CHANGELOG.md b/sdk/storage/azure-storage-file-datalake/CHANGELOG.md index 10ef3ecee52f..a59d47d64ba7 100644 --- a/sdk/storage/azure-storage-file-datalake/CHANGELOG.md +++ b/sdk/storage/azure-storage-file-datalake/CHANGELOG.md @@ -1,12 +1,14 @@ # Release History -## 12.0.0 (Unreleased) +## 12.0.0 (2020-03-10) **New Feature** -- Added `get_root_directory_client` sync and async API. - Added `set_file_system_access_policy` and `get_file_system_access_policy` APIs on FileSystemClient **Breaking changes** +- For `generate_file_system_sas`, `generate_directory_sas`, `generate_file_sas` APIs, `account_key` and `user_delegation_key` are merged into one parameter called `credential`. - Rename `rename_destination` to `new_name` for rename_directory and rename_file APIs +- Rename `read_file` to `download_file`. The return type is changed to `StorageStreamDownloader` with which user can do `readinto()` and `readall()` +- `metadata` is a required parameter for FileSystemClient, DataLakeFileClient and DataLakeDirectoryClient `set_*_metadata` APIs. **Notes** - The `StorageUserAgentPolicy` is now replaced with the `UserAgentPolicy` from azure-core. With this, the custom user agents are now added as a prefix instead of being appended. diff --git a/sdk/storage/azure-storage-file-datalake/GEN1_GEN2_MAPPING.md b/sdk/storage/azure-storage-file-datalake/GEN1_GEN2_MAPPING.md index d7c4bfe73d28..026f362dc5d5 100644 --- a/sdk/storage/azure-storage-file-datalake/GEN1_GEN2_MAPPING.md +++ b/sdk/storage/azure-storage-file-datalake/GEN1_GEN2_MAPPING.md @@ -71,7 +71,7 @@ cat Return contents of file -read_file +download_file Put the expected range parameters in Gen2 API will achieve the same function of the 4 Gen1 APIs. @@ -89,8 +89,8 @@ get Stream data from file at path to local filename -read_file -Passing a stream parameter in read_file should do the same thing as Gen1 get API does +download_file +Passing a stream parameter in download_file should do the same thing as Gen1 get API does rename/mv @@ -143,7 +143,7 @@ open Open a file for reading or writing to. N/A -There is no open file operation In ADLS Gen2. However users can do operations to the file directly, eg. append_data, flush_data, read_file +There is no open file operation In ADLS Gen2. However users can do operations to the file directly, eg. append_data, flush_data, download_file concat/merge diff --git a/sdk/storage/azure-storage-file-datalake/README.md b/sdk/storage/azure-storage-file-datalake/README.md index 524ad96b59bc..e2ee6c792099 100644 --- a/sdk/storage/azure-storage-file-datalake/README.md +++ b/sdk/storage/azure-storage-file-datalake/README.md @@ -139,7 +139,8 @@ file = DataLakeFileClient.from_connection_string("my_connection_string", file_system_name="myfilesystem", file_path="myfile") with open("./BlockDestination.txt", "wb") as my_file: - file_data = file.read_file(stream=my_file) + download = file.download_file() + download.readinto(my_file) ``` ### Enumerating paths diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/__init__.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/__init__.py index f209795862e6..fdeb63d6a561 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/__init__.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/__init__.py @@ -4,6 +4,7 @@ # license information. # -------------------------------------------------------------------------- +from ._download import StorageStreamDownloader from ._data_lake_file_client import DataLakeFileClient from ._data_lake_directory_client import DataLakeDirectoryClient from ._file_system_client import FileSystemClient @@ -66,4 +67,5 @@ 'generate_directory_sas', 'generate_file_sas', 'VERSION', + 'StorageStreamDownloader' ] diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_directory_client.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_directory_client.py index 40cab2cd2af8..b5c981b0db66 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_directory_client.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_directory_client.py @@ -37,19 +37,12 @@ class DataLakeDirectoryClient(PathClient): .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_authentication_samples.py - :start-after: [START create_datalake_service_client] - :end-before: [END create_datalake_service_client] + .. literalinclude:: ../samples/datalake_samples_instantiate_client.py + :start-after: [START instantiate_directory_client_from_conn_str] + :end-before: [END instantiate_directory_client_from_conn_str] :language: python - :dedent: 8 - :caption: Creating the DataLakeServiceClient with account url and credential. - - .. literalinclude:: ../samples/test_datalake_authentication_samples.py - :start-after: [START create_datalake_service_client_oauth] - :end-before: [END create_datalake_service_client_oauth] - :language: python - :dedent: 8 - :caption: Creating the DataLakeServiceClient with Azure Identity credentials. + :dedent: 4 + :caption: Creating the DataLakeServiceClient from connection string. """ def __init__( self, account_url, # type: str @@ -75,9 +68,11 @@ def from_connection_string( :param str conn_str: A connection string to an Azure Storage account. - :param file_system_name: The name of file system to interact with. + :param file_system_name: + The name of file system to interact with. :type file_system_name: str - :param directory_name: The name of directory to interact with. The directory is under file system. + :param directory_name: + The name of directory to interact with. The directory is under file system. :type directory_name: str :param credential: The credentials with which to authenticate. This is optional if the @@ -88,42 +83,41 @@ def from_connection_string( :return a DataLakeDirectoryClient :rtype ~azure.storage.filedatalake.DataLakeDirectoryClient """ - account_url, secondary, credential = parse_connection_str(conn_str, credential, 'dfs') - if 'secondary_hostname' not in kwargs: - kwargs['secondary_hostname'] = secondary + account_url, _, credential = parse_connection_str(conn_str, credential, 'dfs') return cls( account_url, file_system_name=file_system_name, directory_name=directory_name, credential=credential, **kwargs) - def create_directory(self, content_settings=None, # type: Optional[ContentSettings] - metadata=None, # type: Optional[Dict[str, str]] + def create_directory(self, metadata=None, # type: Optional[Dict[str, str]] **kwargs): # type: (...) -> Dict[str, Union[str, datetime]] """ Create a new directory. - :param ~azure.storage.filedatalake.ContentSettings content_settings: - ContentSettings object used to set path properties. :param metadata: - Name-value pairs associated with the blob as metadata. + Name-value pairs associated with the file as metadata. :type metadata: dict(str, str) + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: + ContentSettings object used to set path properties. :keyword lease: - Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + Required if the file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword str permissions: Optional and only valid if Hierarchical Namespace - is enabled for the account. Sets POSIX access permissions for the file - owner, the file owning group, and others. Each class may be granted - read, write, or execute permission. The sticky bit is also supported. - Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are - supported. + :keyword str permissions: + Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -144,8 +138,17 @@ def create_directory(self, content_settings=None, # type: Optional[ContentSetti :keyword int timeout: The timeout parameter is expressed in seconds. :return: response dict (Etag and last modified). + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_directory.py + :start-after: [START create_directory] + :end-before: [END create_directory] + :language: python + :dedent: 8 + :caption: Create directory. """ - return self._create('directory', content_settings=content_settings, metadata=metadata, **kwargs) + return self._create('directory', metadata=metadata, **kwargs) def delete_directory(self, **kwargs): # type: (...) -> None @@ -153,9 +156,9 @@ def delete_directory(self, **kwargs): Marks the specified directory for deletion. :keyword lease: - Required if the blob has an active lease. Value can be a LeaseClient object + Required if the file has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.blob.LeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -176,6 +179,15 @@ def delete_directory(self, **kwargs): :keyword int timeout: The timeout parameter is expressed in seconds. :return: None + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_directory.py + :start-after: [START delete_directory] + :end-before: [END delete_directory] + :language: python + :dedent: 4 + :caption: Delete directory. """ return self._delete(**kwargs) @@ -187,7 +199,7 @@ def get_directory_properties(self, **kwargs): :keyword lease: Required if the directory or file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -211,11 +223,11 @@ def get_directory_properties(self, **kwargs): .. admonition:: Example: - .. literalinclude:: ../tests/test_blob_samples_common.py - :start-after: [START get_blob_properties] - :end-before: [END get_blob_properties] + .. literalinclude:: ../samples/datalake_samples_directory.py + :start-after: [START get_directory_properties] + :end-before: [END get_directory_properties] :language: python - :dedent: 8 + :dedent: 4 :caption: Getting the properties for a file/directory. """ blob_properties = self._get_path_properties(**kwargs) @@ -227,31 +239,35 @@ def rename_directory(self, new_name, # type: str """ Rename the source directory. - :param str new_name: the new directory name the user want to rename to. + :param str new_name: + the new directory name the user want to rename to. The value must have the following format: "{filesystem}/{directory}/{subdirectory}". - :keyword source_lease: A lease ID for the source path. If specified, - the source path must have an active lease and the leaase ID must - match. - :keyword source_lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str - :param ~azure.storage.filedatalake.ContentSettings content_settings: + :keyword source_lease: + A lease ID for the source path. If specified, + the source path must have an active lease and the leaase ID must + match. + :paramtype source_lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. :keyword lease: Required if the file/directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword permissions: Optional and only valid if Hierarchical Namespace - is enabled for the account. Sets POSIX access permissions for the file - owner, the file owning group, and others. Each class may be granted - read, write, or execute permission. The sticky bit is also supported. - Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are - supported. + :keyword permissions: + Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. :type permissions: str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. @@ -290,6 +306,15 @@ def rename_directory(self, new_name, # type: str :keyword int timeout: The timeout parameter is expressed in seconds. :return: DataLakeDirectoryClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_directory.py + :start-after: [START rename_directory] + :end-before: [END rename_directory] + :language: python + :dedent: 4 + :caption: Rename the source directory. """ new_name = new_name.strip('/') new_file_system = new_name.split('/')[0] @@ -298,7 +323,7 @@ def rename_directory(self, new_name, # type: str new_directory_client = DataLakeDirectoryClient( self.url, new_file_system, directory_name=path, credential=self._raw_credential, _hosts=self._hosts, _configuration=self._config, _pipeline=self._pipeline, - _location_mode=self._location_mode, require_encryption=self.require_encryption, + require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function) new_directory_client._rename_path('/'+self.file_system_name+'/'+self.path_name, # pylint: disable=protected-access @@ -306,7 +331,6 @@ def rename_directory(self, new_name, # type: str return new_directory_client def create_sub_directory(self, sub_directory, # type: Union[DirectoryProperties, str] - content_settings=None, # type: Optional[ContentSettings] metadata=None, # type: Optional[Dict[str, str]] **kwargs): # type: (...) -> DataLakeDirectoryClient @@ -317,27 +341,30 @@ def create_sub_directory(self, sub_directory, # type: Union[DirectoryProperties The directory with which to interact. This can either be the name of the directory, or an instance of DirectoryProperties. :type sub_directory: str or ~azure.storage.filedatalake.DirectoryProperties - :param ~azure.storage.filedatalake.ContentSettings content_settings: - ContentSettings object used to set path properties. :param metadata: - Name-value pairs associated with the blob as metadata. + Name-value pairs associated with the file as metadata. :type metadata: dict(str, str) - :keyword ~azure.storage.filedatalake.DataLakeLeaseClient or str lease: - Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: + ContentSettings object used to set path properties. + :keyword lease: + Required if the file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword str permissions: Optional and only valid if Hierarchical Namespace - is enabled for the account. Sets POSIX access permissions for the file - owner, the file owning group, and others. Each class may be granted - read, write, or execute permission. The sticky bit is also supported. - Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are - supported. + :keyword str permissions: + Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -360,7 +387,7 @@ def create_sub_directory(self, sub_directory, # type: Union[DirectoryProperties :return: DataLakeDirectoryClient for the subdirectory. """ subdir = self.get_sub_directory_client(sub_directory) - subdir.create_directory(content_settings=content_settings, metadata=metadata, **kwargs) + subdir.create_directory(metadata=metadata, **kwargs) return subdir def delete_sub_directory(self, sub_directory, # type: Union[DirectoryProperties, str] @@ -374,9 +401,9 @@ def delete_sub_directory(self, sub_directory, # type: Union[DirectoryProperties or an instance of DirectoryProperties. :type sub_directory: str or ~azure.storage.filedatalake.DirectoryProperties :keyword lease: - Required if the blob has an active lease. Value can be a LeaseClient object + Required if the file has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.blob.LeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -415,24 +442,27 @@ def create_file(self, file, # type: Union[FileProperties, str] :keyword ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. :keyword metadata: - Name-value pairs associated with the blob as metadata. + Name-value pairs associated with the file as metadata. :type metadata: dict(str, str) - :keyword ~azure.storage.filedatalake.DataLakeLeaseClient or str lease: - Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + :keyword lease: + Required if the file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword str permissions: Optional and only valid if Hierarchical Namespace - is enabled for the account. Sets POSIX access permissions for the file - owner, the file owning group, and others. Each class may be granted - read, write, or execute permission. The sticky bit is also supported. - Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are - supported. + :keyword str permissions: + Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -471,15 +501,6 @@ def get_file_client(self, file # type: Union[FileProperties, str] :type file: str or ~azure.storage.filedatalake.FileProperties :returns: A DataLakeFileClient. :rtype: ~azure.storage.filedatalake..DataLakeFileClient - - .. admonition:: Example: - - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START bsc_get_file_client] - :end-before: [END bsc_get_file_client] - :language: python - :dedent: 12 - :caption: Getting the file client to interact with a specific file. """ try: file_path = file.name @@ -489,7 +510,7 @@ def get_file_client(self, file # type: Union[FileProperties, str] return DataLakeFileClient( self.url, self.file_system_name, file_path=file_path, credential=self._raw_credential, _hosts=self._hosts, _configuration=self._config, _pipeline=self._pipeline, - _location_mode=self._location_mode, require_encryption=self.require_encryption, + require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function) @@ -506,15 +527,6 @@ def get_sub_directory_client(self, sub_directory # type: Union[DirectoryPropert :type sub_directory: str or ~azure.storage.filedatalake.DirectoryProperties :returns: A DataLakeDirectoryClient. :rtype: ~azure.storage.filedatalake.DataLakeDirectoryClient - - .. admonition:: Example: - - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START bsc_get_directory_client] - :end-before: [END bsc_get_directory_client] - :language: python - :dedent: 12 - :caption: Getting the directory client to interact with a specific directory. """ try: subdir_path = sub_directory.name @@ -524,6 +536,6 @@ def get_sub_directory_client(self, sub_directory # type: Union[DirectoryPropert return DataLakeDirectoryClient( self.url, self.file_system_name, directory_name=subdir_path, credential=self._raw_credential, _hosts=self._hosts, _configuration=self._config, _pipeline=self._pipeline, - _location_mode=self._location_mode, require_encryption=self.require_encryption, + require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_file_client.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_file_client.py index 55d7d16e5127..ffea24237d3a 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_file_client.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_file_client.py @@ -3,14 +3,18 @@ # Licensed under the MIT License. See License.txt in the project root for # license information. # -------------------------------------------------------------------------- +from io import BytesIO import six from ._shared.base_client import parse_connection_str from ._shared.request_handlers import get_length, read_length from ._shared.response_handlers import return_response_headers +from ._shared.uploads import IterStreamer +from ._upload_helper import upload_datalake_file from ._generated.models import StorageErrorException +from ._download import StorageStreamDownloader from ._path_client import PathClient -from ._serialize import get_mod_conditions, get_path_http_headers, get_access_conditions +from ._serialize import get_mod_conditions, get_path_http_headers, get_access_conditions, add_metadata_headers from ._deserialize import process_storage_error from ._models import FileProperties @@ -41,19 +45,12 @@ class DataLakeFileClient(PathClient): .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_authentication_samples.py - :start-after: [START create_datalake_service_client] - :end-before: [END create_datalake_service_client] + .. literalinclude:: ../samples/datalake_samples_instantiate_client.py + :start-after: [START instantiate_file_client_from_conn_str] + :end-before: [END instantiate_file_client_from_conn_str] :language: python - :dedent: 8 - :caption: Creating the DataLakeServiceClient with account url and credential. - - .. literalinclude:: ../samples/test_datalake_authentication_samples.py - :start-after: [START create_datalake_service_client_oauth] - :end-before: [END create_datalake_service_client_oauth] - :language: python - :dedent: 8 - :caption: Creating the DataLakeServiceClient with Azure Identity credentials. + :dedent: 4 + :caption: Creating the DataLakeServiceClient from connection string. """ def __init__( self, account_url, # type: str @@ -94,9 +91,7 @@ def from_connection_string( :return a DataLakeFileClient :rtype ~azure.storage.filedatalake.DataLakeFileClient """ - account_url, secondary, credential = parse_connection_str(conn_str, credential, 'dfs') - if 'secondary_hostname' not in kwargs: - kwargs['secondary_hostname'] = secondary + account_url, _, credential = parse_connection_str(conn_str, credential, 'dfs') return cls( account_url, file_system_name=file_system_name, file_path=file_path, credential=credential, **kwargs) @@ -111,24 +106,27 @@ def create_file(self, content_settings=None, # type: Optional[ContentSettings] :param ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. :param metadata: - Name-value pairs associated with the blob as metadata. + Name-value pairs associated with the file as metadata. :type metadata: dict(str, str) - :keyword ~azure.storage.filedatalake.DataLakeLeaseClient or str lease: - Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + :keyword lease: + Required if the file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword str permissions: Optional and only valid if Hierarchical Namespace - is enabled for the account. Sets POSIX access permissions for the file - owner, the file owning group, and others. Each class may be granted - read, write, or execute permission. The sticky bit is also supported. - Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are - supported. + :keyword str permissions: + Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -149,6 +147,15 @@ def create_file(self, content_settings=None, # type: Optional[ContentSettings] :keyword int timeout: The timeout parameter is expressed in seconds. :return: response dict (Etag and last modified). + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_upload_download.py + :start-after: [START create_file] + :end-before: [END create_file] + :language: python + :dedent: 4 + :caption: Create file. """ return self._create('file', content_settings=content_settings, metadata=metadata, **kwargs) @@ -158,9 +165,9 @@ def delete_file(self, **kwargs): Marks the specified file for deletion. :keyword lease: - Required if the blob has an active lease. Value can be a LeaseClient object + Required if the file has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.blob.LeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -181,6 +188,15 @@ def delete_file(self, **kwargs): :keyword int timeout: The timeout parameter is expressed in seconds. :return: None + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_upload_download.py + :start-after: [START delete_file] + :end-before: [END delete_file] + :language: python + :dedent: 4 + :caption: Delete file. """ return self._delete(**kwargs) @@ -216,16 +232,120 @@ def get_file_properties(self, **kwargs): .. admonition:: Example: - .. literalinclude:: ../tests/test_blob_samples_common.py - :start-after: [START get_blob_properties] - :end-before: [END get_blob_properties] + .. literalinclude:: ../samples/datalake_samples_upload_download.py + :start-after: [START get_file_properties] + :end-before: [END get_file_properties] :language: python - :dedent: 8 - :caption: Getting the properties for a file/directory. + :dedent: 4 + :caption: Getting the properties for a file. """ blob_properties = self._get_path_properties(**kwargs) return FileProperties._from_blob_properties(blob_properties) # pylint: disable=protected-access + def _upload_options( # pylint:disable=too-many-statements + self, data, # type: Union[Iterable[AnyStr], IO[AnyStr]] + length=None, # type: Optional[int] + **kwargs + ): + # type: (...) -> Dict[str, Any] + + encoding = kwargs.pop('encoding', 'UTF-8') + if isinstance(data, six.text_type): + data = data.encode(encoding) # type: ignore + if length is None: + length = get_length(data) + if isinstance(data, bytes): + data = data[:length] + + if isinstance(data, bytes): + stream = BytesIO(data) + elif hasattr(data, 'read'): + stream = data + elif hasattr(data, '__iter__'): + stream = IterStreamer(data, encoding=encoding) + else: + raise TypeError("Unsupported data type: {}".format(type(data))) + + validate_content = kwargs.pop('validate_content', False) + content_settings = kwargs.pop('content_settings', None) + metadata = kwargs.pop('metadata', None) + max_concurrency = kwargs.pop('max_concurrency', 1) + + kwargs['properties'] = add_metadata_headers(metadata) + kwargs['lease_access_conditions'] = get_access_conditions(kwargs.pop('lease', None)) + kwargs['modified_access_conditions'] = get_mod_conditions(kwargs) + + if content_settings: + kwargs['path_http_headers'] = get_path_http_headers(content_settings) + + kwargs['stream'] = stream + kwargs['length'] = length + kwargs['validate_content'] = validate_content + kwargs['max_concurrency'] = max_concurrency + kwargs['client'] = self._client.path + + return kwargs + + def upload_data(self, data, # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]] + length=None, # type: Optional[int] + overwrite=False, # type: Optional[bool] + **kwargs): + # type: (...) -> Dict[str, Any] + """ + Upload data to a file. + + :param data: Content to be uploaded to file + :param int length: Size of the data in bytes. + :param bool overwrite: to overwrite an existing file or not. + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: + ContentSettings object used to set path properties. + :keyword metadata: + Name-value pairs associated with the blob as metadata. + :paramtype metadata: dict(str, str) + :keyword ~azure.storage.filedatalake.DataLakeLeaseClient or str lease: + Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + or the lease ID as a string. + :keyword str umaskoverwrite: Optional and only valid if Hierarchical Namespace is enabled for the account. + When creating a file or directory and the parent folder does not have a default ACL, + the umask restricts the permissions of the file or directory to be created. + The resulting permission is given by p & ^u, where p is the permission and u is the umask. + For example, if p is 0777 and u is 0057, then the resulting permission is 0720. + The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. + The umask must be specified in 4-digit octal notation (e.g. 0766). + :keyword str permissions: Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. + :keyword ~datetime.datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :keyword ~datetime.datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :keyword str etag: + An ETag value, or the wildcard character (*). Used to check if the resource has changed, + and act according to the condition specified by the `match_condition` parameter. + :keyword ~azure.core.MatchConditions match_condition: + The match condition to use upon the etag. + :keyword int timeout: + The timeout parameter is expressed in seconds. + :return: response dict (Etag and last modified). + """ + options = self._upload_options( + data, + length=length, + overwrite=overwrite, + **kwargs) + return upload_datalake_file(**options) + @staticmethod def _append_data_options(data, offset, length=None, **kwargs): # type: (Optional[ContentSettings], Optional[Dict[str, str]], **Any) -> Dict[str, Any] @@ -268,12 +388,21 @@ def append_data(self, data, # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]] with the hash that was sent. This is primarily valuable for detecting bitflips on the wire if using http instead of https as https (the default) will already validate. Note that this MD5 hash is not stored with the - blob. + file. :keyword lease: - Required if the blob has an active lease. Value can be a LeaseClient object + Required if the file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :return: dict of the response header + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_upload_download.py + :start-after: [START append_data] + :end-before: [END append_data] + :language: python + :dedent: 4 + :caption: Append data to the file. """ options = self._append_data_options( data, @@ -324,6 +453,8 @@ def flush_data(self, offset, # type: int specified position are written to the file when flush succeeds, but this optional parameter allows data after the flush position to be retained for a future flush operation. + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: + ContentSettings object used to set path properties. :keyword bool close: Azure Storage Events allow applications to receive notifications when files change. When Azure Storage Events are enabled, a file changed event is raised. This event has a property @@ -356,6 +487,15 @@ def flush_data(self, offset, # type: int :keyword ~azure.core.MatchConditions match_condition: The match condition to use upon the etag. :return: response header in dict + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_file_system.py + :start-after: [START upload_file_to_file_system] + :end-before: [END upload_file_to_file_system] + :language: python + :dedent: 8 + :caption: Commit the previous appended data. """ options = self._flush_data_options( offset, @@ -365,13 +505,11 @@ def flush_data(self, offset, # type: int except StorageErrorException as error: process_storage_error(error) - def read_file(self, offset=None, # type: Optional[int] - length=None, # type: Optional[int] - stream=None, # type: Optional[IO] - **kwargs): - # type: (...) -> Union[int, byte] - """Download a file from the service. Return the downloaded data in bytes or - write the downloaded data into user provided stream and return the written size. + def download_file(self, offset=None, length=None, **kwargs): + # type: (Optional[int], Optional[int], Any) -> StorageStreamDownloader + """Downloads a file to the StorageStreamDownloader. The readall() method must + be used to read all the content, or readinto() must be used to download the file into + a stream. :param int offset: Start of byte range to use for downloading a section of the file. @@ -379,12 +517,10 @@ def read_file(self, offset=None, # type: Optional[int] :param int length: Number of bytes to read from the stream. This is optional, but should be supplied for optimal performance. - :param int stream: - User provided stream to write the downloaded data into. :keyword lease: - If specified, download_blob only succeeds if the blob's lease is active - and matches this ID. Required if the blob has an active lease. - :type lease: ~azure.storage.blob.LeaseClient or str + If specified, download only succeeds if the file's lease is active + and matches this ID. Required if the file has an active lease. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -408,22 +544,20 @@ def read_file(self, offset=None, # type: Optional[int] The timeout parameter is expressed in seconds. This method may make multiple calls to the Azure service and the timeout will apply to each call individually. - :returns: downloaded data or the size of data written into the provided stream - :rtype: bytes or int + :returns: A streaming object (StorageStreamDownloader) + :rtype: ~azure.storage.filedatalake.StorageStreamDownloader .. admonition:: Example: - .. literalinclude:: ../tests/test_blob_samples_hello_world.py - :start-after: [START download_a_blob] - :end-before: [END download_a_blob] + .. literalinclude:: ../samples/datalake_samples_upload_download.py + :start-after: [START read_file] + :end-before: [END read_file] :language: python - :dedent: 12 - :caption: Download a blob. + :dedent: 4 + :caption: Return the downloaded data. """ downloader = self._blob_client.download_blob(offset=offset, length=length, **kwargs) - if stream: - return downloader.readinto(stream) - return downloader.readall() + return StorageStreamDownloader(downloader) def rename_file(self, new_name, # type: str **kwargs): @@ -436,26 +570,28 @@ def rename_file(self, new_name, # type: str :keyword source_lease: A lease ID for the source path. If specified, the source path must have an active lease and the leaase ID must match. - :keyword source_lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str - :param ~azure.storage.filedatalake.ContentSettings content_settings: + :paramtype source_lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. :keyword lease: Required if the file/directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. :type lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword permissions: Optional and only valid if Hierarchical Namespace - is enabled for the account. Sets POSIX access permissions for the file - owner, the file owning group, and others. Each class may be granted - read, write, or execute permission. The sticky bit is also supported. - Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are - supported. + :keyword permissions: + Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. :type permissions: str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. @@ -493,7 +629,17 @@ def rename_file(self, new_name, # type: str The source match condition to use upon the etag. :keyword int timeout: The timeout parameter is expressed in seconds. - :return: + :return: the renamed file client + :rtype: DataLakeFileClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_upload_download.py + :start-after: [START rename_file] + :end-before: [END rename_file] + :language: python + :dedent: 4 + :caption: Rename the source file. """ new_name = new_name.strip('/') new_file_system = new_name.split('/')[0] diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_lease.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_lease.py index 04505167af84..10762258a15a 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_lease.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_lease.py @@ -70,8 +70,8 @@ def acquire(self, lease_duration=-1, **kwargs): # type: (int, Optional[int], **Any) -> None """Requests a new lease. - If the container does not have an active lease, the Blob service creates a - lease on the container and returns a new lease ID. + If the file/file system does not have an active lease, the DataLake service creates a + lease on the file/file system and returns a new lease ID. :param int lease_duration: Specifies the duration of the lease, in seconds, or negative one @@ -107,9 +107,9 @@ def renew(self, **kwargs): """Renews the lease. The lease can be renewed if the lease ID specified in the - lease client matches that associated with the container or blob. Note that - the lease may be renewed even if it has expired as long as the container - or blob has not been leased again since the expiration of that lease. When you + lease client matches that associated with the file system or file. Note that + the lease may be renewed even if it has expired as long as the file system + or file has not been leased again since the expiration of that lease. When you renew a lease, the lease duration clock resets. :keyword ~datetime.datetime if_modified_since: @@ -141,8 +141,8 @@ def release(self, **kwargs): """Release the lease. The lease may be released if the client lease id specified matches - that associated with the container or blob. Releasing the lease allows another client - to immediately acquire the lease for the container or blob as soon as the release is complete. + that associated with the file system or file. Releasing the lease allows another client + to immediately acquire the lease for the file system or file as soon as the release is complete. :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. @@ -173,7 +173,7 @@ def change(self, proposed_lease_id, **kwargs): """Change the lease ID of an active lease. :param str proposed_lease_id: - Proposed lease ID, in a GUID string format. The Blob service returns 400 + Proposed lease ID, in a GUID string format. The DataLake service returns 400 (Invalid request) if the proposed lease ID is not in the correct format. :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. @@ -201,12 +201,12 @@ def change(self, proposed_lease_id, **kwargs): def break_lease(self, lease_break_period=None, **kwargs): # type: (Optional[int], Any) -> int - """Break the lease, if the container or blob has an active lease. + """Break the lease, if the file system or file has an active lease. Once a lease is broken, it cannot be renewed. Any authorized request can break the lease; the request is not required to specify a matching lease ID. When a lease is broken, the lease break period is allowed to elapse, during which time - no lease operation except break and release can be performed on the container or blob. + no lease operation except break and release can be performed on the file system or file. When a lease is successfully broken, the response indicates the interval in seconds until a new lease can be acquired. diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_service_client.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_service_client.py index f3f91544aaf4..bea7f52c17eb 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_service_client.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_data_lake_service_client.py @@ -16,7 +16,7 @@ from ._file_system_client import FileSystemClient from ._data_lake_directory_client import DataLakeDirectoryClient from ._data_lake_file_client import DataLakeFileClient -from ._models import UserDelegationKey, FileSystemPropertiesPaged +from ._models import UserDelegationKey, FileSystemPropertiesPaged, LocationMode from ._serialize import convert_dfs_url_to_blob_url @@ -29,8 +29,7 @@ class DataLakeServiceClient(StorageAccountHostsMixin): can also be retrieved using the `get_client` functions. :ivar str url: - The full endpoint URL to the datalake service endpoint. This could be either the - primary endpoint, or the secondary endpoint depending on the current `location_mode`. + The full endpoint URL to the datalake service endpoint. :ivar str primary_endpoint: The full primary endpoint URL. :ivar str primary_hostname: @@ -47,14 +46,14 @@ class DataLakeServiceClient(StorageAccountHostsMixin): .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_authentication_samples.py + .. literalinclude:: ../samples/datalake_samples_service.py :start-after: [START create_datalake_service_client] :end-before: [END create_datalake_service_client] :language: python :dedent: 8 - :caption: Creating the DataLakeServiceClient with account url and credential. + :caption: Creating the DataLakeServiceClient from connection string. - .. literalinclude:: ../samples/test_datalake_authentication_samples.py + .. literalinclude:: ../samples/datalake_samples_service.py :start-after: [START create_datalake_service_client_oauth] :end-before: [END create_datalake_service_client_oauth] :language: python @@ -80,16 +79,30 @@ def __init__( blob_account_url = convert_dfs_url_to_blob_url(account_url) self._blob_account_url = blob_account_url self._blob_service_client = BlobServiceClient(blob_account_url, credential, **kwargs) + self._blob_service_client._hosts[LocationMode.SECONDARY] = "" #pylint: disable=protected-access _, sas_token = parse_query(parsed_url.query) self._query_str, self._raw_credential = self._format_query_string(sas_token, credential) super(DataLakeServiceClient, self).__init__(parsed_url, service='dfs', credential=self._raw_credential, **kwargs) + # ADLS doesn't support secondary endpoint, make sure it's empty + self._hosts[LocationMode.SECONDARY] = "" + + def __exit__(self, *args): + self._blob_service_client.close() + super(DataLakeServiceClient, self).__exit__(*args) + + def close(self): + # type: () -> None + """ This method is to close the sockets opened by the client. + It need not be used when using with a context manager. + """ + self._blob_service_client.close() + self.__exit__() def _format_url(self, hostname): - """Format the endpoint URL according to the current location - mode hostname. + """Format the endpoint URL according to hostname """ formated_url = "{}://{}/{}".format(self.scheme, hostname, self._query_str) return formated_url @@ -113,10 +126,17 @@ def from_connection_string( Credentials provided here will take precedence over those in the connection string. :return a DataLakeServiceClient :rtype ~azure.storage.filedatalake.DataLakeServiceClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_file_system.py + :start-after: [START create_data_lake_service_client_from_conn_str] + :end-before: [END create_data_lake_service_client_from_conn_str] + :language: python + :dedent: 8 + :caption: Creating the DataLakeServiceClient from a connection string. """ - account_url, secondary, credential = parse_connection_str(conn_str, credential, 'dfs') - if 'secondary_hostname' not in kwargs: - kwargs['secondary_hostname'] = secondary + account_url, _, credential = parse_connection_str(conn_str, credential, 'dfs') return cls(account_url, credential=credential, **kwargs) def get_user_delegation_key(self, key_start_time, # type: datetime @@ -136,6 +156,15 @@ def get_user_delegation_key(self, key_start_time, # type: datetime The timeout parameter is expressed in seconds. :return: The user delegation key. :rtype: ~azure.storage.filedatalake.UserDelegationKey + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_service.py + :start-after: [START get_user_delegation_key] + :end-before: [END get_user_delegation_key] + :language: python + :dedent: 8 + :caption: Get user delegation key from datalake service client. """ delegation_key = self._blob_service_client.get_user_delegation_key(key_start_time=key_start_time, key_expiry_time=key_expiry_time, @@ -167,11 +196,11 @@ def list_file_systems(self, name_starts_with=None, # type: Optional[str] .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START dsc_list_file_systems] - :end-before: [END dsc_list_file_systems] + .. literalinclude:: ../samples/datalake_samples_service.py + :start-after: [START list_file_systems] + :end-before: [END list_file_systems] :language: python - :dedent: 12 + :dedent: 8 :caption: Listing the file systems in the datalake service. """ item_paged = self._blob_service_client.list_containers(name_starts_with=name_starts_with, @@ -191,7 +220,8 @@ def create_file_system(self, file_system, # type: Union[FileSystemProperties, s be raised. This method returns a client with which to interact with the newly created file system. - :param str file_system: The name of the file system to create. + :param str file_system: + The name of the file system to create. :param metadata: A dict with name-value pairs to associate with the file system as metadata. Example: `{'Category':'test'}` @@ -205,11 +235,11 @@ def create_file_system(self, file_system, # type: Union[FileSystemProperties, s .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START dsc_create_file_system] - :end-before: [END dsc_create_file_system] + .. literalinclude:: ../samples/datalake_samples_service.py + :start-after: [START create_file_system_from_service_client] + :end-before: [END create_file_system_from_service_client] :language: python - :dedent: 12 + :dedent: 8 :caption: Creating a file system in the datalake service. """ file_system_client = self.get_file_system_client(file_system) @@ -228,10 +258,11 @@ def delete_file_system(self, file_system, # type: Union[FileSystemProperties, s The file system to delete. This can either be the name of the file system, or an instance of FileSystemProperties. :type file_system: str or ~azure.storage.filedatalake.FileSystemProperties - :keyword ~azure.storage.filedatalake.DataLakeLeaseClient lease: + :keyword lease: If specified, delete_file_system only succeeds if the file system's lease is active and matches this ID. Required if the file system has an active lease. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -255,11 +286,11 @@ def delete_file_system(self, file_system, # type: Union[FileSystemProperties, s .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START bsc_delete_file_system] - :end-before: [END bsc_delete_file_system] + .. literalinclude:: ../samples/datalake_samples_service.py + :start-after: [START delete_file_system_from_service_client] + :end-before: [END delete_file_system_from_service_client] :language: python - :dedent: 12 + :dedent: 8 :caption: Deleting a file system in the datalake service. """ file_system_client = self.get_file_system_client(file_system) @@ -282,15 +313,21 @@ def get_file_system_client(self, file_system # type: Union[FileSystemProperties .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START bsc_get_file_system_client] - :end-before: [END bsc_get_file_system_client] + .. literalinclude:: ../samples/datalake_samples_file_system.py + :start-after: [START create_file_system_client_from_service] + :end-before: [END create_file_system_client_from_service] :language: python :dedent: 8 :caption: Getting the file system client to interact with a specific file system. """ - return FileSystemClient(self.url, file_system, credential=self._raw_credential, _configuration=self._config, - _pipeline=self._pipeline, _location_mode=self._location_mode, _hosts=self._hosts, + try: + file_system_name = file_system.name + except AttributeError: + file_system_name = file_system + + return FileSystemClient(self.url, file_system_name, credential=self._raw_credential, + _configuration=self._config, + _pipeline=self._pipeline, _hosts=self._hosts, require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function) @@ -315,17 +352,25 @@ def get_directory_client(self, file_system, # type: Union[FileSystemProperties, .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START bsc_get_directory_client] - :end-before: [END bsc_get_directory_client] + .. literalinclude:: ../samples/datalake_samples_service.py + :start-after: [START get_directory_client_from_service_client] + :end-before: [END get_directory_client_from_service_client] :language: python - :dedent: 12 + :dedent: 8 :caption: Getting the directory client to interact with a specific directory. """ - return DataLakeDirectoryClient(self.url, file_system, directory_name=directory, + try: + file_system_name = file_system.name + except AttributeError: + file_system_name = file_system + try: + directory_name = directory.name + except AttributeError: + directory_name = directory + return DataLakeDirectoryClient(self.url, file_system_name, directory_name=directory_name, credential=self._raw_credential, _configuration=self._config, _pipeline=self._pipeline, - _location_mode=self._location_mode, _hosts=self._hosts, + _hosts=self._hosts, require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function @@ -352,21 +397,25 @@ def get_file_client(self, file_system, # type: Union[FileSystemProperties, str] .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START bsc_get_file_client] - :end-before: [END bsc_get_file_client] + .. literalinclude:: ../samples/datalake_samples_service.py + :start-after: [START get_file_client_from_service_client] + :end-before: [END get_file_client_from_service_client] :language: python - :dedent: 12 + :dedent: 8 :caption: Getting the file client to interact with a specific file. """ + try: + file_system_name = file_system.name + except AttributeError: + file_system_name = file_system try: file_path = file_path.name except AttributeError: pass return DataLakeFileClient( - self.url, file_system, file_path=file_path, credential=self._raw_credential, + self.url, file_system_name, file_path=file_path, credential=self._raw_credential, _hosts=self._hosts, _configuration=self._config, _pipeline=self._pipeline, - _location_mode=self._location_mode, require_encryption=self.require_encryption, + require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_deserialize.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_deserialize.py index cdffe887b584..9d0881a7229e 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_deserialize.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_deserialize.py @@ -34,10 +34,6 @@ def deserialize_metadata(response, obj, headers): # pylint: disable=unused-argu return {k[10:]: v for k, v in raw_metadata.items()} -def return_response_headers(response, deserialized, response_headers): # pylint: disable=unused-argument - return normalize_headers(response_headers) - - def return_headers_and_deserialized_path_list(response, deserialized, response_headers): # pylint: disable=unused-argument return deserialized.paths if deserialized.paths else {}, normalize_headers(response_headers) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_download.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_download.py new file mode 100644 index 000000000000..181b503d8c4a --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_download.py @@ -0,0 +1,53 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +from ._models import FileProperties + + +class StorageStreamDownloader(object): + """A streaming object to download from Azure Storage. + + :ivar str name: + The name of the file being downloaded. + :ivar ~azure.storage.filedatalake.FileProperties properties: + The properties of the file being downloaded. If only a range of the data is being + downloaded, this will be reflected in the properties. + :ivar int size: + The size of the total data in the stream. This will be the byte range if speficied, + otherwise the total size of the file. + """ + + def __init__(self, downloader): + self._downloader = downloader + self.name = self._downloader.name + self.properties = FileProperties._from_blob_properties(self._downloader.properties) # pylint: disable=protected-access + self.size = self._downloader.size + + def __len__(self): + return self.size + + def chunks(self): + return self._downloader.chunks() + + def readall(self): + """Download the contents of this file. + + This operation is blocking until all data is downloaded. + :rtype: bytes or str + """ + return self._downloader.readall() + + def readinto(self, stream): + """Download the contents of this file to a stream. + + :param stream: + The stream to download to. This can be an open file-handle, + or any writable stream. The stream must be seekable if the download + uses more than one parallel connection. + :returns: The number of bytes read. + :rtype: int + """ + return self._downloader.readinto(stream) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_file_system_client.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_file_system_client.py index 3e304a0ee399..c29ae03ab2b0 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_file_system_client.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_file_system_client.py @@ -49,19 +49,12 @@ class FileSystemClient(StorageAccountHostsMixin): .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system.py :start-after: [START create_file_system_client_from_service] :end-before: [END create_file_system_client_from_service] :language: python :dedent: 8 :caption: Get a FileSystemClient from an existing DataLakeServiceClient. - - .. literalinclude:: ../samples/test_file_system_samples.py - :start-after: [START create_file_system_client_sasurl] - :end-before: [END create_file_system_client_sasurl] - :language: python - :dedent: 8 - :caption: Creating the FileSystemClient client directly. """ def __init__( self, account_url, # type: str @@ -89,9 +82,7 @@ def __init__( blob_hosts = None if datalake_hosts: blob_primary_account_url = convert_dfs_url_to_blob_url(datalake_hosts[LocationMode.PRIMARY]) - blob_secondary_account_url = convert_dfs_url_to_blob_url(datalake_hosts[LocationMode.SECONDARY]) - blob_hosts = {LocationMode.PRIMARY: blob_primary_account_url, - LocationMode.SECONDARY: blob_secondary_account_url} + blob_hosts = {LocationMode.PRIMARY: blob_primary_account_url, LocationMode.SECONDARY: ""} self._container_client = ContainerClient(blob_account_url, file_system_name, credential=credential, _hosts=blob_hosts, **kwargs) @@ -101,6 +92,8 @@ def __init__( super(FileSystemClient, self).__init__(parsed_url, service='dfs', credential=self._raw_credential, _hosts=datalake_hosts, **kwargs) + # ADLS doesn't support secondary endpoint, make sure it's empty + self._hosts[LocationMode.SECONDARY] = "" self._client = DataLakeStorageClient(self.url, file_system_name, None, pipeline=self._pipeline) def _format_url(self, hostname): @@ -113,6 +106,18 @@ def _format_url(self, hostname): quote(file_system_name), self._query_str) + def __exit__(self, *args): + self._container_client.close() + super(FileSystemClient, self).__exit__(*args) + + def close(self): + # type: () -> None + """ This method is to close the sockets opened by the client. + It need not be used when using with a context manager. + """ + self._container_client.close() + self.__exit__() + @classmethod def from_connection_string( cls, conn_str, # type: str @@ -135,10 +140,17 @@ def from_connection_string( Credentials provided here will take precedence over those in the connection string. :return a FileSystemClient :rtype ~azure.storage.filedatalake.FileSystemClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_file_system.py + :start-after: [START create_file_system_client_from_connection_string] + :end-before: [END create_file_system_client_from_connection_string] + :language: python + :dedent: 8 + :caption: Create FileSystemClient from connection string """ - account_url, secondary, credential = parse_connection_str(conn_str, credential, 'dfs') - if 'secondary_hostname' not in kwargs: - kwargs['secondary_hostname'] = secondary + account_url, _, credential = parse_connection_str(conn_str, credential, 'dfs') return cls( account_url, file_system_name=file_system_name, credential=credential, **kwargs) @@ -185,12 +197,12 @@ def acquire_lease( .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system.py :start-after: [START acquire_lease_on_file_system] :end-before: [END acquire_lease_on_file_system] :language: python :dedent: 8 - :caption: Acquiring a lease on the file_system. + :caption: Acquiring a lease on the file system. """ lease = DataLakeLeaseClient(self, lease_id=lease_id) lease.acquire(lease_duration=lease_duration, **kwargs) @@ -211,7 +223,7 @@ def create_file_system(self, metadata=None, # type: Optional[Dict[str, str]] file system as metadata. Example: `{'Category':'test'}` :type metadata: dict(str, str) :param public_access: - To specify whether data in the container may be accessed publicly and the level of access. + To specify whether data in the file system may be accessed publicly and the level of access. :type public_access: ~azure.storage.filedatalake.PublicAccess :keyword int timeout: The timeout parameter is expressed in seconds. @@ -219,7 +231,7 @@ def create_file_system(self, metadata=None, # type: Optional[Dict[str, str]] .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system.py :start-after: [START create_file_system] :end-before: [END create_file_system] :language: python @@ -264,7 +276,7 @@ def delete_file_system(self, **kwargs): .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system.py :start-after: [START delete_file_system] :end-before: [END delete_file_system] :language: python @@ -288,7 +300,7 @@ def get_file_system_properties(self, **kwargs): .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system.py :start-after: [START get_file_system_properties] :end-before: [END get_file_system_properties] :language: python @@ -299,7 +311,7 @@ def get_file_system_properties(self, **kwargs): return FileSystemProperties._convert_from_container_props(container_properties) # pylint: disable=protected-access def set_file_system_metadata( # type: ignore - self, metadata=None, # type: Optional[Dict[str, str]] + self, metadata, # type: Dict[str, str] **kwargs ): # type: (...) -> Dict[str, Union[str, datetime]] @@ -334,16 +346,16 @@ def set_file_system_metadata( # type: ignore The match condition to use upon the etag. :keyword int timeout: The timeout parameter is expressed in seconds. - :returns: file system-updated property dict (Etag and last modified). + :returns: filesystem-updated property dict (Etag and last modified). .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system.py :start-after: [START set_file_system_metadata] :end-before: [END set_file_system_metadata] :language: python :dedent: 12 - :caption: Setting metadata on the container. + :caption: Setting metadata on the file system. """ return self._container_client.set_container_metadata(metadata=metadata, **kwargs) @@ -354,17 +366,17 @@ def set_file_system_access_policy( ): # type: (...) -> Dict[str, Union[str, datetime]] """Sets the permissions for the specified file system or stored access policies that may be used with Shared Access Signatures. The permissions - indicate whether blobs in a container may be accessed publicly. + indicate whether files in a file system may be accessed publicly. :param signed_identifiers: - A dictionary of access policies to associate with the container. The + A dictionary of access policies to associate with the file system. The dictionary may contain up to 5 elements. An empty dictionary will clear the access policies set on the service. :type signed_identifiers: dict[str, ~azure.storage.filedatalake.AccessPolicy] :param ~azure.storage.filedatalake.PublicAccess public_access: - To specify whether data in the container may be accessed publicly and the level of access. + To specify whether data in the file system may be accessed publicly and the level of access. :keyword lease: - Required if the container has an active lease. Value can be a DataLakeLeaseClient object + Required if the file system has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: @@ -381,7 +393,7 @@ def set_file_system_access_policy( the resource has not been modified since the specified date/time. :keyword int timeout: The timeout parameter is expressed in seconds. - :returns: Container-updated property dict (Etag and last modified). + :returns: File System-updated property dict (Etag and last modified). :rtype: dict[str, str or ~datetime.datetime] """ return self._container_client.set_container_access_policy(signed_identifiers, @@ -393,9 +405,9 @@ def get_file_system_access_policy(self, **kwargs): The permissions indicate whether file system data may be accessed publicly. :keyword lease: - If specified, get_container_access_policy only succeeds if the - container's lease is active and matches this ID. - :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str + If specified, the operation only succeeds if the + file system's lease is active and matches this ID. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword int timeout: The timeout parameter is expressed in seconds. :returns: Access policy information in a dict. @@ -421,14 +433,15 @@ def get_paths(self, path=None, # type: Optional[str] :param int max_results: An optional value that specifies the maximum number of items to return per page. If omitted or greater than 5,000, the response will include up to 5,000 items per page. - :keyword upn: Optional. Valid only when Hierarchical Namespace is - enabled for the account. If "true", the user identity values returned - in the x-ms-owner, x-ms-group, and x-ms-acl response headers will be - transformed from Azure Active Directory Object IDs to User Principal - Names. If "false", the values will be returned as Azure Active - Directory Object IDs. The default value is false. Note that group and - application Object IDs are not translated because they do not have - unique friendly names. + :keyword upn: + Optional. Valid only when Hierarchical Namespace is + enabled for the account. If "true", the user identity values returned + in the x-ms-owner, x-ms-group, and x-ms-acl response headers will be + transformed from Azure Active Directory Object IDs to User Principal + Names. If "false", the values will be returned as Azure Active + Directory Object IDs. The default value is false. Note that group and + application Object IDs are not translated because they do not have + unique friendly names. :type upn: bool :keyword int timeout: The timeout parameter is expressed in seconds. @@ -437,12 +450,12 @@ def get_paths(self, path=None, # type: Optional[str] .. admonition:: Example: - .. literalinclude:: ../tests/test_blob_samples_containers.py - :start-after: [START list_blobs_in_container] - :end-before: [END list_blobs_in_container] + .. literalinclude:: ../samples/datalake_samples_file_system.py + :start-after: [START get_paths_in_file_system] + :end-before: [END get_paths_in_file_system] :language: python :dedent: 8 - :caption: List the blobs in the container. + :caption: List the paths in the file system. """ timeout = kwargs.pop('timeout', None) command = functools.partial( @@ -466,26 +479,29 @@ def create_directory(self, directory, # type: Union[DirectoryProperties, str] or an instance of DirectoryProperties. :type directory: str or ~azure.storage.filedatalake.DirectoryProperties :param metadata: - Name-value pairs associated with the blob as metadata. + Name-value pairs associated with the file as metadata. :type metadata: dict(str, str) :keyword ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. - :keyword ~azure.storage.filedatalake.DataLakeLeaseClient or str lease: - Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + :keyword lease: + Required if the file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword str permissions: Optional and only valid if Hierarchical Namespace - is enabled for the account. Sets POSIX access permissions for the file - owner, the file owning group, and others. Each class may be granted - read, write, or execute permission. The sticky bit is also supported. - Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are - supported. + :keyword str permissions: + Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -506,6 +522,15 @@ def create_directory(self, directory, # type: Union[DirectoryProperties, str] :keyword int timeout: The timeout parameter is expressed in seconds. :return: DataLakeDirectoryClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_file_system.py + :start-after: [START create_directory_from_file_system] + :end-before: [END create_directory_from_file_system] + :language: python + :dedent: 8 + :caption: Create directory in the file system. """ directory_client = self.get_directory_client(directory) directory_client.create_directory(metadata=metadata, **kwargs) @@ -522,9 +547,9 @@ def delete_directory(self, directory, # type: Union[DirectoryProperties, str] or an instance of DirectoryProperties. :type directory: str or ~azure.storage.filedatalake.DirectoryProperties :keyword lease: - Required if the blob has an active lease. Value can be a LeaseClient object + Required if the file has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -545,6 +570,15 @@ def delete_directory(self, directory, # type: Union[DirectoryProperties, str] :keyword int timeout: The timeout parameter is expressed in seconds. :return: DataLakeDirectoryClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_file_system.py + :start-after: [START delete_directory_from_file_system] + :end-before: [END delete_directory_from_file_system] + :language: python + :dedent: 8 + :caption: Delete directory in the file system. """ directory_client = self.get_directory_client(directory) directory_client.delete_directory(**kwargs) @@ -563,24 +597,27 @@ def create_file(self, file, # type: Union[FileProperties, str] :param ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. :param metadata: - Name-value pairs associated with the blob as metadata. + Name-value pairs associated with the file as metadata. :type metadata: dict(str, str) - :keyword ~azure.storage.filedatalake.DataLakeLeaseClient or str lease: - Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + :keyword lease: + Required if the file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword str permissions: Optional and only valid if Hierarchical Namespace - is enabled for the account. Sets POSIX access permissions for the file - owner, the file owning group, and others. Each class may be granted - read, write, or execute permission. The sticky bit is also supported. - Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are - supported. + :keyword str permissions: + Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -601,13 +638,21 @@ def create_file(self, file, # type: Union[FileProperties, str] :keyword int timeout: The timeout parameter is expressed in seconds. :return: DataLakeFileClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_file_system.py + :start-after: [START create_file_from_file_system] + :end-before: [END create_file_from_file_system] + :language: python + :dedent: 8 + :caption: Create file in the file system. """ file_client = self.get_file_client(file) file_client.create_file(**kwargs) return file_client def delete_file(self, file, # type: Union[FileProperties, str] - lease=None, # type: Optional[Union[DataLakeLeaseClient, str]] **kwargs): # type: (...) -> DataLakeFileClient """ @@ -618,9 +663,9 @@ def delete_file(self, file, # type: Union[FileProperties, str] or an instance of FileProperties. :type file: str or ~azure.storage.filedatalake.FileProperties :keyword lease: - Required if the blob has an active lease. Value can be a LeaseClient object + Required if the file has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -641,12 +686,21 @@ def delete_file(self, file, # type: Union[FileProperties, str] :keyword int timeout: The timeout parameter is expressed in seconds. :return: DataLakeFileClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_file_system.py + :start-after: [START delete_file_from_file_system] + :end-before: [END delete_file_from_file_system] + :language: python + :dedent: 8 + :caption: Delete file in the file system. """ file_client = self.get_file_client(file) - file_client.delete_file(lease=lease, **kwargs) + file_client.delete_file(**kwargs) return file_client - def get_root_directory_client(self): + def _get_root_directory_client(self): # type: () -> DataLakeDirectoryClient """Get a client to interact with the root directory. @@ -671,17 +725,22 @@ def get_directory_client(self, directory # type: Union[DirectoryProperties, str .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system.py :start-after: [START get_directory_client_from_file_system] :end-before: [END get_directory_client_from_file_system] :language: python - :dedent: 12 + :dedent: 8 :caption: Getting the directory client to interact with a specific directory. """ - return DataLakeDirectoryClient(self.url, self.file_system_name, directory_name=directory, + try: + directory_name = directory.name + except AttributeError: + directory_name = directory + + return DataLakeDirectoryClient(self.url, self.file_system_name, directory_name=directory_name, credential=self._raw_credential, _configuration=self._config, _pipeline=self._pipeline, - _location_mode=self._location_mode, _hosts=self._hosts, + _hosts=self._hosts, require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function @@ -703,11 +762,11 @@ def get_file_client(self, file_path # type: Union[FileProperties, str] .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system.py :start-after: [START get_file_client_from_file_system] :end-before: [END get_file_client_from_file_system] :language: python - :dedent: 12 + :dedent: 8 :caption: Getting the file client to interact with a specific file. """ try: @@ -718,6 +777,6 @@ def get_file_client(self, file_path # type: Union[FileProperties, str] return DataLakeFileClient( self.url, self.file_system_name, file_path=file_path, credential=self._raw_credential, _hosts=self._hosts, _configuration=self._config, _pipeline=self._pipeline, - _location_mode=self._location_mode, require_encryption=self.require_encryption, + require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_generated/aio/_data_lake_storage_client_async.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_generated/aio/_data_lake_storage_client_async.py index db3e60e91bad..3f41f1bd7566 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_generated/aio/_data_lake_storage_client_async.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_generated/aio/_data_lake_storage_client_async.py @@ -64,3 +64,9 @@ async def __aenter__(self): return self async def __aexit__(self, *exc_details): await self._client.__aexit__(*exc_details) + + async def close(self): + """ This method is to close the sockets opened by the client. + It need not be used when using with a context manager. + """ + await self._client.close() diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_models.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_models.py index c0c55118d871..79dc32d8b4d6 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_models.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_models.py @@ -117,7 +117,7 @@ class DirectoryProperties(DictMixin): :ivar str etag: The ETag contains a value that you can use to perform operations conditionally. :ivar bool deleted: if the current directory marked as deleted - :ivar dict metadata: Name-value pairs associated with the blob as metadata. + :ivar dict metadata: Name-value pairs associated with the directory as metadata. :ivar ~azure.storage.filedatalake.LeaseProperties lease: Stores all the lease information for the directory. :ivar ~datetime.datetime last_modified: @@ -164,7 +164,7 @@ class FileProperties(DictMixin): :ivar str etag: The ETag contains a value that you can use to perform operations conditionally. :ivar bool deleted: if the current file marked as deleted - :ivar dict metadata: Name-value pairs associated with the blob as metadata. + :ivar dict metadata: Name-value pairs associated with the file as metadata. :ivar ~azure.storage.filedatalake.LeaseProperties lease: Stores all the lease information for the file. :ivar ~datetime.datetime last_modified: @@ -221,7 +221,7 @@ class PathProperties(object): read, write, or execute permission. The sticky bit is also supported. Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are supported. - :ivar datetime last_modified: A datetime object representing the last time the blob was modified. + :ivar datetime last_modified: A datetime object representing the last time the directory/file was modified. :ivar bool is_directory: is the path a directory or not. :ivar str etag: The ETag contains a value that you can use to perform operations conditionally. @@ -356,18 +356,31 @@ class ContentSettings(BlobContentSettings): If the content_md5 has been set for the file, this response header is stored so that the client can check for message content integrity. + :keyword str content_type: + The content type specified for the file or directory. If no content type was + specified, the default content type is application/octet-stream. + :keyword str content_encoding: + If the content_encoding has previously been set + for the file, that value is stored. + :keyword str content_language: + If the content_language has previously been set + for the file, that value is stored. + :keyword str content_disposition: + content_disposition conveys additional information about how to + process the response payload, and also can be used to attach + additional metadata. If content_disposition has previously been set + for the file, that value is stored. + :keyword str cache_control: + If the cache_control has previously been set for + the file, that value is stored. + :keyword str content_md5: + If the content_md5 has been set for the file, this response + header is stored so that the client can check for message content + integrity. """ def __init__( - self, content_type=None, content_encoding=None, - content_language=None, content_disposition=None, - cache_control=None, content_md5=None, **kwargs): + self, **kwargs): super(ContentSettings, self).__init__( - content_type=content_type, - content_encoding=content_encoding, - content_language=content_language, - content_disposition=content_disposition, - cache_control=cache_control, - content_md5=content_md5, **kwargs ) @@ -445,9 +458,51 @@ def __init__(self, read=False, create=False, write=False, class AccessPolicy(BlobAccessPolicy): - def __init__(self, permission=None, start=None, expiry=None): + """Access Policy class used by the set and get access policy methods in each service. + + A stored access policy can specify the start time, expiry time, and + permissions for the Shared Access Signatures with which it's associated. + Depending on how you want to control access to your resource, you can + specify all of these parameters within the stored access policy, and omit + them from the URL for the Shared Access Signature. Doing so permits you to + modify the associated signature's behavior at any time, as well as to revoke + it. Or you can specify one or more of the access policy parameters within + the stored access policy, and the others on the URL. Finally, you can + specify all of the parameters on the URL. In this case, you can use the + stored access policy to revoke the signature, but not to modify its behavior. + + Together the Shared Access Signature and the stored access policy must + include all fields required to authenticate the signature. If any required + fields are missing, the request will fail. Likewise, if a field is specified + both in the Shared Access Signature URL and in the stored access policy, the + request will fail with status code 400 (Bad Request). + + :param permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :type permission: str or ~azure.storage.datalake.FileSystemSasPermissions + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: ~datetime.datetime or str + :keyword start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :paramtype start: ~datetime.datetime or str + """ + def __init__(self, permission=None, expiry=None, **kwargs): super(AccessPolicy, self).__init__( - permission=permission, start=start, expiry=expiry, + permission=permission, expiry=expiry, start=kwargs.pop('start', None) ) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_path_client.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_path_client.py index 073737da2448..1a0c8b185ea8 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_path_client.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_path_client.py @@ -53,7 +53,7 @@ def __init__( path_name = path_name.strip('/') if not (file_system_name and path_name): - raise ValueError("Please specify a container name and blob name.") + raise ValueError("Please specify a file system name and file path.") if not parsed_url.netloc: raise ValueError("Invalid URL: {}".format(account_url)) @@ -64,9 +64,7 @@ def __init__( blob_hosts = None if datalake_hosts: blob_primary_account_url = convert_dfs_url_to_blob_url(datalake_hosts[LocationMode.PRIMARY]) - blob_secondary_account_url = convert_dfs_url_to_blob_url(datalake_hosts[LocationMode.SECONDARY]) - blob_hosts = {LocationMode.PRIMARY: blob_primary_account_url, - LocationMode.SECONDARY: blob_secondary_account_url} + blob_hosts = {LocationMode.PRIMARY: blob_primary_account_url, LocationMode.SECONDARY: ""} self._blob_client = BlobClient(blob_account_url, file_system_name, path_name, credential=credential, _hosts=blob_hosts, **kwargs) @@ -78,8 +76,22 @@ def __init__( super(PathClient, self).__init__(parsed_url, service='dfs', credential=self._raw_credential, _hosts=datalake_hosts, **kwargs) + # ADLS doesn't support secondary endpoint, make sure it's empty + self._hosts[LocationMode.SECONDARY] = "" self._client = DataLakeStorageClient(self.url, file_system_name, path_name, pipeline=self._pipeline) + def __exit__(self, *args): + self._blob_client.close() + super(PathClient, self).__exit__(*args) + + def close(self): + # type: () -> None + """ This method is to close the sockets opened by the client. + It need not be used when using with a context manager. + """ + self._blob_client.close() + self.__exit__() + def _format_url(self, hostname): file_system_name = self.file_system_name if isinstance(file_system_name, six.text_type): @@ -121,9 +133,10 @@ def _create(self, resource_type, content_settings=None, metadata=None, **kwargs) """ Create directory or file - :param resource_type: Required for Create File and Create Directory. - The value must be "file" or "directory". Possible values include: - 'directory', 'file' + :param resource_type: + Required for Create File and Create Directory. + The value must be "file" or "directory". Possible values include: + 'directory', 'file' :type resource_type: str :param ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. @@ -133,20 +146,22 @@ def _create(self, resource_type, content_settings=None, metadata=None, **kwargs) :keyword lease: Required if the file/directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword permissions: Optional and only valid if Hierarchical Namespace - is enabled for the account. Sets POSIX access permissions for the file - owner, the file owning group, and others. Each class may be granted - read, write, or execute permission. The sticky bit is also supported. - Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are - supported. + :keyword permissions: + Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. :type permissions: str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. @@ -258,29 +273,33 @@ def set_access_control(self, owner=None, # type: Optional[str] """ Set the owner, group, permissions, or access control list for a path. - :param owner: Optional. The owner of the file or directory. + :param owner: + Optional. The owner of the file or directory. :type owner: str - :param group: Optional. The owning group of the file or directory. + :param group: + Optional. The owning group of the file or directory. :type group: str - :param permissions: Optional and only valid if Hierarchical Namespace - is enabled for the account. Sets POSIX access permissions for the file - owner, the file owning group, and others. Each class may be granted - read, write, or execute permission. The sticky bit is also supported. - Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are - supported. - permissions and acl are mutually exclusive. + :param permissions: + Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. + permissions and acl are mutually exclusive. :type permissions: str - :param acl: Sets POSIX access control rights on files and directories. - The value is a comma-separated list of access control entries. Each - access control entry (ACE) consists of a scope, a type, a user or - group identifier, and permissions in the format - "[scope:][type]:[id]:[permissions]". - permissions and acl are mutually exclusive. + :param acl: + Sets POSIX access control rights on files and directories. + The value is a comma-separated list of access control entries. Each + access control entry (ACE) consists of a scope, a type, a user or + group identifier, and permissions in the format + "[scope:][type]:[id]:[permissions]". + permissions and acl are mutually exclusive. :type acl: str :keyword lease: Required if the file/directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -302,6 +321,8 @@ def set_access_control(self, owner=None, # type: Optional[str] The timeout parameter is expressed in seconds. :keyword: response dict (Etag and last modified). """ + if not any([owner, group, permissions, acl]): + raise ValueError("At least one parameter should be set for set_access_control API") options = self._set_access_control_options(owner=owner, group=group, permissions=permissions, acl=acl, **kwargs) try: return self._client.path.set_access_control(**options) @@ -330,19 +351,20 @@ def get_access_control(self, upn=None, # type: Optional[bool] **kwargs): # type: (...) -> Dict[str, Any] """ - :param upn: Optional. Valid only when Hierarchical Namespace is - enabled for the account. If "true", the user identity values returned - in the x-ms-owner, x-ms-group, and x-ms-acl response headers will be - transformed from Azure Active Directory Object IDs to User Principal - Names. If "false", the values will be returned as Azure Active - Directory Object IDs. The default value is false. Note that group and - application Object IDs are not translated because they do not have - unique friendly names. + :param upn: Optional. + Valid only when Hierarchical Namespace is + enabled for the account. If "true", the user identity values returned + in the x-ms-owner, x-ms-group, and x-ms-acl response headers will be + transformed from Azure Active Directory Object IDs to User Principal + Names. If "false", the values will be returned as Azure Active + Directory Object IDs. The default value is false. Note that group and + application Object IDs are not translated because they do not have + unique friendly names. :type upn: bool :keyword lease: Required if the file/directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -406,39 +428,41 @@ def _rename_path(self, rename_source, """ Rename directory or file - :param rename_source: The value must have the following format: "/{filesystem}/{path}". + :param rename_source: + The value must have the following format: "/{filesystem}/{path}". :type rename_source: str - :param source_lease: A lease ID for the source path. If specified, - the source path must have an active lease and the leaase ID must - match. - :type source_lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str - :param ~azure.storage.filedatalake.ContentSettings content_settings: + :keyword source_lease: + A lease ID for the source path. If specified, + the source path must have an active lease and the leaase ID must + match. + :paramtype source_lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. - :param lease: + :keyword lease: Required if the file/directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str - :param str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :param permissions: Optional and only valid if Hierarchical Namespace + :keyword permissions: Optional and only valid if Hierarchical Namespace is enabled for the account. Sets POSIX access permissions for the file owner, the file owning group, and others. Each class may be granted read, write, or execute permission. The sticky bit is also supported. Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are supported. :type permissions: str - :param ~datetime.datetime if_modified_since: + :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. If a date is passed in without timezone info, it is assumed to be UTC. Specify this header to perform the operation only if the resource has been modified since the specified time. - :param ~datetime.datetime if_unmodified_since: + :keyword ~datetime.datetime if_unmodified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. If a date is passed in without timezone info, it is assumed to be UTC. @@ -449,13 +473,13 @@ def _rename_path(self, rename_source, and act according to the condition specified by the `match_condition` parameter. :keyword ~azure.core.MatchConditions match_condition: The match condition to use upon the etag. - :param ~datetime.datetime source_if_modified_since: + :keyword ~datetime.datetime source_if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. If a date is passed in without timezone info, it is assumed to be UTC. Specify this header to perform the operation only if the resource has been modified since the specified time. - :param ~datetime.datetime source_if_unmodified_since: + :keyword ~datetime.datetime source_if_unmodified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. If a date is passed in without timezone info, it is assumed to be UTC. @@ -466,9 +490,8 @@ def _rename_path(self, rename_source, and act according to the condition specified by the `match_condition` parameter. :keyword ~azure.core.MatchConditions source_match_condition: The source match condition to use upon the etag. - :param int timeout: + :keyword int timeout: The timeout parameter is expressed in seconds. - :return: """ options = self._rename_path_options( rename_source, @@ -486,7 +509,7 @@ def _get_path_properties(self, **kwargs): :keyword lease: Required if the directory or file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -521,7 +544,7 @@ def _get_path_properties(self, **kwargs): path_properties.__class__ = DirectoryProperties return path_properties - def set_metadata(self, metadata=None, # type: Optional[Dict[str, str]] + def set_metadata(self, metadata, # type: Dict[str, str] **kwargs): # type: (...) -> Dict[str, Union[str, datetime]] """Sets one or more user-defined name-value pairs for the specified @@ -533,9 +556,10 @@ def set_metadata(self, metadata=None, # type: Optional[Dict[str, str]] A dict containing name-value pairs to associate with the file system as metadata. Example: {'category':'test'} :type metadata: dict[str, str] - :keyword str or ~azure.storage.filedatalake.DataLakeLeaseClient lease: + :keyword lease: If specified, set_file_system_metadata only succeeds if the file system's lease is active and matches this ID. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -556,15 +580,6 @@ def set_metadata(self, metadata=None, # type: Optional[Dict[str, str]] :keyword int timeout: The timeout parameter is expressed in seconds. :returns: file system-updated property dict (Etag and last modified). - - .. admonition:: Example: - - .. literalinclude:: ../samples/test_file_system_samples.py - :start-after: [START set_file_system_metadata] - :end-before: [END set_file_system_metadata] - :language: python - :dedent: 12 - :caption: Setting metadata on the container. """ return self._blob_client.set_blob_metadata(metadata=metadata, **kwargs) @@ -577,9 +592,10 @@ def set_http_headers(self, content_settings=None, # type: Optional[ContentSetti :param ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set file/directory properties. - :keyword str or ~azure.storage.filedatalake.DataLakeLeaseClient lease: + :keyword lease: If specified, set_file_system_metadata only succeeds if the file system's lease is active and matches this ID. + :paramtype lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -642,15 +658,6 @@ def acquire_lease(self, lease_duration=-1, # type: Optional[int] The timeout parameter is expressed in seconds. :returns: A DataLakeLeaseClient object, that can be run in a context manager. :rtype: ~azure.storage.filedatalake.DataLakeLeaseClient - - .. admonition:: Example: - - .. literalinclude:: ../samples/test_file_system_samples.py - :start-after: [START acquire_lease_on_file_system] - :end-before: [END acquire_lease_on_file_system] - :language: python - :dedent: 8 - :caption: Acquiring a lease on the file_system. """ lease = DataLakeLeaseClient(self, lease_id=lease_id) # type: ignore lease.acquire(lease_duration=lease_duration, **kwargs) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/base_client.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/base_client.py index 75b72a76ca91..8b65417e9a9a 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/base_client.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/base_client.py @@ -63,7 +63,7 @@ "blob": {"primary": "BlobEndpoint", "secondary": "BlobSecondaryEndpoint"}, "queue": {"primary": "QueueEndpoint", "secondary": "QueueSecondaryEndpoint"}, "file": {"primary": "FileEndpoint", "secondary": "FileSecondaryEndpoint"}, - "dfs": {"primary": "BlobEndpoint", "secondary": "BlobSecondaryEndpoint"}, + "dfs": {"primary": "BlobEndpoint", "secondary": "BlobEndpoint"}, } diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/models.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/models.py index 2a3057080b8a..c72fc6d510e4 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/models.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/models.py @@ -24,6 +24,7 @@ class StorageErrorCode(str, Enum): account_is_disabled = "AccountIsDisabled" authentication_failed = "AuthenticationFailed" authorization_failure = "AuthorizationFailure" + no_authentication_information = "NoAuthenticationInformation" condition_headers_not_supported = "ConditionHeadersNotSupported" condition_not_met = "ConditionNotMet" empty_metadata_key = "EmptyMetadataKey" diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/uploads.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/uploads.py index 13b814e11040..ceeeebe6de1e 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/uploads.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/uploads.py @@ -333,6 +333,24 @@ def _upload_chunk(self, chunk_offset, chunk_data): ) +class DataLakeFileChunkUploader(_ChunkUploader): # pylint: disable=abstract-method + + def _upload_chunk(self, chunk_offset, chunk_data): + # avoid uploading the empty pages + self.response_headers = self.service.append_data( + body=chunk_data, + position=chunk_offset, + content_length=len(chunk_data), + cls=return_response_headers, + data_stream_total=self.total_size, + upload_stream_current=self.progress_total, + **self.request_options + ) + + if not self.parallel and self.request_options.get('modified_access_conditions'): + self.request_options['modified_access_conditions'].if_match = self.response_headers['etag'] + + class FileChunkUploader(_ChunkUploader): # pylint: disable=abstract-method def _upload_chunk(self, chunk_offset, chunk_data): diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/uploads_async.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/uploads_async.py index 92fcab5ef5f0..a918d7d41ada 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/uploads_async.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared/uploads_async.py @@ -334,6 +334,23 @@ async def _upload_chunk(self, chunk_offset, chunk_data): **self.request_options) +class DataLakeFileChunkUploader(_ChunkUploader): # pylint: disable=abstract-method + + async def _upload_chunk(self, chunk_offset, chunk_data): + self.response_headers = await self.service.append_data( + body=chunk_data, + position=chunk_offset, + content_length=len(chunk_data), + cls=return_response_headers, + data_stream_total=self.total_size, + upload_stream_current=self.progress_total, + **self.request_options + ) + + if not self.parallel and self.request_options.get('modified_access_conditions'): + self.request_options['modified_access_conditions'].if_match = self.response_headers['etag'] + + class FileChunkUploader(_ChunkUploader): # pylint: disable=abstract-method async def _upload_chunk(self, chunk_offset, chunk_data): diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared_access_signature.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared_access_signature.py index 4d3d9ad9c3fc..ec4622f5b70a 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared_access_signature.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_shared_access_signature.py @@ -3,9 +3,14 @@ # Licensed under the MIT License. See License.txt in the project root for # license information. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING from azure.storage.blob import generate_account_sas as generate_blob_account_sas from azure.storage.blob import generate_container_sas, generate_blob_sas +if TYPE_CHECKING: + import datetime + from ._models import AccountSasPermissions, FileSystemSasPermissions, FileSasPermissions, ResourceTypes, \ + UserDelegationKey def generate_account_sas( @@ -14,14 +19,12 @@ def generate_account_sas( resource_types, # type: Union[ResourceTypes, str] permission, # type: Union[AccountSasPermissions, str] expiry, # type: Optional[Union[datetime, str]] - start=None, # type: Optional[Union[datetime, str]] - ip=None, # type: Optional[str] **kwargs # type: Any ): # type: (...) -> str - """Generates a shared access signature for the blob service. + """Generates a shared access signature for the DataLake service. - Use the returned signature with the credential parameter of any BlobServiceClient, - ContainerClient or BlobClient. + Use the returned signature as the credential parameter of any DataLakeServiceClient, + FileSystemClient, DataLakeDirectoryClient or DataLakeFileClient. :param str account_name: The storage account name used to generate the shared access signature. @@ -29,14 +32,14 @@ def generate_account_sas( The access key to generate the shared access signature. :param resource_types: Specifies the resource types that are accessible with the account SAS. - :type resource_types: str or ~azure.storage.blob.ResourceTypes + :type resource_types: str or ~azure.storage.filedatalake.ResourceTypes :param permission: The permissions associated with the shared access signature. The user is restricted to operations allowed by the permissions. Required unless an id is given referencing a stored access policy which contains this field. This field must be omitted if it has been specified in an associated stored access policy. - :type permission: str or ~azure.storage.blob.AccountSasPermissions + :type permission: str or ~azure.storage.filedatalake.AccountSasPermissions :param expiry: The time at which the shared access signature becomes invalid. Required unless an id is given referencing a stored access policy @@ -45,14 +48,14 @@ def generate_account_sas( convert values to UTC. If a date is passed in without timezone info, it is assumed to be UTC. :type expiry: ~datetime.datetime or str - :param start: + :keyword start: The time at which the shared access signature becomes valid. If omitted, start time for this call is assumed to be the time when the storage service receives the request. Azure will always convert values to UTC. If a date is passed in without timezone info, it is assumed to be UTC. - :type start: ~datetime.datetime or str - :param str ip: + :paramtype start: ~datetime.datetime or str + :keyword str ip: Specifies an IP address or a range of IP addresses from which to accept requests. If the IP address from which the request originates does not match the IP address or address range specified on the SAS token, the request is not authenticated. @@ -62,15 +65,6 @@ def generate_account_sas( Specifies the protocol permitted for a request made. The default value is https. :return: A Shared Access Signature (sas) token. :rtype: str - - .. admonition:: Example: - - .. literalinclude:: ../tests/test_blob_samples_authentication.py - :start-after: [START create_sas_token] - :end-before: [END create_sas_token] - :language: python - :dedent: 8 - :caption: Generating a shared access signature. """ return generate_blob_account_sas( account_name=account_name, @@ -78,8 +72,6 @@ def generate_account_sas( resource_types=resource_types, permission=permission, expiry=expiry, - start=start, - ip=ip, **kwargs ) @@ -87,32 +79,30 @@ def generate_account_sas( def generate_file_system_sas( account_name, # type: str file_system_name, # type: str - account_key=None, # type: Optional[str] - user_delegation_key=None, # type: Optional[UserDelegationKey] + credential, # type: Union[str, UserDelegationKey] permission=None, # type: Optional[Union[FileSystemSasPermissions, str]] expiry=None, # type: Optional[Union[datetime, str]] - start=None, # type: Optional[Union[datetime, str]] - ip=None, # type: Optional[str] **kwargs # type: Any ): # type: (...) -> str - """Generates a shared access signature for a container. + """Generates a shared access signature for a file system. - Use the returned signature with the credential parameter of any BlobServiceClient, - ContainerClient or BlobClient. + Use the returned signature with the credential parameter of any DataLakeServiceClient, + FileSystemClient, DataLakeDirectoryClient or DataLakeFileClient. :param str account_name: The storage account name used to generate the shared access signature. :param str file_system_name: The name of the file system. - :param str account_key: - The access key to generate the shared access signature. Either `account_key` or - `user_delegation_key` must be specified. - :param ~azure.storage.blob.UserDelegationKey user_delegation_key: - Instead of an account key, the user could pass in a user delegation key. + :param str credential: + Credential could be either account key or user delegation key. + If use account key is used as credential, then the credential type should be a str. + Instead of an account key, the user could also pass in a user delegation key. A user delegation key can be obtained from the service by authenticating with an AAD identity; - this can be accomplished by calling :func:`~azure.storage.blob.BlobServiceClient.get_user_delegation_key`. + this can be accomplished + by calling :func:`~azure.storage.filedatalake.DataLakeServiceClient.get_user_delegation_key`. When present, the SAS is signed with the user delegation key instead. + :type credential: str or ~azure.storage.filedatalake.UserDelegationKey :param permission: The permissions associated with the shared access signature. The user is restricted to operations allowed by the permissions. @@ -120,7 +110,7 @@ def generate_file_system_sas( Required unless an id is given referencing a stored access policy which contains this field. This field must be omitted if it has been specified in an associated stored access policy. - :type permission: str or ~azure.storage.blob.ContainerSasPermissions + :type permission: str or ~azure.storage.filedatalake.FileSystemSasPermissions :param expiry: The time at which the shared access signature becomes invalid. Required unless an id is given referencing a stored access policy @@ -129,14 +119,14 @@ def generate_file_system_sas( convert values to UTC. If a date is passed in without timezone info, it is assumed to be UTC. :type expiry: datetime or str - :param start: + :keyword start: The time at which the shared access signature becomes valid. If omitted, start time for this call is assumed to be the time when the storage service receives the request. Azure will always convert values to UTC. If a date is passed in without timezone info, it is assumed to be UTC. - :type start: datetime or str - :param str ip: + :paramtype start: datetime or str + :keyword str ip: Specifies an IP address or a range of IP addresses from which to accept requests. If the IP address from which the request originates does not match the IP address or address range specified on the SAS token, the request is not authenticated. @@ -161,25 +151,14 @@ def generate_file_system_sas( using this shared access signature. :return: A Shared Access Signature (sas) token. :rtype: str - - .. admonition:: Example: - - .. literalinclude:: ../tests/test_blob_samples_containers.py - :start-after: [START generate_sas_token] - :end-before: [END generate_sas_token] - :language: python - :dedent: 12 - :caption: Generating a sas token. """ return generate_container_sas( account_name=account_name, container_name=file_system_name, - account_key=account_key, - user_delegation_key=user_delegation_key, + account_key=credential if isinstance(credential, str) else None, + user_delegation_key=credential if not isinstance(credential, str) else None, permission=permission, expiry=expiry, - start=start, - ip=ip, **kwargs) @@ -187,36 +166,32 @@ def generate_directory_sas( account_name, # type: str file_system_name, # type: str directory_name, # type: str - account_key=None, # type: Optional[str] - user_delegation_key=None, # type: Optional[UserDelegationKey] - permission=None, # type: Optional[Union[BlobSasPermissions, str]] + credential, # type: Union[str, UserDelegationKey] + permission=None, # type: Optional[Union[FileSasPermissions, str]] expiry=None, # type: Optional[Union[datetime, str]] - start=None, # type: Optional[Union[datetime, str]] - ip=None, # type: Optional[str] **kwargs # type: Any ): # type: (...) -> str - """Generates a shared access signature for a blob. + """Generates a shared access signature for a directory. - Use the returned signature with the credential parameter of any BlobServiceClient, - ContainerClient or BlobClient. + Use the returned signature with the credential parameter of any DataLakeServiceClient, + FileSystemClient, DataLakeDirectoryClient or DataLakeFileClient. :param str account_name: The storage account name used to generate the shared access signature. - :param str container_name: - The name of the container. - :param str blob_name: - The name of the blob. - :param str snapshot: - An optional blob snapshot ID. - :param str account_key: - The access key to generate the shared access signature. Either `account_key` or - `user_delegation_key` must be specified. - :param ~azure.storage.blob.UserDelegationKey user_delegation_key: - Instead of an account key, the user could pass in a user delegation key. + :param str file_system_name: + The name of the file system. + :param str directory_name: + The name of the directory. + :param str credential: + Credential could be either account key or user delegation key. + If use account key is used as credential, then the credential type should be a str. + Instead of an account key, the user could also pass in a user delegation key. A user delegation key can be obtained from the service by authenticating with an AAD identity; - this can be accomplished by calling :func:`~azure.storage.blob.BlobServiceClient.get_user_delegation_key`. + this can be accomplished + by calling :func:`~azure.storage.filedatalake.DataLakeServiceClient.get_user_delegation_key`. When present, the SAS is signed with the user delegation key instead. + :type credential: str or ~azure.storage.filedatalake.UserDelegationKey :param permission: The permissions associated with the shared access signature. The user is restricted to operations allowed by the permissions. @@ -224,7 +199,7 @@ def generate_directory_sas( Required unless an id is given referencing a stored access policy which contains this field. This field must be omitted if it has been specified in an associated stored access policy. - :type permission: str or ~azure.storage.blob.BlobSasPermissions + :type permission: str or ~azure.storage.filedatalake.FileSasPermissions :param expiry: The time at which the shared access signature becomes invalid. Required unless an id is given referencing a stored access policy @@ -233,14 +208,14 @@ def generate_directory_sas( convert values to UTC. If a date is passed in without timezone info, it is assumed to be UTC. :type expiry: ~datetime.datetime or str - :param start: + :keyword start: The time at which the shared access signature becomes valid. If omitted, start time for this call is assumed to be the time when the storage service receives the request. Azure will always convert values to UTC. If a date is passed in without timezone info, it is assumed to be UTC. - :type start: ~datetime.datetime or str - :param str ip: + :paramtype start: ~datetime.datetime or str + :keyword str ip: Specifies an IP address or a range of IP addresses from which to accept requests. If the IP address from which the request originates does not match the IP address or address range specified on the SAS token, the request is not authenticated. @@ -270,12 +245,10 @@ def generate_directory_sas( account_name=account_name, container_name=file_system_name, blob_name=directory_name, - account_key=account_key, - user_delegation_key=user_delegation_key, + account_key=credential if isinstance(credential, str) else None, + user_delegation_key=credential if not isinstance(credential, str) else None, permission=permission, expiry=expiry, - start=start, - ip=ip, **kwargs) @@ -284,36 +257,34 @@ def generate_file_sas( file_system_name, # type: str directory_name, # type: str file_name, # type: str - account_key=None, # type: Optional[str] - user_delegation_key=None, # type: Optional[UserDelegationKey] - permission=None, # type: Optional[Union[BlobSasPermissions, str]] + credential, # type: Union[str, UserDelegationKey] + permission=None, # type: Optional[Union[FileSasPermissions, str]] expiry=None, # type: Optional[Union[datetime, str]] - start=None, # type: Optional[Union[datetime, str]] - ip=None, # type: Optional[str] - **kwargs # type: Any + **kwargs # type: Any ): # type: (...) -> str - """Generates a shared access signature for a blob. + """Generates a shared access signature for a file. - Use the returned signature with the credential parameter of any BlobServiceClient, - ContainerClient or BlobClient. + Use the returned signature with the credential parameter of any BDataLakeServiceClient, + FileSystemClient, DataLakeDirectoryClient or DataLakeFileClient. :param str account_name: The storage account name used to generate the shared access signature. - :param str container_name: - The name of the container. - :param str blob_name: - The name of the blob. - :param str snapshot: - An optional blob snapshot ID. - :param str account_key: - The access key to generate the shared access signature. Either `account_key` or - `user_delegation_key` must be specified. - :param ~azure.storage.blob.UserDelegationKey user_delegation_key: - Instead of an account key, the user could pass in a user delegation key. + :param str file_system_name: + The name of the file system. + :param str directory_name: + The name of the directory. + :param str file_name: + The name of the file. + :param str credential: + Credential could be either account key or user delegation key. + If use account key is used as credential, then the credential type should be a str. + Instead of an account key, the user could also pass in a user delegation key. A user delegation key can be obtained from the service by authenticating with an AAD identity; - this can be accomplished by calling :func:`~azure.storage.blob.BlobServiceClient.get_user_delegation_key`. + this can be accomplished + by calling :func:`~azure.storage.filedatalake.DataLakeServiceClient.get_user_delegation_key`. When present, the SAS is signed with the user delegation key instead. + :type credential: str or ~azure.storage.filedatalake.UserDelegationKey :param permission: The permissions associated with the shared access signature. The user is restricted to operations allowed by the permissions. @@ -321,7 +292,7 @@ def generate_file_sas( Required unless an id is given referencing a stored access policy which contains this field. This field must be omitted if it has been specified in an associated stored access policy. - :type permission: str or ~azure.storage.blob.BlobSasPermissions + :type permission: str or ~azure.storage.filedatalake.FileSasPermissions :param expiry: The time at which the shared access signature becomes invalid. Required unless an id is given referencing a stored access policy @@ -330,14 +301,14 @@ def generate_file_sas( convert values to UTC. If a date is passed in without timezone info, it is assumed to be UTC. :type expiry: ~datetime.datetime or str - :param start: + :keyword start: The time at which the shared access signature becomes valid. If omitted, start time for this call is assumed to be the time when the storage service receives the request. Azure will always convert values to UTC. If a date is passed in without timezone info, it is assumed to be UTC. - :type start: ~datetime.datetime or str - :param str ip: + :paramtype start: ~datetime.datetime or str + :keyword str ip: Specifies an IP address or a range of IP addresses from which to accept requests. If the IP address from which the request originates does not match the IP address or address range specified on the SAS token, the request is not authenticated. @@ -371,10 +342,8 @@ def generate_file_sas( account_name=account_name, container_name=file_system_name, blob_name=path, - account_key=account_key, - user_delegation_key=user_delegation_key, + account_key=credential if isinstance(credential, str) else None, + user_delegation_key=credential if not isinstance(credential, str) else None, permission=permission, expiry=expiry, - start=start, - ip=ip, **kwargs) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_upload_helper.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_upload_helper.py new file mode 100644 index 000000000000..e1db768eff3b --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_upload_helper.py @@ -0,0 +1,82 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +# pylint: disable=no-self-use + +from ._deserialize import ( + process_storage_error) +from ._generated.models import ( + StorageErrorException, +) +from ._shared.response_handlers import return_response_headers +from ._shared.uploads import ( + upload_data_chunks, + DataLakeFileChunkUploader) + + +def _any_conditions(modified_access_conditions=None, **kwargs): # pylint: disable=unused-argument + return any([ + modified_access_conditions.if_modified_since, + modified_access_conditions.if_unmodified_since, + modified_access_conditions.if_none_match, + modified_access_conditions.if_match + ]) + + +def upload_datalake_file( # pylint: disable=unused-argument + client=None, + stream=None, + length=None, + overwrite=None, + validate_content=None, + max_concurrency=None, + **kwargs): + try: + if length == 0: + return {} + properties = kwargs.pop('properties', None) + path_http_headers = kwargs.pop('path_http_headers', None) + modified_access_conditions = kwargs.pop('modified_access_conditions', None) + + if not overwrite: + # if customers didn't specify access conditions, they cannot flush data to existing file + if not _any_conditions(modified_access_conditions): + modified_access_conditions.if_none_match = '*' + if properties: + raise ValueError("metadata can be set only when overwrite is enabled") + + if overwrite: + response = client.create( + resource='file', + path_http_headers=path_http_headers, + properties=properties, + modified_access_conditions=modified_access_conditions, + cls=return_response_headers, + **kwargs) + + # this modified_access_conditions will be applied to flush_data to make sure + # no other flush between create and the current flush + modified_access_conditions.if_match = response['etag'] + modified_access_conditions.if_none_match = None + modified_access_conditions.if_modified_since = None + modified_access_conditions.if_unmodified_since = None + + upload_data_chunks( + service=client, + uploader_class=DataLakeFileChunkUploader, + total_size=length, + chunk_size=100 * 1024 * 1024, + stream=stream, + max_concurrency=max_concurrency, + validate_content=validate_content, + **kwargs) + + return client.flush_data(position=length, + path_http_headers=path_http_headers, + modified_access_conditions=modified_access_conditions, + cls=return_response_headers, + **kwargs) + except StorageErrorException as error: + process_storage_error(error) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_version.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_version.py index b9cb160f0443..63dfa66aca46 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_version.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_version.py @@ -4,4 +4,4 @@ # license information. # -------------------------------------------------------------------------- -VERSION = "12.0.0b8" +VERSION = "12.0.0" diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/__init__.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/__init__.py index ed8a01a5bc15..c24dde8d3478 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/__init__.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/__init__.py @@ -4,6 +4,7 @@ # license information. # -------------------------------------------------------------------------- +from ._download_async import StorageStreamDownloader from .._shared.policies_async import ExponentialRetry, LinearRetry from ._data_lake_file_client_async import DataLakeFileClient from ._data_lake_directory_client_async import DataLakeDirectoryClient @@ -19,4 +20,5 @@ 'DataLakeLeaseClient', 'ExponentialRetry', 'LinearRetry', + 'StorageStreamDownloader' ] diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_directory_client_async.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_directory_client_async.py index 106432c0250b..197b7fb79fc0 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_directory_client_async.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_directory_client_async.py @@ -37,19 +37,12 @@ class DataLakeDirectoryClient(PathClient, DataLakeDirectoryClientBase): .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_authentication_samples.py - :start-after: [START create_datalake_service_client] - :end-before: [END create_datalake_service_client] + .. literalinclude:: ../samples/datalake_samples_instantiate_client_async.py + :start-after: [START instantiate_directory_client_from_conn_str] + :end-before: [END instantiate_directory_client_from_conn_str] :language: python - :dedent: 8 - :caption: Creating the DataLakeServiceClient with account url and credential. - - .. literalinclude:: ../samples/test_datalake_authentication_samples.py - :start-after: [START create_datalake_service_client_oauth] - :end-before: [END create_datalake_service_client_oauth] - :language: python - :dedent: 8 - :caption: Creating the DataLakeServiceClient with Azure Identity credentials. + :dedent: 4 + :caption: Creating the DataLakeServiceClient from connection string. """ def __init__( @@ -63,20 +56,19 @@ def __init__( super(DataLakeDirectoryClient, self).__init__(account_url, file_system_name, directory_name, # pylint: disable=specify-parameter-names-in-call credential=credential, **kwargs) - async def create_directory(self, content_settings=None, # type: Optional[ContentSettings] - metadata=None, # type: Optional[Dict[str, str]] + async def create_directory(self, metadata=None, # type: Optional[Dict[str, str]] **kwargs): # type: (...) -> Dict[str, Union[str, datetime]] """ Create a new directory. - :param ~azure.storage.filedatalake.ContentSettings content_settings: - ContentSettings object used to set path properties. :param metadata: - Name-value pairs associated with the blob as metadata. + Name-value pairs associated with the directory as metadata. :type metadata: dict(str, str) + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: + ContentSettings object used to set path properties. :keyword lease: - Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + Required if the directory has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword str umask: @@ -114,8 +106,17 @@ async def create_directory(self, content_settings=None, # type: Optional[Conten :keyword int timeout: The timeout parameter is expressed in seconds. :return: response dict (Etag and last modified). + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_directory_async.py + :start-after: [START create_directory] + :end-before: [END create_directory] + :language: python + :dedent: 8 + :caption: Create directory. """ - return await self._create('directory', content_settings=content_settings, metadata=metadata, **kwargs) + return await self._create('directory', metadata=metadata, **kwargs) async def delete_directory(self, **kwargs): # type: (...) -> None @@ -123,9 +124,9 @@ async def delete_directory(self, **kwargs): Marks the specified directory for deletion. :keyword lease: - Required if the blob has an active lease. Value can be a LeaseClient object + Required if the directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.blob.LeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -146,6 +147,15 @@ async def delete_directory(self, **kwargs): :keyword int timeout: The timeout parameter is expressed in seconds. :return: None + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_directory_async.py + :start-after: [START delete_directory] + :end-before: [END delete_directory] + :language: python + :dedent: 4 + :caption: Delete directory. """ return await self._delete(**kwargs) @@ -157,7 +167,7 @@ async def get_directory_properties(self, **kwargs): :keyword lease: Required if the directory or file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -181,11 +191,11 @@ async def get_directory_properties(self, **kwargs): .. admonition:: Example: - .. literalinclude:: ../tests/test_blob_samples_common.py - :start-after: [START get_blob_properties] - :end-before: [END get_blob_properties] + .. literalinclude:: ../samples/datalake_samples_directory_async.py + :start-after: [START get_directory_properties] + :end-before: [END get_directory_properties] :language: python - :dedent: 8 + :dedent: 4 :caption: Getting the properties for a file/directory. """ blob_properties = await self._get_path_properties(**kwargs) @@ -204,13 +214,13 @@ async def rename_directory(self, new_name, # type: str A lease ID for the source path. If specified, the source path must have an active lease and the leaase ID must match. - :keyword source_lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str - :param ~azure.storage.filedatalake.ContentSettings content_settings: + :paramtype source_lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. :keyword lease: Required if the file/directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, @@ -264,6 +274,15 @@ async def rename_directory(self, new_name, # type: str :keyword int timeout: The timeout parameter is expressed in seconds. :return: DataLakeDirectoryClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_directory_async.py + :start-after: [START rename_directory] + :end-before: [END rename_directory] + :language: python + :dedent: 4 + :caption: Rename the source directory. """ new_name = new_name.strip('/') new_file_system = new_name.split('/')[0] @@ -280,7 +299,6 @@ async def rename_directory(self, new_name, # type: str return new_directory_client async def create_sub_directory(self, sub_directory, # type: Union[DirectoryProperties, str] - content_settings=None, # type: Optional[ContentSettings] metadata=None, # type: Optional[Dict[str, str]] **kwargs): # type: (...) -> DataLakeDirectoryClient @@ -291,14 +309,15 @@ async def create_sub_directory(self, sub_directory, # type: Union[DirectoryProp The directory with which to interact. This can either be the name of the directory, or an instance of DirectoryProperties. :type sub_directory: str or ~azure.storage.filedatalake.DirectoryProperties - :param ~azure.storage.filedatalake.ContentSettings content_settings: - ContentSettings object used to set path properties. :param metadata: - Name-value pairs associated with the blob as metadata. + Name-value pairs associated with the file as metadata. :type metadata: dict(str, str) - :keyword ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str lease: - Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: + ContentSettings object used to set path properties. + :keyword lease: + Required if the file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, @@ -336,7 +355,7 @@ async def create_sub_directory(self, sub_directory, # type: Union[DirectoryProp :return: DataLakeDirectoryClient for the subdirectory. """ subdir = self.get_sub_directory_client(sub_directory) - await subdir.create_directory(content_settings=content_settings, metadata=metadata, **kwargs) + await subdir.create_directory(metadata=metadata, **kwargs) return subdir async def delete_sub_directory(self, sub_directory, # type: Union[DirectoryProperties, str] @@ -350,9 +369,9 @@ async def delete_sub_directory(self, sub_directory, # type: Union[DirectoryProp or an instance of DirectoryProperties. :type sub_directory: str or ~azure.storage.filedatalake.DirectoryProperties :keyword lease: - Required if the blob has an active lease. Value can be a LeaseClient object + Required if the directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.blob.LeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -391,11 +410,12 @@ async def create_file(self, file, # type: Union[FileProperties, str] :keyword ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. :keyword metadata: - Name-value pairs associated with the blob as metadata. + Name-value pairs associated with the file as metadata. :type metadata: dict(str, str) - :keyword ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str lease: - Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + :keyword lease: + Required if the file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_file_client_async.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_file_client_async.py index 0da2b609a027..3b6b894d193e 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_file_client_async.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_file_client_async.py @@ -4,11 +4,13 @@ # license information. # -------------------------------------------------------------------------- +from ._download_async import StorageStreamDownloader from ._path_client_async import PathClient from .._data_lake_file_client import DataLakeFileClient as DataLakeFileClientBase from .._deserialize import process_storage_error from .._generated.models import StorageErrorException from .._models import FileProperties +from ..aio._upload_helper import upload_datalake_file class DataLakeFileClient(PathClient, DataLakeFileClientBase): @@ -37,19 +39,12 @@ class DataLakeFileClient(PathClient, DataLakeFileClientBase): .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_authentication_samples.py - :start-after: [START create_datalake_service_client] - :end-before: [END create_datalake_service_client] + .. literalinclude:: ../samples/datalake_samples_instantiate_client_async.py + :start-after: [START instantiate_file_client_from_conn_str] + :end-before: [END instantiate_file_client_from_conn_str] :language: python - :dedent: 8 - :caption: Creating the DataLakeServiceClient with account url and credential. - - .. literalinclude:: ../samples/test_datalake_authentication_samples.py - :start-after: [START create_datalake_service_client_oauth] - :end-before: [END create_datalake_service_client_oauth] - :language: python - :dedent: 8 - :caption: Creating the DataLakeServiceClient with Azure Identity credentials. + :dedent: 4 + :caption: Creating the DataLakeServiceClient from connection string. """ def __init__( @@ -73,19 +68,22 @@ async def create_file(self, content_settings=None, # type: Optional[ContentSett :param ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. :param metadata: - Name-value pairs associated with the blob as metadata. + Name-value pairs associated with the file as metadata. :type metadata: dict(str, str) - :keyword ~azure.storage.filedatalake.DataLakeLeaseClient or str lease: - Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + :keyword lease: + Required if the file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword str permissions: Optional and only valid if Hierarchical Namespace + :keyword str permissions: + Optional and only valid if Hierarchical Namespace is enabled for the account. Sets POSIX access permissions for the file owner, the file owning group, and others. Each class may be granted read, write, or execute permission. The sticky bit is also supported. @@ -111,6 +109,15 @@ async def create_file(self, content_settings=None, # type: Optional[ContentSett :keyword int timeout: The timeout parameter is expressed in seconds. :return: response dict (Etag and last modified). + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_upload_download_async.py + :start-after: [START create_file] + :end-before: [END create_file] + :language: python + :dedent: 4 + :caption: Create file. """ return await self._create('file', content_settings=content_settings, metadata=metadata, **kwargs) @@ -120,9 +127,9 @@ async def delete_file(self, **kwargs): Marks the specified file for deletion. :keyword lease: - Required if the blob has an active lease. Value can be a LeaseClient object + Required if the file has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.blob.LeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -143,6 +150,15 @@ async def delete_file(self, **kwargs): :keyword int timeout: The timeout parameter is expressed in seconds. :return: None + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_upload_download_async.py + :start-after: [START delete_file] + :end-before: [END delete_file] + :language: python + :dedent: 4 + :caption: Delete file. """ return await self._delete(**kwargs) @@ -154,7 +170,7 @@ async def get_file_properties(self, **kwargs): :keyword lease: Required if the directory or file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -178,16 +194,76 @@ async def get_file_properties(self, **kwargs): .. admonition:: Example: - .. literalinclude:: ../tests/test_blob_samples_common.py - :start-after: [START get_blob_properties] - :end-before: [END get_blob_properties] + .. literalinclude:: ../samples/datalake_samples_upload_download_async.py + :start-after: [START get_file_properties] + :end-before: [END get_file_properties] :language: python - :dedent: 8 - :caption: Getting the properties for a file/directory. + :dedent: 4 + :caption: Getting the properties for a file. """ blob_properties = await self._get_path_properties(**kwargs) return FileProperties._from_blob_properties(blob_properties) # pylint: disable=protected-access + async def upload_data(self, data, # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]] + length=None, # type: Optional[int] + overwrite=False, # type: Optional[bool] + **kwargs): + # type: (...) -> Dict[str, Any] + """ + Upload data to a file. + + :param data: Content to be uploaded to file + :param int length: Size of the data in bytes. + :param bool overwrite: to overwrite an existing file or not. + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: + ContentSettings object used to set path properties. + :keyword metadata: + Name-value pairs associated with the blob as metadata. + :paramtype metadata: dict(str, str) + :keyword ~azure.storage.filedatalake.DataLakeLeaseClient or str lease: + Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + or the lease ID as a string. + :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + When creating a file or directory and the parent folder does not have a default ACL, + the umask restricts the permissions of the file or directory to be created. + The resulting permission is given by p & ^u, where p is the permission and u is the umask. + For example, if p is 0777 and u is 0057, then the resulting permission is 0720. + The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. + The umask must be specified in 4-digit octal notation (e.g. 0766). + :keyword str permissions: Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. + :keyword ~datetime.datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :keyword ~datetime.datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :keyword str etag: + An ETag value, or the wildcard character (*). Used to check if the resource has changed, + and act according to the condition specified by the `match_condition` parameter. + :keyword ~azure.core.MatchConditions match_condition: + The match condition to use upon the etag. + :keyword int timeout: + The timeout parameter is expressed in seconds. + :return: response dict (Etag and last modified). + """ + options = self._upload_options( + data, + length=length, + overwrite=overwrite, + **kwargs) + return await upload_datalake_file(**options) + async def append_data(self, data, # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]] offset, # type: int length=None, # type: Optional[int] @@ -204,12 +280,21 @@ async def append_data(self, data, # type: Union[AnyStr, Iterable[AnyStr], IO[An with the hash that was sent. This is primarily valuable for detecting bitflips on the wire if using http instead of https as https (the default) will already validate. Note that this MD5 hash is not stored with the - blob. + file. :keyword lease: - Required if the blob has an active lease. Value can be a LeaseClient object + Required if the file has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :return: dict of the response header + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_upload_download_async.py + :start-after: [START append_data] + :end-before: [END append_data] + :language: python + :dedent: 4 + :caption: Append data to the file. """ options = self._append_data_options( data, @@ -236,6 +321,8 @@ async def flush_data(self, offset, # type: int specified position are written to the file when flush succeeds, but this optional parameter allows data after the flush position to be retained for a future flush operation. + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: + ContentSettings object used to set path properties. :keyword bool close: Azure Storage Events allow applications to receive notifications when files change. When Azure Storage Events are enabled, a file changed event is raised. This event has a property @@ -268,6 +355,15 @@ async def flush_data(self, offset, # type: int :keyword ~azure.core.MatchConditions match_condition: The match condition to use upon the etag. :return: response header in dict + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_file_system_async.py + :start-after: [START upload_file_to_file_system] + :end-before: [END upload_file_to_file_system] + :language: python + :dedent: 12 + :caption: Commit the previous appended data. """ options = self._flush_data_options( offset, @@ -277,13 +373,11 @@ async def flush_data(self, offset, # type: int except StorageErrorException as error: process_storage_error(error) - async def read_file(self, offset=None, # type: Optional[int] - length=None, # type: Optional[int] - stream=None, # type: Optional[IO] - **kwargs): - # type: (...) -> Union[int, byte] - """Download a file from the service. Return the downloaded data in bytes or - write the downloaded data into user provided stream and return the written size. + async def download_file(self, offset=None, length=None, **kwargs): + # type: (Optional[int], Optional[int], Any) -> StorageStreamDownloader + """Downloads a file to the StorageStreamDownloader. The readall() method must + be used to read all the content, or readinto() must be used to download the file into + a stream. :param int offset: Start of byte range to use for downloading a section of the file. @@ -291,12 +385,10 @@ async def read_file(self, offset=None, # type: Optional[int] :param int length: Number of bytes to read from the stream. This is optional, but should be supplied for optimal performance. - :param int stream: - User provided stream to write the downloaded data into. :keyword lease: - If specified, download_blob only succeeds if the blob's lease is active - and matches this ID. Required if the blob has an active lease. - :type lease: ~azure.storage.blob.LeaseClient or str + If specified, download only succeeds if the file's lease is active + and matches this ID. Required if the file has an active lease. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -320,22 +412,20 @@ async def read_file(self, offset=None, # type: Optional[int] The timeout parameter is expressed in seconds. This method may make multiple calls to the Azure service and the timeout will apply to each call individually. - :returns: downloaded data or the size of data written into the provided stream - :rtype: bytes or int + :returns: A streaming object (StorageStreamDownloader) + :rtype: ~azure.storage.filedatalake.aio.StorageStreamDownloader .. admonition:: Example: - .. literalinclude:: ../tests/test_blob_samples_hello_world.py - :start-after: [START download_a_blob] - :end-before: [END download_a_blob] + .. literalinclude:: ../samples/datalake_samples_upload_download_async.py + :start-after: [START read_file] + :end-before: [END read_file] :language: python - :dedent: 12 - :caption: Download a blob. + :dedent: 4 + :caption: Return the downloaded data. """ downloader = await self._blob_client.download_blob(offset=offset, length=length, **kwargs) - if stream: - return await downloader.readinto(stream) - return await downloader.readall() + return StorageStreamDownloader(downloader) async def rename_file(self, new_name, # type: str **kwargs): @@ -348,21 +438,23 @@ async def rename_file(self, new_name, # type: str :keyword source_lease: A lease ID for the source path. If specified, the source path must have an active lease and the leaase ID must match. - :keyword source_lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str - :param ~azure.storage.filedatalake.ContentSettings content_settings: + :paramtype source_lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. :keyword lease: Required if the file/directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword permissions: Optional and only valid if Hierarchical Namespace + :keyword permissions: + Optional and only valid if Hierarchical Namespace is enabled for the account. Sets POSIX access permissions for the file owner, the file owning group, and others. Each class may be granted read, write, or execute permission. The sticky bit is also supported. @@ -405,7 +497,17 @@ async def rename_file(self, new_name, # type: str The source match condition to use upon the etag. :keyword int timeout: The timeout parameter is expressed in seconds. - :return: + :return: the renamed file client + :rtype: DataLakeFileClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_upload_download_async.py + :start-after: [START rename_file] + :end-before: [END rename_file] + :language: python + :dedent: 4 + :caption: Rename the source file. """ new_name = new_name.strip('/') new_file_system = new_name.split('/')[0] diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_lease_async.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_lease_async.py index 411c9ee141c1..cadf7bc0c396 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_lease_async.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_lease_async.py @@ -72,8 +72,8 @@ async def acquire(self, lease_duration=-1, **kwargs): # type: (int, Optional[int], **Any) -> None """Requests a new lease. - If the container does not have an active lease, the Blob service creates a - lease on the container and returns a new lease ID. + If the file/file system does not have an active lease, the DataLake service creates a + lease on the file/file system and returns a new lease ID. :param int lease_duration: Specifies the duration of the lease, in seconds, or negative one @@ -109,9 +109,9 @@ async def renew(self, **kwargs): """Renews the lease. The lease can be renewed if the lease ID specified in the - lease client matches that associated with the container or blob. Note that - the lease may be renewed even if it has expired as long as the container - or blob has not been leased again since the expiration of that lease. When you + lease client matches that associated with the file system or file. Note that + the lease may be renewed even if it has expired as long as the file system + or file has not been leased again since the expiration of that lease. When you renew a lease, the lease duration clock resets. :keyword ~datetime.datetime if_modified_since: @@ -143,8 +143,8 @@ async def release(self, **kwargs): """Release the lease. The lease may be released if the client lease id specified matches - that associated with the container or blob. Releasing the lease allows another client - to immediately acquire the lease for the container or blob as soon as the release is complete. + that associated with the file system or file. Releasing the lease allows another client + to immediately acquire the lease for the file system or file as soon as the release is complete. :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. @@ -175,7 +175,7 @@ async def change(self, proposed_lease_id, **kwargs): """Change the lease ID of an active lease. :param str proposed_lease_id: - Proposed lease ID, in a GUID string format. The Blob service returns 400 + Proposed lease ID, in a GUID string format. The DataLake service returns 400 (Invalid request) if the proposed lease ID is not in the correct format. :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. @@ -203,12 +203,12 @@ async def change(self, proposed_lease_id, **kwargs): async def break_lease(self, lease_break_period=None, **kwargs): # type: (Optional[int], Any) -> int - """Break the lease, if the container or blob has an active lease. + """Break the lease, if the file system or file has an active lease. Once a lease is broken, it cannot be renewed. Any authorized request can break the lease; the request is not required to specify a matching lease ID. When a lease is broken, the lease break period is allowed to elapse, during which time - no lease operation except break and release can be performed on the container or blob. + no lease operation except break and release can be performed on the file system or file. When a lease is successfully broken, the response indicates the interval in seconds until a new lease can be acquired. diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_service_client_async.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_service_client_async.py index e0ef6b186c55..205a4ec4f6b5 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_service_client_async.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_data_lake_service_client_async.py @@ -14,7 +14,7 @@ from ._data_lake_directory_client_async import DataLakeDirectoryClient from ._data_lake_file_client_async import DataLakeFileClient from ._models import FileSystemPropertiesPaged -from .._models import UserDelegationKey +from .._models import UserDelegationKey, LocationMode class DataLakeServiceClient(AsyncStorageAccountHostsMixin, DataLakeServiceClientBase): @@ -26,8 +26,7 @@ class DataLakeServiceClient(AsyncStorageAccountHostsMixin, DataLakeServiceClient can also be retrieved using the `get_client` functions. :ivar str url: - The full endpoint URL to the datalake service endpoint. This could be either the - primary endpoint, or the secondary endpoint depending on the current `location_mode`. + The full endpoint URL to the datalake service endpoint. :ivar str primary_endpoint: The full primary endpoint URL. :ivar str primary_hostname: @@ -44,18 +43,18 @@ class DataLakeServiceClient(AsyncStorageAccountHostsMixin, DataLakeServiceClient .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_authentication_samples.py + .. literalinclude:: ../samples/datalake_samples_service_async.py :start-after: [START create_datalake_service_client] :end-before: [END create_datalake_service_client] :language: python - :dedent: 8 - :caption: Creating the DataLakeServiceClient with account url and credential. + :dedent: 4 + :caption: Creating the DataLakeServiceClient from connection string. - .. literalinclude:: ../samples/test_datalake_authentication_samples.py + .. literalinclude:: ../samples/datalake_samples_service_async.py :start-after: [START create_datalake_service_client_oauth] :end-before: [END create_datalake_service_client_oauth] :language: python - :dedent: 8 + :dedent: 4 :caption: Creating the DataLakeServiceClient with Azure Identity credentials. """ @@ -72,9 +71,22 @@ def __init__( **kwargs ) self._blob_service_client = BlobServiceClient(self._blob_account_url, credential, **kwargs) + self._blob_service_client._hosts[LocationMode.SECONDARY] = "" #pylint: disable=protected-access self._client = DataLakeStorageClient(self.url, None, None, pipeline=self._pipeline) self._loop = kwargs.get('loop', None) + async def __aexit__(self, *args): + await self._blob_service_client.close() + await super(DataLakeServiceClient, self).__aexit__(*args) + + async def close(self): + # type: () -> None + """ This method is to close the sockets opened by the client. + It need not be used when using with a context manager. + """ + await self._blob_service_client.close() + await self.__aexit__() + async def get_user_delegation_key(self, key_start_time, # type: datetime key_expiry_time, # type: datetime **kwargs # type: Any @@ -92,6 +104,15 @@ async def get_user_delegation_key(self, key_start_time, # type: datetime The timeout parameter is expressed in seconds. :return: The user delegation key. :rtype: ~azure.storage.filedatalake.UserDelegationKey + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_service_async.py + :start-after: [START get_user_delegation_key] + :end-before: [END get_user_delegation_key] + :language: python + :dedent: 8 + :caption: Get user delegation key from datalake service client. """ delegation_key = await self._blob_service_client.get_user_delegation_key( key_start_time=key_start_time, @@ -124,11 +145,11 @@ def list_file_systems(self, name_starts_with=None, # type: Optional[str] .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START dsc_list_file_systems] - :end-before: [END dsc_list_file_systems] + .. literalinclude:: ../samples/datalake_samples_service_async.py + :start-after: [START list_file_systems] + :end-before: [END list_file_systems] :language: python - :dedent: 12 + :dedent: 8 :caption: Listing the file systems in the datalake service. """ item_paged = self._blob_service_client.list_containers(name_starts_with=name_starts_with, @@ -148,7 +169,8 @@ async def create_file_system(self, file_system, # type: Union[FileSystemPropert be raised. This method returns a client with which to interact with the newly created file system. - :param str file_system: The name of the file system to create. + :param str file_system: + The name of the file system to create. :param metadata: A dict with name-value pairs to associate with the file system as metadata. Example: `{'Category':'test'}` @@ -162,11 +184,11 @@ async def create_file_system(self, file_system, # type: Union[FileSystemPropert .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START dsc_create_file_system] - :end-before: [END dsc_create_file_system] + .. literalinclude:: ../samples/datalake_samples_service_async.py + :start-after: [START create_file_system_from_service_client] + :end-before: [END create_file_system_from_service_client] :language: python - :dedent: 12 + :dedent: 8 :caption: Creating a file system in the datalake service. """ file_system_client = self.get_file_system_client(file_system) @@ -185,10 +207,11 @@ async def delete_file_system(self, file_system, # type: Union[FileSystemPropert The file system to delete. This can either be the name of the file system, or an instance of FileSystemProperties. :type file_system: str or ~azure.storage.filedatalake.FileSystemProperties - :keyword ~azure.storage.filedatalake.aio.DataLakeLeaseClient lease: + :keyword lease: If specified, delete_file_system only succeeds if the file system's lease is active and matches this ID. Required if the file system has an active lease. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -212,11 +235,11 @@ async def delete_file_system(self, file_system, # type: Union[FileSystemPropert .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START bsc_delete_file_system] - :end-before: [END bsc_delete_file_system] + .. literalinclude:: ../samples/datalake_samples_service_async.py + :start-after: [START delete_file_system_from_service_client] + :end-before: [END delete_file_system_from_service_client] :language: python - :dedent: 12 + :dedent: 8 :caption: Deleting a file system in the datalake service. """ file_system_client = self.get_file_system_client(file_system) @@ -239,15 +262,21 @@ def get_file_system_client(self, file_system # type: Union[FileSystemProperties .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START bsc_get_file_system_client] - :end-before: [END bsc_get_file_system_client] + .. literalinclude:: ../samples/datalake_samples_file_system_async.py + :start-after: [START create_file_system_client_from_service] + :end-before: [END create_file_system_client_from_service] :language: python :dedent: 8 :caption: Getting the file system client to interact with a specific file system. """ - return FileSystemClient(self.url, file_system, credential=self._raw_credential, _configuration=self._config, - _pipeline=self._pipeline, _location_mode=self._location_mode, _hosts=self._hosts, + try: + file_system_name = file_system.name + except AttributeError: + file_system_name = file_system + + return FileSystemClient(self.url, file_system_name, credential=self._raw_credential, + _configuration=self._config, + _pipeline=self._pipeline, _hosts=self._hosts, require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function) @@ -272,17 +301,25 @@ def get_directory_client(self, file_system, # type: Union[FileSystemProperties, .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START bsc_get_directory_client] - :end-before: [END bsc_get_directory_client] + .. literalinclude:: ../samples/datalake_samples_service_async.py + :start-after: [START get_directory_client_from_service_client] + :end-before: [END get_directory_client_from_service_client] :language: python - :dedent: 12 + :dedent: 8 :caption: Getting the directory client to interact with a specific directory. """ - return DataLakeDirectoryClient(self.url, file_system, directory_name=directory, + try: + file_system_name = file_system.name + except AttributeError: + file_system_name = file_system + try: + directory_name = directory.name + except AttributeError: + directory_name = directory + return DataLakeDirectoryClient(self.url, file_system_name, directory_name=directory_name, credential=self._raw_credential, _configuration=self._config, _pipeline=self._pipeline, - _location_mode=self._location_mode, _hosts=self._hosts, + _hosts=self._hosts, require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function @@ -309,21 +346,25 @@ def get_file_client(self, file_system, # type: Union[FileSystemProperties, str] .. admonition:: Example: - .. literalinclude:: ../samples/test_datalake_service_samples.py - :start-after: [START bsc_get_file_client] - :end-before: [END bsc_get_file_client] + .. literalinclude:: ../samples/datalake_samples_service_async.py + :start-after: [START get_file_client_from_service_client] + :end-before: [END get_file_client_from_service_client] :language: python - :dedent: 12 + :dedent: 8 :caption: Getting the file client to interact with a specific file. """ + try: + file_system_name = file_system.name + except AttributeError: + file_system_name = file_system try: file_path = file_path.name except AttributeError: pass return DataLakeFileClient( - self.url, file_system, file_path=file_path, credential=self._raw_credential, + self.url, file_system_name, file_path=file_path, credential=self._raw_credential, _hosts=self._hosts, _configuration=self._config, _pipeline=self._pipeline, - _location_mode=self._location_mode, require_encryption=self.require_encryption, + require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_download_async.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_download_async.py new file mode 100644 index 000000000000..2fda96f2b6fd --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_download_async.py @@ -0,0 +1,53 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +from .._models import FileProperties + + +class StorageStreamDownloader(object): + """A streaming object to download from Azure Storage. + + :ivar str name: + The name of the file being downloaded. + :ivar ~azure.storage.filedatalake.FileProperties properties: + The properties of the file being downloaded. If only a range of the data is being + downloaded, this will be reflected in the properties. + :ivar int size: + The size of the total data in the stream. This will be the byte range if speficied, + otherwise the total size of the file. + """ + + def __init__(self, downloader): + self._downloader = downloader + self.name = self._downloader.name + self.properties = FileProperties._from_blob_properties(self._downloader.properties) # pylint: disable=protected-access + self.size = self._downloader.size + + def __len__(self): + return self.size + + def chunks(self): + return self._downloader.chunks() + + async def readall(self): + """Download the contents of this file. + + This operation is blocking until all data is downloaded. + :rtype: bytes or str + """ + return await self._downloader.readall() + + async def readinto(self, stream): + """Download the contents of this file to a stream. + + :param stream: + The stream to download to. This can be an open file-handle, + or any writable stream. The stream must be seekable if the download + uses more than one parallel connection. + :returns: The number of bytes read. + :rtype: int + """ + return await self._downloader.readinto(stream) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_file_system_client_async.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_file_system_client_async.py index 46b4238e189c..a39bfb2fee7f 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_file_system_client_async.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_file_system_client_async.py @@ -10,6 +10,8 @@ Union, Optional, Any, Dict, TYPE_CHECKING ) +from azure.core.tracing.decorator import distributed_trace + from azure.core.async_paging import AsyncItemPaged from azure.core.tracing.decorator_async import distributed_trace_async @@ -55,21 +57,14 @@ class FileSystemClient(AsyncStorageAccountHostsMixin, FileSystemClientBase): shared access key, or an instance of a TokenCredentials class from azure.identity. If the URL already has a SAS token, specifying an explicit credential will take priority. - .. admonition:: Example: - - .. literalinclude:: ../samples/test_file_system_samples.py - :start-after: [START create_file_system_client_from_service] - :end-before: [END create_file_system_client_from_service] - :language: python - :dedent: 8 - :caption: Get a FileSystemClient from an existing DataLakeServiceClient. - - .. literalinclude:: ../samples/test_file_system_samples.py - :start-after: [START create_file_system_client_sasurl] - :end-before: [END create_file_system_client_sasurl] - :language: python - :dedent: 8 - :caption: Creating the FileSystemClient client directly. + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_file_system_async.py + :start-after: [START create_file_system_client_from_service] + :end-before: [END create_file_system_client_from_service] + :language: python + :dedent: 8 + :caption: Get a FileSystemClient from an existing DataLakeServiceClient. """ def __init__( @@ -94,6 +89,18 @@ def __init__( self._client = DataLakeStorageClient(self.url, file_system_name, None, pipeline=self._pipeline) self._loop = kwargs.get('loop', None) + async def __aexit__(self, *args): + await self._container_client.close() + await super(FileSystemClient, self).__aexit__(*args) + + async def close(self): + # type: () -> None + """ This method is to close the sockets opened by the client. + It need not be used when using with a context manager. + """ + await self._container_client.close() + await self.__aexit__() + @distributed_trace_async async def acquire_lease( self, lease_duration=-1, # type: int @@ -138,17 +145,18 @@ async def acquire_lease( .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system_async.py :start-after: [START acquire_lease_on_file_system] :end-before: [END acquire_lease_on_file_system] :language: python - :dedent: 8 + :dedent: 12 :caption: Acquiring a lease on the file_system. """ lease = DataLakeLeaseClient(self, lease_id=lease_id) - lease.acquire(lease_duration=lease_duration, **kwargs) + await lease.acquire(lease_duration=lease_duration, **kwargs) return lease + @distributed_trace_async async def create_file_system(self, metadata=None, # type: Optional[Dict[str, str]] public_access=None, # type: Optional[PublicAccess] **kwargs): @@ -164,7 +172,7 @@ async def create_file_system(self, metadata=None, # type: Optional[Dict[str, st file system as metadata. Example: `{'Category':'test'}` :type metadata: dict(str, str) :param public_access: - To specify whether data in the container may be accessed publicly and the level of access. + To specify whether data in the file system may be accessed publicly and the level of access. :type public_access: ~azure.storage.filedatalake.PublicAccess :keyword int timeout: The timeout parameter is expressed in seconds. @@ -172,17 +180,18 @@ async def create_file_system(self, metadata=None, # type: Optional[Dict[str, st .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system_async.py :start-after: [START create_file_system] :end-before: [END create_file_system] :language: python - :dedent: 12 + :dedent: 16 :caption: Creating a file system in the datalake service. """ return await self._container_client.create_container(metadata=metadata, public_access=public_access, **kwargs) + @distributed_trace_async async def delete_file_system(self, **kwargs): # type: (Any) -> None """Marks the specified file system for deletion. @@ -190,10 +199,11 @@ async def delete_file_system(self, **kwargs): The file system and any files contained within it are later deleted during garbage collection. If the file system is not found, a ResourceNotFoundError will be raised. - :keyword str or ~azure.storage.filedatalake.aio.DataLakeLeaseClient lease: + :keyword lease: If specified, delete_file_system only succeeds if the file system's lease is active and matches this ID. Required if the file system has an active lease. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -217,23 +227,25 @@ async def delete_file_system(self, **kwargs): .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system_async.py :start-after: [START delete_file_system] :end-before: [END delete_file_system] :language: python - :dedent: 12 + :dedent: 16 :caption: Deleting a file system in the datalake service. """ await self._container_client.delete_container(**kwargs) + @distributed_trace_async async def get_file_system_properties(self, **kwargs): # type: (Any) -> FileSystemProperties """Returns all user-defined metadata and system properties for the specified file system. The data returned does not include the file system's list of paths. - :keyword str or ~azure.storage.filedatalake.aio.DataLakeLeaseClient lease: + :keyword lease: If specified, get_file_system_properties only succeeds if the file system's lease is active and matches this ID. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword int timeout: The timeout parameter is expressed in seconds. :return: Properties for the specified file system within a file system object. @@ -241,18 +253,19 @@ async def get_file_system_properties(self, **kwargs): .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system_async.py :start-after: [START get_file_system_properties] :end-before: [END get_file_system_properties] :language: python - :dedent: 12 + :dedent: 16 :caption: Getting properties on the file system. """ container_properties = await self._container_client.get_container_properties(**kwargs) return FileSystemProperties._convert_from_container_props(container_properties) # pylint: disable=protected-access + @distributed_trace_async async def set_file_system_metadata( # type: ignore - self, metadata=None, # type: Optional[Dict[str, str]] + self, metadata, # type: Dict[str, str] **kwargs ): # type: (...) -> Dict[str, Union[str, datetime]] @@ -265,9 +278,10 @@ async def set_file_system_metadata( # type: ignore A dict containing name-value pairs to associate with the file system as metadata. Example: {'category':'test'} :type metadata: dict[str, str] - :keyword str or ~azure.storage.filedatalake.aio.DataLakeLeaseClient lease: + :keyword lease: If specified, set_file_system_metadata only succeeds if the file system's lease is active and matches this ID. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -291,15 +305,16 @@ async def set_file_system_metadata( # type: ignore .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system_async.py :start-after: [START set_file_system_metadata] :end-before: [END set_file_system_metadata] :language: python - :dedent: 12 + :dedent: 16 :caption: Setting metadata on the container. """ return await self._container_client.set_container_metadata(metadata=metadata, **kwargs) + @distributed_trace_async async def set_file_system_access_policy( self, signed_identifiers, # type: Dict[str, AccessPolicy] public_access=None, # type: Optional[Union[str, PublicAccess]] @@ -307,17 +322,17 @@ async def set_file_system_access_policy( ): # type: (...) -> Dict[str, Union[str, datetime]] """Sets the permissions for the specified file system or stored access policies that may be used with Shared Access Signatures. The permissions - indicate whether blobs in a container may be accessed publicly. + indicate whether files in a file system may be accessed publicly. :param signed_identifiers: - A dictionary of access policies to associate with the container. The + A dictionary of access policies to associate with the file system. The dictionary may contain up to 5 elements. An empty dictionary will clear the access policies set on the service. :type signed_identifiers: dict[str, ~azure.storage.filedatalake.AccessPolicy] :param ~azure.storage.filedatalake.PublicAccess public_access: - To specify whether data in the container may be accessed publicly and the level of access. + To specify whether data in the file system may be accessed publicly and the level of access. :keyword lease: - Required if the container has an active lease. Value can be a DataLakeLeaseClient object + Required if the file system has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: @@ -334,21 +349,22 @@ async def set_file_system_access_policy( the resource has not been modified since the specified date/time. :keyword int timeout: The timeout parameter is expressed in seconds. - :returns: Container-updated property dict (Etag and last modified). + :returns: filesystem-updated property dict (Etag and last modified). :rtype: dict[str, str or ~datetime.datetime] """ return await self._container_client.set_container_access_policy(signed_identifiers, public_access=public_access, **kwargs) + @distributed_trace_async async def get_file_system_access_policy(self, **kwargs): # type: (Any) -> Dict[str, Any] """Gets the permissions for the specified file system. The permissions indicate whether file system data may be accessed publicly. :keyword lease: - If specified, get_container_access_policy only succeeds if the - container's lease is active and matches this ID. - :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str + If specified, get_file_system_access_policy only succeeds if the + file system's lease is active and matches this ID. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword int timeout: The timeout parameter is expressed in seconds. :returns: Access policy information in a dict. @@ -360,6 +376,7 @@ async def get_file_system_access_policy(self, **kwargs): 'signed_identifiers': access_policy['signed_identifiers'] } + @distributed_trace def get_paths(self, path=None, # type: Optional[str] recursive=True, # type: Optional[bool] max_results=None, # type: Optional[int] @@ -371,17 +388,19 @@ def get_paths(self, path=None, # type: Optional[str] :param str path: Filters the results to return only paths under the specified path. - :param int max_results: An optional value that specifies the maximum + :param int max_results: + An optional value that specifies the maximum number of items to return per page. If omitted or greater than 5,000, the response will include up to 5,000 items per page. - :keyword upn: Optional. Valid only when Hierarchical Namespace is - enabled for the account. If "true", the user identity values returned - in the x-ms-owner, x-ms-group, and x-ms-acl response headers will be - transformed from Azure Active Directory Object IDs to User Principal - Names. If "false", the values will be returned as Azure Active - Directory Object IDs. The default value is false. Note that group and - application Object IDs are not translated because they do not have - unique friendly names. + :keyword upn: + Optional. Valid only when Hierarchical Namespace is + enabled for the account. If "true", the user identity values returned + in the x-ms-owner, x-ms-group, and x-ms-acl response headers will be + transformed from Azure Active Directory Object IDs to User Principal + Names. If "false", the values will be returned as Azure Active + Directory Object IDs. The default value is false. Note that group and + application Object IDs are not translated because they do not have + unique friendly names. :type upn: bool :keyword int timeout: The timeout parameter is expressed in seconds. @@ -390,12 +409,12 @@ def get_paths(self, path=None, # type: Optional[str] .. admonition:: Example: - .. literalinclude:: ../tests/test_blob_samples_containers.py - :start-after: [START list_blobs_in_container] - :end-before: [END list_blobs_in_container] + .. literalinclude:: ../samples/datalake_samples_file_system_async.py + :start-after: [START get_paths_in_file_system] + :end-before: [END get_paths_in_file_system] :language: python - :dedent: 8 - :caption: List the blobs in the container. + :dedent: 12 + :caption: List the blobs in the file system. """ timeout = kwargs.pop('timeout', None) command = functools.partial( @@ -407,6 +426,7 @@ def get_paths(self, path=None, # type: Optional[str] command, recursive, path=path, max_results=max_results, page_iterator_class=PathPropertiesPaged, **kwargs) + @distributed_trace_async async def create_directory(self, directory, # type: Union[DirectoryProperties, str] metadata=None, # type: Optional[Dict[str, str]] **kwargs): @@ -419,26 +439,29 @@ async def create_directory(self, directory, # type: Union[DirectoryProperties, or an instance of DirectoryProperties. :type directory: str or ~azure.storage.filedatalake.DirectoryProperties :param metadata: - Name-value pairs associated with the blob as metadata. + Name-value pairs associated with the file as metadata. :type metadata: dict(str, str) :keyword ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. - :keyword ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str lease: - Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + :keyword lease: + Required if the file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword str permissions: Optional and only valid if Hierarchical Namespace - is enabled for the account. Sets POSIX access permissions for the file - owner, the file owning group, and others. Each class may be granted - read, write, or execute permission. The sticky bit is also supported. - Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are - supported. + :keyword str permissions: + Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -459,11 +482,21 @@ async def create_directory(self, directory, # type: Union[DirectoryProperties, :keyword int timeout: The timeout parameter is expressed in seconds. :return: DataLakeDirectoryClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_file_system_async.py + :start-after: [START create_directory_from_file_system] + :end-before: [END create_directory_from_file_system] + :language: python + :dedent: 12 + :caption: Create directory in the file system. """ directory_client = self.get_directory_client(directory) await directory_client.create_directory(metadata=metadata, **kwargs) return directory_client + @distributed_trace_async async def delete_directory(self, directory, # type: Union[DirectoryProperties, str] **kwargs): # type: (...) -> DataLakeDirectoryClient @@ -475,9 +508,9 @@ async def delete_directory(self, directory, # type: Union[DirectoryProperties, or an instance of DirectoryProperties. :type directory: str or ~azure.storage.filedatalake.DirectoryProperties :keyword lease: - Required if the blob has an active lease. Value can be a LeaseClient object + Required if the file has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.blob.LeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -498,11 +531,21 @@ async def delete_directory(self, directory, # type: Union[DirectoryProperties, :keyword int timeout: The timeout parameter is expressed in seconds. :return: DataLakeDirectoryClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_file_system_async.py + :start-after: [START delete_directory_from_file_system] + :end-before: [END delete_directory_from_file_system] + :language: python + :dedent: 12 + :caption: Delete directory in the file system. """ directory_client = self.get_directory_client(directory) await directory_client.delete_directory(**kwargs) return directory_client + @distributed_trace_async async def create_file(self, file, # type: Union[FileProperties, str] **kwargs): # type: (...) -> DataLakeFileClient @@ -516,24 +559,27 @@ async def create_file(self, file, # type: Union[FileProperties, str] :param ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. :param metadata: - Name-value pairs associated with the blob as metadata. + Name-value pairs associated with the file as metadata. :type metadata: dict(str, str) - :keyword ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str lease: - Required if the blob has an active lease. Value can be a DataLakeLeaseClient object + :keyword lease: + Required if the file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :keyword str permissions: Optional and only valid if Hierarchical Namespace - is enabled for the account. Sets POSIX access permissions for the file - owner, the file owning group, and others. Each class may be granted - read, write, or execute permission. The sticky bit is also supported. - Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are - supported. + :keyword str permissions: + Optional and only valid if Hierarchical Namespace + is enabled for the account. Sets POSIX access permissions for the file + owner, the file owning group, and others. Each class may be granted + read, write, or execute permission. The sticky bit is also supported. + Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are + supported. :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -554,13 +600,22 @@ async def create_file(self, file, # type: Union[FileProperties, str] :keyword int timeout: The timeout parameter is expressed in seconds. :return: DataLakeFileClient + + .. admonition:: Example: + + .. literalinclude:: ../samples/datalake_samples_file_system_async.py + :start-after: [START create_file_from_file_system] + :end-before: [END create_file_from_file_system] + :language: python + :dedent: 12 + :caption: Create file in the file system. """ file_client = self.get_file_client(file) await file_client.create_file(**kwargs) return file_client + @distributed_trace_async async def delete_file(self, file, # type: Union[FileProperties, str] - lease=None, # type: Optional[Union[DataLakeLeaseClient, str]] **kwargs): # type: (...) -> DataLakeFileClient """ @@ -571,9 +626,9 @@ async def delete_file(self, file, # type: Union[FileProperties, str] or an instance of FileProperties. :type file: str or ~azure.storage.filedatalake.FileProperties :keyword lease: - Required if the blob has an active lease. Value can be a LeaseClient object + Required if the file has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.blob.LeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -594,12 +649,19 @@ async def delete_file(self, file, # type: Union[FileProperties, str] :keyword int timeout: The timeout parameter is expressed in seconds. :return: DataLakeFileClient + + .. literalinclude:: ../samples/datalake_samples_file_system_async.py + :start-after: [START delete_file_from_file_system] + :end-before: [END delete_file_from_file_system] + :language: python + :dedent: 12 + :caption: Delete file in the file system. """ file_client = self.get_file_client(file) - await file_client.delete_file(lease=lease, **kwargs) + await file_client.delete_file(**kwargs) return file_client - def get_root_directory_client(self): + def _get_root_directory_client(self): # type: () -> DataLakeDirectoryClient """Get a client to interact with the root directory. @@ -624,17 +686,22 @@ def get_directory_client(self, directory # type: Union[DirectoryProperties, str .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system_async.py :start-after: [START get_directory_client_from_file_system] :end-before: [END get_directory_client_from_file_system] :language: python :dedent: 12 :caption: Getting the directory client to interact with a specific directory. """ - return DataLakeDirectoryClient(self.url, self.file_system_name, directory_name=directory, + try: + directory_name = directory.name + except AttributeError: + directory_name = directory + + return DataLakeDirectoryClient(self.url, self.file_system_name, directory_name=directory_name, credential=self._raw_credential, _configuration=self._config, _pipeline=self._pipeline, - _location_mode=self._location_mode, _hosts=self._hosts, + _hosts=self._hosts, require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function, @@ -657,7 +724,7 @@ def get_file_client(self, file_path # type: Union[FileProperties, str] .. admonition:: Example: - .. literalinclude:: ../samples/test_file_system_samples.py + .. literalinclude:: ../samples/datalake_samples_file_system_async.py :start-after: [START get_file_client_from_file_system] :end-before: [END get_file_client_from_file_system] :language: python @@ -672,6 +739,6 @@ def get_file_client(self, file_path # type: Union[FileProperties, str] return DataLakeFileClient( self.url, self.file_system_name, file_path=file_path, credential=self._raw_credential, _hosts=self._hosts, _configuration=self._config, _pipeline=self._pipeline, - _location_mode=self._location_mode, require_encryption=self.require_encryption, + require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function, loop=self._loop) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_path_client_async.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_path_client_async.py index 56c26caf3b0c..1fc73c902813 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_path_client_async.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_path_client_async.py @@ -39,6 +39,18 @@ def __init__( self._client = DataLakeStorageClient(self.url, file_system_name, path_name, pipeline=self._pipeline) self._loop = kwargs.get('loop', None) + async def __aexit__(self, *args): + await self._blob_client.close() + await super(PathClient, self).__aexit__(*args) + + async def close(self): + # type: () -> None + """ This method is to close the sockets opened by the client. + It need not be used when using with a context manager. + """ + await self._blob_client.close() + await self.__aexit__() + async def _create(self, resource_type, content_settings=None, metadata=None, **kwargs): # type: (...) -> Dict[str, Union[str, datetime]] """ @@ -55,9 +67,9 @@ async def _create(self, resource_type, content_settings=None, metadata=None, **k Name-value pairs associated with the file/directory as metadata. :type metadata: dict(str, str) :keyword lease: - Required if the file/directory has an active lease. Value can be a LeaseClient object + Required if the file/directory has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, @@ -113,14 +125,14 @@ async def _delete(self, **kwargs): :keyword lease: Required if the file/directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str - :param ~datetime.datetime if_modified_since: + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. If a date is passed in without timezone info, it is assumed to be UTC. Specify this header to perform the operation only if the resource has been modified since the specified time. - :param ~datetime.datetime if_unmodified_since: + :keyword ~datetime.datetime if_unmodified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. If a date is passed in without timezone info, it is assumed to be UTC. @@ -131,7 +143,7 @@ async def _delete(self, **kwargs): and act according to the condition specified by the `match_condition` parameter. :keyword ~azure.core.MatchConditions match_condition: The match condition to use upon the etag. - :param int timeout: + :keyword int timeout: The timeout parameter is expressed in seconds. :return: None """ @@ -176,7 +188,7 @@ async def set_access_control(self, owner=None, # type: Optional[str] :keyword lease: Required if the file/directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -223,7 +235,7 @@ async def get_access_control(self, upn=None, # type: Optional[bool] :keyword lease: Required if the file/directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -259,37 +271,39 @@ async def _rename_path(self, rename_source, :param rename_source: The value must have the following format: "/{filesystem}/{path}". :type rename_source: str - :param source_lease: A lease ID for the source path. If specified, + :keyword source_lease: A lease ID for the source path. If specified, the source path must have an active lease and the leaase ID must match. - :type source_lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str - :param ~azure.storage.filedatalake.ContentSettings content_settings: + :paramtype source_lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :keyword ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set path properties. - :param lease: + :keyword lease: Required if the file/directory has an active lease. Value can be a LeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str - :param str umask: Optional and only valid if Hierarchical Namespace is enabled for the account. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :keyword str umask: + Optional and only valid if Hierarchical Namespace is enabled for the account. When creating a file or directory and the parent folder does not have a default ACL, the umask restricts the permissions of the file or directory to be created. The resulting permission is given by p & ^u, where p is the permission and u is the umask. For example, if p is 0777 and u is 0057, then the resulting permission is 0720. The default permission is 0777 for a directory and 0666 for a file. The default umask is 0027. The umask must be specified in 4-digit octal notation (e.g. 0766). - :param permissions: Optional and only valid if Hierarchical Namespace + :keyword permissions: + Optional and only valid if Hierarchical Namespace is enabled for the account. Sets POSIX access permissions for the file owner, the file owning group, and others. Each class may be granted read, write, or execute permission. The sticky bit is also supported. Both symbolic (rwxrw-rw-) and 4-digit octal notation (e.g. 0766) are supported. :type permissions: str - :param ~datetime.datetime if_modified_since: + :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. If a date is passed in without timezone info, it is assumed to be UTC. Specify this header to perform the operation only if the resource has been modified since the specified time. - :param ~datetime.datetime if_unmodified_since: + :keyword ~datetime.datetime if_unmodified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. If a date is passed in without timezone info, it is assumed to be UTC. @@ -300,13 +314,13 @@ async def _rename_path(self, rename_source, and act according to the condition specified by the `match_condition` parameter. :keyword ~azure.core.MatchConditions match_condition: The match condition to use upon the etag. - :param ~datetime.datetime source_if_modified_since: + :keyword ~datetime.datetime source_if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. If a date is passed in without timezone info, it is assumed to be UTC. Specify this header to perform the operation only if the resource has been modified since the specified time. - :param ~datetime.datetime source_if_unmodified_since: + :keyword ~datetime.datetime source_if_unmodified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. If a date is passed in without timezone info, it is assumed to be UTC. @@ -317,9 +331,8 @@ async def _rename_path(self, rename_source, and act according to the condition specified by the `match_condition` parameter. :keyword ~azure.core.MatchConditions source_match_condition: The source match condition to use upon the etag. - :param int timeout: + :keyword int timeout: The timeout parameter is expressed in seconds. - :return: """ options = self._rename_path_options( rename_source, @@ -337,7 +350,7 @@ async def _get_path_properties(self, **kwargs): :keyword lease: Required if the directory or file has an active lease. Value can be a DataLakeLeaseClient object or the lease ID as a string. - :type lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -358,21 +371,12 @@ async def _get_path_properties(self, **kwargs): :keyword int timeout: The timeout parameter is expressed in seconds. :rtype: DirectoryProperties or FileProperties - - .. admonition:: Example: - - .. literalinclude:: ../tests/test_blob_samples_common.py - :start-after: [START get_blob_properties] - :end-before: [END get_blob_properties] - :language: python - :dedent: 8 - :caption: Getting the properties for a file/directory. """ path_properties = await self._blob_client.get_blob_properties(**kwargs) path_properties.__class__ = DirectoryProperties return path_properties - async def set_metadata(self, metadata=None, # type: Optional[Dict[str, str]] + async def set_metadata(self, metadata, # type: Dict[str, str] **kwargs): # type: (...) -> Dict[str, Union[str, datetime]] """Sets one or more user-defined name-value pairs for the specified @@ -384,9 +388,10 @@ async def set_metadata(self, metadata=None, # type: Optional[Dict[str, str]] A dict containing name-value pairs to associate with the file system as metadata. Example: {'category':'test'} :type metadata: dict[str, str] - :keyword str or ~azure.storage.filedatalake.aio.DataLakeLeaseClient lease: + :keyword lease: If specified, set_file_system_metadata only succeeds if the file system's lease is active and matches this ID. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. @@ -407,15 +412,6 @@ async def set_metadata(self, metadata=None, # type: Optional[Dict[str, str]] :keyword int timeout: The timeout parameter is expressed in seconds. :returns: file system-updated property dict (Etag and last modified). - - .. admonition:: Example: - - .. literalinclude:: ../samples/test_file_system_samples.py - :start-after: [START set_file_system_metadata] - :end-before: [END set_file_system_metadata] - :language: python - :dedent: 12 - :caption: Setting metadata on the container. """ return await self._blob_client.set_blob_metadata(metadata=metadata, **kwargs) @@ -428,9 +424,10 @@ async def set_http_headers(self, content_settings=None, # type: Optional[Conten :param ~azure.storage.filedatalake.ContentSettings content_settings: ContentSettings object used to set file/directory properties. - :keyword str or ~azure.storage.filedatalake.aio.DataLakeLeaseClient lease: + :keyword lease: If specified, set_file_system_metadata only succeeds if the file system's lease is active and matches this ID. + :paramtype lease: ~azure.storage.filedatalake.aio.DataLakeLeaseClient or str :keyword ~datetime.datetime if_modified_since: A DateTime value. Azure expects the date value passed in to be UTC. If timezone is included, any non-UTC datetimes will be converted to UTC. diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_upload_helper.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_upload_helper.py new file mode 100644 index 000000000000..caa678b7db64 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_upload_helper.py @@ -0,0 +1,82 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +# pylint: disable=no-self-use + +from .._deserialize import ( + process_storage_error) +from .._generated.models import ( + StorageErrorException, +) +from .._shared.response_handlers import return_response_headers +from .._shared.uploads_async import ( + upload_data_chunks, + DataLakeFileChunkUploader) + + +def _any_conditions(modified_access_conditions=None, **kwargs): # pylint: disable=unused-argument + return any([ + modified_access_conditions.if_modified_since, + modified_access_conditions.if_unmodified_since, + modified_access_conditions.if_none_match, + modified_access_conditions.if_match + ]) + + +async def upload_datalake_file( # pylint: disable=unused-argument + client=None, + stream=None, + length=None, + overwrite=None, + validate_content=None, + max_concurrency=None, + **kwargs): + try: + if length == 0: + return {} + properties = kwargs.pop('properties', None) + path_http_headers = kwargs.pop('path_http_headers', None) + modified_access_conditions = kwargs.pop('modified_access_conditions', None) + + if not overwrite: + # if customers didn't specify access conditions, they cannot flush data to existing file + if not _any_conditions(modified_access_conditions): + modified_access_conditions.if_none_match = '*' + if properties: + raise ValueError("metadata can be set only when overwrite is enabled") + + if overwrite: + response = await client.create( + resource='file', + path_http_headers=path_http_headers, + properties=properties, + modified_access_conditions=modified_access_conditions, + cls=return_response_headers, + **kwargs) + + # this modified_access_conditions will be applied to flush_data to make sure + # no other flush between create and the current flush + modified_access_conditions.if_match = response['etag'] + modified_access_conditions.if_none_match = None + modified_access_conditions.if_modified_since = None + modified_access_conditions.if_unmodified_since = None + + await upload_data_chunks( + service=client, + uploader_class=DataLakeFileChunkUploader, + total_size=length, + chunk_size=100 * 1024 * 1024, + stream=stream, + max_concurrency=max_concurrency, + validate_content=validate_content, + **kwargs) + + return await client.flush_data(position=length, + path_http_headers=path_http_headers, + modified_access_conditions=modified_access_conditions, + cls=return_response_headers, + **kwargs) + except StorageErrorException as error: + process_storage_error(error) diff --git a/sdk/storage/azure-storage-file-datalake/samples/README.md b/sdk/storage/azure-storage-file-datalake/samples/README.md index b0dc9589e2b5..7114ae2bdebb 100644 --- a/sdk/storage/azure-storage-file-datalake/samples/README.md +++ b/sdk/storage/azure-storage-file-datalake/samples/README.md @@ -14,6 +14,13 @@ These are code samples that show common scenario operations with the Azure DataL Several DataLake Storage Python SDK samples are available to you in the SDK's GitHub repository. These samples provide example code for additional scenarios commonly encountered while working with DataLake Storage: +* [`datalake_samples_service.py`](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_service.py) - Examples for authenticating and operating on the client: + * Instantiate DataLakeServiceClient using connection str + * Instantiate DataLakeServiceClient using AAD Credential + * Get user delegation key + * Create all kinds of clients from DataLakeServiceClient and operate on those clients + * List file systems + * [`datalake_samples_access_control.py`](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_access_control.py) - Examples for common DataLake Storage tasks: * Set up a file system * Create a directory diff --git a/sdk/storage/azure-storage-file-datalake/samples/SampleSource.txt b/sdk/storage/azure-storage-file-datalake/samples/SampleSource.txt new file mode 100644 index 000000000000..df46cce3a8c0 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/samples/SampleSource.txt @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_access_control.py b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_access_control.py index 356229c73c30..5299c15c643f 100644 --- a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_access_control.py +++ b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_access_control.py @@ -1,3 +1,22 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: datalake_samples_access_control.py +DESCRIPTION: + This sample demonstrates set/get access control on directories and files. +USAGE: + python datalake_samples_access_control.py + Set the environment variables with your own values before running the sample: + 1) STORAGE_ACCOUNT_NAME - the storage account name + 2) STORAGE_ACCOUNT_KEY - the storage account key +""" + import os import random import uuid diff --git a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_access_control_async.py b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_access_control_async.py new file mode 100644 index 000000000000..0e369386f24a --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_access_control_async.py @@ -0,0 +1,107 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: datalake_samples_access_control_async.py +DESCRIPTION: + This sample demonstrates set/get access control on directories and files. +USAGE: + python datalake_samples_access_control_async.py + Set the environment variables with your own values before running the sample: + 1) STORAGE_ACCOUNT_NAME - the storage account name + 2) STORAGE_ACCOUNT_KEY - the storage account key +""" + +import asyncio +import os +import random +import uuid + +from azure.storage.filedatalake.aio import ( + DataLakeServiceClient, +) + + +async def access_control_sample(filesystem_client): + # create a parent directory + dir_name = "testdir" + print("Creating a directory named '{}'.".format(dir_name)) + directory_client = await filesystem_client.create_directory(dir_name) + + # populate the directory with some child files + await create_child_files(directory_client, 35) + + # get and display the permissions of the parent directory + acl_props = await directory_client.get_access_control() + print("Permissions of directory '{}' are {}.".format(dir_name, acl_props['permissions'])) + + # set the permissions of the parent directory + new_dir_permissions = 'rwx------' + await directory_client.set_access_control(permissions=new_dir_permissions) + + # get and display the permissions of the parent directory again + acl_props = await directory_client.get_access_control() + print("New permissions of directory '{}' are {}.".format(dir_name, acl_props['permissions'])) + + # iterate through every file and set their permissions to match the directory + async for file in filesystem_client.get_paths(dir_name): + file_client = filesystem_client.get_file_client(file.name) + + # get the access control properties of the file + acl_props = await file_client.get_access_control() + + if acl_props['permissions'] != new_dir_permissions: + await file_client.set_access_control(permissions=new_dir_permissions) + print("Set the permissions of file '{}' to {}.".format(file.name, new_dir_permissions)) + else: + print("Permission for file '{}' already matches the parent.".format(file.name)) + + +async def create_child_files(directory_client, num_child_files): + import itertools + + async def create_file(): + # generate a random name + file_name = str(uuid.uuid4()).replace('-', '') + file_client = directory_client.get_file_client(file_name) + await file_client.create_file() + + futures = [asyncio.ensure_future(create_file()) for _ in itertools.repeat(None, num_child_files)] + await asyncio.wait(futures) + print("Created {} files under the directory '{}'.".format(num_child_files, directory_client.path_name)) + + +async def run(): + account_name = os.getenv('STORAGE_ACCOUNT_NAME', "") + account_key = os.getenv('STORAGE_ACCOUNT_KEY', "") + + # set up the service client with the credentials from the environment variables + service_client = DataLakeServiceClient(account_url="{}://{}.dfs.core.windows.net".format( + "https", + account_name + ), credential=account_key) + + async with service_client: + # generate a random name for testing purpose + fs_name = "testfs{}".format(random.randint(1, 1000)) + print("Generating a test filesystem named '{}'.".format(fs_name)) + + # create the filesystem + filesystem_client = await service_client.create_file_system(file_system=fs_name) + + # invoke the sample code + try: + await access_control_sample(filesystem_client) + finally: + # clean up the demo filesystem + await filesystem_client.delete_file_system() + + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(run()) diff --git a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_directory.py b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_directory.py index c05be0ca35ed..536141b108db 100644 --- a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_directory.py +++ b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_directory.py @@ -1,7 +1,28 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: datalake_samples_directory.py +DESCRIPTION: + This sample demonstrates create directory, rename directory, get directory properties, delete directory etc. +USAGE: + python datalake_samples_directory.py + Set the environment variables with your own values before running the sample: + 1) STORAGE_ACCOUNT_NAME - the storage account name + 2) STORAGE_ACCOUNT_KEY - the storage account key +""" + import os import random import uuid +from azure.core.exceptions import ResourceExistsError + from azure.storage.filedatalake import ( DataLakeServiceClient, ) @@ -11,24 +32,41 @@ def directory_sample(filesystem_client): # create a parent directory dir_name = "testdir" print("Creating a directory named '{}'.".format(dir_name)) - directory_client = filesystem_client.create_directory(dir_name) + + # Create directory from file system client + filesystem_client.create_directory(dir_name) + + directory_client = filesystem_client.get_directory_client(dir_name) + try: + # Create the existing directory again will throw exception + # [START create_directory] + directory_client.create_directory() + # [END create_directory] + except ResourceExistsError: + pass # populate the directory with some child files create_child_files(directory_client, 35) # rename the directory + # [START rename_directory] new_dir_name = "testdir2" print("Renaming the directory named '{}' to '{}'.".format(dir_name, new_dir_name)) new_directory = directory_client\ .rename_directory(new_name=directory_client.file_system_name + '/' + new_dir_name) + # [END rename_directory] # display the properties of the new directory to make sure it was renamed successfully + # [START get_directory_properties] props = new_directory.get_directory_properties() + # [END get_directory_properties] print("Properties of the new directory named '{}' are: {}.".format(new_dir_name, props)) # remove the newly renamed directory print("Removing the directory named '{}'.".format(new_dir_name)) + # [START delete_directory] new_directory.delete_directory() + # [END delete_directory] def create_child_files(directory_client, num_child_files): diff --git a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_directory_async.py b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_directory_async.py new file mode 100644 index 000000000000..b2df75ddc1d4 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_directory_async.py @@ -0,0 +1,115 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: datalake_samples_directory_async.py +DESCRIPTION: + This sample demonstrates create directory, rename directory, get directory properties, delete directory etc. +USAGE: + python datalake_samples_directory_async.py + Set the environment variables with your own values before running the sample: + 1) STORAGE_ACCOUNT_NAME - the storage account name + 2) STORAGE_ACCOUNT_KEY - the storage account key +""" + +import asyncio +import os +import random +import uuid + +from azure.core.exceptions import ResourceExistsError + +from azure.storage.filedatalake.aio import ( + DataLakeServiceClient, +) + + +async def directory_sample(filesystem_client): + # create a parent directory + dir_name = "testdir" + print("Creating a directory named '{}'.".format(dir_name)) + + # Create directory from file system client + await filesystem_client.create_directory(dir_name) + + directory_client = filesystem_client.get_directory_client(dir_name) + try: + # Create the existing directory again will throw exception + # [START create_directory] + await directory_client.create_directory() + # [END create_directory] + except ResourceExistsError: + pass + + # populate the directory with some child files + await create_child_files(directory_client, 35) + + # rename the directory + # [START rename_directory] + new_dir_name = "testdir2" + print("Renaming the directory named '{}' to '{}'.".format(dir_name, new_dir_name)) + new_directory = await directory_client\ + .rename_directory(new_name=directory_client.file_system_name + '/' + new_dir_name) + # [END rename_directory] + + # display the properties of the new directory to make sure it was renamed successfully + # [START get_directory_properties] + props = await new_directory.get_directory_properties() + # [END get_directory_properties] + print("Properties of the new directory named '{}' are: {}.".format(new_dir_name, props)) + + # remove the newly renamed directory + print("Removing the directory named '{}'.".format(new_dir_name)) + # [START delete_directory] + await new_directory.delete_directory() + # [END delete_directory] + + +async def create_child_files(directory_client, num_child_files): + import itertools + # Use a thread pool because it is too slow otherwise + + async def create_file(): + # generate a random name + file_name = str(uuid.uuid4()).replace('-', '') + file_client = directory_client.get_file_client(file_name) + await file_client.create_file() + + futures = [asyncio.ensure_future(create_file()) for _ in itertools.repeat(None, num_child_files)] + await asyncio.wait(futures) + print("Created {} files under the directory '{}'.".format(num_child_files, directory_client.path_name)) + + +async def run(): + account_name = os.getenv('STORAGE_ACCOUNT_NAME', "") + account_key = os.getenv('STORAGE_ACCOUNT_KEY', "") + + # set up the service client with the credentials from the environment variables + service_client = DataLakeServiceClient(account_url="{}://{}.dfs.core.windows.net".format( + "https", + account_name + ), credential=account_key) + + async with service_client: + # generate a random name for testing purpose + fs_name = "testfs{}".format(random.randint(1, 1000)) + print("Generating a test filesystem named '{}'.".format(fs_name)) + + # create the filesystem + filesystem_client = await service_client.create_file_system(file_system=fs_name) + + # invoke the sample code + try: + await directory_sample(filesystem_client) + finally: + # clean up the demo filesystem + await filesystem_client.delete_file_system() + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(run()) diff --git a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_file_system.py b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_file_system.py new file mode 100644 index 000000000000..0bd0cf256dd9 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_file_system.py @@ -0,0 +1,219 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: datalake_samples_file_system.py +DESCRIPTION: + This sample demonstrates common file system operations including list paths, create a file system, + set metadata etc. +USAGE: + python datalake_samples_file_system.py + Set the environment variables with your own values before running the sample: + 1) AZURE_STORAGE_CONNECTION_STRING - the connection string to your storage account +""" + +import os + +from azure.core.exceptions import ResourceExistsError + +SOURCE_FILE = 'SampleSource.txt' + + +class FileSystemSamples(object): + + connection_string = os.environ['AZURE_STORAGE_CONNECTION_STRING'] + + #--Begin File System Samples----------------------------------------------------------------- + + def file_system_sample(self): + + # [START create_file_system_client_from_service] + # Instantiate a DataLakeServiceClient using a connection string + from azure.storage.filedatalake import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + + # Instantiate a FileSystemClient + file_system_client = datalake_service_client.get_file_system_client("mynewfilesystem") + # [END create_file_system_client_from_service] + + try: + # [START create_file_system] + file_system_client.create_file_system() + # [END create_file_system] + + # [START get_file_system_properties] + properties = file_system_client.get_file_system_properties() + # [END get_file_system_properties] + + finally: + # [START delete_file_system] + file_system_client.delete_file_system() + # [END delete_file_system] + + def acquire_lease_on_file_system(self): + + # Instantiate a DataLakeServiceClient using a connection string + # [START create_data_lake_service_client_from_conn_str] + from azure.storage.filedatalake import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + # [END create_data_lake_service_client_from_conn_str] + + # Instantiate a FileSystemClient + file_system_client = datalake_service_client.get_file_system_client("myleasefilesystem") + + # Create new File System + try: + file_system_client.create_file_system() + except ResourceExistsError: + pass + + # [START acquire_lease_on_file_system] + # Acquire a lease on the file system + lease = file_system_client.acquire_lease() + + # Delete file system by passing in the lease + file_system_client.delete_file_system(lease=lease) + # [END acquire_lease_on_file_system] + + def set_metadata_on_file_system(self): + + # Instantiate a DataLakeServiceClient using a connection string + from azure.storage.filedatalake import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + + # Instantiate a FileSystemClient + file_system_client = datalake_service_client.get_file_system_client("mymetadatafilesystemsync") + + try: + # Create new File System + file_system_client.create_file_system() + + # [START set_file_system_metadata] + # Create key, value pairs for metadata + metadata = {'type': 'test'} + + # Set metadata on the file system + file_system_client.set_file_system_metadata(metadata=metadata) + # [END set_file_system_metadata] + + # Get file system properties + properties = file_system_client.get_file_system_properties() + + finally: + # Delete file system + file_system_client.delete_file_system() + + def list_paths_in_file_system(self): + + # Instantiate a DataLakeServiceClient using a connection string + from azure.storage.filedatalake import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + + # Instantiate a FileSystemClient + file_system_client = datalake_service_client.get_file_system_client("myfilesystem") + + # Create new File System + file_system_client.create_file_system() + + # [START upload_file_to_file_system] + with open(SOURCE_FILE, "rb") as data: + file_client = file_system_client.get_file_client("myfile") + file_client.create_file() + file_client.append_data(data, 0) + file_client.flush_data(data.tell()) + # [END upload_file_to_file_system] + + # [START get_paths_in_file_system] + path_list = file_system_client.get_paths() + for path in path_list: + print(path.name + '\n') + # [END get_paths_in_file_system] + + # Delete file system + file_system_client.delete_file_system() + + def get_file_client_from_file_system(self): + + # Instantiate a DataLakeServiceClient using a connection string + from azure.storage.filedatalake import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + + # Instantiate a FileSystemClient + file_system_client = datalake_service_client.get_file_system_client("myfilesystem") + + # Create new File System + try: + file_system_client.create_file_system() + except ResourceExistsError: + pass + + # [START get_file_client_from_file_system] + # Get the FileClient from the FileSystemClient to interact with a specific file + file_client = file_system_client.get_file_client("mynewfile") + # [END get_file_client_from_file_system] + + # Delete file system + file_system_client.delete_file_system() + + def get_directory_client_from_file_system(self): + + # Instantiate a DataLakeServiceClient using a connection string + from azure.storage.filedatalake import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + + # Instantiate a FileSystemClient + file_system_client = datalake_service_client.get_file_system_client("myfilesystem") + + # Create new File System + try: + file_system_client.create_file_system() + except ResourceExistsError: + pass + + # [START get_directory_client_from_file_system] + # Get the DataLakeDirectoryClient from the FileSystemClient to interact with a specific file + directory_client = file_system_client.get_directory_client("mynewdirectory") + # [END get_directory_client_from_file_system] + + # Delete file system + file_system_client.delete_file_system() + + def create_file_from_file_system(self): + # [START create_file_system_client_from_connection_string] + from azure.storage.filedatalake import FileSystemClient + file_system_client = FileSystemClient.from_connection_string(self.connection_string, "filesystem") + # [END create_file_system_client_from_connection_string] + + file_system_client.create_file_system() + + # [START create_directory_from_file_system] + directory_client = file_system_client.create_directory("mydirectory") + # [END create_directory_from_file_system] + + # [START create_file_from_file_system] + file_client = file_system_client.create_file("myfile") + # [END create_file_from_file_system] + + # [START delete_file_from_file_system] + file_system_client.delete_file("myfile") + # [END delete_file_from_file_system] + + # [START delete_directory_from_file_system] + file_system_client.delete_directory("mydirectory") + # [END delete_directory_from_file_system] + + file_system_client.delete_file_system() + +if __name__ == '__main__': + sample = FileSystemSamples() + sample.file_system_sample() + sample.acquire_lease_on_file_system() + sample.set_metadata_on_file_system() + sample.list_paths_in_file_system() + sample.get_file_client_from_file_system() + sample.create_file_from_file_system() diff --git a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_file_system_async.py b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_file_system_async.py new file mode 100644 index 000000000000..286ce724ba0a --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_file_system_async.py @@ -0,0 +1,233 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: datalake_samples_file_system_async.py +DESCRIPTION: + This sample demonstrates common file system operations including list paths, create a file system, + set metadata etc. +USAGE: + python datalake_samples_file_system_async.py + Set the environment variables with your own values before running the sample: + 1) AZURE_STORAGE_CONNECTION_STRING - the connection string to your storage account +""" +import asyncio +import os + +from azure.core.exceptions import ResourceExistsError + +SOURCE_FILE = 'SampleSource.txt' + + +class FileSystemSamplesAsync(object): + + connection_string = os.environ['AZURE_STORAGE_CONNECTION_STRING'] + + #--Begin File System Samples----------------------------------------------------------------- + + async def file_system_sample(self): + + # [START create_file_system_client_from_service] + # Instantiate a DataLakeServiceClient using a connection string + from azure.storage.filedatalake.aio import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + + async with datalake_service_client: + # Instantiate a FileSystemClient + file_system_client = datalake_service_client.get_file_system_client("mynewfilesystems") + # [END create_file_system_client_from_service] + + try: + # [START create_file_system] + await file_system_client.create_file_system() + # [END create_file_system] + + # [START get_file_system_properties] + properties = await file_system_client.get_file_system_properties() + # [END get_file_system_properties] + + finally: + # [START delete_file_system] + await file_system_client.delete_file_system() + # [END delete_file_system] + + async def acquire_lease_on_file_system(self): + + # Instantiate a DataLakeServiceClient using a connection string + # [START create_data_lake_service_client_from_conn_str] + from azure.storage.filedatalake.aio import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + # [END create_data_lake_service_client_from_conn_str] + + async with datalake_service_client: + # Instantiate a FileSystemClient + file_system_client = datalake_service_client.get_file_system_client("myleasefilesystem") + + # Create new File System + try: + await file_system_client.create_file_system() + except ResourceExistsError: + pass + + # [START acquire_lease_on_file_system] + # Acquire a lease on the file system + lease = await file_system_client.acquire_lease() + + # Delete file system by passing in the lease + await file_system_client.delete_file_system(lease=lease) + # [END acquire_lease_on_file_system] + + async def set_metadata_on_file_system(self): + + # Instantiate a DataLakeServiceClient using a connection string + from azure.storage.filedatalake.aio import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + + async with datalake_service_client: + # Instantiate a FileSystemClient + file_system_client = datalake_service_client.get_file_system_client("mymetadatafilesystemsync") + + try: + # Create new File System + await file_system_client.create_file_system() + + # [START set_file_system_metadata] + # Create key, value pairs for metadata + metadata = {'type': 'test'} + + # Set metadata on the file system + await file_system_client.set_file_system_metadata(metadata=metadata) + # [END set_file_system_metadata] + + # Get file system properties + properties = await file_system_client.get_file_system_properties() + + finally: + # Delete file system + await file_system_client.delete_file_system() + + async def list_paths_in_file_system(self): + + # Instantiate a DataLakeServiceClient using a connection string + from azure.storage.filedatalake.aio import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + + async with datalake_service_client: + # Instantiate a FileSystemClient + file_system_client = datalake_service_client.get_file_system_client("mypathfilesystem") + + # Create new File System + await file_system_client.create_file_system() + + # [START upload_file_to_file_system] + file_client = file_system_client.get_file_client("myfile") + await file_client.create_file() + with open(SOURCE_FILE, "rb") as data: + length = data.tell() + await file_client.append_data(data, 0) + await file_client.flush_data(length) + # [END upload_file_to_file_system] + + # [START get_paths_in_file_system] + path_list = file_system_client.get_paths() + async for path in path_list: + print(path.name + '\n') + # [END get_paths_in_file_system] + + # Delete file system + await file_system_client.delete_file_system() + + async def get_file_client_from_file_system(self): + + # Instantiate a DataLakeServiceClient using a connection string + from azure.storage.filedatalake.aio import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + + async with datalake_service_client: + # Instantiate a FileSystemClient + file_system_client = datalake_service_client.get_file_system_client("myclientfilesystem") + + # Create new File System + try: + await file_system_client.create_file_system() + except ResourceExistsError: + pass + + # [START get_file_client_from_file_system] + # Get the FileClient from the FileSystemClient to interact with a specific file + file_client = file_system_client.get_file_client("mynewfile") + # [END get_file_client_from_file_system] + + # Delete file system + await file_system_client.delete_file_system() + + async def get_directory_client_from_file_system(self): + + # Instantiate a DataLakeServiceClient using a connection string + from azure.storage.filedatalake.aio import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + + async with datalake_service_client: + # Instantiate a FileSystemClient + file_system_client = datalake_service_client.get_file_system_client("mydirectoryfilesystem") + + # Create new File System + try: + await file_system_client.create_file_system() + except ResourceExistsError: + pass + + # [START get_directory_client_from_file_system] + # Get the DataLakeDirectoryClient from the FileSystemClient to interact with a specific file + directory_client = file_system_client.get_directory_client("mynewdirectory") + # [END get_directory_client_from_file_system] + + # Delete file system + await file_system_client.delete_file_system() + + async def create_file_from_file_system(self): + # [START create_file_system_client_from_connection_string] + from azure.storage.filedatalake.aio import FileSystemClient + file_system_client = FileSystemClient.from_connection_string(self.connection_string, "filesystemforcreate") + # [END create_file_system_client_from_connection_string] + + async with file_system_client: + await file_system_client.create_file_system() + + # [START create_directory_from_file_system] + directory_client = await file_system_client.create_directory("mydirectory") + # [END create_directory_from_file_system] + + # [START create_file_from_file_system] + file_client = await file_system_client.create_file("myfile") + # [END create_file_from_file_system] + + # [START delete_file_from_file_system] + await file_system_client.delete_file("myfile") + # [END delete_file_from_file_system] + + # [START delete_directory_from_file_system] + await file_system_client.delete_directory("mydirectory") + # [END delete_directory_from_file_system] + + await file_system_client.delete_file_system() + + +async def run(): + sample = FileSystemSamplesAsync() + await sample.file_system_sample() + await sample.acquire_lease_on_file_system() + await sample.set_metadata_on_file_system() + await sample.list_paths_in_file_system() + await sample.get_file_client_from_file_system() + await sample.create_file_from_file_system() + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(run()) + loop.close() diff --git a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_instantiate_client.py b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_instantiate_client.py new file mode 100644 index 000000000000..a55396e2bb22 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_instantiate_client.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +""" +FILE: datalake_samples_instantiate_client.py +DESCRIPTION: + This sample demonstrates how to instantiate directory/file client +USAGE: + python datalake_samples_instantiate_client.py + Set the environment variables with your own values before running the sample: + 1) AZURE_STORAGE_CONNECTION_STRING - the connection string to your storage account + connection str could be obtained from portal.azure.com your storage account. +""" + +import os +connection_string = os.environ['AZURE_STORAGE_CONNECTION_STRING'] + + +def instantiate_directory_client_from_conn_str(): + # [START instantiate_directory_client_from_conn_str] + from azure.storage.filedatalake import DataLakeDirectoryClient + DataLakeDirectoryClient.from_connection_string(connection_string, "myfilesystem", "mydirectory") + # [END instantiate_directory_client_from_conn_str] + + +def instantiate_file_client_from_conn_str(): + # [START instantiate_file_client_from_conn_str] + from azure.storage.filedatalake import DataLakeFileClient + DataLakeFileClient.from_connection_string(connection_string, "myfilesystem", "mydirectory", "myfile") + # [END instantiate_file_client_from_conn_str] + + +if __name__ == '__main__': + instantiate_directory_client_from_conn_str() + instantiate_file_client_from_conn_str() diff --git a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_instantiate_client_async.py b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_instantiate_client_async.py new file mode 100644 index 000000000000..d0fa3f920e49 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_instantiate_client_async.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +""" +FILE: datalake_samples_instantiate_client_async.py +DESCRIPTION: + This sample demonstrates how to instantiate directory/file client +USAGE: + python datalake_samples_instantiate_client_async.py + Set the environment variables with your own values before running the sample: + 1) AZURE_STORAGE_CONNECTION_STRING - the connection string to your storage account + connection str could be obtained from portal.azure.com your storage account. +""" + +import os +connection_string = os.environ['AZURE_STORAGE_CONNECTION_STRING'] + + +def instantiate_directory_client_from_conn_str(): + # [START instantiate_directory_client_from_conn_str] + from azure.storage.filedatalake.aio import DataLakeDirectoryClient + DataLakeDirectoryClient.from_connection_string(connection_string, "myfilesystem", "mydirectory") + # [END instantiate_directory_client_from_conn_str] + + +def instantiate_file_client_from_conn_str(): + # [START instantiate_file_client_from_conn_str] + from azure.storage.filedatalake.aio import DataLakeFileClient + DataLakeFileClient.from_connection_string(connection_string, "myfilesystem", "mydirectory", "myfile") + # [END instantiate_file_client_from_conn_str] + + +if __name__ == '__main__': + instantiate_directory_client_from_conn_str() + instantiate_file_client_from_conn_str() diff --git a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_service.py b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_service.py new file mode 100644 index 000000000000..58860ab9523a --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_service.py @@ -0,0 +1,116 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: datalake_samples_service.py +DESCRIPTION: + This sample demonstrates: + * Instantiate DataLakeServiceClient using connection str + * Instantiate DataLakeServiceClient using AAD Credential + * Get user delegation key + * Create all kinds of clients from DataLakeServiceClient and operate on those clients + * List file systems +USAGE: + python datalake_samples_service.py + Set the environment variables with your own values before running the sample: + 1) AZURE_STORAGE_CONNECTION_STRING + 2) STORAGE_ACCOUNT_NAME + 3) ACTIVE_DIRECTORY_APPLICATION_ID + 4) ACTIVE_DIRECTORY_APPLICATION_SECRET + 5) ACTIVE_DIRECTORY_TENANT_ID +""" + +import os + + +class DataLakeServiceSamples(object): + + connection_string = os.environ['AZURE_STORAGE_CONNECTION_STRING'] + account_name = os.getenv('STORAGE_ACCOUNT_NAME', "") + active_directory_application_id = os.getenv("ACTIVE_DIRECTORY_APPLICATION_ID") + active_directory_application_secret = os.getenv("ACTIVE_DIRECTORY_APPLICATION_SECRET") + active_directory_tenant_id = os.getenv("ACTIVE_DIRECTORY_TENANT_ID") + + #--Begin DataLake Service Samples----------------------------------------------------------------- + + def data_lake_service_sample(self): + + # Instantiate a DataLakeServiceClient using a connection string + # [START create_datalake_service_client] + from azure.storage.filedatalake import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string) + # [END create_datalake_service_client] + + # Instantiate a DataLakeServiceClient Azure Identity credentials. + # [START create_datalake_service_client_oauth] + from azure.identity import ClientSecretCredential + token_credential = ClientSecretCredential( + self.active_directory_tenant_id, + self.active_directory_application_id, + self.active_directory_application_secret, + ) + datalake_service_client = DataLakeServiceClient("https://{}.dfs.core.windows.net".format(self.account_name), + credential=token_credential) + # [END create_datalake_service_client_oauth] + + # get user delegation key + # [START get_user_delegation_key] + from datetime import datetime, timedelta + user_delegation_key = datalake_service_client.get_user_delegation_key(datetime.utcnow(), + datetime.utcnow() + timedelta(hours=1)) + # [END get_user_delegation_key] + + # Create file systems + # [START create_file_system_from_service_client] + datalake_service_client.create_file_system("filesystem") + # [END create_file_system_from_service_client] + file_system_client = datalake_service_client.create_file_system("anotherfilesystem") + + # List file systems + # [START list_file_systems] + file_systems = datalake_service_client.list_file_systems() + for file_system in file_systems: + print(file_system.name) + # [END list_file_systems] + + # Get Clients from DataLakeServiceClient + file_system_client = datalake_service_client.get_file_system_client(file_system_client.file_system_name) + # [START get_directory_client_from_service_client] + directory_client = datalake_service_client.get_directory_client(file_system_client.file_system_name, + "mydirectory") + # [END get_directory_client_from_service_client] + # [START get_file_client_from_service_client] + file_client = datalake_service_client.get_file_client(file_system_client.file_system_name, "myfile") + # [END get_file_client_from_service_client] + + # Create file and set properties + metadata = {'hello': 'world', 'number': '42'} + from azure.storage.filedatalake import ContentSettings + content_settings = ContentSettings( + content_language='spanish', + content_disposition='inline') + file_client.create_file(content_settings=content_settings) + file_client.set_metadata(metadata=metadata) + file_props = file_client.get_file_properties() + print(file_props.metadata) + + # Create file/directory and set properties + directory_client.create_directory(content_settings=content_settings, metadata=metadata) + dir_props = directory_client.get_directory_properties() + print(dir_props.metadata) + + # Delete File Systems + # [START delete_file_system_from_service_client] + datalake_service_client.delete_file_system("filesystem") + # [END delete_file_system_from_service_client] + file_system_client.delete_file_system() + + +if __name__ == '__main__': + sample = DataLakeServiceSamples() + sample.data_lake_service_sample() diff --git a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_service_async.py b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_service_async.py new file mode 100644 index 000000000000..99ba1cee4106 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_service_async.py @@ -0,0 +1,118 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: datalake_samples_service_async.py +DESCRIPTION: + This sample demonstrates: + * Instantiate DataLakeServiceClient using connection str + * Instantiate DataLakeServiceClient using AAD Credential + * Get user delegation key + * Create all kinds of clients from DataLakeServiceClient and operate on those clients + * List file systems +USAGE: + python datalake_samples_service_async.py + Set the environment variables with your own values before running the sample: + 1) AZURE_STORAGE_CONNECTION_STRING + 2) STORAGE_ACCOUNT_NAME + 3) ACTIVE_DIRECTORY_APPLICATION_ID + 4) ACTIVE_DIRECTORY_APPLICATION_SECRET + 5) ACTIVE_DIRECTORY_TENANT_ID +""" + +import asyncio +import os + + +connection_string = os.environ['AZURE_STORAGE_CONNECTION_STRING'] +account_name = os.getenv('STORAGE_ACCOUNT_NAME', "") +active_directory_application_id = os.getenv("ACTIVE_DIRECTORY_APPLICATION_ID") +active_directory_application_secret = os.getenv("ACTIVE_DIRECTORY_APPLICATION_SECRET") +active_directory_tenant_id = os.getenv("ACTIVE_DIRECTORY_TENANT_ID") + +#--Begin DataLake Service Samples----------------------------------------------------------------- + +async def data_lake_service_sample(): + + # Instantiate a DataLakeServiceClient using a connection string + # [START create_datalake_service_client] + from azure.storage.filedatalake.aio import DataLakeServiceClient + datalake_service_client = DataLakeServiceClient.from_connection_string(connection_string) + # [END create_datalake_service_client] + + # Instantiate a DataLakeServiceClient Azure Identity credentials. + # [START create_datalake_service_client_oauth] + from azure.identity.aio import ClientSecretCredential + token_credential = ClientSecretCredential( + active_directory_tenant_id, + active_directory_application_id, + active_directory_application_secret, + ) + datalake_service_client = DataLakeServiceClient("https://{}.dfs.core.windows.net".format(account_name), + credential=token_credential) + # [END create_datalake_service_client_oauth] + + async with datalake_service_client: + # get user delegation key + # [START get_user_delegation_key] + from datetime import datetime, timedelta + user_delegation_key = await datalake_service_client.get_user_delegation_key(datetime.utcnow(), + datetime.utcnow() + timedelta(hours=1)) + # [END get_user_delegation_key] + + # Create file systems + # [START create_file_system_from_service_client] + await datalake_service_client.create_file_system("filesystem") + # [END create_file_system_from_service_client] + file_system_client = await datalake_service_client.create_file_system("anotherfilesystem") + + # List file systems + # [START list_file_systems] + file_systems = datalake_service_client.list_file_systems() + async for file_system in file_systems: + print(file_system.name) + # [END list_file_systems] + + # Get Clients from DataLakeServiceClient + file_system_client = datalake_service_client.get_file_system_client(file_system_client.file_system_name) + # [START get_directory_client_from_service_client] + directory_client = datalake_service_client.get_directory_client(file_system_client.file_system_name, + "mydirectory") + # [END get_directory_client_from_service_client] + # [START get_file_client_from_service_client] + file_client = datalake_service_client.get_file_client(file_system_client.file_system_name, "myfile") + # [END get_file_client_from_service_client] + + # Create file and set properties + metadata = {'hello': 'world', 'number': '42'} + from azure.storage.filedatalake import ContentSettings + content_settings = ContentSettings( + content_language='spanish', + content_disposition='inline') + await file_client.create_file(content_settings=content_settings) + await file_client.set_metadata(metadata=metadata) + file_props = await file_client.get_file_properties() + print(file_props.metadata) + + # Create file/directory and set properties + await directory_client.create_directory(content_settings=content_settings, metadata=metadata) + dir_props = await directory_client.get_directory_properties() + print(dir_props.metadata) + + # Delete File Systems + # [START delete_file_system_from_service_client] + await datalake_service_client.delete_file_system("filesystem") + # [END delete_file_system_from_service_client] + await file_system_client.delete_file_system() + + await token_credential.close() + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(data_lake_service_sample()) + diff --git a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_upload_download.py b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_upload_download.py index 73c427ea8b32..52f0122d62b5 100644 --- a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_upload_download.py +++ b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_upload_download.py @@ -1,16 +1,45 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: datalake_samples_upload_download.py +DESCRIPTION: + This sample demonstrates: + * Set up a file system + * Create file + * Append data to the file + * Flush data to the file + * Get file properties + * Download the uploaded data + * Delete file system +USAGE: + python datalake_samples_upload_download.py + Set the environment variables with your own values before running the sample: + 1) STORAGE_ACCOUNT_NAME - the storage account name + 2) STORAGE_ACCOUNT_KEY - the storage account key +""" + import os import random from azure.storage.filedatalake import ( DataLakeServiceClient, ) - +SOURCE_FILE = 'SampleSource.txt' def upload_download_sample(filesystem_client): # create a file before writing content to it file_name = "testfile" print("Creating a file named '{}'.".format(file_name)) - file_client = filesystem_client.create_file(file_name) + # [START create_file] + file_client = filesystem_client.get_file_client(file_name) + file_client.create_file() + # [END create_file] # prepare the file content with 4KB of random data file_content = get_random_bytes(4*1024) @@ -20,15 +49,25 @@ def upload_download_sample(filesystem_client): print("Uploading data to '{}'.".format(file_name)) file_client.append_data(data=file_content[0:1024], offset=0, length=1024) file_client.append_data(data=file_content[1024:2048], offset=1024, length=1024) + # [START append_data] file_client.append_data(data=file_content[2048:3072], offset=2048, length=1024) + # [END append_data] file_client.append_data(data=file_content[3072:4096], offset=3072, length=1024) # data is only committed when flush is called file_client.flush_data(len(file_content)) + # Get file properties + # [START get_file_properties] + properties = file_client.get_file_properties() + # [END get_file_properties] + # read the data back print("Downloading data from '{}'.".format(file_name)) - downloaded_bytes = file_client.read_file() + # [START read_file] + download = file_client.download_file() + downloaded_bytes = download.readall() + # [END read_file] # verify the downloaded content if file_content == downloaded_bytes: @@ -36,6 +75,19 @@ def upload_download_sample(filesystem_client): else: print("Something went wrong.") + # Rename the file + # [START rename_file] + new_client = file_client.rename_file(file_client.file_system_name + '/' + 'newname') + # [END rename_file] + + # download the renamed file in to local file + with open(SOURCE_FILE, 'wb') as stream: + download = new_client.download_file() + download.readinto(stream) + + # [START delete_file] + new_client.delete_file() + # [END delete_file] # help method to provide random bytes to serve as file content def get_random_bytes(size): diff --git a/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_upload_download_async.py b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_upload_download_async.py new file mode 100644 index 000000000000..e80ae4f21bb4 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/samples/datalake_samples_upload_download_async.py @@ -0,0 +1,129 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: datalake_samples_upload_download_async.py +DESCRIPTION: + This sample demonstrates: + * Set up a file system + * Create file + * Append data to the file + * Flush data to the file + * Get file properties + * Download the uploaded data + * Delete file system +USAGE: + python datalake_samples_upload_download_async.py + Set the environment variables with your own values before running the sample: + 1) STORAGE_ACCOUNT_NAME - the storage account name + 2) STORAGE_ACCOUNT_KEY - the storage account key +""" +import asyncio +import os +import random + +from azure.storage.filedatalake.aio import ( + DataLakeServiceClient, +) +SOURCE_FILE = 'SampleSource.txt' + +async def upload_download_sample(filesystem_client): + # create a file before writing content to it + file_name = "testfile" + print("Creating a file named '{}'.".format(file_name)) + # [START create_file] + file_client = filesystem_client.get_file_client(file_name) + await file_client.create_file() + # [END create_file] + + # prepare the file content with 4KB of random data + file_content = get_random_bytes(4*1024) + + # append data to the file + # the data remain uncommitted until flush is performed + print("Uploading data to '{}'.".format(file_name)) + await file_client.append_data(data=file_content[0:1024], offset=0, length=1024) + await file_client.append_data(data=file_content[1024:2048], offset=1024, length=1024) + # [START append_data] + await file_client.append_data(data=file_content[2048:3072], offset=2048, length=1024) + # [END append_data] + await file_client.append_data(data=file_content[3072:4096], offset=3072, length=1024) + + # data is only committed when flush is called + await file_client.flush_data(len(file_content)) + + # Get file properties + # [START get_file_properties] + properties = await file_client.get_file_properties() + # [END get_file_properties] + + # read the data back + print("Downloading data from '{}'.".format(file_name)) + # [START read_file] + download = await file_client.download_file() + downloaded_bytes = await download.readall() + # [END read_file] + + # verify the downloaded content + if file_content == downloaded_bytes: + print("The downloaded data is equal to the data uploaded.") + else: + print("Something went wrong.") + + # Rename the file + # [START rename_file] + new_client = await file_client.rename_file(file_client.file_system_name + '/' + 'newname') + # [END rename_file] + + # download the renamed file in to local file + with open(SOURCE_FILE, 'wb') as stream: + download = await new_client.download_file() + await download.readinto(stream) + + # [START delete_file] + await new_client.delete_file() + # [END delete_file] + +# help method to provide random bytes to serve as file content +def get_random_bytes(size): + rand = random.Random() + result = bytearray(size) + for i in range(size): + result[i] = int(rand.random()*255) # random() is consistent between python 2 and 3 + return bytes(result) + + +async def run(): + account_name = os.getenv('STORAGE_ACCOUNT_NAME', "") + account_key = os.getenv('STORAGE_ACCOUNT_KEY', "") + + # set up the service client with the credentials from the environment variables + service_client = DataLakeServiceClient(account_url="{}://{}.dfs.core.windows.net".format( + "https", + account_name + ), credential=account_key) + + async with service_client: + # generate a random name for testing purpose + fs_name = "testfs{}".format(random.randint(1, 1000)) + print("Generating a test filesystem named '{}'.".format(fs_name)) + + # create the filesystem + filesystem_client = await service_client.create_file_system(file_system=fs_name) + + # invoke the sample code + try: + await upload_download_sample(filesystem_client) + finally: + # clean up the demo filesystem + await filesystem_client.delete_file_system() + + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(run()) diff --git a/sdk/storage/azure-storage-file-datalake/setup.py b/sdk/storage/azure-storage-file-datalake/setup.py index c3889c9a7446..f0ae61597e77 100644 --- a/sdk/storage/azure-storage-file-datalake/setup.py +++ b/sdk/storage/azure-storage-file-datalake/setup.py @@ -72,7 +72,7 @@ author_email='ascl@microsoft.com', url='https://github.com/Azure/azure-sdk-for-python', classifiers=[ - 'Development Status :: 4 - Beta', + "Development Status :: 5 - Production/Stable", 'Programming Language :: Python', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', diff --git a/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file.test_upload_data_to_existing_file.yaml b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file.test_upload_data_to_existing_file.yaml new file mode 100644 index 000000000000..dc846dfbba46 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file.test_upload_data_to_existing_file.yaml @@ -0,0 +1,459 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 88a34b2e-5755-11ea-895b-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:26 GMT + x-ms-properties: + - '' + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.dfs.core.windows.net/filesystem822a1196/directory822a1196?resource=directory + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Mon, 24 Feb 2020 22:32:25 GMT + ETag: + - '"0x8D7B9796D021141"' + Last-Modified: + - Mon, 24 Feb 2020 22:32:26 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 554586b7-501f-0060-1c62-eb310b000000 + x-ms-version: + - '2019-02-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 88da0a30-5755-11ea-8e4c-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:26 GMT + x-ms-properties: + - '' + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.dfs.core.windows.net/filesystem822a1196/directory822a1196%2Ffilename?resource=file + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Mon, 24 Feb 2020 22:32:26 GMT + ETag: + - '"0x8D7B9796D1308EC"' + Last-Modified: + - Mon, 24 Feb 2020 22:32:26 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 554586b8-501f-0060-1d62-eb310b000000 + x-ms-version: + - '2019-02-02' + status: + code: 201 + message: Created +- request: + body: abc + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '3' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 88ea66ac-5755-11ea-ad62-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:26 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem822a1196/directory822a1196%2Ffilename?position=0&action=append + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Mon, 24 Feb 2020 22:32:26 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 554586b9-501f-0060-1e62-eb310b000000 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2019-02-02' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 88f770ae-5755-11ea-b2e4-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:26 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem822a1196/directory822a1196%2Ffilename?position=3&retainUncommittedData=false&close=false&action=flush + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Mon, 24 Feb 2020 22:32:26 GMT + ETag: + - '"0x8D7B9796D33EDDE"' + Last-Modified: + - Mon, 24 Feb 2020 22:32:27 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 554586ba-501f-0060-1f62-eb310b000000 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2019-02-02' + status: + code: 200 + message: OK +- request: + body: !!binary | + Vw3yaRKzZ9oApFz0FZ31uaT+FcojA/HolwT+LCTq9C5NfbkKB1iPDPHS0a3qSm76N5pfqJDSQQG6 + Yq8UyuNsXokwj1Zl+SrgbhNw9Md6Gbw3a2mLITViMsS/pl2Tsn0DkYw6DQ== + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '100' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 890b7ce2-5755-11ea-8d10-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:27 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem822a1196/directory822a1196%2Ffilename?position=0&action=append + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Mon, 24 Feb 2020 22:32:26 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 554586bb-501f-0060-2062-eb310b000000 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2019-02-02' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + If-None-Match: + - '*' + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 8917952e-5755-11ea-a939-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:27 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem822a1196/directory822a1196%2Ffilename?position=100&action=flush + response: + body: + string: '{"error":{"code":"ConditionNotMet","message":"The condition specified + using HTTP conditional header(s) is not met.\nRequestId:554586bc-501f-0060-2162-eb310b000000\nTime:2020-02-24T22:32:27.2479153Z"}}' + headers: + Content-Length: + - '200' + Content-Type: + - application/json;charset=utf-8 + Date: + - Mon, 24 Feb 2020 22:32:26 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - ConditionNotMet + x-ms-request-id: + - 554586bc-501f-0060-2162-eb310b000000 + x-ms-version: + - '2019-02-02' + status: + code: 412 + message: The condition specified using HTTP conditional header(s) is not met. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 892a859e-5755-11ea-8c3c-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:27 GMT + x-ms-properties: + - '' + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.dfs.core.windows.net/filesystem822a1196/directory822a1196%2Ffilename?resource=file + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Mon, 24 Feb 2020 22:32:26 GMT + ETag: + - '"0x8D7B9796D63115C"' + Last-Modified: + - Mon, 24 Feb 2020 22:32:27 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 554586bd-501f-0060-2262-eb310b000000 + x-ms-version: + - '2019-02-02' + status: + code: 201 + message: Created +- request: + body: !!binary | + Vw3yaRKzZ9oApFz0FZ31uaT+FcojA/HolwT+LCTq9C5NfbkKB1iPDPHS0a3qSm76N5pfqJDSQQG6 + Yq8UyuNsXokwj1Zl+SrgbhNw9Md6Gbw3a2mLITViMsS/pl2Tsn0DkYw6DQ== + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '100' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 893ad776-5755-11ea-80ec-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:27 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem822a1196/directory822a1196%2Ffilename?position=0&action=append + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Mon, 24 Feb 2020 22:32:26 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 554586be-501f-0060-2362-eb310b000000 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2019-02-02' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + If-Match: + - '"0x8D7B9796D63115C"' + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 894a8052-5755-11ea-baf1-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:27 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem822a1196/directory822a1196%2Ffilename?position=100&action=flush + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Mon, 24 Feb 2020 22:32:26 GMT + ETag: + - '"0x8D7B9796D81449A"' + Last-Modified: + - Mon, 24 Feb 2020 22:32:27 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 554586bf-501f-0060-2462-eb310b000000 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2019-02-02' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 89588bf4-5755-11ea-bb75-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:27 GMT + x-ms-range: + - bytes=0-33554431 + x-ms-version: + - '2019-07-07' + method: GET + uri: https://storagename.blob.core.windows.net/filesystem822a1196/directory822a1196%2Ffilename + response: + body: + string: !!binary | + Vw3yaRKzZ9oApFz0FZ31uaT+FcojA/HolwT+LCTq9C5NfbkKB1iPDPHS0a3qSm76N5pfqJDSQQG6 + Yq8UyuNsXokwj1Zl+SrgbhNw9Md6Gbw3a2mLITViMsS/pl2Tsn0DkYw6DQ== + headers: + Accept-Ranges: + - bytes + Content-Length: + - '100' + Content-Range: + - bytes 0-99/100 + Content-Type: + - application/octet-stream + Date: + - Mon, 24 Feb 2020 22:32:27 GMT + ETag: + - '"0x8D7B9796D81449A"' + Last-Modified: + - Mon, 24 Feb 2020 22:32:27 GMT + Server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-blob-type: + - BlockBlob + x-ms-creation-time: + - Mon, 24 Feb 2020 22:32:27 GMT + x-ms-lease-state: + - available + x-ms-lease-status: + - unlocked + x-ms-request-id: + - b428f31e-301e-003b-2262-eb0830000000 + x-ms-server-encrypted: + - 'true' + x-ms-version: + - '2019-07-07' + status: + code: 206 + message: Partial Content +version: 1 diff --git a/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file.test_upload_data_to_existing_file_with_content_settings.yaml b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file.test_upload_data_to_existing_file_with_content_settings.yaml new file mode 100644 index 000000000000..4fcbdf6098f2 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file.test_upload_data_to_existing_file_with_content_settings.yaml @@ -0,0 +1,310 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 8565b034-5755-11ea-932f-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:21 GMT + x-ms-properties: + - '' + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.dfs.core.windows.net/filesystem6efc1adb/directory6efc1adb?resource=directory + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Mon, 24 Feb 2020 22:32:20 GMT + ETag: + - '"0x8D7B97969CDE170"' + Last-Modified: + - Mon, 24 Feb 2020 22:32:21 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b4fa4664-601f-0026-2e62-eb058c000000 + x-ms-version: + - '2019-02-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 85a5801a-5755-11ea-969b-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:21 GMT + x-ms-properties: + - '' + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.dfs.core.windows.net/filesystem6efc1adb/directory6efc1adb%2Ffilename?resource=file + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Mon, 24 Feb 2020 22:32:20 GMT + ETag: + - '"0x8D7B97969DC8B47"' + Last-Modified: + - Mon, 24 Feb 2020 22:32:21 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b4fa4665-601f-0026-2f62-eb058c000000 + x-ms-version: + - '2019-02-02' + status: + code: 201 + message: Created +- request: + body: !!binary | + JnDWIeE40yqG+kauxt6kJA3Sor7T+eILrUohhOeyOr7ec58qMORGqFFHH2yOI9H9SKpqJQp5y4Kr + a/ViIH/4FQuJ8PXfe/AE8TwiH+3QDuevHOsMv8ZT3eEOrIxvZPRvvCA3Ag== + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '100' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 85b510c2-5755-11ea-96ed-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:21 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem6efc1adb/directory6efc1adb%2Ffilename?position=0&action=append + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Mon, 24 Feb 2020 22:32:20 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b4fa4666-601f-0026-3062-eb058c000000 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2019-02-02' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + If-Match: + - '"0x8D7B97969DC8B47"' + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 85c1e9d4-5755-11ea-ac69-001a7dda7113 + x-ms-content-disposition: + - inline + x-ms-content-language: + - spanish + x-ms-date: + - Mon, 24 Feb 2020 22:32:21 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem6efc1adb/directory6efc1adb%2Ffilename?position=100&action=flush + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Mon, 24 Feb 2020 22:32:20 GMT + ETag: + - '"0x8D7B97969F83F4B"' + Last-Modified: + - Mon, 24 Feb 2020 22:32:21 GMT + Server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b4fa4667-601f-0026-3162-eb058c000000 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2019-02-02' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 85cfd15e-5755-11ea-886d-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:21 GMT + x-ms-range: + - bytes=0-33554431 + x-ms-version: + - '2019-07-07' + method: GET + uri: https://storagename.blob.core.windows.net/filesystem6efc1adb/directory6efc1adb%2Ffilename + response: + body: + string: !!binary | + JnDWIeE40yqG+kauxt6kJA3Sor7T+eILrUohhOeyOr7ec58qMORGqFFHH2yOI9H9SKpqJQp5y4Kr + a/ViIH/4FQuJ8PXfe/AE8TwiH+3QDuevHOsMv8ZT3eEOrIxvZPRvvCA3Ag== + headers: + Accept-Ranges: + - bytes + Content-Disposition: + - inline + Content-Language: + - spanish + Content-Length: + - '100' + Content-Range: + - bytes 0-99/100 + Content-Type: + - application/octet-stream + Date: + - Mon, 24 Feb 2020 22:32:21 GMT + ETag: + - '"0x8D7B97969F83F4B"' + Last-Modified: + - Mon, 24 Feb 2020 22:32:21 GMT + Server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-blob-type: + - BlockBlob + x-ms-creation-time: + - Mon, 24 Feb 2020 22:32:21 GMT + x-ms-lease-state: + - available + x-ms-lease-status: + - unlocked + x-ms-request-id: + - 31eed554-c01e-005d-5762-eb4710000000 + x-ms-server-encrypted: + - 'true' + x-ms-version: + - '2019-07-07' + status: + code: 206 + message: Partial Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 86020ce2-5755-11ea-a1c0-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:22 GMT + x-ms-version: + - '2019-07-07' + method: HEAD + uri: https://storagename.blob.core.windows.net/filesystem6efc1adb/directory6efc1adb%2Ffilename + response: + body: + string: '' + headers: + Accept-Ranges: + - bytes + Content-Disposition: + - inline + Content-Language: + - spanish + Content-Length: + - '100' + Content-Type: + - application/octet-stream + Date: + - Mon, 24 Feb 2020 22:32:21 GMT + ETag: + - '"0x8D7B97969F83F4B"' + Last-Modified: + - Mon, 24 Feb 2020 22:32:21 GMT + Server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-access-tier: + - Hot + x-ms-access-tier-inferred: + - 'true' + x-ms-blob-type: + - BlockBlob + x-ms-creation-time: + - Mon, 24 Feb 2020 22:32:21 GMT + x-ms-lease-state: + - available + x-ms-lease-status: + - unlocked + x-ms-request-id: + - 31eed598-c01e-005d-1762-eb4710000000 + x-ms-server-encrypted: + - 'true' + x-ms-version: + - '2019-07-07' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file_async.test_upload_data_to_existing_file_async.yaml b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file_async.test_upload_data_to_existing_file_async.yaml new file mode 100644 index 000000000000..1533de2c48e7 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file_async.test_upload_data_to_existing_file_async.yaml @@ -0,0 +1,486 @@ +interactions: +- request: + body: null + headers: + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 90f48e62-5755-11ea-ab5f-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:40 GMT + x-ms-properties: + - '' + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.dfs.core.windows.net/filesystem76ef1690/directory76ef1690?resource=directory + response: + body: + string: '' + headers: + ? !!python/object/new:multidict._multidict.istr + - Content-Length + : '0' + ? !!python/object/new:multidict._multidict.istr + - Date + : Mon, 24 Feb 2020 22:32:39 GMT + ? !!python/object/new:multidict._multidict.istr + - Etag + : '"0x8D7B979753BFB2D"' + ? !!python/object/new:multidict._multidict.istr + - Last-Modified + : Mon, 24 Feb 2020 22:32:40 GMT + ? !!python/object/new:multidict._multidict.istr + - Server + : Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: 605c4b87-801f-003e-1562-ebdaeb000000 + x-ms-version: '2019-02-02' + status: + code: 201 + message: Created + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - xiafuhns.dfs.core.windows.net + - /filesystem76ef1690/directory76ef1690 + - resource=directory + - '' +- request: + body: null + headers: + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 911390f0-5755-11ea-800c-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:40 GMT + x-ms-properties: + - '' + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.dfs.core.windows.net/filesystem76ef1690/directory76ef1690%2Ffilename?resource=file + response: + body: + string: '' + headers: + ? !!python/object/new:multidict._multidict.istr + - Content-Length + : '0' + ? !!python/object/new:multidict._multidict.istr + - Date + : Mon, 24 Feb 2020 22:32:39 GMT + ? !!python/object/new:multidict._multidict.istr + - Etag + : '"0x8D7B9797544BC65"' + ? !!python/object/new:multidict._multidict.istr + - Last-Modified + : Mon, 24 Feb 2020 22:32:40 GMT + ? !!python/object/new:multidict._multidict.istr + - Server + : Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: 605c4b88-801f-003e-1662-ebdaeb000000 + x-ms-version: '2019-02-02' + status: + code: 201 + message: Created + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - xiafuhns.dfs.core.windows.net + - /filesystem76ef1690/directory76ef1690%2Ffilename + - resource=file + - '' +- request: + body: abc + headers: + Content-Length: + - '3' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 911f565c-5755-11ea-842e-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:40 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem76ef1690/directory76ef1690%2Ffilename?position=0&action=append + response: + body: + string: '' + headers: + ? !!python/object/new:multidict._multidict.istr + - Content-Length + : '0' + ? !!python/object/new:multidict._multidict.istr + - Date + : Mon, 24 Feb 2020 22:32:39 GMT + ? !!python/object/new:multidict._multidict.istr + - Server + : Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: 605c4b89-801f-003e-1762-ebdaeb000000 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2019-02-02' + status: + code: 202 + message: Accepted + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - xiafuhns.dfs.core.windows.net + - /filesystem76ef1690/directory76ef1690%2Ffilename + - position=0&action=append + - '' +- request: + body: null + headers: + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 9127b500-5755-11ea-83e4-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:40 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem76ef1690/directory76ef1690%2Ffilename?position=3&retainUncommittedData=false&close=false&action=flush + response: + body: + string: '' + headers: + ? !!python/object/new:multidict._multidict.istr + - Content-Length + : '0' + ? !!python/object/new:multidict._multidict.istr + - Date + : Mon, 24 Feb 2020 22:32:39 GMT + ? !!python/object/new:multidict._multidict.istr + - Etag + : '"0x8D7B979755924A4"' + ? !!python/object/new:multidict._multidict.istr + - Last-Modified + : Mon, 24 Feb 2020 22:32:40 GMT + ? !!python/object/new:multidict._multidict.istr + - Server + : Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: 605c4b8a-801f-003e-1862-ebdaeb000000 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2019-02-02' + status: + code: 200 + message: OK + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - xiafuhns.dfs.core.windows.net + - /filesystem76ef1690/directory76ef1690%2Ffilename + - position=3&retainUncommittedData=false&close=false&action=flush + - '' +- request: + body: !!binary | + kfKoBpjgPBWByb40ARkUrSRpIm3a1DGWLkVxkGSldUUGn/39FOq+IU8QaGD2GmD3zzNVBR2KJKVV + rS7CuPHARFxbJTHu/FSl0ItCxh52kBrj9rQRCwLbsL5ony2a+VzaToWZQA== + headers: + Content-Length: + - '100' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 9130d6cc-5755-11ea-b561-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:40 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem76ef1690/directory76ef1690%2Ffilename?position=0&action=append + response: + body: + string: '' + headers: + ? !!python/object/new:multidict._multidict.istr + - Content-Length + : '0' + ? !!python/object/new:multidict._multidict.istr + - Date + : Mon, 24 Feb 2020 22:32:40 GMT + ? !!python/object/new:multidict._multidict.istr + - Server + : Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: 605c4b8b-801f-003e-1962-ebdaeb000000 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2019-02-02' + status: + code: 202 + message: Accepted + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - xiafuhns.dfs.core.windows.net + - /filesystem76ef1690/directory76ef1690%2Ffilename + - position=0&action=append + - '' +- request: + body: null + headers: + If-None-Match: + - '*' + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 91389c58-5755-11ea-8c00-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:40 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem76ef1690/directory76ef1690%2Ffilename?position=100&action=flush + response: + body: + string: '{"error":{"code":"ConditionNotMet","message":"The condition specified + using HTTP conditional header(s) is not met.\nRequestId:605c4b8c-801f-003e-1a62-ebdaeb000000\nTime:2020-02-24T22:32:40.8217497Z"}}' + headers: + ? !!python/object/new:multidict._multidict.istr + - Content-Length + : '200' + ? !!python/object/new:multidict._multidict.istr + - Content-Type + : application/json;charset=utf-8 + ? !!python/object/new:multidict._multidict.istr + - Date + : Mon, 24 Feb 2020 22:32:40 GMT + ? !!python/object/new:multidict._multidict.istr + - Server + : Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: ConditionNotMet + x-ms-request-id: 605c4b8c-801f-003e-1a62-ebdaeb000000 + x-ms-version: '2019-02-02' + status: + code: 412 + message: The condition specified using HTTP conditional header(s) is not met. + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - xiafuhns.dfs.core.windows.net + - /filesystem76ef1690/directory76ef1690%2Ffilename + - position=100&action=flush + - '' +- request: + body: null + headers: + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 91408cfa-5755-11ea-8aee-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:40 GMT + x-ms-properties: + - '' + x-ms-version: + - '2019-02-02' + method: PUT + uri: https://storagename.dfs.core.windows.net/filesystem76ef1690/directory76ef1690%2Ffilename?resource=file + response: + body: + string: '' + headers: + ? !!python/object/new:multidict._multidict.istr + - Content-Length + : '0' + ? !!python/object/new:multidict._multidict.istr + - Date + : Mon, 24 Feb 2020 22:32:40 GMT + ? !!python/object/new:multidict._multidict.istr + - Etag + : '"0x8D7B9797571878D"' + ? !!python/object/new:multidict._multidict.istr + - Last-Modified + : Mon, 24 Feb 2020 22:32:40 GMT + ? !!python/object/new:multidict._multidict.istr + - Server + : Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: 605c4b8d-801f-003e-1b62-ebdaeb000000 + x-ms-version: '2019-02-02' + status: + code: 201 + message: Created + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - xiafuhns.dfs.core.windows.net + - /filesystem76ef1690/directory76ef1690%2Ffilename + - resource=file + - '' +- request: + body: !!binary | + kfKoBpjgPBWByb40ARkUrSRpIm3a1DGWLkVxkGSldUUGn/39FOq+IU8QaGD2GmD3zzNVBR2KJKVV + rS7CuPHARFxbJTHu/FSl0ItCxh52kBrj9rQRCwLbsL5ony2a+VzaToWZQA== + headers: + Content-Length: + - '100' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 9148f08c-5755-11ea-8afe-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:40 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem76ef1690/directory76ef1690%2Ffilename?position=0&action=append + response: + body: + string: '' + headers: + ? !!python/object/new:multidict._multidict.istr + - Content-Length + : '0' + ? !!python/object/new:multidict._multidict.istr + - Date + : Mon, 24 Feb 2020 22:32:40 GMT + ? !!python/object/new:multidict._multidict.istr + - Server + : Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: 605c4b8e-801f-003e-1c62-ebdaeb000000 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2019-02-02' + status: + code: 202 + message: Accepted + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - xiafuhns.dfs.core.windows.net + - /filesystem76ef1690/directory76ef1690%2Ffilename + - position=0&action=append + - '' +- request: + body: null + headers: + If-Match: + - '"0x8D7B9797571878D"' + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 9150b7ee-5755-11ea-8c09-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:41 GMT + x-ms-version: + - '2019-02-02' + method: PATCH + uri: https://storagename.dfs.core.windows.net/filesystem76ef1690/directory76ef1690%2Ffilename?position=100&action=flush + response: + body: + string: '' + headers: + ? !!python/object/new:multidict._multidict.istr + - Content-Length + : '0' + ? !!python/object/new:multidict._multidict.istr + - Date + : Mon, 24 Feb 2020 22:32:40 GMT + ? !!python/object/new:multidict._multidict.istr + - Etag + : '"0x8D7B9797581ECB9"' + ? !!python/object/new:multidict._multidict.istr + - Last-Modified + : Mon, 24 Feb 2020 22:32:40 GMT + ? !!python/object/new:multidict._multidict.istr + - Server + : Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: 605c4b8f-801f-003e-1d62-ebdaeb000000 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2019-02-02' + status: + code: 200 + message: OK + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - xiafuhns.dfs.core.windows.net + - /filesystem76ef1690/directory76ef1690%2Ffilename + - position=100&action=flush + - '' +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-dfs/12.0.0b8 Python/3.7.3 (Windows-10-10.0.18362-SP0) + x-ms-client-request-id: + - 91591d86-5755-11ea-ad35-001a7dda7113 + x-ms-date: + - Mon, 24 Feb 2020 22:32:41 GMT + x-ms-range: + - bytes=0-33554431 + x-ms-version: + - '2019-07-07' + method: GET + uri: https://storagename.blob.core.windows.net/filesystem76ef1690/directory76ef1690%2Ffilename + response: + body: + string: !!binary | + kfKoBpjgPBWByb40ARkUrSRpIm3a1DGWLkVxkGSldUUGn/39FOq+IU8QaGD2GmD3zzNVBR2KJKVV + rS7CuPHARFxbJTHu/FSl0ItCxh52kBrj9rQRCwLbsL5ony2a+VzaToWZQA== + headers: + ? !!python/object/new:multidict._multidict.istr + - Accept-Ranges + : bytes + ? !!python/object/new:multidict._multidict.istr + - Content-Length + : '100' + ? !!python/object/new:multidict._multidict.istr + - Content-Range + : bytes 0-99/100 + ? !!python/object/new:multidict._multidict.istr + - Content-Type + : application/octet-stream + ? !!python/object/new:multidict._multidict.istr + - Date + : Mon, 24 Feb 2020 22:32:40 GMT + ? !!python/object/new:multidict._multidict.istr + - Etag + : '"0x8D7B9797581ECB9"' + ? !!python/object/new:multidict._multidict.istr + - Last-Modified + : Mon, 24 Feb 2020 22:32:40 GMT + ? !!python/object/new:multidict._multidict.istr + - Server + : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-blob-type: BlockBlob + x-ms-creation-time: Mon, 24 Feb 2020 22:32:40 GMT + x-ms-lease-state: available + x-ms-lease-status: unlocked + x-ms-request-id: 8f3c5e31-d01e-006e-4562-eb18bb000000 + x-ms-server-encrypted: 'true' + x-ms-version: '2019-07-07' + status: + code: 206 + message: Partial Content + url: !!python/object/new:yarl.URL + state: !!python/tuple + - !!python/object/new:urllib.parse.SplitResult + - https + - xiafuhns.blob.core.windows.net + - /filesystem76ef1690/directory76ef1690%2Ffilename + - '' + - '' +version: 1 diff --git a/sdk/storage/azure-storage-file-datalake/tests/test_directory.py b/sdk/storage/azure-storage-file-datalake/tests/test_directory.py index ac52762247c9..63766cacadaf 100644 --- a/sdk/storage/azure-storage-file-datalake/tests/test_directory.py +++ b/sdk/storage/azure-storage-file-datalake/tests/test_directory.py @@ -429,7 +429,7 @@ def test_using_directory_sas_to_read(self): self.dsc.account_name, self.file_system_name, directory_name, - account_key=self.dsc.credential.account_key, + self.dsc.credential.account_key, permission=DirectorySasPermissions(read=True), expiry=datetime.utcnow() + timedelta(hours=1), ) @@ -452,7 +452,7 @@ def test_using_directory_sas_to_create(self): self.dsc.account_name, self.file_system_name, directory_name, - account_key=self.dsc.credential.account_key, + self.dsc.credential.account_key, permission=DirectorySasPermissions(create=True), expiry=datetime.utcnow() + timedelta(hours=1), ) diff --git a/sdk/storage/azure-storage-file-datalake/tests/test_directory_async.py b/sdk/storage/azure-storage-file-datalake/tests/test_directory_async.py index 8d96de907363..71c12ecd96f8 100644 --- a/sdk/storage/azure-storage-file-datalake/tests/test_directory_async.py +++ b/sdk/storage/azure-storage-file-datalake/tests/test_directory_async.py @@ -549,7 +549,7 @@ async def _test_using_directory_sas_to_read(self): self.dsc.account_name, self.file_system_name, directory_name, - account_key=self.dsc.credential.account_key, + self.dsc.credential.account_key, permission=DirectorySasPermissions(read=True), expiry=datetime.utcnow() + timedelta(hours=1), ) @@ -576,7 +576,7 @@ async def _test_using_directory_sas_to_create(self): self.dsc.account_name, self.file_system_name, directory_name, - account_key=self.dsc.credential.account_key, + self.dsc.credential.account_key, permission=DirectorySasPermissions(create=True), expiry=datetime.utcnow() + timedelta(hours=1), ) diff --git a/sdk/storage/azure-storage-file-datalake/tests/test_file.py b/sdk/storage/azure-storage-file-datalake/tests/test_file.py index d08b3f733079..8cded75da38b 100644 --- a/sdk/storage/azure-storage-file-datalake/tests/test_file.py +++ b/sdk/storage/azure-storage-file-datalake/tests/test_file.py @@ -34,7 +34,7 @@ class FileTest(StorageTestCase): def setUp(self): super(FileTest, self).setUp() url = self._get_account_url() - self.dsc = DataLakeServiceClient(url, credential=self.settings.STORAGE_DATA_LAKE_ACCOUNT_KEY) + self.dsc = DataLakeServiceClient(url, credential=self.settings.STORAGE_DATA_LAKE_ACCOUNT_KEY, logging_enable=True) self.config = self.dsc._config self.file_system_name = self.get_resource_name('filesystem') @@ -222,6 +222,75 @@ def test_flush_data_with_match_condition(self): # flush is unsuccessful because extra data were appended. file_client.flush_data(6, etag=resp['etag'], match_condition=MatchConditions.IfNotModified) + def test_upload_data_to_none_existing_file(self): + # parallel upload cannot be recorded + if TestMode.need_recording_file(self.test_mode): + return + + directory_name = self._get_directory_reference() + + # Create a directory to put the file under that + directory_client = self.dsc.get_directory_client(self.file_system_name, directory_name) + directory_client.create_directory() + + file_client = directory_client.get_file_client('filename') + data = self.get_random_bytes(200*1024) * 1024 + file_client.upload_data(data, overwrite=True, max_concurrency=3) + + downloaded_data = file_client.download_file().readall() + self.assertEqual(data, downloaded_data) + + @record + def test_upload_data_to_existing_file(self): + directory_name = self._get_directory_reference() + + # Create a directory to put the file under that + directory_client = self.dsc.get_directory_client(self.file_system_name, directory_name) + directory_client.create_directory() + + # create an existing file + file_client = directory_client.get_file_client('filename') + file_client.create_file() + file_client.append_data(b"abc", 0) + file_client.flush_data(3) + + # to override the existing file + data = self.get_random_bytes(100) + with self.assertRaises(HttpResponseError): + file_client.upload_data(data, max_concurrency=5) + file_client.upload_data(data, overwrite=True, max_concurrency=5) + + downloaded_data = file_client.download_file().readall() + self.assertEqual(data, downloaded_data) + + @record + def test_upload_data_to_existing_file_with_content_settings(self): + directory_name = self._get_directory_reference() + + # Create a directory to put the file under that + directory_client = self.dsc.get_directory_client(self.file_system_name, directory_name) + directory_client.create_directory() + + # create an existing file + file_client = directory_client.get_file_client('filename') + etag = file_client.create_file()['etag'] + + # to override the existing file + data = self.get_random_bytes(100) + content_settings = ContentSettings( + content_language='spanish', + content_disposition='inline') + + file_client.upload_data(data, max_concurrency=5, + content_settings=content_settings, etag=etag, + match_condition=MatchConditions.IfNotModified) + + downloaded_data = file_client.download_file().readall() + properties = file_client.get_file_properties() + + self.assertEqual(data, downloaded_data) + self.assertEqual(properties.content_settings.content_language, content_settings.content_language) + @record def test_read_file(self): file_client = self._create_file_and_return_client() @@ -232,7 +301,7 @@ def test_read_file(self): file_client.flush_data(len(data)) # doanload the data and make sure it is the same as uploaded data - downloaded_data = file_client.read_file() + downloaded_data = file_client.download_file().readall() self.assertEqual(data, downloaded_data) @record @@ -258,7 +327,7 @@ def test_read_file_with_user_delegation_key(self): file_client.file_system_name, None, file_client.path_name, - user_delegation_key=user_delegation_key, + user_delegation_key, permission=FileSasPermissions(read=True, create=True, write=True, delete=True), expiry=datetime.utcnow() + timedelta(hours=1), ) @@ -268,7 +337,7 @@ def test_read_file_with_user_delegation_key(self): file_client.file_system_name, file_client.path_name, credential=sas_token) - downloaded_data = new_file_client.read_file() + downloaded_data = new_file_client.download_file().readall() self.assertEqual(data, downloaded_data) @record @@ -282,10 +351,10 @@ def test_read_file_into_file(self): # doanload the data into a file and make sure it is the same as uploaded data with open(FILE_PATH, 'wb') as stream: - bytes_read = file_client.read_file(stream=stream, max_concurrency=2) + download = file_client.download_file(max_concurrency=2) + download.readinto(stream) # Assert - self.assertIsInstance(bytes_read, int) with open(FILE_PATH, 'rb') as stream: actual = stream.read() self.assertEqual(data, actual) @@ -300,7 +369,7 @@ def test_read_file_to_text(self): file_client.flush_data(len(data)) # doanload the text data and make sure it is the same as uploaded data - downloaded_data = file_client.read_file(max_concurrency=2, encoding="utf-8") + downloaded_data = file_client.download_file(max_concurrency=2, encoding="utf-8").readall() # Assert self.assertEqual(data, downloaded_data) @@ -352,7 +421,7 @@ def test_file_sas_only_applies_to_file_level(self): self.file_system_name, directory_name, file_name, - account_key=self.dsc.credential.account_key, + self.dsc.credential.account_key, permission=FileSasPermissions(read=True, write=True), expiry=datetime.utcnow() + timedelta(hours=1), ) @@ -470,7 +539,7 @@ def test_rename_file_with_non_used_name(self): file_client.flush_data(3) new_client = file_client.rename_file(file_client.file_system_name+'/'+'newname') - data = new_client.read_file() + data = new_client.download_file().readall() self.assertEqual(data, data_bytes) self.assertEqual(new_client.path_name, "newname") @@ -490,7 +559,7 @@ def test_rename_file_to_existing_file(self): new_client = file_client.rename_file(file_client.file_system_name+'/'+existing_file_client.path_name) new_url = file_client.url - data = new_client.read_file() + data = new_client.download_file().readall() # the existing file was overridden self.assertEqual(data, data_bytes) @@ -516,17 +585,17 @@ def test_rename_file_will_not_change_existing_directory(self): new_client = f3.rename_file(f1.file_system_name+'/'+f1.path_name) - self.assertEqual(new_client.read_file(), b"file3") + self.assertEqual(new_client.download_file().readall(), b"file3") # make sure the data in file2 and file4 weren't touched - f2_data = f2.read_file() + f2_data = f2.download_file().readall() self.assertEqual(f2_data, b"file2") - f4_data = f4.read_file() + f4_data = f4.download_file().readall() self.assertEqual(f4_data, b"file4") with self.assertRaises(HttpResponseError): - f3.read_file() + f3.download_file().readall() # ------------------------------------------------------------------------------ if __name__ == '__main__': diff --git a/sdk/storage/azure-storage-file-datalake/tests/test_file_async.py b/sdk/storage/azure-storage-file-datalake/tests/test_file_async.py index adf388336fb4..9b05422ac23b 100644 --- a/sdk/storage/azure-storage-file-datalake/tests/test_file_async.py +++ b/sdk/storage/azure-storage-file-datalake/tests/test_file_async.py @@ -266,6 +266,90 @@ def test_flush_data_with_match_condition_async(self): loop = asyncio.get_event_loop() loop.run_until_complete(self._test_flush_data_with_match_condition()) + async def _test_upload_data(self): + # parallel upload cannot be recorded + if TestMode.need_recording_file(self.test_mode): + return + directory_name = self._get_directory_reference() + + # Create a directory to put the file under that + directory_client = self.dsc.get_directory_client(self.file_system_name, directory_name) + await directory_client.create_directory() + + file_client = directory_client.get_file_client('filename') + data = self.get_random_bytes(400*1024) * 1024 + await file_client.upload_data(data, overwrite=True, max_concurrency=5) + + downloaded_data = await (await file_client.download_file()).readall() + self.assertEqual(data, downloaded_data) + + def test_upload_data_async(self): + loop = asyncio.get_event_loop() + loop.run_until_complete(self._test_upload_data()) + + async def _test_upload_data_to_existing_file_async(self): + directory_name = self._get_directory_reference() + + # Create a directory to put the file under that + directory_client = self.dsc.get_directory_client(self.file_system_name, directory_name) + await directory_client.create_directory() + + # create an existing file + file_client = directory_client.get_file_client('filename') + await file_client.create_file() + await file_client.append_data(b"abc", 0) + await file_client.flush_data(3) + + # to override the existing file + data = self.get_random_bytes(100) + with self.assertRaises(HttpResponseError): + await file_client.upload_data(data, max_concurrency=5) + await file_client.upload_data(data, overwrite=True, max_concurrency=5) + + downloaded_data = await (await file_client.download_file()).readall() + self.assertEqual(data, downloaded_data) + + @record + def test_upload_data_to_existing_file_async(self): + loop = asyncio.get_event_loop() + loop.run_until_complete(self._test_upload_data_to_existing_file_async()) + + async def _test_upload_data_to_existing_file_with_content_settings_async(self): + # etag in async recording file cannot be parsed properly + if TestMode.need_recording_file(self.test_mode): + return + directory_name = self._get_directory_reference() + + # Create a directory to put the file under that + directory_client = self.dsc.get_directory_client(self.file_system_name, directory_name) + await directory_client.create_directory() + + # create an existing file + file_client = directory_client.get_file_client('filename') + resp = await file_client.create_file() + etag = resp['etag'] + + # to override the existing file + data = self.get_random_bytes(100) + content_settings = ContentSettings( + content_language='spanish', + content_disposition='inline') + + await file_client.upload_data(data, max_concurrency=5, + content_settings=content_settings, etag=etag, + match_condition=MatchConditions.IfNotModified) + + downloaded_data = await (await file_client.download_file()).readall() + properties = await file_client.get_file_properties() + + self.assertEqual(data, downloaded_data) + self.assertEqual(properties.content_settings.content_language, content_settings.content_language) + + @record + def test_upload_data_to_existing_file_with_content_settings_async(self): + loop = asyncio.get_event_loop() + loop.run_until_complete(self._test_upload_data_to_existing_file_with_content_settings_async()) + async def _test_read_file(self): file_client = await self._create_file_and_return_client() data = self.get_random_bytes(1024) @@ -275,7 +359,7 @@ async def _test_read_file(self): await file_client.flush_data(len(data)) # doanload the data and make sure it is the same as uploaded data - downloaded_data = await file_client.read_file() + downloaded_data = await (await file_client.download_file()).readall() self.assertEqual(data, downloaded_data) @record @@ -305,7 +389,7 @@ async def _test_read_file_with_user_delegation_key(self): file_client.file_system_name, None, file_client.path_name, - user_delegation_key=user_delegation_key, + user_delegation_key, permission=FileSasPermissions(read=True, create=True, write=True, delete=True), expiry=datetime.utcnow() + timedelta(hours=1), ) @@ -315,7 +399,7 @@ async def _test_read_file_with_user_delegation_key(self): file_client.file_system_name, file_client.path_name, credential=sas_token) - downloaded_data = await new_file_client.read_file() + downloaded_data = await (await new_file_client.download_file()).readall() self.assertEqual(data, downloaded_data) @record @@ -333,10 +417,10 @@ async def _test_read_file_into_file(self): # doanload the data into a file and make sure it is the same as uploaded data with open(FILE_PATH, 'wb') as stream: - bytes_read = await file_client.read_file(stream=stream, max_concurrency=2) + download = await file_client.download_file(max_concurrency=2) + await download.readinto(stream) # Assert - self.assertIsInstance(bytes_read, int) with open(FILE_PATH, 'rb') as stream: actual = stream.read() self.assertEqual(data, actual) @@ -355,7 +439,7 @@ async def _test_read_file_to_text(self): await file_client.flush_data(len(data)) # doanload the text data and make sure it is the same as uploaded data - downloaded_data = await file_client.read_file(max_concurrency=2, encoding="utf-8") + downloaded_data = await (await file_client.download_file(max_concurrency=2, encoding="utf-8")).readall() # Assert self.assertEqual(data, downloaded_data) @@ -414,7 +498,7 @@ async def _test_file_sas_only_applies_to_file_level(self): self.file_system_name, directory_name, file_name, - account_key=self.dsc.credential.account_key, + self.dsc.credential.account_key, permission=FileSasPermissions(read=True, write=True), expiry=datetime.utcnow() + timedelta(hours=1), ) @@ -564,7 +648,7 @@ async def _test_rename_file_with_non_used_name(self): await file_client.flush_data(3) new_client = await file_client.rename_file(file_client.file_system_name+'/'+'newname') - data = await new_client.read_file() + data = await (await new_client.download_file()).readall() self.assertEqual(data, data_bytes) self.assertEqual(new_client.path_name, "newname") @@ -588,7 +672,7 @@ async def _test_rename_file_to_existing_file(self): new_client = await file_client.rename_file(file_client.file_system_name+'/'+existing_file_client.path_name) new_url = file_client.url - data = await new_client.read_file() + data = await (await new_client.download_file()).readall() # the existing file was overridden self.assertEqual(data, data_bytes) @@ -620,17 +704,17 @@ async def _test_rename_file_will_not_change_existing_directory(self): new_client = await f3.rename_file(f1.file_system_name+'/'+f1.path_name) - self.assertEqual(await new_client.read_file(), b"file3") + self.assertEqual(await (await new_client.download_file()).readall(), b"file3") # make sure the data in file2 and file4 weren't touched - f2_data = await f2.read_file() + f2_data = await (await f2.download_file()).readall() self.assertEqual(f2_data, b"file2") - f4_data = await f4.read_file() + f4_data = await (await f4.download_file()).readall() self.assertEqual(f4_data, b"file4") with self.assertRaises(HttpResponseError): - await f3.read_file() + await (await f3.download_file()).readall() @record def test_rename_file_will_not_change_existing_directory_async(self): diff --git a/sdk/storage/azure-storage-file-datalake/tests/test_file_system.py b/sdk/storage/azure-storage-file-datalake/tests/test_file_system.py index eac87f614112..609acab94671 100644 --- a/sdk/storage/azure-storage-file-datalake/tests/test_file_system.py +++ b/sdk/storage/azure-storage-file-datalake/tests/test_file_system.py @@ -320,7 +320,7 @@ def test_create_file_from_file_system_client(self): @record def test_get_root_directory_client(self): file_system = self._create_file_system() - directory_client = file_system.get_root_directory_client() + directory_client = file_system._get_root_directory_client() acl = 'user::rwx,group::r-x,other::rwx' directory_client.set_access_control(acl=acl) diff --git a/sdk/storage/azure-storage-file-datalake/tests/test_file_system_async.py b/sdk/storage/azure-storage-file-datalake/tests/test_file_system_async.py index a74992871d62..0650c5ee014a 100644 --- a/sdk/storage/azure-storage-file-datalake/tests/test_file_system_async.py +++ b/sdk/storage/azure-storage-file-datalake/tests/test_file_system_async.py @@ -430,7 +430,7 @@ def test_create_file_from_file_system_client_async(self): async def _test_get_root_directory_client(self): file_system = await self._create_file_system() - directory_client = file_system.get_root_directory_client() + directory_client = file_system._get_root_directory_client() acl = 'user::rwx,group::r-x,other::rwx' await directory_client.set_access_control(acl=acl) diff --git a/sdk/storage/azure-storage-file-datalake/tests/testcase.py b/sdk/storage/azure-storage-file-datalake/tests/testcase.py index 4e51d23654fc..14be122d4475 100644 --- a/sdk/storage/azure-storage-file-datalake/tests/testcase.py +++ b/sdk/storage/azure-storage-file-datalake/tests/testcase.py @@ -107,7 +107,7 @@ def enable_logging(self): handler = logging.StreamHandler() handler.setFormatter(logging.Formatter(LOGGING_FORMAT)) self.logger.handlers = [handler] - self.logger.setLevel(logging.INFO) + self.logger.setLevel(logging.DEBUG) self.logger.propagate = True self.logger.disabled = False diff --git a/sdk/storage/azure-storage-file-share/CHANGELOG.md b/sdk/storage/azure-storage-file-share/CHANGELOG.md index b0f99522e2e8..17dcd17eab49 100644 --- a/sdk/storage/azure-storage-file-share/CHANGELOG.md +++ b/sdk/storage/azure-storage-file-share/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 12.1.1 (Unreleased) +## 12.1.1 (2020-03-10) **Notes** - The `StorageUserAgentPolicy` is now replaced with the `UserAgentPolicy` from azure-core. With this, the custom user agents are now added as a prefix instead of being appended. diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_shared/base_client.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_shared/base_client.py index 75b72a76ca91..8b65417e9a9a 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_shared/base_client.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_shared/base_client.py @@ -63,7 +63,7 @@ "blob": {"primary": "BlobEndpoint", "secondary": "BlobSecondaryEndpoint"}, "queue": {"primary": "QueueEndpoint", "secondary": "QueueSecondaryEndpoint"}, "file": {"primary": "FileEndpoint", "secondary": "FileSecondaryEndpoint"}, - "dfs": {"primary": "BlobEndpoint", "secondary": "BlobSecondaryEndpoint"}, + "dfs": {"primary": "BlobEndpoint", "secondary": "BlobEndpoint"}, } diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_shared/models.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_shared/models.py index c9879e996263..f6727f1e74fa 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_shared/models.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_shared/models.py @@ -24,6 +24,7 @@ class StorageErrorCode(str, Enum): account_is_disabled = "AccountIsDisabled" authentication_failed = "AuthenticationFailed" authorization_failure = "AuthorizationFailure" + no_authentication_information = "NoAuthenticationInformation" condition_headers_not_supported = "ConditionHeadersNotSupported" condition_not_met = "ConditionNotMet" empty_metadata_key = "EmptyMetadataKey" @@ -158,6 +159,28 @@ class StorageErrorCode(str, Enum): share_has_snapshots = "ShareHasSnapshots" container_quota_downgrade_not_allowed = "ContainerQuotaDowngradeNotAllowed" + # DataLake values + content_length_must_be_zero = 'ContentLengthMustBeZero' + path_already_exists = 'PathAlreadyExists' + invalid_flush_position = 'InvalidFlushPosition' + invalid_property_name = 'InvalidPropertyName' + invalid_source_uri = 'InvalidSourceUri' + unsupported_rest_version = 'UnsupportedRestVersion' + file_system_not_found = 'FilesystemNotFound' + path_not_found = 'PathNotFound' + rename_destination_parent_path_not_found = 'RenameDestinationParentPathNotFound' + source_path_not_found = 'SourcePathNotFound' + destination_path_is_being_deleted = 'DestinationPathIsBeingDeleted' + file_system_already_exists = 'FilesystemAlreadyExists' + file_system_being_deleted = 'FilesystemBeingDeleted' + invalid_destination_path = 'InvalidDestinationPath' + invalid_rename_source_path = 'InvalidRenameSourcePath' + invalid_source_or_destination_resource_type = 'InvalidSourceOrDestinationResourceType' + lease_is_already_broken = 'LeaseIsAlreadyBroken' + lease_name_mismatch = 'LeaseNameMismatch' + path_conflict = 'PathConflict' + source_path_is_being_deleted = 'SourcePathIsBeingDeleted' + class DictMixin(object): diff --git a/sdk/storage/azure-storage-queue/CHANGELOG.md b/sdk/storage/azure-storage-queue/CHANGELOG.md index 525e0d436142..8f09ae2d68e7 100644 --- a/sdk/storage/azure-storage-queue/CHANGELOG.md +++ b/sdk/storage/azure-storage-queue/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 12.1.1 (Unreleased) +## 12.1.1 (2020-03-10) **Fixes** - Responses are always decoded as UTF8 diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/base_client.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/base_client.py index 75b72a76ca91..8b65417e9a9a 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/base_client.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/base_client.py @@ -63,7 +63,7 @@ "blob": {"primary": "BlobEndpoint", "secondary": "BlobSecondaryEndpoint"}, "queue": {"primary": "QueueEndpoint", "secondary": "QueueSecondaryEndpoint"}, "file": {"primary": "FileEndpoint", "secondary": "FileSecondaryEndpoint"}, - "dfs": {"primary": "BlobEndpoint", "secondary": "BlobSecondaryEndpoint"}, + "dfs": {"primary": "BlobEndpoint", "secondary": "BlobEndpoint"}, } diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/models.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/models.py index 87f2f00945ab..0da6b8d3d273 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/models.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/models.py @@ -24,6 +24,7 @@ class StorageErrorCode(str, Enum): account_is_disabled = "AccountIsDisabled" authentication_failed = "AuthenticationFailed" authorization_failure = "AuthorizationFailure" + no_authentication_information = "NoAuthenticationInformation" condition_headers_not_supported = "ConditionHeadersNotSupported" condition_not_met = "ConditionNotMet" empty_metadata_key = "EmptyMetadataKey" @@ -158,6 +159,28 @@ class StorageErrorCode(str, Enum): share_has_snapshots = "ShareHasSnapshots" container_quota_downgrade_not_allowed = "ContainerQuotaDowngradeNotAllowed" + # DataLake values + content_length_must_be_zero = 'ContentLengthMustBeZero' + path_already_exists = 'PathAlreadyExists' + invalid_flush_position = 'InvalidFlushPosition' + invalid_property_name = 'InvalidPropertyName' + invalid_source_uri = 'InvalidSourceUri' + unsupported_rest_version = 'UnsupportedRestVersion' + file_system_not_found = 'FilesystemNotFound' + path_not_found = 'PathNotFound' + rename_destination_parent_path_not_found = 'RenameDestinationParentPathNotFound' + source_path_not_found = 'SourcePathNotFound' + destination_path_is_being_deleted = 'DestinationPathIsBeingDeleted' + file_system_already_exists = 'FilesystemAlreadyExists' + file_system_being_deleted = 'FilesystemBeingDeleted' + invalid_destination_path = 'InvalidDestinationPath' + invalid_rename_source_path = 'InvalidRenameSourcePath' + invalid_source_or_destination_resource_type = 'InvalidSourceOrDestinationResourceType' + lease_is_already_broken = 'LeaseIsAlreadyBroken' + lease_name_mismatch = 'LeaseNameMismatch' + path_conflict = 'PathConflict' + source_path_is_being_deleted = 'SourcePathIsBeingDeleted' + class DictMixin(object): diff --git a/sdk/support/azure-mgmt-support/CHANGELOG.md b/sdk/support/azure-mgmt-support/CHANGELOG.md index 22f9c9cb7236..608aa13f71af 100644 --- a/sdk/support/azure-mgmt-support/CHANGELOG.md +++ b/sdk/support/azure-mgmt-support/CHANGELOG.md @@ -1,5 +1,17 @@ # Release History +## 1.0.0 (2020-03-14) + +**Features** + +- Model UpdateSupportTicket has a new parameter status +- Model Service has a new parameter resource_types + +**Breaking changes** + +- Model SupportTicketDetails no longer has parameter production_outage +- Operation SupportTicketsOperations.update has a new signature + ## 0.1.0 (2020-01-31) -* Initial Release \ No newline at end of file +* Initial Release diff --git a/sdk/support/azure-mgmt-support/README.md b/sdk/support/azure-mgmt-support/README.md index 59242422e139..fd5542bc09d5 100644 --- a/sdk/support/azure-mgmt-support/README.md +++ b/sdk/support/azure-mgmt-support/README.md @@ -1,29 +1,21 @@ -## Microsoft Azure SDK for Python +# Microsoft Azure SDK for Python This is the Microsoft Azure Support Management Client Library. - -Azure Resource Manager (ARM) is the next generation of management APIs -that replace the old Azure Service Management (ASM). - This package has been tested with Python 2.7, 3.5, 3.6, 3.7 and 3.8. +For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/) -For the older Azure Service Management (ASM) libraries, see -[azure-servicemanagement-legacy](https://pypi.python.org/pypi/azure-servicemanagement-legacy) -library. -For a more complete set of Azure libraries, see the -[azure](https://pypi.python.org/pypi/azure) bundle package. +# Usage -## Usage +For code examples, see [Support Management](https://docs.microsoft.com/python/api/overview/azure/) +on docs.microsoft.com. -For code examples, see [Support -Management](https://docs.microsoft.com/python/api/overview/azure/) on -docs.microsoft.com. -## Provide Feedback +# Provide Feedback -If you encounter any bugs or have suggestions, please file an issue in -the [Issues](https://github.com/Azure/azure-sdk-for-python/issues) +If you encounter any bugs or have suggestions, please file an issue in the +[Issues](https://github.com/Azure/azure-sdk-for-python/issues) section of the project. -![image](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-support%2FREADME.png) + +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-python%2Fazure-mgmt-support%2FREADME.png) diff --git a/sdk/support/azure-mgmt-support/azure/mgmt/support/_microsoft_support.py b/sdk/support/azure-mgmt-support/azure/mgmt/support/_microsoft_support.py index b5cde2a156a0..0078a66cd9d1 100644 --- a/sdk/support/azure-mgmt-support/azure/mgmt/support/_microsoft_support.py +++ b/sdk/support/azure-mgmt-support/azure/mgmt/support/_microsoft_support.py @@ -53,7 +53,7 @@ def __init__( super(MicrosoftSupport, self).__init__(self.config.credentials, self.config) client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} - self.api_version = '2019-05-01-preview' + self.api_version = '2020-04-01' self._serialize = Serializer(client_models) self._deserialize = Deserializer(client_models) diff --git a/sdk/support/azure-mgmt-support/azure/mgmt/support/models/__init__.py b/sdk/support/azure-mgmt-support/azure/mgmt/support/models/__init__.py index d34acc63b6f4..6da20f4af9c6 100644 --- a/sdk/support/azure-mgmt-support/azure/mgmt/support/models/__init__.py +++ b/sdk/support/azure-mgmt-support/azure/mgmt/support/models/__init__.py @@ -60,6 +60,7 @@ PreferredContactMethod, CommunicationType, CommunicationDirection, + Status, ) __all__ = [ @@ -92,4 +93,5 @@ 'PreferredContactMethod', 'CommunicationType', 'CommunicationDirection', + 'Status', ] diff --git a/sdk/support/azure-mgmt-support/azure/mgmt/support/models/_microsoft_support_enums.py b/sdk/support/azure-mgmt-support/azure/mgmt/support/models/_microsoft_support_enums.py index 45a9d90ddaad..e0ae55992052 100644 --- a/sdk/support/azure-mgmt-support/azure/mgmt/support/models/_microsoft_support_enums.py +++ b/sdk/support/azure-mgmt-support/azure/mgmt/support/models/_microsoft_support_enums.py @@ -23,6 +23,7 @@ class SeverityLevel(str, Enum): minimal = "minimal" moderate = "moderate" critical = "critical" + highestcriticalimpact = "highestcriticalimpact" class PreferredContactMethod(str, Enum): @@ -41,3 +42,9 @@ class CommunicationDirection(str, Enum): inbound = "inbound" outbound = "outbound" + + +class Status(str, Enum): + + open = "open" + closed = "closed" diff --git a/sdk/support/azure-mgmt-support/azure/mgmt/support/models/_models.py b/sdk/support/azure-mgmt-support/azure/mgmt/support/models/_models.py index 0e76a7be125b..1d0ae958c5db 100644 --- a/sdk/support/azure-mgmt-support/azure/mgmt/support/models/_models.py +++ b/sdk/support/azure-mgmt-support/azure/mgmt/support/models/_models.py @@ -105,7 +105,8 @@ class CommunicationDetails(Model): include: 'inbound', 'outbound' :vartype communication_direction: str or ~azure.mgmt.support.models.CommunicationDirection - :param sender: Email address of the sender + :param sender: Email address of the sender. This property is required if + called by a service principal :type sender: str :param subject: Required. Subject of the communication :type subject: str @@ -174,22 +175,21 @@ class ContactProfile(Model): method is phone. :type phone_number: str :param preferred_time_zone: Required. Time zone of the user. This is the - name of the time zone from Microsoft - Time Zone Index Values. + name of the time zone from [Microsoft Time Zone Index + Values](https://support.microsoft.com/help/973627/microsoft-time-zone-index-values). :type preferred_time_zone: str :param country: Required. Country of the user. This is the ISO 3166-1 alpha-3 code. :type country: str :param preferred_support_language: Required. Preferred language of support from Azure. Support languages vary based on the severity you choose for - your support ticket. Learn more at Azure Severity - and responsiveness. Use the standard language-country code. Valid - values are 'en-us' for English, 'zh-hans' for Chinese, 'es-es' for - Spanish, 'fr-fr' for French, 'ja-jp' for Japanese, 'ko-kr' for Korean, - 'ru-ru' for Russian, 'pt-br' for Portuguese, 'it-it' for Italian, 'zh-tw' - for Chinese and 'de-de' for German. + your support ticket. Learn more at [Azure Severity and + responsiveness](https://azure.microsoft.com/support/plans/response). Use + the standard language-country code. Valid values are 'en-us' for English, + 'zh-hans' for Chinese, 'es-es' for Spanish, 'fr-fr' for French, 'ja-jp' + for Japanese, 'ko-kr' for Korean, 'ru-ru' for Russian, 'pt-br' for + Portuguese, 'it-it' for Italian, 'zh-tw' for Chinese and 'de-de' for + German. :type preferred_support_language: str """ @@ -382,9 +382,8 @@ def __init__(self, **kwargs): class QuotaTicketDetails(Model): """Additional set of information required for quota increase support ticket for certain quota types, e.g.: Virtual machine cores. Get complete details - about Quota payload support request along with examples at Support quota - request. + about Quota payload support request along with examples at [Support quota + request](https://aka.ms/supportrpquotarequestpayload). :param quota_change_request_sub_type: Required for certain quota types when there is a sub type that you are requesting quota increase for. @@ -425,6 +424,8 @@ class Service(Model): :vartype type: str :param display_name: Localized name of Azure service :type display_name: str + :param resource_types: ARM Resource types + :type resource_types: list[str] """ _validation = { @@ -438,6 +439,7 @@ class Service(Model): 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'resource_types': {'key': 'properties.resourceTypes', 'type': '[str]'}, } def __init__(self, **kwargs): @@ -446,6 +448,7 @@ def __init__(self, **kwargs): self.name = None self.type = None self.display_name = kwargs.get('display_name', None) + self.resource_types = kwargs.get('resource_types', None) class ServiceError(Model): @@ -604,13 +607,13 @@ class SupportTicketDetails(Model): :vartype problem_classification_display_name: str :param severity: Required. A value that indicates the urgency of the case, which in turn determines the response time according to the service level - agreement of the technical support plan you have with Azure. Possible - values include: 'minimal', 'moderate', 'critical' + agreement of the technical support plan you have with Azure. Note: + 'Highest critical impact' severity is reserved only to our Premium + customers. Possible values include: 'minimal', 'moderate', 'critical', + 'highestcriticalimpact' :type severity: str or ~azure.mgmt.support.models.SeverityLevel :ivar enrollment_id: Enrollment ID associated with the support ticket. :vartype enrollment_id: str - :ivar production_outage: Indicates if this issue is a production outage. - :vartype production_outage: bool :param require24_x7_response: Indicates if this requires a 24x7 response from Azure. :type require24_x7_response: bool @@ -663,7 +666,6 @@ class SupportTicketDetails(Model): 'problem_classification_display_name': {'readonly': True}, 'severity': {'required': True}, 'enrollment_id': {'readonly': True}, - 'production_outage': {'readonly': True}, 'contact_details': {'required': True}, 'support_plan_type': {'readonly': True}, 'title': {'required': True}, @@ -684,7 +686,6 @@ class SupportTicketDetails(Model): 'problem_classification_display_name': {'key': 'properties.problemClassificationDisplayName', 'type': 'str'}, 'severity': {'key': 'properties.severity', 'type': 'str'}, 'enrollment_id': {'key': 'properties.enrollmentId', 'type': 'str'}, - 'production_outage': {'key': 'properties.productionOutage', 'type': 'bool'}, 'require24_x7_response': {'key': 'properties.require24X7Response', 'type': 'bool'}, 'contact_details': {'key': 'properties.contactDetails', 'type': 'ContactProfile'}, 'service_level_agreement': {'key': 'properties.serviceLevelAgreement', 'type': 'ServiceLevelAgreement'}, @@ -712,7 +713,6 @@ def __init__(self, **kwargs): self.problem_classification_display_name = None self.severity = kwargs.get('severity', None) self.enrollment_id = None - self.production_outage = None self.require24_x7_response = kwargs.get('require24_x7_response', None) self.contact_details = kwargs.get('contact_details', None) self.service_level_agreement = kwargs.get('service_level_agreement', None) @@ -767,21 +767,20 @@ class UpdateContactProfile(Model): method is phone. :type phone_number: str :param preferred_time_zone: Time zone of the user. This is the name of the - time zone from Microsoft - Time Zone Index Values. + time zone from [Microsoft Time Zone Index + Values](https://support.microsoft.com/en-us/help/973627/microsoft-time-zone-index-values). :type preferred_time_zone: str :param country: Country of the user. This is the ISO 3166-1 alpha-3 code. :type country: str :param preferred_support_language: Preferred language of support from Azure. Support languages vary based on the severity you choose for your - support ticket. Learn more at Azure Severity - and responsiveness. Use the standard language-country code. Valid - values are 'en-us' for English, 'zh-hans' for Chinese, 'es-es' for - Spanish, 'fr-fr' for French, 'ja-jp' for Japanese, 'ko-kr' for Korean, - 'ru-ru' for Russian, 'pt-br' for Portuguese, 'it-it' for Italian, 'zh-tw' - for Chinese and 'de-de' for German. + support ticket. Learn more at [Azure Severity and + responsiveness](https://azure.microsoft.com/support/plans/response/). Use + the standard language-country code. Valid values are 'en-us' for English, + 'zh-hans' for Chinese, 'es-es' for Spanish, 'fr-fr' for French, 'ja-jp' + for Japanese, 'ko-kr' for Korean, 'ru-ru' for Russian, 'pt-br' for + Portuguese, 'it-it' for Italian, 'zh-tw' for Chinese and 'de-de' for + German. :type preferred_support_language: str """ @@ -811,11 +810,14 @@ def __init__(self, **kwargs): class UpdateSupportTicket(Model): - """Updates severity and contact details in the support ticket. + """Updates severity, ticket status and contact details in the support ticket. :param severity: Severity level. Possible values include: 'minimal', - 'moderate', 'critical' + 'moderate', 'critical', 'highestcriticalimpact' :type severity: str or ~azure.mgmt.support.models.SeverityLevel + :param status: Status to be updated on the ticket. Possible values + include: 'open', 'closed' + :type status: str or ~azure.mgmt.support.models.Status :param contact_details: Contact details to be updated on the support ticket. :type contact_details: ~azure.mgmt.support.models.UpdateContactProfile @@ -823,10 +825,12 @@ class UpdateSupportTicket(Model): _attribute_map = { 'severity': {'key': 'severity', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, 'contact_details': {'key': 'contactDetails', 'type': 'UpdateContactProfile'}, } def __init__(self, **kwargs): super(UpdateSupportTicket, self).__init__(**kwargs) self.severity = kwargs.get('severity', None) + self.status = kwargs.get('status', None) self.contact_details = kwargs.get('contact_details', None) diff --git a/sdk/support/azure-mgmt-support/azure/mgmt/support/models/_models_py3.py b/sdk/support/azure-mgmt-support/azure/mgmt/support/models/_models_py3.py index 96161258ac69..48c8be873275 100644 --- a/sdk/support/azure-mgmt-support/azure/mgmt/support/models/_models_py3.py +++ b/sdk/support/azure-mgmt-support/azure/mgmt/support/models/_models_py3.py @@ -105,7 +105,8 @@ class CommunicationDetails(Model): include: 'inbound', 'outbound' :vartype communication_direction: str or ~azure.mgmt.support.models.CommunicationDirection - :param sender: Email address of the sender + :param sender: Email address of the sender. This property is required if + called by a service principal :type sender: str :param subject: Required. Subject of the communication :type subject: str @@ -174,22 +175,21 @@ class ContactProfile(Model): method is phone. :type phone_number: str :param preferred_time_zone: Required. Time zone of the user. This is the - name of the time zone from Microsoft - Time Zone Index Values. + name of the time zone from [Microsoft Time Zone Index + Values](https://support.microsoft.com/help/973627/microsoft-time-zone-index-values). :type preferred_time_zone: str :param country: Required. Country of the user. This is the ISO 3166-1 alpha-3 code. :type country: str :param preferred_support_language: Required. Preferred language of support from Azure. Support languages vary based on the severity you choose for - your support ticket. Learn more at Azure Severity - and responsiveness. Use the standard language-country code. Valid - values are 'en-us' for English, 'zh-hans' for Chinese, 'es-es' for - Spanish, 'fr-fr' for French, 'ja-jp' for Japanese, 'ko-kr' for Korean, - 'ru-ru' for Russian, 'pt-br' for Portuguese, 'it-it' for Italian, 'zh-tw' - for Chinese and 'de-de' for German. + your support ticket. Learn more at [Azure Severity and + responsiveness](https://azure.microsoft.com/support/plans/response). Use + the standard language-country code. Valid values are 'en-us' for English, + 'zh-hans' for Chinese, 'es-es' for Spanish, 'fr-fr' for French, 'ja-jp' + for Japanese, 'ko-kr' for Korean, 'ru-ru' for Russian, 'pt-br' for + Portuguese, 'it-it' for Italian, 'zh-tw' for Chinese and 'de-de' for + German. :type preferred_support_language: str """ @@ -382,9 +382,8 @@ def __init__(self, *, region: str=None, payload: str=None, **kwargs) -> None: class QuotaTicketDetails(Model): """Additional set of information required for quota increase support ticket for certain quota types, e.g.: Virtual machine cores. Get complete details - about Quota payload support request along with examples at Support quota - request. + about Quota payload support request along with examples at [Support quota + request](https://aka.ms/supportrpquotarequestpayload). :param quota_change_request_sub_type: Required for certain quota types when there is a sub type that you are requesting quota increase for. @@ -425,6 +424,8 @@ class Service(Model): :vartype type: str :param display_name: Localized name of Azure service :type display_name: str + :param resource_types: ARM Resource types + :type resource_types: list[str] """ _validation = { @@ -438,14 +439,16 @@ class Service(Model): 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'resource_types': {'key': 'properties.resourceTypes', 'type': '[str]'}, } - def __init__(self, *, display_name: str=None, **kwargs) -> None: + def __init__(self, *, display_name: str=None, resource_types=None, **kwargs) -> None: super(Service, self).__init__(**kwargs) self.id = None self.name = None self.type = None self.display_name = display_name + self.resource_types = resource_types class ServiceError(Model): @@ -604,13 +607,13 @@ class SupportTicketDetails(Model): :vartype problem_classification_display_name: str :param severity: Required. A value that indicates the urgency of the case, which in turn determines the response time according to the service level - agreement of the technical support plan you have with Azure. Possible - values include: 'minimal', 'moderate', 'critical' + agreement of the technical support plan you have with Azure. Note: + 'Highest critical impact' severity is reserved only to our Premium + customers. Possible values include: 'minimal', 'moderate', 'critical', + 'highestcriticalimpact' :type severity: str or ~azure.mgmt.support.models.SeverityLevel :ivar enrollment_id: Enrollment ID associated with the support ticket. :vartype enrollment_id: str - :ivar production_outage: Indicates if this issue is a production outage. - :vartype production_outage: bool :param require24_x7_response: Indicates if this requires a 24x7 response from Azure. :type require24_x7_response: bool @@ -663,7 +666,6 @@ class SupportTicketDetails(Model): 'problem_classification_display_name': {'readonly': True}, 'severity': {'required': True}, 'enrollment_id': {'readonly': True}, - 'production_outage': {'readonly': True}, 'contact_details': {'required': True}, 'support_plan_type': {'readonly': True}, 'title': {'required': True}, @@ -684,7 +686,6 @@ class SupportTicketDetails(Model): 'problem_classification_display_name': {'key': 'properties.problemClassificationDisplayName', 'type': 'str'}, 'severity': {'key': 'properties.severity', 'type': 'str'}, 'enrollment_id': {'key': 'properties.enrollmentId', 'type': 'str'}, - 'production_outage': {'key': 'properties.productionOutage', 'type': 'bool'}, 'require24_x7_response': {'key': 'properties.require24X7Response', 'type': 'bool'}, 'contact_details': {'key': 'properties.contactDetails', 'type': 'ContactProfile'}, 'service_level_agreement': {'key': 'properties.serviceLevelAgreement', 'type': 'ServiceLevelAgreement'}, @@ -712,7 +713,6 @@ def __init__(self, *, description: str, problem_classification_id: str, severity self.problem_classification_display_name = None self.severity = severity self.enrollment_id = None - self.production_outage = None self.require24_x7_response = require24_x7_response self.contact_details = contact_details self.service_level_agreement = service_level_agreement @@ -767,21 +767,20 @@ class UpdateContactProfile(Model): method is phone. :type phone_number: str :param preferred_time_zone: Time zone of the user. This is the name of the - time zone from Microsoft - Time Zone Index Values. + time zone from [Microsoft Time Zone Index + Values](https://support.microsoft.com/en-us/help/973627/microsoft-time-zone-index-values). :type preferred_time_zone: str :param country: Country of the user. This is the ISO 3166-1 alpha-3 code. :type country: str :param preferred_support_language: Preferred language of support from Azure. Support languages vary based on the severity you choose for your - support ticket. Learn more at Azure Severity - and responsiveness. Use the standard language-country code. Valid - values are 'en-us' for English, 'zh-hans' for Chinese, 'es-es' for - Spanish, 'fr-fr' for French, 'ja-jp' for Japanese, 'ko-kr' for Korean, - 'ru-ru' for Russian, 'pt-br' for Portuguese, 'it-it' for Italian, 'zh-tw' - for Chinese and 'de-de' for German. + support ticket. Learn more at [Azure Severity and + responsiveness](https://azure.microsoft.com/support/plans/response/). Use + the standard language-country code. Valid values are 'en-us' for English, + 'zh-hans' for Chinese, 'es-es' for Spanish, 'fr-fr' for French, 'ja-jp' + for Japanese, 'ko-kr' for Korean, 'ru-ru' for Russian, 'pt-br' for + Portuguese, 'it-it' for Italian, 'zh-tw' for Chinese and 'de-de' for + German. :type preferred_support_language: str """ @@ -811,11 +810,14 @@ def __init__(self, *, first_name: str=None, last_name: str=None, preferred_conta class UpdateSupportTicket(Model): - """Updates severity and contact details in the support ticket. + """Updates severity, ticket status and contact details in the support ticket. :param severity: Severity level. Possible values include: 'minimal', - 'moderate', 'critical' + 'moderate', 'critical', 'highestcriticalimpact' :type severity: str or ~azure.mgmt.support.models.SeverityLevel + :param status: Status to be updated on the ticket. Possible values + include: 'open', 'closed' + :type status: str or ~azure.mgmt.support.models.Status :param contact_details: Contact details to be updated on the support ticket. :type contact_details: ~azure.mgmt.support.models.UpdateContactProfile @@ -823,10 +825,12 @@ class UpdateSupportTicket(Model): _attribute_map = { 'severity': {'key': 'severity', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, 'contact_details': {'key': 'contactDetails', 'type': 'UpdateContactProfile'}, } - def __init__(self, *, severity=None, contact_details=None, **kwargs) -> None: + def __init__(self, *, severity=None, status=None, contact_details=None, **kwargs) -> None: super(UpdateSupportTicket, self).__init__(**kwargs) self.severity = severity + self.status = status self.contact_details = contact_details diff --git a/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_communications_operations.py b/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_communications_operations.py index 8525a478ce39..81009aa7fc04 100644 --- a/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_communications_operations.py +++ b/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_communications_operations.py @@ -26,7 +26,7 @@ class CommunicationsOperations(object): :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: Api version. Constant value: "2019-05-01-preview". + :ivar api_version: Api version. Constant value: "2020-04-01". """ models = models @@ -36,7 +36,7 @@ def __init__(self, client, config, serializer, deserializer): self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2019-05-01-preview" + self.api_version = "2020-04-01" self.config = config @@ -114,13 +114,12 @@ def list( self, support_ticket_name, top=None, filter=None, custom_headers=None, raw=False, **operation_config): """Lists all communications (attachments not included) for a support ticket.

    You can also filter support ticket communications by - CreatedDate�or CommunicationType using the $filter - parameter. The only type of communication supported today is - Web. Output will be a paged result with nextLink, using - which you can retrieve the next set of Communication results. -

    Support ticket data is available for 12 months after ticket - creation. If a ticket was created more than 12 months ago, a request - for data might cause an error. + _CreatedDate_ or _CommunicationType_ using the $filter parameter. The + only type of communication supported today is _Web_. Output will be a + paged result with _nextLink_, using which you can retrieve the next set + of Communication results.

    Support ticket data is available + for 12 months after ticket creation. If a ticket was created more than + 12 months ago, a request for data might cause an error. :param support_ticket_name: Support ticket name :type support_ticket_name: str @@ -202,7 +201,7 @@ def internal_paging(next_link=None): def get( self, support_ticket_name, communication_name, custom_headers=None, raw=False, **operation_config): - """Returns details of a specific communication in a support ticket. + """Returns communication details for a support ticket. :param support_ticket_name: Support ticket name :type support_ticket_name: str @@ -310,12 +309,7 @@ def _create_initial( def create( self, support_ticket_name, communication_name, create_communication_parameters, custom_headers=None, raw=False, polling=True, **operation_config): - """Adds a new customer communication to an Azure support ticket. Adding - attachments are not currently supported via the API.
    To add a file - to a support ticket, visit the Manage - support ticket page in the Azure portal, select the support ticket, - and use the file upload control to add a new file. + """Adds a new customer communication to an Azure support ticket. :param support_ticket_name: Support ticket name :type support_ticket_name: str diff --git a/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_operations.py b/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_operations.py index 7dd29f0ddd3b..f41866826e83 100644 --- a/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_operations.py +++ b/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_operations.py @@ -24,7 +24,7 @@ class Operations(object): :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: Api version. Constant value: "2019-05-01-preview". + :ivar api_version: Api version. Constant value: "2020-04-01". """ models = models @@ -34,7 +34,7 @@ def __init__(self, client, config, serializer, deserializer): self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2019-05-01-preview" + self.api_version = "2020-04-01" self.config = config diff --git a/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_problem_classifications_operations.py b/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_problem_classifications_operations.py index a4b59a959b7b..0ec28bdd585c 100644 --- a/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_problem_classifications_operations.py +++ b/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_problem_classifications_operations.py @@ -24,7 +24,7 @@ class ProblemClassificationsOperations(object): :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: Api version. Constant value: "2019-05-01-preview". + :ivar api_version: Api version. Constant value: "2020-04-01". """ models = models @@ -34,14 +34,14 @@ def __init__(self, client, config, serializer, deserializer): self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2019-05-01-preview" + self.api_version = "2020-04-01" self.config = config def list( self, service_name, custom_headers=None, raw=False, **operation_config): """Lists all the problem classifications (categories) available for a - specific Azure service.

    Always use the service and problem + specific Azure service. Always use the service and problem classifications obtained programmatically. This practice ensures that you always have the most recent set of service and problem classification Ids. @@ -112,8 +112,7 @@ def internal_paging(next_link=None): def get( self, service_name, problem_classification_name, custom_headers=None, raw=False, **operation_config): - """Gets the details of a specific problem classification for a specific - Azure service. + """Get problem classification details for a specific Azure service. :param service_name: Name of Azure service available for support. :type service_name: str diff --git a/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_services_operations.py b/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_services_operations.py index f83aa0c341f0..b1c59529cfb2 100644 --- a/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_services_operations.py +++ b/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_services_operations.py @@ -24,7 +24,7 @@ class ServicesOperations(object): :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: Api version. Constant value: "2019-05-01-preview". + :ivar api_version: Api version. Constant value: "2020-04-01". """ models = models @@ -34,26 +34,21 @@ def __init__(self, client, config, serializer, deserializer): self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2019-05-01-preview" + self.api_version = "2020-04-01" self.config = config def list( self, custom_headers=None, raw=False, **operation_config): - """Lists all the Azure services available for support ticket creation. - Here are the Service Ids for **Billing**, **Subscription Management**, - and **Service and subscription limits (Quotas)** issues: -
    Issue typeService - Id
    Billing'/providers/Microsoft.Support/services/517f2da6-78fd-0498-4e22-ad26996b1dfc'
    Subscription - Management'/providers/Microsoft.Support/services/f3dc5421-79ef-1efa-41a5-42bf3cbb52c6'
    Quota'/providers/Microsoft.Support/services/06bfd9d3-516b-d5c6-5802-169c800dec89'
    -

    For **Technical** issues, select the Service Id that maps to - the Azure service/product as displayed in the **Services** drop-down - list on the Azure portal's New - support request page.

    Always use the service and it's - corresponding problem classification(s) obtained programmatically for - support ticket creation. This practice ensures that you always have the - most recent set of service and problem classification Ids. + """Lists all the Azure services available for support ticket creation. For + **Technical** issues, select the Service Id that maps to the Azure + service/product as displayed in the **Services** drop-down list on the + Azure portal's [New support + request](https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade/overview) + page. Always use the service and it's corresponding problem + classification(s) obtained programmatically for support ticket + creation. This practice ensures that you always have the most recent + set of service and problem classification Ids. :param dict custom_headers: headers that will be added to the request :param bool raw: returns the direct response alongside the diff --git a/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_support_tickets_operations.py b/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_support_tickets_operations.py index 12aee0fe8c04..1030c1483595 100644 --- a/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_support_tickets_operations.py +++ b/sdk/support/azure-mgmt-support/azure/mgmt/support/operations/_support_tickets_operations.py @@ -26,7 +26,7 @@ class SupportTicketsOperations(object): :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: Api version. Constant value: "2019-05-01-preview". + :ivar api_version: Api version. Constant value: "2020-04-01". """ models = models @@ -36,7 +36,7 @@ def __init__(self, client, config, serializer, deserializer): self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2019-05-01-preview" + self.api_version = "2020-04-01" self.config = config @@ -109,24 +109,23 @@ def check_name_availability( def list( self, top=None, filter=None, custom_headers=None, raw=False, **operation_config): - """Lists all the support tickets for an Azure subscription.

    You - can also filter the support tickets by Status or - CreatedDate using the $filter parameter. Output will be a paged - result with nextLink, using which you can retrieve the next set - of support tickets.

    Support ticket data is available for 12 - months after ticket creation. If a ticket was created more than 12 - months ago, a request for data might cause an error. + """Lists all the support tickets for an Azure subscription. You can also + filter the support tickets by _Status_ or _CreatedDate_ using the + $filter parameter. Output will be a paged result with _nextLink_, using + which you can retrieve the next set of support tickets. +

    Support ticket data is available for 12 months after ticket + creation. If a ticket was created more than 12 months ago, a request + for data might cause an error. :param top: The number of values to return in the collection. Default is 25 and max is 100. :type top: int :param filter: The filter to apply on the operation. We support 'odata - v4.0' filter semantics. Learn - more
    Status filter can only be used with 'eq' - operator. For CreatedDate filter, the supported operators are - 'gt' and 'ge'. When using both filters, combine them using the logical - 'AND'. + v4.0' filter semantics. [Learn + more](https://docs.microsoft.com/odata/concepts/queryoptions-overview). + _Status_ filter can only be used with 'eq' operator. For _CreatedDate_ + filter, the supported operators are 'gt' and 'ge'. When using both + filters, combine them using the logical 'AND'. :type filter: str :param dict custom_headers: headers that will be added to the request :param bool raw: returns the direct response alongside the @@ -195,10 +194,9 @@ def internal_paging(next_link=None): def get( self, support_ticket_name, custom_headers=None, raw=False, **operation_config): - """Gets details for a specific support ticket in an Azure subscription. -

    Support ticket data is available for 12 months after ticket - creation. If a ticket was created more than 12 months ago, a request - for data might cause an error. + """Get ticket details for an Azure subscription. Support ticket data is + available for 12 months after ticket creation. If a ticket was created + more than 12 months ago, a request for data might cause an error. :param support_ticket_name: Support ticket name :type support_ticket_name: str @@ -254,22 +252,22 @@ def get( get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Support/supportTickets/{supportTicketName}'} def update( - self, support_ticket_name, severity=None, contact_details=None, custom_headers=None, raw=False, **operation_config): - """This API allows you to update the severity level or your contact - information in the support ticket.

    Note: The severity levels - cannot be changed if a support ticket is actively being worked upon by - an Azure support engineer. In such a case, contact your support - engineer to request severity update by adding a new communication using - the Communications API. + self, support_ticket_name, update_support_ticket, custom_headers=None, raw=False, **operation_config): + """This API allows you to update the severity level, ticket status, and + your contact information in the support ticket.

    Note: The + severity levels cannot be changed if a support ticket is actively being + worked upon by an Azure support engineer. In such a case, contact your + support engineer to request severity update by adding a new + communication using the Communications API.

    Changing the + ticket status to _closed_ is allowed only on an unassigned case. When + an engineer is actively working on the ticket, send your ticket closure + request by sending a note to your engineer. :param support_ticket_name: Support ticket name :type support_ticket_name: str - :param severity: Severity level. Possible values include: 'minimal', - 'moderate', 'critical' - :type severity: str or ~azure.mgmt.support.models.SeverityLevel - :param contact_details: Contact details to be updated on the support - ticket. - :type contact_details: ~azure.mgmt.support.models.UpdateContactProfile + :param update_support_ticket: UpdateSupportTicket object + :type update_support_ticket: + ~azure.mgmt.support.models.UpdateSupportTicket :param dict custom_headers: headers that will be added to the request :param bool raw: returns the direct response alongside the deserialized response @@ -281,8 +279,6 @@ def update( :raises: :class:`ExceptionResponseException` """ - update_support_ticket = models.UpdateSupportTicket(severity=severity, contact_details=contact_details) - # Construct URL url = self.update.metadata['url'] path_format_arguments = { @@ -376,18 +372,29 @@ def _create_initial( def create( self, support_ticket_name, create_support_ticket_parameters, custom_headers=None, raw=False, polling=True, **operation_config): - """Creates a new support ticket for Quota increase, Technical, Billing, - and Subscription Management issues for the specified subscription. -

    A paid technical support plan is required to create a support - ticket using this API. Learn - more

    Use the Services API to map the right Service Id to - the issue type. For example: For billing tickets set *serviceId* to - *'/providers/Microsoft.Support/services/517f2da6-78fd-0498-4e22-ad26996b1dfc'*. -
    For Technical issues, the Service id will map to the Azure - service you want to raise a support ticket for.

    Always call - the Services and ProblemClassifications API to get the most recent set - of services and problem categories required for support ticket - creation. + """Creates a new support ticket for Subscription and Service limits + (Quota), Technical, Billing, and Subscription Management issues for the + specified subscription. Learn the + [prerequisites](https://aka.ms/supportAPI) required to create a support + ticket.

    Always call the Services and ProblemClassifications + API to get the most recent set of services and problem categories + required for support ticket creation.

    Adding attachments are + not currently supported via the API. To add a file to an existing + support ticket, visit the [Manage support + ticket](https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade/managesupportrequest) + page in the Azure portal, select the support ticket, and use the file + upload control to add a new file.

    Providing consent to share + diagnostic information with Azure support is currently not supported + via the API. Azure support engineer, working on your ticket, will reach + out to you for consent if your issue requires gathering diagnostic + information from your Azure resources.

    **Creating a support + ticket for on-behalf-of**: Include _x-ms-authorization-auxiliary_ + header to provide an auxiliary token as per + [this](https://docs.microsoft.com/azure/azure-resource-manager/management/authenticate-multi-tenant). + The primary token will be from the tenant for whom a support ticket is + being raised against the subscription, i.e. Cloud solution provider + (CSP) customer tenant. The auxiliary token will be from the Cloud + solution provider (CSP) partner tenant. :param support_ticket_name: Support ticket name. :type support_ticket_name: str diff --git a/sdk/support/azure-mgmt-support/azure/mgmt/support/version.py b/sdk/support/azure-mgmt-support/azure/mgmt/support/version.py index e0ec669828cb..a39916c162ce 100644 --- a/sdk/support/azure-mgmt-support/azure/mgmt/support/version.py +++ b/sdk/support/azure-mgmt-support/azure/mgmt/support/version.py @@ -9,5 +9,5 @@ # regenerated. # -------------------------------------------------------------------------- -VERSION = "0.1.0" +VERSION = "1.0.0" diff --git a/sdk/synapse/azure-synapse/samples/sample.py b/sdk/synapse/azure-synapse/samples/sample.py index 8ac8c5c57c7d..9af66d4c06dd 100644 --- a/sdk/synapse/azure-synapse/samples/sample.py +++ b/sdk/synapse/azure-synapse/samples/sample.py @@ -55,10 +55,10 @@ def cancel_spark_batch_job(self, batch_id, spark_pool_name, workspace_name, deta batch_id = 1 # parameter for creating batch job job_name = "WordCount_Java" - file = "abfss://testfilesystem@newzzyadlsgen2.dfs.core.windows.net/samples/java/wordcount/wordcount.jar" + file = "abfss://{filesystem}@{adlsgen2account}.dfs.core.windows.net/samples/java/wordcount/wordcount.jar" class_name = "WordCount" - args = ["abfss://testfilesystem@newzzyadlsgen2.dfs.core.windows.net/samples/java/wordcount/shakespeare.txt", - "abfss://testfilesystem@newzzyadlsgen2.dfs.core.windows.net/samples/java/wordcount/result/"] + args = ["abfss://{filesystem}@{adlsgen2account}.dfs.core.windows.net/samples/java/wordcount/shakespeare.txt", + "abfss://{filesystem}@{adlsgen2account}.dfs.core.windows.net/samples/java/wordcount/result/"] driver_memory = "4g" driver_cores = 4 executor_memory = "4g" diff --git a/sdk/template/azure-template/CHANGELOG.md b/sdk/template/azure-template/CHANGELOG.md new file mode 100644 index 000000000000..e05432691209 --- /dev/null +++ b/sdk/template/azure-template/CHANGELOG.md @@ -0,0 +1,5 @@ +# Release History + + +## 0.0.1 (2019-10-06) + - Template package diff --git a/sdk/textanalytics/azure-ai-textanalytics/CHANGELOG.md b/sdk/textanalytics/azure-ai-textanalytics/CHANGELOG.md index 467c74592d3d..f08ca18b2e5a 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/CHANGELOG.md +++ b/sdk/textanalytics/azure-ai-textanalytics/CHANGELOG.md @@ -1,10 +1,20 @@ # Change Log azure-ai-textanalytics -## 1.0.0b3 (Unreleased) +## 1.0.0b4 (Unreleased) +**Breaking changes** +- `score` attribute has been renamed to `confidence_score` for the `CategorizedEntity`, `LinkedEntityMatch`, and +`PiiEntity` models + +**Breaking changes** +- All input parameters `inputs` have been renamed to `documents` + + +## 1.0.0b3 (2020-03-10) **Breaking changes** -- `SentimentScorePerLabel` has been renamed to `SentimentConfidenceScorePerLabel` +- `SentimentScorePerLabel` has been renamed to `SentimentConfidenceScores` - `AnalyzeSentimentResult` and `SentenceSentiment` attribute `sentiment_scores` has been renamed to `confidence_scores` +- `TextDocumentStatistics` attribute `character_count` has been renamed to `grapheme_count` - `LinkedEntity` attribute `id` has been renamed to `data_source_entity_id` - Parameters `country_hint` and `language` are now passed as keyword arguments - The keyword argument `response_hook` has been renamed to `raw_response_hook` @@ -14,13 +24,16 @@ **New features** - Pass `country_hint="none"` to not use the default country hint of `"US"`. +**Dependency updates** +- Adopted [azure-core](https://pypi.org/project/azure-core/) version 1.3.0 or greater + ## 1.0.0b2 (2020-02-11) **Breaking changes** - The single text, module-level operations `single_detect_language()`, `single_recognize_entities()`, `single_extract_key_phrases()`, `single_analyze_sentiment()`, `single_recognize_pii_entities()`, and `single_recognize_linked_entities()` have been removed from the client library. Use the batching methods for optimal performance in production environments. -- To use an API key as the credential for authenticating the client, a new credential class `TextAnalyticsApiKeyCredential("")` must be passed in for the `credential` parameter. +- To use an API key as the credential for authenticating the client, a new credential class `TextAnalyticsApiKeyCredential("")` must be passed in for the `credential` parameter. Passing the API key as a string is no longer supported. - `detect_languages()` is renamed to `detect_language()`. - The `TextAnalyticsError` model has been simplified to an object with only attributes `code`, `message`, and `target`. @@ -89,8 +102,8 @@ https://azure.github.io/azure-sdk/releases/latest/python.html. - `show_stats` and `model_version` parameters move to keyword only arguments. - New return types - - The return types for the batching methods (`detect_languages`, `recognize_entities`, `recognize_pii_entities`, `recognize_linked_entities`, `extract_key_phrases`, `analyze_sentiment`) now return a heterogeneous list of - result objects and document errors in the order passed in with the request. To iterate over the list and filter for result or error, a boolean property on each object called `is_error` can be used to determine whether the returned response object at + - The return types for the batching methods (`detect_languages`, `recognize_entities`, `recognize_pii_entities`, `recognize_linked_entities`, `extract_key_phrases`, `analyze_sentiment`) now return a heterogeneous list of + result objects and document errors in the order passed in with the request. To iterate over the list and filter for result or error, a boolean property on each object called `is_error` can be used to determine whether the returned response object at that index is a result or an error: - `detect_languages` now returns a List[Union[`DetectLanguageResult`, `DocumentError`]] - `recognize_entities` now returns a List[Union[`RecognizeEntitiesResult`, `DocumentError`]] diff --git a/sdk/textanalytics/azure-ai-textanalytics/README.md b/sdk/textanalytics/azure-ai-textanalytics/README.md index 4d04b56bec99..d600984f88cc 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/README.md +++ b/sdk/textanalytics/azure-ai-textanalytics/README.md @@ -53,8 +53,8 @@ az cognitiveservices account create \ ``` ### Authenticate the client -Interaction with this service begins with an instance of a [client](#client "ta-client"). -To create a client object, you will need the cognitive services or text analytics `endpoint` to +Interaction with this service begins with an instance of a [client](#client "ta-client"). +To create a client object, you will need the cognitive services or text analytics `endpoint` to your resource and a `credential` that allows you access: ```python @@ -63,12 +63,12 @@ from azure.ai.textanalytics import TextAnalyticsClient text_analytics_client = TextAnalyticsClient(endpoint="https://.api.cognitive.microsoft.com/", credential=credential) ``` -Note that if you create a [custom subdomain][cognitive_custom_subdomain] -name for your resource the endpoint may look different than in the above code snippet. +Note that if you create a [custom subdomain][cognitive_custom_subdomain] +name for your resource the endpoint may look different than in the above code snippet. For example, `https://.cognitiveservices.azure.com/`. #### Looking up the endpoint -You can find the endpoint for your text analytics resource using the +You can find the endpoint for your text analytics resource using the [Azure Portal][azure_portal_get_endpoint] or [Azure CLI][azure_cli_endpoint_lookup]: @@ -79,19 +79,19 @@ az cognitiveservices account show --name "resource-name" --resource-group "resou #### Types of credentials The `credential` parameter may be provided as a `TextAnalyticsApiKeyCredential` or as a token from Azure Active Directory. -See the full details regarding [authentication][cognitive_authentication] of +See the full details regarding [authentication][cognitive_authentication] of cognitive services. -1. To use an [API key][cognitive_authentication_api_key], - pass the key as a string into an instance of `TextAnalyticsApiKeyCredential("")`. +1. To use an [API key][cognitive_authentication_api_key], + pass the key as a string into an instance of `TextAnalyticsApiKeyCredential("")`. The API key can be found in the Azure Portal or by running the following Azure CLI command: ```az cognitiveservices account keys list --name "resource-name" --resource-group "resource-group-name"``` - + Use the key as the credential parameter to authenticate the client: ```python from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - + credential = TextAnalyticsApiKeyCredential("") text = TextAnalyticsClient(endpoint="https://.api.cognitive.microsoft.com/", credential=credential) ``` @@ -106,12 +106,12 @@ cognitive services. * [Install azure-identity][install_azure_identity] * [Register a new AAD application][register_aad_app] * [Grant access][grant_role_access] to Text Analytics by assigning the `"Cognitive Services User"` role to your service principal. - - After setup, you can choose which type of [credential][azure_identity_credentials] from azure.identity to use. + + After setup, you can choose which type of [credential][azure_identity_credentials] from azure.identity to use. As an example, [DefaultAzureCredential][default_azure_credential] can be used to authenticate the client: - Set the values of the client ID, tenant ID, and client secret of the AAD application as environment variables: + Set the values of the client ID, tenant ID, and client secret of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET Use the returned token credential to authenticate the client: @@ -130,7 +130,7 @@ cognitive services. ### Client The Text Analytics client library provides a [TextAnalyticsClient][text_analytics_client] to do analysis on [batches of documents](#Examples "examples"). -It provides both synchronous and asynchronous operations to access a specific use of Text Analytics, such as language detection or key phrase extraction. +It provides both synchronous and asynchronous operations to access a specific use of Text Analytics, such as language detection or key phrase extraction. ### Input A **document** is a single unit to be analyzed by the predictive models in the Text Analytics service. @@ -138,18 +138,18 @@ The input for each operation is passed as a **list** of documents. Each document can be passed as a string in the list, e.g. ```python -docs = ["I hated the movie. It was so slow!", "The movie made it into my top ten favorites.", "What a great movie!"] +documents = ["I hated the movie. It was so slow!", "The movie made it into my top ten favorites.", "What a great movie!"] ``` -or, if you wish to pass in a per-item document `id` or `language`/`country_hint`, they can be passed as a list of +or, if you wish to pass in a per-item document `id` or `language`/`country_hint`, they can be passed as a list of [DetectLanguageInput][detect_language_input] or [TextDocumentInput][text_document_input] or a dict-like representation of the object: ```python -inputs = [ - {"id": "1", "language": "en", "text": "I hated the movie. It was so slow!"}, - {"id": "2", "language": "en", "text": "The movie made it into my top ten favorites."}, +documents = [ + {"id": "1", "language": "en", "text": "I hated the movie. It was so slow!"}, + {"id": "2", "language": "en", "text": "The movie made it into my top ten favorites."}, {"id": "3", "language": "en", "text": "What a great movie!"} ] ``` @@ -157,19 +157,19 @@ inputs = [ See [service limitations][service_limits] for the input, including document length limits, maximum batch size, and supported text encoding. ### Return Value -The return value for a single document can be a result or error object. -A heterogeneous list containing a collection of result and error objects is returned from each operation. -These results/errors are index-matched with the order of the provided documents. +The return value for a single document can be a result or error object. +A heterogeneous list containing a collection of result and error objects is returned from each operation. +These results/errors are index-matched with the order of the provided documents. -A **result**, such as [AnalyzeSentimentResult][analyze_sentiment_result], +A **result**, such as [AnalyzeSentimentResult][analyze_sentiment_result], is the result of a Text Analytics operation and contains a prediction or predictions about a document input. -The **error** object, [DocumentError][document_error], indicates that the service had trouble processing the document and contains +The **error** object, [DocumentError][document_error], indicates that the service had trouble processing the document and contains the reason it was unsuccessful. ### Document Error Handling -You can filter for a result or error object in the list by using the `is_error` attribute. For a result object this is always `False` and for a -[DocumentError][document_error] this is `True`. +You can filter for a result or error object in the list by using the `is_error` attribute. For a result object this is always `False` and for a +[DocumentError][document_error] this is `True`. For example, to filter out all DocumentErrors you might use list comprehension: ```python @@ -189,11 +189,11 @@ The following section provides several code snippets covering some of the most c * [Detect Language](#detect-language "Detect language") ### Analyze sentiment -Analyze sentiment of text to determine if it's positive, negative, neutral or mixed, including per-sentence sentiment analysis and confidence scores. +[analyze_sentiment][analyze_sentiment] looks at its input text and determines whether its sentiment is positive, negative, neutral or mixed. It's response includes per-sentence sentiment analysis and confidence scores. ```python from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - + text_analytics_client = TextAnalyticsClient(endpoint, TextAnalyticsApiKeyCredential(key)) documents = [ @@ -207,7 +207,7 @@ result = [doc for doc in response if not doc.is_error] for doc in result: print("Overall sentiment: {}".format(doc.sentiment)) - print("Scores: positive={0:.3f}; neutral={1:.3f}; negative={2:.3f} \n".format( + print("Scores: positive={}; neutral={}; negative={} \n".format( doc.confidence_scores.positive, doc.confidence_scores.neutral, doc.confidence_scores.negative, @@ -219,11 +219,11 @@ The returned response is a heterogeneous list of result and error objects: list[ Please refer to the service documentation for a conceptual discussion of [sentiment analysis][sentiment_analysis]. ### Recognize entities -Recognize and categorize entities in text as people, places, organizations, date/time, quantities, percentages, currencies, and more. +[recognize_entities][recognize_entities] recognizes and categories entities in its input text as people, places, organizations, date/time, quantities, percentages, currencies, and more. ```python from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - + text_analytics_client = TextAnalyticsClient(endpoint, TextAnalyticsApiKeyCredential(key)) documents = [ @@ -238,7 +238,7 @@ result = [doc for doc in response if not doc.is_error] for doc in result: for entity in doc.entities: print("Entity: \t", entity.text, "\tCategory: \t", entity.category, - "\tConfidence Score: \t", entity.score) + "\tConfidence Score: \t", entity.confidence_score) ``` The returned response is a heterogeneous list of result and error objects: list[[RecognizeEntitiesResult][recognize_entities_result], [DocumentError][document_error]] @@ -247,12 +247,12 @@ Please refer to the service documentation for a conceptual discussion of [named and [supported types][named_entity_categories]. ### Recognize PII entities -Recognize and categorize Personally Identifiable Information (PII) entities in text, such as -Social Security Numbers, bank account information, credit card numbers, and more. +[recognize_pii_entities][recognize_pii_entities] recognizes and categorizes Personally Identifiable Information (PII) entities in its input text, such as +Social Security Numbers, bank account information, credit card numbers, and more. ```python from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - + text_analytics_client = TextAnalyticsClient(endpoint, TextAnalyticsApiKeyCredential(key)) documents = [ @@ -266,7 +266,7 @@ result = [doc for doc in response if not doc.is_error] for doc in result: for entity in doc.entities: print("Entity: \t", entity.text, "\tCategory: \t", entity.category, - "\tConfidence Score: \t", entity.score) + "\tConfidence Score: \t", entity.confidence_score) ``` The returned response is a heterogeneous list of result and error objects: list[[RecognizePiiEntitiesResult][recognize_pii_entities_result], [DocumentError][document_error]] @@ -274,13 +274,13 @@ The returned response is a heterogeneous list of result and error objects: list[ Please refer to the service documentation for [supported PII entity types][pii_entity_categories]. ### Recognize linked entities -Recognize and disambiguate the identity of each entity found in text (for example, +[recognize_linked_entities][recognize_linked_entities] recognizes and disambiguates the identity of each entity found in its input text (for example, determining whether an occurrence of the word Mars refers to the planet, or to the Roman god of war). Recognized entities are associated with URLs to a well-known knowledge base, like Wikipedia. ```python from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - + text_analytics_client = TextAnalyticsClient(endpoint, TextAnalyticsApiKeyCredential(key)) documents = [ @@ -297,9 +297,8 @@ for doc in result: print("URL: {}".format(entity.url)) print("Data Source: {}".format(entity.data_source)) for match in entity.matches: - print("Score: {0:.3f}".format(match.score)) - print("Offset: {}".format(match.grapheme_offset)) - print("Length: {}\n".format(match.grapheme_length)) + print("Confidence Score: {}".format(match.confidence_score)) + print("Entity as appears in request: {}".format(match.text)) ``` The returned response is a heterogeneous list of result and error objects: list[[RecognizeLinkedEntitiesResult][recognize_linked_entities_result], [DocumentError][document_error]] @@ -308,11 +307,11 @@ Please refer to the service documentation for a conceptual discussion of [entity and [supported types][linked_entities_categories]. ### Extract key phrases -Extract key phrases in text to determine the main talking points. For example, for the input text "The food was delicious and there were wonderful staff", the API returns: "food" and "wonderful staff". +[extract_key_phrases][extract_key_phrases] determines the main talking points in its input text. For example, for the input text "The food was delicious and there were wonderful staff", the API returns: "food" and "wonderful staff". ```python from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - + text_analytics_client = TextAnalyticsClient(endpoint, TextAnalyticsApiKeyCredential(key)) documents = [ @@ -333,17 +332,17 @@ The returned response is a heterogeneous list of result and error objects: list[ Please refer to the service documentation for a conceptual discussion of [key phrase extraction][key_phrase_extraction]. ### Detect language -Determine the language in text, including the confidence score of the predicted language. +[detect_language][detect_language] determines the language of its input text, including the confidence score of the predicted language. ```python from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - + text_analytics_client = TextAnalyticsClient(endpoint, TextAnalyticsApiKeyCredential(key)) documents = [ "This is written in English.", "Il documento scritto in italiano.", - "Dies ist in englischer Sprache verfasst." + "Dies ist in deutsche Sprache verfasst." ] response = text_analytics_client.detect_language(documents) @@ -411,8 +410,8 @@ result = text_analytics_client.analyze_sentiment(documents, logging_enable=True) ### More sample code These code samples show common scenario operations with the Azure Text Analytics client library. -The async versions of the samples (the python sample files appended with `_async`) show asynchronous operations -with Text Analytics and require Python 3.5 or later. +The async versions of the samples (the python sample files appended with `_async`) show asynchronous operations +with Text Analytics and require Python 3.5 or later. Authenticate the client with a Cognitive Services/Text Analytics API key or a token credential from [azure-identity][azure_identity]: * [sample_authentication.py][sample_authentication] ([async version][sample_authentication_async]) @@ -474,6 +473,13 @@ This project has adopted the [Microsoft Open Source Code of Conduct][code_of_con [detect_language_input]: https://aka.ms/azsdk-python-textanalytics-detectlanguageinput [text_analytics_client]: https://aka.ms/azsdk-python-textanalytics-textanalyticsclient +[analyze_sentiment]: https://aka.ms/azsdk-python-textanalytics-analyzesentiment +[recognize_entities]: https://aka.ms/azsdk-python-textanalytics-recognizeentities +[recognize_pii_entities]: https://aka.ms/azsdk-python-textanalytics-recognizepiientities +[recognize_linked_entities]: https://aka.ms/azsdk-python-textanalytics-recognizelinkedentities +[extract_key_phrases]: https://aka.ms/azsdk-python-textanalytics-extractkeyphrases +[detect_language]: https://aka.ms/azsdk-python-textanalytics-detectlanguage + [language_detection]: https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-language-detection [language_and_regional_support]: https://docs.microsoft.com/azure/cognitive-services/text-analytics/language-support [sentiment_analysis]: https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-how-to-sentiment-analysis diff --git a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/__init__.py b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/__init__.py index 4271ce338214..844f85bd6cc5 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/__init__.py +++ b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/__init__.py @@ -24,7 +24,7 @@ LinkedEntityMatch, TextDocumentBatchStatistics, SentenceSentiment, - SentimentConfidenceScorePerLabel, + SentimentConfidenceScores, PiiEntity ) from ._credential import TextAnalyticsApiKeyCredential @@ -48,7 +48,7 @@ 'LinkedEntityMatch', 'TextDocumentBatchStatistics', 'SentenceSentiment', - 'SentimentConfidenceScorePerLabel', + 'SentimentConfidenceScores', 'TextAnalyticsApiKeyCredential', 'PiiEntity' ] diff --git a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_models.py b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_models.py index 69ae57f1b916..ada8c88a2e42 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_models.py +++ b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_models.py @@ -196,9 +196,9 @@ class CategorizedEntity(DictMixin): :param grapheme_length: Length (in Unicode characters) for the entity text. :type grapheme_length: int - :param score: Confidence score between 0 and 1 of the extracted + :param confidence_score: Confidence score between 0 and 1 of the extracted entity. - :type score: float + :type confidence_score: float """ def __init__(self, **kwargs): @@ -207,7 +207,7 @@ def __init__(self, **kwargs): self.subcategory = kwargs.get('subcategory', None) self.grapheme_offset = kwargs.get('grapheme_offset', None) self.grapheme_length = kwargs.get('grapheme_length', None) - self.score = kwargs.get('score', None) + self.confidence_score = kwargs.get('confidence_score', None) @classmethod def _from_generated(cls, entity): @@ -217,13 +217,13 @@ def _from_generated(cls, entity): subcategory=entity.subtype, grapheme_offset=entity.offset, grapheme_length=entity.length, - score=entity.score, + confidence_score=entity.score, ) def __repr__(self): return "CategorizedEntity(text={}, category={}, subcategory={}, grapheme_offset={}, grapheme_length={}, " \ - "score={})".format(self.text, self.category, self.subcategory, self.grapheme_offset, - self.grapheme_length, self.score)[:1024] + "confidence_score={})".format(self.text, self.category, self.subcategory, self.grapheme_offset, + self.grapheme_length, self.confidence_score)[:1024] class PiiEntity(DictMixin): @@ -244,9 +244,9 @@ class PiiEntity(DictMixin): :param grapheme_length: Length (in Unicode characters) for the entity text. :type grapheme_length: int - :param score: Confidence score between 0 and 1 of the extracted + :param confidence_score: Confidence score between 0 and 1 of the extracted entity. - :type score: float + :type confidence_score: float """ def __init__(self, **kwargs): @@ -255,7 +255,7 @@ def __init__(self, **kwargs): self.subcategory = kwargs.get('subcategory', None) self.grapheme_offset = kwargs.get('grapheme_offset', None) self.grapheme_length = kwargs.get('grapheme_length', None) - self.score = kwargs.get('score', None) + self.confidence_score = kwargs.get('confidence_score', None) @classmethod def _from_generated(cls, entity): @@ -265,13 +265,13 @@ def _from_generated(cls, entity): subcategory=entity.subtype, grapheme_offset=entity.offset, grapheme_length=entity.length, - score=entity.score, + confidence_score=entity.score, ) def __repr__(self): return "PiiEntity(text={}, category={}, subcategory={}, grapheme_offset={}, grapheme_length={}, " \ - "score={})".format(self.text, self.category, self.subcategory, self.grapheme_offset, - self.grapheme_length, self.score)[:1024] + "confidence_score={})".format(self.text, self.category, self.subcategory, self.grapheme_offset, + self.grapheme_length, self.confidence_score)[:1024] class TextAnalyticsError(DictMixin): @@ -396,7 +396,7 @@ class AnalyzeSentimentResult(DictMixin): :param confidence_scores: Document level sentiment confidence scores between 0 and 1 for each sentiment label. :type confidence_scores: - ~azure.ai.textanalytics.SentimentConfidenceScorePerLabel + ~azure.ai.textanalytics.SentimentConfidenceScores :param sentences: Sentence level sentiment analysis. :type sentences: list[~azure.ai.textanalytics.SentenceSentiment] @@ -422,16 +422,16 @@ class TextDocumentStatistics(DictMixin): """TextDocumentStatistics contains information about the document payload. - :param character_count: Number of text elements recognized in + :param grapheme_count: Number of text elements recognized in the document. - :type character_count: int + :type grapheme_count: int :param transaction_count: Number of transactions for the document. :type transaction_count: int """ def __init__(self, **kwargs): - self.character_count = kwargs.get("character_count", None) + self.grapheme_count = kwargs.get("grapheme_count", None) self.transaction_count = kwargs.get("transaction_count", None) @classmethod @@ -439,13 +439,13 @@ def _from_generated(cls, stats): if stats is None: return None return cls( - character_count=stats.characters_count, + grapheme_count=stats.characters_count, transaction_count=stats.transactions_count, ) def __repr__(self): - return "TextDocumentStatistics(character_count={}, transaction_count={})" \ - .format(self.character_count, self.transaction_count)[:1024] + return "TextDocumentStatistics(grapheme_count={}, transaction_count={})" \ + .format(self.grapheme_count, self.transaction_count)[:1024] class DocumentError(DictMixin): @@ -574,10 +574,10 @@ class LinkedEntityMatch(DictMixin): the confidence score of the prediction and where the entity was found in the text. - :param score: If a well-known item is recognized, a + :param confidence_score: If a well-known item is recognized, a decimal number denoting the confidence level between 0 and 1 will be returned. - :type score: float + :type confidence_score: float :param text: Entity text as appears in the request. :type text: str :param grapheme_offset: Start position (in Unicode characters) for the @@ -589,7 +589,7 @@ class LinkedEntityMatch(DictMixin): """ def __init__(self, **kwargs): - self.score = kwargs.get("score", None) + self.confidence_score = kwargs.get("confidence_score", None) self.text = kwargs.get("text", None) self.grapheme_offset = kwargs.get("grapheme_offset", None) self.grapheme_length = kwargs.get("grapheme_length", None) @@ -597,12 +597,15 @@ def __init__(self, **kwargs): @classmethod def _from_generated(cls, match): return cls( - score=match.score, text=match.text, grapheme_offset=match.offset, grapheme_length=match.length + confidence_score=match.score, + text=match.text, + grapheme_offset=match.offset, + grapheme_length=match.length ) def __repr__(self): - return "LinkedEntityMatch(score={}, text={}, grapheme_offset={}, grapheme_length={})" \ - .format(self.score, self.text, self.grapheme_offset, self.grapheme_length)[:1024] + return "LinkedEntityMatch(confidence_score={}, text={}, grapheme_offset={}, grapheme_length={})" \ + .format(self.confidence_score, self.text, self.grapheme_offset, self.grapheme_length)[:1024] class TextDocumentInput(MultiLanguageInput): @@ -679,7 +682,7 @@ class SentenceSentiment(DictMixin): :param confidence_scores: The sentiment confidence score between 0 and 1 for the sentence for all labels. :type confidence_scores: - ~azure.ai.textanalytics.SentimentConfidenceScorePerLabel + ~azure.ai.textanalytics.SentimentConfidenceScores :param grapheme_offset: The sentence offset from the start of the document. :type grapheme_offset: int @@ -700,7 +703,7 @@ def __init__(self, **kwargs): def _from_generated(cls, sentence): return cls( sentiment=sentence.sentiment.value, - confidence_scores=SentimentConfidenceScorePerLabel._from_generated(sentence.sentence_scores), # pylint: disable=protected-access + confidence_scores=SentimentConfidenceScores._from_generated(sentence.sentence_scores), # pylint: disable=protected-access grapheme_offset=sentence.offset, grapheme_length=sentence.length, warnings=sentence.warnings, @@ -712,9 +715,9 @@ def __repr__(self): self.grapheme_length, self.warnings)[:1024] -class SentimentConfidenceScorePerLabel(DictMixin): - """The confidence scores (Softmax scores) between 0 and 1 across all sentiment - labels: positive, neutral, negative. Higher values indicate higher confidence. +class SentimentConfidenceScores(DictMixin): + """The confidence scores (Softmax scores) between 0 and 1. + Higher values indicate higher confidence. :param positive: Positive score. :type positive: float @@ -738,5 +741,5 @@ def _from_generated(cls, score): ) def __repr__(self): - return "SentimentConfidenceScorePerLabel(positive={}, neutral={}, negative={})" \ + return "SentimentConfidenceScores(positive={}, neutral={}, negative={})" \ .format(self.positive, self.neutral, self.negative)[:1024] diff --git a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_response_handlers.py b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_response_handlers.py index 56bd6a93ef74..7779cccdcf20 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_response_handlers.py +++ b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_response_handlers.py @@ -5,11 +5,10 @@ # ------------------------------------ import json -from azure.core.pipeline.policies import ContentDecodePolicy from azure.core.exceptions import ( HttpResponseError, ClientAuthenticationError, - DecodeError, + ODataV4Format ) from ._models import ( RecognizeEntitiesResult, @@ -24,47 +23,30 @@ DetectLanguageResult, DetectedLanguage, DocumentError, - SentimentConfidenceScorePerLabel, + SentimentConfidenceScores, TextAnalyticsError, PiiEntity ) +class CSODataV4Format(ODataV4Format): + INNERERROR_LABEL = "innerError" # Service plans to fix casing ("innererror") to reflect ODataV4 error spec + + def __init__(self, odata_error): + try: + if odata_error["error"]["innerError"]: + super(CSODataV4Format, self).__init__(odata_error["error"]["innerError"]) + except KeyError: + super(CSODataV4Format, self).__init__(odata_error) + + def process_batch_error(error): - """Raise detailed error message for HttpResponseErrors + """Raise detailed error message. """ raise_error = HttpResponseError if error.status_code == 401: raise_error = ClientAuthenticationError - error_message = error.message - error_code = error.status_code - error_body, error_target = None, None - - try: - error_body = ContentDecodePolicy.deserialize_from_http_generics(error.response) - except DecodeError: - pass - - try: - if error_body is not None: - error_resp = error_body["error"] - if "innerError" in error_resp: - error_resp = error_resp["innerError"] - - error_message = error_resp["message"] - error_code = error_resp["code"] - error_target = error_resp.get("target", None) - if error_target: - error_message += "\nErrorCode:{}\nTarget:{}".format(error_code, error_target) - else: - error_message += "\nErrorCode:{}".format(error_code) - except KeyError: - raise HttpResponseError(message="There was an unknown error with the request.") - - error = raise_error(message=error_message, response=error.response) - error.error_code = error_code - error.target = error_target - raise error + raise raise_error(response=error.response, error_format=CSODataV4Format) def order_results(response, combined): @@ -149,6 +131,6 @@ def sentiment_result(sentiment): id=sentiment.id, sentiment=sentiment.sentiment.value, statistics=TextDocumentStatistics._from_generated(sentiment.statistics), # pylint: disable=protected-access - confidence_scores=SentimentConfidenceScorePerLabel._from_generated(sentiment.document_scores), # pylint: disable=protected-access + confidence_scores=SentimentConfidenceScores._from_generated(sentiment.document_scores), # pylint: disable=protected-access sentences=[SentenceSentiment._from_generated(s) for s in sentiment.sentences], # pylint: disable=protected-access ) diff --git a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_text_analytics_client.py b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_text_analytics_client.py index eac288044449..dbb57e75328a 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_text_analytics_client.py +++ b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_text_analytics_client.py @@ -58,9 +58,9 @@ class TextAnalyticsClient(TextAnalyticsClientBase): :param credential: Credentials needed for the client to connect to Azure. This can be the an instance of TextAnalyticsApiKeyCredential if using a cognitive services/text analytics API key or a token credential - from azure.identity. - :type credential: ~azure.ai.textanalytics.TextAnalyticsApiKeyCredential or - ~azure.core.credentials.TokenCredential + from :mod:`azure.identity`. + :type credential: :class:`~azure.ai.textanalytics.TextAnalyticsApiKeyCredential` or + :class:`~azure.core.credentials.TokenCredential` :keyword str default_country_hint: Sets the default country_hint to use for all operations. Defaults to "US". If you don't want to use a country hint, pass the string "none". :keyword str default_language: Sets the default language to use for all operations. @@ -95,7 +95,7 @@ def __init__(self, endpoint, credential, **kwargs): @distributed_trace def detect_language( # type: ignore self, - inputs, # type: Union[List[str], List[DetectLanguageInput], List[Dict[str, str]]] + documents, # type: Union[List[str], List[DetectLanguageInput], List[Dict[str, str]]] **kwargs # type: Any ): # type: (...) -> List[Union[DetectLanguageResult, DocumentError]] @@ -108,11 +108,12 @@ def detect_language( # type: ignore See https://docs.microsoft.com/azure/cognitive-services/text-analytics/overview#data-limits for document length limits, maximum batch size, and supported text encoding. - :param inputs: The set of documents to process as part of this batch. + :param documents: The set of documents to process as part of this batch. If you wish to specify the ID and country_hint on a per-item basis you must - use as input a list[DetectLanguageInput] or a list of dict representations of - DetectLanguageInput, like `{"id": "1", "country_hint": "us", "text": "hello world"}`. - :type inputs: + use as input a list[:class:`~azure.ai.textanalytics.DetectLanguageInput`] or a list of + dict representations of :class:`~azure.ai.textanalytics.DetectLanguageInput`, like + `{"id": "1", "country_hint": "us", "text": "hello world"}`. + :type documents: list[str] or list[~azure.ai.textanalytics.DetectLanguageInput] :keyword str country_hint: A country hint for the entire batch. Accepts two letter country codes specified by ISO 3166-1 alpha-2. Per-document @@ -123,8 +124,9 @@ def detect_language( # type: ignore is not specified, the API will default to the latest, non-preview version. :keyword bool show_stats: If set to true, response will contain document level statistics. - :return: The combined list of DetectLanguageResults and DocumentErrors in the order - the original documents were passed in. + :return: The combined list of :class:`~azure.ai.textanalytics.DetectLanguageResult` and + :class:`~azure.ai.textanalytics.DocumentError` in the order the original documents were + passed in. :rtype: list[~azure.ai.textanalytics.DetectLanguageResult, ~azure.ai.textanalytics.DocumentError] :raises ~azure.core.exceptions.HttpResponseError: @@ -140,7 +142,7 @@ def detect_language( # type: ignore """ country_hint_arg = kwargs.pop("country_hint", None) country_hint = country_hint_arg if country_hint_arg is not None else self._default_country_hint - docs = _validate_batch_input(inputs, "country_hint", country_hint) + docs = _validate_batch_input(documents, "country_hint", country_hint) model_version = kwargs.pop("model_version", None) show_stats = kwargs.pop("show_stats", False) try: @@ -157,7 +159,7 @@ def detect_language( # type: ignore @distributed_trace def recognize_entities( # type: ignore self, - inputs, # type: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]] + documents, # type: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]] **kwargs # type: Any ): # type: (...) -> List[Union[RecognizeEntitiesResult, DocumentError]] @@ -170,11 +172,12 @@ def recognize_entities( # type: ignore See https://docs.microsoft.com/azure/cognitive-services/text-analytics/overview#data-limits for document length limits, maximum batch size, and supported text encoding. - :param inputs: The set of documents to process as part of this batch. + :param documents: The set of documents to process as part of this batch. If you wish to specify the ID and language on a per-item basis you must - use as input a list[TextDocumentInput] or a list of dict representations of - TextDocumentInput, like `{"id": "1", "language": "en", "text": "hello world"}`. - :type inputs: + use as input a list[:class:`~azure.ai.textanalytics.TextDocumentInput`] or a list + of dict representations of :class:`~azure.ai.textanalytics.TextDocumentInput`, + like `{"id": "1", "language": "en", "text": "hello world"}`. + :type documents: list[str] or list[~azure.ai.textanalytics.TextDocumentInput] :keyword str language: The 2 letter ISO 639-1 representation of language for the entire batch. For example, use "en" for English; "es" for Spanish etc. @@ -185,8 +188,9 @@ def recognize_entities( # type: ignore be used for scoring, e.g. "latest", "2019-10-01". If a model-version is not specified, the API will default to the latest, non-preview version. :keyword bool show_stats: If set to true, response will contain document level statistics. - :return: The combined list of RecognizeEntitiesResults and DocumentErrors in the order - the original documents were passed in. + :return: The combined list of :class:`~azure.ai.textanalytics.RecognizeEntitiesResult` and + :class:`~azure.ai.textanalytics.DocumentError` in the order the original documents + were passed in. :rtype: list[~azure.ai.textanalytics.RecognizeEntitiesResult, ~azure.ai.textanalytics.DocumentError] :raises ~azure.core.exceptions.HttpResponseError: @@ -202,7 +206,7 @@ def recognize_entities( # type: ignore """ language_arg = kwargs.pop("language", None) language = language_arg if language_arg is not None else self._default_language - docs = _validate_batch_input(inputs, "language", language) + docs = _validate_batch_input(documents, "language", language) model_version = kwargs.pop("model_version", None) show_stats = kwargs.pop("show_stats", False) try: @@ -219,7 +223,7 @@ def recognize_entities( # type: ignore @distributed_trace def recognize_pii_entities( # type: ignore self, - inputs, # type: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]] + documents, # type: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]] **kwargs # type: Any ): # type: (...) -> List[Union[RecognizePiiEntitiesResult, DocumentError]] @@ -232,11 +236,12 @@ def recognize_pii_entities( # type: ignore See https://docs.microsoft.com/azure/cognitive-services/text-analytics/overview#data-limits for document length limits, maximum batch size, and supported text encoding. - :param inputs: The set of documents to process as part of this batch. + :param documents: The set of documents to process as part of this batch. If you wish to specify the ID and language on a per-item basis you must - use as input a list[TextDocumentInput] or a list of dict representations of - TextDocumentInput, like `{"id": "1", "language": "en", "text": "hello world"}`. - :type inputs: + use as input a list[:class:`~azure.ai.textanalytics.TextDocumentInput`] or a list of + dict representations of :class:`~azure.ai.textanalytics.TextDocumentInput`, like + `{"id": "1", "language": "en", "text": "hello world"}`. + :type documents: list[str] or list[~azure.ai.textanalytics.TextDocumentInput] :keyword str language: The 2 letter ISO 639-1 representation of language for the entire batch. For example, use "en" for English; "es" for Spanish etc. @@ -247,8 +252,9 @@ def recognize_pii_entities( # type: ignore be used for scoring, e.g. "latest", "2019-10-01". If a model-version is not specified, the API will default to the latest, non-preview version. :keyword bool show_stats: If set to true, response will contain document level statistics. - :return: The combined list of RecognizePiiEntitiesResults and DocumentErrors in the order - the original documents were passed in. + :return: The combined list of :class:`~azure.ai.textanalytics.RecognizePiiEntitiesResult` and + :class:`~azure.ai.textanalytics.DocumentError` in the order the original documents were + passed in. :rtype: list[~azure.ai.textanalytics.RecognizePiiEntitiesResult, ~azure.ai.textanalytics.DocumentError] :raises ~azure.core.exceptions.HttpResponseError: @@ -264,7 +270,7 @@ def recognize_pii_entities( # type: ignore """ language_arg = kwargs.pop("language", None) language = language_arg if language_arg is not None else self._default_language - docs = _validate_batch_input(inputs, "language", language) + docs = _validate_batch_input(documents, "language", language) model_version = kwargs.pop("model_version", None) show_stats = kwargs.pop("show_stats", False) try: @@ -281,7 +287,7 @@ def recognize_pii_entities( # type: ignore @distributed_trace def recognize_linked_entities( # type: ignore self, - inputs, # type: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]] + documents, # type: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]] **kwargs # type: Any ): # type: (...) -> List[Union[RecognizeLinkedEntitiesResult, DocumentError]] @@ -295,11 +301,12 @@ def recognize_linked_entities( # type: ignore See https://docs.microsoft.com/azure/cognitive-services/text-analytics/overview#data-limits for document length limits, maximum batch size, and supported text encoding. - :param inputs: The set of documents to process as part of this batch. + :param documents: The set of documents to process as part of this batch. If you wish to specify the ID and language on a per-item basis you must - use as input a list[TextDocumentInput] or a list of dict representations of - TextDocumentInput, like `{"id": "1", "language": "en", "text": "hello world"}`. - :type inputs: + use as input a list[:class:`~azure.ai.textanalytics.TextDocumentInput`] or a list of + dict representations of :class:`~azure.ai.textanalytics.TextDocumentInput`, like + `{"id": "1", "language": "en", "text": "hello world"}`. + :type documents: list[str] or list[~azure.ai.textanalytics.TextDocumentInput] :keyword str language: The 2 letter ISO 639-1 representation of language for the entire batch. For example, use "en" for English; "es" for Spanish etc. @@ -310,8 +317,9 @@ def recognize_linked_entities( # type: ignore be used for scoring, e.g. "latest", "2019-10-01". If a model-version is not specified, the API will default to the latest, non-preview version. :keyword bool show_stats: If set to true, response will contain document level statistics. - :return: The combined list of RecognizeLinkedEntitiesResults and DocumentErrors in the order - the original documents were passed in. + :return: The combined list of :class:`~azure.ai.textanalytics.RecognizeLinkedEntitiesResult` + and :class:`~azure.ai.textanalytics.DocumentError` in the order the original documents + were passed in. :rtype: list[~azure.ai.textanalytics.RecognizeLinkedEntitiesResult, ~azure.ai.textanalytics.DocumentError] :raises ~azure.core.exceptions.HttpResponseError: @@ -327,7 +335,7 @@ def recognize_linked_entities( # type: ignore """ language_arg = kwargs.pop("language", None) language = language_arg if language_arg is not None else self._default_language - docs = _validate_batch_input(inputs, "language", language) + docs = _validate_batch_input(documents, "language", language) model_version = kwargs.pop("model_version", None) show_stats = kwargs.pop("show_stats", False) try: @@ -344,7 +352,7 @@ def recognize_linked_entities( # type: ignore @distributed_trace def extract_key_phrases( # type: ignore self, - inputs, # type: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]] + documents, # type: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]] **kwargs # type: Any ): # type: (...) -> List[Union[ExtractKeyPhrasesResult, DocumentError]] @@ -358,11 +366,12 @@ def extract_key_phrases( # type: ignore See https://docs.microsoft.com/azure/cognitive-services/text-analytics/overview#data-limits for document length limits, maximum batch size, and supported text encoding. - :param inputs: The set of documents to process as part of this batch. + :param documents: The set of documents to process as part of this batch. If you wish to specify the ID and language on a per-item basis you must - use as input a list[TextDocumentInput] or a list of dict representations of - TextDocumentInput, like `{"id": "1", "language": "en", "text": "hello world"}`. - :type inputs: + use as input a list[:class:`~azure.ai.textanalytics.TextDocumentInput`] or a list of + dict representations of :class:`~azure.ai.textanalytics.TextDocumentInput`, like + `{"id": "1", "language": "en", "text": "hello world"}`. + :type documents: list[str] or list[~azure.ai.textanalytics.TextDocumentInput] :keyword str language: The 2 letter ISO 639-1 representation of language for the entire batch. For example, use "en" for English; "es" for Spanish etc. @@ -373,8 +382,9 @@ def extract_key_phrases( # type: ignore be used for scoring, e.g. "latest", "2019-10-01". If a model-version is not specified, the API will default to the latest, non-preview version. :keyword bool show_stats: If set to true, response will contain document level statistics. - :return: The combined list of ExtractKeyPhrasesResults and DocumentErrors in the order - the original documents were passed in. + :return: The combined list of :class:`~azure.ai.textanalytics.ExtractKeyPhrasesResult` and + :class:`~azure.ai.textanalytics.DocumentError` in the order the original documents were + passed in. :rtype: list[~azure.ai.textanalytics.ExtractKeyPhrasesResult, ~azure.ai.textanalytics.DocumentError] :raises ~azure.core.exceptions.HttpResponseError: @@ -390,7 +400,7 @@ def extract_key_phrases( # type: ignore """ language_arg = kwargs.pop("language", None) language = language_arg if language_arg is not None else self._default_language - docs = _validate_batch_input(inputs, "language", language) + docs = _validate_batch_input(documents, "language", language) model_version = kwargs.pop("model_version", None) show_stats = kwargs.pop("show_stats", False) try: @@ -407,7 +417,7 @@ def extract_key_phrases( # type: ignore @distributed_trace def analyze_sentiment( # type: ignore self, - inputs, # type: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]] + documents, # type: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]] **kwargs # type: Any ): # type: (...) -> List[Union[AnalyzeSentimentResult, DocumentError]] @@ -420,11 +430,12 @@ def analyze_sentiment( # type: ignore See https://docs.microsoft.com/azure/cognitive-services/text-analytics/overview#data-limits for document length limits, maximum batch size, and supported text encoding. - :param inputs: The set of documents to process as part of this batch. + :param documents: The set of documents to process as part of this batch. If you wish to specify the ID and language on a per-item basis you must - use as input a list[TextDocumentInput] or a list of dict representations of - TextDocumentInput, like `{"id": "1", "language": "en", "text": "hello world"}`. - :type inputs: + use as input a list[:class:`~azure.ai.textanalytics.TextDocumentInput`] or a list of + dict representations of :class:`~azure.ai.textanalytics.TextDocumentInput`, like + `{"id": "1", "language": "en", "text": "hello world"}`. + :type documents: list[str] or list[~azure.ai.textanalytics.TextDocumentInput] :keyword str language: The 2 letter ISO 639-1 representation of language for the entire batch. For example, use "en" for English; "es" for Spanish etc. @@ -435,8 +446,9 @@ def analyze_sentiment( # type: ignore be used for scoring, e.g. "latest", "2019-10-01". If a model-version is not specified, the API will default to the latest, non-preview version. :keyword bool show_stats: If set to true, response will contain document level statistics. - :return: The combined list of AnalyzeSentimentResults and DocumentErrors in the order - the original documents were passed in. + :return: The combined list of :class:`~azure.ai.textanalytics.AnalyzeSentimentResult` and + :class:`~azure.ai.textanalytics.DocumentError` in the order the original documents were + passed in. :rtype: list[~azure.ai.textanalytics.AnalyzeSentimentResult, ~azure.ai.textanalytics.DocumentError] :raises ~azure.core.exceptions.HttpResponseError: @@ -452,7 +464,7 @@ def analyze_sentiment( # type: ignore """ language_arg = kwargs.pop("language", None) language = language_arg if language_arg is not None else self._default_language - docs = _validate_batch_input(inputs, "language", language) + docs = _validate_batch_input(documents, "language", language) model_version = kwargs.pop("model_version", None) show_stats = kwargs.pop("show_stats", False) try: diff --git a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_version.py b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_version.py index 91bd4d57a0ac..aafed48d4261 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_version.py +++ b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_version.py @@ -4,4 +4,4 @@ # Licensed under the MIT License. # ------------------------------------ -VERSION = "1.0.0b3" +VERSION = "1.0.0b4" diff --git a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/aio/_text_analytics_client_async.py b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/aio/_text_analytics_client_async.py index 19f8749ef163..126faae346a3 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/aio/_text_analytics_client_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/aio/_text_analytics_client_async.py @@ -58,9 +58,9 @@ class TextAnalyticsClient(AsyncTextAnalyticsClientBase): :param credential: Credentials needed for the client to connect to Azure. This can be the an instance of TextAnalyticsApiKeyCredential if using a cognitive services/text analytics API key or a token credential - from azure.identity. - :type credential: ~azure.ai.textanalytics.TextAnalyticsApiKeyCredential - or ~azure.core.credentials.TokenCredential + from :mod:`azure.identity`. + :type credential: :class:`~azure.ai.textanalytics.TextAnalyticsApiKeyCredential` + or :class:`~azure.core.credentials_async.AsyncTokenCredential` :keyword str default_country_hint: Sets the default country_hint to use for all operations. Defaults to "US". If you don't want to use a country hint, pass the string "none". :keyword str default_language: Sets the default language to use for all operations. @@ -99,7 +99,7 @@ def __init__( # type: ignore @distributed_trace_async async def detect_language( # type: ignore self, - inputs: Union[List[str], List[DetectLanguageInput], List[Dict[str, str]]], + documents: Union[List[str], List[DetectLanguageInput], List[Dict[str, str]]], **kwargs: Any ) -> List[Union[DetectLanguageResult, DocumentError]]: """Detects Language for a batch of documents. @@ -111,11 +111,12 @@ async def detect_language( # type: ignore See https://docs.microsoft.com/azure/cognitive-services/text-analytics/overview#data-limits for document length limits, maximum batch size, and supported text encoding. - :param inputs: The set of documents to process as part of this batch. + :param documents: The set of documents to process as part of this batch. If you wish to specify the ID and country_hint on a per-item basis you must - use as input a list[DetectLanguageInput] or a list of dict representations of - DetectLanguageInput, like `{"id": "1", "country_hint": "us", "text": "hello world"}`. - :type inputs: + use as input a list[:class:`~azure.ai.textanalytics.DetectLanguageInput`] or a list of + dict representations of :class:`~azure.ai.textanalytics.DetectLanguageInput`, like + `{"id": "1", "country_hint": "us", "text": "hello world"}`. + :type documents: list[str] or list[~azure.ai.textanalytics.DetectLanguageInput] :keyword str country_hint: A country hint for the entire batch. Accepts two letter country codes specified by ISO 3166-1 alpha-2. Per-document @@ -126,8 +127,9 @@ async def detect_language( # type: ignore is not specified, the API will default to the latest, non-preview version. :keyword bool show_stats: If set to true, response will contain document level statistics. - :return: The combined list of DetectLanguageResults and DocumentErrors in the order - the original documents were passed in. + :return: The combined list of :class:`~azure.ai.textanalytics.DetectLanguageResult` + and :class:`~azure.ai.textanalytics.DocumentError` in the order the original documents + were passed in. :rtype: list[~azure.ai.textanalytics.DetectLanguageResult, ~azure.ai.textanalytics.DocumentError] :raises ~azure.core.exceptions.HttpResponseError: @@ -143,7 +145,7 @@ async def detect_language( # type: ignore """ country_hint_arg = kwargs.pop("country_hint", None) country_hint = country_hint_arg if country_hint_arg is not None else self._default_country_hint - docs = _validate_batch_input(inputs, "country_hint", country_hint) + docs = _validate_batch_input(documents, "country_hint", country_hint) model_version = kwargs.pop("model_version", None) show_stats = kwargs.pop("show_stats", False) try: @@ -160,7 +162,7 @@ async def detect_language( # type: ignore @distributed_trace_async async def recognize_entities( # type: ignore self, - inputs: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]], + documents: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]], **kwargs: Any ) -> List[Union[RecognizeEntitiesResult, DocumentError]]: """Entity Recognition for a batch of documents. @@ -172,11 +174,12 @@ async def recognize_entities( # type: ignore See https://docs.microsoft.com/azure/cognitive-services/text-analytics/overview#data-limits for document length limits, maximum batch size, and supported text encoding. - :param inputs: The set of documents to process as part of this batch. + :param documents: The set of documents to process as part of this batch. If you wish to specify the ID and language on a per-item basis you must - use as input a list[TextDocumentInput] or a list of dict representations of - TextDocumentInput, like `{"id": "1", "language": "en", "text": "hello world"}`. - :type inputs: + use as input a list[:class:`~azure.ai.textanalytics.TextDocumentInput`] or a list of + dict representations of :class:`~azure.ai.textanalytics.TextDocumentInput`, like + `{"id": "1", "language": "en", "text": "hello world"}`. + :type documents: list[str] or list[~azure.ai.textanalytics.TextDocumentInput] :keyword str language: The 2 letter ISO 639-1 representation of language for the entire batch. For example, use "en" for English; "es" for Spanish etc. @@ -187,8 +190,9 @@ async def recognize_entities( # type: ignore be used for scoring, e.g. "latest", "2019-10-01". If a model-version is not specified, the API will default to the latest, non-preview version. :keyword bool show_stats: If set to true, response will contain document level statistics. - :return: The combined list of RecognizeEntitiesResults and DocumentErrors in the order - the original documents were passed in. + :return: The combined list of :class:`~azure.ai.textanalytics.RecognizeEntitiesResult` and + :class:`~azure.ai.textanalytics.DocumentError` in the order the original documents were + passed in. :rtype: list[~azure.ai.textanalytics.RecognizeEntitiesResult, ~azure.ai.textanalytics.DocumentError] :raises ~azure.core.exceptions.HttpResponseError: @@ -204,7 +208,7 @@ async def recognize_entities( # type: ignore """ language_arg = kwargs.pop("language", None) language = language_arg if language_arg is not None else self._default_language - docs = _validate_batch_input(inputs, "language", language) + docs = _validate_batch_input(documents, "language", language) model_version = kwargs.pop("model_version", None) show_stats = kwargs.pop("show_stats", False) try: @@ -221,7 +225,7 @@ async def recognize_entities( # type: ignore @distributed_trace_async async def recognize_pii_entities( # type: ignore self, - inputs: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]], + documents: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]], **kwargs: Any ) -> List[Union[RecognizePiiEntitiesResult, DocumentError]]: """Recognize entities containing personal information for a batch of documents. @@ -233,11 +237,12 @@ async def recognize_pii_entities( # type: ignore See https://docs.microsoft.com/azure/cognitive-services/text-analytics/overview#data-limits for document length limits, maximum batch size, and supported text encoding. - :param inputs: The set of documents to process as part of this batch. + :param documents: The set of documents to process as part of this batch. If you wish to specify the ID and language on a per-item basis you must - use as input a list[TextDocumentInput] or a list of dict representations of - TextDocumentInput, like `{"id": "1", "language": "en", "text": "hello world"}`. - :type inputs: + use as input a list[:class:`~azure.ai.textanalytics.TextDocumentInput`] or a list of + dict representations of :class:`~azure.ai.textanalytics.TextDocumentInput`, like + `{"id": "1", "language": "en", "text": "hello world"}`. + :type documents: list[str] or list[~azure.ai.textanalytics.TextDocumentInput] :keyword str language: The 2 letter ISO 639-1 representation of language for the entire batch. For example, use "en" for English; "es" for Spanish etc. @@ -248,8 +253,9 @@ async def recognize_pii_entities( # type: ignore be used for scoring, e.g. "latest", "2019-10-01". If a model-version is not specified, the API will default to the latest, non-preview version. :keyword bool show_stats: If set to true, response will contain document level statistics. - :return: The combined list of RecognizePiiEntitiesResults and DocumentErrors in the order - the original documents were passed in. + :return: The combined list of :class:`~azure.ai.textanalytics.RecognizePiiEntitiesResult` + and :class:`~azure.ai.textanalytics.DocumentError` in the order the original documents + were passed in. :rtype: list[~azure.ai.textanalytics.RecognizePiiEntitiesResult, ~azure.ai.textanalytics.DocumentError] :raises ~azure.core.exceptions.HttpResponseError: @@ -265,7 +271,7 @@ async def recognize_pii_entities( # type: ignore """ language_arg = kwargs.pop("language", None) language = language_arg if language_arg is not None else self._default_language - docs = _validate_batch_input(inputs, "language", language) + docs = _validate_batch_input(documents, "language", language) model_version = kwargs.pop("model_version", None) show_stats = kwargs.pop("show_stats", False) try: @@ -282,7 +288,7 @@ async def recognize_pii_entities( # type: ignore @distributed_trace_async async def recognize_linked_entities( # type: ignore self, - inputs: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]], + documents: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]], **kwargs: Any ) -> List[Union[RecognizeLinkedEntitiesResult, DocumentError]]: """Recognize linked entities from a well-known knowledge base for a batch of documents. @@ -295,11 +301,12 @@ async def recognize_linked_entities( # type: ignore See https://docs.microsoft.com/azure/cognitive-services/text-analytics/overview#data-limits for document length limits, maximum batch size, and supported text encoding. - :param inputs: The set of documents to process as part of this batch. + :param documents: The set of documents to process as part of this batch. If you wish to specify the ID and language on a per-item basis you must - use as input a list[TextDocumentInput] or a list of dict representations of - TextDocumentInput, like `{"id": "1", "language": "en", "text": "hello world"}`. - :type inputs: + use as input a list[:class:`~azure.ai.textanalytics.TextDocumentInput`] or a list of + dict representations of :class:`~azure.ai.textanalytics.TextDocumentInput`, like + `{"id": "1", "language": "en", "text": "hello world"}`. + :type documents: list[str] or list[~azure.ai.textanalytics.TextDocumentInput] :keyword str language: The 2 letter ISO 639-1 representation of language for the entire batch. For example, use "en" for English; "es" for Spanish etc. @@ -310,8 +317,9 @@ async def recognize_linked_entities( # type: ignore be used for scoring, e.g. "latest", "2019-10-01". If a model-version is not specified, the API will default to the latest, non-preview version. :keyword bool show_stats: If set to true, response will contain document level statistics. - :return: The combined list of RecognizeLinkedEntitiesResults and DocumentErrors in the order - the original documents were passed in. + :return: The combined list of :class:`~azure.ai.textanalytics.RecognizeLinkedEntitiesResult` + and :class:`~azure.ai.textanalytics.DocumentError` in the order the original documents + were passed in. :rtype: list[~azure.ai.textanalytics.RecognizeLinkedEntitiesResult, ~azure.ai.textanalytics.DocumentError] :raises ~azure.core.exceptions.HttpResponseError: @@ -327,7 +335,7 @@ async def recognize_linked_entities( # type: ignore """ language_arg = kwargs.pop("language", None) language = language_arg if language_arg is not None else self._default_language - docs = _validate_batch_input(inputs, "language", language) + docs = _validate_batch_input(documents, "language", language) model_version = kwargs.pop("model_version", None) show_stats = kwargs.pop("show_stats", False) try: @@ -344,7 +352,7 @@ async def recognize_linked_entities( # type: ignore @distributed_trace_async async def extract_key_phrases( # type: ignore self, - inputs: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]], + documents: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]], **kwargs: Any ) -> List[Union[ExtractKeyPhrasesResult, DocumentError]]: """Extract Key Phrases from a batch of documents. @@ -357,11 +365,12 @@ async def extract_key_phrases( # type: ignore See https://docs.microsoft.com/azure/cognitive-services/text-analytics/overview#data-limits for document length limits, maximum batch size, and supported text encoding. - :param inputs: The set of documents to process as part of this batch. + :param documents: The set of documents to process as part of this batch. If you wish to specify the ID and language on a per-item basis you must - use as input a list[TextDocumentInput] or a list of dict representations of - TextDocumentInput, like `{"id": "1", "language": "en", "text": "hello world"}`. - :type inputs: + use as input a list[:class:`~azure.ai.textanalytics.TextDocumentInput`] or a list of + dict representations of :class:`~azure.ai.textanalytics.TextDocumentInput`, like + `{"id": "1", "language": "en", "text": "hello world"}`. + :type documents: list[str] or list[~azure.ai.textanalytics.TextDocumentInput] :keyword str language: The 2 letter ISO 639-1 representation of language for the entire batch. For example, use "en" for English; "es" for Spanish etc. @@ -372,8 +381,9 @@ async def extract_key_phrases( # type: ignore be used for scoring, e.g. "latest", "2019-10-01". If a model-version is not specified, the API will default to the latest, non-preview version. :keyword bool show_stats: If set to true, response will contain document level statistics. - :return: The combined list of ExtractKeyPhrasesResults and DocumentErrors in the order - the original documents were passed in. + :return: The combined list of :class:`~azure.ai.textanalytics.ExtractKeyPhrasesResult` and + :class:`~azure.ai.textanalytics.DocumentError` in the order the original documents were + passed in. :rtype: list[~azure.ai.textanalytics.ExtractKeyPhrasesResult, ~azure.ai.textanalytics.DocumentError] :raises ~azure.core.exceptions.HttpResponseError: @@ -389,7 +399,7 @@ async def extract_key_phrases( # type: ignore """ language_arg = kwargs.pop("language", None) language = language_arg if language_arg is not None else self._default_language - docs = _validate_batch_input(inputs, "language", language) + docs = _validate_batch_input(documents, "language", language) model_version = kwargs.pop("model_version", None) show_stats = kwargs.pop("show_stats", False) try: @@ -406,7 +416,7 @@ async def extract_key_phrases( # type: ignore @distributed_trace_async async def analyze_sentiment( # type: ignore self, - inputs: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]], + documents: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]], **kwargs: Any ) -> List[Union[AnalyzeSentimentResult, DocumentError]]: """Analyze sentiment for a batch of documents. @@ -418,11 +428,12 @@ async def analyze_sentiment( # type: ignore See https://docs.microsoft.com/azure/cognitive-services/text-analytics/overview#data-limits for document length limits, maximum batch size, and supported text encoding. - :param inputs: The set of documents to process as part of this batch. + :param documents: The set of documents to process as part of this batch. If you wish to specify the ID and language on a per-item basis you must - use as input a list[TextDocumentInput] or a list of dict representations of - TextDocumentInput, like `{"id": "1", "language": "en", "text": "hello world"}`. - :type inputs: + use as input a list[:class:`~azure.ai.textanalytics.TextDocumentInput`] or a list of + dict representations of :class:`~azure.ai.textanalytics.TextDocumentInput`, like + `{"id": "1", "language": "en", "text": "hello world"}`. + :type documents: list[str] or list[~azure.ai.textanalytics.TextDocumentInput] :keyword str language: The 2 letter ISO 639-1 representation of language for the entire batch. For example, use "en" for English; "es" for Spanish etc. @@ -433,8 +444,9 @@ async def analyze_sentiment( # type: ignore be used for scoring, e.g. "latest", "2019-10-01". If a model-version is not specified, the API will default to the latest, non-preview version. :keyword bool show_stats: If set to true, response will contain document level statistics. - :return: The combined list of AnalyzeSentimentResults and DocumentErrors in the order - the original documents were passed in. + :return: The combined list of :class:`~azure.ai.textanalytics.AnalyzeSentimentResult` and + :class:`~azure.ai.textanalytics.DocumentError` in the order the original documents were + passed in. :rtype: list[~azure.ai.textanalytics.AnalyzeSentimentResult, ~azure.ai.textanalytics.DocumentError] :raises ~azure.core.exceptions.HttpResponseError: @@ -450,7 +462,7 @@ async def analyze_sentiment( # type: ignore """ language_arg = kwargs.pop("language", None) language = language_arg if language_arg is not None else self._default_language - docs = _validate_batch_input(inputs, "language", language) + docs = _validate_batch_input(documents, "language", language) model_version = kwargs.pop("model_version", None) show_stats = kwargs.pop("show_stats", False) try: diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/README.md b/sdk/textanalytics/azure-ai-textanalytics/samples/README.md index 3b675e31efa0..5fe2f816e3a5 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/README.md +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/README.md @@ -1,41 +1,49 @@ --- -topic: sample +page_type: sample languages: - python products: - azure - azure-ai-textanalytics +urlFragment: textanalytics-samples --- # Samples for Azure Text Analytics client library for Python These code samples show common scenario operations with the Azure Text Analytics client library. -The async versions of the samples (the python sample files appended with `_async`) show asynchronous operations -with Text Analytics and require Python 3.5 or later. +The async versions of the samples require Python 3.5 or later. -Authenticate the client with a Cognitive Services/Text Analytics subscription key or a token credential from [azure-identity](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/identity/azure-identity): -* [sample_authentication.py](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_authentication.py) ([async version](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_authentication_async.py)) +You can authenticate your client with a Cognitive Services/Text Analytics API key or through Azure Active Directory with a token credential from [azure-identity][azure_identity]: +* See [sample_authentication.py][sample_authentication] and [sample_authentication_async.py][sample_authentication_async] for how to authenticate in the above cases. -In a batch of documents: -* Detect language: [sample_detect_language.py](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_detect_language.py) ([async version](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_detect_language_async.py)) -* Recognize entities: [sample_recognize_entities.py](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_entities.py) ([async version](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_entities_async.py)) -* Recognize linked entities: [sample_recognize_linked_entities.py](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_linked_entities.py) ([async version](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_linked_entities_async.py)) -* Recognize personally identifiable information: [sample_recognize_pii_entities.py](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_pii_entities.py) ([async version](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_pii_entities_async.py)) -* Extract key phrases: [sample_extract_key_phrases.py](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_extract_key_phrases.py) ([async version](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_extract_key_phrases_async.py)) -* Analyze sentiment: [sample_analyze_sentiment.py](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_analyze_sentiment.py) ([async version](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_analyze_sentiment_async.py)) +These sample programs show common scenarios for the Text Analytics client's offerings. + +|**File Name**|**Description**| +|----------------|-------------| +|[sample_detect_language.py][detect_language] and [sample_detect_language_async.py][detect_language_async]|Detect language in documents| +|[sample_recognize_entities.py][recognize_entities] and [sample_recognize_entities_async.py][recognize_entities_async]|Recognize named entities in documents| +|[sample_recognize_linked_entities.py][recognize_linked_entities] and [sample_recognize_linked_entities_async.py][recognize_linked_entities_async]|Recognize linked entities in documents| +|[sample_recognize_pii_entities.py][recognize_pii_entities] and [sample_recognize_pii_entities_async.py][recognize_pii_entities_async]|Recognize personally identifiable information in documents| +|[sample_extract_key_phrases.py][extract_key_phrases] and [sample_extract_key_phrases_async.py][extract_key_phrases_async]|Extract key phrases from documents| +|[sample_analyze_sentiment.py][analyze_sentiment] and [sample_analyze_sentiment_async.py][analyze_sentiment_async]|Analyze the sentiment of documents| +|[sample_alternative_document_input.py][sample_alternative_document_input] and [sample_alternative_document_input_async.py][sample_alternative_document_input_async]|Pass documents to an endpoint using dicts| ## Prerequisites * Python 2.7, or 3.5 or later is required to use this package (3.5 or later if using asyncio) -* You must have an [Azure subscription](https://azure.microsoft.com/free/) and an -[Azure Text Analytics account](https://docs.microsoft.com/azure/cognitive-services/cognitive-services-apis-create-account?tabs=singleservice%2Cwindows) to run these samples. +* You must have an [Azure subscription][azure_subscription] and an +[Azure Text Analytics account][azure_text_analytics_account] to run these samples. ## Setup -1. Install the Azure Text Analytics client library for Python with [pip](https://pypi.org/project/pip/): +1. Install the Azure Text Analytics client library for Python with [pip][pip]: ```bash pip install azure-ai-textanalytics --pre ``` +* If authenticating with Azure Active Directory, make sure you have [azure-identity][azure_identity_pip] installed: + ```bash + pip install azure-identity + ``` 2. Clone or download this sample repository 3. Open the sample folder in Visual Studio Code or your IDE of choice. @@ -48,5 +56,34 @@ pip install azure-ai-textanalytics --pre ## Next steps -Check out the [API reference documentation](https://westus.dev.cognitive.microsoft.com/docs/services/TextAnalytics-v3-0-Preview-1/operations/Languages) to learn more about +Check out the [API reference documentation][api_reference_documentation] to learn more about what you can do with the Azure Text Analytics client library. + +|**Advanced Sample File Name**|**Description**| +|----------------|-------------| +|[sample_get_detailed_diagnostics_information.py][get_detailed_diagnostics_information] and [sample_get_detailed_diagnostics_information_async.py][get_detailed_diagnostics_information_async]|Get the request batch statistics, model version, and raw response through a callback| + +[azure_identity]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/identity/azure-identity +[sample_authentication]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_authentication.py +[sample_authentication_async]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_authentication_async.py +[detect_language]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_detect_language.py +[detect_language_async]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_detect_language_async.py +[recognize_entities]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_entities.py +[recognize_entities_async]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_entities_async.py +[recognize_linked_entities]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_linked_entities.py +[recognize_linked_entities_async]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_linked_entities_async.py +[recognize_pii_entities]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_pii_entities.py +[recognize_pii_entities_async]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_pii_entities_async.py +[extract_key_phrases]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_extract_key_phrases.py +[extract_key_phrases_async]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_extract_key_phrases_async.py +[analyze_sentiment]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_analyze_sentiment.py +[analyze_sentiment_async]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_analyze_sentiment_async.py +[get_detailed_diagnostics_information]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_get_detailed_diagnostics_information.py +[get_detailed_diagnostics_information_async]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_get_detailed_diagnostics_information_async.py +[sample_alternative_document_input]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/sample_alternative_document_input.py +[sample_alternative_document_input_async]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_alternative_document_input_async.py +[pip]: https://pypi.org/project/pip/ +[azure_subscription]: https://azure.microsoft.com/free/ +[azure_text_analytics_account]: https://docs.microsoft.com/azure/cognitive-services/cognitive-services-apis-create-account?tabs=singleservice%2Cwindows +[azure_identity_pip]: https://pypi.org/project/azure-identity/ +[api_reference_documentation]: https://aka.ms/azsdk-python-textanalytics-ref-docs \ No newline at end of file diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_alternative_document_input_async.py b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_alternative_document_input_async.py new file mode 100644 index 000000000000..7bfb10b33ef1 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_alternative_document_input_async.py @@ -0,0 +1,66 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_alternative_document_input_async.py + +DESCRIPTION: + This sample shows an alternative way to pass in the input documents. + Here we specify our own IDs and the text language along with the text. + +USAGE: + python sample_alternative_document_input_async.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key +""" + +import os +import asyncio + + +class AlternativeDocumentInputSampleAsync(object): + + endpoint = os.getenv("AZURE_TEXT_ANALYTICS_ENDPOINT") + key = os.getenv("AZURE_TEXT_ANALYTICS_KEY") + + async def alternative_document_input(self): + from azure.ai.textanalytics.aio import TextAnalyticsClient + from azure.ai.textanalytics import TextAnalyticsApiKeyCredential + text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) + + documents = [ + {"id": "0", "language": "en", "text": "I had the best day of my life."}, + {"id": "1", "language": "en", + "text": "This was a waste of my time. The speaker put me to sleep."}, + {"id": "2", "language": "es", "text": "No tengo dinero ni nada que dar..."}, + {"id": "3", "language": "fr", + "text": "L'hôtel n'était pas très confortable. L'éclairage était trop sombre."} + ] + async with text_analytics_client: + result = await text_analytics_client.detect_language(documents) + + for idx, doc in enumerate(result): + if not doc.is_error: + print("Document text: {}".format(documents[idx])) + print("Language detected: {}".format(doc.primary_language.name)) + print("ISO6391 name: {}".format(doc.primary_language.iso6391_name)) + print("Confidence score: {}\n".format(doc.primary_language.score)) + if doc.is_error: + print(doc.id, doc.error) + + +async def main(): + sample = AlternativeDocumentInputSampleAsync() + await sample.alternative_document_input() + + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(main()) diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_analyze_sentiment_async.py b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_analyze_sentiment_async.py index 3daac5758bb7..8d901b861319 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_analyze_sentiment_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_analyze_sentiment_async.py @@ -10,15 +10,15 @@ FILE: sample_analyze_sentiment_async.py DESCRIPTION: - This sample demonstrates how to analyze sentiment in a batch of documents. + This sample demonstrates how to analyze sentiment in documents. An overall and per-sentence sentiment is returned. USAGE: python sample_analyze_sentiment_async.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics subscription key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key """ import os @@ -51,63 +51,24 @@ async def analyze_sentiment_async(self): print("Document text: {}".format(documents[idx])) print("Overall sentiment: {}".format(doc.sentiment)) # [END batch_analyze_sentiment_async] - print("Overall confidence scores: positive={0:.3f}; neutral={1:.3f}; negative={2:.3f} \n".format( + print("Overall confidence scores: positive={}; neutral={}; negative={} \n".format( doc.confidence_scores.positive, doc.confidence_scores.neutral, doc.confidence_scores.negative, )) for idx, sentence in enumerate(doc.sentences): print("Sentence {} sentiment: {}".format(idx+1, sentence.sentiment)) - print("Sentence confidence scores: positive={0:.3f}; neutral={1:.3f}; negative={2:.3f}".format( + print("Sentence confidence scores: positive={}; neutral={}; negative={}".format( sentence.confidence_scores.positive, sentence.confidence_scores.neutral, sentence.confidence_scores.negative, )) - print("Offset: {}".format(sentence.grapheme_offset)) - print("Length: {}\n".format(sentence.grapheme_length)) print("------------------------------------") - async def alternative_scenario_analyze_sentiment_async(self): - """This sample demonstrates how to retrieve batch statistics, the - model version used, and the raw response returned from the service. - - It additionally shows an alternative way to pass in the input documents - using a list[TextDocumentInput] and supplying your own IDs and language hints along - with the text. - """ - from azure.ai.textanalytics.aio import TextAnalyticsClient - from azure.ai.textanalytics import TextAnalyticsApiKeyCredential - text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) - - documents = [ - {"id": "0", "language": "en", "text": "I had the best day of my life."}, - {"id": "1", "language": "en", - "text": "This was a waste of my time. The speaker put me to sleep."}, - {"id": "2", "language": "es", "text": "No tengo dinero ni nada que dar..."}, - {"id": "3", "language": "fr", - "text": "L'hôtel n'était pas très confortable. L'éclairage était trop sombre."} - ] - - extras = [] - - def callback(resp): - extras.append(resp.statistics) - extras.append(resp.model_version) - extras.append(resp.raw_response) - - async with text_analytics_client: - result = await text_analytics_client.analyze_sentiment( - documents, - show_stats=True, - model_version="latest", - raw_response_hook=callback - ) - async def main(): sample = AnalyzeSentimentSampleAsync() await sample.analyze_sentiment_async() - await sample.alternative_scenario_analyze_sentiment_async() if __name__ == '__main__': diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_authentication_async.py b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_authentication_async.py index 28e833cc6c74..2983d4615f57 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_authentication_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_authentication_async.py @@ -10,11 +10,11 @@ FILE: sample_authentication_async.py DESCRIPTION: - This sample demonstrates how to authenticate with the text analytics service. + This sample demonstrates how to authenticate to the Text Analytics service. There are two supported methods of authentication: - 1) Use a cognitive services/text analytics API key with TextAnalyticsApiKeyCredential - 2) Use a token credential to authenticate with Azure Active Directory + 1) Use a Cognitive Services/Text Analytics API key with TextAnalyticsApiKeyCredential + 2) Use a token credential from azure-identity to authenticate with Azure Active Directory See more details about authentication here: https://docs.microsoft.com/azure/cognitive-services/authentication @@ -23,8 +23,8 @@ python sample_authentication_async.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your cognitive services/text analytics API key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Cognitive Services/Text Analytics API key 3) AZURE_CLIENT_ID - the client ID of your active directory application. 4) AZURE_TENANT_ID - the tenant ID of your active directory application. 5) AZURE_CLIENT_SECRET - the secret of your active directory application. @@ -37,6 +37,7 @@ class AuthenticationSampleAsync(object): async def authentication_with_api_key_credential_async(self): + print("\n.. authentication_with_api_key_credential_async") # [START create_ta_client_with_key_async] from azure.ai.textanalytics.aio import TextAnalyticsClient from azure.ai.textanalytics import TextAnalyticsApiKeyCredential @@ -54,9 +55,10 @@ async def authentication_with_api_key_credential_async(self): print("Confidence score: {}".format(result[0].primary_language.score)) async def authentication_with_azure_active_directory_async(self): - """DefaultAzureCredential will use the values from the environment + """DefaultAzureCredential will use the values from these environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET """ + print("\n.. authentication_with_azure_active_directory_async") # [START create_ta_client_with_aad_async] from azure.ai.textanalytics.aio import TextAnalyticsClient from azure.identity.aio import DefaultAzureCredential diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_detect_language_async.py b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_detect_language_async.py index 8ae20b0b55df..2ab43ef0530f 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_detect_language_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_detect_language_async.py @@ -17,8 +17,8 @@ python sample_detect_language_async.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics subscription key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key """ import os @@ -39,7 +39,7 @@ async def detect_language_async(self): "This document is written in English.", "Este es un document escrito en Español.", "这是一个用中文写的文件", - "Dies ist ein Dokument in englischer Sprache.", + "Dies ist ein Dokument in deutsche Sprache.", "Detta är ett dokument skrivet på engelska." ] async with text_analytics_client: @@ -55,46 +55,10 @@ async def detect_language_async(self): print(doc.id, doc.error) # [END batch_detect_language_async] - async def alternative_scenario_detect_language_async(self): - """This sample demonstrates how to retrieve batch statistics, the - model version used, and the raw response returned from the service. - - It additionally shows an alternative way to pass in the input documents - using a list[DetectLanguageInput] and supplying your own IDs and country hints along - with the text. - """ - from azure.ai.textanalytics.aio import TextAnalyticsClient - from azure.ai.textanalytics import TextAnalyticsApiKeyCredential - text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) - - documents = [ - {"id": "0", "country_hint": "US", "text": "This is a document written in English."}, - {"id": "1", "country_hint": "MX", "text": "Este es un document escrito en Español."}, - {"id": "2", "country_hint": "CN", "text": "这是一个用中文写的文件"}, - {"id": "3", "country_hint": "DE", "text": "Dies ist ein Dokument in englischer Sprache."}, - {"id": "4", "country_hint": "SE", "text": "Detta är ett dokument skrivet på engelska."} - ] - - extras = [] - - def callback(resp): - extras.append(resp.statistics) - extras.append(resp.model_version) - extras.append(resp.raw_response) - - async with text_analytics_client: - result = await text_analytics_client.detect_language( - documents, - show_stats=True, - model_version="latest", - raw_response_hook=callback - ) - async def main(): sample = DetectLanguageSampleAsync() await sample.detect_language_async() - await sample.alternative_scenario_detect_language_async() if __name__ == '__main__': diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_extract_key_phrases_async.py b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_extract_key_phrases_async.py index 33d36aa024dd..1a5330bd3e3e 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_extract_key_phrases_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_extract_key_phrases_async.py @@ -16,8 +16,8 @@ python sample_extract_key_phrases_async.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics subscription key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key """ import os @@ -50,45 +50,10 @@ async def extract_key_phrases_async(self): print(doc.id, doc.error) # [END batch_extract_key_phrases_async] - async def alternative_scenario_extract_key_phrases_async(self): - """This sample demonstrates how to retrieve batch statistics, the - model version used, and the raw response returned from the service. - - It additionally shows an alternative way to pass in the input documents - using a list[TextDocumentInput] and supplying your own IDs and language hints along - with the text. - """ - from azure.ai.textanalytics.aio import TextAnalyticsClient - from azure.ai.textanalytics import TextAnalyticsApiKeyCredential - text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) - - documents = [ - {"id": "0", "language": "en", - "text": "Redmond is a city in King County, Washington, United States, located 15 miles east of Seattle."}, - {"id": "1", "language": "en", - "text": "I need to take my cat to the veterinarian."}, - {"id": "2", "language": "en", "text": "I will travel to South America in the summer."} - ] - extras = [] - - def callback(resp): - extras.append(resp.statistics) - extras.append(resp.model_version) - extras.append(resp.raw_response) - - async with text_analytics_client: - result = await text_analytics_client.extract_key_phrases( - documents, - show_stats=True, - model_version="latest", - raw_response_hook=callback - ) - async def main(): sample = ExtractKeyPhrasesSampleAsync() await sample.extract_key_phrases_async() - await sample.alternative_scenario_extract_key_phrases_async() if __name__ == '__main__': diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_get_detailed_diagnostics_information_async.py b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_get_detailed_diagnostics_information_async.py new file mode 100644 index 000000000000..d5bff03a8f1e --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_get_detailed_diagnostics_information_async.py @@ -0,0 +1,71 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_get_detailed_diagnostics_information_async.py + +DESCRIPTION: + This sample demonstrates how to retrieve batch statistics, the + model version used, and the raw response returned from the service. + +USAGE: + python sample_get_detailed_diagnostics_information_async.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key +""" + +import os +import asyncio +import logging + +_LOGGER = logging.getLogger(__name__) + +class GetDetailedDiagnosticsInformationSampleAsync(object): + + endpoint = os.getenv("AZURE_TEXT_ANALYTICS_ENDPOINT") + key = os.getenv("AZURE_TEXT_ANALYTICS_KEY") + + async def get_detailed_diagnostics_information_async(self): + from azure.ai.textanalytics.aio import TextAnalyticsClient + from azure.ai.textanalytics import TextAnalyticsApiKeyCredential + text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) + + documents = [ + "I had the best day of my life.", + "This was a waste of my time. The speaker put me to sleep.", + "No tengo dinero ni nada que dar...", + "L'hôtel n'était pas très confortable. L'éclairage était trop sombre." + ] + + def callback(resp): + _LOGGER.info("document_count: {}".format(resp.statistics["document_count"])) + _LOGGER.info("valid_document_count: {}".format(resp.statistics["valid_document_count"])) + _LOGGER.info("erroneous_document_count: {}".format(resp.statistics["erroneous_document_count"])) + _LOGGER.info("transaction_count: {}".format(resp.statistics["transaction_count"])) + _LOGGER.info("model_version: {}".format(resp.model_version)) + _LOGGER.info("raw_response: {}".format(resp.raw_response)) + + async with text_analytics_client: + result = await text_analytics_client.analyze_sentiment( + documents, + show_stats=True, + model_version="latest", + raw_response_hook=callback + ) + + +async def main(): + sample = GetDetailedDiagnosticsInformationSampleAsync() + await sample.get_detailed_diagnostics_information_async() + + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(main()) diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_entities_async.py b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_entities_async.py index 52c6c25f9770..a8b9cd4c9159 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_entities_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_entities_async.py @@ -16,8 +16,8 @@ python sample_recognize_entities_async.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics subscription key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key """ import os @@ -49,47 +49,13 @@ async def recognize_entities_async(self): print("\nDocument text: {}".format(documents[idx])) for entity in doc.entities: print("Entity: \t", entity.text, "\tCategory: \t", entity.category, - "\tConfidence Score: \t", round(entity.score, 3)) + "\tConfidence Score: \t", entity.confidence_score) # [END batch_recognize_entities_async] - async def alternative_scenario_recognize_entities_async(self): - """This sample demonstrates how to retrieve batch statistics, the - model version used, and the raw response returned from the service. - - It additionally shows an alternative way to pass in the input documents - using a list[TextDocumentInput] and supplying your own IDs and language hints along - with the text. - """ - from azure.ai.textanalytics.aio import TextAnalyticsClient - from azure.ai.textanalytics import TextAnalyticsApiKeyCredential - text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) - - documents = [ - {"id": "0", "language": "en", "text": "Microsoft was founded by Bill Gates and Paul Allen."}, - {"id": "1", "language": "de", "text": "I had a wonderful trip to Seattle last week."}, - {"id": "2", "language": "es", "text": "I visited the Space Needle 2 times."}, - ] - - extras = [] - - def callback(resp): - extras.append(resp.statistics) - extras.append(resp.model_version) - extras.append(resp.raw_response) - - async with text_analytics_client: - result = await text_analytics_client.recognize_entities( - documents, - show_stats=True, - model_version="latest", - raw_response_hook=callback - ) - async def main(): sample = RecognizeEntitiesSampleAsync() await sample.recognize_entities_async() - await sample.alternative_scenario_recognize_entities_async() if __name__ == '__main__': diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_linked_entities_async.py b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_linked_entities_async.py index eea122ae016c..74cbc9109e4a 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_linked_entities_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_linked_entities_async.py @@ -18,8 +18,8 @@ python sample_recognize_linked_entities_async.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics subscription key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key """ import os @@ -54,50 +54,15 @@ async def recognize_linked_entities_async(self): print("Url: {}".format(entity.url)) print("Data Source: {}".format(entity.data_source)) for match in entity.matches: - print("Score: {0:.3f}".format(match.score)) - print("Offset: {}".format(match.grapheme_offset)) - print("Length: {}\n".format(match.grapheme_length)) + print("Confidence Score: {}".format(match.confidence_score)) + print("Entity as appears in request: {}".format(match.text)) print("------------------------------------------") # [END batch_recognize_linked_entities_async] - async def alternative_scenario_recognize_linked_entities_async(self): - """This sample demonstrates how to retrieve batch statistics, the - model version used, and the raw response returned from the service. - - It additionally shows an alternative way to pass in the input documents - using a list[TextDocumentInput] and supplying your own IDs and language hints along - with the text. - """ - from azure.ai.textanalytics.aio import TextAnalyticsClient - from azure.ai.textanalytics import TextAnalyticsApiKeyCredential - text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) - - documents = [ - {"id": "0", "language": "en", "text": "Microsoft moved its headquarters to Bellevue, Washington in January 1979."}, - {"id": "1", "language": "en", "text": "Steve Ballmer stepped down as CEO of Microsoft and was succeeded by Satya Nadella."}, - {"id": "2", "language": "es", "text": "Microsoft superó a Apple Inc. como la compañía más valiosa que cotiza en bolsa en el mundo."}, - ] - - extras = [] - - def callback(resp): - extras.append(resp.statistics) - extras.append(resp.model_version) - extras.append(resp.raw_response) - - async with text_analytics_client: - result = await text_analytics_client.recognize_linked_entities( - documents, - show_stats=True, - model_version="latest", - raw_response_hook=callback - ) - async def main(): sample = RecognizeLinkedEntitiesSampleAsync() await sample.recognize_linked_entities_async() - await sample.alternative_scenario_recognize_linked_entities_async() if __name__ == '__main__': loop = asyncio.get_event_loop() diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_pii_entities_async.py b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_pii_entities_async.py index 69b49804d3bc..d0d14cc7d27b 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_pii_entities_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/async_samples/sample_recognize_pii_entities_async.py @@ -16,8 +16,8 @@ python sample_recognize_pii_entities_async.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics subscription key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key """ import os @@ -50,47 +50,13 @@ async def recognize_pii_entities_async(self): for entity in doc.entities: print("Entity: {}".format(entity.text)) print("Category: {}".format(entity.category)) - print("Confidence Score: {}\n".format(entity.score)) + print("Confidence Score: {}\n".format(entity.confidence_score)) # [END batch_recognize_pii_entities_async] - async def alternative_scenario_recognize_pii_entities_async(self): - """This sample demonstrates how to retrieve batch statistics, the - model version used, and the raw response returned from the service. - - It additionally shows an alternative way to pass in the input documents - using a list[TextDocumentInput] and supplying your own IDs and language hints along - with the text. - """ - from azure.ai.textanalytics.aio import TextAnalyticsClient - from azure.ai.textanalytics import TextAnalyticsApiKeyCredential - text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) - - documents = [ - {"id": "0", "language": "en", "text": "The employee's SSN is 555-55-5555."}, - {"id": "1", "language": "en", "text": "Your ABA number - 111000025 - is the first 9 digits in the lower left hand corner of your personal check."}, - {"id": "2", "language": "en", "text": "Is 998.214.865-68 your Brazilian CPF number?"} - ] - - extras = [] - - def callback(resp): - extras.append(resp.statistics) - extras.append(resp.model_version) - extras.append(resp.raw_response) - - async with text_analytics_client: - result = await text_analytics_client.recognize_pii_entities( - documents, - show_stats=True, - model_version="latest", - raw_response_hook=callback - ) - async def main(): sample = RecognizePiiEntitiesSampleAsync() await sample.recognize_pii_entities_async() - await sample.alternative_scenario_recognize_pii_entities_async() if __name__ == '__main__': loop = asyncio.get_event_loop() diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_alternative_document_input.py b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_alternative_document_input.py new file mode 100644 index 000000000000..a64d37d0c328 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_alternative_document_input.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_alternative_document_input.py + +DESCRIPTION: + This sample shows an alternative way to pass in the input documents. + Here we specify our own IDs and the text language along with the text. + +USAGE: + python sample_alternative_document_input.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key +""" + +import os +import logging + +_LOGGER = logging.getLogger(__name__) + +class AlternativeDocumentInputSample(object): + endpoint = os.getenv("AZURE_TEXT_ANALYTICS_ENDPOINT") + key = os.getenv("AZURE_TEXT_ANALYTICS_KEY") + + def alternative_document_input(self): + from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential + text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) + + documents = [ + {"id": "0", "language": "en", "text": "I had the best day of my life."}, + {"id": "1", "language": "en", + "text": "This was a waste of my time. The speaker put me to sleep."}, + {"id": "2", "language": "es", "text": "No tengo dinero ni nada que dar..."}, + {"id": "3", "language": "fr", + "text": "L'hôtel n'était pas très confortable. L'éclairage était trop sombre."} + ] + + result = text_analytics_client.detect_language(documents) + + for idx, doc in enumerate(result): + if not doc.is_error: + print("Document text: {}".format(documents[idx])) + print("Language detected: {}".format(doc.primary_language.name)) + print("ISO6391 name: {}".format(doc.primary_language.iso6391_name)) + print("Confidence score: {}\n".format(doc.primary_language.score)) + if doc.is_error: + print(doc.id, doc.error) + + +if __name__ == '__main__': + sample = AlternativeDocumentInputSample() + sample.alternative_document_input() diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_analyze_sentiment.py b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_analyze_sentiment.py index 0fff36a70460..52464dd939ae 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_analyze_sentiment.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_analyze_sentiment.py @@ -10,15 +10,15 @@ FILE: sample_analyze_sentiment.py DESCRIPTION: - This sample demonstrates how to analyze sentiment in a batch of documents. + This sample demonstrates how to analyze sentiment in documents. An overall and per-sentence sentiment is returned. USAGE: python sample_analyze_sentiment.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics subscription key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key """ import os @@ -47,58 +47,21 @@ def analyze_sentiment(self): print("Document text: {}".format(documents[idx])) print("Overall sentiment: {}".format(doc.sentiment)) # [END batch_analyze_sentiment] - print("Overall confidence scores: positive={0:.3f}; neutral={1:.3f}; negative={2:.3f} \n".format( + print("Overall confidence scores: positive={}; neutral={}; negative={} \n".format( doc.confidence_scores.positive, doc.confidence_scores.neutral, doc.confidence_scores.negative, )) for idx, sentence in enumerate(doc.sentences): print("Sentence {} sentiment: {}".format(idx+1, sentence.sentiment)) - print("Sentence confidence scores: positive={0:.3f}; neutral={1:.3f}; negative={2:.3f}".format( + print("Sentence confidence scores: positive={}; neutral={}; negative={}".format( sentence.confidence_scores.positive, sentence.confidence_scores.neutral, sentence.confidence_scores.negative, )) - print("Offset: {}".format(sentence.grapheme_offset)) - print("Length: {}\n".format(sentence.grapheme_length)) print("------------------------------------") - def alternative_scenario_analyze_sentiment(self): - """This sample demonstrates how to retrieve batch statistics, the - model version used, and the raw response returned from the service. - - It additionally shows an alternative way to pass in the input documents - using a list[TextDocumentInput] and supplying your own IDs and language hints along - with the text. - """ - from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) - - documents = [ - {"id": "0", "language": "en", "text": "I had the best day of my life."}, - {"id": "1", "language": "en", - "text": "This was a waste of my time. The speaker put me to sleep."}, - {"id": "2", "language": "es", "text": "No tengo dinero ni nada que dar..."}, - {"id": "3", "language": "fr", - "text": "L'hôtel n'était pas très confortable. L'éclairage était trop sombre."} - ] - - extras = [] - - def callback(resp): - extras.append(resp.statistics) - extras.append(resp.model_version) - extras.append(resp.raw_response) - - result = text_analytics_client.analyze_sentiment( - documents, - show_stats=True, - model_version="latest", - raw_response_hook=callback - ) - if __name__ == '__main__': sample = AnalyzeSentimentSample() sample.analyze_sentiment() - sample.alternative_scenario_analyze_sentiment() diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_authentication.py b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_authentication.py index 1be013eab9f1..87fd2972ee51 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_authentication.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_authentication.py @@ -10,11 +10,11 @@ FILE: sample_authentication.py DESCRIPTION: - This sample demonstrates how to authenticate with the text analytics service. + This sample demonstrates how to authenticate to the Text Analytics service. There are two supported methods of authentication: - 1) Use a cognitive services/text analytics API key with TextAnalyticsApiKeyCredential - 2) Use a token credential to authenticate with Azure Active Directory + 1) Use a Cognitive Services/Text Analytics API key with TextAnalyticsApiKeyCredential + 2) Use a token credential from azure-identity to authenticate with Azure Active Directory See more details about authentication here: https://docs.microsoft.com/azure/cognitive-services/authentication @@ -23,8 +23,8 @@ python sample_authentication.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services/text analytics resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics API key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services/Text Analytics resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics API key 3) AZURE_CLIENT_ID - the client ID of your active directory application. 4) AZURE_TENANT_ID - the tenant ID of your active directory application. 5) AZURE_CLIENT_SECRET - the secret of your active directory application. @@ -36,6 +36,7 @@ class AuthenticationSample(object): def authentication_with_api_key_credential(self): + print("\n.. authentication_with_api_key_credential") # [START create_ta_client_with_key] from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential endpoint = os.getenv("AZURE_TEXT_ANALYTICS_ENDPOINT") @@ -51,9 +52,10 @@ def authentication_with_api_key_credential(self): print("Confidence score: {}".format(result[0].primary_language.score)) def authentication_with_azure_active_directory(self): - """DefaultAzureCredential will use the values from the environment + """DefaultAzureCredential will use the values from these environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET """ + print("\n.. authentication_with_api_key_credential") # [START create_ta_client_with_aad] from azure.ai.textanalytics import TextAnalyticsClient from azure.identity import DefaultAzureCredential diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_detect_language.py b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_detect_language.py index 4330a9596f9f..6d673b69c5e5 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_detect_language.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_detect_language.py @@ -17,8 +17,8 @@ python sample_detect_language.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics subscription key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key """ import os @@ -37,7 +37,7 @@ def detect_language(self): "This document is written in English.", "Este es un document escrito en Español.", "这是一个用中文写的文件", - "Dies ist ein Dokument in englischer Sprache.", + "Dies ist ein Dokument in deutsche Sprache.", "Detta är ett dokument skrivet på engelska." ] @@ -53,41 +53,7 @@ def detect_language(self): print(doc.id, doc.error) # [END batch_detect_language] - def alternative_scenario_detect_language(self): - """This sample demonstrates how to retrieve batch statistics, the - model version used, and the raw response returned from the service. - - It additionally shows an alternative way to pass in the input documents - using a list[DetectLanguageInput] and supplying your own IDs and country hints along - with the text. - """ - from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) - - documents = [ - {"id": "0", "country_hint": "US", "text": "This is a document written in English."}, - {"id": "1", "country_hint": "MX", "text": "Este es un document escrito en Español."}, - {"id": "2", "country_hint": "CN", "text": "这是一个用中文写的文件"}, - {"id": "3", "country_hint": "DE", "text": "Dies ist ein Dokument in englischer Sprache."}, - {"id": "4", "country_hint": "SE", "text": "Detta är ett dokument skrivet på engelska."} - ] - - extras = [] - - def callback(resp): - extras.append(resp.statistics) - extras.append(resp.model_version) - extras.append(resp.raw_response) - - result = text_analytics_client.detect_language( - documents, - show_stats=True, - model_version="latest", - raw_response_hook=callback - ) - if __name__ == '__main__': sample = DetectLanguageSample() sample.detect_language() - sample.alternative_scenario_detect_language() diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_extract_key_phrases.py b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_extract_key_phrases.py index a438e3d07b37..8a28bb93a706 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_extract_key_phrases.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_extract_key_phrases.py @@ -16,8 +16,8 @@ python sample_extract_key_phrases.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics subscription key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key """ import os @@ -46,40 +46,7 @@ def extract_key_phrases(self): print(doc.id, doc.error) # [END batch_extract_key_phrases] - def alternative_scenario_extract_key_phrases(self): - """This sample demonstrates how to retrieve batch statistics, the - model version used, and the raw response returned from the service. - - It additionally shows an alternative way to pass in the input documents - using a list[TextDocumentInput] and supplying your own IDs and language hints along - with the text. - """ - from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) - - documents = [ - {"id": "0", "language": "en", - "text": "Redmond is a city in King County, Washington, United States, located 15 miles east of Seattle."}, - {"id": "1", "language": "en", - "text": "I need to take my cat to the veterinarian."}, - {"id": "2", "language": "en", "text": "I will travel to South America in the summer."} - ] - extras = [] - - def callback(resp): - extras.append(resp.statistics) - extras.append(resp.model_version) - extras.append(resp.raw_response) - - result = text_analytics_client.extract_key_phrases( - documents, - show_stats=True, - model_version="latest", - raw_response_hook=callback - ) - if __name__ == '__main__': sample = ExtractKeyPhrasesSample() sample.extract_key_phrases() - sample.alternative_scenario_extract_key_phrases() diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_get_detailed_diagnostics_information.py b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_get_detailed_diagnostics_information.py new file mode 100644 index 000000000000..9b62b9563605 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_get_detailed_diagnostics_information.py @@ -0,0 +1,62 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +""" +FILE: sample_get_detailed_diagnostics_information.py + +DESCRIPTION: + This sample demonstrates how to retrieve batch statistics, the + model version used, and the raw response returned from the service. + +USAGE: + python sample_get_detailed_diagnostics_information.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key +""" + +import os +import logging + +_LOGGER = logging.getLogger(__name__) + +class GetDetailedDiagnosticsInformationSample(object): + endpoint = os.getenv("AZURE_TEXT_ANALYTICS_ENDPOINT") + key = os.getenv("AZURE_TEXT_ANALYTICS_KEY") + + def get_detailed_diagnostics_information(self): + from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential + text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) + + documents = [ + "I had the best day of my life.", + "This was a waste of my time. The speaker put me to sleep.", + "No tengo dinero ni nada que dar...", + "L'hôtel n'était pas très confortable. L'éclairage était trop sombre." + ] + + def callback(resp): + _LOGGER.info("document_count: {}".format(resp.statistics["document_count"])) + _LOGGER.info("valid_document_count: {}".format(resp.statistics["valid_document_count"])) + _LOGGER.info("erroneous_document_count: {}".format(resp.statistics["erroneous_document_count"])) + _LOGGER.info("transaction_count: {}".format(resp.statistics["transaction_count"])) + _LOGGER.info("model_version: {}".format(resp.model_version)) + _LOGGER.info("raw_response: {}".format(resp.raw_response)) + + result = text_analytics_client.analyze_sentiment( + documents, + show_stats=True, + model_version="latest", + raw_response_hook=callback + ) + + +if __name__ == '__main__': + sample = GetDetailedDiagnosticsInformationSample() + sample.get_detailed_diagnostics_information() diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_entities.py b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_entities.py index f998695db50d..5c39c25d9b23 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_entities.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_entities.py @@ -16,8 +16,8 @@ python sample_recognize_entities.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics subscription key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key """ import os @@ -45,42 +45,10 @@ def recognize_entities(self): print("\nDocument text: {}".format(documents[idx])) for entity in doc.entities: print("Entity: \t", entity.text, "\tCategory: \t", entity.category, - "\tConfidence Score: \t", round(entity.score, 3)) + "\tConfidence Score: \t", entity.confidence_score) # [END batch_recognize_entities] - def alternative_scenario_recognize_entities(self): - """This sample demonstrates how to retrieve batch statistics, the - model version used, and the raw response returned from the service. - - It additionally shows an alternative way to pass in the input documents - using a list[TextDocumentInput] and supplying your own IDs and language hints along - with the text. - """ - from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) - - documents = [ - {"id": "0", "language": "en", "text": "Microsoft was founded by Bill Gates and Paul Allen."}, - {"id": "1", "language": "de", "text": "I had a wonderful trip to Seattle last week."}, - {"id": "2", "language": "es", "text": "I visited the Space Needle 2 times."}, - ] - - extras = [] - - def callback(resp): - extras.append(resp.statistics) - extras.append(resp.model_version) - extras.append(resp.raw_response) - - result = text_analytics_client.recognize_entities( - documents, - show_stats=True, - model_version="latest", - raw_response_hook=callback - ) - if __name__ == '__main__': sample = RecognizeEntitiesSample() sample.recognize_entities() - sample.alternative_scenario_recognize_entities() diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_linked_entities.py b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_linked_entities.py index 3d8e64b34633..14bb94f7bc9b 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_linked_entities.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_linked_entities.py @@ -18,8 +18,8 @@ python sample_recognize_linked_entities.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics subscription key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key """ import os @@ -50,45 +50,12 @@ def recognize_linked_entities(self): print("Url: {}".format(entity.url)) print("Data Source: {}".format(entity.data_source)) for match in entity.matches: - print("Score: {0:.3f}".format(match.score)) - print("Offset: {}".format(match.grapheme_offset)) - print("Length: {}\n".format(match.grapheme_length)) + print("Confidence Score: {}".format(match.confidence_score)) + print("Entity as appears in request: {}".format(match.text)) print("------------------------------------------") # [END batch_recognize_linked_entities] - def alternative_scenario_recognize_linked_entities(self): - """This sample demonstrates how to retrieve batch statistics, the - model version used, and the raw response returned from the service. - - It additionally shows an alternative way to pass in the input documents - using a list[TextDocumentInput] and supplying your own IDs and language hints along - with the text. - """ - from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) - - documents = [ - {"id": "0", "language": "en", "text": "Microsoft moved its headquarters to Bellevue, Washington in January 1979."}, - {"id": "1", "language": "en", "text": "Steve Ballmer stepped down as CEO of Microsoft and was succeeded by Satya Nadella."}, - {"id": "2", "language": "es", "text": "Microsoft superó a Apple Inc. como la compañía más valiosa que cotiza en bolsa en el mundo."}, - ] - - extras = [] - - def callback(resp): - extras.append(resp.statistics) - extras.append(resp.model_version) - extras.append(resp.raw_response) - - result = text_analytics_client.recognize_linked_entities( - documents, - show_stats=True, - model_version="latest", - raw_response_hook=callback - ) - if __name__ == '__main__': sample = RecognizeLinkedEntitiesSample() sample.recognize_linked_entities() - sample.alternative_scenario_recognize_linked_entities() diff --git a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_pii_entities.py b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_pii_entities.py index 0a2c734efa41..04a49f11c772 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_pii_entities.py +++ b/sdk/textanalytics/azure-ai-textanalytics/samples/sample_recognize_pii_entities.py @@ -16,8 +16,8 @@ python sample_recognize_pii_entities.py Set the environment variables with your own values before running the sample: - 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your cognitive services resource. - 2) AZURE_TEXT_ANALYTICS_KEY - your text analytics subscription key + 1) AZURE_TEXT_ANALYTICS_ENDPOINT - the endpoint to your Cognitive Services resource. + 2) AZURE_TEXT_ANALYTICS_KEY - your Text Analytics subscription key """ import os @@ -46,42 +46,10 @@ def recognize_pii_entities(self): for entity in doc.entities: print("Entity: {}".format(entity.text)) print("Category: {}".format(entity.category)) - print("Confidence Score: {}\n".format(entity.score)) + print("Confidence Score: {}\n".format(entity.confidence_score)) # [END batch_recognize_pii_entities] - def alternative_scenario_recognize_pii_entities(self): - """This sample demonstrates how to retrieve batch statistics, the - model version used, and the raw response returned from the service. - - It additionally shows an alternative way to pass in the input documents - using a list[TextDocumentInput] and supplying your own IDs and language hints along - with the text. - """ - from azure.ai.textanalytics import TextAnalyticsClient, TextAnalyticsApiKeyCredential - text_analytics_client = TextAnalyticsClient(endpoint=self.endpoint, credential=TextAnalyticsApiKeyCredential(self.key)) - - documents = [ - {"id": "0", "language": "en", "text": "The employee's SSN is 555-55-5555."}, - {"id": "1", "language": "en", "text": "Your ABA number - 111000025 - is the first 9 digits in the lower left hand corner of your personal check."}, - {"id": "2", "language": "en", "text": "Is 998.214.865-68 your Brazilian CPF number?"} - ] - - extras = [] - - def callback(resp): - extras.append(resp.statistics) - extras.append(resp.model_version) - extras.append(resp.raw_response) - - result = text_analytics_client.recognize_pii_entities( - documents, - show_stats=True, - model_version="latest", - raw_response_hook=callback - ) - if __name__ == '__main__': sample = RecognizePiiEntitiesSample() sample.recognize_pii_entities() - sample.alternative_scenario_recognize_pii_entities() diff --git a/sdk/textanalytics/azure-ai-textanalytics/setup.py b/sdk/textanalytics/azure-ai-textanalytics/setup.py index ed519982fac2..c6a8721389e5 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/setup.py +++ b/sdk/textanalytics/azure-ai-textanalytics/setup.py @@ -59,7 +59,7 @@ author_email='azpysdkhelp@microsoft.com', url='https://github.com/Azure/azure-sdk-for-python', classifiers=[ - 'Development Status :: 4 - Beta', + "Development Status :: 4 - Beta", 'Programming Language :: Python', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', @@ -78,7 +78,7 @@ 'azure.ai', ]), install_requires=[ - "azure-core<2.0.0,>=1.1.0", + "azure-core<2.0.0,>=1.3.0", "msrest>=0.6.0", 'azure-common~=1.1', 'six>=1.6', diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/asynctestcase.py b/sdk/textanalytics/azure-ai-textanalytics/tests/asynctestcase.py index e3d76043cbfb..4d2c611d3f7f 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/asynctestcase.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/asynctestcase.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- import asyncio import functools +from azure_devtools.scenario_tests.utilities import trim_kwargs_from_test_function from azure.core.credentials import AccessToken from testcase import TextAnalyticsTest @@ -31,6 +32,7 @@ def await_prepared_test(test_fn): @functools.wraps(test_fn) def run(test_class_instance, *args, **kwargs): + trim_kwargs_from_test_function(test_fn, kwargs) loop = asyncio.get_event_loop() return loop.run_until_complete(test_fn(test_class_instance, **kwargs)) diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment.py index b84e4eb7087a..bdf22054907a 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment.py @@ -127,7 +127,7 @@ def test_bad_model_version(self, resource_group, location, text_analytics_accoun text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) with self.assertRaises(HttpResponseError): response = text_analytics.analyze_sentiment( - inputs=["Microsoft was founded by Bill Gates."], + documents=["Microsoft was founded by Bill Gates."], model_version="old" ) @@ -429,8 +429,8 @@ def test_bad_model_version_error(self, resource_group, location, text_analytics_ try: result = text_analytics.analyze_sentiment(docs, model_version="bad") except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidRequest") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidRequest") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_document_errors(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -458,8 +458,8 @@ def test_missing_input_records_error(self, resource_group, location, text_analyt try: result = text_analytics.analyze_sentiment(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "MissingInputRecords") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "MissingInputRecords") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_duplicate_ids_error(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -470,8 +470,8 @@ def test_duplicate_ids_error(self, resource_group, location, text_analytics_acco try: result = text_analytics.analyze_sentiment(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocument") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocument") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_batch_size_over_limit_error(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -482,8 +482,8 @@ def test_batch_size_over_limit_error(self, resource_group, location, text_analyt try: response = text_analytics.analyze_sentiment(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocumentBatch") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocumentBatch") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_language_kwarg_spanish(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -496,7 +496,7 @@ def callback(response): self.assertIsNotNone(response.statistics) res = text_analytics.analyze_sentiment( - inputs=["Bill Gates is the CEO of Microsoft."], + documents=["Bill Gates is the CEO of Microsoft."], model_version="latest", show_stats=True, language="es", diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment_async.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment_async.py index 3e4901f95ca1..ce54631f723e 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment_async.py @@ -151,7 +151,7 @@ async def test_bad_model_version(self, resource_group, location, text_analytics_ text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) with self.assertRaises(HttpResponseError): response = await text_analytics.analyze_sentiment( - inputs=["Microsoft was founded by Bill Gates."], + documents=["Microsoft was founded by Bill Gates."], model_version="old" ) @@ -471,8 +471,8 @@ async def test_bad_model_version_error(self, resource_group, location, text_anal try: result = await text_analytics.analyze_sentiment(docs, model_version="bad") except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidRequest") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidRequest") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -503,8 +503,8 @@ async def test_missing_input_records_error(self, resource_group, location, text_ try: result = await text_analytics.analyze_sentiment(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "MissingInputRecords") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "MissingInputRecords") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -516,8 +516,8 @@ async def test_duplicate_ids_error(self, resource_group, location, text_analytic try: result = await text_analytics.analyze_sentiment(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocument") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocument") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -529,8 +529,8 @@ async def test_batch_size_over_limit_error(self, resource_group, location, text_ try: response = await text_analytics.analyze_sentiment(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocumentBatch") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocumentBatch") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -544,7 +544,7 @@ def callback(response): self.assertIsNotNone(response.statistics) res = await text_analytics.analyze_sentiment( - inputs=["Bill Gates is the CEO of Microsoft."], + documents=["Bill Gates is the CEO of Microsoft."], model_version="latest", show_stats=True, language="es", diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_detect_language.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_detect_language.py index ac2748f6b7dd..1799d02dc5d4 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_detect_language.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_detect_language.py @@ -149,7 +149,7 @@ def test_bad_model_version(self, resource_group, location, text_analytics_accoun text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) with self.assertRaises(HttpResponseError): response = text_analytics.detect_language( - inputs=["Microsoft was founded by Bill Gates."], + documents=["Microsoft was founded by Bill Gates."], model_version="old" ) @@ -450,8 +450,8 @@ def test_bad_model_version_error(self, resource_group, location, text_analytics_ try: result = text_analytics.detect_language(docs, model_version="bad") except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidRequest") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidRequest") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_document_errors(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -476,8 +476,8 @@ def test_missing_input_records_error(self, resource_group, location, text_analyt try: result = text_analytics.detect_language(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "MissingInputRecords") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "MissingInputRecords") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_duplicate_ids_error(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -489,8 +489,8 @@ def test_duplicate_ids_error(self, resource_group, location, text_analytics_acco try: result = text_analytics.detect_language(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocument") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocument") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_batch_size_over_limit_error(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -501,8 +501,8 @@ def test_batch_size_over_limit_error(self, resource_group, location, text_analyt try: response = text_analytics.detect_language(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocumentBatch") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocumentBatch") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @pytest.mark.skip(reason="Service bug returns invalidDocument here. Unskip after v3.0-preview.2") @@ -533,10 +533,10 @@ def callback(response): # test DetectLanguageInput result2 = text_analytics.detect_language(documents2, raw_response_hook=callback) # test per-operation - result3 = text_analytics.detect_language(inputs=["this is written in english"], country_hint="none", raw_response_hook=callback) + result3 = text_analytics.detect_language(documents=["this is written in english"], country_hint="none", raw_response_hook=callback) # test client default new_client = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key), default_country_hint="none") - result4 = new_client.detect_language(inputs=["this is written in english"], raw_response_hook=callback) + result4 = new_client.detect_language(documents=["this is written in english"], raw_response_hook=callback) @GlobalTextAnalyticsAccountPreparer() def test_country_hint_kwarg(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -549,7 +549,7 @@ def callback(response): self.assertIsNotNone(response.statistics) res = text_analytics.detect_language( - inputs=["this is written in english"], + documents=["this is written in english"], model_version="latest", show_stats=True, country_hint="ES", diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_detect_language_async.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_detect_language_async.py index 6a79fee05cf7..e7c3c96bf2e3 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_detect_language_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_detect_language_async.py @@ -172,7 +172,7 @@ async def test_bad_model_version(self, resource_group, location, text_analytics_ text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) with self.assertRaises(HttpResponseError): response = await text_analytics.detect_language( - inputs=["Microsoft was founded by Bill Gates."], + documents=["Microsoft was founded by Bill Gates."], model_version="old" ) @@ -193,7 +193,7 @@ async def test_mixing_inputs(self, resource_group, location, text_analytics_acco docs = [ {"id": "1", "text": "Microsoft was founded by Bill Gates and Paul Allen."}, TextDocumentInput(id="2", text="I did not like the hotel we stayed at. It was too expensive."), - u"You cannot mix string input with the above inputs" + u"You cannot mix string input with the above documents" ] with self.assertRaises(TypeError): response = await text_analytics.detect_language(docs) @@ -491,8 +491,8 @@ async def test_bad_model_version_error(self, resource_group, location, text_anal try: result = await text_analytics.detect_language(docs, model_version="bad") except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidRequest") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidRequest") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -519,8 +519,8 @@ async def test_missing_input_records_error(self, resource_group, location, text_ try: result = await text_analytics.detect_language(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "MissingInputRecords") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "MissingInputRecords") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -532,8 +532,8 @@ async def test_duplicate_ids_error(self, resource_group, location, text_analytic try: result = await text_analytics.detect_language(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocument") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocument") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -545,8 +545,8 @@ async def test_batch_size_over_limit_error(self, resource_group, location, text_ try: response = await text_analytics.detect_language(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocumentBatch") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocumentBatch") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -579,10 +579,10 @@ def callback(response): # test DetectLanguageInput result2 = await text_analytics.detect_language(documents2, raw_response_hook=callback) # test per-operation - result3 = await text_analytics.detect_language(inputs=["this is written in english"], country_hint="none", raw_response_hook=callback) + result3 = await text_analytics.detect_language(documents=["this is written in english"], country_hint="none", raw_response_hook=callback) # test client default new_client = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key), default_country_hint="none") - result4 = await new_client.detect_language(inputs=["this is written in english"], raw_response_hook=callback) + result4 = await new_client.detect_language(documents=["this is written in english"], raw_response_hook=callback) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -596,7 +596,7 @@ def callback(response): self.assertIsNotNone(response.statistics) res = await text_analytics.detect_language( - inputs=["this is written in english"], + documents=["this is written in english"], model_version="latest", show_stats=True, country_hint="ES", diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_extract_key_phrases.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_extract_key_phrases.py index 8bbd2740bd90..4d1df8d56219 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_extract_key_phrases.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_extract_key_phrases.py @@ -112,7 +112,7 @@ def test_bad_model_version(self, resource_group, location, text_analytics_accoun text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) with self.assertRaises(HttpResponseError): response = text_analytics.extract_key_phrases( - inputs=["Microsoft was founded by Bill Gates."], + documents=["Microsoft was founded by Bill Gates."], model_version="old" ) @@ -399,8 +399,8 @@ def test_bad_model_version_error(self, resource_group, location, text_analytics_ try: result = text_analytics.extract_key_phrases(docs, model_version="bad") except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidRequest") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidRequest") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_document_errors(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -428,8 +428,8 @@ def test_missing_input_records_error(self, resource_group, location, text_analyt try: result = text_analytics.extract_key_phrases(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "MissingInputRecords") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "MissingInputRecords") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_duplicate_ids_error(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -440,8 +440,8 @@ def test_duplicate_ids_error(self, resource_group, location, text_analytics_acco try: result = text_analytics.extract_key_phrases(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocument") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocument") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_batch_size_over_limit_error(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -451,8 +451,8 @@ def test_batch_size_over_limit_error(self, resource_group, location, text_analyt try: response = text_analytics.extract_key_phrases(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocumentBatch") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocumentBatch") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_language_kwarg_spanish(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -465,7 +465,7 @@ def callback(response): self.assertIsNotNone(response.statistics) res = text_analytics.extract_key_phrases( - inputs=["Bill Gates is the CEO of Microsoft."], + documents=["Bill Gates is the CEO of Microsoft."], model_version="latest", show_stats=True, language="es", diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_extract_key_phrases_async.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_extract_key_phrases_async.py index a7e20b20ae53..a8813e8619cc 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_extract_key_phrases_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_extract_key_phrases_async.py @@ -136,7 +136,7 @@ async def test_bad_model_version(self, resource_group, location, text_analytics_ text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) with self.assertRaises(HttpResponseError): response = await text_analytics.extract_key_phrases( - inputs=["Microsoft was founded by Bill Gates."], + documents=["Microsoft was founded by Bill Gates."], model_version="old" ) @@ -440,8 +440,8 @@ async def test_bad_model_version_error(self, resource_group, location, text_anal try: result = await text_analytics.extract_key_phrases(docs, model_version="bad") except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidRequest") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidRequest") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -471,8 +471,8 @@ async def test_missing_input_records_error(self, resource_group, location, text_ try: result = await text_analytics.extract_key_phrases(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "MissingInputRecords") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "MissingInputRecords") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -485,8 +485,8 @@ async def test_duplicate_ids_error(self, resource_group, location, text_analytic try: result = await text_analytics.extract_key_phrases(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocument") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocument") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -498,8 +498,8 @@ async def test_batch_size_over_limit_error(self, resource_group, location, text_ try: response = await text_analytics.extract_key_phrases(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocumentBatch") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocumentBatch") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -513,7 +513,7 @@ def callback(response): self.assertIsNotNone(response.statistics) res = await text_analytics.extract_key_phrases( - inputs=["Bill Gates is the CEO of Microsoft."], + documents=["Bill Gates is the CEO of Microsoft."], model_version="latest", show_stats=True, language="es", diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities.py index 34aa2dc5d88e..07745bd47a1f 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities.py @@ -43,7 +43,7 @@ def test_all_successful_passing_dict(self, resource_group, location, text_analyt self.assertIsNotNone(entity.category) self.assertIsNotNone(entity.grapheme_offset) self.assertIsNotNone(entity.grapheme_length) - self.assertIsNotNone(entity.score) + self.assertIsNotNone(entity.confidence_score) @GlobalTextAnalyticsAccountPreparer() def test_all_successful_passing_text_document_input(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -63,7 +63,7 @@ def test_all_successful_passing_text_document_input(self, resource_group, locati self.assertIsNotNone(entity.category) self.assertIsNotNone(entity.grapheme_offset) self.assertIsNotNone(entity.grapheme_length) - self.assertIsNotNone(entity.score) + self.assertIsNotNone(entity.confidence_score) @GlobalTextAnalyticsAccountPreparer() def test_passing_only_string(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -127,7 +127,7 @@ def test_bad_model_version(self, resource_group, location, text_analytics_accoun text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) with self.assertRaises(HttpResponseError): response = text_analytics.recognize_entities( - inputs=["Microsoft was founded by Bill Gates."], + documents=["Microsoft was founded by Bill Gates."], model_version="old" ) @@ -414,8 +414,8 @@ def test_bad_model_version_error(self, resource_group, location, text_analytics_ try: result = text_analytics.recognize_entities(docs, model_version="bad") except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidRequest") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidRequest") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_document_errors(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -443,8 +443,8 @@ def test_missing_input_records_error(self, resource_group, location, text_analyt try: result = text_analytics.recognize_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "MissingInputRecords") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "MissingInputRecords") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_duplicate_ids_error(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -455,8 +455,8 @@ def test_duplicate_ids_error(self, resource_group, location, text_analytics_acco try: result = text_analytics.recognize_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocument") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocument") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_batch_size_over_limit_error(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -466,8 +466,8 @@ def test_batch_size_over_limit_error(self, resource_group, location, text_analyt try: response = text_analytics.recognize_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocumentBatch") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocumentBatch") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_language_kwarg_spanish(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -480,7 +480,7 @@ def callback(response): self.assertIsNotNone(response.statistics) res = text_analytics.recognize_entities( - inputs=["Bill Gates is the CEO of Microsoft."], + documents=["Bill Gates is the CEO of Microsoft."], model_version="latest", show_stats=True, language="es", diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities_async.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities_async.py index 54ce1306b689..6754a26ee43c 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities_async.py @@ -60,7 +60,7 @@ async def test_all_successful_passing_dict(self, resource_group, location, text_ self.assertIsNotNone(entity.category) self.assertIsNotNone(entity.grapheme_offset) self.assertIsNotNone(entity.grapheme_length) - self.assertIsNotNone(entity.score) + self.assertIsNotNone(entity.confidence_score) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -81,7 +81,7 @@ async def test_all_successful_passing_text_document_input(self, resource_group, self.assertIsNotNone(entity.category) self.assertIsNotNone(entity.grapheme_offset) self.assertIsNotNone(entity.grapheme_length) - self.assertIsNotNone(entity.score) + self.assertIsNotNone(entity.confidence_score) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -151,7 +151,7 @@ async def test_bad_model_version(self, resource_group, location, text_analytics_ text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) with self.assertRaises(HttpResponseError): response = await text_analytics.recognize_entities( - inputs=["Microsoft was founded by Bill Gates."], + documents=["Microsoft was founded by Bill Gates."], model_version="old" ) @@ -454,8 +454,8 @@ async def test_bad_model_version_error(self, resource_group, location, text_anal try: result = await text_analytics.recognize_entities(docs, model_version="bad") except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidRequest") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidRequest") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -485,8 +485,8 @@ async def test_missing_input_records_error(self, resource_group, location, text_ try: result = await text_analytics.recognize_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "MissingInputRecords") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "MissingInputRecords") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -498,8 +498,8 @@ async def test_duplicate_ids_error(self, resource_group, location, text_analytic try: result = await text_analytics.recognize_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocument") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocument") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -510,8 +510,8 @@ async def test_batch_size_over_limit_error(self, resource_group, location, text_ try: response = await text_analytics.recognize_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocumentBatch") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocumentBatch") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -525,7 +525,7 @@ def callback(response): self.assertIsNotNone(response.statistics) res = await text_analytics.recognize_entities( - inputs=["Bill Gates is the CEO of Microsoft."], + documents=["Bill Gates is the CEO of Microsoft."], model_version="latest", show_stats=True, language="es", diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities.py index f00fb5fd8b2c..68f79f8dfbd4 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities.py @@ -123,7 +123,7 @@ def test_bad_model_version(self, resource_group, location, text_analytics_accoun text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) with self.assertRaises(HttpResponseError): response = text_analytics.recognize_linked_entities( - inputs=["Microsoft was founded by Bill Gates."], + documents=["Microsoft was founded by Bill Gates."], model_version="old" ) @@ -409,8 +409,8 @@ def test_bad_model_version_error(self, resource_group, location, text_analytics_ try: result = text_analytics.recognize_linked_entities(docs, model_version="bad") except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidRequest") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidRequest") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_document_errors(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -438,8 +438,8 @@ def test_missing_input_records_error(self, resource_group, location, text_analyt try: result = text_analytics.recognize_linked_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "MissingInputRecords") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "MissingInputRecords") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_duplicate_ids_error(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -450,8 +450,8 @@ def test_duplicate_ids_error(self, resource_group, location, text_analytics_acco try: result = text_analytics.recognize_linked_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocument") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocument") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_batch_size_over_limit_error(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -461,8 +461,8 @@ def test_batch_size_over_limit_error(self, resource_group, location, text_analyt try: response = text_analytics.recognize_linked_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocumentBatch") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocumentBatch") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_language_kwarg_spanish(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -475,7 +475,7 @@ def callback(response): self.assertIsNotNone(response.statistics) res = text_analytics.recognize_linked_entities( - inputs=["Bill Gates is the CEO of Microsoft."], + documents=["Bill Gates is the CEO of Microsoft."], model_version="latest", show_stats=True, language="es", diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities_async.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities_async.py index f6d025ef4a40..904f3080a2ac 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities_async.py @@ -147,7 +147,7 @@ async def test_bad_model_version(self, resource_group, location, text_analytics_ text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) with self.assertRaises(HttpResponseError): response = await text_analytics.recognize_linked_entities( - inputs=["Microsoft was founded by Bill Gates."], + documents=["Microsoft was founded by Bill Gates."], model_version="old" ) @@ -450,8 +450,8 @@ async def test_bad_model_version_error(self, resource_group, location, text_anal try: result = await text_analytics.recognize_linked_entities(docs, model_version="bad") except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidRequest") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidRequest") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -481,8 +481,8 @@ async def test_missing_input_records_error(self, resource_group, location, text_ try: result = await text_analytics.recognize_linked_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "MissingInputRecords") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "MissingInputRecords") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -494,8 +494,8 @@ async def test_duplicate_ids_error(self, resource_group, location, text_analytic try: result = await text_analytics.recognize_linked_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocument") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocument") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -506,8 +506,8 @@ async def test_batch_size_over_limit_error(self, resource_group, location, text_ try: response = await text_analytics.recognize_linked_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocumentBatch") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocumentBatch") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -521,7 +521,7 @@ def callback(response): self.assertIsNotNone(response.statistics) res = await text_analytics.recognize_linked_entities( - inputs=["Bill Gates is the CEO of Microsoft."], + documents=["Bill Gates is the CEO of Microsoft."], model_version="latest", show_stats=True, language="es", diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_pii_entities.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_pii_entities.py index f95a97f30020..7a2119e9c0ee 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_pii_entities.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_pii_entities.py @@ -48,7 +48,7 @@ def test_all_successful_passing_dict(self, resource_group, location, text_analyt self.assertIsNotNone(entity.category) self.assertIsNotNone(entity.grapheme_offset) self.assertIsNotNone(entity.grapheme_length) - self.assertIsNotNone(entity.score) + self.assertIsNotNone(entity.confidence_score) @GlobalTextAnalyticsAccountPreparer() def test_all_successful_passing_text_document_input(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -75,7 +75,7 @@ def test_all_successful_passing_text_document_input(self, resource_group, locati self.assertIsNotNone(entity.category) self.assertIsNotNone(entity.grapheme_offset) self.assertIsNotNone(entity.grapheme_length) - self.assertIsNotNone(entity.score) + self.assertIsNotNone(entity.confidence_score) @GlobalTextAnalyticsAccountPreparer() def test_length_with_emoji(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -150,7 +150,7 @@ def test_bad_model_version(self, resource_group, location, text_analytics_accoun text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) with self.assertRaises(HttpResponseError): response = text_analytics.recognize_pii_entities( - inputs=["Microsoft was founded by Bill Gates."], + documents=["Microsoft was founded by Bill Gates."], model_version="old" ) @@ -437,8 +437,8 @@ def test_bad_model_version_error(self, resource_group, location, text_analytics_ try: result = text_analytics.recognize_pii_entities(docs, model_version="bad") except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidRequest") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidRequest") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_document_errors(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -466,8 +466,8 @@ def test_missing_input_records_error(self, resource_group, location, text_analyt try: result = text_analytics.recognize_pii_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "MissingInputRecords") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "MissingInputRecords") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_duplicate_ids_error(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -478,8 +478,8 @@ def test_duplicate_ids_error(self, resource_group, location, text_analytics_acco try: result = text_analytics.recognize_pii_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocument") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocument") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_batch_size_over_limit_error(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -489,8 +489,8 @@ def test_batch_size_over_limit_error(self, resource_group, location, text_analyt try: response = text_analytics.recognize_pii_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocumentBatch") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocumentBatch") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() def test_language_kwarg_english(self, resource_group, location, text_analytics_account, text_analytics_account_key): @@ -503,7 +503,7 @@ def callback(response): self.assertIsNotNone(response.statistics) res = text_analytics.recognize_pii_entities( - inputs=["Bill Gates is the CEO of Microsoft."], + documents=["Bill Gates is the CEO of Microsoft."], model_version="latest", show_stats=True, language="en", diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_pii_entities_async.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_pii_entities_async.py index 80d6cd21999f..661ffefa2e33 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_pii_entities_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_pii_entities_async.py @@ -65,7 +65,7 @@ async def test_all_successful_passing_dict(self, resource_group, location, text_ self.assertIsNotNone(entity.category) self.assertIsNotNone(entity.grapheme_offset) self.assertIsNotNone(entity.grapheme_length) - self.assertIsNotNone(entity.score) + self.assertIsNotNone(entity.confidence_score) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -93,7 +93,7 @@ async def test_all_successful_passing_text_document_input(self, resource_group, self.assertIsNotNone(entity.category) self.assertIsNotNone(entity.grapheme_offset) self.assertIsNotNone(entity.grapheme_length) - self.assertIsNotNone(entity.score) + self.assertIsNotNone(entity.confidence_score) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -175,7 +175,7 @@ async def test_bad_model_version(self, resource_group, location, text_analytics_ text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) with self.assertRaises(HttpResponseError): response = await text_analytics.recognize_pii_entities( - inputs=["Microsoft was founded by Bill Gates."], + documents=["Microsoft was founded by Bill Gates."], model_version="old" ) @@ -478,8 +478,8 @@ async def test_bad_model_version_error(self, resource_group, location, text_anal try: result = await text_analytics.recognize_pii_entities(docs, model_version="bad") except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidRequest") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidRequest") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -509,8 +509,8 @@ async def test_missing_input_records_error(self, resource_group, location, text_ try: result = await text_analytics.recognize_pii_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "MissingInputRecords") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "MissingInputRecords") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -522,8 +522,8 @@ async def test_duplicate_ids_error(self, resource_group, location, text_analytic try: result = await text_analytics.recognize_pii_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocument") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocument") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -534,8 +534,8 @@ async def test_batch_size_over_limit_error(self, resource_group, location, text_ try: response = await text_analytics.recognize_pii_entities(docs) except HttpResponseError as err: - self.assertEqual(err.error_code, "InvalidDocumentBatch") - self.assertIsNotNone(err.message) + self.assertEqual(err.error.code, "InvalidDocumentBatch") + self.assertIsNotNone(err.error.message) @GlobalTextAnalyticsAccountPreparer() @AsyncTextAnalyticsTest.await_prepared_test @@ -549,7 +549,7 @@ def callback(response): self.assertIsNotNone(response.statistics) res = await text_analytics.recognize_pii_entities( - inputs=["Bill Gates is the CEO of Microsoft."], + documents=["Bill Gates is the CEO of Microsoft."], model_version="latest", show_stats=True, language="en", diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_text_analytics.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_text_analytics.py index 0b2a9249ab5f..0f30aca4c998 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_text_analytics.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_text_analytics.py @@ -18,7 +18,7 @@ def test_detect_language(self, resource_group, location, text_analytics_account, text_analytics = TextAnalyticsClient(text_analytics_account, TextAnalyticsApiKeyCredential(text_analytics_account_key)) response = text_analytics.detect_language( - inputs=[{ + documents=[{ 'id': 1, 'text': 'I had a wonderful experience! The rooms were wonderful and the staff was helpful.' }] @@ -29,13 +29,13 @@ def test_detect_language(self, resource_group, location, text_analytics_account, def test_repr(self): detected_language = _models.DetectedLanguage(name="English", iso6391_name="en", score=1.0) - categorized_entity = _models.CategorizedEntity(text="Bill Gates", category="Person", subcategory="Age", - grapheme_offset=0, grapheme_length=8, score=0.899) + categorized_entity = _models.CategorizedEntity(text="Bill Gates", category="Person", subcategory="Age", + grapheme_offset=0, grapheme_length=8, confidence_score=0.899) - pii_entity = _models.PiiEntity(text="555-55-5555", category="SSN", subcategory=None, grapheme_offset=0, - grapheme_length=8, score=0.899) + pii_entity = _models.PiiEntity(text="555-55-5555", category="SSN", subcategory=None, grapheme_offset=0, + grapheme_length=8, confidence_score=0.899) - text_document_statistics = _models.TextDocumentStatistics(character_count=14, transaction_count=18) + text_document_statistics = _models.TextDocumentStatistics(grapheme_count=14, transaction_count=18) recognize_entities_result = _models.RecognizeEntitiesResult( id="1", @@ -69,7 +69,7 @@ def test_repr(self): id="1", key_phrases=["dog", "cat", "bird"], statistics=text_document_statistics, is_error=False ) - linked_entity_match = _models.LinkedEntityMatch(score=0.999, text="Bill Gates", grapheme_offset=0, + linked_entity_match = _models.LinkedEntityMatch(confidence_score=0.999, text="Bill Gates", grapheme_offset=0, grapheme_length=8) linked_entity = _models.LinkedEntity( @@ -86,7 +86,7 @@ def test_repr(self): ) sentiment_confidence_score_per_label = \ - _models.SentimentConfidenceScorePerLabel(positive=0.99, neutral=0.05, negative=0.02) + _models.SentimentConfidenceScores(positive=0.99, neutral=0.05, negative=0.02) sentence_sentiment = _models.SentenceSentiment( sentiment="neutral", @@ -120,51 +120,51 @@ def test_repr(self): self.assertEqual("DetectedLanguage(name=English, iso6391_name=en, score=1.0)", repr(detected_language)) self.assertEqual("CategorizedEntity(text=Bill Gates, category=Person, subcategory=Age, grapheme_offset=0, " - "grapheme_length=8, score=0.899)", + "grapheme_length=8, confidence_score=0.899)", repr(categorized_entity)) self.assertEqual("PiiEntity(text=555-55-5555, category=SSN, subcategory=None, grapheme_offset=0, " - "grapheme_length=8, score=0.899)", repr(pii_entity)) - self.assertEqual("TextDocumentStatistics(character_count=14, transaction_count=18)", + "grapheme_length=8, confidence_score=0.899)", repr(pii_entity)) + self.assertEqual("TextDocumentStatistics(grapheme_count=14, transaction_count=18)", repr(text_document_statistics)) self.assertEqual("RecognizeEntitiesResult(id=1, entities=[CategorizedEntity(text=Bill Gates, category=Person, " - "subcategory=Age, grapheme_offset=0, grapheme_length=8, score=0.899)], " - "statistics=TextDocumentStatistics(character_count=14, transaction_count=18), " + "subcategory=Age, grapheme_offset=0, grapheme_length=8, confidence_score=0.899)], " + "statistics=TextDocumentStatistics(grapheme_count=14, transaction_count=18), " "is_error=False)", repr(recognize_entities_result)) self.assertEqual("RecognizePiiEntitiesResult(id=1, entities=[PiiEntity(text=555-55-5555, category=SSN, " - "subcategory=None, grapheme_offset=0, grapheme_length=8, score=0.899)], " - "statistics=TextDocumentStatistics(character_count=14, transaction_count=18), " + "subcategory=None, grapheme_offset=0, grapheme_length=8, confidence_score=0.899)], " + "statistics=TextDocumentStatistics(grapheme_count=14, transaction_count=18), " "is_error=False)", repr(recognize_pii_entities_result)) self.assertEqual("DetectLanguageResult(id=1, primary_language=DetectedLanguage(name=English, " - "iso6391_name=en, score=1.0), statistics=TextDocumentStatistics(character_count=14, " + "iso6391_name=en, score=1.0), statistics=TextDocumentStatistics(grapheme_count=14, " "transaction_count=18), is_error=False)", repr(detect_language_result)) self.assertEqual("TextAnalyticsError(code=invalidRequest, message=The request is invalid, target=request)", repr(text_analytics_error)) self.assertEqual("ExtractKeyPhrasesResult(id=1, key_phrases=['dog', 'cat', 'bird'], statistics=" - "TextDocumentStatistics(character_count=14, transaction_count=18), is_error=False)", + "TextDocumentStatistics(grapheme_count=14, transaction_count=18), is_error=False)", repr(extract_key_phrases_result)) - self.assertEqual("LinkedEntityMatch(score=0.999, text=Bill Gates, grapheme_offset=0, grapheme_length=8)", + self.assertEqual("LinkedEntityMatch(confidence_score=0.999, text=Bill Gates, grapheme_offset=0, grapheme_length=8)", repr(linked_entity_match)) - self.assertEqual("LinkedEntity(name=Bill Gates, matches=[LinkedEntityMatch(score=0.999, text=Bill Gates, " - "grapheme_offset=0, grapheme_length=8), LinkedEntityMatch(score=0.999, text=Bill Gates, " + self.assertEqual("LinkedEntity(name=Bill Gates, matches=[LinkedEntityMatch(confidence_score=0.999, text=Bill Gates, " + "grapheme_offset=0, grapheme_length=8), LinkedEntityMatch(confidence_score=0.999, text=Bill Gates, " "grapheme_offset=0, grapheme_length=8)], language=English, data_source_entity_id=Bill Gates, " "url=https://en.wikipedia.org/wiki/Bill_Gates, data_source=wikipedia)", repr(linked_entity)) self.assertEqual("RecognizeLinkedEntitiesResult(id=1, entities=[LinkedEntity(name=Bill Gates, " - "matches=[LinkedEntityMatch(score=0.999, text=Bill Gates, grapheme_offset=0, " - "grapheme_length=8), LinkedEntityMatch(score=0.999, text=Bill Gates, grapheme_offset=0, " + "matches=[LinkedEntityMatch(confidence_score=0.999, text=Bill Gates, grapheme_offset=0, " + "grapheme_length=8), LinkedEntityMatch(confidence_score=0.999, text=Bill Gates, grapheme_offset=0, " "grapheme_length=8)], language=English, data_source_entity_id=Bill Gates, " "url=https://en.wikipedia.org/wiki/Bill_Gates, data_source=wikipedia)], " - "statistics=TextDocumentStatistics(character_count=14, " + "statistics=TextDocumentStatistics(grapheme_count=14, " "transaction_count=18), is_error=False)", repr(recognize_linked_entities_result)) - self.assertEqual("SentimentConfidenceScorePerLabel(positive=0.99, neutral=0.05, negative=0.02)", + self.assertEqual("SentimentConfidenceScores(positive=0.99, neutral=0.05, negative=0.02)", repr(sentiment_confidence_score_per_label)) - self.assertEqual("SentenceSentiment(sentiment=neutral, confidence_scores=SentimentConfidenceScorePerLabel(" + self.assertEqual("SentenceSentiment(sentiment=neutral, confidence_scores=SentimentConfidenceScores(" "positive=0.99, neutral=0.05, negative=0.02), grapheme_offset=0, grapheme_length=10, warnings=" "['sentence was too short to find sentiment'])", repr(sentence_sentiment)) self.assertEqual("AnalyzeSentimentResult(id=1, sentiment=positive, statistics=TextDocumentStatistics(" - "character_count=14, transaction_count=18), confidence_scores=SentimentConfidenceScorePerLabel" + "grapheme_count=14, transaction_count=18), confidence_scores=SentimentConfidenceScores" "(positive=0.99, neutral=0.05, negative=0.02), " "sentences=[SentenceSentiment(sentiment=neutral, confidence_scores=" - "SentimentConfidenceScorePerLabel(positive=0.99, neutral=0.05, negative=0.02), " + "SentimentConfidenceScores(positive=0.99, neutral=0.05, negative=0.02), " "grapheme_offset=0, grapheme_length=10, " "warnings=['sentence was too short to find sentiment'])], is_error=False)", repr(analyze_sentiment_result)) diff --git a/shared_requirements.txt b/shared_requirements.txt index 38d8a0c0afa2..efb45473dde5 100644 --- a/shared_requirements.txt +++ b/shared_requirements.txt @@ -7,7 +7,7 @@ azure-cognitiveservices-language-nspkg azure-cognitiveservices-search-nspkg azure-cognitiveservices-vision-nspkg azure-common~=1.1 -azure-core<2.0.0,>=1.0.0 +azure-core<2.0.0,>=1.2.2 azure-cosmosdb-table~=1.0 azure-datalake-store~=0.0.18 azure-eventhub<6.0.0,>=5.0.0 @@ -82,6 +82,7 @@ azure-mgmt-trafficmanager~=0.50.0 azure-mgmt-web~=0.35.0 azure-nspkg azure-keyvault-nspkg +azure-search-nspkg azure-security-nspkg azure-servicebus~=0.21.1 azure-servicefabric~=6.3.0.0 @@ -107,15 +108,21 @@ aiodns>=2.0 python-dateutil>=2.8.0 six>=1.6 #override azure azure-keyvault~=1.0 +#override azure-mgmt-core azure-core<2.0.0,>=1.3.0 +#override azure-appconfiguration azure-core<2.0.0,>=1.0.0 +#override azure-core-tracing-opencensus azure-core<2.0.0,>=1.0.0 +#override azure-core-tracing-opentelemetry azure-core<2.0.0,>=1.0.0 +#override azure-cosmos azure-core<2.0.0,>=1.0.0 +#override azure-eventhub azure-core<2.0.0,>=1.0.0 +#override azure-identity azure-core<2.0.0,>=1.0.0 #override azure-keyvault-certificates msrest>=0.6.0 #override azure-keyvault-keys msrest>=0.6.0 #override azure-keyvault-secrets msrest>=0.6.0 #override azure-keyvault-certificates azure-core<2.0.0,>=1.2.1 #override azure-keyvault-keys azure-core<2.0.0,>=1.2.1 #override azure-keyvault-secrets azure-core<2.0.0,>=1.2.1 -#override azure-synapse azure-core<2.0.0,>=1.2.2 #override azure-ai-textanalytics msrest>=0.6.0 -#override azure-ai-textanalytics azure-core<2.0.0,>=1.1.0 +#override azure-ai-textanalytics azure-core<2.0.0,>=1.3.0 #override azure-storage-blob msrest>=0.6.10 #override azure-storage-queue msrest>=0.6.10 #override azure-storage-file-share msrest>=0.6.10 @@ -124,14 +131,11 @@ six>=1.6 opencensus>=0.6.0 opencensus-ext-threading opencensus-ext-azure>=0.3.1 -opentelemetry-api==0.3a0 -#override azure-eventhub-checkpointstoreblob-aio azure-storage-blob<13.0.0,>=12.0.0 -#override azure-eventhub-checkpointstoreblob azure-storage-blob<13.0.0,>=12.0.0 +opentelemetry-api==0.4a0 +#override azure-eventhub-checkpointstoreblob msrest>=0.6.10 +#override azure-eventhub-checkpointstoreblob-aio msrest>=0.6.10 #override azure-eventhub-checkpointstoreblob-aio aiohttp<4.0,>=3.0 #override azure-eventhub uamqp<2.0,>=1.2.5 #override azure-appconfiguration msrest>=0.6.10 -#override azure-storage-blob azure-core<2.0.0,>=1.2.2 -#override azure-storage-queue azure-core<2.0.0,>=1.2.2 -#override azure-storage-file-share azure-core<2.0.0,>=1.2.2 -#override azure-storage-file-datalake azure-core<2.0.0,>=1.2.2 -#override azure-servicebus uamqp>=1.2.5,<2.0.0 \ No newline at end of file +#override azure-servicebus uamqp>=1.2.5,<2.0.0 +#override azure-search-documents msrest>=0.6.10 diff --git a/tools/azure-devtools/src/azure_devtools/scenario_tests/preparers.py b/tools/azure-devtools/src/azure_devtools/scenario_tests/preparers.py index 38a451e0cd1d..420167d9deff 100644 --- a/tools/azure-devtools/src/azure_devtools/scenario_tests/preparers.py +++ b/tools/azure-devtools/src/azure_devtools/scenario_tests/preparers.py @@ -75,7 +75,7 @@ def _prepare_create_resource(self, test_class_instance, **kwargs): break try: msg += "\nDetailed error message: " + str(e.additional_properties['error']['message']) - except AttributeError: + except (AttributeError, KeyError): pass _logger.error(msg) @@ -132,7 +132,15 @@ def _preparer_wrapper(test_class_instance, **kwargs): trim_kwargs_from_test_function(fn, trimmed_kwargs) try: - fn(test_class_instance, **trimmed_kwargs) + try: + import asyncio + if asyncio.iscoroutinefunction(fn): + loop = asyncio.get_event_loop() + loop.run_until_complete(fn(test_class_instance, **trimmed_kwargs)) + else: + fn(test_class_instance, **trimmed_kwargs) + except (ImportError, SyntaxError): # ImportError for if asyncio isn't available, syntaxerror on some versions of 2.7 + fn(test_class_instance, **trimmed_kwargs) finally: # If we use cache we delay deletion for the end. # This won't guarantee deletion order, but it will guarantee everything delayed @@ -199,7 +207,7 @@ def remove_resource_with_record_override(self, name, **kwargs): @classmethod def _perform_pending_deletes(cls): _logger.debug("Perform all delayed resource removal.") - for resource_name, kwargs, preparer in [e for e in cls._resource_cache.values()]: + for resource_name, kwargs, preparer in reversed([e for e in cls._resource_cache.values()]): try: _logger.debug("Performing delayed delete for: %s %s", preparer, resource_name) preparer.remove_resource_with_record_override(resource_name, **kwargs) diff --git a/tools/azure-devtools/src/azure_devtools/scenario_tests/tests/async_tests/test_preparer_async.py b/tools/azure-devtools/src/azure_devtools/scenario_tests/tests/async_tests/test_preparer_async.py new file mode 100644 index 000000000000..d564bcad71b9 --- /dev/null +++ b/tools/azure-devtools/src/azure_devtools/scenario_tests/tests/async_tests/test_preparer_async.py @@ -0,0 +1,49 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- + +import unittest +import asyncio +from azure_devtools.scenario_tests.preparers import AbstractPreparer + +traces = [] + +# Separated into its own file to not disrupt 2.7 code with syntax errors from the use of async. +class _TestPreparer(AbstractPreparer): + def __init__(self, name, use_cache=False): + super(_TestPreparer, self).__init__('test', 20) + self._name = name + self.set_cache(use_cache, name) + + def create_resource(self, name, **kwargs): + traces.append('create ' + self._name) + return {} + + def remove_resource(self, name, **kwargs): + traces.append('remove ' + self._name) + + +class _AsyncTestClassSample(unittest.TestCase): + @_TestPreparer('A') + @_TestPreparer('B') + async def example_async_test(self): + traces.append('ran async') + + @_TestPreparer('A') + @_TestPreparer('B') + def example_test(self): + traces.append('ran sync') + + +def test_preparer_async_handling(): + # Mimic a real test runner, for better compat 2.7 / 3.x + # This test won't work for 2.7, however, because it relies on asyncio. + + suite = unittest.TestSuite() + suite.addTest(_AsyncTestClassSample('example_test')) + suite.addTest(_AsyncTestClassSample('example_async_test')) + unittest.TextTestRunner().run(suite) + + assert len(traces) == 10 + assert traces == ['create A', 'create B', 'ran sync', 'remove B', 'remove A', 'create A', 'create B', 'ran async', 'remove B', 'remove A'] \ No newline at end of file diff --git a/tools/azure-devtools/src/azure_devtools/scenario_tests/tests/test_preparer_order.py b/tools/azure-devtools/src/azure_devtools/scenario_tests/tests/test_preparer_order.py index b9eb5ddcf125..c7d5bf8b1a60 100644 --- a/tools/azure-devtools/src/azure_devtools/scenario_tests/tests/test_preparer_order.py +++ b/tools/azure-devtools/src/azure_devtools/scenario_tests/tests/test_preparer_order.py @@ -10,9 +10,10 @@ class _TestPreparer(AbstractPreparer): - def __init__(self, name): + def __init__(self, name, use_cache=False): super(_TestPreparer, self).__init__('test', 20) self._name = name + self.set_cache(use_cache, name) def create_resource(self, name, **kwargs): traces.append('create ' + self._name) @@ -28,6 +29,33 @@ class _TestClassSample(unittest.TestCase): def example_test(self): pass +class _CachedTestClassSample(unittest.TestCase): + @_TestPreparer('A', True) + @_TestPreparer('B', True) + def example_test(self): + pass + + @_TestPreparer('A', True) + @_TestPreparer('C', True) + def example_test_2(self): + pass + + @_TestPreparer('A', True) + @_TestPreparer('C', False) + def example_test_3(self): + pass + + @_TestPreparer('A', True) + @_TestPreparer('C', False) + def fail_test(self): + raise Exception("Intentional failure to test cache.") + + @_TestPreparer('PARENT', True) + @_TestPreparer('A', True) + @_TestPreparer('C', True) + def parent_cache_test(self): + pass + def test_preparer_order(): # Mimic a real test runner, for better compat 2.7 / 3.x @@ -40,3 +68,57 @@ def test_preparer_order(): assert traces[1] == 'create B' assert traces[2] == 'remove B' assert traces[3] == 'remove A' + + + +def test_cached_preparer_order(): + # Mimic a real test runner, for better compat 2.7 / 3.x + suite = unittest.TestSuite() + suite.addTest(_CachedTestClassSample('example_test')) + suite.addTest(_CachedTestClassSample('example_test_2')) + suite.addTest(_CachedTestClassSample('example_test_3')) + unittest.TextTestRunner().run(suite) + + assert len(traces) == 5 + assert traces[0] == 'create A' + assert traces[1] == 'create B' + assert traces[2] == 'create C' + assert traces[3] == 'create C' + assert traces[4] == 'remove C' # One of the C's is cached, one is not. + + # Note: unit test runner doesn't trigger the pytest session fixture that deletes resources when all tests are done. + # let's run that manually now to test it. + AbstractPreparer._perform_pending_deletes() + + assert len(traces) == 8 + # we're technically relying on an implementation detail (for earlier versions of python + # dicts did not guarantee ordering by insertion order, later versions do) + # to order removal by relying on dict ordering. + assert traces[5] == 'remove C' + assert traces[6] == 'remove B' + assert traces[7] == 'remove A' + + +def test_cached_preparer_failure(): + # Mimic a real test runner, for better compat 2.7 / 3.x + suite = unittest.TestSuite() + suite.addTest(_CachedTestClassSample('fail_test')) + suite.addTest(_CachedTestClassSample('example_test')) + suite.addTest(_CachedTestClassSample('example_test_2')) + suite.addTest(_CachedTestClassSample('example_test_3')) + unittest.TextTestRunner().run(suite) + AbstractPreparer._perform_pending_deletes() + # the key here is that the cached A and noncached C is used even though the test failed, and successfully removed later. + assert traces == ['create A', 'create C', 'remove C', 'create B', 'create C', 'create C', 'remove C', 'remove C', 'remove B', 'remove A'] + + +def test_cached_preparer_parent_cache_keying(): + # Mimic a real test runner, for better compat 2.7 / 3.x + suite = unittest.TestSuite() + suite.addTest(_CachedTestClassSample('example_test_2')) + suite.addTest(_CachedTestClassSample('example_test_3')) + suite.addTest(_CachedTestClassSample('parent_cache_test')) + unittest.TextTestRunner().run(suite) + AbstractPreparer._perform_pending_deletes() + # The key here is to observe that changing a parent preparer means the child preparers can't utilize a cache from a cache-stack not including that parent. + assert traces == ['create A', 'create C', 'create C', 'remove C', 'create PARENT', 'create A', 'create C', 'remove C', 'remove A', 'remove PARENT', 'remove C', 'remove A'] diff --git a/tools/azure-sdk-tools/packaging_tools/code_report.py b/tools/azure-sdk-tools/packaging_tools/code_report.py index a705a7094253..672a26aef778 100644 --- a/tools/azure-sdk-tools/packaging_tools/code_report.py +++ b/tools/azure-sdk-tools/packaging_tools/code_report.py @@ -15,7 +15,7 @@ try: # If I'm started as a module __main__ from .venvtools import create_venv_with_package -except ModuleNotFoundError: +except (ModuleNotFoundError, ImportError) as e: # If I'm started by my main directly from venvtools import create_venv_with_package @@ -149,7 +149,7 @@ def merge_report(report_paths): merged_report["operations"].update(report_json["operations"]) return merged_report -def main(input_parameter: str, version: Optional[str] = None, no_venv: bool = False, pypi: bool = False, last_pypi: bool = False): +def main(input_parameter: str, version: Optional[str] = None, no_venv: bool = False, pypi: bool = False, last_pypi: bool = False, output: str = None): package_name, module_name = parse_input(input_parameter) path_to_package = resolve_package_directory(package_name) @@ -177,6 +177,8 @@ def main(input_parameter: str, version: Optional[str] = None, no_venv: bool = Fa version, input_parameter ] + if output is not None: + args.append("--output=" + output) try: subprocess.check_call(args) except subprocess.CalledProcessError: @@ -200,7 +202,10 @@ def main(input_parameter: str, version: Optional[str] = None, no_venv: bool = Fa if module_for_path: output_filename = output_folder / Path(module_for_path+".json") else: - output_filename = output_folder / Path("report.json") + if output is not None: + output_filename = output + else: + output_filename = output_folder / Path("report.json") with open(output_filename, "w") as fd: json.dump(report, fd, indent=2) @@ -209,7 +214,10 @@ def main(input_parameter: str, version: Optional[str] = None, no_venv: bool = Fa if len(result) > 1: merged_report = merge_report(result) - output_filename = output_folder / Path("merged_report.json") + if output is not None: + output_filename = output + else: + output_filename = output_folder / Path("merged_report.json") with open(output_filename, "w") as fd: json.dump(merged_report, fd, indent=2) _LOGGER.info(f"Merged report written to {output_filename}") @@ -280,9 +288,11 @@ def get_sub_module_part(package_name, module_name): parser.add_argument("--debug", dest="debug", action="store_true", help="Verbosity in DEBUG mode") - + parser.add_argument("--output", + dest="output", + help="Override output path.") args = parser.parse_args() logging.basicConfig(level=logging.DEBUG if args.debug else logging.INFO) - main(args.package_name, args.version, args.no_venv, args.pypi, args.last_pypi) + main(args.package_name, args.version, args.no_venv, args.pypi, args.last_pypi, args.output) diff --git a/tools/azure-sdk-tools/packaging_tools/templates/README.md b/tools/azure-sdk-tools/packaging_tools/templates/README.md index dc645c4b78a6..293df1c06684 100644 --- a/tools/azure-sdk-tools/packaging_tools/templates/README.md +++ b/tools/azure-sdk-tools/packaging_tools/templates/README.md @@ -2,7 +2,7 @@ This is the Microsoft Azure {{package_pprint_name}} Client Library. This package has been tested with Python 2.7, 3.5, 3.6, 3.7 and 3.8. -For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/sdk) +For a more complete view of Azure libraries, see the [Github repo](https://github.com/Azure/azure-sdk-for-python/) # Usage